From eac174f2741a08d8deb8aae59a7f778ef9b5d770 Mon Sep 17 00:00:00 2001 From: afresh1 Date: Wed, 15 Feb 2023 01:36:12 +0000 Subject: [PATCH] Fix merge issues, remove excess files - match perl-5.36.0 dist OK bluhm@ a good time naddy@ --- gnu/usr.bin/perl/AUTHORS | 118 +- gnu/usr.bin/perl/Configure | 1202 +- gnu/usr.bin/perl/Cross/Makefile-cross-SH | 12 +- gnu/usr.bin/perl/Cross/cflags-cross-arm | 17 +- gnu/usr.bin/perl/Cross/config.sh-arm-linux | 55 +- .../perl/Cross/config.sh-arm-linux-n770 | 55 +- gnu/usr.bin/perl/EXTERN.h | 4 +- gnu/usr.bin/perl/INSTALL | 142 +- gnu/usr.bin/perl/INTERN.h | 3 +- gnu/usr.bin/perl/MANIFEST | 1093 +- gnu/usr.bin/perl/META.json | 88 +- gnu/usr.bin/perl/META.yml | 86 +- gnu/usr.bin/perl/Makefile.SH | 214 +- gnu/usr.bin/perl/Makefile.micro | 7 +- gnu/usr.bin/perl/NetWare/CLIBsdio.h | 180 - gnu/usr.bin/perl/NetWare/CLIBstr.h | 120 - gnu/usr.bin/perl/NetWare/CLIBstuf.c | 151 - gnu/usr.bin/perl/NetWare/CLIBstuf.h | 40 - gnu/usr.bin/perl/NetWare/MP.imp | 5 - gnu/usr.bin/perl/NetWare/Main.c | 182 - gnu/usr.bin/perl/NetWare/Makefile | 1409 - gnu/usr.bin/perl/NetWare/NWTInfo.c | 720 - gnu/usr.bin/perl/NetWare/NWUtil.c | 858 - gnu/usr.bin/perl/NetWare/Nwmain.c | 1411 - gnu/usr.bin/perl/NetWare/Nwpipe.c | 704 - gnu/usr.bin/perl/NetWare/bat/Buildtype.bat | 53 - gnu/usr.bin/perl/NetWare/bat/SetCodeWar.bat | 43 - gnu/usr.bin/perl/NetWare/bat/SetNWBld.bat | 59 - gnu/usr.bin/perl/NetWare/bat/Setnlmsdk.bat | 28 - gnu/usr.bin/perl/NetWare/bat/ToggleD2.bat | 40 - gnu/usr.bin/perl/NetWare/config.wc | 1151 - gnu/usr.bin/perl/NetWare/config_H.wc | 3259 - gnu/usr.bin/perl/NetWare/config_h.PL | 119 - gnu/usr.bin/perl/NetWare/config_sh.PL | 83 - gnu/usr.bin/perl/NetWare/deb.h | 47 - gnu/usr.bin/perl/NetWare/dl_netware.xs | 191 - gnu/usr.bin/perl/NetWare/intdef.h | 86 - gnu/usr.bin/perl/NetWare/interface.c | 205 - gnu/usr.bin/perl/NetWare/interface.cpp | 217 - gnu/usr.bin/perl/NetWare/interface.h | 47 - gnu/usr.bin/perl/NetWare/iperlhost.h | 48 - gnu/usr.bin/perl/NetWare/netware.h | 97 - gnu/usr.bin/perl/NetWare/nw5.c | 1122 - gnu/usr.bin/perl/NetWare/nw5iop.h | 205 - gnu/usr.bin/perl/NetWare/nw5sck.c | 313 - gnu/usr.bin/perl/NetWare/nw5sck.h | 130 - gnu/usr.bin/perl/NetWare/nw5thread.c | 80 - gnu/usr.bin/perl/NetWare/nw5thread.h | 181 - gnu/usr.bin/perl/NetWare/nwhashcls.cpp | 269 - gnu/usr.bin/perl/NetWare/nwhashcls.h | 79 - gnu/usr.bin/perl/NetWare/nwperlhost.h | 1699 - gnu/usr.bin/perl/NetWare/nwperlsys.c | 216 - gnu/usr.bin/perl/NetWare/nwperlsys.h | 1383 - gnu/usr.bin/perl/NetWare/nwpipe.h | 62 - gnu/usr.bin/perl/NetWare/nwplglob.c | 90 - gnu/usr.bin/perl/NetWare/nwplglob.h | 27 - gnu/usr.bin/perl/NetWare/nwstdio.h | 122 - gnu/usr.bin/perl/NetWare/nwtinfo.h | 73 - gnu/usr.bin/perl/NetWare/nwutil.h | 99 - gnu/usr.bin/perl/NetWare/nwvmem.h | 340 - gnu/usr.bin/perl/NetWare/perllib.cpp | 273 - gnu/usr.bin/perl/NetWare/splittree.pl | 24 - gnu/usr.bin/perl/NetWare/sv_nw.c | 34 - gnu/usr.bin/perl/NetWare/t/NWModify.pl | 128 - gnu/usr.bin/perl/NetWare/t/NWScripts.pl | 243 - gnu/usr.bin/perl/NetWare/t/Readme.txt | 101 - gnu/usr.bin/perl/NetWare/testnlm/echo/echo.c | 31 - gnu/usr.bin/perl/NetWare/testnlm/type/type.c | 48 - gnu/usr.bin/perl/NetWare/win32ish.h | 46 - gnu/usr.bin/perl/Porting/Glossary | 90 +- gnu/usr.bin/perl/Porting/Maintainers.pl | 279 +- gnu/usr.bin/perl/Porting/README.pod | 49 +- gnu/usr.bin/perl/Porting/add-package.pl | 4 +- gnu/usr.bin/perl/Porting/bench.pl | 21 +- gnu/usr.bin/perl/Porting/bisect-runner.pl | 95 +- gnu/usr.bin/perl/Porting/check83.pl | 82 - gnu/usr.bin/perl/Porting/checkAUTHORS.pl | 160 +- gnu/usr.bin/perl/Porting/checkURL.pl | 1 - gnu/usr.bin/perl/Porting/checkcfguse.pl | 3 +- gnu/usr.bin/perl/Porting/checkcfgvar.pl | 2 - gnu/usr.bin/perl/Porting/cherrymaint | 103 - gnu/usr.bin/perl/Porting/cmpVERSION.pl | 39 +- gnu/usr.bin/perl/Porting/config.sh | 397 +- gnu/usr.bin/perl/Porting/config_H | 32 +- gnu/usr.bin/perl/Porting/core-cpan-diff | 8 +- .../perl/Porting/corelist-perldelta.pl | 6 +- gnu/usr.bin/perl/Porting/corelist.pl | 17 +- gnu/usr.bin/perl/Porting/deparse-skips.txt | 68 +- gnu/usr.bin/perl/Porting/epigraphs.pod | 239 + gnu/usr.bin/perl/Porting/exec-bit.txt | 7 +- .../perl/Porting/how_to_write_a_perldelta.pod | 160 +- gnu/usr.bin/perl/Porting/make_modlib_cpan.pl | 90 - gnu/usr.bin/perl/Porting/makemeta | 46 +- gnu/usr.bin/perl/Porting/makerel | 219 +- .../perl/Porting/perldelta_template.pod | 2 +- .../perl/Porting/perlhist_calculate.pl | 2 +- gnu/usr.bin/perl/Porting/pod_lib.pl | 48 +- gnu/usr.bin/perl/Porting/pod_rules.pl | 5 +- gnu/usr.bin/perl/Porting/pumpkin.pod | 27 +- .../Porting/release_announcement_template.txt | 11 +- .../perl/Porting/release_managers_guide.pod | 401 +- gnu/usr.bin/perl/Porting/release_schedule.pod | 47 +- gnu/usr.bin/perl/Porting/sync-with-cpan | 47 +- gnu/usr.bin/perl/Porting/todo.pod | 26 +- gnu/usr.bin/perl/README | 3 +- gnu/usr.bin/perl/README.bs2000 | 2 +- gnu/usr.bin/perl/README.cygwin | 6 +- gnu/usr.bin/perl/README.dos | 331 - gnu/usr.bin/perl/README.haiku | 4 +- gnu/usr.bin/perl/README.irix | 4 +- gnu/usr.bin/perl/README.macos | 30 - gnu/usr.bin/perl/README.macosx | 8 +- gnu/usr.bin/perl/README.netware | 229 - gnu/usr.bin/perl/README.os2 | 14 +- gnu/usr.bin/perl/README.os390 | 523 +- gnu/usr.bin/perl/README.qnx | 2 +- gnu/usr.bin/perl/README.symbian | 434 - gnu/usr.bin/perl/README.synology | 2 +- gnu/usr.bin/perl/README.vms | 93 +- gnu/usr.bin/perl/README.win32 | 272 +- gnu/usr.bin/perl/XSUB.h | 199 +- gnu/usr.bin/perl/amigaos4/amigaio.c | 1864 +- gnu/usr.bin/perl/autodoc.pl | 1952 +- gnu/usr.bin/perl/av.c | 765 +- gnu/usr.bin/perl/av.h | 143 +- gnu/usr.bin/perl/caretx.c | 10 - gnu/usr.bin/perl/cflags.SH | 92 +- gnu/usr.bin/perl/charclass_invlists.h | 27217 ++++--- gnu/usr.bin/perl/config_h.SH | 110 +- gnu/usr.bin/perl/configpm | 15 +- gnu/usr.bin/perl/configure.com | 38 +- gnu/usr.bin/perl/cop.h | 928 +- gnu/usr.bin/perl/cpan/Archive-Tar/bin/ptar | 1 + .../perl/cpan/Archive-Tar/bin/ptardiff | 1 + .../perl/cpan/Archive-Tar/lib/Archive/Tar.pm | 10 +- .../Archive-Tar/lib/Archive/Tar/Constant.pm | 15 +- .../cpan/Archive-Tar/lib/Archive/Tar/File.pm | 6 +- gnu/usr.bin/perl/cpan/CPAN/lib/App/Cpan.pm | 150 +- gnu/usr.bin/perl/cpan/CPAN/lib/CPAN.pm | 50 +- .../perl/cpan/CPAN/lib/CPAN/Distribution.pm | 112 +- gnu/usr.bin/perl/cpan/CPAN/lib/CPAN/FTP.pm | 206 +- .../perl/cpan/CPAN/lib/CPAN/FirstTime.pm | 46 +- .../perl/cpan/CPAN/lib/CPAN/HandleConfig.pm | 28 +- gnu/usr.bin/perl/cpan/CPAN/lib/CPAN/Index.pm | 4 +- gnu/usr.bin/perl/cpan/CPAN/scripts/cpan | 4 +- .../perl/cpan/Compress-Raw-Bzip2/Bzip2.xs | 167 +- .../cpan/Compress-Raw-Bzip2/bzip2-src/bzlib.c | 226 +- .../Compress-Raw-Bzip2/bzip2-src/compress.c | 4 +- .../lib/Compress/Raw/Bzip2.pm | 17 +- .../Compress-Raw-Bzip2/private/MakeUtil.pm | 25 +- .../cpan/Compress-Raw-Bzip2/t/000prereq.t | 17 +- .../perl/cpan/Compress-Raw-Zlib/Makefile.PL | 107 +- .../perl/cpan/Compress-Raw-Zlib/Zlib.xs | 358 +- .../perl/cpan/Compress-Raw-Zlib/config.in | 12 +- .../lib/Compress/Raw/Zlib.pm | 181 +- .../Compress-Raw-Zlib/private/MakeUtil.pm | 25 +- .../perl/cpan/Compress-Raw-Zlib/t/02zlib.t | 567 +- .../perl/cpan/Compress-Raw-Zlib/t/07bufsize.t | 36 +- .../cpan/Compress-Raw-Zlib/zlib-src/crc32.c | 1258 +- .../cpan/Compress-Raw-Zlib/zlib-src/deflate.c | 26 +- .../cpan/Compress-Raw-Zlib/zlib-src/deflate.h | 2 +- .../cpan/Compress-Raw-Zlib/zlib-src/inflate.c | 70 +- .../cpan/Compress-Raw-Zlib/zlib-src/trees.c | 25 +- .../cpan/Compress-Raw-Zlib/zlib-src/zconf.h | 168 +- .../cpan/Compress-Raw-Zlib/zlib-src/zutil.c | 4 +- .../cpan/Compress-Raw-Zlib/zlib-src/zutil.h | 23 +- gnu/usr.bin/perl/cpan/Config-Perl-V/V.pm | 165 +- gnu/usr.bin/perl/cpan/DB_File/DB_File.pm | 202 +- gnu/usr.bin/perl/cpan/DB_File/DB_File.xs | 9 +- gnu/usr.bin/perl/cpan/DB_File/DB_File_BS | 6 - gnu/usr.bin/perl/cpan/DB_File/Makefile.PL | 62 +- gnu/usr.bin/perl/cpan/Digest-MD5/MD5.pm | 21 +- gnu/usr.bin/perl/cpan/Digest-MD5/MD5.xs | 371 +- gnu/usr.bin/perl/cpan/Digest-MD5/Makefile.PL | 6 +- gnu/usr.bin/perl/cpan/Digest-MD5/t/files.t | 11 +- gnu/usr.bin/perl/cpan/Digest-MD5/t/threads.t | 1 + gnu/usr.bin/perl/cpan/Digest/Digest.pm | 323 - gnu/usr.bin/perl/cpan/Digest/Digest/base.pm | 100 - gnu/usr.bin/perl/cpan/Digest/Digest/file.pm | 85 - gnu/usr.bin/perl/cpan/Digest/t/base.t | 119 +- gnu/usr.bin/perl/cpan/Digest/t/digest.t | 4 +- gnu/usr.bin/perl/cpan/Digest/t/file.t | 83 +- gnu/usr.bin/perl/cpan/Encode/Encode.pm | 49 +- gnu/usr.bin/perl/cpan/Encode/Encode.xs | 25 +- gnu/usr.bin/perl/cpan/Encode/JP/JP.pm | 6 +- gnu/usr.bin/perl/cpan/Encode/Makefile.PL | 6 +- .../perl/cpan/Encode/Unicode/Unicode.pm | 16 +- .../perl/cpan/Encode/Unicode/Unicode.xs | 6 +- gnu/usr.bin/perl/cpan/Encode/bin/enc2xs | 15 +- gnu/usr.bin/perl/cpan/Encode/bin/encguess | 4 +- .../perl/cpan/Encode/lib/Encode/GSM0338.pm | 177 +- gnu/usr.bin/perl/cpan/Encode/t/Unicode.t | 4 +- gnu/usr.bin/perl/cpan/Encode/t/enc_data.t | 4 +- gnu/usr.bin/perl/cpan/Encode/t/enc_module.t | 4 +- gnu/usr.bin/perl/cpan/Encode/t/encoding.t | 2 +- gnu/usr.bin/perl/cpan/Encode/t/jperl.t | 4 +- gnu/usr.bin/perl/cpan/Encode/t/taint.t | 8 +- .../ExtUtils-Install/lib/ExtUtils/Install.pm | 187 +- .../lib/ExtUtils/Installed.pm | 8 +- .../ExtUtils-Install/lib/ExtUtils/Packlist.pm | 7 +- .../perl/cpan/ExtUtils-Install/t/Install.t | 2 +- .../cpan/ExtUtils-Install/t/InstallWithMM.t | 2 +- .../perl/cpan/ExtUtils-Install/t/Installed.t | 492 +- .../t/lib/MakeMaker/Test/Setup/BFD.pm | 6 +- .../lib/ExtUtils/Command.pm | 3 +- .../lib/ExtUtils/Command/MM.pm | 2 +- .../lib/ExtUtils/Liblist.pm | 3 +- .../lib/ExtUtils/Liblist/Kid.pm | 10 +- .../ExtUtils-MakeMaker/lib/ExtUtils/MM.pm | 4 +- .../ExtUtils-MakeMaker/lib/ExtUtils/MM_AIX.pm | 3 +- .../ExtUtils-MakeMaker/lib/ExtUtils/MM_Any.pm | 5 +- .../lib/ExtUtils/MM_BeOS.pm | 3 +- .../lib/ExtUtils/MM_Cygwin.pm | 13 +- .../ExtUtils-MakeMaker/lib/ExtUtils/MM_DOS.pm | 3 +- .../lib/ExtUtils/MM_Darwin.pm | 28 +- .../lib/ExtUtils/MM_MacOS.pm | 3 +- .../ExtUtils-MakeMaker/lib/ExtUtils/MM_NW5.pm | 3 +- .../ExtUtils-MakeMaker/lib/ExtUtils/MM_OS2.pm | 3 +- .../ExtUtils-MakeMaker/lib/ExtUtils/MM_QNX.pm | 3 +- .../lib/ExtUtils/MM_UWIN.pm | 3 +- .../lib/ExtUtils/MM_Unix.pm | 45 +- .../ExtUtils-MakeMaker/lib/ExtUtils/MM_VMS.pm | 3 +- .../ExtUtils-MakeMaker/lib/ExtUtils/MM_VOS.pm | 3 +- .../lib/ExtUtils/MM_Win32.pm | 15 +- .../lib/ExtUtils/MM_Win95.pm | 3 +- .../ExtUtils-MakeMaker/lib/ExtUtils/MY.pm | 2 +- .../lib/ExtUtils/MakeMaker.pm | 126 +- .../lib/ExtUtils/MakeMaker/Config.pm | 3 +- .../lib/ExtUtils/MakeMaker/FAQ.pod | 2 +- .../lib/ExtUtils/MakeMaker/Locale.pm | 3 +- .../lib/ExtUtils/MakeMaker/Tutorial.pod | 2 +- .../lib/ExtUtils/MakeMaker/version.pm | 5 +- .../lib/ExtUtils/MakeMaker/version/regex.pm | 3 +- .../lib/ExtUtils/Mkbootstrap.pm | 8 +- .../lib/ExtUtils/Mksymlists.pm | 3 +- .../lib/ExtUtils/testlib.pm | 2 +- .../ExtUtils-MakeMaker/t/FIRST_MAKEFILE.t | 1 + .../cpan/ExtUtils-MakeMaker/t/INSTALL_BASE.t | 1 + .../perl/cpan/ExtUtils-MakeMaker/t/MM_Unix.t | 1 + .../perl/cpan/ExtUtils-MakeMaker/t/basic.t | 8 +- .../cpan/ExtUtils-MakeMaker/t/build_man.t | 1 + .../perl/cpan/ExtUtils-MakeMaker/t/cd.t | 4 +- .../perl/cpan/ExtUtils-MakeMaker/t/echo.t | 2 +- .../cpan/ExtUtils-MakeMaker/t/eu_command.t | 5 + .../t/lib/MakeMaker/Test/NoXS.pm | 18 +- .../t/lib/MakeMaker/Test/Setup/XS.pm | 19 +- .../t/lib/MakeMaker/Test/Utils.pm | 17 +- .../ExtUtils-MakeMaker/t/min_perl_version.t | 8 +- .../perl/cpan/ExtUtils-MakeMaker/t/miniperl.t | 1 + .../perl/cpan/ExtUtils-MakeMaker/t/oneliner.t | 3 + .../cpan/ExtUtils-MakeMaker/t/parse_version.t | 17 +- .../cpan/ExtUtils-MakeMaker/t/pm_to_blib.t | 1 + .../cpan/ExtUtils-MakeMaker/t/postamble.t | 1 + .../perl/cpan/ExtUtils-MakeMaker/t/prereq.t | 13 +- .../ExtUtils-MakeMaker/t/several_authors.t | 2 +- .../cpan/ExtUtils-MakeMaker/t/testrules.yml | 11 - .../perl/cpan/ExtUtils-MakeMaker/t/unicode.t | 1 + .../perl/cpan/ExtUtils-MakeMaker/t/vstrings.t | 2 +- .../ExtUtils-MakeMaker/t/writemakefile_args.t | 1 + .../lib/ExtUtils/MANIFEST.SKIP | 3 + .../lib/ExtUtils/Manifest.pm | 8 +- .../perl/cpan/File-Fetch/lib/File/Fetch.pm | 23 +- .../perl/cpan/File-Path/lib/File/Path.pm | 6 +- gnu/usr.bin/perl/cpan/File-Path/t/Path.t | 24 +- gnu/usr.bin/perl/cpan/File-Path/t/Path_root.t | 1 - .../perl/cpan/Filter-Util-Call/Call.pm | 2 +- .../perl/cpan/Filter-Util-Call/Call.xs | 2 +- .../perl/cpan/Filter-Util-Call/t/call.t | 52 +- .../Filter-Util-Call/t/rt_54452-rebless.t | 7 + .../perl/cpan/Getopt-Long/lib/Getopt/Long.pm | 62 +- .../perl/cpan/HTTP-Tiny/lib/HTTP/Tiny.pm | 174 +- gnu/usr.bin/perl/cpan/HTTP-Tiny/t/001_api.t | 2 +- .../perl/cpan/HTTP-Tiny/t/002_croakage.t | 19 +- gnu/usr.bin/perl/cpan/HTTP-Tiny/t/100_get.t | 4 +- gnu/usr.bin/perl/cpan/HTTP-Tiny/t/101_head.t | 5 +- gnu/usr.bin/perl/cpan/HTTP-Tiny/t/102_put.t | 8 +- .../perl/cpan/HTTP-Tiny/t/103_delete.t | 5 +- gnu/usr.bin/perl/cpan/HTTP-Tiny/t/104_post.t | 5 +- .../perl/cpan/HTTP-Tiny/t/110_mirror.t | 5 +- gnu/usr.bin/perl/cpan/HTTP-Tiny/t/140_proxy.t | 15 +- .../perl/cpan/HTTP-Tiny/t/150_post_form.t | 10 +- gnu/usr.bin/perl/cpan/HTTP-Tiny/t/Util.pm | 6 + gnu/usr.bin/perl/cpan/IO-Compress/Makefile.PL | 35 +- .../perl/cpan/IO-Compress/bin/zipdetails | 1950 +- .../cpan/IO-Compress/lib/Compress/Zlib.pm | 207 +- .../cpan/IO-Compress/lib/File/GlobMapper.pm | 4 +- .../lib/IO/Compress/Adapter/Bzip2.pm | 33 +- .../lib/IO/Compress/Adapter/Deflate.pm | 39 +- .../lib/IO/Compress/Adapter/Identity.pm | 19 +- .../cpan/IO-Compress/lib/IO/Compress/Base.pm | 57 +- .../lib/IO/Compress/Base/Common.pm | 10 +- .../cpan/IO-Compress/lib/IO/Compress/Bzip2.pm | 35 +- .../IO-Compress/lib/IO/Compress/Deflate.pm | 36 +- .../cpan/IO-Compress/lib/IO/Compress/FAQ.pod | 72 +- .../cpan/IO-Compress/lib/IO/Compress/Gzip.pm | 58 +- .../lib/IO/Compress/Gzip/Constants.pm | 12 +- .../IO-Compress/lib/IO/Compress/RawDeflate.pm | 69 +- .../cpan/IO-Compress/lib/IO/Compress/Zip.pm | 313 +- .../lib/IO/Compress/Zip/Constants.pm | 19 +- .../lib/IO/Compress/Zlib/Constants.pm | 4 +- .../IO-Compress/lib/IO/Compress/Zlib/Extra.pm | 40 +- .../lib/IO/Uncompress/Adapter/Bunzip2.pm | 23 +- .../lib/IO/Uncompress/Adapter/Identity.pm | 14 +- .../lib/IO/Uncompress/Adapter/Inflate.pm | 27 +- .../lib/IO/Uncompress/AnyInflate.pm | 44 +- .../lib/IO/Uncompress/AnyUncompress.pm | 81 +- .../IO-Compress/lib/IO/Uncompress/Base.pm | 272 +- .../IO-Compress/lib/IO/Uncompress/Bunzip2.pm | 39 +- .../IO-Compress/lib/IO/Uncompress/Gunzip.pm | 71 +- .../IO-Compress/lib/IO/Uncompress/Inflate.pm | 53 +- .../lib/IO/Uncompress/RawInflate.pm | 83 +- .../IO-Compress/lib/IO/Uncompress/Unzip.pm | 239 +- .../perl/cpan/IO-Compress/private/MakeUtil.pm | 25 +- .../perl/cpan/IO-Compress/t/000prereq.t | 19 +- .../perl/cpan/IO-Compress/t/020isize.t | 23 +- .../cpan/IO-Compress/t/101truncate-bzip2.t | 2 +- .../cpan/IO-Compress/t/101truncate-deflate.t | 2 +- .../cpan/IO-Compress/t/101truncate-gzip.t | 2 +- .../IO-Compress/t/101truncate-rawdeflate.t | 35 +- .../perl/cpan/IO-Compress/t/101truncate-zip.t | 2 +- .../IO-Compress/t/105oneshot-zip-store-only.t | 7 +- .../cpan/IO-Compress/t/compress/oneshot.pl | 301 +- .../perl/cpan/IO-Compress/t/compress/prime.pl | 18 +- .../cpan/IO-Socket-IP/lib/IO/Socket/IP.pm | 88 +- .../cpan/IO-Socket-IP/t/01local-client-v4.t | 1 + .../cpan/IO-Socket-IP/t/02local-server-v4.t | 1 + .../cpan/IO-Socket-IP/t/03local-cross-v4.t | 1 + .../cpan/IO-Socket-IP/t/05local-server-v6.t | 1 + .../cpan/IO-Socket-IP/t/06local-cross-v6.t | 1 + .../perl/cpan/IO-Socket-IP/t/11sockopts.t | 1 + .../perl/cpan/IO-Socket-IP/t/15io-socket.t | 1 + .../perl/cpan/IO-Socket-IP/t/16v6only.t | 1 + gnu/usr.bin/perl/cpan/IPC-SysV/Makefile.PL | 3 +- gnu/usr.bin/perl/cpan/IPC-SysV/SysV.xs | 18 +- gnu/usr.bin/perl/cpan/IPC-SysV/lib/IPC/Msg.pm | 4 +- .../perl/cpan/IPC-SysV/lib/IPC/Semaphore.pm | 4 +- .../perl/cpan/IPC-SysV/lib/IPC/SharedMem.pm | 2 +- .../perl/cpan/IPC-SysV/lib/IPC/SysV.pm | 10 +- gnu/usr.bin/perl/cpan/IPC-SysV/t/ipcsysv.t | 9 +- gnu/usr.bin/perl/cpan/IPC-SysV/t/msg.t | 11 +- gnu/usr.bin/perl/cpan/IPC-SysV/t/pod.t | 14 +- gnu/usr.bin/perl/cpan/IPC-SysV/t/podcov.t | 10 +- gnu/usr.bin/perl/cpan/IPC-SysV/t/sem.t | 8 +- gnu/usr.bin/perl/cpan/IPC-SysV/t/shm.t | 8 +- gnu/usr.bin/perl/cpan/JSON-PP/lib/JSON/PP.pm | 14 +- .../perl/cpan/JSON-PP/t/zero-mojibake.t | 1 + gnu/usr.bin/perl/cpan/MIME-Base64/Base64.pm | 188 - gnu/usr.bin/perl/cpan/MIME-Base64/Base64.xs | 6 - .../perl/cpan/MIME-Base64/QuotedPrint.pm | 114 - .../lib/Math/BigInt/FastCalc.pm | 148 +- .../cpan/Math-BigInt-FastCalc/t/bigintfc.t | 1011 +- .../cpan/Math-BigInt-FastCalc/t/bootstrap.t | 2 +- .../perl/cpan/Math-BigInt-FastCalc/t/leak.t | 2 +- .../cpan/Math-BigInt-FastCalc/t/mbi_rand.t | 2 +- .../cpan/Math-BigInt/lib/Math/BigFloat.pm | 1544 +- .../perl/cpan/Math-BigInt/lib/Math/BigInt.pm | 2282 +- .../cpan/Math-BigInt/lib/Math/BigInt/Calc.pm | 1055 +- .../Math-BigInt/t/Math/BigFloat/Subclass.pm | 16 +- .../Math-BigInt/t/Math/BigInt/BareCalc.pm | 7 +- .../Math-BigInt/t/Math/BigInt/Subclass.pm | 19 +- gnu/usr.bin/perl/cpan/Math-BigInt/t/_e_math.t | 2 +- gnu/usr.bin/perl/cpan/Math-BigInt/t/alias.inc | 2 +- .../perl/cpan/Math-BigInt/t/bare_mbf.t | 4 +- .../perl/cpan/Math-BigInt/t/bare_mbi.t | 4 +- .../perl/cpan/Math-BigInt/t/bare_mif.t | 2 +- .../perl/cpan/Math-BigInt/t/big_pi_e.t | 2 +- .../perl/cpan/Math-BigInt/t/bigfltpm.inc | 152 +- .../perl/cpan/Math-BigInt/t/bigfltpm.t | 4 +- gnu/usr.bin/perl/cpan/Math-BigInt/t/bigintc.t | 122 +- .../perl/cpan/Math-BigInt/t/bigintpm.inc | 197 +- .../perl/cpan/Math-BigInt/t/bigintpm.t | 4 +- gnu/usr.bin/perl/cpan/Math-BigInt/t/bigints.t | 2 +- gnu/usr.bin/perl/cpan/Math-BigInt/t/biglog.t | 2 +- gnu/usr.bin/perl/cpan/Math-BigInt/t/bigroot.t | 2 +- gnu/usr.bin/perl/cpan/Math-BigInt/t/calling.t | 70 - gnu/usr.bin/perl/cpan/Math-BigInt/t/config.t | 2 +- .../perl/cpan/Math-BigInt/t/const_mbf.t | 16 - .../perl/cpan/Math-BigInt/t/constant.t | 46 - .../perl/cpan/Math-BigInt/t/downgrade.t | 492 +- .../perl/cpan/Math-BigInt/t/from_hex-mbf.t | 11 +- gnu/usr.bin/perl/cpan/Math-BigInt/t/inf_nan.t | 2 +- gnu/usr.bin/perl/cpan/Math-BigInt/t/isa.t | 4 +- .../perl/cpan/Math-BigInt/t/lib_load.t | 32 - gnu/usr.bin/perl/cpan/Math-BigInt/t/mbf_ali.t | 2 +- gnu/usr.bin/perl/cpan/Math-BigInt/t/mbi_ali.t | 2 +- .../perl/cpan/Math-BigInt/t/mbi_rand.t | 2 +- .../perl/cpan/Math-BigInt/t/mbimbf.inc | 55 +- gnu/usr.bin/perl/cpan/Math-BigInt/t/mbimbf.t | 2 +- gnu/usr.bin/perl/cpan/Math-BigInt/t/nan_cmp.t | 2 +- .../perl/cpan/Math-BigInt/t/new_overloaded.t | 2 +- .../perl/cpan/Math-BigInt/t/req_mbf0.t | 2 +- .../perl/cpan/Math-BigInt/t/req_mbf1.t | 2 +- .../perl/cpan/Math-BigInt/t/req_mbfa.t | 2 +- .../perl/cpan/Math-BigInt/t/req_mbfi.t | 2 +- .../perl/cpan/Math-BigInt/t/req_mbfn.t | 2 +- .../perl/cpan/Math-BigInt/t/req_mbfw.t | 2 +- gnu/usr.bin/perl/cpan/Math-BigInt/t/require.t | 2 +- gnu/usr.bin/perl/cpan/Math-BigInt/t/round.t | 2 +- gnu/usr.bin/perl/cpan/Math-BigInt/t/sub_ali.t | 2 +- gnu/usr.bin/perl/cpan/Math-BigInt/t/sub_mbf.t | 12 +- gnu/usr.bin/perl/cpan/Math-BigInt/t/sub_mbi.t | 12 +- gnu/usr.bin/perl/cpan/Math-BigInt/t/sub_mif.t | 2 +- gnu/usr.bin/perl/cpan/Math-BigInt/t/trap.t | 2 +- .../perl/cpan/Math-BigInt/t/upgrade.inc | 45 +- gnu/usr.bin/perl/cpan/Math-BigInt/t/upgrade.t | 26 +- .../perl/cpan/Math-BigInt/t/upgradef.t | 8 +- gnu/usr.bin/perl/cpan/Math-BigInt/t/use.t | 2 +- .../perl/cpan/Math-BigInt/t/use_lib1.t | 7 +- .../perl/cpan/Math-BigInt/t/use_lib2.t | 11 +- .../perl/cpan/Math-BigInt/t/use_lib3.t | 7 +- .../perl/cpan/Math-BigInt/t/use_lib4.t | 8 +- .../perl/cpan/Math-BigInt/t/use_mbfw.t | 2 +- .../perl/cpan/Math-BigInt/t/with_sub.t | 4 +- .../perl/cpan/Math-BigRat/lib/Math/BigRat.pm | 641 +- gnu/usr.bin/perl/cpan/Math-BigRat/t/big_ap.t | 2 +- .../perl/cpan/Math-BigRat/t/bigfltrt.t | 2 +- gnu/usr.bin/perl/cpan/Math-BigRat/t/bigrat.t | 76 +- .../perl/cpan/Math-BigRat/t/bigratpm.inc | 7 - .../perl/cpan/Math-BigRat/t/bigratpm.t | 4 +- .../perl/cpan/Math-BigRat/t/bigratup.t | 2 +- gnu/usr.bin/perl/cpan/Math-BigRat/t/bitwise.t | 2 +- gnu/usr.bin/perl/cpan/Math-BigRat/t/hang.t | 2 +- .../perl/cpan/Math-BigRat/t/requirer.t | 2 +- gnu/usr.bin/perl/cpan/Math-BigRat/t/trap.t | 2 +- .../lib/Module/Load/Conditional.pm | 5 +- gnu/usr.bin/perl/cpan/NEXT/lib/NEXT.pm | 2 +- gnu/usr.bin/perl/cpan/NEXT/t/actual.t | 15 +- .../lib/PerlIO/via/QuotedPrint.pm | 112 +- .../perl/cpan/Pod-Perldoc/lib/Pod/Perldoc.pm | 2 - .../cpan/Pod-Perldoc/lib/Pod/Perldoc/ToMan.pm | 18 +- .../perl/cpan/Pod-Simple/lib/Pod/Simple.pm | 6 +- .../Pod-Simple/lib/Pod/Simple/BlackBox.pm | 10 +- .../cpan/Pod-Simple/lib/Pod/Simple/Checker.pm | 2 +- .../cpan/Pod-Simple/lib/Pod/Simple/Debug.pm | 2 +- .../Pod-Simple/lib/Pod/Simple/DumpAsText.pm | 2 +- .../Pod-Simple/lib/Pod/Simple/DumpAsXML.pm | 2 +- .../cpan/Pod-Simple/lib/Pod/Simple/HTML.pm | 10 +- .../Pod-Simple/lib/Pod/Simple/HTMLBatch.pm | 13 +- .../Pod-Simple/lib/Pod/Simple/LinkSection.pm | 2 +- .../cpan/Pod-Simple/lib/Pod/Simple/Methody.pm | 2 +- .../Pod-Simple/lib/Pod/Simple/Progress.pm | 2 +- .../Pod-Simple/lib/Pod/Simple/PullParser.pm | 2 +- .../lib/Pod/Simple/PullParserEndToken.pm | 2 +- .../lib/Pod/Simple/PullParserStartToken.pm | 2 +- .../lib/Pod/Simple/PullParserTextToken.pm | 2 +- .../lib/Pod/Simple/PullParserToken.pm | 2 +- .../cpan/Pod-Simple/lib/Pod/Simple/RTF.pm | 4 +- .../cpan/Pod-Simple/lib/Pod/Simple/Search.pm | 2 +- .../Pod-Simple/lib/Pod/Simple/SimpleTree.pm | 2 +- .../cpan/Pod-Simple/lib/Pod/Simple/Text.pm | 2 +- .../Pod-Simple/lib/Pod/Simple/TextContent.pm | 2 +- .../Pod-Simple/lib/Pod/Simple/TiedOutFH.pm | 2 +- .../Pod-Simple/lib/Pod/Simple/Transcode.pm | 2 +- .../lib/Pod/Simple/TranscodeDumb.pm | 2 +- .../lib/Pod/Simple/TranscodeSmart.pm | 2 +- .../cpan/Pod-Simple/lib/Pod/Simple/XHTML.pm | 6 +- .../Pod-Simple/lib/Pod/Simple/XMLOutStream.pm | 2 +- gnu/usr.bin/perl/cpan/Pod-Simple/t/basic.t | 8 +- gnu/usr.bin/perl/cpan/Pod-Simple/t/corpus.t | 1 + .../perl/cpan/Pod-Simple/t/enc-chars.t | 1 + gnu/usr.bin/perl/cpan/Pod-Simple/t/encod04.t | 1 + gnu/usr.bin/perl/cpan/Pod-Simple/t/html01.t | 17 +- gnu/usr.bin/perl/cpan/Pod-Simple/t/render.t | 1 + gnu/usr.bin/perl/cpan/Pod-Simple/t/search10.t | 1 + gnu/usr.bin/perl/cpan/Pod-Simple/t/search12.t | 1 + gnu/usr.bin/perl/cpan/Pod-Simple/t/search20.t | 1 + gnu/usr.bin/perl/cpan/Pod-Simple/t/search22.t | 1 + gnu/usr.bin/perl/cpan/Pod-Simple/t/search26.t | 1 + gnu/usr.bin/perl/cpan/Pod-Simple/t/search28.t | 1 + gnu/usr.bin/perl/cpan/Pod-Simple/t/search50.t | 1 + gnu/usr.bin/perl/cpan/Pod-Simple/t/xhtml01.t | 13 +- .../perl/cpan/Pod-Usage/lib/Pod/Usage.pm | 124 +- .../perl/cpan/Pod-Usage/scripts/pod2usage.PL | 30 +- .../perl/cpan/Pod-Usage/t/pod/p2u_data.pl | 3 + .../perl/cpan/Pod-Usage/t/pod/pod2usage.t | 5 +- .../perl/cpan/Pod-Usage/t/pod/pod2usage.xr | 8 +- .../perl/cpan/Pod-Usage/t/pod/pod2usage2.t | 107 +- .../perl/cpan/Pod-Usage/t/pod/testp2pt.pl | 23 +- .../perl/cpan/Scalar-List-Utils/ListUtil.xs | 248 +- .../cpan/Scalar-List-Utils/lib/List/Util.pm | 83 +- .../Scalar-List-Utils/lib/List/Util/XS.pm | 2 +- .../cpan/Scalar-List-Utils/lib/Scalar/Util.pm | 78 +- .../cpan/Scalar-List-Utils/lib/Sub/Util.pm | 2 +- .../perl/cpan/Scalar-List-Utils/t/dualvar.t | 9 +- .../perl/cpan/Scalar-List-Utils/t/first.t | 2 +- .../perl/cpan/Scalar-List-Utils/t/isvstring.t | 4 +- .../perl/cpan/Scalar-List-Utils/t/pair.t | 3 +- .../perl/cpan/Scalar-List-Utils/t/product.t | 9 +- .../perl/cpan/Scalar-List-Utils/t/reduce.t | 2 +- .../perl/cpan/Scalar-List-Utils/t/tainted.t | 12 +- .../perl/cpan/Scalar-List-Utils/t/weak.t | 8 +- gnu/usr.bin/perl/cpan/Socket/Makefile.PL | 8 +- gnu/usr.bin/perl/cpan/Socket/Socket.pm | 28 +- gnu/usr.bin/perl/cpan/Socket/Socket.xs | 74 +- gnu/usr.bin/perl/cpan/Socket/t/getaddrinfo.t | 1 + gnu/usr.bin/perl/cpan/Socket/t/getnameinfo.t | 1 + gnu/usr.bin/perl/cpan/Socket/t/socketpair.t | 210 +- gnu/usr.bin/perl/cpan/Sys-Syslog/Makefile.PL | 2 +- gnu/usr.bin/perl/cpan/Test-Harness/bin/prove | 2 +- .../perl/cpan/Test-Harness/lib/App/Prove.pm | 8 +- .../cpan/Test-Harness/lib/App/Prove/State.pm | 4 +- .../lib/App/Prove/State/Result.pm | 4 +- .../lib/App/Prove/State/Result/Test.pm | 4 +- .../perl/cpan/Test-Harness/lib/TAP/Base.pm | 4 +- .../Test-Harness/lib/TAP/Formatter/Base.pm | 29 +- .../Test-Harness/lib/TAP/Formatter/Color.pm | 4 +- .../Test-Harness/lib/TAP/Formatter/Console.pm | 4 +- .../TAP/Formatter/Console/ParallelSession.pm | 4 +- .../lib/TAP/Formatter/Console/Session.pm | 4 +- .../Test-Harness/lib/TAP/Formatter/File.pm | 4 +- .../lib/TAP/Formatter/File/Session.pm | 4 +- .../Test-Harness/lib/TAP/Formatter/Session.pm | 4 +- .../perl/cpan/Test-Harness/lib/TAP/Harness.pm | 25 +- .../cpan/Test-Harness/lib/TAP/Harness/Env.pm | 6 +- .../perl/cpan/Test-Harness/lib/TAP/Object.pm | 4 +- .../perl/cpan/Test-Harness/lib/TAP/Parser.pm | 8 +- .../Test-Harness/lib/TAP/Parser/Aggregator.pm | 4 +- .../Test-Harness/lib/TAP/Parser/Grammar.pm | 4 +- .../Test-Harness/lib/TAP/Parser/Iterator.pm | 4 +- .../lib/TAP/Parser/Iterator/Array.pm | 4 +- .../lib/TAP/Parser/Iterator/Process.pm | 4 +- .../lib/TAP/Parser/Iterator/Stream.pm | 4 +- .../lib/TAP/Parser/IteratorFactory.pm | 4 +- .../lib/TAP/Parser/Multiplexer.pm | 8 +- .../Test-Harness/lib/TAP/Parser/Result.pm | 4 +- .../lib/TAP/Parser/Result/Bailout.pm | 4 +- .../lib/TAP/Parser/Result/Comment.pm | 4 +- .../lib/TAP/Parser/Result/Plan.pm | 4 +- .../lib/TAP/Parser/Result/Pragma.pm | 4 +- .../lib/TAP/Parser/Result/Test.pm | 4 +- .../lib/TAP/Parser/Result/Unknown.pm | 4 +- .../lib/TAP/Parser/Result/Version.pm | 4 +- .../lib/TAP/Parser/Result/YAML.pm | 4 +- .../lib/TAP/Parser/ResultFactory.pm | 4 +- .../Test-Harness/lib/TAP/Parser/Scheduler.pm | 4 +- .../lib/TAP/Parser/Scheduler/Job.pm | 4 +- .../lib/TAP/Parser/Scheduler/Spinner.pm | 4 +- .../Test-Harness/lib/TAP/Parser/Source.pm | 4 +- .../lib/TAP/Parser/SourceHandler.pm | 4 +- .../TAP/Parser/SourceHandler/Executable.pm | 4 +- .../lib/TAP/Parser/SourceHandler/File.pm | 4 +- .../lib/TAP/Parser/SourceHandler/Handle.pm | 4 +- .../lib/TAP/Parser/SourceHandler/Perl.pm | 6 +- .../lib/TAP/Parser/SourceHandler/RawTAP.pm | 4 +- .../lib/TAP/Parser/YAMLish/Reader.pm | 27 +- .../lib/TAP/Parser/YAMLish/Writer.pm | 29 +- .../cpan/Test-Harness/lib/Test/Harness.pm | 6 +- gnu/usr.bin/perl/cpan/Test-Harness/t/prove.t | 82 +- .../perl/cpan/Test-Harness/t/yamlish.t | 70 +- .../perl/cpan/Test-Simple/lib/Test/Builder.pm | 112 +- .../Test-Simple/lib/Test/Builder/Module.pm | 2 +- .../Test-Simple/lib/Test/Builder/Tester.pm | 2 +- .../lib/Test/Builder/Tester/Color.pm | 2 +- .../perl/cpan/Test-Simple/lib/Test/More.pm | 15 +- .../perl/cpan/Test-Simple/lib/Test/Simple.pm | 2 +- .../perl/cpan/Test-Simple/lib/Test/Tester.pm | 2 +- .../Test-Simple/lib/Test/Tester/Capture.pm | 2 +- .../lib/Test/Tester/CaptureRunner.pm | 2 +- .../Test-Simple/lib/Test/Tester/Delegate.pm | 2 +- .../perl/cpan/Test-Simple/lib/Test/use/ok.pm | 2 +- gnu/usr.bin/perl/cpan/Test-Simple/lib/ok.pm | 2 +- .../cpan/Text-Balanced/lib/Text/Balanced.pm | 2194 +- .../Text-ParseWords/lib/Text/ParseWords.pm | 74 +- .../perl/cpan/Text-ParseWords/t/ParseWords.t | 245 +- .../perl/cpan/Text-Tabs/lib/Text/Tabs.pm | 81 +- .../perl/cpan/Text-Tabs/lib/Text/Wrap.pm | 72 +- .../perl/cpan/Text-Tabs/t/Tabs-ElCid.t | 25 +- gnu/usr.bin/perl/cpan/Text-Tabs/t/Wrap-JLB.t | 25 +- .../perl/cpan/Unicode-Collate/Collate.pm | 86 +- .../perl/cpan/Unicode-Collate/Collate.xs | 77 +- .../cpan/Unicode-Collate/Collate/CJK/Big5.pm | 2 +- .../Unicode-Collate/Collate/CJK/GB2312.pm | 2 +- .../Unicode-Collate/Collate/CJK/JISX0208.pm | 2 +- .../Unicode-Collate/Collate/CJK/Korean.pm | 26 +- .../Unicode-Collate/Collate/CJK/Pinyin.pm | 2 +- .../Unicode-Collate/Collate/CJK/Stroke.pm | 2 +- .../Unicode-Collate/Collate/CJK/Zhuyin.pm | 2 +- .../cpan/Unicode-Collate/Collate/Locale.pm | 4 +- .../cpan/Unicode-Collate/Collate/Locale/af.pl | 6 +- .../cpan/Unicode-Collate/Collate/Locale/ar.pl | 24 +- .../cpan/Unicode-Collate/Collate/Locale/as.pl | 22 +- .../cpan/Unicode-Collate/Collate/Locale/az.pl | 98 +- .../cpan/Unicode-Collate/Collate/Locale/be.pl | 20 +- .../cpan/Unicode-Collate/Collate/Locale/bn.pl | 12 +- .../cpan/Unicode-Collate/Collate/Locale/ca.pl | 28 +- .../cpan/Unicode-Collate/Collate/Locale/cs.pl | 44 +- .../cpan/Unicode-Collate/Collate/Locale/cy.pl | 52 +- .../cpan/Unicode-Collate/Collate/Locale/da.pl | 148 +- .../Collate/Locale/de_phone.pl | 52 +- .../cpan/Unicode-Collate/Collate/Locale/ee.pl | 62 +- .../cpan/Unicode-Collate/Collate/Locale/eo.pl | 52 +- .../cpan/Unicode-Collate/Collate/Locale/es.pl | 12 +- .../Unicode-Collate/Collate/Locale/es_trad.pl | 24 +- .../cpan/Unicode-Collate/Collate/Locale/et.pl | 96 +- .../cpan/Unicode-Collate/Collate/Locale/fa.pl | 88 +- .../cpan/Unicode-Collate/Collate/Locale/fi.pl | 122 +- .../Collate/Locale/fi_phone.pl | 118 +- .../Unicode-Collate/Collate/Locale/fil.pl | 18 +- .../cpan/Unicode-Collate/Collate/Locale/fo.pl | 148 +- .../cpan/Unicode-Collate/Collate/Locale/gu.pl | 12 +- .../cpan/Unicode-Collate/Collate/Locale/ha.pl | 24 +- .../Unicode-Collate/Collate/Locale/haw.pl | 38 +- .../cpan/Unicode-Collate/Collate/Locale/hi.pl | 12 +- .../cpan/Unicode-Collate/Collate/Locale/hr.pl | 90 +- .../cpan/Unicode-Collate/Collate/Locale/hu.pl | 296 +- .../cpan/Unicode-Collate/Collate/Locale/hy.pl | 12 +- .../cpan/Unicode-Collate/Collate/Locale/ig.pl | 102 +- .../cpan/Unicode-Collate/Collate/Locale/is.pl | 156 +- .../cpan/Unicode-Collate/Collate/Locale/ja.pl | 2648 +- .../cpan/Unicode-Collate/Collate/Locale/kk.pl | 26 +- .../cpan/Unicode-Collate/Collate/Locale/kl.pl | 144 +- .../cpan/Unicode-Collate/Collate/Locale/kn.pl | 14 +- .../cpan/Unicode-Collate/Collate/Locale/ko.pl | 1284 +- .../Unicode-Collate/Collate/Locale/kok.pl | 20 +- .../cpan/Unicode-Collate/Collate/Locale/ln.pl | 18 +- .../cpan/Unicode-Collate/Collate/Locale/lt.pl | 82 +- .../cpan/Unicode-Collate/Collate/Locale/lv.pl | 68 +- .../cpan/Unicode-Collate/Collate/Locale/mk.pl | 32 +- .../cpan/Unicode-Collate/Collate/Locale/ml.pl | 38 +- .../cpan/Unicode-Collate/Collate/Locale/mr.pl | 22 +- .../cpan/Unicode-Collate/Collate/Locale/mt.pl | 54 +- .../cpan/Unicode-Collate/Collate/Locale/nb.pl | 146 +- .../cpan/Unicode-Collate/Collate/Locale/nn.pl | 146 +- .../Unicode-Collate/Collate/Locale/nso.pl | 68 +- .../cpan/Unicode-Collate/Collate/Locale/om.pl | 38 +- .../cpan/Unicode-Collate/Collate/Locale/or.pl | 18 +- .../cpan/Unicode-Collate/Collate/Locale/pa.pl | 48 +- .../cpan/Unicode-Collate/Collate/Locale/pl.pl | 96 +- .../cpan/Unicode-Collate/Collate/Locale/ro.pl | 100 +- .../cpan/Unicode-Collate/Collate/Locale/sa.pl | 22 +- .../cpan/Unicode-Collate/Collate/Locale/se.pl | 292 +- .../cpan/Unicode-Collate/Collate/Locale/si.pl | 14 +- .../Unicode-Collate/Collate/Locale/si_dict.pl | 12 +- .../cpan/Unicode-Collate/Collate/Locale/sk.pl | 84 +- .../cpan/Unicode-Collate/Collate/Locale/sl.pl | 28 +- .../cpan/Unicode-Collate/Collate/Locale/sq.pl | 92 +- .../cpan/Unicode-Collate/Collate/Locale/sr.pl | 8 +- .../cpan/Unicode-Collate/Collate/Locale/sv.pl | 172 +- .../Unicode-Collate/Collate/Locale/sv_refo.pl | 168 +- .../cpan/Unicode-Collate/Collate/Locale/ta.pl | 104 +- .../cpan/Unicode-Collate/Collate/Locale/te.pl | 12 +- .../cpan/Unicode-Collate/Collate/Locale/th.pl | 36 +- .../cpan/Unicode-Collate/Collate/Locale/tn.pl | 68 +- .../cpan/Unicode-Collate/Collate/Locale/to.pl | 118 +- .../cpan/Unicode-Collate/Collate/Locale/tr.pl | 86 +- .../cpan/Unicode-Collate/Collate/Locale/uk.pl | 22 +- .../cpan/Unicode-Collate/Collate/Locale/ur.pl | 144 +- .../cpan/Unicode-Collate/Collate/Locale/vi.pl | 420 +- .../Unicode-Collate/Collate/Locale/wae.pl | 42 +- .../cpan/Unicode-Collate/Collate/Locale/wo.pl | 56 +- .../cpan/Unicode-Collate/Collate/Locale/yo.pl | 46 +- .../cpan/Unicode-Collate/Collate/Locale/zh.pl | 416 +- .../Unicode-Collate/Collate/Locale/zh_big5.pl | 416 +- .../Unicode-Collate/Collate/Locale/zh_gb.pl | 416 +- .../Unicode-Collate/Collate/Locale/zh_pin.pl | 642 +- .../Unicode-Collate/Collate/Locale/zh_strk.pl | 642 +- .../Unicode-Collate/Collate/Locale/zh_zhu.pl | 642 +- .../cpan/Unicode-Collate/Collate/allkeys.txt | 58805 ++++++++-------- .../perl/cpan/Unicode-Collate/Makefile.PL | 15 +- .../perl/cpan/Unicode-Collate/mkheader | 13 +- .../perl/cpan/Unicode-Collate/t/contract.t | 17 +- .../perl/cpan/Unicode-Collate/t/ident.t | 15 +- .../perl/cpan/Unicode-Collate/t/illegal.t | 35 +- .../perl/cpan/Unicode-Collate/t/loc_es.t | 17 +- .../perl/cpan/Unicode-Collate/t/loc_estr.t | 17 +- .../perl/cpan/Unicode-Collate/t/loc_fr.t | 83 +- .../perl/cpan/Unicode-Collate/t/nonchar.t | 30 +- .../perl/cpan/Unicode-Collate/t/version.t | 15 +- .../perl/cpan/Unicode-Collate/t/view.t | 59 +- gnu/usr.bin/perl/cpan/Win32/Win32.pm | 421 +- gnu/usr.bin/perl/cpan/Win32/Win32.xs | 940 +- gnu/usr.bin/perl/cpan/Win32/t/GetOSName.t | 54 +- gnu/usr.bin/perl/cpan/autodie/lib/Fatal.pm | 4 +- gnu/usr.bin/perl/cpan/autodie/lib/autodie.pm | 7 +- .../cpan/autodie/lib/autodie/Scope/Guard.pm | 2 +- .../autodie/lib/autodie/Scope/GuardStack.pm | 2 +- .../perl/cpan/autodie/lib/autodie/Util.pm | 2 +- .../cpan/autodie/lib/autodie/exception.pm | 4 +- .../autodie/lib/autodie/exception/system.pm | 2 +- .../perl/cpan/autodie/lib/autodie/hints.pm | 2 +- .../perl/cpan/autodie/lib/autodie/skip.pm | 2 +- .../cpan/bignum/lib/Math/BigFloat/Trace.pm | 60 +- .../perl/cpan/bignum/lib/Math/BigInt/Trace.pm | 60 +- gnu/usr.bin/perl/cpan/bignum/lib/bigint.pm | 906 +- gnu/usr.bin/perl/cpan/bignum/lib/bignum.pm | 1111 +- gnu/usr.bin/perl/cpan/bignum/lib/bigrat.pm | 914 +- gnu/usr.bin/perl/cpan/bignum/t/big_e_pi.t | 17 - gnu/usr.bin/perl/cpan/bignum/t/bigexp.t | 6 +- gnu/usr.bin/perl/cpan/bignum/t/bigint.t | 112 +- gnu/usr.bin/perl/cpan/bignum/t/bignum.t | 90 +- gnu/usr.bin/perl/cpan/bignum/t/bigrat.t | 69 +- gnu/usr.bin/perl/cpan/bignum/t/bii_e_pi.t | 18 - gnu/usr.bin/perl/cpan/bignum/t/biinfnan.t | 22 - gnu/usr.bin/perl/cpan/bignum/t/bir_e_pi.t | 20 - gnu/usr.bin/perl/cpan/bignum/t/bn_lite.t | 20 - gnu/usr.bin/perl/cpan/bignum/t/bninfnan.t | 22 - gnu/usr.bin/perl/cpan/bignum/t/br_lite.t | 20 - gnu/usr.bin/perl/cpan/bignum/t/brinfnan.t | 22 - gnu/usr.bin/perl/cpan/bignum/t/in_effect.t | 78 +- gnu/usr.bin/perl/cpan/bignum/t/infnan.inc | 91 - gnu/usr.bin/perl/cpan/bignum/t/option_a.t | 36 +- gnu/usr.bin/perl/cpan/bignum/t/option_l.t | 52 - gnu/usr.bin/perl/cpan/bignum/t/option_p.t | 34 +- gnu/usr.bin/perl/cpan/bignum/t/ratopt_a.t | 6 +- gnu/usr.bin/perl/cpan/bignum/t/scope_f.t | 34 - gnu/usr.bin/perl/cpan/bignum/t/scope_i.t | 35 - gnu/usr.bin/perl/cpan/bignum/t/scope_r.t | 34 - .../cpan/experimental/lib/experimental.pm | 81 +- gnu/usr.bin/perl/cpan/experimental/t/basic.t | 43 +- gnu/usr.bin/perl/cpan/libnet/Makefile.PL | 6 +- gnu/usr.bin/perl/cpan/libnet/lib/Net/Cmd.pm | 123 +- .../perl/cpan/libnet/lib/Net/Config.pm | 56 +- .../perl/cpan/libnet/lib/Net/Domain.pm | 67 +- gnu/usr.bin/perl/cpan/libnet/lib/Net/FTP.pm | 338 +- gnu/usr.bin/perl/cpan/libnet/lib/Net/FTP/A.pm | 2 +- gnu/usr.bin/perl/cpan/libnet/lib/Net/FTP/E.pm | 2 +- gnu/usr.bin/perl/cpan/libnet/lib/Net/FTP/I.pm | 2 +- gnu/usr.bin/perl/cpan/libnet/lib/Net/FTP/L.pm | 2 +- .../perl/cpan/libnet/lib/Net/FTP/dataconn.pm | 75 +- gnu/usr.bin/perl/cpan/libnet/lib/Net/NNTP.pm | 307 +- gnu/usr.bin/perl/cpan/libnet/lib/Net/Netrc.pm | 59 +- gnu/usr.bin/perl/cpan/libnet/lib/Net/POP3.pm | 141 +- gnu/usr.bin/perl/cpan/libnet/lib/Net/SMTP.pm | 195 +- gnu/usr.bin/perl/cpan/libnet/lib/Net/Time.pm | 63 +- .../perl/cpan/libnet/lib/Net/libnetFAQ.pod | 16 +- gnu/usr.bin/perl/cpan/libnet/t/config.t | 21 +- gnu/usr.bin/perl/cpan/libnet/t/datasend.t | 16 +- gnu/usr.bin/perl/cpan/libnet/t/ftp.t | 2 +- gnu/usr.bin/perl/cpan/libnet/t/hostname.t | 6 +- gnu/usr.bin/perl/cpan/libnet/t/libnet_t.pl | 41 - gnu/usr.bin/perl/cpan/libnet/t/netrc.t | 15 +- gnu/usr.bin/perl/cpan/libnet/t/nntp.t | 13 +- gnu/usr.bin/perl/cpan/libnet/t/nntp_ipv6.t | 12 +- gnu/usr.bin/perl/cpan/libnet/t/pop3_ipv6.t | 12 +- gnu/usr.bin/perl/cpan/libnet/t/require.t | 4 +- gnu/usr.bin/perl/cpan/libnet/t/smtp.t | 15 +- gnu/usr.bin/perl/cpan/libnet/t/smtp_ipv6.t | 12 +- gnu/usr.bin/perl/cpan/libnet/t/time.t | 16 +- gnu/usr.bin/perl/cpan/perlfaq/lib/perlfaq.pm | 2 +- gnu/usr.bin/perl/cpan/perlfaq/lib/perlfaq.pod | 13 +- .../perl/cpan/perlfaq/lib/perlfaq1.pod | 2 +- .../perl/cpan/perlfaq/lib/perlfaq2.pod | 4 +- .../perl/cpan/perlfaq/lib/perlfaq3.pod | 2 +- .../perl/cpan/perlfaq/lib/perlfaq4.pod | 49 +- .../perl/cpan/perlfaq/lib/perlfaq5.pod | 9 +- .../perl/cpan/perlfaq/lib/perlfaq6.pod | 53 +- .../perl/cpan/perlfaq/lib/perlfaq7.pod | 2 +- .../perl/cpan/perlfaq/lib/perlfaq8.pod | 2 +- .../perl/cpan/perlfaq/lib/perlfaq9.pod | 2 +- .../perl/cpan/perlfaq/lib/perlglossary.pod | 4 +- .../perl/cpan/podlators/lib/Pod/Man.pm | 2 - .../perl/cpan/podlators/scripts/pod2man.PL | 24 +- .../perl/cpan/podlators/t/general/basic.t | 5 +- gnu/usr.bin/perl/cpan/podlators/t/man/empty.t | 3 +- .../perl/cpan/podlators/t/man/no-encode.t | 10 +- gnu/usr.bin/perl/cpan/version/lib/version.pm | 2 +- gnu/usr.bin/perl/cpan/version/lib/version.pod | 4 +- .../perl/cpan/version/lib/version/regex.pm | 2 +- gnu/usr.bin/perl/cpan/version/t/01base.t | 8 +- gnu/usr.bin/perl/cpan/version/t/02derived.t | 8 +- gnu/usr.bin/perl/cpan/version/t/03require.t | 2 +- gnu/usr.bin/perl/cpan/version/t/05sigdie.t | 2 +- gnu/usr.bin/perl/cpan/version/t/06noop.t | 4 +- gnu/usr.bin/perl/cpan/version/t/07locale.t | 12 +- gnu/usr.bin/perl/cpan/version/t/08_corelist.t | 6 +- .../perl/cpan/version/t/09_list_util.t | 2 +- gnu/usr.bin/perl/cpan/version/t/coretests.pm | 6 +- gnu/usr.bin/perl/cv.h | 63 +- gnu/usr.bin/perl/cygwin/cygwin.c | 426 +- gnu/usr.bin/perl/deb.c | 290 +- .../lib/Attribute/Handlers.pm | 66 +- gnu/usr.bin/perl/dist/Carp/lib/Carp.pm | 12 +- gnu/usr.bin/perl/dist/Carp/lib/Carp/Heavy.pm | 2 +- gnu/usr.bin/perl/dist/Carp/t/Carp.t | 6 +- gnu/usr.bin/perl/dist/Data-Dumper/Changes | 631 +- gnu/usr.bin/perl/dist/Data-Dumper/Dumper.pm | 153 +- gnu/usr.bin/perl/dist/Data-Dumper/Dumper.xs | 455 +- gnu/usr.bin/perl/dist/Data-Dumper/t/dumper.t | 1345 +- .../perl/dist/Data-Dumper/t/quotekeys.t | 12 +- gnu/usr.bin/perl/dist/Data-Dumper/t/recurse.t | 2 + gnu/usr.bin/perl/dist/Devel-PPPort/Changes | 26 +- .../perl/dist/Devel-PPPort/Makefile.PL | 2 +- .../perl/dist/Devel-PPPort/PPPort_pm.PL | 2 +- .../perl/dist/Devel-PPPort/devel/devtools.pl | 14 + .../perl/dist/Devel-PPPort/devel/mktodo.pl | 17 +- .../perl/dist/Devel-PPPort/devel/regenerate | 9 +- .../perl/dist/Devel-PPPort/parts/apicheck.pl | 5 +- .../perl/dist/Devel-PPPort/parts/base/5003007 | 2 - .../perl/dist/Devel-PPPort/parts/base/5009002 | 1 - .../perl/dist/Devel-PPPort/parts/base/5009004 | 2 - .../perl/dist/Devel-PPPort/parts/base/5009005 | 2 - .../perl/dist/Devel-PPPort/parts/base/5017004 | 1 - .../perl/dist/Devel-PPPort/parts/base/5035004 | 2 + .../perl/dist/Devel-PPPort/parts/base/5035009 | 1 + .../perl/dist/Devel-PPPort/parts/base/5035010 | 44 +- .../perl/dist/Devel-PPPort/parts/embed.fnc | 27 +- .../perl/dist/Devel-PPPort/parts/inc/Sv_set | 24 +- .../perl/dist/Devel-PPPort/parts/inc/call | 17 +- .../perl/dist/Devel-PPPort/parts/inc/magic | 3 +- .../perl/dist/Devel-PPPort/parts/inc/misc | 19 +- .../perl/dist/Devel-PPPort/parts/inc/newSVpv | 24 +- .../perl/dist/Devel-PPPort/parts/inc/utf8 | 142 +- .../perl/dist/Devel-PPPort/parts/inc/version | 2 +- .../perl/dist/Devel-PPPort/parts/ppport.fnc | 1 + .../perl/dist/Devel-PPPort/parts/todo/5006000 | 1 + .../perl/dist/Devel-PPPort/parts/todo/5035010 | 8 +- .../perl/dist/Devel-PPPort/t/01_test.t | 57 - gnu/usr.bin/perl/dist/Devel-PPPort/t/HvNAME.t | 60 - gnu/usr.bin/perl/dist/Devel-PPPort/t/MY_CXT.t | 58 - gnu/usr.bin/perl/dist/Devel-PPPort/t/SvPV.t | 127 - .../perl/dist/Devel-PPPort/t/SvREFCNT.t | 58 - gnu/usr.bin/perl/dist/Devel-PPPort/t/Sv_set.t | 117 - gnu/usr.bin/perl/dist/Devel-PPPort/t/call.t | 165 - gnu/usr.bin/perl/dist/Devel-PPPort/t/cop.t | 108 - .../perl/dist/Devel-PPPort/t/exception.t | 71 - gnu/usr.bin/perl/dist/Devel-PPPort/t/format.t | 80 - gnu/usr.bin/perl/dist/Devel-PPPort/t/grok.t | 66 - gnu/usr.bin/perl/dist/Devel-PPPort/t/gv.t | 67 - gnu/usr.bin/perl/dist/Devel-PPPort/t/limits.t | 59 - gnu/usr.bin/perl/dist/Devel-PPPort/t/locale.t | 67 - gnu/usr.bin/perl/dist/Devel-PPPort/t/mPUSH.t | 66 - gnu/usr.bin/perl/dist/Devel-PPPort/t/magic.t | 229 - gnu/usr.bin/perl/dist/Devel-PPPort/t/memory.t | 56 - gnu/usr.bin/perl/dist/Devel-PPPort/t/mess.t | 327 - gnu/usr.bin/perl/dist/Devel-PPPort/t/misc.t | 500 - .../perl/dist/Devel-PPPort/t/newCONSTSUB.t | 63 - gnu/usr.bin/perl/dist/Devel-PPPort/t/newRV.t | 57 - .../perl/dist/Devel-PPPort/t/newSV_type.t | 56 - .../perl/dist/Devel-PPPort/t/newSVpv.t | 82 - .../perl/dist/Devel-PPPort/t/podtest.t | 87 - .../perl/dist/Devel-PPPort/t/ppphtest.t | 944 - .../perl/dist/Devel-PPPort/t/pv_tools.t | 88 - gnu/usr.bin/perl/dist/Devel-PPPort/t/pvs.t | 77 - .../perl/dist/Devel-PPPort/t/shared_pv.t | 56 - .../perl/dist/Devel-PPPort/t/snprintf.t | 58 - .../perl/dist/Devel-PPPort/t/sprintf.t | 58 - .../perl/dist/Devel-PPPort/t/strlfuncs.t | 69 - .../perl/dist/Devel-PPPort/t/sv_xpvf.t | 82 - .../perl/dist/Devel-PPPort/t/threads.t | 58 - gnu/usr.bin/perl/dist/Devel-PPPort/t/utf8.t | 300 - gnu/usr.bin/perl/dist/Devel-PPPort/t/uv.t | 68 - .../perl/dist/Devel-PPPort/t/variables.t | 111 - gnu/usr.bin/perl/dist/Devel-PPPort/t/warn.t | 106 - gnu/usr.bin/perl/dist/Dumpvalue/t/Dumpvalue.t | 36 +- .../perl/dist/Exporter/lib/Exporter.pm | 54 +- .../perl/dist/ExtUtils-CBuilder/Changes | 14 + .../perl/dist/ExtUtils-CBuilder/Makefile.PL | 4 +- .../lib/ExtUtils/CBuilder.pm | 2 +- .../lib/ExtUtils/CBuilder/Base.pm | 2 +- .../lib/ExtUtils/CBuilder/Platform/Unix.pm | 2 +- .../lib/ExtUtils/CBuilder/Platform/VMS.pm | 2 +- .../lib/ExtUtils/CBuilder/Platform/Windows.pm | 2 +- .../ExtUtils/CBuilder/Platform/Windows/BCC.pm | 2 +- .../ExtUtils/CBuilder/Platform/Windows/GCC.pm | 15 +- .../CBuilder/Platform/Windows/MSVC.pm | 2 +- .../lib/ExtUtils/CBuilder/Platform/aix.pm | 2 +- .../lib/ExtUtils/CBuilder/Platform/android.pm | 2 +- .../lib/ExtUtils/CBuilder/Platform/cygwin.pm | 2 +- .../lib/ExtUtils/CBuilder/Platform/darwin.pm | 6 +- .../lib/ExtUtils/CBuilder/Platform/dec_osf.pm | 2 +- .../lib/ExtUtils/CBuilder/Platform/os2.pm | 2 +- .../perl/dist/ExtUtils-ParseXS/Changes | 37 +- .../ExtUtils-ParseXS/lib/ExtUtils/ParseXS.pm | 85 +- .../lib/ExtUtils/ParseXS/Constants.pm | 2 +- .../lib/ExtUtils/ParseXS/CountLines.pm | 2 +- .../lib/ExtUtils/ParseXS/Eval.pm | 2 +- .../lib/ExtUtils/ParseXS/Utilities.pm | 2 +- .../ExtUtils-ParseXS/lib/ExtUtils/Typemaps.pm | 2 +- .../lib/ExtUtils/Typemaps/Cmd.pm | 2 +- .../lib/ExtUtils/Typemaps/InputMap.pm | 2 +- .../lib/ExtUtils/Typemaps/OutputMap.pm | 2 +- .../lib/ExtUtils/Typemaps/Type.pm | 2 +- .../perl/dist/ExtUtils-ParseXS/lib/perlxs.pod | 23 +- .../dist/ExtUtils-ParseXS/lib/perlxstut.pod | 122 +- .../dist/I18N-LangTags/lib/I18N/LangTags.pm | 4 +- gnu/usr.bin/perl/dist/IO/IO.pm | 4 +- gnu/usr.bin/perl/dist/IO/IO.xs | 77 +- gnu/usr.bin/perl/dist/IO/lib/IO/Dir.pm | 4 +- gnu/usr.bin/perl/dist/IO/lib/IO/File.pm | 2 +- gnu/usr.bin/perl/dist/IO/lib/IO/Handle.pm | 2 +- gnu/usr.bin/perl/dist/IO/lib/IO/Pipe.pm | 4 +- gnu/usr.bin/perl/dist/IO/lib/IO/Poll.pm | 4 +- gnu/usr.bin/perl/dist/IO/lib/IO/Seekable.pm | 2 +- gnu/usr.bin/perl/dist/IO/lib/IO/Select.pm | 6 +- gnu/usr.bin/perl/dist/IO/lib/IO/Socket.pm | 38 +- .../perl/dist/IO/lib/IO/Socket/INET.pm | 27 +- .../perl/dist/IO/lib/IO/Socket/UNIX.pm | 20 +- gnu/usr.bin/perl/dist/IO/poll.c | 84 +- .../perl/dist/IO/t/cachepropagate-unix.t | 6 +- gnu/usr.bin/perl/dist/IO/t/io_linenum.t | 2 +- gnu/usr.bin/perl/dist/IO/t/io_poll.t | 2 +- gnu/usr.bin/perl/dist/IO/t/io_sock.t | 38 +- gnu/usr.bin/perl/dist/IO/t/io_taint.t | 6 +- gnu/usr.bin/perl/dist/IO/t/io_utf8argv.t | 2 +- gnu/usr.bin/perl/dist/IO/t/io_xs.t | 42 +- .../perl/dist/Locale-Maketext/ChangeLog | 9 + .../Locale-Maketext/lib/Locale/Maketext.pm | 49 +- gnu/usr.bin/perl/dist/Module-CoreList/Changes | 57 + .../Module-CoreList/lib/Module/CoreList.pm | 1280 +- .../lib/Module/CoreList/Utils.pm | 128 +- .../perl/dist/Net-Ping/lib/Net/Ping.pm | 91 +- .../perl/dist/Net-Ping/t/450_service.t | 2 +- gnu/usr.bin/perl/dist/PathTools/Changes | 30 + gnu/usr.bin/perl/dist/PathTools/Cwd.pm | 43 +- gnu/usr.bin/perl/dist/PathTools/Cwd.xs | 28 +- gnu/usr.bin/perl/dist/PathTools/Makefile.PL | 2 +- .../perl/dist/PathTools/lib/File/Spec.pm | 4 +- .../dist/PathTools/lib/File/Spec/AmigaOS.pm | 2 +- .../dist/PathTools/lib/File/Spec/Cygwin.pm | 2 +- .../perl/dist/PathTools/lib/File/Spec/Epoc.pm | 2 +- .../dist/PathTools/lib/File/Spec/Functions.pm | 2 +- .../perl/dist/PathTools/lib/File/Spec/Mac.pm | 2 +- .../perl/dist/PathTools/lib/File/Spec/OS2.pm | 2 +- .../perl/dist/PathTools/lib/File/Spec/Unix.pm | 4 +- .../perl/dist/PathTools/lib/File/Spec/VMS.pm | 2 +- .../dist/PathTools/lib/File/Spec/Win32.pm | 2 +- gnu/usr.bin/perl/dist/Safe/Safe.pm | 4 +- gnu/usr.bin/perl/dist/Safe/t/safeutf8.t | 8 +- gnu/usr.bin/perl/dist/Storable/ChangeLog | 34 +- gnu/usr.bin/perl/dist/Storable/Makefile.PL | 2 +- gnu/usr.bin/perl/dist/Storable/Storable.pm | 4 +- gnu/usr.bin/perl/dist/Storable/Storable.xs | 265 +- gnu/usr.bin/perl/dist/Storable/t/canonical.t | 2 +- gnu/usr.bin/perl/dist/Storable/t/utf8.t | 4 - gnu/usr.bin/perl/dist/Time-HiRes/Changes | 14 + gnu/usr.bin/perl/dist/Time-HiRes/HiRes.pm | 2 +- gnu/usr.bin/perl/dist/Time-HiRes/HiRes.xs | 213 +- gnu/usr.bin/perl/dist/Time-HiRes/Makefile.PL | 28 +- .../perl/dist/Time-HiRes/t/Watchdog.pm | 12 +- gnu/usr.bin/perl/dist/Time-HiRes/t/stat.t | 62 +- gnu/usr.bin/perl/dist/Time-HiRes/t/utime.t | 6 + gnu/usr.bin/perl/dist/XSLoader/Makefile.PL | 11 +- gnu/usr.bin/perl/dist/XSLoader/XSLoader_pm.PL | 59 +- gnu/usr.bin/perl/dist/XSLoader/t/XSLoader.t | 6 +- gnu/usr.bin/perl/dist/if/if.pm | 6 +- .../dist/threads-shared/lib/threads/shared.pm | 4 +- .../perl/dist/threads-shared/shared.xs | 25 +- .../perl/dist/threads-shared/t/stress.t | 2 +- gnu/usr.bin/perl/dist/threads/lib/threads.pm | 4 +- gnu/usr.bin/perl/dist/threads/threads.xs | 34 +- gnu/usr.bin/perl/djgpp/config.over | 64 - gnu/usr.bin/perl/djgpp/configure.bat | 37 - gnu/usr.bin/perl/djgpp/djgpp.c | 481 - gnu/usr.bin/perl/djgpp/djgpp.h | 55 - gnu/usr.bin/perl/djgpp/djgppsed.sh | 48 - gnu/usr.bin/perl/djgpp/fixpmain | 33 - gnu/usr.bin/perl/doio.c | 2560 +- gnu/usr.bin/perl/doop.c | 773 +- gnu/usr.bin/perl/dosish.h | 82 +- gnu/usr.bin/perl/dquote.c | 99 +- gnu/usr.bin/perl/dump.c | 2048 +- gnu/usr.bin/perl/ebcdic_tables.h | 146 +- gnu/usr.bin/perl/embed.fnc | 1167 +- gnu/usr.bin/perl/embed.h | 159 +- gnu/usr.bin/perl/embedvar.h | 156 +- gnu/usr.bin/perl/ext/B/B.pm | 34 +- gnu/usr.bin/perl/ext/B/B.xs | 74 +- gnu/usr.bin/perl/ext/B/B/Concise.pm | 12 +- gnu/usr.bin/perl/ext/B/Makefile.PL | 2 +- gnu/usr.bin/perl/ext/B/t/OptreeCheck.pm | 18 +- gnu/usr.bin/perl/ext/B/t/concise-xs.t | 4 - gnu/usr.bin/perl/ext/B/t/concise.t | 415 +- gnu/usr.bin/perl/ext/B/t/f_map.t | 12 - gnu/usr.bin/perl/ext/B/t/f_sort.t | 16 +- gnu/usr.bin/perl/ext/B/t/optree_check.t | 4 - gnu/usr.bin/perl/ext/B/t/optree_concise.t | 5 - gnu/usr.bin/perl/ext/B/t/optree_misc.t | 6 - gnu/usr.bin/perl/ext/B/t/optree_samples.t | 5 - gnu/usr.bin/perl/ext/B/t/optree_sort.t | 5 - gnu/usr.bin/perl/ext/B/t/optree_specials.t | 717 +- gnu/usr.bin/perl/ext/B/t/optree_varinit.t | 5 - gnu/usr.bin/perl/ext/B/t/showlex.t | 21 +- gnu/usr.bin/perl/ext/B/typemap | 1 + gnu/usr.bin/perl/ext/Devel-Peek/Peek.pm | 5 +- gnu/usr.bin/perl/ext/Devel-Peek/Peek.xs | 5 +- gnu/usr.bin/perl/ext/Devel-Peek/t/Peek.t | 201 +- .../perl/ext/DynaLoader/DynaLoader_pm.PL | 34 +- gnu/usr.bin/perl/ext/DynaLoader/Makefile.PL | 7 +- gnu/usr.bin/perl/ext/DynaLoader/dl_symbian.xs | 245 - gnu/usr.bin/perl/ext/DynaLoader/dlutils.c | 32 +- .../perl/ext/DynaLoader/t/DynaLoader.t | 22 +- gnu/usr.bin/perl/ext/Errno/Errno_pm.PL | 62 +- .../lib/ExtUtils/Miniperl.pm | 36 +- gnu/usr.bin/perl/ext/Fcntl/Fcntl.pm | 12 +- gnu/usr.bin/perl/ext/Fcntl/Fcntl.xs | 1 - .../perl/ext/File-Find/lib/File/Find.pm | 45 +- gnu/usr.bin/perl/ext/File-Find/t/find.t | 21 +- gnu/usr.bin/perl/ext/File-Glob/Glob.pm | 12 +- gnu/usr.bin/perl/ext/File-Glob/Glob.xs | 8 +- gnu/usr.bin/perl/ext/File-Glob/bsd_glob.c | 1256 +- gnu/usr.bin/perl/ext/GDBM_File/GDBM_File.pm | 724 +- gnu/usr.bin/perl/ext/GDBM_File/typemap | 1 + .../perl/ext/Hash-Util-FieldHash/FieldHash.xs | 7 +- .../lib/Hash/Util/FieldHash.pm | 9 +- .../ext/Hash-Util-FieldHash/t/05_perlhook.t | 21 +- gnu/usr.bin/perl/ext/Hash-Util/Changes | 9 + gnu/usr.bin/perl/ext/Hash-Util/Util.xs | 6 +- .../perl/ext/Hash-Util/lib/Hash/Util.pm | 32 +- gnu/usr.bin/perl/ext/Hash-Util/t/Util.t | 22 +- .../perl/ext/I18N-Langinfo/Langinfo.pm | 17 +- .../perl/ext/IPC-Open3/lib/IPC/Open3.pm | 8 +- gnu/usr.bin/perl/ext/IPC-Open3/t/IPC-Open3.t | 4 +- gnu/usr.bin/perl/ext/NDBM_File/Makefile.PL | 2 +- gnu/usr.bin/perl/ext/ODBM_File/ODBM_File.pm | 2 +- gnu/usr.bin/perl/ext/ODBM_File/ODBM_File.xs | 8 + gnu/usr.bin/perl/ext/Opcode/Opcode.pm | 15 +- gnu/usr.bin/perl/ext/Opcode/Opcode.xs | 8 +- gnu/usr.bin/perl/ext/POSIX/Makefile.PL | 18 +- gnu/usr.bin/perl/ext/POSIX/POSIX.xs | 182 +- gnu/usr.bin/perl/ext/POSIX/lib/POSIX.pm | 7 +- gnu/usr.bin/perl/ext/POSIX/lib/POSIX.pod | 149 +- gnu/usr.bin/perl/ext/POSIX/t/export.t | 2 +- gnu/usr.bin/perl/ext/POSIX/t/math.t | 29 +- gnu/usr.bin/perl/ext/POSIX/t/posix.t | 40 +- gnu/usr.bin/perl/ext/POSIX/t/sigaction.t | 4 +- gnu/usr.bin/perl/ext/POSIX/t/time.t | 4 +- .../perl/ext/PerlIO-encoding/encoding.pm | 5 +- .../perl/ext/PerlIO-encoding/encoding.xs | 33 +- .../perl/ext/PerlIO-encoding/t/encoding.t | 4 - .../perl/ext/PerlIO-encoding/t/nolooping.t | 7 +- gnu/usr.bin/perl/ext/PerlIO-mmap/mmap.pm | 2 +- gnu/usr.bin/perl/ext/PerlIO-mmap/mmap.xs | 1 - gnu/usr.bin/perl/ext/PerlIO-scalar/scalar.pm | 5 +- gnu/usr.bin/perl/ext/PerlIO-scalar/t/scalar.t | 15 +- .../perl/ext/Pod-Functions/Functions_pm.PL | 5 +- .../perl/ext/Pod-Functions/t/Functions.t | 4 +- gnu/usr.bin/perl/ext/Pod-Html/lib/Pod/Html.pm | 798 +- gnu/usr.bin/perl/ext/Pod-Html/t/crossref.t | 64 +- gnu/usr.bin/perl/ext/Pod-Html/t/crossref2.t | 65 +- gnu/usr.bin/perl/ext/Pod-Html/t/crossref3.t | 62 +- gnu/usr.bin/perl/ext/Pod-Html/t/htmlview.t | 45 +- .../perl/ext/Pod-Html/t/pod2html-lib.pl | 107 - .../ext/Pod-Html/testdir/perlpodspec-copy.pod | 1904 - .../ext/Pod-Html/testdir/perlvar-copy.pod | 1742 - gnu/usr.bin/perl/ext/SDBM_File/dbe.c | 704 +- gnu/usr.bin/perl/ext/SDBM_File/dbu.c | 318 +- gnu/usr.bin/perl/ext/SDBM_File/sdbm.c | 530 +- gnu/usr.bin/perl/ext/SDBM_File/sdbm.h | 34 +- gnu/usr.bin/perl/ext/Sys-Hostname/Hostname.pm | 5 +- gnu/usr.bin/perl/ext/Win32CORE/Win32CORE.c | 128 +- gnu/usr.bin/perl/ext/XS-APItest/APItest.pm | 13 +- gnu/usr.bin/perl/ext/XS-APItest/APItest.xs | 3302 +- gnu/usr.bin/perl/ext/XS-APItest/Makefile.PL | 5 +- gnu/usr.bin/perl/ext/XS-APItest/numeric.xs | 15 + gnu/usr.bin/perl/ext/XS-APItest/t/call.t | 14 +- .../perl/ext/XS-APItest/t/clone-with-stack.t | 2 +- gnu/usr.bin/perl/ext/XS-APItest/t/grok.t | 63 +- gnu/usr.bin/perl/ext/XS-APItest/t/hash.t | 56 +- gnu/usr.bin/perl/ext/XS-APItest/t/locale.t | 7 +- gnu/usr.bin/perl/ext/XS-APItest/t/magic.t | 1 - gnu/usr.bin/perl/ext/XS-APItest/t/multicall.t | 6 +- gnu/usr.bin/perl/ext/XS-APItest/t/printf.t | 14 +- gnu/usr.bin/perl/ext/XS-APItest/t/utf8.t | 9 + gnu/usr.bin/perl/ext/XS-APItest/t/xsub_h.t | 2 +- gnu/usr.bin/perl/ext/XS-Typemap/Typemap.pm | 7 +- gnu/usr.bin/perl/ext/XS-Typemap/Typemap.xs | 32 +- gnu/usr.bin/perl/ext/XS-Typemap/t/Typemap.t | 38 +- gnu/usr.bin/perl/ext/attributes/attributes.pm | 2 +- gnu/usr.bin/perl/ext/attributes/attributes.xs | 2 +- gnu/usr.bin/perl/ext/mro/mro.pm | 5 +- gnu/usr.bin/perl/ext/mro/mro.xs | 20 +- gnu/usr.bin/perl/ext/re/re.pm | 197 +- gnu/usr.bin/perl/ext/re/re.xs | 99 +- gnu/usr.bin/perl/ext/re/t/regop.pl | 2 +- gnu/usr.bin/perl/ext/re/t/regop.t | 15 - gnu/usr.bin/perl/feature.h | 137 +- gnu/usr.bin/perl/generate_uudmap.c | 75 +- gnu/usr.bin/perl/globals.c | 19 +- gnu/usr.bin/perl/globvar.sym | 6 +- gnu/usr.bin/perl/gv.c | 2586 +- gnu/usr.bin/perl/gv.h | 121 +- gnu/usr.bin/perl/handy.h | 1409 +- gnu/usr.bin/perl/hints/aix.sh | 2 +- gnu/usr.bin/perl/hints/amigaos.sh | 2 + gnu/usr.bin/perl/hints/catamount.sh | 4 +- gnu/usr.bin/perl/hints/darwin.sh | 4 + gnu/usr.bin/perl/hints/dos_djgpp.sh | 81 - gnu/usr.bin/perl/hints/haiku.sh | 12 +- gnu/usr.bin/perl/hints/openbsd.sh | 54 +- gnu/usr.bin/perl/hints/os390.sh | 313 +- gnu/usr.bin/perl/hints/uwin.sh | 134 - gnu/usr.bin/perl/hv.c | 3280 +- gnu/usr.bin/perl/hv.h | 190 +- gnu/usr.bin/perl/hv_func.h | 156 +- gnu/usr.bin/perl/inline.h | 1437 +- gnu/usr.bin/perl/install_lib.pl | 26 +- gnu/usr.bin/perl/installhtml | 10 +- gnu/usr.bin/perl/installman | 2 +- gnu/usr.bin/perl/installperl | 138 +- gnu/usr.bin/perl/intrpvar.h | 243 +- gnu/usr.bin/perl/invlist_inline.h | 12 +- gnu/usr.bin/perl/iperlsys.h | 2383 +- gnu/usr.bin/perl/keywords.c | 93 +- gnu/usr.bin/perl/keywords.h | 470 +- gnu/usr.bin/perl/l1_char_class_tab.h | 60 +- gnu/usr.bin/perl/lib/AnyDBM_File.pm | 2 + gnu/usr.bin/perl/lib/B/Deparse-core.t | 215 +- gnu/usr.bin/perl/lib/B/Deparse.pm | 444 +- gnu/usr.bin/perl/lib/B/Deparse.t | 123 +- gnu/usr.bin/perl/lib/B/Op_private.pm | 54 +- gnu/usr.bin/perl/lib/Benchmark.t | 13 +- gnu/usr.bin/perl/lib/Config.t | 19 +- gnu/usr.bin/perl/lib/DB.t | 6 +- gnu/usr.bin/perl/lib/DBM_Filter/t/encode.t | 4 +- gnu/usr.bin/perl/lib/DBM_Filter/t/utf8.t | 3 +- gnu/usr.bin/perl/lib/ExtUtils/t/Embed.t | 27 - gnu/usr.bin/perl/lib/ExtUtils/typemap | 60 +- gnu/usr.bin/perl/lib/File/Compare.pm | 22 +- gnu/usr.bin/perl/lib/File/Copy.pm | 23 +- gnu/usr.bin/perl/lib/File/Copy.t | 8 +- gnu/usr.bin/perl/lib/File/stat.pm | 6 +- gnu/usr.bin/perl/lib/File/stat.t | 21 +- gnu/usr.bin/perl/lib/Getopt/Std.pm | 16 +- gnu/usr.bin/perl/lib/Net/hostent.pm | 15 +- gnu/usr.bin/perl/lib/Symbol.pm | 17 +- gnu/usr.bin/perl/lib/Tie/Hash.pm | 6 +- gnu/usr.bin/perl/lib/Tie/Scalar.pm | 6 +- gnu/usr.bin/perl/lib/Tie/SubstrHash.pm | 200 +- gnu/usr.bin/perl/lib/UNIVERSAL.pm | 7 +- gnu/usr.bin/perl/lib/Unicode/UCD.pm | 44 +- gnu/usr.bin/perl/lib/Unicode/UCD.t | 149 +- gnu/usr.bin/perl/lib/_charnames.pm | 53 +- gnu/usr.bin/perl/lib/bytes.pm | 6 +- gnu/usr.bin/perl/lib/bytes.t | 11 +- gnu/usr.bin/perl/lib/charnames.pm | 8 +- gnu/usr.bin/perl/lib/charnames.t | 46 +- gnu/usr.bin/perl/lib/diagnostics.pm | 7 +- gnu/usr.bin/perl/lib/feature.pm | 836 +- gnu/usr.bin/perl/lib/h2xs.t | 15 +- gnu/usr.bin/perl/lib/locale.pm | 7 +- gnu/usr.bin/perl/lib/locale.t | 15 +- gnu/usr.bin/perl/lib/overload.pm | 26 +- gnu/usr.bin/perl/lib/overload.t | 45 +- gnu/usr.bin/perl/lib/perl5db.pl | 1522 +- gnu/usr.bin/perl/lib/perl5db.t | 339 +- gnu/usr.bin/perl/lib/sigtrap.pm | 6 +- gnu/usr.bin/perl/lib/sort.t | 62 +- gnu/usr.bin/perl/lib/strict.pm | 7 +- gnu/usr.bin/perl/lib/strict.t | 13 +- gnu/usr.bin/perl/lib/subs.pm | 10 +- .../perl/lib/unicore/ArabicShaping.txt | 80 +- gnu/usr.bin/perl/lib/unicore/BidiBrackets.txt | 20 +- .../perl/lib/unicore/BidiMirroring.txt | 26 +- gnu/usr.bin/perl/lib/unicore/Blocks.txt | 22 +- gnu/usr.bin/perl/lib/unicore/CJKRadicals.txt | 6 +- gnu/usr.bin/perl/lib/unicore/CaseFolding.txt | 46 +- .../lib/unicore/CompositionExclusions.txt | 12 +- gnu/usr.bin/perl/lib/unicore/DAge.txt | 95 +- .../perl/lib/unicore/DCoreProperties.txt | 700 +- .../perl/lib/unicore/DNormalizationProps.txt | 144 +- .../perl/lib/unicore/EastAsianWidth.txt | 149 +- gnu/usr.bin/perl/lib/unicore/EmojiSources.txt | 6 +- .../perl/lib/unicore/HangulSyllableType.txt | 6 +- gnu/usr.bin/perl/lib/unicore/Index.txt | 6 + .../lib/unicore/IndicPositionalCategory.txt | 18 +- .../lib/unicore/IndicSyllabicCategory.txt | 30 +- gnu/usr.bin/perl/lib/unicore/Jamo.txt | 8 +- gnu/usr.bin/perl/lib/unicore/LineBreak.txt | 169 +- gnu/usr.bin/perl/lib/unicore/NameAliases.txt | 8 +- .../perl/lib/unicore/NamedSequences.txt | 43 +- gnu/usr.bin/perl/lib/unicore/NamedSqProv.txt | 41 +- gnu/usr.bin/perl/lib/unicore/NamesList.txt | 1807 +- .../lib/unicore/NormalizationCorrections.txt | 6 +- gnu/usr.bin/perl/lib/unicore/PropList.txt | 100 +- .../perl/lib/unicore/PropValueAliases.txt | 26 +- .../perl/lib/unicore/PropertyAliases.txt | 6 +- gnu/usr.bin/perl/lib/unicore/ReadMe.txt | 10 +- .../perl/lib/unicore/ScriptExtensions.txt | 80 +- gnu/usr.bin/perl/lib/unicore/Scripts.txt | 213 +- .../perl/lib/unicore/SpecialCasing.txt | 6 +- .../perl/lib/unicore/StandardizedVariants.txt | 70 +- gnu/usr.bin/perl/lib/unicore/To/Digit.pl | 674 - gnu/usr.bin/perl/lib/unicore/To/Fold.pl | 1553 - gnu/usr.bin/perl/lib/unicore/To/Lower.pl | 1428 - gnu/usr.bin/perl/lib/unicore/To/Title.pl | 1447 - gnu/usr.bin/perl/lib/unicore/To/Upper.pl | 1520 - gnu/usr.bin/perl/lib/unicore/UnicodeData.txt | 837 +- .../perl/lib/unicore/auxiliary/GCBTest.txt | 6 +- .../auxiliary/GraphemeBreakProperty.txt | 33 +- .../perl/lib/unicore/auxiliary/LBTest.txt | 60 +- .../perl/lib/unicore/auxiliary/SBTest.txt | 6 +- .../auxiliary/SentenceBreakProperty.txt | 130 +- .../perl/lib/unicore/auxiliary/WBTest.txt | 6 +- .../unicore/auxiliary/WordBreakProperty.txt | 96 +- .../perl/lib/unicore/extracted/DBidiClass.txt | 178 +- .../unicore/extracted/DBinaryProperties.txt | 18 +- .../lib/unicore/extracted/DCombiningClass.txt | 165 +- .../unicore/extracted/DDecompositionType.txt | 14 +- .../lib/unicore/extracted/DEastAsianWidth.txt | 153 +- .../unicore/extracted/DGeneralCategory.txt | 306 +- .../perl/lib/unicore/extracted/DJoinGroup.txt | 37 +- .../perl/lib/unicore/extracted/DJoinType.txt | 46 +- .../perl/lib/unicore/extracted/DLineBreak.txt | 195 +- .../perl/lib/unicore/extracted/DNumType.txt | 9 +- .../perl/lib/unicore/extracted/DNumValues.txt | 36 +- .../perl/lib/unicore/lib/InSC/Consona9.pl | 22 - gnu/usr.bin/perl/lib/unicore/mktables | 501 +- gnu/usr.bin/perl/lib/unicore/version | 2 +- gnu/usr.bin/perl/lib/utf8.pm | 17 +- gnu/usr.bin/perl/lib/warnings.pm | 655 +- gnu/usr.bin/perl/locale.c | 447 +- gnu/usr.bin/perl/make_ext.pl | 7 +- gnu/usr.bin/perl/makedef.pl | 269 +- gnu/usr.bin/perl/makedepend.SH | 121 +- gnu/usr.bin/perl/malloc.c | 1833 +- gnu/usr.bin/perl/mathoms.c | 188 +- gnu/usr.bin/perl/metaconfig.SH | 2 +- gnu/usr.bin/perl/metaconfig.h | 7 +- gnu/usr.bin/perl/mg.c | 2499 +- gnu/usr.bin/perl/mg.h | 35 +- gnu/usr.bin/perl/mg_raw.h | 2 +- gnu/usr.bin/perl/mg_vtable.h | 10 +- gnu/usr.bin/perl/miniperlmain.c | 31 - gnu/usr.bin/perl/mkppport | 1 - gnu/usr.bin/perl/mkppport.lst | 8 + gnu/usr.bin/perl/mro_core.c | 1266 +- gnu/usr.bin/perl/myconfig.SH | 1 - gnu/usr.bin/perl/nostdio.h | 2 +- gnu/usr.bin/perl/numeric.c | 486 +- gnu/usr.bin/perl/op.c | 10059 +-- gnu/usr.bin/perl/op.h | 248 +- gnu/usr.bin/perl/op_reg_common.h | 4 +- gnu/usr.bin/perl/opcode.h | 505 +- gnu/usr.bin/perl/opnames.h | 16 +- gnu/usr.bin/perl/os2/Makefile.SHs | 2 +- gnu/usr.bin/perl/os2/dl_os2.c | 198 +- gnu/usr.bin/perl/os2/os2.c | 5033 +- gnu/usr.bin/perl/os2/os2ish.h | 364 +- gnu/usr.bin/perl/pad.c | 2273 +- gnu/usr.bin/perl/pad.h | 98 +- gnu/usr.bin/perl/parser.h | 14 +- gnu/usr.bin/perl/patchlevel.h | 116 +- gnu/usr.bin/perl/perl.c | 4113 +- gnu/usr.bin/perl/perl.h | 2777 +- gnu/usr.bin/perl/perlapi.c | 60 - gnu/usr.bin/perl/perlapi.h | 220 +- gnu/usr.bin/perl/perlio.c | 4299 +- gnu/usr.bin/perl/perlio.h | 30 +- gnu/usr.bin/perl/perliol.h | 36 +- gnu/usr.bin/perl/perlvars.h | 45 +- gnu/usr.bin/perl/perly.act | 1604 +- gnu/usr.bin/perl/perly.c | 123 +- gnu/usr.bin/perl/perly.h | 224 +- gnu/usr.bin/perl/perly.tab | 2285 +- gnu/usr.bin/perl/perly.y | 1096 +- gnu/usr.bin/perl/plan9/buildinfo | 2 +- gnu/usr.bin/perl/plan9/config.plan9 | 307 +- gnu/usr.bin/perl/plan9/config_h.sample | 15 +- gnu/usr.bin/perl/plan9/config_sh.sample | 53 +- gnu/usr.bin/perl/plan9/genconfig.pl | 52 +- gnu/usr.bin/perl/plan9/mkfile | 432 +- gnu/usr.bin/perl/plan9/plan9ish.h | 8 +- gnu/usr.bin/perl/plan9/versnum | 9 +- gnu/usr.bin/perl/pod/buildtoc | 38 + gnu/usr.bin/perl/pod/perl.pod | 35 +- gnu/usr.bin/perl/pod/perl5200delta.pod | 30 +- gnu/usr.bin/perl/pod/perl5240delta.pod | 80 +- gnu/usr.bin/perl/pod/perl58delta.pod | 2 +- gnu/usr.bin/perl/pod/perlapio.pod | 132 +- gnu/usr.bin/perl/pod/perlcall.pod | 41 +- gnu/usr.bin/perl/pod/perlclib.pod | 6 +- gnu/usr.bin/perl/pod/perlcommunity.pod | 15 +- gnu/usr.bin/perl/pod/perldata.pod | 127 +- gnu/usr.bin/perl/pod/perldebguts.pod | 63 +- gnu/usr.bin/perl/pod/perldebtut.pod | 5 +- gnu/usr.bin/perl/pod/perldebug.pod | 22 +- gnu/usr.bin/perl/pod/perldelta.pod | 1520 +- gnu/usr.bin/perl/pod/perldiag.pod | 442 +- gnu/usr.bin/perl/pod/perldsc.pod | 234 +- gnu/usr.bin/perl/pod/perlebcdic.pod | 6 +- gnu/usr.bin/perl/pod/perlembed.pod | 8 +- gnu/usr.bin/perl/pod/perlexperiment.pod | 186 +- gnu/usr.bin/perl/pod/perlfilter.pod | 5 +- gnu/usr.bin/perl/pod/perlfunc.pod | 625 +- gnu/usr.bin/perl/pod/perlgit.pod | 61 +- gnu/usr.bin/perl/pod/perlguts.pod | 737 +- gnu/usr.bin/perl/pod/perlhack.pod | 79 +- gnu/usr.bin/perl/pod/perlhacktips.pod | 424 +- gnu/usr.bin/perl/pod/perlhist.pod | 84 +- gnu/usr.bin/perl/pod/perlintro.pod | 32 +- gnu/usr.bin/perl/pod/perliol.pod | 24 + gnu/usr.bin/perl/pod/perlipc.pod | 57 +- gnu/usr.bin/perl/pod/perllocale.pod | 42 +- gnu/usr.bin/perl/pod/perllol.pod | 22 +- gnu/usr.bin/perl/pod/perlmod.pod | 7 +- gnu/usr.bin/perl/pod/perlmodinstall.pod | 40 +- gnu/usr.bin/perl/pod/perlmodlib.PL | 772 +- gnu/usr.bin/perl/pod/perlmodstyle.pod | 8 +- gnu/usr.bin/perl/pod/perlmroapi.pod | 3 +- gnu/usr.bin/perl/pod/perlnewmod.pod | 7 +- gnu/usr.bin/perl/pod/perlobj.pod | 18 +- gnu/usr.bin/perl/pod/perlop.pod | 160 +- gnu/usr.bin/perl/pod/perlpacktut.pod | 4 +- gnu/usr.bin/perl/pod/perlperf.pod | 29 +- gnu/usr.bin/perl/pod/perlpod.pod | 16 +- gnu/usr.bin/perl/pod/perlpodspec.pod | 7 +- gnu/usr.bin/perl/pod/perlpodstyle.pod | 2 +- gnu/usr.bin/perl/pod/perlpolicy.pod | 9 +- gnu/usr.bin/perl/pod/perlport.pod | 86 +- gnu/usr.bin/perl/pod/perlre.pod | 246 +- gnu/usr.bin/perl/pod/perlreapi.pod | 60 +- gnu/usr.bin/perl/pod/perlrebackslash.pod | 34 +- gnu/usr.bin/perl/pod/perlrecharclass.pod | 51 +- gnu/usr.bin/perl/pod/perlref.pod | 50 +- gnu/usr.bin/perl/pod/perlrequick.pod | 8 +- gnu/usr.bin/perl/pod/perlreref.pod | 3 +- gnu/usr.bin/perl/pod/perlretut.pod | 103 +- gnu/usr.bin/perl/pod/perlrun.pod | 80 +- gnu/usr.bin/perl/pod/perlsec.pod | 12 +- gnu/usr.bin/perl/pod/perlstyle.pod | 7 + gnu/usr.bin/perl/pod/perlsub.pod | 151 +- gnu/usr.bin/perl/pod/perlsyn.pod | 248 +- gnu/usr.bin/perl/pod/perlthrtut.pod | 86 +- gnu/usr.bin/perl/pod/perltie.pod | 34 +- gnu/usr.bin/perl/pod/perlunicode.pod | 103 +- gnu/usr.bin/perl/pod/perlunicook.pod | 27 +- gnu/usr.bin/perl/pod/perlunifaq.pod | 23 +- gnu/usr.bin/perl/pod/perluniintro.pod | 14 +- gnu/usr.bin/perl/pod/perlutil.pod | 75 +- gnu/usr.bin/perl/pod/perlvar.pod | 250 +- gnu/usr.bin/perl/pp.c | 6141 +- gnu/usr.bin/perl/pp.h | 111 +- gnu/usr.bin/perl/pp_ctl.c | 5530 +- gnu/usr.bin/perl/pp_hot.c | 2957 +- gnu/usr.bin/perl/pp_pack.c | 3852 +- gnu/usr.bin/perl/pp_proto.h | 14 + gnu/usr.bin/perl/pp_sort.c | 13 +- gnu/usr.bin/perl/pp_sys.c | 4098 +- gnu/usr.bin/perl/proto.h | 629 +- gnu/usr.bin/perl/reentr.c | 374 +- gnu/usr.bin/perl/regcharclass.h | 3114 +- gnu/usr.bin/perl/regcomp.c | 9294 +-- gnu/usr.bin/perl/regcomp.h | 115 +- gnu/usr.bin/perl/regcomp.sym | 51 +- .../perl/regen/charset_translations.pl | 24 +- gnu/usr.bin/perl/regen/ebcdic.pl | 13 +- gnu/usr.bin/perl/regen/embed.pl | 699 +- gnu/usr.bin/perl/regen/embed_lib.pl | 149 +- gnu/usr.bin/perl/regen/feature.pl | 748 +- gnu/usr.bin/perl/regen/genpacksizetables.pl | 2 +- gnu/usr.bin/perl/regen/keywords.pl | 22 +- gnu/usr.bin/perl/regen/lib_cleanup.pl | 10 +- gnu/usr.bin/perl/regen/mg_vtable.pl | 445 +- gnu/usr.bin/perl/regen/mk_PL_charclass.pl | 12 +- gnu/usr.bin/perl/regen/mk_invlists.pl | 112 +- gnu/usr.bin/perl/regen/op_private | 30 +- gnu/usr.bin/perl/regen/opcode.pl | 350 +- gnu/usr.bin/perl/regen/opcodes | 16 + gnu/usr.bin/perl/regen/overload.pl | 10 +- gnu/usr.bin/perl/regen/reentr.pl | 715 +- gnu/usr.bin/perl/regen/regcharclass.pl | 700 +- .../regen/regcharclass_multi_char_folds.pl | 60 +- gnu/usr.bin/perl/regen/regcomp.pl | 172 +- gnu/usr.bin/perl/regen/regen_lib.pl | 63 +- gnu/usr.bin/perl/regen/unicode_constants.pl | 787 +- gnu/usr.bin/perl/regen/warnings.pl | 874 +- gnu/usr.bin/perl/regen_perly.pl | 34 +- gnu/usr.bin/perl/regexec.c | 7975 ++- gnu/usr.bin/perl/regexp.h | 674 +- gnu/usr.bin/perl/regnodes.h | 1761 +- gnu/usr.bin/perl/runtests.SH | 5 +- gnu/usr.bin/perl/scope.c | 997 +- gnu/usr.bin/perl/scope.h | 216 +- gnu/usr.bin/perl/stadtx_hash.h | 283 - gnu/usr.bin/perl/sv.c | 13448 ++-- gnu/usr.bin/perl/sv.h | 1576 +- gnu/usr.bin/perl/symbian/PerlApp.cpp | 546 - gnu/usr.bin/perl/symbian/PerlApp.h | 81 - gnu/usr.bin/perl/symbian/PerlApp.hrh | 19 - gnu/usr.bin/perl/symbian/PerlAppAif.rss | 21 - gnu/usr.bin/perl/symbian/PerlBase.cpp | 425 - gnu/usr.bin/perl/symbian/PerlBase.h | 127 - gnu/usr.bin/perl/symbian/PerlBase.pod | 204 - gnu/usr.bin/perl/symbian/PerlRecog.cpp | 57 - gnu/usr.bin/perl/symbian/PerlRecog.mmp | 9 - gnu/usr.bin/perl/symbian/PerlUi.cpp | 273 - gnu/usr.bin/perl/symbian/PerlUi.h | 120 - gnu/usr.bin/perl/symbian/PerlUi.hrh | 14 - gnu/usr.bin/perl/symbian/PerlUiS60.rss | 144 - gnu/usr.bin/perl/symbian/PerlUiS80.rss | 95 - gnu/usr.bin/perl/symbian/PerlUiS90.rss | 95 - gnu/usr.bin/perl/symbian/PerlUiUIQ.rss | 124 - gnu/usr.bin/perl/symbian/PerlUtil.cpp | 117 - gnu/usr.bin/perl/symbian/PerlUtil.h | 36 - gnu/usr.bin/perl/symbian/PerlUtil.pod | 42 - gnu/usr.bin/perl/symbian/README | 20 - gnu/usr.bin/perl/symbian/TODO | 198 - gnu/usr.bin/perl/symbian/bld.inf | 4 - gnu/usr.bin/perl/symbian/config.pl | 994 - gnu/usr.bin/perl/symbian/config.sh | 961 - gnu/usr.bin/perl/symbian/cwd.pl | 6 - gnu/usr.bin/perl/symbian/demo_pl | 128 - .../perl/symbian/ext/Moped/Msg/Msg.mmp | 1 - .../perl/symbian/ext/Moped/Msg/Msg.pkg | 16 - gnu/usr.bin/perl/symbian/ext/Moped/Msg/Msg.pm | 9 - gnu/usr.bin/perl/symbian/ext/Moped/Msg/Msg.xs | 51 - gnu/usr.bin/perl/symbian/ext/Moped/Msg/README | 49 - .../perl/symbian/ext/Moped/Msg/bld.inf | 4 - .../perl/symbian/ext/Moped/Msg/location.pl | 8 - .../perl/symbian/find_writeable_data.pl | 73 - gnu/usr.bin/perl/symbian/hexdump.pl | 41 - gnu/usr.bin/perl/symbian/install.cfg | 119 - gnu/usr.bin/perl/symbian/makesis.pl | 203 - gnu/usr.bin/perl/symbian/port.pl | 6 - gnu/usr.bin/perl/symbian/sanity.pl | 36 - gnu/usr.bin/perl/symbian/sdk.pl | 216 - gnu/usr.bin/perl/symbian/sisify.pl | 410 - gnu/usr.bin/perl/symbian/symbian_dll.cpp | 24 - gnu/usr.bin/perl/symbian/symbian_proto.h | 73 - gnu/usr.bin/perl/symbian/symbian_stubs.c | 112 - gnu/usr.bin/perl/symbian/symbian_stubs.h | 22 - gnu/usr.bin/perl/symbian/symbian_utils.cpp | 422 - gnu/usr.bin/perl/symbian/symbianish.h | 218 - gnu/usr.bin/perl/symbian/uid.pl | 1 - gnu/usr.bin/perl/symbian/version.pl | 22 - gnu/usr.bin/perl/symbian/xsbuild.pl | 976 - gnu/usr.bin/perl/t/README | 16 +- gnu/usr.bin/perl/t/TEST | 31 +- gnu/usr.bin/perl/t/comp/multiline.t | 2 +- gnu/usr.bin/perl/t/comp/parser.t | 48 +- gnu/usr.bin/perl/t/comp/require.t | 11 +- gnu/usr.bin/perl/t/comp/use.t | 52 +- gnu/usr.bin/perl/t/harness | 40 +- gnu/usr.bin/perl/t/io/bom.t | 3 +- gnu/usr.bin/perl/t/io/dup.t | 2 +- gnu/usr.bin/perl/t/io/fs.t | 26 +- gnu/usr.bin/perl/t/io/perlio.t | 2 +- gnu/usr.bin/perl/t/io/pipe.t | 2 +- gnu/usr.bin/perl/t/io/socket.t | 28 + gnu/usr.bin/perl/t/io/tell.t | 7 +- gnu/usr.bin/perl/t/io/utf8.t | 3 +- gnu/usr.bin/perl/t/lib/Cname.pm | 4 + gnu/usr.bin/perl/t/lib/common.pl | 2 +- gnu/usr.bin/perl/t/lib/croak/op | 2 +- gnu/usr.bin/perl/t/lib/croak/toke | 53 +- gnu/usr.bin/perl/t/lib/feature/implicit | 3 + gnu/usr.bin/perl/t/lib/h2ph.pht | 4 + gnu/usr.bin/perl/t/lib/warnings/7fatal | 2 - gnu/usr.bin/perl/t/lib/warnings/mg | 8 +- gnu/usr.bin/perl/t/lib/warnings/op | 96 +- gnu/usr.bin/perl/t/lib/warnings/perlio | 14 - gnu/usr.bin/perl/t/lib/warnings/pp_sys | 17 +- gnu/usr.bin/perl/t/lib/warnings/regcomp | 15 +- gnu/usr.bin/perl/t/lib/warnings/regexec | 6 +- gnu/usr.bin/perl/t/lib/warnings/sv | 34 +- gnu/usr.bin/perl/t/lib/warnings/toke | 49 +- gnu/usr.bin/perl/t/loc_tools.pl | 174 +- gnu/usr.bin/perl/t/op/aassign.t | 12 +- gnu/usr.bin/perl/t/op/alarm.t | 2 +- gnu/usr.bin/perl/t/op/args.t | 3 - gnu/usr.bin/perl/t/op/array.t | 16 +- gnu/usr.bin/perl/t/op/blocks.t | 2 +- gnu/usr.bin/perl/t/op/bop.t | 30 +- gnu/usr.bin/perl/t/op/caller.t | 38 +- gnu/usr.bin/perl/t/op/chdir.t | 4 +- gnu/usr.bin/perl/t/op/closure.t | 4 +- gnu/usr.bin/perl/t/op/coreamp.t | 289 +- gnu/usr.bin/perl/t/op/coresubs.t | 6 +- gnu/usr.bin/perl/t/op/dump.t | 3 + gnu/usr.bin/perl/t/op/each.t | 114 +- gnu/usr.bin/perl/t/op/filetest.t | 10 +- gnu/usr.bin/perl/t/op/for.t | 85 +- gnu/usr.bin/perl/t/op/fork.t | 2 +- gnu/usr.bin/perl/t/op/getppid.t | 2 +- gnu/usr.bin/perl/t/op/goto.t | 3 +- gnu/usr.bin/perl/t/op/groups.t | 20 +- gnu/usr.bin/perl/t/op/gv.t | 82 +- gnu/usr.bin/perl/t/op/hash.t | 8 +- gnu/usr.bin/perl/t/op/hexfp.t | 2 +- gnu/usr.bin/perl/t/op/inc.t | 62 +- gnu/usr.bin/perl/t/op/index.t | 10 +- gnu/usr.bin/perl/t/op/infnan.t | 30 +- gnu/usr.bin/perl/t/op/lc.t | 23 +- gnu/usr.bin/perl/t/op/length.t | 138 +- gnu/usr.bin/perl/t/op/lex.t | 108 +- gnu/usr.bin/perl/t/op/lex_assign.t | 2 +- gnu/usr.bin/perl/t/op/local.t | 2 +- gnu/usr.bin/perl/t/op/lvref.t | 7 +- gnu/usr.bin/perl/t/op/magic.t | 217 +- gnu/usr.bin/perl/t/op/mydef.t | 11 +- gnu/usr.bin/perl/t/op/oct.t | 7 +- gnu/usr.bin/perl/t/op/pack.t | 262 +- gnu/usr.bin/perl/t/op/print.t | 18 +- gnu/usr.bin/perl/t/op/ref.t | 78 +- gnu/usr.bin/perl/t/op/signatures.t | 397 +- gnu/usr.bin/perl/t/op/sort.t | 47 +- gnu/usr.bin/perl/t/op/splice.t | 6 + gnu/usr.bin/perl/t/op/split.t | 62 +- gnu/usr.bin/perl/t/op/split_unicode.t | 13 +- gnu/usr.bin/perl/t/op/sprintf.t | 2 +- gnu/usr.bin/perl/t/op/sprintf2.t | 48 +- gnu/usr.bin/perl/t/op/stat.t | 69 +- gnu/usr.bin/perl/t/op/svleak.t | 8 +- gnu/usr.bin/perl/t/op/switch.t | 5 +- gnu/usr.bin/perl/t/op/sysio.t | 4 +- gnu/usr.bin/perl/t/op/taint.t | 80 +- gnu/usr.bin/perl/t/op/threads.t | 17 +- gnu/usr.bin/perl/t/op/tie.t | 91 +- gnu/usr.bin/perl/t/op/time.t | 2 +- gnu/usr.bin/perl/t/op/tr.t | 6 +- gnu/usr.bin/perl/t/op/ver.t | 19 +- gnu/usr.bin/perl/t/op/warn.t | 17 +- gnu/usr.bin/perl/t/op/while.t | 2 +- gnu/usr.bin/perl/t/op/write.t | 9 +- gnu/usr.bin/perl/t/opbasic/arith.t | 67 +- gnu/usr.bin/perl/t/opbasic/qq.t | 4 +- gnu/usr.bin/perl/t/perf/benchmarks | 6 +- gnu/usr.bin/perl/t/perf/opcount.t | 113 +- gnu/usr.bin/perl/t/perf/taint.t | 3 + gnu/usr.bin/perl/t/porting/bench.t | 3 +- gnu/usr.bin/perl/t/porting/customized.dat | 61 +- gnu/usr.bin/perl/t/porting/diag.t | 19 +- gnu/usr.bin/perl/t/porting/dual-life.t | 8 +- gnu/usr.bin/perl/t/porting/globvar.t | 6 +- .../perl/t/porting/known_pod_issues.dat | 84 +- gnu/usr.bin/perl/t/porting/libperl.t | 129 +- gnu/usr.bin/perl/t/porting/manifest.t | 6 +- gnu/usr.bin/perl/t/porting/pod_rules.t | 4 +- gnu/usr.bin/perl/t/porting/podcheck.t | 226 +- gnu/usr.bin/perl/t/porting/readme.t | 2 - gnu/usr.bin/perl/t/porting/regen.t | 11 +- gnu/usr.bin/perl/t/porting/utils.t | 9 + gnu/usr.bin/perl/t/re/bigfuzzy_not_utf8.t | Bin 36462 -> 36463 bytes gnu/usr.bin/perl/t/re/charset.t | 4 +- gnu/usr.bin/perl/t/re/pat.t | 84 +- gnu/usr.bin/perl/t/re/pat_advanced.t | 142 +- gnu/usr.bin/perl/t/re/pat_re_eval.t | 3 +- gnu/usr.bin/perl/t/re/qr-72922.t | 5 +- gnu/usr.bin/perl/t/re/re_tests | 89 +- gnu/usr.bin/perl/t/re/reg_email.t | 1 - gnu/usr.bin/perl/t/re/reg_eval_scope.t | 2 +- gnu/usr.bin/perl/t/re/reg_mesg.t | 116 +- gnu/usr.bin/perl/t/re/regex_sets.t | 26 +- gnu/usr.bin/perl/t/re/regexp.t | 2 +- gnu/usr.bin/perl/t/re/speed.t | 4 +- gnu/usr.bin/perl/t/run/fresh_perl.t | 4 +- gnu/usr.bin/perl/t/run/locale.t | 45 +- gnu/usr.bin/perl/t/run/runenv.t | 50 +- gnu/usr.bin/perl/t/run/switchDx.t | 23 +- gnu/usr.bin/perl/t/run/switches.t | 31 +- gnu/usr.bin/perl/t/run/switcht.t | 6 + gnu/usr.bin/perl/t/test.pl | 249 +- gnu/usr.bin/perl/t/uni/method.t | 3 +- gnu/usr.bin/perl/t/uni/overload.t | 4 +- gnu/usr.bin/perl/taint.c | 165 +- gnu/usr.bin/perl/thread.h | 310 +- gnu/usr.bin/perl/time64.c | 4 +- gnu/usr.bin/perl/time64.h | 10 +- gnu/usr.bin/perl/toke.c | 6659 +- gnu/usr.bin/perl/uconfig.h | 130 +- gnu/usr.bin/perl/uconfig.sh | 29 +- gnu/usr.bin/perl/uconfig64.sh | 29 +- gnu/usr.bin/perl/unicode_constants.h | 72 +- gnu/usr.bin/perl/universal.c | 650 +- gnu/usr.bin/perl/unixish.h | 4 +- gnu/usr.bin/perl/utf8.c | 2029 +- gnu/usr.bin/perl/utf8.h | 809 +- gnu/usr.bin/perl/utfebcdic.h | 307 +- gnu/usr.bin/perl/util.c | 3821 +- gnu/usr.bin/perl/util.h | 41 +- gnu/usr.bin/perl/utils.lst | 8 +- gnu/usr.bin/perl/utils/Makefile.PL | 18 +- gnu/usr.bin/perl/utils/enc2xs.PL | 2 +- gnu/usr.bin/perl/utils/encguess.PL | 2 +- gnu/usr.bin/perl/utils/h2ph.PL | 8 +- gnu/usr.bin/perl/utils/h2xs.PL | 2 +- gnu/usr.bin/perl/utils/libnetcfg.PL | 2 +- gnu/usr.bin/perl/utils/perlbug.PL | 14 +- gnu/usr.bin/perl/utils/perlivp.PL | 2 +- gnu/usr.bin/perl/utils/pl2pm.PL | 2 +- gnu/usr.bin/perl/utils/splain.PL | 2 +- gnu/usr.bin/perl/vms/descrip_mms.template | 16 +- gnu/usr.bin/perl/vms/vms.c | 5240 +- gnu/usr.bin/perl/vms/vmsish.h | 8 +- gnu/usr.bin/perl/vutil.c | 13 +- gnu/usr.bin/perl/vutil.h | 151 - gnu/usr.bin/perl/vxs.inc | 25 +- gnu/usr.bin/perl/warnings.h | 283 +- gnu/usr.bin/perl/win32/GNUmakefile | 394 +- gnu/usr.bin/perl/win32/Makefile | 227 +- gnu/usr.bin/perl/win32/bin/pl2bat.pl | 107 +- gnu/usr.bin/perl/win32/config.gc | 29 +- gnu/usr.bin/perl/win32/config.vc | 25 +- gnu/usr.bin/perl/win32/config_H.gc | 673 +- gnu/usr.bin/perl/win32/config_H.vc | 660 +- gnu/usr.bin/perl/win32/config_sh.PL | 48 +- gnu/usr.bin/perl/win32/fcrypt.c | 420 +- gnu/usr.bin/perl/win32/include/dirent.h | 20 +- gnu/usr.bin/perl/win32/include/sys/socket.h | 2 +- gnu/usr.bin/perl/win32/makefile.mk | 1922 - gnu/usr.bin/perl/win32/perlglob.c | 22 +- gnu/usr.bin/perl/win32/perlhost.h | 560 +- gnu/usr.bin/perl/win32/perllib.c | 188 +- gnu/usr.bin/perl/win32/pod.mak | 16 + gnu/usr.bin/perl/win32/vdir.h | 720 +- gnu/usr.bin/perl/win32/vmem.h | 788 +- gnu/usr.bin/perl/win32/win32.c | 3319 +- gnu/usr.bin/perl/win32/win32.h | 94 +- gnu/usr.bin/perl/win32/win32io.c | 391 - gnu/usr.bin/perl/win32/win32iop.h | 9 +- gnu/usr.bin/perl/win32/win32sck.c | 406 +- gnu/usr.bin/perl/write_buildcustomize.pl | 1 + 1602 files changed, 197951 insertions(+), 199881 deletions(-) delete mode 100644 gnu/usr.bin/perl/NetWare/CLIBsdio.h delete mode 100644 gnu/usr.bin/perl/NetWare/CLIBstr.h delete mode 100644 gnu/usr.bin/perl/NetWare/CLIBstuf.c delete mode 100644 gnu/usr.bin/perl/NetWare/CLIBstuf.h delete mode 100644 gnu/usr.bin/perl/NetWare/MP.imp delete mode 100644 gnu/usr.bin/perl/NetWare/Main.c delete mode 100644 gnu/usr.bin/perl/NetWare/Makefile delete mode 100644 gnu/usr.bin/perl/NetWare/NWTInfo.c delete mode 100644 gnu/usr.bin/perl/NetWare/NWUtil.c delete mode 100644 gnu/usr.bin/perl/NetWare/Nwmain.c delete mode 100644 gnu/usr.bin/perl/NetWare/Nwpipe.c delete mode 100644 gnu/usr.bin/perl/NetWare/bat/Buildtype.bat delete mode 100644 gnu/usr.bin/perl/NetWare/bat/SetCodeWar.bat delete mode 100644 gnu/usr.bin/perl/NetWare/bat/SetNWBld.bat delete mode 100644 gnu/usr.bin/perl/NetWare/bat/Setnlmsdk.bat delete mode 100644 gnu/usr.bin/perl/NetWare/bat/ToggleD2.bat delete mode 100644 gnu/usr.bin/perl/NetWare/config.wc delete mode 100644 gnu/usr.bin/perl/NetWare/config_H.wc delete mode 100644 gnu/usr.bin/perl/NetWare/config_h.PL delete mode 100644 gnu/usr.bin/perl/NetWare/config_sh.PL delete mode 100644 gnu/usr.bin/perl/NetWare/deb.h delete mode 100644 gnu/usr.bin/perl/NetWare/dl_netware.xs delete mode 100644 gnu/usr.bin/perl/NetWare/intdef.h delete mode 100644 gnu/usr.bin/perl/NetWare/interface.c delete mode 100644 gnu/usr.bin/perl/NetWare/interface.cpp delete mode 100644 gnu/usr.bin/perl/NetWare/interface.h delete mode 100644 gnu/usr.bin/perl/NetWare/iperlhost.h delete mode 100644 gnu/usr.bin/perl/NetWare/netware.h delete mode 100644 gnu/usr.bin/perl/NetWare/nw5.c delete mode 100644 gnu/usr.bin/perl/NetWare/nw5iop.h delete mode 100644 gnu/usr.bin/perl/NetWare/nw5sck.c delete mode 100644 gnu/usr.bin/perl/NetWare/nw5sck.h delete mode 100644 gnu/usr.bin/perl/NetWare/nw5thread.c delete mode 100644 gnu/usr.bin/perl/NetWare/nw5thread.h delete mode 100644 gnu/usr.bin/perl/NetWare/nwhashcls.cpp delete mode 100644 gnu/usr.bin/perl/NetWare/nwhashcls.h delete mode 100644 gnu/usr.bin/perl/NetWare/nwperlhost.h delete mode 100644 gnu/usr.bin/perl/NetWare/nwperlsys.c delete mode 100644 gnu/usr.bin/perl/NetWare/nwperlsys.h delete mode 100644 gnu/usr.bin/perl/NetWare/nwpipe.h delete mode 100644 gnu/usr.bin/perl/NetWare/nwplglob.c delete mode 100644 gnu/usr.bin/perl/NetWare/nwplglob.h delete mode 100644 gnu/usr.bin/perl/NetWare/nwstdio.h delete mode 100644 gnu/usr.bin/perl/NetWare/nwtinfo.h delete mode 100644 gnu/usr.bin/perl/NetWare/nwutil.h delete mode 100644 gnu/usr.bin/perl/NetWare/nwvmem.h delete mode 100644 gnu/usr.bin/perl/NetWare/perllib.cpp delete mode 100644 gnu/usr.bin/perl/NetWare/splittree.pl delete mode 100644 gnu/usr.bin/perl/NetWare/sv_nw.c delete mode 100644 gnu/usr.bin/perl/NetWare/t/NWModify.pl delete mode 100644 gnu/usr.bin/perl/NetWare/t/NWScripts.pl delete mode 100644 gnu/usr.bin/perl/NetWare/t/Readme.txt delete mode 100644 gnu/usr.bin/perl/NetWare/testnlm/echo/echo.c delete mode 100644 gnu/usr.bin/perl/NetWare/testnlm/type/type.c delete mode 100644 gnu/usr.bin/perl/NetWare/win32ish.h delete mode 100644 gnu/usr.bin/perl/Porting/check83.pl delete mode 100644 gnu/usr.bin/perl/Porting/cherrymaint delete mode 100644 gnu/usr.bin/perl/Porting/make_modlib_cpan.pl delete mode 100644 gnu/usr.bin/perl/README.dos delete mode 100644 gnu/usr.bin/perl/README.macos delete mode 100644 gnu/usr.bin/perl/README.netware delete mode 100644 gnu/usr.bin/perl/README.symbian delete mode 100644 gnu/usr.bin/perl/cpan/DB_File/DB_File_BS delete mode 100644 gnu/usr.bin/perl/cpan/Digest/Digest.pm delete mode 100644 gnu/usr.bin/perl/cpan/Digest/Digest/base.pm delete mode 100644 gnu/usr.bin/perl/cpan/Digest/Digest/file.pm delete mode 100644 gnu/usr.bin/perl/cpan/ExtUtils-MakeMaker/t/testrules.yml delete mode 100644 gnu/usr.bin/perl/cpan/MIME-Base64/Base64.pm delete mode 100644 gnu/usr.bin/perl/cpan/MIME-Base64/QuotedPrint.pm delete mode 100755 gnu/usr.bin/perl/cpan/Math-BigInt/t/calling.t delete mode 100755 gnu/usr.bin/perl/cpan/Math-BigInt/t/const_mbf.t delete mode 100755 gnu/usr.bin/perl/cpan/Math-BigInt/t/constant.t delete mode 100755 gnu/usr.bin/perl/cpan/Math-BigInt/t/lib_load.t delete mode 100755 gnu/usr.bin/perl/cpan/bignum/t/big_e_pi.t delete mode 100755 gnu/usr.bin/perl/cpan/bignum/t/bii_e_pi.t delete mode 100755 gnu/usr.bin/perl/cpan/bignum/t/biinfnan.t delete mode 100755 gnu/usr.bin/perl/cpan/bignum/t/bir_e_pi.t delete mode 100755 gnu/usr.bin/perl/cpan/bignum/t/bn_lite.t delete mode 100755 gnu/usr.bin/perl/cpan/bignum/t/bninfnan.t delete mode 100755 gnu/usr.bin/perl/cpan/bignum/t/br_lite.t delete mode 100755 gnu/usr.bin/perl/cpan/bignum/t/brinfnan.t delete mode 100644 gnu/usr.bin/perl/cpan/bignum/t/infnan.inc delete mode 100755 gnu/usr.bin/perl/cpan/bignum/t/option_l.t delete mode 100755 gnu/usr.bin/perl/cpan/bignum/t/scope_f.t delete mode 100755 gnu/usr.bin/perl/cpan/bignum/t/scope_i.t delete mode 100755 gnu/usr.bin/perl/cpan/bignum/t/scope_r.t delete mode 100644 gnu/usr.bin/perl/cpan/libnet/t/libnet_t.pl delete mode 100644 gnu/usr.bin/perl/dist/Devel-PPPort/t/01_test.t delete mode 100644 gnu/usr.bin/perl/dist/Devel-PPPort/t/HvNAME.t delete mode 100644 gnu/usr.bin/perl/dist/Devel-PPPort/t/MY_CXT.t delete mode 100644 gnu/usr.bin/perl/dist/Devel-PPPort/t/SvPV.t delete mode 100644 gnu/usr.bin/perl/dist/Devel-PPPort/t/SvREFCNT.t delete mode 100644 gnu/usr.bin/perl/dist/Devel-PPPort/t/Sv_set.t delete mode 100644 gnu/usr.bin/perl/dist/Devel-PPPort/t/call.t delete mode 100644 gnu/usr.bin/perl/dist/Devel-PPPort/t/cop.t delete mode 100644 gnu/usr.bin/perl/dist/Devel-PPPort/t/exception.t delete mode 100644 gnu/usr.bin/perl/dist/Devel-PPPort/t/format.t delete mode 100644 gnu/usr.bin/perl/dist/Devel-PPPort/t/grok.t delete mode 100644 gnu/usr.bin/perl/dist/Devel-PPPort/t/gv.t delete mode 100644 gnu/usr.bin/perl/dist/Devel-PPPort/t/limits.t delete mode 100644 gnu/usr.bin/perl/dist/Devel-PPPort/t/locale.t delete mode 100644 gnu/usr.bin/perl/dist/Devel-PPPort/t/mPUSH.t delete mode 100644 gnu/usr.bin/perl/dist/Devel-PPPort/t/magic.t delete mode 100644 gnu/usr.bin/perl/dist/Devel-PPPort/t/memory.t delete mode 100644 gnu/usr.bin/perl/dist/Devel-PPPort/t/mess.t delete mode 100644 gnu/usr.bin/perl/dist/Devel-PPPort/t/misc.t delete mode 100644 gnu/usr.bin/perl/dist/Devel-PPPort/t/newCONSTSUB.t delete mode 100644 gnu/usr.bin/perl/dist/Devel-PPPort/t/newRV.t delete mode 100644 gnu/usr.bin/perl/dist/Devel-PPPort/t/newSV_type.t delete mode 100644 gnu/usr.bin/perl/dist/Devel-PPPort/t/newSVpv.t delete mode 100644 gnu/usr.bin/perl/dist/Devel-PPPort/t/podtest.t delete mode 100644 gnu/usr.bin/perl/dist/Devel-PPPort/t/ppphtest.t delete mode 100644 gnu/usr.bin/perl/dist/Devel-PPPort/t/pv_tools.t delete mode 100644 gnu/usr.bin/perl/dist/Devel-PPPort/t/pvs.t delete mode 100644 gnu/usr.bin/perl/dist/Devel-PPPort/t/shared_pv.t delete mode 100644 gnu/usr.bin/perl/dist/Devel-PPPort/t/snprintf.t delete mode 100644 gnu/usr.bin/perl/dist/Devel-PPPort/t/sprintf.t delete mode 100644 gnu/usr.bin/perl/dist/Devel-PPPort/t/strlfuncs.t delete mode 100644 gnu/usr.bin/perl/dist/Devel-PPPort/t/sv_xpvf.t delete mode 100644 gnu/usr.bin/perl/dist/Devel-PPPort/t/threads.t delete mode 100644 gnu/usr.bin/perl/dist/Devel-PPPort/t/utf8.t delete mode 100644 gnu/usr.bin/perl/dist/Devel-PPPort/t/uv.t delete mode 100644 gnu/usr.bin/perl/dist/Devel-PPPort/t/variables.t delete mode 100644 gnu/usr.bin/perl/dist/Devel-PPPort/t/warn.t delete mode 100644 gnu/usr.bin/perl/djgpp/config.over delete mode 100644 gnu/usr.bin/perl/djgpp/configure.bat delete mode 100644 gnu/usr.bin/perl/djgpp/djgpp.c delete mode 100644 gnu/usr.bin/perl/djgpp/djgpp.h delete mode 100644 gnu/usr.bin/perl/djgpp/djgppsed.sh delete mode 100644 gnu/usr.bin/perl/djgpp/fixpmain delete mode 100644 gnu/usr.bin/perl/ext/DynaLoader/dl_symbian.xs delete mode 100644 gnu/usr.bin/perl/ext/Pod-Html/t/pod2html-lib.pl delete mode 100644 gnu/usr.bin/perl/ext/Pod-Html/testdir/perlpodspec-copy.pod delete mode 100644 gnu/usr.bin/perl/ext/Pod-Html/testdir/perlvar-copy.pod delete mode 100644 gnu/usr.bin/perl/hints/dos_djgpp.sh delete mode 100644 gnu/usr.bin/perl/hints/uwin.sh delete mode 100644 gnu/usr.bin/perl/lib/unicore/To/Digit.pl delete mode 100644 gnu/usr.bin/perl/lib/unicore/To/Fold.pl delete mode 100644 gnu/usr.bin/perl/lib/unicore/To/Lower.pl delete mode 100644 gnu/usr.bin/perl/lib/unicore/To/Title.pl delete mode 100644 gnu/usr.bin/perl/lib/unicore/To/Upper.pl delete mode 100644 gnu/usr.bin/perl/lib/unicore/lib/InSC/Consona9.pl delete mode 100644 gnu/usr.bin/perl/perlapi.c delete mode 100644 gnu/usr.bin/perl/stadtx_hash.h delete mode 100644 gnu/usr.bin/perl/symbian/PerlApp.cpp delete mode 100644 gnu/usr.bin/perl/symbian/PerlApp.h delete mode 100644 gnu/usr.bin/perl/symbian/PerlApp.hrh delete mode 100644 gnu/usr.bin/perl/symbian/PerlAppAif.rss delete mode 100644 gnu/usr.bin/perl/symbian/PerlBase.cpp delete mode 100644 gnu/usr.bin/perl/symbian/PerlBase.h delete mode 100644 gnu/usr.bin/perl/symbian/PerlBase.pod delete mode 100644 gnu/usr.bin/perl/symbian/PerlRecog.cpp delete mode 100644 gnu/usr.bin/perl/symbian/PerlRecog.mmp delete mode 100644 gnu/usr.bin/perl/symbian/PerlUi.cpp delete mode 100644 gnu/usr.bin/perl/symbian/PerlUi.h delete mode 100644 gnu/usr.bin/perl/symbian/PerlUi.hrh delete mode 100644 gnu/usr.bin/perl/symbian/PerlUiS60.rss delete mode 100644 gnu/usr.bin/perl/symbian/PerlUiS80.rss delete mode 100644 gnu/usr.bin/perl/symbian/PerlUiS90.rss delete mode 100644 gnu/usr.bin/perl/symbian/PerlUiUIQ.rss delete mode 100644 gnu/usr.bin/perl/symbian/PerlUtil.cpp delete mode 100644 gnu/usr.bin/perl/symbian/PerlUtil.h delete mode 100644 gnu/usr.bin/perl/symbian/PerlUtil.pod delete mode 100644 gnu/usr.bin/perl/symbian/README delete mode 100644 gnu/usr.bin/perl/symbian/TODO delete mode 100644 gnu/usr.bin/perl/symbian/bld.inf delete mode 100644 gnu/usr.bin/perl/symbian/config.pl delete mode 100644 gnu/usr.bin/perl/symbian/config.sh delete mode 100644 gnu/usr.bin/perl/symbian/cwd.pl delete mode 100644 gnu/usr.bin/perl/symbian/demo_pl delete mode 100644 gnu/usr.bin/perl/symbian/ext/Moped/Msg/Msg.mmp delete mode 100644 gnu/usr.bin/perl/symbian/ext/Moped/Msg/Msg.pkg delete mode 100644 gnu/usr.bin/perl/symbian/ext/Moped/Msg/Msg.pm delete mode 100644 gnu/usr.bin/perl/symbian/ext/Moped/Msg/Msg.xs delete mode 100644 gnu/usr.bin/perl/symbian/ext/Moped/Msg/README delete mode 100644 gnu/usr.bin/perl/symbian/ext/Moped/Msg/bld.inf delete mode 100644 gnu/usr.bin/perl/symbian/ext/Moped/Msg/location.pl delete mode 100644 gnu/usr.bin/perl/symbian/find_writeable_data.pl delete mode 100644 gnu/usr.bin/perl/symbian/hexdump.pl delete mode 100644 gnu/usr.bin/perl/symbian/install.cfg delete mode 100644 gnu/usr.bin/perl/symbian/makesis.pl delete mode 100644 gnu/usr.bin/perl/symbian/port.pl delete mode 100644 gnu/usr.bin/perl/symbian/sanity.pl delete mode 100644 gnu/usr.bin/perl/symbian/sdk.pl delete mode 100644 gnu/usr.bin/perl/symbian/sisify.pl delete mode 100644 gnu/usr.bin/perl/symbian/symbian_dll.cpp delete mode 100644 gnu/usr.bin/perl/symbian/symbian_proto.h delete mode 100644 gnu/usr.bin/perl/symbian/symbian_stubs.c delete mode 100644 gnu/usr.bin/perl/symbian/symbian_stubs.h delete mode 100644 gnu/usr.bin/perl/symbian/symbian_utils.cpp delete mode 100644 gnu/usr.bin/perl/symbian/symbianish.h delete mode 100644 gnu/usr.bin/perl/symbian/uid.pl delete mode 100644 gnu/usr.bin/perl/symbian/version.pl delete mode 100644 gnu/usr.bin/perl/symbian/xsbuild.pl delete mode 100644 gnu/usr.bin/perl/win32/makefile.mk delete mode 100644 gnu/usr.bin/perl/win32/win32io.c diff --git a/gnu/usr.bin/perl/AUTHORS b/gnu/usr.bin/perl/AUTHORS index 2136fb21047..b9d2c66b250 100644 --- a/gnu/usr.bin/perl/AUTHORS +++ b/gnu/usr.bin/perl/AUTHORS @@ -22,6 +22,7 @@ A. Sinan Unur Aaron B. Dossett Aaron Crane Aaron J. Mackey +Aaron Kaplan Aaron Priven Aaron Trevena Abe Timmerman @@ -31,7 +32,7 @@ Abir Viqar Achim Bohnet Achim Gratz Adam Flott -Adam Hartley @BytesGuy +Adam Hartley @bytesguy Adam Kennedy Adam Krolnik Adam Milner @@ -63,6 +64,7 @@ Alex Waugh Alexander Alekseev Alexander Bluhm Alexander D'Archangel +Alexander Foken Alexander Gernler Alexander Gough Alexander Hartmaier @@ -73,15 +75,18 @@ Alexandr Ciornii Alexandr Savca Alexandre (Midnite) Jousset Alexei Alexandrov +Alexey Borzenkov Alexey Mahotkin Alexey Toptygin Alexey Tourbin Alexey V. Barantsev Ali Polatel Allen Smith +Alyssa Ross Ambrose Kofi Laing Ammon Riley Ananth Kesari +Anatoly Vorobey Anders Johnson Andreas Guðmundsson Andreas Karrer @@ -111,6 +116,7 @@ Andy Broad Andy Bussey Andy Dougherty Andy Lester +Andy Wardley Anno Siegel Anthony David Anthony Heading @@ -130,17 +136,22 @@ Artiom Morozov Artur Bergman Arvan Ash Berlin +Asher Mancinelli Ask Bjørn Hansen Atsushi Sugawara Audrey Tang Augustina Blair Axel Boldt +Axel Kollmorgen +B. Bucklan +Bah Barrie Slaymaker Barry Friedman Bart Kedryna Bas van Sisseren Beau Cox Ben Carter +Ben Cornett Ben Hengst Ben Morrow Ben Okopnik @@ -152,14 +163,19 @@ Benjamin Smith Benjamin Stuhl Benjamin Sugars Bernard Quatermass +Bernd Bernhard M. Wiedemann +Bharanee Rathna +Bilbo Bill Campbell Bill Glicker Billy Constantine +Biswapriyo Nath Blair Zajac Bo Borgerson Bo Johansson Bo Lindbergh +Bob Bob Dalgleish Bob Ernst Bob Wilkinson @@ -167,6 +183,8 @@ Boris Ratner Boris Zentner Boyd Gerber Brad Appleton +Brad Barden +Brad Baxter Brad Gilbert Brad Howerter Brad Hughes @@ -174,6 +192,7 @@ Brad Lanam Bradley Dean Bram Brandon Black +Branislav Zahradník Brendan Byrd Brendan O'Dea Breno G. de Oliveira @@ -196,7 +215,7 @@ Brian Phillips Brian Reichert Brian S. Cashman Brian Strand -Brooks D Boyd +Brooks D. Boyd Bruce Barnett Bruce J. Keeler Bruce P. Schuck @@ -248,6 +267,7 @@ Christian Burger Christian Hansen Christian Kirsch Christian Millour +Christian Walde (Mithaldu) Christian Winter Christoph Lamprecht Christophe Grosjean @@ -255,6 +275,7 @@ Christopher Chan-Nui Christopher Chavez Christopher Davis Christopher J. Madsen +Christopher Yeleighton chromatic Chuck Phillips Chun Bing Ge @@ -263,6 +284,7 @@ Claes Jacobsson Clark Cooper Claudio Ramirez Clinton A. Pierce +Clinton Gormley Colin Kuskie Colin McMillen Colin Meyer @@ -273,8 +295,10 @@ Conrad E. Kimball Craig A. Berry Craig DeForest Craig Milo Rogers +cuishuang Curtis Jewell -Curtis Poe +Curtis Poe +Cygwin Dabrien 'Dabe' Murphy Dagfinn Ilmari Mannsåker Dale Amon @@ -286,38 +310,46 @@ Dan Brook Dan Collins Dan Dascalescu Dan Dedrick +Dan Faigin Dan Hale Dan Jacobson Dan Kogai Dan Schmidt Dan Sugalski Daniel Berger +Daniel Böhmer Daniel Chetlin Daniel Dragan Daniel Frederick Crisman Daniel Grisinger Daniel Kahn Gillmor +Daniel Laügt Daniel Lieberman +Daniel M. Quinlan Daniel Muiño Daniel P. Berrange Daniel Perrett Daniel S. Lewart Daniel Yacob Danny R. Faught +Danny Rathjens Danny Sadinoff Darin McBride Darrell Kindred Darrell Schiebel Darren/Torin/Who Ever... +Dave Bailey Dave Bianchi Dave Cross Dave Hartnoll +Dave Lambley Dave Liney Dave Nelson Dave Paris Dave Rolsky Dave Schweisguth Dave Shariff Yadallee +David David Billinghurst David Caldwell David Campbell @@ -326,6 +358,7 @@ David Cantrell David Couture David D. Kilzer David Denholm +David Dick David Dyck David F. Haertig David Favor @@ -335,7 +368,7 @@ David Filo David Formosa David Gay David Glasser -David Golden +David Golden David H. Adler David H. Gutteridge David Hammen @@ -345,6 +378,7 @@ David Landgren David Leadbeater David M. Syzdek David Manura +David Marshall David McLean David Mitchell David Muir Sharnoff @@ -359,7 +393,7 @@ Davin Milun Dean Roehrich Dee Newcum deekoo -Dennis Kaarsemaker +Dennis Kaarsemaker Dennis Marsa Devin Heitmueller DH @@ -369,6 +403,7 @@ Dmitri Tikhonov Dmitry Karasik Dmitry Ulanov Dominic Dunlop +Dominic Hamon Dominic Hargreaves Dominique Dumont Dominique Quatravaux @@ -386,6 +421,7 @@ Drew Stephens Duke Leto Duncan Findlay E. Choroba +Earl Hood Ed Avis Ed J Ed Mooring @@ -406,13 +442,16 @@ Eric Brine Eric E. Coe Eric Fifer Eric Herman +Eric Lindblad Eric Melville Eric Promislow Erich Rickheit +Erik Eryq Etienne Grossman Eugen Konkov Eugene Alterman +Eugene Alvin Villar Evan Miller Evan Zacks Fabien Tassin @@ -457,9 +496,12 @@ Gerd Knops Gerrit P. Haase Gideon Israel Dsouza Giles Lean +Giovanni Tataranni Gisle Aas +GitHub Glenn D. Golden Glenn Linderman +Gomar Gordon J. Miller Gordon Lack Goro Fuji @@ -514,7 +556,7 @@ Hojung Youn Holger Bechtold Hongwen Qiu Horst von Brand -Hrunting Jonhson +Hrunting Johnson Hubert Feyrer Hugo van der Sanden Hunter Kelly @@ -532,6 +574,7 @@ Ilmari Karonen Ilya Martynov Ilya N. Golubev Ilya Sandler +Ilya Sashcheka Ilya Zakharevich Inaba Hiroto Indy Singh @@ -539,7 +582,9 @@ Ingo Weinhold Ingy döt Net insecure Irving Reid +Ivan Baidakou Ivan Kurmanov +Ivan Panchenko <39594356+ivan-pan@users.noreply.github.com> Ivan Pozdeev Ivan Tubert-Brohman J. David Blackstone @@ -549,10 +594,12 @@ Jacinta Richardson Jack Shirazi Jacques Germishuys Jacqui Caren +Jae Bradley Jake Hamby Jakub Wilk James James A. Duncan +James Bence James Clarke James E Keenan James FitzGibbon @@ -578,6 +625,7 @@ Jason McIntosh Jason Shirk Jason Stewart Jason Varsoke +Jason Vas Dias Jay Hannah Jay Rogers JD Laub @@ -616,6 +664,8 @@ Jim Miner Jim Richardson Jim Schneider Jirka Hruška +jkahrman +JMS Joachim Huober Joaquin Ferrero Jochen Wiedmann @@ -646,6 +696,7 @@ John Hawkinson John Heidemann John Holdsworth John Hughes +John Karr John Kristian John L. Allen John Lightsey @@ -665,6 +716,7 @@ John SJ Anderson John Stoffel John Stumbles John Tobey +John W. Krahn John Wright Johnny Lam Jon Eveland @@ -676,6 +728,7 @@ Jonathan Fine Jonathan Hudson Jonathan I. Kamens Jonathan Roy +Jonathan Steinert Jonathan Stowe Joost van Baal Jos I. Boumans @@ -695,6 +748,7 @@ Julian Yip juna Jungshik Shin Justin Banks +Justin Case Jörg Walter Ka-Ping Yee kafka @@ -758,14 +812,17 @@ Lars Hecking Larwan Berke Laszlo Molnar Laurent Dami +Leam Hall Leif Huhn Len Johnson +Len Weisberg Leo Lapworth Leon Brocard Leon Timmermans Les Peters Lesley Binks Lincoln D. Stein +Linda Walsh Lionel Cons Louis Strous Lubomir Rintel @@ -778,6 +835,7 @@ Luke Closs Luke Ross Lupe Christoph Luther Huffman +Magnus Woldrich Maik Hentsche Major Sébastien Makoto MATSUSHITA @@ -787,6 +845,7 @@ Manuel Valente Marc Green Marc Lehmann Marc Paquette +Marc Reisner Marc Simpson Marc-Philip Werner Marcel Grünauer @@ -826,6 +885,7 @@ Marnix van Ammers Martien Verbruggen Martijn Koster Martijn Lievaart +Martin Becker Martin Hasch Martin Husemann Martin J. Bligh @@ -871,6 +931,7 @@ Michael A Chase Michael Breen Michael Bunk Michael Carman +Michael Cartmell Michael Cook Michael Cummings Michael De La Rue @@ -889,9 +950,11 @@ Michael Stevens Michael van Elst Michael Witten Michele Sardo +Michiel Beijen Mik Firestone Mike Doherty Mike Fletcher +Mike Fulton Mike Giroux Mike Guy Mike Heins @@ -919,9 +982,10 @@ Nathan Kurz Nathan Torkington Nathan Trapuzzano Neale Ferguson -Neil Bowers +Neil Bowers Neil Watkiss Neil Williams +Nga Tang Chan Nicholas Clark Nicholas Oxhøj Nicholas Perez @@ -933,13 +997,15 @@ Nick Johnston Nick Logan Nick Williams Nicolas Kaiser -Nicolas R. @atoomic +Nicolas R Niels Thykier Nigel Sandever +Niklas Edmundsson Niko Tyni Nikola Knezevic Nikola Milutinovic Nikolai Eipel +Niyas Sait Noah Nobuhiro Iwamatsu Noirin Shirley @@ -949,6 +1015,8 @@ Norman Koch Norton T. Allen Nuno Carvalho Offer Kaye +OKAIE Yutaka +Olaf Alders Olaf Flebbe Olaf Titz Oleg Nesterov @@ -973,6 +1041,7 @@ Pau Amma Paul A Sand Paul Boven Paul David Fardy +Paul de Weerd Paul Eggert Paul Evans Paul Fenwick @@ -993,6 +1062,8 @@ Pavel Zakouril Pedro Felipe Horrillo Guerra Per Einar Ellefsen Perlover +Petar-Kaleychev <87611976+Petar-Kaleychev@users.noreply.github.com> +Pete Houston Pete Peterson Peter Avalos Peter BARABAS @@ -1003,6 +1074,7 @@ Peter Eisentraut Peter Gessner Peter Gordon Peter Haworth +Peter J. Acklam Peter J. Farley III Peter J. Holzer Peter Jaspers-Fayer @@ -1037,13 +1109,18 @@ Piotr Klaban Piotr Roszatycki Pip Cet Pradeep Hodigere +Pravus +Premchai Prymmer/Kahn +pxm Quentin Fennessy Radu Greab +raf Rafael Garcia-Suarez Rainer Keuchel Rainer Orth Rainer Tammer +raiph @raiph Rajesh Mandalemula Rajesh Vaidheeswarran Ralf S. Engelschall @@ -1058,15 +1135,16 @@ Raul Dias Raymund Will Redvers Davies Reini Urban -Renee Baecker +Renee Baecker Reuben Thomas Rex Dieter Rhesa Rozendaal -Ricardo Signes +Ricardo Signes Rich Morin Rich Rauenzahn Rich Salz Richard A. Wells +Richard Beckett Richard Clamp Richard Foley Richard Hatch @@ -1084,6 +1162,7 @@ Rick Delaney Rick Pluta Rick Smith Rickard Westman +Risto Kankkunen Rob Brown Rob Henderson Rob Hoelz @@ -1091,6 +1170,7 @@ Rob Napier Robert May Robert Millan Robert Partington +Robert Rothenberg Robert Sanders Robert Sebastian Gerus Robert Spier @@ -1101,6 +1181,7 @@ Rocco Caputo Roderick Schertler Rodger Anderson Rodolfo Carvalho +Romano Ronald F. Guilmette Ronald J. Kimball Ronald Schmidt @@ -1120,13 +1201,16 @@ Salvador Ortiz Garcia Sam Kimbrel Sam Tregar Sam Vilain +Samanta Navarro Samuel Smith Samuel Thibault Samuli Kärkkäinen Santtu Ojanperä +Sascha Blank Sawyer X Schuyler Erle Scott A Crosby +Scott Baker Scott Bronson Scott Gifford Scott Henry @@ -1145,9 +1229,13 @@ Sebastian Wittmeier Sebastien Barre Sergey Alekseev Sergey Aleynikov +Sergey Poznyakoff +Sergey Skvortsov +Sergey Zhmylove Sergiy Borodych Sevan Janiyan Shawn +Shawn Boyette Shawn M Moore Sherm Pendley Shigeya Suzuki @@ -1164,6 +1252,7 @@ Simon Parsons Simon Schubert Sinan Unur Sisyphus +Sizhe Zhao Slaven Rezic Smylers Solar Designer @@ -1206,6 +1295,7 @@ Steven Schubiger Stian Seeberg Stéphane Payrard Sullivan Beck +Sven Kirmess Sven Strickroth Sven Verdoolaege Svyatoslav @@ -1214,6 +1304,7 @@ SynaptiCAD, Inc. Sébastien Aperghis-Tramoni Sérgio Durigan Júnior Tadeusz Sośnierz +TAKAI Kousuke <62541129+t-a-k@users.noreply.github.com> Takis Psarogiannakopoulos Taro KAWAGISHI Tassilo von Parseval @@ -1256,6 +1347,7 @@ Todd Vierling Tokuhiro Matsuno Tom Bates Tom Brown +Tom Callaway Tom Christiansen Tom Dinger Tom Horsley @@ -1263,6 +1355,7 @@ Tom Hughes Tom Hukins Tom Phoenix Tom Spindler +Tom Stellard Tom Wyant Tomasz Konojacki Tomoyuki Sadahiro @@ -1294,6 +1387,8 @@ Ville Skyttä Vincent Pit Vishal Bhatia Vitali Peil +vividsnow +vividsnow @vividsnow Vlad Harchev Vladimir Alexiev Vladimir Marek @@ -1317,6 +1412,7 @@ William R Ward William Setzer William Williams William Yardley +Wilson P. Snyder II Winfried König Wolfgang Laun Wolfram Humann @@ -1334,7 +1430,9 @@ Yves Orton Zachary Miller Zachary Storer Zak B. Elep +Zakariyya Mughal Zbynek Vyskovsky Zefram Zsbán Ambrus Ævar Arnfjörð Bjarmason +Михаил Козачков diff --git a/gnu/usr.bin/perl/Configure b/gnu/usr.bin/perl/Configure index 77c4589bb7f..bd96249c07c 100644 --- a/gnu/usr.bin/perl/Configure +++ b/gnu/usr.bin/perl/Configure @@ -16,7 +16,7 @@ # you should use metaconfig. Perl uses a modified version of this # tool, and this, together with the metaconfig units, are available # in the git repository: -# $ git clone https://github.com/perl5-metaconfig/metaconfig metaconfig +# $ git clone https://github.com/Perl/metaconfig metaconfig # The original dist package (including metaconfig) is available on github: # $ git clone https://github.com/rmanfredi/dist.git dist-git # @@ -365,6 +365,7 @@ cf_by='' cf_time='' charbits='' charsize='' +compiler_warning='' contains='' cpp_stuff='' cpplast='' @@ -393,6 +394,7 @@ d_attribute_unused='' d_attribute_warn_unused_result='' d_printf_format_null='' d_backtrace='' +d_non_int_bitfields='' d_builtin_choose_expr='' d_builtin_expect='' d_builtin_add_overflow='' @@ -476,6 +478,8 @@ d_fds_bits='' d_fdclose='' d_fdim='' d_fegetround='' +d_ffs='' +d_ffsl='' d_fgetpos='' d_finite='' d_finitel='' @@ -513,6 +517,7 @@ d_gai_strerror='' d_Gconvert='' d_getaddrinfo='' d_getcwd='' +d_getenv_preserves_other_thread='' d_getespwnam='' d_getfsstat='' d_getgrent='' @@ -695,10 +700,12 @@ d_newlocale='' d_querylocale='' d_uselocale='' i_xlocale='' +xlocale_needed='' d_nextafter='' d_nexttoward='' d_nice='' d_nl_langinfo='' +d_nl_langinfo_l='' d_thread_safe_nl_langinfo_l='' d_off64_t='' d_open3='' @@ -887,6 +894,7 @@ d_strtoul='' d_strtoull='' d_strtouq='' d_strxfrm='' +d_strxfrm_l='' d_symlink='' d_syscall='' d_syscallproto='' @@ -896,6 +904,8 @@ d_tcgetpgrp='' d_tcsetpgrp='' d_telldirproto='' d_tgamma='' +d_thread_local='' +perl_thread_local='' d_time='' timetype='' d_asctime64='' @@ -1313,6 +1323,8 @@ shsharp='' spitshell='' src='' ssizetype='' +st_dev_sign='' +st_dev_size='' st_ino_sign='' st_ino_size='' startperl='' @@ -1334,6 +1346,7 @@ archname64='' use64bitall='' use64bitint='' usecbacktrace='' +usedefaultstrict='' dtrace='' usedtrace='' usefaststdio='' @@ -1354,7 +1367,6 @@ useperlio='' usequadmath='' usesocks='' d_oldpthreads='' -use5005threads='' useithreads='' usereentrant='' usethreads='' @@ -1832,8 +1844,8 @@ Usage: $me [-dehrsEKOSV] [-f config.sh] [-D symbol] [-D symbol=value] -r : reuse C symbols value if possible (skips costly nm extraction). -s : silent mode, only echoes questions and essential information. -D : define symbol to have some value: - -D symbol symbol gets the value 'define' - -D symbol=value symbol gets the value 'value' + -D symbol symbol gets the value 'define' + -D symbol='some value' symbol is set to 'some value' common used examples (see INSTALL for more info): -Duse64bitint use 64bit integers -Duse64bitall use 64bit integers and pointers @@ -1922,12 +1934,13 @@ rm -f grimble : the following should work in any shell case "$contains" in contains*) - echo " " - echo "AGH! Grep doesn't return a status. Attempting remedial action." + echo " " >&4 + echo "AGH! Grep doesn't return a status. Attempting remedial action." >&4 cat >contains <<'EOSS' grep "$1" "$2" >.greptmp && cat .greptmp && test -s .greptmp EOSS -chmod +x contains +contains=./contains +chmod +x $contains esac : Find the path to the source tree @@ -2776,7 +2789,7 @@ EOM if $test -f UU/myread; then . ./UU/myread else - echo "Cannot find myread, sorry. Aborting." >&2 + echo "Cannot find myread, sorry. Aborting." >&4 exit 1 fi fi @@ -4335,65 +4348,12 @@ $undef$define) . ./whoa; eval "$var=\$tu";; *) eval "$var=$val";; esac' -: get the patchlevel -echo " " -echo "Getting the current patchlevel..." >&4 -if $test -r $rsrc/patchlevel.h;then - revision=`awk '/define[ ]+PERL_REVISION/ {print $3}' $rsrc/patchlevel.h` - patchlevel=`awk '/define[ ]+PERL_VERSION/ {print $3}' $rsrc/patchlevel.h` - subversion=`awk '/define[ ]+PERL_SUBVERSION/ {print $3}' $rsrc/patchlevel.h` - api_revision=`awk '/define[ ]+PERL_API_REVISION/ {print $3}' $rsrc/patchlevel.h` - api_version=`awk '/define[ ]+PERL_API_VERSION/ {print $3}' $rsrc/patchlevel.h` - api_subversion=`awk '/define[ ]+PERL_API_SUBVERSION/ {print $3}' $rsrc/patchlevel.h` - perl_patchlevel=`egrep ',"(MAINT|SMOKE)[0-9][0-9]*"' $rsrc/patchlevel.h|tail -1|sed 's/[^0-9]//g'` -else - revision=0 - patchlevel=0 - subversion=0 - api_revision=0 - api_version=0 - api_subversion=0 - perl_patchlevel=0 - $echo "(You do not have patchlevel.h. Eek.)" -fi -: Define a handy string here to avoid duplication in myconfig.SH and configpm. -version_patchlevel_string="version $patchlevel subversion $subversion" -case "$perl_patchlevel" in -0|'') ;; -*) perl_patchlevel=`echo $perl_patchlevel | sed 's/.* //'` - version_patchlevel_string="$version_patchlevel_string patch $perl_patchlevel" - ;; -esac - -$echo "(You have $package $version_patchlevel_string.)" - -case "$osname" in -dos|vms) - : XXX Should be a Configure test for double-dots in filenames. - version=`echo $revision $patchlevel $subversion | \ - $awk '{ printf "%d_%d_%d", $1, $2, $3 }'` - api_versionstring=`echo $api_revision $api_version $api_subversion | \ - $awk '{ printf "%d_%d_%d", $1, $2, $3 }'` - ;; -*) - version=`echo $revision $patchlevel $subversion | \ - $awk '{ printf "%d.%d.%d", $1, $2, $3 }'` - api_versionstring=`echo $api_revision $api_version $api_subversion | \ - $awk '{ printf "%d.%d.%d", $1, $2, $3 }'` - ;; -esac -: Special case the 5.005_xx maintenance series, which used 5.005 -: without any subversion label as a subdirectory in $sitelib -if test "${api_revision}${api_version}${api_subversion}" = "550"; then - api_versionstring='5.005' -fi - : Do we want threads support and if so, what type case "$usethreads" in $define|true|[yY]*) dflt='y';; -*) # Catch case where user specified ithreads or 5005threads but +*) # Catch case where user specified ithreads but # forgot -Dusethreads (A.D. 4/2002) - case "$useithreads$use5005threads" in + case "$useithreads" in *$define*) dflt='y';; *) dflt='n';; esac @@ -4418,74 +4378,7 @@ esac set usethreads eval $setvar -if $test $patchlevel -lt 9; then - case "$usethreads" in - $define) - : Default to ithreads unless overridden on command line or with - : old config.sh - dflt='y' - case "$use5005threads" in - $define|true|[yY]*) - echo "5.005 threads are no longer supported" - exit 1 - ;; - esac - case "$useithreads" in - $undef|false|[nN]*) dflt='n';; - esac - rp='Use the newer interpreter-based ithreads?' - . ./myread - case "$ans" in - y|Y) val="$define" ;; - *) val="$undef" ;; - esac - set useithreads - eval $setvar - : Now set use5005threads to the opposite value. - case "$useithreads" in - $define) val="$undef" ;; - *) val="$define" ;; - esac - set use5005threads - eval $setvar - ;; - *) - useithreads="$undef" - use5005threads="$undef" - ;; - esac - - case "$useithreads$use5005threads" in - "$define$define") - $cat >&4 <&4 <, which messes up our build. +# I guess we *could* loop round trying -std=c99 first with checks both for the +# prototype found and the code compiling (because -std=gnu99 might do other +# things we don't want, particularly on non-GCC compilers) but +# 1) We would need to check for the prototype first (without any flags) +# 2) We would still end up with most Linux systems either being -std=gnu99 +# or "" (no flag), and so both common options would not rigorously check our +# portability to other platforms. +# So it doesn't seem worth the complexity and chance of different failure. +$cat >try.c <<'EOCP' +int main(int argc, char **argv) { + argc = argc + 1; + /* This is deliberately a declaration after a statement. */ + unsigned long long count = 0; + for (char **p = argv; *p; ++p) { + ++count; + } + return count == 1 ? 0 : argc; +} +EOCP +c99_for=no +for flag in '' '-std=gnu99' '-std=c99'; do + if $cc -o try $flag $ccflags $ldflags try.c 2>/dev/null && ./try; then + c99_for="$flag" + break; + fi +done +case "$c99_for" in +'') echo "Your C compiler doesn't need any special flags to compile C99 code" + ;; +no) echo >&4 "Your C compiler doesn't seem to be able to compile C99 code" + rp='Do you really want to continue?' + dflt='n' + . ./myread + case "$ans" in + [yY]) echo >&4 "Okay, continuing." ;; + *) exit 1 ;; + esac + ;; +*) echo "Your C compiler needs $c99_for to compile C99 code" + ccflags="$c99_for $ccflags" + ;; +esac +$rm -f try try.* + : What should the include directory be ? : Use sysroot if set, so findhdr looks in the right place. echo " " @@ -4980,27 +4928,35 @@ esac # Note that ccname for clang is also gcc. case "$ccname" in gcc) + realpath=`which realpath 2>/dev/null | sed 's/no realpath in.*//'` $echo 'extern int foo;' > try.c set X `$cppstdin -v try.c 2>&1 | $awk '/^#include &1; +echo "Checking if your compiler accepts $flag" >&4; [ "X$sysroot" != "X" ] && echo "For sysroot = $sysroot"; echo "int main(void) { return 0; }" > gcctest.c; if $cc $_sysroot -O2 $flag -o gcctest gcctest.c 2>gcctest.out && $run ./gcctest; then - echo "Yes, it does." 2>&1; + echo "Yes, it does." >&4; if $test -s gcctest.out ; then echo "But your platform does not like it:"; cat gcctest.out; else case "$ccflags" in *$check*) - echo "Leaving current flags $ccflags alone." 2>&1 + echo "Leaving current flags $ccflags alone." >&4 ;; *) dflt="$dflt $flag"; eval $callback @@ -5461,7 +5417,7 @@ if $cc $_sysroot -O2 $flag -o gcctest gcctest.c 2>gcctest.out && $run ./gcctest; esac fi else - echo "Nope, it does not, but that is ok." 2>&1; + echo "Nope, it does not, but that is ok." >&4; fi ' @@ -5491,25 +5447,6 @@ default|recommended) eval $checkccflag ;; esac - case "$gccversion" in - 1*) ;; - 2*) ;; - ?*) echo " " - echo "Checking if your compiler accepts -fno-delete-null-pointer-checks" 2>&1 - echo 'int main(void) { return 0; }' > gcctest.c - if $cc -O2 -fno-delete-null-pointer-checks -o gcctest gcctest.c; then - echo "Yes, it does." 2>&1 - case "$ccflags" in - *delete-null-pointer-checks*) - echo "Leaving current flags $ccflags alone." 2>&1 - ;; - *) dflt="$dflt -fno-delete-null-pointer-checks" ;; - esac - else - echo "Nope, it doesn't, but that's ok." 2>&1 - fi - ;; - esac # For gcc, adding -pipe speeds up compilations for some, but apparently # some assemblers can't read from stdin. (It also slows down compilations # in other cases, but those are apparently rarer these days.) AD 5/2004. @@ -5525,23 +5462,24 @@ default|recommended) # is to add the flag to the flags passed to the compiler at link time, # as that way the compiler can do the right implementation dependant # thing. (NWC) - case "$osname" in - amigaos) ;; # -fstack-protector builds but doesn't work - *) case "$gccversion" in - ?*) set stack-protector-strong -fstack-protector-strong - eval $checkccflag - case "$dflt" in - *-fstack-protector-strong*) ;; # It got added. - *) # Try the plain/older -fstack-protector. - set stack-protector -fstack-protector - eval $checkccflag - ;; - esac - ;; + case "$ccflags" in + *-fno-stack-protector*) + echo "Do not add -fstack-protector nor -fstack-protector-strong" 2>&1 + ;; + *) case "$gccversion" in + ?*) set stack-protector-strong -fstack-protector-strong + eval $checkccflag + case "$dflt" in + *-fstack-protector-strong*) ;; # It got added. + *) # Try the plain/older -fstack-protector. + set stack-protector -fstack-protector + eval $checkccflag + ;; esac ;; + esac + ;; esac - ;; esac case "$mips_type" in @@ -6928,16 +6866,16 @@ esac $rm_try : check for long doubles -echo " " +echo " " >&4 echo "Checking to see if you have long double..." >&4 echo 'int main() { long double x = 7.0; }' > try.c set try if eval $compile; then val="$define" - echo "You have long double." + echo "You have long double." >&4 else val="$undef" - echo "You do not have long double." + echo "You do not have long double." >&4 fi $rm_try set d_longdbl @@ -6950,7 +6888,7 @@ eval $inlibc : check for length of long double case "${d_longdbl}${longdblsize}" in $define) - echo " " + echo " " >&4 echo "Checking to see how big your long doubles are..." >&4 $cat >try.c <<'EOCP' #include @@ -6963,19 +6901,19 @@ EOCP set try if eval $compile; then longdblsize=`$run ./try` - echo "Your long doubles are $longdblsize bytes long." + echo "Your long doubles are $longdblsize bytes long." >&4 else dflt='8' - echo " " + echo " " >&4 echo "(I can't seem to compile the test program. Guessing...)" >&4 rp="What is the size of a long double (in bytes)?" . ./myread longdblsize="$ans" fi if $test "X$doublesize" = "X$longdblsize"; then - echo "That isn't any different from an ordinary double." - echo "I'll keep your setting anyway, but you may see some" - echo "harmless compilation warnings." + echo "That isn't any different from an ordinary double." >&4 + echo "I'll keep your setting anyway, but you may see some" >&4 + echo "harmless compilation warnings." >&4 fi ;; esac @@ -7029,9 +6967,9 @@ int main() { * The Motorola 68881 had another "extended precision" format: * sign:1 exp:15 zero:16 integer:1 mantissa:63 * for total of 96 bits of bytes. The zero bits were unused. - * See "M68000 FAMILY PROGRAMMER’S REFERENCE MANUAL" for more details. - * If it ever becomes relevant, this format should be allocated - * a new doublekind code since it's quite different from the Intel x87. + * See "M68000 FAMILY PROGRAMMER'S REFERENCE MANUAL" for more details. + * If it ever becomes relevant, this format should be allocated a + * new doublekind code since it is quite different from the Intel x87. */ printf("4\n"); exit(0); @@ -7098,13 +7036,13 @@ case "$longdblkind" in 0) echo "Your long doubles are doubles." >&4 ;; 1) echo "You have IEEE 754 128-bit little endian long doubles." >&4 ;; 2) echo "You have IEEE 754 128-bit big endian long doubles." >&4 ;; -3) echo "You have x86 80-bit little endian long doubles." >& 4 ;; -4) echo "You have x86 80-bit big endian long doubles." >& 4 ;; -5) echo "You have 128-bit fully little-endian double-double long doubles (64-bit LEs in LE)." >& 4 ;; -6) echo "You have 128-bit fully big-endian double-double long doubles (64-bit BEs in BE)." >& 4 ;; -7) echo "You have 128-bit mixed-endian double-double long doubles (64-bit LEs in BE)." >& 4 ;; -8) echo "You have 128-bit mixed-endian double-double long doubles (64-bit BEs in LE)." >& 4 ;; -9) echo "You have 128-bit PDP-style mixed-endian long doubles (VAX format H)." >& 4 ;; +3) echo "You have x86 80-bit little endian long doubles." >&4 ;; +4) echo "You have x86 80-bit big endian long doubles." >&4 ;; +5) echo "You have 128-bit fully little-endian double-double long doubles (64-bit LEs in LE)." >&4 ;; +6) echo "You have 128-bit fully big-endian double-double long doubles (64-bit BEs in BE)." >&4 ;; +7) echo "You have 128-bit mixed-endian double-double long doubles (64-bit LEs in BE)." >&4 ;; +8) echo "You have 128-bit mixed-endian double-double long doubles (64-bit BEs in LE)." >&4 ;; +9) echo "You have 128-bit PDP-style mixed-endian long doubles (VAX format H)." >&4 ;; *) echo "Cannot figure out your long double." >&4 ;; esac d_long_double_style_ieee=$undef @@ -7129,6 +7067,59 @@ case "$longdblkind" in esac $rm_try +: get the patchlevel +echo " " +echo "Getting the current patchlevel..." >&4 +if $test -r $rsrc/patchlevel.h;then + revision=`awk '/define[ ]+PERL_REVISION/ {print $3}' $rsrc/patchlevel.h` + patchlevel=`awk '/define[ ]+PERL_VERSION/ {print $3}' $rsrc/patchlevel.h` + subversion=`awk '/define[ ]+PERL_SUBVERSION/ {print $3}' $rsrc/patchlevel.h` + api_revision=`awk '/define[ ]+PERL_API_REVISION/ {print $3}' $rsrc/patchlevel.h` + api_version=`awk '/define[ ]+PERL_API_VERSION/ {print $3}' $rsrc/patchlevel.h` + api_subversion=`awk '/define[ ]+PERL_API_SUBVERSION/ {print $3}' $rsrc/patchlevel.h` + perl_patchlevel=`egrep ',"(MAINT|SMOKE)[0-9][0-9]*"' $rsrc/patchlevel.h|tail -1|sed 's/[^0-9]//g'` +else + revision=0 + patchlevel=0 + subversion=0 + api_revision=0 + api_version=0 + api_subversion=0 + perl_patchlevel=0 + $echo "(You do not have patchlevel.h. Eek.)" +fi +: Define a handy string here to avoid duplication in myconfig.SH and configpm. +version_patchlevel_string="version $patchlevel subversion $subversion" +case "$perl_patchlevel" in +0|'') ;; +*) perl_patchlevel=`echo $perl_patchlevel | sed 's/.* //'` + version_patchlevel_string="$version_patchlevel_string patch $perl_patchlevel" + ;; +esac + +$echo "(You have $package $version_patchlevel_string.)" + +case "$osname" in +dos|vms) + : XXX Should be a Configure test for double-dots in filenames. + version=`echo $revision $patchlevel $subversion | \ + $awk '{ printf "%d_%d_%d", $1, $2, $3 }'` + api_versionstring=`echo $api_revision $api_version $api_subversion | \ + $awk '{ printf "%d_%d_%d", $1, $2, $3 }'` + ;; +*) + version=`echo $revision $patchlevel $subversion | \ + $awk '{ printf "%d.%d.%d", $1, $2, $3 }'` + api_versionstring=`echo $api_revision $api_version $api_subversion | \ + $awk '{ printf "%d.%d.%d", $1, $2, $3 }'` + ;; +esac +: Special case the 5.005_xx maintenance series, which used 5.005 +: without any subversion label as a subdirectory in $sitelib +if test "${api_revision}${api_version}${api_subversion}" = "550"; then + api_versionstring='5.005' +fi + : determine the architecture name echo " " if xxx=`./loc arch blurfl $pth`; $test -f "$xxx"; then @@ -7642,37 +7633,39 @@ sitelib_stem=`echo "$sitelibexp" | sed "s,/$version$,,"` : Determine list of previous versions to include in @INC $cat > getverlist <> getverlist <<'EOPL' -# The list found is store twice for each entry: the original name, and -# the binary broken down version as pack "sss", so sorting is easy and -# unambiguous. This will work for all versions that have a maximum of -# three digit groups, separate by '.'s or '_'s. Names are extended with -# ".0.0" to ensure at least three elements for the pack. -# -- H.Merijn Brand (m)'06 23-10-2006 - -# Can't have leading @ because metaconfig interprets it as a command! -;@inc_version_list=(); +# The list found is stored twice for each entry: the original name, and +# the binary broken down version into pack "s>s>s>", so sorting is easy +# and unambiguous. This will work for all versions that have a maximum +# of three digit per group separate by '.'s or '_'s. Names are extended +# with ".0.0" to ensure at least three elements for the pack. +# -- H.Merijn Brand (m)'06 23-10-2006 + +my @inc_version_list; +my @candidates; # XXX Redo to do opendir/readdir? if (-d $stem) { chdir($stem); ;@candidates = map { - [ $_, pack "sss", split m/[._]/, "$_.0.0" ] } glob("5.*"); + [ $_, pack "s>s>s>", split m/[._]/, "$_.0.0" ] } glob("5.*"); ;@candidates = sort { $a->[1] cmp $b->[1]} @candidates; } else { ;@candidates = (); } -($pversion, $aversion, $vsn5005) = map { - pack "sss", split m/[._]/, "$_.0.0" } $version, $api_versionstring, "5.005"; -foreach $d (@candidates) { +my ($pversion, $aversion, $vsn5005) = map { + pack "s>s>s>", split m/[._]/, "$_.0.0" } $version, $api_versionstring, "5.005"; +foreach my $d (@candidates) { if ($d->[1] lt $pversion) { if ($d->[1] ge $aversion) { unshift(@inc_version_list, grep { -d } $d->[0]."/$archname", $d->[0]); @@ -9397,9 +9390,7 @@ $cat <compiler_warning <attrib.c <<'EOCP' void my_special_printf(char* pat,...) __attribute__((__format__(__printf__,1,2))); EOCP if $cc $ccflags -c attrib.c >attrib.out 2>&1 ; then - if $contains 'warning' attrib.out >/dev/null 2>&1; then + if $compiler_warning attrib.out >/dev/null 2>&1; then echo "Your C compiler doesn't support __attribute__((format))." val="$undef" else @@ -11051,7 +11077,7 @@ EOCP if $cc $ccflags -o attrib attrib.c >attrib.out 2>&1 ; then : run the executable in case it produces a run-time warning if $run ./attrib >>attrib.out 2>&1; then - if $contains 'warning' attrib.out >/dev/null 2>&1; then + if $compiler_warning attrib.out >/dev/null 2>&1; then echo "Your C compiler doesn't allow __printf__ format to be null." val="$undef" else @@ -11086,7 +11112,7 @@ $cat >attrib.c <<'EOCP' char *go_get_some_memory( int how_many_bytes ) __attribute__((malloc)); EOCP if $cc $ccflags -c attrib.c >attrib.out 2>&1 ; then - if $contains 'warning' attrib.out >/dev/null 2>&1; then + if $compiler_warning attrib.out >/dev/null 2>&1; then echo "Your C compiler doesn't support __attribute__((malloc))." val="$undef" else @@ -11114,7 +11140,7 @@ $cat >attrib.c <<'EOCP' void do_something (char *some_pointer,...) __attribute__((nonnull(1))); EOCP if $cc $ccflags -c attrib.c >attrib.out 2>&1 ; then - if $contains 'warning' attrib.out >/dev/null 2>&1; then + if $compiler_warning attrib.out >/dev/null 2>&1; then echo "Your C compiler doesn't support __attribute__((nonnull))." val="$undef" else @@ -11142,7 +11168,7 @@ $cat >attrib.c <<'EOCP' void fall_over_dead( void ) __attribute__((noreturn)); EOCP if $cc $ccflags -c attrib.c >attrib.out 2>&1 ; then - if $contains 'warning' attrib.out >/dev/null 2>&1; then + if $compiler_warning attrib.out >/dev/null 2>&1; then echo "Your C compiler doesn't support __attribute__((noreturn))." val="$undef" else @@ -11170,7 +11196,7 @@ $cat >attrib.c <<'EOCP' int square( int n ) __attribute__((pure)); EOCP if $cc $ccflags -c attrib.c >attrib.out 2>&1 ; then - if $contains 'warning' attrib.out >/dev/null 2>&1; then + if $compiler_warning attrib.out >/dev/null 2>&1; then echo "Your C compiler doesn't support __attribute__((pure))." val="$undef" else @@ -11198,7 +11224,7 @@ $cat >attrib.c <<'EOCP' int do_something( int dummy __attribute__((unused)), int n ); EOCP if $cc $ccflags -c attrib.c >attrib.out 2>&1 ; then - if $contains 'warning' attrib.out >/dev/null 2>&1; then + if $compiler_warning attrib.out >/dev/null 2>&1; then echo "Your C compiler doesn't support __attribute__((unused))." val="$undef" else @@ -11226,7 +11252,7 @@ $cat >attrib.c <<'EOCP' int I_am_deprecated(void) __attribute__((deprecated)); EOCP if $cc $ccflags -c attrib.c >attrib.out 2>&1 ; then - if $contains 'warning' attrib.out >/dev/null 2>&1; then + if $compiler_warning attrib.out >/dev/null 2>&1; then echo "Your C compiler doesn't support __attribute__((deprecated))." val="$undef" else @@ -11254,7 +11280,7 @@ $cat >attrib.c <<'EOCP' int I_will_not_be_ignored(void) __attribute__((warn_unused_result)); EOCP if $cc $ccflags -c attrib.c >attrib.out 2>&1 ; then - if $contains 'warning' attrib.out >/dev/null 2>&1; then + if $compiler_warning attrib.out >/dev/null 2>&1; then echo "Your C compiler doesn't support __attribute__((warn_unused_result))." val="$undef" else @@ -11282,7 +11308,7 @@ $cat >attrib.c <<'EOCP' static __inline__ __attribute__((always_inline)) int I_will_always_be_inlined(void); EOCP if $cc $ccflags -c attrib.c >attrib.out 2>&1 ; then - if $contains 'warning' attrib.out >/dev/null 2>&1; then + if $compiler_warning attrib.out >/dev/null 2>&1; then echo "Your C compiler doesn't support __attribute__((always_inline))." val="$undef" else @@ -12713,6 +12739,10 @@ eval $inlibc set dup3 d_dup3 eval $inlibc +: see if localeconv_l exists +set localeconv_l d_localeconv_l +eval $inlibc + : see if this is an xlocale.h system set xlocale.h i_xlocale eval $inhdr @@ -12737,6 +12767,54 @@ eval $inlibc set querylocale d_querylocale eval $inlibc +: if we have xlocale.h, check whether it is needed +case "$i_xlocale$d_newlocale$xlocale_needed" in +"$define$define") + echo "Checking if xlocale.h is needed..." >&4 + $cat >try.c < +#include +#ifdef TRY_XLOCALE +#include +#endif +#$d_localeconv_l HAVE_LOCALECONV_L + +#ifdef HAVE_LOCALECONV_L +struct lconv *(*lcptr)(locale_t) = localeconv_l; +#endif + +int main(void) { + locale_t lc = newlocale(LC_ALL_MASK, "C", (locale_t)0); + +#ifdef HAVE_LOCALECONV_L + /* FreeBSD hides only localeconv_l() in xlocale.h */ + struct lconv *lcbuf = localeconv_l(lc); + printf("decimal: %s\n", lcbuf->decimal_point); +#endif + + freelocale(lc); + return 0; +} +EOF + set try + if eval $compile && $run ./try > /dev/null 2>&1 ; then + echo "xlocale.h isn't needed" >&4 + xlocale_needed=$undef + else + set try -DTRY_XLOCALE + if eval $compile && $run ./try > /dev/null 2>&1 ; then + xlocale_needed=$define + echo "xlocale.h is needed" >&4 + else + echo "I can't build my test either way" >&4 + xlocale_needed=$undef + fi + fi + $rm_try + ;; +*) xlocale_needed=$undef ;; +esac + : see if eaccess exists set eaccess d_eaccess eval $inlibc @@ -13782,7 +13860,7 @@ case "$d_stdstdio:$d_stdio_ptr_lval" in "$define:$define") case "$d_stdio_cnt_lval$d_stdio_ptr_lval_sets_cnt" in *$define*) - echo "You seem to have 'fast stdio' to directly manipulate the stdio buffers." >& 4 + echo "You seem to have 'fast stdio' to directly manipulate the stdio buffers." >&4 val="$define" ;; esac @@ -13979,6 +14057,13 @@ eval $inlibc set fegetround d_fegetround eval $inlibc +: see if ffs exists +set ffs d_ffs +eval $inlibc +: see if ffsl exists +set ffsl d_ffsl +eval $inlibc + : see if fgetpos exists set fgetpos d_fgetpos eval $inlibc @@ -14267,19 +14352,99 @@ eval $inlibc set getcwd d_getcwd eval $inlibc -: see if getespwnam exists -set getespwnam d_getespwnam -eval $inlibc - -: see if getfsstat exists -set getfsstat d_getfsstat -eval $inlibc +: check for getenv behavior +case "$d_getenv_preserves_other_thread" in +'') +$echo "Checking to see if getenv() preserves a different thread's results" >&4 +$cat >try.c < +#endif +#include +#include +#$i_pthread I_PTHREAD +#ifdef I_PTHREAD +# include +#endif -: see if getgrent exists -set getgrent d_getgrent -eval $inlibc +void * +thread_start(void * arg) +{ + return (void *) getenv("HOME"); +} -: see if getgrent_r exists +int main() { + char * main_buffer; + char save_main_buffer[1000]; + pthread_t subthread; + pthread_attr_t attr; + + main_buffer = getenv("PATH"); + + /* If too large for our generous allowance, return we couldn't figure it + * out. */ + if (strlen(main_buffer) >= sizeof(save_main_buffer)) { + exit(2); + } + + strcpy(save_main_buffer, main_buffer); + + if (pthread_attr_init(&attr) != 0) { + exit(2); + } + + if (pthread_create(&subthread, &attr, thread_start, NULL) != 0) { + exit(2); + } + + if (pthread_join(subthread, NULL) != 0) { + exit(2); + } + + exit(! (strcmp(main_buffer, save_main_buffer) == 0)); +} +EOCP +val= +set try +if eval $compile_ok; then + $run ./try + rc=$? + case "$rc" in + 0) echo "getenv() didn't destroy another thread's buffer" >&4 + val=$define + ;; + 1) echo "getenv() does destroy another thread's buffer" >&4 + val=$undef + ;; + *) echo "Couldn't determine if getenv() destroys another thread's return value (code=$rc); assuming it does" >&4 + val=$undef + ;; + esac +else + echo "(I can't seem to compile the test program.)" >&4 + echo "Assuming that your C library's getenv destroys another thread's return value." >&4 + val=$undef +fi +set d_getenv_preserves_other_thread +eval $setvar +$rm_try +;; +esac + +: see if getespwnam exists +set getespwnam d_getespwnam +eval $inlibc + +: see if getfsstat exists +set getfsstat d_getfsstat +eval $inlibc + +: see if getgrent exists +set getgrent d_getgrent +eval $inlibc + +: see if getgrent_r exists set getgrent_r d_getgrent_r eval $inlibc case "$d_getgrent_r" in @@ -16036,10 +16201,6 @@ eval $inlibc set llroundl d_llroundl eval $inlibc -: see if localeconv_l exists -set localeconv_l d_localeconv_l -eval $inlibc - : see if localtime_r exists set localtime_r d_localtime_r eval $inlibc @@ -16115,6 +16276,7 @@ REENTRANT_PROTO*) #endif int main() { + int result = 0; time_t t = time(0L); char w_tz[]="TZ" "=GMT+5", e_tz[]="TZ" "=GMT-5", @@ -16133,8 +16295,10 @@ int main() localtime_r(&t, &tm_w); if( memcmp(&tm_e, &tm_w, sizeof(struct tm)) == 0 ) - return 1; - return 0; + result = 1; + + free(tz_e);free(tz_w); + return result; } EOCP set try @@ -16495,6 +16659,130 @@ eval $inhdr set nl_langinfo d_nl_langinfo eval $inlibc +: see if locale.h is available +set locale.h i_locale +eval $inhdr + +: check for nl_langinfo_l item +$cat <try.c < +#endif +#include +#$i_langinfo I_LANGINFO +#ifdef I_LANGINFO +# include +#endif +#$i_pthread I_PTHREAD +#ifdef I_PTHREAD +# include +#endif +#$i_locale I_LOCALE +#ifdef I_LOCALE +# include +#endif + +void * +thread_start(void * arg) +{ + nl_langinfo(RADIXCHAR); +} + +int main() { + char * main_buffer; + char save_main_buffer[1000]; + pthread_t subthread; + pthread_attr_t attr; + + main_buffer = nl_langinfo_l(CODESET, newlocale(LC_ALL_MASK, "C", 0)); + + /* If too large for our generous allowance, just assume we don't have + * it. */ + if (strlen(main_buffer) >= sizeof(save_main_buffer)) { + exit(1); + } + + strcpy(save_main_buffer, main_buffer); + + if (pthread_attr_init(&attr) != 0) { + exit(1); + } + + if (pthread_create(&subthread, &attr, thread_start, NULL) != 0) { + exit(1); + } + + if (pthread_join(subthread, NULL) != 0) { + exit(1); + } + + exit(! (strcmp(main_buffer, save_main_buffer) == 0)); +} +EOCP +case "$usethreads" in + define) + set try + if eval $compile; then + echo "Your system has nl_langinfo_l()..." >&4 + d_nl_langinfo_l="$define" + echo "$d_nl_langinfo_l" >&4 + if $run ./try; then + echo "and it is thread-safe (just as I'd hoped)." >&4 + d_thread_safe_nl_langinfo_l="$define" + echo "$d_thread_safe_nl_langinfo_l" >&4 + else + echo "but it isn't thread-safe." >&4 + fi + else + echo "your system does not have nl_langinfo_l()" >&4 + fi + ;; + *) echo "Since threads aren't selected, we won't bother looking for nl_langinfo_l()" >&4 +esac +if test X"$d_nl_langinfo_l" = X; then + d_nl_langinfo_l="$undef" +fi +if test X"$d_thread_safe_nl_langinfo_l" = X; then + d_thread_safe_nl_langinfo_l="$undef" +fi +$rm_try + +: Look for non 'int'-sized bitfields +case "$d_non_int_bitfields" in +'') +echo " " >&4 +echo "Checking whether your compiler can handle struct bitfields that aren't 'int' or 'unsigned int' ..." >&4 +$cat >try.c <<'EOCP' +#include +struct foo { + unsigned char byte:1; + unsigned short halfword:1; +} bar; +EOCP +if $cc $ccflags -c try.c >try.out 2>&1 ; then + if $compiler_warning try.out >/dev/null 2>&1; then + echo "Your C compiler doesn't support struct bitfields that aren't 'int' or 'unsigned int'." >&4 + val="$undef" + else + echo "Your C compiler supports struct bitfields besides 'int' and 'unsigned int'." >&4 + val="$define" + fi +else + echo "Your C compiler doesn't seem to understand struct bitfields that aren't 'int' or 'unsigned int' at all." >&4 + val="$undef" +fi +;; +*) val="$d_non_int_bitfields" ;; +esac +set d_non_int_bitfields +eval $setvar +$rm_try + : see if this is a quadmath.h system set quadmath.h i_quadmath eval $inhdr @@ -16742,12 +17030,12 @@ fi case "$nv_preserves_uv_bits" in \-[1-9]*) nv_preserves_uv_bits=`expr 0 - $nv_preserves_uv_bits` - $echo "Your NVs can preserve all $nv_preserves_uv_bits bits of your UVs." 2>&1 + $echo "Your NVs can preserve all $nv_preserves_uv_bits bits of your UVs." >&4 d_nv_preserves_uv="$define" ;; -[1-9]*) $echo "Your NVs can preserve only $nv_preserves_uv_bits bits of your UVs." 2>&1 +[1-9]*) $echo "Your NVs can preserve only $nv_preserves_uv_bits bits of your UVs." >&4 d_nv_preserves_uv="$undef" ;; -*) $echo "Can't figure out how many bits your NVs preserve." 2>&1 +*) $echo "Can't figure out how many bits your NVs preserve." >&4 nv_preserves_uv_bits="0" ;; esac $rm_try @@ -17860,10 +18148,6 @@ eval $inlibc set setlinebuf d_setlinebuf eval $inlibc -: see if locale.h is available -set locale.h i_locale -eval $inhdr - : see if this system has wctype.h set wctype.h i_wctype eval $inhdr @@ -17873,7 +18157,9 @@ set towupper d_towupper eval $inlibc : check for setlocale function and behavior -$cat <&4 <&4 - $run ./try - case $? in - 0) echo "and it seems sane" >&4 - d_setlocale="$define" - d_setlocale_accepts_any_locale_name="$undef" - d_has_C_UTF8="false" - ;; - 1) echo "and it seems sane, but accepts any locale name as valid" >&4 - d_setlocale="$define" - d_setlocale_accepts_any_locale_name="$define" - d_has_C_UTF8="false" - ;; - 2) echo "and it seems sane" >&4 - d_setlocale="$define" - d_setlocale_accepts_any_locale_name="$undef" - d_has_C_UTF8="true" - ;; - 3) echo "and it seems sane, but accepts any locale name as valid" >&4 - d_setlocale="$define" - d_setlocale_accepts_any_locale_name="$define" - d_has_C_UTF8="true" - ;; - *) echo "but it doesn't seem to work, so we won't use it." >&4 +val= +set d_setlocale +eval $setvar +case $d_setlocale in + $undef) d_setlocale_accepts_any_locale_name="$undef" + d_has_C_UTF8="false" + ;; + *) set try + if eval $compile; then + echo "Your system has setlocale()..." >&4 + $run ./try + case $? in + 0) echo "and it seems sane; you don't have a C.UTF-8 locale" >&4 + d_setlocale="$define" + d_setlocale_accepts_any_locale_name="$undef" + d_has_C_UTF8="false" + ;; + 1) echo "and it seems sane, but accepts any locale name as valid" >&4 + d_setlocale="$define" + d_setlocale_accepts_any_locale_name="$define" + d_has_C_UTF8="false" + ;; + 2) echo "and it seems sane; you have a C.UTF-8 locale" >&4 + d_setlocale="$define" + d_setlocale_accepts_any_locale_name="$undef" + d_has_C_UTF8="true" + ;; + 3) echo "and it seems sane, but accepts any locale name as valid" >&4 + d_setlocale="$define" + d_setlocale_accepts_any_locale_name="$define" + d_has_C_UTF8="true" + ;; + *) echo "but it doesn't seem to work, so we won't use it." >&4 + d_setlocale="$undef" + d_setlocale_accepts_any_locale_name="$undef" + d_has_C_UTF8="false" + ;; + esac + else + echo "your system does not have setlocale()" >&4 d_setlocale="$undef" d_setlocale_accepts_any_locale_name="$undef" d_has_C_UTF8="false" - ;; - esac -else - echo "your system does not have setlocale()" >&4 - d_setlocale="$undef" - d_setlocale_accepts_any_locale_name="$undef" - d_has_C_UTF8="false" -fi + fi +esac $rm_try +;; +*) val="$d_setlocale" + set d_setlocale + eval $setvar + case "$d_setlocale" in + $undef) echo "There may be other ways to set the locale on your system, so we need to ask:" >&4 + ;; + esac + rp="Does your system have the C.UTF-8 locale?" + dflt=n + . ./myread + case "$ans" in + [Yy]*) d_has_C_UTF8="true" + c_utf8_locale=" or C.UTF-8" + ;; + *) d_has_C_UTF8="false" + c_utf8_locale="" + ;; + esac + case "$d_setlocale" in + $define) + rp="When you set your locale to something besides C$c_utf8_locale, does it do so, or just pretend to?" >&4 + dflt=n + . ./myread + case "$ans" in + true|[Yy]*) + d_setlocale_accepts_any_locale_name="$undef" + ;; + *) d_setlocale_accepts_any_locale_name="$define" + ;; + esac + ;; + *) d_setlocale_accepts_any_locale_name="$undef" + ;; + esac +esac : see if setlocale_r exists set setlocale_r d_setlocale_r @@ -19378,6 +19708,10 @@ esac set strxfrm d_strxfrm eval $inlibc +: see if strxfrm_l exists +set strxfrm_l d_strxfrm_l +eval $inlibc + : see if symlink exists set symlink d_symlink eval $inlibc @@ -19428,88 +19762,127 @@ eval $hasproto set tgamma d_tgamma eval $inlibc -: check for thread_safe_nl_langinfo_l item -$cat < try.c <<'EOCP' +#include +#include +#include -Checking to see if you have nl_langinfo_l() and that it is thread-safe -EOM -$cat >try.c < -#endif -#include -#$i_langinfo I_LANGINFO -#ifdef I_LANGINFO -# include -#endif -#$i_pthread I_PTHREAD -#ifdef I_PTHREAD -# include -#endif -#$i_locale I_LOCALE -#ifdef I_LOCALE -# include -#endif +static int plus_one = 1; +static int minus_one = -1; -void * -thread_start(void * arg) -{ - nl_langinfo(RADIXCHAR); +PROBE_MACRO int *minion; + +int callback (const void *a, const void *b) { + int val_a = *minion * *(const int *)a; + int val_b = *minion * *(const int *)b; + return val_a < val_b ? -1 : val_a > val_b; } -int main() { - char * main_buffer; - char save_main_buffer[1000]; - pthread_t subthread; - pthread_attr_t attr; +#define SIZE 8 - main_buffer = nl_langinfo_l(CODESET, newlocale(LC_ALL_MASK, "C", 0)); +void *thread_function(void *arg) { + /* thread local variables should start zeroed in each thread. */ + if (minion != NULL) { + fprintf(stderr, "__thread variable started with %p, should be NULL\n", + minion); + exit(2); + } + minion = &minus_one; - /* If too large for our generous allowance, just assume we don't have - * it. */ - if (strlen(main_buffer) >= sizeof(save_main_buffer)) { - exit(1); + int array[SIZE]; + unsigned int i; + for (i = 0; i < SIZE; ++i) { + /* "Hash randomisation" - this array isn't in sorted order: */ + array[i ^ 5] = i * i; } - strcpy(save_main_buffer, main_buffer); + qsort(array, SIZE, sizeof(int), callback); - if (pthread_attr_init(&attr) != 0) { - exit(1); + int bad = 0; + for (i = 0; i < SIZE; ++i) { + int want = (SIZE - 1 - i) * (SIZE - 1 - i); + int have = array[i]; + if (want != have) { + ++bad; + fprintf(stderr, "array[%u] - want %i, have %i\n", i, want, have); + } } + if (bad) + exit(3); - if (pthread_create(&subthread, &attr, thread_start, NULL) != 0) { - exit(1); + return NULL; +} + +int main(int argc, char **argv) { + if (minion != NULL) { + fprintf(stderr, "__thread variable started with %p, should be NULL\n", + minion); + exit(4); } - if (pthread_join(subthread, NULL) != 0) { - exit(1); + minion = &plus_one; + + pthread_t tid; + int result = pthread_create(&tid, NULL, thread_function, NULL); + if (result) { + fprintf(stderr, "pthread_create failed (%d)\n", result); + exit(5); } - exit(! (strcmp(main_buffer, save_main_buffer) == 0)); + result = pthread_join(tid, NULL); + if (result) { + fprintf(stderr, "pthread_join failed (%d)\n", result); + exit(6); + } + + if (minion == NULL) { + fprintf(stderr, "__thread variable should not be NULL\n"); + exit(7); + } + if (!(minion == &plus_one && *minion == 1)) { + fprintf(stderr, "__thread variable should be %d @ %p, not %d @ %p\n", + 1, &plus_one, *minion, minion); + exit(8); + } + + return 0; } EOCP -case "$usethreads" in - define) - set try - if eval $compile; then - echo "Your system has nl_langinfo_l()..." >&4 - if $run ./try; then - echo "and it is thread-safe (just as I'd hoped)." >&4 - d_thread_safe_nl_langinfo_l="$define" - echo "$d_thread_safe_nl_langinfo_l" >&4 - else - echo "but it isn't thread-safe, so we won't use it." >&4 - fi - else - echo "your system does not have nl_langinfo_l()" >&4 - fi - ;; - *) echo "Since threads aren't selected, we won't bother looking for nl_langinfo_l()" >&4 + +# Respect a hint (or previous) value for perl_thread_local, if there is one. +case "$perl_thread_local" in +'') # Check the various possibilities, and break out on success. + for thread_local in _Thread_local __thread; do + set try -DPROBE_MACRO=$thread_local + if eval $compile && $run ./try; then + $echo "Your compiler supports $thread_local." >&4 + val=$define + perl_thread_local="$thread_local"; + break; + fi + $echo "Your compiler does NOT support $thread_local." >&4 + val="$undef" + done + ;; +*thread*|*Thread*) # Some variant of thread local exists. + echo "Keeping your $hint value of $perl_thread_local." + val=$define + ;; +*) # Unrecognized previous value -- blindly trust the supplied + # value and hope it makes sense. Use old value for + # d_thread_local, if there is one. + echo "Keeping your $hint value of $perl_thread_local." + case "$d_thread_local" in + '') val=$define ;; + *) val=$d_thread_local ;; + esac + ;; esac -if test X"$d_thread_safe_nl_langinfo_l" = X; then - d_thread_safe_nl_langinfo_l="$undef" -fi +set d_thread_local +eval $setvar $rm_try : see if time exists @@ -20267,7 +20640,7 @@ int main() #endif EOCP if $cc $ccflags -c try.c >try.out 2>&1 ; then - if $contains warning try.out >>/dev/null 2>&1 ; then + if $compiler_warning try.out >>/dev/null 2>&1 ; then db_hashtype='int' else db_hashtype='u_int32_t' @@ -20307,7 +20680,7 @@ int main() #endif EOCP if $cc $ccflags -c try.c >try.out 2>&1 ; then - if $contains warning try.out >>/dev/null 2>&1 ; then + if $compiler_warning try.out >>/dev/null 2>&1 ; then db_prefixtype='int' else db_prefixtype='size_t' @@ -20403,10 +20776,12 @@ int main(int argc, char *argv[]) { memset((char *)&ldinf + 10, '\0', LONG_DOUBLESIZE - 10); memset((char *)&ldnan + 10, '\0', LONG_DOUBLESIZE - 10); # endif +#endif if (argc == 2) { switch (argv[1][0]) { case '1': bytes(&dinf, sizeof(dinf)); break; case '2': bytes(&dnan, sizeof(dnan)); break; +#ifdef HAS_LONG_DOUBLE case '3': bytes(&ldinf, sizeof(ldinf)); break; case '4': bytes(&ldnan, sizeof(ldnan)); break; #endif @@ -20649,9 +21024,9 @@ case "$ccflags" in ;; esac -randfunc=drand48 -drand01="drand48()" -seedfunc="srand48" +randfunc=Perl_drand48 +drand01="Perl_drand48()" +seedfunc="Perl_drand48_init" randbits=48 randseedtype=U32 @@ -22483,6 +22858,74 @@ EOM fi $rm_try +: Check the size of st_dev +$echo " " +$echo "Checking the size of st_dev..." >&4 +$cat > try.c < +#include +#$i_stdlib I_STDLIB +#ifdef I_STDLIB +#include +#endif +int main() { + struct stat st; + printf("%d\n", (int)sizeof(st.st_dev)); + exit(0); +} +EOCP +set try +if eval $compile_ok; then + val=`$run ./try` + case "$val" in + '') st_dev_size=4 + $echo "(I can't execute the test program--guessing $st_dev_size.)" >&4 + ;; + *) st_dev_size=$val + $echo "Your st_dev is $st_dev_size bytes long." + ;; + esac +else + st_dev_size=4 + $echo "(I can't compile the test program--guessing $st_dev_size.)" >&4 +fi +$rm_try + +: Check if st_dev is signed +$echo " " +$echo "Checking the sign of st_dev..." >&4 +$cat > try.c < +#include +int main() { + struct stat foo; + foo.st_dev = -1; + if (foo.st_dev < 0) + printf("-1\n"); + else + printf("1\n"); +} +EOCP +set try +if eval $compile; then + val=`$run ./try` + case "$val" in + '') st_dev_sign=1 + $echo "(I can't execute the test program--guessing unsigned.)" >&4 + ;; + *) st_dev_sign=$val + case "$st_dev_sign" in + 1) $echo "Your st_dev is unsigned." ;; + -1) $echo "Your st_dev is signed." ;; + esac + ;; + esac +else + st_dev_sign=1 + $echo "(I can't compile the test program--guessing unsigned.)" >&4 +fi +$rm_try + : Check the size of st_ino $echo " " $echo "Checking the size of st_ino..." >&4 @@ -22674,6 +23117,34 @@ case "$uidsign" in ;; esac +: Ask about strict by default. +case "$usedefaultstrict" in + $define|true|[Yy]*) + dflt="y" + ;; + *) + dflt="n" + ;; + esac + +cat <&4 @@ -23505,7 +23976,6 @@ xs_extensions='' find_extensions=' for xxx in *; do case "$xxx" in - CVS) ;; DynaLoader|dynaload) ;; *) this_ext=`echo "$xxx" | $sed -e s/-/\\\//g`; @@ -23654,14 +24124,6 @@ for xxx in $xs_extensions ; do ;; esac ;; - Thread|thread) - case "$usethreads" in - true|$define|y) - case "$use5005threads" in - $define|true|[yY]*) avail_ext="$avail_ext $xxx" ;; - esac - esac - ;; threads|threads/shared) # threads and threads::shared are special cases. # To stop people from asking "Perl 5.8.0 was supposed @@ -23743,8 +24205,6 @@ esac nonxs_ext='' for xxx in $nonxs_extensions ; do case "$xxx" in - CVS|RCS|SCCS|.svn) - ;; VMS*) ;; *) nonxs_ext="$nonxs_ext $xxx" @@ -24068,6 +24528,7 @@ chmod='$chmod' chown='$chown' clocktype='$clocktype' comm='$comm' +compiler_warning='$compiler_warning' compress='$compress' contains='$contains' cp='$cp' @@ -24210,6 +24671,8 @@ d_fdclose='$d_fdclose' d_fdim='$d_fdim' d_fds_bits='$d_fds_bits' d_fegetround='$d_fegetround' +d_ffs='$d_ffs' +d_ffsl='$d_ffsl' d_fgetpos='$d_fgetpos' d_finite='$d_finite' d_finitel='$d_finitel' @@ -24245,6 +24708,7 @@ d_gdbm_ndbm_h_uses_prototypes='$d_gdbm_ndbm_h_uses_prototypes' d_gdbmndbm_h_uses_prototypes='$d_gdbmndbm_h_uses_prototypes' d_getaddrinfo='$d_getaddrinfo' d_getcwd='$d_getcwd' +d_getenv_preserves_other_thread='$d_getenv_preserves_other_thread' d_getespwnam='$d_getespwnam' d_getfsstat='$d_getfsstat' d_getgrent='$d_getgrent' @@ -24416,6 +24880,8 @@ d_nextafter='$d_nextafter' d_nexttoward='$d_nexttoward' d_nice='$d_nice' d_nl_langinfo='$d_nl_langinfo' +d_nl_langinfo_l='$d_nl_langinfo_l' +d_non_int_bitfields='$d_non_int_bitfields' d_nv_preserves_uv='$d_nv_preserves_uv' d_nv_zero_is_allbits_zero='$d_nv_zero_is_allbits_zero' d_off64_t='$d_off64_t' @@ -24583,6 +25049,7 @@ d_strtoul='$d_strtoul' d_strtoull='$d_strtoull' d_strtouq='$d_strtouq' d_strxfrm='$d_strxfrm' +d_strxfrm_l='$d_strxfrm_l' d_suidsafe='$d_suidsafe' d_symlink='$d_symlink' d_syscall='$d_syscall' @@ -24596,6 +25063,7 @@ d_tcsetpgrp='$d_tcsetpgrp' d_telldir='$d_telldir' d_telldirproto='$d_telldirproto' d_tgamma='$d_tgamma' +d_thread_local='$d_thread_local' d_thread_safe_nl_langinfo_l='$d_thread_safe_nl_langinfo_l' d_time='$d_time' d_timegm='$d_timegm' @@ -24971,6 +25439,7 @@ perl5='$perl5' perl='$perl' perl_patchlevel='$perl_patchlevel' perl_static_inline='$perl_static_inline' +perl_thread_local='$perl_thread_local' perladmin='$perladmin' perllibs='$perllibs' perlpath='$perlpath' @@ -25082,6 +25551,8 @@ srand48_r_proto='$srand48_r_proto' srandom_r_proto='$srandom_r_proto' src='$src' ssizetype='$ssizetype' +st_dev_sign='$st_dev_sign' +st_dev_size='$st_dev_size' st_ino_sign='$st_ino_sign' st_ino_size='$st_ino_size' startperl='$startperl' @@ -25135,11 +25606,11 @@ uidtype='$uidtype' uname='$uname' uniq='$uniq' uquadtype='$uquadtype' -use5005threads='$use5005threads' use64bitall='$use64bitall' use64bitint='$use64bitint' usecbacktrace='$usecbacktrace' usecrosscompile='$usecrosscompile' +usedefaultstrict='$usedefaultstrict' usedevel='$usedevel' usedl='$usedl' usedtrace='$usedtrace' @@ -25200,6 +25671,7 @@ version_patchlevel_string='$version_patchlevel_string' versiononly='$versiononly' vi='$vi' xlibpth='$xlibpth' +xlocale_needed='$xlocale_needed' yacc='$yacc' yaccflags='$yaccflags' zcat='$zcat' diff --git a/gnu/usr.bin/perl/Cross/Makefile-cross-SH b/gnu/usr.bin/perl/Cross/Makefile-cross-SH index 85fc64afc2b..a774f4a2608 100755 --- a/gnu/usr.bin/perl/Cross/Makefile-cross-SH +++ b/gnu/usr.bin/perl/Cross/Makefile-cross-SH @@ -47,12 +47,6 @@ true) pldlflags="$cccdlflags" static_ldflags='' case "${osname}${osvers}" in - next4*) - ld=libtool - lddlflags="-dynamic -undefined warning -framework System \ - -compatibility_version 1 -current_version $patchlevel \ - -prebind -seg1addr 0x27000000 -install_name \$(shrpdir)/\$@" - ;; darwin*) shrpldflags="${ldflags} -dynamiclib \ -compatibility_version \ @@ -348,14 +342,14 @@ h = $(h1) $(h2) $(h3) $(h4) $(h5) c1 = av.c scope.c op.c doop.c doio.c dquote.c dump.c gv.c hv.c mg.c reentr.c mro_core.c perl.c c2 = perly.c pp.c pp_hot.c pp_ctl.c pp_sys.c regcomp.c regexec.c utf8.c sv.c c3 = taint.c time64.c toke.c util.c deb.c run.c universal.c pad.c globals.c keywords.c -c4 = perlio.c perlapi.c numeric.c mathoms.c locale.c pp_pack.c pp_sort.c +c4 = perlio.c numeric.c mathoms.c locale.c pp_pack.c pp_sort.c c5 = $(mallocsrc) c = $(c1) $(c2) $(c3) $(c4) $(c5) miniperlmain.c perlmain.c opmini.c obj1 = $(mallocobj) gv$(OBJ_EXT) toke$(OBJ_EXT) perly$(OBJ_EXT) op$(OBJ_EXT) pad$(OBJ_EXT) regcomp$(OBJ_EXT) dquote$(OBJ_EXT) dump$(OBJ_EXT) util$(OBJ_EXT) mg$(OBJ_EXT) reentr$(OBJ_EXT) mro_core$(OBJ_EXT) obj2 = hv$(OBJ_EXT) av$(OBJ_EXT) perl$(OBJ_EXT) run$(OBJ_EXT) pp_hot$(OBJ_EXT) sv$(OBJ_EXT) pp$(OBJ_EXT) scope$(OBJ_EXT) pp_ctl$(OBJ_EXT) pp_sys$(OBJ_EXT) -obj3 = doop$(OBJ_EXT) doio$(OBJ_EXT) regexec$(OBJ_EXT) utf8$(OBJ_EXT) taint$(OBJ_EXT) deb$(OBJ_EXT) universal$(OBJ_EXT) globals$(OBJ_EXT) perlio$(OBJ_EXT) perlapi$(OBJ_EXT) numeric$(OBJ_EXT) mathoms$(OBJ_EXT) locale$(OBJ_EXT) pp_pack$(OBJ_EXT) pp_sort$(OBJ_EXT) time64$(OBJ_EXT) +obj3 = doop$(OBJ_EXT) doio$(OBJ_EXT) regexec$(OBJ_EXT) utf8$(OBJ_EXT) taint$(OBJ_EXT) deb$(OBJ_EXT) universal$(OBJ_EXT) globals$(OBJ_EXT) perlio$(OBJ_EXT) numeric$(OBJ_EXT) mathoms$(OBJ_EXT) locale$(OBJ_EXT) pp_pack$(OBJ_EXT) pp_sort$(OBJ_EXT) time64$(OBJ_EXT) obj = $(obj1) $(obj2) $(obj3) $(ARCHOBJS) @@ -844,7 +838,7 @@ SYMH = perlvars.h intrpvar.h CHMOD_W = chmod +w # The following files are generated automatically -# embed.pl: proto.h embed.h embedvar.h perlapi.h perlapi.c +# embed.pl: proto.h embed.h embedvar.h # opcode.pl: opcode.h opnames.h pp_proto.h # regcomp.pl: regnodes.h # warnings.pl: warnings.h lib/warnings.pm diff --git a/gnu/usr.bin/perl/Cross/cflags-cross-arm b/gnu/usr.bin/perl/Cross/cflags-cross-arm index 2fa2a45b8ee..4d7f05a4f68 100755 --- a/gnu/usr.bin/perl/Cross/cflags-cross-arm +++ b/gnu/usr.bin/perl/Cross/cflags-cross-arm @@ -1,9 +1,9 @@ #!/bin/sh # Extra warnings, used e.g. for gcc. -warn="-Wall -ansi -W -Wextra -Wdeclaration-after-statement -Wendif-labels -Wc++-compat" +warn="-Wall -W -Wextra -Wendif-labels -Wc++-compat" # Extra standardness. -stdflags=" -std=c89" +stdflags=" -std=c99" # Extra extra. extra="" @@ -88,7 +88,6 @@ for file do opmini) ;; pad) ;; perl) ;; - perlapi) ;; perlmain) ;; perly) ;; pp) ;; @@ -112,18 +111,6 @@ for file do *) ;; esac -case "$cc" in -*g++*) - # Extra paranoia in case people have bad canned ccflags: - # bad in the sense that the flags are accepted by g++, - # but then whined about. - for f in -Wdeclaration-after-statement -std=c89 - do - ccflags=`echo $ccflags|sed 's/$f/ /'` - done - ;; -esac - case "$cc" in *g++*) # Without -Wno-unused-variable g++ 4.x compiles are rather unwatchable diff --git a/gnu/usr.bin/perl/Cross/config.sh-arm-linux b/gnu/usr.bin/perl/Cross/config.sh-arm-linux index d97a69809b1..f2303707b7c 100644 --- a/gnu/usr.bin/perl/Cross/config.sh-arm-linux +++ b/gnu/usr.bin/perl/Cross/config.sh-arm-linux @@ -32,11 +32,11 @@ alignbytes='4' aphostname='/bin/hostname' api_revision='5' api_subversion='0' -api_version='32' -api_versionstring='5.32.0' +api_version='36' +api_versionstring='5.36.0' ar='ar' -archlib='/usr/lib/perl5/5.32.1/armv4l-linux' -archlibexp='/usr/lib/perl5/5.32.1/armv4l-linux' +archlib='/usr/lib/perl5/5.36.0/armv4l-linux' +archlibexp='/usr/lib/perl5/5.36.0/armv4l-linux' archname64='' archname='armv4l-linux' archobjs='' @@ -55,7 +55,7 @@ castflags='0' cat='cat' cc='cc' cccdlflags='-fpic' -ccdlflags='-rdynamic -Wl,-rpath,/usr/lib/perl5/5.32.1/armv4l-linux/CORE' +ccdlflags='-rdynamic -Wl,-rpath,/usr/lib/perl5/5.36.0/armv4l-linux/CORE' ccflags='-fno-strict-aliasing -I/usr/local/include -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64' ccflags_uselargefiles='-D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64' ccname='arm-linux-gcc' @@ -213,6 +213,8 @@ d_fdclose='undef' d_fdim='undef' d_fds_bits='undef' d_fegetround='define' +d_ffs='undef' +d_ffsl='undef' d_fgetpos='define' d_finite='define' d_finitel='define' @@ -248,6 +250,7 @@ d_gdbm_ndbm_h_uses_prototypes='undef' d_gdbmndbm_h_uses_prototypes='undef' d_getaddrinfo='undef' d_getcwd='define' +d_getenv_preserves_other_thread='define' d_getespwnam='undef' d_getfsstat='undef' d_getgrent='define' @@ -417,6 +420,8 @@ d_nextafter='undef' d_nexttoward='undef' d_nice='define' d_nl_langinfo='define' +d_nl_langinfo_l='undef' +d_non_int_bitfields='define' d_nv_preserves_uv='define' d_nv_zero_is_allbits_zero='undef' d_off64_t='undef' @@ -581,6 +586,7 @@ d_strtoul='define' d_strtoull='define' d_strtouq='define' d_strxfrm='define' +d_strxfrm_l='undef' d_suidsafe='undef' d_symlink='define' d_syscall='define' @@ -594,6 +600,7 @@ d_tcsetpgrp='define' d_telldir='define' d_telldirproto='define' d_tgamma='undef' +d_thread_local='undef' d_thread_safe_nl_langinfo_l='undef' d_time='define' d_timegm='define' @@ -824,7 +831,7 @@ inc_version_list=' ' inc_version_list_init='0' incpath='' inews='' -installarchlib='./install_me_here/usr/lib/perl5/5.32.1/armv4l-linux' +installarchlib='./install_me_here/usr/lib/perl5/5.36.0/armv4l-linux' installbin='./install_me_here/usr/bin' installhtml1dir='' installhtml3dir='' @@ -832,13 +839,13 @@ installman1dir='./install_me_here/usr/share/man/man1' installman3dir='./install_me_here/usr/share/man/man3' installprefix='./install_me_here/usr' installprefixexp='./install_me_here/usr' -installprivlib='./install_me_here/usr/lib/perl5/5.32.1' +installprivlib='./install_me_here/usr/lib/perl5/5.36.0' installscript='./install_me_here/usr/bin' -installsitearch='./install_me_here/usr/lib/perl5/site_perl/5.32.1/armv4l-linux' +installsitearch='./install_me_here/usr/lib/perl5/site_perl/5.36.0/armv4l-linux' installsitebin='./install_me_here/usr/bin' installsitehtml1dir='' installsitehtml3dir='' -installsitelib='./install_me_here/usr/lib/perl5/site_perl/5.32.1' +installsitelib='./install_me_here/usr/lib/perl5/site_perl/5.36.0' installsiteman1dir='./install_me_here/usr/share/man/man1' installsiteman3dir='./install_me_here/usr/share/man/man3' installsitescript='./install_me_here/usr/bin' @@ -961,6 +968,7 @@ perl5='/usr/bin/perl' perl='' perl_patchlevel='' perl_static_inline='static' +perl_thread_local='' perladmin='red@criticalintegration.com' perllibs='-lnsl -ldl -lm -lcrypt -lutil -lc' perlpath='/usr/bin/perl' @@ -972,8 +980,8 @@ pmake='' pr='' prefix='/usr' prefixexp='/usr' -privlib='/usr/lib/perl5/5.32.1' -privlibexp='/usr/lib/perl5/5.32.1' +privlib='/usr/lib/perl5/5.36.0' +privlibexp='/usr/lib/perl5/5.36.0' procselfexe='"/proc/self/exe"' prototype='define' ptrsize='4' @@ -1038,17 +1046,17 @@ sig_num='0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 sig_num_init='0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 6, 17, 29, 31, 0' sig_size='68' signal_t='void' -sitearch='/usr/lib/perl5/site_perl/5.32.1/armv4l-linux' -sitearchexp='/usr/lib/perl5/site_perl/5.32.1/armv4l-linux' +sitearch='/usr/lib/perl5/site_perl/5.36.0/armv4l-linux' +sitearchexp='/usr/lib/perl5/site_perl/5.36.0/armv4l-linux' sitebin='/usr/bin' sitebinexp='/usr/bin' sitehtml1dir='' sitehtml1direxp='' sitehtml3dir='' sitehtml3direxp='' -sitelib='/usr/lib/perl5/site_perl/5.32.1' +sitelib='/usr/lib/perl5/site_perl/5.36.0' sitelib_stem='/usr/lib/perl5/site_perl' -sitelibexp='/usr/lib/perl5/site_perl/5.32.1' +sitelibexp='/usr/lib/perl5/site_perl/5.36.0' siteman1dir='/usr/share/man/man1' siteman1direxp='/usr/share/man/man1' siteman3dir='/usr/share/man/man3' @@ -1072,6 +1080,8 @@ srand48_r_proto='0' srandom_r_proto='0' src='.' ssizetype='ssize_t' +st_dev_sign='1' +st_dev_size='4' st_ino_sign='1' st_ino_size='4' startperl='#!/usr/bin/perl' @@ -1087,7 +1097,7 @@ stdio_stream_array='' strerror_r_proto='0' strings='/usr/include/string.h' submit='' -subversion='1' +subversion='0' sysman='/usr/share/man/man1' tail='' tar='' @@ -1120,11 +1130,11 @@ uidtype='uid_t' uname='uname' uniq='uniq' uquadtype='unsigned long long' -use5005threads='undef' use64bitall='undef' use64bitint='undef' usecbacktrace='undef' usecrosscompile='undef' +usedefaultstrict='undef' usedevel='undef' usedl='define' usedtrace='undef' @@ -1178,11 +1188,12 @@ vendorprefix='' vendorprefixexp='' vendorscript='' vendorscriptexp='' -version='5.32.1' -version_patchlevel_string='version 32 subversion 1' +version='5.36.0' +version_patchlevel_string='version 36 subversion 0' versiononly='undef' vi='' xlibpth='/usr/lib/386 /lib/386' +xlocale_needed='undef' yacc='yacc' yaccflags='' zcat='' @@ -1192,10 +1203,10 @@ config_arg0='Configure' config_args='' config_argc=0 PERL_REVISION=5 -PERL_VERSION=32 -PERL_SUBVERSION=1 +PERL_VERSION=36 +PERL_SUBVERSION=0 PERL_API_REVISION=5 -PERL_API_VERSION=32 +PERL_API_VERSION=36 PERL_API_SUBVERSION=0 PERL_PATCHLEVEL= PERL_CONFIG_SH=true diff --git a/gnu/usr.bin/perl/Cross/config.sh-arm-linux-n770 b/gnu/usr.bin/perl/Cross/config.sh-arm-linux-n770 index 3ad709f938f..b1e697f17f1 100644 --- a/gnu/usr.bin/perl/Cross/config.sh-arm-linux-n770 +++ b/gnu/usr.bin/perl/Cross/config.sh-arm-linux-n770 @@ -32,11 +32,11 @@ alignbytes='4' aphostname='/bin/hostname' api_revision='5' api_subversion='0' -api_version='32' -api_versionstring='5.32.0' +api_version='36' +api_versionstring='5.36.0' ar='ar' -archlib='/usr/lib/perl5/5.32.1/armv4l-linux' -archlibexp='/usr/lib/perl5/5.32.1/armv4l-linux' +archlib='/usr/lib/perl5/5.36.0/armv4l-linux' +archlibexp='/usr/lib/perl5/5.36.0/armv4l-linux' archname64='' archname='armv4l-linux' archobjs='' @@ -54,7 +54,7 @@ castflags='0' cat='cat' cc='arm-none-linux-gnueabi-gcc' cccdlflags='-fpic' -ccdlflags='-rdynamic -Wl,-rpath,/usr/lib/perl5/5.32.1/armv4l-linux/CORE' +ccdlflags='-rdynamic -Wl,-rpath,/usr/lib/perl5/5.36.0/armv4l-linux/CORE' ccflags='-fno-strict-aliasing -I/usr/local/include -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64' ccflags_uselargefiles='-D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64' ccname='arm-linux-gcc' @@ -212,6 +212,8 @@ d_fdclose='undef' d_fdim='undef' d_fds_bits='undef' d_fegetround='define' +d_ffs='undef' +d_ffsl='undef' d_fgetpos='define' d_finite='define' d_finitel='define' @@ -247,6 +249,7 @@ d_gdbm_ndbm_h_uses_prototypes='undef' d_gdbmndbm_h_uses_prototypes='undef' d_getaddrinfo='undef' d_getcwd='define' +d_getenv_preserves_other_thread='define' d_getespwnam='undef' d_getfsstat='undef' d_getgrent='define' @@ -416,6 +419,8 @@ d_nextafter='undef' d_nexttoward='undef' d_nice='define' d_nl_langinfo='define' +d_nl_langinfo_l='undef' +d_non_int_bitfields='define' d_nv_preserves_uv='define' d_nv_zero_is_allbits_zero='undef' d_off64_t='undef' @@ -580,6 +585,7 @@ d_strtoul='define' d_strtoull='define' d_strtouq='define' d_strxfrm='define' +d_strxfrm_l='undef' d_suidsafe='undef' d_symlink='define' d_syscall='define' @@ -593,6 +599,7 @@ d_tcsetpgrp='define' d_telldir='define' d_telldirproto='define' d_tgamma='undef' +d_thread_local='undef' d_thread_safe_nl_langinfo_l='undef' d_time='define' d_timegm='define' @@ -822,7 +829,7 @@ inc_version_list=' ' inc_version_list_init='0' incpath='' inews='' -installarchlib='./install_me_here/usr/lib/perl5/5.32.1/armv4l-linux' +installarchlib='./install_me_here/usr/lib/perl5/5.36.0/armv4l-linux' installbin='./install_me_here/usr/bin' installhtml1dir='' installhtml3dir='' @@ -830,13 +837,13 @@ installman1dir='./install_me_here/usr/share/man/man1' installman3dir='./install_me_here/usr/share/man/man3' installprefix='./install_me_here/usr' installprefixexp='./install_me_here/usr' -installprivlib='./install_me_here/usr/lib/perl5/5.32.1' +installprivlib='./install_me_here/usr/lib/perl5/5.36.0' installscript='./install_me_here/usr/bin' -installsitearch='./install_me_here/usr/lib/perl5/site_perl/5.32.1/armv4l-linux' +installsitearch='./install_me_here/usr/lib/perl5/site_perl/5.36.0/armv4l-linux' installsitebin='./install_me_here/usr/bin' installsitehtml1dir='' installsitehtml3dir='' -installsitelib='./install_me_here/usr/lib/perl5/site_perl/5.32.1' +installsitelib='./install_me_here/usr/lib/perl5/site_perl/5.36.0' installsiteman1dir='./install_me_here/usr/share/man/man1' installsiteman3dir='./install_me_here/usr/share/man/man3' installsitescript='./install_me_here/usr/bin' @@ -959,6 +966,7 @@ perl5='/usr/bin/perl' perl='' perl_patchlevel='' perl_static_inline='static' +perl_thread_local='' perladmin='red@criticalintegration.com' perllibs='-lnsl -ldl -lm -lcrypt -lutil -lc' perlpath='/usr/bin/perl' @@ -970,8 +978,8 @@ pmake='' pr='' prefix='/usr' prefixexp='/usr' -privlib='/usr/lib/perl5/5.32.1' -privlibexp='/usr/lib/perl5/5.32.1' +privlib='/usr/lib/perl5/5.36.0' +privlibexp='/usr/lib/perl5/5.36.0' procselfexe='"/proc/self/exe"' prototype='define' ptrsize='4' @@ -1036,17 +1044,17 @@ sig_num='0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 sig_num_init='0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 6, 17, 29, 31, 0' sig_size='68' signal_t='void' -sitearch='/usr/lib/perl5/site_perl/5.32.1/armv4l-linux' -sitearchexp='/usr/lib/perl5/site_perl/5.32.1/armv4l-linux' +sitearch='/usr/lib/perl5/site_perl/5.36.0/armv4l-linux' +sitearchexp='/usr/lib/perl5/site_perl/5.36.0/armv4l-linux' sitebin='/usr/bin' sitebinexp='/usr/bin' sitehtml1dir='' sitehtml1direxp='' sitehtml3dir='' sitehtml3direxp='' -sitelib='/usr/lib/perl5/site_perl/5.32.1' +sitelib='/usr/lib/perl5/site_perl/5.36.0' sitelib_stem='/usr/lib/perl5/site_perl' -sitelibexp='/usr/lib/perl5/site_perl/5.32.1' +sitelibexp='/usr/lib/perl5/site_perl/5.36.0' siteman1dir='/usr/share/man/man1' siteman1direxp='/usr/share/man/man1' siteman3dir='/usr/share/man/man3' @@ -1070,6 +1078,8 @@ srand48_r_proto='0' srandom_r_proto='0' src='.' ssizetype='ssize_t' +st_dev_sign='1' +st_dev_size='4' st_ino_sign='1' st_ino_size='4' startperl='#!/usr/bin/perl' @@ -1085,7 +1095,7 @@ stdio_stream_array='' strerror_r_proto='0' strings='/usr/include/string.h' submit='' -subversion='1' +subversion='0' sysman='/usr/share/man/man1' tail='' tar='' @@ -1118,11 +1128,11 @@ uidtype='uid_t' uname='uname' uniq='uniq' uquadtype='unsigned long long' -use5005threads='undef' use64bitall='undef' use64bitint='undef' usecbacktrace='undef' usecrosscompile='undef' +usedefaultstrict='undef' usedevel='undef' usedl='define' usedtrace='undef' @@ -1176,11 +1186,12 @@ vendorprefix='' vendorprefixexp='' vendorscript='' vendorscriptexp='' -version='5.32.1' -version_patchlevel_string='version 32 subversion 1' +version='5.36.0' +version_patchlevel_string='version 36 subversion 0' versiononly='undef' vi='' xlibpth='/usr/lib/386 /lib/386' +xlocale_needed='undef' yacc='yacc' yaccflags='' zcat='' @@ -1190,10 +1201,10 @@ config_arg0='Configure' config_args='' config_argc=0 PERL_REVISION=5 -PERL_VERSION=32 -PERL_SUBVERSION=1 +PERL_VERSION=36 +PERL_SUBVERSION=0 PERL_API_REVISION=5 -PERL_API_VERSION=32 +PERL_API_VERSION=36 PERL_API_SUBVERSION=0 PERL_PATCHLEVEL= PERL_CONFIG_SH=true diff --git a/gnu/usr.bin/perl/EXTERN.h b/gnu/usr.bin/perl/EXTERN.h index 4406b297521..7946323dcec 100644 --- a/gnu/usr.bin/perl/EXTERN.h +++ b/gnu/usr.bin/perl/EXTERN.h @@ -19,14 +19,14 @@ #undef EXTCONST #undef dEXTCONST -# if (defined(WIN32) || defined(__SYMBIAN32__)) && !defined(PERL_STATIC_SYMS) +# if defined(WIN32) && !defined(PERL_STATIC_SYMS) /* miniperl should not export anything */ # if defined(PERL_IS_MINIPERL) # define EXT extern # define dEXT # define EXTCONST extern const # define dEXTCONST const -# elif defined(PERLDLL) || defined(__SYMBIAN32__) +# elif defined(PERLDLL) # define EXT EXTERN_C __declspec(dllexport) # define dEXT # define EXTCONST EXTERN_C __declspec(dllexport) const diff --git a/gnu/usr.bin/perl/INSTALL b/gnu/usr.bin/perl/INSTALL index 76edeec6a21..4e74bd4ce78 100644 --- a/gnu/usr.bin/perl/INSTALL +++ b/gnu/usr.bin/perl/INSTALL @@ -37,9 +37,8 @@ To explicitly name the perl binary, use the command "make install PERLNAME=myperl". Building perl from source requires an ANSI compliant C compiler. -A minimum of C89 is required. Some features available in C99 will -be probed for and used when found. The perl build process does not -rely on anything more than C89. +C89 with a minimal subset of C99 features is required. Some other +features available in C99 will be probed for and used when found. These options, and many more, are explained in further detail below. @@ -89,10 +88,12 @@ potential incompatibilities introduced with this release. A few of the most important issues are listed below, but you should refer to F for more detailed information. -B This version is not binary compatible with versions of Perl -earlier than 5.32.0. If you have built extensions (i.e. modules that -include C code) using an earlier version of Perl, you will need to -rebuild and reinstall those extensions. +=head3 Compatibility with earlier versions + +B This version is not binary compatible with earlier versions +of Perl. If you have built extensions (i.e. modules that include C code) +using an earlier version of Perl, you will need to rebuild and reinstall +those extensions. Pure perl modules without XS or C code should continue to work fine without reinstallation. See the discussion below on @@ -108,6 +109,41 @@ list of locally installed modules. Also see the L module's C function for one way to make a "bundle" of your currently installed modules. +=head3 C99 + +With 5.36 we changed our C compiler baseline requirement from "ANSI C89" to +"C89 plus some specific C99 features". We have been using C99 features +optionally for some time - we now additionally B on a few in the core C +code and installed headers, which we know work on all supported compilers on +all platforms we target. Because earlier versions of Perl still compile with +strictly ANSI C89 compilers and there are still a few installations in the +wild which use these very old compilers, XS code that targets earlier versions +of Perl must not B on C99 features - that includes XS code in this +distribution that is dual life on CPAN. To test that XS code can build on +such compilers, some authors configure their perl builds with compiler flags +to warn or raise errors on C99 specific features, most often for mixed +declarations and code. This obviously will not work if you attempt it for +this release - it will not build. However, XS authors should be aware that +this means + +=over 4 + +=item * + +If you change the C compiler flags in your F or similar to add +such warnings or errors, you must now only do it for 5.35.4 or earlier. + +=item * + +Do not rely on now being able to use C99 features in your XS code, even for +platforms with C99 compilers - some installations of earlier versions of perl +are deliberately configured to enforce C89 standards so that locally authored +extension code conforms to them. If you choose to require C99 for your code, +that's fine, but do so knowing that if you distribute it, some installations +of perl are configured to fault C99. + +=back + =head1 Run Configure Configure will figure out various things about your system. Some @@ -132,7 +168,31 @@ Configure supports a number of useful options. Run Configure -h -to get a listing. See the F file for a complete list of +to get a listing. + +Many Configure switches are expressed as C pairs, for example: + + -Dcc=clang + +Sometimes the value to be supplied for a switch is a string which contains +spaces. In that case, the value needs to be quoted so as to delimit that +"shell word" from any following switch. Example: + + sh ./Configure -des \ + -Doptimize="-O2 -pipe -fstack-protector -fno-strict-aliasing" \ + -Dusedevel + +Once Configure has run, you will be able to access configuration data via +entries in the file F. + + config_arg0='./Configure' + config_args='-des -Doptimize=-O2 -pipe -fstack-protector -fno-strict-aliasing -Dusedevel' + config_argc=3 + config_arg1='-des' + config_arg2='-Doptimize=-O2 -pipe -fstack-protector -fno-strict-aliasing' + config_arg3='-Dusedevel' + +See the F file for a complete list of Configure variables you can set and their definitions. =over 4 @@ -368,17 +428,16 @@ insecure and are not recommended for production use.> Since Perl 5.18 we have included support for multiple hash functions, although from time to time we change which functions we support, -and which function is default (currently SBOX+STADTX on 64 bit builds +and which function is default (currently SBOX+SIPHASH13 on 64 bit builds and SBOX+ZAPHOD32 for 32 bit builds). You can choose a different algorithm by defining one of the following symbols during configure. -Note that there security implications of which hash function you choose +Note that there are security implications regarding which hash function you choose to use. The functions are listed roughly by how secure they are believed to be, with the one believed to be most secure at release time being PERL_HASH_FUNC_SIPHASH. PERL_HASH_FUNC_SIPHASH PERL_HASH_FUNC_SIPHASH13 PERL_HASH_FUNC_ZAPHOD32 - PERL_HASH_FUNC_STADTX In addition, these, (or custom hash functions), may be "fronted" by the SBOX32 hash function for keys under a chosen size. This hash function is @@ -388,10 +447,10 @@ and which has rather expensive setup costs (relatively speaking), both in terms of performance and more importantly in terms of memory. SBOX32 requires 1k of storage per character it can hash, and it must populate that storage with 256 32-bit random values as well. In practice the RNG we use -for seeding the SBOX32 storage is very efficient and populating the table +for seeding the SBOX32 storage is very efficient, and populating the table required for hashing even fairly long keys is negligible as we only do it -during startup. By default we build with SBOX32 enabled, but you change that -by setting +during startup. By default we build with SBOX32 enabled, but you can change +that by setting PERL_HASH_USE_SBOX32_ALSO @@ -418,7 +477,16 @@ the type of key traversal randomization to be used by defining one of these: Since Perl 5.18 the seed used for the hash function is randomly selected at process start, which can be overridden by specifying a seed by setting -the PERL_HASH_SEED environment variable. +the PERL_HASH_SEED environment variable. Be aware that +PERL_PERTURB_KEYS_DETERMINISTIC and the equivalent environment variable +setting will produce the same results if and only if the code does not +put non-deterministic data into a hash, and the code is executed in exactly +the same context in terms of the environment. If the code populates a hash +with random data, or builds a hash using the address of its items, or +if the code is run in a different environment context with a different +number or selection of environment variables then the result may differ. +DETERMINISTIC in this context means "if everything else is kept the same +the same results should be observed". You can change this behavior so that your perl is built with a hard coded seed with the define @@ -444,7 +512,7 @@ See L and L for details on the environment variables, and L for further security details. -The C and PERL_PERTURB_KEYS> environment variables can +The C and C environment variables can be disabled by building configuring perl with C<-Accflags=-DNO_PERL_HASH_ENV>. @@ -506,7 +574,7 @@ You can elect to build a shared libperl by To build a shared libperl, the environment variable controlling shared library search (LD_LIBRARY_PATH in most systems, DYLD_LIBRARY_PATH for Darwin, LD_LIBRARY_PATH/SHLIB_PATH -for HP-UX, LIBPATH for AIX, PATH for Cygwin) must be set up to include +for HP-UX, LIBPATH for AIX and z/OS, PATH for Cygwin) must be set up to include the Perl build directory because that's where the shared libperl will be created. Configure arranges makefile to have the correct shared library search settings. You can find the name of the environment @@ -615,7 +683,7 @@ The directories set up by Configure fall into three broad categories. =item Directories for the perl distribution -By default, Configure will use the following directories for 5.32.1. +By default, Configure will use the following directories for 5.36.0. $version is the full perl version number, including subversion, e.g. 5.12.3, and $archname is a string like sun4-sunos, determined by Configure. The full definitions of all Configure @@ -1545,10 +1613,11 @@ retesting with the various PERL variables unset. =item LD_LIBRARY_PATH If you run into dynamic loading problems, check your setting of -the LD_LIBRARY_PATH environment variable. If you're creating a static -Perl library (libperl.a rather than libperl.so) it should build -fine with LD_LIBRARY_PATH unset, though that may depend on details -of your local setup. +the LD_LIBRARY_PATH environment variable (or on some systems the equivalent +with a different name, see L). If you're +creating a static Perl library (libperl.a rather than libperl.so) it should +build fine with LD_LIBRARY_PATH unset, though that may depend on details of +your local setup. =item nm extraction @@ -2437,8 +2506,7 @@ L =head1 Coexistence with earlier versions of perl 5 -Perl 5.32.1 is not binary compatible with versions of Perl earlier than -5.32.0. +Perl 5.36.0 is not binary compatible with earlier versions of Perl. In other words, you will have to recompile your XS modules. In general, you can usually safely upgrade from one stable version of Perl @@ -2513,9 +2581,9 @@ won't interfere with another version. (The defaults guarantee this for libraries after 5.6.0, but not for executables. TODO?) One convenient way to do this is by using a separate prefix for each version, such as - sh Configure -Dprefix=/opt/perl5.32.1 + sh Configure -Dprefix=/opt/perl5.36.0 -and adding /opt/perl5.32.1/bin to the shell PATH variable. Such users +and adding /opt/perl5.36.0/bin to the shell PATH variable. Such users may also wish to add a symbolic link /usr/local/bin/perl so that scripts can still start with #!/usr/local/bin/perl. @@ -2528,13 +2596,13 @@ seriously consider using a separate directory, since development subversions may not have all the compatibility wrinkles ironed out yet. -=head2 Upgrading from 5.31.11 or earlier +=head2 Upgrading from 5.35.11 or earlier -B Perl modules having binary parts (meaning that a C compiler is used) will have to be recompiled to be -used with 5.32.1. If you find you do need to rebuild an extension with -5.32.1, you may safely do so without disturbing the older +used with 5.36.0. If you find you do need to rebuild an extension with +5.36.0, you may safely do so without disturbing the older installations. (See L<"Coexistence with earlier versions of perl 5"> above.) @@ -2567,15 +2635,15 @@ Firstly, the bare minimum to run this script print("$f\n"); } -in Linux with perl-5.32.1 is as follows (under $Config{prefix}): +in Linux with perl-5.36.0 is as follows (under $Config{prefix}): ./bin/perl - ./lib/perl5/5.32.1/strict.pm - ./lib/perl5/5.32.1/warnings.pm - ./lib/perl5/5.32.1/i686-linux/File/Glob.pm - ./lib/perl5/5.32.1/feature.pm - ./lib/perl5/5.32.1/XSLoader.pm - ./lib/perl5/5.32.1/i686-linux/auto/File/Glob/Glob.so + ./lib/perl5/5.36.0/strict.pm + ./lib/perl5/5.36.0/warnings.pm + ./lib/perl5/5.36.0/i686-linux/File/Glob.pm + ./lib/perl5/5.36.0/feature.pm + ./lib/perl5/5.36.0/XSLoader.pm + ./lib/perl5/5.36.0/i686-linux/auto/File/Glob/Glob.so Secondly, for perl-5.10.1, the Debian perl-base package contains 591 files, (of which 510 are for lib/unicore) totaling about 3.5MB in its diff --git a/gnu/usr.bin/perl/INTERN.h b/gnu/usr.bin/perl/INTERN.h index 35bb4ee5cb3..4305b6bc029 100644 --- a/gnu/usr.bin/perl/INTERN.h +++ b/gnu/usr.bin/perl/INTERN.h @@ -19,8 +19,7 @@ #undef EXTCONST #undef dEXTCONST -# if (defined(WIN32) && defined(__MINGW32__) && ! defined(PERL_IS_MINIPERL)) \ - || defined(__SYMBIAN32__) +# if (defined(WIN32) && defined(__MINGW32__) && ! defined(PERL_IS_MINIPERL)) # ifdef __cplusplus # define EXT __declspec(dllexport) # define dEXT diff --git a/gnu/usr.bin/perl/MANIFEST b/gnu/usr.bin/perl/MANIFEST index 1545cdce15a..c0053630964 100644 --- a/gnu/usr.bin/perl/MANIFEST +++ b/gnu/usr.bin/perl/MANIFEST @@ -1,4 +1,5 @@ .dir-locals.el Emacs control file +.editorconfig EditorConfig style file .lgtm.yml LGTM.com configuration file .metaconf-exclusions.txt Symbols that should ignored when generating Configure .travis.yml continuous integration on github (where enabled) @@ -13,11 +14,12 @@ AUTHORS Contact info for contributors autodoc.pl Creates pod/perlintern.pod and pod/perlapi.pod av.c Array value code av.h Array value header +builtin.c Functions in the builtin:: namespace caretx.c C file to create $^X cflags.SH A script that emits C compilation flags per file Changes Describe how to peruse changes between releases charclass_invlists.h Compiled-in inversion lists -config.over Site-specific overrides for Configure defaults +CODE_OF_CONDUCT.md Information on where to find the Standards of Conduct config_h.SH Produces config.h configpm Produces lib/Config.pm Configure Portability tool @@ -81,6 +83,7 @@ cpan/autodie/t/crickey.t autodie - Like an Australian cpan/autodie/t/dbmopen.t autodie - dbm tests cpan/autodie/t/eval_error.t cpan/autodie/t/exception_class.t autodie - Exception class subclasses +cpan/autodie/t/exception_nonref.t cpan/autodie/t/exceptions.t autodie - 5.10 exception tests. cpan/autodie/t/exec.t autodie - exec tests. cpan/autodie/t/Fatal.t autodie - Fatal backcompatibility @@ -142,35 +145,69 @@ cpan/AutoLoader/lib/AutoLoader.pm Autoloader base class cpan/AutoLoader/lib/AutoSplit.pm Split up autoload functions cpan/AutoLoader/t/01AutoLoader.t See if AutoLoader works cpan/AutoLoader/t/02AutoSplit.t See if AutoSplit works +cpan/bignum/gentest/backend.sh +cpan/bignum/gentest/scope-nested-const.sh +cpan/bignum/gentest/scope-nested-hex-oct.sh +cpan/bignum/lib/bigfloat.pm cpan/bignum/lib/bigint.pm bigint cpan/bignum/lib/bignum.pm bignum cpan/bignum/lib/bigrat.pm bigrat cpan/bignum/lib/Math/BigFloat/Trace.pm bignum tracing cpan/bignum/lib/Math/BigInt/Trace.pm bignum tracing -cpan/bignum/t/big_e_pi.t See if bignum exports e() and PI() +cpan/bignum/lib/Math/BigRat/Trace.pm +cpan/bignum/t/backend-gmp-bigfloat.t +cpan/bignum/t/backend-gmp-bigint.t +cpan/bignum/t/backend-gmp-bignum.t +cpan/bignum/t/backend-gmp-bigrat.t +cpan/bignum/t/backend-pari-bigfloat.t +cpan/bignum/t/backend-pari-bigint.t +cpan/bignum/t/backend-pari-bignum.t +cpan/bignum/t/backend-pari-bigrat.t cpan/bignum/t/bigexp.t See if bignum works +cpan/bignum/t/bigfloat.t cpan/bignum/t/bigint.t See if bigint works cpan/bignum/t/bignum.t See if bignum works cpan/bignum/t/bigrat.t See if bigrat works -cpan/bignum/t/bii_e_pi.t See if bigint exports e() and PI() -cpan/bignum/t/biinfnan.t See if bignum works -cpan/bignum/t/bir_e_pi.t See if bigrat exports e() and PI() -cpan/bignum/t/bn_lite.t See if bignum with Math::BigInt::Lite works -cpan/bignum/t/bninfnan.t See if bignum works -cpan/bignum/t/br_lite.t See if bigrat with Math::BigInt::Lite works -cpan/bignum/t/brinfnan.t See if bignum works +cpan/bignum/t/const-bigfloat.t +cpan/bignum/t/const-bigint.t +cpan/bignum/t/const-bignum.t +cpan/bignum/t/const-bigrat.t +cpan/bignum/t/down-mbi-up-mbf.t +cpan/bignum/t/down-mbi-up-mbr.t +cpan/bignum/t/down-mbi-up-undef.t +cpan/bignum/t/down-undef-up-mbf.t +cpan/bignum/t/e_pi-bigfloat.t +cpan/bignum/t/e_pi-bigint.t +cpan/bignum/t/e_pi-bignum.t +cpan/bignum/t/e_pi-bigrat.t +cpan/bignum/t/import-bigfloat.t +cpan/bignum/t/import-bigint.t +cpan/bignum/t/import-bignum.t +cpan/bignum/t/import-bigrat.t cpan/bignum/t/in_effect.t See if in_effect() works -cpan/bignum/t/infnan.inc See if bignum with inf/NaN works +cpan/bignum/t/infnan-bigfloat.t +cpan/bignum/t/infnan-bigint.t +cpan/bignum/t/infnan-bignum.t +cpan/bignum/t/infnan-bigrat.t cpan/bignum/t/option_a.t See if bignum a => X works -cpan/bignum/t/option_l.t See if bignum l => X works +cpan/bignum/t/option_a-bignum.t +cpan/bignum/t/option_l-bigfloat.t +cpan/bignum/t/option_l-bigint.t +cpan/bignum/t/option_l-bignum.t +cpan/bignum/t/option_l-bigrat.t cpan/bignum/t/option_p.t See if bignum p => X works +cpan/bignum/t/option_p-bignum.t cpan/bignum/t/overrides.t See if global overrides behave cpan/bignum/t/ratopt_a.t See if bigrat a => X works -cpan/bignum/t/scope_f.t See if no bignum works -cpan/bignum/t/scope_i.t See if no bigint works -cpan/bignum/t/scope_r.t See if no bigrat works +cpan/bignum/t/scope-bigfloat.t +cpan/bignum/t/scope-bigint.t +cpan/bignum/t/scope-bignum.t +cpan/bignum/t/scope-bigrat.t +cpan/bignum/t/scope-nested-const.t +cpan/bignum/t/scope-nested-hex-oct.t cpan/Compress-Raw-Bzip2/Bzip2.xs cpan/Compress-Raw-Bzip2/bzip2-src/blocksort.c +cpan/Compress-Raw-Bzip2/bzip2-src/bzip2.patch cpan/Compress-Raw-Bzip2/bzip2-src/bzlib.c cpan/Compress-Raw-Bzip2/bzip2-src/bzlib.h cpan/Compress-Raw-Bzip2/bzip2-src/bzlib_private.h @@ -248,6 +285,10 @@ cpan/Config-Perl-V/t/31_plv52511.t Config::Perl::V cpan/Config-Perl-V/t/32_plv5261rc1.t Config::Perl::V cpan/Config-Perl-V/t/33_plv52711r.t Config::Perl::V cpan/Config-Perl-V/t/34_plv5280.t Config::Perl::V +cpan/Config-Perl-V/t/35_plv52910g.t Config::Perl::V +cpan/Config-Perl-V/t/36_plv5300.t Config::Perl::V +cpan/Config-Perl-V/t/37_plv53111qm.t Config::Perl::V +cpan/Config-Perl-V/t/38_plv5320tld.t Config::Perl::V cpan/Config-Perl-V/V.pm Config::Perl::V cpan/CPAN/lib/App/Cpan.pm helper package for CPAN.pm cpan/CPAN/lib/CPAN.pm Interface to Comprehensive Perl Archive Network @@ -293,12 +334,14 @@ cpan/CPAN/PAUSE2005.pub CPAN public key cpan/CPAN/PAUSE2007.pub CPAN public key cpan/CPAN/PAUSE2009.pub CPAN public key cpan/CPAN/PAUSE2011.pub +cpan/CPAN/PAUSE2022.pub cpan/CPAN/scripts/cpan easily interact with CPAN from the command line cpan/CPAN/t/01loadme.t See if CPAN the module works cpan/CPAN/t/02nox.t See if CPAN::Nox works cpan/CPAN/t/03pkgs.t See if CPAN::Version works cpan/CPAN/t/10version.t See if CPAN the module works cpan/CPAN/t/11mirroredby.t See if CPAN::Mirrored::By works +cpan/CPAN/t/32pushyhttps.t cpan/CPAN-Meta/corpus/BadMETA.yml cpan/CPAN-Meta/corpus/bareyaml.meta cpan/CPAN-Meta/corpus/CL018_yaml.meta @@ -456,7 +499,6 @@ cpan/CPAN-Meta-YAML/t/tml-world/yaml_org.tml cpan/DB_File/config.in Part of Berkeley DB configuration cpan/DB_File/DB_File.pm Berkeley DB extension Perl module cpan/DB_File/DB_File.xs Berkeley DB extension external subroutines -cpan/DB_File/DB_File_BS Berkeley DB extension mkbootstrap fodder cpan/DB_File/dbinfo Berkeley DB database version checker cpan/DB_File/hints/bitrig.pl cpan/DB_File/hints/dynixptx.pl Hint for DB_File for named architecture @@ -471,9 +513,9 @@ cpan/DB_File/t/db-recno.t See if DB_File works cpan/DB_File/t/db-threads.t See if DB_File works cpan/DB_File/typemap Berkeley DB extension interface types cpan/DB_File/version.c Berkeley DB extension interface version check -cpan/Digest/Digest.pm Digest extensions -cpan/Digest/Digest/base.pm Digest extensions -cpan/Digest/Digest/file.pm Digest extensions +cpan/Digest/lib/Digest.pm +cpan/Digest/lib/Digest/base.pm +cpan/Digest/lib/Digest/file.pm cpan/Digest/t/base.t See if Digest extensions work cpan/Digest/t/digest.t See if Digest extensions work cpan/Digest/t/file.t See if Digest extensions work @@ -493,6 +535,7 @@ cpan/Digest-MD5/t/files.t See if Digest::MD5 extension works cpan/Digest-MD5/t/md5-aaa.t See if Digest::MD5 extension works cpan/Digest-MD5/t/threads.t See if Digest::MD5 extension works cpan/Digest-MD5/t/utf8.t See if Digest::MD5 extension works +cpan/Digest-MD5/t/warns.t cpan/Digest-MD5/typemap Digest::MD5 extension cpan/Digest-SHA/lib/Digest/SHA.pm Digest::SHA extension cpan/Digest-SHA/Makefile.PL Digest::SHA Makefile.PL @@ -630,7 +673,9 @@ cpan/Encode/t/truncated_utf8.t cpan/Encode/t/undef.t cpan/Encode/t/unibench.pl benchmark script cpan/Encode/t/Unicode.t test script +cpan/Encode/t/Unicode_trailing_nul.t cpan/Encode/t/use-Encode-Alias.t +cpan/Encode/t/utf32warnings.t cpan/Encode/t/utf8ref.t test script cpan/Encode/t/utf8strict.t test script cpan/Encode/t/utf8warnings.t @@ -787,6 +832,7 @@ cpan/ExtUtils-MakeMaker/lib/ExtUtils/MM_DOS.pm MakeMaker methods for DOS cpan/ExtUtils-MakeMaker/lib/ExtUtils/MM_MacOS.pm MakeMaker methods for MacOS cpan/ExtUtils-MakeMaker/lib/ExtUtils/MM_NW5.pm MakeMaker methods for NetWare cpan/ExtUtils-MakeMaker/lib/ExtUtils/MM_OS2.pm MakeMaker methods for OS/2 +cpan/ExtUtils-MakeMaker/lib/ExtUtils/MM_OS390.pm MakeMaker methods for OS 390 cpan/ExtUtils-MakeMaker/lib/ExtUtils/MM_QNX.pm MakeMaker methods for QNX cpan/ExtUtils-MakeMaker/lib/ExtUtils/MM_Unix.pm MakeMaker methods for Unix cpan/ExtUtils-MakeMaker/lib/ExtUtils/MM_UWIN.pm MakeMaker methods for U/WIN @@ -800,6 +846,7 @@ cpan/ExtUtils-MakeMaker/t/00compile.t See if MakeMaker modules compile cpan/ExtUtils-MakeMaker/t/01perl_bugs.t cpan/ExtUtils-MakeMaker/t/02-xsdynamic.t cpan/ExtUtils-MakeMaker/t/03-xsstatic.t +cpan/ExtUtils-MakeMaker/t/04-xs-rpath-darwin.t cpan/ExtUtils-MakeMaker/t/arch_check.t Test MakeMaker's arch_check() cpan/ExtUtils-MakeMaker/t/backwards.t Check MakeMaker's backwards compatibility cpan/ExtUtils-MakeMaker/t/basic.t See if MakeMaker can build a module @@ -868,7 +915,6 @@ cpan/ExtUtils-MakeMaker/t/test_boilerplate.t MakeMaker test cpan/ExtUtils-MakeMaker/t/testdata/reallylongdirectoryname/arch1/Config.pm test data for MakeMaker cpan/ExtUtils-MakeMaker/t/testdata/reallylongdirectoryname/arch2/Config.pm test data for MakeMaker cpan/ExtUtils-MakeMaker/t/testlib.t See if ExtUtils::testlib works -cpan/ExtUtils-MakeMaker/t/testrules.yml cpan/ExtUtils-MakeMaker/t/unicode.t cpan/ExtUtils-MakeMaker/t/VERSION_FROM.t See if MakeMaker's VERSION_FROM works cpan/ExtUtils-MakeMaker/t/vstrings.t @@ -877,6 +923,8 @@ cpan/ExtUtils-MakeMaker/t/writemakefile_args.t See if WriteMakefile works cpan/ExtUtils-Manifest/lib/ExtUtils/Manifest.pm Utilities to write MANIFEST files cpan/ExtUtils-Manifest/lib/ExtUtils/MANIFEST.SKIP The default MANIFEST.SKIP cpan/ExtUtils-Manifest/t/Manifest.t See if ExtUtils::Manifest works +cpan/ExtUtils-PL2Bat/lib/ExtUtils/PL2Bat.pm Implement pl2bat +cpan/ExtUtils-PL2Bat/t/make_executable.t Tests if ExtUtils::PL2Bat makes bat files that are executable cpan/File-Fetch/lib/File/Fetch.pm File::Fetch cpan/File-Fetch/t/01_File-Fetch.t File::Fetch tests cpan/File-Fetch/t/null_subclass.t @@ -950,6 +998,7 @@ cpan/HTTP-Tiny/corpus/get-19.txt cpan/HTTP-Tiny/corpus/get-20.txt cpan/HTTP-Tiny/corpus/get-21.txt cpan/HTTP-Tiny/corpus/get-22.txt +cpan/HTTP-Tiny/corpus/get-23.txt cpan/HTTP-Tiny/corpus/head-01.txt cpan/HTTP-Tiny/corpus/keepalive-01.txt cpan/HTTP-Tiny/corpus/keepalive-02.txt @@ -962,12 +1011,16 @@ cpan/HTTP-Tiny/corpus/mirror-03.txt cpan/HTTP-Tiny/corpus/mirror-04.txt cpan/HTTP-Tiny/corpus/mirror-05.txt cpan/HTTP-Tiny/corpus/post-01.txt +cpan/HTTP-Tiny/corpus/post-02.txt cpan/HTTP-Tiny/corpus/proxy-auth-01.txt cpan/HTTP-Tiny/corpus/put-01.txt cpan/HTTP-Tiny/corpus/put-02.txt cpan/HTTP-Tiny/corpus/put-03.txt cpan/HTTP-Tiny/corpus/put-04.txt cpan/HTTP-Tiny/corpus/put-05.txt +cpan/HTTP-Tiny/corpus/put-06.txt +cpan/HTTP-Tiny/corpus/put-07.txt +cpan/HTTP-Tiny/corpus/put-08.txt cpan/HTTP-Tiny/corpus/redirect-01.txt cpan/HTTP-Tiny/corpus/redirect-02.txt cpan/HTTP-Tiny/corpus/redirect-03.txt @@ -1120,6 +1173,7 @@ cpan/IO-Compress/t/110encode-rawdeflate.t IO::Compress cpan/IO-Compress/t/110encode-zip.t IO::Compress cpan/IO-Compress/t/111const-deflate.t IO::Compress cpan/IO-Compress/t/112utf8-zip.t +cpan/IO-Compress/t/113issues.t cpan/IO-Compress/t/999pod.t IO::Compress cpan/IO-Compress/t/compress/any.pl Compress::Zlib cpan/IO-Compress/t/compress/anyunc.pl Compress::Zlib @@ -1146,6 +1200,7 @@ cpan/IO-Compress/t/files/encrypt-standard.zip cpan/IO-Compress/t/files/jar.zip cpan/IO-Compress/t/files/meta.xml cpan/IO-Compress/t/files/test.ods +cpan/IO-Compress/t/files/testfile1.odt cpan/IO-Compress/t/globmapper.t IO::Compress cpan/IO-Socket-IP/lib/IO/Socket/IP.pm IO::Socket::IP cpan/IO-Socket-IP/t/00use.t IO::Socket::IP tests @@ -1272,7 +1327,6 @@ cpan/libnet/t/config.t libnet cpan/libnet/t/datasend.t libnet cpan/libnet/t/ftp.t libnet cpan/libnet/t/hostname.t libnet -cpan/libnet/t/libnet_t.pl libnet cpan/libnet/t/netrc.t libnet cpan/libnet/t/nntp.t libnet cpan/libnet/t/nntp_ipv6.t @@ -1298,7 +1352,13 @@ cpan/Math-BigInt/lib/Math/BigFloat.pm An arbitrary precision floating-point ari cpan/Math-BigInt/lib/Math/BigInt.pm An arbitrary precision integer arithmetic package cpan/Math-BigInt/lib/Math/BigInt/Calc.pm Pure Perl module to support Math::BigInt cpan/Math-BigInt/lib/Math/BigInt/Lib.pm +cpan/Math-BigInt/t/_bin_parts_to_lib_parts.t +cpan/Math-BigInt/t/_bin_str_to_str_parts.t +cpan/Math-BigInt/t/_dec_parts_to_lib_parts.t +cpan/Math-BigInt/t/_dec_str_to_str_parts.t cpan/Math-BigInt/t/_e_math.t Helper routine in BigFloat for _e math +cpan/Math-BigInt/t/_hex_str_to_str_parts.t +cpan/Math-BigInt/t/_oct_str_to_str_parts.t cpan/Math-BigInt/t/alias.inc Support for BigInt tests cpan/Math-BigInt/t/backermann-mbi.t Test Math::BigInt cpan/Math-BigInt/t/bare_mbf.t Test MBF under Math::BigInt::BareCalc @@ -1314,6 +1374,7 @@ cpan/Math-BigInt/t/big_pi_e.t test bpi() and bexp() cpan/Math-BigInt/t/bigfltpm.inc Shared tests for bigfltpm.t and sub_mbf.t cpan/Math-BigInt/t/bigfltpm.t See if BigFloat.pm works cpan/Math-BigInt/t/bigintc.t See if BigInt/Calc.pm works +cpan/Math-BigInt/t/bigintc-import.t cpan/Math-BigInt/t/bigintpm.inc Shared tests for bigintpm.t and sub_mbi.t cpan/Math-BigInt/t/bigintpm.t See if BigInt.pm works cpan/Math-BigInt/t/bigints.t See if BigInt.pm works @@ -1324,21 +1385,30 @@ cpan/Math-BigInt/t/bnok-mbf.t cpan/Math-BigInt/t/bnok-mbi.t cpan/Math-BigInt/t/bnstr-mbf.t Test Math::BigInt cpan/Math-BigInt/t/bnstr-mbi.t Test Math::BigInt +cpan/Math-BigInt/t/bpi-mbf.t +cpan/Math-BigInt/t/bpi-mbi.t +cpan/Math-BigInt/t/bpow-mbf.t +cpan/Math-BigInt/t/bpow-mbi.t cpan/Math-BigInt/t/bsstr-mbf.t Test Math::BigInt cpan/Math-BigInt/t/bsstr-mbi.t Test Math::BigInt cpan/Math-BigInt/t/buparrow-mbi.t Test Math::BigInt -cpan/Math-BigInt/t/calling.t Test calling conventions cpan/Math-BigInt/t/calling-class-methods.t Test Math::BigInt +cpan/Math-BigInt/t/calling-constant.t cpan/Math-BigInt/t/calling-instance-methods.t Test Math::BigInt +cpan/Math-BigInt/t/calling-lib1.t +cpan/Math-BigInt/t/calling-lib2.t cpan/Math-BigInt/t/config.t Test Math::BigInt->config() -cpan/Math-BigInt/t/const_mbf.t Test Math::BigInt -cpan/Math-BigInt/t/constant.t Test Math::BigInt/BigFloat under :constant +cpan/Math-BigInt/t/const-mbf.t +cpan/Math-BigInt/t/const-mbi.t cpan/Math-BigInt/t/downgrade.t Test if use Math::BigInt(); under downgrade works cpan/Math-BigInt/t/dparts-mbf.t Test Math::BigInt cpan/Math-BigInt/t/dparts-mbi.t Test Math::BigInt cpan/Math-BigInt/t/eparts-mbf.t Test Math::BigInt cpan/Math-BigInt/t/eparts-mbi.t Test Math::BigInt +cpan/Math-BigInt/t/fparts-mbf.t +cpan/Math-BigInt/t/fparts-mbi.t cpan/Math-BigInt/t/from_base-mbi.t +cpan/Math-BigInt/t/from_base_num-mbi.t cpan/Math-BigInt/t/from_bin-mbf.t Test Math::BigInt cpan/Math-BigInt/t/from_bin-mbi.t cpan/Math-BigInt/t/from_hex-mbf.t Test Math::BigInt @@ -1348,7 +1418,8 @@ cpan/Math-BigInt/t/from_oct-mbf.t Test Math::BigInt cpan/Math-BigInt/t/from_oct-mbi.t cpan/Math-BigInt/t/inf_nan.t Special tests for inf and *NaN* handling cpan/Math-BigInt/t/isa.t Test for Math::BigInt inheritance -cpan/Math-BigInt/t/lib_load.t Test sane lib names +cpan/Math-BigInt/t/lib_load-mbf-mbi.t +cpan/Math-BigInt/t/lib_load-mbi-mbf.t cpan/Math-BigInt/t/Math/BigFloat/Subclass.pm Empty subclass of BigFloat for test cpan/Math-BigInt/t/Math/BigInt/BareCalc.pm Bigint's simulation of Calc cpan/Math-BigInt/t/Math/BigInt/Lib/Minimal.pm @@ -1362,6 +1433,7 @@ cpan/Math-BigInt/t/mbimbf.inc Actual BigInt/BigFloat accuracy, precision and fa cpan/Math-BigInt/t/mbimbf.t BigInt/BigFloat accuracy, precision and fallback, round_mode cpan/Math-BigInt/t/nan_cmp.t overloaded comparison involving *NaN* cpan/Math-BigInt/t/new-mbf.t Test Math::BigInt +cpan/Math-BigInt/t/new-mbi.t cpan/Math-BigInt/t/new_overloaded.t test overloaded numbers in BigFloat's new() cpan/Math-BigInt/t/nparts-mbf.t Test Math::BigInt cpan/Math-BigInt/t/nparts-mbi.t Test Math::BigInt @@ -1383,6 +1455,7 @@ cpan/Math-BigInt/t/sub_mbf.t Empty subclass test of BigFloat cpan/Math-BigInt/t/sub_mbi.t Empty subclass test of BigInt cpan/Math-BigInt/t/sub_mif.t Test A & P with subclasses using mbimbf.inc cpan/Math-BigInt/t/to_base-mbi.t +cpan/Math-BigInt/t/to_base_num-mbi.t cpan/Math-BigInt/t/to_ieee754-mbf.t Test Math::BigInt cpan/Math-BigInt/t/trap.t Test whether trap_nan and trap_inf work cpan/Math-BigInt/t/upgrade.inc Actual tests for upgrade.t @@ -1394,6 +1467,8 @@ cpan/Math-BigInt/t/use_lib1.t Test combinations of Math::BigInt and BigFloat cpan/Math-BigInt/t/use_lib2.t Test combinations of Math::BigInt and BigFloat cpan/Math-BigInt/t/use_lib3.t Test combinations of Math::BigInt and BigFloat cpan/Math-BigInt/t/use_lib4.t Test combinations of Math::BigInt and BigFloat +cpan/Math-BigInt/t/use_lib5.t +cpan/Math-BigInt/t/use_lib6.t cpan/Math-BigInt/t/use_mbfw.t use BigFloat w/ with and lib at the same time cpan/Math-BigInt/t/with_sub.t Test use Math::BigFloat with => package cpan/Math-BigInt-FastCalc/FastCalc.xs Math::BigInt::FastCalc extension @@ -1405,6 +1480,7 @@ cpan/Math-BigInt-FastCalc/t/bootstrap.t Math::BigInt::FastCalc extension cpan/Math-BigInt-FastCalc/t/leak.t test for memory leaks in Math::BigInt::FastCalc cpan/Math-BigInt-FastCalc/t/mbi_rand.t Math::BigInt::FastCalc extension cpan/Math-BigRat/lib/Math/BigRat.pm Math::BigRat +cpan/Math-BigRat/t/badd-mbr.t cpan/Math-BigRat/t/big_ap.t Math::BigRat test cpan/Math-BigRat/t/bigfltpm.inc Math::BigRat test cpan/Math-BigRat/t/bigfltrt.t Math::BigRat test @@ -1412,9 +1488,16 @@ cpan/Math-BigRat/t/bigrat.t Math::BigRat test cpan/Math-BigRat/t/bigratpm.inc Math::BigRat test cpan/Math-BigRat/t/bigratpm.t Math::BigRat test cpan/Math-BigRat/t/bigratup.t test under $Math::BigInt::upgrade +cpan/Math-BigRat/t/binv-mbr.t cpan/Math-BigRat/t/bitwise.t Math::BigRat test +cpan/Math-BigRat/t/bnok-mbr.t +cpan/Math-BigRat/t/const-mbr.t +cpan/Math-BigRat/t/downgrade.t +cpan/Math-BigRat/t/dparts-mbr.t +cpan/Math-BigRat/t/fparts-mbr.t cpan/Math-BigRat/t/hang.t Math::BigRat test for bug #34584 - hang in exp() cpan/Math-BigRat/t/Math/BigRat/Test.pm Math::BigRat test helper +cpan/Math-BigRat/t/new-mbr.t cpan/Math-BigRat/t/requirer.t see if require works properly cpan/Math-BigRat/t/rt121139.t cpan/Math-BigRat/t/trap.t see if trap_nan and trap_inf work @@ -1450,10 +1533,11 @@ cpan/Memoize/t/tie_sdbm.t Memoize SDBM interface test cpan/Memoize/t/tie_storable.t Memoize Storable interface test cpan/Memoize/t/tiefeatures.t Memoize FAULT / MERGE / HASH options test cpan/Memoize/t/unmemoize.t Memoize 'unmemoize' function test -cpan/MIME-Base64/Base64.pm MIME::Base64 extension cpan/MIME-Base64/Base64.xs MIME::Base64 extension -cpan/MIME-Base64/QuotedPrint.pm MIME::Base64 extension +cpan/MIME-Base64/lib/MIME/Base64.pm +cpan/MIME-Base64/lib/MIME/QuotedPrint.pm cpan/MIME-Base64/t/base64.t See whether MIME::Base64 works +cpan/MIME-Base64/t/base64url.t cpan/MIME-Base64/t/length.t See whether MIME::QuotedPrint works cpan/MIME-Base64/t/quoted-print.t See whether MIME::QuotedPrint works cpan/MIME-Base64/t/unicode.t See whether MIME::Base64 works @@ -1506,16 +1590,6 @@ cpan/NEXT/t/dynamically_scoped_regex_vars.t NEXT cpan/NEXT/t/next.t NEXT cpan/NEXT/t/stringify.t NEXT cpan/NEXT/t/unseen.t NEXT -cpan/OpenBSD-MkTemp/lib/OpenBSD/MkTemp.pm OpenBSD::MkTemp -cpan/OpenBSD-MkTemp/MkTemp.xs OpenBSD::MkTemp -cpan/OpenBSD-MkTemp/README OpenBSD::MkTemp Readme -cpan/OpenBSD-MkTemp/t/OpenBSD-MkTemp.t OpenBSD::MkTemp test file -cpan/OpenBSD-Pledge/lib/OpenBSD/Pledge.pm OpenBSD::Pledge -cpan/OpenBSD-Pledge/Pledge.xs OpenBSD::Pledge -cpan/OpenBSD-Pledge/t/OpenBSD-Pledge.t OpenBSD::Pledge test file -cpan/OpenBSD-Unveil/lib/OpenBSD/Unveil.pm OpenBSD::Unveil -cpan/OpenBSD-Unveil/t/OpenBSD-Unveil.t OpenBSD::Unveil test file -cpan/OpenBSD-Unveil/Unveil.xs OpenBSD::Unveil cpan/Params-Check/lib/Params/Check.pm Params::Check cpan/Params-Check/t/01_Params-Check.t Params::Check tests cpan/parent/lib/parent.pm Establish an ISA relationship with base classes at compile time @@ -1547,6 +1621,10 @@ cpan/perlfaq/lib/perlfaq8.pod System Interaction cpan/perlfaq/lib/perlfaq9.pod Networking cpan/perlfaq/lib/perlglossary.pod Perl Glossary cpan/PerlIO-via-QuotedPrint/lib/PerlIO/via/QuotedPrint.pm PerlIO::via::QuotedPrint +cpan/PerlIO-via-QuotedPrint/t/changes.t +cpan/PerlIO-via-QuotedPrint/t/critic.t +cpan/PerlIO-via-QuotedPrint/t/pod.t +cpan/PerlIO-via-QuotedPrint/t/pod_coverage.t cpan/PerlIO-via-QuotedPrint/t/QuotedPrint.t PerlIO::via::QuotedPrint cpan/Pod-Checker/lib/Pod/Checker.pm cpan/Pod-Checker/scripts/podchecker.PL @@ -1557,6 +1635,7 @@ cpan/Pod-Checker/t/pod/podchkenc.xr cpan/Pod-Checker/t/pod/podchklink.t cpan/Pod-Checker/t/pod/poderrs.t cpan/Pod-Checker/t/pod/poderrs.xr +cpan/Pod-Checker/t/pod/podname.t cpan/Pod-Checker/t/pod/selfcheck.t cpan/Pod-Checker/t/pod/testcmp.pl cpan/Pod-Checker/t/pod/testpchk.pl @@ -1732,6 +1811,7 @@ cpan/Pod-Simple/t/junk2o.txt Pod::Simple test file cpan/Pod-Simple/t/JustPod01.t cpan/Pod-Simple/t/JustPod02.t cpan/Pod-Simple/t/JustPod_corpus.t +cpan/Pod-Simple/t/lib/helpers.pm Pod::Simple test file cpan/Pod-Simple/t/linkclas.t Pod::Simple test file cpan/Pod-Simple/t/output.t Pod::Simple test file cpan/Pod-Simple/t/perlcyg.pod Pod::Simple test file @@ -1970,6 +2050,7 @@ cpan/Scalar-List-Utils/t/isvstring.t Scalar::Util cpan/Scalar-List-Utils/t/lln.t Scalar::Util cpan/Scalar-List-Utils/t/max.t List::Util cpan/Scalar-List-Utils/t/maxstr.t List::Util +cpan/Scalar-List-Utils/t/mesh.t cpan/Scalar-List-Utils/t/min.t List::Util cpan/Scalar-List-Utils/t/minstr.t List::Util cpan/Scalar-List-Utils/t/openhan.t Scalar::Util @@ -1990,9 +2071,11 @@ cpan/Scalar-List-Utils/t/subname.t cpan/Scalar-List-Utils/t/sum.t List::Util cpan/Scalar-List-Utils/t/sum0.t cpan/Scalar-List-Utils/t/tainted.t Scalar::Util +cpan/Scalar-List-Utils/t/undefined-block.t cpan/Scalar-List-Utils/t/uniq.t Scalar::Util cpan/Scalar-List-Utils/t/uniqnum.t cpan/Scalar-List-Utils/t/weak.t Scalar::Util +cpan/Scalar-List-Utils/t/zip.t cpan/Socket/Makefile.PL Socket extension makefile writer cpan/Socket/Socket.pm Socket extension Perl module cpan/Socket/Socket.xs Socket extension external subroutines @@ -2038,17 +2121,6 @@ cpan/Term-ANSIColor/t/module/true-color.t cpan/Term-ANSIColor/t/taint/basic.t cpan/Term-Cap/Cap.pm Perl module supporting termcap usage cpan/Term-Cap/test.pl See if Term::Cap works -cpan/Term-ReadKey/Changes Term::ReadKey -cpan/Term-ReadKey/Configure.pm Term::ReadKey -cpan/Term-ReadKey/example/test.pl Term::ReadKey -cpan/Term-ReadKey/genchars.pl Term::ReadKey -cpan/Term-ReadKey/Makefile.PL Term::ReadKey -cpan/Term-ReadKey/ppport.h Term::ReadKey -cpan/Term-ReadKey/ReadKey.xs Term::ReadKey -cpan/Term-ReadKey/ReadKey.pm.PL Term::ReadKey -cpan/Term-ReadKey/README Term::ReadKey -cpan/Term-ReadKey/t/01_basic.t Term::ReadKey -cpan/Term-ReadKey/t/02_terminal_functions.t Term::ReadKey cpan/Test-Harness/bin/prove The prove harness utility cpan/Test-Harness/lib/App/Prove.pm Gubbins for the prove utility cpan/Test-Harness/lib/App/Prove/State.pm Gubbins for the prove utility @@ -2273,6 +2345,11 @@ cpan/Test-Simple/lib/Test2/API.pm cpan/Test-Simple/lib/Test2/API/Breakage.pm cpan/Test-Simple/lib/Test2/API/Context.pm cpan/Test-Simple/lib/Test2/API/Instance.pm +cpan/Test-Simple/lib/Test2/API/InterceptResult.pm +cpan/Test-Simple/lib/Test2/API/InterceptResult/Event.pm +cpan/Test-Simple/lib/Test2/API/InterceptResult/Facet.pm +cpan/Test-Simple/lib/Test2/API/InterceptResult/Hub.pm +cpan/Test-Simple/lib/Test2/API/InterceptResult/Squasher.pm cpan/Test-Simple/lib/Test2/API/Stack.pm cpan/Test-Simple/lib/Test2/Event.pm cpan/Test-Simple/lib/Test2/Event/Bail.pm @@ -2405,6 +2482,8 @@ cpan/Test-Simple/t/Legacy/Regression/683_thread_todo.t cpan/Test-Simple/t/Legacy/Regression/6_cmp_ok.t cpan/Test-Simple/t/Legacy/Regression/736_use_ok.t cpan/Test-Simple/t/Legacy/Regression/789-read-only.t +cpan/Test-Simple/t/Legacy/Regression/870-experimental-warnings.t +cpan/Test-Simple/t/Legacy/Regression/is_capture.t cpan/Test-Simple/t/Legacy/require_ok.t cpan/Test-Simple/t/Legacy/run_test.t cpan/Test-Simple/t/Legacy/simple.t @@ -2490,12 +2569,14 @@ cpan/Test-Simple/t/regression/721-nested-streamed-subtest.t cpan/Test-Simple/t/regression/757-reset_in_subtest.t cpan/Test-Simple/t/regression/812-todo.t cpan/Test-Simple/t/regression/817-subtest-todo.t +cpan/Test-Simple/t/regression/862-intercept_tb_todo.t cpan/Test-Simple/t/regression/buffered_subtest_plan_buffered.t cpan/Test-Simple/t/regression/builder_does_not_init.t cpan/Test-Simple/t/regression/errors_facet.t cpan/Test-Simple/t/regression/fork_first.t cpan/Test-Simple/t/regression/inherit_trace.t cpan/Test-Simple/t/regression/no_name_in_subtest.t +cpan/Test-Simple/t/regression/skip_reason_object_ipc.t cpan/Test-Simple/t/regression/todo_and_facets.t cpan/Test-Simple/t/Test2/acceptance/try_it_done_testing.t cpan/Test-Simple/t/Test2/acceptance/try_it_fork.t @@ -2531,6 +2612,9 @@ cpan/Test-Simple/t/Test2/modules/API.t cpan/Test-Simple/t/Test2/modules/API/Breakage.t cpan/Test-Simple/t/Test2/modules/API/Context.t cpan/Test-Simple/t/Test2/modules/API/Instance.t +cpan/Test-Simple/t/Test2/modules/API/InterceptResult.t +cpan/Test-Simple/t/Test2/modules/API/InterceptResult/Event.t +cpan/Test-Simple/t/Test2/modules/API/InterceptResult/Squasher.t cpan/Test-Simple/t/Test2/modules/API/Stack.t cpan/Test-Simple/t/Test2/modules/Event.t cpan/Test-Simple/t/Test2/modules/Event/Bail.t @@ -2586,6 +2670,11 @@ cpan/Text-Balanced/t/06_extqlk.t See if Text::Balanced works cpan/Text-Balanced/t/07_exttag.t See if Text::Balanced works cpan/Text-Balanced/t/08_extvar.t See if Text::Balanced works cpan/Text-Balanced/t/09_gentag.t See if Text::Balanced works +cpan/Text-Balanced/t/94_changes.t +cpan/Text-Balanced/t/95_critic.t +cpan/Text-Balanced/t/96_pmv.t +cpan/Text-Balanced/t/97_pod.t +cpan/Text-Balanced/t/98_pod_coverage.t cpan/Text-ParseWords/lib/Text/ParseWords.pm Perl module to split words on arbitrary delimiter cpan/Text-ParseWords/t/ParseWords.t See if Text::ParseWords works cpan/Text-ParseWords/t/taint.t See if Text::ParseWords works with tainting @@ -2600,10 +2689,12 @@ cpan/Text-Tabs/t/fill.t See if Text::Wrap::fill works cpan/Text-Tabs/t/Jacobson.t See if Text::Tabs is working cpan/Text-Tabs/t/Jacobson2.t See if Text::Tabs is working cpan/Text-Tabs/t/Jochen.t See if Text::Tabs is working +cpan/Text-Tabs/t/lib/ok.pl cpan/Text-Tabs/t/sep.t See if Text::Tabs is working cpan/Text-Tabs/t/sep2.t See if Text::Tabs is working cpan/Text-Tabs/t/tabs.t See if Text::Tabs works cpan/Text-Tabs/t/Tabs-ElCid.t See if Text::Tabs works +cpan/Text-Tabs/t/undef.t cpan/Text-Tabs/t/wrap.t See if Text::Wrap::wrap works cpan/Text-Tabs/t/Wrap-JLB.t See if Text::Wrap::wrap works cpan/Text-Tabs/t/wrap_separator2.t See if Text::Wrap::wrap works @@ -2753,6 +2844,7 @@ cpan/Unicode-Collate/t/ignor.t Unicode::Collate cpan/Unicode-Collate/t/illegal.t Unicode::Collate cpan/Unicode-Collate/t/illegalp.t Unicode::Collate cpan/Unicode-Collate/t/index.t Unicode::Collate +cpan/Unicode-Collate/t/khitan.t Unicode::Collate cpan/Unicode-Collate/t/loc_af.t Unicode::Collate cpan/Unicode-Collate/t/loc_ar.t Unicode::Collate cpan/Unicode-Collate/t/loc_as.t Unicode::Collate @@ -2901,6 +2993,7 @@ cpan/Win32/t/GetOSVersion.t See if Win32 extension works cpan/Win32/t/GetShortPathName.t See if Win32 extension works cpan/Win32/t/GuidGen.t See if Win32 extension works cpan/Win32/t/Names.t See if Win32 extension works +cpan/Win32/t/Privileges.t cpan/Win32/t/Unicode.t See if Win32 extension works cpan/Win32/Win32.pm Win32 extension Perl module cpan/Win32/Win32.xs Win32 extension external subroutines @@ -2948,6 +3041,7 @@ dist/Attribute-Handlers/demo/demo_rawdata.pl Attribute::Handlers demo dist/Attribute-Handlers/demo/Descriptions.pm Attribute::Handlers demo dist/Attribute-Handlers/demo/MyClass.pm Attribute::Handlers demo dist/Attribute-Handlers/lib/Attribute/Handlers.pm Attribute::Handlers +dist/Attribute-Handlers/t/caller.t See if Attribute::Handlers works dist/Attribute-Handlers/t/constants.t Test constants and Attribute::Handlers dist/Attribute-Handlers/t/data_convert.t Test attribute data conversion dist/Attribute-Handlers/t/linerep.t See if Attribute::Handlers works @@ -3008,6 +3102,7 @@ dist/constant/t/utf8.t Test Unicode constants under utf8 pragma dist/Data-Dumper/Changes Data pretty printer, changelog dist/Data-Dumper/Dumper.pm Data pretty printer, module dist/Data-Dumper/Dumper.xs Data pretty printer, externals +dist/Data-Dumper/Makefile.PL Data pretty printer, makefile writer dist/Data-Dumper/t/bless.t See if Data::Dumper works dist/Data-Dumper/t/bless_var_method.t See if Data::Dumper::Bless works dist/Data-Dumper/t/bugs.t See if Data::Dumper works @@ -3046,7 +3141,7 @@ dist/Devel-PPPort/devel/mktodo Devel::PPPort baseline/todo generator dist/Devel-PPPort/devel/mktodo.pl Devel::PPPort baseline/todo generator dist/Devel-PPPort/devel/regenerate Devel::PPPort API re-generator dist/Devel-PPPort/devel/scanprov Devel::PPPort provided API scanner -dist/Devel-PPPort/devel/update_release_date.pl +dist/Devel-PPPort/devel/update_release_date.pl Devel::PPPort timestamp builder dist/Devel-PPPort/HACKERS Devel::PPPort hackers documentation dist/Devel-PPPort/Makefile.PL Devel::PPPort makefile writer dist/Devel-PPPort/MANIFEST.SKIP Devel::PPPort manifest skip file @@ -3231,8 +3326,8 @@ dist/Devel-PPPort/parts/base/5027010 Devel::PPPort baseline todo file dist/Devel-PPPort/parts/base/5027011 Devel::PPPort baseline todo file dist/Devel-PPPort/parts/base/5028000 Devel::PPPort baseline todo file dist/Devel-PPPort/parts/base/5028001 Devel::PPPort baseline todo file -dist/Devel-PPPort/parts/base/5028002 -dist/Devel-PPPort/parts/base/5028003 +dist/Devel-PPPort/parts/base/5028002 Devel::PPPort baseline todo file +dist/Devel-PPPort/parts/base/5028003 Devel::PPPort baseline todo file dist/Devel-PPPort/parts/base/5029000 Devel::PPPort baseline todo file dist/Devel-PPPort/parts/base/5029001 Devel::PPPort baseline todo file dist/Devel-PPPort/parts/base/5029002 Devel::PPPort baseline todo file @@ -3245,10 +3340,10 @@ dist/Devel-PPPort/parts/base/5029008 Devel::PPPort baseline todo file dist/Devel-PPPort/parts/base/5029009 Devel::PPPort baseline todo file dist/Devel-PPPort/parts/base/5029010 Devel::PPPort baseline todo file dist/Devel-PPPort/parts/base/5030000 Devel::PPPort baseline todo file -dist/Devel-PPPort/parts/base/5030001 -dist/Devel-PPPort/parts/base/5030002 -dist/Devel-PPPort/parts/base/5030003 -dist/Devel-PPPort/parts/base/5031000 +dist/Devel-PPPort/parts/base/5030001 Devel::PPPort baseline todo file +dist/Devel-PPPort/parts/base/5030002 Devel::PPPort baseline todo file +dist/Devel-PPPort/parts/base/5030003 Devel::PPPort baseline todo file +dist/Devel-PPPort/parts/base/5031000 Devel::PPPort baseline todo file dist/Devel-PPPort/parts/base/5031001 Devel::PPPort baseline todo file dist/Devel-PPPort/parts/base/5031002 Devel::PPPort baseline todo file dist/Devel-PPPort/parts/base/5031003 Devel::PPPort baseline todo file @@ -3257,14 +3352,14 @@ dist/Devel-PPPort/parts/base/5031005 Devel::PPPort baseline todo file dist/Devel-PPPort/parts/base/5031006 Devel::PPPort baseline todo file dist/Devel-PPPort/parts/base/5031007 Devel::PPPort baseline todo file dist/Devel-PPPort/parts/base/5031008 -dist/Devel-PPPort/parts/base/5031009 -dist/Devel-PPPort/parts/base/5031010 -dist/Devel-PPPort/parts/base/5031011 -dist/Devel-PPPort/parts/base/5032000 +dist/Devel-PPPort/parts/base/5031009 Devel::PPPort baseline todo file +dist/Devel-PPPort/parts/base/5031010 Devel::PPPort baseline todo file +dist/Devel-PPPort/parts/base/5031011 Devel::PPPort baseline todo file +dist/Devel-PPPort/parts/base/5032000 Devel::PPPort baseline todo file dist/Devel-PPPort/parts/base/5032001 -dist/Devel-PPPort/parts/base/5033000 -dist/Devel-PPPort/parts/base/5033001 -dist/Devel-PPPort/parts/base/5033002 +dist/Devel-PPPort/parts/base/5033000 Devel::PPPort baseline todo file +dist/Devel-PPPort/parts/base/5033001 Devel::PPPort baseline todo file +dist/Devel-PPPort/parts/base/5033002 Devel::PPPort baseline todo file dist/Devel-PPPort/parts/base/5033003 dist/Devel-PPPort/parts/base/5033004 dist/Devel-PPPort/parts/base/5033005 @@ -3505,8 +3600,8 @@ dist/Devel-PPPort/parts/todo/5027010 Devel::PPPort baseline todo file dist/Devel-PPPort/parts/todo/5027011 Devel::PPPort baseline todo file dist/Devel-PPPort/parts/todo/5028000 Devel::PPPort baseline todo file dist/Devel-PPPort/parts/todo/5028001 Devel::PPPort baseline todo file -dist/Devel-PPPort/parts/todo/5028002 -dist/Devel-PPPort/parts/todo/5028003 +dist/Devel-PPPort/parts/todo/5028002 Devel::PPPort todo file +dist/Devel-PPPort/parts/todo/5028003 Devel::PPPort todo file dist/Devel-PPPort/parts/todo/5029000 Devel::PPPort baseline todo file dist/Devel-PPPort/parts/todo/5029001 Devel::PPPort baseline todo file dist/Devel-PPPort/parts/todo/5029002 Devel::PPPort baseline todo file @@ -3519,10 +3614,10 @@ dist/Devel-PPPort/parts/todo/5029008 Devel::PPPort baseline todo file dist/Devel-PPPort/parts/todo/5029009 Devel::PPPort baseline todo file dist/Devel-PPPort/parts/todo/5029010 Devel::PPPort baseline todo file dist/Devel-PPPort/parts/todo/5030000 Devel::PPPort baseline todo file -dist/Devel-PPPort/parts/todo/5030001 -dist/Devel-PPPort/parts/todo/5030002 -dist/Devel-PPPort/parts/todo/5030003 -dist/Devel-PPPort/parts/todo/5031000 +dist/Devel-PPPort/parts/todo/5030001 Devel::PPPort todo file +dist/Devel-PPPort/parts/todo/5030002 Devel::PPPort todo file +dist/Devel-PPPort/parts/todo/5030003 Devel::PPPort todo file +dist/Devel-PPPort/parts/todo/5031000 Devel::PPPort todo file dist/Devel-PPPort/parts/todo/5031001 Devel::PPPort baseline todo file dist/Devel-PPPort/parts/todo/5031002 Devel::PPPort baseline todo file dist/Devel-PPPort/parts/todo/5031003 Devel::PPPort baseline todo file @@ -3531,14 +3626,14 @@ dist/Devel-PPPort/parts/todo/5031005 Devel::PPPort baseline todo file dist/Devel-PPPort/parts/todo/5031006 Devel::PPPort baseline todo file dist/Devel-PPPort/parts/todo/5031007 Devel::PPPort baseline todo file dist/Devel-PPPort/parts/todo/5031008 -dist/Devel-PPPort/parts/todo/5031009 -dist/Devel-PPPort/parts/todo/5031010 -dist/Devel-PPPort/parts/todo/5031011 -dist/Devel-PPPort/parts/todo/5032000 +dist/Devel-PPPort/parts/todo/5031009 Devel::PPPort todo file +dist/Devel-PPPort/parts/todo/5031010 Devel::PPPort todo file +dist/Devel-PPPort/parts/todo/5031011 Devel::PPPort todo file +dist/Devel-PPPort/parts/todo/5032000 Devel::PPPort todo file dist/Devel-PPPort/parts/todo/5032001 -dist/Devel-PPPort/parts/todo/5033000 -dist/Devel-PPPort/parts/todo/5033001 -dist/Devel-PPPort/parts/todo/5033002 +dist/Devel-PPPort/parts/todo/5033000 Devel::PPPort todo file +dist/Devel-PPPort/parts/todo/5033001 Devel::PPPort todo file +dist/Devel-PPPort/parts/todo/5033002 Devel::PPPort todo file dist/Devel-PPPort/parts/todo/5033003 dist/Devel-PPPort/parts/todo/5033004 dist/Devel-PPPort/parts/todo/5033005 @@ -3562,44 +3657,7 @@ dist/Devel-PPPort/ppport_h.PL Devel::PPPort ppport.h writer dist/Devel-PPPort/PPPort_pm.PL Devel::PPPort PPPort.pm writer dist/Devel-PPPort/RealPPPort_xs.PL Devel::PPPort RealPPPort.xs writer dist/Devel-PPPort/soak Devel::PPPort Test Harness to run under various Perls -dist/Devel-PPPort/t/01_test.t Devel::PPPort test file -dist/Devel-PPPort/t/call.t Devel::PPPort test file -dist/Devel-PPPort/t/cop.t Devel::PPPort test file -dist/Devel-PPPort/t/exception.t Devel::PPPort test file -dist/Devel-PPPort/t/format.t Devel::PPPort test file -dist/Devel-PPPort/t/grok.t Devel::PPPort test file -dist/Devel-PPPort/t/gv.t Devel::PPPort test file -dist/Devel-PPPort/t/HvNAME.t Devel::PPPort test file -dist/Devel-PPPort/t/limits.t Devel::PPPort test file -dist/Devel-PPPort/t/locale.t -dist/Devel-PPPort/t/magic.t Devel::PPPort test file -dist/Devel-PPPort/t/memory.t Devel::PPPort test file -dist/Devel-PPPort/t/mess.t Devel::PPPort test file -dist/Devel-PPPort/t/misc.t Devel::PPPort test file -dist/Devel-PPPort/t/mPUSH.t Devel::PPPort test file -dist/Devel-PPPort/t/MY_CXT.t Devel::PPPort test file -dist/Devel-PPPort/t/newCONSTSUB.t Devel::PPPort test file -dist/Devel-PPPort/t/newRV.t Devel::PPPort test file -dist/Devel-PPPort/t/newSV_type.t Devel::PPPort test file -dist/Devel-PPPort/t/newSVpv.t Devel::PPPort test file -dist/Devel-PPPort/t/podtest.t Devel::PPPort test file -dist/Devel-PPPort/t/ppphtest.t Devel::PPPort test file -dist/Devel-PPPort/t/pv_tools.t Devel::PPPort test file -dist/Devel-PPPort/t/pvs.t Devel::PPPort test file -dist/Devel-PPPort/t/shared_pv.t Devel::PPPort test file -dist/Devel-PPPort/t/snprintf.t Devel::PPPort test file -dist/Devel-PPPort/t/sprintf.t Devel::PPPort test file -dist/Devel-PPPort/t/strlfuncs.t Devel::PPPort test file -dist/Devel-PPPort/t/Sv_set.t Devel::PPPort test file -dist/Devel-PPPort/t/sv_xpvf.t Devel::PPPort test file -dist/Devel-PPPort/t/SvPV.t Devel::PPPort test file -dist/Devel-PPPort/t/SvREFCNT.t Devel::PPPort test file -dist/Devel-PPPort/t/testutil.pl Devel::PPPort test utilities -dist/Devel-PPPort/t/threads.t Devel::PPPort test file -dist/Devel-PPPort/t/utf8.t -dist/Devel-PPPort/t/uv.t Devel::PPPort test file -dist/Devel-PPPort/t/variables.t Devel::PPPort test file -dist/Devel-PPPort/t/warn.t Devel::PPPort test file +dist/Devel-PPPort/t/testutil.pl Devel::PPPort test utilities dist/Devel-PPPort/TODO Devel::PPPort developer notes dist/Devel-PPPort/typemap Devel::PPPort Typemap dist/Devel-SelfStubber/lib/Devel/SelfStubber.pm Generate stubs for SelfLoader.pm @@ -3702,6 +3760,7 @@ dist/ExtUtils-ParseXS/t/lib/PrimitiveCapture.pm Primitive STDOUT/ERR capturing dist/ExtUtils-ParseXS/t/lib/TypemapTest/Foo.pm ExtUtils::Typemaps tests dist/ExtUtils-ParseXS/t/pseudotypemap1 A test-typemap dist/ExtUtils-ParseXS/t/typemap Standard typemap for controlled testing +dist/ExtUtils-ParseXS/t/XSBroken.xs Test file for ExtUtils::ParseXS tests dist/ExtUtils-ParseXS/t/XSInclude.xsh Test file for ExtUtils::ParseXS tests dist/ExtUtils-ParseXS/t/XSMore.xs Test file for ExtUtils::ParseXS tests dist/ExtUtils-ParseXS/t/XSTest.pm Test file for ExtUtils::ParseXS tests @@ -3782,6 +3841,7 @@ dist/IO/t/io_pipe.t See if pipe()-related methods from IO work dist/IO/t/io_poll.t See if poll()-related methods from IO work dist/IO/t/io_sel.t See if select()-related methods from IO work dist/IO/t/io_sock.t See if INET socket-related methods from IO work +dist/IO/t/io_sock_errstr.t See if socket constructors put error string in the right place dist/IO/t/io_taint.t See if the untaint method from IO works dist/IO/t/io_tell.t See if seek()/tell()-related methods from IO work dist/IO/t/io_udp.t See if UDP socket-related methods from IO work @@ -3814,6 +3874,8 @@ dist/Locale-Maketext/t/90_utf8.t See if Locale::Maketext works dist/Locale-Maketext/t/91_backslash.t See if Locale::Maketext works dist/Locale-Maketext/t/92_blacklist.t See if Locale::Maketext works dist/Locale-Maketext/t/93_whitelist.t See if Locale::Maketext works +dist/Locale-Maketext/t/94_denylist.t See if Locale::Maketext works +dist/Locale-Maketext/t/95_allowlist.t See if Locale::Maketext works dist/Module-CoreList/Changes Module::CoreList Changes dist/Module-CoreList/corelist The corelist command-line utility dist/Module-CoreList/identify-dependencies A usage example for Module::CoreList @@ -4148,12 +4210,6 @@ dist/Unicode-Normalize/t/tie.t Unicode::Normalize dist/XSLoader/Makefile.PL Dynamic Loader makefile writer dist/XSLoader/t/XSLoader.t See if XSLoader works dist/XSLoader/XSLoader_pm.PL Simple XS Loader perl module -djgpp/config.over DOS/DJGPP port -djgpp/configure.bat DOS/DJGPP port -djgpp/djgpp.c DOS/DJGPP port -djgpp/djgpp.h DOS/DJGPP port -djgpp/djgppsed.sh DOS/DJGPP port -djgpp/fixpmain DOS/DJGPP port doio.c I/O operations doop.c Support code for various operations dosish.h Some defines for MS/DOSish machines @@ -4186,19 +4242,23 @@ ext/B/B/Showlex.pm Compiler Showlex backend ext/B/B/Terse.pm Compiler Terse backend ext/B/B/Xref.pm Compiler Xref backend ext/B/hints/darwin.pl Hints for named architecture +ext/B/hints/openbsd.pl Hints for named architecture ext/B/Makefile.PL Compiler backend makefile writer ext/B/O.pm Compiler front-end module (-MO=...) ext/B/t/b.t See if B works +ext/B/t/B/success.pm Test module for ext/B/t/o.t ext/B/t/concise.t See whether B::Concise works ext/B/t/concise-xs.t See whether B::Concise recognizes XS functions ext/B/t/f_map code from perldoc -f map ext/B/t/f_map.t converted to optreeCheck()s ext/B/t/f_sort optree test raw material ext/B/t/f_sort.t optree test raw material +ext/B/t/invlist.t test B::INVLIST ext/B/t/o.t See if O works ext/B/t/optree_check.t test OptreeCheck apparatus ext/B/t/optree_concise.t more B::Concise tests ext/B/t/optree_constants.t B::Concise rendering of optimized constant subs +ext/B/t/optree_for.t for loops ext/B/t/optree_misc.t misc optree tests ext/B/t/optree_samples.t various basic codes: if for while ext/B/t/optree_sort.t inplace sort optimization regression @@ -4225,7 +4285,6 @@ ext/DynaLoader/dl_dyld.xs NeXT/Apple dyld implementation ext/DynaLoader/dl_freemint.xs GNU dld style implementation for FreeMINT ext/DynaLoader/dl_hpux.xs HP-UX implementation ext/DynaLoader/dl_none.xs Stub implementation -ext/DynaLoader/dl_symbian.xs Symbian implementation ext/DynaLoader/dl_vms.xs VMS implementation ext/DynaLoader/dl_win32.xs Win32 implementation ext/DynaLoader/dlutils.c Dynamic loader utilities for dl_*.xs files @@ -4285,8 +4344,12 @@ ext/GDBM_File/GDBM_File.pm GDBM extension Perl module ext/GDBM_File/GDBM_File.xs GDBM extension external subroutines ext/GDBM_File/hints/sco.pl Hint for GDBM_File for named architecture ext/GDBM_File/Makefile.PL GDBM extension makefile writer +ext/GDBM_File/t/count.t Test if the count method works +ext/GDBM_File/t/dump.t Test if export/import methods work ext/GDBM_File/t/fatal.t Test the fatal_func argument to gdbm_open ext/GDBM_File/t/gdbm.t See if GDBM_File works +ext/GDBM_File/t/opt.t Test if gdbm_setopt and derived methods work +ext/GDBM_File/t/snapshot.t Test if the latest_snapshot method works ext/GDBM_File/typemap GDBM extension interface types ext/Hash-Util/Changes Change history of Hash::Util ext/Hash-Util/lib/Hash/Util.pm Hash::Util @@ -4375,8 +4438,12 @@ ext/Pod-Functions/Functions_pm.PL Writes Functions.pm ext/Pod-Functions/Makefile.PL Makefile writer ext/Pod-Functions/t/Functions.t See if Pod::Functions works ext/Pod-Html/bin/pod2html Translator to turn pod into HTML +ext/Pod-Html/corpus/perlpodspec-copy.pod +ext/Pod-Html/corpus/perlvar-copy.pod ext/Pod-Html/lib/Pod/Html.pm Convert POD data to HTML +ext/Pod-Html/lib/Pod/Html/Util.pm Helper functions for Pod-Html ext/Pod-Html/t/anchorify.t +ext/Pod-Html/t/anchorify-536.t Test Pod-Html utility functions during perl-5.36 ext/Pod-Html/t/cache.pod ext/Pod-Html/t/cache.t ext/Pod-Html/t/crossref.pod @@ -4404,13 +4471,11 @@ ext/Pod-Html/t/htmllink.pod pod2html link test input data ext/Pod-Html/t/htmllink.t pod2html link test ext/Pod-Html/t/htmlview.pod pod2html render test input data ext/Pod-Html/t/htmlview.t pod2html render test -ext/Pod-Html/t/pod2html-lib.pl pod2html testing library +ext/Pod-Html/t/lib/Testing.pm Testing functions for Pod-Html ext/Pod-Html/t/poderr.pod ext/Pod-Html/t/poderr.t ext/Pod-Html/t/podnoerr.pod ext/Pod-Html/t/podnoerr.t -ext/Pod-Html/testdir/perlpodspec-copy.pod -ext/Pod-Html/testdir/perlvar-copy.pod ext/POSIX/hints/bsdos.pl Hint for POSIX for named architecture ext/POSIX/hints/dynixptx.pl Hint for POSIX for named architecture ext/POSIX/hints/freebsd.pl Hint for POSIX for named architecture @@ -4427,7 +4492,9 @@ ext/POSIX/lib/POSIX.pod POSIX extension documentation ext/POSIX/Makefile.PL POSIX extension makefile writer ext/POSIX/POSIX.xs POSIX extension external subroutines ext/POSIX/t/export.t Test @EXPORT and @EXPORT_OK +ext/POSIX/t/fenv.t Floating-point rounding mode tests for POSIX ext/POSIX/t/iscrash See if POSIX isxxx() crashes with threads on Win32 +ext/POSIX/t/iv_const.t See if integer constants of POSIX are IV ext/POSIX/t/math.t Basic math tests for POSIX ext/POSIX/t/mb.t Multibyte function tests for POSIX ext/POSIX/t/posix.t See if POSIX works @@ -4525,6 +4592,8 @@ ext/XS-APItest/t/Block.pm Helper for ./blockhooks.t ext/XS-APItest/t/blockasexpr.t test recursive descent block parsing ext/XS-APItest/t/blockhooks.t XS::APItest: tests for PL_blockhooks ext/XS-APItest/t/blockhooks-csc.t XS::APItest: more tests for PL_blockhooks +ext/XS-APItest/t/boolean.t test SvIsBOOL +ext/XS-APItest/t/boolean-thr.t test SvIsBOOL on threads ext/XS-APItest/t/bootstrap.t XS::APItest: test APItest.bs ext/XS-APItest/t/call.t Test calling perl from C ext/XS-APItest/t/call_checker.t test call checker plugin API @@ -4539,6 +4608,7 @@ ext/XS-APItest/t/copstash.t test alloccopstash ext/XS-APItest/t/copyhints.t test hv_copy_hints_hv() API ext/XS-APItest/t/customop.t XS::APItest: tests for custom ops ext/XS-APItest/t/cv_name.t test cv_name +ext/XS-APItest/t/delimcpy.t test delimcpy ext/XS-APItest/t/eval-filter.t Simple source filter/eval test ext/XS-APItest/t/exception.t XS::APItest extension ext/XS-APItest/t/extend.t test EXTEND() macro @@ -4585,6 +4655,7 @@ ext/XS-APItest/t/mro.t Test mro plugin api ext/XS-APItest/t/multicall.t XS::APItest: test MULTICALL macros ext/XS-APItest/t/my_cxt.t XS::APItest: test MY_CXT interface ext/XS-APItest/t/my_exit.t XS::APItest: test my_exit +ext/XS-APItest/t/my_strtod.t XS::APItest: test my_strtod ext/XS-APItest/t/newCONSTSUB.t XS::APItest: test newCONSTSUB(_flags) ext/XS-APItest/t/newDEFSVOP.t XS::APItest: test newDEFSVOP ext/XS-APItest/t/Null.pm Helper for ./blockhooks.t @@ -4611,6 +4682,8 @@ ext/XS-APItest/t/stuff_modify_bug.t test for eval side-effecting source string ext/XS-APItest/t/stuff_svcur_bug.t test for a bug in lex_stuff_pvn ext/XS-APItest/t/subcall.t Test XSUB calls ext/XS-APItest/t/subsignature.t Test parse_subsignature() +ext/XS-APItest/t/sv_numeq.t Test sv_numeq +ext/XS-APItest/t/sv_streq.t Test sv_streq ext/XS-APItest/t/svcat.t Test sv_catpvn ext/XS-APItest/t/svcatpvf.t Test sv_catpvf argument reordering ext/XS-APItest/t/sviscow.t Test SvIsCOW @@ -4659,7 +4732,6 @@ fakesdio.h stdio in terms of PerlIO feature.h Feature header form.h Public declarations for formats generate_uudmap.c Generate uudmap.h, the uuencode decoding map -git_version.h Pre-generated git_version.h for OpenBSD globals.c File to declare global symbols (for shared library) globvar.sym Global variables that need hiding when embedded gv.c Glob value code @@ -4698,7 +4770,6 @@ hints/cygwin.sh Hints for named architecture hints/darwin.sh Hints for named architecture hints/dcosx.sh Hints for named architecture hints/dec_osf.sh Hints for named architecture -hints/dos_djgpp.sh Hints for named architecture hints/dragonfly.sh Hints for named architecture hints/dynix.sh Hints for named architecture hints/dynixptx.sh Hints for named architecture @@ -4764,7 +4835,6 @@ hints/unicos.sh Hints for named architecture hints/unicosmk.sh Hints for named architecture hints/unisysdynix.sh Hints for named architecture hints/utekv.sh Hints for named architecture -hints/uwin.sh Hints for named architecture hints/vos.sh Hints for named architecture hv.c Hash value code hv.h Hash value header @@ -4795,6 +4865,8 @@ lib/Benchmark.pm Measure execution time lib/Benchmark.t See if Benchmark works lib/blib.pm For "use blib" lib/blib.t blib.pm test +lib/builtin.pm builtin function namespace +lib/builtin.t test builtin function namespace lib/bytes.pm Pragma to enable byte operations lib/bytes.t bytes.pm test lib/bytes_heavy.pl Support routines for byte pragma @@ -4805,7 +4877,6 @@ lib/Class/Struct.t See if Class::Struct works lib/Config.t See if Config works lib/Config/Extensions.pm Convenient hash lookup for built extensions lib/Config/Extensions.t See if Config::Extensions works -lib/Config_git.pl Pre-generated Config_git.pl for OpenBSD lib/CORE.pod document the CORE namespace lib/DB.pm Debugger API (draft) lib/DB.t See if DB works @@ -4895,6 +4966,8 @@ lib/perl5db/t/eval-line-bug Tests for the Perl debugger lib/perl5db/t/fact Tests for the Perl debugger lib/perl5db/t/filename-line-breakpoint Tests for the Perl debugger lib/perl5db/t/gh-17660 Tests for the Perl debugger +lib/perl5db/t/gh-17661 Tests for the Perl debugger +lib/perl5db/t/gh-17661b Tests for the Perl debugger lib/perl5db/t/load-modules Tests for the Perl debugger lib/perl5db/t/lsub-n Test script used by perl5db.t lib/perl5db/t/lvalue-bug Tests for the Perl debugger @@ -4913,6 +4986,7 @@ lib/perl5db/t/symbol-table-bug Tests for the Perl debugger lib/perl5db/t/taint Tests for the Perl debugger lib/perl5db/t/test-a-statement-1 Tests for the Perl debugger lib/perl5db/t/test-a-statement-2 Tests for the Perl debugger +lib/perl5db/t/test-a-statement-3 Tests for the Perl debugger lib/perl5db/t/test-dieLevel-option-1 Tests for the Perl debugger lib/perl5db/t/test-frame-option-1 Tests for the Perl debugger lib/perl5db/t/test-l-statement-1 Tests for the Perl debugger @@ -4967,608 +5041,65 @@ lib/Unicode/README Explanation what happened to lib/unicode. lib/Unicode/UCD.pm Unicode character database lib/Unicode/UCD.t See if Unicode character database works lib/unicore/ArabicShaping.txt Unicode character database -lib/unicore/auxiliary/GCBTest.txt Unicode character database -lib/unicore/auxiliary/GraphemeBreakProperty.txt Unicode character database -lib/unicore/auxiliary/LBTest.txt Unicode character database -lib/unicore/auxiliary/SBTest.txt Unicode character database -lib/unicore/auxiliary/SentenceBreakProperty.txt Unicode character database -lib/unicore/auxiliary/WBTest.txt Unicode character database -lib/unicore/auxiliary/WordBreakProperty.txt Unicode character database +lib/unicore/auxiliary/GCBTest.txt Unicode character database +lib/unicore/auxiliary/GraphemeBreakProperty.txt Unicode character database +lib/unicore/auxiliary/LBTest.txt Unicode character database +lib/unicore/auxiliary/SBTest.txt Unicode character database +lib/unicore/auxiliary/SentenceBreakProperty.txt Unicode character database +lib/unicore/auxiliary/WBTest.txt Unicode character database +lib/unicore/auxiliary/WordBreakProperty.txt Unicode character database lib/unicore/BidiBrackets.txt Unicode character database lib/unicore/BidiMirroring.txt Unicode character database lib/unicore/Blocks.txt Unicode character database lib/unicore/CaseFolding.txt Unicode character database lib/unicore/CJKRadicals.txt Unicode character database -lib/unicore/CombiningClass.pl Unicode character database -lib/unicore/CompositionExclusions.txt Unicode character database +lib/unicore/CompositionExclusions.txt Unicode character database lib/unicore/DAge.txt Unicode character database lib/unicore/DCoreProperties.txt Unicode character database -lib/unicore/Decomposition.pl Unicode character database -lib/unicore/DNormalizationProps.txt Unicode character database +lib/unicore/DNormalizationProps.txt Unicode character database lib/unicore/EastAsianWidth.txt Unicode character database lib/unicore/emoji/emoji.txt Unicode character database lib/unicore/EmojiSources.txt Unicode character database -lib/unicore/EquivalentUnifiedIdeograph.txt Unicode character database -lib/unicore/extracted/DBidiClass.txt Unicode character database -lib/unicore/extracted/DBinaryProperties.txt Unicode character database -lib/unicore/extracted/DCombiningClass.txt Unicode character database -lib/unicore/extracted/DDecompositionType.txt Unicode character database -lib/unicore/extracted/DEastAsianWidth.txt Unicode character database -lib/unicore/extracted/DGeneralCategory.txt Unicode character database -lib/unicore/extracted/DJoinGroup.txt Unicode character database -lib/unicore/extracted/DJoinType.txt Unicode character database -lib/unicore/extracted/DLineBreak.txt Unicode character database -lib/unicore/extracted/DNumType.txt Unicode character database -lib/unicore/extracted/DNumValues.txt Unicode character database -lib/unicore/HangulSyllableType.txt Unicode character database +lib/unicore/EquivalentUnifiedIdeograph.txt Unicode character database +lib/unicore/extracted/DBidiClass.txt Unicode character database +lib/unicore/extracted/DBinaryProperties.txt Unicode character database +lib/unicore/extracted/DCombiningClass.txt Unicode character database +lib/unicore/extracted/DDecompositionType.txt Unicode character database +lib/unicore/extracted/DEastAsianWidth.txt Unicode character database +lib/unicore/extracted/DGeneralCategory.txt Unicode character database +lib/unicore/extracted/DJoinGroup.txt Unicode character database +lib/unicore/extracted/DJoinType.txt Unicode character database +lib/unicore/extracted/DLineBreak.txt Unicode character database +lib/unicore/extracted/DNumType.txt Unicode character database +lib/unicore/extracted/DNumValues.txt Unicode character database +lib/unicore/HangulSyllableType.txt Unicode character database lib/unicore/IdStatus.txt Unicode UTS 39 database lib/unicore/IdType.txt Unicode UTS 39 database lib/unicore/Index.txt Unicode character database -lib/unicore/IndicPositionalCategory.txt Unicode character database -lib/unicore/IndicSyllabicCategory.txt Unicode character database +lib/unicore/IndicPositionalCategory.txt Unicode character database +lib/unicore/IndicSyllabicCategory.txt Unicode character database lib/unicore/Jamo.txt Unicode character database -lib/unicore/lib/Age/NA.pl Unicode character database -lib/unicore/lib/Age/V100.pl Unicode character database -lib/unicore/lib/Age/V11.pl Unicode character database -lib/unicore/lib/Age/V110.pl Unicode character database -lib/unicore/lib/Age/V120.pl Unicode character database -lib/unicore/lib/Age/V130.pl Unicode character database -lib/unicore/lib/Age/V20.pl Unicode character database -lib/unicore/lib/Age/V30.pl Unicode character database -lib/unicore/lib/Age/V31.pl Unicode character database -lib/unicore/lib/Age/V32.pl Unicode character database -lib/unicore/lib/Age/V40.pl Unicode character database -lib/unicore/lib/Age/V41.pl Unicode character database -lib/unicore/lib/Age/V50.pl Unicode character database -lib/unicore/lib/Age/V51.pl Unicode character database -lib/unicore/lib/Age/V52.pl Unicode character database -lib/unicore/lib/Age/V60.pl Unicode character database -lib/unicore/lib/Age/V61.pl Unicode character database -lib/unicore/lib/Age/V70.pl Unicode character database -lib/unicore/lib/Age/V80.pl Unicode character database -lib/unicore/lib/Age/V90.pl Unicode character database -lib/unicore/lib/Alpha/Y.pl Unicode character database -lib/unicore/lib/Bc/AL.pl Unicode character database -lib/unicore/lib/Bc/AN.pl Unicode character database -lib/unicore/lib/Bc/B.pl Unicode character database -lib/unicore/lib/Bc/BN.pl Unicode character database -lib/unicore/lib/Bc/CS.pl Unicode character database -lib/unicore/lib/Bc/EN.pl Unicode character database -lib/unicore/lib/Bc/ES.pl Unicode character database -lib/unicore/lib/Bc/ET.pl Unicode character database -lib/unicore/lib/Bc/L.pl Unicode character database -lib/unicore/lib/Bc/NSM.pl Unicode character database -lib/unicore/lib/Bc/ON.pl Unicode character database -lib/unicore/lib/Bc/R.pl Unicode character database -lib/unicore/lib/Bc/WS.pl Unicode character database -lib/unicore/lib/BidiC/Y.pl Unicode character database -lib/unicore/lib/BidiM/Y.pl Unicode character database -lib/unicore/lib/Blk/NB.pl Unicode character database -lib/unicore/lib/Bpt/C.pl Unicode character database -lib/unicore/lib/Bpt/N.pl Unicode character database -lib/unicore/lib/Bpt/O.pl Unicode character database -lib/unicore/lib/Cased/Y.pl Unicode character database -lib/unicore/lib/Ccc/A.pl Unicode character database -lib/unicore/lib/Ccc/AL.pl Unicode character database -lib/unicore/lib/Ccc/AR.pl Unicode character database -lib/unicore/lib/Ccc/ATAR.pl Unicode character database -lib/unicore/lib/Ccc/B.pl Unicode character database -lib/unicore/lib/Ccc/BR.pl Unicode character database -lib/unicore/lib/Ccc/DB.pl Unicode character database -lib/unicore/lib/Ccc/NK.pl Unicode character database -lib/unicore/lib/Ccc/NR.pl Unicode character database -lib/unicore/lib/Ccc/OV.pl Unicode character database -lib/unicore/lib/Ccc/VR.pl Unicode character database -lib/unicore/lib/CE/Y.pl Unicode character database -lib/unicore/lib/CI/Y.pl Unicode character database -lib/unicore/lib/CompEx/Y.pl Unicode character database -lib/unicore/lib/CWCF/Y.pl Unicode character database -lib/unicore/lib/CWCM/Y.pl Unicode character database -lib/unicore/lib/CWKCF/Y.pl Unicode character database -lib/unicore/lib/CWL/Y.pl Unicode character database -lib/unicore/lib/CWT/Y.pl Unicode character database -lib/unicore/lib/CWU/Y.pl Unicode character database -lib/unicore/lib/Dash/Y.pl Unicode character database -lib/unicore/lib/Dep/Y.pl Unicode character database -lib/unicore/lib/DI/Y.pl Unicode character database -lib/unicore/lib/Dia/Y.pl Unicode character database -lib/unicore/lib/Dt/Com.pl Unicode character database -lib/unicore/lib/Dt/Enc.pl Unicode character database -lib/unicore/lib/Dt/Fin.pl Unicode character database -lib/unicore/lib/Dt/Font.pl Unicode character database -lib/unicore/lib/Dt/Init.pl Unicode character database -lib/unicore/lib/Dt/Iso.pl Unicode character database -lib/unicore/lib/Dt/Med.pl Unicode character database -lib/unicore/lib/Dt/Nar.pl Unicode character database -lib/unicore/lib/Dt/Nb.pl Unicode character database -lib/unicore/lib/Dt/NonCanon.pl Unicode character database -lib/unicore/lib/Dt/Sqr.pl Unicode character database -lib/unicore/lib/Dt/Sub.pl Unicode character database -lib/unicore/lib/Dt/Sup.pl Unicode character database -lib/unicore/lib/Dt/Vert.pl Unicode character database -lib/unicore/lib/Ea/A.pl Unicode character database -lib/unicore/lib/Ea/H.pl Unicode character database -lib/unicore/lib/Ea/N.pl Unicode character database -lib/unicore/lib/Ea/Na.pl Unicode character database -lib/unicore/lib/Ea/W.pl Unicode character database -lib/unicore/lib/EBase/Y.pl Unicode character database -lib/unicore/lib/EComp/Y.pl Unicode character database -lib/unicore/lib/Emoji/Y.pl Unicode character database -lib/unicore/lib/EPres/Y.pl Unicode character database -lib/unicore/lib/Ext/Y.pl Unicode character database -lib/unicore/lib/ExtPict/Y.pl Unicode character database -lib/unicore/lib/Gc/C.pl Unicode character database -lib/unicore/lib/Gc/Cf.pl Unicode character database -lib/unicore/lib/Gc/Cn.pl Unicode character database -lib/unicore/lib/Gc/L.pl Unicode character database -lib/unicore/lib/Gc/LC.pl Unicode character database -lib/unicore/lib/Gc/Ll.pl Unicode character database -lib/unicore/lib/Gc/Lm.pl Unicode character database -lib/unicore/lib/Gc/Lo.pl Unicode character database -lib/unicore/lib/Gc/Lu.pl Unicode character database -lib/unicore/lib/Gc/M.pl Unicode character database -lib/unicore/lib/Gc/Mc.pl Unicode character database -lib/unicore/lib/Gc/Me.pl Unicode character database -lib/unicore/lib/Gc/Mn.pl Unicode character database -lib/unicore/lib/Gc/N.pl Unicode character database -lib/unicore/lib/Gc/Nd.pl Unicode character database -lib/unicore/lib/Gc/Nl.pl Unicode character database -lib/unicore/lib/Gc/No.pl Unicode character database -lib/unicore/lib/Gc/P.pl Unicode character database -lib/unicore/lib/Gc/Pc.pl Unicode character database -lib/unicore/lib/Gc/Pd.pl Unicode character database -lib/unicore/lib/Gc/Pe.pl Unicode character database -lib/unicore/lib/Gc/Pf.pl Unicode character database -lib/unicore/lib/Gc/Pi.pl Unicode character database -lib/unicore/lib/Gc/Po.pl Unicode character database -lib/unicore/lib/Gc/Ps.pl Unicode character database -lib/unicore/lib/Gc/S.pl Unicode character database -lib/unicore/lib/Gc/Sc.pl Unicode character database -lib/unicore/lib/Gc/Sk.pl Unicode character database -lib/unicore/lib/Gc/Sm.pl Unicode character database -lib/unicore/lib/Gc/So.pl Unicode character database -lib/unicore/lib/Gc/Z.pl Unicode character database -lib/unicore/lib/Gc/Zs.pl Unicode character database -lib/unicore/lib/GCB/CN.pl Unicode character database -lib/unicore/lib/GCB/EX.pl Unicode character database -lib/unicore/lib/GCB/LV.pl Unicode character database -lib/unicore/lib/GCB/LVT.pl Unicode character database -lib/unicore/lib/GCB/PP.pl Unicode character database -lib/unicore/lib/GCB/SM.pl Unicode character database -lib/unicore/lib/GCB/XX.pl Unicode character database -lib/unicore/lib/GrBase/Y.pl Unicode character database -lib/unicore/lib/GrExt/Y.pl Unicode character database -lib/unicore/lib/Hex/Y.pl Unicode character database -lib/unicore/lib/Hst/NA.pl Unicode character database -lib/unicore/lib/Hyphen/T.pl Unicode character database -lib/unicore/lib/IDC/Y.pl Unicode character database -lib/unicore/lib/Ideo/Y.pl Unicode character database -lib/unicore/lib/IDS/Y.pl Unicode character database -lib/unicore/lib/IdStatus/Allowed.pl Unicode character database -lib/unicore/lib/IdStatus/Restrict.pl Unicode character database -lib/unicore/lib/IdType/DefaultI.pl Unicode character database -lib/unicore/lib/IdType/Exclusio.pl Unicode character database -lib/unicore/lib/IdType/Inclusio.pl Unicode character database -lib/unicore/lib/IdType/LimitedU.pl Unicode character database -lib/unicore/lib/IdType/NotChara.pl Unicode character database -lib/unicore/lib/IdType/NotNFKC.pl Unicode character database -lib/unicore/lib/IdType/NotXID.pl Unicode character database -lib/unicore/lib/IdType/Obsolete.pl Unicode character database -lib/unicore/lib/IdType/Recommen.pl Unicode character database -lib/unicore/lib/IdType/Technica.pl Unicode character database -lib/unicore/lib/IdType/Uncommon.pl Unicode character database -lib/unicore/lib/In/10_0.pl Unicode character database -lib/unicore/lib/In/11_0.pl Unicode character database -lib/unicore/lib/In/12_0.pl Unicode character database -lib/unicore/lib/In/12_1.pl Unicode character database -lib/unicore/lib/In/13_0.pl Unicode character database -lib/unicore/lib/In/2_0.pl Unicode character database -lib/unicore/lib/In/2_1.pl Unicode character database -lib/unicore/lib/In/3_0.pl Unicode character database -lib/unicore/lib/In/3_1.pl Unicode character database -lib/unicore/lib/In/3_2.pl Unicode character database -lib/unicore/lib/In/4_0.pl Unicode character database -lib/unicore/lib/In/4_1.pl Unicode character database -lib/unicore/lib/In/5_0.pl Unicode character database -lib/unicore/lib/In/5_1.pl Unicode character database -lib/unicore/lib/In/5_2.pl Unicode character database -lib/unicore/lib/In/6_0.pl Unicode character database -lib/unicore/lib/In/6_1.pl Unicode character database -lib/unicore/lib/In/6_2.pl Unicode character database -lib/unicore/lib/In/6_3.pl Unicode character database -lib/unicore/lib/In/7_0.pl Unicode character database -lib/unicore/lib/In/8_0.pl Unicode character database -lib/unicore/lib/In/9_0.pl Unicode character database -lib/unicore/lib/InPC/Bottom.pl Unicode character database -lib/unicore/lib/InPC/BottomAn.pl Unicode character database -lib/unicore/lib/InPC/Left.pl Unicode character database -lib/unicore/lib/InPC/LeftAndR.pl Unicode character database -lib/unicore/lib/InPC/NA.pl Unicode character database -lib/unicore/lib/InPC/Overstru.pl Unicode character database -lib/unicore/lib/InPC/Right.pl Unicode character database -lib/unicore/lib/InPC/Top.pl Unicode character database -lib/unicore/lib/InPC/TopAndBo.pl Unicode character database -lib/unicore/lib/InPC/TopAndL2.pl Unicode character database -lib/unicore/lib/InPC/TopAndLe.pl Unicode character database -lib/unicore/lib/InPC/TopAndRi.pl Unicode character database -lib/unicore/lib/InPC/VisualOr.pl Unicode character database -lib/unicore/lib/InSC/Avagraha.pl Unicode character database -lib/unicore/lib/InSC/Bindu.pl Unicode character database -lib/unicore/lib/InSC/Cantilla.pl Unicode character database -lib/unicore/lib/InSC/Consona2.pl Unicode character database -lib/unicore/lib/InSC/Consona3.pl Unicode character database -lib/unicore/lib/InSC/Consona4.pl Unicode character database -lib/unicore/lib/InSC/Consona5.pl Unicode character database -lib/unicore/lib/InSC/Consona6.pl Unicode character database -lib/unicore/lib/InSC/Consona7.pl Unicode character database -lib/unicore/lib/InSC/Consona8.pl Unicode character database -lib/unicore/lib/InSC/Consona9.pl Unicode character database -lib/unicore/lib/InSC/Consonan.pl Unicode character database -lib/unicore/lib/InSC/Invisibl.pl Unicode character database -lib/unicore/lib/InSC/Nukta.pl Unicode character database -lib/unicore/lib/InSC/Number.pl Unicode character database -lib/unicore/lib/InSC/Other.pl Unicode character database -lib/unicore/lib/InSC/PureKill.pl Unicode character database -lib/unicore/lib/InSC/Syllable.pl Unicode character database -lib/unicore/lib/InSC/ToneMark.pl Unicode character database -lib/unicore/lib/InSC/Virama.pl Unicode character database -lib/unicore/lib/InSC/Visarga.pl Unicode character database -lib/unicore/lib/InSC/Vowel.pl Unicode character database -lib/unicore/lib/InSC/VowelDep.pl Unicode character database -lib/unicore/lib/InSC/VowelInd.pl Unicode character database -lib/unicore/lib/Jg/Ain.pl Unicode character database -lib/unicore/lib/Jg/Alef.pl Unicode character database -lib/unicore/lib/Jg/Beh.pl Unicode character database -lib/unicore/lib/Jg/Dal.pl Unicode character database -lib/unicore/lib/Jg/FarsiYeh.pl Unicode character database -lib/unicore/lib/Jg/Feh.pl Unicode character database -lib/unicore/lib/Jg/Gaf.pl Unicode character database -lib/unicore/lib/Jg/Hah.pl Unicode character database -lib/unicore/lib/Jg/HanifiRo.pl Unicode character database -lib/unicore/lib/Jg/Kaf.pl Unicode character database -lib/unicore/lib/Jg/Lam.pl Unicode character database -lib/unicore/lib/Jg/NoJoinin.pl Unicode character database -lib/unicore/lib/Jg/Qaf.pl Unicode character database -lib/unicore/lib/Jg/Reh.pl Unicode character database -lib/unicore/lib/Jg/Sad.pl Unicode character database -lib/unicore/lib/Jg/Seen.pl Unicode character database -lib/unicore/lib/Jg/Waw.pl Unicode character database -lib/unicore/lib/Jg/Yeh.pl Unicode character database -lib/unicore/lib/Jt/C.pl Unicode character database -lib/unicore/lib/Jt/D.pl Unicode character database -lib/unicore/lib/Jt/L.pl Unicode character database -lib/unicore/lib/Jt/R.pl Unicode character database -lib/unicore/lib/Jt/T.pl Unicode character database -lib/unicore/lib/Jt/U.pl Unicode character database -lib/unicore/lib/Lb/AI.pl Unicode character database -lib/unicore/lib/Lb/AL.pl Unicode character database -lib/unicore/lib/Lb/BA.pl Unicode character database -lib/unicore/lib/Lb/BB.pl Unicode character database -lib/unicore/lib/Lb/CJ.pl Unicode character database -lib/unicore/lib/Lb/CL.pl Unicode character database -lib/unicore/lib/Lb/CM.pl Unicode character database -lib/unicore/lib/Lb/EX.pl Unicode character database -lib/unicore/lib/Lb/GL.pl Unicode character database -lib/unicore/lib/Lb/ID.pl Unicode character database -lib/unicore/lib/Lb/IN.pl Unicode character database -lib/unicore/lib/Lb/IS.pl Unicode character database -lib/unicore/lib/Lb/NS.pl Unicode character database -lib/unicore/lib/Lb/NU.pl Unicode character database -lib/unicore/lib/Lb/OP.pl Unicode character database -lib/unicore/lib/Lb/PO.pl Unicode character database -lib/unicore/lib/Lb/PR.pl Unicode character database -lib/unicore/lib/Lb/QU.pl Unicode character database -lib/unicore/lib/Lb/SA.pl Unicode character database -lib/unicore/lib/Lb/XX.pl Unicode character database -lib/unicore/lib/Lower/Y.pl Unicode character database -lib/unicore/lib/Math/Y.pl Unicode character database -lib/unicore/lib/NFCQC/M.pl Unicode character database -lib/unicore/lib/NFCQC/Y.pl Unicode character database -lib/unicore/lib/NFDQC/N.pl Unicode character database -lib/unicore/lib/NFDQC/Y.pl Unicode character database -lib/unicore/lib/NFKCQC/N.pl Unicode character database -lib/unicore/lib/NFKCQC/Y.pl Unicode character database -lib/unicore/lib/NFKDQC/N.pl Unicode character database -lib/unicore/lib/NFKDQC/Y.pl Unicode character database -lib/unicore/lib/Nt/Di.pl Unicode character database -lib/unicore/lib/Nt/None.pl Unicode character database -lib/unicore/lib/Nt/Nu.pl Unicode character database -lib/unicore/lib/Nv/0.pl Unicode character database -lib/unicore/lib/Nv/1.pl Unicode character database -lib/unicore/lib/Nv/10.pl Unicode character database -lib/unicore/lib/Nv/100.pl Unicode character database -lib/unicore/lib/Nv/1000.pl Unicode character database -lib/unicore/lib/Nv/10000.pl Unicode character database -lib/unicore/lib/Nv/100000.pl Unicode character database -lib/unicore/lib/Nv/11.pl Unicode character database -lib/unicore/lib/Nv/12.pl Unicode character database -lib/unicore/lib/Nv/13.pl Unicode character database -lib/unicore/lib/Nv/14.pl Unicode character database -lib/unicore/lib/Nv/15.pl Unicode character database -lib/unicore/lib/Nv/16.pl Unicode character database -lib/unicore/lib/Nv/17.pl Unicode character database -lib/unicore/lib/Nv/18.pl Unicode character database -lib/unicore/lib/Nv/19.pl Unicode character database -lib/unicore/lib/Nv/1_16.pl Unicode character database -lib/unicore/lib/Nv/1_2.pl Unicode character database -lib/unicore/lib/Nv/1_3.pl Unicode character database -lib/unicore/lib/Nv/1_4.pl Unicode character database -lib/unicore/lib/Nv/1_6.pl Unicode character database -lib/unicore/lib/Nv/1_8.pl Unicode character database -lib/unicore/lib/Nv/2.pl Unicode character database -lib/unicore/lib/Nv/20.pl Unicode character database -lib/unicore/lib/Nv/200.pl Unicode character database -lib/unicore/lib/Nv/2000.pl Unicode character database -lib/unicore/lib/Nv/20000.pl Unicode character database -lib/unicore/lib/Nv/2_3.pl Unicode character database -lib/unicore/lib/Nv/3.pl Unicode character database -lib/unicore/lib/Nv/30.pl Unicode character database -lib/unicore/lib/Nv/300.pl Unicode character database -lib/unicore/lib/Nv/3000.pl Unicode character database -lib/unicore/lib/Nv/30000.pl Unicode character database -lib/unicore/lib/Nv/3_16.pl Unicode character database -lib/unicore/lib/Nv/3_4.pl Unicode character database -lib/unicore/lib/Nv/4.pl Unicode character database -lib/unicore/lib/Nv/40.pl Unicode character database -lib/unicore/lib/Nv/400.pl Unicode character database -lib/unicore/lib/Nv/4000.pl Unicode character database -lib/unicore/lib/Nv/40000.pl Unicode character database -lib/unicore/lib/Nv/5.pl Unicode character database -lib/unicore/lib/Nv/50.pl Unicode character database -lib/unicore/lib/Nv/500.pl Unicode character database -lib/unicore/lib/Nv/5000.pl Unicode character database -lib/unicore/lib/Nv/50000.pl Unicode character database -lib/unicore/lib/Nv/6.pl Unicode character database -lib/unicore/lib/Nv/60.pl Unicode character database -lib/unicore/lib/Nv/600.pl Unicode character database -lib/unicore/lib/Nv/6000.pl Unicode character database -lib/unicore/lib/Nv/60000.pl Unicode character database -lib/unicore/lib/Nv/7.pl Unicode character database -lib/unicore/lib/Nv/70.pl Unicode character database -lib/unicore/lib/Nv/700.pl Unicode character database -lib/unicore/lib/Nv/7000.pl Unicode character database -lib/unicore/lib/Nv/70000.pl Unicode character database -lib/unicore/lib/Nv/8.pl Unicode character database -lib/unicore/lib/Nv/80.pl Unicode character database -lib/unicore/lib/Nv/800.pl Unicode character database -lib/unicore/lib/Nv/8000.pl Unicode character database -lib/unicore/lib/Nv/80000.pl Unicode character database -lib/unicore/lib/Nv/9.pl Unicode character database -lib/unicore/lib/Nv/90.pl Unicode character database -lib/unicore/lib/Nv/900.pl Unicode character database -lib/unicore/lib/Nv/9000.pl Unicode character database -lib/unicore/lib/Nv/90000.pl Unicode character database -lib/unicore/lib/PatSyn/Y.pl Unicode character database -lib/unicore/lib/PCM/Y.pl Unicode character database -lib/unicore/lib/Perl/_PerlAny.pl Unicode character database -lib/unicore/lib/Perl/_PerlCh2.pl Unicode character database -lib/unicore/lib/Perl/_PerlCha.pl Unicode character database -lib/unicore/lib/Perl/_PerlFol.pl Unicode character database -lib/unicore/lib/Perl/_PerlIDC.pl Unicode character database -lib/unicore/lib/Perl/_PerlIDS.pl Unicode character database -lib/unicore/lib/Perl/_PerlIsI.pl Unicode character database -lib/unicore/lib/Perl/_PerlNch.pl Unicode character database -lib/unicore/lib/Perl/_PerlPat.pl Unicode character database -lib/unicore/lib/Perl/_PerlPr2.pl Unicode character database -lib/unicore/lib/Perl/_PerlPro.pl Unicode character database -lib/unicore/lib/Perl/_PerlQuo.pl Unicode character database -lib/unicore/lib/Perl/Alnum.pl Unicode character database -lib/unicore/lib/Perl/Assigned.pl Unicode character database -lib/unicore/lib/Perl/Blank.pl Unicode character database -lib/unicore/lib/Perl/Graph.pl Unicode character database -lib/unicore/lib/Perl/PerlWord.pl Unicode character database -lib/unicore/lib/Perl/PosixPun.pl Unicode character database -lib/unicore/lib/Perl/Print.pl Unicode character database -lib/unicore/lib/Perl/SpacePer.pl Unicode character database -lib/unicore/lib/Perl/Title.pl Unicode character database -lib/unicore/lib/Perl/Word.pl Unicode character database -lib/unicore/lib/Perl/XPosixPu.pl Unicode character database -lib/unicore/lib/QMark/Y.pl Unicode character database -lib/unicore/lib/SB/AT.pl Unicode character database -lib/unicore/lib/SB/CL.pl Unicode character database -lib/unicore/lib/SB/EX.pl Unicode character database -lib/unicore/lib/SB/FO.pl Unicode character database -lib/unicore/lib/SB/LE.pl Unicode character database -lib/unicore/lib/SB/LO.pl Unicode character database -lib/unicore/lib/SB/NU.pl Unicode character database -lib/unicore/lib/SB/SC.pl Unicode character database -lib/unicore/lib/SB/Sp.pl Unicode character database -lib/unicore/lib/SB/ST.pl Unicode character database -lib/unicore/lib/SB/UP.pl Unicode character database -lib/unicore/lib/SB/XX.pl Unicode character database -lib/unicore/lib/Sc/Arab.pl Unicode character database -lib/unicore/lib/Sc/Beng.pl Unicode character database -lib/unicore/lib/Sc/Cprt.pl Unicode character database -lib/unicore/lib/Sc/Cyrl.pl Unicode character database -lib/unicore/lib/Sc/Deva.pl Unicode character database -lib/unicore/lib/Sc/Dupl.pl Unicode character database -lib/unicore/lib/Sc/Geor.pl Unicode character database -lib/unicore/lib/Sc/Glag.pl Unicode character database -lib/unicore/lib/Sc/Gong.pl Unicode character database -lib/unicore/lib/Sc/Gonm.pl Unicode character database -lib/unicore/lib/Sc/Gran.pl Unicode character database -lib/unicore/lib/Sc/Grek.pl Unicode character database -lib/unicore/lib/Sc/Gujr.pl Unicode character database -lib/unicore/lib/Sc/Guru.pl Unicode character database -lib/unicore/lib/Sc/Han.pl Unicode character database -lib/unicore/lib/Sc/Hang.pl Unicode character database -lib/unicore/lib/Sc/Hira.pl Unicode character database -lib/unicore/lib/Sc/Kana.pl Unicode character database -lib/unicore/lib/Sc/Knda.pl Unicode character database -lib/unicore/lib/Sc/Latn.pl Unicode character database -lib/unicore/lib/Sc/Limb.pl Unicode character database -lib/unicore/lib/Sc/Linb.pl Unicode character database -lib/unicore/lib/Sc/Mlym.pl Unicode character database -lib/unicore/lib/Sc/Mong.pl Unicode character database -lib/unicore/lib/Sc/Mult.pl Unicode character database -lib/unicore/lib/Sc/Orya.pl Unicode character database -lib/unicore/lib/Sc/Sinh.pl Unicode character database -lib/unicore/lib/Sc/Syrc.pl Unicode character database -lib/unicore/lib/Sc/Taml.pl Unicode character database -lib/unicore/lib/Sc/Telu.pl Unicode character database -lib/unicore/lib/Sc/Zinh.pl Unicode character database -lib/unicore/lib/Sc/Zyyy.pl Unicode character database -lib/unicore/lib/Scx/Adlm.pl Unicode character database -lib/unicore/lib/Scx/Arab.pl Unicode character database -lib/unicore/lib/Scx/Armn.pl Unicode character database -lib/unicore/lib/Scx/Beng.pl Unicode character database -lib/unicore/lib/Scx/Bhks.pl Unicode character database -lib/unicore/lib/Scx/Bopo.pl Unicode character database -lib/unicore/lib/Scx/Cakm.pl Unicode character database -lib/unicore/lib/Scx/Cham.pl Unicode character database -lib/unicore/lib/Scx/Copt.pl Unicode character database -lib/unicore/lib/Scx/Cprt.pl Unicode character database -lib/unicore/lib/Scx/Cyrl.pl Unicode character database -lib/unicore/lib/Scx/Deva.pl Unicode character database -lib/unicore/lib/Scx/Diak.pl Unicode character database -lib/unicore/lib/Scx/Dupl.pl Unicode character database -lib/unicore/lib/Scx/Ethi.pl Unicode character database -lib/unicore/lib/Scx/Geor.pl Unicode character database -lib/unicore/lib/Scx/Glag.pl Unicode character database -lib/unicore/lib/Scx/Gong.pl Unicode character database -lib/unicore/lib/Scx/Gonm.pl Unicode character database -lib/unicore/lib/Scx/Gran.pl Unicode character database -lib/unicore/lib/Scx/Grek.pl Unicode character database -lib/unicore/lib/Scx/Gujr.pl Unicode character database -lib/unicore/lib/Scx/Guru.pl Unicode character database -lib/unicore/lib/Scx/Han.pl Unicode character database -lib/unicore/lib/Scx/Hang.pl Unicode character database -lib/unicore/lib/Scx/Hebr.pl Unicode character database -lib/unicore/lib/Scx/Hira.pl Unicode character database -lib/unicore/lib/Scx/Hmng.pl Unicode character database -lib/unicore/lib/Scx/Hmnp.pl Unicode character database -lib/unicore/lib/Scx/Kana.pl Unicode character database -lib/unicore/lib/Scx/Khar.pl Unicode character database -lib/unicore/lib/Scx/Khmr.pl Unicode character database -lib/unicore/lib/Scx/Khoj.pl Unicode character database -lib/unicore/lib/Scx/Knda.pl Unicode character database -lib/unicore/lib/Scx/Kthi.pl Unicode character database -lib/unicore/lib/Scx/Lana.pl Unicode character database -lib/unicore/lib/Scx/Lao.pl Unicode character database -lib/unicore/lib/Scx/Latn.pl Unicode character database -lib/unicore/lib/Scx/Limb.pl Unicode character database -lib/unicore/lib/Scx/Lina.pl Unicode character database -lib/unicore/lib/Scx/Linb.pl Unicode character database -lib/unicore/lib/Scx/Mlym.pl Unicode character database -lib/unicore/lib/Scx/Mong.pl Unicode character database -lib/unicore/lib/Scx/Mult.pl Unicode character database -lib/unicore/lib/Scx/Mymr.pl Unicode character database -lib/unicore/lib/Scx/Nand.pl Unicode character database -lib/unicore/lib/Scx/Orya.pl Unicode character database -lib/unicore/lib/Scx/Phlp.pl Unicode character database -lib/unicore/lib/Scx/Rohg.pl Unicode character database -lib/unicore/lib/Scx/Shrd.pl Unicode character database -lib/unicore/lib/Scx/Sind.pl Unicode character database -lib/unicore/lib/Scx/Sinh.pl Unicode character database -lib/unicore/lib/Scx/Syrc.pl Unicode character database -lib/unicore/lib/Scx/Tagb.pl Unicode character database -lib/unicore/lib/Scx/Takr.pl Unicode character database -lib/unicore/lib/Scx/Talu.pl Unicode character database -lib/unicore/lib/Scx/Taml.pl Unicode character database -lib/unicore/lib/Scx/Tang.pl Unicode character database -lib/unicore/lib/Scx/Telu.pl Unicode character database -lib/unicore/lib/Scx/Thaa.pl Unicode character database -lib/unicore/lib/Scx/Tibt.pl Unicode character database -lib/unicore/lib/Scx/Tirh.pl Unicode character database -lib/unicore/lib/Scx/Xsux.pl Unicode character database -lib/unicore/lib/Scx/Yezi.pl Unicode character database -lib/unicore/lib/Scx/Yi.pl Unicode character database -lib/unicore/lib/Scx/Zinh.pl Unicode character database -lib/unicore/lib/Scx/Zyyy.pl Unicode character database -lib/unicore/lib/Scx/Zzzz.pl Unicode character database -lib/unicore/lib/SD/Y.pl Unicode character database -lib/unicore/lib/STerm/Y.pl Unicode character database -lib/unicore/lib/Term/Y.pl Unicode character database -lib/unicore/lib/UIdeo/Y.pl Unicode character database -lib/unicore/lib/Upper/Y.pl Unicode character database -lib/unicore/lib/Vo/R.pl Unicode character database -lib/unicore/lib/Vo/Tr.pl Unicode character database -lib/unicore/lib/Vo/Tu.pl Unicode character database -lib/unicore/lib/Vo/U.pl Unicode character database -lib/unicore/lib/WB/EX.pl Unicode character database -lib/unicore/lib/WB/Extend.pl Unicode character database -lib/unicore/lib/WB/FO.pl Unicode character database -lib/unicore/lib/WB/HL.pl Unicode character database -lib/unicore/lib/WB/KA.pl Unicode character database -lib/unicore/lib/WB/LE.pl Unicode character database -lib/unicore/lib/WB/MB.pl Unicode character database -lib/unicore/lib/WB/ML.pl Unicode character database -lib/unicore/lib/WB/MN.pl Unicode character database -lib/unicore/lib/WB/NU.pl Unicode character database -lib/unicore/lib/WB/WSegSpac.pl Unicode character database -lib/unicore/lib/WB/XX.pl Unicode character database -lib/unicore/lib/XIDC/Y.pl Unicode character database -lib/unicore/lib/XIDS/Y.pl Unicode character database lib/unicore/LineBreak.txt Unicode character database lib/unicore/Makefile Unicode character database lib/unicore/mktables Unicode character database generator -lib/unicore/mktables.lst Unicode character database -lib/unicore/Name.pl Unicode character database -lib/unicore/Name.pm Unicode character database lib/unicore/NameAliases.txt Unicode character database lib/unicore/NamedSequences.txt Unicode character database lib/unicore/NamedSqProv.txt Unicode character database lib/unicore/NamesList.txt Unicode character database -lib/unicore/NormalizationCorrections.txt Unicode character database +lib/unicore/NormalizationCorrections.txt Unicode character database lib/unicore/PropertyAliases.txt Unicode character database lib/unicore/PropList.txt Unicode character database -lib/unicore/PropValueAliases.txt Unicode character database +lib/unicore/PropValueAliases.txt Unicode character database lib/unicore/README.perl Unicode character database lib/unicore/ReadMe.txt Unicode character database info -lib/unicore/ScriptExtensions.txt Unicode character database +lib/unicore/ScriptExtensions.txt Unicode character database lib/unicore/Scripts.txt Unicode character database lib/unicore/SpecialCasing.txt Unicode character database -lib/unicore/StandardizedVariants.txt Unicode character database -lib/unicore/TestProp.pl Unicode character database -lib/unicore/To/_PerlLB.pl Unicode character database -lib/unicore/To/_PerlSCX.pl Unicode character database -lib/unicore/To/Age.pl Unicode character database -lib/unicore/To/Bc.pl Unicode character database -lib/unicore/To/Bmg.pl Unicode character database -lib/unicore/To/Bpb.pl Unicode character database -lib/unicore/To/Bpt.pl Unicode character database -lib/unicore/To/Cf.pl Unicode character database -lib/unicore/To/Digit.pl Unicode character database -lib/unicore/To/Ea.pl Unicode character database -lib/unicore/To/EqUIdeo.pl Unicode character database -lib/unicore/To/Fold.pl Unicode character database -lib/unicore/To/Gc.pl Unicode character database -lib/unicore/To/GCB.pl Unicode character database -lib/unicore/To/Hst.pl Unicode character database -lib/unicore/To/Identif2.pl Unicode character database -lib/unicore/To/Identifi.pl Unicode character database -lib/unicore/To/InPC.pl Unicode character database -lib/unicore/To/InSC.pl Unicode character database -lib/unicore/To/Isc.pl Unicode character database -lib/unicore/To/Jg.pl Unicode character database -lib/unicore/To/Jt.pl Unicode character database -lib/unicore/To/Lb.pl Unicode character database -lib/unicore/To/Lc.pl Unicode character database -lib/unicore/To/Lower.pl Unicode character database -lib/unicore/To/Na1.pl Unicode character database -lib/unicore/To/NameAlia.pl Unicode character database -lib/unicore/To/NFCQC.pl Unicode character database -lib/unicore/To/NFDQC.pl Unicode character database -lib/unicore/To/NFKCCF.pl Unicode character database -lib/unicore/To/NFKCQC.pl Unicode character database -lib/unicore/To/NFKDQC.pl Unicode character database -lib/unicore/To/Nt.pl Unicode character database -lib/unicore/To/Nv.pl Unicode character database -lib/unicore/To/PerlDeci.pl Unicode character database -lib/unicore/To/SB.pl Unicode character database -lib/unicore/To/Sc.pl Unicode character database -lib/unicore/To/Scx.pl Unicode character database -lib/unicore/To/Tc.pl Unicode character database -lib/unicore/To/Title.pl Unicode character database -lib/unicore/To/Uc.pl Unicode character database -lib/unicore/To/Upper.pl Unicode character database -lib/unicore/To/Vo.pl Unicode character database -lib/unicore/To/WB.pl Unicode character database -lib/unicore/UCD.pl Unicode character database +lib/unicore/StandardizedVariants.txt Unicode character database lib/unicore/uni_keywords.pl Indices into array in charclass_invlists.h lib/unicore/UnicodeData.txt Unicode character database lib/unicore/version The version of the Unicode -lib/unicore/VerticalOrientation.txt Unicode character database +lib/unicore/VerticalOrientation.txt Unicode character database lib/UNIVERSAL.pm Base class for ALL classes lib/User/grent.pm By-name interface to Perl's builtin getgr* lib/User/grent.t See if User::grwent works @@ -5589,6 +5120,7 @@ make_ext.pl Used by Makefile to execute extension Makefiles make_patchnum.pl Script to generate git_version.h and lib/Config_git.pl files for all OS'es makedef.pl Create symbol export lists for linking makedepend.SH Precursor to makedepend +makedepend_file.SH Precursor to makedepend_file Makefile.micro microperl Makefile Makefile.SH A script that generates Makefile malloc.c A version of malloc you might not want @@ -5610,61 +5142,6 @@ mkppport.lst List of extensions that need a ppport.h mro_core.c Method Resolution Order code myconfig.SH Prints summary of the current configuration mydtrace.h Support for optional DTrace probes -NetWare/bat/Buildtype.bat NetWare port -NetWare/bat/SetCodeWar.bat NetWare port -NetWare/bat/Setnlmsdk.bat NetWare port -NetWare/bat/SetNWBld.bat NetWare port -NetWare/bat/ToggleD2.bat NetWare port -NetWare/CLIBsdio.h NetWare port -NetWare/CLIBstr.h NetWare port -NetWare/CLIBstuf.c NetWare port -NetWare/CLIBstuf.h NetWare port -NetWare/config.wc NetWare port -NetWare/config_h.PL NetWare port -NetWare/config_H.wc NetWare port -NetWare/config_sh.PL NetWare port -NetWare/deb.h NetWare port -NetWare/dl_netware.xs NetWare port -NetWare/intdef.h NetWare port -NetWare/interface.c NetWare port -NetWare/interface.cpp NetWare port -NetWare/interface.h NetWare port -NetWare/iperlhost.h NetWare port -NetWare/Main.c NetWare port -NetWare/Makefile NetWare port -NetWare/MP.imp NetWare port -NetWare/netware.h NetWare port -NetWare/nw5.c NetWare port -NetWare/nw5iop.h NetWare port -NetWare/nw5sck.c NetWare port -NetWare/nw5sck.h NetWare port -NetWare/nw5thread.c NetWare port -NetWare/nw5thread.h NetWare port -NetWare/nwhashcls.cpp NetWare port -NetWare/nwhashcls.h NetWare port -NetWare/Nwmain.c NetWare port -NetWare/nwperlhost.h NetWare port -NetWare/nwperlsys.c NetWare port -NetWare/nwperlsys.h NetWare port -NetWare/Nwpipe.c NetWare port -NetWare/nwpipe.h NetWare port -NetWare/nwplglob.c NetWare port -NetWare/nwplglob.h NetWare port -NetWare/nwstdio.h NetWare port -NetWare/NWTInfo.c NetWare port -NetWare/nwtinfo.h NetWare port -NetWare/NWUtil.c NetWare port -NetWare/nwutil.h NetWare port -NetWare/nwvmem.h NetWare port -NetWare/perllib.cpp NetWare port -NetWare/splittree.pl NetWare port -NetWare/sv_nw.c NetWare port -NetWare/t/NWModify.pl NetWare port -NetWare/t/NWScripts.pl NetWare port -NetWare/t/Readme.txt NetWare port -NetWare/testnlm/echo/echo.c NetWare port -NetWare/testnlm/type/type.c NetWare port -NetWare/win32ish.h NetWare port nostdio.h Cause compile error on stdio calls numeric.c Miscellaneous numeric conversion routines op.c Opcode syntax tree code @@ -5743,8 +5220,8 @@ perl.c main() perl.h Global declarations perl_inc_macro.h macro used to set \@INC using S_incpush_use_sep perl_langinfo.h Perl's version of -perlapi.c Perl API functions -perlapi.h Perl API function declarations +perl_siphash.h Implementation of SipHash +perlapi.h Empty backwards-compat include perldtrace.d D script for Perl probes perlio.c C code for PerlIO abstraction perlio.h PerlIO abstraction @@ -5757,20 +5234,23 @@ perly.c parser code (NOT derived from perly.y) perly.h header file for perly.c; derived from perly.y perly.tab parser state tables; derived from perly.y perly.y Yacc grammar for perl -plan9/aperl Shell to make Perl error messages Acme-friendly +plan9/9front.patch Plan9 port: patch for 9front-specific flavor of Plan 9 +plan9/aperl Plan9 port: shell to make Perl error messages Acme-friendly plan9/arpa/inet.h Plan9 port: replacement C header file plan9/buildinfo Plan9 port: configuration information plan9/config.plan9 Plan9 port: config.h template -plan9/config_h.sample Plan9 port: 5.8.0 sample config.h -plan9/config_sh.sample Plan9 port: 5.8.0 sample config.sh +plan9/config_h.sample Plan9 port: 5.32.0 sample config.h +plan9/config_sh.sample Plan9 port: 5.32.0 sample config.sh plan9/exclude Plan9 port: tests to skip plan9/fndvers Plan9 port: update Perl version in config.plan9 plan9/genconfig.pl Plan9 port: generate config.sh +plan9/math.h Plan9 port: Plan9-specific math.h plan9/mkfile Plan9 port: Mk driver for build plan9/myconfig.plan9 Plan9 port: script to print config summary plan9/plan9.c Plan9 port: Plan9-specific C routines plan9/plan9ish.h Plan9 port: Plan9-specific C header file plan9/setup.rc Plan9 port: script for easy build+install +plan9/uninstall.rc Plan9 port: uninstall script plan9/versnum Plan9 port: script to print version number pod/buildtoc Generate pod/perltoc.pod and pod/roffitall pod/Makefile.SH generate Makefile which makes pods into something else @@ -5825,6 +5305,9 @@ pod/perl5301delta.pod Perl changes in version 5.30.1 pod/perl5302delta.pod Perl changes in version 5.30.2 pod/perl5303delta.pod Perl changes in version 5.30.3 pod/perl5320delta.pod Perl changes in version 5.32.0 +pod/perl5321delta.pod Perl changes in version 5.32.1 +pod/perl5340delta.pod Perl changes in version 5.34.0 +pod/perl5341delta.pod Perl changes in version 5.34.1 pod/perl561delta.pod Perl changes in version 5.6.1 pod/perl56delta.pod Perl changes in version 5.6 pod/perl581delta.pod Perl changes in version 5.8.1 @@ -5854,6 +5337,7 @@ pod/perldebug.pod Perl debugging pod/perldelta.pod Perl changes since previous version pod/perldeprecation.pod Perl deprecations pod/perldiag.pod Perl diagnostic messages +pod/perldocstyle.pod Perl style guide for core docs pod/perldsc.pod Perl data structures intro pod/perldtrace.pod Perl's support for DTrace pod/perlebcdic.pod Considerations for running Perl on EBCDIC platforms @@ -5925,7 +5409,6 @@ pod/perlunicode.pod Perl Unicode support pod/perlunicook.pod Perl Unicode cookbook pod/perlunifaq.pod Perl Unicode FAQ pod/perluniintro.pod Perl Unicode introduction -pod/perluniprops.pod Index of Unicode properties in Perl pod/perlunitut.pod Perl Unicode tutorial pod/perlutil.pod utilities packaged with the Perl distribution pod/perlvar.pod Perl predefined variables @@ -5936,13 +5419,13 @@ pod/splitpod Splits perlfunc into multiple pod pages Policy_sh.SH Hold site-wide preferences between Configure runs. Porting/acknowledgements.pl Generate perldelta acknowledgements text Porting/add-package.pl Add/Update CPAN modules that are part of Core +Porting/add-pod-file Utility to add new pod/*.pod file to core distribution Porting/bench.pl Run benchmarks against t/perf/benchmarks Porting/bisect.pl A tool to make bisecting easy Porting/bisect-example.sh Example script to use with git bisect run Porting/bisect-runner.pl Tool to be called by git bisect run Porting/bump-perl-version bump the perl version in relevant files Porting/check-cpan-pollution Check for commits that may wrongly touch CPAN distros -Porting/check83.pl Check whether we are 8.3-friendly Porting/checkansi.pl Check source code for ANSI-C violations Porting/checkAUTHORS.pl Check that the AUTHORS file is complete Porting/checkcfguse.pl Check that config symbols are being used @@ -5950,17 +5433,18 @@ Porting/checkcfgvar.pl Check that config scripts define all symbols Porting/checkpodencoding.pl Check POD encoding Porting/checkURL.pl Check whether we have working URLs Porting/checkVERSION.pl Check whether we have $VERSIONs -Porting/cherrymaint Command line tool for updating cherrymaint Porting/cmpVERSION.pl Compare whether two trees have changed modules Porting/config.sh Sample config.sh Porting/config_H Sample config.h Porting/config_h.pl Reorder config_h.SH after metaconfig Porting/core-cpan-diff Compare core distros with their CPAN equivalents +Porting/core-team.json Membership of the Perl Core Team Porting/corecpan.pl Reports outdated dual-lived modules Porting/corelist.pl Generates data for Module::CoreList Porting/corelist-diff Tool to produce corelist diffs Porting/corelist-perldelta.pl Generates data perldelta from Module::CoreList Porting/deparse-skips.txt List of test files to ignore/skip for deparse tests. +Porting/docs-team-charter.pod Perl Documentation Team charter Porting/epigraphs.pod the release epigraphs used over the years Porting/exec-bit.txt List of files that get +x in release tarball Porting/exercise_makedef.pl Brute force testing for makedef.pl @@ -5979,7 +5463,6 @@ Porting/Maintainers.pl Information about maintainers Porting/Maintainers.pm Library to pretty print info in Maintainers.pl Porting/make-rmg-checklist Generates a checklist 4 the release manager Porting/make_dot_patch.pl Make a .patch file from a git WD -Porting/make_modlib_cpan.pl Generates the list of CPAN sites in perlmodlib Porting/make_snapshot.pl Make a tgz snapshot of our tree with a .patch file in it Porting/makemeta Create the top-level META.yml Porting/makerel Release making utility @@ -5990,6 +5473,7 @@ Porting/mksample Generate Porting/config_H and Porting/config.sh Porting/new-perldelta.pl Generate a new perldelta Porting/newtests-perldelta.pl Generate Perldelta stub for newly added tests Porting/perldelta_template.pod Template for creating new perldelta.pod files +Porting/perlgov-team-update Tool to update perlgov from perl-core-teaml Porting/perlhist_calculate.pl Perform calculations to update perlhist Porting/pod_lib.pl Code for handling generated pods Porting/pod_rules.pl generate lists of pod files for Makefiles @@ -6007,7 +5491,9 @@ Porting/sync-with-cpan Sync with CPAN Porting/timecheck.c Test program for the 2038 fix Porting/timecheck2.c Test program for the 2038 fix Porting/todo.pod Perl things to do +Porting/updateAUTHORS.pl Tool to automatically update AUTHORS and .mailmap from git log data Porting/valgrindpp.pl Summarize valgrind reports +Porting/vote_admin_guide.pod Perlgov Vote Administrator guide pp.c Push/Pop code pp.h Push/Pop code defs pp_ctl.c Push/Pop code for control flow @@ -6025,9 +5511,8 @@ README.aix Perl notes for AIX README.amiga Perl notes for AmigaOS README.android Perl notes for Android README.bs2000 Perl notes for POSIX-BC BS2000 -README.cn Perl for Simplified Chinese (in EUC-CN) +README.cn Perl for Simplified Chinese (in UTF-8) README.cygwin Perl notes for Cygwin -README.dos Perl notes for DOS README.freebsd Perl notes for FreeBSD README.haiku Perl notes for Haiku README.hpux Perl notes for HP-UX @@ -6036,10 +5521,8 @@ README.irix Perl notes for Irix README.jp Perl for Japanese (in EUC-JP) README.ko Perl for Korean (in EUC-KR) README.linux Perl notes for Linux -README.macos Perl notes for Mac OS (Classic) README.macosx Perl notes for Mac OS X README.micro Notes about microperl -README.netware Perl notes for NetWare README.openbsd Perl notes for OpenBSD README.os2 Perl notes for OS/2 README.os390 Perl notes for OS/390 @@ -6048,7 +5531,6 @@ README.plan9 Perl notes for Plan 9 README.qnx Perl notes for QNX README.riscos Perl notes for RISC OS README.solaris Perl notes for Solaris -README.symbian Perl notes for Symbian README.synology Perl notes for Synology README.tru64 Perl notes for Tru64 README.tw Perl for Traditional Chinese (in Big5) @@ -6097,59 +5579,9 @@ sbox32_hash.h SBox hash code (32 Bit SBOX based hash function) scope.c Scope entry and exit code scope.h Scope entry and exit header SECURITY.md Add Security Policy for GitHub -stadtx_hash.h StadtX hash code (64 Bit fast hash function) sv.c Scalar value code sv.h Scalar value header -symbian/bld.inf Symbian sample app build config -symbian/config.pl Configuration script for Symbian -symbian/config.sh Configuration data for Symbian -symbian/cwd.pl Helper code for config.pl -symbian/demo_pl "Archive" of demo code -symbian/ext/Moped/Msg/bld.inf Demo extension build configuration -symbian/ext/Moped/Msg/location.pl Demo extension script -symbian/ext/Moped/Msg/Msg.mmp Demo extension building -symbian/ext/Moped/Msg/Msg.pkg Demo extension packaging -symbian/ext/Moped/Msg/Msg.pm Demo extension Perl glue -symbian/ext/Moped/Msg/Msg.xs Demo extension code -symbian/ext/Moped/Msg/README Demo extension documentation -symbian/find_writeable_data.pl Development utility -symbian/hexdump.pl Helper for sisify.pl updating -symbian/install.cfg Installation instructions -symbian/makesis.pl Installation file creator -symbian/PerlApp.cpp Symbian app launcher code -symbian/PerlApp.h Symbian app launcher header -symbian/PerlApp.hrh Symbian app launcher resource header -symbian/PerlAppAif.rss Symbian app launcher code -symbian/PerlBase.cpp Symbian Perl base class -symbian/PerlBase.h Symbian Perl base class header -symbian/PerlBase.pod Symbian Perl base class documentation -symbian/PerlRecog.cpp Symbian recognizer code -symbian/PerlRecog.mmp Symbian recognizer build -symbian/PerlUi.cpp Symbian Perl UI class -symbian/PerlUi.h Symbian Perl UI class header -symbian/PerlUi.hrh Symbian Perl UI class resource header -symbian/PerlUiS60.rss Symbian app launcher resource definition -symbian/PerlUiS80.rss Symbian app launcher resource definition -symbian/PerlUiS90.rss Symbian app launcher resource definition -symbian/PerlUiUIQ.rss Symbian app launcher resource definition -symbian/PerlUtil.cpp Symbian Perl utility class -symbian/PerlUtil.h Symbian Perl utility class header -symbian/PerlUtil.pod Symbian Perl utility class documentation -symbian/port.pl Helper code for config.pl -symbian/README ReadMe for the Symbian files -symbian/sanity.pl Helper code for config.pl -symbian/sdk.pl Helper code for config.pl -symbian/sisify.pl Packaging utility -symbian/symbian_dll.cpp The DLL stub for Symbian -symbian/symbian_proto.h Prototypes for Symbian -symbian/symbian_stubs.c Stub routines for Symbian -symbian/symbian_stubs.h Stub headers for Symbian -symbian/symbian_utils.cpp Helper routines for Symbian -symbian/symbianish.h Header for Symbian -symbian/TODO Symbian things to do -symbian/uid.pl Helper code for config.pl -symbian/version.pl Helper code for config.pl -symbian/xsbuild.pl Building extensions +sv_inline.h Perl_newSV_type and required defs t/base/cond.t See if conditionals work t/base/if.t See if if works t/base/lex.t See if lexical items work @@ -6221,6 +5653,7 @@ t/io/inplace.t See if inplace editing works t/io/iofile.t See if we can load IO::File on demand t/io/iprefix.t See if inplace editing works with prefixes t/io/layers.t See if PerlIO layers work +t/io/msg.t See if SysV message queues work t/io/nargv.t See if nested ARGV stuff works t/io/open.t See if open works t/io/openpid.t See if open works for subprocesses @@ -6269,14 +5702,21 @@ t/lib/Devel/nodb.pm Module for t/run/switchd.t t/lib/Devel/switchd.pm Module for t/run/switchd.t t/lib/Devel/switchd_empty.pm Module for t/run/switchd.t t/lib/Devel/switchd_goto.pm Module for t/run/switchd.t +t/lib/feature/api Test API for checking features enabled/disabled +t/lib/feature/bareword_filehandles Tests for enabling/disabling bareword_filehandles feature t/lib/feature/bits Tests for feature bit handling t/lib/feature/bundle Tests for feature bundles t/lib/feature/implicit Tests for implicit loading of feature.pm t/lib/feature/indirect Tests for enabling/disabling indirect method calls +t/lib/feature/multidimensional Tests for enabling/disabling $foo{$x, $y} => $foo{join($;, $x, $y)} t/lib/feature/nonesuch Tests for enabling/disabling nonexistent feature t/lib/feature/removed Tests for enabling/disabling removed feature t/lib/feature/say Tests for enabling/disabling say feature t/lib/feature/switch Tests for enabling/disabling switch feature +t/lib/GH_15109/Apack.pm test Module for caller.t +t/lib/GH_15109/Bpack.pm test Module for caller.t +t/lib/GH_15109/Cpack.pm test Module for caller.t +t/lib/GH_15109/Foo.pm test Module for caller.t t/lib/h2ph.h Test header file for h2ph t/lib/h2ph.pht Generated output from h2ph.h by h2ph, for comparison t/lib/locale/latin1 Part of locale.t in Latin 1 @@ -6307,6 +5747,7 @@ t/lib/warnings/8signal Tests warnings + __WARN__ and __DIE__ t/lib/warnings/9enabled Tests warnings t/lib/warnings/9uninit Tests "Use of uninitialized" warnings t/lib/warnings/av Tests for av.c for warnings.t +t/lib/warnings/builtin Tests for builtin.c for warnings.t t/lib/warnings/doio Tests for doio.c for warnings.t t/lib/warnings/gv Tests for gv.c for warnings.t t/lib/warnings/hv Tests for hv.c for warnings.t @@ -6411,6 +5852,7 @@ t/op/anonconst.t See if :const works t/op/anonsub.t See if anonymous subroutines work t/op/append.t See if . works t/op/args.t See if operations on @_ work +t/op/arith2.t See if arithmetic works t/op/array.t See if array operations work t/op/assignwarn.t See if OP= operators warn correctly for undef targets t/op/attrhand.t See if attribute handlers work @@ -6420,6 +5862,7 @@ t/op/auto.t See if autoincrement et all work t/op/avhv.t See if pseudo-hashes work t/op/bless.t See if bless works t/op/blocks.t See if BEGIN and friends work +t/op/bool.t Check misc details of boolean values t/op/bop.t See if bitops work t/op/caller.pl Tests shared between caller.t and XS op.t t/op/caller.t See if caller() works @@ -6442,6 +5885,7 @@ t/op/crypt.t See if crypt works t/op/current_sub.t __SUB__ tests t/op/dbm.t See if dbmopen/dbmclose work t/op/decl-refs.t See if my \$foo works +t/op/defer.t See if defer blocks work t/op/defined.t See if defined() edge cases work t/op/defins.t See if auto-insert of defined() works t/op/delete.t See if delete works @@ -6467,6 +5911,7 @@ t/op/filetest_stack_ok.t See if file tests leave their argument on the stack t/op/filetest_t.t See if -t file test works t/op/flip.t See if range operator works t/op/for.t See if for loops work +t/op/for-many.t See if n-at-a-time for loops work t/op/fork.t See if fork works t/op/fresh_perl_utf8.t UTF8 tests for pads and gvs t/op/getpid.t See if $$ and getppid work with threads @@ -6480,6 +5925,7 @@ t/op/grep.t See if grep() and map() work t/op/groups.t See if $( works t/op/gv.t See if typeglobs work t/op/hash.t See if the complexity attackers are repelled +t/op/hash-clear-placeholders.t Tests for corner cases in S_clear_placeholders t/op/hash-rt85026.t See if hash iteration/deletion works t/op/hashassign.t See if hash assignments work t/op/hashwarn.t See if warnings for bad hash assignments work @@ -6524,6 +5970,8 @@ t/op/mydef.t See if "my $_" works t/op/negate.t See if unary minus works t/op/not.t See if not works t/op/numconvert.t See if accessing fields does not change numeric values +t/op/numify.t See if string-to-number conversion works +t/op/numify_chkflags.t See if string-to-number conversion behaves correctly t/op/oct.t See if oct and hex work t/op/or.t See if || works in weird situations t/op/ord.t See if ord works @@ -6583,6 +6031,7 @@ t/op/sub.t See if subroutines work t/op/sub_lval.t See if lvalue subroutines work t/op/substr.t See if substr works t/op/substr_thr.t See if substr works in another thread +t/op/svflags.t See if POK is set as expected. t/op/svleak.pl Test file for svleak.t t/op/svleak.t See if stuff leaks SVs t/op/switch.t See if switches (given/when) work @@ -6596,10 +6045,12 @@ t/op/tie.t See if tie/untie functions work t/op/tie_fetch_count.t See if FETCH is only called once on tied variables t/op/tiearray.t See if tie for arrays works t/op/tiehandle.t See if tie for handles works +t/op/tiehash.t Tests for tied hashes using test.pl t/op/time.t See if time functions work t/op/time_loop.t Test that very large values don't hang gmtime and localtime. t/op/tr.t See if tr works t/op/tr_latin1.t See if tr works, but file isn't encoded in UTF-8 +t/op/try.t See if try works t/op/undef.t See if undef works t/op/universal.t See if UNIVERSAL class works t/op/unlink.t See if unlink works @@ -6686,6 +6137,7 @@ t/re/fold_grind_T.t Wrapper for fold_grind.pl for /l testing with a Turkic loca t/re/fold_grind_u.t Wrapper for fold_grind.pl for /u testing t/re/keep_tabs.t Tests where \t can't be expanded. t/re/no_utf8_pm.t Verify utf8.pm doesn't get loaded unless required +t/re/opt.t Test regexp optimizations t/re/overload.t Test against string corruption in pattern matches on overloaded objects t/re/pat.t See if esoteric patterns work t/re/pat_advanced.t See if advanced esoteric patterns work @@ -6762,6 +6214,7 @@ t/run/fresh_perl.t Tests that require a fresh perl. t/run/locale.t Tests related to locale handling t/run/noswitch.t Test aliasing ARGV for other switch tests t/run/runenv.t Test if perl honors its environment variables. +t/run/runenv_hashseed.t Test if perl honors PERL_HASH_SEED. t/run/script.t See if script invocation works t/run/switch0.t Test the -0 switch t/run/switcha.t Test the -a switch @@ -6825,6 +6278,8 @@ t/win32/fs.t Test Win32 link for compatibility t/win32/popen.t Test for stdout races in backticks, etc t/win32/runenv.t Test if Win* perl honors its env variables t/win32/signal.t Test Win32 signal emulation +t/win32/stat.t Test Win32 stat emulation +t/win32/symlink.t Test Win32 symlink t/win32/system.t See if system works in Win* t/win32/system_tests Test runner for system.t taint.c Tainting code @@ -6916,7 +6371,6 @@ win32/include/sys/errno2.h Win32 port win32/include/sys/socket.h Win32 port win32/list_static_libs.pl prints libraries for static linking win32/Makefile Win32 makefile for NMAKE (Visual C++ build) -win32/makefile.mk Win32 makefile for DMAKE (BC++, VC++ builds) win32/perlexe.ico perlexe.ico image file win32/perlexe.manifest Assembly manifest file win32/perlexe.rc associated perl binary with icon @@ -6929,7 +6383,6 @@ win32/vdir.h Perl "host" virtual directory manager for Win32 win32/vmem.h Perl "host" memory manager for Win32 win32/win32.c Win32 port win32/win32.h Win32 port -win32/win32io.c Win32 PerlIO layer support win32/win32iop.h Win32 port win32/win32sck.c Win32 port win32/win32thread.c Win32 functions for threads diff --git a/gnu/usr.bin/perl/META.json b/gnu/usr.bin/perl/META.json index 7ecc883b3fa..6c89ee22b02 100644 --- a/gnu/usr.bin/perl/META.json +++ b/gnu/usr.bin/perl/META.json @@ -33,8 +33,8 @@ "dist/FindBin", "dist/I18N-Collate", "dist/if", - "dist/IO/", - "dist/lib/", + "dist/IO", + "dist/lib", "dist/Locale-Maketext", "dist/Module-CoreList", "dist/Net-Ping", @@ -55,57 +55,45 @@ "dist/Time-HiRes", "dist/Unicode-Normalize", "dist/XSLoader", + "ext/B/t", + "ext/Devel-Peek/t", + "ext/DynaLoader/t", + "ext/Errno/t", + "ext/Fcntl/t", + "ext/File-DosGlob/t", + "ext/File-Find/t", + "ext/File-Glob/t", + "ext/FileCache/t", + "ext/GDBM_File/t", + "ext/Hash-Util-FieldHash/t", + "ext/Hash-Util/t", + "ext/I18N-Langinfo/t", + "ext/IPC-Open3/t", + "ext/NDBM_File/t", + "ext/ODBM_File/t", + "ext/Opcode/t", + "ext/PerlIO-encoding/t", + "ext/PerlIO-scalar/t", + "ext/PerlIO-via/t", + "ext/Pod-Functions/t", + "ext/Pod-Html/t", + "ext/POSIX/t", + "ext/re/t", + "ext/SDBM_File/t", + "ext/Sys-Hostname/t", + "ext/Tie-Hash-NamedCapture/t", + "ext/Tie-Memoize/t", + "ext/VMS-DCLsym/t", + "ext/VMS-Filespec/t", + "ext/VMS-Stdio/t", + "ext/Win32CORE/t", + "ext/XS-APItest/t", + "ext/XS-Typemap/t", "lib/perl5db", "win32" ], "file" : [ "autodoc.pl", - "dist/IO/ChangeLog", - "dist/IO/hints/sco.pl", - "dist/IO/IO.pm", - "dist/IO/IO.xs", - "dist/IO/lib/IO/Dir.pm", - "dist/IO/lib/IO/File.pm", - "dist/IO/lib/IO/Handle.pm", - "dist/IO/lib/IO/Pipe.pm", - "dist/IO/lib/IO/Poll.pm", - "dist/IO/lib/IO/Seekable.pm", - "dist/IO/lib/IO/Select.pm", - "dist/IO/lib/IO/Socket.pm", - "dist/IO/lib/IO/Socket/INET.pm", - "dist/IO/lib/IO/Socket/UNIX.pm", - "dist/IO/Makefile.PL", - "dist/IO/poll.c", - "dist/IO/poll.h", - "dist/IO/README", - "dist/IO/t/cachepropagate-tcp.t", - "dist/IO/t/cachepropagate-udp.t", - "dist/IO/t/cachepropagate-unix.t", - "dist/IO/t/gh17447.t", - "dist/IO/t/IO.t", - "dist/IO/t/io_const.t", - "dist/IO/t/io_dir.t", - "dist/IO/t/io_dup.t", - "dist/IO/t/io_file.t", - "dist/IO/t/io_file_export.t", - "dist/IO/t/io_getline.t", - "dist/IO/t/io_leak.t", - "dist/IO/t/io_linenum.t", - "dist/IO/t/io_multihomed.t", - "dist/IO/t/io_pipe.t", - "dist/IO/t/io_poll.t", - "dist/IO/t/io_sel.t", - "dist/IO/t/io_sock.t", - "dist/IO/t/io_taint.t", - "dist/IO/t/io_tell.t", - "dist/IO/t/io_udp.t", - "dist/IO/t/io_unix.t", - "dist/IO/t/io_utf8.t", - "dist/IO/t/io_utf8argv.t", - "dist/IO/t/io_xs.t", - "dist/lib/lib_pm.PL", - "dist/lib/Makefile.PL", - "dist/lib/t/01lib.t", "lib/unicore/mktables", "pod/perlfilter.pod", "pod/perlpodstyle.pod", @@ -130,6 +118,6 @@ "url" : "https://github.com/Perl/perl5" } }, - "version" : "5.032001", - "x_serialization_backend" : "JSON::PP version 4.04" + "version" : "5.036000", + "x_serialization_backend" : "JSON::PP version 4.07" } diff --git a/gnu/usr.bin/perl/META.yml b/gnu/usr.bin/perl/META.yml index e6c80560faa..2bfde7bff20 100644 --- a/gnu/usr.bin/perl/META.yml +++ b/gnu/usr.bin/perl/META.yml @@ -31,8 +31,8 @@ no_index: - dist/FindBin - dist/I18N-Collate - dist/if - - dist/IO/ - - dist/lib/ + - dist/IO + - dist/lib - dist/Locale-Maketext - dist/Module-CoreList - dist/Net-Ping @@ -53,56 +53,44 @@ no_index: - dist/Time-HiRes - dist/Unicode-Normalize - dist/XSLoader + - ext/B/t + - ext/Devel-Peek/t + - ext/DynaLoader/t + - ext/Errno/t + - ext/Fcntl/t + - ext/File-DosGlob/t + - ext/File-Find/t + - ext/File-Glob/t + - ext/FileCache/t + - ext/GDBM_File/t + - ext/Hash-Util-FieldHash/t + - ext/Hash-Util/t + - ext/I18N-Langinfo/t + - ext/IPC-Open3/t + - ext/NDBM_File/t + - ext/ODBM_File/t + - ext/Opcode/t + - ext/PerlIO-encoding/t + - ext/PerlIO-scalar/t + - ext/PerlIO-via/t + - ext/Pod-Functions/t + - ext/Pod-Html/t + - ext/POSIX/t + - ext/re/t + - ext/SDBM_File/t + - ext/Sys-Hostname/t + - ext/Tie-Hash-NamedCapture/t + - ext/Tie-Memoize/t + - ext/VMS-DCLsym/t + - ext/VMS-Filespec/t + - ext/VMS-Stdio/t + - ext/Win32CORE/t + - ext/XS-APItest/t + - ext/XS-Typemap/t - lib/perl5db - win32 file: - autodoc.pl - - dist/IO/ChangeLog - - dist/IO/hints/sco.pl - - dist/IO/IO.pm - - dist/IO/IO.xs - - dist/IO/lib/IO/Dir.pm - - dist/IO/lib/IO/File.pm - - dist/IO/lib/IO/Handle.pm - - dist/IO/lib/IO/Pipe.pm - - dist/IO/lib/IO/Poll.pm - - dist/IO/lib/IO/Seekable.pm - - dist/IO/lib/IO/Select.pm - - dist/IO/lib/IO/Socket.pm - - dist/IO/lib/IO/Socket/INET.pm - - dist/IO/lib/IO/Socket/UNIX.pm - - dist/IO/Makefile.PL - - dist/IO/poll.c - - dist/IO/poll.h - - dist/IO/README - - dist/IO/t/cachepropagate-tcp.t - - dist/IO/t/cachepropagate-udp.t - - dist/IO/t/cachepropagate-unix.t - - dist/IO/t/gh17447.t - - dist/IO/t/IO.t - - dist/IO/t/io_const.t - - dist/IO/t/io_dir.t - - dist/IO/t/io_dup.t - - dist/IO/t/io_file.t - - dist/IO/t/io_file_export.t - - dist/IO/t/io_getline.t - - dist/IO/t/io_leak.t - - dist/IO/t/io_linenum.t - - dist/IO/t/io_multihomed.t - - dist/IO/t/io_pipe.t - - dist/IO/t/io_poll.t - - dist/IO/t/io_sel.t - - dist/IO/t/io_sock.t - - dist/IO/t/io_taint.t - - dist/IO/t/io_tell.t - - dist/IO/t/io_udp.t - - dist/IO/t/io_unix.t - - dist/IO/t/io_utf8.t - - dist/IO/t/io_utf8argv.t - - dist/IO/t/io_xs.t - - dist/lib/lib_pm.PL - - dist/lib/Makefile.PL - - dist/lib/t/01lib.t - lib/unicore/mktables - pod/perlfilter.pod - pod/perlpodstyle.pod @@ -117,5 +105,5 @@ resources: homepage: https://www.perl.org/ license: https://dev.perl.org/licenses/ repository: https://github.com/Perl/perl5 -version: '5.032001' +version: '5.036000' x_serialization_backend: 'CPAN::Meta::YAML version 0.018' diff --git a/gnu/usr.bin/perl/Makefile.SH b/gnu/usr.bin/perl/Makefile.SH index b0070202faa..efeb8d6d23d 100644 --- a/gnu/usr.bin/perl/Makefile.SH +++ b/gnu/usr.bin/perl/Makefile.SH @@ -56,12 +56,6 @@ true) pldlflags="$cccdlflags" static_ldflags='' case "${osname}${osvers}" in - next4*) - ld=libtool - lddlflags="-dynamic -undefined warning -framework System \ - -compatibility_version 1 -current_version $patchlevel \ - -prebind -seg1addr 0x27000000 -install_name \$(shrpdir)/\$@" - ;; darwin*) shrpldflags="${ldflags} -dynamiclib \ -compatibility_version \ @@ -124,10 +118,15 @@ true) linklibperl="-L `pwd | sed 's/\/UU$//'` -Wl,+s -Wl,+b$archlibexp/CORE -lperl" ;; os390*) - shrpldflags='-W l,XPLINK,dll' - linklibperl='libperl.x' - DPERL_EXTERNAL_GLOB='' - ;; + case "$use64bitall" in + define|true|[yY]*) shrpldflags='-Wl,LP64,dll' + linklibperl='libperl.x' + ;; + *) shrpldflags='-Wl,XPLINK,dll' + linklibperl='libperl.x' + ;; + esac + ;; esac case "$ldlibpthname" in '') ;; @@ -182,6 +181,16 @@ EOT ;; esac +# ccdlflags, not to be confused with cccdlflags: +case "${osname}" in +aix) + # In AIX we need to change this for building Perl itself from + # the config.sh definition (which is for building external + # extensions *after* Perl has been built and installed) + ccdlflags=`echo $ccdlflags|sed -e 's@-bE:.*/perl\.exp@-bE:perl.exp@'` + ;; +esac + : is Cwd static or dynamic static_cwd='define' list_util_dep='$(PERL_EXE)' @@ -200,7 +209,6 @@ extra_dep=' cpan/Pod-Simple/pm_to_blib: dist/if/pm_to_blib ext/Pod-Functions/pm_to_blib: cpan/Pod-Simple/pm_to_blib cpan/Pod-Escapes/pm_to_blib pod/perlfunc.pod cpan/IO-Compress/pm_to_blib: dist/lib/pm_to_blib -lib/auto/Term/ReadKey/ReadKey.so: lib/auto/Cwd/Cwd.so ' for f in $dynamic_ext; do : the dependency named here will never exist @@ -306,7 +314,6 @@ DLSUFFIX = .$dlext PLDLFLAGS = $pldlflags LIBPERL = $libperl LLIBPERL= $linklibperl -LLIBPERL_NONSHR= $linklibperl_nonshr SHRPENV = $shrpenv # Static targets are ordinarily built without CCCDLFLAGS. However, @@ -334,7 +341,6 @@ HOST_EXE_EXT = $_exe EXE_EXT = $_exe LIB_EXT = $_a OBJ_EXT = $_o -PATH_SEP = $p_ # Macros to invoke a copy of miniperl during the build. Targets which # are built using these macros should depend on \$(MINIPERL_EXE) @@ -429,7 +435,7 @@ FIRSTMAKEFILE = $firstmakefile # Any special object files needed by this architecture, e.g. os2/os2.obj ARCHOBJS = $archobjs -.SUFFIXES: .c \$(OBJ_EXT) .i .s +.SUFFIXES: .c \$(OBJ_EXT) .i .s .c.depends # grrr SHELL = $sh @@ -490,7 +496,7 @@ shextract=`SH_to_target $SH` ## In the following dollars and backticks do not need the extra backslash. $spitshell >>$Makefile <>$Makefile <<'!NO!SUBS!' @@ -523,23 +538,31 @@ h = $(h1) $(h2) $(h3) $(h4) $(h5) $(h6) c1 = av.c scope.c op.c doop.c doio.c dump.c gv.c hv.c mg.c reentr.c mro_core.c perl.c c2 = perly.c pp.c pp_hot.c pp_ctl.c pp_sys.c regcomp.c regexec.c utf8.c sv.c -c3 = taint.c toke.c util.c deb.c run.c universal.c pad.c globals.c keywords.c -c4 = perlio.c perlapi.c numeric.c mathoms.c locale.c pp_pack.c pp_sort.c caretx.c dquote.c time64.c +c3 = taint.c toke.c util.c deb.c run.c builtin.c universal.c pad.c globals.c keywords.c +c4 = perlio.c numeric.c mathoms.c locale.c pp_pack.c pp_sort.c caretx.c dquote.c time64.c c5 = $(mallocsrc) -c = $(c1) $(c2) $(c3) $(c4) $(c5) miniperlmain.c opmini.c perlmini.c +!NO!SUBS! -obj1 = $(mallocobj) gv$(OBJ_EXT) toke$(OBJ_EXT) perly$(OBJ_EXT) pad$(OBJ_EXT) regcomp$(OBJ_EXT) dump$(OBJ_EXT) util$(OBJ_EXT) mg$(OBJ_EXT) reentr$(OBJ_EXT) mro_core$(OBJ_EXT) keywords$(OBJ_EXT) +$spitshell >>$Makefile <>$Makefile <<'!NO!SUBS!' + +c = $(c1) $(c2) $(c3) $(c4) $(c5) miniperlmain.c $(mini_only_src) + +obj1 = $(mallocobj) gv$(OBJ_EXT) toke$(OBJ_EXT) perly$(OBJ_EXT) pad$(OBJ_EXT) regcomp$(OBJ_EXT) dump$(OBJ_EXT) util$(OBJ_EXT) mg$(OBJ_EXT) reentr$(OBJ_EXT) mro_core$(OBJ_EXT) keywords$(OBJ_EXT) builtin$(OBJ_EXT) obj2 = hv$(OBJ_EXT) av$(OBJ_EXT) run$(OBJ_EXT) pp_hot$(OBJ_EXT) sv$(OBJ_EXT) pp$(OBJ_EXT) scope$(OBJ_EXT) pp_ctl$(OBJ_EXT) pp_sys$(OBJ_EXT) -obj3 = doop$(OBJ_EXT) doio$(OBJ_EXT) regexec$(OBJ_EXT) utf8$(OBJ_EXT) taint$(OBJ_EXT) deb$(OBJ_EXT) universal$(OBJ_EXT) globals$(OBJ_EXT) perlio$(OBJ_EXT) perlapi$(OBJ_EXT) numeric$(OBJ_EXT) mathoms$(OBJ_EXT) locale$(OBJ_EXT) pp_pack$(OBJ_EXT) pp_sort$(OBJ_EXT) caretx$(OBJ_EXT) dquote$(OBJ_EXT) time64$(OBJ_EXT) +obj3 = doop$(OBJ_EXT) doio$(OBJ_EXT) regexec$(OBJ_EXT) utf8$(OBJ_EXT) taint$(OBJ_EXT) deb$(OBJ_EXT) globals$(OBJ_EXT) perlio$(OBJ_EXT) numeric$(OBJ_EXT) mathoms$(OBJ_EXT) locale$(OBJ_EXT) pp_pack$(OBJ_EXT) pp_sort$(OBJ_EXT) caretx$(OBJ_EXT) dquote$(OBJ_EXT) time64$(OBJ_EXT) # split the objects into 3 exclusive sets: those used by both miniperl and # perl, and those used by just one or the other. Doesn't include the # actual perl(mini)main.o, nor any dtrace objects. common_objs = $(obj1) $(obj2) $(obj3) $(ARCHOBJS) -mini_only_objs = opmini$(OBJ_EXT) perlmini$(OBJ_EXT) -main_only_objs = op$(OBJ_EXT) perl$(OBJ_EXT) miniperl_objs_nodt = $(mini_only_objs) $(common_objs) miniperlmain$(OBJ_EXT) perllib_objs_nodt = $(main_only_objs) $(common_objs) @@ -590,7 +613,7 @@ esac $spitshell >>$Makefile <<'!NO!SUBS!' -perltoc_pod_prereqs = extra.pods pod/perl5321delta.pod pod/perlapi.pod pod/perlintern.pod pod/perlmodlib.pod +perltoc_pod_prereqs = extra.pods pod/perl5360delta.pod pod/perlapi.pod pod/perlintern.pod pod/perlmodlib.pod pod/perluniprops.pod generated_pods = pod/perltoc.pod $(perltoc_pod_prereqs) generated_headers = uudmap.h bitcount.h mg_data.h @@ -649,16 +672,15 @@ $(MANIFEST_SRT): MANIFEST $(PERL_EXE) .PHONY: all utilities -# OpenBSD uses pre-generated lib/Config_git.pl and git_version.h files # Both git_version.h and lib/Config_git.pl are built # by make_patchnum.pl. -#git_version.h: lib/Config_git.pl -# -#lib/Config_git.pl: $(MINIPERL_EXE) make_patchnum.pl -# $(MINIPERL) make_patchnum.pl -# -## make sure that we recompile perl.c if the git version changes -#perl$(OBJ_EXT): git_version.h +git_version.h: lib/Config_git.pl + +lib/Config_git.pl: $(MINIPERL_EXE) make_patchnum.pl + $(MINIPERL) make_patchnum.pl + +# make sure that we recompile perl.c if the git version changes +perl$(OBJ_EXT): git_version.h !NO!SUBS! @@ -697,7 +719,7 @@ FORCE: @sh -c true !NO!SUBS! -for file in op perl; do +for file in $mini_special; do if $issymlink $file.c; then $spitshell >>$Makefile <>$Makefile <<'!NO!SUBS!' +cygwin.c: cygwin/cygwin.c + $(LNS) cygwin/cygwin.c + globals$(OBJ_EXT): $(generated_headers) uudmap.h mg_data.h: bitcount.h @@ -809,31 +834,10 @@ esac case "$osname" in aix) - $spitshell >>$Makefile <>$Makefile <<'!NO!SUBS!' -LIBPERL_NONSHR = libperl_nonshr$(LIB_EXT) -MINIPERL_NONSHR = miniperl_nonshr$(EXE_EXT) - -$(LIBPERL_NONSHR): $(perllib_objs) - $(RMS) $(LIBPERL_NONSHR) - $(AR) rc $(LIBPERL_NONSHR) $(perllib_objs) - -$(MINIPERL_NONSHR): $(LIBPERL_NONSHR) miniperlmain$(OBJ_EXT) opmini$(OBJ_EXT) perlmini$(OBJ_EXT) - $(CC) $(LDFLAGS) -o $(MINIPERL_NONSHR) miniperlmain$(OBJ_EXT) \ - opmini$(OBJ_EXT) perlmini$(OBJ_EXT) $(LIBPERL_NONSHR) $(LIBS) - -MINIPERLEXP = $(MINIPERL_NONSHR) - LIBPERLEXPORT = perl.exp !NO!SUBS! @@ -841,7 +845,6 @@ LIBPERLEXPORT = perl.exp ;; *) $spitshell >>$Makefile <<'!NO!SUBS!' -MINIPERLEXP = $(MINIPERL_EXE) PERLEXPORT = perl.exp @@ -849,7 +852,7 @@ PERLEXPORT = perl.exp ;; esac $spitshell >>$Makefile <<'!NO!SUBS!' -perl.exp: $(MINIPERLEXP) makedef.pl $(CONFIGPM) $(SYM) $(SYMH) +perl.exp: $(MINIPERL_EXE) makedef.pl $(CONFIGPM) $(SYM) $(SYMH) $(MINIPERL) makedef.pl --sort-fold PLATFORM=aix CC_FLAGS="$(OPTIMIZE)" > perl.exp !NO!SUBS! @@ -861,19 +864,6 @@ MINIPERLEXP = miniperl perl5.def: $(MINIPERLEXP) makedef.pl $(CONFIGPM) $(SYM) $(SYMH) miniperl.map $(MINIPERL) makedef.pl PLATFORM=os2 -DPERL_DLL=$(PERL_DLL) CC_FLAGS="$(OPTIMIZE)" > perl5.def -!NO!SUBS! - ;; -cygwin) - $spitshell >>$Makefile <<'!NO!SUBS!' -cygwin.c: cygwin/cygwin.c - $(LNS) cygwin/cygwin.c - -LIBPERL_NONSHR = libperl$(LIB_EXT) - -$(LIBPERL_NONSHR): $(perllib_objs) - $(RMS) $(LIBPERL_NONSHR) - $(AR) rc $(LIBPERL_NONSHR) $(perllib_objs) - !NO!SUBS! ;; esac @@ -974,6 +964,7 @@ $(LIBPERL): $& $(perllib_dep) $(DYNALOADER) $(LIBPERLEXPORT) # b) have the rest of the Makefile depend on the more obvious $(MINIPERL_EXE) $(MINIPERL_EXE): lib/buildcustomize.pl + @touch $(MINIPERL_EXE) !NO!SUBS! @@ -986,22 +977,6 @@ lib/buildcustomize.pl: $& $(miniperl_objs) write_buildcustomize.pl $(miniperl_objs) $(libs) # $(LDLIBPTH) ./miniperl$(HOST_EXE_EXT) -w -Ilib -Idist/Exporter/lib -MExporter -e '' || sh -c 'echo >&2 Failed to build miniperl. Please run make minitest; exit 1' $(MINIPERL) -f write_buildcustomize.pl -!NO!SUBS! - ;; - aix*) - $spitshell >>$Makefile <<'!NO!SUBS!' -lib/buildcustomize.pl: $& $(miniperl_objs) - $(CC) -o $(MINIPERL_EXE) $(CLDFLAGS) $(miniperl_objs) $(libs) - $(LDLIBPTH) ./miniperl$(HOST_EXE_EXT) -w -Ilib -Idist/Exporter/lib -MExporter -e '' || sh -c 'echo >&2 Failed to build miniperl. Please run make minitest; exit 1' - $(MINIPERL) -f write_buildcustomize.pl -!NO!SUBS! - ;; - next4*) - $spitshell >>$Makefile <<'!NO!SUBS!' -lib/buildcustomize.pl: $& $(miniperl_objs) write ldcustomize.pl - $(CC) -o $(MINIPERL_EXE) $(miniperl_objs libs) - $(LDLIBPTH) ./miniperl$(HOST _EXT) -w -Ilib -Idist/Exporter/lib -MExporter -e '' || sh -c 'echo >&2 Failed to build miniperl. Please run make minitest; exit 1' - $(MINIPERL) -f write_buildcustomize.pl !NO!SUBS! ;; darwin*) @@ -1055,7 +1030,7 @@ $(PERL_EXE): $& $(perlmain_dep) $(LIBPERL) $(static_ext) ext.libs $(PERLEXPORT) -@rm -f miniperl.xok !NO!SUBS! - case $osname in + case "$osname" in # In AmigaOS the Perl executable needs to be linked with -ldl, # but none of the other executables should be. amigaos) $spitshell >>$Makefile <<'!NO!SUBS!' @@ -1136,7 +1111,10 @@ $(CONFIGPOD): config.sh $(MINIPERL_EXE) configpm Porting/Glossary lib/Config_git unidatafiles $(unidatafiles) pod/perluniprops.pod: uni.data uni.data: $(MINIPERL_EXE) $(CONFIGPM) lib/unicore/mktables $(nonxs_ext) - touch uni.data + $(MINIPERL) lib/unicore/mktables -C lib/unicore -P pod -maketest -makelist -p +# Commented out so always runs, mktables looks at far more files than we +# can in this makefile to decide if needs to run or not +# touch uni.data # $(PERL_EXE) and ext because pod_lib.pl needs Digest::MD5 # But also this ensures that all extensions are built before we try to scan @@ -1152,9 +1130,9 @@ pod/perlintern.pod: $(MINIPERL_EXE) autodoc.pl embed.fnc pod/perlmodlib.pod: $(MINIPERL_EXE) pod/perlmodlib.PL MANIFEST $(MINIPERL) pod/perlmodlib.PL -q -pod/perl5321delta.pod: pod/perldelta.pod - $(RMS) pod/perl5321delta.pod - $(LNS) perldelta.pod pod/perl5321delta.pod +pod/perl5360delta.pod: pod/perldelta.pod + $(RMS) pod/perl5360delta.pod + $(LNS) perldelta.pod pod/perl5360delta.pod extra.pods: $(MINIPERL_EXE) -@test ! -f extra.pods || rm -f `cat extra.pods` @@ -1273,7 +1251,7 @@ SYMH = perlvars.h intrpvar.h CHMOD_W = chmod +w # The following files are generated automatically -# embed.pl: proto.h embed.h embedvar.h perlapi.h perlapi.c +# embed.pl: proto.h embed.h embedvar.h # opcode.pl: opcode.h opnames.h pp_proto.h # regcomp.pl: regnodes.h # warnings.pl: warnings.h lib/warnings.pm @@ -1374,16 +1352,17 @@ veryclean: _verycleaner _mopup _clobber # Do not 'make _mopup' directly. _mopup: - rm -f *$(OBJ_EXT) *$(LIB_EXT) all perlmain.c opmini.c perlmini.c generate_uudmap$(EXE_EXT) $(generated_headers) + rm -f *$(OBJ_EXT) *$(LIB_EXT) all perlmain.c $(mini_only_src) generate_uudmap$(EXE_EXT) $(generated_headers) -rmdir .depending + -rm *.depends makedepend_file -@test -f extra.pods && rm -f `cat extra.pods` -@test -f vms/README_vms.pod && rm -f vms/README_vms.pod - -rm -f perl.exp ext.libs $(generated_pods) uni.data opmini.o perlmini.o pod/roffitall + -rm -f perl.exp ext.libs $(generated_pods) uni.data $(mini_only_objs) pod/roffitall -rm -f perl.export perl.dll perl.libexp perl.map perl.def -rm -f *perl.xok -rm -f cygwin.c libperl*.def libperl*.dll cygperl*.dll *.exe.stackdump -rm -f $(PERL_EXE) $(MINIPERL_EXE) $(LIBPERL) libperl.* microperl - -rm -f $(DTRACE_H) + -rm -f config.arch config.over $(DTRACE_H) _cleaner1: -cd os2; rm -f Makefile @@ -1400,7 +1379,7 @@ _cleaner1: -rm -f `grep -v ^# mkppport.lst | grep . | sed -e 's/$$/\/ppport.h/'` # Dear POSIX, thanks for making the default to xargs to be -# run once if nothhing is passed in. It is such a great help. +# run once if nothing is passed in. It is such a great help. # Some systems do not support "?", so keep these files separate. @@ -1429,7 +1408,7 @@ _cleaner2: rm -rf pod/perlfunc pod/perlipc -rmdir ext/B/lib -rm -f dist/Time-HiRes/xdefine - rm -f so_locations $(LIBPERL_NONSHR) $(MINIPERL_NONSHR) + rm -f so_locations $(LIBPERL_NONSHR) -rmdir lib/version lib/threads lib/inc/ExtUtils lib/inc lib/encoding -rmdir lib/autodie/exception lib/autodie/Scope lib/autodie lib/XS -rmdir lib/Win32API lib/VMS lib/Unicode/Collate/Locale @@ -1438,20 +1417,21 @@ _cleaner2: -rmdir lib/Test2/IPC/Driver lib/Test2/IPC lib/Test2/Hub/Interceptor -rmdir lib/Test2/Hub lib/Test2/Formatter lib/Test2/EventFacet/Info -rmdir lib/Test2/EventFacet lib/Test2/Event/TAP lib/Test2/Event - -rmdir lib/Test2/API lib/Test2 lib/Test/use lib/Test/Tester - -rmdir lib/Test/Builder/Tester lib/Test/Builder/IO lib/Test/Builder - -rmdir lib/Test lib/Term lib/TAP/Parser/YAMLish - -rmdir lib/TAP/Parser/SourceHandler lib/TAP/Parser/Scheduler - -rmdir lib/TAP/Parser/Result lib/TAP/Parser/Iterator lib/TAP/Parser - -rmdir lib/TAP/Harness lib/TAP/Formatter/File - -rmdir lib/TAP/Formatter/Console lib/TAP/Formatter lib/TAP - -rmdir lib/Sys/Syslog lib/Sys lib/Sub lib/Search lib/Scalar - -rmdir lib/Pod/Text lib/Pod/Simple lib/Pod/Perldoc lib/PerlIO/via - -rmdir lib/PerlIO lib/Perl lib/Parse/CPAN lib/Parse lib/Params - -rmdir lib/OpenBSD lib/Net/FTP lib/Module/Load lib/Module/CoreList - -rmdir lib/Module lib/Memoize lib/Math/BigInt lib/Math/BigFloat - -rmdir lib/Math lib/MIME lib/Locale/Maketext lib/Locale lib/List/Util - -rmdir lib/List lib/JSON/PP lib/JSON lib/IPC lib/IO/Uncompress/Adapter + -rmdir lib/Test2/API/InterceptResult lib/Test2/API lib/Test2 + -rmdir lib/Test/use lib/Test/Tester lib/Test/Builder/Tester + -rmdir lib/Test/Builder/IO lib/Test/Builder lib/Test lib/Term + -rmdir lib/TAP/Parser/YAMLish lib/TAP/Parser/SourceHandler + -rmdir lib/TAP/Parser/Scheduler lib/TAP/Parser/Result + -rmdir lib/TAP/Parser/Iterator lib/TAP/Parser lib/TAP/Harness + -rmdir lib/TAP/Formatter/File lib/TAP/Formatter/Console + -rmdir lib/TAP/Formatter lib/TAP lib/Sys/Syslog lib/Sys lib/Sub + -rmdir lib/Search lib/Scalar lib/Pod/Text lib/Pod/Simple + -rmdir lib/Pod/Perldoc lib/Pod/Html lib/PerlIO/via lib/PerlIO lib/Perl + -rmdir lib/Parse/CPAN lib/Parse lib/Params lib/Net/FTP lib/Module/Load + -rmdir lib/Module/CoreList lib/Module lib/Memoize lib/Math/BigRat + -rmdir lib/Math/BigInt lib/Math/BigFloat lib/Math lib/MIME + -rmdir lib/Locale/Maketext lib/Locale lib/List/Util lib/List + -rmdir lib/JSON/PP lib/JSON lib/IPC lib/IO/Uncompress/Adapter -rmdir lib/IO/Uncompress lib/IO/Socket lib/IO/Compress/Zlib -rmdir lib/IO/Compress/Zip lib/IO/Compress/Gzip lib/IO/Compress/Base -rmdir lib/IO/Compress/Adapter lib/IO/Compress lib/IO @@ -1499,7 +1479,7 @@ cscope.out cscope: $(c) $(h) # The README below ensures that the dependency list is never empty and # that when MAKEDEPEND is empty $(FIRSTMAKEFILE) doesn't need rebuilding. -MAKEDEPEND = Makefile makedepend +MAKEDEPEND = Makefile makedepend_file makedepend $(FIRSTMAKEFILE): README $(MAKEDEPEND) $(MAKE) depend MAKEDEPEND= @@ -1520,6 +1500,9 @@ $spitshell >>$Makefile <<'!NO!SUBS!' depend: makedepend $(DTRACE_H) $(generated_headers) sh ./makedepend MAKE="$(MAKE)" cflags +.c.c.depends: + sh ./makedepend_file $< $@ cflags + .PHONY: test check test_prep test_prep_nodll test_prep_pre \ test_prep_reonly test_tty test-tty test_notty test-notty \ test_harness test_harness_notty minitest test-reonly _test @@ -1675,13 +1658,13 @@ test_harness_notty: test_prep HARNESS_NOTTY=1 TESTFILE=harness $(RUN_TESTS) choose test_reonly test-reonly: test_prep_reonly - TEST_ARGS='-re \bre\/' TESTFILE=harness $(RUN_TESTS) choose + TEST_ARGS='re/*.t ext/re/t/*.t' TESTFILE=harness $(RUN_TESTS) choose # Porting tests (well-formedness of pod, manifest, etc) test_porting test-porting: test_prep - cd t && $(RUN_PERL) harness porting/*.t ../lib/diagnostics.t + TEST_ARGS='porting/*.t lib/diagnostics.t' TESTFILE=harness $(RUN_TESTS) choose !NO!SUBS! @@ -1741,13 +1724,16 @@ distcheck: FORCE TAGS: $(c1) $(c2) $(c3) $(c4) $(c5) $(h) etags $(c1) $(c2) $(c3) $(c4) $(c5) $(h) +!NO!SUBS! + +$spitshell >>$Makefile < -#include -#include - - - -void ImportFromCLIB (unsigned int nlmHandle, void** psymbol, char* symbolName) -{ - *psymbol = ImportSymbol(nlmHandle, symbolName); - if (*psymbol == NULL) - { - ConsolePrintf("Symbol %s not found, unable to continue\n", symbolName); - exit(1); - } -} - - -void fnInitGpfGlobals(void) -{ - unsigned int nlmHandle = GetNLMHandle(); - - ImportFromCLIB(nlmHandle, &gpf___get_stdin, "__get_stdin"); - ImportFromCLIB(nlmHandle, &gpf___get_stdout, "__get_stdout"); - ImportFromCLIB(nlmHandle, &gpf___get_stderr, "__get_stderr"); - ImportFromCLIB(nlmHandle, &gpf_clearerr, "clearerr"); - ImportFromCLIB(nlmHandle, &gpf_fclose, "fclose"); - ImportFromCLIB(nlmHandle, &gpf_feof, "feof"); - ImportFromCLIB(nlmHandle, &gpf_ferror, "ferror"); - ImportFromCLIB(nlmHandle, &gpf_fflush, "fflush"); - ImportFromCLIB(nlmHandle, &gpf_fgetc, "fgetc"); - ImportFromCLIB(nlmHandle, &gpf_fgetpos, "fgetpos"); - ImportFromCLIB(nlmHandle, &gpf_fgets, "fgets"); - ImportFromCLIB(nlmHandle, &gpf_fopen, "fopen"); - ImportFromCLIB(nlmHandle, &gpf_fputc, "fputc"); - ImportFromCLIB(nlmHandle, &gpf_fputs, "fputs"); - ImportFromCLIB(nlmHandle, &gpf_fread, "fread"); - ImportFromCLIB(nlmHandle, &gpf_freopen, "freopen"); - ImportFromCLIB(nlmHandle, &gpf_fscanf, "fscanf"); - ImportFromCLIB(nlmHandle, &gpf_fseek, "fseek"); - ImportFromCLIB(nlmHandle, &gpf_fsetpos, "fsetpos"); - ImportFromCLIB(nlmHandle, &gpf_ftell, "ftell"); - ImportFromCLIB(nlmHandle, &gpf_fwrite, "fwrite"); - ImportFromCLIB(nlmHandle, &gpf_getc, "getc"); - ImportFromCLIB(nlmHandle, &gpf_getchar, "getchar"); - ImportFromCLIB(nlmHandle, &gpf_gets, "gets"); - ImportFromCLIB(nlmHandle, &gpf_perror, "perror"); - ImportFromCLIB(nlmHandle, &gpf_putc, "putc"); - ImportFromCLIB(nlmHandle, &gpf_putchar, "putchar"); - ImportFromCLIB(nlmHandle, &gpf_puts, "puts"); - ImportFromCLIB(nlmHandle, &gpf_rename, "rename"); - ImportFromCLIB(nlmHandle, &gpf_rewind, "rewind"); - ImportFromCLIB(nlmHandle, &gpf_scanf, "scanf"); - ImportFromCLIB(nlmHandle, &gpf_setbuf, "setbuf"); - ImportFromCLIB(nlmHandle, &gpf_setvbuf, "setvbuf"); - ImportFromCLIB(nlmHandle, &gpf_sscanf, "sscanf"); - ImportFromCLIB(nlmHandle, &gpf_tmpfile, "tmpfile"); - ImportFromCLIB(nlmHandle, &gpf_tmpnam, "tmpnam"); - ImportFromCLIB(nlmHandle, &gpf_ungetc, "ungetc"); - ImportFromCLIB(nlmHandle, &gpf_vfscanf, "vfscanf"); - ImportFromCLIB(nlmHandle, &gpf_vscanf, "vscanf"); - ImportFromCLIB(nlmHandle, &gpf_vsscanf, "vsscanf"); - ImportFromCLIB(nlmHandle, &gpf_fdopen, "fdopen"); - ImportFromCLIB(nlmHandle, &gpf_fileno, "fileno"); - ImportFromCLIB(nlmHandle, &gpf_cgets, "cgets"); - ImportFromCLIB(nlmHandle, &gpf_cprintf, "cprintf"); - ImportFromCLIB(nlmHandle, &gpf_cputs, "cputs"); - ImportFromCLIB(nlmHandle, &gpf_cscanf, "cscanf"); - ImportFromCLIB(nlmHandle, &gpf_fcloseall, "fcloseall"); - ImportFromCLIB(nlmHandle, &gpf_fgetchar, "fgetchar"); - ImportFromCLIB(nlmHandle, &gpf_flushall, "flushall"); - ImportFromCLIB(nlmHandle, &gpf_fputchar, "fputchar"); - ImportFromCLIB(nlmHandle, &gpf_getch, "getch"); - ImportFromCLIB(nlmHandle, &gpf_getche, "getche"); - ImportFromCLIB(nlmHandle, &gpf_putch, "putch"); - ImportFromCLIB(nlmHandle, &gpf_ungetch, "ungetch"); - ImportFromCLIB(nlmHandle, &gpf_vcprintf, "vcprintf"); - ImportFromCLIB(nlmHandle, &gpf_vcscanf, "vcscanf"); - - ImportFromCLIB(nlmHandle, &gpf_memchr, "memchr"); - ImportFromCLIB(nlmHandle, &gpf_memcmp, "memcmp"); - ImportFromCLIB(nlmHandle, &gpf_memcpy, "memcpy"); - ImportFromCLIB(nlmHandle, &gpf_memmove, "memmove"); - ImportFromCLIB(nlmHandle, &gpf_memset, "memset"); - ImportFromCLIB(nlmHandle, &gpf_memicmp, "memicmp"); - - ImportFromCLIB(nlmHandle, &gpf_strerror, "strerror"); - ImportFromCLIB(nlmHandle, &gpf_strtok_r, "strtok_r"); - - ImportFromCLIB(nlmHandle, &gpf_strcpy, "strcpy"); - ImportFromCLIB(nlmHandle, &gpf_strcat, "strcat"); - ImportFromCLIB(nlmHandle, &gpf_strchr, "strchr"); - ImportFromCLIB(nlmHandle, &gpf_strstr, "strstr"); - ImportFromCLIB(nlmHandle, &gpf_strcoll, "strcoll"); - ImportFromCLIB(nlmHandle, &gpf_strcspn, "strcspn"); - ImportFromCLIB(nlmHandle, &gpf_strpbrk, "strpbrk"); - ImportFromCLIB(nlmHandle, &gpf_strrchr, "strrchr"); - ImportFromCLIB(nlmHandle, &gpf_strrev, "strrev"); - ImportFromCLIB(nlmHandle, &gpf_strspn, "strspn"); - ImportFromCLIB(nlmHandle, &gpf_strupr, "strupr"); - ImportFromCLIB(nlmHandle, &gpf_strxfrm, "strxfrm"); - ImportFromCLIB(nlmHandle, &gpf_strcmp, "strcmp"); - ImportFromCLIB(nlmHandle, &gpf_stricmp, "stricmp"); - ImportFromCLIB(nlmHandle, &gpf_strtok, "strtok"); - ImportFromCLIB(nlmHandle, &gpf_strlen, "strlen"); - ImportFromCLIB(nlmHandle, &gpf_strncpy, "strncpy"); - ImportFromCLIB(nlmHandle, &gpf_strncat, "strncat"); - ImportFromCLIB(nlmHandle, &gpf_strncmp, "strncmp"); - ImportFromCLIB(nlmHandle, &gpf_strcmpi, "strcmpi"); - ImportFromCLIB(nlmHandle, &gpf_strnicmp, "strnicmp"); - ImportFromCLIB(nlmHandle, &gpf_strdup, "strdup"); - ImportFromCLIB(nlmHandle, &gpf_strlist, "strlist"); - ImportFromCLIB(nlmHandle, &gpf_strlwr, "strlwr"); - ImportFromCLIB(nlmHandle, &gpf_strnset, "strnset"); - ImportFromCLIB(nlmHandle, &gpf_strset, "strset"); - ImportFromCLIB(nlmHandle, &gpf_strtok_r, "strtok_r"); - ImportFromCLIB(nlmHandle, &gpf_printf, "printf"); - ImportFromCLIB(nlmHandle, &gpf_fprintf, "fprintf"); - ImportFromCLIB(nlmHandle, &gpf_sprintf, "sprintf"); - ImportFromCLIB(nlmHandle, &gpf_vprintf, "vprintf"); - ImportFromCLIB(nlmHandle, &gpf_vfprintf, "vfprintf"); - ImportFromCLIB(nlmHandle, &gpf_vsprintf, "vsprintf"); - -} - diff --git a/gnu/usr.bin/perl/NetWare/CLIBstuf.h b/gnu/usr.bin/perl/NetWare/CLIBstuf.h deleted file mode 100644 index 78671fd1826..00000000000 --- a/gnu/usr.bin/perl/NetWare/CLIBstuf.h +++ /dev/null @@ -1,40 +0,0 @@ - -/* - * Copyright © 2001 Novell, Inc. All Rights Reserved. - * - * You may distribute under the terms of either the GNU General Public - * License or the Artistic License, as specified in the README file. - * - */ - -/* - * FILENAME : CLIBstuf.h - * DESCRIPTION : The purpose of clibstuf is to make sure that Perl, cgi2perl and - * all the perl extension nlm's (*.NLP) use the Novell Netware CLIB versions - * of standard functions. This code loads up a whole bunch of function pointers - * to point at the standard CLIB functions. - * Author : HYAK - * Date : January 2001. - * - */ - - - -#ifndef __CLIBstuf_H__ -#define __CLIBstuf_H__ - - -#ifdef __cplusplus - extern "C" - { -#endif - - void fnInitGpfGlobals(void); - -#ifdef __cplusplus - } -#endif - - -#endif // __CLIBstuf_H__ - diff --git a/gnu/usr.bin/perl/NetWare/MP.imp b/gnu/usr.bin/perl/NetWare/MP.imp deleted file mode 100644 index fc382914cf9..00000000000 --- a/gnu/usr.bin/perl/NetWare/MP.imp +++ /dev/null @@ -1,5 +0,0 @@ -# MPK Symbols not defined in the sdk import files -# Created by: Guruprasad on 25th May 2000 -kSemaphoreTimedWait, -kEnterNetWare, -kDelayThread diff --git a/gnu/usr.bin/perl/NetWare/Main.c b/gnu/usr.bin/perl/NetWare/Main.c deleted file mode 100644 index 5116cbcfe1b..00000000000 --- a/gnu/usr.bin/perl/NetWare/Main.c +++ /dev/null @@ -1,182 +0,0 @@ - -/* - * Copyright © 2001 Novell, Inc. All Rights Reserved. - * - * You may distribute under the terms of either the GNU General Public - * License or the Artistic License, as specified in the README file. - * - */ - -/* - * FILENAME : Main.c - * DESCRIPTION : The purpose of clibstuf is to make sure that Perl, cgi2perl and - * all the perl extension nlm's (*.NLP) use the Novell Netware CLIB versions - * of standard functions. This code loads up a whole bunch of function pointers - * to point at the standard CLIB functions. - * Author : HYAK - * Date : January 2001. - * - */ - - - -#define DEFINE_GPF - -#include -#include -#include - -#include "string.h" // Our version of string.h will include clibstr.h -#include "stdio.h" // Our version of stdio.h will include clibsdio.h -#include "clibstuf.h" -#include "clibstuf.h" - -#ifdef MPK_ON - #include - #include -#endif //MPK_ON - - - -/*============================================================================================ - - Function : main - - Description : This is called as the first step in an extension. - - Parameters : None - - Returns : Nothing. - -==============================================================================================*/ - -void main(void) -{ - fnInitGpfGlobals(); // For importing the CLIB calls in place of the Watcom calls - SynchronizeStart(); // Don't allow anything else to happen until all the symbols are imported - #ifdef MPK_ON - ExitThread(TSR_THREAD, 0); - #else - ExitThread(TSR_THREAD, 0); - #endif -} - - -void ImportFromCLIB (unsigned int nlmHandle, void** psymbol, char* symbolName) -{ - *psymbol = ImportSymbol(nlmHandle, symbolName); - if (*psymbol == NULL) - { - ConsolePrintf("Symbol %s not found, unable to continue\n", symbolName); - exit(1); - } -} - - -void fnInitGpfGlobals(void) -{ - unsigned int nlmHandle = GetNLMHandle(); - - ImportFromCLIB(nlmHandle, &gpf___get_stdin, "__get_stdin"); - ImportFromCLIB(nlmHandle, &gpf___get_stdout, "__get_stdout"); - ImportFromCLIB(nlmHandle, &gpf___get_stderr, "__get_stderr"); - ImportFromCLIB(nlmHandle, &gpf_clearerr, "clearerr"); - ImportFromCLIB(nlmHandle, &gpf_fclose, "fclose"); - ImportFromCLIB(nlmHandle, &gpf_feof, "feof"); - ImportFromCLIB(nlmHandle, &gpf_ferror, "ferror"); - ImportFromCLIB(nlmHandle, &gpf_fflush, "fflush"); - ImportFromCLIB(nlmHandle, &gpf_fgetc, "fgetc"); - ImportFromCLIB(nlmHandle, &gpf_fgetpos, "fgetpos"); - ImportFromCLIB(nlmHandle, &gpf_fgets, "fgets"); - ImportFromCLIB(nlmHandle, &gpf_fopen, "fopen"); - ImportFromCLIB(nlmHandle, &gpf_fputc, "fputc"); - ImportFromCLIB(nlmHandle, &gpf_fputs, "fputs"); - ImportFromCLIB(nlmHandle, &gpf_fread, "fread"); - ImportFromCLIB(nlmHandle, &gpf_freopen, "freopen"); - ImportFromCLIB(nlmHandle, &gpf_fscanf, "fscanf"); - ImportFromCLIB(nlmHandle, &gpf_fseek, "fseek"); - ImportFromCLIB(nlmHandle, &gpf_fsetpos, "fsetpos"); - ImportFromCLIB(nlmHandle, &gpf_ftell, "ftell"); - ImportFromCLIB(nlmHandle, &gpf_fwrite, "fwrite"); - ImportFromCLIB(nlmHandle, &gpf_getc, "getc"); - ImportFromCLIB(nlmHandle, &gpf_getchar, "getchar"); - ImportFromCLIB(nlmHandle, &gpf_gets, "gets"); - ImportFromCLIB(nlmHandle, &gpf_perror, "perror"); - ImportFromCLIB(nlmHandle, &gpf_putc, "putc"); - ImportFromCLIB(nlmHandle, &gpf_putchar, "putchar"); - ImportFromCLIB(nlmHandle, &gpf_puts, "puts"); - ImportFromCLIB(nlmHandle, &gpf_rename, "rename"); - ImportFromCLIB(nlmHandle, &gpf_rewind, "rewind"); - ImportFromCLIB(nlmHandle, &gpf_scanf, "scanf"); - ImportFromCLIB(nlmHandle, &gpf_setbuf, "setbuf"); - ImportFromCLIB(nlmHandle, &gpf_setvbuf, "setvbuf"); - ImportFromCLIB(nlmHandle, &gpf_sscanf, "sscanf"); - ImportFromCLIB(nlmHandle, &gpf_tmpfile, "tmpfile"); - ImportFromCLIB(nlmHandle, &gpf_tmpnam, "tmpnam"); - ImportFromCLIB(nlmHandle, &gpf_ungetc, "ungetc"); - ImportFromCLIB(nlmHandle, &gpf_vfscanf, "vfscanf"); - ImportFromCLIB(nlmHandle, &gpf_vscanf, "vscanf"); - ImportFromCLIB(nlmHandle, &gpf_vsscanf, "vsscanf"); - ImportFromCLIB(nlmHandle, &gpf_fdopen, "fdopen"); - ImportFromCLIB(nlmHandle, &gpf_fileno, "fileno"); - ImportFromCLIB(nlmHandle, &gpf_cgets, "cgets"); - ImportFromCLIB(nlmHandle, &gpf_cprintf, "cprintf"); - ImportFromCLIB(nlmHandle, &gpf_cputs, "cputs"); - ImportFromCLIB(nlmHandle, &gpf_cscanf, "cscanf"); - ImportFromCLIB(nlmHandle, &gpf_fcloseall, "fcloseall"); - ImportFromCLIB(nlmHandle, &gpf_fgetchar, "fgetchar"); - ImportFromCLIB(nlmHandle, &gpf_flushall, "flushall"); - ImportFromCLIB(nlmHandle, &gpf_fputchar, "fputchar"); - ImportFromCLIB(nlmHandle, &gpf_getch, "getch"); - ImportFromCLIB(nlmHandle, &gpf_getche, "getche"); - ImportFromCLIB(nlmHandle, &gpf_putch, "putch"); - ImportFromCLIB(nlmHandle, &gpf_ungetch, "ungetch"); - ImportFromCLIB(nlmHandle, &gpf_vcprintf, "vcprintf"); - ImportFromCLIB(nlmHandle, &gpf_vcscanf, "vcscanf"); - - ImportFromCLIB(nlmHandle, &gpf_memchr, "memchr"); - ImportFromCLIB(nlmHandle, &gpf_memcmp, "memcmp"); - ImportFromCLIB(nlmHandle, &gpf_memcpy, "memcpy"); - ImportFromCLIB(nlmHandle, &gpf_memmove, "memmove"); - ImportFromCLIB(nlmHandle, &gpf_memset, "memset"); - ImportFromCLIB(nlmHandle, &gpf_memicmp, "memicmp"); - - ImportFromCLIB(nlmHandle, &gpf_strerror, "strerror"); - ImportFromCLIB(nlmHandle, &gpf_strtok_r, "strtok_r"); - - ImportFromCLIB(nlmHandle, &gpf_strcpy, "strcpy"); - ImportFromCLIB(nlmHandle, &gpf_strcat, "strcat"); - ImportFromCLIB(nlmHandle, &gpf_strchr, "strchr"); - ImportFromCLIB(nlmHandle, &gpf_strstr, "strstr"); - ImportFromCLIB(nlmHandle, &gpf_strcoll, "strcoll"); - ImportFromCLIB(nlmHandle, &gpf_strcspn, "strcspn"); - ImportFromCLIB(nlmHandle, &gpf_strpbrk, "strpbrk"); - ImportFromCLIB(nlmHandle, &gpf_strrchr, "strrchr"); - ImportFromCLIB(nlmHandle, &gpf_strrev, "strrev"); - ImportFromCLIB(nlmHandle, &gpf_strspn, "strspn"); - ImportFromCLIB(nlmHandle, &gpf_strupr, "strupr"); - ImportFromCLIB(nlmHandle, &gpf_strxfrm, "strxfrm"); - ImportFromCLIB(nlmHandle, &gpf_strcmp, "strcmp"); - ImportFromCLIB(nlmHandle, &gpf_stricmp, "stricmp"); - ImportFromCLIB(nlmHandle, &gpf_strtok, "strtok"); - ImportFromCLIB(nlmHandle, &gpf_strlen, "strlen"); - ImportFromCLIB(nlmHandle, &gpf_strncpy, "strncpy"); - ImportFromCLIB(nlmHandle, &gpf_strncat, "strncat"); - ImportFromCLIB(nlmHandle, &gpf_strncmp, "strncmp"); - ImportFromCLIB(nlmHandle, &gpf_strcmpi, "strcmpi"); - ImportFromCLIB(nlmHandle, &gpf_strnicmp, "strnicmp"); - ImportFromCLIB(nlmHandle, &gpf_strdup, "strdup"); - ImportFromCLIB(nlmHandle, &gpf_strlist, "strlist"); - ImportFromCLIB(nlmHandle, &gpf_strlwr, "strlwr"); - ImportFromCLIB(nlmHandle, &gpf_strnset, "strnset"); - ImportFromCLIB(nlmHandle, &gpf_strset, "strset"); - ImportFromCLIB(nlmHandle, &gpf_strtok_r, "strtok_r"); - ImportFromCLIB(nlmHandle, &gpf_printf, "printf"); - ImportFromCLIB(nlmHandle, &gpf_fprintf, "fprintf"); - ImportFromCLIB(nlmHandle, &gpf_sprintf, "sprintf"); - ImportFromCLIB(nlmHandle, &gpf_vprintf, "vprintf"); - ImportFromCLIB(nlmHandle, &gpf_vfprintf, "vfprintf"); - ImportFromCLIB(nlmHandle, &gpf_vsprintf, "vsprintf"); - -} - diff --git a/gnu/usr.bin/perl/NetWare/Makefile b/gnu/usr.bin/perl/NetWare/Makefile deleted file mode 100644 index d6672d2bc27..00000000000 --- a/gnu/usr.bin/perl/NetWare/Makefile +++ /dev/null @@ -1,1409 +0,0 @@ -## -## Makefile to build Perl on NetWare using Microsoft NMAKE and CodeWarrior tools -## -## This will build perl.nlm, perl.lib and extensions called NLMs -## - -## -## Please read README.netware before starting -## - -## -## Build configuration. Edit the values below to suit your needs. -## - -## This file is created by using the makefile that creates Windows Perl as the reference -## Author: -## Date Created: 13th July 2000 -## Date Modified: 21st March 2002 -# Name of the NLM - - -NLM_NAME = perl.nlm -NLM_NAME8 = Perl - -MAKE_ACTION = Build - -# Flags -DBG_FLAG = -DDEBUGON - -NW_FLAGS = -DNETWARE -DNLM_PLATFORM -DNETDB_USE_INTERNET - -REL_DIR = Release -DEB_DIR = Debug - - -!ifndef NLMSDKBASE -!message "Run bat\SetNWBld.bat to set the NetWare SDK before continuing.\n" -!error -!endif # !ifndef NLMSDKBASE - -!ifndef CODEWAR # !ifdef CODEWAR -!message "CodeWarrior tools base directory is not defined. Run bat\setnwbld.bat before proceeding" -!error -!endif # !ifdef CODEWAR - -!ifndef MAKE_TYPE -!message "Run bat\buildtype.bat to set the build type before continuing.\n" -!error -!endif # !ifndef MAKE_TYPE - -!ifdef USE_MPK -MPKFLAGS = -DMPK_ON -DIAPX386 -MPKMESSAGE = MPK Build... -XDCTOOL = mpkxdc -!ifndef MPKBASE -!message "Run bat\setmpksdk.bat to set the NetWare MPK SDK before continuing.\n" -!error -!endif # !ifndef MPKBASE -NLM_INCLUDE_MP = -I$(MPKBASE)\include -MPKTOOL = $(MPKBASE)\$(XDCTOOL) -!else # !ifdef USE_MPK -MPKMESSAGE = Non MPK Build... -NLM_INCLUDE_MP = -MPKTOOL = -!endif # !ifdef USE_MPK - -#!ifndef SECURITYBASE -#!message "Run bat\SetSecSdk.bat to set the Security path before continuing.\n" -#!error -#!endif # !ifndef SECURITYBASE - -#!ifndef UCSINC -#!message "Run bat\BldNWExt.bat to set the UCS Include path before continuing.\n" -#!error -#!endif # !ifndef UCSINC - -NLMIMPORTS = $(NLMSDKBASE)\imports - -!ifdef SECURITYBASE -SECURITY_IMPORTS = $(SECURITYBASE)\imports -!endif # !ifdef SECURITYBASE - -!ifndef NLM_VERSION -NLM_VERSION = 3,20,0 -!endif - - -# Here comes the CW tools - TO BE FILLED TO BUILD WITH CW - -MODULE_DESC = "Perl 5.32.1 for NetWare" -CCTYPE = CodeWarrior -C_COMPILER = mwccnlm -c -CPP_COMPILER = mwccnlm -LINK = mwldnlm -LD = mwldnlm -NLM_LIB = mwldnlm -type library -TOOL_HEADERS = -TOOL_PATH = -CWCPPFLAGS = -cpp_exceptions on -wchar_t off -bool on -w on -ansi off -CCFLAGS = -maxerrors 25 -processor Pentium -align packed \ - -w nounusedarg -msext on \ - -DN_PLAT_NLM -DNLM=1 -D__NO_MATH_OPS -msgstyle gcc -COMPILER_FLAG = -d NETWARE -ERROR_FLAG = -sym on -sym codeview4 -sym internal -LDFLAGS = -type generic -stacksize 16384 -zerobss \ - -nofail -msgstyle gcc -nostderr -w on \ - -nlmversion $(NLM_VERSION) \ - -copy "Copyright (C) 2000-01\, 2002 Novell\, Inc. All Rights Reserved." - -# Debug flags comes here - Not mandatory - required only for debug build -!if "$(MAKE_TYPE)"=="Debug" -BLDDIR = $(DEB_DIR) -BLDMESG = Debug version, -!ifdef USE_D2 -BS_CFLAGS = -opt off -inline off -sym on -sym codeview4 -sym internal -DDEBUGGING -DDKFBPON -BLDMESG = $(BLDMESG) Using /d2 option -!ifdef NLM_NAME8 -LDFLAGS = $(LDFLAGS) -sym on -sym codeview4 -sym internal -osym $(MAKE_TYPE)\$(NLM_NAME8).sym -!else # !ifdef NLM_NAME8 -LDFLAGS = $(LDFLAGS) -sym on -sym codeview4 -sym internal -osym $(MAKE_TYPE)\$(NLM_NAME).sym -!endif # !ifdef NLM_NAME8 -!else # !ifdef USE_D2 -BS_CFLAGS = -opt off -inline off -sym on -sym codeview4 -sym internal -DDEBUGGING -DDKFBPON -BLDMESG = $(BLDMESG) Using /d1 option -!ifdef NLM_NAME8 -LDFLAGS = $(LDFLAGS) -sym on -sym codeview4 -sym internal -osym $(MAKE_TYPE)\$(NLM_NAME8).sym -!else # !ifdef NLM_NAME8 -LDFLAGS = $(LDFLAGS) -sym on -sym codeview4 -sym internal -osym $(MAKE_TYPE)\$(NLM_NAME).sym -!endif # !ifdef NLM_NAME8 -!endif # !ifdef USE_D2 -!else # !if "$(MAKE_TYPE)"=="Debug" -BLDDIR = $(REL_DIR) -BLDMESG = Release version -##BS_CFLAGS = -opt speed -inline smart -inline auto -sym off -BS_CFLAGS = -!endif # !if "$(MAKE_TYPE)"=="Debug" - - -ADD_LOCDEFS = -DPERL_CORE - -NLM_INCLUDE = -I$(NLMSDKBASE)\include -NLM_INCLUDE_NLM = -I$(NLMSDKBASE)\include\nlm -NLM_INCLUDE_NLM_SYS = -I$(NLMSDKBASE)\include\nlm\sys -NLM_INCLUDE_OBSLETE = -I$(NLMSDKBASE)\include\nlm\obsolete - -!ifdef SECURITYBASE -SECURITY_INCLUDE = -I$(SECURITYBASE)\include -!endif #!ifdef SECURITYBASE - -!ifdef UCSINC -NLM_INCLUDE_UCS = -I$(UCSINC) -!endif #!ifndef UCSINC - -!if "$(NW_EXTNS)"=="yes" -INCLUDE_NW = -I.\include -!endif - - -INC_PREV = -I.. -INC_THIS = -I. - - -NLM_INCLUDE_PATH = $(NLM_INCLUDE) $(NLM_INCLUDE_NLM) $(NLM_INCLUDE_NLM_SYS) $(NLM_INCLUDE_OBSLETE) \ - $(NLM_INCLUDE_MP) $(TOOL_HEADERS) - -!ifdef SECURITYBASE -NLM_INCLUDE_PATH = $(NLM_INCLUDE_PATH) $(SECURITY_INCLUDE) -!endif #!ifdef SECURITYBASE - -!ifdef UCSINC -NLM_INCLUDE_PATH = $(NLM_INCLUDE_PATH) $(NLM_INCLUDE_UCS) -!endif #!ifndef UCSINC - -INCLUDE = $(INC_THIS) $(INC_PREV) -I- $(NLM_INCLUDE_PATH) - -PATH = $(PATH);$(TOOL_PATH) - -NLM_INCLUDES = -I$(COREDIR) $(INCLUDE_NW) - -CCFLAGS = $(CCFLAGS) $(INCLUDE) - -COMPLER_FLAGS = $(BS_CFLAGS) $(ADD_BUILDOPT) $(NW_FLAGS) $(COMPILER_FLAG) $(MPKFLAGS) $(CCFLAGS) - - -# Source file list -NW_H_FILES = \ - .\iperlhost.h \ - .\interface.h \ - .\netware.h \ - .\nw5iop.h \ - .\nw5sck.h \ - .\nwpipe.h \ - .\nwplglob.h \ - .\nwtinfo.h \ - .\nwutil.h \ - .\nwhashcls.h \ - -NW_HOST_H_FILES = \ - .\iperlhost.h \ - .\interface.h \ - .\netware.h \ - .\nw5sck.h \ - .\nwperlhost.h \ - - -CLIB_H_FILES = \ - .\clibsdio.h \ - .\clibstr.h \ - .\clibstuf.h \ - .\stdio.h \ - .\string.h \ - -NW_SRC = \ - .\CLIBstuf.c \ - .\sv_nw.c \ - .\nw5.c \ - .\nw5sck.c \ - .\nw5thread.c \ - .\nwmain.c \ - .\nwpipe.c \ - .\nwplglob.c \ - .\nwtinfo.c \ - .\nwutil.c \ - -NW_CPP_SRC = \ - .\nwhashcls.cpp \ - .\interface.cpp \ - .\perllib.cpp \ - -EXT_MAIN_SRC = \ - .\Main.c \ - -PERL_IO_SRC = \ - ..\perlio.c - -CLIBSTUF_OBJ = \ - .\CLIBstuf.obj - -#PERL_TMP_OBJ = $(PERL_TEMP_SRC:.c=.obj) -NW_SRC_OBJ = $(NW_SRC:.c=.obj) -NW_CPP_SRC_OBJ = $(NW_CPP_SRC:.cpp=.obj) -NLM_MICROCORE_OBJ = $(MICROCORE_SRC:.c=.obj) -PERL_LIB_OBJ = $(PERL_LIB_SRC:.c=.obj) -PERL_IO_OBJ = $(PERL_IO_SRC:.c=.obj) -NLM_CORE_OBJ = $(NLM_MICROCORE_OBJ) -EXT_MAIN_OBJ = $(EXT_MAIN_SRC:.c=.obj) - -# For dependency checking -# $(BLDDIR) in place of Release or Debug is not working, should look into this - sgp -!if "$(BLDDIR)"=="Release" -NLM_OBJ = $(NLM_CORE_OBJ:..\=.\Release\) -NEWTARE_OBJ_DEP = $(NW_SRC_OBJ:.\=.\Release\) -NEWTARE_CPP_OBJ_DEP = $(NW_CPP_SRC_OBJ:.\=.\Release\) -PERL_LIB_OBJ_DEP = $(PERL_LIB_OBJ:.\=.\Release\) -PERL_IO_OBJ_DEP = $(PERL_IO_OBJ:..\=.\Release\) -!else -NLM_OBJ = $(NLM_CORE_OBJ:..\=.\Debug\) -NEWTARE_OBJ_DEP = $(NW_SRC_OBJ:.\=.\Debug\) -NEWTARE_CPP_OBJ_DEP = $(NW_CPP_SRC_OBJ:.\=.\Debug\) -PERL_LIB_OBJ_DEP = $(PERL_LIB_OBJ:.\=.\Debug\) -PERL_IO_OBJ_DEP = $(PERL_IO_OBJ:..\=.\Debug\) -!endif - -# Symbol base_import & version added for NETWARE -NW_CFG_VARS = \ - "INST_DRV=$(INST_DRV)" \ - "INST_TOP=$(INST_TOP)" \ - "INST_VER=$(INST_VER)" \ - "INST_ARCH=$(INST_ARCH)" \ - "INST_NW_TOP1=$(INST_NW_TOP1)" \ - "INST_NW_TOP2=$(INST_NW_TOP2)" \ - "INST_NW_VER=$(INST_NW_VER)" \ - "archname=$(ARCHNAME)" \ - "cc=$(C_COMPILER)" \ - "ar=$(LINK)" \ - "ccflags=$(COMPLER_FLAGS)" \ - "cf_email=$(EMAIL)" \ - "d_crypt=$(D_CRYPT)" \ - "d_mymalloc=$(PERL_MALLOC)" \ -# "libs=$(LIBFILES)" \ - "incpath=$(NLM_INCLUDE_PATH)" \ - "libperl=$(PERLIMPLIB:..\=)" \ - "libpth=$(LIBPATH)" \ -# "libc=$(LIBC)" \ - "make=nmake" \ - "static_ext=$(STATIC_EXT)" \ - "dynamic_ext=$(DYNAMIC_EXT)" \ - "nonxs_ext=$(NONXS_EXT)" \ - "useithreads=$(USE_ITHREADS)" \ - "usemultiplicity=$(USE_MULTI)" \ - "ld=$(LINK)" \ - "base_import=$(BASE_IMPORT_FILES)" \ - "LINK_FLAGS=$(LINK_FLAGS:"=\")" \ - "optimize=" \ - "d_stdio_cnt_lval=undef" \ - "d_stdio_ptr_lval=undef" \ - "d_stdiobase=undef" \ - "d_stdstdio=undef" \ - "d_times=undef" \ - "direntrytype=DIR" \ - "nlm_version=$(NLM_VERSION)" \ - "d_archname=NetWare" \ - "mpktool=$(MPKTOOL) $(XDCFLAGS)" \ - "toolpath=$(TOOL_PATH)" - - -NW_CFGSH_TMPL = config.wc -NW_CFGH_TMPL = config_H.wc - -SOCKET_NLM = $(AUTODIR)\Socket\Socket.NLM -FCNTL_NLM = $(AUTODIR)\Fcntl\Fcntl.NLM -IO_NLM = $(AUTODIR)\IO\IO.NLM -OPCODE_NLM = $(AUTODIR)\Opcode\Opcode.NLM -SDBM_FILE_NLM = $(AUTODIR)\SDBM_File\SDBM_File.NLM -POSIX_NLM = $(AUTODIR)\POSIX\POSIX.NLM -ATTRIBUTES_NLM = $(AUTODIR)\attributes\attributes.NLM -B_NLM = $(AUTODIR)\B\B.NLM -DUMPER_NLM = $(AUTODIR)\Data\Dumper\Dumper.NLM -PEEK_NLM = $(AUTODIR)\Devel\Peek\Peek.NLM -RE_NLM = $(AUTODIR)\re\re.NLM -BYTELOADER_NLM = $(AUTODIR)\ByteLoader\ByteLoader.NLM -GLOB_NLM = $(AUTODIR)\File\Glob\Glob.NLM -HOSTNAME_NLM = $(AUTODIR)\Sys\Hostname\Hostname.NLM -CWD_NLM = $(EXTDIR)\Cwd\Cwd.NLM -STORABLE_NLM = $(EXTDIR)\Storable\Storable.NLM -LISTUTIL_NLM = $(EXTDIR)\List\Util.NLM -MIMEBASE64_NLM = $(EXTDIR)\MIME\Base64\Base64.NLM -XSAPITEST_NLM = $(EXTDIR)\XS\APItest\APItest.NLM -XSTYPEMAP_NLM = $(EXTDIR)\XS\Typemap\Typemap.NLM -UNICODENORMALIZE_NLM = $(EXTDIR)\Unicode\Normalize\Normalize.NLM -UNICODECOLLATE_NLM = $(EXTDIR)\Unicode\Collate\Collate.NLM - -EXTENSION_NLM = \ - $(FCNTL_NLM) \ - $(BYTELOADER_NLM) \ - $(IO_NLM) \ - $(SOCKET_NLM) \ - $(OPCODE_NLM) \ - $(B_NLM) \ - $(ATTRIBUTES_NLM) \ - $(SDBM_FILE_NLM) \ - $(POSIX_NLM) \ - $(DUMPER_NLM) \ - $(GLOB_NLM) \ - $(PEEK_NLM) \ - $(RE_NLM) \ - $(HOSTNAME_NLM) \ - $(CWD_NLM) \ - $(STORABLE_NLM) \ - $(LISTUTIL_NLM) \ - $(MIMEBASE64_NLM) \ - $(XSAPITEST_NLM) \ - $(XSTYPEMAP_NLM) \ - $(UNICODENORMALIZE_NLM) \ - $(FILTER_NLM) - -# Begin - Following is required to build NetWare specific extensions CGI2Perl, Perl2UCS and UCSExt -CGI2PERL = CGI2Perl\CGI2Perl -PERL2UCS = Perl2UCS\Perl2UCS -UCSExt = Perl2UCS\UCSExt - -CGI2PERL_NLM = \CGI2Perl\CGI2Perl.NLM -PERL2UCS_NLM = $(AUTODIR)\Perl2UCS\Perl2UCS.NLM -UCSExt_NLM = $(AUTODIR)\UCSExt\UCSExt.NLM - -NETWARE_EXTNS = \ - $(CGI2PERL_NLM) \ - $(PERL2UCS_NLM) \ - $(UCSExt_NLM) -# End - - -ECHO_SRC = TestNLM\echo\echo.c -TYPE_SRC = TestNLM\type\type.c -ECHO_SRC_OBJ = $(ECHO_SRC:.c=.obj) -TYPE_SRC_OBJ = $(TYPE_SRC:.c=.obj) -ECHO_NLM = TestNLM\echo\echo.nlm -TYPE_NLM = TestNLM\type\type.nlm - -TEST_NLMS = \ - $(ECHO_NLM) \ - $(TYPE_NLM) \ - - -!ifndef SCREEN -SCREEN = 'none' -!endif - -!ifndef NLM_DESCRIPTION -NLM_DESCRIPTION = $(NLM_NAME8) for NetWare -!endif - -!ifndef NLM_VERSION -NLM_VERSION = 3.1.0 -!endif - -!ifndef NLM_EXT -NLM_EXT = NLM -!endif - -!ifndef BUILT -BUILT = $(BLDDIR)\$(NLM_NAME8).$(NLM_EXT) -!endif - -!ifndef BASE_IMPORT_FILES -BASE_IMPORT_FILES = Import @$(NLMIMPORTS)\clib.imp, @$(NLMIMPORTS)\nlmlib.imp, @$(NLMIMPORTS)\threads.imp, @$(NLMIMPORTS)\nit.imp, @$(NLMIMPORTS)\socklib.imp, \ -@$(NLMIMPORTS)\fpsm.imp, @$(NLMIMPORTS)\lib0.imp -!endif - -!ifdef SECURITYBASE -BASE_IMPORT_FILES = $(BASE_IMPORT_FILES), @$(SECURITY_IMPORTS)\nwsec.imp -!endif # !ifdef SECURITYBASE - -!ifdef USE_MPK -BASE_IMPORT_FILES = $(BASE_IMPORT_FILES), @$(MPKBASE)\import\mpkorg.imp -!endif - -!ifndef BASE_IMPORT_FNS -BASE_IMPORT_FNS = Import ImportSymbol, GetSystemConsoleScreen, LoadModule -!endif - -!ifdef CODEWAR -NWLIBPATH = -LIBPATH386 = -LIBPATH = -!else # !ifdef CODEWAR -!error Please define the tools base directory before proceeding -!endif # !ifdef CODEWAR - -!ifndef BASE_LIBRARIES -!ifdef WATCOM -BASE_LIBRARIES = Library plib3s.lib, math3s.lib, clib3s.lib -!endif # !ifdef WATCOM -!ifdef CODEWAR -BASE_LIBRARIES = -!endif # !ifdef CODEWAR -!endif # !ifndef BASE_LIBRARIES - - -COPYRIGHT = Copyright (C) 2000-01, 2002 Novell, Inc. All Rights Reserved. - -EXPORTS = Export @perl.imp - -# -# Set these to wherever you want "nmake install" to put your -# newly built perl. -# -INST_DRV = C: -INST_TOP = $(INST_DRV)\perl - -INST_NW_DRV = i: -INST_NW_VOL = sys: -INST_NW_TOP1 = $(INST_NW_VOL)\perl -INST_NW_TOP2 = $(INST_NW_DRV)\perl -#INST_NW_VER = \5.6.1 - -# -# Comment this out if you DON'T want your perl installation to be versioned. -# This means that the new installation will overwrite any files from the -# old installation at the same INST_TOP location. Leaving it enabled is -# the safest route, as perl adds the extra version directory to all the -# locations it installs files to. If you disable it, an alternative -# versioned installation can be obtained by setting INST_TOP above to a -# path that includes an arbitrary version string. -# -INST_VER = \5.32.1 - -# -# Comment this out if you DON'T want your perl installation to have -# architecture specific components. This means that architecture- -# specific files will be installed along with the architecture-neutral -# files. Leaving it enabled is safer and more flexible, in case you -# want to build multiple flavors of perl and install them together in -# the same location. Commenting it out gives you a simpler -# installation that is easier to understand for beginners. -# -INST_ARCH = \$(ARCHNAME) - -# -# uncomment to enable multiple interpreters. This is need for fork() -# emulation. -# - -USE_MULTI = define - -# -# Beginnings of interpreter cloning/threads; still very incomplete. -# This should be enabled to get the fork() emulation. This needs -# USE_MULTI as well. -# -USE_ITHREADS = define - -# -# uncomment to enable the implicit "host" layer for all system calls -# made by perl. This needs USE_MULTI above. This is also needed to -# get fork(). -# -USE_IMP_SYS = define - -# uncomment this to enable the experimental PerlIO I/O subsystem -# else USE_STDIO will be defined. -#USE_PERLIO = define -#USE_STDIO = define - -# For now let this be here -# -#CRYPT_SRC = fcrypt.c - -# For now let this be here -# -#CRYPT_LIB = fcrypt.lib - -# -# set this if you wish to use perl's malloc -# WARNING: Turning this on/off WILL break binary compatibility with extensions -# you may have compiled with/without it. Be prepared to recompile all -# extensions if you change the default. Currently, this cannot be enabled -# if you ask for USE_IMP_SYS above. -# -#PERL_MALLOC = define - -# -# set this to your email address (perl will guess a value from -# your loginname and your hostname, which may not be right) -# -#EMAIL = - -## -## Build configuration ends. -## - -##################### CHANGE THESE ONLY IF YOU MUST ##################### - -!IF "$(CRYPT_SRC)$(CRYPT_LIB)" == "" -D_CRYPT = undef -!ELSE -D_CRYPT = define -CRYPT_FLAG = -DHAVE_DES_FCRYPT -!ENDIF - -!IF "$(PERL_MALLOC)" == "" -PERL_MALLOC = undef -!ENDIF - -!IF "$(USE_IMP_SYS)" == "define" -PERL_MALLOC = undef -!ENDIF - -!IF "$(USE_MULTI)" == "" -USE_MULTI = undef -!ENDIF - -!IF "$(USE_ITHREADS)" == "" -USE_ITHREADS = undef -!ENDIF - -!IF "$(USE_IMP_SYS)" == "" -USE_IMP_SYS = undef -!ENDIF - -!IF "$(USE_PERLCRT)" == "" -USE_PERLCRT = undef -!ENDIF - -!IF "$(USE_IMP_SYS)$(USE_MULTI)" == "defineundef" -USE_MULTI = define -!ENDIF - -!IF "$(USE_ITHREADS)$(USE_MULTI)" == "defineundef" -USE_MULTI = define -!ENDIF - -!IF "$(USE_MULTI)" != "undef" -BUILDOPT = $(BUILDOPT) -DPERL_IMPLICIT_CONTEXT -!ENDIF - -!IF "$(USE_IMP_SYS)" != "undef" -BUILDOPT = $(BUILDOPT) -DPERL_IMPLICIT_SYS -!ENDIF - -!IF "$(PROCESSOR_ARCHITECTURE)" == "" -PROCESSOR_ARCHITECTURE = x86 -!ENDIF - -!IF "$(USE_MULTI)" == "define" -ARCHNAME = NetWare-$(PROCESSOR_ARCHITECTURE)-multi -!ELSE -ARCHNAME = NetWare-$(PROCESSOR_ARCHITECTURE) -!ENDIF - -!IF "$(USE_MULTI)" != "undef" -ADD_BUILDOPT = $(ADD_BUILDOPT) -DPERL_IMPLICIT_CONTEXT -!ENDIF - -!IF "$(USE_IMP_SYS)" != "undef" -ADD_BUILDOPT = $(ADD_BUILDOPT) -DPERL_IMPLICIT_SYS -!ENDIF - -!IF "$(USE_ITHREADS)" == "define" -ARCHNAME = $(ARCHNAME)-thread -!ENDIF - -!IF "$(USE_PERLIO)" == "define" -USE_STDIO = undef -ADD_BUILDOPT = $(ADD_BUILDOPT) -DUSE_PERLIO -ARCHNAME = $(ARCHNAME)-perlio -!ELSE -#USE_STDIO = define -#ADD_BUILDOPT = $(ADD_BUILDOPT) -DUSE_STDIO -!ENDIF - - -ARCHDIR = ..\lib\$(ARCHNAME) -COREDIR = ..\lib\CORE -AUTODIR = ..\lib\auto -LIBDIR = ..\lib -EXTDIR = ..\ext -PODDIR = ..\pod -EXTUTILSDIR = $(LIBDIR)\ExtUtils - -# -INST_SCRIPT = $(INST_TOP)$(INST_VER)\bin -INST_BIN = $(INST_SCRIPT)$(INST_ARCH) -INST_LIB = $(INST_TOP)$(INST_VER)\lib -INST_ARCHLIB = $(INST_LIB)$(INST_ARCH) -INST_COREDIR = $(INST_ARCHLIB)\CORE -INST_POD = $(INST_LIB)\pod -INST_HTML = $(INST_POD)\html - -# -# Options -# - -OBJOUT_FLAG = -Fo -EXEOUT_FLAG = -Fe - - -#################### do not edit below this line ####################### -############# NO USER-SERVICEABLE PARTS BEYOND THIS POINT ############## - -o = .obj - -# -# Rules -# - -.SUFFIXES : .c $(o) .nlm .lib .NLM - - -# -# various targets -PERLIMPLIB = ..\perl.lib - -MINIPERL = ..\miniperl.exe -CONFIGPM = ..\lib\Config.pm -MINIMOD = ..\lib\ExtUtils\Miniperl.pm - -PL2BAT = ..\win32\bin\pl2bat.pl - -UTILS = \ - ..\utils\h2ph \ - ..\utils\splain \ - ..\utils\perlbug \ - ..\utils\pl2pm \ - ..\utils\h2xs \ - ..\utils\perldoc \ - ..\pod\pod2html \ - ..\pod\pod2man \ - ..\pod\pod2text \ - ..\pod\pod2usage \ - ..\pod\podchecker \ - ..\pod\podselect - -MAKE = nmake -nologo -#NMAKE = $(C_COMPILER) $(INCLUDE) $(NLM_INCLUDES) $(COMPLER_FLAGS) $(ADD_LOCDEFS) $(ERROR_FLAG) $(*F).c -o $@ - -XCOPY = xcopy /f /r /i /d -RCOPY = xcopy /f /r /i /e /d -NOOP = @echo -NULL = - -# -# filenames given to xsubpp must have forward slashes (since it puts -# full pathnames in #line strings) -XSUBPP = ..\$(MINIPERL) -I..\..\lib ..\$(EXTUTILSDIR)\xsubpp -C++ -prototypes - -MICROCORE_SRC = \ - ..\av.c \ - ..\deb.c \ - ..\doio.c \ - ..\doop.c \ - ..\dquote.c \ - ..\dump.c \ - ..\globals.c \ - ..\gv.c \ - ..\mro_core.c \ - ..\hv.c \ - ..\keywords.c \ - ..\locale.c \ - ..\mathoms.c \ - ..\mg.c \ - ..\numeric.c \ - ..\op.c \ - ..\perl.c \ - ..\perlapi.c \ - ..\perly.c \ - ..\pp.c \ - ..\pp_ctl.c \ - ..\pp_hot.c \ - ..\pp_pack.c \ - ..\pp_sort.c \ - ..\pp_sys.c \ - ..\reentr.c \ - ..\regcomp.c \ - ..\regexec.c \ - ..\run.c \ - ..\scope.c \ - ..\sv.c \ - ..\taint.c \ - ..\time64.c \ - ..\toke.c \ - ..\universal.c \ - ..\utf8.c \ - ..\util.c - -#EXTRACORE_SRC = $(EXTRACORE_SRC) perllib.c - -!IF "$(PERL_MALLOC)" == "define" -EXTRACORE_SRC = $(EXTRACORE_SRC) ..\malloc.c -!ENDIF - -#EXTRACORE_SRC = $(EXTRACORE_SRC) ..\perlio.c - -!IF "$(CRYPT_SRC)" != "" -NW_SRC = $(NW_SRC) .\$(CRYPT_SRC) -!ENDIF - -DLL_SRC = $(DYNALOADER).c - -CORE_NOCFG_H = \ - ..\av.h \ - ..\cop.h \ - ..\cv.h \ - ..\dosish.h \ - ..\embed.h \ - ..\form.h \ - ..\gv.h \ - ..\handy.h \ - ..\hv.h \ - ..\hv_func.h \ - ..\iperlsys.h \ - ..\mg.h \ - ..\nostdio.h \ - ..\op.h \ - ..\opcode.h \ - ..\perl.h \ - ..\perlapi.h \ - ..\perlsdio.h \ - ..\perly.h \ - ..\pp.h \ - ..\proto.h \ - ..\regexp.h \ - ..\scope.h \ - ..\sv.h \ - ..\thread.h \ - ..\unixish.h \ - ..\utf8.h \ - ..\util.h \ - ..\warnings.h \ - ..\XSUB.h \ - ..\EXTERN.h \ - ..\perlvars.h \ - ..\intrpvar.h - -CORE_H = $(CORE_NOCFG_H) .\config.h - -DLL_OBJ = $(DLL_SRC:.c=.obj) - -DYNAMIC_EXT = Socket IO Fcntl Opcode SDBM_File POSIX attributes B re \ - Data/Dumper Devel/Peek ByteLoader File/Glob \ - Storable/Storable List/Util MIME/Base64/Base64 XS/APItest/APItest \ - XS/Typemap/Typemap Unicode/Collate/Collate Unicode/Normalize/Normalize Sys/Hostname - -STATIC_EXT = DynaLoader -NONXS_EXT = Errno - -DYNALOADER = $(EXTDIR)\DynaLoader\DynaLoader -SOCKET = $(EXTDIR)\Socket\Socket -FCNTL = $(EXTDIR)\Fcntl\Fcntl -OPCODE = $(EXTDIR)\Opcode\Opcode -SDBM_FILE = $(EXTDIR)\SDBM_File\SDBM_File -IO = $(EXTDIR)\IO\IO -POSIX = $(EXTDIR)\POSIX\POSIX -ATTRIBUTES = $(EXTDIR)\attributes\attributes -B = $(EXTDIR)\B\B -RE = $(EXTDIR)\re\re -DUMPER = $(EXTDIR)\Data\Dumper\Dumper -ERRNO = $(EXTDIR)\Errno\Errno -PEEK = $(EXTDIR)\Devel\Peek\Peek -BYTELOADER = $(EXTDIR)\ByteLoader\ByteLoader -GLOB = $(EXTDIR)\File\Glob\Glob -HOSTNAME = $(EXTDIR)\Sys\Hostname\Hostname -CWD = $(EXTDIR)\Cwd\Cwd -STORABLE = $(EXTDIR)\Storable\Storable -LISTUTIL = $(EXTDIR)\List\Util -MIMEBASE64 = $(EXTDIR)\MIME\Base64\Base64 -XSAPITEST = $(EXTDIR)\XS\APItest\APItest -XSTYPEMAP = $(EXTDIR)\XS\Typemap\Typemap -UNICODENORMALIZE = $(EXTDIR)\Unicode\Normalize\Normalize -UNICODECOLLATE = $(EXTDIR)\Unicode\Collate\Collate - -ERRNO_PM_NW = $(LIBDIR)\Errno.pm - -EXTENSION_C = \ - $(SOCKET).c \ - $(FCNTL).c \ - $(OPCODE).c \ - $(SDBM_FILE).c \ - $(IO).c \ - $(POSIX).c \ - $(ATTRIBUTES).c \ - $(RE).c \ - $(DUMPER).c \ - $(PEEK).c \ - $(B).c \ - $(BYTELOADER).c \ - $(GLOB).c \ - $(HOSTNAME).c \ - $(CWD).c \ - $(STORABLE).c \ - $(LISTUTIL).c \ - $(MIMEBASE64).c \ - $(XSAPITEST).c \ - $(XSTYPEMAP).c \ - $(UNICODENORMALIZE).c \ - -EXTENSION_NPM = \ - $(ERRNO_PM_NW) \ - -POD2HTML = $(PODDIR)\pod2html -POD2MAN = $(PODDIR)\pod2man -POD2TEXT = $(PODDIR)\pod2text - -# -# Top targets -# - -all : .cleanoldfiles .\nwconfig.h $(CONFIGPM) $(NLM_NAME) $(EXTENSION_NLM) $(EXTENSION_NPM) $(TEST_NLMS) $(NETWARE_EXTNS) - -#------------------------------------------------------------ - -..\config.sh : config.nw5 $(MINIPERL) config_sh.PL - $(MINIPERL) -I..\lib config_sh.PL $(NW_CFG_VARS) config.nw5 > ..\config.sh - -# this target is for when changes to the main config.sh happen -# edit config.wc and make this target -regen_config_h: - perl config_sh.PL $(NW_CFG_VARS) $(NW_CFGSH_TMPL) > ..\config.sh - cd .. - -del /f /q perl.exe - perl configpm - cd netware - -del /f /q $(NW_CFGH_TMPL) - -mkdir $(COREDIR) - -perl -I..\lib config_h.PL "INST_VER=$(INST_VER)" - rename config.h $(NW_CFGH_TMPL) - -$(CONFIGPM) : $(MINIPERL) ..\config.sh config_h.PL ..\minimod.pl - cd .. && miniperl configpm - if exist lib\* $(RCOPY) lib\*.* ..\lib\$(NULL) - $(XCOPY) ..\*.h $(COREDIR)\*.* - $(XCOPY) *.h $(COREDIR)\*.* - $(XCOPY) ..\ext\re\re.pm $(LIBDIR)\*.* - if exist include\* $(RCOPY) include $(COREDIR)\*.* - $(MINIPERL) -I..\lib config_h.PL "INST_VER=$(INST_VER)" \ - || $(MAKE) /$(MAKEFLAGS) $(CONFIGPM) - @echo CONFIGPM Done - -$(MINIPERL) : - $(error)Please build $(MINIPERL) before continuing - -$(MINIMOD) : $(MINIPERL) ..\minimod.pl - cd .. && miniperl minimod.pl > lib\ExtUtils\Miniperl.pm - -$(EXTDIR)\DynaLoader\dl_netware.xs: dl_netware.xs - copy dl_netware.xs $(EXTDIR)\DynaLoader\dl_netware.xs - -HEADERS : - @echo . . . . making stdio.h and string.h - @copy << stdio.h >\nul - -/* - * Copyright (C) 2000-01 Novell, Inc. All Rights Reserved. - * - * You may distribute under the terms of either the GNU General Public - * License or the Artistic License, as specified in the README file. - * - */ - -/* - * FILENAME : stdio.h - * DESCRIPTION : Generated header file, do not edit. See makefile. - * This header file causes the includer to use clibstuf.h - * The purpose of clibstuf is to make sure that Perl, cgi2perl and - * all the perl extension nlm's (*.NLM) use the Novell Netware CLIB versions - * of standard functions. This code loads up a whole bunch of function pointers - * to point at the standard CLIB functions. - * Author : HYAK - * Date : January 2001. - * - */ - - -#ifndef __Stdio_H__ -#define __Stdio_H__ - - -#include "$(NLMSDKBASE)\INCLUDE\NLM\stdio.h" -#include "clibsdio.h" - - -#endif // __Stdio_H__ - -<< - @copy stdio.h $(COREDIR) - - @copy << string.h >\nul - -/* - * Copyright (C) 2000-01 Novell, Inc. All Rights Reserved. - * - * You may distribute under the terms of either the GNU General Public - * License or the Artistic License, as specified in the README file. - * - */ - -/* - * FILENAME : string.h - * DESCRIPTION : Generated header file, do not edit. See makefile. - * This header file causes the includer to use clibstuf.h - * The purpose of clibstuf is to make sure that Perl, cgi2perl and - * all the perl extension nlm's (*.NLM) use the Novell Netware CLIB versions - * of standard functions. This code loads up a whole bunch of function pointers - * to point at the standard CLIB functions. - * Author : HYAK - * Date : January 2001. - * - */ - - -#ifndef __String_H__ -#define __String_H__ - - -#include "$(NLMSDKBASE)\INCLUDE\NLM\string.h" -#include "clibstr.h" - - -#endif // __String_H__ - -<< - @copy string.h $(COREDIR) - - -$(NLM_NAME): MESSAGE HEADERS $(BLDDIR)\nul $(NLM_OBJ) $(NEWTARE_OBJ_DEP) $(NEWTARE_CPP_OBJ_DEP) $(PERL_IO_OBJ_DEP) $(DLL_OBJ) \ - $(PERLIMPLIB) $(EXT_MAIN_OBJ) $(PERL_TEMP_OBJ) #$(PERL_LIB_OBJ) - @echo======= Linking $@ at $(MAKEDIR)\$(BLDDIR) ======= -# Linker definitions and lining come here for CODEWARRIOR - @echo $(BASE_IMPORT_FILES) > $*.def - @echo MODULE clib >> $*.def - @echo MODULE netdb >> $*.def -!ifdef SECURITYBASE - @echo MODULE nwsec >> $*.def -!endif #!ifdef SECURITYBASE - @echo $(EXPORTS) >> $*.def -!ifdef USE_XDC - @echo======= Creating XDC file - @echo Import Mp.imp >> $*.def -!ifdef NLM_NAME8 - $(MPKTOOL) $(XDCFLAGS) $(BLDDIR)\$(NLM_NAME8).xdc - @echo xdcdata $(BLDDIR)\$(NLM_NAME8).xdc >> $*.def -!else - $(MPKTOOL) $(XDCFLAGS) $(BLDDIR)\$(NLM_NAME).xdc - @echo xdcdata $(BLDDIR)\$(NLM_NAME).xdc >> $*.def -!endif -!endif -## $(LINK) $(LDFLAGS) $(BS_CFLAGS) -desc "Perl 5.6.1 for NetWare" $(NEWTARE_OBJ_DEP:.obj=.obj) $(NLM_OBJ:.obj=.obj) $(PERL_IO_OBJ_DEP:.obj=.obj) $(DLL_OBJ:.obj=.obj) $(NEWTARE_CPP_OBJ_DEP:.obj=.obj) -commandfile $*.def -o .\$(BLDDIR)\$@ - $(LINK) $(LDFLAGS) -desc $(MODULE_DESC) $(NEWTARE_OBJ_DEP:.obj=.obj) $(NLM_OBJ:.obj=.obj) $(PERL_IO_OBJ_DEP:.obj=.obj) $(DLL_OBJ:.obj=.obj) $(NEWTARE_CPP_OBJ_DEP:.obj=.obj) -commandfile $*.def -o .\$(BLDDIR)\$@ - copy splittree.pl .. - $(MINIPERL) -I..\lib ..\splittree.pl "../LIB" $(AUTODIR) - @echo ========Linked $@ ========== - - @echo======= Finished building $(BUILT). - -# Create the debug or release directory if not existing -$(BLDDIR)\nul: - @echo . . . . mkdir $(BLDDIR) - @mkdir $(BLDDIR) - @echo '$(BLDDIR)' directory created. - -MESSAGE: - @echo======= $(MAKE_ACTION)ing $(NLM_NAME) at $(MAKEDIR)\$(BLDDIR) ======= - -$(PERLIMPLIB): perllib.imp -# @echo Building $(PERLIMPLIB)... -# $(LD) -type library $(NLM_OBJ) $(BLDDIR)\nw5.obj $(BLDDIR)\nwmain.obj $(BLDDIR)\nw5thread.obj $(BLDDIR)\nwtinfo.obj \ -# $(BLDDIR)\nwutil.obj $(BLDDIR)\interface.obj $(BLDDIR)\perllib.obj $(PERL_IO_OBJ_DEP) $(DLL_OBJ) -o $@ -# $(XCOPY) $(PERLIMPLIB) $(COREDIR) -# @echo $(PERLIMPLIB) Done - -perllib.imp : $(MINIPERL) $(CONFIGPM) ..\embed.fnc ..\makedef.pl -# $(MINIPERL) -w ..\makedef.pl PLATFORM=netware FILETYPE=def $(ADD_BUILDOPT) \ -# CCTYPE=$(CCTYPE) TARG_DIR=..\ > perllib.def - @echo (Perl) > perl.imp - $(MINIPERL) -w ..\makedef.pl PLATFORM=netware FILETYPE=imp $(BS_CFLAGS) $(DEFINES) $(ADD_BUILDOPT) \ - CCTYPE=$(CCTYPE) TARG_DIR=..\ >> perl.imp - copy perl.imp $(COREDIR) - -$(DLL_OBJ) : $(DYNALOADER).c $(CORE_H) $(EXTDIR)\DynaLoader\dlutils.c - @echo $(MPKMESSAGE)...$(BLDMESG)...$@ - @$(C_COMPILER) $(NLM_INCLUDES) $(COMPLER_FLAGS) $(NLM_INCLUDES) $(ADD_LOCDEFS) $(ERROR_FLAG) -I$(EXTDIR)\DynaLoader \ - $(EXTDIR)\DynaLoader\$(*F).c -o $@ - @echo $(@) Done. - -$(DYNALOADER).c : $(MINIPERL) $(EXTDIR)\DynaLoader\dl_netware.xs $(CONFIGPM) - if not exist $(AUTODIR) mkdir $(AUTODIR) - cd $(EXTDIR)\$(*B) - ..\$(MINIPERL) -I..\..\lib $(*B)_pm.PL - ..\$(MINIPERL) -I..\..\lib XSLoader_pm.PL - cd ..\..\netware - $(XCOPY) $(EXTDIR)\$(*B)\$(*B).pm $(LIBDIR)\$(NULL) - $(XCOPY) $(EXTDIR)\$(*B)\XSLoader.pm $(LIBDIR)\$(NULL) - cd $(EXTDIR)\$(*B) - $(XSUBPP) dl_netware.xs > $(*B).c - cd ..\..\netware - @echo Dynaloader Done - - -$(PERL_IO_OBJ_DEP) : ..\$(*F).c - @echo $(MPKMESSAGE) $(BLDMESG) $@ - $(C_COMPILER) $(COMPLER_FLAGS) $(NLM_INCLUDES) $(ADD_LOCDEFS) $(ERROR_FLAG) ..\$(*F).c -o $@ - @echo Built $(@) - -$(NLM_OBJ) : ..\$(*F).c - @echo $(MPKMESSAGE) $(BLDMESG) $@ - $(C_COMPILER) $(COMPLER_FLAGS) $(NLM_INCLUDES) $(ADD_LOCDEFS) $(ERROR_FLAG) ..\$(*F).c -o $@ - @echo Built $(@) - - -$(NEWTARE_OBJ_DEP) : $(NW_H_FILES) $(NW_HOST_H_FILES) $(*F).c - @echo $(MPKMESSAGE) $(BLDMESG) $@ - $(C_COMPILER) $(COMPLER_FLAGS) $(NLM_INCLUDES) $(ADD_LOCDEFS) $(ERROR_FLAG) $(*F).c -o $@ - @echo Built $(@) - -$(NEWTARE_CPP_OBJ_DEP) : $(NW_H_FILES) $(NW_HOST_H_FILES) $(*F).cpp - @echo $(MPKMESSAGE) $(BLDMESG) $@ - $(C_COMPILER) $(CWCPPFLAGS) $(COMPLER_FLAGS) $(NLM_INCLUDES) $(ADD_LOCDEFS) $(ERROR_FLAG) $(*F).cpp -o $@ - @echo Built $(@) - -$(EXT_MAIN_OBJ) : $(CLIB_H_FILES) - @echo $(MPKMESSAGE) $(BLDMESG) $@ - $(C_COMPILER) $(NLM_INCLUDES) $(COMPLER_FLAGS) $(ADD_LOCDEFS) $(ERROR_FLAG) $(*F).c -o $@ - $(LD) -type library $@ -o $*.lib - @copy $*.lib $(COREDIR) - -# Delete any files that might have got created during building miniperl.exe -# config.sh will definitely be created -# COREDIR might have got created -.cleanoldfiles : - -del /f /q $(PERLIMPLIB) - -del /f /q ..\lib\config.pm - -del /f /q ..\config.sh - -del /f /q .\Main.obj - -del /f /q .\Main.lib - -rmdir /s /q $(AUTODIR) - -rmdir /s /q $(COREDIR) - -del /f /q ..\lib\core - -.\nwconfig.h : $(NW_CFGH_TMPL) - @if exist .\config.h del /f /q .\config.h - copy $(NW_CFGH_TMPL) config.h - -# REQUIRED WHEN WE INCLUDE CONFIGPM OR REGEN_CONFIG - sgp -#..\nwconfig.sh : config.nw5 $(MINIPERL) config_sh.PL -# $(MINIPERL) -I..\lib config_sh.PL $(NW_CFG_VARS) config.nw5 > ..\config.sh -# @pause -# cd .. -# del /f /q config.sh -# rename nwconfig.sh config.sh -# cd netware - -config.nw5 : $(NW_CFGSH_TMPL) - copy $(NW_CFGSH_TMPL) config.nw5 - -$(SOCKET_NLM): $(NLM_NAME) $(SOCKET).xs - cd $(EXTDIR)\$(*B) - ..\..\miniperl -I..\..\lib Makefile.PL PERL_CORE=1 INSTALLDIRS=perl - $(MAKE) - cd ..\..\netware - -$(HOSTNAME_NLM): $(NLM_NAME) $(HOSTNAME).xs - cd $(EXTDIR)\Sys\$(*B) - ..\..\..\miniperl -I..\..\..\lib Makefile.PL PERL_CORE=1 INSTALLDIRS=perl - $(MAKE) - cd ..\..\..\netware - -$(FCNTL_NLM): - cd $(EXTDIR)\$(*B) - ..\..\miniperl -I..\..\lib Makefile.PL PERL_CORE=1 INSTALLDIRS=perl - $(MAKE) - cd ..\..\netware - -$(IO_NLM): - cd $(EXTDIR)\$(*B) - ..\..\miniperl -I..\..\lib Makefile.PL PERL_CORE=1 INSTALLDIRS=perl - $(MAKE) - cd ..\..\netware - -$(OPCODE_NLM): - cd $(EXTDIR)\$(*B) - ..\..\miniperl -I..\..\lib Makefile.PL PERL_CORE=1 INSTALLDIRS=perl - $(MAKE) - cd ..\..\netware - -$(B_NLM): - cd $(EXTDIR)\$(*B) - ..\..\miniperl -I..\..\lib Makefile.PL PERL_CORE=1 INSTALLDIRS=perl - $(MAKE) - cd ..\..\netware - -$(DUMPER_NLM): - cd $(EXTDIR)\Data\$(*B) - ..\..\..\miniperl -I..\..\..\lib Makefile.PL PERL_CORE=1 INSTALLDIRS=perl - $(MAKE) - cd ..\..\..\netware - -$(PEEK_NLM): - cd $(EXTDIR)\Devel\$(*B) - ..\..\..\miniperl -I..\..\..\lib Makefile.PL PERL_CORE=1 INSTALLDIRS=perl - $(MAKE) - cd ..\..\..\netware - -$(RE_NLM): - cd $(EXTDIR)\$(*B) - ..\..\miniperl -I..\..\lib Makefile.PL PERL_CORE=1 INSTALLDIRS=perl - $(MAKE) - cd ..\..\netware - -$(BYTELOADER_NLM): - cd $(EXTDIR)\$(*B) - ..\..\miniperl -I..\..\lib Makefile.PL PERL_CORE=1 INSTALLDIRS=perl - $(MAKE) - cd ..\..\netware - -$(GLOB_NLM): - cd $(EXTDIR)\File\$(*B) - ..\..\..\miniperl -I..\..\..\lib Makefile.PL PERL_CORE=1 INSTALLDIRS=perl - $(MAKE) - cd ..\..\..\netware - -$(POSIX_NLM): - cd $(EXTDIR)\$(*B) - ..\..\miniperl -I..\..\lib Makefile.PL PERL_CORE=1 INSTALLDIRS=perl - $(MAKE) - cd ..\..\netware - -$(ATTRIBUTES_NLM): - cd $(EXTDIR)\$(*B) - ..\..\miniperl -I..\..\lib Makefile.PL PERL_CORE=1 INSTALLDIRS=perl - $(MAKE) - cd ..\..\netware - -$(SDBM_FILE_NLM): - cd $(EXTDIR)\$(*B) - ..\..\miniperl -I..\..\lib Makefile.PL PERL_CORE=1 INSTALLDIRS=perl - $(MAKE) - cd ..\..\netware - -$(CWD_NLM): - cd $(EXTDIR)\$(*B) - ..\..\miniperl -I..\..\lib Makefile.PL PERL_CORE=1 INSTALLDIRS=perl - $(MAKE) - cd ..\..\netware - -$(STORABLE_NLM): - cd $(EXTDIR)\$(*B) - ..\..\miniperl -I..\..\lib Makefile.PL PERL_CORE=1 INSTALLDIRS=perl - $(MAKE) - cd ..\..\netware - -$(LISTUTIL_NLM): - cd $(EXTDIR)\List\$(*B) - ..\..\..\miniperl -I..\..\lib Makefile.PL PERL_CORE=1 INSTALLDIRS=perl - $(MAKE) - cd ..\..\..\netware - -$(MIMEBASE64_NLM): - cd $(EXTDIR)\Mime\$(*B) - ..\..\..\miniperl -I..\..\lib Makefile.PL PERL_CORE=1 INSTALLDIRS=perl - $(MAKE) - cd ..\..\..\netware - -$(XSAPITEST_NLM): - cd $(EXTDIR)\XS\$(*B) - ..\..\..\miniperl -I..\..\lib Makefile.PL PERL_CORE=1 INSTALLDIRS=perl - $(MAKE) - cd ..\..\..\netware - -$(XSTYPEMAP_NLM): - cd $(EXTDIR)\XS\$(*B) - ..\..\..\miniperl -I..\..\lib Makefile.PL PERL_CORE=1 INSTALLDIRS=perl - $(MAKE) - cd ..\..\..\netware - -$(UNICODENORMALIZE_NLM): - cd $(EXTDIR)\Unicode\$(*B) - ..\..\..\miniperl -I..\..\lib Makefile.PL PERL_CORE=1 INSTALLDIRS=perl - $(MAKE) - cd ..\..\..\netware - - -$(ERRNO_PM_NW): -# @echo Building $@ - cd $(EXTDIR)\$(*B) - ..\..\miniperl -I..\..\lib Makefile.PL PERL_CORE=1 INSTALLDIRS=perl - $(MAKE) - cd ..\..\netware - -$(ECHO_SRC_OBJ): $*.c - @echo $(MPKMESSAGE) $(BLDMESG) $@ - $(C_COMPILER) $(NLM_INCLUDES) $(COMPLER_FLAGS) $(ADD_LOCDEFS) $(ERROR_FLAG) $*.c -o $@ - @echo Built $(@) - -$(ECHO_NLM): $(ECHO_SRC_OBJ) - @echo======= Linking $@ ======= -# Linker definitions and lining come here for CODEWARRIOR - @echo $(BASE_IMPORT_FILES) > $*.def - @echo MODULE clib >> $*.def - @echo Import @perl.imp >> $*.def -!ifdef USE_XDC - $(MPKTOOL) $(XDCFLAGS) $*.xdc - @echo Import @MP.imp >> $*.def - @echo xdcdata $*.xdc >> $*.def -!endif -## $(LINK) $(LDFLAGS) $(BS_CFLAGS) -desc "DOS Echo emulation for Perl testing" $(ECHO_SRC_OBJ) $(BLDDIR)\clibstuf.obj -commandfile $*.def -o $@ - $(LINK) $(LDFLAGS) -desc "DOS Echo emulation for Perl testing" $(ECHO_SRC_OBJ) $(BLDDIR)\clibstuf.obj -commandfile $*.def -o $@ - @echo======= Linking Complete ======= - -$(TYPE_SRC_OBJ): $*.c - @echo $(MPKMESSAGE) $(BLDMESG) $@ - $(C_COMPILER) $(NLM_INCLUDES) $(COMPLER_FLAGS) $(ADD_LOCDEFS) $(ERROR_FLAG) $*.c -o $@ - @echo Built $(@) - -$(TYPE_NLM): $(TYPE_SRC_OBJ) - @echo======= Linking $@ ======= -# Linker definitions and lining come here for CODEWARRIOR - @echo $(BASE_IMPORT_FILES) > $*.def - @echo MODULE clib >> $*.def - @echo Import @perl.imp >> $*.def -!ifdef USE_XDC - $(MPKTOOL) $(XDCFLAGS) $*.xdc - @echo Import @MP.imp >> $*.def - @echo xdcdata $*.xdc >> $*.def -!endif -## $(LINK) $(LDFLAGS) $(BS_CFLAGS) -desc "DOS Type emulation for Perl testing" $(TYPE_SRC_OBJ) $(BLDDIR)\clibstuf.obj -commandfile $*.def -o $@ - $(LINK) $(LDFLAGS) -desc "DOS Type emulation for Perl testing" $(TYPE_SRC_OBJ) $(BLDDIR)\clibstuf.obj -commandfile $*.def -o $@ - @echo======= Linking Complete ======= - - -# Build NetWare specific extensions -$(CGI2PERL_NLM): -!if "$(NW_EXTNS)"=="yes" - cd $(*B) - ..\..\miniperl -I..\..\lib Makefile.PL "CCCDLFLAGS=-bool on -lang c++" PERL_CORE=1 INSTALLDIRS=perl - $(MAKE) - cd ..\..\netware -!endif - -$(PERL2UCS_NLM): -!if "$(NW_EXTNS)"=="yes" - cd $(*B) - ..\..\miniperl -I..\..\lib Makefile.PL "CCCDLFLAGS=-bool on -lang c++" PERL_CORE=1 INSTALLDIRS=perl - $(MAKE) - cd ..\..\netware -!endif - -$(UCSExt_NLM): -!if "$(NW_EXTNS)"=="yes" - cd $(*B) - ..\..\miniperl -I..\..\lib Makefile.PL "CCCDLFLAGS=-bool on -lang c++" PERL_CORE=1 INSTALLDIRS=perl - $(MAKE) - cd ..\..\netware -!endif - -nwclean: - -rmdir /s /q $(REL_DIR) - -rmdir /s /q $(DEB_DIR) - @if exist .\stdio.h del /f /q .\stdio.h - @if exist .\string.h del /f /q .\string.h - @if exist .\config.h del /f /q .\config.h - @if exist .\config.nw5 del /f /q .\config.nw5 - @if exist .\perl.imp del /f /q .\perl.imp - -del /f /q *.obj *.lib *.def *.sym *.map *.xdc *.err *.nlm - cd testnlm\echo - -del /f /q *.obj *.map *.link *.options *.nlm *.sym *.xdc *.err *.lib *.def *.pdb *.bs - cd ..\type - -del /f /q *.obj *.map *.link *.options *.nlm *.sym *.xdc *.err *.lib *.def *.pdb *.bs - cd ..\..\ - -utils: $(BLDDIR)\$(NLM_NAME8).$(NLM_EXT) - cd ..\utils - $(MAKE) PERL=$(MINIPERL) - cd ..\pod - copy ..\README.amiga .\perlamiga.pod - copy ..\README.cygwin .\perlcygwin.pod - copy ..\README.dos .\perldos.pod - copy ..\README.hpux .\perlhpux.pod - copy ..\README.os2 .\perlos2.pod - copy ..\vms\perlvms.pod .\perlvms.pod - copy ..\README.win32 .\perlwin32.pod - copy ..\README.netware .\perlnw5.pod - $(MAKE) -f ..\win32\pod.mak converters - - cd ..\netware - $(MINIPERL) $(PL2BAT) $(UTILS) - -distclean: clean nwclean - -del /f /q $(PERLIMPLIB) ..\miniperl.lib $(MINIMOD) - -del /f /q $(EXTENSION_NPM) - -del /f /q $(EXTENSION_C) $(DYNALOADER).c $(ERRNO).pm - -del /f /q $(EXTDIR)\DynaLoader\dl_netware.xs - -del /f /q $(EXTDIR)\DynaLoader\dl_win32.xs - -del /f /q $(EXTDIR)\DynaLoader\DynaLoader.pm - -del /f /q $(EXTDIR)\DynaLoader\XSLoader.pm - -del /f /q $(LIBDIR)\.exists $(LIBDIR)\attributes.pm $(LIBDIR)\DynaLoader.pm - -del /f /q $(LIBDIR)\XSLoader.pm - -del /f /q $(LIBDIR)\Fcntl.pm $(LIBDIR)\IO.pm $(LIBDIR)\Opcode.pm - -del /f /q $(LIBDIR)\ops.pm $(LIBDIR)\Safe.pm - -del /f /q $(LIBDIR)\SDBM_File.pm $(LIBDIR)\Socket.pm $(LIBDIR)\POSIX.pm - -del /f /q $(LIBDIR)\B.pm $(LIBDIR)\O.pm $(LIBDIR)\re.pm - -del /f /q $(LIBDIR)\Data\Dumper.pm $(LIBDIR)\ByteLoader.pm - -del /f /q $(LIBDIR)\Devel\Peek.pm - -del /f /q $(LIBDIR)\File\Glob.pm - -del /f /q $(LIBDIR)\Unicode\Normalize.pm - -del /f /q $(LIBDIR)\Unicode\Collate.pm - -rmdir /s /q $(LIBDIR)\IO - -rmdir /s /q $(LIBDIR)\B - -rmdir /s /q $(LIBDIR)\Data - -del /f /q $(PODDIR)\*.html - -del /f /q $(PODDIR)\*.bat - cd ..\utils - -del /f /q h2ph splain perlbug pl2pm h2xs perldoc - -del /f /q *.bat - cd ..\netware - -del /f /q ..\config.sh ..\splittree.pl dlutils.c config.h.new - -del /f /q $(CONFIGPM) - -del /f /q bin\*.bat - cd $(EXTDIR) - -del /s /q /f *.lib *.def *.map *.pdb *.bs Makefile *$(o) pm_to_blib *.xdc *.err *.obj *.sym - cd ..\netware -!if "$(NW_EXTNS)"=="yes" - cd cgi2perl - -del /f /q *.obj *.bs Makefile *$(o) *.c pm_to_blib *.xdc *.err *.sym *.map *.def *.lib *.pdb - cd .. - cd Perl2UCS - -del /f /q *.obj *.bs Makefile *$(o) *.c pm_to_blib *.xdc *.err *.sym *.map *.def *.lib *.pdb - cd ..\..\netware - cd UCSExt - -del /f /q *.obj *.bs Makefile *$(o) *.c pm_to_blib *.xdc *.err *.sym *.map *.c - cd ..\..\netware -!endif - -rmdir /s /q $(AUTODIR) - -rmdir /s /q $(COREDIR) - -del /f /q ..\config.sh - -installwin: - $(MINIPERL) -I..\lib ..\installperl - -install : utils installwin perlimp - -perlimp : - copy perl.imp $(INST_COREDIR) - -installnw: - $(MINIPERL) -I..\lib ..\installperl -netware - -install_tests : - cd ..\t - xcopy /f /r /i /s /d *.* $(INST_NW_TOP2)\scripts\t - cd ..\lib - xcopy /f /r /i /s /d *.t $(INST_NW_TOP2)\scripts\t\lib - cd ..\ext - xcopy /f /r /i /s /d *.t $(INST_NW_TOP2)\scripts\t\ext - cd ..\netware\t - xcopy /f /r /i /s /d *.pl $(INST_NW_TOP2)\scripts\t - cd .. - -nwinstall: utils installnw install_tests - -inst_lib : $(CONFIGPM) - copy ..\win32\splittree.pl .. - $(MINIPERL) -I..\lib ..\splittree.pl "../LIB" $(AUTODIR) - $(RCOPY) ..\lib $(INST_LIB)\*.* - -clean : - -@erase miniperlmain$(o) - -@erase /f config.h - -@erase $(DLL_OBJ) - -@erase ..\*$(o) ..\*.lib ..\*.exp *$(o) *.lib *.exp *.res - -@erase ..\t\*.exe ..\t\*.dll ..\t\*.bat diff --git a/gnu/usr.bin/perl/NetWare/NWTInfo.c b/gnu/usr.bin/perl/NetWare/NWTInfo.c deleted file mode 100644 index b057d56b2ad..00000000000 --- a/gnu/usr.bin/perl/NetWare/NWTInfo.c +++ /dev/null @@ -1,720 +0,0 @@ - -/* - * Copyright © 2001 Novell, Inc. All Rights Reserved. - * - * You may distribute under the terms of either the GNU General Public - * License or the Artistic License, as specified in the README file. - * - */ - -/* - * FILENAME : NWTInfo.c - * DESCRIPTION : Thread-local storage for Perl. - * The thread's information is stored in a hashed table that is based on - * the lowest 5 bits of the current thread ID. - * Author : SGP, HYAK - * Date : January 2001. - * - */ - - - -#include "win32ish.h" // For "BOOL", "TRUE" and "FALSE" -#include "nwtinfo.h" - -#ifdef MPK_ON - #include - #include -#else - #include -#endif //MPK_ON - -// Number of entries in the hashtable -// -#define NUM_ENTRIES 32 /* 2^5 */ - - -// macro to calculate the hash index for a given Thread ID -// -#define INDEXOF(tid) ((tid) & 0x1f) - - -// Semaphore to control access to global linked list -// -#ifdef MPK_ON - static SEMAPHORE g_tinfoSem = NULL; - static SEMAPHORE g_tCtxSem = NULL; -#else - static LONG g_tinfoSem = 0L; - static LONG g_tCtxSem = 0L; -#endif //MPK_ON - -// Hash table of thread information structures -// -ThreadInfo* g_ThreadInfo[NUM_ENTRIES]; -ThreadContext* g_ThreadCtx; - - - -/*============================================================================================ - - Function : fnTerminateThreadInfo - - Description : This function undoes fnInitializeThreadInfo; call once per NLM instance. - - Parameters : None. - - Returns : Boolean. - -==============================================================================================*/ - -BOOL fnTerminateThreadInfo(void) -{ - int index = 0; - - if (g_tinfoSem) - { - #ifdef MPK_ON - kSemaphoreWait(g_tinfoSem); - #else - WaitOnLocalSemaphore(g_tinfoSem); - #endif //MPK_ON - for (index = 0; index < NUM_ENTRIES; index++) - { - if (g_ThreadInfo[index] != NULL) - { - #ifdef MPK_ON - kSemaphoreSignal(g_tinfoSem); - #else - SignalLocalSemaphore(g_tinfoSem); - #endif //MPK_ON - return FALSE; - } - } - #ifdef MPK_ON - kSemaphoreFree(g_tinfoSem); - g_tinfoSem = NULL; - #else - CloseLocalSemaphore(g_tinfoSem); - g_tinfoSem = 0; - #endif //MPK_ON - } - - return TRUE; -} - - -/*============================================================================================ - - Function : fnInitializeThreadInfo - - Description : Initializes the global ThreadInfo hashtable and semaphore. - Call once per NLM instance - - Parameters : None. - - Returns : Nothing. - -==============================================================================================*/ - -void fnInitializeThreadInfo(void) -{ - int index = 0; - - if (g_tinfoSem) - return; - - #ifdef MPK_ON - g_tinfoSem = kSemaphoreAlloc((BYTE *)"threadInfo", 1); - #else - g_tinfoSem = OpenLocalSemaphore(1); - #endif //MPK_ON - - - for (index = 0; index < NUM_ENTRIES; index++) - g_ThreadInfo[index] = NULL; - - return; -} - - -/*============================================================================================ - - Function : fnRegisterWithThreadTable - - Description : This function registers/adds a new thread with the thread table. - - Parameters : None. - - Returns : Boolean. - -==============================================================================================*/ - -BOOL fnRegisterWithThreadTable(void) -{ - ThreadInfo* tinfo = NULL; - - #ifdef MPK_ON - tinfo = fnAddThreadInfo(labs((int)kCurrentThread())); - #else - tinfo = fnAddThreadInfo(GetThreadID()); - #endif //MPK_ON - - if (!tinfo) - return FALSE; - else - return TRUE; -} - - -/*============================================================================================ - - Function : fnUnregisterWithThreadTable - - Description : This function unregisters/removes a thread from the thread table. - - Parameters : None. - - Returns : Boolean. - -==============================================================================================*/ - -BOOL fnUnregisterWithThreadTable(void) -{ - #ifdef MPK_ON - return fnRemoveThreadInfo(labs((int)kCurrentThread())); - #else - return fnRemoveThreadInfo(GetThreadID()); - #endif //MPK_ON -} - - -/*============================================================================================ - - Function : fnAddThreadInfo - - Description : Adds a new ThreadInfo for the requested thread. - - Parameters : tid (IN) - ID of the thread. - - Returns : Pointer to the ThreadInfo Structure. - -==============================================================================================*/ - -ThreadInfo* fnAddThreadInfo(int tid) -{ - ThreadInfo* tip = NULL; - int index = 0; - - if (g_tinfoSem) - { - #ifdef MPK_ON - kSemaphoreWait(g_tinfoSem); - #else - WaitOnLocalSemaphore(g_tinfoSem); - #endif //MPK_ON - } - - // Add a new one to the beginning of the hash entry - // - tip = (ThreadInfo *) malloc(sizeof(ThreadInfo)); - if (tip == NULL) - { - if (g_tinfoSem) - { - #ifdef MPK_ON - kSemaphoreSignal(g_tinfoSem); - #else - SignalLocalSemaphore(g_tinfoSem); - #endif //MPK_ON - } - return NULL; - } - index = INDEXOF(tid); // just take the bottom five bits - tip->next = g_ThreadInfo[index]; - tip->tid = tid; - tip->m_dontTouchHashLists = FALSE; - tip->m_allocList = NULL; - - g_ThreadInfo [index] = tip; - if (g_tinfoSem) - { - #ifdef MPK_ON - kSemaphoreSignal(g_tinfoSem); - #else - SignalLocalSemaphore(g_tinfoSem); - #endif //MPK_ON - } - - return tip; -} - - -/*============================================================================================ - - Function : fnRemoveThreadInfo - - Description : Frees the specified thread info structure and removes it from the - global linked list. - - Parameters : tid (IN) - ID of the thread. - - Returns : Boolean. - -==============================================================================================*/ - -BOOL fnRemoveThreadInfo(int tid) -{ - ThreadInfo* tip = NULL; - ThreadInfo* prevt = NULL; - int index = INDEXOF(tid); // just take the bottom five bits - - if (g_tinfoSem) - { - #ifdef MPK_ON - kSemaphoreWait(g_tinfoSem); - #else - WaitOnLocalSemaphore(g_tinfoSem); - #endif //MPK_ON - } - - for (tip = g_ThreadInfo[index]; tip != NULL; tip = tip->next) - { - if (tip->tid == tid) - { - if (prevt == NULL) - g_ThreadInfo[index] = tip->next; - else - prevt->next = tip->next; - - free(tip); - tip=NULL; - if (g_tinfoSem) - { - #ifdef MPK_ON - kSemaphoreSignal(g_tinfoSem); - #else - SignalLocalSemaphore(g_tinfoSem); - #endif //MPK_ON - } - - return TRUE; - } - prevt = tip; - } - - if (g_tinfoSem) - { - #ifdef MPK_ON - kSemaphoreSignal(g_tinfoSem); - #else - SignalLocalSemaphore(g_tinfoSem); - #endif //MPK_ON - } - - return FALSE; // entry not found -} - - -/*============================================================================================ - - Function : fnGetThreadInfo - - Description : Returns the thread info for the given thread ID or NULL if not successful. - - Parameters : tid (IN) - ID of the thread. - - Returns : Pointer to the ThreadInfo Structure. - -==============================================================================================*/ - -ThreadInfo* fnGetThreadInfo(int tid) -{ - ThreadInfo* tip; - int index = INDEXOF(tid); // just take the bottom five bits - - if (g_tinfoSem) { - #ifdef MPK_ON - kSemaphoreWait(g_tinfoSem); - #else - WaitOnLocalSemaphore(g_tinfoSem); - #endif //MPK_ON - } - - // see if this is already in the table at the index'th offset - // - for (tip = g_ThreadInfo[index]; tip != NULL; tip = tip->next) - { - if (tip->tid == tid) - { - if (g_tinfoSem) - { - #ifdef MPK_ON - kSemaphoreSignal(g_tinfoSem); - #else - SignalLocalSemaphore(g_tinfoSem); - #endif //MPK_ON - } - return tip; - } - } - - if (g_tinfoSem) - { - #ifdef MPK_ON - kSemaphoreSignal(g_tinfoSem); - #else - SignalLocalSemaphore(g_tinfoSem); - #endif //MPK_ON - } - - return NULL; -} - -BOOL fnInsertHashListAddrs(void *addrs, BOOL dontTouchHashList) -{ - ThreadInfo* tip; - int index,tid; - - if (g_tinfoSem) - { - #ifdef MPK_ON - kSemaphoreWait(g_tinfoSem); - #else - WaitOnLocalSemaphore(g_tinfoSem); - #endif //MPK_ON - } - - #ifdef MPK_ON - tid=index = abs(kCurrentThread()); - #else - tid=index = GetThreadID(); - #endif //MPK_ON - - index = INDEXOF(index); // just take the bottom five bits - - // see if this is already in the table at the index'th offset - // - for (tip = g_ThreadInfo[index]; tip != NULL; tip = tip->next) - { - if (tip->tid == tid) - { - if (g_tinfoSem) - { - #ifdef MPK_ON - kSemaphoreSignal(g_tinfoSem); - #else - SignalLocalSemaphore(g_tinfoSem); - #endif //MPK_ON - } - tip->m_allocList = addrs; - tip->m_dontTouchHashLists = dontTouchHashList; - return TRUE; - } - } - - if (g_tinfoSem) - { - #ifdef MPK_ON - kSemaphoreSignal(g_tinfoSem); - #else - SignalLocalSemaphore(g_tinfoSem); - #endif //MPK_ON - } - - return FALSE; -} - -BOOL fnGetHashListAddrs(void **addrs, BOOL *dontTouchHashList) -{ - ThreadInfo* tip; - int index,tid; - - if (g_tinfoSem) - { - #ifdef MPK_ON - kSemaphoreWait(g_tinfoSem); - #else - WaitOnLocalSemaphore(g_tinfoSem); - #endif //MPK_ON - } - - #ifdef MPK_ON - tid=index = abs(kCurrentThread()); - #else - tid=index = GetThreadID(); - #endif //MPK_ON - - index = INDEXOF(index); // just take the bottom five bits - - // see if this is already in the table at the index'th offset - // - for (tip = g_ThreadInfo[index]; tip != NULL; tip = tip->next) - { - if (tip->tid == tid) - { - if (g_tinfoSem) - { - #ifdef MPK_ON - kSemaphoreSignal(g_tinfoSem); - #else - SignalLocalSemaphore(g_tinfoSem); - #endif //MPK_ON - } - *addrs = tip->m_allocList; - *dontTouchHashList = tip->m_dontTouchHashLists; - return TRUE; - } - } - - if (g_tinfoSem) - { - #ifdef MPK_ON - kSemaphoreSignal(g_tinfoSem); - #else - SignalLocalSemaphore(g_tinfoSem); - #endif //MPK_ON - } - - return FALSE; -} - - -/*============================================================================================ - - Function : fnInitializeThreadCtx - - Description : Initialises the thread context. - - Parameters : None. - - Returns : Nothing. - -==============================================================================================*/ - -long fnInitializeThreadCtx(void) -{ - int index = 0; - //long tid; - - if (!g_tCtxSem) { - #ifdef MPK_ON - g_tCtxSem = kSemaphoreAlloc((BYTE *)"threadCtx", 1); - #else - g_tCtxSem = OpenLocalSemaphore(1); - #endif //MPK_ON - - g_ThreadCtx =NULL; - } - - return 0l; -} - - -/*============================================================================================ - - Function : fnAddThreadCtx - - Description : Add a new thread context. - - Parameters : lTLSIndex (IN) - Index - t (IN) - void pointer. - - Returns : Pointer to ThreadContext structure. - -==============================================================================================*/ - -ThreadContext* fnAddThreadCtx(long lTLSIndex, void *t) -{ - ThreadContext* tip = NULL; - ThreadContext* temp = NULL; - - if (g_tCtxSem) - { - #ifdef MPK_ON - kSemaphoreWait(g_tCtxSem); - #else - WaitOnLocalSemaphore(g_tCtxSem); - #endif //MPK_ON - } - - // add a new one to the beginning of the list - // - tip = (ThreadContext *) malloc(sizeof(ThreadContext)); - if (tip == NULL) - { - if (g_tCtxSem) - { - #ifdef MPK_ON - kSemaphoreSignal(g_tCtxSem); - #else - SignalLocalSemaphore(g_tCtxSem); - #endif //MPK_ON - } - return NULL; - } - - #ifdef MPK_ON - lTLSIndex = labs(kCurrentThread()); - #else - lTLSIndex = GetThreadID(); - #endif //MPK_ON - - tip->next = NULL; - tip->tid = lTLSIndex; - tip->tInfo = t; - - if(g_ThreadCtx==NULL) { - g_ThreadCtx = tip; - } else { - int count=0; - //Traverse to the end - temp = g_ThreadCtx; - while(temp->next != NULL) - { - temp = temp->next; - count++; - } - temp->next = tip; - } - - if (g_tCtxSem) - { - #ifdef MPK_ON - kSemaphoreSignal(g_tCtxSem); - #else - SignalLocalSemaphore(g_tCtxSem); - #endif //MPK_ON - } - return tip; -} - - -/*============================================================================================ - - Function : fnRemoveThreadCtx - - Description : Removes a thread context. - - Parameters : lTLSIndex (IN) - Index - - Returns : Boolean. - -==============================================================================================*/ - -BOOL fnRemoveThreadCtx(long lTLSIndex) -{ - ThreadContext* tip = NULL; - ThreadContext* prevt = NULL; - - if (g_tCtxSem) - { - #ifdef MPK_ON - kSemaphoreWait(g_tCtxSem); - #else - WaitOnLocalSemaphore(g_tCtxSem); - #endif //MPK_ON - } - - #ifdef MPK_ON - lTLSIndex = labs(kCurrentThread()); - #else - lTLSIndex = GetThreadID(); - #endif //MPK_ON - - tip = g_ThreadCtx; - while(tip) { - if (tip->tid == lTLSIndex) { - if (prevt == NULL) - g_ThreadCtx = tip->next; - else - prevt->next = tip->next; - - free(tip); - tip=NULL; - if (g_tCtxSem) - { - #ifdef MPK_ON - kSemaphoreSignal(g_tCtxSem); - #else - SignalLocalSemaphore(g_tCtxSem); - #endif //MPK_ON - } - return TRUE; - } - prevt = tip; - tip = tip->next; - } - - if (g_tCtxSem) - { - #ifdef MPK_ON - kSemaphoreSignal(g_tCtxSem); - #else - SignalLocalSemaphore(g_tCtxSem); - #endif //MPK_ON - } - - return FALSE; // entry not found -} - - -/*============================================================================================ - - Function : fnGetThreadCtx - - Description : Get a thread context. - - Parameters : lTLSIndex (IN) - Index - - Returns : Nothing. - -==============================================================================================*/ - -void* fnGetThreadCtx(long lTLSIndex) -{ - ThreadContext* tip; - - if (g_tCtxSem) - { - #ifdef MPK_ON - kSemaphoreWait(g_tCtxSem); - #else - WaitOnLocalSemaphore(g_tCtxSem); - #endif //MPK_ON - } - - #ifdef MPK_ON - lTLSIndex = labs(kCurrentThread()); - #else - lTLSIndex = GetThreadID(); - #endif //MPK_ON - - tip = g_ThreadCtx; - while(tip) { - if (tip->tid == lTLSIndex) { - if (g_tCtxSem) - { - #ifdef MPK_ON - kSemaphoreSignal(g_tCtxSem); - #else - SignalLocalSemaphore(g_tCtxSem); - #endif //MPK_ON - } - return (tip->tInfo); - } - tip=tip->next; - } - - if (g_tCtxSem) - { - #ifdef MPK_ON - kSemaphoreSignal(g_tCtxSem); - #else - SignalLocalSemaphore(g_tCtxSem); - #endif //MPK_ON - } - - return NULL; -} - diff --git a/gnu/usr.bin/perl/NetWare/NWUtil.c b/gnu/usr.bin/perl/NetWare/NWUtil.c deleted file mode 100644 index 6d60dfbabdb..00000000000 --- a/gnu/usr.bin/perl/NetWare/NWUtil.c +++ /dev/null @@ -1,858 +0,0 @@ - -/* - * Copyright © 2001 Novell, Inc. All Rights Reserved. - * - * You may distribute under the terms of either the GNU General Public - * License or the Artistic License, as specified in the README file. - * - */ - -/* - * FILENAME : NWUtil.c - * DESCRIPTION : Utility functions for NetWare implementation of Perl. - * Author : HYAK - * Date : January 2001. - * - */ - - - -#include "stdio.h" -#include "string.h" - -#include // For "MAX_DN_BYTES" -#include // For "malloc" and "free" -#include // For "getenv" -#include // For "isspace" - -#include -#include -#include -#include - -#include -#include - -#include "nwutil.h" - - -#define TRUE 1 -#define FALSE 0 - - -/** - Global variables used for better token parsing. When these were absent, - token parsing was not correct when there were more number of arguments passed. - These are used in fnCommandLineParser, fnSkipToken and fnScanToken to get/return - the correct and updated pointer to the command line string. -**/ -char *s1 = NULL; // Used in fnScanToken. -char *s2 = NULL; // Used in fnSkipToken. - - - - -/*============================================================================================ - - Function : fnSkipWhite - - Description : This function skips the white space characters in the given string and - returns the resultant value. - - Parameters : s (IN) - Input string. - - Returns : String. - -==============================================================================================*/ - -char *fnSkipWhite(char *s) -{ - while (isspace(*s)) - s++; - return s; -} - - - -/*============================================================================================ - - Function : fnNwGetEnvironmentStr - - Description : This function returns the NetWare environment string if available, - otherwise returns the supplied default value - - Parameters : name (IN) - To hold the NetWare environment value. - defaultvalue (IN) - Default value. - - - Returns : String. - -==============================================================================================*/ - -char *fnNwGetEnvironmentStr(char *name, char *defaultvalue) -{ - char* ret = getenv(name); - if (ret == NULL) - ret = defaultvalue; - return ret; -} - - - -/*============================================================================================ - - Function : fnCommandLineParser - - Description : This function parses the command line into argc/argv style of - Number of params and array of params. - - Parameters : pclp (IN) - CommandLine structure. - commandLine (IN) - CommandLine String. - preserverQuotes (IN) - Indicates whether to preserve/copy the quotes or not. - - Returns : Nothing. - -==============================================================================================*/ - -void fnCommandLineParser(PCOMMANDLINEPARSER pclp, char * commandLine, BOOL preserveQuotes) -{ - char *buffer = NULL; - - int index = 0; - int do_delete = 1; - int i=0, j=0, k=0; - - - // +1 makes room for the terminating NULL - buffer = (char *) malloc((strlen(commandLine) + 1) * sizeof(char)); - if (buffer == NULL) - { - pclp->m_isValid = FALSE; - return; - } - - if (preserveQuotes) - { - // No I/O redirection nor quote processing if preserveQuotes - - char *s = NULL; - char *sSkippedToken = NULL; - - - strcpy(buffer, commandLine); - s = buffer; - s = fnSkipWhite(s); // Skip white spaces. - - s2 = s; // Update the global pointer. - - - pclp->sSkippedToken = (char *) malloc(MAX_DN_BYTES * sizeof(char)); - if(pclp->sSkippedToken == NULL) - { - pclp->m_isValid = FALSE; - return; - } - - while (*s && pclp->m_isValid) - { -/**** -// Commented since only one time malloc and free is enough as is done outside this while loop. -// It is not required to do them everytime the execution comes into this while loop. -// Still retained here. Remove this once things are proved to be working fine to a good confident level, - - if(pclp->sSkippedToken) - { - free(pclp->sSkippedToken); - pclp->sSkippedToken = NULL; - } - - if(pclp->sSkippedToken == NULL) - { - pclp->sSkippedToken = (char *) malloc(MAX_DN_BYTES * sizeof(char)); - if(pclp->sSkippedToken == NULL) - { - pclp->m_isValid = FALSE; - return; - } - } -****/ - - // Empty the string. - strncpy(pclp->sSkippedToken, "", (MAX_DN_BYTES * sizeof(char))); - - // s is advanced by fnSkipToken - pclp->sSkippedToken = fnSkipToken(s, pclp->sSkippedToken); // Collect the next command-line argument. - - s2 = fnSkipWhite(s2); // s2 is already updated by fnSkipToken. - s = s2; // Update the local pointer too. - - fnAppendArgument(pclp, pclp->sSkippedToken); // Append the argument into an array. - } - - if(pclp->sSkippedToken) - { - free(pclp->sSkippedToken); - pclp->sSkippedToken = NULL; - } - } - else - { - char *s = NULL; - - strcpy(buffer, commandLine); - s = buffer; - s = fnSkipWhite(s); - - s1 = s; // Update the global pointer. - - while (*s && pclp->m_isValid) - { - // s is advanced by fnScanToken - // Check for I/O redirection here, *outside* of - // fnScanToken(), so that quote-protected angle - // brackets do NOT cause redirection. - if (*s == '<') - { - s = fnSkipWhite(s+1); // get stdin redirection - - if(pclp->m_redirInName) - { - free(pclp->m_redirInName); - pclp->m_redirInName = NULL; - } - - if(pclp->m_redirInName == NULL) - { - pclp->m_redirInName = (char *) malloc(MAX_DN_BYTES * sizeof(char)); - if(pclp->m_redirInName == NULL) - { - pclp->m_isValid = FALSE; - return; - } - } - - // Collect the next command-line argument. - pclp->m_redirInName = fnScanToken(s, pclp->m_redirInName); - - s1 = fnSkipWhite(s1); // s1 is already updated by fnScanToken. - s = s1; // Update the local pointer too. - } - else if (*s == '>') - { - s = fnSkipWhite(s+1); //get stdout redirection - - if(pclp->m_redirOutName) - { - free(pclp->m_redirOutName); - pclp->m_redirOutName = NULL; - } - - if(pclp->m_redirOutName == NULL) - { - pclp->m_redirOutName = (char *) malloc(MAX_DN_BYTES * sizeof(char)); - if(pclp->m_redirOutName == NULL) - { - pclp->m_isValid = FALSE; - return; - } - } - - // Collect the next command-line argument. - pclp->m_redirOutName = fnScanToken(s, pclp->m_redirOutName); - - s1 = fnSkipWhite(s1); // s1 is already updated by fnScanToken. - s = s1; // Update the local pointer too. - } - else if (*s == '2' && s[1] == '>') - { - s = fnSkipWhite(s+2); // get stderr redirection - - if(pclp->m_redirErrName) - { - free(pclp->m_redirErrName); - pclp->m_redirErrName = NULL; - } - - if(pclp->m_redirErrName == NULL) - { - pclp->m_redirErrName = (char *) malloc(MAX_DN_BYTES * sizeof(char)); - if(pclp->m_redirErrName == NULL) - { - pclp->m_isValid = FALSE; - return; - } - } - - // Collect the next command-line argument. - pclp->m_redirErrName = fnScanToken(s, pclp->m_redirErrName); - - s1 = fnSkipWhite(s1); // s1 is already updated by fnScanToken. - s = s1; // Update the local pointer too. - } - else if (*s == '&' && s[1] == '>') - { - s = fnSkipWhite(s+2); // get stdout+stderr redirection - - if(pclp->m_redirBothName) - { - free(pclp->m_redirBothName); - pclp->m_redirBothName = NULL; - } - - if(pclp->m_redirBothName == NULL) - { - pclp->m_redirBothName = (char *) malloc(MAX_DN_BYTES * sizeof(char)); - if(pclp->m_redirBothName == NULL) - { - pclp->m_isValid = FALSE; - return; - } - } - - // Collect the next command-line argument. - pclp->m_redirBothName = fnScanToken(s, pclp->m_redirBothName); - - s1 = fnSkipWhite(s1); // s1 is already updated by fnScanToken. - s = s1; // Update the local pointer too. - } - else - { - if(pclp->nextarg) - { - free(pclp->nextarg); - pclp->nextarg = NULL; - } - - if(pclp->nextarg == NULL) - { - pclp->nextarg = (char *) malloc(MAX_DN_BYTES * sizeof(char)); - if(pclp->nextarg == NULL) - { - pclp->m_isValid = FALSE; - return; - } - } - - // Collect the next command-line argument. - pclp->nextarg = fnScanToken(s, pclp->nextarg); - - s1 = fnSkipWhite(s1); // s1 is already updated by fnScanToken. - s = s1; // Update the local pointer too. - - // Append the next command-line argument into an array. - fnAppendArgument(pclp, pclp->nextarg); - } - } - } - - - // The -{ option, the --noscreen option, the --autodestroy option, if present, - // are processed now and removed from the argument vector. - for(index=0; index < pclp->m_argc; ) - { - // "-q" is replaced by "-{", because of clash with GetOpt - sgp - 7th Nov 2000 - // Copied from NDK build - Jan 5th 2001 - if (strncmp(pclp->m_argv[index], (char *)"-{", 2) == 0) - { - // found a -q option; grab the semaphore number - sscanf(pclp->m_argv[index], (char *)"-{%x", &pclp->m_qSemaphore); - fnDeleteArgument(pclp, index); // Delete the argument from the list. - } - else if (strcmp(pclp->m_argv[index], (char *)"--noscreen") == 0) - { - // found a --noscreen option - pclp->m_noScreen = 1; - fnDeleteArgument(pclp, index); - } - else if (strcmp(pclp->m_argv[index], (char *)"--autodestroy") == 0) - { - // found a --autodestroy option - create a screen but close automatically - pclp->m_AutoDestroy = 1; - fnDeleteArgument(pclp, index); - } - else - index++; - } - - // pclp->m_isValid is TRUE if there are more than 2 command line parameters OR - // if there is only one command and if it is the comman PERL. - pclp->m_isValid = ((pclp->m_argc >= 2) || ((pclp->m_argc > 0) && (stricmp(pclp->m_argv[0], LOAD_COMMAND) != 0))); - - if(buffer) - { - free(buffer); - buffer = NULL; - } - - return; -} - - - -/*============================================================================================ - - Function : fnAppendArgument - - Description : This function appends the arguments into a list. - - Parameters : pclp (IN) - CommandLine structure. - new_arg (IN) - The new argument to be appended. - - Returns : Nothing. - -==============================================================================================*/ - -void fnAppendArgument(PCOMMANDLINEPARSER pclp, char *new_arg) -{ - char **new_argv = pclp->new_argv; - - int new_argv_len = pclp->m_argv_len*2; - int i = 0, j = 0; - - - // Lengthen the argument vector if there's not room for another. - // Testing for 'm_argc+2' rather than 'm_argc+1' in the test guarantees - // that there'll always be a NULL terminator at the end of argv. - if ((pclp->m_argc + 2) > pclp->m_argv_len) - { - new_argv = (char **) malloc(new_argv_len * sizeof(char*)); // get a longer arg-vector - if (new_argv == NULL) - { - pclp->m_isValid = FALSE; - return; - } - for(i=0; im_isValid = FALSE; - return; - } - } - - for (i=0; im_argc; i++) - strcpy(new_argv[i], pclp->m_argv[i]); // copy old arg strings - - for(i=0; i<(pclp->m_argv_len); i++) - { - if(pclp->m_argv[i]) - { - free(pclp->m_argv[i]); - pclp->m_argv[i] = NULL; - } - } - if (pclp->m_argv != NULL) - { - free(pclp->m_argv); - pclp->m_argv = NULL; - } - - - pclp->m_argv = new_argv; - pclp->m_argv_len = new_argv_len; - - } - - // Once m_argv is guaranteed long enough, appending the argument is a direct job. - strcpy(pclp->m_argv[pclp->m_argc], new_arg); // Appended the new argument. - pclp->m_argc++; // Increment the number of parameters appended. - - // The char array is emptied for all elements upto the end so that there are no - // junk characters. If this is not done, then the issue is like this: - // - Simple perl command like "perl" on the system console works fine for the first time. - // - When "perl" is executed the second time, a new blank screen should come up - // which allows for editing also. This was not consistently working well. - // More so when the command was like, "perl ", that is the name "perl" followed - // by a few blank spaces, it used to give error in opening file: - // "unable to open the file" since the filename would have some junk characters. - // - // These issues are fixed through the code below. - for(i=pclp->m_argc; im_argv_len; i++) - strncpy(pclp->m_argv[i], "", (MAX_DN_BYTES * sizeof(char))); // MAX_DN_BYTES is the size of pclp->m_argv[]. - - - // Fix for empty command line double quote abend - perl <.pl> "" - if ((new_arg==NULL) || ((strlen(new_arg))<=0)) - { - pclp->m_argc--; // Decrement the number of parameters appended. - pclp->m_isValid = FALSE; - return; - } - - - return; -} - - - -/*============================================================================================ - - Function : fnSkipToken - - Description : This function collects the next command-line argument, breaking on - unquoted white space. The quote symbols are copied into the output. - White space has already been skipped. - - Parameters : s (IN) - Input string in which the token is skipped. - r (IN) - The resultant return string. - - Returns : String. - -==============================================================================================*/ - -char *fnSkipToken(char *s, char *r) -{ - char *t=NULL; - char quote = '\0'; // NULL, single quote, or double quote - char ch = '\0'; - - for (t=s; t[0]; t++) - { - ch = t[0]; - if (!quote) - { - if (isspace(ch)) // if unquoted whitespace... - { - break; // ...end of token found - } - else if (ch=='"' || ch=='\'') // if opening quote... - { - quote = ch; // ...enter quote mode - } - } - else - { - if (ch=='\\' && t[1]==quote) // if escaped quote... - { - t++; // ...skip backslash - } - else if (ch==quote) // if close quote... - { - quote = 0; // ...leave quote mode - } - } - } - - r = fnStashString(s, r, t-s); // get heap-allocated token string - t = fnSkipWhite(t); // skip any trailing white space - s = t; // return updated source pointer - - s2 = t; // return updated global source pointer - - return r; // return heap-allocated token string -} - - - -/*============================================================================================ - - Function : fnScanToken - - Description : This function collects the next command-line argument, breaking on - unquoted white space or I/O redirection symbols. Quote symbols are not - copied into the output. - When called, any leading white space has already been skipped. - - Parameters : x (IN) - Input string in which the token is scanned. - r (IN) - The resultant return string. - - Returns : String. - -==============================================================================================*/ - -char *fnScanToken(char *x, char *r) -{ - char *s = x; // input string position - char *t = x; // output string position - char quote = '\0'; // either NULL, or single quote, or double quote - char ch = '\0'; - char c = '\0'; - - while (*s) - { - ch = *s; // invariant: ch != 0 - - // look to see if we've reached the end of the token - if (!quote) // but don't look for token break if we're inside quotes - { - if (isspace(ch)) - break; // break on whitespace - if (ch=='>') - break; // break on ">" (redirect stdout) - if (ch=='<') - break; // break on "<" (redirect stdin) - if (ch=='&' && x[1]=='>') - break; // break on "&>" (redirect both stdout & stderr) - } - - // process the next source character - if (ch=='\\' && (c=s[1]) && (c=='\\'||c=='>'||c=='<'||c==quote)) - { - //-----------------if an escaped '\\', '>', '<', or quote... - s++; // ...skip over the backslash... - *t++ = *s++; // ...and copy the escaped character - } - else if (ch==quote) // (won't match unless inside quotes because invariant ch!=0) - { - //-----------------if close quote... - s++; // ...skip over the quote... - quote=0; // ...and leave quote mode - } - else if (!quote && (ch=='"' || ch=='\'')) - { - //-----------------if opening quote... - quote = *s++; // ...enter quote mode (remembering quote char, and skipping the quote) - } - else - { //----------if normal character... - *t++ = *s++; // ...copy the character - } - } - - // clean up return values - r = fnStashString(x, r, t-x); // get heap-allocated token string - s = fnSkipWhite(s); // skip any trailing white space - x = s; // return updated source pointer - - s1 = s; // return updated global source pointer - - return r; -} - - - -/*============================================================================================ - - Function : fnStashString - - Description : This function return the heap-allocated token string. - - Parameters : s (IN) - Input string from which the token is extracted. - buffer (IN) - Return string. - length (IN) - Length of the token to be extracted. - - Returns : String. - -==============================================================================================*/ - -char *fnStashString(char *s, char *buffer, int length) -{ - if (length <= 0) - { - // Copy "" instead of NULL since "" indicates that there is memory allocated having no/null value. - // NULL indicates that there is no memory allocated to it! - strcpy(buffer, ""); - } - else - { - strncpy(buffer, s, length); - buffer[length] = '\0'; - } - - return buffer; -} - - - -/*============================================================================================ - - Function : fnDeleteArgument - - Description : This function deletes an argument (that was originally appended) from the list. - - Parameters : pclp (IN) - CommandLine structure. - index (IN) - Index of the argument to be deleted. - - Returns : Nothing. - -==============================================================================================*/ - -void fnDeleteArgument(PCOMMANDLINEPARSER pclp, int index) -{ - int i = index; - - - // If index is greater than the no. of arguments, just return. - if (index >= pclp->m_argc) - return; - - // Move all the arguments after the index one up. - while(i < (pclp->m_argv_len-1)) - { - strcpy(pclp->m_argv[i], pclp->m_argv[i+1]); - i++; - } - - - // Delete the last one and free memory. - if ( pclp->m_argv[i] ) - { - free(pclp->m_argv[i]); - pclp->m_argv[i] = NULL; - } - - - pclp->m_argc--; // Decrement the number of arguments. - pclp->m_argv_len--; - - return; -} - - - -/*============================================================================================ - - Function : fnMy_MkTemp - - Description : This is a standard ANSI C mktemp for NetWare - - Parameters : templatestr (IN) - Input temp filename. - - Returns : String. - -==============================================================================================*/ - -char* fnMy_MkTemp(char* templatestr) -{ - char* pXs=NULL; - char numbuf[50]={'\0'}; - int count=0; - char* pPid=NULL; - - char termchar = '\0'; - char letter = 'a'; - char letter1 = 'a'; - - - if (templatestr && (pXs = strstr(templatestr, (char *)"XXXXXX"))) - { - // generate temp name - termchar = pXs[6]; - ltoa(GetThreadID(), numbuf, 16); -// numbuf[sizeof(numbuf)-1] = '\0'; - numbuf[strlen(numbuf)-1] = '\0'; - // beware! thread IDs are 8 hex digits on NW 4.11 and only the - // lower digits seem to change, whereas on NW 5 they are in the - // range of < 1000 hex or 3 hex digits in length. So the following - // logic ensures we use the least significant portion of the number. - if (strlen(numbuf) > 5) - pPid = &numbuf[strlen(numbuf)-5]; - else - pPid = numbuf; - -/** - Backtick operation uses temp files that are stored under NWDEFPERLTEMP - directory. They are temporarily used and then cleaned up after usage. - In cases where multiple backtick operations are used that call some - complex scripts, new temp files will be created before the old ones are - deleted. So, we need to have a provision to create many temp files. - Hence the below logic. It is found that provision for 26 files may - not be enough in some cases. - - This below logic allows 26 files (like, pla00015.tmp through plz00015.tmp) - plus 6x26=676 (like, plaa0015.tmp through plzz0015.tmp) -**/ - - letter = 'a'; - do - { - sprintf(pXs, (char *)"%c%05.5s", letter, pPid); - pXs[6] = termchar; - if (access(templatestr, 0) != 0) // File does not exist - { - return templatestr; - } - letter++; - } while (letter <= 'z'); - - letter1 = 'a'; - do - { - letter = 'a'; - do - { - sprintf(pXs, (char *)"%c%c%04.5s", letter1, letter, pPid); - pXs[6] = termchar; - if (access(templatestr, 0) != 0) // File does not exist - { - return templatestr; - } - letter++; - } while (letter <= 'z'); - letter1++; - } while (letter1 <= 'z'); - - errno = ENOENT; - return NULL; - } - else - { - errno = EINVAL; - return NULL; - } -} - - - -/*============================================================================================ - - Function : fnSystemCommand - - Description : This function constructs a system command from the given - null-terminated argv array and runs the command on the system console. - - Parameters : argv (IN) - Array of input commands. - argc (IN) - Number of input parameters. - - Returns : Nothing. - -==============================================================================================*/ - -void fnSystemCommand (char** argv, int argc) -{ - // calculate the size of a temp buffer needed - int k = 0; - int totalSize = 0; - int bytes = 0; - char* tempCmd = NULL; - char* tptr = NULL; - - - for(k=0; k -#include -#include - -#include "perl.h" -#include "nwutil.h" -#include "stdio.h" -#include "clibstuf.h" - -#ifdef MPK_ON - #include - #include -#endif //MPK_ON - - -// Thread group ID for this NLM. Set only by main when the NLM is initially loaded, -// so it should be okay for this to be global. -// -#ifdef MPK_ON - THREAD gThreadHandle; -#else - int gThreadGroupID = -1; -#endif //MPK_ON - - -// Global to kill all running scripts during NLM unload. -// -bool gKillAll = FALSE; - - -// Global structure needed by OS to register command parser. -// fnRegisterCommandLineHandler gets called only when the NLM is initially loaded, -// so it should be okay for this structure to be a global. -// -static struct commandParserStructure gCmdParser = {0,0,0}; - - -// True if the command-line parsing procedure has been registered with the OS. -// Altered only during initial NLM loading or unloading so it should be okay as a global. -// -BOOL gCmdProcInit = FALSE; - - -// Array to hold the screen name for all new screens. -// -char sPerlScreenName[MAX_DN_BYTES * sizeof(char)] = {'\0'}; - - -// Structure to pass data when spawning new threadgroups to run scripts. -// -typedef struct tagScriptData -{ - char *m_commandLine; - BOOL m_fromConsole; -}ScriptData; - - -#define CS_CMD_NOT_FOUND -1 // Console command not found -#define CS_CMD_FOUND 0 // Console command found - -/** - The stack size is make 256k from the earlier 64k since complex scripts (charnames.t and complex.t) - were failing with the lower stack size. In fact, we tested with 128k and it also failed - for the complexity of the script used. In case the complexity of a script is increased, - then this might warrant an increase in the stack size. But instead of simply giving a very large stack, - a trade off was required and we stopped at 256k! -**/ -#define PERL_COMMAND_STACK_SIZE (256*1024L) // Stack size of thread that runs a perl script from command line - -#define MAX_COMMAND_SIZE 512 - - -#define kMaxValueLen 1024 // Size of the Environment variable value limited/truncated to 1024 characters. -#define kMaxVariableNameLen 256 // Size of the Environment variable name. - - -typedef void (*PFUSEACCURATECASEFORPATHS) (int); -typedef LONG (*PFGETFILESERVERMAJORVERSIONNUMBER) (void); -typedef void (*PFUCSTERMINATE) (); // For ucs terminate. -typedef void (*PFUNAUGMENTASTERISK)(BOOL); // For longfile support. -typedef int (*PFFSETMODE) (FILE *, char *); - - -// local function prototypes -// -void fnSigTermHandler(int sig); -void fnRegisterCommandLineHandler(void); -void fnLaunchPerl(void* context); -void fnSetUpEnvBlock(char*** penv); -void fnDestroyEnvBlock(char** env); -int fnFpSetMode(FILE* fp, int mode, int *err); - -void fnGetPerlScreenName(char *sPerlScreenName); - -void fnGetPerlScreenName(char *sPerlScreenName); -void fnSetupNamespace(void); -char *getcwd(char [], int); -void fnRunScript(ScriptData* psdata); -void nw_freeenviron(); - - -/*============================================================================================ - - Function : main - - Description : Called when the NLM is first loaded. Registers the command-line handler - and then terminates-stay-resident. - - Parameters : argc (IN) - No of Input strings. - argv (IN) - Array of Input strings. - - Returns : Nothing. - -==============================================================================================*/ - -void main(int argc, char *argv[]) -{ - char sysCmdLine[MAX_COMMAND_SIZE] = {'\0'}; - char cmdLineCopy[sizeof(PERL_COMMAND_NAME)+sizeof(sysCmdLine)+2] = {'\0'}; - - ScriptData* psdata = NULL; - - - // Keep this thread alive, since we use the thread group id of this thread to allocate memory on. - // When we unload the NLM, clib will tear the thread down. - // - #ifdef MPK_ON - gThreadHandle = kCurrentThread(); - #else - gThreadGroupID = GetThreadGroupID (); - #endif //MPK_ON - - signal (SIGTERM, fnSigTermHandler); - fnInitGpfGlobals(); // For importing the CLIB calls in place of the Watcom calls - fnInitializeThreadInfo(); - - -// Ensure that we have a "temp" directory - fnSetupNamespace(); - if (access(NWDEFPERLTEMP, 0) != 0) - mkdir(NWDEFPERLTEMP); - - // Create the file NUL if not present. This is done only once per NLM load. - // This is required for -e. - // Earlier versions were creating temporary files (in perl.c file) for -e. - // Now, the technique of creating temporary files are removed since they were - // fragile or insecure or slow. It now uses the memory by setting - // the BIT_BUCKET to "nul" on Win32, which is equivalent to /dev/nul of Unix. - // Since there is no equivalent of /dev/nul on NetWare, the work-around is that - // we create a file called "nul" and the BIT_BUCKET is set to "nul". - // This makes sure that -e works on NetWare too without the creation of temporary files - // in -e code in perl.c - { - char sNUL[MAX_DN_BYTES] = {'\0'}; - - strcpy(sNUL, NWDEFPERLROOT); - strcat(sNUL, "\\nwnul"); - if (access((const char *)sNUL, 0) != 0) - { - // The file, "nul" is not found and so create the file. - FILE *fp = NULL; - - fp = fopen((const char *)sNUL, (const char *)"w"); - fclose(fp); - } - } - - fnRegisterCommandLineHandler(); // Register the command line handler - SynchronizeStart(); // Restart the NLM startup process when using synchronization mode. - - fnGetPerlScreenName(sPerlScreenName); // Get the screen name. Done only once per NLM load. - - - // If the command line has two strings, then the first has to be "Perl" and the second is assumed - // to be a script to be run. If only one string (i.e., Perl) is input, then there is nothing to do! - // - if ((argc > 1) && getcmd(sysCmdLine)) - { - strcpy(cmdLineCopy, PERL_COMMAND_NAME); - strcat(cmdLineCopy, (char *)" "); // Space between the Perl Command and the input script name. - strcat(cmdLineCopy, sysCmdLine); // The command line parameters built into - - // Create a safe copy of the command line and pass it to the - // new thread for parsing. The new thread will be responsible - // to delete it when it is finished with it. - // - psdata = (ScriptData *) malloc(sizeof(ScriptData)); - if (psdata) - { - psdata->m_commandLine = NULL; - psdata->m_commandLine = (char *) malloc(MAX_DN_BYTES * sizeof(char)); - if(psdata->m_commandLine) - { - strcpy(psdata->m_commandLine, cmdLineCopy); - psdata->m_fromConsole = TRUE; - - #ifdef MPK_ON -// kStartThread((char *)"ConsoleHandlerThread", fnLaunchPerl, NULL, PERL_COMMAND_STACK_SIZE, (void *)psdata); - // Establish a new thread within a new thread group. - BeginThreadGroup(fnLaunchPerl, NULL, PERL_COMMAND_STACK_SIZE, (void*)psdata); - #else - // Start a new thread in its own thread group - BeginThreadGroup(fnLaunchPerl, NULL, PERL_COMMAND_STACK_SIZE, (void*)psdata); - #endif //MPK_ON - } - else - { - free(psdata); - psdata = NULL; - return; - } - } - else - return; - } - - - // Keep this thread alive, since we use the thread group id of this thread to allocate memory on. - // When we unload the NLM, clib will tear the thread down. - // - #ifdef MPK_ON - kSuspendThread(gThreadHandle); - #else - SuspendThread(GetThreadID()); - #endif //MPK_ON - - - return; -} - - - -/*============================================================================================ - - Function : fnSigTermHandler - - Description : Called when the NLM is unloaded; used to unregister the console command handler. - - Parameters : sig (IN) - - Returns : Nothing. - -==============================================================================================*/ - -void fnSigTermHandler(int sig) -{ - int k = 0; - - - #ifdef MPK_ON - kResumeThread(gThreadHandle); - #endif //MPK_ON - - // Unregister the command line handler. - // - if (gCmdProcInit) - { - UnRegisterConsoleCommand (&gCmdParser); - gCmdProcInit = FALSE; - } - - // Free the global environ buffer - nw_freeenviron(); - - // Kill running scripts. - // - if (!fnTerminateThreadInfo()) - { - ConsolePrintf("Terminating Perl scripts...\n"); - gKillAll = TRUE; - - // fnTerminateThreadInfo will be run for 5 threads. If more threads/scripts are run, - // then the NLM will unload without terminating the thread info and leaks more memory. - // If this number is increased to reduce memory leaks, then it will unnecessarily take more time - // to unload when there are a smaller no of threads. Since this is a rare case, the no is kept as 5. - // - while (!fnTerminateThreadInfo() && k < 5) - { - nw_sleep(1); - k++; - } - } - - // Delete the file, "nul" if present since the NLM is unloaded. - { - char sNUL[MAX_DN_BYTES] = {'\0'}; - - strcpy(sNUL, NWDEFPERLROOT); - strcat(sNUL, "\\nwnul"); - if (access((const char *)sNUL, 0) == 0) - { - // The file, "nul" is found and so delete it. - unlink((const char *)sNUL); - } - } -} - - - -/*============================================================================================ - - Function : fnCommandLineHandler - - Description : Gets called by OS when someone enters an unknown command at the system console, - after this routine is registered by RegisterConsoleCommand. - For the valid command we just spawn a thread with enough stack space - to actually run the script. - - Parameters : screenID (IN) - id for the screen. - cmdLine (IN) - Command line string. - - Returns : Long. - -==============================================================================================*/ - -LONG fnCommandLineHandler (LONG screenID, BYTE * cmdLine) -{ - ScriptData* psdata=NULL; - int OsThrdGrpID = -1; - LONG retCode = CS_CMD_FOUND; - char* cptr = NULL; - - - #ifdef MPK_ON - // Initialisation for MPK_ON - #else - OsThrdGrpID = -1; - #endif //MPK_ON - - - #ifdef MPK_ON - // For MPK_ON - #else - if (gThreadGroupID != -1) - OsThrdGrpID = SetThreadGroupID (gThreadGroupID); - #endif //MPK_ON - - - cptr = fnSkipWhite(cmdLine); // Skip white spaces. - if ((strnicmp(cptr, PERL_COMMAND_NAME, strlen(PERL_COMMAND_NAME)) == 0) && - ((cptr[strlen(PERL_COMMAND_NAME)] == ' ') || - (cptr[strlen(PERL_COMMAND_NAME)] == '\t') || - (cptr[strlen(PERL_COMMAND_NAME)] == '\0'))) - { - // Create a safe copy of the command line and pass it to the new thread for parsing. - // The new thread will be responsible to delete it when it is finished with it. - // - psdata = (ScriptData *) malloc(sizeof(ScriptData)); - if (psdata) - { - psdata->m_commandLine = NULL; - psdata->m_commandLine = (char *) malloc(MAX_DN_BYTES * sizeof(char)); - if(psdata->m_commandLine) - { - strcpy(psdata->m_commandLine, (char *)cmdLine); - psdata->m_fromConsole = TRUE; - - #ifdef MPK_ON -// kStartThread((char *)"ConsoleHandlerThread", fnLaunchPerl, NULL, PERL_COMMAND_STACK_SIZE, (void *)psdata); - // Establish a new thread within a new thread group. - BeginThreadGroup(fnLaunchPerl, NULL, PERL_COMMAND_STACK_SIZE, (void*)psdata); - #else - // Start a new thread in its own thread group - BeginThreadGroup(fnLaunchPerl, NULL, PERL_COMMAND_STACK_SIZE, (void*)psdata); - #endif //MPK_ON - } - else - { - free(psdata); - psdata = NULL; - retCode = CS_CMD_NOT_FOUND; - } - } - else - retCode = CS_CMD_NOT_FOUND; - } - else - retCode = CS_CMD_NOT_FOUND; - - - #ifdef MPK_ON - // For MPK_ON - #else - if (OsThrdGrpID != -1) - SetThreadGroupID (OsThrdGrpID); - #endif //MPK_ON - - - return retCode; -} - - - -/*============================================================================================ - - Function : fnRegisterCommandLineHandler - - Description : Registers the console command-line parsing function with the OS. - - Parameters : None. - - Returns : Nothing. - -==============================================================================================*/ - -void fnRegisterCommandLineHandler(void) -{ - // Allocates resource tag for Console Command - if ((gCmdParser.RTag = - AllocateResourceTag (GetNLMHandle(), (char *)"Console Command", ConsoleCommandSignature)) != 0) - { - gCmdParser.parseRoutine = fnCommandLineHandler; // Set the Console Command parsing routine. - RegisterConsoleCommand (&gCmdParser); // Registers the Console Command parsing function - gCmdProcInit = TRUE; - } - - return; -} - - - -/*============================================================================================ - - Function : fnSetupNamespace - - Description : Sets the name space of the current threadgroup to the long name space. - - Parameters : None. - - Returns : Nothing. - -==============================================================================================*/ - -void fnSetupNamespace(void) -{ - SetCurrentNameSpace(NWOS2_NAME_SPACE); - - - //LATER: call SetTargetNameSpace(NWOS2_NAME_SPACE)? Currently, if - // I make this call, then CPerlExe::Rename fails in certain cases, - // and it isn't clear why. Looks like a CLIB bug... -// SetTargetNameSpace(NWOS2_NAME_SPACE); - - //Uncommented that above call, retaining the comment so that it will be easy - //to revert back if there is any problem - sgp - 10th May 2000 - - //Commented again, since Perl debugger had some problems because of - //the above call - sgp - 20th June 2000 - - { - // if running on Moab, call UseAccurateCaseForPaths. This API - // does bad things on 4.11 so we call only for Moab. - PFGETFILESERVERMAJORVERSIONNUMBER pf_getfileservermajorversionnumber = NULL; - pf_getfileservermajorversionnumber = (PFGETFILESERVERMAJORVERSIONNUMBER) - ImportSymbol(GetNLMHandle(), (char *)"GetFileServerMajorVersionNumber"); - if (pf_getfileservermajorversionnumber && ((*pf_getfileservermajorversionnumber)() > 4)) - { - PFUSEACCURATECASEFORPATHS pf_useaccuratecaseforpaths = NULL; - pf_useaccuratecaseforpaths = (PFUSEACCURATECASEFORPATHS) - ImportSymbol(GetNLMHandle(), (char *)"UseAccurateCaseForPaths"); - if (pf_useaccuratecaseforpaths) - (*pf_useaccuratecaseforpaths)(TRUE); - { - PFUNAUGMENTASTERISK pf_unaugmentasterisk = NULL; - pf_unaugmentasterisk = (PFUNAUGMENTASTERISK) - ImportSymbol(GetNLMHandle(), (char *)"UnAugmentAsterisk"); - if (pf_unaugmentasterisk) - (*pf_unaugmentasterisk)(TRUE); - } - } - } - - return; -} - - - -/*============================================================================================ - - Function : fnLaunchPerl - - Description : Parse the command line into argc/argv style parameters and then run the script. - - Parameters : context (IN) - void* that will be typecasted to ScriptDate structure. - - Returns : Nothing. - -==============================================================================================*/ - -void fnLaunchPerl(void* context) -{ - char* defaultDir = NULL; - char curdir[_MAX_PATH] = {'\0'}; - ScriptData* psdata = (ScriptData *) context; - - unsigned int moduleHandle = 0; - int currentThreadGroupID = -1; - - #ifdef MPK_ON - kExitNetWare(); - #endif //MPK_ON - - errno = 0; - - if (psdata->m_fromConsole) - { - // get the default working directory name - // - defaultDir = fnNwGetEnvironmentStr("PERL_ROOT", NWDEFPERLROOT); - } - else - defaultDir = getcwd(curdir, sizeof(curdir)-1); - - // set long name space - // - fnSetupNamespace(); - - // make the working directory the current directory if from console - // - if (psdata->m_fromConsole) - chdir(defaultDir); - - // run the script - // - fnRunScript(psdata); - - // May have to check this, I am blindly calling UCSTerminate, irrespective of - // whether it is initialized or not - // Copied from the previous Perl - sgp - 31st Oct 2000 - moduleHandle = FindNLMHandle("UCSCORE.NLM"); - if (moduleHandle) - { - PFUCSTERMINATE ucsterminate = (PFUCSTERMINATE)ImportSymbol(moduleHandle, "therealUCSTerminate"); - if (ucsterminate!=NULL) - (*ucsterminate)(); - } - - if (psdata->m_fromConsole) - { - // change thread groups for the call to free the memory - // allocated before the new thread group was started - #ifdef MPK_ON - // For MPK_ON - #else - if (gThreadGroupID != -1) - currentThreadGroupID = SetThreadGroupID (gThreadGroupID); - #endif //MPK_ON - } - - // Free memory - if (psdata) - { - if(psdata->m_commandLine) - { - free(psdata->m_commandLine); - psdata->m_commandLine = NULL; - } - - free(psdata); - psdata = NULL; - context = NULL; - } - - #ifdef MPK_ON - // For MPK_ON - #else - if (currentThreadGroupID != -1) - SetThreadGroupID (currentThreadGroupID); - #endif //MPK_ON - - #ifdef MPK_ON -// kExitThread(NULL); - #else - // just let the thread terminate by falling off the end of the - // function started by BeginThreadGroup -// ExitThread(EXIT_THREAD, 0); - #endif - - return; -} - - - -/*============================================================================================ - - Function : fnRunScript - - Description : Parses and runs a perl script. - - Parameters : psdata (IN) - ScriptData structure. - - Returns : Nothing. - -==============================================================================================*/ - -void fnRunScript(ScriptData* psdata) -{ - char **av=NULL; - char **en=NULL; - int exitstatus = 1; - int i=0, j=0; - int *dummy = 0; - - PCOMMANDLINEPARSER pclp = NULL; - - // Set up the environment block. This will only work on - // on Moab; on 4.11 the environment block will be empty. - char** env = NULL; - - BOOL use_system_console = TRUE; - BOOL newscreen = FALSE; - int newscreenhandle = 0; - - // redirect stdin or stdout and run the script - FILE* redirOut = NULL; - FILE* redirIn = NULL; - FILE* redirErr = NULL; - FILE* stderr_fp = NULL; - - int stdin_fd=-1, stdin_fd_dup=-1; - int stdout_fd=-1, stdout_fd_dup=-1; - int stderr_fd=-1, stderr_fd_dup=-1; - - - // Main callback instance - // - if (fnRegisterWithThreadTable() == FALSE) - return; - - // parse the command line into argc/argv style: - // number of params and char array of params - // - pclp = (PCOMMANDLINEPARSER) malloc(sizeof(COMMANDLINEPARSER)); - if (!pclp) - { - fnUnregisterWithThreadTable(); - return; - } - - // Initialise the variables - pclp->m_isValid = TRUE; - pclp->m_redirInName = NULL; - pclp->m_redirOutName = NULL; - pclp->m_redirErrName = NULL; - pclp->m_redirBothName = NULL; - pclp->nextarg = NULL; - pclp->sSkippedToken = NULL; - pclp->m_argv = NULL; - pclp->new_argv = NULL; - - #ifdef MPK_ON - pclp->m_qSemaphore = NULL; - #else - pclp->m_qSemaphore = 0L; - #endif //MPK_ON - - pclp->m_noScreen = 0; - pclp->m_AutoDestroy = 0; - pclp->m_argc = 0; - pclp->m_argv_len = 1; - - // Allocate memory - pclp->m_argv = (char **) malloc(pclp->m_argv_len * sizeof(char *)); - if (pclp->m_argv == NULL) - { - free(pclp); - pclp = NULL; - - fnUnregisterWithThreadTable(); - return; - } - - pclp->m_argv[0] = (char *) malloc(MAX_DN_BYTES * sizeof(char)); - if (pclp->m_argv[0] == NULL) - { - free(pclp->m_argv); - pclp->m_argv=NULL; - - free(pclp); - pclp = NULL; - - fnUnregisterWithThreadTable(); - return; - } - - // Parse the command line - fnCommandLineParser(pclp, (char *)psdata->m_commandLine, FALSE); - if (!pclp->m_isValid) - { - if(pclp->m_argv) - { - for(i=0; im_argv_len; i++) - { - if(pclp->m_argv[i] != NULL) - { - free(pclp->m_argv[i]); - pclp->m_argv[i] = NULL; - } - } - - free(pclp->m_argv); - pclp->m_argv = NULL; - } - - if(pclp->nextarg) - { - free(pclp->nextarg); - pclp->nextarg = NULL; - } - if(pclp->sSkippedToken != NULL) - { - free(pclp->sSkippedToken); - pclp->sSkippedToken = NULL; - } - - if(pclp->m_redirInName) - { - free(pclp->m_redirInName); - pclp->m_redirInName = NULL; - } - if(pclp->m_redirOutName) - { - free(pclp->m_redirOutName); - pclp->m_redirOutName = NULL; - } - if(pclp->m_redirErrName) - { - free(pclp->m_redirErrName); - pclp->m_redirErrName = NULL; - } - if(pclp->m_redirBothName) - { - free(pclp->m_redirBothName); - pclp->m_redirBothName = NULL; - } - - // Signal a semaphore, if indicated by "-{" option, to indicate that - // the script has terminated and files are closed - // - if (pclp->m_qSemaphore != 0) - { - #ifdef MPK_ON - kSemaphoreSignal(pclp->m_qSemaphore); - #else - SignalLocalSemaphore(pclp->m_qSemaphore); - #endif //MPK_ON - } - - free(pclp); - pclp = NULL; - - fnUnregisterWithThreadTable(); - return; - } - - // Simulating a shell on NetWare can be difficult. If you don't - // create a new screen for the script to run in, you can output to - // the console but you can't get any input from the console. Therefore, - // every invocation of perl potentially needs its own screen unless - // you are running either "perl -h" or "perl -v" or you are redirecting - // stdin from a file. - // - // So we need to create a new screen and set that screen as the current - // screen when running any script launched from the console that is not - // "perl -h" or "perl -v" and is not redirecting stdin from a file. - // - // But it would be a little weird if we didn't create a new screen only - // in the case when redirecting stdin from a file; in only that case, - // stdout would be the console instead of a new screen. - // - // There is also the issue of standard err. In short, we might as well - // create a new screen no matter what is going on with redirection, just - // for the sake of consistency. - // - // In summary, we should a create a new screen and make that screen the - // current screen unless one of the following is true: - // * The command is "perl -h" - // * The command is "perl -v" - // * The script was launched by another perl script. In this case, - // the screen belonging to the parent perl script should probably be - // the same screen for this process. And it will be if use BeginThread - // instead of BeginThreadGroup when launching Perl from within a Perl - // script. - // - // In those cases where we create a new screen we should probably also display - // that screen. - // - - use_system_console = pclp->m_noScreen || - ((pclp->m_argc == 2) && (strcmp(pclp->m_argv[1], (char *)"-h") == 0)) || - ((pclp->m_argc == 2) && (strcmp(pclp->m_argv[1], (char *)"-v") == 0)); - - newscreen = (!use_system_console) && psdata->m_fromConsole; - - if (newscreen) - { - newscreenhandle = CreateScreen(sPerlScreenName, 0); - if (newscreenhandle) - DisplayScreen(newscreenhandle); - } - else if (use_system_console) - CreateScreen((char *)"System Console", 0); - - if (pclp->m_redirInName) - { - if ((stdin_fd = fileno(stdin)) != -1) - { - stdin_fd_dup = dup(stdin_fd); - if (stdin_fd_dup != -1) - { - redirIn = fdopen (stdin_fd_dup, (char const *)"r"); - if (redirIn) - stdin = freopen (pclp->m_redirInName, (char const *)"r", redirIn); - if (!stdin) - { - redirIn = NULL; - // undo the redirect, if possible - stdin = fdopen(stdin_fd, (char const *)"r"); - } - } - } - } - - /** - The below code stores the handle for the existing stdout to be used later and the existing stdout is closed. - stdout is then initialised to the new File pointer where the operations are done onto that. - Later (look below for the code), the saved stdout is restored back. - **/ - if (pclp->m_redirOutName) - { - if ((stdout_fd = fileno(stdout)) != -1) // Handle of the existing stdout. - { - stdout_fd_dup = dup(stdout_fd); - if (stdout_fd_dup != -1) - { - // Close the existing stdout. - fflush(stdout); // Write any unwritten data to the file. - - // New stdout - redirOut = fdopen (stdout_fd_dup, (char const *)"w"); - if (redirOut) - stdout = freopen (pclp->m_redirOutName, (char const *)"w", redirOut); - if (!stdout) - { - redirOut = NULL; - // Undo the redirection. - stdout = fdopen(stdout_fd, (char const *)"w"); - } - setbuf(stdout, NULL); // Unbuffered file pointer. - } - } - } - - if (pclp->m_redirErrName) - { - if ((stderr_fd = fileno(stderr)) != -1) - { - stderr_fd_dup = dup(stderr_fd); - if (stderr_fd_dup != -1) - { - fflush(stderr); - - redirErr = fdopen (stderr_fd_dup, (char const *)"w"); - if (redirErr) - stderr = freopen (pclp->m_redirErrName, (char const *)"w", redirErr); - if (!stderr) - { - redirErr = NULL; - // undo the redirect, if possible - stderr = fdopen(stderr_fd, (char const *)"w"); - } - setbuf(stderr, NULL); // Unbuffered file pointer. - } - } - } - - if (pclp->m_redirBothName) - { - if ((stdout_fd = fileno(stdout)) != -1) - { - stdout_fd_dup = dup(stdout_fd); - if (stdout_fd_dup != -1) - { - fflush(stdout); - - redirOut = fdopen (stdout_fd_dup, (char const *)"w"); - if (redirOut) - stdout = freopen (pclp->m_redirBothName, (char const *)"w", redirOut); - if (!stdout) - { - redirOut = NULL; - // undo the redirect, if possible - stdout = fdopen(stdout_fd, (char const *)"w"); - } - setbuf(stdout, NULL); // Unbuffered file pointer. - } - } - if ((stderr_fd = fileno(stderr)) != -1) - { - stderr_fp = stderr; - stderr = stdout; - } - } - - env = NULL; - fnSetUpEnvBlock(&env); // Set up the ENV block - - // Run the Perl script - exitstatus = RunPerl(pclp->m_argc, pclp->m_argv, env); - - // clean up any redirection - // - if (pclp->m_redirInName && redirIn) - { - fclose(stdin); - stdin = fdopen(stdin_fd, (char const *)"r"); // Put back the old handle for stdin. - } - - if (pclp->m_redirOutName && redirOut) - { - // Close the new stdout. - fflush(stdout); - fclose(stdout); - - // Put back the old handle for stdout. - stdout = fdopen(stdout_fd, (char const *)"w"); - setbuf(stdout, NULL); // Unbuffered file pointer. - } - - if (pclp->m_redirErrName && redirErr) - { - fflush(stderr); - fclose(stderr); - - stderr = fdopen(stderr_fd, (char const *)"w"); // Put back the old handle for stderr. - setbuf(stderr, NULL); // Unbuffered file pointer. - } - - if (pclp->m_redirBothName && redirOut) - { - stderr = stderr_fp; - - fflush(stdout); - fclose(stdout); - - stdout = fdopen(stdout_fd, (char const *)"w"); // Put back the old handle for stdout. - setbuf(stdout, NULL); // Unbuffered file pointer. - } - - - if (newscreen && newscreenhandle) - { - //added for --autodestroy switch - if(!pclp->m_AutoDestroy) - { - if ((redirOut == NULL) && (redirIn == NULL) && (!gKillAll)) - { - printf((char *)"\n\nPress any key to exit\n"); - getch(); - } - } - DestroyScreen(newscreenhandle); - } - -/** - // Commented since a few abends were happening in fnFpSetMode - // Set the mode for stdin and stdout - fnFpSetMode(stdin, O_TEXT, dummy); - fnFpSetMode(stdout, O_TEXT, dummy); -**/ - setmode(stdin, O_TEXT); - setmode(stdout, O_TEXT); - - // Cleanup - if(pclp->m_argv) - { - for(i=0; im_argv_len; i++) - { - if(pclp->m_argv[i] != NULL) - { - free(pclp->m_argv[i]); - pclp->m_argv[i] = NULL; - } - } - - free(pclp->m_argv); - pclp->m_argv = NULL; - } - - if(pclp->nextarg) - { - free(pclp->nextarg); - pclp->nextarg = NULL; - } - if(pclp->sSkippedToken != NULL) - { - free(pclp->sSkippedToken); - pclp->sSkippedToken = NULL; - } - - if(pclp->m_redirInName) - { - free(pclp->m_redirInName); - pclp->m_redirInName = NULL; - } - if(pclp->m_redirOutName) - { - free(pclp->m_redirOutName); - pclp->m_redirOutName = NULL; - } - if(pclp->m_redirErrName) - { - free(pclp->m_redirErrName); - pclp->m_redirErrName = NULL; - } - if(pclp->m_redirBothName) - { - free(pclp->m_redirBothName); - pclp->m_redirBothName = NULL; - } - - // Signal a semaphore, if indicated by -{ option, to indicate that - // the script has terminated and files are closed - // - if (pclp->m_qSemaphore != 0) - { - #ifdef MPK_ON - kSemaphoreSignal(pclp->m_qSemaphore); - #else - SignalLocalSemaphore(pclp->m_qSemaphore); - #endif //MPK_ON - } - - if(pclp) - { - free(pclp); - pclp = NULL; - } - - if(env) - { - fnDestroyEnvBlock(env); - env = NULL; - } - - fnUnregisterWithThreadTable(); - // Remove the thread context set during Perl_set_context - Remove_Thread_Ctx(); - - return; -} - - - -/*============================================================================================ - - Function : fnSetUpEnvBlock - - Description : Sets up the initial environment block. - - Parameters : penv (IN) - ENV variable as char***. - - Returns : Nothing. - -==============================================================================================*/ - -void fnSetUpEnvBlock(char*** penv) -{ - char** env = NULL; - - int sequence = 0; - char var[kMaxVariableNameLen+1] = {'\0'}; - char val[kMaxValueLen+1] = {'\0'}; - char both[kMaxVariableNameLen + kMaxValueLen + 5] = {'\0'}; - size_t len = kMaxValueLen; - int totalcnt = 0; - - while(scanenv( &sequence, var, &len, val )) - { - totalcnt++; - len = kMaxValueLen; - } - // add one for null termination - totalcnt++; - - env = (char **) malloc (totalcnt * sizeof(char *)); - if (env) - { - int cnt = 0; - int i = 0; - - sequence = 0; - len = kMaxValueLen; - - while( (cnt < (totalcnt-1)) && scanenv( &sequence, var, &len, val ) ) - { - val[len] = '\0'; - strcpy( both, var ); - strcat( both, (char *)"=" ); - strcat( both, val ); - - env[cnt] = (char *) malloc((sizeof(both)+1) * sizeof(char)); - if (env[cnt]) - { - strcpy(env[cnt], both); - cnt++; - } - else - { - for(i=0; im_commandLine = NULL; - psdata->m_commandLine = (char *) malloc(MAX_DN_BYTES * sizeof(char)); - - if(psdata->m_commandLine) - { - strcpy(psdata->m_commandLine, cmdLine); - psdata->m_fromConsole = FALSE; - - #ifdef MPK_ON - BeginThread(fnLaunchPerl, NULL, PERL_COMMAND_STACK_SIZE, (void*)psdata); - #else - // Start a new thread in its own thread group - BeginThread(fnLaunchPerl, NULL, PERL_COMMAND_STACK_SIZE, (void*)psdata); - #endif //MPK_ON - } - else - { - free(psdata); - psdata = NULL; - return; - } - } - else - return; - - return; -} - - - -/*============================================================================================ - - Function : fnGetPerlScreenName - - Description : This function creates the Perl screen name. - Gets called from main only once when the Perl NLM loads. - - Parameters : sPerlScreenName (OUT) - Resultant Perl screen name. - - Returns : Nothing. - -==============================================================================================*/ - -void fnGetPerlScreenName(char *sPerlScreenName) -{ - // HYAK: - // The logic for using 32 in the below array sizes is like this: - // The NetWare CLIB SDK documentation says that for base 2 conversion, - // this number must be minimum 8. Also, in the example of the documentation, - // 20 is used as the size and testing is done for bases from 2 upto 16. - // So, to simply chose a number above 20 and also keeping in mind not to reserve - // unnecessary big array sizes, I have chosen 32 ! - // Less than that may also suffice. - char sPerlRevision[32 * sizeof(char)] = {'\0'}; - char sPerlVersion[32 * sizeof(char)] = {'\0'}; - char sPerlSubVersion[32 * sizeof(char)] = {'\0'}; - - // The defines for PERL_REVISION, PERL_VERSION, PERL_SUBVERSION are available in - // patchlevel.h under root and gets included when perl.h is included. - // The number 10 below indicates base 10. - itoa(PERL_REVISION, sPerlRevision, 10); - itoa(PERL_VERSION, sPerlVersion, 10); - itoa(PERL_SUBVERSION, sPerlSubVersion, 10); - - // Concatenate substrings to get a string like Perl5.6.1 which is used as the screen name. - sprintf(sPerlScreenName, "%s%s.%s.%s", PERL_COMMAND_NAME, - sPerlRevision, sPerlVersion, sPerlSubVersion); - - return; -} - - - -// Global variable to hold the environ information. -// First time it is accessed, it will be created and initialized and -// next time onwards, the pointer will be returned. - -// Improvements - Dynamically read env everytime a request comes - Is this required? -char** genviron = NULL; - - -/*============================================================================================ - - Function : nw_getenviron - - Description : Gets the environment information. - - Parameters : None. - - Returns : Nothing. - -==============================================================================================*/ - -char *** -nw_getenviron() -{ - if (genviron) - return (&genviron); // This might leak memory upto 11736 bytes on some versions of NetWare. -// return genviron; // Abending on some versions of NetWare. - else - fnSetUpEnvBlock(&genviron); - - return (&genviron); -} - - - -/*============================================================================================ - - Function : nw_freeenviron - - Description : Frees the environment information. - - Parameters : None. - - Returns : Nothing. - -==============================================================================================*/ - -void -nw_freeenviron() -{ - if (genviron) - { - fnDestroyEnvBlock(genviron); - genviron=NULL; - } -} - diff --git a/gnu/usr.bin/perl/NetWare/Nwpipe.c b/gnu/usr.bin/perl/NetWare/Nwpipe.c deleted file mode 100644 index ce9c19800d6..00000000000 --- a/gnu/usr.bin/perl/NetWare/Nwpipe.c +++ /dev/null @@ -1,704 +0,0 @@ - -/* - * Copyright © 2001 Novell, Inc. All Rights Reserved. - * - * You may distribute under the terms of either the GNU General Public - * License or the Artistic License, as specified in the README file. - * - */ - -/* - * FILENAME : NWPipe.c - * DESCRIPTION : Functions to implement pipes on NetWare. - * Author : HYAK - * Date : January 2001. - * - */ - - - -#include -#include - -#include "win32ish.h" -#include "nwpipe.h" -#include "nwplglob.h" - - -// This was added since the compile failed saying "undefined P_WAIT" -// when USE_ITHREADS was commented in the makefile -#ifndef P_WAIT -#define P_WAIT 0 -#endif - -#ifndef P_NOWAIT -#define P_NOWAIT 1 -#endif - - - - -/*============================================================================================ - - Function : fnPipeFileMakeArgv - - Description : This function makes the argument array. - - Parameters : ptpf (IN) - Input structure. - - Returns : Boolean. - -==============================================================================================*/ - -BOOL fnPipeFileMakeArgv(PTEMPPIPEFILE ptpf) -{ - int i=0, j=0; - int dindex = 0; - int sindex = 0; - - ptpf->m_argv_len = 0; - - - // Below 2 is added for the following reason: - // - The first one is for an additional value that will be added through ptpf->m_redirect. - // - The second one is for a NULL termination of the array. - // This is required for spawnvp API that takes a NULL-terminated array as its 3rd parameter. - // If the array is NOT NULL-terminated, then the server abends at the spawnvp call !! - ptpf->m_argv = (char **) malloc((ptpf->m_pipeCommand->m_argc + 2) * sizeof(char*)); - if (ptpf->m_argv == NULL) - return FALSE; - - // For memory allocation it is just +1 since the last one is only for NULL-termination - // and no memory is required to be allocated. - for(i=0; i<(ptpf->m_pipeCommand->m_argc + 1); i++) - { - ptpf->m_argv[i] = (char *) malloc(MAX_DN_BYTES * sizeof(char)); - if (ptpf->m_argv[i] == NULL) - { - for(j=0; jm_argv[j]) - { - free(ptpf->m_argv[j]); - ptpf->m_argv[j] = NULL; - } - } - free(ptpf->m_argv); - ptpf->m_argv = NULL; - - return FALSE; - } - } - - // Copy over parsed items, removing "load" keyword if necessary. - sindex = ((stricmp(ptpf->m_pipeCommand->m_argv[0], LOAD_COMMAND) == 0) ? 1 : 0); - while (sindex < ptpf->m_pipeCommand->m_argc) - { - strcpy(ptpf->m_argv[dindex], ptpf->m_pipeCommand->m_argv[sindex]); - dindex++; - sindex++; - } - - if (stricmp(ptpf->m_argv[0], PERL_COMMAND_NAME) == 0) // If Perl is the first command. - { - ptpf->m_launchPerl = TRUE; - - #ifdef MPK_ON - ptpf->m_perlSynchSemaphore = kSemaphoreAlloc((BYTE *)"pipeSemaphore", 0); - #else - ptpf->m_perlSynchSemaphore = OpenLocalSemaphore(0); - #endif //MPK_ON - } - else if (stricmp(ptpf->m_argv[0], (char *)"perlglob") == 0) - ptpf->m_doPerlGlob = TRUE; - - - // Create last argument, which will redirect to or from the temp file - if (!ptpf->m_doPerlGlob || ptpf->m_mode) - { - if (!ptpf->m_mode) // If read mode? - { - if (ptpf->m_launchPerl) - strcpy(ptpf->m_redirect, (char *)">"); - else - strcpy(ptpf->m_redirect, (char *)"(CLIB_OPT)/>"); - } - else - { - if (ptpf->m_launchPerl) - strcpy(ptpf->m_redirect, (char *)"<"); - else - strcpy(ptpf->m_redirect, (char *)"(CLIB_OPT)/<"); - } - strcat(ptpf->m_redirect, ptpf->m_fileName); - - if (ptpf->m_launchPerl) - { - char tbuf[15] = {'\0'}; - sprintf(tbuf, (char *)" -{%x", ptpf->m_perlSynchSemaphore); - strcat(ptpf->m_redirect, tbuf); - } - - strcpy(ptpf->m_argv[dindex], (char*) ptpf->m_redirect); - dindex++; - } - - if (dindex < (ptpf->m_pipeCommand->m_argc + 1)) - { - if(ptpf->m_argv[dindex]) - { - free(ptpf->m_argv[dindex]); - ptpf->m_argv[dindex] = NULL; // NULL termination - required for spawnvp call. - } - } - - ptpf->m_argv_len = dindex; // Length of the argv array OR number of argv string values. - ptpf->m_argv[ptpf->m_argv_len] = NULL; // NULL termination - required for spawnvp call. - - - return TRUE; -} - - -/*============================================================================================ - - Function : fnPipeFileOpen - - Description : This function opens the pipe file. - - Parameters : ptpf (IN) - Input structure. - command (IN) - Input command string. - mode (IN) - Mode of opening. - - Returns : File pointer. - -==============================================================================================*/ - -FILE* fnPipeFileOpen(PTEMPPIPEFILE ptpf, char* command, char* mode) -{ - int i=0, j=0; - - char tempName[_MAX_PATH] = {'\0'}; - - - ptpf->m_fileName = (char *) malloc(_MAX_PATH * sizeof(char)); - if(ptpf->m_fileName == NULL) - return NULL; - - // The char array is emptied so that there is no junk characters. - strncpy(ptpf->m_fileName, "", (_MAX_PATH * sizeof(char))); - - - // Save off stuff - // - if(strchr(mode,'r') != 0) - ptpf->m_mode = FALSE; // Read mode - else if(strchr(mode,'w') != 0) - ptpf->m_mode = TRUE; // Write mode - else - { - if(ptpf->m_fileName != NULL) - { -// if (strlen(ptpf->m_fileName)) - if (ptpf->m_fileName) - unlink(ptpf->m_fileName); - - free(ptpf->m_fileName); - ptpf->m_fileName = NULL; - } - - return NULL; - } - - - ptpf->m_pipeCommand = (PCOMMANDLINEPARSER) malloc(sizeof(COMMANDLINEPARSER)); - if (!ptpf->m_pipeCommand) - { -// if (strlen(ptpf->m_fileName)) - if (ptpf->m_fileName) - unlink(ptpf->m_fileName); - - free(ptpf->m_fileName); - ptpf->m_fileName = NULL; - - return NULL; - } - - // Initialise the variables - ptpf->m_pipeCommand->m_isValid = TRUE; - -/**** -// Commented since these are not being used. Still retained here. -// To be removed once things are proved to be working fine to a good confident level, - - ptpf->m_pipeCommand->m_redirInName = NULL; - ptpf->m_pipeCommand->m_redirOutName = NULL; - ptpf->m_pipeCommand->m_redirErrName = NULL; - ptpf->m_pipeCommand->m_redirBothName = NULL; - ptpf->m_pipeCommand->nextarg = NULL; -****/ - - ptpf->m_pipeCommand->sSkippedToken = NULL; - ptpf->m_pipeCommand->m_argv = NULL; - ptpf->m_pipeCommand->new_argv = NULL; - - #ifdef MPK_ON - ptpf->m_pipeCommand->m_qSemaphore = NULL; - #else - ptpf->m_pipeCommand->m_qSemaphore = 0L; - #endif //MPK_ON - - ptpf->m_pipeCommand->m_noScreen = 0; - ptpf->m_pipeCommand->m_AutoDestroy = 0; - ptpf->m_pipeCommand->m_argc = 0; - ptpf->m_pipeCommand->m_argv_len = 1; - - - ptpf->m_pipeCommand->m_argv = (char **) malloc(ptpf->m_pipeCommand->m_argv_len * sizeof(char *)); - if (ptpf->m_pipeCommand->m_argv == NULL) - { - free(ptpf->m_pipeCommand); - ptpf->m_pipeCommand = NULL; - -// if (strlen(ptpf->m_fileName)) - if (ptpf->m_fileName) - unlink(ptpf->m_fileName); - - free(ptpf->m_fileName); - ptpf->m_fileName = NULL; - - return NULL; - } - ptpf->m_pipeCommand->m_argv[0] = (char *) malloc(MAX_DN_BYTES * sizeof(char)); - if (ptpf->m_pipeCommand->m_argv[0] == NULL) - { - for(j=0; jm_pipeCommand->m_argv[j]) - { - free(ptpf->m_pipeCommand->m_argv[j]); - ptpf->m_pipeCommand->m_argv[j]=NULL; - } - } - free(ptpf->m_pipeCommand->m_argv); - ptpf->m_pipeCommand->m_argv=NULL; - - free(ptpf->m_pipeCommand); - ptpf->m_pipeCommand = NULL; - -// if (strlen(ptpf->m_fileName)) - if (ptpf->m_fileName) - unlink(ptpf->m_fileName); - - free(ptpf->m_fileName); - ptpf->m_fileName = NULL; - - return NULL; - } - - - ptpf->m_redirect = (char *) malloc(MAX_DN_BYTES * sizeof(char)); - if (ptpf->m_redirect == NULL) - { - for(i=0; im_pipeCommand->m_argv_len; i++) - { - if(ptpf->m_pipeCommand->m_argv[i] != NULL) - { - free(ptpf->m_pipeCommand->m_argv[i]); - ptpf->m_pipeCommand->m_argv[i] = NULL; - } - } - - free(ptpf->m_pipeCommand->m_argv); - ptpf->m_pipeCommand->m_argv = NULL; - - free(ptpf->m_pipeCommand); - ptpf->m_pipeCommand = NULL; - - -// if (strlen(ptpf->m_fileName)) - if (ptpf->m_fileName) - unlink(ptpf->m_fileName); - - free(ptpf->m_fileName); - ptpf->m_fileName = NULL; - - return NULL; - } - - // The char array is emptied. - // If it is not done so, then it could contain some junk values and the string length in that case - // will not be zero. This causes erroneous results in fnPipeFileMakeArgv() function - // where strlen(ptpf->m_redirect) is used as a check for incrementing the parameter count and - // it will wrongly get incremented in such cases. - strncpy(ptpf->m_redirect, "", (MAX_DN_BYTES * sizeof(char))); - - // Parse the parameters. - fnCommandLineParser(ptpf->m_pipeCommand, (char *)command, TRUE); - if (!ptpf->m_pipeCommand->m_isValid) - { - fnTempPipeFileReleaseMemory(ptpf); - return NULL; - } - - - // Create a temporary file name - // - strncpy ( tempName, fnNwGetEnvironmentStr((char *)"TEMP", NWDEFPERLTEMP), (_MAX_PATH - 20) ); - tempName[_MAX_PATH-20] = '\0'; - strcat(tempName, (char *)"\\plXXXXXX.tmp"); - if (!fnMy_MkTemp(tempName)) - { - fnTempPipeFileReleaseMemory(ptpf); - return NULL; - } - - // create a temporary place-holder file - fclose(fopen(tempName, (char *)"w")); - strcpy(ptpf->m_fileName, tempName); - - - // Make the argument array - if(!fnPipeFileMakeArgv(ptpf)) - { - fnTempPipeFileReleaseMemory(ptpf); - - // Release additional memory - if(ptpf->m_argv != NULL) - { - for(i=0; im_argv_len; i++) - { - if(ptpf->m_argv[i] != NULL) - { - free(ptpf->m_argv[i]); - ptpf->m_argv[i] = NULL; - } - } - - free(ptpf->m_argv); - ptpf->m_argv = NULL; - } - - return NULL; - } - - - // Open the temp file in the appropriate way... - // - if (!ptpf->m_mode) // If Read mode? - { - // we wish to spawn a command, intercept its output, - // and then get that output - // - if (!ptpf->m_argv[0]) - { - fnTempPipeFileReleaseMemory(ptpf); - - // Release additional memory - if(ptpf->m_argv != NULL) - { - for(i=0; im_argv_len; i++) - { - if(ptpf->m_argv[i] != NULL) - { - free(ptpf->m_argv[i]); - ptpf->m_argv[i] = NULL; - } - } - - free(ptpf->m_argv); - ptpf->m_argv = NULL; - } - - return NULL; - } - - if (ptpf->m_launchPerl) - fnPipeFileDoPerlLaunch(ptpf); - else - if (ptpf->m_doPerlGlob) - fnDoPerlGlob(ptpf->m_argv, ptpf->m_fileName); // hack to do perl globbing - else - spawnvp(P_WAIT, ptpf->m_argv[0], ptpf->m_argv); - - ptpf->m_file = fopen (ptpf->m_fileName, (char *)"r"); // Get the Pipe file handle - } - else if (ptpf->m_mode) // If Write mode? - { - // we wish to open the file for writing now and - // do the command later - // - ptpf->m_file = fopen(ptpf->m_fileName, (char *)"w"); - } - - fnTempPipeFileReleaseMemory(ptpf); - - // Release additional memory - if(ptpf->m_argv != NULL) - { - for(i=0; i<(ptpf->m_argv_len); i++) - { - if(ptpf->m_argv[i] != NULL) - { - free(ptpf->m_argv[i]); - ptpf->m_argv[i] = NULL; - } - } - - free(ptpf->m_argv); - ptpf->m_argv = NULL; - } - - - return ptpf->m_file; // Return the Pipe file handle. -} - - -/*============================================================================================ - - Function : fnPipeFileClose - - Description : This function closes the pipe file. - - Parameters : ptpf (IN) - Input structure. - - Returns : Nothing. - -==============================================================================================*/ - -void fnPipeFileClose(PTEMPPIPEFILE ptpf) -{ - int i = 0; - - if (ptpf->m_mode) // If Write mode? - { - // we wish to spawn a command using our temp file for - // its input - // - if(ptpf->m_file != NULL) - { - fclose (ptpf->m_file); - ptpf->m_file = NULL; - } - - if (ptpf->m_launchPerl) - fnPipeFileDoPerlLaunch(ptpf); - else if (ptpf->m_argv) - spawnvp(P_WAIT, ptpf->m_argv[0], ptpf->m_argv); - } - - - // Close the temporary Pipe File, if opened - if (ptpf->m_file) - { - fclose(ptpf->m_file); - ptpf->m_file = NULL; - } - // Delete the temporary Pipe Filename if still valid and free the memory associated with the file name. - if(ptpf->m_fileName != NULL) - { -// if (strlen(ptpf->m_fileName)) - if (ptpf->m_fileName) - unlink(ptpf->m_fileName); - - free(ptpf->m_fileName); - ptpf->m_fileName = NULL; - } - -/** - if(ptpf->m_argv != NULL) - { - for(i=0; i<(ptpf->m_argv_len); i++) - { - if(ptpf->m_argv[i] != NULL) - { - free(ptpf->m_argv[i]); - ptpf->m_argv[i] = NULL; - } - } - - free(ptpf->m_argv); - ptpf->m_argv = NULL; - } -**/ - - if (ptpf->m_perlSynchSemaphore) - { - #ifdef MPK_ON - kSemaphoreFree(ptpf->m_perlSynchSemaphore); - #else - CloseLocalSemaphore(ptpf->m_perlSynchSemaphore); - #endif //MPK_ON - } - - - return; -} - - -/*============================================================================================ - - Function : fnPipeFileDoPerlLaunch - - Description : This function launches Perl. - - Parameters : ptpf (IN) - Input structure. - - Returns : Nothing. - -==============================================================================================*/ - -void fnPipeFileDoPerlLaunch(PTEMPPIPEFILE ptpf) -{ - char curdir[_MAX_PATH] = {'\0'}; - char* pcwd = NULL; - - int i=0; - - - // save off the current working directory to restore later - // this is just a hack! these problems of synchronization and - // restoring calling context need a much better solution! - pcwd = (char *)getcwd(curdir, sizeof(curdir)-1); - fnSystemCommand(ptpf->m_argv, ptpf->m_argv_len); - if (ptpf->m_perlSynchSemaphore) - { - #ifdef MPK_ON - kSemaphoreWait(ptpf->m_perlSynchSemaphore); - #else - WaitOnLocalSemaphore(ptpf->m_perlSynchSemaphore); - #endif //MPK_ON - } - - if (pcwd) - chdir(pcwd); - - return; -} - - -/*============================================================================================ - - Function : fnTempPipeFile - - Description : This function initialises the variables of the structure passed in. - - Parameters : ptpf (IN) - Input structure. - - Returns : Nothing. - -==============================================================================================*/ - -void fnTempPipeFile(PTEMPPIPEFILE ptpf) -{ - ptpf->m_fileName = NULL; - - ptpf->m_mode = FALSE; // Default mode = Read mode. - ptpf->m_file = NULL; - ptpf->m_pipeCommand = NULL; - ptpf->m_argv = NULL; - - ptpf->m_redirect = NULL; - - ptpf->m_launchPerl = FALSE; - ptpf->m_doPerlGlob = FALSE; - - #ifdef MPK_ON - ptpf->m_perlSynchSemaphore = NULL; - #else - ptpf->m_perlSynchSemaphore = 0L; - #endif - - ptpf->m_argv_len = 0; - - return; -} - - -/*============================================================================================ - - Function : fnTempPipeFileReleaseMemory - - Description : This function frees the memory allocated to various buffers. - - Parameters : ptpf (IN) - Input structure. - - Returns : Nothing. - -==============================================================================================*/ - -void fnTempPipeFileReleaseMemory(PTEMPPIPEFILE ptpf) -{ - int i=0; - - - if (ptpf->m_pipeCommand) - { - if(ptpf->m_pipeCommand->m_argv != NULL) - { - for(i=0; im_pipeCommand->m_argv_len; i++) - { - if(ptpf->m_pipeCommand->m_argv[i] != NULL) - { - free(ptpf->m_pipeCommand->m_argv[i]); - ptpf->m_pipeCommand->m_argv[i] = NULL; - } - } - - free(ptpf->m_pipeCommand->m_argv); - ptpf->m_pipeCommand->m_argv = NULL; - } - - if(ptpf->m_pipeCommand->sSkippedToken != NULL) - { - free(ptpf->m_pipeCommand->sSkippedToken); - ptpf->m_pipeCommand->sSkippedToken = NULL; - } -/**** -// Commented since these are not being used. Still retained here. -// To be removed once things are proved to be working fine to a good confident level, - - if(ptpf->m_pipeCommand->nextarg) - { - free(ptpf->m_pipeCommand->nextarg); - ptpf->m_pipeCommand->nextarg = NULL; - } - - if(ptpf->m_pipeCommand->m_redirInName) - { - free(ptpf->m_pipeCommand->m_redirInName); - ptpf->m_pipeCommand->m_redirInName = NULL; - } - if(ptpf->m_pipeCommand->m_redirOutName) - { - free(ptpf->m_pipeCommand->m_redirOutName); - ptpf->m_pipeCommand->m_redirOutName = NULL; - } - if(ptpf->m_pipeCommand->m_redirErrName) - { - free(ptpf->m_pipeCommand->m_redirErrName); - ptpf->m_pipeCommand->m_redirErrName = NULL; - } - if(ptpf->m_pipeCommand->m_redirBothName) - { - free(ptpf->m_pipeCommand->m_redirBothName); - ptpf->m_pipeCommand->m_redirBothName = NULL; - } -****/ - - if(ptpf->m_pipeCommand != NULL) - { - free(ptpf->m_pipeCommand); - ptpf->m_pipeCommand = NULL; - } - } - - if(ptpf->m_redirect != NULL) - { - free(ptpf->m_redirect); - ptpf->m_redirect = NULL; - } - - return; -} - diff --git a/gnu/usr.bin/perl/NetWare/bat/Buildtype.bat b/gnu/usr.bin/perl/NetWare/bat/Buildtype.bat deleted file mode 100644 index 7ea8cb5afed..00000000000 --- a/gnu/usr.bin/perl/NetWare/bat/Buildtype.bat +++ /dev/null @@ -1,53 +0,0 @@ -@echo off -@rem AUTHOR: sgp -@rem CREATED: 24th July 2000 -@rem LAST REVISED: 6th April 2001 -@rem Batch file to set debug/release build and toggle D2 flag for -@rem debugging in case of debug build. -@rem This file calls ToggleD2.bat which switches b/n d2 & d1 flags - -if "%1" == "" goto Usage -if "%1" == "/now" goto now -if "%1" == "/?" goto usage -if "%1" == "/h" goto usage - -if "%1" == "r" goto set_type_rel -if "%1" == "R" goto set_type_rel - -if "%1" == "d" goto set_type_dbg -if "%1" == "D" goto set_type_dbg - -Rem Invalid input and so display the help message -goto Usage - -:set_type_rel -set MAKE_TYPE=Release -echo ....Build set to %MAKE_TYPE% -goto set_d2_off - -:set_type_dbg -set MAKE_TYPE=Debug -echo ....Build set to %MAKE_TYPE% -if "%2" == "" goto set_d2_off -call ToggleD2 %2 - -goto exit - -:set_d2_off -call ToggleD2 off -goto exit - -:now -if "%MAKE_TYPE%" == "" echo MAKE_TYPE is not set, hence it defaults to Release build -if not "%MAKE_TYPE%" == "" echo Current build type is - %MAKE_TYPE% -call ToggleD2 /now -goto exit - -:Usage - @echo on - @echo "Usage: buildtype r/R|d/D [on/off]" - @echo on/off - Toggling only for D2 flag during debug build - @echo "Usage: buildtype /now" - To display current setting - @echo Ex. buildtype d on - -:exit diff --git a/gnu/usr.bin/perl/NetWare/bat/SetCodeWar.bat b/gnu/usr.bin/perl/NetWare/bat/SetCodeWar.bat deleted file mode 100644 index 19ca59c3e49..00000000000 --- a/gnu/usr.bin/perl/NetWare/bat/SetCodeWar.bat +++ /dev/null @@ -1,43 +0,0 @@ -@echo off -@rem AUTHOR: sgp & apc -@rem CREATED: 24th July 2000 -@rem LAST REVISED: 6th April 2001 -@rem LAST REVISED: 22nd May 2002 -@rem AUTHOR: apc -@rem Batch file to set the path to CodeWarrior directories -@rem This file is called from SetNWBld.bat. - -if "%1" == "/now" goto now -if "%1" == "" goto Usage -if "%1" == "/?" goto usage -if "%1" == "/h" goto usage - -set CODEWAR=%1 -ECHO CODEWAR=%1 - -call buildtype r -@echo Buildtype set to Release type - -set MWCIncludes=%1\include -@echo MWCIncludes=%1\include -set MWLibraries=%1\lib -@echo MWLibraries=%1\lib -set MWLibraryFiles=%1\lib\nwpre.obj;%1\lib\mwcrtld.lib -@echo MWLibraryFiles=%1\lib\nwpre.obj;%1\lib\mwcrtld.lib - -set PATH=%PATH%;%1\bin; -@echo PATH=%PATH%;%1\bin; - -goto exit - -:now -@echo CODEWAR=%CODEWAR% -goto exit - -:Usage - @echo on - @echo "Usage: setCodeWar " - @echo "Usage: setCodeWar /now" - To display current setting - @echo Ex. setCodeWar d:\CodeWar - -:exit diff --git a/gnu/usr.bin/perl/NetWare/bat/SetNWBld.bat b/gnu/usr.bin/perl/NetWare/bat/SetNWBld.bat deleted file mode 100644 index 851d90e5079..00000000000 --- a/gnu/usr.bin/perl/NetWare/bat/SetNWBld.bat +++ /dev/null @@ -1,59 +0,0 @@ -@echo off -@rem AUTHOR: apc -@rem CREATED: Thu 18th Jan 2001 09:18:08 -@rem LAST REVISED: 6th April 2001 -@rem LAST REVISED: 22nd May 2002 -@rem Batch file to set the path to Default Buildtype,NetWare SDK, CodeWarrior directories -@rem This file calls buildtype with release as defualt,setnlmsdk.bat, setCodeWar.bat & setmpksdk.bat and MpkBuild with off as default - -REM If no parameters are passed, display usage -if "%1" == "" goto Usage -if "%1" == "/?" goto Usage -if "%1" == "/h" goto Usage - -REM Display the current settings -if "%1" == "/now" goto now - -REM If na is passed, don't set that parameter -if "%1" == "na" goto skip_nlmsdk_msg - -:setnwsdk -call setnlmsdk %1 -goto skip_nlmsdk_nomsg - -:skip_nlmsdk_msg -@echo Retaining NLMSDKBASE=%NLMSDKBASE% - -:skip_nlmsdk_nomsg -if "%2" == "" goto err_exit -if "%2" == "na" goto skip_cw_msg - -:setcodewar -call setcodewar %2 -goto skip_cw_nomsg - -:skip_cw_msg -@echo Retaining CODEWAR=%CODEWAR% -goto exit - -:skip_cw_nomsg -goto exit - -:err_exit -@echo Not Enough Parameters -goto Usage - -:now -@echo NLMSDKBASE=%NLMSDKBASE% -@echo CODEWAR=%CODEWAR% -goto exit - -:Usage - @echo on - @echo "Usage: setnwdef " - @echo "Usage: setnwdef /now" - To display current setting - @echo Pass na if you don't want to change a setting - @echo Ex. setnwbld d:\ndk\nwsdk na - @echo Ex. setnwbld na d:\codewar - -:exit diff --git a/gnu/usr.bin/perl/NetWare/bat/Setnlmsdk.bat b/gnu/usr.bin/perl/NetWare/bat/Setnlmsdk.bat deleted file mode 100644 index 96c77afde10..00000000000 --- a/gnu/usr.bin/perl/NetWare/bat/Setnlmsdk.bat +++ /dev/null @@ -1,28 +0,0 @@ -@echo off -@rem AUTHOR: sgp -@rem CREATED: 24th July 2000 -@rem LAST REVISED: 6th April 2001 -@rem Batch file to set the path to NetWare SDK -@rem This file is called from SetNWBld.bat. - -if "%1" == "/now" goto now -if "%1" == "" goto Usage -if "%1" == "/?" goto usage -if "%1" == "/h" goto usage - -set NLMSDKBASE=%1 -echo NLMSDKBASE set to %1 - -goto exit - -:now -@echo NLMSDKBASE=%NLMSDKBASE% -goto exit - -:Usage - @echo on - @echo "Usage: setnlmsdk " - @echo "Usage: setnlmsdk /now" - To display current setting - @echo Ex. setnlmsdk e:\sdkcd14\nwsdk - -:exit diff --git a/gnu/usr.bin/perl/NetWare/bat/ToggleD2.bat b/gnu/usr.bin/perl/NetWare/bat/ToggleD2.bat deleted file mode 100644 index 89b69e3acc0..00000000000 --- a/gnu/usr.bin/perl/NetWare/bat/ToggleD2.bat +++ /dev/null @@ -1,40 +0,0 @@ -@echo off -@rem AUTHOR: sgp -@rem CREATED: 23rd August 1999 -@rem LAST REVISED: 6th April 2001 -@rem Batch file to toggle D2 flag for debugging in case of debug build -@rem and remove in case of release build. -@rem This file is called from BuildType.bat - -if "%1" == "" goto Usage - -if "%1" == "/now" goto now -if "%1" == "on" goto yes -if "%1" == "off" goto no -if "%1" == "/?" goto usage -if "%1" == "/h" goto usage - -Rem Invalid input and so display the help message -goto Usage - -:now -if "%USE_D2%" == "" echo USE_D2 is removed, uses /d1 -if not "%USE_D2%" == "" echo USE_D2 is set, uses /d2 -goto exit - -:yes -Set USE_D2=1 -echo ....USE_D2 is set, uses /d2 -goto exit - -:no -Set USE_D2= -echo ....USE_D2 is removed. uses /d1 -goto exit - -:Usage - @echo on - @echo "Usage: ToggleD2 [on|off]" - @echo "Usage: ToggleD2 /now" - To display current setting - -:exit diff --git a/gnu/usr.bin/perl/NetWare/config.wc b/gnu/usr.bin/perl/NetWare/config.wc deleted file mode 100644 index b0a02f56052..00000000000 --- a/gnu/usr.bin/perl/NetWare/config.wc +++ /dev/null @@ -1,1151 +0,0 @@ -## Configured by: ~cf_email~ -## Target system: NetWare -Author='Guruprasad' -Date='$Date' -Header='' -Id='$Id' -Locker='' -Log='$Log' -Mcc='Mcc' -RCSfile='$RCSfile' -Revision='$Revision' -Source='' -State='' -_a='.lib' -_exe='.exe' -_nlm='.nlm' -_nlp='.nlp' -_o='.obj' -afs='false' -alignbytes='8' -aphostname='' -api_revision='~PERL_API_REVISION~' -api_subversion='~PERL_API_SUBVERSION~' -api_version='~PERL_API_VERSION~' -api_versionstring='~PERL_API_REVISION~.~PERL_API_VERSION~.~PERL_API_SUBVERSION~' -ar='lib386' -archlib='~INST_TOP~~INST_VER~\lib~INST_ARCH~' -archlibexp='~INST_TOP~~INST_VER~\lib~INST_ARCH~' -archname64='' -archname='NetWare' -archobjs='' -asctime_r_proto='0' -awk='awk' -baserev='5' -bash='' -bin='~INST_TOP~~INST_VER~\bin~INST_ARCH~' -binexp='~INST_TOP~~INST_VER~\bin~INST_ARCH~' -bison='' -bootstrap_charset='undef' -byacc='byacc' -byteorder='1234' -c='' -castflags='0' -cat='type' -cc='mwccnlm' -cccdlflags=' ' -ccdlflags=' ' -ccflags='-MD -DNETWARE' -ccsymbols='' -cf_by='nobody' -cf_email='nobody@no.where.net' -cf_time='' -charbits='8' -chgrp='' -chmod='' -chown='' -clocktype='clock_t' -comm='' -compress='' -contains='grep' -cp='copy' -cpio='' -cpp='cl -nologo -E' -cpp_stuff='42' -cppccsymbols='' -cppflags='-DNETWARE' -cpplast='' -cppminus='' -cpprun='cl -nologo -E' -cppstdin='cl -nologo -E' -cppsymbols='' -crosscompile='undef' -crypt_r_proto='0' -cryptlib='' -csh='undef' -ctermid_r_proto='0' -ctime_r_proto='0' -d_Gconvert='sprintf((b),"%.*g",(n),(x))' -d_PRIEldbl='undef' -d_PRIFldbl='define' -d_PRIGldbl='define' -d_PRIX64='undef' -d_PRId64='undef' -d_PRIeldbl='undef' -d_PRIfldbl='define' -d_PRIgldbl='define' -d_PRIi64='undef' -d_PRIo64='undef' -d_PRIu64='undef' -d_PRIx64='undef' -d_SCNfldbl='undef' -d__fwalk='undef' -d_accept4='undef' -d_access='define' -d_accessx='undef' -d_acosh='undef' -d_aintl='undef' -d_alarm='undef' -d_archlib='define' -d_asctime64='undef' -d_asctime_r='undef' -d_asinh='undef' -d_atanh='undef' -d_atolf='undef' -d_atoll='undef' -d_attribute_always_inline='undef' -d_attribute_deprecated='undef' -d_attribute_format='undef' -d_attribute_malloc='undef' -d_attribute_nonnull='undef' -d_attribute_noreturn='undef' -d_attribute_pure='undef' -d_attribute_unused='undef' -d_attribute_warn_unused_result='undef' -d_backtrace='undef' -d_bsd='define' -d_bsdgetpgrp='undef' -d_bsdsetpgrp='undef' -d_builtin_add_overflow='undef' -d_builtin_choose_expr='undef' -d_builtin_expect='undef' -d_builtin_mul_overflow='undef' -d_builtin_sub_overflow='undef' -d_c99_variadic_macros='undef' -d_casti32='undef' -d_castneg='define' -d_cbrt='undef' -d_chown='undef' -d_chroot='undef' -d_chsize='define' -d_class='undef' -d_clearenv='undef' -d_closedir='define' -d_cmsghdr_s='undef' -d_copysign='undef' -d_copysignl='undef' -d_cplusplus='undef' -d_crypt='undef' -d_crypt_r='undef' -d_csh='undef' -d_ctermid='undef' -d_ctermid_r='undef' -d_ctime64='undef' -d_ctime_r='undef' -d_cuserid='undef' -d_dbl_dig='define' -d_dbminitproto='undef' -d_difftime64='undef' -d_difftime='define' -d_dir_dd_fd='undef' -d_dirfd='undef' -d_dirnamlen='undef' -d_dladdr='undef' -d_dlerror='define' -d_dlopen='define' -d_dlsymun='undef' -d_dosuid='undef' -d_double_has_inf='define' -d_double_has_nan='define' -d_double_has_negative_zero='define' -d_double_has_subnormals='define' -d_double_style_cray='undef' -d_double_style_ibm='undef' -d_double_style_ieee='define' -d_double_style_vax='undef' -d_drand48_r='undef' -d_drand48proto='undef' -d_dup2='define' -d_dup3='undef' -d_duplocale='undef' -d_eaccess='undef' -d_endgrent='undef' -d_endgrent_r='undef' -d_endhent='undef' -d_endhostent_r='undef' -d_endnent='undef' -d_endnetent_r='undef' -d_endpent='undef' -d_endprotoent_r='undef' -d_endpwent='undef' -d_endpwent_r='undef' -d_endsent='undef' -d_endservent_r='undef' -d_endspent='undef' -d_eofnblk='define' -d_erf='undef' -d_erfc='undef' -d_eunice='undef' -d_exp2='undef' -d_expm1='undef' -d_faststdio='undef' -d_fchdir='undef' -d_fchmod='undef' -d_fchmodat='undef' -d_fchown='undef' -d_fcntl='undef' -d_fcntl_can_lock='undef' -d_fd_macros='define' -d_fd_set='define' -d_fdclose='undef' -d_fdim='undef' -d_fds_bits='define' -d_fegetround='undef' -d_fgetpos='define' -d_finite='undef' -d_finitel='undef' -d_flexfnam='define' -d_flock='define' -d_flockproto='undef' -d_fma='undef' -d_fmax='undef' -d_fmin='undef' -d_fork='undef' -d_fp_class='undef' -d_fp_classify='undef' -d_fp_classl='undef' -d_fpathconf='undef' -d_fpclass='undef' -d_fpclassify='undef' -d_fpclassl='undef' -d_fpgetround='undef' -d_fpos64_t='undef' -d_freelocale='undef' -d_frexpl='undef' -d_fs_data_s='undef' -d_fseeko='undef' -d_fsetpos='define' -d_fstatfs='undef' -d_fstatvfs='undef' -d_fsync='undef' -d_ftello='undef' -d_ftime='define' -d_futimes='undef' -d_gai_strerror='undef' -d_gdbm_ndbm_h_uses_prototypes='undef' -d_gdbmndbm_h_uses_prototypes='undef' -d_getaddrinfo='undef' -d_getcwd='define' -d_getespwnam='undef' -d_getfsstat='undef' -d_getgrent='undef' -d_getgrent_r='undef' -d_getgrgid_r='undef' -d_getgrnam_r='undef' -d_getgrps='undef' -d_gethbyaddr='define' -d_gethbyname='define' -d_gethent='undef' -d_gethname='define' -d_gethostbyaddr_r='undef' -d_gethostbyname_r='undef' -d_gethostent_r='undef' -d_gethostprotos='define' -d_getitimer='undef' -d_getlogin='define' -d_getlogin_r='undef' -d_getmnt='undef' -d_getmntent='undef' -d_getnameinfo='undef' -d_getnbyaddr='undef' -d_getnbyname='undef' -d_getnent='undef' -d_getnetbyaddr_r='undef' -d_getnetbyname_r='undef' -d_getnetent_r='undef' -d_getnetprotos='define' -d_getpagsz='undef' -d_getpbyname='define' -d_getpbynumber='define' -d_getpent='undef' -d_getpgid='undef' -d_getpgrp2='undef' -d_getpgrp='undef' -d_getppid='undef' -d_getprior='undef' -d_getprotobyname_r='undef' -d_getprotobynumber_r='undef' -d_getprotoent_r='undef' -d_getprotoprotos='define' -d_getprpwnam='undef' -d_getpwent='undef' -d_getpwent_r='undef' -d_getpwnam_r='undef' -d_getpwuid_r='undef' -d_getsbyname='define' -d_getsbyport='define' -d_getsent='undef' -d_getservbyname_r='undef' -d_getservbyport_r='undef' -d_getservent_r='undef' -d_getservprotos='define' -d_getspent='undef' -d_getspnam='undef' -d_getspnam_r='undef' -d_gettimeod='undef' -d_gmtime64='undef' -d_gmtime_r='undef' -d_gnulibc='undef' -d_grpasswd='undef' -d_hasmntopt='undef' -d_htonl='define' -d_hypot='undef' -d_ilogb='undef' -d_ilogbl='undef' -d_inc_version_list='undef' -d_index='undef' -d_inetaton='undef' -d_inetntop='undef' -d_inetpton='undef' -d_int64_t='undef' -d_ip_mreq='undef' -d_ip_mreq_source='undef' -d_ipv6_mreq='undef' -d_ipv6_mreq_source='undef' -d_isascii='define' -d_isblank='undef' -d_isfinite='undef' -d_isfinitel='undef' -d_isinf='undef' -d_isinfl='undef' -d_isless='undef' -d_isnan='undef' -d_isnanl='undef' -d_isnormal='undef' -d_j0='undef' -d_j0l='undef' -d_killpg='undef' -d_lc_monetary_2008='undef' -d_lchown='undef' -d_ldbl_dig='define' -d_ldexpl='undef' -d_lgamma='undef' -d_lgamma_r='undef' -d_libm_lib_version='undef' -d_link='define' -d_linkat='undef' -d_llrint='undef' -d_llrintl='undef' -d_llround='undef' -d_llroundl='undef' -d_localeconv_l='undef' -d_localtime64='undef' -d_localtime_r='undef' -d_localtime_r_needs_tzset='undef' -d_locconv='define' -d_lockf='undef' -d_log1p='undef' -d_log2='undef' -d_logb='undef' -d_long_double_style_ieee='undef' -d_long_double_style_ieee_doubledouble='undef' -d_long_double_style_ieee_extended='define' -d_long_double_style_ieee_std='undef' -d_long_double_style_vax='undef' -d_longdbl='define' -d_longlong='undef' -d_lrint='undef' -d_lrintl='undef' -d_lround='undef' -d_lroundl='undef' -d_lseekproto='define' -d_lstat='undef' -d_madvise='undef' -d_malloc_good_size='undef' -d_malloc_size='undef' -d_mblen='define' -d_mbrlen='undef' -d_mbrtowc='undef' -d_mbstowcs='define' -d_mbtowc='define' -d_memmem='undef' -d_memrchr='undef' -d_mkdir='define' -d_mkdtemp='undef' -d_mkfifo='undef' -d_mkostemp='undef' -d_mkstemp='undef' -d_mkstemps='undef' -d_mktime64='undef' -d_mktime='define' -d_mmap='undef' -d_modfl='undef' -d_modfl_pow32_bug='undef' -d_modflproto='undef' -d_mprotect='undef' -d_msg='undef' -d_msg_ctrunc='undef' -d_msg_dontroute='undef' -d_msg_oob='undef' -d_msg_peek='undef' -d_msg_proxy='undef' -d_msgctl='undef' -d_msgget='undef' -d_msghdr_s='undef' -d_msgrcv='undef' -d_msgsnd='undef' -d_msync='undef' -d_munmap='undef' -d_mymalloc='undef' -d_nan='undef' -d_nanosleep='undef' -d_ndbm_h_uses_prototypes='undef' -d_nearbyint='undef' -d_newlocale='undef' -d_nextafter='undef' -d_nexttoward='undef' -d_nice='undef' -d_nl_langinfo='undef' -d_nv_preserves_uv='define' -d_nv_zero_is_allbits_zero='undef' -d_off64_t='undef' -d_old_pthread_create_joinable='undef' -d_oldpthreads='undef' -d_oldsock='undef' -d_open3='undef' -d_openat='undef' -d_pathconf='undef' -d_pause='undef' -d_perl_otherlibdirs='undef' -d_phostname='undef' -d_pipe2='undef' -d_pipe='define' -d_poll='undef' -d_portable='define' -d_prctl='undef' -d_prctl_set_name='undef' -d_printf_format_null='undef' -d_procselfexe='undef' -d_pseudofork='undef' -d_pthread_atfork='undef' -d_pthread_attr_setscope='undef' -d_pthread_yield='undef' -d_ptrdiff_t='define' -d_pwage='undef' -d_pwchange='undef' -d_pwclass='undef' -d_pwcomment='undef' -d_pwexpire='undef' -d_pwgecos='undef' -d_pwpasswd='undef' -d_pwquota='undef' -d_qgcvt='undef' -d_quad='undef' -d_querylocale='undef' -d_random_r='undef' -d_readdir64_r='undef' -d_readdir='define' -d_readdir_r='undef' -d_readlink='undef' -d_readv='undef' -d_recvmsg='undef' -d_regcomp='undef' -d_remainder='undef' -d_remquo='undef' -d_rename='define' -d_renameat='undef' -d_rewinddir='define' -d_rint='undef' -d_rmdir='define' -d_round='undef' -d_sbrkproto='undef' -d_scalbn='undef' -d_scalbnl='undef' -d_sched_yield='undef' -d_scm_rights='undef' -d_seekdir='define' -d_select='define' -d_sem='undef' -d_semctl='undef' -d_semctl_semid_ds='undef' -d_semctl_semun='undef' -d_semget='undef' -d_semop='undef' -d_sendmsg='undef' -d_setegid='undef' -d_seteuid='undef' -d_setgrent='undef' -d_setgrent_r='undef' -d_setgrps='undef' -d_sethent='undef' -d_sethostent_r='undef' -d_setitimer='undef' -d_setlinebuf='undef' -d_setlocale='define' -d_setlocale_accepts_any_locale_name='undef' -d_setlocale_r='undef' -d_setnent='undef' -d_setnetent_r='undef' -d_setpent='undef' -d_setpgid='undef' -d_setpgrp2='undef' -d_setpgrp='undef' -d_setprior='undef' -d_setproctitle='undef' -d_setprotoent_r='undef' -d_setpwent='undef' -d_setpwent_r='undef' -d_setregid='undef' -d_setresgid='undef' -d_setresuid='undef' -d_setreuid='undef' -d_setrgid='undef' -d_setruid='undef' -d_setsent='undef' -d_setservent_r='undef' -d_setsid='undef' -d_setspent='undef' -d_setvbuf='define' -d_shm='undef' -d_shmat='undef' -d_shmatprototype='undef' -d_shmctl='undef' -d_shmdt='undef' -d_shmget='undef' -d_sigaction='undef' -d_siginfo_si_addr='undef' -d_siginfo_si_band='undef' -d_siginfo_si_errno='undef' -d_siginfo_si_pid='undef' -d_siginfo_si_status='undef' -d_siginfo_si_uid='undef' -d_siginfo_si_value='undef' -d_signbit='undef' -d_sigprocmask='undef' -d_sigsetjmp='undef' -d_sin6_scope_id='undef' -d_sitearch='undef' -d_snprintf='undef' -d_sockaddr_in6='undef' -d_sockaddr_sa_len='undef' -d_sockaddr_storage='undef' -d_sockatmark='undef' -d_sockatmarkproto='undef' -d_socket='define' -d_socklen_t='undef' -d_sockpair='undef' -d_socks5_init='undef' -d_sqrtl='undef' -d_srand48_r='undef' -d_srandom_r='undef' -d_sresgproto='undef' -d_sresuproto='undef' -d_stat='define' -d_statblks='undef' -d_statfs_f_flags='undef' -d_statfs_s='undef' -d_static_inline='undef' -d_statvfs='undef' -d_stdio_cnt_lval='undef' -d_stdio_ptr_lval='undef' -d_stdio_ptr_lval_nochange_cnt='undef' -d_stdio_ptr_lval_sets_cnt='undef' -d_stdio_stream_array='undef' -d_stdiobase='undef' -d_stdstdio='undef' -d_strcoll='define' -d_strerror_l='undef' -d_strerror_r='undef' -d_strftime='define' -d_strlcat='undef' -d_strlcpy='undef' -d_strnlen='undef' -d_strtod='define' -d_strtod_l='undef' -d_strtol='define' -d_strtold='undef' -d_strtold_l='undef' -d_strtoll='undef' -d_strtoq='undef' -d_strtoul='define' -d_strtoull='undef' -d_strtouq='undef' -d_strxfrm='define' -d_suidsafe='undef' -d_symlink='undef' -d_syscall='undef' -d_syscallproto='undef' -d_sysconf='undef' -d_sysernlst='' -d_syserrlst='define' -d_system='define' -d_tcgetpgrp='undef' -d_tcsetpgrp='undef' -d_telldir='define' -d_telldirproto='define' -d_tgamma='undef' -d_thread_safe_nl_langinfo_l='undef' -d_time='define' -d_timegm='undef' -d_times='undef' -d_tm_tm_gmtoff='undef' -d_tm_tm_zone='undef' -d_tmpnam_r='undef' -d_towlower='undef' -d_towupper='undef' -d_trunc='undef' -d_truncate='undef' -d_truncl='undef' -d_ttyname_r='undef' -d_tzname='define' -d_u32align='undef' -d_ualarm='undef' -d_umask='define' -d_uname='define' -d_union_semun='define' -d_unlinkat='undef' -d_unordered='undef' -d_unsetenv='undef' -d_uselocale='undef' -d_usleep='undef' -d_usleepproto='undef' -d_ustat='undef' -d_vendorarch='undef' -d_vendorbin='undef' -d_vendorlib='undef' -d_vfork='undef' -d_void_closedir='undef' -d_voidsig='define' -d_voidtty='' -d_vsnprintf='undef' -d_wait4='undef' -d_waitpid='define' -d_wcrtomb='undef' -d_wcscmp='undef' -d_wcstombs='define' -d_wcsxfrm='undef' -d_wctomb='define' -d_writev='undef' -d_xenix='undef' -date='date' -db_hashtype='int' -db_prefixtype='int' -db_version_major='0' -db_version_minor='0' -db_version_patch='0' -def_perlroot='sys:\perl\scripts' -def_temp='sys:\perl\temp' -default_inc_excludes_dot='undef' -direntrytype='DIR' -dlext='nlm' -dlsrc='dl_netware.xs' -doubleinfbytes='0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf0, 0x7f' -doublekind='3' -doublemantbits='52' -doublenanbytes='0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf8, 0x7f' -doublesize='8' -drand01='Perl_drand48()' -drand48_r_proto='0' -dtrace='' -dynamic_ext='Socket IO Fcntl Opcode SDBM_File attributes' -eagain='EAGAIN' -ebcdic='undef' -echo='echo' -egrep='egrep' -emacs='' -endgrent_r_proto='0' -endhostent_r_proto='0' -endnetent_r_proto='0' -endprotoent_r_proto='0' -endpwent_r_proto='0' -endservent_r_proto='0' -eunicefix=':' -exe_ext='.exe' -expr='expr' -extensions='~static_ext~ ~dynamic_ext~ ~nonxs_ext~' -fflushNULL='define' -fflushall='undef' -find='find' -firstmakefile='makefile' -flex='' -fpossize='4' -fpostype='fpos_t' -freetype='void' -full_ar='' -full_csh='' -full_sed='' -gccversion='' -getgrent_r_proto='0' -getgrgid_r_proto='0' -getgrnam_r_proto='0' -gethostbyaddr_r_proto='0' -gethostbyname_r_proto='0' -gethostent_r_proto='0' -getlogin_r_proto='0' -getnetbyaddr_r_proto='0' -getnetbyname_r_proto='0' -getnetent_r_proto='0' -getprotobyname_r_proto='0' -getprotobynumber_r_proto='0' -getprotoent_r_proto='0' -getpwent_r_proto='0' -getpwnam_r_proto='0' -getpwuid_r_proto='0' -getservbyname_r_proto='0' -getservbyport_r_proto='0' -getservent_r_proto='0' -getspnam_r_proto='0' -gidformat='"ld"' -gidsign='-1' -gidsize='4' -gidtype='gid_t' -glibpth='/usr/shlib /lib/pa1.1 /usr/lib/large /lib /usr/lib /usr/lib/386 /lib/386 /lib/large /usr/lib/small /lib/small /usr/ccs/lib /usr/ucblib /usr/shlib ' -gmtime_r_proto='0' -grep='grep' -groupcat='' -groupstype='gid_t' -gzip='gzip' -h_fcntl='false' -h_sysfile='true' -hint='recommended' -hostcat='ypcat hosts' -huge='' -i16size='2' -i16type='short' -i32size='4' -i32type='long' -i64size='8' -i64type='__int64' -i8size='1' -i8type='char' -i_arpainet='define' -i_bfd='undef' -i_bsdioctl='' -i_crypt='undef' -i_db='undef' -i_dbm='undef' -i_dirent='define' -i_dlfcn='define' -i_execinfo='undef' -i_fcntl='define' -i_fenv='undef' -i_fp='undef' -i_fp_class='undef' -i_gdbm='undef' -i_gdbm_ndbm='undef' -i_gdbmndbm='undef' -i_grp='undef' -i_ieeefp='undef' -i_inttypes='undef' -i_langinfo='undef' -i_libutil='undef' -i_locale='define' -i_machcthr='undef' -i_malloc='define' -i_mallocmalloc='undef' -i_mntent='undef' -i_ndbm='undef' -i_netdb='define' -i_neterrno='undef' -i_netinettcp='undef' -i_niin='define' -i_poll='undef' -i_prot='undef' -i_pthread='undef' -i_pwd='undef' -i_quadmath='undef' -i_rpcsvcdbm='define' -i_sgtty='undef' -i_shadow='undef' -i_socks='undef' -i_stdbool='define' -i_stdint='undef' -i_stdlib='define' -i_sunmath='undef' -i_sysaccess='undef' -i_sysdir='undef' -i_sysfile='undef' -i_sysfilio='define' -i_sysin='undef' -i_sysioctl='define' -i_syslog='undef' -i_sysmman='undef' -i_sysmode='undef' -i_sysmount='undef' -i_sysndir='undef' -i_sysparam='undef' -i_syspoll='undef' -i_sysresrc='undef' -i_syssecrt='undef' -i_sysselct='undef' -i_syssockio='define' -i_sysstat='define' -i_sysstatfs='undef' -i_sysstatvfs='undef' -i_systime='undef' -i_systimek='undef' -i_systimes='undef' -i_systypes='define' -i_sysuio='undef' -i_sysun='undef' -i_sysutsname='define' -i_sysvfs='undef' -i_syswait='undef' -i_termio='undef' -i_termios='undef' -i_time='define' -i_unistd='undef' -i_ustat='undef' -i_utime='define' -i_vfork='undef' -i_wchar='undef' -i_wctype='undef' -i_xlocale='undef' -ignore_versioned_solibs='' -inc_version_list='' -inc_version_list_init='0' -incpath='' -inews='' -installarchlib='~INST_TOP~~INST_VER~\lib~INST_ARCH~' -installbin='~INST_TOP~~INST_VER~\bin~INST_ARCH~' -installhtmldir='~INST_TOP~~INST_VER~\html' -installhtmlhelpdir='~INST_TOP~~INST_VER~\htmlhelp' -installman1dir='~INST_TOP~~INST_VER~\man\man1' -installman3dir='~INST_TOP~~INST_VER~\man\man3' -installnwlcgi='~INST_NW_TOP2~~INST_NW_VER~\lcgi' -installnwlib='~INST_NW_TOP2~~INST_NW_VER~\lib' -installnwscripts='~INST_NW_TOP2~~INST_NW_VER~\scripts' -installnwsystem='~INST_NW_TOP2~~INST_NW_VER~\system' -installprefix='~INST_TOP~~INST_VER~' -installprefixexp='~INST_TOP~~INST_VER~' -installprivlib='~INST_TOP~~INST_VER~\lib' -installscript='~INST_TOP~~INST_VER~\bin' -installsitearch='~INST_TOP~\site~INST_VER~\lib~INST_ARCH~' -installsitebin='~INST_TOP~~INST_VER~\bin~INST_ARCH~' -installsitelib='~INST_TOP~\site~INST_VER~\lib' -installstyle='lib' -installusrbinperl='undef' -installvendorarch='' -installvendorbin='' -installvendorlib='' -intsize='4' -ivdformat='"ld"' -ivsize='4' -ivtype='long' -known_extensions='~static_ext~ ~dynamic_ext~ ~nonxs_ext~' -ksh='' -large='' -ld='link' -lddlflags='-dll ~LINK_FLAGS~' -ldflags='~LINK_FLAGS~' -ldlibpthname='' -less='less' -lib_ext='.lib' -libc='' -libperl='perl.lib' -libpth='' -libs='' -libsdirs='' -libsfiles='' -libsfound='' -libspath='' -libswanted='net socket inet nsl nm ndbm gdbm dbm db malloc dl ld sun m c cposix posix ndir dir crypt ucb bsd BSD PW x' -line='line' -lint='' -lkflags='' -ln='' -lns='copy' -localtime_r_proto='0' -locincpth='/usr/local/include /opt/local/include /usr/gnu/include /opt/gnu/include /usr/GNU/include /opt/GNU/include' -loclibpth='/usr/local/lib /opt/local/lib /usr/gnu/lib /opt/gnu/lib /usr/GNU/lib /opt/GNU/lib' -longdblinfbytes='0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0x7f' -longdblkind='3' -longdblmantbits='64' -longdblnanbytes='0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0xff, 0x7f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00' -longdblsize='10' -longlongsize='8' -longsize='4' -lp='' -lpr='' -ls='dir' -lseeksize='4' -lseektype='off_t' -mad='undef' -mail='' -mailx='' -make='nmake' -make_set_make='#' -mallocobj='malloc.o' -mallocsrc='malloc.c' -malloctype='void *' -man1dir='~INST_TOP~~INST_VER~\man\man1' -man1direxp='~INST_TOP~~INST_VER~\man\man1' -man1ext='1' -man3dir='~INST_TOP~~INST_VER~\man\man3' -man3direxp='~INST_TOP~~INST_VER~\man\man3' -man3ext='3' -medium='' -mips_type='' -mkdir='mkdir' -mmaptype='void *' -models='none' -modetype='mode_t' -more='more /e' -multiarch='undef' -mv='' -myarchname='MSWin32' -mydomain='' -myhostname='' -myuname='' -n='-n' -need_va_copy='define' -netdb_hlen_type='int' -netdb_host_type='char *' -netdb_name_type='char *' -netdb_net_type='long' -nm='' -nm_opt='' -nm_so_opt='' -nonxs_ext='Errno' -nroff='' -nvEUformat='"E"' -nvFUformat='"F"' -nvGUformat='"G"' -nv_overflows_integers_at='256.0*256.0*256.0*256.0*256.0*256.0*2.0*2.0*2.0*2.0*2.0' -nv_preserves_uv_bits='32' -nveformat='"e"' -nvfformat='"f"' -nvgformat='"g"' -nvmantbits='52' -nvsize='8' -nvtype='double' -o_nonblock='O_NONBLOCK' -obj_ext='.obj' -old_pthread_create_joinable='' -optimize='-O' -orderlib='false' -osname='NetWare' -osvers='5.x' -otherlibdirs='' -package='perl5' -pager='more /e' -passcat='' -patchlevel='~PATCHLEVEL~' -path_sep=';' -perl5='' -perl='perl' -perl_static_inline='static' -perladmin='' -perlpath='~INST_TOP~~INST_VER~\bin~INST_ARCH~\perl.nlm' -pg='' -phostname='hostname' -pidtype='int' -plibpth='' -pmake='' -pr='' -prefix='~INST_TOP~' -prefixexp='~INST_DRV~' -privlib='~INST_NW_TOP1~\lib' -privlibexp='~INST_TOP~~INST_VER~\lib' -procselfexe='' -prototype='define' -ptrsize='4' -quadkind='5' -quadtype='__int64' -randbits='48' -randfunc='Perl_drand48' -random_r_proto='0' -randseedtype='U32' -ranlib='rem' -rd_nodata='-1' -readdir64_r_proto='0' -readdir_r_proto='0' -revision='5' -rm='del' -rmail='' -runnm='true' -sGMTIME_max='2147483647' -sGMTIME_min='0' -sLOCALTIME_max='2147483647' -sLOCALTIME_min='0' -sPRIEldbl='"E"' -sPRIFldbl='"F"' -sPRIGldbl='"G"' -sPRIX64='"lX"' -sPRId64='"ld"' -sPRIeldbl='"e"' -sPRIfldbl='"f"' -sPRIgldbl='"g"' -sPRIi64='"li"' -sPRIo64='"lo"' -sPRIu64='"lu"' -sPRIx64='"lx"' -sSCNfldbl='' -sched_yield='' -scriptdir='~INST_TOP~~INST_VER~\bin' -scriptdirexp='~INST_TOP~~INST_VER~\bin' -sed='sed' -seedfunc='Perl_drand48_init' -selectminbits='32' -selecttype='fd_set *' -sendmail='blat' -setgrent_r_proto='0' -sethostent_r_proto='0' -setlocale_r_proto='0' -setnetent_r_proto='0' -setprotoent_r_proto='0' -setpwent_r_proto='0' -setservent_r_proto='0' -sh='cmd /x /c' -shar='' -sharpbang='#!' -shmattype='void *' -shortsize='2' -shrpenv='' -shsharp='true' -sig_count='26' -sig_name='ZERO NUM01 INT QUIT ILL NUM05 NUM06 NUM07 FPE KILL NUM10 SEGV NUM12 PIPE ALRM TERM NUM16 NUM17 NUM18 NUM19 CHLD BREAK ABRT STOP NUM24 CONT CLD' -sig_name_init='"ZERO", "NUM01", "INT", "QUIT", "ILL", "NUM05", "NUM06", "NUM07", "FPE", "KILL", "NUM10", "SEGV", "NUM12", "PIPE", "ALRM", "TERM", "NUM16", "NUM17", "NUM18", "NUM19", "CHLD", "BREAK", "ABRT", "STOP", "NUM24", "CONT", "CLD", 0' -sig_num='0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 20 0' -sig_num_init='0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 20, 0' -sig_size='27' -signal_t='void' -sitearch='~INST_TOP~\site~INST_VER~\lib~INST_ARCH~' -sitearchexp='~INST_TOP~\site~INST_VER~\lib~INST_ARCH~' -sitebin='~INST_TOP~\site~INST_VER~\bin~INST_ARCH~' -sitebinexp='~INST_TOP~\site~INST_VER~\bin~INST_ARCH~' -sitelib='~INST_TOP~\site~INST_VER~\lib' -sitelib_stem='' -sitelibexp='~INST_TOP~\site~INST_VER~\lib' -siteprefix='~INST_TOP~\site~INST_VER~' -siteprefixexp='~INST_TOP~\site~INST_VER~' -sizesize='4' -sizetype='size_t' -sleep='' -smail='' -small='' -so='dll' -sockethdr='' -socketlib='' -socksizetype='int' -sort='sort' -spackage='Perl5' -spitshell='' -split='' -srand48_r_proto='0' -srandom_r_proto='0' -src='' -ssizetype='int' -st_ino_sign='1' -st_ino_size='4' -startperl='#!perl' -startsh='#!/bin/sh' -static_ext='DynaLoader' -stdchar='char' -stdio_base='((fp)->_base)' -stdio_bufsiz='((fp)->_cnt + (fp)->_ptr - (fp)->_base)' -stdio_cnt='((fp)->_cnt)' -stdio_filbuf='' -stdio_ptr='((fp)->_ptr)' -stdio_stream_array='' -strerror_r_proto='0' -strings='/usr/include/string.h' -submit='' -subversion='~SUBVERSION~' -sysman='/usr/man/man1' -tail='' -tar='' -targetarch='' -targetsh='cmd /x /c' -tbl='' -tee='' -test='' -timeincl='/usr/include/sys/time.h ' -timetype='time_t' -tmpnam_r_proto='0' -touch='touch' -tr='' -trnl='\012' -troff='' -ttyname_r_proto='0' -u16size='2' -u16type='unsigned short' -u32size='4' -u32type='unsigned long' -u64size='8' -u64type='unsigned __int64' -u8size='1' -u8type='unsigned char' -uidformat='"ld"' -uidsign='-1' -uidsize='4' -uidtype='uid_t' -uname='uname' -uniq='uniq' -uquadtype='unsigned __int64' -use5005threads='undef' -use64bitall='undef' -use64bitint='undef' -usecbacktrace='undef' -usecrosscompile='undef' -usedevel='undef' -usedl='define' -usedtrace='undef' -usefaststdio='undef' -useithreads='define' -usekernprocpathname='undef' -uselargefiles='undef' -uselongdouble='undef' -usemallocwrap='undef' -usemorebits='undef' -usemultiplicity='define' -usemymalloc='n' -usenm='false' -usensgetexecutablepath='undef' -useopcode='true' -useperlio='undef' -useposix='true' -usequadmath='undef' -usereentrant='undef' -userelocatableinc='undef' -useshrplib='true' -usesitecustomize='undef' -usesocks='undef' -usethreads='undef' -usevendorprefix='undef' -usevfork='true' -usrinc='/usr/include' -uuname='' -uvXUformat='"lX"' -uvoformat='"lo"' -uvsize='4' -uvtype='unsigned long' -uvuformat='"lu"' -uvxformat='"lx"' -vendorarch='' -vendorarchexp='' -vendorbin='' -vendorbinexp='' -vendorlib='' -vendorlib_stem='' -vendorlibexp='' -vendorprefix='' -vendorprefixexp='' -version='~VERSION~' -vi='' -xlibpth='/usr/lib/386 /lib/386' -zcat='' -zip='zip' -PERL_REVISION='~PERL_REVISION~' -PERL_SUBVERSION='~PERL_SUBVERSION~' -PERL_VERSION='~PERL_VERSION~' -PERL_API_REVISION='~PERL_API_REVISION~' -PERL_API_SUBVERSION='~PERL_API_SUBVERSION~' -PERL_API_VERSION='~PERL_API_VERSION~' -PATCHLEVEL='~PERL_VERSION~' -SUBVERSION='~PERL_SUBVERSION~' -PERL_CONFIG_SH='true' -base_import='' -nlm_version='' -mpktool='' -toolpath='' diff --git a/gnu/usr.bin/perl/NetWare/config_H.wc b/gnu/usr.bin/perl/NetWare/config_H.wc deleted file mode 100644 index 3229202d7c9..00000000000 --- a/gnu/usr.bin/perl/NetWare/config_H.wc +++ /dev/null @@ -1,3259 +0,0 @@ -/* - * This file was produced by running the config_h.SH script, which - * gets its values from undef, which is generally produced by - * running Configure. - * - * Feel free to modify any of this as the need arises. Note, however, - * that running config_h.SH again will wipe out any changes you've made. - * For a more permanent change edit undef and rerun config_h.SH. - * - * $Id: Config_h.U,v 3.0.1.5 1997/02/28 14:57:43 ram Exp $ - */ - -/* - * Package name : perl5 - * Source directory : - * Configuration time: Thu Jun 21 17:44:02 2001 - * Configured by : Administrator - * Target system : - */ - -#ifndef _config_h_ -#define _config_h_ - -/* LOC_SED: - * This symbol holds the complete pathname to the sed program. - */ -#define LOC_SED "" /**/ - -/* HAS_AINTL: - * This symbol, if defined, indicates that the aintl routine is - * available. If copysignl is also present we can emulate modfl. - */ -/*#define HAS_AINTL / **/ - -/* HAS_ALARM: - * This symbol, if defined, indicates that the alarm routine is - * available. - */ -/*#define HAS_ALARM /**/ - -/* HASATTRIBUTE: - * This symbol indicates the C compiler can check for function attributes, - * such as printf formats. This is normally only supported by GNU cc. - */ -/*#define HASATTRIBUTE /**/ -#ifndef HASATTRIBUTE -#ifdef __attribute__ -#undef __attribute__ -#endif -#define __attribute__(_arg_) -#endif - -/* HAS_CHOWN: - * This symbol, if defined, indicates that the chown routine is - * available. - */ -/*#define HAS_CHOWN /**/ - -/* HAS_CHROOT: - * This symbol, if defined, indicates that the chroot routine is - * available. - */ -/*#define HAS_CHROOT /**/ - -/* HAS_CHSIZE: - * This symbol, if defined, indicates that the chsize routine is available - * to truncate files. You might need a -lx to get this routine. - */ -#define HAS_CHSIZE /**/ - -/* HAS_CRYPT: - * This symbol, if defined, indicates that the crypt routine is available - * to encrypt passwords and the like. - */ -/*#define HAS_CRYPT /**/ - -/* HAS_CUSERID: - * This symbol, if defined, indicates that the cuserid routine is - * available to get character login names. - */ -/*#define HAS_CUSERID /**/ - -/* HAS_DIFFTIME: - * This symbol, if defined, indicates that the difftime routine is - * available. - */ -#define HAS_DIFFTIME /**/ - -/* HAS_DLERROR: - * This symbol, if defined, indicates that the dlerror routine is - * available to return a string describing the last error that - * occurred from a call to dlopen(), dlclose() or dlsym(). - */ -#define HAS_DLERROR /**/ - -/* HAS_DUP2: - * This symbol, if defined, indicates that the dup2 routine is - * available to duplicate file descriptors. - */ -#define HAS_DUP2 /**/ - -/* HAS_FAST_STDIO: - * This symbol, if defined, indicates that the "fast stdio" - * is available to manipulate the stdio buffers directly. - */ -/*#define HAS_FAST_STDIO /**/ - -/* HAS_FCHDIR: - * This symbol, if defined, indicates that the fchdir routine is - * available to change directory using a file descriptor. - */ -/*#define HAS_FCHDIR /**/ - -/* HAS_FCHMOD: - * This symbol, if defined, indicates that the fchmod routine is available - * to change mode of opened files. If unavailable, use chmod(). - */ -/*#define HAS_FCHMOD /**/ - -/* HAS_FCHOWN: - * This symbol, if defined, indicates that the fchown routine is available - * to change ownership of opened files. If unavailable, use chown(). - */ -/*#define HAS_FCHOWN /**/ - -/* HAS_FCNTL: - * This symbol, if defined, indicates to the C program that - * the fcntl() function exists. - */ -/*#define HAS_FCNTL /**/ - -/* HAS_FGETPOS: - * This symbol, if defined, indicates that the fgetpos routine is - * available to get the file position indicator, similar to ftell(). - */ -#define HAS_FGETPOS /**/ - -/* HAS_FLOCK: - * This symbol, if defined, indicates that the flock routine is - * available to do file locking. - */ -#define HAS_FLOCK /**/ - -/* HAS_FORK: - * This symbol, if defined, indicates that the fork routine is - * available. - */ -/*#define HAS_FORK /**/ - -/* HAS_FSETPOS: - * This symbol, if defined, indicates that the fsetpos routine is - * available to set the file position indicator, similar to fseek(). - */ -#define HAS_FSETPOS /**/ - -/* HAS_GETTIMEOFDAY: - * This symbol, if defined, indicates that the gettimeofday() system - * call is available for a sub-second accuracy clock. Usually, the file - * needs to be included (see I_SYS_RESOURCE). - * The type "Timeval" should be used to refer to "struct timeval". - */ -/*#define HAS_GETTIMEOFDAY /**/ -#ifdef HAS_GETTIMEOFDAY -#define Timeval struct timeval /* Structure used by gettimeofday() */ -#endif - -/* HAS_GETGROUPS: - * This symbol, if defined, indicates that the getgroups() routine is - * available to get the list of process groups. If unavailable, multiple - * groups are probably not supported. - */ -/*#define HAS_GETGROUPS /**/ - -/* HAS_GETLOGIN: - * This symbol, if defined, indicates that the getlogin routine is - * available to get the login name. - */ -#define HAS_GETLOGIN /**/ - -/* HAS_GETPGID: - * This symbol, if defined, indicates to the C program that - * the getpgid(pid) function is available to get the - * process group id. - */ -/*#define HAS_GETPGID /**/ - -/* HAS_GETPGRP2: - * This symbol, if defined, indicates that the getpgrp2() (as in DG/UX) - * routine is available to get the current process group. - */ -/*#define HAS_GETPGRP2 /**/ - -/* HAS_GETPPID: - * This symbol, if defined, indicates that the getppid routine is - * available to get the parent process ID. - */ -/*#define HAS_GETPPID /**/ - -/* HAS_GETPRIORITY: - * This symbol, if defined, indicates that the getpriority routine is - * available to get a process's priority. - */ -/*#define HAS_GETPRIORITY /**/ - -/* HAS_INET_ATON: - * This symbol, if defined, indicates to the C program that the - * inet_aton() function is available to parse IP address "dotted-quad" - * strings. - */ -/*#define HAS_INET_ATON /**/ - -/* HAS_KILLPG: - * This symbol, if defined, indicates that the killpg routine is available - * to kill process groups. If unavailable, you probably should use kill - * with a negative process number. - */ -/*#define HAS_KILLPG /**/ - -/* HAS_LINK: - * This symbol, if defined, indicates that the link routine is - * available to create hard links. - */ -#define HAS_LINK /**/ - -/* HAS_LOCALECONV: - * This symbol, if defined, indicates that the localeconv routine is - * available for numeric and monetary formatting conventions. - */ -#define HAS_LOCALECONV /**/ - -/* HAS_LOCKF: - * This symbol, if defined, indicates that the lockf routine is - * available to do file locking. - */ -/*#define HAS_LOCKF /**/ - -/* HAS_LSTAT: - * This symbol, if defined, indicates that the lstat routine is - * available to do file stats on symbolic links. - */ -/*#define HAS_LSTAT /**/ - -/* HAS_MBLEN: - * This symbol, if defined, indicates that the mblen routine is available - * to find the number of bytes in a multibye character. - */ -#define HAS_MBLEN /**/ - -/* HAS_MBSTOWCS: - * This symbol, if defined, indicates that the mbstowcs routine is - * available to covert a multibyte string into a wide character string. - */ -#define HAS_MBSTOWCS /**/ - -/* HAS_MBTOWC: - * This symbol, if defined, indicates that the mbtowc routine is available - * to covert a multibyte to a wide character. - */ -#define HAS_MBTOWC /**/ - -/* HAS_MKDIR: - * This symbol, if defined, indicates that the mkdir routine is available - * to create directories. Otherwise you should fork off a new process to - * exec /bin/mkdir. - */ -#define HAS_MKDIR /**/ - -/* HAS_MKFIFO: - * This symbol, if defined, indicates that the mkfifo routine is - * available to create FIFOs. Otherwise, mknod should be able to - * do it for you. However, if mkfifo is there, mknod might require - * super-user privileges which mkfifo will not. - */ -/*#define HAS_MKFIFO /**/ - -/* HAS_MKTIME: - * This symbol, if defined, indicates that the mktime routine is - * available. - */ -#define HAS_MKTIME /**/ - -/* HAS_MSYNC: - * This symbol, if defined, indicates that the msync system call is - * available to synchronize a mapped file. - */ -/*#define HAS_MSYNC /**/ - -/* HAS_MUNMAP: - * This symbol, if defined, indicates that the munmap system call is - * available to unmap a region, usually mapped by mmap(). - */ -/*#define HAS_MUNMAP /**/ - -/* HAS_NICE: - * This symbol, if defined, indicates that the nice routine is - * available. - */ -/*#define HAS_NICE /**/ - -/* HAS_PATHCONF: - * This symbol, if defined, indicates that pathconf() is available - * to determine file-system related limits and options associated - * with a given filename. - */ -/* HAS_FPATHCONF: - * This symbol, if defined, indicates that pathconf() is available - * to determine file-system related limits and options associated - * with a given open file descriptor. - */ -/*#define HAS_PATHCONF /**/ -/*#define HAS_FPATHCONF /**/ - -/* HAS_PAUSE: - * This symbol, if defined, indicates that the pause routine is - * available to suspend a process until a signal is received. - */ -/*#define HAS_PAUSE /**/ - -/* HAS_PIPE: - * This symbol, if defined, indicates that the pipe routine is - * available to create an inter-process channel. - */ -#define HAS_PIPE /**/ - -/* HAS_POLL: - * This symbol, if defined, indicates that the poll routine is - * available to poll active file descriptors. You may safely - * include when this symbol is defined. - */ -/*#define HAS_POLL /**/ - -/* HAS_READDIR: - * This symbol, if defined, indicates that the readdir routine is - * available to read directory entries. You may have to include - * . See I_DIRENT. - */ -#define HAS_READDIR /**/ - -/* HAS_SEEKDIR: - * This symbol, if defined, indicates that the seekdir routine is - * available. You may have to include . See I_DIRENT. - */ -#define HAS_SEEKDIR /**/ - -/* HAS_TELLDIR: - * This symbol, if defined, indicates that the telldir routine is - * available. You may have to include . See I_DIRENT. - */ -#define HAS_TELLDIR /**/ - -/* HAS_REWINDDIR: - * This symbol, if defined, indicates that the rewinddir routine is - * available. You may have to include . See I_DIRENT. - */ -#define HAS_REWINDDIR /**/ - -/* HAS_READLINK: - * This symbol, if defined, indicates that the readlink routine is - * available to read the value of a symbolic link. - */ -/*#define HAS_READLINK /**/ - -/* HAS_RENAME: - * This symbol, if defined, indicates that the rename routine is available - * to rename files. Otherwise you should do the unlink(), link(), unlink() - * trick. - */ -#define HAS_RENAME /**/ - -/* HAS_RMDIR: - * This symbol, if defined, indicates that the rmdir routine is - * available to remove directories. Otherwise you should fork off a - * new process to exec /bin/rmdir. - */ -#define HAS_RMDIR /**/ - -/* HAS_SELECT: - * This symbol, if defined, indicates that the select routine is - * available to select active file descriptors. If the timeout field - * is used, may need to be included. - */ -#define HAS_SELECT /**/ - -/* HAS_SETEGID: - * This symbol, if defined, indicates that the setegid routine is available - * to change the effective gid of the current program. - */ -/*#define HAS_SETEGID /**/ - -/* HAS_SETEUID: - * This symbol, if defined, indicates that the seteuid routine is available - * to change the effective uid of the current program. - */ -/*#define HAS_SETEUID /**/ - -/* HAS_SETLINEBUF: - * This symbol, if defined, indicates that the setlinebuf routine is - * available to change stderr or stdout from block-buffered or unbuffered - * to a line-buffered mode. - */ -/*#define HAS_SETLINEBUF /**/ - -/* HAS_SETLOCALE: - * This symbol, if defined, indicates that the setlocale routine is - * available to handle locale-specific ctype implementations. - */ -#define HAS_SETLOCALE /**/ - -/* HAS_SETPGID: - * This symbol, if defined, indicates that the setpgid(pid, gpid) - * routine is available to set process group ID. - */ -/*#define HAS_SETPGID /**/ - -/* HAS_SETPGRP2: - * This symbol, if defined, indicates that the setpgrp2() (as in DG/UX) - * routine is available to set the current process group. - */ -/*#define HAS_SETPGRP2 /**/ - -/* HAS_SETPRIORITY: - * This symbol, if defined, indicates that the setpriority routine is - * available to set a process's priority. - */ -/*#define HAS_SETPRIORITY /**/ - -/* HAS_SETREGID: - * This symbol, if defined, indicates that the setregid routine is - * available to change the real and effective gid of the current - * process. - */ -/* HAS_SETRESGID: - * This symbol, if defined, indicates that the setresgid routine is - * available to change the real, effective and saved gid of the current - * process. - */ -/*#define HAS_SETREGID /**/ -/*#define HAS_SETRESGID /**/ - -/* HAS_SETREUID: - * This symbol, if defined, indicates that the setreuid routine is - * available to change the real and effective uid of the current - * process. - */ -/* HAS_SETRESUID: - * This symbol, if defined, indicates that the setresuid routine is - * available to change the real, effective and saved uid of the current - * process. - */ -/*#define HAS_SETREUID /**/ -/*#define HAS_SETRESUID /**/ - -/* HAS_SETRGID: - * This symbol, if defined, indicates that the setrgid routine is available - * to change the real gid of the current program. - */ -/*#define HAS_SETRGID /**/ - -/* HAS_SETRUID: - * This symbol, if defined, indicates that the setruid routine is available - * to change the real uid of the current program. - */ -/*#define HAS_SETRUID /**/ - -/* HAS_SETSID: - * This symbol, if defined, indicates that the setsid routine is - * available to set the process group ID. - */ -/*#define HAS_SETSID /**/ - -/* Shmat_t: - * This symbol holds the return type of the shmat() system call. - * Usually set to 'void *' or 'char *'. - */ -/* HAS_SHMAT_PROTOTYPE: - * This symbol, if defined, indicates that the sys/shm.h includes - * a prototype for shmat(). Otherwise, it is up to the program to - * guess one. Shmat_t shmat(int, Shmat_t, int) is a good guess, - * but not always right so it should be emitted by the program only - * when HAS_SHMAT_PROTOTYPE is not defined to avoid conflicting defs. - */ -#define Shmat_t void * /**/ -/*#define HAS_SHMAT_PROTOTYPE /**/ - -/* HAS_STRCOLL: - * This symbol, if defined, indicates that the strcoll routine is - * available to compare strings using collating information. - */ -#define HAS_STRCOLL /**/ - -/* HAS_STRTOD: - * This symbol, if defined, indicates that the strtod routine is - * available to provide better numeric string conversion than atof(). - */ -#define HAS_STRTOD /**/ - -/* HAS_STRTOL: - * This symbol, if defined, indicates that the strtol routine is available - * to provide better numeric string conversion than atoi() and friends. - */ -#define HAS_STRTOL /**/ - -/* HAS_STRXFRM: - * This symbol, if defined, indicates that the strxfrm() routine is - * available to transform strings. - */ -#define HAS_STRXFRM /**/ - -/* HAS_SYMLINK: - * This symbol, if defined, indicates that the symlink routine is available - * to create symbolic links. - */ -/*#define HAS_SYMLINK /**/ - -/* HAS_SYSCALL: - * This symbol, if defined, indicates that the syscall routine is - * available to call arbitrary system calls. If undefined, that's tough. - */ -/*#define HAS_SYSCALL /**/ - -/* HAS_SYSCONF: - * This symbol, if defined, indicates that sysconf() is available - * to determine system related limits and options. - */ -/*#define HAS_SYSCONF /**/ - -/* HAS_SYSTEM: - * This symbol, if defined, indicates that the system routine is - * available to issue a shell command. - */ -#define HAS_SYSTEM /**/ - -/* HAS_TCGETPGRP: - * This symbol, if defined, indicates that the tcgetpgrp routine is - * available to get foreground process group ID. - */ -/*#define HAS_TCGETPGRP /**/ - -/* HAS_TCSETPGRP: - * This symbol, if defined, indicates that the tcsetpgrp routine is - * available to set foreground process group ID. - */ -/*#define HAS_TCSETPGRP /**/ - -/* HAS_TRUNCATE: - * This symbol, if defined, indicates that the truncate routine is - * available to truncate files. - */ -/*#define HAS_TRUNCATE /**/ - -/* HAS_TZNAME: - * This symbol, if defined, indicates that the tzname[] array is - * available to access timezone names. - */ -#define HAS_TZNAME /**/ - -/* HAS_UMASK: - * This symbol, if defined, indicates that the umask routine is - * available to set and get the value of the file creation mask. - */ -#define HAS_UMASK /**/ - -/* HAS_USLEEP: - * This symbol, if defined, indicates that the usleep routine is - * available to let the process sleep on a sub-second accuracy. - */ -/*#define HAS_USLEEP /**/ - -/* HAS_WAIT4: - * This symbol, if defined, indicates that wait4() exists. - */ -/*#define HAS_WAIT4 /**/ - -/* HAS_WAITPID: - * This symbol, if defined, indicates that the waitpid routine is - * available to wait for child process. - */ -#define HAS_WAITPID /**/ - -/* HAS_WCSTOMBS: - * This symbol, if defined, indicates that the wcstombs routine is - * available to convert wide character strings to multibyte strings. - */ -#define HAS_WCSTOMBS /**/ - -/* HAS_WCTOMB: - * This symbol, if defined, indicates that the wctomb routine is available - * to covert a wide character to a multibyte. - */ -#define HAS_WCTOMB /**/ - -/* I_ARPA_INET: - * This symbol, if defined, indicates to the C program that it should - * include to get inet_addr and friends declarations. - */ -#define I_ARPA_INET /**/ - -/* I_DBM: - * This symbol, if defined, indicates that exists and should - * be included. - */ -/* I_RPCSVC_DBM: - * This symbol, if defined, indicates that exists and - * should be included. - */ -/*#define I_DBM /**/ -#define I_RPCSVC_DBM /**/ - -/* I_DIRENT: - * This symbol, if defined, indicates to the C program that it should - * include . Using this symbol also triggers the definition - * of the Direntry_t define which ends up being 'struct dirent' or - * 'struct direct' depending on the availability of . - */ -/* DIRNAMLEN: - * This symbol, if defined, indicates to the C program that the length - * of directory entry names is provided by a d_namlen field. Otherwise - * you need to do strlen() on the d_name field. - */ -/* Direntry_t: - * This symbol is set to 'struct direct' or 'struct dirent' depending on - * whether dirent is available or not. You should use this pseudo type to - * portably declare your directory entries. - */ -#define I_DIRENT /**/ -/*#define DIRNAMLEN /**/ -#define Direntry_t DIR - -/* I_DLFCN: - * This symbol, if defined, indicates that exists and should - * be included. - */ -#define I_DLFCN /**/ - -/* I_FCNTL: - * This manifest constant tells the C program to include . - */ -#define I_FCNTL /**/ - -/* I_LOCALE: - * This symbol, if defined, indicates to the C program that it should - * include . - */ -#define I_LOCALE /**/ - -/* I_NDBM: - * This symbol, if defined, indicates that exists and should - * be included. - */ -/*#define I_NDBM /**/ - -/* I_NET_ERRNO: - * This symbol, if defined, indicates that exists and - * should be included. - */ -/*#define I_NET_ERRNO /**/ - -/* I_NETINET_IN: - * This symbol, if defined, indicates to the C program that it should - * include . Otherwise, you may try . - */ -#define I_NETINET_IN /**/ - -/* I_SYS_DIR: - * This symbol, if defined, indicates to the C program that it should - * include . - */ -/*#define I_SYS_DIR /**/ - -/* I_SYS_FILE: - * This symbol, if defined, indicates to the C program that it should - * include to get definition of R_OK and friends. - */ -/*#define I_SYS_FILE /**/ - -/* I_SYS_IOCTL: - * This symbol, if defined, indicates that exists and should - * be included. Otherwise, include or . - */ -/* I_SYS_SOCKIO: - * This symbol, if defined, indicates the should be included - * to get socket ioctl options, like SIOCATMARK. - */ -#define I_SYS_IOCTL /**/ -#define I_SYS_SOCKIO /**/ - -/* I_SYS_NDIR: - * This symbol, if defined, indicates to the C program that it should - * include . - */ -/*#define I_SYS_NDIR /**/ - -/* I_SYS_PARAM: - * This symbol, if defined, indicates to the C program that it should - * include . - */ -/*#define I_SYS_PARAM /**/ - -/* I_SYS_RESOURCE: - * This symbol, if defined, indicates to the C program that it should - * include . - */ -/*#define I_SYS_RESOURCE /**/ - -/* I_SYS_SELECT: - * This symbol, if defined, indicates to the C program that it should - * include in order to get definition of struct timeval. - */ -/*#define I_SYS_SELECT /**/ - -/* I_SYS_STAT: - * This symbol, if defined, indicates to the C program that it should - * include . - */ -#define I_SYS_STAT /**/ - -/* I_SYS_TIMES: - * This symbol, if defined, indicates to the C program that it should - * include . - */ -/*#define I_SYS_TIMES /**/ - -/* I_SYS_TYPES: - * This symbol, if defined, indicates to the C program that it should - * include . - */ -#define I_SYS_TYPES /**/ - -/* I_SYS_UN: - * This symbol, if defined, indicates to the C program that it should - * include to get UNIX domain socket definitions. - */ -/*#define I_SYS_UN /**/ - -/* I_SYS_WAIT: - * This symbol, if defined, indicates to the C program that it should - * include . - */ -/*#define I_SYS_WAIT /**/ - -/* I_TERMIO: - * This symbol, if defined, indicates that the program should include - * rather than . There are also differences in - * the ioctl() calls that depend on the value of this symbol. - */ -/* I_TERMIOS: - * This symbol, if defined, indicates that the program should include - * the POSIX termios.h rather than sgtty.h or termio.h. - * There are also differences in the ioctl() calls that depend on the - * value of this symbol. - */ -/* I_SGTTY: - * This symbol, if defined, indicates that the program should include - * rather than . There are also differences in - * the ioctl() calls that depend on the value of this symbol. - */ -/*#define I_TERMIO /**/ -/*#define I_TERMIOS /**/ -/*#define I_SGTTY /**/ - -/* I_UNISTD: - * This symbol, if defined, indicates to the C program that it should - * include . - */ -/*#define I_UNISTD /**/ - -/* I_UTIME: - * This symbol, if defined, indicates to the C program that it should - * include . - */ -#define I_UTIME /**/ - -/* I_VFORK: - * This symbol, if defined, indicates to the C program that it should - * include vfork.h. - */ -/*#define I_VFORK /**/ - -/* SH_PATH: - * This symbol contains the full pathname to the shell used on this - * on this system to execute Bourne shell scripts. Usually, this will be - * /bin/sh, though it's possible that some systems will have /bin/ksh, - * /bin/pdksh, /bin/ash, /bin/bash, or even something such as - * D:/bin/sh.exe. - */ -#define SH_PATH "cmd /x /c" /**/ - -/* INTSIZE: - * This symbol contains the value of sizeof(int) so that the C - * preprocessor can make decisions based on it. - */ -/* LONGSIZE: - * This symbol contains the value of sizeof(long) so that the C - * preprocessor can make decisions based on it. - */ -/* SHORTSIZE: - * This symbol contains the value of sizeof(short) so that the C - * preprocessor can make decisions based on it. - */ -#define INTSIZE 4 /**/ -#define LONGSIZE 4 /**/ -#define SHORTSIZE 2 /**/ - -/* MULTIARCH: - * This symbol, if defined, signifies that the build - * process will produce some binary files that are going to be - * used in a cross-platform environment. This is the case for - * example with the NeXT "fat" binaries that contain executables - * for several CPUs. - */ -/*#define MULTIARCH /**/ - -/* HAS_QUAD: - * This symbol, if defined, tells that there's a 64-bit integer type, - * Quad_t, and its unsigned counterpart, Uquad_t. QUADKIND will be one - * of QUAD_IS_INT, QUAD_IS_LONG, QUAD_IS_LONG_LONG, or QUAD_IS_INT64_T. - */ -/*#define HAS_QUAD /**/ -#ifdef HAS_QUAD -# define Quad_t __int64 /**/ -# define Uquad_t unsigned __int64 /**/ -# define QUADKIND 5 /**/ -# define QUAD_IS_INT 1 -# define QUAD_IS_LONG 2 -# define QUAD_IS_LONG_LONG 3 -# define QUAD_IS_INT64_T 4 -#endif - -/* HAS_ACCESSX: - * This symbol, if defined, indicates that the accessx routine is - * available to do extended access checks. - */ -/*#define HAS_ACCESSX /**/ - -/* HAS_EACCESS: - * This symbol, if defined, indicates that the eaccess routine is - * available to do extended access checks. - */ -/*#define HAS_EACCESS /**/ - -/* I_SYS_ACCESS: - * This symbol, if defined, indicates to the C program that it should - * include . - */ -/*#define I_SYS_ACCESS /**/ - -/* I_SYS_SECURITY: - * This symbol, if defined, indicates to the C program that it should - * include . - */ -/*#define I_SYS_SECURITY /**/ - -/* OSNAME: - * This symbol contains the name of the operating system, as determined - * by Configure. You shouldn't rely on it too much; the specific - * feature tests from Configure are generally more reliable. - */ -/* OSVERS: - * This symbol contains the version of the operating system, as determined - * by Configure. You shouldn't rely on it too much; the specific - * feature tests from Configure are generally more reliable. - */ -#define OSNAME "NetWare" /**/ -#define OSVERS "5.x" /**/ - -/* MEM_ALIGNBYTES: - * This symbol contains the number of bytes required to align a - * double, or a long double when applicable. Usual values are 2, - * 4 and 8. The default is eight, for safety. - */ -#if defined(MULTIARCH) -# define MEM_ALIGNBYTES 8 -#else -#define MEM_ALIGNBYTES 8 -#endif - -/* ARCHLIB: - * This variable, if defined, holds the name of the directory in - * which the user wants to put architecture-dependent public - * library files for perl5. It is most often a local directory - * such as /usr/local/lib. Programs using this variable must be - * prepared to deal with filename expansion. If ARCHLIB is the - * same as PRIVLIB, it is not defined, since presumably the - * program already searches PRIVLIB. - */ -/* ARCHLIB_EXP: - * This symbol contains the ~name expanded version of ARCHLIB, to be used - * in programs that are not prepared to deal with ~ expansion at run-time. - */ -#define ARCHLIB "c:\\perl\\5.32.1\\lib\\NetWare-x86-multi-thread" /**/ -/*#define ARCHLIB_EXP "" /**/ - -/* ARCHNAME: - * This symbol holds a string representing the architecture name. - * It may be used to construct an architecture-dependant pathname - * where library files may be held under a private library, for - * instance. - */ -#define ARCHNAME "NetWare-x86-multi-thread" /**/ - -/* HAS_ATOLF: - * This symbol, if defined, indicates that the atolf routine is - * available to convert strings into long doubles. - */ -/*#define HAS_ATOLF /**/ - -/* HAS_ATOLL: - * This symbol, if defined, indicates that the atoll routine is - * available to convert strings into long longs. - */ -/*#define HAS_ATOLL /**/ - -/* BIN: - * This symbol holds the path of the bin directory where the package will - * be installed. Program must be prepared to deal with ~name substitution. - */ -/* BIN_EXP: - * This symbol is the filename expanded version of the BIN symbol, for - * programs that do not want to deal with that at run-time. - */ -#define BIN "c:\\perl\\5.32.1\\bin\\NetWare-x86-multi-thread" /**/ -#define BIN_EXP "c:\\perl\\5.32.1\\bin\\NetWare-x86-multi-thread" /**/ - -/* BYTEORDER: - * This symbol holds the hexadecimal constant defined in byteorder, - * i.e. 0x1234 or 0x4321, etc... - * If the compiler supports cross-compiling or multiple-architecture - * binaries (eg. on NeXT systems), use compiler-defined macros to - * determine the byte order. - * On NeXT 3.2 (and greater), you can build "Fat" Multiple Architecture - * Binaries (MAB) on either big endian or little endian machines. - * The endian-ness is available at compile-time. This only matters - * for perl, where the config.h can be generated and installed on - * one system, and used by a different architecture to build an - * extension. Older versions of NeXT that might not have - * defined either *_ENDIAN__ were all on Motorola 680x0 series, - * so the default case (for NeXT) is big endian to catch them. - * This might matter for NeXT 3.0. - */ -#if defined(MULTIARCH) -# ifdef __LITTLE_ENDIAN__ -# if LONGSIZE == 4 -# define BYTEORDER 0x1234 -# else -# if LONGSIZE == 8 -# define BYTEORDER 0x12345678 -# endif -# endif -# else -# ifdef __BIG_ENDIAN__ -# if LONGSIZE == 4 -# define BYTEORDER 0x4321 -# else -# if LONGSIZE == 8 -# define BYTEORDER 0x87654321 -# endif -# endif -# endif -# endif -# if !defined(BYTEORDER) && (defined(NeXT) || defined(__NeXT__)) -# define BYTEORDER 0x4321 -# endif -#else -#define BYTEORDER 0x1234 /* large digits for MSB */ -#endif /* NeXT */ - -/* CAT2: - * This macro catenates 2 tokens together. - */ -/* STRINGIFY: - * This macro surrounds its token with double quotes. - */ -#if 42 == 1 -#define CAT2(a,b) a/**/b -#define STRINGIFY(a) "a" - /* If you can get stringification with catify, tell me how! */ -#endif -#if 42 == 42 -#define PeRl_CaTiFy(a, b) a ## b -#define PeRl_StGiFy(a) #a -/* the additional level of indirection enables these macros to be - * used as arguments to other macros. See K&R 2nd ed., page 231. */ -#define CAT2(a,b) PeRl_CaTiFy(a,b) -#define StGiFy(a) PeRl_StGiFy(a) -#define STRINGIFY(a) PeRl_StGiFy(a) -#endif -#if 42 != 1 && 42 != 42 -# include "Bletch: How does this C preprocessor concatenate tokens?" -#endif - -/* CPPSTDIN: - * This symbol contains the first part of the string which will invoke - * the C preprocessor on the standard input and produce to standard - * output. Typical value of "cc -E" or "/lib/cpp", but it can also - * call a wrapper. See CPPRUN. - */ -/* CPPMINUS: - * This symbol contains the second part of the string which will invoke - * the C preprocessor on the standard input and produce to standard - * output. This symbol will have the value "-" if CPPSTDIN needs a minus - * to specify standard input, otherwise the value is "". - */ -/* CPPRUN: - * This symbol contains the string which will invoke a C preprocessor on - * the standard input and produce to standard output. It needs to end - * with CPPLAST, after all other preprocessor flags have been specified. - * The main difference with CPPSTDIN is that this program will never be a - * pointer to a shell wrapper, i.e. it will be empty if no preprocessor is - * available directly to the user. Note that it may well be different from - * the preprocessor used to compile the C program. - */ -/* CPPLAST: - * This symbol is intended to be used along with CPPRUN in the same manner - * symbol CPPMINUS is used with CPPSTDIN. It contains either "-" or "". - */ -#define CPPSTDIN "cl -nologo -E" -#define CPPMINUS "" -#define CPPRUN "cl -nologo -E" -#define CPPLAST "" - -/* HAS__FWALK: - * This symbol, if defined, indicates that the _fwalk system call is - * available to apply a function to all the file handles. - */ -/*#define HAS__FWALK /**/ - -/* HAS_ACCESS: - * This manifest constant lets the C program know that the access() - * system call is available to check for accessibility using real UID/GID. - * (always present on UNIX.) - */ -#define HAS_ACCESS /**/ - -/* CASTI32: - * This symbol is defined if the C compiler can cast negative - * or large floating point numbers to 32-bit ints. - */ -/*#define CASTI32 /**/ - -/* CASTNEGFLOAT: - * This symbol is defined if the C compiler can cast negative - * numbers to unsigned longs, ints and shorts. - */ -/* CASTFLAGS: - * This symbol contains flags that say what difficulties the compiler - * has casting odd floating values to unsigned long: - * 0 = ok - * 1 = couldn't cast < 0 - * 2 = couldn't cast >= 0x80000000 - * 4 = couldn't cast in argument expression list - */ -#define CASTNEGFLOAT /**/ -#define CASTFLAGS 0 /**/ - -/* VOID_CLOSEDIR: - * This symbol, if defined, indicates that the closedir() routine - * does not return a value. - */ -/*#define VOID_CLOSEDIR /**/ - -/* HAS_STRUCT_CMSGHDR: - * This symbol, if defined, indicates that the struct cmsghdr - * is supported. - */ -/*#define HAS_STRUCT_CMSGHDR /**/ - -/* HAS_CSH: - * This symbol, if defined, indicates that the C-shell exists. - */ -/* CSH: - * This symbol, if defined, contains the full pathname of csh. - */ -/*#define HAS_CSH /**/ -#ifdef HAS_CSH -#define CSH "" /**/ -#endif - -/* DLSYM_NEEDS_UNDERSCORE: - * This symbol, if defined, indicates that we need to prepend an - * underscore to the symbol name before calling dlsym(). This only - * makes sense if you *have* dlsym, which we will presume is the - * case if you're using dl_dlopen.xs. - */ -/*#define DLSYM_NEEDS_UNDERSCORE /**/ - -/* HAS_DRAND48_PROTO: - * This symbol, if defined, indicates that the system provides - * a prototype for the drand48() function. Otherwise, it is up - * to the program to supply one. A good guess is - * extern double drand48(void); - */ -/*#define HAS_DRAND48_PROTO /**/ - -/* HAS_ENDGRENT: - * This symbol, if defined, indicates that the getgrent routine is - * available for finalizing sequential access of the group database. - */ -/*#define HAS_ENDGRENT /**/ - -/* HAS_ENDHOSTENT: - * This symbol, if defined, indicates that the endhostent() routine is - * available to close whatever was being used for host queries. - */ -/*#define HAS_ENDHOSTENT /**/ - -/* HAS_ENDNETENT: - * This symbol, if defined, indicates that the endnetent() routine is - * available to close whatever was being used for network queries. - */ -/*#define HAS_ENDNETENT /**/ - -/* HAS_ENDPROTOENT: - * This symbol, if defined, indicates that the endprotoent() routine is - * available to close whatever was being used for protocol queries. - */ -/*#define HAS_ENDPROTOENT /**/ - -/* HAS_ENDPWENT: - * This symbol, if defined, indicates that the getgrent routine is - * available for finalizing sequential access of the passwd database. - */ -/*#define HAS_ENDPWENT /**/ - -/* HAS_ENDSERVENT: - * This symbol, if defined, indicates that the endservent() routine is - * available to close whatever was being used for service queries. - */ -/*#define HAS_ENDSERVENT /**/ - -/* FCNTL_CAN_LOCK: - * This symbol, if defined, indicates that fcntl() can be used - * for file locking. Normally on Unix systems this is defined. - * It may be undefined on VMS. - */ -/*#define FCNTL_CAN_LOCK /**/ - -/* HAS_FD_SET: - * This symbol, when defined, indicates presence of the fd_set typedef - * in - */ -#define HAS_FD_SET /**/ - -/* FLEXFILENAMES: - * This symbol, if defined, indicates that the system supports filenames - * longer than 14 characters. - */ -#define FLEXFILENAMES /**/ - -/* HAS_FPOS64_T: - * This symbol will be defined if the C compiler supports fpos64_t. - */ -/*#define HAS_FPOS64_T /**/ - -/* HAS_FREXPL: - * This symbol, if defined, indicates that the frexpl routine is - * available to break a long double floating-point number into - * a normalized fraction and an integral power of 2. - */ -/*#define HAS_FREXPL /**/ - -/* HAS_STRUCT_FS_DATA: - * This symbol, if defined, indicates that the struct fs_data - * to do statfs() is supported. - */ -/*#define HAS_STRUCT_FS_DATA /**/ - -/* HAS_FSEEKO: - * This symbol, if defined, indicates that the fseeko routine is - * available to fseek beyond 32 bits (useful for ILP32 hosts). - */ -/*#define HAS_FSEEKO /**/ - -/* HAS_FSTATFS: - * This symbol, if defined, indicates that the fstatfs routine is - * available to stat filesystems by file descriptors. - */ -/*#define HAS_FSTATFS /**/ - -/* HAS_FSYNC: - * This symbol, if defined, indicates that the fsync routine is - * available to write a file's modified data and attributes to - * permanent storage. - */ -/*#define HAS_FSYNC /**/ - -/* HAS_FTELLO: - * This symbol, if defined, indicates that the ftello routine is - * available to ftell beyond 32 bits (useful for ILP32 hosts). - */ -/*#define HAS_FTELLO /**/ - -/* Gconvert: - * This preprocessor macro is defined to convert a floating point - * number to a string without a trailing decimal point. This - * emulates the behavior of sprintf("%g"), but is sometimes much more - * efficient. If gconvert() is not available, but gcvt() drops the - * trailing decimal point, then gcvt() is used. If all else fails, - * a macro using sprintf("%g") is used. Arguments for the Gconvert - * macro are: value, number of digits, whether trailing zeros should - * be retained, and the output buffer. - * Possible values are: - * d_Gconvert='gconvert((x),(n),(t),(b))' - * d_Gconvert='gcvt((x),(n),(b))' - * d_Gconvert='sprintf((b),"%.*g",(n),(x))' - * The last two assume trailing zeros should not be kept. - */ -#define Gconvert(x,n,t,b) sprintf((b),"%.*g",(n),(x)) - -/* HAS_GETCWD: - * This symbol, if defined, indicates that the getcwd routine is - * available to get the current working directory. - */ -#define HAS_GETCWD /**/ - -/* HAS_GETESPWNAM: - * This symbol, if defined, indicates that the getespwnam system call is - * available to retrieve enhanced (shadow) password entries by name. - */ -/*#define HAS_GETESPWNAM /**/ - -/* HAS_GETFSSTAT: - * This symbol, if defined, indicates that the getfsstat routine is - * available to stat filesystems in bulk. - */ -/*#define HAS_GETFSSTAT /**/ - -/* HAS_GETGRENT: - * This symbol, if defined, indicates that the getgrent routine is - * available for sequential access of the group database. - */ -/*#define HAS_GETGRENT /**/ - -/* HAS_GETHOSTBYADDR: - * This symbol, if defined, indicates that the gethostbyaddr() routine is - * available to look up hosts by their IP addresses. - */ -#define HAS_GETHOSTBYADDR /**/ - -/* HAS_GETHOSTBYNAME: - * This symbol, if defined, indicates that the gethostbyname() routine is - * available to look up host names in some data base or other. - */ -#define HAS_GETHOSTBYNAME /**/ - -/* HAS_GETHOSTENT: - * This symbol, if defined, indicates that the gethostent() routine is - * available to look up host names in some data base or another. - */ -/*#define HAS_GETHOSTENT /**/ - -/* HAS_GETHOSTNAME: - * This symbol, if defined, indicates that the C program may use the - * gethostname() routine to derive the host name. See also HAS_UNAME - * and PHOSTNAME. - */ -/* HAS_UNAME: - * This symbol, if defined, indicates that the C program may use the - * uname() routine to derive the host name. See also HAS_GETHOSTNAME - * and PHOSTNAME. - */ -/* PHOSTNAME: - * This symbol, if defined, indicates the command to feed to the - * popen() routine to derive the host name. See also HAS_GETHOSTNAME - * and HAS_UNAME. Note that the command uses a fully qualified path, - * so that it is safe even if used by a process with super-user - * privileges. - */ -/* HAS_PHOSTNAME: - * This symbol, if defined, indicates that the C program may use the - * contents of PHOSTNAME as a command to feed to the popen() routine - * to derive the host name. - */ -#define HAS_GETHOSTNAME /**/ -#define HAS_UNAME /**/ -/*#define HAS_PHOSTNAME /**/ -#ifdef HAS_PHOSTNAME -#define PHOSTNAME "" /* How to get the host name */ -#endif - -/* HAS_GETHOST_PROTOS: - * This symbol, if defined, indicates that includes - * prototypes for gethostent(), gethostbyname(), and - * gethostbyaddr(). Otherwise, it is up to the program to guess - * them. See netdbtype.U for probing for various Netdb_xxx_t types. - */ -#define HAS_GETHOST_PROTOS /**/ - -/* HAS_GETITIMER: - * This symbol, if defined, indicates that the getitimer routine is - * available to return interval timers. - */ -/*#define HAS_GETITIMER /**/ - -/* HAS_GETMNT: - * This symbol, if defined, indicates that the getmnt routine is - * available to get filesystem mount info by filename. - */ -/*#define HAS_GETMNT /**/ - -/* HAS_GETMNTENT: - * This symbol, if defined, indicates that the getmntent routine is - * available to iterate through mounted file systems to get their info. - */ -/*#define HAS_GETMNTENT /**/ - -/* HAS_GETNETBYADDR: - * This symbol, if defined, indicates that the getnetbyaddr() routine is - * available to look up networks by their IP addresses. - */ -/*#define HAS_GETNETBYADDR /**/ - -/* HAS_GETNETBYNAME: - * This symbol, if defined, indicates that the getnetbyname() routine is - * available to look up networks by their names. - */ -/*#define HAS_GETNETBYNAME /**/ - -/* HAS_GETNETENT: - * This symbol, if defined, indicates that the getnetent() routine is - * available to look up network names in some data base or another. - */ -/*#define HAS_GETNETENT /**/ - -/* HAS_GETNET_PROTOS: - * This symbol, if defined, indicates that includes - * prototypes for getnetent(), getnetbyname(), and - * getnetbyaddr(). Otherwise, it is up to the program to guess - * them. See netdbtype.U for probing for various Netdb_xxx_t types. - */ -#define HAS_GETNET_PROTOS /**/ - -/* HAS_GETPAGESIZE: - * This symbol, if defined, indicates that the getpagesize system call - * is available to get system page size, which is the granularity of - * many memory management calls. - */ -/*#define HAS_GETPAGESIZE /**/ - -/* HAS_GETPROTOENT: - * This symbol, if defined, indicates that the getprotoent() routine is - * available to look up protocols in some data base or another. - */ -/*#define HAS_GETPROTOENT /**/ - -/* HAS_GETPGRP: - * This symbol, if defined, indicates that the getpgrp routine is - * available to get the current process group. - */ -/* USE_BSD_GETPGRP: - * This symbol, if defined, indicates that getpgrp needs one - * arguments whereas USG one needs none. - */ -/*#define HAS_GETPGRP /**/ -/*#define USE_BSD_GETPGRP /**/ - -/* HAS_GETPROTOBYNAME: - * This symbol, if defined, indicates that the getprotobyname() - * routine is available to look up protocols by their name. - */ -/* HAS_GETPROTOBYNUMBER: - * This symbol, if defined, indicates that the getprotobynumber() - * routine is available to look up protocols by their number. - */ -#define HAS_GETPROTOBYNAME /**/ -#define HAS_GETPROTOBYNUMBER /**/ - -/* HAS_GETPROTO_PROTOS: - * This symbol, if defined, indicates that includes - * prototypes for getprotoent(), getprotobyname(), and - * getprotobyaddr(). Otherwise, it is up to the program to guess - * them. See netdbtype.U for probing for various Netdb_xxx_t types. - */ -#define HAS_GETPROTO_PROTOS /**/ - -/* HAS_GETPRPWNAM: - * This symbol, if defined, indicates that the getprpwnam system call is - * available to retrieve protected (shadow) password entries by name. - */ -/*#define HAS_GETPRPWNAM /**/ - -/* HAS_GETPWENT: - * This symbol, if defined, indicates that the getpwent routine is - * available for sequential access of the passwd database. - * If this is not available, the older getpw() function may be available. - */ -/*#define HAS_GETPWENT /**/ - -/* HAS_GETSERVENT: - * This symbol, if defined, indicates that the getservent() routine is - * available to look up network services in some data base or another. - */ -/*#define HAS_GETSERVENT /**/ - -/* HAS_GETSERV_PROTOS: - * This symbol, if defined, indicates that includes - * prototypes for getservent(), getservbyname(), and - * getservbyaddr(). Otherwise, it is up to the program to guess - * them. See netdbtype.U for probing for various Netdb_xxx_t types. - */ -#define HAS_GETSERV_PROTOS /**/ - -/* HAS_GETSPNAM: - * This symbol, if defined, indicates that the getspnam system call is - * available to retrieve SysV shadow password entries by name. - */ -/*#define HAS_GETSPNAM /**/ - -/* HAS_GETSERVBYNAME: - * This symbol, if defined, indicates that the getservbyname() - * routine is available to look up services by their name. - */ -/* HAS_GETSERVBYPORT: - * This symbol, if defined, indicates that the getservbyport() - * routine is available to look up services by their port. - */ -#define HAS_GETSERVBYNAME /**/ -#define HAS_GETSERVBYPORT /**/ - -/* HAS_GNULIBC: - * This symbol, if defined, indicates to the C program that - * the GNU C library is being used. A better check is to use - * the __GLIBC__ and __GLIBC_MINOR__ symbols supplied with glibc. - */ -/*#define HAS_GNULIBC /**/ -#if defined(HAS_GNULIBC) && !defined(_GNU_SOURCE) -# define _GNU_SOURCE -#endif -/* HAS_HASMNTOPT: - * This symbol, if defined, indicates that the hasmntopt routine is - * available to query the mount options of file systems. - */ -/*#define HAS_HASMNTOPT /**/ - -/* HAS_HTONL: - * This symbol, if defined, indicates that the htonl() routine (and - * friends htons() ntohl() ntohs()) are available to do network - * order byte swapping. - */ -/* HAS_HTONS: - * This symbol, if defined, indicates that the htons() routine (and - * friends htonl() ntohl() ntohs()) are available to do network - * order byte swapping. - */ -/* HAS_NTOHL: - * This symbol, if defined, indicates that the ntohl() routine (and - * friends htonl() htons() ntohs()) are available to do network - * order byte swapping. - */ -/* HAS_NTOHS: - * This symbol, if defined, indicates that the ntohs() routine (and - * friends htonl() htons() ntohl()) are available to do network - * order byte swapping. - */ -#define HAS_HTONL /**/ -#define HAS_HTONS /**/ -#define HAS_NTOHL /**/ -#define HAS_NTOHS /**/ - -/* HAS_ILOGBL: - * This symbol, if defined, indicates that the ilogbl routine is - * available. If scalbnl is also present we can emulate frexpl. - */ -/*#define HAS_ILOGBL /**/ - -/* HAS_INT64_T: - * This symbol will defined if the C compiler supports int64_t. - * Usually the needs to be included, but sometimes - * is enough. - */ -/*#define HAS_INT64_T /**/ - -/* HAS_ISASCII: - * This manifest constant lets the C program know that isascii - * is available. - */ -#define HAS_ISASCII /**/ - -/* HAS_ISNAN: - * This symbol, if defined, indicates that the isnan routine is - * available to check whether a double is a NaN. - */ -/*#define HAS_ISNAN /**/ - -/* HAS_ISNANL: - * This symbol, if defined, indicates that the isnanl routine is - * available to check whether a long double is a NaN. - */ -/*#define HAS_ISNANL /**/ - -/* HAS_LCHOWN: - * This symbol, if defined, indicates that the lchown routine is - * available to operate on a symbolic link (instead of following the - * link). - */ -/*#define HAS_LCHOWN /**/ - -/* HAS_LDBL_DIG: - * This symbol, if defined, indicates that this system's - * or defines the symbol LDBL_DIG, which is the number - * of significant digits in a long double precision number. Unlike - * for DBL_DIG, there's no good guess for LDBL_DIG if it is undefined. - */ -#define HAS_LDBL_DIG /**/ - -/* HAS_LONG_DOUBLE: - * This symbol will be defined if the C compiler supports long - * doubles. - */ -/* LONG_DOUBLESIZE: - * This symbol contains the size of a long double, so that the - * C preprocessor can make decisions based on it. It is only - * defined if the system supports long doubles. - */ -#define HAS_LONG_DOUBLE /**/ -#ifdef HAS_LONG_DOUBLE -#define LONG_DOUBLESIZE 10 /**/ -#endif - -/* HAS_LONG_LONG: - * This symbol will be defined if the C compiler supports long long. - */ -/* LONGLONGSIZE: - * This symbol contains the size of a long long, so that the - * C preprocessor can make decisions based on it. It is only - * defined if the system supports long long. - */ -/*#define HAS_LONG_LONG /**/ -#ifdef HAS_LONG_LONG -#define LONGLONGSIZE 8 /**/ -#endif - -/* HAS_LSEEK_PROTO: - * This symbol, if defined, indicates that the system provides - * a prototype for the lseek() function. Otherwise, it is up - * to the program to supply one. A good guess is - * extern off_t lseek(int, off_t, int); - */ -#define HAS_LSEEK_PROTO /**/ - -/* HAS_MADVISE: - * This symbol, if defined, indicates that the madvise system call is - * available to map a file into memory. - */ -/*#define HAS_MADVISE /**/ - -/* HAS_MKDTEMP: - * This symbol, if defined, indicates that the mkdtemp routine is - * available to exclusively create a uniquely named temporary directory. - */ -/*#define HAS_MKDTEMP /**/ - -/* HAS_MKSTEMP: - * This symbol, if defined, indicates that the mkstemp routine is - * available to exclusively create and open a uniquely named - * temporary file. - */ -/*#define HAS_MKSTEMP /**/ - -/* HAS_MKSTEMPS: - * This symbol, if defined, indicates that the mkstemps routine is - * available to exclusively create and open a uniquely named - * (with a suffix) temporary file. - */ -/*#define HAS_MKSTEMPS /**/ - -/* HAS_MMAP: - * This symbol, if defined, indicates that the mmap system call is - * available to map a file into memory. - */ -/* Mmap_t: - * This symbol holds the return type of the mmap() system call - * (and simultaneously the type of the first argument). - * Usually set to 'void *' or 'cadd_t'. - */ -/*#define HAS_MMAP /**/ -#define Mmap_t void * /**/ - -/* HAS_MODFL: - * This symbol, if defined, indicates that the modfl routine is - * available to split a long double x into a fractional part f and - * an integer part i such that |f| < 1.0 and (f + i) = x. - */ -/*#define HAS_MODFL /**/ - -/* HAS_MPROTECT: - * This symbol, if defined, indicates that the mprotect system call is - * available to modify the access protection of a memory mapped file. - */ -/*#define HAS_MPROTECT /**/ - -/* HAS_MSG: - * This symbol, if defined, indicates that the entire msg*(2) library is - * supported (IPC mechanism based on message queues). - */ -/*#define HAS_MSG /**/ - -/* HAS_STRUCT_MSGHDR: - * This symbol, if defined, indicates that the struct msghdr - * is supported. - */ -/*#define HAS_STRUCT_MSGHDR /**/ - -/* HAS_OFF64_T: - * This symbol will be defined if the C compiler supports off64_t. - */ -/*#define HAS_OFF64_T /**/ - -/* HAS_OPEN3: - * This manifest constant lets the C program know that the three - * argument form of open(2) is available. - */ -/*#define HAS_OPEN3 /**/ - -/* OLD_PTHREAD_CREATE_JOINABLE: - * This symbol, if defined, indicates how to create pthread - * in joinable (aka undetached) state. NOTE: not defined - * if pthread.h already has defined PTHREAD_CREATE_JOINABLE - * (the new version of the constant). - * If defined, known values are PTHREAD_CREATE_UNDETACHED - * and __UNDETACHED. - */ -/*#define OLD_PTHREAD_CREATE_JOINABLE /**/ - -/* HAS_PTHREAD_YIELD: - * This symbol, if defined, indicates that the pthread_yield - * routine is available to yield the execution of the current - * thread. sched_yield is preferable to pthread_yield. - */ -/* SCHED_YIELD: - * This symbol defines the way to yield the execution of - * the current thread. Known ways are sched_yield, - * pthread_yield, and pthread_yield with NULL. - */ -/* HAS_SCHED_YIELD: - * This symbol, if defined, indicates that the sched_yield - * routine is available to yield the execution of the current - * thread. sched_yield is preferable to pthread_yield. - */ -/*#define HAS_PTHREAD_YIELD /**/ -#define SCHED_YIELD /**/ -/*#define HAS_SCHED_YIELD /**/ - -/* HAS_PTHREAD_ATTR_SETSCOPE: - * This symbol, if defined, indicates that the pthread_attr_setscope - * system call is available to set the contention scope attribute of - * a thread attribute object. - */ -/*#define HAS_PTHREAD_ATTR_SETSCOPE / **/ - -/* HAS_READV: - * This symbol, if defined, indicates that the readv routine is - * available to do gather reads. You will also need - * and there I_SYSUIO. - */ -/*#define HAS_READV /**/ - -/* HAS_RECVMSG: - * This symbol, if defined, indicates that the recvmsg routine is - * available to send structured socket messages. - */ -/*#define HAS_RECVMSG /**/ - -/* HAS_SBRK_PROTO: - * This symbol, if defined, indicates that the system provides - * a prototype for the sbrk() function. Otherwise, it is up - * to the program to supply one. Good guesses are - * extern void* sbrk(int); - * extern void* sbrk(size_t); - */ -/*#define HAS_SBRK_PROTO /**/ - -/* HAS_SEM: - * This symbol, if defined, indicates that the entire sem*(2) library is - * supported. - */ -/*#define HAS_SEM /**/ - -/* HAS_SCALBNL: - * This symbol, if defined, indicates that the scalbnl routine is - * available. If ilogbl is also present we can emulate frexpl. - */ -/*#define HAS_SCALBNL /**/ - -/* HAS_SENDMSG: - * This symbol, if defined, indicates that the sendmsg routine is - * available to send structured socket messages. - */ -/*#define HAS_SENDMSG /**/ - -/* HAS_SETGRENT: - * This symbol, if defined, indicates that the setgrent routine is - * available for initializing sequential access of the group database. - */ -/*#define HAS_SETGRENT /**/ - -/* HAS_SETGROUPS: - * This symbol, if defined, indicates that the setgroups() routine is - * available to set the list of process groups. If unavailable, multiple - * groups are probably not supported. - */ -/*#define HAS_SETGROUPS /**/ - -/* HAS_SETHOSTENT: - * This symbol, if defined, indicates that the sethostent() routine is - * available. - */ -/*#define HAS_SETHOSTENT /**/ - -/* HAS_SETITIMER: - * This symbol, if defined, indicates that the setitimer routine is - * available to set interval timers. - */ -/*#define HAS_SETITIMER /**/ - -/* HAS_SETNETENT: - * This symbol, if defined, indicates that the setnetent() routine is - * available. - */ -/*#define HAS_SETNETENT /**/ - -/* HAS_SETPROTOENT: - * This symbol, if defined, indicates that the setprotoent() routine is - * available. - */ -/*#define HAS_SETPROTOENT /**/ - -/* HAS_SETPGRP: - * This symbol, if defined, indicates that the setpgrp routine is - * available to set the current process group. - */ -/* USE_BSD_SETPGRP: - * This symbol, if defined, indicates that setpgrp needs two - * arguments whereas USG one needs none. See also HAS_SETPGID - * for a POSIX interface. - */ -/*#define HAS_SETPGRP /**/ -/*#define USE_BSD_SETPGRP /**/ - -/* HAS_SETPROCTITLE: - * This symbol, if defined, indicates that the setproctitle routine is - * available to set process title. - */ -/*#define HAS_SETPROCTITLE /**/ - -/* HAS_SETPWENT: - * This symbol, if defined, indicates that the setpwent routine is - * available for initializing sequential access of the passwd database. - */ -/*#define HAS_SETPWENT /**/ - -/* HAS_SETSERVENT: - * This symbol, if defined, indicates that the setservent() routine is - * available. - */ -/*#define HAS_SETSERVENT /**/ - -/* HAS_SETVBUF: - * This symbol, if defined, indicates that the setvbuf routine is - * available to change buffering on an open stdio stream. - * to a line-buffered mode. - */ -#define HAS_SETVBUF /**/ - -/* HAS_SHM: - * This symbol, if defined, indicates that the entire shm*(2) library is - * supported. - */ -/*#define HAS_SHM /**/ - -/* HAS_SIGACTION: - * This symbol, if defined, indicates that Vr4's sigaction() routine - * is available. - */ -/*#define HAS_SIGACTION /**/ - -/* HAS_SIGSETJMP: - * This variable indicates to the C program that the sigsetjmp() - * routine is available to save the calling process's registers - * and stack environment for later use by siglongjmp(), and - * to optionally save the process's signal mask. See - * Sigjmp_buf, Sigsetjmp, and Siglongjmp. - */ -/* Sigjmp_buf: - * This is the buffer type to be used with Sigsetjmp and Siglongjmp. - */ -/* Sigsetjmp: - * This macro is used in the same way as sigsetjmp(), but will invoke - * traditional setjmp() if sigsetjmp isn't available. - * See HAS_SIGSETJMP. - */ -/* Siglongjmp: - * This macro is used in the same way as siglongjmp(), but will invoke - * traditional longjmp() if siglongjmp isn't available. - * See HAS_SIGSETJMP. - */ -/*#define HAS_SIGSETJMP /**/ -#ifdef HAS_SIGSETJMP -#define Sigjmp_buf sigjmp_buf -#define Sigsetjmp(buf,save_mask) sigsetjmp((buf),(save_mask)) -#define Siglongjmp(buf,retval) siglongjmp((buf),(retval)) -#else -#define Sigjmp_buf jmp_buf -#define Sigsetjmp(buf,save_mask) setjmp((buf)) -#define Siglongjmp(buf,retval) longjmp((buf),(retval)) -#endif - -/* HAS_STATIC_INLINE: - * This symbol, if defined, indicates that the C compiler supports - * C99-style static inline. That is, the function can't be called - * from another translation unit. - */ -/* PERL_STATIC_INLINE: - * This symbol gives the best-guess incantation to use for static - * inline functions. If HAS_STATIC_INLINE is defined, this will - * give C99-style inline. If HAS_STATIC_INLINE is not defined, - * this will give a plain 'static'. It will always be defined - * to something that gives static linkage. - * Possibilities include - * static inline (c99) - * static __inline__ (gcc -ansi) - * static __inline (MSVC) - * static _inline (older MSVC) - * static (c89 compilers) - */ -/*#define HAS_STATIC_INLINE / **/ -#define PERL_STATIC_INLINE static /**/ - -/* HAS_SOCKET: - * This symbol, if defined, indicates that the BSD socket interface is - * supported. - */ -/* HAS_SOCKETPAIR: - * This symbol, if defined, indicates that the BSD socketpair() call is - * supported. - */ -#define HAS_SOCKET /**/ -/*#define HAS_SOCKETPAIR /**/ - -/* HAS_SOCKS5_INIT: - * This symbol, if defined, indicates that the socks5_init routine is - * available to initialize SOCKS 5. - */ -/*#define HAS_SOCKS5_INIT /**/ - -/* HAS_SQRTL: - * This symbol, if defined, indicates that the sqrtl routine is - * available to do long double square roots. - */ -/*#define HAS_SQRTL /**/ - -/* USE_STAT_BLOCKS: - * This symbol is defined if this system has a stat structure declaring - * st_blksize and st_blocks. - */ -#ifndef USE_STAT_BLOCKS -/*#define USE_STAT_BLOCKS /**/ -#endif - -/* HAS_STRUCT_STATFS_F_FLAGS: - * This symbol, if defined, indicates that the struct statfs - * does have the f_flags member containing the mount flags of - * the filesystem containing the file. - * This kind of struct statfs is coming from (BSD 4.3), - * not from (SYSV). Older BSDs (like Ultrix) do not - * have statfs() and struct statfs, they have ustat() and getmnt() - * with struct ustat and struct fs_data. - */ -/*#define HAS_STRUCT_STATFS_F_FLAGS /**/ - -/* HAS_STRUCT_STATFS: - * This symbol, if defined, indicates that the struct statfs - * to do statfs() is supported. - */ -/*#define HAS_STRUCT_STATFS /**/ - -/* HAS_FSTATVFS: - * This symbol, if defined, indicates that the fstatvfs routine is - * available to stat filesystems by file descriptors. - */ -/*#define HAS_FSTATVFS /**/ - -/* USE_STDIO_PTR: - * This symbol is defined if the _ptr and _cnt fields (or similar) - * of the stdio FILE structure can be used to access the stdio buffer - * for a file handle. If this is defined, then the FILE_ptr(fp) - * and FILE_cnt(fp) macros will also be defined and should be used - * to access these fields. - */ -/* FILE_ptr: - * This macro is used to access the _ptr field (or equivalent) of the - * FILE structure pointed to by its argument. This macro will always be - * defined if USE_STDIO_PTR is defined. - */ -/* STDIO_PTR_LVALUE: - * This symbol is defined if the FILE_ptr macro can be used as an - * lvalue. - */ -/* FILE_cnt: - * This macro is used to access the _cnt field (or equivalent) of the - * FILE structure pointed to by its argument. This macro will always be - * defined if USE_STDIO_PTR is defined. - */ -/* STDIO_CNT_LVALUE: - * This symbol is defined if the FILE_cnt macro can be used as an - * lvalue. - */ -/* STDIO_PTR_LVAL_SETS_CNT: - * This symbol is defined if using the FILE_ptr macro as an lvalue - * to increase the pointer by n has the side effect of decreasing the - * value of File_cnt(fp) by n. - */ -/* STDIO_PTR_LVAL_NOCHANGE_CNT: - * This symbol is defined if using the FILE_ptr macro as an lvalue - * to increase the pointer by n leaves File_cnt(fp) unchanged. - */ -/*#define USE_STDIO_PTR /**/ -#ifdef USE_STDIO_PTR -#define FILE_ptr(fp) ((fp)->_ptr) -/*#define STDIO_PTR_LVALUE /**/ -#define FILE_cnt(fp) ((fp)->_cnt) -/*#define STDIO_CNT_LVALUE /**/ -/*#define STDIO_PTR_LVAL_SETS_CNT /**/ -/*#define STDIO_PTR_LVAL_NOCHANGE_CNT /**/ -#endif - -/* USE_STDIO_BASE: - * This symbol is defined if the _base field (or similar) of the - * stdio FILE structure can be used to access the stdio buffer for - * a file handle. If this is defined, then the FILE_base(fp) macro - * will also be defined and should be used to access this field. - * Also, the FILE_bufsiz(fp) macro will be defined and should be used - * to determine the number of bytes in the buffer. USE_STDIO_BASE - * will never be defined unless USE_STDIO_PTR is. - */ -/* FILE_base: - * This macro is used to access the _base field (or equivalent) of the - * FILE structure pointed to by its argument. This macro will always be - * defined if USE_STDIO_BASE is defined. - */ -/* FILE_bufsiz: - * This macro is used to determine the number of bytes in the I/O - * buffer pointed to by _base field (or equivalent) of the FILE - * structure pointed to its argument. This macro will always be defined - * if USE_STDIO_BASE is defined. - */ -/*#define USE_STDIO_BASE /**/ -#ifdef USE_STDIO_BASE -#define FILE_base(fp) ((fp)->_base) -#define FILE_bufsiz(fp) ((fp)->_cnt + (fp)->_ptr - (fp)->_base) -#endif - -/* HAS_SYS_ERRLIST: - * This symbol, if defined, indicates that the sys_errlist array is - * available to translate error numbers to strings. The extern int - * sys_nerr gives the size of that table. - */ -#define HAS_SYS_ERRLIST /**/ - -/* HAS_STRTOLD: - * This symbol, if defined, indicates that the strtold routine is - * available to convert strings to long doubles. - */ -/*#define HAS_STRTOLD /**/ - -/* HAS_STRTOLL: - * This symbol, if defined, indicates that the strtoll routine is - * available to convert strings to long longs. - */ -/*#define HAS_STRTOLL /**/ - -/* HAS_STRTOQ: - * This symbol, if defined, indicates that the strtoq routine is - * available to convert strings to long longs (quads). - */ -/*#define HAS_STRTOQ /**/ - -/* HAS_STRTOUL: - * This symbol, if defined, indicates that the strtoul routine is - * available to provide conversion of strings to unsigned long. - */ -#define HAS_STRTOUL /**/ - -/* HAS_STRTOULL: - * This symbol, if defined, indicates that the strtoull routine is - * available to convert strings to unsigned long longs. - */ -/*#define HAS_STRTOULL /**/ - -/* HAS_STRTOUQ: - * This symbol, if defined, indicates that the strtouq routine is - * available to convert strings to unsigned long longs (quads). - */ -/*#define HAS_STRTOUQ /**/ - -/* HAS_TELLDIR_PROTO: - * This symbol, if defined, indicates that the system provides - * a prototype for the telldir() function. Otherwise, it is up - * to the program to supply one. A good guess is - * extern long telldir(DIR*); - */ -#define HAS_TELLDIR_PROTO /**/ - -/* Time_t: - * This symbol holds the type returned by time(). It can be long, - * or time_t on BSD sites (in which case should be - * included). - */ -#define Time_t time_t /* Time type */ - -/* HAS_TIMES: - * This symbol, if defined, indicates that the times() routine exists. - * Note that this became obsolete on some systems (SUNOS), which now - * use getrusage(). It may be necessary to include . - */ -/*#define HAS_TIMES /**/ - -/* HAS_UALARM: - * This symbol, if defined, indicates that the ualarm routine is - * available to do alarms with microsecond granularity. - */ -/*#define HAS_UALARM /**/ - -/* HAS_UNION_SEMUN: - * This symbol, if defined, indicates that the union semun is - * defined by including . If not, the user code - * probably needs to define it as: - * union semun { - * int val; - * struct semid_ds *buf; - * unsigned short *array; - * } - */ -/* USE_SEMCTL_SEMUN: - * This symbol, if defined, indicates that union semun is - * used for semctl IPC_STAT. - */ -/* USE_SEMCTL_SEMID_DS: - * This symbol, if defined, indicates that struct semid_ds * is - * used for semctl IPC_STAT. - */ -#define HAS_UNION_SEMUN /**/ -/*#define USE_SEMCTL_SEMUN /**/ -/*#define USE_SEMCTL_SEMID_DS /**/ - -/* HAS_USTAT: - * This symbol, if defined, indicates that the ustat system call is - * available to query file system statistics by dev_t. - */ -/*#define HAS_USTAT /**/ - -/* HAS_VFORK: - * This symbol, if defined, indicates that vfork() exists. - */ -/*#define HAS_VFORK /**/ - -/* Signal_t: - * This symbol's value is either "void" or "int", corresponding to the - * appropriate return type of a signal handler. Thus, you can declare - * a signal handler using "Signal_t (*handler)()", and define the - * handler using "Signal_t handler(sig)". - */ -#define Signal_t void /* Signal handler's return type */ - -/* HAS_WRITEV: - * This symbol, if defined, indicates that the writev routine is - * available to do scatter writes. - */ -/*#define HAS_WRITEV /**/ - -/* USE_DYNAMIC_LOADING: - * This symbol, if defined, indicates that dynamic loading of - * some sort is available. - */ -#define USE_DYNAMIC_LOADING /**/ - -/* DOUBLESIZE: - * This symbol contains the size of a double, so that the C preprocessor - * can make decisions based on it. - */ -#define DOUBLESIZE 8 /**/ - -/* DOUBLE_STYLE_IEEE - * This symbol, if defined, indicates that the double is - * the 64-bit IEEE 754. - */ -/* DOUBLE_HAS_INF - * This symbol, if defined, indicates that the double has - * the infinity. - */ -/* DOUBLE_HAS_NAN - * This symbol, if defined, indicates that the double has - * the not-a-number. - */ -/* DOUBLE_HAS_NEGATIVE_ZERO - * This symbol, if defined, indicates that the double has - * the negative_zero. - */ -/* DOUBLE_HAS_SUBNORMALS - * This symbol, if defined, indicates that the double has - * the subnormals (denormals). - */ -#define DOUBLE_STYLE_IEEE -#define DOUBLE_HAS_INF -#define DOUBLE_HAS_INF -#define DOUBLE_HAS_NEGATIVE_ZERO -#define DOUBLE_HAS_SUBNORMALS - -/* DOUBLEINFBYTES: - * This symbol, if defined, is a comma-separated list of - * hexadecimal bytes for the double precision infinity. - */ -/* DOUBLENANBYTES: - * This symbol, if defined, is a comma-separated list of - * hexadecimal bytes (0xHH) for the double precision not-a-number. - */ -/* LONGDBLINFBYTES: - * This symbol, if defined, is a comma-separated list of - * hexadecimal bytes for the long double precision infinity. - */ -/* LONGDBLNANBYTES: - * This symbol, if defined, is a comma-separated list of - * hexadecimal bytes (0xHH) for the long double precision not-a-number. - */ -#define DOUBLEINFBYTES 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf0, 0x7f /**/ -#define DOUBLENANBYTES 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf8, 0x7f /**/ -#define LONGDBLINFBYTES 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0x7f /**/ -#define LONGDBLNANBYTES 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0xff, 0x7f /**/ - -/* DOUBLEMANTBITS: - * This symbol, if defined, tells how many mantissa bits - * there are in double precision floating point format. - * Note that this is usually DBL_MANT_DIG minus one, since - * with the standard IEEE 754 formats DBL_MANT_DIG includes - * the implicit bit, which doesn't really exist. - */ -#define DOUBLEMANTBITS 52 - -/* LONGDBLMANTBITS: - * This symbol, if defined, tells how many mantissa bits - * there are in long double precision floating point format. - * Note that this can be LDBL_MANT_DIG minus one, - * since LDBL_MANT_DIG can include the IEEE 754 implicit bit. - * The common x86-style 80-bit long double does not have - * an implicit bit. - */ -#define LONGDBLMANTBITS 52 - -/* LONG_DOUBLE_STYLE_IEEE - * This symbol, if defined, indicates that the long double - * is any of the IEEE 754 style long doubles: - * LONG_DOUBLE_STYLE_IEEE_STD, LONG_DOUBLE_STYLE_IEEE_EXTENDED, - * LONG_DOUBLE_STYLE_IEEE_DOUBLEDOUBLE. - */ -/* LONG_DOUBLE_STYLE_IEEE_EXTENDED - * This symbol, if defined, indicates that the long double is - * the 80-bit IEEE 754. Note that despite the 'extended' this - * is less than the 'std', since this is an extension of - * the double precision. - */ -#define LONG_DOUBLE_STYLE_IEEE -#define LONG_DOUBLE_STYLE_IEEE_EXTENDED - -/* EBCDIC: - * This symbol, if defined, indicates that this system uses - * EBCDIC encoding. - */ -/*#define EBCDIC /**/ - -/* FFLUSH_NULL: - * This symbol, if defined, tells that fflush(NULL) does flush - * all pending stdio output. - */ -/* FFLUSH_ALL: - * This symbol, if defined, tells that to flush - * all pending stdio output one must loop through all - * the stdio file handles stored in an array and fflush them. - * Note that if fflushNULL is defined, fflushall will not - * even be probed for and will be left undefined. - */ -#define FFLUSH_NULL /**/ -/*#define FFLUSH_ALL /**/ - -/* Fpos_t: - * This symbol holds the type used to declare file positions in libc. - * It can be fpos_t, long, uint, etc... It may be necessary to include - * to get any typedef'ed information. - */ -#define Fpos_t fpos_t /* File position type */ - -/* Gid_t_f: - * This symbol defines the format string used for printing a Gid_t. - */ -#define Gid_t_f "ld" /**/ - -/* Gid_t_sign: - * This symbol holds the signedess of a Gid_t. - * 1 for unsigned, -1 for signed. - */ -#define Gid_t_sign -1 /* GID sign */ - -/* Gid_t_size: - * This symbol holds the size of a Gid_t in bytes. - */ -#define Gid_t_size 4 /* GID size */ - -/* Gid_t: - * This symbol holds the return type of getgid() and the type of - * argument to setrgid() and related functions. Typically, - * it is the type of group ids in the kernel. It can be int, ushort, - * gid_t, etc... It may be necessary to include to get - * any typedef'ed information. - */ -#define Gid_t gid_t /* Type for getgid(), etc... */ - -/* Groups_t: - * This symbol holds the type used for the second argument to - * getgroups() and setgroups(). Usually, this is the same as - * gidtype (gid_t) , but sometimes it isn't. - * It can be int, ushort, gid_t, etc... - * It may be necessary to include to get any - * typedef'ed information. This is only required if you have - * getgroups() or setgroups().. - */ -#if defined(HAS_GETGROUPS) || defined(HAS_SETGROUPS) -#define Groups_t gid_t /* Type for 2nd arg to [sg]etgroups() */ -#endif - -/* DB_Prefix_t: - * This symbol contains the type of the prefix structure element - * in the header file. In older versions of DB, it was - * int, while in newer ones it is u_int32_t. - */ -/* DB_Hash_t: - * This symbol contains the type of the prefix structure element - * in the header file. In older versions of DB, it was - * int, while in newer ones it is size_t. - */ -/* DB_VERSION_MAJOR_CFG: - * This symbol, if defined, defines the major version number of - * Berkeley DB found in the header when Perl was configured. - */ -/* DB_VERSION_MINOR_CFG: - * This symbol, if defined, defines the minor version number of - * Berkeley DB found in the header when Perl was configured. - * For DB version 1 this is always 0. - */ -/* DB_VERSION_PATCH_CFG: - * This symbol, if defined, defines the patch version number of - * Berkeley DB found in the header when Perl was configured. - * For DB version 1 this is always 0. - */ -#define DB_Hash_t int /**/ -#define DB_Prefix_t int /**/ -#define DB_VERSION_MAJOR_CFG undef /**/ -#define DB_VERSION_MINOR_CFG undef /**/ -#define DB_VERSION_PATCH_CFG undef /**/ - -/* I_GRP: - * This symbol, if defined, indicates to the C program that it should - * include . - */ -/* GRPASSWD: - * This symbol, if defined, indicates to the C program that struct group - * in contains gr_passwd. - */ -/*#define I_GRP /**/ -/*#define GRPASSWD /**/ - -/* I_IEEEFP: - * This symbol, if defined, indicates that exists and - * should be included. - */ -/*#define I_IEEEFP /**/ - -/* I_INTTYPES: - * This symbol, if defined, indicates to the C program that it should - * include . - */ -/*#define I_INTTYPES /**/ - -/* I_LIBUTIL: - * This symbol, if defined, indicates that exists and - * should be included. - */ -/*#define I_LIBUTIL /**/ - -/* I_MACH_CTHREADS: - * This symbol, if defined, indicates to the C program that it should - * include . - */ -/*#define I_MACH_CTHREADS /**/ - -/* I_MNTENT: - * This symbol, if defined, indicates that exists and - * should be included. - */ -/*#define I_MNTENT /**/ - -/* I_NETDB: - * This symbol, if defined, indicates that exists and - * should be included. - */ -#define I_NETDB /**/ - -/* I_NETINET_TCP: - * This symbol, if defined, indicates to the C program that it should - * include . - */ -/*#define I_NETINET_TCP /**/ - -/* I_POLL: - * This symbol, if defined, indicates that exists and - * should be included. - */ -/*#define I_POLL /**/ - -/* I_PROT: - * This symbol, if defined, indicates that exists and - * should be included. - */ -/*#define I_PROT /**/ - -/* I_PTHREAD: - * This symbol, if defined, indicates to the C program that it should - * include . - */ -/*#define I_PTHREAD /**/ - -/* I_PWD: - * This symbol, if defined, indicates to the C program that it should - * include . - */ -/* PWQUOTA: - * This symbol, if defined, indicates to the C program that struct passwd - * contains pw_quota. - */ -/* PWAGE: - * This symbol, if defined, indicates to the C program that struct passwd - * contains pw_age. - */ -/* PWCHANGE: - * This symbol, if defined, indicates to the C program that struct passwd - * contains pw_change. - */ -/* PWCLASS: - * This symbol, if defined, indicates to the C program that struct passwd - * contains pw_class. - */ -/* PWEXPIRE: - * This symbol, if defined, indicates to the C program that struct passwd - * contains pw_expire. - */ -/* PWCOMMENT: - * This symbol, if defined, indicates to the C program that struct passwd - * contains pw_comment. - */ -/* PWGECOS: - * This symbol, if defined, indicates to the C program that struct passwd - * contains pw_gecos. - */ -/* PWPASSWD: - * This symbol, if defined, indicates to the C program that struct passwd - * contains pw_passwd. - */ -/*#define I_PWD /**/ -/*#define PWQUOTA /**/ -/*#define PWAGE /**/ -/*#define PWCHANGE /**/ -/*#define PWCLASS /**/ -/*#define PWEXPIRE /**/ -/*#define PWCOMMENT /**/ -/*#define PWGECOS /**/ -/*#define PWPASSWD /**/ - -/* I_SHADOW: - * This symbol, if defined, indicates that exists and - * should be included. - */ -/*#define I_SHADOW /**/ - -/* I_SOCKS: - * This symbol, if defined, indicates that exists and - * should be included. - */ -/*#define I_SOCKS /**/ - -/* I_SUNMATH: - * This symbol, if defined, indicates that exists and - * should be included. - */ -/*#define I_SUNMATH /**/ - -/* I_SYSLOG: - * This symbol, if defined, indicates that exists and - * should be included. - */ -/*#define I_SYSLOG /**/ - -/* I_SYSMODE: - * This symbol, if defined, indicates that exists and - * should be included. - */ -/*#define I_SYSMODE /**/ - -/* I_SYS_MOUNT: - * This symbol, if defined, indicates that exists and - * should be included. - */ -/*#define I_SYS_MOUNT /**/ - -/* I_SYS_STATFS: - * This symbol, if defined, indicates that exists. - */ -/*#define I_SYS_STATFS /**/ - -/* I_SYS_STATVFS: - * This symbol, if defined, indicates that exists and - * should be included. - */ -/*#define I_SYS_STATVFS /**/ - -/* I_SYSUIO: - * This symbol, if defined, indicates that exists and - * should be included. - */ -/*#define I_SYSUIO /**/ - -/* I_SYSUTSNAME: - * This symbol, if defined, indicates that exists and - * should be included. - */ -#define I_SYSUTSNAME /**/ - -/* I_SYS_VFS: - * This symbol, if defined, indicates that exists and - * should be included. - */ -/*#define I_SYS_VFS /**/ - -/* I_TIME: - * This symbol, if defined, indicates to the C program that it should - * include . - */ -/* I_SYS_TIME: - * This symbol, if defined, indicates to the C program that it should - * include . - */ -/* I_SYS_TIME_KERNEL: - * This symbol, if defined, indicates to the C program that it should - * include with KERNEL defined. - */ -#define I_TIME /**/ -/*#define I_SYS_TIME /**/ -/*#define I_SYS_TIME_KERNEL /**/ - -/* I_USTAT: - * This symbol, if defined, indicates that exists and - * should be included. - */ -/*#define I_USTAT /**/ - -/* PERL_INC_VERSION_LIST: - * This variable specifies the list of subdirectories in over - * which perl.c:incpush() and lib/lib.pm will automatically - * search when adding directories to @INC, in a format suitable - * for a C initialization string. See the inc_version_list entry - * in Porting/Glossary for more details. - */ -#define PERL_INC_VERSION_LIST 0 /**/ - -/* INSTALL_USR_BIN_PERL: - * This symbol, if defined, indicates that Perl is to be installed - * also as /usr/bin/perl. - */ -/*#define INSTALL_USR_BIN_PERL /**/ - -/* PERL_PRIfldbl: - * This symbol, if defined, contains the string used by stdio to - * format long doubles (format 'f') for output. - */ -/* PERL_PRIgldbl: - * This symbol, if defined, contains the string used by stdio to - * format long doubles (format 'g') for output. - */ -/* PERL_PRIeldbl: - * This symbol, if defined, contains the string used by stdio to - * format long doubles (format 'e') for output. - */ -/* PERL_SCNfldbl: - * This symbol, if defined, contains the string used by stdio to - * format long doubles (format 'f') for input. - */ -/*#define PERL_PRIfldbl "f" /**/ -/*#define PERL_PRIgldbl "g" /**/ -/*#define PERL_PRIeldbl "e" /**/ -/*#define PERL_SCNfldbl undef /**/ - -#$d_PRIfldbl PERL_PRIfldbl $sPRIfldbl /**/ -#$d_PRIgldbl PERL_PRIgldbl $sPRIgldbl /**/ -#$d_PRIeldbl PERL_PRIeldbl $sPRIeldbl /**/ - -/*#$d_SCNfldbl PERL_SCNfldbl $sSCNfldbl /**/ - -/* Off_t: - * This symbol holds the type used to declare offsets in the kernel. - * It can be int, long, off_t, etc... It may be necessary to include - * to get any typedef'ed information. - */ -/* LSEEKSIZE: - * This symbol holds the number of bytes used by the Off_t. - */ -/* Off_t_size: - * This symbol holds the number of bytes used by the Off_t. - */ -#define Off_t off_t /* type */ -#define LSEEKSIZE 4 /* size */ -#define Off_t_size 4 /* size */ - -/* Free_t: - * This variable contains the return type of free(). It is usually - * void, but occasionally int. - */ -/* Malloc_t: - * This symbol is the type of pointer returned by malloc and realloc. - */ -#define Malloc_t void * /**/ -#define Free_t void /**/ - -/* MYMALLOC: - * This symbol, if defined, indicates that we're using our own malloc. - */ -/*#define MYMALLOC /**/ - -/* Mode_t: - * This symbol holds the type used to declare file modes - * for systems calls. It is usually mode_t, but may be - * int or unsigned short. It may be necessary to include - * to get any typedef'ed information. - */ -#define Mode_t mode_t /* file mode parameter for system calls */ - -/* VAL_O_NONBLOCK: - * This symbol is to be used during open() or fcntl(F_SETFL) to turn on - * non-blocking I/O for the file descriptor. Note that there is no way - * back, i.e. you cannot turn it blocking again this way. If you wish to - * alternatively switch between blocking and non-blocking, use the - * ioctl(FIOSNBIO) call instead, but that is not supported by all devices. - */ -/* VAL_EAGAIN: - * This symbol holds the errno error code set by read() when no data was - * present on the non-blocking file descriptor. - */ -/* RD_NODATA: - * This symbol holds the return code from read() when no data is present - * on the non-blocking file descriptor. Be careful! If EOF_NONBLOCK is - * not defined, then you can't distinguish between no data and EOF by - * issuing a read(). You'll have to find another way to tell for sure! - */ -/* EOF_NONBLOCK: - * This symbol, if defined, indicates to the C program that a read() on - * a non-blocking file descriptor will return 0 on EOF, and not the value - * held in RD_NODATA (-1 usually, in that case!). - */ -#define VAL_O_NONBLOCK O_NONBLOCK -#define VAL_EAGAIN EAGAIN -#define RD_NODATA -1 -#define EOF_NONBLOCK - -/* NEED_VA_COPY: - * This symbol, if defined, indicates that the system stores - * the variable argument list datatype, va_list, in a format - * that cannot be copied by simple assignment, so that some - * other means must be used when copying is required. - * As such systems vary in their provision (or non-provision) - * of copying mechanisms, handy.h defines a platform- - * independent macro, Perl_va_copy(src, dst), to do the job. - */ -/*#define NEED_VA_COPY /**/ - -/* Netdb_host_t: - * This symbol holds the type used for the 1st argument - * to gethostbyaddr(). - */ -/* Netdb_hlen_t: - * This symbol holds the type used for the 2nd argument - * to gethostbyaddr(). - */ -/* Netdb_name_t: - * This symbol holds the type used for the argument to - * gethostbyname(). - */ -/* Netdb_net_t: - * This symbol holds the type used for the 1st argument to - * getnetbyaddr(). - */ -#define Netdb_host_t char * /**/ -#define Netdb_hlen_t int /**/ -#define Netdb_name_t char * /**/ -#define Netdb_net_t long /**/ - -/* PERL_OTHERLIBDIRS: - * This variable contains a colon-separated set of paths for the perl - * binary to search for additional library files or modules. - * These directories will be tacked to the end of @INC. - * Perl will automatically search below each path for version- - * and architecture-specific directories. See PERL_INC_VERSION_LIST - * for more details. - */ -/*#define PERL_OTHERLIBDIRS "undef" /**/ - -/* IVTYPE: - * This symbol defines the C type used for Perl's IV. - */ -/* UVTYPE: - * This symbol defines the C type used for Perl's UV. - */ -/* I8TYPE: - * This symbol defines the C type used for Perl's I8. - */ -/* U8TYPE: - * This symbol defines the C type used for Perl's U8. - */ -/* I16TYPE: - * This symbol defines the C type used for Perl's I16. - */ -/* U16TYPE: - * This symbol defines the C type used for Perl's U16. - */ -/* I32TYPE: - * This symbol defines the C type used for Perl's I32. - */ -/* U32TYPE: - * This symbol defines the C type used for Perl's U32. - */ -/* I64TYPE: - * This symbol defines the C type used for Perl's I64. - */ -/* U64TYPE: - * This symbol defines the C type used for Perl's U64. - */ -/* NVTYPE: - * This symbol defines the C type used for Perl's NV. - */ -/* IVSIZE: - * This symbol contains the sizeof(IV). - */ -/* UVSIZE: - * This symbol contains the sizeof(UV). - */ -/* I8SIZE: - * This symbol contains the sizeof(I8). - */ -/* U8SIZE: - * This symbol contains the sizeof(U8). - */ -/* I16SIZE: - * This symbol contains the sizeof(I16). - */ -/* U16SIZE: - * This symbol contains the sizeof(U16). - */ -/* I32SIZE: - * This symbol contains the sizeof(I32). - */ -/* U32SIZE: - * This symbol contains the sizeof(U32). - */ -/* I64SIZE: - * This symbol contains the sizeof(I64). - */ -/* U64SIZE: - * This symbol contains the sizeof(U64). - */ -/* NVSIZE: - * This symbol contains the sizeof(NV). - */ -/* NV_PRESERVES_UV: - * This symbol, if defined, indicates that a variable of type NVTYPE - * can preserve all the bits of a variable of type UVTYPE. - */ -/* NV_PRESERVES_UV_BITS: - * This symbol contains the number of bits a variable of type NVTYPE - * can preserve of a variable of type UVTYPE. - */ -/* NV_ZERO_IS_ALLBITS_ZERO: - * This symbol, if defined, indicates that a variable of type NVTYPE - * stores 0.0 in memory as all bits zero. - */ -#define IVTYPE long /**/ -#define UVTYPE unsigned long /**/ -#define I8TYPE char /**/ -#define U8TYPE unsigned char /**/ -#define I16TYPE short /**/ -#define U16TYPE unsigned short /**/ -#define I32TYPE long /**/ -#define U32TYPE unsigned long /**/ -#ifdef HAS_QUAD -#define I64TYPE __int64 /**/ -#define U64TYPE unsigned __int64 /**/ -#endif -#define NVTYPE double /**/ -#define IVSIZE 4 /**/ -#define UVSIZE 4 /**/ -#define I8SIZE 1 /**/ -#define U8SIZE 1 /**/ -#define I16SIZE 2 /**/ -#define U16SIZE 2 /**/ -#define I32SIZE 4 /**/ -#define U32SIZE 4 /**/ -#ifdef HAS_QUAD -#define I64SIZE 8 /**/ -#define U64SIZE 8 /**/ -#endif -#define NVSIZE 8 /**/ -#define NV_PRESERVES_UV -#define NV_PRESERVES_UV_BITS undef -#undef NV_ZERO_IS_ALLBITS_ZERO - -/* IVdf: - * This symbol defines the format string used for printing a Perl IV - * as a signed decimal integer. - */ -/* UVuf: - * This symbol defines the format string used for printing a Perl UV - * as an unsigned decimal integer. - */ -/* UVof: - * This symbol defines the format string used for printing a Perl UV - * as an unsigned octal integer. - */ -/* UVxf: - * This symbol defines the format string used for printing a Perl UV - * as an unsigned hexadecimal integer in lowercase abcdef. - */ -/* UVXf: - * This symbol defines the format string used for printing a Perl UV - * as an unsigned hexadecimal integer in uppercase ABCDEF. - */ -/* NVef: - * This symbol defines the format string used for printing a Perl NV - * using %e-ish floating point format. - */ -/* NVff: - * This symbol defines the format string used for printing a Perl NV - * using %f-ish floating point format. - */ -/* NVgf: - * This symbol defines the format string used for printing a Perl NV - * using %g-ish floating point format. - */ -#define IVdf "ld" /**/ -#define UVuf "lu" /**/ -#define UVof "lo" /**/ -#define UVxf "lx" /**/ -#define UVXf "lX" /**/ -#define NVef "e" /**/ -#define NVff "f" /**/ -#define NVgf "g" /**/ - -/* Pid_t: - * This symbol holds the type used to declare process ids in the kernel. - * It can be int, uint, pid_t, etc... It may be necessary to include - * to get any typedef'ed information. - */ -#define Pid_t int /* PID type */ - -/* PRIVLIB: - * This symbol contains the name of the private library for this package. - * The library is private in the sense that it needn't be in anyone's - * execution path, but it should be accessible by the world. The program - * should be prepared to do ~ expansion. - */ -/* PRIVLIB_EXP: - * This symbol contains the ~name expanded version of PRIVLIB, to be used - * in programs that are not prepared to deal with ~ expansion at run-time. - */ -#define PRIVLIB "sys:\\perl\\lib" /**/ -#define PRIVLIB_EXP (fnNwGetEnvironmentStr("PRIVLIB", PRIVLIB)) /**/ - -/* PTRSIZE: - * This symbol contains the size of a pointer, so that the C preprocessor - * can make decisions based on it. It will be sizeof(void *) if - * the compiler supports (void *); otherwise it will be - * sizeof(char *). - */ -#define PTRSIZE 4 /**/ - -/* Drand01: - * This macro is to be used to generate uniformly distributed - * random numbers over the range [0., 1.[. You may have to supply - * an 'extern double drand48();' in your program since SunOS 4.1.3 - * doesn't provide you with anything relevant in its headers. - * See HAS_DRAND48_PROTO. - */ -/* Rand_seed_t: - * This symbol defines the type of the argument of the - * random seed function. - */ -/* seedDrand01: - * This symbol defines the macro to be used in seeding the - * random number generator (see Drand01). - */ -/* RANDBITS: - * This symbol indicates how many bits are produced by the - * function used to generate normalized random numbers. - * Values include 15, 16, 31, and 48. - */ -#define Drand01() (rand()/(double)((unsigned)1< to get any typedef'ed information. - */ -#define Size_t size_t /* length parameter for string functions */ - -/* Sock_size_t: - * This symbol holds the type used for the size argument of - * various socket calls (just the base type, not the pointer-to). - */ -#define Sock_size_t int /**/ - -/* SSize_t: - * This symbol holds the type used by functions that return - * a count of bytes or an error condition. It must be a signed type. - * It is usually ssize_t, but may be long or int, etc. - * It may be necessary to include or - * to get any typedef'ed information. - * We will pick a type such that sizeof(SSize_t) == sizeof(Size_t). - */ -#define SSize_t int /* signed count of bytes */ - -/* STARTPERL: - * This variable contains the string to put in front of a perl - * script to make sure (one hopes) that it runs with perl and not - * some shell. - */ -#define STARTPERL "#!perl" /**/ - -/* STDCHAR: - * This symbol is defined to be the type of char used in stdio.h. - * It has the values "unsigned char" or "char". - */ -#define STDCHAR char /**/ - -/* HAS_STDIO_STREAM_ARRAY: - * This symbol, if defined, tells that there is an array - * holding the stdio streams. - */ -/* STDIO_STREAM_ARRAY: - * This symbol tells the name of the array holding the stdio streams. - * Usual values include _iob, __iob, and __sF. - */ -/*#define HAS_STDIO_STREAM_ARRAY /**/ -#define STDIO_STREAM_ARRAY - -/* Uid_t_f: - * This symbol defines the format string used for printing a Uid_t. - */ -#define Uid_t_f "ld" /**/ - -/* Uid_t_sign: - * This symbol holds the signedess of a Uid_t. - * 1 for unsigned, -1 for signed. - */ -#define Uid_t_sign -1 /* UID sign */ - -/* Uid_t_size: - * This symbol holds the size of a Uid_t in bytes. - */ -#define Uid_t_size 4 /* UID size */ - -/* Uid_t: - * This symbol holds the type used to declare user ids in the kernel. - * It can be int, ushort, uid_t, etc... It may be necessary to include - * to get any typedef'ed information. - */ -#define Uid_t uid_t /* UID type */ - -/* USE_64_BIT_INT: - * This symbol, if defined, indicates that 64-bit integers should - * be used when available. If not defined, the native integers - * will be employed (be they 32 or 64 bits). The minimal possible - * 64-bitness is used, just enough to get 64-bit integers into Perl. - * This may mean using for example "long longs", while your memory - * may still be limited to 2 gigabytes. - */ -/* USE_64_BIT_ALL: - * This symbol, if defined, indicates that 64-bit integers should - * be used when available. If not defined, the native integers - * will be used (be they 32 or 64 bits). The maximal possible - * 64-bitness is employed: LP64 or ILP64, meaning that you will - * be able to use more than 2 gigabytes of memory. This mode is - * even more binary incompatible than USE_64_BIT_INT. You may not - * be able to run the resulting executable in a 32-bit CPU at all or - * you may need at least to reboot your OS to 64-bit mode. - */ -#ifndef USE_64_BIT_INT -/*#define USE_64_BIT_INT /**/ -#endif - -#ifndef USE_64_BIT_ALL -/*#define USE_64_BIT_ALL /**/ -#endif - -/* USE_FAST_STDIO: - * This symbol, if defined, indicates that Perl should - * be built to use 'fast stdio'. - * Defaults to define in Perls 5.8 and earlier, to undef later. - */ -#ifndef USE_FAST_STDIO -/*#define USE_FAST_STDIO / **/ -#endif - -/* USE_LARGE_FILES: - * This symbol, if defined, indicates that large file support - * should be used when available. - */ -#ifndef USE_LARGE_FILES -/*#define USE_LARGE_FILES /**/ -#endif - -/* USE_LONG_DOUBLE: - * This symbol, if defined, indicates that long doubles should - * be used when available. - */ -#ifndef USE_LONG_DOUBLE -/*#define USE_LONG_DOUBLE /**/ -#endif - -/* USE_MORE_BITS: - * This symbol, if defined, indicates that 64-bit interfaces and - * long doubles should be used when available. - */ -#ifndef USE_MORE_BITS -/*#define USE_MORE_BITS /**/ -#endif - -/* MULTIPLICITY: - * This symbol, if defined, indicates that Perl should - * be built to use multiplicity. - */ -#ifndef MULTIPLICITY -#define MULTIPLICITY /**/ -#endif - -/* USE_PERLIO: - * This symbol, if defined, indicates that the PerlIO abstraction should - * be used throughout. If not defined, stdio should be - * used in a fully backward compatible manner. - */ -#ifndef USE_PERLIO -/*#define USE_PERLIO /**/ -#endif - -/* USE_SOCKS: - * This symbol, if defined, indicates that Perl should - * be built to use socks. - */ -#ifndef USE_SOCKS -/*#define USE_SOCKS /**/ -#endif - -/* USE_ITHREADS: - * This symbol, if defined, indicates that Perl should be built to - * use the interpreter-based threading implementation. - */ -/* OLD_PTHREADS_API: - * This symbol, if defined, indicates that Perl should - * be built to use the old draft POSIX threads API. - */ -/* USE_REENTRANT_API: - * This symbol, if defined, indicates that Perl should - * try to use the various _r versions of library functions. - * This is extremely experimental. - */ -#define USE_ITHREADS /**/ -/*#define OLD_PTHREADS_API /**/ -/*#define USE_REENTRANT_API /**/ - -/* PERL_VENDORARCH: - * If defined, this symbol contains the name of a private library. - * The library is private in the sense that it needn't be in anyone's - * execution path, but it should be accessible by the world. - * It may have a ~ on the front. - * The standard distribution will put nothing in this directory. - * Vendors who distribute perl may wish to place their own - * architecture-dependent modules and extensions in this directory with - * MakeMaker Makefile.PL INSTALLDIRS=vendor - * or equivalent. See INSTALL for details. - */ -/* PERL_VENDORARCH_EXP: - * This symbol contains the ~name expanded version of PERL_VENDORARCH, to be used - * in programs that are not prepared to deal with ~ expansion at run-time. - */ -/*#define PERL_VENDORARCH "" /**/ -/*#define PERL_VENDORARCH_EXP "" /**/ - -/* PERL_VENDORLIB_EXP: - * This symbol contains the ~name expanded version of VENDORLIB, to be used - * in programs that are not prepared to deal with ~ expansion at run-time. - */ -/* PERL_VENDORLIB_STEM: - * This define is PERL_VENDORLIB_EXP with any trailing version-specific component - * removed. The elements in inc_version_list (inc_version_list.U) can - * be tacked onto this variable to generate a list of directories to search. - */ -/*#define PERL_VENDORLIB_EXP "" /**/ -/*#define PERL_VENDORLIB_STEM "" /**/ - -/* SETUID_SCRIPTS_ARE_SECURE_NOW: - * This symbol, if defined, indicates that the bug that prevents - * setuid scripts from being secure is not present in this kernel. - */ -/* DOSUID: - * This symbol, if defined, indicates that the C program should - * check the script that it is executing for setuid/setgid bits, and - * attempt to emulate setuid/setgid on systems that have disabled - * setuid #! scripts because the kernel can't do it securely. - * It is up to the package designer to make sure that this emulation - * is done securely. Among other things, it should do an fstat on - * the script it just opened to make sure it really is a setuid/setgid - * script, it should make sure the arguments passed correspond exactly - * to the argument on the #! line, and it should not trust any - * subprocesses to which it must pass the filename rather than the - * file descriptor of the script to be executed. - */ -/*#define SETUID_SCRIPTS_ARE_SECURE_NOW /**/ -/*#define DOSUID /**/ - -/* USE_CROSS_COMPILE: - * This symbol, if defined, indicates that Perl is being cross-compiled. - */ -/* PERL_TARGETARCH: - * This symbol, if defined, indicates the target architecture - * Perl has been cross-compiled to. Undefined if not a cross-compile. - */ -#ifndef USE_CROSS_COMPILE -/*#define USE_CROSS_COMPILE /**/ -#define PERL_TARGETARCH "undef" /**/ -#endif - -/* HAS_COPYSIGNL: - * This symbol, if defined, indicates that the copysignl routine is - * available. If aintl is also present we can emulate modfl. - */ -/*#define HAS_COPYSIGNL /**/ - -/* HAS_DBMINIT_PROTO: - * This symbol, if defined, indicates that the system provides - * a prototype for the dbminit() function. Otherwise, it is up - * to the program to supply one. A good guess is - * extern int dbminit(char *); - */ -/*#define HAS_DBMINIT_PROTO /**/ - -/* HAS_FLOCK_PROTO: - * This symbol, if defined, indicates that the system provides - * a prototype for the flock() function. Otherwise, it is up - * to the program to supply one. A good guess is - * extern int flock(int, int); - */ -/*#define HAS_FLOCK_PROTO /**/ - -/* HAS_REALPATH: - * This symbol, if defined, indicates that the realpath routine is - * available to do resolve paths. - */ -/*#define HAS_REALPATH /**/ - -/* HAS_SIGPROCMASK: - * This symbol, if defined, indicates that the sigprocmask - * system call is available to examine or change the signal mask - * of the calling process. - */ -/*#define HAS_SIGPROCMASK /**/ - -/* HAS_SOCKATMARK: - * This symbol, if defined, indicates that the sockatmark routine is - * available to test whether a socket is at the out-of-band mark. - */ -/*#define HAS_SOCKATMARK /**/ - -/* HAS_SOCKATMARK_PROTO: - * This symbol, if defined, indicates that the system provides - * a prototype for the sockatmark() function. Otherwise, it is up - * to the program to supply one. A good guess is - * extern int sockatmark(int); - */ -/*#define HAS_SOCKATMARK_PROTO /**/ - -/* HAS_SETRESGID_PROTO: - * This symbol, if defined, indicates that the system provides - * a prototype for the setresgid() function. Otherwise, it is up - * to the program to supply one. Good guesses are - * extern int setresgid(uid_t ruid, uid_t euid, uid_t suid); - */ -/*#define HAS_SETRESGID_PROTO /**/ - -/* HAS_SETRESUID_PROTO: - * This symbol, if defined, indicates that the system provides - * a prototype for the setresuid() function. Otherwise, it is up - * to the program to supply one. Good guesses are - * extern int setresuid(uid_t ruid, uid_t euid, uid_t suid); - */ -/*#define HAS_SETRESUID_PROTO /**/ - -/* HAS_STRFTIME: - * This symbol, if defined, indicates that the strftime routine is - * available to do time formatting. - */ -#define HAS_STRFTIME /**/ - -/* HAS_STRLCAT - * This symbol, if defined, indicates that the strlcat routine is - * available to do string concatenation. - */ -/*#define HAS_STRLCAT /**/ - -/* HAS_STRLCPY: - * This symbol, if defined, indicates that the strlcpy routine is - * available to do string copying. - */ -/*#define HAS_STRLCPY /**/ - -/* HAS_SYSCALL_PROTO: - * This symbol, if defined, indicates that the system provides - * a prototype for the syscall() function. Otherwise, it is up - * to the program to supply one. Good guesses are - * extern int syscall(int, ...); - * extern int syscall(long, ...); - */ -/*#define HAS_SYSCALL_PROTO /**/ - -/* U32_ALIGNMENT_REQUIRED: - * This symbol, if defined, indicates that you must access - * character data through U32-aligned pointers. - */ -/*#define U32_ALIGNMENT_REQUIRED /**/ - -/* HAS_USLEEP_PROTO: - * This symbol, if defined, indicates that the system provides - * a prototype for the usleep() function. Otherwise, it is up - * to the program to supply one. A good guess is - * extern int usleep(useconds_t); - */ -/*#define HAS_USLEEP_PROTO /**/ - -/* HAS_PTHREAD_ATFORK: - * This symbol, if defined, indicates that the pthread_atfork routine - * is available to setup fork handlers. - */ -/*#define HAS_PTHREAD_ATFORK /**/ - -#endif diff --git a/gnu/usr.bin/perl/NetWare/config_h.PL b/gnu/usr.bin/perl/NetWare/config_h.PL deleted file mode 100644 index 67d5bc3f0b4..00000000000 --- a/gnu/usr.bin/perl/NetWare/config_h.PL +++ /dev/null @@ -1,119 +0,0 @@ -# -use Config; -use File::Compare qw(compare); -use File::Copy qw(copy); -my $name = $0; -$name =~ s#^(.*)\.PL$#../$1.SH#; -my %opt; -while (@ARGV && $ARGV[0] =~ /^([\w_]+)=(.*)$/) - { - $opt{$1}=$2; - shift(@ARGV); - } - - $opt{CONFIG_H} ||= 'config.h'; - -my $patchlevel = $opt{INST_VER}; -$patchlevel =~ s|^[\\/]||; -$patchlevel =~ s|~VERSION~|$Config{version}|g; -$patchlevel ||= $Config{version}; -$patchlevel = qq["$patchlevel"]; - -open(SH,'<',$name) || die "Cannot open $name:$!"; -while () - { - last if /^sed/; - } -($term,$file,$pat) = /^sed\s+<<(\S+)\s+>(\S+)\s+(.*)$/; -$file =~ s/^\$(\w+)$/$opt{$1}/g; - -my $str = "sub munge\n{\n"; - -while ($pat =~ s/-e\s+'([^']*)'\s*//) - { - my $e = $1; - $e =~ s/\\([\(\)])/$1/g; - $e =~ s/\\(\d)/\$$1/g; - $str .= "$e;\n"; - } -$str .= "}\n"; - -eval $str; - -die "$str:$@" if $@; - -open(H,'>',"$file.new") || die "Cannot open $file.new:$!"; -binmode H; # no CRs (which cause a spurious rebuild) -while () - { - last if /^$term$/o; - s/\$([\w_]+)/Config($1)/eg; - s/`([^\`]*)`/BackTick($1)/eg; - munge(); - s/\\\$/\$/g; - s#/[ *\*]*\*/#/**/#; - if (/^\s*#define\s+(SITELIB|VENDORLIB)_EXP/) - { - $_ = "#define ". $1 . "_EXP (nw_get_". lc($1) . "($patchlevel))\t/**/\n"; - } - # Added for NetWare and removed PRIVLIB from the above, the same thing might have - # to be done for other as well - elsif (/^\s*#define\s+(PRIVLIB)_EXP/) - { - $_ = "#define ". $1 . "_EXP (fnNwGetEnvironmentStr(\"PRIVLIB\", PRIVLIB))\t/**/\n"; - } - # incpush() handles archlibs, so disable them - elsif (/^\s*#define\s+(ARCHLIB|SITEARCH|VENDORARCH)_EXP/) - { - $_ = "/*#define ". $1 . "_EXP \"\"\t/**/\n"; - } - print H; - } -close(H); -close(SH); - - -chmod(0666,"../lib/CORE/config.h"); -copy("$file.new","../lib/CORE/config.h") || die "Cannot copy:$!"; -chmod(0444,"../lib/CORE/config.h"); - -if (compare("$file.new",$file)) - { - warn "$file has changed\n"; - chmod(0666,$file); - unlink($file); - rename("$file.new",$file); - #chmod(0444,$file); - exit(1); - } -else - { - unlink ("$file.new"); - exit(0); - } - -sub Config -{ - my $var = shift; - my $val = $Config{$var}; - $val = 'undef' unless defined $val; - $val =~ s/\\/\\\\/g; - return $val; -} - -sub BackTick -{ - my $cmd = shift; - if ($cmd =~ /^echo\s+(.*?)\s*\|\s+sed\s+'(.*)'\s*$/) - { - local ($data,$pat) = ($1,$2); - $data =~ s/\s+/ /g; - eval "\$data =~ $pat"; - return $data; - } - else - { - die "Cannot handle \`$cmd\`"; - } - return $cmd; -} diff --git a/gnu/usr.bin/perl/NetWare/config_sh.PL b/gnu/usr.bin/perl/NetWare/config_sh.PL deleted file mode 100644 index d2daf0ecc16..00000000000 --- a/gnu/usr.bin/perl/NetWare/config_sh.PL +++ /dev/null @@ -1,83 +0,0 @@ -# take a semicolon separated path list and turn it into a quoted -# list of paths that Text::Parsewords will grok -sub mungepath { - my $p = shift; - # remove leading/trailing semis/spaces - $p =~ s/^[ ;]+//; - $p =~ s/[ ;]+$//; - $p =~ s/'/"/g; - my @p = map { $_ = "\"$_\"" if /\s/ and !/^".*"$/; $_ } split /;/, $p; - return join(' ', @p); -} - -# generate an array of option strings from command-line args -# or an option file -# -- added by BKS, 10-17-1999 to fix command-line overflow problems -sub loadopts { - if ($ARGV[0] =~ /--cfgsh-option-file/) { - shift @ARGV; - my $optfile = shift @ARGV; - local (*F); - open OPTF, '<', $optfile or die "Can't open $optfile: $!\n"; - my @opts; - chomp(my $line = ); - my @vars = split(/\t+~\t+/, $line); - for (@vars) { - push(@opts, $_) unless (/^\s*$/); - } - close OPTF; - return \@opts; - } - else { - return \@ARGV; - } -} - -my %opt; -my $optref = loadopts(); -while (@{$optref} && $optref->[0] =~ /^([\w_]+)=(.*)$/) { - $opt{$1}=$2; - shift(@{$optref}); -} - -my $pl_h = '../patchlevel.h'; - -if (-e $pl_h) { - open PL, '<', $pl_h or die "Can't open $pl_h: $!"; - while () { - if (/^#\s*define\s+(PERL_\w+)\s+([\d.]+)/) { - $opt{$1} = $2; - } - } - close PL; -} -else { - die "Can't find $pl_h: $!"; -} -$opt{VERSION} = "$opt{PERL_REVISION}.$opt{PERL_VERSION}.$opt{PERL_SUBVERSION}"; -$opt{INST_VER} =~ s|~VERSION~|$opt{VERSION}|g; - -$opt{'cf_by'} = $ENV{USERNAME} unless $opt{'cf_by'}; -$opt{'cf_email'} = $opt{'cf_by'} . '@' . (gethostbyname('localhost'))[0] - unless $opt{'cf_email'}; -$opt{'usemymalloc'} = 'y' if $opt{'d_mymalloc'} eq 'define'; - -$opt{libpth} = mungepath($opt{libpth}) if exists $opt{libpth}; -$opt{incpath} = mungepath($opt{incpath}) if exists $opt{incpath}; - -while (<>) { - s/~([\w_]+)~/$opt{$1}/g; - if (/^([\w_]+)=(.*)$/) { - my($k,$v) = ($1,$2); - # this depends on cf_time being empty in the template (or we'll - # get a loop) - if ($k eq 'cf_time') { - $_ = "$k='" . localtime(time) . "'\n" if $v =~ /^\s*'\s*'/; - } - elsif (exists $opt{$k}) { - $_ = "$k='$opt{$k}'\n"; - } - } - print; -} - diff --git a/gnu/usr.bin/perl/NetWare/deb.h b/gnu/usr.bin/perl/NetWare/deb.h deleted file mode 100644 index e79a8f41a76..00000000000 --- a/gnu/usr.bin/perl/NetWare/deb.h +++ /dev/null @@ -1,47 +0,0 @@ - -/* - * Copyright © 2001 Novell, Inc. All Rights Reserved. - * - * You may distribute under the terms of either the GNU General Public - * License or the Artistic License, as specified in the README file. - * - */ - -/* - * FILENAME : deb.h - * DESCRIPTION : Defines Breakpoint macro. - * Author : SGP - * Date : January 2001. - * - */ - - - -#ifndef __Inc__deb___ -#define __Inc__deb___ - - -#include - - -#if defined(DEBUGON) && !defined(USE_D2) - //debug build and d1 flag is used, so enable IDB - #define DBGMESG ConsolePrintf - #define IDB(x) \ - ConsolePrintf(x); \ - _asm {int 3} -#else - #if defined(USE_D2) - //debug build and d2 flag is used, so disable IDB - #define DBGMESG ConsolePrintf - #define IDB ConsolePrintf - #else - //release build, so disable DBGMESG and IDB - #define DBGMESG - #define IDB - #endif //if defined(USE_D2) -#endif //if defined(DEBUGON) && !defined(USE_D2) - - -#endif /*__Inc__deb___*/ - diff --git a/gnu/usr.bin/perl/NetWare/dl_netware.xs b/gnu/usr.bin/perl/NetWare/dl_netware.xs deleted file mode 100644 index 7e11f71c04b..00000000000 --- a/gnu/usr.bin/perl/NetWare/dl_netware.xs +++ /dev/null @@ -1,191 +0,0 @@ -/* dl_netware.xs - * - * Platform: NetWare - * Author: SGP - * Created: 21st July 2000 - * Last Modified: 23rd Oct 2000 - * Note: !!!Any modification to the xs file to be done to the one which is under netware directory!!! - * Modification History - * 23rd Oct - Failing to find nlms with long names fixed - sdbm_file - */ - -/* - -NetWare related modifications done on dl_win32.xs file created by Wei-Yuen Tan to get this file. - -*/ - - -#include -#include - -#include "EXTERN.h" -#include "perl.h" -#include "XSUB.h" - - -//function pointer for UCSInitialize -typedef void (*PFUCSINITIALIZE) (); - -#include "dlutils.c" /* SaveError() etc */ - -static void -dl_private_init(pTHX) -{ - (void)dl_generic_private_init(aTHX); -} - - -MODULE = DynaLoader PACKAGE = DynaLoader - -BOOT: - (void)dl_private_init(aTHX); - - -void * -dl_load_file(filename,flags=0) - char * filename - int flags - PREINIT: - CODE: - { - char* mod_name = filename; - - //Names with more than 8 chars can't be found with FindNLMHandle - //8 - Name, 1 - Period, 3 - Extension, 1 - String terminator - char mod_name8[13]={'\0'}; - char *p=NULL; - char *buffer=NULL; - int nNameLength=0; - unsigned int nlmHandle=0; - - while (*mod_name) mod_name++; - - //Get the module name with extension to see if it is already loaded - while (mod_name > filename && mod_name[-1] != '/' && mod_name[-1] != '\\') mod_name--; - - DLDEBUG(1,PerlIO_printf(Perl_debug_log,"dl_load_file(%s):\n", filename)); - - buffer = strdup(mod_name); - p = strtok (buffer, "."); - if (p) { - nNameLength = (strlen(p)>8)?8:strlen(p); - memcpy(mod_name8,p,nNameLength); - *(mod_name8 + nNameLength) = '.'; - *(mod_name8 + nNameLength+1) ='\0'; - p = strtok (NULL, "."); - if (p){ - strcat(mod_name8,p); - - if ( (nlmHandle = FindNLMHandle(mod_name8)) == NULL ) - { - //NLM/NLP not loaded, load it and get the handle - if(spawnlp(P_NOWAIT, filename, filename, NULL)!=0) - { - //failed to load the NLM/NLP, this unlikely - //If multiple scripts are executed for the first time before running any other - //ucs script, sometimes there used to be an abend. - switch(NetWareErrno) - { - case LOAD_CAN_NOT_LOAD_MULTIPLE_COPIES: - nlmHandle = FindNLMHandle(mod_name8); - break; - case LOAD_ALREADY_IN_PROGRESS: -#ifdef MPK_ON - kYieldThread(); -#else - ThreadSwitch(); -#endif //MPK_ON - nlmHandle = FindNLMHandle(mod_name8); - break; - default: - nlmHandle = 0; - } - } - else - { - nlmHandle = FindNLMHandle(mod_name8); - } - } - //use Perl2UCS or UCSExt encountered : - //initialize UCS, this has to be terminated when the script finishes execution - //Is the script intending to use UCS Extensions? - //This should be done once per script execution - if ((strcmp(mod_name,"Perl2UCS.nlm")==0) || (strcmp(mod_name,"UCSExt.nlm")==0)) - { - unsigned int moduleHandle = 0; - moduleHandle = FindNLMHandle("UCSCORE.NLM"); - if (moduleHandle) - { - PFUCSINITIALIZE ucsinit = (PFUCSINITIALIZE)ImportSymbol(moduleHandle,"UCSInitialize"); - if (ucsinit!=NULL) - (*ucsinit)(); - } - } - - DLDEBUG(2,PerlIO_printf(Perl_debug_log," libref=%x\n", nlmHandle)); - ST(0) = sv_newmortal() ; - if (nlmHandle == NULL) - //SaveError(aTHX_ "load_file:%s", - // OS_Error_String(aTHX)) ; - ConsolePrintf("load_file error : %s\n", mod_name8); - else - sv_setiv( ST(0), (IV)nlmHandle); - } - } - free(buffer); - - - } - -void * -dl_find_symbol(libhandle, symbolname) - void * libhandle - char * symbolname - CODE: - DLDEBUG(2,PerlIO_printf(Perl_debug_log,"dl_find_symbol(handle=%x, symbol=%s)\n", - libhandle, symbolname)); - - //import the symbol that the dynaloader is asking for. - RETVAL = (void *)ImportSymbol((int)libhandle, symbolname); - - DLDEBUG(2,PerlIO_printf(Perl_debug_log," symbolref = %x\n", RETVAL)); - ST(0) = sv_newmortal() ; - if (RETVAL == NULL) - //SaveError(aTHX_ "find_symbol:%s", - // OS_Error_String(aTHX)) ; - ConsolePrintf("find_symbol error \n"); - else - sv_setiv( ST(0), (IV)RETVAL); - -void -dl_undef_symbols() - PPCODE: - - -# These functions should not need changing on any platform: - -void -dl_install_xsub(perl_name, symref, filename="$Package") - char * perl_name - void * symref - char * filename - CODE: - DLDEBUG(2,PerlIO_printf(Perl_debug_log,"dl_install_xsub(name=%s, symref=%x)\n", - perl_name, symref)); - ST(0) = sv_2mortal(newRV((SV*)newXS(perl_name, - (void(*)(pTHX_ CV *))symref, - filename))); - - -char * -dl_error() - CODE: - dMY_CXT; - RETVAL = dl_last_error ; - OUTPUT: - RETVAL - -# end. - - diff --git a/gnu/usr.bin/perl/NetWare/intdef.h b/gnu/usr.bin/perl/NetWare/intdef.h deleted file mode 100644 index 4c566c4e45b..00000000000 --- a/gnu/usr.bin/perl/NetWare/intdef.h +++ /dev/null @@ -1,86 +0,0 @@ - -/* - * Copyright © 2001 Novell, Inc. All Rights Reserved. - * - * You may distribute under the terms of either the GNU General Public - * License or the Artistic License, as specified in the README file. - * - */ - -/* - * FILENAME : intdef.h - * DESCRIPTION : ANSI functions hash defined to equivalent Netware functions. - * Author : SGP - * Date : July 1999. - * - */ - - - -#ifndef __INTDEF__ -#define __INTDEF__ - - -#include -#include "..\utility\utility.h" - - -//ANSI functions define to equivalent NetWare internationalization functions - -#define setlocale NWLsetlocale -#define localeconv NWLlocaleconv -#define strncoll NWstrncoll -#define strftime NWLstrftime - -#define atoi NWLatoi -#define itoa NWitoa -#define utoa NWutoa -#define ultoa NWultoa -#define ltoa NWltoa - -#define isalnum NWLisalnum -#define isalpha NWLisalpha -#define isdigit NWLisdigit - -#define strlen NWLmbslen -#define mblen NWLmblen - -//#define strcpy(x,y) NWLstrbcpy(x,y,NWstrlen(y)+1) -#define strcpy(x,y) \ - NWstrncpy(x,y,NWstrlen(y)); \ - x[NWstrlen(y)] ='\0'; -#define strncpy(x,y,z) NWLstrbcpy(x,y,(z + 1)) -#define strcat(x,y) NWLstrbcpy((x + NWstrlen(x)), y, (NWstrlen(y) +1)) -#define strncmp(s1,s2,l) NWgstrncmp(s1,s2,l) -#define strnicmp(s1,s2,l) NWgstrnicmp(s1,s2,l) - -#define toupper(s1) NWCharUpr(s1) -#define wsprintf NWsprintf - -#define strncat(x,y,l) \ - NWsprintf("oops!!! Not yet defined for NWI18N, define in intdef.h, still using strncat\n"); \ - strncat(x,y,l); - -#define strdup(s1) \ - NWsprintf("oops!!! Not yet defined for NWI18N, define in intdef.h, still using strdup\n"); \ - strdup(s1); - -#define strlist \ - NWsprintf("oops!!! Not yet defined for NWI18N, define in intdef.h, still using strlist\n"); \ - strlist; - -#define strlwr(s1) \ - NWsprintf("oops!!! Not yet defined for NWI18N, define in intdef.h, still using strlwr\n"); \ - strlwr(s1); - -#define strnset(s1,l1,l2) \ - NWsprintf("oops!!! Not yet defined for NWI18N, define in intdef.h, still using strnset\n"); \ - strnset(s1,l1,l2); - -#define strset(s1,l1) \ - NWsprintf("oops!!! Not yet defined for NWI18N, define in intdef.h, still using strset\n"); \ - strset(s1,l1); - - -#endif // __INTDEF__ - diff --git a/gnu/usr.bin/perl/NetWare/interface.c b/gnu/usr.bin/perl/NetWare/interface.c deleted file mode 100644 index 1d298854c9f..00000000000 --- a/gnu/usr.bin/perl/NetWare/interface.c +++ /dev/null @@ -1,205 +0,0 @@ - -/* - * Copyright © 2001 Novell, Inc. All Rights Reserved. - * - * You may distribute under the terms of either the GNU General Public - * License or the Artistic License, as specified in the README file. - * - */ - -/* - * FILENAME : interface.c - * DESCRIPTION : Calling Perl APIs. - * Author : SGP - * Date Created : January 2001. - * Date Modified: July 2nd 2001. - */ - - - -#include "interface.h" -#include "nwtinfo.h" - -static void xs_init(pTHX); - -EXTERN_C int RunPerl(int argc, char **argv, char **env); -EXTERN_C void Perl_nw5_init(int *argcp, char ***argvp); -EXTERN_C void boot_DynaLoader (pTHX_ CV* cv); - -EXTERN_C BOOL Remove_Thread_Ctx(void); - - -ClsPerlHost::ClsPerlHost() -{ - -} - -ClsPerlHost::~ClsPerlHost() -{ - -} - -ClsPerlHost::VersionNumber() -{ - return 0; -} - -bool -ClsPerlHost::RegisterWithThreadTable() -{ - return(fnRegisterWithThreadTable()); -} - -bool -ClsPerlHost::UnregisterWithThreadTable() -{ - return(fnUnregisterWithThreadTable()); -} - -int -ClsPerlHost::PerlCreate(PerlInterpreter *my_perl) -{ -/* if (!(my_perl = perl_alloc())) // Allocate memory for Perl. - return (1);*/ - perl_construct(my_perl); - - return 1; -} - -int -ClsPerlHost::PerlParse(PerlInterpreter *my_perl, int argc, char** argv, char** env) -{ - return(perl_parse(my_perl, xs_init, argc, argv, env)); // Parse the command line. -} - -int -ClsPerlHost::PerlRun(PerlInterpreter *my_perl) -{ - return(perl_run(my_perl)); // Run Perl. -} - -int -ClsPerlHost::PerlDestroy(PerlInterpreter *my_perl) -{ - return(perl_destruct(my_perl)); // Destructor for Perl. -} - -void -ClsPerlHost::PerlFree(PerlInterpreter *my_perl) -{ - perl_free(my_perl); // Free the memory allocated for Perl. - - // Remove the thread context set during Perl_set_context - // This is added here since for web script there is no other place this gets executed - // and it cannot be included into cgi2perl.xs unless this symbol is exported. - Remove_Thread_Ctx(); -} - -/*============================================================================================ - - Function : xs_init - - Description : - - Parameters : pTHX (IN) - - - Returns : Nothing. - -==============================================================================================*/ - -static void xs_init(pTHX) -{ - char *file = __FILE__; - - dXSUB_SYS; - newXS("DynaLoader::boot_DynaLoader", boot_DynaLoader, file); -} - - -EXTERN_C -int RunPerl(int argc, char **argv, char **env) -{ - int exitstatus = 0; - ClsPerlHost nlm; - - PerlInterpreter *my_perl = NULL; // defined in Perl.h - PerlInterpreter *new_perl = NULL; // defined in Perl.h - - #ifdef PERL_GLOBAL_STRUCT - #define PERLVAR(prefix,var,type) - #define PERLVARA(prefix,var,type) - #define PERLVARI(prefix,var,type,init) PL_Vars.prefix##var = init; - #define PERLVARIC(prefix,var,type,init) PL_Vars.prefix##var = init; - - #include "perlvars.h" - - #undef PERLVAR - #undef PERLVARA - #undef PERLVARI - #undef PERLVARIC - #endif - - PERL_SYS_INIT(&argc, &argv); - - if (!(my_perl = perl_alloc())) // Allocate memory for Perl. - return (1); - - if(nlm.PerlCreate(my_perl)) - { - PL_perl_destruct_level = 0; - - if(!nlm.PerlParse(my_perl, argc, argv, env)) - { - #if defined(TOP_CLONE) && defined(USE_ITHREADS) // XXXXXX testing - new_perl = perl_clone(my_perl, 1); - - (void) perl_run(new_perl); // Run Perl. - PERL_SET_THX(my_perl); - #else - (void) nlm.PerlRun(my_perl); - #endif - } - exitstatus = nlm.PerlDestroy(my_perl); - } - if(my_perl) - nlm.PerlFree(my_perl); - - #ifdef USE_ITHREADS - if (new_perl) - { - PERL_SET_THX(new_perl); - exitstatus = nlm.PerlDestroy(new_perl); - nlm.PerlFree(my_perl); - } - #endif - - PERL_SYS_TERM(); - return exitstatus; -} - - -// FUNCTION: AllocStdPerl -// -// DESCRIPTION: -// Allocates a standard perl handler that other perl handlers -// may delegate to. You should call FreeStdPerl to free this -// instance when you are done with it. -// -IPerlHost* AllocStdPerl() -{ - return (IPerlHost*) new ClsPerlHost(); -} - - -// FUNCTION: FreeStdPerl -// -// DESCRIPTION: -// Frees an instance of a standard perl handler allocated by -// AllocStdPerl. -// -void FreeStdPerl(IPerlHost* pPerlHost) -{ - if (pPerlHost) - delete (ClsPerlHost*) pPerlHost; -} - diff --git a/gnu/usr.bin/perl/NetWare/interface.cpp b/gnu/usr.bin/perl/NetWare/interface.cpp deleted file mode 100644 index b08d6c249eb..00000000000 --- a/gnu/usr.bin/perl/NetWare/interface.cpp +++ /dev/null @@ -1,217 +0,0 @@ - -/* - * Copyright © 2001 Novell, Inc. All Rights Reserved. - * - * You may distribute under the terms of either the GNU General Public - * License or the Artistic License, as specified in the README file. - * - */ - -/* - * FILENAME : interface.c - * DESCRIPTION : Perl parsing and running functions. - * Author : SGP - * Date : January 2001. - * - */ - - - -#include "interface.h" - -#include "win32ish.h" // For "BOOL", "TRUE" and "FALSE" - - -static void xs_init(pTHX); -//static void xs_init(pTHXo); //(J) - -EXTERN_C int RunPerl(int argc, char **argv, char **env); -EXTERN_C void Perl_nw5_init(int *argcp, char ***argvp); -EXTERN_C void boot_DynaLoader (pTHX_ CV* cv); // (J) pTHXo_ - -EXTERN_C BOOL Remove_Thread_Ctx(void); - - -ClsPerlHost::ClsPerlHost() -{ - -} - -ClsPerlHost::~ClsPerlHost() -{ - -} - -ClsPerlHost::VersionNumber() -{ - return 0; -} - -int -ClsPerlHost::PerlCreate(PerlInterpreter *my_perl) -{ -/* if (!(my_perl = perl_alloc())) // Allocate memory for Perl. - return (1);*/ - perl_construct(my_perl); - - return 1; -} - -int -ClsPerlHost::PerlParse(PerlInterpreter *my_perl, int argc, char** argv, char** env) -{ - return(perl_parse(my_perl, xs_init, argc, argv, env)); // Parse the command line. -} - -int -ClsPerlHost::PerlRun(PerlInterpreter *my_perl) -{ - return(perl_run(my_perl)); // Run Perl. -} - -int -ClsPerlHost::PerlDestroy(PerlInterpreter *my_perl) -{ - int ret = perl_destruct(my_perl); // Destructor for Perl. -//// perl_free(my_perl); // Free the memory allocated for Perl. - return(ret); -} - -void -ClsPerlHost::PerlFree(PerlInterpreter *my_perl) -{ - perl_free(my_perl); // Free the memory allocated for Perl. - - // Remove the thread context set during Perl_set_context - // This is added here since for web script there is no other place this gets executed - // and it cannot be included into cgi2perl.xs unless this symbol is exported. - Remove_Thread_Ctx(); -} - -/*============================================================================================ - - Function : xs_init - - Description : - - Parameters : pTHX (IN) - - - Returns : Nothing. - -==============================================================================================*/ - -static void xs_init(pTHX) -//static void xs_init(pTHXo) //J -{ - char *file = __FILE__; - - dXSUB_SYS; - newXS("DynaLoader::boot_DynaLoader", boot_DynaLoader, file); -} - - -EXTERN_C -int RunPerl(int argc, char **argv, char **env) -{ - int exitstatus = 0; - ClsPerlHost nlm; - - PerlInterpreter *my_perl = NULL; // defined in Perl.h - PerlInterpreter *new_perl = NULL; // defined in Perl.h - - //__asm{int 3}; - #ifdef PERL_GLOBAL_STRUCT - #define PERLVAR(prefix,var,type) - #define PERLVARA(prefix,var,type) - #define PERLVARI(prefix,var,type,init) PL_Vars.prefix##var = init; - #define PERLVARIC(prefix,var,type,init) PL_Vars.prefix##var = init; - - #include "perlvars.h" - - #undef PERLVAR - #undef PERLVARA - #undef PERLVARI - #undef PERLVARIC - #endif - - PERL_SYS_INIT(&argc, &argv); - - if (!(my_perl = perl_alloc())) // Allocate memory for Perl. - return (1); - - if(nlm.PerlCreate(my_perl)) - { - PL_perl_destruct_level = 0; - - if(!nlm.PerlParse(my_perl, argc, argv, env)) - { - #if defined(TOP_CLONE) && defined(USE_ITHREADS) // XXXXXX testing - # ifdef PERL_OBJECT - CPerlHost *h = new CPerlHost(); - new_perl = perl_clone_using(my_perl, 1, - h->m_pHostperlMem, - h->m_pHostperlMemShared, - h->m_pHostperlMemParse, - h->m_pHostperlEnv, - h->m_pHostperlStdIO, - h->m_pHostperlLIO, - h->m_pHostperlDir, - h->m_pHostperlSock, - h->m_pHostperlProc - ); - CPerlObj *pPerl = (CPerlObj*)new_perl; - # else - new_perl = perl_clone(my_perl, 1); - # endif - - (void) perl_run(new_perl); // Run Perl. - PERL_SET_THX(my_perl); - #else - (void) nlm.PerlRun(my_perl); - #endif - } - exitstatus = nlm.PerlDestroy(my_perl); - } - if(my_perl) - nlm.PerlFree(my_perl); - - #ifdef USE_ITHREADS - if (new_perl) - { - PERL_SET_THX(new_perl); - exitstatus = nlm.PerlDestroy(new_perl); - nlm.PerlFree(my_perl); - } - #endif - - PERL_SYS_TERM(); - return exitstatus; -} - - -// FUNCTION: AllocStdPerl -// -// DESCRIPTION: -// Allocates a standard perl handler that other perl handlers -// may delegate to. You should call FreeStdPerl to free this -// instance when you are done with it. -// -IPerlHost* AllocStdPerl() -{ - return (IPerlHost*) new ClsPerlHost(); -} - - -// FUNCTION: FreeStdPerl -// -// DESCRIPTION: -// Frees an instance of a standard perl handler allocated by -// AllocStdPerl. -// -void FreeStdPerl(IPerlHost* pPerlHost) -{ - if (pPerlHost) - delete (ClsPerlHost*) pPerlHost; -//// delete pPerlHost; -} - diff --git a/gnu/usr.bin/perl/NetWare/interface.h b/gnu/usr.bin/perl/NetWare/interface.h deleted file mode 100644 index 2c9d46d75d5..00000000000 --- a/gnu/usr.bin/perl/NetWare/interface.h +++ /dev/null @@ -1,47 +0,0 @@ - -/* - * Copyright © 2001 Novell, Inc. All Rights Reserved. - * - * You may distribute under the terms of either the GNU General Public - * License or the Artistic License, as specified in the README file. - * - */ - -/* - * FILENAME : interface.c - * DESCRIPTION : Perl parsing and running functions. - * Author : SGP - * Date Created : January 2001. - * Date Modified: July 2nd 2001. - */ - - - -#ifndef __Interface_H__ -#define __Interface_H__ - - -#include "iperlhost.h" - - -class ClsPerlHost : public IPerlHost -{ -public: - ClsPerlHost(void); - virtual ~ClsPerlHost(void); - - int VersionNumber(); - - int PerlCreate(PerlInterpreter *my_perl); - int PerlParse(PerlInterpreter *my_perl, int argc, char** argv, char** env); - int PerlRun(PerlInterpreter *my_perl); - int PerlDestroy(PerlInterpreter *my_perl); - void PerlFree(PerlInterpreter *my_perl); - - //bool RegisterWithThreadTable(void); - //bool UnregisterWithThreadTable(void); -}; - - -#endif // __Interface_H__ - diff --git a/gnu/usr.bin/perl/NetWare/iperlhost.h b/gnu/usr.bin/perl/NetWare/iperlhost.h deleted file mode 100644 index fe3dab7a34a..00000000000 --- a/gnu/usr.bin/perl/NetWare/iperlhost.h +++ /dev/null @@ -1,48 +0,0 @@ - -/* - * Copyright © 2001 Novell, Inc. All Rights Reserved. - * - * You may distribute under the terms of either the GNU General Public - * License or the Artistic License, as specified in the README file. - * - */ - -/* - * FILENAME : iperlhost.h - * DESCRIPTION : IPerlHost class file. - * Author : SGP - * Date Created : January 2001. - * Date Modified: July 2nd 2001. - */ - - - -#ifndef __iPerlHost_H__ -#define __iPerlHost_H__ - - -#include "EXTERN.h" -#include "perl.h" - - -class IPerlHost -{ -public: - virtual int VersionNumber() = 0; - - virtual int PerlCreate(PerlInterpreter *my_perl) = 0; - virtual int PerlParse(PerlInterpreter *my_perl,int argc, char** argv, char** env) = 0; - virtual int PerlRun(PerlInterpreter *my_perl) = 0; - virtual int PerlDestroy(PerlInterpreter *my_perl) = 0; - virtual void PerlFree(PerlInterpreter *my_perl) = 0; - - //virtual bool RegisterWithThreadTable(void)=0; - //virtual bool UnregisterWithThreadTable(void)=0; -}; - -extern "C" IPerlHost* AllocStdPerl(); -extern "C" void FreeStdPerl(IPerlHost* pPerlHost); - - -#endif // __iPerlHost_H__ - diff --git a/gnu/usr.bin/perl/NetWare/netware.h b/gnu/usr.bin/perl/NetWare/netware.h deleted file mode 100644 index c106476e28d..00000000000 --- a/gnu/usr.bin/perl/NetWare/netware.h +++ /dev/null @@ -1,97 +0,0 @@ - -/* - * Copyright © 2001 Novell, Inc. All Rights Reserved. - * - * You may distribute under the terms of either the GNU General Public - * License or the Artistic License, as specified in the README file. - * - */ - -/* - * FILENAME : netware.h - * DESCRIPTION : Include for NetWare stuff. - * This is based on the win32.h file of Win32 port. - * Author : SGP - * Date : January 2001. - * - */ - - - -#ifndef _INC_NW_PERL5 -#define _INC_NW_PERL5 - -#include -#include "stdio.h" - -// to get the internal debugger break for functions that are not yet handled -#include "deb.h" - -#ifndef EXT -#include "EXTERN.h" -#endif - -//structure that will be used by times routine. -struct tms { - long tms_utime; - long tms_stime; - long tms_cutime; - long tms_cstime; -}; - -#define PERL_GET_CONTEXT_DEFINED -#define ENV_IS_CASELESS - -#undef init_os_extras -#define init_os_extras Perl_init_os_extras - -#define HAVE_INTERP_INTERN -struct interp_intern { - void * internal_host; - long perlshell_items; // For system() ; Ananth, 3 Sept 2001 - - char * perlshell_tokens; // For system() ; From Win32 of Perl 5.8 on 24 June 2002 - char ** perlshell_vec; // For system() ; From Win32 of Perl 5.8 on 24 June 2002 -}; - -/* - * handle socket stuff, assuming socket is always available - */ -#include -#include -#include - -//This is clashing with a definition in perly.h, hence -//undefine, may have to redefine if need be - CHKSGP -#undef WORD - -#ifndef SOCKET -typedef u_int SOCKET; -#endif - -#define nw_internal_host (PL_sys_intern.internal_host) -#define nw_perlshell_items (PL_sys_intern.perlshell_items) // For system() ; Ananth, 3 Sept 2001 - -#define nw_perlshell_tokens (PL_sys_intern.perlshell_tokens) // For system() ; From Win32 of Perl 5.8 on 24 June 2002 -#define nw_perlshell_vec (PL_sys_intern.perlshell_vec) // For system() ; From Win32 of Perl 5.8 on 24 June 2002 - -EXTERN_C void Perl_nw5_init(int *argcp, char ***argvp); - -#define PTHREAD_ATFORK(prepare,parent,child) NOOP - -/* - * This provides a layer of functions and macros to ensure extensions will - * get to use the same RTL functions as the core. - */ -#include "nw5iop.h" - -// Below is called in Run.c file when a perl script executes/runs. -#ifdef MPK_ON - #define PERL_ASYNC_CHECK() kYieldThread(); -#else - #define PERL_ASYNC_CHECK() ThreadSwitch(); -#endif - - -#endif /* _INC_NW_PERL5 */ - diff --git a/gnu/usr.bin/perl/NetWare/nw5.c b/gnu/usr.bin/perl/NetWare/nw5.c deleted file mode 100644 index 46642a4d597..00000000000 --- a/gnu/usr.bin/perl/NetWare/nw5.c +++ /dev/null @@ -1,1122 +0,0 @@ - -/* - * Copyright © 2001 Novell, Inc. All Rights Reserved. - * - * You may distribute under the terms of either the GNU General Public - * License or the Artistic License, as specified in the README file. - * - */ - -/* - * FILENAME : nw5.c - * DESCRIPTION : Definitions for the redefined functions for NetWare. - * Author : SGP, HYAK - * Date : January 2001. - * - */ - - - -#include // For dTHX, etc. -#include "nwpipe.h" - - -// This was added since the compile failed saying "undefined P_WAIT" -// when USE_ITHREADS was commented in the makefile -#ifndef P_WAIT -#define P_WAIT 0 -#endif - -#ifndef P_NOWAIT -#define P_NOWAIT 1 -#endif - -#define EXECF_EXEC 1 -#define EXECF_SPAWN 2 -#define EXECF_SPAWN_NOWAIT 3 - -static BOOL has_shell_metachars(char *ptr); - -// The array is used to store pointer to the memory allocated to the TempPipeFile structure everytime -// a call to the function, nw_Popen. If a simple variable is used, everytime the memory is allocated before -// the previously allocated memory is freed, the pointer will get overwritten and the previous memory allocations -// are lost! Only the most recent one will get freed when calls are made to nw_Pclose. -// By using the array and the iPopenCount to index the array, all memory are freed! - -// The size of the array indicates the limit on the no of times the nw_Popen function can be called (and -// memory allocted) from within a script through backtick operators! -// This is arbitrarily set to MAX_PIPE_RECURSION=256 which indicates there can be 256 nested backtick operators possible! -PTEMPPIPEFILE ptpf1[MAX_PIPE_RECURSION] = {'\0'}; -int iPopenCount = 0; -FILE* File1[MAX_PIPE_RECURSION] = {'\0'}; - -/** -General: - -In this code, wherever there is a FILE *, the error condition is checked; and only if the FILE * is TRUE, -then the corresponding operation is done. Otherwise the error value is returned. -This is done because the file operations like "open" in the Perl code returns the FILE *, -returning a valid value if the file is found or NULL when the particular file is not found. -Now, if the return value is NULL, then an operation say "fgets", "fopen" etc. using this NULL value -for FILE * will abend the server. If the check is made then an operation on a non existing file -does not abend the server. -**/ - -void -nw_abort(void) -{ - abort(); // Terminate the NLM application abnormally. - return; -} - -int -nw_access(const char *path, int mode) -{ - return access(path, mode); -} - -int -nw_chmod(const char *path, int mode) -{ - return chmod(path, mode); -} - -void -nw_clearerr(FILE *pf) -{ - if(pf) - clearerr(pf); -} - -int -nw_close(int fd) -{ - return close(fd); -} - -nw_closedir(DIR *dirp) -{ - return (closedir(dirp)); -} - -void -nw_setbuf(FILE *pf, char *buf) -{ - if(pf) - setbuf(pf, buf); -} - -int -nw_setmode(FILE *fp, int mode) -{ -/** - // Commented since a few abends were happening in fnFpSetMode - int *dummy = 0; - return(fnFpSetMode(fp, mode, dummy)); -**/ - - int handle = -1; - errno = 0; - - handle = fileno(fp); - if (errno) - { - errno = 0; - return -1; - } - return setmode(handle, mode); -} - -int -nw_setvbuf(FILE *pf, char *buf, int type, size_t size) -{ - if(pf) - return setvbuf(pf, buf, type, size); - else - return -1; -} - - -unsigned int -nw_sleep(unsigned int t) -{ - delay(t*1000); // Put the thread to sleep for 't' seconds. Initially 't' is passed in milliseconds. - return 0; -} - -int -nw_spawnvp(int mode, char *cmdname, char **argv) -{ - // There is no pass-around environment on NetWare so we throw that - // argument away for now. - - // The function "spawnvp" does not work in all situations. Loading - // edit.nlm seems to work, for example, but the name of the file - // to edit does not appear to get passed correctly. Another problem - // is that on Netware, P_WAIT does not really work reliably. It only - // works with NLMs built to use CLIB (according to Nile Thayne). - // NLMs such as EDIT that are written directly to the system have no - // way of running synchronously from another process. The whole - // architecture on NetWare seems pretty busted, so we just support it - // as best we can. - // - // The spawnvp function only launches NLMs, it will not execute a command; - // the NetWare "system" function is used for that purpose. Unfortunately, "system" - // always returns success whether the command is successful or not or even - // if the command was not found! To avoid ambiguity--you can have both an - // NLM named "perl" and a system command named "perl"--we need to - // force perl scripts to carry the word "load" when loading an NLM. This - // might be clearer anyway. - - int ret = 0; - int argc = 0; - - - if (stricmp(cmdname, LOAD_COMMAND) == 0) - { - if (argv[1] != NULL) - ret = spawnvp(mode, argv[1], &argv[1]); - } - else - { - int i=0; - while (argv[i] != '\0') - i++; - argc = i; - - fnSystemCommand(argv, argc); - } - - return ret; -} - -int -nw_execv(char *cmdname, char **argv) -{ - return spawnvp(P_WAIT, cmdname, (char **)argv); -} - - -int -nw_execvp(char *cmdname, char **argv) -{ - return nw_spawnvp(P_WAIT, cmdname, (char **)argv); -} - -int -nw_stat(const char *path, struct stat *sbuf) -{ - return (stat(path, sbuf)); -} - -FILE * -nw_stderr(void) -{ - return (stderr); -} - -FILE * -nw_stdin(void) -{ - return (stdin); -} - -FILE * -nw_stdout() -{ - return (stdout); -} - -long -nw_telldir(DIR *dirp) -{ - dTHX; - Perl_croak(aTHX_ "The telldir() function is not implemented on NetWare\n"); - return 0l; -} - -int -nw_times(struct tms *timebuf) -{ - clock_t now = clock(); - - timebuf->tms_utime = now; - timebuf->tms_stime = 0; - timebuf->tms_cutime = 0; - timebuf->tms_cstime = 0; - - return 0; -} - -FILE* -nw_tmpfile(void) -{ - return tmpfile(); -} - -int -nw_uname(struct utsname *name) -{ - return(uname(name)); -} - -int -nw_ungetc(int c, FILE *pf) -{ - if(pf) - return ungetc(c, pf); - else - return -1; -} - -int -nw_unlink(const char *filename) -{ - return(unlink(filename)); -} - -int -nw_utime(const char *filename, struct utimbuf *times) -{ - return(utime(filename, times)); -} - -int -nw_vfprintf(FILE *fp, const char *format, va_list args) -{ - if(fp) - return (vfprintf(fp, format, args)); - else - return -1; -} - -int -nw_wait(int *status) -{ - return 0; -} - -int -nw_waitpid(int pid, int *status, int flags) -{ - return 0; -} - -int -nw_write(int fd, const void *buf, unsigned int cnt) -{ - return write(fd, buf, cnt); -} - -char * -nw_crypt(const char *txt, const char *salt) -{ - dTHX; - -#ifdef HAVE_DES_FCRYPT - dTHR; - return des_fcrypt(txt, salt, w32_crypt_buffer); -#else - Perl_croak(aTHX_ "The crypt() function is not implemented on NetWare\n"); - return NULL; -#endif -} - -int -nw_dup(int fd) -{ - return dup(fd); -} - -int -nw_dup2(int fd1,int fd2) -{ - return dup2(fd1,fd2); -} - -void* -nw_dynaload(const char* filename) -{ - return NULL; -} - -int -nw_fclose(FILE *pf) -{ - if(pf) - return (fclose(pf)); - else - return -1; -} - -FILE * -nw_fdopen(int handle, const char *mode) -{ - return(fdopen(handle, mode)); -} - -int -nw_feof(FILE *fp) -{ - if(fp) - return (feof(fp)); - else - return -1; -} - -int -nw_ferror(FILE *fp) -{ - if(fp) - return (ferror(fp)); - else - return -1; -} - - -int -nw_fflush(FILE *pf) -{ - if(pf) - return fflush(pf); - else - return -1; -} - -int -nw_fgetpos(FILE *pf, fpos_t *p) -{ - if(pf) - return fgetpos(pf, p); - else - return -1; -} - -char* -nw_fgets(char *s, int n, FILE *pf) -{ - if(pf) - return(fgets(s, n, pf)); - else - return NULL; -} - -int -nw_fileno(FILE *pf) -{ - if(pf) - return fileno(pf); - else - return -1; -} - -int -nw_flock(int fd, int oper) -{ - dTHX; - Perl_croak(aTHX_ "The flock() function is not implemented on NetWare\n"); - return 0; -} - - -FILE * -nw_fopen(const char *filename, const char *mode) -{ - return (fopen(filename, mode)); -} - -int -nw_fputc(int c, FILE *pf) -{ - if(pf) - return fputc(c,pf); - else - return -1; -} - -int -nw_fputs(const char *s, FILE *pf) -{ - if(pf) - return fputs(s, pf); - else - return -1; -} - -size_t -nw_fread(void *buf, size_t size, size_t count, FILE *fp) -{ - if(fp) - return fread(buf, size, count, fp); - else - return -1; -} - -FILE * -nw_freopen(const char *path, const char *mode, FILE *stream) -{ - if(stream) - return freopen(path, mode, stream); - else - return NULL; -} - -int -nw_fseek(FILE *pf, long offset, int origin) -{ - if(pf) - return (fseek(pf, offset, origin)); - else - return -1; -} - -int -nw_fsetpos(FILE *pf, const fpos_t *p) -{ - if(pf) - return fsetpos(pf, p); - else - return -1; -} - -long -nw_ftell(FILE *pf) -{ - if(pf) - return ftell(pf); - else - return -1; -} - -size_t -nw_fwrite(const void *buf, size_t size, size_t count, FILE *fp) -{ - if(fp) - return fwrite(buf, size, count, fp); - else - return -1; -} - -long -nw_get_osfhandle(int fd) -{ - return 0l; -} - -int -nw_getc(FILE *pf) -{ - if(pf) - return getc(pf); - else - return -1; -} - -int -nw_putc(int c, FILE *pf) -{ - if(pf) - return putc(c,pf); - else - return -1; -} - -int -nw_fgetc(FILE *pf) -{ - if(pf) - return fgetc(pf); - else - return -1; -} - -int -nw_getpid(void) -{ - return GetThreadGroupID(); -} - -int -nw_kill(int pid, int sig) -{ - return 0; -} - -int -nw_link(const char *oldname, const char *newname) -{ - return 0; -} - -long -nw_lseek(int fd, long offset, int origin) -{ - return lseek(fd, offset, origin); -} - -int -nw_chdir(const char *dir) -{ - return chdir(dir); -} - -int -nw_rmdir(const char *dir) -{ - return rmdir(dir); -} - -DIR * -nw_opendir(const char *filename) -{ - char *buff = NULL; - int len = 0; - DIR *ret = NULL; - - len = strlen(filename); - buff = malloc(len + 5); - if (buff) { - strcpy(buff, filename); - if (buff[len-1]=='/' || buff[len-1]=='\\') { - buff[--len] = 0; - } - strcpy(buff+len, "/*.*"); - ret = opendir(buff); - free (buff); - buff = NULL; - return ret; - } else { - return NULL; - } -} - -int -nw_open(const char *path, int flag, ...) -{ - va_list ap; - int pmode = -1; - - va_start(ap, flag); - pmode = va_arg(ap, int); - va_end(ap); - - if (stricmp(path, "/dev/null")==0) - path = "NWNUL"; - - return open(path, flag, pmode); -} - -int -nw_open_osfhandle(long handle, int flags) -{ - return 0; -} - -unsigned long -nw_os_id(void) -{ - return 0l; -} - -int nw_Pipe(int* a, int* e) -{ - int ret = 0; - - errno = 0; - ret = pipe(a); - if(errno) - e = &errno; - - return ret; -} - -FILE* nw_Popen(char* command, char* mode, int* e) -{ - int i = -1; - - FILE* ret = NULL; - PTEMPPIPEFILE ptpf = NULL; - - // this callback is supposed to call _popen, which spawns an - // asynchronous command and opens a pipe to it. The returned - // file handle can be read or written to; if read, it represents - // stdout of the called process and will return EOF when the - // called process finishes. If written to, it represents stdin - // of the called process. Naturally _popen is not available on - // NetWare so we must do some fancy stuff to simulate it. We will - // redirect to and from temp files; this has the side effect - // of having to run the process synchronously rather than - // asynchronously. This means that you will only be able to do - // this with CLIB NLMs built to run on the calling thread. - - errno = 0; - - ptpf1[iPopenCount] = (PTEMPPIPEFILE) malloc(sizeof(TEMPPIPEFILE)); - if (!ptpf1[iPopenCount]) - return NULL; - - ptpf = ptpf1[iPopenCount]; - iPopenCount ++; - if(iPopenCount > MAX_PIPE_RECURSION) - iPopenCount = MAX_PIPE_RECURSION; // Limit to the max no of pipes to be open recursively. - - fnTempPipeFile(ptpf); - ret = fnPipeFileOpen((PTEMPPIPEFILE) ptpf, (char *) command, (char *) mode); - if (ret) - File1[iPopenCount-1] = ret; // Store the obtained Pipe file handle. - else - { // Pipe file not obtained. So free the allocated memory. - if(ptpf1[iPopenCount-1]) - { - free(ptpf1[iPopenCount-1]); - ptpf1[iPopenCount-1] = NULL; - ptpf = NULL; - iPopenCount --; - } - } - - if (errno) - e = &errno; - - return ret; -} - -int nw_Pclose(FILE* file, int* e) -{ - int i=0, j=0; - - errno = 0; - - if(file) - { - if(iPopenCount > 0) - { - for (i=0; i) or pipe - * characters (|) that are not in a quoted string. - * Shell variable interpolation (%VAR%) can also happen inside strings. - */ - while (*ptr) { - switch(*ptr) { - case '%': - return TRUE; - case '\'': - case '\"': - if (inquote) { - if (quote == *ptr) { - inquote = 0; - quote = '\0'; - } - } - else { - quote = *ptr; - inquote++; - } - break; - case '>': - case '<': - case '|': - if (!inquote) - return TRUE; - default: - break; - } - ++ptr; - } - return FALSE; -} - -int -fork(void) -{ - return 0; -} - - -// added to remove undefied symbol error in CodeWarrior compilation -int -Perl_Ireentrant_buffer_ptr(aTHX) -{ - return 0; -} diff --git a/gnu/usr.bin/perl/NetWare/nw5iop.h b/gnu/usr.bin/perl/NetWare/nw5iop.h deleted file mode 100644 index 0026b321811..00000000000 --- a/gnu/usr.bin/perl/NetWare/nw5iop.h +++ /dev/null @@ -1,205 +0,0 @@ - -/* - * Copyright © 2001 Novell, Inc. All Rights Reserved. - * - * You may distribute under the terms of either the GNU General Public - * License or the Artistic License, as specified in the README file. - * - */ - -/* - * FILENAME : nw5iop.h - * DESCRIPTION : Redefined functions for NetWare. - * Author : SGP, HYAK - * Date : January 2001. - * - */ - - - -#ifndef NW5IOP_H -#define NW5IOP_H - - -#ifndef START_EXTERN_C -#ifdef __cplusplus -# define START_EXTERN_C extern "C" { -# define END_EXTERN_C } -# define EXTERN_C extern "C" -#else -# define START_EXTERN_C -# define END_EXTERN_C -# define EXTERN_C -#endif -#endif - -#if defined(_MSC_VER) || defined(__MINGW32__) -# include -#else -# include -#endif - -/* - * defines for flock emulation - */ -#define LOCK_SH 1 -#define LOCK_EX 2 -#define LOCK_NB 4 -#define LOCK_UN 8 - - -/* - * Make this as close to original stdio as possible. - */ - -/* - * function prototypes for our own win32io layer - */ -/********CHKSGP ****/ -//making DLLExport as nothing -#define DllExport -/*******************/ - -START_EXTERN_C - -int * nw_errno(void); -char *** nw_environ(void); - -FILE* nw_stdin(void); -FILE* nw_stdout(void); -FILE* nw_stderr(void); -int nw_ferror(FILE *fp); -int nw_feof(FILE *fp); - -char* nw_strerror(int e); - -int nw_fprintf(FILE *pf, const char *format, ...); -int nw_printf(const char *format, ...); -int nw_vfprintf(FILE *pf, const char *format, va_list arg); -int nw_vprintf(const char *format, va_list arg); - -size_t nw_fread(void *buf, size_t size, size_t count, FILE *pf); -size_t nw_fwrite(const void *buf, size_t size, size_t count, FILE *pf); -FILE* nw_fopen(const char *path, const char *mode); -FILE* nw_fdopen(int fh, const char *mode); -FILE* nw_freopen(const char *path, const char *mode, FILE *pf); -int nw_fclose(FILE *pf); - -int nw_fputs(const char *s,FILE *pf); -int nw_fputc(int c,FILE *pf); -int nw_ungetc(int c,FILE *pf); -int nw_getc(FILE *pf); -int nw_fileno(FILE *pf); -void nw_clearerr(FILE *pf); -int nw_fflush(FILE *pf); -long nw_ftell(FILE *pf); -int nw_fseek(FILE *pf,long offset,int origin); -int nw_fgetpos(FILE *pf,fpos_t *p); -int nw_fsetpos(FILE *pf,const fpos_t *p); -void nw_rewind(FILE *pf); -FILE* nw_tmpfile(void); - -void nw_abort(void); - -int nw_stat(const char *name,struct stat *sbufptr); - -FILE* nw_Popen(char* command, char* mode, int* e); -int nw_Pclose(FILE* file, int* e); -int nw_Pipe(int* a, int* e); - -int nw_rename( const char *oname, const char *newname); -//int nw_setmode( int fd, int mode); -int nw_setmode( FILE *fp, int mode); -long nw_lseek( int fd, long offset, int origin); -int nw_dup( int fd); -int nw_dup2(int h1, int h2); -int nw_open(const char *path, int oflag,...); -int nw_close(int fd); -int nw_read(int fd, void *buf, unsigned int cnt); -int nw_write(int fd, const void *buf, unsigned int cnt); - -int nw_spawnvp(int mode, char *cmdname, char **argv); - -int nw_rmdir(const char *dir); -int nw_chdir(const char *dir); -int nw_flock(int fd, int oper); - -int nw_execv(char *cmdname, char **argv); -int nw_execvp(char *cmdname, char **argv); - -void nw_setbuf(FILE *pf, char *buf); -int nw_setvbuf(FILE *pf, char *buf, int type, size_t size); -char* nw_fgets(char *s, int n, FILE *pf); - -int nw_fgetc(FILE *pf); - -int nw_putc(int c, FILE *pf); - -int nw_open_osfhandle(long handle, int flags); -long nw_get_osfhandle(int fd); - -DIR* nw_opendir(char *filename); -struct direct* nw_readdir(DIR *dirp); -long nw_telldir(DIR *dirp); -void nw_seekdir(DIR *dirp, long loc); -void nw_rewinddir(DIR *dirp); -int nw_closedir(DIR *dirp); - -unsigned int nw_sleep(unsigned int); -int nw_times(struct tms *timebuf); - -int nw_stat(const char *path, struct stat *buf); -int nw_link(const char *oldname, const char *newname); -int nw_unlink(const char *f); -int nw_utime(const char *f, struct utimbuf *t); -DllExport int nw_uname(struct utsname *n); - -int nw_wait(int *status); - -int nw_waitpid(int pid, int *status, int flags); -int nw_kill(int pid, int sig); - -unsigned long nw_os_id(void); -void* nw_dynaload(const char*filename); - -int nw_access(const char *path, int mode); -int nw_chmod(const char *path, int mode); -int nw_getpid(void); - -char * nw_crypt(const char *txt, const char *salt); - -int nw_isatty(int fd); -char* nw_mktemp(char *Template); -int nw_chsize(int handle, long size); -END_EXTERN_C - - -/* - * the following six(6) is #define in stdio.h - */ -#ifndef WIN32IO_IS_STDIO -#undef environ -#undef feof -#undef pipe -#undef pause -#undef sleep -#undef times -#undef alarm -#undef ioctl -#undef unlink -#undef utime -#undef uname -#undef wait - - -#define environ (*nw_environ()) - - -#if !defined(MYMALLOC) || !defined(PERL_CORE) - -#endif - - -#endif /* WIN32IO_IS_STDIO */ -#endif /* NW5IOP_H */ - diff --git a/gnu/usr.bin/perl/NetWare/nw5sck.c b/gnu/usr.bin/perl/NetWare/nw5sck.c deleted file mode 100644 index 35dee92bf12..00000000000 --- a/gnu/usr.bin/perl/NetWare/nw5sck.c +++ /dev/null @@ -1,313 +0,0 @@ - -/* - * Copyright © 2001 Novell, Inc. All Rights Reserved. - * - * You may distribute under the terms of either the GNU General Public - * License or the Artistic License, as specified in the README file. - * - */ - -/* - * FILENAME : nw5sck.c - * DESCRIPTION : Socket related functions. - * Author : SGP - * Date : January 2001. - * Date Modified: June 26th 2001. - */ - - - -#include "EXTERN.h" -#include "perl.h" - -#include "nw5iop.h" -#include "nw5sck.h" -#include -#include - -// This is defined here since arpa\inet.h defines this array as an extern, -// and arpa\inet.h gets included by the inet_ntoa call. -char nwinet_scratch[18] = {'\0'}; - - -u_long -nw_htonl(u_long hostlong) -{ - return htonl(hostlong); -} - -u_short -nw_htons(u_short hostshort) -{ - return htons(hostshort); -} - -u_long -nw_ntohl(u_long netlong) -{ - return ntohl(netlong); -} - -u_short -nw_ntohs(u_short netshort) -{ - return ntohs(netshort); -} - -SOCKET -nw_accept(SOCKET s, struct sockaddr *addr, int *addrlen) -{ - return ((SOCKET)(accept(s, addr, addrlen))); -} - -int -nw_bind(SOCKET s, const struct sockaddr *addr, int addrlen) -{ - return ((int)bind(s, (struct sockaddr *)addr, addrlen)); - -} - -int -nw_connect(SOCKET s, const struct sockaddr *addr, int addrlen) -{ - return((int)connect(s, (struct sockaddr *)addr, addrlen)); -} - -void -nw_endhostent() -{ - endhostent(); -} - -void -nw_endnetent() -{ - endnetent(); -} - -void -nw_endprotoent() -{ - endprotoent(); -} - -void -nw_endservent() -{ - endservent(); -} - -struct hostent * -nw_gethostent() -{ - return(gethostent()); -} - -struct netent * -nw_getnetent(void) -{ - return ((struct netent *) getnetent()); -} - -struct protoent * -nw_getprotoent(void) -{ - return ((struct protoent *) getprotoent()); -} - -struct hostent * -nw_gethostbyname(const char *name) -{ - return(gethostbyname((char*)name)); -} - -int -nw_gethostname(char *name, int len) -{ - return(gethostname(name, len)); -} - -struct hostent * -nw_gethostbyaddr(const char *addr, int len, int type) -{ - return(gethostbyaddr((char*)addr, len, type)); -} - -struct netent * -nw_getnetbyaddr(long net, int type) -{ - return(getnetbyaddr(net,type)); -} - -struct netent * -nw_getnetbyname(char *name) -{ - return (struct netent *)getnetbyname(name); -} - -int -nw_getpeername(SOCKET s, struct sockaddr *addr, int *addrlen) -{ - return((int)getpeername(s, addr, addrlen)); -} - -struct protoent * -nw_getprotobyname(const char *name) -{ - return ((struct protoent *)getprotobyname((char*)name)); -} - -struct protoent * -nw_getprotobynumber(int num) -{ - return ((struct protoent *)getprotobynumber(num)); -} - -struct servent * -nw_getservbyname(const char *name, const char *proto) -{ - return (struct servent *)getservbyname((char*)name, (char*)proto); -} - - -struct servent * -nw_getservbyport(int port, const char *proto) -{ - return (struct servent *)getservbyport(port, (char*)proto); -} - -struct servent * -nw_getservent(void) -{ - return (struct servent *) getservent(); -} - -void -nw_sethostent(int stayopen) -{ -#ifdef HAS_SETHOSTENT - sethostent(stayopen); -#endif -} - -void -nw_setnetent(int stayopen) -{ -#ifdef HAS_SETNETENT - setnetent(stayopen); -#endif -} - -void -nw_setprotoent(int stayopen) -{ -#ifdef HAS_SETPROTENT - setprotoent(stayopen); -#endif -} - -void -nw_setservent(int stayopen) -{ -#ifdef HAS_SETSERVENT - setservent(stayopen); -#endif -} - -int -nw_setsockopt(SOCKET s, int level, int optname, const char* optval, int optlen) -{ - return setsockopt(s, level, optname, (char*)optval, optlen); -} - -int -nw_getsockname(SOCKET s, struct sockaddr *addr, int *addrlen) -{ - return getsockname(s, addr, addrlen); -} - -int -nw_getsockopt(SOCKET s, int level, int optname, char *optval, int *optlen) -{ - return ((int)getsockopt(s, level, optname, optval, optlen)); -} - -unsigned long -nw_inet_addr(const char *cp) -{ - return inet_addr((char*)cp); -} - -char * -nw_inet_ntoa(struct in_addr in) -{ - return inet_ntoa(in); -} - -SOCKET -nw_socket(int af, int type, int protocol) -{ - SOCKET s; - -#ifndef USE_SOCKETS_AS_HANDLES - s = socket(af, type, protocol); -#else - if((s = socket(af, type, protocol)) == INVALID_SOCKET) - //errno = WSAGetLastError(); - else - s = s; -#endif /* USE_SOCKETS_AS_HANDLES */ - - return s; -} - -int -nw_listen(SOCKET s, int backlog) -{ - return(listen(s, backlog)); -} - -int -nw_send(SOCKET s, const char *buf, int len, int flags) -{ - return(send(s,(char*)buf,len,flags)); -} - -int -nw_recv(SOCKET s, char *buf, int len, int flags) -{ - return (recv(s, buf, len, flags)); -} - -int -nw_sendto(SOCKET s, const char *buf, int len, int flags, - const struct sockaddr *to, int tolen) -{ - return(sendto(s, (char*)buf, len, flags, (struct sockaddr *)to, tolen)); -} - -int -nw_recvfrom(SOCKET s, char *buf, int len, int flags, struct sockaddr *from, int *fromlen) -{ - int r; - int frombufsize = *fromlen; - - r = recvfrom(s, buf, len, flags, from, fromlen); - //Not sure if the is required - chksgp - if (r && frombufsize == *fromlen) - (void)nw_getpeername(s, from, fromlen); - return r; -} - -int -nw_select(int nfds, fd_set* rd, fd_set* wr, fd_set* ex, const struct timeval* timeout) -{ - return(select(nfds, rd, wr, ex, (struct timeval*)timeout)); -} - -int -nw_shutdown(SOCKET s, int how) -{ - return (shutdown(s, how)); -} - diff --git a/gnu/usr.bin/perl/NetWare/nw5sck.h b/gnu/usr.bin/perl/NetWare/nw5sck.h deleted file mode 100644 index afe2f9369c2..00000000000 --- a/gnu/usr.bin/perl/NetWare/nw5sck.h +++ /dev/null @@ -1,130 +0,0 @@ - -/* - * Copyright © 2001 Novell, Inc. All Rights Reserved. - * - * You may distribute under the terms of either the GNU General Public - * License or the Artistic License, as specified in the README file. - * - */ - -/* - * FILENAME : nw5sck.h - * DESCRIPTION : Socket related functions. - * Author : SGP - * Date : January 2001. - * Date Modified: June 26th 2001. - * - */ - - - -#ifndef _INC_NW_SOCKET -#define _INC_NW_SOCKET - - -#include -#ifdef __cplusplus -extern "C" { -#endif - -typedef u_int SOCKET; - -struct nwsockent local_context; - -# undef gethostbyname -# undef gethostbyaddr - -# undef endhostent -# undef endnetent -# undef endprotoent -# undef endservent -# undef gethostent -# undef getprotoent -# undef getnetbyaddr -# undef getnetbyname -# undef gethostbyaddr -# undef getprotobyname -# undef getservbyname -# undef getservbyport -# undef getservent -# undef sethostent -# undef setnetent -# undef setprotoent -# undef setservent - -# define gethostbyname(name) NetDBgethostbyname(&local_context,name) -# define gethostbyaddr(a,l,t) NetDBgethostbyaddr(&local_context,a,l,t) - -# define endhostent() NetDBendhostent(&local_context) -# define endnetent() NWendnetent(&local_context) -# define endprotoent() NWendprotoent(&local_context) -# define endservent() NWendservent(&local_context) -# define gethostent() NetDBgethostent(&local_context,NULL) -# define getprotoent() NWgetprotoent(&local_context) -# define gethostbyaddr(a,l,t) NetDBgethostbyaddr(&local_context,a,l,t) -# define getnetbyaddr(net,typ) NWgetnetbyaddr(&local_context,net,typ) -# define getnetbyname(name) NWgetnetbyname(&local_context,name) -# define getprotobyname(name) NWgetprotobyname(&local_context,name) -# define getservbyname(n,p) NWgetservbyname(&local_context,n,p) -# define getservbyport(n,p) NWgetservbyport(&local_context,n,p) -# define getservent() NWgetservent(&local_context) -# define sethostent() NWsethostent(&local_context, stayopen) -# define setnetent() NWsetnetent(&local_context, stayopen) -# define setprotoent() NWsetprotoent(&local_context, stayopen) -# define setservent() NWsetservent(&local_context, stayopen) - -u_long nw_htonl(u_long hostlong); -u_short nw_htons(u_short hostshort); -u_long nw_ntohl(u_long netlong); -u_short nw_ntohs(u_short netshort); - -SOCKET nw_accept(SOCKET s, struct sockaddr *addr, int *addrlen); -int nw_bind(SOCKET s, const struct sockaddr *addr, int addrlen); -int nw_connect(SOCKET s, const struct sockaddr *addr, int addrlen); - -struct hostent * nw_gethostbyname(const char * name); -struct hostent * nw_gethostbyaddr(const char *addr, int len, int type); -int nw_gethostname(char *name, int len); -struct netent * nw_getnetbyaddr(long net, int type); -struct netent *nw_getnetbyname(char *name); -int nw_getpeername(SOCKET s, struct sockaddr *addr, int *addrlen); -struct protoent * nw_getprotobyname(const char *name); -struct protoent * nw_getprotobynumber(int num); -struct servent * nw_getservbyname(const char *name, const char *proto); -struct servent * nw_getservbyport(int port, const char *proto); -struct servent * nw_getservent(void); -void nw_sethostent(int stayopen); -void nw_setnetent(int stayopen); -void nw_setprotoent(int stayopen); -void nw_setservent(int stayopen); -int nw_setsockopt(SOCKET s, int level, int optname, const char* optval, int optlen); - -int nw_getsockname(SOCKET s, struct sockaddr *addr, int *addrlen); -int nw_getsockopt(SOCKET s, int level, int optname, char *optval, int *optlen); - -unsigned long nw_inet_addr(const char *cp); -char * nw_inet_ntoa(struct in_addr in); - -void nw_endhostent(); -void nw_endnetent(); -void nw_endprotoent(); -void nw_endservent(); -struct hostent *nw_gethostent(); -struct netent *nw_getnetent(); -struct protoent * nw_getprotoent(); - -SOCKET nw_socket(int af, int type, int protocol); -int nw_listen(SOCKET s, int backlog); -int nw_send(SOCKET s, const char *buf, int len, int flags); -int nw_recv(SOCKET s, char *buf, int len, int flags); -int nw_sendto(SOCKET s, const char *buf, int len, int flags,const struct sockaddr *to, int tolen); -int nw_recvfrom(SOCKET s, char *buf, int len, int flags, struct sockaddr *from, int *fromlen); -int nw_select(int nfds, fd_set* rd, fd_set* wr, fd_set* ex, const struct timeval* timeout); -int nw_shutdown(SOCKET s, int how); -#ifdef __cplusplus -} -#endif - - -#endif // _INC_NW_SOCKET - diff --git a/gnu/usr.bin/perl/NetWare/nw5thread.c b/gnu/usr.bin/perl/NetWare/nw5thread.c deleted file mode 100644 index abedb5c2da1..00000000000 --- a/gnu/usr.bin/perl/NetWare/nw5thread.c +++ /dev/null @@ -1,80 +0,0 @@ - -/* - * Copyright © 2001 Novell, Inc. All Rights Reserved. - * - * You may distribute under the terms of either the GNU General Public - * License or the Artistic License, as specified in the README file. - * - */ - -/* - * FILENAME : nw5thread.c - * DESCRIPTION : Thread related functions. - * Author : SGP - * Date : January 2001. - * - */ - - - -#include "EXTERN.h" -#include "perl.h" - -//For Thread Local Storage -#include "win32ish.h" // For "BOOL", "TRUE" and "FALSE" -#include "nwtinfo.h" - -#ifdef USE_DECLSPEC_THREAD -__declspec(thread) void *PL_current_context = NULL; -#endif - - -void -Perl_set_context(void *t) -{ -#if defined(USE_ITHREADS) -# ifdef USE_DECLSPEC_THREAD - Perl_current_context = t; -# else - fnAddThreadCtx(PL_thr_key, t); -# endif -#endif -} - - -void * -Perl_get_context(void) -{ -#if defined(USE_ITHREADS) -# ifdef USE_DECLSPEC_THREAD - return Perl_current_context; -# else - return(fnGetThreadCtx(PL_thr_key)); -# endif -#else - return NULL; -#endif -} - - -//To Remove the Thread Context stored during Perl_set_context -BOOL -Remove_Thread_Ctx(void) -{ -#if defined(USE_ITHREADS) -# ifdef USE_DECLSPEC_THREAD - return TRUE; -# else - return(fnRemoveThreadCtx(PL_thr_key)); -# endif -# else - return TRUE; -#endif -} - - -//PL_thr_key - Not very sure if this is global or per thread. When multiple scripts -//run simultaneously on NetWare, this will give problems. Hence in nwtinfo.c, the -//current thread id is used as the TLS index & PL_thr_key is not used. -//This has to be checked???? - sgp - diff --git a/gnu/usr.bin/perl/NetWare/nw5thread.h b/gnu/usr.bin/perl/NetWare/nw5thread.h deleted file mode 100644 index b1a2534b683..00000000000 --- a/gnu/usr.bin/perl/NetWare/nw5thread.h +++ /dev/null @@ -1,181 +0,0 @@ - -/* - * Copyright © 2001 Novell, Inc. All Rights Reserved. - * - * You may distribute under the terms of either the GNU General Public - * License or the Artistic License, as specified in the README file. - * - */ - -/* - * FILENAME : nw5thread.h - * DESCRIPTION : Thread related functions. - * Author : SGP - * Date : January 2001. - * - */ - - - -#ifndef _NW5THREAD_H -#define _NW5THREAD_H - - -#include - -#include "netware.h" - -typedef long perl_key; - -// The line below is just a definition to avoid compilation error. -// It is not being used anywhere. -// Ananth, 3 Sept 2001 -typedef struct nw_cond { long waiters; unsigned int sem; } perl_cond; - -#if defined (USE_ITHREADS) && defined(MPK_ON) -#ifdef __cplusplus -extern "C" -{ -#endif - #include - #include - #define kSUCCESS (0) - #define ERROR_INVALID_MUTEX (0x1010) - -#ifdef __cplusplus -} -#endif -#undef WORD -//On NetWare, since the NLM will be resident, only once the MUTEX_INIT gets called and -//this will be freed when the script terminates. But when a new script is executed, -//then MUTEX_LOCK will fail since it is already freed. Even if this problem is fixed -//by not freeing the mutex when script terminates but when the NLM unloads, there will -//still be problems when multiple scripts are running simultaneously in a multi-processor -//machine - sgp -typedef MUTEX perl_mutex; -# define MUTEX_INIT(m) \ - STMT_START { \ - /*if ((*(m) = kMutexAlloc("NetWarePerlMutex")) == NULL) */\ - /*Perl_croak_nocontext("panic: MUTEX_ALLOC"); */\ - /*ConsolePrintf("Mutex Init %d\n",*(m)); */\ - } STMT_END - -# define MUTEX_LOCK(m) \ - STMT_START { \ - /*ConsolePrintf("Mutex lock %d\n",*(m)); */\ - /*if (kMutexLock(*(m)) == ERROR_INVALID_MUTEX) */\ - /*Perl_croak_nocontext("panic: MUTEX_LOCK"); */\ - } STMT_END - -# define MUTEX_UNLOCK(m) \ - STMT_START { \ - /*ConsolePrintf("Mutex unlock %d\n",*(m)); */\ - /*if (kMutexUnlock(*(m)) != kSUCCESS) \ - Perl_croak_nocontext("panic: MUTEX_UNLOCK"); */\ - } STMT_END - -# define MUTEX_DESTROY(m) \ - STMT_START { \ - /*ConsolePrintf("Mutex Destroy %d\n",*(m)); */\ - /*if (kMutexWaitCount(*(m)) == 0 ) */\ - /*{ */\ - /*PERL_SET_INTERP(NULL); *//*newly added CHKSGP???*/ \ - /*if (kMutexFree(*(m)) != kSUCCESS) */ \ - /*Perl_croak_nocontext("panic: MUTEX_FREE"); */\ - /*} */\ - } STMT_END - -#else -typedef unsigned long perl_mutex; -# define MUTEX_INIT(m) -# define MUTEX_LOCK(m) -# define MUTEX_UNLOCK(m) -# define MUTEX_DESTROY(m) -#endif - -/* These macros assume that the mutex associated with the condition - * will always be held before COND_{SIGNAL,BROADCAST,WAIT,DESTROY}, - * so there's no separate mutex protecting access to (c)->waiters - */ -//For now let us just see when this happens -sgp. -#define COND_INIT(c) \ - STMT_START { \ - /*ConsolePrintf("In COND_INIT\n"); */\ - } STMT_END - -/* (c)->waiters = 0; \ - (c)->sem = OpenLocalSemaphore (0); \ - if ((c)->sem == NULL) \ - Perl_croak_nocontext("panic: COND_INIT (%ld)",errno); \*/ - -#define COND_SIGNAL(c) \ - STMT_START { \ - /*ConsolePrintf("In COND_SIGNAL\n"); */\ - } STMT_END -/*if ((c)->waiters > 0 && \ - SignalLocalSemaphore((c)->sem) != 0) \ - Perl_croak_nocontext("panic: COND_SIGNAL (%ld)",errno); \*/ - -#define COND_BROADCAST(c) \ - STMT_START { \ - /*ConsolePrintf("In COND_BROADCAST\n"); */\ - } STMT_END - - /*if ((c)->waiters > 0 ) { \ - int count; \ - for(count=0; count<(c)->waiters; count++) { \ - if(SignalLocalSemaphore((c)->sem) != 0) \ - Perl_croak_nocontext("panic: COND_BROADCAST (%ld)",GetLastError());\ - } \ - } \*/ -#define COND_WAIT(c, m) \ - STMT_START { \ - /*ConsolePrintf("In COND_WAIT\n"); */\ - } STMT_END - - -#define COND_DESTROY(c) \ - STMT_START { \ - /*ConsolePrintf("In COND_DESTROY\n"); */\ - } STMT_END - -/* (c)->waiters = 0; \ - if (CloseLocalSemaphore((c)->sem) != 0) \ - Perl_croak_nocontext("panic: COND_DESTROY (%ld)",errno); \*/ - -#if 0 -#define DETACH(t) \ - STMT_START { \ - if (CloseHandle((t)->self) == 0) { \ - MUTEX_UNLOCK(&(t)->mutex); \ - Perl_croak_nocontext("panic: DETACH"); \ - } \ - } STMT_END -#endif //#if 0 - -//Following has to be defined CHKSGP -#if defined(PERLDLL) && defined(USE_DECLSPEC_THREAD) -extern __declspec(thread) void *PL_current_context; -#define PERL_SET_CONTEXT(t) (PL_current_context = t) -#define PERL_GET_CONTEXT PL_current_context -#else -#define PERL_GET_CONTEXT Perl_get_context() -#define PERL_SET_CONTEXT(t) Perl_set_context(t) -#endif - -//Check the following, will be used in Thread extension - CHKSGP -#define THREAD_RET_TYPE unsigned __stdcall -#define THREAD_RET_CAST(p) ((unsigned)(p)) - -#define INIT_THREADS NOOP - -//Ideally this should have been PL_thr_key = fnInitializeThreadCtx(); -//See the comment at the end of file nw5thread.c as to why PL_thr_key is not assigned - sgp -#define ALLOC_THREAD_KEY \ - STMT_START { \ - fnInitializeThreadCtx(); \ - } STMT_END - - -#endif /* _NW5THREAD_H */ - diff --git a/gnu/usr.bin/perl/NetWare/nwhashcls.cpp b/gnu/usr.bin/perl/NetWare/nwhashcls.cpp deleted file mode 100644 index aaf5a5c0be6..00000000000 --- a/gnu/usr.bin/perl/NetWare/nwhashcls.cpp +++ /dev/null @@ -1,269 +0,0 @@ -/* - * Copyright © 2001 Novell, Inc. All Rights Reserved. - * - * You may distribute under the terms of either the GNU General Public - * License or the Artistic License, as specified in the README file. - * - */ - -/* - * FILENAME : hashcls.cpp - * DESCRIPTION : Implementation of Equivalent of Hash class, NWPerlHashList and - NWPerlKeyHashList - * - * Author : Srivathsa M - * Date Created : July 26 2001 - */ - -#include "nwhashcls.h" - -NWPerlHashList::NWPerlHashList() -{ - //initialize the hash list to null - for(int i=0;idata = ldata; - list->next = NULL; - unsigned long Bucket = ((unsigned long)ldata) % BUCKET_SIZE; - if (MemListHash[Bucket]) { - //Elements existing, insert at the beginning - list->next = MemListHash[Bucket]; - MemListHash[Bucket] = list; - DEBUGPRINT("Inserted to %d\n",Bucket); - } else { - //First element - MemListHash[Bucket] = list; - DEBUGPRINT("Inserted first time to %d\n",Bucket); - } - return 1; - } else - return 0; -} - -int -NWPerlHashList::remove(void *ldata) -{ - unsigned long Bucket = ((unsigned long)ldata) % BUCKET_SIZE; - HASHNODE *list = MemListHash[Bucket]; - if (list) { - int found = 0; - HASHNODE *next =list; - HASHNODE *prev =NULL; - do - { - if (list->data != ldata) { - prev = list; - list = list->next; - } - else { - found = 1; - next = list->next; - /*if(list->data) - { - free(list->data); - list->data = NULL; - }*/ - //ConsolePrintf ("A:%x;",list->data); - delete list; - list = NULL; - if (prev) { - prev->next = next; - } else { - MemListHash[Bucket]=next; - } - DEBUGPRINT("Removed element from %d\n",Bucket); - } - ThreadSwitchWithDelay(); - } while(list && !found); -// if (!found) -// ConsolePrintf("Couldn;t find %x in Bucket %d\n",ldata,Bucket); - return(found); - } - return 1; -} - - -void NWPerlHashList::forAll( void (*user_fn)(void *, void*), void *data ) const -{ - - for(int i=0; inext; - if(next->data) - { - DEBUGPRINT("- To remove element from bucket %d\n",i); - user_fn( next->data, data ); - } - next = temp; - ThreadSwitchWithDelay(); - } - } - return ; -}; - -void NWPerlHashList::removeAll( ) const -{ - - for(int i=0; inext; - delete next; - next = temp; - ThreadSwitchWithDelay(); - } - } - return ; -}; - -/** -NWPerlKeyHashList::NWPerlKeyHashList() -{ - //initialize the hash list to null - for(int i=0;ikey = key; - list->data = ldata; - list->next = NULL; - unsigned long Bucket = ((unsigned long)key) % BUCKET_SIZE; - if (MemListHash[Bucket]) { - //Elements existing, insert at the beginning - list->next = MemListHash[Bucket]; - MemListHash[Bucket] = list; - DEBUGPRINT("Inserted to %d\n",Bucket); - } else { - //First element - MemListHash[Bucket] = list; - DEBUGPRINT("Inserted first time to %d\n",Bucket); - } - return 1; - } else - return 0; -} - -int -NWPerlKeyHashList::remove(void *key) -{ - unsigned long Bucket = ((unsigned long)key) % BUCKET_SIZE; - KEYHASHNODE *list = MemListHash[Bucket]; - if (list) { - int found = 0; - KEYHASHNODE *next =list; - KEYHASHNODE *prev =NULL; - do - { - if (list->key != key) { - prev = list; - list = list->next; - } - else { - found = 1; - next = list->next; - delete list; - list = NULL; - if (prev) { - prev->next = next; - } else { - MemListHash[Bucket]=next; - } - DEBUGPRINT("Removed element from %d\n",Bucket); - } - } while(list && !found); -// if (!found) -// ConsolePrintf("Couldn;t find %x in Bucket %d\n",key,Bucket); - return(found); - } - return 1; -} - - -void NWPerlKeyHashList::forAll( void (*user_fn)(void *, void*), void *data ) const -{ - - for(int i=0; inext; - if(next->data) - { - DEBUGPRINT("- To remove element from bucket %d\n",i); - user_fn( next->data, data ); - } - next = temp; - ThreadSwitchWithDelay(); - } - } - return ; -}; - -int NWPerlKeyHashList::find(void *key,void **pData) -{ - for(int i=0; ikey==key) - { - *pData=next->data; - return 1; - } - next = next->next; - ThreadSwitchWithDelay(); - } - } - return 0; -} - -void NWPerlKeyHashList::removeAll( ) const -{ - - for(int i=0; inext; - delete next; - next = temp; - ThreadSwitchWithDelay(); - } - } - return ; -}; -**/ diff --git a/gnu/usr.bin/perl/NetWare/nwhashcls.h b/gnu/usr.bin/perl/NetWare/nwhashcls.h deleted file mode 100644 index 55ff2002203..00000000000 --- a/gnu/usr.bin/perl/NetWare/nwhashcls.h +++ /dev/null @@ -1,79 +0,0 @@ - -/* - * Copyright © 2001 Novell, Inc. All Rights Reserved. - * - * You may distribute under the terms of either the GNU General Public - * License or the Artistic License, as specified in the README file. - * - */ - -/* - * FILENAME : nwhashcls.h - * DESCRIPTION : Equivalent of Hash class - * - * Author : Srivathsa M - * Date Created : July 26 2001 - */ -#include -#include -#include - -#define BUCKET_SIZE 37 - -struct HASHNODE -{ - void *data; - struct HASHNODE *next; -}; - -typedef void (*HASHFORALLFUN)(void *, void *); - -class NWPerlHashList -{ -private: - HASHNODE* MemListHash[BUCKET_SIZE]; - void removeAll() const; - -public: - ~NWPerlHashList(); - NWPerlHashList(); - int insert(void *lData); - int remove(void *lData); - void forAll( void (*)(void *, void*), void * ) const; -}; - -struct KEYHASHNODE -{ - void *key; - void *data; - KEYHASHNODE *next; -}; - -/** -typedef void (*KEYHASHFORALLFUN)(void *, void *); - -class NWPerlKeyHashList -{ -private: - KEYHASHNODE* MemListHash[BUCKET_SIZE]; - void removeAll() const; - -public: - ~NWPerlKeyHashList(); - NWPerlKeyHashList(); - int insert(void *key, void *lData); - int remove(void *key); - void forAll( void (*)(void *, void*), void * ) const; - int find(void *key, void **pData); -}; -**/ - -//#define DEBUG_HASH 1 - -#ifdef DEBUG_HASH -#define DEBUGPRINT ConsolePrintf -#else -#define DEBUGPRINT -#endif - - diff --git a/gnu/usr.bin/perl/NetWare/nwperlhost.h b/gnu/usr.bin/perl/NetWare/nwperlhost.h deleted file mode 100644 index c69e554489b..00000000000 --- a/gnu/usr.bin/perl/NetWare/nwperlhost.h +++ /dev/null @@ -1,1699 +0,0 @@ - -/* - * Copyright © 2001 Novell, Inc. All Rights Reserved. - * - * You may distribute under the terms of either the GNU General Public - * License or the Artistic License, as specified in the README file. - * - */ - -/* - * FILENAME : nwperlhost.h - * DESCRIPTION : This is modelled on the perlhost.h module of Win32 port. - * This is the host that include all the functions for running Perl within a class. - * Author : SGP, HYAK - * Date : January 2001. - * - */ - - - -#ifndef ___NWPerlHost_H___ -#define ___NWPerlHost_H___ - - -#include "iperlsys.h" -#include "nwvmem.h" - -#include "nw5sck.h" -#include "netware.h" - -#define LPBYTE unsigned char * - -#if !defined(PERL_OBJECT) -START_EXTERN_C -#endif /* PERL_OBJECT */ - -extern int do_spawn2(char *cmd, int exectype); -extern int do_aspawn(void *vreally, void **vmark, void **vsp); -extern void Perl_init_os_extras(void); - -#if !defined(PERL_OBJECT) -END_EXTERN_C -#endif /* PERL_OBJECT */ - -#ifdef PERL_OBJECT -extern int g_do_aspawn(void *vreally, void **vmark, void **vsp); -#define do_aspawn g_do_aspawn -#endif /* PERL_OBJECT */ - -class CPerlHost -{ -public: - CPerlHost(void); - CPerlHost(struct IPerlMem** ppMem, struct IPerlMem** ppMemShared, - struct IPerlMem** ppMemParse, struct IPerlEnv** ppEnv, - struct IPerlStdIO** ppStdIO, struct IPerlLIO** ppLIO, - struct IPerlDir** ppDir, struct IPerlSock** ppSock, - struct IPerlProc** ppProc); - CPerlHost(const CPerlHost& host); - virtual ~CPerlHost(void); - - static CPerlHost* IPerlMem2Host(struct IPerlMem* piPerl); - static CPerlHost* IPerlMemShared2Host(struct IPerlMem* piPerl); - static CPerlHost* IPerlMemParse2Host(struct IPerlMem* piPerl); - static CPerlHost* IPerlEnv2Host(struct IPerlEnv* piPerl); - static CPerlHost* IPerlStdIO2Host(struct IPerlStdIO* piPerl); - static CPerlHost* IPerlLIO2Host(struct IPerlLIO* piPerl); - static CPerlHost* IPerlDir2Host(struct IPerlDir* piPerl); - static CPerlHost* IPerlSock2Host(struct IPerlSock* piPerl); - static CPerlHost* IPerlProc2Host(struct IPerlProc* piPerl); - -/* IPerlMem */ - inline void* Malloc(size_t size) { return m_pVMem->Malloc(size); }; - inline void* Realloc(void* ptr, size_t size) { return m_pVMem->Realloc(ptr, size); }; - inline void Free(void* ptr) { m_pVMem->Free(ptr); }; - inline void* Calloc(size_t num, size_t size){ return m_pVMem->Calloc(num, size); }; - -/* IPerlMemShared */ - inline void* MallocShared(size_t size) - { - return m_pVMemShared->Malloc(size); - }; - inline void* ReallocShared(void* ptr, size_t size) { return m_pVMemShared->Realloc(ptr, size); }; - inline void FreeShared(void* ptr) { m_pVMemShared->Free(ptr); }; - inline void* CallocShared(size_t num, size_t size) - { - size_t count = num*size; - void* lpVoid = MallocShared(count); - - return lpVoid; - }; - -/* IPerlMemParse */ - inline void* MallocParse(size_t size) { return m_pVMemParse->Malloc(size); }; - inline void* ReallocParse(void* ptr, size_t size) { return m_pVMemParse->Realloc(ptr, size); }; - inline void FreeParse(void* ptr) { m_pVMemParse->Free(ptr); }; - inline void* CallocParse(size_t num, size_t size) - { - size_t count = num*size; - void* lpVoid = MallocParse(count); - - return lpVoid; - }; - -/* IPerlEnv */ - char *Getenv(const char *varname); - int Putenv(const char *envstring); - inline char *Getenv(const char *varname, unsigned long *len) - { - *len = 0; - char *e = Getenv(varname); - if (e) - *len = strlen(e); - return e; - } - - -public: - -/* IPerlDIR */ - - -/* IPerllProc */ - void Abort(void); - void Exit(int status); - void _Exit(int status); - int Execl(const char *cmdname, const char *arg0, const char *arg1, const char *arg2, const char *arg3); - int Execv(const char *cmdname, const char *const *argv); - int Execvp(const char *cmdname, const char *const *argv); - -public: - - struct IPerlMem m_hostperlMem; - struct IPerlMem m_hostperlMemShared; - struct IPerlMem m_hostperlMemParse; - struct IPerlEnv m_hostperlEnv; - struct IPerlStdIO m_hostperlStdIO; - struct IPerlLIO m_hostperlLIO; - struct IPerlDir m_hostperlDir; - struct IPerlSock m_hostperlSock; - struct IPerlProc m_hostperlProc; - - struct IPerlMem* m_pHostperlMem; - struct IPerlMem* m_pHostperlMemShared; - struct IPerlMem* m_pHostperlMemParse; - struct IPerlEnv* m_pHostperlEnv; - struct IPerlStdIO* m_pHostperlStdIO; - struct IPerlLIO* m_pHostperlLIO; - struct IPerlDir* m_pHostperlDir; - struct IPerlSock* m_pHostperlSock; - struct IPerlProc* m_pHostperlProc; - -protected: - - VMem* m_pVMem; - VMem* m_pVMemShared; - VMem* m_pVMemParse; -}; - - -#define STRUCT2PTR(x, y) (CPerlHost*)(((LPBYTE)x)-offsetof(CPerlHost, y)) - -inline CPerlHost* IPerlMem2Host(struct IPerlMem* piPerl) -{ - return STRUCT2PTR(piPerl, m_hostperlMem); -} - -inline CPerlHost* IPerlMemShared2Host(struct IPerlMem* piPerl) -{ - return STRUCT2PTR(piPerl, m_hostperlMemShared); -} - -inline CPerlHost* IPerlMemParse2Host(struct IPerlMem* piPerl) -{ - return STRUCT2PTR(piPerl, m_hostperlMemParse); -} - -inline CPerlHost* IPerlEnv2Host(struct IPerlEnv* piPerl) -{ - return STRUCT2PTR(piPerl, m_hostperlEnv); -} - -inline CPerlHost* IPerlStdIO2Host(struct IPerlStdIO* piPerl) -{ - return STRUCT2PTR(piPerl, m_hostperlStdIO); -} - -inline CPerlHost* IPerlLIO2Host(struct IPerlLIO* piPerl) -{ - return STRUCT2PTR(piPerl, m_hostperlLIO); -} - -inline CPerlHost* IPerlDir2Host(struct IPerlDir* piPerl) -{ - return STRUCT2PTR(piPerl, m_hostperlDir); -} - -inline CPerlHost* IPerlSock2Host(struct IPerlSock* piPerl) -{ - return STRUCT2PTR(piPerl, m_hostperlSock); -} - -inline CPerlHost* IPerlProc2Host(struct IPerlProc* piPerl) -{ - return STRUCT2PTR(piPerl, m_hostperlProc); -} - - -#undef IPERL2HOST -#define IPERL2HOST(x) IPerlMem2Host(x) - - -/* IPerlMem */ -void* -PerlMemMalloc(struct IPerlMem* piPerl, size_t size) -{ - return IPERL2HOST(piPerl)->Malloc(size); -} -void* -PerlMemRealloc(struct IPerlMem* piPerl, void* ptr, size_t size) -{ - return IPERL2HOST(piPerl)->Realloc(ptr, size); -} -void -PerlMemFree(struct IPerlMem* piPerl, void* ptr) -{ - IPERL2HOST(piPerl)->Free(ptr); -} -void* -PerlMemCalloc(struct IPerlMem* piPerl, size_t num, size_t size) -{ - return IPERL2HOST(piPerl)->Calloc(num, size); -} - - -struct IPerlMem perlMem = -{ - PerlMemMalloc, - PerlMemRealloc, - PerlMemFree, - PerlMemCalloc, -}; - -#undef IPERL2HOST -#define IPERL2HOST(x) IPerlMemShared2Host(x) - -/* IPerlMemShared */ -void* -PerlMemSharedMalloc(struct IPerlMem* piPerl, size_t size) -{ - return IPERL2HOST(piPerl)->MallocShared(size); -} -void* -PerlMemSharedRealloc(struct IPerlMem* piPerl, void* ptr, size_t size) -{ - return IPERL2HOST(piPerl)->ReallocShared(ptr, size); -} -void -PerlMemSharedFree(struct IPerlMem* piPerl, void* ptr) -{ - IPERL2HOST(piPerl)->FreeShared(ptr); -} -void* -PerlMemSharedCalloc(struct IPerlMem* piPerl, size_t num, size_t size) -{ - return IPERL2HOST(piPerl)->CallocShared(num, size); -} - - -struct IPerlMem perlMemShared = -{ - PerlMemSharedMalloc, - PerlMemSharedRealloc, - PerlMemSharedFree, - PerlMemSharedCalloc, -}; - -#undef IPERL2HOST -#define IPERL2HOST(x) IPerlMemParse2Host(x) - -/* IPerlMemParse */ -void* -PerlMemParseMalloc(struct IPerlMem* piPerl, size_t size) -{ - return IPERL2HOST(piPerl)->MallocParse(size); -} -void* -PerlMemParseRealloc(struct IPerlMem* piPerl, void* ptr, size_t size) -{ - return IPERL2HOST(piPerl)->ReallocParse(ptr, size); -} -void -PerlMemParseFree(struct IPerlMem* piPerl, void* ptr) -{ - IPERL2HOST(piPerl)->FreeParse(ptr); -} -void* -PerlMemParseCalloc(struct IPerlMem* piPerl, size_t num, size_t size) -{ - return IPERL2HOST(piPerl)->CallocParse(num, size); -} - - -struct IPerlMem perlMemParse = -{ - PerlMemParseMalloc, - PerlMemParseRealloc, - PerlMemParseFree, - PerlMemParseCalloc, -}; - - -#undef IPERL2HOST -#define IPERL2HOST(x) IPerlEnv2Host(x) - -/* IPerlEnv */ -char* -PerlEnvGetenv(struct IPerlEnv* piPerl, const char *varname) -{ - return IPERL2HOST(piPerl)->Getenv(varname); -}; - -int -PerlEnvPutenv(struct IPerlEnv* piPerl, const char *envstring) -{ - return IPERL2HOST(piPerl)->Putenv(envstring); -}; - -char* -PerlEnvGetenv_len(struct IPerlEnv* piPerl, const char* varname, unsigned long* len) -{ - return IPERL2HOST(piPerl)->Getenv(varname, len); -} - -int -PerlEnvUname(struct IPerlEnv* piPerl, struct utsname *name) -{ - return nw_uname(name); -} - -void -PerlEnvClearenv(struct IPerlEnv* piPerl) -{ - // If removed, compilation fails while compiling CGI2Perl. -} - -void* -PerlEnvGetChildenv(struct IPerlEnv* piPerl) -{ - // If removed, compilation fails while compiling CGI2Perl. - return NULL; -} - -void -PerlEnvFreeChildenv(struct IPerlEnv* piPerl, void* childEnv) -{ - // If removed, compilation fails while compiling CGI2Perl. -} - -char* -PerlEnvGetChilddir(struct IPerlEnv* piPerl) -{ - // If removed, compilation fails while compiling CGI2Perl. - return NULL; -} - -void -PerlEnvFreeChilddir(struct IPerlEnv* piPerl, char* childDir) -{ - // If removed, compilation fails while compiling CGI2Perl. -} - -struct IPerlEnv perlEnv = -{ - PerlEnvGetenv, - PerlEnvPutenv, - PerlEnvGetenv_len, - PerlEnvUname, - PerlEnvClearenv, - PerlEnvGetChildenv, - PerlEnvFreeChildenv, - PerlEnvGetChilddir, - PerlEnvFreeChilddir, -}; - -#undef IPERL2HOST -#define IPERL2HOST(x) IPerlStdIO2Host(x) - -/* PerlStdIO */ -PerlIO* -PerlStdIOStdin(struct IPerlStdIO* piPerl) -{ - return (PerlIO*)nw_stdin(); -} - -PerlIO* -PerlStdIOStdout(struct IPerlStdIO* piPerl) -{ - return (PerlIO*)nw_stdout(); -} - -PerlIO* -PerlStdIOStderr(struct IPerlStdIO* piPerl) -{ - return (PerlIO*)nw_stderr(); -} - -PerlIO* -PerlStdIOOpen(struct IPerlStdIO* piPerl, const char *path, const char *mode) -{ - return (PerlIO*)nw_fopen(path, mode); -} - -int -PerlStdIOClose(struct IPerlStdIO* piPerl, PerlIO* pf) -{ - return nw_fclose(((FILE*)pf)); -} - -int -PerlStdIOEof(struct IPerlStdIO* piPerl, PerlIO* pf) -{ - return nw_feof((FILE*)pf); -} - -int -PerlStdIOError(struct IPerlStdIO* piPerl, PerlIO* pf) -{ - return nw_ferror((FILE*)pf); -} - -void -PerlStdIOClearerr(struct IPerlStdIO* piPerl, PerlIO* pf) -{ - nw_clearerr((FILE*)pf); -} - -int -PerlStdIOGetc(struct IPerlStdIO* piPerl, PerlIO* pf) -{ - return nw_getc((FILE*)pf); -} - -STDCHAR* -PerlStdIOGetBase(struct IPerlStdIO* piPerl, PerlIO* pf) -{ -#ifdef FILE_base - FILE *f = (FILE*)pf; - return FILE_base(f); -#else - return NULL; -#endif -} - -int -PerlStdIOGetBufsiz(struct IPerlStdIO* piPerl, PerlIO* pf) -{ -#ifdef FILE_bufsiz - FILE *f = (FILE*)pf; - return FILE_bufsiz(f); -#else - return (-1); -#endif -} - -int -PerlStdIOGetCnt(struct IPerlStdIO* piPerl, PerlIO* pf) -{ -#ifdef USE_STDIO_PTR - FILE *f = (FILE*)pf; - return FILE_cnt(f); -#else - return (-1); -#endif -} - -STDCHAR* -PerlStdIOGetPtr(struct IPerlStdIO* piPerl, PerlIO* pf) -{ -#ifdef USE_STDIO_PTR - FILE *f = (FILE*)pf; - return FILE_ptr(f); -#else - return NULL; -#endif -} - -char* -PerlStdIOGets(struct IPerlStdIO* piPerl, PerlIO* pf, char* s, int n) -{ - return nw_fgets(s, n, (FILE*)pf); -} - -int -PerlStdIOPutc(struct IPerlStdIO* piPerl, PerlIO* pf, int c) -{ - return nw_fputc(c, (FILE*)pf); -} - -int -PerlStdIOPuts(struct IPerlStdIO* piPerl, PerlIO* pf, const char *s) -{ - return nw_fputs(s, (FILE*)pf); -} - -int -PerlStdIOFlush(struct IPerlStdIO* piPerl, PerlIO* pf) -{ - return nw_fflush((FILE*)pf); -} - -int -PerlStdIOUngetc(struct IPerlStdIO* piPerl, int c, PerlIO* pf) //(J) -{ - return nw_ungetc(c, (FILE*)pf); -} - -int -PerlStdIOFileno(struct IPerlStdIO* piPerl, PerlIO* pf) -{ - return nw_fileno((FILE*)pf); -} - -PerlIO* -PerlStdIOFdopen(struct IPerlStdIO* piPerl, int fd, const char *mode) -{ - return (PerlIO*)nw_fdopen(fd, mode); -} - -PerlIO* -PerlStdIOReopen(struct IPerlStdIO* piPerl, const char*path, const char*mode, PerlIO* pf) -{ - return (PerlIO*)nw_freopen(path, mode, (FILE*)pf); -} - -SSize_t -PerlStdIORead(struct IPerlStdIO* piPerl, void *buffer, Size_t size, Size_t dummy, PerlIO* pf) -{ - return nw_fread(buffer, 1, size, (FILE*)pf); -} - -SSize_t -PerlStdIOWrite(struct IPerlStdIO* piPerl, const void *buffer, Size_t size, Size_t dummy, PerlIO* pf) -//PerlStdIOWrite(struct IPerlStdIO* piPerl, PerlIO* pf, const void *buffer, Size_t size) -{ - return nw_fwrite(buffer, 1, size, (FILE*)pf); -} - -void -PerlStdIOSetBuf(struct IPerlStdIO* piPerl, PerlIO* pf, char* buffer) -{ - nw_setbuf((FILE*)pf, buffer); -} - -int -PerlStdIOSetVBuf(struct IPerlStdIO* piPerl, PerlIO* pf, char* buffer, int type, Size_t size) -{ - return nw_setvbuf((FILE*)pf, buffer, type, size); -} - -void -PerlStdIOSetCnt(struct IPerlStdIO* piPerl, PerlIO* pf, int n) -{ -#ifdef STDIO_CNT_LVALUE - FILE *f = (FILE*)pf; - FILE_cnt(f) = n; -#endif -} - -void -PerlStdIOSetPtrCnt(struct IPerlStdIO* piPerl, PerlIO* pf, STDCHAR * ptr, int n) -{ -#ifdef STDIO_PTR_LVALUE - FILE *f = (FILE*)pf; - FILE_ptr(f) = ptr; - FILE_cnt(f) = n; -#endif -} - -void -PerlStdIOSetlinebuf(struct IPerlStdIO* piPerl, PerlIO* pf) -{ - nw_setvbuf((FILE*)pf, NULL, _IOLBF, 0); -} - -int -PerlStdIOPrintf(struct IPerlStdIO* piPerl, PerlIO* pf, const char *format,...) -{ - va_list(arglist); - va_start(arglist, format); - return nw_vfprintf((FILE*)pf, format, arglist); -} - -int -PerlStdIOVprintf(struct IPerlStdIO* piPerl, PerlIO* pf, const char *format, va_list arglist) -{ - return nw_vfprintf((FILE*)pf, format, arglist); -} - -long -PerlStdIOTell(struct IPerlStdIO* piPerl, PerlIO* pf) -{ - return nw_ftell((FILE*)pf); -} - -int -PerlStdIOSeek(struct IPerlStdIO* piPerl, PerlIO* pf, off_t offset, int origin) -{ - return nw_fseek((FILE*)pf, offset, origin); -} - -void -PerlStdIORewind(struct IPerlStdIO* piPerl, PerlIO* pf) -{ - nw_rewind((FILE*)pf); -} - -PerlIO* -PerlStdIOTmpfile(struct IPerlStdIO* piPerl) -{ - return (PerlIO*)nw_tmpfile(); -} - -int -PerlStdIOGetpos(struct IPerlStdIO* piPerl, PerlIO* pf, Fpos_t *p) -{ - return nw_fgetpos((FILE*)pf, p); -} - -int -PerlStdIOSetpos(struct IPerlStdIO* piPerl, PerlIO* pf, const Fpos_t *p) -{ - return nw_fsetpos((FILE*)pf, p); -} - -void -PerlStdIOInit(struct IPerlStdIO* piPerl) -{ - // If removed, compilation error occurs. -} - -void -PerlStdIOInitOSExtras(struct IPerlStdIO* piPerl) -{ - Perl_init_os_extras(); -} - - -int -PerlStdIOOpenOSfhandle(struct IPerlStdIO* piPerl, long osfhandle, int flags) -{ - return nw_open_osfhandle(osfhandle, flags); -} - -int -PerlStdIOGetOSfhandle(struct IPerlStdIO* piPerl, int filenum) -{ - return nw_get_osfhandle(filenum); -} - -PerlIO* -PerlStdIOFdupopen(struct IPerlStdIO* piPerl, PerlIO* pf) -{ - PerlIO* pfdup=NULL; - fpos_t pos=0; - char mode[3]={'\0'}; - int fileno = nw_dup(nw_fileno((FILE*)pf)); - - /* open the file in the same mode */ - if(((FILE*)pf)->_flag & _IOREAD) { - mode[0] = 'r'; - mode[1] = 0; - } - else if(((FILE*)pf)->_flag & _IOWRT) { - mode[0] = 'a'; - mode[1] = 0; - } - else if(((FILE*)pf)->_flag & _IORW) { - mode[0] = 'r'; - mode[1] = '+'; - mode[2] = 0; - } - - /* it appears that the binmode is attached to the - * file descriptor so binmode files will be handled - * correctly - */ - pfdup = (PerlIO*)nw_fdopen(fileno, mode); - - /* move the file pointer to the same position */ - if (!fgetpos((FILE*)pf, &pos)) { - fsetpos((FILE*)pfdup, &pos); - } - return pfdup; -} - -struct IPerlStdIO perlStdIO = -{ - PerlStdIOStdin, - PerlStdIOStdout, - PerlStdIOStderr, - PerlStdIOOpen, - PerlStdIOClose, - PerlStdIOEof, - PerlStdIOError, - PerlStdIOClearerr, - PerlStdIOGetc, - PerlStdIOGetBase, - PerlStdIOGetBufsiz, - PerlStdIOGetCnt, - PerlStdIOGetPtr, - PerlStdIOGets, - PerlStdIOPutc, - PerlStdIOPuts, - PerlStdIOFlush, - PerlStdIOUngetc, - PerlStdIOFileno, - PerlStdIOFdopen, - PerlStdIOReopen, - PerlStdIORead, - PerlStdIOWrite, - PerlStdIOSetBuf, - PerlStdIOSetVBuf, - PerlStdIOSetCnt, - PerlStdIOSetPtrCnt, - PerlStdIOSetlinebuf, - PerlStdIOPrintf, - PerlStdIOVprintf, - PerlStdIOTell, - PerlStdIOSeek, - PerlStdIORewind, - PerlStdIOTmpfile, - PerlStdIOGetpos, - PerlStdIOSetpos, - PerlStdIOInit, - PerlStdIOInitOSExtras, - PerlStdIOFdupopen, -}; - - -#undef IPERL2HOST -#define IPERL2HOST(x) IPerlLIO2Host(x) - -/* IPerlLIO */ -int -PerlLIOAccess(struct IPerlLIO* piPerl, const char *path, int mode) -{ - return nw_access(path, mode); -} - -int -PerlLIOChmod(struct IPerlLIO* piPerl, const char *filename, int pmode) -{ - return nw_chmod(filename, pmode); -} - -int -PerlLIOChown(struct IPerlLIO* piPerl, const char *filename, uid_t owner, gid_t group) -{ - // If removed, compilation error occurs. - return 0; -} - -int -PerlLIOChsize(struct IPerlLIO* piPerl, int handle, long size) -{ - return (nw_chsize(handle,size)); -} - -int -PerlLIOClose(struct IPerlLIO* piPerl, int handle) -{ - return nw_close(handle); -} - -int -PerlLIODup(struct IPerlLIO* piPerl, int handle) -{ - return nw_dup(handle); -} - -int -PerlLIODup2(struct IPerlLIO* piPerl, int handle1, int handle2) -{ - return nw_dup2(handle1, handle2); -} - -int -PerlLIOFlock(struct IPerlLIO* piPerl, int fd, int oper) -{ - //On NetWare simulate flock by locking a range on the file - return nw_flock(fd, oper); -} - -int -PerlLIOFileStat(struct IPerlLIO* piPerl, int handle, struct stat *buffer) -{ - return fstat(handle, buffer); -} - -int -PerlLIOIOCtl(struct IPerlLIO* piPerl, int i, unsigned int u, char *data) -{ - // If removed, compilation error occurs. - return 0; -} - -int -PerlLIOIsatty(struct IPerlLIO* piPerl, int fd) -{ - return nw_isatty(fd); -} - -int -PerlLIOLink(struct IPerlLIO* piPerl, const char*oldname, const char *newname) -{ - return nw_link(oldname, newname); -} - -long -PerlLIOLseek(struct IPerlLIO* piPerl, int handle, long offset, int origin) -{ - return nw_lseek(handle, offset, origin); -} - -int -PerlLIOLstat(struct IPerlLIO* piPerl, const char *path, struct stat *buffer) -{ - return nw_stat(path, buffer); -} - -char* -PerlLIOMktemp(struct IPerlLIO* piPerl, char *Template) -{ - return(nw_mktemp(Template)); -} - -int -PerlLIOOpen(struct IPerlLIO* piPerl, const char *filename, int oflag) -{ - return nw_open(filename, oflag); -} - -int -PerlLIOOpen3(struct IPerlLIO* piPerl, const char *filename, int oflag, int pmode) -{ - return nw_open(filename, oflag, pmode); -} - -int -PerlLIORead(struct IPerlLIO* piPerl, int handle, void *buffer, unsigned int count) -{ - return nw_read(handle, buffer, count); -} - -int -PerlLIORename(struct IPerlLIO* piPerl, const char *OldFileName, const char *newname) -{ - return nw_rename(OldFileName, newname); -} - -int -PerlLIOSetmode(struct IPerlLIO* piPerl, FILE *fp, int mode) -{ - return nw_setmode(fp, mode); -} - -int -PerlLIONameStat(struct IPerlLIO* piPerl, const char *path, struct stat *buffer) -{ - return nw_stat(path, buffer); -} - -char* -PerlLIOTmpnam(struct IPerlLIO* piPerl, char *string) -{ - return tmpnam(string); -} - -int -PerlLIOUmask(struct IPerlLIO* piPerl, int pmode) -{ - return umask(pmode); -} - -int -PerlLIOUnlink(struct IPerlLIO* piPerl, const char *filename) -{ - return nw_unlink(filename); -} - -int -PerlLIOUtime(struct IPerlLIO* piPerl, const char *filename, struct utimbuf *times) -{ - return nw_utime(filename, times); -} - -int -PerlLIOWrite(struct IPerlLIO* piPerl, int handle, const void *buffer, unsigned int count) -{ - return nw_write(handle, buffer, count); -} - -struct IPerlLIO perlLIO = -{ - PerlLIOAccess, - PerlLIOChmod, - PerlLIOChown, - PerlLIOChsize, - PerlLIOClose, - PerlLIODup, - PerlLIODup2, - PerlLIOFlock, - PerlLIOFileStat, - PerlLIOIOCtl, - PerlLIOIsatty, - PerlLIOLink, - PerlLIOLseek, - PerlLIOLstat, - PerlLIOMktemp, - PerlLIOOpen, - PerlLIOOpen3, - PerlLIORead, - PerlLIORename, - PerlLIOSetmode, - PerlLIONameStat, - PerlLIOTmpnam, - PerlLIOUmask, - PerlLIOUnlink, - PerlLIOUtime, - PerlLIOWrite, -}; - - -#undef IPERL2HOST -#define IPERL2HOST(x) IPerlDir2Host(x) - -/* IPerlDIR */ -int -PerlDirMakedir(struct IPerlDir* piPerl, const char *dirname, int mode) -{ - return mkdir(dirname); -} - -int -PerlDirChdir(struct IPerlDir* piPerl, const char *dirname) -{ - return nw_chdir(dirname); -} - -int -PerlDirRmdir(struct IPerlDir* piPerl, const char *dirname) -{ - return nw_rmdir(dirname); -} - -int -PerlDirClose(struct IPerlDir* piPerl, DIR *dirp) -{ - return nw_closedir(dirp); -} - -DIR* -PerlDirOpen(struct IPerlDir* piPerl, const char *filename) -{ - return nw_opendir(filename); -} - -struct direct * -PerlDirRead(struct IPerlDir* piPerl, DIR *dirp) -{ - return nw_readdir(dirp); -} - -void -PerlDirRewind(struct IPerlDir* piPerl, DIR *dirp) -{ - nw_rewinddir(dirp); -} - -void -PerlDirSeek(struct IPerlDir* piPerl, DIR *dirp, long loc) -{ - nw_seekdir(dirp, loc); -} - -long -PerlDirTell(struct IPerlDir* piPerl, DIR *dirp) -{ - return nw_telldir(dirp); -} - -struct IPerlDir perlDir = -{ - PerlDirMakedir, - PerlDirChdir, - PerlDirRmdir, - PerlDirClose, - PerlDirOpen, - PerlDirRead, - PerlDirRewind, - PerlDirSeek, - PerlDirTell, -}; - - -/* IPerlSock */ -u_long -PerlSockHtonl(struct IPerlSock* piPerl, u_long hostlong) -{ - return(nw_htonl(hostlong)); -} - -u_short -PerlSockHtons(struct IPerlSock* piPerl, u_short hostshort) -{ - return(nw_htons(hostshort)); -} - -u_long -PerlSockNtohl(struct IPerlSock* piPerl, u_long netlong) -{ - return nw_ntohl(netlong); -} - -u_short -PerlSockNtohs(struct IPerlSock* piPerl, u_short netshort) -{ - return nw_ntohs(netshort); -} - -SOCKET PerlSockAccept(struct IPerlSock* piPerl, SOCKET s, struct sockaddr* addr, int* addrlen) -{ - return nw_accept(s, addr, addrlen); -} - -int -PerlSockBind(struct IPerlSock* piPerl, SOCKET s, const struct sockaddr* name, int namelen) -{ - return nw_bind(s, name, namelen); -} - -int -PerlSockConnect(struct IPerlSock* piPerl, SOCKET s, const struct sockaddr* name, int namelen) -{ - return nw_connect(s, name, namelen); -} - -void -PerlSockEndhostent(struct IPerlSock* piPerl) -{ - nw_endhostent(); -} - -void -PerlSockEndnetent(struct IPerlSock* piPerl) -{ - nw_endnetent(); -} - -void -PerlSockEndprotoent(struct IPerlSock* piPerl) -{ - nw_endprotoent(); -} - -void -PerlSockEndservent(struct IPerlSock* piPerl) -{ - nw_endservent(); -} - -struct hostent* -PerlSockGethostbyaddr(struct IPerlSock* piPerl, const char* addr, int len, int type) -{ - return(nw_gethostbyaddr(addr,len,type)); -} - -struct hostent* -PerlSockGethostbyname(struct IPerlSock* piPerl, const char* name) -{ - return nw_gethostbyname(name); -} - -struct hostent* -PerlSockGethostent(struct IPerlSock* piPerl) -{ - return(nw_gethostent()); -} - -int -PerlSockGethostname(struct IPerlSock* piPerl, char* name, int namelen) -{ - return nw_gethostname(name,namelen); -} - -struct netent * -PerlSockGetnetbyaddr(struct IPerlSock* piPerl, long net, int type) -{ - return nw_getnetbyaddr(net, type); -} - -struct netent * -PerlSockGetnetbyname(struct IPerlSock* piPerl, const char *name) -{ - return nw_getnetbyname((char*)name); -} - -struct netent * -PerlSockGetnetent(struct IPerlSock* piPerl) -{ - return nw_getnetent(); -} - -int PerlSockGetpeername(struct IPerlSock* piPerl, SOCKET s, struct sockaddr* name, int* namelen) -{ - return nw_getpeername(s, name, namelen); -} - -struct protoent* -PerlSockGetprotobyname(struct IPerlSock* piPerl, const char* name) -{ - return nw_getprotobyname(name); -} - -struct protoent* -PerlSockGetprotobynumber(struct IPerlSock* piPerl, int number) -{ - return nw_getprotobynumber(number); -} - -struct protoent* -PerlSockGetprotoent(struct IPerlSock* piPerl) -{ - return nw_getprotoent(); -} - -struct servent* -PerlSockGetservbyname(struct IPerlSock* piPerl, const char* name, const char* proto) -{ - return nw_getservbyname((char*)name, (char*)proto); -} - -struct servent* -PerlSockGetservbyport(struct IPerlSock* piPerl, int port, const char* proto) -{ - return nw_getservbyport(port, proto); -} - -struct servent* -PerlSockGetservent(struct IPerlSock* piPerl) -{ - return nw_getservent(); -} - -int -PerlSockGetsockname(struct IPerlSock* piPerl, SOCKET s, struct sockaddr* name, int* namelen) -{ - return nw_getsockname(s, name, namelen); -} - -int -PerlSockGetsockopt(struct IPerlSock* piPerl, SOCKET s, int level, int optname, char* optval, int* optlen) -{ - return nw_getsockopt(s, level, optname, optval, optlen); -} - -unsigned long -PerlSockInetAddr(struct IPerlSock* piPerl, const char* cp) -{ - return(nw_inet_addr(cp)); -} - -char* -PerlSockInetNtoa(struct IPerlSock* piPerl, struct in_addr in) -{ - return nw_inet_ntoa(in); -} - -int -PerlSockListen(struct IPerlSock* piPerl, SOCKET s, int backlog) -{ - return (nw_listen(s, backlog)); -} - -int -PerlSockRecv(struct IPerlSock* piPerl, SOCKET s, char* buffer, int len, int flags) -{ - return (nw_recv(s, buffer, len, flags)); -} - -int -PerlSockRecvfrom(struct IPerlSock* piPerl, SOCKET s, char* buffer, int len, int flags, struct sockaddr* from, int* fromlen) -{ - return nw_recvfrom(s, buffer, len, flags, from, fromlen); -} - -int -PerlSockSelect(struct IPerlSock* piPerl, int nfds, char* readfds, char* writefds, char* exceptfds, const struct timeval* timeout) -{ - return nw_select(nfds, (fd_set*) readfds, (fd_set*) writefds, (fd_set*) exceptfds, timeout); -} - -int -PerlSockSend(struct IPerlSock* piPerl, SOCKET s, const char* buffer, int len, int flags) -{ - return (nw_send(s, buffer, len, flags)); -} - -int -PerlSockSendto(struct IPerlSock* piPerl, SOCKET s, const char* buffer, int len, int flags, const struct sockaddr* to, int tolen) -{ - return(nw_sendto(s, buffer, len, flags, to, tolen)); -} - -void -PerlSockSethostent(struct IPerlSock* piPerl, int stayopen) -{ - nw_sethostent(stayopen); -} - -void -PerlSockSetnetent(struct IPerlSock* piPerl, int stayopen) -{ - nw_setnetent(stayopen); -} - -void -PerlSockSetprotoent(struct IPerlSock* piPerl, int stayopen) -{ - nw_setprotoent(stayopen); -} - -void -PerlSockSetservent(struct IPerlSock* piPerl, int stayopen) -{ - nw_setservent(stayopen); -} - -int -PerlSockSetsockopt(struct IPerlSock* piPerl, SOCKET s, int level, int optname, const char* optval, int optlen) -{ - return nw_setsockopt(s, level, optname, optval, optlen); -} - -int -PerlSockShutdown(struct IPerlSock* piPerl, SOCKET s, int how) -{ - return nw_shutdown(s, how); -} - -SOCKET -PerlSockSocket(struct IPerlSock* piPerl, int af, int type, int protocol) -{ - return nw_socket(af, type, protocol); -} - -int -PerlSockSocketpair(struct IPerlSock* piPerl, int domain, int type, int protocol, int* fds) -{ - dTHX; // (J) dTHXo - Perl_croak(aTHX_ "socketpair not implemented!\n"); - return 0; -} - -int -PerlSockIoctlsocket(struct IPerlSock* piPerl, SOCKET s, long cmd, u_long *argp) -{ - dTHX; // (J) dTHXo - Perl_croak(aTHX_ "ioctlsocket not implemented!\n"); - return 0; -} - -struct IPerlSock perlSock = -{ - PerlSockHtonl, - PerlSockHtons, - PerlSockNtohl, - PerlSockNtohs, - PerlSockAccept, - PerlSockBind, - PerlSockConnect, - PerlSockEndhostent, - PerlSockEndnetent, - PerlSockEndprotoent, - PerlSockEndservent, - PerlSockGethostname, - PerlSockGetpeername, - PerlSockGethostbyaddr, - PerlSockGethostbyname, - PerlSockGethostent, - PerlSockGetnetbyaddr, - PerlSockGetnetbyname, - PerlSockGetnetent, - PerlSockGetprotobyname, - PerlSockGetprotobynumber, - PerlSockGetprotoent, - PerlSockGetservbyname, - PerlSockGetservbyport, - PerlSockGetservent, - PerlSockGetsockname, - PerlSockGetsockopt, - PerlSockInetAddr, - PerlSockInetNtoa, - PerlSockListen, - PerlSockRecv, - PerlSockRecvfrom, - PerlSockSelect, - PerlSockSend, - PerlSockSendto, - PerlSockSethostent, - PerlSockSetnetent, - PerlSockSetprotoent, - PerlSockSetservent, - PerlSockSetsockopt, - PerlSockShutdown, - PerlSockSocket, - PerlSockSocketpair, - //Following commented by sgp bcos of comiplation error too many initializers (E279) -// PerlSockClosesocket, -}; - - -/* IPerlProc */ - -#define EXECF_EXEC 1 -#define EXECF_SPAWN 2 - -void -PerlProcAbort(struct IPerlProc* piPerl) -{ - nw_abort(); -} - -char * -PerlProcCrypt(struct IPerlProc* piPerl, const char* clear, const char* salt) -{ - return nw_crypt(clear, salt); -} - -void -PerlProcExit(struct IPerlProc* piPerl, int status) -{ -// exit(status); - dTHX; - //dJMPENV; - JMPENV_JUMP(2); -} - -void -PerlProc_Exit(struct IPerlProc* piPerl, int status) -{ -// _exit(status); - dTHX; - //dJMPENV; - JMPENV_JUMP(2); -} - -int -PerlProcExecl(struct IPerlProc* piPerl, const char *cmdname, const char *arg0, const char *arg1, const char *arg2, const char *arg3) -{ - // If removed, compilation error occurs. - return 0; -} - -int -PerlProcExecv(struct IPerlProc* piPerl, const char *cmdname, const char *const *argv) -{ - return nw_execvp((char *)cmdname, (char **)argv); -} - -int -PerlProcExecvp(struct IPerlProc* piPerl, const char *cmdname, const char *const *argv) -{ - return nw_execvp((char *)cmdname, (char **)argv); -} - -uid_t -PerlProcGetuid(struct IPerlProc* piPerl) -{ - // If removed, compilation error occurs. - return 0; -} - -uid_t -PerlProcGeteuid(struct IPerlProc* piPerl) -{ - // If removed, compilation error occurs. - return 0; -} - -gid_t -PerlProcGetgid(struct IPerlProc* piPerl) -{ - // If removed, compilation error occurs. - return 0; -} - -gid_t -PerlProcGetegid(struct IPerlProc* piPerl) -{ - // If removed, compilation error occurs. - return 0; -} - -char * -PerlProcGetlogin(struct IPerlProc* piPerl) -{ - // If removed, compilation error occurs. - return NULL; -} - -int -PerlProcKill(struct IPerlProc* piPerl, int pid, int sig) -{ - return nw_kill(pid, sig); -} - -int -PerlProcKillpg(struct IPerlProc* piPerl, int pid, int sig) -{ - dTHX; // (J) dTHXo - Perl_croak(aTHX_ "killpg not implemented!\n"); - return 0; -} - -int -PerlProcPauseProc(struct IPerlProc* piPerl) -{ - return nw_sleep((32767L << 16) + 32767); -} - -PerlIO* -PerlProcPopen(struct IPerlProc* piPerl, const char *command, const char *mode) -{ - dTHX; // (J) dTHXo - PERL_FLUSHALL_FOR_CHILD; - - return (PerlIO*)nw_Popen((char *)command, (char *)mode, (int *)errno); -} - -int -PerlProcPclose(struct IPerlProc* piPerl, PerlIO *stream) -{ - return nw_Pclose((FILE*)stream, (int *)errno); -} - -int -PerlProcPipe(struct IPerlProc* piPerl, int *phandles) -{ - return nw_Pipe((int *)phandles, (int *)errno); -} - -int -PerlProcSetuid(struct IPerlProc* piPerl, uid_t u) -{ - // If removed, compilation error occurs. - return 0; -} - -int -PerlProcSetgid(struct IPerlProc* piPerl, gid_t g) -{ - // If removed, compilation error occurs. - return 0; -} - -int -PerlProcSleep(struct IPerlProc* piPerl, unsigned int s) -{ - return nw_sleep(s); -} - -int -PerlProcTimes(struct IPerlProc* piPerl, struct tms *timebuf) -{ - return nw_times(timebuf); -} - -int -PerlProcWait(struct IPerlProc* piPerl, int *status) -{ - return nw_wait(status); -} - -int -PerlProcWaitpid(struct IPerlProc* piPerl, int pid, int *status, int flags) -{ - return nw_waitpid(pid, status, flags); -} - -Sighandler_t -PerlProcSignal(struct IPerlProc* piPerl, int sig, Sighandler_t subcode) -{ - // If removed, compilation error occurs. - return 0; -} - -int -PerlProcFork(struct IPerlProc* piPerl) -{ - // If removed, compilation error occurs. - return 0; -} - -int -PerlProcGetpid(struct IPerlProc* piPerl) -{ - return nw_getpid(); -} - -BOOL -PerlProcDoCmd(struct IPerlProc* piPerl, char *cmd) -{ - do_spawn2(cmd, EXECF_EXEC); - return FALSE; -} - -int -PerlProcSpawn(struct IPerlProc* piPerl, char* cmds) -{ - return do_spawn2(cmds, EXECF_SPAWN); -} - -int -PerlProcSpawnvp(struct IPerlProc* piPerl, int mode, const char *cmdname, const char *const *argv) -{ - return nw_spawnvp(mode, (char *)cmdname, (char **)argv); -} - -int -PerlProcASpawn(struct IPerlProc* piPerl, void *vreally, void **vmark, void **vsp) -{ - return do_aspawn(vreally, vmark, vsp); -} - -struct IPerlProc perlProc = -{ - PerlProcAbort, - PerlProcCrypt, - PerlProcExit, - PerlProc_Exit, - PerlProcExecl, - PerlProcExecv, - PerlProcExecvp, - PerlProcGetuid, - PerlProcGeteuid, - PerlProcGetgid, - PerlProcGetegid, - PerlProcGetlogin, - PerlProcKill, - PerlProcKillpg, - PerlProcPauseProc, - PerlProcPopen, - PerlProcPclose, - PerlProcPipe, - PerlProcSetuid, - PerlProcSetgid, - PerlProcSleep, - PerlProcTimes, - PerlProcWait, - PerlProcWaitpid, - PerlProcSignal, - PerlProcFork, - PerlProcGetpid, -/* PerlProcDynaLoader, - PerlProcGetOSError, - PerlProcDoCmd, - PerlProcSpawn, - PerlProcSpawnvp, - PerlProcASpawn,*/ -}; - - -/* - * CPerlHost - */ - -CPerlHost::CPerlHost(void) -{ - m_pVMem = new VMem(); - m_pVMemShared = new VMem(); - m_pVMemParse = new VMem(); - - memcpy(&m_hostperlMem, &perlMem, sizeof(perlMem)); - memcpy(&m_hostperlMemShared, &perlMemShared, sizeof(perlMemShared)); - memcpy(&m_hostperlMemParse, &perlMemParse, sizeof(perlMemParse)); - memcpy(&m_hostperlEnv, &perlEnv, sizeof(perlEnv)); - memcpy(&m_hostperlStdIO, &perlStdIO, sizeof(perlStdIO)); - memcpy(&m_hostperlLIO, &perlLIO, sizeof(perlLIO)); - memcpy(&m_hostperlDir, &perlDir, sizeof(perlDir)); - memcpy(&m_hostperlSock, &perlSock, sizeof(perlSock)); - memcpy(&m_hostperlProc, &perlProc, sizeof(perlProc)); - - m_pHostperlMem = &m_hostperlMem; - m_pHostperlMemShared = &m_hostperlMemShared; - m_pHostperlMemParse = &m_hostperlMemParse; - m_pHostperlEnv = &m_hostperlEnv; - m_pHostperlStdIO = &m_hostperlStdIO; - m_pHostperlLIO = &m_hostperlLIO; - m_pHostperlDir = &m_hostperlDir; - m_pHostperlSock = &m_hostperlSock; - m_pHostperlProc = &m_hostperlProc; -} - -#define SETUPEXCHANGE(xptr, iptr, table) \ - STMT_START { \ - if (xptr) { \ - iptr = *xptr; \ - *xptr = &table; \ - } \ - else { \ - iptr = &table; \ - } \ - } STMT_END - -CPerlHost::CPerlHost(struct IPerlMem** ppMem, struct IPerlMem** ppMemShared, - struct IPerlMem** ppMemParse, struct IPerlEnv** ppEnv, - struct IPerlStdIO** ppStdIO, struct IPerlLIO** ppLIO, - struct IPerlDir** ppDir, struct IPerlSock** ppSock, - struct IPerlProc** ppProc) -{ - m_pVMem = new VMem(); - m_pVMemShared = new VMem(); - m_pVMemParse = new VMem(); - - memcpy(&m_hostperlMem, &perlMem, sizeof(perlMem)); - memcpy(&m_hostperlMemShared, &perlMemShared, sizeof(perlMemShared)); - memcpy(&m_hostperlMemParse, &perlMemParse, sizeof(perlMemParse)); - memcpy(&m_hostperlEnv, &perlEnv, sizeof(perlEnv)); - memcpy(&m_hostperlStdIO, &perlStdIO, sizeof(perlStdIO)); - memcpy(&m_hostperlLIO, &perlLIO, sizeof(perlLIO)); - memcpy(&m_hostperlDir, &perlDir, sizeof(perlDir)); - memcpy(&m_hostperlSock, &perlSock, sizeof(perlSock)); - memcpy(&m_hostperlProc, &perlProc, sizeof(perlProc)); - - SETUPEXCHANGE(ppMem, m_pHostperlMem, m_hostperlMem); - SETUPEXCHANGE(ppMemShared, m_pHostperlMemShared, m_hostperlMemShared); - SETUPEXCHANGE(ppMemParse, m_pHostperlMemParse, m_hostperlMemParse); - SETUPEXCHANGE(ppEnv, m_pHostperlEnv, m_hostperlEnv); - SETUPEXCHANGE(ppStdIO, m_pHostperlStdIO, m_hostperlStdIO); - SETUPEXCHANGE(ppLIO, m_pHostperlLIO, m_hostperlLIO); - SETUPEXCHANGE(ppDir, m_pHostperlDir, m_hostperlDir); - SETUPEXCHANGE(ppSock, m_pHostperlSock, m_hostperlSock); - SETUPEXCHANGE(ppProc, m_pHostperlProc, m_hostperlProc); -} -#undef SETUPEXCHANGE - -CPerlHost::CPerlHost(const CPerlHost& host) -{ - memcpy(&m_hostperlMem, &perlMem, sizeof(perlMem)); - memcpy(&m_hostperlMemShared, &perlMemShared, sizeof(perlMemShared)); - memcpy(&m_hostperlMemParse, &perlMemParse, sizeof(perlMemParse)); - memcpy(&m_hostperlEnv, &perlEnv, sizeof(perlEnv)); - memcpy(&m_hostperlStdIO, &perlStdIO, sizeof(perlStdIO)); - memcpy(&m_hostperlLIO, &perlLIO, sizeof(perlLIO)); - memcpy(&m_hostperlDir, &perlDir, sizeof(perlDir)); - memcpy(&m_hostperlSock, &perlSock, sizeof(perlSock)); - memcpy(&m_hostperlProc, &perlProc, sizeof(perlProc)); - - m_pHostperlMem = &m_hostperlMem; - m_pHostperlMemShared = &m_hostperlMemShared; - m_pHostperlMemParse = &m_hostperlMemParse; - m_pHostperlEnv = &m_hostperlEnv; - m_pHostperlStdIO = &m_hostperlStdIO; - m_pHostperlLIO = &m_hostperlLIO; - m_pHostperlDir = &m_hostperlDir; - m_pHostperlSock = &m_hostperlSock; - m_pHostperlProc = &m_hostperlProc; - -} - -CPerlHost::~CPerlHost(void) -{ - if ( m_pVMemParse ) delete m_pVMemParse; - if ( m_pVMemShared ) delete m_pVMemShared; - if ( m_pVMem ) delete m_pVMem; -} - -char* -CPerlHost::Getenv(const char *varname) -{ - // getenv is always present. In old CLIB, it is implemented - // to always return NULL. With java loaded on NW411, it will - // return values set by envset. Is correctly implemented by - // CLIB on MOAB. - // - return getenv(varname); -} - -int -CPerlHost::Putenv(const char *envstring) -{ - return(putenv(envstring)); -} - - -#endif /* ___NWPerlHost_H___ */ - diff --git a/gnu/usr.bin/perl/NetWare/nwperlsys.c b/gnu/usr.bin/perl/NetWare/nwperlsys.c deleted file mode 100644 index 32c15cb4380..00000000000 --- a/gnu/usr.bin/perl/NetWare/nwperlsys.c +++ /dev/null @@ -1,216 +0,0 @@ -/* - * Copyright © 2001 Novell, Inc. All Rights Reserved. - * - * You may distribute under the terms of either the GNU General Public - * License or the Artistic License, as specified in the README file. - * - */ - -/* - * FILENAME : nwperlsys.c - * DESCRIPTION : Contains calls to Perl APIs and - * utility functions calls - * - * Author : SGP - * Date Created : June 12th 2001. - * Date Modified: June 26th 2001. - */ - -#include "EXTERN.h" -#include "perl.h" - - -//CHKSGP -//Including this is giving premature end-of-file error during compilation -//#include "XSUB.h" - -#ifdef PERL_IMPLICIT_SYS - -//Includes iperlsys.h and function definitions -#include "nwperlsys.h" - -/*============================================================================================ - - Function : fnFreeMemEntry - - Description : Called for each outstanding memory allocation at the end of a script run. - Frees the outstanding allocations - - Parameters : ptr (IN). - context (IN) - - Returns : Nothing. - -==============================================================================================*/ - -void fnFreeMemEntry(void* ptr, void* context) -{ - if(ptr) - { - PerlMemFree(NULL, ptr); - } -} -/*============================================================================================ - - Function : fnAllocListHash - - Description : Hashing function for hash table of memory allocations. - - Parameters : invalue (IN). - - Returns : unsigned. - -==============================================================================================*/ - -unsigned fnAllocListHash(void* const& invalue) -{ - return (((unsigned) invalue & 0x0000ff00) >> 8); -} - -/*============================================================================================ - - Function : perl_alloc - - Description : creates a Perl interpreter variable and initializes - - Parameters : none - - Returns : Pointer to Perl interpreter - -==============================================================================================*/ - -EXTERN_C PerlInterpreter* -perl_alloc(void) -{ - PerlInterpreter* my_perl = NULL; - - WCValHashTable* m_allocList; - m_allocList = new WCValHashTable (fnAllocListHash, 256); - fnInsertHashListAddrs(m_allocList, FALSE); - my_perl = perl_alloc_using(&perlMem, - &perlMem, - NULL, - &perlEnv, - &perlStdIO, - &perlLIO, - &perlDir, - &perlSock, - &perlProc); - if (my_perl) { - //nw5_internal_host = m_allocList; - } - return my_perl; -} - -/*============================================================================================ - - Function : perl_alloc_override - - Description : creates a Perl interpreter variable and initializes - - Parameters : Pointer to structure containing function pointers - - Returns : Pointer to Perl interpreter - -==============================================================================================*/ -EXTERN_C PerlInterpreter* -perl_alloc_override(struct IPerlMem** ppMem, struct IPerlMem** ppMemShared, - struct IPerlMem** ppMemParse, struct IPerlEnv** ppEnv, - struct IPerlStdIO** ppStdIO, struct IPerlLIO** ppLIO, - struct IPerlDir** ppDir, struct IPerlSock** ppSock, - struct IPerlProc** ppProc) -{ - PerlInterpreter *my_perl = NULL; - - struct IPerlMem* lpMem; - struct IPerlEnv* lpEnv; - struct IPerlStdIO* lpStdio; - struct IPerlLIO* lpLIO; - struct IPerlDir* lpDir; - struct IPerlSock* lpSock; - struct IPerlProc* lpProc; - - WCValHashTable* m_allocList; - m_allocList = new WCValHashTable (fnAllocListHash, 256); - fnInsertHashListAddrs(m_allocList, FALSE); - - if (!ppMem) - lpMem=&perlMem; - else - lpMem=*ppMem; - - if (!ppEnv) - lpEnv=&perlEnv; - else - lpEnv=*ppEnv; - - if (!ppStdIO) - lpStdio=&perlStdIO; - else - lpStdio=*ppStdIO; - - if (!ppLIO) - lpLIO=&perlLIO; - else - lpLIO=*ppLIO; - - if (!ppDir) - lpDir=&perlDir; - else - lpDir=*ppDir; - - if (!ppSock) - lpSock=&perlSock; - else - lpSock=*ppSock; - - if (!ppProc) - lpProc=&perlProc; - else - lpProc=*ppProc; - my_perl = perl_alloc_using(lpMem, - lpMem, - NULL, - lpEnv, - lpStdio, - lpLIO, - lpDir, - lpSock, - lpProc); - - if (my_perl) { - //nw5_internal_host = pHost; - } - return my_perl; -} -/*============================================================================================ - - Function : nw5_delete_internal_host - - Description : Deletes the alloc_list pointer - - Parameters : alloc_list pointer - - Returns : none - -==============================================================================================*/ - -EXTERN_C void -nw5_delete_internal_host(void *h) -{ - WCValHashTable* m_allocList; - void **listptr; - BOOL m_dontTouchHashLists; - if (fnGetHashListAddrs(&listptr,&m_dontTouchHashLists)) { - m_allocList = (WCValHashTable*)listptr; - fnInsertHashListAddrs(m_allocList, TRUE); - if (m_allocList) - { - m_allocList->forAll(fnFreeMemEntry, NULL); - fnInsertHashListAddrs(NULL, FALSE); - delete m_allocList; - } - } -} - -#endif /* PERL_IMPLICIT_SYS */ diff --git a/gnu/usr.bin/perl/NetWare/nwperlsys.h b/gnu/usr.bin/perl/NetWare/nwperlsys.h deleted file mode 100644 index 3d82dd1c8dd..00000000000 --- a/gnu/usr.bin/perl/NetWare/nwperlsys.h +++ /dev/null @@ -1,1383 +0,0 @@ -/* - * Copyright © 2001 Novell, Inc. All Rights Reserved. - * - * You may distribute under the terms of either the GNU General Public - * License or the Artistic License, as specified in the README file. - * - */ - -/* - * FILENAME : nwperlsys.h - * DESCRIPTION : Derives from iperlsys.h and define the - * platform specific function - * Author : SGP - * Date Created : June 12th 2001. - * Date Modified: June 30th 2001. - */ - -#ifndef ___NWPerlSys_H___ -#define ___NWPerlSys_H___ - - -#include "iperlsys.h" -#include "nwstdio.h" - -#include "nw5iop.h" -#include - -//Socket related calls -#include "nw5sck.h" - -//Store the Watcom hash list -#include "nwtinfo.h" - -//Watcom hash list -#include - -#include "win32ish.h" - -START_EXTERN_C -extern int do_spawn2(char *cmd, int exectype); -extern int do_aspawn(void *vreally, void **vmark, void **vsp); -extern void Perl_init_os_extras(void); -BOOL fnGetHashListAddrs(void *addrs, BOOL *dontTouchHashList); -END_EXTERN_C - -/* IPerlMem - Memory management functions - Begin ========================================*/ - -void* -PerlMemMalloc(struct IPerlMem* piPerl, size_t size) -{ - void *ptr = NULL; - ptr = malloc(size); - if (ptr) { - void **listptr; - BOOL m_dontTouchHashLists; - if(fnGetHashListAddrs(&listptr,&m_dontTouchHashLists)) { - if (listptr) { - WCValHashTable* m_allocList= (WCValHashTable*)listptr; - (WCValHashTable*)m_allocList->insert(ptr); - } - } - } - return(ptr); -} - -void* -PerlMemRealloc(struct IPerlMem* piPerl, void* ptr, size_t size) -{ - void *newptr = NULL; - WCValHashTable* m_allocList; - - newptr = realloc(ptr, size); - - if (ptr) - { - void **listptr; - BOOL m_dontTouchHashLists; - if(fnGetHashListAddrs(&listptr,&m_dontTouchHashLists)) { - m_allocList= (WCValHashTable*)listptr; - (WCValHashTable*)m_allocList->remove(ptr); - } - } - if (newptr) - { - if (m_allocList) - (WCValHashTable*)m_allocList->insert(newptr); - } - - return(newptr); -} - -void -PerlMemFree(struct IPerlMem* piPerl, void* ptr) -{ - BOOL m_dontTouchHashLists; - WCValHashTable* m_allocList; - - void **listptr; - if(fnGetHashListAddrs(&listptr,&m_dontTouchHashLists)) { - m_allocList= (WCValHashTable*)listptr; - // Final clean up, free all the nodes from the hash list - if (m_dontTouchHashLists) - { - if(ptr) - { - free(ptr); - ptr = NULL; - } - } - else - { - if(ptr && m_allocList) - { - if ((WCValHashTable*)m_allocList->remove(ptr)) - { - free(ptr); - ptr = NULL; - } - else - { - // If it comes here, that means that the memory pointer is not contained in the hash list. - // But no need to free now, since if is deleted here, it will result in an abend!! - // If the memory is still there, it will be cleaned during final cleanup anyway. - } - } - } - } - return; -} - -void* -PerlMemCalloc(struct IPerlMem* piPerl, size_t num, size_t size) -{ - void *ptr = NULL; - - ptr = calloc(num, size); - if (ptr) { - void **listptr; - BOOL m_dontTouchHashLists; - if(fnGetHashListAddrs(&listptr,&m_dontTouchHashLists)) { - if (listptr) { - WCValHashTable* m_allocList= (WCValHashTable*)listptr; - (WCValHashTable*)m_allocList->insert(ptr); - } - } - } - return(ptr); -} - -struct IPerlMem perlMem = -{ - PerlMemMalloc, - PerlMemRealloc, - PerlMemFree, - PerlMemCalloc, -}; - -/* IPerlMem - Memory management functions - End ========================================*/ - -/* IPerlDir - Directory Manipulation functions - Begin ===================================*/ - -int -PerlDirMakedir(struct IPerlDir* piPerl, const char *dirname, int mode) -{ - return mkdir(dirname); -} - -int -PerlDirChdir(struct IPerlDir* piPerl, const char *dirname) -{ - return nw_chdir(dirname); -} - -int -PerlDirRmdir(struct IPerlDir* piPerl, const char *dirname) -{ - return nw_rmdir(dirname); -} - -int -PerlDirClose(struct IPerlDir* piPerl, DIR *dirp) -{ - return nw_closedir(dirp); -} - -DIR* -PerlDirOpen(struct IPerlDir* piPerl, const char *filename) -{ - return nw_opendir(filename); -} - -struct direct * -PerlDirRead(struct IPerlDir* piPerl, DIR *dirp) -{ - return nw_readdir(dirp); -} - -void -PerlDirRewind(struct IPerlDir* piPerl, DIR *dirp) -{ - nw_rewinddir(dirp); -} - -void -PerlDirSeek(struct IPerlDir* piPerl, DIR *dirp, long loc) -{ - nw_seekdir(dirp, loc); -} - -long -PerlDirTell(struct IPerlDir* piPerl, DIR *dirp) -{ - return nw_telldir(dirp); -} - -struct IPerlDir perlDir = -{ - PerlDirMakedir, - PerlDirChdir, - PerlDirRmdir, - PerlDirClose, - PerlDirOpen, - PerlDirRead, - PerlDirRewind, - PerlDirSeek, - PerlDirTell, -}; - -/* IPerlDir - Directory Manipulation functions - End ===================================*/ - -/* IPerlEnv - Environment related functions - Begin ======================================*/ - -char* -PerlEnvGetenv(struct IPerlEnv* piPerl, const char *varname) -{ - return(getenv(varname)); -}; - -int -PerlEnvPutenv(struct IPerlEnv* piPerl, const char *envstring) -{ - return(putenv(envstring)); -}; - -char* -PerlEnvGetenv_len(struct IPerlEnv* piPerl, const char* varname, unsigned long* len) -{ - *len = 0; - char *e = getenv(varname); - if (e) - *len = strlen(e); - return e; -} - -int -PerlEnvUname(struct IPerlEnv* piPerl, struct utsname *name) -{ - return nw_uname(name); -} - -void -PerlEnvClearenv(struct IPerlEnv* piPerl) -{ - -} - -struct IPerlEnv perlEnv = -{ - PerlEnvGetenv, - PerlEnvPutenv, - PerlEnvGetenv_len, - PerlEnvUname, - PerlEnvClearenv, -/* PerlEnvGetChildenv, - PerlEnvFreeChildenv, - PerlEnvGetChilddir, - PerlEnvFreeChilddir,*/ -}; - -/* IPerlEnv - Environment related functions - End ======================================*/ - -/* IPerlStdio - Stdio functions - Begin ================================================*/ - -FILE* -PerlStdIOStdin(struct IPerlStdIO* piPerl) -{ - return nw_stdin(); -} - -FILE* -PerlStdIOStdout(struct IPerlStdIO* piPerl) -{ - return nw_stdout(); -} - -FILE* -PerlStdIOStderr(struct IPerlStdIO* piPerl) -{ - return nw_stderr(); -} - -FILE* -PerlStdIOOpen(struct IPerlStdIO* piPerl, const char *path, const char *mode) -{ - return nw_fopen(path, mode); -} - -int -PerlStdIOClose(struct IPerlStdIO* piPerl, FILE* pf) -{ - return nw_fclose(pf); -} - -int -PerlStdIOEof(struct IPerlStdIO* piPerl, FILE* pf) -{ - return nw_feof(pf); -} - -int -PerlStdIOError(struct IPerlStdIO* piPerl, FILE* pf) -{ - return nw_ferror(pf); -} - -void -PerlStdIOClearerr(struct IPerlStdIO* piPerl, FILE* pf) -{ - nw_clearerr(pf); -} - -int -PerlStdIOGetc(struct IPerlStdIO* piPerl, FILE* pf) -{ - return nw_getc(pf); -} - -STDCHAR* -PerlStdIOGetBase(struct IPerlStdIO* piPerl, FILE* pf) -{ -#ifdef FILE_base - FILE *f = pf; - return FILE_base(f); -#else - return NULL; -#endif -} - -int -PerlStdIOGetBufsiz(struct IPerlStdIO* piPerl, FILE* pf) -{ -#ifdef FILE_bufsiz - FILE *f = pf; - return FILE_bufsiz(f); -#else - return (-1); -#endif -} - -int -PerlStdIOGetCnt(struct IPerlStdIO* piPerl, FILE* pf) -{ -#ifdef USE_STDIO_PTR - FILE *f = pf; - return FILE_cnt(f); -#else - return (-1); -#endif -} - -STDCHAR* -PerlStdIOGetPtr(struct IPerlStdIO* piPerl, FILE* pf) -{ -#ifdef USE_STDIO_PTR - FILE *f = pf; - return FILE_ptr(f); -#else - return NULL; -#endif -} - -char* -PerlStdIOGets(struct IPerlStdIO* piPerl, FILE* pf, char* s, int n) -{ - return nw_fgets(s, n, pf); -} - -int -PerlStdIOPutc(struct IPerlStdIO* piPerl, FILE* pf, int c) -{ - return nw_fputc(c, pf); -} - -int -PerlStdIOPuts(struct IPerlStdIO* piPerl, FILE* pf, const char *s) -{ - return nw_fputs(s, pf); -} - -int -PerlStdIOFlush(struct IPerlStdIO* piPerl, FILE* pf) -{ - return nw_fflush(pf); -} - -int -PerlStdIOUngetc(struct IPerlStdIO* piPerl, int c, FILE* pf) -{ - return nw_ungetc(c, pf); -} - -int -PerlStdIOFileno(struct IPerlStdIO* piPerl, FILE* pf) -{ - return nw_fileno(pf); -} - -FILE* -PerlStdIOFdopen(struct IPerlStdIO* piPerl, int fd, const char *mode) -{ - return nw_fdopen(fd, mode); -} - -FILE* -PerlStdIOReopen(struct IPerlStdIO* piPerl, const char*path, const char*mode, FILE* pf) -{ - return nw_freopen(path, mode, pf); -} - -SSize_t -PerlStdIORead(struct IPerlStdIO* piPerl, void *buffer, Size_t size, Size_t count, FILE* pf) -{ - return nw_fread(buffer, size, count, pf); -} - -SSize_t -PerlStdIOWrite(struct IPerlStdIO* piPerl, const void *buffer, Size_t size, Size_t count, FILE* pf) -{ - return nw_fwrite(buffer, size, count, pf); -} - -void -PerlStdIOSetBuf(struct IPerlStdIO* piPerl, FILE* pf, char* buffer) -{ - nw_setbuf(pf, buffer); -} - -int -PerlStdIOSetVBuf(struct IPerlStdIO* piPerl, FILE* pf, char* buffer, int type, Size_t size) -{ - return nw_setvbuf(pf, buffer, type, size); -} - -void -PerlStdIOSetCnt(struct IPerlStdIO* piPerl, FILE* pf, int n) -{ -#ifdef STDIO_CNT_LVALUE - FILE *f = pf; - FILE_cnt(f) = n; -#endif -} - -void -PerlStdIOSetPtr(struct IPerlStdIO* piPerl, FILE* pf, STDCHAR * ptr) -{ -#ifdef STDIO_PTR_LVALUE - FILE *f = pf; - FILE_ptr(f) = ptr; -#endif -} - -void -PerlStdIOSetlinebuf(struct IPerlStdIO* piPerl, FILE* pf) -{ - nw_setvbuf(pf, NULL, _IOLBF, 0); -} - -int -PerlStdIOPrintf(struct IPerlStdIO* piPerl, FILE* pf, const char *format,...) -{ - va_list(arglist); - va_start(arglist, format); - return nw_vfprintf(pf, format, arglist); -} - -int -PerlStdIOVprintf(struct IPerlStdIO* piPerl, FILE* pf, const char *format, va_list arglist) -{ - return nw_vfprintf(pf, format, arglist); -} - -long -PerlStdIOTell(struct IPerlStdIO* piPerl, FILE* pf) -{ - return nw_ftell(pf); -} - -int -PerlStdIOSeek(struct IPerlStdIO* piPerl, FILE* pf, off_t offset, int origin) -{ - return nw_fseek(pf, offset, origin); -} - -void -PerlStdIORewind(struct IPerlStdIO* piPerl, FILE* pf) -{ - nw_rewind(pf); -} - -FILE* -PerlStdIOTmpfile(struct IPerlStdIO* piPerl) -{ - return nw_tmpfile(); -} - -int -PerlStdIOGetpos(struct IPerlStdIO* piPerl, FILE* pf, Fpos_t *p) -{ - return nw_fgetpos(pf, p); -} - -int -PerlStdIOSetpos(struct IPerlStdIO* piPerl, FILE* pf, const Fpos_t *p) -{ - return nw_fsetpos(pf, p); -} - -void -PerlStdIOInit(struct IPerlStdIO* piPerl) -{ -} - -void -PerlStdIOInitOSExtras(struct IPerlStdIO* piPerl) -{ - Perl_init_os_extras(); -} - - -int -PerlStdIOOpenOSfhandle(struct IPerlStdIO* piPerl, long osfhandle, int flags) -{ - return nw_open_osfhandle(osfhandle, flags); -} - -int -PerlStdIOGetOSfhandle(struct IPerlStdIO* piPerl, int filenum) -{ - return nw_get_osfhandle(filenum); -} - -FILE* -PerlStdIOFdupopen(struct IPerlStdIO* piPerl, FILE* pf) -{ - FILE* pfdup=NULL; - fpos_t pos=0; - char mode[3]={'\0'}; - int fileno = nw_dup(nw_fileno(pf)); - - /* open the file in the same mode */ - if(((FILE*)pf)->_flag & _IOREAD) { - mode[0] = 'r'; - mode[1] = 0; - } - else if(((FILE*)pf)->_flag & _IOWRT) { - mode[0] = 'a'; - mode[1] = 0; - } - else if(((FILE*)pf)->_flag & _IORW) { - mode[0] = 'r'; - mode[1] = '+'; - mode[2] = 0; - } - - /* it appears that the binmode is attached to the - * file descriptor so binmode files will be handled - * correctly - */ - pfdup = nw_fdopen(fileno, mode); - - /* move the file pointer to the same position */ - if (!fgetpos(pf, &pos)) { - fsetpos(pfdup, &pos); - } - return pfdup; -} - -struct IPerlStdIO perlStdIO = -{ - PerlStdIOStdin, - PerlStdIOStdout, - PerlStdIOStderr, - PerlStdIOOpen, - PerlStdIOClose, - PerlStdIOEof, - PerlStdIOError, - PerlStdIOClearerr, - PerlStdIOGetc, - PerlStdIOGetBase, - PerlStdIOGetBufsiz, - PerlStdIOGetCnt, - PerlStdIOGetPtr, - PerlStdIOGets, - PerlStdIOPutc, - PerlStdIOPuts, - PerlStdIOFlush, - PerlStdIOUngetc, - PerlStdIOFileno, - PerlStdIOFdopen, - PerlStdIOReopen, - PerlStdIORead, - PerlStdIOWrite, - PerlStdIOSetBuf, - PerlStdIOSetVBuf, - PerlStdIOSetCnt, - PerlStdIOSetPtr, - PerlStdIOSetlinebuf, - PerlStdIOPrintf, - PerlStdIOVprintf, - PerlStdIOTell, - PerlStdIOSeek, - PerlStdIORewind, - PerlStdIOTmpfile, - PerlStdIOGetpos, - PerlStdIOSetpos, - PerlStdIOInit, - PerlStdIOInitOSExtras, - PerlStdIOFdupopen, -}; - -/* IPerlStdio - Stdio functions - End ================================================*/ - -/* IPerlLIO - Low-level IO functions - Begin =============================================*/ - -int -PerlLIOAccess(struct IPerlLIO* piPerl, const char *path, int mode) -{ - return nw_access(path, mode); -} - -int -PerlLIOChmod(struct IPerlLIO* piPerl, const char *filename, int pmode) -{ - return nw_chmod(filename, pmode); -} - -int -PerlLIOChown(struct IPerlLIO* piPerl, const char *filename, uid_t owner, gid_t group) -{ - dTHX; - Perl_croak(aTHX_ "chown not implemented!\n"); - return 0; -} - -int -PerlLIOChsize(struct IPerlLIO* piPerl, int handle, long size) -{ - return (nw_chsize(handle,size)); -} - -int -PerlLIOClose(struct IPerlLIO* piPerl, int handle) -{ - return nw_close(handle); -} - -int -PerlLIODup(struct IPerlLIO* piPerl, int handle) -{ - return nw_dup(handle); -} - -int -PerlLIODup2(struct IPerlLIO* piPerl, int handle1, int handle2) -{ - return nw_dup2(handle1, handle2); -} - -int -PerlLIOFlock(struct IPerlLIO* piPerl, int fd, int oper) -{ - //On NetWare simulate flock by locking a range on the file - return nw_flock(fd, oper); -} - -int -PerlLIOFileStat(struct IPerlLIO* piPerl, int handle, struct stat *buffer) -{ - return fstat(handle, buffer); -} - -int -PerlLIOIOCtl(struct IPerlLIO* piPerl, int i, unsigned int u, char *data) -{ - return 0; -} - -int -PerlLIOIsatty(struct IPerlLIO* piPerl, int fd) -{ - return nw_isatty(fd); -} - -int -PerlLIOLink(struct IPerlLIO* piPerl, const char*oldname, const char *newname) -{ - return nw_link(oldname, newname); -} - -long -PerlLIOLseek(struct IPerlLIO* piPerl, int handle, long offset, int origin) -{ - return nw_lseek(handle, offset, origin); -} - -int -PerlLIOLstat(struct IPerlLIO* piPerl, const char *path, struct stat *buffer) -{ - return nw_stat(path, buffer); -} - -char* -PerlLIOMktemp(struct IPerlLIO* piPerl, char *Template) -{ - return(nw_mktemp(Template)); -} - -int -PerlLIOOpen(struct IPerlLIO* piPerl, const char *filename, int oflag) -{ - return nw_open(filename, oflag); -} - -int -PerlLIOOpen3(struct IPerlLIO* piPerl, const char *filename, int oflag, int pmode) -{ - return nw_open(filename, oflag, pmode); -} - -int -PerlLIORead(struct IPerlLIO* piPerl, int handle, void *buffer, unsigned int count) -{ - return nw_read(handle, buffer, count); -} - -int -PerlLIORename(struct IPerlLIO* piPerl, const char *OldFileName, const char *newname) -{ - return nw_rename(OldFileName, newname); -} - -int -PerlLIOSetmode(struct IPerlLIO* piPerl, FILE *fp, int mode) -{ - return nw_setmode(fp, mode); -} - -int -PerlLIONameStat(struct IPerlLIO* piPerl, const char *path, struct stat *buffer) -{ - return nw_stat(path, buffer); -} - -char* -PerlLIOTmpnam(struct IPerlLIO* piPerl, char *string) -{ - return tmpnam(string); -} - -int -PerlLIOUmask(struct IPerlLIO* piPerl, int pmode) -{ - return umask(pmode); -} - -int -PerlLIOUnlink(struct IPerlLIO* piPerl, const char *filename) -{ - return nw_unlink(filename); -} - -int -PerlLIOUtime(struct IPerlLIO* piPerl, const char *filename, struct utimbuf *times) -{ - return nw_utime(filename, times); -} - -int -PerlLIOWrite(struct IPerlLIO* piPerl, int handle, const void *buffer, unsigned int count) -{ - return nw_write(handle, buffer, count); -} - -struct IPerlLIO perlLIO = -{ - PerlLIOAccess, - PerlLIOChmod, - PerlLIOChown, - PerlLIOChsize, - PerlLIOClose, - PerlLIODup, - PerlLIODup2, - PerlLIOFlock, - PerlLIOFileStat, - PerlLIOIOCtl, - PerlLIOIsatty, - PerlLIOLink, - PerlLIOLseek, - PerlLIOLstat, - PerlLIOMktemp, - PerlLIOOpen, - PerlLIOOpen3, - PerlLIORead, - PerlLIORename, - PerlLIOSetmode, - PerlLIONameStat, - PerlLIOTmpnam, - PerlLIOUmask, - PerlLIOUnlink, - PerlLIOUtime, - PerlLIOWrite, -}; - -/* IPerlLIO - Low-level IO functions - End =============================================*/ - -/* IPerlProc - Process control functions - Begin =========================================*/ - -#define EXECF_EXEC 1 -#define EXECF_SPAWN 2 - -void -PerlProcAbort(struct IPerlProc* piPerl) -{ - nw_abort(); -} - -char * -PerlProcCrypt(struct IPerlProc* piPerl, const char* clear, const char* salt) -{ - return nw_crypt(clear, salt); -} - -void -PerlProcExit(struct IPerlProc* piPerl, int status) -{ -// exit(status); - dTHX; - dJMPENV; - JMPENV_JUMP(2); -} - -void -PerlProc_Exit(struct IPerlProc* piPerl, int status) -{ -// _exit(status); - dTHX; - dJMPENV; - JMPENV_JUMP(2); -} - -int -PerlProcExecl(struct IPerlProc* piPerl, const char *cmdname, const char *arg0, const char *arg1, const char *arg2, const char *arg3) -{ - dTHX; - Perl_croak(aTHX_ "execl not implemented!\n"); - return 0; -} - -int -PerlProcExecv(struct IPerlProc* piPerl, const char *cmdname, const char *const *argv) -{ - return nw_execvp((char *)cmdname, (char **)argv); -} - -int -PerlProcExecvp(struct IPerlProc* piPerl, const char *cmdname, const char *const *argv) -{ - return nw_execvp((char *)cmdname, (char **)argv); -} - -uid_t -PerlProcGetuid(struct IPerlProc* piPerl) -{ - return 0; -} - -uid_t -PerlProcGeteuid(struct IPerlProc* piPerl) -{ - return 0; -} - -gid_t -PerlProcGetgid(struct IPerlProc* piPerl) -{ - return 0; -} - -gid_t -PerlProcGetegid(struct IPerlProc* piPerl) -{ - return 0; -} - -char * -PerlProcGetlogin(struct IPerlProc* piPerl) -{ - return NULL; -} - -int -PerlProcKill(struct IPerlProc* piPerl, int pid, int sig) -{ - return nw_kill(pid, sig); -} - -int -PerlProcKillpg(struct IPerlProc* piPerl, int pid, int sig) -{ - dTHX; - Perl_croak(aTHX_ "killpg not implemented!\n"); - return 0; -} - -int -PerlProcPauseProc(struct IPerlProc* piPerl) -{ - return nw_sleep((32767L << 16) + 32767); -} - -PerlIO* -PerlProcPopen(struct IPerlProc* piPerl, const char *command, const char *mode) -{ - dTHX; - PERL_FLUSHALL_FOR_CHILD; - - return (PerlIO*)nw_Popen((char *)command, (char *)mode, (int *)errno); -} - -int -PerlProcPclose(struct IPerlProc* piPerl, PerlIO *stream) -{ - return nw_Pclose((FILE*)stream, (int *)errno); -} - -int -PerlProcPipe(struct IPerlProc* piPerl, int *phandles) -{ - return nw_Pipe((int *)phandles, (int *)errno); -} - -int -PerlProcSetuid(struct IPerlProc* piPerl, uid_t u) -{ - return 0; -} - -int -PerlProcSetgid(struct IPerlProc* piPerl, gid_t g) -{ - return 0; -} - -int -PerlProcSleep(struct IPerlProc* piPerl, unsigned int s) -{ - return nw_sleep(s); -} - -int -PerlProcTimes(struct IPerlProc* piPerl, struct tms *timebuf) -{ - return nw_times(timebuf); -} - -int -PerlProcWait(struct IPerlProc* piPerl, int *status) -{ - return nw_wait(status); -} - -int -PerlProcWaitpid(struct IPerlProc* piPerl, int pid, int *status, int flags) -{ - return nw_waitpid(pid, status, flags); -} - -Sighandler_t -PerlProcSignal(struct IPerlProc* piPerl, int sig, Sighandler_t subcode) -{ - return 0; -} - -int -PerlProcFork(struct IPerlProc* piPerl) -{ - return 0; -} - -int -PerlProcGetpid(struct IPerlProc* piPerl) -{ - return nw_getpid(); -} - -/*BOOL -PerlProcDoCmd(struct IPerlProc* piPerl, char *cmd) -{ - do_spawn2(cmd, EXECF_EXEC); - return FALSE; -}*/ - -int -PerlProcSpawn(struct IPerlProc* piPerl, char* cmds) -{ - return do_spawn2(cmds, EXECF_SPAWN); -} - -int -PerlProcSpawnvp(struct IPerlProc* piPerl, int mode, const char *cmdname, const char *const *argv) -{ - return nw_spawnvp(mode, (char *)cmdname, (char **)argv); -} - -int -PerlProcASpawn(struct IPerlProc* piPerl, void *vreally, void **vmark, void **vsp) -{ - return do_aspawn(vreally, vmark, vsp); -} - -struct IPerlProc perlProc = -{ - PerlProcAbort, - PerlProcCrypt, - PerlProcExit, - PerlProc_Exit, - PerlProcExecl, - PerlProcExecv, - PerlProcExecvp, - PerlProcGetuid, - PerlProcGeteuid, - PerlProcGetgid, - PerlProcGetegid, - PerlProcGetlogin, - PerlProcKill, - PerlProcKillpg, - PerlProcPauseProc, - PerlProcPopen, - PerlProcPclose, - PerlProcPipe, - PerlProcSetuid, - PerlProcSetgid, - PerlProcSleep, - PerlProcTimes, - PerlProcWait, - PerlProcWaitpid, - PerlProcSignal, - PerlProcFork, - PerlProcGetpid, - //PerlProcLastHost; - //PerlProcPopenList; -}; - -/* IPerlProc - Process control functions - End =========================================*/ - -/* IPerlSock - Socket functions - Begin ==================================================*/ - -u_long -PerlSockHtonl(struct IPerlSock* piPerl, u_long hostlong) -{ - return(nw_htonl(hostlong)); -} - -u_short -PerlSockHtons(struct IPerlSock* piPerl, u_short hostshort) -{ - return(nw_htons(hostshort)); -} - -u_long -PerlSockNtohl(struct IPerlSock* piPerl, u_long netlong) -{ - return nw_ntohl(netlong); -} - -u_short -PerlSockNtohs(struct IPerlSock* piPerl, u_short netshort) -{ - return nw_ntohs(netshort); -} - -SOCKET PerlSockAccept(struct IPerlSock* piPerl, SOCKET s, struct sockaddr* addr, int* addrlen) -{ - return nw_accept(s, addr, addrlen); -} - -int -PerlSockBind(struct IPerlSock* piPerl, SOCKET s, const struct sockaddr* name, int namelen) -{ - return nw_bind(s, name, namelen); -} - -int -PerlSockConnect(struct IPerlSock* piPerl, SOCKET s, const struct sockaddr* name, int namelen) -{ - return nw_connect(s, name, namelen); -} - -void -PerlSockEndhostent(struct IPerlSock* piPerl) -{ - nw_endhostent(); -} - -void -PerlSockEndnetent(struct IPerlSock* piPerl) -{ - nw_endnetent(); -} - -void -PerlSockEndprotoent(struct IPerlSock* piPerl) -{ - nw_endprotoent(); -} - -void -PerlSockEndservent(struct IPerlSock* piPerl) -{ - nw_endservent(); -} - -struct hostent* -PerlSockGethostbyaddr(struct IPerlSock* piPerl, const char* addr, int len, int type) -{ - return(nw_gethostbyaddr(addr,len,type)); -} - -struct hostent* -PerlSockGethostbyname(struct IPerlSock* piPerl, const char* name) -{ - return nw_gethostbyname(name); -} - -struct hostent* -PerlSockGethostent(struct IPerlSock* piPerl) -{ - return(nw_gethostent()); -} - -int -PerlSockGethostname(struct IPerlSock* piPerl, char* name, int namelen) -{ - return nw_gethostname(name,namelen); -} - -struct netent * -PerlSockGetnetbyaddr(struct IPerlSock* piPerl, long net, int type) -{ - return nw_getnetbyaddr(net, type); -} - -struct netent * -PerlSockGetnetbyname(struct IPerlSock* piPerl, const char *name) -{ - return nw_getnetbyname((char*)name); -} - -struct netent * -PerlSockGetnetent(struct IPerlSock* piPerl) -{ - return nw_getnetent(); -} - -int PerlSockGetpeername(struct IPerlSock* piPerl, SOCKET s, struct sockaddr* name, int* namelen) -{ - return nw_getpeername(s, name, namelen); -} - -struct protoent* -PerlSockGetprotobyname(struct IPerlSock* piPerl, const char* name) -{ - return nw_getprotobyname(name); -} - -struct protoent* -PerlSockGetprotobynumber(struct IPerlSock* piPerl, int number) -{ - return nw_getprotobynumber(number); -} - -struct protoent* -PerlSockGetprotoent(struct IPerlSock* piPerl) -{ - return nw_getprotoent(); -} - -struct servent* -PerlSockGetservbyname(struct IPerlSock* piPerl, const char* name, const char* proto) -{ - return nw_getservbyname((char*)name, (char*)proto); -} - -struct servent* -PerlSockGetservbyport(struct IPerlSock* piPerl, int port, const char* proto) -{ - return nw_getservbyport(port, proto); -} - -struct servent* -PerlSockGetservent(struct IPerlSock* piPerl) -{ - return nw_getservent(); -} - -int -PerlSockGetsockname(struct IPerlSock* piPerl, SOCKET s, struct sockaddr* name, int* namelen) -{ - return nw_getsockname(s, name, namelen); -} - -int -PerlSockGetsockopt(struct IPerlSock* piPerl, SOCKET s, int level, int optname, char* optval, int* optlen) -{ - return nw_getsockopt(s, level, optname, optval, optlen); -} - -unsigned long -PerlSockInetAddr(struct IPerlSock* piPerl, const char* cp) -{ - return(nw_inet_addr(cp)); -} - -char* -PerlSockInetNtoa(struct IPerlSock* piPerl, struct in_addr in) -{ - return NULL; -} - -int -PerlSockListen(struct IPerlSock* piPerl, SOCKET s, int backlog) -{ - return (nw_listen(s, backlog)); -} - -int -PerlSockRecv(struct IPerlSock* piPerl, SOCKET s, char* buffer, int len, int flags) -{ - return (nw_recv(s, buffer, len, flags)); -} - -int -PerlSockRecvfrom(struct IPerlSock* piPerl, SOCKET s, char* buffer, int len, int flags, struct sockaddr* from, int* fromlen) -{ - return nw_recvfrom(s, buffer, len, flags, from, fromlen); -} - -int -PerlSockSelect(struct IPerlSock* piPerl, int nfds, char* readfds, char* writefds, char* exceptfds, const struct timeval* timeout) -{ - return nw_select(nfds, (fd_set*) readfds, (fd_set*) writefds, (fd_set*) exceptfds, timeout); -} - -int -PerlSockSend(struct IPerlSock* piPerl, SOCKET s, const char* buffer, int len, int flags) -{ - return (nw_send(s, buffer, len, flags)); -} - -int -PerlSockSendto(struct IPerlSock* piPerl, SOCKET s, const char* buffer, int len, int flags, const struct sockaddr* to, int tolen) -{ - return(nw_sendto(s, buffer, len, flags, to, tolen)); -} - -void -PerlSockSethostent(struct IPerlSock* piPerl, int stayopen) -{ - nw_sethostent(stayopen); -} - -void -PerlSockSetnetent(struct IPerlSock* piPerl, int stayopen) -{ - nw_setnetent(stayopen); -} - -void -PerlSockSetprotoent(struct IPerlSock* piPerl, int stayopen) -{ - nw_setprotoent(stayopen); -} - -void -PerlSockSetservent(struct IPerlSock* piPerl, int stayopen) -{ - nw_setservent(stayopen); -} - -int -PerlSockSetsockopt(struct IPerlSock* piPerl, SOCKET s, int level, int optname, const char* optval, int optlen) -{ - return nw_setsockopt(s, level, optname, optval, optlen); -} - -int -PerlSockShutdown(struct IPerlSock* piPerl, SOCKET s, int how) -{ - return nw_shutdown(s, how); -} - -SOCKET -PerlSockSocket(struct IPerlSock* piPerl, int af, int type, int protocol) -{ - return nw_socket(af, type, protocol); -} - -int -PerlSockSocketpair(struct IPerlSock* piPerl, int domain, int type, int protocol, int* fds) -{ - dTHX; - Perl_croak(aTHX_ "socketpair not implemented!\n"); - return 0; -} - -int -PerlSockIoctlsocket(struct IPerlSock* piPerl, SOCKET s, long cmd, u_long *argp) -{ - dTHX; - Perl_croak(aTHX_ "ioctlsocket not implemented!\n"); - return 0; -} - -struct IPerlSock perlSock = -{ - PerlSockHtonl, - PerlSockHtons, - PerlSockNtohl, - PerlSockNtohs, - PerlSockAccept, - PerlSockBind, - PerlSockConnect, - PerlSockEndhostent, - PerlSockEndnetent, - PerlSockEndprotoent, - PerlSockEndservent, - PerlSockGethostname, - PerlSockGetpeername, - PerlSockGethostbyaddr, - PerlSockGethostbyname, - PerlSockGethostent, - PerlSockGetnetbyaddr, - PerlSockGetnetbyname, - PerlSockGetnetent, - PerlSockGetprotobyname, - PerlSockGetprotobynumber, - PerlSockGetprotoent, - PerlSockGetservbyname, - PerlSockGetservbyport, - PerlSockGetservent, - PerlSockGetsockname, - PerlSockGetsockopt, - PerlSockInetAddr, - PerlSockInetNtoa, - PerlSockListen, - PerlSockRecv, - PerlSockRecvfrom, - PerlSockSelect, - PerlSockSend, - PerlSockSendto, - PerlSockSethostent, - PerlSockSetnetent, - PerlSockSetprotoent, - PerlSockSetservent, - PerlSockSetsockopt, - PerlSockShutdown, - PerlSockSocket, - PerlSockSocketpair, -}; - -/* IPerlSock - Socket functions - End ==================================================*/ - -#endif /* ___NWPerlSys_H___ */ diff --git a/gnu/usr.bin/perl/NetWare/nwpipe.h b/gnu/usr.bin/perl/NetWare/nwpipe.h deleted file mode 100644 index 462a73dcf42..00000000000 --- a/gnu/usr.bin/perl/NetWare/nwpipe.h +++ /dev/null @@ -1,62 +0,0 @@ - -/* - * Copyright © 2001 Novell, Inc. All Rights Reserved. - * - * You may distribute under the terms of either the GNU General Public - * License or the Artistic License, as specified in the README file. - * - */ - -/* - * FILENAME : NWPipe.h - * DESCRIPTION : Functions to implement pipes on NetWare. - * Author : HYAK - * Date : January 2001. - * - */ - - - -#ifndef __NWPipe_H__ -#define __NWPipe_H__ - - -#include "stdio.h" -#include "nwutil.h" - -#define MAX_PIPE_RECURSION 256 - - -typedef struct tagTempPipeFile -{ - BOOL m_mode; // FALSE - Read mode ; TRUE - Write mode - BOOL m_launchPerl; - BOOL m_doPerlGlob; - - int m_argv_len; - - char * m_fileName; - char** m_argv; - char * m_redirect; - - #ifdef MPK_ON - SEMAPHORE m_perlSynchSemaphore; - #else - long m_perlSynchSemaphore; - #endif - - FILE* m_file; - PCOMMANDLINEPARSER m_pipeCommand; - -} TEMPPIPEFILE, *PTEMPPIPEFILE; - - -void fnPipeFileClose(PTEMPPIPEFILE ptpf); -void fnPipeFileDoPerlLaunch(PTEMPPIPEFILE ptpf); -BOOL fnPipeFileMakeArgv(PTEMPPIPEFILE ptpf); -FILE* fnPipeFileOpen(PTEMPPIPEFILE ptpf, char* command, char* mode); -void fnTempPipeFileReleaseMemory(PTEMPPIPEFILE ptpf); - - -#endif // __NWPipe_H__ - diff --git a/gnu/usr.bin/perl/NetWare/nwplglob.c b/gnu/usr.bin/perl/NetWare/nwplglob.c deleted file mode 100644 index 6810fd5e697..00000000000 --- a/gnu/usr.bin/perl/NetWare/nwplglob.c +++ /dev/null @@ -1,90 +0,0 @@ - -/* - * Copyright © 2001 Novell, Inc. All Rights Reserved. - * - * You may distribute under the terms of either the GNU General Public - * License or the Artistic License, as specified in the README file. - * - */ - -/* - * FILENAME : nwplglob.c - * DESCRIPTION : Perl globbing support for NetWare. Other platforms have usually launched - * a separate executable for this in order to take advantage of their - * shell's capability for generating a list of files from a given - * wildcard file spec. On NetWare, we don't have that luxury. - * So we just hack the support into pipe open support (which we also had to hack). - * Author : HYAK - * Date : January 2001. - * - */ - - - -#include -#include "stdio.h" -#include - -#include "win32ish.h" -#include "nwplglob.h" - - - -/*============================================================================================ - - Function : fnDoPerlGlob - - Description : Perl globbing support: Takes an array of wildcard descriptors - and produces from it a list of files that the wildcards expand into. - The list of files is written to the temporary file named by fileName. - - Parameters : argv (IN) - Input argument vector. - fileName (IN) - Input file name for storing globed file names. - - Returns : Nothing. - -==============================================================================================*/ - -void fnDoPerlGlob(char** argv, char* fileName) -{ - FILE * redirOut = NULL; - - if (*argv) - argv++; - if (*argv == NULL) - return; - - redirOut = fopen((const char *)fileName, (const char *)"w"); - if (!redirOut) - return; - - do - { - DIR* dir = NULL; - DIR* fil = NULL; - char* pattern = NULL; - - pattern = *argv++; - - dir = opendir((const char *)pattern); - if (!dir) - continue; - - /* find the last separator in pattern, NetWare has three: /\: */ - while (fil = readdir(dir)) - { - // The below displays the files separated by tab character. - // Also, it displays only the file names and not directories. - // If any other format is desired, it needs to be done here. - fprintf(redirOut, "%s\t", fil->d_name); - } - - closedir(dir); - - } while (*argv); - - fclose(redirOut); - - return; -} - diff --git a/gnu/usr.bin/perl/NetWare/nwplglob.h b/gnu/usr.bin/perl/NetWare/nwplglob.h deleted file mode 100644 index cf60e731696..00000000000 --- a/gnu/usr.bin/perl/NetWare/nwplglob.h +++ /dev/null @@ -1,27 +0,0 @@ - -/* - * Copyright © 2001 Novell, Inc. All Rights Reserved. - * - * You may distribute under the terms of either the GNU General Public - * License or the Artistic License, as specified in the README file. - * - */ - -/* - * FILENAME : nwplglob.h - * DESCRIPTION : Perl globbing support for NetWare. - * Author : HYAK - * Date : January 2001. - * - */ - - -#ifndef __NWplGlob_H__ -#define __NWplGlob_H__ - - -void fnDoPerlGlob(char** argv, char* fileName); - - -#endif // __NWplGlob_H__ - diff --git a/gnu/usr.bin/perl/NetWare/nwstdio.h b/gnu/usr.bin/perl/NetWare/nwstdio.h deleted file mode 100644 index 50ab6f3d43c..00000000000 --- a/gnu/usr.bin/perl/NetWare/nwstdio.h +++ /dev/null @@ -1,122 +0,0 @@ -/* - * Copyright © 2001 Novell, Inc. All Rights Reserved. - * - * You may distribute under the terms of either the GNU General Public - * License or the Artistic License, as specified in the README file. - * - */ - -/* - * FILENAME : nwstdio.h - * DESCRIPTION : Making stdio calls go thro' the - * NetWare specific implementation. - * This gets included if PERLIO_IS_STDIO. Instead - * of directly calling stdio functions this goes - * thro' IPerlStdIO, this ensures that cgi2perl - * can call CGI functions and send the o/p to - * browser or console. - * Author : SGP - * Date Created : June 29th 2001. - * Date Modified: June 30th 2001. - */ - -#ifndef ___NWStdio_H___ -#define ___NWStdio_H___ - -#define PerlIO FILE - -#define PerlIO_putc(f,c) (*PL_StdIO->pPutc)(PL_StdIO, (f),(c)) -#define PerlIO_fileno(f) (*PL_StdIO->pFileno)(PL_StdIO, (f)) -#define PerlIO_close(f) (*PL_StdIO->pClose)(PL_StdIO, (f)) -#define PerlIO_stderr() (*PL_StdIO->pStderr)(PL_StdIO) -#define PerlIO_printf Perl_fprintf_nocontext -#define PerlIO_vprintf(f,fmt,a) (*PL_StdIO->pVprintf)(PL_StdIO, (f),(fmt),a) -#define PerlIO_flush(f) (*PL_StdIO->pFlush)(PL_StdIO, (f)) -#define PerlIO_stdout() (*PL_StdIO->pStdout)(PL_StdIO) -#define PerlIO_stdin() (*PL_StdIO->pStdin)(PL_StdIO) -#define PerlIO_clearerr(f) (*PL_StdIO->pClearerr)(PL_StdIO, (f)) -#define PerlIO_fdopen(f,s) (*PL_StdIO->pFdopen)(PL_StdIO, (f),(s)) -#define PerlIO_getc(f) (*PL_StdIO->pGetc)(PL_StdIO, (f)) -#define PerlIO_ungetc(f,c) (*PL_StdIO->pUngetc)(PL_StdIO, (c),(f)) -#define PerlIO_tell(f) (*PL_StdIO->pTell)(PL_StdIO, (f)) -#define PerlIO_seek(f,o,w) (*PL_StdIO->pSeek)(PL_StdIO, (f),(o),(w)) -#define PerlIO_error(f) (*PL_StdIO->pError)(PL_StdIO, (f)) -#define PerlIO_write(f,buf,size) (*PL_StdIO->pWrite)(PL_StdIO, (buf), (size),1, (f)) -#define PerlIO_puts(f,s) (*PL_StdIO->pPuts)(PL_StdIO, (f),(s)) -#define PerlIO_read(f,buf,size) (*PL_StdIO->pRead)(PL_StdIO, (buf), (size), 1, (f)) -#define PerlIO_eof(f) (*PL_StdIO->pEof)(PL_StdIO, (f)) -//#define PerlIO_fdupopen(f) (*PL_StdIO->pFdupopen)(PL_StdIO, (f)) -#define PerlIO_reopen(p,m,f) (*PL_StdIO->pReopen)(PL_StdIO, (p), (m), (f)) -#define PerlIO_open(x,y) (*PL_StdIO->pOpen)(PL_StdIO, (x),(y)) - -#ifdef HAS_SETLINEBUF -#define PerlIO_setlinebuf(f) (*PL_StdIO->pSetlinebuf)(PL_StdIO, (f)) -#else -#define PerlIO_setlinebuf(f) setvbuf(f, NULL, _IOLBF, 0) -#endif - -#define PerlIO_isutf8(f) 0 - -#ifdef USE_STDIO_PTR -#define PerlIO_has_cntptr(f) 1 -#define PerlIO_get_ptr(f) FILE_ptr(f) -#define PerlIO_get_cnt(f) FILE_cnt(f) - -#ifdef STDIO_CNT_LVALUE -#define PerlIO_canset_cnt(f) 1 -#define PerlIO_set_cnt(f,c) (FILE_cnt(f) = (c)) -#ifdef STDIO_PTR_LVALUE -#ifdef STDIO_PTR_LVAL_NOCHANGE_CNT -#define PerlIO_fast_gets(f) 1 -#endif -#endif /* STDIO_PTR_LVALUE */ -#else /* STDIO_CNT_LVALUE */ -#define PerlIO_canset_cnt(f) 0 -#define PerlIO_set_cnt(f,c) abort() -#endif - -#ifdef STDIO_PTR_LVALUE -#ifdef STDIO_PTR_LVAL_NOCHANGE_CNT -#define PerlIO_set_ptrcnt(f,p,c) STMT_START {FILE_ptr(f) = (p), PerlIO_set_cnt(f,c);} STMT_END -#else -#ifdef STDIO_PTR_LVAL_SETS_CNT -/* assert() may pre-process to ""; potential syntax error (FILE_ptr(), ) */ -#define PerlIO_set_ptrcnt(f,p,c) STMT_START {FILE_ptr(f) = (p); assert(FILE_cnt(f) == (c));} STMT_END -#define PerlIO_fast_gets(f) 1 -#else -#define PerlIO_set_ptrcnt(f,p,c) abort() -#endif -#endif -#endif - -#else /* USE_STDIO_PTR */ - -#define PerlIO_has_cntptr(f) 0 -#define PerlIO_canset_cnt(f) 0 -#define PerlIO_get_cnt(f) (abort(),0) -#define PerlIO_get_ptr(f) (abort(),(void *)0) -#define PerlIO_set_cnt(f,c) abort() -#define PerlIO_set_ptrcnt(f,p,c) abort() - -#endif /* USE_STDIO_PTR */ - -#ifndef PerlIO_fast_gets -#define PerlIO_fast_gets(f) 0 -#endif - -#ifdef FILE_base -#define PerlIO_has_base(f) 1 -#define PerlIO_get_bufsiz(f) (*PL_StdIO->pGetBufsiz)(PL_StdIO, (f)) -#define PerlIO_get_base(f) (*PL_StdIO->pGetBase)(PL_StdIO, (f)) -#else -#define PerlIO_has_base(f) 0 -#define PerlIO_get_base(f) (abort(),(void *)0) -#define PerlIO_get_bufsiz(f) (abort(),0) -#endif - -#define PerlIO_importFILE(f,fl) (f) -#define PerlIO_exportFILE(f,fl) (f) -#define PerlIO_findFILE(f) (f) -#define PerlIO_releaseFILE(p,f) ((void) 0) - -#endif /* ___NWStdio_H___ */ diff --git a/gnu/usr.bin/perl/NetWare/nwtinfo.h b/gnu/usr.bin/perl/NetWare/nwtinfo.h deleted file mode 100644 index a08d060422c..00000000000 --- a/gnu/usr.bin/perl/NetWare/nwtinfo.h +++ /dev/null @@ -1,73 +0,0 @@ - -/* - * Copyright © 2001 Novell, Inc. All Rights Reserved. - * - * You may distribute under the terms of either the GNU General Public - * License or the Artistic License, as specified in the README file. - * - */ - -/* - * FILENAME : NWTInfo.h - * DESCRIPTION : Thread-local storage for Perl. - * Author : SGP, HYAK - * Date Created : January 2001. - * Date Modified: July 2nd 2001. - */ - - - -#ifndef __NWTInfo_H__ -#define __NWTInfo_H__ - - -#include "win32ish.h" // For "BOOL", "TRUE" and "FALSE" - -typedef struct tagThreadInfo -{ - int tid; - struct tagThreadInfo *next; - BOOL m_dontTouchHashLists; - void* m_allocList; -}ThreadInfo; - -void fnInitializeThreadInfo(void); -BOOL fnTerminateThreadInfo(void); - -ThreadInfo* fnAddThreadInfo(int tid); -BOOL fnRemoveThreadInfo(int tid); -ThreadInfo* fnGetThreadInfo(int tid); - -#ifdef __cplusplus - //For storing and retrieving Watcom Hash list address - extern "C" BOOL fnInsertHashListAddrs(void *addrs, BOOL dontTouchHashList); - //Registering with the Thread table - extern "C" BOOL fnRegisterWithThreadTable(void); - extern "C" BOOL fnUnregisterWithThreadTable(void); -#else - //For storing and retrieving Watcom Hash list address - BOOL fnInsertHashListAddrs(void *addrs, BOOL dontTouchHashList); - //Registering with the Thread table - BOOL fnRegisterWithThreadTable(void); - BOOL fnUnregisterWithThreadTable(void); -#endif - -BOOL fnGetHashListAddrs(void **addrs, BOOL *dontTouchHashList); - -//New TLS to set and get the thread contex - may be redundant, -//or see if the above portion can be removed once this works properly -typedef struct tagThreadCtx -{ - long tid; - void *tInfo; - struct tagThreadCtx *next; -}ThreadContext; - - -long fnInitializeThreadCtx(void); -ThreadContext* fnAddThreadCtx(long lTLSIndex, void *t); -BOOL fnRemoveThreadCtx(long lTLSIndex); -void* fnGetThreadCtx(long lTLSIndex); - -#endif // __NWTInfo_H__ - diff --git a/gnu/usr.bin/perl/NetWare/nwutil.h b/gnu/usr.bin/perl/NetWare/nwutil.h deleted file mode 100644 index ff05d1830f3..00000000000 --- a/gnu/usr.bin/perl/NetWare/nwutil.h +++ /dev/null @@ -1,99 +0,0 @@ - -/* - * Copyright © 2001 Novell, Inc. All Rights Reserved. - * - * You may distribute under the terms of either the GNU General Public - * License or the Artistic License, as specified in the README file. - * - */ - -/* - * FILENAME : NWUtil.h - * DESCRIPTION : Utility functions for NetWare implementation of Perl. - * Author : HYAK, SGP - * Date : January 2001. - * - */ - - - -#ifndef __NWUtil_H__ -#define __NWUtil_H__ - - -#include "stdio.h" -#include -#include "win32ish.h" // For "BOOL", "TRUE" and "FALSE" - - -#ifdef MPK_ON - #include - #include -#else - #include -#endif //MPK_ON - - -// Name of console command to invoke perl -#define PERL_COMMAND_NAME "perl" - -// Name of console command to load an NLM -#define LOAD_COMMAND "load" - - -typedef struct tagCommandLineParser -{ - BOOL m_noScreen; - BOOL m_AutoDestroy; - BOOL m_isValid; - - int m_argc; - int m_argv_len; - - #ifdef MPK_ON - SEMAPHORE m_qSemaphore; - #else - long m_qSemaphore; - #endif - - char* m_redirInName; - char* m_redirOutName; - char* m_redirErrName; - char* m_redirBothName; - char* nextarg; - char* sSkippedToken; - - char** m_argv; - char** new_argv; - -}COMMANDLINEPARSER, *PCOMMANDLINEPARSER; - - - -char* fnSkipWhite(char* cptr); -char* fnNwGetEnvironmentStr(char *name, char *defaultvalue); -char* fnSkipToken(char *s, char *r); -char* fnScanToken(char* x, char *r); -char* fnStashString(char *s, char *r, int length); -void fnAppendArgument(PCOMMANDLINEPARSER pclp, char * new_arg); -void fnDeleteArgument(PCOMMANDLINEPARSER pclp, int index); -void fnCommandLineParser(PCOMMANDLINEPARSER pclp, char * commandLine, BOOL preserveQuotes); -void fnSystemCommand (char** argv, int argc); -void fnInternalPerlLaunchHandler(char* cmdLine); -char* fnMy_MkTemp(char* templatestr); - - -/* NWDEFPERLROOT: - * This symbol contains the name of the starting default directory to search - * for scripts to run. - */ -#define NWDEFPERLROOT "sys:\\perl\\scripts" - -/* NWDEFPERLTEMP: - * This symbol contains the name of the default temp files directory. - */ -#define NWDEFPERLTEMP "sys:\\perl\\temp" - - -#endif // __NWUtil_H__ - diff --git a/gnu/usr.bin/perl/NetWare/nwvmem.h b/gnu/usr.bin/perl/NetWare/nwvmem.h deleted file mode 100644 index e82eaeef8b5..00000000000 --- a/gnu/usr.bin/perl/NetWare/nwvmem.h +++ /dev/null @@ -1,340 +0,0 @@ - -/* - * Copyright © 2001 Novell, Inc. All Rights Reserved. - * - * You may distribute under the terms of either the GNU General Public - * License or the Artistic License, as specified in the README file. - * - */ - -/* - * FILENAME : NWVMem.h - * DESCRIPTION : Memory management for Perl Interpreter on NetWare. - * Watcom's hash table is used to store memory pointers. - * All malloc's, realloc's, free's go through this. - * Author : HYAK, SGP - * Date : January 2001. - * - */ - - - -#ifndef ___NWVMEM_H_INC___ -#define ___NWVMEM_H_INC___ - - -#include "win32ish.h" // For "BOOL", "TRUE" and "FALSE" -#include // CW changes -#include -#include "string.h" - - - -class VMem -{ -public: - VMem(); - virtual ~VMem(); - virtual void* Malloc(size_t size); - virtual void* Realloc(void* pMem, size_t size); - virtual void Free(void* pMem); - virtual void* Calloc(size_t num, size_t size); - -protected: - BOOL m_dontTouchHashLists; -// WCValHashTable* m_allocList; - NWPerlHashList *m_allocList; // CW changes -}; - - - - -/*============================================================================================ - - Function : fnAllocListHash - - Description : Hashing function for hash table of memory allocations. - - Parameters : invalue (IN). - - Returns : unsigned. - -==============================================================================================*/ - -unsigned fnAllocListHash(void* const& invalue) -{ - return (((unsigned) invalue & 0x0000ff00) >> 8); -} - - - -/*============================================================================================ - - Function : fnFreeMemEntry - - Description : Called for each outstanding memory allocation at the end of a script run. - Frees the outstanding allocations - - Parameters : ptr (IN). - context (IN) - - Returns : Nothing. - -==============================================================================================*/ - -void fnFreeMemEntry(void* ptr, void* context) -{ - VMem* pVMem = (VMem*) context; - - if(ptr && pVMem) - { - pVMem->Free(ptr); - ptr=NULL; - pVMem = NULL; - context = NULL; - } -} - - - -/*============================================================================================ - - Function : VMem Constructor - - Description : - - Parameters : - - Returns : - -==============================================================================================*/ - -VMem::VMem() -{ - //Constructor - m_dontTouchHashLists = FALSE; - m_allocList = NULL; - // m_allocList = new WCValHashTable (fnAllocListHash, 256); - m_allocList = new NWPerlHashList(); // CW changes -} - - - -/*============================================================================================ - - Function : VMem Destructor - - Description : - - Parameters : - - Returns : - -==============================================================================================*/ - -VMem::~VMem(void) -{ - //Destructor - m_dontTouchHashLists = TRUE; - if (m_allocList) - { - m_allocList->forAll(fnFreeMemEntry, (void*) this); - - delete m_allocList; - m_allocList = NULL; - } - m_dontTouchHashLists = FALSE; -} - - - -/*============================================================================================ - - Function : VMem::Malloc - - Description : Allocates memory. - - Parameters : size (IN) - Size of memory to be allocated. - - Returns : Pointer to the allocated memory block. - -==============================================================================================*/ - -void* VMem::Malloc(size_t size) -{ - void *ptr = NULL; - - if (size <= 0) - return NULL; - - ptr = malloc(size); - if (ptr) - { - if(m_allocList) - m_allocList->insert(ptr); - } - else - { - m_dontTouchHashLists = TRUE; - if (m_allocList) - { - m_allocList->forAll(fnFreeMemEntry, (void*) this); - delete m_allocList; - m_allocList = NULL; - } - m_dontTouchHashLists = FALSE; - - // Serious error since memory allocation falied. So, exiting... - ExitThread(TSR_THREAD, 1); - } - - return(ptr); -} - - - -/*============================================================================================ - - Function : VMem::Realloc - - Description : Reallocates block of memory. - - Parameters : block (IN) - Points to a previously allocated memory block. - size (IN) - Size of memory to be allocated. - - Returns : Pointer to the allocated memory block. - -==============================================================================================*/ - -void* VMem::Realloc(void* block, size_t size) -{ - void *ptr = NULL; - - if (size <= 0) - return NULL; - - ptr = realloc(block, size); - if (ptr) - { - if (block) - { - if (m_allocList) - m_allocList->remove(block); - } - if (m_allocList) - m_allocList->insert(ptr); - } - else - { - m_dontTouchHashLists = TRUE; - if (m_allocList) - { - m_allocList->forAll(fnFreeMemEntry, (void*) this); - delete m_allocList; - m_allocList = NULL; - } - m_dontTouchHashLists = FALSE; - - // Serious error since memory allocation falied. So, exiting... - ExitThread(TSR_THREAD, 1); - } - - return(ptr); -} - - - -/*============================================================================================ - - Function : VMem::Calloc - - Description : Allocates and clears memory space for an array of objects. - - Parameters : num (IN) - Specifies the number of objects. - size (IN) - Size of each object. - - Returns : Pointer to the allocated memory block. - -==============================================================================================*/ - -void* VMem::Calloc(size_t num, size_t size) -{ - void *ptr = NULL; - - if (size <= 0) - return NULL; - - ptr = calloc(num, size); - if (ptr) - { - if(m_allocList) - m_allocList->insert(ptr); - } - else - { - m_dontTouchHashLists = TRUE; - if (m_allocList) - { - m_allocList->forAll(fnFreeMemEntry, (void*) this); - delete m_allocList; - m_allocList = NULL; - } - m_dontTouchHashLists = FALSE; - - // Serious error since memory allocation falied. So, exiting... - ExitThread(TSR_THREAD, 1); - } - - return(ptr); -} - - - -/*============================================================================================ - - Function : VMem::Free - - Description : Frees allocated memory. - - Parameters : p (IN) - Points to the allocated memory. - - Returns : Nothing. - -==============================================================================================*/ - -void VMem::Free(void* p) -{ - // Final clean up, free all the nodes from the hash list - if (m_dontTouchHashLists) - { - if(p) - { - free(p); - p = NULL; - } - } - else - { - if(p && m_allocList) - { - if (m_allocList->remove(p)) - { - free(p); - p = NULL; - } - else - { - // If it comes here, that means that the memory pointer is not contained in the hash list. - // But no need to free now, since if is deleted here, it will result in an abend!! - // If the memory is still there, it will be cleaned during final cleanup anyway. - } - } - } - - - return; -} - - -#endif //___NWVMEM_H_INC___ - diff --git a/gnu/usr.bin/perl/NetWare/perllib.cpp b/gnu/usr.bin/perl/NetWare/perllib.cpp deleted file mode 100644 index 32f8ed2aae7..00000000000 --- a/gnu/usr.bin/perl/NetWare/perllib.cpp +++ /dev/null @@ -1,273 +0,0 @@ - -/* - * Copyright © 2001 Novell, Inc. All Rights Reserved. - * - * You may distribute under the terms of either the GNU General Public - * License or the Artistic License, as specified in the README file. - * - */ - -/* - * FILENAME : perllib.c - * DESCRIPTION : Library functions for parsing and running Perl. - * This is based on the perllib.c file of Win32 port. - * Author : SGP - * Date : January 2001. - * - */ - -/* - * "The Road goes ever on and on, down from the door where it began." - */ - - - -#include "EXTERN.h" -#include "perl.h" - - -#ifdef PERL_OBJECT -#define NO_XSLOCKS -#endif - -//CHKSGP -//Including this is giving premature end-of-file error during compilation -//#include "XSUB.h" - -#ifdef PERL_IMPLICIT_SYS - -#include "nw5iop.h" -#include - -#endif //PERL_IMPLICIT_SYS - - -#ifdef PERL_IMPLICIT_SYS - -#include "nwperlhost.h" -#define w32_internal_host (PL_sys_intern.internal_host) // (J) - - -EXTERN_C void -perl_get_host_info(struct IPerlMemInfo* perlMemInfo, - struct IPerlMemInfo* perlMemSharedInfo, - struct IPerlMemInfo* perlMemParseInfo, - struct IPerlEnvInfo* perlEnvInfo, - struct IPerlStdIOInfo* perlStdIOInfo, - struct IPerlLIOInfo* perlLIOInfo, - struct IPerlDirInfo* perlDirInfo, - struct IPerlSockInfo* perlSockInfo, - struct IPerlProcInfo* perlProcInfo) -{ - if (perlMemInfo) { - Copy(&perlMem, &perlMemInfo->perlMemList, perlMemInfo->nCount, void*); - perlMemInfo->nCount = (sizeof(struct IPerlMem)/sizeof(void*)); - } - if (perlMemSharedInfo) { - Copy(&perlMem, &perlMemSharedInfo->perlMemList, perlMemSharedInfo->nCount, void*); - perlMemSharedInfo->nCount = (sizeof(struct IPerlMem)/sizeof(void*)); - } - if (perlMemParseInfo) { - Copy(&perlMem, &perlMemParseInfo->perlMemList, perlMemParseInfo->nCount, void*); - perlMemParseInfo->nCount = (sizeof(struct IPerlMem)/sizeof(void*)); - } - if (perlEnvInfo) { - Copy(&perlEnv, &perlEnvInfo->perlEnvList, perlEnvInfo->nCount, void*); - perlEnvInfo->nCount = (sizeof(struct IPerlEnv)/sizeof(void*)); - } - if (perlStdIOInfo) { - Copy(&perlStdIO, &perlStdIOInfo->perlStdIOList, perlStdIOInfo->nCount, void*); - perlStdIOInfo->nCount = (sizeof(struct IPerlStdIO)/sizeof(void*)); - } - if (perlLIOInfo) { - Copy(&perlLIO, &perlLIOInfo->perlLIOList, perlLIOInfo->nCount, void*); - perlLIOInfo->nCount = (sizeof(struct IPerlLIO)/sizeof(void*)); - } - if (perlDirInfo) { - Copy(&perlDir, &perlDirInfo->perlDirList, perlDirInfo->nCount, void*); - perlDirInfo->nCount = (sizeof(struct IPerlDir)/sizeof(void*)); - } - if (perlSockInfo) { - Copy(&perlSock, &perlSockInfo->perlSockList, perlSockInfo->nCount, void*); - perlSockInfo->nCount = (sizeof(struct IPerlSock)/sizeof(void*)); - } - if (perlProcInfo) { - Copy(&perlProc, &perlProcInfo->perlProcList, perlProcInfo->nCount, void*); - perlProcInfo->nCount = (sizeof(struct IPerlProc)/sizeof(void*)); - } -} - -EXTERN_C PerlInterpreter* -perl_alloc_override(struct IPerlMem** ppMem, struct IPerlMem** ppMemShared, - struct IPerlMem** ppMemParse, struct IPerlEnv** ppEnv, - struct IPerlStdIO** ppStdIO, struct IPerlLIO** ppLIO, - struct IPerlDir** ppDir, struct IPerlSock** ppSock, - struct IPerlProc** ppProc) -{ - PerlInterpreter *my_perl = NULL; - CPerlHost* pHost = new CPerlHost(ppMem, ppMemShared, ppMemParse, ppEnv, - ppStdIO, ppLIO, ppDir, ppSock, ppProc); - - if (pHost) { - my_perl = perl_alloc_using(pHost->m_pHostperlMem, - pHost->m_pHostperlMemShared, - pHost->m_pHostperlMemParse, - pHost->m_pHostperlEnv, - pHost->m_pHostperlStdIO, - pHost->m_pHostperlLIO, - pHost->m_pHostperlDir, - pHost->m_pHostperlSock, - pHost->m_pHostperlProc); - if (my_perl) { -#ifdef PERL_OBJECT - CPerlObj* pPerl = (CPerlObj*)my_perl; -#endif - w32_internal_host = pHost; - } - } - return my_perl; -} - -EXTERN_C PerlInterpreter* -perl_alloc(void) -{ - PerlInterpreter* my_perl = NULL; - CPerlHost* pHost = new CPerlHost(); - if (pHost) { - my_perl = perl_alloc_using(pHost->m_pHostperlMem, - pHost->m_pHostperlMemShared, - pHost->m_pHostperlMemParse, - pHost->m_pHostperlEnv, - pHost->m_pHostperlStdIO, - pHost->m_pHostperlLIO, - pHost->m_pHostperlDir, - pHost->m_pHostperlSock, - pHost->m_pHostperlProc); - if (my_perl) { -#ifdef PERL_OBJECT - CPerlObj* pPerl = (CPerlObj*)my_perl; -#endif - //The following Should be uncommented - CHKSGP - w32_internal_host = pHost; - } - } - return my_perl; -} - -EXTERN_C void -nw_delete_internal_host(void *h) -{ - CPerlHost *host = (CPerlHost*)h; - if(host && h) - { - delete host; - host=NULL; - h=NULL; - } -} - -#ifdef PERL_OBJECT - -EXTERN_C void -perl_construct(PerlInterpreter* my_perl) -{ - CPerlObj* pPerl = (CPerlObj*)my_perl; - try - { - Perl_construct(); - } - catch(...) - { - win32_fprintf(stderr, "%s\n", - "Error: Unable to construct data structures"); - perl_free(my_perl); - } -} - -EXTERN_C void -perl_destruct(PerlInterpreter* my_perl) -{ - CPerlObj* pPerl = (CPerlObj*)my_perl; -#ifdef DEBUGGING - Perl_destruct(); -#else - try - { - Perl_destruct(); - } - catch(...) - { - } -#endif -} - -EXTERN_C void -perl_free(PerlInterpreter* my_perl) -{ - CPerlObj* pPerl = (CPerlObj*)my_perl; - void *host = w32_internal_host; -#ifdef DEBUGGING - Perl_free(); -#else - try - { - Perl_free(); - } - catch(...) - { - } -#endif - win32_delete_internal_host(host); - PERL_SET_THX(NULL); -} - -EXTERN_C int -perl_run(PerlInterpreter* my_perl) -{ - CPerlObj* pPerl = (CPerlObj*)my_perl; - int retVal; -#ifdef DEBUGGING - retVal = Perl_run(); -#else - try - { - retVal = Perl_run(); - } - catch(...) - { - win32_fprintf(stderr, "Error: Runtime exception\n"); - retVal = -1; - } -#endif - return retVal; -} - -EXTERN_C int -perl_parse(PerlInterpreter* my_perl, void (*xsinit)(CPerlObj*), int argc, char** argv, char** env) -{ - int retVal; - CPerlObj* pPerl = (CPerlObj*)my_perl; -#ifdef DEBUGGING - retVal = Perl_parse(xsinit, argc, argv, env); -#else - try - { - retVal = Perl_parse(xsinit, argc, argv, env); - } - catch(...) - { - win32_fprintf(stderr, "Error: Parse exception\n"); - retVal = -1; - } -#endif - *win32_errno() = 0; - return retVal; -} - -#undef PL_perl_destruct_level -#define PL_perl_destruct_level int dummy - -#endif /* PERL_OBJECT */ -#endif /* PERL_IMPLICIT_SYS */ - - diff --git a/gnu/usr.bin/perl/NetWare/splittree.pl b/gnu/usr.bin/perl/NetWare/splittree.pl deleted file mode 100644 index 3c76daadb1c..00000000000 --- a/gnu/usr.bin/perl/NetWare/splittree.pl +++ /dev/null @@ -1,24 +0,0 @@ -use DirHandle; -use AutoSplit; - -sub splitthis { -my ($top,$base,$dest) = @_; -my $d = new DirHandle $base; -if (defined $d) { - while (defined($_ = $d->read)) { - next if $_ eq "."; - next if $_ eq ".."; - my $entry = "$base\\$_"; - my $entrywithouttop = $entry; - $entrywithouttop =~ s/^$top//; - if (-d $entry) {splitthis ($top,$entry,$dest);} - else { - next unless ($entry=~/pm$/i); - #print "Will run autosplit on $entry to $dest\n"; - autosplit($entry,$dest,0,1,1); - }; - }; - }; -} - -splitthis $ARGV[0],$ARGV[0],$ARGV[1]; diff --git a/gnu/usr.bin/perl/NetWare/sv_nw.c b/gnu/usr.bin/perl/NetWare/sv_nw.c deleted file mode 100644 index 85a33f071de..00000000000 --- a/gnu/usr.bin/perl/NetWare/sv_nw.c +++ /dev/null @@ -1,34 +0,0 @@ -#include -#define PERL_IN_SV_C -#include -#include - -#define SV_CHECK_THINKFIRST(sv) if (SvTHINKFIRST(sv)) sv_force_normal_flags(sv, 0) - - - -void -Perl_sv_catsv(pTHX_ SV *dstr, SV *sstr) -{ - sv_catsv_flags(dstr, sstr, SV_GMAGIC); -} - -void -Perl_sv_catpvn(pTHX_ SV *dsv, const char* sstr, STRLEN slen) -{ - - sv_catpvn_flags(dsv, sstr, slen, SV_GMAGIC); -} - -void -Perl_sv_setsv(pTHX_ SV *dstr, SV *sstr) -{ - sv_setsv_flags(dstr, sstr, SV_GMAGIC); -} - -char * -Perl_sv_2pv(pTHX_ SV *sv, STRLEN *lp) -{ - return sv_2pv_flags(sv, lp, SV_GMAGIC); -} - diff --git a/gnu/usr.bin/perl/NetWare/t/NWModify.pl b/gnu/usr.bin/perl/NetWare/t/NWModify.pl deleted file mode 100644 index fa58b47e820..00000000000 --- a/gnu/usr.bin/perl/NetWare/t/NWModify.pl +++ /dev/null @@ -1,128 +0,0 @@ - - -print "\nModifying the '.t' files...\n\n"; - -use File::Basename; -use File::Copy; - -## Change the below line to the folder you want to process -$DirName = "/perl/scripts/t"; - -$FilesTotal = 0; -$FilesRead = 0; -$FilesModified = 0; - -opendir(DIR, $DirName); -@Dirs = readdir(DIR); - -foreach $DirItem(@Dirs) -{ - $DirItem = $DirName."/".$DirItem; - push @DirNames, $DirItem; # All items under $DirName folder is copied into an array. -} - -foreach $FileName(@DirNames) -{ - if(-d $FileName) - { # If an item is a folder, then open it further. - - opendir(SUBDIR, $FileName); - @SubDirs = readdir(SUBDIR); - close(SUBDIR); - - foreach $SubFileName(@SubDirs) - { - if(-f $SubFileName) - { - &Process_File($SubFileName); # If file, process it. - } - else - { - $SubFileName = $FileName."/".$SubFileName; - push @DirNames, $SubFileName; # If sub-folder, push it into the array. - } - } - } - else - { - if(-f $FileName) - { - &Process_File($FileName); # If file, process it. - } - } -} - -close(DIR); - -print "\n\n\nTotal number of files present = $FilesTotal\n"; -print "Total number of '.t' files read = $FilesRead\n"; -print "Total number of '.t' files modified = $FilesModified\n\n"; - - - - -# Process the file. -sub Process_File -{ - local($FileToProcess) = @_; # File name. - local($Modified) = 0; - - if(!(-w $FileToProcess)) { - # If the file is a read-only file, then change its mode to read-write. - chmod(0777, $FileToProcess); - } - - ## For example: - ## If the value of $FileToProcess is '/perl/scripts/t/pragma/warnings.t', then - ## $dir = '/perl/scripts/t/pragma/' - ## $base = 'warnings' - ## $ext = '.t' - $dir = dirname($FileToProcess); # Get the folder name - $base = basename($FileToProcess); # Get the base name - ($base, $dir, $ext) = fileparse($FileToProcess, '\..*'); # Get the extension of the file passed. - - - # Do the processing only if the file has '.t' extension. - if($ext eq '.t') { - - open(FH, '+<', $FileToProcess) or die "Unable to open the file, $FileToProcess for reading and writing.\n"; - @ARRAY = ; # Get the contents of the file into an array. - - foreach $Line(@ARRAY) # Get each line of the file. - { - if($Line =~ m/\@INC = /) - { # If the line contains the string (@INC = ), then replace it - - # Replace "@INC = " with "unshift @INC, " - $Line =~ s/\@INC = /unshift \@INC, /; - - $Modified = 1; - } - - if($Line =~ m/push \@INC, /) - { # If the line contains the string (push @INC, ), then replace it - - # Replace "push @INC, " with "unshift @INC, " - $Line =~ s/push \@INC, /unshift \@INC, /; - - $Modified = 1; - } - } - - seek(FH, 0, 0); # Seek to the beginning. - print FH @ARRAY; # Write the changed array into the file. - close FH; # close the file. - - $FilesRead++; # One more file read. - - if($Modified) { - print "Modified the file, $FileToProcess\n"; - $Modified = 0; - - $FilesModified++; # One more file modified. - } - } - - $FilesTotal++; # One more file present. -} - diff --git a/gnu/usr.bin/perl/NetWare/t/NWScripts.pl b/gnu/usr.bin/perl/NetWare/t/NWScripts.pl deleted file mode 100644 index 5f21244fd90..00000000000 --- a/gnu/usr.bin/perl/NetWare/t/NWScripts.pl +++ /dev/null @@ -1,243 +0,0 @@ - - -print "\nGenerating automated scripts for NetWare...\n\n\n"; - - -use File::Basename; -use File::Copy; - -chdir '/perl/scripts/'; -$DirName = "t"; - -# These scripts have problems (either abend or hang) as of now (11 May 2001). -# So, they are commented out in the corresponding auto scripts, io.pl and lib.pl -@ScriptsNotUsed = ("t/io/openpid.t", "t/lib/filehandle.t", "t/lib/memoize/t/expire_module_t.t", "t/lib/NEXT/t/next.t", "t/lib/Math/BigInt/t/require.t", "t/ext/B/t/debug.t", "t/lib/IPC/Open3.t", "t/ext/B/t/showlex.t", "t/op/subst_wamp.t", "t/uni/upper.t", "t/lib/Net/t/ftp.t", "t/op/sort.t", "t/ext/POSIX/t/posix.t", "t/lib/CPAN/t/loadme.t", "t/lib/CPAN/t/vcmp.t"); - -opendir(DIR, $DirName); -@Dirs = readdir(DIR); -close(DIR); -foreach $DirItem(@Dirs) -{ - $DirItem1 = $DirName."/".$DirItem; - push @DirNames, $DirItem1; # All items under $DirName folder is copied into an array. - - if(-d $DirItem1) - { # If an item is a folder, then open it further. - - # Intermediary automated script like base.pl, lib.pl, cmd.pl etc. - $IntAutoScript = "t/".$DirItem.".pl"; - - # Open once in write mode since later files are opened in append mode, - # and if there already exists a file with the same name, all further opens - # will append to that file!! - open(FHW, '>', $IntAutoScript) or die "Unable to open the file, $IntAutoScript for writing.\n"; - seek(FHW, 0, 0); # seek to the beginning of the file. - close FHW; # close the file. - } -} - - -print "Generating t/nwauto.pl ...\n\n\n"; - -open(FHWA, '>', 't/nwauto.pl') or die "Unable to open the file, t/nwauto.pl for writing.\n"; -seek(FHWA, 0, 0); # seek to the beginning of the file. - -$version = sprintf("%vd",$^V); -print FHWA "\n\nprint \"Automated Unit Testing of Perl$version for NetWare\\n\\n\\n\"\;\n\n\n"; - - -foreach $FileName(@DirNames) -{ - $index = 0; - if(-d $FileName) - { # If an item is a folder, then open it further. - - $dir = dirname($FileName); # Get the folder name - - foreach $DirItem1(@Dirs) - { - $DirItem2 = $DirItem1; - if($FileName =~ m/$DirItem2/) - { - $DirItem = $DirItem1; - - # Intermediary automated script like base.pl, lib.pl, cmd.pl etc. - $IntAutoScript = "t/".$DirItem.".pl"; - } - } - - # Write into the intermediary auto script. - open(FHW, '>>', $IntAutoScript) or die "Unable to open the file, $IntAutoScript for appending.\n"; - seek(FHW, 0, 2); # seek to the end of the file. - - $pos = tell(FHW); - if($pos <= 0) - { - print "Generating $IntAutoScript...\n"; - print FHW "\n\nprint \"Testing $DirItem folder:\\n\\n\\n\"\;\n\n\n"; - } - - opendir(SUBDIR, $FileName); - @SubDirs = readdir(SUBDIR); - close(SUBDIR); - foreach $SubFileName(@SubDirs) - { - $SubFileName = $FileName."/".$SubFileName; - if(-d $SubFileName) - { - push @DirNames, $SubFileName; # If sub-folder, push it into the array. - } - else - { - &Process_File($SubFileName); # If file, process it. - } - - $index++; - } - - close FHW; # close the file. - - if($index <= 0) - { - # The folder is empty and delete the corresponding '.pl' file. - unlink($IntAutoScript); - print "Deleted $IntAutoScript since it corresponded to an empty folder.\n"; - } - else - { - if($pos <= 0) - { # This logic to make sure that it is written only once. - # Only if something is written into the intermediary auto script, - # only then make an entry of the intermediary auto script in nwauto.pl - print FHWA "print \`perl $IntAutoScript\`\;\n"; - print FHWA "print \"\\n\\n\\n\"\;\n\n"; - } - } - } - else - { - if(-f $FileName) - { - $dir = dirname($FileName); # Get the folder name - $base = basename($FileName); # Get the base name - ($base, $dir, $ext) = fileparse($FileName, '\..*'); # Get the extension of the file passed. - - # Do the processing only if the file has '.t' extension. - if($ext eq '.t') - { - print FHWA "print \`perl $FileName\`\;\n"; - print FHWA "print \"\\n\\n\\n\"\;\n\n"; - } - } - } -} - - -## Below adds the ending comments into all the intermediary auto scripts: - -opendir(DIR, $DirName); -@Dirs = readdir(DIR); -close(DIR); -foreach $DirItem(@Dirs) -{ - $index = 0; - - $FileName = $DirName."/".$DirItem; - if(-d $FileName) - { # If an item is a folder, then open it further. - - opendir(SUBDIR, $FileName); - @SubDirs = readdir(SUBDIR); - close(SUBDIR); - - # To not to write into the file if the corresponding folder was empty. - foreach $SubDir(@SubDirs) - { - $index++; - } - - if($index > 0) - { - # The folder not empty. - - # Intermediary automated script like base.pl, lib.pl, cmd.pl etc. - $IntAutoScript = "t/".$DirItem.".pl"; - - # Write into the intermediary auto script. - open(FHW, '>>', $IntAutoScript) or die "Unable to open the file, $IntAutoScript for appending.\n"; - seek(FHW, 0, 2); # seek to the end of the file. - - # Write into the intermediary auto script. - print FHW "\nprint \"Testing of $DirItem folder done!\\n\\n\"\;\n\n"; - - close FHW; # close the file. - } - } -} - - -# Write into nwauto.pl -print FHWA "\nprint \"Automated Unit Testing of Perl$version for NetWare done!\\n\\n\"\;\n\n"; - -close FHWA; # close the file. - -print "\n\nGeneration of t/nwauto.pl Done!\n\n"; - -print "\nGeneration of automated scripts for NetWare DONE!\n"; - - - - -# Process the file. -sub Process_File -{ - local($FileToProcess) = @_; # File name. - local($Script) = 0; - local($HeadCut) = 0; - - ## For example: - ## If the value of $FileToProcess is '/perl/scripts/t/pragma/warnings.t', then - ## $dir1 = '/perl/scripts/t/pragma/' - ## $base1 = 'warnings' - ## $ext1 = '.t' - $dir1 = dirname($FileToProcess); # Get the folder name - $base1 = basename($FileToProcess); # Get the base name - ($base1, $dir1, $ext1) = fileparse($FileToProcess, '\..*'); # Get the extension of the file passed. - - # Do the processing only if the file has '.t' extension. - if($ext1 eq '.t') - { - foreach $Script(@ScriptsNotUsed) - { - # The variables are converted to lower case before they are compared. - # This is done to remove the case-sensitive comparison done by 'eq'. - $Script1 = lc($Script); - $FileToProcess1 = lc($FileToProcess); - if($Script1 eq $FileToProcess1) - { - $HeadCut = 1; - } - } - - if($HeadCut) - { - # Write into the intermediary auto script. - print FHW "=head\n"; - } - - # Write into the intermediary auto script. - print FHW "print \"Testing $base1"."$ext1:\\n\\n\"\;\n"; - print FHW "print \`perl $FileToProcess\`\;\n"; # Write the changed array into the file. - print FHW "print \"\\n\\n\\n\"\;\n"; - - if($HeadCut) - { - # Write into the intermediary auto script. - print FHW "=cut\n"; - } - - $HeadCut = 0; - print FHW "\n"; - } -} - diff --git a/gnu/usr.bin/perl/NetWare/t/Readme.txt b/gnu/usr.bin/perl/NetWare/t/Readme.txt deleted file mode 100644 index 2b6984fb836..00000000000 --- a/gnu/usr.bin/perl/NetWare/t/Readme.txt +++ /dev/null @@ -1,101 +0,0 @@ - - - Automated Testing of Perl5 Interpreter for NetWare. - - - -A set of Standard Unit Test Scripts to test all the functionalities of -Perl5 Interpreter are available along with the CPAN download. They are -all located under 't' folder. These include sub-folders under 't' such -as: 'base', 'cmd', 'comp', 'io', lib', 'op', 'pod', 'pragma' and 'run'. -Each of these sub-folders contain few test scripts ('.t' files) under -them. - -Executing these test scripts on NetWare can be automated as per the -following: - -1. Generate automated scripts like 'base.pl', 'cmd.pl', 'comp.pl', 'io.pl', -'lib.pl', 'op.pl', 'pod.pl', 'pragma.pl', 'run.pl' that execute all the -test scripts ('.t' files) under the corresponding folder. - -For example, 'base.pl' to test all the scripts - under 'sys:\perl\scripts\t\base' folder, - 'comp.pl' to test all the scripts - under 'sys:\perl\scripts\t\comp' folder and so on. - -2. Generate an automated script, 'nwauto.pl' that executes all the above -mentioned '.pl' automated scripts, thus in turn executing all the '.t' -scripts. - -The script, 'NWScripts.pl' available under the 'NetWare\t' folder of the -CPAN download, is written to generate these automated scripts when -executed on a NetWare server. It generates 'base.pl', 'cmd.pl', 'comp.pl', -'io.pl', 'lib.pl', 'op.pl', 'pod.pl', 'pragma.pl', 'run.pl' and also -'nwauto.pl' by including all the corresponding '.t' scripts in them in -backtick operators. - -For example, all the scripts that are under 't\base' folder will be -entered in 'base.pl' and so on. 'nwauto.pl' includes all these '.pl' -scripts like 'base.pl', 'comp.pl' etc. - - -Perform the following steps to execute the automated scripts: - -1. Map your NetWare server to "i:" - -2. After complete build (building both interpreter and all extensions) -of Perl for NetWare, execute "nmake nwinstall" in the 'NetWare' folder -of the CPAN download. This installs all the library files, perl modules, -the '.pl' files under 'NetWare\t' folder and all the '.t' scripts -under 't' folder, all in appropriate folders onto your server. - -3. Execute the command "perl t\NWModify.pl" on the console command -prompt of your server. This script replaces - - "@INC = " with "unshift @INC, " and - "push @INC, " with "unshift @INC, " - -from all the scripts under 'sys:\perl\scripts\t' folder. - -This is done to include the correct path for libraries into the scripts -when executed on NetWare. If this is not done, some of the scripts will -not get executed since they cannot locate the corresponding libraries. - -4. Execute the command "perl t\NWScripts.pl" on the console command -prompt to generate the automated scripts mentioned above -under the 'sys:\perl\scripts\t' folder. - -5. Execute the command "perl t\nwauto.pl" on the server console command -prompt. This runs all the standard test scripts. If you desire to -redirect or save the results into a file, say 'nwauto.txt', then the -console command to execute is: "perl t\nwauto.pl > nwauto.txt". - -6. If you wish to execute only a certain set of scripts, then run the -corresponding '.pl' file. For example, if you wish to execute only the -'lib' scripts, then execute 'lib.pl' through the server console command, -"perl t\lib.pl'. To redirect the results into a file, the console command - is, "perl t\lib.pl > lib.txt". - - - -Known Issues: - -The following scripts are commented out in the corresponding autoscript: - -1. 'openpid.t' in 'sys:\perl\scripts\t\io.pl' script - Reason: - This either hangs or abends the server when executing through auto - scripts. When run individually, the script execution goes through - fine. - -2. 'argv.t' in 'sys:\perl\scripts\t\io.pl' script - Reason: - This either hangs or abends the server when executing through auto - scripts. When run individually, the script execution goes through - fine. - -3. 'filehandle.t' in 'sys:\perl\scripts\t\lib.pl' script - Reason: - This hangs in the last test case where it uses FileHandle::Pipe - whether run individually or through an auto script. - diff --git a/gnu/usr.bin/perl/NetWare/testnlm/echo/echo.c b/gnu/usr.bin/perl/NetWare/testnlm/echo/echo.c deleted file mode 100644 index fe468c3ffa6..00000000000 --- a/gnu/usr.bin/perl/NetWare/testnlm/echo/echo.c +++ /dev/null @@ -1,31 +0,0 @@ -/********************************************************************** -* -* C Source: echo.c -* Instance: idc_rads_2 -* Description: DOS echo Emulation -* %created_by: smscm % -* %date_created: Fri Apr 20 19:05:31 2001 % -* -**********************************************************************/ -#ifndef lint -static char *_csrc = "@(#) %filespec: echo.c~1 % (%full_filespec: echo.c~1:csrc:idc_rads#3 %)"; -#endif - -#include -//#include -#include "clibstuf.h" - -void main (int argc, char** argv) -{ - fnInitGpfGlobals(); - if (argc>1 && argv[1]!=NULL && strcmp(argv[1],"-d")==0) { - int n; - for (n=0; n < argc; n++) { - printf("%2d: '%s'\n", n, argv[n]); - } - } else { - while (--argc) { - printf("%s%c", *++argv, argc==1 ? '\n' : ' '); - } - } -} diff --git a/gnu/usr.bin/perl/NetWare/testnlm/type/type.c b/gnu/usr.bin/perl/NetWare/testnlm/type/type.c deleted file mode 100644 index c680fcd4f05..00000000000 --- a/gnu/usr.bin/perl/NetWare/testnlm/type/type.c +++ /dev/null @@ -1,48 +0,0 @@ -/********************************************************************** -* -* C Source: type.c -* Instance: idc_rads_2 -* Description: DOS type Emulation -* %created_by: smscm % -* %date_created: Fri Apr 20 19:05:34 2001 % -* -**********************************************************************/ -#ifndef lint -static char *_csrc = "@(#) %filespec: type.c~1 % (%full_filespec: type.c~1:csrc:idc_rads#3 %)"; -#endif - -#include -#include -#include "clibstuf.h" - -void main (int argc, char** argv) -{ - FILE* pfile = NULL; - int k; - int thechar; - char* defaultDir; - - fnInitGpfGlobals(); - SetCurrentNameSpace(NWOS2_NAME_SPACE); - defaultDir = (char *)getenv("PERL_ROOT"); - if (!defaultDir || (strlen(defaultDir) == 0)) - defaultDir = "sys:\\perl\\scripts"; - chdir(defaultDir); - - k = 1; - while (k < argc) - { - // open the next file and print it out - pfile = fopen(argv[k],"r"); - if (pfile) - { - while ((thechar = getc(pfile)) != EOF) - { - if (thechar != 0x0d) - printf("%c",thechar); - } - fclose (pfile); - } - k++; - } -} diff --git a/gnu/usr.bin/perl/NetWare/win32ish.h b/gnu/usr.bin/perl/NetWare/win32ish.h deleted file mode 100644 index f6603d50f44..00000000000 --- a/gnu/usr.bin/perl/NetWare/win32ish.h +++ /dev/null @@ -1,46 +0,0 @@ - -/* - * Copyright © 2001 Novell, Inc. All Rights Reserved. - * - * You may distribute under the terms of either the GNU General Public - * License or the Artistic License, as specified in the README file. - * - */ - -/* - * FILENAME : Win32ish.h - * DESCRIPTION : For Win32 type definitions like BOOL. - * Author : HYAK - * Date : January 2001. - * - */ - - - -#ifndef __Win32ish_H__ -#define __Win32ish_H__ - - -#ifndef BOOL - typedef unsigned int BOOL; -#endif - -#ifndef DWORD - typedef unsigned long DWORD; -#endif - -typedef DWORD LCID; -typedef long HRESULT; -typedef void* LPVOID; - -#ifndef TRUE - #define TRUE 1 -#endif - -#ifndef FALSE - #define FALSE 0 -#endif - - -#endif // __Win32ish_H__ - diff --git a/gnu/usr.bin/perl/Porting/Glossary b/gnu/usr.bin/perl/Porting/Glossary index e11e4eed234..2dcb5651906 100644 --- a/gnu/usr.bin/perl/Porting/Glossary +++ b/gnu/usr.bin/perl/Porting/Glossary @@ -276,6 +276,10 @@ comm (Loc.U): full pathname (if any) of the comm program. After Configure runs, the value is reset to a plain "comm" and is not useful. +compiler_warning (compiler_warning.U): + This variable holds the command to check if the file specified as a + parameter contains a compiler warning + compress (Loc.U): This variable is defined but not used by Configure. The value is the empty string and is not useful. @@ -448,6 +452,11 @@ d_atoll (atoll.U): This variable conditionally defines the HAS_ATOLL symbol, which indicates to the C program that the atoll() routine is available. +d_attribute_always_inline (d_attribut.U): + This variable conditionally defines HASATTRIBUTE_ALWAYS_INLINE, + which indicates that the C compiler can know that certain + functions should always be inlined. + d_attribute_deprecated (d_attribut.U): This variable conditionally defines HASATTRIBUTE_DEPRECATED, which indicates that GCC can handle the attribute for marking deprecated @@ -886,6 +895,16 @@ d_fegetround (d_fegetround.U): This variable conditionally defines HAS_FEGETROUND if fegetround() is available to get the floating point rounding mode. +d_ffs (d_ffs.U): + This variable conditionally defines the HAS_FFS symbol, which + indicates to the C program that the ffs() routine is available + to find the first bit which is set in its integer argument. + +d_ffsl (d_ffs.U): + This variable conditionally defines the HAS_FFSL symbol, which + indicates to the C program that the ffsl() routine is available + to find the first bit which is set in its long integer argument. + d_fgetpos (d_fgetpos.U): This variable conditionally defines HAS_FGETPOS if fgetpos() is available to get the file position indicator. @@ -1066,6 +1085,11 @@ d_getcwd (d_getcwd.U): indicates to the C program that the getcwd() routine is available to get the current working directory. +d_getenv_preserves_other_thread (d_getenv_thread.U): + This variable conditionally defines the GETENV_PRESERVES_OTHER_THREAD + symbol, which indicates to the C program that the getenv() system call + does not zap the static buffer in a different thread. + d_getespwnam (d_getespwnam.U): This variable conditionally defines HAS_GETESPWNAM if getespwnam() is available to retrieve enhanced (shadow) password entries by name. @@ -1601,7 +1625,7 @@ d_long_double_style_ieee_extended (d_longdbl.U): This variable conditionally defines LONG_DOUBLE_STYLE_IEEE_EXTENDED if the long double is the 80-bit IEEE 754 extended precision. Note that despite the 'extended' this is less than the 'std', - since thisis an extension of the double precision. + since this is an extension of the double precision. d_long_double_style_ieee_std (d_longdbl.U): This variable conditionally defines LONG_DOUBLE_STYLE_IEEE_STD @@ -1663,10 +1687,14 @@ d_malloc_size (d_malloc_size.U): This symbol, if defined, indicates that the malloc_size routine is available for use. +d_malloc_usable_size (d_malloc_size.U): + This symbol, if defined, indicates that the malloc_usable_size + routine is available for use. + d_mblen (d_mblen.U): This variable conditionally defines the HAS_MBLEN symbol, which indicates to the C program that the mblen() routine is available - to find the number of bytes in a multibye character. + to find the number of bytes in a multibyte character. d_mbrlen (d_mbrlen.U): This variable conditionally defines the HAS_MBRLEN symbol if the @@ -1691,7 +1719,7 @@ d_mbtowc (d_mbtowc.U): d_memmem (d_memmem.U): This variable conditionally defines the HAS_MEMMEM symbol, which indicates to the C program that the memmem() routine is available - to return a pointer to the start of the first occurance of a + to return a pointer to the start of the first occurrence of a substring in a memory area (or NULL if not found). d_memrchr (d_memrchr.U): @@ -1871,6 +1899,16 @@ d_nl_langinfo (d_nl_langinfo.U): This variable conditionally defines the HAS_NL_LANGINFO symbol, which indicates to the C program that the nl_langinfo() routine is available. +d_nl_langinfo_l (d_nl_langinfo_l.U): + This variable contains the eventual value of the + HAS_NL_LANGINFO_L symbol, which indicates if the + nl_langinfo_l() function exists. + +d_non_int_bitfields (d_bitfield.U): + This variable conditionally defines HAS_NON_INT_BITFIELDS + which indicates that the C compiler accepts struct bitfields of sizes + that aren't 'int' or 'unsigned int' + d_nv_preserves_uv (perlxv.U): This variable indicates whether a variable of type nvtype can preserve all the bits a variable of type uvtype. @@ -2491,6 +2529,10 @@ d_sockaddr_sa_len (d_socket.U): which indicates that a struct sockaddr structure has the sa_len member. +d_sockaddr_storage (d_socket.U): + This variable conditionally defines the HAS_SOCKADDR_STORAGE symbol, + which indicates the availability of a struct sockaddr_storage. + d_sockatmark (d_sockatmark.U): This variable conditionally defines the HAS_SOCKATMARK symbol, which indicates to the C program that the sockatmark() routine is available. @@ -2680,6 +2722,10 @@ d_strxfrm (d_strxfrm.U): This variable conditionally defines HAS_STRXFRM if strxfrm() is available to transform strings. +d_strxfrm_l (d_strxfrm_l.U): + This variable conditionally defines HAS_STRXFRM_L if strxfrm_l() is + available to transform strings. + d_suidsafe (d_dosuid.U): This variable conditionally defines SETUID_SCRIPTS_ARE_SECURE_NOW if setuid scripts can be secure. This test looks in /dev/fd/. @@ -2741,6 +2787,10 @@ d_tgamma (d_tgamma.U): indicates to the C program that the tgamma() routine is available for the gamma function. See also d_lgamma. +d_thread_local (d_thread_local.U): + This variable conditionally defines the PERL_THREAD_LOCAL symbol. In + turn that gives a linkage specification for thread-local storage. + d_thread_safe_nl_langinfo_l (d_nl_langinfo_l.U): This variable contains the eventual value of the HAS_THREAD_SAFE_NL_LANGINFO_L symbol, which indicates if the @@ -2902,6 +2952,11 @@ d_waitpid (d_waitpid.U): This variable conditionally defines HAS_WAITPID if waitpid() is available to wait for child process. +d_wcrtomb (d_wcrtomb.U): + This variable conditionally defines the HAS_WCRTOMB symbol if the + wcrtomb() routine is available to be used to convert a wide character + into a multi-byte character. + d_wcscmp (d_wcscmp.U): This variable conditionally defines the HAS_WCSCMP symbol if the wcscmp() routine is available and can be used to compare wide @@ -3817,8 +3872,8 @@ i_wctype (i_wctype.U): that indicates whether a C program may include . i_xlocale (d_newlocale.U): - This symbol, if defined, indicates to the C program that it should - include to get uselocale() and its friends + This symbol, if defined, indicates to the C program that the + header xlocale.h is available. See also xlocale_needed. ignore_versioned_solibs (libs.U): This variable should be non-empty if non-versioned shared @@ -4652,6 +4707,10 @@ PERL_SUBVERSION (Oldsyms.U): development subversions. This value is manually set in patchlevel.h +perl_thread_local (d_thread_local.U): + This variable gives the value for the PERL_THREAD_LOCAL symbol (when + defined), which gives a linkage specification for thread-local storage. + PERL_VERSION (Oldsyms.U): In a Perl version number such as 5.6.2, this is the 6. This value is manually set in patchlevel.h @@ -5255,6 +5314,13 @@ ssizetype (ssizetype.U): of bytes or an error condition. It must be a signed type. We will pick a type such that sizeof(SSize_t) == sizeof(Size_t). +st_dev_sign (st_dev_def.U): + This variable contains the signedness of struct stat's st_dev. + 1 for unsigned, -1 for signed. + +st_dev_size (st_dev_def.U): + This variable contains the size of struct stat's st_dev in bytes. + st_ino_sign (st_ino_def.U): This variable contains the signedness of struct stat's st_ino. 1 for unsigned, -1 for signed. @@ -5499,11 +5565,6 @@ uquadtype (quadtype.U): unsigned int, unsigned long long, uint64_t, or whatever type is used for 64-bit integers. -use5005threads (usethreads.U): - This variable conditionally defines the USE_5005THREADS symbol, - and indicates that Perl should be built to use the 5.005-based - threading implementation. Only valid up to 5.8.x. - use64bitall (use64bits.U): This variable conditionally defines the USE_64_BIT_ALL symbol, and indicates that 64-bit integer types should be used @@ -5530,6 +5591,11 @@ usecrosscompile (Cross.U): This variable conditionally defines the USE_CROSS_COMPILE symbol, and indicates that Perl has been cross-compiled. +usedefaultstrict (usedefaultstrict.U): + This setting provides a mechanism for perl developers to enable + strict by default. These defaults do not apply when perl is run + via -e or -E. + usedevel (Devel.U): This variable indicates that Perl was configured with development features enabled. This should not be done for production builds. @@ -5854,6 +5920,10 @@ xlibpth (libpth.U): libraries on this platform, for example CPU-specific libraries (on multi-CPU platforms) may be listed here. +xlocale_needed (d_newlocale.U): + This symbol, if defined, indicates that the C program should + include to get newlocale() and its friends. + yacc (yacc.U): This variable holds the name of the compiler compiler we want to use in the Makefile. It can be yacc, byacc, or bison -y. diff --git a/gnu/usr.bin/perl/Porting/Maintainers.pl b/gnu/usr.bin/perl/Porting/Maintainers.pl index ca47bd1c505..1413ce02fc0 100644 --- a/gnu/usr.bin/perl/Porting/Maintainers.pl +++ b/gnu/usr.bin/perl/Porting/Maintainers.pl @@ -70,6 +70,10 @@ use File::Glob qw(:case); # upload the corresponding cpan release, and the entry in this file should # only be updated when that release has been done.) +# MAIN_MODULE names the top-level module by which the tarball is indexed on +# CPAN in cases where this differs from the distribution's key in %Modules. +# (If it is equal then MAIN_MODULE is optional and should be omitted.) + # EXCLUDED is a list of files to be excluded from a CPAN tarball before # comparing the remaining contents with core. Each item can either be a # full pathname (eg 't/foo.t') or a pattern (e.g. qr{^t/}). @@ -123,7 +127,7 @@ use File::Glob qw(:case); %Modules = ( 'Archive::Tar' => { - 'DISTRIBUTION' => 'BINGOS/Archive-Tar-2.36.tar.gz', + 'DISTRIBUTION' => 'BINGOS/Archive-Tar-2.40.tar.gz', 'FILES' => q[cpan/Archive-Tar], 'BUGS' => 'bug-archive-tar@rt.cpan.org', 'EXCLUDED' => [ @@ -138,7 +142,7 @@ use File::Glob qw(:case); }, 'autodie' => { - 'DISTRIBUTION' => 'TODDR/autodie-2.32.tar.gz', + 'DISTRIBUTION' => 'TODDR/autodie-2.34.tar.gz', 'FILES' => q[cpan/autodie], 'EXCLUDED' => [ qr{benchmarks}, @@ -182,9 +186,10 @@ use File::Glob qw(:case); }, 'bignum' => { - 'DISTRIBUTION' => 'PJACKLAM/bignum-0.51.tar.gz', + 'DISTRIBUTION' => 'PJACKLAM/bignum-0.65.tar.gz', 'FILES' => q[cpan/bignum], 'EXCLUDED' => [ + qr{^xt/}, qr{^t/author-}, qr{^t/release-}, qw( t/00sig.t @@ -199,7 +204,7 @@ use File::Glob qw(:case); }, 'Compress::Raw::Bzip2' => { - 'DISTRIBUTION' => 'PMQS/Compress-Raw-Bzip2-2.093.tar.gz', + 'DISTRIBUTION' => 'PMQS/Compress-Raw-Bzip2-2.103.tar.gz', 'FILES' => q[cpan/Compress-Raw-Bzip2], 'EXCLUDED' => [ qr{^t/Test/}, @@ -211,7 +216,7 @@ use File::Glob qw(:case); }, 'Compress::Raw::Zlib' => { - 'DISTRIBUTION' => 'PMQS/Compress-Raw-Zlib-2.093.tar.gz', + 'DISTRIBUTION' => 'PMQS/Compress-Raw-Zlib-2.105.tar.gz', 'FILES' => q[cpan/Compress-Raw-Zlib], 'EXCLUDED' => [ qr{^examples/}, @@ -224,12 +229,11 @@ use File::Glob qw(:case); }, 'Config::Perl::V' => { - 'DISTRIBUTION' => 'HMBRAND/Config-Perl-V-0.31.tgz', + 'DISTRIBUTION' => 'HMBRAND/Config-Perl-V-0.33.tgz', 'FILES' => q[cpan/Config-Perl-V], 'EXCLUDED' => [qw( examples/show-v.pl )], - 'CUSTOMIZED' => [ qw(V.pm) ], }, 'constant' => { @@ -246,7 +250,7 @@ use File::Glob qw(:case); }, 'CPAN' => { - 'DISTRIBUTION' => 'ANDK/CPAN-2.27.tar.gz', + 'DISTRIBUTION' => 'ANDK/CPAN-2.33-TRIAL.tar.gz', 'FILES' => q[cpan/CPAN], 'EXCLUDED' => [ qr{^distroprefs/}, @@ -258,6 +262,7 @@ use File::Glob qw(:case); scripts/cpan-mirrors PAUSE2015.pub PAUSE2019.pub + PAUSE2021.pub SlayMakefile t/00signature.t t/04clean_load.t @@ -320,12 +325,12 @@ use File::Glob qw(:case); }, 'Data::Dumper' => { - 'DISTRIBUTION' => 'XSAWYERX/Data-Dumper-2.173.tar.gz', + 'DISTRIBUTION' => 'NWCLARK/Data-Dumper-2.183.tar.gz', 'FILES' => q[dist/Data-Dumper], }, 'DB_File' => { - 'DISTRIBUTION' => 'PMQS/DB_File-1.853.tar.gz', + 'DISTRIBUTION' => 'PMQS/DB_File-1.857.tar.gz', 'FILES' => q[cpan/DB_File], 'EXCLUDED' => [ qr{^patches/}, @@ -339,7 +344,7 @@ use File::Glob qw(:case); }, 'Devel::PPPort' => { - 'DISTRIBUTION' => 'ATOOMIC/Devel-PPPort-3.57.tar.gz', + 'DISTRIBUTION' => 'ATOOMIC/Devel-PPPort-3.68.tar.gz', 'FILES' => q[dist/Devel-PPPort], 'EXCLUDED' => [ 'PPPort.pm', # we use PPPort_pm.PL instead @@ -353,24 +358,15 @@ use File::Glob qw(:case); }, 'Digest' => { - 'DISTRIBUTION' => 'GAAS/Digest-1.17.tar.gz', + 'DISTRIBUTION' => 'TODDR/Digest-1.20.tar.gz', 'FILES' => q[cpan/Digest], 'EXCLUDED' => ['digest-bench'], - 'CUSTOMIZED' => [ - # CVE-2016-1238 - qw( Digest.pm ) - ], }, 'Digest::MD5' => { - 'DISTRIBUTION' => 'GAAS/Digest-MD5-2.55.tar.gz', + 'DISTRIBUTION' => 'TODDR/Digest-MD5-2.58.tar.gz', 'FILES' => q[cpan/Digest-MD5], - 'EXCLUDED' => ['rfc1321.txt'], - 'CUSTOMIZED' => [ - # RT #133495 - qw(MD5.xs MD5.pm), - qw(Makefile.PL t/files.t) - ], + 'EXCLUDED' => [ 'rfc1321.txt', 'bin/md5sum.pl' ], }, 'Digest::SHA' => { @@ -391,7 +387,7 @@ use File::Glob qw(:case); }, 'Encode' => { - 'DISTRIBUTION' => 'DANKOGAI/Encode-3.06.tar.gz', + 'DISTRIBUTION' => 'DANKOGAI/Encode-3.17.tar.gz', 'FILES' => q[cpan/Encode], 'EXCLUDED' => [ qw( t/whatwg-aliases.json @@ -416,13 +412,9 @@ use File::Glob qw(:case); }, 'experimental' => { - 'DISTRIBUTION' => 'LEONT/experimental-0.020.tar.gz', + 'DISTRIBUTION' => 'LEONT/experimental-0.027.tar.gz', 'FILES' => q[cpan/experimental], 'EXCLUDED' => [qr{^xt/}], - 'CUSTOMIZED' => [ - # smartmatch changes - 't/basic.t', - ], }, 'Exporter' => { @@ -436,7 +428,7 @@ use File::Glob qw(:case); }, 'ExtUtils::CBuilder' => { - 'DISTRIBUTION' => 'AMBS/ExtUtils-CBuilder-0.280234.tar.gz', + 'DISTRIBUTION' => 'AMBS/ExtUtils-CBuilder-0.280236.tar.gz', 'FILES' => q[dist/ExtUtils-CBuilder], 'EXCLUDED' => [ qw(README.mkdn), @@ -448,6 +440,14 @@ use File::Glob qw(:case); 'DISTRIBUTION' => 'NWCLARK/ExtUtils-Constant-0.25.tar.gz', 'FILES' => q[cpan/ExtUtils-Constant], + 'CUSTOMIZED' => [ + # https://rt.cpan.org/Ticket/Display.html?id=142181 + 'lib/ExtUtils/Constant/Base.pm', + + # https://rt.cpan.org/Public/Bug/Display.html?id=132995 + # https://rt.cpan.org/Ticket/Display.html?id=142183 + 't/Constant.t', + ], 'EXCLUDED' => [ qw( lib/ExtUtils/Constant/Aaargh56Hash.pm examples/perl_keyword.pl @@ -457,7 +457,7 @@ use File::Glob qw(:case); }, 'ExtUtils::Install' => { - 'DISTRIBUTION' => 'BINGOS/ExtUtils-Install-2.14.tar.gz', + 'DISTRIBUTION' => 'BINGOS/ExtUtils-Install-2.20.tar.gz', 'FILES' => q[cpan/ExtUtils-Install], 'EXCLUDED' => [ qw( t/lib/Test/Builder.pm @@ -471,7 +471,7 @@ use File::Glob qw(:case); }, 'ExtUtils::MakeMaker' => { - 'DISTRIBUTION' => 'BINGOS/ExtUtils-MakeMaker-7.44.tar.gz', + 'DISTRIBUTION' => 'BINGOS/ExtUtils-MakeMaker-7.64.tar.gz', 'FILES' => q[cpan/ExtUtils-MakeMaker], 'EXCLUDED' => [ qr{^t/lib/Test/}, @@ -485,8 +485,17 @@ use File::Glob qw(:case); ], }, + 'ExtUtils::PL2Bat' => { + 'DISTRIBUTION' => 'LEONT/ExtUtils-PL2Bat-0.004.tar.gz', + 'FILES' => q[cpan/ExtUtils-PL2Bat], + 'EXCLUDED' => [ + 't/00-compile.t', + 'script/pl2bat.pl' + ], + }, + 'ExtUtils::Manifest' => { - 'DISTRIBUTION' => 'ETHER/ExtUtils-Manifest-1.72.tar.gz', + 'DISTRIBUTION' => 'ETHER/ExtUtils-Manifest-1.73.tar.gz', 'FILES' => q[cpan/ExtUtils-Manifest], 'EXCLUDED' => [ qr(^t/00-report-prereqs), @@ -495,17 +504,17 @@ use File::Glob qw(:case); }, 'ExtUtils::ParseXS' => { - 'DISTRIBUTION' => 'SMUELLER/ExtUtils-ParseXS-3.35.tar.gz', + 'DISTRIBUTION' => 'XSAWYERX/ExtUtils-ParseXS-3.44.tar.gz', 'FILES' => q[dist/ExtUtils-ParseXS], }, 'File::Fetch' => { - 'DISTRIBUTION' => 'BINGOS/File-Fetch-0.56.tar.gz', + 'DISTRIBUTION' => 'BINGOS/File-Fetch-1.04.tar.gz', 'FILES' => q[cpan/File-Fetch], }, 'File::Path' => { - 'DISTRIBUTION' => 'JKEENAN/File-Path-2.16.tar.gz', + 'DISTRIBUTION' => 'JKEENAN/File-Path-2.18.tar.gz', 'FILES' => q[cpan/File-Path], 'EXCLUDED' => [ qw(t/Path-Class.t), @@ -514,7 +523,7 @@ use File::Glob qw(:case); }, 'File::Temp' => { - 'DISTRIBUTION' => 'ETHER/File-Temp-0.2309.tar.gz', + 'DISTRIBUTION' => 'ETHER/File-Temp-0.2311.tar.gz', 'FILES' => q[cpan/File-Temp], 'EXCLUDED' => [ qw( README.mkdn @@ -535,7 +544,7 @@ use File::Glob qw(:case); }, 'Filter::Util::Call' => { - 'DISTRIBUTION' => 'RURBAN/Filter-1.59.tar.gz', + 'DISTRIBUTION' => 'RURBAN/Filter-1.60.tar.gz', 'FILES' => q[cpan/Filter-Util-Call pod/perlfilter.pod ], @@ -546,6 +555,7 @@ use File::Glob qw(:case); qr{^lib/Filter/}, qr{^tee/}, qw( .appveyor.yml + .whitesource Call/Makefile.PL Call/ppport.h Call/typemap @@ -577,24 +587,23 @@ use File::Glob qw(:case); }, 'FindBin' => { - 'DISTRIBUTION' => 'XSAWYERX/FindBin-0.000.tar.gz', + 'DISTRIBUTION' => 'TODDR/FindBin-1.52.tar.gz', 'FILES' => q[dist/FindBin], }, 'Getopt::Long' => { - 'DISTRIBUTION' => 'JV/Getopt-Long-2.51.tar.gz', + 'DISTRIBUTION' => 'JV/Getopt-Long-2.52.tar.gz', 'FILES' => q[cpan/Getopt-Long], 'EXCLUDED' => [ qr{^examples/}, - qw( perl-Getopt-Long.spec - lib/newgetopt.pl + qw( lib/newgetopt.pl t/gol-compat.t ), ], }, 'HTTP::Tiny' => { - 'DISTRIBUTION' => 'DAGOLDEN/HTTP-Tiny-0.076.tar.gz', + 'DISTRIBUTION' => 'DAGOLDEN/HTTP-Tiny-0.080.tar.gz', 'FILES' => q[cpan/HTTP-Tiny], 'EXCLUDED' => [ 't/00-report-prereqs.t', @@ -623,13 +632,14 @@ use File::Glob qw(:case); }, 'IO' => { - 'DISTRIBUTION' => 'TODDR/IO-1.42.tar.gz', - 'FILES' => q[dist/IO/], + 'DISTRIBUTION' => 'TODDR/IO-1.50.tar.gz', + 'FILES' => q[dist/IO], 'EXCLUDED' => ['t/test.pl'], }, 'IO-Compress' => { - 'DISTRIBUTION' => 'PMQS/IO-Compress-2.093.tar.gz', + 'DISTRIBUTION' => 'PMQS/IO-Compress-2.106.tar.gz', + 'MAIN_MODULE' => 'IO::Compress::Base', 'FILES' => q[cpan/IO-Compress], 'EXCLUDED' => [ qr{^examples/}, @@ -642,7 +652,7 @@ use File::Glob qw(:case); }, 'IO::Socket::IP' => { - 'DISTRIBUTION' => 'PEVANS/IO-Socket-IP-0.39.tar.gz', + 'DISTRIBUTION' => 'PEVANS/IO-Socket-IP-0.41.tar.gz', 'FILES' => q[cpan/IO-Socket-IP], 'EXCLUDED' => [ qr{^examples/}, @@ -650,7 +660,7 @@ use File::Glob qw(:case); }, 'IO::Zlib' => { - 'DISTRIBUTION' => 'TOMHUGHES/IO-Zlib-1.10.tar.gz', + 'DISTRIBUTION' => 'TOMHUGHES/IO-Zlib-1.11.tar.gz', 'FILES' => q[cpan/IO-Zlib], }, @@ -660,7 +670,7 @@ use File::Glob qw(:case); }, 'IPC::SysV' => { - 'DISTRIBUTION' => 'MHX/IPC-SysV-2.07.tar.gz', + 'DISTRIBUTION' => 'MHX/IPC-SysV-2.09.tar.gz', 'FILES' => q[cpan/IPC-SysV], 'EXCLUDED' => [ qw( const-c.inc @@ -670,13 +680,13 @@ use File::Glob qw(:case); }, 'JSON::PP' => { - 'DISTRIBUTION' => 'ISHIGAKI/JSON-PP-4.04.tar.gz', + 'DISTRIBUTION' => 'ISHIGAKI/JSON-PP-4.07.tar.gz', 'FILES' => q[cpan/JSON-PP], }, 'lib' => { 'DISTRIBUTION' => 'SMUELLER/lib-0.63.tar.gz', - 'FILES' => q[dist/lib/], + 'FILES' => q[dist/lib], 'EXCLUDED' => [ qw( forPAUSE/lib.pm t/00pod.t @@ -685,7 +695,8 @@ use File::Glob qw(:case); }, 'libnet' => { - 'DISTRIBUTION' => 'SHAY/libnet-3.11.tar.gz', + 'DISTRIBUTION' => 'SHAY/libnet-3.13.tar.gz', + 'MAIN_MODULE' => 'Net::Cmd', 'FILES' => q[cpan/libnet], 'EXCLUDED' => [ qw( Configure @@ -697,6 +708,23 @@ use File::Glob qw(:case); qr(^demos/), qr(^t/external/), ], + # https://github.com/steve-m-hay/perl-libnet/pull/45 + 'CUSTOMIZED' => [ + 'lib/Net/Cmd.pm', + 'lib/Net/Config.pm', + 'lib/Net/Domain.pm', + 'lib/Net/FTP.pm', + 'lib/Net/FTP/A.pm', + 'lib/Net/FTP/E.pm', + 'lib/Net/FTP/I.pm', + 'lib/Net/FTP/L.pm', + 'lib/Net/FTP/dataconn.pm', + 'lib/Net/NNTP.pm', + 'lib/Net/Netrc.pm', + 'lib/Net/POP3.pm', + 'lib/Net/SMTP.pm', + 'lib/Net/Time.pm', + ], }, 'Locale::Maketext' => { @@ -721,9 +749,10 @@ use File::Glob qw(:case); }, 'Math::BigInt' => { - 'DISTRIBUTION' => 'PJACKLAM/Math-BigInt-1.999818.tar.gz', + 'DISTRIBUTION' => 'PJACKLAM/Math-BigInt-1.999830.tar.gz', 'FILES' => q[cpan/Math-BigInt], 'EXCLUDED' => [ + qr{^xt/}, qr{^examples/}, qr{^t/author-}, qr{^t/release-}, @@ -734,9 +763,11 @@ use File::Glob qw(:case); }, 'Math::BigInt::FastCalc' => { - 'DISTRIBUTION' => 'PJACKLAM/Math-BigInt-FastCalc-0.5009.tar.gz', + 'DISTRIBUTION' => 'PJACKLAM/Math-BigInt-FastCalc-0.5012.tar.gz', 'FILES' => q[cpan/Math-BigInt-FastCalc], 'EXCLUDED' => [ + qr{^inc/}, + qr{^xt/}, qr{^t/author-}, qr{^t/release-}, qr{^t/Math/BigInt/Lib/TestUtil.pm}, @@ -757,9 +788,11 @@ use File::Glob qw(:case); }, 'Math::BigRat' => { - 'DISTRIBUTION' => 'PJACKLAM/Math-BigRat-0.2614.tar.gz', + 'DISTRIBUTION' => 'PJACKLAM/Math-BigRat-0.2621.tar.gz', 'FILES' => q[cpan/Math-BigRat], 'EXCLUDED' => [ + qr{^xt/}, + qr{^math-bigrat-pod.diff}, qr{^t/author-}, qr{^t/release-}, qw( t/00sig.t @@ -775,6 +808,7 @@ use File::Glob qw(:case); 'lib/Math/Complex.pm', # CPAN RT 118467 't/Complex.t', # CPAN RT 118467 't/Trig.t', # CPAN RT 118467 + 't/underbar.t', ], 'EXCLUDED' => [ qw( t/pod.t @@ -789,28 +823,34 @@ use File::Glob qw(:case); 'EXCLUDED' => ['article.html'], 'CUSTOMIZED' => [ # CVE-2016-1238 - qw( Memoize.pm ) + qw( Memoize.pm ), + + # CPAN RT 108382 + qw( t/expmod_t.t t/speed.t ), + + # CPAN RT 139736 + qw( t/errors.t t/tie_gdbm.t ), ], }, 'MIME::Base64' => { - 'DISTRIBUTION' => 'GAAS/MIME-Base64-3.15.tar.gz', + 'DISTRIBUTION' => 'CAPOEIRAB/MIME-Base64-3.16.tar.gz', 'FILES' => q[cpan/MIME-Base64], - 'EXCLUDED' => ['t/bad-sv.t'], + 'EXCLUDED' => [ qr{^xt/}, 'benchmark', 'benchmark-qp', qr{^t/00-report-prereqs} ], }, 'Module::CoreList' => { - 'DISTRIBUTION' => 'BINGOS/Module-CoreList-5.20200428.tar.gz', + 'DISTRIBUTION' => 'BINGOS/Module-CoreList-5.20220320.tar.gz', 'FILES' => q[dist/Module-CoreList], }, 'Module::Load' => { - 'DISTRIBUTION' => 'BINGOS/Module-Load-0.34.tar.gz', + 'DISTRIBUTION' => 'BINGOS/Module-Load-0.36.tar.gz', 'FILES' => q[cpan/Module-Load], }, 'Module::Load::Conditional' => { - 'DISTRIBUTION' => 'BINGOS/Module-Load-Conditional-0.70.tar.gz', + 'DISTRIBUTION' => 'BINGOS/Module-Load-Conditional-0.74.tar.gz', 'FILES' => q[cpan/Module-Load-Conditional], }, @@ -831,21 +871,36 @@ use File::Glob qw(:case); }, 'Net::Ping' => { - 'DISTRIBUTION' => 'RURBAN/Net-Ping-2.72.tar.gz', + 'DISTRIBUTION' => 'RURBAN/Net-Ping-2.74.tar.gz', 'FILES' => q[dist/Net-Ping], 'EXCLUDED' => [ + qr{^\.[awc]}, qw(README.md.PL), qw(t/020_external.t), qw(t/600_pod.t), qw(t/601_pod-coverage.t), + qw(t/602_kwalitee.t), + qw(t/603_meta.t), + qw(t/604_manifest.t), + qw(t/appveyor-test.bat), + + ], + 'CUSTOMIZED' => [ + qw{ + t/000_load.t + t/001_new.t + t/010_pingecho.t + t/450_service.t + t/500_ping_icmp.t + t/501_ping_icmpv6.t + } ], }, 'NEXT' => { - 'DISTRIBUTION' => 'NEILB/NEXT-0.67.tar.gz', + 'DISTRIBUTION' => 'NEILB/NEXT-0.69.tar.gz', 'FILES' => q[cpan/NEXT], 'EXCLUDED' => [qr{^demo/}], - 'CUSTOMIZED' => [ qw(lib/NEXT.pm t/next.t) ], }, 'Params::Check' => { @@ -863,6 +918,7 @@ use File::Glob qw(:case); 'PathTools' => { 'DISTRIBUTION' => 'XSAWYERX/PathTools-3.75.tar.gz', + 'MAIN_MODULE' => 'File::Spec', 'FILES' => q[dist/PathTools], 'EXCLUDED' => [ qr{^t/lib/Test/}, @@ -877,25 +933,19 @@ use File::Glob qw(:case); }, 'perlfaq' => { - 'DISTRIBUTION' => 'ETHER/perlfaq-5.20200523.tar.gz', + 'DISTRIBUTION' => 'ETHER/perlfaq-5.20210520.tar.gz', 'FILES' => q[cpan/perlfaq], 'EXCLUDED' => [ qr/^inc/, qr/^xt/, qr{^t/00-} ], }, 'PerlIO::via::QuotedPrint' => { - 'DISTRIBUTION' => 'SHAY/PerlIO-via-QuotedPrint-0.08.tar.gz', + 'DISTRIBUTION' => 'SHAY/PerlIO-via-QuotedPrint-0.09.tar.gz', 'FILES' => q[cpan/PerlIO-via-QuotedPrint], }, 'Pod::Checker' => { - 'DISTRIBUTION' => 'MAREKR/Pod-Checker-1.73.tar.gz', + 'DISTRIBUTION' => 'MAREKR/Pod-Checker-1.74.tar.gz', 'FILES' => q[cpan/Pod-Checker], - 'CUSTOMIZED' => [ qw[ - t/pod/contains_bad_pod.xr - t/pod/selfcheck.t - t/pod/testcmp.pl - t/pod/testpchk.pl - ] ], }, 'Pod::Escapes' => { @@ -928,25 +978,39 @@ use File::Glob qw(:case); }, 'Pod::Simple' => { - 'DISTRIBUTION' => 'KHW/Pod-Simple-3.40.tar.gz', + 'DISTRIBUTION' => 'KHW/Pod-Simple-3.43.tar.gz', 'FILES' => q[cpan/Pod-Simple], + 'EXCLUDED' => [ + qw{.ChangeLog.swp}, + qr{^\.github/} + ], }, 'Pod::Usage' => { - 'DISTRIBUTION' => 'MAREKR/Pod-Usage-1.69.tar.gz', + 'DISTRIBUTION' => 'ATOOMIC/Pod-Usage-2.01.tar.gz', 'FILES' => q[cpan/Pod-Usage], - 'CUSTOMIZED' => [ - 't/pod/testp2pt.pl', - ], + 'EXCLUDED' => [ + qr{^t/00-}, + qr{^xt/} + ], }, 'podlators' => { 'DISTRIBUTION' => 'RRA/podlators-4.14.tar.gz', + 'MAIN_MODULE' => 'Pod::Man', 'FILES' => q[cpan/podlators pod/perlpodstyle.pod], 'EXCLUDED' => [ qr{^docs/metadata/}, ], + # https://github.com/rra/podlators/pull/15 + 'CUSTOMIZED' => [ + 't/general/basic.t', + 't/man/empty.t', + 't/man/no-encode.t', + 't/text/invalid.t', + ], + 'MAP' => { '' => 'cpan/podlators/', # this file lives outside the cpan/ directory @@ -960,7 +1024,7 @@ use File::Glob qw(:case); }, 'Scalar::Util' => { - 'DISTRIBUTION' => 'PEVANS/Scalar-List-Utils-1.55.tar.gz', + 'DISTRIBUTION' => 'PEVANS/Scalar-List-Utils-1.62.tar.gz', 'FILES' => q[cpan/Scalar-List-Utils], }, @@ -976,12 +1040,18 @@ use File::Glob qw(:case); }, 'Socket' => { - 'DISTRIBUTION' => 'PEVANS/Socket-2.029.tar.gz', + 'DISTRIBUTION' => 'PEVANS/Socket-2.032.tar.gz', 'FILES' => q[cpan/Socket], + # https://rt.cpan.org/Ticket/Display.html?id=142470&results=b81893fab36c7e48a07b4b763c03731a + # maybe others + 'CUSTOMIZED' => [ + 'Socket.pm', + 'Socket.xs', + ], }, 'Storable' => { - 'DISTRIBUTION' => 'XSAWYERX/Storable-3.15.tar.gz', + 'DISTRIBUTION' => 'NWCLARK/Storable-3.25.tar.gz', 'FILES' => q[dist/Storable], 'EXCLUDED' => [ qr{^t/compat/}, @@ -1041,7 +1111,7 @@ use File::Glob qw(:case); }, 'Test::Harness' => { - 'DISTRIBUTION' => 'LEONT/Test-Harness-3.42.tar.gz', + 'DISTRIBUTION' => 'LEONT/Test-Harness-3.44.tar.gz', 'FILES' => q[cpan/Test-Harness], 'EXCLUDED' => [ qr{^examples/}, @@ -1054,10 +1124,13 @@ use File::Glob qw(:case); t/lib/if.pm ), ], + 'CUSTOMIZED' => [ + 't/harness.t' + ] }, 'Test::Simple' => { - 'DISTRIBUTION' => 'EXODIST/Test-Simple-1.302175.tar.gz', + 'DISTRIBUTION' => 'EXODIST/Test-Simple-1.302190.tar.gz', 'FILES' => q[cpan/Test-Simple], 'EXCLUDED' => [ qr{^examples/}, @@ -1077,7 +1150,7 @@ use File::Glob qw(:case); }, 'Text::Balanced' => { - 'DISTRIBUTION' => 'SHAY/Text-Balanced-2.03.tar.gz', + 'DISTRIBUTION' => 'SHAY/Text-Balanced-2.04.tar.gz', 'FILES' => q[cpan/Text-Balanced], 'EXCLUDED' => [ qw( t/97_meta.t @@ -1088,16 +1161,17 @@ use File::Glob qw(:case); }, 'Text::ParseWords' => { - 'DISTRIBUTION' => 'CHORNY/Text-ParseWords-3.30.tar.gz', + 'DISTRIBUTION' => 'NEILB/Text-ParseWords-3.31.tar.gz', 'FILES' => q[cpan/Text-ParseWords], }, 'Text-Tabs+Wrap' => { - 'DISTRIBUTION' => 'MUIR/modules/Text-Tabs+Wrap-2013.0523.tar.gz', + 'DISTRIBUTION' => 'ARISTOTLE/Text-Tabs+Wrap-2021.0814.tar.gz', + 'MAIN_MODULE' => 'Text::Tabs', 'FILES' => q[cpan/Text-Tabs], 'EXCLUDED' => [ - qr/^lib\.old/, - 't/dnsparks.t', # see af6492bf9e + qr{^xt}, + ], 'MAP' => { '' => 'cpan/Text-Tabs/', @@ -1164,21 +1238,26 @@ use File::Glob qw(:case); }, 'Tie::RefHash' => { - 'DISTRIBUTION' => 'FLORA/Tie-RefHash-1.39.tar.gz', + 'DISTRIBUTION' => 'ETHER/Tie-RefHash-1.40.tar.gz', 'FILES' => q[cpan/Tie-RefHash], + 'EXCLUDED' => [ + qr{^t/00-}, + qr{^xt/}, + ], }, 'Time::HiRes' => { - 'DISTRIBUTION' => 'ATOOMIC/Time-HiRes-1.9760.tar.gz', + 'DISTRIBUTION' => 'ATOOMIC/Time-HiRes-1.9764.tar.gz', 'FILES' => q[dist/Time-HiRes], }, 'Time::Local' => { - 'DISTRIBUTION' => 'DROLSKY/Time-Local-1.28.tar.gz', + 'DISTRIBUTION' => 'DROLSKY/Time-Local-1.30.tar.gz', 'FILES' => q[cpan/Time-Local], 'EXCLUDED' => [ qr{^xt/}, - qw( appveyor.yml + qw( CODE_OF_CONDUCT.md + azure-pipelines.yml perlcriticrc perltidyrc tidyall.ini @@ -1195,7 +1274,7 @@ use File::Glob qw(:case); }, 'Unicode::Collate' => { - 'DISTRIBUTION' => 'SADAHIRO/Unicode-Collate-1.27.tar.gz', + 'DISTRIBUTION' => 'SADAHIRO/Unicode-Collate-1.31.tar.gz', 'FILES' => q[cpan/Unicode-Collate], 'EXCLUDED' => [ qr{N$}, @@ -1221,7 +1300,7 @@ use File::Glob qw(:case); }, 'version' => { - 'DISTRIBUTION' => 'JPEACOCK/version-0.9924.tar.gz', + 'DISTRIBUTION' => 'LEONT/version-0.9929.tar.gz', 'FILES' => q[cpan/version vutil.c vutil.h vxs.inc], 'EXCLUDED' => [ qr{^vutil/lib/}, @@ -1237,10 +1316,8 @@ use File::Glob qw(:case); # to delete an entire block out of lib/version.pm, since that code is # only necessary with the CPAN release. 'CUSTOMIZED' => [ - qw( lib/version.pm - vutil.c - ), - ], + 'lib/version.pm' + ], 'MAP' => { 'vutil/' => '', @@ -1258,7 +1335,7 @@ use File::Glob qw(:case); }, 'Win32' => { - 'DISTRIBUTION' => "JDB/Win32-0.53.tar.gz", + 'DISTRIBUTION' => "JDB/Win32-0.58.tar.gz", 'FILES' => q[cpan/Win32], }, @@ -1396,6 +1473,7 @@ use File::Glob qw(:case); lib/User/pwent.{pm,t} lib/_charnames.pm lib/blib.{pm,t} + lib/builtin.{pm,t} lib/bytes.{pm,t} lib/bytes_heavy.pl lib/charnames.{pm,t} @@ -1429,9 +1507,6 @@ use File::Glob qw(:case); lib/vmsish.{pm,t} ], }, - 'openbsd' => { - 'FILES' => q[lib/Config_git.pl], - }, ); # legacy CPAN flag diff --git a/gnu/usr.bin/perl/Porting/README.pod b/gnu/usr.bin/perl/Porting/README.pod index b02a4da85e4..0f22b5e9906 100644 --- a/gnu/usr.bin/perl/Porting/README.pod +++ b/gnu/usr.bin/perl/Porting/README.pod @@ -16,6 +16,10 @@ text. Program to prepare dual-life distributions for insertion into the Perl 5 F and F directories. Now thought to be largely superseded. +=head2 F + +Program to facilitate addition of new F<.pod> files to F. + =head2 F Do performance analysis on the code snippets in F. @@ -29,18 +33,15 @@ Use C to pinpoint changes. A utility to find, and optionally bump, references to the perl version number in various files within the perl source. -=head2 F - -Performs pathname portability checks, including whether there are naming -conflicts when names are truncated to the DOSish, case-ignoring 8.3 format. - =head2 F Check source code for ANSI-C violations. =head2 F -Used by F to ensure the F list is up to date. +Used by F to ensure the F list is up to +date. See also L<< /"F" >> for a way to automatically +fix issues found by this tool. =head2 F @@ -78,11 +79,6 @@ Checks that all the URLs in the Perl source are valid. Used by F to ensure changed modules have had their versions updated. -=head2 F - -Command line tool to update cherrymaint; a tool for selecting commits from -blead to cherry-pick into stable perl versions. - =head2 F Compare the current Perl source tree and a given tag for modules that have @@ -133,10 +129,19 @@ F files. Generates info for Module::CoreList from this perl tree. +=head2 F + +The canonical list of Perl Core Team members, used to build perlgov.pod, +produce election mailings, and all that sort of thing. + =head2 F List of test files to ignore/skip for deparse tests. +=head2 F + +The charter of the Perl Documentation Team + =head2 F List of Perl release epigraphs. @@ -228,10 +233,6 @@ command-line. This script creates F and F files. -=head2 F - -This script generates the list of registered CPAN sites in F. - =head2 F This script builds a Perl release tarball. @@ -274,6 +275,11 @@ This script outputs the added tests between the two versions of Perl. Template for F. +=head2 F + +This produces a new team list for F, but does not, at present, +insert that content into the file. + =head2 F Generates info for F from this perl tree. @@ -333,7 +339,7 @@ so there may be new things not covered here, or tools may need updating. This schedule lists the projected or historical development and release schedules for the next, current and previous stable versions of Perl. Dates with all question marks will only be releases if deemed necessary by the -Pumpking. +Steering Council. =head2 F @@ -372,6 +378,13 @@ to work on any of these, but it's a good idea to first contact I to avoid duplication of effort, and to learn from any previous attempts. +=head2 F + +This script will automatically update AUTHORS and create .mailmap entries +based on the git commit log history. If F complains +during testing you should run this. It will automatically fix most if not +all AUTHORS related test fails. + =head2 F A post-processor for C. F is a @@ -380,5 +393,9 @@ collects all these files, extracts most of the information and produces a significantly shorter summary of all detected memory access errors and memory leaks. +=head2 F + +Guide for Vote Administrators for running Steering Council elections. + =cut diff --git a/gnu/usr.bin/perl/Porting/add-package.pl b/gnu/usr.bin/perl/Porting/add-package.pl index 012aa77894c..af04c8f8bec 100755 --- a/gnu/usr.bin/perl/Porting/add-package.pl +++ b/gnu/usr.bin/perl/Porting/add-package.pl @@ -319,11 +319,11 @@ my @ChangedFiles; } } - ### add entries to win32/Makefile and win32/makefile.mk + ### add entries to win32/Makefile ### they contain the following lines: # ./win32/makefile.mk: ..\utils\ptardiff \ # ./win32/makefile.mk: xsubpp instmodsh prove ptar ptardiff - for my $file ( qw[win32/Makefile win32/makefile.mk] ) { + for my $file ( qw[win32/Makefile] ) { unless ( `grep $bin $Repo/$file` ) { print " Adding $bin entries to $file..." if $Verbose; diff --git a/gnu/usr.bin/perl/Porting/bench.pl b/gnu/usr.bin/perl/Porting/bench.pl index 5b240968187..1d730f6cd04 100755 --- a/gnu/usr.bin/perl/Porting/bench.pl +++ b/gnu/usr.bin/perl/Porting/bench.pl @@ -1219,6 +1219,10 @@ sub grind_run { my %fds; # map fds to jobs my $select = IO::Select->new(); + my $njobs = scalar @jobs; + my $donejobs = 0; + my $starttime = time(); + while (@jobs or $running) { if ($OPTS{debug}) { @@ -1233,7 +1237,22 @@ sub grind_run { my ($id, $cmd) =@$job{qw(id cmd)}; my ($in, $out, $pid); - warn "Starting $id\n" if $OPTS{verbose}; + $donejobs++; + if($OPTS{verbose}) { + my $donefrac = $donejobs / $njobs; + my $eta = ""; + # Once we've done at least 20% we'll have a good estimate of + # the total runtime, hence ETA + if($donefrac >= 0.2) { + my $now = time(); + my $duration = ($now - $starttime) / $donefrac; + my $remaining = ($starttime + $duration) - $now; + $eta = sprintf ", remaining %d:%02d", + $remaining / 60, $remaining % 60; + } + warn sprintf "Starting %s (%d of %d, %.2f%%%s)\n", + $id, $donejobs, $njobs, 100 * $donefrac, $eta; + } eval { $pid = IPC::Open2::open2($out, $in, $cmd); 1; } or die "Error: while starting cachegrind subprocess" ." for $id:\n$@"; diff --git a/gnu/usr.bin/perl/Porting/bisect-runner.pl b/gnu/usr.bin/perl/Porting/bisect-runner.pl index b6c75a9ad4f..1126c8db403 100644 --- a/gnu/usr.bin/perl/Porting/bisect-runner.pl +++ b/gnu/usr.bin/perl/Porting/bisect-runner.pl @@ -825,7 +825,7 @@ run C<../perl/Porting/bisect.pl /usr/bin/perl ~/test/testcase.pl> --gold Revision to use when checking out known-good recent versions of files, -such as F. F defaults this to I, +such as F. F defaults this to I, but F will default it to the most recent stable release. =item * @@ -927,6 +927,66 @@ L =back +=head2 Interaction of debug flags caused crash on C<-DDEBUGGING> builds + +=over 4 + +=item * Problem + +In C<-DDEBUGGING> builds, the debug flags C would crash a program when +F was loaded via C or C. + +=item * Solution + +Two-stage solution. In each stage, to shorten debugging time investigator +made use of existing set of production releases of F built with +C<-DDEBUGGING>. + +=over 4 + +=item * Stage 1 + +Investigator used existing C<-DDEBUGGING> builds to determine the production +cycle in which crash first appeared. Then: + + .../perl/Porting/bisect.pl \ + --start v5.20.0 \ + --end v5.22.1 \ + -DDEBUGGING \ + --target miniperl \ + --crash \ + -- ./miniperl -Ilib -DXvt -Mstrict -e 1 + +First bad commit was identified as +L. + +=item * Stage 2 + +A second investigator was able to create a reduction of the code needed to +trigger a crash, then used this reduced case and the commit reported at the +end of Stage 1 to further bisect. + + .../perl/Porting/bisect.pl \ + --start v5.18.4 \ + --end ed958fa315 \ + -DDEBUGGING \ + --target miniperl \ + --crash \ + -- ./miniperl -Ilib -DXv -e '{ my $n=1; *foo= sub () { $n }; }' + +=back + +The first bisect determined the point at which code was introduced to +F that triggered the problem. With an understanding of the trigger, +the second bisect then determined the point at which such a trigger started +causing a crash. + +* Reference + +L + +=back + =head2 When did perl start failing to build on a certain platform using C as the C-compiler? =over 4 @@ -2881,6 +2941,18 @@ $2!; } } + if ($^O eq 'aix' && $major >= 8 && $major < 28 + && extract_from_file('Makefile.SH', qr!\Q./$(MINIPERLEXP) makedef.pl\E.*aix!)) { + # This is a variant the AIX part of commit 72bbce3da5eeffde: + # miniperl also needs -Ilib for perl.exp on AIX etc + edit_file('Makefile.SH', sub { + my $code = shift; + $code =~ s{(\Q./$(MINIPERLEXP)\E) (makedef\.pl.*aix)} + {$1 -Ilib $2}; + return $code; + }) + } + # This is the line before the line we've edited just above: if ($^O eq 'aix' && $major >= 11 && $major <= 15 && extract_from_file('makedef.pl', qr/^use Config/)) { edit_file('Makefile.SH', sub { @@ -2903,7 +2975,12 @@ $2!; # If you do this, you may need to add in code to correct the output of older # makedepends, which don't correctly filter newer gcc output such as # - checkout_file('makedepend.SH'); + + # It's the same version in v5.26.0 to v5.34.0 + # Post v5.34.0, commit 8d469d0ecbd06a99 completely changes how makedepend.SH + # interacts with Makefile.SH, meaning that it's not a drop-in upgrade. + checkout_file('makedepend.SH', 'v5.34.0') + if $major < 26; if ($major < 4 && -f 'config.sh' && !extract_from_file('config.sh', qr/^trnl=/)) { @@ -3550,8 +3627,8 @@ index 2a6cbcd..eab2de1 100644 EOPATCH } - if ($major == 7 && $^O eq 'aix' && - extract_from_file('ext/List/Util/Util.xs', qr/PUSHBLOCK/) + if ($major == 7 && $^O eq 'aix' && -f 'ext/List/Util/Util.xs' + && extract_from_file('ext/List/Util/Util.xs', qr/PUSHBLOCK/) && !extract_from_file('makedef.pl', qr/^Perl_cxinc/)) { # Need this to get List::Utils 1.03 and later to compile. # 1.03 also expects to call Perl_pp_rand. Commit d3632a54487acc5f @@ -3819,6 +3896,16 @@ EOFIX return $xs; }); } + + if ($major >= 10 && $major < 20 + && !extract_from_file('ext/SDBM_File/Makefile.PL', qr/MY::subdir_x/)) { + # Parallel make fix for SDBM_File + # Technically this is needed for pre v5.10.0, but we don't attempt + # parallel makes on earlier versions because it's unreliable due to + # other bugs. + # So far, only AIX make has come acropper on this bug. + apply_commit('4d106cc5d8fd328d', 'ext/SDBM_File/Makefile.PL'); + } } sub apply_fixups { diff --git a/gnu/usr.bin/perl/Porting/check83.pl b/gnu/usr.bin/perl/Porting/check83.pl deleted file mode 100644 index fbe56555898..00000000000 --- a/gnu/usr.bin/perl/Porting/check83.pl +++ /dev/null @@ -1,82 +0,0 @@ -#!/usr/bin/perl -w - -use strict; - -# Check whether there are naming conflicts when names are truncated to -# the DOSish case-ignoring 8.3 format, plus other portability no-nos. - -# The "8.3 rule" is loose: "if reducing the directory entry names -# within one directory to lowercase and 8.3-truncated causes -# conflicts, that's a bad thing". So the rule is NOT the strict -# "no filename shall be longer than eight and a suffix if present -# not longer than three". - -# The 8-level depth rule is for older VMS systems that likely won't -# even be able to unpack the tarball if more than eight levels -# (including the top of the source tree) are present. - -my %seen; -my $maxl = 30; # make up a limit for a maximum filename length - -sub eight_dot_three { - return () if $seen{$_[0]}++; - my ($dir, $base, $ext) = ($_[0] =~ m{^(?:(.+)/)?([^/.]*)(?:\.([^/.]+))?$}); - my $file = $base . ( defined $ext ? ".$ext" : "" ); - $base = substr($base, 0, 8); - $ext = substr($ext, 0, 3) if defined $ext; - if (defined $dir && $dir =~ /\./) { - print "directory name contains '.': $dir\n"; - } - if ($base eq "") { - print "filename starts with dot: $_[0]\n"; - } - if ($file =~ /[^A-Za-z0-9\._-]/) { - print "filename contains non-portable characters: $_[0]\n"; - } - if (length $file > $maxl) { - print "filename longer than $maxl characters: $file\n"; - } - if (defined $dir) { - return ($dir, defined $ext ? "$dir/$base.$ext" : "$dir/$base"); - } else { - return ('.', defined $ext ? "$base.$ext" : $base); - } -} - -my %dir; - -if (open(MANIFEST, '<', 'MANIFEST')) { - while () { - chomp; - s/\s.+//; - unless (-f) { - print "missing: $_\n"; - next; - } - if (tr/././ > 1) { - print "more than one dot: $_\n"; - next; - } - if ((my $slashes = $_ =~ tr|\/|\/|) > 7) { - print "more than eight levels deep: $_\n"; - next; - } - while (m!/|\z!g) { - my ($dir, $edt) = eight_dot_three("$`"); - next unless defined $dir; - ($dir, $edt) = map { lc } ($dir, $edt); - push @{$dir{$dir}->{$edt}}, $_; - } - } -} else { - die "$0: MANIFEST: $!\n"; -} - -for my $dir (sort keys %dir) { - for my $edt (keys %{$dir{$dir}}) { - my @files = @{$dir{$dir}{$edt}}; - if (@files > 1) { - print "conflict on filename $edt:\n", map " $_\n", @files; - } - } -} diff --git a/gnu/usr.bin/perl/Porting/checkAUTHORS.pl b/gnu/usr.bin/perl/Porting/checkAUTHORS.pl index 2263f9a7f45..bd70e07be3e 100755 --- a/gnu/usr.bin/perl/Porting/checkAUTHORS.pl +++ b/gnu/usr.bin/perl/Porting/checkAUTHORS.pl @@ -1,81 +1,88 @@ #!/usr/bin/perl -w +package Porting::checkAUTHORS; use strict; use warnings; use v5.026; -my ($committer, $patch, $author); use utf8; use Getopt::Long; use Unicode::Collate; use Text::Wrap; $Text::Wrap::columns = 80; +my ($committer, $patch, $author); my ($rank, $ta, $ack, $who, $tap, $update) = (0) x 6; -my ($author_file, $percentage, $cumulative, $reverse); +my ($percentage, $cumulative, $reverse); my (%authors, %untraced, %patchers, %committers, %real_names); my ( $from_commit, $to_commit ); +my ( $map, $preferred_email_or_github ); +my $AUTHORS_header; +my $author_file= './AUTHORS'; + +sub main { + my $result = GetOptions ( + # modes + "who" => \$who, + "rank" => \$rank, + "thanks-applied" => \$ta, + "missing" => \$ack , + "tap" => \$tap, + "update" => \$update, + + # modifiers + "authors=s" => \$author_file, + "percentage" => \$percentage, # show as %age + "cumulative" => \$cumulative, + "reverse" => \$reverse, + "from=s" => \$from_commit, + "to=s" => \$to_commit, + + ); + + + my $has_from_commit = defined $from_commit ? 1 : 0; + + if ( !$result # GetOptions failed + or ( $rank + $ta + $who + $ack + $tap + $update != 1 ) # use one and one exactly 'mode' + or !( scalar @ARGV + $has_from_commit ) # gitlog provided from --from or stdin + ) { + usage(); + } -my $result = GetOptions ( - # modes - "who" => \$who, - "rank" => \$rank, - "thanks-applied" => \$ta, - "missing" => \$ack , - "tap" => \$tap, - "update" => \$update, - - # modifiers - "authors=s" => \$author_file, - "percentage" => \$percentage, # show as %age - "cumulative" => \$cumulative, - "reverse" => \$reverse, - "from=s" => \$from_commit, - "to=s" => \$to_commit, - - ); - - -my $has_from_commit = defined $from_commit ? 1 : 0; - -if ( !$result # GetOptions failed - or ( $rank + $ta + $who + $ack + $tap + $update != 1 ) # use one and one exactly 'mode' - or !( scalar @ARGV + $has_from_commit ) # gitlog provided from --from or stdin - ) { - usage(); -} + die "Can't locate '$author_file'. Specify it with '--authors '." + unless -f $author_file; + + ( $map, $preferred_email_or_github ) = generate_known_author_map(); + + my $preserve_case = $update ? 1 : 0; + my $AUTHORS_header = read_authors_file($author_file, $preserve_case); + + if ($rank) { + parse_commits(); + display_ordered(\%patchers); + } elsif ($ta) { + parse_commits(); + display_ordered(\%committers); + } elsif ($tap) { + parse_commits_authors(); + display_test_output(\%patchers, \%authors, \%real_names); + } elsif ($ack) { + parse_commits(); + display_missing_authors(\%patchers, \%authors, \%real_names); + } elsif ($who) { + parse_commits(); + list_authors(\%patchers, \%authors); + } elsif ( $update ) { + update_authors_files( \%authors, $map, $preferred_email_or_github, $author_file ); + } else { + die "unknown mode"; + } -$author_file ||= './AUTHORS'; -die "Can't locate '$author_file'. Specify it with '--authors '." - unless -f $author_file; - -my ( $map, $preferred_email_or_github ) = generate_known_author_map(); - -my $preserve_case = $update ? 1 : 0; -my $AUTHORS_header = read_authors_file($author_file, $preserve_case); - -if ($rank) { - parse_commits(); - display_ordered(\%patchers); -} elsif ($ta) { - parse_commits(); - display_ordered(\%committers); -} elsif ($tap) { - parse_commits_authors(); - display_test_output(\%patchers, \%authors, \%real_names); -} elsif ($ack) { - parse_commits(); - display_missing_authors(\%patchers, \%authors, \%real_names); -} elsif ($who) { - parse_commits(); - list_authors(\%patchers, \%authors); -} elsif ( $update ) { - update_authors_files( \%authors, $map, $preferred_email_or_github, $author_file ); -} else { - die "unknown mode"; + exit(0); } -exit(0); +main() unless caller; sub usage { @@ -388,7 +395,7 @@ sub update_authors_files { { open my $fh, '>', $author_file or die "Can't open $author_file: $!"; - binmode $fh, ':encoding(UTF-8)'; + binmode $fh, ':raw:encoding(UTF-8)'; print {$fh} $AUTHORS_header; @@ -510,8 +517,14 @@ sub display_test_output { if ($authors->{$email}) { print "ok $count - ".$real_names->{$email} ." $email\n"; } else { - print "not ok $count - Contributor not found in AUTHORS: $email ".($real_names->{$email} || '???' )."\n"; - print STDERR ($real_names->{$email} || '???' )." <$email> not found in AUTHORS\n"; + print "not ok $count - Contributor not found in AUTHORS. ", + ($real_names->{$email} || '???' )." $email\n", + "# To fix run Porting/updateAUTHORS.pl and then review", + " and commit the result.\n"; + print STDERR "# ", ($real_names->{$email} || '???' ), " <$email>", + " not found in AUTHORS.\n", + "# To fix run Porting/updateAUTHORS.pl and then review", + " and commit the result.\n"; } } @@ -628,7 +641,7 @@ sub _raw_address { return $addr; } - +1; # make sure we return true in case we are required. __DATA__ # @@ -726,6 +739,7 @@ merijn h.m.brand\100xs4all.nl + perl5\100tux.freedom.nl mhx mhx-perl\100gmx.net + mhx\100r2d2.(none) ++ mhx\100cpan.org mst mst\100shadowcat.co.uk + matthewt\100hercule.scsys.co.uk nicholas nick\100ccl4.org @@ -837,6 +851,8 @@ bert\100alum.mit.edu bert\100genscan.com bigbang7\100gmail.com ddascalescu+github\100gmail.com blgl\100stacken.kth.se blgl\100hagernas.com + 2bfjdsla52kztwejndzdstsxl9athp\100gmail.com +b@os13.org brad+github\10013os.net +khw\100cpan.org khw\100karl.(none) brian.d.foy\100gmail.com bdfoy\100cpan.org BQW10602\100nifty.com sadahiro\100cpan.org bulk88\100hotmail.com bulk88 @@ -853,6 +869,7 @@ corion\100corion.net corion\100cpan.org + github@corion.net cp\100onsitetech.com publiustemp-p5p\100yahoo.com + publiustemp-p5p3\100yahoo.com ++ ovid\100cpan.org cpan\100audreyt.org autrijus\100egb.elixus.org + autrijus\100geb.elixus.org + autrijus\100gmail.com @@ -861,7 +878,7 @@ cpan\100audreyt.org autrijus\100egb.elixus.org + audreyt\100audreyt.org cpan\100ton.iguana.be me-01\100ton.iguana.be crt\100kiski.net perl\100ctweten.amsite.com - +cp\100onsitetech.com ovid\100cpan.org dairiki\100dairiki.org dairiki at dairiki.org dagolden\100cpan.org xdaveg\100gmail.com + xdg\100xdg.me @@ -870,6 +887,7 @@ dan\100sidhe.org sugalsd\100lbcc.cc.or.us + sugalskd\100osshe.edu daniel\100bitpusher.com daniel\100biz.bitpusher.com dave\100mag-sol.com dave\100dave.org.uk ++ dave\100perlhacks.com david.dyck\100fluke.com dcd\100tc.fluke.com david\100justatheory.com david\100wheeler.net + david\100kineticode.com @@ -883,6 +901,7 @@ dev-perl\100pimb.org knew-p5p\100pimb.org + lists-p5p\100pimb.org djberg86\100attbi.com djberg96\100attbi.com dk\100tetsuo.karasik.eu.org dmitry\100karasik.eu.org +dma+github@stripysock.com dominichamon@users.noreply.github.com dom\100earth.li dom\100semmle.com domo\100computer.org shouldbedomo\100mac.com + domo\100slipper.ip.lu @@ -1004,6 +1023,7 @@ laszlo.molnar\100eth.ericsson.se molnarl\100cdata.tvnet.hu + ml1050\100freemail.hu lewart\100uiuc.edu lewart\100vadds.cvm.uiuc.edu + d-lewart\100uiuc.edu +lindblad@gmx.com 52227507+apparluk\100users.noreply.github.com lkundrak\100v3.sk lubo.rintel\100gooddata.com lstein\100cshl.org lstein\100formaggio.cshl.org + lstein\100genome.wi.mit.edu @@ -1032,6 +1052,7 @@ mgjv\100comdyn.com.au mgjv\100tradingpost.com.au mlh\100swl.msd.ray.com webtools\100uewrhp03.msd.ray.com michael.schroeder\100informatik.uni-erlangen.de mls\100suse.de mike\100stok.co.uk mike\100exegenix.com +61100689+mikefultondev\100users.noreply.github.com mikefultonpersonal\100gmail.com miyagawa\100bulknews.net miyagawa\100edge.co.jp mjtg\100cam.ac.uk mjtg\100cus.cam.ac.uk mikedlr\100tardis.ed.ac.uk mikedlr\100it.com.pl @@ -1040,7 +1061,8 @@ moritz\100casella.verplant.org moritz\100faui2k3.org neale\100VMA.TABNSW.COM.AU neale\100pucc.princeton.edu neeracher\100mac.com neeri\100iis.ee.ethz.ch -neil\100bowers.com neilb\100cre.canon.co.uk +neilb\100neilb.org neilb\100cre.canon.co.uk ++ neil\100bowers.com nospam-abuse\100bloodgate.com tels\100bloodgate.com + perl_dummy\100bloodgate.com @@ -1112,15 +1134,17 @@ khw\100cpan.org khw\100karl.(none) + khw\100khw-desktop.(none) radu\100netsoft.ro rgreab\100fx.ro +raiph \100raiph ++ raiph.mellor\100gmail.com rajagopa\100pauline.schrodinger.com rajagopa\100schrodinger.com raphael.manfredi\100pobox.com raphael_manfredi\100grenoble.hp.com -module\100renee-baecker.de renee.baecker\100smart-websolutions.de +info\100perl-services.de renee.baecker\100smart-websolutions.de + reneeb\100reneeb-desktop.(none) + github\100renee-baecker.de + otrs\100ubuntu.(none) + perl\100renee-baecker.de + reb\100perl-services.de -+ info\100perl-services.de ++ module\100renee-baecker.de rich+perl\100hyphen-dash-hyphen.info richardleach\100users.noreply.github.com richard.foley\100rfi.net richard.foley\100t-online.de + richard.foley\100ubs.com @@ -1132,6 +1156,7 @@ rick\100consumercontact.com rick\100bort.ca rjbs\100cpan.org rjbs-perl-p5p\100lists.manxome.org + perl.p5p\100rjbs.manxome.org + rjbs\100semiotic.systems ++ rjbs\100users.noreply.github.com rjk\100linguist.dartmouth.edu rjk\100linguist.thayer.dartmouth.edu + rjk-perl-p5p\100tamias.net + rjk\100tamias.net @@ -1243,4 +1268,3 @@ wolfgang.laun\100alcatel.at wolfgang.laun\100chello.at + wolfgang.laun\100gmail.com wolfsage\100gmail.com mhorsfall\100darmstadtium.(none) yath\100yath.de yath-perlbug\100yath.de - diff --git a/gnu/usr.bin/perl/Porting/checkURL.pl b/gnu/usr.bin/perl/Porting/checkURL.pl index 2d92ff3c110..a9a031e6185 100644 --- a/gnu/usr.bin/perl/Porting/checkURL.pl +++ b/gnu/usr.bin/perl/Porting/checkURL.pl @@ -242,7 +242,6 @@ http://www.pvhp.com/%7epvhp/ http://www.leo.org http://www.madgoat.com http://www.mks.com/s390/gnu/ -http://www.research.att.com/sw/tools/uwin/ http://www.tpj.com/ http://safaribooksonline.com/ http://use.perl.org/~autrijus/journal/25768 diff --git a/gnu/usr.bin/perl/Porting/checkcfguse.pl b/gnu/usr.bin/perl/Porting/checkcfguse.pl index 986d4f90411..6dea4a84c6f 100755 --- a/gnu/usr.bin/perl/Porting/checkcfguse.pl +++ b/gnu/usr.bin/perl/Porting/checkcfguse.pl @@ -28,7 +28,6 @@ my @PAT = ], [ [ - "NetWare/config_H.??", "Porting/config.sh", "plan9/config_h.sample", "win32/config_H.??", @@ -79,7 +78,7 @@ while (<$mani>) { # Skip matches from the config files themselves, # from metaconfig generated files that refer to # the config symbols, and from pods. - next if $fn =~ m{^(?:config_h.SH|Configure|configure\.com|Porting/(?:config|Glossary)|(?:NetWare|plan9|win32)/(?:config|(?:GNU)?[Mm]akefile)|uconfig)|\.pod$}; + next if $fn =~ m{^(?:config_h.SH|Configure|configure\.com|Porting/(?:config|Glossary)|(?:plan9|win32)/(?:config|(?:GNU)?[Mm]akefile)|uconfig)|\.pod$}; open my $fh, '<', $fn or die qq[$0: Failed to open $fn: $!]; while (<$fh>) { while (/\b($SYM)\b/go) { diff --git a/gnu/usr.bin/perl/Porting/checkcfgvar.pl b/gnu/usr.bin/perl/Porting/checkcfgvar.pl index 101f12d8682..fb80b6fb0c1 100755 --- a/gnu/usr.bin/perl/Porting/checkcfgvar.pl +++ b/gnu/usr.bin/perl/Porting/checkcfgvar.pl @@ -49,8 +49,6 @@ my @CFG = ( # perl that we are running, not the version of the source tree. "Cross/config.sh-arm-linux", "Cross/config.sh-arm-linux-n770", - "NetWare/config.wc", - "symbian/config.sh", "uconfig.sh", "uconfig64.sh", "plan9/config_sh.sample", diff --git a/gnu/usr.bin/perl/Porting/cherrymaint b/gnu/usr.bin/perl/Porting/cherrymaint deleted file mode 100644 index 08e8eb55a1b..00000000000 --- a/gnu/usr.bin/perl/Porting/cherrymaint +++ /dev/null @@ -1,103 +0,0 @@ -#!/usr/bin/env perl -use 5.010; -use strict; -use warnings; -use File::Basename; -use Getopt::Long; -require LWP::UserAgent; - -my %votemap = ( - 'unexamined' => 0, - 'rejected' => 1, - 'vote' => 4, - 'picked' => 5, -); - - -chomp(my $git_addr = `git config --get cherrymaint.address`); -my $addr = length $git_addr ? $git_addr : 'localhost:3000'; - -# Usage -my $program = basename $0; -my $usage = << "HERE"; -Usage: $program [--address address] [ACTION] [COMMIT] - - ACTIONS: (default is 'vote' if omitted) - -HERE -$usage .= join( "\n", map { " --$_" } (sort keys %votemap), 'help' ); -$usage .= "\n" . << "HERE"; - - COMMIT: a git revision ID (SHA1 or symbolic reference like HEAD) - - You must first tunnel $addr to perl5.git.perl.org:3000? E.g. - \$ ssh -C -L${\ join q{:} => reverse split /:/, $addr}:3000 perl5.git.perl.org - -HERE - -die $usage if grep { /^(--help|-h)$/ } @ARGV; - -# Determine action -my %opt = (address => \$addr); -GetOptions( \%opt, 'address=s', keys %votemap ) or die $usage; - -if ( keys(%opt) > 2 ) { - die "Error: cherrymaint takes only one action argument\n\n$usage" -} - -my ($action) = grep { exists $votemap{$_} } keys %opt; -$action ||= 'vote'; - -# Determine commit SHA1 -my $commit = shift @ARGV; - -unless ( defined $commit ) { - die "Error: cherrymaint requires an explicit commit ID\n\n$usage" -} - -my $short_id = qx/git rev-parse --short $commit/; -if ( $? ) { - die "Error: couldn't get git commit SHA1 from '$commit'\n"; -} -chomp $short_id; - -# Confirm actions -unless ( $action eq 'vote' ) { - say "Are you sure you want to mark $short_id as $action? (y/n)"; - my $ans = ; - exit 0 unless $ans =~ /^y/i; -} - -# Send the action to cherrymaint -my $n = $votemap{$action}; -my $url = "http://$addr/mark?commit=${short_id}&value=${n}"; - -my $ua = LWP::UserAgent->new( - agent => 'Porting/cherrymaint ', - timeout => 30, - env_proxy => 1, -); - -my $response = $ua->get($url); - -if ($response->is_success) { - say "Done."; -} -else { - die $response->status_line . << "HERE"; - -Have you remembered to tunnel $addr to perl5.git.perl.org:3000? E.g. - \$ ssh -C -L${\ join q{:} => reverse split /:/, $addr}:3000 perl5.git.perl.org - -Or maybe you created a different tunnel? You can specify the address to use -either on the command line with --address, or by doing - \$ git config cherrymaint.address host:port - -HERE - -# Note that you can vote through your browser by pointing it at the local -# end of the tunnel. For example, L if you went with -# the suggested default values -} - -exit 0; diff --git a/gnu/usr.bin/perl/Porting/cmpVERSION.pl b/gnu/usr.bin/perl/Porting/cmpVERSION.pl index 40413500910..be24e091def 100644 --- a/gnu/usr.bin/perl/Porting/cmpVERSION.pl +++ b/gnu/usr.bin/perl/Porting/cmpVERSION.pl @@ -31,8 +31,25 @@ unless (GetOptions('diffs' => \$diffs, die "$0: This does not look like a Perl directory\n" unless -f "perl.h" && -d "Porting"; -die "$0: 'This is a Perl directory but does not look like Git working directory\n" - unless (-d ".git" || (exists $ENV{GIT_DIR} && -d $ENV{GIT_DIR})); + +if (-d ".git" || (exists $ENV{GIT_DIR} && -d $ENV{GIT_DIR})) { + # Looks good +} else { + # Also handle linked worktrees created by git-worktree: + my $found; + if (-f '.git') { + # the hash of the initial commit in perl.git (perl-1.0) + my $commit = '8d063cd8450e59ea1c611a2f4f5a21059a2804f1'; + my $out = `git rev-parse --verify --quiet '$commit^{commit}'`; + chomp $out; + if($out eq $commit) { + ++$found; + } + } + + die "$0: This is a Perl directory but does not look like Git working directory\n" + unless $found; +} my $null = devnull(); @@ -81,6 +98,7 @@ if ($exclude_upstream) { # usually because they pull in their version from some other file. my %skip; @skip{ + 'cpan/Digest/t/lib/Digest/Dummy.pm', # just a test module 'cpan/ExtUtils-Install/t/lib/MakeMaker/Test/Setup/BFD.pm', # just a test module 'cpan/ExtUtils-MakeMaker/t/lib/MakeMaker/Test/Setup/BFD.pm', # just a test module 'cpan/ExtUtils-MakeMaker/t/lib/MakeMaker/Test/Setup/XS.pm', # just a test module @@ -90,6 +108,21 @@ my %skip; 'cpan/Math-BigInt/t/Math/BigInt/Scalar.pm', # just a test module 'cpan/Math-BigInt/t/Math/BigInt/Subclass.pm', # just a test module 'cpan/Math-BigRat/t/Math/BigRat/Test.pm', # just a test module + 'cpan/Module-Load/t/to_load/LoadIt.pm', # just a test module + 'cpan/Module-Load/t/to_load/Must/Be/Loaded.pm', # just a test module + 'cpan/Module-Load-Conditional/t/test_lib/a/X.pm', # just a test module + 'cpan/Module-Load-Conditional/t/test_lib/b/X.pm', # just a test module + 'cpan/Module-Load-Conditional/t/to_load/Commented.pm', # just a test module + 'cpan/Module-Load-Conditional/t/to_load/HereDoc.pm', # just a test module + 'cpan/Module-Load-Conditional/t/to_load/InPod.pm', # just a test module + 'cpan/Module-Load-Conditional/t/to_load/LoadIt.pm', # just a test module + 'cpan/Module-Load-Conditional/t/to_load/MustBe/Loaded.pm', # just a test module + 'cpan/Module-Load-Conditional/t/to_load/NotMain.pm', # just a test module + 'cpan/Module-Load-Conditional/t/to_load/NotX.pm', # just a test module + 'cpan/Pod-Usage/t/inc/Pod/InputObjects.pm', # just a test module + 'cpan/Pod-Usage/t/inc/Pod/Parser.pm', # just a test module + 'cpan/Pod-Usage/t/inc/Pod/PlainText.pm', # just a test module + 'cpan/Pod-Usage/t/inc/Pod/Select.pm', # just a test module 'cpan/podlators/t/lib/Test/Podlators.pm', # just a test module 'cpan/podlators/t/lib/Test/RRA.pm', # just a test module 'cpan/podlators/t/lib/Test/RRA/Config.pm', # just a test module @@ -176,7 +209,7 @@ print "#\n# Comparing against $tag_to_compare ....\n#\n" if $tap; my $count; my $diff_cmd = "git --no-pager diff $tag_to_compare "; -my $q = ($^O eq 'MSWin32' || $^O eq 'NetWare' || $^O eq 'VMS') ? '"' : "'"; +my $q = ($^O eq 'MSWin32' || $^O eq 'VMS') ? '"' : "'"; my (@diff); foreach my $pm_file (sort keys %module_diffs) { diff --git a/gnu/usr.bin/perl/Porting/config.sh b/gnu/usr.bin/perl/Porting/config.sh index 2d2287cf2a7..91086e62aad 100644 --- a/gnu/usr.bin/perl/Porting/config.sh +++ b/gnu/usr.bin/perl/Porting/config.sh @@ -8,14 +8,14 @@ # Package name : perl5 # Source directory : . -# Configuration time: Fri Dec 22 16:17:32 GMT 2017 +# Configuration time: Sat Aug 22 16:03:38 CEST 2020 # Configured by : yourname -# Target system : linux barba.rous.org 3.16.0-4-amd64 #1 smp debian 3.16.43-2+deb8u2 (2017-06-26) x86_64 gnulinux +# Target system : linux lx09 5.8.0-1-default #1 smp tue aug 4 07:30:59 utc 2020 (9bc0044) x86_64 x86_64 x86_64 gnulinux : Configure command line arguments. -config_arg0='./Configure' -config_args='-Dprefix=/opt/perl -Dcf_by=yourname -Dcf_email=yourname@yourhost.yourplace.com -Dperladmin=yourname@yourhost.yourplace.com -Dmydomain=.yourplace.com -Dmyhostname=yourhost -Duse64bitint -Dusedevel -dE' -config_argc=9 +config_arg0='Configure' +config_args='-Dprefix=/opt/perl -Dcf_by=yourname -Dcf_email=yourname@yourhost.yourplace.com -Dperladmin=yourname@yourhost.yourplace.com -Dmydomain=.yourplace.com -Dmyhostname=yourhost -Duse64bitint -Duselongdouble -Dusethreads -Dusedevel -des' +config_argc=11 config_arg1='-Dprefix=/opt/perl' config_arg2='-Dcf_by=yourname' config_arg3='-Dcf_email=yourname@yourhost.yourplace.com' @@ -23,8 +23,10 @@ config_arg4='-Dperladmin=yourname@yourhost.yourplace.com' config_arg5='-Dmydomain=.yourplace.com' config_arg6='-Dmyhostname=yourhost' config_arg7='-Duse64bitint' -config_arg8='-Dusedevel' -config_arg9='-dE' +config_arg8='-Duselongdouble' +config_arg9='-Dusethreads' +config_arg10='-Dusedevel' +config_arg11='-des' Author='' Date='' @@ -41,19 +43,19 @@ _exe='' _o='.o' afs='false' afsroot='/afs' -alignbytes='8' +alignbytes='16' aphostname='' api_revision='5' api_subversion='0' -api_version='32' -api_versionstring='5.32.0' +api_version='36' +api_versionstring='5.36.0' ar='ar' -archlib='/opt/perl/lib/5.32.1/x86_64-linux' -archlibexp='/opt/perl/lib/5.32.1/x86_64-linux' +archlib='/opt/perl/lib/5.36.0/x86_64-linux-thread-multi-ld' +archlibexp='/opt/perl/lib/5.36.0/x86_64-linux-thread-multi-ld' archname64='' -archname='x86_64-linux' +archname='x86_64-linux-thread-multi-ld' archobjs='' -asctime_r_proto='0' +asctime_r_proto='REENTRANT_PROTO_B_SB' awk='awk' baserev='5.0' bash='' @@ -69,14 +71,14 @@ cat='cat' cc='cc' cccdlflags='-fPIC' ccdlflags='-Wl,-E' -ccflags='-fwrapv -fno-strict-aliasing -pipe -fstack-protector-strong -I/usr/local/include -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64 -D_FORTIFY_SOURCE=2' +ccflags='-D_REENTRANT -D_GNU_SOURCE -fwrapv -fno-strict-aliasing -pipe -fstack-protector-strong -I/usr/local/include -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64 -D_FORTIFY_SOURCE=2' ccflags_uselargefiles='-D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64' ccname='gcc' ccsymbols='' ccversion='' cf_by='yourname' cf_email='yourname@yourhost.yourplace.com' -cf_time='Fri Dec 22 16:17:32 GMT 2017' +cf_time='Sat Aug 22 16:03:38 CEST 2020' charbits='8' charsize='1' chgrp='' @@ -84,6 +86,7 @@ chmod='chmod' chown='' clocktype='clock_t' comm='comm' +compiler_warning='grep -i warning' compress='' contains='grep' cp='cp' @@ -91,18 +94,18 @@ cpio='' cpp='cpp' cpp_stuff='42' cppccsymbols='' -cppflags='-fwrapv -fno-strict-aliasing -pipe -fstack-protector-strong -I/usr/local/include' +cppflags='-D_REENTRANT -D_GNU_SOURCE -fwrapv -fno-strict-aliasing -pipe -fstack-protector-strong -I/usr/local/include' cpplast='-' cppminus='-' cpprun='cc -E' cppstdin='cc -E' -cppsymbols='_FILE_OFFSET_BITS=64 _LARGEFILE_SOURCE=1 _LP64=1 _POSIX_C_SOURCE=200809L _POSIX_SOURCE=1 _STDC_PREDEF_H=1 __ATOMIC_ACQUIRE=2 __ATOMIC_ACQ_REL=4 __ATOMIC_CONSUME=1 __ATOMIC_HLE_ACQUIRE=65536 __ATOMIC_HLE_RELEASE=131072 __ATOMIC_RELAXED=0 __ATOMIC_RELEASE=3 __ATOMIC_SEQ_CST=5 __BIGGEST_ALIGNMENT__=16 __BYTE_ORDER__=1234 __CHAR16_TYPE__=short\ unsigned\ int __CHAR32_TYPE__=unsigned\ int __CHAR_BIT__=8 __DBL_DECIMAL_DIG__=17 __DBL_DENORM_MIN__=((double)4.94065645841246544177e-324L) __DBL_DIG__=15 __DBL_EPSILON__=((double)2.22044604925031308085e-16L) __DBL_HAS_DENORM__=1 __DBL_HAS_INFINITY__=1 __DBL_HAS_QUIET_NAN__=1 __DBL_MANT_DIG__=53 __DBL_MAX_10_EXP__=308 __DBL_MAX_EXP__=1024 __DBL_MAX__=((double)1.79769313486231570815e+308L) __DBL_MIN_10_EXP__=(-307) __DBL_MIN_EXP__=(-1021) __DBL_MIN__=((double)2.22507385850720138309e-308L) __DEC128_EPSILON__=1E-33DL __DEC128_MANT_DIG__=34 __DEC128_MAX_EXP__=6145 __DEC128_MAX__=9.999999999999999999999999999999999E6144DL __DEC128_MIN_EXP__=(-6142) __DEC128_MIN__=1E-6143DL __DEC128_SUBNORMAL_MIN__=0.000000000000000000000000000000001E-6143DL __DEC32_EPSILON__=1E-6DF __DEC32_MANT_DIG__=7 __DEC32_MAX_EXP__=97 __DEC32_MAX__=9.999999E96DF __DEC32_MIN_EXP__=(-94) __DEC32_MIN__=1E-95DF __DEC32_SUBNORMAL_MIN__=0.000001E-95DF __DEC64_EPSILON__=1E-15DD __DEC64_MANT_DIG__=16 __DEC64_MAX_EXP__=385 __DEC64_MAX__=9.999999999999999E384DD __DEC64_MIN_EXP__=(-382) __DEC64_MIN__=1E-383DD __DEC64_SUBNORMAL_MIN__=0.000000000000001E-383DD __DECIMAL_BID_FORMAT__=1 __DECIMAL_DIG__=21 __DEC_EVAL_METHOD__=2 __ELF__=1 __FINITE_MATH_ONLY__=0 __FLOAT_WORD_ORDER__=1234 __FLT_DECIMAL_DIG__=9 __FLT_DENORM_MIN__=1.40129846432481707092e-45F __FLT_DIG__=6 __FLT_EPSILON__=1.19209289550781250000e-7F __FLT_EVAL_METHOD__=0 __FLT_HAS_DENORM__=1 __FLT_HAS_INFINITY__=1 __FLT_HAS_QUIET_NAN__=1 __FLT_MANT_DIG__=24 __FLT_MAX_10_EXP__=38 __FLT_MAX_EXP__=128 __FLT_MAX__=3.40282346638528859812e+38F __FLT_MIN_10_EXP__=(-37) __FLT_MIN_EXP__=(-125) __FLT_MIN__=1.17549435082228750797e-38F __FLT_RADIX__=2 __FXSR__=1 __GCC_ATOMIC_BOOL_LOCK_FREE=2 __GCC_ATOMIC_CHAR16_T_LOCK_FREE=2 __GCC_ATOMIC_CHAR32_T_LOCK_FREE=2 __GCC_ATOMIC_CHAR_LOCK_FREE=2 __GCC_ATOMIC_INT_LOCK_FREE=2 __GCC_ATOMIC_LLONG_LOCK_FREE=2 __GCC_ATOMIC_LONG_LOCK_FREE=2 __GCC_ATOMIC_POINTER_LOCK_FREE=2 __GCC_ATOMIC_SHORT_LOCK_FREE=2 __GCC_ATOMIC_TEST_AND_SET_TRUEVAL=1 __GCC_ATOMIC_WCHAR_T_LOCK_FREE=2 __GCC_HAVE_DWARF2_CFI_ASM=1 __GCC_HAVE_SYNC_COMPARE_AND_SWAP_1=1 __GCC_HAVE_SYNC_COMPARE_AND_SWAP_2=1 __GCC_HAVE_SYNC_COMPARE_AND_SWAP_4=1 __GCC_HAVE_SYNC_COMPARE_AND_SWAP_8=1 __GCC_IEC_559=2 __GCC_IEC_559_COMPLEX=2 __GLIBC_MINOR__=19 __GLIBC__=2 __GNUC_GNU_INLINE__=1 __GNUC_MINOR__=9 __GNUC_PATCHLEVEL__=2 __GNUC__=4 __GNU_LIBRARY__=6 __GXX_ABI_VERSION=1002 __INT16_C=__INT16_C __INT16_MAX__=32767 __INT16_TYPE__=short\ int __INT32_C=__INT32_C __INT32_MAX__=2147483647 __INT32_TYPE__=int __INT64_C=__INT64_C __INT64_MAX__=9223372036854775807L __INT64_TYPE__=long\ int __INT8_C=__INT8_C __INT8_MAX__=127 __INT8_TYPE__=signed\ char __INTMAX_C=__INTMAX_C __INTMAX_MAX__=9223372036854775807L __INTMAX_TYPE__=long\ int __INTPTR_MAX__=9223372036854775807L __INTPTR_TYPE__=long\ int __INT_FAST16_MAX__=9223372036854775807L __INT_FAST16_TYPE__=long\ int __INT_FAST32_MAX__=9223372036854775807L __INT_FAST32_TYPE__=long\ int __INT_FAST64_MAX__=9223372036854775807L __INT_FAST64_TYPE__=long\ int __INT_FAST8_MAX__=127 __INT_FAST8_TYPE__=signed\ char __INT_LEAST16_MAX__=32767 __INT_LEAST16_TYPE__=short\ int __INT_LEAST32_MAX__=2147483647 __INT_LEAST32_TYPE__=int __INT_LEAST64_MAX__=9223372036854775807L __INT_LEAST64_TYPE__=long\ int __INT_LEAST8_MAX__=127 __INT_LEAST8_TYPE__=signed\ char __INT_MAX__=2147483647 __LDBL_DENORM_MIN__=3.64519953188247460253e-4951L __LDBL_DIG__=18 __LDBL_EPSILON__=1.08420217248550443401e-19L __LDBL_HAS_DENORM__=1 __LDBL_HAS_INFINITY__=1 __LDBL_HAS_QUIET_NAN__=1 __LDBL_MANT_DIG__=64 __LDBL_MAX_10_EXP__=4932 __LDBL_MAX_EXP__=16384 __LDBL_MAX__=1.18973149535723176502e+4932L __LDBL_MIN_10_EXP__=(-4931) __LDBL_MIN_EXP__=(-16381) __LDBL_MIN__=3.36210314311209350626e-4932L __LONG_LONG_MAX__=9223372036854775807LL __LONG_MAX__=9223372036854775807L __LP64__=1 __MMX__=1 __ORDER_BIG_ENDIAN__=4321 __ORDER_LITTLE_ENDIAN__=1234 __ORDER_PDP_ENDIAN__=3412 __PRAGMA_REDEFINE_EXTNAME=1 __PTRDIFF_MAX__=9223372036854775807L __PTRDIFF_TYPE__=long\ int __REGISTER_PREFIX__= __SCHAR_MAX__=127 __SHRT_MAX__=32767 __SIG_ATOMIC_MAX__=2147483647 __SIG_ATOMIC_MIN__=(-2147483647\ -\ 1) __SIG_ATOMIC_TYPE__=int __SIZEOF_DOUBLE__=8 __SIZEOF_FLOAT__=4 __SIZEOF_INT128__=16 __SIZEOF_INT__=4 __SIZEOF_LONG_DOUBLE__=16 __SIZEOF_LONG_LONG__=8 __SIZEOF_LONG__=8 __SIZEOF_POINTER__=8 __SIZEOF_PTRDIFF_T__=8 __SIZEOF_SHORT__=2 __SIZEOF_SIZE_T__=8 __SIZEOF_WCHAR_T__=4 __SIZEOF_WINT_T__=4 __SIZE_MAX__=18446744073709551615UL __SIZE_TYPE__=long\ unsigned\ int __SSE2_MATH__=1 __SSE2__=1 __SSE_MATH__=1 __SSE__=1 __STDC_HOSTED__=1 __STDC_IEC_559_COMPLEX__=1 __STDC_IEC_559__=1 __STDC_ISO_10646__=201103L __STDC_NO_THREADS__=1 __STDC__=1 __UINT16_C=__UINT16_C __UINT16_MAX__=65535 __UINT16_TYPE__=short\ unsigned\ int __UINT32_C=__UINT32_C __UINT32_MAX__=4294967295U __UINT32_TYPE__=unsigned\ int __UINT64_C=__UINT64_C __UINT64_MAX__=18446744073709551615UL __UINT64_TYPE__=long\ unsigned\ int __UINT8_C=__UINT8_C __UINT8_MAX__=255 __UINT8_TYPE__=unsigned\ char __UINTMAX_C=__UINTMAX_C __UINTMAX_MAX__=18446744073709551615UL __UINTMAX_TYPE__=long\ unsigned\ int __UINTPTR_MAX__=18446744073709551615UL __UINTPTR_TYPE__=long\ unsigned\ int __UINT_FAST16_MAX__=18446744073709551615UL __UINT_FAST16_TYPE__=long\ unsigned\ int __UINT_FAST32_MAX__=18446744073709551615UL __UINT_FAST32_TYPE__=long\ unsigned\ int __UINT_FAST64_MAX__=18446744073709551615UL __UINT_FAST64_TYPE__=long\ unsigned\ int __UINT_FAST8_MAX__=255 __UINT_FAST8_TYPE__=unsigned\ char __UINT_LEAST16_MAX__=65535 __UINT_LEAST16_TYPE__=short\ unsigned\ int __UINT_LEAST32_MAX__=4294967295U __UINT_LEAST32_TYPE__=unsigned\ int __UINT_LEAST64_MAX__=18446744073709551615UL __UINT_LEAST64_TYPE__=long\ unsigned\ int __UINT_LEAST8_MAX__=255 __UINT_LEAST8_TYPE__=unsigned\ char __USER_LABEL_PREFIX__= __USE_BSD=1 __USE_FILE_OFFSET64=1 __USE_LARGEFILE=1 __USE_MISC=1 __USE_POSIX199309=1 __USE_POSIX199506=1 __USE_POSIX2=1 __USE_POSIX=1 __USE_SVID=1 __VERSION__="4.9.2" __WCHAR_MAX__=2147483647 __WCHAR_MIN__=(-2147483647\ -\ 1) __WCHAR_TYPE__=int __WINT_MAX__=4294967295U __WINT_MIN__=0U __WINT_TYPE__=unsigned\ int __amd64=1 __amd64__=1 __code_model_small__=1 __gnu_linux__=1 __has_include=__has_include __has_include_next=__has_include_next __k8=1 __k8__=1 __linux=1 __linux__=1 __unix=1 __unix__=1 __x86_64=1 __x86_64__=1 linux=1 unix=1' -crypt_r_proto='0' +cppsymbols='__amd64=1 __amd64__=1 __ATOMIC_ACQ_REL=4 __ATOMIC_ACQUIRE=2 __ATOMIC_CONSUME=1 __ATOMIC_HLE_ACQUIRE=65536 __ATOMIC_HLE_RELEASE=131072 __ATOMIC_RELAXED=0 __ATOMIC_RELEASE=3 __ATOMIC_SEQ_CST=5 __BIGGEST_ALIGNMENT__=16 __BYTE_ORDER__=1234 __CHAR16_TYPE__=short\ unsigned\ int __CHAR32_TYPE__=unsigned\ int __CHAR_BIT__=8 __code_model_small__=1 __DBL_DECIMAL_DIG__=17 __DBL_DENORM_MIN__=((double)4.94065645841246544176568792868221372e-324L) __DBL_DIG__=15 __DBL_EPSILON__=((double)2.22044604925031308084726333618164062e-16L) __DBL_HAS_DENORM__=1 __DBL_HAS_INFINITY__=1 __DBL_HAS_QUIET_NAN__=1 __DBL_MANT_DIG__=53 __DBL_MAX_10_EXP__=308 __DBL_MAX__=((double)1.79769313486231570814527423731704357e+308L) __DBL_MAX_EXP__=1024 __DBL_MIN_10_EXP__=(-307) __DBL_MIN__=((double)2.22507385850720138309023271733240406e-308L) __DBL_MIN_EXP__=(-1021) __DBL_NORM_MAX__=((double)1.79769313486231570814527423731704357e+308L) __DEC128_EPSILON__=1E-33DL __DEC128_MANT_DIG__=34 __DEC128_MAX__=9.999999999999999999999999999999999E6144DL __DEC128_MAX_EXP__=6145 __DEC128_MIN__=1E-6143DL __DEC128_MIN_EXP__=(-6142) __DEC128_SUBNORMAL_MIN__=0.000000000000000000000000000000001E-6143DL __DEC32_EPSILON__=1E-6DF __DEC32_MANT_DIG__=7 __DEC32_MAX__=9.999999E96DF __DEC32_MAX_EXP__=97 __DEC32_MIN__=1E-95DF __DEC32_MIN_EXP__=(-94) __DEC32_SUBNORMAL_MIN__=0.000001E-95DF __DEC64_EPSILON__=1E-15DD __DEC64_MANT_DIG__=16 __DEC64_MAX__=9.999999999999999E384DD __DEC64_MAX_EXP__=385 __DEC64_MIN__=1E-383DD __DEC64_MIN_EXP__=(-382) __DEC64_SUBNORMAL_MIN__=0.000000000000001E-383DD __DEC_EVAL_METHOD__=2 __DECIMAL_BID_FORMAT__=1 __DECIMAL_DIG__=21 __ELF__=1 _FILE_OFFSET_BITS=64 __FINITE_MATH_ONLY__=0 __FLOAT_WORD_ORDER__=1234 __FLT128_DECIMAL_DIG__=36 __FLT128_DENORM_MIN__=6.47517511943802511092443895822764655e-4966F128 __FLT128_DIG__=33 __FLT128_EPSILON__=1.92592994438723585305597794258492732e-34F128 __FLT128_HAS_DENORM__=1 __FLT128_HAS_INFINITY__=1 __FLT128_HAS_QUIET_NAN__=1 __FLT128_MANT_DIG__=113 __FLT128_MAX_10_EXP__=4932 __FLT128_MAX__=1.18973149535723176508575932662800702e+4932F128 __FLT128_MAX_EXP__=16384 __FLT128_MIN_10_EXP__=(-4931) __FLT128_MIN__=3.36210314311209350626267781732175260e-4932F128 __FLT128_MIN_EXP__=(-16381) __FLT128_NORM_MAX__=1.18973149535723176508575932662800702e+4932F128 __FLT32_DECIMAL_DIG__=9 __FLT32_DENORM_MIN__=1.40129846432481707092372958328991613e-45F32 __FLT32_DIG__=6 __FLT32_EPSILON__=1.19209289550781250000000000000000000e-7F32 __FLT32_HAS_DENORM__=1 __FLT32_HAS_INFINITY__=1 __FLT32_HAS_QUIET_NAN__=1 __FLT32_MANT_DIG__=24 __FLT32_MAX_10_EXP__=38 __FLT32_MAX__=3.40282346638528859811704183484516925e+38F32 __FLT32_MAX_EXP__=128 __FLT32_MIN_10_EXP__=(-37) __FLT32_MIN__=1.17549435082228750796873653722224568e-38F32 __FLT32_MIN_EXP__=(-125) __FLT32_NORM_MAX__=3.40282346638528859811704183484516925e+38F32 __FLT32X_DECIMAL_DIG__=17 __FLT32X_DENORM_MIN__=4.94065645841246544176568792868221372e-324F32x __FLT32X_DIG__=15 __FLT32X_EPSILON__=2.22044604925031308084726333618164062e-16F32x __FLT32X_HAS_DENORM__=1 __FLT32X_HAS_INFINITY__=1 __FLT32X_HAS_QUIET_NAN__=1 __FLT32X_MANT_DIG__=53 __FLT32X_MAX_10_EXP__=308 __FLT32X_MAX__=1.79769313486231570814527423731704357e+308F32x __FLT32X_MAX_EXP__=1024 __FLT32X_MIN_10_EXP__=(-307) __FLT32X_MIN__=2.22507385850720138309023271733240406e-308F32x __FLT32X_MIN_EXP__=(-1021) __FLT32X_NORM_MAX__=1.79769313486231570814527423731704357e+308F32x __FLT64_DECIMAL_DIG__=17 __FLT64_DENORM_MIN__=4.94065645841246544176568792868221372e-324F64 __FLT64_DIG__=15 __FLT64_EPSILON__=2.22044604925031308084726333618164062e-16F64 __FLT64_HAS_DENORM__=1 __FLT64_HAS_INFINITY__=1 __FLT64_HAS_QUIET_NAN__=1 __FLT64_MANT_DIG__=53 __FLT64_MAX_10_EXP__=308 __FLT64_MAX__=1.79769313486231570814527423731704357e+308F64 __FLT64_MAX_EXP__=1024 __FLT64_MIN_10_EXP__=(-307) __FLT64_MIN__=2.22507385850720138309023271733240406e-308F64 __FLT64_MIN_EXP__=(-1021) __FLT64_NORM_MAX__=1.79769313486231570814527423731704357e+308F64 __FLT64X_DECIMAL_DIG__=21 __FLT64X_DENORM_MIN__=3.64519953188247460252840593361941982e-4951F64x __FLT64X_DIG__=18 __FLT64X_EPSILON__=1.08420217248550443400745280086994171e-19F64x __FLT64X_HAS_DENORM__=1 __FLT64X_HAS_INFINITY__=1 __FLT64X_HAS_QUIET_NAN__=1 __FLT64X_MANT_DIG__=64 __FLT64X_MAX_10_EXP__=4932 __FLT64X_MAX__=1.18973149535723176502126385303097021e+4932F64x __FLT64X_MAX_EXP__=16384 __FLT64X_MIN_10_EXP__=(-4931) __FLT64X_MIN__=3.36210314311209350626267781732175260e-4932F64x __FLT64X_MIN_EXP__=(-16381) __FLT64X_NORM_MAX__=1.18973149535723176502126385303097021e+4932F64x __FLT_DECIMAL_DIG__=9 __FLT_DENORM_MIN__=1.40129846432481707092372958328991613e-45F __FLT_DIG__=6 __FLT_EPSILON__=1.19209289550781250000000000000000000e-7F __FLT_EVAL_METHOD__=0 __FLT_EVAL_METHOD_TS_18661_3__=0 __FLT_HAS_DENORM__=1 __FLT_HAS_INFINITY__=1 __FLT_HAS_QUIET_NAN__=1 __FLT_MANT_DIG__=24 __FLT_MAX_10_EXP__=38 __FLT_MAX__=3.40282346638528859811704183484516925e+38F __FLT_MAX_EXP__=128 __FLT_MIN_10_EXP__=(-37) __FLT_MIN__=1.17549435082228750796873653722224568e-38F __FLT_MIN_EXP__=(-125) __FLT_NORM_MAX__=3.40282346638528859811704183484516925e+38F __FLT_RADIX__=2 __FXSR__=1 __GCC_ASM_FLAG_OUTPUTS__=1 __GCC_ATOMIC_BOOL_LOCK_FREE=2 __GCC_ATOMIC_CHAR16_T_LOCK_FREE=2 __GCC_ATOMIC_CHAR32_T_LOCK_FREE=2 __GCC_ATOMIC_CHAR_LOCK_FREE=2 __GCC_ATOMIC_INT_LOCK_FREE=2 __GCC_ATOMIC_LLONG_LOCK_FREE=2 __GCC_ATOMIC_LONG_LOCK_FREE=2 __GCC_ATOMIC_POINTER_LOCK_FREE=2 __GCC_ATOMIC_SHORT_LOCK_FREE=2 __GCC_ATOMIC_TEST_AND_SET_TRUEVAL=1 __GCC_ATOMIC_WCHAR_T_LOCK_FREE=2 __GCC_HAVE_DWARF2_CFI_ASM=1 __GCC_HAVE_SYNC_COMPARE_AND_SWAP_1=1 __GCC_HAVE_SYNC_COMPARE_AND_SWAP_2=1 __GCC_HAVE_SYNC_COMPARE_AND_SWAP_4=1 __GCC_HAVE_SYNC_COMPARE_AND_SWAP_8=1 __GCC_IEC_559=2 __GCC_IEC_559_COMPLEX=2 __GLIBC__=2 __GLIBC_MINOR__=31 __GNUC__=10 __GNUC_MINOR__=2 __GNUC_PATCHLEVEL__=1 __GNUC_STDC_INLINE__=1 __GNU_LIBRARY__=6 __gnu_linux__=1 _GNU_SOURCE=1 __GXX_ABI_VERSION=1014 __HAVE_SPECULATION_SAFE_VALUE=1 __INT16_C=__INT16_C __INT16_MAX__=0x7fff __INT16_TYPE__=short\ int __INT32_C=__INT32_C __INT32_MAX__=0x7fffffff __INT32_TYPE__=int __INT64_C=__INT64_C __INT64_MAX__=0x7fffffffffffffffL __INT64_TYPE__=long\ int __INT8_C=__INT8_C __INT8_MAX__=0x7f __INT8_TYPE__=signed\ char __INT_FAST16_MAX__=0x7fffffffffffffffL __INT_FAST16_TYPE__=long\ int __INT_FAST16_WIDTH__=64 __INT_FAST32_MAX__=0x7fffffffffffffffL __INT_FAST32_TYPE__=long\ int __INT_FAST32_WIDTH__=64 __INT_FAST64_MAX__=0x7fffffffffffffffL __INT_FAST64_TYPE__=long\ int __INT_FAST64_WIDTH__=64 __INT_FAST8_MAX__=0x7f __INT_FAST8_TYPE__=signed\ char __INT_FAST8_WIDTH__=8 __INT_LEAST16_MAX__=0x7fff __INT_LEAST16_TYPE__=short\ int __INT_LEAST16_WIDTH__=16 __INT_LEAST32_MAX__=0x7fffffff __INT_LEAST32_TYPE__=int __INT_LEAST32_WIDTH__=32 __INT_LEAST64_MAX__=0x7fffffffffffffffL __INT_LEAST64_TYPE__=long\ int __INT_LEAST64_WIDTH__=64 __INT_LEAST8_MAX__=0x7f __INT_LEAST8_TYPE__=signed\ char __INT_LEAST8_WIDTH__=8 __INT_MAX__=0x7fffffff __INTMAX_C=__INTMAX_C __INTMAX_MAX__=0x7fffffffffffffffL __INTMAX_TYPE__=long\ int __INTMAX_WIDTH__=64 __INTPTR_MAX__=0x7fffffffffffffffL __INTPTR_TYPE__=long\ int __INTPTR_WIDTH__=64 __INT_WIDTH__=32 __k8=1 __k8__=1 _LARGEFILE64_SOURCE=1 _LARGEFILE_SOURCE=1 __LDBL_DECIMAL_DIG__=21 __LDBL_DENORM_MIN__=3.64519953188247460252840593361941982e-4951L __LDBL_DIG__=18 __LDBL_EPSILON__=1.08420217248550443400745280086994171e-19L __LDBL_HAS_DENORM__=1 __LDBL_HAS_INFINITY__=1 __LDBL_HAS_QUIET_NAN__=1 __LDBL_MANT_DIG__=64 __LDBL_MAX_10_EXP__=4932 __LDBL_MAX__=1.18973149535723176502126385303097021e+4932L __LDBL_MAX_EXP__=16384 __LDBL_MIN_10_EXP__=(-4931) __LDBL_MIN__=3.36210314311209350626267781732175260e-4932L __LDBL_MIN_EXP__=(-16381) __LDBL_NORM_MAX__=1.18973149535723176502126385303097021e+4932L __linux=1 __linux__=1 linux=1 __LONG_LONG_MAX__=0x7fffffffffffffffLL __LONG_LONG_WIDTH__=64 __LONG_MAX__=0x7fffffffffffffffL __LONG_WIDTH__=64 __LP64__=1 _LP64=1 __MMX__=1 __MMX_WITH_SSE__=1 __ORDER_BIG_ENDIAN__=4321 __ORDER_LITTLE_ENDIAN__=1234 __ORDER_PDP_ENDIAN__=3412 _POSIX_C_SOURCE=200809L _POSIX_SOURCE=1 __PRAGMA_REDEFINE_EXTNAME=1 __PTRDIFF_MAX__=0x7fffffffffffffffL __PTRDIFF_TYPE__=long\ int __PTRDIFF_WIDTH__=64 _REENTRANT=1 __REGISTER_PREFIX__= __SCHAR_MAX__=0x7f __SCHAR_WIDTH__=8 __SEG_FS=1 __SEG_GS=1 __SHRT_MAX__=0x7fff __SHRT_WIDTH__=16 __SIG_ATOMIC_MAX__=0x7fffffff __SIG_ATOMIC_MIN__=(-0x7fffffff\ -\ 1) __SIG_ATOMIC_TYPE__=int __SIG_ATOMIC_WIDTH__=32 __SIZE_MAX__=0xffffffffffffffffUL __SIZEOF_DOUBLE__=8 __SIZEOF_FLOAT128__=16 __SIZEOF_FLOAT__=4 __SIZEOF_FLOAT80__=16 __SIZEOF_INT128__=16 __SIZEOF_INT__=4 __SIZEOF_LONG__=8 __SIZEOF_LONG_DOUBLE__=16 __SIZEOF_LONG_LONG__=8 __SIZEOF_POINTER__=8 __SIZEOF_PTRDIFF_T__=8 __SIZEOF_SHORT__=2 __SIZEOF_SIZE_T__=8 __SIZEOF_WCHAR_T__=4 __SIZEOF_WINT_T__=4 __SIZE_TYPE__=long\ unsigned\ int __SIZE_WIDTH__=64 __SSE__=1 __SSE2__=1 __SSE2_MATH__=1 __SSE_MATH__=1 __STDC__=1 __STDC_HOSTED__=1 __STDC_IEC_559__=1 __STDC_IEC_559_COMPLEX__=1 __STDC_ISO_10646__=201706L _STDC_PREDEF_H=1 __STDC_UTF_16__=1 __STDC_UTF_32__=1 __STDC_VERSION__=201710L __UINT16_C=__UINT16_C __UINT16_MAX__=0xffff __UINT16_TYPE__=short\ unsigned\ int __UINT32_C=__UINT32_C __UINT32_MAX__=0xffffffffU __UINT32_TYPE__=unsigned\ int __UINT64_C=__UINT64_C __UINT64_MAX__=0xffffffffffffffffUL __UINT64_TYPE__=long\ unsigned\ int __UINT8_C=__UINT8_C __UINT8_MAX__=0xff __UINT8_TYPE__=unsigned\ char __UINT_FAST16_MAX__=0xffffffffffffffffUL __UINT_FAST16_TYPE__=long\ unsigned\ int __UINT_FAST32_MAX__=0xffffffffffffffffUL __UINT_FAST32_TYPE__=long\ unsigned\ int __UINT_FAST64_MAX__=0xffffffffffffffffUL __UINT_FAST64_TYPE__=long\ unsigned\ int __UINT_FAST8_MAX__=0xff __UINT_FAST8_TYPE__=unsigned\ char __UINT_LEAST16_MAX__=0xffff __UINT_LEAST16_TYPE__=short\ unsigned\ int __UINT_LEAST32_MAX__=0xffffffffU __UINT_LEAST32_TYPE__=unsigned\ int __UINT_LEAST64_MAX__=0xffffffffffffffffUL __UINT_LEAST64_TYPE__=long\ unsigned\ int __UINT_LEAST8_MAX__=0xff __UINT_LEAST8_TYPE__=unsigned\ char __UINTMAX_C=__UINTMAX_C __UINTMAX_MAX__=0xffffffffffffffffUL __UINTMAX_TYPE__=long\ unsigned\ int __UINTPTR_MAX__=0xffffffffffffffffUL __UINTPTR_TYPE__=long\ unsigned\ int __unix=1 __unix__=1 unix=1 __USE_FILE_OFFSET64=1 __USE_GNU=1 __USE_LARGEFILE=1 __USE_LARGEFILE64=1 __USE_MISC=1 __USE_POSIX=1 __USE_POSIX199309=1 __USE_POSIX199506=1 __USE_POSIX2=1 __USER_LABEL_PREFIX__= __USE_UNIX98=1 __USE_XOPEN=1 __USE_XOPEN_EXTENDED=1 __VERSION__="10.2.1\ 20200805\ [revision\ dda1e9d08434def88ed86557d08b23251332c5aa]" __WCHAR_MAX__=0x7fffffff __WCHAR_MIN__=(-0x7fffffff\ -\ 1) __WCHAR_TYPE__=int __WCHAR_WIDTH__=32 __WINT_MAX__=0xffffffffU __WINT_MIN__=0U __WINT_TYPE__=unsigned\ int __WINT_WIDTH__=32 __x86_64=1 __x86_64__=1 _XOPEN_SOURCE=700 _XOPEN_SOURCE_EXTENDED=1' +crypt_r_proto='REENTRANT_PROTO_B_CCS' cryptlib='' csh='csh' ctermid_r_proto='0' -ctime_r_proto='0' -d_Gconvert='gcvt((x),(n),(b))' +ctime_r_proto='REENTRANT_PROTO_B_SB' +d_Gconvert='qgcvt((x),(n),(b))' d_PRIEUldbl='define' d_PRIFUldbl='define' d_PRIGUldbl='define' @@ -125,12 +128,12 @@ d_aintl='undef' d_alarm='define' d_archlib='define' d_asctime64='undef' -d_asctime_r='undef' +d_asctime_r='define' d_asinh='define' d_atanh='define' d_atolf='undef' d_atoll='define' -d_attribute_always_inline='undef' +d_attribute_always_inline='define' d_attribute_deprecated='define' d_attribute_format='define' d_attribute_malloc='define' @@ -143,11 +146,11 @@ d_backtrace='define' d_bsd='undef' d_bsdgetpgrp='undef' d_bsdsetpgrp='undef' -d_builtin_add_overflow='undef' +d_builtin_add_overflow='define' d_builtin_choose_expr='define' d_builtin_expect='define' -d_builtin_mul_overflow='undef' -d_builtin_sub_overflow='undef' +d_builtin_mul_overflow='define' +d_builtin_sub_overflow='define' d_c99_variadic_macros='define' d_casti32='undef' d_castneg='define' @@ -163,12 +166,12 @@ d_copysign='define' d_copysignl='define' d_cplusplus='undef' d_crypt='define' -d_crypt_r='undef' +d_crypt_r='define' d_csh='define' d_ctermid='define' d_ctermid_r='undef' d_ctime64='undef' -d_ctime_r='undef' +d_ctime_r='define' d_cuserid='define' d_dbminitproto='define' d_difftime64='undef' @@ -189,7 +192,7 @@ d_double_style_cray='undef' d_double_style_ibm='undef' d_double_style_ieee='define' d_double_style_vax='undef' -d_drand48_r='undef' +d_drand48_r='define' d_drand48proto='define' d_dup2='define' d_dup3='define' @@ -213,7 +216,7 @@ d_erfc='define' d_eunice='undef' d_exp2='define' d_expm1='define' -d_faststdio='define' +d_faststdio='undef' d_fchdir='define' d_fchmod='define' d_fchmodat='define' @@ -224,8 +227,10 @@ d_fd_macros='define' d_fd_set='define' d_fdclose='undef' d_fdim='define' -d_fds_bits='undef' +d_fds_bits='define' d_fegetround='define' +d_ffs='undef' +d_ffsl='undef' d_fgetpos='define' d_finite='define' d_finitel='define' @@ -261,33 +266,34 @@ d_gdbm_ndbm_h_uses_prototypes='undef' d_gdbmndbm_h_uses_prototypes='undef' d_getaddrinfo='define' d_getcwd='define' +d_getenv_preserves_other_thread='define' d_getespwnam='undef' d_getfsstat='undef' d_getgrent='define' -d_getgrent_r='undef' -d_getgrgid_r='undef' -d_getgrnam_r='undef' +d_getgrent_r='define' +d_getgrgid_r='define' +d_getgrnam_r='define' d_getgrps='define' d_gethbyaddr='define' d_gethbyname='define' d_gethent='define' d_gethname='define' -d_gethostbyaddr_r='undef' -d_gethostbyname_r='undef' -d_gethostent_r='undef' +d_gethostbyaddr_r='define' +d_gethostbyname_r='define' +d_gethostent_r='define' d_gethostprotos='define' d_getitimer='define' d_getlogin='define' -d_getlogin_r='undef' +d_getlogin_r='define' d_getmnt='undef' d_getmntent='define' d_getnameinfo='define' d_getnbyaddr='define' d_getnbyname='define' d_getnent='define' -d_getnetbyaddr_r='undef' -d_getnetbyname_r='undef' -d_getnetent_r='undef' +d_getnetbyaddr_r='define' +d_getnetbyname_r='define' +d_getnetent_r='define' d_getnetprotos='define' d_getpagsz='define' d_getpbyname='define' @@ -298,29 +304,30 @@ d_getpgrp2='undef' d_getpgrp='define' d_getppid='define' d_getprior='define' -d_getprotobyname_r='undef' -d_getprotobynumber_r='undef' -d_getprotoent_r='undef' +d_getprotobyname_r='define' +d_getprotobynumber_r='define' +d_getprotoent_r='define' d_getprotoprotos='define' d_getprpwnam='undef' d_getpwent='define' -d_getpwent_r='undef' -d_getpwnam_r='undef' -d_getpwuid_r='undef' +d_getpwent_r='define' +d_getpwnam_r='define' +d_getpwuid_r='define' d_getsbyname='define' d_getsbyport='define' d_getsent='define' -d_getservbyname_r='undef' -d_getservbyport_r='undef' -d_getservent_r='undef' +d_getservbyname_r='define' +d_getservbyport_r='define' +d_getservent_r='define' d_getservprotos='define' d_getspnam='define' -d_getspnam_r='undef' +d_getspnam_r='define' d_gettimeod='define' d_gmtime64='undef' -d_gmtime_r='undef' +d_gmtime_r='define' d_gnulibc='define' d_grpasswd='define' +d_has_C_UTF8='true' d_hasmntopt='define' d_htonl='define' d_hypot='define' @@ -341,7 +348,7 @@ d_isfinite='define' d_isfinitel='undef' d_isinf='define' d_isinfl='define' -d_isless='undef' +d_isless='define' d_isnan='define' d_isnanl='define' d_isnormal='define' @@ -354,7 +361,7 @@ d_ldbl_dig='define' d_ldexpl='define' d_lgamma='define' d_lgamma_r='define' -d_libm_lib_version='define' +d_libm_lib_version='undef' d_libname_unique='undef' d_link='define' d_linkat='define' @@ -364,8 +371,8 @@ d_llround='define' d_llroundl='define' d_localeconv_l='undef' d_localtime64='undef' -d_localtime_r='undef' -d_localtime_r_needs_tzset='undef' +d_localtime_r='define' +d_localtime_r_needs_tzset='define' d_locconv='define' d_lockf='define' d_log1p='define' @@ -387,6 +394,7 @@ d_lstat='define' d_madvise='define' d_malloc_good_size='undef' d_malloc_size='undef' +d_malloc_usable_size='define' d_mblen='define' d_mbrlen='define' d_mbrtowc='define' @@ -423,16 +431,18 @@ d_mymalloc='undef' d_nan='define' d_nanosleep='define' d_ndbm='define' -d_ndbm_h_uses_prototypes='undef' +d_ndbm_h_uses_prototypes='define' d_nearbyint='define' d_newlocale='define' d_nextafter='define' d_nexttoward='define' d_nice='define' d_nl_langinfo='define' -d_nv_preserves_uv='undef' -d_nv_zero_is_allbits_zero='define' -d_off64_t='undef' +d_nl_langinfo_l='undef' +d_non_int_bitfields='define' +d_nv_preserves_uv='define' +d_nv_zero_is_allbits_zero='undef' +d_off64_t='define' d_old_pthread_create_joinable='undef' d_oldpthreads='undef' d_oldsock='undef' @@ -448,7 +458,7 @@ d_poll='define' d_portable='define' d_prctl='define' d_prctl_set_name='define' -d_printf_format_null='undef' +d_printf_format_null='define' d_procselfexe='define' d_pseudofork='undef' d_pthread_atfork='define' @@ -466,11 +476,11 @@ d_pwquota='undef' d_qgcvt='define' d_quad='define' d_querylocale='undef' -d_random_r='undef' +d_random_r='define' d_re_comp='undef' -d_readdir64_r='undef' +d_readdir64_r='define' d_readdir='define' -d_readdir_r='undef' +d_readdir_r='define' d_readlink='define' d_readv='define' d_recvmsg='define' @@ -554,7 +564,7 @@ d_sitearch='define' d_snprintf='define' d_sockaddr_in6='define' d_sockaddr_sa_len='undef' -d_sockaddr_storage='undef' +d_sockaddr_storage='define' d_sockatmark='define' d_sockatmarkproto='define' d_socket='define' @@ -562,10 +572,10 @@ d_socklen_t='define' d_sockpair='define' d_socks5_init='undef' d_sqrtl='define' -d_srand48_r='undef' -d_srandom_r='undef' -d_sresgproto='undef' -d_sresuproto='undef' +d_srand48_r='define' +d_srandom_r='define' +d_sresgproto='define' +d_sresuproto='define' d_stat='define' d_statblks='define' d_statfs_f_flags='define' @@ -573,21 +583,21 @@ d_statfs_s='define' d_static_inline='define' d_statvfs='define' d_stdio_cnt_lval='undef' -d_stdio_ptr_lval='define' +d_stdio_ptr_lval='undef' d_stdio_ptr_lval_nochange_cnt='undef' -d_stdio_ptr_lval_sets_cnt='define' +d_stdio_ptr_lval_sets_cnt='undef' d_stdio_stream_array='undef' -d_stdiobase='define' -d_stdstdio='define' +d_stdiobase='undef' +d_stdstdio='undef' d_strcoll='define' d_strerror_l='define' -d_strerror_r='undef' +d_strerror_r='define' d_strftime='define' d_strlcat='undef' d_strlcpy='undef' d_strnlen='define' d_strtod='define' -d_strtod_l='undef' +d_strtod_l='define' d_strtol='define' d_strtold='define' d_strtold_l='define' @@ -597,6 +607,7 @@ d_strtoul='define' d_strtoull='define' d_strtouq='define' d_strxfrm='define' +d_strxfrm_l='undef' d_suidsafe='undef' d_symlink='define' d_syscall='define' @@ -610,19 +621,20 @@ d_tcsetpgrp='define' d_telldir='define' d_telldirproto='define' d_tgamma='define' -d_thread_safe_nl_langinfo_l='undef' +d_thread_local='undef' +d_thread_safe_nl_langinfo_l='define' d_time='define' d_timegm='define' d_times='define' d_tm_tm_gmtoff='define' d_tm_tm_zone='define' -d_tmpnam_r='undef' -d_towlower='undef' -d_towupper='undef' +d_tmpnam_r='define' +d_towlower='define' +d_towupper='define' d_trunc='define' d_truncate='define' d_truncl='define' -d_ttyname_r='undef' +d_ttyname_r='define' d_tzname='define' d_u32align='define' d_ualarm='define' @@ -635,7 +647,7 @@ d_unsetenv='define' d_uselocale='define' d_usleep='define' d_usleepproto='define' -d_ustat='define' +d_ustat='undef' d_vendorarch='undef' d_vendorbin='undef' d_vendorlib='undef' @@ -647,7 +659,7 @@ d_voidtty='' d_vsnprintf='define' d_wait4='define' d_waitpid='define' -d_wcrtomb='undef' +d_wcrtomb='define' d_wcscmp='define' d_wcstombs='define' d_wcsxfrm='define' @@ -657,9 +669,9 @@ d_xenix='undef' date='date' db_hashtype='u_int32_t' db_prefixtype='size_t' -db_version_major='5' -db_version_minor='1' -db_version_patch='29' +db_version_major='4' +db_version_minor='8' +db_version_patch='30' default_inc_excludes_dot='define' direntrytype='struct dirent' dlext='so' @@ -670,11 +682,11 @@ doublemantbits='52' doublenanbytes='0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf8, 0xff' doublesize='8' drand01='Perl_drand48()' -drand48_r_proto='0' +drand48_r_proto='REENTRANT_PROTO_I_ST' dtrace='' dtraceobject='' dtracexnolibs='' -dynamic_ext='B Compress/Raw/Bzip2 Compress/Raw/Zlib Cwd DB_File Data/Dumper Devel/PPPort Devel/Peek Digest/MD5 Digest/SHA Encode Fcntl File/DosGlob File/Glob Filter/Util/Call GDBM_File Hash/Util Hash/Util/FieldHash I18N/Langinfo IO IPC/SysV List/Util MIME/Base64 Math/BigInt/FastCalc NDBM_File ODBM_File Opcode POSIX PerlIO/encoding PerlIO/mmap PerlIO/scalar PerlIO/via SDBM_File Socket Storable Sys/Hostname Sys/Syslog Tie/Hash/NamedCapture Time/HiRes Time/Piece Unicode/Collate Unicode/Normalize XS/APItest XS/Typemap arybase attributes mro re threads threads/shared' +dynamic_ext='attributes B Compress/Raw/Bzip2 Compress/Raw/Zlib Cwd Data/Dumper DB_File Devel/Peek Devel/PPPort Digest/MD5 Digest/SHA Encode Fcntl File/DosGlob File/Glob Filter/Util/Call GDBM_File Hash/Util Hash/Util/FieldHash I18N/Langinfo IO IPC/SysV List/Util Math/BigInt/FastCalc MIME/Base64 mro NDBM_File ODBM_File Opcode PerlIO/encoding PerlIO/mmap PerlIO/scalar PerlIO/via POSIX re SDBM_File Socket Storable Sys/Hostname Sys/Syslog threads threads/shared Time/HiRes Time/Piece Unicode/Collate Unicode/Normalize XS/APItest XS/Typemap' eagain='EAGAIN' ebcdic='undef' echo='echo' @@ -689,7 +701,7 @@ endservent_r_proto='0' eunicefix=':' exe_ext='' expr='expr' -extensions='B Compress/Raw/Bzip2 Compress/Raw/Zlib Cwd DB_File Data/Dumper Devel/PPPort Devel/Peek Digest/MD5 Digest/SHA Encode Fcntl File/DosGlob File/Glob Filter/Util/Call GDBM_File Hash/Util Hash/Util/FieldHash I18N/Langinfo IO IPC/SysV List/Util MIME/Base64 Math/BigInt/FastCalc NDBM_File ODBM_File Opcode POSIX PerlIO/encoding PerlIO/mmap PerlIO/scalar PerlIO/via SDBM_File Socket Storable Sys/Hostname Sys/Syslog Tie/Hash/NamedCapture Time/HiRes Time/Piece Unicode/Collate Unicode/Normalize XS/APItest XS/Typemap arybase attributes mro re threads threads/shared Archive/Tar Attribute/Handlers AutoLoader B/Debug CPAN CPAN/Meta CPAN/Meta/Requirements CPAN/Meta/YAML Carp Config/Perl/V Devel/SelfStubber Digest Dumpvalue Env Errno Exporter ExtUtils/CBuilder ExtUtils/Constant ExtUtils/Install ExtUtils/MakeMaker ExtUtils/Manifest ExtUtils/Miniperl ExtUtils/ParseXS File/Fetch File/Find File/Path File/Temp FileCache Filter/Simple Getopt/Long HTTP/Tiny I18N/Collate I18N/LangTags IO/Compress IO/Socket/IP IO/Zlib IPC/Cmd IPC/Open3 JSON/PP Locale/Codes Locale/Maketext Locale/Maketext/Simple Math/BigInt Math/BigRat Math/Complex Memoize Module/CoreList Module/Load Module/Load/Conditional Module/Loaded Module/Metadata NEXT Net/Ping Params/Check Perl/OSType PerlIO/via/QuotedPrint Pod/Checker Pod/Escapes Pod/Functions Pod/Html Pod/Parser Pod/Perldoc Pod/Simple Pod/Usage Safe Search/Dict SelfLoader Term/ANSIColor Term/Cap Term/Complete Term/ReadLine Test Test/Harness Test/Simple Text/Abbrev Text/Balanced Text/ParseWords Text/Tabs Thread/Queue Thread/Semaphore Tie/File Tie/Memoize Tie/RefHash Time/Local XSLoader autodie autouse base bignum constant encoding/warnings experimental if lib libnet parent perlfaq podlators version' +extensions='attributes B Compress/Raw/Bzip2 Compress/Raw/Zlib Cwd Data/Dumper DB_File Devel/Peek Devel/PPPort Digest/MD5 Digest/SHA Encode Fcntl File/DosGlob File/Glob Filter/Util/Call GDBM_File Hash/Util Hash/Util/FieldHash I18N/Langinfo IO IPC/SysV List/Util Math/BigInt/FastCalc MIME/Base64 mro NDBM_File ODBM_File Opcode PerlIO/encoding PerlIO/mmap PerlIO/scalar PerlIO/via POSIX re SDBM_File Socket Storable Sys/Hostname Sys/Syslog threads threads/shared Time/HiRes Time/Piece Unicode/Collate Unicode/Normalize XS/APItest XS/Typemap Archive/Tar Attribute/Handlers autodie AutoLoader autouse base bignum Carp Config/Perl/V constant CPAN CPAN/Meta CPAN/Meta/Requirements CPAN/Meta/YAML Devel/SelfStubber Digest Dumpvalue encoding/warnings Env Errno experimental Exporter ExtUtils/CBuilder ExtUtils/Constant ExtUtils/Install ExtUtils/MakeMaker ExtUtils/Manifest ExtUtils/Miniperl ExtUtils/ParseXS ExtUtils/PL2Bat FileCache File/Fetch File/Find File/Path File/Temp Filter/Simple FindBin Getopt/Long HTTP/Tiny I18N/Collate I18N/LangTags if IO/Compress IO/Socket/IP IO/Zlib IPC/Cmd IPC/Open3 JSON/PP lib libnet Locale/Maketext Locale/Maketext/Simple Math/BigInt Math/BigRat Math/Complex Memoize Module/CoreList Module/Load Module/Load/Conditional Module/Loaded Module/Metadata Net/Ping NEXT Params/Check parent perlfaq PerlIO/via/QuotedPrint Perl/OSType Pod/Checker Pod/Escapes Pod/Functions Pod/Html podlators Pod/Perldoc Pod/Simple Pod/Usage Safe Search/Dict SelfLoader Term/ANSIColor Term/Cap Term/Complete Term/ReadLine Test Test/Harness Test/Simple Text/Abbrev Text/Balanced Text/ParseWords Text/Tabs Thread/Queue Thread/Semaphore Tie/File Tie/Hash/NamedCapture Tie/Memoize Tie/RefHash Time/Local version XSLoader' extern_C='extern' extras='' fflushNULL='define' @@ -702,39 +714,39 @@ fpostype='fpos_t' freetype='void' from=':' full_ar='/usr/bin/ar' -full_csh='/bin/csh' -full_sed='/bin/sed' +full_csh='/usr/bin/csh' +full_sed='/usr/bin/sed' gccansipedantic='' gccosandvers='' -gccversion='4.9.2' -getgrent_r_proto='0' -getgrgid_r_proto='0' -getgrnam_r_proto='0' -gethostbyaddr_r_proto='0' -gethostbyname_r_proto='0' -gethostent_r_proto='0' -getlogin_r_proto='0' -getnetbyaddr_r_proto='0' -getnetbyname_r_proto='0' -getnetent_r_proto='0' -getprotobyname_r_proto='0' -getprotobynumber_r_proto='0' -getprotoent_r_proto='0' -getpwent_r_proto='0' -getpwnam_r_proto='0' -getpwuid_r_proto='0' -getservbyname_r_proto='0' -getservbyport_r_proto='0' -getservent_r_proto='0' -getspnam_r_proto='0' +gccversion='10.2.1 20200805 [revision dda1e9d08434def88ed86557d08b23251332c5aa]' +getgrent_r_proto='REENTRANT_PROTO_I_SBWR' +getgrgid_r_proto='REENTRANT_PROTO_I_TSBWR' +getgrnam_r_proto='REENTRANT_PROTO_I_CSBWR' +gethostbyaddr_r_proto='REENTRANT_PROTO_I_TsISBWRE' +gethostbyname_r_proto='REENTRANT_PROTO_I_CSBWRE' +gethostent_r_proto='REENTRANT_PROTO_I_SBWRE' +getlogin_r_proto='REENTRANT_PROTO_I_BW' +getnetbyaddr_r_proto='REENTRANT_PROTO_I_uISBWRE' +getnetbyname_r_proto='REENTRANT_PROTO_I_CSBWRE' +getnetent_r_proto='REENTRANT_PROTO_I_SBWRE' +getprotobyname_r_proto='REENTRANT_PROTO_I_CSBWR' +getprotobynumber_r_proto='REENTRANT_PROTO_I_ISBWR' +getprotoent_r_proto='REENTRANT_PROTO_I_SBWR' +getpwent_r_proto='REENTRANT_PROTO_I_SBWR' +getpwnam_r_proto='REENTRANT_PROTO_I_CSBWR' +getpwuid_r_proto='REENTRANT_PROTO_I_TSBWR' +getservbyname_r_proto='REENTRANT_PROTO_I_CCSBWR' +getservbyport_r_proto='REENTRANT_PROTO_I_ICSBWR' +getservent_r_proto='REENTRANT_PROTO_I_SBWR' +getspnam_r_proto='REENTRANT_PROTO_I_CSBWR' gidformat='"u"' gidsign='1' gidsize='4' gidtype='gid_t' -glibpth='/usr/shlib /lib /usr/lib /usr/lib/386 /lib/386 /usr/ccs/lib /usr/ucblib /usr/local/lib ' +glibpth='/usr/shlib /lib /usr/lib /usr/lib/386 /lib/386 /usr/ccs/lib /usr/ucblib /usr/local/lib /lib64 /usr/lib64 /usr/local/lib64 ' gmake='gmake' -gmtime_r_proto='0' -gnulibc_version='2.19' +gmtime_r_proto='REENTRANT_PROTO_S_TS' +gnulibc_version='2.31' grep='grep' groupcat='cat /etc/group' groupstype='gid_t' @@ -742,7 +754,7 @@ gzip='gzip' h_fcntl='false' h_sysfile='true' hint='recommended' -hostcat='' +hostcat='cat /etc/hosts' hostgenerate='' hostosname='' hostperl='' @@ -759,7 +771,7 @@ i64type='long' i8size='1' i8type='signed char' i_arpainet='define' -i_bfd='undef' +i_bfd='define' i_bsdioctl='' i_crypt='define' i_db='define' @@ -772,7 +784,7 @@ i_fenv='define' i_fp='undef' i_fp_class='undef' i_gdbm='define' -i_gdbm_ndbm='define' +i_gdbm_ndbm='undef' i_gdbmndbm='undef' i_grp='define' i_ieeefp='undef' @@ -784,7 +796,7 @@ i_machcthr='undef' i_malloc='define' i_mallocmalloc='undef' i_mntent='define' -i_ndbm='undef' +i_ndbm='define' i_netdb='define' i_neterrno='undef' i_netinettcp='define' @@ -797,7 +809,7 @@ i_quadmath='define' i_rpcsvcdbm='undef' i_sgtty='undef' i_shadow='define' -i_socks='undef' +i_socks='define' i_stdbool='define' i_stdint='define' i_stdlib='define' @@ -835,20 +847,20 @@ i_termio='undef' i_termios='define' i_time='define' i_unistd='define' -i_ustat='define' +i_ustat='undef' i_utime='define' i_vfork='undef' i_wchar='define' -i_wctype='undef' +i_wctype='define' i_xlocale='define' ignore_versioned_solibs='y' inc_version_list='' inc_version_list_init='0' incpath='' -incpth='/usr/lib/gcc/x86_64-linux-gnu/4.9/include /usr/local/include /usr/lib/gcc/x86_64-linux-gnu/4.9/include-fixed /usr/include/x86_64-linux-gnu /usr/include' +incpth='/usr/lib64/gcc/x86_64-suse-linux/10/include /usr/local/include /usr/lib64/gcc/x86_64-suse-linux/10/include-fixed /usr/lib64/gcc/x86_64-suse-linux/10/../../../../x86_64-suse-linux/include /usr/include' inews='' initialinstalllocation='/opt/perl/bin' -installarchlib='/opt/perl/lib/5.32.1/x86_64-linux' +installarchlib='/opt/perl/lib/5.36.0/x86_64-linux-thread-multi-ld' installbin='/opt/perl/bin' installhtml1dir='' installhtml3dir='' @@ -856,13 +868,13 @@ installman1dir='/opt/perl/man/man1' installman3dir='/opt/perl/man/man3' installprefix='/opt/perl' installprefixexp='/opt/perl' -installprivlib='/opt/perl/lib/5.32.1' +installprivlib='/opt/perl/lib/5.36.0' installscript='/opt/perl/bin' -installsitearch='/opt/perl/lib/site_perl/5.32.1/x86_64-linux' +installsitearch='/opt/perl/lib/site_perl/5.36.0/x86_64-linux-thread-multi-ld' installsitebin='/opt/perl/bin' installsitehtml1dir='' installsitehtml3dir='' -installsitelib='/opt/perl/lib/site_perl/5.32.1' +installsitelib='/opt/perl/lib/site_perl/5.36.0' installsiteman1dir='/opt/perl/man/man1' installsiteman3dir='/opt/perl/man/man3' installsitescript='/opt/perl/bin' @@ -881,7 +893,7 @@ issymlink='test -h' ivdformat='"ld"' ivsize='8' ivtype='long' -known_extensions='Amiga/ARexx Amiga/Exec Archive/Tar Attribute/Handlers AutoLoader B B/Debug CPAN CPAN/Meta CPAN/Meta/Requirements CPAN/Meta/YAML Carp Compress/Raw/Bzip2 Compress/Raw/Zlib Config/Perl/V Cwd DB_File Data/Dumper Devel/PPPort Devel/Peek Devel/SelfStubber Digest Digest/MD5 Digest/SHA Dumpvalue Encode Env Errno Exporter ExtUtils/CBuilder ExtUtils/Constant ExtUtils/Install ExtUtils/MakeMaker ExtUtils/Manifest ExtUtils/Miniperl ExtUtils/ParseXS Fcntl File/DosGlob File/Fetch File/Find File/Glob File/Path File/Temp FileCache Filter/Simple Filter/Util/Call GDBM_File Getopt/Long HTTP/Tiny Hash/Util Hash/Util/FieldHash I18N/Collate I18N/LangTags I18N/Langinfo IO IO/Compress IO/Socket/IP IO/Zlib IPC/Cmd IPC/Open3 IPC/SysV JSON/PP List/Util Locale/Codes Locale/Maketext Locale/Maketext/Simple MIME/Base64 Math/BigInt Math/BigInt/FastCalc Math/BigRat Math/Complex Memoize Module/CoreList Module/Load Module/Load/Conditional Module/Loaded Module/Metadata NDBM_File NEXT Net/Ping ODBM_File Opcode POSIX Params/Check Perl/OSType PerlIO/encoding PerlIO/mmap PerlIO/scalar PerlIO/via PerlIO/via/QuotedPrint Pod/Checker Pod/Escapes Pod/Functions Pod/Html Pod/Parser Pod/Perldoc Pod/Simple Pod/Usage SDBM_File Safe Search/Dict SelfLoader Socket Storable Sys/Hostname Sys/Syslog Term/ANSIColor Term/Cap Term/Complete Term/ReadLine Test Test/Harness Test/Simple Text/Abbrev Text/Balanced Text/ParseWords Text/Tabs Thread/Queue Thread/Semaphore Tie/File Tie/Hash/NamedCapture Tie/Memoize Tie/RefHash Time/HiRes Time/Local Time/Piece Unicode/Collate Unicode/Normalize VMS/DCLsym VMS/Filespec VMS/Stdio Win32 Win32API/File Win32CORE XS/APItest XS/Typemap XSLoader arybase attributes autodie autouse base bignum constant encoding/warnings experimental if lib libnet mro parent perlfaq podlators re threads threads/shared version ' +known_extensions='Amiga/ARexx Amiga/Exec Archive/Tar Attribute/Handlers attributes autodie AutoLoader autouse B base bignum Carp Compress/Raw/Bzip2 Compress/Raw/Zlib Config/Perl/V constant CPAN CPAN/Meta CPAN/Meta/Requirements CPAN/Meta/YAML Cwd Data/Dumper DB_File Devel/Peek Devel/PPPort Devel/SelfStubber Digest Digest/MD5 Digest/SHA Dumpvalue Encode encoding/warnings Env Errno experimental Exporter ExtUtils/CBuilder ExtUtils/Constant ExtUtils/Install ExtUtils/MakeMaker ExtUtils/Manifest ExtUtils/Miniperl ExtUtils/ParseXS ExtUtils/PL2Bat Fcntl FileCache File/DosGlob File/Fetch File/Find File/Glob File/Path File/Temp Filter/Simple Filter/Util/Call FindBin GDBM_File Getopt/Long Hash/Util Hash/Util/FieldHash HTTP/Tiny I18N/Collate I18N/Langinfo I18N/LangTags if IO IO/Compress IO/Socket/IP IO/Zlib IPC/Cmd IPC/Open3 IPC/SysV JSON/PP lib libnet List/Util Locale/Maketext Locale/Maketext/Simple Math/BigInt Math/BigInt/FastCalc Math/BigRat Math/Complex Memoize MIME/Base64 Module/CoreList Module/Load Module/Load/Conditional Module/Loaded Module/Metadata mro NDBM_File Net/Ping NEXT ODBM_File Opcode Params/Check parent perlfaq PerlIO/encoding PerlIO/mmap PerlIO/scalar PerlIO/via PerlIO/via/QuotedPrint Perl/OSType Pod/Checker Pod/Escapes Pod/Functions Pod/Html podlators Pod/Perldoc Pod/Simple Pod/Usage POSIX re Safe SDBM_File Search/Dict SelfLoader Socket Storable Sys/Hostname Sys/Syslog Term/ANSIColor Term/Cap Term/Complete Term/ReadLine Test Test/Harness Test/Simple Text/Abbrev Text/Balanced Text/ParseWords Text/Tabs Thread/Queue threads Thread/Semaphore threads/shared Tie/File Tie/Hash/NamedCapture Tie/Memoize Tie/RefHash Time/HiRes Time/Local Time/Piece Unicode/Collate Unicode/Normalize version VMS/DCLsym VMS/Filespec VMS/Stdio Win32 Win32API/File Win32CORE XS/APItest XSLoader XS/Typemap ' ksh='' ld='cc' ld_can_script='define' @@ -891,22 +903,22 @@ ldflags_uselargefiles='' ldlibpthname='LD_LIBRARY_PATH' less='less' lib_ext='.a' -libc='libc-2.19.so' +libc='libc-2.31.so' libperl='libperl.a' -libpth='/usr/local/lib /usr/lib/gcc/x86_64-linux-gnu/4.9/include-fixed /usr/include/x86_64-linux-gnu /usr/lib /lib/x86_64-linux-gnu /lib/../lib /usr/lib/x86_64-linux-gnu /usr/lib/../lib /lib' +libpth='/usr/local/lib /usr/lib64/gcc/x86_64-suse-linux/10/include-fixed /usr/lib64/gcc/x86_64-suse-linux/10/../../../../x86_64-suse-linux/lib /usr/lib /lib/../lib64 /usr/lib/../lib64 /lib /lib64 /usr/lib64 /usr/local/lib64' libs='-lpthread -lnsl -lgdbm -ldb -ldl -lm -lcrypt -lutil -lc -lgdbm_compat' -libsdirs=' /usr/lib/x86_64-linux-gnu' +libsdirs=' /usr/lib/../lib64' libsfiles=' libpthread.so libnsl.so libgdbm.so libdb.so libdl.so libm.so libcrypt.so libutil.so libc.so libgdbm_compat.so' -libsfound=' /usr/lib/x86_64-linux-gnu/libpthread.so /usr/lib/x86_64-linux-gnu/libnsl.so /usr/lib/x86_64-linux-gnu/libgdbm.so /usr/lib/x86_64-linux-gnu/libdb.so /usr/lib/x86_64-linux-gnu/libdl.so /usr/lib/x86_64-linux-gnu/libm.so /usr/lib/x86_64-linux-gnu/libcrypt.so /usr/lib/x86_64-linux-gnu/libutil.so /usr/lib/x86_64-linux-gnu/libc.so /usr/lib/x86_64-linux-gnu/libgdbm_compat.so' -libspath=' /usr/local/lib /usr/lib/gcc/x86_64-linux-gnu/4.9/include-fixed /usr/include/x86_64-linux-gnu /usr/lib /lib/x86_64-linux-gnu /lib/../lib /usr/lib/x86_64-linux-gnu /usr/lib/../lib /lib' +libsfound=' /usr/lib/../lib64/libpthread.so /usr/lib/../lib64/libnsl.so /usr/lib/../lib64/libgdbm.so /usr/lib/../lib64/libdb.so /usr/lib/../lib64/libdl.so /usr/lib/../lib64/libm.so /usr/lib/../lib64/libcrypt.so /usr/lib/../lib64/libutil.so /usr/lib/../lib64/libc.so /usr/lib/../lib64/libgdbm_compat.so' +libspath=' /usr/local/lib /usr/lib64/gcc/x86_64-suse-linux/10/include-fixed /usr/lib64/gcc/x86_64-suse-linux/10/../../../../x86_64-suse-linux/lib /usr/lib /lib/../lib64 /usr/lib/../lib64 /lib /lib64 /usr/lib64 /usr/local/lib64' libswanted='cl pthread cl pthread socket inet nsl gdbm dbm db malloc dl ld sun m crypt sec util c cposix posix ucb BSD gdbm_compat' libswanted_uselargefiles='' line='' lint='' lkflags='' ln='ln' -lns='/bin/ln -s' -localtime_r_proto='0' +lns='/usr/bin/ln -s' +localtime_r_proto='REENTRANT_PROTO_S_TS' locincpth='/usr/local/include /opt/local/include /usr/gnu/include /opt/gnu/include /usr/GNU/include /opt/GNU/include' loclibpth='/usr/local/lib /opt/local/lib /usr/gnu/lib /opt/gnu/lib /usr/GNU/lib /opt/GNU/lib' longdblinfbytes='0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0xff, 0x7f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00' @@ -945,7 +957,7 @@ mv='' myarchname='x86_64-linux' mydomain='.yourplace.com' myhostname='yourhost' -myuname='linux barba.rous.org 3.16.0-4-amd64 #1 smp debian 3.16.43-2+deb8u2 (2017-06-26) x86_64 gnulinux ' +myuname='linux lx09 5.8.0-1-default #1 smp tue aug 4 07:30:59 utc 2020 (9bc0044) x86_64 x86_64 x86_64 gnulinux ' n='-n' need_va_copy='define' netdb_hlen_type='size_t' @@ -955,71 +967,72 @@ netdb_net_type='in_addr_t' nm='nm' nm_opt='' nm_so_opt='--dynamic' -nonxs_ext='Archive/Tar Attribute/Handlers AutoLoader B/Debug CPAN CPAN/Meta CPAN/Meta/Requirements CPAN/Meta/YAML Carp Config/Perl/V Devel/SelfStubber Digest Dumpvalue Env Errno Exporter ExtUtils/CBuilder ExtUtils/Constant ExtUtils/Install ExtUtils/MakeMaker ExtUtils/Manifest ExtUtils/Miniperl ExtUtils/ParseXS File/Fetch File/Find File/Path File/Temp FileCache Filter/Simple Getopt/Long HTTP/Tiny I18N/Collate I18N/LangTags IO/Compress IO/Socket/IP IO/Zlib IPC/Cmd IPC/Open3 JSON/PP Locale/Codes Locale/Maketext Locale/Maketext/Simple Math/BigInt Math/BigRat Math/Complex Memoize Module/CoreList Module/Load Module/Load/Conditional Module/Loaded Module/Metadata NEXT Net/Ping Params/Check Perl/OSType PerlIO/via/QuotedPrint Pod/Checker Pod/Escapes Pod/Functions Pod/Html Pod/Parser Pod/Perldoc Pod/Simple Pod/Usage Safe Search/Dict SelfLoader Term/ANSIColor Term/Cap Term/Complete Term/ReadLine Test Test/Harness Test/Simple Text/Abbrev Text/Balanced Text/ParseWords Text/Tabs Thread/Queue Thread/Semaphore Tie/File Tie/Memoize Tie/RefHash Time/Local XSLoader autodie autouse base bignum constant encoding/warnings experimental if lib libnet parent perlfaq podlators version' +nonxs_ext='Archive/Tar Attribute/Handlers autodie AutoLoader autouse base bignum Carp Config/Perl/V constant CPAN CPAN/Meta CPAN/Meta/Requirements CPAN/Meta/YAML Devel/SelfStubber Digest Dumpvalue encoding/warnings Env Errno experimental Exporter ExtUtils/CBuilder ExtUtils/Constant ExtUtils/Install ExtUtils/MakeMaker ExtUtils/Manifest ExtUtils/Miniperl ExtUtils/ParseXS ExtUtils/PL2Bat FileCache File/Fetch File/Find File/Path File/Temp Filter/Simple FindBin Getopt/Long HTTP/Tiny I18N/Collate I18N/LangTags if IO/Compress IO/Socket/IP IO/Zlib IPC/Cmd IPC/Open3 JSON/PP lib libnet Locale/Maketext Locale/Maketext/Simple Math/BigInt Math/BigRat Math/Complex Memoize Module/CoreList Module/Load Module/Load/Conditional Module/Loaded Module/Metadata Net/Ping NEXT Params/Check parent perlfaq PerlIO/via/QuotedPrint Perl/OSType Pod/Checker Pod/Escapes Pod/Functions Pod/Html podlators Pod/Perldoc Pod/Simple Pod/Usage Safe Search/Dict SelfLoader Term/ANSIColor Term/Cap Term/Complete Term/ReadLine Test Test/Harness Test/Simple Text/Abbrev Text/Balanced Text/ParseWords Text/Tabs Thread/Queue Thread/Semaphore Tie/File Tie/Hash/NamedCapture Tie/Memoize Tie/RefHash Time/Local version XSLoader' nroff='nroff' -nvEUformat='"E"' -nvFUformat='"F"' -nvGUformat='"G"' -nv_overflows_integers_at='256.0*256.0*256.0*256.0*256.0*256.0*2.0*2.0*2.0*2.0*2.0' -nv_preserves_uv_bits='53' -nveformat='"e"' -nvfformat='"f"' -nvgformat='"g"' -nvmantbits='52' -nvsize='8' -nvtype='double' +nvEUformat='"LE"' +nvFUformat='"LF"' +nvGUformat='"LG"' +nv_overflows_integers_at='256.0*256.0*256.0*256.0*256.0*256.0*256.0*2.0*2.0*2.0*2.0*2.0*2.0*2.0*2.0' +nv_preserves_uv_bits='64' +nveformat='"Le"' +nvfformat='"Lf"' +nvgformat='"Lg"' +nvmantbits='64' +nvsize='16' +nvtype='long double' o_nonblock='O_NONBLOCK' obj_ext='.o' old_pthread_create_joinable='' optimize='-O2' orderlib='false' osname='linux' -osvers='3.16.0-4-amd64' +osvers='5.8.0-1-default' otherlibdirs=' ' package='perl5' pager='/usr/bin/less -R' passcat='cat /etc/passwd' -patchlevel='27' +patchlevel='33' path_sep=':' perl5='/usr/bin/perl' perl='perl' perl_patchlevel='' perl_static_inline='static __inline__' +perl_thread_local='' perladmin='yourname@yourhost.yourplace.com' perllibs='-lpthread -lnsl -ldl -lm -lcrypt -lutil -lc' -perlpath='/opt/perl/bin/perl5.32.1' +perlpath='/opt/perl/bin/perl5.36.0' pg='pg' phostname='' pidtype='pid_t' -plibpth='/lib/x86_64-linux-gnu/4.9 /lib/x86_64-linux-gnu /lib/../lib /usr/lib/x86_64-linux-gnu/4.9 /usr/lib/x86_64-linux-gnu /usr/lib/../lib /lib /usr/lib' +plibpth='/lib/x86_64-suse-linux/10 /lib/../lib64 /usr/lib/x86_64-suse-linux/10 /usr/lib/../lib64 /lib /usr/lib' pmake='' pr='' prefix='/opt/perl' prefixexp='/opt/perl' -privlib='/opt/perl/lib/5.32.1' -privlibexp='/opt/perl/lib/5.32.1' +privlib='/opt/perl/lib/5.36.0' +privlibexp='/opt/perl/lib/5.36.0' procselfexe='"/proc/self/exe"' ptrsize='8' quadkind='2' quadtype='long' randbits='48' randfunc='Perl_drand48' -random_r_proto='0' +random_r_proto='REENTRANT_PROTO_I_St' randseedtype='U32' ranlib=':' rd_nodata='-1' -readdir64_r_proto='0' -readdir_r_proto='0' +readdir64_r_proto='REENTRANT_PROTO_I_TSR' +readdir_r_proto='REENTRANT_PROTO_I_TSR' revision='5' rm='rm' -rm_try='/bin/rm -f try try a.out .out try.[cho] try..o core core.try* try.core*' +rm_try='/usr/bin/rm -f try try a.out .out try.[cho] try..o core core.try* try.core*' rmail='' run='' runnm='false' sGMTIME_max='67768036191676799' sGMTIME_min='-62167219200' -sLOCALTIME_max='67768036191676799' -sLOCALTIME_min='-62167219125' +sLOCALTIME_max='67768036191673199' +sLOCALTIME_min='-62167220372' sPRIEUldbl='"LE"' sPRIFUldbl='"LF"' sPRIGUldbl='"LG"' @@ -1056,23 +1069,23 @@ shortsize='2' shrpenv='' shsharp='true' sig_count='65' -sig_name='ZERO HUP INT QUIT ILL TRAP ABRT BUS FPE KILL USR1 SEGV USR2 PIPE ALRM TERM STKFLT CHLD CONT STOP TSTP TTIN TTOU URG XCPU XFSZ VTALRM PROF WINCH IO PWR SYS NUM32 NUM33 RTMIN NUM35 NUM36 NUM37 NUM38 NUM39 NUM40 NUM41 NUM42 NUM43 NUM44 NUM45 NUM46 NUM47 NUM48 NUM49 NUM50 NUM51 NUM52 NUM53 NUM54 NUM55 NUM56 NUM57 NUM58 NUM59 NUM60 NUM61 NUM62 NUM63 RTMAX IOT CLD POLL UNUSED ' -sig_name_init='"ZERO", "HUP", "INT", "QUIT", "ILL", "TRAP", "ABRT", "BUS", "FPE", "KILL", "USR1", "SEGV", "USR2", "PIPE", "ALRM", "TERM", "STKFLT", "CHLD", "CONT", "STOP", "TSTP", "TTIN", "TTOU", "URG", "XCPU", "XFSZ", "VTALRM", "PROF", "WINCH", "IO", "PWR", "SYS", "NUM32", "NUM33", "RTMIN", "NUM35", "NUM36", "NUM37", "NUM38", "NUM39", "NUM40", "NUM41", "NUM42", "NUM43", "NUM44", "NUM45", "NUM46", "NUM47", "NUM48", "NUM49", "NUM50", "NUM51", "NUM52", "NUM53", "NUM54", "NUM55", "NUM56", "NUM57", "NUM58", "NUM59", "NUM60", "NUM61", "NUM62", "NUM63", "RTMAX", "IOT", "CLD", "POLL", "UNUSED", 0' -sig_num='0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 6 17 29 31 ' -sig_num_init='0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 6, 17, 29, 31, 0' -sig_size='69' +sig_name='ZERO HUP INT QUIT ILL TRAP ABRT BUS FPE KILL USR1 SEGV USR2 PIPE ALRM TERM STKFLT CHLD CONT STOP TSTP TTIN TTOU URG XCPU XFSZ VTALRM PROF WINCH IO PWR SYS NUM32 NUM33 RTMIN NUM35 NUM36 NUM37 NUM38 NUM39 NUM40 NUM41 NUM42 NUM43 NUM44 NUM45 NUM46 NUM47 NUM48 NUM49 NUM50 NUM51 NUM52 NUM53 NUM54 NUM55 NUM56 NUM57 NUM58 NUM59 NUM60 NUM61 NUM62 NUM63 RTMAX IOT CLD POLL ' +sig_name_init='"ZERO", "HUP", "INT", "QUIT", "ILL", "TRAP", "ABRT", "BUS", "FPE", "KILL", "USR1", "SEGV", "USR2", "PIPE", "ALRM", "TERM", "STKFLT", "CHLD", "CONT", "STOP", "TSTP", "TTIN", "TTOU", "URG", "XCPU", "XFSZ", "VTALRM", "PROF", "WINCH", "IO", "PWR", "SYS", "NUM32", "NUM33", "RTMIN", "NUM35", "NUM36", "NUM37", "NUM38", "NUM39", "NUM40", "NUM41", "NUM42", "NUM43", "NUM44", "NUM45", "NUM46", "NUM47", "NUM48", "NUM49", "NUM50", "NUM51", "NUM52", "NUM53", "NUM54", "NUM55", "NUM56", "NUM57", "NUM58", "NUM59", "NUM60", "NUM61", "NUM62", "NUM63", "RTMAX", "IOT", "CLD", "POLL", 0' +sig_num='0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 6 17 29 ' +sig_num_init='0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 6, 17, 29, 0' +sig_size='68' signal_t='void' -sitearch='/opt/perl/lib/site_perl/5.32.1/x86_64-linux' -sitearchexp='/opt/perl/lib/site_perl/5.32.1/x86_64-linux' +sitearch='/opt/perl/lib/site_perl/5.36.0/x86_64-linux-thread-multi-ld' +sitearchexp='/opt/perl/lib/site_perl/5.36.0/x86_64-linux-thread-multi-ld' sitebin='/opt/perl/bin' sitebinexp='/opt/perl/bin' sitehtml1dir='' sitehtml1direxp='' sitehtml3dir='' sitehtml3direxp='' -sitelib='/opt/perl/lib/site_perl/5.32.1' +sitelib='/opt/perl/lib/site_perl/5.36.0' sitelib_stem='/opt/perl/lib/site_perl' -sitelibexp='/opt/perl/lib/site_perl/5.32.1' +sitelibexp='/opt/perl/lib/site_perl/5.36.0' siteman1dir='/opt/perl/man/man1' siteman1direxp='/opt/perl/man/man1' siteman3dir='/opt/perl/man/man3' @@ -1092,25 +1105,27 @@ socksizetype='socklen_t' sort='sort' spackage='Perl5' spitshell='cat' -srand48_r_proto='0' -srandom_r_proto='0' +srand48_r_proto='REENTRANT_PROTO_I_LS' +srandom_r_proto='REENTRANT_PROTO_I_TS' src='.' ssizetype='ssize_t' +st_dev_sign='1' +st_dev_size='4' st_ino_sign='1' st_ino_size='8' -startperl='#!/opt/perl/bin/perl5.32.1' +startperl='#!/opt/perl/bin/perl5.36.0' startsh='#!/bin/sh' static_ext=' ' stdchar='char' -stdio_base='((fp)->_IO_read_base)' -stdio_bufsiz='((fp)->_IO_read_end - (fp)->_IO_read_base)' -stdio_cnt='((fp)->_IO_read_end - (fp)->_IO_read_ptr)' +stdio_base='((fp)->_base)' +stdio_bufsiz='((fp)->_cnt + (fp)->_ptr - (fp)->_base)' +stdio_cnt='((fp)->_cnt)' stdio_filbuf='' -stdio_ptr='((fp)->_IO_read_ptr)' +stdio_ptr='((fp)->_ptr)' stdio_stream_array='' -strerror_r_proto='0' +strerror_r_proto='REENTRANT_PROTO_B_IBW' submit='' -subversion='1' +subversion='0' sysman='/usr/share/man/man1' sysroot='' tail='' @@ -1125,15 +1140,15 @@ targetsh='/bin/sh' tbl='' tee='' test='test' -timeincl='/usr/include/x86_64-linux-gnu/sys/time.h ' +timeincl='/usr/include/sys/time.h ' timetype='time_t' -tmpnam_r_proto='0' +tmpnam_r_proto='REENTRANT_PROTO_B_B' to=':' touch='touch' tr='tr' trnl='\n' troff='' -ttyname_r_proto='0' +ttyname_r_proto='REENTRANT_PROTO_I_IBW' u16size='2' u16type='unsigned short' u32size='4' @@ -1149,22 +1164,23 @@ uidtype='uid_t' uname='uname' uniq='uniq' uquadtype='unsigned long' -use5005threads='undef' use64bitall='define' use64bitint='define' usecbacktrace='undef' usecrosscompile='undef' +usedefaultstrict='undef' usedevel='define' usedl='define' usedtrace='undef' usefaststdio='undef' -useithreads='undef' +useithreads='define' usekernprocpathname='undef' +uselanginfo='true' uselargefiles='define' -uselongdouble='undef' +uselongdouble='define' usemallocwrap='define' usemorebits='undef' -usemultiplicity='undef' +usemultiplicity='define' usemymalloc='n' usenm='false' usensgetexecutablepath='undef' @@ -1177,7 +1193,7 @@ userelocatableinc='undef' useshrplib='false' usesitecustomize='undef' usesocks='undef' -usethreads='undef' +usethreads='define' usevendorprefix='undef' useversionedarchname='undef' usevfork='false' @@ -1208,20 +1224,21 @@ vendorprefix='' vendorprefixexp='' vendorscript='' vendorscriptexp='' -version='5.32.1' -version_patchlevel_string='version 32 subversion 1' +version='5.36.0' +version_patchlevel_string='version 36 subversion 0' versiononly='define' vi='' xlibpth='/usr/lib/386 /lib/386' +xlocale_needed='undef' yacc='yacc' yaccflags='' zcat='' zip='zip' PERL_REVISION=5 -PERL_VERSION=32 -PERL_SUBVERSION=1 +PERL_VERSION=36 +PERL_SUBVERSION=0 PERL_API_REVISION=5 -PERL_API_VERSION=32 +PERL_API_VERSION=36 PERL_API_SUBVERSION=0 PERL_PATCHLEVEL='' PERL_CONFIG_SH=true diff --git a/gnu/usr.bin/perl/Porting/config_H b/gnu/usr.bin/perl/Porting/config_H index f9d56917f18..80692093f61 100644 --- a/gnu/usr.bin/perl/Porting/config_H +++ b/gnu/usr.bin/perl/Porting/config_H @@ -224,7 +224,7 @@ /* HAS_MBLEN: * This symbol, if defined, indicates that the mblen routine is available - * to find the number of bytes in a multibye character. + * to find the number of bytes in a multibyte character. */ #define HAS_MBLEN /**/ @@ -1239,8 +1239,8 @@ * This symbol contains the ~name expanded version of ARCHLIB, to be used * in programs that are not prepared to deal with ~ expansion at run-time. */ -#define ARCHLIB "/opt/perl/lib/5.32.1/x86_64-linux" /**/ -#define ARCHLIB_EXP "/opt/perl/lib/5.32.1/x86_64-linux" /**/ +#define ARCHLIB "/opt/perl/lib/5.36.0/x86_64-linux" /**/ +#define ARCHLIB_EXP "/opt/perl/lib/5.36.0/x86_64-linux" /**/ /* BIN: * This symbol holds the path of the bin directory where the package will @@ -1293,8 +1293,8 @@ * This symbol contains the ~name expanded version of PRIVLIB, to be used * in programs that are not prepared to deal with ~ expansion at run-time. */ -#define PRIVLIB "/opt/perl/lib/5.32.1" /**/ -#define PRIVLIB_EXP "/opt/perl/lib/5.32.1" /**/ +#define PRIVLIB "/opt/perl/lib/5.36.0" /**/ +#define PRIVLIB_EXP "/opt/perl/lib/5.36.0" /**/ /* SITEARCH: * This symbol contains the name of the private library for this package. @@ -1311,8 +1311,8 @@ * This symbol contains the ~name expanded version of SITEARCH, to be used * in programs that are not prepared to deal with ~ expansion at run-time. */ -#define SITEARCH "/opt/perl/lib/site_perl/5.32.1/x86_64-linux" /**/ -#define SITEARCH_EXP "/opt/perl/lib/site_perl/5.32.1/x86_64-linux" /**/ +#define SITEARCH "/opt/perl/lib/site_perl/5.36.0/x86_64-linux" /**/ +#define SITEARCH_EXP "/opt/perl/lib/site_perl/5.36.0/x86_64-linux" /**/ /* SITELIB: * This symbol contains the name of the private library for this package. @@ -1334,8 +1334,8 @@ * removed. The elements in inc_version_list (inc_version_list.U) can * be tacked onto this variable to generate a list of directories to search. */ -#define SITELIB "/opt/perl/lib/site_perl/5.32.1" /**/ -#define SITELIB_EXP "/opt/perl/lib/site_perl/5.32.1" /**/ +#define SITELIB "/opt/perl/lib/site_perl/5.36.0" /**/ +#define SITELIB_EXP "/opt/perl/lib/site_perl/5.36.0" /**/ #define SITELIB_STEM "/opt/perl/lib/site_perl" /**/ /* PERL_VENDORARCH: @@ -2984,7 +2984,7 @@ /* HAS_MEMMEM: * This symbol, if defined, indicates that the memmem routine is - * available to return a pointer to the start of the first occurance + * available to return a pointer to the start of the first occurrence * of a substring in a memory area (or NULL if not found). */ #define HAS_MEMMEM /**/ @@ -4109,7 +4109,7 @@ * script to make sure (one hopes) that it runs with perl and not * some shell. */ -#define STARTPERL "#!/opt/perl/bin/perl5.32.1" /**/ +#define STARTPERL "#!/opt/perl/bin/perl5.36.0" /**/ /* HAS_STDIO_STREAM_ARRAY: * This symbol, if defined, tells that there is an array @@ -5071,11 +5071,6 @@ * This symbol, if defined, indicates that Perl should be built to * use the interpreter-based threading implementation. */ -/* USE_5005THREADS: - * This symbol, if defined, indicates that Perl should be built to - * use the 5.005-based threading implementation. - * Only valid up to 5.8.x. - */ /* OLD_PTHREADS_API: * This symbol, if defined, indicates that Perl should * be built to use the old draft POSIX threads API. @@ -5085,11 +5080,8 @@ * try to use the various _r versions of library functions. * This is extremely experimental. */ -/*#define USE_5005THREADS / **/ /*#define USE_ITHREADS / **/ -#if defined(USE_5005THREADS) && !defined(USE_ITHREADS) -#define USE_THREADS /* until src is revised*/ -#endif +/*#define USE_THREADS / **/ /*#define OLD_PTHREADS_API / **/ /*#define USE_REENTRANT_API / **/ diff --git a/gnu/usr.bin/perl/Porting/core-cpan-diff b/gnu/usr.bin/perl/Porting/core-cpan-diff index 23ae99ffb33..7ccafcb4837 100644 --- a/gnu/usr.bin/perl/Porting/core-cpan-diff +++ b/gnu/usr.bin/perl/Porting/core-cpan-diff @@ -53,7 +53,8 @@ Usage: $0 [opts] [ -d | -v | -x ] [ -a | module ... ] -d/--diff Display file differences using diff(1), rather than just listing which files have changed. ---diffopts Options to pass to the diff command. Defaults to '-u --binary'. +--diffopts Options to pass to the diff command. Defaults to '-u --binary' + (except on *BSD, where it's just '-u'). -f|force Force download from CPAN of new 02packages.details.txt file (with --crosscheck only). @@ -125,7 +126,10 @@ sub run { if ( $reverse || $use_diff || $diff_opts ); } else { - $diff_opts = '-u --binary' unless defined $diff_opts; + #$diff_opts = '-u --binary' unless defined $diff_opts; + if (! defined $diff_opts) { + $diff_opts = ($^O =~ m/bsd$/i) ? '-u' : '-u --binary'; + }; usage("can't use -f without --crosscheck") if $force; } diff --git a/gnu/usr.bin/perl/Porting/corelist-perldelta.pl b/gnu/usr.bin/perl/Porting/corelist-perldelta.pl index c036a18607f..2b2c1760311 100755 --- a/gnu/usr.bin/perl/Porting/corelist-perldelta.pl +++ b/gnu/usr.bin/perl/Porting/corelist-perldelta.pl @@ -129,7 +129,7 @@ sub latest_two_perl_versions { # The pragmata were found by doing something like: # say for sort grep { $_ eq lc $_ and !exists $Modules{$_}} # keys %{$Module::CoreList::version{'5.019003'}} -# and manually filtering out pragamata that were already covered. +# and manually filtering out pragmata that were already covered. # # It is currently not possible to differentiate between a removed module and a removed # distribution. Therefore, the removed hashref contains every module that has been removed, even if @@ -307,7 +307,7 @@ sub do_update_existing { binmode($out); print $out $text; close $out; - say "The New and Updated Modules and Pragamata sections in $existing have been updated"; + say "The New and Updated Modules and Pragmata sections in $existing have been updated"; say "Please ensure the Removed Modules and Pragmata section is up-to-date"; } @@ -496,7 +496,7 @@ sub do_check { sub sort_items_in_section { my ($section) = @_; - # if we could not parse the module name, it will be uninitalized + # if we could not parse the module name, it will be uninitialized # in sort. This is not a problem as it will just result in these # sections being placed near the beginning of the section no warnings 'uninitialized'; diff --git a/gnu/usr.bin/perl/Porting/corelist.pl b/gnu/usr.bin/perl/Porting/corelist.pl index 2f2e61c52e2..eb84c18b7c9 100755 --- a/gnu/usr.bin/perl/Porting/corelist.pl +++ b/gnu/usr.bin/perl/Porting/corelist.pl @@ -69,10 +69,10 @@ if ($cpan) { warn "Reading the module list from $modlistfile.gz"; open $fh, '-|', "$zcat $modlistfile.gz"; } else { - warn "About to fetch 02packages from ftp.funet.fi. This may take a few minutes\n"; - my $gzipped_content = fetch_url('http://ftp.funet.fi/pub/CPAN/modules/02packages.details.txt.gz'); + warn "About to fetch 02packages from www.cpan.org. This may take a few minutes\n"; + my $gzipped_content = fetch_url('http://www.cpan.org/modules/02packages.details.txt.gz'); unless ($gzipped_content) { - die "Unable to read 02packages.details.txt from either your CPAN mirror or ftp.funet.fi"; + die "Unable to read 02packages.details.txt from either your CPAN mirror or www.cpan.org"; } IO::Uncompress::Gunzip::gunzip(\$gzipped_content, \$content, Transparent => 0) or die "Can't gunzip content: $IO::Uncompress::Gunzip::GunzipError"; @@ -96,6 +96,12 @@ if ($cpan) { find( sub { + if (-d) { + my @parts = File::Spec->splitdir($File::Find::name); + # be careful not to skip inc::latest + return $File::Find::prune = 1 if @parts == 3 and ($parts[-1] eq 'inc' or $parts[-1] eq 't'); + } + /(\.pm|_pm\.PL)$/ or return; /PPPort\.pm$/ and return; my $module = $File::Find::name; @@ -105,7 +111,7 @@ find( $version =~ /\d/ and $version = "'$version'"; # some heuristics to figure out the module name from the file name - $module =~ s{^(lib|cpan|dist|(?:symbian/)?ext|os2/OS2)/}{} + $module =~ s{^(lib|cpan|dist|ext|os2/OS2)/}{} and $1 ne 'lib' and ( $module =~ s{\b(\w+)/\1\b}{$1}, @@ -130,7 +136,6 @@ find( $module_to_file{$module} = $File::Find::name; }, 'os2/OS2', - 'symbian/ext', 'lib', 'ext', 'cpan', @@ -216,7 +221,7 @@ while ( my ( $module, $file ) = each %module_to_file ) { my $meta_YAML_path = "authors/id/$dist"; $meta_YAML_path =~ s/(?:tar\.gz|tar\.bz2|zip|tgz)$/meta/ or die "ERROR: bad meta YAML path: '$meta_YAML_path'"; - my $meta_YAML_url = 'http://ftp.funet.fi/pub/CPAN/' . $meta_YAML_path; + my $meta_YAML_url = 'http://www.cpan.org/' . $meta_YAML_path; if ( -e "$cpan/$meta_YAML_path" ) { $dist_to_meta_YAML{$dist} = parse_cpan_meta(slurp_utf8( $cpan . "/" . $meta_YAML_path )); diff --git a/gnu/usr.bin/perl/Porting/deparse-skips.txt b/gnu/usr.bin/perl/Porting/deparse-skips.txt index 2f2a35fb50b..37573d7e3d1 100644 --- a/gnu/usr.bin/perl/Porting/deparse-skips.txt +++ b/gnu/usr.bin/perl/Porting/deparse-skips.txt @@ -42,7 +42,6 @@ mro/isarev.t mro/isarev_utf8.t op/attrhand.t # Custom attrs ignored; also AH provides none op/caller.t -op/each.t # utf8ness of deparsed strings op/goto.t op/gv.t # glob copy constants op/hexfp.t @@ -52,7 +51,6 @@ op/length.t # utf8ness of deparsed strings op/lexsub.t op/local.t op/lvref.t -op/not.t op/overload_integer.t op/override.t op/pack.t @@ -94,6 +92,10 @@ uni/tie.t uni/universal.t uni/variables.t ../cpan/Archive-Tar/t/03_file.t # constant sub ref: FOO->() + +# Most autodie tests currently fail under Deparse because +# the %^H initialisation values are stringifed refs rather +# than real refs. ../cpan/autodie/t/autodie.t ../cpan/autodie/t/basic_exceptions.t ../cpan/autodie/t/binmode.t @@ -107,6 +109,7 @@ uni/variables.t ../cpan/autodie/t/dbmopen.t ../cpan/autodie/t/eval_error.t ../cpan/autodie/t/exception_class.t +../cpan/autodie/t/exception_nonref.t ../cpan/autodie/t/exceptions.t ../cpan/autodie/t/exec.t ../cpan/autodie/t/filehandles.t @@ -121,6 +124,7 @@ uni/variables.t ../cpan/autodie/t/kill.t ../cpan/autodie/t/lethal.t ../cpan/autodie/t/mkdir.t +../cpan/autodie/t/no-default.t ../cpan/autodie/t/open.t ../cpan/autodie/t/read.t ../cpan/autodie/t/recv.t @@ -134,28 +138,63 @@ uni/variables.t ../cpan/autodie/t/utf8_open.t ../cpan/autodie/t/utime.t ../cpan/autodie/t/version_tag.t + ../cpan/AutoLoader/t/01AutoLoader.t -../cpan/bignum/t/big_e_pi.t + + +# ------------- +# +# The big*/Big* modules generally fail because the code references in +# user-defined hints get stringified when deparsed, e.g. +# +# BEGIN { +# $^H{'binary'} = 'CODE(0x21158a0)'; +# $^H{'float'} = 'CODE(0x1a6ab18)'; +# $^H{'integer'} = 'CODE(0x1a6abc0)'; +# } + ../cpan/bignum/t/bigexp.t ../cpan/bignum/t/bigint.t ../cpan/bignum/t/bignum.t ../cpan/bignum/t/bigrat.t -../cpan/bignum/t/bii_e_pi.t -../cpan/bignum/t/biinfnan.t -../cpan/bignum/t/bir_e_pi.t -../cpan/bignum/t/bninfnan.t -../cpan/bignum/t/brinfnan.t +../cpan/bignum/t/const-bigint.t +../cpan/bignum/t/const-bignum.t +../cpan/bignum/t/const-bigrat.t +../cpan/bignum/t/e_pi-bigint.t +../cpan/bignum/t/e_pi-bignum.t +../cpan/bignum/t/e_pi-bigrat.t +../cpan/bignum/t/import-bigint.t +../cpan/bignum/t/import-bignum.t +../cpan/bignum/t/import-bigrat.t ../cpan/bignum/t/in_effect.t +../cpan/bignum/t/infnan-bigint.t +../cpan/bignum/t/infnan-bignum.t +../cpan/bignum/t/infnan-bigrat.t ../cpan/bignum/t/option_a.t ../cpan/bignum/t/option_l.t ../cpan/bignum/t/option_p.t ../cpan/bignum/t/overrides.t ../cpan/bignum/t/ratopt_a.t -../cpan/bignum/t/scope_f.t -../cpan/bignum/t/scope_i.t -../cpan/bignum/t/scope_r.t -../cpan/Math-BigInt/t/constant.t -../cpan/Math-BigInt/t/const_mbf.t +../cpan/bignum/t/scope-bigint.t +../cpan/bignum/t/scope-bignum.t +../cpan/bignum/t/scope-bigrat.t +../cpan/bignum/t/scope-nested-const.t + +# ------------- + + +# This one does a plan('skip_all') in a BEGIN block, which stops the rest +# of the test file from being compiled +../cpan/ExtUtils-MakeMaker/t/MM_VMS.t + +# see comment above about bignum failures +../cpan/Math-BigInt/t/const-mbf.t +../cpan/Math-BigInt/t/const-mbi.t + +# see comment above about bignum failures +../cpan/Math-BigRat/t/const-mbr.t + + ../cpan/Scalar-List-Utils/t/uniq.t ../cpan/Term-Cap/test.pl ../cpan/Test-Simple/t/Legacy/Builder/carp.t @@ -182,6 +221,9 @@ uni/variables.t ../dist/threads/t/blocks.t ../ext/B/t/b.t ../ext/B/t/optree_constants.t +# for (...) {} currently gets deparsed as for (...) { (); } +# which has a slightly different optree +../ext/B/t/optree_for.t ../ext/B/t/optree_samples.t ../ext/Devel-Peek/t/Peek.t ../ext/IPC-Open3/t/IPC-Open2.t diff --git a/gnu/usr.bin/perl/Porting/epigraphs.pod b/gnu/usr.bin/perl/Porting/epigraphs.pod index 7686f8aac30..018400bf77e 100644 --- a/gnu/usr.bin/perl/Porting/epigraphs.pod +++ b/gnu/usr.bin/perl/Porting/epigraphs.pod @@ -17,6 +17,230 @@ Consult your favorite dictionary for details. =head1 EPIGRAPHS +=head2 v5.35.11 - Marcel Allain and Pierre Souvestre, "Fantômas" + +L + +"Fantômas." + "What did you say?" + "I said: Fantômas." + "And what does that mean?" + "Nothing. . . . Everything!" + "But what is it?" + "Nobody. . . . And yet, yes, it is somebody!" + "And what does the somebody do?" + "Spreads terror!" + +=head2 v5.35.10 - John Connolly, The Killing Kind + +L + +Tante Marie knew the nature of this world. She roamed through it, saw it +for what it was, and understood her place in it, her responsibility to +those who dwelt within it and beyond. Now, slowly, I too have begun to +understand, to recognize a duty to the rest, to those whom I have never +known as much as to those whom I have loved. The nature of humanity, its +essence, is to feel another's pain as one's own, and to act to take that +pain away. There is a nobility in compassion, a beauty in empathy, +a grace in forgiveness. + +=head2 v5.35.9 - Sten Nadolny, The discovery of slowness + +L + +"John's eyes and ears," Dr. Orme wrote to the captain, +"retain every impression for a peculiarly long time. His apparent +slowness of mind and his inertia are nothing but the result of +exaggerated care taken by his brain in contemplating every kind +of detail. His enormous patience..." He crossed out the last phrase. + +=head2 v5.35.8 - Miguel de Cervantes Saavedra, Don Quijote + +L + +Finally, from so little sleeping and so much reading, +his brain dried up and he went completely out of his mind. + +=head2 v5.35.7 - Charles Dickens, Bleak House + +L + +There were two classes of charitable people: +one, the people who did a little and made a great deal of noise; +the other, the people who did a great deal and made no noise at all. + +=head2 v5.35.6 - Hannu Rajaniemi, The Quantum Thief + +L + +"I have to say you were very clever. The chocolate tasted subtly wrong. +He is in the dress, isn't he? His mind. You used the fabber to put it +there. They had just finished the original: you melted it and made a +copy." + +=head2 v5.35.5 - Frank Herbert, Heretics of Dune + +L + +Again, she sent the light beam along the mounded melange. Her attention was +drawn to a strip of the wall above the spice. More words! Still in Chakobsa, +written with a cutter in a fine flowing script, there was another message: + "A REVERENT MOTHER WILL READ MY WORDS" +Something cold settled in Odrade's guts. She moved to her right with the light, +plowing through an empire's ransom in melange. There was more to the message. + "I BEQUEATH TO YOU MY FEAR AND LONELINESS. TO YOU I GIVE THE CERTAINTY THAT +THE BODY AND SOUL OF THE BENE GESSERIT WILL MEET THE SAME FATE AS ALL OTHER +BODIES AND ALL OTHER SOULS". +Another paragraph of the message beckoned to the right of this one. She plowed +through the cloying melange and stopped to read. + "WHAT IS SURVIVAL IF YOU DO NOT SURVIVE AS A WHOLE? ASK THE BENE TLEILAX THAT! +WHAT IF YOU NO LONGER HEAR THE MUSIC OF LIFE? MEMORIES ARE NOT ENOUGH UNLESS +THEY CALL YOU TO NOBLE PURPOSE!" + +=head2 v5.35.4 - Tom Scharpling, "Comet", from Steven Universe + +L + + Some say I have no direction + That I'm a light-speed distraction + That's a knee-jerk reaction + + Still, this is the final frontier + Everything is so clear + To my destiny I steer + + This life in the stars is all I've ever known + Stars and stardust in infinite space is my only home + + But the moment that I hit the stage + Thousands of voices are calling my name + And I know in my heart it's been worth it all of the while + + And as my albums fly off of the shelves + Handing out autographed pics of myself + This life I chose isn't easy but sure is one heck of a ride + + At the moment that I hit the stage + I hear the universe calling my name + And I know deep down in my heart I have nothing to fear + + And as the solar wind blows through my hair, + Knowing I have so much more left to share + A wandering spirit who's tearing its way through the cold atmosphere + + I'll fly like a comet + Soar like a comet + Crash like a comet + I'm just a comet + +=head2 v5.35.3 - Logan Pearsall Smith + +L + +The test of a vocation is the love of the drudgery it involves. + +=head2 v5.35.2 - Freeman Dyson + +L + +There is a great satisfaction in building good tools for other people to use. + +=head2 v5.35.1 - Sam Schube + +L + +His first marriage ended. A new relationship with an old friend +straightened him out. “I realized that I can't live like I was and be +with Naomi,” he said. “I wanted to become a better man for her. At +first. Then it was for myself too.” He started seeing a therapist. There +were limits: He told her he wasn't interested in exploring the part of +him that wanted to do stunts. “I know that needs looking at,” he said. +“But I didn't want to break the machine.” + +It wasn't just about jeopardizing his livelihood, he explained. Doing +stunts “was exciting. It's something that I did with my friends. And I +was decent at it.” It wasn't so much about the stunts themselves, which +were terrifying, as about how completing them made him feel. He loved, +he said, “the exhilaration and relief, once you get on the other side of +the stunt. Or when you come to. You wake up, you're like, ‘Oh, was that +good?’ And they're like, ‘That was great.’ You got a good bit when +there's seven people standing over you, snapping their fingers.” When we +spoke, he still hadn't broached the topic in therapy. “I'll talk about +it eventually,” he said. “It's not something I need to know this second.” + +=head2 v5.35.0 - Miguel de Unamuno + +L + +We should try to be the parents of our future rather than the offspring of our +past. + +=head2 v5.34.1 - Edward Lear, ed. Vivien Noakes, "The Complete Nonsense and Other Verse": Limericks published in "More Nonsense" + +L + + There was a Young Lady whose nose, + Continually prospers and grows; + When it grew out of sight, she exclaimed in a fright, + 'Oh! Farewell to the end of my nose!' + +=head2 v5.34.1-RC2 - Edward Lear, ed. Vivien Noakes, "The Complete Nonsense and Other Verse": Limericks for the 1846 and 1855 editions of "A Book of Nonsense" + +L + + There was an Old Lady whose folly, + Induced her to sit in a holly; + Whereon by a thorn, her dress being torn, + She quickly became melancholy. + +=head2 v5.34.1-RC1 - Edward Lear, ed. Vivien Noakes, "The Complete Nonsense and Other Verse": Additional limericks for the 1861 edition of "A Book of Nonsense" + +L + + There was an Old Person whose habits, + Induced him to feed upon Rabbits; + When he'd eaten eighteen, he turned perfectly green, + Upon which he relinquished those habits. + +=head2 v5.34.0 - Aberjhani + +L + +Our greatest power as nations and individuals is not the ability to employ assault weapons, suicide bombers, and drones to destroy each other. +The greater more creative powers with which we may arm ourselves are grace and compassion sufficient enough to love and save each other. + +=head2 v5.34.0-RC2 - Nelson Mandela, The Long Walk to Freedom + +L + +No one is born hating another person because of the color of his skin, or his background, or his religion. People must learn to hate, and if they can learn to hate, they can be taught to love, for love comes more naturally to the human heart than its opposite. + +=head2 v5.34.0-RC1 - Paul Tremblay, The Cabin at the End of the World + +L + +He’d irrationally hoped he could somehow put off indefinitely the future day on which she would recognize cruelty, ignorance, and injustice were the struts and pillars of the social order, as unavoidable and inevitable as the weather. + +=head2 v5.33.9 - Abraham Lincoln + +L + +Seven minutes ago... we, your forefathers, were brought forth upon a most excellent adventure conceived by our new friends, Bill... and Ted. These two great gentlemen are dedicated to a proposition which was true in my time, just as it's true today. Be excellent to each other! + +=head2 v5.33.8 - David Bowie, "Heroes" + +L + +Tomorrow belongs to those who can hear it coming. + +=head2 v5.33.7 - Johann Wolfgang von Goethe, The Sorrows of Young Werther + +L + +The human race is a monotonous affair. Most people spend the greatest part of +their time working in order to live, and what little freedom remains so fills +them with fear that they seek out any and every means to be rid of it. + =head2 v5.33.6 - Edward R. Murrow L @@ -89,6 +313,21 @@ L + +As the warning bells rang, inquisitive people were peeping into the star +dressing room. Among them were jugglers in bright robes and turbans, a +roller-skater in a knitted cardigan, a comedian with a powdered white +face and a make-up man. The celebrated guest artiste amazed everyone +with his unusually long, superbly cut tail coat and by wearing a black +domino. Even more astounding were the black magician's two companions: +a tall man in checks with an unsteady pince-nez and a fat black cat +which walked into the dressing room on its hind legs and casually sat +down on the divan, blinking in the light of the unshaded lamps round the +make-up mirror. + =head2 v5.32.1-RC1 - Mikhail Bulgakov, trans. Michael Glenny, "The Heart of a Dog" L diff --git a/gnu/usr.bin/perl/Porting/exec-bit.txt b/gnu/usr.bin/perl/Porting/exec-bit.txt index d5c727ce36f..1b3712be839 100644 --- a/gnu/usr.bin/perl/Porting/exec-bit.txt +++ b/gnu/usr.bin/perl/Porting/exec-bit.txt @@ -14,15 +14,20 @@ cpan/autodie/t/chmod.t cpan/CPAN-Meta-YAML/t/tml cpan/Test-Harness/t/source_tests/source.sh cpan/Test-Harness/t/source_tests/source_args.sh +dist/Devel-PPPort/devel/mkapidoc.pl dist/Devel-PPPort/devel/mktodo dist/Devel-PPPort/devel/regenerate dist/Devel-PPPort/devel/scanprov +dist/Devel-PPPort/devel/update_release_date.pl dist/Devel-PPPort/soak installperl installman makedepend.SH metaconfig.SH myconfig.SH +plan9/fndvers +plan9/setup.rc +plan9/uninstall.rc regen/embed.pl regen/feature.pl regen/keywords.pl @@ -37,7 +42,6 @@ Porting/bench.pl Porting/bisect.pl Porting/bisect-example.sh Porting/bisect-runner.pl -Porting/check83.pl Porting/checkAUTHORS.pl Porting/checkURL.pl Porting/checkVERSION.pl @@ -61,6 +65,7 @@ Porting/newtests-perldelta.pl Porting/perlhist_calculate.pl Porting/sort_perldiag.pl Porting/sync-with-cpan +Porting/updateAUTHORS.pl Porting/valgrindpp.pl Cross/generate_config_sh Cross/warp diff --git a/gnu/usr.bin/perl/Porting/how_to_write_a_perldelta.pod b/gnu/usr.bin/perl/Porting/how_to_write_a_perldelta.pod index 1934b7484f3..f221d75ac7e 100644 --- a/gnu/usr.bin/perl/Porting/how_to_write_a_perldelta.pod +++ b/gnu/usr.bin/perl/Porting/how_to_write_a_perldelta.pod @@ -8,13 +8,20 @@ This is intended as a guide for how to write a perldelta. There has never been a formal specification - the working rule is "fake up a document that looks something close to the existing perldeltas". So if it's unclear how to do something, see if it's been done before, and if the approach works -there, steal it. +there, steal it. (L and L are both quite +lengthy and contain good examples for many of the perldelta sections.) -=head2 Template +=head2 Template Automation -Note there is a file F which contains a -skeleton version of a perldelta.pod file, which should normally be copied -in at the start of a new release. +Note that F contains a skeleton version of +a perldelta.pod file. Following the steps in the Release Manager's Guide +(F) usually ensures hassle-free +rotation of the most recently completed perldelta.pod and preparation of +a fresh new document ready for the next release. + +The skeleton document also contains inline hints on how to prepare the +final perldelta.pod. (These hints should be removed in turn as each section +of the final perldelta.pod is completed.) =head2 Style @@ -39,10 +46,9 @@ Be consistent in how bugs are referenced. One style is =over 4 -=item rt.perl.org +=item GitHub -C inline, but enclose in square brackets after a sentence. -C<[perl #43010]>. This mirrors how rt.perl.org subject lines appear. +C<[GH #12345]> can be used to reference both Issues and Pull Requests. =item rt.cpan.org @@ -94,14 +100,38 @@ For the start of a new stable branch, follows this formula: This document describes differences between the 5.10.0 release and the 5.12.0 release. -Clearly this sets the scope of which changes are to be summarised in the rest -of the document. +This clearly sets the scope of which changes are to be summarized in the +rest of the document. + +For all releases, a second paragraph points to the previous perldelta: + + If you are upgrading from an earlier release such as 5.rXXX.aXXX, + first read perl5XXXdelta, which describes differences between + 5.rXXX.aXXX and 5.sXXX.bXXX. =item Notice There was a I section in L, to carry an important notice. +=item Core Enhancements + +New core language features go here. Summarize user-visible core language +enhancements. Particularly prominent performance optimisations could go +here, but most should go in the L section. + +Feature inside modules (pure-Perl and XS) go in L + +=item Security + +Any security-related notices go here. In particular, any security +vulnerabilities closed should be noted here rather than in the +"Selected Bug Fixes" section. + +L has multiple such examples, as well as +a useful accompanying paragraph outlining the known attack +vectors / requirements for the vulnerabilities to be exploitable. + =item Incompatible Changes For a release on a stable branch, this section aspires to be @@ -109,20 +139,20 @@ For a release on a stable branch, this section aspires to be There are no changes intentionally incompatible with 5.10.3. If any exist, they are bugs and reports are welcome. -=item Core Enhancements +Otherwise, changes should be listed as =head2 entries. -New core language features go here. Summarise user-visible core language -enhancements. Particularly prominent performance optimisations could go -here, but most should go in the L section. +=item Deprecations -Feature inside modules (pure-Perl and XS) go in L +Add any new known deprecations (features, syntax, modules) here. -=item New Platforms +A I subsection can be used to foreshadow planned removal +of core modules in a future release. Modules that were actually removed +in this release should go in the "Modules and Pragmata" section. -List any platforms that this version of perl compiles on, that previous -versions did not. These will either be enabled by new files in the F -directories, or new subdirectories and F files at the top level of the -source tree. +=item Performance Enhancements + +Changes which enhance performance without changing behaviour go here. There +may well be none in a stable release. =item Modules and Pragmata @@ -134,7 +164,7 @@ have a F file that could be cribbed. Whilst this section could be built by incrementally working through change descriptions applying to files, this is prone to error. It's better to -collate changes by module, and then summarise all changes to a module as a +collate changes by module, and then summarize all changes to a module as a group. If Module::CoreList has been updated, then F @@ -142,8 +172,7 @@ will automatically update two sections in F: * New Modules and Pragmata * Updated Modules and Pragmata - -(Currently, it does not update the Removed Modules and Pragmata section.) + * Removed Modules and Pragmata Each section will have stub entries following a template like this: @@ -158,16 +187,11 @@ added by hand. A more adventurous enhancement would be to automate grabbing the changelogs for dual lived modules. For each of them, grab the relevant changes files from CPAN for the old and new versions, and if the old one is -a strict subset of the new one, use the extra lines as a basis for summarising. +a strict subset of the new one, use the extra lines as a basis for summarizing. (And if not, experiment with using F to get the relevant part of changelog for the particular file in core.) -=item Utility Changes - -Changes to installed programs such as F and F go here. Most -of these are built within the directory F. - =item New Documentation Changes which create B files in F go here. @@ -231,57 +255,77 @@ Write out a block of text starting roughly Changes which significantly change existing files in F go here. Any changes to F should go in -L. - -=item Performance Enhancements +L or L. -Changes which enhance performance without changing behaviour go here. There -may well be none in a stable release. - -=item Installation and Configuration Improvements +=item New Diagnostics -Changes to F, F, F, and analogous tools -go here. +New warnings emitted by the core's C code go here. -=item Selected Bug Fixes +=item Changed Diagnostics -Important bug fixes in the core language are summarised here. -Bug fixes in files in F and F are best summarised in -L. +Changed warnings emitted by the core's C code go here. -=item New or Changed Diagnostics +=item Utility Changes -New or changed warnings emitted by the core's C code go here. +Changes to installed programs such as F and F go here. Most +of these are built within the directory F. -=item Changed Internals +=item Configuration and Compilation -Changes which affect the interface available to C code go here. +Changes to F, F, F, and analogous tools +go here. -=item New Tests +=item Testing Changes which create B files in F go here. Changes to existing files -in F aren't worth summarising, although the bugs that they represent +in F aren't worth summarizing, although the bugs that they represent may be. Autogenerate this section by running something like this: # perl newtests-perldelta.pl v5.11.1 HEAD +=item Platform Support + +Any changes specific to a particular platform. VMS and Win32 are the usual +stars here. It's probably best to group changes under the same section layout +as the main perldelta. + +=item New Platforms + +List any platforms that this version of perl compiles on, that previous +versions did not. These will either be enabled by new files in the F +directories, or new subdirectories and F files at the top level of the +source tree. + +=item Discontinued Platforms + +List any platforms that this version of perl no longer compiles on. The +reverse of the advice above applies - look for removed hints or README files. + +=item Platform-Specific Notes + +Changes of note to specific platforms go here. + +=item Internal Changes + +Changes which affect the interface available to C code go here. + +=item Selected Bug Fixes + +Important bug fixes in the core language are summarized here. +Bug fixes in files in F and F are best summarized in +L. + =item Known Problems Descriptions of platform agnostic bugs we know we can't fix go here. Any tests that had to be Ced for the release would be noted here, unless they were specific to a particular platform (see below). -=item Deprecations - -Add any new known deprecations here. +=item Errata From Previous Releases -=item Platform Specific Notes - -Any changes specific to a particular platform. VMS and Win32 are the usual -stars here. It's probably best to group changes under the same section layout -as the main perldelta. +XXXXXXXXXX TODO =item Obituary @@ -298,6 +342,10 @@ Generate this with: This doesn't usually need to be changed from the previous perldelta. +=item Give Thanks + +This doesn't usually need to be changed from the previous perldelta. + =item SEE ALSO This doesn't usually need to be changed from the previous perldelta. diff --git a/gnu/usr.bin/perl/Porting/make_modlib_cpan.pl b/gnu/usr.bin/perl/Porting/make_modlib_cpan.pl deleted file mode 100644 index 39f4ff97519..00000000000 --- a/gnu/usr.bin/perl/Porting/make_modlib_cpan.pl +++ /dev/null @@ -1,90 +0,0 @@ -#!perl -# -# This program generates the list of registered CPAN sites in perlmodlib.PL -# -use strict; -use warnings; -use 5.14.0; -use autodie; -use HTTP::Tiny; -use JSON::PP; - -$|=1; - -my $http = HTTP::Tiny->new; - -my $url = 'http://www.cpan.org/indices/mirrors.json'; - -my $response = $http->get($url); - -unless ( $response->{success} ) { - die "Error downloading $url"; -} - -die "No content" unless $response->{content}; - -my $json = JSON::PP->new->utf8; -my $mirrors = $json->decode( $response->{content} ); -my %sorted; -my @rsync; - -foreach my $mirror ( sort { $a->{continent} cmp $b->{continent} || $a->{country} cmp $b->{country} } @{ $mirrors } ) { - if ( $mirror->{country} eq 'United States' ) { - push @{ $sorted{ $mirror->{continent} }{ $mirror->{country} }{ $mirror->{region} } }, $mirror; - } - else { - push @{ $sorted{ $mirror->{continent} }{ $mirror->{country} } }, $mirror; - } -} - -say 'Registered CPAN sites'; -say ''; -say '=for maintainers'; -say 'Generated by Porting/make_modlib_cpan.pl'; -say ''; - -foreach my $continent ( sort { $a cmp $b } keys %sorted ) { - say "=head2 $continent"; - say ''; - say '=over 4'; - say ''; - foreach my $country ( sort { $a cmp $b } keys %{ $sorted{ $continent } } ) { - say "=item $country"; - say ''; - if ( $country eq 'United States' ) { - say '=over 8'; - say ''; - foreach my $state ( sort { $a cmp $b } keys %{ $sorted{ $continent }{ $country } } ) { - say "=item $state"; - say ''; - foreach my $mirror ( @{ $sorted{ $continent }{ $country }{ $state } } ) { - say " " . $mirror->{http} if $mirror->{http}; - say " " . $mirror->{ftp} if $mirror->{ftp}; - push @rsync, $mirror->{rsync} if $mirror->{rsync}; - } - say ''; - } - say '=back'; - say ''; - } - else { - foreach my $mirror ( @{ $sorted{ $continent }{ $country } } ) { - say " " . $mirror->{http} if $mirror->{http}; - say " " . $mirror->{ftp} if $mirror->{ftp}; - push @rsync, $mirror->{rsync} if $mirror->{rsync}; - } - say ''; - } - } - say '=back'; - say ''; -} - -say '=head2 RSYNC Mirrors'; -say ''; - -foreach my $rsync ( @rsync ) { - say "\t\t$rsync"; -} - -say ''; diff --git a/gnu/usr.bin/perl/Porting/makemeta b/gnu/usr.bin/perl/Porting/makemeta index 760377e060e..1cd68e32870 100644 --- a/gnu/usr.bin/perl/Porting/makemeta +++ b/gnu/usr.bin/perl/Porting/makemeta @@ -18,7 +18,29 @@ my $opts = { }; my %switches; -getopts('byj', \%switches); +getopts('nbyj', \%switches); + +=head1 SYNOPSIS + + ./perl -Ilib Porting/makemeta + +=head1 OPTIONS + +=item B<-y> + +Update only META.yml + +The default is to update both, META.yml and META.json + +=item B<-n> + +Don't update any files, exit with 1 if changes would be made + +=item B<-b> + +No-op, kept for historical purposes + +=cut my @metafiles; if ( $switches{y} ) { @@ -62,6 +84,7 @@ my $distmeta = { use lib "Porting"; use File::Basename qw( dirname ); use CPAN::Meta; +use File::Spec; BEGIN { # Get function prototypes @@ -74,7 +97,10 @@ my @CPAN = grep { $Modules{$_}{CPAN} } keys %Modules; my @files = ('autodoc.pl', 'lib/unicore/mktables', 'TestInit.pm', 'Porting/Maintainers.pm', 'Porting/perldelta_template.pod', map { get_module_files($_) } @CPAN); -my @dirs = ('cpan', 'win32', 'lib/perl5db', grep { -d $_ && $_ !~ /^cpan/ } map { get_module_pat($_) } @CPAN); +my @extt = map { my $t = File::Spec->catdir($_, "t"); + -d $t ? ( $_ . "t" ) : () } + grep { /^ext\b/ } split ' ', $Modules{_PERLLIB}{FILES}; +my @dirs = ('cpan', 'win32', 'lib/perl5db', @extt, grep { -d $_ && $_ !~ /^cpan/ } map { get_module_pat($_) } @CPAN); my %dirs; @dirs{@dirs} = (); @@ -103,9 +129,19 @@ $distmeta->{no_index}->{directory} = \@dirs; my $meta = CPAN::Meta->create( $distmeta ); foreach my $file ( @metafiles ) { - my $fh = open_new($file); - print $fh $meta->as_string( $opts->{$file} ); - close_and_rename($fh); + my $new = $meta->as_string( $opts->{$file} ); + if( $switches{n} ) { + open my $fh, '<:raw', $file; + local $/; + my $old = <$fh>; + if( $old ne $new ) { + exit 1; + } + } else { + my $fh = open_new($file); + print $fh $new; + close_and_rename($fh); + } } exit 0; diff --git a/gnu/usr.bin/perl/Porting/makerel b/gnu/usr.bin/perl/Porting/makerel index 165c8cd32ab..03652aaa93a 100644 --- a/gnu/usr.bin/perl/Porting/makerel +++ b/gnu/usr.bin/perl/Porting/makerel @@ -1,4 +1,7 @@ -#!/usr/bin/perl -w +#!/usr/bin/perl + +use strict; +use warnings; # A tool to build a perl release tarball # Very basic but functional - if you're on a unix system. @@ -10,8 +13,8 @@ # folder so that Cygwin's 'find' command is found in preference to the Windows # 'find' command. In addition to the commands installed by default, your Cygwin # installation will need to contain at least the 'cpio' and '7z' commands. -# Finally, ensure that the 'awk', 'shasum' (if you have it) and '7z' commands -# are copies of 'gawk.exe', 'sha1sum.exe' and 'lib\p7zip\7z.exe' respectively, +# Finally, ensure that the 'awk' and '7z' commands +# are copies of 'gawk.exe' and 'lib\p7zip\7z.exe' respectively, # rather than the links to them that only work in a Cygwin bash shell which # they are by default. # @@ -24,6 +27,7 @@ use ExtUtils::Manifest qw(fullcheck); $ExtUtils::Manifest::Quiet = 1; use Getopt::Std; +use Digest::SHA; $|=1; @@ -36,13 +40,19 @@ usage: $0 [ -r rootdir ] [-s suffix ] [ -x ] [ -n ] in patchlevel.h (or blank, if none) -x make a .xz file in addition to a .gz file -n do not make any tarballs, just the directory + -c cleanup perform a cleanup before building: clean git repo and target + directory/tarballs + -e Make the outputs be translated into EBCDIC. (They can then + be downloaded directly to an EBCDIC platform without needing + any further translation.) EOF my %opts; -getopts('xnr:s:', \%opts) or usage; +getopts('exncr:s:', \%opts) or usage; + @ARGV && usage; -$relroot = defined $opts{r} ? $opts{r} : ".."; +my $relroot = defined $opts{r} ? $opts{r} : ".."; die "Must be in root of the perl source tree.\n" unless -f "./MANIFEST" and -f "patchlevel.h"; @@ -52,11 +62,11 @@ my @patchlevel_h = ; close PATCHLEVEL; my $patchlevel_h = join "", grep { /^#\s*define/ } @patchlevel_h; print $patchlevel_h; -$revision = $1 if $patchlevel_h =~ /PERL_REVISION\s+(\d+)/; -$patchlevel = $1 if $patchlevel_h =~ /PERL_VERSION\s+(\d+)/; -$subversion = $1 if $patchlevel_h =~ /PERL_SUBVERSION\s+(\d+)/; +my $revision = $1 if $patchlevel_h =~ /PERL_REVISION\s+(\d+)/; +my $patchlevel = $1 if $patchlevel_h =~ /PERL_VERSION\s+(\d+)/; +my $subversion = $1 if $patchlevel_h =~ /PERL_SUBVERSION\s+(\d+)/; die "Unable to parse patchlevel.h" unless $subversion >= 0; -$vers = sprintf("%d.%d.%d", $revision, $patchlevel, $subversion); +my $vers = sprintf("%d.%d.%d", $revision, $patchlevel, $subversion); # fetch list of local patches my (@local_patches, @lpatch_tags, $lpatch_tags); @@ -66,16 +76,18 @@ my (@local_patches, @lpatch_tags, $lpatch_tags); @lpatch_tags = map { /^\s*,"(\w+)/ } @local_patches; $lpatch_tags = join "-", @lpatch_tags; -$perl = "perl-$vers"; -$reldir = "$perl"; +my $perl = "perl-$vers"; +my $reldir = "$perl"; $lpatch_tags = $opts{s} if defined $opts{s}; $reldir .= "-$lpatch_tags" if $lpatch_tags; print "\nMaking a release for $perl in $relroot/$reldir\n\n"; +cleanup($relroot, $reldir) if $opts{c}; + print "Cross-checking the MANIFEST...\n"; -($missfile, $missentry) = fullcheck(); +my ($missfile, $missentry) = fullcheck(); @$missentry = grep {$_ !~ m!^\.(?:git|github|mailmap)! and $_ !~ m!(?:/|^)\.gitignore!} @$missentry; if (@$missfile ) { @@ -100,40 +112,138 @@ print "\n"; # VMS no longer has hardcoded version numbers descrip.mms print "Creating $relroot/$reldir release directory...\n"; -die "$relroot/$reldir release directory already exists\n" if -e "$relroot/$reldir"; -die "$relroot/$reldir.tar.gz release file already exists\n" if -e "$relroot/$reldir.tar.gz"; +die "$relroot/$reldir release directory already exists [consider using -c]\n" if -e "$relroot/$reldir"; +die "$relroot/$reldir.tar.gz release file already exists [consider using -c]\n" if -e "$relroot/$reldir.tar.gz"; +die "$relroot/$reldir.tar.xz release file already exists [consider using -c]\n" if $opts{x} && -e "$relroot/$reldir.tar.xz"; mkdir("$relroot/$reldir", 0755) or die "mkdir $relroot/$reldir: $!\n"; print "\n"; print "Copying files to release directory...\n"; # ExtUtils::Manifest maniread does not preserve the order -$cmd = "awk '{print \$1}' MANIFEST | cpio -pdm $relroot/$reldir"; +my $cmd = "awk '{print \$1}' MANIFEST | cpio -pdm $relroot/$reldir"; system($cmd) == 0 or die "$cmd failed"; print "\n"; chdir "$relroot/$reldir" or die $!; - -print "Setting file permissions...\n"; -system("find . -type f -print | xargs chmod 0444"); -system("find . -type d -print | xargs chmod 0755"); my @exe = map { my ($f) = split; glob($f) } grep { $_ !~ /\A#/ && $_ !~ /\A\s*\z/ } map { split "\n" } do { local (@ARGV, $/) = 'Porting/exec-bit.txt'; <> }; +if ($opts{e}) { + require './regen/charset_translations.pl'; + + # Translation tables, so far only to 1047 + my @charset = grep { /1047/ } get_supported_code_pages(); + + my $charset = $charset[0]; + my $a2e = get_a2n($charset); + + die "$0 must be run on an ASCII platform" if ord("A") != 65; + + print "Translating to EBCDIC...\n"; + + open my $mani_fh, "<", "MANIFEST" or die "Can't read copied MANIFEST: $!"; + my @manifest = <$mani_fh>; # Slurp in whole thing before the file gets trashed + close $mani_fh or die "Couldn't close MANIFEST: $!"; + while (defined ($_ = shift @manifest)) { + chomp; + my $file = $_ =~ s/\s.*//r; # Rmv description to get just the file + # name + + local $/; # slurp mode + open my $fh, "+<:raw", $file or die "Can't read copied $file: $!"; + my $text = <$fh>; + my $xlated = ""; + my $utf16_high = 0; + my $utf16_low = 0; + + my $potential_BOM = substr($text, 0, 2); + if ($potential_BOM eq "\xFE\xFF") { + $utf16_high = 0; + $utf16_low = 1; + print STDERR "$file is UTF-16BE\n"; + } + elsif ($potential_BOM eq "\xFF\xFE") { + $utf16_high = 1; + $utf16_low = 0; + print STDERR "$file is UTF-16LE\n"; + } + + if ($utf16_high || $utf16_low) { + my $len = length $text; + die "Odd length in UTF-16 files: $file" if $len % 2; + + # Look 2 bytes at a time + for (my $i = 0; $i < $len; $i+=2) { + my $cur = substr($text, $i, 2); + + # If the code point's high byte is 0, it means the code point + # itself is 00-FF, so want native value of it. + if (substr($cur, $utf16_high, 1) eq "\0") { + + # Just substitute the translated native value + my $low_byte = substr($cur, $utf16_low, 1); + $low_byte = chr $a2e->[ord $low_byte]; + substr($cur, $utf16_low, 1) = $low_byte; + } + + $xlated .= $cur; + } + } + elsif (-B $file) { # Binary files aren't translated + print STDERR "$file is binary\n"; + close $fh or die "Couldn't close $file: $!"; + next; + } + else { + if ( ! utf8::decode($text) + || $text =~ / ^ [[:ascii:][:cntrl:]]* $ /x) + { + # Here, either $text isn't legal UTF-8; or it is, but it + # consists entirely of one of the 160 ASCII and control + # characters whose EBCDIC representation is the same whether + # UTF-EBCDIC or not. This means we just translate + # byte-by-byte from Latin1 to EBCDIC. + $xlated = ($text =~ s/(.)/chr $a2e->[ord $1]/rsge); + } + else { + + # Here, $text is legal UTF-8, and the representation of some + # character(s) in it it matters if is encoded in UTF-EBCDIC or + # not. Also, the decode caused $text to now be viewed as + # UTF-8 characters instead of the input bytes. We convert to + # UTF-EBCDIC. + $xlated = ($text =~ s/(.)/cp_2_utfbytes(ord $1, $charset)/rsge); + } + } + + # Overwrite the file with the translation + truncate $fh, 0; + seek $fh, 0, 0; + print $fh $xlated; + + close $fh or die "Couldn't close $file: $!"; + } +} + +print "Setting file permissions...\n"; +system("find . -type f -print | xargs chmod 0444"); +system("find . -type d -print | xargs chmod 0755"); + system("chmod +x @exe") == 0 or die "system: $!"; +# MANIFEST may be resorted, so needs to be writable my @writables = qw( - NetWare/config_H.wc - NetWare/Makefile feature.h lib/feature.pm keywords.h keywords.c + MANIFEST opcode.h opnames.h pp_proto.h @@ -143,8 +253,6 @@ my @writables = qw( overload.inc overload.h mg_vtable.h - perlapi.h - perlapi.c dist/Devel-PPPort/module2.c dist/Devel-PPPort/module3.c cpan/autodie/t/touch_me @@ -156,7 +264,6 @@ my @writables = qw( lib/warnings.pm win32/GNUmakefile win32/Makefile - win32/makefile.mk win32/config_H.gc win32/config_H.vc uconfig.h @@ -180,21 +287,30 @@ exit if $opts{n}; my $src = (-e $perl) ? $perl : 'perl'; # 'perl' in maint branch -print "Checking if you have 7z...\n"; -my $output_7z = `7z 2>&1`; -my $have_7z = defined $output_7z && $output_7z =~ /7-Zip/; +my $output_7z; +my $have_7z; +if (! $opts{e}) { + print "Checking if you have 7z...\n"; + $output_7z = `7z 2>&1`; + $have_7z = defined $output_7z && $output_7z =~ /7-Zip/; +} print "Checking if you have advdef...\n"; my $output_advdef = `advdef --version 2>&1`; my $have_advdef = defined $output_advdef && $output_advdef =~ /advancecomp/; -if ($have_7z) { +if (! $opts{e} && $have_7z) { print "Creating and compressing the tar.gz file with 7z...\n"; $cmd = "tar cf - $reldir | 7z a -tgzip -mx9 -bd -si $reldir.tar.gz"; system($cmd) == 0 or die "$cmd failed"; } else { print "Creating and compressing the tar.gz file...\n"; - $cmd = "tar cf - $reldir | gzip --best > $reldir.tar.gz"; + my $extra_opts = ""; + if ($opts{e}) { + print "(Using ustar format since is for an EBCDIC box)\n"; + $extra_opts = ' --format=ustar'; + } + $cmd = "tar cf - $extra_opts $reldir | gzip --best > $reldir.tar.gz"; system($cmd) == 0 or die "$cmd failed"; if ($have_advdef) { print "Recompressing the tar.gz file with advdef...\n"; @@ -214,10 +330,45 @@ print "\n"; system("ls -ld $perl*"); print "\n"; -my $null = $^O eq 'MSWin32' ? 'NUL' : '/dev/null'; -for my $sha (qw(sha1 shasum sha1sum)) { - if (`which $sha 2>$null`) { - system("$sha $perl*.tar.*"); - last; +my @files = glob "'$perl*.tar.*'"; +for my $file (@files) { + my $sha = Digest::SHA->new('sha256'); + $sha->addfile($file, 'b'); + print $sha->hexdigest . " $file\n"; +} + +sub cleanup { + my ( $relroot, $reldir ) = @_; + + require File::Path; + + my @cmds = ( + [ qw{make distclean} ], + [ qw{git clean -dxf} ], + ); + + foreach my $cmd (@cmds) { + print join( ' ', "Running:", @$cmd, "\n" ); + system @$cmd; + die "fail to run ".(join(' ', @$cmd) ) unless $? == 0; + } + + if ( -d "$relroot/$reldir" ) { + print "Removing directory $relroot/$reldir\n"; + File::Path::rmtree("$relroot/$reldir"); + } + + # always clean both + my @files = ( "$relroot/$reldir.tar.gz", "$relroot/$reldir.tar.xz" ); + + foreach my $f ( @files ) { + next unless -f $f; + print "Removing file '$f'\n"; + unlink($f); } + + return; + } + +1; diff --git a/gnu/usr.bin/perl/Porting/perldelta_template.pod b/gnu/usr.bin/perl/Porting/perldelta_template.pod index ffb7175d8ec..f0a104866e8 100644 --- a/gnu/usr.bin/perl/Porting/perldelta_template.pod +++ b/gnu/usr.bin/perl/Porting/perldelta_template.pod @@ -403,7 +403,7 @@ died, add a short obituary here. XXX Generate this with: - perl Porting/acknowledgements.pl v5.32.1..HEAD + perl Porting/acknowledgements.pl v5.36.0..HEAD =head1 Reporting Bugs diff --git a/gnu/usr.bin/perl/Porting/perlhist_calculate.pl b/gnu/usr.bin/perl/Porting/perlhist_calculate.pl index 29a19a62cb9..d62934e76dc 100644 --- a/gnu/usr.bin/perl/Porting/perlhist_calculate.pl +++ b/gnu/usr.bin/perl/Porting/perlhist_calculate.pl @@ -143,7 +143,7 @@ sub calc_longtable { emit Configure => $configure_size, 1; - foreach my $dir (qw(Cross djgpp emacs h2pl hints NetWare os2 plan9 Porting qnx symbian utils vms vos win32)) { + foreach my $dir (qw(Cross djgpp emacs h2pl hints os2 plan9 Porting qnx symbian utils vms vos win32)) { calc_dir($dir); } } diff --git a/gnu/usr.bin/perl/Porting/pod_lib.pl b/gnu/usr.bin/perl/Porting/pod_lib.pl index 1098074f328..8f8ebf2ffe9 100644 --- a/gnu/usr.bin/perl/Porting/pod_lib.pl +++ b/gnu/usr.bin/perl/Porting/pod_lib.pl @@ -176,28 +176,56 @@ sub write_or_die { =item * Purpose -Verify that a file contains exactly one contiguous run of lines which matches -the passed in pattern. Cs if the pattern is not found, or found in -more than one place. +Verify that a makefile or makefile constructor contains exactly one contiguous +run of lines which matches a given pattern. Cs if the pattern is not +found, or found in more than one place. + +By "makefile or makefile constructor" we mean a file which is one of the +right-hand values in this list of key-value pairs: + + manifest => 'MANIFEST', + vms => 'vms/descrip_mms.template', + nmake => 'win32/Makefile', + gmake => 'win32/GNUmakefile', + podmak => 'win32/pod.mak', + unix => 'Makefile.SH', + +(Currently found in C<%Targets> in F.) =item * Arguments =over 4 -=item * Name of file +=item * Name of target + +String holding the key of one element in C<%Targets> in F. =item * Contents of file +String holding slurped contents of the file named in the value of the element +in C<%Targets> in F named in the first argument. + =item * Pattern of interest +Compiled regular expression pertinent to a particular makefile constructor. + =item * Name to report on error +String holding description. + =back =item * Return Value The contents of the file, with C substituted for the pattern. +=item * Example (drawn from F C): + + my $makefile_SH = slurp_or_die('./Makefile.SH'); + my $re = qr/some\s+pattern/; + my $makefile_SH_out = + verify_contiguous('unix', $makefile_SH, $re, 'copy rules'); + =back =cut @@ -405,7 +433,7 @@ sub __prime_state { my $filename = "pod/$source"; my $contents = slurp_or_die($filename); my @want = - $contents =~ /perldelta - what is new for perl v(5)\.(\d+)\.(\d+)\r?\n/; + $contents =~ /perldelta - what is new for perl v(\d+)\.(\d+)\.(\d+)\r?\n/; die "Can't extract version from $filename" unless @want; my $delta_leaf = join '', 'perl', @want, 'delta'; $state{delta_target} = "$delta_leaf.pod"; @@ -521,6 +549,8 @@ sub __prime_state { =item * Purpose +Create a data structure holding information about files containing text in POD format. + =item * Arguments List of one or more arguments. @@ -565,6 +595,14 @@ information about various types of POD files. 'copies' => { # patch version perldelta => minor version perldelta } +=item * Comment + +Instances where this subroutine is used may be found in these files: + + pod/buildtoc + Porting/new-perldelta.pl + Porting/pod_rules.pl + =back =cut diff --git a/gnu/usr.bin/perl/Porting/pod_rules.pl b/gnu/usr.bin/perl/Porting/pod_rules.pl index 2ba023ba7c9..d10c669c4ae 100644 --- a/gnu/usr.bin/perl/Porting/pod_rules.pl +++ b/gnu/usr.bin/perl/Porting/pod_rules.pl @@ -18,14 +18,12 @@ if (ord("A") == 193) { # --build-all tries to build everything # --build-foo updates foo as follows # --showfiles shows the files to be changed -# --test exit if perl.pod, MANIFEST are consistent, and regenerated -# files are up to date, die otherwise. +# --tap emit TAP (testing) output describing the state of the pod files %Targets = ( manifest => 'MANIFEST', vms => 'vms/descrip_mms.template', nmake => 'win32/Makefile', - dmake => 'win32/makefile.mk', gmake => 'win32/GNUmakefile', podmak => 'win32/pod.mak', unix => 'Makefile.SH', @@ -166,7 +164,6 @@ sub do_nmake { } # shut up used only once warning -*do_dmake = *do_dmake = \&do_nmake; *do_gmake = *do_gmake = \&do_nmake; sub do_podmak { diff --git a/gnu/usr.bin/perl/Porting/pumpkin.pod b/gnu/usr.bin/perl/Porting/pumpkin.pod index 94c8f0e4c56..f11fa985240 100644 --- a/gnu/usr.bin/perl/Porting/pumpkin.pod +++ b/gnu/usr.bin/perl/Porting/pumpkin.pod @@ -101,12 +101,11 @@ always match the regular expression: C<$1> in the pattern is always an even number for maintenance versions, and odd for developer releases. -In the past it has been observed that pumpkings tend to invent new -naming conventions on the fly. If you are a pumpking, before you -invent a new name for any of the three types of perl distributions, -please inform the guys from the CPAN who are doing indexing and -provide the trees of symlinks and the like. They will have to know -I what you decide. +In the past, release managers sometimes invented naming conventions on the fly. +If you are releasing perl, before you invent a new name for any of the three +types of perl distributions, please inform the people from the CPAN who are +doing indexing and provide the trees of symlinks and the like. They will have +to know I what you decide. =head2 Why is it called the patch pumpkin? @@ -192,7 +191,7 @@ If you have many machine-specific #defines or #includes, consider creating an "osish.h" (F, F, and so on) and including that in F. If you have several machine-specific files (function emulations, function stubs, build utility wrappers) you may create a -separate subdirectory (djgpp, win32) and put the files in there. +separate subdirectory (vms, win32) and put the files in there. Remember to update C when you add files. If your system supports dynamic loading but none of the existing @@ -481,9 +480,9 @@ committer will forget to update F, it's the best to diff for changes in .h files when making a new release and making sure that F contains them all. -The pumpking can delegate the synchronization responsibility to anybody -else, but the release process is the only place where we can make sure -that no new macros fell through the cracks. +The Steering Council can delegate the synchronization responsibility to +anybody else, but the release process is the only place where we can make +sure that no new macros fell through the cracks. =head2 Todo @@ -543,9 +542,9 @@ Here's how I generate a new patch. I'll use the hypothetical 5.004_07 to 5.004_08 patch as an example. # unpack perl5.004_07/ - gzip -d -c perl5.004_07.tar.gz | tar -xf - + gzip -d -c perl5.004_07.tar.gz | tar -xof - # unpack perl5.004_08/ - gzip -d -c perl5.004_08.tar.gz | tar -xf - + gzip -d -c perl5.004_08.tar.gz | tar -xof - makepatch perl5.004_07 perl5.004_08 > perl5.004_08.pat Makepatch will automatically generate appropriate B commands to remove @@ -1378,10 +1377,10 @@ files propagate the copyright years of the generating file(s). The files of Perl source code distribution do carry a lot of copyrights, by various people. (There are many copyrights embedded in -perl.c, for example.) The most straightforward thing for pumpkings to +perl.c, for example.) The most straightforward thing for perl releasers to do is to simply update Larry's copyrights at the beginning of the *.[hcy], *.pl, and README files, and leave all other -copyrights alone. Doing more than that requires quite a bit of tracking. +copyrights alone. Doing more than that requires quite a bit of tracking. =back diff --git a/gnu/usr.bin/perl/Porting/release_announcement_template.txt b/gnu/usr.bin/perl/Porting/release_announcement_template.txt index 55b62674bff..7ec83157047 100644 --- a/gnu/usr.bin/perl/Porting/release_announcement_template.txt +++ b/gnu/usr.bin/perl/Porting/release_announcement_template.txt @@ -10,10 +10,10 @@ favorite CPAN mirror or find it at: https://metacpan.org/release/[AUTHOR]/perl-5.[VERSION.SUBVERSION]/ -SHA1 digests for this release are: +SHA256 digests for this release are: - [TAR.GZ SHA1] perl-5.[VERSION.SUBVERSION].tar.gz - [TAR.XZ SHA1] perl-5.[VERSION.SUBVERSION].tar.xz + [TAR.GZ SHA256] perl-5.[VERSION.SUBVERSION].tar.gz + [TAR.XZ SHA256] perl-5.[VERSION.SUBVERSION].tar.xz You can find a full list of changes in the file "perldelta.pod" located in the "pod" directory inside the release and on the web at @@ -22,8 +22,7 @@ https://metacpan.org/pod/release/[AUTHOR]/perl-5.[VERSION.SUBVERSION]/pod/perlde [ACKNOWLEDGEMENTS SECTION FROM PERLDELTA] -We expect to release version [NEXT BLEAD VERSION.SUBVERSION] on [FUTURE -DATE]. The next major stable release of Perl 5, version 32.0, should -appear in May 2020. +We expect to release version [NEXT BLEAD VERSION.SUBVERSION] on [FUTURE DATE]. +The next major stable release of Perl should appear in the first half of 2022. [YOUR SALUTATION HERE] diff --git a/gnu/usr.bin/perl/Porting/release_managers_guide.pod b/gnu/usr.bin/perl/Porting/release_managers_guide.pod index c9f729f4eb7..ffdb17e1749 100644 --- a/gnu/usr.bin/perl/Porting/release_managers_guide.pod +++ b/gnu/usr.bin/perl/Porting/release_managers_guide.pod @@ -15,14 +15,14 @@ document that starts with a checklist for your release. This script is run as: - perl Porting/make-rmg-checklist \ - --version [5.x.y-RC#] > /tmp/rmg.pod + perl Porting/make-rmg-checklist \ + --version [5.x.y-RC#] > /tmp/rmg.pod You can also pass the C<--html> flag to generate an HTML document instead of POD. - perl Porting/make-rmg-checklist --html \ - --version [5.x.y-RC#] > /tmp/rmg.html + perl Porting/make-rmg-checklist --html \ + --version [5.x.y-RC#] > /tmp/rmg.html =head1 SYNOPSIS @@ -30,10 +30,9 @@ This document describes the series of tasks required - some automatic, some manual - to produce a perl release of some description, be that a release candidate, or final, numbered release of maint or blead. -The release process has traditionally been executed by the current -pumpking. Blead releases from 5.11.0 forward are made each month on the -20th by a non-pumpking release engineer. The release engineer roster -and schedule can be found in Porting/release_schedule.pod. +New releases of perl are made each month on the 20th by a release engineer +appointed by the Steering Council. The release engineer roster and schedule +can be found in Porting/release_schedule.pod. This document both helps as a check-list for the release engineer and is a base for ideas on how the various tasks could be automated @@ -41,23 +40,23 @@ or distributed. The checklist of a typical release cycle is as follows: - (5.10.1 is released, and post-release actions have been done) + (5.10.1 is released, and post-release actions have been done) - ...time passes... + ...time passes... - a few weeks before the release, a number of steps are performed, - including bumping the version to 5.10.2 + a few weeks before the release, a number of steps are performed, + including bumping the version to 5.10.2 - ...a few weeks pass... + ...a few weeks pass... - perl-5.10.2-RC1 is released + perl-5.10.2-RC1 is released - perl-5.10.2 is released + perl-5.10.2 is released - post-release actions are performed, including creating new - perldelta.pod + post-release actions are performed, including creating new + perldelta.pod - ... the cycle continues ... + ... the cycle continues ... =head1 DETAILS @@ -131,7 +130,7 @@ hoops you need to jump through: Make sure you have a PAUSE account suitable for uploading a perl release. If you don't have a PAUSE account, then request one: - https://pause.perl.org/pause/query?ACTION=request_id + https://pause.perl.org/pause/query?ACTION=request_id Check that your account is allowed to upload perl distros: go to L and check that @@ -139,19 +138,18 @@ your PAUSE ID is listed there. If not, ask Andreas KE<0xf6>nig to add your ID to the list of people allowed to upload something called perl. You can find Andreas' email address at: - https://pause.perl.org/pause/query?ACTION=pause_04imprint + https://pause.perl.org/pause/query?ACTION=pause_04imprint =head3 GitHub access You will need a working C installation, checkout of the perl git repository and perl commit bit. For information about working -with perl and git, see F. +with perl and git, see L. If you are not yet a perl committer, you won't be able to make a release. You will need to have a GitHub account (if you don't have one) -and contact the pumpking with your username to get membership of the L<< -Perl-Release-Managers|https://github.com/orgs/Perl/teams/perl-release-managers ->> team. +and contact the Steering Council with your username to get membership in the +L<< Perl-Releasers|https://github.com/orgs/Perl/teams/perl-releasers >> team. =head3 web-based file share @@ -175,6 +173,15 @@ asked to compare the installed files with a previous install. Save yourself some time on release day, and have a (clean) install of the previous version ready. +=head3 Email account subscribed to perl5-porters + +In order for your release announcement email to be delivered to the +perl5-porters distribution list, the email address that you intend to +send from must be subscribed to the list. + +Instructions for subscribing can be found here: +L + =head2 Building a release - advance actions The work of building a release candidate for an even numbered release @@ -186,7 +193,7 @@ but all I be done in the run up to a release. To see which core distro versions differ from the current CPAN versions: - $ ./perl -Ilib Porting/core-cpan-diff -x -a + $ ./perl -Ilib Porting/core-cpan-diff -x -a However, this only checks whether the version recorded in F differs from the latest on CPAN. It doesn't tell you @@ -196,7 +203,7 @@ You can also run an actual diff of the contents of the modules, comparing core to CPAN, to ensure that there were no erroneous/extraneous changes that need to be dealt with. You do this by not passing the C<-x> option: - $ ./perl -Ilib Porting/core-cpan-diff -a -o ~/corediffs + $ ./perl -Ilib Porting/core-cpan-diff -a -o ~/corediffs Passing C<-u cpan> will probably be helpful, since it limits the search to distributions with 'cpan' upstream source. (It's OK for blead upstream to @@ -236,7 +243,7 @@ Additionally, all files listed as "modified" but not "customized for blead" should have entries added under the C key in F, as well as checksums updated via: - cd t; ../perl -I../lib porting/customized.t --regen + cd t; ../perl -I../lib porting/customized.t --regen =head4 Sync CPAN modules with the corresponding cpanE distro @@ -335,23 +342,23 @@ may have to take more steps than listed above. This comes down to: for each module that fails its regression tests on $current - did it fail identically on $previous? - if yes, "SEP" (Somebody Else's Problem, but try to make sure a - bug ticket is filed) - else work out why it failed (a bisect is useful for this) + did it fail identically on $previous? + if yes, "SEP" (Somebody Else's Problem, but try to make sure a + bug ticket is filed) + else work out why it failed (a bisect is useful for this) attempt to group failure causes for each failure cause - is that a regression? - if yes, figure out how to fix it - (more code? revert the code that broke it) - else - (presumably) it's relying on something un-or-under-documented - should the existing behaviour stay? - yes - goto "regression" - no - note it in perldelta as a significant bugfix - (also, try to inform the module's author) + is that a regression? + if yes, figure out how to fix it + (more code? revert the code that broke it) + else + (presumably) it's relying on something un-or-under-documented + should the existing behaviour stay? + yes - goto "regression" + no - note it in perldelta as a significant bugfix + (also, try to inform the module's author) =head3 monitor smoke tests for failures @@ -409,7 +416,7 @@ bump the version further. There is a tool to semi-automate this process: - $ ./perl -Ilib Porting/bump-perl-version -i 5.10.0 5.10.1 + $ ./perl -Ilib Porting/bump-perl-version -i 5.10.0 5.10.1 Remember that this tool is largely just grepping for '5.10.0' or whatever, so it will generate false positives. Be careful not change text like @@ -496,36 +503,35 @@ blead release, so you may find nothing to do here. =head3 update AUTHORS -The AUTHORS file can be updated by running C -The script detects missing authors or committers since the last release using -a known tag provided by the C<--from=v5.X.Y> argument, and will add missing -entries to the AUTHORS file. +The AUTHORS file can be updated by running F. - $ perl Porting/checkAUTHORS.pl --update --from=v5.X.Y +(The old method was C and +it's still used under the hood, but you should use the +F update.) -For MAINT and BLEAD-FINAL releases, C needs to refer to the last -release in the previous development cycle (so for example, for a 5.14.x -release, this would be 5.13.11). +In the old method, for MAINT and BLEAD-FINAL releases, C needs to +refer to the last release in the previous development cycle (so for +example, for a 5.14.x release, this would be 5.13.11). -For BLEAD-POINT releases, it needs to refer to the previous BLEAD-POINT -release (so for 5.15.3 this would be 5.15.2). +In the old method, for BLEAD-POINT releases, it needs to refer to the +previous BLEAD-POINT release (so for 5.15.3 this would be 5.15.2). Note: It should not be harmful to use a wider range. Note: If you have uncommitted changes this could cause some warnings, -and you might like to use the addtional argument C<--to=upstream/blead> +and you might like to use the additional argument C<--to=upstream/blead> to use the last known git commit by GitHub. Review the changes to the AUTHORS file, be sure you are not adding duplicate entries or removing any entries, then commit your changes. - $ git commit -a AUTHORS -m 'Update AUTHORS list for 5.x.y' + $ git commit -a AUTHORS -m 'Update AUTHORS list for 5.x.y' =head3 Check copyright years Check that the copyright years are up to date by running: - $ pushd t; ../perl -I../lib porting/copyright.t --now + $ pushd t; ../perl -I../lib porting/copyright.t --now Remedy any test failures by editing README or perl.c accordingly (search for the "Copyright"). If updating perl.c, check if the file's own copyright date in @@ -590,19 +596,19 @@ need to freeze blead during the release. This is less important for BLEAD-FINAL, MAINT, and RC releases, since blead will already be frozen in those cases. Create the branch by running - git checkout -b release-5.xx.yy + git checkout -b release-5.xx.yy =head3 build a clean perl Make sure you have a gitwise-clean perl directory (no modified files, unpushed commits etc): - $ git status - $ git clean -dxf + $ git status + $ git clean -dxf then configure and build perl so that you have a Makefile and porting tools: - $ ./Configure -Dusedevel -des && make + $ ./Configure -Dusedevel -des && make =head3 Check module versions @@ -610,7 +616,7 @@ For each Perl release since the previous release of the current branch, check for modules that have identical version numbers but different contents by running: - $ ./perl -Ilib Porting/cmpVERSION.pl --tag=v5.X.YY + $ ./perl -Ilib Porting/cmpVERSION.pl --tag=v5.X.YY (This is done automatically by F for the previous release of the current branch, but not for any releases from other branches.) @@ -661,14 +667,14 @@ and its version number synchronised across all maint branches, blead and CPAN, while having to bump its version number for every RC release. See this brief p5p thread: - Message-ID: <20130311174402.GZ2294@iabyn.com> + Message-ID: <20130311174402.GZ2294@iabyn.com> If you can devise a workable system, feel free to try it out, and to update the RMG accordingly! DAPM May 2013 ] -F uses ftp.funet.fi to verify information about dual-lived +F uses www.cpan.org to verify information about dual-lived modules on CPAN. It can use a full, local CPAN mirror and/or fall back on HTTP::Tiny to fetch package metadata remotely. @@ -677,15 +683,15 @@ L) Change to your perl checkout, and if necessary, - $ make + $ make Then, If you have a local CPAN mirror, run: - $ ./perl -Ilib Porting/corelist.pl ~/my-cpan-mirror + $ ./perl -Ilib Porting/corelist.pl ~/my-cpan-mirror Otherwise, run: - $ ./perl -Ilib Porting/corelist.pl cpan + $ ./perl -Ilib Porting/corelist.pl cpan This will chug for a while, possibly reporting various warnings about badly-indexed CPAN modules unrelated to the modules actually in core. @@ -695,8 +701,8 @@ F. Check those files over carefully: - $ git diff dist/Module-CoreList/lib/Module/CoreList.pm - $ git diff dist/Module-CoreList/lib/Module/CoreList/Utils.pm + $ git diff dist/Module-CoreList/lib/Module/CoreList.pm + $ git diff dist/Module-CoreList/lib/Module/CoreList/Utils.pm =head4 Bump version in Module::CoreList F @@ -725,10 +731,10 @@ Finally, commit the new version of Module::CoreList: (unless this is for MAINT; in which case commit it to blead first, then cherry-pick it back). - $ git commit -m 'Update Module::CoreList for 5.x.y' \ - dist/Module-CoreList/Changes \ - dist/Module-CoreList/lib/Module/CoreList.pm \ - dist/Module-CoreList/lib/Module/CoreList/Utils.pm + $ git commit -m 'Update Module::CoreList for 5.x.y' \ + dist/Module-CoreList/Changes \ + dist/Module-CoreList/lib/Module/CoreList.pm \ + dist/Module-CoreList/lib/Module/CoreList/Utils.pm =head4 Rebuild and test @@ -740,18 +746,18 @@ ensure all tests are passing. Finalize the perldelta. In particular, fill in the Acknowledgements section, which can be generated with something like: - $ perl Porting/acknowledgements.pl v5.15.0..HEAD + $ perl Porting/acknowledgements.pl v5.15.0..HEAD Fill in the "New/Updated Modules" sections now that Module::CoreList is updated: - $ ./perl -Ilib Porting/corelist-perldelta.pl \ - --mode=update pod/perldelta.pod + $ ./perl -Ilib Porting/corelist-perldelta.pl \ + --mode=update pod/perldelta.pod For a MAINT release use something like this instead: - $ ./perl -Ilib Porting/corelist-perldelta.pl 5.020001 5.020002 \ - --mode=update pod/perldelta.pod + $ ./perl -Ilib Porting/corelist-perldelta.pl 5.020001 5.020002 \ + --mode=update pod/perldelta.pod Ideally, also fill in a summary of the major changes to each module for which an entry has been added by F. @@ -761,19 +767,19 @@ remove any C or C flags; update the "Known Problems" section with any serious issues for which fixes are not going to happen now; and run through pod and spell checkers, e.g. - $ podchecker -warnings -warnings pod/perldelta.pod - $ spell pod/perldelta.pod - $ aspell list < pod/perldelta.pod | sort -u + $ podchecker -warnings -warnings pod/perldelta.pod + $ spell pod/perldelta.pod + $ aspell list < pod/perldelta.pod | sort -u Also, you may want to generate and view an HTML version of it to check formatting, e.g. - $ ./perl -Ilib ext/Pod-Html/bin/pod2html pod/perldelta.pod > \ - ~/perldelta.html + $ ./perl -Ilib ext/Pod-Html/bin/pod2html pod/perldelta.pod > \ + ~/perldelta.html You should add pod links for GitHub issue references thusly: - $ perl -p -i -e'BEGIN{undef $/}; s{(GH\s+#)(\d+)}{L<$1$2|https://github.com/Perl/perl5/issues/$2>}mg' pod/perldelta.pod + $ perl -p -i -e'BEGIN{undef $/}; s{(GH\s+#)(\d+)}{L<$1$2|https://github.com/Perl/perl5/issues/$2>}mg' pod/perldelta.pod If you make changes, be sure to commit them. @@ -786,12 +792,12 @@ from the BLEAD-POINT releases since the previous BLEAD-FINAL should have now been consolidated into the current perldelta, and hence are now just useless clutter. They can be removed using: - $ git rm ... + $ git rm ... For example, for RC0 of 5.16.0: - $ cd pod - $ git rm perldelta515*.pod + $ cd pod + $ git rm perldelta515*.pod =for checklist skip BLEAD-FINAL BLEAD-POINT @@ -804,7 +810,7 @@ but not newer. For example if you're producing a 5.14.x release, copy any perldeltas from recent 5.10.x, 5.12.x etc maint releases, but not from 5.16.x or higher. Remember to - $ git add ... + $ git add ... =head3 update and commit perldelta files @@ -816,11 +822,11 @@ need to C the files that it changes. Then build a clean perl and do a full test - $ git status - $ git clean -dxf - $ ./Configure -Dusedevel -des - $ make - $ make test + $ git status + $ git clean -dxf + $ ./Configure -Dusedevel -des + $ make + $ make test Once all tests pass, commit your changes. @@ -829,7 +835,7 @@ Once all tests pass, commit your changes. Check for any 'XXX' leftover section in the perldelta. Either fill them or remove these sections appropriately. - $ git grep XX pod/perldelta.pod + $ git grep XX pod/perldelta.pod =head3 build a clean perl @@ -837,12 +843,12 @@ If you skipped the previous step (adding/removing perldeltas), again, make sure you have a gitwise-clean perl directory (no modified files, unpushed commits etc): - $ git status - $ git clean -dxf + $ git status + $ git clean -dxf then configure and build perl so that you have a Makefile and porting tools: - $ ./Configure -Dusedevel -des && make + $ ./Configure -Dusedevel -des && make =for checklist skip BLEAD-FINAL BLEAD-POINT @@ -857,15 +863,15 @@ forgotten from blead. An easy way to do that is with C<< git checkout -p >>, to selectively apply any changes from the blead version to your current branch: - $ git fetch origin - $ git checkout -p origin/blead pod/perlhist.pod - $ git commit -m 'sync perlhist from blead' pod/perlhist.pod + $ git fetch origin + $ git checkout -p origin/blead pod/perlhist.pod + $ git commit -m 'Sync perlhist from blead' pod/perlhist.pod =head3 update perlhist.pod Add an entry to F with the release date, e.g.: - David 5.10.1 2009-Aug-06 + David 5.10.1 2009-Aug-06 List yourself in the left-hand column, and if this is the first release that you've ever done, make sure that your name is listed in the section @@ -877,7 +883,7 @@ F. Be sure to commit your changes: - $ git commit -m 'add new release to perlhist' pod/perlhist.pod + $ git commit -m 'Add new release to perlhist' pod/perlhist.pod =for checklist skip BLEAD-POINT @@ -888,37 +894,37 @@ I Update F to add a C<-RC1>-or-whatever string; or, if this is a final release, remove it. For example: - static const char * const local_patches[] = { - NULL - + ,"RC1" - #ifdef PERL_GIT_UNCOMMITTED_CHANGES - ,"uncommitted-changes" - #endif + static const char * const local_patches[] = { + NULL + + ,"RC1" + #ifdef PERL_GIT_UNCOMMITTED_CHANGES + ,"uncommitted-changes" + #endif Be sure to commit your change: - $ git commit -m 'bump version to RCnnn' patchlevel.h + $ git commit -m 'Bump version to RCnnn' patchlevel.h =head3 run makemeta to update META files - $ ./perl -Ilib Porting/makemeta + $ ./perl -Ilib Porting/makemeta Be sure to commit any changes (if applicable): - $ git status # any changes? - $ git commit -m 'Update META files' META.* + $ git status # any changes? + $ git commit -m 'Update META files' META.* =head3 build, test and check a fresh perl Build perl, then make sure it passes its own test suite, and installs: - $ git clean -xdf - $ ./Configure -des -Dprefix=/tmp/perl-5.x.y-pretest + $ git clean -xdf + $ ./Configure -des -Dprefix=/tmp/perl-5.x.y-pretest - # or if it's an odd-numbered version: - $ ./Configure -des -Dusedevel -Dprefix=/tmp/perl-5.x.y-pretest + # or if it's an odd-numbered version: + $ ./Configure -des -Dusedevel -Dprefix=/tmp/perl-5.x.y-pretest - $ make test install + $ make test install Check that the output of C and C are as expected, @@ -939,7 +945,7 @@ Then delete the temporary installation. Create the tag identifying this release (e.g.): - $ git tag v5.11.0 -m 'First release of the v5.11 series!' + $ git tag v5.11.0 -m 'First release of the v5.11 series!' It is B important that from this point forward, you not push your git changes to the Perl master repository. If anything goes @@ -975,7 +981,7 @@ the tarball and directory name: $ cd root/of/perl/tree $ make distclean # make sure distclean works $ git clean -xdf # make sure perl and git agree on files - # git clean should not output anything! + # git clean should not output anything! $ git status --ignored # and there's nothing lying around $ perl Porting/makerel -x -s RC1 # for a release candidate @@ -989,14 +995,14 @@ C file. If you're getting your tarball suffixed with -uncommitted and you're sure your changes were all committed, you can override the suffix with: - $ perl Porting/makerel -x -s '' + $ perl Porting/makerel -x -s '' XXX if we go for extra tags and branches stuff, then add the extra details here Finally, clean up the temporary directory, e.g. - $ rm -rf ../perl-x.y.z-RC1 + $ rm -rf ../perl-x.y.z-RC1 =head3 test the tarball @@ -1025,19 +1031,19 @@ your own tarball testing, below. Check that basic configuration and tests work on each test machine: - $ ./Configure -des && make all minitest test + $ ./Configure -des && make all minitest test - # Or for a development release: - $ ./Configure -Dusedevel -des && make all minitest test + # Or for a development release: + $ ./Configure -Dusedevel -des && make all minitest test =head4 Run the test harness and install Check that the test harness and install work on each test machine: - $ make distclean - $ ./Configure -des -Dprefix=/install/path && \ - make all test_harness install - $ cd /install/path + $ make distclean + $ ./Configure -des -Dprefix=/install/path && \ + make all test_harness install + $ cd /install/path (Remember C<-Dusedevel> above, for a development release.) @@ -1052,12 +1058,12 @@ which is why you should test from the tarball. =head4 Run the Installation Verification Procedure utility - $ ./perl -Ilib ./utils/perlivp - # Or, perhaps: - $ ./perl5.x.y ./utils/perlivp5.x.y - ... - All tests successful. - $ + $ ./perl -Ilib ./utils/perlivp + # Or, perhaps: + $ ./perl5.x.y ./utils/perlivp5.x.y + ... + All tests successful. + $ =head4 Compare the installed paths to the last release @@ -1068,58 +1074,57 @@ for files in the wrong place, or files no longer included which should be. For example, suppose the about-to-be-released version is 5.10.1 and the previous is 5.10.0: - cd installdir-5.10.0/ - find . -type f | perl -pe's/5\.10\.0/5.10.1/g' | sort > /tmp/f1 - cd installdir-5.10.1/ - find . -type f | sort > /tmp/f2 - diff -u /tmp/f[12] + cd installdir-5.10.0/ + find . -type f | perl -pe's/5\.10\.0/5.10.1/g' | sort > /tmp/f1 + cd installdir-5.10.1/ + find . -type f | sort > /tmp/f2 + diff -u /tmp/f[12] =head4 Disable C if it's turned on If you're using C, you should reset your environment before performing these actions: - $ unset PERL5LIB PERL_MB_OPT PERL_LOCAL_LIB_ROOT PERL_MM_OPT + $ unset PERL5LIB PERL_MB_OPT PERL_LOCAL_LIB_ROOT PERL_MM_OPT =head4 Bootstrap the CPAN client Bootstrap the CPAN client on the clean install: - $ bin/cpan + $ bin/cpan - # Or, perhaps: - $ bin/cpan5.xx.x + # Or, perhaps: + $ bin/cpan5.xx.x =head4 Install the Inline module with CPAN and test it Try installing a popular CPAN module that's reasonably complex and that has dependencies; for example: - CPAN> install Inline::C - CPAN> quit + CPAN> install Inline::C + CPAN> quit Check that your perl can run this: - $ bin/perl -Ilib -lwe "use Inline C => q[int f() { return 42;}]; print f" - 42 - $ + $ bin/perl -Ilib -lwe "use Inline C => q[int f() { return 42;}]; print f" + 42 + $ =head4 Make sure that perlbug works Test L with the following: - $ bin/perlbug - ... - Subject: test bug report - Local perl administrator [yourself]: - Editor [vi]: - Module: - Category [core]: - Severity [low]: - (edit report) - Action (Send/Display/Edit/Subject/Save to File): f - Name of file to save message in [perlbug.rep]: - Action (Send/Display/Edit/Subject/Save to File): Q + $ bin/perlbug + ... + Subject: test bug report + Local perl administrator [yourself]: + Editor [vi]: + Module: + Category [core]: + Severity [low]: + (edit report) + Action (Send/Display/Edit/Subject/Save to File): f + Name of file to save message in [perlbug.rep]: and carefully examine the output (in F), especially the "Locally applied patches" section. @@ -1150,7 +1155,7 @@ Once smoking is okay, upload it to PAUSE. This is the point of no return. If anything goes wrong after this point, you will need to re-prepare a new release with a new minor version or RC number. - https://pause.perl.org/ + https://pause.perl.org/ (Log in, then select 'Upload a file to CPAN') @@ -1170,14 +1175,14 @@ Upload the .gz and .xz versions of the tarball. Note: You can also use the command-line utility to upload your tarballs, if you have it configured: - cpan-upload perl-5.X.Y.tar.gz - cpan-upload perl-5.X.Y.tar.xz + cpan-upload perl-5.X.Y.tar.gz + cpan-upload perl-5.X.Y.tar.xz Do not proceed any further until you are sure that your tarballs are on CPAN. Check your authors directory metacpan.org to confirm that your uploads have been successful. - https://metacpan.org/author/YOUR_PAUSE_ID + https://metacpan.org/author/YOUR_PAUSE_ID =for checklist skip RC BLEAD-POINT @@ -1198,35 +1203,38 @@ I Disarm the F change; for example, - static const char * const local_patches[] = { - NULL - - ,"RC1" - #ifdef PERL_GIT_UNCOMMITTED_CHANGES - ,"uncommitted-changes" - #endif + static const char * const local_patches[] = { + NULL + - ,"RC1" + #ifdef PERL_GIT_UNCOMMITTED_CHANGES + ,"uncommitted-changes" + #endif Be sure to commit your change: - $ git commit -m 'disarm RCnnn bump' patchlevel.h + $ git commit -m 'Disarm RCnnn bump' patchlevel.h =head3 announce to p5p Mail perl5-porters@perl.org to announce your new release, with a quote you prepared earlier. -Get the SHA1 digests from the PAUSE email responses. +Get the SHA256 digests from the PAUSE email responses. Use the template at Porting/release_announcement_template.txt Send a carbon copy to C +If your email does not appear on the list, but does not obviously bounce +either, check that the email you are sending from is subscribed to the list. + =head3 merge release branch back to blead Merge the (local) release branch back into master now, and delete it. - git checkout blead - git pull - git merge release-5.xx.yy - git push - git branch -d release-5.xx.yy + git checkout blead + git pull + git merge release-5.xx.yy + git push + git branch -d release-5.xx.yy Note: The merge will create a merge commit if other changes have been pushed to blead while you've been working on your release branch. Do NOT rebase your @@ -1240,7 +1248,7 @@ Now that you've shipped the new perl release to PAUSE and pushed your changes to the Perl master repository, it's time to publish the tag you created earlier too (e.g.): - $ git push origin tag v5.11.0 + $ git push origin tag v5.11.0 =head3 update epigraphs.pod @@ -1293,7 +1301,7 @@ Confirm that you have a clean checkout with no local changes. =item * Run: - perl Porting/new-perldelta.pl + perl Porting/new-perldelta.pl =item * @@ -1314,7 +1322,7 @@ Skip to the end of its test output to see the options it offers you. When C passes, commit the new perldelta. - git commit -m'new perldelta for 5.X.Y' + git commit -m'New perldelta for 5.X.Y' =back @@ -1336,8 +1344,8 @@ First, add a new feature bundle to F, initially by just copying the exiting entry, and bump the file's $VERSION (after the __END__ marker); e.g. - "5.14" => [qw(switch say state unicode_strings)], - + "5.15" => [qw(switch say state unicode_strings)], + "5.14" => [qw(switch say state unicode_strings)], + + "5.15" => [qw(switch say state unicode_strings)], Run F to propagate the changes to F. @@ -1403,7 +1411,7 @@ update its exceptions database. Finally, push any commits done above. - $ git push origin .... + $ git push origin .... =for checklist skip BLEAD-POINT MAINT RC @@ -1417,8 +1425,8 @@ the commit tagged as the current release. Assuming you're using git 1.7.x or newer: - $ git checkout -b maint-5.12 v5.12.0 - $ git push origin -u maint-5.12 + $ git checkout -b maint-5.12 v5.12.0 + $ git push origin -u maint-5.12 =for checklist skip BLEAD-POINT MAINT RC @@ -1428,9 +1436,9 @@ Assuming you're using git 1.7.x or newer: Clone the new branch into /srv/gitcommon/branches on camel so the APC will receive its changes. - $ git clone --branch maint-5.14 /gitroot/perl.git \ - ? /srv/gitcommon/branches/perl-5.14.x - $ chmod -R g=u /srv/gitcommon/branches/perl-5.14.x + $ git clone --branch maint-5.14 /gitroot/perl.git \ + ? /srv/gitcommon/branches/perl-5.14.x + $ chmod -R g=u /srv/gitcommon/branches/perl-5.14.x And nag the sysadmins to make this directory available via rsync. @@ -1453,16 +1461,16 @@ rather than perldelta). Edit F to add an entry for the file, e.g.: - perl5101delta Perl changes in version 5.10.1 + perl5101delta Perl changes in version 5.10.1 Then rebuild various files: - $ perl Porting/pod_rules.pl + $ perl Porting/pod_rules.pl Finally, commit and push: - $ git commit -a -m 'add perlXXXdelta' - $ git push origin .... + $ git commit -a -m 'Add perlXXXdelta' + $ git push origin .... =for checklist skip BLEAD-POINT @@ -1471,7 +1479,7 @@ Finally, commit and push: Make sure any recent F entries are copied to F on blead. e.g. - 5.8.9 2008-Dec-14 + 5.8.9 2008-Dec-14 =head3 Relax! @@ -1508,11 +1516,11 @@ and F. If you have a local CPAN mirror, run: - $ ./perl -Ilib Porting/corelist.pl ~/my-cpan-mirror + $ ./perl -Ilib Porting/corelist.pl ~/my-cpan-mirror Otherwise, run: - $ ./perl -Ilib Porting/corelist.pl cpan + $ ./perl -Ilib Porting/corelist.pl cpan This will update F and F as it did before, @@ -1529,12 +1537,15 @@ Remake perl to get your changed .pm files propagated into F and then run at least the F tests and the test_porting makefile target to check that they're ok. + $ cd t; ./TEST ../dist/Module-CoreList/t/*.t + $ make test_porting + =item * Run $ ./perl -Ilib -MModule::CoreList \ - -le 'print Module::CoreList->find_version($]) ? "ok" : "not ok"' + -le 'print Module::CoreList->find_version($]) ? "ok" : "not ok"' and check that it outputs "ok" to prove that Module::CoreList now knows about blead's current version. @@ -1543,6 +1554,10 @@ about blead's current version. Commit and push your changes. + $ git add -u + $ git commit -m "Prepare Module::Corelist for 5.XX.Y" + $ git push origin + =back =head3 check tarball availability diff --git a/gnu/usr.bin/perl/Porting/release_schedule.pod b/gnu/usr.bin/perl/Porting/release_schedule.pod index 939baddafe3..a7ceb8f46d3 100644 --- a/gnu/usr.bin/perl/Porting/release_schedule.pod +++ b/gnu/usr.bin/perl/Porting/release_schedule.pod @@ -9,19 +9,17 @@ release_schedule - Perl 5 release schedule This schedule lists the projected or historical development and release schedules for the next, current and previous stable versions of Perl. Dates with two or more question marks will only be releases if -deemed necessary by the Pumpking. +deemed necessary by the Steering Council. -=head2 Perl 5.32 +=head2 Perl 5.34 - 2020-06-20 5.32.0 ✓ Sawyer X - 2021-01-23 5.32.1 Steve Hay + 2021-05-20 5.34.0 ✓ Sawyer X + 2022-03-13 5.34.1 ✓ Steve Hay -=head2 Perl 5.30 +=head2 Perl 5.32 - 2019-05-22 5.30.0 ✓ Sawyer X - 2019-11-10 5.30.1 ✓ Steve Hay - 2020-03-14 5.30.2 ✓ Steve Hay - 2020-06-01 5.30.3 ✓ Steve Hay + 2020-06-20 5.32.0 ✓ Sawyer X + 2021-01-23 5.32.1 ✓ Steve Hay =head1 DEVELOPMENT RELEASE SCHEDULE @@ -37,18 +35,23 @@ When shipping a release, you should include the schedule for (at least) the next four releases. If a stable version of Perl is released, you should reset the version numbers to the next blead series. -=head2 Perl 5.33 - - 2020-07-17 5.33.0 ✓ Sawyer X - 2020-08-20 5.33.1 ✓ Karen Etheridge - 2020-09-20 5.33.2 ✓ Sawyer X - 2020-10-20 5.33.3 ✓ Steve Hay - 2020-11-20 5.33.4 ✓ Tom Hukins - 2020-12-20 5.33.5 ✓ Max Maischein - 2021-01-20 5.33.6 ✓ Richard Leach - 2021-02-20 5.33.7 Renee Backer - 2021-03-20 5.33.8 Atoomic - 2021-04-20 5.33.9 Todd Rinaldo +=head2 Perl 5.35 + + 2021-05-20 5.35.0 ✓ Ricardo Signes + 2021-06-20 5.35.1 ✓ Max Maischein + 2021-07-20 5.35.2 ✓ Neil Bowers + 2021-08-20 5.35.3 ✓ Karen Etheridge + 2021-09-20 5.35.4 ✓ Matthew Horsfall + 2021-10-20 5.35.5 ✓ Leon Timmermans + 2021-11-20 5.35.6 ✓ Richard Leach + 2021-12-20 5.35.7 ✓ Neil Bowers + 2022-01-20 5.35.8 ✓ Nicolas R + 2022-02-20 5.35.9 ✓ Renee Contentious changes freeze + 2022-03-20 5.35.10 ✓ Sawyer X User-visible changes to + correctly functioning programs + freeze + 2022-04-20 5.35.11 ✓ Steve Hay Full code freeze + 2022-05-20 5.36.0 Ricardo New perl! =head1 VICTIMS @@ -57,7 +60,7 @@ one release of bleadperl. If you can't do a release and can't find a substitute amongst this list, mail p5p. (Please do not add any names to this list without prior -consent of the Pumpking.) +consent of the Steering Council.) Abigail Aristotle Pagaltzis diff --git a/gnu/usr.bin/perl/Porting/sync-with-cpan b/gnu/usr.bin/perl/Porting/sync-with-cpan index 4b3a18b5e87..0fc5726eeda 100644 --- a/gnu/usr.bin/perl/Porting/sync-with-cpan +++ b/gnu/usr.bin/perl/Porting/sync-with-cpan @@ -9,7 +9,7 @@ Porting/sync-with-cpan - Synchronize with CPAN distributions sh ./Configure perl Porting/sync-with-cpan -where is the name it appears in the C<%Modules> hash +where C is the name it appears in the C<%Modules> hash of F =head1 DESCRIPTION @@ -179,7 +179,7 @@ my @problematic = ( sub usage { my $err = shift and select STDERR; - print "Usage: $0 module [args] [cpan package]\n"; + print "Usage: $0 [args]\n"; exit $err; } @@ -269,8 +269,6 @@ EOF print "Hit return to continue; ^C to abort "; ; } -my $cpan_mod = @ARGV ? shift : $module; - my $distribution = $$info {DISTRIBUTION}; my @files = glob $$info {FILES}; @@ -293,25 +291,32 @@ my $pkg_dir = $files[0]; my ($old_version) = $distribution =~ /-([0-9.]+(?:-TRIAL[0-9]*)?)\.tar\.gz/; -my $o_module = $module; -if ($cpan_mod =~ /-/ && $cpan_mod !~ /::/) { - $cpan_mod =~ s/-/::/g; -} - sub wget { my ($url, $saveas) = @_; + my $ht_res; eval { + require IO::Socket::SSL; + require Net::SSLeay; require HTTP::Tiny; - my $http= HTTP::Tiny->new(); - $http->mirror( $url => $saveas ); - 1 + my $http = HTTP::Tiny->new(); + $ht_res = $http->mirror( $url => $saveas ); + 1; } or + # Try harder to download the file # Some system do not have wget. Fall back to curl if we do not # have it. On Windows, `which wget` is not going to work, so # just use wget, as this script has always done. WIN32 || -x substr(`which wget`, 0, -1) ? system wget => $url, '-qO', $saveas : system curl => $url, '-sSo', $saveas; + + # We were able to use HTTP::Tiny and it didn't have fatal errors, + # but we failed the request + if ( $ht_res && ! $ht_res->{'success'} ) { + die "Cannot retrieve file: $url\n" . + sprintf "Status: %s\nReason: %s\nContent: %s\n", + map $_ // '(unavailable)', @{$ht_res}{qw< status reason content >}; + } } # @@ -336,8 +341,9 @@ else { wget $package_url, $package_file; } + my $cpan_mod = $info->{MAIN_MODULE} // $module; open my $fh, '<', $package_file; - (my $new_line) = grep {/^$cpan_mod/} <$fh> # Yes, this needs a lot of memory + (my $new_line) = grep {/^\Q$cpan_mod\E /} <$fh> # Yes, this needs a lot of memory or die "Cannot find $cpan_mod on CPAN\n"; (undef, $new_version, my $new_path) = split ' ', $new_line; if (defined $version) { @@ -392,7 +398,7 @@ if ($$info {EXCLUDED}) { FILE: for my $file ( find_type_f( $new_dir )) { my $old_file = $file; - $file =~ s{^$new_dir/}{}; + $file =~ s{^\Q$new_dir\E/}{}; next if $EXCLUDED_QQ{$file}; for my $qr (@EXCLUDED_QR) { @@ -660,15 +666,20 @@ print <<"EOF"; ======================================================================= -$o_module is now at version $new_version -Next, you should run a "make test". +$module is now at version $new_version +Next, you should run "make minitest" and then "make test". + +Minitest uses miniperl, which does not support XS modules. The full test +suite uses perl, which does. Minitest can fail - e.g. if a cpan module +has added an XS dependency - even if the full test suite passes just fine. -Hopefully that will complete successfully, but if not, you can make any +Hopefully all will complete successfully, but if not, you can make any changes you need to get the tests to pass. Don't forget that you'll need a "CUSTOMIZED" entry in Porting/Maintainers.pl if you change any of the files under cpan/$pkg_dir. -Once all tests pass, you can "git add -u" and "git commit" the changes. +Once all tests pass, you can "git add -u" and "git commit" the changes +with a message along the lines of "Update Foo::Bar to v1.234". EOF diff --git a/gnu/usr.bin/perl/Porting/todo.pod b/gnu/usr.bin/perl/Porting/todo.pod index 493fe19788d..a775b201272 100644 --- a/gnu/usr.bin/perl/Porting/todo.pod +++ b/gnu/usr.bin/perl/Porting/todo.pod @@ -10,8 +10,8 @@ is at L. The tasks we think are smaller or easier are listed first. Anyone is welcome to work on any of these, but it's a good idea to first contact I to avoid duplication of effort, and to learn from -any previous attempts. By all means contact a pumpking privately first if you -prefer. +any previous attempts. By all means contact the Steering Council privately +first if you prefer. Whilst patches to make the list shorter are most welcome, ideas to add to the list are also encouraged. Check the perl5-porters archives for past @@ -77,7 +77,7 @@ automated with a bit of perl, specifically the generation of =back -See F for details. +See L for details. =head2 Make Schwern poorer @@ -486,7 +486,7 @@ Natively 64-bit systems need neither -Duse64bitint nor -Duse64bitall. On these systems, it might be the default compilation mode, and there is currently no guarantee that passing no use64bitall option to the Configure process will build a 32bit perl. Implementing -Duse32bit* -options would be nice for perl 5.32.1. +options would be nice for perl 5.36.0. =head2 Profile Perl - am I hot or not? @@ -760,7 +760,7 @@ L. Currently the %ENV entries are always byte strings. See L. -(See RT ticket #113536 for information on Win32's handling of %ENV, +(See github issue gh12161 for information on Win32's handling of %ENV, which was fixed to work with native ANSI codepage characters in the environment, but still doesn't work with other characters outside of that codepage present in the environment.) @@ -943,8 +943,8 @@ This does not: $ perl -we 'my $pie = 42' Logically all lexicals used only once should warn, if the user asks for -warnings. An unworked RT ticket (#5087) has been open for almost seven -years for this discrepancy. +warnings. An unworked ticket (gh3073) was open for many years for this +discrepancy. =head2 state variable initialization in list context @@ -996,9 +996,9 @@ demonstrated. =head2 C regex modifier That flag would enable to match whole words, and also to interpolate -arrays as alternations. With it, C

would be roughly equivalent to: +arrays as alternations. With it, C would be roughly equivalent to: - do { local $"='|'; /\b(?:P)\b/ } + do { local $"='|'; m/\b(?:P)\b/ } See L @@ -1165,12 +1165,6 @@ combines the code in pp_entersub, pp_leavesub. This should probably be done 1st in XS, and using B::Generate to patch the new OP into the optrees. -=head2 Add C<0odddd> - -It has been proposed that octal constants be specifiable through the syntax -C<0oddddd>, parallel to the existing construct to specify hex constants -C<0xddddd> - =head2 Revisit the regex super-linear cache code Perl executes regexes using the traditional backtracking algorithm, which @@ -1189,7 +1183,7 @@ L =head1 Big projects Tasks that will get your name mentioned in the description of the "Highlights -of 5.32.1" +of 5.36.0" =head2 make ithreads more robust diff --git a/gnu/usr.bin/perl/README b/gnu/usr.bin/perl/README index 859122434fa..75628f153a7 100644 --- a/gnu/usr.bin/perl/README +++ b/gnu/usr.bin/perl/README @@ -1,6 +1,7 @@ Perl is Copyright (C) 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011, 2012, -2013, 2014, 2015, 2016, 2017, 2018, 2019, 2020, 2021 by Larry Wall and others. +2013, 2014, 2015, 2016, 2017, 2018, 2019, 2020, 2021, 2022 +by Larry Wall and others. All rights reserved. diff --git a/gnu/usr.bin/perl/README.bs2000 b/gnu/usr.bin/perl/README.bs2000 index bfed5d5e487..d34cc7ce038 100644 --- a/gnu/usr.bin/perl/README.bs2000 +++ b/gnu/usr.bin/perl/README.bs2000 @@ -137,7 +137,7 @@ instead: : # use perl eval 'exec /usr/local/bin/perl -S $0 ${1+"$@"}' - if $running_under_some_shell; + if 0; # ^ Run only under a shell =head2 Using Perl in "native" BS2000 diff --git a/gnu/usr.bin/perl/README.cygwin b/gnu/usr.bin/perl/README.cygwin index 5885ac5f694..ab9814a7d3d 100644 --- a/gnu/usr.bin/perl/README.cygwin +++ b/gnu/usr.bin/perl/README.cygwin @@ -576,7 +576,6 @@ be kept as clean as possible. lib/ExtUtils/NOTES lib/ExtUtils/PATCHING lib/ExtUtils/README lib/Net/Ping/Changes lib/Test/Harness/Changes lib/Term/ANSIColor/ChangeLog lib/Term/ANSIColor/README - README.symbian symbian/TODO =item Build, Configure, Make, Install @@ -595,12 +594,9 @@ be kept as clean as possible. makedepend.SH - uwinfix regen_lib.pl - file permissions - NetWare/Makefile plan9/mkfile - symbian/sanity.pl symbian/sisify.pl - hints/uwin.sh vms/descrip_mms.template - win32/Makefile win32/makefile.mk + win32/Makefile =item Tests diff --git a/gnu/usr.bin/perl/README.dos b/gnu/usr.bin/perl/README.dos deleted file mode 100644 index ef3578f8894..00000000000 --- a/gnu/usr.bin/perl/README.dos +++ /dev/null @@ -1,331 +0,0 @@ -If you read this file _as_is_, just ignore the funny characters you -see. It is written in the POD format (see perlpod manpage) which is -specially designed to be readable as is. - -=head1 NAME - -perldos - Perl under DOS, W31, W95. - -=head1 SYNOPSIS - -These are instructions for building Perl under DOS (or w??), using -DJGPP v2.03 or later. Under w95 long filenames are supported. - -=head1 DESCRIPTION - -Before you start, you should glance through the README file -found in the top-level directory where the Perl distribution -was extracted. Make sure you read and understand the terms under -which this software is being distributed. - -This port currently supports MakeMaker (the set of modules that -is used to build extensions to perl). Therefore, you should be -able to build and install most extensions found in the CPAN sites. - -Detailed instructions on how to build and install perl extension -modules, including XS-type modules, is included. See 'BUILDING AND -INSTALLING MODULES'. - -=head2 Prerequisites for Compiling Perl on DOS - -=over 4 - -=item DJGPP - -DJGPP is a port of GNU C/C++ compiler and development tools to 32-bit, -protected-mode environment on Intel 32-bit CPUs running MS-DOS and compatible -operating systems, by DJ Delorie and friends. - -For more details (FAQ), check out the home of DJGPP at: - - http://www.delorie.com/djgpp/ - -If you have questions about DJGPP, try posting to the DJGPP newsgroup: -comp.os.msdos.djgpp, or use the email gateway djgpp@delorie.com. - -You can find the full DJGPP distribution on any of the mirrors listed here: - - http://www.delorie.com/djgpp/getting.html - -You need the following files to build perl (or add new modules): - - v2/djdev203.zip - v2gnu/bnu2112b.zip - v2gnu/gcc2953b.zip - v2gnu/bsh204b.zip - v2gnu/mak3791b.zip - v2gnu/fil40b.zip - v2gnu/sed3028b.zip - v2gnu/txt20b.zip - v2gnu/dif272b.zip - v2gnu/grep24b.zip - v2gnu/shl20jb.zip - v2gnu/gwk306b.zip - v2misc/csdpmi5b.zip - -or possibly any newer version. - -=item Pthreads - -Thread support is not tested in this version of the djgpp perl. - -=back - -=head2 Shortcomings of Perl under DOS - -Perl under DOS lacks some features of perl under UNIX because of -deficiencies in the UNIX-emulation, most notably: - -=over 4 - -=item * - -fork() and pipe() - -=item * - -some features of the UNIX filesystem regarding link count and file dates - -=item * - -in-place operation is a little bit broken with short filenames - -=item * - -sockets - -=back - -=head2 Building Perl on DOS - -=over 4 - -=item * - -Unpack the source package F with djtarx. If you want -to use long file names under w95 and also to get Perl to pass all its -tests, don't forget to use - - set LFN=y - set FNCASE=y - -before unpacking the archive. - -=item * - -Create a "symlink" or copy your bash.exe to sh.exe in your C<($DJDIR)/bin> -directory. - - ln -s bash.exe sh.exe - -[If you have the recommended version of bash for DJGPP, this is already -done for you.] - -And make the C environment variable point to this F: - - set SHELL=c:/djgpp/bin/sh.exe (use full path name!) - -You can do this in F too. Add this line BEFORE any section -definition: - - +SHELL=%DJDIR%/bin/sh.exe - -=item * - -If you have F and F in your path, then rename -F to F, and F to F. -Copy or link F to F if you don't have F. -Copy or link F to F if you don't have F. - -[If you have the recommended versions of djdev, shell utilities and -gawk, all these are already done for you, and you will not need to do -anything.] - -=item * - -Chdir to the djgpp subdirectory of perl toplevel and type the following -commands: - - set FNCASE=y - configure.bat - -This will do some preprocessing then run the Configure script for you. -The Configure script is interactive, but in most cases you just need to -press ENTER. The "set" command ensures that DJGPP preserves the letter -case of file names when reading directories. If you already issued this -set command when unpacking the archive, and you are in the same DOS -session as when you unpacked the archive, you don't have to issue the -set command again. This command is necessary *before* you start to -(re)configure or (re)build perl in order to ensure both that perl builds -correctly and that building XS-type modules can succeed. See the DJGPP -info entry for "_preserve_fncase" for more information: - - info libc alphabetical _preserve_fncase - -If the script says that your package is incomplete, and asks whether -to continue, just answer with Y (this can only happen if you don't use -long filenames or forget to issue "set FNCASE=y" first). - -When Configure asks about the extensions, I suggest IO and Fcntl, -and if you want database handling then SDBM_File or GDBM_File -(you need to install gdbm for this one). If you want to use the -POSIX extension (this is the default), make sure that the stack -size of your F is at least 512kbyte (you can check this -with: C). - -You can use the Configure script in non-interactive mode too. -When I built my F, I used something like this: - - configure.bat -des - -You can find more info about Configure's command line switches in -the F file. - -When the script ends, and you want to change some values in the -generated F file, then run - - sh Configure -S - -after you made your modifications. - -IMPORTANT: if you use this C<-S> switch, be sure to delete the CONFIG -environment variable before running the script: - - set CONFIG= - -=item * - -Now you can compile Perl. Type: - - make - -=back - -=head2 Testing Perl on DOS - -Type: - - make test - -If you're lucky you should see "All tests successful". But there can be -a few failed subtests (less than 5 hopefully) depending on some external -conditions (e.g. some subtests fail under linux/dosemu or plain dos -with short filenames only). - -=head2 Installation of Perl on DOS - -Type: - - make install - -This will copy the newly compiled perl and libraries into your DJGPP -directory structure. Perl.exe and the utilities go into C<($DJDIR)/bin>, -and the library goes under C<($DJDIR)/lib/perl5>. The pod documentation -goes under C<($DJDIR)/lib/perl5/pod>. - -=head1 BUILDING AND INSTALLING MODULES ON DOS - -=head2 Building Prerequisites for Perl on DOS - -For building and installing non-XS modules, all you need is a working -perl under DJGPP. Non-XS modules do not require re-linking the perl -binary, and so are simpler to build and install. - -XS-type modules do require re-linking the perl binary, because part of -an XS module is written in "C", and has to be linked together with the -perl binary to be executed. This is required because perl under DJGPP -is built with the "static link" option, due to the lack of "dynamic -linking" in the DJGPP environment. - -Because XS modules require re-linking of the perl binary, you need both -the perl binary distribution and the perl source distribution to build -an XS extension module. In addition, you will have to have built your -perl binary from the source distribution so that all of the components -of the perl binary are available for the required link step. - -=head2 Unpacking CPAN Modules on DOS - -First, download the module package from CPAN (e.g., the "Comma Separated -Value" text package, Text-CSV-0.01.tar.gz). Then expand the contents of -the package into some location on your disk. Most CPAN modules are -built with an internal directory structure, so it is usually safe to -expand it in the root of your DJGPP installation. Some people prefer to -locate source trees under /usr/src (i.e., C<($DJDIR)/usr/src>), but you may -put it wherever seems most logical to you, *EXCEPT* under the same -directory as your perl source code. There are special rules that apply -to modules which live in the perl source tree that do not apply to most -of the modules in CPAN. - -Unlike other DJGPP packages, which are normal "zip" files, most CPAN -module packages are "gzipped tarballs". Recent versions of WinZip will -safely unpack and expand them, *UNLESS* they have zero-length files. It -is a known WinZip bug (as of v7.0) that it will not extract zero-length -files. - -From the command line, you can use the djtar utility provided with DJGPP -to unpack and expand these files. For example: - - C:\djgpp>djtarx -v Text-CSV-0.01.tar.gz - -This will create the new directory C<($DJDIR)/Text-CSV-0.01>, filling -it with the source for this module. - -=head2 Building Non-XS Modules on DOS - -To build a non-XS module, you can use the standard module-building -instructions distributed with perl modules. - - perl Makefile.PL - make - make test - make install - -This is sufficient because non-XS modules install only ".pm" files and -(sometimes) pod and/or man documentation. No re-linking of the perl -binary is needed to build, install or use non-XS modules. - -=head2 Building XS Modules on DOS - -To build an XS module, you must use the standard module-building -instructions distributed with perl modules *PLUS* three extra -instructions specific to the DJGPP "static link" build environment. - - set FNCASE=y - perl Makefile.PL - make - make perl - make test - make -f Makefile.aperl inst_perl MAP_TARGET=perl.exe - make install - -The first extra instruction sets DJGPP's FNCASE environment variable so -that the new perl binary which you must build for an XS-type module will -build correctly. The second extra instruction re-builds the perl binary -in your module directory before you run "make test", so that you are -testing with the new module code you built with "make". The third extra -instruction installs the perl binary from your module directory into the -standard DJGPP binary directory, C<($DJDIR)/bin>, replacing your -previous perl binary. - -Note that the MAP_TARGET value *must* have the ".exe" extension or you -will not create a "perl.exe" to replace the one in C<($DJDIR)/bin>. - -When you are done, the XS-module install process will have added information -to your "perllocal" information telling that the perl binary has been replaced, -and what module was installed. You can view this information at any time -by using the command: - - perl -S perldoc perllocal - -=head1 AUTHOR - -Laszlo Molnar, F [Installing/building perl] - -Peter J. Farley III F [Building/installing modules] - -=head1 SEE ALSO - -perl(1). - -=cut - diff --git a/gnu/usr.bin/perl/README.haiku b/gnu/usr.bin/perl/README.haiku index 784eadc473d..cd142d0329b 100644 --- a/gnu/usr.bin/perl/README.haiku +++ b/gnu/usr.bin/perl/README.haiku @@ -22,9 +22,9 @@ The build procedure is completely standard: Make perl executable and create a symlink for libperl: chmod a+x /boot/common/bin/perl - cd /boot/common/lib; ln -s perl5/5.32.1/BePC-haiku/CORE/libperl.so . + cd /boot/common/lib; ln -s perl5/5.36.0/BePC-haiku/CORE/libperl.so . -Replace C<5.32.1> with your respective version of Perl. +Replace C<5.36.0> with your respective version of Perl. =head1 KNOWN PROBLEMS diff --git a/gnu/usr.bin/perl/README.irix b/gnu/usr.bin/perl/README.irix index 2968a6072b8..09b655c8eee 100644 --- a/gnu/usr.bin/perl/README.irix +++ b/gnu/usr.bin/perl/README.irix @@ -57,7 +57,7 @@ Some Irix cc versions, e.g. 7.3.1.1m (try cc -version) have been known to have issues (coredumps) when compiling perl.c. If you've used -OPT:fast_io=ON and this happens, try removing it. If that fails, or you didn't use that, then try adjusting other optimization options -(-LNO, -INLINE, -O3 to -O2, etcetera). The compiler bug has been +(-LNO, -INLINE, -O3 to -O2, et cetera). The compiler bug has been reported to SGI. (Allen Smith ) =head2 Linker Problems in Irix @@ -114,7 +114,7 @@ Ignore the warning. In IRIX 5.3 and with Perl 5.8.1 (Perl 5.8.0 didn't compile in IRIX 5.3) the following failures are known. - Failed Test Stat Wstat Total Fail Failed List of Failed + Failed Test Stat Wstat Total Fail Failed|Failing List ----------------------------------------------------------------------- ../ext/List/Util/t/shuffle.t 0 139 ?? ?? % ?? ../lib/Math/Trig.t 255 65280 29 12 41.38% 24-29 diff --git a/gnu/usr.bin/perl/README.macos b/gnu/usr.bin/perl/README.macos deleted file mode 100644 index fdafa90d59a..00000000000 --- a/gnu/usr.bin/perl/README.macos +++ /dev/null @@ -1,30 +0,0 @@ -If you read this file _as_is_, just ignore the funny characters you see. -It is written in the POD format (see pod/perlpod.pod) which is specially -designed to be readable as is. - -=head1 NAME - -perlmacos - Perl under Mac OS (Classic) - -=head1 SYNOPSIS - -For Mac OS X see README.macosx - -Perl under Mac OS Classic has not been supported since before Perl 5.10 -(April 2004). - -When we say "Mac OS" below, we mean Mac OS 7, 8, and 9, and I -Mac OS X. - -=head1 DESCRIPTION - -The port of Perl to Mac OS was officially removed as of Perl 5.12, -though the last official production release of MacPerl corresponded to -Perl 5.6. While Perl 5.10 included the port to Mac OS, ExtUtils::MakeMaker, -a core part of Perl's module installation infrastructure officially dropped support for Mac OS in April 2004. - -=head1 AUTHOR - -Perl was ported to Mac OS by Matthias Neeracher -Eneeracher@mac.comE. Chris Nandor Epudge@pobox.comE -continued development and maintenance for the duration of the port's life. diff --git a/gnu/usr.bin/perl/README.macosx b/gnu/usr.bin/perl/README.macosx index 3ebfc6df16d..407b01d2bdb 100644 --- a/gnu/usr.bin/perl/README.macosx +++ b/gnu/usr.bin/perl/README.macosx @@ -10,9 +10,9 @@ perlmacosx - Perl under Mac OS X This document briefly describes Perl under Mac OS X. - curl -O https://www.cpan.org/src/perl-5.32.1.tar.gz - tar -xzf perl-5.32.1.tar.gz - cd perl-5.32.1 + curl -O https://www.cpan.org/src/perl-5.36.0.tar.gz + tar -xzf perl-5.36.0.tar.gz + cd perl-5.36.0 ./Configure -des -Dprefix=/usr/local/ make make test @@ -20,7 +20,7 @@ This document briefly describes Perl under Mac OS X. =head1 DESCRIPTION -The latest Perl release (5.32.1 as of this writing) builds without changes +The latest Perl release (5.36.0 as of this writing) builds without changes under all versions of Mac OS X from 10.3 "Panther" onwards. In order to build your own version of Perl you will need 'make', diff --git a/gnu/usr.bin/perl/README.netware b/gnu/usr.bin/perl/README.netware deleted file mode 100644 index 4e35f39c304..00000000000 --- a/gnu/usr.bin/perl/README.netware +++ /dev/null @@ -1,229 +0,0 @@ -If you read this file _as_is_, just ignore the funny characters you -see. It is written in the POD format (see pod/perlpod.pod) which is -specifically designed to be readable as is. - -=head1 NAME - -perlnetware - Perl for NetWare - -=head1 DESCRIPTION - -This file gives instructions for building Perl 5.7 and above, and also -Perl modules for NetWare. Before you start, you may want to read the -README file found in the top level directory into which the Perl source -code distribution was extracted. Make sure you read and understand -the terms under which the software is being distributed. - -=head1 BUILD - -This section describes the steps to be performed to build a Perl NLM -and other associated NLMs. - -=head2 Tools & SDK - -The build requires CodeWarrior compiler and linker. In addition, -the "NetWare SDK", "NLM & NetWare Libraries for C" and -"NetWare Server Protocol Libraries for C", all available at -L, -are required. Microsoft Visual C++ version 4.2 or later is also -required. - -=head2 Setup - -The build process is dependent on the location of the NetWare SDK. -Once the Tools & SDK are installed, the build environment has to -be setup. The following batch files setup the environment. - -=over 4 - -=item SetNWBld.bat - -The Execution of this file takes 2 parameters as input. The first -being the NetWare SDK path, second being the path for CodeWarrior -Compiler & tools. Execution of this file sets these paths and also -sets the build type to Release by default. - -=item Buildtype.bat - -This is used to set the build type to debug or release. Change the -build type only after executing SetNWBld.bat - -Example: - -=over - -=item 1. - -Typing "buildtype d on" at the command prompt causes the buildtype -to be set to Debug type with D2 flag set. - -=item 2. - -Typing "buildtype d off" or "buildtype d" at the command prompt causes -the buildtype to be set to Debug type with D1 flag set. - -=item 3. - -Typing "buildtype r" at the command prompt sets it to Release Build type. - -=back - -=back - -=head2 Make - -The make process runs only under WinNT shell. The NetWare makefile is -located under the NetWare folder. This makes use of miniperl.exe to -run some of the Perl scripts. To create miniperl.exe, first set the -required paths for Visual c++ compiler (specify vcvars32 location) at -the command prompt. Then run nmake from win32 folder through WinNT -command prompt. The build process can be stopped after miniperl.exe -is created. Then run nmake from NetWare folder through WinNT command -prompt. - -Currently the following two build types are tested on NetWare: - -=over 4 - -=item * - -USE_MULTI, USE_ITHREADS & USE_IMP_SYS defined - -=item * - -USE_MULTI & USE_IMP_SYS defined and USE_ITHREADS not defined - -=back - -=head2 Interpreter - -Once miniperl.exe creation is over, run nmake from the NetWare folder. -This will build the Perl interpreter for NetWare as I. -This is copied under the I folder if you are doing -a release build, else will be copied under I folder for debug builds. - -=head2 Extensions - -The make process also creates the Perl extensions as I<.nlm> - -=head1 INSTALL - -To install NetWare Perl onto a NetWare server, first map the Sys -volume of a NetWare server to I. This is because the makefile by -default sets the drive letter to I. Type I from -NetWare folder on a WinNT command prompt. This will copy the binaries -and module files onto the NetWare server under I -folder. The Perl interpreter, I, is copied under -I folder. Copy this to I folder. - -Example: At the command prompt Type "nmake nwinstall". - This will install NetWare Perl on the NetWare Server. - Similarly, if you type "nmake install", - this will cause the binaries to be installed on the local machine. - (Typically under the c:\perl folder) - -=head1 BUILD NEW EXTENSIONS - -To build extensions other than standard extensions, NetWare Perl has -to be installed on Windows along with Windows Perl. The Perl for -Windows can be either downloaded from the CPAN site and built using -the sources, or the binaries can be directly downloaded from the -ActiveState site. Installation can be done by invoking I from the NetWare folder on a WinNT command prompt after -building NetWare Perl by following steps given above. This will copy -all the *.pm files and other required files. Documentation files are -not copied. Thus one must first install Windows Perl, Then install -NetWare Perl. - -Once this is done, do the following to build any extension: - -=over 4 - -=item * - -Change to the extension directory where its source files are present. - -=item * - -Run the following command at the command prompt: - - perl -II -II Makefile.pl - -Example: - - perl -Ic:/perl/5.6.1/lib/NetWare-x86-multi-thread \ - -Ic:\perl\5.6.1\lib MakeFile.pl - -or - - perl -Ic:/perl/5.8.0/lib/NetWare-x86-multi-thread \ - -Ic:\perl\5.8.0\lib MakeFile.pl - -=item * - -nmake - -=item * - -nmake install - -Install will copy the files into the Windows machine where NetWare -Perl is installed and these files may have to be copied to the NetWare -server manually. Alternatively, pass I as -an input to makefile.pl above. Here I is the mapped drive to the -sys: volume of the server where Perl on NetWare is installed. Now -typing I, will copy the files onto the NetWare server. - -Example: You can execute the following on the command prompt. - - perl -Ic:/perl/5.6.1/lib/NetWare-x86-multi-thread \ - -Ic:\perl\5.6.1\lib MakeFile.pl - INSTALLSITELIB=i:\perl\lib - -or - - perl -Ic:/perl/5.8.0/lib/NetWare-x86-multi-thread \ - -Ic:\perl\5.8.0\lib MakeFile.pl - INSTALLSITELIB=i:\perl\lib - -=item * - -Note: Some modules downloaded from CPAN may require NetWare related -API in order to build on NetWare. Other modules may however build -smoothly with or without minor changes depending on the type of -module. - -=back - -=head1 ACKNOWLEDGEMENTS - -The makefile for Win32 is used as a reference to create the makefile -for NetWare. Also, the make process for NetWare port uses -miniperl.exe to run scripts during the make and installation process. - -=head1 AUTHORS - -Anantha Kesari H Y (hyanantha@novell.com) -Aditya C (caditya@novell.com) - -=head1 DATE - -=over 4 - -=item * - -Created - 18 Jan 2001 - -=item * - -Modified - 25 June 2001 - -=item * - -Modified - 13 July 2001 - -=item * - -Modified - 28 May 2002 - -=back diff --git a/gnu/usr.bin/perl/README.os2 b/gnu/usr.bin/perl/README.os2 index 1c7cd661ddc..a3fe1dfc8fa 100644 --- a/gnu/usr.bin/perl/README.os2 +++ b/gnu/usr.bin/perl/README.os2 @@ -196,8 +196,8 @@ Cf. L. EMX runtime is required (may be substituted by RSX). Note that it is possible to make F to run under DOS without any -external support by binding F/F to it, see C. Note -that under DOS for best results one should use RSX runtime, which +external support by binding F/F to it, see L. +Note that under DOS for best results one should use RSX runtime, which has much more functions working (like C, C and so on). In fact RSX is required if there is no VCPI present. Note the RSX requires DPMI. Many implementations of DPMI are known to be very @@ -300,7 +300,7 @@ with perl ../../blah/foo.cmd arg1 arg2 arg3 (note that the argument C<-my_opts> is taken care of by the C line -in your script, see L on the first line>). +in your script, see C> on the first line). To understand what the above I does, read perl docs about C<-S> switch - see L, and cmdref about C: @@ -558,7 +558,7 @@ of this file. B. Because of a typo the binary installer of 5.00305 would install a variable C into F. Please -remove this variable and put L> instead. +remove this variable and put C> instead. =head2 Manual binary installation @@ -619,7 +619,7 @@ C in F, see L">. =item Additional Perl modules - unzip perl_ste.zip -d f:/perllib/lib/site_perl/5.32.1/ + unzip perl_ste.zip -d f:/perllib/lib/site_perl/5.36.0/ Same remark as above applies. Additionally, if this directory is not one of directories on @INC (and @INC is influenced by C), you @@ -1367,7 +1367,7 @@ to find Perl DLL relatively to the location of the EXE file; or one may want to ignore the environment when setting the Perl-library search patch, etc. If you fill comfortable with I interface (see L), such -things are easy to do repeating the steps outlined in L/, and doing more comprehensive edits to main() of F. The people with little desire to understand Perl can just rename main(), and do necessary @@ -2434,7 +2434,7 @@ would not. =head2 Priorities C and C are not compatible with earlier -ports by Andreas Kaiser. See C<"setpriority, getpriority">. +ports by Andreas Kaiser. See L. =head2 DLL name mangling: pre 5.6.2 diff --git a/gnu/usr.bin/perl/README.os390 b/gnu/usr.bin/perl/README.os390 index a06e93f9564..8ec684608a4 100644 --- a/gnu/usr.bin/perl/README.os390 +++ b/gnu/usr.bin/perl/README.os390 @@ -1,231 +1,266 @@ This document is written in pod format hence there are punctuation -characters in odd places. Do not worry, you have apparently got the -ASCII->EBCDIC translation worked out correctly. You can read more +characters in odd places. You can read more about pod in pod/perlpod.pod or the short summary in the INSTALL file. =head1 NAME -perlos390 - building and installing Perl for OS/390 and z/OS +perlos390 - building and installing Perl for z/OS (previously called OS/390) =head1 SYNOPSIS This document will help you Configure, build, test and install Perl -on OS/390 (aka z/OS) Unix System Services. - -B.> +on z/OS Unix System Services. =head1 DESCRIPTION -This is a fully ported Perl for OS/390 Version 2 Release 3, 5, 6, 7, -8, and 9. It may work on other versions or releases, but those are -the ones we have tested it on. +This is a ported Perl for z/OS. It has been tested on z/OS 2.4 and +should work fine with z/OS 2.5. +It may work on other versions or releases, but those are +the ones it has been tested on. -You may need to carry out some system configuration tasks before -running the Configure script for Perl. +The native character set for z/OS is EBCDIC, but it can also run in ASCII mode. +Perl can support either, but you have to compile it explicitly for one or the +other. You could have both an ASCII perl, and an EBCDIC perl on the same +machine. If you use ASCII mode and an ASCII perl, the Encode module shipped +with perl can be used to translate files from various EBCDIC code pages for +handling by perl, and then back on output +This document describes how to build a 64-bit Dynamic Perl, either ASCII or +EBCDIC. You can interactively choose other configurations, as well as many +other options in the Configure script that is run as part of the build +process. You may need to carry out some system configuration tasks before +running Configure, as detailed below. =head2 Tools -The z/OS Unix Tools and Toys list may prove helpful and contains links -to ports of much of the software helpful for building Perl. -L +You will want to get GNU make 4.1 or later. GNU make can be downloaded from a +port that Rocket Software provides. You will need the z/OS c99 compiler from +IBM (though xlc in c99 mode without optimization turned on works in EBCDIC). +If you want the latest development version of Perl, you will need git. +You can use git on another platform and transfer the result via sftp or ftp to +z/OS. But there is a z/OS native git client port available through Rocket +Software. -=head2 Unpacking Perl distribution on OS/390 +You may also need the gunzip client port that Rocket Software provides to unzip +any zipped tarball you upload to z/OS. -If using ftp remember to transfer the distribution in binary format. +=head2 Building a 64-bit Dynamic ASCII Perl -Gunzip/gzip for OS/390 is discussed at: +For building from an official stable release of Perl, go to +L and choose any one of the +"Download latest stable source" buttons. This will get you a tarball. The +name of that tarball will be something like 'perl-V.R.M,tar,gz', where V.R.M is +the version/release/modification of the perl you are downloading. Do - http://www.ibm.com/servers/eserver/zseries/zos/unix/bpxa1ty1.html + gunzip perl-V.R.M.tar.gz -to extract an ASCII tar archive on OS/390, try this: +Then one of: - pax -o to=IBM-1047,from=ISO8859-1 -r < latest.tar + tar -xvf perl-V.R.M.tar -or + pax -r -f perl-V.R.M.tar - zcat latest.tar.Z | pax -o to=IBM-1047,from=ISO8859-1 -r +Either of these will create the source directory. You can rename it to +whatever you like; for these instructions, 'perl' is assumed to be the name. -If you get lots of errors of the form +If instead you want the latest unstable development release, using the native +git on z/OS, clone Perl: - tar: FSUM7171 ...: cannot set uid/gid: EDC5139I Operation not permitted + git clone https://github.com/Perl/perl5.git perl -you did not read the above and tried to use tar instead of pax, you'll -first have to remove the (now corrupt) perl directory +Either way, once you have a 'perl' directory containing the source, cd into it, +and tag all the code as ASCII: - rm -rf perl-... + cd perl + chtag -R -h -t -cISO8859-1 * -and then use pax. +Configure the build environment as 64-bit, Dynamic, ASCII, development, +deploying it to F: -=head2 Setup and utilities for Perl on OS/390 + export PATH=$PWD:$PATH + export LIBPATH=$PWD:$PATH + ./Configure -Dprefix=/usr/local/perl/ascii -des -Dusedevel \ + -Duse64bitall -Dusedl -Be sure that your yacc installation is in place including any necessary -parser template files. If you have not already done so then be sure to: +If you are building from a stable source, you don't need "-Dusedevel". +(If you run Configure without options, it will interactively ask you about +every possible option based on its probing of what's available on your +particular machine, so you can choose as you go along.) - cp /samples/yyparse.c /etc +Run GNU make to build Perl -This may also be a good time to ensure that your /etc/protocol file -and either your /etc/resolv.conf or /etc/hosts files are in place. -The IBM document that described such USS system setup issues was -SC28-1890-07 "OS/390 UNIX System Services Planning", in particular -Chapter 6 on customizing the OE shell. + make -GNU make for OS/390, which is recommended for the build of perl (as -well as building CPAN modules and extensions), is available from the -L. +Run tests to ensure Perl is working correctly. Currently, there are about a +dozen failing tests out of nearly 2500 -Some people have reported encountering "Out of memory!" errors while -trying to build Perl using GNU make binaries. If you encounter such -trouble then try to download the source code kit and build GNU make -from source to eliminate any such trouble. You might also find GNU make -(as well as Perl and Apache) in the red-piece/book "Open Source Software -for OS/390 UNIX", SG24-5944-00 from IBM. + make test_harness -If instead of the recommended GNU make you would like to use the system -supplied make program then be sure to install the default rules file -properly via the shell command: +Install Perl into F: - cp /samples/startup.mk /etc + make install -and be sure to also set the environment variable _C89_CCMODE=1 (exporting -_C89_CCMODE=1 is also a good idea for users of GNU make). +=head2 Building a 64-bit Dynamic EBCDIC Perl -You might also want to have GNU groff for OS/390 installed before -running the "make install" step for Perl. +You will need a working perl on some box with connectivity to the destination +machine. On z/OS, it could be an ASCII perl, or a previous EBCDIC one. +Many machines will already have a pre-built perl already running, or one can +easily be downloaded from L. -There is a syntax error in the /usr/include/sys/socket.h header file -that IBM supplies with USS V2R7, V2R8, and possibly V2R9. The problem with -the header file is that near the definition of the SO_REUSEPORT constant -there is a spurious extra '/' character outside of a comment like so: +Follow the directions above in "Building a 64-bit Dynamic ASCII Perl" as far as +getting a populated 'perl' directory. Then come back here to proceed. - #define SO_REUSEPORT 0x0200 /* allow local address & port - reuse */ / +The downloaded perl will need to be converted to 1047 EBCDIC. To do this: -You could edit that header yourself to remove that last '/', or you might -note that Language Environment (LE) APAR PQ39997 describes the problem -and PTF's UQ46272 and UQ46271 are the (R8 at least) fixes and apply them. -If left unattended that syntax error will turn up as an inability for Perl -to build its "Socket" extension. + cd perl + Porting/makerel -e -For successful testing you may need to turn on the sticky bit for your -world readable /tmp directory if you have not already done so (see man chmod). +If the Porting/makerel step fails with an error that it can not issue the tar +command, proceed to issue the command interactively, where V.R.M is the +version/release/modification of Perl you are uploading: -=head2 Configure Perl on OS/390 + cd ../ + tar cf - --format=ustar perl-V.R.M | gzip --best > perl-V.R.M.tar.gz -Once you have unpacked the distribution, run "sh Configure" (see INSTALL -for a full discussion of the Configure options). There is a "hints" file -for os390 that specifies the correct values for most things. Some things -to watch out for include: +Use sftp to upload the zipped tar file to z/OS: -=head3 Shell + sftp + cd /tmp + put perl-V.R.M.tar.gz -A message of the form: +Unzip and untar the zipped tar file on z/OS: - (I see you are using the Korn shell. Some ksh's blow up on Configure, - mainly on older exotic systems. If yours does, try the Bourne shell instead.) + cd /tmp + gunzip perl-V.R.M.tar.gz -is nothing to worry about at all. +Then one of: -=head3 Samples + tar -xvf perl-V.R.M.tar -Some of the parser default template files in /samples are needed in /etc. -In particular be sure that you at least copy /samples/yyparse.c to /etc -before running Perl's Configure. This step ensures successful extraction -of EBCDIC versions of parser files such as perly.c and perly.h. -This has to be done before running Configure the first time. If you failed -to do so then the easiest way to re-Configure Perl is to delete your -misconfigured build root and re-extract the source from the tar ball. -Then you must ensure that /etc/yyparse.c is properly in place before -attempting to re-run Configure. + pax -r -f perl-V.R.M.tar -=head3 Dynamic loading +You now have the source code for the EBCDIC Perl on z/OS and can proceed to +build it. This is analagous to how you would build the code for ASCII, but +note: you B tag the code but instead leave it untagged. -Dynamic loading is required if you want to use XS modules from CPAN (like -DBI (and DBD's), JSON::XS, and Text::CSV_XS) or update CORE modules from -CPAN with newer versions (like Encode) without rebuilding all of the perl -binary. +Configure the build environment as 64-bit, Dynamic, native, development, +deploying it to F: -This port will support dynamic loading, but it is not selected by -default. If you would like to experiment with dynamic loading then -be sure to specify -Dusedl in the arguments to the Configure script. -See the comments in hints/os390.sh for more information on dynamic loading. -If you build with dynamic loading then you will need to add the -$archlibexp/CORE directory to your LIBPATH environment variable in order -for perl to work. See the config.sh file for the value of $archlibexp. -If in trying to use Perl you see an error message similar to: + export PATH=$PWD:$PATH + export LIBPATH=$PWD:$PATH + ./Configure -Dprefix=/usr/local/perl/ebcdic -des -Dusedevel \ + -Duse64bitall -Dusedl - CEE3501S The module libperl.dll was not found. - From entry point __dllstaticinit at compile unit offset +00000194 - at +If you are building from a stable source, you don't need "-Dusedevel". +(If you run Configure without options, it will interactively ask you about +every possible option based on its probing of what's available on your +particular machine, so you can choose as you go along.) -then your LIBPATH does not have the location of libperl.x and either -libperl.dll or libperl.so in it. Add that directory to your LIBPATH and -proceed. +Run GNU make to build Perl -In hints/os390.sh, selecting -Dusedl will default to *also* select --Duseshrplib. Having a shared plib not only requires LIBPATH to be set to -the correct location of libperl.so but also makes it close to impossible -to run more than one different perl that was built this way at the same -time. + make -All objects that are involved in -Dusedl builds should be compiled for -this, probably by adding to all ccflags +Run tests to ensure Perl is working correctly. - -qexportall -qxplink -qdll -Wc,XPLINK,dll,EXPORTALL -Wl,XPLINK,dll + make test_harness -=head3 Optimizing +You might also want to have GNU groff for OS/390 installed before +running the "make install" step for Perl. -Do not turn on the compiler optimization flag "-O". There is -a bug in either the optimizer or perl that causes perl to -not work correctly when the optimizer is on. +Install Perl into F: + + make install + +EBCDIC Perl is still a work in progress. All the core code works as far as we +know, but various modules you might want to download from CPAN do not. The +failures range from very minor to catastrophic. Many of them are simply bugs +in the tests, with the module actually working properly. This happens because, +for example, the test is coded to expect a certain character ASCII code point; +when it gets the EBCDIC value back instead, it complains. But the code +actually worked. Other potential failures that aren't really failures stem +from checksums coming out differently, since C, for example, has a different +bit representation between the character sets. A test that is expecting the +ASCII value will show failure, even if the module is working perfectly. Also +in sorting, uppercase letters come before lowercase letters on ASCII systems; +the reverse on EBCDIC. + +Some CPAN modules come bundled with the downloaded perl. And a few of those +have yet to be fixed to pass on EBCDIC platforms. As a result they are skipped +when you run 'make test'. The current list is: + + Archive::Tar + Config::Perl::V + CPAN::Meta + CPAN::Meta::YAML + Digest::MD5 + Digest::SHA + Encode + ExtUtils::MakeMaker + ExtUtils::Manifest + HTTP::Tiny + IO::Compress + IPC::Cmd + JSON::PP + libnet + MIME::Base64 + Module::Metadata + PerlIO::via-QuotedPrint + Pod::Checker + podlators + Pod::Simple + Socket + Test::Harness + +See also F for other potential gotchas. -=head3 Config files +=head2 Setup and utilities for Perl on OS/390 -Some of the configuration files in /etc used by the -networking APIs are either missing or have the wrong -names. In particular, make sure that there's either -an /etc/resolv.conf or an /etc/hosts, so that -gethostbyname() works, and make sure that the file -/etc/proto has been renamed to /etc/protocol (NOT -/etc/protocols, as used by other Unix systems). -You may have to look for things like HOSTNAME and DOMAINORIGIN -in the "//'SYS1.TCPPARMS(TCPDATA)'" PDS member in order to -properly set up your /etc networking files. +This may also be a good time to ensure that your F file +and either your F or F files are in place. +The IBM document that describes such USS system setup issues is +"z/OS UNIX System Services Planning" -=head2 Build, Test, Install Perl on OS/390 +For successful testing you may need to turn on the sticky bit for your +world readable /tmp directory if you have not already done so (see man chmod). -Simply put: +=head2 Useful files for trouble-shooting - sh Configure - make - make test +If your configuration is failing, read hints/os390.sh +This file provides z/OS specific options to direct the build process. -if everything looks ok (see the next section for test/IVP diagnosis) then: +=head3 Shell - make install +A message of the form: + + (I see you are using the Korn shell. Some ksh's blow up on Configure, + mainly on older exotic systems. If yours does, try the Bourne shell + instead.) + +is nothing to worry about at all. + +=head3 Dynamic loading + +Dynamic loading is required if you want to use XS modules from CPAN (like +DBI (and DBD's), JSON::XS, and Text::CSV_XS) or update CORE modules from +CPAN with newer versions (like Encode) without rebuilding all of the perl +binary. -this last step may or may not require UID=0 privileges depending -on how you answered the questions that Configure asked and whether -or not you have write access to the directories you specified. +The instructions above will create a dynamic Perl. If you do not want to +use dynamic loading, remove the -Dusedl option. +See the comments in hints/os390.sh for more information on dynamic loading. + +=head3 Optimizing + +Optimization has not been turned on yet. There may be issues if Perl +is optimized. =head2 Build Anomalies with Perl on OS/390 "Out of memory!" messages during the build of Perl are most often fixed by re building the GNU make utility for OS/390 from a source code kit. -Building debugging-enabled binaries (with -g or -g3) will increase the -chance of getting these errors. Prevent -g if possible. - -Another memory limiting item to check is your MAXASSIZE parameter in your -'SYS1.PARMLIB(BPXPRMxx)' data set (note too that as of V2R8 address space -limits can be set on a per user ID basis in the USS segment of a RACF -profile). People have reported successful builds of Perl with MAXASSIZE -parameters as small as 503316480 (and it may be possible to build Perl -with a MAXASSIZE smaller than that). - -Within USS your /etc/profile or $HOME/.profile may limit your ulimit +Within USS your F or F<$HOME/.profile> may limit your ulimit settings. Check that the following command returns reasonable values: ulimit -a @@ -233,7 +268,7 @@ settings. Check that the following command returns reasonable values: To conserve memory you should have your compiler modules loaded into the Link Pack Area (LPA/ELPA) rather than in a link list or step lib. -If the c89 compiler complains of syntax errors during the build of the +If the compiler complains of syntax errors during the build of the Socket extension then be sure to fix the syntax error in the system header /usr/include/sys/socket.h. @@ -244,44 +279,19 @@ installation. You might encounter STDERR messages even during a successful run of "make test". Here is a guide to some of the more commonly seen anomalies: -=head3 Signals +=head3 Out of Memory (31-bit only) -A message of the form: +Out of memory problems should not be an issue, unless you are attempting to build +a 31-bit Perl. - io/openpid...........CEE5210S The signal SIGHUP was received. - CEE5210S The signal SIGHUP was received. - CEE5210S The signal SIGHUP was received. - ok - -indicates that the t/io/openpid.t test of Perl has passed but done so -with extraneous messages on stderr from CEE. - -=head3 File::Temp - -A message of the form: - - lib/ftmp-security....File::Temp::_gettemp: Parent directory (/tmp/) - is not safe (sticky bit not set when world writable?) at - lib/ftmp-security.t line 100 - File::Temp::_gettemp: Parent directory (/tmp/) is not safe (sticky - bit not set when world writable?) at lib/ftmp-security.t line 100 - ok - -indicates a problem with the permissions on your /tmp directory within the HFS. -To correct that problem issue the command: - - chmod a+t /tmp - -from an account with write access to the directory entry for /tmp. - -=head3 Out of Memory! - -Recent perl test suite is quite memory hungry. In addition to the comments +If you _are_ building a 31-bit Perl, the constrained environment may mean you +need to change memory options for Perl. +In addition to the comments above on memory limitations it is also worth checking for _CEE_RUNOPTS -in your environment. Perl now has (in miniperlmain.c) a C #pragma +in your environment. Perl now has (in miniperlmain.c) a C #pragma for 31-bit only to set CEE run options, but the environment variable wins. -The C code asks for: +The 31-bit C code asks for: #pragma runopts(HEAP(2M,500K,ANYWHERE,KEEP,8K,4K) STACK(,,ANY,) ALL31(ON)) @@ -300,69 +310,18 @@ case something like: is needed to get through the test suite. -=head2 Installation Anomalies with Perl on OS/390 - -The installman script will try to run on OS/390. There will be fewer errors -if you have a roff utility installed. You can obtain GNU groff from the -Redbook SG24-5944-00 ftp site. +=head2 Usage Hints for Perl on z/OS -=head2 Usage Hints for Perl on OS/390 - -When using perl on OS/390 please keep in mind that the EBCDIC and ASCII -character sets are different. See perlebcdic.pod for more on such character +When using Perl on z/OS please keep in mind that the EBCDIC and ASCII +character sets are different. See L for more on such character set issues. Perl builtin functions that may behave differently under EBCDIC are also mentioned in the perlport.pod document. -Open Edition (UNIX System Services) from V2R8 onward does support -#!/path/to/perl script invocation. There is a PTF available from -IBM for V2R7 that will allow shell/kernel support for #!. USS -releases prior to V2R7 did not support the #! means of script invocation. -If you are running V2R6 or earlier then see: - - head `whence perldoc` - -for an example of how to use the "eval exec" trick to ask the shell to -have Perl run your scripts on those older releases of Unix System Services. - If you are having trouble with square brackets then consider switching your rlogin or telnet client. Try to avoid older 3270 emulators and ISHELL for working with Perl on USS. -=head2 Floating Point Anomalies with Perl on OS/390 - -There appears to be a bug in the floating point implementation on S/390 -systems such that calling int() on the product of a number and a small -magnitude number is not the same as calling int() on the quotient of -that number and a large magnitude number. For example, in the following -Perl code: - - my $x = 100000.0; - my $y = int($x * 1e-5) * 1e5; # '0' - my $z = int($x / 1e+5) * 1e5; # '100000' - print "\$y is $y and \$z is $z\n"; # $y is 0 and $z is 100000 - -Although one would expect the quantities $y and $z to be the same and equal -to 100000 they will differ and instead will be 0 and 100000 respectively. - -The problem can be further examined in a roughly equivalent C program: - - #include - #include - main() - { - double r1,r2; - double x = 100000.0; - double y = 0.0; - double z = 0.0; - x = 100000.0 * 1e-5; - r1 = modf (x,&y); - x = 100000.0 / 1e+5; - r2 = modf (x,&z); - printf("y is %e and z is %e\n",y*1e5,z*1e5); - /* y is 0.000000e+00 and z is 1.000000e+05 (with c89) */ - } - -=head2 Modules and Extensions for Perl on OS/390 +=head2 Modules and Extensions for Perl on z/OS (Static Only) Pure Perl (that is non XS) modules may be installed via the usual: @@ -373,7 +332,7 @@ Pure Perl (that is non XS) modules may be installed via the usual: If you built perl with dynamic loading capability then that would also be the way to build XS based extensions. However, if you built perl with -the default static linking you can still build XS based extensions for OS/390 +static linking you can still build XS based extensions for z/OS but you will need to follow the instructions in ExtUtils::MakeMaker for building statically linked perl binaries. In the simplest configurations building a static perl + XS extension boils down to: @@ -385,15 +344,34 @@ building a static perl + XS extension boils down to: make install make -f Makefile.aperl inst_perl MAP_TARGET=perl -In most cases people have reported better results with GNU make rather -than the system's /bin/make program, whether for plain modules or for -XS based extensions. +=head2 Running Perl on z/OS + +To run the 64-bit Dynamic Perl environment, update your PATH and LIBPATH +to include the location you installed Perl into, and then run the perl you +installed as perlV.R.M where V/R/M is the Version/Release/Modification level +of the current development level. +If you are running the ASCII/EBCDIC Bi-Modal Perl environment, you also need to +set up your ASCII/EBCDIC Bi-Modal environment variables, and ensure any Perl +source code you run is tagged appropriately as ASCII or EBCDIC using +"chtag -t -c": + +=over -If the make process encounters trouble with either compilation or -linking then try setting the _C89_CCMODE to 1. Assuming sh is your -login shell then run: +=item For ASCII Only: - export _C89_CCMODE=1 + export _BPXK_AUTOCVT=ON + export _CEE_RUNOPTS="FILETAG(AUTOCVT,AUTOTAG),POSIX(ON)" + export _TAG_REDIR_ERR="txt" + export _TAG_REDIR_IN="txt" + export _TAG_REDIR_OUT="txt" + +=item For ASCII or EBCDIC: + + export PATH=/usr/local/perl/ascii:$PATH + export LIBPATH=/usr/local/perl/ascii/lib:$LIBPATH + perlV.R.M args + +=back If tcsh is your login shell then use the setenv command. @@ -405,54 +383,35 @@ Thanks to Mike MacIsaac and Egon Terwedow for SG24-5944-00. Thanks to Ignasi Roca for pointing out the floating point problems. Thanks to John Goodyear for dynamic loading help. -=head1 SEE ALSO - -L, L, L, L. - - http://www.ibm.com/servers/eserver/zseries/zos/unix/bpxa1toy.html +Mike Fulton and Karl Williamson have provided updates for UTF8, DLL, 64-bit and +ASCII/EBCDIC Bi-Modal support - http://www.redbooks.ibm.com/redbooks/SG245944.html +=head1 OTHER SITES - http://www.ibm.com/servers/eserver/zseries/zos/unix/bpxa1ty1.html#opensrc +L provides documentation and tools +for building various z/OS Perl configurations and has some useful tools in the +'bin' directory you may want to use for building z/OS Perl yourself. - http://www.xray.mpe.mpg.de/mailing-lists/perl-mvs/ - - http://publibz.boulder.ibm.com:80/cgi-bin/bookmgr_OS390/BOOKS/ceea3030/ +=head1 HISTORY - http://publibz.boulder.ibm.com:80/cgi-bin/bookmgr_OS390/BOOKS/CBCUG030/ +Updated 24 December 2021 to enable initial ASCII support -=head2 Mailing list for Perl on OS/390 +Updated 03 October 2019 for perl-5.33.3+ -If you are interested in the z/OS (formerly known as OS/390) -and POSIX-BC (BS2000) ports of Perl then see the perl-mvs mailing list. -To subscribe, send an empty message to perl-mvs-subscribe@perl.org. +Updated 28 November 2001 for broken URLs. -See also: +Updated 12 March 2001 to mention //'SYS1.TCPPARMS(TCPDATA)'. - https://lists.perl.org/list/perl-mvs.html +Updated 24 January 2001 to mention dynamic loading. -There are web archives of the mailing list at: +Updated 15 January 2001 for the 5.7.1 release of Perl. - https://www.nntp.perl.org/group/perl.mvs/ +Updated 12 November 2000 for the 5.7.1 release of Perl. -=head1 HISTORY +This document was podified for the 5.005_03 release of Perl 11 March 1999. This document was originally written by David Fiander for the 5.005 release of Perl. -This document was podified for the 5.005_03 release of Perl 11 March 1999. - -Updated 12 November 2000 for the 5.7.1 release of Perl. - -Updated 15 January 2001 for the 5.7.1 release of Perl. - -Updated 24 January 2001 to mention dynamic loading. - -Updated 12 March 2001 to mention //'SYS1.TCPPARMS(TCPDATA)'. - -Updated 28 November 2001 for broken URLs. - -Updated 03 October 2019 for perl-5.32.0+ - =cut diff --git a/gnu/usr.bin/perl/README.qnx b/gnu/usr.bin/perl/README.qnx index c16072eecb5..f677c203c6e 100644 --- a/gnu/usr.bin/perl/README.qnx +++ b/gnu/usr.bin/perl/README.qnx @@ -173,7 +173,7 @@ we will pass to Configure through -Dsysroot. =head3 Preparing the target system It's quite possible that the target system doesn't have a readily -available /tmp, so it's generall safer to do something like this: +available /tmp, so it's generally safer to do something like this: $ ssh $TARGETUSER@$TARGETHOST 'rm -rf perl; mkdir perl; mkdir perl/tmp' $ export TARGETDIR=`ssh $TARGETUSER@$TARGETHOST pwd`/perl diff --git a/gnu/usr.bin/perl/README.symbian b/gnu/usr.bin/perl/README.symbian deleted file mode 100644 index cb4a42ff946..00000000000 --- a/gnu/usr.bin/perl/README.symbian +++ /dev/null @@ -1,434 +0,0 @@ -If you read this file _as_is_, just ignore the funny characters you see. -It is written in the POD format (see pod/perlpod.pod) which is specially -designed to be readable as is. - -=head1 NAME - -perlsymbian - Perl version 5 on Symbian OS - -=head1 DESCRIPTION - -This document describes various features of the Symbian operating -system that will affect how Perl version 5 (hereafter just Perl) -is compiled and/or runs. - -B -The DLL includes a C++ class called CPerlBase, which one can then -(derive from and) use to embed Perl into applications, see F. - -The base port of Perl to Symbian only implements the basic POSIX-like -functionality; it does not implement any further Symbian or Series 60, -Series 80, or UIQ bindings for Perl. - -It is also possible to generate Symbian executables for "miniperl" -and "perl", but since there is no standard command line interface -for Symbian (nor full keyboards in the devices), these are useful -mainly as demonstrations. - -=head2 Compiling Perl on Symbian - -(0) You need to have the appropriate Symbian SDK installed. - -These instructions have been tested under various Nokia Series 60 -Symbian SDKs (1.2 to 2.6, 2.8 should also work, 1.2 compiles but -does not work), Series 80 2.0, and Nokia 7710 (Series 90) SDK. -You can get the SDKs from Forum Nokia (L). -A very rough port ("it compiles") to UIQ 2.1 has also been made. - -A prerequisite for any of the SDKs is to install ActivePerl -from ActiveState, L - -Having the SDK installed also means that you need to have either -the Metrowerks CodeWarrior installed (2.8 and 3.0 were used in testing) -or the Microsoft Visual C++ 6.0 installed (SP3 minimum, SP5 recommended). - -Note that for example the Series 60 2.0 VC SDK installation talks -about ActivePerl build 518, which does no more (as of mid-2005) exist -at the ActiveState website. The ActivePerl 5.8.4 build 810 was -used successfully for compiling Perl on Symbian. The 5.6.x ActivePerls -do not work. - -Other SDKs or compilers like Visual.NET, command-line-only -Visual.NET, Borland, GnuPoc, or sdk2unix have not been tried. - -These instructions almost certainly won't work with older Symbian -releases or other SDKs. Patches to get this port running in other -releases, SDKs, compilers, platforms, or devices are naturally welcome. - -(1) Get a Perl source code distribution (for example the file -perl-5.9.2.tar.gz is fine) from L -and unpack it in your the C:/Symbian directory of your Windows -system. - -(2) Change to the perl source directory. - - cd c:\Symbian\perl-5.x.x - -(3) Run the following script using the perl coming with the SDK - - perl symbian\config.pl - -You must use the cmd.exe, the Cygwin shell will not work. -The PATH must include the SDK tools, including a Perl, -which should be the case under cmd.exe. If you do not -have that, see the end of symbian\sdk.pl for notes of -how your environment should be set up for Symbian compiles. - -(4) Build the project, either by - - make all - -in cmd.exe or by using either the Metrowerks CodeWarrior -or the Visual C++ 6.0, or the Visual Studio 8 (the Visual C++ -2005 Express Edition works fine). - -If you use the VC IDE, you will have to run F -first using the cmd.exe, and then run 'make win.mf vc6.mf' to generate -the VC6 makefiles and workspaces. "make vc6" will compile for the VC6, -and "make cw" for the CodeWarrior. - -The following SDK and compiler configurations and Nokia phones were -tested at some point in time (+ = compiled and PerlApp run, - = not), -both for Perl 5.8.x and 5.9.x: - - SDK | VC | CW | - --------+----+----+--- - S60 1.2 | + | + | 3650 (*) - S60 2.0 | + | + | 6600 - S60 2.1 | - | + | 6670 - S60 2.6 | + | + | 6630 - S60 2.8 | + | + | (not tested in a device) - S80 2.6 | - | + | 9300 - S90 1.1 | + | - | 7710 - UIQ 2.1 | - | + | (not tested in a device) - - (*) Compiles but does not work, unfortunately, a problem with Symbian. - -If you are using the 'make' directly, it is the GNU make from the SDKs, -and it will invoke the right make commands for the Windows emulator -build and the Arm target builds ('thumb' by default) as necessary. - -The build scripts assume the 'absolute style' SDK installs under C:, -the 'subst style' will not work. - -If using the VC IDE, to build use for example the File->Open Workspace-> -C:\Symbian\8.0a\S60_2nd_FP2\epoc32\build\symbian\perl\perl\wins\perl.dsw -The emulator binaries will appear in the same directory. - -If using the VC IDE, you will a lot of warnings in the beginning of -the build because a lot of headers mentioned by the source cannot -be found, but this is not serious since those headers are not used. - -The Metrowerks will give a lot of warnings about unused variables and -empty declarations, you can ignore those. - -When the Windows and Arm DLLs are built do not be scared by a very long -messages whizzing by: it is the "export freeze" phase where the whole -(rather large) API of Perl is listed. - -Once the build is completed you need to create the DLL SIS file by - - make perldll.sis - -which will create the file perlXYZ.sis (the XYZ being the Perl version) -which you can then install into your Symbian device: an easy way -to do this is to send them via Bluetooth or infrared and just open -the messages. - -Since the total size of all Perl SIS files once installed is -over 2 MB, it is recommended to do the installation into a -memory card (drive E:) instead of the C: drive. - -The size of the perlXYZ.SIS is about 370 kB but once it is in the -device it is about one 750 kB (according to the application manager). - -The perlXYZ.sis includes only the Perl DLL: to create an additional -SIS file which includes some of the standard (pure) Perl libraries, -issue the command - - make perllib.sis - -Some of the standard Perl libraries are included, but not all: -see L or F for more details -(250 kB -> 700 kB). - -Some of the standard Perl XS extensions (see L are -also available: - - make perlext.sis - -which will create perlXYZext.sis (290 kB -> 770 kB). - -To compile the demonstration application PerlApp you need first to -install the Perl headers under the SDK. - -To install the Perl headers and the class CPerlBase documentation -so that you no more need the Perl sources around to compile Perl -applications using the SDK: - - make sdkinstall - -The destination directory is C:\Symbian\perl\X.Y.Z. For more -details, see F. - -Once the headers have been installed, you can create a SIS for -the PerlApp: - - make perlapp.sis - -The perlapp.sis (11 kB -> 16 kB) will be built in the symbian -subdirectory, but a copy will also be made to the main directory. - -If you want to package the Perl DLLs (one for WINS, one for ARMI), -the headers, and the documentation: - - make perlsdk.zip - -which will create perlXYZsdk.zip that can be used in another -Windows system with the SDK, without having to compile Perl in -that system. - -If you want to package the PerlApp sources: - - make perlapp.zip - -If you want to package the perl.exe and miniperl.exe, you -can use the perlexe.sis and miniperlexe.sis make targets. -You also probably want the perllib.sis for the libraries -and maybe even the perlapp.sis for the recognizer. - -The make target 'allsis' combines all the above SIS targets. - -To clean up after compilation you can use either of - - make clean - make distclean - -depending on how clean you want to be. - -=head2 Compilation problems - -If you see right after "make" this - - cat makefile.sh >makefile - 'cat' is not recognized as an internal or external command, - operable program or batch file. - -it means you need to (re)run the F. - -If you get the error - - 'perl' is not recognized as an internal or external command, - operable program or batch file. - -you may need to reinstall the ActivePerl. - -If you see this - - ren makedef.pl nomakedef.pl - The system cannot find the file specified. - C:\Symbian\...\make.exe: [rename_makedef] Error 1 (ignored) - -please ignore it since it is nothing serious (the build process of -renames the Perl makedef.pl as nomakedef.pl to avoid confusing it -with a makedef.pl of the SDK). - -=head2 PerlApp - -The PerlApp application demonstrates how to embed Perl interpreters -to a Symbian application. The "Time" menu item runs the following -Perl code: C, -the "Oneliner" allows one to type in Perl code, and the "Run" -opens a file chooser for selecting a Perl file to run. - -The PerlApp also is started when the "Perl recognizer" (also included -and installed) detects a Perl file being activated through the GUI, -and offers either to install it under \Perl (if the Perl file is in -the inbox of the messaging application) or to run it (if the Perl file -is under \Perl). - -=head2 sisify.pl - -In the symbian subdirectory there is F utility which can be used -to package Perl scripts and/or Perl library directories into SIS files, -which can be installed to the device. To run the sisify.pl utility, -you will need to have the 'makesis' and 'uidcrc' utilities already -installed. If you don't have the Win32 SDKs, you may try for example -L or L. - -=head2 Using Perl in Symbian - -First of all note that you have full access to the Symbian device -when using Perl: you can do a lot of damage to your device (like -removing system files) unless you are careful. Please do take -backups before doing anything. - -The Perl port has been done for the most part using the Symbian -standard POSIX-ish STDLIB library. It is a reasonably complete -library, but certain corners of such emulation libraries that tend -to be left unimplemented on non-UNIX platforms have been left -unimplemented also this time: fork(), signals(), user/group ids, -select() working for sockets, non-blocking sockets, and so forth. -See the file F and look for 'undef' to find the -unsupported APIs (or from Perl use Config). - -The filesystem of Symbian devices uses DOSish syntax, "drives" -separated from paths by a colon, and backslashes for the path. The -exact assignment of the drives probably varies between platforms, but -for example in Series 60 you might see C: as the (flash) main memory, -D: as the RAM drive, E: as the memory card (MMC), Z: as the ROM. In -Series 80 D: is the memory card. As far the devices go the NUL: is -the bit bucket, the COMx: are the serial lines, IRCOMx: are the IR -ports, TMP: might be C:\System\Temp. Remember to double those -backslashes in doublequoted strings. - -The Perl DLL is installed in \System\Libs\. The Perl libraries and -extension DLLs are installed in \System\Libs\Perl\X.Y.Z\. The PerlApp -is installed in \System\Apps\, and the SIS also installs a couple of -demo scripts in \Perl\ (C:\Mydocs\Perl\ on Nokia 7710). - -Note that the Symbian filesystem is very picky: it strongly prefers -the \ instead of the /. - -When doing XS / Symbian C++ programming include first the Symbian -headers, then any standard C/POSIX headers, then Perl headers, and finally -any application headers. - -New() and Copy() are unfortunately used by both Symbian and Perl code -so you'll have to play cpp games if you need them. PerlBase.h undefines -the Perl definitions and redefines them as PerlNew() and PerlCopy(). - -=head1 TO DO - -Lots. See F. - -=head1 WARNING - -As of Perl Symbian port version 0.4.1 any part of Perl's standard -regression test suite has not been run on a real Symbian device using -the ported Perl, so innumerable bugs may lie in wait. Therefore there -is absolutely no warranty. - -=head1 NOTE - -When creating and extending application programming interfaces (APIs) -for Symbian or Series 60 or Series 80 or Series 90 it is suggested -that trademarks, registered trademarks, or trade names are not used in -the API names. Instead, developers should consider basing the API -naming in the existing (C++, or maybe Java) public component and API -naming, modified as appropriate by the rules of the programming -language the new APIs are for. - -Nokia is a registered trademark of Nokia Corporation. Nokia's product -names are trademarks or registered trademarks of Nokia. Other product -and company names mentioned herein may be trademarks or trade names of -their respective owners. - -=head1 AUTHOR - -Jarkko Hietaniemi - -=head1 COPYRIGHT - -Copyright (c) 2004-2005 Nokia. All rights reserved. - -Copyright (c) 2006-2007 Jarkko Hietaniemi. - -=head1 LICENSE - -The Symbian port is licensed under the same terms as Perl itself. - -=head1 HISTORY - -=over 4 - -=item * - -0.1.0: April 2005 - -(This will show as "0.01" in the Symbian Installer.) - - - The console window is a very simple console indeed: one can - get the newline with "000" and the "C" button is a backspace. - Do not expect a terminal capable of vt100 or ANSI sequences. - The console is also "ASCII", you cannot input e.g. any accented - letters. Because of obvious physical constraints the console is - also very small: (in Nokia 6600) 22 columns, 17 rows. - - The following libraries are available: - AnyDBM_File AutoLoader base Carp Config Cwd constant - DynaLoader Exporter File::Spec integer lib strict Symbol - vars warnings XSLoader - - The following extensions are available: - attributes Compress::Zlib Cwd Data::Dumper Devel::Peek - Digest::MD5 DynaLoader Fcntl File::Glob Filter::Util::Call - IO List::Util MIME::Base64 - PerlIO::scalar PerlIO::via SDBM_File Socket Storable Time::HiRes - - The following extensions are missing for various technical - reasons: - B ByteLoader Devel::DProf Devel::PPPort Encode GDBM_File - IPC::SysV NDBM_File Opcode PerlIO::encoding POSIX - re Safe Sys::Hostname Sys::Syslog - threads threads::shared Unicode::Normalize - - Using MakeMaker or the Module::* to build and install modules - is not supported. - - Building XS other than the ones in the core is not supported. - -Since this is 0.something release, any future releases are almost -guaranteed to be binary incompatible. As a sign of this the Symbian -symbol exports are kept unfrozen and the .def files fully rebuilt -every time. - -=item * - -0.2.0: October 2005 - - - Perl 5.9.3 (patch level 25741) - - Compress::Zlib and IO::Zlib supported - - sisify.pl added - -We maintain the binary incompatibility. - -=item * - -0.3.0: October 2005 - - - Perl 5.9.3 (patch level 25911) - - Series 80 2.0 and UIQ 2.1 support - -We maintain the binary incompatibility. - -=item * - -0.4.0: November 2005 - - - Perl 5.9.3 (patch level 26052) - - adding a sample Symbian extension - -We maintain the binary incompatibility. - -=item * - -0.4.1: December 2006 - - - Perl 5.9.5-to-be (patch level 30002) - - added extensions: Compress/Raw/Zlib, Digest/SHA, - Hash/Util, Math/BigInt/FastCalc, Text/Soundex, Time/Piece - - port to S90 1.1 by alexander smishlajev - -We maintain the binary incompatibility. - -=item * - -0.4.2: March 2007 - - - catchup with Perl 5.9.5-to-be (patch level 30812) - - tested to build with Microsoft Visual C++ 2005 Express Edition - (which uses Microsoft Visual C 8, instead of the old VC6), - SDK used for testing S60_2nd_FP3 aka 8.1a - -We maintain the binary incompatibility. - -=back - -=cut diff --git a/gnu/usr.bin/perl/README.synology b/gnu/usr.bin/perl/README.synology index 1fde18cca01..f2dd7571df1 100644 --- a/gnu/usr.bin/perl/README.synology +++ b/gnu/usr.bin/perl/README.synology @@ -18,7 +18,7 @@ which is a trimmed-down Linux system enhanced with several tools for managing the NAS. There are several flavours of hardware: Marvell Armada (ARMv5tel, ARMv7l), Intel Atom (i686, x86_64), Freescale QorIQ (PPC), and more. For a full list see the -L. +L. Since it is based on Linux, the NAS can run many popular Linux software packages, including Perl. In fact, Synology provides a diff --git a/gnu/usr.bin/perl/README.vms b/gnu/usr.bin/perl/README.vms index 90136b1d1f3..0981579fa50 100644 --- a/gnu/usr.bin/perl/README.vms +++ b/gnu/usr.bin/perl/README.vms @@ -1,5 +1,5 @@ If you read this file _as_is_, just ignore the equal signs on the left. -This file is written in the POD format (see [.POD]PERLPOD.POD;1) which is +This file is written in the POD format (see [.pod]perlpod.pod) which is specially designed to be readable as is. =head1 NAME @@ -46,10 +46,9 @@ In addition to VMS and DCL you will need three things: =item 1 A C compiler. -HP (formerly Compaq, more formerly DEC) C for VMS (VAX, Alpha, or Itanium). -Various ancient versions of DEC C had some caveats, so if you're using a -version older than 7.x on Alpha or Itanium or 6.x on VAX, you may need to -upgrade to get a successful build. +VSI (formerly DEC/Compaq/HP/HPE) C for VMS (Alpha or Itanium). Various +ancient versions of DEC C had some caveats, so if you're using a version +older than 7.x, you may need to upgrade to get a successful build. There have been no recent reports of builds using Gnu C, but latent (and most likely outdated) support for it is still present in various @@ -71,10 +70,10 @@ since anyone's tested it that we're not sure. All development and testing of Perl on VMS takes place on ODS-5 volumes with extended parse enabled in the environment via the command C. -Latent support for ODS-2 volumes (including on VAX) is still present, but the number -of components that require ODS-5 features is steadily growing and ODS-2 support may be -completely removed in a future release. - +Latent support for ODS-2 volumes is still present, but there have been some reports +that it no longer works, and even if it builds, there will be many test failures, +mostly related to the failure to preserve filename case. ODS-2 support may be +explicity disabled in a future release. =back @@ -132,21 +131,17 @@ of the source code for perl as well as modules and scripts that you may wish to add later) hence you probably want to have GUNZIP.EXE and VMSTAR.EXE on your VMS machine. -If you want to include socket support, you'll need a TCP/IP stack and either -DEC C, or socket libraries. See the "Socket Support (optional)" topic -for more details. - =head1 Unpacking the Perl source code You may need to set up a foreign symbol for the unpacking utility of choice. Once you have done so, use a command like the following to unpack the archive: - vmstar -xvf perl-5^.32^.1.tar + vmstar -xvf perl-5^.36^.0.tar Then set default to the top-level source directory like so: - set default [.perl-5^.32^.1] + set default [.perl-5^.36^.0] and proceed with configuration as described in the next section. @@ -216,7 +211,7 @@ More help with configure.com is available from: @configure "-h" If you find yourself reconfiguring and rebuilding then be sure to also follow -the advice in the "Cleaning up and starting fresh (optional)" and the checklist +the advice in the "Cleaning up and starting fresh (optional)" and the checklist of items in the "CAVEATS" sections below. =head2 Changing compile-time options (optional) for Perl on VMS @@ -230,13 +225,6 @@ unbuildable; odds are that there's nothing in there you'll need to change. Note also that non-default options are tested less than default options, so you may end up being more of a pioneer than you intend to be. -=head2 Socket Support (optional) for Perl on VMS - -Perl includes a number of functions for IP sockets, which are available if -you choose to compile Perl with socket support. It does this via the socket -routines built into the CRTL regarless of which TCP/IP stack your system -has. - =head1 Building Perl The configuration script will print out, at the very end, the MMS or MMK @@ -301,15 +289,16 @@ didn't do anything special, use .EXE), and "[.subdir]test.t" is the test that failed. For example, with a normal Perl build, if the test indicated that t/op/time failed, then you'd do this: - @ .vms]test .EXE "" "-v" [.OP]TIME.t + @ .vms]test .EXE "" "-v" [.op]time.t Note that test names are reported in UNIX syntax and relative to the top-level build directory. When supplying them individually to the test -driver, you can use either UNIX or VMS syntax, but you must give the path +driver, you must specify them in Unix format if they are outside of the [.t] +directory; otherwise VMS syntax is ok. Note that you must also give the path relative to the [.t] directory and you must also add the .t extension to the -filename. So, for example if the test lib/Math/Trig fails, you would run: +filename. So, for example if the test lib/warnings.t fails, you would run: - @[.vms]test .EXE "" -"v" [-.lib.math]trig.t + @[.vms]test .EXE "" -"v" "../lib/warnings.t" When you send in a bug report for failed tests, please include the output from this command, which is run from the main source directory: @@ -477,8 +466,8 @@ Probably the single biggest gotcha in compiling Perl is giving the wrong switches to MMS/MMK when you build. Use I what the configure.com script prints! -Be sure that the process that you use to build perl has a PGFLQ greater -than 100000. Be sure to have a correct local time zone to UTC offset +Be sure that the process that you use to build Perl has a PGFLQUO of at +least 400000. Be sure to have a correct local time zone to UTC offset defined (in seconds) in the logical name SYS$TIMEZONE_DIFFERENTIAL before running the regression test suite. The SYS$MANAGER:UTC$CONFIGURE_TDF.COM procedure will help you set that logical for your system but may require @@ -491,30 +480,22 @@ A final thing that causes trouble is leftover pieces from a failed build. If things go wrong make sure you do a "(MMK|MMS|make) realclean" before you rebuild. -=head2 GNU issues with Perl on VMS - -It has been a while since the GNU utilities such as GCC or GNU make -were used to build perl on VMS. Hence they may require a great deal -of source code modification to work again. - =head2 Floating Point Considerations Prior to 5.8.0, Perl simply accepted the default floating point options of the -C compiler, namely representing doubles with D_FLOAT on VAX and G_FLOAT on -Alpha. Single precision floating point values are represented in F_FLOAT -format when either D_FLOAT or G_FLOAT is in use for doubles. Beginning with -5.8.0, Alpha builds now use IEEE floating point formats by default, which in -VMS parlance are S_FLOAT for singles and T_FLOAT for doubles. IEEE is not -available on VAX, so F_FLOAT and D_FLOAT remain the defaults for singles and -doubles respectively. Itanium builds have always used IEEE by default. The -available non-default options are G_FLOAT on VAX and D_FLOAT or G_FLOAT on -Alpha or Itanium. - -The use of IEEE on Alpha or Itanium introduces NaN, infinity, and denormalization -capabilities not available with D_FLOAT and G_FLOAT. When using one of those -non-IEEE formats, silent underflow and overflow are emulated in the conversion -of strings to numbers, but it is preferable to get the real thing by using -IEEE where possible. +C compiler, namely representing doubles with G_FLOAT on Alpha. Single +precision floating point values are represented in F_FLOAT format when either +D_FLOAT or G_FLOAT is in use for doubles. Beginning with 5.8.0, Alpha builds +now use IEEE floating point formats by default, which in VMS parlance are S_FLOAT +for singles and T_FLOAT for doubles. Itanium builds have always used IEEE by +default. The available non-default options are D_FLOAT or G_FLOAT on Alpha +or Itanium. + +The use of IEEE introduces NaN, infinity, and denormalization capabilities not +available with D_FLOAT and G_FLOAT. When using one of those non-IEEE formats, +silent underflow and overflow are emulated in the conversion of strings to +numbers, but it is preferable to get the real thing by using IEEE where possible. +You are likely to see quite a few test failures when not using IEEE floating point. Regardless of what floating point format you consider preferable, be aware that the choice may have an impact on compatibility with external libraries, @@ -525,11 +506,9 @@ G_FLOAT, or T_FLOAT depending on what your Perl was configured with. When written to disk, the value can only be retrieved later by a Perl configured with the same floating point option that was in effect when it was created. -To obtain a non-IEEE build on Alpha or Itanium, simply answer no to the -"Use IEEE math?" question during the configuration. To obtain an option -different from the C compiler default on any platform, put in the option that -you want in answer to the "Any additional cc flags?" question. For example, to -obtain a G_FLOAT build on VAX, put in C. +To obtain a non-IEEE build, simply answer no to the "Use IEEE math?" question +during the configuration or specify -"Uuseieee" as a parameter to configure.com +on the command line. =head1 Mailing Lists @@ -555,12 +534,12 @@ Vmsperl pages on the web include: L L L - L + L =head1 SEE ALSO Perl information for users and programmers about the port of perl to VMS is -available from the [.POD]PERLVMS.POD file that gets installed as L. +available from the [.pod]perlvms.pod file that gets installed as L. For administrators the perlvms document also includes a detailed discussion of extending vmsperl with CPAN modules after Perl has been installed. diff --git a/gnu/usr.bin/perl/README.win32 b/gnu/usr.bin/perl/README.win32 index cc3b6b868ca..bad9e5be750 100644 --- a/gnu/usr.bin/perl/README.win32 +++ b/gnu/usr.bin/perl/README.win32 @@ -8,7 +8,7 @@ perlwin32 - Perl under Windows =head1 SYNOPSIS -These are instructions for building Perl under Windows 2000 and later. +These are instructions for building Perl under Windows 7 and later. =head1 DESCRIPTION @@ -37,12 +37,11 @@ port of Perl to the Windows platform. This includes both 32-bit and 64-bit Windows operating systems. The resulting Perl requires no additional software to run (other than what came with your operating system). Currently, this port is capable of using one of the -following compilers on the Intel x86 architecture: +following compilers on the Intel x86 and x86_64 architectures: - Microsoft Visual C++ version 6.0 or later + Microsoft Visual C++ version 12.0 or later Intel C++ Compiler (experimental) - Gcc by mingw.org gcc version 3.4.5 or later - with runtime < 3.21 + Gcc by mingw.org gcc version 3.4.5-5.3.0 Gcc by mingw-w64.org gcc version 4.4.3 or later Note that the last two of these are actually competing projects both @@ -50,9 +49,9 @@ delivering complete gcc toolchain for MS Windows: =over 4 -=item L +=item L -Delivers gcc toolchain targeting 32-bit Windows platform. +Delivers gcc toolchain building 32-bit executables (which can be used both 32 and 64 bit Windows platforms) =item L @@ -63,18 +62,16 @@ that are also supported by perl's makefile. =back -The Microsoft Visual C++ compilers are also now being given away free. They are -available as "Visual C++ Toolkit 2003" or "Visual C++ 2005-2019 Express [or -Community, from 2017] Edition" (and also as part of the ".NET Framework SDK") -and are the same compilers that ship with "Visual C++ .NET 2003 Professional" -or "Visual C++ 2005-2019 Professional" respectively. +The Microsoft Visual C++ compilers are also now being given away free. They +are available as "Visual C++ 2013-2022 Community Edition" and are the same +compilers that ship with "Visual C++ 2013-2022 Professional". -This port can also be built on IA64/AMD64 using: +Visual C++ 2013 is capable of B XP and Windows Server 2003 but the +build host requirement is Windows 7/Windows Server 2012. For more details see +https://docs.microsoft.com/en-us/visualstudio/productinfo/vs2013-compatibility-vs +and +https://docs.microsoft.com/en-us/visualstudio/productinfo/vs2013-sysrequirements-vs - Microsoft Platform SDK Nov 2001 (64-bit compiler and tools) - MinGW64 compiler (gcc version 4.4.3 or later) - -The Windows SDK can be downloaded from L. The MinGW64 compiler is available at L. The latter is actually a cross-compiler targeting Win64. There's also a trimmed down compiler (no java, or gfortran) suitable for building perl available at: @@ -97,21 +94,10 @@ See L below for general hints about this. =item Make You need a "make" program to build the sources. If you are using -Visual C++ or the Windows SDK tools, you can use nmake supplied with Visual C++ -or Windows SDK. You may also use, for Visual C++ or Windows SDK, dmake or gmake -instead of nmake. dmake is open source software, but is not included with -Visual C++ or Windows SDK. Builds using gcc need dmake or gmake. nmake is not -supported for gcc builds. Parallel building is only supported with dmake and -gmake, not nmake. When using dmake it is recommended to use dmake 4.13 or newer -for parallel building. Older dmakes, in parallel mode, have very high CPU usage -and pound the disk/filing system with duplicate I/O calls in an aggressive -polling loop. - -A port of dmake for Windows is available from: - -L - -Fetch and install dmake somewhere on your path. +Visual C++, you can use nmake supplied with Visual C++. +You may also use gmake instead of nmake. Builds using gcc need +gmake. nmake is not supported for gcc builds. Parallel building is only +supported with gmake, not nmake. =item Command Shell @@ -127,7 +113,7 @@ build usually works in this circumstance, but some tests will fail. The nmake that comes with Visual C++ will suffice for building. Visual C++ requires that certain things be set up in the console before Visual C++ will -sucessfully run. To make a console box be able to run the C compiler, you will +successfully run. To make a console box be able to run the C compiler, you will need to beforehand, run C to compile for x86-32 and for x86-64 C. On a typical install of a Microsoft C++ compiler product, these batch files will already be in your C @@ -135,25 +121,24 @@ environment variable so you may just type them without an absolute path into your console. If you need to find the absolute path to the batch file, it is usually found somewhere like C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC. -With some newer Micrsoft C products (released after ~2004), the installer will +With some newer Microsoft C products (released after ~2004), the installer will put a shortcut in the start menu to launch a new console window with the console already set up for your target architecture (x86-32 or x86-64 or IA64). With the newer compilers, you may also use the older batch files if you choose so. -=item Microsoft Visual C++ 2008-2019 Express/Community Edition +=item Microsoft Visual C++ 2013-2022 Community Edition -These free versions of Visual C++ 2008-2019 Professional contain the same +These free versions of Visual C++ 2013-2022 Professional contain the same compilers and linkers that ship with the full versions, and also contain -everything necessary to build Perl, rather than requiring a separate download -of the Windows SDK like previous versions did. +everything necessary to build Perl. These packages can be downloaded by searching in the Download Center at L. (Providing exact links to these packages has proven a pointless task because the links keep on changing so often.) -Install Visual C++ 2008-2019 Express/Community, then setup your environment +Install Visual C++ 2013-2022 Community, then setup your environment using, e.g. C:\Program Files\Microsoft Visual Studio 12.0\Common7\Tools\vsvars32.bat @@ -161,171 +146,20 @@ using, e.g. (assuming the default installation location was chosen). Perl should now build using the win32/Makefile. You will need to edit that -file to set CCTYPE to one of MSVC90-MSVC142 first. - -=item Microsoft Visual C++ 2005 Express Edition - -This free version of Visual C++ 2005 Professional contains the same compiler -and linker that ship with the full version, but doesn't contain everything -necessary to build Perl. - -You will also need to download the "Windows SDK" (the "Core SDK" and "MDAC -SDK" components are required) for more header files and libraries. - -These packages can both be downloaded by searching in the Download Center at -L. (Providing exact -links to these packages has proven a pointless task because the links keep on -changing so often.) - -Try to obtain the latest version of the Windows SDK. Sometimes these packages -contain a particular Windows OS version in their name, but actually work on -other OS versions too. For example, the "Windows Server 2003 R2 Platform SDK" -also runs on Windows XP SP2 and Windows 2000. - -Install Visual C++ 2005 first, then the Platform SDK. Setup your environment -as follows (assuming default installation locations were chosen): - - SET PlatformSDKDir=C:\Program Files\Microsoft Platform SDK - - SET PATH=%SystemRoot%\system32;%SystemRoot%;C:\Program Files\Microsoft Visual Studio 8\Common7\IDE;C:\Program Files\Microsoft Visual Studio 8\VC\BIN;C:\Program Files\Microsoft Visual Studio 8\Common7\Tools;C:\Program Files\Microsoft Visual Studio 8\SDK\v2.0\bin;C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727;C:\Program Files\Microsoft Visual Studio 8\VC\VCPackages;%PlatformSDKDir%\Bin - - SET INCLUDE=C:\Program Files\Microsoft Visual Studio 8\VC\INCLUDE;%PlatformSDKDir%\include - - SET LIB=C:\Program Files\Microsoft Visual Studio 8\VC\LIB;C:\Program Files\Microsoft Visual Studio 8\SDK\v2.0\lib;%PlatformSDKDir%\lib - - SET LIBPATH=C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727 - -(The PlatformSDKDir might need to be set differently depending on which version -you are using. Earlier versions installed into "C:\Program Files\Microsoft SDK", -while the latest versions install into version-specific locations such as -"C:\Program Files\Microsoft Platform SDK for Windows Server 2003 R2".) - -Perl should now build using the win32/Makefile. You will need to edit that -file to set - - CCTYPE = MSVC80 - -and to set CCHOME, CCINCDIR and CCLIBDIR as per the environment setup above. - -=item Microsoft Visual C++ Toolkit 2003 - -This free toolkit contains the same compiler and linker that ship with -Visual C++ .NET 2003 Professional, but doesn't contain everything -necessary to build Perl. - -You will also need to download the "Platform SDK" (the "Core SDK" and "MDAC -SDK" components are required) for header files, libraries and rc.exe, and -".NET Framework SDK" for more libraries and nmake.exe. Note that the latter -(which also includes the free compiler and linker) requires the ".NET -Framework Redistributable" to be installed first. This can be downloaded and -installed separately, but is included in the "Visual C++ Toolkit 2003" anyway. - -These packages can all be downloaded by searching in the Download Center at -L. (Providing exact -links to these packages has proven a pointless task because the links keep on -changing so often.) - -Try to obtain the latest version of the Windows SDK. Sometimes these packages -contain a particular Windows OS version in their name, but actually work on -other OS versions too. For example, the "Windows Server 2003 R2 Platform SDK" -also runs on Windows XP SP2 and Windows 2000. - -Install the Toolkit first, then the Platform SDK, then the .NET Framework SDK. -Setup your environment as follows (assuming default installation locations -were chosen): - - SET PlatformSDKDir=C:\Program Files\Microsoft Platform SDK - - SET PATH=%SystemRoot%\system32;%SystemRoot%;C:\Program Files\Microsoft Visual C++ Toolkit 2003\bin;%PlatformSDKDir%\Bin;C:\Program Files\Microsoft.NET\SDK\v1.1\Bin - - SET INCLUDE=C:\Program Files\Microsoft Visual C++ Toolkit 2003\include;%PlatformSDKDir%\include;C:\Program Files\Microsoft Visual Studio .NET 2003\Vc7\include - - SET LIB=C:\Program Files\Microsoft Visual C++ Toolkit 2003\lib;%PlatformSDKDir%\lib;C:\Program Files\Microsoft Visual Studio .NET 2003\Vc7\lib - -(The PlatformSDKDir might need to be set differently depending on which version -you are using. Earlier versions installed into "C:\Program Files\Microsoft SDK", -while the latest versions install into version-specific locations such as -"C:\Program Files\Microsoft Platform SDK for Windows Server 2003 R2".) - -Several required files will still be missing: - -=over 4 - -=item * - -cvtres.exe is required by link.exe when using a .res file. It is actually -installed by the .NET Framework SDK, but into a location such as the -following: - - C:\WINDOWS\Microsoft.NET\Framework\v1.1.4322 - -Copy it from there to %PlatformSDKDir%\Bin - -=item * - -lib.exe is normally used to build libraries, but link.exe with the /lib -option also works, so change win32/config.vc to use it instead: - -Change the line reading: - - ar='lib' - -to: - - ar='link /lib' - -It may also be useful to create a batch file called lib.bat in -C:\Program Files\Microsoft Visual C++ Toolkit 2003\bin containing: - - @echo off - link /lib %* - -for the benefit of any naughty C extension modules that you might want to build -later which explicitly reference "lib" rather than taking their value from -$Config{ar}. - -=item * - -setargv.obj is required to build perlglob.exe (and perl.exe if the USE_SETARGV -option is enabled). The Platform SDK supplies this object file in source form -in %PlatformSDKDir%\src\crt. Copy setargv.c, cruntime.h and -internal.h from there to some temporary location and build setargv.obj using - - cl.exe /c /I. /D_CRTBLD setargv.c - -Then copy setargv.obj to %PlatformSDKDir%\lib - -Alternatively, if you don't need perlglob.exe and don't need to enable the -USE_SETARGV option then you can safely just remove all mention of $(GLOBEXE) -from win32/Makefile and setargv.obj won't be required anyway. - -=back - -Perl should now build using the win32/Makefile. You will need to edit that -file to set - - CCTYPE = MSVC70FREE - -and to set CCHOME, CCINCDIR and CCLIBDIR as per the environment setup above. - -=item Microsoft Platform SDK 64-bit Compiler - -The nmake that comes with the Platform SDK will suffice for building -Perl. Make sure you are building within one of the "Build Environment" -shells available after you install the Platform SDK from the Start Menu. +file to set CCTYPE to one of MSVC120-MSVC142 first. =item GCC Perl can be compiled with gcc from MinGW (version 3.4.5 or later) or from MinGW64 (version 4.4.3 or later). It can be downloaded here: -L +L L -You also need dmake or gmake. See L above on how to get it. +You also need gmake. Usually it comes with MinGW but its executable may have +a different name, such as mingw32-make.exe. -Note that the MinGW build currently requires a MinGW runtime version earlier -than 3.21 (check __MINGW32_MAJOR_VERSION and __MINGW32_MINOR_VERSION). +Note that the MinGW build currently fails with version 6.3.0 or later. Note also that the C++ mode build currently fails with MinGW 3.4.5 and 4.7.2 or later, and with MinGW64 64-bit 6.3.0 or later. @@ -355,16 +189,15 @@ unlike GCC. Make sure you are in the "win32" subdirectory under the perl toplevel. This directory contains a "Makefile" that will work with -versions of nmake that come with Visual C++ or the Windows SDK, and -a GNU make "GNUmakefile" or dmake "makefile.mk" that will work for all -supported compilers. The defaults in the gmake and dmake makefile are -setup to build using MinGW/gcc. +versions of nmake that come with Visual C++, and +a GNU make "GNUmakefile" that will work for all supported compilers. +The defaults in the gmake makefile are setup to build using MinGW/gcc. =item * -Edit the GNUmakefile, makefile.mk (or Makefile, if you're using nmake) -and change the values of INST_DRV and INST_TOP. You can also enable -various build flags. These are explained in the makefiles. +Edit the GNUmakefile (or Makefile, if you're using nmake) and change the values +of INST_DRV and INST_TOP. You can also enable various build flags. These are +explained in the makefiles. Note that it is generally not a good idea to try to build a perl with INST_DRV and INST_TOP set to a path that already exists from a previous @@ -380,7 +213,7 @@ F directories. If building with the cross-compiler provided by mingw-w64.org you'll need to uncomment the line that sets -GCCCROSS in the makefile.mk. Do this only if it's the cross-compiler - ie +GCCCROSS in the GNUmakefile. Do this only if it's the cross-compiler - ie only if the bin folder doesn't contain a gcc.exe. (The cross-compiler does not provide a gcc.exe, g++.exe, ar.exe, etc. Instead, all of these executables are prefixed with 'x86_64-w64-mingw32-'.) @@ -396,21 +229,18 @@ Be sure to read the instructions near the top of the makefiles carefully. =item * -Type "dmake" ("gmake" for GNU make, or "nmake" if you are using that make). +Type "gmake" (or "nmake" if you are using that make). This should build everything. Specifically, it will create perl.exe, -perl532.dll at the perl toplevel, and various other extension dll's +perl536.dll at the perl toplevel, and various other extension dll's under the lib\auto directory. If the build fails for any reason, make sure you have done the previous steps correctly. -To try dmake's parallel mode, type "dmake -P2", where 2, is the maximum number +To try gmake's parallel mode, type "gmake -j2", where 2, is the maximum number of parallel jobs you want to run. A number of things in the build process will run in parallel, but there are serialization points where you will see just 1 CPU maxed out. This is normal. -Similarly you can build in parallel with GNU make, type "gmake -j2" to -build with two parallel jobs, or higher for more. - If you are advanced enough with building C code, here is a suggestion to speed up building perl, and the later C. Try to keep your PATH environmental variable with the least number of folders possible (remember to keep your C @@ -422,7 +252,7 @@ is the most commonly launched program during the build and later testing. =head2 Testing Perl on Windows -Type "dmake test" (or "gmake test", "nmake test"). This will run most +Type "gmake test" (or "nmake test"). This will run most of the tests from the testsuite (many tests will be skipped). There should be no test failures. @@ -441,7 +271,7 @@ may crash (after all its tests have passed). This is due to a regression in the Universal CRT introduced in the Windows 10 April 2018 Update, and will be fixed in the May 2019 Update, as explained here: L. -If you build with certain versions (e.g. 4.8.1) of gcc from www.mingw.org then +If you build with certain versions (e.g. 4.8.1) of gcc from mingw then F may fail test 17 due to a known bug in those gcc builds: see L. @@ -450,7 +280,7 @@ native "cmd.exe", or if you are building from a path that contains spaces. So don't do that. If you are running the tests from a emacs shell window, you may see -failures in op/stat.t. Run "dmake test-notty" in that case. +failures in op/stat.t. Run "gmake test-notty" in that case. Furthermore, you should make sure that during C you do not have any GNU tool packages in your path: some toolkits like Unixutils @@ -469,7 +299,7 @@ Please report any other failures as described under L. =head2 Installation of Perl on Windows -Type "dmake install" (or "gmake install", "nmake install"). This will +Type "gmake install" ("nmake install"). This will put the newly built perl and the libraries under whatever C points to in the Makefile. It will also install the pod documentation under C<$INST_TOP\$INST_VER\lib\pod> and HTML versions of the same @@ -652,25 +482,13 @@ may not provide a testsuite (so "$MAKE test" may not do anything or fail), but most serious ones do. It is important that you use a supported 'make' program, and -ensure Config.pm knows about it. If you don't have nmake, you can -either get dmake from the location mentioned earlier or get an -old version of nmake reportedly available from: - -L - -Another option is to use the make written in Perl, available from -CPAN. - -L - -You may also use dmake or gmake. See L above on how to get it. +ensure Config.pm knows about it. Note that MakeMaker actually emits makefiles with different syntax depending on what 'make' it thinks you are using. Therefore, it is important that one of the following values appears in Config.pm: make='nmake' # MakeMaker emits nmake syntax - make='dmake' # MakeMaker emits dmake syntax any other value # MakeMaker emits generic make syntax (e.g GNU make, or Perl make) @@ -970,6 +788,6 @@ Win9x support was added in 5.6 (Benjamin Stuhl). Support for 64-bit Windows added in 5.8 (ActiveState Corp). -Last updated: 30 April 2019 +Last updated: 06 October 2021 =cut diff --git a/gnu/usr.bin/perl/XSUB.h b/gnu/usr.bin/perl/XSUB.h index 94e9dade6af..6cd6d2e4aa2 100644 --- a/gnu/usr.bin/perl/XSUB.h +++ b/gnu/usr.bin/perl/XSUB.h @@ -14,20 +14,26 @@ /* first, some documentation for xsubpp-generated items */ /* -=head1 C variables and internal functions +=for apidoc_section $XS -=for apidoc Amn|char*|CLASS -Variable which is setup by C to indicate the +F compiles XS code into C. See L. + +=for comment +Some variables below are flagged with 'u' because Devel::PPPort can't currently +readily test them as they spring into existence by compiling with xsubpp. + +=for apidoc Amnu|char*|CLASS +Variable which is setup by C to indicate the class name for a C++ XS constructor. This is always a C. See C>. -=for apidoc Amn|(whatever)|RETVAL -Variable which is setup by C to hold the return value for an -XSUB. This is always the proper type for the XSUB. See +=for apidoc Amnu|type|RETVAL +Variable which is setup by C to hold the return value for an +XSUB. This is always the proper type for the XSUB. See L. -=for apidoc Amn|(whatever)|THIS -Variable which is setup by C to designate the object in a C++ +=for apidoc Amnu|type|THIS +Variable which is setup by C to designate the object in a C++ XSUB. This is always the proper type for the C++ object. See C> and L. @@ -37,28 +43,37 @@ used by the C, C and C macros. The C macro must be called prior to setup the C variable. =for apidoc Amn|I32|items -Variable which is setup by C to indicate the number of +Variable which is setup by C to indicate the number of items on the stack. See L. =for apidoc Amn|I32|ix -Variable which is setup by C to indicate which of an +Variable which is setup by C to indicate which of an XSUB's aliases was used to invoke it. See L. =for apidoc Am|SV*|ST|int ix Used to access elements on the XSUB's stack. -=for apidoc AmnU||XS +=for apidoc Ay||XS|name Macro to declare an XSUB and its C parameter list. This is handled by -C. It is the same as using the more explicit C macro. +C. It is the same as using the more explicit C macro; the +latter is preferred. -=for apidoc AmU||XS_INTERNAL +=for apidoc Ayu||XS_INTERNAL|name Macro to declare an XSUB and its C parameter list without exporting the symbols. This is handled by C and generally preferable over exporting the XSUB symbols unnecessarily. -=for apidoc AmnU||XS_EXTERNAL +=for comment +XS_INTERNAL marked 'u' because declaring a function static within our test +function doesn't work + +=for apidoc Ay||XS_EXTERNAL|name Macro to declare an XSUB and its C parameter list explicitly exporting the symbols. +=for apidoc Ay||XSPROTO|name +Macro used by C> and C> to declare a function +prototype. You probably shouldn't be using this directly yourself. + =for apidoc Amns||dAX Sets up the C variable. This is usually handled automatically by C by calling C. @@ -93,10 +108,10 @@ is a lexical C<$_> in scope. */ #ifndef PERL_UNUSED_ARG -# define PERL_UNUSED_ARG(x) ((void)x) +# define PERL_UNUSED_ARG(x) ((void)sizeof(x)) #endif #ifndef PERL_UNUSED_VAR -# define PERL_UNUSED_VAR(x) ((void)x) +# define PERL_UNUSED_VAR(x) ((void)sizeof(x)) #endif #define ST(off) PL_stack_base[ax + (off)] @@ -127,9 +142,6 @@ is a lexical C<$_> in scope. #if defined(__CYGWIN__) && defined(USE_DYNAMIC_LOADING) # define XS_EXTERNAL(name) __declspec(dllexport) XSPROTO(name) # define XS_INTERNAL(name) STATIC XSPROTO(name) -#elif defined(__SYMBIAN32__) -# define XS_EXTERNAL(name) EXPORT_C XSPROTO(name) -# define XS_INTERNAL(name) EXPORT_C STATIC XSPROTO(name) #elif defined(__cplusplus) # define XS_EXTERNAL(name) extern "C" XSPROTO(name) # define XS_INTERNAL(name) static XSPROTO(name) @@ -148,13 +160,13 @@ is a lexical C<$_> in scope. #define dAX const I32 ax = (I32)(MARK - PL_stack_base + 1) #define dAXMARK \ - I32 ax = POPMARK; \ - SV **mark = PL_stack_base + ax++ + I32 ax = POPMARK; \ + SV **mark = PL_stack_base + ax++ #define dITEMS I32 items = (I32)(SP - MARK) #define dXSARGS \ - dSP; dAXMARK; dITEMS + dSP; dAXMARK; dITEMS /* These 3 macros are replacements for dXSARGS macro only in bootstrap. They factor out common code in every BOOT XSUB. Computation of vars mark and items will optimize away in most BOOT functions. Var ax can never be @@ -162,20 +174,20 @@ is a lexical C<$_> in scope. Note these macros are not drop in replacements for dXSARGS since they set PL_xsubfilename. */ #define dXSBOOTARGSXSAPIVERCHK \ - I32 ax = XS_BOTHVERSION_SETXSUBFN_POPMARK_BOOTCHECK; \ - SV **mark = PL_stack_base + ax; dSP; dITEMS + I32 ax = XS_BOTHVERSION_SETXSUBFN_POPMARK_BOOTCHECK; \ + SV **mark = PL_stack_base + ax - 1; dSP; dITEMS #define dXSBOOTARGSAPIVERCHK \ - I32 ax = XS_APIVERSION_SETXSUBFN_POPMARK_BOOTCHECK; \ - SV **mark = PL_stack_base + ax; dSP; dITEMS + I32 ax = XS_APIVERSION_SETXSUBFN_POPMARK_BOOTCHECK; \ + SV **mark = PL_stack_base + ax - 1; dSP; dITEMS /* dXSBOOTARGSNOVERCHK has no API in xsubpp to choose it so do #undef dXSBOOTARGSXSAPIVERCHK #define dXSBOOTARGSXSAPIVERCHK dXSBOOTARGSNOVERCHK */ #define dXSBOOTARGSNOVERCHK \ - I32 ax = XS_SETXSUBFN_POPMARK; \ - SV **mark = PL_stack_base + ax; dSP; dITEMS + I32 ax = XS_SETXSUBFN_POPMARK; \ + SV **mark = PL_stack_base + ax - 1; dSP; dITEMS #define dXSTARG SV * const targ = ((PL_op->op_private & OPpENTERSUB_HASTARG) \ - ? PAD_SV(PL_op->op_targ) : sv_newmortal()) + ? PAD_SV(PL_op->op_targ) : sv_newmortal()) /* Should be used before final PUSHi etc. if not in PPCODE section. */ #define XSprePUSH (sp = PL_stack_base + ax - 1) @@ -194,7 +206,7 @@ is a lexical C<$_> in scope. #define dXSFUNCTION(ret) XSINTERFACE_CVT(ret,XSFUNCTION) #define XSINTERFACE_FUNC(ret,cv,f) ((XSINTERFACE_CVT_ANON(ret))(f)) #define XSINTERFACE_FUNC_SET(cv,f) \ - CvXSUBANY(cv).any_dxptr = (void (*) (pTHX_ void*))(f) + CvXSUBANY(cv).any_dxptr = (void (*) (pTHX_ void*))(f) #define dUNDERBAR dNOOP #define UNDERBAR find_rundefsv() @@ -203,7 +215,7 @@ is a lexical C<$_> in scope. /* Typically used to return values from XS functions. */ /* -=head1 Stack Manipulation Macros +=for apidoc_section $stack =for apidoc Am|void|XST_mIV|int pos|IV iv Place an integer into the specified position C on the stack. The @@ -214,7 +226,7 @@ Place a double into the specified position C on the stack. The value is stored in a new mortal SV. =for apidoc Am|void|XST_mPV|int pos|char* str -Place a copy of a string into the specified position C on the stack. +Place a copy of a string into the specified position C on the stack. The value is stored in a new mortal SV. =for apidoc Am|void|XST_mUV|int pos|UV uv @@ -261,8 +273,6 @@ Return C<&PL_sv_undef> from an XSUB immediately. Uses C. =for apidoc Amns||XSRETURN_EMPTY Return an empty list from an XSUB immediately. -=head1 Variables created by C and C internal functions - =for apidoc AmU||newXSproto|char* name|XSUBADDR_t f|char* filename|const char *proto Used by C to hook up XSUBs as Perl subs. Adds Perl prototypes to the subs. @@ -281,7 +291,7 @@ C. See L. Macro to verify that the perl api version an XS module has been compiled against matches the api version of the perl interpreter it's being loaded into. -=head1 Exception Handling (simple) Macros +=for apidoc_section $exceptions =for apidoc Amns||dXCPT Set up necessary local variables for exception handling. @@ -313,10 +323,10 @@ Rethrows a previously caught exception. See L. #define XSRETURN(off) \ STMT_START { \ - const IV tmpXSoff = (off); \ - assert(tmpXSoff >= 0);\ - PL_stack_sp = PL_stack_base + ax + (tmpXSoff - 1); \ - return; \ + const IV tmpXSoff = (off); \ + assert(tmpXSoff >= 0);\ + PL_stack_sp = PL_stack_base + ax + (tmpXSoff - 1); \ + return; \ } STMT_END #define XSRETURN_IV(v) STMT_START { XST_mIV(0,v); XSRETURN(1); } STMT_END @@ -399,48 +409,48 @@ Rethrows a previously caught exception. See L. */ #define DBM_setFilter(db_type,code) \ - STMT_START { \ - if (db_type) \ - RETVAL = sv_mortalcopy(db_type) ; \ - ST(0) = RETVAL ; \ - if (db_type && (code == &PL_sv_undef)) { \ - SvREFCNT_dec_NN(db_type) ; \ - db_type = NULL ; \ - } \ - else if (code) { \ - if (db_type) \ - sv_setsv(db_type, code) ; \ - else \ - db_type = newSVsv(code) ; \ - } \ - } STMT_END + STMT_START { \ + if (db_type) \ + RETVAL = sv_mortalcopy(db_type) ; \ + ST(0) = RETVAL ; \ + if (db_type && (code == &PL_sv_undef)) { \ + SvREFCNT_dec_NN(db_type) ; \ + db_type = NULL ; \ + } \ + else if (code) { \ + if (db_type) \ + sv_setsv(db_type, code) ; \ + else \ + db_type = newSVsv(code) ; \ + } \ + } STMT_END #define DBM_ckFilter(arg,type,name) \ STMT_START { \ - if (db->type) { \ - if (db->filtering) { \ - croak("recursion detected in %s", name) ; \ - } \ - ENTER ; \ - SAVETMPS ; \ - SAVEINT(db->filtering) ; \ - db->filtering = TRUE ; \ - SAVE_DEFSV ; \ + if (db->type) { \ + if (db->filtering) { \ + croak("recursion detected in %s", name) ; \ + } \ + ENTER ; \ + SAVETMPS ; \ + SAVEINT(db->filtering) ; \ + db->filtering = TRUE ; \ + SAVE_DEFSV ; \ if (name[7] == 's') \ arg = newSVsv(arg); \ - DEFSV_set(arg) ; \ - SvTEMP_off(arg) ; \ - PUSHMARK(SP) ; \ - PUTBACK ; \ - (void) perl_call_sv(db->type, G_DISCARD); \ - SPAGAIN ; \ - PUTBACK ; \ - FREETMPS ; \ - LEAVE ; \ + DEFSV_set(arg) ; \ + SvTEMP_off(arg) ; \ + PUSHMARK(SP) ; \ + PUTBACK ; \ + (void) perl_call_sv(db->type, G_DISCARD); \ + SPAGAIN ; \ + PUTBACK ; \ + FREETMPS ; \ + LEAVE ; \ if (name[7] == 's'){ \ arg = sv_2mortal(arg); \ } \ - } } STMT_END + } } STMT_END #if 1 /* for compatibility */ # define VTBL_sv &PL_vtbl_sv @@ -474,9 +484,7 @@ Rethrows a previously caught exception. See L. # define VTBL_amagicelem &PL_vtbl_amagicelem #endif -#include "perlapi.h" - -#if defined(PERL_IMPLICIT_CONTEXT) && !defined(PERL_NO_GET_CONTEXT) && !defined(PERL_CORE) +#if defined(MULTIPLICITY) && !defined(PERL_NO_GET_CONTEXT) && !defined(PERL_CORE) # undef aTHX # undef aTHX_ # define aTHX PERL_GET_THX @@ -485,15 +493,6 @@ Rethrows a previously caught exception. See L. #if defined(PERL_IMPLICIT_SYS) && !defined(PERL_CORE) # ifndef NO_XSLOCKS -# if defined (NETWARE) && defined (USE_STDIO) -# define times PerlProc_times -# define setuid PerlProc_setuid -# define setgid PerlProc_setgid -# define getpid PerlProc_getpid -# define pause PerlProc_pause -# define exit PerlProc_exit -# define _exit PerlProc__exit -# else # undef closedir # undef opendir # undef stdin @@ -509,35 +508,6 @@ Rethrows a previously caught exception. See L. # undef ungetc # undef fileno -/* Following symbols were giving redefinition errors while building extensions - sgp 17th Oct 2000 */ -#ifdef NETWARE -# undef readdir -# undef fstat -# undef stat -# undef longjmp -# undef endhostent -# undef endnetent -# undef endprotoent -# undef endservent -# undef gethostbyaddr -# undef gethostbyname -# undef gethostent -# undef getnetbyaddr -# undef getnetbyname -# undef getnetent -# undef getprotobyname -# undef getprotobynumber -# undef getprotoent -# undef getservbyname -# undef getservbyport -# undef getservent -# undef inet_ntoa -# undef sethostent -# undef setnetent -# undef setprotoent -# undef setservent -#endif /* NETWARE */ - /* to avoid warnings: "xyz" redefined */ #ifdef WIN32 # undef popen @@ -686,7 +656,6 @@ Rethrows a previously caught exception. See L. # define shutdown PerlSock_shutdown # define socket PerlSock_socket # define socketpair PerlSock_socketpair -# endif /* NETWARE && USE_STDIO */ # undef fd_set # undef FD_SET diff --git a/gnu/usr.bin/perl/amigaos4/amigaio.c b/gnu/usr.bin/perl/amigaos4/amigaio.c index 58964f955b5..e51186c9584 100644 --- a/gnu/usr.bin/perl/amigaos4/amigaio.c +++ b/gnu/usr.bin/perl/amigaos4/amigaio.c @@ -28,244 +28,244 @@ extern int32 myruncommand(BPTR seglist, int stack, char *command, int length, ch void amigaos_stdio_get(pTHX_ StdioStore *store) { - store->astdin = - amigaos_get_file(PerlIO_fileno(IoIFP(GvIO(PL_stdingv)))); - store->astderr = - amigaos_get_file(PerlIO_fileno(IoIFP(GvIO(PL_stderrgv)))); - store->astdout = amigaos_get_file( - PerlIO_fileno(IoIFP(GvIO(gv_fetchpv("STDOUT", TRUE, SVt_PVIO))))); + store->astdin = + amigaos_get_file(PerlIO_fileno(IoIFP(GvIO(PL_stdingv)))); + store->astderr = + amigaos_get_file(PerlIO_fileno(IoIFP(GvIO(PL_stderrgv)))); + store->astdout = amigaos_get_file( + PerlIO_fileno(IoIFP(GvIO(gv_fetchpv("STDOUT", TRUE, SVt_PVIO))))); } void amigaos_stdio_save(pTHX_ StdioStore *store) { - amigaos_stdio_get(aTHX_ store); - store->oldstdin = IDOS->SelectInput(store->astdin); - store->oldstderr = IDOS->SelectErrorOutput(store->astderr); - store->oldstdout = IDOS->SelectOutput(store->astdout); + amigaos_stdio_get(aTHX_ store); + store->oldstdin = IDOS->SelectInput(store->astdin); + store->oldstderr = IDOS->SelectErrorOutput(store->astderr); + store->oldstdout = IDOS->SelectOutput(store->astdout); } void amigaos_stdio_restore(pTHX_ const StdioStore *store) { - IDOS->SelectInput(store->oldstdin); - IDOS->SelectErrorOutput(store->oldstderr); - IDOS->SelectOutput(store->oldstdout); + IDOS->SelectInput(store->oldstdin); + IDOS->SelectErrorOutput(store->oldstderr); + IDOS->SelectOutput(store->oldstdout); } void amigaos_post_exec(int fd, int do_report) { - /* We *must* write something to our pipe or else - * the other end hangs */ - if (do_report) - { - int e = errno; - PerlLIO_write(fd, (void *)&e, sizeof(e)); - PerlLIO_close(fd); - } + /* We *must* write something to our pipe or else + * the other end hangs */ + if (do_report) + { + int e = errno; + PerlLIO_write(fd, (void *)&e, sizeof(e)); + PerlLIO_close(fd); + } } struct popen_data { - struct Task *parent; - STRPTR command; + struct Task *parent; + STRPTR command; }; static int popen_result = 0; int popen_child() { - struct Task *thisTask = IExec->FindTask(0); - struct popen_data *pd = (struct popen_data *)thisTask->tc_UserData; - const char *argv[4]; + struct Task *thisTask = IExec->FindTask(0); + struct popen_data *pd = (struct popen_data *)thisTask->tc_UserData; + const char *argv[4]; - argv[0] = "sh"; - argv[1] = "-c"; - argv[2] = pd->command ? pd->command : NULL; - argv[3] = NULL; + argv[0] = "sh"; + argv[1] = "-c"; + argv[2] = pd->command ? pd->command : NULL; + argv[3] = NULL; - // adebug("%s %ld %s\n",__FUNCTION__,__LINE__,command?command:"NULL"); + // adebug("%s %ld %s\n",__FUNCTION__,__LINE__,command?command:"NULL"); - /* We need to give this to sh via execvp, execvp expects filename, - * argv[] - */ - IExec->ObtainSemaphore(&popen_sema); + /* We need to give this to sh via execvp, execvp expects filename, + * argv[] + */ + IExec->ObtainSemaphore(&popen_sema); - IExec->Signal(pd->parent,SIGBREAKF_CTRL_F); + IExec->Signal(pd->parent,SIGBREAKF_CTRL_F); - popen_result = myexecvp(FALSE, argv[0], (char **)argv); - if (pd->command) - IExec->FreeVec(pd->command); - IExec->FreeVec(pd); + popen_result = myexecvp(FALSE, argv[0], (char **)argv); + if (pd->command) + IExec->FreeVec(pd->command); + IExec->FreeVec(pd); - IExec->ReleaseSemaphore(&popen_sema); - IExec->Forbid(); - return 0; + IExec->ReleaseSemaphore(&popen_sema); + IExec->Forbid(); + return 0; } PerlIO *Perl_my_popen(pTHX_ const char *cmd, const char *mode) { - PERL_FLUSHALL_FOR_CHILD; - PerlIO *result = NULL; - char pipe_name[50]; - char unix_pipe[50]; - char ami_pipe[50]; - BPTR input = 0; - BPTR output = 0; - struct Process *proc = NULL; - struct Task *thisTask = IExec->FindTask(0); - struct popen_data * pd = NULL; - - /* First we need to check the mode - * We can only have unidirectional pipes - */ - // adebug("%s %ld cmd %s mode %s \n",__FUNCTION__,__LINE__,cmd, - // mode); - - switch (mode[0]) - { - case 'r': - case 'w': - break; - - default: - - errno = EINVAL; - return result; - } - - /* Make a unique pipe name - * we need a unix one and an amigaos version (of the same pipe!) - * as were linking with libunix. - */ - - sprintf(pipe_name, "%x%08lx/4096/0", pipenum++, - IUtility->GetUniqueID()); - sprintf(unix_pipe, "/PIPE/%s", pipe_name); - sprintf(ami_pipe, "PIPE:%s", pipe_name); - - /* Now we open the AmigaOs Filehandles That we wil pass to our - * Sub process - */ - - if (mode[0] == 'r') - { - /* A read mode pipe: Output from pipe input from Output() or NIL:*/ - /* First attempt to DUP Output() */ - input = IDOS->DupFileHandle(IDOS->Input()); - if(input == 0) - { - input = IDOS->Open("NIL:", MODE_READWRITE); - } - if (input != 0) - { - output = IDOS->Open(ami_pipe, MODE_NEWFILE); - } - result = PerlIO_open(unix_pipe, mode); - } - else - { - /* Open the write end first! */ - - result = PerlIO_open(unix_pipe, mode); - - input = IDOS->Open(ami_pipe, MODE_OLDFILE); - if (input != 0) - { - output = IDOS->DupFileHandle(IDOS->Output()); - if(output == 0) - { - output = IDOS->Open("NIL:", MODE_READWRITE); - } - } - } - if ((input == 0) || (output == 0) || (result == NULL)) - { - /* Ouch stream opening failed */ - /* Close and bail */ - if (input) - IDOS->Close(input); - if (output) - IDOS->Close(output); - if(result) - { - PerlIO_close(result); - result = NULL; - } - return result; - } - - /* We have our streams now start our new process - * We're using a new process so that execve can modify the environment - * with messing things up for the shell that launched perl - * Copy cmd before we launch the subprocess as perl seems to waste - * no time in overwriting it! The subprocess will free the copy. - */ - - if((pd = (struct popen_data*)IExec->AllocVecTags(sizeof(struct popen_data),AVT_Type,MEMF_SHARED,TAG_DONE))) - { - pd->parent = thisTask; - if ((pd->command = mystrdup(cmd))) - { - // adebug("%s %ld - // %s\n",__FUNCTION__,__LINE__,cmd_copy?cmd_copy:"NULL"); - proc = IDOS->CreateNewProcTags( - NP_Entry, popen_child, NP_Child, TRUE, NP_StackSize, - ((struct Process *)thisTask)->pr_StackSize, NP_Input, input, - NP_Output, output, NP_Error, IDOS->ErrorOutput(), - NP_CloseError, FALSE, NP_Cli, TRUE, NP_Name, - "Perl: popen process", NP_UserData, (int)pd, - TAG_DONE); - } - } - if(proc) - { - /* wait for the child be setup right */ - IExec->Wait(SIGBREAKF_CTRL_F); - } - if (!proc) - { - /* New Process Failed to start - * Close and bail out - */ - if(pd) - { - if(pd->command) - { - IExec->FreeVec(pd->command); - } - IExec->FreeVec(pd); - } - if (input) - IDOS->Close(input); - if (output) - IDOS->Close(output); - if(result) - { - PerlIO_close(result); - result = NULL; - } - } - - /* Our new process is running and will close it streams etc - * once its done. All we need to is open the pipe via stdio - */ - - return result; + PERL_FLUSHALL_FOR_CHILD; + PerlIO *result = NULL; + char pipe_name[50]; + char unix_pipe[50]; + char ami_pipe[50]; + BPTR input = 0; + BPTR output = 0; + struct Process *proc = NULL; + struct Task *thisTask = IExec->FindTask(0); + struct popen_data * pd = NULL; + + /* First we need to check the mode + * We can only have unidirectional pipes + */ + // adebug("%s %ld cmd %s mode %s \n",__FUNCTION__,__LINE__,cmd, + // mode); + + switch (mode[0]) + { + case 'r': + case 'w': + break; + + default: + + errno = EINVAL; + return result; + } + + /* Make a unique pipe name + * we need a unix one and an amigaos version (of the same pipe!) + * as were linking with libunix. + */ + + sprintf(pipe_name, "%x%08lx/4096/0", pipenum++, + IUtility->GetUniqueID()); + sprintf(unix_pipe, "/PIPE/%s", pipe_name); + sprintf(ami_pipe, "PIPE:%s", pipe_name); + + /* Now we open the AmigaOs Filehandles That we wil pass to our + * Sub process + */ + + if (mode[0] == 'r') + { + /* A read mode pipe: Output from pipe input from Output() or NIL:*/ + /* First attempt to DUP Output() */ + input = IDOS->DupFileHandle(IDOS->Input()); + if(input == 0) + { + input = IDOS->Open("NIL:", MODE_READWRITE); + } + if (input != 0) + { + output = IDOS->Open(ami_pipe, MODE_NEWFILE); + } + result = PerlIO_open(unix_pipe, mode); + } + else + { + /* Open the write end first! */ + + result = PerlIO_open(unix_pipe, mode); + + input = IDOS->Open(ami_pipe, MODE_OLDFILE); + if (input != 0) + { + output = IDOS->DupFileHandle(IDOS->Output()); + if(output == 0) + { + output = IDOS->Open("NIL:", MODE_READWRITE); + } + } + } + if ((input == 0) || (output == 0) || (result == NULL)) + { + /* Ouch stream opening failed */ + /* Close and bail */ + if (input) + IDOS->Close(input); + if (output) + IDOS->Close(output); + if(result) + { + PerlIO_close(result); + result = NULL; + } + return result; + } + + /* We have our streams now start our new process + * We're using a new process so that execve can modify the environment + * with messing things up for the shell that launched perl + * Copy cmd before we launch the subprocess as perl seems to waste + * no time in overwriting it! The subprocess will free the copy. + */ + + if((pd = (struct popen_data*)IExec->AllocVecTags(sizeof(struct popen_data),AVT_Type,MEMF_SHARED,TAG_DONE))) + { + pd->parent = thisTask; + if ((pd->command = mystrdup(cmd))) + { + // adebug("%s %ld + // %s\n",__FUNCTION__,__LINE__,cmd_copy?cmd_copy:"NULL"); + proc = IDOS->CreateNewProcTags( + NP_Entry, popen_child, NP_Child, TRUE, NP_StackSize, + ((struct Process *)thisTask)->pr_StackSize, NP_Input, input, + NP_Output, output, NP_Error, IDOS->ErrorOutput(), + NP_CloseError, FALSE, NP_Cli, TRUE, NP_Name, + "Perl: popen process", NP_UserData, (int)pd, + TAG_DONE); + } + } + if(proc) + { + /* wait for the child be setup right */ + IExec->Wait(SIGBREAKF_CTRL_F); + } + if (!proc) + { + /* New Process Failed to start + * Close and bail out + */ + if(pd) + { + if(pd->command) + { + IExec->FreeVec(pd->command); + } + IExec->FreeVec(pd); + } + if (input) + IDOS->Close(input); + if (output) + IDOS->Close(output); + if(result) + { + PerlIO_close(result); + result = NULL; + } + } + + /* Our new process is running and will close it streams etc + * once its done. All we need to is open the pipe via stdio + */ + + return result; } I32 Perl_my_pclose(pTHX_ PerlIO *ptr) { - int result = -1; - /* close the file before obtaining the semaphore else we might end up - hanging waiting for the child to read the last bit from the pipe */ - PerlIO_close(ptr); - IExec->ObtainSemaphore(&popen_sema); - result = popen_result; - IExec->ReleaseSemaphore(&popen_sema); - return result; + int result = -1; + /* close the file before obtaining the semaphore else we might end up + hanging waiting for the child to read the last bit from the pipe */ + PerlIO_close(ptr); + IExec->ObtainSemaphore(&popen_sema); + result = popen_result; + IExec->ReleaseSemaphore(&popen_sema); + return result; } @@ -284,11 +284,11 @@ Perl_my_pclose(pTHX_ PerlIO *ptr) struct thread_info { - pthread_t ti_pid; - int ti_children; - pthread_t ti_parent; - struct MsgPort *ti_port; - struct Process *ti_Process; + pthread_t ti_pid; + int ti_children; + pthread_t ti_parent; + struct MsgPort *ti_port; + struct Process *ti_Process; }; static struct thread_info pseudo_children[MAX_THREADS]; @@ -297,61 +297,61 @@ static struct SignalSemaphore fork_array_sema; void amigaos4_init_fork_array() { - IExec->InitSemaphore(&fork_array_sema); - pseudo_children[0].ti_pid = (pthread_t)IExec->FindTask(0); - pseudo_children[0].ti_parent = -1; - pseudo_children[0].ti_port = - (struct MsgPort *)IExec->AllocSysObjectTags(ASOT_PORT, TAG_DONE); + IExec->InitSemaphore(&fork_array_sema); + pseudo_children[0].ti_pid = (pthread_t)IExec->FindTask(0); + pseudo_children[0].ti_parent = -1; + pseudo_children[0].ti_port = + (struct MsgPort *)IExec->AllocSysObjectTags(ASOT_PORT, TAG_DONE); } void amigaos4_dispose_fork_array() { - while (pseudo_children[0].ti_children > 0) - { - void *msg; - IExec->WaitPort(pseudo_children[0].ti_port); - msg = IExec->GetMsg(pseudo_children[0].ti_port); - if (msg) - IExec->FreeSysObject(ASOT_MESSAGE, msg); - pseudo_children[0].ti_children--; - } - IExec->FreeSysObject(ASOT_PORT, pseudo_children[0].ti_port); + while (pseudo_children[0].ti_children > 0) + { + void *msg; + IExec->WaitPort(pseudo_children[0].ti_port); + msg = IExec->GetMsg(pseudo_children[0].ti_port); + if (msg) + IExec->FreeSysObject(ASOT_MESSAGE, msg); + pseudo_children[0].ti_children--; + } + IExec->FreeSysObject(ASOT_PORT, pseudo_children[0].ti_port); } struct thread_exit_message { - struct Message tem_Message; - pthread_t tem_pid; - int tem_status; + struct Message tem_Message; + pthread_t tem_pid; + int tem_status; }; int getnextchild() { - int i; - for (i = 0; i < MAX_THREADS; i++) - { - if (pseudo_children[i].ti_pid == 0) - return i; - } - return -1; + int i; + for (i = 0; i < MAX_THREADS; i++) + { + if (pseudo_children[i].ti_pid == 0) + return i; + } + return -1; } int findparent(pthread_t pid) { - int i; - for (i = 0; i < MAX_THREADS; i++) - { - if (pseudo_children[i].ti_pid == pid) - return i; - } - return -1; + int i; + for (i = 0; i < MAX_THREADS; i++) + { + if (pseudo_children[i].ti_pid == pid) + return i; + } + return -1; } struct child_arg { - struct Task *ca_parent_task; - pthread_t ca_parent; - PerlInterpreter *ca_interp; + struct Task *ca_parent_task; + pthread_t ca_parent; + PerlInterpreter *ca_interp; }; #undef kill @@ -362,202 +362,202 @@ struct child_arg int amigaos_kill(Pid_t pid, int signal) { - int i; - BOOL thistask = FALSE; - Pid_t realpid = pid; // Perhaps we have a real pid from else where? - /* Look for our DOS pid */ - IExec->ObtainSemaphore(&fork_array_sema); - for (i = 0; i < MAX_THREADS; i++) - { - if (pseudo_children[i].ti_pid == pid) - { - realpid = (Pid_t)IDOS->GetPID(pseudo_children[i].ti_Process,GPID_PROCESS); - if(pseudo_children[i].ti_Process == (struct Process *)IExec->FindTask(NULL)) - { - thistask = TRUE; - } - break; - } - } - IExec->ReleaseSemaphore(&fork_array_sema); - /* Allow the C library to work out which signals are realy valid */ - if(thistask) - { - /* A quirk in newlib kill handling means it's better to call raise() rather than kill on out own task. */ - return raise(signal); - } - else - { - return kill(realpid,signal); - } + int i; + BOOL thistask = FALSE; + Pid_t realpid = pid; // Perhaps we have a real pid from else where? + /* Look for our DOS pid */ + IExec->ObtainSemaphore(&fork_array_sema); + for (i = 0; i < MAX_THREADS; i++) + { + if (pseudo_children[i].ti_pid == pid) + { + realpid = (Pid_t)IDOS->GetPID(pseudo_children[i].ti_Process,GPID_PROCESS); + if(pseudo_children[i].ti_Process == (struct Process *)IExec->FindTask(NULL)) + { + thistask = TRUE; + } + break; + } + } + IExec->ReleaseSemaphore(&fork_array_sema); + /* Allow the C library to work out which signals are realy valid */ + if(thistask) + { + /* A quirk in newlib kill handling means it's better to call raise() rather than kill on out own task. */ + return raise(signal); + } + else + { + return kill(realpid,signal); + } } static THREAD_RET_TYPE amigaos4_start_child(void *arg) { - PerlInterpreter *my_perl = - (PerlInterpreter *)((struct child_arg *)arg)->ca_interp; - ; + PerlInterpreter *my_perl = + (PerlInterpreter *)((struct child_arg *)arg)->ca_interp; + ; - GV *tmpgv; - int status; - int parent; - int nextchild; - pthread_t pseudo_id = pthread_self(); + GV *tmpgv; + int status; + int parent; + int nextchild; + pthread_t pseudo_id = pthread_self(); #ifdef PERL_SYNC_FORK - static long sync_fork_id = 0; - long id = ++sync_fork_id; + static long sync_fork_id = 0; + long id = ++sync_fork_id; #endif - /* before we do anything set up our process semaphore and add - a new entry to the pseudochildren */ + /* before we do anything set up our process semaphore and add + a new entry to the pseudochildren */ - /* get next available slot */ - /* should not fail here! */ + /* get next available slot */ + /* should not fail here! */ - IExec->ObtainSemaphore(&fork_array_sema); + IExec->ObtainSemaphore(&fork_array_sema); - nextchild = getnextchild(); + nextchild = getnextchild(); - pseudo_children[nextchild].ti_pid = pseudo_id; - pseudo_children[nextchild].ti_Process = (struct Process *)IExec->FindTask(NULL); - pseudo_children[nextchild].ti_parent = - ((struct child_arg *)arg)->ca_parent; - pseudo_children[nextchild].ti_port = - (struct MsgPort *)IExec->AllocSysObjectTags(ASOT_PORT, TAG_DONE); + pseudo_children[nextchild].ti_pid = pseudo_id; + pseudo_children[nextchild].ti_Process = (struct Process *)IExec->FindTask(NULL); + pseudo_children[nextchild].ti_parent = + ((struct child_arg *)arg)->ca_parent; + pseudo_children[nextchild].ti_port = + (struct MsgPort *)IExec->AllocSysObjectTags(ASOT_PORT, TAG_DONE); - num_pseudo_children++; - IExec->ReleaseSemaphore(&fork_array_sema); + num_pseudo_children++; + IExec->ReleaseSemaphore(&fork_array_sema); - /* We're set up let the parent continue */ + /* We're set up let the parent continue */ - IExec->Signal(((struct child_arg *)arg)->ca_parent_task, - SIGBREAKF_CTRL_F); + IExec->Signal(((struct child_arg *)arg)->ca_parent_task, + SIGBREAKF_CTRL_F); - PERL_SET_THX(my_perl); - if ((tmpgv = gv_fetchpv("$", TRUE, SVt_PV))) - { - SV *sv = GvSV(tmpgv); - SvREADONLY_off(sv); - sv_setiv(sv, (IV)pseudo_id); - SvREADONLY_on(sv); - } - hv_clear(PL_pidstatus); + PERL_SET_THX(my_perl); + if ((tmpgv = gv_fetchpv("$", TRUE, SVt_PV))) + { + SV *sv = GvSV(tmpgv); + SvREADONLY_off(sv); + sv_setiv(sv, (IV)pseudo_id); + SvREADONLY_on(sv); + } + hv_clear(PL_pidstatus); - /* push a zero on the stack (we are the child) */ - { - dSP; - dTARGET; - PUSHi(0); - PUTBACK; - } + /* push a zero on the stack (we are the child) */ + { + dSP; + dTARGET; + PUSHi(0); + PUTBACK; + } - /* continue from next op */ - PL_op = PL_op->op_next; + /* continue from next op */ + PL_op = PL_op->op_next; - { - dJMPENV; - volatile int oldscope = PL_scopestack_ix; + { + dJMPENV; + volatile int oldscope = PL_scopestack_ix; restart: - JMPENV_PUSH(status); - switch (status) - { - case 0: - CALLRUNOPS(aTHX); - status = 0; - break; - case 2: - while (PL_scopestack_ix > oldscope) - { - LEAVE; - } - FREETMPS; - PL_curstash = PL_defstash; - if (PL_endav && !PL_minus_c) - call_list(oldscope, PL_endav); - status = STATUS_EXIT; - break; - case 3: - if (PL_restartop) - { - POPSTACK_TO(PL_mainstack); - PL_op = PL_restartop; - PL_restartop = (OP *)NULL; - ; - goto restart; - } - PerlIO_printf(Perl_error_log, "panic: restartop\n"); - FREETMPS; - status = 1; - break; - } - JMPENV_POP; - - /* XXX hack to avoid perl_destruct() freeing optree */ - PL_main_root = (OP *)NULL; - } - - { - do_close(PL_stdingv, FALSE); - do_close(gv_fetchpv("STDOUT", TRUE, SVt_PVIO), - FALSE); /* PL_stdoutgv - ISAGN */ - do_close(PL_stderrgv, FALSE); - } - - /* destroy everything (waits for any pseudo-forked children) */ - - /* wait for any remaining children */ - - while (pseudo_children[nextchild].ti_children > 0) - { - if (IExec->WaitPort(pseudo_children[nextchild].ti_port)) - { - void *msg = - IExec->GetMsg(pseudo_children[nextchild].ti_port); - IExec->FreeSysObject(ASOT_MESSAGE, msg); - pseudo_children[nextchild].ti_children--; - } - } - if (PL_scopestack_ix <= 1) - { - perl_destruct(my_perl); - } - perl_free(my_perl); - - IExec->ObtainSemaphore(&fork_array_sema); - parent = findparent(pseudo_children[nextchild].ti_parent); - pseudo_children[nextchild].ti_pid = 0; - pseudo_children[nextchild].ti_parent = 0; - IExec->FreeSysObject(ASOT_PORT, pseudo_children[nextchild].ti_port); - pseudo_children[nextchild].ti_port = NULL; - - IExec->ReleaseSemaphore(&fork_array_sema); - - { - if (parent >= 0) - { - struct thread_exit_message *tem = - (struct thread_exit_message *) - IExec->AllocSysObjectTags( - ASOT_MESSAGE, ASOMSG_Size, - sizeof(struct thread_exit_message), - ASOMSG_Length, - sizeof(struct thread_exit_message)); - if (tem) - { - tem->tem_pid = pseudo_id; - tem->tem_status = status; - IExec->PutMsg(pseudo_children[parent].ti_port, - (struct Message *)tem); - } - } - } + JMPENV_PUSH(status); + switch (status) + { + case 0: + CALLRUNOPS(aTHX); + status = 0; + break; + case 2: + while (PL_scopestack_ix > oldscope) + { + LEAVE; + } + FREETMPS; + PL_curstash = PL_defstash; + if (PL_endav && !PL_minus_c) + call_list(oldscope, PL_endav); + status = STATUS_EXIT; + break; + case 3: + if (PL_restartop) + { + POPSTACK_TO(PL_mainstack); + PL_op = PL_restartop; + PL_restartop = (OP *)NULL; + ; + goto restart; + } + PerlIO_printf(Perl_error_log, "panic: restartop\n"); + FREETMPS; + status = 1; + break; + } + JMPENV_POP; + + /* XXX hack to avoid perl_destruct() freeing optree */ + PL_main_root = (OP *)NULL; + } + + { + do_close(PL_stdingv, FALSE); + do_close(gv_fetchpv("STDOUT", TRUE, SVt_PVIO), + FALSE); /* PL_stdoutgv - ISAGN */ + do_close(PL_stderrgv, FALSE); + } + + /* destroy everything (waits for any pseudo-forked children) */ + + /* wait for any remaining children */ + + while (pseudo_children[nextchild].ti_children > 0) + { + if (IExec->WaitPort(pseudo_children[nextchild].ti_port)) + { + void *msg = + IExec->GetMsg(pseudo_children[nextchild].ti_port); + IExec->FreeSysObject(ASOT_MESSAGE, msg); + pseudo_children[nextchild].ti_children--; + } + } + if (PL_scopestack_ix <= 1) + { + perl_destruct(my_perl); + } + perl_free(my_perl); + + IExec->ObtainSemaphore(&fork_array_sema); + parent = findparent(pseudo_children[nextchild].ti_parent); + pseudo_children[nextchild].ti_pid = 0; + pseudo_children[nextchild].ti_parent = 0; + IExec->FreeSysObject(ASOT_PORT, pseudo_children[nextchild].ti_port); + pseudo_children[nextchild].ti_port = NULL; + + IExec->ReleaseSemaphore(&fork_array_sema); + + { + if (parent >= 0) + { + struct thread_exit_message *tem = + (struct thread_exit_message *) + IExec->AllocSysObjectTags( + ASOT_MESSAGE, ASOMSG_Size, + sizeof(struct thread_exit_message), + ASOMSG_Length, + sizeof(struct thread_exit_message)); + if (tem) + { + tem->tem_pid = pseudo_id; + tem->tem_status = status; + IExec->PutMsg(pseudo_children[parent].ti_port, + (struct Message *)tem); + } + } + } #ifdef PERL_SYNC_FORK - return id; + return id; #else - return (void *)status; + return (void *)status; #endif } @@ -565,61 +565,61 @@ restart: Pid_t amigaos_fork() { - dTHX; - pthread_t id; - int handle; - struct child_arg arg; - if (num_pseudo_children >= MAX_THREADS) - { - errno = EAGAIN; - return -1; - } - arg.ca_interp = perl_clone((PerlInterpreter *)aTHX, CLONEf_COPY_STACKS); - arg.ca_parent_task = IExec->FindTask(NULL); - arg.ca_parent = - pthread_self() ? pthread_self() : (pthread_t)IExec->FindTask(0); - - handle = pthread_create(&id, NULL, amigaos4_start_child, (void *)&arg); - pseudo_children[findparent(arg.ca_parent)].ti_children++; - - IExec->Wait(SIGBREAKF_CTRL_F); - - PERL_SET_THX(aTHX); /* XXX perl_clone*() set TLS */ - if (handle) - { - errno = EAGAIN; - return -1; - } - return id; + dTHX; + pthread_t id; + int handle; + struct child_arg arg; + if (num_pseudo_children >= MAX_THREADS) + { + errno = EAGAIN; + return -1; + } + arg.ca_interp = perl_clone((PerlInterpreter *)aTHX, CLONEf_COPY_STACKS); + arg.ca_parent_task = IExec->FindTask(NULL); + arg.ca_parent = + pthread_self() ? pthread_self() : (pthread_t)IExec->FindTask(0); + + handle = pthread_create(&id, NULL, amigaos4_start_child, (void *)&arg); + pseudo_children[findparent(arg.ca_parent)].ti_children++; + + IExec->Wait(SIGBREAKF_CTRL_F); + + PERL_SET_THX(aTHX); /* XXX perl_clone*() set TLS */ + if (handle) + { + errno = EAGAIN; + return -1; + } + return id; } Pid_t amigaos_waitpid(pTHX_ int optype, Pid_t pid, void *argflags) { - int result; - if (PL_signals & PERL_SIGNALS_UNSAFE_FLAG) - { - result = pthread_join(pid, (void **)argflags); - } - else - { - while ((result = pthread_join(pid, (void **)argflags)) == -1 && - errno == EINTR) - { - // PERL_ASYNC_CHECK(); - } - } - return result; + int result; + if (PL_signals & PERL_SIGNALS_UNSAFE_FLAG) + { + result = pthread_join(pid, (void **)argflags); + } + else + { + while ((result = pthread_join(pid, (void **)argflags)) == -1 && + errno == EINTR) + { + // PERL_ASYNC_CHECK(); + } + } + return result; } void amigaos_fork_set_userdata( pTHX_ struct UserData *userdata, I32 did_pipes, int pp, SV **sp, SV **mark) { - userdata->parent = IExec->FindTask(0); - userdata->did_pipes = did_pipes; - userdata->pp = pp; - userdata->sp = sp; - userdata->mark = mark; - userdata->my_perl = aTHX; + userdata->parent = IExec->FindTask(0); + userdata->did_pipes = did_pipes; + userdata->pp = pp; + userdata->sp = sp; + userdata->mark = mark; + userdata->my_perl = aTHX; } /* AmigaOS specific versions of #?exec#? solely for use in amigaos_system_child @@ -627,277 +627,275 @@ void amigaos_fork_set_userdata( static void S_exec_failed(pTHX_ const char *cmd, int fd, int do_report) { - const int e = errno; + const int e = errno; // PERL_ARGS_ASSERT_EXEC_FAILED; - if (e) - { - if (ckWARN(WARN_EXEC)) - Perl_warner(aTHX_ packWARN(WARN_EXEC), - "Can't exec \"%s\": %s", cmd, Strerror(e)); - } - if (do_report) - { - /* XXX silently ignore failures */ - PERL_UNUSED_RESULT(PerlLIO_write(fd, (void *)&e, sizeof(int))); - PerlLIO_close(fd); - } + if (e) + { + if (ckWARN(WARN_EXEC)) + Perl_warner(aTHX_ packWARN(WARN_EXEC), + "Can't exec \"%s\": %s", cmd, Strerror(e)); + } + if (do_report) + { + /* XXX silently ignore failures */ + PERL_UNUSED_RESULT(PerlLIO_write(fd, (void *)&e, sizeof(int))); + PerlLIO_close(fd); + } } static I32 S_do_amigaos_exec3(pTHX_ const char *incmd, int fd, int do_report) { - dVAR; - const char **argv, **a; - char *s; - char *buf; - char *cmd; - /* Make a copy so we can change it */ - const Size_t cmdlen = strlen(incmd) + 1; - I32 result = -1; - - PERL_ARGS_ASSERT_DO_EXEC3; - - ENTER; - Newx(buf, cmdlen, char); - SAVEFREEPV(buf); - cmd = buf; - memcpy(cmd, incmd, cmdlen); - - while (*cmd && isSPACE(*cmd)) - cmd++; - - /* see if there are shell metacharacters in it */ - - if (*cmd == '.' && isSPACE(cmd[1])) - goto doshell; - - if (strBEGINs(cmd, "exec") && isSPACE(cmd[4])) - goto doshell; - - s = cmd; - while (isWORDCHAR(*s)) - s++; /* catch VAR=val gizmo */ - if (*s == '=') - goto doshell; - - for (s = cmd; *s; s++) - { - if (*s != ' ' && !isALPHA(*s) && - memCHRs("$&*(){}[]'\";\\|?<>~`\n", *s)) - { - if (*s == '\n' && !s[1]) - { - *s = '\0'; - break; - } - /* handle the 2>&1 construct at the end */ - if (*s == '>' && s[1] == '&' && s[2] == '1' && - s > cmd + 1 && s[-1] == '2' && isSPACE(s[-2]) && - (!s[3] || isSPACE(s[3]))) - { - const char *t = s + 3; - - while (*t && isSPACE(*t)) - ++t; - if (!*t && (PerlLIO_dup2(1, 2) != -1)) - { - s[-2] = '\0'; - break; - } - } + const char **argv, **a; + char *s; + char *buf; + char *cmd; + /* Make a copy so we can change it */ + const Size_t cmdlen = strlen(incmd) + 1; + I32 result = -1; + + PERL_ARGS_ASSERT_DO_EXEC3; + + ENTER; + Newx(buf, cmdlen, char); + SAVEFREEPV(buf); + cmd = buf; + memcpy(cmd, incmd, cmdlen); + + while (*cmd && isSPACE(*cmd)) + cmd++; + + /* see if there are shell metacharacters in it */ + + if (*cmd == '.' && isSPACE(cmd[1])) + goto doshell; + + if (strBEGINs(cmd, "exec") && isSPACE(cmd[4])) + goto doshell; + + s = cmd; + while (isWORDCHAR(*s)) + s++; /* catch VAR=val gizmo */ + if (*s == '=') + goto doshell; + + for (s = cmd; *s; s++) + { + if (*s != ' ' && !isALPHA(*s) && + memCHRs("$&*(){}[]'\";\\|?<>~`\n", *s)) + { + if (*s == '\n' && !s[1]) + { + *s = '\0'; + break; + } + /* handle the 2>&1 construct at the end */ + if (*s == '>' && s[1] == '&' && s[2] == '1' && + s > cmd + 1 && s[-1] == '2' && isSPACE(s[-2]) && + (!s[3] || isSPACE(s[3]))) + { + const char *t = s + 3; + + while (*t && isSPACE(*t)) + ++t; + if (!*t && (PerlLIO_dup2(1, 2) != -1)) + { + s[-2] = '\0'; + break; + } + } doshell: - PERL_FPU_PRE_EXEC - result = myexecl(FALSE, PL_sh_path, "sh", "-c", cmd, - (char *)NULL); - PERL_FPU_POST_EXEC - S_exec_failed(aTHX_ PL_sh_path, fd, do_report); - amigaos_post_exec(fd, do_report); - goto leave; - } - } - - Newx(argv, (s - cmd) / 2 + 2, const char *); - SAVEFREEPV(argv); - cmd = savepvn(cmd, s - cmd); - SAVEFREEPV(cmd); - a = argv; - for (s = cmd; *s;) - { - while (isSPACE(*s)) - s++; - if (*s) - *(a++) = s; - while (*s && !isSPACE(*s)) - s++; - if (*s) - *s++ = '\0'; - } - *a = NULL; - if (argv[0]) - { - PERL_FPU_PRE_EXEC - result = myexecvp(FALSE, argv[0], EXEC_ARGV_CAST(argv)); - PERL_FPU_POST_EXEC - if (errno == ENOEXEC) /* for system V NIH syndrome */ - goto doshell; - S_exec_failed(aTHX_ argv[0], fd, do_report); - amigaos_post_exec(fd, do_report); - } + PERL_FPU_PRE_EXEC + result = myexecl(FALSE, PL_sh_path, "sh", "-c", cmd, + (char *)NULL); + PERL_FPU_POST_EXEC + S_exec_failed(aTHX_ PL_sh_path, fd, do_report); + amigaos_post_exec(fd, do_report); + goto leave; + } + } + + Newx(argv, (s - cmd) / 2 + 2, const char *); + SAVEFREEPV(argv); + cmd = savepvn(cmd, s - cmd); + SAVEFREEPV(cmd); + a = argv; + for (s = cmd; *s;) + { + while (isSPACE(*s)) + s++; + if (*s) + *(a++) = s; + while (*s && !isSPACE(*s)) + s++; + if (*s) + *s++ = '\0'; + } + *a = NULL; + if (argv[0]) + { + PERL_FPU_PRE_EXEC + result = myexecvp(FALSE, argv[0], EXEC_ARGV_CAST(argv)); + PERL_FPU_POST_EXEC + if (errno == ENOEXEC) /* for system V NIH syndrome */ + goto doshell; + S_exec_failed(aTHX_ argv[0], fd, do_report); + amigaos_post_exec(fd, do_report); + } leave: - LEAVE; - return result; + LEAVE; + return result; } I32 S_do_amigaos_aexec5( pTHX_ SV *really, SV **mark, SV **sp, int fd, int do_report) { - dVAR; - I32 result = -1; - PERL_ARGS_ASSERT_DO_AEXEC5; - ENTER; - if (sp > mark) - { - const char **argv, **a; - const char *tmps = NULL; - Newx(argv, sp - mark + 1, const char *); - SAVEFREEPV(argv); - a = argv; - - while (++mark <= sp) - { - if (*mark) { - char *arg = savepv(SvPV_nolen_const(*mark)); - SAVEFREEPV(arg); - *a++ = arg; - } else - *a++ = ""; - } - *a = NULL; - if (really) { - tmps = savepv(SvPV_nolen_const(really)); - SAVEFREEPV(tmps); - } - if ((!really && *argv[0] != '/') || - (really && *tmps != '/')) /* will execvp use PATH? */ - TAINT_ENV(); /* testing IFS here is overkill, probably + I32 result = -1; + PERL_ARGS_ASSERT_DO_AEXEC5; + ENTER; + if (sp > mark) + { + const char **argv, **a; + const char *tmps = NULL; + Newx(argv, sp - mark + 1, const char *); + SAVEFREEPV(argv); + a = argv; + + while (++mark <= sp) + { + if (*mark) { + char *arg = savepv(SvPV_nolen_const(*mark)); + SAVEFREEPV(arg); + *a++ = arg; + } else + *a++ = ""; + } + *a = NULL; + if (really) { + tmps = savepv(SvPV_nolen_const(really)); + SAVEFREEPV(tmps); + } + if ((!really && *argv[0] != '/') || + (really && *tmps != '/')) /* will execvp use PATH? */ + TAINT_ENV(); /* testing IFS here is overkill, probably */ - PERL_FPU_PRE_EXEC - if (really && *tmps) - { - result = myexecvp(FALSE, tmps, EXEC_ARGV_CAST(argv)); - } - else - { - result = myexecvp(FALSE, argv[0], EXEC_ARGV_CAST(argv)); - } - PERL_FPU_POST_EXEC - S_exec_failed(aTHX_(really ? tmps : argv[0]), fd, do_report); - } - amigaos_post_exec(fd, do_report); - LEAVE; - return result; + PERL_FPU_PRE_EXEC + if (really && *tmps) + { + result = myexecvp(FALSE, tmps, EXEC_ARGV_CAST(argv)); + } + else + { + result = myexecvp(FALSE, argv[0], EXEC_ARGV_CAST(argv)); + } + PERL_FPU_POST_EXEC + S_exec_failed(aTHX_(really ? tmps : argv[0]), fd, do_report); + } + amigaos_post_exec(fd, do_report); + LEAVE; + return result; } void *amigaos_system_child(void *userdata) { - struct Task *parent; - I32 did_pipes; - int pp; - I32 value; - STRLEN n_a; - /* these next are declared by macros else where but I may be - * passing modified values here so declare them explictly but - * still referred to by macro below */ - - register SV **sp; - register SV **mark; - register PerlInterpreter *my_perl; - - StdioStore store; - - struct UserData *ud = (struct UserData *)userdata; - - did_pipes = ud->did_pipes; - parent = ud->parent; - pp = ud->pp; - SP = ud->sp; - MARK = ud->mark; - my_perl = ud->my_perl; - PERL_SET_THX(my_perl); - - amigaos_stdio_save(aTHX_ & store); - - if (did_pipes) - { - // PerlLIO_close(pp[0]); - } - if (PL_op->op_flags & OPf_STACKED) - { - SV *really = *++MARK; - value = (I32)S_do_amigaos_aexec5(aTHX_ really, MARK, SP, pp, - did_pipes); - } - else if (SP - MARK != 1) - { - value = (I32)S_do_amigaos_aexec5(aTHX_ NULL, MARK, SP, pp, - did_pipes); - } - else - { - value = (I32)S_do_amigaos_exec3( - aTHX_ SvPVx(sv_mortalcopy(*SP), n_a), pp, did_pipes); - } - - // Forbid(); - // Signal(parent, SIGBREAKF_CTRL_F); - - amigaos_stdio_restore(aTHX_ & store); - - return (void *)value; + struct Task *parent; + I32 did_pipes; + int pp; + I32 value; + STRLEN n_a; + /* these next are declared by macros else where but I may be + * passing modified values here so declare them explicitly but + * still referred to by macro below */ + + register SV **sp; + register SV **mark; + register PerlInterpreter *my_perl; + + StdioStore store; + + struct UserData *ud = (struct UserData *)userdata; + + did_pipes = ud->did_pipes; + parent = ud->parent; + pp = ud->pp; + SP = ud->sp; + MARK = ud->mark; + my_perl = ud->my_perl; + PERL_SET_THX(my_perl); + + amigaos_stdio_save(aTHX_ & store); + + if (did_pipes) + { + // PerlLIO_close(pp[0]); + } + if (PL_op->op_flags & OPf_STACKED) + { + SV *really = *++MARK; + value = (I32)S_do_amigaos_aexec5(aTHX_ really, MARK, SP, pp, + did_pipes); + } + else if (SP - MARK != 1) + { + value = (I32)S_do_amigaos_aexec5(aTHX_ NULL, MARK, SP, pp, + did_pipes); + } + else + { + value = (I32)S_do_amigaos_exec3( + aTHX_ SvPVx(sv_mortalcopy(*SP), n_a), pp, did_pipes); + } + + // Forbid(); + // Signal(parent, SIGBREAKF_CTRL_F); + + amigaos_stdio_restore(aTHX_ & store); + + return (void *)value; } static BOOL contains_whitespace(char *string) { - if (string) - { - - if (strchr(string, ' ')) - return TRUE; - if (strchr(string, '\t')) - return TRUE; - if (strchr(string, '\n')) - return TRUE; - if (strchr(string, 0xA0)) - return TRUE; - if (strchr(string, '"')) - return TRUE; - } - return FALSE; + if (string) + { + + if (strchr(string, ' ')) + return TRUE; + if (strchr(string, '\t')) + return TRUE; + if (strchr(string, '\n')) + return TRUE; + if (strchr(string, 0xA0)) + return TRUE; + if (strchr(string, '"')) + return TRUE; + } + return FALSE; } static int no_of_escapes(char *string) { - int cnt = 0; - char *p; - for (p = string; p < string + strlen(string); p++) - { - if (*p == '"') - cnt++; - if (*p == '*') - cnt++; - if (*p == '\n') - cnt++; - if (*p == '\t') - cnt++; - } - return cnt; + int cnt = 0; + char *p; + for (p = string; p < string + strlen(string); p++) + { + if (*p == '"') + cnt++; + if (*p == '*') + cnt++; + if (*p == '\n') + cnt++; + if (*p == '\t') + cnt++; + } + return cnt; } struct command_data { - STRPTR args; - BPTR seglist; - struct Task *parent; + STRPTR args; + BPTR seglist; + struct Task *parent; }; #undef fopen @@ -912,262 +910,262 @@ int myexecve(bool isperlthread, char *argv[], char *envp[]) { - FILE *fh; - char buffer[1000]; - int size = 0; - char **cur; - char *interpreter = 0; - char *interpreter_args = 0; - char *full = 0; - char *filename_conv = 0; - char *interpreter_conv = 0; - // char *tmp = 0; - char *fname; - // int tmpint; - // struct Task *thisTask = IExec->FindTask(0); - int result = -1; - - StdioStore store; - - pTHX = NULL; - - if (isperlthread) - { - aTHX = PERL_GET_THX; - /* Save away our stdio */ - amigaos_stdio_save(aTHX_ & store); - } - - // adebug("%s %ld %s\n",__FUNCTION__,__LINE__,filename?filename:"NULL"); - - /* Calculate the size of filename and all args, including spaces and - * quotes */ - size = 0; // strlen(filename) + 1; - for (cur = (char **)argv /* +1 */; *cur; cur++) - { - size += - strlen(*cur) + 1 + - (contains_whitespace(*cur) ? (2 + no_of_escapes(*cur)) : 0); - } - /* Check if it's a script file */ - IExec->DebugPrintF("%s %ld %08lx %c %c\n",__FILE__,__LINE__,filename,filename[0],filename[1]); - fh = fopen(filename, "r"); - if (fh) - { - if (fgetc(fh) == '#' && fgetc(fh) == '!') - { - char *p; - char *q; - fgets(buffer, 999, fh); - p = buffer; - while (*p == ' ' || *p == '\t') - p++; - if (buffer[strlen(buffer) - 1] == '\n') - buffer[strlen(buffer) - 1] = '\0'; - if ((q = strchr(p, ' '))) - { - *q++ = '\0'; - if (*q != '\0') - { - interpreter_args = mystrdup(q); - } - } - else - interpreter_args = mystrdup(""); - - interpreter = mystrdup(p); - size += strlen(interpreter) + 1; - size += strlen(interpreter_args) + 1; - } - - fclose(fh); - } - else - { - /* We couldn't open this why not? */ - if (errno == ENOENT) - { - /* file didn't exist! */ - goto out; - } - } - - /* Allocate the command line */ - filename_conv = convert_path_u2a(filename); - - if (filename_conv) - size += strlen(filename_conv); - size += 1; - full = (char *)IExec->AllocVecTags(size + 10, AVT_ClearWithValue, 0 ,TAG_DONE); - if (full) - { - if (interpreter) - { - interpreter_conv = convert_path_u2a(interpreter); + FILE *fh; + char buffer[1000]; + int size = 0; + char **cur; + char *interpreter = 0; + char *interpreter_args = 0; + char *full = 0; + char *filename_conv = 0; + char *interpreter_conv = 0; + // char *tmp = 0; + char *fname; + // int tmpint; + // struct Task *thisTask = IExec->FindTask(0); + int result = -1; + + StdioStore store; + + pTHX = NULL; + + if (isperlthread) + { + aTHX = PERL_GET_THX; + /* Save away our stdio */ + amigaos_stdio_save(aTHX_ & store); + } + + // adebug("%s %ld %s\n",__FUNCTION__,__LINE__,filename?filename:"NULL"); + + /* Calculate the size of filename and all args, including spaces and + * quotes */ + size = 0; // strlen(filename) + 1; + for (cur = (char **)argv /* +1 */; *cur; cur++) + { + size += + strlen(*cur) + 1 + + (contains_whitespace(*cur) ? (2 + no_of_escapes(*cur)) : 0); + } + /* Check if it's a script file */ + IExec->DebugPrintF("%s %ld %08lx %c %c\n",__FILE__,__LINE__,filename,filename[0],filename[1]); + fh = fopen(filename, "r"); + if (fh) + { + if (fgetc(fh) == '#' && fgetc(fh) == '!') + { + char *p; + char *q; + fgets(buffer, 999, fh); + p = buffer; + while (*p == ' ' || *p == '\t') + p++; + if (buffer[strlen(buffer) - 1] == '\n') + buffer[strlen(buffer) - 1] = '\0'; + if ((q = strchr(p, ' '))) + { + *q++ = '\0'; + if (*q != '\0') + { + interpreter_args = mystrdup(q); + } + } + else + interpreter_args = mystrdup(""); + + interpreter = mystrdup(p); + size += strlen(interpreter) + 1; + size += strlen(interpreter_args) + 1; + } + + fclose(fh); + } + else + { + /* We couldn't open this why not? */ + if (errno == ENOENT) + { + /* file didn't exist! */ + goto out; + } + } + + /* Allocate the command line */ + filename_conv = convert_path_u2a(filename); + + if (filename_conv) + size += strlen(filename_conv); + size += 1; + full = (char *)IExec->AllocVecTags(size + 10, AVT_ClearWithValue, 0 ,TAG_DONE); + if (full) + { + if (interpreter) + { + interpreter_conv = convert_path_u2a(interpreter); #if !defined(__USE_RUNCOMMAND__) #warning(using system!) - sprintf(full, "%s %s %s ", interpreter_conv, - interpreter_args, filename_conv); + sprintf(full, "%s %s %s ", interpreter_conv, + interpreter_args, filename_conv); #else - sprintf(full, "%s %s ", interpreter_args, - filename_conv); + sprintf(full, "%s %s ", interpreter_args, + filename_conv); #endif - IExec->FreeVec(interpreter); - IExec->FreeVec(interpreter_args); - - if (filename_conv) - IExec->FreeVec(filename_conv); - fname = mystrdup(interpreter_conv); - - if (interpreter_conv) - IExec->FreeVec(interpreter_conv); - } - else - { + IExec->FreeVec(interpreter); + IExec->FreeVec(interpreter_args); + + if (filename_conv) + IExec->FreeVec(filename_conv); + fname = mystrdup(interpreter_conv); + + if (interpreter_conv) + IExec->FreeVec(interpreter_conv); + } + else + { #ifndef __USE_RUNCOMMAND__ - sprintf(full, "%s ", filename_conv); + sprintf(full, "%s ", filename_conv); #else - sprintf(full, ""); + sprintf(full, ""); #endif - fname = mystrdup(filename_conv); - if (filename_conv) - IExec->FreeVec(filename_conv); - } - - for (cur = (char **)(argv + 1); *cur != 0; cur++) - { - if (contains_whitespace(*cur)) - { - int esc = no_of_escapes(*cur); - - if (esc > 0) - { - char *buff = (char *)IExec->AllocVecTags( - strlen(*cur) + 4 + esc, - AVT_ClearWithValue,0, - TAG_DONE); - char *p = *cur; - char *q = buff; - - *q++ = '"'; - while (*p != '\0') - { - - if (*p == '\n') - { - *q++ = '*'; - *q++ = 'N'; - p++; - continue; - } - else if (*p == '"') - { - *q++ = '*'; - *q++ = '"'; - p++; - continue; - } - else if (*p == '*') - { - *q++ = '*'; - } - *q++ = *p++; - } - *q++ = '"'; - *q++ = ' '; - *q = '\0'; - strcat(full, buff); - IExec->FreeVec(buff); - } - else - { - strcat(full, "\""); - strcat(full, *cur); - strcat(full, "\" "); - } - } - else - { - strcat(full, *cur); - strcat(full, " "); - } - } - strcat(full, "\n"); + fname = mystrdup(filename_conv); + if (filename_conv) + IExec->FreeVec(filename_conv); + } + + for (cur = (char **)(argv + 1); *cur != 0; cur++) + { + if (contains_whitespace(*cur)) + { + int esc = no_of_escapes(*cur); + + if (esc > 0) + { + char *buff = (char *)IExec->AllocVecTags( + strlen(*cur) + 4 + esc, + AVT_ClearWithValue,0, + TAG_DONE); + char *p = *cur; + char *q = buff; + + *q++ = '"'; + while (*p != '\0') + { + + if (*p == '\n') + { + *q++ = '*'; + *q++ = 'N'; + p++; + continue; + } + else if (*p == '"') + { + *q++ = '*'; + *q++ = '"'; + p++; + continue; + } + else if (*p == '*') + { + *q++ = '*'; + } + *q++ = *p++; + } + *q++ = '"'; + *q++ = ' '; + *q = '\0'; + strcat(full, buff); + IExec->FreeVec(buff); + } + else + { + strcat(full, "\""); + strcat(full, *cur); + strcat(full, "\" "); + } + } + else + { + strcat(full, *cur); + strcat(full, " "); + } + } + strcat(full, "\n"); // if(envp) // createvars(envp); #ifndef __USE_RUNCOMMAND__ - result = IDOS->SystemTags( - full, SYS_UserShell, TRUE, NP_StackSize, - ((struct Process *)thisTask)->pr_StackSize, SYS_Input, - ((struct Process *)thisTask)->pr_CIS, SYS_Output, - ((struct Process *)thisTask)->pr_COS, SYS_Error, - ((struct Process *)thisTask)->pr_CES, TAG_DONE); + result = IDOS->SystemTags( + full, SYS_UserShell, TRUE, NP_StackSize, + ((struct Process *)thisTask)->pr_StackSize, SYS_Input, + ((struct Process *)thisTask)->pr_CIS, SYS_Output, + ((struct Process *)thisTask)->pr_COS, SYS_Error, + ((struct Process *)thisTask)->pr_CES, TAG_DONE); #else - if (fname) - { - BPTR seglist = IDOS->LoadSeg(fname); - if (seglist) - { - /* check if we have an executable! */ - struct PseudoSegList *ps = NULL; - if (!IDOS->GetSegListInfoTags( - seglist, GSLI_Native, &ps, TAG_DONE)) - { - IDOS->GetSegListInfoTags( - seglist, GSLI_68KPS, &ps, TAG_DONE); - } - if (ps != NULL) - { - // adebug("%s %ld %s - // %s\n",__FUNCTION__,__LINE__,fname,full); - IDOS->SetCliProgramName(fname); - // result=RunCommand(seglist,8*1024,full,strlen(full)); - // result=myruncommand(seglist,8*1024,full,strlen(full),envp); - result = myruncommand(seglist, 8 * 1024, - full, -1, envp); - errno = 0; - } - else - { - errno = ENOEXEC; - } - IDOS->UnLoadSeg(seglist); - } - else - { - errno = ENOEXEC; - } - IExec->FreeVec(fname); - } + if (fname) + { + BPTR seglist = IDOS->LoadSeg(fname); + if (seglist) + { + /* check if we have an executable! */ + struct PseudoSegList *ps = NULL; + if (!IDOS->GetSegListInfoTags( + seglist, GSLI_Native, &ps, TAG_DONE)) + { + IDOS->GetSegListInfoTags( + seglist, GSLI_68KPS, &ps, TAG_DONE); + } + if (ps != NULL) + { + // adebug("%s %ld %s + // %s\n",__FUNCTION__,__LINE__,fname,full); + IDOS->SetCliProgramName(fname); + // result=RunCommand(seglist,8*1024,full,strlen(full)); + // result=myruncommand(seglist,8*1024,full,strlen(full),envp); + result = myruncommand(seglist, 8 * 1024, + full, -1, envp); + errno = 0; + } + else + { + errno = ENOEXEC; + } + IDOS->UnLoadSeg(seglist); + } + else + { + errno = ENOEXEC; + } + IExec->FreeVec(fname); + } #endif /* USE_RUNCOMMAND */ - IExec->FreeVec(full); - if (errno == ENOEXEC) - { - result = -1; - } - goto out; - } + IExec->FreeVec(full); + if (errno == ENOEXEC) + { + result = -1; + } + goto out; + } - if (interpreter) - IExec->FreeVec(interpreter); - if (filename_conv) - IExec->FreeVec(filename_conv); + if (interpreter) + IExec->FreeVec(interpreter); + if (filename_conv) + IExec->FreeVec(filename_conv); - errno = ENOMEM; + errno = ENOMEM; out: - if (isperlthread) - { - amigaos_stdio_restore(aTHX_ & store); - STATUS_NATIVE_CHILD_SET(result); - PL_exit_flags |= PERL_EXIT_EXPECTED; - if (result != -1) - my_exit(result); - } - return (result); + if (isperlthread) + { + amigaos_stdio_restore(aTHX_ & store); + STATUS_NATIVE_CHILD_SET(result); + PL_exit_flags |= PERL_EXIT_EXPECTED; + if (result != -1) + my_exit(result); + } + return (result); } diff --git a/gnu/usr.bin/perl/autodoc.pl b/gnu/usr.bin/perl/autodoc.pl index 8bf557e64ab..8dea08cd109 100644 --- a/gnu/usr.bin/perl/autodoc.pl +++ b/gnu/usr.bin/perl/autodoc.pl @@ -1,5 +1,7 @@ #!/usr/bin/perl -w -# + +use Text::Tabs; +# # Unconditionally regenerate: # # pod/perlintern.pod @@ -8,24 +10,69 @@ # from information stored in # # embed.fnc -# plus all the .c and .h files listed in MANIFEST -# +# plus all the core .c, .h, and .pod files listed in MANIFEST +# plus %extra_input_pods + +my %extra_input_pods = ( 'dist/ExtUtils-ParseXS/lib/perlxs.pod' => 1 ); + # Has an optional arg, which is the directory to chdir to before reading -# MANIFEST and *.[ch]. +# MANIFEST and the files # # This script is invoked as part of 'make all' # -# '=head1' are the only headings looked for. If the first non-blank line after -# the heading begins with a word character, it is considered to be the first -# line of documentation that applies to the heading itself. That is, it is -# output immediately after the heading, before the first function, and not -# indented. The next input line that is a pod directive terminates this -# heading-level documentation. - -# The meanings of the flags fields in embed.fnc and the source code is -# documented at the top of embed.fnc. +# The generated pod consists of sections of related elements, functions, +# macros, and variables. The keys of %valid_sections give the current legal +# ones. Just add a new key to add a section. +# +# Throughout the files read by this script are lines like +# +# =for apidoc_section Section Name +# =for apidoc_section $section_name_variable +# +# "Section Name" (after having been stripped of leading space) must be one of +# the legal section names, or an error is thrown. $section_name_variable must +# be one of the legal section name variables defined below; these expand to +# legal section names. This form is used so that minor wording changes in +# these titles can be confied to this file. All the names of the variables +# end in '_scn'; this suffix is optional in the apidoc_section lines. +# +# All API elements defined between this line and the next 'apidoc_section' +# line will go into the section "Section Name" (or $section_name_variable), +# sorted by dictionary order within it. perlintern and perlapi are parallel +# documents, each potentially with a section "Section Name". Each element is +# marked as to which document it goes into. If there are none for a +# particular section in perlapi, that section is omitted. +# +# Also, in .[ch] files, there may be +# +# =head1 Section Name +# +# lines in comments. These are also used by this program to switch to section +# "Section Name". The difference is that if there are any lines after the +# =head1, inside the same comment, and before any =for apidoc-ish lines, they +# are used as a heading for section "Section Name" (in both perlintern and +# perlapi). This includes any =head[2-5]. If more than one '=head1 Section +# Name' line has content, they appear in the generated pod in an undefined +# order. Note that you can't use a $section_name_variable in =head1 lines +# +# The next =head1, =for apidoc_section, or file end terminates what goes into +# the current section +# +# The %valid_sections hash below also can have header content, which will +# appear before any =head1 content. The hash can also have footer content +# content, which will appear at the end of the section, after all the +# elements. +# +# The lines that define the actual functions, etc are documented in embed.fnc, +# because they have flags which must be kept in sync with that file. use strict; +use warnings; + +my $nroff_min_indent = 4; # for non-heading lines +# 80 column terminal - 2 for pager adding 2 columns; +my $max_width = 80 - 2 - $nroff_min_indent; +my $standard_indent = 4; # Any additional indentations if (@ARGV) { my $workdir = shift; @@ -35,28 +82,7 @@ if (@ARGV) { require './regen/regen_lib.pl'; require './regen/embed_lib.pl'; -my @specialized_docs = sort qw( perlguts - perlxs - perlxstut - perlclib - warnings - perlapio - perlcall - perlfilter - perlmroapi - config.h - ); -sub name_in_pod($) { - my $name = shift; - return "F<$name>" if $name =~ /\./; - return "L<$name>"; -} -my $other_places_api = join " ", map { name_in_pod($_) } sort @specialized_docs, 'perlintern'; -my $other_places_intern = join " ", map { name_in_pod($_) } sort @specialized_docs, 'perlapi'; - -@specialized_docs = map { name_in_pod($_) } sort @specialized_docs; -$specialized_docs[-1] =~ s/^/and /; -my $specialized_docs = join ", ", @specialized_docs; +my %described_elsewhere; # # See database of global and static function prototypes in embed.fnc @@ -69,252 +95,1565 @@ my %docs; my %seen; my %funcflags; my %missing; +my %missing_macros; + +my $link_text = "Described in"; + +my $description_indent = 4; +my $usage_indent = 3; # + initial blank yields 4 total + +my $AV_scn = 'AV Handling'; +my $callback_scn = 'Callback Functions'; +my $casting_scn = 'Casting'; +my $casing_scn = 'Character case changing'; +my $classification_scn = 'Character classification'; +my $names_scn = 'Character names'; +my $scope_scn = 'Compile-time scope hooks'; +my $compiler_scn = 'Compiler and Preprocessor information'; +my $directives_scn = 'Compiler directives'; +my $concurrency_scn = 'Concurrency'; +my $COP_scn = 'COPs and Hint Hashes'; +my $CV_scn = 'CV Handling'; +my $custom_scn = 'Custom Operators'; +my $debugging_scn = 'Debugging'; +my $display_scn = 'Display functions'; +my $embedding_scn = 'Embedding, Threads, and Interpreter Cloning'; +my $errno_scn = 'Errno'; +my $exceptions_scn = 'Exception Handling (simple) Macros'; +my $filesystem_scn = 'Filesystem configuration values'; +my $filters_scn = 'Source Filters'; +my $floating_scn = 'Floating point'; +my $genconfig_scn = 'General Configuration'; +my $globals_scn = 'Global Variables'; +my $GV_scn = 'GV Handling and Stashes'; +my $hook_scn = 'Hook manipulation'; +my $HV_scn = 'HV Handling'; +my $io_scn = 'Input/Output'; +my $io_formats_scn = 'I/O Formats'; +my $integer_scn = 'Integer'; +my $lexer_scn = 'Lexer interface'; +my $locale_scn = 'Locales'; +my $magic_scn = 'Magic'; +my $memory_scn = 'Memory Management'; +my $MRO_scn = 'MRO'; +my $multicall_scn = 'Multicall Functions'; +my $numeric_scn = 'Numeric Functions'; + +# Now combined, as unclear which functions go where, but separate names kept +# to avoid 1) other code changes; 2) in case it seems better to split again +my $optrees_scn = 'Optrees'; +my $optree_construction_scn = $optrees_scn; # Was 'Optree construction'; +my $optree_manipulation_scn = $optrees_scn; # Was 'Optree Manipulation Functions' +my $pack_scn = 'Pack and Unpack'; +my $pad_scn = 'Pad Data Structures'; +my $password_scn = 'Password and Group access'; +my $reports_scn = 'Reports and Formats'; +my $paths_scn = 'Paths to system commands'; +my $prototypes_scn = 'Prototype information'; +my $regexp_scn = 'REGEXP Functions'; +my $signals_scn = 'Signals'; +my $site_scn = 'Site configuration'; +my $sockets_scn = 'Sockets configuration values'; +my $stack_scn = 'Stack Manipulation Macros'; +my $string_scn = 'String Handling'; +my $SV_flags_scn = 'SV Flags'; +my $SV_scn = 'SV Handling'; +my $tainting_scn = 'Tainting'; +my $time_scn = 'Time'; +my $typedefs_scn = 'Typedef names'; +my $unicode_scn = 'Unicode Support'; +my $utility_scn = 'Utility Functions'; +my $versioning_scn = 'Versioning'; +my $warning_scn = 'Warning and Dieing'; +my $XS_scn = 'XS'; + +# Kept separate at end +my $undocumented_scn = 'Undocumented elements'; + +my %valid_sections = ( + $AV_scn => {}, + $callback_scn => {}, + $casting_scn => {}, + $casing_scn => {}, + $classification_scn => {}, + $scope_scn => {}, + $compiler_scn => {}, + $directives_scn => {}, + $concurrency_scn => {}, + $COP_scn => {}, + $CV_scn => { + header => <<~'EOT', + This section documents functions to manipulate CVs which are + code-values, meaning subroutines. For more information, see + L. + EOT + }, + + $custom_scn => {}, + $debugging_scn => {}, + $display_scn => {}, + $embedding_scn => {}, + $errno_scn => {}, + $exceptions_scn => {}, + $filesystem_scn => { + header => <<~'EOT', + Also see L. + EOT + }, + $filters_scn => {}, + $floating_scn => { + header => <<~'EOT', + Also L lists capabilities + that arent in this section. For example C, for the + hyperbolic sine function. + EOT + }, + $genconfig_scn => { + header => <<~'EOT', + This section contains configuration information not otherwise + found in the more specialized sections of this document. At the + end is a list of C<#defines> whose name should be enough to tell + you what they do, and a list of #defines which tell you if you + need to C<#include> files to get the corresponding functionality. + EOT + + footer => <<~EOT, + + =head2 List of capability C> symbols + + This is a list of those symbols that dont appear elsewhere in ths + document that indicate if the current platform has a certain + capability. Their names all begin with C. Only those + symbols whose capability is directly derived from the name are + listed here. All others have their meaning expanded out elsewhere + in this document. This (relatively) compact list is because we + think that the expansion would add little or no value and take up + a lot of space (because there are so many). If you think certain + ones should be expanded, send email to + L. + + Each symbol here will be C<#define>d if and only if the platform + has the capability. If you need more detail, see the + corresponding entry in F. For convenience, the list is + split so that the ones that indicate there is a reentrant version + of a capability are listed separately + + __HAS_LIST__ + + And, the reentrant capabilities: + + __HAS_R_LIST__ + + Example usage: + + =over $standard_indent + + #ifdef HAS_STRNLEN + use strnlen() + #else + use an alternative implementation + #endif + + =back + + =head2 List of C<#include> needed symbols + + This list contains symbols that indicate if certain C<#include> + files are present on the platform. If your code accesses the + functionality that one of these is for, you will need to + C<#include> it if the symbol on this list is C<#define>d. For + more detail, see the corresponding entry in F. + + __INCLUDE_LIST__ + + Example usage: + + =over $standard_indent + + #ifdef I_WCHAR + #include + #endif + + =back + EOT + }, + $globals_scn => {}, + $GV_scn => {}, + $hook_scn => {}, + $HV_scn => {}, + $io_scn => {}, + $io_formats_scn => { + header => <<~'EOT', + These are used for formatting the corresponding type For example, + instead of saying + + Perl_newSVpvf(pTHX_ "Create an SV with a %d in it\n", iv); + + use -my $curheader = "Unknown section"; + Perl_newSVpvf(pTHX_ "Create an SV with a " IVdf " in it\n", iv); + + This keeps you from having to know if, say an IV, needs to be + printed as C<%d>, C<%ld>, or something else. + EOT + }, + $integer_scn => {}, + $lexer_scn => {}, + $locale_scn => {}, + $magic_scn => {}, + $memory_scn => {}, + $MRO_scn => {}, + $multicall_scn => {}, + $numeric_scn => {}, + $optrees_scn => {}, + $optree_construction_scn => {}, + $optree_manipulation_scn => {}, + $pack_scn => {}, + $pad_scn => {}, + $password_scn => {}, + $paths_scn => {}, + $prototypes_scn => {}, + $regexp_scn => {}, + $reports_scn => { + header => <<~"EOT", + These are used in the simple report generation feature of Perl. + See L. + EOT + }, + $signals_scn => {}, + $site_scn => { + header => <<~'EOT', + These variables give details as to where various libraries, + installation destinations, I, go, as well as what various + installation options were selected + EOT + }, + $sockets_scn => {}, + $stack_scn => {}, + $string_scn => { + header => <<~EOT, + See also C>. + EOT + }, + $SV_flags_scn => {}, + $SV_scn => {}, + $tainting_scn => {}, + $time_scn => {}, + $typedefs_scn => {}, + $unicode_scn => { + header => <<~EOT, + L has an introduction to this API. + + See also C>, + C>, + and C>. + Various functions outside this section also work specially with + Unicode. Search for the string "utf8" in this document. + EOT + }, + $utility_scn => {}, + $versioning_scn => {}, + $warning_scn => {}, + $XS_scn => {}, +); + +# Somewhat loose match for an apidoc line so we can catch minor typos. +# Parentheses are used to capture portions so that below we verify +# that things are the actual correct syntax. +my $apidoc_re = qr/ ^ (\s*) # $1 + (=?) # $2 + (\s*) # $3 + for (\s*) # $4 + apidoc (_item)? # $5 + (\s*) # $6 + (.*?) # $7 + \s* \n /x; +# Only certain flags, dealing with display, are acceptable for apidoc_item +my $display_flags = "fFnDopsTx"; + +sub check_api_doc_line ($$) { + my ($file, $in) = @_; + + return unless $in =~ $apidoc_re; + + my $is_item = defined $5; + my $is_in_proper_form = length $1 == 0 + && length $2 > 0 + && length $3 == 0 + && length $4 > 0 + && length $7 > 0 + && ( length $6 > 0 + || ($is_item && substr($7, 0, 1) eq '|')); + my $proto_in_file = $7; + my $proto = $proto_in_file; + $proto = "||$proto" if $proto !~ /\|/; + my ($flags, $ret_type, $name, @args) = split /\s*\|\s*/, $proto; + + $name && $is_in_proper_form or die <{'flags'}; + warn "embed.fnc entry '$element_name' missing 'd' flag" + unless $flags =~ /d/; + + return ($flags, $embed_docref->{'ret_type'}, $embed_docref->{args}->@*); +} + +# The section that is in effect at the beginning of the given file. If not +# listed here, an apidoc_section line must precede any apidoc lines. +# This allows the files listed here that generally are single-purpose, to not +# have to worry about the autodoc section +my %initial_file_section = ( + 'av.c' => $AV_scn, + 'av.h' => $AV_scn, + 'cv.h' => $CV_scn, + 'deb.c' => $debugging_scn, + 'dist/ExtUtils-ParseXS/lib/perlxs.pod' => $XS_scn, + 'doio.c' => $io_scn, + 'gv.c' => $GV_scn, + 'gv.h' => $GV_scn, + 'hv.h' => $HV_scn, + 'locale.c' => $locale_scn, + 'malloc.c' => $memory_scn, + 'numeric.c' => $numeric_scn, + 'opnames.h' => $optree_construction_scn, + 'pad.h'=> $pad_scn, + 'patchlevel.h' => $versioning_scn, + 'perlio.h' => $io_scn, + 'pod/perlapio.pod' => $io_scn, + 'pod/perlcall.pod' => $callback_scn, + 'pod/perlembed.pod' => $embedding_scn, + 'pod/perlfilter.pod' => $filters_scn, + 'pod/perliol.pod' => $io_scn, + 'pod/perlmroapi.pod' => $MRO_scn, + 'pod/perlreguts.pod' => $regexp_scn, + 'pp_pack.c' => $pack_scn, + 'pp_sort.c' => $SV_scn, + 'regcomp.c' => $regexp_scn, + 'regexp.h' => $regexp_scn, + 'sv.h' => $SV_scn, + 'sv.c' => $SV_scn, + 'sv_inline.h' => $SV_scn, + 'taint.c' => $tainting_scn, + 'unicode_constants.h' => $unicode_scn, + 'utf8.c' => $unicode_scn, + 'utf8.h' => $unicode_scn, + 'vutil.c' => $versioning_scn, + ); sub autodoc ($$) { # parse a file and extract documentation info my($fh,$file) = @_; - my($in, $doc, $line, $header_doc); + my($in, $line_num, $header, $section); + + $section = $initial_file_section{$file} + if defined $initial_file_section{$file}; + + my $file_is_C = $file =~ / \. [ch] $ /x; # Count lines easier - my $get_next_line = sub { $line++; return <$fh> }; - -FUNC: - while (defined($in = $get_next_line->())) { - if ($in=~ /^=head1 (.*)/) { - $curheader = $1; - - # If the next non-space line begins with a word char, then it is - # the start of heading-level documentation. - if (defined($doc = $get_next_line->())) { - # Skip over empty lines - while ($doc =~ /^\s+$/) { - if (! defined($doc = $get_next_line->())) { - next FUNC; - } - } + my $get_next_line = sub { $line_num++; return <$fh> }; + + # Read the file + while ($in = $get_next_line->()) { + last unless defined $in; + + next unless ( $in =~ / ^ =for [ ]+ apidoc /x + # =head1 lines only have effect in C files + || ($file_is_C && $in =~ /^=head1/)); + + # Here, the line introduces a portion of the input that we care about. + # Either it is for an API element, or heading text which we expect + # will be used for elements later in the file + + my ($text, $element_name, $flags, $ret_type, $is_item, $proto_in_file); + my (@args, @items); + + # If the line starts a new section ... + if ($in=~ /^ = (?: for [ ]+ apidoc_section | head1 ) [ ]+ (.*) /x) { + + $section = $1; + if ($section =~ / ^ \$ /x) { + $section .= '_scn' unless $section =~ / _scn $ /; + $section = eval "$section"; + die "Unknown \$section variable '$section' in $file: $@" if $@; + } + die "Unknown section name '$section' in $file near line $.\n" + unless defined $valid_sections{$section}; + + } + elsif ($in=~ /^ =for [ ]+ apidoc \B /x) { # Otherwise better be a + # plain apidoc line + die "Unkown apidoc-type line '$in'" unless $in=~ /^=for apidoc_item/; + die "apidoc_item doesn't immediately follow an apidoc entry: '$in'"; + } + else { # Plain apidoc + + ($element_name, $flags, $ret_type, $is_item, $proto_in_file, @args) + = check_api_doc_line($file, $in); + # Override this line with any info in embed.fnc + my ($embed_flags, $embed_ret_type, @embed_args) + = embed_override($element_name); + if ($embed_ret_type) { + warn "embed.fnc entry overrides redundant information in" + . " '$proto_in_file' in $file" + if $flags || $ret_type || @args; + $flags = $embed_flags; + $ret_type = $embed_ret_type; + @args = @embed_args; + } + elsif ($flags !~ /[my]/) { # Not in embed.fnc, is missing if not + # a macro or typedef + $missing{$element_name} = $file; + } + + die "flag '$1' is not legal (for function $element_name (from $file))" + if $flags =~ / ( [^AabCDdEeFfGhiIMmNnTOoPpRrSsUuWXxy] ) /x; + + die "'u' flag must also have 'm' or 'y' flags' for $element_name" + if $flags =~ /u/ && $flags !~ /[my]/; + warn ("'$element_name' not \\w+ in '$proto_in_file' in $file") + if $flags !~ /N/ && $element_name !~ / ^ [_[:alpha:]] \w* $ /x; + + if (exists $seen{$element_name} && $flags !~ /h/) { + die ("'$element_name' in $file was already documented in $seen{$element_name}"); + } + else { + $seen{$element_name} = $file; + } + } + + # Here we have processed the initial line in the heading text or API + # element, and have saved the important information from it into the + # corresponding variables. Now accumulate the text that applies to it + # up to a terminating line, which is one of: + # 1) =cut + # 2) =head (in a C file only =head1) + # 3) an end comment line in a C file: m:^\s*\*/: + # 4) =for apidoc... (except apidoc_item lines) + $text = ""; + my $head_ender_num = ($file_is_C) ? 1 : ""; + while (defined($in = $get_next_line->())) { + + last if $in =~ /^=cut/x; + last if $in =~ /^=head$head_ender_num/; + + if ($file_is_C && $in =~ m: ^ \s* \* / $ :x) { + + # End of comment line in C files is a fall-back terminator, + # but warn only if there actually is some accumulated text + warn "=cut missing? $file:$line_num:$in" if $text =~ /\S/; + last; + } + + if ($in !~ / ^ =for [ ]+ apidoc /x) { + $text .= $in; + next; + } + + # Here, the line is an apidoc line. All but apidoc_item terminate + # the text being accumulated. + last if $in =~ / ^ =for [ ]+ apidoc_section /x; + + my ($item_name, $item_flags, $item_ret_type, $is_item, + $item_proto, @item_args) = check_api_doc_line($file, $in); + last unless $is_item; + + # Here, is an apidoc_item_line; They can only come within apidoc + # paragraphs. + die "Unexpected api_doc_item line '$item_proto'" + unless $element_name; + + # We accept blank lines between these, but nothing else; + die "apidoc_item lines must immediately follow apidoc lines for " + . " '$element_name' in $file" + if $text =~ /\S/; + # Override this line with any info in embed.fnc + my ($embed_flags, $embed_ret_type, @embed_args) + = embed_override($item_name); + if ($embed_ret_type) { + warn "embed.fnc entry overrides redundant information in" + . " '$item_proto' in $file" + if $item_flags || $item_ret_type || @item_args; + + $item_flags = $embed_flags; + $item_ret_type = $embed_ret_type; + @item_args = @embed_args; + } + + # Use the base entry flags if none for this item; otherwise add in + # any non-display base entry flags. + if ($item_flags) { + $item_flags .= $flags =~ s/[$display_flags]//rg; + } + else { + $item_flags = $flags; + } + $item_ret_type = $ret_type unless $item_ret_type; + @item_args = @args unless @item_args; + push @items, { name => $item_name, + ret_type => $item_ret_type, + flags => $item_flags, + args => [ @item_args ], + }; + + # This line shows that this element is documented. + delete $funcflags{$item_name}; + } + + # Here, are done accumulating the text for this item. Trim it + $text =~ s/ ^ \s* //x; + $text =~ s/ \s* $ //x; + $text .= "\n" if $text ne ""; + + # And treat all-spaces as nothing at all + undef $text unless $text =~ /\S/; + + if ($element_name) { + + # Here, we have accumulated into $text, the pod for $element_name + my $where = $flags =~ /A/ ? 'api' : 'guts'; + + die "No =for apidoc_section nor =head1 in $file for '$element_name'\n" + unless defined $section; + if (exists $docs{$where}{$section}{$element_name}) { + warn "$0: duplicate API entry for '$element_name' in" + . " $where/$section\n"; + next; + } - if ($doc !~ /^\w/) { - $in = $doc; - redo FUNC; + # Override the text with just a link if the flags call for that + my $is_link_only = ($flags =~ /h/); + if ($is_link_only) { + if ($file_is_C) { + die "Can't currently handle link with items to it:\n$in" if @items; + redo; # Don't put anything if C source } - $header_doc = $doc; - - # Continue getting the heading-level documentation until read - # in any pod directive (or as a fail-safe, find a closing - # comment to this pod in a C language file -HDR_DOC: - while (defined($doc = $get_next_line->())) { - if ($doc =~ /^=\w/) { - $in = $doc; - redo FUNC; - } - if ($doc =~ m:^\s*\*/$:) { - warn "=cut missing? $file:$line:$doc";; - last HDR_DOC; + # Here, is an 'h' flag in pod. We add a reference to the pod (and + # nothing else) to perlapi/intern. (It would be better to add a + # reference to the correct =item,=header, but something that makes + # it harder is that it that might be a duplicate, like '=item *'; + # so that is a future enhancement XXX. Another complication is + # there might be more than one deserving candidates.) + my $podname = $file =~ s!.*/!!r; # Rmv directory name(s) + $podname =~ s/\.pod//; + $text = "Described in L<$podname>.\n"; + + # Don't output a usage example for linked to documentation if + # it is trivial (has no arguments) and we aren't to add a + # semicolon + $flags .= 'U' if $flags =~ /n/ && $flags !~ /[Us]/; + + # Keep track of all the pod files that we refer to. + push $described_elsewhere{$podname}->@*, $podname; + } + + $docs{$where}{$section}{$element_name}{flags} = $flags; + $docs{$where}{$section}{$element_name}{pod} = $text; + $docs{$where}{$section}{$element_name}{file} = $file; + $docs{$where}{$section}{$element_name}{ret_type} = $ret_type; + push $docs{$where}{$section}{$element_name}{args}->@*, @args; + push $docs{$where}{$section}{$element_name}{items}->@*, @items; + } + elsif ($text) { + $valid_sections{$section}{header} = "" unless + defined $valid_sections{$section}{header}; + $valid_sections{$section}{header} .= "\n$text"; + } + + # We already have the first line of what's to come in $in + redo; + + } # End of loop through input +} + +my %configs; +my @has_defs; +my @has_r_defs; # Reentrant symbols +my @include_defs; + +sub parse_config_h { + use re '/aa'; # Everthing is ASCII in this file + + # Process config.h + my $config_h = 'config.h'; + $config_h = 'win32/config.h' unless -e $config_h; + die "Can't find $config_h" unless -e $config_h; + open my $fh, '<', $config_h or die "Can't open $config_h: $!"; + while (<$fh>) { + + # Look for lines like /* FOO_BAR: + # By convention all config.h descriptions begin like that + if (m[ ^ /\* [ ] ( [[:alpha:]] \w+ ) : \s* $ ]ax) { + my $name = $1; + + # Here we are starting the description for $name in config.h. We + # accumulate the entire description for it into @description. + # Flowing text from one input line to another is appended into the + # same array element to make a single flowing line element, but + # verbatim lines are kept as separate elements in @description. + # This will facilitate later doing pattern matching without regard + # to line boundaries on non-verbatim text. + + die "Multiple config.h entries for '$name'" + if defined $configs{$name}{description}; + + # Get first line of description + $_ = <$fh>; + + # Each line in the description begins with blanks followed by '/*' + # and some spaces. + die "Unexpected config.h initial line for $name: '$_'" + unless s/ ^ ( \s* \* \s* ) //x; + my $initial_text = $1; + + # Initialize the description with this first line (after having + # stripped the prefix text) + my @description = $_; + + # The first line is used as a template for how much indentation + # each normal succeeding line has. Lines indented further + # will be considered as intended to be verbatim. But, empty lines + # likely won't have trailing blanks, so just strip the whole thing + # for them. + my $strip_initial_qr = qr! \s* \* \s* $ + | \Q$initial_text\E + !x; + $configs{$name}{verbatim} = 0; + + # Read in the remainder of the description + while (<$fh>) { + last if s| ^ \s* \* / ||x; # A '*/' ends it + + die "Unexpected config.h description line for $name: '$_'" + unless s/$strip_initial_qr//; + + # Fix up the few flawed lines in config.h wherein a new + # sentence begins with a tab (and maybe a space after that). + # Although none of them currently do, let it recognize + # something like + # + # "... text"). The next sentence ... + # + s/ ( \w "? \)? \. ) \t \s* ( [[:alpha:]] ) /$1 $2/xg; + + # If this line has extra indentation or looks to have columns, + # it should be treated as verbatim. Columns are indicated by + # use of interior: tabs, 3 spaces in a row, or even 2 spaces + # not preceded by punctuation. + if ($_ !~ m/ ^ \s + | \S (?: \t + | \s{3} + | (*nlb:[[:punct:]]) \s{2} + ) + /x) + { + # But here, is not a verbatim line. Add an empty line if + # this is the first non-verbatim after a run of verbatims + if ($description[-1] =~ /^\s/) { + push @description, "\n", $_; + } + else { # Otherwise, append this flowing line to the + # current flowing line + $description[-1] .= $_; } - $header_doc .= $doc; + } + else { + $configs{$name}{verbatim} = 1; + + # The first verbatim line in a run of them is separated by an + # empty line from the flowing lines above it + push @description, "\n" if $description[-1] =~ /^\S/; + + $_ = Text::Tabs::expand($_); + + # Only a single space so less likely to wrap + s/ ^ \s* / /x; + + push @description, $_; } } - next FUNC; + + push $configs{$name}{description}->@*, @description + + } # Not a description; see if it is a macro definition. + elsif (m! ^ + (?: / \* )? # Optional commented-out + # indication + \# \s* define \s+ ( \w+ ) # $1 is the name + ( \s* ) # $2 indicates if args or not + ( .*? ) # $3 is any definition + (?: / \s* \* \* / )? # Optional trailing /**/ or / **/ + $ + !x) + { + my $name = $1; + + # There can be multiple definitions for a name. We want to know + # if any of them has arguments, and if any has a body. + $configs{$name}{has_args} //= $2 eq ""; + $configs{$name}{has_args} ||= $2 eq ""; + $configs{$name}{has_defn} //= $3 ne ""; + $configs{$name}{has_defn} ||= $3 ne ""; } + } + + # We now have stored the description and information about every #define + # in the file. The description is in a form convenient to operate on to + # convert to pod. Do that now. + foreach my $name (keys %configs) { + next unless defined $configs{$name}{description}; + + # All adjacent non-verbatim lines of the description are appended + # together in a single element in the array. This allows the patterns + # to work across input line boundaries. + + my $pod = ""; + while (defined ($_ = shift $configs{$name}{description}->@*)) { + chomp; + + if (/ ^ \S /x) { # Don't edit verbatim lines - # Parentheses are used to accept anything that looks like 'for - # apidoc', and later verify that things are the actual correct syntax. - my $apidoc_re = qr/^(\s*)(=?)(\s*)for(\s*)apidoc(\s*)(.*?)\s*\n/; + # Enclose known file/path names not already so enclosed + # with <...>. (Some entries in config.h are already + # '') + my $file_name_qr = qr! [ \w / ]+ \. + (?: c | h | xs | p [lm] | pmc | PL + | sh | SH | exe ) \b + !xx; + my $path_name_qr = qr! (?: / \w+ )+ !x; + for my $re ($file_name_qr, $path_name_qr) { + s! (*nlb:[ < \w / ]) ( $re ) !<$1>!gxx; + } + + # Enclose <... file/path names with F<...> (but no double + # angle brackets) + for my $re ($file_name_qr, $path_name_qr) { + s! < ( $re ) > !F<$1>!gxx; + } + + # Explain metaconfig units + s/ ( \w+ \. U \b ) /$1 (part of metaconfig)/gx; + + # Convert "See foo" to "See C>" if foo is described in + # this file. Also create a link to the known file INSTALL. + # And, to be more general, handle "See also foo and bar", and + # "See also foo, bar, and baz" + while (m/ \b [Ss]ee \s+ + (?: also \s+ )? ( \w+ ) + (?: , \s+ ( \w+ ) )? + (?: ,? \s+ and \s+ ( \w+ ) )? /xg) { + my @links = $1; + push @links, $2 if defined $2; + push @links, $3 if defined $3; + foreach my $link (@links) { + if ($link eq 'INSTALL') { + s/ \b INSTALL \b /C>/xg; + } + elsif (grep { $link =~ / \b $_ \b /x } keys %configs) { + s| \b $link \b |C>|xg; + $configs{$link}{linked} = 1; + $configs{$name}{linked} = 1; + } + } + } + + # Enclose what we think are symbols with C<...>. + no warnings 'experimental::vlb'; + s/ (*nlb:<) + ( + # Any word followed immediately with parens or + # brackets + \b \w+ (?: \( [^)]* \) # parameter list + | \[ [^]]* \] # or array reference + ) + | (*plb: ^ | \s ) -D \w+ # Also -Dsymbols. + | \b (?: struct | union ) \s \w+ + + # Words that contain underscores (which are + # definitely not text) or three uppercase letters in + # a row. Length two ones, like IV, aren't enclosed, + # because they often don't look as nice. + | \b \w* (?: _ | [[:upper:]]{3,} ) \w* \b + ) + (*nla:>) + /C<$1>/xg; - if ($in =~ /^=for comment/) { - $in = $get_next_line->(); - if ($in =~ /skip apidoc/) { # Skips the next apidoc-like line - while (defined($in = $get_next_line->())) { - last if $in =~ $apidoc_re; + # These include foo when the name is HAS_foo. This is a + # heuristic which works in most cases. + if ($name =~ / ^ HAS_ (.*) /x) { + my $symbol = lc $1; + + # Don't include path components, nor things already in + # <>, or with trailing '(', '[' + s! \b (*nlb:[/<]) $symbol (*nla:[[/>(]) \b !C<$symbol>!xg; } } - next FUNC; + + $pod .= "$_\n"; } + delete $configs{$name}{description}; - if ($in =~ $apidoc_re) { - my $is_in_proper_form = length $1 == 0 - && length $2 > 0 - && length $3 == 0 - && length $4 > 0 - && length $5 > 0 - && length $6 > 0; - my $proto_in_file = $6; - my $proto = $proto_in_file; - $proto = "||$proto" unless $proto =~ /\|/; - my($flags, $ret, $name, @args) = split /\s*\|\s*/, $proto; - $name && $is_in_proper_form or die <{pod}; + if (defined $this_pod) { + next NAME if $this_pod =~ / \b $name \b /x; + } } - my $docs = ""; -DOC: - while (defined($doc = $get_next_line->())) { + warn "$name has no documentation\n"; + $missing_macros{$name} = 'config.h'; + + next; + } + + my $has_defn = $configs{$name}{has_defn}; + my $has_args = $configs{$name}{has_args}; - # Other pod commands are considered part of the current - # function's docs, so can have lists, etc. - last DOC if $doc =~ /^=(cut|for\s+apidoc|head)/; - if ($doc =~ m:^\*/$:) { - warn "=cut missing? $file:$line:$doc";; - last DOC; + # Check if any section already has an entry for this element. + # If so, it better be a placeholder, in which case we replace it + # with this entry. + foreach my $section (keys $docs{'api'}->%*) { + if (exists $docs{'api'}{$section}{$name}) { + my $was = $docs{'api'}{$section}{$name}->{pod}; + $was = "" unless $was; + chomp $was; + if ($was ne "" && $was !~ m/$link_text/) { + die "Multiple descriptions for $name\n" + . "$section contained '$was'"; } - $docs .= $doc; + $docs{'api'}{$section}{$name}->{pod} = $configs{$name}{pod}; + $configs{$name}{section} = $section; + last; + } + } + + my $handled = 0; # Haven't handled this yet + + if (defined $configs{$name}{'section'}) { + # This has been taken care of elsewhere. + $handled = 1; + } + else { + my $flags = ""; + if ($has_defn && ! $has_args) { + $configs{$name}{args} = 1; } - $docs = "\n$docs" if $docs and $docs !~ /^\n/; - # If the entry is also in embed.fnc, it should be defined - # completely there, but not here - my $embed_docref = delete $funcflags{$name}; - if ($embed_docref and %$embed_docref) { - warn "embed.fnc entry overrides redundant information in" - . " '$proto_in_file' in $file" if $flags || $ret || @args; - $flags = $embed_docref->{'flags'}; - warn "embed.fnc entry '$name' missing 'd' flag" - unless $flags =~ /d/; - next FUNC if $flags =~ /h/; - $ret = $embed_docref->{'retval'}; - @args = @{$embed_docref->{args}}; - } elsif ($flags !~ /m/) { # Not in embed.fnc, is missing if not a - # macro - $missing{$name} = $file; - } - - my $inline_where = $flags =~ /A/ ? 'api' : 'guts'; - - if (exists $docs{$inline_where}{$curheader}{$name}) { - warn "$0: duplicate API entry for '$name' in $inline_where/$curheader\n"; - next; + # Symbols of the form I_FOO are for #include files. They have + # special usage information + if ($name =~ / ^ I_ ( .* ) /x) { + my $file = lc $1 . '.h'; + $configs{$name}{usage} = <<~"EOT"; + #ifdef $name + #include <$file> + #endif + EOT } - $docs{$inline_where}{$curheader}{$name} - = [$flags, $docs, $ret, $file, @args]; - # Create a special entry with an empty-string name for the - # heading-level documentation. - if (defined $header_doc) { - $docs{$inline_where}{$curheader}{""} = $header_doc; - undef $header_doc; + # Compute what section this variable should go into. This + # heuristic was determined by manually inspecting the current + # things in config.h, and should be adjusted as necessary as + # deficiencies are found. + # + # This is the default section for macros with a definiton but + # no arguments, meaning it is replaced unconditionally + # + my $sb = qr/ _ | \b /x; # segment boundary + my $dash_or_spaces = qr/ - | \s+ /x; + my $pod = $configs{$name}{pod}; + if ($name =~ / ^ USE_ /x) { + $configs{$name}{'section'} = $site_scn; + } + elsif ($name =~ / SLEEP | (*nlb:SYS_) TIME | TZ | $sb TM $sb /x) + { + $configs{$name}{'section'} = $time_scn; + } + elsif ( $name =~ / ^ [[:alpha:]]+ f $ /x + && $configs{$name}{pod} =~ m/ \b format \b /ix) + { + $configs{$name}{'section'} = $io_formats_scn; + } + elsif ($name =~ / DOUBLE | FLOAT | LONGDBL | LDBL | ^ NV + | $sb CASTFLAGS $sb + | QUADMATH + | $sb (?: IS )? NAN + | $sb (?: IS )? FINITE + /x) + { + $configs{$name}{'section'} = + $floating_scn; + } + elsif ($name =~ / (?: POS | OFF | DIR ) 64 /x) { + $configs{$name}{'section'} = $filesystem_scn; + } + elsif ( $name =~ / $sb (?: BUILTIN | CPP ) $sb | ^ CPP /x + || $configs{$name}{pod} =~ m/ \b align /x) + { + $configs{$name}{'section'} = $compiler_scn; + } + elsif ($name =~ / ^ [IU] [ \d V ] + | ^ INT | SHORT | LONG | QUAD | 64 | 32 /xx) + { + $configs{$name}{'section'} = $integer_scn; + } + elsif ($name =~ / $sb t $sb /x) { + $configs{$name}{'section'} = $typedefs_scn; + $flags .= 'y'; + } + elsif ( $name =~ / ^ PERL_ ( PRI | SCN ) | $sb FORMAT $sb /x + && $configs{$name}{pod} =~ m/ \b format \b /ix) + { + $configs{$name}{'section'} = $io_formats_scn; + } + elsif ($name =~ / BACKTRACE /x) { + $configs{$name}{'section'} = $debugging_scn; + } + elsif ($name =~ / ALLOC $sb /x) { + $configs{$name}{'section'} = $memory_scn; + } + elsif ( $name =~ / STDIO | FCNTL | EOF | FFLUSH + | $sb FILE $sb + | $sb DIR $sb + | $sb LSEEK + | $sb INO $sb + | $sb OPEN + | $sb CLOSE + | ^ DIR + | ^ INO $sb + | DIR $ + | FILENAMES + /x + || $configs{$name}{pod} =~ m! I/O | stdio + | file \s+ descriptor + | file \s* system + | statfs + !x) + { + $configs{$name}{'section'} = $filesystem_scn; } + elsif ($name =~ / ^ SIG | SIGINFO | signal /ix) { + $configs{$name}{'section'} = $signals_scn; + } + elsif ($name =~ / $sb ( PROTO (?: TYPE)? S? ) $sb /x) { + $configs{$name}{'section'} = $prototypes_scn; + } + elsif ( $name =~ / ^ LOC_ /x + || $configs{$name}{pod} =~ /full path/i) + { + $configs{$name}{'section'} = $paths_scn; + } + elsif ($name =~ / $sb LC_ | LOCALE | langinfo /xi) { + $configs{$name}{'section'} = $locale_scn; + } + elsif ($configs{$name}{pod} =~ / GCC | C99 | C\+\+ /xi) { + $configs{$name}{'section'} = $compiler_scn; + } + elsif ($name =~ / PASSW (OR)? D | ^ PW | ( PW | GR ) ENT /x) + { + $configs{$name}{'section'} = $password_scn; + } + elsif ($name =~ / SOCKET | $sb SOCK /x) { + $configs{$name}{'section'} = $sockets_scn; + } + elsif ( $name =~ / THREAD | MULTIPLICITY /x + || $configs{$name}{pod} =~ m/ \b pthread /ix) + { + $configs{$name}{'section'} = $concurrency_scn; + } + elsif ($name =~ / PERL | ^ PRIV | SITE | ARCH | BIN + | VENDOR | ^ USE + /x) + { + $configs{$name}{'section'} = $site_scn; + } + elsif ( $pod =~ / \b floating $dash_or_spaces point \b /ix + || $pod =~ / \b (double | single) $dash_or_spaces precision \b /ix + || $pod =~ / \b doubles \b /ix + || $pod =~ / \b (?: a | the | long ) \s+ (?: double | NV ) \b /ix) + { + $configs{$name}{'section'} = + $floating_scn; + } + else { + # Above are the specific sections. The rest go into a + # grab-bag of general configuration values. However, we put + # two classes of them into lists of their names, without their + # descriptions, when we think that the description doesn't add + # any real value. One list contains the #include variables: + # the description is basically boiler plate for each of these. + # The other list contains the very many things that are of the + # form HAS_foo, and \bfoo\b is contained in its description, + # and there is no verbatim text in the pod or links to/from it + # (which would add value). That means that it is likely the + # intent of the variable can be gleaned from just its name, + # and unlikely the description adds signficant value, so just + # listing them suffices. Giving their descriptions would + # expand this pod significantly with little added value. + if ( ! $has_defn + && ! $configs{$name}{verbatim} + && ! $configs{$name}{linked}) + { + if ($name =~ / ^ I_ ( .* ) /x) { + push @include_defs, $name; + next; + } + elsif ($name =~ / ^ HAS_ ( .* ) /x) { + my $canonical_name = $1; + $canonical_name =~ s/_//g; - if (defined $doc) { - if ($doc =~ /^=(?:for|head)/) { - $in = $doc; - redo FUNC; + my $canonical_pod = $configs{$name}{pod}; + $canonical_pod =~ s/_//g; + + if ($canonical_pod =~ / \b $canonical_name \b /xi) { + if ($name =~ / $sb R $sb /x) { + push @has_r_defs, $name; + } + else { + push @has_defs, $name; + } + next; + } + } } - } else { - warn "$file:$line:$in"; + + $configs{$name}{'section'} = $genconfig_scn; } + + my $section = $configs{$name}{'section'}; + die "Internal error: '$section' not in \%valid_sections" + unless grep { $_ eq $section } keys %valid_sections; + $flags .= 'AdmnT'; + $flags .= 'U' unless defined $configs{$name}{usage}; + + # All the information has been gathered; save it + $docs{'api'}{$section}{$name}{flags} = $flags; + $docs{'api'}{$section}{$name}{pod} = $configs{$name}{pod}; + $docs{'api'}{$section}{$name}{ret_type} = ""; + $docs{'api'}{$section}{$name}{file} = 'config.h'; + $docs{'api'}{$section}{$name}{usage} + = $configs{$name}{usage} if defined $configs{$name}{usage}; + push $docs{'api'}{$section}{$name}{args}->@*, (); + push $docs{'api'}{$section}{$name}{items}->@*, (); } } } -sub docout ($$$) { # output the docs for one function - my($fh, $name, $docref) = @_; - my($flags, $docs, $ret, $file, @args) = @$docref; - $name =~ s/\s*$//; +sub format_pod_indexes($) { + my $entries_ref = shift; + + # Output the X<> references to the names, packed since they don't get + # displayed, but not too many per line so that when someone is editing the + # file, it doesn't run on - if ($flags =~ /D/) { - $docs = "\n\nDEPRECATED! It is planned to remove this function from a -future release of Perl. Do not use it for new code; remove it from -existing code.\n\n$docs"; + my $text =""; + my $line_length = 0; + for my $name (sort dictionary_order $entries_ref->@*) { + my $entry = "X<$name>"; + my $entry_length = length $entry; + + # Don't loop forever if we have a verrry long name, and don't go too + # far to the right. + if ($line_length > 0 && $line_length + $entry_length > $max_width) { + $text .= "\n"; + $line_length = 0; + } + + $text .= $entry; + $line_length += $entry_length; } - else { - $docs = "\n\nNOTE: this function is experimental and may change or be -removed without notice.\n\n$docs" if $flags =~ /x/; + + return $text; +} + +sub docout ($$$) { # output the docs for one function group + my($fh, $element_name, $docref) = @_; + + # Trim trailing space + $element_name =~ s/\s*$//; + + my $flags = $docref->{flags}; + my $pod = $docref->{pod} // ""; + my $file = $docref->{file}; + + my @items = $docref->{items}->@*; + + # Make the main element the first of the items. This allows uniform + # treatment below + unshift @items, { name => $element_name, + flags => $flags, + ret_type => $docref->{ret_type}, + args => [ $docref->{args}->@* ], + }; + + warn("Empty pod for $element_name (from $file)") unless $pod =~ /\S/; + + print $fh "\n=over $description_indent\n"; + print $fh "\n=item C<$_->{name}>\n" for @items; + + # If we're printing only a link to an element, this isn't the major entry, + # so no X<> here. + if ($flags !~ /h/) { + print $fh "X<$_->{name}>" for @items; + print $fh "\n"; } - # Is Perl_, but no #define foo # Perl_foo - my $p = $flags =~ /p/ && $flags =~ /o/ && $flags !~ /M/; + my @deprecated; + my @experimental; + for my $item (@items) { + push @deprecated, "C<$item->{name}>" if $item->{flags} =~ /D/; + push @experimental, "C<$item->{name}>" if $item->{flags} =~ /x/; + } + + for my $which (\@deprecated, \@experimental) { + if ($which->@*) { + my $is; + my $it; + my $list; - $docs .= "NOTE: the perl_ form of this function is deprecated.\n\n" - if $flags =~ /O/; - if ($p) { - $docs .= "NOTE: this function must be explicitly called as Perl_$name"; - $docs .= " with an aTHX_ parameter" if $flags !~ /T/; - $docs .= ".\n\n" + if ($which->@* == 1) { + $is = 'is'; + $it = 'it'; + $list = $which->[0]; + } + elsif ($which->@* == @items) { + $is = 'are'; + $it = 'them'; + $list = (@items == 2) + ? "both forms" + : "all these forms"; + } + else { + $is = 'are'; + $it = 'them'; + my $final = pop $which->@*; + $list = "the " . join ", ", $which->@*; + $list .= "," if $which->@* > 1; + $list .= " and $final forms"; + } + + if ($which == \@deprecated) { + print $fh <<~"EOT"; + + C> It is planned to remove $list + from a future release of Perl. Do not use $it for + new code; remove $it from existing code. + EOT + } + else { + print $fh <<~"EOT"; + + NOTE: $list $is B and may change or be + removed without notice. + EOT + } + } } - print $fh "=item $name\nX<$name>\n$docs"; + chomp $pod; # Make sure prints pod with a single trailing \n + print $fh "\n", $pod, "\n"; + + for my $item (@items) { + my $item_flags = $item->{flags}; + my $item_name = $item->{name}; - if ($flags =~ /U/) { # no usage - warn("U and s flags are incompatible") if $flags =~ /s/; + print $fh "\nNOTE: the C form is B.\n" + if $item_flags =~ /O/; + # Is Perl_, but no #define foo # Perl_foo + if ( ($item_flags =~ /p/ && $item_flags =~ /o/ && $item_flags !~ /M/) + + # Can't handle threaded varargs + || ($item_flags =~ /f/ && $item_flags !~ /T/)) + { + $item->{name} = "Perl_$item_name"; + print $fh <<~"EOT"; + + NOTE: C<$item_name> must be explicitly called as + C<$item->{name}> + EOT + print $fh "with an C parameter" if $item_flags !~ /T/; + print $fh ".\n"; + } + } + + if ($flags =~ /[Uy]/) { # no usage; typedefs are considered simple enough + # to never warrant a usage line + warn("U and s flags are incompatible") + if $flags =~ /U/ && $flags =~ /s/; # nothing } else { - if ($flags =~ /n/) { # no args - warn("n flag without m") unless $flags =~ /m/; - warn("n flag but apparently has args") if @args; - print $fh "\t$ret\t$name"; - } else { # full usage - my $n = "Perl_"x$p . $name; - my $large_ret = length $ret > 7; - my $indent_size = 7+8 # nroff: 7 under =head + 8 under =item - +8+($large_ret ? 1 + length $ret : 8) - +length($n) + 1; - my $indent; - print $fh "\t$ret" . ($large_ret ? ' ' : "\t") . "$n("; - my $long_args; - for (@args) { - if ($indent_size + 2 + length > 79) { - $long_args=1; - $indent_size -= length($n) - 3; - last; + + print $fh "\n=over $usage_indent\n"; + + if (defined $docref->{usage}) { # An override of the usage section + print $fh "\n", ($docref->{usage} =~ s/^/ /mrg), "\n"; + } + else { + + # Add the thread context formal parameter on expanded-out names + for my $item (@items) { + unshift $item->{args}->@*, (($item->{args}->@*) + ? "pTHX_" + : "pTHX") + if $item->{flags} !~ /T/ + && $item->{name} =~ /^Perl_/; + } + + # Look through all the items in this entry. If all have the same + # return type and arguments (including thread context), only the + # main entry is displayed. + # Also, find the longest return type and longest name so that if + # multiple ones are shown, they can be vertically aligned nicely + my $need_individual_usage = 0; + my $longest_name_length = length $items[0]->{name}; + my $base_ret_type = $items[0]->{ret_type}; + my $longest_ret = length $base_ret_type; + my @base_args = $items[0]->{args}->@*; + my $base_thread_context = $items[0]->{flags} =~ /T/; + for (my $i = 1; $i < @items; $i++) { + no warnings 'experimental::smartmatch'; + my $item = $items[$i]; + $need_individual_usage = 1 + if $item->{ret_type} ne $base_ret_type + || ! ($item->{args}->@* ~~ @base_args) + || ( $item->{flags} =~ /T/ + != $base_thread_context); + my $ret_length = length $item->{ret_type}; + $longest_ret = $ret_length if $ret_length > $longest_ret; + my $name_length = length $item->{name}; + $longest_name_length = $name_length + if $name_length > $longest_name_length; + } + + # If we're only showing one entry, only its length matters. + $longest_name_length = length($items[0]->{name}) + unless $need_individual_usage; + print $fh "\n"; + + my $indent = 1; # 1 is sufficient for verbatim; =over is used + # for more + my $ret_name_sep_length = 2; # spaces between return type and name + my $name_indent = $indent + $longest_ret; + $name_indent += $ret_name_sep_length if $longest_ret; + + my $this_max_width = + $max_width - $description_indent - $usage_indent; + + for my $item (@items) { + my $ret_type = $item->{ret_type}; + my @args = $item->{args}->@*; + my $name = $item->{name}; + my $item_flags = $item->{flags}; + + # The return type + print $fh (" " x $indent), $ret_type; + + print $fh " " x ( $ret_name_sep_length + + $longest_ret - length $ret_type); + print $fh $name; + + if ($item_flags =~ /n/) { # no args + warn("$file: $element_name: n flag without m") + unless $item_flags =~ /m/; + warn("$file: $name: n flag but apparently has args") + if @args; + } + else { + # +1 for the '(' + my $arg_indent = $name_indent + $longest_name_length + 1; + + # Align the argument lists of the items + print $fh " " x ($longest_name_length - length($name)); + print $fh "("; + + # Display as many of the arguments on the same line as + # will fit. + my $total_length = $arg_indent; + my $first_line = 1; + for (my $i = 0; $i < @args; $i++) { + my $arg = $args[$i]; + my $arg_length = length($arg); + + # All but the first arg are preceded by a blank + my $use_blank = $i > 0; + + # +1 here and below because either the argument has a + # trailing comma or trailing ')' + $total_length += $arg_length + $use_blank + 1; + + # We want none of the arguments to be positioned so + # they extend too far to the right. Ideally, they + # should all start in the same column as the arguments + # on the first line of the function display do. But, if + # necessary, outdent them so that they all start in + # another column, with the longest ending at the right + # margin, like so: + # void function_name(pTHX_ short1, + # short2, + # very_long_argument, + # short3) + if ($total_length > $this_max_width) { + + # If this is the first continuation line, + # calculate the longest argument; this will be the + # one we may have to outdent for. + if ($first_line) { + $first_line = 0; + + # We will need at least as much as the current + # argument + my $longest_arg_length = $arg_length + + $use_blank + 1; + + # Look through the rest of the args to see if + # any are longer than this one. + for (my $j = $i + 1; $j < @args; $j++) { + + # Include the trailing ',' or ')' in the + # length. No need to concern ourselves + # with a leading blank, as the argument + # would be positioned first on the next + # line + my $peek_arg_length = length ($args[$j]) + + 1; + $longest_arg_length = $peek_arg_length + if $peek_arg_length > $longest_arg_length; + } + + # Calculate the new indent if necessary. + $arg_indent = + $this_max_width - $longest_arg_length + if $arg_indent + $longest_arg_length + > $this_max_width; + } + + print $fh "\n", (" " x $arg_indent); + $total_length = $arg_indent + $arg_length + 1; + $use_blank = 0; + } + + # Display this argument + print $fh " " if $use_blank; + print $fh $arg; + print $fh "," if $i < @args - 1 && $args[$i] ne 'pTHX_'; + + } # End of loop through args + + print $fh ")"; } + + print $fh ";" if $item_flags =~ /s/; # semicolon: "dTHR;" + print $fh "\n"; + + # Only the first entry is normally displayed + last unless $need_individual_usage; } - my $args = ''; - if ($flags !~ /T/ && ($p || ($flags =~ /m/ && $name =~ /^Perl_/))) { - $args = @args ? "pTHX_ " : "pTHX"; - if ($long_args) { print $fh $args; $args = '' } - } - $long_args and print $fh "\n"; - my $first = !$long_args; - while () { - if (!@args or - length $args - && $indent_size + 3 + length($args[0]) + length $args > 79 - ) { - print $fh - $first ? '' : ( - $indent //= - "\t".($large_ret ? " " x (1+length $ret) : "\t") - ." "x($long_args ? 4 : 1 + length $n) - ), - $args, (","x($args ne 'pTHX_ ') . "\n")x!!@args; - $args = $first = ''; + } + + print $fh "\n=back\n"; + } + + print $fh "\n=back\n"; + print $fh "\n=for hackers\nFound in file $file\n"; +} + +sub construct_missings_section { + my ($pod_name, $missings_ref) = @_; + my $text = ""; + + return $text unless $missings_ref->@*; + + $text .= <<~EOT; + + =head1 $undocumented_scn + + EOT + if ($pod_name eq 'perlapi') { + $text .= <<~'EOT'; + The following functions have been flagged as part of the public + API, but are currently undocumented. Use them at your own risk, + as the interfaces are subject to change. Functions that are not + listed in this document are not intended for public use, and + should NOT be used under any circumstances. + + If you feel you need to use one of these functions, first send + email to L. + It may be that there is a good reason for the function not being + documented, and it should be removed from this list; or it may + just be that no one has gotten around to documenting it. In the + latter case, you will be asked to submit a patch to document the + function. Once your patch is accepted, it will indicate that the + interface is stable (unless it is explicitly marked otherwise) and + usable by you. + EOT + } + else { + $text .= <<~'EOT'; + The following functions are currently undocumented. If you use + one of them, you may wish to consider creating and submitting + documentation for it. + EOT + } + + $text .= "\n" . format_pod_indexes($missings_ref); + + # Sort the elements. + my @missings = sort dictionary_order $missings_ref->@*; + + + $text .= "\n"; + + use integer; + + # Look through all the elements in the list and see how many columns we + # could place them in the output what will fit in the available width. + my $min_spacer = 2; # Need this much space between columns + my $columns; + my $rows; + my @col_widths; + + COLUMN: + # We start with more columns, and work down until we find a number that + # can accommodate all the data. This algorithm doesn't require the + # resulting columns to all have the same width. This can allow for + # as tight of packing as the data will possibly allow. + for ($columns = 7; $columns >= 1; $columns--) { + + # For this many columns, we will need this many rows (final row might + # not be completely filled) + $rows = (@missings + $columns - 1) / $columns; + + # We only need to execute this final iteration to calculate the number + # of rows, as we can't get fewer than a single column. + last if $columns == 1; + + my $row_width = 1; # For 1 space indent + my $i = 0; # Which missing element + + # For each column ... + for my $col (0 .. $columns - 1) { + + # Calculate how wide the column needs to be, which is based on the + # widest element in it + $col_widths[$col] = 0; + + # Look through all the rows to find the widest element + for my $row (0 .. $rows - 1) { + + # Skip if this row doesn't have an entry for this column + last if $i >= @missings; + + # This entry occupies this many bytes. + my $this_width = length $missings[$i]; + + # All but the final column need a spacer between it and the + # next column over. + $this_width += $min_spacer if $col < $columns - 1; + + + # This column will need to have enough width to accommodate + # this element + if ($this_width > $col_widths[$col]) { + + # We can't have this many columns if the total width + # exceeds the available; bail now and try fewer columns + next COLUMN if $row_width + $this_width > $max_width; + + $col_widths[$col] = $this_width; } - @args or last; - $args .= ", "x!!(length $args && $args ne 'pTHX_ ') - . shift @args; + + $i++; # The next row will contain the next item } - if ($long_args) { print $fh "\n", substr $indent, 0, -4 } - print $fh ")"; + + $row_width += $col_widths[$col]; + next COLUMN if $row_width > $max_width; } - print $fh ";" if $flags =~ /s/; # semicolon "dTHR;" - print $fh "\n\n"; + + # If we get this far, this many columns works + last; } - print $fh "=for hackers\nFound in file $file\n\n"; + + # Here, have calculated the number of rows ($rows) and columns ($columns) + # required to list the elements. @col_widths contains the width of each + # column. + + $text .= "\n"; + + # Assemble the output + for my $row (0 .. $rows - 1) { + for my $col (0 .. $columns - 1) { + $text .= " " if $col == 0; # Indent one to mark as verbatim + + my $index = $row + $rows * $col; # Convert 2 dimensions to 1 + + # Skip if this row doesn't have an entry for this column + next if $index >= @missings; + + my $element = $missings[$index]; + $text .= $element; + + # Add alignment spaces for all but final column + $text .= " " x ($col_widths[$col] - length $element) + if $col < $columns - 1; + } + + $text .= "\n"; # End of row + } + + return $text; } -sub sort_helper { +sub dictionary_order { # Do a case-insensitive dictionary sort, with only alphabetics # significant, falling back to using everything for determinancy return (uc($a =~ s/[[:^alpha:]]//r) cmp uc($b =~ s/[[:^alpha:]]//r)) @@ -323,7 +1662,7 @@ sub sort_helper { } sub output { - my ($podname, $header, $dochash, $missing, $footer) = @_; + my ($podname, $header, $dochash, $missings_ref, $footer) = @_; # # strip leading '|' from each line which had been used to hide # pod from pod checkers. @@ -333,69 +1672,60 @@ sub output { {by => "$0 extracting documentation", from => 'the C source files'}, 1); - print $fh $header; + print $fh $header, "\n"; - my $key; - for $key (sort sort_helper keys %$dochash) { - my $section = $dochash->{$key}; - print $fh "\n=head1 $key\n\n"; + for my $section_name (sort dictionary_order keys %valid_sections) { + my $section_info = $dochash->{$section_name}; - # Output any heading-level documentation and delete so won't get in - # the way later - if (exists $section->{""}) { - print $fh $section->{""} . "\n"; - delete $section->{""}; + # We allow empty sections in perlintern. + if (! $section_info && $podname eq 'perlapi') { + warn "Empty section '$section_name'; skipped"; + next; } - print $fh "=over 8\n\n"; - for my $key (sort sort_helper keys %$section) { - docout($fh, $key, $section->{$key}); + print $fh "\n=head1 $section_name\n"; + + if ($podname eq 'perlapi') { + print $fh "\n", $valid_sections{$section_name}{header}, "\n" + if defined $valid_sections{$section_name}{header}; + + # Output any heading-level documentation and delete so won't get in + # the way later + if (exists $section_info->{""}) { + print $fh "\n", $section_info->{""}, "\n"; + delete $section_info->{""}; + } } - print $fh "\n=back\n"; - } - if (@$missing) { - print $fh "\n=head1 Undocumented functions\n\n"; - print $fh $podname eq 'perlapi' ? <<'_EOB_' : <<'_EOB_'; -The following functions have been flagged as part of the public API, -but are currently undocumented. Use them at your own risk, as the -interfaces are subject to change. Functions that are not listed in this -document are not intended for public use, and should NOT be used under any -circumstances. - -If you feel you need to use one of these functions, first send email to -L. It may be -that there is a good reason for the function not being documented, and it -should be removed from this list; or it may just be that no one has gotten -around to documenting it. In the latter case, you will be asked to submit a -patch to document the function. Once your patch is accepted, it will indicate -that the interface is stable (unless it is explicitly marked otherwise) and -usable by you. -_EOB_ -The following functions are currently undocumented. If you use one of -them, you may wish to consider creating and submitting documentation for -it. -_EOB_ - print $fh "\n=over\n\n"; + if ($section_info && keys $section_info->%*) { + for my $function_name (sort dictionary_order keys %$section_info) { + docout($fh, $function_name, $section_info->{$function_name}); + } + } + else { + print $fh "\nThere are only public API items currently in $section_name\n"; + } - for my $missing (sort @$missing) { - print $fh "=item $missing\nX<$missing>\n\n"; + print $fh "\n", $valid_sections{$section_name}{footer}, "\n" + if $podname eq 'perlapi' + && defined $valid_sections{$section_name}{footer}; } - print $fh "=back\n\n"; -} - print $fh $footer, "=cut\n"; + + print $fh construct_missings_section($podname, $missings_ref); + + print $fh "\n$footer\n=cut\n"; read_only_bottom_close_and_rename($fh); } foreach (@{(setup_embed())[0]}) { next if @$_ < 2; - my ($flags, $retval, $func, @args) = @$_; + my ($flags, $ret_type, $func, @args) = @$_; s/\b(?:NN|NULLOK)\b\s+//g for @args; $funcflags{$func} = { flags => $flags, - retval => $retval, + ret_type => $ret_type, args => \@args, }; } @@ -407,31 +1737,54 @@ open my $fh, '<', 'MANIFEST' while (my $line = <$fh>) { next unless my ($file) = $line =~ /^(\S+\.(?:[ch]|pod))\t/; + # Don't pick up pods from these. + next if $file =~ m! ^ ( cpan | dist | ext ) / !x + && ! defined $extra_input_pods{$file}; + open F, '<', $file or die "Cannot open $file for docs: $!\n"; - $curheader = "Functions in file $file\n"; autodoc(\*F,$file); close F or die "Error closing $file: $!\n"; } close $fh or die "Error whilst reading MANIFEST: $!"; +parse_config_h(); + for (sort keys %funcflags) { next unless $funcflags{$_}{flags} =~ /d/; next if $funcflags{$_}{flags} =~ /h/; - warn "no docs for $_\n" + warn "no docs for $_\n"; } foreach (sort keys %missing) { warn "Function '$_', documented in $missing{$_}, not listed in embed.fnc"; } -# walk table providing an array of components in each line to -# subroutine, printing the result - # List of funcs in the public API that aren't also marked as core-only, # experimental nor deprecated. my @missing_api = grep $funcflags{$_}{flags} =~ /A/ && $funcflags{$_}{flags} !~ /[xD]/ && !$docs{api}{$_}, keys %funcflags; +push @missing_api, keys %missing_macros; + +my @other_places = ( qw(perlclib ), keys %described_elsewhere ); +my $places_other_than_intern = join ", ", + map { "L<$_>" } sort dictionary_order 'perlapi', @other_places; +my $places_other_than_api = join ", ", + map { "L<$_>" } sort dictionary_order 'perlintern', @other_places; + +# The S< > makes things less densely packed, hence more readable +my $has_defs_text .= join ",S< > ", map { "C<$_>" } sort dictionary_order @has_defs; +my $has_r_defs_text .= join ",S< > ", map { "C<$_>" } sort dictionary_order @has_r_defs; +$valid_sections{$genconfig_scn}{footer} =~ s/__HAS_LIST__/$has_defs_text/; +$valid_sections{$genconfig_scn}{footer} =~ s/__HAS_R_LIST__/$has_r_defs_text/; + +my $include_defs_text .= join ",S< > ", map { "C<$_>" } sort dictionary_order @include_defs; +$valid_sections{$genconfig_scn}{footer} =~ s/__INCLUDE_LIST__/$include_defs_text/; + +my $section_list = join "\n\n", map { "=item L" } + sort(dictionary_order keys %valid_sections), + $undocumented_scn; # Keep last + output('perlapi', <<"_EOB_", $docs{api}, \@missing_api, <<"_EOE_"); |=encoding UTF-8 | @@ -444,16 +1797,27 @@ output('perlapi', <<"_EOB_", $docs{api}, \@missing_api, <<"_EOE_"); | |This file contains most of the documentation of the perl public API, as |generated by F. Specifically, it is a listing of functions, -|macros, flags, and variables that may be used by extension writers. Some -|specialized items are instead documented in $specialized_docs. +|macros, flags, and variables that may be used by extension writers. Besides +|L and F, some items are listed here as being actually +|documented in another pod. | -|L is a list of functions which have yet +|L is a list of functions which have yet |to be documented. Patches welcome! The interfaces of these are subject to |change without notice. | -|Anything not listed here is not part of the public API, and should not be -|used by extension writers at all. For these reasons, blindly using functions -|listed in proto.h is to be avoided when writing extensions. +|Some of the functions documented here are consolidated so that a single entry +|serves for multiple functions which all do basically the same thing, but have +|some slight differences. For example, one form might process magic, while +|another doesn't. The name of each variation is listed at the top of the +|single entry. But if all have the same signature (arguments and return type) +|except for their names, only the usage for the base form is shown. If any +|one of the forms has a different signature (such as returning C or +|not) every function's signature is explicitly displayed. +| +|Anything not listed here or in the other mentioned pods is not part of the +|public API, and should not be used by extension writers at all. For these +|reasons, blindly using functions listed in F is to be avoided when +|writing extensions. | |In Perl, unlike C, a string of characters may generally contain embedded |C characters. Sometimes in the documentation a Perl string is referred @@ -476,7 +1840,7 @@ output('perlapi', <<"_EOB_", $docs{api}, \@missing_api, <<"_EOE_"); |range can be referred to as ISO-8859-1. Often, the term "Latin-1" (or |"Latin1") is used as an equivalent for ISO-8859-1. But some people treat |"Latin1" as referring just to the characters in the range 128 through 255, or -|somethimes from 160 through 255. +|sometimes from 160 through 255. |This documentation uses "Latin1" and "Latin-1" to refer to all 256 characters. | |Note that Perl can be compiled and run under either ASCII or EBCDIC (See @@ -492,10 +1856,20 @@ output('perlapi', <<"_EOB_", $docs{api}, \@missing_api, <<"_EOE_"); |the UTF- encodings, and a string encoded in UTF-EBCDIC may occupy a different |number of bytes than in UTF-8. | -|The listing below is alphabetical, case insensitive. +|The organization of this document is tentative and subject to change. +|Suggestions and patches welcome +|L. | -_EOB_ +|The sections in this document currently are | +|=over $standard_indent + +|$section_list +| +|=back +| +|The listing below is alphabetical, case insensitive. +_EOB_ |=head1 AUTHORS | |Until May 1997, this document was maintained by Jeff Okamoto @@ -512,7 +1886,7 @@ _EOB_ | |=head1 SEE ALSO | -$other_places_api +|F, $places_other_than_api _EOE_ # List of non-static internal functions @@ -532,6 +1906,8 @@ output('perlintern', <<'_EOB_', $docs{guts}, \@missing_guts, <<"_EOE_"); |Perl interpreter that are documented using Perl's internal documentation |format but are not marked as part of the Perl API. In other words, |B! + +|It has the same sections as L, though some may be empty. | _EOB_ | @@ -543,5 +1919,5 @@ _EOB_ | |=head1 SEE ALSO | -$other_places_intern +|F, $places_other_than_intern _EOE_ diff --git a/gnu/usr.bin/perl/av.c b/gnu/usr.bin/perl/av.c index 27b2f12032b..090c5a93f4c 100644 --- a/gnu/usr.bin/perl/av.c +++ b/gnu/usr.bin/perl/av.c @@ -15,10 +15,6 @@ * [p.476 of _The Lord of the Rings_, III/iv: "Treebeard"] */ -/* -=head1 Array Manipulation Functions -*/ - #include "EXTERN.h" #define PERL_IN_AV_C #include "perl.h" @@ -32,22 +28,22 @@ Perl_av_reify(pTHX_ AV *av) assert(SvTYPE(av) == SVt_PVAV); if (AvREAL(av)) - return; + return; #ifdef DEBUGGING if (SvTIED_mg((const SV *)av, PERL_MAGIC_tied)) - Perl_ck_warner_d(aTHX_ packWARN(WARN_DEBUGGING), "av_reify called on tied array"); + Perl_ck_warner_d(aTHX_ packWARN(WARN_DEBUGGING), "av_reify called on tied array"); #endif key = AvMAX(av) + 1; while (key > AvFILLp(av) + 1) - AvARRAY(av)[--key] = NULL; + AvARRAY(av)[--key] = NULL; while (key) { - SV * const sv = AvARRAY(av)[--key]; - if (sv != &PL_sv_undef) - SvREFCNT_inc_simple_void(sv); + SV * const sv = AvARRAY(av)[--key]; + if (sv != &PL_sv_undef) + SvREFCNT_inc_simple_void(sv); } key = AvARRAY(av) - AvALLOC(av); while (key) - AvALLOC(av)[--key] = NULL; + AvALLOC(av)[--key] = NULL; AvREIFY_off(av); AvREAL_on(av); } @@ -76,7 +72,7 @@ Perl_av_extend(pTHX_ AV *av, SSize_t key) mg = SvTIED_mg((const SV *)av, PERL_MAGIC_tied); if (mg) { - SV *arg1 = sv_newmortal(); + SV *arg1 = sv_newmortal(); /* NOTE: the API for av_extend() is NOT the same as the tie method EXTEND. * * The C function takes an *index* (assumes 0 indexed arrays) and ensures @@ -86,18 +82,19 @@ Perl_av_extend(pTHX_ AV *av, SSize_t key) * is at least that many elements large. Thus we have to +1 the key when * we call the tied method. */ - sv_setiv(arg1, (IV)(key + 1)); - Perl_magic_methcall(aTHX_ MUTABLE_SV(av), mg, SV_CONST(EXTEND), G_DISCARD, 1, - arg1); - return; + sv_setiv(arg1, (IV)(key + 1)); + Perl_magic_methcall(aTHX_ MUTABLE_SV(av), mg, SV_CONST(EXTEND), G_DISCARD, 1, + arg1); + return; } av_extend_guts(av,key,&AvMAX(av),&AvALLOC(av),&AvARRAY(av)); } /* The guts of av_extend. *Not* for general use! */ +/* Also called directly from pp_assign, padlist_store, padnamelist_store */ void Perl_av_extend_guts(pTHX_ AV *av, SSize_t key, SSize_t *maxp, SV ***allocp, - SV ***arrayp) + SV ***arrayp) { PERL_ARGS_ASSERT_AV_EXTEND_GUTS; @@ -106,102 +103,106 @@ Perl_av_extend_guts(pTHX_ AV *av, SSize_t key, SSize_t *maxp, SV ***allocp, "panic: av_extend_guts() negative count (%" IVdf ")", (IV)key); if (key > *maxp) { - SV** ary; - SSize_t tmp; - SSize_t newmax; - - if (av && *allocp != *arrayp) { - ary = *allocp + AvFILLp(av) + 1; - tmp = *arrayp - *allocp; - Move(*arrayp, *allocp, AvFILLp(av)+1, SV*); - *maxp += tmp; - *arrayp = *allocp; - if (AvREAL(av)) { - while (tmp) - ary[--tmp] = NULL; - } - if (key > *maxp - 10) { - newmax = key + *maxp; - goto resize; - } - } - else { - if (*allocp) { + SSize_t ary_offset = *maxp + 1; + SSize_t to_null = 0; + SSize_t newmax = 0; + + if (av && *allocp != *arrayp) { /* a shifted SV* array exists */ + to_null = *arrayp - *allocp; + *maxp += to_null; + ary_offset = AvFILLp(av) + 1; + + Move(*arrayp, *allocp, AvFILLp(av)+1, SV*); + + if (key > *maxp - 10) { + newmax = key + *maxp; + goto resize; + } + } else if (*allocp) { /* a full SV* array exists */ #ifdef Perl_safesysmalloc_size - /* Whilst it would be quite possible to move this logic around - (as I did in the SV code), so as to set AvMAX(av) early, - based on calling Perl_safesysmalloc_size() immediately after - allocation, I'm not convinced that it is a great idea here. - In an array we have to loop round setting everything to - NULL, which means writing to memory, potentially lots - of it, whereas for the SV buffer case we don't touch the - "bonus" memory. So there there is no cost in telling the - world about it, whereas here we have to do work before we can - tell the world about it, and that work involves writing to - memory that might never be read. So, I feel, better to keep - the current lazy system of only writing to it if our caller - has a need for more space. NWC */ - newmax = Perl_safesysmalloc_size((void*)*allocp) / - sizeof(const SV *) - 1; - - if (key <= newmax) - goto resized; + /* Whilst it would be quite possible to move this logic around + (as I did in the SV code), so as to set AvMAX(av) early, + based on calling Perl_safesysmalloc_size() immediately after + allocation, I'm not convinced that it is a great idea here. + In an array we have to loop round setting everything to + NULL, which means writing to memory, potentially lots + of it, whereas for the SV buffer case we don't touch the + "bonus" memory. So there there is no cost in telling the + world about it, whereas here we have to do work before we can + tell the world about it, and that work involves writing to + memory that might never be read. So, I feel, better to keep + the current lazy system of only writing to it if our caller + has a need for more space. NWC */ + newmax = Perl_safesysmalloc_size((void*)*allocp) / + sizeof(const SV *) - 1; + + if (key <= newmax) + goto resized; #endif - /* overflow-safe version of newmax = key + *maxp/5 */ - newmax = *maxp / 5; - newmax = (key > SSize_t_MAX - newmax) - ? SSize_t_MAX : key + newmax; - resize: - { - /* it should really be newmax+1 here, but if newmax - * happens to equal SSize_t_MAX, then newmax+1 is - * undefined. This means technically we croak one - * index lower than we should in theory; in practice - * its unlikely the system has SSize_t_MAX/sizeof(SV*) - * bytes to spare! */ - MEM_WRAP_CHECK_s(newmax, SV*, "Out of memory during array extend"); - } + /* overflow-safe version of newmax = key + *maxp/5 */ + newmax = *maxp / 5; + newmax = (key > SSize_t_MAX - newmax) + ? SSize_t_MAX : key + newmax; + resize: + { + /* it should really be newmax+1 here, but if newmax + * happens to equal SSize_t_MAX, then newmax+1 is + * undefined. This means technically we croak one + * index lower than we should in theory; in practice + * its unlikely the system has SSize_t_MAX/sizeof(SV*) + * bytes to spare! */ + MEM_WRAP_CHECK_s(newmax, SV*, "Out of memory during array extend"); + } #ifdef STRESS_REALLOC - { - SV ** const old_alloc = *allocp; - Newx(*allocp, newmax+1, SV*); - Copy(old_alloc, *allocp, *maxp + 1, SV*); - Safefree(old_alloc); - } + { + SV ** const old_alloc = *allocp; + Newx(*allocp, newmax+1, SV*); + Copy(old_alloc, *allocp, *maxp + 1, SV*); + Safefree(old_alloc); + } #else - Renew(*allocp,newmax+1, SV*); + Renew(*allocp,newmax+1, SV*); #endif #ifdef Perl_safesysmalloc_size - resized: + resized: #endif - ary = *allocp + *maxp + 1; - tmp = newmax - *maxp; - if (av == PL_curstack) { /* Oops, grew stack (via av_store()?) */ - PL_stack_sp = *allocp + (PL_stack_sp - PL_stack_base); - PL_stack_base = *allocp; - PL_stack_max = PL_stack_base + newmax; - } - } - else { - newmax = key < 3 ? 3 : key; - { - /* see comment above about newmax+1*/ - MEM_WRAP_CHECK_s(newmax, SV*, "Out of memory during array extend"); - } - Newx(*allocp, newmax+1, SV*); - ary = *allocp + 1; - tmp = newmax; - *allocp[0] = NULL; /* For the stacks */ - } - if (av && AvREAL(av)) { - while (tmp) - ary[--tmp] = NULL; - } - - *arrayp = *allocp; - *maxp = newmax; - } + to_null += newmax - *maxp; + *maxp = newmax; + + /* See GH#18014 for discussion of when this might be needed: */ + if (av == PL_curstack) { /* Oops, grew stack (via av_store()?) */ + PL_stack_sp = *allocp + (PL_stack_sp - PL_stack_base); + PL_stack_base = *allocp; + PL_stack_max = PL_stack_base + newmax; + } + } else { /* there is no SV* array yet */ + *maxp = key < 3 ? 3 : key; + { + /* see comment above about newmax+1*/ + MEM_WRAP_CHECK_s(*maxp, SV*, + "Out of memory during array extend"); + } + /* Newxz isn't used below because testing showed it to be slower + * than Newx+Zero (also slower than Newx + the previous while + * loop) for small arrays, which are very common in perl. */ + Newx(*allocp, *maxp+1, SV*); + /* Stacks require only the first element to be &PL_sv_undef + * (set elsewhere). However, since non-stack AVs are likely + * to dominate in modern production applications, stacks + * don't get any special treatment here. + * See https://github.com/Perl/perl5/pull/18690 for more detail */ + ary_offset = 0; + to_null = *maxp+1; + goto zero; + } + + if (av && AvREAL(av)) { + zero: + Zero(*allocp + ary_offset,to_null,SV*); + } + + *arrayp = *allocp; } } @@ -209,9 +210,9 @@ Perl_av_extend_guts(pTHX_ AV *av, SSize_t key, SSize_t *maxp, SV ***allocp, =for apidoc av_fetch Returns the SV at the specified index in the array. The C is the -index. If lval is true, you are guaranteed to get a real SV back (in case +index. If C is true, you are guaranteed to get a real SV back (in case it wasn't real before), which you can then modify. Check that the return -value is non-null before dereferencing it to a C. +value is non-NULL before dereferencing it to a C. See L for more information on how to use this function on tied arrays. @@ -226,23 +227,23 @@ S_adjust_index(pTHX_ AV *av, const MAGIC *mg, SSize_t *keyp) { bool adjust_index = 1; if (mg) { - /* Handle negative array indices 20020222 MJD */ - SV * const ref = SvTIED_obj(MUTABLE_SV(av), mg); - SvGETMAGIC(ref); - if (SvROK(ref) && SvOBJECT(SvRV(ref))) { - SV * const * const negative_indices_glob = - hv_fetchs(SvSTASH(SvRV(ref)), NEGATIVE_INDICES_VAR, 0); - - if (negative_indices_glob && isGV(*negative_indices_glob) - && SvTRUE(GvSV(*negative_indices_glob))) - adjust_index = 0; - } + /* Handle negative array indices 20020222 MJD */ + SV * const ref = SvTIED_obj(MUTABLE_SV(av), mg); + SvGETMAGIC(ref); + if (SvROK(ref) && SvOBJECT(SvRV(ref))) { + SV * const * const negative_indices_glob = + hv_fetchs(SvSTASH(SvRV(ref)), NEGATIVE_INDICES_VAR, 0); + + if (negative_indices_glob && isGV(*negative_indices_glob) + && SvTRUE(GvSV(*negative_indices_glob))) + adjust_index = 0; + } } if (adjust_index) { - *keyp += AvFILL(av) + 1; - if (*keyp < 0) - return FALSE; + *keyp += AvFILL(av) + 1; + if (*keyp < 0) + return FALSE; } return TRUE; } @@ -258,22 +259,21 @@ Perl_av_fetch(pTHX_ AV *av, SSize_t key, I32 lval) if (UNLIKELY(SvRMAGICAL(av))) { const MAGIC * const tied_magic - = mg_find((const SV *)av, PERL_MAGIC_tied); + = mg_find((const SV *)av, PERL_MAGIC_tied); if (tied_magic || mg_find((const SV *)av, PERL_MAGIC_regdata)) { - SV *sv; - if (key < 0) { - if (!S_adjust_index(aTHX_ av, tied_magic, &key)) - return NULL; - } - - sv = sv_newmortal(); - sv_upgrade(sv, SVt_PVLV); - mg_copy(MUTABLE_SV(av), sv, 0, key); - if (!tied_magic) /* for regdata, force leavesub to make copies */ - SvTEMP_off(sv); - LvTYPE(sv) = 't'; - LvTARG(sv) = sv; /* fake (SV**) */ - return &(LvTARG(sv)); + SV *sv; + if (key < 0) { + if (!S_adjust_index(aTHX_ av, tied_magic, &key)) + return NULL; + } + + sv = newSV_type_mortal(SVt_PVLV); + mg_copy(MUTABLE_SV(av), sv, 0, key); + if (!tied_magic) /* for regdata, force leavesub to make copies */ + SvTEMP_off(sv); + LvTYPE(sv) = 't'; + LvTARG(sv) = sv; /* fake (SV**) */ + return &(LvTARG(sv)); } } @@ -284,14 +284,14 @@ Perl_av_fetch(pTHX_ AV *av, SSize_t key, I32 lval) /* the cast from SSize_t to Size_t allows both (key < 0) and (key >= size) * to be tested as a single condition */ if ((Size_t)key >= (Size_t)size) { - if (UNLIKELY(neg)) - return NULL; + if (UNLIKELY(neg)) + return NULL; goto emptyness; } if (!AvARRAY(av)[key]) { emptyness: - return lval ? av_store(av,key,newSV(0)) : NULL; + return lval ? av_store(av,key,newSV_type(SVt_NULL)) : NULL; } return &AvARRAY(av)[key]; @@ -335,69 +335,111 @@ Perl_av_store(pTHX_ AV *av, SSize_t key, SV *val) const MAGIC * const tied_magic = mg_find((const SV *)av, PERL_MAGIC_tied); if (tied_magic) { if (key < 0) { - if (!S_adjust_index(aTHX_ av, tied_magic, &key)) + if (!S_adjust_index(aTHX_ av, tied_magic, &key)) return 0; } - if (val) { - mg_copy(MUTABLE_SV(av), val, 0, key); - } - return NULL; + if (val) { + mg_copy(MUTABLE_SV(av), val, 0, key); + } + return NULL; } } if (key < 0) { - key += AvFILL(av) + 1; - if (key < 0) - return NULL; + key += AvFILL(av) + 1; + if (key < 0) + return NULL; } if (SvREADONLY(av) && key >= AvFILL(av)) - Perl_croak_no_modify(); + Perl_croak_no_modify(); if (!AvREAL(av) && AvREIFY(av)) - av_reify(av); + av_reify(av); if (key > AvMAX(av)) - av_extend(av,key); + av_extend(av,key); ary = AvARRAY(av); if (AvFILLp(av) < key) { - if (!AvREAL(av)) { - if (av == PL_curstack && key > PL_stack_sp - PL_stack_base) - PL_stack_sp = PL_stack_base + key; /* XPUSH in disguise */ - do { - ary[++AvFILLp(av)] = NULL; - } while (AvFILLp(av) < key); - } - AvFILLp(av) = key; + if (!AvREAL(av)) { + if (av == PL_curstack && key > PL_stack_sp - PL_stack_base) + PL_stack_sp = PL_stack_base + key; /* XPUSH in disguise */ + do { + ary[++AvFILLp(av)] = NULL; + } while (AvFILLp(av) < key); + } + AvFILLp(av) = key; } else if (AvREAL(av)) - SvREFCNT_dec(ary[key]); + SvREFCNT_dec(ary[key]); ary[key] = val; if (SvSMAGICAL(av)) { - const MAGIC *mg = SvMAGIC(av); - bool set = TRUE; - for (; mg; mg = mg->mg_moremagic) { - if (!isUPPER(mg->mg_type)) continue; - if (val) { - sv_magic(val, MUTABLE_SV(av), toLOWER(mg->mg_type), 0, key); - } - if (PL_delaymagic && mg->mg_type == PERL_MAGIC_isa) { - PL_delaymagic |= DM_ARRAY_ISA; - set = FALSE; - } - } - if (set) - mg_set(MUTABLE_SV(av)); + const MAGIC *mg = SvMAGIC(av); + bool set = TRUE; + for (; mg; mg = mg->mg_moremagic) { + if (!isUPPER(mg->mg_type)) continue; + if (val) { + sv_magic(val, MUTABLE_SV(av), toLOWER(mg->mg_type), 0, key); + } + if (PL_delaymagic && mg->mg_type == PERL_MAGIC_isa) { + PL_delaymagic |= DM_ARRAY_ISA; + set = FALSE; + } + } + if (set) + mg_set(MUTABLE_SV(av)); } return &ary[key]; } +/* +=for apidoc av_new_alloc + +This implements L> +and L>, which are the public API for this +functionality. + +Creates a new AV and allocates its SV* array. + +This is similar to, but more efficient than doing: + + AV *av = newAV(); + av_extend(av, key); + +The size parameter is used to pre-allocate a SV* array large enough to +hold at least elements C<0..(size-1)>. C must be at least 1. + +The C parameter controls whether or not the array is NULL +initialized. + +=cut +*/ + +AV * +Perl_av_new_alloc(pTHX_ SSize_t size, bool zeroflag) +{ + AV * const av = newAV(); + SV** ary; + PERL_ARGS_ASSERT_AV_NEW_ALLOC; + assert(size > 0); + + Newx(ary, size, SV*); /* Newx performs the memwrap check */ + AvALLOC(av) = ary; + AvARRAY(av) = ary; + AvMAX(av) = size - 1; + + if (zeroflag) + Zero(ary, size, SV*); + + return av; +} + /* =for apidoc av_make -Creates a new AV and populates it with a list of SVs. The SVs are copied -into the array, so they may be freed after the call to C. The new AV -will have a reference count of 1. +Creates a new AV and populates it with a list (C<**strp>, length C) of +SVs. A copy is made of each SV, so their refcounts are not changed. The new +AV will have a reference count of 1. Perl equivalent: C @@ -407,7 +449,7 @@ Perl equivalent: C AV * Perl_av_make(pTHX_ SSize_t size, SV **strp) { - AV * const av = MUTABLE_AV(newSV_type(SVt_PVAV)); + AV * const av = newAV(); /* sv_upgrade does AvREAL_only() */ PERL_ARGS_ASSERT_AV_MAKE; assert(SvTYPE(av) == SVt_PVAV); @@ -417,30 +459,29 @@ Perl_av_make(pTHX_ SSize_t size, SV **strp) SSize_t i; SSize_t orig_ix; - Newx(ary,size,SV*); - AvALLOC(av) = ary; - AvARRAY(av) = ary; - AvMAX(av) = size - 1; - AvFILLp(av) = -1; + Newx(ary,size,SV*); + AvALLOC(av) = ary; + AvARRAY(av) = ary; + AvMAX(av) = size - 1; /* avoid av being leaked if croak when calling magic below */ EXTEND_MORTAL(1); PL_tmps_stack[++PL_tmps_ix] = (SV*)av; orig_ix = PL_tmps_ix; - for (i = 0; i < size; i++) { - assert (*strp); + for (i = 0; i < size; i++) { + assert (*strp); - /* Don't let sv_setsv swipe, since our source array might - have multiple references to the same temp scalar (e.g. - from a list slice) */ + /* Don't let sv_setsv swipe, since our source array might + have multiple references to the same temp scalar (e.g. + from a list slice) */ - SvGETMAGIC(*strp); /* before newSV, in case it dies */ - AvFILLp(av)++; - ary[i] = newSV(0); - sv_setsv_flags(ary[i], *strp, - SV_DO_COW_SVSETSV|SV_NOSTEAL); - strp++; - } + SvGETMAGIC(*strp); /* before newSV, in case it dies */ + AvFILLp(av)++; + ary[i] = newSV_type(SVt_NULL); + sv_setsv_flags(ary[i], *strp, + SV_DO_COW_SVSETSV|SV_NOSTEAL); + strp++; + } /* disarm av's leak guard */ if (LIKELY(PL_tmps_ix == orig_ix)) PL_tmps_ix--; @@ -453,7 +494,7 @@ Perl_av_make(pTHX_ SSize_t size, SV **strp) /* =for apidoc av_clear -Frees the all the elements of an array, leaving it empty. +Frees all the elements of an array, leaving it empty. The XS equivalent of C<@array = ()>. See also L. Note that it is possible that the actions of a destructor called directly @@ -478,46 +519,46 @@ Perl_av_clear(pTHX_ AV *av) #ifdef DEBUGGING if (SvREFCNT(av) == 0) { - Perl_ck_warner_d(aTHX_ packWARN(WARN_DEBUGGING), "Attempt to clear deleted array"); + Perl_ck_warner_d(aTHX_ packWARN(WARN_DEBUGGING), "Attempt to clear deleted array"); } #endif if (SvREADONLY(av)) - Perl_croak_no_modify(); + Perl_croak_no_modify(); /* Give any tie a chance to cleanup first */ if (SvRMAGICAL(av)) { - const MAGIC* const mg = SvMAGIC(av); - if (PL_delaymagic && mg && mg->mg_type == PERL_MAGIC_isa) - PL_delaymagic |= DM_ARRAY_ISA; + const MAGIC* const mg = SvMAGIC(av); + if (PL_delaymagic && mg && mg->mg_type == PERL_MAGIC_isa) + PL_delaymagic |= DM_ARRAY_ISA; else - mg_clear(MUTABLE_SV(av)); + mg_clear(MUTABLE_SV(av)); } if (AvMAX(av) < 0) - return; + return; if ((real = cBOOL(AvREAL(av)))) { - SV** const ary = AvARRAY(av); - SSize_t index = AvFILLp(av) + 1; + SV** const ary = AvARRAY(av); + SSize_t index = AvFILLp(av) + 1; /* avoid av being freed when calling destructors below */ EXTEND_MORTAL(1); PL_tmps_stack[++PL_tmps_ix] = SvREFCNT_inc_simple_NN(av); orig_ix = PL_tmps_ix; - while (index) { - SV * const sv = ary[--index]; - /* undef the slot before freeing the value, because a - * destructor might try to modify this array */ - ary[index] = NULL; - SvREFCNT_dec(sv); - } + while (index) { + SV * const sv = ary[--index]; + /* undef the slot before freeing the value, because a + * destructor might try to modify this array */ + ary[index] = NULL; + SvREFCNT_dec(sv); + } } extra = AvARRAY(av) - AvALLOC(av); if (extra) { - AvMAX(av) += extra; - AvARRAY(av) = AvALLOC(av); + AvMAX(av) += extra; + AvARRAY(av) = AvALLOC(av); } AvFILLp(av) = -1; if (real) { @@ -555,19 +596,19 @@ Perl_av_undef(pTHX_ AV *av) /* Give any tie a chance to cleanup first */ if (SvTIED_mg((const SV *)av, PERL_MAGIC_tied)) - av_fill(av, -1); + av_fill(av, -1); real = cBOOL(AvREAL(av)); if (real) { - SSize_t key = AvFILLp(av) + 1; + SSize_t key = AvFILLp(av) + 1; /* avoid av being freed when calling destructors below */ EXTEND_MORTAL(1); PL_tmps_stack[++PL_tmps_ix] = SvREFCNT_inc_simple_NN(av); orig_ix = PL_tmps_ix; - while (key) - SvREFCNT_dec(AvARRAY(av)[--key]); + while (key) + SvREFCNT_dec(AvARRAY(av)[--key]); } Safefree(AvALLOC(av)); @@ -602,7 +643,7 @@ Perl_av_create_and_push(pTHX_ AV **const avp, SV *const val) PERL_ARGS_ASSERT_AV_CREATE_AND_PUSH; if (!*avp) - *avp = newAV(); + *avp = newAV(); av_push(*avp, val); } @@ -626,12 +667,12 @@ Perl_av_push(pTHX_ AV *av, SV *val) assert(SvTYPE(av) == SVt_PVAV); if (SvREADONLY(av)) - Perl_croak_no_modify(); + Perl_croak_no_modify(); if ((mg = SvTIED_mg((const SV *)av, PERL_MAGIC_tied))) { - Perl_magic_methcall(aTHX_ MUTABLE_SV(av), mg, SV_CONST(PUSH), G_DISCARD, 1, - val); - return; + Perl_magic_methcall(aTHX_ MUTABLE_SV(av), mg, SV_CONST(PUSH), G_DISCARD, 1, + val); + return; } av_store(av,AvFILLp(av)+1,val); } @@ -658,19 +699,19 @@ Perl_av_pop(pTHX_ AV *av) assert(SvTYPE(av) == SVt_PVAV); if (SvREADONLY(av)) - Perl_croak_no_modify(); + Perl_croak_no_modify(); if ((mg = SvTIED_mg((const SV *)av, PERL_MAGIC_tied))) { - retval = Perl_magic_methcall(aTHX_ MUTABLE_SV(av), mg, SV_CONST(POP), 0, 0); - if (retval) - retval = newSVsv(retval); - return retval; + retval = Perl_magic_methcall(aTHX_ MUTABLE_SV(av), mg, SV_CONST(POP), 0, 0); + if (retval) + retval = newSVsv(retval); + return retval; } if (AvFILL(av) < 0) - return &PL_sv_undef; + return &PL_sv_undef; retval = AvARRAY(av)[AvFILLp(av)]; AvARRAY(av)[AvFILLp(av)--] = NULL; if (SvSMAGICAL(av)) - mg_set(MUTABLE_SV(av)); + mg_set(MUTABLE_SV(av)); return retval ? retval : &PL_sv_undef; } @@ -691,7 +732,7 @@ Perl_av_create_and_unshift_one(pTHX_ AV **const avp, SV *const val) PERL_ARGS_ASSERT_AV_CREATE_AND_UNSHIFT_ONE; if (!*avp) - *avp = newAV(); + *avp = newAV(); av_unshift(*avp, 1); return av_store(*avp, 0, val); } @@ -717,45 +758,45 @@ Perl_av_unshift(pTHX_ AV *av, SSize_t num) assert(SvTYPE(av) == SVt_PVAV); if (SvREADONLY(av)) - Perl_croak_no_modify(); + Perl_croak_no_modify(); if ((mg = SvTIED_mg((const SV *)av, PERL_MAGIC_tied))) { - Perl_magic_methcall(aTHX_ MUTABLE_SV(av), mg, SV_CONST(UNSHIFT), - G_DISCARD | G_UNDEF_FILL, num); - return; + Perl_magic_methcall(aTHX_ MUTABLE_SV(av), mg, SV_CONST(UNSHIFT), + G_DISCARD | G_UNDEF_FILL, num); + return; } if (num <= 0) return; if (!AvREAL(av) && AvREIFY(av)) - av_reify(av); + av_reify(av); i = AvARRAY(av) - AvALLOC(av); if (i) { - if (i > num) - i = num; - num -= i; + if (i > num) + i = num; + num -= i; - AvMAX(av) += i; - AvFILLp(av) += i; - AvARRAY(av) = AvARRAY(av) - i; + AvMAX(av) += i; + AvFILLp(av) += i; + AvARRAY(av) = AvARRAY(av) - i; } if (num) { - SV **ary; - const SSize_t i = AvFILLp(av); - /* Create extra elements */ - const SSize_t slide = i > 0 ? i : 0; - num += slide; - av_extend(av, i + num); - AvFILLp(av) += num; - ary = AvARRAY(av); - Move(ary, ary + num, i + 1, SV*); - do { - ary[--num] = NULL; - } while (num); - /* Make extra elements into a buffer */ - AvMAX(av) -= slide; - AvFILLp(av) -= slide; - AvARRAY(av) = AvARRAY(av) + slide; + SV **ary; + const SSize_t i = AvFILLp(av); + /* Create extra elements */ + const SSize_t slide = i > 0 ? i : 0; + num += slide; + av_extend(av, i + num); + AvFILLp(av) += num; + ary = AvARRAY(av); + Move(ary, ary + num, i + 1, SV*); + do { + ary[--num] = NULL; + } while (num); + /* Make extra elements into a buffer */ + AvMAX(av) -= slide; + AvFILLp(av) -= slide; + AvARRAY(av) = AvARRAY(av) + slide; } } @@ -781,42 +822,48 @@ Perl_av_shift(pTHX_ AV *av) assert(SvTYPE(av) == SVt_PVAV); if (SvREADONLY(av)) - Perl_croak_no_modify(); + Perl_croak_no_modify(); if ((mg = SvTIED_mg((const SV *)av, PERL_MAGIC_tied))) { - retval = Perl_magic_methcall(aTHX_ MUTABLE_SV(av), mg, SV_CONST(SHIFT), 0, 0); - if (retval) - retval = newSVsv(retval); - return retval; + retval = Perl_magic_methcall(aTHX_ MUTABLE_SV(av), mg, SV_CONST(SHIFT), 0, 0); + if (retval) + retval = newSVsv(retval); + return retval; } if (AvFILL(av) < 0) return &PL_sv_undef; retval = *AvARRAY(av); if (AvREAL(av)) - *AvARRAY(av) = NULL; + *AvARRAY(av) = NULL; AvARRAY(av) = AvARRAY(av) + 1; AvMAX(av)--; AvFILLp(av)--; if (SvSMAGICAL(av)) - mg_set(MUTABLE_SV(av)); + mg_set(MUTABLE_SV(av)); return retval ? retval : &PL_sv_undef; } /* -=for apidoc av_top_index +=for apidoc av_tindex +=for apidoc_item av_top_index -Returns the highest index in the array. The number of elements in the -array is S>. Returns -1 if the array is empty. +These behave identically. +If the array C is empty, these return -1; otherwise they return the maximum +value of the indices of all the array elements which are currently defined in +C. -The Perl equivalent for this is C<$#myarray>. +They process 'get' magic. -(A slightly shorter form is C.) +The Perl equivalent for these is C<$#av>. + +Use C> to get the number of elements in an array. =for apidoc av_len Same as L. Note that, unlike what the name implies, it returns -the highest index in the array, so to get the size of the array you need to use -S>. This is unlike L, which returns what you would -expect. +the maximum index in the array. This is unlike L, which returns what +you would expect. + +B>>. =cut */ @@ -852,35 +899,35 @@ Perl_av_fill(pTHX_ AV *av, SSize_t fill) assert(SvTYPE(av) == SVt_PVAV); if (fill < 0) - fill = -1; + fill = -1; if ((mg = SvTIED_mg((const SV *)av, PERL_MAGIC_tied))) { - SV *arg1 = sv_newmortal(); - sv_setiv(arg1, (IV)(fill + 1)); - Perl_magic_methcall(aTHX_ MUTABLE_SV(av), mg, SV_CONST(STORESIZE), G_DISCARD, - 1, arg1); - return; + SV *arg1 = sv_newmortal(); + sv_setiv(arg1, (IV)(fill + 1)); + Perl_magic_methcall(aTHX_ MUTABLE_SV(av), mg, SV_CONST(STORESIZE), G_DISCARD, + 1, arg1); + return; } if (fill <= AvMAX(av)) { - SSize_t key = AvFILLp(av); - SV** const ary = AvARRAY(av); - - if (AvREAL(av)) { - while (key > fill) { - SvREFCNT_dec(ary[key]); - ary[key--] = NULL; - } - } - else { - while (key < fill) - ary[++key] = NULL; - } - - AvFILLp(av) = fill; - if (SvSMAGICAL(av)) - mg_set(MUTABLE_SV(av)); + SSize_t key = AvFILLp(av); + SV** const ary = AvARRAY(av); + + if (AvREAL(av)) { + while (key > fill) { + SvREFCNT_dec(ary[key]); + ary[key--] = NULL; + } + } + else { + while (key < fill) + ary[++key] = NULL; + } + + AvFILLp(av) = fill; + if (SvSMAGICAL(av)) + mg_set(MUTABLE_SV(av)); } else - (void)av_store(av,fill,NULL); + (void)av_store(av,fill,NULL); } /* @@ -905,16 +952,16 @@ Perl_av_delete(pTHX_ AV *av, SSize_t key, I32 flags) assert(SvTYPE(av) == SVt_PVAV); if (SvREADONLY(av)) - Perl_croak_no_modify(); + Perl_croak_no_modify(); if (SvRMAGICAL(av)) { const MAGIC * const tied_magic - = mg_find((const SV *)av, PERL_MAGIC_tied); + = mg_find((const SV *)av, PERL_MAGIC_tied); if ((tied_magic || mg_find((const SV *)av, PERL_MAGIC_regdata))) { SV **svp; if (key < 0) { - if (!S_adjust_index(aTHX_ av, tied_magic, &key)) - return NULL; + if (!S_adjust_index(aTHX_ av, tied_magic, &key)) + return NULL; } svp = av_fetch(av, key, TRUE); if (svp) { @@ -924,39 +971,39 @@ Perl_av_delete(pTHX_ AV *av, SSize_t key, I32 flags) sv_unmagic(sv, PERL_MAGIC_tiedelem); /* No longer an element */ return sv; } - return NULL; + return NULL; } } } if (key < 0) { - key += AvFILL(av) + 1; - if (key < 0) - return NULL; + key += AvFILL(av) + 1; + if (key < 0) + return NULL; } if (key > AvFILLp(av)) - return NULL; + return NULL; else { - if (!AvREAL(av) && AvREIFY(av)) - av_reify(av); - sv = AvARRAY(av)[key]; - AvARRAY(av)[key] = NULL; - if (key == AvFILLp(av)) { - do { - AvFILLp(av)--; - } while (--key >= 0 && !AvARRAY(av)[key]); - } - if (SvSMAGICAL(av)) - mg_set(MUTABLE_SV(av)); + if (!AvREAL(av) && AvREIFY(av)) + av_reify(av); + sv = AvARRAY(av)[key]; + AvARRAY(av)[key] = NULL; + if (key == AvFILLp(av)) { + do { + AvFILLp(av)--; + } while (--key >= 0 && !AvARRAY(av)[key]); + } + if (SvSMAGICAL(av)) + mg_set(MUTABLE_SV(av)); } if(sv != NULL) { - if (flags & G_DISCARD) { - SvREFCNT_dec_NN(sv); - return NULL; - } - else if (AvREAL(av)) - sv_2mortal(sv); + if (flags & G_DISCARD) { + SvREFCNT_dec_NN(sv); + return NULL; + } + else if (AvREAL(av)) + sv_2mortal(sv); } return sv; } @@ -981,14 +1028,14 @@ Perl_av_exists(pTHX_ AV *av, SSize_t key) if (SvRMAGICAL(av)) { const MAGIC * const tied_magic - = mg_find((const SV *)av, PERL_MAGIC_tied); + = mg_find((const SV *)av, PERL_MAGIC_tied); const MAGIC * const regdata_magic = mg_find((const SV *)av, PERL_MAGIC_regdata); if (tied_magic || regdata_magic) { MAGIC *mg; /* Handle negative array indices 20020222 MJD */ if (key < 0) { - if (!S_adjust_index(aTHX_ av, tied_magic, &key)) + if (!S_adjust_index(aTHX_ av, tied_magic, &key)) return FALSE; } @@ -998,36 +1045,36 @@ Perl_av_exists(pTHX_ AV *av, SSize_t key) else return FALSE; } - { - SV * const sv = sv_newmortal(); - mg_copy(MUTABLE_SV(av), sv, 0, key); - mg = mg_find(sv, PERL_MAGIC_tiedelem); - if (mg) { - magic_existspack(sv, mg); - { - I32 retbool = SvTRUE_nomg_NN(sv); - return cBOOL(retbool); - } - } - } + { + SV * const sv = sv_newmortal(); + mg_copy(MUTABLE_SV(av), sv, 0, key); + mg = mg_find(sv, PERL_MAGIC_tiedelem); + if (mg) { + magic_existspack(sv, mg); + { + I32 retbool = SvTRUE_nomg_NN(sv); + return cBOOL(retbool); + } + } + } } } if (key < 0) { - key += AvFILL(av) + 1; - if (key < 0) - return FALSE; + key += AvFILL(av) + 1; + if (key < 0) + return FALSE; } if (key <= AvFILLp(av) && AvARRAY(av)[key]) { - if (SvSMAGICAL(AvARRAY(av)[key]) - && mg_find(AvARRAY(av)[key], PERL_MAGIC_nonelem)) - return FALSE; - return TRUE; + if (SvSMAGICAL(AvARRAY(av)[key]) + && mg_find(AvARRAY(av)[key], PERL_MAGIC_nonelem)) + return FALSE; + return TRUE; } else - return FALSE; + return FALSE; } static MAGIC * @@ -1040,11 +1087,11 @@ S_get_aux_mg(pTHX_ AV *av) { mg = mg_find((const SV *)av, PERL_MAGIC_arylen_p); if (!mg) { - mg = sv_magicext(MUTABLE_SV(av), 0, PERL_MAGIC_arylen_p, - &PL_vtbl_arylen_p, 0, 0); - assert(mg); - /* sv_magicext won't set this for us because we pass in a NULL obj */ - mg->mg_flags |= MGf_REFCOUNTED; + mg = sv_magicext(MUTABLE_SV(av), 0, PERL_MAGIC_arylen_p, + &PL_vtbl_arylen_p, 0, 0); + assert(mg); + /* sv_magicext won't set this for us because we pass in a NULL obj */ + mg->mg_flags |= MGf_REFCOUNTED; } return mg; } @@ -1067,24 +1114,24 @@ Perl_av_iter_p(pTHX_ AV *av) { assert(SvTYPE(av) == SVt_PVAV); if (sizeof(IV) == sizeof(SSize_t)) { - return (IV *)&(mg->mg_len); + return (IV *)&(mg->mg_len); } else { - if (!mg->mg_ptr) { - IV *temp; - mg->mg_len = IVSIZE; - Newxz(temp, 1, IV); - mg->mg_ptr = (char *) temp; - } - return (IV *)mg->mg_ptr; + if (!mg->mg_ptr) { + IV *temp; + mg->mg_len = IVSIZE; + Newxz(temp, 1, IV); + mg->mg_ptr = (char *) temp; + } + return (IV *)mg->mg_ptr; } } SV * Perl_av_nonelem(pTHX_ AV *av, SSize_t ix) { - SV * const sv = newSV(0); + SV * const sv = newSV_type(SVt_NULL); PERL_ARGS_ASSERT_AV_NONELEM; if (!av_store(av,ix,sv)) - return sv_2mortal(sv); /* has tie magic */ + return sv_2mortal(sv); /* has tie magic */ sv_magic(sv, NULL, PERL_MAGIC_nonelem, NULL, 0); return sv; } diff --git a/gnu/usr.bin/perl/av.h b/gnu/usr.bin/perl/av.h index 5e39c42ea12..6e0b24d7b3a 100644 --- a/gnu/usr.bin/perl/av.h +++ b/gnu/usr.bin/perl/av.h @@ -18,16 +18,27 @@ struct xpvav { /* SV* xav_arylen; */ -/* SVpav_REAL is set for all AVs whose xav_array contents are refcounted. - * Some things like "@_" and the scratchpad list do not set this, to - * indicate that they are cheating (for efficiency) by not refcounting - * the AV's contents. - * +/* SVpav_REAL is set for all AVs whose xav_array contents are refcounted + * and initialized such that any element can be retrieved as a SV*. + * Such AVs may be referred to as "real" AVs. Examples include regular + * perl arrays, tiedarrays (since v5.16), and padlist AVs. + * + * Some things do not set SVpav_REAL, to indicate that they are cheating + * (for efficiency) by not refcounting the AV's contents or ensuring that + * all elements are safe for arbitrary access. This type of AV may be + * referred to as "fake" AVs. Examples include "@_" (unless tied), the + * scratchpad list, and the backrefs list on an object or stash. + * * SVpav_REIFY is only meaningful on such "fake" AVs (i.e. where SVpav_REAL * is not set). It indicates that the fake AV is capable of becoming * real if the array needs to be modified in some way. Functions that * modify fake AVs check both flags to call av_reify() as appropriate. * + * av_reify() transforms a fake AV into a real one through two actions. + * Allocated but unpopulated elements are initialized to make them safe for + * arbitrary retrieval and the reference counts of populated elements are + * incremented. + * * Note that the Perl stack has neither flag set. (Thus, * items that go on the stack are never refcounted.) * @@ -37,22 +48,25 @@ struct xpvav { */ /* -=head1 Handy Values - =for apidoc ADmnU||Nullav Null AV pointer. (deprecated - use C<(AV *)NULL> instead) -=head1 Array Manipulation Functions +=for apidoc Am|SSize_t|AvFILL|AV* av +Same as C> or C>. + +=for apidoc Cm|SSize_t|AvFILLp|AV* av -=for apidoc Am|int|AvFILL|AV* av -Same as C or C. +If the array C is empty, this returns -1; otherwise it returns the maximum +value of the indices of all the array elements which are currently defined in +C. It does not handle magic, hence the C

private indication in its name. -=for apidoc av_tindex -Same as C. +=for apidoc Am|SV**|AvARRAY|AV* av +Returns a pointer to the AV's internal SV* array. -=for apidoc m|int|AvFILLp|AV* av +This is useful for doing pointer arithmetic on the array. +If all you need is to look up an array element, then prefer C. =cut */ @@ -80,8 +94,9 @@ Same as C. #define AvREALISH(av) (SvFLAGS(av) & (SVpav_REAL|SVpav_REIFY)) #define AvFILL(av) ((SvRMAGICAL((const SV *) (av))) \ - ? mg_size(MUTABLE_SV(av)) : AvFILLp(av)) -#define av_tindex(av) av_top_index(av) + ? mg_size(MUTABLE_SV(av)) : AvFILLp(av)) +#define av_top_index(av) AvFILL(av) +#define av_tindex(av) av_top_index(av) /* Note that it doesn't make sense to do this: * SvGETMAGIC(av); IV x = av_tindex_nomg(av); @@ -93,16 +108,110 @@ Same as C. #define NEGATIVE_INDICES_VAR "NEGATIVE_INDICES" /* + +Note that there are both real and fake AVs; see the beginning of this file and +'av.c' + =for apidoc newAV +=for apidoc_item newAV_alloc_x +=for apidoc_item newAV_alloc_xz + +These all create a new AV, setting the reference count to 1. If you also know +the initial elements of the array with, see L>. + +As background, an array consists of three things: + +=over + +=item 1. + +A data structure containing information about the array as a whole, such as its +size and reference count. + +=item 2. + +A C language array of pointers to the individual elements. These are treated +as pointers to SVs, so all must be castable to SV*. + +=item 3. + +The individual elements themselves. These could be, for instance, SVs and/or +AVs and/or HVs, etc. + +=back + +An empty array need only have the first data structure, and all these functions +create that. They differ in what else they do, as follows: + +=over + +=item C form + +=for comment +'form' above and below is because otherwise have two =items with the same name, +can't link to them. -Creates a new AV. The reference count is set to 1. +This does nothing beyond creating the whole-array data structure. +The Perl equivalent is approximately S> -Perl equivalent: C. +This is useful when the minimum size of the array could be zero (perhaps there +are likely code paths that will entirely skip using it). + +If the array does get used, the pointers data structure will need to be +allocated at that time. This will end up being done by L>, +either explicitly: + + av_extend(av, len); + +or implicitly when the first element is stored: + + (void)av_store(av, 0, sv); + +Unused array elements are typically initialized by C. + +=item C form + +This effectively does a C followed by also allocating (uninitialized) +space for the pointers array. This is used when you know ahead of time the +likely minimum size of the array. It is more efficient to do this than doing a +plain C followed by an C. + +Of course the array can be extended later should it become necessary. + +C must be at least 1. + +=item C form + +This is C, but initializes each pointer in it to NULL. This +gives added safety to guard against them being read before being set. + +C must be at least 1. + +=back + +The following examples all result in an array that can fit four elements +(indexes 0 .. 3): + + AV *av = newAV(); + av_extend(av, 3); + + AV *av = newAV_alloc_x(4); + + AV *av = newAV_alloc_xz(4); + +In contrast, the following examples allocate an array that is only guaranteed +to fit one element without extending: + + AV *av = newAV_alloc_x(1); + AV *av = newAV_alloc_xz(1); =cut + */ #define newAV() MUTABLE_AV(newSV_type(SVt_PVAV)) +#define newAV_alloc_x(size) av_new_alloc(size,0) +#define newAV_alloc_xz(size) av_new_alloc(size,1) /* * ex: set ts=8 sts=4 sw=4 et: diff --git a/gnu/usr.bin/perl/caretx.c b/gnu/usr.bin/perl/caretx.c index fc5ff93c257..3d118770376 100644 --- a/gnu/usr.bin/perl/caretx.c +++ b/gnu/usr.bin/perl/caretx.c @@ -32,10 +32,6 @@ #include "perl.h" #include "XSUB.h" -#ifdef NETWARE -#include "nwutil.h" -#endif - #ifdef USE_KERN_PROC_PATHNAME # include #endif @@ -44,12 +40,6 @@ # include #endif -/* Note: Functions in this file must not have bool parameters. When - PERL_BOOL_AS_CHAR is #defined, mach-o/dyld.h overrides it in this file - by #including stdbool.h, so the function parameters here would conflict - with those in proto.h. -*/ - void Perl_set_caret_X(pTHX) { GV* tmpgv = gv_fetchpvs("\030", GV_ADD|GV_NOTQUAL, SVt_PV); /* $^X */ diff --git a/gnu/usr.bin/perl/cflags.SH b/gnu/usr.bin/perl/cflags.SH index 96bfcd928bc..443f5fcc969 100644 --- a/gnu/usr.bin/perl/cflags.SH +++ b/gnu/usr.bin/perl/cflags.SH @@ -146,8 +146,7 @@ stdflags='' # one individually. # TODO: Ponder whether to migrate this back to Configure so hints files can # tweak it. Also, be paranoid about whether results we've deduced in Configure -# (especially about things like long long, which are not in C89) will still be -# valid if we now add flags like -std=c89. +# will still be valid if we now add flags like -std=c99. pedantic='' case "$gccansipedantic" in @@ -159,34 +158,42 @@ case "$gccversion" in [12].*) ;; # gcc versions 1 (gasp!) and 2 are not good for this. Intel*) ;; # # Is that you, Intel C++? # -# NOTE 1: the -std=c89 without -pedantic is a bit pointless. -# Just -std=c89 means "if there is room for interpretation, -# interpret the C89 way." It does NOT mean "strict C89" on its own. +# These comments are adapted from the originals, which were for -std=c89. +# I believe that my updates close to correct, and better than throwing the +# entire comments away, but please check for discrepencies. +# +# NOTE 1: the -std=c99 without -pedantic is a bit pointless. +# Just -std=c99 means "if there is room for interpretation, +# interpret the C99 way." It does NOT mean "strict C99" on its own. # You need to add the -pedantic for that. To do this with Configure, -# do -Dgccansipedantic (note that the -ansi is included in any case, -# the option is a bit oddly named, for historical reasons.) +# do -Dgccansipedantic (note that this is named from the time when we also +# added the -ansi option. That forces -std=c89, so we no longer use it.) +# *Because* we aren't adding -std=c99 if we don't have to, but will add -W, +# some versions of gcc will accept C99 code but warn about not-C89 features. +# (If we added -std=c99 then the warnings enabled by -W would be consistent) +# Hence we add -Wno-long-long and -Wno-declaration-after-statement to cover +# these cases. # # NOTE 2: -pedantic necessitates adding a couple of flags: # * -PERL_GCC_PEDANTIC so that the perl code can adapt: there's nothing # added by gcc itself to indicate pedanticness. # * -Wno-overlength-strings under -DDEBUGGING because quite many of # the LEAVE_with_name() and assert() calls generate string literals -# longer then the ANSI minimum of 509 bytes. +# longer then the ANSI C99 minimum of 4095 bytes. # # NOTE 3: the relative order of these options matters: # -Wextra before -W -# -std=c89 before -ansi -# -pedantic* before -Werror=d-a-s +# -W before -Wno-long-long -Wno-declaration-after-statement # -*) warns="-std=c89 -ansi $pedantic \ +*) warns="$pedantic \ -Werror=pointer-arith \ + -Werror=vla \ -Wextra -W \ + -Wno-long-long -Wno-declaration-after-statement \ -Wc++-compat -Wwrite-strings" - # declaration after statement is normal in C++ rather than an - # extension and compilers complain if we try to warn about it - case "$d_cplusplus" in - define) ;; - *) warns="$warns -Werror=declaration-after-statement" ;; + case " $ccflags " in + *" -std="*) ;; # Already have -std=... + *) warns="-std=c99 $warns" ;; esac for opt in $warns do @@ -214,17 +221,6 @@ Intel*) ;; # # Is that you, Intel C++? echo "cflags.SH: Adding $opt." stdflags="$stdflags $opt" ;; - -ansi) - # -std=c89 is the modern form of -ansi, so add - # -ansi only if -std=c89 is not there already. - case " $stdflags " in - *-std=c89*) ;; - *) - echo "cflags.SH: Adding $opt." - stdflags="$stdflags $opt" - ;; - esac - ;; -W) # -Wextra is the modern form of -W, so add # -W only if -Wextra is not there already. @@ -236,16 +232,6 @@ Intel*) ;; # # Is that you, Intel C++? ;; esac ;; - -Werror=declaration-after-statement) - # -pedantic* (with -std=c89) covers -Werror=d-a-s. - case "$stdflags$warn" in - *-std=c89*-pedantic*|*-pedantic*-std=c89*) ;; - *) - echo "cflags.SH: Adding $opt." - warn="$warn $opt" - ;; - esac - ;; -Werror=pointer-arith) # -pedantic* covers -Werror=p-a case "$warn" in @@ -292,22 +278,14 @@ case "$gccversion" in *) case "$warn$ccflags" in *-pedantic*) - # If we have -Duse64bitint (or equivalent) in effect and the quadtype - # has become 'long long', gcc -pedantic* becomes unbearable - # (moreso when combined with -Wall) because long long and LL and %lld|%Ld - # become warn-worthy. So let's drop the -pedantic in that case. - # - # Similarly, since 'long long' isn't part of C89, FreeBSD 6.2 headers - # don't declare atoll() under -std=c89, but we need it. In general, - # insisting on -std=c89 is inconsistent with insisting on using - # 'long long'. So drop -std=c89 and -ansi as well if we're using - # 'long long' as our main integral type. + # For -std=c99 -pedantic, only the %Ld format seems to be warn-worthy. + # 'long long' and '%lld' are now kosher. # # usedtrace (DTrace) uses unportable features (dollars in identifiers, # and gcc statement expressions), it is just easier to turn off pedantic. remove='' case "$quadtype:$ivtype:$sPRId64:$usedtrace" in - *"long long"*|*lld*|*Ld*) remove='long long' ;; + **Ld*) remove='Ld' ;; *) case "$usedtrace" in define) remove='usedtrace' ;; esac @@ -315,10 +293,9 @@ case "$gccversion" in esac case "$remove" in '') ;; - *) echo "cflags.SH: Removing -pedantic*, -std=c89, and -ansi because of $remove." - ccflags=`echo $ccflags|sed -e 's/-pedantic-errors/ /' -e 's/-pedantic/ /' -e 's/-std=c89/ /' -e 's/-ansi/ /' -e 's/-DPERL_GCC_PEDANTIC/ /'` - warn=`echo $warn|sed -e 's/-pedantic-errors/ /' -e 's/-pedantic/ /' -e 's/-ansi/ /' -e 's/-DPERL_GCC_PEDANTIC/ /'` - stdflags=`echo $stdflags|sed -e 's/-std=c89/ /'` + *) echo "cflags.SH: Removing -pedantic* -ansi because of $remove." + ccflags=`echo $ccflags|sed -e 's/-pedantic-errors/ /' -e 's/-pedantic/ /'` + warn=`echo $warn|sed -e 's/-pedantic-errors/ /' -e 's/-pedantic/ /'` ;; esac ;; @@ -357,13 +334,7 @@ case "$cc" in # Extra paranoia in case people have bad canned ccflags: # bad in the sense that the flags are accepted by g++, # but then whined about. - # - # -Werror=d-a-s option is valid for g++, by definition, - # but we remove it just for cleanliness and shorter command lines. - for f in -Wdeclaration-after-statement \ - -Werror=declaration-after-statement \ - -Wc++-compat \ - -std=c89 + for f in -Wc++-compat -std=c99 do case "$ccflags$warn" in *"$f"*) @@ -376,8 +347,7 @@ case "$cc" in ;; esac -for f in -Wdeclaration-after-statement -Werror=declaration-after-statement \ - -Wpointer-arith -Werror=pointer-arith +for f in -Wpointer-arith -Werror=pointer-arith do case "$cppflags" in *"$f"*) diff --git a/gnu/usr.bin/perl/charclass_invlists.h b/gnu/usr.bin/perl/charclass_invlists.h index 9a6a9cf789c..2aa27f3b79f 100644 --- a/gnu/usr.bin/perl/charclass_invlists.h +++ b/gnu/usr.bin/perl/charclass_invlists.h @@ -23,7 +23,7 @@ #define NUM_ANYOF_CODE_POINTS (1 << 8) /* The precision to use in "%.*e" formats */ -#define PL_E_FORMAT_PRECISION 2 +#define PL_E_FORMAT_PRECISION 3 #if (defined(PERL_IN_REGCOMP_C) && ! defined(PERL_IN_XSUB_RE)) @@ -54,7 +54,7 @@ static const UV * const InBitmap_invlist = Latin1_invlist; # if 'A' == 65 /* ASCII/Latin1 */ static const UV Case_Folding_invlist[] = { /* for ASCII/Latin1 */ - 1398, /* Number of elements */ + 1414, /* Number of elements */ 148565664, /* Version and data structure type */ 0, /* 0 if the list starts at 0; 1 if it starts at the element beyond 0 */ @@ -1072,7 +1072,7 @@ static const UV Case_Folding_invlist[] = { /* for ASCII/Latin1 */ 0x24B6, 0x24D0, 0x2C00, - 0x2C2F, + 0x2C30, 0x2C60, 0x2C61, 0x2C62, @@ -1416,6 +1416,8 @@ static const UV Case_Folding_invlist[] = { /* for ASCII/Latin1 */ 0xA7BD, 0xA7BE, 0xA7BF, + 0xA7C0, + 0xA7C1, 0xA7C2, 0xA7C3, 0xA7C4, @@ -1425,6 +1427,12 @@ static const UV Case_Folding_invlist[] = { /* for ASCII/Latin1 */ 0xA7C8, 0xA7C9, 0xA7CA, + 0xA7D0, + 0xA7D1, + 0xA7D6, + 0xA7D7, + 0xA7D8, + 0xA7D9, 0xA7F5, 0xA7F6, 0xAB70, @@ -1448,6 +1456,14 @@ static const UV Case_Folding_invlist[] = { /* for ASCII/Latin1 */ 0x10428, 0x104B0, 0x104D4, + 0x10570, + 0x1057B, + 0x1057C, + 0x1058B, + 0x1058C, + 0x10593, + 0x10594, + 0x10596, 0x10C80, 0x10CB3, 0x118A0, @@ -3444,6 +3460,8 @@ static const I32 Case_Folding_invmap[] = { /* for ASCII/Latin1 */ 0, 0xA7BF, 0, + 0xA7C1, + 0, 0xA7C3, 0, 0xA794, @@ -3453,6 +3471,12 @@ static const I32 Case_Folding_invmap[] = { /* for ASCII/Latin1 */ 0, 0xA7CA, 0, + 0xA7D1, + 0, + 0xA7D7, + 0, + 0xA7D9, + 0, 0xA7F6, 0, 0x13A0, @@ -3476,6 +3500,14 @@ static const I32 Case_Folding_invmap[] = { /* for ASCII/Latin1 */ 0, 0x104D8, 0, + 0x10597, + 0, + 0x105A3, + 0, + 0x105B3, + 0, + 0x105BB, + 0, 0x10CC0, 0, 0x118C0, @@ -3498,7 +3530,7 @@ static const I32 Case_Folding_invmap[] = { /* for ASCII/Latin1 */ && '$' == 91 && '@' == 124 && '`' == 121 && '\n' == 21 static const UV Case_Folding_invlist[] = { /* for EBCDIC 1047 */ - 1417, /* Number of elements */ + 1433, /* Number of elements */ 148565664, /* Version and data structure type */ 0, /* 0 if the list starts at 0; 1 if it starts at the element beyond 0 */ @@ -4535,7 +4567,7 @@ static const UV Case_Folding_invlist[] = { /* for EBCDIC 1047 */ 0x24B6, 0x24D0, 0x2C00, - 0x2C2F, + 0x2C30, 0x2C60, 0x2C61, 0x2C62, @@ -4879,6 +4911,8 @@ static const UV Case_Folding_invlist[] = { /* for EBCDIC 1047 */ 0xA7BD, 0xA7BE, 0xA7BF, + 0xA7C0, + 0xA7C1, 0xA7C2, 0xA7C3, 0xA7C4, @@ -4888,6 +4922,12 @@ static const UV Case_Folding_invlist[] = { /* for EBCDIC 1047 */ 0xA7C8, 0xA7C9, 0xA7CA, + 0xA7D0, + 0xA7D1, + 0xA7D6, + 0xA7D7, + 0xA7D8, + 0xA7D9, 0xA7F5, 0xA7F6, 0xAB70, @@ -4911,6 +4951,14 @@ static const UV Case_Folding_invlist[] = { /* for EBCDIC 1047 */ 0x10428, 0x104B0, 0x104D4, + 0x10570, + 0x1057B, + 0x1057C, + 0x1058B, + 0x1058C, + 0x10593, + 0x10594, + 0x10596, 0x10C80, 0x10CB3, 0x118A0, @@ -6929,6 +6977,8 @@ static const I32 Case_Folding_invmap[] = { /* for EBCDIC 1047 */ 0, 0xA7BF, 0, + 0xA7C1, + 0, 0xA7C3, 0, 0xA794, @@ -6938,6 +6988,12 @@ static const I32 Case_Folding_invmap[] = { /* for EBCDIC 1047 */ 0, 0xA7CA, 0, + 0xA7D1, + 0, + 0xA7D7, + 0, + 0xA7D9, + 0, 0xA7F6, 0, 0x13A0, @@ -6961,6 +7017,14 @@ static const I32 Case_Folding_invmap[] = { /* for EBCDIC 1047 */ 0, 0x104D8, 0, + 0x10597, + 0, + 0x105A3, + 0, + 0x105B3, + 0, + 0x105BB, + 0, 0x10CC0, 0, 0x118C0, @@ -6983,7 +7047,7 @@ static const I32 Case_Folding_invmap[] = { /* for EBCDIC 1047 */ && '$' == 91 && '@' == 124 && '`' == 121 && '\n' == 37 static const UV Case_Folding_invlist[] = { /* for EBCDIC 037 */ - 1413, /* Number of elements */ + 1429, /* Number of elements */ 148565664, /* Version and data structure type */ 0, /* 0 if the list starts at 0; 1 if it starts at the element beyond 0 */ @@ -8016,7 +8080,7 @@ static const UV Case_Folding_invlist[] = { /* for EBCDIC 037 */ 0x24B6, 0x24D0, 0x2C00, - 0x2C2F, + 0x2C30, 0x2C60, 0x2C61, 0x2C62, @@ -8360,6 +8424,8 @@ static const UV Case_Folding_invlist[] = { /* for EBCDIC 037 */ 0xA7BD, 0xA7BE, 0xA7BF, + 0xA7C0, + 0xA7C1, 0xA7C2, 0xA7C3, 0xA7C4, @@ -8369,6 +8435,12 @@ static const UV Case_Folding_invlist[] = { /* for EBCDIC 037 */ 0xA7C8, 0xA7C9, 0xA7CA, + 0xA7D0, + 0xA7D1, + 0xA7D6, + 0xA7D7, + 0xA7D8, + 0xA7D9, 0xA7F5, 0xA7F6, 0xAB70, @@ -8392,6 +8464,14 @@ static const UV Case_Folding_invlist[] = { /* for EBCDIC 037 */ 0x10428, 0x104B0, 0x104D4, + 0x10570, + 0x1057B, + 0x1057C, + 0x1058B, + 0x1058C, + 0x10593, + 0x10594, + 0x10596, 0x10C80, 0x10CB3, 0x118A0, @@ -10406,6 +10486,8 @@ static const I32 Case_Folding_invmap[] = { /* for EBCDIC 037 */ 0, 0xA7BF, 0, + 0xA7C1, + 0, 0xA7C3, 0, 0xA794, @@ -10415,6 +10497,12 @@ static const I32 Case_Folding_invmap[] = { /* for EBCDIC 037 */ 0, 0xA7CA, 0, + 0xA7D1, + 0, + 0xA7D7, + 0, + 0xA7D9, + 0, 0xA7F6, 0, 0x13A0, @@ -10438,6 +10526,14 @@ static const I32 Case_Folding_invmap[] = { /* for EBCDIC 037 */ 0, 0x104D8, 0, + 0x10597, + 0, + 0x105A3, + 0, + 0x105B3, + 0, + 0x105BB, + 0, 0x10CC0, 0, 0x118C0, @@ -10457,7 +10553,7 @@ static const I32 Case_Folding_invmap[] = { /* for EBCDIC 037 */ # if 'A' == 65 /* ASCII/Latin1 */ static const UV Lowercase_Mapping_invlist[] = { /* for ASCII/Latin1 */ - 1262, /* Number of elements */ + 1278, /* Number of elements */ 148565664, /* Version and data structure type */ 0, /* 0 if the list starts at 0; 1 if it starts at the element beyond 0 */ @@ -11354,7 +11450,7 @@ static const UV Lowercase_Mapping_invlist[] = { /* for ASCII/Latin1 */ 0x24B6, 0x24D0, 0x2C00, - 0x2C2F, + 0x2C30, 0x2C60, 0x2C61, 0x2C62, @@ -11698,6 +11794,8 @@ static const UV Lowercase_Mapping_invlist[] = { /* for ASCII/Latin1 */ 0xA7BD, 0xA7BE, 0xA7BF, + 0xA7C0, + 0xA7C1, 0xA7C2, 0xA7C3, 0xA7C4, @@ -11707,6 +11805,12 @@ static const UV Lowercase_Mapping_invlist[] = { /* for ASCII/Latin1 */ 0xA7C8, 0xA7C9, 0xA7CA, + 0xA7D0, + 0xA7D1, + 0xA7D6, + 0xA7D7, + 0xA7D8, + 0xA7D9, 0xA7F5, 0xA7F6, 0xFF21, @@ -11715,6 +11819,14 @@ static const UV Lowercase_Mapping_invlist[] = { /* for ASCII/Latin1 */ 0x10428, 0x104B0, 0x104D4, + 0x10570, + 0x1057B, + 0x1057C, + 0x1058B, + 0x1058C, + 0x10593, + 0x10594, + 0x10596, 0x10C80, 0x10CB3, 0x118A0, @@ -13000,6 +13112,8 @@ static const I32 Lowercase_Mapping_invmap[] = { /* for ASCII/Latin1 */ 0, 0xA7BF, 0, + 0xA7C1, + 0, 0xA7C3, 0, 0xA794, @@ -13009,6 +13123,12 @@ static const I32 Lowercase_Mapping_invmap[] = { /* for ASCII/Latin1 */ 0, 0xA7CA, 0, + 0xA7D1, + 0, + 0xA7D7, + 0, + 0xA7D9, + 0, 0xA7F6, 0, 0xFF41, @@ -13017,6 +13137,14 @@ static const I32 Lowercase_Mapping_invmap[] = { /* for ASCII/Latin1 */ 0, 0x104D8, 0, + 0x10597, + 0, + 0x105A3, + 0, + 0x105B3, + 0, + 0x105BB, + 0, 0x10CC0, 0, 0x118C0, @@ -13039,7 +13167,7 @@ static const I32 Lowercase_Mapping_invmap[] = { /* for ASCII/Latin1 */ && '$' == 91 && '@' == 124 && '`' == 121 && '\n' == 21 static const UV Lowercase_Mapping_invlist[] = { /* for EBCDIC 1047 */ - 1280, /* Number of elements */ + 1296, /* Number of elements */ 148565664, /* Version and data structure type */ 0, /* 0 if the list starts at 0; 1 if it starts at the element beyond 0 */ @@ -13954,7 +14082,7 @@ static const UV Lowercase_Mapping_invlist[] = { /* for EBCDIC 1047 */ 0x24B6, 0x24D0, 0x2C00, - 0x2C2F, + 0x2C30, 0x2C60, 0x2C61, 0x2C62, @@ -14298,6 +14426,8 @@ static const UV Lowercase_Mapping_invlist[] = { /* for EBCDIC 1047 */ 0xA7BD, 0xA7BE, 0xA7BF, + 0xA7C0, + 0xA7C1, 0xA7C2, 0xA7C3, 0xA7C4, @@ -14307,6 +14437,12 @@ static const UV Lowercase_Mapping_invlist[] = { /* for EBCDIC 1047 */ 0xA7C8, 0xA7C9, 0xA7CA, + 0xA7D0, + 0xA7D1, + 0xA7D6, + 0xA7D7, + 0xA7D8, + 0xA7D9, 0xA7F5, 0xA7F6, 0xFF21, @@ -14315,6 +14451,14 @@ static const UV Lowercase_Mapping_invlist[] = { /* for EBCDIC 1047 */ 0x10428, 0x104B0, 0x104D4, + 0x10570, + 0x1057B, + 0x1057C, + 0x1058B, + 0x1058C, + 0x10593, + 0x10594, + 0x10596, 0x10C80, 0x10CB3, 0x118A0, @@ -15621,6 +15765,8 @@ static const I32 Lowercase_Mapping_invmap[] = { /* for EBCDIC 1047 */ 0, 0xA7BF, 0, + 0xA7C1, + 0, 0xA7C3, 0, 0xA794, @@ -15630,6 +15776,12 @@ static const I32 Lowercase_Mapping_invmap[] = { /* for EBCDIC 1047 */ 0, 0xA7CA, 0, + 0xA7D1, + 0, + 0xA7D7, + 0, + 0xA7D9, + 0, 0xA7F6, 0, 0xFF41, @@ -15638,6 +15790,14 @@ static const I32 Lowercase_Mapping_invmap[] = { /* for EBCDIC 1047 */ 0, 0x104D8, 0, + 0x10597, + 0, + 0x105A3, + 0, + 0x105B3, + 0, + 0x105BB, + 0, 0x10CC0, 0, 0x118C0, @@ -15660,7 +15820,7 @@ static const I32 Lowercase_Mapping_invmap[] = { /* for EBCDIC 1047 */ && '$' == 91 && '@' == 124 && '`' == 121 && '\n' == 37 static const UV Lowercase_Mapping_invlist[] = { /* for EBCDIC 037 */ - 1276, /* Number of elements */ + 1292, /* Number of elements */ 148565664, /* Version and data structure type */ 0, /* 0 if the list starts at 0; 1 if it starts at the element beyond 0 */ @@ -16571,7 +16731,7 @@ static const UV Lowercase_Mapping_invlist[] = { /* for EBCDIC 037 */ 0x24B6, 0x24D0, 0x2C00, - 0x2C2F, + 0x2C30, 0x2C60, 0x2C61, 0x2C62, @@ -16915,6 +17075,8 @@ static const UV Lowercase_Mapping_invlist[] = { /* for EBCDIC 037 */ 0xA7BD, 0xA7BE, 0xA7BF, + 0xA7C0, + 0xA7C1, 0xA7C2, 0xA7C3, 0xA7C4, @@ -16924,6 +17086,12 @@ static const UV Lowercase_Mapping_invlist[] = { /* for EBCDIC 037 */ 0xA7C8, 0xA7C9, 0xA7CA, + 0xA7D0, + 0xA7D1, + 0xA7D6, + 0xA7D7, + 0xA7D8, + 0xA7D9, 0xA7F5, 0xA7F6, 0xFF21, @@ -16932,6 +17100,14 @@ static const UV Lowercase_Mapping_invlist[] = { /* for EBCDIC 037 */ 0x10428, 0x104B0, 0x104D4, + 0x10570, + 0x1057B, + 0x1057C, + 0x1058B, + 0x1058C, + 0x10593, + 0x10594, + 0x10596, 0x10C80, 0x10CB3, 0x118A0, @@ -18234,6 +18410,8 @@ static const I32 Lowercase_Mapping_invmap[] = { /* for EBCDIC 037 */ 0, 0xA7BF, 0, + 0xA7C1, + 0, 0xA7C3, 0, 0xA794, @@ -18243,6 +18421,12 @@ static const I32 Lowercase_Mapping_invmap[] = { /* for EBCDIC 037 */ 0, 0xA7CA, 0, + 0xA7D1, + 0, + 0xA7D7, + 0, + 0xA7D9, + 0, 0xA7F6, 0, 0xFF41, @@ -18251,6 +18435,14 @@ static const I32 Lowercase_Mapping_invmap[] = { /* for EBCDIC 037 */ 0, 0x104D8, 0, + 0x10597, + 0, + 0x105A3, + 0, + 0x105B3, + 0, + 0x105BB, + 0, 0x10CC0, 0, 0x118C0, @@ -18268,7 +18460,7 @@ static const I32 Lowercase_Mapping_invmap[] = { /* for EBCDIC 037 */ #if (defined(PERL_IN_REGCOMP_C) && ! defined(PERL_IN_XSUB_RE)) static const UV _Perl_CCC_non0_non230_invlist[] = { /* for all charsets */ - 359, /* Number of elements */ + 373, /* Number of elements */ 148565664, /* Version and data structure type */ 1, /* 0 if the list starts at 0; 1 if it starts at the element beyond 0 */ @@ -18353,7 +18545,9 @@ static const UV _Perl_CCC_non0_non230_invlist[] = { /* for all charsets */ 0x7FE, 0x859, 0x85C, - 0x8D3, + 0x899, + 0x89C, + 0x8CF, 0x8D4, 0x8E3, 0x8E4, @@ -18391,6 +18585,8 @@ static const UV _Perl_CCC_non0_non230_invlist[] = { /* for all charsets */ 0xB4E, 0xBCD, 0xBCE, + 0xC3C, + 0xC3D, 0xC4D, 0xC4E, 0xC55, @@ -18440,7 +18636,7 @@ static const UV _Perl_CCC_non0_non230_invlist[] = { /* for all charsets */ 0x108D, 0x108E, 0x1714, - 0x1715, + 0x1716, 0x1734, 0x1735, 0x17D2, @@ -18463,6 +18659,10 @@ static const UV _Perl_CCC_non0_non230_invlist[] = { /* for all charsets */ 0x1ABE, 0x1ABF, 0x1AC1, + 0x1AC3, + 0x1AC5, + 0x1ACA, + 0x1ACB, 0x1B34, 0x1B35, 0x1B44, @@ -18492,7 +18692,7 @@ static const UV _Perl_CCC_non0_non230_invlist[] = { /* for all charsets */ 0x1DCD, 0x1DD1, 0x1DF6, - 0x1DFA, + 0x1DFB, 0x1DFC, 0x1DFE, 0x1DFF, @@ -18555,8 +18755,14 @@ static const UV _Perl_CCC_non0_non230_invlist[] = { /* for all charsets */ 0x10F4C, 0x10F4D, 0x10F51, + 0x10F83, + 0x10F84, + 0x10F85, + 0x10F86, 0x11046, 0x11047, + 0x11070, + 0x11071, 0x1107F, 0x11080, 0x110B9, @@ -18636,7 +18842,7 @@ static const UV _Perl_CCC_non0_non230_invlist[] = { /* for all charsets */ # if 'A' == 65 /* ASCII/Latin1 */ static const UV _Perl_GCB_invlist[] = { /* for ASCII/Latin1 */ - 1805, /* Number of elements */ + 1826, /* Number of elements */ 148565664, /* Version and data structure type */ 0, /* 0 if the list starts at 0; 1 if it starts at the element beyond 0 */ @@ -18708,7 +18914,11 @@ static const UV _Perl_GCB_invlist[] = { /* for ASCII/Latin1 */ 0x82E, 0x859, 0x85C, - 0x8D3, + 0x890, + 0x892, + 0x898, + 0x8A0, + 0x8CA, 0x8E2, 0x8E3, 0x903, @@ -18819,6 +19029,8 @@ static const UV _Perl_GCB_invlist[] = { /* for ASCII/Latin1 */ 0xC01, 0xC04, 0xC05, + 0xC3C, + 0xC3D, 0xC3E, 0xC41, 0xC45, @@ -18954,7 +19166,9 @@ static const UV _Perl_GCB_invlist[] = { /* for ASCII/Latin1 */ 0x1360, 0x1712, 0x1715, + 0x1716, 0x1732, + 0x1734, 0x1735, 0x1752, 0x1754, @@ -18973,6 +19187,7 @@ static const UV _Perl_GCB_invlist[] = { /* for ASCII/Latin1 */ 0x180B, 0x180E, 0x180F, + 0x1810, 0x1885, 0x1887, 0x18A9, @@ -19007,7 +19222,7 @@ static const UV _Perl_GCB_invlist[] = { /* for ASCII/Latin1 */ 0x1A7F, 0x1A80, 0x1AB0, - 0x1AC1, + 0x1ACF, 0x1B00, 0x1B04, 0x1B05, @@ -19058,8 +19273,6 @@ static const UV _Perl_GCB_invlist[] = { /* for ASCII/Latin1 */ 0x1CF8, 0x1CFA, 0x1DC0, - 0x1DFA, - 0x1DFB, 0x1E00, 0x200B, 0x200C, @@ -20103,12 +20316,18 @@ static const UV _Perl_GCB_invlist[] = { /* for ASCII/Latin1 */ 0x10EAD, 0x10F46, 0x10F51, + 0x10F82, + 0x10F86, 0x11000, 0x11001, 0x11002, 0x11003, 0x11038, 0x11047, + 0x11070, + 0x11071, + 0x11073, + 0x11075, 0x1107F, 0x11082, 0x11083, @@ -20119,6 +20338,8 @@ static const UV _Perl_GCB_invlist[] = { /* for ASCII/Latin1 */ 0x110BB, 0x110BD, 0x110BE, + 0x110C2, + 0x110C3, 0x110CD, 0x110CE, 0x11100, @@ -20337,6 +20558,10 @@ static const UV _Perl_GCB_invlist[] = { /* for ASCII/Latin1 */ 0x1BC9F, 0x1BCA0, 0x1BCA4, + 0x1CF00, + 0x1CF2E, + 0x1CF30, + 0x1CF47, 0x1D165, 0x1D166, 0x1D167, @@ -20376,6 +20601,8 @@ static const UV _Perl_GCB_invlist[] = { /* for ASCII/Latin1 */ 0x1E02B, 0x1E130, 0x1E137, + 0x1E2AE, + 0x1E2AF, 0x1E2EC, 0x1E2F0, 0x1E8D0, @@ -20547,6 +20774,10 @@ static const GCB_enum _Perl_GCB_invmap[] = { /* for ASCII/Latin1 */ GCB_Other, GCB_Extend, GCB_Other, + GCB_Prepend, + GCB_Other, + GCB_Extend, + GCB_Other, GCB_Extend, GCB_Prepend, GCB_Extend, @@ -20659,6 +20890,8 @@ static const GCB_enum _Perl_GCB_invmap[] = { /* for ASCII/Latin1 */ GCB_Extend, GCB_Other, GCB_Extend, + GCB_Other, + GCB_Extend, GCB_SpacingMark, GCB_Other, GCB_Extend, @@ -20792,8 +21025,10 @@ static const GCB_enum _Perl_GCB_invmap[] = { /* for ASCII/Latin1 */ GCB_Extend, GCB_Other, GCB_Extend, + GCB_SpacingMark, GCB_Other, GCB_Extend, + GCB_SpacingMark, GCB_Other, GCB_Extend, GCB_Other, @@ -20811,6 +21046,7 @@ static const GCB_enum _Perl_GCB_invmap[] = { /* for ASCII/Latin1 */ GCB_Other, GCB_Extend, GCB_Control, + GCB_Extend, GCB_Other, GCB_Extend, GCB_Other, @@ -20898,8 +21134,6 @@ static const GCB_enum _Perl_GCB_invmap[] = { /* for ASCII/Latin1 */ GCB_Other, GCB_Extend, GCB_Other, - GCB_Extend, - GCB_Other, GCB_Control, GCB_Extend, GCB_ZWJ, @@ -21942,6 +22176,8 @@ static const GCB_enum _Perl_GCB_invmap[] = { /* for ASCII/Latin1 */ GCB_Other, GCB_Extend, GCB_Other, + GCB_Extend, + GCB_Other, GCB_SpacingMark, GCB_Extend, GCB_SpacingMark, @@ -21949,6 +22185,10 @@ static const GCB_enum _Perl_GCB_invmap[] = { /* for ASCII/Latin1 */ GCB_Extend, GCB_Other, GCB_Extend, + GCB_Other, + GCB_Extend, + GCB_Other, + GCB_Extend, GCB_SpacingMark, GCB_Other, GCB_SpacingMark, @@ -21958,6 +22198,8 @@ static const GCB_enum _Perl_GCB_invmap[] = { /* for ASCII/Latin1 */ GCB_Other, GCB_Prepend, GCB_Other, + GCB_Extend, + GCB_Other, GCB_Prepend, GCB_Other, GCB_Extend, @@ -22067,7 +22309,7 @@ static const GCB_enum _Perl_GCB_invmap[] = { /* for ASCII/Latin1 */ GCB_Extend, GCB_Other, GCB_Extend, - GCB_SpacingMark, + GCB_Other, GCB_Extend, GCB_SpacingMark, GCB_Extend, @@ -22177,6 +22419,10 @@ static const GCB_enum _Perl_GCB_invmap[] = { /* for ASCII/Latin1 */ GCB_Control, GCB_Other, GCB_Extend, + GCB_Other, + GCB_Extend, + GCB_Other, + GCB_Extend, GCB_SpacingMark, GCB_Extend, GCB_Other, @@ -22221,6 +22467,8 @@ static const GCB_enum _Perl_GCB_invmap[] = { /* for ASCII/Latin1 */ GCB_Other, GCB_Extend, GCB_Other, + GCB_Extend, + GCB_Other, GCB_ExtPict_XX, GCB_Other, GCB_ExtPict_XX, @@ -22298,7 +22546,7 @@ static const GCB_enum _Perl_GCB_invmap[] = { /* for ASCII/Latin1 */ && '$' == 91 && '@' == 124 && '`' == 121 && '\n' == 21 static const UV _Perl_GCB_invlist[] = { /* for EBCDIC 1047 */ - 1806, /* Number of elements */ + 1827, /* Number of elements */ 148565664, /* Version and data structure type */ 0, /* 0 if the list starts at 0; 1 if it starts at the element beyond 0 */ @@ -22371,7 +22619,11 @@ static const UV _Perl_GCB_invlist[] = { /* for EBCDIC 1047 */ 0x82E, 0x859, 0x85C, - 0x8D3, + 0x890, + 0x892, + 0x898, + 0x8A0, + 0x8CA, 0x8E2, 0x8E3, 0x903, @@ -22482,6 +22734,8 @@ static const UV _Perl_GCB_invlist[] = { /* for EBCDIC 1047 */ 0xC01, 0xC04, 0xC05, + 0xC3C, + 0xC3D, 0xC3E, 0xC41, 0xC45, @@ -22617,7 +22871,9 @@ static const UV _Perl_GCB_invlist[] = { /* for EBCDIC 1047 */ 0x1360, 0x1712, 0x1715, + 0x1716, 0x1732, + 0x1734, 0x1735, 0x1752, 0x1754, @@ -22636,6 +22892,7 @@ static const UV _Perl_GCB_invlist[] = { /* for EBCDIC 1047 */ 0x180B, 0x180E, 0x180F, + 0x1810, 0x1885, 0x1887, 0x18A9, @@ -22670,7 +22927,7 @@ static const UV _Perl_GCB_invlist[] = { /* for EBCDIC 1047 */ 0x1A7F, 0x1A80, 0x1AB0, - 0x1AC1, + 0x1ACF, 0x1B00, 0x1B04, 0x1B05, @@ -22721,8 +22978,6 @@ static const UV _Perl_GCB_invlist[] = { /* for EBCDIC 1047 */ 0x1CF8, 0x1CFA, 0x1DC0, - 0x1DFA, - 0x1DFB, 0x1E00, 0x200B, 0x200C, @@ -23766,12 +24021,18 @@ static const UV _Perl_GCB_invlist[] = { /* for EBCDIC 1047 */ 0x10EAD, 0x10F46, 0x10F51, + 0x10F82, + 0x10F86, 0x11000, 0x11001, 0x11002, 0x11003, 0x11038, 0x11047, + 0x11070, + 0x11071, + 0x11073, + 0x11075, 0x1107F, 0x11082, 0x11083, @@ -23782,6 +24043,8 @@ static const UV _Perl_GCB_invlist[] = { /* for EBCDIC 1047 */ 0x110BB, 0x110BD, 0x110BE, + 0x110C2, + 0x110C3, 0x110CD, 0x110CE, 0x11100, @@ -24000,6 +24263,10 @@ static const UV _Perl_GCB_invlist[] = { /* for EBCDIC 1047 */ 0x1BC9F, 0x1BCA0, 0x1BCA4, + 0x1CF00, + 0x1CF2E, + 0x1CF30, + 0x1CF47, 0x1D165, 0x1D166, 0x1D167, @@ -24039,6 +24306,8 @@ static const UV _Perl_GCB_invlist[] = { /* for EBCDIC 1047 */ 0x1E02B, 0x1E130, 0x1E137, + 0x1E2AE, + 0x1E2AF, 0x1E2EC, 0x1E2F0, 0x1E8D0, @@ -24214,6 +24483,10 @@ static const GCB_enum _Perl_GCB_invmap[] = { /* for EBCDIC 1047 */ GCB_Other, GCB_Extend, GCB_Other, + GCB_Prepend, + GCB_Other, + GCB_Extend, + GCB_Other, GCB_Extend, GCB_Prepend, GCB_Extend, @@ -24326,6 +24599,8 @@ static const GCB_enum _Perl_GCB_invmap[] = { /* for EBCDIC 1047 */ GCB_Extend, GCB_Other, GCB_Extend, + GCB_Other, + GCB_Extend, GCB_SpacingMark, GCB_Other, GCB_Extend, @@ -24459,8 +24734,10 @@ static const GCB_enum _Perl_GCB_invmap[] = { /* for EBCDIC 1047 */ GCB_Extend, GCB_Other, GCB_Extend, + GCB_SpacingMark, GCB_Other, GCB_Extend, + GCB_SpacingMark, GCB_Other, GCB_Extend, GCB_Other, @@ -24478,6 +24755,7 @@ static const GCB_enum _Perl_GCB_invmap[] = { /* for EBCDIC 1047 */ GCB_Other, GCB_Extend, GCB_Control, + GCB_Extend, GCB_Other, GCB_Extend, GCB_Other, @@ -24565,8 +24843,6 @@ static const GCB_enum _Perl_GCB_invmap[] = { /* for EBCDIC 1047 */ GCB_Other, GCB_Extend, GCB_Other, - GCB_Extend, - GCB_Other, GCB_Control, GCB_Extend, GCB_ZWJ, @@ -25609,6 +25885,8 @@ static const GCB_enum _Perl_GCB_invmap[] = { /* for EBCDIC 1047 */ GCB_Other, GCB_Extend, GCB_Other, + GCB_Extend, + GCB_Other, GCB_SpacingMark, GCB_Extend, GCB_SpacingMark, @@ -25616,6 +25894,10 @@ static const GCB_enum _Perl_GCB_invmap[] = { /* for EBCDIC 1047 */ GCB_Extend, GCB_Other, GCB_Extend, + GCB_Other, + GCB_Extend, + GCB_Other, + GCB_Extend, GCB_SpacingMark, GCB_Other, GCB_SpacingMark, @@ -25625,6 +25907,8 @@ static const GCB_enum _Perl_GCB_invmap[] = { /* for EBCDIC 1047 */ GCB_Other, GCB_Prepend, GCB_Other, + GCB_Extend, + GCB_Other, GCB_Prepend, GCB_Other, GCB_Extend, @@ -25734,7 +26018,7 @@ static const GCB_enum _Perl_GCB_invmap[] = { /* for EBCDIC 1047 */ GCB_Extend, GCB_Other, GCB_Extend, - GCB_SpacingMark, + GCB_Other, GCB_Extend, GCB_SpacingMark, GCB_Extend, @@ -25844,6 +26128,10 @@ static const GCB_enum _Perl_GCB_invmap[] = { /* for EBCDIC 1047 */ GCB_Control, GCB_Other, GCB_Extend, + GCB_Other, + GCB_Extend, + GCB_Other, + GCB_Extend, GCB_SpacingMark, GCB_Extend, GCB_Other, @@ -25888,6 +26176,8 @@ static const GCB_enum _Perl_GCB_invmap[] = { /* for EBCDIC 1047 */ GCB_Other, GCB_Extend, GCB_Other, + GCB_Extend, + GCB_Other, GCB_ExtPict_XX, GCB_Other, GCB_ExtPict_XX, @@ -25965,7 +26255,7 @@ static const GCB_enum _Perl_GCB_invmap[] = { /* for EBCDIC 1047 */ && '$' == 91 && '@' == 124 && '`' == 121 && '\n' == 37 static const UV _Perl_GCB_invlist[] = { /* for EBCDIC 037 */ - 1806, /* Number of elements */ + 1827, /* Number of elements */ 148565664, /* Version and data structure type */ 0, /* 0 if the list starts at 0; 1 if it starts at the element beyond 0 */ @@ -26038,7 +26328,11 @@ static const UV _Perl_GCB_invlist[] = { /* for EBCDIC 037 */ 0x82E, 0x859, 0x85C, - 0x8D3, + 0x890, + 0x892, + 0x898, + 0x8A0, + 0x8CA, 0x8E2, 0x8E3, 0x903, @@ -26149,6 +26443,8 @@ static const UV _Perl_GCB_invlist[] = { /* for EBCDIC 037 */ 0xC01, 0xC04, 0xC05, + 0xC3C, + 0xC3D, 0xC3E, 0xC41, 0xC45, @@ -26284,7 +26580,9 @@ static const UV _Perl_GCB_invlist[] = { /* for EBCDIC 037 */ 0x1360, 0x1712, 0x1715, + 0x1716, 0x1732, + 0x1734, 0x1735, 0x1752, 0x1754, @@ -26303,6 +26601,7 @@ static const UV _Perl_GCB_invlist[] = { /* for EBCDIC 037 */ 0x180B, 0x180E, 0x180F, + 0x1810, 0x1885, 0x1887, 0x18A9, @@ -26337,7 +26636,7 @@ static const UV _Perl_GCB_invlist[] = { /* for EBCDIC 037 */ 0x1A7F, 0x1A80, 0x1AB0, - 0x1AC1, + 0x1ACF, 0x1B00, 0x1B04, 0x1B05, @@ -26388,8 +26687,6 @@ static const UV _Perl_GCB_invlist[] = { /* for EBCDIC 037 */ 0x1CF8, 0x1CFA, 0x1DC0, - 0x1DFA, - 0x1DFB, 0x1E00, 0x200B, 0x200C, @@ -27433,12 +27730,18 @@ static const UV _Perl_GCB_invlist[] = { /* for EBCDIC 037 */ 0x10EAD, 0x10F46, 0x10F51, + 0x10F82, + 0x10F86, 0x11000, 0x11001, 0x11002, 0x11003, 0x11038, 0x11047, + 0x11070, + 0x11071, + 0x11073, + 0x11075, 0x1107F, 0x11082, 0x11083, @@ -27449,6 +27752,8 @@ static const UV _Perl_GCB_invlist[] = { /* for EBCDIC 037 */ 0x110BB, 0x110BD, 0x110BE, + 0x110C2, + 0x110C3, 0x110CD, 0x110CE, 0x11100, @@ -27667,6 +27972,10 @@ static const UV _Perl_GCB_invlist[] = { /* for EBCDIC 037 */ 0x1BC9F, 0x1BCA0, 0x1BCA4, + 0x1CF00, + 0x1CF2E, + 0x1CF30, + 0x1CF47, 0x1D165, 0x1D166, 0x1D167, @@ -27706,6 +28015,8 @@ static const UV _Perl_GCB_invlist[] = { /* for EBCDIC 037 */ 0x1E02B, 0x1E130, 0x1E137, + 0x1E2AE, + 0x1E2AF, 0x1E2EC, 0x1E2F0, 0x1E8D0, @@ -27881,6 +28192,10 @@ static const GCB_enum _Perl_GCB_invmap[] = { /* for EBCDIC 037 */ GCB_Other, GCB_Extend, GCB_Other, + GCB_Prepend, + GCB_Other, + GCB_Extend, + GCB_Other, GCB_Extend, GCB_Prepend, GCB_Extend, @@ -27993,6 +28308,8 @@ static const GCB_enum _Perl_GCB_invmap[] = { /* for EBCDIC 037 */ GCB_Extend, GCB_Other, GCB_Extend, + GCB_Other, + GCB_Extend, GCB_SpacingMark, GCB_Other, GCB_Extend, @@ -28126,8 +28443,10 @@ static const GCB_enum _Perl_GCB_invmap[] = { /* for EBCDIC 037 */ GCB_Extend, GCB_Other, GCB_Extend, + GCB_SpacingMark, GCB_Other, GCB_Extend, + GCB_SpacingMark, GCB_Other, GCB_Extend, GCB_Other, @@ -28145,6 +28464,7 @@ static const GCB_enum _Perl_GCB_invmap[] = { /* for EBCDIC 037 */ GCB_Other, GCB_Extend, GCB_Control, + GCB_Extend, GCB_Other, GCB_Extend, GCB_Other, @@ -28232,8 +28552,6 @@ static const GCB_enum _Perl_GCB_invmap[] = { /* for EBCDIC 037 */ GCB_Other, GCB_Extend, GCB_Other, - GCB_Extend, - GCB_Other, GCB_Control, GCB_Extend, GCB_ZWJ, @@ -29276,6 +29594,8 @@ static const GCB_enum _Perl_GCB_invmap[] = { /* for EBCDIC 037 */ GCB_Other, GCB_Extend, GCB_Other, + GCB_Extend, + GCB_Other, GCB_SpacingMark, GCB_Extend, GCB_SpacingMark, @@ -29283,6 +29603,10 @@ static const GCB_enum _Perl_GCB_invmap[] = { /* for EBCDIC 037 */ GCB_Extend, GCB_Other, GCB_Extend, + GCB_Other, + GCB_Extend, + GCB_Other, + GCB_Extend, GCB_SpacingMark, GCB_Other, GCB_SpacingMark, @@ -29292,6 +29616,8 @@ static const GCB_enum _Perl_GCB_invmap[] = { /* for EBCDIC 037 */ GCB_Other, GCB_Prepend, GCB_Other, + GCB_Extend, + GCB_Other, GCB_Prepend, GCB_Other, GCB_Extend, @@ -29401,7 +29727,7 @@ static const GCB_enum _Perl_GCB_invmap[] = { /* for EBCDIC 037 */ GCB_Extend, GCB_Other, GCB_Extend, - GCB_SpacingMark, + GCB_Other, GCB_Extend, GCB_SpacingMark, GCB_Extend, @@ -29511,6 +29837,10 @@ static const GCB_enum _Perl_GCB_invmap[] = { /* for EBCDIC 037 */ GCB_Control, GCB_Other, GCB_Extend, + GCB_Other, + GCB_Extend, + GCB_Other, + GCB_Extend, GCB_SpacingMark, GCB_Extend, GCB_Other, @@ -29555,6 +29885,8 @@ static const GCB_enum _Perl_GCB_invmap[] = { /* for EBCDIC 037 */ GCB_Other, GCB_Extend, GCB_Other, + GCB_Extend, + GCB_Other, GCB_ExtPict_XX, GCB_Other, GCB_ExtPict_XX, @@ -29629,7 +29961,7 @@ static const GCB_enum _Perl_GCB_invmap[] = { /* for EBCDIC 037 */ # if 'A' == 65 /* ASCII/Latin1 */ static const UV _Perl_IVCF_invlist[] = { /* for ASCII/Latin1 */ - 1316, /* Number of elements */ + 1334, /* Number of elements */ 148565664, /* Version and data structure type */ 0, /* 0 if the list starts at 0; 1 if it starts at the element beyond 0 */ @@ -29640,6 +29972,8 @@ static const UV _Perl_IVCF_invlist[] = { /* for ASCII/Latin1 */ 0x73, 0x74, 0x7B, + 0xB5, + 0xB6, 0xDF, 0xE0, 0xE5, @@ -30591,7 +30925,7 @@ static const UV _Perl_IVCF_invlist[] = { /* for ASCII/Latin1 */ 0x24D0, 0x24EA, 0x2C30, - 0x2C5F, + 0x2C60, 0x2C61, 0x2C62, 0x2C65, @@ -30922,12 +31256,20 @@ static const UV _Perl_IVCF_invlist[] = { /* for ASCII/Latin1 */ 0xA7BE, 0xA7BF, 0xA7C0, + 0xA7C1, + 0xA7C2, 0xA7C3, 0xA7C4, 0xA7C8, 0xA7C9, 0xA7CA, 0xA7CB, + 0xA7D1, + 0xA7D2, + 0xA7D7, + 0xA7D8, + 0xA7D9, + 0xA7DA, 0xA7F6, 0xA7F7, 0xAB53, @@ -30941,6 +31283,14 @@ static const UV _Perl_IVCF_invlist[] = { /* for ASCII/Latin1 */ 0x10450, 0x104D8, 0x104FC, + 0x10597, + 0x105A2, + 0x105A3, + 0x105B2, + 0x105B3, + 0x105BA, + 0x105BB, + 0x105BD, 0x10CC0, 0x10CF3, 0x118C0, @@ -30991,7 +31341,8 @@ typedef enum { IVCF_use_AUX_TABLE_24 = -24, IVCF_use_AUX_TABLE_25 = -25, IVCF_use_AUX_TABLE_26 = -26, - IVCF_use_AUX_TABLE_27 = -27 + IVCF_use_AUX_TABLE_27 = -27, + IVCF_use_AUX_TABLE_28 = -28 } IVCF_enum; #define HAS_IVCF_AUX_TABLES @@ -31007,129 +31358,134 @@ static const U32 IVCF_AUX_TABLE_2[] = { }; static const U32 IVCF_AUX_TABLE_3[] = { + 0x39C, + 0x3BC +}; + +static const U32 IVCF_AUX_TABLE_4[] = { 0xC5, 0x212B }; -static const U32 IVCF_AUX_TABLE_4[] = { +static const U32 IVCF_AUX_TABLE_5[] = { 0x1C4, 0x1C5 }; -static const U32 IVCF_AUX_TABLE_5[] = { +static const U32 IVCF_AUX_TABLE_6[] = { 0x1C7, 0x1C8 }; -static const U32 IVCF_AUX_TABLE_6[] = { +static const U32 IVCF_AUX_TABLE_7[] = { 0x1CA, 0x1CB }; -static const U32 IVCF_AUX_TABLE_7[] = { +static const U32 IVCF_AUX_TABLE_8[] = { 0x1F1, 0x1F2 }; -static const U32 IVCF_AUX_TABLE_8[] = { +static const U32 IVCF_AUX_TABLE_9[] = { 0x392, 0x3D0 }; -static const U32 IVCF_AUX_TABLE_9[] = { +static const U32 IVCF_AUX_TABLE_10[] = { 0x395, 0x3F5 }; -static const U32 IVCF_AUX_TABLE_10[] = { +static const U32 IVCF_AUX_TABLE_11[] = { 0x398, 0x3D1, 0x3F4 }; -static const U32 IVCF_AUX_TABLE_11[] = { +static const U32 IVCF_AUX_TABLE_12[] = { 0x345, 0x399, 0x1FBE }; -static const U32 IVCF_AUX_TABLE_12[] = { +static const U32 IVCF_AUX_TABLE_13[] = { 0x39A, 0x3F0 }; -static const U32 IVCF_AUX_TABLE_13[] = { +static const U32 IVCF_AUX_TABLE_14[] = { 0xB5, 0x39C }; -static const U32 IVCF_AUX_TABLE_14[] = { +static const U32 IVCF_AUX_TABLE_15[] = { 0x3A0, 0x3D6 }; -static const U32 IVCF_AUX_TABLE_15[] = { +static const U32 IVCF_AUX_TABLE_16[] = { 0x3A1, 0x3F1 }; -static const U32 IVCF_AUX_TABLE_16[] = { +static const U32 IVCF_AUX_TABLE_17[] = { 0x3A3, 0x3C2 }; -static const U32 IVCF_AUX_TABLE_17[] = { +static const U32 IVCF_AUX_TABLE_18[] = { 0x3A6, 0x3D5 }; -static const U32 IVCF_AUX_TABLE_18[] = { +static const U32 IVCF_AUX_TABLE_19[] = { 0x3A9, 0x2126 }; -static const U32 IVCF_AUX_TABLE_19[] = { +static const U32 IVCF_AUX_TABLE_20[] = { 0x412, 0x1C80 }; -static const U32 IVCF_AUX_TABLE_20[] = { +static const U32 IVCF_AUX_TABLE_21[] = { 0x414, 0x1C81 }; -static const U32 IVCF_AUX_TABLE_21[] = { +static const U32 IVCF_AUX_TABLE_22[] = { 0x41E, 0x1C82 }; -static const U32 IVCF_AUX_TABLE_22[] = { +static const U32 IVCF_AUX_TABLE_23[] = { 0x421, 0x1C83 }; -static const U32 IVCF_AUX_TABLE_23[] = { +static const U32 IVCF_AUX_TABLE_24[] = { 0x422, 0x1C84, 0x1C85 }; -static const U32 IVCF_AUX_TABLE_24[] = { +static const U32 IVCF_AUX_TABLE_25[] = { 0x42A, 0x1C86 }; -static const U32 IVCF_AUX_TABLE_25[] = { +static const U32 IVCF_AUX_TABLE_26[] = { 0x462, 0x1C87 }; -static const U32 IVCF_AUX_TABLE_26[] = { +static const U32 IVCF_AUX_TABLE_27[] = { 0x1E60, 0x1E9B }; -static const U32 IVCF_AUX_TABLE_27[] = { +static const U32 IVCF_AUX_TABLE_28[] = { 0x1C88, 0xA64A }; @@ -31162,7 +31518,8 @@ static const U32 * const IVCF_AUX_TABLE_ptrs[] = { IVCF_AUX_TABLE_24, IVCF_AUX_TABLE_25, IVCF_AUX_TABLE_26, - IVCF_AUX_TABLE_27 + IVCF_AUX_TABLE_27, + IVCF_AUX_TABLE_28 }; /* Parallel table to the above, giving the number of elements in each table @@ -31179,9 +31536,9 @@ static const U8 IVCF_AUX_TABLE_lengths[] = { 2 /* IVCF_AUX_TABLE_7 */, 2 /* IVCF_AUX_TABLE_8 */, 2 /* IVCF_AUX_TABLE_9 */, - 3 /* IVCF_AUX_TABLE_10 */, + 2 /* IVCF_AUX_TABLE_10 */, 3 /* IVCF_AUX_TABLE_11 */, - 2 /* IVCF_AUX_TABLE_12 */, + 3 /* IVCF_AUX_TABLE_12 */, 2 /* IVCF_AUX_TABLE_13 */, 2 /* IVCF_AUX_TABLE_14 */, 2 /* IVCF_AUX_TABLE_15 */, @@ -31192,11 +31549,12 @@ static const U8 IVCF_AUX_TABLE_lengths[] = { 2 /* IVCF_AUX_TABLE_20 */, 2 /* IVCF_AUX_TABLE_21 */, 2 /* IVCF_AUX_TABLE_22 */, - 3 /* IVCF_AUX_TABLE_23 */, - 2 /* IVCF_AUX_TABLE_24 */, + 2 /* IVCF_AUX_TABLE_23 */, + 3 /* IVCF_AUX_TABLE_24 */, 2 /* IVCF_AUX_TABLE_25 */, 2 /* IVCF_AUX_TABLE_26 */, - 2 /* IVCF_AUX_TABLE_27 */ + 2 /* IVCF_AUX_TABLE_27 */, + 2 /* IVCF_AUX_TABLE_28 */ }; static const I32 _Perl_IVCF_invmap[] = { /* for ASCII/Latin1 */ @@ -31207,9 +31565,11 @@ static const I32 _Perl_IVCF_invmap[] = { /* for ASCII/Latin1 */ IVCF_use_AUX_TABLE_2, 0x54, 0, + IVCF_use_AUX_TABLE_3, + 0, 0x1E9E, 0xC0, - IVCF_use_AUX_TABLE_3, + IVCF_use_AUX_TABLE_4, 0xC6, 0, 0xD8, @@ -31378,12 +31738,12 @@ static const I32 _Perl_IVCF_invmap[] = { /* for ASCII/Latin1 */ 0, 0x1F7, 0, - IVCF_use_AUX_TABLE_4, - 0, IVCF_use_AUX_TABLE_5, 0, IVCF_use_AUX_TABLE_6, 0, + IVCF_use_AUX_TABLE_7, + 0, 0x1CD, 0, 0x1CF, @@ -31419,7 +31779,7 @@ static const I32 _Perl_IVCF_invmap[] = { /* for ASCII/Latin1 */ 0, 0x1EE, 0, - IVCF_use_AUX_TABLE_7, + IVCF_use_AUX_TABLE_8, 0, 0x1F4, 0, @@ -31562,24 +31922,24 @@ static const I32 _Perl_IVCF_invmap[] = { /* for ASCII/Latin1 */ 0x388, 0x1FE3, 0x391, - IVCF_use_AUX_TABLE_8, - 0x393, IVCF_use_AUX_TABLE_9, - 0x396, + 0x393, IVCF_use_AUX_TABLE_10, + 0x396, IVCF_use_AUX_TABLE_11, IVCF_use_AUX_TABLE_12, - 0x39B, IVCF_use_AUX_TABLE_13, - 0x39D, + 0x39B, IVCF_use_AUX_TABLE_14, + 0x39D, IVCF_use_AUX_TABLE_15, - 0, IVCF_use_AUX_TABLE_16, - 0x3A4, + 0, IVCF_use_AUX_TABLE_17, - 0x3A7, + 0x3A4, IVCF_use_AUX_TABLE_18, + 0x3A7, + IVCF_use_AUX_TABLE_19, 0x3AA, 0x38C, 0x38E, @@ -31618,22 +31978,22 @@ static const I32 _Perl_IVCF_invmap[] = { /* for ASCII/Latin1 */ 0x3FA, 0, 0x410, - IVCF_use_AUX_TABLE_19, - 0x413, IVCF_use_AUX_TABLE_20, - 0x415, + 0x413, IVCF_use_AUX_TABLE_21, - 0x41F, + 0x415, IVCF_use_AUX_TABLE_22, + 0x41F, IVCF_use_AUX_TABLE_23, - 0x423, IVCF_use_AUX_TABLE_24, + 0x423, + IVCF_use_AUX_TABLE_25, 0x42B, 0x400, 0, 0x460, 0, - IVCF_use_AUX_TABLE_25, + IVCF_use_AUX_TABLE_26, 0, 0x464, 0, @@ -31941,7 +32301,7 @@ static const I32 _Perl_IVCF_invmap[] = { /* for ASCII/Latin1 */ 0, 0x1E5E, 0, - IVCF_use_AUX_TABLE_26, + IVCF_use_AUX_TABLE_27, 0, 0x1E62, 0, @@ -32296,7 +32656,7 @@ static const I32 _Perl_IVCF_invmap[] = { /* for ASCII/Latin1 */ 0, 0xA648, 0, - IVCF_use_AUX_TABLE_27, + IVCF_use_AUX_TABLE_28, 0, 0xA64C, 0, @@ -32489,12 +32849,20 @@ static const I32 _Perl_IVCF_invmap[] = { /* for ASCII/Latin1 */ 0, 0xA7BE, 0, + 0xA7C0, + 0, 0xA7C2, 0, 0xA7C7, 0, 0xA7C9, 0, + 0xA7D0, + 0, + 0xA7D6, + 0, + 0xA7D8, + 0, 0xA7F5, 0, 0xA7B3, @@ -32508,6 +32876,14 @@ static const I32 _Perl_IVCF_invmap[] = { /* for ASCII/Latin1 */ 0, 0x104B0, 0, + 0x10570, + 0, + 0x1057C, + 0, + 0x1058C, + 0, + 0x10594, + 0, 0x10C80, 0, 0x118A0, @@ -32530,7 +32906,7 @@ static const I32 _Perl_IVCF_invmap[] = { /* for ASCII/Latin1 */ && '$' == 91 && '@' == 124 && '`' == 121 && '\n' == 21 static const UV _Perl_IVCF_invlist[] = { /* for EBCDIC 1047 */ - 1331, /* Number of elements */ + 1349, /* Number of elements */ 148565664, /* Version and data structure type */ 0, /* 0 if the list starts at 0; 1 if it starts at the element beyond 0 */ @@ -32556,6 +32932,8 @@ static const UV _Perl_IVCF_invlist[] = { /* for EBCDIC 1047 */ 0x9A, 0x9C, 0x9D, + 0xA0, + 0xA1, 0xA2, 0xA3, 0xAA, @@ -33507,7 +33885,7 @@ static const UV _Perl_IVCF_invlist[] = { /* for EBCDIC 1047 */ 0x24D0, 0x24EA, 0x2C30, - 0x2C5F, + 0x2C60, 0x2C61, 0x2C62, 0x2C65, @@ -33838,12 +34216,20 @@ static const UV _Perl_IVCF_invlist[] = { /* for EBCDIC 1047 */ 0xA7BE, 0xA7BF, 0xA7C0, + 0xA7C1, + 0xA7C2, 0xA7C3, 0xA7C4, 0xA7C8, 0xA7C9, 0xA7CA, 0xA7CB, + 0xA7D1, + 0xA7D2, + 0xA7D7, + 0xA7D8, + 0xA7D9, + 0xA7DA, 0xA7F6, 0xA7F7, 0xAB53, @@ -33857,6 +34243,14 @@ static const UV _Perl_IVCF_invlist[] = { /* for EBCDIC 1047 */ 0x10450, 0x104D8, 0x104FC, + 0x10597, + 0x105A2, + 0x105A3, + 0x105B2, + 0x105B3, + 0x105BA, + 0x105BB, + 0x105BD, 0x10CC0, 0x10CF3, 0x118C0, @@ -33910,7 +34304,8 @@ typedef enum { IVCF_use_AUX_TABLE_24 = -24, IVCF_use_AUX_TABLE_25 = -25, IVCF_use_AUX_TABLE_26 = -26, - IVCF_use_AUX_TABLE_27 = -27 + IVCF_use_AUX_TABLE_27 = -27, + IVCF_use_AUX_TABLE_28 = -28 } IVCF_enum; #define HAS_IVCF_AUX_TABLES @@ -33926,129 +34321,134 @@ static const U32 IVCF_AUX_TABLE_2[] = { }; static const U32 IVCF_AUX_TABLE_3[] = { + 0x39C, + 0x3BC +}; + +static const U32 IVCF_AUX_TABLE_4[] = { 0xE2, 0x17F }; -static const U32 IVCF_AUX_TABLE_4[] = { +static const U32 IVCF_AUX_TABLE_5[] = { 0x1C4, 0x1C5 }; -static const U32 IVCF_AUX_TABLE_5[] = { +static const U32 IVCF_AUX_TABLE_6[] = { 0x1C7, 0x1C8 }; -static const U32 IVCF_AUX_TABLE_6[] = { +static const U32 IVCF_AUX_TABLE_7[] = { 0x1CA, 0x1CB }; -static const U32 IVCF_AUX_TABLE_7[] = { +static const U32 IVCF_AUX_TABLE_8[] = { 0x1F1, 0x1F2 }; -static const U32 IVCF_AUX_TABLE_8[] = { +static const U32 IVCF_AUX_TABLE_9[] = { 0x392, 0x3D0 }; -static const U32 IVCF_AUX_TABLE_9[] = { +static const U32 IVCF_AUX_TABLE_10[] = { 0x395, 0x3F5 }; -static const U32 IVCF_AUX_TABLE_10[] = { +static const U32 IVCF_AUX_TABLE_11[] = { 0x398, 0x3D1, 0x3F4 }; -static const U32 IVCF_AUX_TABLE_11[] = { +static const U32 IVCF_AUX_TABLE_12[] = { 0x345, 0x399, 0x1FBE }; -static const U32 IVCF_AUX_TABLE_12[] = { +static const U32 IVCF_AUX_TABLE_13[] = { 0x39A, 0x3F0 }; -static const U32 IVCF_AUX_TABLE_13[] = { +static const U32 IVCF_AUX_TABLE_14[] = { 0xA0, 0x39C }; -static const U32 IVCF_AUX_TABLE_14[] = { +static const U32 IVCF_AUX_TABLE_15[] = { 0x3A0, 0x3D6 }; -static const U32 IVCF_AUX_TABLE_15[] = { +static const U32 IVCF_AUX_TABLE_16[] = { 0x3A1, 0x3F1 }; -static const U32 IVCF_AUX_TABLE_16[] = { +static const U32 IVCF_AUX_TABLE_17[] = { 0x3A3, 0x3C2 }; -static const U32 IVCF_AUX_TABLE_17[] = { +static const U32 IVCF_AUX_TABLE_18[] = { 0x3A6, 0x3D5 }; -static const U32 IVCF_AUX_TABLE_18[] = { +static const U32 IVCF_AUX_TABLE_19[] = { 0x3A9, 0x2126 }; -static const U32 IVCF_AUX_TABLE_19[] = { +static const U32 IVCF_AUX_TABLE_20[] = { 0x412, 0x1C80 }; -static const U32 IVCF_AUX_TABLE_20[] = { +static const U32 IVCF_AUX_TABLE_21[] = { 0x414, 0x1C81 }; -static const U32 IVCF_AUX_TABLE_21[] = { +static const U32 IVCF_AUX_TABLE_22[] = { 0x41E, 0x1C82 }; -static const U32 IVCF_AUX_TABLE_22[] = { +static const U32 IVCF_AUX_TABLE_23[] = { 0x421, 0x1C83 }; -static const U32 IVCF_AUX_TABLE_23[] = { +static const U32 IVCF_AUX_TABLE_24[] = { 0x422, 0x1C84, 0x1C85 }; -static const U32 IVCF_AUX_TABLE_24[] = { +static const U32 IVCF_AUX_TABLE_25[] = { 0x42A, 0x1C86 }; -static const U32 IVCF_AUX_TABLE_25[] = { +static const U32 IVCF_AUX_TABLE_26[] = { 0x462, 0x1C87 }; -static const U32 IVCF_AUX_TABLE_26[] = { +static const U32 IVCF_AUX_TABLE_27[] = { 0x1E60, 0x1E9B }; -static const U32 IVCF_AUX_TABLE_27[] = { +static const U32 IVCF_AUX_TABLE_28[] = { 0x1C88, 0xA64A }; @@ -34081,7 +34481,8 @@ static const U32 * const IVCF_AUX_TABLE_ptrs[] = { IVCF_AUX_TABLE_24, IVCF_AUX_TABLE_25, IVCF_AUX_TABLE_26, - IVCF_AUX_TABLE_27 + IVCF_AUX_TABLE_27, + IVCF_AUX_TABLE_28 }; /* Parallel table to the above, giving the number of elements in each table @@ -34098,9 +34499,9 @@ static const U8 IVCF_AUX_TABLE_lengths[] = { 2 /* IVCF_AUX_TABLE_7 */, 2 /* IVCF_AUX_TABLE_8 */, 2 /* IVCF_AUX_TABLE_9 */, - 3 /* IVCF_AUX_TABLE_10 */, + 2 /* IVCF_AUX_TABLE_10 */, 3 /* IVCF_AUX_TABLE_11 */, - 2 /* IVCF_AUX_TABLE_12 */, + 3 /* IVCF_AUX_TABLE_12 */, 2 /* IVCF_AUX_TABLE_13 */, 2 /* IVCF_AUX_TABLE_14 */, 2 /* IVCF_AUX_TABLE_15 */, @@ -34111,11 +34512,12 @@ static const U8 IVCF_AUX_TABLE_lengths[] = { 2 /* IVCF_AUX_TABLE_20 */, 2 /* IVCF_AUX_TABLE_21 */, 2 /* IVCF_AUX_TABLE_22 */, - 3 /* IVCF_AUX_TABLE_23 */, - 2 /* IVCF_AUX_TABLE_24 */, + 2 /* IVCF_AUX_TABLE_23 */, + 3 /* IVCF_AUX_TABLE_24 */, 2 /* IVCF_AUX_TABLE_25 */, 2 /* IVCF_AUX_TABLE_26 */, - 2 /* IVCF_AUX_TABLE_27 */ + 2 /* IVCF_AUX_TABLE_27 */, + 2 /* IVCF_AUX_TABLE_28 */ }; static const I32 _Perl_IVCF_invmap[] = { /* for EBCDIC 1047 */ @@ -34142,6 +34544,8 @@ static const I32 _Perl_IVCF_invmap[] = { /* for EBCDIC 1047 */ 0x9E, 0, IVCF_use_AUX_TABLE_3, + 0, + IVCF_use_AUX_TABLE_4, 0xE3, 0, 0xEB, @@ -34312,12 +34716,12 @@ static const I32 _Perl_IVCF_invmap[] = { /* for EBCDIC 1047 */ 0, 0x1F7, 0, - IVCF_use_AUX_TABLE_4, - 0, IVCF_use_AUX_TABLE_5, 0, IVCF_use_AUX_TABLE_6, 0, + IVCF_use_AUX_TABLE_7, + 0, 0x1CD, 0, 0x1CF, @@ -34353,7 +34757,7 @@ static const I32 _Perl_IVCF_invmap[] = { /* for EBCDIC 1047 */ 0, 0x1EE, 0, - IVCF_use_AUX_TABLE_7, + IVCF_use_AUX_TABLE_8, 0, 0x1F4, 0, @@ -34496,24 +34900,24 @@ static const I32 _Perl_IVCF_invmap[] = { /* for EBCDIC 1047 */ 0x388, 0x1FE3, 0x391, - IVCF_use_AUX_TABLE_8, - 0x393, IVCF_use_AUX_TABLE_9, - 0x396, + 0x393, IVCF_use_AUX_TABLE_10, + 0x396, IVCF_use_AUX_TABLE_11, IVCF_use_AUX_TABLE_12, - 0x39B, IVCF_use_AUX_TABLE_13, - 0x39D, + 0x39B, IVCF_use_AUX_TABLE_14, + 0x39D, IVCF_use_AUX_TABLE_15, - 0, IVCF_use_AUX_TABLE_16, - 0x3A4, + 0, IVCF_use_AUX_TABLE_17, - 0x3A7, + 0x3A4, IVCF_use_AUX_TABLE_18, + 0x3A7, + IVCF_use_AUX_TABLE_19, 0x3AA, 0x38C, 0x38E, @@ -34552,22 +34956,22 @@ static const I32 _Perl_IVCF_invmap[] = { /* for EBCDIC 1047 */ 0x3FA, 0, 0x410, - IVCF_use_AUX_TABLE_19, - 0x413, IVCF_use_AUX_TABLE_20, - 0x415, + 0x413, IVCF_use_AUX_TABLE_21, - 0x41F, + 0x415, IVCF_use_AUX_TABLE_22, + 0x41F, IVCF_use_AUX_TABLE_23, - 0x423, IVCF_use_AUX_TABLE_24, + 0x423, + IVCF_use_AUX_TABLE_25, 0x42B, 0x400, 0, 0x460, 0, - IVCF_use_AUX_TABLE_25, + IVCF_use_AUX_TABLE_26, 0, 0x464, 0, @@ -34875,7 +35279,7 @@ static const I32 _Perl_IVCF_invmap[] = { /* for EBCDIC 1047 */ 0, 0x1E5E, 0, - IVCF_use_AUX_TABLE_26, + IVCF_use_AUX_TABLE_27, 0, 0x1E62, 0, @@ -35230,7 +35634,7 @@ static const I32 _Perl_IVCF_invmap[] = { /* for EBCDIC 1047 */ 0, 0xA648, 0, - IVCF_use_AUX_TABLE_27, + IVCF_use_AUX_TABLE_28, 0, 0xA64C, 0, @@ -35423,12 +35827,20 @@ static const I32 _Perl_IVCF_invmap[] = { /* for EBCDIC 1047 */ 0, 0xA7BE, 0, + 0xA7C0, + 0, 0xA7C2, 0, 0xA7C7, 0, 0xA7C9, 0, + 0xA7D0, + 0, + 0xA7D6, + 0, + 0xA7D8, + 0, 0xA7F5, 0, 0xA7B3, @@ -35442,6 +35854,14 @@ static const I32 _Perl_IVCF_invmap[] = { /* for EBCDIC 1047 */ 0, 0x104B0, 0, + 0x10570, + 0, + 0x1057C, + 0, + 0x1058C, + 0, + 0x10594, + 0, 0x10C80, 0, 0x118A0, @@ -35464,7 +35884,7 @@ static const I32 _Perl_IVCF_invmap[] = { /* for EBCDIC 1047 */ && '$' == 91 && '@' == 124 && '`' == 121 && '\n' == 37 static const UV _Perl_IVCF_invlist[] = { /* for EBCDIC 037 */ - 1329, /* Number of elements */ + 1347, /* Number of elements */ 148565664, /* Version and data structure type */ 0, /* 0 if the list starts at 0; 1 if it starts at the element beyond 0 */ @@ -35488,6 +35908,8 @@ static const UV _Perl_IVCF_invlist[] = { /* for EBCDIC 037 */ 0x9A, 0x9C, 0x9D, + 0xA0, + 0xA1, 0xA2, 0xA3, 0xAA, @@ -36439,7 +36861,7 @@ static const UV _Perl_IVCF_invlist[] = { /* for EBCDIC 037 */ 0x24D0, 0x24EA, 0x2C30, - 0x2C5F, + 0x2C60, 0x2C61, 0x2C62, 0x2C65, @@ -36770,12 +37192,20 @@ static const UV _Perl_IVCF_invlist[] = { /* for EBCDIC 037 */ 0xA7BE, 0xA7BF, 0xA7C0, + 0xA7C1, + 0xA7C2, 0xA7C3, 0xA7C4, 0xA7C8, 0xA7C9, 0xA7CA, 0xA7CB, + 0xA7D1, + 0xA7D2, + 0xA7D7, + 0xA7D8, + 0xA7D9, + 0xA7DA, 0xA7F6, 0xA7F7, 0xAB53, @@ -36789,6 +37219,14 @@ static const UV _Perl_IVCF_invlist[] = { /* for EBCDIC 037 */ 0x10450, 0x104D8, 0x104FC, + 0x10597, + 0x105A2, + 0x105A3, + 0x105B2, + 0x105B3, + 0x105BA, + 0x105BB, + 0x105BD, 0x10CC0, 0x10CF3, 0x118C0, @@ -36842,7 +37280,8 @@ typedef enum { IVCF_use_AUX_TABLE_24 = -24, IVCF_use_AUX_TABLE_25 = -25, IVCF_use_AUX_TABLE_26 = -26, - IVCF_use_AUX_TABLE_27 = -27 + IVCF_use_AUX_TABLE_27 = -27, + IVCF_use_AUX_TABLE_28 = -28 } IVCF_enum; #define HAS_IVCF_AUX_TABLES @@ -36858,129 +37297,134 @@ static const U32 IVCF_AUX_TABLE_2[] = { }; static const U32 IVCF_AUX_TABLE_3[] = { + 0x39C, + 0x3BC +}; + +static const U32 IVCF_AUX_TABLE_4[] = { 0xE2, 0x17F }; -static const U32 IVCF_AUX_TABLE_4[] = { +static const U32 IVCF_AUX_TABLE_5[] = { 0x1C4, 0x1C5 }; -static const U32 IVCF_AUX_TABLE_5[] = { +static const U32 IVCF_AUX_TABLE_6[] = { 0x1C7, 0x1C8 }; -static const U32 IVCF_AUX_TABLE_6[] = { +static const U32 IVCF_AUX_TABLE_7[] = { 0x1CA, 0x1CB }; -static const U32 IVCF_AUX_TABLE_7[] = { +static const U32 IVCF_AUX_TABLE_8[] = { 0x1F1, 0x1F2 }; -static const U32 IVCF_AUX_TABLE_8[] = { +static const U32 IVCF_AUX_TABLE_9[] = { 0x392, 0x3D0 }; -static const U32 IVCF_AUX_TABLE_9[] = { +static const U32 IVCF_AUX_TABLE_10[] = { 0x395, 0x3F5 }; -static const U32 IVCF_AUX_TABLE_10[] = { +static const U32 IVCF_AUX_TABLE_11[] = { 0x398, 0x3D1, 0x3F4 }; -static const U32 IVCF_AUX_TABLE_11[] = { +static const U32 IVCF_AUX_TABLE_12[] = { 0x345, 0x399, 0x1FBE }; -static const U32 IVCF_AUX_TABLE_12[] = { +static const U32 IVCF_AUX_TABLE_13[] = { 0x39A, 0x3F0 }; -static const U32 IVCF_AUX_TABLE_13[] = { +static const U32 IVCF_AUX_TABLE_14[] = { 0xA0, 0x39C }; -static const U32 IVCF_AUX_TABLE_14[] = { +static const U32 IVCF_AUX_TABLE_15[] = { 0x3A0, 0x3D6 }; -static const U32 IVCF_AUX_TABLE_15[] = { +static const U32 IVCF_AUX_TABLE_16[] = { 0x3A1, 0x3F1 }; -static const U32 IVCF_AUX_TABLE_16[] = { +static const U32 IVCF_AUX_TABLE_17[] = { 0x3A3, 0x3C2 }; -static const U32 IVCF_AUX_TABLE_17[] = { +static const U32 IVCF_AUX_TABLE_18[] = { 0x3A6, 0x3D5 }; -static const U32 IVCF_AUX_TABLE_18[] = { +static const U32 IVCF_AUX_TABLE_19[] = { 0x3A9, 0x2126 }; -static const U32 IVCF_AUX_TABLE_19[] = { +static const U32 IVCF_AUX_TABLE_20[] = { 0x412, 0x1C80 }; -static const U32 IVCF_AUX_TABLE_20[] = { +static const U32 IVCF_AUX_TABLE_21[] = { 0x414, 0x1C81 }; -static const U32 IVCF_AUX_TABLE_21[] = { +static const U32 IVCF_AUX_TABLE_22[] = { 0x41E, 0x1C82 }; -static const U32 IVCF_AUX_TABLE_22[] = { +static const U32 IVCF_AUX_TABLE_23[] = { 0x421, 0x1C83 }; -static const U32 IVCF_AUX_TABLE_23[] = { +static const U32 IVCF_AUX_TABLE_24[] = { 0x422, 0x1C84, 0x1C85 }; -static const U32 IVCF_AUX_TABLE_24[] = { +static const U32 IVCF_AUX_TABLE_25[] = { 0x42A, 0x1C86 }; -static const U32 IVCF_AUX_TABLE_25[] = { +static const U32 IVCF_AUX_TABLE_26[] = { 0x462, 0x1C87 }; -static const U32 IVCF_AUX_TABLE_26[] = { +static const U32 IVCF_AUX_TABLE_27[] = { 0x1E60, 0x1E9B }; -static const U32 IVCF_AUX_TABLE_27[] = { +static const U32 IVCF_AUX_TABLE_28[] = { 0x1C88, 0xA64A }; @@ -37013,7 +37457,8 @@ static const U32 * const IVCF_AUX_TABLE_ptrs[] = { IVCF_AUX_TABLE_24, IVCF_AUX_TABLE_25, IVCF_AUX_TABLE_26, - IVCF_AUX_TABLE_27 + IVCF_AUX_TABLE_27, + IVCF_AUX_TABLE_28 }; /* Parallel table to the above, giving the number of elements in each table @@ -37030,9 +37475,9 @@ static const U8 IVCF_AUX_TABLE_lengths[] = { 2 /* IVCF_AUX_TABLE_7 */, 2 /* IVCF_AUX_TABLE_8 */, 2 /* IVCF_AUX_TABLE_9 */, - 3 /* IVCF_AUX_TABLE_10 */, + 2 /* IVCF_AUX_TABLE_10 */, 3 /* IVCF_AUX_TABLE_11 */, - 2 /* IVCF_AUX_TABLE_12 */, + 3 /* IVCF_AUX_TABLE_12 */, 2 /* IVCF_AUX_TABLE_13 */, 2 /* IVCF_AUX_TABLE_14 */, 2 /* IVCF_AUX_TABLE_15 */, @@ -37043,11 +37488,12 @@ static const U8 IVCF_AUX_TABLE_lengths[] = { 2 /* IVCF_AUX_TABLE_20 */, 2 /* IVCF_AUX_TABLE_21 */, 2 /* IVCF_AUX_TABLE_22 */, - 3 /* IVCF_AUX_TABLE_23 */, - 2 /* IVCF_AUX_TABLE_24 */, + 2 /* IVCF_AUX_TABLE_23 */, + 3 /* IVCF_AUX_TABLE_24 */, 2 /* IVCF_AUX_TABLE_25 */, 2 /* IVCF_AUX_TABLE_26 */, - 2 /* IVCF_AUX_TABLE_27 */ + 2 /* IVCF_AUX_TABLE_27 */, + 2 /* IVCF_AUX_TABLE_28 */ }; static const I32 _Perl_IVCF_invmap[] = { /* for EBCDIC 037 */ @@ -37072,6 +37518,8 @@ static const I32 _Perl_IVCF_invmap[] = { /* for EBCDIC 037 */ 0x9E, 0, IVCF_use_AUX_TABLE_3, + 0, + IVCF_use_AUX_TABLE_4, 0xE3, 0, 0xEB, @@ -37242,12 +37690,12 @@ static const I32 _Perl_IVCF_invmap[] = { /* for EBCDIC 037 */ 0, 0x1F7, 0, - IVCF_use_AUX_TABLE_4, - 0, IVCF_use_AUX_TABLE_5, 0, IVCF_use_AUX_TABLE_6, 0, + IVCF_use_AUX_TABLE_7, + 0, 0x1CD, 0, 0x1CF, @@ -37283,7 +37731,7 @@ static const I32 _Perl_IVCF_invmap[] = { /* for EBCDIC 037 */ 0, 0x1EE, 0, - IVCF_use_AUX_TABLE_7, + IVCF_use_AUX_TABLE_8, 0, 0x1F4, 0, @@ -37426,24 +37874,24 @@ static const I32 _Perl_IVCF_invmap[] = { /* for EBCDIC 037 */ 0x388, 0x1FE3, 0x391, - IVCF_use_AUX_TABLE_8, - 0x393, IVCF_use_AUX_TABLE_9, - 0x396, + 0x393, IVCF_use_AUX_TABLE_10, + 0x396, IVCF_use_AUX_TABLE_11, IVCF_use_AUX_TABLE_12, - 0x39B, IVCF_use_AUX_TABLE_13, - 0x39D, + 0x39B, IVCF_use_AUX_TABLE_14, + 0x39D, IVCF_use_AUX_TABLE_15, - 0, IVCF_use_AUX_TABLE_16, - 0x3A4, + 0, IVCF_use_AUX_TABLE_17, - 0x3A7, + 0x3A4, IVCF_use_AUX_TABLE_18, + 0x3A7, + IVCF_use_AUX_TABLE_19, 0x3AA, 0x38C, 0x38E, @@ -37482,22 +37930,22 @@ static const I32 _Perl_IVCF_invmap[] = { /* for EBCDIC 037 */ 0x3FA, 0, 0x410, - IVCF_use_AUX_TABLE_19, - 0x413, IVCF_use_AUX_TABLE_20, - 0x415, + 0x413, IVCF_use_AUX_TABLE_21, - 0x41F, + 0x415, IVCF_use_AUX_TABLE_22, + 0x41F, IVCF_use_AUX_TABLE_23, - 0x423, IVCF_use_AUX_TABLE_24, + 0x423, + IVCF_use_AUX_TABLE_25, 0x42B, 0x400, 0, 0x460, 0, - IVCF_use_AUX_TABLE_25, + IVCF_use_AUX_TABLE_26, 0, 0x464, 0, @@ -37805,7 +38253,7 @@ static const I32 _Perl_IVCF_invmap[] = { /* for EBCDIC 037 */ 0, 0x1E5E, 0, - IVCF_use_AUX_TABLE_26, + IVCF_use_AUX_TABLE_27, 0, 0x1E62, 0, @@ -38160,7 +38608,7 @@ static const I32 _Perl_IVCF_invmap[] = { /* for EBCDIC 037 */ 0, 0xA648, 0, - IVCF_use_AUX_TABLE_27, + IVCF_use_AUX_TABLE_28, 0, 0xA64C, 0, @@ -38353,12 +38801,20 @@ static const I32 _Perl_IVCF_invmap[] = { /* for EBCDIC 037 */ 0, 0xA7BE, 0, + 0xA7C0, + 0, 0xA7C2, 0, 0xA7C7, 0, 0xA7C9, 0, + 0xA7D0, + 0, + 0xA7D6, + 0, + 0xA7D8, + 0, 0xA7F5, 0, 0xA7B3, @@ -38372,6 +38828,14 @@ static const I32 _Perl_IVCF_invmap[] = { /* for EBCDIC 037 */ 0, 0x104B0, 0, + 0x10570, + 0, + 0x1057C, + 0, + 0x1058C, + 0, + 0x10594, + 0, 0x10C80, 0, 0x118A0, @@ -38391,7 +38855,7 @@ static const I32 _Perl_IVCF_invmap[] = { /* for EBCDIC 037 */ # if 'A' == 65 /* ASCII/Latin1 */ static const UV _Perl_LB_invlist[] = { /* for ASCII/Latin1 */ - 2416, /* Number of elements */ + 2501, /* Number of elements */ 148565664, /* Version and data structure type */ 0, /* 0 if the list starts at 0; 1 if it starts at the element beyond 0 */ @@ -38493,7 +38957,6 @@ static const UV _Perl_LB_invlist[] = { /* for ASCII/Latin1 */ 0x61B, 0x61C, 0x61D, - 0x61E, 0x620, 0x64B, 0x660, @@ -38540,7 +39003,9 @@ static const UV _Perl_LB_invlist[] = { /* for ASCII/Latin1 */ 0x82E, 0x859, 0x85C, - 0x8D3, + 0x898, + 0x8A0, + 0x8CA, 0x8E2, 0x8E3, 0x904, @@ -38645,6 +39110,8 @@ static const UV _Perl_LB_invlist[] = { /* for ASCII/Latin1 */ 0xBFA, 0xC00, 0xC05, + 0xC3C, + 0xC3D, 0xC3E, 0xC45, 0xC46, @@ -38814,7 +39281,7 @@ static const UV _Perl_LB_invlist[] = { /* for ASCII/Latin1 */ 0x16EB, 0x16EE, 0x1712, - 0x1715, + 0x1716, 0x1732, 0x1735, 0x1737, @@ -38871,7 +39338,7 @@ static const UV _Perl_LB_invlist[] = { /* for ASCII/Latin1 */ 0x1A90, 0x1A9A, 0x1AB0, - 0x1AC1, + 0x1ACF, 0x1B00, 0x1B05, 0x1B34, @@ -38883,6 +39350,8 @@ static const UV _Perl_LB_invlist[] = { /* for ASCII/Latin1 */ 0x1B61, 0x1B6B, 0x1B74, + 0x1B7D, + 0x1B7F, 0x1B80, 0x1B83, 0x1BA1, @@ -38911,8 +39380,6 @@ static const UV _Perl_LB_invlist[] = { /* for ASCII/Latin1 */ 0x1CF7, 0x1CFA, 0x1DC0, - 0x1DFA, - 0x1DFB, 0x1E00, 0x1FFD, 0x1FFE, @@ -38974,6 +39441,8 @@ static const UV _Perl_LB_invlist[] = { /* for ASCII/Latin1 */ 0x20BC, 0x20BE, 0x20BF, + 0x20C0, + 0x20C1, 0x20D0, 0x20F1, 0x2103, @@ -39155,6 +39624,17 @@ static const UV _Perl_LB_invlist[] = { /* for ASCII/Latin1 */ 0x2E4D, 0x2E4E, 0x2E50, + 0x2E53, + 0x2E55, + 0x2E56, + 0x2E57, + 0x2E58, + 0x2E59, + 0x2E5A, + 0x2E5B, + 0x2E5C, + 0x2E5D, + 0x2E5E, 0x2E80, 0x2E9A, 0x2E9B, @@ -40342,6 +40822,8 @@ static const UV _Perl_LB_invlist[] = { /* for ASCII/Latin1 */ 0x10EAE, 0x10F46, 0x10F51, + 0x10F82, + 0x10F86, 0x11000, 0x11003, 0x11038, @@ -40349,12 +40831,16 @@ static const UV _Perl_LB_invlist[] = { /* for ASCII/Latin1 */ 0x11049, 0x11066, 0x11070, + 0x11071, + 0x11073, + 0x11075, 0x1107F, 0x11083, 0x110B0, 0x110BB, 0x110BE, 0x110C2, + 0x110C3, 0x110F0, 0x110FA, 0x11100, @@ -40570,6 +41056,8 @@ static const UV _Perl_LB_invlist[] = { /* for ASCII/Latin1 */ 0x16A6A, 0x16A6E, 0x16A70, + 0x16AC0, + 0x16ACA, 0x16AF0, 0x16AF5, 0x16AF6, @@ -40600,7 +41088,7 @@ static const UV _Perl_LB_invlist[] = { /* for ASCII/Latin1 */ 0x18D00, 0x18D09, 0x1B000, - 0x1B11F, + 0x1B123, 0x1B150, 0x1B153, 0x1B164, @@ -40611,6 +41099,10 @@ static const UV _Perl_LB_invlist[] = { /* for ASCII/Latin1 */ 0x1BC9F, 0x1BCA0, 0x1BCA4, + 0x1CF00, + 0x1CF2E, + 0x1CF30, + 0x1CF47, 0x1D165, 0x1D16A, 0x1D16D, @@ -40651,6 +41143,8 @@ static const UV _Perl_LB_invlist[] = { /* for ASCII/Latin1 */ 0x1E137, 0x1E140, 0x1E14A, + 0x1E2AE, + 0x1E2AF, 0x1E2EC, 0x1E2F0, 0x1E2FA, @@ -40669,14 +41163,36 @@ static const UV _Perl_LB_invlist[] = { /* for ASCII/Latin1 */ 0x1ECB0, 0x1ECB1, 0x1F000, + 0x1F02C, + 0x1F030, + 0x1F094, + 0x1F0A0, + 0x1F0AF, + 0x1F0B1, + 0x1F0C0, + 0x1F0C1, + 0x1F0D0, + 0x1F0D1, + 0x1F0F6, 0x1F100, 0x1F10D, 0x1F110, 0x1F16D, 0x1F170, 0x1F1AD, + 0x1F1AE, 0x1F1E6, 0x1F200, + 0x1F203, + 0x1F210, + 0x1F23C, + 0x1F240, + 0x1F249, + 0x1F250, + 0x1F252, + 0x1F260, + 0x1F266, + 0x1F300, 0x1F385, 0x1F386, 0x1F39C, @@ -40755,10 +41271,20 @@ static const UV _Perl_LB_invlist[] = { /* for ASCII/Latin1 */ 0x1F6C1, 0x1F6CC, 0x1F6CD, + 0x1F6D8, + 0x1F6DD, + 0x1F6ED, + 0x1F6F0, + 0x1F6FD, 0x1F700, 0x1F774, 0x1F780, 0x1F7D5, + 0x1F7D9, + 0x1F7E0, + 0x1F7EC, + 0x1F7F0, + 0x1F7F1, 0x1F800, 0x1F80C, 0x1F810, @@ -40769,6 +41295,8 @@ static const UV _Perl_LB_invlist[] = { /* for ASCII/Latin1 */ 0x1F888, 0x1F890, 0x1F8AE, + 0x1F8B0, + 0x1F8B2, 0x1F900, 0x1F90C, 0x1F90D, @@ -40796,6 +41324,27 @@ static const UV _Perl_LB_invlist[] = { /* for ASCII/Latin1 */ 0x1F9DE, 0x1FA00, 0x1FA54, + 0x1FA60, + 0x1FA6E, + 0x1FA70, + 0x1FA75, + 0x1FA78, + 0x1FA7D, + 0x1FA80, + 0x1FA87, + 0x1FA90, + 0x1FAAD, + 0x1FAB0, + 0x1FABB, + 0x1FAC0, + 0x1FAC3, + 0x1FAC6, + 0x1FAD0, + 0x1FADA, + 0x1FAE0, + 0x1FAE8, + 0x1FAF0, + 0x1FAF7, 0x1FB00, 0x1FBF0, 0x1FBFA, @@ -40859,10 +41408,11 @@ typedef enum { LB_Regional_Indicator = 34, LB_Space = 35, LB_Break_Symbols = 36, - LB_Word_Joiner = 37, - LB_ZWSpace = 38, - LB_ZWJ = 39, - LB_East_Asian_CP = 40 + LB_Unassigned_Extended_Pictographic_Ideographic = 37, + LB_Word_Joiner = 38, + LB_ZWSpace = 39, + LB_ZWJ = 40, + LB_East_Asian_CP = 41 } LB_enum; static const LB_enum _Perl_LB_invmap[] = { /* for ASCII/Latin1 */ @@ -40963,7 +41513,6 @@ static const LB_enum _Perl_LB_invmap[] = { /* for ASCII/Latin1 */ LB_Combining_Mark, LB_Exclamation, LB_Combining_Mark, - LB_Alphabetic, LB_Exclamation, LB_Alphabetic, LB_Combining_Mark, @@ -41022,6 +41571,8 @@ static const LB_enum _Perl_LB_invmap[] = { /* for ASCII/Latin1 */ LB_Combining_Mark, LB_Alphabetic, LB_Combining_Mark, + LB_Alphabetic, + LB_Combining_Mark, LB_Break_After, LB_Numeric, LB_Alphabetic, @@ -41126,6 +41677,8 @@ static const LB_enum _Perl_LB_invmap[] = { /* for ASCII/Latin1 */ LB_Alphabetic, LB_Combining_Mark, LB_Alphabetic, + LB_Combining_Mark, + LB_Alphabetic, LB_Numeric, LB_Alphabetic, LB_Break_Before, @@ -41314,7 +41867,7 @@ static const LB_enum _Perl_LB_invmap[] = { /* for ASCII/Latin1 */ LB_Alphabetic, LB_Combining_Mark, LB_Glue, - LB_Alphabetic, + LB_Combining_Mark, LB_Numeric, LB_Alphabetic, LB_Combining_Mark, @@ -41354,6 +41907,8 @@ static const LB_enum _Perl_LB_invmap[] = { /* for ASCII/Latin1 */ LB_Alphabetic, LB_Combining_Mark, LB_Alphabetic, + LB_Break_After, + LB_Alphabetic, LB_Combining_Mark, LB_Alphabetic, LB_Combining_Mark, @@ -41383,8 +41938,6 @@ static const LB_enum _Perl_LB_invmap[] = { /* for ASCII/Latin1 */ LB_Alphabetic, LB_Combining_Mark, LB_Alphabetic, - LB_Combining_Mark, - LB_Alphabetic, LB_Break_Before, LB_Alphabetic, LB_Break_After, @@ -41445,6 +41998,8 @@ static const LB_enum _Perl_LB_invmap[] = { /* for ASCII/Latin1 */ LB_Prefix_Numeric, LB_Postfix_Numeric, LB_Prefix_Numeric, + LB_Postfix_Numeric, + LB_Prefix_Numeric, LB_Combining_Mark, LB_Alphabetic, LB_Postfix_Numeric, @@ -41626,6 +42181,17 @@ static const LB_enum _Perl_LB_invmap[] = { /* for ASCII/Latin1 */ LB_Alphabetic, LB_Break_After, LB_Alphabetic, + LB_Exclamation, + LB_Open_Punctuation, + LB_Close_Punctuation, + LB_Open_Punctuation, + LB_Close_Punctuation, + LB_Open_Punctuation, + LB_Close_Punctuation, + LB_Open_Punctuation, + LB_Close_Punctuation, + LB_Break_After, + LB_Alphabetic, LB_Ideographic, LB_Alphabetic, LB_Ideographic, @@ -42816,15 +43382,21 @@ static const LB_enum _Perl_LB_invmap[] = { /* for ASCII/Latin1 */ LB_Combining_Mark, LB_Alphabetic, LB_Combining_Mark, + LB_Alphabetic, + LB_Combining_Mark, LB_Break_After, LB_Alphabetic, LB_Numeric, + LB_Combining_Mark, + LB_Alphabetic, + LB_Combining_Mark, LB_Alphabetic, LB_Combining_Mark, LB_Alphabetic, LB_Combining_Mark, LB_Alphabetic, LB_Break_After, + LB_Combining_Mark, LB_Alphabetic, LB_Numeric, LB_Alphabetic, @@ -43041,6 +43613,8 @@ static const LB_enum _Perl_LB_invmap[] = { /* for ASCII/Latin1 */ LB_Alphabetic, LB_Break_After, LB_Alphabetic, + LB_Numeric, + LB_Alphabetic, LB_Combining_Mark, LB_Break_After, LB_Alphabetic, @@ -43092,6 +43666,10 @@ static const LB_enum _Perl_LB_invmap[] = { /* for ASCII/Latin1 */ LB_Alphabetic, LB_Combining_Mark, LB_Alphabetic, + LB_Combining_Mark, + LB_Alphabetic, + LB_Combining_Mark, + LB_Alphabetic, LB_Numeric, LB_Alphabetic, LB_Combining_Mark, @@ -43123,6 +43701,8 @@ static const LB_enum _Perl_LB_invmap[] = { /* for ASCII/Latin1 */ LB_Numeric, LB_Alphabetic, LB_Combining_Mark, + LB_Alphabetic, + LB_Combining_Mark, LB_Numeric, LB_Alphabetic, LB_Prefix_Numeric, @@ -43140,14 +43720,36 @@ static const LB_enum _Perl_LB_invmap[] = { /* for ASCII/Latin1 */ LB_Postfix_Numeric, LB_Alphabetic, LB_Ideographic, + LB_Unassigned_Extended_Pictographic_Ideographic, + LB_Ideographic, + LB_Unassigned_Extended_Pictographic_Ideographic, + LB_Ideographic, + LB_Unassigned_Extended_Pictographic_Ideographic, + LB_Ideographic, + LB_Unassigned_Extended_Pictographic_Ideographic, + LB_Ideographic, + LB_Unassigned_Extended_Pictographic_Ideographic, + LB_Ideographic, + LB_Unassigned_Extended_Pictographic_Ideographic, LB_Alphabetic, LB_Ideographic, LB_Alphabetic, LB_Ideographic, LB_Alphabetic, LB_Ideographic, + LB_Unassigned_Extended_Pictographic_Ideographic, LB_Regional_Indicator, LB_Ideographic, + LB_Unassigned_Extended_Pictographic_Ideographic, + LB_Ideographic, + LB_Unassigned_Extended_Pictographic_Ideographic, + LB_Ideographic, + LB_Unassigned_Extended_Pictographic_Ideographic, + LB_Ideographic, + LB_Unassigned_Extended_Pictographic_Ideographic, + LB_Ideographic, + LB_Unassigned_Extended_Pictographic_Ideographic, + LB_Ideographic, LB_E_Base, LB_Ideographic, LB_Alphabetic, @@ -43226,20 +43828,32 @@ static const LB_enum _Perl_LB_invmap[] = { /* for ASCII/Latin1 */ LB_Ideographic, LB_E_Base, LB_Ideographic, - LB_Alphabetic, + LB_Unassigned_Extended_Pictographic_Ideographic, LB_Ideographic, - LB_Alphabetic, + LB_Unassigned_Extended_Pictographic_Ideographic, LB_Ideographic, + LB_Unassigned_Extended_Pictographic_Ideographic, LB_Alphabetic, - LB_Ideographic, + LB_Unassigned_Extended_Pictographic_Ideographic, LB_Alphabetic, LB_Ideographic, - LB_Alphabetic, + LB_Unassigned_Extended_Pictographic_Ideographic, LB_Ideographic, - LB_Alphabetic, + LB_Unassigned_Extended_Pictographic_Ideographic, LB_Ideographic, + LB_Unassigned_Extended_Pictographic_Ideographic, LB_Alphabetic, + LB_Unassigned_Extended_Pictographic_Ideographic, + LB_Alphabetic, + LB_Unassigned_Extended_Pictographic_Ideographic, + LB_Alphabetic, + LB_Unassigned_Extended_Pictographic_Ideographic, + LB_Alphabetic, + LB_Unassigned_Extended_Pictographic_Ideographic, + LB_Alphabetic, + LB_Unassigned_Extended_Pictographic_Ideographic, LB_Ideographic, + LB_Unassigned_Extended_Pictographic_Ideographic, LB_Alphabetic, LB_E_Base, LB_Ideographic, @@ -43266,11 +43880,32 @@ static const LB_enum _Perl_LB_invmap[] = { /* for ASCII/Latin1 */ LB_E_Base, LB_Ideographic, LB_Alphabetic, + LB_Unassigned_Extended_Pictographic_Ideographic, + LB_Ideographic, + LB_Unassigned_Extended_Pictographic_Ideographic, + LB_Ideographic, + LB_Unassigned_Extended_Pictographic_Ideographic, + LB_Ideographic, + LB_Unassigned_Extended_Pictographic_Ideographic, + LB_Ideographic, + LB_Unassigned_Extended_Pictographic_Ideographic, + LB_Ideographic, + LB_Unassigned_Extended_Pictographic_Ideographic, LB_Ideographic, + LB_Unassigned_Extended_Pictographic_Ideographic, + LB_Ideographic, + LB_E_Base, + LB_Unassigned_Extended_Pictographic_Ideographic, + LB_Ideographic, + LB_Unassigned_Extended_Pictographic_Ideographic, + LB_Ideographic, + LB_Unassigned_Extended_Pictographic_Ideographic, + LB_E_Base, + LB_Unassigned_Extended_Pictographic_Ideographic, LB_Alphabetic, LB_Numeric, LB_Alphabetic, - LB_Ideographic, + LB_Unassigned_Extended_Pictographic_Ideographic, LB_Alphabetic, LB_Ideographic, LB_Alphabetic, @@ -43296,7 +43931,7 @@ static const LB_enum _Perl_LB_invmap[] = { /* for ASCII/Latin1 */ && '$' == 91 && '@' == 124 && '`' == 121 && '\n' == 21 static const UV _Perl_LB_invlist[] = { /* for EBCDIC 1047 */ - 2428, /* Number of elements */ + 2513, /* Number of elements */ 148565664, /* Version and data structure type */ 0, /* 0 if the list starts at 0; 1 if it starts at the element beyond 0 */ @@ -43410,7 +44045,6 @@ static const UV _Perl_LB_invlist[] = { /* for EBCDIC 1047 */ 0x61B, 0x61C, 0x61D, - 0x61E, 0x620, 0x64B, 0x660, @@ -43457,7 +44091,9 @@ static const UV _Perl_LB_invlist[] = { /* for EBCDIC 1047 */ 0x82E, 0x859, 0x85C, - 0x8D3, + 0x898, + 0x8A0, + 0x8CA, 0x8E2, 0x8E3, 0x904, @@ -43562,6 +44198,8 @@ static const UV _Perl_LB_invlist[] = { /* for EBCDIC 1047 */ 0xBFA, 0xC00, 0xC05, + 0xC3C, + 0xC3D, 0xC3E, 0xC45, 0xC46, @@ -43731,7 +44369,7 @@ static const UV _Perl_LB_invlist[] = { /* for EBCDIC 1047 */ 0x16EB, 0x16EE, 0x1712, - 0x1715, + 0x1716, 0x1732, 0x1735, 0x1737, @@ -43788,7 +44426,7 @@ static const UV _Perl_LB_invlist[] = { /* for EBCDIC 1047 */ 0x1A90, 0x1A9A, 0x1AB0, - 0x1AC1, + 0x1ACF, 0x1B00, 0x1B05, 0x1B34, @@ -43800,6 +44438,8 @@ static const UV _Perl_LB_invlist[] = { /* for EBCDIC 1047 */ 0x1B61, 0x1B6B, 0x1B74, + 0x1B7D, + 0x1B7F, 0x1B80, 0x1B83, 0x1BA1, @@ -43828,8 +44468,6 @@ static const UV _Perl_LB_invlist[] = { /* for EBCDIC 1047 */ 0x1CF7, 0x1CFA, 0x1DC0, - 0x1DFA, - 0x1DFB, 0x1E00, 0x1FFD, 0x1FFE, @@ -43891,6 +44529,8 @@ static const UV _Perl_LB_invlist[] = { /* for EBCDIC 1047 */ 0x20BC, 0x20BE, 0x20BF, + 0x20C0, + 0x20C1, 0x20D0, 0x20F1, 0x2103, @@ -44072,6 +44712,17 @@ static const UV _Perl_LB_invlist[] = { /* for EBCDIC 1047 */ 0x2E4D, 0x2E4E, 0x2E50, + 0x2E53, + 0x2E55, + 0x2E56, + 0x2E57, + 0x2E58, + 0x2E59, + 0x2E5A, + 0x2E5B, + 0x2E5C, + 0x2E5D, + 0x2E5E, 0x2E80, 0x2E9A, 0x2E9B, @@ -45259,6 +45910,8 @@ static const UV _Perl_LB_invlist[] = { /* for EBCDIC 1047 */ 0x10EAE, 0x10F46, 0x10F51, + 0x10F82, + 0x10F86, 0x11000, 0x11003, 0x11038, @@ -45266,12 +45919,16 @@ static const UV _Perl_LB_invlist[] = { /* for EBCDIC 1047 */ 0x11049, 0x11066, 0x11070, + 0x11071, + 0x11073, + 0x11075, 0x1107F, 0x11083, 0x110B0, 0x110BB, 0x110BE, 0x110C2, + 0x110C3, 0x110F0, 0x110FA, 0x11100, @@ -45487,6 +46144,8 @@ static const UV _Perl_LB_invlist[] = { /* for EBCDIC 1047 */ 0x16A6A, 0x16A6E, 0x16A70, + 0x16AC0, + 0x16ACA, 0x16AF0, 0x16AF5, 0x16AF6, @@ -45517,7 +46176,7 @@ static const UV _Perl_LB_invlist[] = { /* for EBCDIC 1047 */ 0x18D00, 0x18D09, 0x1B000, - 0x1B11F, + 0x1B123, 0x1B150, 0x1B153, 0x1B164, @@ -45528,6 +46187,10 @@ static const UV _Perl_LB_invlist[] = { /* for EBCDIC 1047 */ 0x1BC9F, 0x1BCA0, 0x1BCA4, + 0x1CF00, + 0x1CF2E, + 0x1CF30, + 0x1CF47, 0x1D165, 0x1D16A, 0x1D16D, @@ -45568,6 +46231,8 @@ static const UV _Perl_LB_invlist[] = { /* for EBCDIC 1047 */ 0x1E137, 0x1E140, 0x1E14A, + 0x1E2AE, + 0x1E2AF, 0x1E2EC, 0x1E2F0, 0x1E2FA, @@ -45586,14 +46251,36 @@ static const UV _Perl_LB_invlist[] = { /* for EBCDIC 1047 */ 0x1ECB0, 0x1ECB1, 0x1F000, + 0x1F02C, + 0x1F030, + 0x1F094, + 0x1F0A0, + 0x1F0AF, + 0x1F0B1, + 0x1F0C0, + 0x1F0C1, + 0x1F0D0, + 0x1F0D1, + 0x1F0F6, 0x1F100, 0x1F10D, 0x1F110, 0x1F16D, 0x1F170, 0x1F1AD, + 0x1F1AE, 0x1F1E6, 0x1F200, + 0x1F203, + 0x1F210, + 0x1F23C, + 0x1F240, + 0x1F249, + 0x1F250, + 0x1F252, + 0x1F260, + 0x1F266, + 0x1F300, 0x1F385, 0x1F386, 0x1F39C, @@ -45672,10 +46359,20 @@ static const UV _Perl_LB_invlist[] = { /* for EBCDIC 1047 */ 0x1F6C1, 0x1F6CC, 0x1F6CD, + 0x1F6D8, + 0x1F6DD, + 0x1F6ED, + 0x1F6F0, + 0x1F6FD, 0x1F700, 0x1F774, 0x1F780, 0x1F7D5, + 0x1F7D9, + 0x1F7E0, + 0x1F7EC, + 0x1F7F0, + 0x1F7F1, 0x1F800, 0x1F80C, 0x1F810, @@ -45686,6 +46383,8 @@ static const UV _Perl_LB_invlist[] = { /* for EBCDIC 1047 */ 0x1F888, 0x1F890, 0x1F8AE, + 0x1F8B0, + 0x1F8B2, 0x1F900, 0x1F90C, 0x1F90D, @@ -45713,6 +46412,27 @@ static const UV _Perl_LB_invlist[] = { /* for EBCDIC 1047 */ 0x1F9DE, 0x1FA00, 0x1FA54, + 0x1FA60, + 0x1FA6E, + 0x1FA70, + 0x1FA75, + 0x1FA78, + 0x1FA7D, + 0x1FA80, + 0x1FA87, + 0x1FA90, + 0x1FAAD, + 0x1FAB0, + 0x1FABB, + 0x1FAC0, + 0x1FAC3, + 0x1FAC6, + 0x1FAD0, + 0x1FADA, + 0x1FAE0, + 0x1FAE8, + 0x1FAF0, + 0x1FAF7, 0x1FB00, 0x1FBF0, 0x1FBFA, @@ -45779,10 +46499,11 @@ typedef enum { LB_Regional_Indicator = 34, LB_Space = 35, LB_Break_Symbols = 36, - LB_Word_Joiner = 37, - LB_ZWSpace = 38, - LB_ZWJ = 39, - LB_East_Asian_CP = 40 + LB_Unassigned_Extended_Pictographic_Ideographic = 37, + LB_Word_Joiner = 38, + LB_ZWSpace = 39, + LB_ZWJ = 40, + LB_East_Asian_CP = 41 } LB_enum; static const LB_enum _Perl_LB_invmap[] = { /* for EBCDIC 1047 */ @@ -45895,7 +46616,6 @@ static const LB_enum _Perl_LB_invmap[] = { /* for EBCDIC 1047 */ LB_Combining_Mark, LB_Exclamation, LB_Combining_Mark, - LB_Alphabetic, LB_Exclamation, LB_Alphabetic, LB_Combining_Mark, @@ -45954,6 +46674,8 @@ static const LB_enum _Perl_LB_invmap[] = { /* for EBCDIC 1047 */ LB_Combining_Mark, LB_Alphabetic, LB_Combining_Mark, + LB_Alphabetic, + LB_Combining_Mark, LB_Break_After, LB_Numeric, LB_Alphabetic, @@ -46058,6 +46780,8 @@ static const LB_enum _Perl_LB_invmap[] = { /* for EBCDIC 1047 */ LB_Alphabetic, LB_Combining_Mark, LB_Alphabetic, + LB_Combining_Mark, + LB_Alphabetic, LB_Numeric, LB_Alphabetic, LB_Break_Before, @@ -46246,7 +46970,7 @@ static const LB_enum _Perl_LB_invmap[] = { /* for EBCDIC 1047 */ LB_Alphabetic, LB_Combining_Mark, LB_Glue, - LB_Alphabetic, + LB_Combining_Mark, LB_Numeric, LB_Alphabetic, LB_Combining_Mark, @@ -46286,6 +47010,8 @@ static const LB_enum _Perl_LB_invmap[] = { /* for EBCDIC 1047 */ LB_Alphabetic, LB_Combining_Mark, LB_Alphabetic, + LB_Break_After, + LB_Alphabetic, LB_Combining_Mark, LB_Alphabetic, LB_Combining_Mark, @@ -46315,8 +47041,6 @@ static const LB_enum _Perl_LB_invmap[] = { /* for EBCDIC 1047 */ LB_Alphabetic, LB_Combining_Mark, LB_Alphabetic, - LB_Combining_Mark, - LB_Alphabetic, LB_Break_Before, LB_Alphabetic, LB_Break_After, @@ -46377,6 +47101,8 @@ static const LB_enum _Perl_LB_invmap[] = { /* for EBCDIC 1047 */ LB_Prefix_Numeric, LB_Postfix_Numeric, LB_Prefix_Numeric, + LB_Postfix_Numeric, + LB_Prefix_Numeric, LB_Combining_Mark, LB_Alphabetic, LB_Postfix_Numeric, @@ -46558,6 +47284,17 @@ static const LB_enum _Perl_LB_invmap[] = { /* for EBCDIC 1047 */ LB_Alphabetic, LB_Break_After, LB_Alphabetic, + LB_Exclamation, + LB_Open_Punctuation, + LB_Close_Punctuation, + LB_Open_Punctuation, + LB_Close_Punctuation, + LB_Open_Punctuation, + LB_Close_Punctuation, + LB_Open_Punctuation, + LB_Close_Punctuation, + LB_Break_After, + LB_Alphabetic, LB_Ideographic, LB_Alphabetic, LB_Ideographic, @@ -47748,15 +48485,21 @@ static const LB_enum _Perl_LB_invmap[] = { /* for EBCDIC 1047 */ LB_Combining_Mark, LB_Alphabetic, LB_Combining_Mark, + LB_Alphabetic, + LB_Combining_Mark, LB_Break_After, LB_Alphabetic, LB_Numeric, + LB_Combining_Mark, + LB_Alphabetic, + LB_Combining_Mark, LB_Alphabetic, LB_Combining_Mark, LB_Alphabetic, LB_Combining_Mark, LB_Alphabetic, LB_Break_After, + LB_Combining_Mark, LB_Alphabetic, LB_Numeric, LB_Alphabetic, @@ -47973,6 +48716,8 @@ static const LB_enum _Perl_LB_invmap[] = { /* for EBCDIC 1047 */ LB_Alphabetic, LB_Break_After, LB_Alphabetic, + LB_Numeric, + LB_Alphabetic, LB_Combining_Mark, LB_Break_After, LB_Alphabetic, @@ -48024,6 +48769,10 @@ static const LB_enum _Perl_LB_invmap[] = { /* for EBCDIC 1047 */ LB_Alphabetic, LB_Combining_Mark, LB_Alphabetic, + LB_Combining_Mark, + LB_Alphabetic, + LB_Combining_Mark, + LB_Alphabetic, LB_Numeric, LB_Alphabetic, LB_Combining_Mark, @@ -48055,6 +48804,8 @@ static const LB_enum _Perl_LB_invmap[] = { /* for EBCDIC 1047 */ LB_Numeric, LB_Alphabetic, LB_Combining_Mark, + LB_Alphabetic, + LB_Combining_Mark, LB_Numeric, LB_Alphabetic, LB_Prefix_Numeric, @@ -48072,14 +48823,36 @@ static const LB_enum _Perl_LB_invmap[] = { /* for EBCDIC 1047 */ LB_Postfix_Numeric, LB_Alphabetic, LB_Ideographic, + LB_Unassigned_Extended_Pictographic_Ideographic, + LB_Ideographic, + LB_Unassigned_Extended_Pictographic_Ideographic, + LB_Ideographic, + LB_Unassigned_Extended_Pictographic_Ideographic, + LB_Ideographic, + LB_Unassigned_Extended_Pictographic_Ideographic, + LB_Ideographic, + LB_Unassigned_Extended_Pictographic_Ideographic, + LB_Ideographic, + LB_Unassigned_Extended_Pictographic_Ideographic, LB_Alphabetic, LB_Ideographic, LB_Alphabetic, LB_Ideographic, LB_Alphabetic, LB_Ideographic, + LB_Unassigned_Extended_Pictographic_Ideographic, LB_Regional_Indicator, LB_Ideographic, + LB_Unassigned_Extended_Pictographic_Ideographic, + LB_Ideographic, + LB_Unassigned_Extended_Pictographic_Ideographic, + LB_Ideographic, + LB_Unassigned_Extended_Pictographic_Ideographic, + LB_Ideographic, + LB_Unassigned_Extended_Pictographic_Ideographic, + LB_Ideographic, + LB_Unassigned_Extended_Pictographic_Ideographic, + LB_Ideographic, LB_E_Base, LB_Ideographic, LB_Alphabetic, @@ -48158,20 +48931,32 @@ static const LB_enum _Perl_LB_invmap[] = { /* for EBCDIC 1047 */ LB_Ideographic, LB_E_Base, LB_Ideographic, - LB_Alphabetic, + LB_Unassigned_Extended_Pictographic_Ideographic, LB_Ideographic, - LB_Alphabetic, + LB_Unassigned_Extended_Pictographic_Ideographic, LB_Ideographic, + LB_Unassigned_Extended_Pictographic_Ideographic, LB_Alphabetic, - LB_Ideographic, + LB_Unassigned_Extended_Pictographic_Ideographic, LB_Alphabetic, LB_Ideographic, - LB_Alphabetic, + LB_Unassigned_Extended_Pictographic_Ideographic, LB_Ideographic, - LB_Alphabetic, + LB_Unassigned_Extended_Pictographic_Ideographic, LB_Ideographic, + LB_Unassigned_Extended_Pictographic_Ideographic, + LB_Alphabetic, + LB_Unassigned_Extended_Pictographic_Ideographic, + LB_Alphabetic, + LB_Unassigned_Extended_Pictographic_Ideographic, + LB_Alphabetic, + LB_Unassigned_Extended_Pictographic_Ideographic, LB_Alphabetic, + LB_Unassigned_Extended_Pictographic_Ideographic, + LB_Alphabetic, + LB_Unassigned_Extended_Pictographic_Ideographic, LB_Ideographic, + LB_Unassigned_Extended_Pictographic_Ideographic, LB_Alphabetic, LB_E_Base, LB_Ideographic, @@ -48198,11 +48983,32 @@ static const LB_enum _Perl_LB_invmap[] = { /* for EBCDIC 1047 */ LB_E_Base, LB_Ideographic, LB_Alphabetic, + LB_Unassigned_Extended_Pictographic_Ideographic, + LB_Ideographic, + LB_Unassigned_Extended_Pictographic_Ideographic, + LB_Ideographic, + LB_Unassigned_Extended_Pictographic_Ideographic, + LB_Ideographic, + LB_Unassigned_Extended_Pictographic_Ideographic, LB_Ideographic, + LB_Unassigned_Extended_Pictographic_Ideographic, + LB_Ideographic, + LB_Unassigned_Extended_Pictographic_Ideographic, + LB_Ideographic, + LB_Unassigned_Extended_Pictographic_Ideographic, + LB_Ideographic, + LB_E_Base, + LB_Unassigned_Extended_Pictographic_Ideographic, + LB_Ideographic, + LB_Unassigned_Extended_Pictographic_Ideographic, + LB_Ideographic, + LB_Unassigned_Extended_Pictographic_Ideographic, + LB_E_Base, + LB_Unassigned_Extended_Pictographic_Ideographic, LB_Alphabetic, LB_Numeric, LB_Alphabetic, - LB_Ideographic, + LB_Unassigned_Extended_Pictographic_Ideographic, LB_Alphabetic, LB_Ideographic, LB_Alphabetic, @@ -48228,7 +49034,7 @@ static const LB_enum _Perl_LB_invmap[] = { /* for EBCDIC 1047 */ && '$' == 91 && '@' == 124 && '`' == 121 && '\n' == 37 static const UV _Perl_LB_invlist[] = { /* for EBCDIC 037 */ - 2428, /* Number of elements */ + 2513, /* Number of elements */ 148565664, /* Version and data structure type */ 0, /* 0 if the list starts at 0; 1 if it starts at the element beyond 0 */ @@ -48342,7 +49148,6 @@ static const UV _Perl_LB_invlist[] = { /* for EBCDIC 037 */ 0x61B, 0x61C, 0x61D, - 0x61E, 0x620, 0x64B, 0x660, @@ -48389,7 +49194,9 @@ static const UV _Perl_LB_invlist[] = { /* for EBCDIC 037 */ 0x82E, 0x859, 0x85C, - 0x8D3, + 0x898, + 0x8A0, + 0x8CA, 0x8E2, 0x8E3, 0x904, @@ -48494,6 +49301,8 @@ static const UV _Perl_LB_invlist[] = { /* for EBCDIC 037 */ 0xBFA, 0xC00, 0xC05, + 0xC3C, + 0xC3D, 0xC3E, 0xC45, 0xC46, @@ -48663,7 +49472,7 @@ static const UV _Perl_LB_invlist[] = { /* for EBCDIC 037 */ 0x16EB, 0x16EE, 0x1712, - 0x1715, + 0x1716, 0x1732, 0x1735, 0x1737, @@ -48720,7 +49529,7 @@ static const UV _Perl_LB_invlist[] = { /* for EBCDIC 037 */ 0x1A90, 0x1A9A, 0x1AB0, - 0x1AC1, + 0x1ACF, 0x1B00, 0x1B05, 0x1B34, @@ -48732,6 +49541,8 @@ static const UV _Perl_LB_invlist[] = { /* for EBCDIC 037 */ 0x1B61, 0x1B6B, 0x1B74, + 0x1B7D, + 0x1B7F, 0x1B80, 0x1B83, 0x1BA1, @@ -48760,8 +49571,6 @@ static const UV _Perl_LB_invlist[] = { /* for EBCDIC 037 */ 0x1CF7, 0x1CFA, 0x1DC0, - 0x1DFA, - 0x1DFB, 0x1E00, 0x1FFD, 0x1FFE, @@ -48823,6 +49632,8 @@ static const UV _Perl_LB_invlist[] = { /* for EBCDIC 037 */ 0x20BC, 0x20BE, 0x20BF, + 0x20C0, + 0x20C1, 0x20D0, 0x20F1, 0x2103, @@ -49004,6 +49815,17 @@ static const UV _Perl_LB_invlist[] = { /* for EBCDIC 037 */ 0x2E4D, 0x2E4E, 0x2E50, + 0x2E53, + 0x2E55, + 0x2E56, + 0x2E57, + 0x2E58, + 0x2E59, + 0x2E5A, + 0x2E5B, + 0x2E5C, + 0x2E5D, + 0x2E5E, 0x2E80, 0x2E9A, 0x2E9B, @@ -50191,6 +51013,8 @@ static const UV _Perl_LB_invlist[] = { /* for EBCDIC 037 */ 0x10EAE, 0x10F46, 0x10F51, + 0x10F82, + 0x10F86, 0x11000, 0x11003, 0x11038, @@ -50198,12 +51022,16 @@ static const UV _Perl_LB_invlist[] = { /* for EBCDIC 037 */ 0x11049, 0x11066, 0x11070, + 0x11071, + 0x11073, + 0x11075, 0x1107F, 0x11083, 0x110B0, 0x110BB, 0x110BE, 0x110C2, + 0x110C3, 0x110F0, 0x110FA, 0x11100, @@ -50419,6 +51247,8 @@ static const UV _Perl_LB_invlist[] = { /* for EBCDIC 037 */ 0x16A6A, 0x16A6E, 0x16A70, + 0x16AC0, + 0x16ACA, 0x16AF0, 0x16AF5, 0x16AF6, @@ -50449,7 +51279,7 @@ static const UV _Perl_LB_invlist[] = { /* for EBCDIC 037 */ 0x18D00, 0x18D09, 0x1B000, - 0x1B11F, + 0x1B123, 0x1B150, 0x1B153, 0x1B164, @@ -50460,6 +51290,10 @@ static const UV _Perl_LB_invlist[] = { /* for EBCDIC 037 */ 0x1BC9F, 0x1BCA0, 0x1BCA4, + 0x1CF00, + 0x1CF2E, + 0x1CF30, + 0x1CF47, 0x1D165, 0x1D16A, 0x1D16D, @@ -50500,6 +51334,8 @@ static const UV _Perl_LB_invlist[] = { /* for EBCDIC 037 */ 0x1E137, 0x1E140, 0x1E14A, + 0x1E2AE, + 0x1E2AF, 0x1E2EC, 0x1E2F0, 0x1E2FA, @@ -50518,14 +51354,36 @@ static const UV _Perl_LB_invlist[] = { /* for EBCDIC 037 */ 0x1ECB0, 0x1ECB1, 0x1F000, + 0x1F02C, + 0x1F030, + 0x1F094, + 0x1F0A0, + 0x1F0AF, + 0x1F0B1, + 0x1F0C0, + 0x1F0C1, + 0x1F0D0, + 0x1F0D1, + 0x1F0F6, 0x1F100, 0x1F10D, 0x1F110, 0x1F16D, 0x1F170, 0x1F1AD, + 0x1F1AE, 0x1F1E6, 0x1F200, + 0x1F203, + 0x1F210, + 0x1F23C, + 0x1F240, + 0x1F249, + 0x1F250, + 0x1F252, + 0x1F260, + 0x1F266, + 0x1F300, 0x1F385, 0x1F386, 0x1F39C, @@ -50604,10 +51462,20 @@ static const UV _Perl_LB_invlist[] = { /* for EBCDIC 037 */ 0x1F6C1, 0x1F6CC, 0x1F6CD, + 0x1F6D8, + 0x1F6DD, + 0x1F6ED, + 0x1F6F0, + 0x1F6FD, 0x1F700, 0x1F774, 0x1F780, 0x1F7D5, + 0x1F7D9, + 0x1F7E0, + 0x1F7EC, + 0x1F7F0, + 0x1F7F1, 0x1F800, 0x1F80C, 0x1F810, @@ -50618,6 +51486,8 @@ static const UV _Perl_LB_invlist[] = { /* for EBCDIC 037 */ 0x1F888, 0x1F890, 0x1F8AE, + 0x1F8B0, + 0x1F8B2, 0x1F900, 0x1F90C, 0x1F90D, @@ -50645,6 +51515,27 @@ static const UV _Perl_LB_invlist[] = { /* for EBCDIC 037 */ 0x1F9DE, 0x1FA00, 0x1FA54, + 0x1FA60, + 0x1FA6E, + 0x1FA70, + 0x1FA75, + 0x1FA78, + 0x1FA7D, + 0x1FA80, + 0x1FA87, + 0x1FA90, + 0x1FAAD, + 0x1FAB0, + 0x1FABB, + 0x1FAC0, + 0x1FAC3, + 0x1FAC6, + 0x1FAD0, + 0x1FADA, + 0x1FAE0, + 0x1FAE8, + 0x1FAF0, + 0x1FAF7, 0x1FB00, 0x1FBF0, 0x1FBFA, @@ -50711,10 +51602,11 @@ typedef enum { LB_Regional_Indicator = 34, LB_Space = 35, LB_Break_Symbols = 36, - LB_Word_Joiner = 37, - LB_ZWSpace = 38, - LB_ZWJ = 39, - LB_East_Asian_CP = 40 + LB_Unassigned_Extended_Pictographic_Ideographic = 37, + LB_Word_Joiner = 38, + LB_ZWSpace = 39, + LB_ZWJ = 40, + LB_East_Asian_CP = 41 } LB_enum; static const LB_enum _Perl_LB_invmap[] = { /* for EBCDIC 037 */ @@ -50827,7 +51719,6 @@ static const LB_enum _Perl_LB_invmap[] = { /* for EBCDIC 037 */ LB_Combining_Mark, LB_Exclamation, LB_Combining_Mark, - LB_Alphabetic, LB_Exclamation, LB_Alphabetic, LB_Combining_Mark, @@ -50886,6 +51777,8 @@ static const LB_enum _Perl_LB_invmap[] = { /* for EBCDIC 037 */ LB_Combining_Mark, LB_Alphabetic, LB_Combining_Mark, + LB_Alphabetic, + LB_Combining_Mark, LB_Break_After, LB_Numeric, LB_Alphabetic, @@ -50990,6 +51883,8 @@ static const LB_enum _Perl_LB_invmap[] = { /* for EBCDIC 037 */ LB_Alphabetic, LB_Combining_Mark, LB_Alphabetic, + LB_Combining_Mark, + LB_Alphabetic, LB_Numeric, LB_Alphabetic, LB_Break_Before, @@ -51178,7 +52073,7 @@ static const LB_enum _Perl_LB_invmap[] = { /* for EBCDIC 037 */ LB_Alphabetic, LB_Combining_Mark, LB_Glue, - LB_Alphabetic, + LB_Combining_Mark, LB_Numeric, LB_Alphabetic, LB_Combining_Mark, @@ -51218,6 +52113,8 @@ static const LB_enum _Perl_LB_invmap[] = { /* for EBCDIC 037 */ LB_Alphabetic, LB_Combining_Mark, LB_Alphabetic, + LB_Break_After, + LB_Alphabetic, LB_Combining_Mark, LB_Alphabetic, LB_Combining_Mark, @@ -51247,8 +52144,6 @@ static const LB_enum _Perl_LB_invmap[] = { /* for EBCDIC 037 */ LB_Alphabetic, LB_Combining_Mark, LB_Alphabetic, - LB_Combining_Mark, - LB_Alphabetic, LB_Break_Before, LB_Alphabetic, LB_Break_After, @@ -51309,6 +52204,8 @@ static const LB_enum _Perl_LB_invmap[] = { /* for EBCDIC 037 */ LB_Prefix_Numeric, LB_Postfix_Numeric, LB_Prefix_Numeric, + LB_Postfix_Numeric, + LB_Prefix_Numeric, LB_Combining_Mark, LB_Alphabetic, LB_Postfix_Numeric, @@ -51490,6 +52387,17 @@ static const LB_enum _Perl_LB_invmap[] = { /* for EBCDIC 037 */ LB_Alphabetic, LB_Break_After, LB_Alphabetic, + LB_Exclamation, + LB_Open_Punctuation, + LB_Close_Punctuation, + LB_Open_Punctuation, + LB_Close_Punctuation, + LB_Open_Punctuation, + LB_Close_Punctuation, + LB_Open_Punctuation, + LB_Close_Punctuation, + LB_Break_After, + LB_Alphabetic, LB_Ideographic, LB_Alphabetic, LB_Ideographic, @@ -52680,15 +53588,21 @@ static const LB_enum _Perl_LB_invmap[] = { /* for EBCDIC 037 */ LB_Combining_Mark, LB_Alphabetic, LB_Combining_Mark, + LB_Alphabetic, + LB_Combining_Mark, LB_Break_After, LB_Alphabetic, LB_Numeric, + LB_Combining_Mark, + LB_Alphabetic, + LB_Combining_Mark, LB_Alphabetic, LB_Combining_Mark, LB_Alphabetic, LB_Combining_Mark, LB_Alphabetic, LB_Break_After, + LB_Combining_Mark, LB_Alphabetic, LB_Numeric, LB_Alphabetic, @@ -52905,6 +53819,8 @@ static const LB_enum _Perl_LB_invmap[] = { /* for EBCDIC 037 */ LB_Alphabetic, LB_Break_After, LB_Alphabetic, + LB_Numeric, + LB_Alphabetic, LB_Combining_Mark, LB_Break_After, LB_Alphabetic, @@ -52956,6 +53872,10 @@ static const LB_enum _Perl_LB_invmap[] = { /* for EBCDIC 037 */ LB_Alphabetic, LB_Combining_Mark, LB_Alphabetic, + LB_Combining_Mark, + LB_Alphabetic, + LB_Combining_Mark, + LB_Alphabetic, LB_Numeric, LB_Alphabetic, LB_Combining_Mark, @@ -52987,6 +53907,8 @@ static const LB_enum _Perl_LB_invmap[] = { /* for EBCDIC 037 */ LB_Numeric, LB_Alphabetic, LB_Combining_Mark, + LB_Alphabetic, + LB_Combining_Mark, LB_Numeric, LB_Alphabetic, LB_Prefix_Numeric, @@ -53004,14 +53926,36 @@ static const LB_enum _Perl_LB_invmap[] = { /* for EBCDIC 037 */ LB_Postfix_Numeric, LB_Alphabetic, LB_Ideographic, + LB_Unassigned_Extended_Pictographic_Ideographic, + LB_Ideographic, + LB_Unassigned_Extended_Pictographic_Ideographic, + LB_Ideographic, + LB_Unassigned_Extended_Pictographic_Ideographic, + LB_Ideographic, + LB_Unassigned_Extended_Pictographic_Ideographic, + LB_Ideographic, + LB_Unassigned_Extended_Pictographic_Ideographic, + LB_Ideographic, + LB_Unassigned_Extended_Pictographic_Ideographic, LB_Alphabetic, LB_Ideographic, LB_Alphabetic, LB_Ideographic, LB_Alphabetic, LB_Ideographic, + LB_Unassigned_Extended_Pictographic_Ideographic, LB_Regional_Indicator, LB_Ideographic, + LB_Unassigned_Extended_Pictographic_Ideographic, + LB_Ideographic, + LB_Unassigned_Extended_Pictographic_Ideographic, + LB_Ideographic, + LB_Unassigned_Extended_Pictographic_Ideographic, + LB_Ideographic, + LB_Unassigned_Extended_Pictographic_Ideographic, + LB_Ideographic, + LB_Unassigned_Extended_Pictographic_Ideographic, + LB_Ideographic, LB_E_Base, LB_Ideographic, LB_Alphabetic, @@ -53090,20 +54034,32 @@ static const LB_enum _Perl_LB_invmap[] = { /* for EBCDIC 037 */ LB_Ideographic, LB_E_Base, LB_Ideographic, - LB_Alphabetic, + LB_Unassigned_Extended_Pictographic_Ideographic, LB_Ideographic, - LB_Alphabetic, + LB_Unassigned_Extended_Pictographic_Ideographic, LB_Ideographic, + LB_Unassigned_Extended_Pictographic_Ideographic, LB_Alphabetic, - LB_Ideographic, + LB_Unassigned_Extended_Pictographic_Ideographic, LB_Alphabetic, LB_Ideographic, - LB_Alphabetic, + LB_Unassigned_Extended_Pictographic_Ideographic, LB_Ideographic, - LB_Alphabetic, + LB_Unassigned_Extended_Pictographic_Ideographic, LB_Ideographic, + LB_Unassigned_Extended_Pictographic_Ideographic, + LB_Alphabetic, + LB_Unassigned_Extended_Pictographic_Ideographic, + LB_Alphabetic, + LB_Unassigned_Extended_Pictographic_Ideographic, + LB_Alphabetic, + LB_Unassigned_Extended_Pictographic_Ideographic, LB_Alphabetic, + LB_Unassigned_Extended_Pictographic_Ideographic, + LB_Alphabetic, + LB_Unassigned_Extended_Pictographic_Ideographic, LB_Ideographic, + LB_Unassigned_Extended_Pictographic_Ideographic, LB_Alphabetic, LB_E_Base, LB_Ideographic, @@ -53130,11 +54086,32 @@ static const LB_enum _Perl_LB_invmap[] = { /* for EBCDIC 037 */ LB_E_Base, LB_Ideographic, LB_Alphabetic, + LB_Unassigned_Extended_Pictographic_Ideographic, + LB_Ideographic, + LB_Unassigned_Extended_Pictographic_Ideographic, + LB_Ideographic, + LB_Unassigned_Extended_Pictographic_Ideographic, + LB_Ideographic, + LB_Unassigned_Extended_Pictographic_Ideographic, LB_Ideographic, + LB_Unassigned_Extended_Pictographic_Ideographic, + LB_Ideographic, + LB_Unassigned_Extended_Pictographic_Ideographic, + LB_Ideographic, + LB_Unassigned_Extended_Pictographic_Ideographic, + LB_Ideographic, + LB_E_Base, + LB_Unassigned_Extended_Pictographic_Ideographic, + LB_Ideographic, + LB_Unassigned_Extended_Pictographic_Ideographic, + LB_Ideographic, + LB_Unassigned_Extended_Pictographic_Ideographic, + LB_E_Base, + LB_Unassigned_Extended_Pictographic_Ideographic, LB_Alphabetic, LB_Numeric, LB_Alphabetic, - LB_Ideographic, + LB_Unassigned_Extended_Pictographic_Ideographic, LB_Alphabetic, LB_Ideographic, LB_Alphabetic, @@ -53157,7 +54134,7 @@ static const LB_enum _Perl_LB_invmap[] = { /* for EBCDIC 037 */ # if 'A' == 65 /* ASCII/Latin1 */ static const UV _Perl_SB_invlist[] = { /* for ASCII/Latin1 */ - 3146, /* Number of elements */ + 3227, /* Number of elements */ 148565664, /* Version and data structure type */ 0, /* 0 if the list starts at 0; 1 if it starts at the element beyond 0 */ @@ -53803,7 +54780,6 @@ static const UV _Perl_SB_invlist[] = { /* for ASCII/Latin1 */ 0x61B, 0x61C, 0x61D, - 0x61E, 0x620, 0x64B, 0x660, @@ -53871,11 +54847,15 @@ static const UV _Perl_SB_invlist[] = { /* for ASCII/Latin1 */ 0x85C, 0x860, 0x86B, + 0x870, + 0x888, + 0x889, + 0x88F, + 0x890, + 0x892, + 0x898, 0x8A0, - 0x8B5, - 0x8B6, - 0x8C8, - 0x8D3, + 0x8CA, 0x8E2, 0x8E3, 0x904, @@ -54069,6 +55049,7 @@ static const UV _Perl_SB_invlist[] = { /* for ASCII/Latin1 */ 0xC29, 0xC2A, 0xC3A, + 0xC3C, 0xC3D, 0xC3E, 0xC45, @@ -54080,6 +55061,8 @@ static const UV _Perl_SB_invlist[] = { /* for ASCII/Latin1 */ 0xC57, 0xC58, 0xC5B, + 0xC5D, + 0xC5E, 0xC60, 0xC62, 0xC64, @@ -54108,7 +55091,7 @@ static const UV _Perl_SB_invlist[] = { /* for ASCII/Latin1 */ 0xCCE, 0xCD5, 0xCD7, - 0xCDE, + 0xCDD, 0xCDF, 0xCE0, 0xCE2, @@ -54317,11 +55300,9 @@ static const UV _Perl_SB_invlist[] = { /* for ASCII/Latin1 */ 0x16EE, 0x16F9, 0x1700, - 0x170D, - 0x170E, 0x1712, - 0x1715, - 0x1720, + 0x1716, + 0x171F, 0x1732, 0x1735, 0x1737, @@ -54400,12 +55381,12 @@ static const UV _Perl_SB_invlist[] = { /* for ASCII/Latin1 */ 0x1AA8, 0x1AAC, 0x1AB0, - 0x1AC1, + 0x1ACF, 0x1B00, 0x1B05, 0x1B34, 0x1B45, - 0x1B4C, + 0x1B4D, 0x1B50, 0x1B5A, 0x1B5C, @@ -54413,6 +55394,8 @@ static const UV _Perl_SB_invlist[] = { /* for ASCII/Latin1 */ 0x1B60, 0x1B6B, 0x1B74, + 0x1B7D, + 0x1B7F, 0x1B80, 0x1B83, 0x1BA1, @@ -54451,8 +55434,6 @@ static const UV _Perl_SB_invlist[] = { /* for ASCII/Latin1 */ 0x1CFB, 0x1D00, 0x1DC0, - 0x1DFA, - 0x1DFB, 0x1E00, 0x1E01, 0x1E02, @@ -54861,9 +55842,7 @@ static const UV _Perl_SB_invlist[] = { /* for ASCII/Latin1 */ 0x29FC, 0x29FE, 0x2C00, - 0x2C2F, 0x2C30, - 0x2C5F, 0x2C60, 0x2C61, 0x2C62, @@ -55032,6 +56011,9 @@ static const UV _Perl_SB_invlist[] = { /* for ASCII/Latin1 */ 0x2E3D, 0x2E42, 0x2E43, + 0x2E53, + 0x2E55, + 0x2E5D, 0x3000, 0x3001, 0x3002, @@ -55071,8 +56053,6 @@ static const UV _Perl_SB_invlist[] = { /* for ASCII/Latin1 */ 0x3400, 0x4DC0, 0x4E00, - 0x9FFD, - 0xA000, 0xA48D, 0xA4D0, 0xA4FE, @@ -55310,6 +56290,7 @@ static const UV _Perl_SB_invlist[] = { /* for ASCII/Latin1 */ 0xA7BE, 0xA7BF, 0xA7C0, + 0xA7C1, 0xA7C2, 0xA7C3, 0xA7C4, @@ -55317,6 +56298,18 @@ static const UV _Perl_SB_invlist[] = { /* for ASCII/Latin1 */ 0xA7C9, 0xA7CA, 0xA7CB, + 0xA7D0, + 0xA7D1, + 0xA7D2, + 0xA7D3, + 0xA7D4, + 0xA7D5, + 0xA7D6, + 0xA7D7, + 0xA7D8, + 0xA7D9, + 0xA7DA, + 0xA7F2, 0xA7F5, 0xA7F6, 0xA7F7, @@ -55597,12 +56590,36 @@ static const UV _Perl_SB_invlist[] = { /* for ASCII/Latin1 */ 0x10528, 0x10530, 0x10564, + 0x10570, + 0x1057B, + 0x1057C, + 0x1058B, + 0x1058C, + 0x10593, + 0x10594, + 0x10596, + 0x10597, + 0x105A2, + 0x105A3, + 0x105B2, + 0x105B3, + 0x105BA, + 0x105BB, + 0x105BD, 0x10600, 0x10737, 0x10740, 0x10756, 0x10760, 0x10768, + 0x10780, + 0x10781, + 0x10783, + 0x10786, + 0x10787, + 0x107B1, + 0x107B2, + 0x107BB, 0x10800, 0x10806, 0x10808, @@ -55692,6 +56709,10 @@ static const UV _Perl_SB_invlist[] = { /* for ASCII/Latin1 */ 0x10F51, 0x10F55, 0x10F5A, + 0x10F70, + 0x10F82, + 0x10F86, + 0x10F8A, 0x10FB0, 0x10FC5, 0x10FE0, @@ -55703,6 +56724,10 @@ static const UV _Perl_SB_invlist[] = { /* for ASCII/Latin1 */ 0x11049, 0x11066, 0x11070, + 0x11071, + 0x11073, + 0x11075, + 0x11076, 0x1107F, 0x11083, 0x110B0, @@ -55710,6 +56735,7 @@ static const UV _Perl_SB_invlist[] = { /* for ASCII/Latin1 */ 0x110BD, 0x110BE, 0x110C2, + 0x110C3, 0x110CD, 0x110CE, 0x110D0, @@ -55858,6 +56884,8 @@ static const UV _Perl_SB_invlist[] = { /* for ASCII/Latin1 */ 0x1173A, 0x1173C, 0x1173F, + 0x11740, + 0x11747, 0x11800, 0x1182C, 0x1183B, @@ -55919,7 +56947,7 @@ static const UV _Perl_SB_invlist[] = { /* for ASCII/Latin1 */ 0x11A9B, 0x11A9D, 0x11A9E, - 0x11AC0, + 0x11AB0, 0x11AF9, 0x11C00, 0x11C09, @@ -55981,6 +57009,8 @@ static const UV _Perl_SB_invlist[] = { /* for ASCII/Latin1 */ 0x1246F, 0x12480, 0x12544, + 0x12F90, + 0x12FF1, 0x13000, 0x1342F, 0x13430, @@ -55995,6 +57025,9 @@ static const UV _Perl_SB_invlist[] = { /* for ASCII/Latin1 */ 0x16A6A, 0x16A6E, 0x16A70, + 0x16ABF, + 0x16AC0, + 0x16ACA, 0x16AD0, 0x16AEE, 0x16AF0, @@ -56040,8 +57073,14 @@ static const UV _Perl_SB_invlist[] = { /* for ASCII/Latin1 */ 0x18CD6, 0x18D00, 0x18D09, + 0x1AFF0, + 0x1AFF4, + 0x1AFF5, + 0x1AFFC, + 0x1AFFD, + 0x1AFFF, 0x1B000, - 0x1B11F, + 0x1B123, 0x1B150, 0x1B153, 0x1B164, @@ -56060,6 +57099,10 @@ static const UV _Perl_SB_invlist[] = { /* for ASCII/Latin1 */ 0x1BC9F, 0x1BCA0, 0x1BCA4, + 0x1CF00, + 0x1CF2E, + 0x1CF30, + 0x1CF47, 0x1D165, 0x1D16A, 0x1D16D, @@ -56177,6 +57220,10 @@ static const UV _Perl_SB_invlist[] = { /* for ASCII/Latin1 */ 0x1DAA0, 0x1DAA1, 0x1DAB0, + 0x1DF00, + 0x1DF0A, + 0x1DF0B, + 0x1DF1F, 0x1E000, 0x1E007, 0x1E008, @@ -56196,10 +57243,21 @@ static const UV _Perl_SB_invlist[] = { /* for ASCII/Latin1 */ 0x1E14A, 0x1E14E, 0x1E14F, + 0x1E290, + 0x1E2AE, + 0x1E2AF, 0x1E2C0, 0x1E2EC, 0x1E2F0, 0x1E2FA, + 0x1E7E0, + 0x1E7E7, + 0x1E7E8, + 0x1E7EC, + 0x1E7ED, + 0x1E7EF, + 0x1E7F0, + 0x1E7FF, 0x1E800, 0x1E8C5, 0x1E8D0, @@ -56288,9 +57346,9 @@ static const UV _Perl_SB_invlist[] = { /* for ASCII/Latin1 */ 0x1FBF0, 0x1FBFA, 0x20000, - 0x2A6DE, + 0x2A6E0, 0x2A700, - 0x2B735, + 0x2B739, 0x2B740, 0x2B81E, 0x2B820, @@ -56978,7 +58036,6 @@ static const SB_enum _Perl_SB_invmap[] = { /* for ASCII/Latin1 */ SB_Extend, SB_Other, SB_Format, - SB_Other, SB_STerm, SB_OLetter, SB_Extend, @@ -57051,6 +58108,10 @@ static const SB_enum _Perl_SB_invmap[] = { /* for ASCII/Latin1 */ SB_Other, SB_OLetter, SB_Other, + SB_Format, + SB_Other, + SB_Extend, + SB_OLetter, SB_Extend, SB_Format, SB_Extend, @@ -57245,6 +58306,7 @@ static const SB_enum _Perl_SB_invmap[] = { /* for ASCII/Latin1 */ SB_Other, SB_OLetter, SB_Other, + SB_Extend, SB_OLetter, SB_Extend, SB_Other, @@ -57257,6 +58319,8 @@ static const SB_enum _Perl_SB_invmap[] = { /* for ASCII/Latin1 */ SB_OLetter, SB_Other, SB_OLetter, + SB_Other, + SB_OLetter, SB_Extend, SB_Other, SB_Numeric, @@ -57493,8 +58557,6 @@ static const SB_enum _Perl_SB_invmap[] = { /* for ASCII/Latin1 */ SB_OLetter, SB_Other, SB_OLetter, - SB_Other, - SB_OLetter, SB_Extend, SB_Other, SB_OLetter, @@ -57528,7 +58590,7 @@ static const SB_enum _Perl_SB_invmap[] = { /* for ASCII/Latin1 */ SB_Other, SB_Extend, SB_Format, - SB_Other, + SB_Extend, SB_Numeric, SB_Other, SB_OLetter, @@ -57589,6 +58651,8 @@ static const SB_enum _Perl_SB_invmap[] = { /* for ASCII/Latin1 */ SB_Other, SB_Extend, SB_Other, + SB_STerm, + SB_Other, SB_Extend, SB_OLetter, SB_Extend, @@ -57627,8 +58691,6 @@ static const SB_enum _Perl_SB_invmap[] = { /* for ASCII/Latin1 */ SB_Other, SB_Lower, SB_Extend, - SB_Other, - SB_Extend, SB_Upper, SB_Lower, SB_Upper, @@ -58037,9 +59099,7 @@ static const SB_enum _Perl_SB_invmap[] = { /* for ASCII/Latin1 */ SB_Close, SB_Other, SB_Upper, - SB_Other, SB_Lower, - SB_Other, SB_Upper, SB_Lower, SB_Upper, @@ -58208,6 +59268,9 @@ static const SB_enum _Perl_SB_invmap[] = { /* for ASCII/Latin1 */ SB_Other, SB_Close, SB_Other, + SB_STerm, + SB_Close, + SB_Other, SB_Sp, SB_SContinue, SB_STerm, @@ -58250,8 +59313,6 @@ static const SB_enum _Perl_SB_invmap[] = { /* for ASCII/Latin1 */ SB_Other, SB_OLetter, SB_Other, - SB_OLetter, - SB_Other, SB_STerm, SB_OLetter, SB_Other, @@ -58485,14 +59546,27 @@ static const SB_enum _Perl_SB_invmap[] = { /* for ASCII/Latin1 */ SB_Lower, SB_Upper, SB_Lower, + SB_Upper, + SB_Lower, + SB_Upper, + SB_Lower, + SB_Upper, + SB_Lower, + SB_Upper, + SB_Lower, SB_Other, SB_Upper, SB_Lower, + SB_Other, + SB_Lower, + SB_Other, + SB_Lower, SB_Upper, SB_Lower, SB_Upper, SB_Lower, SB_Other, + SB_OLetter, SB_Upper, SB_Lower, SB_OLetter, @@ -58773,11 +59847,35 @@ static const SB_enum _Perl_SB_invmap[] = { /* for ASCII/Latin1 */ SB_Other, SB_OLetter, SB_Other, + SB_Upper, + SB_Other, + SB_Upper, + SB_Other, + SB_Upper, + SB_Other, + SB_Upper, + SB_Other, + SB_Lower, + SB_Other, + SB_Lower, + SB_Other, + SB_Lower, + SB_Other, + SB_Lower, + SB_Other, + SB_OLetter, + SB_Other, SB_OLetter, SB_Other, SB_OLetter, SB_Other, + SB_Lower, SB_OLetter, + SB_Lower, + SB_Other, + SB_Lower, + SB_Other, + SB_Lower, SB_Other, SB_OLetter, SB_Other, @@ -58869,6 +59967,10 @@ static const SB_enum _Perl_SB_invmap[] = { /* for ASCII/Latin1 */ SB_STerm, SB_Other, SB_OLetter, + SB_Extend, + SB_STerm, + SB_Other, + SB_OLetter, SB_Other, SB_OLetter, SB_Other, @@ -58878,6 +59980,10 @@ static const SB_enum _Perl_SB_invmap[] = { /* for ASCII/Latin1 */ SB_STerm, SB_Other, SB_Numeric, + SB_Extend, + SB_OLetter, + SB_Extend, + SB_OLetter, SB_Other, SB_Extend, SB_OLetter, @@ -58885,6 +59991,7 @@ static const SB_enum _Perl_SB_invmap[] = { /* for ASCII/Latin1 */ SB_Other, SB_Format, SB_STerm, + SB_Extend, SB_Other, SB_Format, SB_Other, @@ -59035,6 +60142,8 @@ static const SB_enum _Perl_SB_invmap[] = { /* for ASCII/Latin1 */ SB_STerm, SB_Other, SB_OLetter, + SB_Other, + SB_OLetter, SB_Extend, SB_Other, SB_Upper, @@ -59159,6 +60268,8 @@ static const SB_enum _Perl_SB_invmap[] = { /* for ASCII/Latin1 */ SB_Other, SB_OLetter, SB_Other, + SB_OLetter, + SB_Other, SB_Format, SB_Other, SB_OLetter, @@ -59170,6 +60281,9 @@ static const SB_enum _Perl_SB_invmap[] = { /* for ASCII/Latin1 */ SB_Numeric, SB_Other, SB_STerm, + SB_OLetter, + SB_Other, + SB_Numeric, SB_Other, SB_OLetter, SB_Other, @@ -59232,6 +60346,12 @@ static const SB_enum _Perl_SB_invmap[] = { /* for ASCII/Latin1 */ SB_Other, SB_OLetter, SB_Other, + SB_OLetter, + SB_Other, + SB_OLetter, + SB_Other, + SB_OLetter, + SB_Other, SB_Extend, SB_STerm, SB_Format, @@ -59239,6 +60359,10 @@ static const SB_enum _Perl_SB_invmap[] = { /* for ASCII/Latin1 */ SB_Extend, SB_Other, SB_Extend, + SB_Other, + SB_Extend, + SB_Other, + SB_Extend, SB_Format, SB_Extend, SB_Other, @@ -59353,6 +60477,10 @@ static const SB_enum _Perl_SB_invmap[] = { /* for ASCII/Latin1 */ SB_Other, SB_Extend, SB_Other, + SB_Lower, + SB_OLetter, + SB_Lower, + SB_Other, SB_Extend, SB_Other, SB_Extend, @@ -59374,10 +60502,21 @@ static const SB_enum _Perl_SB_invmap[] = { /* for ASCII/Latin1 */ SB_Other, SB_OLetter, SB_Extend, + SB_Other, + SB_OLetter, + SB_Extend, SB_Numeric, SB_Other, SB_OLetter, SB_Other, + SB_OLetter, + SB_Other, + SB_OLetter, + SB_Other, + SB_OLetter, + SB_Other, + SB_OLetter, + SB_Other, SB_Extend, SB_Other, SB_Upper, @@ -59497,7 +60636,7 @@ static const SB_enum _Perl_SB_invmap[] = { /* for ASCII/Latin1 */ && '$' == 91 && '@' == 124 && '`' == 121 && '\n' == 21 static const UV _Perl_SB_invlist[] = { /* for EBCDIC 1047 */ - 3170, /* Number of elements */ + 3251, /* Number of elements */ 148565664, /* Version and data structure type */ 0, /* 0 if the list starts at 0; 1 if it starts at the element beyond 0 */ @@ -60167,7 +61306,6 @@ static const UV _Perl_SB_invlist[] = { /* for EBCDIC 1047 */ 0x61B, 0x61C, 0x61D, - 0x61E, 0x620, 0x64B, 0x660, @@ -60235,11 +61373,15 @@ static const UV _Perl_SB_invlist[] = { /* for EBCDIC 1047 */ 0x85C, 0x860, 0x86B, + 0x870, + 0x888, + 0x889, + 0x88F, + 0x890, + 0x892, + 0x898, 0x8A0, - 0x8B5, - 0x8B6, - 0x8C8, - 0x8D3, + 0x8CA, 0x8E2, 0x8E3, 0x904, @@ -60433,6 +61575,7 @@ static const UV _Perl_SB_invlist[] = { /* for EBCDIC 1047 */ 0xC29, 0xC2A, 0xC3A, + 0xC3C, 0xC3D, 0xC3E, 0xC45, @@ -60444,6 +61587,8 @@ static const UV _Perl_SB_invlist[] = { /* for EBCDIC 1047 */ 0xC57, 0xC58, 0xC5B, + 0xC5D, + 0xC5E, 0xC60, 0xC62, 0xC64, @@ -60472,7 +61617,7 @@ static const UV _Perl_SB_invlist[] = { /* for EBCDIC 1047 */ 0xCCE, 0xCD5, 0xCD7, - 0xCDE, + 0xCDD, 0xCDF, 0xCE0, 0xCE2, @@ -60681,11 +61826,9 @@ static const UV _Perl_SB_invlist[] = { /* for EBCDIC 1047 */ 0x16EE, 0x16F9, 0x1700, - 0x170D, - 0x170E, 0x1712, - 0x1715, - 0x1720, + 0x1716, + 0x171F, 0x1732, 0x1735, 0x1737, @@ -60764,12 +61907,12 @@ static const UV _Perl_SB_invlist[] = { /* for EBCDIC 1047 */ 0x1AA8, 0x1AAC, 0x1AB0, - 0x1AC1, + 0x1ACF, 0x1B00, 0x1B05, 0x1B34, 0x1B45, - 0x1B4C, + 0x1B4D, 0x1B50, 0x1B5A, 0x1B5C, @@ -60777,6 +61920,8 @@ static const UV _Perl_SB_invlist[] = { /* for EBCDIC 1047 */ 0x1B60, 0x1B6B, 0x1B74, + 0x1B7D, + 0x1B7F, 0x1B80, 0x1B83, 0x1BA1, @@ -60815,8 +61960,6 @@ static const UV _Perl_SB_invlist[] = { /* for EBCDIC 1047 */ 0x1CFB, 0x1D00, 0x1DC0, - 0x1DFA, - 0x1DFB, 0x1E00, 0x1E01, 0x1E02, @@ -61225,9 +62368,7 @@ static const UV _Perl_SB_invlist[] = { /* for EBCDIC 1047 */ 0x29FC, 0x29FE, 0x2C00, - 0x2C2F, 0x2C30, - 0x2C5F, 0x2C60, 0x2C61, 0x2C62, @@ -61396,6 +62537,9 @@ static const UV _Perl_SB_invlist[] = { /* for EBCDIC 1047 */ 0x2E3D, 0x2E42, 0x2E43, + 0x2E53, + 0x2E55, + 0x2E5D, 0x3000, 0x3001, 0x3002, @@ -61435,8 +62579,6 @@ static const UV _Perl_SB_invlist[] = { /* for EBCDIC 1047 */ 0x3400, 0x4DC0, 0x4E00, - 0x9FFD, - 0xA000, 0xA48D, 0xA4D0, 0xA4FE, @@ -61674,6 +62816,7 @@ static const UV _Perl_SB_invlist[] = { /* for EBCDIC 1047 */ 0xA7BE, 0xA7BF, 0xA7C0, + 0xA7C1, 0xA7C2, 0xA7C3, 0xA7C4, @@ -61681,6 +62824,18 @@ static const UV _Perl_SB_invlist[] = { /* for EBCDIC 1047 */ 0xA7C9, 0xA7CA, 0xA7CB, + 0xA7D0, + 0xA7D1, + 0xA7D2, + 0xA7D3, + 0xA7D4, + 0xA7D5, + 0xA7D6, + 0xA7D7, + 0xA7D8, + 0xA7D9, + 0xA7DA, + 0xA7F2, 0xA7F5, 0xA7F6, 0xA7F7, @@ -61961,12 +63116,36 @@ static const UV _Perl_SB_invlist[] = { /* for EBCDIC 1047 */ 0x10528, 0x10530, 0x10564, + 0x10570, + 0x1057B, + 0x1057C, + 0x1058B, + 0x1058C, + 0x10593, + 0x10594, + 0x10596, + 0x10597, + 0x105A2, + 0x105A3, + 0x105B2, + 0x105B3, + 0x105BA, + 0x105BB, + 0x105BD, 0x10600, 0x10737, 0x10740, 0x10756, 0x10760, 0x10768, + 0x10780, + 0x10781, + 0x10783, + 0x10786, + 0x10787, + 0x107B1, + 0x107B2, + 0x107BB, 0x10800, 0x10806, 0x10808, @@ -62056,6 +63235,10 @@ static const UV _Perl_SB_invlist[] = { /* for EBCDIC 1047 */ 0x10F51, 0x10F55, 0x10F5A, + 0x10F70, + 0x10F82, + 0x10F86, + 0x10F8A, 0x10FB0, 0x10FC5, 0x10FE0, @@ -62067,6 +63250,10 @@ static const UV _Perl_SB_invlist[] = { /* for EBCDIC 1047 */ 0x11049, 0x11066, 0x11070, + 0x11071, + 0x11073, + 0x11075, + 0x11076, 0x1107F, 0x11083, 0x110B0, @@ -62074,6 +63261,7 @@ static const UV _Perl_SB_invlist[] = { /* for EBCDIC 1047 */ 0x110BD, 0x110BE, 0x110C2, + 0x110C3, 0x110CD, 0x110CE, 0x110D0, @@ -62222,6 +63410,8 @@ static const UV _Perl_SB_invlist[] = { /* for EBCDIC 1047 */ 0x1173A, 0x1173C, 0x1173F, + 0x11740, + 0x11747, 0x11800, 0x1182C, 0x1183B, @@ -62283,7 +63473,7 @@ static const UV _Perl_SB_invlist[] = { /* for EBCDIC 1047 */ 0x11A9B, 0x11A9D, 0x11A9E, - 0x11AC0, + 0x11AB0, 0x11AF9, 0x11C00, 0x11C09, @@ -62345,6 +63535,8 @@ static const UV _Perl_SB_invlist[] = { /* for EBCDIC 1047 */ 0x1246F, 0x12480, 0x12544, + 0x12F90, + 0x12FF1, 0x13000, 0x1342F, 0x13430, @@ -62359,6 +63551,9 @@ static const UV _Perl_SB_invlist[] = { /* for EBCDIC 1047 */ 0x16A6A, 0x16A6E, 0x16A70, + 0x16ABF, + 0x16AC0, + 0x16ACA, 0x16AD0, 0x16AEE, 0x16AF0, @@ -62404,8 +63599,14 @@ static const UV _Perl_SB_invlist[] = { /* for EBCDIC 1047 */ 0x18CD6, 0x18D00, 0x18D09, + 0x1AFF0, + 0x1AFF4, + 0x1AFF5, + 0x1AFFC, + 0x1AFFD, + 0x1AFFF, 0x1B000, - 0x1B11F, + 0x1B123, 0x1B150, 0x1B153, 0x1B164, @@ -62424,6 +63625,10 @@ static const UV _Perl_SB_invlist[] = { /* for EBCDIC 1047 */ 0x1BC9F, 0x1BCA0, 0x1BCA4, + 0x1CF00, + 0x1CF2E, + 0x1CF30, + 0x1CF47, 0x1D165, 0x1D16A, 0x1D16D, @@ -62541,6 +63746,10 @@ static const UV _Perl_SB_invlist[] = { /* for EBCDIC 1047 */ 0x1DAA0, 0x1DAA1, 0x1DAB0, + 0x1DF00, + 0x1DF0A, + 0x1DF0B, + 0x1DF1F, 0x1E000, 0x1E007, 0x1E008, @@ -62560,10 +63769,21 @@ static const UV _Perl_SB_invlist[] = { /* for EBCDIC 1047 */ 0x1E14A, 0x1E14E, 0x1E14F, + 0x1E290, + 0x1E2AE, + 0x1E2AF, 0x1E2C0, 0x1E2EC, 0x1E2F0, 0x1E2FA, + 0x1E7E0, + 0x1E7E7, + 0x1E7E8, + 0x1E7EC, + 0x1E7ED, + 0x1E7EF, + 0x1E7F0, + 0x1E7FF, 0x1E800, 0x1E8C5, 0x1E8D0, @@ -62652,9 +63872,9 @@ static const UV _Perl_SB_invlist[] = { /* for EBCDIC 1047 */ 0x1FBF0, 0x1FBFA, 0x20000, - 0x2A6DE, + 0x2A6E0, 0x2A700, - 0x2B735, + 0x2B739, 0x2B740, 0x2B81E, 0x2B820, @@ -63369,7 +64589,6 @@ static const SB_enum _Perl_SB_invmap[] = { /* for EBCDIC 1047 */ SB_Extend, SB_Other, SB_Format, - SB_Other, SB_STerm, SB_OLetter, SB_Extend, @@ -63442,6 +64661,10 @@ static const SB_enum _Perl_SB_invmap[] = { /* for EBCDIC 1047 */ SB_Other, SB_OLetter, SB_Other, + SB_Format, + SB_Other, + SB_Extend, + SB_OLetter, SB_Extend, SB_Format, SB_Extend, @@ -63636,6 +64859,7 @@ static const SB_enum _Perl_SB_invmap[] = { /* for EBCDIC 1047 */ SB_Other, SB_OLetter, SB_Other, + SB_Extend, SB_OLetter, SB_Extend, SB_Other, @@ -63648,6 +64872,8 @@ static const SB_enum _Perl_SB_invmap[] = { /* for EBCDIC 1047 */ SB_OLetter, SB_Other, SB_OLetter, + SB_Other, + SB_OLetter, SB_Extend, SB_Other, SB_Numeric, @@ -63884,8 +65110,6 @@ static const SB_enum _Perl_SB_invmap[] = { /* for EBCDIC 1047 */ SB_OLetter, SB_Other, SB_OLetter, - SB_Other, - SB_OLetter, SB_Extend, SB_Other, SB_OLetter, @@ -63919,7 +65143,7 @@ static const SB_enum _Perl_SB_invmap[] = { /* for EBCDIC 1047 */ SB_Other, SB_Extend, SB_Format, - SB_Other, + SB_Extend, SB_Numeric, SB_Other, SB_OLetter, @@ -63980,6 +65204,8 @@ static const SB_enum _Perl_SB_invmap[] = { /* for EBCDIC 1047 */ SB_Other, SB_Extend, SB_Other, + SB_STerm, + SB_Other, SB_Extend, SB_OLetter, SB_Extend, @@ -64018,8 +65244,6 @@ static const SB_enum _Perl_SB_invmap[] = { /* for EBCDIC 1047 */ SB_Other, SB_Lower, SB_Extend, - SB_Other, - SB_Extend, SB_Upper, SB_Lower, SB_Upper, @@ -64428,9 +65652,7 @@ static const SB_enum _Perl_SB_invmap[] = { /* for EBCDIC 1047 */ SB_Close, SB_Other, SB_Upper, - SB_Other, SB_Lower, - SB_Other, SB_Upper, SB_Lower, SB_Upper, @@ -64599,6 +65821,9 @@ static const SB_enum _Perl_SB_invmap[] = { /* for EBCDIC 1047 */ SB_Other, SB_Close, SB_Other, + SB_STerm, + SB_Close, + SB_Other, SB_Sp, SB_SContinue, SB_STerm, @@ -64641,8 +65866,6 @@ static const SB_enum _Perl_SB_invmap[] = { /* for EBCDIC 1047 */ SB_Other, SB_OLetter, SB_Other, - SB_OLetter, - SB_Other, SB_STerm, SB_OLetter, SB_Other, @@ -64876,14 +66099,27 @@ static const SB_enum _Perl_SB_invmap[] = { /* for EBCDIC 1047 */ SB_Lower, SB_Upper, SB_Lower, + SB_Upper, + SB_Lower, + SB_Upper, + SB_Lower, + SB_Upper, + SB_Lower, + SB_Upper, + SB_Lower, SB_Other, SB_Upper, SB_Lower, + SB_Other, + SB_Lower, + SB_Other, + SB_Lower, SB_Upper, SB_Lower, SB_Upper, SB_Lower, SB_Other, + SB_OLetter, SB_Upper, SB_Lower, SB_OLetter, @@ -65164,11 +66400,35 @@ static const SB_enum _Perl_SB_invmap[] = { /* for EBCDIC 1047 */ SB_Other, SB_OLetter, SB_Other, + SB_Upper, + SB_Other, + SB_Upper, + SB_Other, + SB_Upper, + SB_Other, + SB_Upper, + SB_Other, + SB_Lower, + SB_Other, + SB_Lower, + SB_Other, + SB_Lower, + SB_Other, + SB_Lower, + SB_Other, + SB_OLetter, + SB_Other, SB_OLetter, SB_Other, SB_OLetter, SB_Other, + SB_Lower, SB_OLetter, + SB_Lower, + SB_Other, + SB_Lower, + SB_Other, + SB_Lower, SB_Other, SB_OLetter, SB_Other, @@ -65260,6 +66520,10 @@ static const SB_enum _Perl_SB_invmap[] = { /* for EBCDIC 1047 */ SB_STerm, SB_Other, SB_OLetter, + SB_Extend, + SB_STerm, + SB_Other, + SB_OLetter, SB_Other, SB_OLetter, SB_Other, @@ -65269,6 +66533,10 @@ static const SB_enum _Perl_SB_invmap[] = { /* for EBCDIC 1047 */ SB_STerm, SB_Other, SB_Numeric, + SB_Extend, + SB_OLetter, + SB_Extend, + SB_OLetter, SB_Other, SB_Extend, SB_OLetter, @@ -65276,6 +66544,7 @@ static const SB_enum _Perl_SB_invmap[] = { /* for EBCDIC 1047 */ SB_Other, SB_Format, SB_STerm, + SB_Extend, SB_Other, SB_Format, SB_Other, @@ -65426,6 +66695,8 @@ static const SB_enum _Perl_SB_invmap[] = { /* for EBCDIC 1047 */ SB_STerm, SB_Other, SB_OLetter, + SB_Other, + SB_OLetter, SB_Extend, SB_Other, SB_Upper, @@ -65550,6 +66821,8 @@ static const SB_enum _Perl_SB_invmap[] = { /* for EBCDIC 1047 */ SB_Other, SB_OLetter, SB_Other, + SB_OLetter, + SB_Other, SB_Format, SB_Other, SB_OLetter, @@ -65561,6 +66834,9 @@ static const SB_enum _Perl_SB_invmap[] = { /* for EBCDIC 1047 */ SB_Numeric, SB_Other, SB_STerm, + SB_OLetter, + SB_Other, + SB_Numeric, SB_Other, SB_OLetter, SB_Other, @@ -65623,6 +66899,12 @@ static const SB_enum _Perl_SB_invmap[] = { /* for EBCDIC 1047 */ SB_Other, SB_OLetter, SB_Other, + SB_OLetter, + SB_Other, + SB_OLetter, + SB_Other, + SB_OLetter, + SB_Other, SB_Extend, SB_STerm, SB_Format, @@ -65630,6 +66912,10 @@ static const SB_enum _Perl_SB_invmap[] = { /* for EBCDIC 1047 */ SB_Extend, SB_Other, SB_Extend, + SB_Other, + SB_Extend, + SB_Other, + SB_Extend, SB_Format, SB_Extend, SB_Other, @@ -65744,6 +67030,10 @@ static const SB_enum _Perl_SB_invmap[] = { /* for EBCDIC 1047 */ SB_Other, SB_Extend, SB_Other, + SB_Lower, + SB_OLetter, + SB_Lower, + SB_Other, SB_Extend, SB_Other, SB_Extend, @@ -65765,10 +67055,21 @@ static const SB_enum _Perl_SB_invmap[] = { /* for EBCDIC 1047 */ SB_Other, SB_OLetter, SB_Extend, + SB_Other, + SB_OLetter, + SB_Extend, SB_Numeric, SB_Other, SB_OLetter, SB_Other, + SB_OLetter, + SB_Other, + SB_OLetter, + SB_Other, + SB_OLetter, + SB_Other, + SB_OLetter, + SB_Other, SB_Extend, SB_Other, SB_Upper, @@ -65888,7 +67189,7 @@ static const SB_enum _Perl_SB_invmap[] = { /* for EBCDIC 1047 */ && '$' == 91 && '@' == 124 && '`' == 121 && '\n' == 37 static const UV _Perl_SB_invlist[] = { /* for EBCDIC 037 */ - 3166, /* Number of elements */ + 3247, /* Number of elements */ 148565664, /* Version and data structure type */ 0, /* 0 if the list starts at 0; 1 if it starts at the element beyond 0 */ @@ -66554,7 +67855,6 @@ static const UV _Perl_SB_invlist[] = { /* for EBCDIC 037 */ 0x61B, 0x61C, 0x61D, - 0x61E, 0x620, 0x64B, 0x660, @@ -66622,11 +67922,15 @@ static const UV _Perl_SB_invlist[] = { /* for EBCDIC 037 */ 0x85C, 0x860, 0x86B, + 0x870, + 0x888, + 0x889, + 0x88F, + 0x890, + 0x892, + 0x898, 0x8A0, - 0x8B5, - 0x8B6, - 0x8C8, - 0x8D3, + 0x8CA, 0x8E2, 0x8E3, 0x904, @@ -66820,6 +68124,7 @@ static const UV _Perl_SB_invlist[] = { /* for EBCDIC 037 */ 0xC29, 0xC2A, 0xC3A, + 0xC3C, 0xC3D, 0xC3E, 0xC45, @@ -66831,6 +68136,8 @@ static const UV _Perl_SB_invlist[] = { /* for EBCDIC 037 */ 0xC57, 0xC58, 0xC5B, + 0xC5D, + 0xC5E, 0xC60, 0xC62, 0xC64, @@ -66859,7 +68166,7 @@ static const UV _Perl_SB_invlist[] = { /* for EBCDIC 037 */ 0xCCE, 0xCD5, 0xCD7, - 0xCDE, + 0xCDD, 0xCDF, 0xCE0, 0xCE2, @@ -67068,11 +68375,9 @@ static const UV _Perl_SB_invlist[] = { /* for EBCDIC 037 */ 0x16EE, 0x16F9, 0x1700, - 0x170D, - 0x170E, 0x1712, - 0x1715, - 0x1720, + 0x1716, + 0x171F, 0x1732, 0x1735, 0x1737, @@ -67151,12 +68456,12 @@ static const UV _Perl_SB_invlist[] = { /* for EBCDIC 037 */ 0x1AA8, 0x1AAC, 0x1AB0, - 0x1AC1, + 0x1ACF, 0x1B00, 0x1B05, 0x1B34, 0x1B45, - 0x1B4C, + 0x1B4D, 0x1B50, 0x1B5A, 0x1B5C, @@ -67164,6 +68469,8 @@ static const UV _Perl_SB_invlist[] = { /* for EBCDIC 037 */ 0x1B60, 0x1B6B, 0x1B74, + 0x1B7D, + 0x1B7F, 0x1B80, 0x1B83, 0x1BA1, @@ -67202,8 +68509,6 @@ static const UV _Perl_SB_invlist[] = { /* for EBCDIC 037 */ 0x1CFB, 0x1D00, 0x1DC0, - 0x1DFA, - 0x1DFB, 0x1E00, 0x1E01, 0x1E02, @@ -67612,9 +68917,7 @@ static const UV _Perl_SB_invlist[] = { /* for EBCDIC 037 */ 0x29FC, 0x29FE, 0x2C00, - 0x2C2F, 0x2C30, - 0x2C5F, 0x2C60, 0x2C61, 0x2C62, @@ -67783,6 +69086,9 @@ static const UV _Perl_SB_invlist[] = { /* for EBCDIC 037 */ 0x2E3D, 0x2E42, 0x2E43, + 0x2E53, + 0x2E55, + 0x2E5D, 0x3000, 0x3001, 0x3002, @@ -67822,8 +69128,6 @@ static const UV _Perl_SB_invlist[] = { /* for EBCDIC 037 */ 0x3400, 0x4DC0, 0x4E00, - 0x9FFD, - 0xA000, 0xA48D, 0xA4D0, 0xA4FE, @@ -68061,6 +69365,7 @@ static const UV _Perl_SB_invlist[] = { /* for EBCDIC 037 */ 0xA7BE, 0xA7BF, 0xA7C0, + 0xA7C1, 0xA7C2, 0xA7C3, 0xA7C4, @@ -68068,6 +69373,18 @@ static const UV _Perl_SB_invlist[] = { /* for EBCDIC 037 */ 0xA7C9, 0xA7CA, 0xA7CB, + 0xA7D0, + 0xA7D1, + 0xA7D2, + 0xA7D3, + 0xA7D4, + 0xA7D5, + 0xA7D6, + 0xA7D7, + 0xA7D8, + 0xA7D9, + 0xA7DA, + 0xA7F2, 0xA7F5, 0xA7F6, 0xA7F7, @@ -68348,12 +69665,36 @@ static const UV _Perl_SB_invlist[] = { /* for EBCDIC 037 */ 0x10528, 0x10530, 0x10564, + 0x10570, + 0x1057B, + 0x1057C, + 0x1058B, + 0x1058C, + 0x10593, + 0x10594, + 0x10596, + 0x10597, + 0x105A2, + 0x105A3, + 0x105B2, + 0x105B3, + 0x105BA, + 0x105BB, + 0x105BD, 0x10600, 0x10737, 0x10740, 0x10756, 0x10760, 0x10768, + 0x10780, + 0x10781, + 0x10783, + 0x10786, + 0x10787, + 0x107B1, + 0x107B2, + 0x107BB, 0x10800, 0x10806, 0x10808, @@ -68443,6 +69784,10 @@ static const UV _Perl_SB_invlist[] = { /* for EBCDIC 037 */ 0x10F51, 0x10F55, 0x10F5A, + 0x10F70, + 0x10F82, + 0x10F86, + 0x10F8A, 0x10FB0, 0x10FC5, 0x10FE0, @@ -68454,6 +69799,10 @@ static const UV _Perl_SB_invlist[] = { /* for EBCDIC 037 */ 0x11049, 0x11066, 0x11070, + 0x11071, + 0x11073, + 0x11075, + 0x11076, 0x1107F, 0x11083, 0x110B0, @@ -68461,6 +69810,7 @@ static const UV _Perl_SB_invlist[] = { /* for EBCDIC 037 */ 0x110BD, 0x110BE, 0x110C2, + 0x110C3, 0x110CD, 0x110CE, 0x110D0, @@ -68609,6 +69959,8 @@ static const UV _Perl_SB_invlist[] = { /* for EBCDIC 037 */ 0x1173A, 0x1173C, 0x1173F, + 0x11740, + 0x11747, 0x11800, 0x1182C, 0x1183B, @@ -68670,7 +70022,7 @@ static const UV _Perl_SB_invlist[] = { /* for EBCDIC 037 */ 0x11A9B, 0x11A9D, 0x11A9E, - 0x11AC0, + 0x11AB0, 0x11AF9, 0x11C00, 0x11C09, @@ -68732,6 +70084,8 @@ static const UV _Perl_SB_invlist[] = { /* for EBCDIC 037 */ 0x1246F, 0x12480, 0x12544, + 0x12F90, + 0x12FF1, 0x13000, 0x1342F, 0x13430, @@ -68746,6 +70100,9 @@ static const UV _Perl_SB_invlist[] = { /* for EBCDIC 037 */ 0x16A6A, 0x16A6E, 0x16A70, + 0x16ABF, + 0x16AC0, + 0x16ACA, 0x16AD0, 0x16AEE, 0x16AF0, @@ -68791,8 +70148,14 @@ static const UV _Perl_SB_invlist[] = { /* for EBCDIC 037 */ 0x18CD6, 0x18D00, 0x18D09, + 0x1AFF0, + 0x1AFF4, + 0x1AFF5, + 0x1AFFC, + 0x1AFFD, + 0x1AFFF, 0x1B000, - 0x1B11F, + 0x1B123, 0x1B150, 0x1B153, 0x1B164, @@ -68811,6 +70174,10 @@ static const UV _Perl_SB_invlist[] = { /* for EBCDIC 037 */ 0x1BC9F, 0x1BCA0, 0x1BCA4, + 0x1CF00, + 0x1CF2E, + 0x1CF30, + 0x1CF47, 0x1D165, 0x1D16A, 0x1D16D, @@ -68928,6 +70295,10 @@ static const UV _Perl_SB_invlist[] = { /* for EBCDIC 037 */ 0x1DAA0, 0x1DAA1, 0x1DAB0, + 0x1DF00, + 0x1DF0A, + 0x1DF0B, + 0x1DF1F, 0x1E000, 0x1E007, 0x1E008, @@ -68947,10 +70318,21 @@ static const UV _Perl_SB_invlist[] = { /* for EBCDIC 037 */ 0x1E14A, 0x1E14E, 0x1E14F, + 0x1E290, + 0x1E2AE, + 0x1E2AF, 0x1E2C0, 0x1E2EC, 0x1E2F0, 0x1E2FA, + 0x1E7E0, + 0x1E7E7, + 0x1E7E8, + 0x1E7EC, + 0x1E7ED, + 0x1E7EF, + 0x1E7F0, + 0x1E7FF, 0x1E800, 0x1E8C5, 0x1E8D0, @@ -69039,9 +70421,9 @@ static const UV _Perl_SB_invlist[] = { /* for EBCDIC 037 */ 0x1FBF0, 0x1FBFA, 0x20000, - 0x2A6DE, + 0x2A6E0, 0x2A700, - 0x2B735, + 0x2B739, 0x2B740, 0x2B81E, 0x2B820, @@ -69752,7 +71134,6 @@ static const SB_enum _Perl_SB_invmap[] = { /* for EBCDIC 037 */ SB_Extend, SB_Other, SB_Format, - SB_Other, SB_STerm, SB_OLetter, SB_Extend, @@ -69825,6 +71206,10 @@ static const SB_enum _Perl_SB_invmap[] = { /* for EBCDIC 037 */ SB_Other, SB_OLetter, SB_Other, + SB_Format, + SB_Other, + SB_Extend, + SB_OLetter, SB_Extend, SB_Format, SB_Extend, @@ -70019,6 +71404,7 @@ static const SB_enum _Perl_SB_invmap[] = { /* for EBCDIC 037 */ SB_Other, SB_OLetter, SB_Other, + SB_Extend, SB_OLetter, SB_Extend, SB_Other, @@ -70031,6 +71417,8 @@ static const SB_enum _Perl_SB_invmap[] = { /* for EBCDIC 037 */ SB_OLetter, SB_Other, SB_OLetter, + SB_Other, + SB_OLetter, SB_Extend, SB_Other, SB_Numeric, @@ -70267,8 +71655,6 @@ static const SB_enum _Perl_SB_invmap[] = { /* for EBCDIC 037 */ SB_OLetter, SB_Other, SB_OLetter, - SB_Other, - SB_OLetter, SB_Extend, SB_Other, SB_OLetter, @@ -70302,7 +71688,7 @@ static const SB_enum _Perl_SB_invmap[] = { /* for EBCDIC 037 */ SB_Other, SB_Extend, SB_Format, - SB_Other, + SB_Extend, SB_Numeric, SB_Other, SB_OLetter, @@ -70363,6 +71749,8 @@ static const SB_enum _Perl_SB_invmap[] = { /* for EBCDIC 037 */ SB_Other, SB_Extend, SB_Other, + SB_STerm, + SB_Other, SB_Extend, SB_OLetter, SB_Extend, @@ -70401,8 +71789,6 @@ static const SB_enum _Perl_SB_invmap[] = { /* for EBCDIC 037 */ SB_Other, SB_Lower, SB_Extend, - SB_Other, - SB_Extend, SB_Upper, SB_Lower, SB_Upper, @@ -70811,9 +72197,7 @@ static const SB_enum _Perl_SB_invmap[] = { /* for EBCDIC 037 */ SB_Close, SB_Other, SB_Upper, - SB_Other, SB_Lower, - SB_Other, SB_Upper, SB_Lower, SB_Upper, @@ -70982,6 +72366,9 @@ static const SB_enum _Perl_SB_invmap[] = { /* for EBCDIC 037 */ SB_Other, SB_Close, SB_Other, + SB_STerm, + SB_Close, + SB_Other, SB_Sp, SB_SContinue, SB_STerm, @@ -71024,8 +72411,6 @@ static const SB_enum _Perl_SB_invmap[] = { /* for EBCDIC 037 */ SB_Other, SB_OLetter, SB_Other, - SB_OLetter, - SB_Other, SB_STerm, SB_OLetter, SB_Other, @@ -71259,14 +72644,27 @@ static const SB_enum _Perl_SB_invmap[] = { /* for EBCDIC 037 */ SB_Lower, SB_Upper, SB_Lower, + SB_Upper, + SB_Lower, + SB_Upper, + SB_Lower, + SB_Upper, + SB_Lower, + SB_Upper, + SB_Lower, SB_Other, SB_Upper, SB_Lower, + SB_Other, + SB_Lower, + SB_Other, + SB_Lower, SB_Upper, SB_Lower, SB_Upper, SB_Lower, SB_Other, + SB_OLetter, SB_Upper, SB_Lower, SB_OLetter, @@ -71547,11 +72945,35 @@ static const SB_enum _Perl_SB_invmap[] = { /* for EBCDIC 037 */ SB_Other, SB_OLetter, SB_Other, + SB_Upper, + SB_Other, + SB_Upper, + SB_Other, + SB_Upper, + SB_Other, + SB_Upper, + SB_Other, + SB_Lower, + SB_Other, + SB_Lower, + SB_Other, + SB_Lower, + SB_Other, + SB_Lower, + SB_Other, + SB_OLetter, + SB_Other, SB_OLetter, SB_Other, SB_OLetter, SB_Other, + SB_Lower, SB_OLetter, + SB_Lower, + SB_Other, + SB_Lower, + SB_Other, + SB_Lower, SB_Other, SB_OLetter, SB_Other, @@ -71643,6 +73065,10 @@ static const SB_enum _Perl_SB_invmap[] = { /* for EBCDIC 037 */ SB_STerm, SB_Other, SB_OLetter, + SB_Extend, + SB_STerm, + SB_Other, + SB_OLetter, SB_Other, SB_OLetter, SB_Other, @@ -71652,6 +73078,10 @@ static const SB_enum _Perl_SB_invmap[] = { /* for EBCDIC 037 */ SB_STerm, SB_Other, SB_Numeric, + SB_Extend, + SB_OLetter, + SB_Extend, + SB_OLetter, SB_Other, SB_Extend, SB_OLetter, @@ -71659,6 +73089,7 @@ static const SB_enum _Perl_SB_invmap[] = { /* for EBCDIC 037 */ SB_Other, SB_Format, SB_STerm, + SB_Extend, SB_Other, SB_Format, SB_Other, @@ -71809,6 +73240,8 @@ static const SB_enum _Perl_SB_invmap[] = { /* for EBCDIC 037 */ SB_STerm, SB_Other, SB_OLetter, + SB_Other, + SB_OLetter, SB_Extend, SB_Other, SB_Upper, @@ -71933,6 +73366,8 @@ static const SB_enum _Perl_SB_invmap[] = { /* for EBCDIC 037 */ SB_Other, SB_OLetter, SB_Other, + SB_OLetter, + SB_Other, SB_Format, SB_Other, SB_OLetter, @@ -71944,6 +73379,9 @@ static const SB_enum _Perl_SB_invmap[] = { /* for EBCDIC 037 */ SB_Numeric, SB_Other, SB_STerm, + SB_OLetter, + SB_Other, + SB_Numeric, SB_Other, SB_OLetter, SB_Other, @@ -72006,6 +73444,12 @@ static const SB_enum _Perl_SB_invmap[] = { /* for EBCDIC 037 */ SB_Other, SB_OLetter, SB_Other, + SB_OLetter, + SB_Other, + SB_OLetter, + SB_Other, + SB_OLetter, + SB_Other, SB_Extend, SB_STerm, SB_Format, @@ -72013,6 +73457,10 @@ static const SB_enum _Perl_SB_invmap[] = { /* for EBCDIC 037 */ SB_Extend, SB_Other, SB_Extend, + SB_Other, + SB_Extend, + SB_Other, + SB_Extend, SB_Format, SB_Extend, SB_Other, @@ -72127,6 +73575,10 @@ static const SB_enum _Perl_SB_invmap[] = { /* for EBCDIC 037 */ SB_Other, SB_Extend, SB_Other, + SB_Lower, + SB_OLetter, + SB_Lower, + SB_Other, SB_Extend, SB_Other, SB_Extend, @@ -72148,10 +73600,21 @@ static const SB_enum _Perl_SB_invmap[] = { /* for EBCDIC 037 */ SB_Other, SB_OLetter, SB_Extend, + SB_Other, + SB_OLetter, + SB_Extend, SB_Numeric, SB_Other, SB_OLetter, SB_Other, + SB_OLetter, + SB_Other, + SB_OLetter, + SB_Other, + SB_OLetter, + SB_Other, + SB_OLetter, + SB_Other, SB_Extend, SB_Other, SB_Upper, @@ -72268,7 +73731,7 @@ static const SB_enum _Perl_SB_invmap[] = { /* for EBCDIC 037 */ # if 'A' == 65 /* ASCII/Latin1 */ static const UV _Perl_SCX_invlist[] = { /* for ASCII/Latin1 */ - 1673, /* Number of elements */ + 1731, /* Number of elements */ 148565664, /* Version and data structure type */ 0, /* 0 if the list starts at 0; 1 if it starts at the element beyond 0 */ @@ -72345,7 +73808,6 @@ static const UV _Perl_SCX_invlist[] = { /* for ASCII/Latin1 */ 0x61B, 0x61C, 0x61D, - 0x61E, 0x61F, 0x620, 0x640, @@ -72381,11 +73843,11 @@ static const UV _Perl_SCX_invlist[] = { /* for ASCII/Latin1 */ 0x85F, 0x860, 0x86B, - 0x8A0, - 0x8B5, - 0x8B6, - 0x8C8, - 0x8D3, + 0x870, + 0x88F, + 0x890, + 0x892, + 0x898, 0x8E2, 0x8E3, 0x900, @@ -72557,7 +74019,7 @@ static const UV _Perl_SCX_invlist[] = { /* for ASCII/Latin1 */ 0xC29, 0xC2A, 0xC3A, - 0xC3D, + 0xC3C, 0xC45, 0xC46, 0xC49, @@ -72567,6 +74029,8 @@ static const UV _Perl_SCX_invlist[] = { /* for ASCII/Latin1 */ 0xC57, 0xC58, 0xC5B, + 0xC5D, + 0xC5E, 0xC60, 0xC64, 0xC66, @@ -72590,7 +74054,7 @@ static const UV _Perl_SCX_invlist[] = { /* for ASCII/Latin1 */ 0xCCE, 0xCD5, 0xCD7, - 0xCDE, + 0xCDD, 0xCDF, 0xCE0, 0xCE4, @@ -72738,9 +74202,8 @@ static const UV _Perl_SCX_invlist[] = { /* for ASCII/Latin1 */ 0x16EE, 0x16F9, 0x1700, - 0x170D, - 0x170E, - 0x1715, + 0x1716, + 0x171F, 0x1720, 0x1735, 0x1737, @@ -72763,8 +74226,6 @@ static const UV _Perl_SCX_invlist[] = { /* for ASCII/Latin1 */ 0x1804, 0x1805, 0x1806, - 0x180F, - 0x1810, 0x181A, 0x1820, 0x1879, @@ -72807,11 +74268,11 @@ static const UV _Perl_SCX_invlist[] = { /* for ASCII/Latin1 */ 0x1AA0, 0x1AAE, 0x1AB0, - 0x1AC1, + 0x1ACF, 0x1B00, - 0x1B4C, + 0x1B4D, 0x1B50, - 0x1B7D, + 0x1B7F, 0x1B80, 0x1BC0, 0x1BF4, @@ -72923,7 +74384,7 @@ static const UV _Perl_SCX_invlist[] = { /* for ASCII/Latin1 */ 0x2090, 0x209D, 0x20A0, - 0x20C0, + 0x20C1, 0x20D0, 0x20F0, 0x20F1, @@ -72951,9 +74412,6 @@ static const UV _Perl_SCX_invlist[] = { /* for ASCII/Latin1 */ 0x2B96, 0x2B97, 0x2C00, - 0x2C2F, - 0x2C30, - 0x2C5F, 0x2C60, 0x2C80, 0x2CF4, @@ -72991,7 +74449,7 @@ static const UV _Perl_SCX_invlist[] = { /* for ASCII/Latin1 */ 0x2E00, 0x2E43, 0x2E44, - 0x2E53, + 0x2E5E, 0x2E80, 0x2E9A, 0x2E9B, @@ -73063,7 +74521,6 @@ static const UV _Perl_SCX_invlist[] = { /* for ASCII/Latin1 */ 0x3400, 0x4DC0, 0x4E00, - 0x9FFD, 0xA000, 0xA48D, 0xA490, @@ -73081,10 +74538,14 @@ static const UV _Perl_SCX_invlist[] = { /* for ASCII/Latin1 */ 0xA722, 0xA788, 0xA78B, - 0xA7C0, - 0xA7C2, 0xA7CB, - 0xA7F5, + 0xA7D0, + 0xA7D2, + 0xA7D3, + 0xA7D4, + 0xA7D5, + 0xA7DA, + 0xA7F2, 0xA800, 0xA82D, 0xA830, @@ -73179,14 +74640,15 @@ static const UV _Perl_SCX_invlist[] = { /* for ASCII/Latin1 */ 0xFB45, 0xFB46, 0xFB50, - 0xFBC2, + 0xFBC3, 0xFBD3, 0xFD3E, 0xFD40, - 0xFD50, 0xFD90, 0xFD92, 0xFDC8, + 0xFDCF, + 0xFDD0, 0xFDF0, 0xFDF2, 0xFDF3, @@ -73252,6 +74714,7 @@ static const UV _Perl_SCX_invlist[] = { /* for ASCII/Latin1 */ 0x10080, 0x100FB, 0x10100, + 0x10102, 0x10103, 0x10107, 0x10134, @@ -73301,12 +74764,33 @@ static const UV _Perl_SCX_invlist[] = { /* for ASCII/Latin1 */ 0x10564, 0x1056F, 0x10570, + 0x1057B, + 0x1057C, + 0x1058B, + 0x1058C, + 0x10593, + 0x10594, + 0x10596, + 0x10597, + 0x105A2, + 0x105A3, + 0x105B2, + 0x105B3, + 0x105BA, + 0x105BB, + 0x105BD, 0x10600, 0x10737, 0x10740, 0x10756, 0x10760, 0x10768, + 0x10780, + 0x10786, + 0x10787, + 0x107B1, + 0x107B2, + 0x107BB, 0x10800, 0x10806, 0x10808, @@ -73366,6 +74850,8 @@ static const UV _Perl_SCX_invlist[] = { /* for ASCII/Latin1 */ 0x10AC0, 0x10AE7, 0x10AEB, + 0x10AF2, + 0x10AF3, 0x10AF7, 0x10B00, 0x10B36, @@ -73405,6 +74891,8 @@ static const UV _Perl_SCX_invlist[] = { /* for ASCII/Latin1 */ 0x10F28, 0x10F30, 0x10F5A, + 0x10F70, + 0x10F8A, 0x10FB0, 0x10FCC, 0x10FE0, @@ -73412,10 +74900,10 @@ static const UV _Perl_SCX_invlist[] = { /* for ASCII/Latin1 */ 0x11000, 0x1104E, 0x11052, - 0x11070, + 0x11076, 0x1107F, 0x11080, - 0x110C2, + 0x110C3, 0x110CD, 0x110CE, 0x110D0, @@ -73503,7 +74991,7 @@ static const UV _Perl_SCX_invlist[] = { /* for ASCII/Latin1 */ 0x11660, 0x1166D, 0x11680, - 0x116B9, + 0x116BA, 0x116C0, 0x116CA, 0x11700, @@ -73511,7 +74999,7 @@ static const UV _Perl_SCX_invlist[] = { /* for ASCII/Latin1 */ 0x1171D, 0x1172C, 0x11730, - 0x11740, + 0x11747, 0x11800, 0x1183C, 0x118A0, @@ -73543,6 +75031,7 @@ static const UV _Perl_SCX_invlist[] = { /* for ASCII/Latin1 */ 0x11A48, 0x11A50, 0x11AA3, + 0x11AB0, 0x11AC0, 0x11AF9, 0x11C00, @@ -73604,6 +75093,8 @@ static const UV _Perl_SCX_invlist[] = { /* for ASCII/Latin1 */ 0x12475, 0x12480, 0x12544, + 0x12F90, + 0x12FF3, 0x13000, 0x1342F, 0x13430, @@ -73618,6 +75109,9 @@ static const UV _Perl_SCX_invlist[] = { /* for ASCII/Latin1 */ 0x16A6A, 0x16A6E, 0x16A70, + 0x16ABF, + 0x16AC0, + 0x16ACA, 0x16AD0, 0x16AEE, 0x16AF0, @@ -73654,9 +75148,16 @@ static const UV _Perl_SCX_invlist[] = { /* for ASCII/Latin1 */ 0x18CD6, 0x18D00, 0x18D09, + 0x1AFF0, + 0x1AFF4, + 0x1AFF5, + 0x1AFFC, + 0x1AFFD, + 0x1AFFF, 0x1B000, 0x1B001, - 0x1B11F, + 0x1B120, + 0x1B123, 0x1B150, 0x1B153, 0x1B164, @@ -73673,6 +75174,12 @@ static const UV _Perl_SCX_invlist[] = { /* for ASCII/Latin1 */ 0x1BC9A, 0x1BC9C, 0x1BCA4, + 0x1CF00, + 0x1CF2E, + 0x1CF30, + 0x1CF47, + 0x1CF50, + 0x1CFC4, 0x1D000, 0x1D0F6, 0x1D100, @@ -73686,7 +75193,7 @@ static const UV _Perl_SCX_invlist[] = { /* for ASCII/Latin1 */ 0x1D18C, 0x1D1AA, 0x1D1AE, - 0x1D1E9, + 0x1D1EB, 0x1D200, 0x1D246, 0x1D2E0, @@ -73743,6 +75250,8 @@ static const UV _Perl_SCX_invlist[] = { /* for ASCII/Latin1 */ 0x1DAA0, 0x1DAA1, 0x1DAB0, + 0x1DF00, + 0x1DF1F, 0x1E000, 0x1E007, 0x1E008, @@ -73761,10 +75270,20 @@ static const UV _Perl_SCX_invlist[] = { /* for ASCII/Latin1 */ 0x1E14A, 0x1E14E, 0x1E150, + 0x1E290, + 0x1E2AF, 0x1E2C0, 0x1E2FA, 0x1E2FF, 0x1E300, + 0x1E7E0, + 0x1E7E7, + 0x1E7E8, + 0x1E7EC, + 0x1E7ED, + 0x1E7EF, + 0x1E7F0, + 0x1E7FF, 0x1E800, 0x1E8C5, 0x1E8C7, @@ -73875,7 +75394,7 @@ static const UV _Perl_SCX_invlist[] = { /* for ASCII/Latin1 */ 0x1F266, 0x1F300, 0x1F6D8, - 0x1F6E0, + 0x1F6DD, 0x1F6ED, 0x1F6F0, 0x1F6FD, @@ -73885,6 +75404,8 @@ static const UV _Perl_SCX_invlist[] = { /* for ASCII/Latin1 */ 0x1F7D9, 0x1F7E0, 0x1F7EC, + 0x1F7F0, + 0x1F7F1, 0x1F800, 0x1F80C, 0x1F810, @@ -73898,27 +75419,27 @@ static const UV _Perl_SCX_invlist[] = { /* for ASCII/Latin1 */ 0x1F8B0, 0x1F8B2, 0x1F900, - 0x1F979, - 0x1F97A, - 0x1F9CC, - 0x1F9CD, 0x1FA54, 0x1FA60, 0x1FA6E, 0x1FA70, 0x1FA75, 0x1FA78, - 0x1FA7B, + 0x1FA7D, 0x1FA80, 0x1FA87, 0x1FA90, - 0x1FAA9, + 0x1FAAD, 0x1FAB0, - 0x1FAB7, + 0x1FABB, 0x1FAC0, - 0x1FAC3, + 0x1FAC6, 0x1FAD0, - 0x1FAD7, + 0x1FADA, + 0x1FAE0, + 0x1FAE8, + 0x1FAF0, + 0x1FAF7, 0x1FB00, 0x1FB93, 0x1FB94, @@ -73926,9 +75447,9 @@ static const UV _Perl_SCX_invlist[] = { /* for ASCII/Latin1 */ 0x1FBF0, 0x1FBFA, 0x20000, - 0x2A6DE, + 0x2A6E0, 0x2A700, - 0x2B735, + 0x2B739, 0x2B740, 0x2B81E, 0x2B820, @@ -73987,138 +75508,143 @@ typedef enum { SCX_Coptic = 26, SCX_Cuneiform = 27, SCX_Cypriot = 28, - SCX_Cyrillic = 29, - SCX_Deseret = 30, - SCX_Devanagari = 31, - SCX_Dives_Akuru = 32, - SCX_Dogra = 33, - SCX_Duployan = 34, - SCX_Egyptian_Hieroglyphs = 35, - SCX_Elbasan = 36, - SCX_Elymaic = 37, - SCX_Ethiopic = 38, - SCX_Georgian = 39, - SCX_Glagolitic = 40, - SCX_Gothic = 41, - SCX_Grantha = 42, - SCX_Greek = 43, - SCX_Gujarati = 44, - SCX_Gunjala_Gondi = 45, - SCX_Gurmukhi = 46, - SCX_Han = 47, - SCX_Hanb = 48, - SCX_Hangul = 49, - SCX_Hanifi_Rohingya = 50, - SCX_Hanunoo = 51, - SCX_Hatran = 52, - SCX_Hebrew = 53, - SCX_Hiragana = 54, - SCX_Imperial_Aramaic = 55, - SCX_Inherited = 56, - SCX_Inscriptional_Pahlavi = 57, - SCX_Inscriptional_Parthian = 58, - SCX_INVALID = 59, - SCX_Javanese = 60, - SCX_Jpan = 61, - SCX_Kaithi = 62, - SCX_Kannada = 63, - SCX_Katakana = 64, - SCX_Kayah_Li = 65, - SCX_Kharoshthi = 66, - SCX_Khitan_Small_Script = 67, - SCX_Khmer = 68, - SCX_Khojki = 69, - SCX_Khudawadi = 70, - SCX_Kore = 71, - SCX_Lao = 72, - SCX_Latin = 73, - SCX_Lepcha = 74, - SCX_Limbu = 75, - SCX_Linear_A = 76, - SCX_Linear_B = 77, - SCX_Lisu = 78, - SCX_Lycian = 79, - SCX_Lydian = 80, - SCX_Mahajani = 81, - SCX_Makasar = 82, - SCX_Malayalam = 83, - SCX_Mandaic = 84, - SCX_Manichaean = 85, - SCX_Marchen = 86, - SCX_Masaram_Gondi = 87, - SCX_Medefaidrin = 88, - SCX_Meetei_Mayek = 89, - SCX_Mende_Kikakui = 90, - SCX_Meroitic_Cursive = 91, - SCX_Meroitic_Hieroglyphs = 92, - SCX_Miao = 93, - SCX_Modi = 94, - SCX_Mongolian = 95, - SCX_Mro = 96, - SCX_Multani = 97, - SCX_Myanmar = 98, - SCX_Nabataean = 99, - SCX_Nandinagari = 100, - SCX_New_Tai_Lue = 101, - SCX_Newa = 102, - SCX_Nko = 103, - SCX_Nushu = 104, - SCX_Nyiakeng_Puachue_Hmong = 105, - SCX_Ogham = 106, - SCX_Ol_Chiki = 107, - SCX_Old_Hungarian = 108, - SCX_Old_Italic = 109, - SCX_Old_North_Arabian = 110, - SCX_Old_Permic = 111, - SCX_Old_Persian = 112, - SCX_Old_Sogdian = 113, - SCX_Old_South_Arabian = 114, - SCX_Old_Turkic = 115, - SCX_Oriya = 116, - SCX_Osage = 117, - SCX_Osmanya = 118, - SCX_Pahawh_Hmong = 119, - SCX_Palmyrene = 120, - SCX_Pau_Cin_Hau = 121, - SCX_Phags_Pa = 122, - SCX_Phoenician = 123, - SCX_Psalter_Pahlavi = 124, - SCX_Rejang = 125, - SCX_Runic = 126, - SCX_Samaritan = 127, - SCX_Saurashtra = 128, - SCX_Sharada = 129, - SCX_Shavian = 130, - SCX_Siddham = 131, - SCX_SignWriting = 132, - SCX_Sinhala = 133, - SCX_Sogdian = 134, - SCX_Sora_Sompeng = 135, - SCX_Soyombo = 136, - SCX_Sundanese = 137, - SCX_Syloti_Nagri = 138, - SCX_Syriac = 139, - SCX_Tagalog = 140, - SCX_Tagbanwa = 141, - SCX_Tai_Le = 142, - SCX_Tai_Tham = 143, - SCX_Tai_Viet = 144, - SCX_Takri = 145, - SCX_Tamil = 146, - SCX_Tangut = 147, - SCX_Telugu = 148, - SCX_Thaana = 149, - SCX_Thai = 150, - SCX_Tibetan = 151, - SCX_Tifinagh = 152, - SCX_Tirhuta = 153, - SCX_Ugaritic = 154, - SCX_Vai = 155, - SCX_Wancho = 156, - SCX_Warang_Citi = 157, - SCX_Yezidi = 158, - SCX_Yi = 159, - SCX_Zanabazar_Square = 160, + SCX_Cypro_Minoan = 29, + SCX_Cyrillic = 30, + SCX_Deseret = 31, + SCX_Devanagari = 32, + SCX_Dives_Akuru = 33, + SCX_Dogra = 34, + SCX_Duployan = 35, + SCX_Egyptian_Hieroglyphs = 36, + SCX_Elbasan = 37, + SCX_Elymaic = 38, + SCX_Ethiopic = 39, + SCX_Georgian = 40, + SCX_Glagolitic = 41, + SCX_Gothic = 42, + SCX_Grantha = 43, + SCX_Greek = 44, + SCX_Gujarati = 45, + SCX_Gunjala_Gondi = 46, + SCX_Gurmukhi = 47, + SCX_Han = 48, + SCX_Hanb = 49, + SCX_Hangul = 50, + SCX_Hanifi_Rohingya = 51, + SCX_Hanunoo = 52, + SCX_Hatran = 53, + SCX_Hebrew = 54, + SCX_Hiragana = 55, + SCX_Imperial_Aramaic = 56, + SCX_Inherited = 57, + SCX_Inscriptional_Pahlavi = 58, + SCX_Inscriptional_Parthian = 59, + SCX_INVALID = 60, + SCX_Javanese = 61, + SCX_Jpan = 62, + SCX_Kaithi = 63, + SCX_Kannada = 64, + SCX_Katakana = 65, + SCX_Kayah_Li = 66, + SCX_Kharoshthi = 67, + SCX_Khitan_Small_Script = 68, + SCX_Khmer = 69, + SCX_Khojki = 70, + SCX_Khudawadi = 71, + SCX_Kore = 72, + SCX_Lao = 73, + SCX_Latin = 74, + SCX_Lepcha = 75, + SCX_Limbu = 76, + SCX_Linear_A = 77, + SCX_Linear_B = 78, + SCX_Lisu = 79, + SCX_Lycian = 80, + SCX_Lydian = 81, + SCX_Mahajani = 82, + SCX_Makasar = 83, + SCX_Malayalam = 84, + SCX_Mandaic = 85, + SCX_Manichaean = 86, + SCX_Marchen = 87, + SCX_Masaram_Gondi = 88, + SCX_Medefaidrin = 89, + SCX_Meetei_Mayek = 90, + SCX_Mende_Kikakui = 91, + SCX_Meroitic_Cursive = 92, + SCX_Meroitic_Hieroglyphs = 93, + SCX_Miao = 94, + SCX_Modi = 95, + SCX_Mongolian = 96, + SCX_Mro = 97, + SCX_Multani = 98, + SCX_Myanmar = 99, + SCX_Nabataean = 100, + SCX_Nandinagari = 101, + SCX_New_Tai_Lue = 102, + SCX_Newa = 103, + SCX_Nko = 104, + SCX_Nushu = 105, + SCX_Nyiakeng_Puachue_Hmong = 106, + SCX_Ogham = 107, + SCX_Ol_Chiki = 108, + SCX_Old_Hungarian = 109, + SCX_Old_Italic = 110, + SCX_Old_North_Arabian = 111, + SCX_Old_Permic = 112, + SCX_Old_Persian = 113, + SCX_Old_Sogdian = 114, + SCX_Old_South_Arabian = 115, + SCX_Old_Turkic = 116, + SCX_Old_Uyghur = 117, + SCX_Oriya = 118, + SCX_Osage = 119, + SCX_Osmanya = 120, + SCX_Pahawh_Hmong = 121, + SCX_Palmyrene = 122, + SCX_Pau_Cin_Hau = 123, + SCX_Phags_Pa = 124, + SCX_Phoenician = 125, + SCX_Psalter_Pahlavi = 126, + SCX_Rejang = 127, + SCX_Runic = 128, + SCX_Samaritan = 129, + SCX_Saurashtra = 130, + SCX_Sharada = 131, + SCX_Shavian = 132, + SCX_Siddham = 133, + SCX_SignWriting = 134, + SCX_Sinhala = 135, + SCX_Sogdian = 136, + SCX_Sora_Sompeng = 137, + SCX_Soyombo = 138, + SCX_Sundanese = 139, + SCX_Syloti_Nagri = 140, + SCX_Syriac = 141, + SCX_Tagalog = 142, + SCX_Tagbanwa = 143, + SCX_Tai_Le = 144, + SCX_Tai_Tham = 145, + SCX_Tai_Viet = 146, + SCX_Takri = 147, + SCX_Tamil = 148, + SCX_Tangsa = 149, + SCX_Tangut = 150, + SCX_Telugu = 151, + SCX_Thaana = 152, + SCX_Thai = 153, + SCX_Tibetan = 154, + SCX_Tifinagh = 155, + SCX_Tirhuta = 156, + SCX_Toto = 157, + SCX_Ugaritic = 158, + SCX_Vai = 159, + SCX_Vithkuqi = 160, + SCX_Wancho = 161, + SCX_Warang_Citi = 162, + SCX_Yezidi = 163, + SCX_Yi = 164, + SCX_Zanabazar_Square = 165, SCX_use_AUX_TABLE_1 = -1, SCX_use_AUX_TABLE_2 = -2, SCX_use_AUX_TABLE_3 = -3, @@ -74173,7 +75699,11 @@ typedef enum { SCX_use_AUX_TABLE_52 = -52, SCX_use_AUX_TABLE_53 = -53, SCX_use_AUX_TABLE_54 = -54, - SCX_use_AUX_TABLE_55 = -55 + SCX_use_AUX_TABLE_55 = -55, + SCX_use_AUX_TABLE_56 = -56, + SCX_use_AUX_TABLE_57 = -57, + SCX_use_AUX_TABLE_58 = -58, + SCX_use_AUX_TABLE_59 = -59 } SCX_enum; # endif /* ASCII/Latin1 */ @@ -74207,6 +75737,7 @@ static const SCX_enum SCX_AUX_TABLE_4[] = { static const SCX_enum SCX_AUX_TABLE_5[] = { SCX_Arabic, SCX_Hanifi_Rohingya, + SCX_Nko, SCX_Syriac, SCX_Thaana, SCX_Yezidi @@ -74219,33 +75750,44 @@ static const SCX_enum SCX_AUX_TABLE_6[] = { }; static const SCX_enum SCX_AUX_TABLE_7[] = { + SCX_Adlam, + SCX_Arabic, + SCX_Hanifi_Rohingya, + SCX_Nko, + SCX_Syriac, + SCX_Thaana, + SCX_Yezidi +}; + +static const SCX_enum SCX_AUX_TABLE_8[] = { SCX_Adlam, SCX_Arabic, SCX_Hanifi_Rohingya, SCX_Mandaic, SCX_Manichaean, + SCX_Old_Uyghur, SCX_Psalter_Pahlavi, SCX_Sogdian, SCX_Syriac }; -static const SCX_enum SCX_AUX_TABLE_8[] = { +static const SCX_enum SCX_AUX_TABLE_9[] = { SCX_Arabic, SCX_Syriac }; -static const SCX_enum SCX_AUX_TABLE_9[] = { +static const SCX_enum SCX_AUX_TABLE_10[] = { SCX_Arabic, SCX_Thaana, SCX_Yezidi }; -static const SCX_enum SCX_AUX_TABLE_10[] = { +static const SCX_enum SCX_AUX_TABLE_11[] = { SCX_Arabic, SCX_Hanifi_Rohingya }; -static const SCX_enum SCX_AUX_TABLE_11[] = { +static const SCX_enum SCX_AUX_TABLE_12[] = { SCX_Bengali, SCX_Devanagari, SCX_Grantha, @@ -74261,7 +75803,7 @@ static const SCX_enum SCX_AUX_TABLE_11[] = { SCX_Tirhuta }; -static const SCX_enum SCX_AUX_TABLE_12[] = { +static const SCX_enum SCX_AUX_TABLE_13[] = { SCX_Bengali, SCX_Devanagari, SCX_Grantha, @@ -74276,7 +75818,7 @@ static const SCX_enum SCX_AUX_TABLE_12[] = { SCX_Tirhuta }; -static const SCX_enum SCX_AUX_TABLE_13[] = { +static const SCX_enum SCX_AUX_TABLE_14[] = { SCX_Bengali, SCX_Devanagari, SCX_Dogra, @@ -74299,7 +75841,7 @@ static const SCX_enum SCX_AUX_TABLE_13[] = { SCX_Tirhuta }; -static const SCX_enum SCX_AUX_TABLE_14[] = { +static const SCX_enum SCX_AUX_TABLE_15[] = { SCX_Bengali, SCX_Devanagari, SCX_Dogra, @@ -74323,90 +75865,90 @@ static const SCX_enum SCX_AUX_TABLE_14[] = { SCX_Tirhuta }; -static const SCX_enum SCX_AUX_TABLE_15[] = { +static const SCX_enum SCX_AUX_TABLE_16[] = { SCX_Devanagari, SCX_Dogra, SCX_Kaithi, SCX_Mahajani }; -static const SCX_enum SCX_AUX_TABLE_16[] = { +static const SCX_enum SCX_AUX_TABLE_17[] = { SCX_Bengali, SCX_Chakma, SCX_Syloti_Nagri }; -static const SCX_enum SCX_AUX_TABLE_17[] = { +static const SCX_enum SCX_AUX_TABLE_18[] = { SCX_Gurmukhi, SCX_Multani }; -static const SCX_enum SCX_AUX_TABLE_18[] = { +static const SCX_enum SCX_AUX_TABLE_19[] = { SCX_Gujarati, SCX_Khojki }; -static const SCX_enum SCX_AUX_TABLE_19[] = { +static const SCX_enum SCX_AUX_TABLE_20[] = { SCX_Grantha, SCX_Tamil }; -static const SCX_enum SCX_AUX_TABLE_20[] = { +static const SCX_enum SCX_AUX_TABLE_21[] = { SCX_Kannada, SCX_Nandinagari }; -static const SCX_enum SCX_AUX_TABLE_21[] = { +static const SCX_enum SCX_AUX_TABLE_22[] = { SCX_Chakma, SCX_Myanmar, SCX_Tai_Le }; -static const SCX_enum SCX_AUX_TABLE_22[] = { +static const SCX_enum SCX_AUX_TABLE_23[] = { SCX_Georgian, SCX_Latin }; -static const SCX_enum SCX_AUX_TABLE_23[] = { +static const SCX_enum SCX_AUX_TABLE_24[] = { SCX_Hangul, SCX_Kore }; -static const SCX_enum SCX_AUX_TABLE_24[] = { +static const SCX_enum SCX_AUX_TABLE_25[] = { SCX_Buhid, SCX_Hanunoo, SCX_Tagalog, SCX_Tagbanwa }; -static const SCX_enum SCX_AUX_TABLE_25[] = { +static const SCX_enum SCX_AUX_TABLE_26[] = { SCX_Mongolian, SCX_Phags_Pa }; -static const SCX_enum SCX_AUX_TABLE_26[] = { +static const SCX_enum SCX_AUX_TABLE_27[] = { SCX_Bengali, SCX_Devanagari, SCX_Grantha, SCX_Kannada }; -static const SCX_enum SCX_AUX_TABLE_27[] = { +static const SCX_enum SCX_AUX_TABLE_28[] = { SCX_Devanagari, SCX_Grantha }; -static const SCX_enum SCX_AUX_TABLE_28[] = { +static const SCX_enum SCX_AUX_TABLE_29[] = { SCX_Bengali, SCX_Devanagari }; -static const SCX_enum SCX_AUX_TABLE_29[] = { +static const SCX_enum SCX_AUX_TABLE_30[] = { SCX_Devanagari, SCX_Sharada }; -static const SCX_enum SCX_AUX_TABLE_30[] = { +static const SCX_enum SCX_AUX_TABLE_31[] = { SCX_Devanagari, SCX_Kannada, SCX_Malayalam, @@ -74415,12 +75957,12 @@ static const SCX_enum SCX_AUX_TABLE_30[] = { SCX_Telugu }; -static const SCX_enum SCX_AUX_TABLE_31[] = { +static const SCX_enum SCX_AUX_TABLE_32[] = { SCX_Devanagari, SCX_Nandinagari }; -static const SCX_enum SCX_AUX_TABLE_32[] = { +static const SCX_enum SCX_AUX_TABLE_33[] = { SCX_Bengali, SCX_Devanagari, SCX_Grantha, @@ -74431,36 +75973,36 @@ static const SCX_enum SCX_AUX_TABLE_32[] = { SCX_Tirhuta }; -static const SCX_enum SCX_AUX_TABLE_33[] = { +static const SCX_enum SCX_AUX_TABLE_34[] = { SCX_Devanagari, SCX_Grantha, SCX_Kannada }; -static const SCX_enum SCX_AUX_TABLE_34[] = { +static const SCX_enum SCX_AUX_TABLE_35[] = { SCX_Cyrillic, SCX_Syriac }; -static const SCX_enum SCX_AUX_TABLE_35[] = { +static const SCX_enum SCX_AUX_TABLE_36[] = { SCX_Latin, SCX_Mongolian }; -static const SCX_enum SCX_AUX_TABLE_36[] = { +static const SCX_enum SCX_AUX_TABLE_37[] = { SCX_Devanagari, SCX_Grantha, SCX_Latin }; -static const SCX_enum SCX_AUX_TABLE_37[] = { +static const SCX_enum SCX_AUX_TABLE_38[] = { SCX_Han, SCX_Hanb, SCX_Jpan, SCX_Kore }; -static const SCX_enum SCX_AUX_TABLE_38[] = { +static const SCX_enum SCX_AUX_TABLE_39[] = { SCX_Bopomofo, SCX_Han, SCX_Hanb, @@ -74472,7 +76014,7 @@ static const SCX_enum SCX_AUX_TABLE_38[] = { SCX_Yi }; -static const SCX_enum SCX_AUX_TABLE_39[] = { +static const SCX_enum SCX_AUX_TABLE_40[] = { SCX_Bopomofo, SCX_Han, SCX_Hanb, @@ -74483,7 +76025,7 @@ static const SCX_enum SCX_AUX_TABLE_39[] = { SCX_Kore }; -static const SCX_enum SCX_AUX_TABLE_40[] = { +static const SCX_enum SCX_AUX_TABLE_41[] = { SCX_Bopomofo, SCX_Han, SCX_Hanb, @@ -74491,13 +76033,13 @@ static const SCX_enum SCX_AUX_TABLE_40[] = { SCX_Kore }; -static const SCX_enum SCX_AUX_TABLE_41[] = { +static const SCX_enum SCX_AUX_TABLE_42[] = { SCX_Hiragana, SCX_Jpan, SCX_Katakana }; -static const SCX_enum SCX_AUX_TABLE_42[] = { +static const SCX_enum SCX_AUX_TABLE_43[] = { SCX_Han, SCX_Hanb, SCX_Hiragana, @@ -74506,17 +76048,17 @@ static const SCX_enum SCX_AUX_TABLE_42[] = { SCX_Kore }; -static const SCX_enum SCX_AUX_TABLE_43[] = { +static const SCX_enum SCX_AUX_TABLE_44[] = { SCX_Hiragana, SCX_Jpan }; -static const SCX_enum SCX_AUX_TABLE_44[] = { +static const SCX_enum SCX_AUX_TABLE_45[] = { SCX_Jpan, SCX_Katakana }; -static const SCX_enum SCX_AUX_TABLE_45[] = { +static const SCX_enum SCX_AUX_TABLE_46[] = { SCX_Han, SCX_Hanb, SCX_Jpan, @@ -74524,7 +76066,7 @@ static const SCX_enum SCX_AUX_TABLE_45[] = { SCX_Latin }; -static const SCX_enum SCX_AUX_TABLE_46[] = { +static const SCX_enum SCX_AUX_TABLE_47[] = { SCX_Devanagari, SCX_Dogra, SCX_Gujarati, @@ -74541,7 +76083,7 @@ static const SCX_enum SCX_AUX_TABLE_46[] = { SCX_Tirhuta }; -static const SCX_enum SCX_AUX_TABLE_47[] = { +static const SCX_enum SCX_AUX_TABLE_48[] = { SCX_Devanagari, SCX_Dogra, SCX_Gujarati, @@ -74557,7 +76099,7 @@ static const SCX_enum SCX_AUX_TABLE_47[] = { SCX_Tirhuta }; -static const SCX_enum SCX_AUX_TABLE_48[] = { +static const SCX_enum SCX_AUX_TABLE_49[] = { SCX_Devanagari, SCX_Dogra, SCX_Gujarati, @@ -74571,43 +76113,59 @@ static const SCX_enum SCX_AUX_TABLE_48[] = { SCX_Tirhuta }; -static const SCX_enum SCX_AUX_TABLE_49[] = { +static const SCX_enum SCX_AUX_TABLE_50[] = { SCX_Devanagari, SCX_Tamil }; -static const SCX_enum SCX_AUX_TABLE_50[] = { +static const SCX_enum SCX_AUX_TABLE_51[] = { SCX_Kayah_Li, SCX_Latin, SCX_Myanmar }; -static const SCX_enum SCX_AUX_TABLE_51[] = { +static const SCX_enum SCX_AUX_TABLE_52[] = { SCX_Buginese, SCX_Javanese }; -static const SCX_enum SCX_AUX_TABLE_52[] = { +static const SCX_enum SCX_AUX_TABLE_53[] = { + SCX_Arabic, + SCX_Nko +}; + +static const SCX_enum SCX_AUX_TABLE_54[] = { SCX_Arabic, SCX_Thaana }; -static const SCX_enum SCX_AUX_TABLE_53[] = { +static const SCX_enum SCX_AUX_TABLE_55[] = { SCX_Cypriot, + SCX_Cypro_Minoan, SCX_Linear_B }; -static const SCX_enum SCX_AUX_TABLE_54[] = { +static const SCX_enum SCX_AUX_TABLE_56[] = { + SCX_Cypriot, + SCX_Linear_B +}; + +static const SCX_enum SCX_AUX_TABLE_57[] = { SCX_Cypriot, SCX_Linear_A, SCX_Linear_B }; -static const SCX_enum SCX_AUX_TABLE_55[] = { +static const SCX_enum SCX_AUX_TABLE_58[] = { SCX_Arabic, SCX_Coptic }; +static const SCX_enum SCX_AUX_TABLE_59[] = { + SCX_Manichaean, + SCX_Old_Uyghur +}; + static const SCX_enum * const SCX_AUX_TABLE_ptrs[] = { NULL, /* Placeholder */ SCX_AUX_TABLE_1, @@ -74664,7 +76222,11 @@ static const SCX_enum * const SCX_AUX_TABLE_ptrs[] = { SCX_AUX_TABLE_52, SCX_AUX_TABLE_53, SCX_AUX_TABLE_54, - SCX_AUX_TABLE_55 + SCX_AUX_TABLE_55, + SCX_AUX_TABLE_56, + SCX_AUX_TABLE_57, + SCX_AUX_TABLE_58, + SCX_AUX_TABLE_59 }; /* Parallel table to the above, giving the number of elements in each table @@ -74676,57 +76238,61 @@ static const U8 SCX_AUX_TABLE_lengths[] = { 2 /* SCX_AUX_TABLE_2 */, 2 /* SCX_AUX_TABLE_3 */, 2 /* SCX_AUX_TABLE_4 */, - 5 /* SCX_AUX_TABLE_5 */, + 6 /* SCX_AUX_TABLE_5 */, 3 /* SCX_AUX_TABLE_6 */, - 8 /* SCX_AUX_TABLE_7 */, - 2 /* SCX_AUX_TABLE_8 */, - 3 /* SCX_AUX_TABLE_9 */, - 2 /* SCX_AUX_TABLE_10 */, - 13 /* SCX_AUX_TABLE_11 */, - 12 /* SCX_AUX_TABLE_12 */, - 20 /* SCX_AUX_TABLE_13 */, - 21 /* SCX_AUX_TABLE_14 */, - 4 /* SCX_AUX_TABLE_15 */, - 3 /* SCX_AUX_TABLE_16 */, - 2 /* SCX_AUX_TABLE_17 */, + 7 /* SCX_AUX_TABLE_7 */, + 9 /* SCX_AUX_TABLE_8 */, + 2 /* SCX_AUX_TABLE_9 */, + 3 /* SCX_AUX_TABLE_10 */, + 2 /* SCX_AUX_TABLE_11 */, + 13 /* SCX_AUX_TABLE_12 */, + 12 /* SCX_AUX_TABLE_13 */, + 20 /* SCX_AUX_TABLE_14 */, + 21 /* SCX_AUX_TABLE_15 */, + 4 /* SCX_AUX_TABLE_16 */, + 3 /* SCX_AUX_TABLE_17 */, 2 /* SCX_AUX_TABLE_18 */, 2 /* SCX_AUX_TABLE_19 */, 2 /* SCX_AUX_TABLE_20 */, - 3 /* SCX_AUX_TABLE_21 */, - 2 /* SCX_AUX_TABLE_22 */, + 2 /* SCX_AUX_TABLE_21 */, + 3 /* SCX_AUX_TABLE_22 */, 2 /* SCX_AUX_TABLE_23 */, - 4 /* SCX_AUX_TABLE_24 */, - 2 /* SCX_AUX_TABLE_25 */, - 4 /* SCX_AUX_TABLE_26 */, - 2 /* SCX_AUX_TABLE_27 */, + 2 /* SCX_AUX_TABLE_24 */, + 4 /* SCX_AUX_TABLE_25 */, + 2 /* SCX_AUX_TABLE_26 */, + 4 /* SCX_AUX_TABLE_27 */, 2 /* SCX_AUX_TABLE_28 */, 2 /* SCX_AUX_TABLE_29 */, - 6 /* SCX_AUX_TABLE_30 */, - 2 /* SCX_AUX_TABLE_31 */, - 8 /* SCX_AUX_TABLE_32 */, - 3 /* SCX_AUX_TABLE_33 */, - 2 /* SCX_AUX_TABLE_34 */, + 2 /* SCX_AUX_TABLE_30 */, + 6 /* SCX_AUX_TABLE_31 */, + 2 /* SCX_AUX_TABLE_32 */, + 8 /* SCX_AUX_TABLE_33 */, + 3 /* SCX_AUX_TABLE_34 */, 2 /* SCX_AUX_TABLE_35 */, - 3 /* SCX_AUX_TABLE_36 */, - 4 /* SCX_AUX_TABLE_37 */, - 9 /* SCX_AUX_TABLE_38 */, - 8 /* SCX_AUX_TABLE_39 */, - 5 /* SCX_AUX_TABLE_40 */, - 3 /* SCX_AUX_TABLE_41 */, - 6 /* SCX_AUX_TABLE_42 */, - 2 /* SCX_AUX_TABLE_43 */, + 2 /* SCX_AUX_TABLE_36 */, + 3 /* SCX_AUX_TABLE_37 */, + 4 /* SCX_AUX_TABLE_38 */, + 9 /* SCX_AUX_TABLE_39 */, + 8 /* SCX_AUX_TABLE_40 */, + 5 /* SCX_AUX_TABLE_41 */, + 3 /* SCX_AUX_TABLE_42 */, + 6 /* SCX_AUX_TABLE_43 */, 2 /* SCX_AUX_TABLE_44 */, - 5 /* SCX_AUX_TABLE_45 */, - 14 /* SCX_AUX_TABLE_46 */, - 13 /* SCX_AUX_TABLE_47 */, - 11 /* SCX_AUX_TABLE_48 */, - 2 /* SCX_AUX_TABLE_49 */, - 3 /* SCX_AUX_TABLE_50 */, - 2 /* SCX_AUX_TABLE_51 */, + 2 /* SCX_AUX_TABLE_45 */, + 5 /* SCX_AUX_TABLE_46 */, + 14 /* SCX_AUX_TABLE_47 */, + 13 /* SCX_AUX_TABLE_48 */, + 11 /* SCX_AUX_TABLE_49 */, + 2 /* SCX_AUX_TABLE_50 */, + 3 /* SCX_AUX_TABLE_51 */, 2 /* SCX_AUX_TABLE_52 */, 2 /* SCX_AUX_TABLE_53 */, - 3 /* SCX_AUX_TABLE_54 */, - 2 /* SCX_AUX_TABLE_55 */ + 2 /* SCX_AUX_TABLE_54 */, + 3 /* SCX_AUX_TABLE_55 */, + 2 /* SCX_AUX_TABLE_56 */, + 3 /* SCX_AUX_TABLE_57 */, + 2 /* SCX_AUX_TABLE_58 */, + 2 /* SCX_AUX_TABLE_59 */ }; /* This table, indexed by the script enum, gives the zero code point for that @@ -74763,6 +76329,7 @@ static const UV script_zeros[] = { '0', /* Coptic */ '0', /* Cuneiform */ '0', /* Cypriot */ + '0', /* Cypro_Minoan */ '0', /* Cyrillic */ '0', /* Deseret */ 0x966, /* Devanagari */ @@ -74850,6 +76417,7 @@ static const UV script_zeros[] = { '0', /* Old_Sogdian */ '0', /* Old_South_Arabian */ '0', /* Old_Turkic */ + '0', /* Old_Uyghur */ 0xb66, /* Oriya */ '0', /* Osage */ 0x104a0, /* Osmanya */ @@ -74881,6 +76449,7 @@ static const UV script_zeros[] = { '0', /* Tai_Viet */ 0x116c0, /* Takri */ 0xbe6, /* Tamil */ + 0x16ac0, /* Tangsa */ '0', /* Tangut */ 0xc66, /* Telugu */ 0x660, /* Thaana */ @@ -74888,8 +76457,10 @@ static const UV script_zeros[] = { 0xf20, /* Tibetan */ '0', /* Tifinagh */ 0x114d0, /* Tirhuta */ + '0', /* Toto */ '0', /* Ugaritic */ 0xa620, /* Vai */ + '0', /* Vithkuqi */ 0x1e2f0, /* Wancho */ 0x118e0, /* Warang_Citi */ 0x660 /* Yezidi */ @@ -74968,9 +76539,6 @@ static const SCX_enum _Perl_SCX_invmap[] = { /* for ASCII/Latin1 */ SCX_Arabic, SCX_use_AUX_TABLE_5, SCX_use_AUX_TABLE_6, - SCX_Unknown, - SCX_Arabic, - SCX_use_AUX_TABLE_5, SCX_Arabic, SCX_use_AUX_TABLE_7, SCX_Arabic, @@ -74978,10 +76546,12 @@ static const SCX_enum _Perl_SCX_invmap[] = { /* for ASCII/Latin1 */ SCX_Arabic, SCX_use_AUX_TABLE_9, SCX_Arabic, - SCX_use_AUX_TABLE_8, - SCX_Arabic, SCX_use_AUX_TABLE_10, SCX_Arabic, + SCX_use_AUX_TABLE_9, + SCX_Arabic, + SCX_use_AUX_TABLE_11, + SCX_Arabic, SCX_Common, SCX_Arabic, SCX_Syriac, @@ -75013,13 +76583,13 @@ static const SCX_enum _Perl_SCX_invmap[] = { /* for ASCII/Latin1 */ SCX_Common, SCX_Arabic, SCX_Devanagari, - SCX_use_AUX_TABLE_11, SCX_use_AUX_TABLE_12, + SCX_use_AUX_TABLE_13, SCX_Inherited, SCX_Devanagari, - SCX_use_AUX_TABLE_13, SCX_use_AUX_TABLE_14, SCX_use_AUX_TABLE_15, + SCX_use_AUX_TABLE_16, SCX_Devanagari, SCX_Bengali, SCX_Unknown, @@ -75047,7 +76617,7 @@ static const SCX_enum _Perl_SCX_invmap[] = { /* for ASCII/Latin1 */ SCX_Unknown, SCX_Bengali, SCX_Unknown, - SCX_use_AUX_TABLE_16, + SCX_use_AUX_TABLE_17, SCX_Bengali, SCX_Unknown, SCX_Gurmukhi, @@ -75080,7 +76650,7 @@ static const SCX_enum _Perl_SCX_invmap[] = { /* for ASCII/Latin1 */ SCX_Unknown, SCX_Gurmukhi, SCX_Unknown, - SCX_use_AUX_TABLE_17, + SCX_use_AUX_TABLE_18, SCX_Gurmukhi, SCX_Unknown, SCX_Gujarati, @@ -75107,7 +76677,7 @@ static const SCX_enum _Perl_SCX_invmap[] = { /* for ASCII/Latin1 */ SCX_Unknown, SCX_Gujarati, SCX_Unknown, - SCX_use_AUX_TABLE_18, + SCX_use_AUX_TABLE_19, SCX_Gujarati, SCX_Unknown, SCX_Gujarati, @@ -75170,7 +76740,7 @@ static const SCX_enum _Perl_SCX_invmap[] = { /* for ASCII/Latin1 */ SCX_Unknown, SCX_Tamil, SCX_Unknown, - SCX_use_AUX_TABLE_19, + SCX_use_AUX_TABLE_20, SCX_Tamil, SCX_Unknown, SCX_Telugu, @@ -75196,6 +76766,8 @@ static const SCX_enum _Perl_SCX_invmap[] = { /* for ASCII/Latin1 */ SCX_Telugu, SCX_Unknown, SCX_Telugu, + SCX_Unknown, + SCX_Telugu, SCX_Kannada, SCX_Unknown, SCX_Kannada, @@ -75218,7 +76790,7 @@ static const SCX_enum _Perl_SCX_invmap[] = { /* for ASCII/Latin1 */ SCX_Unknown, SCX_Kannada, SCX_Unknown, - SCX_use_AUX_TABLE_20, + SCX_use_AUX_TABLE_21, SCX_Unknown, SCX_Kannada, SCX_Unknown, @@ -75302,7 +76874,7 @@ static const SCX_enum _Perl_SCX_invmap[] = { /* for ASCII/Latin1 */ SCX_Tibetan, SCX_Unknown, SCX_Myanmar, - SCX_use_AUX_TABLE_21, + SCX_use_AUX_TABLE_22, SCX_Myanmar, SCX_Georgian, SCX_Unknown, @@ -75311,9 +76883,9 @@ static const SCX_enum _Perl_SCX_invmap[] = { /* for ASCII/Latin1 */ SCX_Georgian, SCX_Unknown, SCX_Georgian, - SCX_use_AUX_TABLE_22, - SCX_Georgian, SCX_use_AUX_TABLE_23, + SCX_Georgian, + SCX_use_AUX_TABLE_24, SCX_Ethiopic, SCX_Unknown, SCX_Ethiopic, @@ -75364,9 +76936,8 @@ static const SCX_enum _Perl_SCX_invmap[] = { /* for ASCII/Latin1 */ SCX_Tagalog, SCX_Unknown, SCX_Tagalog, - SCX_Unknown, SCX_Hanunoo, - SCX_use_AUX_TABLE_24, + SCX_use_AUX_TABLE_25, SCX_Unknown, SCX_Buhid, SCX_Unknown, @@ -75383,11 +76954,9 @@ static const SCX_enum _Perl_SCX_invmap[] = { /* for ASCII/Latin1 */ SCX_Khmer, SCX_Unknown, SCX_Mongolian, - SCX_use_AUX_TABLE_25, - SCX_Mongolian, - SCX_use_AUX_TABLE_25, + SCX_use_AUX_TABLE_26, SCX_Mongolian, - SCX_Unknown, + SCX_use_AUX_TABLE_26, SCX_Mongolian, SCX_Unknown, SCX_Mongolian, @@ -75453,33 +77022,33 @@ static const SCX_enum _Perl_SCX_invmap[] = { /* for ASCII/Latin1 */ SCX_Georgian, SCX_Sundanese, SCX_Unknown, - SCX_use_AUX_TABLE_26, - SCX_Devanagari, - SCX_use_AUX_TABLE_26, SCX_use_AUX_TABLE_27, SCX_Devanagari, + SCX_use_AUX_TABLE_27, SCX_use_AUX_TABLE_28, + SCX_Devanagari, SCX_use_AUX_TABLE_29, - SCX_use_AUX_TABLE_28, + SCX_use_AUX_TABLE_30, SCX_use_AUX_TABLE_29, SCX_use_AUX_TABLE_30, + SCX_use_AUX_TABLE_31, SCX_Devanagari, - SCX_use_AUX_TABLE_29, + SCX_use_AUX_TABLE_30, SCX_Devanagari, + SCX_use_AUX_TABLE_30, SCX_use_AUX_TABLE_29, - SCX_use_AUX_TABLE_28, SCX_Devanagari, - SCX_use_AUX_TABLE_31, - SCX_use_AUX_TABLE_28, + SCX_use_AUX_TABLE_32, + SCX_use_AUX_TABLE_29, SCX_Devanagari, - SCX_use_AUX_TABLE_28, + SCX_use_AUX_TABLE_29, SCX_Devanagari, - SCX_use_AUX_TABLE_32, - SCX_use_AUX_TABLE_27, SCX_use_AUX_TABLE_33, SCX_use_AUX_TABLE_28, + SCX_use_AUX_TABLE_34, + SCX_use_AUX_TABLE_29, SCX_Bengali, - SCX_use_AUX_TABLE_27, + SCX_use_AUX_TABLE_28, SCX_Nandinagari, SCX_Unknown, SCX_Latin, @@ -75494,9 +77063,9 @@ static const SCX_enum _Perl_SCX_invmap[] = { /* for ASCII/Latin1 */ SCX_Latin, SCX_Greek, SCX_Inherited, - SCX_use_AUX_TABLE_34, + SCX_use_AUX_TABLE_35, SCX_Inherited, - SCX_Unknown, + SCX_Syriac, SCX_Inherited, SCX_Latin, SCX_Greek, @@ -75534,7 +77103,7 @@ static const SCX_enum _Perl_SCX_invmap[] = { /* for ASCII/Latin1 */ SCX_Common, SCX_Inherited, SCX_Common, - SCX_use_AUX_TABLE_35, + SCX_use_AUX_TABLE_36, SCX_Common, SCX_Unknown, SCX_Common, @@ -75549,7 +77118,7 @@ static const SCX_enum _Perl_SCX_invmap[] = { /* for ASCII/Latin1 */ SCX_Common, SCX_Unknown, SCX_Inherited, - SCX_use_AUX_TABLE_36, + SCX_use_AUX_TABLE_37, SCX_Unknown, SCX_Common, SCX_Greek, @@ -75575,9 +77144,6 @@ static const SCX_enum _Perl_SCX_invmap[] = { /* for ASCII/Latin1 */ SCX_Unknown, SCX_Common, SCX_Glagolitic, - SCX_Unknown, - SCX_Glagolitic, - SCX_Unknown, SCX_Latin, SCX_Coptic, SCX_Unknown, @@ -75616,78 +77182,77 @@ static const SCX_enum _Perl_SCX_invmap[] = { /* for ASCII/Latin1 */ SCX_use_AUX_TABLE_3, SCX_Common, SCX_Unknown, - SCX_use_AUX_TABLE_37, + SCX_use_AUX_TABLE_38, SCX_Unknown, - SCX_use_AUX_TABLE_37, + SCX_use_AUX_TABLE_38, SCX_Unknown, - SCX_use_AUX_TABLE_37, + SCX_use_AUX_TABLE_38, SCX_Unknown, SCX_Common, SCX_Unknown, SCX_Common, - SCX_use_AUX_TABLE_38, SCX_use_AUX_TABLE_39, + SCX_use_AUX_TABLE_40, SCX_Common, - SCX_use_AUX_TABLE_37, - SCX_use_AUX_TABLE_38, - SCX_Common, - SCX_use_AUX_TABLE_39, SCX_use_AUX_TABLE_38, SCX_use_AUX_TABLE_39, SCX_Common, - SCX_use_AUX_TABLE_37, SCX_use_AUX_TABLE_40, - SCX_use_AUX_TABLE_23, SCX_use_AUX_TABLE_39, - SCX_use_AUX_TABLE_41, + SCX_use_AUX_TABLE_40, SCX_Common, - SCX_use_AUX_TABLE_39, - SCX_use_AUX_TABLE_37, + SCX_use_AUX_TABLE_38, + SCX_use_AUX_TABLE_41, + SCX_use_AUX_TABLE_24, + SCX_use_AUX_TABLE_40, SCX_use_AUX_TABLE_42, - SCX_use_AUX_TABLE_37, - SCX_Unknown, + SCX_Common, + SCX_use_AUX_TABLE_40, + SCX_use_AUX_TABLE_38, SCX_use_AUX_TABLE_43, + SCX_use_AUX_TABLE_38, SCX_Unknown, - SCX_use_AUX_TABLE_41, - SCX_use_AUX_TABLE_43, - SCX_use_AUX_TABLE_41, SCX_use_AUX_TABLE_44, - SCX_use_AUX_TABLE_38, - SCX_use_AUX_TABLE_41, + SCX_Unknown, + SCX_use_AUX_TABLE_42, SCX_use_AUX_TABLE_44, + SCX_use_AUX_TABLE_42, + SCX_use_AUX_TABLE_45, + SCX_use_AUX_TABLE_39, + SCX_use_AUX_TABLE_42, + SCX_use_AUX_TABLE_45, SCX_Unknown, SCX_use_AUX_TABLE_1, SCX_Unknown, - SCX_use_AUX_TABLE_23, + SCX_use_AUX_TABLE_24, SCX_Unknown, - SCX_use_AUX_TABLE_37, + SCX_use_AUX_TABLE_38, SCX_use_AUX_TABLE_1, - SCX_use_AUX_TABLE_37, + SCX_use_AUX_TABLE_38, SCX_Unknown, - SCX_use_AUX_TABLE_44, - SCX_use_AUX_TABLE_23, + SCX_use_AUX_TABLE_45, + SCX_use_AUX_TABLE_24, SCX_Unknown, - SCX_use_AUX_TABLE_37, + SCX_use_AUX_TABLE_38, SCX_Common, - SCX_use_AUX_TABLE_23, + SCX_use_AUX_TABLE_24, SCX_Common, - SCX_use_AUX_TABLE_37, + SCX_use_AUX_TABLE_38, SCX_Common, - SCX_use_AUX_TABLE_37, + SCX_use_AUX_TABLE_38, SCX_Common, - SCX_use_AUX_TABLE_44, - SCX_use_AUX_TABLE_37, - SCX_use_AUX_TABLE_44, - SCX_use_AUX_TABLE_37, + SCX_use_AUX_TABLE_45, + SCX_use_AUX_TABLE_38, + SCX_use_AUX_TABLE_45, + SCX_use_AUX_TABLE_38, SCX_Common, - SCX_use_AUX_TABLE_37, + SCX_use_AUX_TABLE_38, SCX_Common, - SCX_use_AUX_TABLE_37, + SCX_use_AUX_TABLE_38, SCX_Common, - SCX_use_AUX_TABLE_37, + SCX_use_AUX_TABLE_38, SCX_Common, - SCX_use_AUX_TABLE_37, - SCX_Unknown, + SCX_use_AUX_TABLE_38, SCX_Yi, SCX_Unknown, SCX_Yi, @@ -75700,7 +77265,7 @@ static const SCX_enum _Perl_SCX_invmap[] = { /* for ASCII/Latin1 */ SCX_Cyrillic, SCX_Bamum, SCX_Unknown, - SCX_use_AUX_TABLE_45, + SCX_use_AUX_TABLE_46, SCX_Common, SCX_Latin, SCX_Common, @@ -75709,11 +77274,15 @@ static const SCX_enum _Perl_SCX_invmap[] = { /* for ASCII/Latin1 */ SCX_Latin, SCX_Unknown, SCX_Latin, + SCX_Unknown, + SCX_Latin, + SCX_Unknown, + SCX_Latin, SCX_Syloti_Nagri, SCX_Unknown, - SCX_use_AUX_TABLE_46, SCX_use_AUX_TABLE_47, SCX_use_AUX_TABLE_48, + SCX_use_AUX_TABLE_49, SCX_Unknown, SCX_Phags_Pa, SCX_Unknown, @@ -75722,21 +77291,21 @@ static const SCX_enum _Perl_SCX_invmap[] = { /* for ASCII/Latin1 */ SCX_Saurashtra, SCX_Unknown, SCX_Devanagari, - SCX_use_AUX_TABLE_28, + SCX_use_AUX_TABLE_29, SCX_Devanagari, - SCX_use_AUX_TABLE_49, + SCX_use_AUX_TABLE_50, SCX_Devanagari, SCX_Kayah_Li, - SCX_use_AUX_TABLE_50, + SCX_use_AUX_TABLE_51, SCX_Kayah_Li, SCX_Rejang, SCX_Unknown, SCX_Rejang, - SCX_use_AUX_TABLE_23, + SCX_use_AUX_TABLE_24, SCX_Unknown, SCX_Javanese, SCX_Unknown, - SCX_use_AUX_TABLE_51, + SCX_use_AUX_TABLE_52, SCX_Javanese, SCX_Unknown, SCX_Javanese, @@ -75777,15 +77346,15 @@ static const SCX_enum _Perl_SCX_invmap[] = { /* for ASCII/Latin1 */ SCX_Unknown, SCX_Meetei_Mayek, SCX_Unknown, - SCX_use_AUX_TABLE_23, + SCX_use_AUX_TABLE_24, SCX_Unknown, - SCX_use_AUX_TABLE_23, + SCX_use_AUX_TABLE_24, SCX_Unknown, - SCX_use_AUX_TABLE_23, + SCX_use_AUX_TABLE_24, SCX_Unknown, - SCX_use_AUX_TABLE_37, + SCX_use_AUX_TABLE_38, SCX_Unknown, - SCX_use_AUX_TABLE_37, + SCX_use_AUX_TABLE_38, SCX_Unknown, SCX_Latin, SCX_Unknown, @@ -75805,24 +77374,25 @@ static const SCX_enum _Perl_SCX_invmap[] = { /* for ASCII/Latin1 */ SCX_Arabic, SCX_Unknown, SCX_Arabic, - SCX_Common, + SCX_use_AUX_TABLE_53, + SCX_Arabic, SCX_Unknown, SCX_Arabic, SCX_Unknown, SCX_Arabic, SCX_Unknown, SCX_Arabic, - SCX_use_AUX_TABLE_52, + SCX_use_AUX_TABLE_54, + SCX_Arabic, + SCX_use_AUX_TABLE_54, SCX_Arabic, - SCX_use_AUX_TABLE_52, - SCX_Unknown, SCX_Inherited, SCX_Common, SCX_Unknown, SCX_Inherited, SCX_Cyrillic, SCX_Common, - SCX_use_AUX_TABLE_39, + SCX_use_AUX_TABLE_40, SCX_Common, SCX_Unknown, SCX_Common, @@ -75840,20 +77410,20 @@ static const SCX_enum _Perl_SCX_invmap[] = { /* for ASCII/Latin1 */ SCX_Common, SCX_Latin, SCX_Common, - SCX_use_AUX_TABLE_38, - SCX_use_AUX_TABLE_44, - SCX_use_AUX_TABLE_41, - SCX_use_AUX_TABLE_44, - SCX_use_AUX_TABLE_41, - SCX_use_AUX_TABLE_23, + SCX_use_AUX_TABLE_39, + SCX_use_AUX_TABLE_45, + SCX_use_AUX_TABLE_42, + SCX_use_AUX_TABLE_45, + SCX_use_AUX_TABLE_42, + SCX_use_AUX_TABLE_24, SCX_Unknown, - SCX_use_AUX_TABLE_23, + SCX_use_AUX_TABLE_24, SCX_Unknown, - SCX_use_AUX_TABLE_23, + SCX_use_AUX_TABLE_24, SCX_Unknown, - SCX_use_AUX_TABLE_23, + SCX_use_AUX_TABLE_24, SCX_Unknown, - SCX_use_AUX_TABLE_23, + SCX_use_AUX_TABLE_24, SCX_Unknown, SCX_Common, SCX_Unknown, @@ -75875,11 +77445,12 @@ static const SCX_enum _Perl_SCX_invmap[] = { /* for ASCII/Latin1 */ SCX_Unknown, SCX_Linear_B, SCX_Unknown, - SCX_use_AUX_TABLE_53, + SCX_use_AUX_TABLE_55, + SCX_use_AUX_TABLE_56, SCX_Unknown, - SCX_use_AUX_TABLE_54, + SCX_use_AUX_TABLE_57, SCX_Unknown, - SCX_use_AUX_TABLE_53, + SCX_use_AUX_TABLE_56, SCX_Greek, SCX_Unknown, SCX_Common, @@ -75893,7 +77464,7 @@ static const SCX_enum _Perl_SCX_invmap[] = { /* for ASCII/Latin1 */ SCX_Unknown, SCX_Carian, SCX_Unknown, - SCX_use_AUX_TABLE_55, + SCX_use_AUX_TABLE_58, SCX_Unknown, SCX_Old_Italic, SCX_Unknown, @@ -75924,6 +77495,21 @@ static const SCX_enum _Perl_SCX_invmap[] = { /* for ASCII/Latin1 */ SCX_Caucasian_Albanian, SCX_Unknown, SCX_Caucasian_Albanian, + SCX_Vithkuqi, + SCX_Unknown, + SCX_Vithkuqi, + SCX_Unknown, + SCX_Vithkuqi, + SCX_Unknown, + SCX_Vithkuqi, + SCX_Unknown, + SCX_Vithkuqi, + SCX_Unknown, + SCX_Vithkuqi, + SCX_Unknown, + SCX_Vithkuqi, + SCX_Unknown, + SCX_Vithkuqi, SCX_Unknown, SCX_Linear_A, SCX_Unknown, @@ -75931,6 +77517,12 @@ static const SCX_enum _Perl_SCX_invmap[] = { /* for ASCII/Latin1 */ SCX_Unknown, SCX_Linear_A, SCX_Unknown, + SCX_Latin, + SCX_Unknown, + SCX_Latin, + SCX_Unknown, + SCX_Latin, + SCX_Unknown, SCX_Cypriot, SCX_Unknown, SCX_Cypriot, @@ -75990,6 +77582,8 @@ static const SCX_enum _Perl_SCX_invmap[] = { /* for ASCII/Latin1 */ SCX_Manichaean, SCX_Unknown, SCX_Manichaean, + SCX_use_AUX_TABLE_59, + SCX_Manichaean, SCX_Unknown, SCX_Avestan, SCX_Unknown, @@ -76029,6 +77623,8 @@ static const SCX_enum _Perl_SCX_invmap[] = { /* for ASCII/Latin1 */ SCX_Unknown, SCX_Sogdian, SCX_Unknown, + SCX_Old_Uyghur, + SCX_Unknown, SCX_Chorasmian, SCX_Unknown, SCX_Elymaic, @@ -76075,9 +77671,9 @@ static const SCX_enum _Perl_SCX_invmap[] = { /* for ASCII/Latin1 */ SCX_Khudawadi, SCX_Unknown, SCX_Grantha, - SCX_use_AUX_TABLE_19, + SCX_use_AUX_TABLE_20, SCX_Grantha, - SCX_use_AUX_TABLE_19, + SCX_use_AUX_TABLE_20, SCX_Unknown, SCX_Grantha, SCX_Unknown, @@ -76091,7 +77687,7 @@ static const SCX_enum _Perl_SCX_invmap[] = { /* for ASCII/Latin1 */ SCX_Unknown, SCX_Grantha, SCX_Unknown, - SCX_use_AUX_TABLE_19, + SCX_use_AUX_TABLE_20, SCX_Grantha, SCX_Unknown, SCX_Grantha, @@ -76167,6 +77763,7 @@ static const SCX_enum _Perl_SCX_invmap[] = { /* for ASCII/Latin1 */ SCX_Unknown, SCX_Soyombo, SCX_Unknown, + SCX_Canadian_Aboriginal, SCX_Pau_Cin_Hau, SCX_Unknown, SCX_Bhaiksuki, @@ -76214,9 +77811,9 @@ static const SCX_enum _Perl_SCX_invmap[] = { /* for ASCII/Latin1 */ SCX_Lisu, SCX_Unknown, SCX_Tamil, - SCX_use_AUX_TABLE_19, + SCX_use_AUX_TABLE_20, SCX_Tamil, - SCX_use_AUX_TABLE_19, + SCX_use_AUX_TABLE_20, SCX_Tamil, SCX_Unknown, SCX_Tamil, @@ -76228,6 +77825,8 @@ static const SCX_enum _Perl_SCX_invmap[] = { /* for ASCII/Latin1 */ SCX_Unknown, SCX_Cuneiform, SCX_Unknown, + SCX_Cypro_Minoan, + SCX_Unknown, SCX_Egyptian_Hieroglyphs, SCX_Unknown, SCX_Egyptian_Hieroglyphs, @@ -76241,6 +77840,9 @@ static const SCX_enum _Perl_SCX_invmap[] = { /* for ASCII/Latin1 */ SCX_Mro, SCX_Unknown, SCX_Mro, + SCX_Tangsa, + SCX_Unknown, + SCX_Tangsa, SCX_Unknown, SCX_Bassa_Vah, SCX_Unknown, @@ -76266,10 +77868,10 @@ static const SCX_enum _Perl_SCX_invmap[] = { /* for ASCII/Latin1 */ SCX_Unknown, SCX_Tangut, SCX_Nushu, - SCX_Common, + SCX_use_AUX_TABLE_38, SCX_Khitan_Small_Script, SCX_Unknown, - SCX_use_AUX_TABLE_37, + SCX_use_AUX_TABLE_38, SCX_Unknown, SCX_Tangut, SCX_Unknown, @@ -76278,12 +77880,19 @@ static const SCX_enum _Perl_SCX_invmap[] = { /* for ASCII/Latin1 */ SCX_Unknown, SCX_Tangut, SCX_Unknown, - SCX_use_AUX_TABLE_44, - SCX_use_AUX_TABLE_43, + SCX_use_AUX_TABLE_45, SCX_Unknown, - SCX_use_AUX_TABLE_43, + SCX_use_AUX_TABLE_45, + SCX_Unknown, + SCX_use_AUX_TABLE_45, SCX_Unknown, + SCX_use_AUX_TABLE_45, SCX_use_AUX_TABLE_44, + SCX_use_AUX_TABLE_45, + SCX_Unknown, + SCX_use_AUX_TABLE_44, + SCX_Unknown, + SCX_use_AUX_TABLE_45, SCX_Unknown, SCX_Nushu, SCX_Unknown, @@ -76297,6 +77906,12 @@ static const SCX_enum _Perl_SCX_invmap[] = { /* for ASCII/Latin1 */ SCX_Unknown, SCX_Duployan, SCX_Unknown, + SCX_Inherited, + SCX_Unknown, + SCX_Inherited, + SCX_Unknown, + SCX_Common, + SCX_Unknown, SCX_Common, SCX_Unknown, SCX_Common, @@ -76317,7 +77932,7 @@ static const SCX_enum _Perl_SCX_invmap[] = { /* for ASCII/Latin1 */ SCX_Unknown, SCX_Common, SCX_Unknown, - SCX_use_AUX_TABLE_37, + SCX_use_AUX_TABLE_38, SCX_Common, SCX_Unknown, SCX_Common, @@ -76367,6 +77982,8 @@ static const SCX_enum _Perl_SCX_invmap[] = { /* for ASCII/Latin1 */ SCX_Unknown, SCX_SignWriting, SCX_Unknown, + SCX_Latin, + SCX_Unknown, SCX_Glagolitic, SCX_Unknown, SCX_Glagolitic, @@ -76385,10 +78002,20 @@ static const SCX_enum _Perl_SCX_invmap[] = { /* for ASCII/Latin1 */ SCX_Unknown, SCX_Nyiakeng_Puachue_Hmong, SCX_Unknown, + SCX_Toto, + SCX_Unknown, SCX_Wancho, SCX_Unknown, SCX_Wancho, SCX_Unknown, + SCX_Ethiopic, + SCX_Unknown, + SCX_Ethiopic, + SCX_Unknown, + SCX_Ethiopic, + SCX_Unknown, + SCX_Ethiopic, + SCX_Unknown, SCX_Mende_Kikakui, SCX_Unknown, SCX_Mende_Kikakui, @@ -76486,14 +78113,14 @@ static const SCX_enum _Perl_SCX_invmap[] = { /* for ASCII/Latin1 */ SCX_Common, SCX_Unknown, SCX_Common, - SCX_use_AUX_TABLE_43, + SCX_use_AUX_TABLE_44, SCX_Common, SCX_Unknown, SCX_Common, SCX_Unknown, SCX_Common, SCX_Unknown, - SCX_use_AUX_TABLE_37, + SCX_use_AUX_TABLE_38, SCX_Unknown, SCX_Common, SCX_Unknown, @@ -76549,19 +78176,21 @@ static const SCX_enum _Perl_SCX_invmap[] = { /* for ASCII/Latin1 */ SCX_Unknown, SCX_Common, SCX_Unknown, - SCX_use_AUX_TABLE_37, + SCX_Common, SCX_Unknown, - SCX_use_AUX_TABLE_37, + SCX_use_AUX_TABLE_38, SCX_Unknown, - SCX_use_AUX_TABLE_37, + SCX_use_AUX_TABLE_38, SCX_Unknown, - SCX_use_AUX_TABLE_37, + SCX_use_AUX_TABLE_38, SCX_Unknown, - SCX_use_AUX_TABLE_37, + SCX_use_AUX_TABLE_38, SCX_Unknown, - SCX_use_AUX_TABLE_37, + SCX_use_AUX_TABLE_38, SCX_Unknown, - SCX_use_AUX_TABLE_37, + SCX_use_AUX_TABLE_38, + SCX_Unknown, + SCX_use_AUX_TABLE_38, SCX_Unknown, SCX_Common, SCX_Unknown, @@ -76583,7 +78212,7 @@ static const SCX_enum _Perl_SCX_invmap[] = { /* for ASCII/Latin1 */ && '$' == 91 && '@' == 124 && '`' == 121 && '\n' == 21 static const UV _Perl_SCX_invlist[] = { /* for EBCDIC 1047 */ - 1699, /* Number of elements */ + 1757, /* Number of elements */ 148565664, /* Version and data structure type */ 0, /* 0 if the list starts at 0; 1 if it starts at the element beyond 0 */ @@ -76686,7 +78315,6 @@ static const UV _Perl_SCX_invlist[] = { /* for EBCDIC 1047 */ 0x61B, 0x61C, 0x61D, - 0x61E, 0x61F, 0x620, 0x640, @@ -76722,11 +78350,11 @@ static const UV _Perl_SCX_invlist[] = { /* for EBCDIC 1047 */ 0x85F, 0x860, 0x86B, - 0x8A0, - 0x8B5, - 0x8B6, - 0x8C8, - 0x8D3, + 0x870, + 0x88F, + 0x890, + 0x892, + 0x898, 0x8E2, 0x8E3, 0x900, @@ -76898,7 +78526,7 @@ static const UV _Perl_SCX_invlist[] = { /* for EBCDIC 1047 */ 0xC29, 0xC2A, 0xC3A, - 0xC3D, + 0xC3C, 0xC45, 0xC46, 0xC49, @@ -76908,6 +78536,8 @@ static const UV _Perl_SCX_invlist[] = { /* for EBCDIC 1047 */ 0xC57, 0xC58, 0xC5B, + 0xC5D, + 0xC5E, 0xC60, 0xC64, 0xC66, @@ -76931,7 +78561,7 @@ static const UV _Perl_SCX_invlist[] = { /* for EBCDIC 1047 */ 0xCCE, 0xCD5, 0xCD7, - 0xCDE, + 0xCDD, 0xCDF, 0xCE0, 0xCE4, @@ -77079,9 +78709,8 @@ static const UV _Perl_SCX_invlist[] = { /* for EBCDIC 1047 */ 0x16EE, 0x16F9, 0x1700, - 0x170D, - 0x170E, - 0x1715, + 0x1716, + 0x171F, 0x1720, 0x1735, 0x1737, @@ -77104,8 +78733,6 @@ static const UV _Perl_SCX_invlist[] = { /* for EBCDIC 1047 */ 0x1804, 0x1805, 0x1806, - 0x180F, - 0x1810, 0x181A, 0x1820, 0x1879, @@ -77148,11 +78775,11 @@ static const UV _Perl_SCX_invlist[] = { /* for EBCDIC 1047 */ 0x1AA0, 0x1AAE, 0x1AB0, - 0x1AC1, + 0x1ACF, 0x1B00, - 0x1B4C, + 0x1B4D, 0x1B50, - 0x1B7D, + 0x1B7F, 0x1B80, 0x1BC0, 0x1BF4, @@ -77264,7 +78891,7 @@ static const UV _Perl_SCX_invlist[] = { /* for EBCDIC 1047 */ 0x2090, 0x209D, 0x20A0, - 0x20C0, + 0x20C1, 0x20D0, 0x20F0, 0x20F1, @@ -77292,9 +78919,6 @@ static const UV _Perl_SCX_invlist[] = { /* for EBCDIC 1047 */ 0x2B96, 0x2B97, 0x2C00, - 0x2C2F, - 0x2C30, - 0x2C5F, 0x2C60, 0x2C80, 0x2CF4, @@ -77332,7 +78956,7 @@ static const UV _Perl_SCX_invlist[] = { /* for EBCDIC 1047 */ 0x2E00, 0x2E43, 0x2E44, - 0x2E53, + 0x2E5E, 0x2E80, 0x2E9A, 0x2E9B, @@ -77404,7 +79028,6 @@ static const UV _Perl_SCX_invlist[] = { /* for EBCDIC 1047 */ 0x3400, 0x4DC0, 0x4E00, - 0x9FFD, 0xA000, 0xA48D, 0xA490, @@ -77422,10 +79045,14 @@ static const UV _Perl_SCX_invlist[] = { /* for EBCDIC 1047 */ 0xA722, 0xA788, 0xA78B, - 0xA7C0, - 0xA7C2, 0xA7CB, - 0xA7F5, + 0xA7D0, + 0xA7D2, + 0xA7D3, + 0xA7D4, + 0xA7D5, + 0xA7DA, + 0xA7F2, 0xA800, 0xA82D, 0xA830, @@ -77520,14 +79147,15 @@ static const UV _Perl_SCX_invlist[] = { /* for EBCDIC 1047 */ 0xFB45, 0xFB46, 0xFB50, - 0xFBC2, + 0xFBC3, 0xFBD3, 0xFD3E, 0xFD40, - 0xFD50, 0xFD90, 0xFD92, 0xFDC8, + 0xFDCF, + 0xFDD0, 0xFDF0, 0xFDF2, 0xFDF3, @@ -77593,6 +79221,7 @@ static const UV _Perl_SCX_invlist[] = { /* for EBCDIC 1047 */ 0x10080, 0x100FB, 0x10100, + 0x10102, 0x10103, 0x10107, 0x10134, @@ -77642,12 +79271,33 @@ static const UV _Perl_SCX_invlist[] = { /* for EBCDIC 1047 */ 0x10564, 0x1056F, 0x10570, + 0x1057B, + 0x1057C, + 0x1058B, + 0x1058C, + 0x10593, + 0x10594, + 0x10596, + 0x10597, + 0x105A2, + 0x105A3, + 0x105B2, + 0x105B3, + 0x105BA, + 0x105BB, + 0x105BD, 0x10600, 0x10737, 0x10740, 0x10756, 0x10760, 0x10768, + 0x10780, + 0x10786, + 0x10787, + 0x107B1, + 0x107B2, + 0x107BB, 0x10800, 0x10806, 0x10808, @@ -77707,6 +79357,8 @@ static const UV _Perl_SCX_invlist[] = { /* for EBCDIC 1047 */ 0x10AC0, 0x10AE7, 0x10AEB, + 0x10AF2, + 0x10AF3, 0x10AF7, 0x10B00, 0x10B36, @@ -77746,6 +79398,8 @@ static const UV _Perl_SCX_invlist[] = { /* for EBCDIC 1047 */ 0x10F28, 0x10F30, 0x10F5A, + 0x10F70, + 0x10F8A, 0x10FB0, 0x10FCC, 0x10FE0, @@ -77753,10 +79407,10 @@ static const UV _Perl_SCX_invlist[] = { /* for EBCDIC 1047 */ 0x11000, 0x1104E, 0x11052, - 0x11070, + 0x11076, 0x1107F, 0x11080, - 0x110C2, + 0x110C3, 0x110CD, 0x110CE, 0x110D0, @@ -77844,7 +79498,7 @@ static const UV _Perl_SCX_invlist[] = { /* for EBCDIC 1047 */ 0x11660, 0x1166D, 0x11680, - 0x116B9, + 0x116BA, 0x116C0, 0x116CA, 0x11700, @@ -77852,7 +79506,7 @@ static const UV _Perl_SCX_invlist[] = { /* for EBCDIC 1047 */ 0x1171D, 0x1172C, 0x11730, - 0x11740, + 0x11747, 0x11800, 0x1183C, 0x118A0, @@ -77884,6 +79538,7 @@ static const UV _Perl_SCX_invlist[] = { /* for EBCDIC 1047 */ 0x11A48, 0x11A50, 0x11AA3, + 0x11AB0, 0x11AC0, 0x11AF9, 0x11C00, @@ -77945,6 +79600,8 @@ static const UV _Perl_SCX_invlist[] = { /* for EBCDIC 1047 */ 0x12475, 0x12480, 0x12544, + 0x12F90, + 0x12FF3, 0x13000, 0x1342F, 0x13430, @@ -77959,6 +79616,9 @@ static const UV _Perl_SCX_invlist[] = { /* for EBCDIC 1047 */ 0x16A6A, 0x16A6E, 0x16A70, + 0x16ABF, + 0x16AC0, + 0x16ACA, 0x16AD0, 0x16AEE, 0x16AF0, @@ -77995,9 +79655,16 @@ static const UV _Perl_SCX_invlist[] = { /* for EBCDIC 1047 */ 0x18CD6, 0x18D00, 0x18D09, + 0x1AFF0, + 0x1AFF4, + 0x1AFF5, + 0x1AFFC, + 0x1AFFD, + 0x1AFFF, 0x1B000, 0x1B001, - 0x1B11F, + 0x1B120, + 0x1B123, 0x1B150, 0x1B153, 0x1B164, @@ -78014,6 +79681,12 @@ static const UV _Perl_SCX_invlist[] = { /* for EBCDIC 1047 */ 0x1BC9A, 0x1BC9C, 0x1BCA4, + 0x1CF00, + 0x1CF2E, + 0x1CF30, + 0x1CF47, + 0x1CF50, + 0x1CFC4, 0x1D000, 0x1D0F6, 0x1D100, @@ -78027,7 +79700,7 @@ static const UV _Perl_SCX_invlist[] = { /* for EBCDIC 1047 */ 0x1D18C, 0x1D1AA, 0x1D1AE, - 0x1D1E9, + 0x1D1EB, 0x1D200, 0x1D246, 0x1D2E0, @@ -78084,6 +79757,8 @@ static const UV _Perl_SCX_invlist[] = { /* for EBCDIC 1047 */ 0x1DAA0, 0x1DAA1, 0x1DAB0, + 0x1DF00, + 0x1DF1F, 0x1E000, 0x1E007, 0x1E008, @@ -78102,10 +79777,20 @@ static const UV _Perl_SCX_invlist[] = { /* for EBCDIC 1047 */ 0x1E14A, 0x1E14E, 0x1E150, + 0x1E290, + 0x1E2AF, 0x1E2C0, 0x1E2FA, 0x1E2FF, 0x1E300, + 0x1E7E0, + 0x1E7E7, + 0x1E7E8, + 0x1E7EC, + 0x1E7ED, + 0x1E7EF, + 0x1E7F0, + 0x1E7FF, 0x1E800, 0x1E8C5, 0x1E8C7, @@ -78216,7 +79901,7 @@ static const UV _Perl_SCX_invlist[] = { /* for EBCDIC 1047 */ 0x1F266, 0x1F300, 0x1F6D8, - 0x1F6E0, + 0x1F6DD, 0x1F6ED, 0x1F6F0, 0x1F6FD, @@ -78226,6 +79911,8 @@ static const UV _Perl_SCX_invlist[] = { /* for EBCDIC 1047 */ 0x1F7D9, 0x1F7E0, 0x1F7EC, + 0x1F7F0, + 0x1F7F1, 0x1F800, 0x1F80C, 0x1F810, @@ -78239,27 +79926,27 @@ static const UV _Perl_SCX_invlist[] = { /* for EBCDIC 1047 */ 0x1F8B0, 0x1F8B2, 0x1F900, - 0x1F979, - 0x1F97A, - 0x1F9CC, - 0x1F9CD, 0x1FA54, 0x1FA60, 0x1FA6E, 0x1FA70, 0x1FA75, 0x1FA78, - 0x1FA7B, + 0x1FA7D, 0x1FA80, 0x1FA87, 0x1FA90, - 0x1FAA9, + 0x1FAAD, 0x1FAB0, - 0x1FAB7, + 0x1FABB, 0x1FAC0, - 0x1FAC3, + 0x1FAC6, 0x1FAD0, - 0x1FAD7, + 0x1FADA, + 0x1FAE0, + 0x1FAE8, + 0x1FAF0, + 0x1FAF7, 0x1FB00, 0x1FB93, 0x1FB94, @@ -78267,9 +79954,9 @@ static const UV _Perl_SCX_invlist[] = { /* for EBCDIC 1047 */ 0x1FBF0, 0x1FBFA, 0x20000, - 0x2A6DE, + 0x2A6E0, 0x2A700, - 0x2B735, + 0x2B739, 0x2B740, 0x2B81E, 0x2B820, @@ -78331,138 +80018,143 @@ typedef enum { SCX_Coptic = 26, SCX_Cuneiform = 27, SCX_Cypriot = 28, - SCX_Cyrillic = 29, - SCX_Deseret = 30, - SCX_Devanagari = 31, - SCX_Dives_Akuru = 32, - SCX_Dogra = 33, - SCX_Duployan = 34, - SCX_Egyptian_Hieroglyphs = 35, - SCX_Elbasan = 36, - SCX_Elymaic = 37, - SCX_Ethiopic = 38, - SCX_Georgian = 39, - SCX_Glagolitic = 40, - SCX_Gothic = 41, - SCX_Grantha = 42, - SCX_Greek = 43, - SCX_Gujarati = 44, - SCX_Gunjala_Gondi = 45, - SCX_Gurmukhi = 46, - SCX_Han = 47, - SCX_Hanb = 48, - SCX_Hangul = 49, - SCX_Hanifi_Rohingya = 50, - SCX_Hanunoo = 51, - SCX_Hatran = 52, - SCX_Hebrew = 53, - SCX_Hiragana = 54, - SCX_Imperial_Aramaic = 55, - SCX_Inherited = 56, - SCX_Inscriptional_Pahlavi = 57, - SCX_Inscriptional_Parthian = 58, - SCX_INVALID = 59, - SCX_Javanese = 60, - SCX_Jpan = 61, - SCX_Kaithi = 62, - SCX_Kannada = 63, - SCX_Katakana = 64, - SCX_Kayah_Li = 65, - SCX_Kharoshthi = 66, - SCX_Khitan_Small_Script = 67, - SCX_Khmer = 68, - SCX_Khojki = 69, - SCX_Khudawadi = 70, - SCX_Kore = 71, - SCX_Lao = 72, - SCX_Latin = 73, - SCX_Lepcha = 74, - SCX_Limbu = 75, - SCX_Linear_A = 76, - SCX_Linear_B = 77, - SCX_Lisu = 78, - SCX_Lycian = 79, - SCX_Lydian = 80, - SCX_Mahajani = 81, - SCX_Makasar = 82, - SCX_Malayalam = 83, - SCX_Mandaic = 84, - SCX_Manichaean = 85, - SCX_Marchen = 86, - SCX_Masaram_Gondi = 87, - SCX_Medefaidrin = 88, - SCX_Meetei_Mayek = 89, - SCX_Mende_Kikakui = 90, - SCX_Meroitic_Cursive = 91, - SCX_Meroitic_Hieroglyphs = 92, - SCX_Miao = 93, - SCX_Modi = 94, - SCX_Mongolian = 95, - SCX_Mro = 96, - SCX_Multani = 97, - SCX_Myanmar = 98, - SCX_Nabataean = 99, - SCX_Nandinagari = 100, - SCX_New_Tai_Lue = 101, - SCX_Newa = 102, - SCX_Nko = 103, - SCX_Nushu = 104, - SCX_Nyiakeng_Puachue_Hmong = 105, - SCX_Ogham = 106, - SCX_Ol_Chiki = 107, - SCX_Old_Hungarian = 108, - SCX_Old_Italic = 109, - SCX_Old_North_Arabian = 110, - SCX_Old_Permic = 111, - SCX_Old_Persian = 112, - SCX_Old_Sogdian = 113, - SCX_Old_South_Arabian = 114, - SCX_Old_Turkic = 115, - SCX_Oriya = 116, - SCX_Osage = 117, - SCX_Osmanya = 118, - SCX_Pahawh_Hmong = 119, - SCX_Palmyrene = 120, - SCX_Pau_Cin_Hau = 121, - SCX_Phags_Pa = 122, - SCX_Phoenician = 123, - SCX_Psalter_Pahlavi = 124, - SCX_Rejang = 125, - SCX_Runic = 126, - SCX_Samaritan = 127, - SCX_Saurashtra = 128, - SCX_Sharada = 129, - SCX_Shavian = 130, - SCX_Siddham = 131, - SCX_SignWriting = 132, - SCX_Sinhala = 133, - SCX_Sogdian = 134, - SCX_Sora_Sompeng = 135, - SCX_Soyombo = 136, - SCX_Sundanese = 137, - SCX_Syloti_Nagri = 138, - SCX_Syriac = 139, - SCX_Tagalog = 140, - SCX_Tagbanwa = 141, - SCX_Tai_Le = 142, - SCX_Tai_Tham = 143, - SCX_Tai_Viet = 144, - SCX_Takri = 145, - SCX_Tamil = 146, - SCX_Tangut = 147, - SCX_Telugu = 148, - SCX_Thaana = 149, - SCX_Thai = 150, - SCX_Tibetan = 151, - SCX_Tifinagh = 152, - SCX_Tirhuta = 153, - SCX_Ugaritic = 154, - SCX_Vai = 155, - SCX_Wancho = 156, - SCX_Warang_Citi = 157, - SCX_Yezidi = 158, - SCX_Yi = 159, - SCX_Zanabazar_Square = 160, + SCX_Cypro_Minoan = 29, + SCX_Cyrillic = 30, + SCX_Deseret = 31, + SCX_Devanagari = 32, + SCX_Dives_Akuru = 33, + SCX_Dogra = 34, + SCX_Duployan = 35, + SCX_Egyptian_Hieroglyphs = 36, + SCX_Elbasan = 37, + SCX_Elymaic = 38, + SCX_Ethiopic = 39, + SCX_Georgian = 40, + SCX_Glagolitic = 41, + SCX_Gothic = 42, + SCX_Grantha = 43, + SCX_Greek = 44, + SCX_Gujarati = 45, + SCX_Gunjala_Gondi = 46, + SCX_Gurmukhi = 47, + SCX_Han = 48, + SCX_Hanb = 49, + SCX_Hangul = 50, + SCX_Hanifi_Rohingya = 51, + SCX_Hanunoo = 52, + SCX_Hatran = 53, + SCX_Hebrew = 54, + SCX_Hiragana = 55, + SCX_Imperial_Aramaic = 56, + SCX_Inherited = 57, + SCX_Inscriptional_Pahlavi = 58, + SCX_Inscriptional_Parthian = 59, + SCX_INVALID = 60, + SCX_Javanese = 61, + SCX_Jpan = 62, + SCX_Kaithi = 63, + SCX_Kannada = 64, + SCX_Katakana = 65, + SCX_Kayah_Li = 66, + SCX_Kharoshthi = 67, + SCX_Khitan_Small_Script = 68, + SCX_Khmer = 69, + SCX_Khojki = 70, + SCX_Khudawadi = 71, + SCX_Kore = 72, + SCX_Lao = 73, + SCX_Latin = 74, + SCX_Lepcha = 75, + SCX_Limbu = 76, + SCX_Linear_A = 77, + SCX_Linear_B = 78, + SCX_Lisu = 79, + SCX_Lycian = 80, + SCX_Lydian = 81, + SCX_Mahajani = 82, + SCX_Makasar = 83, + SCX_Malayalam = 84, + SCX_Mandaic = 85, + SCX_Manichaean = 86, + SCX_Marchen = 87, + SCX_Masaram_Gondi = 88, + SCX_Medefaidrin = 89, + SCX_Meetei_Mayek = 90, + SCX_Mende_Kikakui = 91, + SCX_Meroitic_Cursive = 92, + SCX_Meroitic_Hieroglyphs = 93, + SCX_Miao = 94, + SCX_Modi = 95, + SCX_Mongolian = 96, + SCX_Mro = 97, + SCX_Multani = 98, + SCX_Myanmar = 99, + SCX_Nabataean = 100, + SCX_Nandinagari = 101, + SCX_New_Tai_Lue = 102, + SCX_Newa = 103, + SCX_Nko = 104, + SCX_Nushu = 105, + SCX_Nyiakeng_Puachue_Hmong = 106, + SCX_Ogham = 107, + SCX_Ol_Chiki = 108, + SCX_Old_Hungarian = 109, + SCX_Old_Italic = 110, + SCX_Old_North_Arabian = 111, + SCX_Old_Permic = 112, + SCX_Old_Persian = 113, + SCX_Old_Sogdian = 114, + SCX_Old_South_Arabian = 115, + SCX_Old_Turkic = 116, + SCX_Old_Uyghur = 117, + SCX_Oriya = 118, + SCX_Osage = 119, + SCX_Osmanya = 120, + SCX_Pahawh_Hmong = 121, + SCX_Palmyrene = 122, + SCX_Pau_Cin_Hau = 123, + SCX_Phags_Pa = 124, + SCX_Phoenician = 125, + SCX_Psalter_Pahlavi = 126, + SCX_Rejang = 127, + SCX_Runic = 128, + SCX_Samaritan = 129, + SCX_Saurashtra = 130, + SCX_Sharada = 131, + SCX_Shavian = 132, + SCX_Siddham = 133, + SCX_SignWriting = 134, + SCX_Sinhala = 135, + SCX_Sogdian = 136, + SCX_Sora_Sompeng = 137, + SCX_Soyombo = 138, + SCX_Sundanese = 139, + SCX_Syloti_Nagri = 140, + SCX_Syriac = 141, + SCX_Tagalog = 142, + SCX_Tagbanwa = 143, + SCX_Tai_Le = 144, + SCX_Tai_Tham = 145, + SCX_Tai_Viet = 146, + SCX_Takri = 147, + SCX_Tamil = 148, + SCX_Tangsa = 149, + SCX_Tangut = 150, + SCX_Telugu = 151, + SCX_Thaana = 152, + SCX_Thai = 153, + SCX_Tibetan = 154, + SCX_Tifinagh = 155, + SCX_Tirhuta = 156, + SCX_Toto = 157, + SCX_Ugaritic = 158, + SCX_Vai = 159, + SCX_Vithkuqi = 160, + SCX_Wancho = 161, + SCX_Warang_Citi = 162, + SCX_Yezidi = 163, + SCX_Yi = 164, + SCX_Zanabazar_Square = 165, SCX_use_AUX_TABLE_1 = -1, SCX_use_AUX_TABLE_2 = -2, SCX_use_AUX_TABLE_3 = -3, @@ -78517,7 +80209,11 @@ typedef enum { SCX_use_AUX_TABLE_52 = -52, SCX_use_AUX_TABLE_53 = -53, SCX_use_AUX_TABLE_54 = -54, - SCX_use_AUX_TABLE_55 = -55 + SCX_use_AUX_TABLE_55 = -55, + SCX_use_AUX_TABLE_56 = -56, + SCX_use_AUX_TABLE_57 = -57, + SCX_use_AUX_TABLE_58 = -58, + SCX_use_AUX_TABLE_59 = -59 } SCX_enum; # endif /* EBCDIC 1047 */ @@ -78554,6 +80250,7 @@ static const SCX_enum SCX_AUX_TABLE_4[] = { static const SCX_enum SCX_AUX_TABLE_5[] = { SCX_Arabic, SCX_Hanifi_Rohingya, + SCX_Nko, SCX_Syriac, SCX_Thaana, SCX_Yezidi @@ -78566,33 +80263,44 @@ static const SCX_enum SCX_AUX_TABLE_6[] = { }; static const SCX_enum SCX_AUX_TABLE_7[] = { + SCX_Adlam, + SCX_Arabic, + SCX_Hanifi_Rohingya, + SCX_Nko, + SCX_Syriac, + SCX_Thaana, + SCX_Yezidi +}; + +static const SCX_enum SCX_AUX_TABLE_8[] = { SCX_Adlam, SCX_Arabic, SCX_Hanifi_Rohingya, SCX_Mandaic, SCX_Manichaean, + SCX_Old_Uyghur, SCX_Psalter_Pahlavi, SCX_Sogdian, SCX_Syriac }; -static const SCX_enum SCX_AUX_TABLE_8[] = { +static const SCX_enum SCX_AUX_TABLE_9[] = { SCX_Arabic, SCX_Syriac }; -static const SCX_enum SCX_AUX_TABLE_9[] = { +static const SCX_enum SCX_AUX_TABLE_10[] = { SCX_Arabic, SCX_Thaana, SCX_Yezidi }; -static const SCX_enum SCX_AUX_TABLE_10[] = { +static const SCX_enum SCX_AUX_TABLE_11[] = { SCX_Arabic, SCX_Hanifi_Rohingya }; -static const SCX_enum SCX_AUX_TABLE_11[] = { +static const SCX_enum SCX_AUX_TABLE_12[] = { SCX_Bengali, SCX_Devanagari, SCX_Grantha, @@ -78608,7 +80316,7 @@ static const SCX_enum SCX_AUX_TABLE_11[] = { SCX_Tirhuta }; -static const SCX_enum SCX_AUX_TABLE_12[] = { +static const SCX_enum SCX_AUX_TABLE_13[] = { SCX_Bengali, SCX_Devanagari, SCX_Grantha, @@ -78623,7 +80331,7 @@ static const SCX_enum SCX_AUX_TABLE_12[] = { SCX_Tirhuta }; -static const SCX_enum SCX_AUX_TABLE_13[] = { +static const SCX_enum SCX_AUX_TABLE_14[] = { SCX_Bengali, SCX_Devanagari, SCX_Dogra, @@ -78646,7 +80354,7 @@ static const SCX_enum SCX_AUX_TABLE_13[] = { SCX_Tirhuta }; -static const SCX_enum SCX_AUX_TABLE_14[] = { +static const SCX_enum SCX_AUX_TABLE_15[] = { SCX_Bengali, SCX_Devanagari, SCX_Dogra, @@ -78670,90 +80378,90 @@ static const SCX_enum SCX_AUX_TABLE_14[] = { SCX_Tirhuta }; -static const SCX_enum SCX_AUX_TABLE_15[] = { +static const SCX_enum SCX_AUX_TABLE_16[] = { SCX_Devanagari, SCX_Dogra, SCX_Kaithi, SCX_Mahajani }; -static const SCX_enum SCX_AUX_TABLE_16[] = { +static const SCX_enum SCX_AUX_TABLE_17[] = { SCX_Bengali, SCX_Chakma, SCX_Syloti_Nagri }; -static const SCX_enum SCX_AUX_TABLE_17[] = { +static const SCX_enum SCX_AUX_TABLE_18[] = { SCX_Gurmukhi, SCX_Multani }; -static const SCX_enum SCX_AUX_TABLE_18[] = { +static const SCX_enum SCX_AUX_TABLE_19[] = { SCX_Gujarati, SCX_Khojki }; -static const SCX_enum SCX_AUX_TABLE_19[] = { +static const SCX_enum SCX_AUX_TABLE_20[] = { SCX_Grantha, SCX_Tamil }; -static const SCX_enum SCX_AUX_TABLE_20[] = { +static const SCX_enum SCX_AUX_TABLE_21[] = { SCX_Kannada, SCX_Nandinagari }; -static const SCX_enum SCX_AUX_TABLE_21[] = { +static const SCX_enum SCX_AUX_TABLE_22[] = { SCX_Chakma, SCX_Myanmar, SCX_Tai_Le }; -static const SCX_enum SCX_AUX_TABLE_22[] = { +static const SCX_enum SCX_AUX_TABLE_23[] = { SCX_Georgian, SCX_Latin }; -static const SCX_enum SCX_AUX_TABLE_23[] = { +static const SCX_enum SCX_AUX_TABLE_24[] = { SCX_Hangul, SCX_Kore }; -static const SCX_enum SCX_AUX_TABLE_24[] = { +static const SCX_enum SCX_AUX_TABLE_25[] = { SCX_Buhid, SCX_Hanunoo, SCX_Tagalog, SCX_Tagbanwa }; -static const SCX_enum SCX_AUX_TABLE_25[] = { +static const SCX_enum SCX_AUX_TABLE_26[] = { SCX_Mongolian, SCX_Phags_Pa }; -static const SCX_enum SCX_AUX_TABLE_26[] = { +static const SCX_enum SCX_AUX_TABLE_27[] = { SCX_Bengali, SCX_Devanagari, SCX_Grantha, SCX_Kannada }; -static const SCX_enum SCX_AUX_TABLE_27[] = { +static const SCX_enum SCX_AUX_TABLE_28[] = { SCX_Devanagari, SCX_Grantha }; -static const SCX_enum SCX_AUX_TABLE_28[] = { +static const SCX_enum SCX_AUX_TABLE_29[] = { SCX_Bengali, SCX_Devanagari }; -static const SCX_enum SCX_AUX_TABLE_29[] = { +static const SCX_enum SCX_AUX_TABLE_30[] = { SCX_Devanagari, SCX_Sharada }; -static const SCX_enum SCX_AUX_TABLE_30[] = { +static const SCX_enum SCX_AUX_TABLE_31[] = { SCX_Devanagari, SCX_Kannada, SCX_Malayalam, @@ -78762,12 +80470,12 @@ static const SCX_enum SCX_AUX_TABLE_30[] = { SCX_Telugu }; -static const SCX_enum SCX_AUX_TABLE_31[] = { +static const SCX_enum SCX_AUX_TABLE_32[] = { SCX_Devanagari, SCX_Nandinagari }; -static const SCX_enum SCX_AUX_TABLE_32[] = { +static const SCX_enum SCX_AUX_TABLE_33[] = { SCX_Bengali, SCX_Devanagari, SCX_Grantha, @@ -78778,36 +80486,36 @@ static const SCX_enum SCX_AUX_TABLE_32[] = { SCX_Tirhuta }; -static const SCX_enum SCX_AUX_TABLE_33[] = { +static const SCX_enum SCX_AUX_TABLE_34[] = { SCX_Devanagari, SCX_Grantha, SCX_Kannada }; -static const SCX_enum SCX_AUX_TABLE_34[] = { +static const SCX_enum SCX_AUX_TABLE_35[] = { SCX_Cyrillic, SCX_Syriac }; -static const SCX_enum SCX_AUX_TABLE_35[] = { +static const SCX_enum SCX_AUX_TABLE_36[] = { SCX_Latin, SCX_Mongolian }; -static const SCX_enum SCX_AUX_TABLE_36[] = { +static const SCX_enum SCX_AUX_TABLE_37[] = { SCX_Devanagari, SCX_Grantha, SCX_Latin }; -static const SCX_enum SCX_AUX_TABLE_37[] = { +static const SCX_enum SCX_AUX_TABLE_38[] = { SCX_Han, SCX_Hanb, SCX_Jpan, SCX_Kore }; -static const SCX_enum SCX_AUX_TABLE_38[] = { +static const SCX_enum SCX_AUX_TABLE_39[] = { SCX_Bopomofo, SCX_Han, SCX_Hanb, @@ -78819,7 +80527,7 @@ static const SCX_enum SCX_AUX_TABLE_38[] = { SCX_Yi }; -static const SCX_enum SCX_AUX_TABLE_39[] = { +static const SCX_enum SCX_AUX_TABLE_40[] = { SCX_Bopomofo, SCX_Han, SCX_Hanb, @@ -78830,7 +80538,7 @@ static const SCX_enum SCX_AUX_TABLE_39[] = { SCX_Kore }; -static const SCX_enum SCX_AUX_TABLE_40[] = { +static const SCX_enum SCX_AUX_TABLE_41[] = { SCX_Bopomofo, SCX_Han, SCX_Hanb, @@ -78838,13 +80546,13 @@ static const SCX_enum SCX_AUX_TABLE_40[] = { SCX_Kore }; -static const SCX_enum SCX_AUX_TABLE_41[] = { +static const SCX_enum SCX_AUX_TABLE_42[] = { SCX_Hiragana, SCX_Jpan, SCX_Katakana }; -static const SCX_enum SCX_AUX_TABLE_42[] = { +static const SCX_enum SCX_AUX_TABLE_43[] = { SCX_Han, SCX_Hanb, SCX_Hiragana, @@ -78853,17 +80561,17 @@ static const SCX_enum SCX_AUX_TABLE_42[] = { SCX_Kore }; -static const SCX_enum SCX_AUX_TABLE_43[] = { +static const SCX_enum SCX_AUX_TABLE_44[] = { SCX_Hiragana, SCX_Jpan }; -static const SCX_enum SCX_AUX_TABLE_44[] = { +static const SCX_enum SCX_AUX_TABLE_45[] = { SCX_Jpan, SCX_Katakana }; -static const SCX_enum SCX_AUX_TABLE_45[] = { +static const SCX_enum SCX_AUX_TABLE_46[] = { SCX_Han, SCX_Hanb, SCX_Jpan, @@ -78871,7 +80579,7 @@ static const SCX_enum SCX_AUX_TABLE_45[] = { SCX_Latin }; -static const SCX_enum SCX_AUX_TABLE_46[] = { +static const SCX_enum SCX_AUX_TABLE_47[] = { SCX_Devanagari, SCX_Dogra, SCX_Gujarati, @@ -78888,7 +80596,7 @@ static const SCX_enum SCX_AUX_TABLE_46[] = { SCX_Tirhuta }; -static const SCX_enum SCX_AUX_TABLE_47[] = { +static const SCX_enum SCX_AUX_TABLE_48[] = { SCX_Devanagari, SCX_Dogra, SCX_Gujarati, @@ -78904,7 +80612,7 @@ static const SCX_enum SCX_AUX_TABLE_47[] = { SCX_Tirhuta }; -static const SCX_enum SCX_AUX_TABLE_48[] = { +static const SCX_enum SCX_AUX_TABLE_49[] = { SCX_Devanagari, SCX_Dogra, SCX_Gujarati, @@ -78918,43 +80626,59 @@ static const SCX_enum SCX_AUX_TABLE_48[] = { SCX_Tirhuta }; -static const SCX_enum SCX_AUX_TABLE_49[] = { +static const SCX_enum SCX_AUX_TABLE_50[] = { SCX_Devanagari, SCX_Tamil }; -static const SCX_enum SCX_AUX_TABLE_50[] = { +static const SCX_enum SCX_AUX_TABLE_51[] = { SCX_Kayah_Li, SCX_Latin, SCX_Myanmar }; -static const SCX_enum SCX_AUX_TABLE_51[] = { +static const SCX_enum SCX_AUX_TABLE_52[] = { SCX_Buginese, SCX_Javanese }; -static const SCX_enum SCX_AUX_TABLE_52[] = { +static const SCX_enum SCX_AUX_TABLE_53[] = { + SCX_Arabic, + SCX_Nko +}; + +static const SCX_enum SCX_AUX_TABLE_54[] = { SCX_Arabic, SCX_Thaana }; -static const SCX_enum SCX_AUX_TABLE_53[] = { +static const SCX_enum SCX_AUX_TABLE_55[] = { SCX_Cypriot, + SCX_Cypro_Minoan, SCX_Linear_B }; -static const SCX_enum SCX_AUX_TABLE_54[] = { +static const SCX_enum SCX_AUX_TABLE_56[] = { + SCX_Cypriot, + SCX_Linear_B +}; + +static const SCX_enum SCX_AUX_TABLE_57[] = { SCX_Cypriot, SCX_Linear_A, SCX_Linear_B }; -static const SCX_enum SCX_AUX_TABLE_55[] = { +static const SCX_enum SCX_AUX_TABLE_58[] = { SCX_Arabic, SCX_Coptic }; +static const SCX_enum SCX_AUX_TABLE_59[] = { + SCX_Manichaean, + SCX_Old_Uyghur +}; + static const SCX_enum * const SCX_AUX_TABLE_ptrs[] = { NULL, /* Placeholder */ SCX_AUX_TABLE_1, @@ -79011,7 +80735,11 @@ static const SCX_enum * const SCX_AUX_TABLE_ptrs[] = { SCX_AUX_TABLE_52, SCX_AUX_TABLE_53, SCX_AUX_TABLE_54, - SCX_AUX_TABLE_55 + SCX_AUX_TABLE_55, + SCX_AUX_TABLE_56, + SCX_AUX_TABLE_57, + SCX_AUX_TABLE_58, + SCX_AUX_TABLE_59 }; /* Parallel table to the above, giving the number of elements in each table @@ -79023,57 +80751,61 @@ static const U8 SCX_AUX_TABLE_lengths[] = { 2 /* SCX_AUX_TABLE_2 */, 2 /* SCX_AUX_TABLE_3 */, 2 /* SCX_AUX_TABLE_4 */, - 5 /* SCX_AUX_TABLE_5 */, + 6 /* SCX_AUX_TABLE_5 */, 3 /* SCX_AUX_TABLE_6 */, - 8 /* SCX_AUX_TABLE_7 */, - 2 /* SCX_AUX_TABLE_8 */, - 3 /* SCX_AUX_TABLE_9 */, - 2 /* SCX_AUX_TABLE_10 */, - 13 /* SCX_AUX_TABLE_11 */, - 12 /* SCX_AUX_TABLE_12 */, - 20 /* SCX_AUX_TABLE_13 */, - 21 /* SCX_AUX_TABLE_14 */, - 4 /* SCX_AUX_TABLE_15 */, - 3 /* SCX_AUX_TABLE_16 */, - 2 /* SCX_AUX_TABLE_17 */, + 7 /* SCX_AUX_TABLE_7 */, + 9 /* SCX_AUX_TABLE_8 */, + 2 /* SCX_AUX_TABLE_9 */, + 3 /* SCX_AUX_TABLE_10 */, + 2 /* SCX_AUX_TABLE_11 */, + 13 /* SCX_AUX_TABLE_12 */, + 12 /* SCX_AUX_TABLE_13 */, + 20 /* SCX_AUX_TABLE_14 */, + 21 /* SCX_AUX_TABLE_15 */, + 4 /* SCX_AUX_TABLE_16 */, + 3 /* SCX_AUX_TABLE_17 */, 2 /* SCX_AUX_TABLE_18 */, 2 /* SCX_AUX_TABLE_19 */, 2 /* SCX_AUX_TABLE_20 */, - 3 /* SCX_AUX_TABLE_21 */, - 2 /* SCX_AUX_TABLE_22 */, + 2 /* SCX_AUX_TABLE_21 */, + 3 /* SCX_AUX_TABLE_22 */, 2 /* SCX_AUX_TABLE_23 */, - 4 /* SCX_AUX_TABLE_24 */, - 2 /* SCX_AUX_TABLE_25 */, - 4 /* SCX_AUX_TABLE_26 */, - 2 /* SCX_AUX_TABLE_27 */, + 2 /* SCX_AUX_TABLE_24 */, + 4 /* SCX_AUX_TABLE_25 */, + 2 /* SCX_AUX_TABLE_26 */, + 4 /* SCX_AUX_TABLE_27 */, 2 /* SCX_AUX_TABLE_28 */, 2 /* SCX_AUX_TABLE_29 */, - 6 /* SCX_AUX_TABLE_30 */, - 2 /* SCX_AUX_TABLE_31 */, - 8 /* SCX_AUX_TABLE_32 */, - 3 /* SCX_AUX_TABLE_33 */, - 2 /* SCX_AUX_TABLE_34 */, + 2 /* SCX_AUX_TABLE_30 */, + 6 /* SCX_AUX_TABLE_31 */, + 2 /* SCX_AUX_TABLE_32 */, + 8 /* SCX_AUX_TABLE_33 */, + 3 /* SCX_AUX_TABLE_34 */, 2 /* SCX_AUX_TABLE_35 */, - 3 /* SCX_AUX_TABLE_36 */, - 4 /* SCX_AUX_TABLE_37 */, - 9 /* SCX_AUX_TABLE_38 */, - 8 /* SCX_AUX_TABLE_39 */, - 5 /* SCX_AUX_TABLE_40 */, - 3 /* SCX_AUX_TABLE_41 */, - 6 /* SCX_AUX_TABLE_42 */, - 2 /* SCX_AUX_TABLE_43 */, + 2 /* SCX_AUX_TABLE_36 */, + 3 /* SCX_AUX_TABLE_37 */, + 4 /* SCX_AUX_TABLE_38 */, + 9 /* SCX_AUX_TABLE_39 */, + 8 /* SCX_AUX_TABLE_40 */, + 5 /* SCX_AUX_TABLE_41 */, + 3 /* SCX_AUX_TABLE_42 */, + 6 /* SCX_AUX_TABLE_43 */, 2 /* SCX_AUX_TABLE_44 */, - 5 /* SCX_AUX_TABLE_45 */, - 14 /* SCX_AUX_TABLE_46 */, - 13 /* SCX_AUX_TABLE_47 */, - 11 /* SCX_AUX_TABLE_48 */, - 2 /* SCX_AUX_TABLE_49 */, - 3 /* SCX_AUX_TABLE_50 */, - 2 /* SCX_AUX_TABLE_51 */, + 2 /* SCX_AUX_TABLE_45 */, + 5 /* SCX_AUX_TABLE_46 */, + 14 /* SCX_AUX_TABLE_47 */, + 13 /* SCX_AUX_TABLE_48 */, + 11 /* SCX_AUX_TABLE_49 */, + 2 /* SCX_AUX_TABLE_50 */, + 3 /* SCX_AUX_TABLE_51 */, 2 /* SCX_AUX_TABLE_52 */, 2 /* SCX_AUX_TABLE_53 */, - 3 /* SCX_AUX_TABLE_54 */, - 2 /* SCX_AUX_TABLE_55 */ + 2 /* SCX_AUX_TABLE_54 */, + 3 /* SCX_AUX_TABLE_55 */, + 2 /* SCX_AUX_TABLE_56 */, + 3 /* SCX_AUX_TABLE_57 */, + 2 /* SCX_AUX_TABLE_58 */, + 2 /* SCX_AUX_TABLE_59 */ }; /* This table, indexed by the script enum, gives the zero code point for that @@ -79110,6 +80842,7 @@ static const UV script_zeros[] = { '0', /* Coptic */ '0', /* Cuneiform */ '0', /* Cypriot */ + '0', /* Cypro_Minoan */ '0', /* Cyrillic */ '0', /* Deseret */ 0x966, /* Devanagari */ @@ -79197,6 +80930,7 @@ static const UV script_zeros[] = { '0', /* Old_Sogdian */ '0', /* Old_South_Arabian */ '0', /* Old_Turkic */ + '0', /* Old_Uyghur */ 0xb66, /* Oriya */ '0', /* Osage */ 0x104a0, /* Osmanya */ @@ -79228,6 +80962,7 @@ static const UV script_zeros[] = { '0', /* Tai_Viet */ 0x116c0, /* Takri */ 0xbe6, /* Tamil */ + 0x16ac0, /* Tangsa */ '0', /* Tangut */ 0xc66, /* Telugu */ 0x660, /* Thaana */ @@ -79235,8 +80970,10 @@ static const UV script_zeros[] = { 0xf20, /* Tibetan */ '0', /* Tifinagh */ 0x114d0, /* Tirhuta */ + '0', /* Toto */ '0', /* Ugaritic */ 0xa620, /* Vai */ + '0', /* Vithkuqi */ 0x1e2f0, /* Wancho */ 0x118e0, /* Warang_Citi */ 0x660 /* Yezidi */ @@ -79341,9 +81078,6 @@ static const SCX_enum _Perl_SCX_invmap[] = { /* for EBCDIC 1047 */ SCX_Arabic, SCX_use_AUX_TABLE_5, SCX_use_AUX_TABLE_6, - SCX_Unknown, - SCX_Arabic, - SCX_use_AUX_TABLE_5, SCX_Arabic, SCX_use_AUX_TABLE_7, SCX_Arabic, @@ -79351,10 +81085,12 @@ static const SCX_enum _Perl_SCX_invmap[] = { /* for EBCDIC 1047 */ SCX_Arabic, SCX_use_AUX_TABLE_9, SCX_Arabic, - SCX_use_AUX_TABLE_8, - SCX_Arabic, SCX_use_AUX_TABLE_10, SCX_Arabic, + SCX_use_AUX_TABLE_9, + SCX_Arabic, + SCX_use_AUX_TABLE_11, + SCX_Arabic, SCX_Common, SCX_Arabic, SCX_Syriac, @@ -79386,13 +81122,13 @@ static const SCX_enum _Perl_SCX_invmap[] = { /* for EBCDIC 1047 */ SCX_Common, SCX_Arabic, SCX_Devanagari, - SCX_use_AUX_TABLE_11, SCX_use_AUX_TABLE_12, + SCX_use_AUX_TABLE_13, SCX_Inherited, SCX_Devanagari, - SCX_use_AUX_TABLE_13, SCX_use_AUX_TABLE_14, SCX_use_AUX_TABLE_15, + SCX_use_AUX_TABLE_16, SCX_Devanagari, SCX_Bengali, SCX_Unknown, @@ -79420,7 +81156,7 @@ static const SCX_enum _Perl_SCX_invmap[] = { /* for EBCDIC 1047 */ SCX_Unknown, SCX_Bengali, SCX_Unknown, - SCX_use_AUX_TABLE_16, + SCX_use_AUX_TABLE_17, SCX_Bengali, SCX_Unknown, SCX_Gurmukhi, @@ -79453,7 +81189,7 @@ static const SCX_enum _Perl_SCX_invmap[] = { /* for EBCDIC 1047 */ SCX_Unknown, SCX_Gurmukhi, SCX_Unknown, - SCX_use_AUX_TABLE_17, + SCX_use_AUX_TABLE_18, SCX_Gurmukhi, SCX_Unknown, SCX_Gujarati, @@ -79480,7 +81216,7 @@ static const SCX_enum _Perl_SCX_invmap[] = { /* for EBCDIC 1047 */ SCX_Unknown, SCX_Gujarati, SCX_Unknown, - SCX_use_AUX_TABLE_18, + SCX_use_AUX_TABLE_19, SCX_Gujarati, SCX_Unknown, SCX_Gujarati, @@ -79543,7 +81279,7 @@ static const SCX_enum _Perl_SCX_invmap[] = { /* for EBCDIC 1047 */ SCX_Unknown, SCX_Tamil, SCX_Unknown, - SCX_use_AUX_TABLE_19, + SCX_use_AUX_TABLE_20, SCX_Tamil, SCX_Unknown, SCX_Telugu, @@ -79569,6 +81305,8 @@ static const SCX_enum _Perl_SCX_invmap[] = { /* for EBCDIC 1047 */ SCX_Telugu, SCX_Unknown, SCX_Telugu, + SCX_Unknown, + SCX_Telugu, SCX_Kannada, SCX_Unknown, SCX_Kannada, @@ -79591,7 +81329,7 @@ static const SCX_enum _Perl_SCX_invmap[] = { /* for EBCDIC 1047 */ SCX_Unknown, SCX_Kannada, SCX_Unknown, - SCX_use_AUX_TABLE_20, + SCX_use_AUX_TABLE_21, SCX_Unknown, SCX_Kannada, SCX_Unknown, @@ -79675,7 +81413,7 @@ static const SCX_enum _Perl_SCX_invmap[] = { /* for EBCDIC 1047 */ SCX_Tibetan, SCX_Unknown, SCX_Myanmar, - SCX_use_AUX_TABLE_21, + SCX_use_AUX_TABLE_22, SCX_Myanmar, SCX_Georgian, SCX_Unknown, @@ -79684,9 +81422,9 @@ static const SCX_enum _Perl_SCX_invmap[] = { /* for EBCDIC 1047 */ SCX_Georgian, SCX_Unknown, SCX_Georgian, - SCX_use_AUX_TABLE_22, - SCX_Georgian, SCX_use_AUX_TABLE_23, + SCX_Georgian, + SCX_use_AUX_TABLE_24, SCX_Ethiopic, SCX_Unknown, SCX_Ethiopic, @@ -79737,9 +81475,8 @@ static const SCX_enum _Perl_SCX_invmap[] = { /* for EBCDIC 1047 */ SCX_Tagalog, SCX_Unknown, SCX_Tagalog, - SCX_Unknown, SCX_Hanunoo, - SCX_use_AUX_TABLE_24, + SCX_use_AUX_TABLE_25, SCX_Unknown, SCX_Buhid, SCX_Unknown, @@ -79756,11 +81493,9 @@ static const SCX_enum _Perl_SCX_invmap[] = { /* for EBCDIC 1047 */ SCX_Khmer, SCX_Unknown, SCX_Mongolian, - SCX_use_AUX_TABLE_25, - SCX_Mongolian, - SCX_use_AUX_TABLE_25, + SCX_use_AUX_TABLE_26, SCX_Mongolian, - SCX_Unknown, + SCX_use_AUX_TABLE_26, SCX_Mongolian, SCX_Unknown, SCX_Mongolian, @@ -79826,33 +81561,33 @@ static const SCX_enum _Perl_SCX_invmap[] = { /* for EBCDIC 1047 */ SCX_Georgian, SCX_Sundanese, SCX_Unknown, - SCX_use_AUX_TABLE_26, - SCX_Devanagari, - SCX_use_AUX_TABLE_26, SCX_use_AUX_TABLE_27, SCX_Devanagari, + SCX_use_AUX_TABLE_27, SCX_use_AUX_TABLE_28, + SCX_Devanagari, SCX_use_AUX_TABLE_29, - SCX_use_AUX_TABLE_28, + SCX_use_AUX_TABLE_30, SCX_use_AUX_TABLE_29, SCX_use_AUX_TABLE_30, + SCX_use_AUX_TABLE_31, SCX_Devanagari, - SCX_use_AUX_TABLE_29, + SCX_use_AUX_TABLE_30, SCX_Devanagari, + SCX_use_AUX_TABLE_30, SCX_use_AUX_TABLE_29, - SCX_use_AUX_TABLE_28, SCX_Devanagari, - SCX_use_AUX_TABLE_31, - SCX_use_AUX_TABLE_28, + SCX_use_AUX_TABLE_32, + SCX_use_AUX_TABLE_29, SCX_Devanagari, - SCX_use_AUX_TABLE_28, + SCX_use_AUX_TABLE_29, SCX_Devanagari, - SCX_use_AUX_TABLE_32, - SCX_use_AUX_TABLE_27, SCX_use_AUX_TABLE_33, SCX_use_AUX_TABLE_28, + SCX_use_AUX_TABLE_34, + SCX_use_AUX_TABLE_29, SCX_Bengali, - SCX_use_AUX_TABLE_27, + SCX_use_AUX_TABLE_28, SCX_Nandinagari, SCX_Unknown, SCX_Latin, @@ -79867,9 +81602,9 @@ static const SCX_enum _Perl_SCX_invmap[] = { /* for EBCDIC 1047 */ SCX_Latin, SCX_Greek, SCX_Inherited, - SCX_use_AUX_TABLE_34, + SCX_use_AUX_TABLE_35, SCX_Inherited, - SCX_Unknown, + SCX_Syriac, SCX_Inherited, SCX_Latin, SCX_Greek, @@ -79907,7 +81642,7 @@ static const SCX_enum _Perl_SCX_invmap[] = { /* for EBCDIC 1047 */ SCX_Common, SCX_Inherited, SCX_Common, - SCX_use_AUX_TABLE_35, + SCX_use_AUX_TABLE_36, SCX_Common, SCX_Unknown, SCX_Common, @@ -79922,7 +81657,7 @@ static const SCX_enum _Perl_SCX_invmap[] = { /* for EBCDIC 1047 */ SCX_Common, SCX_Unknown, SCX_Inherited, - SCX_use_AUX_TABLE_36, + SCX_use_AUX_TABLE_37, SCX_Unknown, SCX_Common, SCX_Greek, @@ -79948,9 +81683,6 @@ static const SCX_enum _Perl_SCX_invmap[] = { /* for EBCDIC 1047 */ SCX_Unknown, SCX_Common, SCX_Glagolitic, - SCX_Unknown, - SCX_Glagolitic, - SCX_Unknown, SCX_Latin, SCX_Coptic, SCX_Unknown, @@ -79989,78 +81721,77 @@ static const SCX_enum _Perl_SCX_invmap[] = { /* for EBCDIC 1047 */ SCX_use_AUX_TABLE_3, SCX_Common, SCX_Unknown, - SCX_use_AUX_TABLE_37, + SCX_use_AUX_TABLE_38, SCX_Unknown, - SCX_use_AUX_TABLE_37, + SCX_use_AUX_TABLE_38, SCX_Unknown, - SCX_use_AUX_TABLE_37, + SCX_use_AUX_TABLE_38, SCX_Unknown, SCX_Common, SCX_Unknown, SCX_Common, - SCX_use_AUX_TABLE_38, SCX_use_AUX_TABLE_39, + SCX_use_AUX_TABLE_40, SCX_Common, - SCX_use_AUX_TABLE_37, - SCX_use_AUX_TABLE_38, - SCX_Common, - SCX_use_AUX_TABLE_39, SCX_use_AUX_TABLE_38, SCX_use_AUX_TABLE_39, SCX_Common, - SCX_use_AUX_TABLE_37, SCX_use_AUX_TABLE_40, - SCX_use_AUX_TABLE_23, SCX_use_AUX_TABLE_39, - SCX_use_AUX_TABLE_41, + SCX_use_AUX_TABLE_40, SCX_Common, - SCX_use_AUX_TABLE_39, - SCX_use_AUX_TABLE_37, + SCX_use_AUX_TABLE_38, + SCX_use_AUX_TABLE_41, + SCX_use_AUX_TABLE_24, + SCX_use_AUX_TABLE_40, SCX_use_AUX_TABLE_42, - SCX_use_AUX_TABLE_37, - SCX_Unknown, + SCX_Common, + SCX_use_AUX_TABLE_40, + SCX_use_AUX_TABLE_38, SCX_use_AUX_TABLE_43, + SCX_use_AUX_TABLE_38, SCX_Unknown, - SCX_use_AUX_TABLE_41, - SCX_use_AUX_TABLE_43, - SCX_use_AUX_TABLE_41, SCX_use_AUX_TABLE_44, - SCX_use_AUX_TABLE_38, - SCX_use_AUX_TABLE_41, + SCX_Unknown, + SCX_use_AUX_TABLE_42, SCX_use_AUX_TABLE_44, + SCX_use_AUX_TABLE_42, + SCX_use_AUX_TABLE_45, + SCX_use_AUX_TABLE_39, + SCX_use_AUX_TABLE_42, + SCX_use_AUX_TABLE_45, SCX_Unknown, SCX_use_AUX_TABLE_1, SCX_Unknown, - SCX_use_AUX_TABLE_23, + SCX_use_AUX_TABLE_24, SCX_Unknown, - SCX_use_AUX_TABLE_37, + SCX_use_AUX_TABLE_38, SCX_use_AUX_TABLE_1, - SCX_use_AUX_TABLE_37, + SCX_use_AUX_TABLE_38, SCX_Unknown, - SCX_use_AUX_TABLE_44, - SCX_use_AUX_TABLE_23, + SCX_use_AUX_TABLE_45, + SCX_use_AUX_TABLE_24, SCX_Unknown, - SCX_use_AUX_TABLE_37, + SCX_use_AUX_TABLE_38, SCX_Common, - SCX_use_AUX_TABLE_23, + SCX_use_AUX_TABLE_24, SCX_Common, - SCX_use_AUX_TABLE_37, + SCX_use_AUX_TABLE_38, SCX_Common, - SCX_use_AUX_TABLE_37, + SCX_use_AUX_TABLE_38, SCX_Common, - SCX_use_AUX_TABLE_44, - SCX_use_AUX_TABLE_37, - SCX_use_AUX_TABLE_44, - SCX_use_AUX_TABLE_37, + SCX_use_AUX_TABLE_45, + SCX_use_AUX_TABLE_38, + SCX_use_AUX_TABLE_45, + SCX_use_AUX_TABLE_38, SCX_Common, - SCX_use_AUX_TABLE_37, + SCX_use_AUX_TABLE_38, SCX_Common, - SCX_use_AUX_TABLE_37, + SCX_use_AUX_TABLE_38, SCX_Common, - SCX_use_AUX_TABLE_37, + SCX_use_AUX_TABLE_38, SCX_Common, - SCX_use_AUX_TABLE_37, - SCX_Unknown, + SCX_use_AUX_TABLE_38, SCX_Yi, SCX_Unknown, SCX_Yi, @@ -80073,7 +81804,7 @@ static const SCX_enum _Perl_SCX_invmap[] = { /* for EBCDIC 1047 */ SCX_Cyrillic, SCX_Bamum, SCX_Unknown, - SCX_use_AUX_TABLE_45, + SCX_use_AUX_TABLE_46, SCX_Common, SCX_Latin, SCX_Common, @@ -80082,11 +81813,15 @@ static const SCX_enum _Perl_SCX_invmap[] = { /* for EBCDIC 1047 */ SCX_Latin, SCX_Unknown, SCX_Latin, + SCX_Unknown, + SCX_Latin, + SCX_Unknown, + SCX_Latin, SCX_Syloti_Nagri, SCX_Unknown, - SCX_use_AUX_TABLE_46, SCX_use_AUX_TABLE_47, SCX_use_AUX_TABLE_48, + SCX_use_AUX_TABLE_49, SCX_Unknown, SCX_Phags_Pa, SCX_Unknown, @@ -80095,21 +81830,21 @@ static const SCX_enum _Perl_SCX_invmap[] = { /* for EBCDIC 1047 */ SCX_Saurashtra, SCX_Unknown, SCX_Devanagari, - SCX_use_AUX_TABLE_28, + SCX_use_AUX_TABLE_29, SCX_Devanagari, - SCX_use_AUX_TABLE_49, + SCX_use_AUX_TABLE_50, SCX_Devanagari, SCX_Kayah_Li, - SCX_use_AUX_TABLE_50, + SCX_use_AUX_TABLE_51, SCX_Kayah_Li, SCX_Rejang, SCX_Unknown, SCX_Rejang, - SCX_use_AUX_TABLE_23, + SCX_use_AUX_TABLE_24, SCX_Unknown, SCX_Javanese, SCX_Unknown, - SCX_use_AUX_TABLE_51, + SCX_use_AUX_TABLE_52, SCX_Javanese, SCX_Unknown, SCX_Javanese, @@ -80150,15 +81885,15 @@ static const SCX_enum _Perl_SCX_invmap[] = { /* for EBCDIC 1047 */ SCX_Unknown, SCX_Meetei_Mayek, SCX_Unknown, - SCX_use_AUX_TABLE_23, + SCX_use_AUX_TABLE_24, SCX_Unknown, - SCX_use_AUX_TABLE_23, + SCX_use_AUX_TABLE_24, SCX_Unknown, - SCX_use_AUX_TABLE_23, + SCX_use_AUX_TABLE_24, SCX_Unknown, - SCX_use_AUX_TABLE_37, + SCX_use_AUX_TABLE_38, SCX_Unknown, - SCX_use_AUX_TABLE_37, + SCX_use_AUX_TABLE_38, SCX_Unknown, SCX_Latin, SCX_Unknown, @@ -80178,24 +81913,25 @@ static const SCX_enum _Perl_SCX_invmap[] = { /* for EBCDIC 1047 */ SCX_Arabic, SCX_Unknown, SCX_Arabic, - SCX_Common, + SCX_use_AUX_TABLE_53, + SCX_Arabic, SCX_Unknown, SCX_Arabic, SCX_Unknown, SCX_Arabic, SCX_Unknown, SCX_Arabic, - SCX_use_AUX_TABLE_52, + SCX_use_AUX_TABLE_54, + SCX_Arabic, + SCX_use_AUX_TABLE_54, SCX_Arabic, - SCX_use_AUX_TABLE_52, - SCX_Unknown, SCX_Inherited, SCX_Common, SCX_Unknown, SCX_Inherited, SCX_Cyrillic, SCX_Common, - SCX_use_AUX_TABLE_39, + SCX_use_AUX_TABLE_40, SCX_Common, SCX_Unknown, SCX_Common, @@ -80213,20 +81949,20 @@ static const SCX_enum _Perl_SCX_invmap[] = { /* for EBCDIC 1047 */ SCX_Common, SCX_Latin, SCX_Common, - SCX_use_AUX_TABLE_38, - SCX_use_AUX_TABLE_44, - SCX_use_AUX_TABLE_41, - SCX_use_AUX_TABLE_44, - SCX_use_AUX_TABLE_41, - SCX_use_AUX_TABLE_23, + SCX_use_AUX_TABLE_39, + SCX_use_AUX_TABLE_45, + SCX_use_AUX_TABLE_42, + SCX_use_AUX_TABLE_45, + SCX_use_AUX_TABLE_42, + SCX_use_AUX_TABLE_24, SCX_Unknown, - SCX_use_AUX_TABLE_23, + SCX_use_AUX_TABLE_24, SCX_Unknown, - SCX_use_AUX_TABLE_23, + SCX_use_AUX_TABLE_24, SCX_Unknown, - SCX_use_AUX_TABLE_23, + SCX_use_AUX_TABLE_24, SCX_Unknown, - SCX_use_AUX_TABLE_23, + SCX_use_AUX_TABLE_24, SCX_Unknown, SCX_Common, SCX_Unknown, @@ -80248,11 +81984,12 @@ static const SCX_enum _Perl_SCX_invmap[] = { /* for EBCDIC 1047 */ SCX_Unknown, SCX_Linear_B, SCX_Unknown, - SCX_use_AUX_TABLE_53, + SCX_use_AUX_TABLE_55, + SCX_use_AUX_TABLE_56, SCX_Unknown, - SCX_use_AUX_TABLE_54, + SCX_use_AUX_TABLE_57, SCX_Unknown, - SCX_use_AUX_TABLE_53, + SCX_use_AUX_TABLE_56, SCX_Greek, SCX_Unknown, SCX_Common, @@ -80266,7 +82003,7 @@ static const SCX_enum _Perl_SCX_invmap[] = { /* for EBCDIC 1047 */ SCX_Unknown, SCX_Carian, SCX_Unknown, - SCX_use_AUX_TABLE_55, + SCX_use_AUX_TABLE_58, SCX_Unknown, SCX_Old_Italic, SCX_Unknown, @@ -80297,6 +82034,21 @@ static const SCX_enum _Perl_SCX_invmap[] = { /* for EBCDIC 1047 */ SCX_Caucasian_Albanian, SCX_Unknown, SCX_Caucasian_Albanian, + SCX_Vithkuqi, + SCX_Unknown, + SCX_Vithkuqi, + SCX_Unknown, + SCX_Vithkuqi, + SCX_Unknown, + SCX_Vithkuqi, + SCX_Unknown, + SCX_Vithkuqi, + SCX_Unknown, + SCX_Vithkuqi, + SCX_Unknown, + SCX_Vithkuqi, + SCX_Unknown, + SCX_Vithkuqi, SCX_Unknown, SCX_Linear_A, SCX_Unknown, @@ -80304,6 +82056,12 @@ static const SCX_enum _Perl_SCX_invmap[] = { /* for EBCDIC 1047 */ SCX_Unknown, SCX_Linear_A, SCX_Unknown, + SCX_Latin, + SCX_Unknown, + SCX_Latin, + SCX_Unknown, + SCX_Latin, + SCX_Unknown, SCX_Cypriot, SCX_Unknown, SCX_Cypriot, @@ -80363,6 +82121,8 @@ static const SCX_enum _Perl_SCX_invmap[] = { /* for EBCDIC 1047 */ SCX_Manichaean, SCX_Unknown, SCX_Manichaean, + SCX_use_AUX_TABLE_59, + SCX_Manichaean, SCX_Unknown, SCX_Avestan, SCX_Unknown, @@ -80402,6 +82162,8 @@ static const SCX_enum _Perl_SCX_invmap[] = { /* for EBCDIC 1047 */ SCX_Unknown, SCX_Sogdian, SCX_Unknown, + SCX_Old_Uyghur, + SCX_Unknown, SCX_Chorasmian, SCX_Unknown, SCX_Elymaic, @@ -80448,9 +82210,9 @@ static const SCX_enum _Perl_SCX_invmap[] = { /* for EBCDIC 1047 */ SCX_Khudawadi, SCX_Unknown, SCX_Grantha, - SCX_use_AUX_TABLE_19, + SCX_use_AUX_TABLE_20, SCX_Grantha, - SCX_use_AUX_TABLE_19, + SCX_use_AUX_TABLE_20, SCX_Unknown, SCX_Grantha, SCX_Unknown, @@ -80464,7 +82226,7 @@ static const SCX_enum _Perl_SCX_invmap[] = { /* for EBCDIC 1047 */ SCX_Unknown, SCX_Grantha, SCX_Unknown, - SCX_use_AUX_TABLE_19, + SCX_use_AUX_TABLE_20, SCX_Grantha, SCX_Unknown, SCX_Grantha, @@ -80540,6 +82302,7 @@ static const SCX_enum _Perl_SCX_invmap[] = { /* for EBCDIC 1047 */ SCX_Unknown, SCX_Soyombo, SCX_Unknown, + SCX_Canadian_Aboriginal, SCX_Pau_Cin_Hau, SCX_Unknown, SCX_Bhaiksuki, @@ -80587,9 +82350,9 @@ static const SCX_enum _Perl_SCX_invmap[] = { /* for EBCDIC 1047 */ SCX_Lisu, SCX_Unknown, SCX_Tamil, - SCX_use_AUX_TABLE_19, + SCX_use_AUX_TABLE_20, SCX_Tamil, - SCX_use_AUX_TABLE_19, + SCX_use_AUX_TABLE_20, SCX_Tamil, SCX_Unknown, SCX_Tamil, @@ -80601,6 +82364,8 @@ static const SCX_enum _Perl_SCX_invmap[] = { /* for EBCDIC 1047 */ SCX_Unknown, SCX_Cuneiform, SCX_Unknown, + SCX_Cypro_Minoan, + SCX_Unknown, SCX_Egyptian_Hieroglyphs, SCX_Unknown, SCX_Egyptian_Hieroglyphs, @@ -80614,6 +82379,9 @@ static const SCX_enum _Perl_SCX_invmap[] = { /* for EBCDIC 1047 */ SCX_Mro, SCX_Unknown, SCX_Mro, + SCX_Tangsa, + SCX_Unknown, + SCX_Tangsa, SCX_Unknown, SCX_Bassa_Vah, SCX_Unknown, @@ -80639,10 +82407,10 @@ static const SCX_enum _Perl_SCX_invmap[] = { /* for EBCDIC 1047 */ SCX_Unknown, SCX_Tangut, SCX_Nushu, - SCX_Common, + SCX_use_AUX_TABLE_38, SCX_Khitan_Small_Script, SCX_Unknown, - SCX_use_AUX_TABLE_37, + SCX_use_AUX_TABLE_38, SCX_Unknown, SCX_Tangut, SCX_Unknown, @@ -80651,13 +82419,20 @@ static const SCX_enum _Perl_SCX_invmap[] = { /* for EBCDIC 1047 */ SCX_Unknown, SCX_Tangut, SCX_Unknown, - SCX_use_AUX_TABLE_44, - SCX_use_AUX_TABLE_43, + SCX_use_AUX_TABLE_45, SCX_Unknown, - SCX_use_AUX_TABLE_43, + SCX_use_AUX_TABLE_45, + SCX_Unknown, + SCX_use_AUX_TABLE_45, + SCX_Unknown, + SCX_use_AUX_TABLE_45, + SCX_use_AUX_TABLE_44, + SCX_use_AUX_TABLE_45, SCX_Unknown, SCX_use_AUX_TABLE_44, SCX_Unknown, + SCX_use_AUX_TABLE_45, + SCX_Unknown, SCX_Nushu, SCX_Unknown, SCX_Duployan, @@ -80670,6 +82445,12 @@ static const SCX_enum _Perl_SCX_invmap[] = { /* for EBCDIC 1047 */ SCX_Unknown, SCX_Duployan, SCX_Unknown, + SCX_Inherited, + SCX_Unknown, + SCX_Inherited, + SCX_Unknown, + SCX_Common, + SCX_Unknown, SCX_Common, SCX_Unknown, SCX_Common, @@ -80690,7 +82471,7 @@ static const SCX_enum _Perl_SCX_invmap[] = { /* for EBCDIC 1047 */ SCX_Unknown, SCX_Common, SCX_Unknown, - SCX_use_AUX_TABLE_37, + SCX_use_AUX_TABLE_38, SCX_Common, SCX_Unknown, SCX_Common, @@ -80740,6 +82521,8 @@ static const SCX_enum _Perl_SCX_invmap[] = { /* for EBCDIC 1047 */ SCX_Unknown, SCX_SignWriting, SCX_Unknown, + SCX_Latin, + SCX_Unknown, SCX_Glagolitic, SCX_Unknown, SCX_Glagolitic, @@ -80758,10 +82541,20 @@ static const SCX_enum _Perl_SCX_invmap[] = { /* for EBCDIC 1047 */ SCX_Unknown, SCX_Nyiakeng_Puachue_Hmong, SCX_Unknown, + SCX_Toto, + SCX_Unknown, SCX_Wancho, SCX_Unknown, SCX_Wancho, SCX_Unknown, + SCX_Ethiopic, + SCX_Unknown, + SCX_Ethiopic, + SCX_Unknown, + SCX_Ethiopic, + SCX_Unknown, + SCX_Ethiopic, + SCX_Unknown, SCX_Mende_Kikakui, SCX_Unknown, SCX_Mende_Kikakui, @@ -80859,14 +82652,14 @@ static const SCX_enum _Perl_SCX_invmap[] = { /* for EBCDIC 1047 */ SCX_Common, SCX_Unknown, SCX_Common, - SCX_use_AUX_TABLE_43, + SCX_use_AUX_TABLE_44, SCX_Common, SCX_Unknown, SCX_Common, SCX_Unknown, SCX_Common, SCX_Unknown, - SCX_use_AUX_TABLE_37, + SCX_use_AUX_TABLE_38, SCX_Unknown, SCX_Common, SCX_Unknown, @@ -80922,19 +82715,21 @@ static const SCX_enum _Perl_SCX_invmap[] = { /* for EBCDIC 1047 */ SCX_Unknown, SCX_Common, SCX_Unknown, - SCX_use_AUX_TABLE_37, + SCX_Common, SCX_Unknown, - SCX_use_AUX_TABLE_37, + SCX_use_AUX_TABLE_38, SCX_Unknown, - SCX_use_AUX_TABLE_37, + SCX_use_AUX_TABLE_38, SCX_Unknown, - SCX_use_AUX_TABLE_37, + SCX_use_AUX_TABLE_38, SCX_Unknown, - SCX_use_AUX_TABLE_37, + SCX_use_AUX_TABLE_38, SCX_Unknown, - SCX_use_AUX_TABLE_37, + SCX_use_AUX_TABLE_38, SCX_Unknown, - SCX_use_AUX_TABLE_37, + SCX_use_AUX_TABLE_38, + SCX_Unknown, + SCX_use_AUX_TABLE_38, SCX_Unknown, SCX_Common, SCX_Unknown, @@ -80956,7 +82751,7 @@ static const SCX_enum _Perl_SCX_invmap[] = { /* for EBCDIC 1047 */ && '$' == 91 && '@' == 124 && '`' == 121 && '\n' == 37 static const UV _Perl_SCX_invlist[] = { /* for EBCDIC 037 */ - 1695, /* Number of elements */ + 1753, /* Number of elements */ 148565664, /* Version and data structure type */ 0, /* 0 if the list starts at 0; 1 if it starts at the element beyond 0 */ @@ -81055,7 +82850,6 @@ static const UV _Perl_SCX_invlist[] = { /* for EBCDIC 037 */ 0x61B, 0x61C, 0x61D, - 0x61E, 0x61F, 0x620, 0x640, @@ -81091,11 +82885,11 @@ static const UV _Perl_SCX_invlist[] = { /* for EBCDIC 037 */ 0x85F, 0x860, 0x86B, - 0x8A0, - 0x8B5, - 0x8B6, - 0x8C8, - 0x8D3, + 0x870, + 0x88F, + 0x890, + 0x892, + 0x898, 0x8E2, 0x8E3, 0x900, @@ -81267,7 +83061,7 @@ static const UV _Perl_SCX_invlist[] = { /* for EBCDIC 037 */ 0xC29, 0xC2A, 0xC3A, - 0xC3D, + 0xC3C, 0xC45, 0xC46, 0xC49, @@ -81277,6 +83071,8 @@ static const UV _Perl_SCX_invlist[] = { /* for EBCDIC 037 */ 0xC57, 0xC58, 0xC5B, + 0xC5D, + 0xC5E, 0xC60, 0xC64, 0xC66, @@ -81300,7 +83096,7 @@ static const UV _Perl_SCX_invlist[] = { /* for EBCDIC 037 */ 0xCCE, 0xCD5, 0xCD7, - 0xCDE, + 0xCDD, 0xCDF, 0xCE0, 0xCE4, @@ -81448,9 +83244,8 @@ static const UV _Perl_SCX_invlist[] = { /* for EBCDIC 037 */ 0x16EE, 0x16F9, 0x1700, - 0x170D, - 0x170E, - 0x1715, + 0x1716, + 0x171F, 0x1720, 0x1735, 0x1737, @@ -81473,8 +83268,6 @@ static const UV _Perl_SCX_invlist[] = { /* for EBCDIC 037 */ 0x1804, 0x1805, 0x1806, - 0x180F, - 0x1810, 0x181A, 0x1820, 0x1879, @@ -81517,11 +83310,11 @@ static const UV _Perl_SCX_invlist[] = { /* for EBCDIC 037 */ 0x1AA0, 0x1AAE, 0x1AB0, - 0x1AC1, + 0x1ACF, 0x1B00, - 0x1B4C, + 0x1B4D, 0x1B50, - 0x1B7D, + 0x1B7F, 0x1B80, 0x1BC0, 0x1BF4, @@ -81633,7 +83426,7 @@ static const UV _Perl_SCX_invlist[] = { /* for EBCDIC 037 */ 0x2090, 0x209D, 0x20A0, - 0x20C0, + 0x20C1, 0x20D0, 0x20F0, 0x20F1, @@ -81661,9 +83454,6 @@ static const UV _Perl_SCX_invlist[] = { /* for EBCDIC 037 */ 0x2B96, 0x2B97, 0x2C00, - 0x2C2F, - 0x2C30, - 0x2C5F, 0x2C60, 0x2C80, 0x2CF4, @@ -81701,7 +83491,7 @@ static const UV _Perl_SCX_invlist[] = { /* for EBCDIC 037 */ 0x2E00, 0x2E43, 0x2E44, - 0x2E53, + 0x2E5E, 0x2E80, 0x2E9A, 0x2E9B, @@ -81773,7 +83563,6 @@ static const UV _Perl_SCX_invlist[] = { /* for EBCDIC 037 */ 0x3400, 0x4DC0, 0x4E00, - 0x9FFD, 0xA000, 0xA48D, 0xA490, @@ -81791,10 +83580,14 @@ static const UV _Perl_SCX_invlist[] = { /* for EBCDIC 037 */ 0xA722, 0xA788, 0xA78B, - 0xA7C0, - 0xA7C2, 0xA7CB, - 0xA7F5, + 0xA7D0, + 0xA7D2, + 0xA7D3, + 0xA7D4, + 0xA7D5, + 0xA7DA, + 0xA7F2, 0xA800, 0xA82D, 0xA830, @@ -81889,14 +83682,15 @@ static const UV _Perl_SCX_invlist[] = { /* for EBCDIC 037 */ 0xFB45, 0xFB46, 0xFB50, - 0xFBC2, + 0xFBC3, 0xFBD3, 0xFD3E, 0xFD40, - 0xFD50, 0xFD90, 0xFD92, 0xFDC8, + 0xFDCF, + 0xFDD0, 0xFDF0, 0xFDF2, 0xFDF3, @@ -81962,6 +83756,7 @@ static const UV _Perl_SCX_invlist[] = { /* for EBCDIC 037 */ 0x10080, 0x100FB, 0x10100, + 0x10102, 0x10103, 0x10107, 0x10134, @@ -82011,12 +83806,33 @@ static const UV _Perl_SCX_invlist[] = { /* for EBCDIC 037 */ 0x10564, 0x1056F, 0x10570, + 0x1057B, + 0x1057C, + 0x1058B, + 0x1058C, + 0x10593, + 0x10594, + 0x10596, + 0x10597, + 0x105A2, + 0x105A3, + 0x105B2, + 0x105B3, + 0x105BA, + 0x105BB, + 0x105BD, 0x10600, 0x10737, 0x10740, 0x10756, 0x10760, 0x10768, + 0x10780, + 0x10786, + 0x10787, + 0x107B1, + 0x107B2, + 0x107BB, 0x10800, 0x10806, 0x10808, @@ -82076,6 +83892,8 @@ static const UV _Perl_SCX_invlist[] = { /* for EBCDIC 037 */ 0x10AC0, 0x10AE7, 0x10AEB, + 0x10AF2, + 0x10AF3, 0x10AF7, 0x10B00, 0x10B36, @@ -82115,6 +83933,8 @@ static const UV _Perl_SCX_invlist[] = { /* for EBCDIC 037 */ 0x10F28, 0x10F30, 0x10F5A, + 0x10F70, + 0x10F8A, 0x10FB0, 0x10FCC, 0x10FE0, @@ -82122,10 +83942,10 @@ static const UV _Perl_SCX_invlist[] = { /* for EBCDIC 037 */ 0x11000, 0x1104E, 0x11052, - 0x11070, + 0x11076, 0x1107F, 0x11080, - 0x110C2, + 0x110C3, 0x110CD, 0x110CE, 0x110D0, @@ -82213,7 +84033,7 @@ static const UV _Perl_SCX_invlist[] = { /* for EBCDIC 037 */ 0x11660, 0x1166D, 0x11680, - 0x116B9, + 0x116BA, 0x116C0, 0x116CA, 0x11700, @@ -82221,7 +84041,7 @@ static const UV _Perl_SCX_invlist[] = { /* for EBCDIC 037 */ 0x1171D, 0x1172C, 0x11730, - 0x11740, + 0x11747, 0x11800, 0x1183C, 0x118A0, @@ -82253,6 +84073,7 @@ static const UV _Perl_SCX_invlist[] = { /* for EBCDIC 037 */ 0x11A48, 0x11A50, 0x11AA3, + 0x11AB0, 0x11AC0, 0x11AF9, 0x11C00, @@ -82314,6 +84135,8 @@ static const UV _Perl_SCX_invlist[] = { /* for EBCDIC 037 */ 0x12475, 0x12480, 0x12544, + 0x12F90, + 0x12FF3, 0x13000, 0x1342F, 0x13430, @@ -82328,6 +84151,9 @@ static const UV _Perl_SCX_invlist[] = { /* for EBCDIC 037 */ 0x16A6A, 0x16A6E, 0x16A70, + 0x16ABF, + 0x16AC0, + 0x16ACA, 0x16AD0, 0x16AEE, 0x16AF0, @@ -82364,9 +84190,16 @@ static const UV _Perl_SCX_invlist[] = { /* for EBCDIC 037 */ 0x18CD6, 0x18D00, 0x18D09, + 0x1AFF0, + 0x1AFF4, + 0x1AFF5, + 0x1AFFC, + 0x1AFFD, + 0x1AFFF, 0x1B000, 0x1B001, - 0x1B11F, + 0x1B120, + 0x1B123, 0x1B150, 0x1B153, 0x1B164, @@ -82383,6 +84216,12 @@ static const UV _Perl_SCX_invlist[] = { /* for EBCDIC 037 */ 0x1BC9A, 0x1BC9C, 0x1BCA4, + 0x1CF00, + 0x1CF2E, + 0x1CF30, + 0x1CF47, + 0x1CF50, + 0x1CFC4, 0x1D000, 0x1D0F6, 0x1D100, @@ -82396,7 +84235,7 @@ static const UV _Perl_SCX_invlist[] = { /* for EBCDIC 037 */ 0x1D18C, 0x1D1AA, 0x1D1AE, - 0x1D1E9, + 0x1D1EB, 0x1D200, 0x1D246, 0x1D2E0, @@ -82453,6 +84292,8 @@ static const UV _Perl_SCX_invlist[] = { /* for EBCDIC 037 */ 0x1DAA0, 0x1DAA1, 0x1DAB0, + 0x1DF00, + 0x1DF1F, 0x1E000, 0x1E007, 0x1E008, @@ -82471,10 +84312,20 @@ static const UV _Perl_SCX_invlist[] = { /* for EBCDIC 037 */ 0x1E14A, 0x1E14E, 0x1E150, + 0x1E290, + 0x1E2AF, 0x1E2C0, 0x1E2FA, 0x1E2FF, 0x1E300, + 0x1E7E0, + 0x1E7E7, + 0x1E7E8, + 0x1E7EC, + 0x1E7ED, + 0x1E7EF, + 0x1E7F0, + 0x1E7FF, 0x1E800, 0x1E8C5, 0x1E8C7, @@ -82585,7 +84436,7 @@ static const UV _Perl_SCX_invlist[] = { /* for EBCDIC 037 */ 0x1F266, 0x1F300, 0x1F6D8, - 0x1F6E0, + 0x1F6DD, 0x1F6ED, 0x1F6F0, 0x1F6FD, @@ -82595,6 +84446,8 @@ static const UV _Perl_SCX_invlist[] = { /* for EBCDIC 037 */ 0x1F7D9, 0x1F7E0, 0x1F7EC, + 0x1F7F0, + 0x1F7F1, 0x1F800, 0x1F80C, 0x1F810, @@ -82608,27 +84461,27 @@ static const UV _Perl_SCX_invlist[] = { /* for EBCDIC 037 */ 0x1F8B0, 0x1F8B2, 0x1F900, - 0x1F979, - 0x1F97A, - 0x1F9CC, - 0x1F9CD, 0x1FA54, 0x1FA60, 0x1FA6E, 0x1FA70, 0x1FA75, 0x1FA78, - 0x1FA7B, + 0x1FA7D, 0x1FA80, 0x1FA87, 0x1FA90, - 0x1FAA9, + 0x1FAAD, 0x1FAB0, - 0x1FAB7, + 0x1FABB, 0x1FAC0, - 0x1FAC3, + 0x1FAC6, 0x1FAD0, - 0x1FAD7, + 0x1FADA, + 0x1FAE0, + 0x1FAE8, + 0x1FAF0, + 0x1FAF7, 0x1FB00, 0x1FB93, 0x1FB94, @@ -82636,9 +84489,9 @@ static const UV _Perl_SCX_invlist[] = { /* for EBCDIC 037 */ 0x1FBF0, 0x1FBFA, 0x20000, - 0x2A6DE, + 0x2A6E0, 0x2A700, - 0x2B735, + 0x2B739, 0x2B740, 0x2B81E, 0x2B820, @@ -82700,138 +84553,143 @@ typedef enum { SCX_Coptic = 26, SCX_Cuneiform = 27, SCX_Cypriot = 28, - SCX_Cyrillic = 29, - SCX_Deseret = 30, - SCX_Devanagari = 31, - SCX_Dives_Akuru = 32, - SCX_Dogra = 33, - SCX_Duployan = 34, - SCX_Egyptian_Hieroglyphs = 35, - SCX_Elbasan = 36, - SCX_Elymaic = 37, - SCX_Ethiopic = 38, - SCX_Georgian = 39, - SCX_Glagolitic = 40, - SCX_Gothic = 41, - SCX_Grantha = 42, - SCX_Greek = 43, - SCX_Gujarati = 44, - SCX_Gunjala_Gondi = 45, - SCX_Gurmukhi = 46, - SCX_Han = 47, - SCX_Hanb = 48, - SCX_Hangul = 49, - SCX_Hanifi_Rohingya = 50, - SCX_Hanunoo = 51, - SCX_Hatran = 52, - SCX_Hebrew = 53, - SCX_Hiragana = 54, - SCX_Imperial_Aramaic = 55, - SCX_Inherited = 56, - SCX_Inscriptional_Pahlavi = 57, - SCX_Inscriptional_Parthian = 58, - SCX_INVALID = 59, - SCX_Javanese = 60, - SCX_Jpan = 61, - SCX_Kaithi = 62, - SCX_Kannada = 63, - SCX_Katakana = 64, - SCX_Kayah_Li = 65, - SCX_Kharoshthi = 66, - SCX_Khitan_Small_Script = 67, - SCX_Khmer = 68, - SCX_Khojki = 69, - SCX_Khudawadi = 70, - SCX_Kore = 71, - SCX_Lao = 72, - SCX_Latin = 73, - SCX_Lepcha = 74, - SCX_Limbu = 75, - SCX_Linear_A = 76, - SCX_Linear_B = 77, - SCX_Lisu = 78, - SCX_Lycian = 79, - SCX_Lydian = 80, - SCX_Mahajani = 81, - SCX_Makasar = 82, - SCX_Malayalam = 83, - SCX_Mandaic = 84, - SCX_Manichaean = 85, - SCX_Marchen = 86, - SCX_Masaram_Gondi = 87, - SCX_Medefaidrin = 88, - SCX_Meetei_Mayek = 89, - SCX_Mende_Kikakui = 90, - SCX_Meroitic_Cursive = 91, - SCX_Meroitic_Hieroglyphs = 92, - SCX_Miao = 93, - SCX_Modi = 94, - SCX_Mongolian = 95, - SCX_Mro = 96, - SCX_Multani = 97, - SCX_Myanmar = 98, - SCX_Nabataean = 99, - SCX_Nandinagari = 100, - SCX_New_Tai_Lue = 101, - SCX_Newa = 102, - SCX_Nko = 103, - SCX_Nushu = 104, - SCX_Nyiakeng_Puachue_Hmong = 105, - SCX_Ogham = 106, - SCX_Ol_Chiki = 107, - SCX_Old_Hungarian = 108, - SCX_Old_Italic = 109, - SCX_Old_North_Arabian = 110, - SCX_Old_Permic = 111, - SCX_Old_Persian = 112, - SCX_Old_Sogdian = 113, - SCX_Old_South_Arabian = 114, - SCX_Old_Turkic = 115, - SCX_Oriya = 116, - SCX_Osage = 117, - SCX_Osmanya = 118, - SCX_Pahawh_Hmong = 119, - SCX_Palmyrene = 120, - SCX_Pau_Cin_Hau = 121, - SCX_Phags_Pa = 122, - SCX_Phoenician = 123, - SCX_Psalter_Pahlavi = 124, - SCX_Rejang = 125, - SCX_Runic = 126, - SCX_Samaritan = 127, - SCX_Saurashtra = 128, - SCX_Sharada = 129, - SCX_Shavian = 130, - SCX_Siddham = 131, - SCX_SignWriting = 132, - SCX_Sinhala = 133, - SCX_Sogdian = 134, - SCX_Sora_Sompeng = 135, - SCX_Soyombo = 136, - SCX_Sundanese = 137, - SCX_Syloti_Nagri = 138, - SCX_Syriac = 139, - SCX_Tagalog = 140, - SCX_Tagbanwa = 141, - SCX_Tai_Le = 142, - SCX_Tai_Tham = 143, - SCX_Tai_Viet = 144, - SCX_Takri = 145, - SCX_Tamil = 146, - SCX_Tangut = 147, - SCX_Telugu = 148, - SCX_Thaana = 149, - SCX_Thai = 150, - SCX_Tibetan = 151, - SCX_Tifinagh = 152, - SCX_Tirhuta = 153, - SCX_Ugaritic = 154, - SCX_Vai = 155, - SCX_Wancho = 156, - SCX_Warang_Citi = 157, - SCX_Yezidi = 158, - SCX_Yi = 159, - SCX_Zanabazar_Square = 160, + SCX_Cypro_Minoan = 29, + SCX_Cyrillic = 30, + SCX_Deseret = 31, + SCX_Devanagari = 32, + SCX_Dives_Akuru = 33, + SCX_Dogra = 34, + SCX_Duployan = 35, + SCX_Egyptian_Hieroglyphs = 36, + SCX_Elbasan = 37, + SCX_Elymaic = 38, + SCX_Ethiopic = 39, + SCX_Georgian = 40, + SCX_Glagolitic = 41, + SCX_Gothic = 42, + SCX_Grantha = 43, + SCX_Greek = 44, + SCX_Gujarati = 45, + SCX_Gunjala_Gondi = 46, + SCX_Gurmukhi = 47, + SCX_Han = 48, + SCX_Hanb = 49, + SCX_Hangul = 50, + SCX_Hanifi_Rohingya = 51, + SCX_Hanunoo = 52, + SCX_Hatran = 53, + SCX_Hebrew = 54, + SCX_Hiragana = 55, + SCX_Imperial_Aramaic = 56, + SCX_Inherited = 57, + SCX_Inscriptional_Pahlavi = 58, + SCX_Inscriptional_Parthian = 59, + SCX_INVALID = 60, + SCX_Javanese = 61, + SCX_Jpan = 62, + SCX_Kaithi = 63, + SCX_Kannada = 64, + SCX_Katakana = 65, + SCX_Kayah_Li = 66, + SCX_Kharoshthi = 67, + SCX_Khitan_Small_Script = 68, + SCX_Khmer = 69, + SCX_Khojki = 70, + SCX_Khudawadi = 71, + SCX_Kore = 72, + SCX_Lao = 73, + SCX_Latin = 74, + SCX_Lepcha = 75, + SCX_Limbu = 76, + SCX_Linear_A = 77, + SCX_Linear_B = 78, + SCX_Lisu = 79, + SCX_Lycian = 80, + SCX_Lydian = 81, + SCX_Mahajani = 82, + SCX_Makasar = 83, + SCX_Malayalam = 84, + SCX_Mandaic = 85, + SCX_Manichaean = 86, + SCX_Marchen = 87, + SCX_Masaram_Gondi = 88, + SCX_Medefaidrin = 89, + SCX_Meetei_Mayek = 90, + SCX_Mende_Kikakui = 91, + SCX_Meroitic_Cursive = 92, + SCX_Meroitic_Hieroglyphs = 93, + SCX_Miao = 94, + SCX_Modi = 95, + SCX_Mongolian = 96, + SCX_Mro = 97, + SCX_Multani = 98, + SCX_Myanmar = 99, + SCX_Nabataean = 100, + SCX_Nandinagari = 101, + SCX_New_Tai_Lue = 102, + SCX_Newa = 103, + SCX_Nko = 104, + SCX_Nushu = 105, + SCX_Nyiakeng_Puachue_Hmong = 106, + SCX_Ogham = 107, + SCX_Ol_Chiki = 108, + SCX_Old_Hungarian = 109, + SCX_Old_Italic = 110, + SCX_Old_North_Arabian = 111, + SCX_Old_Permic = 112, + SCX_Old_Persian = 113, + SCX_Old_Sogdian = 114, + SCX_Old_South_Arabian = 115, + SCX_Old_Turkic = 116, + SCX_Old_Uyghur = 117, + SCX_Oriya = 118, + SCX_Osage = 119, + SCX_Osmanya = 120, + SCX_Pahawh_Hmong = 121, + SCX_Palmyrene = 122, + SCX_Pau_Cin_Hau = 123, + SCX_Phags_Pa = 124, + SCX_Phoenician = 125, + SCX_Psalter_Pahlavi = 126, + SCX_Rejang = 127, + SCX_Runic = 128, + SCX_Samaritan = 129, + SCX_Saurashtra = 130, + SCX_Sharada = 131, + SCX_Shavian = 132, + SCX_Siddham = 133, + SCX_SignWriting = 134, + SCX_Sinhala = 135, + SCX_Sogdian = 136, + SCX_Sora_Sompeng = 137, + SCX_Soyombo = 138, + SCX_Sundanese = 139, + SCX_Syloti_Nagri = 140, + SCX_Syriac = 141, + SCX_Tagalog = 142, + SCX_Tagbanwa = 143, + SCX_Tai_Le = 144, + SCX_Tai_Tham = 145, + SCX_Tai_Viet = 146, + SCX_Takri = 147, + SCX_Tamil = 148, + SCX_Tangsa = 149, + SCX_Tangut = 150, + SCX_Telugu = 151, + SCX_Thaana = 152, + SCX_Thai = 153, + SCX_Tibetan = 154, + SCX_Tifinagh = 155, + SCX_Tirhuta = 156, + SCX_Toto = 157, + SCX_Ugaritic = 158, + SCX_Vai = 159, + SCX_Vithkuqi = 160, + SCX_Wancho = 161, + SCX_Warang_Citi = 162, + SCX_Yezidi = 163, + SCX_Yi = 164, + SCX_Zanabazar_Square = 165, SCX_use_AUX_TABLE_1 = -1, SCX_use_AUX_TABLE_2 = -2, SCX_use_AUX_TABLE_3 = -3, @@ -82886,7 +84744,11 @@ typedef enum { SCX_use_AUX_TABLE_52 = -52, SCX_use_AUX_TABLE_53 = -53, SCX_use_AUX_TABLE_54 = -54, - SCX_use_AUX_TABLE_55 = -55 + SCX_use_AUX_TABLE_55 = -55, + SCX_use_AUX_TABLE_56 = -56, + SCX_use_AUX_TABLE_57 = -57, + SCX_use_AUX_TABLE_58 = -58, + SCX_use_AUX_TABLE_59 = -59 } SCX_enum; # endif /* EBCDIC 037 */ @@ -82923,6 +84785,7 @@ static const SCX_enum SCX_AUX_TABLE_4[] = { static const SCX_enum SCX_AUX_TABLE_5[] = { SCX_Arabic, SCX_Hanifi_Rohingya, + SCX_Nko, SCX_Syriac, SCX_Thaana, SCX_Yezidi @@ -82935,33 +84798,44 @@ static const SCX_enum SCX_AUX_TABLE_6[] = { }; static const SCX_enum SCX_AUX_TABLE_7[] = { + SCX_Adlam, + SCX_Arabic, + SCX_Hanifi_Rohingya, + SCX_Nko, + SCX_Syriac, + SCX_Thaana, + SCX_Yezidi +}; + +static const SCX_enum SCX_AUX_TABLE_8[] = { SCX_Adlam, SCX_Arabic, SCX_Hanifi_Rohingya, SCX_Mandaic, SCX_Manichaean, + SCX_Old_Uyghur, SCX_Psalter_Pahlavi, SCX_Sogdian, SCX_Syriac }; -static const SCX_enum SCX_AUX_TABLE_8[] = { +static const SCX_enum SCX_AUX_TABLE_9[] = { SCX_Arabic, SCX_Syriac }; -static const SCX_enum SCX_AUX_TABLE_9[] = { +static const SCX_enum SCX_AUX_TABLE_10[] = { SCX_Arabic, SCX_Thaana, SCX_Yezidi }; -static const SCX_enum SCX_AUX_TABLE_10[] = { +static const SCX_enum SCX_AUX_TABLE_11[] = { SCX_Arabic, SCX_Hanifi_Rohingya }; -static const SCX_enum SCX_AUX_TABLE_11[] = { +static const SCX_enum SCX_AUX_TABLE_12[] = { SCX_Bengali, SCX_Devanagari, SCX_Grantha, @@ -82977,7 +84851,7 @@ static const SCX_enum SCX_AUX_TABLE_11[] = { SCX_Tirhuta }; -static const SCX_enum SCX_AUX_TABLE_12[] = { +static const SCX_enum SCX_AUX_TABLE_13[] = { SCX_Bengali, SCX_Devanagari, SCX_Grantha, @@ -82992,7 +84866,7 @@ static const SCX_enum SCX_AUX_TABLE_12[] = { SCX_Tirhuta }; -static const SCX_enum SCX_AUX_TABLE_13[] = { +static const SCX_enum SCX_AUX_TABLE_14[] = { SCX_Bengali, SCX_Devanagari, SCX_Dogra, @@ -83015,7 +84889,7 @@ static const SCX_enum SCX_AUX_TABLE_13[] = { SCX_Tirhuta }; -static const SCX_enum SCX_AUX_TABLE_14[] = { +static const SCX_enum SCX_AUX_TABLE_15[] = { SCX_Bengali, SCX_Devanagari, SCX_Dogra, @@ -83039,90 +84913,90 @@ static const SCX_enum SCX_AUX_TABLE_14[] = { SCX_Tirhuta }; -static const SCX_enum SCX_AUX_TABLE_15[] = { +static const SCX_enum SCX_AUX_TABLE_16[] = { SCX_Devanagari, SCX_Dogra, SCX_Kaithi, SCX_Mahajani }; -static const SCX_enum SCX_AUX_TABLE_16[] = { +static const SCX_enum SCX_AUX_TABLE_17[] = { SCX_Bengali, SCX_Chakma, SCX_Syloti_Nagri }; -static const SCX_enum SCX_AUX_TABLE_17[] = { +static const SCX_enum SCX_AUX_TABLE_18[] = { SCX_Gurmukhi, SCX_Multani }; -static const SCX_enum SCX_AUX_TABLE_18[] = { +static const SCX_enum SCX_AUX_TABLE_19[] = { SCX_Gujarati, SCX_Khojki }; -static const SCX_enum SCX_AUX_TABLE_19[] = { +static const SCX_enum SCX_AUX_TABLE_20[] = { SCX_Grantha, SCX_Tamil }; -static const SCX_enum SCX_AUX_TABLE_20[] = { +static const SCX_enum SCX_AUX_TABLE_21[] = { SCX_Kannada, SCX_Nandinagari }; -static const SCX_enum SCX_AUX_TABLE_21[] = { +static const SCX_enum SCX_AUX_TABLE_22[] = { SCX_Chakma, SCX_Myanmar, SCX_Tai_Le }; -static const SCX_enum SCX_AUX_TABLE_22[] = { +static const SCX_enum SCX_AUX_TABLE_23[] = { SCX_Georgian, SCX_Latin }; -static const SCX_enum SCX_AUX_TABLE_23[] = { +static const SCX_enum SCX_AUX_TABLE_24[] = { SCX_Hangul, SCX_Kore }; -static const SCX_enum SCX_AUX_TABLE_24[] = { +static const SCX_enum SCX_AUX_TABLE_25[] = { SCX_Buhid, SCX_Hanunoo, SCX_Tagalog, SCX_Tagbanwa }; -static const SCX_enum SCX_AUX_TABLE_25[] = { +static const SCX_enum SCX_AUX_TABLE_26[] = { SCX_Mongolian, SCX_Phags_Pa }; -static const SCX_enum SCX_AUX_TABLE_26[] = { +static const SCX_enum SCX_AUX_TABLE_27[] = { SCX_Bengali, SCX_Devanagari, SCX_Grantha, SCX_Kannada }; -static const SCX_enum SCX_AUX_TABLE_27[] = { +static const SCX_enum SCX_AUX_TABLE_28[] = { SCX_Devanagari, SCX_Grantha }; -static const SCX_enum SCX_AUX_TABLE_28[] = { +static const SCX_enum SCX_AUX_TABLE_29[] = { SCX_Bengali, SCX_Devanagari }; -static const SCX_enum SCX_AUX_TABLE_29[] = { +static const SCX_enum SCX_AUX_TABLE_30[] = { SCX_Devanagari, SCX_Sharada }; -static const SCX_enum SCX_AUX_TABLE_30[] = { +static const SCX_enum SCX_AUX_TABLE_31[] = { SCX_Devanagari, SCX_Kannada, SCX_Malayalam, @@ -83131,12 +85005,12 @@ static const SCX_enum SCX_AUX_TABLE_30[] = { SCX_Telugu }; -static const SCX_enum SCX_AUX_TABLE_31[] = { +static const SCX_enum SCX_AUX_TABLE_32[] = { SCX_Devanagari, SCX_Nandinagari }; -static const SCX_enum SCX_AUX_TABLE_32[] = { +static const SCX_enum SCX_AUX_TABLE_33[] = { SCX_Bengali, SCX_Devanagari, SCX_Grantha, @@ -83147,36 +85021,36 @@ static const SCX_enum SCX_AUX_TABLE_32[] = { SCX_Tirhuta }; -static const SCX_enum SCX_AUX_TABLE_33[] = { +static const SCX_enum SCX_AUX_TABLE_34[] = { SCX_Devanagari, SCX_Grantha, SCX_Kannada }; -static const SCX_enum SCX_AUX_TABLE_34[] = { +static const SCX_enum SCX_AUX_TABLE_35[] = { SCX_Cyrillic, SCX_Syriac }; -static const SCX_enum SCX_AUX_TABLE_35[] = { +static const SCX_enum SCX_AUX_TABLE_36[] = { SCX_Latin, SCX_Mongolian }; -static const SCX_enum SCX_AUX_TABLE_36[] = { +static const SCX_enum SCX_AUX_TABLE_37[] = { SCX_Devanagari, SCX_Grantha, SCX_Latin }; -static const SCX_enum SCX_AUX_TABLE_37[] = { +static const SCX_enum SCX_AUX_TABLE_38[] = { SCX_Han, SCX_Hanb, SCX_Jpan, SCX_Kore }; -static const SCX_enum SCX_AUX_TABLE_38[] = { +static const SCX_enum SCX_AUX_TABLE_39[] = { SCX_Bopomofo, SCX_Han, SCX_Hanb, @@ -83188,7 +85062,7 @@ static const SCX_enum SCX_AUX_TABLE_38[] = { SCX_Yi }; -static const SCX_enum SCX_AUX_TABLE_39[] = { +static const SCX_enum SCX_AUX_TABLE_40[] = { SCX_Bopomofo, SCX_Han, SCX_Hanb, @@ -83199,7 +85073,7 @@ static const SCX_enum SCX_AUX_TABLE_39[] = { SCX_Kore }; -static const SCX_enum SCX_AUX_TABLE_40[] = { +static const SCX_enum SCX_AUX_TABLE_41[] = { SCX_Bopomofo, SCX_Han, SCX_Hanb, @@ -83207,13 +85081,13 @@ static const SCX_enum SCX_AUX_TABLE_40[] = { SCX_Kore }; -static const SCX_enum SCX_AUX_TABLE_41[] = { +static const SCX_enum SCX_AUX_TABLE_42[] = { SCX_Hiragana, SCX_Jpan, SCX_Katakana }; -static const SCX_enum SCX_AUX_TABLE_42[] = { +static const SCX_enum SCX_AUX_TABLE_43[] = { SCX_Han, SCX_Hanb, SCX_Hiragana, @@ -83222,17 +85096,17 @@ static const SCX_enum SCX_AUX_TABLE_42[] = { SCX_Kore }; -static const SCX_enum SCX_AUX_TABLE_43[] = { +static const SCX_enum SCX_AUX_TABLE_44[] = { SCX_Hiragana, SCX_Jpan }; -static const SCX_enum SCX_AUX_TABLE_44[] = { +static const SCX_enum SCX_AUX_TABLE_45[] = { SCX_Jpan, SCX_Katakana }; -static const SCX_enum SCX_AUX_TABLE_45[] = { +static const SCX_enum SCX_AUX_TABLE_46[] = { SCX_Han, SCX_Hanb, SCX_Jpan, @@ -83240,7 +85114,7 @@ static const SCX_enum SCX_AUX_TABLE_45[] = { SCX_Latin }; -static const SCX_enum SCX_AUX_TABLE_46[] = { +static const SCX_enum SCX_AUX_TABLE_47[] = { SCX_Devanagari, SCX_Dogra, SCX_Gujarati, @@ -83257,7 +85131,7 @@ static const SCX_enum SCX_AUX_TABLE_46[] = { SCX_Tirhuta }; -static const SCX_enum SCX_AUX_TABLE_47[] = { +static const SCX_enum SCX_AUX_TABLE_48[] = { SCX_Devanagari, SCX_Dogra, SCX_Gujarati, @@ -83273,7 +85147,7 @@ static const SCX_enum SCX_AUX_TABLE_47[] = { SCX_Tirhuta }; -static const SCX_enum SCX_AUX_TABLE_48[] = { +static const SCX_enum SCX_AUX_TABLE_49[] = { SCX_Devanagari, SCX_Dogra, SCX_Gujarati, @@ -83287,43 +85161,59 @@ static const SCX_enum SCX_AUX_TABLE_48[] = { SCX_Tirhuta }; -static const SCX_enum SCX_AUX_TABLE_49[] = { +static const SCX_enum SCX_AUX_TABLE_50[] = { SCX_Devanagari, SCX_Tamil }; -static const SCX_enum SCX_AUX_TABLE_50[] = { +static const SCX_enum SCX_AUX_TABLE_51[] = { SCX_Kayah_Li, SCX_Latin, SCX_Myanmar }; -static const SCX_enum SCX_AUX_TABLE_51[] = { +static const SCX_enum SCX_AUX_TABLE_52[] = { SCX_Buginese, SCX_Javanese }; -static const SCX_enum SCX_AUX_TABLE_52[] = { +static const SCX_enum SCX_AUX_TABLE_53[] = { + SCX_Arabic, + SCX_Nko +}; + +static const SCX_enum SCX_AUX_TABLE_54[] = { SCX_Arabic, SCX_Thaana }; -static const SCX_enum SCX_AUX_TABLE_53[] = { +static const SCX_enum SCX_AUX_TABLE_55[] = { SCX_Cypriot, + SCX_Cypro_Minoan, SCX_Linear_B }; -static const SCX_enum SCX_AUX_TABLE_54[] = { +static const SCX_enum SCX_AUX_TABLE_56[] = { + SCX_Cypriot, + SCX_Linear_B +}; + +static const SCX_enum SCX_AUX_TABLE_57[] = { SCX_Cypriot, SCX_Linear_A, SCX_Linear_B }; -static const SCX_enum SCX_AUX_TABLE_55[] = { +static const SCX_enum SCX_AUX_TABLE_58[] = { SCX_Arabic, SCX_Coptic }; +static const SCX_enum SCX_AUX_TABLE_59[] = { + SCX_Manichaean, + SCX_Old_Uyghur +}; + static const SCX_enum * const SCX_AUX_TABLE_ptrs[] = { NULL, /* Placeholder */ SCX_AUX_TABLE_1, @@ -83380,7 +85270,11 @@ static const SCX_enum * const SCX_AUX_TABLE_ptrs[] = { SCX_AUX_TABLE_52, SCX_AUX_TABLE_53, SCX_AUX_TABLE_54, - SCX_AUX_TABLE_55 + SCX_AUX_TABLE_55, + SCX_AUX_TABLE_56, + SCX_AUX_TABLE_57, + SCX_AUX_TABLE_58, + SCX_AUX_TABLE_59 }; /* Parallel table to the above, giving the number of elements in each table @@ -83392,57 +85286,61 @@ static const U8 SCX_AUX_TABLE_lengths[] = { 2 /* SCX_AUX_TABLE_2 */, 2 /* SCX_AUX_TABLE_3 */, 2 /* SCX_AUX_TABLE_4 */, - 5 /* SCX_AUX_TABLE_5 */, + 6 /* SCX_AUX_TABLE_5 */, 3 /* SCX_AUX_TABLE_6 */, - 8 /* SCX_AUX_TABLE_7 */, - 2 /* SCX_AUX_TABLE_8 */, - 3 /* SCX_AUX_TABLE_9 */, - 2 /* SCX_AUX_TABLE_10 */, - 13 /* SCX_AUX_TABLE_11 */, - 12 /* SCX_AUX_TABLE_12 */, - 20 /* SCX_AUX_TABLE_13 */, - 21 /* SCX_AUX_TABLE_14 */, - 4 /* SCX_AUX_TABLE_15 */, - 3 /* SCX_AUX_TABLE_16 */, - 2 /* SCX_AUX_TABLE_17 */, + 7 /* SCX_AUX_TABLE_7 */, + 9 /* SCX_AUX_TABLE_8 */, + 2 /* SCX_AUX_TABLE_9 */, + 3 /* SCX_AUX_TABLE_10 */, + 2 /* SCX_AUX_TABLE_11 */, + 13 /* SCX_AUX_TABLE_12 */, + 12 /* SCX_AUX_TABLE_13 */, + 20 /* SCX_AUX_TABLE_14 */, + 21 /* SCX_AUX_TABLE_15 */, + 4 /* SCX_AUX_TABLE_16 */, + 3 /* SCX_AUX_TABLE_17 */, 2 /* SCX_AUX_TABLE_18 */, 2 /* SCX_AUX_TABLE_19 */, 2 /* SCX_AUX_TABLE_20 */, - 3 /* SCX_AUX_TABLE_21 */, - 2 /* SCX_AUX_TABLE_22 */, + 2 /* SCX_AUX_TABLE_21 */, + 3 /* SCX_AUX_TABLE_22 */, 2 /* SCX_AUX_TABLE_23 */, - 4 /* SCX_AUX_TABLE_24 */, - 2 /* SCX_AUX_TABLE_25 */, - 4 /* SCX_AUX_TABLE_26 */, - 2 /* SCX_AUX_TABLE_27 */, + 2 /* SCX_AUX_TABLE_24 */, + 4 /* SCX_AUX_TABLE_25 */, + 2 /* SCX_AUX_TABLE_26 */, + 4 /* SCX_AUX_TABLE_27 */, 2 /* SCX_AUX_TABLE_28 */, 2 /* SCX_AUX_TABLE_29 */, - 6 /* SCX_AUX_TABLE_30 */, - 2 /* SCX_AUX_TABLE_31 */, - 8 /* SCX_AUX_TABLE_32 */, - 3 /* SCX_AUX_TABLE_33 */, - 2 /* SCX_AUX_TABLE_34 */, + 2 /* SCX_AUX_TABLE_30 */, + 6 /* SCX_AUX_TABLE_31 */, + 2 /* SCX_AUX_TABLE_32 */, + 8 /* SCX_AUX_TABLE_33 */, + 3 /* SCX_AUX_TABLE_34 */, 2 /* SCX_AUX_TABLE_35 */, - 3 /* SCX_AUX_TABLE_36 */, - 4 /* SCX_AUX_TABLE_37 */, - 9 /* SCX_AUX_TABLE_38 */, - 8 /* SCX_AUX_TABLE_39 */, - 5 /* SCX_AUX_TABLE_40 */, - 3 /* SCX_AUX_TABLE_41 */, - 6 /* SCX_AUX_TABLE_42 */, - 2 /* SCX_AUX_TABLE_43 */, + 2 /* SCX_AUX_TABLE_36 */, + 3 /* SCX_AUX_TABLE_37 */, + 4 /* SCX_AUX_TABLE_38 */, + 9 /* SCX_AUX_TABLE_39 */, + 8 /* SCX_AUX_TABLE_40 */, + 5 /* SCX_AUX_TABLE_41 */, + 3 /* SCX_AUX_TABLE_42 */, + 6 /* SCX_AUX_TABLE_43 */, 2 /* SCX_AUX_TABLE_44 */, - 5 /* SCX_AUX_TABLE_45 */, - 14 /* SCX_AUX_TABLE_46 */, - 13 /* SCX_AUX_TABLE_47 */, - 11 /* SCX_AUX_TABLE_48 */, - 2 /* SCX_AUX_TABLE_49 */, - 3 /* SCX_AUX_TABLE_50 */, - 2 /* SCX_AUX_TABLE_51 */, + 2 /* SCX_AUX_TABLE_45 */, + 5 /* SCX_AUX_TABLE_46 */, + 14 /* SCX_AUX_TABLE_47 */, + 13 /* SCX_AUX_TABLE_48 */, + 11 /* SCX_AUX_TABLE_49 */, + 2 /* SCX_AUX_TABLE_50 */, + 3 /* SCX_AUX_TABLE_51 */, 2 /* SCX_AUX_TABLE_52 */, 2 /* SCX_AUX_TABLE_53 */, - 3 /* SCX_AUX_TABLE_54 */, - 2 /* SCX_AUX_TABLE_55 */ + 2 /* SCX_AUX_TABLE_54 */, + 3 /* SCX_AUX_TABLE_55 */, + 2 /* SCX_AUX_TABLE_56 */, + 3 /* SCX_AUX_TABLE_57 */, + 2 /* SCX_AUX_TABLE_58 */, + 2 /* SCX_AUX_TABLE_59 */ }; /* This table, indexed by the script enum, gives the zero code point for that @@ -83479,6 +85377,7 @@ static const UV script_zeros[] = { '0', /* Coptic */ '0', /* Cuneiform */ '0', /* Cypriot */ + '0', /* Cypro_Minoan */ '0', /* Cyrillic */ '0', /* Deseret */ 0x966, /* Devanagari */ @@ -83566,6 +85465,7 @@ static const UV script_zeros[] = { '0', /* Old_Sogdian */ '0', /* Old_South_Arabian */ '0', /* Old_Turkic */ + '0', /* Old_Uyghur */ 0xb66, /* Oriya */ '0', /* Osage */ 0x104a0, /* Osmanya */ @@ -83597,6 +85497,7 @@ static const UV script_zeros[] = { '0', /* Tai_Viet */ 0x116c0, /* Takri */ 0xbe6, /* Tamil */ + 0x16ac0, /* Tangsa */ '0', /* Tangut */ 0xc66, /* Telugu */ 0x660, /* Thaana */ @@ -83604,8 +85505,10 @@ static const UV script_zeros[] = { 0xf20, /* Tibetan */ '0', /* Tifinagh */ 0x114d0, /* Tirhuta */ + '0', /* Toto */ '0', /* Ugaritic */ 0xa620, /* Vai */ + '0', /* Vithkuqi */ 0x1e2f0, /* Wancho */ 0x118e0, /* Warang_Citi */ 0x660 /* Yezidi */ @@ -83706,9 +85609,6 @@ static const SCX_enum _Perl_SCX_invmap[] = { /* for EBCDIC 037 */ SCX_Arabic, SCX_use_AUX_TABLE_5, SCX_use_AUX_TABLE_6, - SCX_Unknown, - SCX_Arabic, - SCX_use_AUX_TABLE_5, SCX_Arabic, SCX_use_AUX_TABLE_7, SCX_Arabic, @@ -83716,10 +85616,12 @@ static const SCX_enum _Perl_SCX_invmap[] = { /* for EBCDIC 037 */ SCX_Arabic, SCX_use_AUX_TABLE_9, SCX_Arabic, - SCX_use_AUX_TABLE_8, - SCX_Arabic, SCX_use_AUX_TABLE_10, SCX_Arabic, + SCX_use_AUX_TABLE_9, + SCX_Arabic, + SCX_use_AUX_TABLE_11, + SCX_Arabic, SCX_Common, SCX_Arabic, SCX_Syriac, @@ -83751,13 +85653,13 @@ static const SCX_enum _Perl_SCX_invmap[] = { /* for EBCDIC 037 */ SCX_Common, SCX_Arabic, SCX_Devanagari, - SCX_use_AUX_TABLE_11, SCX_use_AUX_TABLE_12, + SCX_use_AUX_TABLE_13, SCX_Inherited, SCX_Devanagari, - SCX_use_AUX_TABLE_13, SCX_use_AUX_TABLE_14, SCX_use_AUX_TABLE_15, + SCX_use_AUX_TABLE_16, SCX_Devanagari, SCX_Bengali, SCX_Unknown, @@ -83785,7 +85687,7 @@ static const SCX_enum _Perl_SCX_invmap[] = { /* for EBCDIC 037 */ SCX_Unknown, SCX_Bengali, SCX_Unknown, - SCX_use_AUX_TABLE_16, + SCX_use_AUX_TABLE_17, SCX_Bengali, SCX_Unknown, SCX_Gurmukhi, @@ -83818,7 +85720,7 @@ static const SCX_enum _Perl_SCX_invmap[] = { /* for EBCDIC 037 */ SCX_Unknown, SCX_Gurmukhi, SCX_Unknown, - SCX_use_AUX_TABLE_17, + SCX_use_AUX_TABLE_18, SCX_Gurmukhi, SCX_Unknown, SCX_Gujarati, @@ -83845,7 +85747,7 @@ static const SCX_enum _Perl_SCX_invmap[] = { /* for EBCDIC 037 */ SCX_Unknown, SCX_Gujarati, SCX_Unknown, - SCX_use_AUX_TABLE_18, + SCX_use_AUX_TABLE_19, SCX_Gujarati, SCX_Unknown, SCX_Gujarati, @@ -83908,7 +85810,7 @@ static const SCX_enum _Perl_SCX_invmap[] = { /* for EBCDIC 037 */ SCX_Unknown, SCX_Tamil, SCX_Unknown, - SCX_use_AUX_TABLE_19, + SCX_use_AUX_TABLE_20, SCX_Tamil, SCX_Unknown, SCX_Telugu, @@ -83934,6 +85836,8 @@ static const SCX_enum _Perl_SCX_invmap[] = { /* for EBCDIC 037 */ SCX_Telugu, SCX_Unknown, SCX_Telugu, + SCX_Unknown, + SCX_Telugu, SCX_Kannada, SCX_Unknown, SCX_Kannada, @@ -83956,7 +85860,7 @@ static const SCX_enum _Perl_SCX_invmap[] = { /* for EBCDIC 037 */ SCX_Unknown, SCX_Kannada, SCX_Unknown, - SCX_use_AUX_TABLE_20, + SCX_use_AUX_TABLE_21, SCX_Unknown, SCX_Kannada, SCX_Unknown, @@ -84040,7 +85944,7 @@ static const SCX_enum _Perl_SCX_invmap[] = { /* for EBCDIC 037 */ SCX_Tibetan, SCX_Unknown, SCX_Myanmar, - SCX_use_AUX_TABLE_21, + SCX_use_AUX_TABLE_22, SCX_Myanmar, SCX_Georgian, SCX_Unknown, @@ -84049,9 +85953,9 @@ static const SCX_enum _Perl_SCX_invmap[] = { /* for EBCDIC 037 */ SCX_Georgian, SCX_Unknown, SCX_Georgian, - SCX_use_AUX_TABLE_22, - SCX_Georgian, SCX_use_AUX_TABLE_23, + SCX_Georgian, + SCX_use_AUX_TABLE_24, SCX_Ethiopic, SCX_Unknown, SCX_Ethiopic, @@ -84102,9 +86006,8 @@ static const SCX_enum _Perl_SCX_invmap[] = { /* for EBCDIC 037 */ SCX_Tagalog, SCX_Unknown, SCX_Tagalog, - SCX_Unknown, SCX_Hanunoo, - SCX_use_AUX_TABLE_24, + SCX_use_AUX_TABLE_25, SCX_Unknown, SCX_Buhid, SCX_Unknown, @@ -84121,11 +86024,9 @@ static const SCX_enum _Perl_SCX_invmap[] = { /* for EBCDIC 037 */ SCX_Khmer, SCX_Unknown, SCX_Mongolian, - SCX_use_AUX_TABLE_25, - SCX_Mongolian, - SCX_use_AUX_TABLE_25, + SCX_use_AUX_TABLE_26, SCX_Mongolian, - SCX_Unknown, + SCX_use_AUX_TABLE_26, SCX_Mongolian, SCX_Unknown, SCX_Mongolian, @@ -84191,33 +86092,33 @@ static const SCX_enum _Perl_SCX_invmap[] = { /* for EBCDIC 037 */ SCX_Georgian, SCX_Sundanese, SCX_Unknown, - SCX_use_AUX_TABLE_26, - SCX_Devanagari, - SCX_use_AUX_TABLE_26, SCX_use_AUX_TABLE_27, SCX_Devanagari, + SCX_use_AUX_TABLE_27, SCX_use_AUX_TABLE_28, + SCX_Devanagari, SCX_use_AUX_TABLE_29, - SCX_use_AUX_TABLE_28, + SCX_use_AUX_TABLE_30, SCX_use_AUX_TABLE_29, SCX_use_AUX_TABLE_30, + SCX_use_AUX_TABLE_31, SCX_Devanagari, - SCX_use_AUX_TABLE_29, + SCX_use_AUX_TABLE_30, SCX_Devanagari, + SCX_use_AUX_TABLE_30, SCX_use_AUX_TABLE_29, - SCX_use_AUX_TABLE_28, SCX_Devanagari, - SCX_use_AUX_TABLE_31, - SCX_use_AUX_TABLE_28, + SCX_use_AUX_TABLE_32, + SCX_use_AUX_TABLE_29, SCX_Devanagari, - SCX_use_AUX_TABLE_28, + SCX_use_AUX_TABLE_29, SCX_Devanagari, - SCX_use_AUX_TABLE_32, - SCX_use_AUX_TABLE_27, SCX_use_AUX_TABLE_33, SCX_use_AUX_TABLE_28, + SCX_use_AUX_TABLE_34, + SCX_use_AUX_TABLE_29, SCX_Bengali, - SCX_use_AUX_TABLE_27, + SCX_use_AUX_TABLE_28, SCX_Nandinagari, SCX_Unknown, SCX_Latin, @@ -84232,9 +86133,9 @@ static const SCX_enum _Perl_SCX_invmap[] = { /* for EBCDIC 037 */ SCX_Latin, SCX_Greek, SCX_Inherited, - SCX_use_AUX_TABLE_34, + SCX_use_AUX_TABLE_35, SCX_Inherited, - SCX_Unknown, + SCX_Syriac, SCX_Inherited, SCX_Latin, SCX_Greek, @@ -84272,7 +86173,7 @@ static const SCX_enum _Perl_SCX_invmap[] = { /* for EBCDIC 037 */ SCX_Common, SCX_Inherited, SCX_Common, - SCX_use_AUX_TABLE_35, + SCX_use_AUX_TABLE_36, SCX_Common, SCX_Unknown, SCX_Common, @@ -84287,7 +86188,7 @@ static const SCX_enum _Perl_SCX_invmap[] = { /* for EBCDIC 037 */ SCX_Common, SCX_Unknown, SCX_Inherited, - SCX_use_AUX_TABLE_36, + SCX_use_AUX_TABLE_37, SCX_Unknown, SCX_Common, SCX_Greek, @@ -84313,9 +86214,6 @@ static const SCX_enum _Perl_SCX_invmap[] = { /* for EBCDIC 037 */ SCX_Unknown, SCX_Common, SCX_Glagolitic, - SCX_Unknown, - SCX_Glagolitic, - SCX_Unknown, SCX_Latin, SCX_Coptic, SCX_Unknown, @@ -84354,78 +86252,77 @@ static const SCX_enum _Perl_SCX_invmap[] = { /* for EBCDIC 037 */ SCX_use_AUX_TABLE_3, SCX_Common, SCX_Unknown, - SCX_use_AUX_TABLE_37, + SCX_use_AUX_TABLE_38, SCX_Unknown, - SCX_use_AUX_TABLE_37, + SCX_use_AUX_TABLE_38, SCX_Unknown, - SCX_use_AUX_TABLE_37, + SCX_use_AUX_TABLE_38, SCX_Unknown, SCX_Common, SCX_Unknown, SCX_Common, - SCX_use_AUX_TABLE_38, SCX_use_AUX_TABLE_39, + SCX_use_AUX_TABLE_40, SCX_Common, - SCX_use_AUX_TABLE_37, - SCX_use_AUX_TABLE_38, - SCX_Common, - SCX_use_AUX_TABLE_39, SCX_use_AUX_TABLE_38, SCX_use_AUX_TABLE_39, SCX_Common, - SCX_use_AUX_TABLE_37, SCX_use_AUX_TABLE_40, - SCX_use_AUX_TABLE_23, SCX_use_AUX_TABLE_39, - SCX_use_AUX_TABLE_41, + SCX_use_AUX_TABLE_40, SCX_Common, - SCX_use_AUX_TABLE_39, - SCX_use_AUX_TABLE_37, + SCX_use_AUX_TABLE_38, + SCX_use_AUX_TABLE_41, + SCX_use_AUX_TABLE_24, + SCX_use_AUX_TABLE_40, SCX_use_AUX_TABLE_42, - SCX_use_AUX_TABLE_37, - SCX_Unknown, + SCX_Common, + SCX_use_AUX_TABLE_40, + SCX_use_AUX_TABLE_38, SCX_use_AUX_TABLE_43, + SCX_use_AUX_TABLE_38, SCX_Unknown, - SCX_use_AUX_TABLE_41, - SCX_use_AUX_TABLE_43, - SCX_use_AUX_TABLE_41, SCX_use_AUX_TABLE_44, - SCX_use_AUX_TABLE_38, - SCX_use_AUX_TABLE_41, + SCX_Unknown, + SCX_use_AUX_TABLE_42, SCX_use_AUX_TABLE_44, + SCX_use_AUX_TABLE_42, + SCX_use_AUX_TABLE_45, + SCX_use_AUX_TABLE_39, + SCX_use_AUX_TABLE_42, + SCX_use_AUX_TABLE_45, SCX_Unknown, SCX_use_AUX_TABLE_1, SCX_Unknown, - SCX_use_AUX_TABLE_23, + SCX_use_AUX_TABLE_24, SCX_Unknown, - SCX_use_AUX_TABLE_37, + SCX_use_AUX_TABLE_38, SCX_use_AUX_TABLE_1, - SCX_use_AUX_TABLE_37, + SCX_use_AUX_TABLE_38, SCX_Unknown, - SCX_use_AUX_TABLE_44, - SCX_use_AUX_TABLE_23, + SCX_use_AUX_TABLE_45, + SCX_use_AUX_TABLE_24, SCX_Unknown, - SCX_use_AUX_TABLE_37, + SCX_use_AUX_TABLE_38, SCX_Common, - SCX_use_AUX_TABLE_23, + SCX_use_AUX_TABLE_24, SCX_Common, - SCX_use_AUX_TABLE_37, + SCX_use_AUX_TABLE_38, SCX_Common, - SCX_use_AUX_TABLE_37, + SCX_use_AUX_TABLE_38, SCX_Common, - SCX_use_AUX_TABLE_44, - SCX_use_AUX_TABLE_37, - SCX_use_AUX_TABLE_44, - SCX_use_AUX_TABLE_37, + SCX_use_AUX_TABLE_45, + SCX_use_AUX_TABLE_38, + SCX_use_AUX_TABLE_45, + SCX_use_AUX_TABLE_38, SCX_Common, - SCX_use_AUX_TABLE_37, + SCX_use_AUX_TABLE_38, SCX_Common, - SCX_use_AUX_TABLE_37, + SCX_use_AUX_TABLE_38, SCX_Common, - SCX_use_AUX_TABLE_37, + SCX_use_AUX_TABLE_38, SCX_Common, - SCX_use_AUX_TABLE_37, - SCX_Unknown, + SCX_use_AUX_TABLE_38, SCX_Yi, SCX_Unknown, SCX_Yi, @@ -84438,7 +86335,7 @@ static const SCX_enum _Perl_SCX_invmap[] = { /* for EBCDIC 037 */ SCX_Cyrillic, SCX_Bamum, SCX_Unknown, - SCX_use_AUX_TABLE_45, + SCX_use_AUX_TABLE_46, SCX_Common, SCX_Latin, SCX_Common, @@ -84447,11 +86344,15 @@ static const SCX_enum _Perl_SCX_invmap[] = { /* for EBCDIC 037 */ SCX_Latin, SCX_Unknown, SCX_Latin, + SCX_Unknown, + SCX_Latin, + SCX_Unknown, + SCX_Latin, SCX_Syloti_Nagri, SCX_Unknown, - SCX_use_AUX_TABLE_46, SCX_use_AUX_TABLE_47, SCX_use_AUX_TABLE_48, + SCX_use_AUX_TABLE_49, SCX_Unknown, SCX_Phags_Pa, SCX_Unknown, @@ -84460,21 +86361,21 @@ static const SCX_enum _Perl_SCX_invmap[] = { /* for EBCDIC 037 */ SCX_Saurashtra, SCX_Unknown, SCX_Devanagari, - SCX_use_AUX_TABLE_28, + SCX_use_AUX_TABLE_29, SCX_Devanagari, - SCX_use_AUX_TABLE_49, + SCX_use_AUX_TABLE_50, SCX_Devanagari, SCX_Kayah_Li, - SCX_use_AUX_TABLE_50, + SCX_use_AUX_TABLE_51, SCX_Kayah_Li, SCX_Rejang, SCX_Unknown, SCX_Rejang, - SCX_use_AUX_TABLE_23, + SCX_use_AUX_TABLE_24, SCX_Unknown, SCX_Javanese, SCX_Unknown, - SCX_use_AUX_TABLE_51, + SCX_use_AUX_TABLE_52, SCX_Javanese, SCX_Unknown, SCX_Javanese, @@ -84515,15 +86416,15 @@ static const SCX_enum _Perl_SCX_invmap[] = { /* for EBCDIC 037 */ SCX_Unknown, SCX_Meetei_Mayek, SCX_Unknown, - SCX_use_AUX_TABLE_23, + SCX_use_AUX_TABLE_24, SCX_Unknown, - SCX_use_AUX_TABLE_23, + SCX_use_AUX_TABLE_24, SCX_Unknown, - SCX_use_AUX_TABLE_23, + SCX_use_AUX_TABLE_24, SCX_Unknown, - SCX_use_AUX_TABLE_37, + SCX_use_AUX_TABLE_38, SCX_Unknown, - SCX_use_AUX_TABLE_37, + SCX_use_AUX_TABLE_38, SCX_Unknown, SCX_Latin, SCX_Unknown, @@ -84543,24 +86444,25 @@ static const SCX_enum _Perl_SCX_invmap[] = { /* for EBCDIC 037 */ SCX_Arabic, SCX_Unknown, SCX_Arabic, - SCX_Common, + SCX_use_AUX_TABLE_53, + SCX_Arabic, SCX_Unknown, SCX_Arabic, SCX_Unknown, SCX_Arabic, SCX_Unknown, SCX_Arabic, - SCX_use_AUX_TABLE_52, + SCX_use_AUX_TABLE_54, + SCX_Arabic, + SCX_use_AUX_TABLE_54, SCX_Arabic, - SCX_use_AUX_TABLE_52, - SCX_Unknown, SCX_Inherited, SCX_Common, SCX_Unknown, SCX_Inherited, SCX_Cyrillic, SCX_Common, - SCX_use_AUX_TABLE_39, + SCX_use_AUX_TABLE_40, SCX_Common, SCX_Unknown, SCX_Common, @@ -84578,20 +86480,20 @@ static const SCX_enum _Perl_SCX_invmap[] = { /* for EBCDIC 037 */ SCX_Common, SCX_Latin, SCX_Common, - SCX_use_AUX_TABLE_38, - SCX_use_AUX_TABLE_44, - SCX_use_AUX_TABLE_41, - SCX_use_AUX_TABLE_44, - SCX_use_AUX_TABLE_41, - SCX_use_AUX_TABLE_23, + SCX_use_AUX_TABLE_39, + SCX_use_AUX_TABLE_45, + SCX_use_AUX_TABLE_42, + SCX_use_AUX_TABLE_45, + SCX_use_AUX_TABLE_42, + SCX_use_AUX_TABLE_24, SCX_Unknown, - SCX_use_AUX_TABLE_23, + SCX_use_AUX_TABLE_24, SCX_Unknown, - SCX_use_AUX_TABLE_23, + SCX_use_AUX_TABLE_24, SCX_Unknown, - SCX_use_AUX_TABLE_23, + SCX_use_AUX_TABLE_24, SCX_Unknown, - SCX_use_AUX_TABLE_23, + SCX_use_AUX_TABLE_24, SCX_Unknown, SCX_Common, SCX_Unknown, @@ -84613,11 +86515,12 @@ static const SCX_enum _Perl_SCX_invmap[] = { /* for EBCDIC 037 */ SCX_Unknown, SCX_Linear_B, SCX_Unknown, - SCX_use_AUX_TABLE_53, + SCX_use_AUX_TABLE_55, + SCX_use_AUX_TABLE_56, SCX_Unknown, - SCX_use_AUX_TABLE_54, + SCX_use_AUX_TABLE_57, SCX_Unknown, - SCX_use_AUX_TABLE_53, + SCX_use_AUX_TABLE_56, SCX_Greek, SCX_Unknown, SCX_Common, @@ -84631,7 +86534,7 @@ static const SCX_enum _Perl_SCX_invmap[] = { /* for EBCDIC 037 */ SCX_Unknown, SCX_Carian, SCX_Unknown, - SCX_use_AUX_TABLE_55, + SCX_use_AUX_TABLE_58, SCX_Unknown, SCX_Old_Italic, SCX_Unknown, @@ -84662,6 +86565,21 @@ static const SCX_enum _Perl_SCX_invmap[] = { /* for EBCDIC 037 */ SCX_Caucasian_Albanian, SCX_Unknown, SCX_Caucasian_Albanian, + SCX_Vithkuqi, + SCX_Unknown, + SCX_Vithkuqi, + SCX_Unknown, + SCX_Vithkuqi, + SCX_Unknown, + SCX_Vithkuqi, + SCX_Unknown, + SCX_Vithkuqi, + SCX_Unknown, + SCX_Vithkuqi, + SCX_Unknown, + SCX_Vithkuqi, + SCX_Unknown, + SCX_Vithkuqi, SCX_Unknown, SCX_Linear_A, SCX_Unknown, @@ -84669,6 +86587,12 @@ static const SCX_enum _Perl_SCX_invmap[] = { /* for EBCDIC 037 */ SCX_Unknown, SCX_Linear_A, SCX_Unknown, + SCX_Latin, + SCX_Unknown, + SCX_Latin, + SCX_Unknown, + SCX_Latin, + SCX_Unknown, SCX_Cypriot, SCX_Unknown, SCX_Cypriot, @@ -84728,6 +86652,8 @@ static const SCX_enum _Perl_SCX_invmap[] = { /* for EBCDIC 037 */ SCX_Manichaean, SCX_Unknown, SCX_Manichaean, + SCX_use_AUX_TABLE_59, + SCX_Manichaean, SCX_Unknown, SCX_Avestan, SCX_Unknown, @@ -84767,6 +86693,8 @@ static const SCX_enum _Perl_SCX_invmap[] = { /* for EBCDIC 037 */ SCX_Unknown, SCX_Sogdian, SCX_Unknown, + SCX_Old_Uyghur, + SCX_Unknown, SCX_Chorasmian, SCX_Unknown, SCX_Elymaic, @@ -84813,9 +86741,9 @@ static const SCX_enum _Perl_SCX_invmap[] = { /* for EBCDIC 037 */ SCX_Khudawadi, SCX_Unknown, SCX_Grantha, - SCX_use_AUX_TABLE_19, + SCX_use_AUX_TABLE_20, SCX_Grantha, - SCX_use_AUX_TABLE_19, + SCX_use_AUX_TABLE_20, SCX_Unknown, SCX_Grantha, SCX_Unknown, @@ -84829,7 +86757,7 @@ static const SCX_enum _Perl_SCX_invmap[] = { /* for EBCDIC 037 */ SCX_Unknown, SCX_Grantha, SCX_Unknown, - SCX_use_AUX_TABLE_19, + SCX_use_AUX_TABLE_20, SCX_Grantha, SCX_Unknown, SCX_Grantha, @@ -84905,6 +86833,7 @@ static const SCX_enum _Perl_SCX_invmap[] = { /* for EBCDIC 037 */ SCX_Unknown, SCX_Soyombo, SCX_Unknown, + SCX_Canadian_Aboriginal, SCX_Pau_Cin_Hau, SCX_Unknown, SCX_Bhaiksuki, @@ -84952,9 +86881,9 @@ static const SCX_enum _Perl_SCX_invmap[] = { /* for EBCDIC 037 */ SCX_Lisu, SCX_Unknown, SCX_Tamil, - SCX_use_AUX_TABLE_19, + SCX_use_AUX_TABLE_20, SCX_Tamil, - SCX_use_AUX_TABLE_19, + SCX_use_AUX_TABLE_20, SCX_Tamil, SCX_Unknown, SCX_Tamil, @@ -84966,6 +86895,8 @@ static const SCX_enum _Perl_SCX_invmap[] = { /* for EBCDIC 037 */ SCX_Unknown, SCX_Cuneiform, SCX_Unknown, + SCX_Cypro_Minoan, + SCX_Unknown, SCX_Egyptian_Hieroglyphs, SCX_Unknown, SCX_Egyptian_Hieroglyphs, @@ -84979,6 +86910,9 @@ static const SCX_enum _Perl_SCX_invmap[] = { /* for EBCDIC 037 */ SCX_Mro, SCX_Unknown, SCX_Mro, + SCX_Tangsa, + SCX_Unknown, + SCX_Tangsa, SCX_Unknown, SCX_Bassa_Vah, SCX_Unknown, @@ -85004,10 +86938,10 @@ static const SCX_enum _Perl_SCX_invmap[] = { /* for EBCDIC 037 */ SCX_Unknown, SCX_Tangut, SCX_Nushu, - SCX_Common, + SCX_use_AUX_TABLE_38, SCX_Khitan_Small_Script, SCX_Unknown, - SCX_use_AUX_TABLE_37, + SCX_use_AUX_TABLE_38, SCX_Unknown, SCX_Tangut, SCX_Unknown, @@ -85016,13 +86950,20 @@ static const SCX_enum _Perl_SCX_invmap[] = { /* for EBCDIC 037 */ SCX_Unknown, SCX_Tangut, SCX_Unknown, - SCX_use_AUX_TABLE_44, - SCX_use_AUX_TABLE_43, + SCX_use_AUX_TABLE_45, SCX_Unknown, - SCX_use_AUX_TABLE_43, + SCX_use_AUX_TABLE_45, + SCX_Unknown, + SCX_use_AUX_TABLE_45, + SCX_Unknown, + SCX_use_AUX_TABLE_45, + SCX_use_AUX_TABLE_44, + SCX_use_AUX_TABLE_45, SCX_Unknown, SCX_use_AUX_TABLE_44, SCX_Unknown, + SCX_use_AUX_TABLE_45, + SCX_Unknown, SCX_Nushu, SCX_Unknown, SCX_Duployan, @@ -85035,6 +86976,12 @@ static const SCX_enum _Perl_SCX_invmap[] = { /* for EBCDIC 037 */ SCX_Unknown, SCX_Duployan, SCX_Unknown, + SCX_Inherited, + SCX_Unknown, + SCX_Inherited, + SCX_Unknown, + SCX_Common, + SCX_Unknown, SCX_Common, SCX_Unknown, SCX_Common, @@ -85055,7 +87002,7 @@ static const SCX_enum _Perl_SCX_invmap[] = { /* for EBCDIC 037 */ SCX_Unknown, SCX_Common, SCX_Unknown, - SCX_use_AUX_TABLE_37, + SCX_use_AUX_TABLE_38, SCX_Common, SCX_Unknown, SCX_Common, @@ -85105,6 +87052,8 @@ static const SCX_enum _Perl_SCX_invmap[] = { /* for EBCDIC 037 */ SCX_Unknown, SCX_SignWriting, SCX_Unknown, + SCX_Latin, + SCX_Unknown, SCX_Glagolitic, SCX_Unknown, SCX_Glagolitic, @@ -85123,10 +87072,20 @@ static const SCX_enum _Perl_SCX_invmap[] = { /* for EBCDIC 037 */ SCX_Unknown, SCX_Nyiakeng_Puachue_Hmong, SCX_Unknown, + SCX_Toto, + SCX_Unknown, SCX_Wancho, SCX_Unknown, SCX_Wancho, SCX_Unknown, + SCX_Ethiopic, + SCX_Unknown, + SCX_Ethiopic, + SCX_Unknown, + SCX_Ethiopic, + SCX_Unknown, + SCX_Ethiopic, + SCX_Unknown, SCX_Mende_Kikakui, SCX_Unknown, SCX_Mende_Kikakui, @@ -85224,14 +87183,14 @@ static const SCX_enum _Perl_SCX_invmap[] = { /* for EBCDIC 037 */ SCX_Common, SCX_Unknown, SCX_Common, - SCX_use_AUX_TABLE_43, + SCX_use_AUX_TABLE_44, SCX_Common, SCX_Unknown, SCX_Common, SCX_Unknown, SCX_Common, SCX_Unknown, - SCX_use_AUX_TABLE_37, + SCX_use_AUX_TABLE_38, SCX_Unknown, SCX_Common, SCX_Unknown, @@ -85287,19 +87246,21 @@ static const SCX_enum _Perl_SCX_invmap[] = { /* for EBCDIC 037 */ SCX_Unknown, SCX_Common, SCX_Unknown, - SCX_use_AUX_TABLE_37, + SCX_Common, SCX_Unknown, - SCX_use_AUX_TABLE_37, + SCX_use_AUX_TABLE_38, SCX_Unknown, - SCX_use_AUX_TABLE_37, + SCX_use_AUX_TABLE_38, SCX_Unknown, - SCX_use_AUX_TABLE_37, + SCX_use_AUX_TABLE_38, SCX_Unknown, - SCX_use_AUX_TABLE_37, + SCX_use_AUX_TABLE_38, SCX_Unknown, - SCX_use_AUX_TABLE_37, + SCX_use_AUX_TABLE_38, SCX_Unknown, - SCX_use_AUX_TABLE_37, + SCX_use_AUX_TABLE_38, + SCX_Unknown, + SCX_use_AUX_TABLE_38, SCX_Unknown, SCX_Common, SCX_Unknown, @@ -85318,7 +87279,7 @@ static const SCX_enum _Perl_SCX_invmap[] = { /* for EBCDIC 037 */ # if 'A' == 65 /* ASCII/Latin1 */ static const UV _Perl_WB_invlist[] = { /* for ASCII/Latin1 */ - 1884, /* Number of elements */ + 1949, /* Number of elements */ 148565664, /* Version and data structure type */ 0, /* 0 if the list starts at 0; 1 if it starts at the element beyond 0 */ @@ -85490,11 +87451,15 @@ static const UV _Perl_WB_invlist[] = { /* for ASCII/Latin1 */ 0x85C, 0x860, 0x86B, + 0x870, + 0x888, + 0x889, + 0x88F, + 0x890, + 0x892, + 0x898, 0x8A0, - 0x8B5, - 0x8B6, - 0x8C8, - 0x8D3, + 0x8CA, 0x8E2, 0x8E3, 0x904, @@ -85688,6 +87653,7 @@ static const UV _Perl_WB_invlist[] = { /* for ASCII/Latin1 */ 0xC29, 0xC2A, 0xC3A, + 0xC3C, 0xC3D, 0xC3E, 0xC45, @@ -85699,6 +87665,8 @@ static const UV _Perl_WB_invlist[] = { /* for ASCII/Latin1 */ 0xC57, 0xC58, 0xC5B, + 0xC5D, + 0xC5E, 0xC60, 0xC62, 0xC64, @@ -85727,7 +87695,7 @@ static const UV _Perl_WB_invlist[] = { /* for ASCII/Latin1 */ 0xCCE, 0xCD5, 0xCD7, - 0xCDE, + 0xCDD, 0xCDF, 0xCE0, 0xCE2, @@ -85907,11 +87875,9 @@ static const UV _Perl_WB_invlist[] = { /* for ASCII/Latin1 */ 0x16EE, 0x16F9, 0x1700, - 0x170D, - 0x170E, 0x1712, - 0x1715, - 0x1720, + 0x1716, + 0x171F, 0x1732, 0x1735, 0x1740, @@ -85967,12 +87933,12 @@ static const UV _Perl_WB_invlist[] = { /* for ASCII/Latin1 */ 0x1A90, 0x1A9A, 0x1AB0, - 0x1AC1, + 0x1ACF, 0x1B00, 0x1B05, 0x1B34, 0x1B45, - 0x1B4C, + 0x1B4D, 0x1B50, 0x1B5A, 0x1B6B, @@ -86013,8 +87979,6 @@ static const UV _Perl_WB_invlist[] = { /* for ASCII/Latin1 */ 0x1CFB, 0x1D00, 0x1DC0, - 0x1DFA, - 0x1DFB, 0x1E00, 0x1F16, 0x1F18, @@ -86205,10 +88169,6 @@ static const UV _Perl_WB_invlist[] = { /* for ASCII/Latin1 */ 0x2B55, 0x2B56, 0x2C00, - 0x2C2F, - 0x2C30, - 0x2C5F, - 0x2C60, 0x2CE5, 0x2CEB, 0x2CEF, @@ -86302,10 +88262,14 @@ static const UV _Perl_WB_invlist[] = { /* for ASCII/Latin1 */ 0xA6F0, 0xA6F2, 0xA708, - 0xA7C0, - 0xA7C2, 0xA7CB, - 0xA7F5, + 0xA7D0, + 0xA7D2, + 0xA7D3, + 0xA7D4, + 0xA7D5, + 0xA7DA, + 0xA7F2, 0xA802, 0xA803, 0xA806, @@ -86538,12 +88502,34 @@ static const UV _Perl_WB_invlist[] = { /* for ASCII/Latin1 */ 0x10528, 0x10530, 0x10564, + 0x10570, + 0x1057B, + 0x1057C, + 0x1058B, + 0x1058C, + 0x10593, + 0x10594, + 0x10596, + 0x10597, + 0x105A2, + 0x105A3, + 0x105B2, + 0x105B3, + 0x105BA, + 0x105BB, + 0x105BD, 0x10600, 0x10737, 0x10740, 0x10756, 0x10760, 0x10768, + 0x10780, + 0x10786, + 0x10787, + 0x107B1, + 0x107B2, + 0x107BB, 0x10800, 0x10806, 0x10808, @@ -86629,6 +88615,9 @@ static const UV _Perl_WB_invlist[] = { /* for ASCII/Latin1 */ 0x10F30, 0x10F46, 0x10F51, + 0x10F70, + 0x10F82, + 0x10F86, 0x10FB0, 0x10FC5, 0x10FE0, @@ -86639,12 +88628,18 @@ static const UV _Perl_WB_invlist[] = { /* for ASCII/Latin1 */ 0x11047, 0x11066, 0x11070, + 0x11071, + 0x11073, + 0x11075, + 0x11076, 0x1107F, 0x11083, 0x110B0, 0x110BB, 0x110BD, 0x110BE, + 0x110C2, + 0x110C3, 0x110CD, 0x110CE, 0x110D0, @@ -86830,7 +88825,7 @@ static const UV _Perl_WB_invlist[] = { /* for ASCII/Latin1 */ 0x11A9A, 0x11A9D, 0x11A9E, - 0x11AC0, + 0x11AB0, 0x11AF9, 0x11C00, 0x11C09, @@ -86890,6 +88885,8 @@ static const UV _Perl_WB_invlist[] = { /* for ASCII/Latin1 */ 0x1246F, 0x12480, 0x12544, + 0x12F90, + 0x12FF1, 0x13000, 0x1342F, 0x13430, @@ -86902,6 +88899,10 @@ static const UV _Perl_WB_invlist[] = { /* for ASCII/Latin1 */ 0x16A5F, 0x16A60, 0x16A6A, + 0x16A70, + 0x16ABF, + 0x16AC0, + 0x16ACA, 0x16AD0, 0x16AEE, 0x16AF0, @@ -86935,8 +88936,16 @@ static const UV _Perl_WB_invlist[] = { /* for ASCII/Latin1 */ 0x16FE5, 0x16FF0, 0x16FF2, + 0x1AFF0, + 0x1AFF4, + 0x1AFF5, + 0x1AFFC, + 0x1AFFD, + 0x1AFFF, 0x1B000, 0x1B001, + 0x1B120, + 0x1B123, 0x1B164, 0x1B168, 0x1BC00, @@ -86951,6 +88960,10 @@ static const UV _Perl_WB_invlist[] = { /* for ASCII/Latin1 */ 0x1BC9F, 0x1BCA0, 0x1BCA4, + 0x1CF00, + 0x1CF2E, + 0x1CF30, + 0x1CF47, 0x1D165, 0x1D16A, 0x1D16D, @@ -87037,6 +89050,8 @@ static const UV _Perl_WB_invlist[] = { /* for ASCII/Latin1 */ 0x1DAA0, 0x1DAA1, 0x1DAB0, + 0x1DF00, + 0x1DF1F, 0x1E000, 0x1E007, 0x1E008, @@ -87056,10 +89071,21 @@ static const UV _Perl_WB_invlist[] = { /* for ASCII/Latin1 */ 0x1E14A, 0x1E14E, 0x1E14F, + 0x1E290, + 0x1E2AE, + 0x1E2AF, 0x1E2C0, 0x1E2EC, 0x1E2F0, 0x1E2FA, + 0x1E7E0, + 0x1E7E7, + 0x1E7E8, + 0x1E7EC, + 0x1E7ED, + 0x1E7EF, + 0x1E7F0, + 0x1E7FF, 0x1E800, 0x1E8C5, 0x1E8D0, @@ -87419,6 +89445,10 @@ static const WB_enum _Perl_WB_invmap[] = { /* for ASCII/Latin1 */ WB_Other, WB_ALetter, WB_Other, + WB_Format, + WB_Other, + WB_Extend, + WB_ALetter, WB_Extend, WB_Format, WB_Extend, @@ -87613,6 +89643,7 @@ static const WB_enum _Perl_WB_invmap[] = { /* for ASCII/Latin1 */ WB_Other, WB_ALetter, WB_Other, + WB_Extend, WB_ALetter, WB_Extend, WB_Other, @@ -87625,6 +89656,8 @@ static const WB_enum _Perl_WB_invmap[] = { /* for ASCII/Latin1 */ WB_ALetter, WB_Other, WB_ALetter, + WB_Other, + WB_ALetter, WB_Extend, WB_Other, WB_Numeric, @@ -87832,8 +89865,6 @@ static const WB_enum _Perl_WB_invmap[] = { /* for ASCII/Latin1 */ WB_ALetter, WB_Other, WB_ALetter, - WB_Other, - WB_ALetter, WB_Extend, WB_Other, WB_ALetter, @@ -87856,7 +89887,7 @@ static const WB_enum _Perl_WB_invmap[] = { /* for ASCII/Latin1 */ WB_Other, WB_Extend, WB_Format, - WB_Other, + WB_Extend, WB_Numeric, WB_Other, WB_ALetter, @@ -87938,8 +89969,6 @@ static const WB_enum _Perl_WB_invmap[] = { /* for ASCII/Latin1 */ WB_Other, WB_ALetter, WB_Extend, - WB_Other, - WB_Extend, WB_ALetter, WB_Other, WB_ALetter, @@ -88132,10 +90161,6 @@ static const WB_enum _Perl_WB_invmap[] = { /* for ASCII/Latin1 */ WB_ALetter, WB_Other, WB_ALetter, - WB_Other, - WB_ALetter, - WB_Other, - WB_ALetter, WB_Extend, WB_ALetter, WB_Other, @@ -88231,6 +90256,10 @@ static const WB_enum _Perl_WB_invmap[] = { /* for ASCII/Latin1 */ WB_ALetter, WB_Other, WB_ALetter, + WB_Other, + WB_ALetter, + WB_Other, + WB_ALetter, WB_Extend, WB_ALetter, WB_Extend, @@ -88498,6 +90527,28 @@ static const WB_enum _Perl_WB_invmap[] = { /* for ASCII/Latin1 */ WB_ALetter, WB_Other, WB_ALetter, + WB_Other, + WB_ALetter, + WB_Other, + WB_ALetter, + WB_Other, + WB_ALetter, + WB_Other, + WB_ALetter, + WB_Other, + WB_ALetter, + WB_Other, + WB_ALetter, + WB_Other, + WB_ALetter, + WB_Other, + WB_ALetter, + WB_Other, + WB_ALetter, + WB_Other, + WB_ALetter, + WB_Other, + WB_ALetter, WB_Extend, WB_Other, WB_Extend, @@ -88555,6 +90606,9 @@ static const WB_enum _Perl_WB_invmap[] = { /* for ASCII/Latin1 */ WB_Extend, WB_Other, WB_ALetter, + WB_Extend, + WB_Other, + WB_ALetter, WB_Other, WB_ALetter, WB_Other, @@ -88563,6 +90617,10 @@ static const WB_enum _Perl_WB_invmap[] = { /* for ASCII/Latin1 */ WB_Extend, WB_Other, WB_Numeric, + WB_Extend, + WB_ALetter, + WB_Extend, + WB_ALetter, WB_Other, WB_Extend, WB_ALetter, @@ -88570,6 +90628,8 @@ static const WB_enum _Perl_WB_invmap[] = { /* for ASCII/Latin1 */ WB_Other, WB_Format, WB_Other, + WB_Extend, + WB_Other, WB_Format, WB_Other, WB_ALetter, @@ -88817,6 +90877,8 @@ static const WB_enum _Perl_WB_invmap[] = { /* for ASCII/Latin1 */ WB_Other, WB_ALetter, WB_Other, + WB_ALetter, + WB_Other, WB_Format, WB_Other, WB_ALetter, @@ -88829,6 +90891,10 @@ static const WB_enum _Perl_WB_invmap[] = { /* for ASCII/Latin1 */ WB_Other, WB_ALetter, WB_Other, + WB_Numeric, + WB_Other, + WB_ALetter, + WB_Other, WB_Extend, WB_Other, WB_ALetter, @@ -88864,6 +90930,14 @@ static const WB_enum _Perl_WB_invmap[] = { /* for ASCII/Latin1 */ WB_Other, WB_Katakana, WB_Other, + WB_Katakana, + WB_Other, + WB_Katakana, + WB_Other, + WB_Katakana, + WB_Other, + WB_Katakana, + WB_Other, WB_ALetter, WB_Other, WB_ALetter, @@ -88879,6 +90953,10 @@ static const WB_enum _Perl_WB_invmap[] = { /* for ASCII/Latin1 */ WB_Extend, WB_Other, WB_Extend, + WB_Other, + WB_Extend, + WB_Other, + WB_Extend, WB_Format, WB_Extend, WB_Other, @@ -88962,6 +91040,8 @@ static const WB_enum _Perl_WB_invmap[] = { /* for ASCII/Latin1 */ WB_Other, WB_Extend, WB_Other, + WB_ALetter, + WB_Other, WB_Extend, WB_Other, WB_Extend, @@ -88983,10 +91063,21 @@ static const WB_enum _Perl_WB_invmap[] = { /* for ASCII/Latin1 */ WB_Other, WB_ALetter, WB_Extend, + WB_Other, + WB_ALetter, + WB_Extend, WB_Numeric, WB_Other, WB_ALetter, WB_Other, + WB_ALetter, + WB_Other, + WB_ALetter, + WB_Other, + WB_ALetter, + WB_Other, + WB_ALetter, + WB_Other, WB_Extend, WB_Other, WB_ALetter, @@ -89145,7 +91236,7 @@ static const WB_enum _Perl_WB_invmap[] = { /* for ASCII/Latin1 */ && '$' == 91 && '@' == 124 && '`' == 121 && '\n' == 21 static const UV _Perl_WB_invlist[] = { /* for EBCDIC 1047 */ - 1907, /* Number of elements */ + 1972, /* Number of elements */ 148565664, /* Version and data structure type */ 0, /* 0 if the list starts at 0; 1 if it starts at the element beyond 0 */ @@ -89340,11 +91431,15 @@ static const UV _Perl_WB_invlist[] = { /* for EBCDIC 1047 */ 0x85C, 0x860, 0x86B, + 0x870, + 0x888, + 0x889, + 0x88F, + 0x890, + 0x892, + 0x898, 0x8A0, - 0x8B5, - 0x8B6, - 0x8C8, - 0x8D3, + 0x8CA, 0x8E2, 0x8E3, 0x904, @@ -89538,6 +91633,7 @@ static const UV _Perl_WB_invlist[] = { /* for EBCDIC 1047 */ 0xC29, 0xC2A, 0xC3A, + 0xC3C, 0xC3D, 0xC3E, 0xC45, @@ -89549,6 +91645,8 @@ static const UV _Perl_WB_invlist[] = { /* for EBCDIC 1047 */ 0xC57, 0xC58, 0xC5B, + 0xC5D, + 0xC5E, 0xC60, 0xC62, 0xC64, @@ -89577,7 +91675,7 @@ static const UV _Perl_WB_invlist[] = { /* for EBCDIC 1047 */ 0xCCE, 0xCD5, 0xCD7, - 0xCDE, + 0xCDD, 0xCDF, 0xCE0, 0xCE2, @@ -89757,11 +91855,9 @@ static const UV _Perl_WB_invlist[] = { /* for EBCDIC 1047 */ 0x16EE, 0x16F9, 0x1700, - 0x170D, - 0x170E, 0x1712, - 0x1715, - 0x1720, + 0x1716, + 0x171F, 0x1732, 0x1735, 0x1740, @@ -89817,12 +91913,12 @@ static const UV _Perl_WB_invlist[] = { /* for EBCDIC 1047 */ 0x1A90, 0x1A9A, 0x1AB0, - 0x1AC1, + 0x1ACF, 0x1B00, 0x1B05, 0x1B34, 0x1B45, - 0x1B4C, + 0x1B4D, 0x1B50, 0x1B5A, 0x1B6B, @@ -89863,8 +91959,6 @@ static const UV _Perl_WB_invlist[] = { /* for EBCDIC 1047 */ 0x1CFB, 0x1D00, 0x1DC0, - 0x1DFA, - 0x1DFB, 0x1E00, 0x1F16, 0x1F18, @@ -90055,10 +92149,6 @@ static const UV _Perl_WB_invlist[] = { /* for EBCDIC 1047 */ 0x2B55, 0x2B56, 0x2C00, - 0x2C2F, - 0x2C30, - 0x2C5F, - 0x2C60, 0x2CE5, 0x2CEB, 0x2CEF, @@ -90152,10 +92242,14 @@ static const UV _Perl_WB_invlist[] = { /* for EBCDIC 1047 */ 0xA6F0, 0xA6F2, 0xA708, - 0xA7C0, - 0xA7C2, 0xA7CB, - 0xA7F5, + 0xA7D0, + 0xA7D2, + 0xA7D3, + 0xA7D4, + 0xA7D5, + 0xA7DA, + 0xA7F2, 0xA802, 0xA803, 0xA806, @@ -90388,12 +92482,34 @@ static const UV _Perl_WB_invlist[] = { /* for EBCDIC 1047 */ 0x10528, 0x10530, 0x10564, + 0x10570, + 0x1057B, + 0x1057C, + 0x1058B, + 0x1058C, + 0x10593, + 0x10594, + 0x10596, + 0x10597, + 0x105A2, + 0x105A3, + 0x105B2, + 0x105B3, + 0x105BA, + 0x105BB, + 0x105BD, 0x10600, 0x10737, 0x10740, 0x10756, 0x10760, 0x10768, + 0x10780, + 0x10786, + 0x10787, + 0x107B1, + 0x107B2, + 0x107BB, 0x10800, 0x10806, 0x10808, @@ -90479,6 +92595,9 @@ static const UV _Perl_WB_invlist[] = { /* for EBCDIC 1047 */ 0x10F30, 0x10F46, 0x10F51, + 0x10F70, + 0x10F82, + 0x10F86, 0x10FB0, 0x10FC5, 0x10FE0, @@ -90489,12 +92608,18 @@ static const UV _Perl_WB_invlist[] = { /* for EBCDIC 1047 */ 0x11047, 0x11066, 0x11070, + 0x11071, + 0x11073, + 0x11075, + 0x11076, 0x1107F, 0x11083, 0x110B0, 0x110BB, 0x110BD, 0x110BE, + 0x110C2, + 0x110C3, 0x110CD, 0x110CE, 0x110D0, @@ -90680,7 +92805,7 @@ static const UV _Perl_WB_invlist[] = { /* for EBCDIC 1047 */ 0x11A9A, 0x11A9D, 0x11A9E, - 0x11AC0, + 0x11AB0, 0x11AF9, 0x11C00, 0x11C09, @@ -90740,6 +92865,8 @@ static const UV _Perl_WB_invlist[] = { /* for EBCDIC 1047 */ 0x1246F, 0x12480, 0x12544, + 0x12F90, + 0x12FF1, 0x13000, 0x1342F, 0x13430, @@ -90752,6 +92879,10 @@ static const UV _Perl_WB_invlist[] = { /* for EBCDIC 1047 */ 0x16A5F, 0x16A60, 0x16A6A, + 0x16A70, + 0x16ABF, + 0x16AC0, + 0x16ACA, 0x16AD0, 0x16AEE, 0x16AF0, @@ -90785,8 +92916,16 @@ static const UV _Perl_WB_invlist[] = { /* for EBCDIC 1047 */ 0x16FE5, 0x16FF0, 0x16FF2, + 0x1AFF0, + 0x1AFF4, + 0x1AFF5, + 0x1AFFC, + 0x1AFFD, + 0x1AFFF, 0x1B000, 0x1B001, + 0x1B120, + 0x1B123, 0x1B164, 0x1B168, 0x1BC00, @@ -90801,6 +92940,10 @@ static const UV _Perl_WB_invlist[] = { /* for EBCDIC 1047 */ 0x1BC9F, 0x1BCA0, 0x1BCA4, + 0x1CF00, + 0x1CF2E, + 0x1CF30, + 0x1CF47, 0x1D165, 0x1D16A, 0x1D16D, @@ -90887,6 +93030,8 @@ static const UV _Perl_WB_invlist[] = { /* for EBCDIC 1047 */ 0x1DAA0, 0x1DAA1, 0x1DAB0, + 0x1DF00, + 0x1DF1F, 0x1E000, 0x1E007, 0x1E008, @@ -90906,10 +93051,21 @@ static const UV _Perl_WB_invlist[] = { /* for EBCDIC 1047 */ 0x1E14A, 0x1E14E, 0x1E14F, + 0x1E290, + 0x1E2AE, + 0x1E2AF, 0x1E2C0, 0x1E2EC, 0x1E2F0, 0x1E2FA, + 0x1E7E0, + 0x1E7E7, + 0x1E7E8, + 0x1E7EC, + 0x1E7ED, + 0x1E7EF, + 0x1E7F0, + 0x1E7FF, 0x1E800, 0x1E8C5, 0x1E8D0, @@ -91295,6 +93451,10 @@ static const WB_enum _Perl_WB_invmap[] = { /* for EBCDIC 1047 */ WB_Other, WB_ALetter, WB_Other, + WB_Format, + WB_Other, + WB_Extend, + WB_ALetter, WB_Extend, WB_Format, WB_Extend, @@ -91489,6 +93649,7 @@ static const WB_enum _Perl_WB_invmap[] = { /* for EBCDIC 1047 */ WB_Other, WB_ALetter, WB_Other, + WB_Extend, WB_ALetter, WB_Extend, WB_Other, @@ -91501,6 +93662,8 @@ static const WB_enum _Perl_WB_invmap[] = { /* for EBCDIC 1047 */ WB_ALetter, WB_Other, WB_ALetter, + WB_Other, + WB_ALetter, WB_Extend, WB_Other, WB_Numeric, @@ -91708,8 +93871,6 @@ static const WB_enum _Perl_WB_invmap[] = { /* for EBCDIC 1047 */ WB_ALetter, WB_Other, WB_ALetter, - WB_Other, - WB_ALetter, WB_Extend, WB_Other, WB_ALetter, @@ -91732,7 +93893,7 @@ static const WB_enum _Perl_WB_invmap[] = { /* for EBCDIC 1047 */ WB_Other, WB_Extend, WB_Format, - WB_Other, + WB_Extend, WB_Numeric, WB_Other, WB_ALetter, @@ -91814,8 +93975,6 @@ static const WB_enum _Perl_WB_invmap[] = { /* for EBCDIC 1047 */ WB_Other, WB_ALetter, WB_Extend, - WB_Other, - WB_Extend, WB_ALetter, WB_Other, WB_ALetter, @@ -92008,10 +94167,6 @@ static const WB_enum _Perl_WB_invmap[] = { /* for EBCDIC 1047 */ WB_ALetter, WB_Other, WB_ALetter, - WB_Other, - WB_ALetter, - WB_Other, - WB_ALetter, WB_Extend, WB_ALetter, WB_Other, @@ -92107,6 +94262,10 @@ static const WB_enum _Perl_WB_invmap[] = { /* for EBCDIC 1047 */ WB_ALetter, WB_Other, WB_ALetter, + WB_Other, + WB_ALetter, + WB_Other, + WB_ALetter, WB_Extend, WB_ALetter, WB_Extend, @@ -92374,6 +94533,28 @@ static const WB_enum _Perl_WB_invmap[] = { /* for EBCDIC 1047 */ WB_ALetter, WB_Other, WB_ALetter, + WB_Other, + WB_ALetter, + WB_Other, + WB_ALetter, + WB_Other, + WB_ALetter, + WB_Other, + WB_ALetter, + WB_Other, + WB_ALetter, + WB_Other, + WB_ALetter, + WB_Other, + WB_ALetter, + WB_Other, + WB_ALetter, + WB_Other, + WB_ALetter, + WB_Other, + WB_ALetter, + WB_Other, + WB_ALetter, WB_Extend, WB_Other, WB_Extend, @@ -92431,6 +94612,9 @@ static const WB_enum _Perl_WB_invmap[] = { /* for EBCDIC 1047 */ WB_Extend, WB_Other, WB_ALetter, + WB_Extend, + WB_Other, + WB_ALetter, WB_Other, WB_ALetter, WB_Other, @@ -92439,6 +94623,10 @@ static const WB_enum _Perl_WB_invmap[] = { /* for EBCDIC 1047 */ WB_Extend, WB_Other, WB_Numeric, + WB_Extend, + WB_ALetter, + WB_Extend, + WB_ALetter, WB_Other, WB_Extend, WB_ALetter, @@ -92446,6 +94634,8 @@ static const WB_enum _Perl_WB_invmap[] = { /* for EBCDIC 1047 */ WB_Other, WB_Format, WB_Other, + WB_Extend, + WB_Other, WB_Format, WB_Other, WB_ALetter, @@ -92693,6 +94883,8 @@ static const WB_enum _Perl_WB_invmap[] = { /* for EBCDIC 1047 */ WB_Other, WB_ALetter, WB_Other, + WB_ALetter, + WB_Other, WB_Format, WB_Other, WB_ALetter, @@ -92705,6 +94897,10 @@ static const WB_enum _Perl_WB_invmap[] = { /* for EBCDIC 1047 */ WB_Other, WB_ALetter, WB_Other, + WB_Numeric, + WB_Other, + WB_ALetter, + WB_Other, WB_Extend, WB_Other, WB_ALetter, @@ -92740,81 +94936,13 @@ static const WB_enum _Perl_WB_invmap[] = { /* for EBCDIC 1047 */ WB_Other, WB_Katakana, WB_Other, - WB_ALetter, - WB_Other, - WB_ALetter, - WB_Other, - WB_ALetter, - WB_Other, - WB_ALetter, - WB_Other, - WB_Extend, - WB_Other, - WB_Format, - WB_Other, - WB_Extend, - WB_Other, - WB_Extend, - WB_Format, - WB_Extend, - WB_Other, - WB_Extend, - WB_Other, - WB_Extend, - WB_Other, - WB_Extend, - WB_Other, - WB_ALetter, - WB_Other, - WB_ALetter, - WB_Other, - WB_ALetter, - WB_Other, - WB_ALetter, - WB_Other, - WB_ALetter, - WB_Other, - WB_ALetter, - WB_Other, - WB_ALetter, - WB_Other, - WB_ALetter, - WB_Other, - WB_ALetter, - WB_Other, - WB_ALetter, - WB_Other, - WB_ALetter, - WB_Other, - WB_ALetter, - WB_Other, - WB_ALetter, - WB_Other, - WB_ALetter, - WB_Other, - WB_ALetter, - WB_Other, - WB_ALetter, - WB_Other, - WB_ALetter, - WB_Other, - WB_ALetter, - WB_Other, - WB_ALetter, - WB_Other, - WB_ALetter, - WB_Other, - WB_ALetter, - WB_Other, - WB_ALetter, - WB_Other, - WB_ALetter, + WB_Katakana, WB_Other, - WB_ALetter, + WB_Katakana, WB_Other, - WB_ALetter, + WB_Katakana, WB_Other, - WB_ALetter, + WB_Katakana, WB_Other, WB_ALetter, WB_Other, @@ -92824,13 +94952,9 @@ static const WB_enum _Perl_WB_invmap[] = { /* for EBCDIC 1047 */ WB_Other, WB_ALetter, WB_Other, - WB_Numeric, - WB_Other, WB_Extend, WB_Other, - WB_Extend, - WB_Other, - WB_Extend, + WB_Format, WB_Other, WB_Extend, WB_Other, @@ -92839,7 +94963,7 @@ static const WB_enum _Perl_WB_invmap[] = { /* for EBCDIC 1047 */ WB_Extend, WB_Other, WB_Extend, - WB_Other, + WB_Format, WB_Extend, WB_Other, WB_Extend, @@ -92850,26 +94974,123 @@ static const WB_enum _Perl_WB_invmap[] = { /* for EBCDIC 1047 */ WB_Other, WB_ALetter, WB_Other, - WB_Extend, WB_ALetter, WB_Other, - WB_Numeric, - WB_Other, WB_ALetter, WB_Other, WB_ALetter, - WB_Extend, - WB_Numeric, WB_Other, WB_ALetter, WB_Other, - WB_Extend, - WB_Other, WB_ALetter, - WB_Extend, - WB_ALetter, - WB_Other, - WB_Numeric, + WB_Other, + WB_ALetter, + WB_Other, + WB_ALetter, + WB_Other, + WB_ALetter, + WB_Other, + WB_ALetter, + WB_Other, + WB_ALetter, + WB_Other, + WB_ALetter, + WB_Other, + WB_ALetter, + WB_Other, + WB_ALetter, + WB_Other, + WB_ALetter, + WB_Other, + WB_ALetter, + WB_Other, + WB_ALetter, + WB_Other, + WB_ALetter, + WB_Other, + WB_ALetter, + WB_Other, + WB_ALetter, + WB_Other, + WB_ALetter, + WB_Other, + WB_ALetter, + WB_Other, + WB_ALetter, + WB_Other, + WB_ALetter, + WB_Other, + WB_ALetter, + WB_Other, + WB_ALetter, + WB_Other, + WB_ALetter, + WB_Other, + WB_ALetter, + WB_Other, + WB_ALetter, + WB_Other, + WB_ALetter, + WB_Other, + WB_Numeric, + WB_Other, + WB_Extend, + WB_Other, + WB_Extend, + WB_Other, + WB_Extend, + WB_Other, + WB_Extend, + WB_Other, + WB_Extend, + WB_Other, + WB_Extend, + WB_Other, + WB_ALetter, + WB_Other, + WB_Extend, + WB_Other, + WB_Extend, + WB_Other, + WB_Extend, + WB_Other, + WB_Extend, + WB_Other, + WB_Extend, + WB_Other, + WB_ALetter, + WB_Other, + WB_Extend, + WB_ALetter, + WB_Other, + WB_Numeric, + WB_Other, + WB_ALetter, + WB_Other, + WB_ALetter, + WB_Extend, + WB_Other, + WB_ALetter, + WB_Extend, + WB_Numeric, + WB_Other, + WB_ALetter, + WB_Other, + WB_ALetter, + WB_Other, + WB_ALetter, + WB_Other, + WB_ALetter, + WB_Other, + WB_ALetter, + WB_Other, + WB_Extend, + WB_Other, + WB_ALetter, + WB_Extend, + WB_ALetter, + WB_Other, + WB_Numeric, WB_Other, WB_ALetter, WB_Other, @@ -93021,7 +95242,7 @@ static const WB_enum _Perl_WB_invmap[] = { /* for EBCDIC 1047 */ && '$' == 91 && '@' == 124 && '`' == 121 && '\n' == 37 static const UV _Perl_WB_invlist[] = { /* for EBCDIC 037 */ - 1903, /* Number of elements */ + 1968, /* Number of elements */ 148565664, /* Version and data structure type */ 0, /* 0 if the list starts at 0; 1 if it starts at the element beyond 0 */ @@ -93212,11 +95433,15 @@ static const UV _Perl_WB_invlist[] = { /* for EBCDIC 037 */ 0x85C, 0x860, 0x86B, + 0x870, + 0x888, + 0x889, + 0x88F, + 0x890, + 0x892, + 0x898, 0x8A0, - 0x8B5, - 0x8B6, - 0x8C8, - 0x8D3, + 0x8CA, 0x8E2, 0x8E3, 0x904, @@ -93410,6 +95635,7 @@ static const UV _Perl_WB_invlist[] = { /* for EBCDIC 037 */ 0xC29, 0xC2A, 0xC3A, + 0xC3C, 0xC3D, 0xC3E, 0xC45, @@ -93421,6 +95647,8 @@ static const UV _Perl_WB_invlist[] = { /* for EBCDIC 037 */ 0xC57, 0xC58, 0xC5B, + 0xC5D, + 0xC5E, 0xC60, 0xC62, 0xC64, @@ -93449,7 +95677,7 @@ static const UV _Perl_WB_invlist[] = { /* for EBCDIC 037 */ 0xCCE, 0xCD5, 0xCD7, - 0xCDE, + 0xCDD, 0xCDF, 0xCE0, 0xCE2, @@ -93629,11 +95857,9 @@ static const UV _Perl_WB_invlist[] = { /* for EBCDIC 037 */ 0x16EE, 0x16F9, 0x1700, - 0x170D, - 0x170E, 0x1712, - 0x1715, - 0x1720, + 0x1716, + 0x171F, 0x1732, 0x1735, 0x1740, @@ -93689,12 +95915,12 @@ static const UV _Perl_WB_invlist[] = { /* for EBCDIC 037 */ 0x1A90, 0x1A9A, 0x1AB0, - 0x1AC1, + 0x1ACF, 0x1B00, 0x1B05, 0x1B34, 0x1B45, - 0x1B4C, + 0x1B4D, 0x1B50, 0x1B5A, 0x1B6B, @@ -93735,8 +95961,6 @@ static const UV _Perl_WB_invlist[] = { /* for EBCDIC 037 */ 0x1CFB, 0x1D00, 0x1DC0, - 0x1DFA, - 0x1DFB, 0x1E00, 0x1F16, 0x1F18, @@ -93927,10 +96151,6 @@ static const UV _Perl_WB_invlist[] = { /* for EBCDIC 037 */ 0x2B55, 0x2B56, 0x2C00, - 0x2C2F, - 0x2C30, - 0x2C5F, - 0x2C60, 0x2CE5, 0x2CEB, 0x2CEF, @@ -94024,10 +96244,14 @@ static const UV _Perl_WB_invlist[] = { /* for EBCDIC 037 */ 0xA6F0, 0xA6F2, 0xA708, - 0xA7C0, - 0xA7C2, 0xA7CB, - 0xA7F5, + 0xA7D0, + 0xA7D2, + 0xA7D3, + 0xA7D4, + 0xA7D5, + 0xA7DA, + 0xA7F2, 0xA802, 0xA803, 0xA806, @@ -94260,12 +96484,34 @@ static const UV _Perl_WB_invlist[] = { /* for EBCDIC 037 */ 0x10528, 0x10530, 0x10564, + 0x10570, + 0x1057B, + 0x1057C, + 0x1058B, + 0x1058C, + 0x10593, + 0x10594, + 0x10596, + 0x10597, + 0x105A2, + 0x105A3, + 0x105B2, + 0x105B3, + 0x105BA, + 0x105BB, + 0x105BD, 0x10600, 0x10737, 0x10740, 0x10756, 0x10760, 0x10768, + 0x10780, + 0x10786, + 0x10787, + 0x107B1, + 0x107B2, + 0x107BB, 0x10800, 0x10806, 0x10808, @@ -94351,6 +96597,9 @@ static const UV _Perl_WB_invlist[] = { /* for EBCDIC 037 */ 0x10F30, 0x10F46, 0x10F51, + 0x10F70, + 0x10F82, + 0x10F86, 0x10FB0, 0x10FC5, 0x10FE0, @@ -94361,12 +96610,18 @@ static const UV _Perl_WB_invlist[] = { /* for EBCDIC 037 */ 0x11047, 0x11066, 0x11070, + 0x11071, + 0x11073, + 0x11075, + 0x11076, 0x1107F, 0x11083, 0x110B0, 0x110BB, 0x110BD, 0x110BE, + 0x110C2, + 0x110C3, 0x110CD, 0x110CE, 0x110D0, @@ -94552,7 +96807,7 @@ static const UV _Perl_WB_invlist[] = { /* for EBCDIC 037 */ 0x11A9A, 0x11A9D, 0x11A9E, - 0x11AC0, + 0x11AB0, 0x11AF9, 0x11C00, 0x11C09, @@ -94612,6 +96867,8 @@ static const UV _Perl_WB_invlist[] = { /* for EBCDIC 037 */ 0x1246F, 0x12480, 0x12544, + 0x12F90, + 0x12FF1, 0x13000, 0x1342F, 0x13430, @@ -94624,6 +96881,10 @@ static const UV _Perl_WB_invlist[] = { /* for EBCDIC 037 */ 0x16A5F, 0x16A60, 0x16A6A, + 0x16A70, + 0x16ABF, + 0x16AC0, + 0x16ACA, 0x16AD0, 0x16AEE, 0x16AF0, @@ -94657,8 +96918,16 @@ static const UV _Perl_WB_invlist[] = { /* for EBCDIC 037 */ 0x16FE5, 0x16FF0, 0x16FF2, + 0x1AFF0, + 0x1AFF4, + 0x1AFF5, + 0x1AFFC, + 0x1AFFD, + 0x1AFFF, 0x1B000, 0x1B001, + 0x1B120, + 0x1B123, 0x1B164, 0x1B168, 0x1BC00, @@ -94673,6 +96942,10 @@ static const UV _Perl_WB_invlist[] = { /* for EBCDIC 037 */ 0x1BC9F, 0x1BCA0, 0x1BCA4, + 0x1CF00, + 0x1CF2E, + 0x1CF30, + 0x1CF47, 0x1D165, 0x1D16A, 0x1D16D, @@ -94759,6 +97032,8 @@ static const UV _Perl_WB_invlist[] = { /* for EBCDIC 037 */ 0x1DAA0, 0x1DAA1, 0x1DAB0, + 0x1DF00, + 0x1DF1F, 0x1E000, 0x1E007, 0x1E008, @@ -94778,10 +97053,21 @@ static const UV _Perl_WB_invlist[] = { /* for EBCDIC 037 */ 0x1E14A, 0x1E14E, 0x1E14F, + 0x1E290, + 0x1E2AE, + 0x1E2AF, 0x1E2C0, 0x1E2EC, 0x1E2F0, 0x1E2FA, + 0x1E7E0, + 0x1E7E7, + 0x1E7E8, + 0x1E7EC, + 0x1E7ED, + 0x1E7EF, + 0x1E7F0, + 0x1E7FF, 0x1E800, 0x1E8C5, 0x1E8D0, @@ -95163,6 +97449,10 @@ static const WB_enum _Perl_WB_invmap[] = { /* for EBCDIC 037 */ WB_Other, WB_ALetter, WB_Other, + WB_Format, + WB_Other, + WB_Extend, + WB_ALetter, WB_Extend, WB_Format, WB_Extend, @@ -95357,6 +97647,7 @@ static const WB_enum _Perl_WB_invmap[] = { /* for EBCDIC 037 */ WB_Other, WB_ALetter, WB_Other, + WB_Extend, WB_ALetter, WB_Extend, WB_Other, @@ -95369,6 +97660,8 @@ static const WB_enum _Perl_WB_invmap[] = { /* for EBCDIC 037 */ WB_ALetter, WB_Other, WB_ALetter, + WB_Other, + WB_ALetter, WB_Extend, WB_Other, WB_Numeric, @@ -95576,8 +97869,6 @@ static const WB_enum _Perl_WB_invmap[] = { /* for EBCDIC 037 */ WB_ALetter, WB_Other, WB_ALetter, - WB_Other, - WB_ALetter, WB_Extend, WB_Other, WB_ALetter, @@ -95600,7 +97891,7 @@ static const WB_enum _Perl_WB_invmap[] = { /* for EBCDIC 037 */ WB_Other, WB_Extend, WB_Format, - WB_Other, + WB_Extend, WB_Numeric, WB_Other, WB_ALetter, @@ -95682,8 +97973,6 @@ static const WB_enum _Perl_WB_invmap[] = { /* for EBCDIC 037 */ WB_Other, WB_ALetter, WB_Extend, - WB_Other, - WB_Extend, WB_ALetter, WB_Other, WB_ALetter, @@ -95876,10 +98165,6 @@ static const WB_enum _Perl_WB_invmap[] = { /* for EBCDIC 037 */ WB_ALetter, WB_Other, WB_ALetter, - WB_Other, - WB_ALetter, - WB_Other, - WB_ALetter, WB_Extend, WB_ALetter, WB_Other, @@ -95975,6 +98260,10 @@ static const WB_enum _Perl_WB_invmap[] = { /* for EBCDIC 037 */ WB_ALetter, WB_Other, WB_ALetter, + WB_Other, + WB_ALetter, + WB_Other, + WB_ALetter, WB_Extend, WB_ALetter, WB_Extend, @@ -96242,6 +98531,28 @@ static const WB_enum _Perl_WB_invmap[] = { /* for EBCDIC 037 */ WB_ALetter, WB_Other, WB_ALetter, + WB_Other, + WB_ALetter, + WB_Other, + WB_ALetter, + WB_Other, + WB_ALetter, + WB_Other, + WB_ALetter, + WB_Other, + WB_ALetter, + WB_Other, + WB_ALetter, + WB_Other, + WB_ALetter, + WB_Other, + WB_ALetter, + WB_Other, + WB_ALetter, + WB_Other, + WB_ALetter, + WB_Other, + WB_ALetter, WB_Extend, WB_Other, WB_Extend, @@ -96299,6 +98610,9 @@ static const WB_enum _Perl_WB_invmap[] = { /* for EBCDIC 037 */ WB_Extend, WB_Other, WB_ALetter, + WB_Extend, + WB_Other, + WB_ALetter, WB_Other, WB_ALetter, WB_Other, @@ -96307,6 +98621,10 @@ static const WB_enum _Perl_WB_invmap[] = { /* for EBCDIC 037 */ WB_Extend, WB_Other, WB_Numeric, + WB_Extend, + WB_ALetter, + WB_Extend, + WB_ALetter, WB_Other, WB_Extend, WB_ALetter, @@ -96314,6 +98632,8 @@ static const WB_enum _Perl_WB_invmap[] = { /* for EBCDIC 037 */ WB_Other, WB_Format, WB_Other, + WB_Extend, + WB_Other, WB_Format, WB_Other, WB_ALetter, @@ -96561,6 +98881,8 @@ static const WB_enum _Perl_WB_invmap[] = { /* for EBCDIC 037 */ WB_Other, WB_ALetter, WB_Other, + WB_ALetter, + WB_Other, WB_Format, WB_Other, WB_ALetter, @@ -96573,6 +98895,10 @@ static const WB_enum _Perl_WB_invmap[] = { /* for EBCDIC 037 */ WB_Other, WB_ALetter, WB_Other, + WB_Numeric, + WB_Other, + WB_ALetter, + WB_Other, WB_Extend, WB_Other, WB_ALetter, @@ -96608,6 +98934,14 @@ static const WB_enum _Perl_WB_invmap[] = { /* for EBCDIC 037 */ WB_Other, WB_Katakana, WB_Other, + WB_Katakana, + WB_Other, + WB_Katakana, + WB_Other, + WB_Katakana, + WB_Other, + WB_Katakana, + WB_Other, WB_ALetter, WB_Other, WB_ALetter, @@ -96623,6 +98957,10 @@ static const WB_enum _Perl_WB_invmap[] = { /* for EBCDIC 037 */ WB_Extend, WB_Other, WB_Extend, + WB_Other, + WB_Extend, + WB_Other, + WB_Extend, WB_Format, WB_Extend, WB_Other, @@ -96706,6 +99044,8 @@ static const WB_enum _Perl_WB_invmap[] = { /* for EBCDIC 037 */ WB_Other, WB_Extend, WB_Other, + WB_ALetter, + WB_Other, WB_Extend, WB_Other, WB_Extend, @@ -96727,10 +99067,21 @@ static const WB_enum _Perl_WB_invmap[] = { /* for EBCDIC 037 */ WB_Other, WB_ALetter, WB_Extend, + WB_Other, + WB_ALetter, + WB_Extend, WB_Numeric, WB_Other, WB_ALetter, WB_Other, + WB_ALetter, + WB_Other, + WB_ALetter, + WB_Other, + WB_ALetter, + WB_Other, + WB_ALetter, + WB_Other, WB_Extend, WB_Other, WB_ALetter, @@ -96886,7 +99237,7 @@ static const WB_enum _Perl_WB_invmap[] = { /* for EBCDIC 037 */ # if 'A' == 65 /* ASCII/Latin1 */ static const UV Simple_Case_Folding_invlist[] = { /* for ASCII/Latin1 */ - 1291, /* Number of elements */ + 1307, /* Number of elements */ 148565664, /* Version and data structure type */ 0, /* 0 if the list starts at 0; 1 if it starts at the element beyond 0 */ @@ -97810,7 +100161,7 @@ static const UV Simple_Case_Folding_invlist[] = { /* for ASCII/Latin1 */ 0x24B6, 0x24D0, 0x2C00, - 0x2C2F, + 0x2C30, 0x2C60, 0x2C61, 0x2C62, @@ -98154,6 +100505,8 @@ static const UV Simple_Case_Folding_invlist[] = { /* for ASCII/Latin1 */ 0xA7BD, 0xA7BE, 0xA7BF, + 0xA7C0, + 0xA7C1, 0xA7C2, 0xA7C3, 0xA7C4, @@ -98163,6 +100516,12 @@ static const UV Simple_Case_Folding_invlist[] = { /* for ASCII/Latin1 */ 0xA7C8, 0xA7C9, 0xA7CA, + 0xA7D0, + 0xA7D1, + 0xA7D6, + 0xA7D7, + 0xA7D8, + 0xA7D9, 0xA7F5, 0xA7F6, 0xAB70, @@ -98173,6 +100532,14 @@ static const UV Simple_Case_Folding_invlist[] = { /* for ASCII/Latin1 */ 0x10428, 0x104B0, 0x104D4, + 0x10570, + 0x1057B, + 0x1057C, + 0x1058B, + 0x1058C, + 0x10593, + 0x10594, + 0x10596, 0x10C80, 0x10CB3, 0x118A0, @@ -99456,6 +101823,8 @@ static const I32 Simple_Case_Folding_invmap[] = { /* for ASCII/Latin1 */ 0, 0xA7BF, 0, + 0xA7C1, + 0, 0xA7C3, 0, 0xA794, @@ -99465,6 +101834,12 @@ static const I32 Simple_Case_Folding_invmap[] = { /* for ASCII/Latin1 */ 0, 0xA7CA, 0, + 0xA7D1, + 0, + 0xA7D7, + 0, + 0xA7D9, + 0, 0xA7F6, 0, 0x13A0, @@ -99475,6 +101850,14 @@ static const I32 Simple_Case_Folding_invmap[] = { /* for ASCII/Latin1 */ 0, 0x104D8, 0, + 0x10597, + 0, + 0x105A3, + 0, + 0x105B3, + 0, + 0x105BB, + 0, 0x10CC0, 0, 0x118C0, @@ -99497,7 +101880,7 @@ static const I32 Simple_Case_Folding_invmap[] = { /* for ASCII/Latin1 */ && '$' == 91 && '@' == 124 && '`' == 121 && '\n' == 21 static const UV Simple_Case_Folding_invlist[] = { /* for EBCDIC 1047 */ - 1309, /* Number of elements */ + 1325, /* Number of elements */ 148565664, /* Version and data structure type */ 0, /* 0 if the list starts at 0; 1 if it starts at the element beyond 0 */ @@ -100439,7 +102822,7 @@ static const UV Simple_Case_Folding_invlist[] = { /* for EBCDIC 1047 */ 0x24B6, 0x24D0, 0x2C00, - 0x2C2F, + 0x2C30, 0x2C60, 0x2C61, 0x2C62, @@ -100783,6 +103166,8 @@ static const UV Simple_Case_Folding_invlist[] = { /* for EBCDIC 1047 */ 0xA7BD, 0xA7BE, 0xA7BF, + 0xA7C0, + 0xA7C1, 0xA7C2, 0xA7C3, 0xA7C4, @@ -100792,6 +103177,12 @@ static const UV Simple_Case_Folding_invlist[] = { /* for EBCDIC 1047 */ 0xA7C8, 0xA7C9, 0xA7CA, + 0xA7D0, + 0xA7D1, + 0xA7D6, + 0xA7D7, + 0xA7D8, + 0xA7D9, 0xA7F5, 0xA7F6, 0xAB70, @@ -100802,6 +103193,14 @@ static const UV Simple_Case_Folding_invlist[] = { /* for EBCDIC 1047 */ 0x10428, 0x104B0, 0x104D4, + 0x10570, + 0x1057B, + 0x1057C, + 0x1058B, + 0x1058C, + 0x10593, + 0x10594, + 0x10596, 0x10C80, 0x10CB3, 0x118A0, @@ -102106,6 +104505,8 @@ static const I32 Simple_Case_Folding_invmap[] = { /* for EBCDIC 1047 */ 0, 0xA7BF, 0, + 0xA7C1, + 0, 0xA7C3, 0, 0xA794, @@ -102115,6 +104516,12 @@ static const I32 Simple_Case_Folding_invmap[] = { /* for EBCDIC 1047 */ 0, 0xA7CA, 0, + 0xA7D1, + 0, + 0xA7D7, + 0, + 0xA7D9, + 0, 0xA7F6, 0, 0x13A0, @@ -102125,6 +104532,14 @@ static const I32 Simple_Case_Folding_invmap[] = { /* for EBCDIC 1047 */ 0, 0x104D8, 0, + 0x10597, + 0, + 0x105A3, + 0, + 0x105B3, + 0, + 0x105BB, + 0, 0x10CC0, 0, 0x118C0, @@ -102147,7 +104562,7 @@ static const I32 Simple_Case_Folding_invmap[] = { /* for EBCDIC 1047 */ && '$' == 91 && '@' == 124 && '`' == 121 && '\n' == 37 static const UV Simple_Case_Folding_invlist[] = { /* for EBCDIC 037 */ - 1305, /* Number of elements */ + 1321, /* Number of elements */ 148565664, /* Version and data structure type */ 0, /* 0 if the list starts at 0; 1 if it starts at the element beyond 0 */ @@ -103085,7 +105500,7 @@ static const UV Simple_Case_Folding_invlist[] = { /* for EBCDIC 037 */ 0x24B6, 0x24D0, 0x2C00, - 0x2C2F, + 0x2C30, 0x2C60, 0x2C61, 0x2C62, @@ -103429,6 +105844,8 @@ static const UV Simple_Case_Folding_invlist[] = { /* for EBCDIC 037 */ 0xA7BD, 0xA7BE, 0xA7BF, + 0xA7C0, + 0xA7C1, 0xA7C2, 0xA7C3, 0xA7C4, @@ -103438,6 +105855,12 @@ static const UV Simple_Case_Folding_invlist[] = { /* for EBCDIC 037 */ 0xA7C8, 0xA7C9, 0xA7CA, + 0xA7D0, + 0xA7D1, + 0xA7D6, + 0xA7D7, + 0xA7D8, + 0xA7D9, 0xA7F5, 0xA7F6, 0xAB70, @@ -103448,6 +105871,14 @@ static const UV Simple_Case_Folding_invlist[] = { /* for EBCDIC 037 */ 0x10428, 0x104B0, 0x104D4, + 0x10570, + 0x1057B, + 0x1057C, + 0x1058B, + 0x1058C, + 0x10593, + 0x10594, + 0x10596, 0x10C80, 0x10CB3, 0x118A0, @@ -104748,6 +107179,8 @@ static const I32 Simple_Case_Folding_invmap[] = { /* for EBCDIC 037 */ 0, 0xA7BF, 0, + 0xA7C1, + 0, 0xA7C3, 0, 0xA794, @@ -104757,6 +107190,12 @@ static const I32 Simple_Case_Folding_invmap[] = { /* for EBCDIC 037 */ 0, 0xA7CA, 0, + 0xA7D1, + 0, + 0xA7D7, + 0, + 0xA7D9, + 0, 0xA7F6, 0, 0x13A0, @@ -104767,6 +107206,14 @@ static const I32 Simple_Case_Folding_invmap[] = { /* for EBCDIC 037 */ 0, 0x104D8, 0, + 0x10597, + 0, + 0x105A3, + 0, + 0x105B3, + 0, + 0x105BB, + 0, 0x10CC0, 0, 0x118C0, @@ -104786,7 +107233,7 @@ static const I32 Simple_Case_Folding_invmap[] = { /* for EBCDIC 037 */ # if 'A' == 65 /* ASCII/Latin1 */ static const UV Titlecase_Mapping_invlist[] = { /* for ASCII/Latin1 */ - 1340, /* Number of elements */ + 1356, /* Number of elements */ 148565664, /* Version and data structure type */ 0, /* 0 if the list starts at 0; 1 if it starts at the element beyond 0 */ @@ -105760,7 +108207,7 @@ static const UV Titlecase_Mapping_invlist[] = { /* for ASCII/Latin1 */ 0x24D0, 0x24EA, 0x2C30, - 0x2C5F, + 0x2C60, 0x2C61, 0x2C62, 0x2C65, @@ -106091,12 +108538,20 @@ static const UV Titlecase_Mapping_invlist[] = { /* for ASCII/Latin1 */ 0xA7BE, 0xA7BF, 0xA7C0, + 0xA7C1, + 0xA7C2, 0xA7C3, 0xA7C4, 0xA7C8, 0xA7C9, 0xA7CA, 0xA7CB, + 0xA7D1, + 0xA7D2, + 0xA7D7, + 0xA7D8, + 0xA7D9, + 0xA7DA, 0xA7F6, 0xA7F7, 0xAB53, @@ -106122,6 +108577,14 @@ static const UV Titlecase_Mapping_invlist[] = { /* for ASCII/Latin1 */ 0x10450, 0x104D8, 0x104FC, + 0x10597, + 0x105A2, + 0x105A3, + 0x105B2, + 0x105B3, + 0x105BA, + 0x105BB, + 0x105BD, 0x10CC0, 0x10CF3, 0x118C0, @@ -107837,12 +110300,20 @@ static const I32 Titlecase_Mapping_invmap[] = { /* for ASCII/Latin1 */ 0, 0xA7BE, 0, + 0xA7C0, + 0, 0xA7C2, 0, 0xA7C7, 0, 0xA7C9, 0, + 0xA7D0, + 0, + 0xA7D6, + 0, + 0xA7D8, + 0, 0xA7F5, 0, 0xA7B3, @@ -107868,6 +110339,14 @@ static const I32 Titlecase_Mapping_invmap[] = { /* for ASCII/Latin1 */ 0, 0x104B0, 0, + 0x10570, + 0, + 0x1057C, + 0, + 0x1058C, + 0, + 0x10594, + 0, 0x10C80, 0, 0x118A0, @@ -107890,7 +110369,7 @@ static const I32 Titlecase_Mapping_invmap[] = { /* for ASCII/Latin1 */ && '$' == 91 && '@' == 124 && '`' == 121 && '\n' == 21 static const UV Titlecase_Mapping_invlist[] = { /* for EBCDIC 1047 */ - 1356, /* Number of elements */ + 1372, /* Number of elements */ 148565664, /* Version and data structure type */ 0, /* 0 if the list starts at 0; 1 if it starts at the element beyond 0 */ @@ -108880,7 +111359,7 @@ static const UV Titlecase_Mapping_invlist[] = { /* for EBCDIC 1047 */ 0x24D0, 0x24EA, 0x2C30, - 0x2C5F, + 0x2C60, 0x2C61, 0x2C62, 0x2C65, @@ -109211,12 +111690,20 @@ static const UV Titlecase_Mapping_invlist[] = { /* for EBCDIC 1047 */ 0xA7BE, 0xA7BF, 0xA7C0, + 0xA7C1, + 0xA7C2, 0xA7C3, 0xA7C4, 0xA7C8, 0xA7C9, 0xA7CA, 0xA7CB, + 0xA7D1, + 0xA7D2, + 0xA7D7, + 0xA7D8, + 0xA7D9, + 0xA7DA, 0xA7F6, 0xA7F7, 0xAB53, @@ -109242,6 +111729,14 @@ static const UV Titlecase_Mapping_invlist[] = { /* for EBCDIC 1047 */ 0x10450, 0x104D8, 0x104FC, + 0x10597, + 0x105A2, + 0x105A3, + 0x105B2, + 0x105B3, + 0x105BA, + 0x105BB, + 0x105BD, 0x10CC0, 0x10CF3, 0x118C0, @@ -110976,12 +113471,20 @@ static const I32 Titlecase_Mapping_invmap[] = { /* for EBCDIC 1047 */ 0, 0xA7BE, 0, + 0xA7C0, + 0, 0xA7C2, 0, 0xA7C7, 0, 0xA7C9, 0, + 0xA7D0, + 0, + 0xA7D6, + 0, + 0xA7D8, + 0, 0xA7F5, 0, 0xA7B3, @@ -111007,6 +113510,14 @@ static const I32 Titlecase_Mapping_invmap[] = { /* for EBCDIC 1047 */ 0, 0x104B0, 0, + 0x10570, + 0, + 0x1057C, + 0, + 0x1058C, + 0, + 0x10594, + 0, 0x10C80, 0, 0x118A0, @@ -111029,7 +113540,7 @@ static const I32 Titlecase_Mapping_invmap[] = { /* for EBCDIC 1047 */ && '$' == 91 && '@' == 124 && '`' == 121 && '\n' == 37 static const UV Titlecase_Mapping_invlist[] = { /* for EBCDIC 037 */ - 1354, /* Number of elements */ + 1370, /* Number of elements */ 148565664, /* Version and data structure type */ 0, /* 0 if the list starts at 0; 1 if it starts at the element beyond 0 */ @@ -112017,7 +114528,7 @@ static const UV Titlecase_Mapping_invlist[] = { /* for EBCDIC 037 */ 0x24D0, 0x24EA, 0x2C30, - 0x2C5F, + 0x2C60, 0x2C61, 0x2C62, 0x2C65, @@ -112348,12 +114859,20 @@ static const UV Titlecase_Mapping_invlist[] = { /* for EBCDIC 037 */ 0xA7BE, 0xA7BF, 0xA7C0, + 0xA7C1, + 0xA7C2, 0xA7C3, 0xA7C4, 0xA7C8, 0xA7C9, 0xA7CA, 0xA7CB, + 0xA7D1, + 0xA7D2, + 0xA7D7, + 0xA7D8, + 0xA7D9, + 0xA7DA, 0xA7F6, 0xA7F7, 0xAB53, @@ -112379,6 +114898,14 @@ static const UV Titlecase_Mapping_invlist[] = { /* for EBCDIC 037 */ 0x10450, 0x104D8, 0x104FC, + 0x10597, + 0x105A2, + 0x105A3, + 0x105B2, + 0x105B3, + 0x105BA, + 0x105BB, + 0x105BD, 0x10CC0, 0x10CF3, 0x118C0, @@ -114111,12 +116638,20 @@ static const I32 Titlecase_Mapping_invmap[] = { /* for EBCDIC 037 */ 0, 0xA7BE, 0, + 0xA7C0, + 0, 0xA7C2, 0, 0xA7C7, 0, 0xA7C9, 0, + 0xA7D0, + 0, + 0xA7D6, + 0, + 0xA7D8, + 0, 0xA7F5, 0, 0xA7B3, @@ -114142,6 +116677,14 @@ static const I32 Titlecase_Mapping_invmap[] = { /* for EBCDIC 037 */ 0, 0x104B0, 0, + 0x10570, + 0, + 0x1057C, + 0, + 0x1058C, + 0, + 0x10594, + 0, 0x10C80, 0, 0x118A0, @@ -114161,7 +116704,7 @@ static const I32 Titlecase_Mapping_invmap[] = { /* for EBCDIC 037 */ # if 'A' == 65 /* ASCII/Latin1 */ static const UV Uppercase_Mapping_invlist[] = { /* for ASCII/Latin1 */ - 1391, /* Number of elements */ + 1407, /* Number of elements */ 148565664, /* Version and data structure type */ 0, /* 0 if the list starts at 0; 1 if it starts at the element beyond 0 */ @@ -115186,7 +117729,7 @@ static const UV Uppercase_Mapping_invlist[] = { /* for ASCII/Latin1 */ 0x24D0, 0x24EA, 0x2C30, - 0x2C5F, + 0x2C60, 0x2C61, 0x2C62, 0x2C65, @@ -115517,12 +118060,20 @@ static const UV Uppercase_Mapping_invlist[] = { /* for ASCII/Latin1 */ 0xA7BE, 0xA7BF, 0xA7C0, + 0xA7C1, + 0xA7C2, 0xA7C3, 0xA7C4, 0xA7C8, 0xA7C9, 0xA7CA, 0xA7CB, + 0xA7D1, + 0xA7D2, + 0xA7D7, + 0xA7D8, + 0xA7D9, + 0xA7DA, 0xA7F6, 0xA7F7, 0xAB53, @@ -115548,6 +118099,14 @@ static const UV Uppercase_Mapping_invlist[] = { /* for ASCII/Latin1 */ 0x10450, 0x104D8, 0x104FC, + 0x10597, + 0x105A2, + 0x105A3, + 0x105B2, + 0x105B3, + 0x105BA, + 0x105BB, + 0x105BD, 0x10CC0, 0x10CF3, 0x118C0, @@ -117530,12 +120089,20 @@ static const I32 Uppercase_Mapping_invmap[] = { /* for ASCII/Latin1 */ 0, 0xA7BE, 0, + 0xA7C0, + 0, 0xA7C2, 0, 0xA7C7, 0, 0xA7C9, 0, + 0xA7D0, + 0, + 0xA7D6, + 0, + 0xA7D8, + 0, 0xA7F5, 0, 0xA7B3, @@ -117561,6 +120128,14 @@ static const I32 Uppercase_Mapping_invmap[] = { /* for ASCII/Latin1 */ 0, 0x104B0, 0, + 0x10570, + 0, + 0x1057C, + 0, + 0x1058C, + 0, + 0x10594, + 0, 0x10C80, 0, 0x118A0, @@ -117583,7 +120158,7 @@ static const I32 Uppercase_Mapping_invmap[] = { /* for ASCII/Latin1 */ && '$' == 91 && '@' == 124 && '`' == 121 && '\n' == 21 static const UV Uppercase_Mapping_invlist[] = { /* for EBCDIC 1047 */ - 1407, /* Number of elements */ + 1423, /* Number of elements */ 148565664, /* Version and data structure type */ 0, /* 0 if the list starts at 0; 1 if it starts at the element beyond 0 */ @@ -118624,7 +121199,7 @@ static const UV Uppercase_Mapping_invlist[] = { /* for EBCDIC 1047 */ 0x24D0, 0x24EA, 0x2C30, - 0x2C5F, + 0x2C60, 0x2C61, 0x2C62, 0x2C65, @@ -118955,12 +121530,20 @@ static const UV Uppercase_Mapping_invlist[] = { /* for EBCDIC 1047 */ 0xA7BE, 0xA7BF, 0xA7C0, + 0xA7C1, + 0xA7C2, 0xA7C3, 0xA7C4, 0xA7C8, 0xA7C9, 0xA7CA, 0xA7CB, + 0xA7D1, + 0xA7D2, + 0xA7D7, + 0xA7D8, + 0xA7D9, + 0xA7DA, 0xA7F6, 0xA7F7, 0xAB53, @@ -118986,6 +121569,14 @@ static const UV Uppercase_Mapping_invlist[] = { /* for EBCDIC 1047 */ 0x10450, 0x104D8, 0x104FC, + 0x10597, + 0x105A2, + 0x105A3, + 0x105B2, + 0x105B3, + 0x105BA, + 0x105BB, + 0x105BD, 0x10CC0, 0x10CF3, 0x118C0, @@ -120987,12 +123578,20 @@ static const I32 Uppercase_Mapping_invmap[] = { /* for EBCDIC 1047 */ 0, 0xA7BE, 0, + 0xA7C0, + 0, 0xA7C2, 0, 0xA7C7, 0, 0xA7C9, 0, + 0xA7D0, + 0, + 0xA7D6, + 0, + 0xA7D8, + 0, 0xA7F5, 0, 0xA7B3, @@ -121018,6 +123617,14 @@ static const I32 Uppercase_Mapping_invmap[] = { /* for EBCDIC 1047 */ 0, 0x104B0, 0, + 0x10570, + 0, + 0x1057C, + 0, + 0x1058C, + 0, + 0x10594, + 0, 0x10C80, 0, 0x118A0, @@ -121040,7 +123647,7 @@ static const I32 Uppercase_Mapping_invmap[] = { /* for EBCDIC 1047 */ && '$' == 91 && '@' == 124 && '`' == 121 && '\n' == 37 static const UV Uppercase_Mapping_invlist[] = { /* for EBCDIC 037 */ - 1405, /* Number of elements */ + 1421, /* Number of elements */ 148565664, /* Version and data structure type */ 0, /* 0 if the list starts at 0; 1 if it starts at the element beyond 0 */ @@ -122079,7 +124686,7 @@ static const UV Uppercase_Mapping_invlist[] = { /* for EBCDIC 037 */ 0x24D0, 0x24EA, 0x2C30, - 0x2C5F, + 0x2C60, 0x2C61, 0x2C62, 0x2C65, @@ -122410,12 +125017,20 @@ static const UV Uppercase_Mapping_invlist[] = { /* for EBCDIC 037 */ 0xA7BE, 0xA7BF, 0xA7C0, + 0xA7C1, + 0xA7C2, 0xA7C3, 0xA7C4, 0xA7C8, 0xA7C9, 0xA7CA, 0xA7CB, + 0xA7D1, + 0xA7D2, + 0xA7D7, + 0xA7D8, + 0xA7D9, + 0xA7DA, 0xA7F6, 0xA7F7, 0xAB53, @@ -122441,6 +125056,14 @@ static const UV Uppercase_Mapping_invlist[] = { /* for EBCDIC 037 */ 0x10450, 0x104D8, 0x104FC, + 0x10597, + 0x105A2, + 0x105A3, + 0x105B2, + 0x105B3, + 0x105BA, + 0x105BB, + 0x105BD, 0x10CC0, 0x10CF3, 0x118C0, @@ -124440,12 +127063,20 @@ static const I32 Uppercase_Mapping_invmap[] = { /* for EBCDIC 037 */ 0, 0xA7BE, 0, + 0xA7C0, + 0, 0xA7C2, 0, 0xA7C7, 0, 0xA7C9, 0, + 0xA7D0, + 0, + 0xA7D6, + 0, + 0xA7D8, + 0, 0xA7F5, 0, 0xA7B3, @@ -124471,6 +127102,14 @@ static const I32 Uppercase_Mapping_invmap[] = { /* for EBCDIC 037 */ 0, 0x104B0, 0, + 0x10570, + 0, + 0x1057C, + 0, + 0x1058C, + 0, + 0x10594, + 0, 0x10C80, 0, 0x118A0, @@ -124793,7 +127432,7 @@ static const UV UNI_ASCII_invlist[] = { /* for EBCDIC 037 */ # endif /* EBCDIC 037 */ static const UV UNI_ASSIGNED_invlist[] = { /* for all charsets */ - 1354, /* Number of elements */ + 1396, /* Number of elements */ 148565664, /* Version and data structure type */ 0, /* 0 if the list starts at 0; 1 if it starts at the element beyond 0 */ @@ -124822,8 +127461,6 @@ static const UV UNI_ASSIGNED_invlist[] = { /* for all charsets */ 0x5EF, 0x5F5, 0x600, - 0x61D, - 0x61E, 0x70E, 0x70F, 0x74B, @@ -124841,11 +127478,11 @@ static const UV UNI_ASSIGNED_invlist[] = { /* for all charsets */ 0x85F, 0x860, 0x86B, - 0x8A0, - 0x8B5, - 0x8B6, - 0x8C8, - 0x8D3, + 0x870, + 0x88F, + 0x890, + 0x892, + 0x898, 0x984, 0x985, 0x98D, @@ -125001,7 +127638,7 @@ static const UV UNI_ASSIGNED_invlist[] = { /* for all charsets */ 0xC29, 0xC2A, 0xC3A, - 0xC3D, + 0xC3C, 0xC45, 0xC46, 0xC49, @@ -125011,6 +127648,8 @@ static const UV UNI_ASSIGNED_invlist[] = { /* for all charsets */ 0xC57, 0xC58, 0xC5B, + 0xC5D, + 0xC5E, 0xC60, 0xC64, 0xC66, @@ -125033,7 +127672,7 @@ static const UV UNI_ASSIGNED_invlist[] = { /* for all charsets */ 0xCCE, 0xCD5, 0xCD7, - 0xCDE, + 0xCDD, 0xCDF, 0xCE0, 0xCE4, @@ -125168,10 +127807,8 @@ static const UV UNI_ASSIGNED_invlist[] = { /* for all charsets */ 0x16A0, 0x16F9, 0x1700, - 0x170D, - 0x170E, - 0x1715, - 0x1720, + 0x1716, + 0x171F, 0x1737, 0x1740, 0x1754, @@ -125188,8 +127825,6 @@ static const UV UNI_ASSIGNED_invlist[] = { /* for all charsets */ 0x17F0, 0x17FA, 0x1800, - 0x180F, - 0x1810, 0x181A, 0x1820, 0x1879, @@ -125228,11 +127863,11 @@ static const UV UNI_ASSIGNED_invlist[] = { /* for all charsets */ 0x1AA0, 0x1AAE, 0x1AB0, - 0x1AC1, + 0x1ACF, 0x1B00, - 0x1B4C, + 0x1B4D, 0x1B50, - 0x1B7D, + 0x1B7F, 0x1B80, 0x1BF4, 0x1BFC, @@ -125248,8 +127883,6 @@ static const UV UNI_ASSIGNED_invlist[] = { /* for all charsets */ 0x1CD0, 0x1CFB, 0x1D00, - 0x1DFA, - 0x1DFB, 0x1F16, 0x1F18, 0x1F1E, @@ -125290,7 +127923,7 @@ static const UV UNI_ASSIGNED_invlist[] = { /* for all charsets */ 0x2090, 0x209D, 0x20A0, - 0x20C0, + 0x20C1, 0x20D0, 0x20F1, 0x2100, @@ -125304,10 +127937,6 @@ static const UV UNI_ASSIGNED_invlist[] = { /* for all charsets */ 0x2B76, 0x2B96, 0x2B97, - 0x2C2F, - 0x2C30, - 0x2C5F, - 0x2C60, 0x2CF4, 0x2CF9, 0x2D26, @@ -125338,7 +127967,7 @@ static const UV UNI_ASSIGNED_invlist[] = { /* for all charsets */ 0x2DD8, 0x2DDF, 0x2DE0, - 0x2E53, + 0x2E5E, 0x2E80, 0x2E9A, 0x2E9B, @@ -125362,8 +127991,6 @@ static const UV UNI_ASSIGNED_invlist[] = { /* for all charsets */ 0x31F0, 0x321F, 0x3220, - 0x9FFD, - 0xA000, 0xA48D, 0xA490, 0xA4C7, @@ -125372,10 +127999,14 @@ static const UV UNI_ASSIGNED_invlist[] = { /* for all charsets */ 0xA640, 0xA6F8, 0xA700, - 0xA7C0, - 0xA7C2, 0xA7CB, - 0xA7F5, + 0xA7D0, + 0xA7D2, + 0xA7D3, + 0xA7D4, + 0xA7D5, + 0xA7DA, + 0xA7F2, 0xA82D, 0xA830, 0xA83A, @@ -125446,16 +128077,14 @@ static const UV UNI_ASSIGNED_invlist[] = { /* for all charsets */ 0xFB43, 0xFB45, 0xFB46, - 0xFBC2, + 0xFBC3, 0xFBD3, - 0xFD40, - 0xFD50, 0xFD90, 0xFD92, 0xFDC8, + 0xFDCF, + 0xFDD0, 0xFDF0, - 0xFDFE, - 0xFE00, 0xFE1A, 0xFE20, 0xFE53, @@ -125542,13 +128171,33 @@ static const UV UNI_ASSIGNED_invlist[] = { /* for all charsets */ 0x10530, 0x10564, 0x1056F, - 0x10570, + 0x1057B, + 0x1057C, + 0x1058B, + 0x1058C, + 0x10593, + 0x10594, + 0x10596, + 0x10597, + 0x105A2, + 0x105A3, + 0x105B2, + 0x105B3, + 0x105BA, + 0x105BB, + 0x105BD, 0x10600, 0x10737, 0x10740, 0x10756, 0x10760, 0x10768, + 0x10780, + 0x10786, + 0x10787, + 0x107B1, + 0x107B2, + 0x107BB, 0x10800, 0x10806, 0x10808, @@ -125635,6 +128284,8 @@ static const UV UNI_ASSIGNED_invlist[] = { /* for all charsets */ 0x10F28, 0x10F30, 0x10F5A, + 0x10F70, + 0x10F8A, 0x10FB0, 0x10FCC, 0x10FE0, @@ -125642,9 +128293,9 @@ static const UV UNI_ASSIGNED_invlist[] = { /* for all charsets */ 0x11000, 0x1104E, 0x11052, - 0x11070, + 0x11076, 0x1107F, - 0x110C2, + 0x110C3, 0x110CD, 0x110CE, 0x110D0, @@ -125728,7 +128379,7 @@ static const UV UNI_ASSIGNED_invlist[] = { /* for all charsets */ 0x11660, 0x1166D, 0x11680, - 0x116B9, + 0x116BA, 0x116C0, 0x116CA, 0x11700, @@ -125736,7 +128387,7 @@ static const UV UNI_ASSIGNED_invlist[] = { /* for all charsets */ 0x1171D, 0x1172C, 0x11730, - 0x11740, + 0x11747, 0x11800, 0x1183C, 0x118A0, @@ -125767,7 +128418,7 @@ static const UV UNI_ASSIGNED_invlist[] = { /* for all charsets */ 0x11A48, 0x11A50, 0x11AA3, - 0x11AC0, + 0x11AB0, 0x11AF9, 0x11C00, 0x11C09, @@ -125823,6 +128474,8 @@ static const UV UNI_ASSIGNED_invlist[] = { /* for all charsets */ 0x12475, 0x12480, 0x12544, + 0x12F90, + 0x12FF3, 0x13000, 0x1342F, 0x13430, @@ -125836,7 +128489,9 @@ static const UV UNI_ASSIGNED_invlist[] = { /* for all charsets */ 0x16A60, 0x16A6A, 0x16A6E, - 0x16A70, + 0x16ABF, + 0x16AC0, + 0x16ACA, 0x16AD0, 0x16AEE, 0x16AF0, @@ -125869,8 +128524,14 @@ static const UV UNI_ASSIGNED_invlist[] = { /* for all charsets */ 0x18CD6, 0x18D00, 0x18D09, + 0x1AFF0, + 0x1AFF4, + 0x1AFF5, + 0x1AFFC, + 0x1AFFD, + 0x1AFFF, 0x1B000, - 0x1B11F, + 0x1B123, 0x1B150, 0x1B153, 0x1B164, @@ -125887,12 +128548,18 @@ static const UV UNI_ASSIGNED_invlist[] = { /* for all charsets */ 0x1BC9A, 0x1BC9C, 0x1BCA4, + 0x1CF00, + 0x1CF2E, + 0x1CF30, + 0x1CF47, + 0x1CF50, + 0x1CFC4, 0x1D000, 0x1D0F6, 0x1D100, 0x1D127, 0x1D129, - 0x1D1E9, + 0x1D1EB, 0x1D200, 0x1D246, 0x1D2E0, @@ -125947,6 +128614,8 @@ static const UV UNI_ASSIGNED_invlist[] = { /* for all charsets */ 0x1DAA0, 0x1DAA1, 0x1DAB0, + 0x1DF00, + 0x1DF1F, 0x1E000, 0x1E007, 0x1E008, @@ -125965,10 +128634,20 @@ static const UV UNI_ASSIGNED_invlist[] = { /* for all charsets */ 0x1E14A, 0x1E14E, 0x1E150, + 0x1E290, + 0x1E2AF, 0x1E2C0, 0x1E2FA, 0x1E2FF, 0x1E300, + 0x1E7E0, + 0x1E7E7, + 0x1E7E8, + 0x1E7EC, + 0x1E7ED, + 0x1E7EF, + 0x1E7F0, + 0x1E7FF, 0x1E800, 0x1E8C5, 0x1E8C7, @@ -126077,7 +128756,7 @@ static const UV UNI_ASSIGNED_invlist[] = { /* for all charsets */ 0x1F266, 0x1F300, 0x1F6D8, - 0x1F6E0, + 0x1F6DD, 0x1F6ED, 0x1F6F0, 0x1F6FD, @@ -126087,6 +128766,8 @@ static const UV UNI_ASSIGNED_invlist[] = { /* for all charsets */ 0x1F7D9, 0x1F7E0, 0x1F7EC, + 0x1F7F0, + 0x1F7F1, 0x1F800, 0x1F80C, 0x1F810, @@ -126100,27 +128781,27 @@ static const UV UNI_ASSIGNED_invlist[] = { /* for all charsets */ 0x1F8B0, 0x1F8B2, 0x1F900, - 0x1F979, - 0x1F97A, - 0x1F9CC, - 0x1F9CD, 0x1FA54, 0x1FA60, 0x1FA6E, 0x1FA70, 0x1FA75, 0x1FA78, - 0x1FA7B, + 0x1FA7D, 0x1FA80, 0x1FA87, 0x1FA90, - 0x1FAA9, + 0x1FAAD, 0x1FAB0, - 0x1FAB7, + 0x1FABB, 0x1FAC0, - 0x1FAC3, + 0x1FAC6, 0x1FAD0, - 0x1FAD7, + 0x1FADA, + 0x1FAE0, + 0x1FAE8, + 0x1FAF0, + 0x1FAF7, 0x1FB00, 0x1FB93, 0x1FB94, @@ -126128,9 +128809,9 @@ static const UV UNI_ASSIGNED_invlist[] = { /* for all charsets */ 0x1FBF0, 0x1FBFA, 0x20000, - 0x2A6DE, + 0x2A6E0, 0x2A700, - 0x2B735, + 0x2B739, 0x2B740, 0x2B81E, 0x2B820, @@ -126156,7 +128837,7 @@ static const UV UNI_ASSIGNED_invlist[] = { /* for all charsets */ # if 'A' == 65 /* ASCII/Latin1 */ static const UV UNI_CASED_invlist[] = { /* for ASCII/Latin1 */ - 283, /* Number of elements */ + 311, /* Number of elements */ 148565664, /* Version and data structure type */ 1, /* 0 if the list starts at 0; 1 if it starts at the element beyond 0 */ @@ -126316,10 +128997,6 @@ static const UV UNI_CASED_invlist[] = { /* for ASCII/Latin1 */ 0x24B6, 0x24EA, 0x2C00, - 0x2C2F, - 0x2C30, - 0x2C5F, - 0x2C60, 0x2CE5, 0x2CEB, 0x2CEF, @@ -126340,9 +129017,13 @@ static const UV UNI_CASED_invlist[] = { /* for ASCII/Latin1 */ 0xA78B, 0xA78F, 0xA790, - 0xA7C0, - 0xA7C2, 0xA7CB, + 0xA7D0, + 0xA7D2, + 0xA7D3, + 0xA7D4, + 0xA7D5, + 0xA7DA, 0xA7F5, 0xA7F7, 0xA7F8, @@ -126367,6 +129048,30 @@ static const UV UNI_CASED_invlist[] = { /* for ASCII/Latin1 */ 0x104D4, 0x104D8, 0x104FC, + 0x10570, + 0x1057B, + 0x1057C, + 0x1058B, + 0x1058C, + 0x10593, + 0x10594, + 0x10596, + 0x10597, + 0x105A2, + 0x105A3, + 0x105B2, + 0x105B3, + 0x105BA, + 0x105BB, + 0x105BD, + 0x10780, + 0x10781, + 0x10783, + 0x10786, + 0x10787, + 0x107B1, + 0x107B2, + 0x107BB, 0x10C80, 0x10CB3, 0x10CC0, @@ -126435,6 +129140,10 @@ static const UV UNI_CASED_invlist[] = { /* for ASCII/Latin1 */ 0x1D7C3, 0x1D7C4, 0x1D7CC, + 0x1DF00, + 0x1DF0A, + 0x1DF0B, + 0x1DF1F, 0x1E900, 0x1E944, 0x1F130, @@ -126453,7 +129162,7 @@ static const UV UNI_CASED_invlist[] = { /* for ASCII/Latin1 */ && '$' == 91 && '@' == 124 && '`' == 121 && '\n' == 21 static const UV UNI_CASED_invlist[] = { /* for EBCDIC 1047 */ - 309, /* Number of elements */ + 337, /* Number of elements */ 148565664, /* Version and data structure type */ 1, /* 0 if the list starts at 0; 1 if it starts at the element beyond 0 */ @@ -126639,10 +129348,6 @@ static const UV UNI_CASED_invlist[] = { /* for EBCDIC 1047 */ 0x24B6, 0x24EA, 0x2C00, - 0x2C2F, - 0x2C30, - 0x2C5F, - 0x2C60, 0x2CE5, 0x2CEB, 0x2CEF, @@ -126663,9 +129368,13 @@ static const UV UNI_CASED_invlist[] = { /* for EBCDIC 1047 */ 0xA78B, 0xA78F, 0xA790, - 0xA7C0, - 0xA7C2, 0xA7CB, + 0xA7D0, + 0xA7D2, + 0xA7D3, + 0xA7D4, + 0xA7D5, + 0xA7DA, 0xA7F5, 0xA7F7, 0xA7F8, @@ -126690,6 +129399,30 @@ static const UV UNI_CASED_invlist[] = { /* for EBCDIC 1047 */ 0x104D4, 0x104D8, 0x104FC, + 0x10570, + 0x1057B, + 0x1057C, + 0x1058B, + 0x1058C, + 0x10593, + 0x10594, + 0x10596, + 0x10597, + 0x105A2, + 0x105A3, + 0x105B2, + 0x105B3, + 0x105BA, + 0x105BB, + 0x105BD, + 0x10780, + 0x10781, + 0x10783, + 0x10786, + 0x10787, + 0x107B1, + 0x107B2, + 0x107BB, 0x10C80, 0x10CB3, 0x10CC0, @@ -126758,6 +129491,10 @@ static const UV UNI_CASED_invlist[] = { /* for EBCDIC 1047 */ 0x1D7C3, 0x1D7C4, 0x1D7CC, + 0x1DF00, + 0x1DF0A, + 0x1DF0B, + 0x1DF1F, 0x1E900, 0x1E944, 0x1F130, @@ -126776,7 +129513,7 @@ static const UV UNI_CASED_invlist[] = { /* for EBCDIC 1047 */ && '$' == 91 && '@' == 124 && '`' == 121 && '\n' == 37 static const UV UNI_CASED_invlist[] = { /* for EBCDIC 037 */ - 305, /* Number of elements */ + 333, /* Number of elements */ 148565664, /* Version and data structure type */ 1, /* 0 if the list starts at 0; 1 if it starts at the element beyond 0 */ @@ -126958,10 +129695,6 @@ static const UV UNI_CASED_invlist[] = { /* for EBCDIC 037 */ 0x24B6, 0x24EA, 0x2C00, - 0x2C2F, - 0x2C30, - 0x2C5F, - 0x2C60, 0x2CE5, 0x2CEB, 0x2CEF, @@ -126982,9 +129715,13 @@ static const UV UNI_CASED_invlist[] = { /* for EBCDIC 037 */ 0xA78B, 0xA78F, 0xA790, - 0xA7C0, - 0xA7C2, 0xA7CB, + 0xA7D0, + 0xA7D2, + 0xA7D3, + 0xA7D4, + 0xA7D5, + 0xA7DA, 0xA7F5, 0xA7F7, 0xA7F8, @@ -127009,6 +129746,30 @@ static const UV UNI_CASED_invlist[] = { /* for EBCDIC 037 */ 0x104D4, 0x104D8, 0x104FC, + 0x10570, + 0x1057B, + 0x1057C, + 0x1058B, + 0x1058C, + 0x10593, + 0x10594, + 0x10596, + 0x10597, + 0x105A2, + 0x105A3, + 0x105B2, + 0x105B3, + 0x105BA, + 0x105BB, + 0x105BD, + 0x10780, + 0x10781, + 0x10783, + 0x10786, + 0x10787, + 0x107B1, + 0x107B2, + 0x107BB, 0x10C80, 0x10CB3, 0x10CC0, @@ -127077,6 +129838,10 @@ static const UV UNI_CASED_invlist[] = { /* for EBCDIC 037 */ 0x1D7C3, 0x1D7C4, 0x1D7CC, + 0x1DF00, + 0x1DF0A, + 0x1DF0B, + 0x1DF1F, 0x1E900, 0x1E944, 0x1F130, @@ -127092,7 +129857,7 @@ static const UV UNI_CASED_invlist[] = { /* for EBCDIC 037 */ # if 'A' == 65 /* ASCII/Latin1 */ static const UV UNI_CASEDLETTER_invlist[] = { /* for ASCII/Latin1 */ - 265, /* Number of elements */ + 285, /* Number of elements */ 148565664, /* Version and data structure type */ 1, /* 0 if the list starts at 0; 1 if it starts at the element beyond 0 */ @@ -127236,10 +130001,6 @@ static const UV UNI_CASEDLETTER_invlist[] = { /* for ASCII/Latin1 */ 0x2183, 0x2185, 0x2C00, - 0x2C2F, - 0x2C30, - 0x2C5F, - 0x2C60, 0x2C7C, 0x2C7E, 0x2CE5, @@ -127264,9 +130025,13 @@ static const UV UNI_CASEDLETTER_invlist[] = { /* for ASCII/Latin1 */ 0xA78B, 0xA78F, 0xA790, - 0xA7C0, - 0xA7C2, 0xA7CB, + 0xA7D0, + 0xA7D2, + 0xA7D3, + 0xA7D4, + 0xA7D5, + 0xA7DA, 0xA7F5, 0xA7F7, 0xA7FA, @@ -127291,6 +130056,22 @@ static const UV UNI_CASEDLETTER_invlist[] = { /* for ASCII/Latin1 */ 0x104D4, 0x104D8, 0x104FC, + 0x10570, + 0x1057B, + 0x1057C, + 0x1058B, + 0x1058C, + 0x10593, + 0x10594, + 0x10596, + 0x10597, + 0x105A2, + 0x105A3, + 0x105B2, + 0x105B3, + 0x105BA, + 0x105BB, + 0x105BD, 0x10C80, 0x10CB3, 0x10CC0, @@ -127359,6 +130140,10 @@ static const UV UNI_CASEDLETTER_invlist[] = { /* for ASCII/Latin1 */ 0x1D7C3, 0x1D7C4, 0x1D7CC, + 0x1DF00, + 0x1DF0A, + 0x1DF0B, + 0x1DF1F, 0x1E900, 0x1E944 }; @@ -127371,7 +130156,7 @@ static const UV UNI_CASEDLETTER_invlist[] = { /* for ASCII/Latin1 */ && '$' == 91 && '@' == 124 && '`' == 121 && '\n' == 21 static const UV UNI_CASEDLETTER_invlist[] = { /* for EBCDIC 1047 */ - 297, /* Number of elements */ + 317, /* Number of elements */ 148565664, /* Version and data structure type */ 1, /* 0 if the list starts at 0; 1 if it starts at the element beyond 0 */ @@ -127547,10 +130332,6 @@ static const UV UNI_CASEDLETTER_invlist[] = { /* for EBCDIC 1047 */ 0x2183, 0x2185, 0x2C00, - 0x2C2F, - 0x2C30, - 0x2C5F, - 0x2C60, 0x2C7C, 0x2C7E, 0x2CE5, @@ -127575,9 +130356,13 @@ static const UV UNI_CASEDLETTER_invlist[] = { /* for EBCDIC 1047 */ 0xA78B, 0xA78F, 0xA790, - 0xA7C0, - 0xA7C2, 0xA7CB, + 0xA7D0, + 0xA7D2, + 0xA7D3, + 0xA7D4, + 0xA7D5, + 0xA7DA, 0xA7F5, 0xA7F7, 0xA7FA, @@ -127602,6 +130387,22 @@ static const UV UNI_CASEDLETTER_invlist[] = { /* for EBCDIC 1047 */ 0x104D4, 0x104D8, 0x104FC, + 0x10570, + 0x1057B, + 0x1057C, + 0x1058B, + 0x1058C, + 0x10593, + 0x10594, + 0x10596, + 0x10597, + 0x105A2, + 0x105A3, + 0x105B2, + 0x105B3, + 0x105BA, + 0x105BB, + 0x105BD, 0x10C80, 0x10CB3, 0x10CC0, @@ -127670,6 +130471,10 @@ static const UV UNI_CASEDLETTER_invlist[] = { /* for EBCDIC 1047 */ 0x1D7C3, 0x1D7C4, 0x1D7CC, + 0x1DF00, + 0x1DF0A, + 0x1DF0B, + 0x1DF1F, 0x1E900, 0x1E944 }; @@ -127682,7 +130487,7 @@ static const UV UNI_CASEDLETTER_invlist[] = { /* for EBCDIC 1047 */ && '$' == 91 && '@' == 124 && '`' == 121 && '\n' == 37 static const UV UNI_CASEDLETTER_invlist[] = { /* for EBCDIC 037 */ - 293, /* Number of elements */ + 313, /* Number of elements */ 148565664, /* Version and data structure type */ 1, /* 0 if the list starts at 0; 1 if it starts at the element beyond 0 */ @@ -127854,10 +130659,6 @@ static const UV UNI_CASEDLETTER_invlist[] = { /* for EBCDIC 037 */ 0x2183, 0x2185, 0x2C00, - 0x2C2F, - 0x2C30, - 0x2C5F, - 0x2C60, 0x2C7C, 0x2C7E, 0x2CE5, @@ -127882,9 +130683,13 @@ static const UV UNI_CASEDLETTER_invlist[] = { /* for EBCDIC 037 */ 0xA78B, 0xA78F, 0xA790, - 0xA7C0, - 0xA7C2, 0xA7CB, + 0xA7D0, + 0xA7D2, + 0xA7D3, + 0xA7D4, + 0xA7D5, + 0xA7DA, 0xA7F5, 0xA7F7, 0xA7FA, @@ -127909,6 +130714,22 @@ static const UV UNI_CASEDLETTER_invlist[] = { /* for EBCDIC 037 */ 0x104D4, 0x104D8, 0x104FC, + 0x10570, + 0x1057B, + 0x1057C, + 0x1058B, + 0x1058C, + 0x10593, + 0x10594, + 0x10596, + 0x10597, + 0x105A2, + 0x105A3, + 0x105B2, + 0x105B3, + 0x105BA, + 0x105BB, + 0x105BD, 0x10C80, 0x10CB3, 0x10CC0, @@ -127977,6 +130798,10 @@ static const UV UNI_CASEDLETTER_invlist[] = { /* for EBCDIC 037 */ 0x1D7C3, 0x1D7C4, 0x1D7CC, + 0x1DF00, + 0x1DF0A, + 0x1DF0B, + 0x1DF1F, 0x1E900, 0x1E944 }; @@ -127986,7 +130811,7 @@ static const UV UNI_CASEDLETTER_invlist[] = { /* for EBCDIC 037 */ # if 'A' == 65 /* ASCII/Latin1 */ static const UV UNI_LOWERCASELETTER_invlist[] = { /* for ASCII/Latin1 */ - 1291, /* Number of elements */ + 1315, /* Number of elements */ 148565664, /* Version and data structure type */ 1, /* 0 if the list starts at 0; 1 if it starts at the element beyond 0 */ @@ -128854,7 +131679,7 @@ static const UV UNI_LOWERCASELETTER_invlist[] = { /* for ASCII/Latin1 */ 0x2184, 0x2185, 0x2C30, - 0x2C5F, + 0x2C60, 0x2C61, 0x2C62, 0x2C65, @@ -129191,12 +132016,24 @@ static const UV UNI_LOWERCASELETTER_invlist[] = { /* for ASCII/Latin1 */ 0xA7BE, 0xA7BF, 0xA7C0, + 0xA7C1, + 0xA7C2, 0xA7C3, 0xA7C4, 0xA7C8, 0xA7C9, 0xA7CA, 0xA7CB, + 0xA7D1, + 0xA7D2, + 0xA7D3, + 0xA7D4, + 0xA7D5, + 0xA7D6, + 0xA7D7, + 0xA7D8, + 0xA7D9, + 0xA7DA, 0xA7F6, 0xA7F7, 0xA7FA, @@ -129217,6 +132054,14 @@ static const UV UNI_LOWERCASELETTER_invlist[] = { /* for ASCII/Latin1 */ 0x10450, 0x104D8, 0x104FC, + 0x10597, + 0x105A2, + 0x105A3, + 0x105B2, + 0x105B3, + 0x105BA, + 0x105BB, + 0x105BD, 0x10CC0, 0x10CF3, 0x118C0, @@ -129279,6 +132124,10 @@ static const UV UNI_LOWERCASELETTER_invlist[] = { /* for ASCII/Latin1 */ 0x1D7CA, 0x1D7CB, 0x1D7CC, + 0x1DF00, + 0x1DF0A, + 0x1DF0B, + 0x1DF1F, 0x1E922, 0x1E944 }; @@ -129291,7 +132140,7 @@ static const UV UNI_LOWERCASELETTER_invlist[] = { /* for ASCII/Latin1 */ && '$' == 91 && '@' == 124 && '`' == 121 && '\n' == 21 static const UV UNI_LOWERCASELETTER_invlist[] = { /* for EBCDIC 1047 */ - 1305, /* Number of elements */ + 1329, /* Number of elements */ 148565664, /* Version and data structure type */ 1, /* 0 if the list starts at 0; 1 if it starts at the element beyond 0 */ @@ -130173,7 +133022,7 @@ static const UV UNI_LOWERCASELETTER_invlist[] = { /* for EBCDIC 1047 */ 0x2184, 0x2185, 0x2C30, - 0x2C5F, + 0x2C60, 0x2C61, 0x2C62, 0x2C65, @@ -130510,12 +133359,24 @@ static const UV UNI_LOWERCASELETTER_invlist[] = { /* for EBCDIC 1047 */ 0xA7BE, 0xA7BF, 0xA7C0, + 0xA7C1, + 0xA7C2, 0xA7C3, 0xA7C4, 0xA7C8, 0xA7C9, 0xA7CA, 0xA7CB, + 0xA7D1, + 0xA7D2, + 0xA7D3, + 0xA7D4, + 0xA7D5, + 0xA7D6, + 0xA7D7, + 0xA7D8, + 0xA7D9, + 0xA7DA, 0xA7F6, 0xA7F7, 0xA7FA, @@ -130536,6 +133397,14 @@ static const UV UNI_LOWERCASELETTER_invlist[] = { /* for EBCDIC 1047 */ 0x10450, 0x104D8, 0x104FC, + 0x10597, + 0x105A2, + 0x105A3, + 0x105B2, + 0x105B3, + 0x105BA, + 0x105BB, + 0x105BD, 0x10CC0, 0x10CF3, 0x118C0, @@ -130598,6 +133467,10 @@ static const UV UNI_LOWERCASELETTER_invlist[] = { /* for EBCDIC 1047 */ 0x1D7CA, 0x1D7CB, 0x1D7CC, + 0x1DF00, + 0x1DF0A, + 0x1DF0B, + 0x1DF1F, 0x1E922, 0x1E944 }; @@ -130610,7 +133483,7 @@ static const UV UNI_LOWERCASELETTER_invlist[] = { /* for EBCDIC 1047 */ && '$' == 91 && '@' == 124 && '`' == 121 && '\n' == 37 static const UV UNI_LOWERCASELETTER_invlist[] = { /* for EBCDIC 037 */ - 1305, /* Number of elements */ + 1329, /* Number of elements */ 148565664, /* Version and data structure type */ 1, /* 0 if the list starts at 0; 1 if it starts at the element beyond 0 */ @@ -131492,7 +134365,7 @@ static const UV UNI_LOWERCASELETTER_invlist[] = { /* for EBCDIC 037 */ 0x2184, 0x2185, 0x2C30, - 0x2C5F, + 0x2C60, 0x2C61, 0x2C62, 0x2C65, @@ -131829,12 +134702,24 @@ static const UV UNI_LOWERCASELETTER_invlist[] = { /* for EBCDIC 037 */ 0xA7BE, 0xA7BF, 0xA7C0, + 0xA7C1, + 0xA7C2, 0xA7C3, 0xA7C4, 0xA7C8, 0xA7C9, 0xA7CA, 0xA7CB, + 0xA7D1, + 0xA7D2, + 0xA7D3, + 0xA7D4, + 0xA7D5, + 0xA7D6, + 0xA7D7, + 0xA7D8, + 0xA7D9, + 0xA7DA, 0xA7F6, 0xA7F7, 0xA7FA, @@ -131855,6 +134740,14 @@ static const UV UNI_LOWERCASELETTER_invlist[] = { /* for EBCDIC 037 */ 0x10450, 0x104D8, 0x104FC, + 0x10597, + 0x105A2, + 0x105A3, + 0x105B2, + 0x105B3, + 0x105BA, + 0x105BB, + 0x105BD, 0x10CC0, 0x10CF3, 0x118C0, @@ -131917,6 +134810,10 @@ static const UV UNI_LOWERCASELETTER_invlist[] = { /* for EBCDIC 037 */ 0x1D7CA, 0x1D7CB, 0x1D7CC, + 0x1DF00, + 0x1DF0A, + 0x1DF0B, + 0x1DF1F, 0x1E922, 0x1E944 }; @@ -132913,7 +135810,7 @@ static const UV UNI_TITLE_invlist[] = { /* for all charsets */ # if 'A' == 65 /* ASCII/Latin1 */ static const UV UNI_UPPERCASELETTER_invlist[] = { /* for ASCII/Latin1 */ - 1277, /* Number of elements */ + 1293, /* Number of elements */ 148565664, /* Version and data structure type */ 1, /* 0 if the list starts at 0; 1 if it starts at the element beyond 0 */ @@ -133781,7 +136678,7 @@ static const UV UNI_UPPERCASELETTER_invlist[] = { /* for ASCII/Latin1 */ 0x2183, 0x2184, 0x2C00, - 0x2C2F, + 0x2C30, 0x2C60, 0x2C61, 0x2C62, @@ -134110,12 +137007,20 @@ static const UV UNI_UPPERCASELETTER_invlist[] = { /* for ASCII/Latin1 */ 0xA7BD, 0xA7BE, 0xA7BF, + 0xA7C0, + 0xA7C1, 0xA7C2, 0xA7C3, 0xA7C4, 0xA7C8, 0xA7C9, 0xA7CA, + 0xA7D0, + 0xA7D1, + 0xA7D6, + 0xA7D7, + 0xA7D8, + 0xA7D9, 0xA7F5, 0xA7F6, 0xFF21, @@ -134124,6 +137029,14 @@ static const UV UNI_UPPERCASELETTER_invlist[] = { /* for ASCII/Latin1 */ 0x10428, 0x104B0, 0x104D4, + 0x10570, + 0x1057B, + 0x1057C, + 0x1058B, + 0x1058C, + 0x10593, + 0x10594, + 0x10596, 0x10C80, 0x10CB3, 0x118A0, @@ -134204,7 +137117,7 @@ static const UV UNI_UPPERCASELETTER_invlist[] = { /* for ASCII/Latin1 */ && '$' == 91 && '@' == 124 && '`' == 121 && '\n' == 21 static const UV UNI_UPPERCASELETTER_invlist[] = { /* for EBCDIC 1047 */ - 1295, /* Number of elements */ + 1311, /* Number of elements */ 148565664, /* Version and data structure type */ 1, /* 0 if the list starts at 0; 1 if it starts at the element beyond 0 */ @@ -135090,7 +138003,7 @@ static const UV UNI_UPPERCASELETTER_invlist[] = { /* for EBCDIC 1047 */ 0x2183, 0x2184, 0x2C00, - 0x2C2F, + 0x2C30, 0x2C60, 0x2C61, 0x2C62, @@ -135419,12 +138332,20 @@ static const UV UNI_UPPERCASELETTER_invlist[] = { /* for EBCDIC 1047 */ 0xA7BD, 0xA7BE, 0xA7BF, + 0xA7C0, + 0xA7C1, 0xA7C2, 0xA7C3, 0xA7C4, 0xA7C8, 0xA7C9, 0xA7CA, + 0xA7D0, + 0xA7D1, + 0xA7D6, + 0xA7D7, + 0xA7D8, + 0xA7D9, 0xA7F5, 0xA7F6, 0xFF21, @@ -135433,6 +138354,14 @@ static const UV UNI_UPPERCASELETTER_invlist[] = { /* for EBCDIC 1047 */ 0x10428, 0x104B0, 0x104D4, + 0x10570, + 0x1057B, + 0x1057C, + 0x1058B, + 0x1058C, + 0x10593, + 0x10594, + 0x10596, 0x10C80, 0x10CB3, 0x118A0, @@ -135513,7 +138442,7 @@ static const UV UNI_UPPERCASELETTER_invlist[] = { /* for EBCDIC 1047 */ && '$' == 91 && '@' == 124 && '`' == 121 && '\n' == 37 static const UV UNI_UPPERCASELETTER_invlist[] = { /* for EBCDIC 037 */ - 1291, /* Number of elements */ + 1307, /* Number of elements */ 148565664, /* Version and data structure type */ 1, /* 0 if the list starts at 0; 1 if it starts at the element beyond 0 */ @@ -136395,7 +139324,7 @@ static const UV UNI_UPPERCASELETTER_invlist[] = { /* for EBCDIC 037 */ 0x2183, 0x2184, 0x2C00, - 0x2C2F, + 0x2C30, 0x2C60, 0x2C61, 0x2C62, @@ -136724,12 +139653,20 @@ static const UV UNI_UPPERCASELETTER_invlist[] = { /* for EBCDIC 037 */ 0xA7BD, 0xA7BE, 0xA7BF, + 0xA7C0, + 0xA7C1, 0xA7C2, 0xA7C3, 0xA7C4, 0xA7C8, 0xA7C9, 0xA7CA, + 0xA7D0, + 0xA7D1, + 0xA7D6, + 0xA7D7, + 0xA7D8, + 0xA7D9, 0xA7F5, 0xA7F6, 0xFF21, @@ -136738,6 +139675,14 @@ static const UV UNI_UPPERCASELETTER_invlist[] = { /* for EBCDIC 037 */ 0x10428, 0x104B0, 0x104D4, + 0x10570, + 0x1057B, + 0x1057C, + 0x1058B, + 0x1058C, + 0x10593, + 0x10594, + 0x10596, 0x10C80, 0x10CB3, 0x118A0, @@ -136879,7 +139824,7 @@ static const UV UNI_VERTSPACE_invlist[] = { /* for EBCDIC 037 */ # if 'A' == 65 /* ASCII/Latin1 */ static const UV UNI_XPOSIXALNUM_invlist[] = { /* for ASCII/Latin1 */ - 1465, /* Number of elements */ + 1521, /* Number of elements */ 148565664, /* Version and data structure type */ 1, /* 0 if the list starts at 0; 1 if it starts at the element beyond 0 */ @@ -136988,10 +139933,12 @@ static const UV UNI_XPOSIXALNUM_invlist[] = { /* for ASCII/Latin1 */ 0x859, 0x860, 0x86B, + 0x870, + 0x888, + 0x889, + 0x88F, 0x8A0, - 0x8B5, - 0x8B6, - 0x8C8, + 0x8CA, 0x8D4, 0x8E0, 0x8E3, @@ -137178,6 +140125,8 @@ static const UV UNI_XPOSIXALNUM_invlist[] = { /* for ASCII/Latin1 */ 0xC57, 0xC58, 0xC5B, + 0xC5D, + 0xC5E, 0xC60, 0xC64, 0xC66, @@ -137202,7 +140151,7 @@ static const UV UNI_XPOSIXALNUM_invlist[] = { /* for ASCII/Latin1 */ 0xCCD, 0xCD5, 0xCD7, - 0xCDE, + 0xCDD, 0xCDF, 0xCE0, 0xCE4, @@ -137365,10 +140314,8 @@ static const UV UNI_XPOSIXALNUM_invlist[] = { /* for ASCII/Latin1 */ 0x16EE, 0x16F9, 0x1700, - 0x170D, - 0x170E, 0x1714, - 0x1720, + 0x171F, 0x1734, 0x1740, 0x1754, @@ -137426,12 +140373,14 @@ static const UV UNI_XPOSIXALNUM_invlist[] = { /* for ASCII/Latin1 */ 0x1AA8, 0x1ABF, 0x1AC1, + 0x1ACC, + 0x1ACF, 0x1B00, 0x1B34, 0x1B35, 0x1B44, 0x1B45, - 0x1B4C, + 0x1B4D, 0x1B50, 0x1B5A, 0x1B80, @@ -137539,10 +140488,6 @@ static const UV UNI_XPOSIXALNUM_invlist[] = { /* for ASCII/Latin1 */ 0x24B6, 0x24EA, 0x2C00, - 0x2C2F, - 0x2C30, - 0x2C5F, - 0x2C60, 0x2CE5, 0x2CEB, 0x2CEF, @@ -137607,8 +140552,6 @@ static const UV UNI_XPOSIXALNUM_invlist[] = { /* for ASCII/Latin1 */ 0x3400, 0x4DC0, 0x4E00, - 0x9FFD, - 0xA000, 0xA48D, 0xA4D0, 0xA4FE, @@ -137627,10 +140570,14 @@ static const UV UNI_XPOSIXALNUM_invlist[] = { /* for ASCII/Latin1 */ 0xA722, 0xA789, 0xA78B, - 0xA7C0, - 0xA7C2, 0xA7CB, - 0xA7F5, + 0xA7D0, + 0xA7D2, + 0xA7D3, + 0xA7D4, + 0xA7D5, + 0xA7DA, + 0xA7F2, 0xA806, 0xA807, 0xA828, @@ -137800,12 +140747,34 @@ static const UV UNI_XPOSIXALNUM_invlist[] = { /* for ASCII/Latin1 */ 0x10528, 0x10530, 0x10564, + 0x10570, + 0x1057B, + 0x1057C, + 0x1058B, + 0x1058C, + 0x10593, + 0x10594, + 0x10596, + 0x10597, + 0x105A2, + 0x105A3, + 0x105B2, + 0x105B3, + 0x105BA, + 0x105BB, + 0x105BD, 0x10600, 0x10737, 0x10740, 0x10756, 0x10760, 0x10768, + 0x10780, + 0x10786, + 0x10787, + 0x107B1, + 0x107B2, + 0x107BB, 0x10800, 0x10806, 0x10808, @@ -137882,6 +140851,8 @@ static const UV UNI_XPOSIXALNUM_invlist[] = { /* for ASCII/Latin1 */ 0x10F28, 0x10F30, 0x10F46, + 0x10F70, + 0x10F82, 0x10FB0, 0x10FC5, 0x10FE0, @@ -137890,8 +140861,12 @@ static const UV UNI_XPOSIXALNUM_invlist[] = { /* for ASCII/Latin1 */ 0x11046, 0x11066, 0x11070, + 0x11071, + 0x11076, 0x11082, 0x110B9, + 0x110C2, + 0x110C3, 0x110D0, 0x110E9, 0x110F0, @@ -138006,6 +140981,8 @@ static const UV UNI_XPOSIXALNUM_invlist[] = { /* for ASCII/Latin1 */ 0x1172B, 0x11730, 0x1173A, + 0x11740, + 0x11747, 0x11800, 0x11839, 0x118A0, @@ -138046,7 +141023,7 @@ static const UV UNI_XPOSIXALNUM_invlist[] = { /* for ASCII/Latin1 */ 0x11A98, 0x11A9D, 0x11A9E, - 0x11AC0, + 0x11AB0, 0x11AF9, 0x11C00, 0x11C09, @@ -138106,6 +141083,8 @@ static const UV UNI_XPOSIXALNUM_invlist[] = { /* for ASCII/Latin1 */ 0x1246F, 0x12480, 0x12544, + 0x12F90, + 0x12FF1, 0x13000, 0x1342F, 0x14400, @@ -138116,6 +141095,10 @@ static const UV UNI_XPOSIXALNUM_invlist[] = { /* for ASCII/Latin1 */ 0x16A5F, 0x16A60, 0x16A6A, + 0x16A70, + 0x16ABF, + 0x16AC0, + 0x16ACA, 0x16AD0, 0x16AEE, 0x16B00, @@ -138148,8 +141131,14 @@ static const UV UNI_XPOSIXALNUM_invlist[] = { /* for ASCII/Latin1 */ 0x18CD6, 0x18D00, 0x18D09, + 0x1AFF0, + 0x1AFF4, + 0x1AFF5, + 0x1AFFC, + 0x1AFFD, + 0x1AFFF, 0x1B000, - 0x1B11F, + 0x1B123, 0x1B150, 0x1B153, 0x1B164, @@ -138228,6 +141217,8 @@ static const UV UNI_XPOSIXALNUM_invlist[] = { /* for ASCII/Latin1 */ 0x1D7CC, 0x1D7CE, 0x1D800, + 0x1DF00, + 0x1DF1F, 0x1E000, 0x1E007, 0x1E008, @@ -138246,10 +141237,20 @@ static const UV UNI_XPOSIXALNUM_invlist[] = { /* for ASCII/Latin1 */ 0x1E14A, 0x1E14E, 0x1E14F, + 0x1E290, + 0x1E2AE, 0x1E2C0, 0x1E2EC, 0x1E2F0, 0x1E2FA, + 0x1E7E0, + 0x1E7E7, + 0x1E7E8, + 0x1E7EC, + 0x1E7ED, + 0x1E7EF, + 0x1E7F0, + 0x1E7FF, 0x1E800, 0x1E8C5, 0x1E900, @@ -138335,9 +141336,9 @@ static const UV UNI_XPOSIXALNUM_invlist[] = { /* for ASCII/Latin1 */ 0x1FBF0, 0x1FBFA, 0x20000, - 0x2A6DE, + 0x2A6E0, 0x2A700, - 0x2B735, + 0x2B739, 0x2B740, 0x2B81E, 0x2B820, @@ -138358,7 +141359,7 @@ static const UV UNI_XPOSIXALNUM_invlist[] = { /* for ASCII/Latin1 */ && '$' == 91 && '@' == 124 && '`' == 121 && '\n' == 21 static const UV UNI_XPOSIXALNUM_invlist[] = { /* for EBCDIC 1047 */ - 1489, /* Number of elements */ + 1545, /* Number of elements */ 148565664, /* Version and data structure type */ 1, /* 0 if the list starts at 0; 1 if it starts at the element beyond 0 */ @@ -138491,10 +141492,12 @@ static const UV UNI_XPOSIXALNUM_invlist[] = { /* for EBCDIC 1047 */ 0x859, 0x860, 0x86B, + 0x870, + 0x888, + 0x889, + 0x88F, 0x8A0, - 0x8B5, - 0x8B6, - 0x8C8, + 0x8CA, 0x8D4, 0x8E0, 0x8E3, @@ -138681,6 +141684,8 @@ static const UV UNI_XPOSIXALNUM_invlist[] = { /* for EBCDIC 1047 */ 0xC57, 0xC58, 0xC5B, + 0xC5D, + 0xC5E, 0xC60, 0xC64, 0xC66, @@ -138705,7 +141710,7 @@ static const UV UNI_XPOSIXALNUM_invlist[] = { /* for EBCDIC 1047 */ 0xCCD, 0xCD5, 0xCD7, - 0xCDE, + 0xCDD, 0xCDF, 0xCE0, 0xCE4, @@ -138868,10 +141873,8 @@ static const UV UNI_XPOSIXALNUM_invlist[] = { /* for EBCDIC 1047 */ 0x16EE, 0x16F9, 0x1700, - 0x170D, - 0x170E, 0x1714, - 0x1720, + 0x171F, 0x1734, 0x1740, 0x1754, @@ -138929,12 +141932,14 @@ static const UV UNI_XPOSIXALNUM_invlist[] = { /* for EBCDIC 1047 */ 0x1AA8, 0x1ABF, 0x1AC1, + 0x1ACC, + 0x1ACF, 0x1B00, 0x1B34, 0x1B35, 0x1B44, 0x1B45, - 0x1B4C, + 0x1B4D, 0x1B50, 0x1B5A, 0x1B80, @@ -139042,10 +142047,6 @@ static const UV UNI_XPOSIXALNUM_invlist[] = { /* for EBCDIC 1047 */ 0x24B6, 0x24EA, 0x2C00, - 0x2C2F, - 0x2C30, - 0x2C5F, - 0x2C60, 0x2CE5, 0x2CEB, 0x2CEF, @@ -139110,8 +142111,6 @@ static const UV UNI_XPOSIXALNUM_invlist[] = { /* for EBCDIC 1047 */ 0x3400, 0x4DC0, 0x4E00, - 0x9FFD, - 0xA000, 0xA48D, 0xA4D0, 0xA4FE, @@ -139130,10 +142129,14 @@ static const UV UNI_XPOSIXALNUM_invlist[] = { /* for EBCDIC 1047 */ 0xA722, 0xA789, 0xA78B, - 0xA7C0, - 0xA7C2, 0xA7CB, - 0xA7F5, + 0xA7D0, + 0xA7D2, + 0xA7D3, + 0xA7D4, + 0xA7D5, + 0xA7DA, + 0xA7F2, 0xA806, 0xA807, 0xA828, @@ -139303,12 +142306,34 @@ static const UV UNI_XPOSIXALNUM_invlist[] = { /* for EBCDIC 1047 */ 0x10528, 0x10530, 0x10564, + 0x10570, + 0x1057B, + 0x1057C, + 0x1058B, + 0x1058C, + 0x10593, + 0x10594, + 0x10596, + 0x10597, + 0x105A2, + 0x105A3, + 0x105B2, + 0x105B3, + 0x105BA, + 0x105BB, + 0x105BD, 0x10600, 0x10737, 0x10740, 0x10756, 0x10760, 0x10768, + 0x10780, + 0x10786, + 0x10787, + 0x107B1, + 0x107B2, + 0x107BB, 0x10800, 0x10806, 0x10808, @@ -139385,6 +142410,8 @@ static const UV UNI_XPOSIXALNUM_invlist[] = { /* for EBCDIC 1047 */ 0x10F28, 0x10F30, 0x10F46, + 0x10F70, + 0x10F82, 0x10FB0, 0x10FC5, 0x10FE0, @@ -139393,8 +142420,12 @@ static const UV UNI_XPOSIXALNUM_invlist[] = { /* for EBCDIC 1047 */ 0x11046, 0x11066, 0x11070, + 0x11071, + 0x11076, 0x11082, 0x110B9, + 0x110C2, + 0x110C3, 0x110D0, 0x110E9, 0x110F0, @@ -139509,6 +142540,8 @@ static const UV UNI_XPOSIXALNUM_invlist[] = { /* for EBCDIC 1047 */ 0x1172B, 0x11730, 0x1173A, + 0x11740, + 0x11747, 0x11800, 0x11839, 0x118A0, @@ -139549,7 +142582,7 @@ static const UV UNI_XPOSIXALNUM_invlist[] = { /* for EBCDIC 1047 */ 0x11A98, 0x11A9D, 0x11A9E, - 0x11AC0, + 0x11AB0, 0x11AF9, 0x11C00, 0x11C09, @@ -139609,6 +142642,8 @@ static const UV UNI_XPOSIXALNUM_invlist[] = { /* for EBCDIC 1047 */ 0x1246F, 0x12480, 0x12544, + 0x12F90, + 0x12FF1, 0x13000, 0x1342F, 0x14400, @@ -139619,6 +142654,10 @@ static const UV UNI_XPOSIXALNUM_invlist[] = { /* for EBCDIC 1047 */ 0x16A5F, 0x16A60, 0x16A6A, + 0x16A70, + 0x16ABF, + 0x16AC0, + 0x16ACA, 0x16AD0, 0x16AEE, 0x16B00, @@ -139651,8 +142690,14 @@ static const UV UNI_XPOSIXALNUM_invlist[] = { /* for EBCDIC 1047 */ 0x18CD6, 0x18D00, 0x18D09, + 0x1AFF0, + 0x1AFF4, + 0x1AFF5, + 0x1AFFC, + 0x1AFFD, + 0x1AFFF, 0x1B000, - 0x1B11F, + 0x1B123, 0x1B150, 0x1B153, 0x1B164, @@ -139731,6 +142776,8 @@ static const UV UNI_XPOSIXALNUM_invlist[] = { /* for EBCDIC 1047 */ 0x1D7CC, 0x1D7CE, 0x1D800, + 0x1DF00, + 0x1DF1F, 0x1E000, 0x1E007, 0x1E008, @@ -139749,10 +142796,20 @@ static const UV UNI_XPOSIXALNUM_invlist[] = { /* for EBCDIC 1047 */ 0x1E14A, 0x1E14E, 0x1E14F, + 0x1E290, + 0x1E2AE, 0x1E2C0, 0x1E2EC, 0x1E2F0, 0x1E2FA, + 0x1E7E0, + 0x1E7E7, + 0x1E7E8, + 0x1E7EC, + 0x1E7ED, + 0x1E7EF, + 0x1E7F0, + 0x1E7FF, 0x1E800, 0x1E8C5, 0x1E900, @@ -139838,9 +142895,9 @@ static const UV UNI_XPOSIXALNUM_invlist[] = { /* for EBCDIC 1047 */ 0x1FBF0, 0x1FBFA, 0x20000, - 0x2A6DE, + 0x2A6E0, 0x2A700, - 0x2B735, + 0x2B739, 0x2B740, 0x2B81E, 0x2B820, @@ -139861,7 +142918,7 @@ static const UV UNI_XPOSIXALNUM_invlist[] = { /* for EBCDIC 1047 */ && '$' == 91 && '@' == 124 && '`' == 121 && '\n' == 37 static const UV UNI_XPOSIXALNUM_invlist[] = { /* for EBCDIC 037 */ - 1485, /* Number of elements */ + 1541, /* Number of elements */ 148565664, /* Version and data structure type */ 1, /* 0 if the list starts at 0; 1 if it starts at the element beyond 0 */ @@ -139990,10 +143047,12 @@ static const UV UNI_XPOSIXALNUM_invlist[] = { /* for EBCDIC 037 */ 0x859, 0x860, 0x86B, + 0x870, + 0x888, + 0x889, + 0x88F, 0x8A0, - 0x8B5, - 0x8B6, - 0x8C8, + 0x8CA, 0x8D4, 0x8E0, 0x8E3, @@ -140180,6 +143239,8 @@ static const UV UNI_XPOSIXALNUM_invlist[] = { /* for EBCDIC 037 */ 0xC57, 0xC58, 0xC5B, + 0xC5D, + 0xC5E, 0xC60, 0xC64, 0xC66, @@ -140204,7 +143265,7 @@ static const UV UNI_XPOSIXALNUM_invlist[] = { /* for EBCDIC 037 */ 0xCCD, 0xCD5, 0xCD7, - 0xCDE, + 0xCDD, 0xCDF, 0xCE0, 0xCE4, @@ -140367,10 +143428,8 @@ static const UV UNI_XPOSIXALNUM_invlist[] = { /* for EBCDIC 037 */ 0x16EE, 0x16F9, 0x1700, - 0x170D, - 0x170E, 0x1714, - 0x1720, + 0x171F, 0x1734, 0x1740, 0x1754, @@ -140428,12 +143487,14 @@ static const UV UNI_XPOSIXALNUM_invlist[] = { /* for EBCDIC 037 */ 0x1AA8, 0x1ABF, 0x1AC1, + 0x1ACC, + 0x1ACF, 0x1B00, 0x1B34, 0x1B35, 0x1B44, 0x1B45, - 0x1B4C, + 0x1B4D, 0x1B50, 0x1B5A, 0x1B80, @@ -140541,10 +143602,6 @@ static const UV UNI_XPOSIXALNUM_invlist[] = { /* for EBCDIC 037 */ 0x24B6, 0x24EA, 0x2C00, - 0x2C2F, - 0x2C30, - 0x2C5F, - 0x2C60, 0x2CE5, 0x2CEB, 0x2CEF, @@ -140609,8 +143666,6 @@ static const UV UNI_XPOSIXALNUM_invlist[] = { /* for EBCDIC 037 */ 0x3400, 0x4DC0, 0x4E00, - 0x9FFD, - 0xA000, 0xA48D, 0xA4D0, 0xA4FE, @@ -140629,10 +143684,14 @@ static const UV UNI_XPOSIXALNUM_invlist[] = { /* for EBCDIC 037 */ 0xA722, 0xA789, 0xA78B, - 0xA7C0, - 0xA7C2, 0xA7CB, - 0xA7F5, + 0xA7D0, + 0xA7D2, + 0xA7D3, + 0xA7D4, + 0xA7D5, + 0xA7DA, + 0xA7F2, 0xA806, 0xA807, 0xA828, @@ -140802,12 +143861,34 @@ static const UV UNI_XPOSIXALNUM_invlist[] = { /* for EBCDIC 037 */ 0x10528, 0x10530, 0x10564, + 0x10570, + 0x1057B, + 0x1057C, + 0x1058B, + 0x1058C, + 0x10593, + 0x10594, + 0x10596, + 0x10597, + 0x105A2, + 0x105A3, + 0x105B2, + 0x105B3, + 0x105BA, + 0x105BB, + 0x105BD, 0x10600, 0x10737, 0x10740, 0x10756, 0x10760, 0x10768, + 0x10780, + 0x10786, + 0x10787, + 0x107B1, + 0x107B2, + 0x107BB, 0x10800, 0x10806, 0x10808, @@ -140884,6 +143965,8 @@ static const UV UNI_XPOSIXALNUM_invlist[] = { /* for EBCDIC 037 */ 0x10F28, 0x10F30, 0x10F46, + 0x10F70, + 0x10F82, 0x10FB0, 0x10FC5, 0x10FE0, @@ -140892,8 +143975,12 @@ static const UV UNI_XPOSIXALNUM_invlist[] = { /* for EBCDIC 037 */ 0x11046, 0x11066, 0x11070, + 0x11071, + 0x11076, 0x11082, 0x110B9, + 0x110C2, + 0x110C3, 0x110D0, 0x110E9, 0x110F0, @@ -141008,6 +144095,8 @@ static const UV UNI_XPOSIXALNUM_invlist[] = { /* for EBCDIC 037 */ 0x1172B, 0x11730, 0x1173A, + 0x11740, + 0x11747, 0x11800, 0x11839, 0x118A0, @@ -141048,7 +144137,7 @@ static const UV UNI_XPOSIXALNUM_invlist[] = { /* for EBCDIC 037 */ 0x11A98, 0x11A9D, 0x11A9E, - 0x11AC0, + 0x11AB0, 0x11AF9, 0x11C00, 0x11C09, @@ -141108,6 +144197,8 @@ static const UV UNI_XPOSIXALNUM_invlist[] = { /* for EBCDIC 037 */ 0x1246F, 0x12480, 0x12544, + 0x12F90, + 0x12FF1, 0x13000, 0x1342F, 0x14400, @@ -141118,6 +144209,10 @@ static const UV UNI_XPOSIXALNUM_invlist[] = { /* for EBCDIC 037 */ 0x16A5F, 0x16A60, 0x16A6A, + 0x16A70, + 0x16ABF, + 0x16AC0, + 0x16ACA, 0x16AD0, 0x16AEE, 0x16B00, @@ -141150,8 +144245,14 @@ static const UV UNI_XPOSIXALNUM_invlist[] = { /* for EBCDIC 037 */ 0x18CD6, 0x18D00, 0x18D09, + 0x1AFF0, + 0x1AFF4, + 0x1AFF5, + 0x1AFFC, + 0x1AFFD, + 0x1AFFF, 0x1B000, - 0x1B11F, + 0x1B123, 0x1B150, 0x1B153, 0x1B164, @@ -141230,6 +144331,8 @@ static const UV UNI_XPOSIXALNUM_invlist[] = { /* for EBCDIC 037 */ 0x1D7CC, 0x1D7CE, 0x1D800, + 0x1DF00, + 0x1DF1F, 0x1E000, 0x1E007, 0x1E008, @@ -141248,10 +144351,20 @@ static const UV UNI_XPOSIXALNUM_invlist[] = { /* for EBCDIC 037 */ 0x1E14A, 0x1E14E, 0x1E14F, + 0x1E290, + 0x1E2AE, 0x1E2C0, 0x1E2EC, 0x1E2F0, 0x1E2FA, + 0x1E7E0, + 0x1E7E7, + 0x1E7E8, + 0x1E7EC, + 0x1E7ED, + 0x1E7EF, + 0x1E7F0, + 0x1E7FF, 0x1E800, 0x1E8C5, 0x1E900, @@ -141337,9 +144450,9 @@ static const UV UNI_XPOSIXALNUM_invlist[] = { /* for EBCDIC 037 */ 0x1FBF0, 0x1FBFA, 0x20000, - 0x2A6DE, + 0x2A6E0, 0x2A700, - 0x2B735, + 0x2B739, 0x2B740, 0x2B81E, 0x2B820, @@ -141357,7 +144470,7 @@ static const UV UNI_XPOSIXALNUM_invlist[] = { /* for EBCDIC 037 */ # if 'A' == 65 /* ASCII/Latin1 */ static const UV UNI_XPOSIXALPHA_invlist[] = { /* for ASCII/Latin1 */ - 1391, /* Number of elements */ + 1445, /* Number of elements */ 148565664, /* Version and data structure type */ 1, /* 0 if the list starts at 0; 1 if it starts at the element beyond 0 */ @@ -141466,10 +144579,12 @@ static const UV UNI_XPOSIXALPHA_invlist[] = { /* for ASCII/Latin1 */ 0x859, 0x860, 0x86B, + 0x870, + 0x888, + 0x889, + 0x88F, 0x8A0, - 0x8B5, - 0x8B6, - 0x8C8, + 0x8CA, 0x8D4, 0x8E0, 0x8E3, @@ -141648,6 +144763,8 @@ static const UV UNI_XPOSIXALPHA_invlist[] = { /* for ASCII/Latin1 */ 0xC57, 0xC58, 0xC5B, + 0xC5D, + 0xC5E, 0xC60, 0xC64, 0xC80, @@ -141670,7 +144787,7 @@ static const UV UNI_XPOSIXALPHA_invlist[] = { /* for ASCII/Latin1 */ 0xCCD, 0xCD5, 0xCD7, - 0xCDE, + 0xCDD, 0xCDF, 0xCE0, 0xCE4, @@ -141823,10 +144940,8 @@ static const UV UNI_XPOSIXALPHA_invlist[] = { /* for ASCII/Latin1 */ 0x16EE, 0x16F9, 0x1700, - 0x170D, - 0x170E, 0x1714, - 0x1720, + 0x171F, 0x1734, 0x1740, 0x1754, @@ -141874,12 +144989,14 @@ static const UV UNI_XPOSIXALPHA_invlist[] = { /* for ASCII/Latin1 */ 0x1AA8, 0x1ABF, 0x1AC1, + 0x1ACC, + 0x1ACF, 0x1B00, 0x1B34, 0x1B35, 0x1B44, 0x1B45, - 0x1B4C, + 0x1B4D, 0x1B80, 0x1BAA, 0x1BAC, @@ -141987,10 +145104,6 @@ static const UV UNI_XPOSIXALPHA_invlist[] = { /* for ASCII/Latin1 */ 0x24B6, 0x24EA, 0x2C00, - 0x2C2F, - 0x2C30, - 0x2C5F, - 0x2C60, 0x2CE5, 0x2CEB, 0x2CEF, @@ -142055,8 +145168,6 @@ static const UV UNI_XPOSIXALPHA_invlist[] = { /* for ASCII/Latin1 */ 0x3400, 0x4DC0, 0x4E00, - 0x9FFD, - 0xA000, 0xA48D, 0xA4D0, 0xA4FE, @@ -142077,10 +145188,14 @@ static const UV UNI_XPOSIXALPHA_invlist[] = { /* for ASCII/Latin1 */ 0xA722, 0xA789, 0xA78B, - 0xA7C0, - 0xA7C2, 0xA7CB, - 0xA7F5, + 0xA7D0, + 0xA7D2, + 0xA7D3, + 0xA7D4, + 0xA7D5, + 0xA7DA, + 0xA7F2, 0xA806, 0xA807, 0xA828, @@ -142244,12 +145359,34 @@ static const UV UNI_XPOSIXALPHA_invlist[] = { /* for ASCII/Latin1 */ 0x10528, 0x10530, 0x10564, + 0x10570, + 0x1057B, + 0x1057C, + 0x1058B, + 0x1058C, + 0x10593, + 0x10594, + 0x10596, + 0x10597, + 0x105A2, + 0x105A3, + 0x105B2, + 0x105B3, + 0x105BA, + 0x105BB, + 0x105BD, 0x10600, 0x10737, 0x10740, 0x10756, 0x10760, 0x10768, + 0x10780, + 0x10786, + 0x10787, + 0x107B1, + 0x107B2, + 0x107BB, 0x10800, 0x10806, 0x10808, @@ -142324,14 +145461,20 @@ static const UV UNI_XPOSIXALPHA_invlist[] = { /* for ASCII/Latin1 */ 0x10F28, 0x10F30, 0x10F46, + 0x10F70, + 0x10F82, 0x10FB0, 0x10FC5, 0x10FE0, 0x10FF7, 0x11000, 0x11046, + 0x11071, + 0x11076, 0x11082, 0x110B9, + 0x110C2, + 0x110C3, 0x110D0, 0x110E9, 0x11100, @@ -142432,6 +145575,8 @@ static const UV UNI_XPOSIXALPHA_invlist[] = { /* for ASCII/Latin1 */ 0x1171B, 0x1171D, 0x1172B, + 0x11740, + 0x11747, 0x11800, 0x11839, 0x118A0, @@ -142470,7 +145615,7 @@ static const UV UNI_XPOSIXALPHA_invlist[] = { /* for ASCII/Latin1 */ 0x11A98, 0x11A9D, 0x11A9E, - 0x11AC0, + 0x11AB0, 0x11AF9, 0x11C00, 0x11C09, @@ -142524,6 +145669,8 @@ static const UV UNI_XPOSIXALPHA_invlist[] = { /* for ASCII/Latin1 */ 0x1246F, 0x12480, 0x12544, + 0x12F90, + 0x12FF1, 0x13000, 0x1342F, 0x14400, @@ -142532,6 +145679,8 @@ static const UV UNI_XPOSIXALPHA_invlist[] = { /* for ASCII/Latin1 */ 0x16A39, 0x16A40, 0x16A5F, + 0x16A70, + 0x16ABF, 0x16AD0, 0x16AEE, 0x16B00, @@ -142562,8 +145711,14 @@ static const UV UNI_XPOSIXALPHA_invlist[] = { /* for ASCII/Latin1 */ 0x18CD6, 0x18D00, 0x18D09, + 0x1AFF0, + 0x1AFF4, + 0x1AFF5, + 0x1AFFC, + 0x1AFFD, + 0x1AFFF, 0x1B000, - 0x1B11F, + 0x1B123, 0x1B150, 0x1B153, 0x1B164, @@ -142640,6 +145795,8 @@ static const UV UNI_XPOSIXALPHA_invlist[] = { /* for ASCII/Latin1 */ 0x1D7C3, 0x1D7C4, 0x1D7CC, + 0x1DF00, + 0x1DF1F, 0x1E000, 0x1E007, 0x1E008, @@ -142656,8 +145813,18 @@ static const UV UNI_XPOSIXALPHA_invlist[] = { /* for ASCII/Latin1 */ 0x1E13E, 0x1E14E, 0x1E14F, + 0x1E290, + 0x1E2AE, 0x1E2C0, 0x1E2EC, + 0x1E7E0, + 0x1E7E7, + 0x1E7E8, + 0x1E7EC, + 0x1E7ED, + 0x1E7EF, + 0x1E7F0, + 0x1E7FF, 0x1E800, 0x1E8C5, 0x1E900, @@ -142739,9 +145906,9 @@ static const UV UNI_XPOSIXALPHA_invlist[] = { /* for ASCII/Latin1 */ 0x1F170, 0x1F18A, 0x20000, - 0x2A6DE, + 0x2A6E0, 0x2A700, - 0x2B735, + 0x2B739, 0x2B740, 0x2B81E, 0x2B820, @@ -142762,7 +145929,7 @@ static const UV UNI_XPOSIXALPHA_invlist[] = { /* for ASCII/Latin1 */ && '$' == 91 && '@' == 124 && '`' == 121 && '\n' == 21 static const UV UNI_XPOSIXALPHA_invlist[] = { /* for EBCDIC 1047 */ - 1417, /* Number of elements */ + 1471, /* Number of elements */ 148565664, /* Version and data structure type */ 1, /* 0 if the list starts at 0; 1 if it starts at the element beyond 0 */ @@ -142897,10 +146064,12 @@ static const UV UNI_XPOSIXALPHA_invlist[] = { /* for EBCDIC 1047 */ 0x859, 0x860, 0x86B, + 0x870, + 0x888, + 0x889, + 0x88F, 0x8A0, - 0x8B5, - 0x8B6, - 0x8C8, + 0x8CA, 0x8D4, 0x8E0, 0x8E3, @@ -143079,6 +146248,8 @@ static const UV UNI_XPOSIXALPHA_invlist[] = { /* for EBCDIC 1047 */ 0xC57, 0xC58, 0xC5B, + 0xC5D, + 0xC5E, 0xC60, 0xC64, 0xC80, @@ -143101,7 +146272,7 @@ static const UV UNI_XPOSIXALPHA_invlist[] = { /* for EBCDIC 1047 */ 0xCCD, 0xCD5, 0xCD7, - 0xCDE, + 0xCDD, 0xCDF, 0xCE0, 0xCE4, @@ -143254,10 +146425,8 @@ static const UV UNI_XPOSIXALPHA_invlist[] = { /* for EBCDIC 1047 */ 0x16EE, 0x16F9, 0x1700, - 0x170D, - 0x170E, 0x1714, - 0x1720, + 0x171F, 0x1734, 0x1740, 0x1754, @@ -143305,12 +146474,14 @@ static const UV UNI_XPOSIXALPHA_invlist[] = { /* for EBCDIC 1047 */ 0x1AA8, 0x1ABF, 0x1AC1, + 0x1ACC, + 0x1ACF, 0x1B00, 0x1B34, 0x1B35, 0x1B44, 0x1B45, - 0x1B4C, + 0x1B4D, 0x1B80, 0x1BAA, 0x1BAC, @@ -143418,10 +146589,6 @@ static const UV UNI_XPOSIXALPHA_invlist[] = { /* for EBCDIC 1047 */ 0x24B6, 0x24EA, 0x2C00, - 0x2C2F, - 0x2C30, - 0x2C5F, - 0x2C60, 0x2CE5, 0x2CEB, 0x2CEF, @@ -143486,8 +146653,6 @@ static const UV UNI_XPOSIXALPHA_invlist[] = { /* for EBCDIC 1047 */ 0x3400, 0x4DC0, 0x4E00, - 0x9FFD, - 0xA000, 0xA48D, 0xA4D0, 0xA4FE, @@ -143508,10 +146673,14 @@ static const UV UNI_XPOSIXALPHA_invlist[] = { /* for EBCDIC 1047 */ 0xA722, 0xA789, 0xA78B, - 0xA7C0, - 0xA7C2, 0xA7CB, - 0xA7F5, + 0xA7D0, + 0xA7D2, + 0xA7D3, + 0xA7D4, + 0xA7D5, + 0xA7DA, + 0xA7F2, 0xA806, 0xA807, 0xA828, @@ -143675,12 +146844,34 @@ static const UV UNI_XPOSIXALPHA_invlist[] = { /* for EBCDIC 1047 */ 0x10528, 0x10530, 0x10564, + 0x10570, + 0x1057B, + 0x1057C, + 0x1058B, + 0x1058C, + 0x10593, + 0x10594, + 0x10596, + 0x10597, + 0x105A2, + 0x105A3, + 0x105B2, + 0x105B3, + 0x105BA, + 0x105BB, + 0x105BD, 0x10600, 0x10737, 0x10740, 0x10756, 0x10760, 0x10768, + 0x10780, + 0x10786, + 0x10787, + 0x107B1, + 0x107B2, + 0x107BB, 0x10800, 0x10806, 0x10808, @@ -143755,14 +146946,20 @@ static const UV UNI_XPOSIXALPHA_invlist[] = { /* for EBCDIC 1047 */ 0x10F28, 0x10F30, 0x10F46, + 0x10F70, + 0x10F82, 0x10FB0, 0x10FC5, 0x10FE0, 0x10FF7, 0x11000, 0x11046, + 0x11071, + 0x11076, 0x11082, 0x110B9, + 0x110C2, + 0x110C3, 0x110D0, 0x110E9, 0x11100, @@ -143863,6 +147060,8 @@ static const UV UNI_XPOSIXALPHA_invlist[] = { /* for EBCDIC 1047 */ 0x1171B, 0x1171D, 0x1172B, + 0x11740, + 0x11747, 0x11800, 0x11839, 0x118A0, @@ -143901,7 +147100,7 @@ static const UV UNI_XPOSIXALPHA_invlist[] = { /* for EBCDIC 1047 */ 0x11A98, 0x11A9D, 0x11A9E, - 0x11AC0, + 0x11AB0, 0x11AF9, 0x11C00, 0x11C09, @@ -143955,6 +147154,8 @@ static const UV UNI_XPOSIXALPHA_invlist[] = { /* for EBCDIC 1047 */ 0x1246F, 0x12480, 0x12544, + 0x12F90, + 0x12FF1, 0x13000, 0x1342F, 0x14400, @@ -143963,6 +147164,8 @@ static const UV UNI_XPOSIXALPHA_invlist[] = { /* for EBCDIC 1047 */ 0x16A39, 0x16A40, 0x16A5F, + 0x16A70, + 0x16ABF, 0x16AD0, 0x16AEE, 0x16B00, @@ -143993,8 +147196,14 @@ static const UV UNI_XPOSIXALPHA_invlist[] = { /* for EBCDIC 1047 */ 0x18CD6, 0x18D00, 0x18D09, + 0x1AFF0, + 0x1AFF4, + 0x1AFF5, + 0x1AFFC, + 0x1AFFD, + 0x1AFFF, 0x1B000, - 0x1B11F, + 0x1B123, 0x1B150, 0x1B153, 0x1B164, @@ -144071,6 +147280,8 @@ static const UV UNI_XPOSIXALPHA_invlist[] = { /* for EBCDIC 1047 */ 0x1D7C3, 0x1D7C4, 0x1D7CC, + 0x1DF00, + 0x1DF1F, 0x1E000, 0x1E007, 0x1E008, @@ -144087,8 +147298,18 @@ static const UV UNI_XPOSIXALPHA_invlist[] = { /* for EBCDIC 1047 */ 0x1E13E, 0x1E14E, 0x1E14F, + 0x1E290, + 0x1E2AE, 0x1E2C0, 0x1E2EC, + 0x1E7E0, + 0x1E7E7, + 0x1E7E8, + 0x1E7EC, + 0x1E7ED, + 0x1E7EF, + 0x1E7F0, + 0x1E7FF, 0x1E800, 0x1E8C5, 0x1E900, @@ -144170,9 +147391,9 @@ static const UV UNI_XPOSIXALPHA_invlist[] = { /* for EBCDIC 1047 */ 0x1F170, 0x1F18A, 0x20000, - 0x2A6DE, + 0x2A6E0, 0x2A700, - 0x2B735, + 0x2B739, 0x2B740, 0x2B81E, 0x2B820, @@ -144193,7 +147414,7 @@ static const UV UNI_XPOSIXALPHA_invlist[] = { /* for EBCDIC 1047 */ && '$' == 91 && '@' == 124 && '`' == 121 && '\n' == 37 static const UV UNI_XPOSIXALPHA_invlist[] = { /* for EBCDIC 037 */ - 1413, /* Number of elements */ + 1467, /* Number of elements */ 148565664, /* Version and data structure type */ 1, /* 0 if the list starts at 0; 1 if it starts at the element beyond 0 */ @@ -144324,10 +147545,12 @@ static const UV UNI_XPOSIXALPHA_invlist[] = { /* for EBCDIC 037 */ 0x859, 0x860, 0x86B, + 0x870, + 0x888, + 0x889, + 0x88F, 0x8A0, - 0x8B5, - 0x8B6, - 0x8C8, + 0x8CA, 0x8D4, 0x8E0, 0x8E3, @@ -144506,6 +147729,8 @@ static const UV UNI_XPOSIXALPHA_invlist[] = { /* for EBCDIC 037 */ 0xC57, 0xC58, 0xC5B, + 0xC5D, + 0xC5E, 0xC60, 0xC64, 0xC80, @@ -144528,7 +147753,7 @@ static const UV UNI_XPOSIXALPHA_invlist[] = { /* for EBCDIC 037 */ 0xCCD, 0xCD5, 0xCD7, - 0xCDE, + 0xCDD, 0xCDF, 0xCE0, 0xCE4, @@ -144681,10 +147906,8 @@ static const UV UNI_XPOSIXALPHA_invlist[] = { /* for EBCDIC 037 */ 0x16EE, 0x16F9, 0x1700, - 0x170D, - 0x170E, 0x1714, - 0x1720, + 0x171F, 0x1734, 0x1740, 0x1754, @@ -144732,12 +147955,14 @@ static const UV UNI_XPOSIXALPHA_invlist[] = { /* for EBCDIC 037 */ 0x1AA8, 0x1ABF, 0x1AC1, + 0x1ACC, + 0x1ACF, 0x1B00, 0x1B34, 0x1B35, 0x1B44, 0x1B45, - 0x1B4C, + 0x1B4D, 0x1B80, 0x1BAA, 0x1BAC, @@ -144845,10 +148070,6 @@ static const UV UNI_XPOSIXALPHA_invlist[] = { /* for EBCDIC 037 */ 0x24B6, 0x24EA, 0x2C00, - 0x2C2F, - 0x2C30, - 0x2C5F, - 0x2C60, 0x2CE5, 0x2CEB, 0x2CEF, @@ -144913,8 +148134,6 @@ static const UV UNI_XPOSIXALPHA_invlist[] = { /* for EBCDIC 037 */ 0x3400, 0x4DC0, 0x4E00, - 0x9FFD, - 0xA000, 0xA48D, 0xA4D0, 0xA4FE, @@ -144935,10 +148154,14 @@ static const UV UNI_XPOSIXALPHA_invlist[] = { /* for EBCDIC 037 */ 0xA722, 0xA789, 0xA78B, - 0xA7C0, - 0xA7C2, 0xA7CB, - 0xA7F5, + 0xA7D0, + 0xA7D2, + 0xA7D3, + 0xA7D4, + 0xA7D5, + 0xA7DA, + 0xA7F2, 0xA806, 0xA807, 0xA828, @@ -145102,12 +148325,34 @@ static const UV UNI_XPOSIXALPHA_invlist[] = { /* for EBCDIC 037 */ 0x10528, 0x10530, 0x10564, + 0x10570, + 0x1057B, + 0x1057C, + 0x1058B, + 0x1058C, + 0x10593, + 0x10594, + 0x10596, + 0x10597, + 0x105A2, + 0x105A3, + 0x105B2, + 0x105B3, + 0x105BA, + 0x105BB, + 0x105BD, 0x10600, 0x10737, 0x10740, 0x10756, 0x10760, 0x10768, + 0x10780, + 0x10786, + 0x10787, + 0x107B1, + 0x107B2, + 0x107BB, 0x10800, 0x10806, 0x10808, @@ -145182,14 +148427,20 @@ static const UV UNI_XPOSIXALPHA_invlist[] = { /* for EBCDIC 037 */ 0x10F28, 0x10F30, 0x10F46, + 0x10F70, + 0x10F82, 0x10FB0, 0x10FC5, 0x10FE0, 0x10FF7, 0x11000, 0x11046, + 0x11071, + 0x11076, 0x11082, 0x110B9, + 0x110C2, + 0x110C3, 0x110D0, 0x110E9, 0x11100, @@ -145290,6 +148541,8 @@ static const UV UNI_XPOSIXALPHA_invlist[] = { /* for EBCDIC 037 */ 0x1171B, 0x1171D, 0x1172B, + 0x11740, + 0x11747, 0x11800, 0x11839, 0x118A0, @@ -145328,7 +148581,7 @@ static const UV UNI_XPOSIXALPHA_invlist[] = { /* for EBCDIC 037 */ 0x11A98, 0x11A9D, 0x11A9E, - 0x11AC0, + 0x11AB0, 0x11AF9, 0x11C00, 0x11C09, @@ -145382,6 +148635,8 @@ static const UV UNI_XPOSIXALPHA_invlist[] = { /* for EBCDIC 037 */ 0x1246F, 0x12480, 0x12544, + 0x12F90, + 0x12FF1, 0x13000, 0x1342F, 0x14400, @@ -145390,6 +148645,8 @@ static const UV UNI_XPOSIXALPHA_invlist[] = { /* for EBCDIC 037 */ 0x16A39, 0x16A40, 0x16A5F, + 0x16A70, + 0x16ABF, 0x16AD0, 0x16AEE, 0x16B00, @@ -145420,8 +148677,14 @@ static const UV UNI_XPOSIXALPHA_invlist[] = { /* for EBCDIC 037 */ 0x18CD6, 0x18D00, 0x18D09, + 0x1AFF0, + 0x1AFF4, + 0x1AFF5, + 0x1AFFC, + 0x1AFFD, + 0x1AFFF, 0x1B000, - 0x1B11F, + 0x1B123, 0x1B150, 0x1B153, 0x1B164, @@ -145498,6 +148761,8 @@ static const UV UNI_XPOSIXALPHA_invlist[] = { /* for EBCDIC 037 */ 0x1D7C3, 0x1D7C4, 0x1D7CC, + 0x1DF00, + 0x1DF1F, 0x1E000, 0x1E007, 0x1E008, @@ -145514,8 +148779,18 @@ static const UV UNI_XPOSIXALPHA_invlist[] = { /* for EBCDIC 037 */ 0x1E13E, 0x1E14E, 0x1E14F, + 0x1E290, + 0x1E2AE, 0x1E2C0, 0x1E2EC, + 0x1E7E0, + 0x1E7E7, + 0x1E7E8, + 0x1E7EC, + 0x1E7ED, + 0x1E7EF, + 0x1E7F0, + 0x1E7FF, 0x1E800, 0x1E8C5, 0x1E900, @@ -145597,9 +148872,9 @@ static const UV UNI_XPOSIXALPHA_invlist[] = { /* for EBCDIC 037 */ 0x1F170, 0x1F18A, 0x20000, - 0x2A6DE, + 0x2A6E0, 0x2A700, - 0x2B735, + 0x2B739, 0x2B740, 0x2B81E, 0x2B820, @@ -145754,7 +149029,7 @@ static const UV UNI_XPOSIXCNTRL_invlist[] = { /* for EBCDIC 037 */ # if 'A' == 65 /* ASCII/Latin1 */ static const UV UNI_XPOSIXDIGIT_invlist[] = { /* for ASCII/Latin1 */ - 123, /* Number of elements */ + 125, /* Number of elements */ 148565664, /* Version and data structure type */ 1, /* 0 if the list starts at 0; 1 if it starts at the element beyond 0 */ @@ -145869,6 +149144,8 @@ static const UV UNI_XPOSIXDIGIT_invlist[] = { /* for ASCII/Latin1 */ 0x11DAA, 0x16A60, 0x16A6A, + 0x16AC0, + 0x16ACA, 0x16B50, 0x16B5A, 0x1D7CE, @@ -145891,7 +149168,7 @@ static const UV UNI_XPOSIXDIGIT_invlist[] = { /* for ASCII/Latin1 */ && '$' == 91 && '@' == 124 && '`' == 121 && '\n' == 21 static const UV UNI_XPOSIXDIGIT_invlist[] = { /* for EBCDIC 1047 */ - 123, /* Number of elements */ + 125, /* Number of elements */ 148565664, /* Version and data structure type */ 1, /* 0 if the list starts at 0; 1 if it starts at the element beyond 0 */ @@ -146006,6 +149283,8 @@ static const UV UNI_XPOSIXDIGIT_invlist[] = { /* for EBCDIC 1047 */ 0x11DAA, 0x16A60, 0x16A6A, + 0x16AC0, + 0x16ACA, 0x16B50, 0x16B5A, 0x1D7CE, @@ -146028,7 +149307,7 @@ static const UV UNI_XPOSIXDIGIT_invlist[] = { /* for EBCDIC 1047 */ && '$' == 91 && '@' == 124 && '`' == 121 && '\n' == 37 static const UV UNI_XPOSIXDIGIT_invlist[] = { /* for EBCDIC 037 */ - 123, /* Number of elements */ + 125, /* Number of elements */ 148565664, /* Version and data structure type */ 1, /* 0 if the list starts at 0; 1 if it starts at the element beyond 0 */ @@ -146143,6 +149422,8 @@ static const UV UNI_XPOSIXDIGIT_invlist[] = { /* for EBCDIC 037 */ 0x11DAA, 0x16A60, 0x16A6A, + 0x16AC0, + 0x16ACA, 0x16B50, 0x16B5A, 0x1D7CE, @@ -146162,7 +149443,7 @@ static const UV UNI_XPOSIXDIGIT_invlist[] = { /* for EBCDIC 037 */ # if 'A' == 65 /* ASCII/Latin1 */ static const UV UNI_XPOSIXGRAPH_invlist[] = { /* for ASCII/Latin1 */ - 1365, /* Number of elements */ + 1407, /* Number of elements */ 148565664, /* Version and data structure type */ 1, /* 0 if the list starts at 0; 1 if it starts at the element beyond 0 */ @@ -146194,8 +149475,6 @@ static const UV UNI_XPOSIXGRAPH_invlist[] = { /* for ASCII/Latin1 */ 0x5EF, 0x5F5, 0x600, - 0x61D, - 0x61E, 0x70E, 0x70F, 0x74B, @@ -146213,11 +149492,11 @@ static const UV UNI_XPOSIXGRAPH_invlist[] = { /* for ASCII/Latin1 */ 0x85F, 0x860, 0x86B, - 0x8A0, - 0x8B5, - 0x8B6, - 0x8C8, - 0x8D3, + 0x870, + 0x88F, + 0x890, + 0x892, + 0x898, 0x984, 0x985, 0x98D, @@ -146373,7 +149652,7 @@ static const UV UNI_XPOSIXGRAPH_invlist[] = { /* for ASCII/Latin1 */ 0xC29, 0xC2A, 0xC3A, - 0xC3D, + 0xC3C, 0xC45, 0xC46, 0xC49, @@ -146383,6 +149662,8 @@ static const UV UNI_XPOSIXGRAPH_invlist[] = { /* for ASCII/Latin1 */ 0xC57, 0xC58, 0xC5B, + 0xC5D, + 0xC5E, 0xC60, 0xC64, 0xC66, @@ -146405,7 +149686,7 @@ static const UV UNI_XPOSIXGRAPH_invlist[] = { /* for ASCII/Latin1 */ 0xCCE, 0xCD5, 0xCD7, - 0xCDE, + 0xCDD, 0xCDF, 0xCE0, 0xCE4, @@ -146542,10 +149823,8 @@ static const UV UNI_XPOSIXGRAPH_invlist[] = { /* for ASCII/Latin1 */ 0x16A0, 0x16F9, 0x1700, - 0x170D, - 0x170E, - 0x1715, - 0x1720, + 0x1716, + 0x171F, 0x1737, 0x1740, 0x1754, @@ -146562,8 +149841,6 @@ static const UV UNI_XPOSIXGRAPH_invlist[] = { /* for ASCII/Latin1 */ 0x17F0, 0x17FA, 0x1800, - 0x180F, - 0x1810, 0x181A, 0x1820, 0x1879, @@ -146602,11 +149879,11 @@ static const UV UNI_XPOSIXGRAPH_invlist[] = { /* for ASCII/Latin1 */ 0x1AA0, 0x1AAE, 0x1AB0, - 0x1AC1, + 0x1ACF, 0x1B00, - 0x1B4C, + 0x1B4D, 0x1B50, - 0x1B7D, + 0x1B7F, 0x1B80, 0x1BF4, 0x1BFC, @@ -146622,8 +149899,6 @@ static const UV UNI_XPOSIXGRAPH_invlist[] = { /* for ASCII/Latin1 */ 0x1CD0, 0x1CFB, 0x1D00, - 0x1DFA, - 0x1DFB, 0x1F16, 0x1F18, 0x1F1E, @@ -146670,7 +149945,7 @@ static const UV UNI_XPOSIXGRAPH_invlist[] = { /* for ASCII/Latin1 */ 0x2090, 0x209D, 0x20A0, - 0x20C0, + 0x20C1, 0x20D0, 0x20F1, 0x2100, @@ -146684,10 +149959,6 @@ static const UV UNI_XPOSIXGRAPH_invlist[] = { /* for ASCII/Latin1 */ 0x2B76, 0x2B96, 0x2B97, - 0x2C2F, - 0x2C30, - 0x2C5F, - 0x2C60, 0x2CF4, 0x2CF9, 0x2D26, @@ -146718,7 +149989,7 @@ static const UV UNI_XPOSIXGRAPH_invlist[] = { /* for ASCII/Latin1 */ 0x2DD8, 0x2DDF, 0x2DE0, - 0x2E53, + 0x2E5E, 0x2E80, 0x2E9A, 0x2E9B, @@ -146742,8 +150013,6 @@ static const UV UNI_XPOSIXGRAPH_invlist[] = { /* for ASCII/Latin1 */ 0x31F0, 0x321F, 0x3220, - 0x9FFD, - 0xA000, 0xA48D, 0xA490, 0xA4C7, @@ -146752,10 +150021,14 @@ static const UV UNI_XPOSIXGRAPH_invlist[] = { /* for ASCII/Latin1 */ 0xA640, 0xA6F8, 0xA700, - 0xA7C0, - 0xA7C2, 0xA7CB, - 0xA7F5, + 0xA7D0, + 0xA7D2, + 0xA7D3, + 0xA7D4, + 0xA7D5, + 0xA7DA, + 0xA7F2, 0xA82D, 0xA830, 0xA83A, @@ -146826,16 +150099,14 @@ static const UV UNI_XPOSIXGRAPH_invlist[] = { /* for ASCII/Latin1 */ 0xFB43, 0xFB45, 0xFB46, - 0xFBC2, + 0xFBC3, 0xFBD3, - 0xFD40, - 0xFD50, 0xFD90, 0xFD92, 0xFDC8, + 0xFDCF, + 0xFDD0, 0xFDF0, - 0xFDFE, - 0xFE00, 0xFE1A, 0xFE20, 0xFE53, @@ -146922,13 +150193,33 @@ static const UV UNI_XPOSIXGRAPH_invlist[] = { /* for ASCII/Latin1 */ 0x10530, 0x10564, 0x1056F, - 0x10570, + 0x1057B, + 0x1057C, + 0x1058B, + 0x1058C, + 0x10593, + 0x10594, + 0x10596, + 0x10597, + 0x105A2, + 0x105A3, + 0x105B2, + 0x105B3, + 0x105BA, + 0x105BB, + 0x105BD, 0x10600, 0x10737, 0x10740, 0x10756, 0x10760, 0x10768, + 0x10780, + 0x10786, + 0x10787, + 0x107B1, + 0x107B2, + 0x107BB, 0x10800, 0x10806, 0x10808, @@ -147015,6 +150306,8 @@ static const UV UNI_XPOSIXGRAPH_invlist[] = { /* for ASCII/Latin1 */ 0x10F28, 0x10F30, 0x10F5A, + 0x10F70, + 0x10F8A, 0x10FB0, 0x10FCC, 0x10FE0, @@ -147022,9 +150315,9 @@ static const UV UNI_XPOSIXGRAPH_invlist[] = { /* for ASCII/Latin1 */ 0x11000, 0x1104E, 0x11052, - 0x11070, + 0x11076, 0x1107F, - 0x110C2, + 0x110C3, 0x110CD, 0x110CE, 0x110D0, @@ -147108,7 +150401,7 @@ static const UV UNI_XPOSIXGRAPH_invlist[] = { /* for ASCII/Latin1 */ 0x11660, 0x1166D, 0x11680, - 0x116B9, + 0x116BA, 0x116C0, 0x116CA, 0x11700, @@ -147116,7 +150409,7 @@ static const UV UNI_XPOSIXGRAPH_invlist[] = { /* for ASCII/Latin1 */ 0x1171D, 0x1172C, 0x11730, - 0x11740, + 0x11747, 0x11800, 0x1183C, 0x118A0, @@ -147147,7 +150440,7 @@ static const UV UNI_XPOSIXGRAPH_invlist[] = { /* for ASCII/Latin1 */ 0x11A48, 0x11A50, 0x11AA3, - 0x11AC0, + 0x11AB0, 0x11AF9, 0x11C00, 0x11C09, @@ -147203,6 +150496,8 @@ static const UV UNI_XPOSIXGRAPH_invlist[] = { /* for ASCII/Latin1 */ 0x12475, 0x12480, 0x12544, + 0x12F90, + 0x12FF3, 0x13000, 0x1342F, 0x13430, @@ -147216,7 +150511,9 @@ static const UV UNI_XPOSIXGRAPH_invlist[] = { /* for ASCII/Latin1 */ 0x16A60, 0x16A6A, 0x16A6E, - 0x16A70, + 0x16ABF, + 0x16AC0, + 0x16ACA, 0x16AD0, 0x16AEE, 0x16AF0, @@ -147249,8 +150546,14 @@ static const UV UNI_XPOSIXGRAPH_invlist[] = { /* for ASCII/Latin1 */ 0x18CD6, 0x18D00, 0x18D09, + 0x1AFF0, + 0x1AFF4, + 0x1AFF5, + 0x1AFFC, + 0x1AFFD, + 0x1AFFF, 0x1B000, - 0x1B11F, + 0x1B123, 0x1B150, 0x1B153, 0x1B164, @@ -147267,12 +150570,18 @@ static const UV UNI_XPOSIXGRAPH_invlist[] = { /* for ASCII/Latin1 */ 0x1BC9A, 0x1BC9C, 0x1BCA4, + 0x1CF00, + 0x1CF2E, + 0x1CF30, + 0x1CF47, + 0x1CF50, + 0x1CFC4, 0x1D000, 0x1D0F6, 0x1D100, 0x1D127, 0x1D129, - 0x1D1E9, + 0x1D1EB, 0x1D200, 0x1D246, 0x1D2E0, @@ -147327,6 +150636,8 @@ static const UV UNI_XPOSIXGRAPH_invlist[] = { /* for ASCII/Latin1 */ 0x1DAA0, 0x1DAA1, 0x1DAB0, + 0x1DF00, + 0x1DF1F, 0x1E000, 0x1E007, 0x1E008, @@ -147345,10 +150656,20 @@ static const UV UNI_XPOSIXGRAPH_invlist[] = { /* for ASCII/Latin1 */ 0x1E14A, 0x1E14E, 0x1E150, + 0x1E290, + 0x1E2AF, 0x1E2C0, 0x1E2FA, 0x1E2FF, 0x1E300, + 0x1E7E0, + 0x1E7E7, + 0x1E7E8, + 0x1E7EC, + 0x1E7ED, + 0x1E7EF, + 0x1E7F0, + 0x1E7FF, 0x1E800, 0x1E8C5, 0x1E8C7, @@ -147457,7 +150778,7 @@ static const UV UNI_XPOSIXGRAPH_invlist[] = { /* for ASCII/Latin1 */ 0x1F266, 0x1F300, 0x1F6D8, - 0x1F6E0, + 0x1F6DD, 0x1F6ED, 0x1F6F0, 0x1F6FD, @@ -147467,6 +150788,8 @@ static const UV UNI_XPOSIXGRAPH_invlist[] = { /* for ASCII/Latin1 */ 0x1F7D9, 0x1F7E0, 0x1F7EC, + 0x1F7F0, + 0x1F7F1, 0x1F800, 0x1F80C, 0x1F810, @@ -147480,27 +150803,27 @@ static const UV UNI_XPOSIXGRAPH_invlist[] = { /* for ASCII/Latin1 */ 0x1F8B0, 0x1F8B2, 0x1F900, - 0x1F979, - 0x1F97A, - 0x1F9CC, - 0x1F9CD, 0x1FA54, 0x1FA60, 0x1FA6E, 0x1FA70, 0x1FA75, 0x1FA78, - 0x1FA7B, + 0x1FA7D, 0x1FA80, 0x1FA87, 0x1FA90, - 0x1FAA9, + 0x1FAAD, 0x1FAB0, - 0x1FAB7, + 0x1FABB, 0x1FAC0, - 0x1FAC3, + 0x1FAC6, 0x1FAD0, - 0x1FAD7, + 0x1FADA, + 0x1FAE0, + 0x1FAE8, + 0x1FAF0, + 0x1FAF7, 0x1FB00, 0x1FB93, 0x1FB94, @@ -147508,9 +150831,9 @@ static const UV UNI_XPOSIXGRAPH_invlist[] = { /* for ASCII/Latin1 */ 0x1FBF0, 0x1FBFA, 0x20000, - 0x2A6DE, + 0x2A6E0, 0x2A700, - 0x2B735, + 0x2B739, 0x2B740, 0x2B81E, 0x2B820, @@ -147541,7 +150864,7 @@ static const UV UNI_XPOSIXGRAPH_invlist[] = { /* for ASCII/Latin1 */ && '$' == 91 && '@' == 124 && '`' == 121 && '\n' == 21 static const UV UNI_XPOSIXGRAPH_invlist[] = { /* for EBCDIC 1047 */ - 1365, /* Number of elements */ + 1407, /* Number of elements */ 148565664, /* Version and data structure type */ 1, /* 0 if the list starts at 0; 1 if it starts at the element beyond 0 */ @@ -147573,8 +150896,6 @@ static const UV UNI_XPOSIXGRAPH_invlist[] = { /* for EBCDIC 1047 */ 0x5EF, 0x5F5, 0x600, - 0x61D, - 0x61E, 0x70E, 0x70F, 0x74B, @@ -147592,11 +150913,11 @@ static const UV UNI_XPOSIXGRAPH_invlist[] = { /* for EBCDIC 1047 */ 0x85F, 0x860, 0x86B, - 0x8A0, - 0x8B5, - 0x8B6, - 0x8C8, - 0x8D3, + 0x870, + 0x88F, + 0x890, + 0x892, + 0x898, 0x984, 0x985, 0x98D, @@ -147752,7 +151073,7 @@ static const UV UNI_XPOSIXGRAPH_invlist[] = { /* for EBCDIC 1047 */ 0xC29, 0xC2A, 0xC3A, - 0xC3D, + 0xC3C, 0xC45, 0xC46, 0xC49, @@ -147762,6 +151083,8 @@ static const UV UNI_XPOSIXGRAPH_invlist[] = { /* for EBCDIC 1047 */ 0xC57, 0xC58, 0xC5B, + 0xC5D, + 0xC5E, 0xC60, 0xC64, 0xC66, @@ -147784,7 +151107,7 @@ static const UV UNI_XPOSIXGRAPH_invlist[] = { /* for EBCDIC 1047 */ 0xCCE, 0xCD5, 0xCD7, - 0xCDE, + 0xCDD, 0xCDF, 0xCE0, 0xCE4, @@ -147921,10 +151244,8 @@ static const UV UNI_XPOSIXGRAPH_invlist[] = { /* for EBCDIC 1047 */ 0x16A0, 0x16F9, 0x1700, - 0x170D, - 0x170E, - 0x1715, - 0x1720, + 0x1716, + 0x171F, 0x1737, 0x1740, 0x1754, @@ -147941,8 +151262,6 @@ static const UV UNI_XPOSIXGRAPH_invlist[] = { /* for EBCDIC 1047 */ 0x17F0, 0x17FA, 0x1800, - 0x180F, - 0x1810, 0x181A, 0x1820, 0x1879, @@ -147981,11 +151300,11 @@ static const UV UNI_XPOSIXGRAPH_invlist[] = { /* for EBCDIC 1047 */ 0x1AA0, 0x1AAE, 0x1AB0, - 0x1AC1, + 0x1ACF, 0x1B00, - 0x1B4C, + 0x1B4D, 0x1B50, - 0x1B7D, + 0x1B7F, 0x1B80, 0x1BF4, 0x1BFC, @@ -148001,8 +151320,6 @@ static const UV UNI_XPOSIXGRAPH_invlist[] = { /* for EBCDIC 1047 */ 0x1CD0, 0x1CFB, 0x1D00, - 0x1DFA, - 0x1DFB, 0x1F16, 0x1F18, 0x1F1E, @@ -148049,7 +151366,7 @@ static const UV UNI_XPOSIXGRAPH_invlist[] = { /* for EBCDIC 1047 */ 0x2090, 0x209D, 0x20A0, - 0x20C0, + 0x20C1, 0x20D0, 0x20F1, 0x2100, @@ -148063,10 +151380,6 @@ static const UV UNI_XPOSIXGRAPH_invlist[] = { /* for EBCDIC 1047 */ 0x2B76, 0x2B96, 0x2B97, - 0x2C2F, - 0x2C30, - 0x2C5F, - 0x2C60, 0x2CF4, 0x2CF9, 0x2D26, @@ -148097,7 +151410,7 @@ static const UV UNI_XPOSIXGRAPH_invlist[] = { /* for EBCDIC 1047 */ 0x2DD8, 0x2DDF, 0x2DE0, - 0x2E53, + 0x2E5E, 0x2E80, 0x2E9A, 0x2E9B, @@ -148121,8 +151434,6 @@ static const UV UNI_XPOSIXGRAPH_invlist[] = { /* for EBCDIC 1047 */ 0x31F0, 0x321F, 0x3220, - 0x9FFD, - 0xA000, 0xA48D, 0xA490, 0xA4C7, @@ -148131,10 +151442,14 @@ static const UV UNI_XPOSIXGRAPH_invlist[] = { /* for EBCDIC 1047 */ 0xA640, 0xA6F8, 0xA700, - 0xA7C0, - 0xA7C2, 0xA7CB, - 0xA7F5, + 0xA7D0, + 0xA7D2, + 0xA7D3, + 0xA7D4, + 0xA7D5, + 0xA7DA, + 0xA7F2, 0xA82D, 0xA830, 0xA83A, @@ -148205,16 +151520,14 @@ static const UV UNI_XPOSIXGRAPH_invlist[] = { /* for EBCDIC 1047 */ 0xFB43, 0xFB45, 0xFB46, - 0xFBC2, + 0xFBC3, 0xFBD3, - 0xFD40, - 0xFD50, 0xFD90, 0xFD92, 0xFDC8, + 0xFDCF, + 0xFDD0, 0xFDF0, - 0xFDFE, - 0xFE00, 0xFE1A, 0xFE20, 0xFE53, @@ -148301,13 +151614,33 @@ static const UV UNI_XPOSIXGRAPH_invlist[] = { /* for EBCDIC 1047 */ 0x10530, 0x10564, 0x1056F, - 0x10570, + 0x1057B, + 0x1057C, + 0x1058B, + 0x1058C, + 0x10593, + 0x10594, + 0x10596, + 0x10597, + 0x105A2, + 0x105A3, + 0x105B2, + 0x105B3, + 0x105BA, + 0x105BB, + 0x105BD, 0x10600, 0x10737, 0x10740, 0x10756, 0x10760, 0x10768, + 0x10780, + 0x10786, + 0x10787, + 0x107B1, + 0x107B2, + 0x107BB, 0x10800, 0x10806, 0x10808, @@ -148394,6 +151727,8 @@ static const UV UNI_XPOSIXGRAPH_invlist[] = { /* for EBCDIC 1047 */ 0x10F28, 0x10F30, 0x10F5A, + 0x10F70, + 0x10F8A, 0x10FB0, 0x10FCC, 0x10FE0, @@ -148401,9 +151736,9 @@ static const UV UNI_XPOSIXGRAPH_invlist[] = { /* for EBCDIC 1047 */ 0x11000, 0x1104E, 0x11052, - 0x11070, + 0x11076, 0x1107F, - 0x110C2, + 0x110C3, 0x110CD, 0x110CE, 0x110D0, @@ -148487,7 +151822,7 @@ static const UV UNI_XPOSIXGRAPH_invlist[] = { /* for EBCDIC 1047 */ 0x11660, 0x1166D, 0x11680, - 0x116B9, + 0x116BA, 0x116C0, 0x116CA, 0x11700, @@ -148495,7 +151830,7 @@ static const UV UNI_XPOSIXGRAPH_invlist[] = { /* for EBCDIC 1047 */ 0x1171D, 0x1172C, 0x11730, - 0x11740, + 0x11747, 0x11800, 0x1183C, 0x118A0, @@ -148526,7 +151861,7 @@ static const UV UNI_XPOSIXGRAPH_invlist[] = { /* for EBCDIC 1047 */ 0x11A48, 0x11A50, 0x11AA3, - 0x11AC0, + 0x11AB0, 0x11AF9, 0x11C00, 0x11C09, @@ -148582,6 +151917,8 @@ static const UV UNI_XPOSIXGRAPH_invlist[] = { /* for EBCDIC 1047 */ 0x12475, 0x12480, 0x12544, + 0x12F90, + 0x12FF3, 0x13000, 0x1342F, 0x13430, @@ -148595,7 +151932,9 @@ static const UV UNI_XPOSIXGRAPH_invlist[] = { /* for EBCDIC 1047 */ 0x16A60, 0x16A6A, 0x16A6E, - 0x16A70, + 0x16ABF, + 0x16AC0, + 0x16ACA, 0x16AD0, 0x16AEE, 0x16AF0, @@ -148628,8 +151967,14 @@ static const UV UNI_XPOSIXGRAPH_invlist[] = { /* for EBCDIC 1047 */ 0x18CD6, 0x18D00, 0x18D09, + 0x1AFF0, + 0x1AFF4, + 0x1AFF5, + 0x1AFFC, + 0x1AFFD, + 0x1AFFF, 0x1B000, - 0x1B11F, + 0x1B123, 0x1B150, 0x1B153, 0x1B164, @@ -148646,12 +151991,18 @@ static const UV UNI_XPOSIXGRAPH_invlist[] = { /* for EBCDIC 1047 */ 0x1BC9A, 0x1BC9C, 0x1BCA4, + 0x1CF00, + 0x1CF2E, + 0x1CF30, + 0x1CF47, + 0x1CF50, + 0x1CFC4, 0x1D000, 0x1D0F6, 0x1D100, 0x1D127, 0x1D129, - 0x1D1E9, + 0x1D1EB, 0x1D200, 0x1D246, 0x1D2E0, @@ -148706,6 +152057,8 @@ static const UV UNI_XPOSIXGRAPH_invlist[] = { /* for EBCDIC 1047 */ 0x1DAA0, 0x1DAA1, 0x1DAB0, + 0x1DF00, + 0x1DF1F, 0x1E000, 0x1E007, 0x1E008, @@ -148724,10 +152077,20 @@ static const UV UNI_XPOSIXGRAPH_invlist[] = { /* for EBCDIC 1047 */ 0x1E14A, 0x1E14E, 0x1E150, + 0x1E290, + 0x1E2AF, 0x1E2C0, 0x1E2FA, 0x1E2FF, 0x1E300, + 0x1E7E0, + 0x1E7E7, + 0x1E7E8, + 0x1E7EC, + 0x1E7ED, + 0x1E7EF, + 0x1E7F0, + 0x1E7FF, 0x1E800, 0x1E8C5, 0x1E8C7, @@ -148836,7 +152199,7 @@ static const UV UNI_XPOSIXGRAPH_invlist[] = { /* for EBCDIC 1047 */ 0x1F266, 0x1F300, 0x1F6D8, - 0x1F6E0, + 0x1F6DD, 0x1F6ED, 0x1F6F0, 0x1F6FD, @@ -148846,6 +152209,8 @@ static const UV UNI_XPOSIXGRAPH_invlist[] = { /* for EBCDIC 1047 */ 0x1F7D9, 0x1F7E0, 0x1F7EC, + 0x1F7F0, + 0x1F7F1, 0x1F800, 0x1F80C, 0x1F810, @@ -148859,27 +152224,27 @@ static const UV UNI_XPOSIXGRAPH_invlist[] = { /* for EBCDIC 1047 */ 0x1F8B0, 0x1F8B2, 0x1F900, - 0x1F979, - 0x1F97A, - 0x1F9CC, - 0x1F9CD, 0x1FA54, 0x1FA60, 0x1FA6E, 0x1FA70, 0x1FA75, 0x1FA78, - 0x1FA7B, + 0x1FA7D, 0x1FA80, 0x1FA87, 0x1FA90, - 0x1FAA9, + 0x1FAAD, 0x1FAB0, - 0x1FAB7, + 0x1FABB, 0x1FAC0, - 0x1FAC3, + 0x1FAC6, 0x1FAD0, - 0x1FAD7, + 0x1FADA, + 0x1FAE0, + 0x1FAE8, + 0x1FAF0, + 0x1FAF7, 0x1FB00, 0x1FB93, 0x1FB94, @@ -148887,9 +152252,9 @@ static const UV UNI_XPOSIXGRAPH_invlist[] = { /* for EBCDIC 1047 */ 0x1FBF0, 0x1FBFA, 0x20000, - 0x2A6DE, + 0x2A6E0, 0x2A700, - 0x2B735, + 0x2B739, 0x2B740, 0x2B81E, 0x2B820, @@ -148920,7 +152285,7 @@ static const UV UNI_XPOSIXGRAPH_invlist[] = { /* for EBCDIC 1047 */ && '$' == 91 && '@' == 124 && '`' == 121 && '\n' == 37 static const UV UNI_XPOSIXGRAPH_invlist[] = { /* for EBCDIC 037 */ - 1365, /* Number of elements */ + 1407, /* Number of elements */ 148565664, /* Version and data structure type */ 1, /* 0 if the list starts at 0; 1 if it starts at the element beyond 0 */ @@ -148952,8 +152317,6 @@ static const UV UNI_XPOSIXGRAPH_invlist[] = { /* for EBCDIC 037 */ 0x5EF, 0x5F5, 0x600, - 0x61D, - 0x61E, 0x70E, 0x70F, 0x74B, @@ -148971,11 +152334,11 @@ static const UV UNI_XPOSIXGRAPH_invlist[] = { /* for EBCDIC 037 */ 0x85F, 0x860, 0x86B, - 0x8A0, - 0x8B5, - 0x8B6, - 0x8C8, - 0x8D3, + 0x870, + 0x88F, + 0x890, + 0x892, + 0x898, 0x984, 0x985, 0x98D, @@ -149131,7 +152494,7 @@ static const UV UNI_XPOSIXGRAPH_invlist[] = { /* for EBCDIC 037 */ 0xC29, 0xC2A, 0xC3A, - 0xC3D, + 0xC3C, 0xC45, 0xC46, 0xC49, @@ -149141,6 +152504,8 @@ static const UV UNI_XPOSIXGRAPH_invlist[] = { /* for EBCDIC 037 */ 0xC57, 0xC58, 0xC5B, + 0xC5D, + 0xC5E, 0xC60, 0xC64, 0xC66, @@ -149163,7 +152528,7 @@ static const UV UNI_XPOSIXGRAPH_invlist[] = { /* for EBCDIC 037 */ 0xCCE, 0xCD5, 0xCD7, - 0xCDE, + 0xCDD, 0xCDF, 0xCE0, 0xCE4, @@ -149300,10 +152665,8 @@ static const UV UNI_XPOSIXGRAPH_invlist[] = { /* for EBCDIC 037 */ 0x16A0, 0x16F9, 0x1700, - 0x170D, - 0x170E, - 0x1715, - 0x1720, + 0x1716, + 0x171F, 0x1737, 0x1740, 0x1754, @@ -149320,8 +152683,6 @@ static const UV UNI_XPOSIXGRAPH_invlist[] = { /* for EBCDIC 037 */ 0x17F0, 0x17FA, 0x1800, - 0x180F, - 0x1810, 0x181A, 0x1820, 0x1879, @@ -149360,11 +152721,11 @@ static const UV UNI_XPOSIXGRAPH_invlist[] = { /* for EBCDIC 037 */ 0x1AA0, 0x1AAE, 0x1AB0, - 0x1AC1, + 0x1ACF, 0x1B00, - 0x1B4C, + 0x1B4D, 0x1B50, - 0x1B7D, + 0x1B7F, 0x1B80, 0x1BF4, 0x1BFC, @@ -149380,8 +152741,6 @@ static const UV UNI_XPOSIXGRAPH_invlist[] = { /* for EBCDIC 037 */ 0x1CD0, 0x1CFB, 0x1D00, - 0x1DFA, - 0x1DFB, 0x1F16, 0x1F18, 0x1F1E, @@ -149428,7 +152787,7 @@ static const UV UNI_XPOSIXGRAPH_invlist[] = { /* for EBCDIC 037 */ 0x2090, 0x209D, 0x20A0, - 0x20C0, + 0x20C1, 0x20D0, 0x20F1, 0x2100, @@ -149442,10 +152801,6 @@ static const UV UNI_XPOSIXGRAPH_invlist[] = { /* for EBCDIC 037 */ 0x2B76, 0x2B96, 0x2B97, - 0x2C2F, - 0x2C30, - 0x2C5F, - 0x2C60, 0x2CF4, 0x2CF9, 0x2D26, @@ -149476,7 +152831,7 @@ static const UV UNI_XPOSIXGRAPH_invlist[] = { /* for EBCDIC 037 */ 0x2DD8, 0x2DDF, 0x2DE0, - 0x2E53, + 0x2E5E, 0x2E80, 0x2E9A, 0x2E9B, @@ -149500,8 +152855,6 @@ static const UV UNI_XPOSIXGRAPH_invlist[] = { /* for EBCDIC 037 */ 0x31F0, 0x321F, 0x3220, - 0x9FFD, - 0xA000, 0xA48D, 0xA490, 0xA4C7, @@ -149510,10 +152863,14 @@ static const UV UNI_XPOSIXGRAPH_invlist[] = { /* for EBCDIC 037 */ 0xA640, 0xA6F8, 0xA700, - 0xA7C0, - 0xA7C2, 0xA7CB, - 0xA7F5, + 0xA7D0, + 0xA7D2, + 0xA7D3, + 0xA7D4, + 0xA7D5, + 0xA7DA, + 0xA7F2, 0xA82D, 0xA830, 0xA83A, @@ -149584,16 +152941,14 @@ static const UV UNI_XPOSIXGRAPH_invlist[] = { /* for EBCDIC 037 */ 0xFB43, 0xFB45, 0xFB46, - 0xFBC2, + 0xFBC3, 0xFBD3, - 0xFD40, - 0xFD50, 0xFD90, 0xFD92, 0xFDC8, + 0xFDCF, + 0xFDD0, 0xFDF0, - 0xFDFE, - 0xFE00, 0xFE1A, 0xFE20, 0xFE53, @@ -149680,13 +153035,33 @@ static const UV UNI_XPOSIXGRAPH_invlist[] = { /* for EBCDIC 037 */ 0x10530, 0x10564, 0x1056F, - 0x10570, + 0x1057B, + 0x1057C, + 0x1058B, + 0x1058C, + 0x10593, + 0x10594, + 0x10596, + 0x10597, + 0x105A2, + 0x105A3, + 0x105B2, + 0x105B3, + 0x105BA, + 0x105BB, + 0x105BD, 0x10600, 0x10737, 0x10740, 0x10756, 0x10760, 0x10768, + 0x10780, + 0x10786, + 0x10787, + 0x107B1, + 0x107B2, + 0x107BB, 0x10800, 0x10806, 0x10808, @@ -149773,6 +153148,8 @@ static const UV UNI_XPOSIXGRAPH_invlist[] = { /* for EBCDIC 037 */ 0x10F28, 0x10F30, 0x10F5A, + 0x10F70, + 0x10F8A, 0x10FB0, 0x10FCC, 0x10FE0, @@ -149780,9 +153157,9 @@ static const UV UNI_XPOSIXGRAPH_invlist[] = { /* for EBCDIC 037 */ 0x11000, 0x1104E, 0x11052, - 0x11070, + 0x11076, 0x1107F, - 0x110C2, + 0x110C3, 0x110CD, 0x110CE, 0x110D0, @@ -149866,7 +153243,7 @@ static const UV UNI_XPOSIXGRAPH_invlist[] = { /* for EBCDIC 037 */ 0x11660, 0x1166D, 0x11680, - 0x116B9, + 0x116BA, 0x116C0, 0x116CA, 0x11700, @@ -149874,7 +153251,7 @@ static const UV UNI_XPOSIXGRAPH_invlist[] = { /* for EBCDIC 037 */ 0x1171D, 0x1172C, 0x11730, - 0x11740, + 0x11747, 0x11800, 0x1183C, 0x118A0, @@ -149905,7 +153282,7 @@ static const UV UNI_XPOSIXGRAPH_invlist[] = { /* for EBCDIC 037 */ 0x11A48, 0x11A50, 0x11AA3, - 0x11AC0, + 0x11AB0, 0x11AF9, 0x11C00, 0x11C09, @@ -149961,6 +153338,8 @@ static const UV UNI_XPOSIXGRAPH_invlist[] = { /* for EBCDIC 037 */ 0x12475, 0x12480, 0x12544, + 0x12F90, + 0x12FF3, 0x13000, 0x1342F, 0x13430, @@ -149974,7 +153353,9 @@ static const UV UNI_XPOSIXGRAPH_invlist[] = { /* for EBCDIC 037 */ 0x16A60, 0x16A6A, 0x16A6E, - 0x16A70, + 0x16ABF, + 0x16AC0, + 0x16ACA, 0x16AD0, 0x16AEE, 0x16AF0, @@ -150007,8 +153388,14 @@ static const UV UNI_XPOSIXGRAPH_invlist[] = { /* for EBCDIC 037 */ 0x18CD6, 0x18D00, 0x18D09, + 0x1AFF0, + 0x1AFF4, + 0x1AFF5, + 0x1AFFC, + 0x1AFFD, + 0x1AFFF, 0x1B000, - 0x1B11F, + 0x1B123, 0x1B150, 0x1B153, 0x1B164, @@ -150025,12 +153412,18 @@ static const UV UNI_XPOSIXGRAPH_invlist[] = { /* for EBCDIC 037 */ 0x1BC9A, 0x1BC9C, 0x1BCA4, + 0x1CF00, + 0x1CF2E, + 0x1CF30, + 0x1CF47, + 0x1CF50, + 0x1CFC4, 0x1D000, 0x1D0F6, 0x1D100, 0x1D127, 0x1D129, - 0x1D1E9, + 0x1D1EB, 0x1D200, 0x1D246, 0x1D2E0, @@ -150085,6 +153478,8 @@ static const UV UNI_XPOSIXGRAPH_invlist[] = { /* for EBCDIC 037 */ 0x1DAA0, 0x1DAA1, 0x1DAB0, + 0x1DF00, + 0x1DF1F, 0x1E000, 0x1E007, 0x1E008, @@ -150103,10 +153498,20 @@ static const UV UNI_XPOSIXGRAPH_invlist[] = { /* for EBCDIC 037 */ 0x1E14A, 0x1E14E, 0x1E150, + 0x1E290, + 0x1E2AF, 0x1E2C0, 0x1E2FA, 0x1E2FF, 0x1E300, + 0x1E7E0, + 0x1E7E7, + 0x1E7E8, + 0x1E7EC, + 0x1E7ED, + 0x1E7EF, + 0x1E7F0, + 0x1E7FF, 0x1E800, 0x1E8C5, 0x1E8C7, @@ -150215,7 +153620,7 @@ static const UV UNI_XPOSIXGRAPH_invlist[] = { /* for EBCDIC 037 */ 0x1F266, 0x1F300, 0x1F6D8, - 0x1F6E0, + 0x1F6DD, 0x1F6ED, 0x1F6F0, 0x1F6FD, @@ -150225,6 +153630,8 @@ static const UV UNI_XPOSIXGRAPH_invlist[] = { /* for EBCDIC 037 */ 0x1F7D9, 0x1F7E0, 0x1F7EC, + 0x1F7F0, + 0x1F7F1, 0x1F800, 0x1F80C, 0x1F810, @@ -150238,27 +153645,27 @@ static const UV UNI_XPOSIXGRAPH_invlist[] = { /* for EBCDIC 037 */ 0x1F8B0, 0x1F8B2, 0x1F900, - 0x1F979, - 0x1F97A, - 0x1F9CC, - 0x1F9CD, 0x1FA54, 0x1FA60, 0x1FA6E, 0x1FA70, 0x1FA75, 0x1FA78, - 0x1FA7B, + 0x1FA7D, 0x1FA80, 0x1FA87, 0x1FA90, - 0x1FAA9, + 0x1FAAD, 0x1FAB0, - 0x1FAB7, + 0x1FABB, 0x1FAC0, - 0x1FAC3, + 0x1FAC6, 0x1FAD0, - 0x1FAD7, + 0x1FADA, + 0x1FAE0, + 0x1FAE8, + 0x1FAF0, + 0x1FAF7, 0x1FB00, 0x1FB93, 0x1FB94, @@ -150266,9 +153673,9 @@ static const UV UNI_XPOSIXGRAPH_invlist[] = { /* for EBCDIC 037 */ 0x1FBF0, 0x1FBFA, 0x20000, - 0x2A6DE, + 0x2A6E0, 0x2A700, - 0x2B735, + 0x2B739, 0x2B740, 0x2B81E, 0x2B820, @@ -150296,7 +153703,7 @@ static const UV UNI_XPOSIXGRAPH_invlist[] = { /* for EBCDIC 037 */ # if 'A' == 65 /* ASCII/Latin1 */ static const UV UNI_XPOSIXLOWER_invlist[] = { /* for ASCII/Latin1 */ - 1305, /* Number of elements */ + 1337, /* Number of elements */ 148565664, /* Version and data structure type */ 1, /* 0 if the list starts at 0; 1 if it starts at the element beyond 0 */ @@ -151180,7 +154587,7 @@ static const UV UNI_XPOSIXLOWER_invlist[] = { /* for ASCII/Latin1 */ 0x24D0, 0x24EA, 0x2C30, - 0x2C5F, + 0x2C60, 0x2C61, 0x2C62, 0x2C65, @@ -151515,12 +154922,24 @@ static const UV UNI_XPOSIXLOWER_invlist[] = { /* for ASCII/Latin1 */ 0xA7BE, 0xA7BF, 0xA7C0, + 0xA7C1, + 0xA7C2, 0xA7C3, 0xA7C4, 0xA7C8, 0xA7C9, 0xA7CA, 0xA7CB, + 0xA7D1, + 0xA7D2, + 0xA7D3, + 0xA7D4, + 0xA7D5, + 0xA7D6, + 0xA7D7, + 0xA7D8, + 0xA7D9, + 0xA7DA, 0xA7F6, 0xA7F7, 0xA7F8, @@ -151541,6 +154960,22 @@ static const UV UNI_XPOSIXLOWER_invlist[] = { /* for ASCII/Latin1 */ 0x10450, 0x104D8, 0x104FC, + 0x10597, + 0x105A2, + 0x105A3, + 0x105B2, + 0x105B3, + 0x105BA, + 0x105BB, + 0x105BD, + 0x10780, + 0x10781, + 0x10783, + 0x10786, + 0x10787, + 0x107B1, + 0x107B2, + 0x107BB, 0x10CC0, 0x10CF3, 0x118C0, @@ -151603,6 +155038,10 @@ static const UV UNI_XPOSIXLOWER_invlist[] = { /* for ASCII/Latin1 */ 0x1D7CA, 0x1D7CB, 0x1D7CC, + 0x1DF00, + 0x1DF0A, + 0x1DF0B, + 0x1DF1F, 0x1E922, 0x1E944 }; @@ -151615,7 +155054,7 @@ static const UV UNI_XPOSIXLOWER_invlist[] = { /* for ASCII/Latin1 */ && '$' == 91 && '@' == 124 && '`' == 121 && '\n' == 21 static const UV UNI_XPOSIXLOWER_invlist[] = { /* for EBCDIC 1047 */ - 1313, /* Number of elements */ + 1345, /* Number of elements */ 148565664, /* Version and data structure type */ 1, /* 0 if the list starts at 0; 1 if it starts at the element beyond 0 */ @@ -152507,7 +155946,7 @@ static const UV UNI_XPOSIXLOWER_invlist[] = { /* for EBCDIC 1047 */ 0x24D0, 0x24EA, 0x2C30, - 0x2C5F, + 0x2C60, 0x2C61, 0x2C62, 0x2C65, @@ -152842,12 +156281,24 @@ static const UV UNI_XPOSIXLOWER_invlist[] = { /* for EBCDIC 1047 */ 0xA7BE, 0xA7BF, 0xA7C0, + 0xA7C1, + 0xA7C2, 0xA7C3, 0xA7C4, 0xA7C8, 0xA7C9, 0xA7CA, 0xA7CB, + 0xA7D1, + 0xA7D2, + 0xA7D3, + 0xA7D4, + 0xA7D5, + 0xA7D6, + 0xA7D7, + 0xA7D8, + 0xA7D9, + 0xA7DA, 0xA7F6, 0xA7F7, 0xA7F8, @@ -152868,6 +156319,22 @@ static const UV UNI_XPOSIXLOWER_invlist[] = { /* for EBCDIC 1047 */ 0x10450, 0x104D8, 0x104FC, + 0x10597, + 0x105A2, + 0x105A3, + 0x105B2, + 0x105B3, + 0x105BA, + 0x105BB, + 0x105BD, + 0x10780, + 0x10781, + 0x10783, + 0x10786, + 0x10787, + 0x107B1, + 0x107B2, + 0x107BB, 0x10CC0, 0x10CF3, 0x118C0, @@ -152930,6 +156397,10 @@ static const UV UNI_XPOSIXLOWER_invlist[] = { /* for EBCDIC 1047 */ 0x1D7CA, 0x1D7CB, 0x1D7CC, + 0x1DF00, + 0x1DF0A, + 0x1DF0B, + 0x1DF1F, 0x1E922, 0x1E944 }; @@ -152942,7 +156413,7 @@ static const UV UNI_XPOSIXLOWER_invlist[] = { /* for EBCDIC 1047 */ && '$' == 91 && '@' == 124 && '`' == 121 && '\n' == 37 static const UV UNI_XPOSIXLOWER_invlist[] = { /* for EBCDIC 037 */ - 1313, /* Number of elements */ + 1345, /* Number of elements */ 148565664, /* Version and data structure type */ 1, /* 0 if the list starts at 0; 1 if it starts at the element beyond 0 */ @@ -153834,7 +157305,7 @@ static const UV UNI_XPOSIXLOWER_invlist[] = { /* for EBCDIC 037 */ 0x24D0, 0x24EA, 0x2C30, - 0x2C5F, + 0x2C60, 0x2C61, 0x2C62, 0x2C65, @@ -154169,12 +157640,24 @@ static const UV UNI_XPOSIXLOWER_invlist[] = { /* for EBCDIC 037 */ 0xA7BE, 0xA7BF, 0xA7C0, + 0xA7C1, + 0xA7C2, 0xA7C3, 0xA7C4, 0xA7C8, 0xA7C9, 0xA7CA, 0xA7CB, + 0xA7D1, + 0xA7D2, + 0xA7D3, + 0xA7D4, + 0xA7D5, + 0xA7D6, + 0xA7D7, + 0xA7D8, + 0xA7D9, + 0xA7DA, 0xA7F6, 0xA7F7, 0xA7F8, @@ -154195,6 +157678,22 @@ static const UV UNI_XPOSIXLOWER_invlist[] = { /* for EBCDIC 037 */ 0x10450, 0x104D8, 0x104FC, + 0x10597, + 0x105A2, + 0x105A3, + 0x105B2, + 0x105B3, + 0x105BA, + 0x105BB, + 0x105BD, + 0x10780, + 0x10781, + 0x10783, + 0x10786, + 0x10787, + 0x107B1, + 0x107B2, + 0x107BB, 0x10CC0, 0x10CF3, 0x118C0, @@ -154257,6 +157756,10 @@ static const UV UNI_XPOSIXLOWER_invlist[] = { /* for EBCDIC 037 */ 0x1D7CA, 0x1D7CB, 0x1D7CC, + 0x1DF00, + 0x1DF0A, + 0x1DF0B, + 0x1DF1F, 0x1E922, 0x1E944 }; @@ -154266,7 +157769,7 @@ static const UV UNI_XPOSIXLOWER_invlist[] = { /* for EBCDIC 037 */ # if 'A' == 65 /* ASCII/Latin1 */ static const UV UNI_XPOSIXPRINT_invlist[] = { /* for ASCII/Latin1 */ - 1359, /* Number of elements */ + 1401, /* Number of elements */ 148565664, /* Version and data structure type */ 1, /* 0 if the list starts at 0; 1 if it starts at the element beyond 0 */ @@ -154298,8 +157801,6 @@ static const UV UNI_XPOSIXPRINT_invlist[] = { /* for ASCII/Latin1 */ 0x5EF, 0x5F5, 0x600, - 0x61D, - 0x61E, 0x70E, 0x70F, 0x74B, @@ -154317,11 +157818,11 @@ static const UV UNI_XPOSIXPRINT_invlist[] = { /* for ASCII/Latin1 */ 0x85F, 0x860, 0x86B, - 0x8A0, - 0x8B5, - 0x8B6, - 0x8C8, - 0x8D3, + 0x870, + 0x88F, + 0x890, + 0x892, + 0x898, 0x984, 0x985, 0x98D, @@ -154477,7 +157978,7 @@ static const UV UNI_XPOSIXPRINT_invlist[] = { /* for ASCII/Latin1 */ 0xC29, 0xC2A, 0xC3A, - 0xC3D, + 0xC3C, 0xC45, 0xC46, 0xC49, @@ -154487,6 +157988,8 @@ static const UV UNI_XPOSIXPRINT_invlist[] = { /* for ASCII/Latin1 */ 0xC57, 0xC58, 0xC5B, + 0xC5D, + 0xC5E, 0xC60, 0xC64, 0xC66, @@ -154509,7 +158012,7 @@ static const UV UNI_XPOSIXPRINT_invlist[] = { /* for ASCII/Latin1 */ 0xCCE, 0xCD5, 0xCD7, - 0xCDE, + 0xCDD, 0xCDF, 0xCE0, 0xCE4, @@ -154644,10 +158147,8 @@ static const UV UNI_XPOSIXPRINT_invlist[] = { /* for ASCII/Latin1 */ 0x16A0, 0x16F9, 0x1700, - 0x170D, - 0x170E, - 0x1715, - 0x1720, + 0x1716, + 0x171F, 0x1737, 0x1740, 0x1754, @@ -154664,8 +158165,6 @@ static const UV UNI_XPOSIXPRINT_invlist[] = { /* for ASCII/Latin1 */ 0x17F0, 0x17FA, 0x1800, - 0x180F, - 0x1810, 0x181A, 0x1820, 0x1879, @@ -154704,11 +158203,11 @@ static const UV UNI_XPOSIXPRINT_invlist[] = { /* for ASCII/Latin1 */ 0x1AA0, 0x1AAE, 0x1AB0, - 0x1AC1, + 0x1ACF, 0x1B00, - 0x1B4C, + 0x1B4D, 0x1B50, - 0x1B7D, + 0x1B7F, 0x1B80, 0x1BF4, 0x1BFC, @@ -154724,8 +158223,6 @@ static const UV UNI_XPOSIXPRINT_invlist[] = { /* for ASCII/Latin1 */ 0x1CD0, 0x1CFB, 0x1D00, - 0x1DFA, - 0x1DFB, 0x1F16, 0x1F18, 0x1F1E, @@ -154768,7 +158265,7 @@ static const UV UNI_XPOSIXPRINT_invlist[] = { /* for ASCII/Latin1 */ 0x2090, 0x209D, 0x20A0, - 0x20C0, + 0x20C1, 0x20D0, 0x20F1, 0x2100, @@ -154782,10 +158279,6 @@ static const UV UNI_XPOSIXPRINT_invlist[] = { /* for ASCII/Latin1 */ 0x2B76, 0x2B96, 0x2B97, - 0x2C2F, - 0x2C30, - 0x2C5F, - 0x2C60, 0x2CF4, 0x2CF9, 0x2D26, @@ -154816,7 +158309,7 @@ static const UV UNI_XPOSIXPRINT_invlist[] = { /* for ASCII/Latin1 */ 0x2DD8, 0x2DDF, 0x2DE0, - 0x2E53, + 0x2E5E, 0x2E80, 0x2E9A, 0x2E9B, @@ -154840,8 +158333,6 @@ static const UV UNI_XPOSIXPRINT_invlist[] = { /* for ASCII/Latin1 */ 0x31F0, 0x321F, 0x3220, - 0x9FFD, - 0xA000, 0xA48D, 0xA490, 0xA4C7, @@ -154850,10 +158341,14 @@ static const UV UNI_XPOSIXPRINT_invlist[] = { /* for ASCII/Latin1 */ 0xA640, 0xA6F8, 0xA700, - 0xA7C0, - 0xA7C2, 0xA7CB, - 0xA7F5, + 0xA7D0, + 0xA7D2, + 0xA7D3, + 0xA7D4, + 0xA7D5, + 0xA7DA, + 0xA7F2, 0xA82D, 0xA830, 0xA83A, @@ -154924,16 +158419,14 @@ static const UV UNI_XPOSIXPRINT_invlist[] = { /* for ASCII/Latin1 */ 0xFB43, 0xFB45, 0xFB46, - 0xFBC2, + 0xFBC3, 0xFBD3, - 0xFD40, - 0xFD50, 0xFD90, 0xFD92, 0xFDC8, + 0xFDCF, + 0xFDD0, 0xFDF0, - 0xFDFE, - 0xFE00, 0xFE1A, 0xFE20, 0xFE53, @@ -155020,13 +158513,33 @@ static const UV UNI_XPOSIXPRINT_invlist[] = { /* for ASCII/Latin1 */ 0x10530, 0x10564, 0x1056F, - 0x10570, + 0x1057B, + 0x1057C, + 0x1058B, + 0x1058C, + 0x10593, + 0x10594, + 0x10596, + 0x10597, + 0x105A2, + 0x105A3, + 0x105B2, + 0x105B3, + 0x105BA, + 0x105BB, + 0x105BD, 0x10600, 0x10737, 0x10740, 0x10756, 0x10760, 0x10768, + 0x10780, + 0x10786, + 0x10787, + 0x107B1, + 0x107B2, + 0x107BB, 0x10800, 0x10806, 0x10808, @@ -155113,6 +158626,8 @@ static const UV UNI_XPOSIXPRINT_invlist[] = { /* for ASCII/Latin1 */ 0x10F28, 0x10F30, 0x10F5A, + 0x10F70, + 0x10F8A, 0x10FB0, 0x10FCC, 0x10FE0, @@ -155120,9 +158635,9 @@ static const UV UNI_XPOSIXPRINT_invlist[] = { /* for ASCII/Latin1 */ 0x11000, 0x1104E, 0x11052, - 0x11070, + 0x11076, 0x1107F, - 0x110C2, + 0x110C3, 0x110CD, 0x110CE, 0x110D0, @@ -155206,7 +158721,7 @@ static const UV UNI_XPOSIXPRINT_invlist[] = { /* for ASCII/Latin1 */ 0x11660, 0x1166D, 0x11680, - 0x116B9, + 0x116BA, 0x116C0, 0x116CA, 0x11700, @@ -155214,7 +158729,7 @@ static const UV UNI_XPOSIXPRINT_invlist[] = { /* for ASCII/Latin1 */ 0x1171D, 0x1172C, 0x11730, - 0x11740, + 0x11747, 0x11800, 0x1183C, 0x118A0, @@ -155245,7 +158760,7 @@ static const UV UNI_XPOSIXPRINT_invlist[] = { /* for ASCII/Latin1 */ 0x11A48, 0x11A50, 0x11AA3, - 0x11AC0, + 0x11AB0, 0x11AF9, 0x11C00, 0x11C09, @@ -155301,6 +158816,8 @@ static const UV UNI_XPOSIXPRINT_invlist[] = { /* for ASCII/Latin1 */ 0x12475, 0x12480, 0x12544, + 0x12F90, + 0x12FF3, 0x13000, 0x1342F, 0x13430, @@ -155314,7 +158831,9 @@ static const UV UNI_XPOSIXPRINT_invlist[] = { /* for ASCII/Latin1 */ 0x16A60, 0x16A6A, 0x16A6E, - 0x16A70, + 0x16ABF, + 0x16AC0, + 0x16ACA, 0x16AD0, 0x16AEE, 0x16AF0, @@ -155347,8 +158866,14 @@ static const UV UNI_XPOSIXPRINT_invlist[] = { /* for ASCII/Latin1 */ 0x18CD6, 0x18D00, 0x18D09, + 0x1AFF0, + 0x1AFF4, + 0x1AFF5, + 0x1AFFC, + 0x1AFFD, + 0x1AFFF, 0x1B000, - 0x1B11F, + 0x1B123, 0x1B150, 0x1B153, 0x1B164, @@ -155365,12 +158890,18 @@ static const UV UNI_XPOSIXPRINT_invlist[] = { /* for ASCII/Latin1 */ 0x1BC9A, 0x1BC9C, 0x1BCA4, + 0x1CF00, + 0x1CF2E, + 0x1CF30, + 0x1CF47, + 0x1CF50, + 0x1CFC4, 0x1D000, 0x1D0F6, 0x1D100, 0x1D127, 0x1D129, - 0x1D1E9, + 0x1D1EB, 0x1D200, 0x1D246, 0x1D2E0, @@ -155425,6 +158956,8 @@ static const UV UNI_XPOSIXPRINT_invlist[] = { /* for ASCII/Latin1 */ 0x1DAA0, 0x1DAA1, 0x1DAB0, + 0x1DF00, + 0x1DF1F, 0x1E000, 0x1E007, 0x1E008, @@ -155443,10 +158976,20 @@ static const UV UNI_XPOSIXPRINT_invlist[] = { /* for ASCII/Latin1 */ 0x1E14A, 0x1E14E, 0x1E150, + 0x1E290, + 0x1E2AF, 0x1E2C0, 0x1E2FA, 0x1E2FF, 0x1E300, + 0x1E7E0, + 0x1E7E7, + 0x1E7E8, + 0x1E7EC, + 0x1E7ED, + 0x1E7EF, + 0x1E7F0, + 0x1E7FF, 0x1E800, 0x1E8C5, 0x1E8C7, @@ -155555,7 +159098,7 @@ static const UV UNI_XPOSIXPRINT_invlist[] = { /* for ASCII/Latin1 */ 0x1F266, 0x1F300, 0x1F6D8, - 0x1F6E0, + 0x1F6DD, 0x1F6ED, 0x1F6F0, 0x1F6FD, @@ -155565,6 +159108,8 @@ static const UV UNI_XPOSIXPRINT_invlist[] = { /* for ASCII/Latin1 */ 0x1F7D9, 0x1F7E0, 0x1F7EC, + 0x1F7F0, + 0x1F7F1, 0x1F800, 0x1F80C, 0x1F810, @@ -155578,27 +159123,27 @@ static const UV UNI_XPOSIXPRINT_invlist[] = { /* for ASCII/Latin1 */ 0x1F8B0, 0x1F8B2, 0x1F900, - 0x1F979, - 0x1F97A, - 0x1F9CC, - 0x1F9CD, 0x1FA54, 0x1FA60, 0x1FA6E, 0x1FA70, 0x1FA75, 0x1FA78, - 0x1FA7B, + 0x1FA7D, 0x1FA80, 0x1FA87, 0x1FA90, - 0x1FAA9, + 0x1FAAD, 0x1FAB0, - 0x1FAB7, + 0x1FABB, 0x1FAC0, - 0x1FAC3, + 0x1FAC6, 0x1FAD0, - 0x1FAD7, + 0x1FADA, + 0x1FAE0, + 0x1FAE8, + 0x1FAF0, + 0x1FAF7, 0x1FB00, 0x1FB93, 0x1FB94, @@ -155606,9 +159151,9 @@ static const UV UNI_XPOSIXPRINT_invlist[] = { /* for ASCII/Latin1 */ 0x1FBF0, 0x1FBFA, 0x20000, - 0x2A6DE, + 0x2A6E0, 0x2A700, - 0x2B735, + 0x2B739, 0x2B740, 0x2B81E, 0x2B820, @@ -155639,7 +159184,7 @@ static const UV UNI_XPOSIXPRINT_invlist[] = { /* for ASCII/Latin1 */ && '$' == 91 && '@' == 124 && '`' == 121 && '\n' == 21 static const UV UNI_XPOSIXPRINT_invlist[] = { /* for EBCDIC 1047 */ - 1359, /* Number of elements */ + 1401, /* Number of elements */ 148565664, /* Version and data structure type */ 1, /* 0 if the list starts at 0; 1 if it starts at the element beyond 0 */ @@ -155671,8 +159216,6 @@ static const UV UNI_XPOSIXPRINT_invlist[] = { /* for EBCDIC 1047 */ 0x5EF, 0x5F5, 0x600, - 0x61D, - 0x61E, 0x70E, 0x70F, 0x74B, @@ -155690,11 +159233,11 @@ static const UV UNI_XPOSIXPRINT_invlist[] = { /* for EBCDIC 1047 */ 0x85F, 0x860, 0x86B, - 0x8A0, - 0x8B5, - 0x8B6, - 0x8C8, - 0x8D3, + 0x870, + 0x88F, + 0x890, + 0x892, + 0x898, 0x984, 0x985, 0x98D, @@ -155850,7 +159393,7 @@ static const UV UNI_XPOSIXPRINT_invlist[] = { /* for EBCDIC 1047 */ 0xC29, 0xC2A, 0xC3A, - 0xC3D, + 0xC3C, 0xC45, 0xC46, 0xC49, @@ -155860,6 +159403,8 @@ static const UV UNI_XPOSIXPRINT_invlist[] = { /* for EBCDIC 1047 */ 0xC57, 0xC58, 0xC5B, + 0xC5D, + 0xC5E, 0xC60, 0xC64, 0xC66, @@ -155882,7 +159427,7 @@ static const UV UNI_XPOSIXPRINT_invlist[] = { /* for EBCDIC 1047 */ 0xCCE, 0xCD5, 0xCD7, - 0xCDE, + 0xCDD, 0xCDF, 0xCE0, 0xCE4, @@ -156017,10 +159562,8 @@ static const UV UNI_XPOSIXPRINT_invlist[] = { /* for EBCDIC 1047 */ 0x16A0, 0x16F9, 0x1700, - 0x170D, - 0x170E, - 0x1715, - 0x1720, + 0x1716, + 0x171F, 0x1737, 0x1740, 0x1754, @@ -156037,8 +159580,6 @@ static const UV UNI_XPOSIXPRINT_invlist[] = { /* for EBCDIC 1047 */ 0x17F0, 0x17FA, 0x1800, - 0x180F, - 0x1810, 0x181A, 0x1820, 0x1879, @@ -156077,11 +159618,11 @@ static const UV UNI_XPOSIXPRINT_invlist[] = { /* for EBCDIC 1047 */ 0x1AA0, 0x1AAE, 0x1AB0, - 0x1AC1, + 0x1ACF, 0x1B00, - 0x1B4C, + 0x1B4D, 0x1B50, - 0x1B7D, + 0x1B7F, 0x1B80, 0x1BF4, 0x1BFC, @@ -156097,8 +159638,6 @@ static const UV UNI_XPOSIXPRINT_invlist[] = { /* for EBCDIC 1047 */ 0x1CD0, 0x1CFB, 0x1D00, - 0x1DFA, - 0x1DFB, 0x1F16, 0x1F18, 0x1F1E, @@ -156141,7 +159680,7 @@ static const UV UNI_XPOSIXPRINT_invlist[] = { /* for EBCDIC 1047 */ 0x2090, 0x209D, 0x20A0, - 0x20C0, + 0x20C1, 0x20D0, 0x20F1, 0x2100, @@ -156155,10 +159694,6 @@ static const UV UNI_XPOSIXPRINT_invlist[] = { /* for EBCDIC 1047 */ 0x2B76, 0x2B96, 0x2B97, - 0x2C2F, - 0x2C30, - 0x2C5F, - 0x2C60, 0x2CF4, 0x2CF9, 0x2D26, @@ -156189,7 +159724,7 @@ static const UV UNI_XPOSIXPRINT_invlist[] = { /* for EBCDIC 1047 */ 0x2DD8, 0x2DDF, 0x2DE0, - 0x2E53, + 0x2E5E, 0x2E80, 0x2E9A, 0x2E9B, @@ -156213,8 +159748,6 @@ static const UV UNI_XPOSIXPRINT_invlist[] = { /* for EBCDIC 1047 */ 0x31F0, 0x321F, 0x3220, - 0x9FFD, - 0xA000, 0xA48D, 0xA490, 0xA4C7, @@ -156223,10 +159756,14 @@ static const UV UNI_XPOSIXPRINT_invlist[] = { /* for EBCDIC 1047 */ 0xA640, 0xA6F8, 0xA700, - 0xA7C0, - 0xA7C2, 0xA7CB, - 0xA7F5, + 0xA7D0, + 0xA7D2, + 0xA7D3, + 0xA7D4, + 0xA7D5, + 0xA7DA, + 0xA7F2, 0xA82D, 0xA830, 0xA83A, @@ -156297,16 +159834,14 @@ static const UV UNI_XPOSIXPRINT_invlist[] = { /* for EBCDIC 1047 */ 0xFB43, 0xFB45, 0xFB46, - 0xFBC2, + 0xFBC3, 0xFBD3, - 0xFD40, - 0xFD50, 0xFD90, 0xFD92, 0xFDC8, + 0xFDCF, + 0xFDD0, 0xFDF0, - 0xFDFE, - 0xFE00, 0xFE1A, 0xFE20, 0xFE53, @@ -156393,13 +159928,33 @@ static const UV UNI_XPOSIXPRINT_invlist[] = { /* for EBCDIC 1047 */ 0x10530, 0x10564, 0x1056F, - 0x10570, + 0x1057B, + 0x1057C, + 0x1058B, + 0x1058C, + 0x10593, + 0x10594, + 0x10596, + 0x10597, + 0x105A2, + 0x105A3, + 0x105B2, + 0x105B3, + 0x105BA, + 0x105BB, + 0x105BD, 0x10600, 0x10737, 0x10740, 0x10756, 0x10760, 0x10768, + 0x10780, + 0x10786, + 0x10787, + 0x107B1, + 0x107B2, + 0x107BB, 0x10800, 0x10806, 0x10808, @@ -156486,6 +160041,8 @@ static const UV UNI_XPOSIXPRINT_invlist[] = { /* for EBCDIC 1047 */ 0x10F28, 0x10F30, 0x10F5A, + 0x10F70, + 0x10F8A, 0x10FB0, 0x10FCC, 0x10FE0, @@ -156493,9 +160050,9 @@ static const UV UNI_XPOSIXPRINT_invlist[] = { /* for EBCDIC 1047 */ 0x11000, 0x1104E, 0x11052, - 0x11070, + 0x11076, 0x1107F, - 0x110C2, + 0x110C3, 0x110CD, 0x110CE, 0x110D0, @@ -156579,7 +160136,7 @@ static const UV UNI_XPOSIXPRINT_invlist[] = { /* for EBCDIC 1047 */ 0x11660, 0x1166D, 0x11680, - 0x116B9, + 0x116BA, 0x116C0, 0x116CA, 0x11700, @@ -156587,7 +160144,7 @@ static const UV UNI_XPOSIXPRINT_invlist[] = { /* for EBCDIC 1047 */ 0x1171D, 0x1172C, 0x11730, - 0x11740, + 0x11747, 0x11800, 0x1183C, 0x118A0, @@ -156618,7 +160175,7 @@ static const UV UNI_XPOSIXPRINT_invlist[] = { /* for EBCDIC 1047 */ 0x11A48, 0x11A50, 0x11AA3, - 0x11AC0, + 0x11AB0, 0x11AF9, 0x11C00, 0x11C09, @@ -156674,6 +160231,8 @@ static const UV UNI_XPOSIXPRINT_invlist[] = { /* for EBCDIC 1047 */ 0x12475, 0x12480, 0x12544, + 0x12F90, + 0x12FF3, 0x13000, 0x1342F, 0x13430, @@ -156687,7 +160246,9 @@ static const UV UNI_XPOSIXPRINT_invlist[] = { /* for EBCDIC 1047 */ 0x16A60, 0x16A6A, 0x16A6E, - 0x16A70, + 0x16ABF, + 0x16AC0, + 0x16ACA, 0x16AD0, 0x16AEE, 0x16AF0, @@ -156720,8 +160281,14 @@ static const UV UNI_XPOSIXPRINT_invlist[] = { /* for EBCDIC 1047 */ 0x18CD6, 0x18D00, 0x18D09, + 0x1AFF0, + 0x1AFF4, + 0x1AFF5, + 0x1AFFC, + 0x1AFFD, + 0x1AFFF, 0x1B000, - 0x1B11F, + 0x1B123, 0x1B150, 0x1B153, 0x1B164, @@ -156738,12 +160305,18 @@ static const UV UNI_XPOSIXPRINT_invlist[] = { /* for EBCDIC 1047 */ 0x1BC9A, 0x1BC9C, 0x1BCA4, + 0x1CF00, + 0x1CF2E, + 0x1CF30, + 0x1CF47, + 0x1CF50, + 0x1CFC4, 0x1D000, 0x1D0F6, 0x1D100, 0x1D127, 0x1D129, - 0x1D1E9, + 0x1D1EB, 0x1D200, 0x1D246, 0x1D2E0, @@ -156798,6 +160371,8 @@ static const UV UNI_XPOSIXPRINT_invlist[] = { /* for EBCDIC 1047 */ 0x1DAA0, 0x1DAA1, 0x1DAB0, + 0x1DF00, + 0x1DF1F, 0x1E000, 0x1E007, 0x1E008, @@ -156816,10 +160391,20 @@ static const UV UNI_XPOSIXPRINT_invlist[] = { /* for EBCDIC 1047 */ 0x1E14A, 0x1E14E, 0x1E150, + 0x1E290, + 0x1E2AF, 0x1E2C0, 0x1E2FA, 0x1E2FF, 0x1E300, + 0x1E7E0, + 0x1E7E7, + 0x1E7E8, + 0x1E7EC, + 0x1E7ED, + 0x1E7EF, + 0x1E7F0, + 0x1E7FF, 0x1E800, 0x1E8C5, 0x1E8C7, @@ -156928,7 +160513,7 @@ static const UV UNI_XPOSIXPRINT_invlist[] = { /* for EBCDIC 1047 */ 0x1F266, 0x1F300, 0x1F6D8, - 0x1F6E0, + 0x1F6DD, 0x1F6ED, 0x1F6F0, 0x1F6FD, @@ -156938,6 +160523,8 @@ static const UV UNI_XPOSIXPRINT_invlist[] = { /* for EBCDIC 1047 */ 0x1F7D9, 0x1F7E0, 0x1F7EC, + 0x1F7F0, + 0x1F7F1, 0x1F800, 0x1F80C, 0x1F810, @@ -156951,27 +160538,27 @@ static const UV UNI_XPOSIXPRINT_invlist[] = { /* for EBCDIC 1047 */ 0x1F8B0, 0x1F8B2, 0x1F900, - 0x1F979, - 0x1F97A, - 0x1F9CC, - 0x1F9CD, 0x1FA54, 0x1FA60, 0x1FA6E, 0x1FA70, 0x1FA75, 0x1FA78, - 0x1FA7B, + 0x1FA7D, 0x1FA80, 0x1FA87, 0x1FA90, - 0x1FAA9, + 0x1FAAD, 0x1FAB0, - 0x1FAB7, + 0x1FABB, 0x1FAC0, - 0x1FAC3, + 0x1FAC6, 0x1FAD0, - 0x1FAD7, + 0x1FADA, + 0x1FAE0, + 0x1FAE8, + 0x1FAF0, + 0x1FAF7, 0x1FB00, 0x1FB93, 0x1FB94, @@ -156979,9 +160566,9 @@ static const UV UNI_XPOSIXPRINT_invlist[] = { /* for EBCDIC 1047 */ 0x1FBF0, 0x1FBFA, 0x20000, - 0x2A6DE, + 0x2A6E0, 0x2A700, - 0x2B735, + 0x2B739, 0x2B740, 0x2B81E, 0x2B820, @@ -157012,7 +160599,7 @@ static const UV UNI_XPOSIXPRINT_invlist[] = { /* for EBCDIC 1047 */ && '$' == 91 && '@' == 124 && '`' == 121 && '\n' == 37 static const UV UNI_XPOSIXPRINT_invlist[] = { /* for EBCDIC 037 */ - 1359, /* Number of elements */ + 1401, /* Number of elements */ 148565664, /* Version and data structure type */ 1, /* 0 if the list starts at 0; 1 if it starts at the element beyond 0 */ @@ -157044,8 +160631,6 @@ static const UV UNI_XPOSIXPRINT_invlist[] = { /* for EBCDIC 037 */ 0x5EF, 0x5F5, 0x600, - 0x61D, - 0x61E, 0x70E, 0x70F, 0x74B, @@ -157063,11 +160648,11 @@ static const UV UNI_XPOSIXPRINT_invlist[] = { /* for EBCDIC 037 */ 0x85F, 0x860, 0x86B, - 0x8A0, - 0x8B5, - 0x8B6, - 0x8C8, - 0x8D3, + 0x870, + 0x88F, + 0x890, + 0x892, + 0x898, 0x984, 0x985, 0x98D, @@ -157223,7 +160808,7 @@ static const UV UNI_XPOSIXPRINT_invlist[] = { /* for EBCDIC 037 */ 0xC29, 0xC2A, 0xC3A, - 0xC3D, + 0xC3C, 0xC45, 0xC46, 0xC49, @@ -157233,6 +160818,8 @@ static const UV UNI_XPOSIXPRINT_invlist[] = { /* for EBCDIC 037 */ 0xC57, 0xC58, 0xC5B, + 0xC5D, + 0xC5E, 0xC60, 0xC64, 0xC66, @@ -157255,7 +160842,7 @@ static const UV UNI_XPOSIXPRINT_invlist[] = { /* for EBCDIC 037 */ 0xCCE, 0xCD5, 0xCD7, - 0xCDE, + 0xCDD, 0xCDF, 0xCE0, 0xCE4, @@ -157390,10 +160977,8 @@ static const UV UNI_XPOSIXPRINT_invlist[] = { /* for EBCDIC 037 */ 0x16A0, 0x16F9, 0x1700, - 0x170D, - 0x170E, - 0x1715, - 0x1720, + 0x1716, + 0x171F, 0x1737, 0x1740, 0x1754, @@ -157410,8 +160995,6 @@ static const UV UNI_XPOSIXPRINT_invlist[] = { /* for EBCDIC 037 */ 0x17F0, 0x17FA, 0x1800, - 0x180F, - 0x1810, 0x181A, 0x1820, 0x1879, @@ -157450,11 +161033,11 @@ static const UV UNI_XPOSIXPRINT_invlist[] = { /* for EBCDIC 037 */ 0x1AA0, 0x1AAE, 0x1AB0, - 0x1AC1, + 0x1ACF, 0x1B00, - 0x1B4C, + 0x1B4D, 0x1B50, - 0x1B7D, + 0x1B7F, 0x1B80, 0x1BF4, 0x1BFC, @@ -157470,8 +161053,6 @@ static const UV UNI_XPOSIXPRINT_invlist[] = { /* for EBCDIC 037 */ 0x1CD0, 0x1CFB, 0x1D00, - 0x1DFA, - 0x1DFB, 0x1F16, 0x1F18, 0x1F1E, @@ -157514,7 +161095,7 @@ static const UV UNI_XPOSIXPRINT_invlist[] = { /* for EBCDIC 037 */ 0x2090, 0x209D, 0x20A0, - 0x20C0, + 0x20C1, 0x20D0, 0x20F1, 0x2100, @@ -157528,10 +161109,6 @@ static const UV UNI_XPOSIXPRINT_invlist[] = { /* for EBCDIC 037 */ 0x2B76, 0x2B96, 0x2B97, - 0x2C2F, - 0x2C30, - 0x2C5F, - 0x2C60, 0x2CF4, 0x2CF9, 0x2D26, @@ -157562,7 +161139,7 @@ static const UV UNI_XPOSIXPRINT_invlist[] = { /* for EBCDIC 037 */ 0x2DD8, 0x2DDF, 0x2DE0, - 0x2E53, + 0x2E5E, 0x2E80, 0x2E9A, 0x2E9B, @@ -157586,8 +161163,6 @@ static const UV UNI_XPOSIXPRINT_invlist[] = { /* for EBCDIC 037 */ 0x31F0, 0x321F, 0x3220, - 0x9FFD, - 0xA000, 0xA48D, 0xA490, 0xA4C7, @@ -157596,10 +161171,14 @@ static const UV UNI_XPOSIXPRINT_invlist[] = { /* for EBCDIC 037 */ 0xA640, 0xA6F8, 0xA700, - 0xA7C0, - 0xA7C2, 0xA7CB, - 0xA7F5, + 0xA7D0, + 0xA7D2, + 0xA7D3, + 0xA7D4, + 0xA7D5, + 0xA7DA, + 0xA7F2, 0xA82D, 0xA830, 0xA83A, @@ -157670,16 +161249,14 @@ static const UV UNI_XPOSIXPRINT_invlist[] = { /* for EBCDIC 037 */ 0xFB43, 0xFB45, 0xFB46, - 0xFBC2, + 0xFBC3, 0xFBD3, - 0xFD40, - 0xFD50, 0xFD90, 0xFD92, 0xFDC8, + 0xFDCF, + 0xFDD0, 0xFDF0, - 0xFDFE, - 0xFE00, 0xFE1A, 0xFE20, 0xFE53, @@ -157766,13 +161343,33 @@ static const UV UNI_XPOSIXPRINT_invlist[] = { /* for EBCDIC 037 */ 0x10530, 0x10564, 0x1056F, - 0x10570, + 0x1057B, + 0x1057C, + 0x1058B, + 0x1058C, + 0x10593, + 0x10594, + 0x10596, + 0x10597, + 0x105A2, + 0x105A3, + 0x105B2, + 0x105B3, + 0x105BA, + 0x105BB, + 0x105BD, 0x10600, 0x10737, 0x10740, 0x10756, 0x10760, 0x10768, + 0x10780, + 0x10786, + 0x10787, + 0x107B1, + 0x107B2, + 0x107BB, 0x10800, 0x10806, 0x10808, @@ -157859,6 +161456,8 @@ static const UV UNI_XPOSIXPRINT_invlist[] = { /* for EBCDIC 037 */ 0x10F28, 0x10F30, 0x10F5A, + 0x10F70, + 0x10F8A, 0x10FB0, 0x10FCC, 0x10FE0, @@ -157866,9 +161465,9 @@ static const UV UNI_XPOSIXPRINT_invlist[] = { /* for EBCDIC 037 */ 0x11000, 0x1104E, 0x11052, - 0x11070, + 0x11076, 0x1107F, - 0x110C2, + 0x110C3, 0x110CD, 0x110CE, 0x110D0, @@ -157952,7 +161551,7 @@ static const UV UNI_XPOSIXPRINT_invlist[] = { /* for EBCDIC 037 */ 0x11660, 0x1166D, 0x11680, - 0x116B9, + 0x116BA, 0x116C0, 0x116CA, 0x11700, @@ -157960,7 +161559,7 @@ static const UV UNI_XPOSIXPRINT_invlist[] = { /* for EBCDIC 037 */ 0x1171D, 0x1172C, 0x11730, - 0x11740, + 0x11747, 0x11800, 0x1183C, 0x118A0, @@ -157991,7 +161590,7 @@ static const UV UNI_XPOSIXPRINT_invlist[] = { /* for EBCDIC 037 */ 0x11A48, 0x11A50, 0x11AA3, - 0x11AC0, + 0x11AB0, 0x11AF9, 0x11C00, 0x11C09, @@ -158047,6 +161646,8 @@ static const UV UNI_XPOSIXPRINT_invlist[] = { /* for EBCDIC 037 */ 0x12475, 0x12480, 0x12544, + 0x12F90, + 0x12FF3, 0x13000, 0x1342F, 0x13430, @@ -158060,7 +161661,9 @@ static const UV UNI_XPOSIXPRINT_invlist[] = { /* for EBCDIC 037 */ 0x16A60, 0x16A6A, 0x16A6E, - 0x16A70, + 0x16ABF, + 0x16AC0, + 0x16ACA, 0x16AD0, 0x16AEE, 0x16AF0, @@ -158093,8 +161696,14 @@ static const UV UNI_XPOSIXPRINT_invlist[] = { /* for EBCDIC 037 */ 0x18CD6, 0x18D00, 0x18D09, + 0x1AFF0, + 0x1AFF4, + 0x1AFF5, + 0x1AFFC, + 0x1AFFD, + 0x1AFFF, 0x1B000, - 0x1B11F, + 0x1B123, 0x1B150, 0x1B153, 0x1B164, @@ -158111,12 +161720,18 @@ static const UV UNI_XPOSIXPRINT_invlist[] = { /* for EBCDIC 037 */ 0x1BC9A, 0x1BC9C, 0x1BCA4, + 0x1CF00, + 0x1CF2E, + 0x1CF30, + 0x1CF47, + 0x1CF50, + 0x1CFC4, 0x1D000, 0x1D0F6, 0x1D100, 0x1D127, 0x1D129, - 0x1D1E9, + 0x1D1EB, 0x1D200, 0x1D246, 0x1D2E0, @@ -158171,6 +161786,8 @@ static const UV UNI_XPOSIXPRINT_invlist[] = { /* for EBCDIC 037 */ 0x1DAA0, 0x1DAA1, 0x1DAB0, + 0x1DF00, + 0x1DF1F, 0x1E000, 0x1E007, 0x1E008, @@ -158189,10 +161806,20 @@ static const UV UNI_XPOSIXPRINT_invlist[] = { /* for EBCDIC 037 */ 0x1E14A, 0x1E14E, 0x1E150, + 0x1E290, + 0x1E2AF, 0x1E2C0, 0x1E2FA, 0x1E2FF, 0x1E300, + 0x1E7E0, + 0x1E7E7, + 0x1E7E8, + 0x1E7EC, + 0x1E7ED, + 0x1E7EF, + 0x1E7F0, + 0x1E7FF, 0x1E800, 0x1E8C5, 0x1E8C7, @@ -158301,7 +161928,7 @@ static const UV UNI_XPOSIXPRINT_invlist[] = { /* for EBCDIC 037 */ 0x1F266, 0x1F300, 0x1F6D8, - 0x1F6E0, + 0x1F6DD, 0x1F6ED, 0x1F6F0, 0x1F6FD, @@ -158311,6 +161938,8 @@ static const UV UNI_XPOSIXPRINT_invlist[] = { /* for EBCDIC 037 */ 0x1F7D9, 0x1F7E0, 0x1F7EC, + 0x1F7F0, + 0x1F7F1, 0x1F800, 0x1F80C, 0x1F810, @@ -158324,27 +161953,27 @@ static const UV UNI_XPOSIXPRINT_invlist[] = { /* for EBCDIC 037 */ 0x1F8B0, 0x1F8B2, 0x1F900, - 0x1F979, - 0x1F97A, - 0x1F9CC, - 0x1F9CD, 0x1FA54, 0x1FA60, 0x1FA6E, 0x1FA70, 0x1FA75, 0x1FA78, - 0x1FA7B, + 0x1FA7D, 0x1FA80, 0x1FA87, 0x1FA90, - 0x1FAA9, + 0x1FAAD, 0x1FAB0, - 0x1FAB7, + 0x1FABB, 0x1FAC0, - 0x1FAC3, + 0x1FAC6, 0x1FAD0, - 0x1FAD7, + 0x1FADA, + 0x1FAE0, + 0x1FAE8, + 0x1FAF0, + 0x1FAF7, 0x1FB00, 0x1FB93, 0x1FB94, @@ -158352,9 +161981,9 @@ static const UV UNI_XPOSIXPRINT_invlist[] = { /* for EBCDIC 037 */ 0x1FBF0, 0x1FBFA, 0x20000, - 0x2A6DE, + 0x2A6E0, 0x2A700, - 0x2B735, + 0x2B739, 0x2B740, 0x2B81E, 0x2B820, @@ -158382,7 +162011,7 @@ static const UV UNI_XPOSIXPRINT_invlist[] = { /* for EBCDIC 037 */ # if 'A' == 65 /* ASCII/Latin1 */ static const UV UNI_XPOSIXPUNCT_invlist[] = { /* for ASCII/Latin1 */ - 361, /* Number of elements */ + 369, /* Number of elements */ 148565664, /* Version and data structure type */ 1, /* 0 if the list starts at 0; 1 if it starts at the element beyond 0 */ @@ -158431,7 +162060,7 @@ static const UV UNI_XPOSIXPUNCT_invlist[] = { /* for ASCII/Latin1 */ 0x60E, 0x61B, 0x61C, - 0x61E, + 0x61D, 0x620, 0x66A, 0x66E, @@ -158509,6 +162138,8 @@ static const UV UNI_XPOSIXPUNCT_invlist[] = { /* for ASCII/Latin1 */ 0x1AAE, 0x1B5A, 0x1B61, + 0x1B7D, + 0x1B7F, 0x1BFC, 0x1C00, 0x1C3B, @@ -158558,7 +162189,7 @@ static const UV UNI_XPOSIXPUNCT_invlist[] = { /* for ASCII/Latin1 */ 0x2E30, 0x2E50, 0x2E52, - 0x2E53, + 0x2E5E, 0x3001, 0x3004, 0x3008, @@ -158669,6 +162300,8 @@ static const UV UNI_XPOSIXPUNCT_invlist[] = { /* for ASCII/Latin1 */ 0x10EAE, 0x10F55, 0x10F5A, + 0x10F86, + 0x10F8A, 0x11047, 0x1104E, 0x110BB, @@ -158705,6 +162338,8 @@ static const UV UNI_XPOSIXPUNCT_invlist[] = { /* for ASCII/Latin1 */ 0x11644, 0x11660, 0x1166D, + 0x116B9, + 0x116BA, 0x1173C, 0x1173F, 0x1183B, @@ -158729,6 +162364,8 @@ static const UV UNI_XPOSIXPUNCT_invlist[] = { /* for ASCII/Latin1 */ 0x12000, 0x12470, 0x12475, + 0x12FF1, + 0x12FF3, 0x16A6E, 0x16A70, 0x16AF5, @@ -158757,7 +162394,7 @@ static const UV UNI_XPOSIXPUNCT_invlist[] = { /* for ASCII/Latin1 */ && '$' == 91 && '@' == 124 && '`' == 121 && '\n' == 21 static const UV UNI_XPOSIXPUNCT_invlist[] = { /* for EBCDIC 1047 */ - 369, /* Number of elements */ + 377, /* Number of elements */ 148565664, /* Version and data structure type */ 1, /* 0 if the list starts at 0; 1 if it starts at the element beyond 0 */ @@ -158814,7 +162451,7 @@ static const UV UNI_XPOSIXPUNCT_invlist[] = { /* for EBCDIC 1047 */ 0x60E, 0x61B, 0x61C, - 0x61E, + 0x61D, 0x620, 0x66A, 0x66E, @@ -158892,6 +162529,8 @@ static const UV UNI_XPOSIXPUNCT_invlist[] = { /* for EBCDIC 1047 */ 0x1AAE, 0x1B5A, 0x1B61, + 0x1B7D, + 0x1B7F, 0x1BFC, 0x1C00, 0x1C3B, @@ -158941,7 +162580,7 @@ static const UV UNI_XPOSIXPUNCT_invlist[] = { /* for EBCDIC 1047 */ 0x2E30, 0x2E50, 0x2E52, - 0x2E53, + 0x2E5E, 0x3001, 0x3004, 0x3008, @@ -159052,6 +162691,8 @@ static const UV UNI_XPOSIXPUNCT_invlist[] = { /* for EBCDIC 1047 */ 0x10EAE, 0x10F55, 0x10F5A, + 0x10F86, + 0x10F8A, 0x11047, 0x1104E, 0x110BB, @@ -159088,6 +162729,8 @@ static const UV UNI_XPOSIXPUNCT_invlist[] = { /* for EBCDIC 1047 */ 0x11644, 0x11660, 0x1166D, + 0x116B9, + 0x116BA, 0x1173C, 0x1173F, 0x1183B, @@ -159112,6 +162755,8 @@ static const UV UNI_XPOSIXPUNCT_invlist[] = { /* for EBCDIC 1047 */ 0x12000, 0x12470, 0x12475, + 0x12FF1, + 0x12FF3, 0x16A6E, 0x16A70, 0x16AF5, @@ -159140,7 +162785,7 @@ static const UV UNI_XPOSIXPUNCT_invlist[] = { /* for EBCDIC 1047 */ && '$' == 91 && '@' == 124 && '`' == 121 && '\n' == 37 static const UV UNI_XPOSIXPUNCT_invlist[] = { /* for EBCDIC 037 */ - 371, /* Number of elements */ + 379, /* Number of elements */ 148565664, /* Version and data structure type */ 1, /* 0 if the list starts at 0; 1 if it starts at the element beyond 0 */ @@ -159199,7 +162844,7 @@ static const UV UNI_XPOSIXPUNCT_invlist[] = { /* for EBCDIC 037 */ 0x60E, 0x61B, 0x61C, - 0x61E, + 0x61D, 0x620, 0x66A, 0x66E, @@ -159277,6 +162922,8 @@ static const UV UNI_XPOSIXPUNCT_invlist[] = { /* for EBCDIC 037 */ 0x1AAE, 0x1B5A, 0x1B61, + 0x1B7D, + 0x1B7F, 0x1BFC, 0x1C00, 0x1C3B, @@ -159326,7 +162973,7 @@ static const UV UNI_XPOSIXPUNCT_invlist[] = { /* for EBCDIC 037 */ 0x2E30, 0x2E50, 0x2E52, - 0x2E53, + 0x2E5E, 0x3001, 0x3004, 0x3008, @@ -159437,6 +163084,8 @@ static const UV UNI_XPOSIXPUNCT_invlist[] = { /* for EBCDIC 037 */ 0x10EAE, 0x10F55, 0x10F5A, + 0x10F86, + 0x10F8A, 0x11047, 0x1104E, 0x110BB, @@ -159473,6 +163122,8 @@ static const UV UNI_XPOSIXPUNCT_invlist[] = { /* for EBCDIC 037 */ 0x11644, 0x11660, 0x1166D, + 0x116B9, + 0x116BA, 0x1173C, 0x1173F, 0x1183B, @@ -159497,6 +163148,8 @@ static const UV UNI_XPOSIXPUNCT_invlist[] = { /* for EBCDIC 037 */ 0x12000, 0x12470, 0x12475, + 0x12FF1, + 0x12FF3, 0x16A6E, 0x16A70, 0x16AF5, @@ -159628,7 +163281,7 @@ static const UV UNI_XPOSIXSPACE_invlist[] = { /* for EBCDIC 037 */ # if 'A' == 65 /* ASCII/Latin1 */ static const UV UNI_XPOSIXUPPER_invlist[] = { /* for ASCII/Latin1 */ - 1287, /* Number of elements */ + 1303, /* Number of elements */ 148565664, /* Version and data structure type */ 1, /* 0 if the list starts at 0; 1 if it starts at the element beyond 0 */ @@ -160500,7 +164153,7 @@ static const UV UNI_XPOSIXUPPER_invlist[] = { /* for ASCII/Latin1 */ 0x24B6, 0x24D0, 0x2C00, - 0x2C2F, + 0x2C30, 0x2C60, 0x2C61, 0x2C62, @@ -160829,12 +164482,20 @@ static const UV UNI_XPOSIXUPPER_invlist[] = { /* for ASCII/Latin1 */ 0xA7BD, 0xA7BE, 0xA7BF, + 0xA7C0, + 0xA7C1, 0xA7C2, 0xA7C3, 0xA7C4, 0xA7C8, 0xA7C9, 0xA7CA, + 0xA7D0, + 0xA7D1, + 0xA7D6, + 0xA7D7, + 0xA7D8, + 0xA7D9, 0xA7F5, 0xA7F6, 0xFF21, @@ -160843,6 +164504,14 @@ static const UV UNI_XPOSIXUPPER_invlist[] = { /* for ASCII/Latin1 */ 0x10428, 0x104B0, 0x104D4, + 0x10570, + 0x1057B, + 0x1057C, + 0x1058B, + 0x1058C, + 0x10593, + 0x10594, + 0x10596, 0x10C80, 0x10CB3, 0x118A0, @@ -160929,7 +164598,7 @@ static const UV UNI_XPOSIXUPPER_invlist[] = { /* for ASCII/Latin1 */ && '$' == 91 && '@' == 124 && '`' == 121 && '\n' == 21 static const UV UNI_XPOSIXUPPER_invlist[] = { /* for EBCDIC 1047 */ - 1305, /* Number of elements */ + 1321, /* Number of elements */ 148565664, /* Version and data structure type */ 1, /* 0 if the list starts at 0; 1 if it starts at the element beyond 0 */ @@ -161819,7 +165488,7 @@ static const UV UNI_XPOSIXUPPER_invlist[] = { /* for EBCDIC 1047 */ 0x24B6, 0x24D0, 0x2C00, - 0x2C2F, + 0x2C30, 0x2C60, 0x2C61, 0x2C62, @@ -162148,12 +165817,20 @@ static const UV UNI_XPOSIXUPPER_invlist[] = { /* for EBCDIC 1047 */ 0xA7BD, 0xA7BE, 0xA7BF, + 0xA7C0, + 0xA7C1, 0xA7C2, 0xA7C3, 0xA7C4, 0xA7C8, 0xA7C9, 0xA7CA, + 0xA7D0, + 0xA7D1, + 0xA7D6, + 0xA7D7, + 0xA7D8, + 0xA7D9, 0xA7F5, 0xA7F6, 0xFF21, @@ -162162,6 +165839,14 @@ static const UV UNI_XPOSIXUPPER_invlist[] = { /* for EBCDIC 1047 */ 0x10428, 0x104B0, 0x104D4, + 0x10570, + 0x1057B, + 0x1057C, + 0x1058B, + 0x1058C, + 0x10593, + 0x10594, + 0x10596, 0x10C80, 0x10CB3, 0x118A0, @@ -162248,7 +165933,7 @@ static const UV UNI_XPOSIXUPPER_invlist[] = { /* for EBCDIC 1047 */ && '$' == 91 && '@' == 124 && '`' == 121 && '\n' == 37 static const UV UNI_XPOSIXUPPER_invlist[] = { /* for EBCDIC 037 */ - 1301, /* Number of elements */ + 1317, /* Number of elements */ 148565664, /* Version and data structure type */ 1, /* 0 if the list starts at 0; 1 if it starts at the element beyond 0 */ @@ -163134,7 +166819,7 @@ static const UV UNI_XPOSIXUPPER_invlist[] = { /* for EBCDIC 037 */ 0x24B6, 0x24D0, 0x2C00, - 0x2C2F, + 0x2C30, 0x2C60, 0x2C61, 0x2C62, @@ -163463,12 +167148,20 @@ static const UV UNI_XPOSIXUPPER_invlist[] = { /* for EBCDIC 037 */ 0xA7BD, 0xA7BE, 0xA7BF, + 0xA7C0, + 0xA7C1, 0xA7C2, 0xA7C3, 0xA7C4, 0xA7C8, 0xA7C9, 0xA7CA, + 0xA7D0, + 0xA7D1, + 0xA7D6, + 0xA7D7, + 0xA7D8, + 0xA7D9, 0xA7F5, 0xA7F6, 0xFF21, @@ -163477,6 +167170,14 @@ static const UV UNI_XPOSIXUPPER_invlist[] = { /* for EBCDIC 037 */ 0x10428, 0x104B0, 0x104D4, + 0x10570, + 0x1057B, + 0x1057C, + 0x1058B, + 0x1058C, + 0x10593, + 0x10594, + 0x10596, 0x10C80, 0x10CB3, 0x118A0, @@ -163560,7 +167261,7 @@ static const UV UNI_XPOSIXUPPER_invlist[] = { /* for EBCDIC 037 */ # if 'A' == 65 /* ASCII/Latin1 */ static const UV UNI_XPOSIXWORD_invlist[] = { /* for ASCII/Latin1 */ - 1467, /* Number of elements */ + 1519, /* Number of elements */ 148565664, /* Version and data structure type */ 1, /* 0 if the list starts at 0; 1 if it starts at the element beyond 0 */ @@ -163665,11 +167366,11 @@ static const UV UNI_XPOSIXWORD_invlist[] = { /* for ASCII/Latin1 */ 0x85C, 0x860, 0x86B, - 0x8A0, - 0x8B5, - 0x8B6, - 0x8C8, - 0x8D3, + 0x870, + 0x888, + 0x889, + 0x88F, + 0x898, 0x8E2, 0x8E3, 0x964, @@ -163837,7 +167538,7 @@ static const UV UNI_XPOSIXWORD_invlist[] = { /* for ASCII/Latin1 */ 0xC29, 0xC2A, 0xC3A, - 0xC3D, + 0xC3C, 0xC45, 0xC46, 0xC49, @@ -163847,6 +167548,8 @@ static const UV UNI_XPOSIXWORD_invlist[] = { /* for ASCII/Latin1 */ 0xC57, 0xC58, 0xC5B, + 0xC5D, + 0xC5E, 0xC60, 0xC64, 0xC66, @@ -163871,7 +167574,7 @@ static const UV UNI_XPOSIXWORD_invlist[] = { /* for ASCII/Latin1 */ 0xCCE, 0xCD5, 0xCD7, - 0xCDE, + 0xCDD, 0xCDF, 0xCE0, 0xCE4, @@ -164036,10 +167739,8 @@ static const UV UNI_XPOSIXWORD_invlist[] = { /* for ASCII/Latin1 */ 0x16EE, 0x16F9, 0x1700, - 0x170D, - 0x170E, - 0x1715, - 0x1720, + 0x1716, + 0x171F, 0x1735, 0x1740, 0x1754, @@ -164059,7 +167760,7 @@ static const UV UNI_XPOSIXWORD_invlist[] = { /* for ASCII/Latin1 */ 0x17EA, 0x180B, 0x180E, - 0x1810, + 0x180F, 0x181A, 0x1820, 0x1879, @@ -164096,9 +167797,9 @@ static const UV UNI_XPOSIXWORD_invlist[] = { /* for ASCII/Latin1 */ 0x1AA7, 0x1AA8, 0x1AB0, - 0x1AC1, + 0x1ACF, 0x1B00, - 0x1B4C, + 0x1B4D, 0x1B50, 0x1B5A, 0x1B6B, @@ -164122,8 +167823,6 @@ static const UV UNI_XPOSIXWORD_invlist[] = { /* for ASCII/Latin1 */ 0x1CD4, 0x1CFB, 0x1D00, - 0x1DFA, - 0x1DFB, 0x1F16, 0x1F18, 0x1F1E, @@ -164206,10 +167905,6 @@ static const UV UNI_XPOSIXWORD_invlist[] = { /* for ASCII/Latin1 */ 0x24B6, 0x24EA, 0x2C00, - 0x2C2F, - 0x2C30, - 0x2C5F, - 0x2C60, 0x2CE5, 0x2CEB, 0x2CF4, @@ -164274,8 +167969,6 @@ static const UV UNI_XPOSIXWORD_invlist[] = { /* for ASCII/Latin1 */ 0x3400, 0x4DC0, 0x4E00, - 0x9FFD, - 0xA000, 0xA48D, 0xA4D0, 0xA4FE, @@ -164294,10 +167987,14 @@ static const UV UNI_XPOSIXWORD_invlist[] = { /* for ASCII/Latin1 */ 0xA722, 0xA789, 0xA78B, - 0xA7C0, - 0xA7C2, 0xA7CB, - 0xA7F5, + 0xA7D0, + 0xA7D2, + 0xA7D3, + 0xA7D4, + 0xA7D5, + 0xA7DA, + 0xA7F2, 0xA828, 0xA82C, 0xA82D, @@ -164475,12 +168172,34 @@ static const UV UNI_XPOSIXWORD_invlist[] = { /* for ASCII/Latin1 */ 0x10528, 0x10530, 0x10564, + 0x10570, + 0x1057B, + 0x1057C, + 0x1058B, + 0x1058C, + 0x10593, + 0x10594, + 0x10596, + 0x10597, + 0x105A2, + 0x105A3, + 0x105B2, + 0x105B3, + 0x105BA, + 0x105BB, + 0x105BD, 0x10600, 0x10737, 0x10740, 0x10756, 0x10760, 0x10768, + 0x10780, + 0x10786, + 0x10787, + 0x107B1, + 0x107B2, + 0x107BB, 0x10800, 0x10806, 0x10808, @@ -164561,6 +168280,8 @@ static const UV UNI_XPOSIXWORD_invlist[] = { /* for ASCII/Latin1 */ 0x10F28, 0x10F30, 0x10F51, + 0x10F70, + 0x10F86, 0x10FB0, 0x10FC5, 0x10FE0, @@ -164568,9 +168289,11 @@ static const UV UNI_XPOSIXWORD_invlist[] = { /* for ASCII/Latin1 */ 0x11000, 0x11047, 0x11066, - 0x11070, + 0x11076, 0x1107F, 0x110BB, + 0x110C2, + 0x110C3, 0x110D0, 0x110E9, 0x110F0, @@ -164677,6 +168400,8 @@ static const UV UNI_XPOSIXWORD_invlist[] = { /* for ASCII/Latin1 */ 0x1172C, 0x11730, 0x1173A, + 0x11740, + 0x11747, 0x11800, 0x1183B, 0x118A0, @@ -164713,7 +168438,7 @@ static const UV UNI_XPOSIXWORD_invlist[] = { /* for ASCII/Latin1 */ 0x11A9A, 0x11A9D, 0x11A9E, - 0x11AC0, + 0x11AB0, 0x11AF9, 0x11C00, 0x11C09, @@ -164765,6 +168490,8 @@ static const UV UNI_XPOSIXWORD_invlist[] = { /* for ASCII/Latin1 */ 0x1246F, 0x12480, 0x12544, + 0x12F90, + 0x12FF1, 0x13000, 0x1342F, 0x14400, @@ -164775,6 +168502,10 @@ static const UV UNI_XPOSIXWORD_invlist[] = { /* for ASCII/Latin1 */ 0x16A5F, 0x16A60, 0x16A6A, + 0x16A70, + 0x16ABF, + 0x16AC0, + 0x16ACA, 0x16AD0, 0x16AEE, 0x16AF0, @@ -164809,8 +168540,14 @@ static const UV UNI_XPOSIXWORD_invlist[] = { /* for ASCII/Latin1 */ 0x18CD6, 0x18D00, 0x18D09, + 0x1AFF0, + 0x1AFF4, + 0x1AFF5, + 0x1AFFC, + 0x1AFFD, + 0x1AFFF, 0x1B000, - 0x1B11F, + 0x1B123, 0x1B150, 0x1B153, 0x1B164, @@ -164827,6 +168564,10 @@ static const UV UNI_XPOSIXWORD_invlist[] = { /* for ASCII/Latin1 */ 0x1BC9A, 0x1BC9D, 0x1BC9F, + 0x1CF00, + 0x1CF2E, + 0x1CF30, + 0x1CF47, 0x1D165, 0x1D16A, 0x1D16D, @@ -164913,6 +168654,8 @@ static const UV UNI_XPOSIXWORD_invlist[] = { /* for ASCII/Latin1 */ 0x1DAA0, 0x1DAA1, 0x1DAB0, + 0x1DF00, + 0x1DF1F, 0x1E000, 0x1E007, 0x1E008, @@ -164931,8 +168674,18 @@ static const UV UNI_XPOSIXWORD_invlist[] = { /* for ASCII/Latin1 */ 0x1E14A, 0x1E14E, 0x1E14F, + 0x1E290, + 0x1E2AF, 0x1E2C0, 0x1E2FA, + 0x1E7E0, + 0x1E7E7, + 0x1E7E8, + 0x1E7EC, + 0x1E7ED, + 0x1E7EF, + 0x1E7F0, + 0x1E7FF, 0x1E800, 0x1E8C5, 0x1E8D0, @@ -165016,9 +168769,9 @@ static const UV UNI_XPOSIXWORD_invlist[] = { /* for ASCII/Latin1 */ 0x1FBF0, 0x1FBFA, 0x20000, - 0x2A6DE, + 0x2A6E0, 0x2A700, - 0x2B735, + 0x2B739, 0x2B740, 0x2B81E, 0x2B820, @@ -165041,7 +168794,7 @@ static const UV UNI_XPOSIXWORD_invlist[] = { /* for ASCII/Latin1 */ && '$' == 91 && '@' == 124 && '`' == 121 && '\n' == 21 static const UV UNI_XPOSIXWORD_invlist[] = { /* for EBCDIC 1047 */ - 1491, /* Number of elements */ + 1543, /* Number of elements */ 148565664, /* Version and data structure type */ 1, /* 0 if the list starts at 0; 1 if it starts at the element beyond 0 */ @@ -165170,11 +168923,11 @@ static const UV UNI_XPOSIXWORD_invlist[] = { /* for EBCDIC 1047 */ 0x85C, 0x860, 0x86B, - 0x8A0, - 0x8B5, - 0x8B6, - 0x8C8, - 0x8D3, + 0x870, + 0x888, + 0x889, + 0x88F, + 0x898, 0x8E2, 0x8E3, 0x964, @@ -165342,7 +169095,7 @@ static const UV UNI_XPOSIXWORD_invlist[] = { /* for EBCDIC 1047 */ 0xC29, 0xC2A, 0xC3A, - 0xC3D, + 0xC3C, 0xC45, 0xC46, 0xC49, @@ -165352,6 +169105,8 @@ static const UV UNI_XPOSIXWORD_invlist[] = { /* for EBCDIC 1047 */ 0xC57, 0xC58, 0xC5B, + 0xC5D, + 0xC5E, 0xC60, 0xC64, 0xC66, @@ -165376,7 +169131,7 @@ static const UV UNI_XPOSIXWORD_invlist[] = { /* for EBCDIC 1047 */ 0xCCE, 0xCD5, 0xCD7, - 0xCDE, + 0xCDD, 0xCDF, 0xCE0, 0xCE4, @@ -165541,10 +169296,8 @@ static const UV UNI_XPOSIXWORD_invlist[] = { /* for EBCDIC 1047 */ 0x16EE, 0x16F9, 0x1700, - 0x170D, - 0x170E, - 0x1715, - 0x1720, + 0x1716, + 0x171F, 0x1735, 0x1740, 0x1754, @@ -165564,7 +169317,7 @@ static const UV UNI_XPOSIXWORD_invlist[] = { /* for EBCDIC 1047 */ 0x17EA, 0x180B, 0x180E, - 0x1810, + 0x180F, 0x181A, 0x1820, 0x1879, @@ -165601,9 +169354,9 @@ static const UV UNI_XPOSIXWORD_invlist[] = { /* for EBCDIC 1047 */ 0x1AA7, 0x1AA8, 0x1AB0, - 0x1AC1, + 0x1ACF, 0x1B00, - 0x1B4C, + 0x1B4D, 0x1B50, 0x1B5A, 0x1B6B, @@ -165627,8 +169380,6 @@ static const UV UNI_XPOSIXWORD_invlist[] = { /* for EBCDIC 1047 */ 0x1CD4, 0x1CFB, 0x1D00, - 0x1DFA, - 0x1DFB, 0x1F16, 0x1F18, 0x1F1E, @@ -165711,10 +169462,6 @@ static const UV UNI_XPOSIXWORD_invlist[] = { /* for EBCDIC 1047 */ 0x24B6, 0x24EA, 0x2C00, - 0x2C2F, - 0x2C30, - 0x2C5F, - 0x2C60, 0x2CE5, 0x2CEB, 0x2CF4, @@ -165779,8 +169526,6 @@ static const UV UNI_XPOSIXWORD_invlist[] = { /* for EBCDIC 1047 */ 0x3400, 0x4DC0, 0x4E00, - 0x9FFD, - 0xA000, 0xA48D, 0xA4D0, 0xA4FE, @@ -165799,10 +169544,14 @@ static const UV UNI_XPOSIXWORD_invlist[] = { /* for EBCDIC 1047 */ 0xA722, 0xA789, 0xA78B, - 0xA7C0, - 0xA7C2, 0xA7CB, - 0xA7F5, + 0xA7D0, + 0xA7D2, + 0xA7D3, + 0xA7D4, + 0xA7D5, + 0xA7DA, + 0xA7F2, 0xA828, 0xA82C, 0xA82D, @@ -165980,12 +169729,34 @@ static const UV UNI_XPOSIXWORD_invlist[] = { /* for EBCDIC 1047 */ 0x10528, 0x10530, 0x10564, + 0x10570, + 0x1057B, + 0x1057C, + 0x1058B, + 0x1058C, + 0x10593, + 0x10594, + 0x10596, + 0x10597, + 0x105A2, + 0x105A3, + 0x105B2, + 0x105B3, + 0x105BA, + 0x105BB, + 0x105BD, 0x10600, 0x10737, 0x10740, 0x10756, 0x10760, 0x10768, + 0x10780, + 0x10786, + 0x10787, + 0x107B1, + 0x107B2, + 0x107BB, 0x10800, 0x10806, 0x10808, @@ -166066,6 +169837,8 @@ static const UV UNI_XPOSIXWORD_invlist[] = { /* for EBCDIC 1047 */ 0x10F28, 0x10F30, 0x10F51, + 0x10F70, + 0x10F86, 0x10FB0, 0x10FC5, 0x10FE0, @@ -166073,9 +169846,11 @@ static const UV UNI_XPOSIXWORD_invlist[] = { /* for EBCDIC 1047 */ 0x11000, 0x11047, 0x11066, - 0x11070, + 0x11076, 0x1107F, 0x110BB, + 0x110C2, + 0x110C3, 0x110D0, 0x110E9, 0x110F0, @@ -166182,6 +169957,8 @@ static const UV UNI_XPOSIXWORD_invlist[] = { /* for EBCDIC 1047 */ 0x1172C, 0x11730, 0x1173A, + 0x11740, + 0x11747, 0x11800, 0x1183B, 0x118A0, @@ -166218,7 +169995,7 @@ static const UV UNI_XPOSIXWORD_invlist[] = { /* for EBCDIC 1047 */ 0x11A9A, 0x11A9D, 0x11A9E, - 0x11AC0, + 0x11AB0, 0x11AF9, 0x11C00, 0x11C09, @@ -166270,6 +170047,8 @@ static const UV UNI_XPOSIXWORD_invlist[] = { /* for EBCDIC 1047 */ 0x1246F, 0x12480, 0x12544, + 0x12F90, + 0x12FF1, 0x13000, 0x1342F, 0x14400, @@ -166280,6 +170059,10 @@ static const UV UNI_XPOSIXWORD_invlist[] = { /* for EBCDIC 1047 */ 0x16A5F, 0x16A60, 0x16A6A, + 0x16A70, + 0x16ABF, + 0x16AC0, + 0x16ACA, 0x16AD0, 0x16AEE, 0x16AF0, @@ -166314,8 +170097,14 @@ static const UV UNI_XPOSIXWORD_invlist[] = { /* for EBCDIC 1047 */ 0x18CD6, 0x18D00, 0x18D09, + 0x1AFF0, + 0x1AFF4, + 0x1AFF5, + 0x1AFFC, + 0x1AFFD, + 0x1AFFF, 0x1B000, - 0x1B11F, + 0x1B123, 0x1B150, 0x1B153, 0x1B164, @@ -166332,6 +170121,10 @@ static const UV UNI_XPOSIXWORD_invlist[] = { /* for EBCDIC 1047 */ 0x1BC9A, 0x1BC9D, 0x1BC9F, + 0x1CF00, + 0x1CF2E, + 0x1CF30, + 0x1CF47, 0x1D165, 0x1D16A, 0x1D16D, @@ -166418,6 +170211,8 @@ static const UV UNI_XPOSIXWORD_invlist[] = { /* for EBCDIC 1047 */ 0x1DAA0, 0x1DAA1, 0x1DAB0, + 0x1DF00, + 0x1DF1F, 0x1E000, 0x1E007, 0x1E008, @@ -166436,8 +170231,18 @@ static const UV UNI_XPOSIXWORD_invlist[] = { /* for EBCDIC 1047 */ 0x1E14A, 0x1E14E, 0x1E14F, + 0x1E290, + 0x1E2AF, 0x1E2C0, 0x1E2FA, + 0x1E7E0, + 0x1E7E7, + 0x1E7E8, + 0x1E7EC, + 0x1E7ED, + 0x1E7EF, + 0x1E7F0, + 0x1E7FF, 0x1E800, 0x1E8C5, 0x1E8D0, @@ -166521,9 +170326,9 @@ static const UV UNI_XPOSIXWORD_invlist[] = { /* for EBCDIC 1047 */ 0x1FBF0, 0x1FBFA, 0x20000, - 0x2A6DE, + 0x2A6E0, 0x2A700, - 0x2B735, + 0x2B739, 0x2B740, 0x2B81E, 0x2B820, @@ -166546,7 +170351,7 @@ static const UV UNI_XPOSIXWORD_invlist[] = { /* for EBCDIC 1047 */ && '$' == 91 && '@' == 124 && '`' == 121 && '\n' == 37 static const UV UNI_XPOSIXWORD_invlist[] = { /* for EBCDIC 037 */ - 1487, /* Number of elements */ + 1539, /* Number of elements */ 148565664, /* Version and data structure type */ 1, /* 0 if the list starts at 0; 1 if it starts at the element beyond 0 */ @@ -166671,11 +170476,11 @@ static const UV UNI_XPOSIXWORD_invlist[] = { /* for EBCDIC 037 */ 0x85C, 0x860, 0x86B, - 0x8A0, - 0x8B5, - 0x8B6, - 0x8C8, - 0x8D3, + 0x870, + 0x888, + 0x889, + 0x88F, + 0x898, 0x8E2, 0x8E3, 0x964, @@ -166843,7 +170648,7 @@ static const UV UNI_XPOSIXWORD_invlist[] = { /* for EBCDIC 037 */ 0xC29, 0xC2A, 0xC3A, - 0xC3D, + 0xC3C, 0xC45, 0xC46, 0xC49, @@ -166853,6 +170658,8 @@ static const UV UNI_XPOSIXWORD_invlist[] = { /* for EBCDIC 037 */ 0xC57, 0xC58, 0xC5B, + 0xC5D, + 0xC5E, 0xC60, 0xC64, 0xC66, @@ -166877,7 +170684,7 @@ static const UV UNI_XPOSIXWORD_invlist[] = { /* for EBCDIC 037 */ 0xCCE, 0xCD5, 0xCD7, - 0xCDE, + 0xCDD, 0xCDF, 0xCE0, 0xCE4, @@ -167042,10 +170849,8 @@ static const UV UNI_XPOSIXWORD_invlist[] = { /* for EBCDIC 037 */ 0x16EE, 0x16F9, 0x1700, - 0x170D, - 0x170E, - 0x1715, - 0x1720, + 0x1716, + 0x171F, 0x1735, 0x1740, 0x1754, @@ -167065,7 +170870,7 @@ static const UV UNI_XPOSIXWORD_invlist[] = { /* for EBCDIC 037 */ 0x17EA, 0x180B, 0x180E, - 0x1810, + 0x180F, 0x181A, 0x1820, 0x1879, @@ -167102,9 +170907,9 @@ static const UV UNI_XPOSIXWORD_invlist[] = { /* for EBCDIC 037 */ 0x1AA7, 0x1AA8, 0x1AB0, - 0x1AC1, + 0x1ACF, 0x1B00, - 0x1B4C, + 0x1B4D, 0x1B50, 0x1B5A, 0x1B6B, @@ -167128,8 +170933,6 @@ static const UV UNI_XPOSIXWORD_invlist[] = { /* for EBCDIC 037 */ 0x1CD4, 0x1CFB, 0x1D00, - 0x1DFA, - 0x1DFB, 0x1F16, 0x1F18, 0x1F1E, @@ -167212,10 +171015,6 @@ static const UV UNI_XPOSIXWORD_invlist[] = { /* for EBCDIC 037 */ 0x24B6, 0x24EA, 0x2C00, - 0x2C2F, - 0x2C30, - 0x2C5F, - 0x2C60, 0x2CE5, 0x2CEB, 0x2CF4, @@ -167280,8 +171079,6 @@ static const UV UNI_XPOSIXWORD_invlist[] = { /* for EBCDIC 037 */ 0x3400, 0x4DC0, 0x4E00, - 0x9FFD, - 0xA000, 0xA48D, 0xA4D0, 0xA4FE, @@ -167300,10 +171097,14 @@ static const UV UNI_XPOSIXWORD_invlist[] = { /* for EBCDIC 037 */ 0xA722, 0xA789, 0xA78B, - 0xA7C0, - 0xA7C2, 0xA7CB, - 0xA7F5, + 0xA7D0, + 0xA7D2, + 0xA7D3, + 0xA7D4, + 0xA7D5, + 0xA7DA, + 0xA7F2, 0xA828, 0xA82C, 0xA82D, @@ -167481,12 +171282,34 @@ static const UV UNI_XPOSIXWORD_invlist[] = { /* for EBCDIC 037 */ 0x10528, 0x10530, 0x10564, + 0x10570, + 0x1057B, + 0x1057C, + 0x1058B, + 0x1058C, + 0x10593, + 0x10594, + 0x10596, + 0x10597, + 0x105A2, + 0x105A3, + 0x105B2, + 0x105B3, + 0x105BA, + 0x105BB, + 0x105BD, 0x10600, 0x10737, 0x10740, 0x10756, 0x10760, 0x10768, + 0x10780, + 0x10786, + 0x10787, + 0x107B1, + 0x107B2, + 0x107BB, 0x10800, 0x10806, 0x10808, @@ -167567,6 +171390,8 @@ static const UV UNI_XPOSIXWORD_invlist[] = { /* for EBCDIC 037 */ 0x10F28, 0x10F30, 0x10F51, + 0x10F70, + 0x10F86, 0x10FB0, 0x10FC5, 0x10FE0, @@ -167574,9 +171399,11 @@ static const UV UNI_XPOSIXWORD_invlist[] = { /* for EBCDIC 037 */ 0x11000, 0x11047, 0x11066, - 0x11070, + 0x11076, 0x1107F, 0x110BB, + 0x110C2, + 0x110C3, 0x110D0, 0x110E9, 0x110F0, @@ -167683,6 +171510,8 @@ static const UV UNI_XPOSIXWORD_invlist[] = { /* for EBCDIC 037 */ 0x1172C, 0x11730, 0x1173A, + 0x11740, + 0x11747, 0x11800, 0x1183B, 0x118A0, @@ -167719,7 +171548,7 @@ static const UV UNI_XPOSIXWORD_invlist[] = { /* for EBCDIC 037 */ 0x11A9A, 0x11A9D, 0x11A9E, - 0x11AC0, + 0x11AB0, 0x11AF9, 0x11C00, 0x11C09, @@ -167771,6 +171600,8 @@ static const UV UNI_XPOSIXWORD_invlist[] = { /* for EBCDIC 037 */ 0x1246F, 0x12480, 0x12544, + 0x12F90, + 0x12FF1, 0x13000, 0x1342F, 0x14400, @@ -167781,6 +171612,10 @@ static const UV UNI_XPOSIXWORD_invlist[] = { /* for EBCDIC 037 */ 0x16A5F, 0x16A60, 0x16A6A, + 0x16A70, + 0x16ABF, + 0x16AC0, + 0x16ACA, 0x16AD0, 0x16AEE, 0x16AF0, @@ -167815,8 +171650,14 @@ static const UV UNI_XPOSIXWORD_invlist[] = { /* for EBCDIC 037 */ 0x18CD6, 0x18D00, 0x18D09, + 0x1AFF0, + 0x1AFF4, + 0x1AFF5, + 0x1AFFC, + 0x1AFFD, + 0x1AFFF, 0x1B000, - 0x1B11F, + 0x1B123, 0x1B150, 0x1B153, 0x1B164, @@ -167833,6 +171674,10 @@ static const UV UNI_XPOSIXWORD_invlist[] = { /* for EBCDIC 037 */ 0x1BC9A, 0x1BC9D, 0x1BC9F, + 0x1CF00, + 0x1CF2E, + 0x1CF30, + 0x1CF47, 0x1D165, 0x1D16A, 0x1D16D, @@ -167919,6 +171764,8 @@ static const UV UNI_XPOSIXWORD_invlist[] = { /* for EBCDIC 037 */ 0x1DAA0, 0x1DAA1, 0x1DAB0, + 0x1DF00, + 0x1DF1F, 0x1E000, 0x1E007, 0x1E008, @@ -167937,8 +171784,18 @@ static const UV UNI_XPOSIXWORD_invlist[] = { /* for EBCDIC 037 */ 0x1E14A, 0x1E14E, 0x1E14F, + 0x1E290, + 0x1E2AF, 0x1E2C0, 0x1E2FA, + 0x1E7E0, + 0x1E7E7, + 0x1E7E8, + 0x1E7EC, + 0x1E7ED, + 0x1E7EF, + 0x1E7F0, + 0x1E7FF, 0x1E800, 0x1E8C5, 0x1E8D0, @@ -168022,9 +171879,9 @@ static const UV UNI_XPOSIXWORD_invlist[] = { /* for EBCDIC 037 */ 0x1FBF0, 0x1FBFA, 0x20000, - 0x2A6DE, + 0x2A6E0, 0x2A700, - 0x2B735, + 0x2B739, 0x2B740, 0x2B81E, 0x2B820, @@ -168122,7 +171979,7 @@ static const UV UNI_XPOSIXXDIGIT_invlist[] = { /* for EBCDIC 037 */ # if 'A' == 65 /* ASCII/Latin1 */ static const UV UNI__PERL_ANY_FOLDS_invlist[] = { /* for ASCII/Latin1 */ - 269, /* Number of elements */ + 283, /* Number of elements */ 148565664, /* Version and data structure type */ 1, /* 0 if the list starts at 0; 1 if it starts at the element beyond 0 */ @@ -168324,10 +172181,6 @@ static const UV UNI__PERL_ANY_FOLDS_invlist[] = { /* for ASCII/Latin1 */ 0x24B6, 0x24EA, 0x2C00, - 0x2C2F, - 0x2C30, - 0x2C5F, - 0x2C60, 0x2C71, 0x2C72, 0x2C74, @@ -168362,9 +172215,11 @@ static const UV UNI__PERL_ANY_FOLDS_invlist[] = { /* for ASCII/Latin1 */ 0xA796, 0xA7AF, 0xA7B0, - 0xA7C0, - 0xA7C2, 0xA7CB, + 0xA7D0, + 0xA7D2, + 0xA7D6, + 0xA7DA, 0xA7F5, 0xA7F7, 0xAB53, @@ -168385,6 +172240,22 @@ static const UV UNI__PERL_ANY_FOLDS_invlist[] = { /* for ASCII/Latin1 */ 0x104D4, 0x104D8, 0x104FC, + 0x10570, + 0x1057B, + 0x1057C, + 0x1058B, + 0x1058C, + 0x10593, + 0x10594, + 0x10596, + 0x10597, + 0x105A2, + 0x105A3, + 0x105B2, + 0x105B3, + 0x105BA, + 0x105BB, + 0x105BD, 0x10C80, 0x10CB3, 0x10CC0, @@ -168405,7 +172276,7 @@ static const UV UNI__PERL_ANY_FOLDS_invlist[] = { /* for ASCII/Latin1 */ && '$' == 91 && '@' == 124 && '`' == 121 && '\n' == 21 static const UV UNI__PERL_ANY_FOLDS_invlist[] = { /* for EBCDIC 1047 */ - 301, /* Number of elements */ + 315, /* Number of elements */ 148565664, /* Version and data structure type */ 1, /* 0 if the list starts at 0; 1 if it starts at the element beyond 0 */ @@ -168639,10 +172510,6 @@ static const UV UNI__PERL_ANY_FOLDS_invlist[] = { /* for EBCDIC 1047 */ 0x24B6, 0x24EA, 0x2C00, - 0x2C2F, - 0x2C30, - 0x2C5F, - 0x2C60, 0x2C71, 0x2C72, 0x2C74, @@ -168677,9 +172544,11 @@ static const UV UNI__PERL_ANY_FOLDS_invlist[] = { /* for EBCDIC 1047 */ 0xA796, 0xA7AF, 0xA7B0, - 0xA7C0, - 0xA7C2, 0xA7CB, + 0xA7D0, + 0xA7D2, + 0xA7D6, + 0xA7DA, 0xA7F5, 0xA7F7, 0xAB53, @@ -168700,6 +172569,22 @@ static const UV UNI__PERL_ANY_FOLDS_invlist[] = { /* for EBCDIC 1047 */ 0x104D4, 0x104D8, 0x104FC, + 0x10570, + 0x1057B, + 0x1057C, + 0x1058B, + 0x1058C, + 0x10593, + 0x10594, + 0x10596, + 0x10597, + 0x105A2, + 0x105A3, + 0x105B2, + 0x105B3, + 0x105BA, + 0x105BB, + 0x105BD, 0x10C80, 0x10CB3, 0x10CC0, @@ -168720,7 +172605,7 @@ static const UV UNI__PERL_ANY_FOLDS_invlist[] = { /* for EBCDIC 1047 */ && '$' == 91 && '@' == 124 && '`' == 121 && '\n' == 37 static const UV UNI__PERL_ANY_FOLDS_invlist[] = { /* for EBCDIC 037 */ - 297, /* Number of elements */ + 311, /* Number of elements */ 148565664, /* Version and data structure type */ 1, /* 0 if the list starts at 0; 1 if it starts at the element beyond 0 */ @@ -168950,10 +172835,6 @@ static const UV UNI__PERL_ANY_FOLDS_invlist[] = { /* for EBCDIC 037 */ 0x24B6, 0x24EA, 0x2C00, - 0x2C2F, - 0x2C30, - 0x2C5F, - 0x2C60, 0x2C71, 0x2C72, 0x2C74, @@ -168988,9 +172869,11 @@ static const UV UNI__PERL_ANY_FOLDS_invlist[] = { /* for EBCDIC 037 */ 0xA796, 0xA7AF, 0xA7B0, - 0xA7C0, - 0xA7C2, 0xA7CB, + 0xA7D0, + 0xA7D2, + 0xA7D6, + 0xA7DA, 0xA7F5, 0xA7F7, 0xAB53, @@ -169011,6 +172894,22 @@ static const UV UNI__PERL_ANY_FOLDS_invlist[] = { /* for EBCDIC 037 */ 0x104D4, 0x104D8, 0x104FC, + 0x10570, + 0x1057B, + 0x1057C, + 0x1058B, + 0x1058C, + 0x10593, + 0x10594, + 0x10596, + 0x10597, + 0x105A2, + 0x105A3, + 0x105B2, + 0x105B3, + 0x105BA, + 0x105BB, + 0x105BD, 0x10C80, 0x10CB3, 0x10CC0, @@ -169028,7 +172927,7 @@ static const UV UNI__PERL_ANY_FOLDS_invlist[] = { /* for EBCDIC 037 */ # if 'A' == 65 /* ASCII/Latin1 */ static const UV UNI__PERL_CHARNAME_BEGIN_invlist[] = { /* for ASCII/Latin1 */ - 1257, /* Number of elements */ + 1309, /* Number of elements */ 148565664, /* Version and data structure type */ 1, /* 0 if the list starts at 0; 1 if it starts at the element beyond 0 */ @@ -169131,10 +173030,12 @@ static const UV UNI__PERL_CHARNAME_BEGIN_invlist[] = { /* for ASCII/Latin1 */ 0x859, 0x860, 0x86B, + 0x870, + 0x888, + 0x889, + 0x88F, 0x8A0, - 0x8B5, - 0x8B6, - 0x8C8, + 0x8CA, 0x904, 0x93A, 0x93D, @@ -169263,6 +173164,8 @@ static const UV UNI__PERL_CHARNAME_BEGIN_invlist[] = { /* for ASCII/Latin1 */ 0xC3E, 0xC58, 0xC5B, + 0xC5D, + 0xC5E, 0xC60, 0xC62, 0xC80, @@ -169279,7 +173182,7 @@ static const UV UNI__PERL_CHARNAME_BEGIN_invlist[] = { /* for ASCII/Latin1 */ 0xCBA, 0xCBD, 0xCBE, - 0xCDE, + 0xCDD, 0xCDF, 0xCE0, 0xCE2, @@ -169422,10 +173325,8 @@ static const UV UNI__PERL_CHARNAME_BEGIN_invlist[] = { /* for ASCII/Latin1 */ 0x16F1, 0x16F9, 0x1700, - 0x170D, - 0x170E, 0x1712, - 0x1720, + 0x171F, 0x1732, 0x1740, 0x1752, @@ -169468,7 +173369,7 @@ static const UV UNI__PERL_CHARNAME_BEGIN_invlist[] = { /* for ASCII/Latin1 */ 0x1B05, 0x1B34, 0x1B45, - 0x1B4C, + 0x1B4D, 0x1B83, 0x1BA1, 0x1BAE, @@ -169570,10 +173471,6 @@ static const UV UNI__PERL_CHARNAME_BEGIN_invlist[] = { /* for ASCII/Latin1 */ 0x2183, 0x2185, 0x2C00, - 0x2C2F, - 0x2C30, - 0x2C5F, - 0x2C60, 0x2CE5, 0x2CEB, 0x2CEF, @@ -169632,8 +173529,6 @@ static const UV UNI__PERL_CHARNAME_BEGIN_invlist[] = { /* for ASCII/Latin1 */ 0x3400, 0x4DC0, 0x4E00, - 0x9FFD, - 0xA000, 0xA48D, 0xA4D0, 0xA4FE, @@ -169654,10 +173549,14 @@ static const UV UNI__PERL_CHARNAME_BEGIN_invlist[] = { /* for ASCII/Latin1 */ 0xA722, 0xA789, 0xA78B, - 0xA7C0, - 0xA7C2, 0xA7CB, - 0xA7F5, + 0xA7D0, + 0xA7D2, + 0xA7D3, + 0xA7D4, + 0xA7D5, + 0xA7DA, + 0xA7F2, 0xA802, 0xA803, 0xA806, @@ -169847,12 +173746,34 @@ static const UV UNI__PERL_CHARNAME_BEGIN_invlist[] = { /* for ASCII/Latin1 */ 0x10528, 0x10530, 0x10564, + 0x10570, + 0x1057B, + 0x1057C, + 0x1058B, + 0x1058C, + 0x10593, + 0x10594, + 0x10596, + 0x10597, + 0x105A2, + 0x105A3, + 0x105B2, + 0x105B3, + 0x105BA, + 0x105BB, + 0x105BD, 0x10600, 0x10737, 0x10740, 0x10756, 0x10760, 0x10768, + 0x10780, + 0x10786, + 0x10787, + 0x107B1, + 0x107B2, + 0x107BB, 0x10800, 0x10806, 0x10808, @@ -169923,12 +173844,18 @@ static const UV UNI__PERL_CHARNAME_BEGIN_invlist[] = { /* for ASCII/Latin1 */ 0x10F28, 0x10F30, 0x10F46, + 0x10F70, + 0x10F82, 0x10FB0, 0x10FC5, 0x10FE0, 0x10FF7, 0x11003, 0x11038, + 0x11071, + 0x11073, + 0x11075, + 0x11076, 0x11083, 0x110B0, 0x110D0, @@ -170011,6 +173938,8 @@ static const UV UNI__PERL_CHARNAME_BEGIN_invlist[] = { /* for ASCII/Latin1 */ 0x116B9, 0x11700, 0x1171B, + 0x11740, + 0x11747, 0x11800, 0x1182C, 0x118A0, @@ -170049,7 +173978,7 @@ static const UV UNI__PERL_CHARNAME_BEGIN_invlist[] = { /* for ASCII/Latin1 */ 0x11A8A, 0x11A9D, 0x11A9E, - 0x11AC0, + 0x11AB0, 0x11AF9, 0x11C00, 0x11C09, @@ -170083,6 +174012,8 @@ static const UV UNI__PERL_CHARNAME_BEGIN_invlist[] = { /* for ASCII/Latin1 */ 0x1239A, 0x12480, 0x12544, + 0x12F90, + 0x12FF1, 0x13000, 0x1342F, 0x14400, @@ -170091,6 +174022,8 @@ static const UV UNI__PERL_CHARNAME_BEGIN_invlist[] = { /* for ASCII/Latin1 */ 0x16A39, 0x16A40, 0x16A5F, + 0x16A70, + 0x16ABF, 0x16AD0, 0x16AEE, 0x16B00, @@ -170119,8 +174052,14 @@ static const UV UNI__PERL_CHARNAME_BEGIN_invlist[] = { /* for ASCII/Latin1 */ 0x18CD6, 0x18D00, 0x18D09, + 0x1AFF0, + 0x1AFF4, + 0x1AFF5, + 0x1AFFC, + 0x1AFFD, + 0x1AFFF, 0x1B000, - 0x1B11F, + 0x1B123, 0x1B150, 0x1B153, 0x1B164, @@ -170195,14 +174134,26 @@ static const UV UNI__PERL_CHARNAME_BEGIN_invlist[] = { /* for ASCII/Latin1 */ 0x1D7C3, 0x1D7C4, 0x1D7CC, + 0x1DF00, + 0x1DF1F, 0x1E100, 0x1E12D, 0x1E137, 0x1E13E, 0x1E14E, 0x1E14F, + 0x1E290, + 0x1E2AE, 0x1E2C0, 0x1E2EC, + 0x1E7E0, + 0x1E7E7, + 0x1E7E8, + 0x1E7EC, + 0x1E7ED, + 0x1E7EF, + 0x1E7F0, + 0x1E7FF, 0x1E800, 0x1E8C5, 0x1E900, @@ -170276,9 +174227,9 @@ static const UV UNI__PERL_CHARNAME_BEGIN_invlist[] = { /* for ASCII/Latin1 */ 0x1EEAB, 0x1EEBC, 0x20000, - 0x2A6DE, + 0x2A6E0, 0x2A700, - 0x2B735, + 0x2B739, 0x2B740, 0x2B81E, 0x2B820, @@ -170299,7 +174250,7 @@ static const UV UNI__PERL_CHARNAME_BEGIN_invlist[] = { /* for ASCII/Latin1 */ && '$' == 91 && '@' == 124 && '`' == 121 && '\n' == 21 static const UV UNI__PERL_CHARNAME_BEGIN_invlist[] = { /* for EBCDIC 1047 */ - 1283, /* Number of elements */ + 1335, /* Number of elements */ 148565664, /* Version and data structure type */ 1, /* 0 if the list starts at 0; 1 if it starts at the element beyond 0 */ @@ -170428,10 +174379,12 @@ static const UV UNI__PERL_CHARNAME_BEGIN_invlist[] = { /* for EBCDIC 1047 */ 0x859, 0x860, 0x86B, + 0x870, + 0x888, + 0x889, + 0x88F, 0x8A0, - 0x8B5, - 0x8B6, - 0x8C8, + 0x8CA, 0x904, 0x93A, 0x93D, @@ -170560,6 +174513,8 @@ static const UV UNI__PERL_CHARNAME_BEGIN_invlist[] = { /* for EBCDIC 1047 */ 0xC3E, 0xC58, 0xC5B, + 0xC5D, + 0xC5E, 0xC60, 0xC62, 0xC80, @@ -170576,7 +174531,7 @@ static const UV UNI__PERL_CHARNAME_BEGIN_invlist[] = { /* for EBCDIC 1047 */ 0xCBA, 0xCBD, 0xCBE, - 0xCDE, + 0xCDD, 0xCDF, 0xCE0, 0xCE2, @@ -170719,10 +174674,8 @@ static const UV UNI__PERL_CHARNAME_BEGIN_invlist[] = { /* for EBCDIC 1047 */ 0x16F1, 0x16F9, 0x1700, - 0x170D, - 0x170E, 0x1712, - 0x1720, + 0x171F, 0x1732, 0x1740, 0x1752, @@ -170765,7 +174718,7 @@ static const UV UNI__PERL_CHARNAME_BEGIN_invlist[] = { /* for EBCDIC 1047 */ 0x1B05, 0x1B34, 0x1B45, - 0x1B4C, + 0x1B4D, 0x1B83, 0x1BA1, 0x1BAE, @@ -170867,10 +174820,6 @@ static const UV UNI__PERL_CHARNAME_BEGIN_invlist[] = { /* for EBCDIC 1047 */ 0x2183, 0x2185, 0x2C00, - 0x2C2F, - 0x2C30, - 0x2C5F, - 0x2C60, 0x2CE5, 0x2CEB, 0x2CEF, @@ -170929,8 +174878,6 @@ static const UV UNI__PERL_CHARNAME_BEGIN_invlist[] = { /* for EBCDIC 1047 */ 0x3400, 0x4DC0, 0x4E00, - 0x9FFD, - 0xA000, 0xA48D, 0xA4D0, 0xA4FE, @@ -170951,10 +174898,14 @@ static const UV UNI__PERL_CHARNAME_BEGIN_invlist[] = { /* for EBCDIC 1047 */ 0xA722, 0xA789, 0xA78B, - 0xA7C0, - 0xA7C2, 0xA7CB, - 0xA7F5, + 0xA7D0, + 0xA7D2, + 0xA7D3, + 0xA7D4, + 0xA7D5, + 0xA7DA, + 0xA7F2, 0xA802, 0xA803, 0xA806, @@ -171144,12 +175095,34 @@ static const UV UNI__PERL_CHARNAME_BEGIN_invlist[] = { /* for EBCDIC 1047 */ 0x10528, 0x10530, 0x10564, + 0x10570, + 0x1057B, + 0x1057C, + 0x1058B, + 0x1058C, + 0x10593, + 0x10594, + 0x10596, + 0x10597, + 0x105A2, + 0x105A3, + 0x105B2, + 0x105B3, + 0x105BA, + 0x105BB, + 0x105BD, 0x10600, 0x10737, 0x10740, 0x10756, 0x10760, 0x10768, + 0x10780, + 0x10786, + 0x10787, + 0x107B1, + 0x107B2, + 0x107BB, 0x10800, 0x10806, 0x10808, @@ -171220,12 +175193,18 @@ static const UV UNI__PERL_CHARNAME_BEGIN_invlist[] = { /* for EBCDIC 1047 */ 0x10F28, 0x10F30, 0x10F46, + 0x10F70, + 0x10F82, 0x10FB0, 0x10FC5, 0x10FE0, 0x10FF7, 0x11003, 0x11038, + 0x11071, + 0x11073, + 0x11075, + 0x11076, 0x11083, 0x110B0, 0x110D0, @@ -171308,6 +175287,8 @@ static const UV UNI__PERL_CHARNAME_BEGIN_invlist[] = { /* for EBCDIC 1047 */ 0x116B9, 0x11700, 0x1171B, + 0x11740, + 0x11747, 0x11800, 0x1182C, 0x118A0, @@ -171346,7 +175327,7 @@ static const UV UNI__PERL_CHARNAME_BEGIN_invlist[] = { /* for EBCDIC 1047 */ 0x11A8A, 0x11A9D, 0x11A9E, - 0x11AC0, + 0x11AB0, 0x11AF9, 0x11C00, 0x11C09, @@ -171380,6 +175361,8 @@ static const UV UNI__PERL_CHARNAME_BEGIN_invlist[] = { /* for EBCDIC 1047 */ 0x1239A, 0x12480, 0x12544, + 0x12F90, + 0x12FF1, 0x13000, 0x1342F, 0x14400, @@ -171388,6 +175371,8 @@ static const UV UNI__PERL_CHARNAME_BEGIN_invlist[] = { /* for EBCDIC 1047 */ 0x16A39, 0x16A40, 0x16A5F, + 0x16A70, + 0x16ABF, 0x16AD0, 0x16AEE, 0x16B00, @@ -171416,8 +175401,14 @@ static const UV UNI__PERL_CHARNAME_BEGIN_invlist[] = { /* for EBCDIC 1047 */ 0x18CD6, 0x18D00, 0x18D09, + 0x1AFF0, + 0x1AFF4, + 0x1AFF5, + 0x1AFFC, + 0x1AFFD, + 0x1AFFF, 0x1B000, - 0x1B11F, + 0x1B123, 0x1B150, 0x1B153, 0x1B164, @@ -171492,14 +175483,26 @@ static const UV UNI__PERL_CHARNAME_BEGIN_invlist[] = { /* for EBCDIC 1047 */ 0x1D7C3, 0x1D7C4, 0x1D7CC, + 0x1DF00, + 0x1DF1F, 0x1E100, 0x1E12D, 0x1E137, 0x1E13E, 0x1E14E, 0x1E14F, + 0x1E290, + 0x1E2AE, 0x1E2C0, 0x1E2EC, + 0x1E7E0, + 0x1E7E7, + 0x1E7E8, + 0x1E7EC, + 0x1E7ED, + 0x1E7EF, + 0x1E7F0, + 0x1E7FF, 0x1E800, 0x1E8C5, 0x1E900, @@ -171573,9 +175576,9 @@ static const UV UNI__PERL_CHARNAME_BEGIN_invlist[] = { /* for EBCDIC 1047 */ 0x1EEAB, 0x1EEBC, 0x20000, - 0x2A6DE, + 0x2A6E0, 0x2A700, - 0x2B735, + 0x2B739, 0x2B740, 0x2B81E, 0x2B820, @@ -171596,7 +175599,7 @@ static const UV UNI__PERL_CHARNAME_BEGIN_invlist[] = { /* for EBCDIC 1047 */ && '$' == 91 && '@' == 124 && '`' == 121 && '\n' == 37 static const UV UNI__PERL_CHARNAME_BEGIN_invlist[] = { /* for EBCDIC 037 */ - 1279, /* Number of elements */ + 1331, /* Number of elements */ 148565664, /* Version and data structure type */ 1, /* 0 if the list starts at 0; 1 if it starts at the element beyond 0 */ @@ -171721,10 +175724,12 @@ static const UV UNI__PERL_CHARNAME_BEGIN_invlist[] = { /* for EBCDIC 037 */ 0x859, 0x860, 0x86B, + 0x870, + 0x888, + 0x889, + 0x88F, 0x8A0, - 0x8B5, - 0x8B6, - 0x8C8, + 0x8CA, 0x904, 0x93A, 0x93D, @@ -171853,6 +175858,8 @@ static const UV UNI__PERL_CHARNAME_BEGIN_invlist[] = { /* for EBCDIC 037 */ 0xC3E, 0xC58, 0xC5B, + 0xC5D, + 0xC5E, 0xC60, 0xC62, 0xC80, @@ -171869,7 +175876,7 @@ static const UV UNI__PERL_CHARNAME_BEGIN_invlist[] = { /* for EBCDIC 037 */ 0xCBA, 0xCBD, 0xCBE, - 0xCDE, + 0xCDD, 0xCDF, 0xCE0, 0xCE2, @@ -172012,10 +176019,8 @@ static const UV UNI__PERL_CHARNAME_BEGIN_invlist[] = { /* for EBCDIC 037 */ 0x16F1, 0x16F9, 0x1700, - 0x170D, - 0x170E, 0x1712, - 0x1720, + 0x171F, 0x1732, 0x1740, 0x1752, @@ -172058,7 +176063,7 @@ static const UV UNI__PERL_CHARNAME_BEGIN_invlist[] = { /* for EBCDIC 037 */ 0x1B05, 0x1B34, 0x1B45, - 0x1B4C, + 0x1B4D, 0x1B83, 0x1BA1, 0x1BAE, @@ -172160,10 +176165,6 @@ static const UV UNI__PERL_CHARNAME_BEGIN_invlist[] = { /* for EBCDIC 037 */ 0x2183, 0x2185, 0x2C00, - 0x2C2F, - 0x2C30, - 0x2C5F, - 0x2C60, 0x2CE5, 0x2CEB, 0x2CEF, @@ -172222,8 +176223,6 @@ static const UV UNI__PERL_CHARNAME_BEGIN_invlist[] = { /* for EBCDIC 037 */ 0x3400, 0x4DC0, 0x4E00, - 0x9FFD, - 0xA000, 0xA48D, 0xA4D0, 0xA4FE, @@ -172244,10 +176243,14 @@ static const UV UNI__PERL_CHARNAME_BEGIN_invlist[] = { /* for EBCDIC 037 */ 0xA722, 0xA789, 0xA78B, - 0xA7C0, - 0xA7C2, 0xA7CB, - 0xA7F5, + 0xA7D0, + 0xA7D2, + 0xA7D3, + 0xA7D4, + 0xA7D5, + 0xA7DA, + 0xA7F2, 0xA802, 0xA803, 0xA806, @@ -172437,12 +176440,34 @@ static const UV UNI__PERL_CHARNAME_BEGIN_invlist[] = { /* for EBCDIC 037 */ 0x10528, 0x10530, 0x10564, + 0x10570, + 0x1057B, + 0x1057C, + 0x1058B, + 0x1058C, + 0x10593, + 0x10594, + 0x10596, + 0x10597, + 0x105A2, + 0x105A3, + 0x105B2, + 0x105B3, + 0x105BA, + 0x105BB, + 0x105BD, 0x10600, 0x10737, 0x10740, 0x10756, 0x10760, 0x10768, + 0x10780, + 0x10786, + 0x10787, + 0x107B1, + 0x107B2, + 0x107BB, 0x10800, 0x10806, 0x10808, @@ -172513,12 +176538,18 @@ static const UV UNI__PERL_CHARNAME_BEGIN_invlist[] = { /* for EBCDIC 037 */ 0x10F28, 0x10F30, 0x10F46, + 0x10F70, + 0x10F82, 0x10FB0, 0x10FC5, 0x10FE0, 0x10FF7, 0x11003, 0x11038, + 0x11071, + 0x11073, + 0x11075, + 0x11076, 0x11083, 0x110B0, 0x110D0, @@ -172601,6 +176632,8 @@ static const UV UNI__PERL_CHARNAME_BEGIN_invlist[] = { /* for EBCDIC 037 */ 0x116B9, 0x11700, 0x1171B, + 0x11740, + 0x11747, 0x11800, 0x1182C, 0x118A0, @@ -172639,7 +176672,7 @@ static const UV UNI__PERL_CHARNAME_BEGIN_invlist[] = { /* for EBCDIC 037 */ 0x11A8A, 0x11A9D, 0x11A9E, - 0x11AC0, + 0x11AB0, 0x11AF9, 0x11C00, 0x11C09, @@ -172673,6 +176706,8 @@ static const UV UNI__PERL_CHARNAME_BEGIN_invlist[] = { /* for EBCDIC 037 */ 0x1239A, 0x12480, 0x12544, + 0x12F90, + 0x12FF1, 0x13000, 0x1342F, 0x14400, @@ -172681,6 +176716,8 @@ static const UV UNI__PERL_CHARNAME_BEGIN_invlist[] = { /* for EBCDIC 037 */ 0x16A39, 0x16A40, 0x16A5F, + 0x16A70, + 0x16ABF, 0x16AD0, 0x16AEE, 0x16B00, @@ -172709,8 +176746,14 @@ static const UV UNI__PERL_CHARNAME_BEGIN_invlist[] = { /* for EBCDIC 037 */ 0x18CD6, 0x18D00, 0x18D09, + 0x1AFF0, + 0x1AFF4, + 0x1AFF5, + 0x1AFFC, + 0x1AFFD, + 0x1AFFF, 0x1B000, - 0x1B11F, + 0x1B123, 0x1B150, 0x1B153, 0x1B164, @@ -172785,14 +176828,26 @@ static const UV UNI__PERL_CHARNAME_BEGIN_invlist[] = { /* for EBCDIC 037 */ 0x1D7C3, 0x1D7C4, 0x1D7CC, + 0x1DF00, + 0x1DF1F, 0x1E100, 0x1E12D, 0x1E137, 0x1E13E, 0x1E14E, 0x1E14F, + 0x1E290, + 0x1E2AE, 0x1E2C0, 0x1E2EC, + 0x1E7E0, + 0x1E7E7, + 0x1E7E8, + 0x1E7EC, + 0x1E7ED, + 0x1E7EF, + 0x1E7F0, + 0x1E7FF, 0x1E800, 0x1E8C5, 0x1E900, @@ -172866,9 +176921,9 @@ static const UV UNI__PERL_CHARNAME_BEGIN_invlist[] = { /* for EBCDIC 037 */ 0x1EEAB, 0x1EEBC, 0x20000, - 0x2A6DE, + 0x2A6E0, 0x2A700, - 0x2B735, + 0x2B739, 0x2B740, 0x2B81E, 0x2B820, @@ -172886,7 +176941,7 @@ static const UV UNI__PERL_CHARNAME_BEGIN_invlist[] = { /* for EBCDIC 037 */ # if 'A' == 65 /* ASCII/Latin1 */ static const UV UNI__PERL_CHARNAME_CONTINUE_invlist[] = { /* for ASCII/Latin1 */ - 1481, /* Number of elements */ + 1533, /* Number of elements */ 148565664, /* Version and data structure type */ 1, /* 0 if the list starts at 0; 1 if it starts at the element beyond 0 */ @@ -172999,11 +177054,11 @@ static const UV UNI__PERL_CHARNAME_CONTINUE_invlist[] = { /* for ASCII/Latin1 * 0x85C, 0x860, 0x86B, - 0x8A0, - 0x8B5, - 0x8B6, - 0x8C8, - 0x8D3, + 0x870, + 0x888, + 0x889, + 0x88F, + 0x898, 0x8E2, 0x8E3, 0x964, @@ -173171,7 +177226,7 @@ static const UV UNI__PERL_CHARNAME_CONTINUE_invlist[] = { /* for ASCII/Latin1 * 0xC29, 0xC2A, 0xC3A, - 0xC3D, + 0xC3C, 0xC45, 0xC46, 0xC49, @@ -173181,6 +177236,8 @@ static const UV UNI__PERL_CHARNAME_CONTINUE_invlist[] = { /* for ASCII/Latin1 * 0xC57, 0xC58, 0xC5B, + 0xC5D, + 0xC5E, 0xC60, 0xC64, 0xC66, @@ -173205,7 +177262,7 @@ static const UV UNI__PERL_CHARNAME_CONTINUE_invlist[] = { /* for ASCII/Latin1 * 0xCCE, 0xCD5, 0xCD7, - 0xCDE, + 0xCDD, 0xCDF, 0xCE0, 0xCE4, @@ -173370,10 +177427,8 @@ static const UV UNI__PERL_CHARNAME_CONTINUE_invlist[] = { /* for ASCII/Latin1 * 0x16EE, 0x16F9, 0x1700, - 0x170D, - 0x170E, - 0x1715, - 0x1720, + 0x1716, + 0x171F, 0x1735, 0x1740, 0x1754, @@ -173393,7 +177448,7 @@ static const UV UNI__PERL_CHARNAME_CONTINUE_invlist[] = { /* for ASCII/Latin1 * 0x17EA, 0x180B, 0x180E, - 0x1810, + 0x180F, 0x181A, 0x1820, 0x1879, @@ -173432,9 +177487,9 @@ static const UV UNI__PERL_CHARNAME_CONTINUE_invlist[] = { /* for ASCII/Latin1 * 0x1AB0, 0x1ABE, 0x1ABF, - 0x1AC1, + 0x1ACF, 0x1B00, - 0x1B4C, + 0x1B4D, 0x1B50, 0x1B5A, 0x1B6B, @@ -173458,8 +177513,6 @@ static const UV UNI__PERL_CHARNAME_CONTINUE_invlist[] = { /* for ASCII/Latin1 * 0x1CD4, 0x1CFB, 0x1D00, - 0x1DFA, - 0x1DFB, 0x1F16, 0x1F18, 0x1F1E, @@ -173542,10 +177595,6 @@ static const UV UNI__PERL_CHARNAME_CONTINUE_invlist[] = { /* for ASCII/Latin1 * 0x2160, 0x2189, 0x2C00, - 0x2C2F, - 0x2C30, - 0x2C5F, - 0x2C60, 0x2CE5, 0x2CEB, 0x2CF4, @@ -173608,8 +177657,6 @@ static const UV UNI__PERL_CHARNAME_CONTINUE_invlist[] = { /* for ASCII/Latin1 * 0x3400, 0x4DC0, 0x4E00, - 0x9FFD, - 0xA000, 0xA48D, 0xA4D0, 0xA4FE, @@ -173628,10 +177675,14 @@ static const UV UNI__PERL_CHARNAME_CONTINUE_invlist[] = { /* for ASCII/Latin1 * 0xA722, 0xA789, 0xA78B, - 0xA7C0, - 0xA7C2, 0xA7CB, - 0xA7F5, + 0xA7D0, + 0xA7D2, + 0xA7D3, + 0xA7D4, + 0xA7D5, + 0xA7DA, + 0xA7F2, 0xA828, 0xA82C, 0xA82D, @@ -173821,12 +177872,34 @@ static const UV UNI__PERL_CHARNAME_CONTINUE_invlist[] = { /* for ASCII/Latin1 * 0x10528, 0x10530, 0x10564, + 0x10570, + 0x1057B, + 0x1057C, + 0x1058B, + 0x1058C, + 0x10593, + 0x10594, + 0x10596, + 0x10597, + 0x105A2, + 0x105A3, + 0x105B2, + 0x105B3, + 0x105BA, + 0x105BB, + 0x105BD, 0x10600, 0x10737, 0x10740, 0x10756, 0x10760, 0x10768, + 0x10780, + 0x10786, + 0x10787, + 0x107B1, + 0x107B2, + 0x107BB, 0x10800, 0x10806, 0x10808, @@ -173907,6 +177980,8 @@ static const UV UNI__PERL_CHARNAME_CONTINUE_invlist[] = { /* for ASCII/Latin1 * 0x10F28, 0x10F30, 0x10F51, + 0x10F70, + 0x10F86, 0x10FB0, 0x10FC5, 0x10FE0, @@ -173914,9 +177989,11 @@ static const UV UNI__PERL_CHARNAME_CONTINUE_invlist[] = { /* for ASCII/Latin1 * 0x11000, 0x11047, 0x11066, - 0x11070, + 0x11076, 0x1107F, 0x110BB, + 0x110C2, + 0x110C3, 0x110D0, 0x110E9, 0x110F0, @@ -174023,6 +178100,8 @@ static const UV UNI__PERL_CHARNAME_CONTINUE_invlist[] = { /* for ASCII/Latin1 * 0x1172C, 0x11730, 0x1173A, + 0x11740, + 0x11747, 0x11800, 0x1183B, 0x118A0, @@ -174059,7 +178138,7 @@ static const UV UNI__PERL_CHARNAME_CONTINUE_invlist[] = { /* for ASCII/Latin1 * 0x11A9A, 0x11A9D, 0x11A9E, - 0x11AC0, + 0x11AB0, 0x11AF9, 0x11C00, 0x11C09, @@ -174111,6 +178190,8 @@ static const UV UNI__PERL_CHARNAME_CONTINUE_invlist[] = { /* for ASCII/Latin1 * 0x1246F, 0x12480, 0x12544, + 0x12F90, + 0x12FF1, 0x13000, 0x1342F, 0x14400, @@ -174121,6 +178202,10 @@ static const UV UNI__PERL_CHARNAME_CONTINUE_invlist[] = { /* for ASCII/Latin1 * 0x16A5F, 0x16A60, 0x16A6A, + 0x16A70, + 0x16ABF, + 0x16AC0, + 0x16ACA, 0x16AD0, 0x16AEE, 0x16AF0, @@ -174155,8 +178240,14 @@ static const UV UNI__PERL_CHARNAME_CONTINUE_invlist[] = { /* for ASCII/Latin1 * 0x18CD6, 0x18D00, 0x18D09, + 0x1AFF0, + 0x1AFF4, + 0x1AFF5, + 0x1AFFC, + 0x1AFFD, + 0x1AFFF, 0x1B000, - 0x1B11F, + 0x1B123, 0x1B150, 0x1B153, 0x1B164, @@ -174173,6 +178264,10 @@ static const UV UNI__PERL_CHARNAME_CONTINUE_invlist[] = { /* for ASCII/Latin1 * 0x1BC9A, 0x1BC9D, 0x1BC9F, + 0x1CF00, + 0x1CF2E, + 0x1CF30, + 0x1CF47, 0x1D165, 0x1D16A, 0x1D16D, @@ -174259,6 +178354,8 @@ static const UV UNI__PERL_CHARNAME_CONTINUE_invlist[] = { /* for ASCII/Latin1 * 0x1DAA0, 0x1DAA1, 0x1DAB0, + 0x1DF00, + 0x1DF1F, 0x1E000, 0x1E007, 0x1E008, @@ -174277,8 +178374,18 @@ static const UV UNI__PERL_CHARNAME_CONTINUE_invlist[] = { /* for ASCII/Latin1 * 0x1E14A, 0x1E14E, 0x1E14F, + 0x1E290, + 0x1E2AF, 0x1E2C0, 0x1E2FA, + 0x1E7E0, + 0x1E7E7, + 0x1E7E8, + 0x1E7EC, + 0x1E7ED, + 0x1E7EF, + 0x1E7F0, + 0x1E7FF, 0x1E800, 0x1E8C5, 0x1E8D0, @@ -174356,9 +178463,9 @@ static const UV UNI__PERL_CHARNAME_CONTINUE_invlist[] = { /* for ASCII/Latin1 * 0x1FBF0, 0x1FBFA, 0x20000, - 0x2A6DE, + 0x2A6E0, 0x2A700, - 0x2B735, + 0x2B739, 0x2B740, 0x2B81E, 0x2B820, @@ -174381,7 +178488,7 @@ static const UV UNI__PERL_CHARNAME_CONTINUE_invlist[] = { /* for ASCII/Latin1 * && '$' == 91 && '@' == 124 && '`' == 121 && '\n' == 21 static const UV UNI__PERL_CHARNAME_CONTINUE_invlist[] = { /* for EBCDIC 1047 */ - 1507, /* Number of elements */ + 1559, /* Number of elements */ 148565664, /* Version and data structure type */ 1, /* 0 if the list starts at 0; 1 if it starts at the element beyond 0 */ @@ -174520,11 +178627,11 @@ static const UV UNI__PERL_CHARNAME_CONTINUE_invlist[] = { /* for EBCDIC 1047 */ 0x85C, 0x860, 0x86B, - 0x8A0, - 0x8B5, - 0x8B6, - 0x8C8, - 0x8D3, + 0x870, + 0x888, + 0x889, + 0x88F, + 0x898, 0x8E2, 0x8E3, 0x964, @@ -174692,7 +178799,7 @@ static const UV UNI__PERL_CHARNAME_CONTINUE_invlist[] = { /* for EBCDIC 1047 */ 0xC29, 0xC2A, 0xC3A, - 0xC3D, + 0xC3C, 0xC45, 0xC46, 0xC49, @@ -174702,6 +178809,8 @@ static const UV UNI__PERL_CHARNAME_CONTINUE_invlist[] = { /* for EBCDIC 1047 */ 0xC57, 0xC58, 0xC5B, + 0xC5D, + 0xC5E, 0xC60, 0xC64, 0xC66, @@ -174726,7 +178835,7 @@ static const UV UNI__PERL_CHARNAME_CONTINUE_invlist[] = { /* for EBCDIC 1047 */ 0xCCE, 0xCD5, 0xCD7, - 0xCDE, + 0xCDD, 0xCDF, 0xCE0, 0xCE4, @@ -174891,10 +179000,8 @@ static const UV UNI__PERL_CHARNAME_CONTINUE_invlist[] = { /* for EBCDIC 1047 */ 0x16EE, 0x16F9, 0x1700, - 0x170D, - 0x170E, - 0x1715, - 0x1720, + 0x1716, + 0x171F, 0x1735, 0x1740, 0x1754, @@ -174914,7 +179021,7 @@ static const UV UNI__PERL_CHARNAME_CONTINUE_invlist[] = { /* for EBCDIC 1047 */ 0x17EA, 0x180B, 0x180E, - 0x1810, + 0x180F, 0x181A, 0x1820, 0x1879, @@ -174953,9 +179060,9 @@ static const UV UNI__PERL_CHARNAME_CONTINUE_invlist[] = { /* for EBCDIC 1047 */ 0x1AB0, 0x1ABE, 0x1ABF, - 0x1AC1, + 0x1ACF, 0x1B00, - 0x1B4C, + 0x1B4D, 0x1B50, 0x1B5A, 0x1B6B, @@ -174979,8 +179086,6 @@ static const UV UNI__PERL_CHARNAME_CONTINUE_invlist[] = { /* for EBCDIC 1047 */ 0x1CD4, 0x1CFB, 0x1D00, - 0x1DFA, - 0x1DFB, 0x1F16, 0x1F18, 0x1F1E, @@ -175063,10 +179168,6 @@ static const UV UNI__PERL_CHARNAME_CONTINUE_invlist[] = { /* for EBCDIC 1047 */ 0x2160, 0x2189, 0x2C00, - 0x2C2F, - 0x2C30, - 0x2C5F, - 0x2C60, 0x2CE5, 0x2CEB, 0x2CF4, @@ -175129,8 +179230,6 @@ static const UV UNI__PERL_CHARNAME_CONTINUE_invlist[] = { /* for EBCDIC 1047 */ 0x3400, 0x4DC0, 0x4E00, - 0x9FFD, - 0xA000, 0xA48D, 0xA4D0, 0xA4FE, @@ -175149,10 +179248,14 @@ static const UV UNI__PERL_CHARNAME_CONTINUE_invlist[] = { /* for EBCDIC 1047 */ 0xA722, 0xA789, 0xA78B, - 0xA7C0, - 0xA7C2, 0xA7CB, - 0xA7F5, + 0xA7D0, + 0xA7D2, + 0xA7D3, + 0xA7D4, + 0xA7D5, + 0xA7DA, + 0xA7F2, 0xA828, 0xA82C, 0xA82D, @@ -175342,12 +179445,34 @@ static const UV UNI__PERL_CHARNAME_CONTINUE_invlist[] = { /* for EBCDIC 1047 */ 0x10528, 0x10530, 0x10564, + 0x10570, + 0x1057B, + 0x1057C, + 0x1058B, + 0x1058C, + 0x10593, + 0x10594, + 0x10596, + 0x10597, + 0x105A2, + 0x105A3, + 0x105B2, + 0x105B3, + 0x105BA, + 0x105BB, + 0x105BD, 0x10600, 0x10737, 0x10740, 0x10756, 0x10760, 0x10768, + 0x10780, + 0x10786, + 0x10787, + 0x107B1, + 0x107B2, + 0x107BB, 0x10800, 0x10806, 0x10808, @@ -175428,6 +179553,8 @@ static const UV UNI__PERL_CHARNAME_CONTINUE_invlist[] = { /* for EBCDIC 1047 */ 0x10F28, 0x10F30, 0x10F51, + 0x10F70, + 0x10F86, 0x10FB0, 0x10FC5, 0x10FE0, @@ -175435,9 +179562,11 @@ static const UV UNI__PERL_CHARNAME_CONTINUE_invlist[] = { /* for EBCDIC 1047 */ 0x11000, 0x11047, 0x11066, - 0x11070, + 0x11076, 0x1107F, 0x110BB, + 0x110C2, + 0x110C3, 0x110D0, 0x110E9, 0x110F0, @@ -175544,6 +179673,8 @@ static const UV UNI__PERL_CHARNAME_CONTINUE_invlist[] = { /* for EBCDIC 1047 */ 0x1172C, 0x11730, 0x1173A, + 0x11740, + 0x11747, 0x11800, 0x1183B, 0x118A0, @@ -175580,7 +179711,7 @@ static const UV UNI__PERL_CHARNAME_CONTINUE_invlist[] = { /* for EBCDIC 1047 */ 0x11A9A, 0x11A9D, 0x11A9E, - 0x11AC0, + 0x11AB0, 0x11AF9, 0x11C00, 0x11C09, @@ -175632,6 +179763,8 @@ static const UV UNI__PERL_CHARNAME_CONTINUE_invlist[] = { /* for EBCDIC 1047 */ 0x1246F, 0x12480, 0x12544, + 0x12F90, + 0x12FF1, 0x13000, 0x1342F, 0x14400, @@ -175642,6 +179775,10 @@ static const UV UNI__PERL_CHARNAME_CONTINUE_invlist[] = { /* for EBCDIC 1047 */ 0x16A5F, 0x16A60, 0x16A6A, + 0x16A70, + 0x16ABF, + 0x16AC0, + 0x16ACA, 0x16AD0, 0x16AEE, 0x16AF0, @@ -175676,8 +179813,14 @@ static const UV UNI__PERL_CHARNAME_CONTINUE_invlist[] = { /* for EBCDIC 1047 */ 0x18CD6, 0x18D00, 0x18D09, + 0x1AFF0, + 0x1AFF4, + 0x1AFF5, + 0x1AFFC, + 0x1AFFD, + 0x1AFFF, 0x1B000, - 0x1B11F, + 0x1B123, 0x1B150, 0x1B153, 0x1B164, @@ -175694,6 +179837,10 @@ static const UV UNI__PERL_CHARNAME_CONTINUE_invlist[] = { /* for EBCDIC 1047 */ 0x1BC9A, 0x1BC9D, 0x1BC9F, + 0x1CF00, + 0x1CF2E, + 0x1CF30, + 0x1CF47, 0x1D165, 0x1D16A, 0x1D16D, @@ -175780,6 +179927,8 @@ static const UV UNI__PERL_CHARNAME_CONTINUE_invlist[] = { /* for EBCDIC 1047 */ 0x1DAA0, 0x1DAA1, 0x1DAB0, + 0x1DF00, + 0x1DF1F, 0x1E000, 0x1E007, 0x1E008, @@ -175798,8 +179947,18 @@ static const UV UNI__PERL_CHARNAME_CONTINUE_invlist[] = { /* for EBCDIC 1047 */ 0x1E14A, 0x1E14E, 0x1E14F, + 0x1E290, + 0x1E2AF, 0x1E2C0, 0x1E2FA, + 0x1E7E0, + 0x1E7E7, + 0x1E7E8, + 0x1E7EC, + 0x1E7ED, + 0x1E7EF, + 0x1E7F0, + 0x1E7FF, 0x1E800, 0x1E8C5, 0x1E8D0, @@ -175877,9 +180036,9 @@ static const UV UNI__PERL_CHARNAME_CONTINUE_invlist[] = { /* for EBCDIC 1047 */ 0x1FBF0, 0x1FBFA, 0x20000, - 0x2A6DE, + 0x2A6E0, 0x2A700, - 0x2B735, + 0x2B739, 0x2B740, 0x2B81E, 0x2B820, @@ -175902,7 +180061,7 @@ static const UV UNI__PERL_CHARNAME_CONTINUE_invlist[] = { /* for EBCDIC 1047 */ && '$' == 91 && '@' == 124 && '`' == 121 && '\n' == 37 static const UV UNI__PERL_CHARNAME_CONTINUE_invlist[] = { /* for EBCDIC 037 */ - 1503, /* Number of elements */ + 1555, /* Number of elements */ 148565664, /* Version and data structure type */ 1, /* 0 if the list starts at 0; 1 if it starts at the element beyond 0 */ @@ -176037,11 +180196,11 @@ static const UV UNI__PERL_CHARNAME_CONTINUE_invlist[] = { /* for EBCDIC 037 */ 0x85C, 0x860, 0x86B, - 0x8A0, - 0x8B5, - 0x8B6, - 0x8C8, - 0x8D3, + 0x870, + 0x888, + 0x889, + 0x88F, + 0x898, 0x8E2, 0x8E3, 0x964, @@ -176209,7 +180368,7 @@ static const UV UNI__PERL_CHARNAME_CONTINUE_invlist[] = { /* for EBCDIC 037 */ 0xC29, 0xC2A, 0xC3A, - 0xC3D, + 0xC3C, 0xC45, 0xC46, 0xC49, @@ -176219,6 +180378,8 @@ static const UV UNI__PERL_CHARNAME_CONTINUE_invlist[] = { /* for EBCDIC 037 */ 0xC57, 0xC58, 0xC5B, + 0xC5D, + 0xC5E, 0xC60, 0xC64, 0xC66, @@ -176243,7 +180404,7 @@ static const UV UNI__PERL_CHARNAME_CONTINUE_invlist[] = { /* for EBCDIC 037 */ 0xCCE, 0xCD5, 0xCD7, - 0xCDE, + 0xCDD, 0xCDF, 0xCE0, 0xCE4, @@ -176408,10 +180569,8 @@ static const UV UNI__PERL_CHARNAME_CONTINUE_invlist[] = { /* for EBCDIC 037 */ 0x16EE, 0x16F9, 0x1700, - 0x170D, - 0x170E, - 0x1715, - 0x1720, + 0x1716, + 0x171F, 0x1735, 0x1740, 0x1754, @@ -176431,7 +180590,7 @@ static const UV UNI__PERL_CHARNAME_CONTINUE_invlist[] = { /* for EBCDIC 037 */ 0x17EA, 0x180B, 0x180E, - 0x1810, + 0x180F, 0x181A, 0x1820, 0x1879, @@ -176470,9 +180629,9 @@ static const UV UNI__PERL_CHARNAME_CONTINUE_invlist[] = { /* for EBCDIC 037 */ 0x1AB0, 0x1ABE, 0x1ABF, - 0x1AC1, + 0x1ACF, 0x1B00, - 0x1B4C, + 0x1B4D, 0x1B50, 0x1B5A, 0x1B6B, @@ -176496,8 +180655,6 @@ static const UV UNI__PERL_CHARNAME_CONTINUE_invlist[] = { /* for EBCDIC 037 */ 0x1CD4, 0x1CFB, 0x1D00, - 0x1DFA, - 0x1DFB, 0x1F16, 0x1F18, 0x1F1E, @@ -176580,10 +180737,6 @@ static const UV UNI__PERL_CHARNAME_CONTINUE_invlist[] = { /* for EBCDIC 037 */ 0x2160, 0x2189, 0x2C00, - 0x2C2F, - 0x2C30, - 0x2C5F, - 0x2C60, 0x2CE5, 0x2CEB, 0x2CF4, @@ -176646,8 +180799,6 @@ static const UV UNI__PERL_CHARNAME_CONTINUE_invlist[] = { /* for EBCDIC 037 */ 0x3400, 0x4DC0, 0x4E00, - 0x9FFD, - 0xA000, 0xA48D, 0xA4D0, 0xA4FE, @@ -176666,10 +180817,14 @@ static const UV UNI__PERL_CHARNAME_CONTINUE_invlist[] = { /* for EBCDIC 037 */ 0xA722, 0xA789, 0xA78B, - 0xA7C0, - 0xA7C2, 0xA7CB, - 0xA7F5, + 0xA7D0, + 0xA7D2, + 0xA7D3, + 0xA7D4, + 0xA7D5, + 0xA7DA, + 0xA7F2, 0xA828, 0xA82C, 0xA82D, @@ -176859,12 +181014,34 @@ static const UV UNI__PERL_CHARNAME_CONTINUE_invlist[] = { /* for EBCDIC 037 */ 0x10528, 0x10530, 0x10564, + 0x10570, + 0x1057B, + 0x1057C, + 0x1058B, + 0x1058C, + 0x10593, + 0x10594, + 0x10596, + 0x10597, + 0x105A2, + 0x105A3, + 0x105B2, + 0x105B3, + 0x105BA, + 0x105BB, + 0x105BD, 0x10600, 0x10737, 0x10740, 0x10756, 0x10760, 0x10768, + 0x10780, + 0x10786, + 0x10787, + 0x107B1, + 0x107B2, + 0x107BB, 0x10800, 0x10806, 0x10808, @@ -176945,6 +181122,8 @@ static const UV UNI__PERL_CHARNAME_CONTINUE_invlist[] = { /* for EBCDIC 037 */ 0x10F28, 0x10F30, 0x10F51, + 0x10F70, + 0x10F86, 0x10FB0, 0x10FC5, 0x10FE0, @@ -176952,9 +181131,11 @@ static const UV UNI__PERL_CHARNAME_CONTINUE_invlist[] = { /* for EBCDIC 037 */ 0x11000, 0x11047, 0x11066, - 0x11070, + 0x11076, 0x1107F, 0x110BB, + 0x110C2, + 0x110C3, 0x110D0, 0x110E9, 0x110F0, @@ -177061,6 +181242,8 @@ static const UV UNI__PERL_CHARNAME_CONTINUE_invlist[] = { /* for EBCDIC 037 */ 0x1172C, 0x11730, 0x1173A, + 0x11740, + 0x11747, 0x11800, 0x1183B, 0x118A0, @@ -177097,7 +181280,7 @@ static const UV UNI__PERL_CHARNAME_CONTINUE_invlist[] = { /* for EBCDIC 037 */ 0x11A9A, 0x11A9D, 0x11A9E, - 0x11AC0, + 0x11AB0, 0x11AF9, 0x11C00, 0x11C09, @@ -177149,6 +181332,8 @@ static const UV UNI__PERL_CHARNAME_CONTINUE_invlist[] = { /* for EBCDIC 037 */ 0x1246F, 0x12480, 0x12544, + 0x12F90, + 0x12FF1, 0x13000, 0x1342F, 0x14400, @@ -177159,6 +181344,10 @@ static const UV UNI__PERL_CHARNAME_CONTINUE_invlist[] = { /* for EBCDIC 037 */ 0x16A5F, 0x16A60, 0x16A6A, + 0x16A70, + 0x16ABF, + 0x16AC0, + 0x16ACA, 0x16AD0, 0x16AEE, 0x16AF0, @@ -177193,8 +181382,14 @@ static const UV UNI__PERL_CHARNAME_CONTINUE_invlist[] = { /* for EBCDIC 037 */ 0x18CD6, 0x18D00, 0x18D09, + 0x1AFF0, + 0x1AFF4, + 0x1AFF5, + 0x1AFFC, + 0x1AFFD, + 0x1AFFF, 0x1B000, - 0x1B11F, + 0x1B123, 0x1B150, 0x1B153, 0x1B164, @@ -177211,6 +181406,10 @@ static const UV UNI__PERL_CHARNAME_CONTINUE_invlist[] = { /* for EBCDIC 037 */ 0x1BC9A, 0x1BC9D, 0x1BC9F, + 0x1CF00, + 0x1CF2E, + 0x1CF30, + 0x1CF47, 0x1D165, 0x1D16A, 0x1D16D, @@ -177297,6 +181496,8 @@ static const UV UNI__PERL_CHARNAME_CONTINUE_invlist[] = { /* for EBCDIC 037 */ 0x1DAA0, 0x1DAA1, 0x1DAB0, + 0x1DF00, + 0x1DF1F, 0x1E000, 0x1E007, 0x1E008, @@ -177315,8 +181516,18 @@ static const UV UNI__PERL_CHARNAME_CONTINUE_invlist[] = { /* for EBCDIC 037 */ 0x1E14A, 0x1E14E, 0x1E14F, + 0x1E290, + 0x1E2AF, 0x1E2C0, 0x1E2FA, + 0x1E7E0, + 0x1E7E7, + 0x1E7E8, + 0x1E7EC, + 0x1E7ED, + 0x1E7EF, + 0x1E7F0, + 0x1E7FF, 0x1E800, 0x1E8C5, 0x1E8D0, @@ -177394,9 +181605,9 @@ static const UV UNI__PERL_CHARNAME_CONTINUE_invlist[] = { /* for EBCDIC 037 */ 0x1FBF0, 0x1FBFA, 0x20000, - 0x2A6DE, + 0x2A6E0, 0x2A700, - 0x2B735, + 0x2B739, 0x2B740, 0x2B81E, 0x2B820, @@ -177632,7 +181843,7 @@ static const UV UNI__PERL_FOLDS_TO_MULTI_CHAR_invlist[] = { /* for EBCDIC 037 * # if 'A' == 65 /* ASCII/Latin1 */ static const UV UNI__PERL_IDCONT_invlist[] = { /* for ASCII/Latin1 */ - 1475, /* Number of elements */ + 1527, /* Number of elements */ 148565664, /* Version and data structure type */ 1, /* 0 if the list starts at 0; 1 if it starts at the element beyond 0 */ @@ -177739,11 +181950,11 @@ static const UV UNI__PERL_IDCONT_invlist[] = { /* for ASCII/Latin1 */ 0x85C, 0x860, 0x86B, - 0x8A0, - 0x8B5, - 0x8B6, - 0x8C8, - 0x8D3, + 0x870, + 0x888, + 0x889, + 0x88F, + 0x898, 0x8E2, 0x8E3, 0x964, @@ -177911,7 +182122,7 @@ static const UV UNI__PERL_IDCONT_invlist[] = { /* for ASCII/Latin1 */ 0xC29, 0xC2A, 0xC3A, - 0xC3D, + 0xC3C, 0xC45, 0xC46, 0xC49, @@ -177921,6 +182132,8 @@ static const UV UNI__PERL_IDCONT_invlist[] = { /* for ASCII/Latin1 */ 0xC57, 0xC58, 0xC5B, + 0xC5D, + 0xC5E, 0xC60, 0xC64, 0xC66, @@ -177945,7 +182158,7 @@ static const UV UNI__PERL_IDCONT_invlist[] = { /* for ASCII/Latin1 */ 0xCCE, 0xCD5, 0xCD7, - 0xCDE, + 0xCDD, 0xCDF, 0xCE0, 0xCE4, @@ -178110,10 +182323,8 @@ static const UV UNI__PERL_IDCONT_invlist[] = { /* for ASCII/Latin1 */ 0x16EE, 0x16F9, 0x1700, - 0x170D, - 0x170E, - 0x1715, - 0x1720, + 0x1716, + 0x171F, 0x1735, 0x1740, 0x1754, @@ -178133,7 +182344,7 @@ static const UV UNI__PERL_IDCONT_invlist[] = { /* for ASCII/Latin1 */ 0x17EA, 0x180B, 0x180E, - 0x1810, + 0x180F, 0x181A, 0x1820, 0x1879, @@ -178172,9 +182383,9 @@ static const UV UNI__PERL_IDCONT_invlist[] = { /* for ASCII/Latin1 */ 0x1AB0, 0x1ABE, 0x1ABF, - 0x1AC1, + 0x1ACF, 0x1B00, - 0x1B4C, + 0x1B4D, 0x1B50, 0x1B5A, 0x1B6B, @@ -178198,8 +182409,6 @@ static const UV UNI__PERL_IDCONT_invlist[] = { /* for ASCII/Latin1 */ 0x1CD4, 0x1CFB, 0x1D00, - 0x1DFA, - 0x1DFB, 0x1F16, 0x1F18, 0x1F1E, @@ -178282,10 +182491,6 @@ static const UV UNI__PERL_IDCONT_invlist[] = { /* for ASCII/Latin1 */ 0x2160, 0x2189, 0x2C00, - 0x2C2F, - 0x2C30, - 0x2C5F, - 0x2C60, 0x2CE5, 0x2CEB, 0x2CF4, @@ -178348,8 +182553,6 @@ static const UV UNI__PERL_IDCONT_invlist[] = { /* for ASCII/Latin1 */ 0x3400, 0x4DC0, 0x4E00, - 0x9FFD, - 0xA000, 0xA48D, 0xA4D0, 0xA4FE, @@ -178368,10 +182571,14 @@ static const UV UNI__PERL_IDCONT_invlist[] = { /* for ASCII/Latin1 */ 0xA722, 0xA789, 0xA78B, - 0xA7C0, - 0xA7C2, 0xA7CB, - 0xA7F5, + 0xA7D0, + 0xA7D2, + 0xA7D3, + 0xA7D4, + 0xA7D5, + 0xA7DA, + 0xA7F2, 0xA828, 0xA82C, 0xA82D, @@ -178561,12 +182768,34 @@ static const UV UNI__PERL_IDCONT_invlist[] = { /* for ASCII/Latin1 */ 0x10528, 0x10530, 0x10564, + 0x10570, + 0x1057B, + 0x1057C, + 0x1058B, + 0x1058C, + 0x10593, + 0x10594, + 0x10596, + 0x10597, + 0x105A2, + 0x105A3, + 0x105B2, + 0x105B3, + 0x105BA, + 0x105BB, + 0x105BD, 0x10600, 0x10737, 0x10740, 0x10756, 0x10760, 0x10768, + 0x10780, + 0x10786, + 0x10787, + 0x107B1, + 0x107B2, + 0x107BB, 0x10800, 0x10806, 0x10808, @@ -178647,6 +182876,8 @@ static const UV UNI__PERL_IDCONT_invlist[] = { /* for ASCII/Latin1 */ 0x10F28, 0x10F30, 0x10F51, + 0x10F70, + 0x10F86, 0x10FB0, 0x10FC5, 0x10FE0, @@ -178654,9 +182885,11 @@ static const UV UNI__PERL_IDCONT_invlist[] = { /* for ASCII/Latin1 */ 0x11000, 0x11047, 0x11066, - 0x11070, + 0x11076, 0x1107F, 0x110BB, + 0x110C2, + 0x110C3, 0x110D0, 0x110E9, 0x110F0, @@ -178763,6 +182996,8 @@ static const UV UNI__PERL_IDCONT_invlist[] = { /* for ASCII/Latin1 */ 0x1172C, 0x11730, 0x1173A, + 0x11740, + 0x11747, 0x11800, 0x1183B, 0x118A0, @@ -178799,7 +183034,7 @@ static const UV UNI__PERL_IDCONT_invlist[] = { /* for ASCII/Latin1 */ 0x11A9A, 0x11A9D, 0x11A9E, - 0x11AC0, + 0x11AB0, 0x11AF9, 0x11C00, 0x11C09, @@ -178851,6 +183086,8 @@ static const UV UNI__PERL_IDCONT_invlist[] = { /* for ASCII/Latin1 */ 0x1246F, 0x12480, 0x12544, + 0x12F90, + 0x12FF1, 0x13000, 0x1342F, 0x14400, @@ -178861,6 +183098,10 @@ static const UV UNI__PERL_IDCONT_invlist[] = { /* for ASCII/Latin1 */ 0x16A5F, 0x16A60, 0x16A6A, + 0x16A70, + 0x16ABF, + 0x16AC0, + 0x16ACA, 0x16AD0, 0x16AEE, 0x16AF0, @@ -178895,8 +183136,14 @@ static const UV UNI__PERL_IDCONT_invlist[] = { /* for ASCII/Latin1 */ 0x18CD6, 0x18D00, 0x18D09, + 0x1AFF0, + 0x1AFF4, + 0x1AFF5, + 0x1AFFC, + 0x1AFFD, + 0x1AFFF, 0x1B000, - 0x1B11F, + 0x1B123, 0x1B150, 0x1B153, 0x1B164, @@ -178913,6 +183160,10 @@ static const UV UNI__PERL_IDCONT_invlist[] = { /* for ASCII/Latin1 */ 0x1BC9A, 0x1BC9D, 0x1BC9F, + 0x1CF00, + 0x1CF2E, + 0x1CF30, + 0x1CF47, 0x1D165, 0x1D16A, 0x1D16D, @@ -178999,6 +183250,8 @@ static const UV UNI__PERL_IDCONT_invlist[] = { /* for ASCII/Latin1 */ 0x1DAA0, 0x1DAA1, 0x1DAB0, + 0x1DF00, + 0x1DF1F, 0x1E000, 0x1E007, 0x1E008, @@ -179017,8 +183270,18 @@ static const UV UNI__PERL_IDCONT_invlist[] = { /* for ASCII/Latin1 */ 0x1E14A, 0x1E14E, 0x1E14F, + 0x1E290, + 0x1E2AF, 0x1E2C0, 0x1E2FA, + 0x1E7E0, + 0x1E7E7, + 0x1E7E8, + 0x1E7EC, + 0x1E7ED, + 0x1E7EF, + 0x1E7F0, + 0x1E7FF, 0x1E800, 0x1E8C5, 0x1E8D0, @@ -179096,9 +183359,9 @@ static const UV UNI__PERL_IDCONT_invlist[] = { /* for ASCII/Latin1 */ 0x1FBF0, 0x1FBFA, 0x20000, - 0x2A6DE, + 0x2A6E0, 0x2A700, - 0x2B735, + 0x2B739, 0x2B740, 0x2B81E, 0x2B820, @@ -179121,7 +183384,7 @@ static const UV UNI__PERL_IDCONT_invlist[] = { /* for ASCII/Latin1 */ && '$' == 91 && '@' == 124 && '`' == 121 && '\n' == 21 static const UV UNI__PERL_IDCONT_invlist[] = { /* for EBCDIC 1047 */ - 1499, /* Number of elements */ + 1551, /* Number of elements */ 148565664, /* Version and data structure type */ 1, /* 0 if the list starts at 0; 1 if it starts at the element beyond 0 */ @@ -179252,11 +183515,11 @@ static const UV UNI__PERL_IDCONT_invlist[] = { /* for EBCDIC 1047 */ 0x85C, 0x860, 0x86B, - 0x8A0, - 0x8B5, - 0x8B6, - 0x8C8, - 0x8D3, + 0x870, + 0x888, + 0x889, + 0x88F, + 0x898, 0x8E2, 0x8E3, 0x964, @@ -179424,7 +183687,7 @@ static const UV UNI__PERL_IDCONT_invlist[] = { /* for EBCDIC 1047 */ 0xC29, 0xC2A, 0xC3A, - 0xC3D, + 0xC3C, 0xC45, 0xC46, 0xC49, @@ -179434,6 +183697,8 @@ static const UV UNI__PERL_IDCONT_invlist[] = { /* for EBCDIC 1047 */ 0xC57, 0xC58, 0xC5B, + 0xC5D, + 0xC5E, 0xC60, 0xC64, 0xC66, @@ -179458,7 +183723,7 @@ static const UV UNI__PERL_IDCONT_invlist[] = { /* for EBCDIC 1047 */ 0xCCE, 0xCD5, 0xCD7, - 0xCDE, + 0xCDD, 0xCDF, 0xCE0, 0xCE4, @@ -179623,10 +183888,8 @@ static const UV UNI__PERL_IDCONT_invlist[] = { /* for EBCDIC 1047 */ 0x16EE, 0x16F9, 0x1700, - 0x170D, - 0x170E, - 0x1715, - 0x1720, + 0x1716, + 0x171F, 0x1735, 0x1740, 0x1754, @@ -179646,7 +183909,7 @@ static const UV UNI__PERL_IDCONT_invlist[] = { /* for EBCDIC 1047 */ 0x17EA, 0x180B, 0x180E, - 0x1810, + 0x180F, 0x181A, 0x1820, 0x1879, @@ -179685,9 +183948,9 @@ static const UV UNI__PERL_IDCONT_invlist[] = { /* for EBCDIC 1047 */ 0x1AB0, 0x1ABE, 0x1ABF, - 0x1AC1, + 0x1ACF, 0x1B00, - 0x1B4C, + 0x1B4D, 0x1B50, 0x1B5A, 0x1B6B, @@ -179711,8 +183974,6 @@ static const UV UNI__PERL_IDCONT_invlist[] = { /* for EBCDIC 1047 */ 0x1CD4, 0x1CFB, 0x1D00, - 0x1DFA, - 0x1DFB, 0x1F16, 0x1F18, 0x1F1E, @@ -179795,10 +184056,6 @@ static const UV UNI__PERL_IDCONT_invlist[] = { /* for EBCDIC 1047 */ 0x2160, 0x2189, 0x2C00, - 0x2C2F, - 0x2C30, - 0x2C5F, - 0x2C60, 0x2CE5, 0x2CEB, 0x2CF4, @@ -179861,8 +184118,6 @@ static const UV UNI__PERL_IDCONT_invlist[] = { /* for EBCDIC 1047 */ 0x3400, 0x4DC0, 0x4E00, - 0x9FFD, - 0xA000, 0xA48D, 0xA4D0, 0xA4FE, @@ -179881,10 +184136,14 @@ static const UV UNI__PERL_IDCONT_invlist[] = { /* for EBCDIC 1047 */ 0xA722, 0xA789, 0xA78B, - 0xA7C0, - 0xA7C2, 0xA7CB, - 0xA7F5, + 0xA7D0, + 0xA7D2, + 0xA7D3, + 0xA7D4, + 0xA7D5, + 0xA7DA, + 0xA7F2, 0xA828, 0xA82C, 0xA82D, @@ -180074,12 +184333,34 @@ static const UV UNI__PERL_IDCONT_invlist[] = { /* for EBCDIC 1047 */ 0x10528, 0x10530, 0x10564, + 0x10570, + 0x1057B, + 0x1057C, + 0x1058B, + 0x1058C, + 0x10593, + 0x10594, + 0x10596, + 0x10597, + 0x105A2, + 0x105A3, + 0x105B2, + 0x105B3, + 0x105BA, + 0x105BB, + 0x105BD, 0x10600, 0x10737, 0x10740, 0x10756, 0x10760, 0x10768, + 0x10780, + 0x10786, + 0x10787, + 0x107B1, + 0x107B2, + 0x107BB, 0x10800, 0x10806, 0x10808, @@ -180160,6 +184441,8 @@ static const UV UNI__PERL_IDCONT_invlist[] = { /* for EBCDIC 1047 */ 0x10F28, 0x10F30, 0x10F51, + 0x10F70, + 0x10F86, 0x10FB0, 0x10FC5, 0x10FE0, @@ -180167,9 +184450,11 @@ static const UV UNI__PERL_IDCONT_invlist[] = { /* for EBCDIC 1047 */ 0x11000, 0x11047, 0x11066, - 0x11070, + 0x11076, 0x1107F, 0x110BB, + 0x110C2, + 0x110C3, 0x110D0, 0x110E9, 0x110F0, @@ -180276,6 +184561,8 @@ static const UV UNI__PERL_IDCONT_invlist[] = { /* for EBCDIC 1047 */ 0x1172C, 0x11730, 0x1173A, + 0x11740, + 0x11747, 0x11800, 0x1183B, 0x118A0, @@ -180312,7 +184599,7 @@ static const UV UNI__PERL_IDCONT_invlist[] = { /* for EBCDIC 1047 */ 0x11A9A, 0x11A9D, 0x11A9E, - 0x11AC0, + 0x11AB0, 0x11AF9, 0x11C00, 0x11C09, @@ -180364,6 +184651,8 @@ static const UV UNI__PERL_IDCONT_invlist[] = { /* for EBCDIC 1047 */ 0x1246F, 0x12480, 0x12544, + 0x12F90, + 0x12FF1, 0x13000, 0x1342F, 0x14400, @@ -180374,6 +184663,10 @@ static const UV UNI__PERL_IDCONT_invlist[] = { /* for EBCDIC 1047 */ 0x16A5F, 0x16A60, 0x16A6A, + 0x16A70, + 0x16ABF, + 0x16AC0, + 0x16ACA, 0x16AD0, 0x16AEE, 0x16AF0, @@ -180408,8 +184701,14 @@ static const UV UNI__PERL_IDCONT_invlist[] = { /* for EBCDIC 1047 */ 0x18CD6, 0x18D00, 0x18D09, + 0x1AFF0, + 0x1AFF4, + 0x1AFF5, + 0x1AFFC, + 0x1AFFD, + 0x1AFFF, 0x1B000, - 0x1B11F, + 0x1B123, 0x1B150, 0x1B153, 0x1B164, @@ -180426,6 +184725,10 @@ static const UV UNI__PERL_IDCONT_invlist[] = { /* for EBCDIC 1047 */ 0x1BC9A, 0x1BC9D, 0x1BC9F, + 0x1CF00, + 0x1CF2E, + 0x1CF30, + 0x1CF47, 0x1D165, 0x1D16A, 0x1D16D, @@ -180512,6 +184815,8 @@ static const UV UNI__PERL_IDCONT_invlist[] = { /* for EBCDIC 1047 */ 0x1DAA0, 0x1DAA1, 0x1DAB0, + 0x1DF00, + 0x1DF1F, 0x1E000, 0x1E007, 0x1E008, @@ -180530,8 +184835,18 @@ static const UV UNI__PERL_IDCONT_invlist[] = { /* for EBCDIC 1047 */ 0x1E14A, 0x1E14E, 0x1E14F, + 0x1E290, + 0x1E2AF, 0x1E2C0, 0x1E2FA, + 0x1E7E0, + 0x1E7E7, + 0x1E7E8, + 0x1E7EC, + 0x1E7ED, + 0x1E7EF, + 0x1E7F0, + 0x1E7FF, 0x1E800, 0x1E8C5, 0x1E8D0, @@ -180609,9 +184924,9 @@ static const UV UNI__PERL_IDCONT_invlist[] = { /* for EBCDIC 1047 */ 0x1FBF0, 0x1FBFA, 0x20000, - 0x2A6DE, + 0x2A6E0, 0x2A700, - 0x2B735, + 0x2B739, 0x2B740, 0x2B81E, 0x2B820, @@ -180634,7 +184949,7 @@ static const UV UNI__PERL_IDCONT_invlist[] = { /* for EBCDIC 1047 */ && '$' == 91 && '@' == 124 && '`' == 121 && '\n' == 37 static const UV UNI__PERL_IDCONT_invlist[] = { /* for EBCDIC 037 */ - 1495, /* Number of elements */ + 1547, /* Number of elements */ 148565664, /* Version and data structure type */ 1, /* 0 if the list starts at 0; 1 if it starts at the element beyond 0 */ @@ -180761,11 +185076,11 @@ static const UV UNI__PERL_IDCONT_invlist[] = { /* for EBCDIC 037 */ 0x85C, 0x860, 0x86B, - 0x8A0, - 0x8B5, - 0x8B6, - 0x8C8, - 0x8D3, + 0x870, + 0x888, + 0x889, + 0x88F, + 0x898, 0x8E2, 0x8E3, 0x964, @@ -180933,7 +185248,7 @@ static const UV UNI__PERL_IDCONT_invlist[] = { /* for EBCDIC 037 */ 0xC29, 0xC2A, 0xC3A, - 0xC3D, + 0xC3C, 0xC45, 0xC46, 0xC49, @@ -180943,6 +185258,8 @@ static const UV UNI__PERL_IDCONT_invlist[] = { /* for EBCDIC 037 */ 0xC57, 0xC58, 0xC5B, + 0xC5D, + 0xC5E, 0xC60, 0xC64, 0xC66, @@ -180967,7 +185284,7 @@ static const UV UNI__PERL_IDCONT_invlist[] = { /* for EBCDIC 037 */ 0xCCE, 0xCD5, 0xCD7, - 0xCDE, + 0xCDD, 0xCDF, 0xCE0, 0xCE4, @@ -181132,10 +185449,8 @@ static const UV UNI__PERL_IDCONT_invlist[] = { /* for EBCDIC 037 */ 0x16EE, 0x16F9, 0x1700, - 0x170D, - 0x170E, - 0x1715, - 0x1720, + 0x1716, + 0x171F, 0x1735, 0x1740, 0x1754, @@ -181155,7 +185470,7 @@ static const UV UNI__PERL_IDCONT_invlist[] = { /* for EBCDIC 037 */ 0x17EA, 0x180B, 0x180E, - 0x1810, + 0x180F, 0x181A, 0x1820, 0x1879, @@ -181194,9 +185509,9 @@ static const UV UNI__PERL_IDCONT_invlist[] = { /* for EBCDIC 037 */ 0x1AB0, 0x1ABE, 0x1ABF, - 0x1AC1, + 0x1ACF, 0x1B00, - 0x1B4C, + 0x1B4D, 0x1B50, 0x1B5A, 0x1B6B, @@ -181220,8 +185535,6 @@ static const UV UNI__PERL_IDCONT_invlist[] = { /* for EBCDIC 037 */ 0x1CD4, 0x1CFB, 0x1D00, - 0x1DFA, - 0x1DFB, 0x1F16, 0x1F18, 0x1F1E, @@ -181304,10 +185617,6 @@ static const UV UNI__PERL_IDCONT_invlist[] = { /* for EBCDIC 037 */ 0x2160, 0x2189, 0x2C00, - 0x2C2F, - 0x2C30, - 0x2C5F, - 0x2C60, 0x2CE5, 0x2CEB, 0x2CF4, @@ -181370,8 +185679,6 @@ static const UV UNI__PERL_IDCONT_invlist[] = { /* for EBCDIC 037 */ 0x3400, 0x4DC0, 0x4E00, - 0x9FFD, - 0xA000, 0xA48D, 0xA4D0, 0xA4FE, @@ -181390,10 +185697,14 @@ static const UV UNI__PERL_IDCONT_invlist[] = { /* for EBCDIC 037 */ 0xA722, 0xA789, 0xA78B, - 0xA7C0, - 0xA7C2, 0xA7CB, - 0xA7F5, + 0xA7D0, + 0xA7D2, + 0xA7D3, + 0xA7D4, + 0xA7D5, + 0xA7DA, + 0xA7F2, 0xA828, 0xA82C, 0xA82D, @@ -181583,12 +185894,34 @@ static const UV UNI__PERL_IDCONT_invlist[] = { /* for EBCDIC 037 */ 0x10528, 0x10530, 0x10564, + 0x10570, + 0x1057B, + 0x1057C, + 0x1058B, + 0x1058C, + 0x10593, + 0x10594, + 0x10596, + 0x10597, + 0x105A2, + 0x105A3, + 0x105B2, + 0x105B3, + 0x105BA, + 0x105BB, + 0x105BD, 0x10600, 0x10737, 0x10740, 0x10756, 0x10760, 0x10768, + 0x10780, + 0x10786, + 0x10787, + 0x107B1, + 0x107B2, + 0x107BB, 0x10800, 0x10806, 0x10808, @@ -181669,6 +186002,8 @@ static const UV UNI__PERL_IDCONT_invlist[] = { /* for EBCDIC 037 */ 0x10F28, 0x10F30, 0x10F51, + 0x10F70, + 0x10F86, 0x10FB0, 0x10FC5, 0x10FE0, @@ -181676,9 +186011,11 @@ static const UV UNI__PERL_IDCONT_invlist[] = { /* for EBCDIC 037 */ 0x11000, 0x11047, 0x11066, - 0x11070, + 0x11076, 0x1107F, 0x110BB, + 0x110C2, + 0x110C3, 0x110D0, 0x110E9, 0x110F0, @@ -181785,6 +186122,8 @@ static const UV UNI__PERL_IDCONT_invlist[] = { /* for EBCDIC 037 */ 0x1172C, 0x11730, 0x1173A, + 0x11740, + 0x11747, 0x11800, 0x1183B, 0x118A0, @@ -181821,7 +186160,7 @@ static const UV UNI__PERL_IDCONT_invlist[] = { /* for EBCDIC 037 */ 0x11A9A, 0x11A9D, 0x11A9E, - 0x11AC0, + 0x11AB0, 0x11AF9, 0x11C00, 0x11C09, @@ -181873,6 +186212,8 @@ static const UV UNI__PERL_IDCONT_invlist[] = { /* for EBCDIC 037 */ 0x1246F, 0x12480, 0x12544, + 0x12F90, + 0x12FF1, 0x13000, 0x1342F, 0x14400, @@ -181883,6 +186224,10 @@ static const UV UNI__PERL_IDCONT_invlist[] = { /* for EBCDIC 037 */ 0x16A5F, 0x16A60, 0x16A6A, + 0x16A70, + 0x16ABF, + 0x16AC0, + 0x16ACA, 0x16AD0, 0x16AEE, 0x16AF0, @@ -181917,8 +186262,14 @@ static const UV UNI__PERL_IDCONT_invlist[] = { /* for EBCDIC 037 */ 0x18CD6, 0x18D00, 0x18D09, + 0x1AFF0, + 0x1AFF4, + 0x1AFF5, + 0x1AFFC, + 0x1AFFD, + 0x1AFFF, 0x1B000, - 0x1B11F, + 0x1B123, 0x1B150, 0x1B153, 0x1B164, @@ -181935,6 +186286,10 @@ static const UV UNI__PERL_IDCONT_invlist[] = { /* for EBCDIC 037 */ 0x1BC9A, 0x1BC9D, 0x1BC9F, + 0x1CF00, + 0x1CF2E, + 0x1CF30, + 0x1CF47, 0x1D165, 0x1D16A, 0x1D16D, @@ -182021,6 +186376,8 @@ static const UV UNI__PERL_IDCONT_invlist[] = { /* for EBCDIC 037 */ 0x1DAA0, 0x1DAA1, 0x1DAB0, + 0x1DF00, + 0x1DF1F, 0x1E000, 0x1E007, 0x1E008, @@ -182039,8 +186396,18 @@ static const UV UNI__PERL_IDCONT_invlist[] = { /* for EBCDIC 037 */ 0x1E14A, 0x1E14E, 0x1E14F, + 0x1E290, + 0x1E2AF, 0x1E2C0, 0x1E2FA, + 0x1E7E0, + 0x1E7E7, + 0x1E7E8, + 0x1E7EC, + 0x1E7ED, + 0x1E7EF, + 0x1E7F0, + 0x1E7FF, 0x1E800, 0x1E8C5, 0x1E8D0, @@ -182118,9 +186485,9 @@ static const UV UNI__PERL_IDCONT_invlist[] = { /* for EBCDIC 037 */ 0x1FBF0, 0x1FBFA, 0x20000, - 0x2A6DE, + 0x2A6E0, 0x2A700, - 0x2B735, + 0x2B739, 0x2B740, 0x2B81E, 0x2B820, @@ -182140,7 +186507,7 @@ static const UV UNI__PERL_IDCONT_invlist[] = { /* for EBCDIC 037 */ # if 'A' == 65 /* ASCII/Latin1 */ static const UV UNI__PERL_IDSTART_invlist[] = { /* for ASCII/Latin1 */ - 1263, /* Number of elements */ + 1315, /* Number of elements */ 148565664, /* Version and data structure type */ 1, /* 0 if the list starts at 0; 1 if it starts at the element beyond 0 */ @@ -182245,10 +186612,12 @@ static const UV UNI__PERL_IDSTART_invlist[] = { /* for ASCII/Latin1 */ 0x859, 0x860, 0x86B, + 0x870, + 0x888, + 0x889, + 0x88F, 0x8A0, - 0x8B5, - 0x8B6, - 0x8C8, + 0x8CA, 0x904, 0x93A, 0x93D, @@ -182377,6 +186746,8 @@ static const UV UNI__PERL_IDSTART_invlist[] = { /* for ASCII/Latin1 */ 0xC3E, 0xC58, 0xC5B, + 0xC5D, + 0xC5E, 0xC60, 0xC62, 0xC80, @@ -182393,7 +186764,7 @@ static const UV UNI__PERL_IDSTART_invlist[] = { /* for ASCII/Latin1 */ 0xCBA, 0xCBD, 0xCBE, - 0xCDE, + 0xCDD, 0xCDF, 0xCE0, 0xCE2, @@ -182536,10 +186907,8 @@ static const UV UNI__PERL_IDSTART_invlist[] = { /* for ASCII/Latin1 */ 0x16EE, 0x16F9, 0x1700, - 0x170D, - 0x170E, 0x1712, - 0x1720, + 0x171F, 0x1732, 0x1740, 0x1752, @@ -182580,7 +186949,7 @@ static const UV UNI__PERL_IDSTART_invlist[] = { /* for ASCII/Latin1 */ 0x1B05, 0x1B34, 0x1B45, - 0x1B4C, + 0x1B4D, 0x1B83, 0x1BA1, 0x1BAE, @@ -182682,10 +187051,6 @@ static const UV UNI__PERL_IDSTART_invlist[] = { /* for ASCII/Latin1 */ 0x2160, 0x2189, 0x2C00, - 0x2C2F, - 0x2C30, - 0x2C5F, - 0x2C60, 0x2CE5, 0x2CEB, 0x2CEF, @@ -182746,8 +187111,6 @@ static const UV UNI__PERL_IDSTART_invlist[] = { /* for ASCII/Latin1 */ 0x3400, 0x4DC0, 0x4E00, - 0x9FFD, - 0xA000, 0xA48D, 0xA4D0, 0xA4FE, @@ -182768,10 +187131,14 @@ static const UV UNI__PERL_IDSTART_invlist[] = { /* for ASCII/Latin1 */ 0xA722, 0xA789, 0xA78B, - 0xA7C0, - 0xA7C2, 0xA7CB, - 0xA7F5, + 0xA7D0, + 0xA7D2, + 0xA7D3, + 0xA7D4, + 0xA7D5, + 0xA7DA, + 0xA7F2, 0xA802, 0xA803, 0xA806, @@ -182963,12 +187330,34 @@ static const UV UNI__PERL_IDSTART_invlist[] = { /* for ASCII/Latin1 */ 0x10528, 0x10530, 0x10564, + 0x10570, + 0x1057B, + 0x1057C, + 0x1058B, + 0x1058C, + 0x10593, + 0x10594, + 0x10596, + 0x10597, + 0x105A2, + 0x105A3, + 0x105B2, + 0x105B3, + 0x105BA, + 0x105BB, + 0x105BD, 0x10600, 0x10737, 0x10740, 0x10756, 0x10760, 0x10768, + 0x10780, + 0x10786, + 0x10787, + 0x107B1, + 0x107B2, + 0x107BB, 0x10800, 0x10806, 0x10808, @@ -183039,12 +187428,18 @@ static const UV UNI__PERL_IDSTART_invlist[] = { /* for ASCII/Latin1 */ 0x10F28, 0x10F30, 0x10F46, + 0x10F70, + 0x10F82, 0x10FB0, 0x10FC5, 0x10FE0, 0x10FF7, 0x11003, 0x11038, + 0x11071, + 0x11073, + 0x11075, + 0x11076, 0x11083, 0x110B0, 0x110D0, @@ -183127,6 +187522,8 @@ static const UV UNI__PERL_IDSTART_invlist[] = { /* for ASCII/Latin1 */ 0x116B9, 0x11700, 0x1171B, + 0x11740, + 0x11747, 0x11800, 0x1182C, 0x118A0, @@ -183165,7 +187562,7 @@ static const UV UNI__PERL_IDSTART_invlist[] = { /* for ASCII/Latin1 */ 0x11A8A, 0x11A9D, 0x11A9E, - 0x11AC0, + 0x11AB0, 0x11AF9, 0x11C00, 0x11C09, @@ -183201,6 +187598,8 @@ static const UV UNI__PERL_IDSTART_invlist[] = { /* for ASCII/Latin1 */ 0x1246F, 0x12480, 0x12544, + 0x12F90, + 0x12FF1, 0x13000, 0x1342F, 0x14400, @@ -183209,6 +187608,8 @@ static const UV UNI__PERL_IDSTART_invlist[] = { /* for ASCII/Latin1 */ 0x16A39, 0x16A40, 0x16A5F, + 0x16A70, + 0x16ABF, 0x16AD0, 0x16AEE, 0x16B00, @@ -183237,8 +187638,14 @@ static const UV UNI__PERL_IDSTART_invlist[] = { /* for ASCII/Latin1 */ 0x18CD6, 0x18D00, 0x18D09, + 0x1AFF0, + 0x1AFF4, + 0x1AFF5, + 0x1AFFC, + 0x1AFFD, + 0x1AFFF, 0x1B000, - 0x1B11F, + 0x1B123, 0x1B150, 0x1B153, 0x1B164, @@ -183313,14 +187720,26 @@ static const UV UNI__PERL_IDSTART_invlist[] = { /* for ASCII/Latin1 */ 0x1D7C3, 0x1D7C4, 0x1D7CC, + 0x1DF00, + 0x1DF1F, 0x1E100, 0x1E12D, 0x1E137, 0x1E13E, 0x1E14E, 0x1E14F, + 0x1E290, + 0x1E2AE, 0x1E2C0, 0x1E2EC, + 0x1E7E0, + 0x1E7E7, + 0x1E7E8, + 0x1E7EC, + 0x1E7ED, + 0x1E7EF, + 0x1E7F0, + 0x1E7FF, 0x1E800, 0x1E8C5, 0x1E900, @@ -183394,9 +187813,9 @@ static const UV UNI__PERL_IDSTART_invlist[] = { /* for ASCII/Latin1 */ 0x1EEAB, 0x1EEBC, 0x20000, - 0x2A6DE, + 0x2A6E0, 0x2A700, - 0x2B735, + 0x2B739, 0x2B740, 0x2B81E, 0x2B820, @@ -183417,7 +187836,7 @@ static const UV UNI__PERL_IDSTART_invlist[] = { /* for ASCII/Latin1 */ && '$' == 91 && '@' == 124 && '`' == 121 && '\n' == 21 static const UV UNI__PERL_IDSTART_invlist[] = { /* for EBCDIC 1047 */ - 1289, /* Number of elements */ + 1341, /* Number of elements */ 148565664, /* Version and data structure type */ 1, /* 0 if the list starts at 0; 1 if it starts at the element beyond 0 */ @@ -183548,10 +187967,12 @@ static const UV UNI__PERL_IDSTART_invlist[] = { /* for EBCDIC 1047 */ 0x859, 0x860, 0x86B, + 0x870, + 0x888, + 0x889, + 0x88F, 0x8A0, - 0x8B5, - 0x8B6, - 0x8C8, + 0x8CA, 0x904, 0x93A, 0x93D, @@ -183680,6 +188101,8 @@ static const UV UNI__PERL_IDSTART_invlist[] = { /* for EBCDIC 1047 */ 0xC3E, 0xC58, 0xC5B, + 0xC5D, + 0xC5E, 0xC60, 0xC62, 0xC80, @@ -183696,7 +188119,7 @@ static const UV UNI__PERL_IDSTART_invlist[] = { /* for EBCDIC 1047 */ 0xCBA, 0xCBD, 0xCBE, - 0xCDE, + 0xCDD, 0xCDF, 0xCE0, 0xCE2, @@ -183839,10 +188262,8 @@ static const UV UNI__PERL_IDSTART_invlist[] = { /* for EBCDIC 1047 */ 0x16EE, 0x16F9, 0x1700, - 0x170D, - 0x170E, 0x1712, - 0x1720, + 0x171F, 0x1732, 0x1740, 0x1752, @@ -183883,7 +188304,7 @@ static const UV UNI__PERL_IDSTART_invlist[] = { /* for EBCDIC 1047 */ 0x1B05, 0x1B34, 0x1B45, - 0x1B4C, + 0x1B4D, 0x1B83, 0x1BA1, 0x1BAE, @@ -183985,10 +188406,6 @@ static const UV UNI__PERL_IDSTART_invlist[] = { /* for EBCDIC 1047 */ 0x2160, 0x2189, 0x2C00, - 0x2C2F, - 0x2C30, - 0x2C5F, - 0x2C60, 0x2CE5, 0x2CEB, 0x2CEF, @@ -184049,8 +188466,6 @@ static const UV UNI__PERL_IDSTART_invlist[] = { /* for EBCDIC 1047 */ 0x3400, 0x4DC0, 0x4E00, - 0x9FFD, - 0xA000, 0xA48D, 0xA4D0, 0xA4FE, @@ -184071,10 +188486,14 @@ static const UV UNI__PERL_IDSTART_invlist[] = { /* for EBCDIC 1047 */ 0xA722, 0xA789, 0xA78B, - 0xA7C0, - 0xA7C2, 0xA7CB, - 0xA7F5, + 0xA7D0, + 0xA7D2, + 0xA7D3, + 0xA7D4, + 0xA7D5, + 0xA7DA, + 0xA7F2, 0xA802, 0xA803, 0xA806, @@ -184266,12 +188685,34 @@ static const UV UNI__PERL_IDSTART_invlist[] = { /* for EBCDIC 1047 */ 0x10528, 0x10530, 0x10564, + 0x10570, + 0x1057B, + 0x1057C, + 0x1058B, + 0x1058C, + 0x10593, + 0x10594, + 0x10596, + 0x10597, + 0x105A2, + 0x105A3, + 0x105B2, + 0x105B3, + 0x105BA, + 0x105BB, + 0x105BD, 0x10600, 0x10737, 0x10740, 0x10756, 0x10760, 0x10768, + 0x10780, + 0x10786, + 0x10787, + 0x107B1, + 0x107B2, + 0x107BB, 0x10800, 0x10806, 0x10808, @@ -184342,12 +188783,18 @@ static const UV UNI__PERL_IDSTART_invlist[] = { /* for EBCDIC 1047 */ 0x10F28, 0x10F30, 0x10F46, + 0x10F70, + 0x10F82, 0x10FB0, 0x10FC5, 0x10FE0, 0x10FF7, 0x11003, 0x11038, + 0x11071, + 0x11073, + 0x11075, + 0x11076, 0x11083, 0x110B0, 0x110D0, @@ -184430,6 +188877,8 @@ static const UV UNI__PERL_IDSTART_invlist[] = { /* for EBCDIC 1047 */ 0x116B9, 0x11700, 0x1171B, + 0x11740, + 0x11747, 0x11800, 0x1182C, 0x118A0, @@ -184468,7 +188917,7 @@ static const UV UNI__PERL_IDSTART_invlist[] = { /* for EBCDIC 1047 */ 0x11A8A, 0x11A9D, 0x11A9E, - 0x11AC0, + 0x11AB0, 0x11AF9, 0x11C00, 0x11C09, @@ -184504,6 +188953,8 @@ static const UV UNI__PERL_IDSTART_invlist[] = { /* for EBCDIC 1047 */ 0x1246F, 0x12480, 0x12544, + 0x12F90, + 0x12FF1, 0x13000, 0x1342F, 0x14400, @@ -184512,6 +188963,8 @@ static const UV UNI__PERL_IDSTART_invlist[] = { /* for EBCDIC 1047 */ 0x16A39, 0x16A40, 0x16A5F, + 0x16A70, + 0x16ABF, 0x16AD0, 0x16AEE, 0x16B00, @@ -184540,8 +188993,14 @@ static const UV UNI__PERL_IDSTART_invlist[] = { /* for EBCDIC 1047 */ 0x18CD6, 0x18D00, 0x18D09, + 0x1AFF0, + 0x1AFF4, + 0x1AFF5, + 0x1AFFC, + 0x1AFFD, + 0x1AFFF, 0x1B000, - 0x1B11F, + 0x1B123, 0x1B150, 0x1B153, 0x1B164, @@ -184616,14 +189075,26 @@ static const UV UNI__PERL_IDSTART_invlist[] = { /* for EBCDIC 1047 */ 0x1D7C3, 0x1D7C4, 0x1D7CC, + 0x1DF00, + 0x1DF1F, 0x1E100, 0x1E12D, 0x1E137, 0x1E13E, 0x1E14E, 0x1E14F, + 0x1E290, + 0x1E2AE, 0x1E2C0, 0x1E2EC, + 0x1E7E0, + 0x1E7E7, + 0x1E7E8, + 0x1E7EC, + 0x1E7ED, + 0x1E7EF, + 0x1E7F0, + 0x1E7FF, 0x1E800, 0x1E8C5, 0x1E900, @@ -184697,9 +189168,9 @@ static const UV UNI__PERL_IDSTART_invlist[] = { /* for EBCDIC 1047 */ 0x1EEAB, 0x1EEBC, 0x20000, - 0x2A6DE, + 0x2A6E0, 0x2A700, - 0x2B735, + 0x2B739, 0x2B740, 0x2B81E, 0x2B820, @@ -184720,7 +189191,7 @@ static const UV UNI__PERL_IDSTART_invlist[] = { /* for EBCDIC 1047 */ && '$' == 91 && '@' == 124 && '`' == 121 && '\n' == 37 static const UV UNI__PERL_IDSTART_invlist[] = { /* for EBCDIC 037 */ - 1285, /* Number of elements */ + 1337, /* Number of elements */ 148565664, /* Version and data structure type */ 1, /* 0 if the list starts at 0; 1 if it starts at the element beyond 0 */ @@ -184847,10 +189318,12 @@ static const UV UNI__PERL_IDSTART_invlist[] = { /* for EBCDIC 037 */ 0x859, 0x860, 0x86B, + 0x870, + 0x888, + 0x889, + 0x88F, 0x8A0, - 0x8B5, - 0x8B6, - 0x8C8, + 0x8CA, 0x904, 0x93A, 0x93D, @@ -184979,6 +189452,8 @@ static const UV UNI__PERL_IDSTART_invlist[] = { /* for EBCDIC 037 */ 0xC3E, 0xC58, 0xC5B, + 0xC5D, + 0xC5E, 0xC60, 0xC62, 0xC80, @@ -184995,7 +189470,7 @@ static const UV UNI__PERL_IDSTART_invlist[] = { /* for EBCDIC 037 */ 0xCBA, 0xCBD, 0xCBE, - 0xCDE, + 0xCDD, 0xCDF, 0xCE0, 0xCE2, @@ -185138,10 +189613,8 @@ static const UV UNI__PERL_IDSTART_invlist[] = { /* for EBCDIC 037 */ 0x16EE, 0x16F9, 0x1700, - 0x170D, - 0x170E, 0x1712, - 0x1720, + 0x171F, 0x1732, 0x1740, 0x1752, @@ -185182,7 +189655,7 @@ static const UV UNI__PERL_IDSTART_invlist[] = { /* for EBCDIC 037 */ 0x1B05, 0x1B34, 0x1B45, - 0x1B4C, + 0x1B4D, 0x1B83, 0x1BA1, 0x1BAE, @@ -185284,10 +189757,6 @@ static const UV UNI__PERL_IDSTART_invlist[] = { /* for EBCDIC 037 */ 0x2160, 0x2189, 0x2C00, - 0x2C2F, - 0x2C30, - 0x2C5F, - 0x2C60, 0x2CE5, 0x2CEB, 0x2CEF, @@ -185348,8 +189817,6 @@ static const UV UNI__PERL_IDSTART_invlist[] = { /* for EBCDIC 037 */ 0x3400, 0x4DC0, 0x4E00, - 0x9FFD, - 0xA000, 0xA48D, 0xA4D0, 0xA4FE, @@ -185370,10 +189837,14 @@ static const UV UNI__PERL_IDSTART_invlist[] = { /* for EBCDIC 037 */ 0xA722, 0xA789, 0xA78B, - 0xA7C0, - 0xA7C2, 0xA7CB, - 0xA7F5, + 0xA7D0, + 0xA7D2, + 0xA7D3, + 0xA7D4, + 0xA7D5, + 0xA7DA, + 0xA7F2, 0xA802, 0xA803, 0xA806, @@ -185565,12 +190036,34 @@ static const UV UNI__PERL_IDSTART_invlist[] = { /* for EBCDIC 037 */ 0x10528, 0x10530, 0x10564, + 0x10570, + 0x1057B, + 0x1057C, + 0x1058B, + 0x1058C, + 0x10593, + 0x10594, + 0x10596, + 0x10597, + 0x105A2, + 0x105A3, + 0x105B2, + 0x105B3, + 0x105BA, + 0x105BB, + 0x105BD, 0x10600, 0x10737, 0x10740, 0x10756, 0x10760, 0x10768, + 0x10780, + 0x10786, + 0x10787, + 0x107B1, + 0x107B2, + 0x107BB, 0x10800, 0x10806, 0x10808, @@ -185641,12 +190134,18 @@ static const UV UNI__PERL_IDSTART_invlist[] = { /* for EBCDIC 037 */ 0x10F28, 0x10F30, 0x10F46, + 0x10F70, + 0x10F82, 0x10FB0, 0x10FC5, 0x10FE0, 0x10FF7, 0x11003, 0x11038, + 0x11071, + 0x11073, + 0x11075, + 0x11076, 0x11083, 0x110B0, 0x110D0, @@ -185729,6 +190228,8 @@ static const UV UNI__PERL_IDSTART_invlist[] = { /* for EBCDIC 037 */ 0x116B9, 0x11700, 0x1171B, + 0x11740, + 0x11747, 0x11800, 0x1182C, 0x118A0, @@ -185767,7 +190268,7 @@ static const UV UNI__PERL_IDSTART_invlist[] = { /* for EBCDIC 037 */ 0x11A8A, 0x11A9D, 0x11A9E, - 0x11AC0, + 0x11AB0, 0x11AF9, 0x11C00, 0x11C09, @@ -185803,6 +190304,8 @@ static const UV UNI__PERL_IDSTART_invlist[] = { /* for EBCDIC 037 */ 0x1246F, 0x12480, 0x12544, + 0x12F90, + 0x12FF1, 0x13000, 0x1342F, 0x14400, @@ -185811,6 +190314,8 @@ static const UV UNI__PERL_IDSTART_invlist[] = { /* for EBCDIC 037 */ 0x16A39, 0x16A40, 0x16A5F, + 0x16A70, + 0x16ABF, 0x16AD0, 0x16AEE, 0x16B00, @@ -185839,8 +190344,14 @@ static const UV UNI__PERL_IDSTART_invlist[] = { /* for EBCDIC 037 */ 0x18CD6, 0x18D00, 0x18D09, + 0x1AFF0, + 0x1AFF4, + 0x1AFF5, + 0x1AFFC, + 0x1AFFD, + 0x1AFFF, 0x1B000, - 0x1B11F, + 0x1B123, 0x1B150, 0x1B153, 0x1B164, @@ -185915,14 +190426,26 @@ static const UV UNI__PERL_IDSTART_invlist[] = { /* for EBCDIC 037 */ 0x1D7C3, 0x1D7C4, 0x1D7CC, + 0x1DF00, + 0x1DF1F, 0x1E100, 0x1E12D, 0x1E137, 0x1E13E, 0x1E14E, 0x1E14F, + 0x1E290, + 0x1E2AE, 0x1E2C0, 0x1E2EC, + 0x1E7E0, + 0x1E7E7, + 0x1E7E8, + 0x1E7EC, + 0x1E7ED, + 0x1E7EF, + 0x1E7F0, + 0x1E7FF, 0x1E800, 0x1E8C5, 0x1E900, @@ -185996,9 +190519,9 @@ static const UV UNI__PERL_IDSTART_invlist[] = { /* for EBCDIC 037 */ 0x1EEAB, 0x1EEBC, 0x20000, - 0x2A6DE, + 0x2A6E0, 0x2A700, - 0x2B735, + 0x2B739, 0x2B740, 0x2B81E, 0x2B820, @@ -186403,7 +190926,7 @@ static const UV UNI__PERL_QUOTEMETA_invlist[] = { /* for ASCII/Latin1 */ 0x17B4, 0x17B6, 0x180B, - 0x180F, + 0x1810, 0x2000, 0x203F, 0x2041, @@ -186509,7 +191032,7 @@ static const UV UNI__PERL_QUOTEMETA_invlist[] = { /* for EBCDIC 1047 */ 0x17B4, 0x17B6, 0x180B, - 0x180F, + 0x1810, 0x2000, 0x203F, 0x2041, @@ -186613,7 +191136,7 @@ static const UV UNI__PERL_QUOTEMETA_invlist[] = { /* for EBCDIC 037 */ 0x17B4, 0x17B6, 0x180B, - 0x180F, + 0x1810, 0x2000, 0x203F, 0x2041, @@ -186659,11 +191182,13 @@ static const UV UNI__PERL_QUOTEMETA_invlist[] = { /* for EBCDIC 037 */ # endif /* EBCDIC 037 */ static const UV UNI_ADLM_invlist[] = { /* for all charsets */ - 9, /* Number of elements */ + 11, /* Number of elements */ 148565664, /* Version and data structure type */ 1, /* 0 if the list starts at 0; 1 if it starts at the element beyond 0 */ 0x0, + 0x61F, + 0x620, 0x640, 0x641, 0x1E900, @@ -187162,6 +191687,170 @@ static const UV UNI_AGE__13_invlist[] = { /* for all charsets */ 0x3134B }; +static const UV UNI_AGE__14_invlist[] = { /* for all charsets */ + 157, /* Number of elements */ + 148565664, /* Version and data structure type */ + 1, /* 0 if the list starts at 0; + 1 if it starts at the element beyond 0 */ + 0x0, + 0x61D, + 0x61E, + 0x870, + 0x88F, + 0x890, + 0x892, + 0x898, + 0x8A0, + 0x8B5, + 0x8B6, + 0x8C8, + 0x8D3, + 0xC3C, + 0xC3D, + 0xC5D, + 0xC5E, + 0xCDD, + 0xCDE, + 0x170D, + 0x170E, + 0x1715, + 0x1716, + 0x171F, + 0x1720, + 0x180F, + 0x1810, + 0x1AC1, + 0x1ACF, + 0x1B4C, + 0x1B4D, + 0x1B7D, + 0x1B7F, + 0x1DFA, + 0x1DFB, + 0x20C0, + 0x20C1, + 0x2C2F, + 0x2C30, + 0x2C5F, + 0x2C60, + 0x2E53, + 0x2E5E, + 0x9FFD, + 0xA000, + 0xA7C0, + 0xA7C2, + 0xA7D0, + 0xA7D2, + 0xA7D3, + 0xA7D4, + 0xA7D5, + 0xA7DA, + 0xA7F2, + 0xA7F5, + 0xFBC2, + 0xFBC3, + 0xFD40, + 0xFD50, + 0xFDCF, + 0xFDD0, + 0xFDFE, + 0xFE00, + 0x10570, + 0x1057B, + 0x1057C, + 0x1058B, + 0x1058C, + 0x10593, + 0x10594, + 0x10596, + 0x10597, + 0x105A2, + 0x105A3, + 0x105B2, + 0x105B3, + 0x105BA, + 0x105BB, + 0x105BD, + 0x10780, + 0x10786, + 0x10787, + 0x107B1, + 0x107B2, + 0x107BB, + 0x10F70, + 0x10F8A, + 0x11070, + 0x11076, + 0x110C2, + 0x110C3, + 0x116B9, + 0x116BA, + 0x11740, + 0x11747, + 0x11AB0, + 0x11AC0, + 0x12F90, + 0x12FF3, + 0x16A70, + 0x16ABF, + 0x16AC0, + 0x16ACA, + 0x1AFF0, + 0x1AFF4, + 0x1AFF5, + 0x1AFFC, + 0x1AFFD, + 0x1AFFF, + 0x1B11F, + 0x1B123, + 0x1CF00, + 0x1CF2E, + 0x1CF30, + 0x1CF47, + 0x1CF50, + 0x1CFC4, + 0x1D1E9, + 0x1D1EB, + 0x1DF00, + 0x1DF1F, + 0x1E290, + 0x1E2AF, + 0x1E7E0, + 0x1E7E7, + 0x1E7E8, + 0x1E7EC, + 0x1E7ED, + 0x1E7EF, + 0x1E7F0, + 0x1E7FF, + 0x1F6DD, + 0x1F6E0, + 0x1F7F0, + 0x1F7F1, + 0x1F979, + 0x1F97A, + 0x1F9CC, + 0x1F9CD, + 0x1FA7B, + 0x1FA7D, + 0x1FAA9, + 0x1FAAD, + 0x1FAB7, + 0x1FABB, + 0x1FAC3, + 0x1FAC6, + 0x1FAD7, + 0x1FADA, + 0x1FAE0, + 0x1FAE8, + 0x1FAF0, + 0x1FAF7, + 0x2A6DE, + 0x2A6E0, + 0x2B735, + 0x2B739 +}; + static const UV UNI_AGE__2_invlist[] = { /* for all charsets */ 59, /* Number of elements */ 148565664, /* Version and data structure type */ @@ -189446,1195 +194135,139 @@ static const UV UNI_AGE__9_invlist[] = { /* for all charsets */ 0x1F992 }; -static const UV UNI_AGE__NA_invlist[] = { /* for all charsets */ - 1372, /* Number of elements */ +static const UV UNI_AGHB_invlist[] = { /* for all charsets */ + 5, /* Number of elements */ + 148565664, /* Version and data structure type */ + 1, /* 0 if the list starts at 0; + 1 if it starts at the element beyond 0 */ + 0x0, + 0x10530, + 0x10564, + 0x1056F, + 0x10570 +}; + +static const UV UNI_AHOM_invlist[] = { /* for all charsets */ + 7, /* Number of elements */ + 148565664, /* Version and data structure type */ + 1, /* 0 if the list starts at 0; + 1 if it starts at the element beyond 0 */ + 0x0, + 0x11700, + 0x1171B, + 0x1171D, + 0x1172C, + 0x11730, + 0x11747 +}; + +static const UV UNI_ALCHEMICAL_invlist[] = { /* for all charsets */ + 3, /* Number of elements */ + 148565664, /* Version and data structure type */ + 1, /* 0 if the list starts at 0; + 1 if it starts at the element beyond 0 */ + 0x0, + 0x1F700, + 0x1F780 +}; + +static const UV UNI_ALL_invlist[] = { /* for all charsets */ + 1, /* Number of elements */ + 148565664, /* Version and data structure type */ + 0, /* 0 if the list starts at 0; + 1 if it starts at the element beyond 0 */ + 0x0 +}; + +static const UV UNI_ALPHABETICPF_invlist[] = { /* for all charsets */ + 3, /* Number of elements */ 148565664, /* Version and data structure type */ 1, /* 0 if the list starts at 0; 1 if it starts at the element beyond 0 */ 0x0, - 0x378, - 0x37A, - 0x380, - 0x384, - 0x38B, - 0x38C, - 0x38D, - 0x38E, - 0x3A2, - 0x3A3, - 0x530, - 0x531, - 0x557, - 0x559, - 0x58B, - 0x58D, - 0x590, - 0x591, - 0x5C8, - 0x5D0, - 0x5EB, - 0x5EF, - 0x5F5, - 0x600, - 0x61D, - 0x61E, - 0x70E, - 0x70F, - 0x74B, - 0x74D, - 0x7B2, - 0x7C0, - 0x7FB, - 0x7FD, - 0x82E, - 0x830, - 0x83F, - 0x840, - 0x85C, - 0x85E, - 0x85F, - 0x860, - 0x86B, - 0x8A0, - 0x8B5, - 0x8B6, - 0x8C8, - 0x8D3, - 0x984, - 0x985, - 0x98D, - 0x98F, - 0x991, - 0x993, - 0x9A9, - 0x9AA, - 0x9B1, - 0x9B2, - 0x9B3, - 0x9B6, - 0x9BA, - 0x9BC, - 0x9C5, - 0x9C7, - 0x9C9, - 0x9CB, - 0x9CF, - 0x9D7, - 0x9D8, - 0x9DC, - 0x9DE, - 0x9DF, - 0x9E4, - 0x9E6, - 0x9FF, - 0xA01, - 0xA04, - 0xA05, - 0xA0B, - 0xA0F, - 0xA11, - 0xA13, - 0xA29, - 0xA2A, - 0xA31, - 0xA32, - 0xA34, - 0xA35, - 0xA37, - 0xA38, - 0xA3A, - 0xA3C, - 0xA3D, - 0xA3E, - 0xA43, - 0xA47, - 0xA49, - 0xA4B, - 0xA4E, - 0xA51, - 0xA52, - 0xA59, - 0xA5D, - 0xA5E, - 0xA5F, - 0xA66, - 0xA77, - 0xA81, - 0xA84, - 0xA85, - 0xA8E, - 0xA8F, - 0xA92, - 0xA93, - 0xAA9, - 0xAAA, - 0xAB1, - 0xAB2, - 0xAB4, - 0xAB5, - 0xABA, - 0xABC, - 0xAC6, - 0xAC7, - 0xACA, - 0xACB, - 0xACE, - 0xAD0, - 0xAD1, - 0xAE0, - 0xAE4, - 0xAE6, - 0xAF2, - 0xAF9, - 0xB00, - 0xB01, - 0xB04, - 0xB05, - 0xB0D, - 0xB0F, - 0xB11, - 0xB13, - 0xB29, - 0xB2A, - 0xB31, - 0xB32, - 0xB34, - 0xB35, - 0xB3A, - 0xB3C, - 0xB45, - 0xB47, - 0xB49, - 0xB4B, - 0xB4E, - 0xB55, - 0xB58, - 0xB5C, - 0xB5E, - 0xB5F, - 0xB64, - 0xB66, - 0xB78, - 0xB82, - 0xB84, - 0xB85, - 0xB8B, - 0xB8E, - 0xB91, - 0xB92, - 0xB96, - 0xB99, - 0xB9B, - 0xB9C, - 0xB9D, - 0xB9E, - 0xBA0, - 0xBA3, - 0xBA5, - 0xBA8, - 0xBAB, - 0xBAE, - 0xBBA, - 0xBBE, - 0xBC3, - 0xBC6, - 0xBC9, - 0xBCA, - 0xBCE, - 0xBD0, - 0xBD1, - 0xBD7, - 0xBD8, - 0xBE6, - 0xBFB, - 0xC00, - 0xC0D, - 0xC0E, - 0xC11, - 0xC12, - 0xC29, - 0xC2A, - 0xC3A, - 0xC3D, - 0xC45, - 0xC46, - 0xC49, - 0xC4A, - 0xC4E, - 0xC55, - 0xC57, - 0xC58, - 0xC5B, - 0xC60, - 0xC64, - 0xC66, - 0xC70, - 0xC77, - 0xC8D, - 0xC8E, - 0xC91, - 0xC92, - 0xCA9, - 0xCAA, - 0xCB4, - 0xCB5, - 0xCBA, - 0xCBC, - 0xCC5, - 0xCC6, - 0xCC9, - 0xCCA, - 0xCCE, - 0xCD5, - 0xCD7, - 0xCDE, - 0xCDF, - 0xCE0, - 0xCE4, - 0xCE6, - 0xCF0, - 0xCF1, - 0xCF3, - 0xD00, - 0xD0D, - 0xD0E, - 0xD11, - 0xD12, - 0xD45, - 0xD46, - 0xD49, - 0xD4A, - 0xD50, - 0xD54, - 0xD64, - 0xD66, - 0xD80, - 0xD81, - 0xD84, - 0xD85, - 0xD97, - 0xD9A, - 0xDB2, - 0xDB3, - 0xDBC, - 0xDBD, - 0xDBE, - 0xDC0, - 0xDC7, - 0xDCA, - 0xDCB, - 0xDCF, - 0xDD5, - 0xDD6, - 0xDD7, - 0xDD8, - 0xDE0, - 0xDE6, - 0xDF0, - 0xDF2, - 0xDF5, - 0xE01, - 0xE3B, - 0xE3F, - 0xE5C, - 0xE81, - 0xE83, - 0xE84, - 0xE85, - 0xE86, - 0xE8B, - 0xE8C, - 0xEA4, - 0xEA5, - 0xEA6, - 0xEA7, - 0xEBE, - 0xEC0, - 0xEC5, - 0xEC6, - 0xEC7, - 0xEC8, - 0xECE, - 0xED0, - 0xEDA, - 0xEDC, - 0xEE0, - 0xF00, - 0xF48, - 0xF49, - 0xF6D, - 0xF71, - 0xF98, - 0xF99, - 0xFBD, - 0xFBE, - 0xFCD, - 0xFCE, - 0xFDB, - 0x1000, - 0x10C6, - 0x10C7, - 0x10C8, - 0x10CD, - 0x10CE, - 0x10D0, - 0x1249, - 0x124A, - 0x124E, - 0x1250, - 0x1257, - 0x1258, - 0x1259, - 0x125A, - 0x125E, - 0x1260, - 0x1289, - 0x128A, - 0x128E, - 0x1290, - 0x12B1, - 0x12B2, - 0x12B6, - 0x12B8, - 0x12BF, - 0x12C0, - 0x12C1, - 0x12C2, - 0x12C6, - 0x12C8, - 0x12D7, - 0x12D8, - 0x1311, - 0x1312, - 0x1316, - 0x1318, - 0x135B, - 0x135D, - 0x137D, - 0x1380, - 0x139A, - 0x13A0, - 0x13F6, - 0x13F8, - 0x13FE, - 0x1400, - 0x169D, - 0x16A0, - 0x16F9, - 0x1700, - 0x170D, - 0x170E, - 0x1715, - 0x1720, - 0x1737, - 0x1740, - 0x1754, - 0x1760, - 0x176D, - 0x176E, - 0x1771, - 0x1772, - 0x1774, - 0x1780, - 0x17DE, - 0x17E0, - 0x17EA, - 0x17F0, - 0x17FA, - 0x1800, - 0x180F, - 0x1810, - 0x181A, - 0x1820, - 0x1879, - 0x1880, - 0x18AB, - 0x18B0, - 0x18F6, - 0x1900, - 0x191F, - 0x1920, - 0x192C, - 0x1930, - 0x193C, - 0x1940, - 0x1941, - 0x1944, - 0x196E, - 0x1970, - 0x1975, - 0x1980, - 0x19AC, - 0x19B0, - 0x19CA, - 0x19D0, - 0x19DB, - 0x19DE, - 0x1A1C, - 0x1A1E, - 0x1A5F, - 0x1A60, - 0x1A7D, - 0x1A7F, - 0x1A8A, - 0x1A90, - 0x1A9A, - 0x1AA0, - 0x1AAE, - 0x1AB0, - 0x1AC1, - 0x1B00, - 0x1B4C, - 0x1B50, - 0x1B7D, - 0x1B80, - 0x1BF4, - 0x1BFC, - 0x1C38, - 0x1C3B, - 0x1C4A, - 0x1C4D, - 0x1C89, - 0x1C90, - 0x1CBB, - 0x1CBD, - 0x1CC8, - 0x1CD0, - 0x1CFB, - 0x1D00, - 0x1DFA, - 0x1DFB, - 0x1F16, - 0x1F18, - 0x1F1E, - 0x1F20, - 0x1F46, - 0x1F48, - 0x1F4E, - 0x1F50, - 0x1F58, - 0x1F59, - 0x1F5A, - 0x1F5B, - 0x1F5C, - 0x1F5D, - 0x1F5E, - 0x1F5F, - 0x1F7E, - 0x1F80, - 0x1FB5, - 0x1FB6, - 0x1FC5, - 0x1FC6, - 0x1FD4, - 0x1FD6, - 0x1FDC, - 0x1FDD, - 0x1FF0, - 0x1FF2, - 0x1FF5, - 0x1FF6, - 0x1FFF, - 0x2000, - 0x2065, - 0x2066, - 0x2072, - 0x2074, - 0x208F, - 0x2090, - 0x209D, - 0x20A0, - 0x20C0, - 0x20D0, - 0x20F1, - 0x2100, - 0x218C, - 0x2190, - 0x2427, - 0x2440, - 0x244B, - 0x2460, - 0x2B74, - 0x2B76, - 0x2B96, - 0x2B97, - 0x2C2F, - 0x2C30, - 0x2C5F, - 0x2C60, - 0x2CF4, - 0x2CF9, - 0x2D26, - 0x2D27, - 0x2D28, - 0x2D2D, - 0x2D2E, - 0x2D30, - 0x2D68, - 0x2D6F, - 0x2D71, - 0x2D7F, - 0x2D97, - 0x2DA0, - 0x2DA7, - 0x2DA8, - 0x2DAF, - 0x2DB0, - 0x2DB7, - 0x2DB8, - 0x2DBF, - 0x2DC0, - 0x2DC7, - 0x2DC8, - 0x2DCF, - 0x2DD0, - 0x2DD7, - 0x2DD8, - 0x2DDF, - 0x2DE0, - 0x2E53, - 0x2E80, - 0x2E9A, - 0x2E9B, - 0x2EF4, - 0x2F00, - 0x2FD6, - 0x2FF0, - 0x2FFC, - 0x3000, - 0x3040, - 0x3041, - 0x3097, - 0x3099, - 0x3100, - 0x3105, - 0x3130, - 0x3131, - 0x318F, - 0x3190, - 0x31E4, - 0x31F0, - 0x321F, - 0x3220, - 0x9FFD, - 0xA000, - 0xA48D, - 0xA490, - 0xA4C7, - 0xA4D0, - 0xA62C, - 0xA640, - 0xA6F8, - 0xA700, - 0xA7C0, - 0xA7C2, - 0xA7CB, - 0xA7F5, - 0xA82D, - 0xA830, - 0xA83A, - 0xA840, - 0xA878, - 0xA880, - 0xA8C6, - 0xA8CE, - 0xA8DA, - 0xA8E0, - 0xA954, - 0xA95F, - 0xA97D, - 0xA980, - 0xA9CE, - 0xA9CF, - 0xA9DA, - 0xA9DE, - 0xA9FF, - 0xAA00, - 0xAA37, - 0xAA40, - 0xAA4E, - 0xAA50, - 0xAA5A, - 0xAA5C, - 0xAAC3, - 0xAADB, - 0xAAF7, - 0xAB01, - 0xAB07, - 0xAB09, - 0xAB0F, - 0xAB11, - 0xAB17, - 0xAB20, - 0xAB27, - 0xAB28, - 0xAB2F, - 0xAB30, - 0xAB6C, - 0xAB70, - 0xABEE, - 0xABF0, - 0xABFA, - 0xAC00, - 0xD7A4, - 0xD7B0, - 0xD7C7, - 0xD7CB, - 0xD7FC, - 0xD800, - 0xFA6E, - 0xFA70, - 0xFADA, 0xFB00, - 0xFB07, - 0xFB13, - 0xFB18, - 0xFB1D, - 0xFB37, - 0xFB38, - 0xFB3D, - 0xFB3E, - 0xFB3F, - 0xFB40, - 0xFB42, - 0xFB43, - 0xFB45, - 0xFB46, - 0xFBC2, + 0xFB50 +}; + +static const UV UNI_ANCIENTGREEKMUSIC_invlist[] = { /* for all charsets */ + 3, /* Number of elements */ + 148565664, /* Version and data structure type */ + 1, /* 0 if the list starts at 0; + 1 if it starts at the element beyond 0 */ + 0x0, + 0x1D200, + 0x1D250 +}; + +static const UV UNI_ANCIENTGREEKNUMBERS_invlist[] = { /* for all charsets */ + 3, /* Number of elements */ + 148565664, /* Version and data structure type */ + 1, /* 0 if the list starts at 0; + 1 if it starts at the element beyond 0 */ + 0x0, + 0x10140, + 0x10190 +}; + +static const UV UNI_ANCIENTSYMBOLS_invlist[] = { /* for all charsets */ + 3, /* Number of elements */ + 148565664, /* Version and data structure type */ + 1, /* 0 if the list starts at 0; + 1 if it starts at the element beyond 0 */ + 0x0, + 0x10190, + 0x101D0 +}; + +static const UV UNI_ANY_invlist[] = { /* for all charsets */ + 2, /* Number of elements */ + 148565664, /* Version and data structure type */ + 0, /* 0 if the list starts at 0; + 1 if it starts at the element beyond 0 */ + 0x0, + 0x110000 +}; + +static const UV UNI_ARAB_invlist[] = { /* for all charsets */ + 103, /* Number of elements */ + 148565664, /* Version and data structure type */ + 1, /* 0 if the list starts at 0; + 1 if it starts at the element beyond 0 */ + 0x0, + 0x600, + 0x605, + 0x606, + 0x6DD, + 0x6DE, + 0x700, + 0x750, + 0x780, + 0x870, + 0x88F, + 0x890, + 0x892, + 0x898, + 0x8E2, + 0x8E3, + 0x900, + 0xFB50, + 0xFBC3, 0xFBD3, - 0xFD40, - 0xFD50, 0xFD90, 0xFD92, 0xFDC8, + 0xFDCF, 0xFDD0, - 0xFDFE, + 0xFDF0, 0xFE00, - 0xFE1A, - 0xFE20, - 0xFE53, - 0xFE54, - 0xFE67, - 0xFE68, - 0xFE6C, 0xFE70, 0xFE75, 0xFE76, 0xFEFD, - 0xFEFF, - 0xFF00, - 0xFF01, - 0xFFBF, - 0xFFC2, - 0xFFC8, - 0xFFCA, - 0xFFD0, - 0xFFD2, - 0xFFD8, - 0xFFDA, - 0xFFDD, - 0xFFE0, - 0xFFE7, - 0xFFE8, - 0xFFEF, - 0xFFF9, - 0x1000C, - 0x1000D, - 0x10027, - 0x10028, - 0x1003B, - 0x1003C, - 0x1003E, - 0x1003F, - 0x1004E, - 0x10050, - 0x1005E, - 0x10080, - 0x100FB, - 0x10100, - 0x10103, - 0x10107, - 0x10134, - 0x10137, - 0x1018F, - 0x10190, - 0x1019D, - 0x101A0, - 0x101A1, - 0x101D0, - 0x101FE, - 0x10280, - 0x1029D, - 0x102A0, - 0x102D1, 0x102E0, 0x102FC, - 0x10300, - 0x10324, - 0x1032D, - 0x1034B, - 0x10350, - 0x1037B, - 0x10380, - 0x1039E, - 0x1039F, - 0x103C4, - 0x103C8, - 0x103D6, - 0x10400, - 0x1049E, - 0x104A0, - 0x104AA, - 0x104B0, - 0x104D4, - 0x104D8, - 0x104FC, - 0x10500, - 0x10528, - 0x10530, - 0x10564, - 0x1056F, - 0x10570, - 0x10600, - 0x10737, - 0x10740, - 0x10756, - 0x10760, - 0x10768, - 0x10800, - 0x10806, - 0x10808, - 0x10809, - 0x1080A, - 0x10836, - 0x10837, - 0x10839, - 0x1083C, - 0x1083D, - 0x1083F, - 0x10856, - 0x10857, - 0x1089F, - 0x108A7, - 0x108B0, - 0x108E0, - 0x108F3, - 0x108F4, - 0x108F6, - 0x108FB, - 0x1091C, - 0x1091F, - 0x1093A, - 0x1093F, - 0x10940, - 0x10980, - 0x109B8, - 0x109BC, - 0x109D0, - 0x109D2, - 0x10A04, - 0x10A05, - 0x10A07, - 0x10A0C, - 0x10A14, - 0x10A15, - 0x10A18, - 0x10A19, - 0x10A36, - 0x10A38, - 0x10A3B, - 0x10A3F, - 0x10A49, - 0x10A50, - 0x10A59, - 0x10A60, - 0x10AA0, - 0x10AC0, - 0x10AE7, - 0x10AEB, - 0x10AF7, - 0x10B00, - 0x10B36, - 0x10B39, - 0x10B56, - 0x10B58, - 0x10B73, - 0x10B78, - 0x10B92, - 0x10B99, - 0x10B9D, - 0x10BA9, - 0x10BB0, - 0x10C00, - 0x10C49, - 0x10C80, - 0x10CB3, - 0x10CC0, - 0x10CF3, - 0x10CFA, - 0x10D28, - 0x10D30, - 0x10D3A, 0x10E60, 0x10E7F, - 0x10E80, - 0x10EAA, - 0x10EAB, - 0x10EAE, - 0x10EB0, - 0x10EB2, - 0x10F00, - 0x10F28, - 0x10F30, - 0x10F5A, - 0x10FB0, - 0x10FCC, - 0x10FE0, - 0x10FF7, - 0x11000, - 0x1104E, - 0x11052, - 0x11070, - 0x1107F, - 0x110C2, - 0x110CD, - 0x110CE, - 0x110D0, - 0x110E9, - 0x110F0, - 0x110FA, - 0x11100, - 0x11135, - 0x11136, - 0x11148, - 0x11150, - 0x11177, - 0x11180, - 0x111E0, - 0x111E1, - 0x111F5, - 0x11200, - 0x11212, - 0x11213, - 0x1123F, - 0x11280, - 0x11287, - 0x11288, - 0x11289, - 0x1128A, - 0x1128E, - 0x1128F, - 0x1129E, - 0x1129F, - 0x112AA, - 0x112B0, - 0x112EB, - 0x112F0, - 0x112FA, - 0x11300, - 0x11304, - 0x11305, - 0x1130D, - 0x1130F, - 0x11311, - 0x11313, - 0x11329, - 0x1132A, - 0x11331, - 0x11332, - 0x11334, - 0x11335, - 0x1133A, - 0x1133B, - 0x11345, - 0x11347, - 0x11349, - 0x1134B, - 0x1134E, - 0x11350, - 0x11351, - 0x11357, - 0x11358, - 0x1135D, - 0x11364, - 0x11366, - 0x1136D, - 0x11370, - 0x11375, - 0x11400, - 0x1145C, - 0x1145D, - 0x11462, - 0x11480, - 0x114C8, - 0x114D0, - 0x114DA, - 0x11580, - 0x115B6, - 0x115B8, - 0x115DE, - 0x11600, - 0x11645, - 0x11650, - 0x1165A, - 0x11660, - 0x1166D, - 0x11680, - 0x116B9, - 0x116C0, - 0x116CA, - 0x11700, - 0x1171B, - 0x1171D, - 0x1172C, - 0x11730, - 0x11740, - 0x11800, - 0x1183C, - 0x118A0, - 0x118F3, - 0x118FF, - 0x11907, - 0x11909, - 0x1190A, - 0x1190C, - 0x11914, - 0x11915, - 0x11917, - 0x11918, - 0x11936, - 0x11937, - 0x11939, - 0x1193B, - 0x11947, - 0x11950, - 0x1195A, - 0x119A0, - 0x119A8, - 0x119AA, - 0x119D8, - 0x119DA, - 0x119E5, - 0x11A00, - 0x11A48, - 0x11A50, - 0x11AA3, - 0x11AC0, - 0x11AF9, - 0x11C00, - 0x11C09, - 0x11C0A, - 0x11C37, - 0x11C38, - 0x11C46, - 0x11C50, - 0x11C6D, - 0x11C70, - 0x11C90, - 0x11C92, - 0x11CA8, - 0x11CA9, - 0x11CB7, - 0x11D00, - 0x11D07, - 0x11D08, - 0x11D0A, - 0x11D0B, - 0x11D37, - 0x11D3A, - 0x11D3B, - 0x11D3C, - 0x11D3E, - 0x11D3F, - 0x11D48, - 0x11D50, - 0x11D5A, - 0x11D60, - 0x11D66, - 0x11D67, - 0x11D69, - 0x11D6A, - 0x11D8F, - 0x11D90, - 0x11D92, - 0x11D93, - 0x11D99, - 0x11DA0, - 0x11DAA, - 0x11EE0, - 0x11EF9, - 0x11FB0, - 0x11FB1, - 0x11FC0, - 0x11FF2, - 0x11FFF, - 0x1239A, - 0x12400, - 0x1246F, - 0x12470, - 0x12475, - 0x12480, - 0x12544, - 0x13000, - 0x1342F, - 0x13430, - 0x13439, - 0x14400, - 0x14647, - 0x16800, - 0x16A39, - 0x16A40, - 0x16A5F, - 0x16A60, - 0x16A6A, - 0x16A6E, - 0x16A70, - 0x16AD0, - 0x16AEE, - 0x16AF0, - 0x16AF6, - 0x16B00, - 0x16B46, - 0x16B50, - 0x16B5A, - 0x16B5B, - 0x16B62, - 0x16B63, - 0x16B78, - 0x16B7D, - 0x16B90, - 0x16E40, - 0x16E9B, - 0x16F00, - 0x16F4B, - 0x16F4F, - 0x16F88, - 0x16F8F, - 0x16FA0, - 0x16FE0, - 0x16FE5, - 0x16FF0, - 0x16FF2, - 0x17000, - 0x187F8, - 0x18800, - 0x18CD6, - 0x18D00, - 0x18D09, - 0x1B000, - 0x1B11F, - 0x1B150, - 0x1B153, - 0x1B164, - 0x1B168, - 0x1B170, - 0x1B2FC, - 0x1BC00, - 0x1BC6B, - 0x1BC70, - 0x1BC7D, - 0x1BC80, - 0x1BC89, - 0x1BC90, - 0x1BC9A, - 0x1BC9C, - 0x1BCA4, - 0x1D000, - 0x1D0F6, - 0x1D100, - 0x1D127, - 0x1D129, - 0x1D1E9, - 0x1D200, - 0x1D246, - 0x1D2E0, - 0x1D2F4, - 0x1D300, - 0x1D357, - 0x1D360, - 0x1D379, - 0x1D400, - 0x1D455, - 0x1D456, - 0x1D49D, - 0x1D49E, - 0x1D4A0, - 0x1D4A2, - 0x1D4A3, - 0x1D4A5, - 0x1D4A7, - 0x1D4A9, - 0x1D4AD, - 0x1D4AE, - 0x1D4BA, - 0x1D4BB, - 0x1D4BC, - 0x1D4BD, - 0x1D4C4, - 0x1D4C5, - 0x1D506, - 0x1D507, - 0x1D50B, - 0x1D50D, - 0x1D515, - 0x1D516, - 0x1D51D, - 0x1D51E, - 0x1D53A, - 0x1D53B, - 0x1D53F, - 0x1D540, - 0x1D545, - 0x1D546, - 0x1D547, - 0x1D54A, - 0x1D551, - 0x1D552, - 0x1D6A6, - 0x1D6A8, - 0x1D7CC, - 0x1D7CE, - 0x1DA8C, - 0x1DA9B, - 0x1DAA0, - 0x1DAA1, - 0x1DAB0, - 0x1E000, - 0x1E007, - 0x1E008, - 0x1E019, - 0x1E01B, - 0x1E022, - 0x1E023, - 0x1E025, - 0x1E026, - 0x1E02B, - 0x1E100, - 0x1E12D, - 0x1E130, - 0x1E13E, - 0x1E140, - 0x1E14A, - 0x1E14E, - 0x1E150, - 0x1E2C0, - 0x1E2FA, - 0x1E2FF, - 0x1E300, - 0x1E800, - 0x1E8C5, - 0x1E8C7, - 0x1E8D7, - 0x1E900, - 0x1E94C, - 0x1E950, - 0x1E95A, - 0x1E95E, - 0x1E960, - 0x1EC71, - 0x1ECB5, - 0x1ED01, - 0x1ED3E, 0x1EE00, 0x1EE04, 0x1EE05, @@ -190702,342 +194335,27 @@ static const UV UNI_AGE__NA_invlist[] = { /* for all charsets */ 0x1EEAB, 0x1EEBC, 0x1EEF0, - 0x1EEF2, - 0x1F000, - 0x1F02C, - 0x1F030, - 0x1F094, - 0x1F0A0, - 0x1F0AF, - 0x1F0B1, - 0x1F0C0, - 0x1F0C1, - 0x1F0D0, - 0x1F0D1, - 0x1F0F6, - 0x1F100, - 0x1F1AE, - 0x1F1E6, - 0x1F203, - 0x1F210, - 0x1F23C, - 0x1F240, - 0x1F249, - 0x1F250, - 0x1F252, - 0x1F260, - 0x1F266, - 0x1F300, - 0x1F6D8, - 0x1F6E0, - 0x1F6ED, - 0x1F6F0, - 0x1F6FD, - 0x1F700, - 0x1F774, - 0x1F780, - 0x1F7D9, - 0x1F7E0, - 0x1F7EC, - 0x1F800, - 0x1F80C, - 0x1F810, - 0x1F848, - 0x1F850, - 0x1F85A, - 0x1F860, - 0x1F888, - 0x1F890, - 0x1F8AE, - 0x1F8B0, - 0x1F8B2, - 0x1F900, - 0x1F979, - 0x1F97A, - 0x1F9CC, - 0x1F9CD, - 0x1FA54, - 0x1FA60, - 0x1FA6E, - 0x1FA70, - 0x1FA75, - 0x1FA78, - 0x1FA7B, - 0x1FA80, - 0x1FA87, - 0x1FA90, - 0x1FAA9, - 0x1FAB0, - 0x1FAB7, - 0x1FAC0, - 0x1FAC3, - 0x1FAD0, - 0x1FAD7, - 0x1FB00, - 0x1FB93, - 0x1FB94, - 0x1FBCB, - 0x1FBF0, - 0x1FBFA, - 0x1FFFE, - 0x2A6DE, - 0x2A700, - 0x2B735, - 0x2B740, - 0x2B81E, - 0x2B820, - 0x2CEA2, - 0x2CEB0, - 0x2EBE1, - 0x2F800, - 0x2FA1E, - 0x2FFFE, - 0x3134B, - 0x3FFFE, - 0x40000, - 0x4FFFE, - 0x50000, - 0x5FFFE, - 0x60000, - 0x6FFFE, - 0x70000, - 0x7FFFE, - 0x80000, - 0x8FFFE, - 0x90000, - 0x9FFFE, - 0xA0000, - 0xAFFFE, - 0xB0000, - 0xBFFFE, - 0xC0000, - 0xCFFFE, - 0xD0000, - 0xDFFFE, - 0xE0000, - 0xE0001, - 0xE0002, - 0xE0020, - 0xE0080, - 0xE0100, - 0xE01F0, - 0xEFFFE, - 0x110000 -}; - -static const UV UNI_AGHB_invlist[] = { /* for all charsets */ - 5, /* Number of elements */ - 148565664, /* Version and data structure type */ - 1, /* 0 if the list starts at 0; - 1 if it starts at the element beyond 0 */ - 0x0, - 0x10530, - 0x10564, - 0x1056F, - 0x10570 -}; - -static const UV UNI_AHOM_invlist[] = { /* for all charsets */ - 7, /* Number of elements */ - 148565664, /* Version and data structure type */ - 1, /* 0 if the list starts at 0; - 1 if it starts at the element beyond 0 */ - 0x0, - 0x11700, - 0x1171B, - 0x1171D, - 0x1172C, - 0x11730, - 0x11740 -}; - -static const UV UNI_ALCHEMICAL_invlist[] = { /* for all charsets */ - 3, /* Number of elements */ - 148565664, /* Version and data structure type */ - 1, /* 0 if the list starts at 0; - 1 if it starts at the element beyond 0 */ - 0x0, - 0x1F700, - 0x1F780 -}; - -static const UV UNI_ALL_invlist[] = { /* for all charsets */ - 1, /* Number of elements */ - 148565664, /* Version and data structure type */ - 0, /* 0 if the list starts at 0; - 1 if it starts at the element beyond 0 */ - 0x0 -}; - -static const UV UNI_ALPHABETICPF_invlist[] = { /* for all charsets */ - 3, /* Number of elements */ - 148565664, /* Version and data structure type */ - 1, /* 0 if the list starts at 0; - 1 if it starts at the element beyond 0 */ - 0x0, - 0xFB00, - 0xFB50 -}; - -static const UV UNI_ANCIENTGREEKMUSIC_invlist[] = { /* for all charsets */ - 3, /* Number of elements */ - 148565664, /* Version and data structure type */ - 1, /* 0 if the list starts at 0; - 1 if it starts at the element beyond 0 */ - 0x0, - 0x1D200, - 0x1D250 -}; - -static const UV UNI_ANCIENTGREEKNUMBERS_invlist[] = { /* for all charsets */ - 3, /* Number of elements */ - 148565664, /* Version and data structure type */ - 1, /* 0 if the list starts at 0; - 1 if it starts at the element beyond 0 */ - 0x0, - 0x10140, - 0x10190 + 0x1EEF2 }; -static const UV UNI_ANCIENTSYMBOLS_invlist[] = { /* for all charsets */ +static const UV UNI_ARABICEXTA_invlist[] = { /* for all charsets */ 3, /* Number of elements */ 148565664, /* Version and data structure type */ 1, /* 0 if the list starts at 0; 1 if it starts at the element beyond 0 */ 0x0, - 0x10190, - 0x101D0 -}; - -static const UV UNI_ANY_invlist[] = { /* for all charsets */ - 2, /* Number of elements */ - 148565664, /* Version and data structure type */ - 0, /* 0 if the list starts at 0; - 1 if it starts at the element beyond 0 */ - 0x0, - 0x110000 -}; - -static const UV UNI_ARAB_invlist[] = { /* for all charsets */ - 105, /* Number of elements */ - 148565664, /* Version and data structure type */ - 1, /* 0 if the list starts at 0; - 1 if it starts at the element beyond 0 */ - 0x0, - 0x600, - 0x605, - 0x606, - 0x61D, - 0x61E, - 0x6DD, - 0x6DE, - 0x700, - 0x750, - 0x780, 0x8A0, - 0x8B5, - 0x8B6, - 0x8C8, - 0x8D3, - 0x8E2, - 0x8E3, - 0x900, - 0xFB50, - 0xFBC2, - 0xFBD3, - 0xFD3E, - 0xFD50, - 0xFD90, - 0xFD92, - 0xFDC8, - 0xFDF0, - 0xFDFE, - 0xFE70, - 0xFE75, - 0xFE76, - 0xFEFD, - 0x102E0, - 0x102FC, - 0x10E60, - 0x10E7F, - 0x1EE00, - 0x1EE04, - 0x1EE05, - 0x1EE20, - 0x1EE21, - 0x1EE23, - 0x1EE24, - 0x1EE25, - 0x1EE27, - 0x1EE28, - 0x1EE29, - 0x1EE33, - 0x1EE34, - 0x1EE38, - 0x1EE39, - 0x1EE3A, - 0x1EE3B, - 0x1EE3C, - 0x1EE42, - 0x1EE43, - 0x1EE47, - 0x1EE48, - 0x1EE49, - 0x1EE4A, - 0x1EE4B, - 0x1EE4C, - 0x1EE4D, - 0x1EE50, - 0x1EE51, - 0x1EE53, - 0x1EE54, - 0x1EE55, - 0x1EE57, - 0x1EE58, - 0x1EE59, - 0x1EE5A, - 0x1EE5B, - 0x1EE5C, - 0x1EE5D, - 0x1EE5E, - 0x1EE5F, - 0x1EE60, - 0x1EE61, - 0x1EE63, - 0x1EE64, - 0x1EE65, - 0x1EE67, - 0x1EE6B, - 0x1EE6C, - 0x1EE73, - 0x1EE74, - 0x1EE78, - 0x1EE79, - 0x1EE7D, - 0x1EE7E, - 0x1EE7F, - 0x1EE80, - 0x1EE8A, - 0x1EE8B, - 0x1EE9C, - 0x1EEA1, - 0x1EEA4, - 0x1EEA5, - 0x1EEAA, - 0x1EEAB, - 0x1EEBC, - 0x1EEF0, - 0x1EEF2 + 0x900 }; -static const UV UNI_ARABICEXTA_invlist[] = { /* for all charsets */ +static const UV UNI_ARABICEXTB_invlist[] = { /* for all charsets */ 3, /* Number of elements */ 148565664, /* Version and data structure type */ 1, /* 0 if the list starts at 0; 1 if it starts at the element beyond 0 */ 0x0, - 0x8A0, - 0x900 + 0x870, + 0x8A0 }; static const UV UNI_ARABICMATH_invlist[] = { /* for all charsets */ @@ -191137,9 +194455,9 @@ static const UV UNI_BALI_invlist[] = { /* for all charsets */ 1 if it starts at the element beyond 0 */ 0x0, 0x1B00, - 0x1B4C, + 0x1B4D, 0x1B50, - 0x1B7D + 0x1B7F }; static const UV UNI_BAMU_invlist[] = { /* for all charsets */ @@ -191219,17 +194537,17 @@ static const UV UNI_BC__AL_invlist[] = { /* for all charsets */ 0x7B1, 0x7C0, 0x860, - 0x870, + 0x890, + 0x892, + 0x898, 0x8A0, - 0x8D3, + 0x8CA, 0xFB50, 0xFD3E, - 0xFD40, - 0xFDD0, + 0xFD50, + 0xFDCF, 0xFDF0, 0xFDFD, - 0xFDFE, - 0xFE00, 0xFE70, 0xFEFF, 0x10D00, @@ -191253,7 +194571,7 @@ static const UV UNI_BC__AL_invlist[] = { /* for all charsets */ }; static const UV UNI_BC__AN_invlist[] = { /* for all charsets */ - 15, /* Number of elements */ + 17, /* Number of elements */ 148565664, /* Version and data structure type */ 1, /* 0 if the list starts at 0; 1 if it starts at the element beyond 0 */ @@ -191266,6 +194584,8 @@ static const UV UNI_BC__AN_invlist[] = { /* for all charsets */ 0x66D, 0x6DD, 0x6DE, + 0x890, + 0x892, 0x8E2, 0x8E3, 0x10D30, @@ -192144,7 +195464,7 @@ static const UV UNI_BC__FSI_invlist[] = { /* for all charsets */ # if 'A' == 65 /* ASCII/Latin1 */ static const UV UNI_BC__L_invlist[] = { /* for ASCII/Latin1 */ - 926, /* Number of elements */ + 942, /* Number of elements */ 148565664, /* Version and data structure type */ 1, /* 0 if the list starts at 0; 1 if it starts at the element beyond 0 */ @@ -192276,6 +195596,8 @@ static const UV UNI_BC__L_invlist[] = { /* for ASCII/Latin1 */ 0xC01, 0xC04, 0xC05, + 0xC3C, + 0xC3D, 0xC3E, 0xC41, 0xC46, @@ -192383,7 +195705,7 @@ static const UV UNI_BC__L_invlist[] = { /* for ASCII/Latin1 */ 0x1712, 0x1715, 0x1732, - 0x1735, + 0x1734, 0x1752, 0x1754, 0x1772, @@ -192403,7 +195725,7 @@ static const UV UNI_BC__L_invlist[] = { /* for ASCII/Latin1 */ 0x17F0, 0x17FA, 0x1800, - 0x180F, + 0x1810, 0x1885, 0x1887, 0x18A9, @@ -192441,7 +195763,7 @@ static const UV UNI_BC__L_invlist[] = { /* for ASCII/Latin1 */ 0x1A7F, 0x1A80, 0x1AB0, - 0x1AC1, + 0x1ACF, 0x1B00, 0x1B04, 0x1B34, @@ -192487,8 +195809,6 @@ static const UV UNI_BC__L_invlist[] = { /* for ASCII/Latin1 */ 0x1CF8, 0x1CFA, 0x1DC0, - 0x1DFA, - 0x1DFB, 0x1E00, 0x1FBD, 0x1FBE, @@ -192571,7 +195891,7 @@ static const UV UNI_BC__L_invlist[] = { /* for ASCII/Latin1 */ 0x2D7F, 0x2D80, 0x2DE0, - 0x2E53, + 0x2E5E, 0x2E80, 0x2E9A, 0x2E9B, @@ -192744,12 +196064,18 @@ static const UV UNI_BC__L_invlist[] = { /* for ASCII/Latin1 */ 0x11047, 0x11052, 0x11066, + 0x11070, + 0x11071, + 0x11073, + 0x11075, 0x1107F, 0x11082, 0x110B3, 0x110B7, 0x110B9, 0x110BB, + 0x110C2, + 0x110C3, 0x11100, 0x11103, 0x11127, @@ -192916,6 +196242,10 @@ static const UV UNI_BC__L_invlist[] = { /* for ASCII/Latin1 */ 0x1BC9F, 0x1BCA0, 0x1BCA4, + 0x1CF00, + 0x1CF2E, + 0x1CF30, + 0x1CF47, 0x1D167, 0x1D16A, 0x1D173, @@ -192924,6 +196254,8 @@ static const UV UNI_BC__L_invlist[] = { /* for ASCII/Latin1 */ 0x1D18C, 0x1D1AA, 0x1D1AE, + 0x1D1E9, + 0x1D1EB, 0x1D200, 0x1D246, 0x1D300, @@ -192964,6 +196296,8 @@ static const UV UNI_BC__L_invlist[] = { /* for ASCII/Latin1 */ 0x1E02B, 0x1E130, 0x1E137, + 0x1E2AE, + 0x1E2AF, 0x1E2EC, 0x1E2F0, 0x1E2FF, @@ -192992,7 +196326,7 @@ static const UV UNI_BC__L_invlist[] = { /* for ASCII/Latin1 */ 0x1F266, 0x1F300, 0x1F6D8, - 0x1F6E0, + 0x1F6DD, 0x1F6ED, 0x1F6F0, 0x1F6FD, @@ -193002,6 +196336,8 @@ static const UV UNI_BC__L_invlist[] = { /* for ASCII/Latin1 */ 0x1F7D9, 0x1F7E0, 0x1F7EC, + 0x1F7F0, + 0x1F7F1, 0x1F800, 0x1F80C, 0x1F810, @@ -193015,27 +196351,27 @@ static const UV UNI_BC__L_invlist[] = { /* for ASCII/Latin1 */ 0x1F8B0, 0x1F8B2, 0x1F900, - 0x1F979, - 0x1F97A, - 0x1F9CC, - 0x1F9CD, 0x1FA54, 0x1FA60, 0x1FA6E, 0x1FA70, 0x1FA75, 0x1FA78, - 0x1FA7B, + 0x1FA7D, 0x1FA80, 0x1FA87, 0x1FA90, - 0x1FAA9, + 0x1FAAD, 0x1FAB0, - 0x1FAB7, + 0x1FABB, 0x1FAC0, - 0x1FAC3, + 0x1FAC6, 0x1FAD0, - 0x1FAD7, + 0x1FADA, + 0x1FAE0, + 0x1FAE8, + 0x1FAF0, + 0x1FAF7, 0x1FB00, 0x1FB93, 0x1FB94, @@ -193084,7 +196420,7 @@ static const UV UNI_BC__L_invlist[] = { /* for ASCII/Latin1 */ && '$' == 91 && '@' == 124 && '`' == 121 && '\n' == 21 static const UV UNI_BC__L_invlist[] = { /* for EBCDIC 1047 */ - 952, /* Number of elements */ + 968, /* Number of elements */ 148565664, /* Version and data structure type */ 1, /* 0 if the list starts at 0; 1 if it starts at the element beyond 0 */ @@ -193242,6 +196578,8 @@ static const UV UNI_BC__L_invlist[] = { /* for EBCDIC 1047 */ 0xC01, 0xC04, 0xC05, + 0xC3C, + 0xC3D, 0xC3E, 0xC41, 0xC46, @@ -193349,7 +196687,7 @@ static const UV UNI_BC__L_invlist[] = { /* for EBCDIC 1047 */ 0x1712, 0x1715, 0x1732, - 0x1735, + 0x1734, 0x1752, 0x1754, 0x1772, @@ -193369,7 +196707,7 @@ static const UV UNI_BC__L_invlist[] = { /* for EBCDIC 1047 */ 0x17F0, 0x17FA, 0x1800, - 0x180F, + 0x1810, 0x1885, 0x1887, 0x18A9, @@ -193407,7 +196745,7 @@ static const UV UNI_BC__L_invlist[] = { /* for EBCDIC 1047 */ 0x1A7F, 0x1A80, 0x1AB0, - 0x1AC1, + 0x1ACF, 0x1B00, 0x1B04, 0x1B34, @@ -193453,8 +196791,6 @@ static const UV UNI_BC__L_invlist[] = { /* for EBCDIC 1047 */ 0x1CF8, 0x1CFA, 0x1DC0, - 0x1DFA, - 0x1DFB, 0x1E00, 0x1FBD, 0x1FBE, @@ -193537,7 +196873,7 @@ static const UV UNI_BC__L_invlist[] = { /* for EBCDIC 1047 */ 0x2D7F, 0x2D80, 0x2DE0, - 0x2E53, + 0x2E5E, 0x2E80, 0x2E9A, 0x2E9B, @@ -193710,12 +197046,18 @@ static const UV UNI_BC__L_invlist[] = { /* for EBCDIC 1047 */ 0x11047, 0x11052, 0x11066, + 0x11070, + 0x11071, + 0x11073, + 0x11075, 0x1107F, 0x11082, 0x110B3, 0x110B7, 0x110B9, 0x110BB, + 0x110C2, + 0x110C3, 0x11100, 0x11103, 0x11127, @@ -193882,6 +197224,10 @@ static const UV UNI_BC__L_invlist[] = { /* for EBCDIC 1047 */ 0x1BC9F, 0x1BCA0, 0x1BCA4, + 0x1CF00, + 0x1CF2E, + 0x1CF30, + 0x1CF47, 0x1D167, 0x1D16A, 0x1D173, @@ -193890,6 +197236,8 @@ static const UV UNI_BC__L_invlist[] = { /* for EBCDIC 1047 */ 0x1D18C, 0x1D1AA, 0x1D1AE, + 0x1D1E9, + 0x1D1EB, 0x1D200, 0x1D246, 0x1D300, @@ -193930,6 +197278,8 @@ static const UV UNI_BC__L_invlist[] = { /* for EBCDIC 1047 */ 0x1E02B, 0x1E130, 0x1E137, + 0x1E2AE, + 0x1E2AF, 0x1E2EC, 0x1E2F0, 0x1E2FF, @@ -193958,7 +197308,7 @@ static const UV UNI_BC__L_invlist[] = { /* for EBCDIC 1047 */ 0x1F266, 0x1F300, 0x1F6D8, - 0x1F6E0, + 0x1F6DD, 0x1F6ED, 0x1F6F0, 0x1F6FD, @@ -193968,6 +197318,8 @@ static const UV UNI_BC__L_invlist[] = { /* for EBCDIC 1047 */ 0x1F7D9, 0x1F7E0, 0x1F7EC, + 0x1F7F0, + 0x1F7F1, 0x1F800, 0x1F80C, 0x1F810, @@ -193981,27 +197333,27 @@ static const UV UNI_BC__L_invlist[] = { /* for EBCDIC 1047 */ 0x1F8B0, 0x1F8B2, 0x1F900, - 0x1F979, - 0x1F97A, - 0x1F9CC, - 0x1F9CD, 0x1FA54, 0x1FA60, 0x1FA6E, 0x1FA70, 0x1FA75, 0x1FA78, - 0x1FA7B, + 0x1FA7D, 0x1FA80, 0x1FA87, 0x1FA90, - 0x1FAA9, + 0x1FAAD, 0x1FAB0, - 0x1FAB7, + 0x1FABB, 0x1FAC0, - 0x1FAC3, + 0x1FAC6, 0x1FAD0, - 0x1FAD7, + 0x1FADA, + 0x1FAE0, + 0x1FAE8, + 0x1FAF0, + 0x1FAF7, 0x1FB00, 0x1FB93, 0x1FB94, @@ -194050,7 +197402,7 @@ static const UV UNI_BC__L_invlist[] = { /* for EBCDIC 1047 */ && '$' == 91 && '@' == 124 && '`' == 121 && '\n' == 37 static const UV UNI_BC__L_invlist[] = { /* for EBCDIC 037 */ - 948, /* Number of elements */ + 964, /* Number of elements */ 148565664, /* Version and data structure type */ 1, /* 0 if the list starts at 0; 1 if it starts at the element beyond 0 */ @@ -194204,6 +197556,8 @@ static const UV UNI_BC__L_invlist[] = { /* for EBCDIC 037 */ 0xC01, 0xC04, 0xC05, + 0xC3C, + 0xC3D, 0xC3E, 0xC41, 0xC46, @@ -194311,7 +197665,7 @@ static const UV UNI_BC__L_invlist[] = { /* for EBCDIC 037 */ 0x1712, 0x1715, 0x1732, - 0x1735, + 0x1734, 0x1752, 0x1754, 0x1772, @@ -194331,7 +197685,7 @@ static const UV UNI_BC__L_invlist[] = { /* for EBCDIC 037 */ 0x17F0, 0x17FA, 0x1800, - 0x180F, + 0x1810, 0x1885, 0x1887, 0x18A9, @@ -194369,7 +197723,7 @@ static const UV UNI_BC__L_invlist[] = { /* for EBCDIC 037 */ 0x1A7F, 0x1A80, 0x1AB0, - 0x1AC1, + 0x1ACF, 0x1B00, 0x1B04, 0x1B34, @@ -194415,8 +197769,6 @@ static const UV UNI_BC__L_invlist[] = { /* for EBCDIC 037 */ 0x1CF8, 0x1CFA, 0x1DC0, - 0x1DFA, - 0x1DFB, 0x1E00, 0x1FBD, 0x1FBE, @@ -194499,7 +197851,7 @@ static const UV UNI_BC__L_invlist[] = { /* for EBCDIC 037 */ 0x2D7F, 0x2D80, 0x2DE0, - 0x2E53, + 0x2E5E, 0x2E80, 0x2E9A, 0x2E9B, @@ -194672,12 +198024,18 @@ static const UV UNI_BC__L_invlist[] = { /* for EBCDIC 037 */ 0x11047, 0x11052, 0x11066, + 0x11070, + 0x11071, + 0x11073, + 0x11075, 0x1107F, 0x11082, 0x110B3, 0x110B7, 0x110B9, 0x110BB, + 0x110C2, + 0x110C3, 0x11100, 0x11103, 0x11127, @@ -194844,6 +198202,10 @@ static const UV UNI_BC__L_invlist[] = { /* for EBCDIC 037 */ 0x1BC9F, 0x1BCA0, 0x1BCA4, + 0x1CF00, + 0x1CF2E, + 0x1CF30, + 0x1CF47, 0x1D167, 0x1D16A, 0x1D173, @@ -194852,6 +198214,8 @@ static const UV UNI_BC__L_invlist[] = { /* for EBCDIC 037 */ 0x1D18C, 0x1D1AA, 0x1D1AE, + 0x1D1E9, + 0x1D1EB, 0x1D200, 0x1D246, 0x1D300, @@ -194892,6 +198256,8 @@ static const UV UNI_BC__L_invlist[] = { /* for EBCDIC 037 */ 0x1E02B, 0x1E130, 0x1E137, + 0x1E2AE, + 0x1E2AF, 0x1E2EC, 0x1E2F0, 0x1E2FF, @@ -194920,7 +198286,7 @@ static const UV UNI_BC__L_invlist[] = { /* for EBCDIC 037 */ 0x1F266, 0x1F300, 0x1F6D8, - 0x1F6E0, + 0x1F6DD, 0x1F6ED, 0x1F6F0, 0x1F6FD, @@ -194930,6 +198296,8 @@ static const UV UNI_BC__L_invlist[] = { /* for EBCDIC 037 */ 0x1F7D9, 0x1F7E0, 0x1F7EC, + 0x1F7F0, + 0x1F7F1, 0x1F800, 0x1F80C, 0x1F810, @@ -194943,27 +198311,27 @@ static const UV UNI_BC__L_invlist[] = { /* for EBCDIC 037 */ 0x1F8B0, 0x1F8B2, 0x1F900, - 0x1F979, - 0x1F97A, - 0x1F9CC, - 0x1F9CD, 0x1FA54, 0x1FA60, 0x1FA6E, 0x1FA70, 0x1FA75, 0x1FA78, - 0x1FA7B, + 0x1FA7D, 0x1FA80, 0x1FA87, 0x1FA90, - 0x1FAA9, + 0x1FAAD, 0x1FAB0, - 0x1FAB7, + 0x1FABB, 0x1FAC0, - 0x1FAC3, + 0x1FAC6, 0x1FAD0, - 0x1FAD7, + 0x1FADA, + 0x1FAE0, + 0x1FAE8, + 0x1FAF0, + 0x1FAF7, 0x1FB00, 0x1FB93, 0x1FB94, @@ -195037,7 +198405,7 @@ static const UV UNI_BC__LRO_invlist[] = { /* for all charsets */ }; static const UV UNI_BC__NSM_invlist[] = { /* for all charsets */ - 645, /* Number of elements */ + 663, /* Number of elements */ 148565664, /* Version and data structure type */ 1, /* 0 if the list starts at 0; 1 if it starts at the element beyond 0 */ @@ -195090,7 +198458,9 @@ static const UV UNI_BC__NSM_invlist[] = { /* for all charsets */ 0x82E, 0x859, 0x85C, - 0x8D3, + 0x898, + 0x8A0, + 0x8CA, 0x8E2, 0x8E3, 0x903, @@ -195172,6 +198542,8 @@ static const UV UNI_BC__NSM_invlist[] = { /* for all charsets */ 0xC01, 0xC04, 0xC05, + 0xC3C, + 0xC3D, 0xC3E, 0xC41, 0xC46, @@ -195267,7 +198639,7 @@ static const UV UNI_BC__NSM_invlist[] = { /* for all charsets */ 0x1712, 0x1715, 0x1732, - 0x1735, + 0x1734, 0x1752, 0x1754, 0x1772, @@ -195284,6 +198656,8 @@ static const UV UNI_BC__NSM_invlist[] = { /* for all charsets */ 0x17DE, 0x180B, 0x180E, + 0x180F, + 0x1810, 0x1885, 0x1887, 0x18A9, @@ -195315,7 +198689,7 @@ static const UV UNI_BC__NSM_invlist[] = { /* for all charsets */ 0x1A7F, 0x1A80, 0x1AB0, - 0x1AC1, + 0x1ACF, 0x1B00, 0x1B04, 0x1B34, @@ -195361,8 +198735,6 @@ static const UV UNI_BC__NSM_invlist[] = { /* for all charsets */ 0x1CF8, 0x1CFA, 0x1DC0, - 0x1DFA, - 0x1DFB, 0x1E00, 0x20D0, 0x20F1, @@ -195476,16 +198848,24 @@ static const UV UNI_BC__NSM_invlist[] = { /* for all charsets */ 0x10EAD, 0x10F46, 0x10F51, + 0x10F82, + 0x10F86, 0x11001, 0x11002, 0x11038, 0x11047, + 0x11070, + 0x11071, + 0x11073, + 0x11075, 0x1107F, 0x11082, 0x110B3, 0x110B7, 0x110B9, 0x110BB, + 0x110C2, + 0x110C3, 0x11100, 0x11103, 0x11127, @@ -195644,6 +199024,10 @@ static const UV UNI_BC__NSM_invlist[] = { /* for all charsets */ 0x16FE5, 0x1BC9D, 0x1BC9F, + 0x1CF00, + 0x1CF2E, + 0x1CF30, + 0x1CF47, 0x1D167, 0x1D16A, 0x1D17B, @@ -195678,6 +199062,8 @@ static const UV UNI_BC__NSM_invlist[] = { /* for all charsets */ 0x1E02B, 0x1E130, 0x1E137, + 0x1E2AE, + 0x1E2AF, 0x1E2EC, 0x1E2F0, 0x1E8D0, @@ -195691,7 +199077,7 @@ static const UV UNI_BC__NSM_invlist[] = { /* for all charsets */ # if 'A' == 65 /* ASCII/Latin1 */ static const UV UNI_BC__ON_invlist[] = { /* for ASCII/Latin1 */ - 377, /* Number of elements */ + 383, /* Number of elements */ 148565664, /* Version and data structure type */ 1, /* 0 if the list starts at 0; 1 if it starts at the element beyond 0 */ @@ -195859,7 +199245,7 @@ static const UV UNI_BC__ON_invlist[] = { /* for ASCII/Latin1 */ 0x2CF9, 0x2D00, 0x2E00, - 0x2E53, + 0x2E5E, 0x2E80, 0x2E9A, 0x2E9B, @@ -195923,9 +199309,11 @@ static const UV UNI_BC__ON_invlist[] = { /* for ASCII/Latin1 */ 0xAB6A, 0xAB6C, 0xFD3E, - 0xFD40, + 0xFD50, + 0xFDCF, + 0xFDD0, 0xFDFD, - 0xFDFE, + 0xFE00, 0xFE10, 0xFE1A, 0xFE30, @@ -195982,6 +199370,8 @@ static const UV UNI_BC__ON_invlist[] = { /* for ASCII/Latin1 */ 0x11FF2, 0x16FE2, 0x16FE3, + 0x1D1E9, + 0x1D1EB, 0x1D200, 0x1D242, 0x1D245, @@ -196024,7 +199414,7 @@ static const UV UNI_BC__ON_invlist[] = { /* for ASCII/Latin1 */ 0x1F266, 0x1F300, 0x1F6D8, - 0x1F6E0, + 0x1F6DD, 0x1F6ED, 0x1F6F0, 0x1F6FD, @@ -196034,6 +199424,8 @@ static const UV UNI_BC__ON_invlist[] = { /* for ASCII/Latin1 */ 0x1F7D9, 0x1F7E0, 0x1F7EC, + 0x1F7F0, + 0x1F7F1, 0x1F800, 0x1F80C, 0x1F810, @@ -196047,27 +199439,27 @@ static const UV UNI_BC__ON_invlist[] = { /* for ASCII/Latin1 */ 0x1F8B0, 0x1F8B2, 0x1F900, - 0x1F979, - 0x1F97A, - 0x1F9CC, - 0x1F9CD, 0x1FA54, 0x1FA60, 0x1FA6E, 0x1FA70, 0x1FA75, 0x1FA78, - 0x1FA7B, + 0x1FA7D, 0x1FA80, 0x1FA87, 0x1FA90, - 0x1FAA9, + 0x1FAAD, 0x1FAB0, - 0x1FAB7, + 0x1FABB, 0x1FAC0, - 0x1FAC3, + 0x1FAC6, 0x1FAD0, - 0x1FAD7, + 0x1FADA, + 0x1FAE0, + 0x1FAE8, + 0x1FAF0, + 0x1FAF7, 0x1FB00, 0x1FB93, 0x1FB94, @@ -196082,7 +199474,7 @@ static const UV UNI_BC__ON_invlist[] = { /* for ASCII/Latin1 */ && '$' == 91 && '@' == 124 && '`' == 121 && '\n' == 21 static const UV UNI_BC__ON_invlist[] = { /* for EBCDIC 1047 */ - 385, /* Number of elements */ + 391, /* Number of elements */ 148565664, /* Version and data structure type */ 1, /* 0 if the list starts at 0; 1 if it starts at the element beyond 0 */ @@ -196258,7 +199650,7 @@ static const UV UNI_BC__ON_invlist[] = { /* for EBCDIC 1047 */ 0x2CF9, 0x2D00, 0x2E00, - 0x2E53, + 0x2E5E, 0x2E80, 0x2E9A, 0x2E9B, @@ -196322,9 +199714,11 @@ static const UV UNI_BC__ON_invlist[] = { /* for EBCDIC 1047 */ 0xAB6A, 0xAB6C, 0xFD3E, - 0xFD40, + 0xFD50, + 0xFDCF, + 0xFDD0, 0xFDFD, - 0xFDFE, + 0xFE00, 0xFE10, 0xFE1A, 0xFE30, @@ -196381,6 +199775,8 @@ static const UV UNI_BC__ON_invlist[] = { /* for EBCDIC 1047 */ 0x11FF2, 0x16FE2, 0x16FE3, + 0x1D1E9, + 0x1D1EB, 0x1D200, 0x1D242, 0x1D245, @@ -196423,7 +199819,7 @@ static const UV UNI_BC__ON_invlist[] = { /* for EBCDIC 1047 */ 0x1F266, 0x1F300, 0x1F6D8, - 0x1F6E0, + 0x1F6DD, 0x1F6ED, 0x1F6F0, 0x1F6FD, @@ -196433,6 +199829,8 @@ static const UV UNI_BC__ON_invlist[] = { /* for EBCDIC 1047 */ 0x1F7D9, 0x1F7E0, 0x1F7EC, + 0x1F7F0, + 0x1F7F1, 0x1F800, 0x1F80C, 0x1F810, @@ -196446,27 +199844,27 @@ static const UV UNI_BC__ON_invlist[] = { /* for EBCDIC 1047 */ 0x1F8B0, 0x1F8B2, 0x1F900, - 0x1F979, - 0x1F97A, - 0x1F9CC, - 0x1F9CD, 0x1FA54, 0x1FA60, 0x1FA6E, 0x1FA70, 0x1FA75, 0x1FA78, - 0x1FA7B, + 0x1FA7D, 0x1FA80, 0x1FA87, 0x1FA90, - 0x1FAA9, + 0x1FAAD, 0x1FAB0, - 0x1FAB7, + 0x1FABB, 0x1FAC0, - 0x1FAC3, + 0x1FAC6, 0x1FAD0, - 0x1FAD7, + 0x1FADA, + 0x1FAE0, + 0x1FAE8, + 0x1FAF0, + 0x1FAF7, 0x1FB00, 0x1FB93, 0x1FB94, @@ -196481,7 +199879,7 @@ static const UV UNI_BC__ON_invlist[] = { /* for EBCDIC 1047 */ && '$' == 91 && '@' == 124 && '`' == 121 && '\n' == 37 static const UV UNI_BC__ON_invlist[] = { /* for EBCDIC 037 */ - 381, /* Number of elements */ + 387, /* Number of elements */ 148565664, /* Version and data structure type */ 1, /* 0 if the list starts at 0; 1 if it starts at the element beyond 0 */ @@ -196653,7 +200051,7 @@ static const UV UNI_BC__ON_invlist[] = { /* for EBCDIC 037 */ 0x2CF9, 0x2D00, 0x2E00, - 0x2E53, + 0x2E5E, 0x2E80, 0x2E9A, 0x2E9B, @@ -196717,9 +200115,11 @@ static const UV UNI_BC__ON_invlist[] = { /* for EBCDIC 037 */ 0xAB6A, 0xAB6C, 0xFD3E, - 0xFD40, + 0xFD50, + 0xFDCF, + 0xFDD0, 0xFDFD, - 0xFDFE, + 0xFE00, 0xFE10, 0xFE1A, 0xFE30, @@ -196776,6 +200176,8 @@ static const UV UNI_BC__ON_invlist[] = { /* for EBCDIC 037 */ 0x11FF2, 0x16FE2, 0x16FE3, + 0x1D1E9, + 0x1D1EB, 0x1D200, 0x1D242, 0x1D245, @@ -196818,7 +200220,7 @@ static const UV UNI_BC__ON_invlist[] = { /* for EBCDIC 037 */ 0x1F266, 0x1F300, 0x1F6D8, - 0x1F6E0, + 0x1F6DD, 0x1F6ED, 0x1F6F0, 0x1F6FD, @@ -196828,6 +200230,8 @@ static const UV UNI_BC__ON_invlist[] = { /* for EBCDIC 037 */ 0x1F7D9, 0x1F7E0, 0x1F7EC, + 0x1F7F0, + 0x1F7F1, 0x1F800, 0x1F80C, 0x1F810, @@ -196841,27 +200245,27 @@ static const UV UNI_BC__ON_invlist[] = { /* for EBCDIC 037 */ 0x1F8B0, 0x1F8B2, 0x1F900, - 0x1F979, - 0x1F97A, - 0x1F9CC, - 0x1F9CD, 0x1FA54, 0x1FA60, 0x1FA6E, 0x1FA70, 0x1FA75, 0x1FA78, - 0x1FA7B, + 0x1FA7D, 0x1FA80, 0x1FA87, 0x1FA90, - 0x1FAA9, + 0x1FAAD, 0x1FAB0, - 0x1FAB7, + 0x1FABB, 0x1FAC0, - 0x1FAC3, + 0x1FAC6, 0x1FAD0, - 0x1FAD7, + 0x1FADA, + 0x1FAE0, + 0x1FAE8, + 0x1FAF0, + 0x1FAF7, 0x1FB00, 0x1FB93, 0x1FB94, @@ -196926,8 +200330,6 @@ static const UV UNI_BC__R_invlist[] = { /* for all charsets */ 0x859, 0x85C, 0x860, - 0x870, - 0x8A0, 0x200F, 0x2010, 0xFB1D, @@ -196961,6 +200363,8 @@ static const UV UNI_BC__R_invlist[] = { /* for all charsets */ 0x10EAD, 0x10F30, 0x10F70, + 0x10F82, + 0x10F86, 0x11000, 0x1E800, 0x1E8D0, @@ -197245,7 +200649,7 @@ static const UV UNI_BIDIC_invlist[] = { /* for all charsets */ # if 'A' == 65 /* ASCII/Latin1 */ static const UV UNI_BIDIM_invlist[] = { /* for ASCII/Latin1 */ - 227, /* Number of elements */ + 229, /* Number of elements */ 148565664, /* Version and data structure type */ 1, /* 0 if the list starts at 0; 1 if it starts at the element beyond 0 */ @@ -197440,6 +200844,8 @@ static const UV UNI_BIDIM_invlist[] = { /* for ASCII/Latin1 */ 0x2E1E, 0x2E20, 0x2E2A, + 0x2E55, + 0x2E5D, 0x3008, 0x3012, 0x3014, @@ -197486,7 +200892,7 @@ static const UV UNI_BIDIM_invlist[] = { /* for ASCII/Latin1 */ && '$' == 91 && '@' == 124 && '`' == 121 && '\n' == 21 static const UV UNI_BIDIM_invlist[] = { /* for EBCDIC 1047 */ - 225, /* Number of elements */ + 227, /* Number of elements */ 148565664, /* Version and data structure type */ 1, /* 0 if the list starts at 0; 1 if it starts at the element beyond 0 */ @@ -197679,6 +201085,8 @@ static const UV UNI_BIDIM_invlist[] = { /* for EBCDIC 1047 */ 0x2E1E, 0x2E20, 0x2E2A, + 0x2E55, + 0x2E5D, 0x3008, 0x3012, 0x3014, @@ -197725,7 +201133,7 @@ static const UV UNI_BIDIM_invlist[] = { /* for EBCDIC 1047 */ && '$' == 91 && '@' == 124 && '`' == 121 && '\n' == 37 static const UV UNI_BIDIM_invlist[] = { /* for EBCDIC 037 */ - 223, /* Number of elements */ + 225, /* Number of elements */ 148565664, /* Version and data structure type */ 1, /* 0 if the list starts at 0; 1 if it starts at the element beyond 0 */ @@ -197916,6 +201324,8 @@ static const UV UNI_BIDIM_invlist[] = { /* for EBCDIC 037 */ 0x2E1E, 0x2E20, 0x2E2A, + 0x2E55, + 0x2E5D, 0x3008, 0x3012, 0x3014, @@ -198021,7 +201431,7 @@ static const UV UNI_BOXDRAWING_invlist[] = { /* for all charsets */ # if 'A' == 65 /* ASCII/Latin1 */ static const UV UNI_BPT__C_invlist[] = { /* for ASCII/Latin1 */ - 121, /* Number of elements */ + 129, /* Number of elements */ 148565664, /* Version and data structure type */ 1, /* 0 if the list starts at 0; 1 if it starts at the element beyond 0 */ @@ -198112,6 +201522,14 @@ static const UV UNI_BPT__C_invlist[] = { /* for ASCII/Latin1 */ 0x2E28, 0x2E29, 0x2E2A, + 0x2E56, + 0x2E57, + 0x2E58, + 0x2E59, + 0x2E5A, + 0x2E5B, + 0x2E5C, + 0x2E5D, 0x3009, 0x300A, 0x300B, @@ -198156,7 +201574,7 @@ static const UV UNI_BPT__C_invlist[] = { /* for ASCII/Latin1 */ && '$' == 91 && '@' == 124 && '`' == 121 && '\n' == 21 static const UV UNI_BPT__C_invlist[] = { /* for EBCDIC 1047 */ - 121, /* Number of elements */ + 129, /* Number of elements */ 148565664, /* Version and data structure type */ 1, /* 0 if the list starts at 0; 1 if it starts at the element beyond 0 */ @@ -198247,6 +201665,14 @@ static const UV UNI_BPT__C_invlist[] = { /* for EBCDIC 1047 */ 0x2E28, 0x2E29, 0x2E2A, + 0x2E56, + 0x2E57, + 0x2E58, + 0x2E59, + 0x2E5A, + 0x2E5B, + 0x2E5C, + 0x2E5D, 0x3009, 0x300A, 0x300B, @@ -198291,7 +201717,7 @@ static const UV UNI_BPT__C_invlist[] = { /* for EBCDIC 1047 */ && '$' == 91 && '@' == 124 && '`' == 121 && '\n' == 37 static const UV UNI_BPT__C_invlist[] = { /* for EBCDIC 037 */ - 121, /* Number of elements */ + 129, /* Number of elements */ 148565664, /* Version and data structure type */ 1, /* 0 if the list starts at 0; 1 if it starts at the element beyond 0 */ @@ -198382,6 +201808,14 @@ static const UV UNI_BPT__C_invlist[] = { /* for EBCDIC 037 */ 0x2E28, 0x2E29, 0x2E2A, + 0x2E56, + 0x2E57, + 0x2E58, + 0x2E59, + 0x2E5A, + 0x2E5B, + 0x2E5C, + 0x2E5D, 0x3009, 0x300A, 0x300B, @@ -198423,7 +201857,7 @@ static const UV UNI_BPT__C_invlist[] = { /* for EBCDIC 037 */ # if 'A' == 65 /* ASCII/Latin1 */ static const UV UNI_BPT__N_invlist[] = { /* for ASCII/Latin1 */ - 59, /* Number of elements */ + 61, /* Number of elements */ 148565664, /* Version and data structure type */ 0, /* 0 if the list starts at 0; 1 if it starts at the element beyond 0 */ @@ -198466,6 +201900,8 @@ static const UV UNI_BPT__N_invlist[] = { /* for ASCII/Latin1 */ 0x29FE, 0x2E22, 0x2E2A, + 0x2E55, + 0x2E5D, 0x3008, 0x3012, 0x3014, @@ -198496,7 +201932,7 @@ static const UV UNI_BPT__N_invlist[] = { /* for ASCII/Latin1 */ && '$' == 91 && '@' == 124 && '`' == 121 && '\n' == 21 static const UV UNI_BPT__N_invlist[] = { /* for EBCDIC 1047 */ - 61, /* Number of elements */ + 63, /* Number of elements */ 148565664, /* Version and data structure type */ 0, /* 0 if the list starts at 0; 1 if it starts at the element beyond 0 */ @@ -198541,6 +201977,8 @@ static const UV UNI_BPT__N_invlist[] = { /* for EBCDIC 1047 */ 0x29FE, 0x2E22, 0x2E2A, + 0x2E55, + 0x2E5D, 0x3008, 0x3012, 0x3014, @@ -198571,7 +202009,7 @@ static const UV UNI_BPT__N_invlist[] = { /* for EBCDIC 1047 */ && '$' == 91 && '@' == 124 && '`' == 121 && '\n' == 37 static const UV UNI_BPT__N_invlist[] = { /* for EBCDIC 037 */ - 59, /* Number of elements */ + 61, /* Number of elements */ 148565664, /* Version and data structure type */ 0, /* 0 if the list starts at 0; 1 if it starts at the element beyond 0 */ @@ -198614,6 +202052,8 @@ static const UV UNI_BPT__N_invlist[] = { /* for EBCDIC 037 */ 0x29FE, 0x2E22, 0x2E2A, + 0x2E55, + 0x2E5D, 0x3008, 0x3012, 0x3014, @@ -198641,7 +202081,7 @@ static const UV UNI_BPT__N_invlist[] = { /* for EBCDIC 037 */ # if 'A' == 65 /* ASCII/Latin1 */ static const UV UNI_BPT__O_invlist[] = { /* for ASCII/Latin1 */ - 121, /* Number of elements */ + 129, /* Number of elements */ 148565664, /* Version and data structure type */ 1, /* 0 if the list starts at 0; 1 if it starts at the element beyond 0 */ @@ -198732,6 +202172,14 @@ static const UV UNI_BPT__O_invlist[] = { /* for ASCII/Latin1 */ 0x2E27, 0x2E28, 0x2E29, + 0x2E55, + 0x2E56, + 0x2E57, + 0x2E58, + 0x2E59, + 0x2E5A, + 0x2E5B, + 0x2E5C, 0x3008, 0x3009, 0x300A, @@ -198776,7 +202224,7 @@ static const UV UNI_BPT__O_invlist[] = { /* for ASCII/Latin1 */ && '$' == 91 && '@' == 124 && '`' == 121 && '\n' == 21 static const UV UNI_BPT__O_invlist[] = { /* for EBCDIC 1047 */ - 121, /* Number of elements */ + 129, /* Number of elements */ 148565664, /* Version and data structure type */ 1, /* 0 if the list starts at 0; 1 if it starts at the element beyond 0 */ @@ -198867,6 +202315,14 @@ static const UV UNI_BPT__O_invlist[] = { /* for EBCDIC 1047 */ 0x2E27, 0x2E28, 0x2E29, + 0x2E55, + 0x2E56, + 0x2E57, + 0x2E58, + 0x2E59, + 0x2E5A, + 0x2E5B, + 0x2E5C, 0x3008, 0x3009, 0x300A, @@ -198911,7 +202367,7 @@ static const UV UNI_BPT__O_invlist[] = { /* for EBCDIC 1047 */ && '$' == 91 && '@' == 124 && '`' == 121 && '\n' == 37 static const UV UNI_BPT__O_invlist[] = { /* for EBCDIC 037 */ - 121, /* Number of elements */ + 129, /* Number of elements */ 148565664, /* Version and data structure type */ 1, /* 0 if the list starts at 0; 1 if it starts at the element beyond 0 */ @@ -199002,6 +202458,14 @@ static const UV UNI_BPT__O_invlist[] = { /* for EBCDIC 037 */ 0x2E27, 0x2E28, 0x2E29, + 0x2E55, + 0x2E56, + 0x2E57, + 0x2E58, + 0x2E59, + 0x2E5A, + 0x2E5B, + 0x2E5C, 0x3008, 0x3009, 0x300A, @@ -199049,7 +202513,7 @@ static const UV UNI_BRAH_invlist[] = { /* for all charsets */ 0x11000, 0x1104E, 0x11052, - 0x11070, + 0x11076, 0x1107F, 0x11080 }; @@ -199103,7 +202567,7 @@ static const UV UNI_BYZANTINEMUSIC_invlist[] = { /* for all charsets */ # if 'A' == 65 /* ASCII/Latin1 */ static const UV UNI_C_invlist[] = { /* for ASCII/Latin1 */ - 1357, /* Number of elements */ + 1401, /* Number of elements */ 148565664, /* Version and data structure type */ 0, /* 0 if the list starts at 0; 1 if it starts at the element beyond 0 */ @@ -199138,7 +202602,7 @@ static const UV UNI_C_invlist[] = { /* for ASCII/Latin1 */ 0x5F5, 0x606, 0x61C, - 0x61E, + 0x61D, 0x6DD, 0x6DE, 0x70E, @@ -199158,11 +202622,9 @@ static const UV UNI_C_invlist[] = { /* for ASCII/Latin1 */ 0x85F, 0x860, 0x86B, - 0x8A0, - 0x8B5, - 0x8B6, - 0x8C8, - 0x8D3, + 0x870, + 0x88F, + 0x898, 0x8E2, 0x8E3, 0x984, @@ -199320,7 +202782,7 @@ static const UV UNI_C_invlist[] = { /* for ASCII/Latin1 */ 0xC29, 0xC2A, 0xC3A, - 0xC3D, + 0xC3C, 0xC45, 0xC46, 0xC49, @@ -199330,6 +202792,8 @@ static const UV UNI_C_invlist[] = { /* for ASCII/Latin1 */ 0xC57, 0xC58, 0xC5B, + 0xC5D, + 0xC5E, 0xC60, 0xC64, 0xC66, @@ -199352,7 +202816,7 @@ static const UV UNI_C_invlist[] = { /* for ASCII/Latin1 */ 0xCCE, 0xCD5, 0xCD7, - 0xCDE, + 0xCDD, 0xCDF, 0xCE0, 0xCE4, @@ -199487,10 +202951,8 @@ static const UV UNI_C_invlist[] = { /* for ASCII/Latin1 */ 0x16A0, 0x16F9, 0x1700, - 0x170D, - 0x170E, - 0x1715, - 0x1720, + 0x1716, + 0x171F, 0x1737, 0x1740, 0x1754, @@ -199508,7 +202970,7 @@ static const UV UNI_C_invlist[] = { /* for ASCII/Latin1 */ 0x17FA, 0x1800, 0x180E, - 0x1810, + 0x180F, 0x181A, 0x1820, 0x1879, @@ -199547,11 +203009,11 @@ static const UV UNI_C_invlist[] = { /* for ASCII/Latin1 */ 0x1AA0, 0x1AAE, 0x1AB0, - 0x1AC1, + 0x1ACF, 0x1B00, - 0x1B4C, + 0x1B4D, 0x1B50, - 0x1B7D, + 0x1B7F, 0x1B80, 0x1BF4, 0x1BFC, @@ -199567,8 +203029,6 @@ static const UV UNI_C_invlist[] = { /* for ASCII/Latin1 */ 0x1CD0, 0x1CFB, 0x1D00, - 0x1DFA, - 0x1DFB, 0x1F16, 0x1F18, 0x1F1E, @@ -199613,7 +203073,7 @@ static const UV UNI_C_invlist[] = { /* for ASCII/Latin1 */ 0x2090, 0x209D, 0x20A0, - 0x20C0, + 0x20C1, 0x20D0, 0x20F1, 0x2100, @@ -199627,10 +203087,6 @@ static const UV UNI_C_invlist[] = { /* for ASCII/Latin1 */ 0x2B76, 0x2B96, 0x2B97, - 0x2C2F, - 0x2C30, - 0x2C5F, - 0x2C60, 0x2CF4, 0x2CF9, 0x2D26, @@ -199661,7 +203117,7 @@ static const UV UNI_C_invlist[] = { /* for ASCII/Latin1 */ 0x2DD8, 0x2DDF, 0x2DE0, - 0x2E53, + 0x2E5E, 0x2E80, 0x2E9A, 0x2E9B, @@ -199685,8 +203141,6 @@ static const UV UNI_C_invlist[] = { /* for ASCII/Latin1 */ 0x31F0, 0x321F, 0x3220, - 0x9FFD, - 0xA000, 0xA48D, 0xA490, 0xA4C7, @@ -199695,10 +203149,14 @@ static const UV UNI_C_invlist[] = { /* for ASCII/Latin1 */ 0xA640, 0xA6F8, 0xA700, - 0xA7C0, - 0xA7C2, 0xA7CB, - 0xA7F5, + 0xA7D0, + 0xA7D2, + 0xA7D3, + 0xA7D4, + 0xA7D5, + 0xA7DA, + 0xA7F2, 0xA82D, 0xA830, 0xA83A, @@ -199769,16 +203227,14 @@ static const UV UNI_C_invlist[] = { /* for ASCII/Latin1 */ 0xFB43, 0xFB45, 0xFB46, - 0xFBC2, + 0xFBC3, 0xFBD3, - 0xFD40, - 0xFD50, 0xFD90, 0xFD92, 0xFDC8, + 0xFDCF, + 0xFDD0, 0xFDF0, - 0xFDFE, - 0xFE00, 0xFE1A, 0xFE20, 0xFE53, @@ -199863,13 +203319,33 @@ static const UV UNI_C_invlist[] = { /* for ASCII/Latin1 */ 0x10530, 0x10564, 0x1056F, - 0x10570, + 0x1057B, + 0x1057C, + 0x1058B, + 0x1058C, + 0x10593, + 0x10594, + 0x10596, + 0x10597, + 0x105A2, + 0x105A3, + 0x105B2, + 0x105B3, + 0x105BA, + 0x105BB, + 0x105BD, 0x10600, 0x10737, 0x10740, 0x10756, 0x10760, 0x10768, + 0x10780, + 0x10786, + 0x10787, + 0x107B1, + 0x107B2, + 0x107BB, 0x10800, 0x10806, 0x10808, @@ -199956,6 +203432,8 @@ static const UV UNI_C_invlist[] = { /* for ASCII/Latin1 */ 0x10F28, 0x10F30, 0x10F5A, + 0x10F70, + 0x10F8A, 0x10FB0, 0x10FCC, 0x10FE0, @@ -199963,11 +203441,11 @@ static const UV UNI_C_invlist[] = { /* for ASCII/Latin1 */ 0x11000, 0x1104E, 0x11052, - 0x11070, + 0x11076, 0x1107F, 0x110BD, 0x110BE, - 0x110C2, + 0x110C3, 0x110D0, 0x110E9, 0x110F0, @@ -200049,7 +203527,7 @@ static const UV UNI_C_invlist[] = { /* for ASCII/Latin1 */ 0x11660, 0x1166D, 0x11680, - 0x116B9, + 0x116BA, 0x116C0, 0x116CA, 0x11700, @@ -200057,7 +203535,7 @@ static const UV UNI_C_invlist[] = { /* for ASCII/Latin1 */ 0x1171D, 0x1172C, 0x11730, - 0x11740, + 0x11747, 0x11800, 0x1183C, 0x118A0, @@ -200088,7 +203566,7 @@ static const UV UNI_C_invlist[] = { /* for ASCII/Latin1 */ 0x11A48, 0x11A50, 0x11AA3, - 0x11AC0, + 0x11AB0, 0x11AF9, 0x11C00, 0x11C09, @@ -200144,6 +203622,8 @@ static const UV UNI_C_invlist[] = { /* for ASCII/Latin1 */ 0x12475, 0x12480, 0x12544, + 0x12F90, + 0x12FF3, 0x13000, 0x1342F, 0x14400, @@ -200155,7 +203635,9 @@ static const UV UNI_C_invlist[] = { /* for ASCII/Latin1 */ 0x16A60, 0x16A6A, 0x16A6E, - 0x16A70, + 0x16ABF, + 0x16AC0, + 0x16ACA, 0x16AD0, 0x16AEE, 0x16AF0, @@ -200188,8 +203670,14 @@ static const UV UNI_C_invlist[] = { /* for ASCII/Latin1 */ 0x18CD6, 0x18D00, 0x18D09, + 0x1AFF0, + 0x1AFF4, + 0x1AFF5, + 0x1AFFC, + 0x1AFFD, + 0x1AFFF, 0x1B000, - 0x1B11F, + 0x1B123, 0x1B150, 0x1B153, 0x1B164, @@ -200206,6 +203694,12 @@ static const UV UNI_C_invlist[] = { /* for ASCII/Latin1 */ 0x1BC9A, 0x1BC9C, 0x1BCA0, + 0x1CF00, + 0x1CF2E, + 0x1CF30, + 0x1CF47, + 0x1CF50, + 0x1CFC4, 0x1D000, 0x1D0F6, 0x1D100, @@ -200213,7 +203707,7 @@ static const UV UNI_C_invlist[] = { /* for ASCII/Latin1 */ 0x1D129, 0x1D173, 0x1D17B, - 0x1D1E9, + 0x1D1EB, 0x1D200, 0x1D246, 0x1D2E0, @@ -200268,6 +203762,8 @@ static const UV UNI_C_invlist[] = { /* for ASCII/Latin1 */ 0x1DAA0, 0x1DAA1, 0x1DAB0, + 0x1DF00, + 0x1DF1F, 0x1E000, 0x1E007, 0x1E008, @@ -200286,10 +203782,20 @@ static const UV UNI_C_invlist[] = { /* for ASCII/Latin1 */ 0x1E14A, 0x1E14E, 0x1E150, + 0x1E290, + 0x1E2AF, 0x1E2C0, 0x1E2FA, 0x1E2FF, 0x1E300, + 0x1E7E0, + 0x1E7E7, + 0x1E7E8, + 0x1E7EC, + 0x1E7ED, + 0x1E7EF, + 0x1E7F0, + 0x1E7FF, 0x1E800, 0x1E8C5, 0x1E8C7, @@ -200398,7 +203904,7 @@ static const UV UNI_C_invlist[] = { /* for ASCII/Latin1 */ 0x1F266, 0x1F300, 0x1F6D8, - 0x1F6E0, + 0x1F6DD, 0x1F6ED, 0x1F6F0, 0x1F6FD, @@ -200408,6 +203914,8 @@ static const UV UNI_C_invlist[] = { /* for ASCII/Latin1 */ 0x1F7D9, 0x1F7E0, 0x1F7EC, + 0x1F7F0, + 0x1F7F1, 0x1F800, 0x1F80C, 0x1F810, @@ -200421,27 +203929,27 @@ static const UV UNI_C_invlist[] = { /* for ASCII/Latin1 */ 0x1F8B0, 0x1F8B2, 0x1F900, - 0x1F979, - 0x1F97A, - 0x1F9CC, - 0x1F9CD, 0x1FA54, 0x1FA60, 0x1FA6E, 0x1FA70, 0x1FA75, 0x1FA78, - 0x1FA7B, + 0x1FA7D, 0x1FA80, 0x1FA87, 0x1FA90, - 0x1FAA9, + 0x1FAAD, 0x1FAB0, - 0x1FAB7, + 0x1FABB, 0x1FAC0, - 0x1FAC3, + 0x1FAC6, 0x1FAD0, - 0x1FAD7, + 0x1FADA, + 0x1FAE0, + 0x1FAE8, + 0x1FAF0, + 0x1FAF7, 0x1FB00, 0x1FB93, 0x1FB94, @@ -200449,9 +203957,9 @@ static const UV UNI_C_invlist[] = { /* for ASCII/Latin1 */ 0x1FBF0, 0x1FBFA, 0x20000, - 0x2A6DE, + 0x2A6E0, 0x2A700, - 0x2B735, + 0x2B739, 0x2B740, 0x2B81E, 0x2B820, @@ -200474,7 +203982,7 @@ static const UV UNI_C_invlist[] = { /* for ASCII/Latin1 */ && '$' == 91 && '@' == 124 && '`' == 121 && '\n' == 21 static const UV UNI_C_invlist[] = { /* for EBCDIC 1047 */ - 1357, /* Number of elements */ + 1401, /* Number of elements */ 148565664, /* Version and data structure type */ 0, /* 0 if the list starts at 0; 1 if it starts at the element beyond 0 */ @@ -200509,7 +204017,7 @@ static const UV UNI_C_invlist[] = { /* for EBCDIC 1047 */ 0x5F5, 0x606, 0x61C, - 0x61E, + 0x61D, 0x6DD, 0x6DE, 0x70E, @@ -200529,11 +204037,9 @@ static const UV UNI_C_invlist[] = { /* for EBCDIC 1047 */ 0x85F, 0x860, 0x86B, - 0x8A0, - 0x8B5, - 0x8B6, - 0x8C8, - 0x8D3, + 0x870, + 0x88F, + 0x898, 0x8E2, 0x8E3, 0x984, @@ -200691,7 +204197,7 @@ static const UV UNI_C_invlist[] = { /* for EBCDIC 1047 */ 0xC29, 0xC2A, 0xC3A, - 0xC3D, + 0xC3C, 0xC45, 0xC46, 0xC49, @@ -200701,6 +204207,8 @@ static const UV UNI_C_invlist[] = { /* for EBCDIC 1047 */ 0xC57, 0xC58, 0xC5B, + 0xC5D, + 0xC5E, 0xC60, 0xC64, 0xC66, @@ -200723,7 +204231,7 @@ static const UV UNI_C_invlist[] = { /* for EBCDIC 1047 */ 0xCCE, 0xCD5, 0xCD7, - 0xCDE, + 0xCDD, 0xCDF, 0xCE0, 0xCE4, @@ -200858,10 +204366,8 @@ static const UV UNI_C_invlist[] = { /* for EBCDIC 1047 */ 0x16A0, 0x16F9, 0x1700, - 0x170D, - 0x170E, - 0x1715, - 0x1720, + 0x1716, + 0x171F, 0x1737, 0x1740, 0x1754, @@ -200879,7 +204385,7 @@ static const UV UNI_C_invlist[] = { /* for EBCDIC 1047 */ 0x17FA, 0x1800, 0x180E, - 0x1810, + 0x180F, 0x181A, 0x1820, 0x1879, @@ -200918,11 +204424,11 @@ static const UV UNI_C_invlist[] = { /* for EBCDIC 1047 */ 0x1AA0, 0x1AAE, 0x1AB0, - 0x1AC1, + 0x1ACF, 0x1B00, - 0x1B4C, + 0x1B4D, 0x1B50, - 0x1B7D, + 0x1B7F, 0x1B80, 0x1BF4, 0x1BFC, @@ -200938,8 +204444,6 @@ static const UV UNI_C_invlist[] = { /* for EBCDIC 1047 */ 0x1CD0, 0x1CFB, 0x1D00, - 0x1DFA, - 0x1DFB, 0x1F16, 0x1F18, 0x1F1E, @@ -200984,7 +204488,7 @@ static const UV UNI_C_invlist[] = { /* for EBCDIC 1047 */ 0x2090, 0x209D, 0x20A0, - 0x20C0, + 0x20C1, 0x20D0, 0x20F1, 0x2100, @@ -200998,10 +204502,6 @@ static const UV UNI_C_invlist[] = { /* for EBCDIC 1047 */ 0x2B76, 0x2B96, 0x2B97, - 0x2C2F, - 0x2C30, - 0x2C5F, - 0x2C60, 0x2CF4, 0x2CF9, 0x2D26, @@ -201032,7 +204532,7 @@ static const UV UNI_C_invlist[] = { /* for EBCDIC 1047 */ 0x2DD8, 0x2DDF, 0x2DE0, - 0x2E53, + 0x2E5E, 0x2E80, 0x2E9A, 0x2E9B, @@ -201056,8 +204556,6 @@ static const UV UNI_C_invlist[] = { /* for EBCDIC 1047 */ 0x31F0, 0x321F, 0x3220, - 0x9FFD, - 0xA000, 0xA48D, 0xA490, 0xA4C7, @@ -201066,10 +204564,14 @@ static const UV UNI_C_invlist[] = { /* for EBCDIC 1047 */ 0xA640, 0xA6F8, 0xA700, - 0xA7C0, - 0xA7C2, 0xA7CB, - 0xA7F5, + 0xA7D0, + 0xA7D2, + 0xA7D3, + 0xA7D4, + 0xA7D5, + 0xA7DA, + 0xA7F2, 0xA82D, 0xA830, 0xA83A, @@ -201140,16 +204642,14 @@ static const UV UNI_C_invlist[] = { /* for EBCDIC 1047 */ 0xFB43, 0xFB45, 0xFB46, - 0xFBC2, + 0xFBC3, 0xFBD3, - 0xFD40, - 0xFD50, 0xFD90, 0xFD92, 0xFDC8, + 0xFDCF, + 0xFDD0, 0xFDF0, - 0xFDFE, - 0xFE00, 0xFE1A, 0xFE20, 0xFE53, @@ -201234,13 +204734,33 @@ static const UV UNI_C_invlist[] = { /* for EBCDIC 1047 */ 0x10530, 0x10564, 0x1056F, - 0x10570, + 0x1057B, + 0x1057C, + 0x1058B, + 0x1058C, + 0x10593, + 0x10594, + 0x10596, + 0x10597, + 0x105A2, + 0x105A3, + 0x105B2, + 0x105B3, + 0x105BA, + 0x105BB, + 0x105BD, 0x10600, 0x10737, 0x10740, 0x10756, 0x10760, 0x10768, + 0x10780, + 0x10786, + 0x10787, + 0x107B1, + 0x107B2, + 0x107BB, 0x10800, 0x10806, 0x10808, @@ -201327,6 +204847,8 @@ static const UV UNI_C_invlist[] = { /* for EBCDIC 1047 */ 0x10F28, 0x10F30, 0x10F5A, + 0x10F70, + 0x10F8A, 0x10FB0, 0x10FCC, 0x10FE0, @@ -201334,11 +204856,11 @@ static const UV UNI_C_invlist[] = { /* for EBCDIC 1047 */ 0x11000, 0x1104E, 0x11052, - 0x11070, + 0x11076, 0x1107F, 0x110BD, 0x110BE, - 0x110C2, + 0x110C3, 0x110D0, 0x110E9, 0x110F0, @@ -201420,7 +204942,7 @@ static const UV UNI_C_invlist[] = { /* for EBCDIC 1047 */ 0x11660, 0x1166D, 0x11680, - 0x116B9, + 0x116BA, 0x116C0, 0x116CA, 0x11700, @@ -201428,7 +204950,7 @@ static const UV UNI_C_invlist[] = { /* for EBCDIC 1047 */ 0x1171D, 0x1172C, 0x11730, - 0x11740, + 0x11747, 0x11800, 0x1183C, 0x118A0, @@ -201459,7 +204981,7 @@ static const UV UNI_C_invlist[] = { /* for EBCDIC 1047 */ 0x11A48, 0x11A50, 0x11AA3, - 0x11AC0, + 0x11AB0, 0x11AF9, 0x11C00, 0x11C09, @@ -201515,6 +205037,8 @@ static const UV UNI_C_invlist[] = { /* for EBCDIC 1047 */ 0x12475, 0x12480, 0x12544, + 0x12F90, + 0x12FF3, 0x13000, 0x1342F, 0x14400, @@ -201526,7 +205050,9 @@ static const UV UNI_C_invlist[] = { /* for EBCDIC 1047 */ 0x16A60, 0x16A6A, 0x16A6E, - 0x16A70, + 0x16ABF, + 0x16AC0, + 0x16ACA, 0x16AD0, 0x16AEE, 0x16AF0, @@ -201559,8 +205085,14 @@ static const UV UNI_C_invlist[] = { /* for EBCDIC 1047 */ 0x18CD6, 0x18D00, 0x18D09, + 0x1AFF0, + 0x1AFF4, + 0x1AFF5, + 0x1AFFC, + 0x1AFFD, + 0x1AFFF, 0x1B000, - 0x1B11F, + 0x1B123, 0x1B150, 0x1B153, 0x1B164, @@ -201577,6 +205109,12 @@ static const UV UNI_C_invlist[] = { /* for EBCDIC 1047 */ 0x1BC9A, 0x1BC9C, 0x1BCA0, + 0x1CF00, + 0x1CF2E, + 0x1CF30, + 0x1CF47, + 0x1CF50, + 0x1CFC4, 0x1D000, 0x1D0F6, 0x1D100, @@ -201584,7 +205122,7 @@ static const UV UNI_C_invlist[] = { /* for EBCDIC 1047 */ 0x1D129, 0x1D173, 0x1D17B, - 0x1D1E9, + 0x1D1EB, 0x1D200, 0x1D246, 0x1D2E0, @@ -201639,6 +205177,8 @@ static const UV UNI_C_invlist[] = { /* for EBCDIC 1047 */ 0x1DAA0, 0x1DAA1, 0x1DAB0, + 0x1DF00, + 0x1DF1F, 0x1E000, 0x1E007, 0x1E008, @@ -201657,10 +205197,20 @@ static const UV UNI_C_invlist[] = { /* for EBCDIC 1047 */ 0x1E14A, 0x1E14E, 0x1E150, + 0x1E290, + 0x1E2AF, 0x1E2C0, 0x1E2FA, 0x1E2FF, 0x1E300, + 0x1E7E0, + 0x1E7E7, + 0x1E7E8, + 0x1E7EC, + 0x1E7ED, + 0x1E7EF, + 0x1E7F0, + 0x1E7FF, 0x1E800, 0x1E8C5, 0x1E8C7, @@ -201769,7 +205319,7 @@ static const UV UNI_C_invlist[] = { /* for EBCDIC 1047 */ 0x1F266, 0x1F300, 0x1F6D8, - 0x1F6E0, + 0x1F6DD, 0x1F6ED, 0x1F6F0, 0x1F6FD, @@ -201779,6 +205329,8 @@ static const UV UNI_C_invlist[] = { /* for EBCDIC 1047 */ 0x1F7D9, 0x1F7E0, 0x1F7EC, + 0x1F7F0, + 0x1F7F1, 0x1F800, 0x1F80C, 0x1F810, @@ -201792,27 +205344,27 @@ static const UV UNI_C_invlist[] = { /* for EBCDIC 1047 */ 0x1F8B0, 0x1F8B2, 0x1F900, - 0x1F979, - 0x1F97A, - 0x1F9CC, - 0x1F9CD, 0x1FA54, 0x1FA60, 0x1FA6E, 0x1FA70, 0x1FA75, 0x1FA78, - 0x1FA7B, + 0x1FA7D, 0x1FA80, 0x1FA87, 0x1FA90, - 0x1FAA9, + 0x1FAAD, 0x1FAB0, - 0x1FAB7, + 0x1FABB, 0x1FAC0, - 0x1FAC3, + 0x1FAC6, 0x1FAD0, - 0x1FAD7, + 0x1FADA, + 0x1FAE0, + 0x1FAE8, + 0x1FAF0, + 0x1FAF7, 0x1FB00, 0x1FB93, 0x1FB94, @@ -201820,9 +205372,9 @@ static const UV UNI_C_invlist[] = { /* for EBCDIC 1047 */ 0x1FBF0, 0x1FBFA, 0x20000, - 0x2A6DE, + 0x2A6E0, 0x2A700, - 0x2B735, + 0x2B739, 0x2B740, 0x2B81E, 0x2B820, @@ -201845,7 +205397,7 @@ static const UV UNI_C_invlist[] = { /* for EBCDIC 1047 */ && '$' == 91 && '@' == 124 && '`' == 121 && '\n' == 37 static const UV UNI_C_invlist[] = { /* for EBCDIC 037 */ - 1357, /* Number of elements */ + 1401, /* Number of elements */ 148565664, /* Version and data structure type */ 0, /* 0 if the list starts at 0; 1 if it starts at the element beyond 0 */ @@ -201880,7 +205432,7 @@ static const UV UNI_C_invlist[] = { /* for EBCDIC 037 */ 0x5F5, 0x606, 0x61C, - 0x61E, + 0x61D, 0x6DD, 0x6DE, 0x70E, @@ -201900,11 +205452,9 @@ static const UV UNI_C_invlist[] = { /* for EBCDIC 037 */ 0x85F, 0x860, 0x86B, - 0x8A0, - 0x8B5, - 0x8B6, - 0x8C8, - 0x8D3, + 0x870, + 0x88F, + 0x898, 0x8E2, 0x8E3, 0x984, @@ -202062,7 +205612,7 @@ static const UV UNI_C_invlist[] = { /* for EBCDIC 037 */ 0xC29, 0xC2A, 0xC3A, - 0xC3D, + 0xC3C, 0xC45, 0xC46, 0xC49, @@ -202072,6 +205622,8 @@ static const UV UNI_C_invlist[] = { /* for EBCDIC 037 */ 0xC57, 0xC58, 0xC5B, + 0xC5D, + 0xC5E, 0xC60, 0xC64, 0xC66, @@ -202094,7 +205646,7 @@ static const UV UNI_C_invlist[] = { /* for EBCDIC 037 */ 0xCCE, 0xCD5, 0xCD7, - 0xCDE, + 0xCDD, 0xCDF, 0xCE0, 0xCE4, @@ -202229,10 +205781,8 @@ static const UV UNI_C_invlist[] = { /* for EBCDIC 037 */ 0x16A0, 0x16F9, 0x1700, - 0x170D, - 0x170E, - 0x1715, - 0x1720, + 0x1716, + 0x171F, 0x1737, 0x1740, 0x1754, @@ -202250,7 +205800,7 @@ static const UV UNI_C_invlist[] = { /* for EBCDIC 037 */ 0x17FA, 0x1800, 0x180E, - 0x1810, + 0x180F, 0x181A, 0x1820, 0x1879, @@ -202289,11 +205839,11 @@ static const UV UNI_C_invlist[] = { /* for EBCDIC 037 */ 0x1AA0, 0x1AAE, 0x1AB0, - 0x1AC1, + 0x1ACF, 0x1B00, - 0x1B4C, + 0x1B4D, 0x1B50, - 0x1B7D, + 0x1B7F, 0x1B80, 0x1BF4, 0x1BFC, @@ -202309,8 +205859,6 @@ static const UV UNI_C_invlist[] = { /* for EBCDIC 037 */ 0x1CD0, 0x1CFB, 0x1D00, - 0x1DFA, - 0x1DFB, 0x1F16, 0x1F18, 0x1F1E, @@ -202355,7 +205903,7 @@ static const UV UNI_C_invlist[] = { /* for EBCDIC 037 */ 0x2090, 0x209D, 0x20A0, - 0x20C0, + 0x20C1, 0x20D0, 0x20F1, 0x2100, @@ -202369,10 +205917,6 @@ static const UV UNI_C_invlist[] = { /* for EBCDIC 037 */ 0x2B76, 0x2B96, 0x2B97, - 0x2C2F, - 0x2C30, - 0x2C5F, - 0x2C60, 0x2CF4, 0x2CF9, 0x2D26, @@ -202403,7 +205947,7 @@ static const UV UNI_C_invlist[] = { /* for EBCDIC 037 */ 0x2DD8, 0x2DDF, 0x2DE0, - 0x2E53, + 0x2E5E, 0x2E80, 0x2E9A, 0x2E9B, @@ -202427,8 +205971,6 @@ static const UV UNI_C_invlist[] = { /* for EBCDIC 037 */ 0x31F0, 0x321F, 0x3220, - 0x9FFD, - 0xA000, 0xA48D, 0xA490, 0xA4C7, @@ -202437,10 +205979,14 @@ static const UV UNI_C_invlist[] = { /* for EBCDIC 037 */ 0xA640, 0xA6F8, 0xA700, - 0xA7C0, - 0xA7C2, 0xA7CB, - 0xA7F5, + 0xA7D0, + 0xA7D2, + 0xA7D3, + 0xA7D4, + 0xA7D5, + 0xA7DA, + 0xA7F2, 0xA82D, 0xA830, 0xA83A, @@ -202511,16 +206057,14 @@ static const UV UNI_C_invlist[] = { /* for EBCDIC 037 */ 0xFB43, 0xFB45, 0xFB46, - 0xFBC2, + 0xFBC3, 0xFBD3, - 0xFD40, - 0xFD50, 0xFD90, 0xFD92, 0xFDC8, + 0xFDCF, + 0xFDD0, 0xFDF0, - 0xFDFE, - 0xFE00, 0xFE1A, 0xFE20, 0xFE53, @@ -202605,13 +206149,33 @@ static const UV UNI_C_invlist[] = { /* for EBCDIC 037 */ 0x10530, 0x10564, 0x1056F, - 0x10570, + 0x1057B, + 0x1057C, + 0x1058B, + 0x1058C, + 0x10593, + 0x10594, + 0x10596, + 0x10597, + 0x105A2, + 0x105A3, + 0x105B2, + 0x105B3, + 0x105BA, + 0x105BB, + 0x105BD, 0x10600, 0x10737, 0x10740, 0x10756, 0x10760, 0x10768, + 0x10780, + 0x10786, + 0x10787, + 0x107B1, + 0x107B2, + 0x107BB, 0x10800, 0x10806, 0x10808, @@ -202698,6 +206262,8 @@ static const UV UNI_C_invlist[] = { /* for EBCDIC 037 */ 0x10F28, 0x10F30, 0x10F5A, + 0x10F70, + 0x10F8A, 0x10FB0, 0x10FCC, 0x10FE0, @@ -202705,11 +206271,11 @@ static const UV UNI_C_invlist[] = { /* for EBCDIC 037 */ 0x11000, 0x1104E, 0x11052, - 0x11070, + 0x11076, 0x1107F, 0x110BD, 0x110BE, - 0x110C2, + 0x110C3, 0x110D0, 0x110E9, 0x110F0, @@ -202791,7 +206357,7 @@ static const UV UNI_C_invlist[] = { /* for EBCDIC 037 */ 0x11660, 0x1166D, 0x11680, - 0x116B9, + 0x116BA, 0x116C0, 0x116CA, 0x11700, @@ -202799,7 +206365,7 @@ static const UV UNI_C_invlist[] = { /* for EBCDIC 037 */ 0x1171D, 0x1172C, 0x11730, - 0x11740, + 0x11747, 0x11800, 0x1183C, 0x118A0, @@ -202830,7 +206396,7 @@ static const UV UNI_C_invlist[] = { /* for EBCDIC 037 */ 0x11A48, 0x11A50, 0x11AA3, - 0x11AC0, + 0x11AB0, 0x11AF9, 0x11C00, 0x11C09, @@ -202886,6 +206452,8 @@ static const UV UNI_C_invlist[] = { /* for EBCDIC 037 */ 0x12475, 0x12480, 0x12544, + 0x12F90, + 0x12FF3, 0x13000, 0x1342F, 0x14400, @@ -202897,7 +206465,9 @@ static const UV UNI_C_invlist[] = { /* for EBCDIC 037 */ 0x16A60, 0x16A6A, 0x16A6E, - 0x16A70, + 0x16ABF, + 0x16AC0, + 0x16ACA, 0x16AD0, 0x16AEE, 0x16AF0, @@ -202930,8 +206500,14 @@ static const UV UNI_C_invlist[] = { /* for EBCDIC 037 */ 0x18CD6, 0x18D00, 0x18D09, + 0x1AFF0, + 0x1AFF4, + 0x1AFF5, + 0x1AFFC, + 0x1AFFD, + 0x1AFFF, 0x1B000, - 0x1B11F, + 0x1B123, 0x1B150, 0x1B153, 0x1B164, @@ -202948,6 +206524,12 @@ static const UV UNI_C_invlist[] = { /* for EBCDIC 037 */ 0x1BC9A, 0x1BC9C, 0x1BCA0, + 0x1CF00, + 0x1CF2E, + 0x1CF30, + 0x1CF47, + 0x1CF50, + 0x1CFC4, 0x1D000, 0x1D0F6, 0x1D100, @@ -202955,7 +206537,7 @@ static const UV UNI_C_invlist[] = { /* for EBCDIC 037 */ 0x1D129, 0x1D173, 0x1D17B, - 0x1D1E9, + 0x1D1EB, 0x1D200, 0x1D246, 0x1D2E0, @@ -203010,6 +206592,8 @@ static const UV UNI_C_invlist[] = { /* for EBCDIC 037 */ 0x1DAA0, 0x1DAA1, 0x1DAB0, + 0x1DF00, + 0x1DF1F, 0x1E000, 0x1E007, 0x1E008, @@ -203028,10 +206612,20 @@ static const UV UNI_C_invlist[] = { /* for EBCDIC 037 */ 0x1E14A, 0x1E14E, 0x1E150, + 0x1E290, + 0x1E2AF, 0x1E2C0, 0x1E2FA, 0x1E2FF, 0x1E300, + 0x1E7E0, + 0x1E7E7, + 0x1E7E8, + 0x1E7EC, + 0x1E7ED, + 0x1E7EF, + 0x1E7F0, + 0x1E7FF, 0x1E800, 0x1E8C5, 0x1E8C7, @@ -203140,7 +206734,7 @@ static const UV UNI_C_invlist[] = { /* for EBCDIC 037 */ 0x1F266, 0x1F300, 0x1F6D8, - 0x1F6E0, + 0x1F6DD, 0x1F6ED, 0x1F6F0, 0x1F6FD, @@ -203150,6 +206744,8 @@ static const UV UNI_C_invlist[] = { /* for EBCDIC 037 */ 0x1F7D9, 0x1F7E0, 0x1F7EC, + 0x1F7F0, + 0x1F7F1, 0x1F800, 0x1F80C, 0x1F810, @@ -203163,27 +206759,27 @@ static const UV UNI_C_invlist[] = { /* for EBCDIC 037 */ 0x1F8B0, 0x1F8B2, 0x1F900, - 0x1F979, - 0x1F97A, - 0x1F9CC, - 0x1F9CD, 0x1FA54, 0x1FA60, 0x1FA6E, 0x1FA70, 0x1FA75, 0x1FA78, - 0x1FA7B, + 0x1FA7D, 0x1FA80, 0x1FA87, 0x1FA90, - 0x1FAA9, + 0x1FAAD, 0x1FAB0, - 0x1FAB7, + 0x1FABB, 0x1FAC0, - 0x1FAC3, + 0x1FAC6, 0x1FAD0, - 0x1FAD7, + 0x1FADA, + 0x1FAE0, + 0x1FAE8, + 0x1FAF0, + 0x1FAF7, 0x1FB00, 0x1FB93, 0x1FB94, @@ -203191,9 +206787,9 @@ static const UV UNI_C_invlist[] = { /* for EBCDIC 037 */ 0x1FBF0, 0x1FBFA, 0x20000, - 0x2A6DE, + 0x2A6E0, 0x2A700, - 0x2B735, + 0x2B739, 0x2B740, 0x2B81E, 0x2B820, @@ -203227,7 +206823,7 @@ static const UV UNI_CAKM_invlist[] = { /* for all charsets */ }; static const UV UNI_CANS_invlist[] = { /* for all charsets */ - 5, /* Number of elements */ + 7, /* Number of elements */ 148565664, /* Version and data structure type */ 1, /* 0 if the list starts at 0; 1 if it starts at the element beyond 0 */ @@ -203235,7 +206831,9 @@ static const UV UNI_CANS_invlist[] = { /* for all charsets */ 0x1400, 0x1680, 0x18B0, - 0x18F6 + 0x18F6, + 0x11AB0, + 0x11AC0 }; static const UV UNI_CARI_invlist[] = { /* for all charsets */ @@ -203249,7 +206847,7 @@ static const UV UNI_CARI_invlist[] = { /* for all charsets */ }; static const UV UNI_CCC__0_invlist[] = { /* for all charsets */ - 369, /* Number of elements */ + 377, /* Number of elements */ 148565664, /* Version and data structure type */ 0, /* 0 if the list starts at 0; 1 if it starts at the element beyond 0 */ @@ -203302,7 +206900,9 @@ static const UV UNI_CCC__0_invlist[] = { /* for all charsets */ 0x82E, 0x859, 0x85C, - 0x8D3, + 0x898, + 0x8A0, + 0x8CA, 0x8E2, 0x8E3, 0x900, @@ -203332,6 +206932,8 @@ static const UV UNI_CCC__0_invlist[] = { /* for all charsets */ 0xB4E, 0xBCD, 0xBCE, + 0xC3C, + 0xC3D, 0xC4D, 0xC4E, 0xC55, @@ -203385,7 +206987,7 @@ static const UV UNI_CCC__0_invlist[] = { /* for all charsets */ 0x135D, 0x1360, 0x1714, - 0x1715, + 0x1716, 0x1734, 0x1735, 0x17D2, @@ -203407,7 +207009,7 @@ static const UV UNI_CCC__0_invlist[] = { /* for all charsets */ 0x1AB0, 0x1ABE, 0x1ABF, - 0x1AC1, + 0x1ACF, 0x1B34, 0x1B35, 0x1B44, @@ -203435,8 +207037,6 @@ static const UV UNI_CCC__0_invlist[] = { /* for all charsets */ 0x1CF8, 0x1CFA, 0x1DC0, - 0x1DFA, - 0x1DFB, 0x1E00, 0x20D0, 0x20DD, @@ -203518,8 +207118,12 @@ static const UV UNI_CCC__0_invlist[] = { /* for all charsets */ 0x10EAD, 0x10F46, 0x10F51, + 0x10F82, + 0x10F86, 0x11046, 0x11047, + 0x11070, + 0x11071, 0x1107F, 0x11080, 0x110B9, @@ -203616,6 +207220,8 @@ static const UV UNI_CCC__0_invlist[] = { /* for all charsets */ 0x1E02B, 0x1E130, 0x1E137, + 0x1E2AE, + 0x1E2AF, 0x1E2EC, 0x1E2F0, 0x1E8D0, @@ -204063,7 +207669,7 @@ static const UV UNI_CCC__6_invlist[] = { /* for all charsets */ }; static const UV UNI_CCC__7_invlist[] = { /* for all charsets */ - 51, /* Number of elements */ + 53, /* Number of elements */ 148565664, /* Version and data structure type */ 1, /* 0 if the list starts at 0; 1 if it starts at the element beyond 0 */ @@ -204078,6 +207684,8 @@ static const UV UNI_CCC__7_invlist[] = { /* for all charsets */ 0xABD, 0xB3C, 0xB3D, + 0xC3C, + 0xC3D, 0xCBC, 0xCBD, 0x1037, @@ -204141,7 +207749,7 @@ static const UV UNI_CCC__84_invlist[] = { /* for all charsets */ }; static const UV UNI_CCC__9_invlist[] = { /* for all charsets */ - 109, /* Number of elements */ + 111, /* Number of elements */ 148565664, /* Version and data structure type */ 1, /* 0 if the list starts at 0; 1 if it starts at the element beyond 0 */ @@ -204177,7 +207785,7 @@ static const UV UNI_CCC__9_invlist[] = { /* for all charsets */ 0x1039, 0x103B, 0x1714, - 0x1715, + 0x1716, 0x1734, 0x1735, 0x17D2, @@ -204210,6 +207818,8 @@ static const UV UNI_CCC__9_invlist[] = { /* for all charsets */ 0x10A40, 0x11046, 0x11047, + 0x11070, + 0x11071, 0x1107F, 0x11080, 0x110B9, @@ -204267,7 +207877,7 @@ static const UV UNI_CCC__91_invlist[] = { /* for all charsets */ }; static const UV UNI_CCC__A_invlist[] = { /* for all charsets */ - 237, /* Number of elements */ + 255, /* Number of elements */ 148565664, /* Version and data structure type */ 1, /* 0 if the list starts at 0; 1 if it starts at the element beyond 0 */ @@ -204354,6 +207964,12 @@ static const UV UNI_CCC__A_invlist[] = { /* for all charsets */ 0x828, 0x829, 0x82E, + 0x898, + 0x899, + 0x89C, + 0x8A0, + 0x8CA, + 0x8CF, 0x8D4, 0x8E2, 0x8E4, @@ -204392,6 +208008,12 @@ static const UV UNI_CCC__A_invlist[] = { /* for all charsets */ 0x1AB5, 0x1ABB, 0x1ABD, + 0x1AC1, + 0x1AC3, + 0x1AC5, + 0x1ACA, + 0x1ACB, + 0x1ACF, 0x1B6B, 0x1B6C, 0x1B6D, @@ -204476,6 +208098,10 @@ static const UV UNI_CCC__A_invlist[] = { /* for all charsets */ 0x10F4B, 0x10F4C, 0x10F4D, + 0x10F82, + 0x10F83, + 0x10F84, + 0x10F85, 0x11100, 0x11103, 0x11366, @@ -204504,6 +208130,8 @@ static const UV UNI_CCC__A_invlist[] = { /* for all charsets */ 0x1E02B, 0x1E130, 0x1E137, + 0x1E2AE, + 0x1E2AF, 0x1E2EC, 0x1E2F0, 0x1E944, @@ -204545,7 +208173,7 @@ static const UV UNI_CCC__AR_invlist[] = { /* for all charsets */ }; static const UV UNI_CCC__B_invlist[] = { /* for all charsets */ - 157, /* Number of elements */ + 167, /* Number of elements */ 148565664, /* Version and data structure type */ 1, /* 0 if the list starts at 0; 1 if it starts at the element beyond 0 */ @@ -204616,7 +208244,9 @@ static const UV UNI_CCC__B_invlist[] = { /* for all charsets */ 0x7FE, 0x859, 0x85C, - 0x8D3, + 0x899, + 0x89C, + 0x8CF, 0x8D4, 0x8E3, 0x8E4, @@ -204654,6 +208284,10 @@ static const UV UNI_CCC__B_invlist[] = { /* for all charsets */ 0x1ABE, 0x1ABF, 0x1AC1, + 0x1AC3, + 0x1AC5, + 0x1ACA, + 0x1ACB, 0x1B6C, 0x1B6D, 0x1CD5, @@ -204700,6 +208334,10 @@ static const UV UNI_CCC__B_invlist[] = { /* for all charsets */ 0x10F4C, 0x10F4D, 0x10F51, + 0x10F83, + 0x10F84, + 0x10F85, + 0x10F86, 0x1D17B, 0x1D183, 0x1D18A, @@ -204709,11 +208347,13 @@ static const UV UNI_CCC__B_invlist[] = { /* for all charsets */ }; static const UV UNI_CCC__BL_invlist[] = { /* for all charsets */ - 3, /* Number of elements */ + 5, /* Number of elements */ 148565664, /* Version and data structure type */ 1, /* 0 if the list starts at 0; 1 if it starts at the element beyond 0 */ 0x0, + 0x1DFA, + 0x1DFB, 0x302A, 0x302B }; @@ -204871,7 +208511,7 @@ static const UV UNI_CE_invlist[] = { /* for all charsets */ # if 'A' == 65 /* ASCII/Latin1 */ static const UV UNI_CF_invlist[] = { /* for ASCII/Latin1 */ - 41, /* Number of elements */ + 43, /* Number of elements */ 148565664, /* Version and data structure type */ 1, /* 0 if the list starts at 0; 1 if it starts at the element beyond 0 */ @@ -204886,6 +208526,8 @@ static const UV UNI_CF_invlist[] = { /* for ASCII/Latin1 */ 0x6DE, 0x70F, 0x710, + 0x890, + 0x892, 0x8E2, 0x8E3, 0x180E, @@ -204926,7 +208568,7 @@ static const UV UNI_CF_invlist[] = { /* for ASCII/Latin1 */ && '$' == 91 && '@' == 124 && '`' == 121 && '\n' == 21 static const UV UNI_CF_invlist[] = { /* for EBCDIC 1047 */ - 41, /* Number of elements */ + 43, /* Number of elements */ 148565664, /* Version and data structure type */ 1, /* 0 if the list starts at 0; 1 if it starts at the element beyond 0 */ @@ -204941,6 +208583,8 @@ static const UV UNI_CF_invlist[] = { /* for EBCDIC 1047 */ 0x6DE, 0x70F, 0x710, + 0x890, + 0x892, 0x8E2, 0x8E3, 0x180E, @@ -204981,7 +208625,7 @@ static const UV UNI_CF_invlist[] = { /* for EBCDIC 1047 */ && '$' == 91 && '@' == 124 && '`' == 121 && '\n' == 37 static const UV UNI_CF_invlist[] = { /* for EBCDIC 037 */ - 41, /* Number of elements */ + 43, /* Number of elements */ 148565664, /* Version and data structure type */ 1, /* 0 if the list starts at 0; 1 if it starts at the element beyond 0 */ @@ -204996,6 +208640,8 @@ static const UV UNI_CF_invlist[] = { /* for EBCDIC 037 */ 0x6DE, 0x70F, 0x710, + 0x890, + 0x892, 0x8E2, 0x8E3, 0x180E, @@ -205093,7 +208739,7 @@ static const UV UNI_CHRS_invlist[] = { /* for all charsets */ # if 'A' == 65 /* ASCII/Latin1 */ static const UV UNI_CI_invlist[] = { /* for ASCII/Latin1 */ - 821, /* Number of elements */ + 855, /* Number of elements */ 148565664, /* Version and data structure type */ 1, /* 0 if the list starts at 0; 1 if it starts at the element beyond 0 */ @@ -205182,7 +208828,13 @@ static const UV UNI_CI_invlist[] = { /* for ASCII/Latin1 */ 0x82E, 0x859, 0x85C, - 0x8D3, + 0x888, + 0x889, + 0x890, + 0x892, + 0x898, + 0x8A0, + 0x8C9, 0x903, 0x93A, 0x93B, @@ -205264,6 +208916,8 @@ static const UV UNI_CI_invlist[] = { /* for ASCII/Latin1 */ 0xC01, 0xC04, 0xC05, + 0xC3C, + 0xC3D, 0xC3E, 0xC41, 0xC46, @@ -205367,7 +209021,7 @@ static const UV UNI_CI_invlist[] = { /* for ASCII/Latin1 */ 0x1712, 0x1715, 0x1732, - 0x1735, + 0x1734, 0x1752, 0x1754, 0x1772, @@ -205385,7 +209039,7 @@ static const UV UNI_CI_invlist[] = { /* for ASCII/Latin1 */ 0x17DD, 0x17DE, 0x180B, - 0x180F, + 0x1810, 0x1843, 0x1844, 0x1885, @@ -205421,7 +209075,7 @@ static const UV UNI_CI_invlist[] = { /* for ASCII/Latin1 */ 0x1AA7, 0x1AA8, 0x1AB0, - 0x1AC1, + 0x1ACF, 0x1B00, 0x1B04, 0x1B34, @@ -205473,8 +209127,6 @@ static const UV UNI_CI_invlist[] = { /* for ASCII/Latin1 */ 0x1D78, 0x1D79, 0x1D9B, - 0x1DFA, - 0x1DFB, 0x1E00, 0x1FBD, 0x1FBE, @@ -205556,6 +209208,8 @@ static const UV UNI_CI_invlist[] = { /* for ASCII/Latin1 */ 0xA771, 0xA788, 0xA78B, + 0xA7F2, + 0xA7F5, 0xA7F8, 0xA7FA, 0xA802, @@ -205635,7 +209289,7 @@ static const UV UNI_CI_invlist[] = { /* for ASCII/Latin1 */ 0xFB1E, 0xFB1F, 0xFBB2, - 0xFBC2, + 0xFBC3, 0xFE00, 0xFE10, 0xFE13, @@ -205672,6 +209326,12 @@ static const UV UNI_CI_invlist[] = { /* for ASCII/Latin1 */ 0x102E1, 0x10376, 0x1037B, + 0x10780, + 0x10786, + 0x10787, + 0x107B1, + 0x107B2, + 0x107BB, 0x10A01, 0x10A04, 0x10A05, @@ -205690,10 +209350,16 @@ static const UV UNI_CI_invlist[] = { /* for ASCII/Latin1 */ 0x10EAD, 0x10F46, 0x10F51, + 0x10F82, + 0x10F86, 0x11001, 0x11002, 0x11038, 0x11047, + 0x11070, + 0x11071, + 0x11073, + 0x11075, 0x1107F, 0x11082, 0x110B3, @@ -205702,6 +209368,8 @@ static const UV UNI_CI_invlist[] = { /* for ASCII/Latin1 */ 0x110BB, 0x110BD, 0x110BE, + 0x110C2, + 0x110C3, 0x110CD, 0x110CE, 0x11100, @@ -205866,10 +209534,20 @@ static const UV UNI_CI_invlist[] = { /* for ASCII/Latin1 */ 0x16FE2, 0x16FE3, 0x16FE5, + 0x1AFF0, + 0x1AFF4, + 0x1AFF5, + 0x1AFFC, + 0x1AFFD, + 0x1AFFF, 0x1BC9D, 0x1BC9F, 0x1BCA0, 0x1BCA4, + 0x1CF00, + 0x1CF2E, + 0x1CF30, + 0x1CF47, 0x1D167, 0x1D16A, 0x1D173, @@ -205904,6 +209582,8 @@ static const UV UNI_CI_invlist[] = { /* for ASCII/Latin1 */ 0x1E02B, 0x1E130, 0x1E13E, + 0x1E2AE, + 0x1E2AF, 0x1E2EC, 0x1E2F0, 0x1E8D0, @@ -205928,7 +209608,7 @@ static const UV UNI_CI_invlist[] = { /* for ASCII/Latin1 */ && '$' == 91 && '@' == 124 && '`' == 121 && '\n' == 21 static const UV UNI_CI_invlist[] = { /* for EBCDIC 1047 */ - 819, /* Number of elements */ + 853, /* Number of elements */ 148565664, /* Version and data structure type */ 1, /* 0 if the list starts at 0; 1 if it starts at the element beyond 0 */ @@ -206015,7 +209695,13 @@ static const UV UNI_CI_invlist[] = { /* for EBCDIC 1047 */ 0x82E, 0x859, 0x85C, - 0x8D3, + 0x888, + 0x889, + 0x890, + 0x892, + 0x898, + 0x8A0, + 0x8C9, 0x903, 0x93A, 0x93B, @@ -206097,6 +209783,8 @@ static const UV UNI_CI_invlist[] = { /* for EBCDIC 1047 */ 0xC01, 0xC04, 0xC05, + 0xC3C, + 0xC3D, 0xC3E, 0xC41, 0xC46, @@ -206200,7 +209888,7 @@ static const UV UNI_CI_invlist[] = { /* for EBCDIC 1047 */ 0x1712, 0x1715, 0x1732, - 0x1735, + 0x1734, 0x1752, 0x1754, 0x1772, @@ -206218,7 +209906,7 @@ static const UV UNI_CI_invlist[] = { /* for EBCDIC 1047 */ 0x17DD, 0x17DE, 0x180B, - 0x180F, + 0x1810, 0x1843, 0x1844, 0x1885, @@ -206254,7 +209942,7 @@ static const UV UNI_CI_invlist[] = { /* for EBCDIC 1047 */ 0x1AA7, 0x1AA8, 0x1AB0, - 0x1AC1, + 0x1ACF, 0x1B00, 0x1B04, 0x1B34, @@ -206306,8 +209994,6 @@ static const UV UNI_CI_invlist[] = { /* for EBCDIC 1047 */ 0x1D78, 0x1D79, 0x1D9B, - 0x1DFA, - 0x1DFB, 0x1E00, 0x1FBD, 0x1FBE, @@ -206389,6 +210075,8 @@ static const UV UNI_CI_invlist[] = { /* for EBCDIC 1047 */ 0xA771, 0xA788, 0xA78B, + 0xA7F2, + 0xA7F5, 0xA7F8, 0xA7FA, 0xA802, @@ -206468,7 +210156,7 @@ static const UV UNI_CI_invlist[] = { /* for EBCDIC 1047 */ 0xFB1E, 0xFB1F, 0xFBB2, - 0xFBC2, + 0xFBC3, 0xFE00, 0xFE10, 0xFE13, @@ -206505,6 +210193,12 @@ static const UV UNI_CI_invlist[] = { /* for EBCDIC 1047 */ 0x102E1, 0x10376, 0x1037B, + 0x10780, + 0x10786, + 0x10787, + 0x107B1, + 0x107B2, + 0x107BB, 0x10A01, 0x10A04, 0x10A05, @@ -206523,10 +210217,16 @@ static const UV UNI_CI_invlist[] = { /* for EBCDIC 1047 */ 0x10EAD, 0x10F46, 0x10F51, + 0x10F82, + 0x10F86, 0x11001, 0x11002, 0x11038, 0x11047, + 0x11070, + 0x11071, + 0x11073, + 0x11075, 0x1107F, 0x11082, 0x110B3, @@ -206535,6 +210235,8 @@ static const UV UNI_CI_invlist[] = { /* for EBCDIC 1047 */ 0x110BB, 0x110BD, 0x110BE, + 0x110C2, + 0x110C3, 0x110CD, 0x110CE, 0x11100, @@ -206699,10 +210401,20 @@ static const UV UNI_CI_invlist[] = { /* for EBCDIC 1047 */ 0x16FE2, 0x16FE3, 0x16FE5, + 0x1AFF0, + 0x1AFF4, + 0x1AFF5, + 0x1AFFC, + 0x1AFFD, + 0x1AFFF, 0x1BC9D, 0x1BC9F, 0x1BCA0, 0x1BCA4, + 0x1CF00, + 0x1CF2E, + 0x1CF30, + 0x1CF47, 0x1D167, 0x1D16A, 0x1D173, @@ -206737,6 +210449,8 @@ static const UV UNI_CI_invlist[] = { /* for EBCDIC 1047 */ 0x1E02B, 0x1E130, 0x1E13E, + 0x1E2AE, + 0x1E2AF, 0x1E2EC, 0x1E2F0, 0x1E8D0, @@ -206761,7 +210475,7 @@ static const UV UNI_CI_invlist[] = { /* for EBCDIC 1047 */ && '$' == 91 && '@' == 124 && '`' == 121 && '\n' == 37 static const UV UNI_CI_invlist[] = { /* for EBCDIC 037 */ - 817, /* Number of elements */ + 851, /* Number of elements */ 148565664, /* Version and data structure type */ 1, /* 0 if the list starts at 0; 1 if it starts at the element beyond 0 */ @@ -206846,7 +210560,13 @@ static const UV UNI_CI_invlist[] = { /* for EBCDIC 037 */ 0x82E, 0x859, 0x85C, - 0x8D3, + 0x888, + 0x889, + 0x890, + 0x892, + 0x898, + 0x8A0, + 0x8C9, 0x903, 0x93A, 0x93B, @@ -206928,6 +210648,8 @@ static const UV UNI_CI_invlist[] = { /* for EBCDIC 037 */ 0xC01, 0xC04, 0xC05, + 0xC3C, + 0xC3D, 0xC3E, 0xC41, 0xC46, @@ -207031,7 +210753,7 @@ static const UV UNI_CI_invlist[] = { /* for EBCDIC 037 */ 0x1712, 0x1715, 0x1732, - 0x1735, + 0x1734, 0x1752, 0x1754, 0x1772, @@ -207049,7 +210771,7 @@ static const UV UNI_CI_invlist[] = { /* for EBCDIC 037 */ 0x17DD, 0x17DE, 0x180B, - 0x180F, + 0x1810, 0x1843, 0x1844, 0x1885, @@ -207085,7 +210807,7 @@ static const UV UNI_CI_invlist[] = { /* for EBCDIC 037 */ 0x1AA7, 0x1AA8, 0x1AB0, - 0x1AC1, + 0x1ACF, 0x1B00, 0x1B04, 0x1B34, @@ -207137,8 +210859,6 @@ static const UV UNI_CI_invlist[] = { /* for EBCDIC 037 */ 0x1D78, 0x1D79, 0x1D9B, - 0x1DFA, - 0x1DFB, 0x1E00, 0x1FBD, 0x1FBE, @@ -207220,6 +210940,8 @@ static const UV UNI_CI_invlist[] = { /* for EBCDIC 037 */ 0xA771, 0xA788, 0xA78B, + 0xA7F2, + 0xA7F5, 0xA7F8, 0xA7FA, 0xA802, @@ -207299,7 +211021,7 @@ static const UV UNI_CI_invlist[] = { /* for EBCDIC 037 */ 0xFB1E, 0xFB1F, 0xFBB2, - 0xFBC2, + 0xFBC3, 0xFE00, 0xFE10, 0xFE13, @@ -207336,6 +211058,12 @@ static const UV UNI_CI_invlist[] = { /* for EBCDIC 037 */ 0x102E1, 0x10376, 0x1037B, + 0x10780, + 0x10786, + 0x10787, + 0x107B1, + 0x107B2, + 0x107BB, 0x10A01, 0x10A04, 0x10A05, @@ -207354,10 +211082,16 @@ static const UV UNI_CI_invlist[] = { /* for EBCDIC 037 */ 0x10EAD, 0x10F46, 0x10F51, + 0x10F82, + 0x10F86, 0x11001, 0x11002, 0x11038, 0x11047, + 0x11070, + 0x11071, + 0x11073, + 0x11075, 0x1107F, 0x11082, 0x110B3, @@ -207366,6 +211100,8 @@ static const UV UNI_CI_invlist[] = { /* for EBCDIC 037 */ 0x110BB, 0x110BD, 0x110BE, + 0x110C2, + 0x110C3, 0x110CD, 0x110CE, 0x11100, @@ -207530,10 +211266,20 @@ static const UV UNI_CI_invlist[] = { /* for EBCDIC 037 */ 0x16FE2, 0x16FE3, 0x16FE5, + 0x1AFF0, + 0x1AFF4, + 0x1AFF5, + 0x1AFFC, + 0x1AFFD, + 0x1AFFF, 0x1BC9D, 0x1BC9F, 0x1BCA0, 0x1BCA4, + 0x1CF00, + 0x1CF2E, + 0x1CF30, + 0x1CF47, 0x1D167, 0x1D16A, 0x1D173, @@ -207568,6 +211314,8 @@ static const UV UNI_CI_invlist[] = { /* for EBCDIC 037 */ 0x1E02B, 0x1E130, 0x1E13E, + 0x1E2AE, + 0x1E2AF, 0x1E2EC, 0x1E2F0, 0x1E8D0, @@ -207737,7 +211485,7 @@ static const UV UNI_CJKSYMBOLS_invlist[] = { /* for all charsets */ }; static const UV UNI_CN_invlist[] = { /* for all charsets */ - 1354, /* Number of elements */ + 1396, /* Number of elements */ 148565664, /* Version and data structure type */ 1, /* 0 if the list starts at 0; 1 if it starts at the element beyond 0 */ @@ -207766,8 +211514,6 @@ static const UV UNI_CN_invlist[] = { /* for all charsets */ 0x5EF, 0x5F5, 0x600, - 0x61D, - 0x61E, 0x70E, 0x70F, 0x74B, @@ -207785,11 +211531,11 @@ static const UV UNI_CN_invlist[] = { /* for all charsets */ 0x85F, 0x860, 0x86B, - 0x8A0, - 0x8B5, - 0x8B6, - 0x8C8, - 0x8D3, + 0x870, + 0x88F, + 0x890, + 0x892, + 0x898, 0x984, 0x985, 0x98D, @@ -207945,7 +211691,7 @@ static const UV UNI_CN_invlist[] = { /* for all charsets */ 0xC29, 0xC2A, 0xC3A, - 0xC3D, + 0xC3C, 0xC45, 0xC46, 0xC49, @@ -207955,6 +211701,8 @@ static const UV UNI_CN_invlist[] = { /* for all charsets */ 0xC57, 0xC58, 0xC5B, + 0xC5D, + 0xC5E, 0xC60, 0xC64, 0xC66, @@ -207977,7 +211725,7 @@ static const UV UNI_CN_invlist[] = { /* for all charsets */ 0xCCE, 0xCD5, 0xCD7, - 0xCDE, + 0xCDD, 0xCDF, 0xCE0, 0xCE4, @@ -208112,10 +211860,8 @@ static const UV UNI_CN_invlist[] = { /* for all charsets */ 0x16A0, 0x16F9, 0x1700, - 0x170D, - 0x170E, - 0x1715, - 0x1720, + 0x1716, + 0x171F, 0x1737, 0x1740, 0x1754, @@ -208132,8 +211878,6 @@ static const UV UNI_CN_invlist[] = { /* for all charsets */ 0x17F0, 0x17FA, 0x1800, - 0x180F, - 0x1810, 0x181A, 0x1820, 0x1879, @@ -208172,11 +211916,11 @@ static const UV UNI_CN_invlist[] = { /* for all charsets */ 0x1AA0, 0x1AAE, 0x1AB0, - 0x1AC1, + 0x1ACF, 0x1B00, - 0x1B4C, + 0x1B4D, 0x1B50, - 0x1B7D, + 0x1B7F, 0x1B80, 0x1BF4, 0x1BFC, @@ -208192,8 +211936,6 @@ static const UV UNI_CN_invlist[] = { /* for all charsets */ 0x1CD0, 0x1CFB, 0x1D00, - 0x1DFA, - 0x1DFB, 0x1F16, 0x1F18, 0x1F1E, @@ -208234,7 +211976,7 @@ static const UV UNI_CN_invlist[] = { /* for all charsets */ 0x2090, 0x209D, 0x20A0, - 0x20C0, + 0x20C1, 0x20D0, 0x20F1, 0x2100, @@ -208248,10 +211990,6 @@ static const UV UNI_CN_invlist[] = { /* for all charsets */ 0x2B76, 0x2B96, 0x2B97, - 0x2C2F, - 0x2C30, - 0x2C5F, - 0x2C60, 0x2CF4, 0x2CF9, 0x2D26, @@ -208282,7 +212020,7 @@ static const UV UNI_CN_invlist[] = { /* for all charsets */ 0x2DD8, 0x2DDF, 0x2DE0, - 0x2E53, + 0x2E5E, 0x2E80, 0x2E9A, 0x2E9B, @@ -208306,8 +212044,6 @@ static const UV UNI_CN_invlist[] = { /* for all charsets */ 0x31F0, 0x321F, 0x3220, - 0x9FFD, - 0xA000, 0xA48D, 0xA490, 0xA4C7, @@ -208316,10 +212052,14 @@ static const UV UNI_CN_invlist[] = { /* for all charsets */ 0xA640, 0xA6F8, 0xA700, - 0xA7C0, - 0xA7C2, 0xA7CB, - 0xA7F5, + 0xA7D0, + 0xA7D2, + 0xA7D3, + 0xA7D4, + 0xA7D5, + 0xA7DA, + 0xA7F2, 0xA82D, 0xA830, 0xA83A, @@ -208390,16 +212130,14 @@ static const UV UNI_CN_invlist[] = { /* for all charsets */ 0xFB43, 0xFB45, 0xFB46, - 0xFBC2, + 0xFBC3, 0xFBD3, - 0xFD40, - 0xFD50, 0xFD90, 0xFD92, 0xFDC8, + 0xFDCF, + 0xFDD0, 0xFDF0, - 0xFDFE, - 0xFE00, 0xFE1A, 0xFE20, 0xFE53, @@ -208486,13 +212224,33 @@ static const UV UNI_CN_invlist[] = { /* for all charsets */ 0x10530, 0x10564, 0x1056F, - 0x10570, + 0x1057B, + 0x1057C, + 0x1058B, + 0x1058C, + 0x10593, + 0x10594, + 0x10596, + 0x10597, + 0x105A2, + 0x105A3, + 0x105B2, + 0x105B3, + 0x105BA, + 0x105BB, + 0x105BD, 0x10600, 0x10737, 0x10740, 0x10756, 0x10760, 0x10768, + 0x10780, + 0x10786, + 0x10787, + 0x107B1, + 0x107B2, + 0x107BB, 0x10800, 0x10806, 0x10808, @@ -208579,6 +212337,8 @@ static const UV UNI_CN_invlist[] = { /* for all charsets */ 0x10F28, 0x10F30, 0x10F5A, + 0x10F70, + 0x10F8A, 0x10FB0, 0x10FCC, 0x10FE0, @@ -208586,9 +212346,9 @@ static const UV UNI_CN_invlist[] = { /* for all charsets */ 0x11000, 0x1104E, 0x11052, - 0x11070, + 0x11076, 0x1107F, - 0x110C2, + 0x110C3, 0x110CD, 0x110CE, 0x110D0, @@ -208672,7 +212432,7 @@ static const UV UNI_CN_invlist[] = { /* for all charsets */ 0x11660, 0x1166D, 0x11680, - 0x116B9, + 0x116BA, 0x116C0, 0x116CA, 0x11700, @@ -208680,7 +212440,7 @@ static const UV UNI_CN_invlist[] = { /* for all charsets */ 0x1171D, 0x1172C, 0x11730, - 0x11740, + 0x11747, 0x11800, 0x1183C, 0x118A0, @@ -208711,7 +212471,7 @@ static const UV UNI_CN_invlist[] = { /* for all charsets */ 0x11A48, 0x11A50, 0x11AA3, - 0x11AC0, + 0x11AB0, 0x11AF9, 0x11C00, 0x11C09, @@ -208767,6 +212527,8 @@ static const UV UNI_CN_invlist[] = { /* for all charsets */ 0x12475, 0x12480, 0x12544, + 0x12F90, + 0x12FF3, 0x13000, 0x1342F, 0x13430, @@ -208780,7 +212542,9 @@ static const UV UNI_CN_invlist[] = { /* for all charsets */ 0x16A60, 0x16A6A, 0x16A6E, - 0x16A70, + 0x16ABF, + 0x16AC0, + 0x16ACA, 0x16AD0, 0x16AEE, 0x16AF0, @@ -208813,8 +212577,14 @@ static const UV UNI_CN_invlist[] = { /* for all charsets */ 0x18CD6, 0x18D00, 0x18D09, + 0x1AFF0, + 0x1AFF4, + 0x1AFF5, + 0x1AFFC, + 0x1AFFD, + 0x1AFFF, 0x1B000, - 0x1B11F, + 0x1B123, 0x1B150, 0x1B153, 0x1B164, @@ -208831,12 +212601,18 @@ static const UV UNI_CN_invlist[] = { /* for all charsets */ 0x1BC9A, 0x1BC9C, 0x1BCA4, + 0x1CF00, + 0x1CF2E, + 0x1CF30, + 0x1CF47, + 0x1CF50, + 0x1CFC4, 0x1D000, 0x1D0F6, 0x1D100, 0x1D127, 0x1D129, - 0x1D1E9, + 0x1D1EB, 0x1D200, 0x1D246, 0x1D2E0, @@ -208891,6 +212667,8 @@ static const UV UNI_CN_invlist[] = { /* for all charsets */ 0x1DAA0, 0x1DAA1, 0x1DAB0, + 0x1DF00, + 0x1DF1F, 0x1E000, 0x1E007, 0x1E008, @@ -208909,10 +212687,20 @@ static const UV UNI_CN_invlist[] = { /* for all charsets */ 0x1E14A, 0x1E14E, 0x1E150, + 0x1E290, + 0x1E2AF, 0x1E2C0, 0x1E2FA, 0x1E2FF, 0x1E300, + 0x1E7E0, + 0x1E7E7, + 0x1E7E8, + 0x1E7EC, + 0x1E7ED, + 0x1E7EF, + 0x1E7F0, + 0x1E7FF, 0x1E800, 0x1E8C5, 0x1E8C7, @@ -209021,7 +212809,7 @@ static const UV UNI_CN_invlist[] = { /* for all charsets */ 0x1F266, 0x1F300, 0x1F6D8, - 0x1F6E0, + 0x1F6DD, 0x1F6ED, 0x1F6F0, 0x1F6FD, @@ -209031,6 +212819,8 @@ static const UV UNI_CN_invlist[] = { /* for all charsets */ 0x1F7D9, 0x1F7E0, 0x1F7EC, + 0x1F7F0, + 0x1F7F1, 0x1F800, 0x1F80C, 0x1F810, @@ -209044,27 +212834,27 @@ static const UV UNI_CN_invlist[] = { /* for all charsets */ 0x1F8B0, 0x1F8B2, 0x1F900, - 0x1F979, - 0x1F97A, - 0x1F9CC, - 0x1F9CD, 0x1FA54, 0x1FA60, 0x1FA6E, 0x1FA70, 0x1FA75, 0x1FA78, - 0x1FA7B, + 0x1FA7D, 0x1FA80, 0x1FA87, 0x1FA90, - 0x1FAA9, + 0x1FAAD, 0x1FAB0, - 0x1FAB7, + 0x1FABB, 0x1FAC0, - 0x1FAC3, + 0x1FAC6, 0x1FAD0, - 0x1FAD7, + 0x1FADA, + 0x1FAE0, + 0x1FAE8, + 0x1FAF0, + 0x1FAF7, 0x1FB00, 0x1FB93, 0x1FB94, @@ -209072,9 +212862,9 @@ static const UV UNI_CN_invlist[] = { /* for all charsets */ 0x1FBF0, 0x1FBFA, 0x20000, - 0x2A6DE, + 0x2A6E0, 0x2A700, - 0x2B735, + 0x2B739, 0x2B740, 0x2B81E, 0x2B820, @@ -209321,6 +213111,18 @@ static const UV UNI_COUNTINGROD_invlist[] = { /* for all charsets */ 0x1D380 }; +static const UV UNI_CPMN_invlist[] = { /* for all charsets */ + 5, /* Number of elements */ + 148565664, /* Version and data structure type */ + 1, /* 0 if the list starts at 0; + 1 if it starts at the element beyond 0 */ + 0x0, + 0x10100, + 0x10102, + 0x12F90, + 0x12FF3 +}; + static const UV UNI_CPRT_invlist[] = { /* for all charsets */ 19, /* Number of elements */ 148565664, /* Version and data structure type */ @@ -209370,7 +213172,7 @@ static const UV UNI_CURRENCYSYMBOLS_invlist[] = { /* for all charsets */ # if 'A' == 65 /* ASCII/Latin1 */ static const UV UNI_CWCF_invlist[] = { /* for ASCII/Latin1 */ - 1229, /* Number of elements */ + 1245, /* Number of elements */ 148565664, /* Version and data structure type */ 1, /* 0 if the list starts at 0; 1 if it starts at the element beyond 0 */ @@ -210246,7 +214048,7 @@ static const UV UNI_CWCF_invlist[] = { /* for ASCII/Latin1 */ 0x24B6, 0x24D0, 0x2C00, - 0x2C2F, + 0x2C30, 0x2C60, 0x2C61, 0x2C62, @@ -210575,12 +214377,20 @@ static const UV UNI_CWCF_invlist[] = { /* for ASCII/Latin1 */ 0xA7BD, 0xA7BE, 0xA7BF, + 0xA7C0, + 0xA7C1, 0xA7C2, 0xA7C3, 0xA7C4, 0xA7C8, 0xA7C9, 0xA7CA, + 0xA7D0, + 0xA7D1, + 0xA7D6, + 0xA7D7, + 0xA7D8, + 0xA7D9, 0xA7F5, 0xA7F6, 0xAB70, @@ -210595,6 +214405,14 @@ static const UV UNI_CWCF_invlist[] = { /* for ASCII/Latin1 */ 0x10428, 0x104B0, 0x104D4, + 0x10570, + 0x1057B, + 0x1057C, + 0x1058B, + 0x1058C, + 0x10593, + 0x10594, + 0x10596, 0x10C80, 0x10CB3, 0x118A0, @@ -210613,7 +214431,7 @@ static const UV UNI_CWCF_invlist[] = { /* for ASCII/Latin1 */ && '$' == 91 && '@' == 124 && '`' == 121 && '\n' == 21 static const UV UNI_CWCF_invlist[] = { /* for EBCDIC 1047 */ - 1249, /* Number of elements */ + 1265, /* Number of elements */ 148565664, /* Version and data structure type */ 1, /* 0 if the list starts at 0; 1 if it starts at the element beyond 0 */ @@ -211509,7 +215327,7 @@ static const UV UNI_CWCF_invlist[] = { /* for EBCDIC 1047 */ 0x24B6, 0x24D0, 0x2C00, - 0x2C2F, + 0x2C30, 0x2C60, 0x2C61, 0x2C62, @@ -211838,12 +215656,20 @@ static const UV UNI_CWCF_invlist[] = { /* for EBCDIC 1047 */ 0xA7BD, 0xA7BE, 0xA7BF, + 0xA7C0, + 0xA7C1, 0xA7C2, 0xA7C3, 0xA7C4, 0xA7C8, 0xA7C9, 0xA7CA, + 0xA7D0, + 0xA7D1, + 0xA7D6, + 0xA7D7, + 0xA7D8, + 0xA7D9, 0xA7F5, 0xA7F6, 0xAB70, @@ -211858,6 +215684,14 @@ static const UV UNI_CWCF_invlist[] = { /* for EBCDIC 1047 */ 0x10428, 0x104B0, 0x104D4, + 0x10570, + 0x1057B, + 0x1057C, + 0x1058B, + 0x1058C, + 0x10593, + 0x10594, + 0x10596, 0x10C80, 0x10CB3, 0x118A0, @@ -211876,7 +215710,7 @@ static const UV UNI_CWCF_invlist[] = { /* for EBCDIC 1047 */ && '$' == 91 && '@' == 124 && '`' == 121 && '\n' == 37 static const UV UNI_CWCF_invlist[] = { /* for EBCDIC 037 */ - 1245, /* Number of elements */ + 1261, /* Number of elements */ 148565664, /* Version and data structure type */ 1, /* 0 if the list starts at 0; 1 if it starts at the element beyond 0 */ @@ -212768,7 +216602,7 @@ static const UV UNI_CWCF_invlist[] = { /* for EBCDIC 037 */ 0x24B6, 0x24D0, 0x2C00, - 0x2C2F, + 0x2C30, 0x2C60, 0x2C61, 0x2C62, @@ -213097,12 +216931,20 @@ static const UV UNI_CWCF_invlist[] = { /* for EBCDIC 037 */ 0xA7BD, 0xA7BE, 0xA7BF, + 0xA7C0, + 0xA7C1, 0xA7C2, 0xA7C3, 0xA7C4, 0xA7C8, 0xA7C9, 0xA7CA, + 0xA7D0, + 0xA7D1, + 0xA7D6, + 0xA7D7, + 0xA7D8, + 0xA7D9, 0xA7F5, 0xA7F6, 0xAB70, @@ -213117,6 +216959,14 @@ static const UV UNI_CWCF_invlist[] = { /* for EBCDIC 037 */ 0x10428, 0x104B0, 0x104D4, + 0x10570, + 0x1057B, + 0x1057C, + 0x1058B, + 0x1058C, + 0x10593, + 0x10594, + 0x10596, 0x10C80, 0x10CB3, 0x118A0, @@ -213132,7 +216982,7 @@ static const UV UNI_CWCF_invlist[] = { /* for EBCDIC 037 */ # if 'A' == 65 /* ASCII/Latin1 */ static const UV UNI_CWCM_invlist[] = { /* for ASCII/Latin1 */ - 249, /* Number of elements */ + 263, /* Number of elements */ 148565664, /* Version and data structure type */ 1, /* 0 if the list starts at 0; 1 if it starts at the element beyond 0 */ @@ -213314,10 +217164,6 @@ static const UV UNI_CWCM_invlist[] = { /* for ASCII/Latin1 */ 0x24B6, 0x24EA, 0x2C00, - 0x2C2F, - 0x2C30, - 0x2C5F, - 0x2C60, 0x2C71, 0x2C72, 0x2C74, @@ -213352,9 +217198,11 @@ static const UV UNI_CWCM_invlist[] = { /* for ASCII/Latin1 */ 0xA796, 0xA7AF, 0xA7B0, - 0xA7C0, - 0xA7C2, 0xA7CB, + 0xA7D0, + 0xA7D2, + 0xA7D6, + 0xA7DA, 0xA7F5, 0xA7F7, 0xAB53, @@ -213375,6 +217223,22 @@ static const UV UNI_CWCM_invlist[] = { /* for ASCII/Latin1 */ 0x104D4, 0x104D8, 0x104FC, + 0x10570, + 0x1057B, + 0x1057C, + 0x1058B, + 0x1058C, + 0x10593, + 0x10594, + 0x10596, + 0x10597, + 0x105A2, + 0x105A3, + 0x105B2, + 0x105B3, + 0x105BA, + 0x105BB, + 0x105BD, 0x10C80, 0x10CB3, 0x10CC0, @@ -213395,7 +217259,7 @@ static const UV UNI_CWCM_invlist[] = { /* for ASCII/Latin1 */ && '$' == 91 && '@' == 124 && '`' == 121 && '\n' == 21 static const UV UNI_CWCM_invlist[] = { /* for EBCDIC 1047 */ - 281, /* Number of elements */ + 295, /* Number of elements */ 148565664, /* Version and data structure type */ 1, /* 0 if the list starts at 0; 1 if it starts at the element beyond 0 */ @@ -213609,10 +217473,6 @@ static const UV UNI_CWCM_invlist[] = { /* for EBCDIC 1047 */ 0x24B6, 0x24EA, 0x2C00, - 0x2C2F, - 0x2C30, - 0x2C5F, - 0x2C60, 0x2C71, 0x2C72, 0x2C74, @@ -213647,9 +217507,11 @@ static const UV UNI_CWCM_invlist[] = { /* for EBCDIC 1047 */ 0xA796, 0xA7AF, 0xA7B0, - 0xA7C0, - 0xA7C2, 0xA7CB, + 0xA7D0, + 0xA7D2, + 0xA7D6, + 0xA7DA, 0xA7F5, 0xA7F7, 0xAB53, @@ -213670,6 +217532,22 @@ static const UV UNI_CWCM_invlist[] = { /* for EBCDIC 1047 */ 0x104D4, 0x104D8, 0x104FC, + 0x10570, + 0x1057B, + 0x1057C, + 0x1058B, + 0x1058C, + 0x10593, + 0x10594, + 0x10596, + 0x10597, + 0x105A2, + 0x105A3, + 0x105B2, + 0x105B3, + 0x105BA, + 0x105BB, + 0x105BD, 0x10C80, 0x10CB3, 0x10CC0, @@ -213690,7 +217568,7 @@ static const UV UNI_CWCM_invlist[] = { /* for EBCDIC 1047 */ && '$' == 91 && '@' == 124 && '`' == 121 && '\n' == 37 static const UV UNI_CWCM_invlist[] = { /* for EBCDIC 037 */ - 277, /* Number of elements */ + 291, /* Number of elements */ 148565664, /* Version and data structure type */ 1, /* 0 if the list starts at 0; 1 if it starts at the element beyond 0 */ @@ -213900,10 +217778,6 @@ static const UV UNI_CWCM_invlist[] = { /* for EBCDIC 037 */ 0x24B6, 0x24EA, 0x2C00, - 0x2C2F, - 0x2C30, - 0x2C5F, - 0x2C60, 0x2C71, 0x2C72, 0x2C74, @@ -213938,9 +217812,11 @@ static const UV UNI_CWCM_invlist[] = { /* for EBCDIC 037 */ 0xA796, 0xA7AF, 0xA7B0, - 0xA7C0, - 0xA7C2, 0xA7CB, + 0xA7D0, + 0xA7D2, + 0xA7D6, + 0xA7DA, 0xA7F5, 0xA7F7, 0xAB53, @@ -213961,6 +217837,22 @@ static const UV UNI_CWCM_invlist[] = { /* for EBCDIC 037 */ 0x104D4, 0x104D8, 0x104FC, + 0x10570, + 0x1057B, + 0x1057C, + 0x1058B, + 0x1058C, + 0x10593, + 0x10594, + 0x10596, + 0x10597, + 0x105A2, + 0x105A3, + 0x105B2, + 0x105B3, + 0x105BA, + 0x105BB, + 0x105BD, 0x10C80, 0x10CB3, 0x10CC0, @@ -213978,7 +217870,7 @@ static const UV UNI_CWCM_invlist[] = { /* for EBCDIC 037 */ # if 'A' == 65 /* ASCII/Latin1 */ static const UV UNI_CWKCF_invlist[] = { /* for ASCII/Latin1 */ - 1655, /* Number of elements */ + 1677, /* Number of elements */ 148565664, /* Version and data structure type */ 1, /* 0 if the list starts at 0; 1 if it starts at the element beyond 0 */ @@ -214624,7 +218516,7 @@ static const UV UNI_CWKCF_invlist[] = { /* for ASCII/Latin1 */ 0x17B4, 0x17B6, 0x180B, - 0x180F, + 0x1810, 0x1C80, 0x1C89, 0x1C90, @@ -215026,7 +218918,7 @@ static const UV UNI_CWKCF_invlist[] = { /* for ASCII/Latin1 */ 0x2ADC, 0x2ADD, 0x2C00, - 0x2C2F, + 0x2C30, 0x2C60, 0x2C61, 0x2C62, @@ -215391,13 +219283,21 @@ static const UV UNI_CWKCF_invlist[] = { /* for ASCII/Latin1 */ 0xA7BD, 0xA7BE, 0xA7BF, + 0xA7C0, + 0xA7C1, 0xA7C2, 0xA7C3, 0xA7C4, 0xA7C8, 0xA7C9, 0xA7CA, - 0xA7F5, + 0xA7D0, + 0xA7D1, + 0xA7D6, + 0xA7D7, + 0xA7D8, + 0xA7D9, + 0xA7F2, 0xA7F6, 0xA7F8, 0xA7FA, @@ -215489,6 +219389,20 @@ static const UV UNI_CWKCF_invlist[] = { /* for ASCII/Latin1 */ 0x10428, 0x104B0, 0x104D4, + 0x10570, + 0x1057B, + 0x1057C, + 0x1058B, + 0x1058C, + 0x10593, + 0x10594, + 0x10596, + 0x10781, + 0x10786, + 0x10787, + 0x107B1, + 0x107B2, + 0x107BB, 0x10C80, 0x10CB3, 0x118A0, @@ -215647,7 +219561,7 @@ static const UV UNI_CWKCF_invlist[] = { /* for ASCII/Latin1 */ && '$' == 91 && '@' == 124 && '`' == 121 && '\n' == 21 static const UV UNI_CWKCF_invlist[] = { /* for EBCDIC 1047 */ - 1665, /* Number of elements */ + 1687, /* Number of elements */ 148565664, /* Version and data structure type */ 1, /* 0 if the list starts at 0; 1 if it starts at the element beyond 0 */ @@ -216303,7 +220217,7 @@ static const UV UNI_CWKCF_invlist[] = { /* for EBCDIC 1047 */ 0x17B4, 0x17B6, 0x180B, - 0x180F, + 0x1810, 0x1C80, 0x1C89, 0x1C90, @@ -216705,7 +220619,7 @@ static const UV UNI_CWKCF_invlist[] = { /* for EBCDIC 1047 */ 0x2ADC, 0x2ADD, 0x2C00, - 0x2C2F, + 0x2C30, 0x2C60, 0x2C61, 0x2C62, @@ -217070,13 +220984,21 @@ static const UV UNI_CWKCF_invlist[] = { /* for EBCDIC 1047 */ 0xA7BD, 0xA7BE, 0xA7BF, + 0xA7C0, + 0xA7C1, 0xA7C2, 0xA7C3, 0xA7C4, 0xA7C8, 0xA7C9, 0xA7CA, - 0xA7F5, + 0xA7D0, + 0xA7D1, + 0xA7D6, + 0xA7D7, + 0xA7D8, + 0xA7D9, + 0xA7F2, 0xA7F6, 0xA7F8, 0xA7FA, @@ -217168,6 +221090,20 @@ static const UV UNI_CWKCF_invlist[] = { /* for EBCDIC 1047 */ 0x10428, 0x104B0, 0x104D4, + 0x10570, + 0x1057B, + 0x1057C, + 0x1058B, + 0x1058C, + 0x10593, + 0x10594, + 0x10596, + 0x10781, + 0x10786, + 0x10787, + 0x107B1, + 0x107B2, + 0x107BB, 0x10C80, 0x10CB3, 0x118A0, @@ -217326,7 +221262,7 @@ static const UV UNI_CWKCF_invlist[] = { /* for EBCDIC 1047 */ && '$' == 91 && '@' == 124 && '`' == 121 && '\n' == 37 static const UV UNI_CWKCF_invlist[] = { /* for EBCDIC 037 */ - 1663, /* Number of elements */ + 1685, /* Number of elements */ 148565664, /* Version and data structure type */ 1, /* 0 if the list starts at 0; 1 if it starts at the element beyond 0 */ @@ -217980,7 +221916,7 @@ static const UV UNI_CWKCF_invlist[] = { /* for EBCDIC 037 */ 0x17B4, 0x17B6, 0x180B, - 0x180F, + 0x1810, 0x1C80, 0x1C89, 0x1C90, @@ -218382,7 +222318,7 @@ static const UV UNI_CWKCF_invlist[] = { /* for EBCDIC 037 */ 0x2ADC, 0x2ADD, 0x2C00, - 0x2C2F, + 0x2C30, 0x2C60, 0x2C61, 0x2C62, @@ -218747,13 +222683,21 @@ static const UV UNI_CWKCF_invlist[] = { /* for EBCDIC 037 */ 0xA7BD, 0xA7BE, 0xA7BF, + 0xA7C0, + 0xA7C1, 0xA7C2, 0xA7C3, 0xA7C4, 0xA7C8, 0xA7C9, 0xA7CA, - 0xA7F5, + 0xA7D0, + 0xA7D1, + 0xA7D6, + 0xA7D7, + 0xA7D8, + 0xA7D9, + 0xA7F2, 0xA7F6, 0xA7F8, 0xA7FA, @@ -218845,6 +222789,20 @@ static const UV UNI_CWKCF_invlist[] = { /* for EBCDIC 037 */ 0x10428, 0x104B0, 0x104D4, + 0x10570, + 0x1057B, + 0x1057C, + 0x1058B, + 0x1058C, + 0x10593, + 0x10594, + 0x10596, + 0x10781, + 0x10786, + 0x10787, + 0x107B1, + 0x107B2, + 0x107BB, 0x10C80, 0x10CB3, 0x118A0, @@ -219000,7 +222958,7 @@ static const UV UNI_CWKCF_invlist[] = { /* for EBCDIC 037 */ # if 'A' == 65 /* ASCII/Latin1 */ static const UV UNI_CWL_invlist[] = { /* for ASCII/Latin1 */ - 1203, /* Number of elements */ + 1219, /* Number of elements */ 148565664, /* Version and data structure type */ 1, /* 0 if the list starts at 0; 1 if it starts at the element beyond 0 */ @@ -219856,7 +223814,7 @@ static const UV UNI_CWL_invlist[] = { /* for ASCII/Latin1 */ 0x24B6, 0x24D0, 0x2C00, - 0x2C2F, + 0x2C30, 0x2C60, 0x2C61, 0x2C62, @@ -220185,12 +224143,20 @@ static const UV UNI_CWL_invlist[] = { /* for ASCII/Latin1 */ 0xA7BD, 0xA7BE, 0xA7BF, + 0xA7C0, + 0xA7C1, 0xA7C2, 0xA7C3, 0xA7C4, 0xA7C8, 0xA7C9, 0xA7CA, + 0xA7D0, + 0xA7D1, + 0xA7D6, + 0xA7D7, + 0xA7D8, + 0xA7D9, 0xA7F5, 0xA7F6, 0xFF21, @@ -220199,6 +224165,14 @@ static const UV UNI_CWL_invlist[] = { /* for ASCII/Latin1 */ 0x10428, 0x104B0, 0x104D4, + 0x10570, + 0x1057B, + 0x1057C, + 0x1058B, + 0x1058C, + 0x10593, + 0x10594, + 0x10596, 0x10C80, 0x10CB3, 0x118A0, @@ -220217,7 +224191,7 @@ static const UV UNI_CWL_invlist[] = { /* for ASCII/Latin1 */ && '$' == 91 && '@' == 124 && '`' == 121 && '\n' == 21 static const UV UNI_CWL_invlist[] = { /* for EBCDIC 1047 */ - 1221, /* Number of elements */ + 1237, /* Number of elements */ 148565664, /* Version and data structure type */ 1, /* 0 if the list starts at 0; 1 if it starts at the element beyond 0 */ @@ -221091,7 +225065,7 @@ static const UV UNI_CWL_invlist[] = { /* for EBCDIC 1047 */ 0x24B6, 0x24D0, 0x2C00, - 0x2C2F, + 0x2C30, 0x2C60, 0x2C61, 0x2C62, @@ -221420,12 +225394,20 @@ static const UV UNI_CWL_invlist[] = { /* for EBCDIC 1047 */ 0xA7BD, 0xA7BE, 0xA7BF, + 0xA7C0, + 0xA7C1, 0xA7C2, 0xA7C3, 0xA7C4, 0xA7C8, 0xA7C9, 0xA7CA, + 0xA7D0, + 0xA7D1, + 0xA7D6, + 0xA7D7, + 0xA7D8, + 0xA7D9, 0xA7F5, 0xA7F6, 0xFF21, @@ -221434,6 +225416,14 @@ static const UV UNI_CWL_invlist[] = { /* for EBCDIC 1047 */ 0x10428, 0x104B0, 0x104D4, + 0x10570, + 0x1057B, + 0x1057C, + 0x1058B, + 0x1058C, + 0x10593, + 0x10594, + 0x10596, 0x10C80, 0x10CB3, 0x118A0, @@ -221452,7 +225442,7 @@ static const UV UNI_CWL_invlist[] = { /* for EBCDIC 1047 */ && '$' == 91 && '@' == 124 && '`' == 121 && '\n' == 37 static const UV UNI_CWL_invlist[] = { /* for EBCDIC 037 */ - 1217, /* Number of elements */ + 1233, /* Number of elements */ 148565664, /* Version and data structure type */ 1, /* 0 if the list starts at 0; 1 if it starts at the element beyond 0 */ @@ -222322,7 +226312,7 @@ static const UV UNI_CWL_invlist[] = { /* for EBCDIC 037 */ 0x24B6, 0x24D0, 0x2C00, - 0x2C2F, + 0x2C30, 0x2C60, 0x2C61, 0x2C62, @@ -222651,12 +226641,20 @@ static const UV UNI_CWL_invlist[] = { /* for EBCDIC 037 */ 0xA7BD, 0xA7BE, 0xA7BF, + 0xA7C0, + 0xA7C1, 0xA7C2, 0xA7C3, 0xA7C4, 0xA7C8, 0xA7C9, 0xA7CA, + 0xA7D0, + 0xA7D1, + 0xA7D6, + 0xA7D7, + 0xA7D8, + 0xA7D9, 0xA7F5, 0xA7F6, 0xFF21, @@ -222665,6 +226663,14 @@ static const UV UNI_CWL_invlist[] = { /* for EBCDIC 037 */ 0x10428, 0x104B0, 0x104D4, + 0x10570, + 0x1057B, + 0x1057C, + 0x1058B, + 0x1058C, + 0x10593, + 0x10594, + 0x10596, 0x10C80, 0x10CB3, 0x118A0, @@ -222680,7 +226686,7 @@ static const UV UNI_CWL_invlist[] = { /* for EBCDIC 037 */ # if 'A' == 65 /* ASCII/Latin1 */ static const UV UNI_CWT_invlist[] = { /* for ASCII/Latin1 */ - 1237, /* Number of elements */ + 1253, /* Number of elements */ 148565664, /* Version and data structure type */ 1, /* 0 if the list starts at 0; 1 if it starts at the element beyond 0 */ @@ -223562,7 +227568,7 @@ static const UV UNI_CWT_invlist[] = { /* for ASCII/Latin1 */ 0x24D0, 0x24EA, 0x2C30, - 0x2C5F, + 0x2C60, 0x2C61, 0x2C62, 0x2C65, @@ -223891,12 +227897,20 @@ static const UV UNI_CWT_invlist[] = { /* for ASCII/Latin1 */ 0xA7BE, 0xA7BF, 0xA7C0, + 0xA7C1, + 0xA7C2, 0xA7C3, 0xA7C4, 0xA7C8, 0xA7C9, 0xA7CA, 0xA7CB, + 0xA7D1, + 0xA7D2, + 0xA7D7, + 0xA7D8, + 0xA7D9, + 0xA7DA, 0xA7F6, 0xA7F7, 0xAB53, @@ -223913,6 +227927,14 @@ static const UV UNI_CWT_invlist[] = { /* for ASCII/Latin1 */ 0x10450, 0x104D8, 0x104FC, + 0x10597, + 0x105A2, + 0x105A3, + 0x105B2, + 0x105B3, + 0x105BA, + 0x105BB, + 0x105BD, 0x10CC0, 0x10CF3, 0x118C0, @@ -223931,7 +227953,7 @@ static const UV UNI_CWT_invlist[] = { /* for ASCII/Latin1 */ && '$' == 91 && '@' == 124 && '`' == 121 && '\n' == 21 static const UV UNI_CWT_invlist[] = { /* for EBCDIC 1047 */ - 1251, /* Number of elements */ + 1267, /* Number of elements */ 148565664, /* Version and data structure type */ 1, /* 0 if the list starts at 0; 1 if it starts at the element beyond 0 */ @@ -224827,7 +228849,7 @@ static const UV UNI_CWT_invlist[] = { /* for EBCDIC 1047 */ 0x24D0, 0x24EA, 0x2C30, - 0x2C5F, + 0x2C60, 0x2C61, 0x2C62, 0x2C65, @@ -225156,12 +229178,20 @@ static const UV UNI_CWT_invlist[] = { /* for EBCDIC 1047 */ 0xA7BE, 0xA7BF, 0xA7C0, + 0xA7C1, + 0xA7C2, 0xA7C3, 0xA7C4, 0xA7C8, 0xA7C9, 0xA7CA, 0xA7CB, + 0xA7D1, + 0xA7D2, + 0xA7D7, + 0xA7D8, + 0xA7D9, + 0xA7DA, 0xA7F6, 0xA7F7, 0xAB53, @@ -225178,6 +229208,14 @@ static const UV UNI_CWT_invlist[] = { /* for EBCDIC 1047 */ 0x10450, 0x104D8, 0x104FC, + 0x10597, + 0x105A2, + 0x105A3, + 0x105B2, + 0x105B3, + 0x105BA, + 0x105BB, + 0x105BD, 0x10CC0, 0x10CF3, 0x118C0, @@ -225196,7 +229234,7 @@ static const UV UNI_CWT_invlist[] = { /* for EBCDIC 1047 */ && '$' == 91 && '@' == 124 && '`' == 121 && '\n' == 37 static const UV UNI_CWT_invlist[] = { /* for EBCDIC 037 */ - 1251, /* Number of elements */ + 1267, /* Number of elements */ 148565664, /* Version and data structure type */ 1, /* 0 if the list starts at 0; 1 if it starts at the element beyond 0 */ @@ -226092,7 +230130,7 @@ static const UV UNI_CWT_invlist[] = { /* for EBCDIC 037 */ 0x24D0, 0x24EA, 0x2C30, - 0x2C5F, + 0x2C60, 0x2C61, 0x2C62, 0x2C65, @@ -226421,12 +230459,20 @@ static const UV UNI_CWT_invlist[] = { /* for EBCDIC 037 */ 0xA7BE, 0xA7BF, 0xA7C0, + 0xA7C1, + 0xA7C2, 0xA7C3, 0xA7C4, 0xA7C8, 0xA7C9, 0xA7CA, 0xA7CB, + 0xA7D1, + 0xA7D2, + 0xA7D7, + 0xA7D8, + 0xA7D9, + 0xA7DA, 0xA7F6, 0xA7F7, 0xAB53, @@ -226443,6 +230489,14 @@ static const UV UNI_CWT_invlist[] = { /* for EBCDIC 037 */ 0x10450, 0x104D8, 0x104FC, + 0x10597, + 0x105A2, + 0x105A3, + 0x105B2, + 0x105B3, + 0x105BA, + 0x105BB, + 0x105BD, 0x10CC0, 0x10CF3, 0x118C0, @@ -226458,7 +230512,7 @@ static const UV UNI_CWT_invlist[] = { /* for EBCDIC 037 */ # if 'A' == 65 /* ASCII/Latin1 */ static const UV UNI_CWU_invlist[] = { /* for ASCII/Latin1 */ - 1239, /* Number of elements */ + 1255, /* Number of elements */ 148565664, /* Version and data structure type */ 1, /* 0 if the list starts at 0; 1 if it starts at the element beyond 0 */ @@ -227342,7 +231396,7 @@ static const UV UNI_CWU_invlist[] = { /* for ASCII/Latin1 */ 0x24D0, 0x24EA, 0x2C30, - 0x2C5F, + 0x2C60, 0x2C61, 0x2C62, 0x2C65, @@ -227671,12 +231725,20 @@ static const UV UNI_CWU_invlist[] = { /* for ASCII/Latin1 */ 0xA7BE, 0xA7BF, 0xA7C0, + 0xA7C1, + 0xA7C2, 0xA7C3, 0xA7C4, 0xA7C8, 0xA7C9, 0xA7CA, 0xA7CB, + 0xA7D1, + 0xA7D2, + 0xA7D7, + 0xA7D8, + 0xA7D9, + 0xA7DA, 0xA7F6, 0xA7F7, 0xAB53, @@ -227693,6 +231755,14 @@ static const UV UNI_CWU_invlist[] = { /* for ASCII/Latin1 */ 0x10450, 0x104D8, 0x104FC, + 0x10597, + 0x105A2, + 0x105A3, + 0x105B2, + 0x105B3, + 0x105BA, + 0x105BB, + 0x105BD, 0x10CC0, 0x10CF3, 0x118C0, @@ -227711,7 +231781,7 @@ static const UV UNI_CWU_invlist[] = { /* for ASCII/Latin1 */ && '$' == 91 && '@' == 124 && '`' == 121 && '\n' == 21 static const UV UNI_CWU_invlist[] = { /* for EBCDIC 1047 */ - 1253, /* Number of elements */ + 1269, /* Number of elements */ 148565664, /* Version and data structure type */ 1, /* 0 if the list starts at 0; 1 if it starts at the element beyond 0 */ @@ -228609,7 +232679,7 @@ static const UV UNI_CWU_invlist[] = { /* for EBCDIC 1047 */ 0x24D0, 0x24EA, 0x2C30, - 0x2C5F, + 0x2C60, 0x2C61, 0x2C62, 0x2C65, @@ -228938,12 +233008,20 @@ static const UV UNI_CWU_invlist[] = { /* for EBCDIC 1047 */ 0xA7BE, 0xA7BF, 0xA7C0, + 0xA7C1, + 0xA7C2, 0xA7C3, 0xA7C4, 0xA7C8, 0xA7C9, 0xA7CA, 0xA7CB, + 0xA7D1, + 0xA7D2, + 0xA7D7, + 0xA7D8, + 0xA7D9, + 0xA7DA, 0xA7F6, 0xA7F7, 0xAB53, @@ -228960,6 +233038,14 @@ static const UV UNI_CWU_invlist[] = { /* for EBCDIC 1047 */ 0x10450, 0x104D8, 0x104FC, + 0x10597, + 0x105A2, + 0x105A3, + 0x105B2, + 0x105B3, + 0x105BA, + 0x105BB, + 0x105BD, 0x10CC0, 0x10CF3, 0x118C0, @@ -228978,7 +233064,7 @@ static const UV UNI_CWU_invlist[] = { /* for EBCDIC 1047 */ && '$' == 91 && '@' == 124 && '`' == 121 && '\n' == 37 static const UV UNI_CWU_invlist[] = { /* for EBCDIC 037 */ - 1253, /* Number of elements */ + 1269, /* Number of elements */ 148565664, /* Version and data structure type */ 1, /* 0 if the list starts at 0; 1 if it starts at the element beyond 0 */ @@ -229876,7 +233962,7 @@ static const UV UNI_CWU_invlist[] = { /* for EBCDIC 037 */ 0x24D0, 0x24EA, 0x2C30, - 0x2C5F, + 0x2C60, 0x2C61, 0x2C62, 0x2C65, @@ -230205,12 +234291,20 @@ static const UV UNI_CWU_invlist[] = { /* for EBCDIC 037 */ 0xA7BE, 0xA7BF, 0xA7C0, + 0xA7C1, + 0xA7C2, 0xA7C3, 0xA7C4, 0xA7C8, 0xA7C9, 0xA7CA, 0xA7CB, + 0xA7D1, + 0xA7D2, + 0xA7D7, + 0xA7D8, + 0xA7D9, + 0xA7DA, 0xA7F6, 0xA7F7, 0xAB53, @@ -230227,6 +234321,14 @@ static const UV UNI_CWU_invlist[] = { /* for EBCDIC 037 */ 0x10450, 0x104D8, 0x104FC, + 0x10597, + 0x105A2, + 0x105A3, + 0x105B2, + 0x105B3, + 0x105BA, + 0x105BB, + 0x105BD, 0x10CC0, 0x10CF3, 0x118C0, @@ -230318,7 +234420,7 @@ static const UV UNI_CYRL_invlist[] = { /* for all charsets */ # if 'A' == 65 /* ASCII/Latin1 */ static const UV UNI_DASH_invlist[] = { /* for ASCII/Latin1 */ - 45, /* Number of elements */ + 47, /* Number of elements */ 148565664, /* Version and data structure type */ 1, /* 0 if the list starts at 0; 1 if it starts at the element beyond 0 */ @@ -230351,6 +234453,8 @@ static const UV UNI_DASH_invlist[] = { /* for ASCII/Latin1 */ 0x2E3C, 0x2E40, 0x2E41, + 0x2E5D, + 0x2E5E, 0x301C, 0x301D, 0x3030, @@ -230377,7 +234481,7 @@ static const UV UNI_DASH_invlist[] = { /* for ASCII/Latin1 */ && '$' == 91 && '@' == 124 && '`' == 121 && '\n' == 21 static const UV UNI_DASH_invlist[] = { /* for EBCDIC 1047 */ - 45, /* Number of elements */ + 47, /* Number of elements */ 148565664, /* Version and data structure type */ 1, /* 0 if the list starts at 0; 1 if it starts at the element beyond 0 */ @@ -230410,6 +234514,8 @@ static const UV UNI_DASH_invlist[] = { /* for EBCDIC 1047 */ 0x2E3C, 0x2E40, 0x2E41, + 0x2E5D, + 0x2E5E, 0x301C, 0x301D, 0x3030, @@ -230436,7 +234542,7 @@ static const UV UNI_DASH_invlist[] = { /* for EBCDIC 1047 */ && '$' == 91 && '@' == 124 && '`' == 121 && '\n' == 37 static const UV UNI_DASH_invlist[] = { /* for EBCDIC 037 */ - 45, /* Number of elements */ + 47, /* Number of elements */ 148565664, /* Version and data structure type */ 1, /* 0 if the list starts at 0; 1 if it starts at the element beyond 0 */ @@ -230469,6 +234575,8 @@ static const UV UNI_DASH_invlist[] = { /* for EBCDIC 037 */ 0x2E3C, 0x2E40, 0x2E41, + 0x2E5D, + 0x2E5E, 0x301C, 0x301D, 0x3030, @@ -230564,7 +234672,7 @@ static const UV UNI_DI_invlist[] = { /* for ASCII/Latin1 */ 0x17B4, 0x17B6, 0x180B, - 0x180F, + 0x1810, 0x200B, 0x2010, 0x202A, @@ -230613,7 +234721,7 @@ static const UV UNI_DI_invlist[] = { /* for EBCDIC 1047 */ 0x17B4, 0x17B6, 0x180B, - 0x180F, + 0x1810, 0x200B, 0x2010, 0x202A, @@ -230662,7 +234770,7 @@ static const UV UNI_DI_invlist[] = { /* for EBCDIC 037 */ 0x17B4, 0x17B6, 0x180B, - 0x180F, + 0x1810, 0x200B, 0x2010, 0x202A, @@ -230692,7 +234800,7 @@ static const UV UNI_DI_invlist[] = { /* for EBCDIC 037 */ # if 'A' == 65 /* ASCII/Latin1 */ static const UV UNI_DIA_invlist[] = { /* for ASCII/Latin1 */ - 353, /* Number of elements */ + 385, /* Number of elements */ 148565664, /* Version and data structure type */ 1, /* 0 if the list starts at 0; 1 if it starts at the element beyond 0 */ @@ -230753,6 +234861,10 @@ static const UV UNI_DIA_invlist[] = { /* for ASCII/Latin1 */ 0x7F6, 0x818, 0x81A, + 0x898, + 0x8A0, + 0x8C9, + 0x8D3, 0x8E3, 0x8FF, 0x93C, @@ -230785,6 +234897,8 @@ static const UV UNI_DIA_invlist[] = { /* for ASCII/Latin1 */ 0xB56, 0xBCD, 0xBCE, + 0xC3C, + 0xC3D, 0xC4D, 0xC4E, 0xCBC, @@ -230837,6 +234951,8 @@ static const UV UNI_DIA_invlist[] = { /* for ASCII/Latin1 */ 0x109C, 0x135D, 0x1360, + 0x1714, + 0x1716, 0x17C9, 0x17D4, 0x17DD, @@ -230848,7 +234964,9 @@ static const UV UNI_DIA_invlist[] = { /* for ASCII/Latin1 */ 0x1A7F, 0x1A80, 0x1AB0, - 0x1ABE, + 0x1ABF, + 0x1AC1, + 0x1ACC, 0x1B34, 0x1B35, 0x1B44, @@ -230874,8 +234992,6 @@ static const UV UNI_DIA_invlist[] = { /* for ASCII/Latin1 */ 0x1DC4, 0x1DD0, 0x1DF5, - 0x1DFA, - 0x1DFD, 0x1E00, 0x1FBD, 0x1FBE, @@ -230957,12 +235073,24 @@ static const UV UNI_DIA_invlist[] = { /* for ASCII/Latin1 */ 0xFFE4, 0x102E0, 0x102E1, + 0x10780, + 0x10786, + 0x10787, + 0x107B1, + 0x107B2, + 0x107BB, 0x10AE5, 0x10AE7, 0x10D22, 0x10D28, 0x10F46, 0x10F51, + 0x10F82, + 0x10F86, + 0x11046, + 0x11047, + 0x11070, + 0x11071, 0x110B9, 0x110BB, 0x11133, @@ -231029,6 +235157,16 @@ static const UV UNI_DIA_invlist[] = { /* for ASCII/Latin1 */ 0x16FA0, 0x16FF0, 0x16FF2, + 0x1AFF0, + 0x1AFF4, + 0x1AFF5, + 0x1AFFC, + 0x1AFFD, + 0x1AFFF, + 0x1CF00, + 0x1CF2E, + 0x1CF30, + 0x1CF47, 0x1D167, 0x1D16A, 0x1D16D, @@ -231041,6 +235179,8 @@ static const UV UNI_DIA_invlist[] = { /* for ASCII/Latin1 */ 0x1D1AE, 0x1E130, 0x1E137, + 0x1E2AE, + 0x1E2AF, 0x1E2EC, 0x1E2F0, 0x1E8D0, @@ -231059,7 +235199,7 @@ static const UV UNI_DIA_invlist[] = { /* for ASCII/Latin1 */ && '$' == 91 && '@' == 124 && '`' == 121 && '\n' == 21 static const UV UNI_DIA_invlist[] = { /* for EBCDIC 1047 */ - 353, /* Number of elements */ + 385, /* Number of elements */ 148565664, /* Version and data structure type */ 1, /* 0 if the list starts at 0; 1 if it starts at the element beyond 0 */ @@ -231120,6 +235260,10 @@ static const UV UNI_DIA_invlist[] = { /* for EBCDIC 1047 */ 0x7F6, 0x818, 0x81A, + 0x898, + 0x8A0, + 0x8C9, + 0x8D3, 0x8E3, 0x8FF, 0x93C, @@ -231152,6 +235296,8 @@ static const UV UNI_DIA_invlist[] = { /* for EBCDIC 1047 */ 0xB56, 0xBCD, 0xBCE, + 0xC3C, + 0xC3D, 0xC4D, 0xC4E, 0xCBC, @@ -231204,6 +235350,8 @@ static const UV UNI_DIA_invlist[] = { /* for EBCDIC 1047 */ 0x109C, 0x135D, 0x1360, + 0x1714, + 0x1716, 0x17C9, 0x17D4, 0x17DD, @@ -231215,7 +235363,9 @@ static const UV UNI_DIA_invlist[] = { /* for EBCDIC 1047 */ 0x1A7F, 0x1A80, 0x1AB0, - 0x1ABE, + 0x1ABF, + 0x1AC1, + 0x1ACC, 0x1B34, 0x1B35, 0x1B44, @@ -231241,8 +235391,6 @@ static const UV UNI_DIA_invlist[] = { /* for EBCDIC 1047 */ 0x1DC4, 0x1DD0, 0x1DF5, - 0x1DFA, - 0x1DFD, 0x1E00, 0x1FBD, 0x1FBE, @@ -231324,12 +235472,24 @@ static const UV UNI_DIA_invlist[] = { /* for EBCDIC 1047 */ 0xFFE4, 0x102E0, 0x102E1, + 0x10780, + 0x10786, + 0x10787, + 0x107B1, + 0x107B2, + 0x107BB, 0x10AE5, 0x10AE7, 0x10D22, 0x10D28, 0x10F46, 0x10F51, + 0x10F82, + 0x10F86, + 0x11046, + 0x11047, + 0x11070, + 0x11071, 0x110B9, 0x110BB, 0x11133, @@ -231396,6 +235556,16 @@ static const UV UNI_DIA_invlist[] = { /* for EBCDIC 1047 */ 0x16FA0, 0x16FF0, 0x16FF2, + 0x1AFF0, + 0x1AFF4, + 0x1AFF5, + 0x1AFFC, + 0x1AFFD, + 0x1AFFF, + 0x1CF00, + 0x1CF2E, + 0x1CF30, + 0x1CF47, 0x1D167, 0x1D16A, 0x1D16D, @@ -231408,6 +235578,8 @@ static const UV UNI_DIA_invlist[] = { /* for EBCDIC 1047 */ 0x1D1AE, 0x1E130, 0x1E137, + 0x1E2AE, + 0x1E2AF, 0x1E2EC, 0x1E2F0, 0x1E8D0, @@ -231426,7 +235598,7 @@ static const UV UNI_DIA_invlist[] = { /* for EBCDIC 1047 */ && '$' == 91 && '@' == 124 && '`' == 121 && '\n' == 37 static const UV UNI_DIA_invlist[] = { /* for EBCDIC 037 */ - 351, /* Number of elements */ + 383, /* Number of elements */ 148565664, /* Version and data structure type */ 1, /* 0 if the list starts at 0; 1 if it starts at the element beyond 0 */ @@ -231485,6 +235657,10 @@ static const UV UNI_DIA_invlist[] = { /* for EBCDIC 037 */ 0x7F6, 0x818, 0x81A, + 0x898, + 0x8A0, + 0x8C9, + 0x8D3, 0x8E3, 0x8FF, 0x93C, @@ -231517,6 +235693,8 @@ static const UV UNI_DIA_invlist[] = { /* for EBCDIC 037 */ 0xB56, 0xBCD, 0xBCE, + 0xC3C, + 0xC3D, 0xC4D, 0xC4E, 0xCBC, @@ -231569,6 +235747,8 @@ static const UV UNI_DIA_invlist[] = { /* for EBCDIC 037 */ 0x109C, 0x135D, 0x1360, + 0x1714, + 0x1716, 0x17C9, 0x17D4, 0x17DD, @@ -231580,7 +235760,9 @@ static const UV UNI_DIA_invlist[] = { /* for EBCDIC 037 */ 0x1A7F, 0x1A80, 0x1AB0, - 0x1ABE, + 0x1ABF, + 0x1AC1, + 0x1ACC, 0x1B34, 0x1B35, 0x1B44, @@ -231606,8 +235788,6 @@ static const UV UNI_DIA_invlist[] = { /* for EBCDIC 037 */ 0x1DC4, 0x1DD0, 0x1DF5, - 0x1DFA, - 0x1DFD, 0x1E00, 0x1FBD, 0x1FBE, @@ -231689,12 +235869,24 @@ static const UV UNI_DIA_invlist[] = { /* for EBCDIC 037 */ 0xFFE4, 0x102E0, 0x102E1, + 0x10780, + 0x10786, + 0x10787, + 0x107B1, + 0x107B2, + 0x107BB, 0x10AE5, 0x10AE7, 0x10D22, 0x10D28, 0x10F46, 0x10F51, + 0x10F82, + 0x10F86, + 0x11046, + 0x11047, + 0x11070, + 0x11071, 0x110B9, 0x110BB, 0x11133, @@ -231761,6 +235953,16 @@ static const UV UNI_DIA_invlist[] = { /* for EBCDIC 037 */ 0x16FA0, 0x16FF0, 0x16FF2, + 0x1AFF0, + 0x1AFF4, + 0x1AFF5, + 0x1AFFC, + 0x1AFFD, + 0x1AFFF, + 0x1CF00, + 0x1CF2E, + 0x1CF30, + 0x1CF47, 0x1D167, 0x1D16A, 0x1D16D, @@ -231773,6 +235975,8 @@ static const UV UNI_DIA_invlist[] = { /* for EBCDIC 037 */ 0x1D1AE, 0x1E130, 0x1E137, + 0x1E2AE, + 0x1E2AF, 0x1E2EC, 0x1E2F0, 0x1E8D0, @@ -234854,7 +239058,7 @@ static const UV UNI_DT__NB_invlist[] = { /* for EBCDIC 037 */ # if 'A' == 65 /* ASCII/Latin1 */ static const UV UNI_DT__NONCANON_invlist[] = { /* for ASCII/Latin1 */ - 375, /* Number of elements */ + 383, /* Number of elements */ 148565664, /* Version and data structure type */ 1, /* 0 if the list starts at 0; 1 if it starts at the element beyond 0 */ @@ -235053,6 +239257,8 @@ static const UV UNI_DT__NONCANON_invlist[] = { /* for ASCII/Latin1 */ 0xA69E, 0xA770, 0xA771, + 0xA7F2, + 0xA7F5, 0xA7F8, 0xA7FA, 0xAB5C, @@ -235105,6 +239311,12 @@ static const UV UNI_DT__NONCANON_invlist[] = { /* for ASCII/Latin1 */ 0xFFE7, 0xFFE8, 0xFFEF, + 0x10781, + 0x10786, + 0x10787, + 0x107B1, + 0x107B2, + 0x107BB, 0x1D400, 0x1D455, 0x1D456, @@ -235243,7 +239455,7 @@ static const UV UNI_DT__NONCANON_invlist[] = { /* for ASCII/Latin1 */ && '$' == 91 && '@' == 124 && '`' == 121 && '\n' == 21 static const UV UNI_DT__NONCANON_invlist[] = { /* for EBCDIC 1047 */ - 381, /* Number of elements */ + 389, /* Number of elements */ 148565664, /* Version and data structure type */ 1, /* 0 if the list starts at 0; 1 if it starts at the element beyond 0 */ @@ -235448,6 +239660,8 @@ static const UV UNI_DT__NONCANON_invlist[] = { /* for EBCDIC 1047 */ 0xA69E, 0xA770, 0xA771, + 0xA7F2, + 0xA7F5, 0xA7F8, 0xA7FA, 0xAB5C, @@ -235500,6 +239714,12 @@ static const UV UNI_DT__NONCANON_invlist[] = { /* for EBCDIC 1047 */ 0xFFE7, 0xFFE8, 0xFFEF, + 0x10781, + 0x10786, + 0x10787, + 0x107B1, + 0x107B2, + 0x107BB, 0x1D400, 0x1D455, 0x1D456, @@ -235638,7 +239858,7 @@ static const UV UNI_DT__NONCANON_invlist[] = { /* for EBCDIC 1047 */ && '$' == 91 && '@' == 124 && '`' == 121 && '\n' == 37 static const UV UNI_DT__NONCANON_invlist[] = { /* for EBCDIC 037 */ - 379, /* Number of elements */ + 387, /* Number of elements */ 148565664, /* Version and data structure type */ 1, /* 0 if the list starts at 0; 1 if it starts at the element beyond 0 */ @@ -235841,6 +240061,8 @@ static const UV UNI_DT__NONCANON_invlist[] = { /* for EBCDIC 037 */ 0xA69E, 0xA770, 0xA771, + 0xA7F2, + 0xA7F5, 0xA7F8, 0xA7FA, 0xAB5C, @@ -235893,6 +240115,12 @@ static const UV UNI_DT__NONCANON_invlist[] = { /* for EBCDIC 037 */ 0xFFE7, 0xFFE8, 0xFFEF, + 0x10781, + 0x10786, + 0x10787, + 0x107B1, + 0x107B2, + 0x107BB, 0x1D400, 0x1D455, 0x1D456, @@ -236028,7 +240256,7 @@ static const UV UNI_DT__NONCANON_invlist[] = { /* for EBCDIC 037 */ # if 'A' == 65 /* ASCII/Latin1 */ static const UV UNI_DT__NONE_invlist[] = { /* for ASCII/Latin1 */ - 785, /* Number of elements */ + 793, /* Number of elements */ 148565664, /* Version and data structure type */ 0, /* 0 if the list starts at 0; 1 if it starts at the element beyond 0 */ @@ -236583,6 +240811,8 @@ static const UV UNI_DT__NONE_invlist[] = { /* for ASCII/Latin1 */ 0xA69E, 0xA770, 0xA771, + 0xA7F2, + 0xA7F5, 0xA7F8, 0xA7FA, 0xAB5C, @@ -236665,6 +240895,12 @@ static const UV UNI_DT__NONE_invlist[] = { /* for ASCII/Latin1 */ 0xFFE7, 0xFFE8, 0xFFEF, + 0x10781, + 0x10786, + 0x10787, + 0x107B1, + 0x107B2, + 0x107BB, 0x1109A, 0x1109B, 0x1109C, @@ -236827,7 +241063,7 @@ static const UV UNI_DT__NONE_invlist[] = { /* for ASCII/Latin1 */ && '$' == 91 && '@' == 124 && '`' == 121 && '\n' == 21 static const UV UNI_DT__NONE_invlist[] = { /* for EBCDIC 1047 */ - 783, /* Number of elements */ + 791, /* Number of elements */ 148565664, /* Version and data structure type */ 0, /* 0 if the list starts at 0; 1 if it starts at the element beyond 0 */ @@ -237380,6 +241616,8 @@ static const UV UNI_DT__NONE_invlist[] = { /* for EBCDIC 1047 */ 0xA69E, 0xA770, 0xA771, + 0xA7F2, + 0xA7F5, 0xA7F8, 0xA7FA, 0xAB5C, @@ -237462,6 +241700,12 @@ static const UV UNI_DT__NONE_invlist[] = { /* for EBCDIC 1047 */ 0xFFE7, 0xFFE8, 0xFFEF, + 0x10781, + 0x10786, + 0x10787, + 0x107B1, + 0x107B2, + 0x107BB, 0x1109A, 0x1109B, 0x1109C, @@ -237624,7 +241868,7 @@ static const UV UNI_DT__NONE_invlist[] = { /* for EBCDIC 1047 */ && '$' == 91 && '@' == 124 && '`' == 121 && '\n' == 37 static const UV UNI_DT__NONE_invlist[] = { /* for EBCDIC 037 */ - 785, /* Number of elements */ + 793, /* Number of elements */ 148565664, /* Version and data structure type */ 0, /* 0 if the list starts at 0; 1 if it starts at the element beyond 0 */ @@ -238179,6 +242423,8 @@ static const UV UNI_DT__NONE_invlist[] = { /* for EBCDIC 037 */ 0xA69E, 0xA770, 0xA771, + 0xA7F2, + 0xA7F5, 0xA7F8, 0xA7FA, 0xAB5C, @@ -238261,6 +242507,12 @@ static const UV UNI_DT__NONE_invlist[] = { /* for EBCDIC 037 */ 0xFFE7, 0xFFE8, 0xFFEF, + 0x10781, + 0x10786, + 0x10787, + 0x107B1, + 0x107B2, + 0x107BB, 0x1109A, 0x1109B, 0x1109C, @@ -238476,7 +242728,7 @@ static const UV UNI_DT__SUB_invlist[] = { /* for all charsets */ # if 'A' == 65 /* ASCII/Latin1 */ static const UV UNI_DT__SUP_invlist[] = { /* for ASCII/Latin1 */ - 51, /* Number of elements */ + 59, /* Number of elements */ 148565664, /* Version and data structure type */ 1, /* 0 if the list starts at 0; 1 if it starts at the element beyond 0 */ @@ -238523,12 +242775,20 @@ static const UV UNI_DT__SUP_invlist[] = { /* for ASCII/Latin1 */ 0xA69E, 0xA770, 0xA771, + 0xA7F2, + 0xA7F5, 0xA7F8, 0xA7FA, 0xAB5C, 0xAB60, 0xAB69, 0xAB6A, + 0x10781, + 0x10786, + 0x10787, + 0x107B1, + 0x107B2, + 0x107BB, 0x1F16A, 0x1F16D }; @@ -238541,7 +242801,7 @@ static const UV UNI_DT__SUP_invlist[] = { /* for ASCII/Latin1 */ && '$' == 91 && '@' == 124 && '`' == 121 && '\n' == 21 static const UV UNI_DT__SUP_invlist[] = { /* for EBCDIC 1047 */ - 53, /* Number of elements */ + 61, /* Number of elements */ 148565664, /* Version and data structure type */ 1, /* 0 if the list starts at 0; 1 if it starts at the element beyond 0 */ @@ -238590,12 +242850,20 @@ static const UV UNI_DT__SUP_invlist[] = { /* for EBCDIC 1047 */ 0xA69E, 0xA770, 0xA771, + 0xA7F2, + 0xA7F5, 0xA7F8, 0xA7FA, 0xAB5C, 0xAB60, 0xAB69, 0xAB6A, + 0x10781, + 0x10786, + 0x10787, + 0x107B1, + 0x107B2, + 0x107BB, 0x1F16A, 0x1F16D }; @@ -238608,7 +242876,7 @@ static const UV UNI_DT__SUP_invlist[] = { /* for EBCDIC 1047 */ && '$' == 91 && '@' == 124 && '`' == 121 && '\n' == 37 static const UV UNI_DT__SUP_invlist[] = { /* for EBCDIC 037 */ - 53, /* Number of elements */ + 61, /* Number of elements */ 148565664, /* Version and data structure type */ 1, /* 0 if the list starts at 0; 1 if it starts at the element beyond 0 */ @@ -238657,12 +242925,20 @@ static const UV UNI_DT__SUP_invlist[] = { /* for EBCDIC 037 */ 0xA69E, 0xA770, 0xA771, + 0xA7F2, + 0xA7F5, 0xA7F8, 0xA7FA, 0xAB5C, 0xAB60, 0xAB69, 0xAB6A, + 0x10781, + 0x10786, + 0x10787, + 0x107B1, + 0x107B2, + 0x107BB, 0x1F16A, 0x1F16D }; @@ -239866,7 +244142,7 @@ static const UV UNI_EA__H_invlist[] = { /* for all charsets */ # if 'A' == 65 /* ASCII/Latin1 */ static const UV UNI_EA__N_invlist[] = { /* for ASCII/Latin1 */ - 553, /* Number of elements */ + 563, /* Number of elements */ 148565664, /* Version and data structure type */ 0, /* 0 if the list starts at 0; 1 if it starts at the element beyond 0 */ @@ -240309,8 +244585,14 @@ static const UV UNI_EA__N_invlist[] = { /* for ASCII/Latin1 */ 0x18CD6, 0x18D00, 0x18D09, + 0x1AFF0, + 0x1AFF4, + 0x1AFF5, + 0x1AFFC, + 0x1AFFD, + 0x1AFFF, 0x1B000, - 0x1B11F, + 0x1B123, 0x1B150, 0x1B153, 0x1B164, @@ -240383,36 +244665,40 @@ static const UV UNI_EA__N_invlist[] = { /* for ASCII/Latin1 */ 0x1F6D3, 0x1F6D5, 0x1F6D8, + 0x1F6DD, + 0x1F6E0, 0x1F6EB, 0x1F6ED, 0x1F6F4, 0x1F6FD, 0x1F7E0, 0x1F7EC, + 0x1F7F0, + 0x1F7F1, 0x1F90C, 0x1F93B, 0x1F93C, 0x1F946, 0x1F947, - 0x1F979, - 0x1F97A, - 0x1F9CC, - 0x1F9CD, 0x1FA00, 0x1FA70, 0x1FA75, 0x1FA78, - 0x1FA7B, + 0x1FA7D, 0x1FA80, 0x1FA87, 0x1FA90, - 0x1FAA9, + 0x1FAAD, 0x1FAB0, - 0x1FAB7, + 0x1FABB, 0x1FAC0, - 0x1FAC3, + 0x1FAC6, 0x1FAD0, - 0x1FAD7, + 0x1FADA, + 0x1FAE0, + 0x1FAE8, + 0x1FAF0, + 0x1FAF7, 0x20000, 0x2FFFE, 0x30000, @@ -240433,7 +244719,7 @@ static const UV UNI_EA__N_invlist[] = { /* for ASCII/Latin1 */ && '$' == 91 && '@' == 124 && '`' == 121 && '\n' == 21 static const UV UNI_EA__N_invlist[] = { /* for EBCDIC 1047 */ - 551, /* Number of elements */ + 561, /* Number of elements */ 148565664, /* Version and data structure type */ 0, /* 0 if the list starts at 0; 1 if it starts at the element beyond 0 */ @@ -240874,8 +245160,14 @@ static const UV UNI_EA__N_invlist[] = { /* for EBCDIC 1047 */ 0x18CD6, 0x18D00, 0x18D09, + 0x1AFF0, + 0x1AFF4, + 0x1AFF5, + 0x1AFFC, + 0x1AFFD, + 0x1AFFF, 0x1B000, - 0x1B11F, + 0x1B123, 0x1B150, 0x1B153, 0x1B164, @@ -240948,36 +245240,40 @@ static const UV UNI_EA__N_invlist[] = { /* for EBCDIC 1047 */ 0x1F6D3, 0x1F6D5, 0x1F6D8, + 0x1F6DD, + 0x1F6E0, 0x1F6EB, 0x1F6ED, 0x1F6F4, 0x1F6FD, 0x1F7E0, 0x1F7EC, + 0x1F7F0, + 0x1F7F1, 0x1F90C, 0x1F93B, 0x1F93C, 0x1F946, 0x1F947, - 0x1F979, - 0x1F97A, - 0x1F9CC, - 0x1F9CD, 0x1FA00, 0x1FA70, 0x1FA75, 0x1FA78, - 0x1FA7B, + 0x1FA7D, 0x1FA80, 0x1FA87, 0x1FA90, - 0x1FAA9, + 0x1FAAD, 0x1FAB0, - 0x1FAB7, + 0x1FABB, 0x1FAC0, - 0x1FAC3, + 0x1FAC6, 0x1FAD0, - 0x1FAD7, + 0x1FADA, + 0x1FAE0, + 0x1FAE8, + 0x1FAF0, + 0x1FAF7, 0x20000, 0x2FFFE, 0x30000, @@ -240998,7 +245294,7 @@ static const UV UNI_EA__N_invlist[] = { /* for EBCDIC 1047 */ && '$' == 91 && '@' == 124 && '`' == 121 && '\n' == 37 static const UV UNI_EA__N_invlist[] = { /* for EBCDIC 037 */ - 551, /* Number of elements */ + 561, /* Number of elements */ 148565664, /* Version and data structure type */ 0, /* 0 if the list starts at 0; 1 if it starts at the element beyond 0 */ @@ -241439,8 +245735,14 @@ static const UV UNI_EA__N_invlist[] = { /* for EBCDIC 037 */ 0x18CD6, 0x18D00, 0x18D09, + 0x1AFF0, + 0x1AFF4, + 0x1AFF5, + 0x1AFFC, + 0x1AFFD, + 0x1AFFF, 0x1B000, - 0x1B11F, + 0x1B123, 0x1B150, 0x1B153, 0x1B164, @@ -241513,36 +245815,40 @@ static const UV UNI_EA__N_invlist[] = { /* for EBCDIC 037 */ 0x1F6D3, 0x1F6D5, 0x1F6D8, + 0x1F6DD, + 0x1F6E0, 0x1F6EB, 0x1F6ED, 0x1F6F4, 0x1F6FD, 0x1F7E0, 0x1F7EC, + 0x1F7F0, + 0x1F7F1, 0x1F90C, 0x1F93B, 0x1F93C, 0x1F946, 0x1F947, - 0x1F979, - 0x1F97A, - 0x1F9CC, - 0x1F9CD, 0x1FA00, 0x1FA70, 0x1FA75, 0x1FA78, - 0x1FA7B, + 0x1FA7D, 0x1FA80, 0x1FA87, 0x1FA90, - 0x1FAA9, + 0x1FAAD, 0x1FAB0, - 0x1FAB7, + 0x1FABB, 0x1FAC0, - 0x1FAC3, + 0x1FAC6, 0x1FAD0, - 0x1FAD7, + 0x1FADA, + 0x1FAE0, + 0x1FAE8, + 0x1FAF0, + 0x1FAF7, 0x20000, 0x2FFFE, 0x30000, @@ -241684,7 +245990,7 @@ static const UV UNI_EA__NA_invlist[] = { /* for EBCDIC 037 */ # endif /* EBCDIC 037 */ static const UV UNI_EA__W_invlist[] = { /* for all charsets */ - 229, /* Number of elements */ + 239, /* Number of elements */ 148565664, /* Version and data structure type */ 1, /* 0 if the list starts at 0; 1 if it starts at the element beyond 0 */ @@ -241813,8 +246119,14 @@ static const UV UNI_EA__W_invlist[] = { /* for all charsets */ 0x18CD6, 0x18D00, 0x18D09, + 0x1AFF0, + 0x1AFF4, + 0x1AFF5, + 0x1AFFC, + 0x1AFFD, + 0x1AFFF, 0x1B000, - 0x1B11F, + 0x1B123, 0x1B150, 0x1B153, 0x1B164, @@ -241883,36 +246195,40 @@ static const UV UNI_EA__W_invlist[] = { /* for all charsets */ 0x1F6D3, 0x1F6D5, 0x1F6D8, + 0x1F6DD, + 0x1F6E0, 0x1F6EB, 0x1F6ED, 0x1F6F4, 0x1F6FD, 0x1F7E0, 0x1F7EC, + 0x1F7F0, + 0x1F7F1, 0x1F90C, 0x1F93B, 0x1F93C, 0x1F946, 0x1F947, - 0x1F979, - 0x1F97A, - 0x1F9CC, - 0x1F9CD, 0x1FA00, 0x1FA70, 0x1FA75, 0x1FA78, - 0x1FA7B, + 0x1FA7D, 0x1FA80, 0x1FA87, 0x1FA90, - 0x1FAA9, + 0x1FAAD, 0x1FAB0, - 0x1FAB7, + 0x1FABB, 0x1FAC0, - 0x1FAC3, + 0x1FAC6, 0x1FAD0, - 0x1FAD7, + 0x1FADA, + 0x1FAE0, + 0x1FAE8, + 0x1FAF0, + 0x1FAF7, 0x20000, 0x2FFFE, 0x30000, @@ -241930,7 +246246,7 @@ static const UV UNI_EARLYDYNASTICCUNEIFORM_invlist[] = { /* for all charsets */ }; static const UV UNI_EBASE_invlist[] = { /* for all charsets */ - 77, /* Number of elements */ + 81, /* Number of elements */ 148565664, /* Version and data structure type */ 1, /* 0 if the list starts at 0; 1 if it starts at the element beyond 0 */ @@ -242010,7 +246326,11 @@ static const UV UNI_EBASE_invlist[] = { /* for all charsets */ 0x1F9CD, 0x1F9D0, 0x1F9D1, - 0x1F9DE + 0x1F9DE, + 0x1FAC3, + 0x1FAC6, + 0x1FAF0, + 0x1FAF7 }; # if 'A' == 65 /* ASCII/Latin1 */ @@ -242170,7 +246490,7 @@ static const UV UNI_EMOD_invlist[] = { /* for all charsets */ # if 'A' == 65 /* ASCII/Latin1 */ static const UV UNI_EMOJI_invlist[] = { /* for ASCII/Latin1 */ - 305, /* Number of elements */ + 307, /* Number of elements */ 148565664, /* Version and data structure type */ 1, /* 0 if the list starts at 0; 1 if it starts at the element beyond 0 */ @@ -242443,7 +246763,7 @@ static const UV UNI_EMOJI_invlist[] = { /* for ASCII/Latin1 */ 0x1F6D3, 0x1F6D5, 0x1F6D8, - 0x1F6E0, + 0x1F6DD, 0x1F6E6, 0x1F6E9, 0x1F6EA, @@ -242455,30 +246775,32 @@ static const UV UNI_EMOJI_invlist[] = { /* for ASCII/Latin1 */ 0x1F6FD, 0x1F7E0, 0x1F7EC, + 0x1F7F0, + 0x1F7F1, 0x1F90C, 0x1F93B, 0x1F93C, 0x1F946, 0x1F947, - 0x1F979, - 0x1F97A, - 0x1F9CC, - 0x1F9CD, 0x1FA00, 0x1FA70, 0x1FA75, 0x1FA78, - 0x1FA7B, + 0x1FA7D, 0x1FA80, 0x1FA87, 0x1FA90, - 0x1FAA9, + 0x1FAAD, 0x1FAB0, - 0x1FAB7, + 0x1FABB, 0x1FAC0, - 0x1FAC3, + 0x1FAC6, 0x1FAD0, - 0x1FAD7 + 0x1FADA, + 0x1FAE0, + 0x1FAE8, + 0x1FAF0, + 0x1FAF7 }; # endif /* ASCII/Latin1 */ @@ -242489,7 +246811,7 @@ static const UV UNI_EMOJI_invlist[] = { /* for ASCII/Latin1 */ && '$' == 91 && '@' == 124 && '`' == 121 && '\n' == 21 static const UV UNI_EMOJI_invlist[] = { /* for EBCDIC 1047 */ - 305, /* Number of elements */ + 307, /* Number of elements */ 148565664, /* Version and data structure type */ 1, /* 0 if the list starts at 0; 1 if it starts at the element beyond 0 */ @@ -242762,7 +247084,7 @@ static const UV UNI_EMOJI_invlist[] = { /* for EBCDIC 1047 */ 0x1F6D3, 0x1F6D5, 0x1F6D8, - 0x1F6E0, + 0x1F6DD, 0x1F6E6, 0x1F6E9, 0x1F6EA, @@ -242774,30 +247096,32 @@ static const UV UNI_EMOJI_invlist[] = { /* for EBCDIC 1047 */ 0x1F6FD, 0x1F7E0, 0x1F7EC, + 0x1F7F0, + 0x1F7F1, 0x1F90C, 0x1F93B, 0x1F93C, 0x1F946, 0x1F947, - 0x1F979, - 0x1F97A, - 0x1F9CC, - 0x1F9CD, 0x1FA00, 0x1FA70, 0x1FA75, 0x1FA78, - 0x1FA7B, + 0x1FA7D, 0x1FA80, 0x1FA87, 0x1FA90, - 0x1FAA9, + 0x1FAAD, 0x1FAB0, - 0x1FAB7, + 0x1FABB, 0x1FAC0, - 0x1FAC3, + 0x1FAC6, 0x1FAD0, - 0x1FAD7 + 0x1FADA, + 0x1FAE0, + 0x1FAE8, + 0x1FAF0, + 0x1FAF7 }; # endif /* EBCDIC 1047 */ @@ -242808,7 +247132,7 @@ static const UV UNI_EMOJI_invlist[] = { /* for EBCDIC 1047 */ && '$' == 91 && '@' == 124 && '`' == 121 && '\n' == 37 static const UV UNI_EMOJI_invlist[] = { /* for EBCDIC 037 */ - 305, /* Number of elements */ + 307, /* Number of elements */ 148565664, /* Version and data structure type */ 1, /* 0 if the list starts at 0; 1 if it starts at the element beyond 0 */ @@ -243081,7 +247405,7 @@ static const UV UNI_EMOJI_invlist[] = { /* for EBCDIC 037 */ 0x1F6D3, 0x1F6D5, 0x1F6D8, - 0x1F6E0, + 0x1F6DD, 0x1F6E6, 0x1F6E9, 0x1F6EA, @@ -243093,30 +247417,32 @@ static const UV UNI_EMOJI_invlist[] = { /* for EBCDIC 037 */ 0x1F6FD, 0x1F7E0, 0x1F7EC, + 0x1F7F0, + 0x1F7F1, 0x1F90C, 0x1F93B, 0x1F93C, 0x1F946, 0x1F947, - 0x1F979, - 0x1F97A, - 0x1F9CC, - 0x1F9CD, 0x1FA00, 0x1FA70, 0x1FA75, 0x1FA78, - 0x1FA7B, + 0x1FA7D, 0x1FA80, 0x1FA87, 0x1FA90, - 0x1FAA9, + 0x1FAAD, 0x1FAB0, - 0x1FAB7, + 0x1FABB, 0x1FAC0, - 0x1FAC3, + 0x1FAC6, 0x1FAD0, - 0x1FAD7 + 0x1FADA, + 0x1FAE0, + 0x1FAE8, + 0x1FAF0, + 0x1FAF7 }; # endif /* EBCDIC 037 */ @@ -243172,7 +247498,7 @@ static const UV UNI_ENCLOSEDIDEOGRAPHICSUP_invlist[] = { /* for all charsets */ }; static const UV UNI_EPRES_invlist[] = { /* for all charsets */ - 163, /* Number of elements */ + 167, /* Number of elements */ 148565664, /* Version and data structure type */ 1, /* 0 if the list starts at 0; 1 if it starts at the element beyond 0 */ @@ -243309,40 +247635,44 @@ static const UV UNI_EPRES_invlist[] = { /* for all charsets */ 0x1F6D3, 0x1F6D5, 0x1F6D8, + 0x1F6DD, + 0x1F6E0, 0x1F6EB, 0x1F6ED, 0x1F6F4, 0x1F6FD, 0x1F7E0, 0x1F7EC, + 0x1F7F0, + 0x1F7F1, 0x1F90C, 0x1F93B, 0x1F93C, 0x1F946, 0x1F947, - 0x1F979, - 0x1F97A, - 0x1F9CC, - 0x1F9CD, 0x1FA00, 0x1FA70, 0x1FA75, 0x1FA78, - 0x1FA7B, + 0x1FA7D, 0x1FA80, 0x1FA87, 0x1FA90, - 0x1FAA9, + 0x1FAAD, 0x1FAB0, - 0x1FAB7, + 0x1FABB, 0x1FAC0, - 0x1FAC3, + 0x1FAC6, 0x1FAD0, - 0x1FAD7 + 0x1FADA, + 0x1FAE0, + 0x1FAE8, + 0x1FAF0, + 0x1FAF7 }; static const UV UNI_ETHI_invlist[] = { /* for all charsets */ - 65, /* Number of elements */ + 73, /* Number of elements */ 148565664, /* Version and data structure type */ 1, /* 0 if the list starts at 0; 1 if it starts at the element beyond 0 */ @@ -243410,7 +247740,15 @@ static const UV UNI_ETHI_invlist[] = { /* for all charsets */ 0xAB20, 0xAB27, 0xAB28, - 0xAB2F + 0xAB2F, + 0x1E7E0, + 0x1E7E7, + 0x1E7E8, + 0x1E7EC, + 0x1E7ED, + 0x1E7EF, + 0x1E7F0, + 0x1E7FF }; static const UV UNI_ETHIOPICEXT_invlist[] = { /* for all charsets */ @@ -243433,6 +247771,16 @@ static const UV UNI_ETHIOPICEXTA_invlist[] = { /* for all charsets */ 0xAB30 }; +static const UV UNI_ETHIOPICEXTB_invlist[] = { /* for all charsets */ + 3, /* Number of elements */ + 148565664, /* Version and data structure type */ + 1, /* 0 if the list starts at 0; + 1 if it starts at the element beyond 0 */ + 0x0, + 0x1E7E0, + 0x1E800 +}; + static const UV UNI_ETHIOPICSUP_invlist[] = { /* for all charsets */ 3, /* Number of elements */ 148565664, /* Version and data structure type */ @@ -243446,7 +247794,7 @@ static const UV UNI_ETHIOPICSUP_invlist[] = { /* for all charsets */ # if 'A' == 65 /* ASCII/Latin1 */ static const UV UNI_EXT_invlist[] = { /* for ASCII/Latin1 */ - 65, /* Number of elements */ + 67, /* Number of elements */ 148565664, /* Version and data structure type */ 1, /* 0 if the list starts at 0; 1 if it starts at the element beyond 0 */ @@ -243499,6 +247847,8 @@ static const UV UNI_EXT_invlist[] = { /* for ASCII/Latin1 */ 0xAAF5, 0xFF70, 0xFF71, + 0x10781, + 0x10783, 0x1135D, 0x1135E, 0x115C6, @@ -243525,7 +247875,7 @@ static const UV UNI_EXT_invlist[] = { /* for ASCII/Latin1 */ && '$' == 91 && '@' == 124 && '`' == 121 && '\n' == 21 static const UV UNI_EXT_invlist[] = { /* for EBCDIC 1047 */ - 65, /* Number of elements */ + 67, /* Number of elements */ 148565664, /* Version and data structure type */ 1, /* 0 if the list starts at 0; 1 if it starts at the element beyond 0 */ @@ -243578,6 +247928,8 @@ static const UV UNI_EXT_invlist[] = { /* for EBCDIC 1047 */ 0xAAF5, 0xFF70, 0xFF71, + 0x10781, + 0x10783, 0x1135D, 0x1135E, 0x115C6, @@ -243604,7 +247956,7 @@ static const UV UNI_EXT_invlist[] = { /* for EBCDIC 1047 */ && '$' == 91 && '@' == 124 && '`' == 121 && '\n' == 37 static const UV UNI_EXT_invlist[] = { /* for EBCDIC 037 */ - 65, /* Number of elements */ + 67, /* Number of elements */ 148565664, /* Version and data structure type */ 1, /* 0 if the list starts at 0; 1 if it starts at the element beyond 0 */ @@ -243657,6 +248009,8 @@ static const UV UNI_EXT_invlist[] = { /* for EBCDIC 037 */ 0xAAF5, 0xFF70, 0xFF71, + 0x10781, + 0x10783, 0x1135D, 0x1135E, 0x115C6, @@ -244341,7 +248695,7 @@ static const UV UNI_GCB__CN_invlist[] = { /* for EBCDIC 037 */ # endif /* EBCDIC 037 */ static const UV UNI_GCB__EX_invlist[] = { /* for all charsets */ - 691, /* Number of elements */ + 709, /* Number of elements */ 148565664, /* Version and data structure type */ 1, /* 0 if the list starts at 0; 1 if it starts at the element beyond 0 */ @@ -244394,7 +248748,9 @@ static const UV UNI_GCB__EX_invlist[] = { /* for all charsets */ 0x82E, 0x859, 0x85C, - 0x8D3, + 0x898, + 0x8A0, + 0x8CA, 0x8E2, 0x8E3, 0x903, @@ -244484,6 +248840,8 @@ static const UV UNI_GCB__EX_invlist[] = { /* for all charsets */ 0xC01, 0xC04, 0xC05, + 0xC3C, + 0xC3D, 0xC3E, 0xC41, 0xC46, @@ -244595,7 +248953,7 @@ static const UV UNI_GCB__EX_invlist[] = { /* for all charsets */ 0x1712, 0x1715, 0x1732, - 0x1735, + 0x1734, 0x1752, 0x1754, 0x1772, @@ -244612,6 +248970,8 @@ static const UV UNI_GCB__EX_invlist[] = { /* for all charsets */ 0x17DE, 0x180B, 0x180E, + 0x180F, + 0x1810, 0x1885, 0x1887, 0x18A9, @@ -244643,7 +249003,7 @@ static const UV UNI_GCB__EX_invlist[] = { /* for all charsets */ 0x1A7F, 0x1A80, 0x1AB0, - 0x1AC1, + 0x1ACF, 0x1B00, 0x1B04, 0x1B34, @@ -244687,8 +249047,6 @@ static const UV UNI_GCB__EX_invlist[] = { /* for all charsets */ 0x1CF8, 0x1CFA, 0x1DC0, - 0x1DFA, - 0x1DFB, 0x1E00, 0x200C, 0x200D, @@ -244806,16 +249164,24 @@ static const UV UNI_GCB__EX_invlist[] = { /* for all charsets */ 0x10EAD, 0x10F46, 0x10F51, + 0x10F82, + 0x10F86, 0x11001, 0x11002, 0x11038, 0x11047, + 0x11070, + 0x11071, + 0x11073, + 0x11075, 0x1107F, 0x11082, 0x110B3, 0x110B7, 0x110B9, 0x110BB, + 0x110C2, + 0x110C3, 0x11100, 0x11103, 0x11127, @@ -244986,6 +249352,10 @@ static const UV UNI_GCB__EX_invlist[] = { /* for all charsets */ 0x16FE5, 0x1BC9D, 0x1BC9F, + 0x1CF00, + 0x1CF2E, + 0x1CF30, + 0x1CF47, 0x1D165, 0x1D166, 0x1D167, @@ -245024,6 +249394,8 @@ static const UV UNI_GCB__EX_invlist[] = { /* for all charsets */ 0x1E02B, 0x1E130, 0x1E137, + 0x1E2AE, + 0x1E2AF, 0x1E2EC, 0x1E2F0, 0x1E8D0, @@ -245051,7 +249423,7 @@ static const UV UNI_GCB__L_invlist[] = { /* for all charsets */ }; static const UV UNI_GCB__PP_invlist[] = { /* for all charsets */ - 27, /* Number of elements */ + 29, /* Number of elements */ 148565664, /* Version and data structure type */ 1, /* 0 if the list starts at 0; 1 if it starts at the element beyond 0 */ @@ -245062,6 +249434,8 @@ static const UV UNI_GCB__PP_invlist[] = { /* for all charsets */ 0x6DE, 0x70F, 0x710, + 0x890, + 0x892, 0x8E2, 0x8E3, 0xD4E, @@ -245085,7 +249459,7 @@ static const UV UNI_GCB__PP_invlist[] = { /* for all charsets */ }; static const UV UNI_GCB__SM_invlist[] = { /* for all charsets */ - 319, /* Number of elements */ + 321, /* Number of elements */ 148565664, /* Version and data structure type */ 1, /* 0 if the list starts at 0; 1 if it starts at the element beyond 0 */ @@ -245184,6 +249558,10 @@ static const UV UNI_GCB__SM_invlist[] = { /* for all charsets */ 0x1058, 0x1084, 0x1085, + 0x1715, + 0x1716, + 0x1734, + 0x1735, 0x17B6, 0x17B7, 0x17BE, @@ -245352,8 +249730,6 @@ static const UV UNI_GCB__SM_invlist[] = { /* for all charsets */ 0x116B0, 0x116B6, 0x116B7, - 0x11720, - 0x11722, 0x11726, 0x11727, 0x1182C, @@ -245437,7 +249813,7 @@ static const UV UNI_GCB__V_invlist[] = { /* for all charsets */ # if 'A' == 65 /* ASCII/Latin1 */ static const UV UNI_GCB__XX_invlist[] = { /* for ASCII/Latin1 */ - 620, /* Number of elements */ + 640, /* Number of elements */ 148565664, /* Version and data structure type */ 1, /* 0 if the list starts at 0; 1 if it starts at the element beyond 0 */ @@ -245501,7 +249877,11 @@ static const UV UNI_GCB__XX_invlist[] = { /* for ASCII/Latin1 */ 0x82E, 0x859, 0x85C, - 0x8D3, + 0x890, + 0x892, + 0x898, + 0x8A0, + 0x8CA, 0x904, 0x93A, 0x93D, @@ -245583,6 +249963,8 @@ static const UV UNI_GCB__XX_invlist[] = { /* for ASCII/Latin1 */ 0xBD8, 0xC00, 0xC05, + 0xC3C, + 0xC3D, 0xC3E, 0xC45, 0xC46, @@ -245688,7 +250070,7 @@ static const UV UNI_GCB__XX_invlist[] = { /* for ASCII/Latin1 */ 0x135D, 0x1360, 0x1712, - 0x1715, + 0x1716, 0x1732, 0x1735, 0x1752, @@ -245700,7 +250082,7 @@ static const UV UNI_GCB__XX_invlist[] = { /* for ASCII/Latin1 */ 0x17DD, 0x17DE, 0x180B, - 0x180F, + 0x1810, 0x1885, 0x1887, 0x18A9, @@ -245722,7 +250104,7 @@ static const UV UNI_GCB__XX_invlist[] = { /* for ASCII/Latin1 */ 0x1A7F, 0x1A80, 0x1AB0, - 0x1AC1, + 0x1ACF, 0x1B00, 0x1B05, 0x1B34, @@ -245748,8 +250130,6 @@ static const UV UNI_GCB__XX_invlist[] = { /* for ASCII/Latin1 */ 0x1CF7, 0x1CFA, 0x1DC0, - 0x1DFA, - 0x1DFB, 0x1E00, 0x200B, 0x2010, @@ -245875,16 +250255,24 @@ static const UV UNI_GCB__XX_invlist[] = { /* for ASCII/Latin1 */ 0x10EAD, 0x10F46, 0x10F51, + 0x10F82, + 0x10F86, 0x11000, 0x11003, 0x11038, 0x11047, + 0x11070, + 0x11071, + 0x11073, + 0x11075, 0x1107F, 0x11083, 0x110B0, 0x110BB, 0x110BD, 0x110BE, + 0x110C2, + 0x110C3, 0x110CD, 0x110CE, 0x11100, @@ -245946,6 +250334,8 @@ static const UV UNI_GCB__XX_invlist[] = { /* for ASCII/Latin1 */ 0x116AB, 0x116B8, 0x1171D, + 0x11720, + 0x11722, 0x1172C, 0x1182C, 0x1183B, @@ -246015,6 +250405,10 @@ static const UV UNI_GCB__XX_invlist[] = { /* for ASCII/Latin1 */ 0x1BC9F, 0x1BCA0, 0x1BCA4, + 0x1CF00, + 0x1CF2E, + 0x1CF30, + 0x1CF47, 0x1D165, 0x1D16A, 0x1D16D, @@ -246049,6 +250443,8 @@ static const UV UNI_GCB__XX_invlist[] = { /* for ASCII/Latin1 */ 0x1E02B, 0x1E130, 0x1E137, + 0x1E2AE, + 0x1E2AF, 0x1E2EC, 0x1E2F0, 0x1E8D0, @@ -246071,7 +250467,7 @@ static const UV UNI_GCB__XX_invlist[] = { /* for ASCII/Latin1 */ && '$' == 91 && '@' == 124 && '`' == 121 && '\n' == 21 static const UV UNI_GCB__XX_invlist[] = { /* for EBCDIC 1047 */ - 620, /* Number of elements */ + 640, /* Number of elements */ 148565664, /* Version and data structure type */ 1, /* 0 if the list starts at 0; 1 if it starts at the element beyond 0 */ @@ -246135,7 +250531,11 @@ static const UV UNI_GCB__XX_invlist[] = { /* for EBCDIC 1047 */ 0x82E, 0x859, 0x85C, - 0x8D3, + 0x890, + 0x892, + 0x898, + 0x8A0, + 0x8CA, 0x904, 0x93A, 0x93D, @@ -246217,6 +250617,8 @@ static const UV UNI_GCB__XX_invlist[] = { /* for EBCDIC 1047 */ 0xBD8, 0xC00, 0xC05, + 0xC3C, + 0xC3D, 0xC3E, 0xC45, 0xC46, @@ -246322,7 +250724,7 @@ static const UV UNI_GCB__XX_invlist[] = { /* for EBCDIC 1047 */ 0x135D, 0x1360, 0x1712, - 0x1715, + 0x1716, 0x1732, 0x1735, 0x1752, @@ -246334,7 +250736,7 @@ static const UV UNI_GCB__XX_invlist[] = { /* for EBCDIC 1047 */ 0x17DD, 0x17DE, 0x180B, - 0x180F, + 0x1810, 0x1885, 0x1887, 0x18A9, @@ -246356,7 +250758,7 @@ static const UV UNI_GCB__XX_invlist[] = { /* for EBCDIC 1047 */ 0x1A7F, 0x1A80, 0x1AB0, - 0x1AC1, + 0x1ACF, 0x1B00, 0x1B05, 0x1B34, @@ -246382,8 +250784,6 @@ static const UV UNI_GCB__XX_invlist[] = { /* for EBCDIC 1047 */ 0x1CF7, 0x1CFA, 0x1DC0, - 0x1DFA, - 0x1DFB, 0x1E00, 0x200B, 0x2010, @@ -246509,16 +250909,24 @@ static const UV UNI_GCB__XX_invlist[] = { /* for EBCDIC 1047 */ 0x10EAD, 0x10F46, 0x10F51, + 0x10F82, + 0x10F86, 0x11000, 0x11003, 0x11038, 0x11047, + 0x11070, + 0x11071, + 0x11073, + 0x11075, 0x1107F, 0x11083, 0x110B0, 0x110BB, 0x110BD, 0x110BE, + 0x110C2, + 0x110C3, 0x110CD, 0x110CE, 0x11100, @@ -246580,6 +250988,8 @@ static const UV UNI_GCB__XX_invlist[] = { /* for EBCDIC 1047 */ 0x116AB, 0x116B8, 0x1171D, + 0x11720, + 0x11722, 0x1172C, 0x1182C, 0x1183B, @@ -246649,6 +251059,10 @@ static const UV UNI_GCB__XX_invlist[] = { /* for EBCDIC 1047 */ 0x1BC9F, 0x1BCA0, 0x1BCA4, + 0x1CF00, + 0x1CF2E, + 0x1CF30, + 0x1CF47, 0x1D165, 0x1D16A, 0x1D16D, @@ -246683,6 +251097,8 @@ static const UV UNI_GCB__XX_invlist[] = { /* for EBCDIC 1047 */ 0x1E02B, 0x1E130, 0x1E137, + 0x1E2AE, + 0x1E2AF, 0x1E2EC, 0x1E2F0, 0x1E8D0, @@ -246705,7 +251121,7 @@ static const UV UNI_GCB__XX_invlist[] = { /* for EBCDIC 1047 */ && '$' == 91 && '@' == 124 && '`' == 121 && '\n' == 37 static const UV UNI_GCB__XX_invlist[] = { /* for EBCDIC 037 */ - 620, /* Number of elements */ + 640, /* Number of elements */ 148565664, /* Version and data structure type */ 1, /* 0 if the list starts at 0; 1 if it starts at the element beyond 0 */ @@ -246769,7 +251185,11 @@ static const UV UNI_GCB__XX_invlist[] = { /* for EBCDIC 037 */ 0x82E, 0x859, 0x85C, - 0x8D3, + 0x890, + 0x892, + 0x898, + 0x8A0, + 0x8CA, 0x904, 0x93A, 0x93D, @@ -246851,6 +251271,8 @@ static const UV UNI_GCB__XX_invlist[] = { /* for EBCDIC 037 */ 0xBD8, 0xC00, 0xC05, + 0xC3C, + 0xC3D, 0xC3E, 0xC45, 0xC46, @@ -246956,7 +251378,7 @@ static const UV UNI_GCB__XX_invlist[] = { /* for EBCDIC 037 */ 0x135D, 0x1360, 0x1712, - 0x1715, + 0x1716, 0x1732, 0x1735, 0x1752, @@ -246968,7 +251390,7 @@ static const UV UNI_GCB__XX_invlist[] = { /* for EBCDIC 037 */ 0x17DD, 0x17DE, 0x180B, - 0x180F, + 0x1810, 0x1885, 0x1887, 0x18A9, @@ -246990,7 +251412,7 @@ static const UV UNI_GCB__XX_invlist[] = { /* for EBCDIC 037 */ 0x1A7F, 0x1A80, 0x1AB0, - 0x1AC1, + 0x1ACF, 0x1B00, 0x1B05, 0x1B34, @@ -247016,8 +251438,6 @@ static const UV UNI_GCB__XX_invlist[] = { /* for EBCDIC 037 */ 0x1CF7, 0x1CFA, 0x1DC0, - 0x1DFA, - 0x1DFB, 0x1E00, 0x200B, 0x2010, @@ -247143,16 +251563,24 @@ static const UV UNI_GCB__XX_invlist[] = { /* for EBCDIC 037 */ 0x10EAD, 0x10F46, 0x10F51, + 0x10F82, + 0x10F86, 0x11000, 0x11003, 0x11038, 0x11047, + 0x11070, + 0x11071, + 0x11073, + 0x11075, 0x1107F, 0x11083, 0x110B0, 0x110BB, 0x110BD, 0x110BE, + 0x110C2, + 0x110C3, 0x110CD, 0x110CE, 0x11100, @@ -247214,6 +251642,8 @@ static const UV UNI_GCB__XX_invlist[] = { /* for EBCDIC 037 */ 0x116AB, 0x116B8, 0x1171D, + 0x11720, + 0x11722, 0x1172C, 0x1182C, 0x1183B, @@ -247283,6 +251713,10 @@ static const UV UNI_GCB__XX_invlist[] = { /* for EBCDIC 037 */ 0x1BC9F, 0x1BCA0, 0x1BCA4, + 0x1CF00, + 0x1CF2E, + 0x1CF30, + 0x1CF47, 0x1D165, 0x1D16A, 0x1D16D, @@ -247317,6 +251751,8 @@ static const UV UNI_GCB__XX_invlist[] = { /* for EBCDIC 037 */ 0x1E02B, 0x1E130, 0x1E137, + 0x1E2AE, + 0x1E2AF, 0x1E2EC, 0x1E2F0, 0x1E8D0, @@ -247400,7 +251836,7 @@ static const UV UNI_GEORGIANSUP_invlist[] = { /* for all charsets */ }; static const UV UNI_GLAG_invlist[] = { /* for all charsets */ - 23, /* Number of elements */ + 21, /* Number of elements */ 148565664, /* Version and data structure type */ 1, /* 0 if the list starts at 0; 1 if it starts at the element beyond 0 */ @@ -247410,9 +251846,7 @@ static const UV UNI_GLAG_invlist[] = { /* for all charsets */ 0x487, 0x488, 0x2C00, - 0x2C2F, - 0x2C30, - 0x2C5F, + 0x2C60, 0x2E43, 0x2E44, 0xA66F, @@ -247556,7 +251990,7 @@ static const UV UNI_GRAN_invlist[] = { /* for all charsets */ # if 'A' == 65 /* ASCII/Latin1 */ static const UV UNI_GRBASE_invlist[] = { /* for ASCII/Latin1 */ - 1669, /* Number of elements */ + 1723, /* Number of elements */ 148565664, /* Version and data structure type */ 1, /* 0 if the list starts at 0; 1 if it starts at the element beyond 0 */ @@ -247603,7 +252037,7 @@ static const UV UNI_GRBASE_invlist[] = { /* for ASCII/Latin1 */ 0x610, 0x61B, 0x61C, - 0x61E, + 0x61D, 0x64B, 0x660, 0x670, @@ -247645,10 +252079,10 @@ static const UV UNI_GRBASE_invlist[] = { /* for ASCII/Latin1 */ 0x85F, 0x860, 0x86B, + 0x870, + 0x88F, 0x8A0, - 0x8B5, - 0x8B6, - 0x8C8, + 0x8CA, 0x903, 0x93A, 0x93B, @@ -247825,6 +252259,8 @@ static const UV UNI_GRBASE_invlist[] = { /* for ASCII/Latin1 */ 0xC45, 0xC58, 0xC5B, + 0xC5D, + 0xC5E, 0xC60, 0xC62, 0xC66, @@ -247851,7 +252287,7 @@ static const UV UNI_GRBASE_invlist[] = { /* for ASCII/Latin1 */ 0xCC9, 0xCCA, 0xCCC, - 0xCDE, + 0xCDD, 0xCDF, 0xCE0, 0xCE2, @@ -248030,12 +252466,12 @@ static const UV UNI_GRBASE_invlist[] = { /* for ASCII/Latin1 */ 0x16A0, 0x16F9, 0x1700, - 0x170D, - 0x170E, 0x1712, - 0x1720, + 0x1715, + 0x1716, + 0x171F, 0x1732, - 0x1735, + 0x1734, 0x1737, 0x1740, 0x1752, @@ -248120,11 +252556,11 @@ static const UV UNI_GRBASE_invlist[] = { /* for ASCII/Latin1 */ 0x1B3D, 0x1B42, 0x1B43, - 0x1B4C, + 0x1B4D, 0x1B50, 0x1B6B, 0x1B74, - 0x1B7D, + 0x1B7F, 0x1B82, 0x1BA2, 0x1BA6, @@ -248212,7 +252648,7 @@ static const UV UNI_GRBASE_invlist[] = { /* for ASCII/Latin1 */ 0x2090, 0x209D, 0x20A0, - 0x20C0, + 0x20C1, 0x2100, 0x218C, 0x2190, @@ -248224,10 +252660,6 @@ static const UV UNI_GRBASE_invlist[] = { /* for ASCII/Latin1 */ 0x2B76, 0x2B96, 0x2B97, - 0x2C2F, - 0x2C30, - 0x2C5F, - 0x2C60, 0x2CEF, 0x2CF2, 0x2CF4, @@ -248260,7 +252692,7 @@ static const UV UNI_GRBASE_invlist[] = { /* for ASCII/Latin1 */ 0x2DD8, 0x2DDF, 0x2E00, - 0x2E53, + 0x2E5E, 0x2E80, 0x2E9A, 0x2E9B, @@ -248286,8 +252718,6 @@ static const UV UNI_GRBASE_invlist[] = { /* for ASCII/Latin1 */ 0x31F0, 0x321F, 0x3220, - 0x9FFD, - 0xA000, 0xA48D, 0xA490, 0xA4C7, @@ -248304,10 +252734,14 @@ static const UV UNI_GRBASE_invlist[] = { /* for ASCII/Latin1 */ 0xA6F2, 0xA6F8, 0xA700, - 0xA7C0, - 0xA7C2, 0xA7CB, - 0xA7F5, + 0xA7D0, + 0xA7D2, + 0xA7D3, + 0xA7D4, + 0xA7D5, + 0xA7DA, + 0xA7F2, 0xA802, 0xA803, 0xA806, @@ -248428,15 +252862,15 @@ static const UV UNI_GRBASE_invlist[] = { /* for ASCII/Latin1 */ 0xFB43, 0xFB45, 0xFB46, - 0xFBC2, + 0xFBC3, 0xFBD3, - 0xFD40, - 0xFD50, 0xFD90, 0xFD92, 0xFDC8, + 0xFDCF, + 0xFDD0, 0xFDF0, - 0xFDFE, + 0xFE00, 0xFE10, 0xFE1A, 0xFE30, @@ -248524,13 +252958,33 @@ static const UV UNI_GRBASE_invlist[] = { /* for ASCII/Latin1 */ 0x10530, 0x10564, 0x1056F, - 0x10570, + 0x1057B, + 0x1057C, + 0x1058B, + 0x1058C, + 0x10593, + 0x10594, + 0x10596, + 0x10597, + 0x105A2, + 0x105A3, + 0x105B2, + 0x105B3, + 0x105BA, + 0x105BB, + 0x105BD, 0x10600, 0x10737, 0x10740, 0x10756, 0x10760, 0x10768, + 0x10780, + 0x10786, + 0x10787, + 0x107B1, + 0x107B2, + 0x107BB, 0x10800, 0x10806, 0x10808, @@ -248615,6 +253069,10 @@ static const UV UNI_GRBASE_invlist[] = { /* for ASCII/Latin1 */ 0x10F46, 0x10F51, 0x10F5A, + 0x10F70, + 0x10F82, + 0x10F86, + 0x10F8A, 0x10FB0, 0x10FCC, 0x10FE0, @@ -248627,6 +253085,10 @@ static const UV UNI_GRBASE_invlist[] = { /* for ASCII/Latin1 */ 0x1104E, 0x11052, 0x11070, + 0x11071, + 0x11073, + 0x11075, + 0x11076, 0x11082, 0x110B3, 0x110B7, @@ -248772,7 +253234,7 @@ static const UV UNI_GRBASE_invlist[] = { /* for ASCII/Latin1 */ 0x116B6, 0x116B7, 0x116B8, - 0x116B9, + 0x116BA, 0x116C0, 0x116CA, 0x11700, @@ -248782,7 +253244,7 @@ static const UV UNI_GRBASE_invlist[] = { /* for ASCII/Latin1 */ 0x11726, 0x11727, 0x11730, - 0x11740, + 0x11747, 0x11800, 0x1182F, 0x11838, @@ -248839,7 +253301,7 @@ static const UV UNI_GRBASE_invlist[] = { /* for ASCII/Latin1 */ 0x11A98, 0x11A9A, 0x11AA3, - 0x11AC0, + 0x11AB0, 0x11AF9, 0x11C00, 0x11C09, @@ -248899,6 +253361,8 @@ static const UV UNI_GRBASE_invlist[] = { /* for ASCII/Latin1 */ 0x12475, 0x12480, 0x12544, + 0x12F90, + 0x12FF3, 0x13000, 0x1342F, 0x14400, @@ -248910,7 +253374,9 @@ static const UV UNI_GRBASE_invlist[] = { /* for ASCII/Latin1 */ 0x16A60, 0x16A6A, 0x16A6E, - 0x16A70, + 0x16ABF, + 0x16AC0, + 0x16ACA, 0x16AD0, 0x16AEE, 0x16AF5, @@ -248945,8 +253411,14 @@ static const UV UNI_GRBASE_invlist[] = { /* for ASCII/Latin1 */ 0x18CD6, 0x18D00, 0x18D09, + 0x1AFF0, + 0x1AFF4, + 0x1AFF5, + 0x1AFFC, + 0x1AFFD, + 0x1AFFF, 0x1B000, - 0x1B11F, + 0x1B123, 0x1B150, 0x1B153, 0x1B164, @@ -248965,6 +253437,8 @@ static const UV UNI_GRBASE_invlist[] = { /* for ASCII/Latin1 */ 0x1BC9D, 0x1BC9F, 0x1BCA0, + 0x1CF50, + 0x1CFC4, 0x1D000, 0x1D0F6, 0x1D100, @@ -248980,7 +253454,7 @@ static const UV UNI_GRBASE_invlist[] = { /* for ASCII/Latin1 */ 0x1D18C, 0x1D1AA, 0x1D1AE, - 0x1D1E9, + 0x1D1EB, 0x1D200, 0x1D242, 0x1D245, @@ -249041,6 +253515,8 @@ static const UV UNI_GRBASE_invlist[] = { /* for ASCII/Latin1 */ 0x1DA84, 0x1DA85, 0x1DA8C, + 0x1DF00, + 0x1DF1F, 0x1E100, 0x1E12D, 0x1E137, @@ -249049,12 +253525,22 @@ static const UV UNI_GRBASE_invlist[] = { /* for ASCII/Latin1 */ 0x1E14A, 0x1E14E, 0x1E150, + 0x1E290, + 0x1E2AE, 0x1E2C0, 0x1E2EC, 0x1E2F0, 0x1E2FA, 0x1E2FF, 0x1E300, + 0x1E7E0, + 0x1E7E7, + 0x1E7E8, + 0x1E7EC, + 0x1E7ED, + 0x1E7EF, + 0x1E7F0, + 0x1E7FF, 0x1E800, 0x1E8C5, 0x1E8C7, @@ -249165,7 +253651,7 @@ static const UV UNI_GRBASE_invlist[] = { /* for ASCII/Latin1 */ 0x1F266, 0x1F300, 0x1F6D8, - 0x1F6E0, + 0x1F6DD, 0x1F6ED, 0x1F6F0, 0x1F6FD, @@ -249175,6 +253661,8 @@ static const UV UNI_GRBASE_invlist[] = { /* for ASCII/Latin1 */ 0x1F7D9, 0x1F7E0, 0x1F7EC, + 0x1F7F0, + 0x1F7F1, 0x1F800, 0x1F80C, 0x1F810, @@ -249188,27 +253676,27 @@ static const UV UNI_GRBASE_invlist[] = { /* for ASCII/Latin1 */ 0x1F8B0, 0x1F8B2, 0x1F900, - 0x1F979, - 0x1F97A, - 0x1F9CC, - 0x1F9CD, 0x1FA54, 0x1FA60, 0x1FA6E, 0x1FA70, 0x1FA75, 0x1FA78, - 0x1FA7B, + 0x1FA7D, 0x1FA80, 0x1FA87, 0x1FA90, - 0x1FAA9, + 0x1FAAD, 0x1FAB0, - 0x1FAB7, + 0x1FABB, 0x1FAC0, - 0x1FAC3, + 0x1FAC6, 0x1FAD0, - 0x1FAD7, + 0x1FADA, + 0x1FAE0, + 0x1FAE8, + 0x1FAF0, + 0x1FAF7, 0x1FB00, 0x1FB93, 0x1FB94, @@ -249216,9 +253704,9 @@ static const UV UNI_GRBASE_invlist[] = { /* for ASCII/Latin1 */ 0x1FBF0, 0x1FBFA, 0x20000, - 0x2A6DE, + 0x2A6E0, 0x2A700, - 0x2B735, + 0x2B739, 0x2B740, 0x2B81E, 0x2B820, @@ -249239,7 +253727,7 @@ static const UV UNI_GRBASE_invlist[] = { /* for ASCII/Latin1 */ && '$' == 91 && '@' == 124 && '`' == 121 && '\n' == 21 static const UV UNI_GRBASE_invlist[] = { /* for EBCDIC 1047 */ - 1669, /* Number of elements */ + 1723, /* Number of elements */ 148565664, /* Version and data structure type */ 1, /* 0 if the list starts at 0; 1 if it starts at the element beyond 0 */ @@ -249286,7 +253774,7 @@ static const UV UNI_GRBASE_invlist[] = { /* for EBCDIC 1047 */ 0x610, 0x61B, 0x61C, - 0x61E, + 0x61D, 0x64B, 0x660, 0x670, @@ -249328,10 +253816,10 @@ static const UV UNI_GRBASE_invlist[] = { /* for EBCDIC 1047 */ 0x85F, 0x860, 0x86B, + 0x870, + 0x88F, 0x8A0, - 0x8B5, - 0x8B6, - 0x8C8, + 0x8CA, 0x903, 0x93A, 0x93B, @@ -249508,6 +253996,8 @@ static const UV UNI_GRBASE_invlist[] = { /* for EBCDIC 1047 */ 0xC45, 0xC58, 0xC5B, + 0xC5D, + 0xC5E, 0xC60, 0xC62, 0xC66, @@ -249534,7 +254024,7 @@ static const UV UNI_GRBASE_invlist[] = { /* for EBCDIC 1047 */ 0xCC9, 0xCCA, 0xCCC, - 0xCDE, + 0xCDD, 0xCDF, 0xCE0, 0xCE2, @@ -249713,12 +254203,12 @@ static const UV UNI_GRBASE_invlist[] = { /* for EBCDIC 1047 */ 0x16A0, 0x16F9, 0x1700, - 0x170D, - 0x170E, 0x1712, - 0x1720, + 0x1715, + 0x1716, + 0x171F, 0x1732, - 0x1735, + 0x1734, 0x1737, 0x1740, 0x1752, @@ -249803,11 +254293,11 @@ static const UV UNI_GRBASE_invlist[] = { /* for EBCDIC 1047 */ 0x1B3D, 0x1B42, 0x1B43, - 0x1B4C, + 0x1B4D, 0x1B50, 0x1B6B, 0x1B74, - 0x1B7D, + 0x1B7F, 0x1B82, 0x1BA2, 0x1BA6, @@ -249895,7 +254385,7 @@ static const UV UNI_GRBASE_invlist[] = { /* for EBCDIC 1047 */ 0x2090, 0x209D, 0x20A0, - 0x20C0, + 0x20C1, 0x2100, 0x218C, 0x2190, @@ -249907,10 +254397,6 @@ static const UV UNI_GRBASE_invlist[] = { /* for EBCDIC 1047 */ 0x2B76, 0x2B96, 0x2B97, - 0x2C2F, - 0x2C30, - 0x2C5F, - 0x2C60, 0x2CEF, 0x2CF2, 0x2CF4, @@ -249943,7 +254429,7 @@ static const UV UNI_GRBASE_invlist[] = { /* for EBCDIC 1047 */ 0x2DD8, 0x2DDF, 0x2E00, - 0x2E53, + 0x2E5E, 0x2E80, 0x2E9A, 0x2E9B, @@ -249969,8 +254455,6 @@ static const UV UNI_GRBASE_invlist[] = { /* for EBCDIC 1047 */ 0x31F0, 0x321F, 0x3220, - 0x9FFD, - 0xA000, 0xA48D, 0xA490, 0xA4C7, @@ -249987,10 +254471,14 @@ static const UV UNI_GRBASE_invlist[] = { /* for EBCDIC 1047 */ 0xA6F2, 0xA6F8, 0xA700, - 0xA7C0, - 0xA7C2, 0xA7CB, - 0xA7F5, + 0xA7D0, + 0xA7D2, + 0xA7D3, + 0xA7D4, + 0xA7D5, + 0xA7DA, + 0xA7F2, 0xA802, 0xA803, 0xA806, @@ -250111,15 +254599,15 @@ static const UV UNI_GRBASE_invlist[] = { /* for EBCDIC 1047 */ 0xFB43, 0xFB45, 0xFB46, - 0xFBC2, + 0xFBC3, 0xFBD3, - 0xFD40, - 0xFD50, 0xFD90, 0xFD92, 0xFDC8, + 0xFDCF, + 0xFDD0, 0xFDF0, - 0xFDFE, + 0xFE00, 0xFE10, 0xFE1A, 0xFE30, @@ -250207,13 +254695,33 @@ static const UV UNI_GRBASE_invlist[] = { /* for EBCDIC 1047 */ 0x10530, 0x10564, 0x1056F, - 0x10570, + 0x1057B, + 0x1057C, + 0x1058B, + 0x1058C, + 0x10593, + 0x10594, + 0x10596, + 0x10597, + 0x105A2, + 0x105A3, + 0x105B2, + 0x105B3, + 0x105BA, + 0x105BB, + 0x105BD, 0x10600, 0x10737, 0x10740, 0x10756, 0x10760, 0x10768, + 0x10780, + 0x10786, + 0x10787, + 0x107B1, + 0x107B2, + 0x107BB, 0x10800, 0x10806, 0x10808, @@ -250298,6 +254806,10 @@ static const UV UNI_GRBASE_invlist[] = { /* for EBCDIC 1047 */ 0x10F46, 0x10F51, 0x10F5A, + 0x10F70, + 0x10F82, + 0x10F86, + 0x10F8A, 0x10FB0, 0x10FCC, 0x10FE0, @@ -250310,6 +254822,10 @@ static const UV UNI_GRBASE_invlist[] = { /* for EBCDIC 1047 */ 0x1104E, 0x11052, 0x11070, + 0x11071, + 0x11073, + 0x11075, + 0x11076, 0x11082, 0x110B3, 0x110B7, @@ -250455,7 +254971,7 @@ static const UV UNI_GRBASE_invlist[] = { /* for EBCDIC 1047 */ 0x116B6, 0x116B7, 0x116B8, - 0x116B9, + 0x116BA, 0x116C0, 0x116CA, 0x11700, @@ -250465,7 +254981,7 @@ static const UV UNI_GRBASE_invlist[] = { /* for EBCDIC 1047 */ 0x11726, 0x11727, 0x11730, - 0x11740, + 0x11747, 0x11800, 0x1182F, 0x11838, @@ -250522,7 +255038,7 @@ static const UV UNI_GRBASE_invlist[] = { /* for EBCDIC 1047 */ 0x11A98, 0x11A9A, 0x11AA3, - 0x11AC0, + 0x11AB0, 0x11AF9, 0x11C00, 0x11C09, @@ -250582,6 +255098,8 @@ static const UV UNI_GRBASE_invlist[] = { /* for EBCDIC 1047 */ 0x12475, 0x12480, 0x12544, + 0x12F90, + 0x12FF3, 0x13000, 0x1342F, 0x14400, @@ -250593,7 +255111,9 @@ static const UV UNI_GRBASE_invlist[] = { /* for EBCDIC 1047 */ 0x16A60, 0x16A6A, 0x16A6E, - 0x16A70, + 0x16ABF, + 0x16AC0, + 0x16ACA, 0x16AD0, 0x16AEE, 0x16AF5, @@ -250628,8 +255148,14 @@ static const UV UNI_GRBASE_invlist[] = { /* for EBCDIC 1047 */ 0x18CD6, 0x18D00, 0x18D09, + 0x1AFF0, + 0x1AFF4, + 0x1AFF5, + 0x1AFFC, + 0x1AFFD, + 0x1AFFF, 0x1B000, - 0x1B11F, + 0x1B123, 0x1B150, 0x1B153, 0x1B164, @@ -250648,6 +255174,8 @@ static const UV UNI_GRBASE_invlist[] = { /* for EBCDIC 1047 */ 0x1BC9D, 0x1BC9F, 0x1BCA0, + 0x1CF50, + 0x1CFC4, 0x1D000, 0x1D0F6, 0x1D100, @@ -250663,7 +255191,7 @@ static const UV UNI_GRBASE_invlist[] = { /* for EBCDIC 1047 */ 0x1D18C, 0x1D1AA, 0x1D1AE, - 0x1D1E9, + 0x1D1EB, 0x1D200, 0x1D242, 0x1D245, @@ -250724,6 +255252,8 @@ static const UV UNI_GRBASE_invlist[] = { /* for EBCDIC 1047 */ 0x1DA84, 0x1DA85, 0x1DA8C, + 0x1DF00, + 0x1DF1F, 0x1E100, 0x1E12D, 0x1E137, @@ -250732,12 +255262,22 @@ static const UV UNI_GRBASE_invlist[] = { /* for EBCDIC 1047 */ 0x1E14A, 0x1E14E, 0x1E150, + 0x1E290, + 0x1E2AE, 0x1E2C0, 0x1E2EC, 0x1E2F0, 0x1E2FA, 0x1E2FF, 0x1E300, + 0x1E7E0, + 0x1E7E7, + 0x1E7E8, + 0x1E7EC, + 0x1E7ED, + 0x1E7EF, + 0x1E7F0, + 0x1E7FF, 0x1E800, 0x1E8C5, 0x1E8C7, @@ -250848,7 +255388,7 @@ static const UV UNI_GRBASE_invlist[] = { /* for EBCDIC 1047 */ 0x1F266, 0x1F300, 0x1F6D8, - 0x1F6E0, + 0x1F6DD, 0x1F6ED, 0x1F6F0, 0x1F6FD, @@ -250858,6 +255398,8 @@ static const UV UNI_GRBASE_invlist[] = { /* for EBCDIC 1047 */ 0x1F7D9, 0x1F7E0, 0x1F7EC, + 0x1F7F0, + 0x1F7F1, 0x1F800, 0x1F80C, 0x1F810, @@ -250871,27 +255413,27 @@ static const UV UNI_GRBASE_invlist[] = { /* for EBCDIC 1047 */ 0x1F8B0, 0x1F8B2, 0x1F900, - 0x1F979, - 0x1F97A, - 0x1F9CC, - 0x1F9CD, 0x1FA54, 0x1FA60, 0x1FA6E, 0x1FA70, 0x1FA75, 0x1FA78, - 0x1FA7B, + 0x1FA7D, 0x1FA80, 0x1FA87, 0x1FA90, - 0x1FAA9, + 0x1FAAD, 0x1FAB0, - 0x1FAB7, + 0x1FABB, 0x1FAC0, - 0x1FAC3, + 0x1FAC6, 0x1FAD0, - 0x1FAD7, + 0x1FADA, + 0x1FAE0, + 0x1FAE8, + 0x1FAF0, + 0x1FAF7, 0x1FB00, 0x1FB93, 0x1FB94, @@ -250899,9 +255441,9 @@ static const UV UNI_GRBASE_invlist[] = { /* for EBCDIC 1047 */ 0x1FBF0, 0x1FBFA, 0x20000, - 0x2A6DE, + 0x2A6E0, 0x2A700, - 0x2B735, + 0x2B739, 0x2B740, 0x2B81E, 0x2B820, @@ -250922,7 +255464,7 @@ static const UV UNI_GRBASE_invlist[] = { /* for EBCDIC 1047 */ && '$' == 91 && '@' == 124 && '`' == 121 && '\n' == 37 static const UV UNI_GRBASE_invlist[] = { /* for EBCDIC 037 */ - 1669, /* Number of elements */ + 1723, /* Number of elements */ 148565664, /* Version and data structure type */ 1, /* 0 if the list starts at 0; 1 if it starts at the element beyond 0 */ @@ -250969,7 +255511,7 @@ static const UV UNI_GRBASE_invlist[] = { /* for EBCDIC 037 */ 0x610, 0x61B, 0x61C, - 0x61E, + 0x61D, 0x64B, 0x660, 0x670, @@ -251011,10 +255553,10 @@ static const UV UNI_GRBASE_invlist[] = { /* for EBCDIC 037 */ 0x85F, 0x860, 0x86B, + 0x870, + 0x88F, 0x8A0, - 0x8B5, - 0x8B6, - 0x8C8, + 0x8CA, 0x903, 0x93A, 0x93B, @@ -251191,6 +255733,8 @@ static const UV UNI_GRBASE_invlist[] = { /* for EBCDIC 037 */ 0xC45, 0xC58, 0xC5B, + 0xC5D, + 0xC5E, 0xC60, 0xC62, 0xC66, @@ -251217,7 +255761,7 @@ static const UV UNI_GRBASE_invlist[] = { /* for EBCDIC 037 */ 0xCC9, 0xCCA, 0xCCC, - 0xCDE, + 0xCDD, 0xCDF, 0xCE0, 0xCE2, @@ -251396,12 +255940,12 @@ static const UV UNI_GRBASE_invlist[] = { /* for EBCDIC 037 */ 0x16A0, 0x16F9, 0x1700, - 0x170D, - 0x170E, 0x1712, - 0x1720, + 0x1715, + 0x1716, + 0x171F, 0x1732, - 0x1735, + 0x1734, 0x1737, 0x1740, 0x1752, @@ -251486,11 +256030,11 @@ static const UV UNI_GRBASE_invlist[] = { /* for EBCDIC 037 */ 0x1B3D, 0x1B42, 0x1B43, - 0x1B4C, + 0x1B4D, 0x1B50, 0x1B6B, 0x1B74, - 0x1B7D, + 0x1B7F, 0x1B82, 0x1BA2, 0x1BA6, @@ -251578,7 +256122,7 @@ static const UV UNI_GRBASE_invlist[] = { /* for EBCDIC 037 */ 0x2090, 0x209D, 0x20A0, - 0x20C0, + 0x20C1, 0x2100, 0x218C, 0x2190, @@ -251590,10 +256134,6 @@ static const UV UNI_GRBASE_invlist[] = { /* for EBCDIC 037 */ 0x2B76, 0x2B96, 0x2B97, - 0x2C2F, - 0x2C30, - 0x2C5F, - 0x2C60, 0x2CEF, 0x2CF2, 0x2CF4, @@ -251626,7 +256166,7 @@ static const UV UNI_GRBASE_invlist[] = { /* for EBCDIC 037 */ 0x2DD8, 0x2DDF, 0x2E00, - 0x2E53, + 0x2E5E, 0x2E80, 0x2E9A, 0x2E9B, @@ -251652,8 +256192,6 @@ static const UV UNI_GRBASE_invlist[] = { /* for EBCDIC 037 */ 0x31F0, 0x321F, 0x3220, - 0x9FFD, - 0xA000, 0xA48D, 0xA490, 0xA4C7, @@ -251670,10 +256208,14 @@ static const UV UNI_GRBASE_invlist[] = { /* for EBCDIC 037 */ 0xA6F2, 0xA6F8, 0xA700, - 0xA7C0, - 0xA7C2, 0xA7CB, - 0xA7F5, + 0xA7D0, + 0xA7D2, + 0xA7D3, + 0xA7D4, + 0xA7D5, + 0xA7DA, + 0xA7F2, 0xA802, 0xA803, 0xA806, @@ -251794,15 +256336,15 @@ static const UV UNI_GRBASE_invlist[] = { /* for EBCDIC 037 */ 0xFB43, 0xFB45, 0xFB46, - 0xFBC2, + 0xFBC3, 0xFBD3, - 0xFD40, - 0xFD50, 0xFD90, 0xFD92, 0xFDC8, + 0xFDCF, + 0xFDD0, 0xFDF0, - 0xFDFE, + 0xFE00, 0xFE10, 0xFE1A, 0xFE30, @@ -251890,13 +256432,33 @@ static const UV UNI_GRBASE_invlist[] = { /* for EBCDIC 037 */ 0x10530, 0x10564, 0x1056F, - 0x10570, + 0x1057B, + 0x1057C, + 0x1058B, + 0x1058C, + 0x10593, + 0x10594, + 0x10596, + 0x10597, + 0x105A2, + 0x105A3, + 0x105B2, + 0x105B3, + 0x105BA, + 0x105BB, + 0x105BD, 0x10600, 0x10737, 0x10740, 0x10756, 0x10760, 0x10768, + 0x10780, + 0x10786, + 0x10787, + 0x107B1, + 0x107B2, + 0x107BB, 0x10800, 0x10806, 0x10808, @@ -251981,6 +256543,10 @@ static const UV UNI_GRBASE_invlist[] = { /* for EBCDIC 037 */ 0x10F46, 0x10F51, 0x10F5A, + 0x10F70, + 0x10F82, + 0x10F86, + 0x10F8A, 0x10FB0, 0x10FCC, 0x10FE0, @@ -251993,6 +256559,10 @@ static const UV UNI_GRBASE_invlist[] = { /* for EBCDIC 037 */ 0x1104E, 0x11052, 0x11070, + 0x11071, + 0x11073, + 0x11075, + 0x11076, 0x11082, 0x110B3, 0x110B7, @@ -252138,7 +256708,7 @@ static const UV UNI_GRBASE_invlist[] = { /* for EBCDIC 037 */ 0x116B6, 0x116B7, 0x116B8, - 0x116B9, + 0x116BA, 0x116C0, 0x116CA, 0x11700, @@ -252148,7 +256718,7 @@ static const UV UNI_GRBASE_invlist[] = { /* for EBCDIC 037 */ 0x11726, 0x11727, 0x11730, - 0x11740, + 0x11747, 0x11800, 0x1182F, 0x11838, @@ -252205,7 +256775,7 @@ static const UV UNI_GRBASE_invlist[] = { /* for EBCDIC 037 */ 0x11A98, 0x11A9A, 0x11AA3, - 0x11AC0, + 0x11AB0, 0x11AF9, 0x11C00, 0x11C09, @@ -252265,6 +256835,8 @@ static const UV UNI_GRBASE_invlist[] = { /* for EBCDIC 037 */ 0x12475, 0x12480, 0x12544, + 0x12F90, + 0x12FF3, 0x13000, 0x1342F, 0x14400, @@ -252276,7 +256848,9 @@ static const UV UNI_GRBASE_invlist[] = { /* for EBCDIC 037 */ 0x16A60, 0x16A6A, 0x16A6E, - 0x16A70, + 0x16ABF, + 0x16AC0, + 0x16ACA, 0x16AD0, 0x16AEE, 0x16AF5, @@ -252311,8 +256885,14 @@ static const UV UNI_GRBASE_invlist[] = { /* for EBCDIC 037 */ 0x18CD6, 0x18D00, 0x18D09, + 0x1AFF0, + 0x1AFF4, + 0x1AFF5, + 0x1AFFC, + 0x1AFFD, + 0x1AFFF, 0x1B000, - 0x1B11F, + 0x1B123, 0x1B150, 0x1B153, 0x1B164, @@ -252331,6 +256911,8 @@ static const UV UNI_GRBASE_invlist[] = { /* for EBCDIC 037 */ 0x1BC9D, 0x1BC9F, 0x1BCA0, + 0x1CF50, + 0x1CFC4, 0x1D000, 0x1D0F6, 0x1D100, @@ -252346,7 +256928,7 @@ static const UV UNI_GRBASE_invlist[] = { /* for EBCDIC 037 */ 0x1D18C, 0x1D1AA, 0x1D1AE, - 0x1D1E9, + 0x1D1EB, 0x1D200, 0x1D242, 0x1D245, @@ -252407,6 +256989,8 @@ static const UV UNI_GRBASE_invlist[] = { /* for EBCDIC 037 */ 0x1DA84, 0x1DA85, 0x1DA8C, + 0x1DF00, + 0x1DF1F, 0x1E100, 0x1E12D, 0x1E137, @@ -252415,12 +256999,22 @@ static const UV UNI_GRBASE_invlist[] = { /* for EBCDIC 037 */ 0x1E14A, 0x1E14E, 0x1E150, + 0x1E290, + 0x1E2AE, 0x1E2C0, 0x1E2EC, 0x1E2F0, 0x1E2FA, 0x1E2FF, 0x1E300, + 0x1E7E0, + 0x1E7E7, + 0x1E7E8, + 0x1E7EC, + 0x1E7ED, + 0x1E7EF, + 0x1E7F0, + 0x1E7FF, 0x1E800, 0x1E8C5, 0x1E8C7, @@ -252531,7 +257125,7 @@ static const UV UNI_GRBASE_invlist[] = { /* for EBCDIC 037 */ 0x1F266, 0x1F300, 0x1F6D8, - 0x1F6E0, + 0x1F6DD, 0x1F6ED, 0x1F6F0, 0x1F6FD, @@ -252541,6 +257135,8 @@ static const UV UNI_GRBASE_invlist[] = { /* for EBCDIC 037 */ 0x1F7D9, 0x1F7E0, 0x1F7EC, + 0x1F7F0, + 0x1F7F1, 0x1F800, 0x1F80C, 0x1F810, @@ -252554,27 +257150,27 @@ static const UV UNI_GRBASE_invlist[] = { /* for EBCDIC 037 */ 0x1F8B0, 0x1F8B2, 0x1F900, - 0x1F979, - 0x1F97A, - 0x1F9CC, - 0x1F9CD, 0x1FA54, 0x1FA60, 0x1FA6E, 0x1FA70, 0x1FA75, 0x1FA78, - 0x1FA7B, + 0x1FA7D, 0x1FA80, 0x1FA87, 0x1FA90, - 0x1FAA9, + 0x1FAAD, 0x1FAB0, - 0x1FAB7, + 0x1FABB, 0x1FAC0, - 0x1FAC3, + 0x1FAC6, 0x1FAD0, - 0x1FAD7, + 0x1FADA, + 0x1FAE0, + 0x1FAE8, + 0x1FAF0, + 0x1FAF7, 0x1FB00, 0x1FB93, 0x1FB94, @@ -252582,9 +257178,9 @@ static const UV UNI_GRBASE_invlist[] = { /* for EBCDIC 037 */ 0x1FBF0, 0x1FBFA, 0x20000, - 0x2A6DE, + 0x2A6E0, 0x2A700, - 0x2B735, + 0x2B739, 0x2B740, 0x2B81E, 0x2B820, @@ -252694,7 +257290,7 @@ static const UV UNI_GREK_invlist[] = { /* for all charsets */ }; static const UV UNI_GREXT_invlist[] = { /* for all charsets */ - 689, /* Number of elements */ + 707, /* Number of elements */ 148565664, /* Version and data structure type */ 1, /* 0 if the list starts at 0; 1 if it starts at the element beyond 0 */ @@ -252747,7 +257343,9 @@ static const UV UNI_GREXT_invlist[] = { /* for all charsets */ 0x82E, 0x859, 0x85C, - 0x8D3, + 0x898, + 0x8A0, + 0x8CA, 0x8E2, 0x8E3, 0x903, @@ -252837,6 +257435,8 @@ static const UV UNI_GREXT_invlist[] = { /* for all charsets */ 0xC01, 0xC04, 0xC05, + 0xC3C, + 0xC3D, 0xC3E, 0xC41, 0xC46, @@ -252948,7 +257548,7 @@ static const UV UNI_GREXT_invlist[] = { /* for all charsets */ 0x1712, 0x1715, 0x1732, - 0x1735, + 0x1734, 0x1752, 0x1754, 0x1772, @@ -252965,6 +257565,8 @@ static const UV UNI_GREXT_invlist[] = { /* for all charsets */ 0x17DE, 0x180B, 0x180E, + 0x180F, + 0x1810, 0x1885, 0x1887, 0x18A9, @@ -252996,7 +257598,7 @@ static const UV UNI_GREXT_invlist[] = { /* for all charsets */ 0x1A7F, 0x1A80, 0x1AB0, - 0x1AC1, + 0x1ACF, 0x1B00, 0x1B04, 0x1B34, @@ -253040,8 +257642,6 @@ static const UV UNI_GREXT_invlist[] = { /* for all charsets */ 0x1CF8, 0x1CFA, 0x1DC0, - 0x1DFA, - 0x1DFB, 0x1E00, 0x200C, 0x200D, @@ -253159,16 +257759,24 @@ static const UV UNI_GREXT_invlist[] = { /* for all charsets */ 0x10EAD, 0x10F46, 0x10F51, + 0x10F82, + 0x10F86, 0x11001, 0x11002, 0x11038, 0x11047, + 0x11070, + 0x11071, + 0x11073, + 0x11075, 0x1107F, 0x11082, 0x110B3, 0x110B7, 0x110B9, 0x110BB, + 0x110C2, + 0x110C3, 0x11100, 0x11103, 0x11127, @@ -253339,6 +257947,10 @@ static const UV UNI_GREXT_invlist[] = { /* for all charsets */ 0x16FE5, 0x1BC9D, 0x1BC9F, + 0x1CF00, + 0x1CF2E, + 0x1CF30, + 0x1CF47, 0x1D165, 0x1D166, 0x1D167, @@ -253377,6 +257989,8 @@ static const UV UNI_GREXT_invlist[] = { /* for all charsets */ 0x1E02B, 0x1E130, 0x1E137, + 0x1E2AE, + 0x1E2AF, 0x1E2EC, 0x1E2F0, 0x1E8D0, @@ -253498,7 +258112,7 @@ static const UV UNI_HALFMARKS_invlist[] = { /* for all charsets */ }; static const UV UNI_HAN_invlist[] = { /* for all charsets */ - 73, /* Number of elements */ + 75, /* Number of elements */ 148565664, /* Version and data structure type */ 1, /* 0 if the list starts at 0; 1 if it starts at the element beyond 0 */ @@ -253544,7 +258158,7 @@ static const UV UNI_HAN_invlist[] = { /* for all charsets */ 0x3400, 0x4DC0, 0x4E00, - 0x9FFD, + 0xA000, 0xA700, 0xA708, 0xF900, @@ -253555,6 +258169,8 @@ static const UV UNI_HAN_invlist[] = { /* for all charsets */ 0xFE47, 0xFF61, 0xFF66, + 0x16FE2, + 0x16FE4, 0x16FF0, 0x16FF2, 0x1D360, @@ -253562,9 +258178,9 @@ static const UV UNI_HAN_invlist[] = { /* for all charsets */ 0x1F250, 0x1F252, 0x20000, - 0x2A6DE, + 0x2A6E0, 0x2A700, - 0x2B735, + 0x2B739, 0x2B740, 0x2B81E, 0x2B820, @@ -253730,7 +258346,7 @@ static const UV UNI_HIRA_invlist[] = { /* for all charsets */ 0xFF9E, 0xFFA0, 0x1B001, - 0x1B11F, + 0x1B120, 0x1B150, 0x1B153, 0x1F200, @@ -253918,7 +258534,7 @@ static const UV UNI_HYPHEN_invlist[] = { /* for EBCDIC 037 */ # if 'A' == 65 /* ASCII/Latin1 */ static const UV UNI_IDC_invlist[] = { /* for ASCII/Latin1 */ - 1461, /* Number of elements */ + 1513, /* Number of elements */ 148565664, /* Version and data structure type */ 1, /* 0 if the list starts at 0; 1 if it starts at the element beyond 0 */ @@ -254025,11 +258641,11 @@ static const UV UNI_IDC_invlist[] = { /* for ASCII/Latin1 */ 0x85C, 0x860, 0x86B, - 0x8A0, - 0x8B5, - 0x8B6, - 0x8C8, - 0x8D3, + 0x870, + 0x888, + 0x889, + 0x88F, + 0x898, 0x8E2, 0x8E3, 0x964, @@ -254197,7 +258813,7 @@ static const UV UNI_IDC_invlist[] = { /* for ASCII/Latin1 */ 0xC29, 0xC2A, 0xC3A, - 0xC3D, + 0xC3C, 0xC45, 0xC46, 0xC49, @@ -254207,6 +258823,8 @@ static const UV UNI_IDC_invlist[] = { /* for ASCII/Latin1 */ 0xC57, 0xC58, 0xC5B, + 0xC5D, + 0xC5E, 0xC60, 0xC64, 0xC66, @@ -254231,7 +258849,7 @@ static const UV UNI_IDC_invlist[] = { /* for ASCII/Latin1 */ 0xCCE, 0xCD5, 0xCD7, - 0xCDE, + 0xCDD, 0xCDF, 0xCE0, 0xCE4, @@ -254398,10 +259016,8 @@ static const UV UNI_IDC_invlist[] = { /* for ASCII/Latin1 */ 0x16EE, 0x16F9, 0x1700, - 0x170D, - 0x170E, - 0x1715, - 0x1720, + 0x1716, + 0x171F, 0x1735, 0x1740, 0x1754, @@ -254421,7 +259037,7 @@ static const UV UNI_IDC_invlist[] = { /* for ASCII/Latin1 */ 0x17EA, 0x180B, 0x180E, - 0x1810, + 0x180F, 0x181A, 0x1820, 0x1879, @@ -254460,9 +259076,9 @@ static const UV UNI_IDC_invlist[] = { /* for ASCII/Latin1 */ 0x1AB0, 0x1ABE, 0x1ABF, - 0x1AC1, + 0x1ACF, 0x1B00, - 0x1B4C, + 0x1B4D, 0x1B50, 0x1B5A, 0x1B6B, @@ -254486,8 +259102,6 @@ static const UV UNI_IDC_invlist[] = { /* for ASCII/Latin1 */ 0x1CD4, 0x1CFB, 0x1D00, - 0x1DFA, - 0x1DFB, 0x1F16, 0x1F18, 0x1F1E, @@ -254568,10 +259182,6 @@ static const UV UNI_IDC_invlist[] = { /* for ASCII/Latin1 */ 0x2160, 0x2189, 0x2C00, - 0x2C2F, - 0x2C30, - 0x2C5F, - 0x2C60, 0x2CE5, 0x2CEB, 0x2CF4, @@ -254632,8 +259242,6 @@ static const UV UNI_IDC_invlist[] = { /* for ASCII/Latin1 */ 0x3400, 0x4DC0, 0x4E00, - 0x9FFD, - 0xA000, 0xA48D, 0xA4D0, 0xA4FE, @@ -254652,10 +259260,14 @@ static const UV UNI_IDC_invlist[] = { /* for ASCII/Latin1 */ 0xA722, 0xA789, 0xA78B, - 0xA7C0, - 0xA7C2, 0xA7CB, - 0xA7F5, + 0xA7D0, + 0xA7D2, + 0xA7D3, + 0xA7D4, + 0xA7D5, + 0xA7DA, + 0xA7F2, 0xA828, 0xA82C, 0xA82D, @@ -254833,12 +259445,34 @@ static const UV UNI_IDC_invlist[] = { /* for ASCII/Latin1 */ 0x10528, 0x10530, 0x10564, + 0x10570, + 0x1057B, + 0x1057C, + 0x1058B, + 0x1058C, + 0x10593, + 0x10594, + 0x10596, + 0x10597, + 0x105A2, + 0x105A3, + 0x105B2, + 0x105B3, + 0x105BA, + 0x105BB, + 0x105BD, 0x10600, 0x10737, 0x10740, 0x10756, 0x10760, 0x10768, + 0x10780, + 0x10786, + 0x10787, + 0x107B1, + 0x107B2, + 0x107BB, 0x10800, 0x10806, 0x10808, @@ -254919,6 +259553,8 @@ static const UV UNI_IDC_invlist[] = { /* for ASCII/Latin1 */ 0x10F28, 0x10F30, 0x10F51, + 0x10F70, + 0x10F86, 0x10FB0, 0x10FC5, 0x10FE0, @@ -254926,9 +259562,11 @@ static const UV UNI_IDC_invlist[] = { /* for ASCII/Latin1 */ 0x11000, 0x11047, 0x11066, - 0x11070, + 0x11076, 0x1107F, 0x110BB, + 0x110C2, + 0x110C3, 0x110D0, 0x110E9, 0x110F0, @@ -255035,6 +259673,8 @@ static const UV UNI_IDC_invlist[] = { /* for ASCII/Latin1 */ 0x1172C, 0x11730, 0x1173A, + 0x11740, + 0x11747, 0x11800, 0x1183B, 0x118A0, @@ -255071,7 +259711,7 @@ static const UV UNI_IDC_invlist[] = { /* for ASCII/Latin1 */ 0x11A9A, 0x11A9D, 0x11A9E, - 0x11AC0, + 0x11AB0, 0x11AF9, 0x11C00, 0x11C09, @@ -255123,6 +259763,8 @@ static const UV UNI_IDC_invlist[] = { /* for ASCII/Latin1 */ 0x1246F, 0x12480, 0x12544, + 0x12F90, + 0x12FF1, 0x13000, 0x1342F, 0x14400, @@ -255133,6 +259775,10 @@ static const UV UNI_IDC_invlist[] = { /* for ASCII/Latin1 */ 0x16A5F, 0x16A60, 0x16A6A, + 0x16A70, + 0x16ABF, + 0x16AC0, + 0x16ACA, 0x16AD0, 0x16AEE, 0x16AF0, @@ -255167,8 +259813,14 @@ static const UV UNI_IDC_invlist[] = { /* for ASCII/Latin1 */ 0x18CD6, 0x18D00, 0x18D09, + 0x1AFF0, + 0x1AFF4, + 0x1AFF5, + 0x1AFFC, + 0x1AFFD, + 0x1AFFF, 0x1B000, - 0x1B11F, + 0x1B123, 0x1B150, 0x1B153, 0x1B164, @@ -255185,6 +259837,10 @@ static const UV UNI_IDC_invlist[] = { /* for ASCII/Latin1 */ 0x1BC9A, 0x1BC9D, 0x1BC9F, + 0x1CF00, + 0x1CF2E, + 0x1CF30, + 0x1CF47, 0x1D165, 0x1D16A, 0x1D16D, @@ -255271,6 +259927,8 @@ static const UV UNI_IDC_invlist[] = { /* for ASCII/Latin1 */ 0x1DAA0, 0x1DAA1, 0x1DAB0, + 0x1DF00, + 0x1DF1F, 0x1E000, 0x1E007, 0x1E008, @@ -255289,8 +259947,18 @@ static const UV UNI_IDC_invlist[] = { /* for ASCII/Latin1 */ 0x1E14A, 0x1E14E, 0x1E14F, + 0x1E290, + 0x1E2AF, 0x1E2C0, 0x1E2FA, + 0x1E7E0, + 0x1E7E7, + 0x1E7E8, + 0x1E7EC, + 0x1E7ED, + 0x1E7EF, + 0x1E7F0, + 0x1E7FF, 0x1E800, 0x1E8C5, 0x1E8D0, @@ -255368,9 +260036,9 @@ static const UV UNI_IDC_invlist[] = { /* for ASCII/Latin1 */ 0x1FBF0, 0x1FBFA, 0x20000, - 0x2A6DE, + 0x2A6E0, 0x2A700, - 0x2B735, + 0x2B739, 0x2B740, 0x2B81E, 0x2B820, @@ -255393,7 +260061,7 @@ static const UV UNI_IDC_invlist[] = { /* for ASCII/Latin1 */ && '$' == 91 && '@' == 124 && '`' == 121 && '\n' == 21 static const UV UNI_IDC_invlist[] = { /* for EBCDIC 1047 */ - 1485, /* Number of elements */ + 1537, /* Number of elements */ 148565664, /* Version and data structure type */ 1, /* 0 if the list starts at 0; 1 if it starts at the element beyond 0 */ @@ -255524,11 +260192,11 @@ static const UV UNI_IDC_invlist[] = { /* for EBCDIC 1047 */ 0x85C, 0x860, 0x86B, - 0x8A0, - 0x8B5, - 0x8B6, - 0x8C8, - 0x8D3, + 0x870, + 0x888, + 0x889, + 0x88F, + 0x898, 0x8E2, 0x8E3, 0x964, @@ -255696,7 +260364,7 @@ static const UV UNI_IDC_invlist[] = { /* for EBCDIC 1047 */ 0xC29, 0xC2A, 0xC3A, - 0xC3D, + 0xC3C, 0xC45, 0xC46, 0xC49, @@ -255706,6 +260374,8 @@ static const UV UNI_IDC_invlist[] = { /* for EBCDIC 1047 */ 0xC57, 0xC58, 0xC5B, + 0xC5D, + 0xC5E, 0xC60, 0xC64, 0xC66, @@ -255730,7 +260400,7 @@ static const UV UNI_IDC_invlist[] = { /* for EBCDIC 1047 */ 0xCCE, 0xCD5, 0xCD7, - 0xCDE, + 0xCDD, 0xCDF, 0xCE0, 0xCE4, @@ -255897,10 +260567,8 @@ static const UV UNI_IDC_invlist[] = { /* for EBCDIC 1047 */ 0x16EE, 0x16F9, 0x1700, - 0x170D, - 0x170E, - 0x1715, - 0x1720, + 0x1716, + 0x171F, 0x1735, 0x1740, 0x1754, @@ -255920,7 +260588,7 @@ static const UV UNI_IDC_invlist[] = { /* for EBCDIC 1047 */ 0x17EA, 0x180B, 0x180E, - 0x1810, + 0x180F, 0x181A, 0x1820, 0x1879, @@ -255959,9 +260627,9 @@ static const UV UNI_IDC_invlist[] = { /* for EBCDIC 1047 */ 0x1AB0, 0x1ABE, 0x1ABF, - 0x1AC1, + 0x1ACF, 0x1B00, - 0x1B4C, + 0x1B4D, 0x1B50, 0x1B5A, 0x1B6B, @@ -255985,8 +260653,6 @@ static const UV UNI_IDC_invlist[] = { /* for EBCDIC 1047 */ 0x1CD4, 0x1CFB, 0x1D00, - 0x1DFA, - 0x1DFB, 0x1F16, 0x1F18, 0x1F1E, @@ -256067,10 +260733,6 @@ static const UV UNI_IDC_invlist[] = { /* for EBCDIC 1047 */ 0x2160, 0x2189, 0x2C00, - 0x2C2F, - 0x2C30, - 0x2C5F, - 0x2C60, 0x2CE5, 0x2CEB, 0x2CF4, @@ -256131,8 +260793,6 @@ static const UV UNI_IDC_invlist[] = { /* for EBCDIC 1047 */ 0x3400, 0x4DC0, 0x4E00, - 0x9FFD, - 0xA000, 0xA48D, 0xA4D0, 0xA4FE, @@ -256151,10 +260811,14 @@ static const UV UNI_IDC_invlist[] = { /* for EBCDIC 1047 */ 0xA722, 0xA789, 0xA78B, - 0xA7C0, - 0xA7C2, 0xA7CB, - 0xA7F5, + 0xA7D0, + 0xA7D2, + 0xA7D3, + 0xA7D4, + 0xA7D5, + 0xA7DA, + 0xA7F2, 0xA828, 0xA82C, 0xA82D, @@ -256332,12 +260996,34 @@ static const UV UNI_IDC_invlist[] = { /* for EBCDIC 1047 */ 0x10528, 0x10530, 0x10564, + 0x10570, + 0x1057B, + 0x1057C, + 0x1058B, + 0x1058C, + 0x10593, + 0x10594, + 0x10596, + 0x10597, + 0x105A2, + 0x105A3, + 0x105B2, + 0x105B3, + 0x105BA, + 0x105BB, + 0x105BD, 0x10600, 0x10737, 0x10740, 0x10756, 0x10760, 0x10768, + 0x10780, + 0x10786, + 0x10787, + 0x107B1, + 0x107B2, + 0x107BB, 0x10800, 0x10806, 0x10808, @@ -256418,6 +261104,8 @@ static const UV UNI_IDC_invlist[] = { /* for EBCDIC 1047 */ 0x10F28, 0x10F30, 0x10F51, + 0x10F70, + 0x10F86, 0x10FB0, 0x10FC5, 0x10FE0, @@ -256425,9 +261113,11 @@ static const UV UNI_IDC_invlist[] = { /* for EBCDIC 1047 */ 0x11000, 0x11047, 0x11066, - 0x11070, + 0x11076, 0x1107F, 0x110BB, + 0x110C2, + 0x110C3, 0x110D0, 0x110E9, 0x110F0, @@ -256534,6 +261224,8 @@ static const UV UNI_IDC_invlist[] = { /* for EBCDIC 1047 */ 0x1172C, 0x11730, 0x1173A, + 0x11740, + 0x11747, 0x11800, 0x1183B, 0x118A0, @@ -256570,7 +261262,7 @@ static const UV UNI_IDC_invlist[] = { /* for EBCDIC 1047 */ 0x11A9A, 0x11A9D, 0x11A9E, - 0x11AC0, + 0x11AB0, 0x11AF9, 0x11C00, 0x11C09, @@ -256622,6 +261314,8 @@ static const UV UNI_IDC_invlist[] = { /* for EBCDIC 1047 */ 0x1246F, 0x12480, 0x12544, + 0x12F90, + 0x12FF1, 0x13000, 0x1342F, 0x14400, @@ -256632,6 +261326,10 @@ static const UV UNI_IDC_invlist[] = { /* for EBCDIC 1047 */ 0x16A5F, 0x16A60, 0x16A6A, + 0x16A70, + 0x16ABF, + 0x16AC0, + 0x16ACA, 0x16AD0, 0x16AEE, 0x16AF0, @@ -256666,8 +261364,14 @@ static const UV UNI_IDC_invlist[] = { /* for EBCDIC 1047 */ 0x18CD6, 0x18D00, 0x18D09, + 0x1AFF0, + 0x1AFF4, + 0x1AFF5, + 0x1AFFC, + 0x1AFFD, + 0x1AFFF, 0x1B000, - 0x1B11F, + 0x1B123, 0x1B150, 0x1B153, 0x1B164, @@ -256684,6 +261388,10 @@ static const UV UNI_IDC_invlist[] = { /* for EBCDIC 1047 */ 0x1BC9A, 0x1BC9D, 0x1BC9F, + 0x1CF00, + 0x1CF2E, + 0x1CF30, + 0x1CF47, 0x1D165, 0x1D16A, 0x1D16D, @@ -256770,6 +261478,8 @@ static const UV UNI_IDC_invlist[] = { /* for EBCDIC 1047 */ 0x1DAA0, 0x1DAA1, 0x1DAB0, + 0x1DF00, + 0x1DF1F, 0x1E000, 0x1E007, 0x1E008, @@ -256788,8 +261498,18 @@ static const UV UNI_IDC_invlist[] = { /* for EBCDIC 1047 */ 0x1E14A, 0x1E14E, 0x1E14F, + 0x1E290, + 0x1E2AF, 0x1E2C0, 0x1E2FA, + 0x1E7E0, + 0x1E7E7, + 0x1E7E8, + 0x1E7EC, + 0x1E7ED, + 0x1E7EF, + 0x1E7F0, + 0x1E7FF, 0x1E800, 0x1E8C5, 0x1E8D0, @@ -256867,9 +261587,9 @@ static const UV UNI_IDC_invlist[] = { /* for EBCDIC 1047 */ 0x1FBF0, 0x1FBFA, 0x20000, - 0x2A6DE, + 0x2A6E0, 0x2A700, - 0x2B735, + 0x2B739, 0x2B740, 0x2B81E, 0x2B820, @@ -256892,7 +261612,7 @@ static const UV UNI_IDC_invlist[] = { /* for EBCDIC 1047 */ && '$' == 91 && '@' == 124 && '`' == 121 && '\n' == 37 static const UV UNI_IDC_invlist[] = { /* for EBCDIC 037 */ - 1481, /* Number of elements */ + 1533, /* Number of elements */ 148565664, /* Version and data structure type */ 1, /* 0 if the list starts at 0; 1 if it starts at the element beyond 0 */ @@ -257019,11 +261739,11 @@ static const UV UNI_IDC_invlist[] = { /* for EBCDIC 037 */ 0x85C, 0x860, 0x86B, - 0x8A0, - 0x8B5, - 0x8B6, - 0x8C8, - 0x8D3, + 0x870, + 0x888, + 0x889, + 0x88F, + 0x898, 0x8E2, 0x8E3, 0x964, @@ -257191,7 +261911,7 @@ static const UV UNI_IDC_invlist[] = { /* for EBCDIC 037 */ 0xC29, 0xC2A, 0xC3A, - 0xC3D, + 0xC3C, 0xC45, 0xC46, 0xC49, @@ -257201,6 +261921,8 @@ static const UV UNI_IDC_invlist[] = { /* for EBCDIC 037 */ 0xC57, 0xC58, 0xC5B, + 0xC5D, + 0xC5E, 0xC60, 0xC64, 0xC66, @@ -257225,7 +261947,7 @@ static const UV UNI_IDC_invlist[] = { /* for EBCDIC 037 */ 0xCCE, 0xCD5, 0xCD7, - 0xCDE, + 0xCDD, 0xCDF, 0xCE0, 0xCE4, @@ -257392,10 +262114,8 @@ static const UV UNI_IDC_invlist[] = { /* for EBCDIC 037 */ 0x16EE, 0x16F9, 0x1700, - 0x170D, - 0x170E, - 0x1715, - 0x1720, + 0x1716, + 0x171F, 0x1735, 0x1740, 0x1754, @@ -257415,7 +262135,7 @@ static const UV UNI_IDC_invlist[] = { /* for EBCDIC 037 */ 0x17EA, 0x180B, 0x180E, - 0x1810, + 0x180F, 0x181A, 0x1820, 0x1879, @@ -257454,9 +262174,9 @@ static const UV UNI_IDC_invlist[] = { /* for EBCDIC 037 */ 0x1AB0, 0x1ABE, 0x1ABF, - 0x1AC1, + 0x1ACF, 0x1B00, - 0x1B4C, + 0x1B4D, 0x1B50, 0x1B5A, 0x1B6B, @@ -257480,8 +262200,6 @@ static const UV UNI_IDC_invlist[] = { /* for EBCDIC 037 */ 0x1CD4, 0x1CFB, 0x1D00, - 0x1DFA, - 0x1DFB, 0x1F16, 0x1F18, 0x1F1E, @@ -257562,10 +262280,6 @@ static const UV UNI_IDC_invlist[] = { /* for EBCDIC 037 */ 0x2160, 0x2189, 0x2C00, - 0x2C2F, - 0x2C30, - 0x2C5F, - 0x2C60, 0x2CE5, 0x2CEB, 0x2CF4, @@ -257626,8 +262340,6 @@ static const UV UNI_IDC_invlist[] = { /* for EBCDIC 037 */ 0x3400, 0x4DC0, 0x4E00, - 0x9FFD, - 0xA000, 0xA48D, 0xA4D0, 0xA4FE, @@ -257646,10 +262358,14 @@ static const UV UNI_IDC_invlist[] = { /* for EBCDIC 037 */ 0xA722, 0xA789, 0xA78B, - 0xA7C0, - 0xA7C2, 0xA7CB, - 0xA7F5, + 0xA7D0, + 0xA7D2, + 0xA7D3, + 0xA7D4, + 0xA7D5, + 0xA7DA, + 0xA7F2, 0xA828, 0xA82C, 0xA82D, @@ -257827,12 +262543,34 @@ static const UV UNI_IDC_invlist[] = { /* for EBCDIC 037 */ 0x10528, 0x10530, 0x10564, + 0x10570, + 0x1057B, + 0x1057C, + 0x1058B, + 0x1058C, + 0x10593, + 0x10594, + 0x10596, + 0x10597, + 0x105A2, + 0x105A3, + 0x105B2, + 0x105B3, + 0x105BA, + 0x105BB, + 0x105BD, 0x10600, 0x10737, 0x10740, 0x10756, 0x10760, 0x10768, + 0x10780, + 0x10786, + 0x10787, + 0x107B1, + 0x107B2, + 0x107BB, 0x10800, 0x10806, 0x10808, @@ -257913,6 +262651,8 @@ static const UV UNI_IDC_invlist[] = { /* for EBCDIC 037 */ 0x10F28, 0x10F30, 0x10F51, + 0x10F70, + 0x10F86, 0x10FB0, 0x10FC5, 0x10FE0, @@ -257920,9 +262660,11 @@ static const UV UNI_IDC_invlist[] = { /* for EBCDIC 037 */ 0x11000, 0x11047, 0x11066, - 0x11070, + 0x11076, 0x1107F, 0x110BB, + 0x110C2, + 0x110C3, 0x110D0, 0x110E9, 0x110F0, @@ -258029,6 +262771,8 @@ static const UV UNI_IDC_invlist[] = { /* for EBCDIC 037 */ 0x1172C, 0x11730, 0x1173A, + 0x11740, + 0x11747, 0x11800, 0x1183B, 0x118A0, @@ -258065,7 +262809,7 @@ static const UV UNI_IDC_invlist[] = { /* for EBCDIC 037 */ 0x11A9A, 0x11A9D, 0x11A9E, - 0x11AC0, + 0x11AB0, 0x11AF9, 0x11C00, 0x11C09, @@ -258117,6 +262861,8 @@ static const UV UNI_IDC_invlist[] = { /* for EBCDIC 037 */ 0x1246F, 0x12480, 0x12544, + 0x12F90, + 0x12FF1, 0x13000, 0x1342F, 0x14400, @@ -258127,6 +262873,10 @@ static const UV UNI_IDC_invlist[] = { /* for EBCDIC 037 */ 0x16A5F, 0x16A60, 0x16A6A, + 0x16A70, + 0x16ABF, + 0x16AC0, + 0x16ACA, 0x16AD0, 0x16AEE, 0x16AF0, @@ -258161,8 +262911,14 @@ static const UV UNI_IDC_invlist[] = { /* for EBCDIC 037 */ 0x18CD6, 0x18D00, 0x18D09, + 0x1AFF0, + 0x1AFF4, + 0x1AFF5, + 0x1AFFC, + 0x1AFFD, + 0x1AFFF, 0x1B000, - 0x1B11F, + 0x1B123, 0x1B150, 0x1B153, 0x1B164, @@ -258179,6 +262935,10 @@ static const UV UNI_IDC_invlist[] = { /* for EBCDIC 037 */ 0x1BC9A, 0x1BC9D, 0x1BC9F, + 0x1CF00, + 0x1CF2E, + 0x1CF30, + 0x1CF47, 0x1D165, 0x1D16A, 0x1D16D, @@ -258265,6 +263025,8 @@ static const UV UNI_IDC_invlist[] = { /* for EBCDIC 037 */ 0x1DAA0, 0x1DAA1, 0x1DAB0, + 0x1DF00, + 0x1DF1F, 0x1E000, 0x1E007, 0x1E008, @@ -258283,8 +263045,18 @@ static const UV UNI_IDC_invlist[] = { /* for EBCDIC 037 */ 0x1E14A, 0x1E14E, 0x1E14F, + 0x1E290, + 0x1E2AF, 0x1E2C0, 0x1E2FA, + 0x1E7E0, + 0x1E7E7, + 0x1E7E8, + 0x1E7EC, + 0x1E7ED, + 0x1E7EF, + 0x1E7F0, + 0x1E7FF, 0x1E800, 0x1E8C5, 0x1E8D0, @@ -258362,9 +263134,9 @@ static const UV UNI_IDC_invlist[] = { /* for EBCDIC 037 */ 0x1FBF0, 0x1FBFA, 0x20000, - 0x2A6DE, + 0x2A6E0, 0x2A700, - 0x2B735, + 0x2B739, 0x2B740, 0x2B81E, 0x2B820, @@ -258384,7 +263156,7 @@ static const UV UNI_IDC_invlist[] = { /* for EBCDIC 037 */ # if 'A' == 65 /* ASCII/Latin1 */ static const UV UNI_IDENTIFIERSTATUS__ALLOWED_invlist[] = { /* for ASCII/Latin1 */ - 749, /* Number of elements */ + 777, /* Number of elements */ 148565664, /* Version and data structure type */ 1, /* 0 if the list starts at 0; 1 if it starts at the element beyond 0 */ @@ -258525,12 +263297,16 @@ static const UV UNI_IDENTIFIERSTATUS__ALLOWED_invlist[] = { /* for ASCII/Latin1 0x700, 0x750, 0x7B2, + 0x870, + 0x888, + 0x889, + 0x88F, 0x8A0, 0x8AD, 0x8B2, 0x8B3, - 0x8B6, - 0x8C8, + 0x8B5, + 0x8CA, 0x901, 0x94E, 0x94F, @@ -258699,7 +263475,7 @@ static const UV UNI_IDENTIFIERSTATUS__ALLOWED_invlist[] = { /* for ASCII/Latin1 0xC34, 0xC35, 0xC3A, - 0xC3D, + 0xC3C, 0xC45, 0xC46, 0xC49, @@ -258707,6 +263483,8 @@ static const UV UNI_IDENTIFIERSTATUS__ALLOWED_invlist[] = { /* for ASCII/Latin1 0xC4E, 0xC55, 0xC57, + 0xC5D, + 0xC5E, 0xC60, 0xC62, 0xC66, @@ -258733,6 +263511,8 @@ static const UV UNI_IDENTIFIERSTATUS__ALLOWED_invlist[] = { /* for ASCII/Latin1 0xCCE, 0xCD5, 0xCD7, + 0xCDD, + 0xCDE, 0xCE0, 0xCE4, 0xCE6, @@ -258930,7 +263710,9 @@ static const UV UNI_IDENTIFIERSTATUS__ALLOWED_invlist[] = { /* for ASCII/Latin1 0x17A9, 0x17B4, 0x17B6, - 0x17CB, + 0x17CE, + 0x17D0, + 0x17D1, 0x17D2, 0x17D3, 0x17D7, @@ -259060,7 +263842,7 @@ static const UV UNI_IDENTIFIERSTATUS__ALLOWED_invlist[] = { /* for ASCII/Latin1 0x3400, 0x4DC0, 0x4E00, - 0x9FFD, + 0xA000, 0xA67F, 0xA680, 0xA717, @@ -259077,8 +263859,14 @@ static const UV UNI_IDENTIFIERSTATUS__ALLOWED_invlist[] = { /* for ASCII/Latin1 0xA7AF, 0xA7B8, 0xA7BA, - 0xA7C2, + 0xA7C0, 0xA7CB, + 0xA7D0, + 0xA7D2, + 0xA7D3, + 0xA7D4, + 0xA7D5, + 0xA7DA, 0xA9E7, 0xA9FF, 0xAA60, @@ -259121,14 +263909,26 @@ static const UV UNI_IDENTIFIERSTATUS__ALLOWED_invlist[] = { /* for ASCII/Latin1 0x1133D, 0x16FF0, 0x16FF2, + 0x1B11F, + 0x1B123, 0x1B150, 0x1B153, 0x1B164, 0x1B168, + 0x1DF00, + 0x1DF1F, + 0x1E7E0, + 0x1E7E7, + 0x1E7E8, + 0x1E7EC, + 0x1E7ED, + 0x1E7EF, + 0x1E7F0, + 0x1E7FF, 0x20000, - 0x2A6DE, + 0x2A6E0, 0x2A700, - 0x2B735, + 0x2B739, 0x2B740, 0x2B81E, 0x2B820, @@ -259147,7 +263947,7 @@ static const UV UNI_IDENTIFIERSTATUS__ALLOWED_invlist[] = { /* for ASCII/Latin1 && '$' == 91 && '@' == 124 && '`' == 121 && '\n' == 21 static const UV UNI_IDENTIFIERSTATUS__ALLOWED_invlist[] = { /* for EBCDIC 1047 */ - 783, /* Number of elements */ + 811, /* Number of elements */ 148565664, /* Version and data structure type */ 1, /* 0 if the list starts at 0; 1 if it starts at the element beyond 0 */ @@ -259322,12 +264122,16 @@ static const UV UNI_IDENTIFIERSTATUS__ALLOWED_invlist[] = { /* for EBCDIC 1047 0x700, 0x750, 0x7B2, + 0x870, + 0x888, + 0x889, + 0x88F, 0x8A0, 0x8AD, 0x8B2, 0x8B3, - 0x8B6, - 0x8C8, + 0x8B5, + 0x8CA, 0x901, 0x94E, 0x94F, @@ -259496,7 +264300,7 @@ static const UV UNI_IDENTIFIERSTATUS__ALLOWED_invlist[] = { /* for EBCDIC 1047 0xC34, 0xC35, 0xC3A, - 0xC3D, + 0xC3C, 0xC45, 0xC46, 0xC49, @@ -259504,6 +264308,8 @@ static const UV UNI_IDENTIFIERSTATUS__ALLOWED_invlist[] = { /* for EBCDIC 1047 0xC4E, 0xC55, 0xC57, + 0xC5D, + 0xC5E, 0xC60, 0xC62, 0xC66, @@ -259530,6 +264336,8 @@ static const UV UNI_IDENTIFIERSTATUS__ALLOWED_invlist[] = { /* for EBCDIC 1047 0xCCE, 0xCD5, 0xCD7, + 0xCDD, + 0xCDE, 0xCE0, 0xCE4, 0xCE6, @@ -259727,7 +264535,9 @@ static const UV UNI_IDENTIFIERSTATUS__ALLOWED_invlist[] = { /* for EBCDIC 1047 0x17A9, 0x17B4, 0x17B6, - 0x17CB, + 0x17CE, + 0x17D0, + 0x17D1, 0x17D2, 0x17D3, 0x17D7, @@ -259857,7 +264667,7 @@ static const UV UNI_IDENTIFIERSTATUS__ALLOWED_invlist[] = { /* for EBCDIC 1047 0x3400, 0x4DC0, 0x4E00, - 0x9FFD, + 0xA000, 0xA67F, 0xA680, 0xA717, @@ -259874,8 +264684,14 @@ static const UV UNI_IDENTIFIERSTATUS__ALLOWED_invlist[] = { /* for EBCDIC 1047 0xA7AF, 0xA7B8, 0xA7BA, - 0xA7C2, + 0xA7C0, 0xA7CB, + 0xA7D0, + 0xA7D2, + 0xA7D3, + 0xA7D4, + 0xA7D5, + 0xA7DA, 0xA9E7, 0xA9FF, 0xAA60, @@ -259918,14 +264734,26 @@ static const UV UNI_IDENTIFIERSTATUS__ALLOWED_invlist[] = { /* for EBCDIC 1047 0x1133D, 0x16FF0, 0x16FF2, + 0x1B11F, + 0x1B123, 0x1B150, 0x1B153, 0x1B164, 0x1B168, + 0x1DF00, + 0x1DF1F, + 0x1E7E0, + 0x1E7E7, + 0x1E7E8, + 0x1E7EC, + 0x1E7ED, + 0x1E7EF, + 0x1E7F0, + 0x1E7FF, 0x20000, - 0x2A6DE, + 0x2A6E0, 0x2A700, - 0x2B735, + 0x2B739, 0x2B740, 0x2B81E, 0x2B820, @@ -259944,7 +264772,7 @@ static const UV UNI_IDENTIFIERSTATUS__ALLOWED_invlist[] = { /* for EBCDIC 1047 && '$' == 91 && '@' == 124 && '`' == 121 && '\n' == 37 static const UV UNI_IDENTIFIERSTATUS__ALLOWED_invlist[] = { /* for EBCDIC 037 */ - 779, /* Number of elements */ + 807, /* Number of elements */ 148565664, /* Version and data structure type */ 1, /* 0 if the list starts at 0; 1 if it starts at the element beyond 0 */ @@ -260115,12 +264943,16 @@ static const UV UNI_IDENTIFIERSTATUS__ALLOWED_invlist[] = { /* for EBCDIC 037 * 0x700, 0x750, 0x7B2, + 0x870, + 0x888, + 0x889, + 0x88F, 0x8A0, 0x8AD, 0x8B2, 0x8B3, - 0x8B6, - 0x8C8, + 0x8B5, + 0x8CA, 0x901, 0x94E, 0x94F, @@ -260289,7 +265121,7 @@ static const UV UNI_IDENTIFIERSTATUS__ALLOWED_invlist[] = { /* for EBCDIC 037 * 0xC34, 0xC35, 0xC3A, - 0xC3D, + 0xC3C, 0xC45, 0xC46, 0xC49, @@ -260297,6 +265129,8 @@ static const UV UNI_IDENTIFIERSTATUS__ALLOWED_invlist[] = { /* for EBCDIC 037 * 0xC4E, 0xC55, 0xC57, + 0xC5D, + 0xC5E, 0xC60, 0xC62, 0xC66, @@ -260323,6 +265157,8 @@ static const UV UNI_IDENTIFIERSTATUS__ALLOWED_invlist[] = { /* for EBCDIC 037 * 0xCCE, 0xCD5, 0xCD7, + 0xCDD, + 0xCDE, 0xCE0, 0xCE4, 0xCE6, @@ -260520,7 +265356,9 @@ static const UV UNI_IDENTIFIERSTATUS__ALLOWED_invlist[] = { /* for EBCDIC 037 * 0x17A9, 0x17B4, 0x17B6, - 0x17CB, + 0x17CE, + 0x17D0, + 0x17D1, 0x17D2, 0x17D3, 0x17D7, @@ -260650,7 +265488,7 @@ static const UV UNI_IDENTIFIERSTATUS__ALLOWED_invlist[] = { /* for EBCDIC 037 * 0x3400, 0x4DC0, 0x4E00, - 0x9FFD, + 0xA000, 0xA67F, 0xA680, 0xA717, @@ -260667,8 +265505,14 @@ static const UV UNI_IDENTIFIERSTATUS__ALLOWED_invlist[] = { /* for EBCDIC 037 * 0xA7AF, 0xA7B8, 0xA7BA, - 0xA7C2, + 0xA7C0, 0xA7CB, + 0xA7D0, + 0xA7D2, + 0xA7D3, + 0xA7D4, + 0xA7D5, + 0xA7DA, 0xA9E7, 0xA9FF, 0xAA60, @@ -260711,14 +265555,26 @@ static const UV UNI_IDENTIFIERSTATUS__ALLOWED_invlist[] = { /* for EBCDIC 037 * 0x1133D, 0x16FF0, 0x16FF2, + 0x1B11F, + 0x1B123, 0x1B150, 0x1B153, 0x1B164, 0x1B168, + 0x1DF00, + 0x1DF1F, + 0x1E7E0, + 0x1E7E7, + 0x1E7E8, + 0x1E7EC, + 0x1E7ED, + 0x1E7EF, + 0x1E7F0, + 0x1E7FF, 0x20000, - 0x2A6DE, + 0x2A6E0, 0x2A700, - 0x2B735, + 0x2B739, 0x2B740, 0x2B81E, 0x2B820, @@ -260734,7 +265590,7 @@ static const UV UNI_IDENTIFIERSTATUS__ALLOWED_invlist[] = { /* for EBCDIC 037 * # if 'A' == 65 /* ASCII/Latin1 */ static const UV UNI_IDENTIFIERSTATUS__RESTRICTED_invlist[] = { /* for ASCII/Latin1 */ - 749, /* Number of elements */ + 777, /* Number of elements */ 148565664, /* Version and data structure type */ 0, /* 0 if the list starts at 0; 1 if it starts at the element beyond 0 */ @@ -260875,12 +265731,16 @@ static const UV UNI_IDENTIFIERSTATUS__RESTRICTED_invlist[] = { /* for ASCII/Lat 0x700, 0x750, 0x7B2, + 0x870, + 0x888, + 0x889, + 0x88F, 0x8A0, 0x8AD, 0x8B2, 0x8B3, - 0x8B6, - 0x8C8, + 0x8B5, + 0x8CA, 0x901, 0x94E, 0x94F, @@ -261049,7 +265909,7 @@ static const UV UNI_IDENTIFIERSTATUS__RESTRICTED_invlist[] = { /* for ASCII/Lat 0xC34, 0xC35, 0xC3A, - 0xC3D, + 0xC3C, 0xC45, 0xC46, 0xC49, @@ -261057,6 +265917,8 @@ static const UV UNI_IDENTIFIERSTATUS__RESTRICTED_invlist[] = { /* for ASCII/Lat 0xC4E, 0xC55, 0xC57, + 0xC5D, + 0xC5E, 0xC60, 0xC62, 0xC66, @@ -261083,6 +265945,8 @@ static const UV UNI_IDENTIFIERSTATUS__RESTRICTED_invlist[] = { /* for ASCII/Lat 0xCCE, 0xCD5, 0xCD7, + 0xCDD, + 0xCDE, 0xCE0, 0xCE4, 0xCE6, @@ -261280,7 +266144,9 @@ static const UV UNI_IDENTIFIERSTATUS__RESTRICTED_invlist[] = { /* for ASCII/Lat 0x17A9, 0x17B4, 0x17B6, - 0x17CB, + 0x17CE, + 0x17D0, + 0x17D1, 0x17D2, 0x17D3, 0x17D7, @@ -261410,7 +266276,7 @@ static const UV UNI_IDENTIFIERSTATUS__RESTRICTED_invlist[] = { /* for ASCII/Lat 0x3400, 0x4DC0, 0x4E00, - 0x9FFD, + 0xA000, 0xA67F, 0xA680, 0xA717, @@ -261427,8 +266293,14 @@ static const UV UNI_IDENTIFIERSTATUS__RESTRICTED_invlist[] = { /* for ASCII/Lat 0xA7AF, 0xA7B8, 0xA7BA, - 0xA7C2, + 0xA7C0, 0xA7CB, + 0xA7D0, + 0xA7D2, + 0xA7D3, + 0xA7D4, + 0xA7D5, + 0xA7DA, 0xA9E7, 0xA9FF, 0xAA60, @@ -261471,14 +266343,26 @@ static const UV UNI_IDENTIFIERSTATUS__RESTRICTED_invlist[] = { /* for ASCII/Lat 0x1133D, 0x16FF0, 0x16FF2, + 0x1B11F, + 0x1B123, 0x1B150, 0x1B153, 0x1B164, 0x1B168, + 0x1DF00, + 0x1DF1F, + 0x1E7E0, + 0x1E7E7, + 0x1E7E8, + 0x1E7EC, + 0x1E7ED, + 0x1E7EF, + 0x1E7F0, + 0x1E7FF, 0x20000, - 0x2A6DE, + 0x2A6E0, 0x2A700, - 0x2B735, + 0x2B739, 0x2B740, 0x2B81E, 0x2B820, @@ -261497,7 +266381,7 @@ static const UV UNI_IDENTIFIERSTATUS__RESTRICTED_invlist[] = { /* for ASCII/Lat && '$' == 91 && '@' == 124 && '`' == 121 && '\n' == 21 static const UV UNI_IDENTIFIERSTATUS__RESTRICTED_invlist[] = { /* for EBCDIC 1047 */ - 783, /* Number of elements */ + 811, /* Number of elements */ 148565664, /* Version and data structure type */ 0, /* 0 if the list starts at 0; 1 if it starts at the element beyond 0 */ @@ -261672,12 +266556,16 @@ static const UV UNI_IDENTIFIERSTATUS__RESTRICTED_invlist[] = { /* for EBCDIC 10 0x700, 0x750, 0x7B2, + 0x870, + 0x888, + 0x889, + 0x88F, 0x8A0, 0x8AD, 0x8B2, 0x8B3, - 0x8B6, - 0x8C8, + 0x8B5, + 0x8CA, 0x901, 0x94E, 0x94F, @@ -261846,7 +266734,7 @@ static const UV UNI_IDENTIFIERSTATUS__RESTRICTED_invlist[] = { /* for EBCDIC 10 0xC34, 0xC35, 0xC3A, - 0xC3D, + 0xC3C, 0xC45, 0xC46, 0xC49, @@ -261854,6 +266742,8 @@ static const UV UNI_IDENTIFIERSTATUS__RESTRICTED_invlist[] = { /* for EBCDIC 10 0xC4E, 0xC55, 0xC57, + 0xC5D, + 0xC5E, 0xC60, 0xC62, 0xC66, @@ -261880,6 +266770,8 @@ static const UV UNI_IDENTIFIERSTATUS__RESTRICTED_invlist[] = { /* for EBCDIC 10 0xCCE, 0xCD5, 0xCD7, + 0xCDD, + 0xCDE, 0xCE0, 0xCE4, 0xCE6, @@ -262077,7 +266969,9 @@ static const UV UNI_IDENTIFIERSTATUS__RESTRICTED_invlist[] = { /* for EBCDIC 10 0x17A9, 0x17B4, 0x17B6, - 0x17CB, + 0x17CE, + 0x17D0, + 0x17D1, 0x17D2, 0x17D3, 0x17D7, @@ -262207,7 +267101,7 @@ static const UV UNI_IDENTIFIERSTATUS__RESTRICTED_invlist[] = { /* for EBCDIC 10 0x3400, 0x4DC0, 0x4E00, - 0x9FFD, + 0xA000, 0xA67F, 0xA680, 0xA717, @@ -262224,8 +267118,14 @@ static const UV UNI_IDENTIFIERSTATUS__RESTRICTED_invlist[] = { /* for EBCDIC 10 0xA7AF, 0xA7B8, 0xA7BA, - 0xA7C2, + 0xA7C0, 0xA7CB, + 0xA7D0, + 0xA7D2, + 0xA7D3, + 0xA7D4, + 0xA7D5, + 0xA7DA, 0xA9E7, 0xA9FF, 0xAA60, @@ -262268,14 +267168,26 @@ static const UV UNI_IDENTIFIERSTATUS__RESTRICTED_invlist[] = { /* for EBCDIC 10 0x1133D, 0x16FF0, 0x16FF2, + 0x1B11F, + 0x1B123, 0x1B150, 0x1B153, 0x1B164, 0x1B168, + 0x1DF00, + 0x1DF1F, + 0x1E7E0, + 0x1E7E7, + 0x1E7E8, + 0x1E7EC, + 0x1E7ED, + 0x1E7EF, + 0x1E7F0, + 0x1E7FF, 0x20000, - 0x2A6DE, + 0x2A6E0, 0x2A700, - 0x2B735, + 0x2B739, 0x2B740, 0x2B81E, 0x2B820, @@ -262294,7 +267206,7 @@ static const UV UNI_IDENTIFIERSTATUS__RESTRICTED_invlist[] = { /* for EBCDIC 10 && '$' == 91 && '@' == 124 && '`' == 121 && '\n' == 37 static const UV UNI_IDENTIFIERSTATUS__RESTRICTED_invlist[] = { /* for EBCDIC 037 */ - 779, /* Number of elements */ + 807, /* Number of elements */ 148565664, /* Version and data structure type */ 0, /* 0 if the list starts at 0; 1 if it starts at the element beyond 0 */ @@ -262465,12 +267377,16 @@ static const UV UNI_IDENTIFIERSTATUS__RESTRICTED_invlist[] = { /* for EBCDIC 03 0x700, 0x750, 0x7B2, + 0x870, + 0x888, + 0x889, + 0x88F, 0x8A0, 0x8AD, 0x8B2, 0x8B3, - 0x8B6, - 0x8C8, + 0x8B5, + 0x8CA, 0x901, 0x94E, 0x94F, @@ -262639,7 +267555,7 @@ static const UV UNI_IDENTIFIERSTATUS__RESTRICTED_invlist[] = { /* for EBCDIC 03 0xC34, 0xC35, 0xC3A, - 0xC3D, + 0xC3C, 0xC45, 0xC46, 0xC49, @@ -262647,6 +267563,8 @@ static const UV UNI_IDENTIFIERSTATUS__RESTRICTED_invlist[] = { /* for EBCDIC 03 0xC4E, 0xC55, 0xC57, + 0xC5D, + 0xC5E, 0xC60, 0xC62, 0xC66, @@ -262673,6 +267591,8 @@ static const UV UNI_IDENTIFIERSTATUS__RESTRICTED_invlist[] = { /* for EBCDIC 03 0xCCE, 0xCD5, 0xCD7, + 0xCDD, + 0xCDE, 0xCE0, 0xCE4, 0xCE6, @@ -262870,7 +267790,9 @@ static const UV UNI_IDENTIFIERSTATUS__RESTRICTED_invlist[] = { /* for EBCDIC 03 0x17A9, 0x17B4, 0x17B6, - 0x17CB, + 0x17CE, + 0x17D0, + 0x17D1, 0x17D2, 0x17D3, 0x17D7, @@ -263000,7 +267922,7 @@ static const UV UNI_IDENTIFIERSTATUS__RESTRICTED_invlist[] = { /* for EBCDIC 03 0x3400, 0x4DC0, 0x4E00, - 0x9FFD, + 0xA000, 0xA67F, 0xA680, 0xA717, @@ -263017,8 +267939,14 @@ static const UV UNI_IDENTIFIERSTATUS__RESTRICTED_invlist[] = { /* for EBCDIC 03 0xA7AF, 0xA7B8, 0xA7BA, - 0xA7C2, + 0xA7C0, 0xA7CB, + 0xA7D0, + 0xA7D2, + 0xA7D3, + 0xA7D4, + 0xA7D5, + 0xA7DA, 0xA9E7, 0xA9FF, 0xAA60, @@ -263061,14 +267989,26 @@ static const UV UNI_IDENTIFIERSTATUS__RESTRICTED_invlist[] = { /* for EBCDIC 03 0x1133D, 0x16FF0, 0x16FF2, + 0x1B11F, + 0x1B123, 0x1B150, 0x1B153, 0x1B164, 0x1B168, + 0x1DF00, + 0x1DF1F, + 0x1E7E0, + 0x1E7E7, + 0x1E7E8, + 0x1E7EC, + 0x1E7ED, + 0x1E7EF, + 0x1E7F0, + 0x1E7FF, 0x20000, - 0x2A6DE, + 0x2A6E0, 0x2A700, - 0x2B735, + 0x2B739, 0x2B740, 0x2B81E, 0x2B820, @@ -263100,7 +268040,7 @@ static const UV UNI_IDENTIFIERTYPE__DEFAULTIGNORABLE_invlist[] = { /* for ASCII 0x17B4, 0x17B6, 0x180B, - 0x180F, + 0x1810, 0x200B, 0x200C, 0x200E, @@ -263153,7 +268093,7 @@ static const UV UNI_IDENTIFIERTYPE__DEFAULTIGNORABLE_invlist[] = { /* for EBCDI 0x17B4, 0x17B6, 0x180B, - 0x180F, + 0x1810, 0x200B, 0x200C, 0x200E, @@ -263206,7 +268146,7 @@ static const UV UNI_IDENTIFIERTYPE__DEFAULTIGNORABLE_invlist[] = { /* for EBCDI 0x17B4, 0x17B6, 0x180B, - 0x180F, + 0x1810, 0x200B, 0x200C, 0x200E, @@ -263238,7 +268178,7 @@ static const UV UNI_IDENTIFIERTYPE__DEFAULTIGNORABLE_invlist[] = { /* for EBCDI # endif /* EBCDIC 037 */ static const UV UNI_IDENTIFIERTYPE__EXCLUSION_invlist[] = { /* for all charsets */ - 425, /* Number of elements */ + 443, /* Number of elements */ 148565664, /* Version and data structure type */ 1, /* 0 if the list starts at 0; 1 if it starts at the element beyond 0 */ @@ -263256,10 +268196,8 @@ static const UV UNI_IDENTIFIERTYPE__EXCLUSION_invlist[] = { /* for all charsets 0x16EE, 0x16F9, 0x1700, - 0x170D, - 0x170E, - 0x1715, - 0x1720, + 0x1716, + 0x171F, 0x1737, 0x1740, 0x1754, @@ -263284,9 +268222,7 @@ static const UV UNI_IDENTIFIERTYPE__EXCLUSION_invlist[] = { /* for all charsets 0x1CFA, 0x1CFB, 0x2C00, - 0x2C2F, - 0x2C30, - 0x2C5F, + 0x2C60, 0x2C80, 0x2CF4, 0x2CF9, @@ -263344,7 +268280,21 @@ static const UV UNI_IDENTIFIERTYPE__EXCLUSION_invlist[] = { /* for all charsets 0x10530, 0x10564, 0x1056F, - 0x10570, + 0x1057B, + 0x1057C, + 0x1058B, + 0x1058C, + 0x10593, + 0x10594, + 0x10596, + 0x10597, + 0x105A2, + 0x105A3, + 0x105B2, + 0x105B3, + 0x105BA, + 0x105BB, + 0x105BD, 0x10600, 0x10737, 0x10740, @@ -263433,6 +268383,8 @@ static const UV UNI_IDENTIFIERTYPE__EXCLUSION_invlist[] = { /* for all charsets 0x10F28, 0x10F30, 0x10F5A, + 0x10F70, + 0x10F8A, 0x10FB0, 0x10FCC, 0x10FE0, @@ -263440,9 +268392,9 @@ static const UV UNI_IDENTIFIERTYPE__EXCLUSION_invlist[] = { /* for all charsets 0x11000, 0x1104E, 0x11052, - 0x11070, + 0x11076, 0x1107F, - 0x110C2, + 0x110C3, 0x110CD, 0x110CE, 0x110D0, @@ -263518,7 +268470,7 @@ static const UV UNI_IDENTIFIERTYPE__EXCLUSION_invlist[] = { /* for all charsets 0x11660, 0x1166D, 0x11680, - 0x116B9, + 0x116BA, 0x116C0, 0x116CA, 0x11700, @@ -263526,7 +268478,7 @@ static const UV UNI_IDENTIFIERTYPE__EXCLUSION_invlist[] = { /* for all charsets 0x1171D, 0x1172C, 0x11730, - 0x11740, + 0x11747, 0x11800, 0x1183C, 0x118A0, @@ -263597,6 +268549,8 @@ static const UV UNI_IDENTIFIERTYPE__EXCLUSION_invlist[] = { /* for all charsets 0x12475, 0x12480, 0x12544, + 0x12F90, + 0x12FF3, 0x13000, 0x1342F, 0x13430, @@ -263608,7 +268562,9 @@ static const UV UNI_IDENTIFIERTYPE__EXCLUSION_invlist[] = { /* for all charsets 0x16A60, 0x16A6A, 0x16A6E, - 0x16A70, + 0x16ABF, + 0x16AC0, + 0x16ACA, 0x16AD0, 0x16AEE, 0x16AF0, @@ -263663,6 +268619,8 @@ static const UV UNI_IDENTIFIERTYPE__EXCLUSION_invlist[] = { /* for all charsets 0x1E025, 0x1E026, 0x1E02B, + 0x1E290, + 0x1E2AF, 0x1E800, 0x1E8C5, 0x1E8C7, @@ -263806,7 +268764,7 @@ static const UV UNI_IDENTIFIERTYPE__INCLUSION_invlist[] = { /* for EBCDIC 037 * # endif /* EBCDIC 037 */ static const UV UNI_IDENTIFIERTYPE__LIMITEDUSE_invlist[] = { /* for all charsets */ - 171, /* Number of elements */ + 175, /* Number of elements */ 148565664, /* Version and data structure type */ 1, /* 0 if the list starts at 0; 1 if it starts at the element beyond 0 */ @@ -263866,9 +268824,9 @@ static const UV UNI_IDENTIFIERTYPE__LIMITEDUSE_invlist[] = { /* for all charset 0x1AA0, 0x1AAE, 0x1B00, - 0x1B4C, + 0x1B4D, 0x1B50, - 0x1B7D, + 0x1B7F, 0x1B80, 0x1BF4, 0x1BFC, @@ -263879,6 +268837,8 @@ static const UV UNI_IDENTIFIERTYPE__LIMITEDUSE_invlist[] = { /* for all charset 0x1C80, 0x1CC0, 0x1CC8, + 0x1DFA, + 0x1DFB, 0x2D30, 0x2D68, 0x2D70, @@ -263941,6 +268901,8 @@ static const UV UNI_IDENTIFIERTYPE__LIMITEDUSE_invlist[] = { /* for all charset 0x1145C, 0x1145D, 0x11462, + 0x11AB0, + 0x11AC0, 0x11D60, 0x11D66, 0x11D67, @@ -263986,7 +268948,7 @@ static const UV UNI_IDENTIFIERTYPE__LIMITEDUSE_invlist[] = { /* for all charset # if 'A' == 65 /* ASCII/Latin1 */ static const UV UNI_IDENTIFIERTYPE__NOTCHARACTER_invlist[] = { /* for ASCII/Latin1 */ - 1357, /* Number of elements */ + 1399, /* Number of elements */ 148565664, /* Version and data structure type */ 0, /* 0 if the list starts at 0; 1 if it starts at the element beyond 0 */ @@ -264022,8 +268984,6 @@ static const UV UNI_IDENTIFIERTYPE__NOTCHARACTER_invlist[] = { /* for ASCII/Lat 0x5EF, 0x5F5, 0x600, - 0x61D, - 0x61E, 0x70E, 0x70F, 0x74B, @@ -264041,11 +269001,11 @@ static const UV UNI_IDENTIFIERTYPE__NOTCHARACTER_invlist[] = { /* for ASCII/Lat 0x85F, 0x860, 0x86B, - 0x8A0, - 0x8B5, - 0x8B6, - 0x8C8, - 0x8D3, + 0x870, + 0x88F, + 0x890, + 0x892, + 0x898, 0x984, 0x985, 0x98D, @@ -264201,7 +269161,7 @@ static const UV UNI_IDENTIFIERTYPE__NOTCHARACTER_invlist[] = { /* for ASCII/Lat 0xC29, 0xC2A, 0xC3A, - 0xC3D, + 0xC3C, 0xC45, 0xC46, 0xC49, @@ -264211,6 +269171,8 @@ static const UV UNI_IDENTIFIERTYPE__NOTCHARACTER_invlist[] = { /* for ASCII/Lat 0xC57, 0xC58, 0xC5B, + 0xC5D, + 0xC5E, 0xC60, 0xC64, 0xC66, @@ -264233,7 +269195,7 @@ static const UV UNI_IDENTIFIERTYPE__NOTCHARACTER_invlist[] = { /* for ASCII/Lat 0xCCE, 0xCD5, 0xCD7, - 0xCDE, + 0xCDD, 0xCDF, 0xCE0, 0xCE4, @@ -264368,10 +269330,8 @@ static const UV UNI_IDENTIFIERTYPE__NOTCHARACTER_invlist[] = { /* for ASCII/Lat 0x16A0, 0x16F9, 0x1700, - 0x170D, - 0x170E, - 0x1715, - 0x1720, + 0x1716, + 0x171F, 0x1737, 0x1740, 0x1754, @@ -264388,8 +269348,6 @@ static const UV UNI_IDENTIFIERTYPE__NOTCHARACTER_invlist[] = { /* for ASCII/Lat 0x17F0, 0x17FA, 0x1800, - 0x180F, - 0x1810, 0x181A, 0x1820, 0x1879, @@ -264428,11 +269386,11 @@ static const UV UNI_IDENTIFIERTYPE__NOTCHARACTER_invlist[] = { /* for ASCII/Lat 0x1AA0, 0x1AAE, 0x1AB0, - 0x1AC1, + 0x1ACF, 0x1B00, - 0x1B4C, + 0x1B4D, 0x1B50, - 0x1B7D, + 0x1B7F, 0x1B80, 0x1BF4, 0x1BFC, @@ -264448,8 +269406,6 @@ static const UV UNI_IDENTIFIERTYPE__NOTCHARACTER_invlist[] = { /* for ASCII/Lat 0x1CD0, 0x1CFB, 0x1D00, - 0x1DFA, - 0x1DFB, 0x1F16, 0x1F18, 0x1F1E, @@ -264490,7 +269446,7 @@ static const UV UNI_IDENTIFIERTYPE__NOTCHARACTER_invlist[] = { /* for ASCII/Lat 0x2090, 0x209D, 0x20A0, - 0x20C0, + 0x20C1, 0x20D0, 0x20F1, 0x2100, @@ -264504,10 +269460,6 @@ static const UV UNI_IDENTIFIERTYPE__NOTCHARACTER_invlist[] = { /* for ASCII/Lat 0x2B76, 0x2B96, 0x2B97, - 0x2C2F, - 0x2C30, - 0x2C5F, - 0x2C60, 0x2CF4, 0x2CF9, 0x2D26, @@ -264538,7 +269490,7 @@ static const UV UNI_IDENTIFIERTYPE__NOTCHARACTER_invlist[] = { /* for ASCII/Lat 0x2DD8, 0x2DDF, 0x2DE0, - 0x2E53, + 0x2E5E, 0x2E80, 0x2E9A, 0x2E9B, @@ -264562,8 +269514,6 @@ static const UV UNI_IDENTIFIERTYPE__NOTCHARACTER_invlist[] = { /* for ASCII/Lat 0x31F0, 0x321F, 0x3220, - 0x9FFD, - 0xA000, 0xA48D, 0xA490, 0xA4C7, @@ -264572,10 +269522,14 @@ static const UV UNI_IDENTIFIERTYPE__NOTCHARACTER_invlist[] = { /* for ASCII/Lat 0xA640, 0xA6F8, 0xA700, - 0xA7C0, - 0xA7C2, 0xA7CB, - 0xA7F5, + 0xA7D0, + 0xA7D2, + 0xA7D3, + 0xA7D4, + 0xA7D5, + 0xA7DA, + 0xA7F2, 0xA82D, 0xA830, 0xA83A, @@ -264646,16 +269600,14 @@ static const UV UNI_IDENTIFIERTYPE__NOTCHARACTER_invlist[] = { /* for ASCII/Lat 0xFB43, 0xFB45, 0xFB46, - 0xFBC2, + 0xFBC3, 0xFBD3, - 0xFD40, - 0xFD50, 0xFD90, 0xFD92, 0xFDC8, + 0xFDCF, + 0xFDD0, 0xFDF0, - 0xFDFE, - 0xFE00, 0xFE1A, 0xFE20, 0xFE53, @@ -264742,13 +269694,33 @@ static const UV UNI_IDENTIFIERTYPE__NOTCHARACTER_invlist[] = { /* for ASCII/Lat 0x10530, 0x10564, 0x1056F, - 0x10570, + 0x1057B, + 0x1057C, + 0x1058B, + 0x1058C, + 0x10593, + 0x10594, + 0x10596, + 0x10597, + 0x105A2, + 0x105A3, + 0x105B2, + 0x105B3, + 0x105BA, + 0x105BB, + 0x105BD, 0x10600, 0x10737, 0x10740, 0x10756, 0x10760, 0x10768, + 0x10780, + 0x10786, + 0x10787, + 0x107B1, + 0x107B2, + 0x107BB, 0x10800, 0x10806, 0x10808, @@ -264835,6 +269807,8 @@ static const UV UNI_IDENTIFIERTYPE__NOTCHARACTER_invlist[] = { /* for ASCII/Lat 0x10F28, 0x10F30, 0x10F5A, + 0x10F70, + 0x10F8A, 0x10FB0, 0x10FCC, 0x10FE0, @@ -264842,9 +269816,9 @@ static const UV UNI_IDENTIFIERTYPE__NOTCHARACTER_invlist[] = { /* for ASCII/Lat 0x11000, 0x1104E, 0x11052, - 0x11070, + 0x11076, 0x1107F, - 0x110C2, + 0x110C3, 0x110CD, 0x110CE, 0x110D0, @@ -264928,7 +269902,7 @@ static const UV UNI_IDENTIFIERTYPE__NOTCHARACTER_invlist[] = { /* for ASCII/Lat 0x11660, 0x1166D, 0x11680, - 0x116B9, + 0x116BA, 0x116C0, 0x116CA, 0x11700, @@ -264936,7 +269910,7 @@ static const UV UNI_IDENTIFIERTYPE__NOTCHARACTER_invlist[] = { /* for ASCII/Lat 0x1171D, 0x1172C, 0x11730, - 0x11740, + 0x11747, 0x11800, 0x1183C, 0x118A0, @@ -264967,7 +269941,7 @@ static const UV UNI_IDENTIFIERTYPE__NOTCHARACTER_invlist[] = { /* for ASCII/Lat 0x11A48, 0x11A50, 0x11AA3, - 0x11AC0, + 0x11AB0, 0x11AF9, 0x11C00, 0x11C09, @@ -265023,6 +269997,8 @@ static const UV UNI_IDENTIFIERTYPE__NOTCHARACTER_invlist[] = { /* for ASCII/Lat 0x12475, 0x12480, 0x12544, + 0x12F90, + 0x12FF3, 0x13000, 0x1342F, 0x13430, @@ -265036,7 +270012,9 @@ static const UV UNI_IDENTIFIERTYPE__NOTCHARACTER_invlist[] = { /* for ASCII/Lat 0x16A60, 0x16A6A, 0x16A6E, - 0x16A70, + 0x16ABF, + 0x16AC0, + 0x16ACA, 0x16AD0, 0x16AEE, 0x16AF0, @@ -265069,8 +270047,14 @@ static const UV UNI_IDENTIFIERTYPE__NOTCHARACTER_invlist[] = { /* for ASCII/Lat 0x18CD6, 0x18D00, 0x18D09, + 0x1AFF0, + 0x1AFF4, + 0x1AFF5, + 0x1AFFC, + 0x1AFFD, + 0x1AFFF, 0x1B000, - 0x1B11F, + 0x1B123, 0x1B150, 0x1B153, 0x1B164, @@ -265087,12 +270071,18 @@ static const UV UNI_IDENTIFIERTYPE__NOTCHARACTER_invlist[] = { /* for ASCII/Lat 0x1BC9A, 0x1BC9C, 0x1BCA4, + 0x1CF00, + 0x1CF2E, + 0x1CF30, + 0x1CF47, + 0x1CF50, + 0x1CFC4, 0x1D000, 0x1D0F6, 0x1D100, 0x1D127, 0x1D129, - 0x1D1E9, + 0x1D1EB, 0x1D200, 0x1D246, 0x1D2E0, @@ -265147,6 +270137,8 @@ static const UV UNI_IDENTIFIERTYPE__NOTCHARACTER_invlist[] = { /* for ASCII/Lat 0x1DAA0, 0x1DAA1, 0x1DAB0, + 0x1DF00, + 0x1DF1F, 0x1E000, 0x1E007, 0x1E008, @@ -265165,10 +270157,20 @@ static const UV UNI_IDENTIFIERTYPE__NOTCHARACTER_invlist[] = { /* for ASCII/Lat 0x1E14A, 0x1E14E, 0x1E150, + 0x1E290, + 0x1E2AF, 0x1E2C0, 0x1E2FA, 0x1E2FF, 0x1E300, + 0x1E7E0, + 0x1E7E7, + 0x1E7E8, + 0x1E7EC, + 0x1E7ED, + 0x1E7EF, + 0x1E7F0, + 0x1E7FF, 0x1E800, 0x1E8C5, 0x1E8C7, @@ -265277,7 +270279,7 @@ static const UV UNI_IDENTIFIERTYPE__NOTCHARACTER_invlist[] = { /* for ASCII/Lat 0x1F266, 0x1F300, 0x1F6D8, - 0x1F6E0, + 0x1F6DD, 0x1F6ED, 0x1F6F0, 0x1F6FD, @@ -265287,6 +270289,8 @@ static const UV UNI_IDENTIFIERTYPE__NOTCHARACTER_invlist[] = { /* for ASCII/Lat 0x1F7D9, 0x1F7E0, 0x1F7EC, + 0x1F7F0, + 0x1F7F1, 0x1F800, 0x1F80C, 0x1F810, @@ -265300,27 +270304,27 @@ static const UV UNI_IDENTIFIERTYPE__NOTCHARACTER_invlist[] = { /* for ASCII/Lat 0x1F8B0, 0x1F8B2, 0x1F900, - 0x1F979, - 0x1F97A, - 0x1F9CC, - 0x1F9CD, 0x1FA54, 0x1FA60, 0x1FA6E, 0x1FA70, 0x1FA75, 0x1FA78, - 0x1FA7B, + 0x1FA7D, 0x1FA80, 0x1FA87, 0x1FA90, - 0x1FAA9, + 0x1FAAD, 0x1FAB0, - 0x1FAB7, + 0x1FABB, 0x1FAC0, - 0x1FAC3, + 0x1FAC6, 0x1FAD0, - 0x1FAD7, + 0x1FADA, + 0x1FAE0, + 0x1FAE8, + 0x1FAF0, + 0x1FAF7, 0x1FB00, 0x1FB93, 0x1FB94, @@ -265328,9 +270332,9 @@ static const UV UNI_IDENTIFIERTYPE__NOTCHARACTER_invlist[] = { /* for ASCII/Lat 0x1FBF0, 0x1FBFA, 0x20000, - 0x2A6DE, + 0x2A6E0, 0x2A700, - 0x2B735, + 0x2B739, 0x2B740, 0x2B81E, 0x2B820, @@ -265357,7 +270361,7 @@ static const UV UNI_IDENTIFIERTYPE__NOTCHARACTER_invlist[] = { /* for ASCII/Lat && '$' == 91 && '@' == 124 && '`' == 121 && '\n' == 21 static const UV UNI_IDENTIFIERTYPE__NOTCHARACTER_invlist[] = { /* for EBCDIC 1047 */ - 1361, /* Number of elements */ + 1403, /* Number of elements */ 148565664, /* Version and data structure type */ 0, /* 0 if the list starts at 0; 1 if it starts at the element beyond 0 */ @@ -265397,8 +270401,6 @@ static const UV UNI_IDENTIFIERTYPE__NOTCHARACTER_invlist[] = { /* for EBCDIC 10 0x5EF, 0x5F5, 0x600, - 0x61D, - 0x61E, 0x70E, 0x70F, 0x74B, @@ -265416,11 +270418,11 @@ static const UV UNI_IDENTIFIERTYPE__NOTCHARACTER_invlist[] = { /* for EBCDIC 10 0x85F, 0x860, 0x86B, - 0x8A0, - 0x8B5, - 0x8B6, - 0x8C8, - 0x8D3, + 0x870, + 0x88F, + 0x890, + 0x892, + 0x898, 0x984, 0x985, 0x98D, @@ -265576,7 +270578,7 @@ static const UV UNI_IDENTIFIERTYPE__NOTCHARACTER_invlist[] = { /* for EBCDIC 10 0xC29, 0xC2A, 0xC3A, - 0xC3D, + 0xC3C, 0xC45, 0xC46, 0xC49, @@ -265586,6 +270588,8 @@ static const UV UNI_IDENTIFIERTYPE__NOTCHARACTER_invlist[] = { /* for EBCDIC 10 0xC57, 0xC58, 0xC5B, + 0xC5D, + 0xC5E, 0xC60, 0xC64, 0xC66, @@ -265608,7 +270612,7 @@ static const UV UNI_IDENTIFIERTYPE__NOTCHARACTER_invlist[] = { /* for EBCDIC 10 0xCCE, 0xCD5, 0xCD7, - 0xCDE, + 0xCDD, 0xCDF, 0xCE0, 0xCE4, @@ -265743,10 +270747,8 @@ static const UV UNI_IDENTIFIERTYPE__NOTCHARACTER_invlist[] = { /* for EBCDIC 10 0x16A0, 0x16F9, 0x1700, - 0x170D, - 0x170E, - 0x1715, - 0x1720, + 0x1716, + 0x171F, 0x1737, 0x1740, 0x1754, @@ -265763,8 +270765,6 @@ static const UV UNI_IDENTIFIERTYPE__NOTCHARACTER_invlist[] = { /* for EBCDIC 10 0x17F0, 0x17FA, 0x1800, - 0x180F, - 0x1810, 0x181A, 0x1820, 0x1879, @@ -265803,11 +270803,11 @@ static const UV UNI_IDENTIFIERTYPE__NOTCHARACTER_invlist[] = { /* for EBCDIC 10 0x1AA0, 0x1AAE, 0x1AB0, - 0x1AC1, + 0x1ACF, 0x1B00, - 0x1B4C, + 0x1B4D, 0x1B50, - 0x1B7D, + 0x1B7F, 0x1B80, 0x1BF4, 0x1BFC, @@ -265823,8 +270823,6 @@ static const UV UNI_IDENTIFIERTYPE__NOTCHARACTER_invlist[] = { /* for EBCDIC 10 0x1CD0, 0x1CFB, 0x1D00, - 0x1DFA, - 0x1DFB, 0x1F16, 0x1F18, 0x1F1E, @@ -265865,7 +270863,7 @@ static const UV UNI_IDENTIFIERTYPE__NOTCHARACTER_invlist[] = { /* for EBCDIC 10 0x2090, 0x209D, 0x20A0, - 0x20C0, + 0x20C1, 0x20D0, 0x20F1, 0x2100, @@ -265879,10 +270877,6 @@ static const UV UNI_IDENTIFIERTYPE__NOTCHARACTER_invlist[] = { /* for EBCDIC 10 0x2B76, 0x2B96, 0x2B97, - 0x2C2F, - 0x2C30, - 0x2C5F, - 0x2C60, 0x2CF4, 0x2CF9, 0x2D26, @@ -265913,7 +270907,7 @@ static const UV UNI_IDENTIFIERTYPE__NOTCHARACTER_invlist[] = { /* for EBCDIC 10 0x2DD8, 0x2DDF, 0x2DE0, - 0x2E53, + 0x2E5E, 0x2E80, 0x2E9A, 0x2E9B, @@ -265937,8 +270931,6 @@ static const UV UNI_IDENTIFIERTYPE__NOTCHARACTER_invlist[] = { /* for EBCDIC 10 0x31F0, 0x321F, 0x3220, - 0x9FFD, - 0xA000, 0xA48D, 0xA490, 0xA4C7, @@ -265947,10 +270939,14 @@ static const UV UNI_IDENTIFIERTYPE__NOTCHARACTER_invlist[] = { /* for EBCDIC 10 0xA640, 0xA6F8, 0xA700, - 0xA7C0, - 0xA7C2, 0xA7CB, - 0xA7F5, + 0xA7D0, + 0xA7D2, + 0xA7D3, + 0xA7D4, + 0xA7D5, + 0xA7DA, + 0xA7F2, 0xA82D, 0xA830, 0xA83A, @@ -266021,16 +271017,14 @@ static const UV UNI_IDENTIFIERTYPE__NOTCHARACTER_invlist[] = { /* for EBCDIC 10 0xFB43, 0xFB45, 0xFB46, - 0xFBC2, + 0xFBC3, 0xFBD3, - 0xFD40, - 0xFD50, 0xFD90, 0xFD92, 0xFDC8, + 0xFDCF, + 0xFDD0, 0xFDF0, - 0xFDFE, - 0xFE00, 0xFE1A, 0xFE20, 0xFE53, @@ -266117,13 +271111,33 @@ static const UV UNI_IDENTIFIERTYPE__NOTCHARACTER_invlist[] = { /* for EBCDIC 10 0x10530, 0x10564, 0x1056F, - 0x10570, + 0x1057B, + 0x1057C, + 0x1058B, + 0x1058C, + 0x10593, + 0x10594, + 0x10596, + 0x10597, + 0x105A2, + 0x105A3, + 0x105B2, + 0x105B3, + 0x105BA, + 0x105BB, + 0x105BD, 0x10600, 0x10737, 0x10740, 0x10756, 0x10760, 0x10768, + 0x10780, + 0x10786, + 0x10787, + 0x107B1, + 0x107B2, + 0x107BB, 0x10800, 0x10806, 0x10808, @@ -266210,6 +271224,8 @@ static const UV UNI_IDENTIFIERTYPE__NOTCHARACTER_invlist[] = { /* for EBCDIC 10 0x10F28, 0x10F30, 0x10F5A, + 0x10F70, + 0x10F8A, 0x10FB0, 0x10FCC, 0x10FE0, @@ -266217,9 +271233,9 @@ static const UV UNI_IDENTIFIERTYPE__NOTCHARACTER_invlist[] = { /* for EBCDIC 10 0x11000, 0x1104E, 0x11052, - 0x11070, + 0x11076, 0x1107F, - 0x110C2, + 0x110C3, 0x110CD, 0x110CE, 0x110D0, @@ -266303,7 +271319,7 @@ static const UV UNI_IDENTIFIERTYPE__NOTCHARACTER_invlist[] = { /* for EBCDIC 10 0x11660, 0x1166D, 0x11680, - 0x116B9, + 0x116BA, 0x116C0, 0x116CA, 0x11700, @@ -266311,7 +271327,7 @@ static const UV UNI_IDENTIFIERTYPE__NOTCHARACTER_invlist[] = { /* for EBCDIC 10 0x1171D, 0x1172C, 0x11730, - 0x11740, + 0x11747, 0x11800, 0x1183C, 0x118A0, @@ -266342,7 +271358,7 @@ static const UV UNI_IDENTIFIERTYPE__NOTCHARACTER_invlist[] = { /* for EBCDIC 10 0x11A48, 0x11A50, 0x11AA3, - 0x11AC0, + 0x11AB0, 0x11AF9, 0x11C00, 0x11C09, @@ -266398,6 +271414,8 @@ static const UV UNI_IDENTIFIERTYPE__NOTCHARACTER_invlist[] = { /* for EBCDIC 10 0x12475, 0x12480, 0x12544, + 0x12F90, + 0x12FF3, 0x13000, 0x1342F, 0x13430, @@ -266411,7 +271429,9 @@ static const UV UNI_IDENTIFIERTYPE__NOTCHARACTER_invlist[] = { /* for EBCDIC 10 0x16A60, 0x16A6A, 0x16A6E, - 0x16A70, + 0x16ABF, + 0x16AC0, + 0x16ACA, 0x16AD0, 0x16AEE, 0x16AF0, @@ -266444,8 +271464,14 @@ static const UV UNI_IDENTIFIERTYPE__NOTCHARACTER_invlist[] = { /* for EBCDIC 10 0x18CD6, 0x18D00, 0x18D09, + 0x1AFF0, + 0x1AFF4, + 0x1AFF5, + 0x1AFFC, + 0x1AFFD, + 0x1AFFF, 0x1B000, - 0x1B11F, + 0x1B123, 0x1B150, 0x1B153, 0x1B164, @@ -266462,12 +271488,18 @@ static const UV UNI_IDENTIFIERTYPE__NOTCHARACTER_invlist[] = { /* for EBCDIC 10 0x1BC9A, 0x1BC9C, 0x1BCA4, + 0x1CF00, + 0x1CF2E, + 0x1CF30, + 0x1CF47, + 0x1CF50, + 0x1CFC4, 0x1D000, 0x1D0F6, 0x1D100, 0x1D127, 0x1D129, - 0x1D1E9, + 0x1D1EB, 0x1D200, 0x1D246, 0x1D2E0, @@ -266522,6 +271554,8 @@ static const UV UNI_IDENTIFIERTYPE__NOTCHARACTER_invlist[] = { /* for EBCDIC 10 0x1DAA0, 0x1DAA1, 0x1DAB0, + 0x1DF00, + 0x1DF1F, 0x1E000, 0x1E007, 0x1E008, @@ -266540,10 +271574,20 @@ static const UV UNI_IDENTIFIERTYPE__NOTCHARACTER_invlist[] = { /* for EBCDIC 10 0x1E14A, 0x1E14E, 0x1E150, + 0x1E290, + 0x1E2AF, 0x1E2C0, 0x1E2FA, 0x1E2FF, 0x1E300, + 0x1E7E0, + 0x1E7E7, + 0x1E7E8, + 0x1E7EC, + 0x1E7ED, + 0x1E7EF, + 0x1E7F0, + 0x1E7FF, 0x1E800, 0x1E8C5, 0x1E8C7, @@ -266652,7 +271696,7 @@ static const UV UNI_IDENTIFIERTYPE__NOTCHARACTER_invlist[] = { /* for EBCDIC 10 0x1F266, 0x1F300, 0x1F6D8, - 0x1F6E0, + 0x1F6DD, 0x1F6ED, 0x1F6F0, 0x1F6FD, @@ -266662,6 +271706,8 @@ static const UV UNI_IDENTIFIERTYPE__NOTCHARACTER_invlist[] = { /* for EBCDIC 10 0x1F7D9, 0x1F7E0, 0x1F7EC, + 0x1F7F0, + 0x1F7F1, 0x1F800, 0x1F80C, 0x1F810, @@ -266675,27 +271721,27 @@ static const UV UNI_IDENTIFIERTYPE__NOTCHARACTER_invlist[] = { /* for EBCDIC 10 0x1F8B0, 0x1F8B2, 0x1F900, - 0x1F979, - 0x1F97A, - 0x1F9CC, - 0x1F9CD, 0x1FA54, 0x1FA60, 0x1FA6E, 0x1FA70, 0x1FA75, 0x1FA78, - 0x1FA7B, + 0x1FA7D, 0x1FA80, 0x1FA87, 0x1FA90, - 0x1FAA9, + 0x1FAAD, 0x1FAB0, - 0x1FAB7, + 0x1FABB, 0x1FAC0, - 0x1FAC3, + 0x1FAC6, 0x1FAD0, - 0x1FAD7, + 0x1FADA, + 0x1FAE0, + 0x1FAE8, + 0x1FAF0, + 0x1FAF7, 0x1FB00, 0x1FB93, 0x1FB94, @@ -266703,9 +271749,9 @@ static const UV UNI_IDENTIFIERTYPE__NOTCHARACTER_invlist[] = { /* for EBCDIC 10 0x1FBF0, 0x1FBFA, 0x20000, - 0x2A6DE, + 0x2A6E0, 0x2A700, - 0x2B735, + 0x2B739, 0x2B740, 0x2B81E, 0x2B820, @@ -266732,7 +271778,7 @@ static const UV UNI_IDENTIFIERTYPE__NOTCHARACTER_invlist[] = { /* for EBCDIC 10 && '$' == 91 && '@' == 124 && '`' == 121 && '\n' == 37 static const UV UNI_IDENTIFIERTYPE__NOTCHARACTER_invlist[] = { /* for EBCDIC 037 */ - 1361, /* Number of elements */ + 1403, /* Number of elements */ 148565664, /* Version and data structure type */ 0, /* 0 if the list starts at 0; 1 if it starts at the element beyond 0 */ @@ -266772,8 +271818,6 @@ static const UV UNI_IDENTIFIERTYPE__NOTCHARACTER_invlist[] = { /* for EBCDIC 03 0x5EF, 0x5F5, 0x600, - 0x61D, - 0x61E, 0x70E, 0x70F, 0x74B, @@ -266791,11 +271835,11 @@ static const UV UNI_IDENTIFIERTYPE__NOTCHARACTER_invlist[] = { /* for EBCDIC 03 0x85F, 0x860, 0x86B, - 0x8A0, - 0x8B5, - 0x8B6, - 0x8C8, - 0x8D3, + 0x870, + 0x88F, + 0x890, + 0x892, + 0x898, 0x984, 0x985, 0x98D, @@ -266951,7 +271995,7 @@ static const UV UNI_IDENTIFIERTYPE__NOTCHARACTER_invlist[] = { /* for EBCDIC 03 0xC29, 0xC2A, 0xC3A, - 0xC3D, + 0xC3C, 0xC45, 0xC46, 0xC49, @@ -266961,6 +272005,8 @@ static const UV UNI_IDENTIFIERTYPE__NOTCHARACTER_invlist[] = { /* for EBCDIC 03 0xC57, 0xC58, 0xC5B, + 0xC5D, + 0xC5E, 0xC60, 0xC64, 0xC66, @@ -266983,7 +272029,7 @@ static const UV UNI_IDENTIFIERTYPE__NOTCHARACTER_invlist[] = { /* for EBCDIC 03 0xCCE, 0xCD5, 0xCD7, - 0xCDE, + 0xCDD, 0xCDF, 0xCE0, 0xCE4, @@ -267118,10 +272164,8 @@ static const UV UNI_IDENTIFIERTYPE__NOTCHARACTER_invlist[] = { /* for EBCDIC 03 0x16A0, 0x16F9, 0x1700, - 0x170D, - 0x170E, - 0x1715, - 0x1720, + 0x1716, + 0x171F, 0x1737, 0x1740, 0x1754, @@ -267138,8 +272182,6 @@ static const UV UNI_IDENTIFIERTYPE__NOTCHARACTER_invlist[] = { /* for EBCDIC 03 0x17F0, 0x17FA, 0x1800, - 0x180F, - 0x1810, 0x181A, 0x1820, 0x1879, @@ -267178,11 +272220,11 @@ static const UV UNI_IDENTIFIERTYPE__NOTCHARACTER_invlist[] = { /* for EBCDIC 03 0x1AA0, 0x1AAE, 0x1AB0, - 0x1AC1, + 0x1ACF, 0x1B00, - 0x1B4C, + 0x1B4D, 0x1B50, - 0x1B7D, + 0x1B7F, 0x1B80, 0x1BF4, 0x1BFC, @@ -267198,8 +272240,6 @@ static const UV UNI_IDENTIFIERTYPE__NOTCHARACTER_invlist[] = { /* for EBCDIC 03 0x1CD0, 0x1CFB, 0x1D00, - 0x1DFA, - 0x1DFB, 0x1F16, 0x1F18, 0x1F1E, @@ -267240,7 +272280,7 @@ static const UV UNI_IDENTIFIERTYPE__NOTCHARACTER_invlist[] = { /* for EBCDIC 03 0x2090, 0x209D, 0x20A0, - 0x20C0, + 0x20C1, 0x20D0, 0x20F1, 0x2100, @@ -267254,10 +272294,6 @@ static const UV UNI_IDENTIFIERTYPE__NOTCHARACTER_invlist[] = { /* for EBCDIC 03 0x2B76, 0x2B96, 0x2B97, - 0x2C2F, - 0x2C30, - 0x2C5F, - 0x2C60, 0x2CF4, 0x2CF9, 0x2D26, @@ -267288,7 +272324,7 @@ static const UV UNI_IDENTIFIERTYPE__NOTCHARACTER_invlist[] = { /* for EBCDIC 03 0x2DD8, 0x2DDF, 0x2DE0, - 0x2E53, + 0x2E5E, 0x2E80, 0x2E9A, 0x2E9B, @@ -267312,8 +272348,6 @@ static const UV UNI_IDENTIFIERTYPE__NOTCHARACTER_invlist[] = { /* for EBCDIC 03 0x31F0, 0x321F, 0x3220, - 0x9FFD, - 0xA000, 0xA48D, 0xA490, 0xA4C7, @@ -267322,10 +272356,14 @@ static const UV UNI_IDENTIFIERTYPE__NOTCHARACTER_invlist[] = { /* for EBCDIC 03 0xA640, 0xA6F8, 0xA700, - 0xA7C0, - 0xA7C2, 0xA7CB, - 0xA7F5, + 0xA7D0, + 0xA7D2, + 0xA7D3, + 0xA7D4, + 0xA7D5, + 0xA7DA, + 0xA7F2, 0xA82D, 0xA830, 0xA83A, @@ -267396,16 +272434,14 @@ static const UV UNI_IDENTIFIERTYPE__NOTCHARACTER_invlist[] = { /* for EBCDIC 03 0xFB43, 0xFB45, 0xFB46, - 0xFBC2, + 0xFBC3, 0xFBD3, - 0xFD40, - 0xFD50, 0xFD90, 0xFD92, 0xFDC8, + 0xFDCF, + 0xFDD0, 0xFDF0, - 0xFDFE, - 0xFE00, 0xFE1A, 0xFE20, 0xFE53, @@ -267492,13 +272528,33 @@ static const UV UNI_IDENTIFIERTYPE__NOTCHARACTER_invlist[] = { /* for EBCDIC 03 0x10530, 0x10564, 0x1056F, - 0x10570, + 0x1057B, + 0x1057C, + 0x1058B, + 0x1058C, + 0x10593, + 0x10594, + 0x10596, + 0x10597, + 0x105A2, + 0x105A3, + 0x105B2, + 0x105B3, + 0x105BA, + 0x105BB, + 0x105BD, 0x10600, 0x10737, 0x10740, 0x10756, 0x10760, 0x10768, + 0x10780, + 0x10786, + 0x10787, + 0x107B1, + 0x107B2, + 0x107BB, 0x10800, 0x10806, 0x10808, @@ -267585,6 +272641,8 @@ static const UV UNI_IDENTIFIERTYPE__NOTCHARACTER_invlist[] = { /* for EBCDIC 03 0x10F28, 0x10F30, 0x10F5A, + 0x10F70, + 0x10F8A, 0x10FB0, 0x10FCC, 0x10FE0, @@ -267592,9 +272650,9 @@ static const UV UNI_IDENTIFIERTYPE__NOTCHARACTER_invlist[] = { /* for EBCDIC 03 0x11000, 0x1104E, 0x11052, - 0x11070, + 0x11076, 0x1107F, - 0x110C2, + 0x110C3, 0x110CD, 0x110CE, 0x110D0, @@ -267678,7 +272736,7 @@ static const UV UNI_IDENTIFIERTYPE__NOTCHARACTER_invlist[] = { /* for EBCDIC 03 0x11660, 0x1166D, 0x11680, - 0x116B9, + 0x116BA, 0x116C0, 0x116CA, 0x11700, @@ -267686,7 +272744,7 @@ static const UV UNI_IDENTIFIERTYPE__NOTCHARACTER_invlist[] = { /* for EBCDIC 03 0x1171D, 0x1172C, 0x11730, - 0x11740, + 0x11747, 0x11800, 0x1183C, 0x118A0, @@ -267717,7 +272775,7 @@ static const UV UNI_IDENTIFIERTYPE__NOTCHARACTER_invlist[] = { /* for EBCDIC 03 0x11A48, 0x11A50, 0x11AA3, - 0x11AC0, + 0x11AB0, 0x11AF9, 0x11C00, 0x11C09, @@ -267773,6 +272831,8 @@ static const UV UNI_IDENTIFIERTYPE__NOTCHARACTER_invlist[] = { /* for EBCDIC 03 0x12475, 0x12480, 0x12544, + 0x12F90, + 0x12FF3, 0x13000, 0x1342F, 0x13430, @@ -267786,7 +272846,9 @@ static const UV UNI_IDENTIFIERTYPE__NOTCHARACTER_invlist[] = { /* for EBCDIC 03 0x16A60, 0x16A6A, 0x16A6E, - 0x16A70, + 0x16ABF, + 0x16AC0, + 0x16ACA, 0x16AD0, 0x16AEE, 0x16AF0, @@ -267819,8 +272881,14 @@ static const UV UNI_IDENTIFIERTYPE__NOTCHARACTER_invlist[] = { /* for EBCDIC 03 0x18CD6, 0x18D00, 0x18D09, + 0x1AFF0, + 0x1AFF4, + 0x1AFF5, + 0x1AFFC, + 0x1AFFD, + 0x1AFFF, 0x1B000, - 0x1B11F, + 0x1B123, 0x1B150, 0x1B153, 0x1B164, @@ -267837,12 +272905,18 @@ static const UV UNI_IDENTIFIERTYPE__NOTCHARACTER_invlist[] = { /* for EBCDIC 03 0x1BC9A, 0x1BC9C, 0x1BCA4, + 0x1CF00, + 0x1CF2E, + 0x1CF30, + 0x1CF47, + 0x1CF50, + 0x1CFC4, 0x1D000, 0x1D0F6, 0x1D100, 0x1D127, 0x1D129, - 0x1D1E9, + 0x1D1EB, 0x1D200, 0x1D246, 0x1D2E0, @@ -267897,6 +272971,8 @@ static const UV UNI_IDENTIFIERTYPE__NOTCHARACTER_invlist[] = { /* for EBCDIC 03 0x1DAA0, 0x1DAA1, 0x1DAB0, + 0x1DF00, + 0x1DF1F, 0x1E000, 0x1E007, 0x1E008, @@ -267915,10 +272991,20 @@ static const UV UNI_IDENTIFIERTYPE__NOTCHARACTER_invlist[] = { /* for EBCDIC 03 0x1E14A, 0x1E14E, 0x1E150, + 0x1E290, + 0x1E2AF, 0x1E2C0, 0x1E2FA, 0x1E2FF, 0x1E300, + 0x1E7E0, + 0x1E7E7, + 0x1E7E8, + 0x1E7EC, + 0x1E7ED, + 0x1E7EF, + 0x1E7F0, + 0x1E7FF, 0x1E800, 0x1E8C5, 0x1E8C7, @@ -268027,7 +273113,7 @@ static const UV UNI_IDENTIFIERTYPE__NOTCHARACTER_invlist[] = { /* for EBCDIC 03 0x1F266, 0x1F300, 0x1F6D8, - 0x1F6E0, + 0x1F6DD, 0x1F6ED, 0x1F6F0, 0x1F6FD, @@ -268037,6 +273123,8 @@ static const UV UNI_IDENTIFIERTYPE__NOTCHARACTER_invlist[] = { /* for EBCDIC 03 0x1F7D9, 0x1F7E0, 0x1F7EC, + 0x1F7F0, + 0x1F7F1, 0x1F800, 0x1F80C, 0x1F810, @@ -268050,27 +273138,27 @@ static const UV UNI_IDENTIFIERTYPE__NOTCHARACTER_invlist[] = { /* for EBCDIC 03 0x1F8B0, 0x1F8B2, 0x1F900, - 0x1F979, - 0x1F97A, - 0x1F9CC, - 0x1F9CD, 0x1FA54, 0x1FA60, 0x1FA6E, 0x1FA70, 0x1FA75, 0x1FA78, - 0x1FA7B, + 0x1FA7D, 0x1FA80, 0x1FA87, 0x1FA90, - 0x1FAA9, + 0x1FAAD, 0x1FAB0, - 0x1FAB7, + 0x1FABB, 0x1FAC0, - 0x1FAC3, + 0x1FAC6, 0x1FAD0, - 0x1FAD7, + 0x1FADA, + 0x1FAE0, + 0x1FAE8, + 0x1FAF0, + 0x1FAF7, 0x1FB00, 0x1FB93, 0x1FB94, @@ -268078,9 +273166,9 @@ static const UV UNI_IDENTIFIERTYPE__NOTCHARACTER_invlist[] = { /* for EBCDIC 03 0x1FBF0, 0x1FBFA, 0x20000, - 0x2A6DE, + 0x2A6E0, 0x2A700, - 0x2B735, + 0x2B739, 0x2B740, 0x2B81E, 0x2B820, @@ -268104,7 +273192,7 @@ static const UV UNI_IDENTIFIERTYPE__NOTCHARACTER_invlist[] = { /* for EBCDIC 03 # if 'A' == 65 /* ASCII/Latin1 */ static const UV UNI_IDENTIFIERTYPE__NOTNFKC_invlist[] = { /* for ASCII/Latin1 */ - 503, /* Number of elements */ + 511, /* Number of elements */ 148565664, /* Version and data structure type */ 1, /* 0 if the list starts at 0; 1 if it starts at the element beyond 0 */ @@ -268395,6 +273483,8 @@ static const UV UNI_IDENTIFIERTYPE__NOTNFKC_invlist[] = { /* for ASCII/Latin1 * 0xA69E, 0xA770, 0xA771, + 0xA7F2, + 0xA7F5, 0xA7F8, 0xA7FA, 0xAB5C, @@ -268477,6 +273567,12 @@ static const UV UNI_IDENTIFIERTYPE__NOTNFKC_invlist[] = { /* for ASCII/Latin1 * 0xFFE7, 0xFFE8, 0xFFEF, + 0x10781, + 0x10786, + 0x10787, + 0x107B1, + 0x107B2, + 0x107BB, 0x1D15E, 0x1D165, 0x1D1BB, @@ -268621,7 +273717,7 @@ static const UV UNI_IDENTIFIERTYPE__NOTNFKC_invlist[] = { /* for ASCII/Latin1 * && '$' == 91 && '@' == 124 && '`' == 121 && '\n' == 21 static const UV UNI_IDENTIFIERTYPE__NOTNFKC_invlist[] = { /* for EBCDIC 1047 */ - 509, /* Number of elements */ + 517, /* Number of elements */ 148565664, /* Version and data structure type */ 1, /* 0 if the list starts at 0; 1 if it starts at the element beyond 0 */ @@ -268918,6 +274014,8 @@ static const UV UNI_IDENTIFIERTYPE__NOTNFKC_invlist[] = { /* for EBCDIC 1047 */ 0xA69E, 0xA770, 0xA771, + 0xA7F2, + 0xA7F5, 0xA7F8, 0xA7FA, 0xAB5C, @@ -269000,6 +274098,12 @@ static const UV UNI_IDENTIFIERTYPE__NOTNFKC_invlist[] = { /* for EBCDIC 1047 */ 0xFFE7, 0xFFE8, 0xFFEF, + 0x10781, + 0x10786, + 0x10787, + 0x107B1, + 0x107B2, + 0x107BB, 0x1D15E, 0x1D165, 0x1D1BB, @@ -269144,7 +274248,7 @@ static const UV UNI_IDENTIFIERTYPE__NOTNFKC_invlist[] = { /* for EBCDIC 1047 */ && '$' == 91 && '@' == 124 && '`' == 121 && '\n' == 37 static const UV UNI_IDENTIFIERTYPE__NOTNFKC_invlist[] = { /* for EBCDIC 037 */ - 507, /* Number of elements */ + 515, /* Number of elements */ 148565664, /* Version and data structure type */ 1, /* 0 if the list starts at 0; 1 if it starts at the element beyond 0 */ @@ -269439,6 +274543,8 @@ static const UV UNI_IDENTIFIERTYPE__NOTNFKC_invlist[] = { /* for EBCDIC 037 */ 0xA69E, 0xA770, 0xA771, + 0xA7F2, + 0xA7F5, 0xA7F8, 0xA7FA, 0xAB5C, @@ -269521,6 +274627,12 @@ static const UV UNI_IDENTIFIERTYPE__NOTNFKC_invlist[] = { /* for EBCDIC 037 */ 0xFFE7, 0xFFE8, 0xFFEF, + 0x10781, + 0x10786, + 0x10787, + 0x107B1, + 0x107B2, + 0x107BB, 0x1D15E, 0x1D165, 0x1D1BB, @@ -269662,7 +274774,7 @@ static const UV UNI_IDENTIFIERTYPE__NOTNFKC_invlist[] = { /* for EBCDIC 037 */ # if 'A' == 65 /* ASCII/Latin1 */ static const UV UNI_IDENTIFIERTYPE__NOTXID_invlist[] = { /* for ASCII/Latin1 */ - 691, /* Number of elements */ + 707, /* Number of elements */ 148565664, /* Version and data structure type */ 1, /* 0 if the list starts at 0; 1 if it starts at the element beyond 0 */ @@ -269741,7 +274853,7 @@ static const UV UNI_IDENTIFIERTYPE__NOTXID_invlist[] = { /* for ASCII/Latin1 */ 0x610, 0x61B, 0x61C, - 0x61E, + 0x61D, 0x620, 0x66A, 0x66E, @@ -269763,6 +274875,10 @@ static const UV UNI_IDENTIFIERTYPE__NOTXID_invlist[] = { /* for ASCII/Latin1 */ 0x83F, 0x85E, 0x85F, + 0x888, + 0x889, + 0x890, + 0x892, 0x8E2, 0x8E3, 0x964, @@ -269872,7 +274988,7 @@ static const UV UNI_IDENTIFIERTYPE__NOTXID_invlist[] = { /* for ASCII/Latin1 */ 0x1B5A, 0x1B6B, 0x1B74, - 0x1B7D, + 0x1B7F, 0x1BFC, 0x1C00, 0x1C3B, @@ -269910,7 +275026,7 @@ static const UV UNI_IDENTIFIERTYPE__NOTXID_invlist[] = { /* for ASCII/Latin1 */ 0x20A0, 0x20A8, 0x20A9, - 0x20C0, + 0x20C1, 0x20DD, 0x20E1, 0x20E2, @@ -269972,7 +275088,7 @@ static const UV UNI_IDENTIFIERTYPE__NOTXID_invlist[] = { /* for ASCII/Latin1 */ 0x2D70, 0x2D71, 0x2E00, - 0x2E53, + 0x2E5E, 0x2E80, 0x2E9A, 0x2E9B, @@ -270054,11 +275170,13 @@ static const UV UNI_IDENTIFIERTYPE__NOTXID_invlist[] = { /* for ASCII/Latin1 */ 0xABEB, 0xABEC, 0xFBB2, - 0xFBC2, + 0xFBC3, 0xFD3E, - 0xFD40, + 0xFD50, + 0xFDCF, + 0xFDD0, 0xFDFD, - 0xFDFE, + 0xFE00, 0xFE45, 0xFE47, 0xFFF9, @@ -270139,6 +275257,8 @@ static const UV UNI_IDENTIFIERTYPE__NOTXID_invlist[] = { /* for ASCII/Latin1 */ 0x10F27, 0x10F51, 0x10F5A, + 0x10F86, + 0x10F8A, 0x10FC5, 0x10FCC, 0x11047, @@ -270181,6 +275301,8 @@ static const UV UNI_IDENTIFIERTYPE__NOTXID_invlist[] = { /* for ASCII/Latin1 */ 0x11644, 0x11660, 0x1166D, + 0x116B9, + 0x116BA, 0x1173A, 0x11740, 0x1183B, @@ -270211,6 +275333,8 @@ static const UV UNI_IDENTIFIERTYPE__NOTXID_invlist[] = { /* for ASCII/Latin1 */ 0x12000, 0x12470, 0x12475, + 0x12FF1, + 0x12FF3, 0x13430, 0x13439, 0x16A6E, @@ -270231,6 +275355,8 @@ static const UV UNI_IDENTIFIERTYPE__NOTXID_invlist[] = { /* for ASCII/Latin1 */ 0x1BC9D, 0x1BC9F, 0x1BCA0, + 0x1CF50, + 0x1CFC4, 0x1D000, 0x1D0F6, 0x1D100, @@ -270246,7 +275372,7 @@ static const UV UNI_IDENTIFIERTYPE__NOTXID_invlist[] = { /* for ASCII/Latin1 */ 0x1D1AE, 0x1D1BB, 0x1D1C1, - 0x1D1E9, + 0x1D1EB, 0x1D200, 0x1D242, 0x1D245, @@ -270309,7 +275435,7 @@ static const UV UNI_IDENTIFIERTYPE__NOTXID_invlist[] = { /* for ASCII/Latin1 */ 0x1F266, 0x1F300, 0x1F6D8, - 0x1F6E0, + 0x1F6DD, 0x1F6ED, 0x1F6F0, 0x1F6FD, @@ -270319,6 +275445,8 @@ static const UV UNI_IDENTIFIERTYPE__NOTXID_invlist[] = { /* for ASCII/Latin1 */ 0x1F7D9, 0x1F7E0, 0x1F7EC, + 0x1F7F0, + 0x1F7F1, 0x1F800, 0x1F80C, 0x1F810, @@ -270332,27 +275460,27 @@ static const UV UNI_IDENTIFIERTYPE__NOTXID_invlist[] = { /* for ASCII/Latin1 */ 0x1F8B0, 0x1F8B2, 0x1F900, - 0x1F979, - 0x1F97A, - 0x1F9CC, - 0x1F9CD, 0x1FA54, 0x1FA60, 0x1FA6E, 0x1FA70, 0x1FA75, 0x1FA78, - 0x1FA7B, + 0x1FA7D, 0x1FA80, 0x1FA87, 0x1FA90, - 0x1FAA9, + 0x1FAAD, 0x1FAB0, - 0x1FAB7, + 0x1FABB, 0x1FAC0, - 0x1FAC3, + 0x1FAC6, 0x1FAD0, - 0x1FAD7, + 0x1FADA, + 0x1FAE0, + 0x1FAE8, + 0x1FAF0, + 0x1FAF7, 0x1FB00, 0x1FB93, 0x1FB94, @@ -270367,7 +275495,7 @@ static const UV UNI_IDENTIFIERTYPE__NOTXID_invlist[] = { /* for ASCII/Latin1 */ && '$' == 91 && '@' == 124 && '`' == 121 && '\n' == 21 static const UV UNI_IDENTIFIERTYPE__NOTXID_invlist[] = { /* for EBCDIC 1047 */ - 705, /* Number of elements */ + 721, /* Number of elements */ 148565664, /* Version and data structure type */ 1, /* 0 if the list starts at 0; 1 if it starts at the element beyond 0 */ @@ -270460,7 +275588,7 @@ static const UV UNI_IDENTIFIERTYPE__NOTXID_invlist[] = { /* for EBCDIC 1047 */ 0x610, 0x61B, 0x61C, - 0x61E, + 0x61D, 0x620, 0x66A, 0x66E, @@ -270482,6 +275610,10 @@ static const UV UNI_IDENTIFIERTYPE__NOTXID_invlist[] = { /* for EBCDIC 1047 */ 0x83F, 0x85E, 0x85F, + 0x888, + 0x889, + 0x890, + 0x892, 0x8E2, 0x8E3, 0x964, @@ -270591,7 +275723,7 @@ static const UV UNI_IDENTIFIERTYPE__NOTXID_invlist[] = { /* for EBCDIC 1047 */ 0x1B5A, 0x1B6B, 0x1B74, - 0x1B7D, + 0x1B7F, 0x1BFC, 0x1C00, 0x1C3B, @@ -270629,7 +275761,7 @@ static const UV UNI_IDENTIFIERTYPE__NOTXID_invlist[] = { /* for EBCDIC 1047 */ 0x20A0, 0x20A8, 0x20A9, - 0x20C0, + 0x20C1, 0x20DD, 0x20E1, 0x20E2, @@ -270691,7 +275823,7 @@ static const UV UNI_IDENTIFIERTYPE__NOTXID_invlist[] = { /* for EBCDIC 1047 */ 0x2D70, 0x2D71, 0x2E00, - 0x2E53, + 0x2E5E, 0x2E80, 0x2E9A, 0x2E9B, @@ -270773,11 +275905,13 @@ static const UV UNI_IDENTIFIERTYPE__NOTXID_invlist[] = { /* for EBCDIC 1047 */ 0xABEB, 0xABEC, 0xFBB2, - 0xFBC2, + 0xFBC3, 0xFD3E, - 0xFD40, + 0xFD50, + 0xFDCF, + 0xFDD0, 0xFDFD, - 0xFDFE, + 0xFE00, 0xFE45, 0xFE47, 0xFFF9, @@ -270858,6 +275992,8 @@ static const UV UNI_IDENTIFIERTYPE__NOTXID_invlist[] = { /* for EBCDIC 1047 */ 0x10F27, 0x10F51, 0x10F5A, + 0x10F86, + 0x10F8A, 0x10FC5, 0x10FCC, 0x11047, @@ -270900,6 +276036,8 @@ static const UV UNI_IDENTIFIERTYPE__NOTXID_invlist[] = { /* for EBCDIC 1047 */ 0x11644, 0x11660, 0x1166D, + 0x116B9, + 0x116BA, 0x1173A, 0x11740, 0x1183B, @@ -270930,6 +276068,8 @@ static const UV UNI_IDENTIFIERTYPE__NOTXID_invlist[] = { /* for EBCDIC 1047 */ 0x12000, 0x12470, 0x12475, + 0x12FF1, + 0x12FF3, 0x13430, 0x13439, 0x16A6E, @@ -270950,6 +276090,8 @@ static const UV UNI_IDENTIFIERTYPE__NOTXID_invlist[] = { /* for EBCDIC 1047 */ 0x1BC9D, 0x1BC9F, 0x1BCA0, + 0x1CF50, + 0x1CFC4, 0x1D000, 0x1D0F6, 0x1D100, @@ -270965,7 +276107,7 @@ static const UV UNI_IDENTIFIERTYPE__NOTXID_invlist[] = { /* for EBCDIC 1047 */ 0x1D1AE, 0x1D1BB, 0x1D1C1, - 0x1D1E9, + 0x1D1EB, 0x1D200, 0x1D242, 0x1D245, @@ -271028,7 +276170,7 @@ static const UV UNI_IDENTIFIERTYPE__NOTXID_invlist[] = { /* for EBCDIC 1047 */ 0x1F266, 0x1F300, 0x1F6D8, - 0x1F6E0, + 0x1F6DD, 0x1F6ED, 0x1F6F0, 0x1F6FD, @@ -271038,6 +276180,8 @@ static const UV UNI_IDENTIFIERTYPE__NOTXID_invlist[] = { /* for EBCDIC 1047 */ 0x1F7D9, 0x1F7E0, 0x1F7EC, + 0x1F7F0, + 0x1F7F1, 0x1F800, 0x1F80C, 0x1F810, @@ -271051,27 +276195,27 @@ static const UV UNI_IDENTIFIERTYPE__NOTXID_invlist[] = { /* for EBCDIC 1047 */ 0x1F8B0, 0x1F8B2, 0x1F900, - 0x1F979, - 0x1F97A, - 0x1F9CC, - 0x1F9CD, 0x1FA54, 0x1FA60, 0x1FA6E, 0x1FA70, 0x1FA75, 0x1FA78, - 0x1FA7B, + 0x1FA7D, 0x1FA80, 0x1FA87, 0x1FA90, - 0x1FAA9, + 0x1FAAD, 0x1FAB0, - 0x1FAB7, + 0x1FABB, 0x1FAC0, - 0x1FAC3, + 0x1FAC6, 0x1FAD0, - 0x1FAD7, + 0x1FADA, + 0x1FAE0, + 0x1FAE8, + 0x1FAF0, + 0x1FAF7, 0x1FB00, 0x1FB93, 0x1FB94, @@ -271086,7 +276230,7 @@ static const UV UNI_IDENTIFIERTYPE__NOTXID_invlist[] = { /* for EBCDIC 1047 */ && '$' == 91 && '@' == 124 && '`' == 121 && '\n' == 37 static const UV UNI_IDENTIFIERTYPE__NOTXID_invlist[] = { /* for EBCDIC 037 */ - 703, /* Number of elements */ + 719, /* Number of elements */ 148565664, /* Version and data structure type */ 1, /* 0 if the list starts at 0; 1 if it starts at the element beyond 0 */ @@ -271177,7 +276321,7 @@ static const UV UNI_IDENTIFIERTYPE__NOTXID_invlist[] = { /* for EBCDIC 037 */ 0x610, 0x61B, 0x61C, - 0x61E, + 0x61D, 0x620, 0x66A, 0x66E, @@ -271199,6 +276343,10 @@ static const UV UNI_IDENTIFIERTYPE__NOTXID_invlist[] = { /* for EBCDIC 037 */ 0x83F, 0x85E, 0x85F, + 0x888, + 0x889, + 0x890, + 0x892, 0x8E2, 0x8E3, 0x964, @@ -271308,7 +276456,7 @@ static const UV UNI_IDENTIFIERTYPE__NOTXID_invlist[] = { /* for EBCDIC 037 */ 0x1B5A, 0x1B6B, 0x1B74, - 0x1B7D, + 0x1B7F, 0x1BFC, 0x1C00, 0x1C3B, @@ -271346,7 +276494,7 @@ static const UV UNI_IDENTIFIERTYPE__NOTXID_invlist[] = { /* for EBCDIC 037 */ 0x20A0, 0x20A8, 0x20A9, - 0x20C0, + 0x20C1, 0x20DD, 0x20E1, 0x20E2, @@ -271408,7 +276556,7 @@ static const UV UNI_IDENTIFIERTYPE__NOTXID_invlist[] = { /* for EBCDIC 037 */ 0x2D70, 0x2D71, 0x2E00, - 0x2E53, + 0x2E5E, 0x2E80, 0x2E9A, 0x2E9B, @@ -271490,11 +276638,13 @@ static const UV UNI_IDENTIFIERTYPE__NOTXID_invlist[] = { /* for EBCDIC 037 */ 0xABEB, 0xABEC, 0xFBB2, - 0xFBC2, + 0xFBC3, 0xFD3E, - 0xFD40, + 0xFD50, + 0xFDCF, + 0xFDD0, 0xFDFD, - 0xFDFE, + 0xFE00, 0xFE45, 0xFE47, 0xFFF9, @@ -271575,6 +276725,8 @@ static const UV UNI_IDENTIFIERTYPE__NOTXID_invlist[] = { /* for EBCDIC 037 */ 0x10F27, 0x10F51, 0x10F5A, + 0x10F86, + 0x10F8A, 0x10FC5, 0x10FCC, 0x11047, @@ -271617,6 +276769,8 @@ static const UV UNI_IDENTIFIERTYPE__NOTXID_invlist[] = { /* for EBCDIC 037 */ 0x11644, 0x11660, 0x1166D, + 0x116B9, + 0x116BA, 0x1173A, 0x11740, 0x1183B, @@ -271647,6 +276801,8 @@ static const UV UNI_IDENTIFIERTYPE__NOTXID_invlist[] = { /* for EBCDIC 037 */ 0x12000, 0x12470, 0x12475, + 0x12FF1, + 0x12FF3, 0x13430, 0x13439, 0x16A6E, @@ -271667,6 +276823,8 @@ static const UV UNI_IDENTIFIERTYPE__NOTXID_invlist[] = { /* for EBCDIC 037 */ 0x1BC9D, 0x1BC9F, 0x1BCA0, + 0x1CF50, + 0x1CFC4, 0x1D000, 0x1D0F6, 0x1D100, @@ -271682,7 +276840,7 @@ static const UV UNI_IDENTIFIERTYPE__NOTXID_invlist[] = { /* for EBCDIC 037 */ 0x1D1AE, 0x1D1BB, 0x1D1C1, - 0x1D1E9, + 0x1D1EB, 0x1D200, 0x1D242, 0x1D245, @@ -271745,7 +276903,7 @@ static const UV UNI_IDENTIFIERTYPE__NOTXID_invlist[] = { /* for EBCDIC 037 */ 0x1F266, 0x1F300, 0x1F6D8, - 0x1F6E0, + 0x1F6DD, 0x1F6ED, 0x1F6F0, 0x1F6FD, @@ -271755,6 +276913,8 @@ static const UV UNI_IDENTIFIERTYPE__NOTXID_invlist[] = { /* for EBCDIC 037 */ 0x1F7D9, 0x1F7E0, 0x1F7EC, + 0x1F7F0, + 0x1F7F1, 0x1F800, 0x1F80C, 0x1F810, @@ -271768,27 +276928,27 @@ static const UV UNI_IDENTIFIERTYPE__NOTXID_invlist[] = { /* for EBCDIC 037 */ 0x1F8B0, 0x1F8B2, 0x1F900, - 0x1F979, - 0x1F97A, - 0x1F9CC, - 0x1F9CD, 0x1FA54, 0x1FA60, 0x1FA6E, 0x1FA70, 0x1FA75, 0x1FA78, - 0x1FA7B, + 0x1FA7D, 0x1FA80, 0x1FA87, 0x1FA90, - 0x1FAA9, + 0x1FAAD, 0x1FAB0, - 0x1FAB7, + 0x1FABB, 0x1FAC0, - 0x1FAC3, + 0x1FAC6, 0x1FAD0, - 0x1FAD7, + 0x1FADA, + 0x1FAE0, + 0x1FAE8, + 0x1FAF0, + 0x1FAF7, 0x1FB00, 0x1FB93, 0x1FB94, @@ -271798,7 +276958,7 @@ static const UV UNI_IDENTIFIERTYPE__NOTXID_invlist[] = { /* for EBCDIC 037 */ # endif /* EBCDIC 037 */ static const UV UNI_IDENTIFIERTYPE__OBSOLETE_invlist[] = { /* for all charsets */ - 207, /* Number of elements */ + 209, /* Number of elements */ 148565664, /* Version and data structure type */ 1, /* 0 if the list starts at 0; 1 if it starts at the element beyond 0 */ @@ -271953,6 +277113,8 @@ static const UV UNI_IDENTIFIERTYPE__OBSOLETE_invlist[] = { /* for all charsets 0x3030, 0x312E, 0x312F, + 0x31F0, + 0x3200, 0xA610, 0xA613, 0xA62A, @@ -272014,7 +277176,7 @@ static const UV UNI_IDENTIFIERTYPE__OBSOLETE_invlist[] = { /* for all charsets # if 'A' == 65 /* ASCII/Latin1 */ static const UV UNI_IDENTIFIERTYPE__RECOMMENDED_invlist[] = { /* for ASCII/Latin1 */ - 733, /* Number of elements */ + 761, /* Number of elements */ 148565664, /* Version and data structure type */ 1, /* 0 if the list starts at 0; 1 if it starts at the element beyond 0 */ @@ -272147,12 +277309,16 @@ static const UV UNI_IDENTIFIERTYPE__RECOMMENDED_invlist[] = { /* for ASCII/Lati 0x700, 0x750, 0x7B2, + 0x870, + 0x888, + 0x889, + 0x88F, 0x8A0, 0x8AD, 0x8B2, 0x8B3, - 0x8B6, - 0x8C8, + 0x8B5, + 0x8CA, 0x901, 0x94E, 0x94F, @@ -272321,7 +277487,7 @@ static const UV UNI_IDENTIFIERTYPE__RECOMMENDED_invlist[] = { /* for ASCII/Lati 0xC34, 0xC35, 0xC3A, - 0xC3D, + 0xC3C, 0xC45, 0xC46, 0xC49, @@ -272329,6 +277495,8 @@ static const UV UNI_IDENTIFIERTYPE__RECOMMENDED_invlist[] = { /* for ASCII/Lati 0xC4E, 0xC55, 0xC57, + 0xC5D, + 0xC5E, 0xC60, 0xC62, 0xC66, @@ -272355,6 +277523,8 @@ static const UV UNI_IDENTIFIERTYPE__RECOMMENDED_invlist[] = { /* for ASCII/Lati 0xCCE, 0xCD5, 0xCD7, + 0xCDD, + 0xCDE, 0xCE0, 0xCE4, 0xCE6, @@ -272550,7 +277720,9 @@ static const UV UNI_IDENTIFIERTYPE__RECOMMENDED_invlist[] = { /* for ASCII/Lati 0x17A9, 0x17B4, 0x17B6, - 0x17CB, + 0x17CE, + 0x17D0, + 0x17D1, 0x17D2, 0x17D3, 0x17D7, @@ -272674,7 +277846,7 @@ static const UV UNI_IDENTIFIERTYPE__RECOMMENDED_invlist[] = { /* for ASCII/Lati 0x3400, 0x4DC0, 0x4E00, - 0x9FFD, + 0xA000, 0xA67F, 0xA680, 0xA717, @@ -272691,8 +277863,14 @@ static const UV UNI_IDENTIFIERTYPE__RECOMMENDED_invlist[] = { /* for ASCII/Lati 0xA7AF, 0xA7B8, 0xA7BA, - 0xA7C2, + 0xA7C0, 0xA7CB, + 0xA7D0, + 0xA7D2, + 0xA7D3, + 0xA7D4, + 0xA7D5, + 0xA7DA, 0xA9E7, 0xA9FF, 0xAA60, @@ -272735,14 +277913,26 @@ static const UV UNI_IDENTIFIERTYPE__RECOMMENDED_invlist[] = { /* for ASCII/Lati 0x1133D, 0x16FF0, 0x16FF2, + 0x1B11F, + 0x1B123, 0x1B150, 0x1B153, 0x1B164, 0x1B168, + 0x1DF00, + 0x1DF1F, + 0x1E7E0, + 0x1E7E7, + 0x1E7E8, + 0x1E7EC, + 0x1E7ED, + 0x1E7EF, + 0x1E7F0, + 0x1E7FF, 0x20000, - 0x2A6DE, + 0x2A6E0, 0x2A700, - 0x2B735, + 0x2B739, 0x2B740, 0x2B81E, 0x2B820, @@ -272761,7 +277951,7 @@ static const UV UNI_IDENTIFIERTYPE__RECOMMENDED_invlist[] = { /* for ASCII/Lati && '$' == 91 && '@' == 124 && '`' == 121 && '\n' == 21 static const UV UNI_IDENTIFIERTYPE__RECOMMENDED_invlist[] = { /* for EBCDIC 1047 */ - 763, /* Number of elements */ + 791, /* Number of elements */ 148565664, /* Version and data structure type */ 1, /* 0 if the list starts at 0; 1 if it starts at the element beyond 0 */ @@ -272924,12 +278114,16 @@ static const UV UNI_IDENTIFIERTYPE__RECOMMENDED_invlist[] = { /* for EBCDIC 104 0x700, 0x750, 0x7B2, + 0x870, + 0x888, + 0x889, + 0x88F, 0x8A0, 0x8AD, 0x8B2, 0x8B3, - 0x8B6, - 0x8C8, + 0x8B5, + 0x8CA, 0x901, 0x94E, 0x94F, @@ -273098,7 +278292,7 @@ static const UV UNI_IDENTIFIERTYPE__RECOMMENDED_invlist[] = { /* for EBCDIC 104 0xC34, 0xC35, 0xC3A, - 0xC3D, + 0xC3C, 0xC45, 0xC46, 0xC49, @@ -273106,6 +278300,8 @@ static const UV UNI_IDENTIFIERTYPE__RECOMMENDED_invlist[] = { /* for EBCDIC 104 0xC4E, 0xC55, 0xC57, + 0xC5D, + 0xC5E, 0xC60, 0xC62, 0xC66, @@ -273132,6 +278328,8 @@ static const UV UNI_IDENTIFIERTYPE__RECOMMENDED_invlist[] = { /* for EBCDIC 104 0xCCE, 0xCD5, 0xCD7, + 0xCDD, + 0xCDE, 0xCE0, 0xCE4, 0xCE6, @@ -273327,7 +278525,9 @@ static const UV UNI_IDENTIFIERTYPE__RECOMMENDED_invlist[] = { /* for EBCDIC 104 0x17A9, 0x17B4, 0x17B6, - 0x17CB, + 0x17CE, + 0x17D0, + 0x17D1, 0x17D2, 0x17D3, 0x17D7, @@ -273451,7 +278651,7 @@ static const UV UNI_IDENTIFIERTYPE__RECOMMENDED_invlist[] = { /* for EBCDIC 104 0x3400, 0x4DC0, 0x4E00, - 0x9FFD, + 0xA000, 0xA67F, 0xA680, 0xA717, @@ -273468,8 +278668,14 @@ static const UV UNI_IDENTIFIERTYPE__RECOMMENDED_invlist[] = { /* for EBCDIC 104 0xA7AF, 0xA7B8, 0xA7BA, - 0xA7C2, + 0xA7C0, 0xA7CB, + 0xA7D0, + 0xA7D2, + 0xA7D3, + 0xA7D4, + 0xA7D5, + 0xA7DA, 0xA9E7, 0xA9FF, 0xAA60, @@ -273512,14 +278718,26 @@ static const UV UNI_IDENTIFIERTYPE__RECOMMENDED_invlist[] = { /* for EBCDIC 104 0x1133D, 0x16FF0, 0x16FF2, + 0x1B11F, + 0x1B123, 0x1B150, 0x1B153, 0x1B164, 0x1B168, + 0x1DF00, + 0x1DF1F, + 0x1E7E0, + 0x1E7E7, + 0x1E7E8, + 0x1E7EC, + 0x1E7ED, + 0x1E7EF, + 0x1E7F0, + 0x1E7FF, 0x20000, - 0x2A6DE, + 0x2A6E0, 0x2A700, - 0x2B735, + 0x2B739, 0x2B740, 0x2B81E, 0x2B820, @@ -273538,7 +278756,7 @@ static const UV UNI_IDENTIFIERTYPE__RECOMMENDED_invlist[] = { /* for EBCDIC 104 && '$' == 91 && '@' == 124 && '`' == 121 && '\n' == 37 static const UV UNI_IDENTIFIERTYPE__RECOMMENDED_invlist[] = { /* for EBCDIC 037 */ - 759, /* Number of elements */ + 787, /* Number of elements */ 148565664, /* Version and data structure type */ 1, /* 0 if the list starts at 0; 1 if it starts at the element beyond 0 */ @@ -273697,12 +278915,16 @@ static const UV UNI_IDENTIFIERTYPE__RECOMMENDED_invlist[] = { /* for EBCDIC 037 0x700, 0x750, 0x7B2, + 0x870, + 0x888, + 0x889, + 0x88F, 0x8A0, 0x8AD, 0x8B2, 0x8B3, - 0x8B6, - 0x8C8, + 0x8B5, + 0x8CA, 0x901, 0x94E, 0x94F, @@ -273871,7 +279093,7 @@ static const UV UNI_IDENTIFIERTYPE__RECOMMENDED_invlist[] = { /* for EBCDIC 037 0xC34, 0xC35, 0xC3A, - 0xC3D, + 0xC3C, 0xC45, 0xC46, 0xC49, @@ -273879,6 +279101,8 @@ static const UV UNI_IDENTIFIERTYPE__RECOMMENDED_invlist[] = { /* for EBCDIC 037 0xC4E, 0xC55, 0xC57, + 0xC5D, + 0xC5E, 0xC60, 0xC62, 0xC66, @@ -273905,6 +279129,8 @@ static const UV UNI_IDENTIFIERTYPE__RECOMMENDED_invlist[] = { /* for EBCDIC 037 0xCCE, 0xCD5, 0xCD7, + 0xCDD, + 0xCDE, 0xCE0, 0xCE4, 0xCE6, @@ -274100,7 +279326,9 @@ static const UV UNI_IDENTIFIERTYPE__RECOMMENDED_invlist[] = { /* for EBCDIC 037 0x17A9, 0x17B4, 0x17B6, - 0x17CB, + 0x17CE, + 0x17D0, + 0x17D1, 0x17D2, 0x17D3, 0x17D7, @@ -274224,7 +279452,7 @@ static const UV UNI_IDENTIFIERTYPE__RECOMMENDED_invlist[] = { /* for EBCDIC 037 0x3400, 0x4DC0, 0x4E00, - 0x9FFD, + 0xA000, 0xA67F, 0xA680, 0xA717, @@ -274241,8 +279469,14 @@ static const UV UNI_IDENTIFIERTYPE__RECOMMENDED_invlist[] = { /* for EBCDIC 037 0xA7AF, 0xA7B8, 0xA7BA, - 0xA7C2, + 0xA7C0, 0xA7CB, + 0xA7D0, + 0xA7D2, + 0xA7D3, + 0xA7D4, + 0xA7D5, + 0xA7DA, 0xA9E7, 0xA9FF, 0xAA60, @@ -274285,14 +279519,26 @@ static const UV UNI_IDENTIFIERTYPE__RECOMMENDED_invlist[] = { /* for EBCDIC 037 0x1133D, 0x16FF0, 0x16FF2, + 0x1B11F, + 0x1B123, 0x1B150, 0x1B153, 0x1B164, 0x1B168, + 0x1DF00, + 0x1DF1F, + 0x1E7E0, + 0x1E7E7, + 0x1E7E8, + 0x1E7EC, + 0x1E7ED, + 0x1E7EF, + 0x1E7F0, + 0x1E7FF, 0x20000, - 0x2A6DE, + 0x2A6E0, 0x2A700, - 0x2B735, + 0x2B739, 0x2B740, 0x2B81E, 0x2B820, @@ -274306,7 +279552,7 @@ static const UV UNI_IDENTIFIERTYPE__RECOMMENDED_invlist[] = { /* for EBCDIC 037 # endif /* EBCDIC 037 */ static const UV UNI_IDENTIFIERTYPE__TECHNICAL_invlist[] = { /* for all charsets */ - 191, /* Number of elements */ + 199, /* Number of elements */ 148565664, /* Version and data structure type */ 1, /* 0 if the list starts at 0; 1 if it starts at the element beyond 0 */ @@ -274395,12 +279641,16 @@ static const UV UNI_IDENTIFIERTYPE__TECHNICAL_invlist[] = { /* for all charsets 0xDF4, 0xF18, 0xF1A, - 0x17CB, + 0x17CE, + 0x17D0, + 0x17D1, 0x17D2, 0x17DD, 0x17DE, 0x1ABF, 0x1AC1, + 0x1B6B, + 0x1B74, 0x1D00, 0x1D2C, 0x1D2F, @@ -274414,8 +279664,6 @@ static const UV UNI_IDENTIFIERTYPE__TECHNICAL_invlist[] = { /* for all charsets 0x1D79, 0x1D9B, 0x1DC0, - 0x1DFA, - 0x1DFB, 0x1E00, 0x1E9C, 0x1E9E, @@ -274451,8 +279699,6 @@ static const UV UNI_IDENTIFIERTYPE__TECHNICAL_invlist[] = { /* for all charsets 0x3036, 0x303B, 0x303D, - 0x31F0, - 0x3200, 0x327F, 0x3280, 0x4DC0, @@ -274474,17 +279720,25 @@ static const UV UNI_IDENTIFIERTYPE__TECHNICAL_invlist[] = { /* for all charsets 0xFB1E, 0xFB1F, 0xFBB2, - 0xFBC2, + 0xFBC3, 0xFD3E, - 0xFD40, + 0xFD50, + 0xFDCF, + 0xFDD0, 0xFDFD, - 0xFDFE, + 0xFE00, 0xFE20, 0xFE30, 0xFE45, 0xFE47, 0xFE73, 0xFE74, + 0x1CF00, + 0x1CF2E, + 0x1CF30, + 0x1CF47, + 0x1CF50, + 0x1CFC4, 0x1D000, 0x1D0F6, 0x1D100, @@ -274496,7 +279750,7 @@ static const UV UNI_IDENTIFIERTYPE__TECHNICAL_invlist[] = { /* for all charsets 0x1D17B, 0x1D1BB, 0x1D1C1, - 0x1D1E9, + 0x1D1EB, 0x1D242, 0x1D245, 0x1D300, @@ -274504,7 +279758,7 @@ static const UV UNI_IDENTIFIERTYPE__TECHNICAL_invlist[] = { /* for all charsets }; static const UV UNI_IDENTIFIERTYPE__UNCOMMONUSE_invlist[] = { /* for all charsets */ - 153, /* Number of elements */ + 165, /* Number of elements */ 148565664, /* Version and data structure type */ 1, /* 0 if the list starts at 0; 1 if it starts at the element beyond 0 */ @@ -274587,9 +279841,11 @@ static const UV UNI_IDENTIFIERTYPE__UNCOMMONUSE_invlist[] = { /* for all charse 0x6E9, 0x6EA, 0x6EE, + 0x898, + 0x8A0, 0x8B3, 0x8B5, - 0x8D3, + 0x8CA, 0x8E2, 0x8E3, 0x901, @@ -274625,6 +279881,8 @@ static const UV UNI_IDENTIFIERTYPE__UNCOMMONUSE_invlist[] = { /* for all charse 0xF3A, 0x18A9, 0x18AA, + 0x1AC1, + 0x1ACF, 0x2054, 0x2055, 0x218A, @@ -274653,10 +279911,18 @@ static const UV UNI_IDENTIFIERTYPE__UNCOMMONUSE_invlist[] = { /* for all charse 0xFB1F, 0xFE2E, 0xFE30, + 0x10780, + 0x10781, 0x16A40, 0x16A5F, 0x16A60, 0x16A6A, + 0x1AFF0, + 0x1AFF4, + 0x1AFF5, + 0x1AFFC, + 0x1AFFD, + 0x1AFFF, 0x1D1DE, 0x1D1E9, 0x1F54F, @@ -274678,7 +279944,7 @@ static const UV UNI_IDEO_invlist[] = { /* for all charsets */ 0x3400, 0x4DC0, 0x4E00, - 0x9FFD, + 0xA000, 0xF900, 0xFA6E, 0xFA70, @@ -274694,9 +279960,9 @@ static const UV UNI_IDEO_invlist[] = { /* for all charsets */ 0x1B170, 0x1B2FC, 0x20000, - 0x2A6DE, + 0x2A6E0, 0x2A700, - 0x2B735, + 0x2B739, 0x2B740, 0x2B81E, 0x2B820, @@ -274722,7 +279988,7 @@ static const UV UNI_IDEOGRAPHICSYMBOLS_invlist[] = { /* for all charsets */ # if 'A' == 65 /* ASCII/Latin1 */ static const UV UNI_IDS_invlist[] = { /* for ASCII/Latin1 */ - 1245, /* Number of elements */ + 1297, /* Number of elements */ 148565664, /* Version and data structure type */ 1, /* 0 if the list starts at 0; 1 if it starts at the element beyond 0 */ @@ -274825,10 +280091,12 @@ static const UV UNI_IDS_invlist[] = { /* for ASCII/Latin1 */ 0x859, 0x860, 0x86B, + 0x870, + 0x888, + 0x889, + 0x88F, 0x8A0, - 0x8B5, - 0x8B6, - 0x8C8, + 0x8CA, 0x904, 0x93A, 0x93D, @@ -274957,6 +280225,8 @@ static const UV UNI_IDS_invlist[] = { /* for ASCII/Latin1 */ 0xC3E, 0xC58, 0xC5B, + 0xC5D, + 0xC5E, 0xC60, 0xC62, 0xC80, @@ -274973,7 +280243,7 @@ static const UV UNI_IDS_invlist[] = { /* for ASCII/Latin1 */ 0xCBA, 0xCBD, 0xCBE, - 0xCDE, + 0xCDD, 0xCDF, 0xCE0, 0xCE2, @@ -275116,10 +280386,8 @@ static const UV UNI_IDS_invlist[] = { /* for ASCII/Latin1 */ 0x16EE, 0x16F9, 0x1700, - 0x170D, - 0x170E, 0x1712, - 0x1720, + 0x171F, 0x1732, 0x1740, 0x1752, @@ -275160,7 +280428,7 @@ static const UV UNI_IDS_invlist[] = { /* for ASCII/Latin1 */ 0x1B05, 0x1B34, 0x1B45, - 0x1B4C, + 0x1B4D, 0x1B83, 0x1BA1, 0x1BAE, @@ -275260,10 +280528,6 @@ static const UV UNI_IDS_invlist[] = { /* for ASCII/Latin1 */ 0x2160, 0x2189, 0x2C00, - 0x2C2F, - 0x2C30, - 0x2C5F, - 0x2C60, 0x2CE5, 0x2CEB, 0x2CEF, @@ -275324,8 +280588,6 @@ static const UV UNI_IDS_invlist[] = { /* for ASCII/Latin1 */ 0x3400, 0x4DC0, 0x4E00, - 0x9FFD, - 0xA000, 0xA48D, 0xA4D0, 0xA4FE, @@ -275346,10 +280608,14 @@ static const UV UNI_IDS_invlist[] = { /* for ASCII/Latin1 */ 0xA722, 0xA789, 0xA78B, - 0xA7C0, - 0xA7C2, 0xA7CB, - 0xA7F5, + 0xA7D0, + 0xA7D2, + 0xA7D3, + 0xA7D4, + 0xA7D5, + 0xA7DA, + 0xA7F2, 0xA802, 0xA803, 0xA806, @@ -275527,12 +280793,34 @@ static const UV UNI_IDS_invlist[] = { /* for ASCII/Latin1 */ 0x10528, 0x10530, 0x10564, + 0x10570, + 0x1057B, + 0x1057C, + 0x1058B, + 0x1058C, + 0x10593, + 0x10594, + 0x10596, + 0x10597, + 0x105A2, + 0x105A3, + 0x105B2, + 0x105B3, + 0x105BA, + 0x105BB, + 0x105BD, 0x10600, 0x10737, 0x10740, 0x10756, 0x10760, 0x10768, + 0x10780, + 0x10786, + 0x10787, + 0x107B1, + 0x107B2, + 0x107BB, 0x10800, 0x10806, 0x10808, @@ -275603,12 +280891,18 @@ static const UV UNI_IDS_invlist[] = { /* for ASCII/Latin1 */ 0x10F28, 0x10F30, 0x10F46, + 0x10F70, + 0x10F82, 0x10FB0, 0x10FC5, 0x10FE0, 0x10FF7, 0x11003, 0x11038, + 0x11071, + 0x11073, + 0x11075, + 0x11076, 0x11083, 0x110B0, 0x110D0, @@ -275691,6 +280985,8 @@ static const UV UNI_IDS_invlist[] = { /* for ASCII/Latin1 */ 0x116B9, 0x11700, 0x1171B, + 0x11740, + 0x11747, 0x11800, 0x1182C, 0x118A0, @@ -275729,7 +281025,7 @@ static const UV UNI_IDS_invlist[] = { /* for ASCII/Latin1 */ 0x11A8A, 0x11A9D, 0x11A9E, - 0x11AC0, + 0x11AB0, 0x11AF9, 0x11C00, 0x11C09, @@ -275765,6 +281061,8 @@ static const UV UNI_IDS_invlist[] = { /* for ASCII/Latin1 */ 0x1246F, 0x12480, 0x12544, + 0x12F90, + 0x12FF1, 0x13000, 0x1342F, 0x14400, @@ -275773,6 +281071,8 @@ static const UV UNI_IDS_invlist[] = { /* for ASCII/Latin1 */ 0x16A39, 0x16A40, 0x16A5F, + 0x16A70, + 0x16ABF, 0x16AD0, 0x16AEE, 0x16B00, @@ -275801,8 +281101,14 @@ static const UV UNI_IDS_invlist[] = { /* for ASCII/Latin1 */ 0x18CD6, 0x18D00, 0x18D09, + 0x1AFF0, + 0x1AFF4, + 0x1AFF5, + 0x1AFFC, + 0x1AFFD, + 0x1AFFF, 0x1B000, - 0x1B11F, + 0x1B123, 0x1B150, 0x1B153, 0x1B164, @@ -275877,14 +281183,26 @@ static const UV UNI_IDS_invlist[] = { /* for ASCII/Latin1 */ 0x1D7C3, 0x1D7C4, 0x1D7CC, + 0x1DF00, + 0x1DF1F, 0x1E100, 0x1E12D, 0x1E137, 0x1E13E, 0x1E14E, 0x1E14F, + 0x1E290, + 0x1E2AE, 0x1E2C0, 0x1E2EC, + 0x1E7E0, + 0x1E7E7, + 0x1E7E8, + 0x1E7EC, + 0x1E7ED, + 0x1E7EF, + 0x1E7F0, + 0x1E7FF, 0x1E800, 0x1E8C5, 0x1E900, @@ -275958,9 +281276,9 @@ static const UV UNI_IDS_invlist[] = { /* for ASCII/Latin1 */ 0x1EEAB, 0x1EEBC, 0x20000, - 0x2A6DE, + 0x2A6E0, 0x2A700, - 0x2B735, + 0x2B739, 0x2B740, 0x2B81E, 0x2B820, @@ -275981,7 +281299,7 @@ static const UV UNI_IDS_invlist[] = { /* for ASCII/Latin1 */ && '$' == 91 && '@' == 124 && '`' == 121 && '\n' == 21 static const UV UNI_IDS_invlist[] = { /* for EBCDIC 1047 */ - 1271, /* Number of elements */ + 1323, /* Number of elements */ 148565664, /* Version and data structure type */ 1, /* 0 if the list starts at 0; 1 if it starts at the element beyond 0 */ @@ -276110,10 +281428,12 @@ static const UV UNI_IDS_invlist[] = { /* for EBCDIC 1047 */ 0x859, 0x860, 0x86B, + 0x870, + 0x888, + 0x889, + 0x88F, 0x8A0, - 0x8B5, - 0x8B6, - 0x8C8, + 0x8CA, 0x904, 0x93A, 0x93D, @@ -276242,6 +281562,8 @@ static const UV UNI_IDS_invlist[] = { /* for EBCDIC 1047 */ 0xC3E, 0xC58, 0xC5B, + 0xC5D, + 0xC5E, 0xC60, 0xC62, 0xC80, @@ -276258,7 +281580,7 @@ static const UV UNI_IDS_invlist[] = { /* for EBCDIC 1047 */ 0xCBA, 0xCBD, 0xCBE, - 0xCDE, + 0xCDD, 0xCDF, 0xCE0, 0xCE2, @@ -276401,10 +281723,8 @@ static const UV UNI_IDS_invlist[] = { /* for EBCDIC 1047 */ 0x16EE, 0x16F9, 0x1700, - 0x170D, - 0x170E, 0x1712, - 0x1720, + 0x171F, 0x1732, 0x1740, 0x1752, @@ -276445,7 +281765,7 @@ static const UV UNI_IDS_invlist[] = { /* for EBCDIC 1047 */ 0x1B05, 0x1B34, 0x1B45, - 0x1B4C, + 0x1B4D, 0x1B83, 0x1BA1, 0x1BAE, @@ -276545,10 +281865,6 @@ static const UV UNI_IDS_invlist[] = { /* for EBCDIC 1047 */ 0x2160, 0x2189, 0x2C00, - 0x2C2F, - 0x2C30, - 0x2C5F, - 0x2C60, 0x2CE5, 0x2CEB, 0x2CEF, @@ -276609,8 +281925,6 @@ static const UV UNI_IDS_invlist[] = { /* for EBCDIC 1047 */ 0x3400, 0x4DC0, 0x4E00, - 0x9FFD, - 0xA000, 0xA48D, 0xA4D0, 0xA4FE, @@ -276631,10 +281945,14 @@ static const UV UNI_IDS_invlist[] = { /* for EBCDIC 1047 */ 0xA722, 0xA789, 0xA78B, - 0xA7C0, - 0xA7C2, 0xA7CB, - 0xA7F5, + 0xA7D0, + 0xA7D2, + 0xA7D3, + 0xA7D4, + 0xA7D5, + 0xA7DA, + 0xA7F2, 0xA802, 0xA803, 0xA806, @@ -276812,12 +282130,34 @@ static const UV UNI_IDS_invlist[] = { /* for EBCDIC 1047 */ 0x10528, 0x10530, 0x10564, + 0x10570, + 0x1057B, + 0x1057C, + 0x1058B, + 0x1058C, + 0x10593, + 0x10594, + 0x10596, + 0x10597, + 0x105A2, + 0x105A3, + 0x105B2, + 0x105B3, + 0x105BA, + 0x105BB, + 0x105BD, 0x10600, 0x10737, 0x10740, 0x10756, 0x10760, 0x10768, + 0x10780, + 0x10786, + 0x10787, + 0x107B1, + 0x107B2, + 0x107BB, 0x10800, 0x10806, 0x10808, @@ -276888,12 +282228,18 @@ static const UV UNI_IDS_invlist[] = { /* for EBCDIC 1047 */ 0x10F28, 0x10F30, 0x10F46, + 0x10F70, + 0x10F82, 0x10FB0, 0x10FC5, 0x10FE0, 0x10FF7, 0x11003, 0x11038, + 0x11071, + 0x11073, + 0x11075, + 0x11076, 0x11083, 0x110B0, 0x110D0, @@ -276976,6 +282322,8 @@ static const UV UNI_IDS_invlist[] = { /* for EBCDIC 1047 */ 0x116B9, 0x11700, 0x1171B, + 0x11740, + 0x11747, 0x11800, 0x1182C, 0x118A0, @@ -277014,7 +282362,7 @@ static const UV UNI_IDS_invlist[] = { /* for EBCDIC 1047 */ 0x11A8A, 0x11A9D, 0x11A9E, - 0x11AC0, + 0x11AB0, 0x11AF9, 0x11C00, 0x11C09, @@ -277050,6 +282398,8 @@ static const UV UNI_IDS_invlist[] = { /* for EBCDIC 1047 */ 0x1246F, 0x12480, 0x12544, + 0x12F90, + 0x12FF1, 0x13000, 0x1342F, 0x14400, @@ -277058,6 +282408,8 @@ static const UV UNI_IDS_invlist[] = { /* for EBCDIC 1047 */ 0x16A39, 0x16A40, 0x16A5F, + 0x16A70, + 0x16ABF, 0x16AD0, 0x16AEE, 0x16B00, @@ -277086,8 +282438,14 @@ static const UV UNI_IDS_invlist[] = { /* for EBCDIC 1047 */ 0x18CD6, 0x18D00, 0x18D09, + 0x1AFF0, + 0x1AFF4, + 0x1AFF5, + 0x1AFFC, + 0x1AFFD, + 0x1AFFF, 0x1B000, - 0x1B11F, + 0x1B123, 0x1B150, 0x1B153, 0x1B164, @@ -277162,14 +282520,26 @@ static const UV UNI_IDS_invlist[] = { /* for EBCDIC 1047 */ 0x1D7C3, 0x1D7C4, 0x1D7CC, + 0x1DF00, + 0x1DF1F, 0x1E100, 0x1E12D, 0x1E137, 0x1E13E, 0x1E14E, 0x1E14F, + 0x1E290, + 0x1E2AE, 0x1E2C0, 0x1E2EC, + 0x1E7E0, + 0x1E7E7, + 0x1E7E8, + 0x1E7EC, + 0x1E7ED, + 0x1E7EF, + 0x1E7F0, + 0x1E7FF, 0x1E800, 0x1E8C5, 0x1E900, @@ -277243,9 +282613,9 @@ static const UV UNI_IDS_invlist[] = { /* for EBCDIC 1047 */ 0x1EEAB, 0x1EEBC, 0x20000, - 0x2A6DE, + 0x2A6E0, 0x2A700, - 0x2B735, + 0x2B739, 0x2B740, 0x2B81E, 0x2B820, @@ -277266,7 +282636,7 @@ static const UV UNI_IDS_invlist[] = { /* for EBCDIC 1047 */ && '$' == 91 && '@' == 124 && '`' == 121 && '\n' == 37 static const UV UNI_IDS_invlist[] = { /* for EBCDIC 037 */ - 1267, /* Number of elements */ + 1319, /* Number of elements */ 148565664, /* Version and data structure type */ 1, /* 0 if the list starts at 0; 1 if it starts at the element beyond 0 */ @@ -277391,10 +282761,12 @@ static const UV UNI_IDS_invlist[] = { /* for EBCDIC 037 */ 0x859, 0x860, 0x86B, + 0x870, + 0x888, + 0x889, + 0x88F, 0x8A0, - 0x8B5, - 0x8B6, - 0x8C8, + 0x8CA, 0x904, 0x93A, 0x93D, @@ -277523,6 +282895,8 @@ static const UV UNI_IDS_invlist[] = { /* for EBCDIC 037 */ 0xC3E, 0xC58, 0xC5B, + 0xC5D, + 0xC5E, 0xC60, 0xC62, 0xC80, @@ -277539,7 +282913,7 @@ static const UV UNI_IDS_invlist[] = { /* for EBCDIC 037 */ 0xCBA, 0xCBD, 0xCBE, - 0xCDE, + 0xCDD, 0xCDF, 0xCE0, 0xCE2, @@ -277682,10 +283056,8 @@ static const UV UNI_IDS_invlist[] = { /* for EBCDIC 037 */ 0x16EE, 0x16F9, 0x1700, - 0x170D, - 0x170E, 0x1712, - 0x1720, + 0x171F, 0x1732, 0x1740, 0x1752, @@ -277726,7 +283098,7 @@ static const UV UNI_IDS_invlist[] = { /* for EBCDIC 037 */ 0x1B05, 0x1B34, 0x1B45, - 0x1B4C, + 0x1B4D, 0x1B83, 0x1BA1, 0x1BAE, @@ -277826,10 +283198,6 @@ static const UV UNI_IDS_invlist[] = { /* for EBCDIC 037 */ 0x2160, 0x2189, 0x2C00, - 0x2C2F, - 0x2C30, - 0x2C5F, - 0x2C60, 0x2CE5, 0x2CEB, 0x2CEF, @@ -277890,8 +283258,6 @@ static const UV UNI_IDS_invlist[] = { /* for EBCDIC 037 */ 0x3400, 0x4DC0, 0x4E00, - 0x9FFD, - 0xA000, 0xA48D, 0xA4D0, 0xA4FE, @@ -277912,10 +283278,14 @@ static const UV UNI_IDS_invlist[] = { /* for EBCDIC 037 */ 0xA722, 0xA789, 0xA78B, - 0xA7C0, - 0xA7C2, 0xA7CB, - 0xA7F5, + 0xA7D0, + 0xA7D2, + 0xA7D3, + 0xA7D4, + 0xA7D5, + 0xA7DA, + 0xA7F2, 0xA802, 0xA803, 0xA806, @@ -278093,12 +283463,34 @@ static const UV UNI_IDS_invlist[] = { /* for EBCDIC 037 */ 0x10528, 0x10530, 0x10564, + 0x10570, + 0x1057B, + 0x1057C, + 0x1058B, + 0x1058C, + 0x10593, + 0x10594, + 0x10596, + 0x10597, + 0x105A2, + 0x105A3, + 0x105B2, + 0x105B3, + 0x105BA, + 0x105BB, + 0x105BD, 0x10600, 0x10737, 0x10740, 0x10756, 0x10760, 0x10768, + 0x10780, + 0x10786, + 0x10787, + 0x107B1, + 0x107B2, + 0x107BB, 0x10800, 0x10806, 0x10808, @@ -278169,12 +283561,18 @@ static const UV UNI_IDS_invlist[] = { /* for EBCDIC 037 */ 0x10F28, 0x10F30, 0x10F46, + 0x10F70, + 0x10F82, 0x10FB0, 0x10FC5, 0x10FE0, 0x10FF7, 0x11003, 0x11038, + 0x11071, + 0x11073, + 0x11075, + 0x11076, 0x11083, 0x110B0, 0x110D0, @@ -278257,6 +283655,8 @@ static const UV UNI_IDS_invlist[] = { /* for EBCDIC 037 */ 0x116B9, 0x11700, 0x1171B, + 0x11740, + 0x11747, 0x11800, 0x1182C, 0x118A0, @@ -278295,7 +283695,7 @@ static const UV UNI_IDS_invlist[] = { /* for EBCDIC 037 */ 0x11A8A, 0x11A9D, 0x11A9E, - 0x11AC0, + 0x11AB0, 0x11AF9, 0x11C00, 0x11C09, @@ -278331,6 +283731,8 @@ static const UV UNI_IDS_invlist[] = { /* for EBCDIC 037 */ 0x1246F, 0x12480, 0x12544, + 0x12F90, + 0x12FF1, 0x13000, 0x1342F, 0x14400, @@ -278339,6 +283741,8 @@ static const UV UNI_IDS_invlist[] = { /* for EBCDIC 037 */ 0x16A39, 0x16A40, 0x16A5F, + 0x16A70, + 0x16ABF, 0x16AD0, 0x16AEE, 0x16B00, @@ -278367,8 +283771,14 @@ static const UV UNI_IDS_invlist[] = { /* for EBCDIC 037 */ 0x18CD6, 0x18D00, 0x18D09, + 0x1AFF0, + 0x1AFF4, + 0x1AFF5, + 0x1AFFC, + 0x1AFFD, + 0x1AFFF, 0x1B000, - 0x1B11F, + 0x1B123, 0x1B150, 0x1B153, 0x1B164, @@ -278443,14 +283853,26 @@ static const UV UNI_IDS_invlist[] = { /* for EBCDIC 037 */ 0x1D7C3, 0x1D7C4, 0x1D7CC, + 0x1DF00, + 0x1DF1F, 0x1E100, 0x1E12D, 0x1E137, 0x1E13E, 0x1E14E, 0x1E14F, + 0x1E290, + 0x1E2AE, 0x1E2C0, 0x1E2EC, + 0x1E7E0, + 0x1E7E7, + 0x1E7E8, + 0x1E7EC, + 0x1E7ED, + 0x1E7EF, + 0x1E7F0, + 0x1E7FF, 0x1E800, 0x1E8C5, 0x1E900, @@ -278524,9 +283946,9 @@ static const UV UNI_IDS_invlist[] = { /* for EBCDIC 037 */ 0x1EEAB, 0x1EEBC, 0x20000, - 0x2A6DE, + 0x2A6E0, 0x2A700, - 0x2B735, + 0x2B739, 0x2B740, 0x2B81E, 0x2B820, @@ -280376,8 +285798,1345 @@ static const UV UNI_IN__10_invlist[] = { /* for all charsets */ 0x1F100, 0x1F10D, 0x1F110, - 0x1F12F, - 0x1F130, + 0x1F12F, + 0x1F130, + 0x1F16C, + 0x1F170, + 0x1F1AD, + 0x1F1E6, + 0x1F203, + 0x1F210, + 0x1F23C, + 0x1F240, + 0x1F249, + 0x1F250, + 0x1F252, + 0x1F260, + 0x1F266, + 0x1F300, + 0x1F6D5, + 0x1F6E0, + 0x1F6ED, + 0x1F6F0, + 0x1F6F9, + 0x1F700, + 0x1F774, + 0x1F780, + 0x1F7D5, + 0x1F800, + 0x1F80C, + 0x1F810, + 0x1F848, + 0x1F850, + 0x1F85A, + 0x1F860, + 0x1F888, + 0x1F890, + 0x1F8AE, + 0x1F900, + 0x1F90C, + 0x1F910, + 0x1F93F, + 0x1F940, + 0x1F94D, + 0x1F950, + 0x1F96C, + 0x1F980, + 0x1F998, + 0x1F9C0, + 0x1F9C1, + 0x1F9D0, + 0x1F9E7, + 0x1FFFE, + 0x2A6D7, + 0x2A700, + 0x2B735, + 0x2B740, + 0x2B81E, + 0x2B820, + 0x2CEA2, + 0x2CEB0, + 0x2EBE1, + 0x2F800, + 0x2FA1E, + 0x2FFFE, + 0x30000, + 0x3FFFE, + 0x40000, + 0x4FFFE, + 0x50000, + 0x5FFFE, + 0x60000, + 0x6FFFE, + 0x70000, + 0x7FFFE, + 0x80000, + 0x8FFFE, + 0x90000, + 0x9FFFE, + 0xA0000, + 0xAFFFE, + 0xB0000, + 0xBFFFE, + 0xC0000, + 0xCFFFE, + 0xD0000, + 0xDFFFE, + 0xE0000, + 0xE0001, + 0xE0002, + 0xE0020, + 0xE0080, + 0xE0100, + 0xE01F0, + 0xEFFFE, + 0x110000 +}; + +static const UV UNI_IN__11_invlist[] = { /* for all charsets */ + 1336, /* Number of elements */ + 148565664, /* Version and data structure type */ + 0, /* 0 if the list starts at 0; + 1 if it starts at the element beyond 0 */ + 0x0, + 0x378, + 0x37A, + 0x380, + 0x384, + 0x38B, + 0x38C, + 0x38D, + 0x38E, + 0x3A2, + 0x3A3, + 0x530, + 0x531, + 0x557, + 0x559, + 0x58B, + 0x58D, + 0x590, + 0x591, + 0x5C8, + 0x5D0, + 0x5EB, + 0x5EF, + 0x5F5, + 0x600, + 0x61D, + 0x61E, + 0x70E, + 0x70F, + 0x74B, + 0x74D, + 0x7B2, + 0x7C0, + 0x7FB, + 0x7FD, + 0x82E, + 0x830, + 0x83F, + 0x840, + 0x85C, + 0x85E, + 0x85F, + 0x860, + 0x86B, + 0x8A0, + 0x8B5, + 0x8B6, + 0x8BE, + 0x8D3, + 0x984, + 0x985, + 0x98D, + 0x98F, + 0x991, + 0x993, + 0x9A9, + 0x9AA, + 0x9B1, + 0x9B2, + 0x9B3, + 0x9B6, + 0x9BA, + 0x9BC, + 0x9C5, + 0x9C7, + 0x9C9, + 0x9CB, + 0x9CF, + 0x9D7, + 0x9D8, + 0x9DC, + 0x9DE, + 0x9DF, + 0x9E4, + 0x9E6, + 0x9FF, + 0xA01, + 0xA04, + 0xA05, + 0xA0B, + 0xA0F, + 0xA11, + 0xA13, + 0xA29, + 0xA2A, + 0xA31, + 0xA32, + 0xA34, + 0xA35, + 0xA37, + 0xA38, + 0xA3A, + 0xA3C, + 0xA3D, + 0xA3E, + 0xA43, + 0xA47, + 0xA49, + 0xA4B, + 0xA4E, + 0xA51, + 0xA52, + 0xA59, + 0xA5D, + 0xA5E, + 0xA5F, + 0xA66, + 0xA77, + 0xA81, + 0xA84, + 0xA85, + 0xA8E, + 0xA8F, + 0xA92, + 0xA93, + 0xAA9, + 0xAAA, + 0xAB1, + 0xAB2, + 0xAB4, + 0xAB5, + 0xABA, + 0xABC, + 0xAC6, + 0xAC7, + 0xACA, + 0xACB, + 0xACE, + 0xAD0, + 0xAD1, + 0xAE0, + 0xAE4, + 0xAE6, + 0xAF2, + 0xAF9, + 0xB00, + 0xB01, + 0xB04, + 0xB05, + 0xB0D, + 0xB0F, + 0xB11, + 0xB13, + 0xB29, + 0xB2A, + 0xB31, + 0xB32, + 0xB34, + 0xB35, + 0xB3A, + 0xB3C, + 0xB45, + 0xB47, + 0xB49, + 0xB4B, + 0xB4E, + 0xB56, + 0xB58, + 0xB5C, + 0xB5E, + 0xB5F, + 0xB64, + 0xB66, + 0xB78, + 0xB82, + 0xB84, + 0xB85, + 0xB8B, + 0xB8E, + 0xB91, + 0xB92, + 0xB96, + 0xB99, + 0xB9B, + 0xB9C, + 0xB9D, + 0xB9E, + 0xBA0, + 0xBA3, + 0xBA5, + 0xBA8, + 0xBAB, + 0xBAE, + 0xBBA, + 0xBBE, + 0xBC3, + 0xBC6, + 0xBC9, + 0xBCA, + 0xBCE, + 0xBD0, + 0xBD1, + 0xBD7, + 0xBD8, + 0xBE6, + 0xBFB, + 0xC00, + 0xC0D, + 0xC0E, + 0xC11, + 0xC12, + 0xC29, + 0xC2A, + 0xC3A, + 0xC3D, + 0xC45, + 0xC46, + 0xC49, + 0xC4A, + 0xC4E, + 0xC55, + 0xC57, + 0xC58, + 0xC5B, + 0xC60, + 0xC64, + 0xC66, + 0xC70, + 0xC78, + 0xC8D, + 0xC8E, + 0xC91, + 0xC92, + 0xCA9, + 0xCAA, + 0xCB4, + 0xCB5, + 0xCBA, + 0xCBC, + 0xCC5, + 0xCC6, + 0xCC9, + 0xCCA, + 0xCCE, + 0xCD5, + 0xCD7, + 0xCDE, + 0xCDF, + 0xCE0, + 0xCE4, + 0xCE6, + 0xCF0, + 0xCF1, + 0xCF3, + 0xD00, + 0xD04, + 0xD05, + 0xD0D, + 0xD0E, + 0xD11, + 0xD12, + 0xD45, + 0xD46, + 0xD49, + 0xD4A, + 0xD50, + 0xD54, + 0xD64, + 0xD66, + 0xD80, + 0xD82, + 0xD84, + 0xD85, + 0xD97, + 0xD9A, + 0xDB2, + 0xDB3, + 0xDBC, + 0xDBD, + 0xDBE, + 0xDC0, + 0xDC7, + 0xDCA, + 0xDCB, + 0xDCF, + 0xDD5, + 0xDD6, + 0xDD7, + 0xDD8, + 0xDE0, + 0xDE6, + 0xDF0, + 0xDF2, + 0xDF5, + 0xE01, + 0xE3B, + 0xE3F, + 0xE5C, + 0xE81, + 0xE83, + 0xE84, + 0xE85, + 0xE87, + 0xE89, + 0xE8A, + 0xE8B, + 0xE8D, + 0xE8E, + 0xE94, + 0xE98, + 0xE99, + 0xEA0, + 0xEA1, + 0xEA4, + 0xEA5, + 0xEA6, + 0xEA7, + 0xEA8, + 0xEAA, + 0xEAC, + 0xEAD, + 0xEBA, + 0xEBB, + 0xEBE, + 0xEC0, + 0xEC5, + 0xEC6, + 0xEC7, + 0xEC8, + 0xECE, + 0xED0, + 0xEDA, + 0xEDC, + 0xEE0, + 0xF00, + 0xF48, + 0xF49, + 0xF6D, + 0xF71, + 0xF98, + 0xF99, + 0xFBD, + 0xFBE, + 0xFCD, + 0xFCE, + 0xFDB, + 0x1000, + 0x10C6, + 0x10C7, + 0x10C8, + 0x10CD, + 0x10CE, + 0x10D0, + 0x1249, + 0x124A, + 0x124E, + 0x1250, + 0x1257, + 0x1258, + 0x1259, + 0x125A, + 0x125E, + 0x1260, + 0x1289, + 0x128A, + 0x128E, + 0x1290, + 0x12B1, + 0x12B2, + 0x12B6, + 0x12B8, + 0x12BF, + 0x12C0, + 0x12C1, + 0x12C2, + 0x12C6, + 0x12C8, + 0x12D7, + 0x12D8, + 0x1311, + 0x1312, + 0x1316, + 0x1318, + 0x135B, + 0x135D, + 0x137D, + 0x1380, + 0x139A, + 0x13A0, + 0x13F6, + 0x13F8, + 0x13FE, + 0x1400, + 0x169D, + 0x16A0, + 0x16F9, + 0x1700, + 0x170D, + 0x170E, + 0x1715, + 0x1720, + 0x1737, + 0x1740, + 0x1754, + 0x1760, + 0x176D, + 0x176E, + 0x1771, + 0x1772, + 0x1774, + 0x1780, + 0x17DE, + 0x17E0, + 0x17EA, + 0x17F0, + 0x17FA, + 0x1800, + 0x180F, + 0x1810, + 0x181A, + 0x1820, + 0x1879, + 0x1880, + 0x18AB, + 0x18B0, + 0x18F6, + 0x1900, + 0x191F, + 0x1920, + 0x192C, + 0x1930, + 0x193C, + 0x1940, + 0x1941, + 0x1944, + 0x196E, + 0x1970, + 0x1975, + 0x1980, + 0x19AC, + 0x19B0, + 0x19CA, + 0x19D0, + 0x19DB, + 0x19DE, + 0x1A1C, + 0x1A1E, + 0x1A5F, + 0x1A60, + 0x1A7D, + 0x1A7F, + 0x1A8A, + 0x1A90, + 0x1A9A, + 0x1AA0, + 0x1AAE, + 0x1AB0, + 0x1ABF, + 0x1B00, + 0x1B4C, + 0x1B50, + 0x1B7D, + 0x1B80, + 0x1BF4, + 0x1BFC, + 0x1C38, + 0x1C3B, + 0x1C4A, + 0x1C4D, + 0x1C89, + 0x1C90, + 0x1CBB, + 0x1CBD, + 0x1CC8, + 0x1CD0, + 0x1CFA, + 0x1D00, + 0x1DFA, + 0x1DFB, + 0x1F16, + 0x1F18, + 0x1F1E, + 0x1F20, + 0x1F46, + 0x1F48, + 0x1F4E, + 0x1F50, + 0x1F58, + 0x1F59, + 0x1F5A, + 0x1F5B, + 0x1F5C, + 0x1F5D, + 0x1F5E, + 0x1F5F, + 0x1F7E, + 0x1F80, + 0x1FB5, + 0x1FB6, + 0x1FC5, + 0x1FC6, + 0x1FD4, + 0x1FD6, + 0x1FDC, + 0x1FDD, + 0x1FF0, + 0x1FF2, + 0x1FF5, + 0x1FF6, + 0x1FFF, + 0x2000, + 0x2065, + 0x2066, + 0x2072, + 0x2074, + 0x208F, + 0x2090, + 0x209D, + 0x20A0, + 0x20C0, + 0x20D0, + 0x20F1, + 0x2100, + 0x218C, + 0x2190, + 0x2427, + 0x2440, + 0x244B, + 0x2460, + 0x2B74, + 0x2B76, + 0x2B96, + 0x2B98, + 0x2BC9, + 0x2BCA, + 0x2BFF, + 0x2C00, + 0x2C2F, + 0x2C30, + 0x2C5F, + 0x2C60, + 0x2CF4, + 0x2CF9, + 0x2D26, + 0x2D27, + 0x2D28, + 0x2D2D, + 0x2D2E, + 0x2D30, + 0x2D68, + 0x2D6F, + 0x2D71, + 0x2D7F, + 0x2D97, + 0x2DA0, + 0x2DA7, + 0x2DA8, + 0x2DAF, + 0x2DB0, + 0x2DB7, + 0x2DB8, + 0x2DBF, + 0x2DC0, + 0x2DC7, + 0x2DC8, + 0x2DCF, + 0x2DD0, + 0x2DD7, + 0x2DD8, + 0x2DDF, + 0x2DE0, + 0x2E4F, + 0x2E80, + 0x2E9A, + 0x2E9B, + 0x2EF4, + 0x2F00, + 0x2FD6, + 0x2FF0, + 0x2FFC, + 0x3000, + 0x3040, + 0x3041, + 0x3097, + 0x3099, + 0x3100, + 0x3105, + 0x3130, + 0x3131, + 0x318F, + 0x3190, + 0x31BB, + 0x31C0, + 0x31E4, + 0x31F0, + 0x321F, + 0x3220, + 0x32FF, + 0x3300, + 0x4DB6, + 0x4DC0, + 0x9FF0, + 0xA000, + 0xA48D, + 0xA490, + 0xA4C7, + 0xA4D0, + 0xA62C, + 0xA640, + 0xA6F8, + 0xA700, + 0xA7BA, + 0xA7F7, + 0xA82C, + 0xA830, + 0xA83A, + 0xA840, + 0xA878, + 0xA880, + 0xA8C6, + 0xA8CE, + 0xA8DA, + 0xA8E0, + 0xA954, + 0xA95F, + 0xA97D, + 0xA980, + 0xA9CE, + 0xA9CF, + 0xA9DA, + 0xA9DE, + 0xA9FF, + 0xAA00, + 0xAA37, + 0xAA40, + 0xAA4E, + 0xAA50, + 0xAA5A, + 0xAA5C, + 0xAAC3, + 0xAADB, + 0xAAF7, + 0xAB01, + 0xAB07, + 0xAB09, + 0xAB0F, + 0xAB11, + 0xAB17, + 0xAB20, + 0xAB27, + 0xAB28, + 0xAB2F, + 0xAB30, + 0xAB66, + 0xAB70, + 0xABEE, + 0xABF0, + 0xABFA, + 0xAC00, + 0xD7A4, + 0xD7B0, + 0xD7C7, + 0xD7CB, + 0xD7FC, + 0xD800, + 0xFA6E, + 0xFA70, + 0xFADA, + 0xFB00, + 0xFB07, + 0xFB13, + 0xFB18, + 0xFB1D, + 0xFB37, + 0xFB38, + 0xFB3D, + 0xFB3E, + 0xFB3F, + 0xFB40, + 0xFB42, + 0xFB43, + 0xFB45, + 0xFB46, + 0xFBC2, + 0xFBD3, + 0xFD40, + 0xFD50, + 0xFD90, + 0xFD92, + 0xFDC8, + 0xFDD0, + 0xFDFE, + 0xFE00, + 0xFE1A, + 0xFE20, + 0xFE53, + 0xFE54, + 0xFE67, + 0xFE68, + 0xFE6C, + 0xFE70, + 0xFE75, + 0xFE76, + 0xFEFD, + 0xFEFF, + 0xFF00, + 0xFF01, + 0xFFBF, + 0xFFC2, + 0xFFC8, + 0xFFCA, + 0xFFD0, + 0xFFD2, + 0xFFD8, + 0xFFDA, + 0xFFDD, + 0xFFE0, + 0xFFE7, + 0xFFE8, + 0xFFEF, + 0xFFF9, + 0x1000C, + 0x1000D, + 0x10027, + 0x10028, + 0x1003B, + 0x1003C, + 0x1003E, + 0x1003F, + 0x1004E, + 0x10050, + 0x1005E, + 0x10080, + 0x100FB, + 0x10100, + 0x10103, + 0x10107, + 0x10134, + 0x10137, + 0x1018F, + 0x10190, + 0x1019C, + 0x101A0, + 0x101A1, + 0x101D0, + 0x101FE, + 0x10280, + 0x1029D, + 0x102A0, + 0x102D1, + 0x102E0, + 0x102FC, + 0x10300, + 0x10324, + 0x1032D, + 0x1034B, + 0x10350, + 0x1037B, + 0x10380, + 0x1039E, + 0x1039F, + 0x103C4, + 0x103C8, + 0x103D6, + 0x10400, + 0x1049E, + 0x104A0, + 0x104AA, + 0x104B0, + 0x104D4, + 0x104D8, + 0x104FC, + 0x10500, + 0x10528, + 0x10530, + 0x10564, + 0x1056F, + 0x10570, + 0x10600, + 0x10737, + 0x10740, + 0x10756, + 0x10760, + 0x10768, + 0x10800, + 0x10806, + 0x10808, + 0x10809, + 0x1080A, + 0x10836, + 0x10837, + 0x10839, + 0x1083C, + 0x1083D, + 0x1083F, + 0x10856, + 0x10857, + 0x1089F, + 0x108A7, + 0x108B0, + 0x108E0, + 0x108F3, + 0x108F4, + 0x108F6, + 0x108FB, + 0x1091C, + 0x1091F, + 0x1093A, + 0x1093F, + 0x10940, + 0x10980, + 0x109B8, + 0x109BC, + 0x109D0, + 0x109D2, + 0x10A04, + 0x10A05, + 0x10A07, + 0x10A0C, + 0x10A14, + 0x10A15, + 0x10A18, + 0x10A19, + 0x10A36, + 0x10A38, + 0x10A3B, + 0x10A3F, + 0x10A49, + 0x10A50, + 0x10A59, + 0x10A60, + 0x10AA0, + 0x10AC0, + 0x10AE7, + 0x10AEB, + 0x10AF7, + 0x10B00, + 0x10B36, + 0x10B39, + 0x10B56, + 0x10B58, + 0x10B73, + 0x10B78, + 0x10B92, + 0x10B99, + 0x10B9D, + 0x10BA9, + 0x10BB0, + 0x10C00, + 0x10C49, + 0x10C80, + 0x10CB3, + 0x10CC0, + 0x10CF3, + 0x10CFA, + 0x10D28, + 0x10D30, + 0x10D3A, + 0x10E60, + 0x10E7F, + 0x10F00, + 0x10F28, + 0x10F30, + 0x10F5A, + 0x11000, + 0x1104E, + 0x11052, + 0x11070, + 0x1107F, + 0x110C2, + 0x110CD, + 0x110CE, + 0x110D0, + 0x110E9, + 0x110F0, + 0x110FA, + 0x11100, + 0x11135, + 0x11136, + 0x11147, + 0x11150, + 0x11177, + 0x11180, + 0x111CE, + 0x111D0, + 0x111E0, + 0x111E1, + 0x111F5, + 0x11200, + 0x11212, + 0x11213, + 0x1123F, + 0x11280, + 0x11287, + 0x11288, + 0x11289, + 0x1128A, + 0x1128E, + 0x1128F, + 0x1129E, + 0x1129F, + 0x112AA, + 0x112B0, + 0x112EB, + 0x112F0, + 0x112FA, + 0x11300, + 0x11304, + 0x11305, + 0x1130D, + 0x1130F, + 0x11311, + 0x11313, + 0x11329, + 0x1132A, + 0x11331, + 0x11332, + 0x11334, + 0x11335, + 0x1133A, + 0x1133B, + 0x11345, + 0x11347, + 0x11349, + 0x1134B, + 0x1134E, + 0x11350, + 0x11351, + 0x11357, + 0x11358, + 0x1135D, + 0x11364, + 0x11366, + 0x1136D, + 0x11370, + 0x11375, + 0x11400, + 0x1145A, + 0x1145B, + 0x1145C, + 0x1145D, + 0x1145F, + 0x11480, + 0x114C8, + 0x114D0, + 0x114DA, + 0x11580, + 0x115B6, + 0x115B8, + 0x115DE, + 0x11600, + 0x11645, + 0x11650, + 0x1165A, + 0x11660, + 0x1166D, + 0x11680, + 0x116B8, + 0x116C0, + 0x116CA, + 0x11700, + 0x1171B, + 0x1171D, + 0x1172C, + 0x11730, + 0x11740, + 0x11800, + 0x1183C, + 0x118A0, + 0x118F3, + 0x118FF, + 0x11900, + 0x11A00, + 0x11A48, + 0x11A50, + 0x11A84, + 0x11A86, + 0x11AA3, + 0x11AC0, + 0x11AF9, + 0x11C00, + 0x11C09, + 0x11C0A, + 0x11C37, + 0x11C38, + 0x11C46, + 0x11C50, + 0x11C6D, + 0x11C70, + 0x11C90, + 0x11C92, + 0x11CA8, + 0x11CA9, + 0x11CB7, + 0x11D00, + 0x11D07, + 0x11D08, + 0x11D0A, + 0x11D0B, + 0x11D37, + 0x11D3A, + 0x11D3B, + 0x11D3C, + 0x11D3E, + 0x11D3F, + 0x11D48, + 0x11D50, + 0x11D5A, + 0x11D60, + 0x11D66, + 0x11D67, + 0x11D69, + 0x11D6A, + 0x11D8F, + 0x11D90, + 0x11D92, + 0x11D93, + 0x11D99, + 0x11DA0, + 0x11DAA, + 0x11EE0, + 0x11EF9, + 0x12000, + 0x1239A, + 0x12400, + 0x1246F, + 0x12470, + 0x12475, + 0x12480, + 0x12544, + 0x13000, + 0x1342F, + 0x14400, + 0x14647, + 0x16800, + 0x16A39, + 0x16A40, + 0x16A5F, + 0x16A60, + 0x16A6A, + 0x16A6E, + 0x16A70, + 0x16AD0, + 0x16AEE, + 0x16AF0, + 0x16AF6, + 0x16B00, + 0x16B46, + 0x16B50, + 0x16B5A, + 0x16B5B, + 0x16B62, + 0x16B63, + 0x16B78, + 0x16B7D, + 0x16B90, + 0x16E40, + 0x16E9B, + 0x16F00, + 0x16F45, + 0x16F50, + 0x16F7F, + 0x16F8F, + 0x16FA0, + 0x16FE0, + 0x16FE2, + 0x17000, + 0x187F2, + 0x18800, + 0x18AF3, + 0x1B000, + 0x1B11F, + 0x1B170, + 0x1B2FC, + 0x1BC00, + 0x1BC6B, + 0x1BC70, + 0x1BC7D, + 0x1BC80, + 0x1BC89, + 0x1BC90, + 0x1BC9A, + 0x1BC9C, + 0x1BCA4, + 0x1D000, + 0x1D0F6, + 0x1D100, + 0x1D127, + 0x1D129, + 0x1D1E9, + 0x1D200, + 0x1D246, + 0x1D2E0, + 0x1D2F4, + 0x1D300, + 0x1D357, + 0x1D360, + 0x1D379, + 0x1D400, + 0x1D455, + 0x1D456, + 0x1D49D, + 0x1D49E, + 0x1D4A0, + 0x1D4A2, + 0x1D4A3, + 0x1D4A5, + 0x1D4A7, + 0x1D4A9, + 0x1D4AD, + 0x1D4AE, + 0x1D4BA, + 0x1D4BB, + 0x1D4BC, + 0x1D4BD, + 0x1D4C4, + 0x1D4C5, + 0x1D506, + 0x1D507, + 0x1D50B, + 0x1D50D, + 0x1D515, + 0x1D516, + 0x1D51D, + 0x1D51E, + 0x1D53A, + 0x1D53B, + 0x1D53F, + 0x1D540, + 0x1D545, + 0x1D546, + 0x1D547, + 0x1D54A, + 0x1D551, + 0x1D552, + 0x1D6A6, + 0x1D6A8, + 0x1D7CC, + 0x1D7CE, + 0x1DA8C, + 0x1DA9B, + 0x1DAA0, + 0x1DAA1, + 0x1DAB0, + 0x1E000, + 0x1E007, + 0x1E008, + 0x1E019, + 0x1E01B, + 0x1E022, + 0x1E023, + 0x1E025, + 0x1E026, + 0x1E02B, + 0x1E800, + 0x1E8C5, + 0x1E8C7, + 0x1E8D7, + 0x1E900, + 0x1E94B, + 0x1E950, + 0x1E95A, + 0x1E95E, + 0x1E960, + 0x1EC71, + 0x1ECB5, + 0x1EE00, + 0x1EE04, + 0x1EE05, + 0x1EE20, + 0x1EE21, + 0x1EE23, + 0x1EE24, + 0x1EE25, + 0x1EE27, + 0x1EE28, + 0x1EE29, + 0x1EE33, + 0x1EE34, + 0x1EE38, + 0x1EE39, + 0x1EE3A, + 0x1EE3B, + 0x1EE3C, + 0x1EE42, + 0x1EE43, + 0x1EE47, + 0x1EE48, + 0x1EE49, + 0x1EE4A, + 0x1EE4B, + 0x1EE4C, + 0x1EE4D, + 0x1EE50, + 0x1EE51, + 0x1EE53, + 0x1EE54, + 0x1EE55, + 0x1EE57, + 0x1EE58, + 0x1EE59, + 0x1EE5A, + 0x1EE5B, + 0x1EE5C, + 0x1EE5D, + 0x1EE5E, + 0x1EE5F, + 0x1EE60, + 0x1EE61, + 0x1EE63, + 0x1EE64, + 0x1EE65, + 0x1EE67, + 0x1EE6B, + 0x1EE6C, + 0x1EE73, + 0x1EE74, + 0x1EE78, + 0x1EE79, + 0x1EE7D, + 0x1EE7E, + 0x1EE7F, + 0x1EE80, + 0x1EE8A, + 0x1EE8B, + 0x1EE9C, + 0x1EEA1, + 0x1EEA4, + 0x1EEA5, + 0x1EEAA, + 0x1EEAB, + 0x1EEBC, + 0x1EEF0, + 0x1EEF2, + 0x1F000, + 0x1F02C, + 0x1F030, + 0x1F094, + 0x1F0A0, + 0x1F0AF, + 0x1F0B1, + 0x1F0C0, + 0x1F0C1, + 0x1F0D0, + 0x1F0D1, + 0x1F0F6, + 0x1F100, + 0x1F10D, + 0x1F110, 0x1F16C, 0x1F170, 0x1F1AD, @@ -280396,11 +287155,11 @@ static const UV UNI_IN__10_invlist[] = { /* for all charsets */ 0x1F6E0, 0x1F6ED, 0x1F6F0, - 0x1F6F9, + 0x1F6FA, 0x1F700, 0x1F774, 0x1F780, - 0x1F7D5, + 0x1F7D9, 0x1F800, 0x1F80C, 0x1F810, @@ -280416,15 +287175,21 @@ static const UV UNI_IN__10_invlist[] = { /* for all charsets */ 0x1F910, 0x1F93F, 0x1F940, - 0x1F94D, - 0x1F950, - 0x1F96C, - 0x1F980, - 0x1F998, + 0x1F971, + 0x1F973, + 0x1F977, + 0x1F97A, + 0x1F97B, + 0x1F97C, + 0x1F9A3, + 0x1F9B0, + 0x1F9BA, 0x1F9C0, - 0x1F9C1, + 0x1F9C3, 0x1F9D0, - 0x1F9E7, + 0x1FA00, + 0x1FA60, + 0x1FA6E, 0x1FFFE, 0x2A6D7, 0x2A700, @@ -280471,8 +287236,8 @@ static const UV UNI_IN__10_invlist[] = { /* for all charsets */ 0x110000 }; -static const UV UNI_IN__11_invlist[] = { /* for all charsets */ - 1336, /* Number of elements */ +static const UV UNI_IN__12_invlist[] = { /* for all charsets */ + 1354, /* Number of elements */ 148565664, /* Version and data structure type */ 0, /* 0 if the list starts at 0; 1 if it starts at the element beyond 0 */ @@ -280694,7 +287459,7 @@ static const UV UNI_IN__11_invlist[] = { /* for all charsets */ 0xC64, 0xC66, 0xC70, - 0xC78, + 0xC77, 0xC8D, 0xC8E, 0xC91, @@ -280768,27 +287533,13 @@ static const UV UNI_IN__11_invlist[] = { /* for all charsets */ 0xE83, 0xE84, 0xE85, - 0xE87, - 0xE89, - 0xE8A, + 0xE86, 0xE8B, - 0xE8D, - 0xE8E, - 0xE94, - 0xE98, - 0xE99, - 0xEA0, - 0xEA1, + 0xE8C, 0xEA4, 0xEA5, 0xEA6, 0xEA7, - 0xEA8, - 0xEAA, - 0xEAC, - 0xEAD, - 0xEBA, - 0xEBB, 0xEBE, 0xEC0, 0xEC5, @@ -280941,7 +287692,7 @@ static const UV UNI_IN__11_invlist[] = { /* for all charsets */ 0x1CBD, 0x1CC8, 0x1CD0, - 0x1CFA, + 0x1CFB, 0x1D00, 0x1DFA, 0x1DFB, @@ -280999,10 +287750,6 @@ static const UV UNI_IN__11_invlist[] = { /* for all charsets */ 0x2B76, 0x2B96, 0x2B98, - 0x2BC9, - 0x2BCA, - 0x2BFF, - 0x2C00, 0x2C2F, 0x2C30, 0x2C5F, @@ -281037,7 +287784,7 @@ static const UV UNI_IN__11_invlist[] = { /* for all charsets */ 0x2DD8, 0x2DDF, 0x2DE0, - 0x2E4F, + 0x2E50, 0x2E80, 0x2E9A, 0x2E9B, @@ -281077,7 +287824,9 @@ static const UV UNI_IN__11_invlist[] = { /* for all charsets */ 0xA640, 0xA6F8, 0xA700, - 0xA7BA, + 0xA7C0, + 0xA7C2, + 0xA7C7, 0xA7F7, 0xA82C, 0xA830, @@ -281119,7 +287868,7 @@ static const UV UNI_IN__11_invlist[] = { /* for all charsets */ 0xAB28, 0xAB2F, 0xAB30, - 0xAB66, + 0xAB68, 0xAB70, 0xABEE, 0xABF0, @@ -281330,6 +288079,8 @@ static const UV UNI_IN__11_invlist[] = { /* for all charsets */ 0x10F28, 0x10F30, 0x10F5A, + 0x10FE0, + 0x10FF7, 0x11000, 0x1104E, 0x11052, @@ -281407,7 +288158,7 @@ static const UV UNI_IN__11_invlist[] = { /* for all charsets */ 0x1145B, 0x1145C, 0x1145D, - 0x1145F, + 0x11460, 0x11480, 0x114C8, 0x114D0, @@ -281423,7 +288174,7 @@ static const UV UNI_IN__11_invlist[] = { /* for all charsets */ 0x11660, 0x1166D, 0x11680, - 0x116B8, + 0x116B9, 0x116C0, 0x116CA, 0x11700, @@ -281438,11 +288189,15 @@ static const UV UNI_IN__11_invlist[] = { /* for all charsets */ 0x118F3, 0x118FF, 0x11900, + 0x119A0, + 0x119A8, + 0x119AA, + 0x119D8, + 0x119DA, + 0x119E5, 0x11A00, 0x11A48, 0x11A50, - 0x11A84, - 0x11A86, 0x11AA3, 0x11AC0, 0x11AF9, @@ -281488,7 +288243,9 @@ static const UV UNI_IN__11_invlist[] = { /* for all charsets */ 0x11DAA, 0x11EE0, 0x11EF9, - 0x12000, + 0x11FC0, + 0x11FF2, + 0x11FFF, 0x1239A, 0x12400, 0x1246F, @@ -281498,6 +288255,8 @@ static const UV UNI_IN__11_invlist[] = { /* for all charsets */ 0x12544, 0x13000, 0x1342F, + 0x13430, + 0x13439, 0x14400, 0x14647, 0x16800, @@ -281525,19 +288284,23 @@ static const UV UNI_IN__11_invlist[] = { /* for all charsets */ 0x16E40, 0x16E9B, 0x16F00, - 0x16F45, - 0x16F50, - 0x16F7F, + 0x16F4B, + 0x16F4F, + 0x16F88, 0x16F8F, 0x16FA0, 0x16FE0, - 0x16FE2, + 0x16FE4, 0x17000, - 0x187F2, + 0x187F8, 0x18800, 0x18AF3, 0x1B000, 0x1B11F, + 0x1B150, + 0x1B153, + 0x1B164, + 0x1B168, 0x1B170, 0x1B2FC, 0x1BC00, @@ -281620,18 +288383,32 @@ static const UV UNI_IN__11_invlist[] = { /* for all charsets */ 0x1E025, 0x1E026, 0x1E02B, + 0x1E100, + 0x1E12D, + 0x1E130, + 0x1E13E, + 0x1E140, + 0x1E14A, + 0x1E14E, + 0x1E150, + 0x1E2C0, + 0x1E2FA, + 0x1E2FF, + 0x1E300, 0x1E800, 0x1E8C5, 0x1E8C7, 0x1E8D7, 0x1E900, - 0x1E94B, + 0x1E94C, 0x1E950, 0x1E95A, 0x1E95E, 0x1E960, 0x1EC71, 0x1ECB5, + 0x1ED01, + 0x1ED3E, 0x1EE00, 0x1EE04, 0x1EE05, @@ -281715,7 +288492,7 @@ static const UV UNI_IN__11_invlist[] = { /* for all charsets */ 0x1F100, 0x1F10D, 0x1F110, - 0x1F16C, + 0x1F16D, 0x1F170, 0x1F1AD, 0x1F1E6, @@ -281729,15 +288506,17 @@ static const UV UNI_IN__11_invlist[] = { /* for all charsets */ 0x1F260, 0x1F266, 0x1F300, - 0x1F6D5, + 0x1F6D6, 0x1F6E0, 0x1F6ED, 0x1F6F0, - 0x1F6FA, + 0x1F6FB, 0x1F700, 0x1F774, 0x1F780, 0x1F7D9, + 0x1F7E0, + 0x1F7EC, 0x1F800, 0x1F80C, 0x1F810, @@ -281750,24 +288529,28 @@ static const UV UNI_IN__11_invlist[] = { /* for all charsets */ 0x1F8AE, 0x1F900, 0x1F90C, - 0x1F910, - 0x1F93F, - 0x1F940, - 0x1F971, + 0x1F90D, + 0x1F972, 0x1F973, 0x1F977, 0x1F97A, - 0x1F97B, - 0x1F97C, 0x1F9A3, - 0x1F9B0, - 0x1F9BA, - 0x1F9C0, - 0x1F9C3, - 0x1F9D0, - 0x1FA00, + 0x1F9A5, + 0x1F9AB, + 0x1F9AE, + 0x1F9CB, + 0x1F9CD, + 0x1FA54, 0x1FA60, 0x1FA6E, + 0x1FA70, + 0x1FA74, + 0x1FA78, + 0x1FA7B, + 0x1FA80, + 0x1FA83, + 0x1FA90, + 0x1FA96, 0x1FFFE, 0x2A6D7, 0x2A700, @@ -281814,8 +288597,8 @@ static const UV UNI_IN__11_invlist[] = { /* for all charsets */ 0x110000 }; -static const UV UNI_IN__12_invlist[] = { /* for all charsets */ - 1354, /* Number of elements */ +static const UV UNI_IN__12_DOT_1_invlist[] = { /* for all charsets */ + 1352, /* Number of elements */ 148565664, /* Version and data structure type */ 0, /* 0 if the list starts at 0; 1 if it starts at the element beyond 0 */ @@ -282388,8 +289171,6 @@ static const UV UNI_IN__12_invlist[] = { /* for all charsets */ 0x31F0, 0x321F, 0x3220, - 0x32FF, - 0x3300, 0x4DB6, 0x4DC0, 0x9FF0, @@ -283175,8 +289956,8 @@ static const UV UNI_IN__12_invlist[] = { /* for all charsets */ 0x110000 }; -static const UV UNI_IN__12_DOT_1_invlist[] = { /* for all charsets */ - 1352, /* Number of elements */ +static const UV UNI_IN__13_invlist[] = { /* for all charsets */ + 1372, /* Number of elements */ 148565664, /* Version and data structure type */ 0, /* 0 if the list starts at 0; 1 if it starts at the element beyond 0 */ @@ -283227,7 +290008,7 @@ static const UV UNI_IN__12_DOT_1_invlist[] = { /* for all charsets */ 0x8A0, 0x8B5, 0x8B6, - 0x8BE, + 0x8C8, 0x8D3, 0x984, 0x985, @@ -283336,7 +290117,7 @@ static const UV UNI_IN__12_DOT_1_invlist[] = { /* for all charsets */ 0xB49, 0xB4B, 0xB4E, - 0xB56, + 0xB55, 0xB58, 0xB5C, 0xB5E, @@ -283425,8 +290206,6 @@ static const UV UNI_IN__12_DOT_1_invlist[] = { /* for all charsets */ 0xCF1, 0xCF3, 0xD00, - 0xD04, - 0xD05, 0xD0D, 0xD0E, 0xD11, @@ -283440,7 +290219,7 @@ static const UV UNI_IN__12_DOT_1_invlist[] = { /* for all charsets */ 0xD64, 0xD66, 0xD80, - 0xD82, + 0xD81, 0xD84, 0xD85, 0xD97, @@ -283613,7 +290392,7 @@ static const UV UNI_IN__12_DOT_1_invlist[] = { /* for all charsets */ 0x1AA0, 0x1AAE, 0x1AB0, - 0x1ABF, + 0x1AC1, 0x1B00, 0x1B4C, 0x1B50, @@ -283688,7 +290467,7 @@ static const UV UNI_IN__12_DOT_1_invlist[] = { /* for all charsets */ 0x2B74, 0x2B76, 0x2B96, - 0x2B98, + 0x2B97, 0x2C2F, 0x2C30, 0x2C5F, @@ -283723,7 +290502,7 @@ static const UV UNI_IN__12_DOT_1_invlist[] = { /* for all charsets */ 0x2DD8, 0x2DDF, 0x2DE0, - 0x2E50, + 0x2E53, 0x2E80, 0x2E9A, 0x2E9B, @@ -283743,15 +290522,11 @@ static const UV UNI_IN__12_DOT_1_invlist[] = { /* for all charsets */ 0x3131, 0x318F, 0x3190, - 0x31BB, - 0x31C0, 0x31E4, 0x31F0, 0x321F, 0x3220, - 0x4DB6, - 0x4DC0, - 0x9FF0, + 0x9FFD, 0xA000, 0xA48D, 0xA490, @@ -283763,9 +290538,9 @@ static const UV UNI_IN__12_DOT_1_invlist[] = { /* for all charsets */ 0xA700, 0xA7C0, 0xA7C2, - 0xA7C7, - 0xA7F7, - 0xA82C, + 0xA7CB, + 0xA7F5, + 0xA82D, 0xA830, 0xA83A, 0xA840, @@ -283805,7 +290580,7 @@ static const UV UNI_IN__12_DOT_1_invlist[] = { /* for all charsets */ 0xAB28, 0xAB2F, 0xAB30, - 0xAB68, + 0xAB6C, 0xAB70, 0xABEE, 0xABF0, @@ -283893,7 +290668,7 @@ static const UV UNI_IN__12_DOT_1_invlist[] = { /* for all charsets */ 0x10137, 0x1018F, 0x10190, - 0x1019C, + 0x1019D, 0x101A0, 0x101A1, 0x101D0, @@ -284012,10 +290787,18 @@ static const UV UNI_IN__12_DOT_1_invlist[] = { /* for all charsets */ 0x10D3A, 0x10E60, 0x10E7F, + 0x10E80, + 0x10EAA, + 0x10EAB, + 0x10EAE, + 0x10EB0, + 0x10EB2, 0x10F00, 0x10F28, 0x10F30, 0x10F5A, + 0x10FB0, + 0x10FCC, 0x10FE0, 0x10FF7, 0x11000, @@ -284033,12 +290816,10 @@ static const UV UNI_IN__12_DOT_1_invlist[] = { /* for all charsets */ 0x11100, 0x11135, 0x11136, - 0x11147, + 0x11148, 0x11150, 0x11177, 0x11180, - 0x111CE, - 0x111D0, 0x111E0, 0x111E1, 0x111F5, @@ -284091,11 +290872,9 @@ static const UV UNI_IN__12_DOT_1_invlist[] = { /* for all charsets */ 0x11370, 0x11375, 0x11400, - 0x1145A, - 0x1145B, 0x1145C, 0x1145D, - 0x11460, + 0x11462, 0x11480, 0x114C8, 0x114D0, @@ -284125,7 +290904,21 @@ static const UV UNI_IN__12_DOT_1_invlist[] = { /* for all charsets */ 0x118A0, 0x118F3, 0x118FF, - 0x11900, + 0x11907, + 0x11909, + 0x1190A, + 0x1190C, + 0x11914, + 0x11915, + 0x11917, + 0x11918, + 0x11936, + 0x11937, + 0x11939, + 0x1193B, + 0x11947, + 0x11950, + 0x1195A, 0x119A0, 0x119A8, 0x119AA, @@ -284180,6 +290973,8 @@ static const UV UNI_IN__12_DOT_1_invlist[] = { /* for all charsets */ 0x11DAA, 0x11EE0, 0x11EF9, + 0x11FB0, + 0x11FB1, 0x11FC0, 0x11FF2, 0x11FFF, @@ -284227,11 +291022,15 @@ static const UV UNI_IN__12_DOT_1_invlist[] = { /* for all charsets */ 0x16F8F, 0x16FA0, 0x16FE0, - 0x16FE4, + 0x16FE5, + 0x16FF0, + 0x16FF2, 0x17000, 0x187F8, 0x18800, - 0x18AF3, + 0x18CD6, + 0x18D00, + 0x18D09, 0x1B000, 0x1B11F, 0x1B150, @@ -284427,11 +291226,7 @@ static const UV UNI_IN__12_DOT_1_invlist[] = { /* for all charsets */ 0x1F0D1, 0x1F0F6, 0x1F100, - 0x1F10D, - 0x1F110, - 0x1F16D, - 0x1F170, - 0x1F1AD, + 0x1F1AE, 0x1F1E6, 0x1F203, 0x1F210, @@ -284443,11 +291238,11 @@ static const UV UNI_IN__12_DOT_1_invlist[] = { /* for all charsets */ 0x1F260, 0x1F266, 0x1F300, - 0x1F6D6, + 0x1F6D8, 0x1F6E0, 0x1F6ED, 0x1F6F0, - 0x1F6FB, + 0x1F6FD, 0x1F700, 0x1F774, 0x1F780, @@ -284464,32 +291259,38 @@ static const UV UNI_IN__12_DOT_1_invlist[] = { /* for all charsets */ 0x1F888, 0x1F890, 0x1F8AE, + 0x1F8B0, + 0x1F8B2, 0x1F900, - 0x1F90C, - 0x1F90D, - 0x1F972, - 0x1F973, - 0x1F977, + 0x1F979, 0x1F97A, - 0x1F9A3, - 0x1F9A5, - 0x1F9AB, - 0x1F9AE, - 0x1F9CB, + 0x1F9CC, 0x1F9CD, 0x1FA54, 0x1FA60, 0x1FA6E, 0x1FA70, - 0x1FA74, + 0x1FA75, 0x1FA78, 0x1FA7B, 0x1FA80, - 0x1FA83, + 0x1FA87, 0x1FA90, - 0x1FA96, + 0x1FAA9, + 0x1FAB0, + 0x1FAB7, + 0x1FAC0, + 0x1FAC3, + 0x1FAD0, + 0x1FAD7, + 0x1FB00, + 0x1FB93, + 0x1FB94, + 0x1FBCB, + 0x1FBF0, + 0x1FBFA, 0x1FFFE, - 0x2A6D7, + 0x2A6DE, 0x2A700, 0x2B735, 0x2B740, @@ -284501,7 +291302,7 @@ static const UV UNI_IN__12_DOT_1_invlist[] = { /* for all charsets */ 0x2F800, 0x2FA1E, 0x2FFFE, - 0x30000, + 0x3134B, 0x3FFFE, 0x40000, 0x4FFFE, @@ -284534,8 +291335,8 @@ static const UV UNI_IN__12_DOT_1_invlist[] = { /* for all charsets */ 0x110000 }; -static const UV UNI_IN__13_invlist[] = { /* for all charsets */ - 1372, /* Number of elements */ +static const UV UNI_IN__14_invlist[] = { /* for all charsets */ + 1412, /* Number of elements */ 148565664, /* Version and data structure type */ 0, /* 0 if the list starts at 0; 1 if it starts at the element beyond 0 */ @@ -284564,8 +291365,6 @@ static const UV UNI_IN__13_invlist[] = { /* for all charsets */ 0x5EF, 0x5F5, 0x600, - 0x61D, - 0x61E, 0x70E, 0x70F, 0x74B, @@ -284583,11 +291382,11 @@ static const UV UNI_IN__13_invlist[] = { /* for all charsets */ 0x85F, 0x860, 0x86B, - 0x8A0, - 0x8B5, - 0x8B6, - 0x8C8, - 0x8D3, + 0x870, + 0x88F, + 0x890, + 0x892, + 0x898, 0x984, 0x985, 0x98D, @@ -284743,7 +291542,7 @@ static const UV UNI_IN__13_invlist[] = { /* for all charsets */ 0xC29, 0xC2A, 0xC3A, - 0xC3D, + 0xC3C, 0xC45, 0xC46, 0xC49, @@ -284753,6 +291552,8 @@ static const UV UNI_IN__13_invlist[] = { /* for all charsets */ 0xC57, 0xC58, 0xC5B, + 0xC5D, + 0xC5E, 0xC60, 0xC64, 0xC66, @@ -284775,7 +291576,7 @@ static const UV UNI_IN__13_invlist[] = { /* for all charsets */ 0xCCE, 0xCD5, 0xCD7, - 0xCDE, + 0xCDD, 0xCDF, 0xCE0, 0xCE4, @@ -284910,10 +291711,8 @@ static const UV UNI_IN__13_invlist[] = { /* for all charsets */ 0x16A0, 0x16F9, 0x1700, - 0x170D, - 0x170E, - 0x1715, - 0x1720, + 0x1716, + 0x171F, 0x1737, 0x1740, 0x1754, @@ -284930,8 +291729,6 @@ static const UV UNI_IN__13_invlist[] = { /* for all charsets */ 0x17F0, 0x17FA, 0x1800, - 0x180F, - 0x1810, 0x181A, 0x1820, 0x1879, @@ -284970,11 +291767,11 @@ static const UV UNI_IN__13_invlist[] = { /* for all charsets */ 0x1AA0, 0x1AAE, 0x1AB0, - 0x1AC1, + 0x1ACF, 0x1B00, - 0x1B4C, + 0x1B4D, 0x1B50, - 0x1B7D, + 0x1B7F, 0x1B80, 0x1BF4, 0x1BFC, @@ -284990,8 +291787,6 @@ static const UV UNI_IN__13_invlist[] = { /* for all charsets */ 0x1CD0, 0x1CFB, 0x1D00, - 0x1DFA, - 0x1DFB, 0x1F16, 0x1F18, 0x1F1E, @@ -285032,7 +291827,7 @@ static const UV UNI_IN__13_invlist[] = { /* for all charsets */ 0x2090, 0x209D, 0x20A0, - 0x20C0, + 0x20C1, 0x20D0, 0x20F1, 0x2100, @@ -285046,10 +291841,6 @@ static const UV UNI_IN__13_invlist[] = { /* for all charsets */ 0x2B76, 0x2B96, 0x2B97, - 0x2C2F, - 0x2C30, - 0x2C5F, - 0x2C60, 0x2CF4, 0x2CF9, 0x2D26, @@ -285080,7 +291871,7 @@ static const UV UNI_IN__13_invlist[] = { /* for all charsets */ 0x2DD8, 0x2DDF, 0x2DE0, - 0x2E53, + 0x2E5E, 0x2E80, 0x2E9A, 0x2E9B, @@ -285104,8 +291895,6 @@ static const UV UNI_IN__13_invlist[] = { /* for all charsets */ 0x31F0, 0x321F, 0x3220, - 0x9FFD, - 0xA000, 0xA48D, 0xA490, 0xA4C7, @@ -285114,10 +291903,14 @@ static const UV UNI_IN__13_invlist[] = { /* for all charsets */ 0xA640, 0xA6F8, 0xA700, - 0xA7C0, - 0xA7C2, 0xA7CB, - 0xA7F5, + 0xA7D0, + 0xA7D2, + 0xA7D3, + 0xA7D4, + 0xA7D5, + 0xA7DA, + 0xA7F2, 0xA82D, 0xA830, 0xA83A, @@ -285188,16 +291981,12 @@ static const UV UNI_IN__13_invlist[] = { /* for all charsets */ 0xFB43, 0xFB45, 0xFB46, - 0xFBC2, + 0xFBC3, 0xFBD3, - 0xFD40, - 0xFD50, 0xFD90, 0xFD92, 0xFDC8, - 0xFDD0, - 0xFDFE, - 0xFE00, + 0xFDCF, 0xFE1A, 0xFE20, 0xFE53, @@ -285282,13 +292071,33 @@ static const UV UNI_IN__13_invlist[] = { /* for all charsets */ 0x10530, 0x10564, 0x1056F, - 0x10570, + 0x1057B, + 0x1057C, + 0x1058B, + 0x1058C, + 0x10593, + 0x10594, + 0x10596, + 0x10597, + 0x105A2, + 0x105A3, + 0x105B2, + 0x105B3, + 0x105BA, + 0x105BB, + 0x105BD, 0x10600, 0x10737, 0x10740, 0x10756, 0x10760, 0x10768, + 0x10780, + 0x10786, + 0x10787, + 0x107B1, + 0x107B2, + 0x107BB, 0x10800, 0x10806, 0x10808, @@ -285375,6 +292184,8 @@ static const UV UNI_IN__13_invlist[] = { /* for all charsets */ 0x10F28, 0x10F30, 0x10F5A, + 0x10F70, + 0x10F8A, 0x10FB0, 0x10FCC, 0x10FE0, @@ -285382,9 +292193,9 @@ static const UV UNI_IN__13_invlist[] = { /* for all charsets */ 0x11000, 0x1104E, 0x11052, - 0x11070, + 0x11076, 0x1107F, - 0x110C2, + 0x110C3, 0x110CD, 0x110CE, 0x110D0, @@ -285468,7 +292279,7 @@ static const UV UNI_IN__13_invlist[] = { /* for all charsets */ 0x11660, 0x1166D, 0x11680, - 0x116B9, + 0x116BA, 0x116C0, 0x116CA, 0x11700, @@ -285476,7 +292287,7 @@ static const UV UNI_IN__13_invlist[] = { /* for all charsets */ 0x1171D, 0x1172C, 0x11730, - 0x11740, + 0x11747, 0x11800, 0x1183C, 0x118A0, @@ -285507,7 +292318,7 @@ static const UV UNI_IN__13_invlist[] = { /* for all charsets */ 0x11A48, 0x11A50, 0x11AA3, - 0x11AC0, + 0x11AB0, 0x11AF9, 0x11C00, 0x11C09, @@ -285563,6 +292374,8 @@ static const UV UNI_IN__13_invlist[] = { /* for all charsets */ 0x12475, 0x12480, 0x12544, + 0x12F90, + 0x12FF3, 0x13000, 0x1342F, 0x13430, @@ -285576,7 +292389,9 @@ static const UV UNI_IN__13_invlist[] = { /* for all charsets */ 0x16A60, 0x16A6A, 0x16A6E, - 0x16A70, + 0x16ABF, + 0x16AC0, + 0x16ACA, 0x16AD0, 0x16AEE, 0x16AF0, @@ -285609,8 +292424,14 @@ static const UV UNI_IN__13_invlist[] = { /* for all charsets */ 0x18CD6, 0x18D00, 0x18D09, + 0x1AFF0, + 0x1AFF4, + 0x1AFF5, + 0x1AFFC, + 0x1AFFD, + 0x1AFFF, 0x1B000, - 0x1B11F, + 0x1B123, 0x1B150, 0x1B153, 0x1B164, @@ -285627,12 +292448,18 @@ static const UV UNI_IN__13_invlist[] = { /* for all charsets */ 0x1BC9A, 0x1BC9C, 0x1BCA4, + 0x1CF00, + 0x1CF2E, + 0x1CF30, + 0x1CF47, + 0x1CF50, + 0x1CFC4, 0x1D000, 0x1D0F6, 0x1D100, 0x1D127, 0x1D129, - 0x1D1E9, + 0x1D1EB, 0x1D200, 0x1D246, 0x1D2E0, @@ -285687,6 +292514,8 @@ static const UV UNI_IN__13_invlist[] = { /* for all charsets */ 0x1DAA0, 0x1DAA1, 0x1DAB0, + 0x1DF00, + 0x1DF1F, 0x1E000, 0x1E007, 0x1E008, @@ -285705,10 +292534,20 @@ static const UV UNI_IN__13_invlist[] = { /* for all charsets */ 0x1E14A, 0x1E14E, 0x1E150, + 0x1E290, + 0x1E2AF, 0x1E2C0, 0x1E2FA, 0x1E2FF, 0x1E300, + 0x1E7E0, + 0x1E7E7, + 0x1E7E8, + 0x1E7EC, + 0x1E7ED, + 0x1E7EF, + 0x1E7F0, + 0x1E7FF, 0x1E800, 0x1E8C5, 0x1E8C7, @@ -285817,7 +292656,7 @@ static const UV UNI_IN__13_invlist[] = { /* for all charsets */ 0x1F266, 0x1F300, 0x1F6D8, - 0x1F6E0, + 0x1F6DD, 0x1F6ED, 0x1F6F0, 0x1F6FD, @@ -285827,6 +292666,8 @@ static const UV UNI_IN__13_invlist[] = { /* for all charsets */ 0x1F7D9, 0x1F7E0, 0x1F7EC, + 0x1F7F0, + 0x1F7F1, 0x1F800, 0x1F80C, 0x1F810, @@ -285840,27 +292681,27 @@ static const UV UNI_IN__13_invlist[] = { /* for all charsets */ 0x1F8B0, 0x1F8B2, 0x1F900, - 0x1F979, - 0x1F97A, - 0x1F9CC, - 0x1F9CD, 0x1FA54, 0x1FA60, 0x1FA6E, 0x1FA70, 0x1FA75, 0x1FA78, - 0x1FA7B, + 0x1FA7D, 0x1FA80, 0x1FA87, 0x1FA90, - 0x1FAA9, + 0x1FAAD, 0x1FAB0, - 0x1FAB7, + 0x1FABB, 0x1FAC0, - 0x1FAC3, + 0x1FAC6, 0x1FAD0, - 0x1FAD7, + 0x1FADA, + 0x1FAE0, + 0x1FAE8, + 0x1FAF0, + 0x1FAF7, 0x1FB00, 0x1FB93, 0x1FB94, @@ -285868,9 +292709,9 @@ static const UV UNI_IN__13_invlist[] = { /* for all charsets */ 0x1FBF0, 0x1FBFA, 0x1FFFE, - 0x2A6DE, + 0x2A6E0, 0x2A700, - 0x2B735, + 0x2B739, 0x2B740, 0x2B81E, 0x2B820, @@ -286361,7 +293202,638 @@ static const UV UNI_IN__2_invlist[] = { /* for all charsets */ 0x2074, 0x208F, 0x20A0, - 0x20AC, + 0x20AC, + 0x20D0, + 0x20E2, + 0x2100, + 0x2139, + 0x2153, + 0x2183, + 0x2190, + 0x21EB, + 0x2200, + 0x22F2, + 0x2300, + 0x2301, + 0x2302, + 0x237B, + 0x2400, + 0x2425, + 0x2440, + 0x244B, + 0x2460, + 0x24EB, + 0x2500, + 0x2596, + 0x25A0, + 0x25F0, + 0x2600, + 0x2614, + 0x261A, + 0x2670, + 0x2701, + 0x2705, + 0x2706, + 0x270A, + 0x270C, + 0x2728, + 0x2729, + 0x274C, + 0x274D, + 0x274E, + 0x274F, + 0x2753, + 0x2756, + 0x2757, + 0x2758, + 0x275F, + 0x2761, + 0x2768, + 0x2776, + 0x2795, + 0x2798, + 0x27B0, + 0x27B1, + 0x27BF, + 0x3000, + 0x3038, + 0x303F, + 0x3040, + 0x3041, + 0x3095, + 0x3099, + 0x309F, + 0x30A1, + 0x30FF, + 0x3105, + 0x312D, + 0x3131, + 0x318F, + 0x3190, + 0x31A0, + 0x3200, + 0x321D, + 0x3220, + 0x3244, + 0x3260, + 0x327C, + 0x327F, + 0x32B1, + 0x32C0, + 0x32CC, + 0x32D0, + 0x32FF, + 0x3300, + 0x3377, + 0x337B, + 0x33DE, + 0x33E0, + 0x33FF, + 0x4E00, + 0x9FA6, + 0xAC00, + 0xD7A4, + 0xD800, + 0xFA2E, + 0xFB00, + 0xFB07, + 0xFB13, + 0xFB18, + 0xFB1E, + 0xFB37, + 0xFB38, + 0xFB3D, + 0xFB3E, + 0xFB3F, + 0xFB40, + 0xFB42, + 0xFB43, + 0xFB45, + 0xFB46, + 0xFBB2, + 0xFBD3, + 0xFD40, + 0xFD50, + 0xFD90, + 0xFD92, + 0xFDC8, + 0xFDF0, + 0xFDFC, + 0xFE20, + 0xFE24, + 0xFE30, + 0xFE45, + 0xFE49, + 0xFE53, + 0xFE54, + 0xFE67, + 0xFE68, + 0xFE6C, + 0xFE70, + 0xFE73, + 0xFE74, + 0xFE75, + 0xFE76, + 0xFEFD, + 0xFEFF, + 0xFF00, + 0xFF01, + 0xFF5F, + 0xFF61, + 0xFFBF, + 0xFFC2, + 0xFFC8, + 0xFFCA, + 0xFFD0, + 0xFFD2, + 0xFFD8, + 0xFFDA, + 0xFFDD, + 0xFFE0, + 0xFFE7, + 0xFFE8, + 0xFFEF, + 0xFFFD, + 0x10000, + 0x1FFFE, + 0x20000, + 0x2FFFE, + 0x30000, + 0x3FFFE, + 0x40000, + 0x4FFFE, + 0x50000, + 0x5FFFE, + 0x60000, + 0x6FFFE, + 0x70000, + 0x7FFFE, + 0x80000, + 0x8FFFE, + 0x90000, + 0x9FFFE, + 0xA0000, + 0xAFFFE, + 0xB0000, + 0xBFFFE, + 0xC0000, + 0xCFFFE, + 0xD0000, + 0xDFFFE, + 0xE0000, + 0xEFFFE, + 0x110000 +}; + +static const UV UNI_IN__2_DOT_1_invlist[] = { /* for all charsets */ + 624, /* Number of elements */ + 148565664, /* Version and data structure type */ + 0, /* 0 if the list starts at 0; + 1 if it starts at the element beyond 0 */ + 0x0, + 0x1F6, + 0x1FA, + 0x218, + 0x250, + 0x2A9, + 0x2B0, + 0x2DF, + 0x2E0, + 0x2EA, + 0x300, + 0x346, + 0x360, + 0x362, + 0x374, + 0x376, + 0x37A, + 0x37B, + 0x37E, + 0x37F, + 0x384, + 0x38B, + 0x38C, + 0x38D, + 0x38E, + 0x3A2, + 0x3A3, + 0x3CF, + 0x3D0, + 0x3D7, + 0x3DA, + 0x3DB, + 0x3DC, + 0x3DD, + 0x3DE, + 0x3DF, + 0x3E0, + 0x3E1, + 0x3E2, + 0x3F4, + 0x401, + 0x40D, + 0x40E, + 0x450, + 0x451, + 0x45D, + 0x45E, + 0x487, + 0x490, + 0x4C5, + 0x4C7, + 0x4C9, + 0x4CB, + 0x4CD, + 0x4D0, + 0x4EC, + 0x4EE, + 0x4F6, + 0x4F8, + 0x4FA, + 0x531, + 0x557, + 0x559, + 0x560, + 0x561, + 0x588, + 0x589, + 0x58A, + 0x591, + 0x5A2, + 0x5A3, + 0x5BA, + 0x5BB, + 0x5C5, + 0x5D0, + 0x5EB, + 0x5F0, + 0x5F5, + 0x60C, + 0x60D, + 0x61B, + 0x61C, + 0x61F, + 0x620, + 0x621, + 0x63B, + 0x640, + 0x653, + 0x660, + 0x66E, + 0x670, + 0x6B8, + 0x6BA, + 0x6BF, + 0x6C0, + 0x6CF, + 0x6D0, + 0x6EE, + 0x6F0, + 0x6FA, + 0x901, + 0x904, + 0x905, + 0x93A, + 0x93C, + 0x94E, + 0x950, + 0x955, + 0x958, + 0x971, + 0x981, + 0x984, + 0x985, + 0x98D, + 0x98F, + 0x991, + 0x993, + 0x9A9, + 0x9AA, + 0x9B1, + 0x9B2, + 0x9B3, + 0x9B6, + 0x9BA, + 0x9BC, + 0x9BD, + 0x9BE, + 0x9C5, + 0x9C7, + 0x9C9, + 0x9CB, + 0x9CE, + 0x9D7, + 0x9D8, + 0x9DC, + 0x9DE, + 0x9DF, + 0x9E4, + 0x9E6, + 0x9FB, + 0xA02, + 0xA03, + 0xA05, + 0xA0B, + 0xA0F, + 0xA11, + 0xA13, + 0xA29, + 0xA2A, + 0xA31, + 0xA32, + 0xA34, + 0xA35, + 0xA37, + 0xA38, + 0xA3A, + 0xA3C, + 0xA3D, + 0xA3E, + 0xA43, + 0xA47, + 0xA49, + 0xA4B, + 0xA4E, + 0xA59, + 0xA5D, + 0xA5E, + 0xA5F, + 0xA66, + 0xA75, + 0xA81, + 0xA84, + 0xA85, + 0xA8C, + 0xA8D, + 0xA8E, + 0xA8F, + 0xA92, + 0xA93, + 0xAA9, + 0xAAA, + 0xAB1, + 0xAB2, + 0xAB4, + 0xAB5, + 0xABA, + 0xABC, + 0xAC6, + 0xAC7, + 0xACA, + 0xACB, + 0xACE, + 0xAD0, + 0xAD1, + 0xAE0, + 0xAE1, + 0xAE6, + 0xAF0, + 0xB01, + 0xB04, + 0xB05, + 0xB0D, + 0xB0F, + 0xB11, + 0xB13, + 0xB29, + 0xB2A, + 0xB31, + 0xB32, + 0xB34, + 0xB36, + 0xB3A, + 0xB3C, + 0xB44, + 0xB47, + 0xB49, + 0xB4B, + 0xB4E, + 0xB56, + 0xB58, + 0xB5C, + 0xB5E, + 0xB5F, + 0xB62, + 0xB66, + 0xB71, + 0xB82, + 0xB84, + 0xB85, + 0xB8B, + 0xB8E, + 0xB91, + 0xB92, + 0xB96, + 0xB99, + 0xB9B, + 0xB9C, + 0xB9D, + 0xB9E, + 0xBA0, + 0xBA3, + 0xBA5, + 0xBA8, + 0xBAB, + 0xBAE, + 0xBB6, + 0xBB7, + 0xBBA, + 0xBBE, + 0xBC3, + 0xBC6, + 0xBC9, + 0xBCA, + 0xBCE, + 0xBD7, + 0xBD8, + 0xBE7, + 0xBF3, + 0xC01, + 0xC04, + 0xC05, + 0xC0D, + 0xC0E, + 0xC11, + 0xC12, + 0xC29, + 0xC2A, + 0xC34, + 0xC35, + 0xC3A, + 0xC3E, + 0xC45, + 0xC46, + 0xC49, + 0xC4A, + 0xC4E, + 0xC55, + 0xC57, + 0xC60, + 0xC62, + 0xC66, + 0xC70, + 0xC82, + 0xC84, + 0xC85, + 0xC8D, + 0xC8E, + 0xC91, + 0xC92, + 0xCA9, + 0xCAA, + 0xCB4, + 0xCB5, + 0xCBA, + 0xCBE, + 0xCC5, + 0xCC6, + 0xCC9, + 0xCCA, + 0xCCE, + 0xCD5, + 0xCD7, + 0xCDE, + 0xCDF, + 0xCE0, + 0xCE2, + 0xCE6, + 0xCF0, + 0xD02, + 0xD04, + 0xD05, + 0xD0D, + 0xD0E, + 0xD11, + 0xD12, + 0xD29, + 0xD2A, + 0xD3A, + 0xD3E, + 0xD44, + 0xD46, + 0xD49, + 0xD4A, + 0xD4E, + 0xD57, + 0xD58, + 0xD60, + 0xD62, + 0xD66, + 0xD70, + 0xE01, + 0xE3B, + 0xE3F, + 0xE5C, + 0xE81, + 0xE83, + 0xE84, + 0xE85, + 0xE87, + 0xE89, + 0xE8A, + 0xE8B, + 0xE8D, + 0xE8E, + 0xE94, + 0xE98, + 0xE99, + 0xEA0, + 0xEA1, + 0xEA4, + 0xEA5, + 0xEA6, + 0xEA7, + 0xEA8, + 0xEAA, + 0xEAC, + 0xEAD, + 0xEBA, + 0xEBB, + 0xEBE, + 0xEC0, + 0xEC5, + 0xEC6, + 0xEC7, + 0xEC8, + 0xECE, + 0xED0, + 0xEDA, + 0xEDC, + 0xEDE, + 0xF00, + 0xF48, + 0xF49, + 0xF6A, + 0xF71, + 0xF8C, + 0xF90, + 0xF96, + 0xF97, + 0xF98, + 0xF99, + 0xFAE, + 0xFB1, + 0xFB8, + 0xFB9, + 0xFBA, + 0x10A0, + 0x10C6, + 0x10D0, + 0x10F7, + 0x10FB, + 0x10FC, + 0x1100, + 0x115A, + 0x115F, + 0x11A3, + 0x11A8, + 0x11FA, + 0x1E00, + 0x1E9C, + 0x1EA0, + 0x1EFA, + 0x1F00, + 0x1F16, + 0x1F18, + 0x1F1E, + 0x1F20, + 0x1F46, + 0x1F48, + 0x1F4E, + 0x1F50, + 0x1F58, + 0x1F59, + 0x1F5A, + 0x1F5B, + 0x1F5C, + 0x1F5D, + 0x1F5E, + 0x1F5F, + 0x1F7E, + 0x1F80, + 0x1FB5, + 0x1FB6, + 0x1FC5, + 0x1FC6, + 0x1FD4, + 0x1FD6, + 0x1FDC, + 0x1FDD, + 0x1FF0, + 0x1FF2, + 0x1FF5, + 0x1FF6, + 0x1FFF, + 0x2000, + 0x202F, + 0x2030, + 0x2047, + 0x206A, + 0x2071, + 0x2074, + 0x208F, + 0x20A0, + 0x20AD, 0x20D0, 0x20E2, 0x2100, @@ -286512,7 +293984,7 @@ static const UV UNI_IN__2_invlist[] = { /* for all charsets */ 0xFFE7, 0xFFE8, 0xFFEF, - 0xFFFD, + 0xFFFC, 0x10000, 0x1FFFE, 0x20000, @@ -286544,25 +294016,23 @@ static const UV UNI_IN__2_invlist[] = { /* for all charsets */ 0x110000 }; -static const UV UNI_IN__2_DOT_1_invlist[] = { /* for all charsets */ - 624, /* Number of elements */ +static const UV UNI_IN__3_invlist[] = { /* for all charsets */ + 738, /* Number of elements */ 148565664, /* Version and data structure type */ 0, /* 0 if the list starts at 0; 1 if it starts at the element beyond 0 */ 0x0, - 0x1F6, - 0x1FA, - 0x218, + 0x220, + 0x222, + 0x234, 0x250, - 0x2A9, + 0x2AE, 0x2B0, - 0x2DF, - 0x2E0, - 0x2EA, + 0x2EF, 0x300, - 0x346, + 0x34F, 0x360, - 0x362, + 0x363, 0x374, 0x376, 0x37A, @@ -286578,34 +294048,20 @@ static const UV UNI_IN__2_DOT_1_invlist[] = { /* for all charsets */ 0x3A3, 0x3CF, 0x3D0, - 0x3D7, + 0x3D8, 0x3DA, - 0x3DB, - 0x3DC, - 0x3DD, - 0x3DE, - 0x3DF, - 0x3E0, - 0x3E1, - 0x3E2, 0x3F4, - 0x401, - 0x40D, - 0x40E, - 0x450, - 0x451, - 0x45D, - 0x45E, + 0x400, 0x487, - 0x490, + 0x488, + 0x48A, + 0x48C, 0x4C5, 0x4C7, 0x4C9, 0x4CB, 0x4CD, 0x4D0, - 0x4EC, - 0x4EE, 0x4F6, 0x4F8, 0x4FA, @@ -286616,7 +294072,7 @@ static const UV UNI_IN__2_DOT_1_invlist[] = { /* for all charsets */ 0x561, 0x588, 0x589, - 0x58A, + 0x58B, 0x591, 0x5A2, 0x5A3, @@ -286636,19 +294092,21 @@ static const UV UNI_IN__2_DOT_1_invlist[] = { /* for all charsets */ 0x621, 0x63B, 0x640, - 0x653, + 0x656, 0x660, 0x66E, 0x670, - 0x6B8, - 0x6BA, - 0x6BF, - 0x6C0, - 0x6CF, - 0x6D0, 0x6EE, 0x6F0, - 0x6FA, + 0x6FF, + 0x700, + 0x70E, + 0x70F, + 0x72D, + 0x730, + 0x74B, + 0x780, + 0x7B1, 0x901, 0x904, 0x905, @@ -286879,6 +294337,28 @@ static const UV UNI_IN__2_DOT_1_invlist[] = { /* for all charsets */ 0xD62, 0xD66, 0xD70, + 0xD82, + 0xD84, + 0xD85, + 0xD97, + 0xD9A, + 0xDB2, + 0xDB3, + 0xDBC, + 0xDBD, + 0xDBE, + 0xDC0, + 0xDC7, + 0xDCA, + 0xDCB, + 0xDCF, + 0xDD5, + 0xDD6, + 0xDD7, + 0xDD8, + 0xDE0, + 0xDF2, + 0xDF5, 0xE01, 0xE3B, 0xE3F, @@ -286922,19 +294402,29 @@ static const UV UNI_IN__2_DOT_1_invlist[] = { /* for all charsets */ 0xF00, 0xF48, 0xF49, - 0xF6A, + 0xF6B, 0xF71, 0xF8C, 0xF90, - 0xF96, - 0xF97, 0xF98, 0xF99, - 0xFAE, - 0xFB1, - 0xFB8, - 0xFB9, - 0xFBA, + 0xFBD, + 0xFBE, + 0xFCD, + 0xFCF, + 0xFD0, + 0x1000, + 0x1022, + 0x1023, + 0x1028, + 0x1029, + 0x102B, + 0x102C, + 0x1033, + 0x1036, + 0x103A, + 0x1040, + 0x105A, 0x10A0, 0x10C6, 0x10D0, @@ -286947,6 +294437,78 @@ static const UV UNI_IN__2_DOT_1_invlist[] = { /* for all charsets */ 0x11A3, 0x11A8, 0x11FA, + 0x1200, + 0x1207, + 0x1208, + 0x1247, + 0x1248, + 0x1249, + 0x124A, + 0x124E, + 0x1250, + 0x1257, + 0x1258, + 0x1259, + 0x125A, + 0x125E, + 0x1260, + 0x1287, + 0x1288, + 0x1289, + 0x128A, + 0x128E, + 0x1290, + 0x12AF, + 0x12B0, + 0x12B1, + 0x12B2, + 0x12B6, + 0x12B8, + 0x12BF, + 0x12C0, + 0x12C1, + 0x12C2, + 0x12C6, + 0x12C8, + 0x12CF, + 0x12D0, + 0x12D7, + 0x12D8, + 0x12EF, + 0x12F0, + 0x130F, + 0x1310, + 0x1311, + 0x1312, + 0x1316, + 0x1318, + 0x131F, + 0x1320, + 0x1347, + 0x1348, + 0x135B, + 0x1361, + 0x137D, + 0x13A0, + 0x13F5, + 0x1401, + 0x1677, + 0x1680, + 0x169D, + 0x16A0, + 0x16F1, + 0x1780, + 0x17DD, + 0x17E0, + 0x17EA, + 0x1800, + 0x180F, + 0x1810, + 0x181A, + 0x1820, + 0x1878, + 0x1880, + 0x18AA, 0x1E00, 0x1E9C, 0x1EA0, @@ -286984,31 +294546,31 @@ static const UV UNI_IN__2_DOT_1_invlist[] = { /* for all charsets */ 0x1FF6, 0x1FFF, 0x2000, - 0x202F, - 0x2030, 0x2047, + 0x2048, + 0x204E, 0x206A, 0x2071, 0x2074, 0x208F, 0x20A0, - 0x20AD, + 0x20B0, 0x20D0, - 0x20E2, + 0x20E4, 0x2100, - 0x2139, + 0x213B, 0x2153, - 0x2183, + 0x2184, 0x2190, - 0x21EB, + 0x21F4, 0x2200, 0x22F2, 0x2300, - 0x2301, - 0x2302, - 0x237B, + 0x237C, + 0x237D, + 0x239B, 0x2400, - 0x2425, + 0x2427, 0x2440, 0x244B, 0x2460, @@ -287016,11 +294578,11 @@ static const UV UNI_IN__2_DOT_1_invlist[] = { /* for all charsets */ 0x2500, 0x2596, 0x25A0, - 0x25F0, + 0x25F8, 0x2600, 0x2614, - 0x261A, - 0x2670, + 0x2619, + 0x2672, 0x2701, 0x2705, 0x2706, @@ -287045,9 +294607,19 @@ static const UV UNI_IN__2_DOT_1_invlist[] = { /* for all charsets */ 0x27B0, 0x27B1, 0x27BF, + 0x2800, + 0x2900, + 0x2E80, + 0x2E9A, + 0x2E9B, + 0x2EF4, + 0x2F00, + 0x2FD6, + 0x2FF0, + 0x2FFC, 0x3000, - 0x3038, - 0x303F, + 0x303B, + 0x303E, 0x3040, 0x3041, 0x3095, @@ -287060,7 +294632,7 @@ static const UV UNI_IN__2_DOT_1_invlist[] = { /* for all charsets */ 0x3131, 0x318F, 0x3190, - 0x31A0, + 0x31B8, 0x3200, 0x321D, 0x3220, @@ -287079,8 +294651,22 @@ static const UV UNI_IN__2_DOT_1_invlist[] = { /* for all charsets */ 0x33DE, 0x33E0, 0x33FF, + 0x3400, + 0x4DB6, 0x4E00, 0x9FA6, + 0xA000, + 0xA48D, + 0xA490, + 0xA4A2, + 0xA4A4, + 0xA4B4, + 0xA4B5, + 0xA4C1, + 0xA4C2, + 0xA4C5, + 0xA4C6, + 0xA4C7, 0xAC00, 0xD7A4, 0xD800, @@ -287089,7 +294675,7 @@ static const UV UNI_IN__2_DOT_1_invlist[] = { /* for all charsets */ 0xFB07, 0xFB13, 0xFB18, - 0xFB1E, + 0xFB1D, 0xFB37, 0xFB38, 0xFB3D, @@ -287143,7 +294729,7 @@ static const UV UNI_IN__2_DOT_1_invlist[] = { /* for all charsets */ 0xFFE7, 0xFFE8, 0xFFEF, - 0xFFFC, + 0xFFF9, 0x10000, 0x1FFFE, 0x20000, @@ -287175,8 +294761,8 @@ static const UV UNI_IN__2_DOT_1_invlist[] = { /* for all charsets */ 0x110000 }; -static const UV UNI_IN__3_invlist[] = { /* for all charsets */ - 738, /* Number of elements */ +static const UV UNI_IN__3_DOT_1_invlist[] = { /* for all charsets */ + 804, /* Number of elements */ 148565664, /* Version and data structure type */ 0, /* 0 if the list starts at 0; 1 if it starts at the element beyond 0 */ @@ -287209,7 +294795,7 @@ static const UV UNI_IN__3_invlist[] = { /* for all charsets */ 0x3D0, 0x3D8, 0x3DA, - 0x3F4, + 0x3F6, 0x400, 0x487, 0x488, @@ -287852,7 +295438,7 @@ static const UV UNI_IN__3_invlist[] = { /* for all charsets */ 0xFD90, 0xFD92, 0xFDC8, - 0xFDF0, + 0xFDD0, 0xFDFC, 0xFE20, 0xFE24, @@ -287890,8 +295476,70 @@ static const UV UNI_IN__3_invlist[] = { /* for all charsets */ 0xFFEF, 0xFFF9, 0x10000, + 0x10300, + 0x1031F, + 0x10320, + 0x10324, + 0x10330, + 0x1034B, + 0x10400, + 0x10426, + 0x10428, + 0x1044E, + 0x1D000, + 0x1D0F6, + 0x1D100, + 0x1D127, + 0x1D12A, + 0x1D1DE, + 0x1D400, + 0x1D455, + 0x1D456, + 0x1D49D, + 0x1D49E, + 0x1D4A0, + 0x1D4A2, + 0x1D4A3, + 0x1D4A5, + 0x1D4A7, + 0x1D4A9, + 0x1D4AD, + 0x1D4AE, + 0x1D4BA, + 0x1D4BB, + 0x1D4BC, + 0x1D4BD, + 0x1D4C1, + 0x1D4C2, + 0x1D4C4, + 0x1D4C5, + 0x1D506, + 0x1D507, + 0x1D50B, + 0x1D50D, + 0x1D515, + 0x1D516, + 0x1D51D, + 0x1D51E, + 0x1D53A, + 0x1D53B, + 0x1D53F, + 0x1D540, + 0x1D545, + 0x1D546, + 0x1D547, + 0x1D54A, + 0x1D551, + 0x1D552, + 0x1D6A4, + 0x1D6A8, + 0x1D7CA, + 0x1D7CE, + 0x1D800, 0x1FFFE, - 0x20000, + 0x2A6D7, + 0x2F800, + 0x2FA1E, 0x2FFFE, 0x30000, 0x3FFFE, @@ -287916,17 +295564,21 @@ static const UV UNI_IN__3_invlist[] = { /* for all charsets */ 0xD0000, 0xDFFFE, 0xE0000, + 0xE0001, + 0xE0002, + 0xE0020, + 0xE0080, 0xEFFFE, 0x110000 }; -static const UV UNI_IN__3_DOT_1_invlist[] = { /* for all charsets */ - 804, /* Number of elements */ +static const UV UNI_IN__3_DOT_2_invlist[] = { /* for all charsets */ + 794, /* Number of elements */ 148565664, /* Version and data structure type */ 0, /* 0 if the list starts at 0; 1 if it starts at the element beyond 0 */ 0x0, - 0x220, + 0x221, 0x222, 0x234, 0x250, @@ -287934,9 +295586,9 @@ static const UV UNI_IN__3_DOT_1_invlist[] = { /* for all charsets */ 0x2B0, 0x2EF, 0x300, - 0x34F, + 0x350, 0x360, - 0x363, + 0x370, 0x374, 0x376, 0x37A, @@ -287952,23 +295604,17 @@ static const UV UNI_IN__3_DOT_1_invlist[] = { /* for all charsets */ 0x3A3, 0x3CF, 0x3D0, - 0x3D8, - 0x3DA, - 0x3F6, + 0x3F7, 0x400, 0x487, 0x488, - 0x48A, - 0x48C, - 0x4C5, - 0x4C7, - 0x4C9, - 0x4CB, - 0x4CD, + 0x4CF, 0x4D0, 0x4F6, 0x4F8, 0x4FA, + 0x500, + 0x510, 0x531, 0x557, 0x559, @@ -287998,8 +295644,6 @@ static const UV UNI_IN__3_DOT_1_invlist[] = { /* for all charsets */ 0x640, 0x656, 0x660, - 0x66E, - 0x670, 0x6EE, 0x6F0, 0x6FF, @@ -288010,7 +295654,7 @@ static const UV UNI_IN__3_DOT_1_invlist[] = { /* for all charsets */ 0x730, 0x74B, 0x780, - 0x7B1, + 0x7B2, 0x901, 0x904, 0x905, @@ -288332,7 +295976,7 @@ static const UV UNI_IN__3_DOT_1_invlist[] = { /* for all charsets */ 0x10A0, 0x10C6, 0x10D0, - 0x10F7, + 0x10F9, 0x10FB, 0x10FC, 0x1100, @@ -288401,6 +296045,20 @@ static const UV UNI_IN__3_DOT_1_invlist[] = { /* for all charsets */ 0x169D, 0x16A0, 0x16F1, + 0x1700, + 0x170D, + 0x170E, + 0x1715, + 0x1720, + 0x1737, + 0x1740, + 0x1754, + 0x1760, + 0x176D, + 0x176E, + 0x1771, + 0x1772, + 0x1774, 0x1780, 0x17DD, 0x17E0, @@ -288450,43 +296108,41 @@ static const UV UNI_IN__3_DOT_1_invlist[] = { /* for all charsets */ 0x1FF6, 0x1FFF, 0x2000, - 0x2047, - 0x2048, - 0x204E, + 0x2053, + 0x2057, + 0x2058, + 0x205F, + 0x2064, 0x206A, - 0x2071, + 0x2072, 0x2074, 0x208F, 0x20A0, - 0x20B0, + 0x20B2, 0x20D0, - 0x20E4, + 0x20EB, 0x2100, 0x213B, + 0x213D, + 0x214C, 0x2153, 0x2184, 0x2190, - 0x21F4, - 0x2200, - 0x22F2, - 0x2300, - 0x237C, - 0x237D, - 0x239B, + 0x23CF, 0x2400, 0x2427, 0x2440, 0x244B, 0x2460, - 0x24EB, + 0x24FF, 0x2500, - 0x2596, - 0x25A0, - 0x25F8, - 0x2600, 0x2614, + 0x2616, + 0x2618, 0x2619, - 0x2672, + 0x267E, + 0x2680, + 0x268A, 0x2701, 0x2705, 0x2706, @@ -288504,15 +296160,15 @@ static const UV UNI_IN__3_DOT_1_invlist[] = { /* for all charsets */ 0x2758, 0x275F, 0x2761, - 0x2768, - 0x2776, 0x2795, 0x2798, 0x27B0, 0x27B1, 0x27BF, - 0x2800, - 0x2900, + 0x27D0, + 0x27EC, + 0x27F0, + 0x2B00, 0x2E80, 0x2E9A, 0x2E9B, @@ -288522,30 +296178,24 @@ static const UV UNI_IN__3_DOT_1_invlist[] = { /* for all charsets */ 0x2FF0, 0x2FFC, 0x3000, - 0x303B, - 0x303E, 0x3040, 0x3041, - 0x3095, + 0x3097, 0x3099, - 0x309F, - 0x30A1, - 0x30FF, + 0x3100, 0x3105, 0x312D, 0x3131, 0x318F, 0x3190, 0x31B8, - 0x3200, + 0x31F0, 0x321D, 0x3220, 0x3244, - 0x3260, + 0x3251, 0x327C, 0x327F, - 0x32B1, - 0x32C0, 0x32CC, 0x32D0, 0x32FF, @@ -288562,19 +296212,13 @@ static const UV UNI_IN__3_DOT_1_invlist[] = { /* for all charsets */ 0xA000, 0xA48D, 0xA490, - 0xA4A2, - 0xA4A4, - 0xA4B4, - 0xA4B5, - 0xA4C1, - 0xA4C2, - 0xA4C5, - 0xA4C6, 0xA4C7, 0xAC00, 0xD7A4, 0xD800, 0xFA2E, + 0xFA30, + 0xFA6B, 0xFB00, 0xFB07, 0xFB13, @@ -288598,11 +296242,13 @@ static const UV UNI_IN__3_DOT_1_invlist[] = { /* for all charsets */ 0xFD92, 0xFDC8, 0xFDD0, - 0xFDFC, + 0xFDFD, + 0xFE00, + 0xFE10, 0xFE20, 0xFE24, 0xFE30, - 0xFE45, + 0xFE47, 0xFE49, 0xFE53, 0xFE54, @@ -288610,16 +296256,12 @@ static const UV UNI_IN__3_DOT_1_invlist[] = { /* for all charsets */ 0xFE68, 0xFE6C, 0xFE70, - 0xFE73, - 0xFE74, 0xFE75, 0xFE76, 0xFEFD, 0xFEFF, 0xFF00, 0xFF01, - 0xFF5F, - 0xFF61, 0xFFBF, 0xFFC2, 0xFFC8, @@ -288731,22 +296373,16 @@ static const UV UNI_IN__3_DOT_1_invlist[] = { /* for all charsets */ 0x110000 }; -static const UV UNI_IN__3_DOT_2_invlist[] = { /* for all charsets */ - 794, /* Number of elements */ +static const UV UNI_IN__4_invlist[] = { /* for all charsets */ + 824, /* Number of elements */ 148565664, /* Version and data structure type */ 0, /* 0 if the list starts at 0; 1 if it starts at the element beyond 0 */ 0x0, - 0x221, - 0x222, - 0x234, + 0x237, 0x250, - 0x2AE, - 0x2B0, - 0x2EF, - 0x300, - 0x350, - 0x360, + 0x358, + 0x35D, 0x370, 0x374, 0x376, @@ -288763,7 +296399,7 @@ static const UV UNI_IN__3_DOT_2_invlist[] = { /* for all charsets */ 0x3A3, 0x3CF, 0x3D0, - 0x3F7, + 0x3FC, 0x400, 0x487, 0x488, @@ -288792,8 +296428,10 @@ static const UV UNI_IN__3_DOT_2_invlist[] = { /* for all charsets */ 0x5EB, 0x5F0, 0x5F5, + 0x600, + 0x604, 0x60C, - 0x60D, + 0x616, 0x61B, 0x61C, 0x61F, @@ -288801,22 +296439,16 @@ static const UV UNI_IN__3_DOT_2_invlist[] = { /* for all charsets */ 0x621, 0x63B, 0x640, - 0x656, + 0x659, 0x660, - 0x6EE, - 0x6F0, - 0x6FF, - 0x700, 0x70E, 0x70F, - 0x72D, - 0x730, 0x74B, + 0x74D, + 0x750, 0x780, 0x7B2, 0x901, - 0x904, - 0x905, 0x93A, 0x93C, 0x94E, @@ -288839,8 +296471,6 @@ static const UV UNI_IN__3_DOT_2_invlist[] = { /* for all charsets */ 0x9B6, 0x9BA, 0x9BC, - 0x9BD, - 0x9BE, 0x9C5, 0x9C7, 0x9C9, @@ -288854,8 +296484,8 @@ static const UV UNI_IN__3_DOT_2_invlist[] = { /* for all charsets */ 0x9E4, 0x9E6, 0x9FB, - 0xA02, - 0xA03, + 0xA01, + 0xA04, 0xA05, 0xA0B, 0xA0F, @@ -288887,8 +296517,6 @@ static const UV UNI_IN__3_DOT_2_invlist[] = { /* for all charsets */ 0xA81, 0xA84, 0xA85, - 0xA8C, - 0xA8D, 0xA8E, 0xA8F, 0xA92, @@ -288909,9 +296537,11 @@ static const UV UNI_IN__3_DOT_2_invlist[] = { /* for all charsets */ 0xAD0, 0xAD1, 0xAE0, - 0xAE1, + 0xAE4, 0xAE6, 0xAF0, + 0xAF1, + 0xAF2, 0xB01, 0xB04, 0xB05, @@ -288924,7 +296554,7 @@ static const UV UNI_IN__3_DOT_2_invlist[] = { /* for all charsets */ 0xB31, 0xB32, 0xB34, - 0xB36, + 0xB35, 0xB3A, 0xB3C, 0xB44, @@ -288939,7 +296569,7 @@ static const UV UNI_IN__3_DOT_2_invlist[] = { /* for all charsets */ 0xB5F, 0xB62, 0xB66, - 0xB71, + 0xB72, 0xB82, 0xB84, 0xB85, @@ -288971,7 +296601,7 @@ static const UV UNI_IN__3_DOT_2_invlist[] = { /* for all charsets */ 0xBD7, 0xBD8, 0xBE7, - 0xBF3, + 0xBFB, 0xC01, 0xC04, 0xC05, @@ -289008,7 +296638,7 @@ static const UV UNI_IN__3_DOT_2_invlist[] = { /* for all charsets */ 0xCB4, 0xCB5, 0xCBA, - 0xCBE, + 0xCBC, 0xCC5, 0xCC6, 0xCC9, @@ -289219,9 +296849,11 @@ static const UV UNI_IN__3_DOT_2_invlist[] = { /* for all charsets */ 0x1772, 0x1774, 0x1780, - 0x17DD, + 0x17DE, 0x17E0, 0x17EA, + 0x17F0, + 0x17FA, 0x1800, 0x180F, 0x1810, @@ -289230,6 +296862,22 @@ static const UV UNI_IN__3_DOT_2_invlist[] = { /* for all charsets */ 0x1878, 0x1880, 0x18AA, + 0x1900, + 0x191D, + 0x1920, + 0x192C, + 0x1930, + 0x193C, + 0x1940, + 0x1941, + 0x1944, + 0x196E, + 0x1970, + 0x1975, + 0x19E0, + 0x1A00, + 0x1D00, + 0x1D6C, 0x1E00, 0x1E9C, 0x1EA0, @@ -289267,7 +296915,7 @@ static const UV UNI_IN__3_DOT_2_invlist[] = { /* for all charsets */ 0x1FF6, 0x1FFF, 0x2000, - 0x2053, + 0x2055, 0x2057, 0x2058, 0x205F, @@ -289281,27 +296929,25 @@ static const UV UNI_IN__3_DOT_2_invlist[] = { /* for all charsets */ 0x20D0, 0x20EB, 0x2100, - 0x213B, + 0x213C, 0x213D, 0x214C, 0x2153, 0x2184, 0x2190, - 0x23CF, + 0x23D1, 0x2400, 0x2427, 0x2440, 0x244B, 0x2460, - 0x24FF, - 0x2500, - 0x2614, - 0x2616, 0x2618, 0x2619, 0x267E, 0x2680, - 0x268A, + 0x2692, + 0x26A0, + 0x26A2, 0x2701, 0x2705, 0x2706, @@ -289327,7 +296973,7 @@ static const UV UNI_IN__3_DOT_2_invlist[] = { /* for all charsets */ 0x27D0, 0x27EC, 0x27F0, - 0x2B00, + 0x2B0E, 0x2E80, 0x2E9A, 0x2E9B, @@ -289349,24 +296995,16 @@ static const UV UNI_IN__3_DOT_2_invlist[] = { /* for all charsets */ 0x3190, 0x31B8, 0x31F0, - 0x321D, + 0x321F, 0x3220, 0x3244, - 0x3251, - 0x327C, + 0x3250, + 0x327E, 0x327F, - 0x32CC, - 0x32D0, 0x32FF, 0x3300, - 0x3377, - 0x337B, - 0x33DE, - 0x33E0, - 0x33FF, - 0x3400, 0x4DB6, - 0x4E00, + 0x4DC0, 0x9FA6, 0xA000, 0xA48D, @@ -289401,14 +297039,12 @@ static const UV UNI_IN__3_DOT_2_invlist[] = { /* for all charsets */ 0xFD92, 0xFDC8, 0xFDD0, - 0xFDFD, + 0xFDFE, 0xFE00, 0xFE10, 0xFE20, 0xFE24, 0xFE30, - 0xFE47, - 0xFE49, 0xFE53, 0xFE54, 0xFE67, @@ -289435,23 +297071,59 @@ static const UV UNI_IN__3_DOT_2_invlist[] = { /* for all charsets */ 0xFFE8, 0xFFEF, 0xFFF9, - 0x10000, + 0x1000C, + 0x1000D, + 0x10027, + 0x10028, + 0x1003B, + 0x1003C, + 0x1003E, + 0x1003F, + 0x1004E, + 0x10050, + 0x1005E, + 0x10080, + 0x100FB, + 0x10100, + 0x10103, + 0x10107, + 0x10134, + 0x10137, + 0x10140, 0x10300, 0x1031F, 0x10320, 0x10324, 0x10330, 0x1034B, + 0x10380, + 0x1039E, + 0x1039F, + 0x103A0, 0x10400, - 0x10426, - 0x10428, - 0x1044E, + 0x1049E, + 0x104A0, + 0x104AA, + 0x10800, + 0x10806, + 0x10808, + 0x10809, + 0x1080A, + 0x10836, + 0x10837, + 0x10839, + 0x1083C, + 0x1083D, + 0x1083F, + 0x10840, 0x1D000, 0x1D0F6, 0x1D100, 0x1D127, 0x1D12A, 0x1D1DE, + 0x1D300, + 0x1D357, 0x1D400, 0x1D455, 0x1D456, @@ -289469,8 +297141,6 @@ static const UV UNI_IN__3_DOT_2_invlist[] = { /* for all charsets */ 0x1D4BB, 0x1D4BC, 0x1D4BD, - 0x1D4C1, - 0x1D4C2, 0x1D4C4, 0x1D4C5, 0x1D506, @@ -289528,20 +297198,20 @@ static const UV UNI_IN__3_DOT_2_invlist[] = { /* for all charsets */ 0xE0002, 0xE0020, 0xE0080, + 0xE0100, + 0xE01F0, 0xEFFFE, 0x110000 }; -static const UV UNI_IN__4_invlist[] = { /* for all charsets */ - 824, /* Number of elements */ +static const UV UNI_IN__4_DOT_1_invlist[] = { /* for all charsets */ + 860, /* Number of elements */ 148565664, /* Version and data structure type */ 0, /* 0 if the list starts at 0; 1 if it starts at the element beyond 0 */ 0x0, - 0x237, + 0x242, 0x250, - 0x358, - 0x35D, 0x370, 0x374, 0x376, @@ -289558,14 +297228,10 @@ static const UV UNI_IN__4_invlist[] = { /* for all charsets */ 0x3A3, 0x3CF, 0x3D0, - 0x3FC, - 0x400, 0x487, 0x488, 0x4CF, 0x4D0, - 0x4F6, - 0x4F8, 0x4FA, 0x500, 0x510, @@ -289578,33 +297244,31 @@ static const UV UNI_IN__4_invlist[] = { /* for all charsets */ 0x589, 0x58B, 0x591, - 0x5A2, - 0x5A3, 0x5BA, 0x5BB, - 0x5C5, + 0x5C8, 0x5D0, 0x5EB, 0x5F0, 0x5F5, 0x600, 0x604, - 0x60C, + 0x60B, 0x616, 0x61B, 0x61C, - 0x61F, + 0x61E, 0x620, 0x621, 0x63B, 0x640, - 0x659, + 0x65F, 0x660, 0x70E, 0x70F, 0x74B, 0x74D, - 0x750, + 0x76E, 0x780, 0x7B2, 0x901, @@ -289615,6 +297279,8 @@ static const UV UNI_IN__4_invlist[] = { /* for all charsets */ 0x955, 0x958, 0x971, + 0x97D, + 0x97E, 0x981, 0x984, 0x985, @@ -289634,7 +297300,7 @@ static const UV UNI_IN__4_invlist[] = { /* for all charsets */ 0x9C7, 0x9C9, 0x9CB, - 0x9CE, + 0x9CF, 0x9D7, 0x9D8, 0x9DC, @@ -289748,8 +297414,6 @@ static const UV UNI_IN__4_invlist[] = { /* for all charsets */ 0xBA8, 0xBAB, 0xBAE, - 0xBB6, - 0xBB7, 0xBBA, 0xBBE, 0xBC3, @@ -289759,7 +297423,7 @@ static const UV UNI_IN__4_invlist[] = { /* for all charsets */ 0xBCE, 0xBD7, 0xBD8, - 0xBE7, + 0xBE6, 0xBFB, 0xC01, 0xC04, @@ -289908,7 +297572,7 @@ static const UV UNI_IN__4_invlist[] = { /* for all charsets */ 0xFBE, 0xFCD, 0xFCF, - 0xFD0, + 0xFD2, 0x1000, 0x1022, 0x1023, @@ -289924,9 +297588,7 @@ static const UV UNI_IN__4_invlist[] = { /* for all charsets */ 0x10A0, 0x10C6, 0x10D0, - 0x10F9, - 0x10FB, - 0x10FC, + 0x10FD, 0x1100, 0x115A, 0x115F, @@ -289934,10 +297596,6 @@ static const UV UNI_IN__4_invlist[] = { /* for all charsets */ 0x11A8, 0x11FA, 0x1200, - 0x1207, - 0x1208, - 0x1247, - 0x1248, 0x1249, 0x124A, 0x124E, @@ -289948,14 +297606,10 @@ static const UV UNI_IN__4_invlist[] = { /* for all charsets */ 0x125A, 0x125E, 0x1260, - 0x1287, - 0x1288, 0x1289, 0x128A, 0x128E, 0x1290, - 0x12AF, - 0x12B0, 0x12B1, 0x12B2, 0x12B6, @@ -289966,25 +297620,17 @@ static const UV UNI_IN__4_invlist[] = { /* for all charsets */ 0x12C2, 0x12C6, 0x12C8, - 0x12CF, - 0x12D0, 0x12D7, 0x12D8, - 0x12EF, - 0x12F0, - 0x130F, - 0x1310, 0x1311, 0x1312, 0x1316, 0x1318, - 0x131F, - 0x1320, - 0x1347, - 0x1348, 0x135B, - 0x1361, + 0x135F, 0x137D, + 0x1380, + 0x139A, 0x13A0, 0x13F5, 0x1401, @@ -290033,10 +297679,18 @@ static const UV UNI_IN__4_invlist[] = { /* for all charsets */ 0x196E, 0x1970, 0x1975, - 0x19E0, - 0x1A00, + 0x1980, + 0x19AA, + 0x19B0, + 0x19CA, + 0x19D0, + 0x19DA, + 0x19DE, + 0x1A1C, + 0x1A1E, + 0x1A20, 0x1D00, - 0x1D6C, + 0x1DC4, 0x1E00, 0x1E9C, 0x1EA0, @@ -290074,39 +297728,31 @@ static const UV UNI_IN__4_invlist[] = { /* for all charsets */ 0x1FF6, 0x1FFF, 0x2000, - 0x2055, - 0x2057, - 0x2058, - 0x205F, 0x2064, 0x206A, 0x2072, 0x2074, 0x208F, + 0x2090, + 0x2095, 0x20A0, - 0x20B2, + 0x20B6, 0x20D0, - 0x20EB, + 0x20EC, 0x2100, - 0x213C, - 0x213D, - 0x214C, + 0x214D, 0x2153, 0x2184, 0x2190, - 0x23D1, + 0x23DC, 0x2400, 0x2427, 0x2440, 0x244B, 0x2460, - 0x2618, - 0x2619, - 0x267E, - 0x2680, - 0x2692, + 0x269D, 0x26A0, - 0x26A2, + 0x26B2, 0x2701, 0x2705, 0x2706, @@ -290129,10 +297775,46 @@ static const UV UNI_IN__4_invlist[] = { /* for all charsets */ 0x27B0, 0x27B1, 0x27BF, + 0x27C0, + 0x27C7, 0x27D0, 0x27EC, 0x27F0, - 0x2B0E, + 0x2B14, + 0x2C00, + 0x2C2F, + 0x2C30, + 0x2C5F, + 0x2C80, + 0x2CEB, + 0x2CF9, + 0x2D26, + 0x2D30, + 0x2D66, + 0x2D6F, + 0x2D70, + 0x2D80, + 0x2D97, + 0x2DA0, + 0x2DA7, + 0x2DA8, + 0x2DAF, + 0x2DB0, + 0x2DB7, + 0x2DB8, + 0x2DBF, + 0x2DC0, + 0x2DC7, + 0x2DC8, + 0x2DCF, + 0x2DD0, + 0x2DD7, + 0x2DD8, + 0x2DDF, + 0x2E00, + 0x2E18, + 0x2E1C, + 0x2E1E, 0x2E80, 0x2E9A, 0x2E9B, @@ -290153,28 +297835,34 @@ static const UV UNI_IN__4_invlist[] = { /* for all charsets */ 0x318F, 0x3190, 0x31B8, + 0x31C0, + 0x31D0, 0x31F0, 0x321F, 0x3220, 0x3244, 0x3250, - 0x327E, - 0x327F, 0x32FF, 0x3300, 0x4DB6, 0x4DC0, - 0x9FA6, + 0x9FBC, 0xA000, 0xA48D, 0xA490, 0xA4C7, + 0xA700, + 0xA717, + 0xA800, + 0xA82C, 0xAC00, 0xD7A4, 0xD800, 0xFA2E, 0xFA30, 0xFA6B, + 0xFA70, + 0xFADA, 0xFB00, 0xFB07, 0xFB13, @@ -290200,7 +297888,7 @@ static const UV UNI_IN__4_invlist[] = { /* for all charsets */ 0xFDD0, 0xFDFE, 0xFE00, - 0xFE10, + 0xFE1A, 0xFE20, 0xFE24, 0xFE30, @@ -290248,7 +297936,7 @@ static const UV UNI_IN__4_invlist[] = { /* for all charsets */ 0x10107, 0x10134, 0x10137, - 0x10140, + 0x1018B, 0x10300, 0x1031F, 0x10320, @@ -290258,7 +297946,9 @@ static const UV UNI_IN__4_invlist[] = { /* for all charsets */ 0x10380, 0x1039E, 0x1039F, - 0x103A0, + 0x103C4, + 0x103C8, + 0x103D6, 0x10400, 0x1049E, 0x104A0, @@ -290275,12 +297965,30 @@ static const UV UNI_IN__4_invlist[] = { /* for all charsets */ 0x1083D, 0x1083F, 0x10840, + 0x10A00, + 0x10A04, + 0x10A05, + 0x10A07, + 0x10A0C, + 0x10A14, + 0x10A15, + 0x10A18, + 0x10A19, + 0x10A34, + 0x10A38, + 0x10A3B, + 0x10A3F, + 0x10A48, + 0x10A50, + 0x10A59, 0x1D000, 0x1D0F6, 0x1D100, 0x1D127, 0x1D12A, 0x1D1DE, + 0x1D200, + 0x1D246, 0x1D300, 0x1D357, 0x1D400, @@ -290320,7 +298028,7 @@ static const UV UNI_IN__4_invlist[] = { /* for all charsets */ 0x1D54A, 0x1D551, 0x1D552, - 0x1D6A4, + 0x1D6A6, 0x1D6A8, 0x1D7CA, 0x1D7CE, @@ -290363,20 +298071,16 @@ static const UV UNI_IN__4_invlist[] = { /* for all charsets */ 0x110000 }; -static const UV UNI_IN__4_DOT_1_invlist[] = { /* for all charsets */ - 860, /* Number of elements */ +static const UV UNI_IN__5_invlist[] = { /* for all charsets */ + 880, /* Number of elements */ 148565664, /* Version and data structure type */ 0, /* 0 if the list starts at 0; 1 if it starts at the element beyond 0 */ 0x0, - 0x242, - 0x250, 0x370, 0x374, 0x376, 0x37A, - 0x37B, - 0x37E, 0x37F, 0x384, 0x38B, @@ -290389,11 +298093,7 @@ static const UV UNI_IN__4_DOT_1_invlist[] = { /* for all charsets */ 0x3D0, 0x487, 0x488, - 0x4CF, - 0x4D0, - 0x4FA, - 0x500, - 0x510, + 0x514, 0x531, 0x557, 0x559, @@ -290403,8 +298103,6 @@ static const UV UNI_IN__4_DOT_1_invlist[] = { /* for all charsets */ 0x589, 0x58B, 0x591, - 0x5BA, - 0x5BB, 0x5C8, 0x5D0, 0x5EB, @@ -290430,6 +298128,8 @@ static const UV UNI_IN__4_DOT_1_invlist[] = { /* for all charsets */ 0x76E, 0x780, 0x7B2, + 0x7C0, + 0x7FB, 0x901, 0x93A, 0x93C, @@ -290438,8 +298138,8 @@ static const UV UNI_IN__4_DOT_1_invlist[] = { /* for all charsets */ 0x955, 0x958, 0x971, - 0x97D, - 0x97E, + 0x97B, + 0x980, 0x981, 0x984, 0x985, @@ -290631,9 +298331,11 @@ static const UV UNI_IN__4_DOT_1_invlist[] = { /* for all charsets */ 0xCDE, 0xCDF, 0xCE0, - 0xCE2, + 0xCE4, 0xCE6, 0xCF0, + 0xCF1, + 0xCF3, 0xD02, 0xD04, 0xD05, @@ -290848,9 +298550,13 @@ static const UV UNI_IN__4_DOT_1_invlist[] = { /* for all charsets */ 0x1A1C, 0x1A1E, 0x1A20, + 0x1B00, + 0x1B4C, + 0x1B50, + 0x1B7D, 0x1D00, - 0x1DC4, - 0x1E00, + 0x1DCB, + 0x1DFE, 0x1E9C, 0x1EA0, 0x1EFA, @@ -290897,13 +298603,13 @@ static const UV UNI_IN__4_DOT_1_invlist[] = { /* for all charsets */ 0x20A0, 0x20B6, 0x20D0, - 0x20EC, + 0x20F0, 0x2100, - 0x214D, + 0x214F, 0x2153, - 0x2184, + 0x2185, 0x2190, - 0x23DC, + 0x23E8, 0x2400, 0x2427, 0x2440, @@ -290911,7 +298617,7 @@ static const UV UNI_IN__4_DOT_1_invlist[] = { /* for all charsets */ 0x2460, 0x269D, 0x26A0, - 0x26B2, + 0x26B3, 0x2701, 0x2705, 0x2706, @@ -290935,15 +298641,21 @@ static const UV UNI_IN__4_DOT_1_invlist[] = { /* for all charsets */ 0x27B1, 0x27BF, 0x27C0, - 0x27C7, + 0x27CB, 0x27D0, 0x27EC, 0x27F0, - 0x2B14, + 0x2B1B, + 0x2B20, + 0x2B24, 0x2C00, 0x2C2F, 0x2C30, 0x2C5F, + 0x2C60, + 0x2C6D, + 0x2C74, + 0x2C78, 0x2C80, 0x2CEB, 0x2CF9, @@ -291011,9 +298723,13 @@ static const UV UNI_IN__4_DOT_1_invlist[] = { /* for all charsets */ 0xA490, 0xA4C7, 0xA700, - 0xA717, + 0xA71B, + 0xA720, + 0xA722, 0xA800, 0xA82C, + 0xA840, + 0xA878, 0xAC00, 0xD7A4, 0xD800, @@ -291124,6 +298840,10 @@ static const UV UNI_IN__4_DOT_1_invlist[] = { /* for all charsets */ 0x1083D, 0x1083F, 0x10840, + 0x10900, + 0x1091A, + 0x1091F, + 0x10920, 0x10A00, 0x10A04, 0x10A05, @@ -291140,6 +298860,12 @@ static const UV UNI_IN__4_DOT_1_invlist[] = { /* for all charsets */ 0x10A48, 0x10A50, 0x10A59, + 0x12000, + 0x1236F, + 0x12400, + 0x12463, + 0x12470, + 0x12474, 0x1D000, 0x1D0F6, 0x1D100, @@ -291150,6 +298876,8 @@ static const UV UNI_IN__4_DOT_1_invlist[] = { /* for all charsets */ 0x1D246, 0x1D300, 0x1D357, + 0x1D360, + 0x1D372, 0x1D400, 0x1D455, 0x1D456, @@ -291189,7 +298917,7 @@ static const UV UNI_IN__4_DOT_1_invlist[] = { /* for all charsets */ 0x1D552, 0x1D6A6, 0x1D6A8, - 0x1D7CA, + 0x1D7CC, 0x1D7CE, 0x1D800, 0x1FFFE, @@ -291230,15 +298958,13 @@ static const UV UNI_IN__4_DOT_1_invlist[] = { /* for all charsets */ 0x110000 }; -static const UV UNI_IN__5_invlist[] = { /* for all charsets */ - 880, /* Number of elements */ +static const UV UNI_IN__5_DOT_1_invlist[] = { /* for all charsets */ + 910, /* Number of elements */ 148565664, /* Version and data structure type */ 0, /* 0 if the list starts at 0; 1 if it starts at the element beyond 0 */ 0x0, - 0x370, - 0x374, - 0x376, + 0x378, 0x37A, 0x37F, 0x384, @@ -291248,11 +298974,7 @@ static const UV UNI_IN__5_invlist[] = { /* for all charsets */ 0x38E, 0x3A2, 0x3A3, - 0x3CF, - 0x3D0, - 0x487, - 0x488, - 0x514, + 0x524, 0x531, 0x557, 0x559, @@ -291269,23 +298991,17 @@ static const UV UNI_IN__5_invlist[] = { /* for all charsets */ 0x5F5, 0x600, 0x604, - 0x60B, - 0x616, - 0x61B, + 0x606, 0x61C, 0x61E, 0x620, 0x621, - 0x63B, - 0x640, 0x65F, 0x660, 0x70E, 0x70F, 0x74B, 0x74D, - 0x76E, - 0x780, 0x7B2, 0x7C0, 0x7FB, @@ -291296,7 +299012,7 @@ static const UV UNI_IN__5_invlist[] = { /* for all charsets */ 0x950, 0x955, 0x958, - 0x971, + 0x973, 0x97B, 0x980, 0x981, @@ -291351,12 +299067,14 @@ static const UV UNI_IN__5_invlist[] = { /* for all charsets */ 0xA49, 0xA4B, 0xA4E, + 0xA51, + 0xA52, 0xA59, 0xA5D, 0xA5E, 0xA5F, 0xA66, - 0xA75, + 0xA76, 0xA81, 0xA84, 0xA85, @@ -291400,7 +299118,7 @@ static const UV UNI_IN__5_invlist[] = { /* for all charsets */ 0xB35, 0xB3A, 0xB3C, - 0xB44, + 0xB45, 0xB47, 0xB49, 0xB4B, @@ -291410,7 +299128,7 @@ static const UV UNI_IN__5_invlist[] = { /* for all charsets */ 0xB5C, 0xB5E, 0xB5F, - 0xB62, + 0xB64, 0xB66, 0xB72, 0xB82, @@ -291439,6 +299157,8 @@ static const UV UNI_IN__5_invlist[] = { /* for all charsets */ 0xBC9, 0xBCA, 0xBCE, + 0xBD0, + 0xBD1, 0xBD7, 0xBD8, 0xBE6, @@ -291455,7 +299175,7 @@ static const UV UNI_IN__5_invlist[] = { /* for all charsets */ 0xC34, 0xC35, 0xC3A, - 0xC3E, + 0xC3D, 0xC45, 0xC46, 0xC49, @@ -291463,10 +299183,14 @@ static const UV UNI_IN__5_invlist[] = { /* for all charsets */ 0xC4E, 0xC55, 0xC57, + 0xC58, + 0xC5A, 0xC60, - 0xC62, + 0xC64, 0xC66, 0xC70, + 0xC78, + 0xC80, 0xC82, 0xC84, 0xC85, @@ -291505,8 +299229,8 @@ static const UV UNI_IN__5_invlist[] = { /* for all charsets */ 0xD29, 0xD2A, 0xD3A, - 0xD3E, - 0xD44, + 0xD3D, + 0xD45, 0xD46, 0xD49, 0xD4A, @@ -291514,9 +299238,11 @@ static const UV UNI_IN__5_invlist[] = { /* for all charsets */ 0xD57, 0xD58, 0xD60, - 0xD62, + 0xD64, 0xD66, - 0xD70, + 0xD76, + 0xD79, + 0xD80, 0xD82, 0xD84, 0xD85, @@ -291582,7 +299308,7 @@ static const UV UNI_IN__5_invlist[] = { /* for all charsets */ 0xF00, 0xF48, 0xF49, - 0xF6B, + 0xF6D, 0xF71, 0xF8C, 0xF90, @@ -291591,21 +299317,11 @@ static const UV UNI_IN__5_invlist[] = { /* for all charsets */ 0xFBD, 0xFBE, 0xFCD, - 0xFCF, - 0xFD2, + 0xFCE, + 0xFD5, 0x1000, - 0x1022, - 0x1023, - 0x1028, - 0x1029, - 0x102B, - 0x102C, - 0x1033, - 0x1036, - 0x103A, - 0x1040, - 0x105A, - 0x10A0, + 0x109A, + 0x109E, 0x10C6, 0x10D0, 0x10FD, @@ -291686,7 +299402,7 @@ static const UV UNI_IN__5_invlist[] = { /* for all charsets */ 0x1820, 0x1878, 0x1880, - 0x18AA, + 0x18AB, 0x1900, 0x191D, 0x1920, @@ -291713,13 +299429,19 @@ static const UV UNI_IN__5_invlist[] = { /* for all charsets */ 0x1B4C, 0x1B50, 0x1B7D, + 0x1B80, + 0x1BAB, + 0x1BAE, + 0x1BBA, + 0x1C00, + 0x1C38, + 0x1C3B, + 0x1C4A, + 0x1C4D, + 0x1C80, 0x1D00, - 0x1DCB, + 0x1DE7, 0x1DFE, - 0x1E9C, - 0x1EA0, - 0x1EFA, - 0x1F00, 0x1F16, 0x1F18, 0x1F1E, @@ -291752,7 +299474,7 @@ static const UV UNI_IN__5_invlist[] = { /* for all charsets */ 0x1FF6, 0x1FFF, 0x2000, - 0x2064, + 0x2065, 0x206A, 0x2072, 0x2074, @@ -291762,11 +299484,11 @@ static const UV UNI_IN__5_invlist[] = { /* for all charsets */ 0x20A0, 0x20B6, 0x20D0, - 0x20F0, + 0x20F1, 0x2100, - 0x214F, + 0x2150, 0x2153, - 0x2185, + 0x2189, 0x2190, 0x23E8, 0x2400, @@ -291774,9 +299496,11 @@ static const UV UNI_IN__5_invlist[] = { /* for all charsets */ 0x2440, 0x244B, 0x2460, - 0x269D, + 0x269E, 0x26A0, - 0x26B3, + 0x26BD, + 0x26C0, + 0x26C4, 0x2701, 0x2705, 0x2706, @@ -291801,20 +299525,20 @@ static const UV UNI_IN__5_invlist[] = { /* for all charsets */ 0x27BF, 0x27C0, 0x27CB, + 0x27CC, + 0x27CD, 0x27D0, - 0x27EC, - 0x27F0, - 0x2B1B, - 0x2B20, - 0x2B24, + 0x2B4D, + 0x2B50, + 0x2B55, 0x2C00, 0x2C2F, 0x2C30, 0x2C5F, 0x2C60, - 0x2C6D, - 0x2C74, - 0x2C78, + 0x2C70, + 0x2C71, + 0x2C7E, 0x2C80, 0x2CEB, 0x2CF9, @@ -291841,10 +299565,8 @@ static const UV UNI_IN__5_invlist[] = { /* for all charsets */ 0x2DD7, 0x2DD8, 0x2DDF, - 0x2E00, - 0x2E18, - 0x2E1C, - 0x2E1E, + 0x2DE0, + 0x2E31, 0x2E80, 0x2E9A, 0x2E9B, @@ -291860,13 +299582,13 @@ static const UV UNI_IN__5_invlist[] = { /* for all charsets */ 0x3099, 0x3100, 0x3105, - 0x312D, + 0x312E, 0x3131, 0x318F, 0x3190, 0x31B8, 0x31C0, - 0x31D0, + 0x31E4, 0x31F0, 0x321F, 0x3220, @@ -291876,19 +299598,41 @@ static const UV UNI_IN__5_invlist[] = { /* for all charsets */ 0x3300, 0x4DB6, 0x4DC0, - 0x9FBC, + 0x9FC4, 0xA000, 0xA48D, 0xA490, 0xA4C7, + 0xA500, + 0xA62C, + 0xA640, + 0xA660, + 0xA662, + 0xA674, + 0xA67C, + 0xA698, 0xA700, - 0xA71B, - 0xA720, - 0xA722, - 0xA800, + 0xA78D, + 0xA7FB, 0xA82C, 0xA840, 0xA878, + 0xA880, + 0xA8C5, + 0xA8CE, + 0xA8DA, + 0xA900, + 0xA954, + 0xA95F, + 0xA960, + 0xAA00, + 0xAA37, + 0xAA40, + 0xAA4E, + 0xAA50, + 0xAA5A, + 0xAA5C, + 0xAA60, 0xAC00, 0xD7A4, 0xD800, @@ -291924,7 +299668,7 @@ static const UV UNI_IN__5_invlist[] = { /* for all charsets */ 0xFE00, 0xFE1A, 0xFE20, - 0xFE24, + 0xFE27, 0xFE30, 0xFE53, 0xFE54, @@ -291971,6 +299715,14 @@ static const UV UNI_IN__5_invlist[] = { /* for all charsets */ 0x10134, 0x10137, 0x1018B, + 0x10190, + 0x1019C, + 0x101D0, + 0x101FE, + 0x10280, + 0x1029D, + 0x102A0, + 0x102D1, 0x10300, 0x1031F, 0x10320, @@ -292002,7 +299754,9 @@ static const UV UNI_IN__5_invlist[] = { /* for all charsets */ 0x10900, 0x1091A, 0x1091F, - 0x10920, + 0x1093A, + 0x1093F, + 0x10940, 0x10A00, 0x10A04, 0x10A05, @@ -292029,7 +299783,7 @@ static const UV UNI_IN__5_invlist[] = { /* for all charsets */ 0x1D0F6, 0x1D100, 0x1D127, - 0x1D12A, + 0x1D129, 0x1D1DE, 0x1D200, 0x1D246, @@ -292079,6 +299833,10 @@ static const UV UNI_IN__5_invlist[] = { /* for all charsets */ 0x1D7CC, 0x1D7CE, 0x1D800, + 0x1F000, + 0x1F02C, + 0x1F030, + 0x1F094, 0x1FFFE, 0x2A6D7, 0x2F800, @@ -292117,8 +299875,8 @@ static const UV UNI_IN__5_invlist[] = { /* for all charsets */ 0x110000 }; -static const UV UNI_IN__5_DOT_1_invlist[] = { /* for all charsets */ - 910, /* Number of elements */ +static const UV UNI_IN__5_DOT_2_invlist[] = { /* for all charsets */ + 990, /* Number of elements */ 148565664, /* Version and data structure type */ 0, /* 0 if the list starts at 0; 1 if it starts at the element beyond 0 */ @@ -292133,7 +299891,7 @@ static const UV UNI_IN__5_DOT_1_invlist[] = { /* for all charsets */ 0x38E, 0x3A2, 0x3A3, - 0x524, + 0x526, 0x531, 0x557, 0x559, @@ -292164,15 +299922,19 @@ static const UV UNI_IN__5_DOT_1_invlist[] = { /* for all charsets */ 0x7B2, 0x7C0, 0x7FB, - 0x901, + 0x800, + 0x82E, + 0x830, + 0x83F, + 0x900, 0x93A, 0x93C, - 0x94E, + 0x94F, 0x950, - 0x955, + 0x956, 0x958, 0x973, - 0x97B, + 0x979, 0x980, 0x981, 0x984, @@ -292201,7 +299963,7 @@ static const UV UNI_IN__5_DOT_1_invlist[] = { /* for all charsets */ 0x9DF, 0x9E4, 0x9E6, - 0x9FB, + 0x9FC, 0xA01, 0xA04, 0xA05, @@ -292477,20 +300239,12 @@ static const UV UNI_IN__5_DOT_1_invlist[] = { /* for all charsets */ 0xFBE, 0xFCD, 0xFCE, - 0xFD5, + 0xFD9, 0x1000, - 0x109A, - 0x109E, 0x10C6, 0x10D0, 0x10FD, 0x1100, - 0x115A, - 0x115F, - 0x11A3, - 0x11A8, - 0x11FA, - 0x1200, 0x1249, 0x124A, 0x124E, @@ -292528,9 +300282,7 @@ static const UV UNI_IN__5_DOT_1_invlist[] = { /* for all charsets */ 0x139A, 0x13A0, 0x13F5, - 0x1401, - 0x1677, - 0x1680, + 0x1400, 0x169D, 0x16A0, 0x16F1, @@ -292562,6 +300314,8 @@ static const UV UNI_IN__5_DOT_1_invlist[] = { /* for all charsets */ 0x1878, 0x1880, 0x18AB, + 0x18B0, + 0x18F6, 0x1900, 0x191D, 0x1920, @@ -292575,15 +300329,23 @@ static const UV UNI_IN__5_DOT_1_invlist[] = { /* for all charsets */ 0x1970, 0x1975, 0x1980, - 0x19AA, + 0x19AC, 0x19B0, 0x19CA, 0x19D0, - 0x19DA, + 0x19DB, 0x19DE, 0x1A1C, 0x1A1E, - 0x1A20, + 0x1A5F, + 0x1A60, + 0x1A7D, + 0x1A7F, + 0x1A8A, + 0x1A90, + 0x1A9A, + 0x1AA0, + 0x1AAE, 0x1B00, 0x1B4C, 0x1B50, @@ -292598,9 +300360,11 @@ static const UV UNI_IN__5_DOT_1_invlist[] = { /* for all charsets */ 0x1C4A, 0x1C4D, 0x1C80, + 0x1CD0, + 0x1CF3, 0x1D00, 0x1DE7, - 0x1DFE, + 0x1DFD, 0x1F16, 0x1F18, 0x1F1E, @@ -292641,25 +300405,25 @@ static const UV UNI_IN__5_DOT_1_invlist[] = { /* for all charsets */ 0x2090, 0x2095, 0x20A0, - 0x20B6, + 0x20B9, 0x20D0, 0x20F1, 0x2100, - 0x2150, - 0x2153, - 0x2189, + 0x218A, 0x2190, - 0x23E8, + 0x23E9, 0x2400, 0x2427, 0x2440, 0x244B, 0x2460, - 0x269E, - 0x26A0, - 0x26BD, - 0x26C0, - 0x26C4, + 0x26CE, + 0x26CF, + 0x26E2, + 0x26E3, + 0x26E4, + 0x26E8, + 0x2700, 0x2701, 0x2705, 0x2706, @@ -292673,8 +300437,6 @@ static const UV UNI_IN__5_DOT_1_invlist[] = { /* for all charsets */ 0x274F, 0x2753, 0x2756, - 0x2757, - 0x2758, 0x275F, 0x2761, 0x2795, @@ -292689,17 +300451,13 @@ static const UV UNI_IN__5_DOT_1_invlist[] = { /* for all charsets */ 0x27D0, 0x2B4D, 0x2B50, - 0x2B55, + 0x2B5A, 0x2C00, 0x2C2F, 0x2C30, 0x2C5F, 0x2C60, - 0x2C70, - 0x2C71, - 0x2C7E, - 0x2C80, - 0x2CEB, + 0x2CF2, 0x2CF9, 0x2D26, 0x2D30, @@ -292725,7 +300483,7 @@ static const UV UNI_IN__5_DOT_1_invlist[] = { /* for all charsets */ 0x2DD8, 0x2DDF, 0x2DE0, - 0x2E31, + 0x2E32, 0x2E80, 0x2E9A, 0x2E9B, @@ -292751,18 +300509,16 @@ static const UV UNI_IN__5_DOT_1_invlist[] = { /* for all charsets */ 0x31F0, 0x321F, 0x3220, - 0x3244, - 0x3250, 0x32FF, 0x3300, 0x4DB6, 0x4DC0, - 0x9FC4, + 0x9FCC, 0xA000, 0xA48D, 0xA490, 0xA4C7, - 0xA500, + 0xA4D0, 0xA62C, 0xA640, 0xA660, @@ -292770,20 +300526,32 @@ static const UV UNI_IN__5_DOT_1_invlist[] = { /* for all charsets */ 0xA674, 0xA67C, 0xA698, + 0xA6A0, + 0xA6F8, 0xA700, 0xA78D, 0xA7FB, 0xA82C, + 0xA830, + 0xA83A, 0xA840, 0xA878, 0xA880, 0xA8C5, 0xA8CE, 0xA8DA, + 0xA8E0, + 0xA8FC, 0xA900, 0xA954, 0xA95F, - 0xA960, + 0xA97D, + 0xA980, + 0xA9CE, + 0xA9CF, + 0xA9DA, + 0xA9DE, + 0xA9E0, 0xAA00, 0xAA37, 0xAA40, @@ -292791,13 +300559,25 @@ static const UV UNI_IN__5_DOT_1_invlist[] = { /* for all charsets */ 0xAA50, 0xAA5A, 0xAA5C, - 0xAA60, + 0xAA7C, + 0xAA80, + 0xAAC3, + 0xAADB, + 0xAAE0, + 0xABC0, + 0xABEE, + 0xABF0, + 0xABFA, 0xAC00, 0xD7A4, + 0xD7B0, + 0xD7C7, + 0xD7CB, + 0xD7FC, 0xD800, 0xFA2E, 0xFA30, - 0xFA6B, + 0xFA6E, 0xFA70, 0xFADA, 0xFB00, @@ -292909,9 +300689,11 @@ static const UV UNI_IN__5_DOT_1_invlist[] = { /* for all charsets */ 0x1083C, 0x1083D, 0x1083F, - 0x10840, + 0x10856, + 0x10857, + 0x10860, 0x10900, - 0x1091A, + 0x1091C, 0x1091F, 0x1093A, 0x1093F, @@ -292932,12 +300714,30 @@ static const UV UNI_IN__5_DOT_1_invlist[] = { /* for all charsets */ 0x10A48, 0x10A50, 0x10A59, + 0x10A60, + 0x10A80, + 0x10B00, + 0x10B36, + 0x10B39, + 0x10B56, + 0x10B58, + 0x10B73, + 0x10B78, + 0x10B80, + 0x10C00, + 0x10C49, + 0x10E60, + 0x10E7F, + 0x11080, + 0x110C2, 0x12000, 0x1236F, 0x12400, 0x12463, 0x12470, 0x12474, + 0x13000, + 0x1342F, 0x1D000, 0x1D0F6, 0x1D100, @@ -292996,8 +300796,46 @@ static const UV UNI_IN__5_DOT_1_invlist[] = { /* for all charsets */ 0x1F02C, 0x1F030, 0x1F094, + 0x1F100, + 0x1F10B, + 0x1F110, + 0x1F12F, + 0x1F131, + 0x1F132, + 0x1F13D, + 0x1F13E, + 0x1F13F, + 0x1F140, + 0x1F142, + 0x1F143, + 0x1F146, + 0x1F147, + 0x1F14A, + 0x1F14F, + 0x1F157, + 0x1F158, + 0x1F15F, + 0x1F160, + 0x1F179, + 0x1F17A, + 0x1F17B, + 0x1F17D, + 0x1F17F, + 0x1F180, + 0x1F18A, + 0x1F18E, + 0x1F190, + 0x1F191, + 0x1F200, + 0x1F201, + 0x1F210, + 0x1F232, + 0x1F240, + 0x1F249, 0x1FFFE, 0x2A6D7, + 0x2A700, + 0x2B735, 0x2F800, 0x2FA1E, 0x2FFFE, @@ -293034,8 +300872,8 @@ static const UV UNI_IN__5_DOT_1_invlist[] = { /* for all charsets */ 0x110000 }; -static const UV UNI_IN__5_DOT_2_invlist[] = { /* for all charsets */ - 990, /* Number of elements */ +static const UV UNI_IN__6_invlist[] = { /* for all charsets */ + 1022, /* Number of elements */ 148565664, /* Version and data structure type */ 0, /* 0 if the list starts at 0; 1 if it starts at the element beyond 0 */ @@ -293050,7 +300888,7 @@ static const UV UNI_IN__5_DOT_2_invlist[] = { /* for all charsets */ 0x38E, 0x3A2, 0x3A3, - 0x526, + 0x528, 0x531, 0x557, 0x559, @@ -293070,10 +300908,6 @@ static const UV UNI_IN__5_DOT_2_invlist[] = { /* for all charsets */ 0x606, 0x61C, 0x61E, - 0x620, - 0x621, - 0x65F, - 0x660, 0x70E, 0x70F, 0x74B, @@ -293085,14 +300919,12 @@ static const UV UNI_IN__5_DOT_2_invlist[] = { /* for all charsets */ 0x82E, 0x830, 0x83F, + 0x840, + 0x85C, + 0x85E, + 0x85F, 0x900, - 0x93A, - 0x93C, - 0x94F, - 0x950, - 0x956, - 0x958, - 0x973, + 0x978, 0x979, 0x980, 0x981, @@ -293210,7 +301042,7 @@ static const UV UNI_IN__5_DOT_2_invlist[] = { /* for all charsets */ 0xB5F, 0xB64, 0xB66, - 0xB72, + 0xB78, 0xB82, 0xB84, 0xB85, @@ -293306,15 +301138,13 @@ static const UV UNI_IN__5_DOT_2_invlist[] = { /* for all charsets */ 0xD0E, 0xD11, 0xD12, - 0xD29, - 0xD2A, - 0xD3A, + 0xD3B, 0xD3D, 0xD45, 0xD46, 0xD49, 0xD4A, - 0xD4E, + 0xD4F, 0xD57, 0xD58, 0xD60, @@ -293390,15 +301220,13 @@ static const UV UNI_IN__5_DOT_2_invlist[] = { /* for all charsets */ 0xF49, 0xF6D, 0xF71, - 0xF8C, - 0xF90, 0xF98, 0xF99, 0xFBD, 0xFBE, 0xFCD, 0xFCE, - 0xFD9, + 0xFDB, 0x1000, 0x10C6, 0x10D0, @@ -293435,7 +301263,7 @@ static const UV UNI_IN__5_DOT_2_invlist[] = { /* for all charsets */ 0x1316, 0x1318, 0x135B, - 0x135F, + 0x135D, 0x137D, 0x1380, 0x139A, @@ -293513,7 +301341,9 @@ static const UV UNI_IN__5_DOT_2_invlist[] = { /* for all charsets */ 0x1BAB, 0x1BAE, 0x1BBA, - 0x1C00, + 0x1BC0, + 0x1BF4, + 0x1BFC, 0x1C38, 0x1C3B, 0x1C4A, @@ -293523,7 +301353,7 @@ static const UV UNI_IN__5_DOT_2_invlist[] = { /* for all charsets */ 0x1CF3, 0x1D00, 0x1DE7, - 0x1DFD, + 0x1DFC, 0x1F16, 0x1F18, 0x1F1E, @@ -293562,52 +301392,26 @@ static const UV UNI_IN__5_DOT_2_invlist[] = { /* for all charsets */ 0x2074, 0x208F, 0x2090, - 0x2095, + 0x209D, 0x20A0, - 0x20B9, + 0x20BA, 0x20D0, 0x20F1, 0x2100, 0x218A, 0x2190, - 0x23E9, + 0x23F4, 0x2400, 0x2427, 0x2440, 0x244B, 0x2460, - 0x26CE, - 0x26CF, - 0x26E2, - 0x26E3, - 0x26E4, - 0x26E8, 0x2700, 0x2701, - 0x2705, - 0x2706, - 0x270A, - 0x270C, - 0x2728, - 0x2729, - 0x274C, - 0x274D, - 0x274E, - 0x274F, - 0x2753, - 0x2756, - 0x275F, - 0x2761, - 0x2795, - 0x2798, - 0x27B0, - 0x27B1, - 0x27BF, - 0x27C0, 0x27CB, 0x27CC, 0x27CD, - 0x27D0, + 0x27CE, 0x2B4D, 0x2B50, 0x2B5A, @@ -293622,8 +301426,8 @@ static const UV UNI_IN__5_DOT_2_invlist[] = { /* for all charsets */ 0x2D30, 0x2D66, 0x2D6F, - 0x2D70, - 0x2D80, + 0x2D71, + 0x2D7F, 0x2D97, 0x2DA0, 0x2DA7, @@ -293662,7 +301466,7 @@ static const UV UNI_IN__5_DOT_2_invlist[] = { /* for all charsets */ 0x3131, 0x318F, 0x3190, - 0x31B8, + 0x31BB, 0x31C0, 0x31E4, 0x31F0, @@ -293680,16 +301484,18 @@ static const UV UNI_IN__5_DOT_2_invlist[] = { /* for all charsets */ 0xA4D0, 0xA62C, 0xA640, - 0xA660, - 0xA662, 0xA674, 0xA67C, 0xA698, 0xA6A0, 0xA6F8, 0xA700, - 0xA78D, - 0xA7FB, + 0xA78F, + 0xA790, + 0xA792, + 0xA7A0, + 0xA7AA, + 0xA7FA, 0xA82C, 0xA830, 0xA83A, @@ -293723,6 +301529,16 @@ static const UV UNI_IN__5_DOT_2_invlist[] = { /* for all charsets */ 0xAAC3, 0xAADB, 0xAAE0, + 0xAB01, + 0xAB07, + 0xAB09, + 0xAB0F, + 0xAB11, + 0xAB17, + 0xAB20, + 0xAB27, + 0xAB28, + 0xAB2F, 0xABC0, 0xABEE, 0xABF0, @@ -293754,7 +301570,7 @@ static const UV UNI_IN__5_DOT_2_invlist[] = { /* for all charsets */ 0xFB43, 0xFB45, 0xFB46, - 0xFBB2, + 0xFBC2, 0xFBD3, 0xFD40, 0xFD50, @@ -293887,6 +301703,10 @@ static const UV UNI_IN__5_DOT_2_invlist[] = { /* for all charsets */ 0x10C49, 0x10E60, 0x10E7F, + 0x11000, + 0x1104E, + 0x11052, + 0x11070, 0x11080, 0x110C2, 0x12000, @@ -293897,6 +301717,10 @@ static const UV UNI_IN__5_DOT_2_invlist[] = { /* for all charsets */ 0x12474, 0x13000, 0x1342F, + 0x16800, + 0x16A39, + 0x1B000, + 0x1B002, 0x1D000, 0x1D0F6, 0x1D100, @@ -293955,46 +301779,92 @@ static const UV UNI_IN__5_DOT_2_invlist[] = { /* for all charsets */ 0x1F02C, 0x1F030, 0x1F094, + 0x1F0A0, + 0x1F0AF, + 0x1F0B1, + 0x1F0BF, + 0x1F0C1, + 0x1F0D0, + 0x1F0D1, + 0x1F0E0, 0x1F100, 0x1F10B, 0x1F110, 0x1F12F, - 0x1F131, - 0x1F132, - 0x1F13D, - 0x1F13E, - 0x1F13F, - 0x1F140, - 0x1F142, - 0x1F143, - 0x1F146, - 0x1F147, - 0x1F14A, - 0x1F14F, - 0x1F157, - 0x1F158, - 0x1F15F, - 0x1F160, - 0x1F179, - 0x1F17A, - 0x1F17B, - 0x1F17D, - 0x1F17F, - 0x1F180, - 0x1F18A, - 0x1F18E, - 0x1F190, - 0x1F191, - 0x1F200, - 0x1F201, + 0x1F130, + 0x1F16A, + 0x1F170, + 0x1F19B, + 0x1F1E6, + 0x1F203, 0x1F210, - 0x1F232, + 0x1F23B, 0x1F240, 0x1F249, + 0x1F250, + 0x1F252, + 0x1F300, + 0x1F321, + 0x1F330, + 0x1F336, + 0x1F337, + 0x1F37D, + 0x1F380, + 0x1F394, + 0x1F3A0, + 0x1F3C5, + 0x1F3C6, + 0x1F3CB, + 0x1F3E0, + 0x1F3F1, + 0x1F400, + 0x1F43F, + 0x1F440, + 0x1F441, + 0x1F442, + 0x1F4F8, + 0x1F4F9, + 0x1F4FD, + 0x1F500, + 0x1F53E, + 0x1F550, + 0x1F568, + 0x1F5FB, + 0x1F600, + 0x1F601, + 0x1F611, + 0x1F612, + 0x1F615, + 0x1F616, + 0x1F617, + 0x1F618, + 0x1F619, + 0x1F61A, + 0x1F61B, + 0x1F61C, + 0x1F61F, + 0x1F620, + 0x1F626, + 0x1F628, + 0x1F62C, + 0x1F62D, + 0x1F62E, + 0x1F630, + 0x1F634, + 0x1F635, + 0x1F641, + 0x1F645, + 0x1F650, + 0x1F680, + 0x1F6C6, + 0x1F700, + 0x1F774, 0x1FFFE, 0x2A6D7, 0x2A700, 0x2B735, + 0x2B740, + 0x2B81E, 0x2F800, 0x2FA1E, 0x2FFFE, @@ -294031,8 +301901,8 @@ static const UV UNI_IN__5_DOT_2_invlist[] = { /* for all charsets */ 0x110000 }; -static const UV UNI_IN__6_invlist[] = { /* for all charsets */ - 1022, /* Number of elements */ +static const UV UNI_IN__6_DOT_1_invlist[] = { /* for all charsets */ + 1098, /* Number of elements */ 148565664, /* Version and data structure type */ 0, /* 0 if the list starts at 0; 1 if it starts at the element beyond 0 */ @@ -294056,6 +301926,8 @@ static const UV UNI_IN__6_invlist[] = { /* for all charsets */ 0x588, 0x589, 0x58B, + 0x58F, + 0x590, 0x591, 0x5C8, 0x5D0, @@ -294063,7 +301935,7 @@ static const UV UNI_IN__6_invlist[] = { /* for all charsets */ 0x5F0, 0x5F5, 0x600, - 0x604, + 0x605, 0x606, 0x61C, 0x61E, @@ -294082,6 +301954,12 @@ static const UV UNI_IN__6_invlist[] = { /* for all charsets */ 0x85C, 0x85E, 0x85F, + 0x8A0, + 0x8A1, + 0x8A2, + 0x8AD, + 0x8E4, + 0x8FF, 0x900, 0x978, 0x979, @@ -294171,8 +302049,6 @@ static const UV UNI_IN__6_invlist[] = { /* for all charsets */ 0xAE0, 0xAE4, 0xAE6, - 0xAF0, - 0xAF1, 0xAF2, 0xB01, 0xB04, @@ -294373,7 +302249,7 @@ static const UV UNI_IN__6_invlist[] = { /* for all charsets */ 0xED0, 0xEDA, 0xEDC, - 0xEDE, + 0xEE0, 0xF00, 0xF48, 0xF49, @@ -294388,9 +302264,11 @@ static const UV UNI_IN__6_invlist[] = { /* for all charsets */ 0xFDB, 0x1000, 0x10C6, + 0x10C7, + 0x10C8, + 0x10CD, + 0x10CE, 0x10D0, - 0x10FD, - 0x1100, 0x1249, 0x124A, 0x124E, @@ -294497,10 +302375,6 @@ static const UV UNI_IN__6_invlist[] = { /* for all charsets */ 0x1B50, 0x1B7D, 0x1B80, - 0x1BAB, - 0x1BAE, - 0x1BBA, - 0x1BC0, 0x1BF4, 0x1BFC, 0x1C38, @@ -294508,8 +302382,10 @@ static const UV UNI_IN__6_invlist[] = { /* for all charsets */ 0x1C4A, 0x1C4D, 0x1C80, + 0x1CC0, + 0x1CC8, 0x1CD0, - 0x1CF3, + 0x1CF7, 0x1D00, 0x1DE7, 0x1DFC, @@ -294567,10 +302443,6 @@ static const UV UNI_IN__6_invlist[] = { /* for all charsets */ 0x2460, 0x2700, 0x2701, - 0x27CB, - 0x27CC, - 0x27CD, - 0x27CE, 0x2B4D, 0x2B50, 0x2B5A, @@ -294579,11 +302451,15 @@ static const UV UNI_IN__6_invlist[] = { /* for all charsets */ 0x2C30, 0x2C5F, 0x2C60, - 0x2CF2, + 0x2CF4, 0x2CF9, 0x2D26, + 0x2D27, + 0x2D28, + 0x2D2D, + 0x2D2E, 0x2D30, - 0x2D66, + 0x2D68, 0x2D6F, 0x2D71, 0x2D7F, @@ -294605,7 +302481,7 @@ static const UV UNI_IN__6_invlist[] = { /* for all charsets */ 0x2DD8, 0x2DDF, 0x2DE0, - 0x2E32, + 0x2E3C, 0x2E80, 0x2E9A, 0x2E9B, @@ -294635,7 +302511,7 @@ static const UV UNI_IN__6_invlist[] = { /* for all charsets */ 0x3300, 0x4DB6, 0x4DC0, - 0x9FCC, + 0x9FCD, 0xA000, 0xA48D, 0xA490, @@ -294643,18 +302519,16 @@ static const UV UNI_IN__6_invlist[] = { /* for all charsets */ 0xA4D0, 0xA62C, 0xA640, - 0xA674, - 0xA67C, 0xA698, - 0xA6A0, + 0xA69F, 0xA6F8, 0xA700, 0xA78F, 0xA790, - 0xA792, + 0xA794, 0xA7A0, - 0xA7AA, - 0xA7FA, + 0xA7AB, + 0xA7F8, 0xA82C, 0xA830, 0xA83A, @@ -294687,7 +302561,7 @@ static const UV UNI_IN__6_invlist[] = { /* for all charsets */ 0xAA80, 0xAAC3, 0xAADB, - 0xAAE0, + 0xAAF7, 0xAB01, 0xAB07, 0xAB09, @@ -294709,8 +302583,6 @@ static const UV UNI_IN__6_invlist[] = { /* for all charsets */ 0xD7CB, 0xD7FC, 0xD800, - 0xFA2E, - 0xFA30, 0xFA6E, 0xFA70, 0xFADA, @@ -294832,6 +302704,10 @@ static const UV UNI_IN__6_invlist[] = { /* for all charsets */ 0x1093A, 0x1093F, 0x10940, + 0x10980, + 0x109B8, + 0x109BE, + 0x109C0, 0x10A00, 0x10A04, 0x10A05, @@ -294868,6 +302744,22 @@ static const UV UNI_IN__6_invlist[] = { /* for all charsets */ 0x11070, 0x11080, 0x110C2, + 0x110D0, + 0x110E9, + 0x110F0, + 0x110FA, + 0x11100, + 0x11135, + 0x11136, + 0x11144, + 0x11180, + 0x111C9, + 0x111D0, + 0x111DA, + 0x11680, + 0x116B8, + 0x116C0, + 0x116CA, 0x12000, 0x1236F, 0x12400, @@ -294878,6 +302770,12 @@ static const UV UNI_IN__6_invlist[] = { /* for all charsets */ 0x1342F, 0x16800, 0x16A39, + 0x16F00, + 0x16F45, + 0x16F50, + 0x16F7F, + 0x16F8F, + 0x16FA0, 0x1B000, 0x1B002, 0x1D000, @@ -294934,6 +302832,74 @@ static const UV UNI_IN__6_invlist[] = { /* for all charsets */ 0x1D7CC, 0x1D7CE, 0x1D800, + 0x1EE00, + 0x1EE04, + 0x1EE05, + 0x1EE20, + 0x1EE21, + 0x1EE23, + 0x1EE24, + 0x1EE25, + 0x1EE27, + 0x1EE28, + 0x1EE29, + 0x1EE33, + 0x1EE34, + 0x1EE38, + 0x1EE39, + 0x1EE3A, + 0x1EE3B, + 0x1EE3C, + 0x1EE42, + 0x1EE43, + 0x1EE47, + 0x1EE48, + 0x1EE49, + 0x1EE4A, + 0x1EE4B, + 0x1EE4C, + 0x1EE4D, + 0x1EE50, + 0x1EE51, + 0x1EE53, + 0x1EE54, + 0x1EE55, + 0x1EE57, + 0x1EE58, + 0x1EE59, + 0x1EE5A, + 0x1EE5B, + 0x1EE5C, + 0x1EE5D, + 0x1EE5E, + 0x1EE5F, + 0x1EE60, + 0x1EE61, + 0x1EE63, + 0x1EE64, + 0x1EE65, + 0x1EE67, + 0x1EE6B, + 0x1EE6C, + 0x1EE73, + 0x1EE74, + 0x1EE78, + 0x1EE79, + 0x1EE7D, + 0x1EE7E, + 0x1EE7F, + 0x1EE80, + 0x1EE8A, + 0x1EE8B, + 0x1EE9C, + 0x1EEA1, + 0x1EEA4, + 0x1EEA5, + 0x1EEAA, + 0x1EEAB, + 0x1EEBC, + 0x1EEF0, + 0x1EEF2, 0x1F000, 0x1F02C, 0x1F030, @@ -294951,7 +302917,7 @@ static const UV UNI_IN__6_invlist[] = { /* for all charsets */ 0x1F110, 0x1F12F, 0x1F130, - 0x1F16A, + 0x1F16C, 0x1F170, 0x1F19B, 0x1F1E6, @@ -294986,31 +302952,11 @@ static const UV UNI_IN__6_invlist[] = { /* for all charsets */ 0x1F4FD, 0x1F500, 0x1F53E, + 0x1F540, + 0x1F544, 0x1F550, 0x1F568, 0x1F5FB, - 0x1F600, - 0x1F601, - 0x1F611, - 0x1F612, - 0x1F615, - 0x1F616, - 0x1F617, - 0x1F618, - 0x1F619, - 0x1F61A, - 0x1F61B, - 0x1F61C, - 0x1F61F, - 0x1F620, - 0x1F626, - 0x1F628, - 0x1F62C, - 0x1F62D, - 0x1F62E, - 0x1F630, - 0x1F634, - 0x1F635, 0x1F641, 0x1F645, 0x1F650, @@ -295060,7 +303006,7 @@ static const UV UNI_IN__6_invlist[] = { /* for all charsets */ 0x110000 }; -static const UV UNI_IN__6_DOT_1_invlist[] = { /* for all charsets */ +static const UV UNI_IN__6_DOT_2_invlist[] = { /* for all charsets */ 1098, /* Number of elements */ 148565664, /* Version and data structure type */ 0, /* 0 if the list starts at 0; @@ -295588,7 +303534,7 @@ static const UV UNI_IN__6_DOT_1_invlist[] = { /* for all charsets */ 0x2090, 0x209D, 0x20A0, - 0x20BA, + 0x20BB, 0x20D0, 0x20F1, 0x2100, @@ -296165,7 +304111,7 @@ static const UV UNI_IN__6_DOT_1_invlist[] = { /* for all charsets */ 0x110000 }; -static const UV UNI_IN__6_DOT_2_invlist[] = { /* for all charsets */ +static const UV UNI_IN__6_DOT_3_invlist[] = { /* for all charsets */ 1098, /* Number of elements */ 148565664, /* Version and data structure type */ 0, /* 0 if the list starts at 0; @@ -296201,7 +304147,7 @@ static const UV UNI_IN__6_DOT_2_invlist[] = { /* for all charsets */ 0x600, 0x605, 0x606, - 0x61C, + 0x61D, 0x61E, 0x70E, 0x70F, @@ -296686,7 +304632,7 @@ static const UV UNI_IN__6_DOT_2_invlist[] = { /* for all charsets */ 0x1FFF, 0x2000, 0x2065, - 0x206A, + 0x2066, 0x2072, 0x2074, 0x208F, @@ -297270,15 +305216,15 @@ static const UV UNI_IN__6_DOT_2_invlist[] = { /* for all charsets */ 0x110000 }; -static const UV UNI_IN__6_DOT_3_invlist[] = { /* for all charsets */ - 1098, /* Number of elements */ +static const UV UNI_IN__7_invlist[] = { /* for all charsets */ + 1220, /* Number of elements */ 148565664, /* Version and data structure type */ 0, /* 0 if the list starts at 0; 1 if it starts at the element beyond 0 */ 0x0, 0x378, 0x37A, - 0x37F, + 0x380, 0x384, 0x38B, 0x38C, @@ -297286,7 +305232,7 @@ static const UV UNI_IN__6_DOT_3_invlist[] = { /* for all charsets */ 0x38E, 0x3A2, 0x3A3, - 0x528, + 0x530, 0x531, 0x557, 0x559, @@ -297295,7 +305241,7 @@ static const UV UNI_IN__6_DOT_3_invlist[] = { /* for all charsets */ 0x588, 0x589, 0x58B, - 0x58F, + 0x58D, 0x590, 0x591, 0x5C8, @@ -297304,8 +305250,6 @@ static const UV UNI_IN__6_DOT_3_invlist[] = { /* for all charsets */ 0x5F0, 0x5F5, 0x600, - 0x605, - 0x606, 0x61D, 0x61E, 0x70E, @@ -297324,16 +305268,8 @@ static const UV UNI_IN__6_DOT_3_invlist[] = { /* for all charsets */ 0x85E, 0x85F, 0x8A0, - 0x8A1, - 0x8A2, - 0x8AD, + 0x8B3, 0x8E4, - 0x8FF, - 0x900, - 0x978, - 0x979, - 0x980, - 0x981, 0x984, 0x985, 0x98D, @@ -297479,7 +305415,7 @@ static const UV UNI_IN__6_DOT_3_invlist[] = { /* for all charsets */ 0xBD8, 0xBE6, 0xBFB, - 0xC01, + 0xC00, 0xC04, 0xC05, 0xC0D, @@ -297488,8 +305424,6 @@ static const UV UNI_IN__6_DOT_3_invlist[] = { /* for all charsets */ 0xC12, 0xC29, 0xC2A, - 0xC34, - 0xC35, 0xC3A, 0xC3D, 0xC45, @@ -297507,7 +305441,7 @@ static const UV UNI_IN__6_DOT_3_invlist[] = { /* for all charsets */ 0xC70, 0xC78, 0xC80, - 0xC82, + 0xC81, 0xC84, 0xC85, 0xC8D, @@ -297535,7 +305469,7 @@ static const UV UNI_IN__6_DOT_3_invlist[] = { /* for all charsets */ 0xCF0, 0xCF1, 0xCF3, - 0xD02, + 0xD01, 0xD04, 0xD05, 0xD0D, @@ -297577,6 +305511,8 @@ static const UV UNI_IN__6_DOT_3_invlist[] = { /* for all charsets */ 0xDD7, 0xDD8, 0xDE0, + 0xDE6, + 0xDF0, 0xDF2, 0xDF5, 0xE01, @@ -297678,7 +305614,7 @@ static const UV UNI_IN__6_DOT_3_invlist[] = { /* for all charsets */ 0x1400, 0x169D, 0x16A0, - 0x16F1, + 0x16F9, 0x1700, 0x170D, 0x170E, @@ -297710,7 +305646,7 @@ static const UV UNI_IN__6_DOT_3_invlist[] = { /* for all charsets */ 0x18B0, 0x18F6, 0x1900, - 0x191D, + 0x191F, 0x1920, 0x192C, 0x1930, @@ -297739,6 +305675,8 @@ static const UV UNI_IN__6_DOT_3_invlist[] = { /* for all charsets */ 0x1A9A, 0x1AA0, 0x1AAE, + 0x1AB0, + 0x1ABF, 0x1B00, 0x1B4C, 0x1B50, @@ -297755,8 +305693,10 @@ static const UV UNI_IN__6_DOT_3_invlist[] = { /* for all charsets */ 0x1CC8, 0x1CD0, 0x1CF7, + 0x1CF8, + 0x1CFA, 0x1D00, - 0x1DE7, + 0x1DF6, 0x1DFC, 0x1F16, 0x1F18, @@ -297798,23 +305738,27 @@ static const UV UNI_IN__6_DOT_3_invlist[] = { /* for all charsets */ 0x2090, 0x209D, 0x20A0, - 0x20BB, + 0x20BE, 0x20D0, 0x20F1, 0x2100, 0x218A, 0x2190, - 0x23F4, + 0x23FB, 0x2400, 0x2427, 0x2440, 0x244B, 0x2460, - 0x2700, - 0x2701, - 0x2B4D, - 0x2B50, - 0x2B5A, + 0x2B74, + 0x2B76, + 0x2B96, + 0x2B98, + 0x2BBA, + 0x2BBD, + 0x2BC9, + 0x2BCA, + 0x2BD2, 0x2C00, 0x2C2F, 0x2C30, @@ -297850,7 +305794,7 @@ static const UV UNI_IN__6_DOT_3_invlist[] = { /* for all charsets */ 0x2DD8, 0x2DDF, 0x2DE0, - 0x2E3C, + 0x2E43, 0x2E80, 0x2E9A, 0x2E9B, @@ -297888,16 +305832,16 @@ static const UV UNI_IN__6_DOT_3_invlist[] = { /* for all charsets */ 0xA4D0, 0xA62C, 0xA640, - 0xA698, + 0xA69E, 0xA69F, 0xA6F8, 0xA700, 0xA78F, 0xA790, - 0xA794, - 0xA7A0, - 0xA7AB, - 0xA7F8, + 0xA7AE, + 0xA7B0, + 0xA7B2, + 0xA7F7, 0xA82C, 0xA830, 0xA83A, @@ -297918,7 +305862,7 @@ static const UV UNI_IN__6_DOT_3_invlist[] = { /* for all charsets */ 0xA9CF, 0xA9DA, 0xA9DE, - 0xA9E0, + 0xA9FF, 0xAA00, 0xAA37, 0xAA40, @@ -297926,8 +305870,6 @@ static const UV UNI_IN__6_DOT_3_invlist[] = { /* for all charsets */ 0xAA50, 0xAA5A, 0xAA5C, - 0xAA7C, - 0xAA80, 0xAAC3, 0xAADB, 0xAAF7, @@ -297941,6 +305883,10 @@ static const UV UNI_IN__6_DOT_3_invlist[] = { /* for all charsets */ 0xAB27, 0xAB28, 0xAB2F, + 0xAB30, + 0xAB60, + 0xAB64, + 0xAB66, 0xABC0, 0xABEE, 0xABF0, @@ -297982,7 +305928,7 @@ static const UV UNI_IN__6_DOT_3_invlist[] = { /* for all charsets */ 0xFE00, 0xFE1A, 0xFE20, - 0xFE27, + 0xFE2E, 0xFE30, 0xFE53, 0xFE54, @@ -298028,21 +305974,25 @@ static const UV UNI_IN__6_DOT_3_invlist[] = { /* for all charsets */ 0x10107, 0x10134, 0x10137, - 0x1018B, + 0x1018D, 0x10190, 0x1019C, + 0x101A0, + 0x101A1, 0x101D0, 0x101FE, 0x10280, 0x1029D, 0x102A0, 0x102D1, + 0x102E0, + 0x102FC, 0x10300, - 0x1031F, - 0x10320, 0x10324, 0x10330, 0x1034B, + 0x10350, + 0x1037B, 0x10380, 0x1039E, 0x1039F, @@ -298053,6 +306003,18 @@ static const UV UNI_IN__6_DOT_3_invlist[] = { /* for all charsets */ 0x1049E, 0x104A0, 0x104AA, + 0x10500, + 0x10528, + 0x10530, + 0x10564, + 0x1056F, + 0x10570, + 0x10600, + 0x10737, + 0x10740, + 0x10756, + 0x10760, + 0x10768, 0x10800, 0x10806, 0x10808, @@ -298066,7 +306028,9 @@ static const UV UNI_IN__6_DOT_3_invlist[] = { /* for all charsets */ 0x1083F, 0x10856, 0x10857, - 0x10860, + 0x1089F, + 0x108A7, + 0x108B0, 0x10900, 0x1091C, 0x1091F, @@ -298094,7 +306058,11 @@ static const UV UNI_IN__6_DOT_3_invlist[] = { /* for all charsets */ 0x10A50, 0x10A59, 0x10A60, - 0x10A80, + 0x10AA0, + 0x10AC0, + 0x10AE7, + 0x10AEB, + 0x10AF7, 0x10B00, 0x10B36, 0x10B39, @@ -298102,7 +306070,11 @@ static const UV UNI_IN__6_DOT_3_invlist[] = { /* for all charsets */ 0x10B58, 0x10B73, 0x10B78, - 0x10B80, + 0x10B92, + 0x10B99, + 0x10B9D, + 0x10BA9, + 0x10BB0, 0x10C00, 0x10C49, 0x10E60, @@ -298111,7 +306083,7 @@ static const UV UNI_IN__6_DOT_3_invlist[] = { /* for all charsets */ 0x1104E, 0x11052, 0x11070, - 0x11080, + 0x1107F, 0x110C2, 0x110D0, 0x110E9, @@ -298121,24 +306093,104 @@ static const UV UNI_IN__6_DOT_3_invlist[] = { /* for all charsets */ 0x11135, 0x11136, 0x11144, + 0x11150, + 0x11177, 0x11180, 0x111C9, + 0x111CD, + 0x111CE, 0x111D0, - 0x111DA, + 0x111DB, + 0x111E1, + 0x111F5, + 0x11200, + 0x11212, + 0x11213, + 0x1123E, + 0x112B0, + 0x112EB, + 0x112F0, + 0x112FA, + 0x11301, + 0x11304, + 0x11305, + 0x1130D, + 0x1130F, + 0x11311, + 0x11313, + 0x11329, + 0x1132A, + 0x11331, + 0x11332, + 0x11334, + 0x11335, + 0x1133A, + 0x1133C, + 0x11345, + 0x11347, + 0x11349, + 0x1134B, + 0x1134E, + 0x11357, + 0x11358, + 0x1135D, + 0x11364, + 0x11366, + 0x1136D, + 0x11370, + 0x11375, + 0x11480, + 0x114C8, + 0x114D0, + 0x114DA, + 0x11580, + 0x115B6, + 0x115B8, + 0x115CA, + 0x11600, + 0x11645, + 0x11650, + 0x1165A, 0x11680, 0x116B8, 0x116C0, 0x116CA, + 0x118A0, + 0x118F3, + 0x118FF, + 0x11900, + 0x11AC0, + 0x11AF9, 0x12000, - 0x1236F, + 0x12399, 0x12400, - 0x12463, + 0x1246F, 0x12470, - 0x12474, + 0x12475, 0x13000, 0x1342F, 0x16800, 0x16A39, + 0x16A40, + 0x16A5F, + 0x16A60, + 0x16A6A, + 0x16A6E, + 0x16A70, + 0x16AD0, + 0x16AEE, + 0x16AF0, + 0x16AF6, + 0x16B00, + 0x16B46, + 0x16B50, + 0x16B5A, + 0x16B5B, + 0x16B62, + 0x16B63, + 0x16B78, + 0x16B7D, + 0x16B90, 0x16F00, 0x16F45, 0x16F50, @@ -298147,6 +306199,16 @@ static const UV UNI_IN__6_DOT_3_invlist[] = { /* for all charsets */ 0x16FA0, 0x1B000, 0x1B002, + 0x1BC00, + 0x1BC6B, + 0x1BC70, + 0x1BC7D, + 0x1BC80, + 0x1BC89, + 0x1BC90, + 0x1BC9A, + 0x1BC9C, + 0x1BCA4, 0x1D000, 0x1D0F6, 0x1D100, @@ -298201,6 +306263,10 @@ static const UV UNI_IN__6_DOT_3_invlist[] = { /* for all charsets */ 0x1D7CC, 0x1D7CE, 0x1D800, + 0x1E800, + 0x1E8C5, + 0x1E8C7, + 0x1E8D7, 0x1EE00, 0x1EE04, 0x1EE05, @@ -298276,13 +306342,13 @@ static const UV UNI_IN__6_DOT_3_invlist[] = { /* for all charsets */ 0x1F0A0, 0x1F0AF, 0x1F0B1, - 0x1F0BF, + 0x1F0C0, 0x1F0C1, 0x1F0D0, 0x1F0D1, - 0x1F0E0, + 0x1F0F6, 0x1F100, - 0x1F10B, + 0x1F10D, 0x1F110, 0x1F12F, 0x1F130, @@ -298298,41 +306364,43 @@ static const UV UNI_IN__6_DOT_3_invlist[] = { /* for all charsets */ 0x1F250, 0x1F252, 0x1F300, - 0x1F321, + 0x1F32D, 0x1F330, - 0x1F336, - 0x1F337, - 0x1F37D, + 0x1F37E, 0x1F380, - 0x1F394, - 0x1F3A0, - 0x1F3C5, - 0x1F3C6, - 0x1F3CB, - 0x1F3E0, - 0x1F3F1, + 0x1F3CF, + 0x1F3D4, + 0x1F3F8, 0x1F400, - 0x1F43F, - 0x1F440, - 0x1F441, - 0x1F442, - 0x1F4F8, - 0x1F4F9, - 0x1F4FD, + 0x1F4FF, 0x1F500, - 0x1F53E, - 0x1F540, - 0x1F544, + 0x1F54B, 0x1F550, - 0x1F568, - 0x1F5FB, - 0x1F641, + 0x1F57A, + 0x1F57B, + 0x1F5A4, + 0x1F5A5, + 0x1F643, 0x1F645, - 0x1F650, - 0x1F680, - 0x1F6C6, + 0x1F6D0, + 0x1F6E0, + 0x1F6ED, + 0x1F6F0, + 0x1F6F4, 0x1F700, 0x1F774, + 0x1F780, + 0x1F7D5, + 0x1F800, + 0x1F80C, + 0x1F810, + 0x1F848, + 0x1F850, + 0x1F85A, + 0x1F860, + 0x1F888, + 0x1F890, + 0x1F8AE, 0x1FFFE, 0x2A6D7, 0x2A700, @@ -298375,8 +306443,8 @@ static const UV UNI_IN__6_DOT_3_invlist[] = { /* for all charsets */ 0x110000 }; -static const UV UNI_IN__7_invlist[] = { /* for all charsets */ - 1220, /* Number of elements */ +static const UV UNI_IN__8_invlist[] = { /* for all charsets */ + 1246, /* Number of elements */ 148565664, /* Version and data structure type */ 0, /* 0 if the list starts at 0; 1 if it starts at the element beyond 0 */ @@ -298427,8 +306495,8 @@ static const UV UNI_IN__7_invlist[] = { /* for all charsets */ 0x85E, 0x85F, 0x8A0, - 0x8B3, - 0x8E4, + 0x8B5, + 0x8E3, 0x984, 0x985, 0x98D, @@ -298514,6 +306582,8 @@ static const UV UNI_IN__7_invlist[] = { /* for all charsets */ 0xAE4, 0xAE6, 0xAF2, + 0xAF9, + 0xAFA, 0xB01, 0xB04, 0xB05, @@ -298593,7 +306663,7 @@ static const UV UNI_IN__7_invlist[] = { /* for all charsets */ 0xC55, 0xC57, 0xC58, - 0xC5A, + 0xC5B, 0xC60, 0xC64, 0xC66, @@ -298644,7 +306714,7 @@ static const UV UNI_IN__7_invlist[] = { /* for all charsets */ 0xD4F, 0xD57, 0xD58, - 0xD60, + 0xD5F, 0xD64, 0xD66, 0xD76, @@ -298769,7 +306839,9 @@ static const UV UNI_IN__7_invlist[] = { /* for all charsets */ 0x1380, 0x139A, 0x13A0, - 0x13F5, + 0x13F6, + 0x13F8, + 0x13FE, 0x1400, 0x169D, 0x16A0, @@ -298897,11 +306969,11 @@ static const UV UNI_IN__7_invlist[] = { /* for all charsets */ 0x2090, 0x209D, 0x20A0, - 0x20BE, + 0x20BF, 0x20D0, 0x20F1, 0x2100, - 0x218A, + 0x218C, 0x2190, 0x23FB, 0x2400, @@ -298918,6 +306990,8 @@ static const UV UNI_IN__7_invlist[] = { /* for all charsets */ 0x2BC9, 0x2BCA, 0x2BD2, + 0x2BEC, + 0x2BF0, 0x2C00, 0x2C2F, 0x2C30, @@ -298983,7 +307057,7 @@ static const UV UNI_IN__7_invlist[] = { /* for all charsets */ 0x3300, 0x4DB6, 0x4DC0, - 0x9FCD, + 0x9FD6, 0xA000, 0xA48D, 0xA490, @@ -298991,15 +307065,11 @@ static const UV UNI_IN__7_invlist[] = { /* for all charsets */ 0xA4D0, 0xA62C, 0xA640, - 0xA69E, - 0xA69F, 0xA6F8, 0xA700, - 0xA78F, - 0xA790, 0xA7AE, 0xA7B0, - 0xA7B2, + 0xA7B8, 0xA7F7, 0xA82C, 0xA830, @@ -299011,7 +307081,7 @@ static const UV UNI_IN__7_invlist[] = { /* for all charsets */ 0xA8CE, 0xA8DA, 0xA8E0, - 0xA8FC, + 0xA8FE, 0xA900, 0xA954, 0xA95F, @@ -299043,10 +307113,8 @@ static const UV UNI_IN__7_invlist[] = { /* for all charsets */ 0xAB28, 0xAB2F, 0xAB30, - 0xAB60, - 0xAB64, 0xAB66, - 0xABC0, + 0xAB70, 0xABEE, 0xABF0, 0xABFA, @@ -299087,8 +307155,6 @@ static const UV UNI_IN__7_invlist[] = { /* for all charsets */ 0xFE00, 0xFE1A, 0xFE20, - 0xFE2E, - 0xFE30, 0xFE53, 0xFE54, 0xFE67, @@ -299190,7 +307256,11 @@ static const UV UNI_IN__7_invlist[] = { /* for all charsets */ 0x1089F, 0x108A7, 0x108B0, - 0x10900, + 0x108E0, + 0x108F3, + 0x108F4, + 0x108F6, + 0x108FB, 0x1091C, 0x1091F, 0x1093A, @@ -299198,9 +307268,9 @@ static const UV UNI_IN__7_invlist[] = { /* for all charsets */ 0x10940, 0x10980, 0x109B8, - 0x109BE, - 0x109C0, - 0x10A00, + 0x109BC, + 0x109D0, + 0x109D2, 0x10A04, 0x10A05, 0x10A07, @@ -299236,6 +307306,12 @@ static const UV UNI_IN__7_invlist[] = { /* for all charsets */ 0x10BB0, 0x10C00, 0x10C49, + 0x10C80, + 0x10CB3, + 0x10CC0, + 0x10CF3, + 0x10CFA, + 0x10D00, 0x10E60, 0x10E7F, 0x11000, @@ -299255,22 +307331,30 @@ static const UV UNI_IN__7_invlist[] = { /* for all charsets */ 0x11150, 0x11177, 0x11180, - 0x111C9, - 0x111CD, 0x111CE, 0x111D0, - 0x111DB, + 0x111E0, 0x111E1, 0x111F5, 0x11200, 0x11212, 0x11213, 0x1123E, + 0x11280, + 0x11287, + 0x11288, + 0x11289, + 0x1128A, + 0x1128E, + 0x1128F, + 0x1129E, + 0x1129F, + 0x112AA, 0x112B0, 0x112EB, 0x112F0, 0x112FA, - 0x11301, + 0x11300, 0x11304, 0x11305, 0x1130D, @@ -299290,6 +307374,8 @@ static const UV UNI_IN__7_invlist[] = { /* for all charsets */ 0x11349, 0x1134B, 0x1134E, + 0x11350, + 0x11351, 0x11357, 0x11358, 0x1135D, @@ -299305,7 +307391,7 @@ static const UV UNI_IN__7_invlist[] = { /* for all charsets */ 0x11580, 0x115B6, 0x115B8, - 0x115CA, + 0x115DE, 0x11600, 0x11645, 0x11650, @@ -299314,6 +307400,12 @@ static const UV UNI_IN__7_invlist[] = { /* for all charsets */ 0x116B8, 0x116C0, 0x116CA, + 0x11700, + 0x1171A, + 0x1171D, + 0x1172C, + 0x11730, + 0x11740, 0x118A0, 0x118F3, 0x118FF, @@ -299321,13 +307413,17 @@ static const UV UNI_IN__7_invlist[] = { /* for all charsets */ 0x11AC0, 0x11AF9, 0x12000, - 0x12399, + 0x1239A, 0x12400, 0x1246F, 0x12470, 0x12475, + 0x12480, + 0x12544, 0x13000, 0x1342F, + 0x14400, + 0x14647, 0x16800, 0x16A39, 0x16A40, @@ -299373,7 +307469,7 @@ static const UV UNI_IN__7_invlist[] = { /* for all charsets */ 0x1D100, 0x1D127, 0x1D129, - 0x1D1DE, + 0x1D1E9, 0x1D200, 0x1D246, 0x1D300, @@ -299421,7 +307517,11 @@ static const UV UNI_IN__7_invlist[] = { /* for all charsets */ 0x1D6A8, 0x1D7CC, 0x1D7CE, - 0x1D800, + 0x1DA8C, + 0x1DA9B, + 0x1DAA0, + 0x1DAA1, + 0x1DAB0, 0x1E800, 0x1E8C5, 0x1E8C7, @@ -299523,25 +307623,11 @@ static const UV UNI_IN__7_invlist[] = { /* for all charsets */ 0x1F250, 0x1F252, 0x1F300, - 0x1F32D, - 0x1F330, - 0x1F37E, - 0x1F380, - 0x1F3CF, - 0x1F3D4, - 0x1F3F8, - 0x1F400, - 0x1F4FF, - 0x1F500, - 0x1F54B, - 0x1F550, 0x1F57A, 0x1F57B, 0x1F5A4, 0x1F5A5, - 0x1F643, - 0x1F645, - 0x1F6D0, + 0x1F6D1, 0x1F6E0, 0x1F6ED, 0x1F6F0, @@ -299560,12 +307646,20 @@ static const UV UNI_IN__7_invlist[] = { /* for all charsets */ 0x1F888, 0x1F890, 0x1F8AE, + 0x1F910, + 0x1F919, + 0x1F980, + 0x1F985, + 0x1F9C0, + 0x1F9C1, 0x1FFFE, 0x2A6D7, 0x2A700, 0x2B735, 0x2B740, 0x2B81E, + 0x2B820, + 0x2CEA2, 0x2F800, 0x2FA1E, 0x2FFFE, @@ -299602,8 +307696,8 @@ static const UV UNI_IN__7_invlist[] = { /* for all charsets */ 0x110000 }; -static const UV UNI_IN__8_invlist[] = { /* for all charsets */ - 1246, /* Number of elements */ +static const UV UNI_IN__9_invlist[] = { /* for all charsets */ + 1296, /* Number of elements */ 148565664, /* Version and data structure type */ 0, /* 0 if the list starts at 0; 1 if it starts at the element beyond 0 */ @@ -299655,7 +307749,9 @@ static const UV UNI_IN__8_invlist[] = { /* for all charsets */ 0x85F, 0x8A0, 0x8B5, - 0x8E3, + 0x8B6, + 0x8BE, + 0x8D4, 0x984, 0x985, 0x98D, @@ -299828,8 +307924,6 @@ static const UV UNI_IN__8_invlist[] = { /* for all charsets */ 0xC66, 0xC70, 0xC78, - 0xC80, - 0xC81, 0xC84, 0xC85, 0xC8D, @@ -299870,14 +307964,10 @@ static const UV UNI_IN__8_invlist[] = { /* for all charsets */ 0xD46, 0xD49, 0xD4A, - 0xD4F, - 0xD57, - 0xD58, - 0xD5F, + 0xD50, + 0xD54, 0xD64, 0xD66, - 0xD76, - 0xD79, 0xD80, 0xD82, 0xD84, @@ -300078,7 +308168,7 @@ static const UV UNI_IN__8_invlist[] = { /* for all charsets */ 0x1C3B, 0x1C4A, 0x1C4D, - 0x1C80, + 0x1C89, 0x1CC0, 0x1CC8, 0x1CD0, @@ -300087,7 +308177,7 @@ static const UV UNI_IN__8_invlist[] = { /* for all charsets */ 0x1CFA, 0x1D00, 0x1DF6, - 0x1DFC, + 0x1DFB, 0x1F16, 0x1F18, 0x1F1E, @@ -300134,7 +308224,7 @@ static const UV UNI_IN__8_invlist[] = { /* for all charsets */ 0x2100, 0x218C, 0x2190, - 0x23FB, + 0x23FF, 0x2400, 0x2427, 0x2440, @@ -300186,7 +308276,7 @@ static const UV UNI_IN__8_invlist[] = { /* for all charsets */ 0x2DD8, 0x2DDF, 0x2DE0, - 0x2E43, + 0x2E45, 0x2E80, 0x2E9A, 0x2E9B, @@ -300226,7 +308316,7 @@ static const UV UNI_IN__8_invlist[] = { /* for all charsets */ 0xA640, 0xA6F8, 0xA700, - 0xA7AE, + 0xA7AF, 0xA7B0, 0xA7B8, 0xA7F7, @@ -300236,7 +308326,7 @@ static const UV UNI_IN__8_invlist[] = { /* for all charsets */ 0xA840, 0xA878, 0xA880, - 0xA8C5, + 0xA8C6, 0xA8CE, 0xA8DA, 0xA8E0, @@ -300358,7 +308448,7 @@ static const UV UNI_IN__8_invlist[] = { /* for all charsets */ 0x10107, 0x10134, 0x10137, - 0x1018D, + 0x1018F, 0x10190, 0x1019C, 0x101A0, @@ -300387,6 +308477,10 @@ static const UV UNI_IN__8_invlist[] = { /* for all charsets */ 0x1049E, 0x104A0, 0x104AA, + 0x104B0, + 0x104D4, + 0x104D8, + 0x104FC, 0x10500, 0x10528, 0x10530, @@ -300498,7 +308592,7 @@ static const UV UNI_IN__8_invlist[] = { /* for all charsets */ 0x11200, 0x11212, 0x11213, - 0x1123E, + 0x1123F, 0x11280, 0x11287, 0x11288, @@ -300543,6 +308637,12 @@ static const UV UNI_IN__8_invlist[] = { /* for all charsets */ 0x1136D, 0x11370, 0x11375, + 0x11400, + 0x1145A, + 0x1145B, + 0x1145C, + 0x1145D, + 0x1145E, 0x11480, 0x114C8, 0x114D0, @@ -300555,6 +308655,8 @@ static const UV UNI_IN__8_invlist[] = { /* for all charsets */ 0x11645, 0x11650, 0x1165A, + 0x11660, + 0x1166D, 0x11680, 0x116B8, 0x116C0, @@ -300571,6 +308673,20 @@ static const UV UNI_IN__8_invlist[] = { /* for all charsets */ 0x11900, 0x11AC0, 0x11AF9, + 0x11C00, + 0x11C09, + 0x11C0A, + 0x11C37, + 0x11C38, + 0x11C46, + 0x11C50, + 0x11C6D, + 0x11C70, + 0x11C90, + 0x11C92, + 0x11CA8, + 0x11CA9, + 0x11CB7, 0x12000, 0x1239A, 0x12400, @@ -300611,6 +308727,12 @@ static const UV UNI_IN__8_invlist[] = { /* for all charsets */ 0x16F7F, 0x16F8F, 0x16FA0, + 0x16FE0, + 0x16FE1, + 0x17000, + 0x187ED, + 0x18800, + 0x18AF3, 0x1B000, 0x1B002, 0x1BC00, @@ -300681,10 +308803,26 @@ static const UV UNI_IN__8_invlist[] = { /* for all charsets */ 0x1DAA0, 0x1DAA1, 0x1DAB0, + 0x1E000, + 0x1E007, + 0x1E008, + 0x1E019, + 0x1E01B, + 0x1E022, + 0x1E023, + 0x1E025, + 0x1E026, + 0x1E02B, 0x1E800, 0x1E8C5, 0x1E8C7, 0x1E8D7, + 0x1E900, + 0x1E94B, + 0x1E950, + 0x1E95A, + 0x1E95E, + 0x1E960, 0x1EE00, 0x1EE04, 0x1EE05, @@ -300772,25 +308910,21 @@ static const UV UNI_IN__8_invlist[] = { /* for all charsets */ 0x1F130, 0x1F16C, 0x1F170, - 0x1F19B, + 0x1F1AD, 0x1F1E6, 0x1F203, 0x1F210, - 0x1F23B, + 0x1F23C, 0x1F240, 0x1F249, 0x1F250, 0x1F252, 0x1F300, - 0x1F57A, - 0x1F57B, - 0x1F5A4, - 0x1F5A5, - 0x1F6D1, + 0x1F6D3, 0x1F6E0, 0x1F6ED, 0x1F6F0, - 0x1F6F4, + 0x1F6F7, 0x1F700, 0x1F774, 0x1F780, @@ -300806,9 +308940,19 @@ static const UV UNI_IN__8_invlist[] = { /* for all charsets */ 0x1F890, 0x1F8AE, 0x1F910, - 0x1F919, + 0x1F91F, + 0x1F920, + 0x1F928, + 0x1F930, + 0x1F931, + 0x1F933, + 0x1F93F, + 0x1F940, + 0x1F94C, + 0x1F950, + 0x1F95F, 0x1F980, - 0x1F985, + 0x1F992, 0x1F9C0, 0x1F9C1, 0x1FFFE, @@ -300855,10 +308999,10 @@ static const UV UNI_IN__8_invlist[] = { /* for all charsets */ 0x110000 }; -static const UV UNI_IN__9_invlist[] = { /* for all charsets */ - 1296, /* Number of elements */ +static const UV UNI_IN__NA_invlist[] = { /* for all charsets */ + 1412, /* Number of elements */ 148565664, /* Version and data structure type */ - 0, /* 0 if the list starts at 0; + 1, /* 0 if the list starts at 0; 1 if it starts at the element beyond 0 */ 0x0, 0x378, @@ -300875,10 +309019,6 @@ static const UV UNI_IN__9_invlist[] = { /* for all charsets */ 0x531, 0x557, 0x559, - 0x560, - 0x561, - 0x588, - 0x589, 0x58B, 0x58D, 0x590, @@ -300886,11 +309026,9 @@ static const UV UNI_IN__9_invlist[] = { /* for all charsets */ 0x5C8, 0x5D0, 0x5EB, - 0x5F0, + 0x5EF, 0x5F5, 0x600, - 0x61D, - 0x61E, 0x70E, 0x70F, 0x74B, @@ -300898,7 +309036,7 @@ static const UV UNI_IN__9_invlist[] = { /* for all charsets */ 0x7B2, 0x7C0, 0x7FB, - 0x800, + 0x7FD, 0x82E, 0x830, 0x83F, @@ -300906,11 +309044,13 @@ static const UV UNI_IN__9_invlist[] = { /* for all charsets */ 0x85C, 0x85E, 0x85F, - 0x8A0, - 0x8B5, - 0x8B6, - 0x8BE, - 0x8D4, + 0x860, + 0x86B, + 0x870, + 0x88F, + 0x890, + 0x892, + 0x898, 0x984, 0x985, 0x98D, @@ -300937,7 +309077,7 @@ static const UV UNI_IN__9_invlist[] = { /* for all charsets */ 0x9DF, 0x9E4, 0x9E6, - 0x9FC, + 0x9FF, 0xA01, 0xA04, 0xA05, @@ -300969,7 +309109,7 @@ static const UV UNI_IN__9_invlist[] = { /* for all charsets */ 0xA5E, 0xA5F, 0xA66, - 0xA76, + 0xA77, 0xA81, 0xA84, 0xA85, @@ -300997,7 +309137,7 @@ static const UV UNI_IN__9_invlist[] = { /* for all charsets */ 0xAE6, 0xAF2, 0xAF9, - 0xAFA, + 0xB00, 0xB01, 0xB04, 0xB05, @@ -301018,7 +309158,7 @@ static const UV UNI_IN__9_invlist[] = { /* for all charsets */ 0xB49, 0xB4B, 0xB4E, - 0xB56, + 0xB55, 0xB58, 0xB5C, 0xB5E, @@ -301059,8 +309199,6 @@ static const UV UNI_IN__9_invlist[] = { /* for all charsets */ 0xBE6, 0xBFB, 0xC00, - 0xC04, - 0xC05, 0xC0D, 0xC0E, 0xC11, @@ -301068,7 +309206,7 @@ static const UV UNI_IN__9_invlist[] = { /* for all charsets */ 0xC29, 0xC2A, 0xC3A, - 0xC3D, + 0xC3C, 0xC45, 0xC46, 0xC49, @@ -301078,13 +309216,13 @@ static const UV UNI_IN__9_invlist[] = { /* for all charsets */ 0xC57, 0xC58, 0xC5B, + 0xC5D, + 0xC5E, 0xC60, 0xC64, 0xC66, 0xC70, - 0xC78, - 0xC84, - 0xC85, + 0xC77, 0xC8D, 0xC8E, 0xC91, @@ -301102,7 +309240,7 @@ static const UV UNI_IN__9_invlist[] = { /* for all charsets */ 0xCCE, 0xCD5, 0xCD7, - 0xCDE, + 0xCDD, 0xCDF, 0xCE0, 0xCE4, @@ -301110,15 +309248,11 @@ static const UV UNI_IN__9_invlist[] = { /* for all charsets */ 0xCF0, 0xCF1, 0xCF3, - 0xD01, - 0xD04, - 0xD05, + 0xD00, 0xD0D, 0xD0E, 0xD11, 0xD12, - 0xD3B, - 0xD3D, 0xD45, 0xD46, 0xD49, @@ -301128,7 +309262,7 @@ static const UV UNI_IN__9_invlist[] = { /* for all charsets */ 0xD64, 0xD66, 0xD80, - 0xD82, + 0xD81, 0xD84, 0xD85, 0xD97, @@ -301160,27 +309294,13 @@ static const UV UNI_IN__9_invlist[] = { /* for all charsets */ 0xE83, 0xE84, 0xE85, - 0xE87, - 0xE89, - 0xE8A, + 0xE86, 0xE8B, - 0xE8D, - 0xE8E, - 0xE94, - 0xE98, - 0xE99, - 0xEA0, - 0xEA1, + 0xE8C, 0xEA4, 0xEA5, 0xEA6, 0xEA7, - 0xEA8, - 0xEAA, - 0xEAC, - 0xEAD, - 0xEBA, - 0xEBB, 0xEBE, 0xEC0, 0xEC5, @@ -301255,10 +309375,8 @@ static const UV UNI_IN__9_invlist[] = { /* for all charsets */ 0x16A0, 0x16F9, 0x1700, - 0x170D, - 0x170E, - 0x1715, - 0x1720, + 0x1716, + 0x171F, 0x1737, 0x1740, 0x1754, @@ -301275,11 +309393,9 @@ static const UV UNI_IN__9_invlist[] = { /* for all charsets */ 0x17F0, 0x17FA, 0x1800, - 0x180F, - 0x1810, 0x181A, 0x1820, - 0x1878, + 0x1879, 0x1880, 0x18AB, 0x18B0, @@ -301315,11 +309431,11 @@ static const UV UNI_IN__9_invlist[] = { /* for all charsets */ 0x1AA0, 0x1AAE, 0x1AB0, - 0x1ABF, + 0x1ACF, 0x1B00, - 0x1B4C, + 0x1B4D, 0x1B50, - 0x1B7D, + 0x1B7F, 0x1B80, 0x1BF4, 0x1BFC, @@ -301328,15 +309444,13 @@ static const UV UNI_IN__9_invlist[] = { /* for all charsets */ 0x1C4A, 0x1C4D, 0x1C89, - 0x1CC0, + 0x1C90, + 0x1CBB, + 0x1CBD, 0x1CC8, 0x1CD0, - 0x1CF7, - 0x1CF8, - 0x1CFA, + 0x1CFB, 0x1D00, - 0x1DF6, - 0x1DFB, 0x1F16, 0x1F18, 0x1F1E, @@ -301377,14 +309491,12 @@ static const UV UNI_IN__9_invlist[] = { /* for all charsets */ 0x2090, 0x209D, 0x20A0, - 0x20BF, + 0x20C1, 0x20D0, 0x20F1, 0x2100, 0x218C, 0x2190, - 0x23FF, - 0x2400, 0x2427, 0x2440, 0x244B, @@ -301392,19 +309504,7 @@ static const UV UNI_IN__9_invlist[] = { /* for all charsets */ 0x2B74, 0x2B76, 0x2B96, - 0x2B98, - 0x2BBA, - 0x2BBD, - 0x2BC9, - 0x2BCA, - 0x2BD2, - 0x2BEC, - 0x2BF0, - 0x2C00, - 0x2C2F, - 0x2C30, - 0x2C5F, - 0x2C60, + 0x2B97, 0x2CF4, 0x2CF9, 0x2D26, @@ -301435,7 +309535,7 @@ static const UV UNI_IN__9_invlist[] = { /* for all charsets */ 0x2DD8, 0x2DDF, 0x2DE0, - 0x2E45, + 0x2E5E, 0x2E80, 0x2E9A, 0x2E9B, @@ -301451,22 +309551,14 @@ static const UV UNI_IN__9_invlist[] = { /* for all charsets */ 0x3099, 0x3100, 0x3105, - 0x312E, + 0x3130, 0x3131, 0x318F, 0x3190, - 0x31BB, - 0x31C0, 0x31E4, 0x31F0, 0x321F, 0x3220, - 0x32FF, - 0x3300, - 0x4DB6, - 0x4DC0, - 0x9FD6, - 0xA000, 0xA48D, 0xA490, 0xA4C7, @@ -301475,11 +309567,15 @@ static const UV UNI_IN__9_invlist[] = { /* for all charsets */ 0xA640, 0xA6F8, 0xA700, - 0xA7AF, - 0xA7B0, - 0xA7B8, - 0xA7F7, - 0xA82C, + 0xA7CB, + 0xA7D0, + 0xA7D2, + 0xA7D3, + 0xA7D4, + 0xA7D5, + 0xA7DA, + 0xA7F2, + 0xA82D, 0xA830, 0xA83A, 0xA840, @@ -301489,8 +309585,6 @@ static const UV UNI_IN__9_invlist[] = { /* for all charsets */ 0xA8CE, 0xA8DA, 0xA8E0, - 0xA8FE, - 0xA900, 0xA954, 0xA95F, 0xA97D, @@ -301521,7 +309615,7 @@ static const UV UNI_IN__9_invlist[] = { /* for all charsets */ 0xAB28, 0xAB2F, 0xAB30, - 0xAB66, + 0xAB6C, 0xAB70, 0xABEE, 0xABF0, @@ -301551,16 +309645,12 @@ static const UV UNI_IN__9_invlist[] = { /* for all charsets */ 0xFB43, 0xFB45, 0xFB46, - 0xFBC2, + 0xFBC3, 0xFBD3, - 0xFD40, - 0xFD50, 0xFD90, 0xFD92, 0xFDC8, - 0xFDD0, - 0xFDFE, - 0xFE00, + 0xFDCF, 0xFE1A, 0xFE20, 0xFE53, @@ -301609,7 +309699,7 @@ static const UV UNI_IN__9_invlist[] = { /* for all charsets */ 0x10137, 0x1018F, 0x10190, - 0x1019C, + 0x1019D, 0x101A0, 0x101A1, 0x101D0, @@ -301622,7 +309712,7 @@ static const UV UNI_IN__9_invlist[] = { /* for all charsets */ 0x102FC, 0x10300, 0x10324, - 0x10330, + 0x1032D, 0x1034B, 0x10350, 0x1037B, @@ -301645,13 +309735,33 @@ static const UV UNI_IN__9_invlist[] = { /* for all charsets */ 0x10530, 0x10564, 0x1056F, - 0x10570, + 0x1057B, + 0x1057C, + 0x1058B, + 0x1058C, + 0x10593, + 0x10594, + 0x10596, + 0x10597, + 0x105A2, + 0x105A3, + 0x105B2, + 0x105B3, + 0x105BA, + 0x105BB, + 0x105BD, 0x10600, 0x10737, 0x10740, 0x10756, 0x10760, 0x10768, + 0x10780, + 0x10786, + 0x10787, + 0x107B1, + 0x107B2, + 0x107BB, 0x10800, 0x10806, 0x10808, @@ -301691,11 +309801,11 @@ static const UV UNI_IN__9_invlist[] = { /* for all charsets */ 0x10A15, 0x10A18, 0x10A19, - 0x10A34, + 0x10A36, 0x10A38, 0x10A3B, 0x10A3F, - 0x10A48, + 0x10A49, 0x10A50, 0x10A59, 0x10A60, @@ -301723,15 +309833,35 @@ static const UV UNI_IN__9_invlist[] = { /* for all charsets */ 0x10CC0, 0x10CF3, 0x10CFA, - 0x10D00, + 0x10D28, + 0x10D30, + 0x10D3A, 0x10E60, 0x10E7F, + 0x10E80, + 0x10EAA, + 0x10EAB, + 0x10EAE, + 0x10EB0, + 0x10EB2, + 0x10F00, + 0x10F28, + 0x10F30, + 0x10F5A, + 0x10F70, + 0x10F8A, + 0x10FB0, + 0x10FCC, + 0x10FE0, + 0x10FF7, 0x11000, 0x1104E, 0x11052, - 0x11070, + 0x11076, 0x1107F, - 0x110C2, + 0x110C3, + 0x110CD, + 0x110CE, 0x110D0, 0x110E9, 0x110F0, @@ -301739,12 +309869,10 @@ static const UV UNI_IN__9_invlist[] = { /* for all charsets */ 0x11100, 0x11135, 0x11136, - 0x11144, + 0x11148, 0x11150, 0x11177, 0x11180, - 0x111CE, - 0x111D0, 0x111E0, 0x111E1, 0x111F5, @@ -301780,7 +309908,7 @@ static const UV UNI_IN__9_invlist[] = { /* for all charsets */ 0x11334, 0x11335, 0x1133A, - 0x1133C, + 0x1133B, 0x11345, 0x11347, 0x11349, @@ -301797,11 +309925,9 @@ static const UV UNI_IN__9_invlist[] = { /* for all charsets */ 0x11370, 0x11375, 0x11400, - 0x1145A, - 0x1145B, 0x1145C, 0x1145D, - 0x1145E, + 0x11462, 0x11480, 0x114C8, 0x114D0, @@ -301817,20 +309943,46 @@ static const UV UNI_IN__9_invlist[] = { /* for all charsets */ 0x11660, 0x1166D, 0x11680, - 0x116B8, + 0x116BA, 0x116C0, 0x116CA, 0x11700, - 0x1171A, + 0x1171B, 0x1171D, 0x1172C, 0x11730, - 0x11740, + 0x11747, + 0x11800, + 0x1183C, 0x118A0, 0x118F3, 0x118FF, - 0x11900, - 0x11AC0, + 0x11907, + 0x11909, + 0x1190A, + 0x1190C, + 0x11914, + 0x11915, + 0x11917, + 0x11918, + 0x11936, + 0x11937, + 0x11939, + 0x1193B, + 0x11947, + 0x11950, + 0x1195A, + 0x119A0, + 0x119A8, + 0x119AA, + 0x119D8, + 0x119DA, + 0x119E5, + 0x11A00, + 0x11A48, + 0x11A50, + 0x11AA3, + 0x11AB0, 0x11AF9, 0x11C00, 0x11C09, @@ -301846,7 +309998,39 @@ static const UV UNI_IN__9_invlist[] = { /* for all charsets */ 0x11CA8, 0x11CA9, 0x11CB7, - 0x12000, + 0x11D00, + 0x11D07, + 0x11D08, + 0x11D0A, + 0x11D0B, + 0x11D37, + 0x11D3A, + 0x11D3B, + 0x11D3C, + 0x11D3E, + 0x11D3F, + 0x11D48, + 0x11D50, + 0x11D5A, + 0x11D60, + 0x11D66, + 0x11D67, + 0x11D69, + 0x11D6A, + 0x11D8F, + 0x11D90, + 0x11D92, + 0x11D93, + 0x11D99, + 0x11DA0, + 0x11DAA, + 0x11EE0, + 0x11EF9, + 0x11FB0, + 0x11FB1, + 0x11FC0, + 0x11FF2, + 0x11FFF, 0x1239A, 0x12400, 0x1246F, @@ -301854,8 +310038,12 @@ static const UV UNI_IN__9_invlist[] = { /* for all charsets */ 0x12475, 0x12480, 0x12544, + 0x12F90, + 0x12FF3, 0x13000, 0x1342F, + 0x13430, + 0x13439, 0x14400, 0x14647, 0x16800, @@ -301865,7 +310053,9 @@ static const UV UNI_IN__9_invlist[] = { /* for all charsets */ 0x16A60, 0x16A6A, 0x16A6E, - 0x16A70, + 0x16ABF, + 0x16AC0, + 0x16ACA, 0x16AD0, 0x16AEE, 0x16AF0, @@ -301880,20 +310070,38 @@ static const UV UNI_IN__9_invlist[] = { /* for all charsets */ 0x16B78, 0x16B7D, 0x16B90, + 0x16E40, + 0x16E9B, 0x16F00, - 0x16F45, - 0x16F50, - 0x16F7F, + 0x16F4B, + 0x16F4F, + 0x16F88, 0x16F8F, 0x16FA0, 0x16FE0, - 0x16FE1, + 0x16FE5, + 0x16FF0, + 0x16FF2, 0x17000, - 0x187ED, + 0x187F8, 0x18800, - 0x18AF3, + 0x18CD6, + 0x18D00, + 0x18D09, + 0x1AFF0, + 0x1AFF4, + 0x1AFF5, + 0x1AFFC, + 0x1AFFD, + 0x1AFFF, 0x1B000, - 0x1B002, + 0x1B123, + 0x1B150, + 0x1B153, + 0x1B164, + 0x1B168, + 0x1B170, + 0x1B2FC, 0x1BC00, 0x1BC6B, 0x1BC70, @@ -301904,18 +310112,26 @@ static const UV UNI_IN__9_invlist[] = { /* for all charsets */ 0x1BC9A, 0x1BC9C, 0x1BCA4, + 0x1CF00, + 0x1CF2E, + 0x1CF30, + 0x1CF47, + 0x1CF50, + 0x1CFC4, 0x1D000, 0x1D0F6, 0x1D100, 0x1D127, 0x1D129, - 0x1D1E9, + 0x1D1EB, 0x1D200, 0x1D246, + 0x1D2E0, + 0x1D2F4, 0x1D300, 0x1D357, 0x1D360, - 0x1D372, + 0x1D379, 0x1D400, 0x1D455, 0x1D456, @@ -301962,6 +310178,8 @@ static const UV UNI_IN__9_invlist[] = { /* for all charsets */ 0x1DAA0, 0x1DAA1, 0x1DAB0, + 0x1DF00, + 0x1DF1F, 0x1E000, 0x1E007, 0x1E008, @@ -301972,16 +310190,42 @@ static const UV UNI_IN__9_invlist[] = { /* for all charsets */ 0x1E025, 0x1E026, 0x1E02B, + 0x1E100, + 0x1E12D, + 0x1E130, + 0x1E13E, + 0x1E140, + 0x1E14A, + 0x1E14E, + 0x1E150, + 0x1E290, + 0x1E2AF, + 0x1E2C0, + 0x1E2FA, + 0x1E2FF, + 0x1E300, + 0x1E7E0, + 0x1E7E7, + 0x1E7E8, + 0x1E7EC, + 0x1E7ED, + 0x1E7EF, + 0x1E7F0, + 0x1E7FF, 0x1E800, 0x1E8C5, 0x1E8C7, 0x1E8D7, 0x1E900, - 0x1E94B, + 0x1E94C, 0x1E950, 0x1E95A, 0x1E95E, 0x1E960, + 0x1EC71, + 0x1ECB5, + 0x1ED01, + 0x1ED3E, 0x1EE00, 0x1EE04, 0x1EE05, @@ -302063,13 +310307,7 @@ static const UV UNI_IN__9_invlist[] = { /* for all charsets */ 0x1F0D1, 0x1F0F6, 0x1F100, - 0x1F10D, - 0x1F110, - 0x1F12F, - 0x1F130, - 0x1F16C, - 0x1F170, - 0x1F1AD, + 0x1F1AE, 0x1F1E6, 0x1F203, 0x1F210, @@ -302078,16 +310316,22 @@ static const UV UNI_IN__9_invlist[] = { /* for all charsets */ 0x1F249, 0x1F250, 0x1F252, + 0x1F260, + 0x1F266, 0x1F300, - 0x1F6D3, - 0x1F6E0, + 0x1F6D8, + 0x1F6DD, 0x1F6ED, 0x1F6F0, - 0x1F6F7, + 0x1F6FD, 0x1F700, 0x1F774, 0x1F780, - 0x1F7D5, + 0x1F7D9, + 0x1F7E0, + 0x1F7EC, + 0x1F7F0, + 0x1F7F1, 0x1F800, 0x1F80C, 0x1F810, @@ -302098,34 +310342,50 @@ static const UV UNI_IN__9_invlist[] = { /* for all charsets */ 0x1F888, 0x1F890, 0x1F8AE, - 0x1F910, - 0x1F91F, - 0x1F920, - 0x1F928, - 0x1F930, - 0x1F931, - 0x1F933, - 0x1F93F, - 0x1F940, - 0x1F94C, - 0x1F950, - 0x1F95F, - 0x1F980, - 0x1F992, - 0x1F9C0, - 0x1F9C1, + 0x1F8B0, + 0x1F8B2, + 0x1F900, + 0x1FA54, + 0x1FA60, + 0x1FA6E, + 0x1FA70, + 0x1FA75, + 0x1FA78, + 0x1FA7D, + 0x1FA80, + 0x1FA87, + 0x1FA90, + 0x1FAAD, + 0x1FAB0, + 0x1FABB, + 0x1FAC0, + 0x1FAC6, + 0x1FAD0, + 0x1FADA, + 0x1FAE0, + 0x1FAE8, + 0x1FAF0, + 0x1FAF7, + 0x1FB00, + 0x1FB93, + 0x1FB94, + 0x1FBCB, + 0x1FBF0, + 0x1FBFA, 0x1FFFE, - 0x2A6D7, + 0x2A6E0, 0x2A700, - 0x2B735, + 0x2B739, 0x2B740, 0x2B81E, 0x2B820, 0x2CEA2, + 0x2CEB0, + 0x2EBE1, 0x2F800, 0x2FA1E, 0x2FFFE, - 0x30000, + 0x3134B, 0x3FFFE, 0x40000, 0x4FFFE, @@ -302175,7 +310435,7 @@ static const UV UNI_INAHOM_invlist[] = { /* for all charsets */ 1 if it starts at the element beyond 0 */ 0x0, 0x11700, - 0x11740 + 0x11750 }; static const UV UNI_INANATOLIANHIEROGLYPHS_invlist[] = { /* for all charsets */ @@ -302398,6 +310658,16 @@ static const UV UNI_INCUNEIFORM_invlist[] = { /* for all charsets */ 0x12400 }; +static const UV UNI_INCYPROMINOAN_invlist[] = { /* for all charsets */ + 3, /* Number of elements */ + 148565664, /* Version and data structure type */ + 1, /* 0 if the list starts at 0; + 1 if it starts at the element beyond 0 */ + 0x0, + 0x12F90, + 0x13000 +}; + static const UV UNI_INCYRILLIC_invlist[] = { /* for all charsets */ 3, /* Number of elements */ 148565664, /* Version and data structure type */ @@ -303158,6 +311428,16 @@ static const UV UNI_INOLDTURKIC_invlist[] = { /* for all charsets */ 0x10C50 }; +static const UV UNI_INOLDUYGHUR_invlist[] = { /* for all charsets */ + 3, /* Number of elements */ + 148565664, /* Version and data structure type */ + 1, /* 0 if the list starts at 0; + 1 if it starts at the element beyond 0 */ + 0x0, + 0x10F70, + 0x10FB0 +}; + static const UV UNI_INORIYA_invlist[] = { /* for all charsets */ 3, /* Number of elements */ 148565664, /* Version and data structure type */ @@ -303209,7 +311489,7 @@ static const UV UNI_INPAUCINHAU_invlist[] = { /* for all charsets */ }; static const UV UNI_INPC__BOTTOM_invlist[] = { /* for all charsets */ - 287, /* Number of elements */ + 291, /* Number of elements */ 148565664, /* Version and data structure type */ 1, /* 0 if the list starts at 0; 1 if it starts at the element beyond 0 */ @@ -303260,6 +311540,8 @@ static const UV UNI_INPC__BOTTOM_invlist[] = { /* for all charsets */ 0xB4E, 0xB62, 0xB64, + 0xC3C, + 0xC3D, 0xC56, 0xC57, 0xC62, @@ -303317,7 +311599,7 @@ static const UV UNI_INPC__BOTTOM_invlist[] = { /* for all charsets */ 0x1713, 0x1715, 0x1733, - 0x1735, + 0x1734, 0x1753, 0x1754, 0x1773, @@ -303406,6 +311688,8 @@ static const UV UNI_INPC__BOTTOM_invlist[] = { /* for all charsets */ 0x110B5, 0x110B9, 0x110BB, + 0x110C2, + 0x110C3, 0x1112A, 0x1112C, 0x11131, @@ -303667,7 +311951,7 @@ static const UV UNI_INPC__LEFTANDRIGHT_invlist[] = { /* for all charsets */ }; static const UV UNI_INPC__NA_invlist[] = { /* for all charsets */ - 421, /* Number of elements */ + 429, /* Number of elements */ 148565664, /* Version and data structure type */ 0, /* 0 if the list starts at 0; 1 if it starts at the element beyond 0 */ @@ -303754,6 +312038,8 @@ static const UV UNI_INPC__NA_invlist[] = { /* for all charsets */ 0xBD8, 0xC00, 0xC05, + 0xC3C, + 0xC3D, 0xC3E, 0xC45, 0xC46, @@ -303857,7 +312143,7 @@ static const UV UNI_INPC__NA_invlist[] = { /* for all charsets */ 0x109A, 0x109E, 0x1712, - 0x1715, + 0x1716, 0x1732, 0x1735, 0x1752, @@ -303976,10 +312262,16 @@ static const UV UNI_INPC__NA_invlist[] = { /* for all charsets */ 0x11003, 0x11038, 0x11047, + 0x11070, + 0x11071, + 0x11073, + 0x11075, 0x11080, 0x11083, 0x110B0, 0x110BB, + 0x110C2, + 0x110C3, 0x11100, 0x11103, 0x11127, @@ -304111,7 +312403,7 @@ static const UV UNI_INPC__OVERSTRUCK_invlist[] = { /* for all charsets */ }; static const UV UNI_INPC__RIGHT_invlist[] = { /* for all charsets */ - 329, /* Number of elements */ + 333, /* Number of elements */ 148565664, /* Version and data structure type */ 1, /* 0 if the list starts at 0; 1 if it starts at the element beyond 0 */ @@ -304224,6 +312516,10 @@ static const UV UNI_INPC__RIGHT_invlist[] = { /* for all charsets */ 0x1090, 0x109A, 0x109D, + 0x1715, + 0x1716, + 0x1734, + 0x1735, 0x17B6, 0x17B7, 0x17C7, @@ -304447,7 +312743,7 @@ static const UV UNI_INPC__RIGHT_invlist[] = { /* for all charsets */ }; static const UV UNI_INPC__TOP_invlist[] = { /* for all charsets */ - 387, /* Number of elements */ + 391, /* Number of elements */ 148565664, /* Version and data structure type */ 1, /* 0 if the list starts at 0; 1 if it starts at the element beyond 0 */ @@ -304710,6 +313006,10 @@ static const UV UNI_INPC__TOP_invlist[] = { /* for all charsets */ 0x1103C, 0x11042, 0x11047, + 0x11070, + 0x11071, + 0x11073, + 0x11075, 0x11080, 0x11082, 0x110B5, @@ -305229,7 +313529,7 @@ static const UV UNI_INSC__CANTILLATIONMARK_invlist[] = { /* for all charsets */ }; static const UV UNI_INSC__CONSONANT_invlist[] = { /* for all charsets */ - 307, /* Number of elements */ + 311, /* Number of elements */ 148565664, /* Version and data structure type */ 1, /* 0 if the list starts at 0; 1 if it starts at the element beyond 0 */ @@ -305369,9 +313669,9 @@ static const UV UNI_INSC__CONSONANT_invlist[] = { /* for all charsets */ 0x108E, 0x108F, 0x1703, - 0x170D, - 0x170E, 0x1712, + 0x171F, + 0x1720, 0x1723, 0x1732, 0x1743, @@ -305397,7 +313697,7 @@ static const UV UNI_INSC__CONSONANT_invlist[] = { /* for all charsets */ 0x1B13, 0x1B34, 0x1B45, - 0x1B4C, + 0x1B4D, 0x1B8A, 0x1BA1, 0x1BAE, @@ -305466,6 +313766,8 @@ static const UV UNI_INSC__CONSONANT_invlist[] = { /* for all charsets */ 0x10A36, 0x11013, 0x11038, + 0x11075, + 0x11076, 0x1108D, 0x110B0, 0x11107, @@ -305516,6 +313818,8 @@ static const UV UNI_INSC__CONSONANT_invlist[] = { /* for all charsets */ 0x116B9, 0x11700, 0x1171B, + 0x11740, + 0x11747, 0x1180A, 0x1182C, 0x1190C, @@ -305543,13 +313847,17 @@ static const UV UNI_INSC__CONSONANT_invlist[] = { /* for all charsets */ }; static const UV UNI_INSC__CONSONANTDEAD_invlist[] = { /* for all charsets */ - 9, /* Number of elements */ + 13, /* Number of elements */ 148565664, /* Version and data structure type */ 1, /* 0 if the list starts at 0; 1 if it starts at the element beyond 0 */ 0x0, 0x9CE, 0x9CF, + 0xC5D, + 0xC5E, + 0xCDD, + 0xCDE, 0xD54, 0xD57, 0xD7A, @@ -305559,7 +313867,7 @@ static const UV UNI_INSC__CONSONANTDEAD_invlist[] = { /* for all charsets */ }; static const UV UNI_INSC__CONSONANTFINAL_invlist[] = { /* for all charsets */ - 23, /* Number of elements */ + 29, /* Number of elements */ 148565664, /* Version and data structure type */ 1, /* 0 if the list starts at 0; 1 if it starts at the element beyond 0 */ @@ -305572,6 +313880,10 @@ static const UV UNI_INSC__CONSONANTFINAL_invlist[] = { /* for all charsets */ 0x19C8, 0x1A58, 0x1A5A, + 0x1B03, + 0x1B04, + 0x1B81, + 0x1B82, 0x1BBE, 0x1BC0, 0x1BF0, @@ -305580,6 +313892,8 @@ static const UV UNI_INSC__CONSONANTFINAL_invlist[] = { /* for all charsets */ 0x1C34, 0xA94F, 0xA953, + 0xA982, + 0xA983, 0xAA40, 0xAA4E, 0xABDB, @@ -305851,19 +314165,13 @@ static const UV UNI_INSC__CONSONANTSUBJOINED_invlist[] = { /* for all charsets }; static const UV UNI_INSC__CONSONANTSUCCEEDINGREPHA_invlist[] = { /* for all charsets */ - 9, /* Number of elements */ + 3, /* Number of elements */ 148565664, /* Version and data structure type */ 1, /* 0 if the list starts at 0; 1 if it starts at the element beyond 0 */ 0x0, 0x17CC, - 0x17CD, - 0x1B03, - 0x1B04, - 0x1B81, - 0x1B82, - 0xA982, - 0xA983 + 0x17CD }; static const UV UNI_INSC__CONSONANTWITHSTACKER_invlist[] = { /* for all charsets */ @@ -305949,7 +314257,7 @@ static const UV UNI_INSC__NONJOINER_invlist[] = { /* for all charsets */ }; static const UV UNI_INSC__NUKTA_invlist[] = { /* for all charsets */ - 53, /* Number of elements */ + 55, /* Number of elements */ 148565664, /* Version and data structure type */ 1, /* 0 if the list starts at 0; 1 if it starts at the element beyond 0 */ @@ -305966,6 +314274,8 @@ static const UV UNI_INSC__NUKTA_invlist[] = { /* for all charsets */ 0xB00, 0xB3C, 0xB3D, + 0xC3C, + 0xC3D, 0xCBC, 0xCBD, 0xF39, @@ -306333,7 +314643,7 @@ static const UV UNI_INSC__NUMBERJOINER_invlist[] = { /* for all charsets */ # if 'A' == 65 /* ASCII/Latin1 */ static const UV UNI_INSC__OTHER_invlist[] = { /* for ASCII/Latin1 */ - 643, /* Number of elements */ + 647, /* Number of elements */ 148565664, /* Version and data structure type */ 0, /* 0 if the list starts at 0; 1 if it starts at the element beyond 0 */ @@ -306516,7 +314826,7 @@ static const UV UNI_INSC__OTHER_invlist[] = { /* for ASCII/Latin1 */ 0xC29, 0xC2A, 0xC3A, - 0xC3D, + 0xC3C, 0xC45, 0xC46, 0xC49, @@ -306526,6 +314836,8 @@ static const UV UNI_INSC__OTHER_invlist[] = { /* for ASCII/Latin1 */ 0xC57, 0xC58, 0xC5B, + 0xC5D, + 0xC5E, 0xC60, 0xC64, 0xC66, @@ -306550,7 +314862,7 @@ static const UV UNI_INSC__OTHER_invlist[] = { /* for ASCII/Latin1 */ 0xCCE, 0xCD5, 0xCD7, - 0xCDE, + 0xCDD, 0xCDF, 0xCE0, 0xCE4, @@ -306663,10 +314975,8 @@ static const UV UNI_INSC__OTHER_invlist[] = { /* for ASCII/Latin1 */ 0x1050, 0x109E, 0x1700, - 0x170D, - 0x170E, - 0x1715, - 0x1720, + 0x1716, + 0x171F, 0x1735, 0x1740, 0x1754, @@ -306711,7 +315021,7 @@ static const UV UNI_INSC__OTHER_invlist[] = { /* for ASCII/Latin1 */ 0x1A90, 0x1A9A, 0x1B00, - 0x1B4C, + 0x1B4D, 0x1B50, 0x1B5A, 0x1B80, @@ -306805,9 +315115,11 @@ static const UV UNI_INSC__OTHER_invlist[] = { /* for ASCII/Latin1 */ 0x11000, 0x11047, 0x11052, - 0x11070, + 0x11076, 0x1107F, 0x110BB, + 0x110C2, + 0x110C3, 0x11100, 0x11135, 0x11136, @@ -306902,6 +315214,8 @@ static const UV UNI_INSC__OTHER_invlist[] = { /* for ASCII/Latin1 */ 0x1172C, 0x11730, 0x1173C, + 0x11740, + 0x11747, 0x11800, 0x1183B, 0x11900, @@ -306990,7 +315304,7 @@ static const UV UNI_INSC__OTHER_invlist[] = { /* for ASCII/Latin1 */ && '$' == 91 && '@' == 124 && '`' == 121 && '\n' == 21 static const UV UNI_INSC__OTHER_invlist[] = { /* for EBCDIC 1047 */ - 643, /* Number of elements */ + 647, /* Number of elements */ 148565664, /* Version and data structure type */ 0, /* 0 if the list starts at 0; 1 if it starts at the element beyond 0 */ @@ -307173,7 +315487,7 @@ static const UV UNI_INSC__OTHER_invlist[] = { /* for EBCDIC 1047 */ 0xC29, 0xC2A, 0xC3A, - 0xC3D, + 0xC3C, 0xC45, 0xC46, 0xC49, @@ -307183,6 +315497,8 @@ static const UV UNI_INSC__OTHER_invlist[] = { /* for EBCDIC 1047 */ 0xC57, 0xC58, 0xC5B, + 0xC5D, + 0xC5E, 0xC60, 0xC64, 0xC66, @@ -307207,7 +315523,7 @@ static const UV UNI_INSC__OTHER_invlist[] = { /* for EBCDIC 1047 */ 0xCCE, 0xCD5, 0xCD7, - 0xCDE, + 0xCDD, 0xCDF, 0xCE0, 0xCE4, @@ -307320,10 +315636,8 @@ static const UV UNI_INSC__OTHER_invlist[] = { /* for EBCDIC 1047 */ 0x1050, 0x109E, 0x1700, - 0x170D, - 0x170E, - 0x1715, - 0x1720, + 0x1716, + 0x171F, 0x1735, 0x1740, 0x1754, @@ -307368,7 +315682,7 @@ static const UV UNI_INSC__OTHER_invlist[] = { /* for EBCDIC 1047 */ 0x1A90, 0x1A9A, 0x1B00, - 0x1B4C, + 0x1B4D, 0x1B50, 0x1B5A, 0x1B80, @@ -307462,9 +315776,11 @@ static const UV UNI_INSC__OTHER_invlist[] = { /* for EBCDIC 1047 */ 0x11000, 0x11047, 0x11052, - 0x11070, + 0x11076, 0x1107F, 0x110BB, + 0x110C2, + 0x110C3, 0x11100, 0x11135, 0x11136, @@ -307559,6 +315875,8 @@ static const UV UNI_INSC__OTHER_invlist[] = { /* for EBCDIC 1047 */ 0x1172C, 0x11730, 0x1173C, + 0x11740, + 0x11747, 0x11800, 0x1183B, 0x11900, @@ -307647,7 +315965,7 @@ static const UV UNI_INSC__OTHER_invlist[] = { /* for EBCDIC 1047 */ && '$' == 91 && '@' == 124 && '`' == 121 && '\n' == 37 static const UV UNI_INSC__OTHER_invlist[] = { /* for EBCDIC 037 */ - 643, /* Number of elements */ + 647, /* Number of elements */ 148565664, /* Version and data structure type */ 0, /* 0 if the list starts at 0; 1 if it starts at the element beyond 0 */ @@ -307830,7 +316148,7 @@ static const UV UNI_INSC__OTHER_invlist[] = { /* for EBCDIC 037 */ 0xC29, 0xC2A, 0xC3A, - 0xC3D, + 0xC3C, 0xC45, 0xC46, 0xC49, @@ -307840,6 +316158,8 @@ static const UV UNI_INSC__OTHER_invlist[] = { /* for EBCDIC 037 */ 0xC57, 0xC58, 0xC5B, + 0xC5D, + 0xC5E, 0xC60, 0xC64, 0xC66, @@ -307864,7 +316184,7 @@ static const UV UNI_INSC__OTHER_invlist[] = { /* for EBCDIC 037 */ 0xCCE, 0xCD5, 0xCD7, - 0xCDE, + 0xCDD, 0xCDF, 0xCE0, 0xCE4, @@ -307977,10 +316297,8 @@ static const UV UNI_INSC__OTHER_invlist[] = { /* for EBCDIC 037 */ 0x1050, 0x109E, 0x1700, - 0x170D, - 0x170E, - 0x1715, - 0x1720, + 0x1716, + 0x171F, 0x1735, 0x1740, 0x1754, @@ -308025,7 +316343,7 @@ static const UV UNI_INSC__OTHER_invlist[] = { /* for EBCDIC 037 */ 0x1A90, 0x1A9A, 0x1B00, - 0x1B4C, + 0x1B4D, 0x1B50, 0x1B5A, 0x1B80, @@ -308119,9 +316437,11 @@ static const UV UNI_INSC__OTHER_invlist[] = { /* for EBCDIC 037 */ 0x11000, 0x11047, 0x11052, - 0x11070, + 0x11076, 0x1107F, 0x110BB, + 0x110C2, + 0x110C3, 0x11100, 0x11135, 0x11136, @@ -308216,6 +316536,8 @@ static const UV UNI_INSC__OTHER_invlist[] = { /* for EBCDIC 037 */ 0x1172C, 0x11730, 0x1173C, + 0x11740, + 0x11747, 0x11800, 0x1183B, 0x11900, @@ -308299,7 +316621,7 @@ static const UV UNI_INSC__OTHER_invlist[] = { /* for EBCDIC 037 */ # endif /* EBCDIC 037 */ static const UV UNI_INSC__PUREKILLER_invlist[] = { /* for all charsets */ - 43, /* Number of elements */ + 45, /* Number of elements */ 148565664, /* Version and data structure type */ 1, /* 0 if the list starts at 0; 1 if it starts at the element beyond 0 */ @@ -308317,7 +316639,7 @@ static const UV UNI_INSC__PUREKILLER_invlist[] = { /* for all charsets */ 0x103A, 0x103B, 0x1714, - 0x1715, + 0x1716, 0x1734, 0x1735, 0x17D1, @@ -308334,6 +316656,8 @@ static const UV UNI_INSC__PUREKILLER_invlist[] = { /* for all charsets */ 0xA954, 0xABED, 0xABEE, + 0x11070, + 0x11071, 0x11134, 0x11135, 0x112EA, @@ -308729,7 +317053,7 @@ static const UV UNI_INSC__VOWEL_invlist[] = { /* for all charsets */ }; static const UV UNI_INSC__VOWELDEPENDENT_invlist[] = { /* for all charsets */ - 265, /* Number of elements */ + 269, /* Number of elements */ 148565664, /* Version and data structure type */ 1, /* 0 if the list starts at 0; 1 if it starts at the element beyond 0 */ @@ -308914,8 +317238,12 @@ static const UV UNI_INSC__VOWELDEPENDENT_invlist[] = { /* for all charsets */ 0x10A0E, 0x11038, 0x11046, + 0x11073, + 0x11075, 0x110B0, 0x110B9, + 0x110C2, + 0x110C3, 0x11127, 0x11133, 0x11145, @@ -309001,7 +317329,7 @@ static const UV UNI_INSC__VOWELDEPENDENT_invlist[] = { /* for all charsets */ }; static const UV UNI_INSC__VOWELINDEPENDENT_invlist[] = { /* for all charsets */ - 175, /* Number of elements */ + 177, /* Number of elements */ 148565664, /* Version and data structure type */ 1, /* 0 if the list starts at 0; 1 if it starts at the element beyond 0 */ @@ -309118,6 +317446,8 @@ static const UV UNI_INSC__VOWELINDEPENDENT_invlist[] = { /* for all charsets */ 0xABD2, 0x11005, 0x11013, + 0x11071, + 0x11073, 0x11083, 0x1108D, 0x11103, @@ -309332,6 +317662,16 @@ static const UV UNI_INTAMIL_invlist[] = { /* for all charsets */ 0xC00 }; +static const UV UNI_INTANGSA_invlist[] = { /* for all charsets */ + 3, /* Number of elements */ + 148565664, /* Version and data structure type */ + 1, /* 0 if the list starts at 0; + 1 if it starts at the element beyond 0 */ + 0x0, + 0x16A70, + 0x16AD0 +}; + static const UV UNI_INTANGUT_invlist[] = { /* for all charsets */ 3, /* Number of elements */ 148565664, /* Version and data structure type */ @@ -309402,6 +317742,16 @@ static const UV UNI_INTIRHUTA_invlist[] = { /* for all charsets */ 0x114E0 }; +static const UV UNI_INTOTO_invlist[] = { /* for all charsets */ + 3, /* Number of elements */ + 148565664, /* Version and data structure type */ + 1, /* 0 if the list starts at 0; + 1 if it starts at the element beyond 0 */ + 0x0, + 0x1E290, + 0x1E2C0 +}; + static const UV UNI_INUGARITIC_invlist[] = { /* for all charsets */ 3, /* Number of elements */ 148565664, /* Version and data structure type */ @@ -309422,6 +317772,16 @@ static const UV UNI_INVAI_invlist[] = { /* for all charsets */ 0xA640 }; +static const UV UNI_INVITHKUQI_invlist[] = { /* for all charsets */ + 3, /* Number of elements */ + 148565664, /* Version and data structure type */ + 1, /* 0 if the list starts at 0; + 1 if it starts at the element beyond 0 */ + 0x0, + 0x10570, + 0x105C0 +}; + static const UV UNI_INVS_invlist[] = { /* for all charsets */ 3, /* Number of elements */ 148565664, /* Version and data structure type */ @@ -309601,7 +317961,7 @@ static const UV UNI_JG__ALAPH_invlist[] = { /* for all charsets */ }; static const UV UNI_JG__ALEF_invlist[] = { /* for all charsets */ - 13, /* Number of elements */ + 15, /* Number of elements */ 148565664, /* Version and data structure type */ 1, /* 0 if the list starts at 0; 1 if it starts at the element beyond 0 */ @@ -309617,7 +317977,9 @@ static const UV UNI_JG__ALEF_invlist[] = { /* for all charsets */ 0x675, 0x676, 0x773, - 0x775 + 0x775, + 0x870, + 0x883 }; static const UV UNI_JG__BEH_invlist[] = { /* for all charsets */ @@ -309761,7 +318123,7 @@ static const UV UNI_JG__FINALSEMKATH_invlist[] = { /* for all charsets */ }; static const UV UNI_JG__GAF_invlist[] = { /* for all charsets */ - 15, /* Number of elements */ + 19, /* Number of elements */ 148565664, /* Version and data structure type */ 1, /* 0 if the list starts at 0; 1 if it starts at the element beyond 0 */ @@ -309776,10 +318138,14 @@ static const UV UNI_JG__GAF_invlist[] = { /* for all charsets */ 0x6B5, 0x762, 0x765, + 0x88D, + 0x88E, 0x8B0, 0x8B1, 0x8C2, - 0x8C3 + 0x8C3, + 0x8C8, + 0x8C9 }; static const UV UNI_JG__GAMAL_invlist[] = { /* for all charsets */ @@ -309795,7 +318161,7 @@ static const UV UNI_JG__GAMAL_invlist[] = { /* for all charsets */ }; static const UV UNI_JG__HAH_invlist[] = { /* for all charsets */ - 21, /* Number of elements */ + 23, /* Number of elements */ 148565664, /* Version and data structure type */ 1, /* 0 if the list starts at 0; 1 if it starts at the element beyond 0 */ @@ -309814,6 +318180,8 @@ static const UV UNI_JG__HAH_invlist[] = { /* for all charsets */ 0x773, 0x77C, 0x77D, + 0x88A, + 0x88B, 0x8A2, 0x8A3, 0x8C1, @@ -310383,7 +318751,7 @@ static const UV UNI_JG__MIM_invlist[] = { /* for all charsets */ }; static const UV UNI_JG__NOJOININGGROUP_invlist[] = { /* for all charsets */ - 61, /* Number of elements */ + 65, /* Number of elements */ 148565664, /* Version and data structure type */ 0, /* 0 if the list starts at 0; 1 if it starts at the element beyond 0 */ @@ -310416,12 +318784,16 @@ static const UV UNI_JG__NOJOININGGROUP_invlist[] = { /* for all charsets */ 0x780, 0x860, 0x86B, + 0x870, + 0x883, + 0x886, + 0x887, + 0x889, + 0x88F, 0x8A0, 0x8AD, 0x8AE, - 0x8B5, - 0x8B6, - 0x8C8, + 0x8C9, 0x10AC0, 0x10AC6, 0x10AC7, @@ -310451,7 +318823,7 @@ static const UV UNI_JG__NOJOININGGROUP_invlist[] = { /* for all charsets */ }; static const UV UNI_JG__NOON_invlist[] = { /* for all charsets */ - 7, /* Number of elements */ + 9, /* Number of elements */ 148565664, /* Version and data structure type */ 1, /* 0 if the list starts at 0; 1 if it starts at the element beyond 0 */ @@ -310461,7 +318833,9 @@ static const UV UNI_JG__NOON_invlist[] = { /* for all charsets */ 0x6B9, 0x6BD, 0x767, - 0x76A + 0x76A, + 0x889, + 0x88A }; static const UV UNI_JG__NUN_invlist[] = { /* for all charsets */ @@ -310495,7 +318869,7 @@ static const UV UNI_JG__PE_invlist[] = { /* for all charsets */ }; static const UV UNI_JG__QAF_invlist[] = { /* for all charsets */ - 9, /* Number of elements */ + 11, /* Number of elements */ 148565664, /* Version and data structure type */ 1, /* 0 if the list starts at 0; 1 if it starts at the element beyond 0 */ @@ -310507,7 +318881,9 @@ static const UV UNI_JG__QAF_invlist[] = { /* for all charsets */ 0x6A7, 0x6A9, 0x8A5, - 0x8A6 + 0x8A6, + 0x8B5, + 0x8B6 }; static const UV UNI_JG__QAPH_invlist[] = { /* for all charsets */ @@ -310665,7 +319041,7 @@ static const UV UNI_JG__SYRIACWAW_invlist[] = { /* for all charsets */ }; static const UV UNI_JG__TAH_invlist[] = { /* for all charsets */ - 7, /* Number of elements */ + 9, /* Number of elements */ 148565664, /* Version and data structure type */ 1, /* 0 if the list starts at 0; 1 if it starts at the element beyond 0 */ @@ -310674,6 +319050,8 @@ static const UV UNI_JG__TAH_invlist[] = { /* for all charsets */ 0x639, 0x69F, 0x6A0, + 0x88B, + 0x88D, 0x8A3, 0x8A4 }; @@ -310712,6 +319090,26 @@ static const UV UNI_JG__TETH_invlist[] = { /* for all charsets */ 0x71D }; +static const UV UNI_JG__THINYEH_invlist[] = { /* for all charsets */ + 3, /* Number of elements */ + 148565664, /* Version and data structure type */ + 1, /* 0 if the list starts at 0; + 1 if it starts at the element beyond 0 */ + 0x0, + 0x886, + 0x887 +}; + +static const UV UNI_JG__VERTICALTAIL_invlist[] = { /* for all charsets */ + 3, /* Number of elements */ + 148565664, /* Version and data structure type */ + 1, /* 0 if the list starts at 0; + 1 if it starts at the element beyond 0 */ + 0x0, + 0x88E, + 0x88F +}; + static const UV UNI_JG__WAW_invlist[] = { /* for all charsets */ 15, /* Number of elements */ 148565664, /* Version and data structure type */ @@ -310829,7 +319227,7 @@ static const UV UNI_JOINC_invlist[] = { /* for all charsets */ }; static const UV UNI_JT__C_invlist[] = { /* for all charsets */ - 9, /* Number of elements */ + 11, /* Number of elements */ 148565664, /* Version and data structure type */ 1, /* 0 if the list starts at 0; 1 if it starts at the element beyond 0 */ @@ -310838,6 +319236,8 @@ static const UV UNI_JT__C_invlist[] = { /* for all charsets */ 0x641, 0x7FA, 0x7FB, + 0x883, + 0x886, 0x180A, 0x180B, 0x200D, @@ -310845,7 +319245,7 @@ static const UV UNI_JT__C_invlist[] = { /* for all charsets */ }; static const UV UNI_JT__D_invlist[] = { /* for all charsets */ - 145, /* Number of elements */ + 151, /* Number of elements */ 148565664, /* Version and data structure type */ 1, /* 0 if the list starts at 0; 1 if it starts at the element beyond 0 */ @@ -310922,16 +319322,18 @@ static const UV UNI_JT__D_invlist[] = { /* for all charsets */ 0x866, 0x868, 0x869, + 0x886, + 0x887, + 0x889, + 0x88E, 0x8A0, 0x8AA, 0x8AF, 0x8B1, 0x8B3, - 0x8B5, - 0x8B6, 0x8B9, 0x8BA, - 0x8C8, + 0x8C9, 0x1807, 0x1808, 0x1820, @@ -310976,6 +319378,10 @@ static const UV UNI_JT__D_invlist[] = { /* for all charsets */ 0x10F45, 0x10F51, 0x10F54, + 0x10F70, + 0x10F74, + 0x10F76, + 0x10F82, 0x10FB0, 0x10FB1, 0x10FB2, @@ -311015,7 +319421,7 @@ static const UV UNI_JT__L_invlist[] = { /* for all charsets */ }; static const UV UNI_JT__R_invlist[] = { /* for all charsets */ - 125, /* Number of elements */ + 131, /* Number of elements */ 148565664, /* Version and data structure type */ 1, /* 0 if the list starts at 0; 1 if it starts at the element beyond 0 */ @@ -311090,6 +319496,10 @@ static const UV UNI_JT__R_invlist[] = { /* for all charsets */ 0x868, 0x869, 0x86B, + 0x870, + 0x883, + 0x88E, + 0x88F, 0x8AA, 0x8AD, 0x8AE, @@ -311134,6 +319544,8 @@ static const UV UNI_JT__R_invlist[] = { /* for all charsets */ 0x10F34, 0x10F54, 0x10F55, + 0x10F74, + 0x10F76, 0x10FB4, 0x10FB7, 0x10FB9, @@ -311149,7 +319561,7 @@ static const UV UNI_JT__R_invlist[] = { /* for all charsets */ # if 'A' == 65 /* ASCII/Latin1 */ static const UV UNI_JT__T_invlist[] = { /* for ASCII/Latin1 */ - 677, /* Number of elements */ + 695, /* Number of elements */ 148565664, /* Version and data structure type */ 1, /* 0 if the list starts at 0; 1 if it starts at the element beyond 0 */ @@ -311208,7 +319620,9 @@ static const UV UNI_JT__T_invlist[] = { /* for ASCII/Latin1 */ 0x82E, 0x859, 0x85C, - 0x8D3, + 0x898, + 0x8A0, + 0x8CA, 0x8E2, 0x8E3, 0x903, @@ -311290,6 +319704,8 @@ static const UV UNI_JT__T_invlist[] = { /* for ASCII/Latin1 */ 0xC01, 0xC04, 0xC05, + 0xC3C, + 0xC3D, 0xC3E, 0xC41, 0xC46, @@ -311389,7 +319805,7 @@ static const UV UNI_JT__T_invlist[] = { /* for ASCII/Latin1 */ 0x1712, 0x1715, 0x1732, - 0x1735, + 0x1734, 0x1752, 0x1754, 0x1772, @@ -311406,6 +319822,8 @@ static const UV UNI_JT__T_invlist[] = { /* for ASCII/Latin1 */ 0x17DE, 0x180B, 0x180E, + 0x180F, + 0x1810, 0x1885, 0x1887, 0x18A9, @@ -311437,7 +319855,7 @@ static const UV UNI_JT__T_invlist[] = { /* for ASCII/Latin1 */ 0x1A7F, 0x1A80, 0x1AB0, - 0x1AC1, + 0x1ACF, 0x1B00, 0x1B04, 0x1B34, @@ -311483,8 +319901,6 @@ static const UV UNI_JT__T_invlist[] = { /* for ASCII/Latin1 */ 0x1CF8, 0x1CFA, 0x1DC0, - 0x1DFA, - 0x1DFB, 0x1E00, 0x200B, 0x200C, @@ -311612,16 +320028,24 @@ static const UV UNI_JT__T_invlist[] = { /* for ASCII/Latin1 */ 0x10EAD, 0x10F46, 0x10F51, + 0x10F82, + 0x10F86, 0x11001, 0x11002, 0x11038, 0x11047, + 0x11070, + 0x11071, + 0x11073, + 0x11075, 0x1107F, 0x11082, 0x110B3, 0x110B7, 0x110B9, 0x110BB, + 0x110C2, + 0x110C3, 0x11100, 0x11103, 0x11127, @@ -311784,6 +320208,10 @@ static const UV UNI_JT__T_invlist[] = { /* for ASCII/Latin1 */ 0x1BC9F, 0x1BCA0, 0x1BCA4, + 0x1CF00, + 0x1CF2E, + 0x1CF30, + 0x1CF47, 0x1D167, 0x1D16A, 0x1D173, @@ -311818,6 +320246,8 @@ static const UV UNI_JT__T_invlist[] = { /* for ASCII/Latin1 */ 0x1E02B, 0x1E130, 0x1E137, + 0x1E2AE, + 0x1E2AF, 0x1E2EC, 0x1E2F0, 0x1E8D0, @@ -311840,7 +320270,7 @@ static const UV UNI_JT__T_invlist[] = { /* for ASCII/Latin1 */ && '$' == 91 && '@' == 124 && '`' == 121 && '\n' == 21 static const UV UNI_JT__T_invlist[] = { /* for EBCDIC 1047 */ - 677, /* Number of elements */ + 695, /* Number of elements */ 148565664, /* Version and data structure type */ 1, /* 0 if the list starts at 0; 1 if it starts at the element beyond 0 */ @@ -311899,7 +320329,9 @@ static const UV UNI_JT__T_invlist[] = { /* for EBCDIC 1047 */ 0x82E, 0x859, 0x85C, - 0x8D3, + 0x898, + 0x8A0, + 0x8CA, 0x8E2, 0x8E3, 0x903, @@ -311981,6 +320413,8 @@ static const UV UNI_JT__T_invlist[] = { /* for EBCDIC 1047 */ 0xC01, 0xC04, 0xC05, + 0xC3C, + 0xC3D, 0xC3E, 0xC41, 0xC46, @@ -312080,7 +320514,7 @@ static const UV UNI_JT__T_invlist[] = { /* for EBCDIC 1047 */ 0x1712, 0x1715, 0x1732, - 0x1735, + 0x1734, 0x1752, 0x1754, 0x1772, @@ -312097,6 +320531,8 @@ static const UV UNI_JT__T_invlist[] = { /* for EBCDIC 1047 */ 0x17DE, 0x180B, 0x180E, + 0x180F, + 0x1810, 0x1885, 0x1887, 0x18A9, @@ -312128,7 +320564,7 @@ static const UV UNI_JT__T_invlist[] = { /* for EBCDIC 1047 */ 0x1A7F, 0x1A80, 0x1AB0, - 0x1AC1, + 0x1ACF, 0x1B00, 0x1B04, 0x1B34, @@ -312174,8 +320610,6 @@ static const UV UNI_JT__T_invlist[] = { /* for EBCDIC 1047 */ 0x1CF8, 0x1CFA, 0x1DC0, - 0x1DFA, - 0x1DFB, 0x1E00, 0x200B, 0x200C, @@ -312303,16 +320737,24 @@ static const UV UNI_JT__T_invlist[] = { /* for EBCDIC 1047 */ 0x10EAD, 0x10F46, 0x10F51, + 0x10F82, + 0x10F86, 0x11001, 0x11002, 0x11038, 0x11047, + 0x11070, + 0x11071, + 0x11073, + 0x11075, 0x1107F, 0x11082, 0x110B3, 0x110B7, 0x110B9, 0x110BB, + 0x110C2, + 0x110C3, 0x11100, 0x11103, 0x11127, @@ -312475,6 +320917,10 @@ static const UV UNI_JT__T_invlist[] = { /* for EBCDIC 1047 */ 0x1BC9F, 0x1BCA0, 0x1BCA4, + 0x1CF00, + 0x1CF2E, + 0x1CF30, + 0x1CF47, 0x1D167, 0x1D16A, 0x1D173, @@ -312509,6 +320955,8 @@ static const UV UNI_JT__T_invlist[] = { /* for EBCDIC 1047 */ 0x1E02B, 0x1E130, 0x1E137, + 0x1E2AE, + 0x1E2AF, 0x1E2EC, 0x1E2F0, 0x1E8D0, @@ -312531,7 +320979,7 @@ static const UV UNI_JT__T_invlist[] = { /* for EBCDIC 1047 */ && '$' == 91 && '@' == 124 && '`' == 121 && '\n' == 37 static const UV UNI_JT__T_invlist[] = { /* for EBCDIC 037 */ - 677, /* Number of elements */ + 695, /* Number of elements */ 148565664, /* Version and data structure type */ 1, /* 0 if the list starts at 0; 1 if it starts at the element beyond 0 */ @@ -312590,7 +321038,9 @@ static const UV UNI_JT__T_invlist[] = { /* for EBCDIC 037 */ 0x82E, 0x859, 0x85C, - 0x8D3, + 0x898, + 0x8A0, + 0x8CA, 0x8E2, 0x8E3, 0x903, @@ -312672,6 +321122,8 @@ static const UV UNI_JT__T_invlist[] = { /* for EBCDIC 037 */ 0xC01, 0xC04, 0xC05, + 0xC3C, + 0xC3D, 0xC3E, 0xC41, 0xC46, @@ -312771,7 +321223,7 @@ static const UV UNI_JT__T_invlist[] = { /* for EBCDIC 037 */ 0x1712, 0x1715, 0x1732, - 0x1735, + 0x1734, 0x1752, 0x1754, 0x1772, @@ -312788,6 +321240,8 @@ static const UV UNI_JT__T_invlist[] = { /* for EBCDIC 037 */ 0x17DE, 0x180B, 0x180E, + 0x180F, + 0x1810, 0x1885, 0x1887, 0x18A9, @@ -312819,7 +321273,7 @@ static const UV UNI_JT__T_invlist[] = { /* for EBCDIC 037 */ 0x1A7F, 0x1A80, 0x1AB0, - 0x1AC1, + 0x1ACF, 0x1B00, 0x1B04, 0x1B34, @@ -312865,8 +321319,6 @@ static const UV UNI_JT__T_invlist[] = { /* for EBCDIC 037 */ 0x1CF8, 0x1CFA, 0x1DC0, - 0x1DFA, - 0x1DFB, 0x1E00, 0x200B, 0x200C, @@ -312994,16 +321446,24 @@ static const UV UNI_JT__T_invlist[] = { /* for EBCDIC 037 */ 0x10EAD, 0x10F46, 0x10F51, + 0x10F82, + 0x10F86, 0x11001, 0x11002, 0x11038, 0x11047, + 0x11070, + 0x11071, + 0x11073, + 0x11075, 0x1107F, 0x11082, 0x110B3, 0x110B7, 0x110B9, 0x110BB, + 0x110C2, + 0x110C3, 0x11100, 0x11103, 0x11127, @@ -313166,6 +321626,10 @@ static const UV UNI_JT__T_invlist[] = { /* for EBCDIC 037 */ 0x1BC9F, 0x1BCA0, 0x1BCA4, + 0x1CF00, + 0x1CF2E, + 0x1CF30, + 0x1CF47, 0x1D167, 0x1D16A, 0x1D173, @@ -313200,6 +321664,8 @@ static const UV UNI_JT__T_invlist[] = { /* for EBCDIC 037 */ 0x1E02B, 0x1E130, 0x1E137, + 0x1E2AE, + 0x1E2AF, 0x1E2EC, 0x1E2F0, 0x1E8D0, @@ -313219,7 +321685,7 @@ static const UV UNI_JT__T_invlist[] = { /* for EBCDIC 037 */ # if 'A' == 65 /* ASCII/Latin1 */ static const UV UNI_JT__U_invlist[] = { /* for ASCII/Latin1 */ - 727, /* Number of elements */ + 745, /* Number of elements */ 148565664, /* Version and data structure type */ 0, /* 0 if the list starts at 0; 1 if it starts at the element beyond 0 */ @@ -313292,13 +321758,15 @@ static const UV UNI_JT__U_invlist[] = { /* for ASCII/Latin1 */ 0x866, 0x867, 0x86B, - 0x8A0, + 0x870, + 0x887, + 0x889, + 0x88F, + 0x898, 0x8AD, 0x8AE, - 0x8B5, - 0x8B6, - 0x8C8, - 0x8D3, + 0x8C9, + 0x8CA, 0x8E2, 0x8E3, 0x903, @@ -313380,6 +321848,8 @@ static const UV UNI_JT__U_invlist[] = { /* for ASCII/Latin1 */ 0xC01, 0xC04, 0xC05, + 0xC3C, + 0xC3D, 0xC3E, 0xC41, 0xC46, @@ -313479,7 +321949,7 @@ static const UV UNI_JT__U_invlist[] = { /* for ASCII/Latin1 */ 0x1712, 0x1715, 0x1732, - 0x1735, + 0x1734, 0x1752, 0x1754, 0x1772, @@ -313498,6 +321968,8 @@ static const UV UNI_JT__U_invlist[] = { /* for ASCII/Latin1 */ 0x1808, 0x180A, 0x180E, + 0x180F, + 0x1810, 0x1820, 0x1879, 0x1885, @@ -313529,7 +322001,7 @@ static const UV UNI_JT__U_invlist[] = { /* for ASCII/Latin1 */ 0x1A7F, 0x1A80, 0x1AB0, - 0x1AC1, + 0x1ACF, 0x1B00, 0x1B04, 0x1B34, @@ -313575,8 +322047,6 @@ static const UV UNI_JT__U_invlist[] = { /* for ASCII/Latin1 */ 0x1CF8, 0x1CFA, 0x1DC0, - 0x1DFA, - 0x1DFB, 0x1E00, 0x200B, 0x200C, @@ -313722,6 +322192,8 @@ static const UV UNI_JT__U_invlist[] = { /* for ASCII/Latin1 */ 0x10F45, 0x10F46, 0x10F55, + 0x10F70, + 0x10F86, 0x10FB0, 0x10FB1, 0x10FB2, @@ -313736,12 +322208,18 @@ static const UV UNI_JT__U_invlist[] = { /* for ASCII/Latin1 */ 0x11002, 0x11038, 0x11047, + 0x11070, + 0x11071, + 0x11073, + 0x11075, 0x1107F, 0x11082, 0x110B3, 0x110B7, 0x110B9, 0x110BB, + 0x110C2, + 0x110C3, 0x11100, 0x11103, 0x11127, @@ -313904,6 +322382,10 @@ static const UV UNI_JT__U_invlist[] = { /* for ASCII/Latin1 */ 0x1BC9F, 0x1BCA0, 0x1BCA4, + 0x1CF00, + 0x1CF2E, + 0x1CF30, + 0x1CF47, 0x1D167, 0x1D16A, 0x1D173, @@ -313938,6 +322420,8 @@ static const UV UNI_JT__U_invlist[] = { /* for ASCII/Latin1 */ 0x1E02B, 0x1E130, 0x1E137, + 0x1E2AE, + 0x1E2AF, 0x1E2EC, 0x1E2F0, 0x1E8D0, @@ -313960,7 +322444,7 @@ static const UV UNI_JT__U_invlist[] = { /* for ASCII/Latin1 */ && '$' == 91 && '@' == 124 && '`' == 121 && '\n' == 21 static const UV UNI_JT__U_invlist[] = { /* for EBCDIC 1047 */ - 727, /* Number of elements */ + 745, /* Number of elements */ 148565664, /* Version and data structure type */ 0, /* 0 if the list starts at 0; 1 if it starts at the element beyond 0 */ @@ -314033,13 +322517,15 @@ static const UV UNI_JT__U_invlist[] = { /* for EBCDIC 1047 */ 0x866, 0x867, 0x86B, - 0x8A0, + 0x870, + 0x887, + 0x889, + 0x88F, + 0x898, 0x8AD, 0x8AE, - 0x8B5, - 0x8B6, - 0x8C8, - 0x8D3, + 0x8C9, + 0x8CA, 0x8E2, 0x8E3, 0x903, @@ -314121,6 +322607,8 @@ static const UV UNI_JT__U_invlist[] = { /* for EBCDIC 1047 */ 0xC01, 0xC04, 0xC05, + 0xC3C, + 0xC3D, 0xC3E, 0xC41, 0xC46, @@ -314220,7 +322708,7 @@ static const UV UNI_JT__U_invlist[] = { /* for EBCDIC 1047 */ 0x1712, 0x1715, 0x1732, - 0x1735, + 0x1734, 0x1752, 0x1754, 0x1772, @@ -314239,6 +322727,8 @@ static const UV UNI_JT__U_invlist[] = { /* for EBCDIC 1047 */ 0x1808, 0x180A, 0x180E, + 0x180F, + 0x1810, 0x1820, 0x1879, 0x1885, @@ -314270,7 +322760,7 @@ static const UV UNI_JT__U_invlist[] = { /* for EBCDIC 1047 */ 0x1A7F, 0x1A80, 0x1AB0, - 0x1AC1, + 0x1ACF, 0x1B00, 0x1B04, 0x1B34, @@ -314316,8 +322806,6 @@ static const UV UNI_JT__U_invlist[] = { /* for EBCDIC 1047 */ 0x1CF8, 0x1CFA, 0x1DC0, - 0x1DFA, - 0x1DFB, 0x1E00, 0x200B, 0x200C, @@ -314463,6 +322951,8 @@ static const UV UNI_JT__U_invlist[] = { /* for EBCDIC 1047 */ 0x10F45, 0x10F46, 0x10F55, + 0x10F70, + 0x10F86, 0x10FB0, 0x10FB1, 0x10FB2, @@ -314477,12 +322967,18 @@ static const UV UNI_JT__U_invlist[] = { /* for EBCDIC 1047 */ 0x11002, 0x11038, 0x11047, + 0x11070, + 0x11071, + 0x11073, + 0x11075, 0x1107F, 0x11082, 0x110B3, 0x110B7, 0x110B9, 0x110BB, + 0x110C2, + 0x110C3, 0x11100, 0x11103, 0x11127, @@ -314645,6 +323141,10 @@ static const UV UNI_JT__U_invlist[] = { /* for EBCDIC 1047 */ 0x1BC9F, 0x1BCA0, 0x1BCA4, + 0x1CF00, + 0x1CF2E, + 0x1CF30, + 0x1CF47, 0x1D167, 0x1D16A, 0x1D173, @@ -314679,6 +323179,8 @@ static const UV UNI_JT__U_invlist[] = { /* for EBCDIC 1047 */ 0x1E02B, 0x1E130, 0x1E137, + 0x1E2AE, + 0x1E2AF, 0x1E2EC, 0x1E2F0, 0x1E8D0, @@ -314701,7 +323203,7 @@ static const UV UNI_JT__U_invlist[] = { /* for EBCDIC 1047 */ && '$' == 91 && '@' == 124 && '`' == 121 && '\n' == 37 static const UV UNI_JT__U_invlist[] = { /* for EBCDIC 037 */ - 727, /* Number of elements */ + 745, /* Number of elements */ 148565664, /* Version and data structure type */ 0, /* 0 if the list starts at 0; 1 if it starts at the element beyond 0 */ @@ -314774,13 +323276,15 @@ static const UV UNI_JT__U_invlist[] = { /* for EBCDIC 037 */ 0x866, 0x867, 0x86B, - 0x8A0, + 0x870, + 0x887, + 0x889, + 0x88F, + 0x898, 0x8AD, 0x8AE, - 0x8B5, - 0x8B6, - 0x8C8, - 0x8D3, + 0x8C9, + 0x8CA, 0x8E2, 0x8E3, 0x903, @@ -314862,6 +323366,8 @@ static const UV UNI_JT__U_invlist[] = { /* for EBCDIC 037 */ 0xC01, 0xC04, 0xC05, + 0xC3C, + 0xC3D, 0xC3E, 0xC41, 0xC46, @@ -314961,7 +323467,7 @@ static const UV UNI_JT__U_invlist[] = { /* for EBCDIC 037 */ 0x1712, 0x1715, 0x1732, - 0x1735, + 0x1734, 0x1752, 0x1754, 0x1772, @@ -314980,6 +323486,8 @@ static const UV UNI_JT__U_invlist[] = { /* for EBCDIC 037 */ 0x1808, 0x180A, 0x180E, + 0x180F, + 0x1810, 0x1820, 0x1879, 0x1885, @@ -315011,7 +323519,7 @@ static const UV UNI_JT__U_invlist[] = { /* for EBCDIC 037 */ 0x1A7F, 0x1A80, 0x1AB0, - 0x1AC1, + 0x1ACF, 0x1B00, 0x1B04, 0x1B34, @@ -315057,8 +323565,6 @@ static const UV UNI_JT__U_invlist[] = { /* for EBCDIC 037 */ 0x1CF8, 0x1CFA, 0x1DC0, - 0x1DFA, - 0x1DFB, 0x1E00, 0x200B, 0x200C, @@ -315204,6 +323710,8 @@ static const UV UNI_JT__U_invlist[] = { /* for EBCDIC 037 */ 0x10F45, 0x10F46, 0x10F55, + 0x10F70, + 0x10F86, 0x10FB0, 0x10FB1, 0x10FB2, @@ -315218,12 +323726,18 @@ static const UV UNI_JT__U_invlist[] = { /* for EBCDIC 037 */ 0x11002, 0x11038, 0x11047, + 0x11070, + 0x11071, + 0x11073, + 0x11075, 0x1107F, 0x11082, 0x110B3, 0x110B7, 0x110B9, 0x110BB, + 0x110C2, + 0x110C3, 0x11100, 0x11103, 0x11127, @@ -315386,6 +323900,10 @@ static const UV UNI_JT__U_invlist[] = { /* for EBCDIC 037 */ 0x1BC9F, 0x1BCA0, 0x1BCA4, + 0x1CF00, + 0x1CF2E, + 0x1CF30, + 0x1CF47, 0x1D167, 0x1D16A, 0x1D173, @@ -315420,6 +323938,8 @@ static const UV UNI_JT__U_invlist[] = { /* for EBCDIC 037 */ 0x1E02B, 0x1E130, 0x1E137, + 0x1E2AE, + 0x1E2AF, 0x1E2EC, 0x1E2F0, 0x1E8D0, @@ -315447,7 +323967,7 @@ static const UV UNI_KALI_invlist[] = { /* for all charsets */ }; static const UV UNI_KANA_invlist[] = { /* for all charsets */ - 31, /* Number of elements */ + 39, /* Number of elements */ 148565664, /* Version and data structure type */ 1, /* 0 if the list starts at 0; 1 if it starts at the element beyond 0 */ @@ -315478,8 +323998,16 @@ static const UV UNI_KANA_invlist[] = { /* for all charsets */ 0xFE47, 0xFF61, 0xFFA0, + 0x1AFF0, + 0x1AFF4, + 0x1AFF5, + 0x1AFFC, + 0x1AFFD, + 0x1AFFF, 0x1B000, 0x1B001, + 0x1B120, + 0x1B123, 0x1B164, 0x1B168 }; @@ -315494,6 +324022,16 @@ static const UV UNI_KANAEXTA_invlist[] = { /* for all charsets */ 0x1B130 }; +static const UV UNI_KANAEXTB_invlist[] = { /* for all charsets */ + 3, /* Number of elements */ + 148565664, /* Version and data structure type */ + 1, /* 0 if the list starts at 0; + 1 if it starts at the element beyond 0 */ + 0x0, + 0x1AFF0, + 0x1B000 +}; + static const UV UNI_KANASUP_invlist[] = { /* for all charsets */ 3, /* Number of elements */ 148565664, /* Version and data structure type */ @@ -315640,7 +324178,7 @@ static const UV UNI_KNDA_invlist[] = { /* for all charsets */ 0xCCE, 0xCD5, 0xCD7, - 0xCDE, + 0xCDD, 0xCDF, 0xCE0, 0xCE4, @@ -315673,7 +324211,7 @@ static const UV UNI_KTHI_invlist[] = { /* for all charsets */ 0xA830, 0xA83A, 0x11080, - 0x110C2, + 0x110C3, 0x110CD, 0x110CE }; @@ -315681,7 +324219,7 @@ static const UV UNI_KTHI_invlist[] = { /* for all charsets */ # if 'A' == 65 /* ASCII/Latin1 */ static const UV UNI_L_invlist[] = { /* for ASCII/Latin1 */ - 1245, /* Number of elements */ + 1297, /* Number of elements */ 148565664, /* Version and data structure type */ 1, /* 0 if the list starts at 0; 1 if it starts at the element beyond 0 */ @@ -315784,10 +324322,12 @@ static const UV UNI_L_invlist[] = { /* for ASCII/Latin1 */ 0x859, 0x860, 0x86B, + 0x870, + 0x888, + 0x889, + 0x88F, 0x8A0, - 0x8B5, - 0x8B6, - 0x8C8, + 0x8CA, 0x904, 0x93A, 0x93D, @@ -315916,6 +324456,8 @@ static const UV UNI_L_invlist[] = { /* for ASCII/Latin1 */ 0xC3E, 0xC58, 0xC5B, + 0xC5D, + 0xC5E, 0xC60, 0xC62, 0xC80, @@ -315932,7 +324474,7 @@ static const UV UNI_L_invlist[] = { /* for ASCII/Latin1 */ 0xCBA, 0xCBD, 0xCBE, - 0xCDE, + 0xCDD, 0xCDF, 0xCE0, 0xCE2, @@ -316075,10 +324617,8 @@ static const UV UNI_L_invlist[] = { /* for ASCII/Latin1 */ 0x16F1, 0x16F9, 0x1700, - 0x170D, - 0x170E, 0x1712, - 0x1720, + 0x171F, 0x1732, 0x1740, 0x1752, @@ -316121,7 +324661,7 @@ static const UV UNI_L_invlist[] = { /* for ASCII/Latin1 */ 0x1B05, 0x1B34, 0x1B45, - 0x1B4C, + 0x1B4D, 0x1B83, 0x1BA1, 0x1BAE, @@ -316223,10 +324763,6 @@ static const UV UNI_L_invlist[] = { /* for ASCII/Latin1 */ 0x2183, 0x2185, 0x2C00, - 0x2C2F, - 0x2C30, - 0x2C5F, - 0x2C60, 0x2CE5, 0x2CEB, 0x2CEF, @@ -316287,8 +324823,6 @@ static const UV UNI_L_invlist[] = { /* for ASCII/Latin1 */ 0x3400, 0x4DC0, 0x4E00, - 0x9FFD, - 0xA000, 0xA48D, 0xA4D0, 0xA4FE, @@ -316309,10 +324843,14 @@ static const UV UNI_L_invlist[] = { /* for ASCII/Latin1 */ 0xA722, 0xA789, 0xA78B, - 0xA7C0, - 0xA7C2, 0xA7CB, - 0xA7F5, + 0xA7D0, + 0xA7D2, + 0xA7D3, + 0xA7D4, + 0xA7D5, + 0xA7DA, + 0xA7F2, 0xA802, 0xA803, 0xA806, @@ -316488,12 +325026,34 @@ static const UV UNI_L_invlist[] = { /* for ASCII/Latin1 */ 0x10528, 0x10530, 0x10564, + 0x10570, + 0x1057B, + 0x1057C, + 0x1058B, + 0x1058C, + 0x10593, + 0x10594, + 0x10596, + 0x10597, + 0x105A2, + 0x105A3, + 0x105B2, + 0x105B3, + 0x105BA, + 0x105BB, + 0x105BD, 0x10600, 0x10737, 0x10740, 0x10756, 0x10760, 0x10768, + 0x10780, + 0x10786, + 0x10787, + 0x107B1, + 0x107B2, + 0x107BB, 0x10800, 0x10806, 0x10808, @@ -316564,12 +325124,18 @@ static const UV UNI_L_invlist[] = { /* for ASCII/Latin1 */ 0x10F28, 0x10F30, 0x10F46, + 0x10F70, + 0x10F82, 0x10FB0, 0x10FC5, 0x10FE0, 0x10FF7, 0x11003, 0x11038, + 0x11071, + 0x11073, + 0x11075, + 0x11076, 0x11083, 0x110B0, 0x110D0, @@ -316652,6 +325218,8 @@ static const UV UNI_L_invlist[] = { /* for ASCII/Latin1 */ 0x116B9, 0x11700, 0x1171B, + 0x11740, + 0x11747, 0x11800, 0x1182C, 0x118A0, @@ -316690,7 +325258,7 @@ static const UV UNI_L_invlist[] = { /* for ASCII/Latin1 */ 0x11A8A, 0x11A9D, 0x11A9E, - 0x11AC0, + 0x11AB0, 0x11AF9, 0x11C00, 0x11C09, @@ -316724,6 +325292,8 @@ static const UV UNI_L_invlist[] = { /* for ASCII/Latin1 */ 0x1239A, 0x12480, 0x12544, + 0x12F90, + 0x12FF1, 0x13000, 0x1342F, 0x14400, @@ -316732,6 +325302,8 @@ static const UV UNI_L_invlist[] = { /* for ASCII/Latin1 */ 0x16A39, 0x16A40, 0x16A5F, + 0x16A70, + 0x16ABF, 0x16AD0, 0x16AEE, 0x16B00, @@ -316760,8 +325332,14 @@ static const UV UNI_L_invlist[] = { /* for ASCII/Latin1 */ 0x18CD6, 0x18D00, 0x18D09, + 0x1AFF0, + 0x1AFF4, + 0x1AFF5, + 0x1AFFC, + 0x1AFFD, + 0x1AFFF, 0x1B000, - 0x1B11F, + 0x1B123, 0x1B150, 0x1B153, 0x1B164, @@ -316836,14 +325414,26 @@ static const UV UNI_L_invlist[] = { /* for ASCII/Latin1 */ 0x1D7C3, 0x1D7C4, 0x1D7CC, + 0x1DF00, + 0x1DF1F, 0x1E100, 0x1E12D, 0x1E137, 0x1E13E, 0x1E14E, 0x1E14F, + 0x1E290, + 0x1E2AE, 0x1E2C0, 0x1E2EC, + 0x1E7E0, + 0x1E7E7, + 0x1E7E8, + 0x1E7EC, + 0x1E7ED, + 0x1E7EF, + 0x1E7F0, + 0x1E7FF, 0x1E800, 0x1E8C5, 0x1E900, @@ -316917,9 +325507,9 @@ static const UV UNI_L_invlist[] = { /* for ASCII/Latin1 */ 0x1EEAB, 0x1EEBC, 0x20000, - 0x2A6DE, + 0x2A6E0, 0x2A700, - 0x2B735, + 0x2B739, 0x2B740, 0x2B81E, 0x2B820, @@ -316940,7 +325530,7 @@ static const UV UNI_L_invlist[] = { /* for ASCII/Latin1 */ && '$' == 91 && '@' == 124 && '`' == 121 && '\n' == 21 static const UV UNI_L_invlist[] = { /* for EBCDIC 1047 */ - 1271, /* Number of elements */ + 1323, /* Number of elements */ 148565664, /* Version and data structure type */ 1, /* 0 if the list starts at 0; 1 if it starts at the element beyond 0 */ @@ -317069,10 +325659,12 @@ static const UV UNI_L_invlist[] = { /* for EBCDIC 1047 */ 0x859, 0x860, 0x86B, + 0x870, + 0x888, + 0x889, + 0x88F, 0x8A0, - 0x8B5, - 0x8B6, - 0x8C8, + 0x8CA, 0x904, 0x93A, 0x93D, @@ -317201,6 +325793,8 @@ static const UV UNI_L_invlist[] = { /* for EBCDIC 1047 */ 0xC3E, 0xC58, 0xC5B, + 0xC5D, + 0xC5E, 0xC60, 0xC62, 0xC80, @@ -317217,7 +325811,7 @@ static const UV UNI_L_invlist[] = { /* for EBCDIC 1047 */ 0xCBA, 0xCBD, 0xCBE, - 0xCDE, + 0xCDD, 0xCDF, 0xCE0, 0xCE2, @@ -317360,10 +325954,8 @@ static const UV UNI_L_invlist[] = { /* for EBCDIC 1047 */ 0x16F1, 0x16F9, 0x1700, - 0x170D, - 0x170E, 0x1712, - 0x1720, + 0x171F, 0x1732, 0x1740, 0x1752, @@ -317406,7 +325998,7 @@ static const UV UNI_L_invlist[] = { /* for EBCDIC 1047 */ 0x1B05, 0x1B34, 0x1B45, - 0x1B4C, + 0x1B4D, 0x1B83, 0x1BA1, 0x1BAE, @@ -317508,10 +326100,6 @@ static const UV UNI_L_invlist[] = { /* for EBCDIC 1047 */ 0x2183, 0x2185, 0x2C00, - 0x2C2F, - 0x2C30, - 0x2C5F, - 0x2C60, 0x2CE5, 0x2CEB, 0x2CEF, @@ -317572,8 +326160,6 @@ static const UV UNI_L_invlist[] = { /* for EBCDIC 1047 */ 0x3400, 0x4DC0, 0x4E00, - 0x9FFD, - 0xA000, 0xA48D, 0xA4D0, 0xA4FE, @@ -317594,10 +326180,14 @@ static const UV UNI_L_invlist[] = { /* for EBCDIC 1047 */ 0xA722, 0xA789, 0xA78B, - 0xA7C0, - 0xA7C2, 0xA7CB, - 0xA7F5, + 0xA7D0, + 0xA7D2, + 0xA7D3, + 0xA7D4, + 0xA7D5, + 0xA7DA, + 0xA7F2, 0xA802, 0xA803, 0xA806, @@ -317773,12 +326363,34 @@ static const UV UNI_L_invlist[] = { /* for EBCDIC 1047 */ 0x10528, 0x10530, 0x10564, + 0x10570, + 0x1057B, + 0x1057C, + 0x1058B, + 0x1058C, + 0x10593, + 0x10594, + 0x10596, + 0x10597, + 0x105A2, + 0x105A3, + 0x105B2, + 0x105B3, + 0x105BA, + 0x105BB, + 0x105BD, 0x10600, 0x10737, 0x10740, 0x10756, 0x10760, 0x10768, + 0x10780, + 0x10786, + 0x10787, + 0x107B1, + 0x107B2, + 0x107BB, 0x10800, 0x10806, 0x10808, @@ -317849,12 +326461,18 @@ static const UV UNI_L_invlist[] = { /* for EBCDIC 1047 */ 0x10F28, 0x10F30, 0x10F46, + 0x10F70, + 0x10F82, 0x10FB0, 0x10FC5, 0x10FE0, 0x10FF7, 0x11003, 0x11038, + 0x11071, + 0x11073, + 0x11075, + 0x11076, 0x11083, 0x110B0, 0x110D0, @@ -317937,6 +326555,8 @@ static const UV UNI_L_invlist[] = { /* for EBCDIC 1047 */ 0x116B9, 0x11700, 0x1171B, + 0x11740, + 0x11747, 0x11800, 0x1182C, 0x118A0, @@ -317975,7 +326595,7 @@ static const UV UNI_L_invlist[] = { /* for EBCDIC 1047 */ 0x11A8A, 0x11A9D, 0x11A9E, - 0x11AC0, + 0x11AB0, 0x11AF9, 0x11C00, 0x11C09, @@ -318009,6 +326629,8 @@ static const UV UNI_L_invlist[] = { /* for EBCDIC 1047 */ 0x1239A, 0x12480, 0x12544, + 0x12F90, + 0x12FF1, 0x13000, 0x1342F, 0x14400, @@ -318017,6 +326639,8 @@ static const UV UNI_L_invlist[] = { /* for EBCDIC 1047 */ 0x16A39, 0x16A40, 0x16A5F, + 0x16A70, + 0x16ABF, 0x16AD0, 0x16AEE, 0x16B00, @@ -318045,8 +326669,14 @@ static const UV UNI_L_invlist[] = { /* for EBCDIC 1047 */ 0x18CD6, 0x18D00, 0x18D09, + 0x1AFF0, + 0x1AFF4, + 0x1AFF5, + 0x1AFFC, + 0x1AFFD, + 0x1AFFF, 0x1B000, - 0x1B11F, + 0x1B123, 0x1B150, 0x1B153, 0x1B164, @@ -318121,14 +326751,26 @@ static const UV UNI_L_invlist[] = { /* for EBCDIC 1047 */ 0x1D7C3, 0x1D7C4, 0x1D7CC, + 0x1DF00, + 0x1DF1F, 0x1E100, 0x1E12D, 0x1E137, 0x1E13E, 0x1E14E, 0x1E14F, + 0x1E290, + 0x1E2AE, 0x1E2C0, 0x1E2EC, + 0x1E7E0, + 0x1E7E7, + 0x1E7E8, + 0x1E7EC, + 0x1E7ED, + 0x1E7EF, + 0x1E7F0, + 0x1E7FF, 0x1E800, 0x1E8C5, 0x1E900, @@ -318202,9 +326844,9 @@ static const UV UNI_L_invlist[] = { /* for EBCDIC 1047 */ 0x1EEAB, 0x1EEBC, 0x20000, - 0x2A6DE, + 0x2A6E0, 0x2A700, - 0x2B735, + 0x2B739, 0x2B740, 0x2B81E, 0x2B820, @@ -318225,7 +326867,7 @@ static const UV UNI_L_invlist[] = { /* for EBCDIC 1047 */ && '$' == 91 && '@' == 124 && '`' == 121 && '\n' == 37 static const UV UNI_L_invlist[] = { /* for EBCDIC 037 */ - 1267, /* Number of elements */ + 1319, /* Number of elements */ 148565664, /* Version and data structure type */ 1, /* 0 if the list starts at 0; 1 if it starts at the element beyond 0 */ @@ -318350,10 +326992,12 @@ static const UV UNI_L_invlist[] = { /* for EBCDIC 037 */ 0x859, 0x860, 0x86B, + 0x870, + 0x888, + 0x889, + 0x88F, 0x8A0, - 0x8B5, - 0x8B6, - 0x8C8, + 0x8CA, 0x904, 0x93A, 0x93D, @@ -318482,6 +327126,8 @@ static const UV UNI_L_invlist[] = { /* for EBCDIC 037 */ 0xC3E, 0xC58, 0xC5B, + 0xC5D, + 0xC5E, 0xC60, 0xC62, 0xC80, @@ -318498,7 +327144,7 @@ static const UV UNI_L_invlist[] = { /* for EBCDIC 037 */ 0xCBA, 0xCBD, 0xCBE, - 0xCDE, + 0xCDD, 0xCDF, 0xCE0, 0xCE2, @@ -318641,10 +327287,8 @@ static const UV UNI_L_invlist[] = { /* for EBCDIC 037 */ 0x16F1, 0x16F9, 0x1700, - 0x170D, - 0x170E, 0x1712, - 0x1720, + 0x171F, 0x1732, 0x1740, 0x1752, @@ -318687,7 +327331,7 @@ static const UV UNI_L_invlist[] = { /* for EBCDIC 037 */ 0x1B05, 0x1B34, 0x1B45, - 0x1B4C, + 0x1B4D, 0x1B83, 0x1BA1, 0x1BAE, @@ -318789,10 +327433,6 @@ static const UV UNI_L_invlist[] = { /* for EBCDIC 037 */ 0x2183, 0x2185, 0x2C00, - 0x2C2F, - 0x2C30, - 0x2C5F, - 0x2C60, 0x2CE5, 0x2CEB, 0x2CEF, @@ -318853,8 +327493,6 @@ static const UV UNI_L_invlist[] = { /* for EBCDIC 037 */ 0x3400, 0x4DC0, 0x4E00, - 0x9FFD, - 0xA000, 0xA48D, 0xA4D0, 0xA4FE, @@ -318875,10 +327513,14 @@ static const UV UNI_L_invlist[] = { /* for EBCDIC 037 */ 0xA722, 0xA789, 0xA78B, - 0xA7C0, - 0xA7C2, 0xA7CB, - 0xA7F5, + 0xA7D0, + 0xA7D2, + 0xA7D3, + 0xA7D4, + 0xA7D5, + 0xA7DA, + 0xA7F2, 0xA802, 0xA803, 0xA806, @@ -319054,12 +327696,34 @@ static const UV UNI_L_invlist[] = { /* for EBCDIC 037 */ 0x10528, 0x10530, 0x10564, + 0x10570, + 0x1057B, + 0x1057C, + 0x1058B, + 0x1058C, + 0x10593, + 0x10594, + 0x10596, + 0x10597, + 0x105A2, + 0x105A3, + 0x105B2, + 0x105B3, + 0x105BA, + 0x105BB, + 0x105BD, 0x10600, 0x10737, 0x10740, 0x10756, 0x10760, 0x10768, + 0x10780, + 0x10786, + 0x10787, + 0x107B1, + 0x107B2, + 0x107BB, 0x10800, 0x10806, 0x10808, @@ -319130,12 +327794,18 @@ static const UV UNI_L_invlist[] = { /* for EBCDIC 037 */ 0x10F28, 0x10F30, 0x10F46, + 0x10F70, + 0x10F82, 0x10FB0, 0x10FC5, 0x10FE0, 0x10FF7, 0x11003, 0x11038, + 0x11071, + 0x11073, + 0x11075, + 0x11076, 0x11083, 0x110B0, 0x110D0, @@ -319218,6 +327888,8 @@ static const UV UNI_L_invlist[] = { /* for EBCDIC 037 */ 0x116B9, 0x11700, 0x1171B, + 0x11740, + 0x11747, 0x11800, 0x1182C, 0x118A0, @@ -319256,7 +327928,7 @@ static const UV UNI_L_invlist[] = { /* for EBCDIC 037 */ 0x11A8A, 0x11A9D, 0x11A9E, - 0x11AC0, + 0x11AB0, 0x11AF9, 0x11C00, 0x11C09, @@ -319290,6 +327962,8 @@ static const UV UNI_L_invlist[] = { /* for EBCDIC 037 */ 0x1239A, 0x12480, 0x12544, + 0x12F90, + 0x12FF1, 0x13000, 0x1342F, 0x14400, @@ -319298,6 +327972,8 @@ static const UV UNI_L_invlist[] = { /* for EBCDIC 037 */ 0x16A39, 0x16A40, 0x16A5F, + 0x16A70, + 0x16ABF, 0x16AD0, 0x16AEE, 0x16B00, @@ -319326,8 +328002,14 @@ static const UV UNI_L_invlist[] = { /* for EBCDIC 037 */ 0x18CD6, 0x18D00, 0x18D09, + 0x1AFF0, + 0x1AFF4, + 0x1AFF5, + 0x1AFFC, + 0x1AFFD, + 0x1AFFF, 0x1B000, - 0x1B11F, + 0x1B123, 0x1B150, 0x1B153, 0x1B164, @@ -319402,14 +328084,26 @@ static const UV UNI_L_invlist[] = { /* for EBCDIC 037 */ 0x1D7C3, 0x1D7C4, 0x1D7CC, + 0x1DF00, + 0x1DF1F, 0x1E100, 0x1E12D, 0x1E137, 0x1E13E, 0x1E14E, 0x1E14F, + 0x1E290, + 0x1E2AE, 0x1E2C0, 0x1E2EC, + 0x1E7E0, + 0x1E7E7, + 0x1E7E8, + 0x1E7EC, + 0x1E7ED, + 0x1E7EF, + 0x1E7F0, + 0x1E7FF, 0x1E800, 0x1E8C5, 0x1E900, @@ -319483,9 +328177,9 @@ static const UV UNI_L_invlist[] = { /* for EBCDIC 037 */ 0x1EEAB, 0x1EEBC, 0x20000, - 0x2A6DE, + 0x2A6E0, 0x2A700, - 0x2B735, + 0x2B739, 0x2B740, 0x2B81E, 0x2B820, @@ -319762,10 +328456,30 @@ static const UV UNI_LATINEXTE_invlist[] = { /* for all charsets */ 0xAB70 }; +static const UV UNI_LATINEXTF_invlist[] = { /* for all charsets */ + 3, /* Number of elements */ + 148565664, /* Version and data structure type */ + 1, /* 0 if the list starts at 0; + 1 if it starts at the element beyond 0 */ + 0x0, + 0x10780, + 0x107C0 +}; + +static const UV UNI_LATINEXTG_invlist[] = { /* for all charsets */ + 3, /* Number of elements */ + 148565664, /* Version and data structure type */ + 1, /* 0 if the list starts at 0; + 1 if it starts at the element beyond 0 */ + 0x0, + 0x1DF00, + 0x1E000 +}; + # if 'A' == 65 /* ASCII/Latin1 */ static const UV UNI_LATN_invlist[] = { /* for ASCII/Latin1 */ - 81, /* Number of elements */ + 93, /* Number of elements */ 148565664, /* Version and data structure type */ 1, /* 0 if the list starts at 0; 1 if it starts at the element beyond 0 */ @@ -319831,10 +328545,14 @@ static const UV UNI_LATN_invlist[] = { /* for ASCII/Latin1 */ 0xA722, 0xA788, 0xA78B, - 0xA7C0, - 0xA7C2, 0xA7CB, - 0xA7F5, + 0xA7D0, + 0xA7D2, + 0xA7D3, + 0xA7D4, + 0xA7D5, + 0xA7DA, + 0xA7F2, 0xA800, 0xA92E, 0xA92F, @@ -319849,7 +328567,15 @@ static const UV UNI_LATN_invlist[] = { /* for ASCII/Latin1 */ 0xFF21, 0xFF3B, 0xFF41, - 0xFF5B + 0xFF5B, + 0x10780, + 0x10786, + 0x10787, + 0x107B1, + 0x107B2, + 0x107BB, + 0x1DF00, + 0x1DF1F }; # endif /* ASCII/Latin1 */ @@ -319860,7 +328586,7 @@ static const UV UNI_LATN_invlist[] = { /* for ASCII/Latin1 */ && '$' == 91 && '@' == 124 && '`' == 121 && '\n' == 21 static const UV UNI_LATN_invlist[] = { /* for EBCDIC 1047 */ - 107, /* Number of elements */ + 119, /* Number of elements */ 148565664, /* Version and data structure type */ 1, /* 0 if the list starts at 0; 1 if it starts at the element beyond 0 */ @@ -319952,10 +328678,14 @@ static const UV UNI_LATN_invlist[] = { /* for EBCDIC 1047 */ 0xA722, 0xA788, 0xA78B, - 0xA7C0, - 0xA7C2, 0xA7CB, - 0xA7F5, + 0xA7D0, + 0xA7D2, + 0xA7D3, + 0xA7D4, + 0xA7D5, + 0xA7DA, + 0xA7F2, 0xA800, 0xA92E, 0xA92F, @@ -319970,7 +328700,15 @@ static const UV UNI_LATN_invlist[] = { /* for EBCDIC 1047 */ 0xFF21, 0xFF3B, 0xFF41, - 0xFF5B + 0xFF5B, + 0x10780, + 0x10786, + 0x10787, + 0x107B1, + 0x107B2, + 0x107BB, + 0x1DF00, + 0x1DF1F }; # endif /* EBCDIC 1047 */ @@ -319981,7 +328719,7 @@ static const UV UNI_LATN_invlist[] = { /* for EBCDIC 1047 */ && '$' == 91 && '@' == 124 && '`' == 121 && '\n' == 37 static const UV UNI_LATN_invlist[] = { /* for EBCDIC 037 */ - 103, /* Number of elements */ + 115, /* Number of elements */ 148565664, /* Version and data structure type */ 1, /* 0 if the list starts at 0; 1 if it starts at the element beyond 0 */ @@ -320069,10 +328807,14 @@ static const UV UNI_LATN_invlist[] = { /* for EBCDIC 037 */ 0xA722, 0xA788, 0xA78B, - 0xA7C0, - 0xA7C2, 0xA7CB, - 0xA7F5, + 0xA7D0, + 0xA7D2, + 0xA7D3, + 0xA7D4, + 0xA7D5, + 0xA7DA, + 0xA7F2, 0xA800, 0xA92E, 0xA92F, @@ -320087,7 +328829,15 @@ static const UV UNI_LATN_invlist[] = { /* for EBCDIC 037 */ 0xFF21, 0xFF3B, 0xFF41, - 0xFF5B + 0xFF5B, + 0x10780, + 0x10786, + 0x10787, + 0x107B1, + 0x107B2, + 0x107BB, + 0x1DF00, + 0x1DF1F }; # endif /* EBCDIC 037 */ @@ -320803,7 +329553,7 @@ static const UV UNI_LB__AI_invlist[] = { /* for EBCDIC 037 */ # if 'A' == 65 /* ASCII/Latin1 */ static const UV UNI_LB__AL_invlist[] = { /* for ASCII/Latin1 */ - 1541, /* Number of elements */ + 1597, /* Number of elements */ 148565664, /* Version and data structure type */ 1, /* 0 if the list starts at 0; 1 if it starts at the element beyond 0 */ @@ -320928,10 +329678,12 @@ static const UV UNI_LB__AL_invlist[] = { /* for ASCII/Latin1 */ 0x85F, 0x860, 0x86B, + 0x870, + 0x88F, + 0x890, + 0x892, 0x8A0, - 0x8B5, - 0x8B6, - 0x8C8, + 0x8CA, 0x8E2, 0x8E3, 0x904, @@ -321074,6 +329826,8 @@ static const UV UNI_LB__AL_invlist[] = { /* for ASCII/Latin1 */ 0xC3E, 0xC58, 0xC5B, + 0xC5D, + 0xC5E, 0xC60, 0xC62, 0xC78, @@ -321090,7 +329844,7 @@ static const UV UNI_LB__AL_invlist[] = { /* for ASCII/Latin1 */ 0xCBA, 0xCBD, 0xCBE, - 0xCDE, + 0xCDD, 0xCDF, 0xCE0, 0xCE2, @@ -321219,10 +329973,8 @@ static const UV UNI_LB__AL_invlist[] = { /* for ASCII/Latin1 */ 0x16EE, 0x16F9, 0x1700, - 0x170D, - 0x170E, 0x1712, - 0x1720, + 0x171F, 0x1732, 0x1740, 0x1752, @@ -321261,7 +330013,7 @@ static const UV UNI_LB__AL_invlist[] = { /* for ASCII/Latin1 */ 0x1B05, 0x1B34, 0x1B45, - 0x1B4C, + 0x1B4D, 0x1B5C, 0x1B5D, 0x1B61, @@ -321559,10 +330311,6 @@ static const UV UNI_LB__AL_invlist[] = { /* for ASCII/Latin1 */ 0x2B76, 0x2B96, 0x2B97, - 0x2C2F, - 0x2C30, - 0x2C5F, - 0x2C60, 0x2CEF, 0x2CF2, 0x2CF4, @@ -321637,10 +330385,14 @@ static const UV UNI_LB__AL_invlist[] = { /* for ASCII/Latin1 */ 0xA6F2, 0xA6F3, 0xA700, - 0xA7C0, - 0xA7C2, 0xA7CB, - 0xA7F5, + 0xA7D0, + 0xA7D2, + 0xA7D3, + 0xA7D4, + 0xA7D5, + 0xA7DA, + 0xA7F2, 0xA802, 0xA803, 0xA806, @@ -321711,17 +330463,19 @@ static const UV UNI_LB__AL_invlist[] = { /* for ASCII/Latin1 */ 0xFB29, 0xFB2A, 0xFB50, - 0xFBC2, + 0xFBC3, 0xFBD3, 0xFD3E, - 0xFD50, + 0xFD40, 0xFD90, 0xFD92, 0xFDC8, + 0xFDCF, + 0xFDD0, 0xFDF0, 0xFDFC, 0xFDFD, - 0xFDFE, + 0xFE00, 0xFE70, 0xFE75, 0xFE76, @@ -321783,13 +330537,33 @@ static const UV UNI_LB__AL_invlist[] = { /* for ASCII/Latin1 */ 0x10530, 0x10564, 0x1056F, - 0x10570, + 0x1057B, + 0x1057C, + 0x1058B, + 0x1058C, + 0x10593, + 0x10594, + 0x10596, + 0x10597, + 0x105A2, + 0x105A3, + 0x105B2, + 0x105B3, + 0x105BA, + 0x105BB, + 0x105BD, 0x10600, 0x10737, 0x10740, 0x10756, 0x10760, 0x10768, + 0x10780, + 0x10786, + 0x10787, + 0x107B1, + 0x107B2, + 0x107BB, 0x10800, 0x10806, 0x10808, @@ -321870,6 +330644,10 @@ static const UV UNI_LB__AL_invlist[] = { /* for ASCII/Latin1 */ 0x10F46, 0x10F51, 0x10F5A, + 0x10F70, + 0x10F82, + 0x10F86, + 0x10F8A, 0x10FB0, 0x10FCC, 0x10FE0, @@ -321880,6 +330658,10 @@ static const UV UNI_LB__AL_invlist[] = { /* for ASCII/Latin1 */ 0x1104E, 0x11052, 0x11066, + 0x11071, + 0x11073, + 0x11075, + 0x11076, 0x11083, 0x110B0, 0x110BB, @@ -321979,7 +330761,7 @@ static const UV UNI_LB__AL_invlist[] = { /* for ASCII/Latin1 */ 0x11680, 0x116AB, 0x116B8, - 0x116B9, + 0x116BA, 0x11800, 0x1182C, 0x1183B, @@ -322026,7 +330808,7 @@ static const UV UNI_LB__AL_invlist[] = { /* for ASCII/Latin1 */ 0x11A8A, 0x11A9D, 0x11A9E, - 0x11AC0, + 0x11AB0, 0x11AF9, 0x11C00, 0x11C09, @@ -322070,6 +330852,8 @@ static const UV UNI_LB__AL_invlist[] = { /* for ASCII/Latin1 */ 0x1246F, 0x12480, 0x12544, + 0x12F90, + 0x12FF3, 0x13000, 0x13258, 0x1325E, @@ -322088,6 +330872,8 @@ static const UV UNI_LB__AL_invlist[] = { /* for ASCII/Latin1 */ 0x16A39, 0x16A40, 0x16A5F, + 0x16A70, + 0x16ABF, 0x16AD0, 0x16AEE, 0x16B00, @@ -322114,6 +330900,12 @@ static const UV UNI_LB__AL_invlist[] = { /* for ASCII/Latin1 */ 0x16FA0, 0x18B00, 0x18CD6, + 0x1AFF0, + 0x1AFF4, + 0x1AFF5, + 0x1AFFC, + 0x1AFFD, + 0x1AFFF, 0x1BC00, 0x1BC6B, 0x1BC70, @@ -322124,6 +330916,8 @@ static const UV UNI_LB__AL_invlist[] = { /* for ASCII/Latin1 */ 0x1BC9A, 0x1BC9C, 0x1BC9D, + 0x1CF50, + 0x1CFC4, 0x1D000, 0x1D0F6, 0x1D100, @@ -322137,7 +330931,7 @@ static const UV UNI_LB__AL_invlist[] = { /* for ASCII/Latin1 */ 0x1D18C, 0x1D1AA, 0x1D1AE, - 0x1D1E9, + 0x1D1EB, 0x1D200, 0x1D242, 0x1D245, @@ -322200,14 +330994,26 @@ static const UV UNI_LB__AL_invlist[] = { /* for ASCII/Latin1 */ 0x1DA87, 0x1DA8B, 0x1DA8C, + 0x1DF00, + 0x1DF1F, 0x1E100, 0x1E12D, 0x1E137, 0x1E13E, 0x1E14E, 0x1E150, + 0x1E290, + 0x1E2AE, 0x1E2C0, 0x1E2EC, + 0x1E7E0, + 0x1E7E7, + 0x1E7E8, + 0x1E7EC, + 0x1E7ED, + 0x1E7EF, + 0x1E7F0, + 0x1E7FF, 0x1E800, 0x1E8C5, 0x1E8C7, @@ -322358,7 +331164,7 @@ static const UV UNI_LB__AL_invlist[] = { /* for ASCII/Latin1 */ && '$' == 91 && '@' == 124 && '`' == 121 && '\n' == 21 static const UV UNI_LB__AL_invlist[] = { /* for EBCDIC 1047 */ - 1569, /* Number of elements */ + 1625, /* Number of elements */ 148565664, /* Version and data structure type */ 1, /* 0 if the list starts at 0; 1 if it starts at the element beyond 0 */ @@ -322511,10 +331317,12 @@ static const UV UNI_LB__AL_invlist[] = { /* for EBCDIC 1047 */ 0x85F, 0x860, 0x86B, + 0x870, + 0x88F, + 0x890, + 0x892, 0x8A0, - 0x8B5, - 0x8B6, - 0x8C8, + 0x8CA, 0x8E2, 0x8E3, 0x904, @@ -322657,6 +331465,8 @@ static const UV UNI_LB__AL_invlist[] = { /* for EBCDIC 1047 */ 0xC3E, 0xC58, 0xC5B, + 0xC5D, + 0xC5E, 0xC60, 0xC62, 0xC78, @@ -322673,7 +331483,7 @@ static const UV UNI_LB__AL_invlist[] = { /* for EBCDIC 1047 */ 0xCBA, 0xCBD, 0xCBE, - 0xCDE, + 0xCDD, 0xCDF, 0xCE0, 0xCE2, @@ -322802,10 +331612,8 @@ static const UV UNI_LB__AL_invlist[] = { /* for EBCDIC 1047 */ 0x16EE, 0x16F9, 0x1700, - 0x170D, - 0x170E, 0x1712, - 0x1720, + 0x171F, 0x1732, 0x1740, 0x1752, @@ -322844,7 +331652,7 @@ static const UV UNI_LB__AL_invlist[] = { /* for EBCDIC 1047 */ 0x1B05, 0x1B34, 0x1B45, - 0x1B4C, + 0x1B4D, 0x1B5C, 0x1B5D, 0x1B61, @@ -323142,10 +331950,6 @@ static const UV UNI_LB__AL_invlist[] = { /* for EBCDIC 1047 */ 0x2B76, 0x2B96, 0x2B97, - 0x2C2F, - 0x2C30, - 0x2C5F, - 0x2C60, 0x2CEF, 0x2CF2, 0x2CF4, @@ -323220,10 +332024,14 @@ static const UV UNI_LB__AL_invlist[] = { /* for EBCDIC 1047 */ 0xA6F2, 0xA6F3, 0xA700, - 0xA7C0, - 0xA7C2, 0xA7CB, - 0xA7F5, + 0xA7D0, + 0xA7D2, + 0xA7D3, + 0xA7D4, + 0xA7D5, + 0xA7DA, + 0xA7F2, 0xA802, 0xA803, 0xA806, @@ -323294,17 +332102,19 @@ static const UV UNI_LB__AL_invlist[] = { /* for EBCDIC 1047 */ 0xFB29, 0xFB2A, 0xFB50, - 0xFBC2, + 0xFBC3, 0xFBD3, 0xFD3E, - 0xFD50, + 0xFD40, 0xFD90, 0xFD92, 0xFDC8, + 0xFDCF, + 0xFDD0, 0xFDF0, 0xFDFC, 0xFDFD, - 0xFDFE, + 0xFE00, 0xFE70, 0xFE75, 0xFE76, @@ -323366,13 +332176,33 @@ static const UV UNI_LB__AL_invlist[] = { /* for EBCDIC 1047 */ 0x10530, 0x10564, 0x1056F, - 0x10570, + 0x1057B, + 0x1057C, + 0x1058B, + 0x1058C, + 0x10593, + 0x10594, + 0x10596, + 0x10597, + 0x105A2, + 0x105A3, + 0x105B2, + 0x105B3, + 0x105BA, + 0x105BB, + 0x105BD, 0x10600, 0x10737, 0x10740, 0x10756, 0x10760, 0x10768, + 0x10780, + 0x10786, + 0x10787, + 0x107B1, + 0x107B2, + 0x107BB, 0x10800, 0x10806, 0x10808, @@ -323453,6 +332283,10 @@ static const UV UNI_LB__AL_invlist[] = { /* for EBCDIC 1047 */ 0x10F46, 0x10F51, 0x10F5A, + 0x10F70, + 0x10F82, + 0x10F86, + 0x10F8A, 0x10FB0, 0x10FCC, 0x10FE0, @@ -323463,6 +332297,10 @@ static const UV UNI_LB__AL_invlist[] = { /* for EBCDIC 1047 */ 0x1104E, 0x11052, 0x11066, + 0x11071, + 0x11073, + 0x11075, + 0x11076, 0x11083, 0x110B0, 0x110BB, @@ -323562,7 +332400,7 @@ static const UV UNI_LB__AL_invlist[] = { /* for EBCDIC 1047 */ 0x11680, 0x116AB, 0x116B8, - 0x116B9, + 0x116BA, 0x11800, 0x1182C, 0x1183B, @@ -323609,7 +332447,7 @@ static const UV UNI_LB__AL_invlist[] = { /* for EBCDIC 1047 */ 0x11A8A, 0x11A9D, 0x11A9E, - 0x11AC0, + 0x11AB0, 0x11AF9, 0x11C00, 0x11C09, @@ -323653,6 +332491,8 @@ static const UV UNI_LB__AL_invlist[] = { /* for EBCDIC 1047 */ 0x1246F, 0x12480, 0x12544, + 0x12F90, + 0x12FF3, 0x13000, 0x13258, 0x1325E, @@ -323671,6 +332511,8 @@ static const UV UNI_LB__AL_invlist[] = { /* for EBCDIC 1047 */ 0x16A39, 0x16A40, 0x16A5F, + 0x16A70, + 0x16ABF, 0x16AD0, 0x16AEE, 0x16B00, @@ -323697,6 +332539,12 @@ static const UV UNI_LB__AL_invlist[] = { /* for EBCDIC 1047 */ 0x16FA0, 0x18B00, 0x18CD6, + 0x1AFF0, + 0x1AFF4, + 0x1AFF5, + 0x1AFFC, + 0x1AFFD, + 0x1AFFF, 0x1BC00, 0x1BC6B, 0x1BC70, @@ -323707,6 +332555,8 @@ static const UV UNI_LB__AL_invlist[] = { /* for EBCDIC 1047 */ 0x1BC9A, 0x1BC9C, 0x1BC9D, + 0x1CF50, + 0x1CFC4, 0x1D000, 0x1D0F6, 0x1D100, @@ -323720,7 +332570,7 @@ static const UV UNI_LB__AL_invlist[] = { /* for EBCDIC 1047 */ 0x1D18C, 0x1D1AA, 0x1D1AE, - 0x1D1E9, + 0x1D1EB, 0x1D200, 0x1D242, 0x1D245, @@ -323783,14 +332633,26 @@ static const UV UNI_LB__AL_invlist[] = { /* for EBCDIC 1047 */ 0x1DA87, 0x1DA8B, 0x1DA8C, + 0x1DF00, + 0x1DF1F, 0x1E100, 0x1E12D, 0x1E137, 0x1E13E, 0x1E14E, 0x1E150, + 0x1E290, + 0x1E2AE, 0x1E2C0, 0x1E2EC, + 0x1E7E0, + 0x1E7E7, + 0x1E7E8, + 0x1E7EC, + 0x1E7ED, + 0x1E7EF, + 0x1E7F0, + 0x1E7FF, 0x1E800, 0x1E8C5, 0x1E8C7, @@ -323941,7 +332803,7 @@ static const UV UNI_LB__AL_invlist[] = { /* for EBCDIC 1047 */ && '$' == 91 && '@' == 124 && '`' == 121 && '\n' == 37 static const UV UNI_LB__AL_invlist[] = { /* for EBCDIC 037 */ - 1565, /* Number of elements */ + 1621, /* Number of elements */ 148565664, /* Version and data structure type */ 1, /* 0 if the list starts at 0; 1 if it starts at the element beyond 0 */ @@ -324090,10 +332952,12 @@ static const UV UNI_LB__AL_invlist[] = { /* for EBCDIC 037 */ 0x85F, 0x860, 0x86B, + 0x870, + 0x88F, + 0x890, + 0x892, 0x8A0, - 0x8B5, - 0x8B6, - 0x8C8, + 0x8CA, 0x8E2, 0x8E3, 0x904, @@ -324236,6 +333100,8 @@ static const UV UNI_LB__AL_invlist[] = { /* for EBCDIC 037 */ 0xC3E, 0xC58, 0xC5B, + 0xC5D, + 0xC5E, 0xC60, 0xC62, 0xC78, @@ -324252,7 +333118,7 @@ static const UV UNI_LB__AL_invlist[] = { /* for EBCDIC 037 */ 0xCBA, 0xCBD, 0xCBE, - 0xCDE, + 0xCDD, 0xCDF, 0xCE0, 0xCE2, @@ -324381,10 +333247,8 @@ static const UV UNI_LB__AL_invlist[] = { /* for EBCDIC 037 */ 0x16EE, 0x16F9, 0x1700, - 0x170D, - 0x170E, 0x1712, - 0x1720, + 0x171F, 0x1732, 0x1740, 0x1752, @@ -324423,7 +333287,7 @@ static const UV UNI_LB__AL_invlist[] = { /* for EBCDIC 037 */ 0x1B05, 0x1B34, 0x1B45, - 0x1B4C, + 0x1B4D, 0x1B5C, 0x1B5D, 0x1B61, @@ -324721,10 +333585,6 @@ static const UV UNI_LB__AL_invlist[] = { /* for EBCDIC 037 */ 0x2B76, 0x2B96, 0x2B97, - 0x2C2F, - 0x2C30, - 0x2C5F, - 0x2C60, 0x2CEF, 0x2CF2, 0x2CF4, @@ -324799,10 +333659,14 @@ static const UV UNI_LB__AL_invlist[] = { /* for EBCDIC 037 */ 0xA6F2, 0xA6F3, 0xA700, - 0xA7C0, - 0xA7C2, 0xA7CB, - 0xA7F5, + 0xA7D0, + 0xA7D2, + 0xA7D3, + 0xA7D4, + 0xA7D5, + 0xA7DA, + 0xA7F2, 0xA802, 0xA803, 0xA806, @@ -324873,17 +333737,19 @@ static const UV UNI_LB__AL_invlist[] = { /* for EBCDIC 037 */ 0xFB29, 0xFB2A, 0xFB50, - 0xFBC2, + 0xFBC3, 0xFBD3, 0xFD3E, - 0xFD50, + 0xFD40, 0xFD90, 0xFD92, 0xFDC8, + 0xFDCF, + 0xFDD0, 0xFDF0, 0xFDFC, 0xFDFD, - 0xFDFE, + 0xFE00, 0xFE70, 0xFE75, 0xFE76, @@ -324945,13 +333811,33 @@ static const UV UNI_LB__AL_invlist[] = { /* for EBCDIC 037 */ 0x10530, 0x10564, 0x1056F, - 0x10570, + 0x1057B, + 0x1057C, + 0x1058B, + 0x1058C, + 0x10593, + 0x10594, + 0x10596, + 0x10597, + 0x105A2, + 0x105A3, + 0x105B2, + 0x105B3, + 0x105BA, + 0x105BB, + 0x105BD, 0x10600, 0x10737, 0x10740, 0x10756, 0x10760, 0x10768, + 0x10780, + 0x10786, + 0x10787, + 0x107B1, + 0x107B2, + 0x107BB, 0x10800, 0x10806, 0x10808, @@ -325032,6 +333918,10 @@ static const UV UNI_LB__AL_invlist[] = { /* for EBCDIC 037 */ 0x10F46, 0x10F51, 0x10F5A, + 0x10F70, + 0x10F82, + 0x10F86, + 0x10F8A, 0x10FB0, 0x10FCC, 0x10FE0, @@ -325042,6 +333932,10 @@ static const UV UNI_LB__AL_invlist[] = { /* for EBCDIC 037 */ 0x1104E, 0x11052, 0x11066, + 0x11071, + 0x11073, + 0x11075, + 0x11076, 0x11083, 0x110B0, 0x110BB, @@ -325141,7 +334035,7 @@ static const UV UNI_LB__AL_invlist[] = { /* for EBCDIC 037 */ 0x11680, 0x116AB, 0x116B8, - 0x116B9, + 0x116BA, 0x11800, 0x1182C, 0x1183B, @@ -325188,7 +334082,7 @@ static const UV UNI_LB__AL_invlist[] = { /* for EBCDIC 037 */ 0x11A8A, 0x11A9D, 0x11A9E, - 0x11AC0, + 0x11AB0, 0x11AF9, 0x11C00, 0x11C09, @@ -325232,6 +334126,8 @@ static const UV UNI_LB__AL_invlist[] = { /* for EBCDIC 037 */ 0x1246F, 0x12480, 0x12544, + 0x12F90, + 0x12FF3, 0x13000, 0x13258, 0x1325E, @@ -325250,6 +334146,8 @@ static const UV UNI_LB__AL_invlist[] = { /* for EBCDIC 037 */ 0x16A39, 0x16A40, 0x16A5F, + 0x16A70, + 0x16ABF, 0x16AD0, 0x16AEE, 0x16B00, @@ -325276,6 +334174,12 @@ static const UV UNI_LB__AL_invlist[] = { /* for EBCDIC 037 */ 0x16FA0, 0x18B00, 0x18CD6, + 0x1AFF0, + 0x1AFF4, + 0x1AFF5, + 0x1AFFC, + 0x1AFFD, + 0x1AFFF, 0x1BC00, 0x1BC6B, 0x1BC70, @@ -325286,6 +334190,8 @@ static const UV UNI_LB__AL_invlist[] = { /* for EBCDIC 037 */ 0x1BC9A, 0x1BC9C, 0x1BC9D, + 0x1CF50, + 0x1CFC4, 0x1D000, 0x1D0F6, 0x1D100, @@ -325299,7 +334205,7 @@ static const UV UNI_LB__AL_invlist[] = { /* for EBCDIC 037 */ 0x1D18C, 0x1D1AA, 0x1D1AE, - 0x1D1E9, + 0x1D1EB, 0x1D200, 0x1D242, 0x1D245, @@ -325362,14 +334268,26 @@ static const UV UNI_LB__AL_invlist[] = { /* for EBCDIC 037 */ 0x1DA87, 0x1DA8B, 0x1DA8C, + 0x1DF00, + 0x1DF1F, 0x1E100, 0x1E12D, 0x1E137, 0x1E13E, 0x1E14E, 0x1E150, + 0x1E290, + 0x1E2AE, 0x1E2C0, 0x1E2EC, + 0x1E7E0, + 0x1E7E7, + 0x1E7E8, + 0x1E7EC, + 0x1E7ED, + 0x1E7EF, + 0x1E7F0, + 0x1E7FF, 0x1E800, 0x1E8C5, 0x1E8C7, @@ -325529,7 +334447,7 @@ static const UV UNI_LB__B2_invlist[] = { /* for all charsets */ # if 'A' == 65 /* ASCII/Latin1 */ static const UV UNI_LB__BA_invlist[] = { /* for ASCII/Latin1 */ - 197, /* Number of elements */ + 201, /* Number of elements */ 148565664, /* Version and data structure type */ 1, /* 0 if the list starts at 0; 1 if it starts at the element beyond 0 */ @@ -325584,6 +334502,8 @@ static const UV UNI_LB__BA_invlist[] = { /* for ASCII/Latin1 */ 0x1B5C, 0x1B5D, 0x1B61, + 0x1B7D, + 0x1B7F, 0x1C3B, 0x1C40, 0x1C7E, @@ -325632,6 +334552,8 @@ static const UV UNI_LB__BA_invlist[] = { /* for ASCII/Latin1 */ 0x2E4D, 0x2E4E, 0x2E50, + 0x2E5D, + 0x2E5E, 0x3000, 0x3001, 0xA4FE, @@ -325740,7 +334662,7 @@ static const UV UNI_LB__BA_invlist[] = { /* for ASCII/Latin1 */ && '$' == 91 && '@' == 124 && '`' == 121 && '\n' == 21 static const UV UNI_LB__BA_invlist[] = { /* for EBCDIC 1047 */ - 197, /* Number of elements */ + 201, /* Number of elements */ 148565664, /* Version and data structure type */ 1, /* 0 if the list starts at 0; 1 if it starts at the element beyond 0 */ @@ -325795,6 +334717,8 @@ static const UV UNI_LB__BA_invlist[] = { /* for EBCDIC 1047 */ 0x1B5C, 0x1B5D, 0x1B61, + 0x1B7D, + 0x1B7F, 0x1C3B, 0x1C40, 0x1C7E, @@ -325843,6 +334767,8 @@ static const UV UNI_LB__BA_invlist[] = { /* for EBCDIC 1047 */ 0x2E4D, 0x2E4E, 0x2E50, + 0x2E5D, + 0x2E5E, 0x3000, 0x3001, 0xA4FE, @@ -325951,7 +334877,7 @@ static const UV UNI_LB__BA_invlist[] = { /* for EBCDIC 1047 */ && '$' == 91 && '@' == 124 && '`' == 121 && '\n' == 37 static const UV UNI_LB__BA_invlist[] = { /* for EBCDIC 037 */ - 197, /* Number of elements */ + 201, /* Number of elements */ 148565664, /* Version and data structure type */ 1, /* 0 if the list starts at 0; 1 if it starts at the element beyond 0 */ @@ -326006,6 +334932,8 @@ static const UV UNI_LB__BA_invlist[] = { /* for EBCDIC 037 */ 0x1B5C, 0x1B5D, 0x1B61, + 0x1B7D, + 0x1B7F, 0x1C3B, 0x1C40, 0x1C7E, @@ -326054,6 +334982,8 @@ static const UV UNI_LB__BA_invlist[] = { /* for EBCDIC 037 */ 0x2E4D, 0x2E4E, 0x2E50, + 0x2E5D, + 0x2E5E, 0x3000, 0x3001, 0xA4FE, @@ -326471,7 +335401,7 @@ static const UV UNI_LB__CJ_invlist[] = { /* for all charsets */ # if 'A' == 65 /* ASCII/Latin1 */ static const UV UNI_LB__CL_invlist[] = { /* for ASCII/Latin1 */ - 167, /* Number of elements */ + 175, /* Number of elements */ 148565664, /* Version and data structure type */ 1, /* 0 if the list starts at 0; 1 if it starts at the element beyond 0 */ @@ -326558,6 +335488,14 @@ static const UV UNI_LB__CL_invlist[] = { /* for ASCII/Latin1 */ 0x2E28, 0x2E29, 0x2E2A, + 0x2E56, + 0x2E57, + 0x2E58, + 0x2E59, + 0x2E5A, + 0x2E5B, + 0x2E5C, + 0x2E5D, 0x3001, 0x3003, 0x3009, @@ -326652,7 +335590,7 @@ static const UV UNI_LB__CL_invlist[] = { /* for ASCII/Latin1 */ && '$' == 91 && '@' == 124 && '`' == 121 && '\n' == 21 static const UV UNI_LB__CL_invlist[] = { /* for EBCDIC 1047 */ - 167, /* Number of elements */ + 175, /* Number of elements */ 148565664, /* Version and data structure type */ 1, /* 0 if the list starts at 0; 1 if it starts at the element beyond 0 */ @@ -326739,6 +335677,14 @@ static const UV UNI_LB__CL_invlist[] = { /* for EBCDIC 1047 */ 0x2E28, 0x2E29, 0x2E2A, + 0x2E56, + 0x2E57, + 0x2E58, + 0x2E59, + 0x2E5A, + 0x2E5B, + 0x2E5C, + 0x2E5D, 0x3001, 0x3003, 0x3009, @@ -326833,7 +335779,7 @@ static const UV UNI_LB__CL_invlist[] = { /* for EBCDIC 1047 */ && '$' == 91 && '@' == 124 && '`' == 121 && '\n' == 37 static const UV UNI_LB__CL_invlist[] = { /* for EBCDIC 037 */ - 167, /* Number of elements */ + 175, /* Number of elements */ 148565664, /* Version and data structure type */ 1, /* 0 if the list starts at 0; 1 if it starts at the element beyond 0 */ @@ -326920,6 +335866,14 @@ static const UV UNI_LB__CL_invlist[] = { /* for EBCDIC 037 */ 0x2E28, 0x2E29, 0x2E2A, + 0x2E56, + 0x2E57, + 0x2E58, + 0x2E59, + 0x2E5A, + 0x2E5B, + 0x2E5C, + 0x2E5D, 0x3001, 0x3003, 0x3009, @@ -327011,7 +335965,7 @@ static const UV UNI_LB__CL_invlist[] = { /* for EBCDIC 037 */ # if 'A' == 65 /* ASCII/Latin1 */ static const UV UNI_LB__CM_invlist[] = { /* for ASCII/Latin1 */ - 556, /* Number of elements */ + 574, /* Number of elements */ 148565664, /* Version and data structure type */ 0, /* 0 if the list starts at 0; 1 if it starts at the element beyond 0 */ @@ -327077,7 +336031,9 @@ static const UV UNI_LB__CM_invlist[] = { /* for ASCII/Latin1 */ 0x82E, 0x859, 0x85C, - 0x8D3, + 0x898, + 0x8A0, + 0x8CA, 0x8E2, 0x8E3, 0x904, @@ -327161,6 +336117,8 @@ static const UV UNI_LB__CM_invlist[] = { /* for ASCII/Latin1 */ 0xBD8, 0xC00, 0xC05, + 0xC3C, + 0xC3D, 0xC3E, 0xC45, 0xC46, @@ -327236,7 +336194,7 @@ static const UV UNI_LB__CM_invlist[] = { /* for ASCII/Latin1 */ 0x135D, 0x1360, 0x1712, - 0x1715, + 0x1716, 0x1732, 0x1735, 0x1752, @@ -327245,6 +336203,8 @@ static const UV UNI_LB__CM_invlist[] = { /* for ASCII/Latin1 */ 0x1774, 0x180B, 0x180E, + 0x180F, + 0x1810, 0x1885, 0x1887, 0x18A9, @@ -327258,7 +336218,7 @@ static const UV UNI_LB__CM_invlist[] = { /* for ASCII/Latin1 */ 0x1A7F, 0x1A80, 0x1AB0, - 0x1AC1, + 0x1ACF, 0x1B00, 0x1B05, 0x1B34, @@ -327284,8 +336244,6 @@ static const UV UNI_LB__CM_invlist[] = { /* for ASCII/Latin1 */ 0x1CF7, 0x1CFA, 0x1DC0, - 0x1DFA, - 0x1DFB, 0x1E00, 0x200C, 0x200D, @@ -327389,14 +336347,22 @@ static const UV UNI_LB__CM_invlist[] = { /* for ASCII/Latin1 */ 0x10EAD, 0x10F46, 0x10F51, + 0x10F82, + 0x10F86, 0x11000, 0x11003, 0x11038, 0x11047, + 0x11070, + 0x11071, + 0x11073, + 0x11075, 0x1107F, 0x11083, 0x110B0, 0x110BB, + 0x110C2, + 0x110C3, 0x11100, 0x11103, 0x11127, @@ -327525,6 +336491,10 @@ static const UV UNI_LB__CM_invlist[] = { /* for ASCII/Latin1 */ 0x1BC9F, 0x1BCA0, 0x1BCA4, + 0x1CF00, + 0x1CF2E, + 0x1CF30, + 0x1CF47, 0x1D165, 0x1D16A, 0x1D16D, @@ -327559,6 +336529,8 @@ static const UV UNI_LB__CM_invlist[] = { /* for ASCII/Latin1 */ 0x1E02B, 0x1E130, 0x1E137, + 0x1E2AE, + 0x1E2AF, 0x1E2EC, 0x1E2F0, 0x1E8D0, @@ -327581,7 +336553,7 @@ static const UV UNI_LB__CM_invlist[] = { /* for ASCII/Latin1 */ && '$' == 91 && '@' == 124 && '`' == 121 && '\n' == 21 static const UV UNI_LB__CM_invlist[] = { /* for EBCDIC 1047 */ - 560, /* Number of elements */ + 578, /* Number of elements */ 148565664, /* Version and data structure type */ 0, /* 0 if the list starts at 0; 1 if it starts at the element beyond 0 */ @@ -327651,7 +336623,9 @@ static const UV UNI_LB__CM_invlist[] = { /* for EBCDIC 1047 */ 0x82E, 0x859, 0x85C, - 0x8D3, + 0x898, + 0x8A0, + 0x8CA, 0x8E2, 0x8E3, 0x904, @@ -327735,6 +336709,8 @@ static const UV UNI_LB__CM_invlist[] = { /* for EBCDIC 1047 */ 0xBD8, 0xC00, 0xC05, + 0xC3C, + 0xC3D, 0xC3E, 0xC45, 0xC46, @@ -327810,7 +336786,7 @@ static const UV UNI_LB__CM_invlist[] = { /* for EBCDIC 1047 */ 0x135D, 0x1360, 0x1712, - 0x1715, + 0x1716, 0x1732, 0x1735, 0x1752, @@ -327819,6 +336795,8 @@ static const UV UNI_LB__CM_invlist[] = { /* for EBCDIC 1047 */ 0x1774, 0x180B, 0x180E, + 0x180F, + 0x1810, 0x1885, 0x1887, 0x18A9, @@ -327832,7 +336810,7 @@ static const UV UNI_LB__CM_invlist[] = { /* for EBCDIC 1047 */ 0x1A7F, 0x1A80, 0x1AB0, - 0x1AC1, + 0x1ACF, 0x1B00, 0x1B05, 0x1B34, @@ -327858,8 +336836,6 @@ static const UV UNI_LB__CM_invlist[] = { /* for EBCDIC 1047 */ 0x1CF7, 0x1CFA, 0x1DC0, - 0x1DFA, - 0x1DFB, 0x1E00, 0x200C, 0x200D, @@ -327963,14 +336939,22 @@ static const UV UNI_LB__CM_invlist[] = { /* for EBCDIC 1047 */ 0x10EAD, 0x10F46, 0x10F51, + 0x10F82, + 0x10F86, 0x11000, 0x11003, 0x11038, 0x11047, + 0x11070, + 0x11071, + 0x11073, + 0x11075, 0x1107F, 0x11083, 0x110B0, 0x110BB, + 0x110C2, + 0x110C3, 0x11100, 0x11103, 0x11127, @@ -328099,6 +337083,10 @@ static const UV UNI_LB__CM_invlist[] = { /* for EBCDIC 1047 */ 0x1BC9F, 0x1BCA0, 0x1BCA4, + 0x1CF00, + 0x1CF2E, + 0x1CF30, + 0x1CF47, 0x1D165, 0x1D16A, 0x1D16D, @@ -328133,6 +337121,8 @@ static const UV UNI_LB__CM_invlist[] = { /* for EBCDIC 1047 */ 0x1E02B, 0x1E130, 0x1E137, + 0x1E2AE, + 0x1E2AF, 0x1E2EC, 0x1E2F0, 0x1E8D0, @@ -328155,7 +337145,7 @@ static const UV UNI_LB__CM_invlist[] = { /* for EBCDIC 1047 */ && '$' == 91 && '@' == 124 && '`' == 121 && '\n' == 37 static const UV UNI_LB__CM_invlist[] = { /* for EBCDIC 037 */ - 560, /* Number of elements */ + 578, /* Number of elements */ 148565664, /* Version and data structure type */ 0, /* 0 if the list starts at 0; 1 if it starts at the element beyond 0 */ @@ -328225,7 +337215,9 @@ static const UV UNI_LB__CM_invlist[] = { /* for EBCDIC 037 */ 0x82E, 0x859, 0x85C, - 0x8D3, + 0x898, + 0x8A0, + 0x8CA, 0x8E2, 0x8E3, 0x904, @@ -328309,6 +337301,8 @@ static const UV UNI_LB__CM_invlist[] = { /* for EBCDIC 037 */ 0xBD8, 0xC00, 0xC05, + 0xC3C, + 0xC3D, 0xC3E, 0xC45, 0xC46, @@ -328384,7 +337378,7 @@ static const UV UNI_LB__CM_invlist[] = { /* for EBCDIC 037 */ 0x135D, 0x1360, 0x1712, - 0x1715, + 0x1716, 0x1732, 0x1735, 0x1752, @@ -328393,6 +337387,8 @@ static const UV UNI_LB__CM_invlist[] = { /* for EBCDIC 037 */ 0x1774, 0x180B, 0x180E, + 0x180F, + 0x1810, 0x1885, 0x1887, 0x18A9, @@ -328406,7 +337402,7 @@ static const UV UNI_LB__CM_invlist[] = { /* for EBCDIC 037 */ 0x1A7F, 0x1A80, 0x1AB0, - 0x1AC1, + 0x1ACF, 0x1B00, 0x1B05, 0x1B34, @@ -328432,8 +337428,6 @@ static const UV UNI_LB__CM_invlist[] = { /* for EBCDIC 037 */ 0x1CF7, 0x1CFA, 0x1DC0, - 0x1DFA, - 0x1DFB, 0x1E00, 0x200C, 0x200D, @@ -328537,14 +337531,22 @@ static const UV UNI_LB__CM_invlist[] = { /* for EBCDIC 037 */ 0x10EAD, 0x10F46, 0x10F51, + 0x10F82, + 0x10F86, 0x11000, 0x11003, 0x11038, 0x11047, + 0x11070, + 0x11071, + 0x11073, + 0x11075, 0x1107F, 0x11083, 0x110B0, 0x110BB, + 0x110C2, + 0x110C3, 0x11100, 0x11103, 0x11127, @@ -328673,6 +337675,10 @@ static const UV UNI_LB__CM_invlist[] = { /* for EBCDIC 037 */ 0x1BC9F, 0x1BCA0, 0x1BCA4, + 0x1CF00, + 0x1CF2E, + 0x1CF30, + 0x1CF47, 0x1D165, 0x1D16A, 0x1D16D, @@ -328707,6 +337713,8 @@ static const UV UNI_LB__CM_invlist[] = { /* for EBCDIC 037 */ 0x1E02B, 0x1E130, 0x1E137, + 0x1E2AE, + 0x1E2AF, 0x1E2EC, 0x1E2F0, 0x1E8D0, @@ -328828,7 +337836,7 @@ static const UV UNI_LB__CR_invlist[] = { /* for EBCDIC 037 */ # if 'A' == 65 /* ASCII/Latin1 */ static const UV UNI_LB__EX_invlist[] = { /* for ASCII/Latin1 */ - 49, /* Number of elements */ + 51, /* Number of elements */ 148565664, /* Version and data structure type */ 1, /* 0 if the list starts at 0; 1 if it starts at the element beyond 0 */ @@ -328841,7 +337849,7 @@ static const UV UNI_LB__EX_invlist[] = { /* for ASCII/Latin1 */ 0x5C7, 0x61B, 0x61C, - 0x61E, + 0x61D, 0x620, 0x6D4, 0x6D5, @@ -328865,6 +337873,8 @@ static const UV UNI_LB__EX_invlist[] = { /* for ASCII/Latin1 */ 0x2CFF, 0x2E2E, 0x2E2F, + 0x2E53, + 0x2E55, 0xA60E, 0xA60F, 0xA876, @@ -328891,7 +337901,7 @@ static const UV UNI_LB__EX_invlist[] = { /* for ASCII/Latin1 */ && '$' == 91 && '@' == 124 && '`' == 121 && '\n' == 21 static const UV UNI_LB__EX_invlist[] = { /* for EBCDIC 1047 */ - 49, /* Number of elements */ + 51, /* Number of elements */ 148565664, /* Version and data structure type */ 1, /* 0 if the list starts at 0; 1 if it starts at the element beyond 0 */ @@ -328904,7 +337914,7 @@ static const UV UNI_LB__EX_invlist[] = { /* for EBCDIC 1047 */ 0x5C7, 0x61B, 0x61C, - 0x61E, + 0x61D, 0x620, 0x6D4, 0x6D5, @@ -328928,6 +337938,8 @@ static const UV UNI_LB__EX_invlist[] = { /* for EBCDIC 1047 */ 0x2CFF, 0x2E2E, 0x2E2F, + 0x2E53, + 0x2E55, 0xA60E, 0xA60F, 0xA876, @@ -328954,7 +337966,7 @@ static const UV UNI_LB__EX_invlist[] = { /* for EBCDIC 1047 */ && '$' == 91 && '@' == 124 && '`' == 121 && '\n' == 37 static const UV UNI_LB__EX_invlist[] = { /* for EBCDIC 037 */ - 49, /* Number of elements */ + 51, /* Number of elements */ 148565664, /* Version and data structure type */ 1, /* 0 if the list starts at 0; 1 if it starts at the element beyond 0 */ @@ -328967,7 +337979,7 @@ static const UV UNI_LB__EX_invlist[] = { /* for EBCDIC 037 */ 0x5C7, 0x61B, 0x61C, - 0x61E, + 0x61D, 0x620, 0x6D4, 0x6D5, @@ -328991,6 +338003,8 @@ static const UV UNI_LB__EX_invlist[] = { /* for EBCDIC 037 */ 0x2CFF, 0x2E2E, 0x2E2F, + 0x2E53, + 0x2E55, 0xA60E, 0xA60F, 0xA876, @@ -330820,7 +339834,7 @@ static const UV UNI_LB__HY_invlist[] = { /* for EBCDIC 037 */ # endif /* EBCDIC 037 */ static const UV UNI_LB__ID_invlist[] = { /* for all charsets */ - 331, /* Number of elements */ + 335, /* Number of elements */ 148565664, /* Version and data structure type */ 1, /* 0 if the list starts at 0; 1 if it starts at the element beyond 0 */ @@ -331022,7 +340036,7 @@ static const UV UNI_LB__ID_invlist[] = { /* for all charsets */ 0x18D00, 0x18D09, 0x1B000, - 0x1B11F, + 0x1B123, 0x1B170, 0x1B2FC, 0x1F000, @@ -331148,6 +340162,10 @@ static const UV UNI_LB__ID_invlist[] = { /* for all charsets */ 0x1F9DE, 0x1FA00, 0x1FA54, + 0x1FAC3, + 0x1FAC6, + 0x1FAF0, + 0x1FAF7, 0x1FB00, 0x1FC00, 0x1FFFE, @@ -331420,7 +340438,7 @@ static const UV UNI_LB__NS_invlist[] = { /* for all charsets */ # if 'A' == 65 /* ASCII/Latin1 */ static const UV UNI_LB__NU_invlist[] = { /* for ASCII/Latin1 */ - 123, /* Number of elements */ + 125, /* Number of elements */ 148565664, /* Version and data structure type */ 1, /* 0 if the list starts at 0; 1 if it starts at the element beyond 0 */ @@ -331535,6 +340553,8 @@ static const UV UNI_LB__NU_invlist[] = { /* for ASCII/Latin1 */ 0x11DAA, 0x16A60, 0x16A6A, + 0x16AC0, + 0x16ACA, 0x16B50, 0x16B5A, 0x1D7CE, @@ -331557,7 +340577,7 @@ static const UV UNI_LB__NU_invlist[] = { /* for ASCII/Latin1 */ && '$' == 91 && '@' == 124 && '`' == 121 && '\n' == 21 static const UV UNI_LB__NU_invlist[] = { /* for EBCDIC 1047 */ - 123, /* Number of elements */ + 125, /* Number of elements */ 148565664, /* Version and data structure type */ 1, /* 0 if the list starts at 0; 1 if it starts at the element beyond 0 */ @@ -331672,6 +340692,8 @@ static const UV UNI_LB__NU_invlist[] = { /* for EBCDIC 1047 */ 0x11DAA, 0x16A60, 0x16A6A, + 0x16AC0, + 0x16ACA, 0x16B50, 0x16B5A, 0x1D7CE, @@ -331694,7 +340716,7 @@ static const UV UNI_LB__NU_invlist[] = { /* for EBCDIC 1047 */ && '$' == 91 && '@' == 124 && '`' == 121 && '\n' == 37 static const UV UNI_LB__NU_invlist[] = { /* for EBCDIC 037 */ - 123, /* Number of elements */ + 125, /* Number of elements */ 148565664, /* Version and data structure type */ 1, /* 0 if the list starts at 0; 1 if it starts at the element beyond 0 */ @@ -331809,6 +340831,8 @@ static const UV UNI_LB__NU_invlist[] = { /* for EBCDIC 037 */ 0x11DAA, 0x16A60, 0x16A6A, + 0x16AC0, + 0x16ACA, 0x16B50, 0x16B5A, 0x1D7CE, @@ -331828,7 +340852,7 @@ static const UV UNI_LB__NU_invlist[] = { /* for EBCDIC 037 */ # if 'A' == 65 /* ASCII/Latin1 */ static const UV UNI_LB__OP_invlist[] = { /* for ASCII/Latin1 */ - 171, /* Number of elements */ + 179, /* Number of elements */ 148565664, /* Version and data structure type */ 1, /* 0 if the list starts at 0; 1 if it starts at the element beyond 0 */ @@ -331931,6 +340955,14 @@ static const UV UNI_LB__OP_invlist[] = { /* for ASCII/Latin1 */ 0x2E29, 0x2E42, 0x2E43, + 0x2E55, + 0x2E56, + 0x2E57, + 0x2E58, + 0x2E59, + 0x2E5A, + 0x2E5B, + 0x2E5C, 0x3008, 0x3009, 0x300A, @@ -332013,7 +341045,7 @@ static const UV UNI_LB__OP_invlist[] = { /* for ASCII/Latin1 */ && '$' == 91 && '@' == 124 && '`' == 121 && '\n' == 21 static const UV UNI_LB__OP_invlist[] = { /* for EBCDIC 1047 */ - 169, /* Number of elements */ + 177, /* Number of elements */ 148565664, /* Version and data structure type */ 1, /* 0 if the list starts at 0; 1 if it starts at the element beyond 0 */ @@ -332114,6 +341146,14 @@ static const UV UNI_LB__OP_invlist[] = { /* for EBCDIC 1047 */ 0x2E29, 0x2E42, 0x2E43, + 0x2E55, + 0x2E56, + 0x2E57, + 0x2E58, + 0x2E59, + 0x2E5A, + 0x2E5B, + 0x2E5C, 0x3008, 0x3009, 0x300A, @@ -332196,7 +341236,7 @@ static const UV UNI_LB__OP_invlist[] = { /* for EBCDIC 1047 */ && '$' == 91 && '@' == 124 && '`' == 121 && '\n' == 37 static const UV UNI_LB__OP_invlist[] = { /* for EBCDIC 037 */ - 169, /* Number of elements */ + 177, /* Number of elements */ 148565664, /* Version and data structure type */ 1, /* 0 if the list starts at 0; 1 if it starts at the element beyond 0 */ @@ -332297,6 +341337,14 @@ static const UV UNI_LB__OP_invlist[] = { /* for EBCDIC 037 */ 0x2E29, 0x2E42, 0x2E43, + 0x2E55, + 0x2E56, + 0x2E57, + 0x2E58, + 0x2E59, + 0x2E5A, + 0x2E5B, + 0x2E5C, 0x3008, 0x3009, 0x300A, @@ -332376,7 +341424,7 @@ static const UV UNI_LB__OP_invlist[] = { /* for EBCDIC 037 */ # if 'A' == 65 /* ASCII/Latin1 */ static const UV UNI_LB__PO_invlist[] = { /* for ASCII/Latin1 */ - 47, /* Number of elements */ + 49, /* Number of elements */ 148565664, /* Version and data structure type */ 1, /* 0 if the list starts at 0; 1 if it starts at the element beyond 0 */ @@ -332407,6 +341455,8 @@ static const UV UNI_LB__PO_invlist[] = { /* for ASCII/Latin1 */ 0x20BC, 0x20BE, 0x20BF, + 0x20C0, + 0x20C1, 0x2103, 0x2104, 0x2109, @@ -332437,7 +341487,7 @@ static const UV UNI_LB__PO_invlist[] = { /* for ASCII/Latin1 */ && '$' == 91 && '@' == 124 && '`' == 121 && '\n' == 21 static const UV UNI_LB__PO_invlist[] = { /* for EBCDIC 1047 */ - 47, /* Number of elements */ + 49, /* Number of elements */ 148565664, /* Version and data structure type */ 1, /* 0 if the list starts at 0; 1 if it starts at the element beyond 0 */ @@ -332468,6 +341518,8 @@ static const UV UNI_LB__PO_invlist[] = { /* for EBCDIC 1047 */ 0x20BC, 0x20BE, 0x20BF, + 0x20C0, + 0x20C1, 0x2103, 0x2104, 0x2109, @@ -332498,7 +341550,7 @@ static const UV UNI_LB__PO_invlist[] = { /* for EBCDIC 1047 */ && '$' == 91 && '@' == 124 && '`' == 121 && '\n' == 37 static const UV UNI_LB__PO_invlist[] = { /* for EBCDIC 037 */ - 47, /* Number of elements */ + 49, /* Number of elements */ 148565664, /* Version and data structure type */ 1, /* 0 if the list starts at 0; 1 if it starts at the element beyond 0 */ @@ -332529,6 +341581,8 @@ static const UV UNI_LB__PO_invlist[] = { /* for EBCDIC 037 */ 0x20BC, 0x20BE, 0x20BF, + 0x20C0, + 0x20C1, 0x2103, 0x2104, 0x2109, @@ -332556,7 +341610,7 @@ static const UV UNI_LB__PO_invlist[] = { /* for EBCDIC 037 */ # if 'A' == 65 /* ASCII/Latin1 */ static const UV UNI_LB__PR_invlist[] = { /* for ASCII/Latin1 */ - 49, /* Number of elements */ + 51, /* Number of elements */ 148565664, /* Version and data structure type */ 1, /* 0 if the list starts at 0; 1 if it starts at the element beyond 0 */ @@ -332594,6 +341648,8 @@ static const UV UNI_LB__PR_invlist[] = { /* for ASCII/Latin1 */ 0x20BC, 0x20BE, 0x20BF, + 0x20C0, + 0x20C1, 0x20D0, 0x2116, 0x2117, @@ -332619,7 +341675,7 @@ static const UV UNI_LB__PR_invlist[] = { /* for ASCII/Latin1 */ && '$' == 91 && '@' == 124 && '`' == 121 && '\n' == 21 static const UV UNI_LB__PR_invlist[] = { /* for EBCDIC 1047 */ - 51, /* Number of elements */ + 53, /* Number of elements */ 148565664, /* Version and data structure type */ 1, /* 0 if the list starts at 0; 1 if it starts at the element beyond 0 */ @@ -332659,6 +341715,8 @@ static const UV UNI_LB__PR_invlist[] = { /* for EBCDIC 1047 */ 0x20BC, 0x20BE, 0x20BF, + 0x20C0, + 0x20C1, 0x20D0, 0x2116, 0x2117, @@ -332684,7 +341742,7 @@ static const UV UNI_LB__PR_invlist[] = { /* for EBCDIC 1047 */ && '$' == 91 && '@' == 124 && '`' == 121 && '\n' == 37 static const UV UNI_LB__PR_invlist[] = { /* for EBCDIC 037 */ - 51, /* Number of elements */ + 53, /* Number of elements */ 148565664, /* Version and data structure type */ 1, /* 0 if the list starts at 0; 1 if it starts at the element beyond 0 */ @@ -332724,6 +341782,8 @@ static const UV UNI_LB__PR_invlist[] = { /* for EBCDIC 037 */ 0x20BC, 0x20BE, 0x20BF, + 0x20C0, + 0x20C1, 0x20D0, 0x2116, 0x2117, @@ -332934,7 +341994,7 @@ static const UV UNI_LB__SA_invlist[] = { /* for all charsets */ 0x1173A, 0x1173C, 0x1173F, - 0x11740 + 0x11747 }; static const UV UNI_LB__SG_invlist[] = { /* for all charsets */ @@ -333056,7 +342116,7 @@ static const UV UNI_LB__WJ_invlist[] = { /* for all charsets */ }; static const UV UNI_LB__XX_invlist[] = { /* for all charsets */ - 1266, /* Number of elements */ + 1308, /* Number of elements */ 148565664, /* Version and data structure type */ 1, /* 0 if the list starts at 0; 1 if it starts at the element beyond 0 */ @@ -333085,8 +342145,6 @@ static const UV UNI_LB__XX_invlist[] = { /* for all charsets */ 0x5EF, 0x5F5, 0x600, - 0x61D, - 0x61E, 0x70E, 0x70F, 0x74B, @@ -333104,11 +342162,11 @@ static const UV UNI_LB__XX_invlist[] = { /* for all charsets */ 0x85F, 0x860, 0x86B, - 0x8A0, - 0x8B5, - 0x8B6, - 0x8C8, - 0x8D3, + 0x870, + 0x88F, + 0x890, + 0x892, + 0x898, 0x984, 0x985, 0x98D, @@ -333264,7 +342322,7 @@ static const UV UNI_LB__XX_invlist[] = { /* for all charsets */ 0xC29, 0xC2A, 0xC3A, - 0xC3D, + 0xC3C, 0xC45, 0xC46, 0xC49, @@ -333274,6 +342332,8 @@ static const UV UNI_LB__XX_invlist[] = { /* for all charsets */ 0xC57, 0xC58, 0xC5B, + 0xC5D, + 0xC5E, 0xC60, 0xC64, 0xC66, @@ -333296,7 +342356,7 @@ static const UV UNI_LB__XX_invlist[] = { /* for all charsets */ 0xCCE, 0xCD5, 0xCD7, - 0xCDE, + 0xCDD, 0xCDF, 0xCE0, 0xCE4, @@ -333431,10 +342491,8 @@ static const UV UNI_LB__XX_invlist[] = { /* for all charsets */ 0x16A0, 0x16F9, 0x1700, - 0x170D, - 0x170E, - 0x1715, - 0x1720, + 0x1716, + 0x171F, 0x1737, 0x1740, 0x1754, @@ -333451,8 +342509,6 @@ static const UV UNI_LB__XX_invlist[] = { /* for all charsets */ 0x17F0, 0x17FA, 0x1800, - 0x180F, - 0x1810, 0x181A, 0x1820, 0x1879, @@ -333491,11 +342547,11 @@ static const UV UNI_LB__XX_invlist[] = { /* for all charsets */ 0x1AA0, 0x1AAE, 0x1AB0, - 0x1AC1, + 0x1ACF, 0x1B00, - 0x1B4C, + 0x1B4D, 0x1B50, - 0x1B7D, + 0x1B7F, 0x1B80, 0x1BF4, 0x1BFC, @@ -333511,8 +342567,6 @@ static const UV UNI_LB__XX_invlist[] = { /* for all charsets */ 0x1CD0, 0x1CFB, 0x1D00, - 0x1DFA, - 0x1DFB, 0x1F16, 0x1F18, 0x1F1E, @@ -333565,10 +342619,6 @@ static const UV UNI_LB__XX_invlist[] = { /* for all charsets */ 0x2B76, 0x2B96, 0x2B97, - 0x2C2F, - 0x2C30, - 0x2C5F, - 0x2C60, 0x2CF4, 0x2CF9, 0x2D26, @@ -333599,7 +342649,7 @@ static const UV UNI_LB__XX_invlist[] = { /* for all charsets */ 0x2DD8, 0x2DDF, 0x2DE0, - 0x2E53, + 0x2E5E, 0x2E80, 0x2E9A, 0x2E9B, @@ -333631,10 +342681,14 @@ static const UV UNI_LB__XX_invlist[] = { /* for all charsets */ 0xA640, 0xA6F8, 0xA700, - 0xA7C0, - 0xA7C2, 0xA7CB, - 0xA7F5, + 0xA7D0, + 0xA7D2, + 0xA7D3, + 0xA7D4, + 0xA7D5, + 0xA7DA, + 0xA7F2, 0xA82D, 0xA830, 0xA83A, @@ -333703,16 +342757,14 @@ static const UV UNI_LB__XX_invlist[] = { /* for all charsets */ 0xFB43, 0xFB45, 0xFB46, - 0xFBC2, + 0xFBC3, 0xFBD3, - 0xFD40, - 0xFD50, 0xFD90, 0xFD92, 0xFDC8, + 0xFDCF, + 0xFDD0, 0xFDF0, - 0xFDFE, - 0xFE00, 0xFE1A, 0xFE20, 0xFE53, @@ -333799,13 +342851,33 @@ static const UV UNI_LB__XX_invlist[] = { /* for all charsets */ 0x10530, 0x10564, 0x1056F, - 0x10570, + 0x1057B, + 0x1057C, + 0x1058B, + 0x1058C, + 0x10593, + 0x10594, + 0x10596, + 0x10597, + 0x105A2, + 0x105A3, + 0x105B2, + 0x105B3, + 0x105BA, + 0x105BB, + 0x105BD, 0x10600, 0x10737, 0x10740, 0x10756, 0x10760, 0x10768, + 0x10780, + 0x10786, + 0x10787, + 0x107B1, + 0x107B2, + 0x107BB, 0x10800, 0x10806, 0x10808, @@ -333892,6 +342964,8 @@ static const UV UNI_LB__XX_invlist[] = { /* for all charsets */ 0x10F28, 0x10F30, 0x10F5A, + 0x10F70, + 0x10F8A, 0x10FB0, 0x10FCC, 0x10FE0, @@ -333899,9 +342973,9 @@ static const UV UNI_LB__XX_invlist[] = { /* for all charsets */ 0x11000, 0x1104E, 0x11052, - 0x11070, + 0x11076, 0x1107F, - 0x110C2, + 0x110C3, 0x110CD, 0x110CE, 0x110D0, @@ -333985,7 +343059,7 @@ static const UV UNI_LB__XX_invlist[] = { /* for all charsets */ 0x11660, 0x1166D, 0x11680, - 0x116B9, + 0x116BA, 0x116C0, 0x116CA, 0x11700, @@ -333993,7 +343067,7 @@ static const UV UNI_LB__XX_invlist[] = { /* for all charsets */ 0x1171D, 0x1172C, 0x11730, - 0x11740, + 0x11747, 0x11800, 0x1183C, 0x118A0, @@ -334024,7 +343098,7 @@ static const UV UNI_LB__XX_invlist[] = { /* for all charsets */ 0x11A48, 0x11A50, 0x11AA3, - 0x11AC0, + 0x11AB0, 0x11AF9, 0x11C00, 0x11C09, @@ -334080,6 +343154,8 @@ static const UV UNI_LB__XX_invlist[] = { /* for all charsets */ 0x12475, 0x12480, 0x12544, + 0x12F90, + 0x12FF3, 0x13000, 0x1342F, 0x13430, @@ -334093,7 +343169,9 @@ static const UV UNI_LB__XX_invlist[] = { /* for all charsets */ 0x16A60, 0x16A6A, 0x16A6E, - 0x16A70, + 0x16ABF, + 0x16AC0, + 0x16ACA, 0x16AD0, 0x16AEE, 0x16AF0, @@ -334126,8 +343204,14 @@ static const UV UNI_LB__XX_invlist[] = { /* for all charsets */ 0x18CD6, 0x18D00, 0x18D09, + 0x1AFF0, + 0x1AFF4, + 0x1AFF5, + 0x1AFFC, + 0x1AFFD, + 0x1AFFF, 0x1B000, - 0x1B11F, + 0x1B123, 0x1B150, 0x1B153, 0x1B164, @@ -334144,12 +343228,18 @@ static const UV UNI_LB__XX_invlist[] = { /* for all charsets */ 0x1BC9A, 0x1BC9C, 0x1BCA4, + 0x1CF00, + 0x1CF2E, + 0x1CF30, + 0x1CF47, + 0x1CF50, + 0x1CFC4, 0x1D000, 0x1D0F6, 0x1D100, 0x1D127, 0x1D129, - 0x1D1E9, + 0x1D1EB, 0x1D200, 0x1D246, 0x1D2E0, @@ -334204,6 +343294,8 @@ static const UV UNI_LB__XX_invlist[] = { /* for all charsets */ 0x1DAA0, 0x1DAA1, 0x1DAB0, + 0x1DF00, + 0x1DF1F, 0x1E000, 0x1E007, 0x1E008, @@ -334222,10 +343314,20 @@ static const UV UNI_LB__XX_invlist[] = { /* for all charsets */ 0x1E14A, 0x1E14E, 0x1E150, + 0x1E290, + 0x1E2AF, 0x1E2C0, 0x1E2FA, 0x1E2FF, 0x1E300, + 0x1E7E0, + 0x1E7E7, + 0x1E7E8, + 0x1E7EC, + 0x1E7ED, + 0x1E7EF, + 0x1E7F0, + 0x1E7FF, 0x1E800, 0x1E8C5, 0x1E8C7, @@ -334479,7 +343581,7 @@ static const UV UNI_LISUSUP_invlist[] = { /* for all charsets */ }; static const UV UNI_LM_invlist[] = { /* for all charsets */ - 123, /* Number of elements */ + 139, /* Number of elements */ 148565664, /* Version and data structure type */ 1, /* 0 if the list starts at 0; 1 if it starts at the element beyond 0 */ @@ -334514,6 +343616,8 @@ static const UV UNI_LM_invlist[] = { /* for all charsets */ 0x825, 0x828, 0x829, + 0x8C9, + 0x8CA, 0x971, 0x972, 0xE46, @@ -334574,6 +343678,8 @@ static const UV UNI_LM_invlist[] = { /* for all charsets */ 0xA771, 0xA788, 0xA789, + 0xA7F2, + 0xA7F5, 0xA7F8, 0xA7FA, 0xA9CF, @@ -334594,6 +343700,12 @@ static const UV UNI_LM_invlist[] = { /* for all charsets */ 0xFF71, 0xFF9E, 0xFFA0, + 0x10780, + 0x10786, + 0x10787, + 0x107B1, + 0x107B2, + 0x107BB, 0x16B40, 0x16B44, 0x16F93, @@ -334602,6 +343714,12 @@ static const UV UNI_LM_invlist[] = { /* for all charsets */ 0x16FE2, 0x16FE3, 0x16FE4, + 0x1AFF0, + 0x1AFF4, + 0x1AFF5, + 0x1AFFC, + 0x1AFFD, + 0x1AFFF, 0x1E137, 0x1E13E, 0x1E94B, @@ -334611,7 +343729,7 @@ static const UV UNI_LM_invlist[] = { /* for all charsets */ # if 'A' == 65 /* ASCII/Latin1 */ static const UV UNI_LO_invlist[] = { /* for ASCII/Latin1 */ - 979, /* Number of elements */ + 1003, /* Number of elements */ 148565664, /* Version and data structure type */ 1, /* 0 if the list starts at 0; 1 if it starts at the element beyond 0 */ @@ -334662,10 +343780,12 @@ static const UV UNI_LO_invlist[] = { /* for ASCII/Latin1 */ 0x859, 0x860, 0x86B, + 0x870, + 0x888, + 0x889, + 0x88F, 0x8A0, - 0x8B5, - 0x8B6, - 0x8C8, + 0x8C9, 0x904, 0x93A, 0x93D, @@ -334794,6 +343914,8 @@ static const UV UNI_LO_invlist[] = { /* for ASCII/Latin1 */ 0xC3E, 0xC58, 0xC5B, + 0xC5D, + 0xC5E, 0xC60, 0xC62, 0xC80, @@ -334810,7 +343932,7 @@ static const UV UNI_LO_invlist[] = { /* for ASCII/Latin1 */ 0xCBA, 0xCBD, 0xCBE, - 0xCDE, + 0xCDD, 0xCDF, 0xCE0, 0xCE2, @@ -334939,10 +344061,8 @@ static const UV UNI_LO_invlist[] = { /* for ASCII/Latin1 */ 0x16F1, 0x16F9, 0x1700, - 0x170D, - 0x170E, 0x1712, - 0x1720, + 0x171F, 0x1732, 0x1740, 0x1752, @@ -334983,7 +344103,7 @@ static const UV UNI_LO_invlist[] = { /* for ASCII/Latin1 */ 0x1B05, 0x1B34, 0x1B45, - 0x1B4C, + 0x1B4D, 0x1B83, 0x1BA1, 0x1BAE, @@ -335049,8 +344169,6 @@ static const UV UNI_LO_invlist[] = { /* for ASCII/Latin1 */ 0x3400, 0x4DC0, 0x4E00, - 0x9FFD, - 0xA000, 0xA015, 0xA016, 0xA48D, @@ -335306,12 +344424,18 @@ static const UV UNI_LO_invlist[] = { /* for ASCII/Latin1 */ 0x10F28, 0x10F30, 0x10F46, + 0x10F70, + 0x10F82, 0x10FB0, 0x10FC5, 0x10FE0, 0x10FF7, 0x11003, 0x11038, + 0x11071, + 0x11073, + 0x11075, + 0x11076, 0x11083, 0x110B0, 0x110D0, @@ -335394,6 +344518,8 @@ static const UV UNI_LO_invlist[] = { /* for ASCII/Latin1 */ 0x116B9, 0x11700, 0x1171B, + 0x11740, + 0x11747, 0x11800, 0x1182C, 0x118FF, @@ -335430,7 +344556,7 @@ static const UV UNI_LO_invlist[] = { /* for ASCII/Latin1 */ 0x11A8A, 0x11A9D, 0x11A9E, - 0x11AC0, + 0x11AB0, 0x11AF9, 0x11C00, 0x11C09, @@ -335464,6 +344590,8 @@ static const UV UNI_LO_invlist[] = { /* for ASCII/Latin1 */ 0x1239A, 0x12480, 0x12544, + 0x12F90, + 0x12FF1, 0x13000, 0x1342F, 0x14400, @@ -335472,6 +344600,8 @@ static const UV UNI_LO_invlist[] = { /* for ASCII/Latin1 */ 0x16A39, 0x16A40, 0x16A5F, + 0x16A70, + 0x16ABF, 0x16AD0, 0x16AEE, 0x16B00, @@ -335491,7 +344621,7 @@ static const UV UNI_LO_invlist[] = { /* for ASCII/Latin1 */ 0x18D00, 0x18D09, 0x1B000, - 0x1B11F, + 0x1B123, 0x1B150, 0x1B153, 0x1B164, @@ -335506,12 +344636,24 @@ static const UV UNI_LO_invlist[] = { /* for ASCII/Latin1 */ 0x1BC89, 0x1BC90, 0x1BC9A, + 0x1DF0A, + 0x1DF0B, 0x1E100, 0x1E12D, 0x1E14E, 0x1E14F, + 0x1E290, + 0x1E2AE, 0x1E2C0, 0x1E2EC, + 0x1E7E0, + 0x1E7E7, + 0x1E7E8, + 0x1E7EC, + 0x1E7ED, + 0x1E7EF, + 0x1E7F0, + 0x1E7FF, 0x1E800, 0x1E8C5, 0x1EE00, @@ -335581,9 +344723,9 @@ static const UV UNI_LO_invlist[] = { /* for ASCII/Latin1 */ 0x1EEAB, 0x1EEBC, 0x20000, - 0x2A6DE, + 0x2A6E0, 0x2A700, - 0x2B735, + 0x2B739, 0x2B740, 0x2B81E, 0x2B820, @@ -335604,7 +344746,7 @@ static const UV UNI_LO_invlist[] = { /* for ASCII/Latin1 */ && '$' == 91 && '@' == 124 && '`' == 121 && '\n' == 21 static const UV UNI_LO_invlist[] = { /* for EBCDIC 1047 */ - 977, /* Number of elements */ + 1001, /* Number of elements */ 148565664, /* Version and data structure type */ 1, /* 0 if the list starts at 0; 1 if it starts at the element beyond 0 */ @@ -335653,10 +344795,12 @@ static const UV UNI_LO_invlist[] = { /* for EBCDIC 1047 */ 0x859, 0x860, 0x86B, + 0x870, + 0x888, + 0x889, + 0x88F, 0x8A0, - 0x8B5, - 0x8B6, - 0x8C8, + 0x8C9, 0x904, 0x93A, 0x93D, @@ -335785,6 +344929,8 @@ static const UV UNI_LO_invlist[] = { /* for EBCDIC 1047 */ 0xC3E, 0xC58, 0xC5B, + 0xC5D, + 0xC5E, 0xC60, 0xC62, 0xC80, @@ -335801,7 +344947,7 @@ static const UV UNI_LO_invlist[] = { /* for EBCDIC 1047 */ 0xCBA, 0xCBD, 0xCBE, - 0xCDE, + 0xCDD, 0xCDF, 0xCE0, 0xCE2, @@ -335930,10 +345076,8 @@ static const UV UNI_LO_invlist[] = { /* for EBCDIC 1047 */ 0x16F1, 0x16F9, 0x1700, - 0x170D, - 0x170E, 0x1712, - 0x1720, + 0x171F, 0x1732, 0x1740, 0x1752, @@ -335974,7 +345118,7 @@ static const UV UNI_LO_invlist[] = { /* for EBCDIC 1047 */ 0x1B05, 0x1B34, 0x1B45, - 0x1B4C, + 0x1B4D, 0x1B83, 0x1BA1, 0x1BAE, @@ -336040,8 +345184,6 @@ static const UV UNI_LO_invlist[] = { /* for EBCDIC 1047 */ 0x3400, 0x4DC0, 0x4E00, - 0x9FFD, - 0xA000, 0xA015, 0xA016, 0xA48D, @@ -336297,12 +345439,18 @@ static const UV UNI_LO_invlist[] = { /* for EBCDIC 1047 */ 0x10F28, 0x10F30, 0x10F46, + 0x10F70, + 0x10F82, 0x10FB0, 0x10FC5, 0x10FE0, 0x10FF7, 0x11003, 0x11038, + 0x11071, + 0x11073, + 0x11075, + 0x11076, 0x11083, 0x110B0, 0x110D0, @@ -336385,6 +345533,8 @@ static const UV UNI_LO_invlist[] = { /* for EBCDIC 1047 */ 0x116B9, 0x11700, 0x1171B, + 0x11740, + 0x11747, 0x11800, 0x1182C, 0x118FF, @@ -336421,7 +345571,7 @@ static const UV UNI_LO_invlist[] = { /* for EBCDIC 1047 */ 0x11A8A, 0x11A9D, 0x11A9E, - 0x11AC0, + 0x11AB0, 0x11AF9, 0x11C00, 0x11C09, @@ -336455,6 +345605,8 @@ static const UV UNI_LO_invlist[] = { /* for EBCDIC 1047 */ 0x1239A, 0x12480, 0x12544, + 0x12F90, + 0x12FF1, 0x13000, 0x1342F, 0x14400, @@ -336463,6 +345615,8 @@ static const UV UNI_LO_invlist[] = { /* for EBCDIC 1047 */ 0x16A39, 0x16A40, 0x16A5F, + 0x16A70, + 0x16ABF, 0x16AD0, 0x16AEE, 0x16B00, @@ -336482,7 +345636,7 @@ static const UV UNI_LO_invlist[] = { /* for EBCDIC 1047 */ 0x18D00, 0x18D09, 0x1B000, - 0x1B11F, + 0x1B123, 0x1B150, 0x1B153, 0x1B164, @@ -336497,12 +345651,24 @@ static const UV UNI_LO_invlist[] = { /* for EBCDIC 1047 */ 0x1BC89, 0x1BC90, 0x1BC9A, + 0x1DF0A, + 0x1DF0B, 0x1E100, 0x1E12D, 0x1E14E, 0x1E14F, + 0x1E290, + 0x1E2AE, 0x1E2C0, 0x1E2EC, + 0x1E7E0, + 0x1E7E7, + 0x1E7E8, + 0x1E7EC, + 0x1E7ED, + 0x1E7EF, + 0x1E7F0, + 0x1E7FF, 0x1E800, 0x1E8C5, 0x1EE00, @@ -336572,9 +345738,9 @@ static const UV UNI_LO_invlist[] = { /* for EBCDIC 1047 */ 0x1EEAB, 0x1EEBC, 0x20000, - 0x2A6DE, + 0x2A6E0, 0x2A700, - 0x2B735, + 0x2B739, 0x2B740, 0x2B81E, 0x2B820, @@ -336595,7 +345761,7 @@ static const UV UNI_LO_invlist[] = { /* for EBCDIC 1047 */ && '$' == 91 && '@' == 124 && '`' == 121 && '\n' == 37 static const UV UNI_LO_invlist[] = { /* for EBCDIC 037 */ - 977, /* Number of elements */ + 1001, /* Number of elements */ 148565664, /* Version and data structure type */ 1, /* 0 if the list starts at 0; 1 if it starts at the element beyond 0 */ @@ -336644,10 +345810,12 @@ static const UV UNI_LO_invlist[] = { /* for EBCDIC 037 */ 0x859, 0x860, 0x86B, + 0x870, + 0x888, + 0x889, + 0x88F, 0x8A0, - 0x8B5, - 0x8B6, - 0x8C8, + 0x8C9, 0x904, 0x93A, 0x93D, @@ -336776,6 +345944,8 @@ static const UV UNI_LO_invlist[] = { /* for EBCDIC 037 */ 0xC3E, 0xC58, 0xC5B, + 0xC5D, + 0xC5E, 0xC60, 0xC62, 0xC80, @@ -336792,7 +345962,7 @@ static const UV UNI_LO_invlist[] = { /* for EBCDIC 037 */ 0xCBA, 0xCBD, 0xCBE, - 0xCDE, + 0xCDD, 0xCDF, 0xCE0, 0xCE2, @@ -336921,10 +346091,8 @@ static const UV UNI_LO_invlist[] = { /* for EBCDIC 037 */ 0x16F1, 0x16F9, 0x1700, - 0x170D, - 0x170E, 0x1712, - 0x1720, + 0x171F, 0x1732, 0x1740, 0x1752, @@ -336965,7 +346133,7 @@ static const UV UNI_LO_invlist[] = { /* for EBCDIC 037 */ 0x1B05, 0x1B34, 0x1B45, - 0x1B4C, + 0x1B4D, 0x1B83, 0x1BA1, 0x1BAE, @@ -337031,8 +346199,6 @@ static const UV UNI_LO_invlist[] = { /* for EBCDIC 037 */ 0x3400, 0x4DC0, 0x4E00, - 0x9FFD, - 0xA000, 0xA015, 0xA016, 0xA48D, @@ -337288,12 +346454,18 @@ static const UV UNI_LO_invlist[] = { /* for EBCDIC 037 */ 0x10F28, 0x10F30, 0x10F46, + 0x10F70, + 0x10F82, 0x10FB0, 0x10FC5, 0x10FE0, 0x10FF7, 0x11003, 0x11038, + 0x11071, + 0x11073, + 0x11075, + 0x11076, 0x11083, 0x110B0, 0x110D0, @@ -337376,6 +346548,8 @@ static const UV UNI_LO_invlist[] = { /* for EBCDIC 037 */ 0x116B9, 0x11700, 0x1171B, + 0x11740, + 0x11747, 0x11800, 0x1182C, 0x118FF, @@ -337412,7 +346586,7 @@ static const UV UNI_LO_invlist[] = { /* for EBCDIC 037 */ 0x11A8A, 0x11A9D, 0x11A9E, - 0x11AC0, + 0x11AB0, 0x11AF9, 0x11C00, 0x11C09, @@ -337446,6 +346620,8 @@ static const UV UNI_LO_invlist[] = { /* for EBCDIC 037 */ 0x1239A, 0x12480, 0x12544, + 0x12F90, + 0x12FF1, 0x13000, 0x1342F, 0x14400, @@ -337454,6 +346630,8 @@ static const UV UNI_LO_invlist[] = { /* for EBCDIC 037 */ 0x16A39, 0x16A40, 0x16A5F, + 0x16A70, + 0x16ABF, 0x16AD0, 0x16AEE, 0x16B00, @@ -337473,7 +346651,7 @@ static const UV UNI_LO_invlist[] = { /* for EBCDIC 037 */ 0x18D00, 0x18D09, 0x1B000, - 0x1B11F, + 0x1B123, 0x1B150, 0x1B153, 0x1B164, @@ -337488,12 +346666,24 @@ static const UV UNI_LO_invlist[] = { /* for EBCDIC 037 */ 0x1BC89, 0x1BC90, 0x1BC9A, + 0x1DF0A, + 0x1DF0B, 0x1E100, 0x1E12D, 0x1E14E, 0x1E14F, + 0x1E290, + 0x1E2AE, 0x1E2C0, 0x1E2EC, + 0x1E7E0, + 0x1E7E7, + 0x1E7E8, + 0x1E7EC, + 0x1E7ED, + 0x1E7EF, + 0x1E7F0, + 0x1E7FF, 0x1E800, 0x1E8C5, 0x1EE00, @@ -337563,9 +346753,9 @@ static const UV UNI_LO_invlist[] = { /* for EBCDIC 037 */ 0x1EEAB, 0x1EEBC, 0x20000, - 0x2A6DE, + 0x2A6E0, 0x2A700, - 0x2B735, + 0x2B739, 0x2B740, 0x2B81E, 0x2B820, @@ -337635,7 +346825,7 @@ static const UV UNI_LYDI_invlist[] = { /* for all charsets */ }; static const UV UNI_M_invlist[] = { /* for all charsets */ - 581, /* Number of elements */ + 599, /* Number of elements */ 148565664, /* Version and data structure type */ 1, /* 0 if the list starts at 0; 1 if it starts at the element beyond 0 */ @@ -337688,7 +346878,9 @@ static const UV UNI_M_invlist[] = { /* for all charsets */ 0x82E, 0x859, 0x85C, - 0x8D3, + 0x898, + 0x8A0, + 0x8CA, 0x8E2, 0x8E3, 0x904, @@ -337772,6 +346964,8 @@ static const UV UNI_M_invlist[] = { /* for all charsets */ 0xBD8, 0xC00, 0xC05, + 0xC3C, + 0xC3D, 0xC3E, 0xC45, 0xC46, @@ -337875,7 +347069,7 @@ static const UV UNI_M_invlist[] = { /* for all charsets */ 0x135D, 0x1360, 0x1712, - 0x1715, + 0x1716, 0x1732, 0x1735, 0x1752, @@ -337888,6 +347082,8 @@ static const UV UNI_M_invlist[] = { /* for all charsets */ 0x17DE, 0x180B, 0x180E, + 0x180F, + 0x1810, 0x1885, 0x1887, 0x18A9, @@ -337905,7 +347101,7 @@ static const UV UNI_M_invlist[] = { /* for all charsets */ 0x1A7F, 0x1A80, 0x1AB0, - 0x1AC1, + 0x1ACF, 0x1B00, 0x1B05, 0x1B34, @@ -337931,8 +347127,6 @@ static const UV UNI_M_invlist[] = { /* for all charsets */ 0x1CF7, 0x1CFA, 0x1DC0, - 0x1DFA, - 0x1DFB, 0x1E00, 0x20D0, 0x20F1, @@ -338038,14 +347232,22 @@ static const UV UNI_M_invlist[] = { /* for all charsets */ 0x10EAD, 0x10F46, 0x10F51, + 0x10F82, + 0x10F86, 0x11000, 0x11003, 0x11038, 0x11047, + 0x11070, + 0x11071, + 0x11073, + 0x11075, 0x1107F, 0x11083, 0x110B0, 0x110BB, + 0x110C2, + 0x110C3, 0x11100, 0x11103, 0x11127, @@ -338176,6 +347378,10 @@ static const UV UNI_M_invlist[] = { /* for all charsets */ 0x16FF2, 0x1BC9D, 0x1BC9F, + 0x1CF00, + 0x1CF2E, + 0x1CF30, + 0x1CF47, 0x1D165, 0x1D16A, 0x1D16D, @@ -338212,6 +347418,8 @@ static const UV UNI_M_invlist[] = { /* for all charsets */ 0x1E02B, 0x1E130, 0x1E137, + 0x1E2AE, + 0x1E2AF, 0x1E2EC, 0x1E2F0, 0x1E8D0, @@ -339203,7 +348411,7 @@ static const UV UNI_MAYANNUMERALS_invlist[] = { /* for all charsets */ }; static const UV UNI_MC_invlist[] = { /* for all charsets */ - 351, /* Number of elements */ + 355, /* Number of elements */ 148565664, /* Version and data structure type */ 1, /* 0 if the list starts at 0; 1 if it starts at the element beyond 0 */ @@ -339322,6 +348530,10 @@ static const UV UNI_MC_invlist[] = { /* for all charsets */ 0x1090, 0x109A, 0x109D, + 0x1715, + 0x1716, + 0x1734, + 0x1735, 0x17B6, 0x17B7, 0x17BE, @@ -339739,7 +348951,7 @@ static const UV UNI_MLYM_invlist[] = { /* for all charsets */ }; static const UV UNI_MN_invlist[] = { /* for all charsets */ - 655, /* Number of elements */ + 673, /* Number of elements */ 148565664, /* Version and data structure type */ 1, /* 0 if the list starts at 0; 1 if it starts at the element beyond 0 */ @@ -339792,7 +349004,9 @@ static const UV UNI_MN_invlist[] = { /* for all charsets */ 0x82E, 0x859, 0x85C, - 0x8D3, + 0x898, + 0x8A0, + 0x8CA, 0x8E2, 0x8E3, 0x903, @@ -339874,6 +349088,8 @@ static const UV UNI_MN_invlist[] = { /* for all charsets */ 0xC01, 0xC04, 0xC05, + 0xC3C, + 0xC3D, 0xC3E, 0xC41, 0xC46, @@ -339973,7 +349189,7 @@ static const UV UNI_MN_invlist[] = { /* for all charsets */ 0x1712, 0x1715, 0x1732, - 0x1735, + 0x1734, 0x1752, 0x1754, 0x1772, @@ -339990,6 +349206,8 @@ static const UV UNI_MN_invlist[] = { /* for all charsets */ 0x17DE, 0x180B, 0x180E, + 0x180F, + 0x1810, 0x1885, 0x1887, 0x18A9, @@ -340023,7 +349241,7 @@ static const UV UNI_MN_invlist[] = { /* for all charsets */ 0x1AB0, 0x1ABE, 0x1ABF, - 0x1AC1, + 0x1ACF, 0x1B00, 0x1B04, 0x1B34, @@ -340069,8 +349287,6 @@ static const UV UNI_MN_invlist[] = { /* for all charsets */ 0x1CF8, 0x1CFA, 0x1DC0, - 0x1DFA, - 0x1DFB, 0x1E00, 0x20D0, 0x20DD, @@ -340188,16 +349404,24 @@ static const UV UNI_MN_invlist[] = { /* for all charsets */ 0x10EAD, 0x10F46, 0x10F51, + 0x10F82, + 0x10F86, 0x11001, 0x11002, 0x11038, 0x11047, + 0x11070, + 0x11071, + 0x11073, + 0x11075, 0x1107F, 0x11082, 0x110B3, 0x110B7, 0x110B9, 0x110BB, + 0x110C2, + 0x110C3, 0x11100, 0x11103, 0x11127, @@ -340356,6 +349580,10 @@ static const UV UNI_MN_invlist[] = { /* for all charsets */ 0x16FE5, 0x1BC9D, 0x1BC9F, + 0x1CF00, + 0x1CF2E, + 0x1CF30, + 0x1CF47, 0x1D167, 0x1D16A, 0x1D17B, @@ -340390,6 +349618,8 @@ static const UV UNI_MN_invlist[] = { /* for all charsets */ 0x1E02B, 0x1E130, 0x1E137, + 0x1E2AE, + 0x1E2AF, 0x1E2EC, 0x1E2F0, 0x1E8D0, @@ -340435,14 +349665,12 @@ static const UV UNI_MODIFIERTONELETTERS_invlist[] = { /* for all charsets */ }; static const UV UNI_MONG_invlist[] = { /* for all charsets */ - 13, /* Number of elements */ + 11, /* Number of elements */ 148565664, /* Version and data structure type */ 1, /* 0 if the list starts at 0; 1 if it starts at the element beyond 0 */ 0x0, 0x1800, - 0x180F, - 0x1810, 0x181A, 0x1820, 0x1879, @@ -340561,7 +349789,7 @@ static const UV UNI_MYMR_invlist[] = { /* for all charsets */ # if 'A' == 65 /* ASCII/Latin1 */ static const UV UNI_N_invlist[] = { /* for ASCII/Latin1 */ - 267, /* Number of elements */ + 269, /* Number of elements */ 148565664, /* Version and data structure type */ 1, /* 0 if the list starts at 0; 1 if it starts at the element beyond 0 */ @@ -340798,6 +350026,8 @@ static const UV UNI_N_invlist[] = { /* for ASCII/Latin1 */ 0x1246F, 0x16A60, 0x16A6A, + 0x16AC0, + 0x16ACA, 0x16B50, 0x16B5A, 0x16B5B, @@ -340842,7 +350072,7 @@ static const UV UNI_N_invlist[] = { /* for ASCII/Latin1 */ && '$' == 91 && '@' == 124 && '`' == 121 && '\n' == 21 static const UV UNI_N_invlist[] = { /* for EBCDIC 1047 */ - 267, /* Number of elements */ + 269, /* Number of elements */ 148565664, /* Version and data structure type */ 1, /* 0 if the list starts at 0; 1 if it starts at the element beyond 0 */ @@ -341079,6 +350309,8 @@ static const UV UNI_N_invlist[] = { /* for EBCDIC 1047 */ 0x1246F, 0x16A60, 0x16A6A, + 0x16AC0, + 0x16ACA, 0x16B50, 0x16B5A, 0x16B5B, @@ -341123,7 +350355,7 @@ static const UV UNI_N_invlist[] = { /* for EBCDIC 1047 */ && '$' == 91 && '@' == 124 && '`' == 121 && '\n' == 37 static const UV UNI_N_invlist[] = { /* for EBCDIC 037 */ - 267, /* Number of elements */ + 269, /* Number of elements */ 148565664, /* Version and data structure type */ 1, /* 0 if the list starts at 0; 1 if it starts at the element beyond 0 */ @@ -341360,6 +350592,8 @@ static const UV UNI_N_invlist[] = { /* for EBCDIC 037 */ 0x1246F, 0x16A60, 0x16A6A, + 0x16AC0, + 0x16ACA, 0x16B50, 0x16B5A, 0x16B5B, @@ -341435,22 +350669,20 @@ static const UV UNI_NARB_invlist[] = { /* for all charsets */ }; static const UV UNI_NB_invlist[] = { /* for all charsets */ - 110, /* Number of elements */ + 104, /* Number of elements */ 148565664, /* Version and data structure type */ 1, /* 0 if the list starts at 0; 1 if it starts at the element beyond 0 */ 0x0, - 0x870, - 0x8A0, 0x2FE0, 0x2FF0, 0x10200, 0x10280, 0x103E0, 0x10400, - 0x10570, + 0x105C0, 0x10600, - 0x10780, + 0x107C0, 0x10800, 0x108B0, 0x108E0, @@ -341466,8 +350698,6 @@ static const UV UNI_NB_invlist[] = { /* for all charsets */ 0x10E60, 0x10EC0, 0x10F00, - 0x10F70, - 0x10FB0, 0x11250, 0x11280, 0x11380, @@ -341476,14 +350706,12 @@ static const UV UNI_NB_invlist[] = { /* for all charsets */ 0x11580, 0x116D0, 0x11700, - 0x11740, + 0x11750, 0x11800, 0x11850, 0x118A0, 0x11960, 0x119A0, - 0x11AB0, - 0x11AC0, 0x11B00, 0x11C00, 0x11CC0, @@ -341493,37 +350721,37 @@ static const UV UNI_NB_invlist[] = { /* for all charsets */ 0x11F00, 0x11FB0, 0x12550, - 0x13000, + 0x12F90, 0x13440, 0x14400, 0x14680, 0x16800, - 0x16A70, - 0x16AD0, 0x16B90, 0x16E40, 0x16EA0, 0x16F00, 0x16FA0, 0x16FE0, - 0x18D90, - 0x1B000, + 0x18D80, + 0x1AFF0, 0x1B300, 0x1BC00, 0x1BCB0, + 0x1CF00, + 0x1CFD0, 0x1D000, 0x1D250, 0x1D2E0, 0x1D380, 0x1D400, 0x1DAB0, - 0x1E000, + 0x1DF00, 0x1E030, 0x1E100, 0x1E150, - 0x1E2C0, + 0x1E290, 0x1E300, - 0x1E800, + 0x1E7E0, 0x1E8E0, 0x1E900, 0x1E960, @@ -343344,7 +352572,7 @@ static const UV UNI_NFDQC__Y_invlist[] = { /* for EBCDIC 037 */ # if 'A' == 65 /* ASCII/Latin1 */ static const UV UNI_NFKCQC__N_invlist[] = { /* for ASCII/Latin1 */ - 501, /* Number of elements */ + 509, /* Number of elements */ 148565664, /* Version and data structure type */ 1, /* 0 if the list starts at 0; 1 if it starts at the element beyond 0 */ @@ -343635,6 +352863,8 @@ static const UV UNI_NFKCQC__N_invlist[] = { /* for ASCII/Latin1 */ 0xA69E, 0xA770, 0xA771, + 0xA7F2, + 0xA7F5, 0xA7F8, 0xA7FA, 0xAB5C, @@ -343715,6 +352945,12 @@ static const UV UNI_NFKCQC__N_invlist[] = { /* for ASCII/Latin1 */ 0xFFE7, 0xFFE8, 0xFFEF, + 0x10781, + 0x10786, + 0x10787, + 0x107B1, + 0x107B2, + 0x107BB, 0x1D15E, 0x1D165, 0x1D1BB, @@ -343859,7 +353095,7 @@ static const UV UNI_NFKCQC__N_invlist[] = { /* for ASCII/Latin1 */ && '$' == 91 && '@' == 124 && '`' == 121 && '\n' == 21 static const UV UNI_NFKCQC__N_invlist[] = { /* for EBCDIC 1047 */ - 507, /* Number of elements */ + 515, /* Number of elements */ 148565664, /* Version and data structure type */ 1, /* 0 if the list starts at 0; 1 if it starts at the element beyond 0 */ @@ -344156,6 +353392,8 @@ static const UV UNI_NFKCQC__N_invlist[] = { /* for EBCDIC 1047 */ 0xA69E, 0xA770, 0xA771, + 0xA7F2, + 0xA7F5, 0xA7F8, 0xA7FA, 0xAB5C, @@ -344236,6 +353474,12 @@ static const UV UNI_NFKCQC__N_invlist[] = { /* for EBCDIC 1047 */ 0xFFE7, 0xFFE8, 0xFFEF, + 0x10781, + 0x10786, + 0x10787, + 0x107B1, + 0x107B2, + 0x107BB, 0x1D15E, 0x1D165, 0x1D1BB, @@ -344380,7 +353624,7 @@ static const UV UNI_NFKCQC__N_invlist[] = { /* for EBCDIC 1047 */ && '$' == 91 && '@' == 124 && '`' == 121 && '\n' == 37 static const UV UNI_NFKCQC__N_invlist[] = { /* for EBCDIC 037 */ - 505, /* Number of elements */ + 513, /* Number of elements */ 148565664, /* Version and data structure type */ 1, /* 0 if the list starts at 0; 1 if it starts at the element beyond 0 */ @@ -344675,6 +353919,8 @@ static const UV UNI_NFKCQC__N_invlist[] = { /* for EBCDIC 037 */ 0xA69E, 0xA770, 0xA771, + 0xA7F2, + 0xA7F5, 0xA7F8, 0xA7FA, 0xAB5C, @@ -344755,6 +354001,12 @@ static const UV UNI_NFKCQC__N_invlist[] = { /* for EBCDIC 037 */ 0xFFE7, 0xFFE8, 0xFFEF, + 0x10781, + 0x10786, + 0x10787, + 0x107B1, + 0x107B2, + 0x107BB, 0x1D15E, 0x1D165, 0x1D1BB, @@ -344896,7 +354148,7 @@ static const UV UNI_NFKCQC__N_invlist[] = { /* for EBCDIC 037 */ # if 'A' == 65 /* ASCII/Latin1 */ static const UV UNI_NFKCQC__Y_invlist[] = { /* for ASCII/Latin1 */ - 577, /* Number of elements */ + 585, /* Number of elements */ 148565664, /* Version and data structure type */ 0, /* 0 if the list starts at 0; 1 if it starts at the element beyond 0 */ @@ -345245,6 +354497,8 @@ static const UV UNI_NFKCQC__Y_invlist[] = { /* for ASCII/Latin1 */ 0xA69E, 0xA770, 0xA771, + 0xA7F2, + 0xA7F5, 0xA7F8, 0xA7FA, 0xAB5C, @@ -345325,6 +354579,12 @@ static const UV UNI_NFKCQC__Y_invlist[] = { /* for ASCII/Latin1 */ 0xFFE7, 0xFFE8, 0xFFEF, + 0x10781, + 0x10786, + 0x10787, + 0x107B1, + 0x107B2, + 0x107BB, 0x110BA, 0x110BB, 0x11127, @@ -345487,7 +354747,7 @@ static const UV UNI_NFKCQC__Y_invlist[] = { /* for ASCII/Latin1 */ && '$' == 91 && '@' == 124 && '`' == 121 && '\n' == 21 static const UV UNI_NFKCQC__Y_invlist[] = { /* for EBCDIC 1047 */ - 583, /* Number of elements */ + 591, /* Number of elements */ 148565664, /* Version and data structure type */ 0, /* 0 if the list starts at 0; 1 if it starts at the element beyond 0 */ @@ -345842,6 +355102,8 @@ static const UV UNI_NFKCQC__Y_invlist[] = { /* for EBCDIC 1047 */ 0xA69E, 0xA770, 0xA771, + 0xA7F2, + 0xA7F5, 0xA7F8, 0xA7FA, 0xAB5C, @@ -345922,6 +355184,12 @@ static const UV UNI_NFKCQC__Y_invlist[] = { /* for EBCDIC 1047 */ 0xFFE7, 0xFFE8, 0xFFEF, + 0x10781, + 0x10786, + 0x10787, + 0x107B1, + 0x107B2, + 0x107BB, 0x110BA, 0x110BB, 0x11127, @@ -346084,7 +355352,7 @@ static const UV UNI_NFKCQC__Y_invlist[] = { /* for EBCDIC 1047 */ && '$' == 91 && '@' == 124 && '`' == 121 && '\n' == 37 static const UV UNI_NFKCQC__Y_invlist[] = { /* for EBCDIC 037 */ - 581, /* Number of elements */ + 589, /* Number of elements */ 148565664, /* Version and data structure type */ 0, /* 0 if the list starts at 0; 1 if it starts at the element beyond 0 */ @@ -346437,6 +355705,8 @@ static const UV UNI_NFKCQC__Y_invlist[] = { /* for EBCDIC 037 */ 0xA69E, 0xA770, 0xA771, + 0xA7F2, + 0xA7F5, 0xA7F8, 0xA7FA, 0xAB5C, @@ -346517,6 +355787,12 @@ static const UV UNI_NFKCQC__Y_invlist[] = { /* for EBCDIC 037 */ 0xFFE7, 0xFFE8, 0xFFEF, + 0x10781, + 0x10786, + 0x10787, + 0x107B1, + 0x107B2, + 0x107BB, 0x110BA, 0x110BB, 0x11127, @@ -346676,7 +355952,7 @@ static const UV UNI_NFKCQC__Y_invlist[] = { /* for EBCDIC 037 */ # if 'A' == 65 /* ASCII/Latin1 */ static const UV UNI_NFKDQC__N_invlist[] = { /* for ASCII/Latin1 */ - 785, /* Number of elements */ + 793, /* Number of elements */ 148565664, /* Version and data structure type */ 1, /* 0 if the list starts at 0; 1 if it starts at the element beyond 0 */ @@ -347231,6 +356507,8 @@ static const UV UNI_NFKDQC__N_invlist[] = { /* for ASCII/Latin1 */ 0xA69E, 0xA770, 0xA771, + 0xA7F2, + 0xA7F5, 0xA7F8, 0xA7FA, 0xAB5C, @@ -347313,6 +356591,12 @@ static const UV UNI_NFKDQC__N_invlist[] = { /* for ASCII/Latin1 */ 0xFFE7, 0xFFE8, 0xFFEF, + 0x10781, + 0x10786, + 0x10787, + 0x107B1, + 0x107B2, + 0x107BB, 0x1109A, 0x1109B, 0x1109C, @@ -347475,7 +356759,7 @@ static const UV UNI_NFKDQC__N_invlist[] = { /* for ASCII/Latin1 */ && '$' == 91 && '@' == 124 && '`' == 121 && '\n' == 21 static const UV UNI_NFKDQC__N_invlist[] = { /* for EBCDIC 1047 */ - 783, /* Number of elements */ + 791, /* Number of elements */ 148565664, /* Version and data structure type */ 1, /* 0 if the list starts at 0; 1 if it starts at the element beyond 0 */ @@ -348028,6 +357312,8 @@ static const UV UNI_NFKDQC__N_invlist[] = { /* for EBCDIC 1047 */ 0xA69E, 0xA770, 0xA771, + 0xA7F2, + 0xA7F5, 0xA7F8, 0xA7FA, 0xAB5C, @@ -348110,6 +357396,12 @@ static const UV UNI_NFKDQC__N_invlist[] = { /* for EBCDIC 1047 */ 0xFFE7, 0xFFE8, 0xFFEF, + 0x10781, + 0x10786, + 0x10787, + 0x107B1, + 0x107B2, + 0x107BB, 0x1109A, 0x1109B, 0x1109C, @@ -348272,7 +357564,7 @@ static const UV UNI_NFKDQC__N_invlist[] = { /* for EBCDIC 1047 */ && '$' == 91 && '@' == 124 && '`' == 121 && '\n' == 37 static const UV UNI_NFKDQC__N_invlist[] = { /* for EBCDIC 037 */ - 785, /* Number of elements */ + 793, /* Number of elements */ 148565664, /* Version and data structure type */ 1, /* 0 if the list starts at 0; 1 if it starts at the element beyond 0 */ @@ -348827,6 +358119,8 @@ static const UV UNI_NFKDQC__N_invlist[] = { /* for EBCDIC 037 */ 0xA69E, 0xA770, 0xA771, + 0xA7F2, + 0xA7F5, 0xA7F8, 0xA7FA, 0xAB5C, @@ -348909,6 +358203,12 @@ static const UV UNI_NFKDQC__N_invlist[] = { /* for EBCDIC 037 */ 0xFFE7, 0xFFE8, 0xFFEF, + 0x10781, + 0x10786, + 0x10787, + 0x107B1, + 0x107B2, + 0x107BB, 0x1109A, 0x1109B, 0x1109C, @@ -349066,15 +358366,23 @@ static const UV UNI_NFKDQC__N_invlist[] = { /* for EBCDIC 037 */ # endif /* EBCDIC 037 */ static const UV UNI_NKO_invlist[] = { /* for all charsets */ - 5, /* Number of elements */ + 13, /* Number of elements */ 148565664, /* Version and data structure type */ 1, /* 0 if the list starts at 0; 1 if it starts at the element beyond 0 */ 0x0, + 0x60C, + 0x60D, + 0x61B, + 0x61C, + 0x61F, + 0x620, 0x7C0, 0x7FB, 0x7FD, - 0x800 + 0x800, + 0xFD3E, + 0xFD40 }; static const UV UNI_NL_invlist[] = { /* for all charsets */ @@ -350730,7 +360038,7 @@ static const UV UNI_NV___MINUS_1_SLASH_2_invlist[] = { /* for all charsets */ # if 'A' == 65 /* ASCII/Latin1 */ static const UV UNI_NV__0_invlist[] = { /* for ASCII/Latin1 */ - 163, /* Number of elements */ + 165, /* Number of elements */ 148565664, /* Version and data structure type */ 1, /* 0 if the list starts at 0; 1 if it starts at the element beyond 0 */ @@ -350869,6 +360177,8 @@ static const UV UNI_NV__0_invlist[] = { /* for ASCII/Latin1 */ 0x11DA1, 0x16A60, 0x16A61, + 0x16AC0, + 0x16AC1, 0x16B50, 0x16B51, 0x16E80, @@ -350907,7 +360217,7 @@ static const UV UNI_NV__0_invlist[] = { /* for ASCII/Latin1 */ && '$' == 91 && '@' == 124 && '`' == 121 && '\n' == 21 static const UV UNI_NV__0_invlist[] = { /* for EBCDIC 1047 */ - 163, /* Number of elements */ + 165, /* Number of elements */ 148565664, /* Version and data structure type */ 1, /* 0 if the list starts at 0; 1 if it starts at the element beyond 0 */ @@ -351046,6 +360356,8 @@ static const UV UNI_NV__0_invlist[] = { /* for EBCDIC 1047 */ 0x11DA1, 0x16A60, 0x16A61, + 0x16AC0, + 0x16AC1, 0x16B50, 0x16B51, 0x16E80, @@ -351084,7 +360396,7 @@ static const UV UNI_NV__0_invlist[] = { /* for EBCDIC 1047 */ && '$' == 91 && '@' == 124 && '`' == 121 && '\n' == 37 static const UV UNI_NV__0_invlist[] = { /* for EBCDIC 037 */ - 163, /* Number of elements */ + 165, /* Number of elements */ 148565664, /* Version and data structure type */ 1, /* 0 if the list starts at 0; 1 if it starts at the element beyond 0 */ @@ -351223,6 +360535,8 @@ static const UV UNI_NV__0_invlist[] = { /* for EBCDIC 037 */ 0x11DA1, 0x16A60, 0x16A61, + 0x16AC0, + 0x16AC1, 0x16B50, 0x16B51, 0x16E80, @@ -351258,7 +360572,7 @@ static const UV UNI_NV__0_invlist[] = { /* for EBCDIC 037 */ # if 'A' == 65 /* ASCII/Latin1 */ static const UV UNI_NV__1_invlist[] = { /* for ASCII/Latin1 */ - 275, /* Number of elements */ + 277, /* Number of elements */ 148565664, /* Version and data structure type */ 1, /* 0 if the list starts at 0; 1 if it starts at the element beyond 0 */ @@ -351491,6 +360805,8 @@ static const UV UNI_NV__1_invlist[] = { /* for ASCII/Latin1 */ 0x12459, 0x16A61, 0x16A62, + 0x16AC1, + 0x16AC2, 0x16B51, 0x16B52, 0x16E81, @@ -351547,7 +360863,7 @@ static const UV UNI_NV__1_invlist[] = { /* for ASCII/Latin1 */ && '$' == 91 && '@' == 124 && '`' == 121 && '\n' == 21 static const UV UNI_NV__1_invlist[] = { /* for EBCDIC 1047 */ - 275, /* Number of elements */ + 277, /* Number of elements */ 148565664, /* Version and data structure type */ 1, /* 0 if the list starts at 0; 1 if it starts at the element beyond 0 */ @@ -351780,6 +361096,8 @@ static const UV UNI_NV__1_invlist[] = { /* for EBCDIC 1047 */ 0x12459, 0x16A61, 0x16A62, + 0x16AC1, + 0x16AC2, 0x16B51, 0x16B52, 0x16E81, @@ -351836,7 +361154,7 @@ static const UV UNI_NV__1_invlist[] = { /* for EBCDIC 1047 */ && '$' == 91 && '@' == 124 && '`' == 121 && '\n' == 37 static const UV UNI_NV__1_invlist[] = { /* for EBCDIC 037 */ - 275, /* Number of elements */ + 277, /* Number of elements */ 148565664, /* Version and data structure type */ 1, /* 0 if the list starts at 0; 1 if it starts at the element beyond 0 */ @@ -352069,6 +361387,8 @@ static const UV UNI_NV__1_invlist[] = { /* for EBCDIC 037 */ 0x12459, 0x16A61, 0x16A62, + 0x16AC1, + 0x16AC2, 0x16B51, 0x16B52, 0x16E81, @@ -353204,7 +362524,7 @@ static const UV UNI_NV__19_invlist[] = { /* for all charsets */ # if 'A' == 65 /* ASCII/Latin1 */ static const UV UNI_NV__2_invlist[] = { /* for ASCII/Latin1 */ - 273, /* Number of elements */ + 275, /* Number of elements */ 148565664, /* Version and data structure type */ 1, /* 0 if the list starts at 0; 1 if it starts at the element beyond 0 */ @@ -353435,6 +362755,8 @@ static const UV UNI_NV__2_invlist[] = { /* for ASCII/Latin1 */ 0x1245A, 0x16A62, 0x16A63, + 0x16AC2, + 0x16AC3, 0x16B52, 0x16B53, 0x16E82, @@ -353491,7 +362813,7 @@ static const UV UNI_NV__2_invlist[] = { /* for ASCII/Latin1 */ && '$' == 91 && '@' == 124 && '`' == 121 && '\n' == 21 static const UV UNI_NV__2_invlist[] = { /* for EBCDIC 1047 */ - 273, /* Number of elements */ + 275, /* Number of elements */ 148565664, /* Version and data structure type */ 1, /* 0 if the list starts at 0; 1 if it starts at the element beyond 0 */ @@ -353722,6 +363044,8 @@ static const UV UNI_NV__2_invlist[] = { /* for EBCDIC 1047 */ 0x1245A, 0x16A62, 0x16A63, + 0x16AC2, + 0x16AC3, 0x16B52, 0x16B53, 0x16E82, @@ -353778,7 +363102,7 @@ static const UV UNI_NV__2_invlist[] = { /* for EBCDIC 1047 */ && '$' == 91 && '@' == 124 && '`' == 121 && '\n' == 37 static const UV UNI_NV__2_invlist[] = { /* for EBCDIC 037 */ - 273, /* Number of elements */ + 275, /* Number of elements */ 148565664, /* Version and data structure type */ 1, /* 0 if the list starts at 0; 1 if it starts at the element beyond 0 */ @@ -354009,6 +363333,8 @@ static const UV UNI_NV__2_invlist[] = { /* for EBCDIC 037 */ 0x1245A, 0x16A62, 0x16A63, + 0x16AC2, + 0x16AC3, 0x16B52, 0x16B53, 0x16E82, @@ -354350,7 +363676,7 @@ static const UV UNI_NV__29_invlist[] = { /* for all charsets */ # if 'A' == 65 /* ASCII/Latin1 */ static const UV UNI_NV__3_invlist[] = { /* for ASCII/Latin1 */ - 267, /* Number of elements */ + 269, /* Number of elements */ 148565664, /* Version and data structure type */ 1, /* 0 if the list starts at 0; 1 if it starts at the element beyond 0 */ @@ -354571,6 +363897,8 @@ static const UV UNI_NV__3_invlist[] = { /* for ASCII/Latin1 */ 0x12458, 0x16A63, 0x16A64, + 0x16AC3, + 0x16AC4, 0x16B53, 0x16B54, 0x16E83, @@ -354631,7 +363959,7 @@ static const UV UNI_NV__3_invlist[] = { /* for ASCII/Latin1 */ && '$' == 91 && '@' == 124 && '`' == 121 && '\n' == 21 static const UV UNI_NV__3_invlist[] = { /* for EBCDIC 1047 */ - 267, /* Number of elements */ + 269, /* Number of elements */ 148565664, /* Version and data structure type */ 1, /* 0 if the list starts at 0; 1 if it starts at the element beyond 0 */ @@ -354852,6 +364180,8 @@ static const UV UNI_NV__3_invlist[] = { /* for EBCDIC 1047 */ 0x12458, 0x16A63, 0x16A64, + 0x16AC3, + 0x16AC4, 0x16B53, 0x16B54, 0x16E83, @@ -354912,7 +364242,7 @@ static const UV UNI_NV__3_invlist[] = { /* for EBCDIC 1047 */ && '$' == 91 && '@' == 124 && '`' == 121 && '\n' == 37 static const UV UNI_NV__3_invlist[] = { /* for EBCDIC 037 */ - 267, /* Number of elements */ + 269, /* Number of elements */ 148565664, /* Version and data structure type */ 1, /* 0 if the list starts at 0; 1 if it starts at the element beyond 0 */ @@ -355133,6 +364463,8 @@ static const UV UNI_NV__3_invlist[] = { /* for EBCDIC 037 */ 0x12458, 0x16A63, 0x16A64, + 0x16AC3, + 0x16AC4, 0x16B53, 0x16B54, 0x16E83, @@ -355568,7 +364900,7 @@ static const UV UNI_NV__39_invlist[] = { /* for all charsets */ # if 'A' == 65 /* ASCII/Latin1 */ static const UV UNI_NV__4_invlist[] = { /* for ASCII/Latin1 */ - 253, /* Number of elements */ + 255, /* Number of elements */ 148565664, /* Version and data structure type */ 1, /* 0 if the list starts at 0; 1 if it starts at the element beyond 0 */ @@ -355779,6 +365111,8 @@ static const UV UNI_NV__4_invlist[] = { /* for ASCII/Latin1 */ 0x1246A, 0x16A64, 0x16A65, + 0x16AC4, + 0x16AC5, 0x16B54, 0x16B55, 0x16E84, @@ -355835,7 +365169,7 @@ static const UV UNI_NV__4_invlist[] = { /* for ASCII/Latin1 */ && '$' == 91 && '@' == 124 && '`' == 121 && '\n' == 21 static const UV UNI_NV__4_invlist[] = { /* for EBCDIC 1047 */ - 253, /* Number of elements */ + 255, /* Number of elements */ 148565664, /* Version and data structure type */ 1, /* 0 if the list starts at 0; 1 if it starts at the element beyond 0 */ @@ -356046,6 +365380,8 @@ static const UV UNI_NV__4_invlist[] = { /* for EBCDIC 1047 */ 0x1246A, 0x16A64, 0x16A65, + 0x16AC4, + 0x16AC5, 0x16B54, 0x16B55, 0x16E84, @@ -356102,7 +365438,7 @@ static const UV UNI_NV__4_invlist[] = { /* for EBCDIC 1047 */ && '$' == 91 && '@' == 124 && '`' == 121 && '\n' == 37 static const UV UNI_NV__4_invlist[] = { /* for EBCDIC 037 */ - 253, /* Number of elements */ + 255, /* Number of elements */ 148565664, /* Version and data structure type */ 1, /* 0 if the list starts at 0; 1 if it starts at the element beyond 0 */ @@ -356313,6 +365649,8 @@ static const UV UNI_NV__4_invlist[] = { /* for EBCDIC 037 */ 0x1246A, 0x16A64, 0x16A65, + 0x16AC4, + 0x16AC5, 0x16B54, 0x16B55, 0x16E84, @@ -356584,7 +365922,7 @@ static const UV UNI_NV__49_invlist[] = { /* for all charsets */ # if 'A' == 65 /* ASCII/Latin1 */ static const UV UNI_NV__5_invlist[] = { /* for ASCII/Latin1 */ - 257, /* Number of elements */ + 259, /* Number of elements */ 148565664, /* Version and data structure type */ 1, /* 0 if the list starts at 0; 1 if it starts at the element beyond 0 */ @@ -356801,6 +366139,8 @@ static const UV UNI_NV__5_invlist[] = { /* for ASCII/Latin1 */ 0x1246B, 0x16A65, 0x16A66, + 0x16AC5, + 0x16AC6, 0x16B55, 0x16B56, 0x16E85, @@ -356855,7 +366195,7 @@ static const UV UNI_NV__5_invlist[] = { /* for ASCII/Latin1 */ && '$' == 91 && '@' == 124 && '`' == 121 && '\n' == 21 static const UV UNI_NV__5_invlist[] = { /* for EBCDIC 1047 */ - 257, /* Number of elements */ + 259, /* Number of elements */ 148565664, /* Version and data structure type */ 1, /* 0 if the list starts at 0; 1 if it starts at the element beyond 0 */ @@ -357072,6 +366412,8 @@ static const UV UNI_NV__5_invlist[] = { /* for EBCDIC 1047 */ 0x1246B, 0x16A65, 0x16A66, + 0x16AC5, + 0x16AC6, 0x16B55, 0x16B56, 0x16E85, @@ -357126,7 +366468,7 @@ static const UV UNI_NV__5_invlist[] = { /* for EBCDIC 1047 */ && '$' == 91 && '@' == 124 && '`' == 121 && '\n' == 37 static const UV UNI_NV__5_invlist[] = { /* for EBCDIC 037 */ - 257, /* Number of elements */ + 259, /* Number of elements */ 148565664, /* Version and data structure type */ 1, /* 0 if the list starts at 0; 1 if it starts at the element beyond 0 */ @@ -357343,6 +366685,8 @@ static const UV UNI_NV__5_invlist[] = { /* for EBCDIC 037 */ 0x1246B, 0x16A65, 0x16A66, + 0x16AC5, + 0x16AC6, 0x16B55, 0x16B56, 0x16E85, @@ -357586,7 +366930,7 @@ static const UV UNI_NV__500000_invlist[] = { /* for all charsets */ # if 'A' == 65 /* ASCII/Latin1 */ static const UV UNI_NV__6_invlist[] = { /* for ASCII/Latin1 */ - 227, /* Number of elements */ + 229, /* Number of elements */ 148565664, /* Version and data structure type */ 1, /* 0 if the list starts at 0; 1 if it starts at the element beyond 0 */ @@ -357777,6 +367121,8 @@ static const UV UNI_NV__6_invlist[] = { /* for ASCII/Latin1 */ 0x1246C, 0x16A66, 0x16A67, + 0x16AC6, + 0x16AC7, 0x16B56, 0x16B57, 0x16E86, @@ -357827,7 +367173,7 @@ static const UV UNI_NV__6_invlist[] = { /* for ASCII/Latin1 */ && '$' == 91 && '@' == 124 && '`' == 121 && '\n' == 21 static const UV UNI_NV__6_invlist[] = { /* for EBCDIC 1047 */ - 227, /* Number of elements */ + 229, /* Number of elements */ 148565664, /* Version and data structure type */ 1, /* 0 if the list starts at 0; 1 if it starts at the element beyond 0 */ @@ -358018,6 +367364,8 @@ static const UV UNI_NV__6_invlist[] = { /* for EBCDIC 1047 */ 0x1246C, 0x16A66, 0x16A67, + 0x16AC6, + 0x16AC7, 0x16B56, 0x16B57, 0x16E86, @@ -358068,7 +367416,7 @@ static const UV UNI_NV__6_invlist[] = { /* for EBCDIC 1047 */ && '$' == 91 && '@' == 124 && '`' == 121 && '\n' == 37 static const UV UNI_NV__6_invlist[] = { /* for EBCDIC 037 */ - 227, /* Number of elements */ + 229, /* Number of elements */ 148565664, /* Version and data structure type */ 1, /* 0 if the list starts at 0; 1 if it starts at the element beyond 0 */ @@ -358259,6 +367607,8 @@ static const UV UNI_NV__6_invlist[] = { /* for EBCDIC 037 */ 0x1246C, 0x16A66, 0x16A67, + 0x16AC6, + 0x16AC7, 0x16B56, 0x16B57, 0x16E86, @@ -358404,7 +367754,7 @@ static const UV UNI_NV__600000_invlist[] = { /* for all charsets */ # if 'A' == 65 /* ASCII/Latin1 */ static const UV UNI_NV__7_invlist[] = { /* for ASCII/Latin1 */ - 221, /* Number of elements */ + 223, /* Number of elements */ 148565664, /* Version and data structure type */ 1, /* 0 if the list starts at 0; 1 if it starts at the element beyond 0 */ @@ -358589,6 +367939,8 @@ static const UV UNI_NV__7_invlist[] = { /* for ASCII/Latin1 */ 0x1246D, 0x16A67, 0x16A68, + 0x16AC7, + 0x16AC8, 0x16B57, 0x16B58, 0x16E87, @@ -358639,7 +367991,7 @@ static const UV UNI_NV__7_invlist[] = { /* for ASCII/Latin1 */ && '$' == 91 && '@' == 124 && '`' == 121 && '\n' == 21 static const UV UNI_NV__7_invlist[] = { /* for EBCDIC 1047 */ - 221, /* Number of elements */ + 223, /* Number of elements */ 148565664, /* Version and data structure type */ 1, /* 0 if the list starts at 0; 1 if it starts at the element beyond 0 */ @@ -358824,6 +368176,8 @@ static const UV UNI_NV__7_invlist[] = { /* for EBCDIC 1047 */ 0x1246D, 0x16A67, 0x16A68, + 0x16AC7, + 0x16AC8, 0x16B57, 0x16B58, 0x16E87, @@ -358874,7 +368228,7 @@ static const UV UNI_NV__7_invlist[] = { /* for EBCDIC 1047 */ && '$' == 91 && '@' == 124 && '`' == 121 && '\n' == 37 static const UV UNI_NV__7_invlist[] = { /* for EBCDIC 037 */ - 221, /* Number of elements */ + 223, /* Number of elements */ 148565664, /* Version and data structure type */ 1, /* 0 if the list starts at 0; 1 if it starts at the element beyond 0 */ @@ -359059,6 +368413,8 @@ static const UV UNI_NV__7_invlist[] = { /* for EBCDIC 037 */ 0x1246D, 0x16A67, 0x16A68, + 0x16AC7, + 0x16AC8, 0x16B57, 0x16B58, 0x16E87, @@ -359232,7 +368588,7 @@ static const UV UNI_NV__700000_invlist[] = { /* for all charsets */ # if 'A' == 65 /* ASCII/Latin1 */ static const UV UNI_NV__8_invlist[] = { /* for ASCII/Latin1 */ - 215, /* Number of elements */ + 217, /* Number of elements */ 148565664, /* Version and data structure type */ 1, /* 0 if the list starts at 0; 1 if it starts at the element beyond 0 */ @@ -359413,6 +368769,8 @@ static const UV UNI_NV__8_invlist[] = { /* for ASCII/Latin1 */ 0x1246E, 0x16A68, 0x16A69, + 0x16AC8, + 0x16AC9, 0x16B58, 0x16B59, 0x16E88, @@ -359461,7 +368819,7 @@ static const UV UNI_NV__8_invlist[] = { /* for ASCII/Latin1 */ && '$' == 91 && '@' == 124 && '`' == 121 && '\n' == 21 static const UV UNI_NV__8_invlist[] = { /* for EBCDIC 1047 */ - 215, /* Number of elements */ + 217, /* Number of elements */ 148565664, /* Version and data structure type */ 1, /* 0 if the list starts at 0; 1 if it starts at the element beyond 0 */ @@ -359642,6 +369000,8 @@ static const UV UNI_NV__8_invlist[] = { /* for EBCDIC 1047 */ 0x1246E, 0x16A68, 0x16A69, + 0x16AC8, + 0x16AC9, 0x16B58, 0x16B59, 0x16E88, @@ -359690,7 +369050,7 @@ static const UV UNI_NV__8_invlist[] = { /* for EBCDIC 1047 */ && '$' == 91 && '@' == 124 && '`' == 121 && '\n' == 37 static const UV UNI_NV__8_invlist[] = { /* for EBCDIC 037 */ - 215, /* Number of elements */ + 217, /* Number of elements */ 148565664, /* Version and data structure type */ 1, /* 0 if the list starts at 0; 1 if it starts at the element beyond 0 */ @@ -359871,6 +369231,8 @@ static const UV UNI_NV__8_invlist[] = { /* for EBCDIC 037 */ 0x1246E, 0x16A68, 0x16A69, + 0x16AC8, + 0x16AC9, 0x16B58, 0x16B59, 0x16E88, @@ -360010,7 +369372,7 @@ static const UV UNI_NV__800000_invlist[] = { /* for all charsets */ # if 'A' == 65 /* ASCII/Latin1 */ static const UV UNI_NV__9_invlist[] = { /* for ASCII/Latin1 */ - 219, /* Number of elements */ + 221, /* Number of elements */ 148565664, /* Version and data structure type */ 1, /* 0 if the list starts at 0; 1 if it starts at the element beyond 0 */ @@ -360193,6 +369555,8 @@ static const UV UNI_NV__9_invlist[] = { /* for ASCII/Latin1 */ 0x1246F, 0x16A69, 0x16A6A, + 0x16AC9, + 0x16ACA, 0x16B59, 0x16B5A, 0x16E89, @@ -360243,7 +369607,7 @@ static const UV UNI_NV__9_invlist[] = { /* for ASCII/Latin1 */ && '$' == 91 && '@' == 124 && '`' == 121 && '\n' == 21 static const UV UNI_NV__9_invlist[] = { /* for EBCDIC 1047 */ - 219, /* Number of elements */ + 221, /* Number of elements */ 148565664, /* Version and data structure type */ 1, /* 0 if the list starts at 0; 1 if it starts at the element beyond 0 */ @@ -360426,6 +369790,8 @@ static const UV UNI_NV__9_invlist[] = { /* for EBCDIC 1047 */ 0x1246F, 0x16A69, 0x16A6A, + 0x16AC9, + 0x16ACA, 0x16B59, 0x16B5A, 0x16E89, @@ -360476,7 +369842,7 @@ static const UV UNI_NV__9_invlist[] = { /* for EBCDIC 1047 */ && '$' == 91 && '@' == 124 && '`' == 121 && '\n' == 37 static const UV UNI_NV__9_invlist[] = { /* for EBCDIC 037 */ - 219, /* Number of elements */ + 221, /* Number of elements */ 148565664, /* Version and data structure type */ 1, /* 0 if the list starts at 0; 1 if it starts at the element beyond 0 */ @@ -360659,6 +370025,8 @@ static const UV UNI_NV__9_invlist[] = { /* for EBCDIC 037 */ 0x1246F, 0x16A69, 0x16A6A, + 0x16AC9, + 0x16ACA, 0x16B59, 0x16B5A, 0x16E89, @@ -360812,7 +370180,7 @@ static const UV UNI_NV__900000_invlist[] = { /* for all charsets */ # if 'A' == 65 /* ASCII/Latin1 */ static const UV UNI_NV__NAN_invlist[] = { /* for ASCII/Latin1 */ - 411, /* Number of elements */ + 413, /* Number of elements */ 148565664, /* Version and data structure type */ 0, /* 0 if the list starts at 0; 1 if it starts at the element beyond 0 */ @@ -361161,6 +370529,8 @@ static const UV UNI_NV__NAN_invlist[] = { /* for ASCII/Latin1 */ 0x1246F, 0x16A60, 0x16A6A, + 0x16AC0, + 0x16ACA, 0x16B50, 0x16B5A, 0x16B5B, @@ -361237,7 +370607,7 @@ static const UV UNI_NV__NAN_invlist[] = { /* for ASCII/Latin1 */ && '$' == 91 && '@' == 124 && '`' == 121 && '\n' == 21 static const UV UNI_NV__NAN_invlist[] = { /* for EBCDIC 1047 */ - 411, /* Number of elements */ + 413, /* Number of elements */ 148565664, /* Version and data structure type */ 0, /* 0 if the list starts at 0; 1 if it starts at the element beyond 0 */ @@ -361586,6 +370956,8 @@ static const UV UNI_NV__NAN_invlist[] = { /* for EBCDIC 1047 */ 0x1246F, 0x16A60, 0x16A6A, + 0x16AC0, + 0x16ACA, 0x16B50, 0x16B5A, 0x16B5B, @@ -361662,7 +371034,7 @@ static const UV UNI_NV__NAN_invlist[] = { /* for EBCDIC 1047 */ && '$' == 91 && '@' == 124 && '`' == 121 && '\n' == 37 static const UV UNI_NV__NAN_invlist[] = { /* for EBCDIC 037 */ - 411, /* Number of elements */ + 413, /* Number of elements */ 148565664, /* Version and data structure type */ 0, /* 0 if the list starts at 0; 1 if it starts at the element beyond 0 */ @@ -362011,6 +371383,8 @@ static const UV UNI_NV__NAN_invlist[] = { /* for EBCDIC 037 */ 0x1246F, 0x16A60, 0x16A6A, + 0x16AC0, + 0x16ACA, 0x16B50, 0x16B5A, 0x16B5B, @@ -362209,10 +371583,24 @@ static const UV UNI_OTTOMANSIYAQNUMBERS_invlist[] = { /* for all charsets */ 0x1ED50 }; +static const UV UNI_OUGR_invlist[] = { /* for all charsets */ + 7, /* Number of elements */ + 148565664, /* Version and data structure type */ + 1, /* 0 if the list starts at 0; + 1 if it starts at the element beyond 0 */ + 0x0, + 0x640, + 0x641, + 0x10AF2, + 0x10AF3, + 0x10F70, + 0x10F8A +}; + # if 'A' == 65 /* ASCII/Latin1 */ static const UV UNI_P_invlist[] = { /* for ASCII/Latin1 */ - 371, /* Number of elements */ + 379, /* Number of elements */ 148565664, /* Version and data structure type */ 1, /* 0 if the list starts at 0; 1 if it starts at the element beyond 0 */ @@ -362271,7 +371659,7 @@ static const UV UNI_P_invlist[] = { /* for ASCII/Latin1 */ 0x60E, 0x61B, 0x61C, - 0x61E, + 0x61D, 0x620, 0x66A, 0x66E, @@ -362349,6 +371737,8 @@ static const UV UNI_P_invlist[] = { /* for ASCII/Latin1 */ 0x1AAE, 0x1B5A, 0x1B61, + 0x1B7D, + 0x1B7F, 0x1BFC, 0x1C00, 0x1C3B, @@ -362398,7 +371788,7 @@ static const UV UNI_P_invlist[] = { /* for ASCII/Latin1 */ 0x2E30, 0x2E50, 0x2E52, - 0x2E53, + 0x2E5E, 0x3001, 0x3004, 0x3008, @@ -362509,6 +371899,8 @@ static const UV UNI_P_invlist[] = { /* for ASCII/Latin1 */ 0x10EAE, 0x10F55, 0x10F5A, + 0x10F86, + 0x10F8A, 0x11047, 0x1104E, 0x110BB, @@ -362545,6 +371937,8 @@ static const UV UNI_P_invlist[] = { /* for ASCII/Latin1 */ 0x11644, 0x11660, 0x1166D, + 0x116B9, + 0x116BA, 0x1173C, 0x1173F, 0x1183B, @@ -362569,6 +371963,8 @@ static const UV UNI_P_invlist[] = { /* for ASCII/Latin1 */ 0x12000, 0x12470, 0x12475, + 0x12FF1, + 0x12FF3, 0x16A6E, 0x16A70, 0x16AF5, @@ -362597,7 +371993,7 @@ static const UV UNI_P_invlist[] = { /* for ASCII/Latin1 */ && '$' == 91 && '@' == 124 && '`' == 121 && '\n' == 21 static const UV UNI_P_invlist[] = { /* for EBCDIC 1047 */ - 379, /* Number of elements */ + 387, /* Number of elements */ 148565664, /* Version and data structure type */ 1, /* 0 if the list starts at 0; 1 if it starts at the element beyond 0 */ @@ -362664,7 +372060,7 @@ static const UV UNI_P_invlist[] = { /* for EBCDIC 1047 */ 0x60E, 0x61B, 0x61C, - 0x61E, + 0x61D, 0x620, 0x66A, 0x66E, @@ -362742,6 +372138,8 @@ static const UV UNI_P_invlist[] = { /* for EBCDIC 1047 */ 0x1AAE, 0x1B5A, 0x1B61, + 0x1B7D, + 0x1B7F, 0x1BFC, 0x1C00, 0x1C3B, @@ -362791,7 +372189,7 @@ static const UV UNI_P_invlist[] = { /* for EBCDIC 1047 */ 0x2E30, 0x2E50, 0x2E52, - 0x2E53, + 0x2E5E, 0x3001, 0x3004, 0x3008, @@ -362902,6 +372300,8 @@ static const UV UNI_P_invlist[] = { /* for EBCDIC 1047 */ 0x10EAE, 0x10F55, 0x10F5A, + 0x10F86, + 0x10F8A, 0x11047, 0x1104E, 0x110BB, @@ -362938,6 +372338,8 @@ static const UV UNI_P_invlist[] = { /* for EBCDIC 1047 */ 0x11644, 0x11660, 0x1166D, + 0x116B9, + 0x116BA, 0x1173C, 0x1173F, 0x1183B, @@ -362962,6 +372364,8 @@ static const UV UNI_P_invlist[] = { /* for EBCDIC 1047 */ 0x12000, 0x12470, 0x12475, + 0x12FF1, + 0x12FF3, 0x16A6E, 0x16A70, 0x16AF5, @@ -362990,7 +372394,7 @@ static const UV UNI_P_invlist[] = { /* for EBCDIC 1047 */ && '$' == 91 && '@' == 124 && '`' == 121 && '\n' == 37 static const UV UNI_P_invlist[] = { /* for EBCDIC 037 */ - 377, /* Number of elements */ + 385, /* Number of elements */ 148565664, /* Version and data structure type */ 1, /* 0 if the list starts at 0; 1 if it starts at the element beyond 0 */ @@ -363055,7 +372459,7 @@ static const UV UNI_P_invlist[] = { /* for EBCDIC 037 */ 0x60E, 0x61B, 0x61C, - 0x61E, + 0x61D, 0x620, 0x66A, 0x66E, @@ -363133,6 +372537,8 @@ static const UV UNI_P_invlist[] = { /* for EBCDIC 037 */ 0x1AAE, 0x1B5A, 0x1B61, + 0x1B7D, + 0x1B7F, 0x1BFC, 0x1C00, 0x1C3B, @@ -363182,7 +372588,7 @@ static const UV UNI_P_invlist[] = { /* for EBCDIC 037 */ 0x2E30, 0x2E50, 0x2E52, - 0x2E53, + 0x2E5E, 0x3001, 0x3004, 0x3008, @@ -363293,6 +372699,8 @@ static const UV UNI_P_invlist[] = { /* for EBCDIC 037 */ 0x10EAE, 0x10F55, 0x10F5A, + 0x10F86, + 0x10F8A, 0x11047, 0x1104E, 0x110BB, @@ -363329,6 +372737,8 @@ static const UV UNI_P_invlist[] = { /* for EBCDIC 037 */ 0x11644, 0x11660, 0x1166D, + 0x116B9, + 0x116BA, 0x1173C, 0x1173F, 0x1183B, @@ -363353,6 +372763,8 @@ static const UV UNI_P_invlist[] = { /* for EBCDIC 037 */ 0x12000, 0x12470, 0x12475, + 0x12FF1, + 0x12FF3, 0x16A6E, 0x16A70, 0x16AF5, @@ -363690,7 +373102,7 @@ static const UV UNI_PC_invlist[] = { /* for EBCDIC 037 */ # endif /* EBCDIC 037 */ static const UV UNI_PCM_invlist[] = { /* for all charsets */ - 13, /* Number of elements */ + 15, /* Number of elements */ 148565664, /* Version and data structure type */ 1, /* 0 if the list starts at 0; 1 if it starts at the element beyond 0 */ @@ -363701,6 +373113,8 @@ static const UV UNI_PCM_invlist[] = { /* for all charsets */ 0x6DE, 0x70F, 0x710, + 0x890, + 0x892, 0x8E2, 0x8E3, 0x110BD, @@ -363712,7 +373126,7 @@ static const UV UNI_PCM_invlist[] = { /* for all charsets */ # if 'A' == 65 /* ASCII/Latin1 */ static const UV UNI_PD_invlist[] = { /* for ASCII/Latin1 */ - 37, /* Number of elements */ + 39, /* Number of elements */ 148565664, /* Version and data structure type */ 1, /* 0 if the list starts at 0; 1 if it starts at the element beyond 0 */ @@ -363737,6 +373151,8 @@ static const UV UNI_PD_invlist[] = { /* for ASCII/Latin1 */ 0x2E3C, 0x2E40, 0x2E41, + 0x2E5D, + 0x2E5E, 0x301C, 0x301D, 0x3030, @@ -363763,7 +373179,7 @@ static const UV UNI_PD_invlist[] = { /* for ASCII/Latin1 */ && '$' == 91 && '@' == 124 && '`' == 121 && '\n' == 21 static const UV UNI_PD_invlist[] = { /* for EBCDIC 1047 */ - 37, /* Number of elements */ + 39, /* Number of elements */ 148565664, /* Version and data structure type */ 1, /* 0 if the list starts at 0; 1 if it starts at the element beyond 0 */ @@ -363788,6 +373204,8 @@ static const UV UNI_PD_invlist[] = { /* for EBCDIC 1047 */ 0x2E3C, 0x2E40, 0x2E41, + 0x2E5D, + 0x2E5E, 0x301C, 0x301D, 0x3030, @@ -363814,7 +373232,7 @@ static const UV UNI_PD_invlist[] = { /* for EBCDIC 1047 */ && '$' == 91 && '@' == 124 && '`' == 121 && '\n' == 37 static const UV UNI_PD_invlist[] = { /* for EBCDIC 037 */ - 37, /* Number of elements */ + 39, /* Number of elements */ 148565664, /* Version and data structure type */ 1, /* 0 if the list starts at 0; 1 if it starts at the element beyond 0 */ @@ -363839,6 +373257,8 @@ static const UV UNI_PD_invlist[] = { /* for EBCDIC 037 */ 0x2E3C, 0x2E40, 0x2E41, + 0x2E5D, + 0x2E5E, 0x301C, 0x301D, 0x3030, @@ -363862,7 +373282,7 @@ static const UV UNI_PD_invlist[] = { /* for EBCDIC 037 */ # if 'A' == 65 /* ASCII/Latin1 */ static const UV UNI_PE_invlist[] = { /* for ASCII/Latin1 */ - 145, /* Number of elements */ + 153, /* Number of elements */ 148565664, /* Version and data structure type */ 1, /* 0 if the list starts at 0; 1 if it starts at the element beyond 0 */ @@ -363953,6 +373373,14 @@ static const UV UNI_PE_invlist[] = { /* for ASCII/Latin1 */ 0x2E28, 0x2E29, 0x2E2A, + 0x2E56, + 0x2E57, + 0x2E58, + 0x2E59, + 0x2E5A, + 0x2E5B, + 0x2E5C, + 0x2E5D, 0x3009, 0x300A, 0x300B, @@ -364021,7 +373449,7 @@ static const UV UNI_PE_invlist[] = { /* for ASCII/Latin1 */ && '$' == 91 && '@' == 124 && '`' == 121 && '\n' == 21 static const UV UNI_PE_invlist[] = { /* for EBCDIC 1047 */ - 145, /* Number of elements */ + 153, /* Number of elements */ 148565664, /* Version and data structure type */ 1, /* 0 if the list starts at 0; 1 if it starts at the element beyond 0 */ @@ -364112,6 +373540,14 @@ static const UV UNI_PE_invlist[] = { /* for EBCDIC 1047 */ 0x2E28, 0x2E29, 0x2E2A, + 0x2E56, + 0x2E57, + 0x2E58, + 0x2E59, + 0x2E5A, + 0x2E5B, + 0x2E5C, + 0x2E5D, 0x3009, 0x300A, 0x300B, @@ -364180,7 +373616,7 @@ static const UV UNI_PE_invlist[] = { /* for EBCDIC 1047 */ && '$' == 91 && '@' == 124 && '`' == 121 && '\n' == 37 static const UV UNI_PE_invlist[] = { /* for EBCDIC 037 */ - 145, /* Number of elements */ + 153, /* Number of elements */ 148565664, /* Version and data structure type */ 1, /* 0 if the list starts at 0; 1 if it starts at the element beyond 0 */ @@ -364271,6 +373707,14 @@ static const UV UNI_PE_invlist[] = { /* for EBCDIC 037 */ 0x2E28, 0x2E29, 0x2E2A, + 0x2E56, + 0x2E57, + 0x2E58, + 0x2E59, + 0x2E5A, + 0x2E5B, + 0x2E5C, + 0x2E5D, 0x3009, 0x300A, 0x300B, @@ -364652,7 +374096,7 @@ static const UV UNI_PLAYINGCARDS_invlist[] = { /* for all charsets */ # if 'A' == 65 /* ASCII/Latin1 */ static const UV UNI_PO_invlist[] = { /* for ASCII/Latin1 */ - 363, /* Number of elements */ + 371, /* Number of elements */ 148565664, /* Version and data structure type */ 1, /* 0 if the list starts at 0; 1 if it starts at the element beyond 0 */ @@ -364703,7 +374147,7 @@ static const UV UNI_PO_invlist[] = { /* for ASCII/Latin1 */ 0x60E, 0x61B, 0x61C, - 0x61E, + 0x61D, 0x620, 0x66A, 0x66E, @@ -364777,6 +374221,8 @@ static const UV UNI_PO_invlist[] = { /* for ASCII/Latin1 */ 0x1AAE, 0x1B5A, 0x1B61, + 0x1B7D, + 0x1B7F, 0x1BFC, 0x1C00, 0x1C3B, @@ -364834,7 +374280,7 @@ static const UV UNI_PO_invlist[] = { /* for ASCII/Latin1 */ 0x2E43, 0x2E50, 0x2E52, - 0x2E53, + 0x2E55, 0x3001, 0x3004, 0x303D, @@ -364941,6 +374387,8 @@ static const UV UNI_PO_invlist[] = { /* for ASCII/Latin1 */ 0x10B9D, 0x10F55, 0x10F5A, + 0x10F86, + 0x10F8A, 0x11047, 0x1104E, 0x110BB, @@ -364977,6 +374425,8 @@ static const UV UNI_PO_invlist[] = { /* for ASCII/Latin1 */ 0x11644, 0x11660, 0x1166D, + 0x116B9, + 0x116BA, 0x1173C, 0x1173F, 0x1183B, @@ -365001,6 +374451,8 @@ static const UV UNI_PO_invlist[] = { /* for ASCII/Latin1 */ 0x12000, 0x12470, 0x12475, + 0x12FF1, + 0x12FF3, 0x16A6E, 0x16A70, 0x16AF5, @@ -365029,7 +374481,7 @@ static const UV UNI_PO_invlist[] = { /* for ASCII/Latin1 */ && '$' == 91 && '@' == 124 && '`' == 121 && '\n' == 21 static const UV UNI_PO_invlist[] = { /* for EBCDIC 1047 */ - 367, /* Number of elements */ + 375, /* Number of elements */ 148565664, /* Version and data structure type */ 1, /* 0 if the list starts at 0; 1 if it starts at the element beyond 0 */ @@ -365084,7 +374536,7 @@ static const UV UNI_PO_invlist[] = { /* for EBCDIC 1047 */ 0x60E, 0x61B, 0x61C, - 0x61E, + 0x61D, 0x620, 0x66A, 0x66E, @@ -365158,6 +374610,8 @@ static const UV UNI_PO_invlist[] = { /* for EBCDIC 1047 */ 0x1AAE, 0x1B5A, 0x1B61, + 0x1B7D, + 0x1B7F, 0x1BFC, 0x1C00, 0x1C3B, @@ -365215,7 +374669,7 @@ static const UV UNI_PO_invlist[] = { /* for EBCDIC 1047 */ 0x2E43, 0x2E50, 0x2E52, - 0x2E53, + 0x2E55, 0x3001, 0x3004, 0x303D, @@ -365322,6 +374776,8 @@ static const UV UNI_PO_invlist[] = { /* for EBCDIC 1047 */ 0x10B9D, 0x10F55, 0x10F5A, + 0x10F86, + 0x10F8A, 0x11047, 0x1104E, 0x110BB, @@ -365358,6 +374814,8 @@ static const UV UNI_PO_invlist[] = { /* for EBCDIC 1047 */ 0x11644, 0x11660, 0x1166D, + 0x116B9, + 0x116BA, 0x1173C, 0x1173F, 0x1183B, @@ -365382,6 +374840,8 @@ static const UV UNI_PO_invlist[] = { /* for EBCDIC 1047 */ 0x12000, 0x12470, 0x12475, + 0x12FF1, + 0x12FF3, 0x16A6E, 0x16A70, 0x16AF5, @@ -365410,7 +374870,7 @@ static const UV UNI_PO_invlist[] = { /* for EBCDIC 1047 */ && '$' == 91 && '@' == 124 && '`' == 121 && '\n' == 37 static const UV UNI_PO_invlist[] = { /* for EBCDIC 037 */ - 367, /* Number of elements */ + 375, /* Number of elements */ 148565664, /* Version and data structure type */ 1, /* 0 if the list starts at 0; 1 if it starts at the element beyond 0 */ @@ -365465,7 +374925,7 @@ static const UV UNI_PO_invlist[] = { /* for EBCDIC 037 */ 0x60E, 0x61B, 0x61C, - 0x61E, + 0x61D, 0x620, 0x66A, 0x66E, @@ -365539,6 +374999,8 @@ static const UV UNI_PO_invlist[] = { /* for EBCDIC 037 */ 0x1AAE, 0x1B5A, 0x1B61, + 0x1B7D, + 0x1B7F, 0x1BFC, 0x1C00, 0x1C3B, @@ -365596,7 +375058,7 @@ static const UV UNI_PO_invlist[] = { /* for EBCDIC 037 */ 0x2E43, 0x2E50, 0x2E52, - 0x2E53, + 0x2E55, 0x3001, 0x3004, 0x303D, @@ -365703,6 +375165,8 @@ static const UV UNI_PO_invlist[] = { /* for EBCDIC 037 */ 0x10B9D, 0x10F55, 0x10F5A, + 0x10F86, + 0x10F8A, 0x11047, 0x1104E, 0x110BB, @@ -365739,6 +375203,8 @@ static const UV UNI_PO_invlist[] = { /* for EBCDIC 037 */ 0x11644, 0x11660, 0x1166D, + 0x116B9, + 0x116BA, 0x1173C, 0x1173F, 0x1183B, @@ -365763,6 +375229,8 @@ static const UV UNI_PO_invlist[] = { /* for EBCDIC 037 */ 0x12000, 0x12470, 0x12475, + 0x12FF1, + 0x12FF3, 0x16A6E, 0x16A70, 0x16AF5, @@ -365800,7 +375268,7 @@ static const UV UNI_PRTI_invlist[] = { /* for all charsets */ # if 'A' == 65 /* ASCII/Latin1 */ static const UV UNI_PS_invlist[] = { /* for ASCII/Latin1 */ - 151, /* Number of elements */ + 159, /* Number of elements */ 148565664, /* Version and data structure type */ 1, /* 0 if the list starts at 0; 1 if it starts at the element beyond 0 */ @@ -365897,6 +375365,14 @@ static const UV UNI_PS_invlist[] = { /* for ASCII/Latin1 */ 0x2E29, 0x2E42, 0x2E43, + 0x2E55, + 0x2E56, + 0x2E57, + 0x2E58, + 0x2E59, + 0x2E5A, + 0x2E5B, + 0x2E5C, 0x3008, 0x3009, 0x300A, @@ -365965,7 +375441,7 @@ static const UV UNI_PS_invlist[] = { /* for ASCII/Latin1 */ && '$' == 91 && '@' == 124 && '`' == 121 && '\n' == 21 static const UV UNI_PS_invlist[] = { /* for EBCDIC 1047 */ - 151, /* Number of elements */ + 159, /* Number of elements */ 148565664, /* Version and data structure type */ 1, /* 0 if the list starts at 0; 1 if it starts at the element beyond 0 */ @@ -366062,6 +375538,14 @@ static const UV UNI_PS_invlist[] = { /* for EBCDIC 1047 */ 0x2E29, 0x2E42, 0x2E43, + 0x2E55, + 0x2E56, + 0x2E57, + 0x2E58, + 0x2E59, + 0x2E5A, + 0x2E5B, + 0x2E5C, 0x3008, 0x3009, 0x300A, @@ -366130,7 +375614,7 @@ static const UV UNI_PS_invlist[] = { /* for EBCDIC 1047 */ && '$' == 91 && '@' == 124 && '`' == 121 && '\n' == 37 static const UV UNI_PS_invlist[] = { /* for EBCDIC 037 */ - 151, /* Number of elements */ + 159, /* Number of elements */ 148565664, /* Version and data structure type */ 1, /* 0 if the list starts at 0; 1 if it starts at the element beyond 0 */ @@ -366227,6 +375711,14 @@ static const UV UNI_PS_invlist[] = { /* for EBCDIC 037 */ 0x2E29, 0x2E42, 0x2E43, + 0x2E55, + 0x2E56, + 0x2E57, + 0x2E58, + 0x2E59, + 0x2E5A, + 0x2E5B, + 0x2E5C, 0x3008, 0x3009, 0x300A, @@ -366300,7 +375792,7 @@ static const UV UNI_PUA_invlist[] = { /* for all charsets */ }; static const UV UNI_QAAI_invlist[] = { /* for all charsets */ - 37, /* Number of elements */ + 41, /* Number of elements */ 148565664, /* Version and data structure type */ 1, /* 0 if the list starts at 0; 1 if it starts at the element beyond 0 */ @@ -366314,7 +375806,7 @@ static const UV UNI_QAAI_invlist[] = { /* for all charsets */ 0x953, 0x955, 0x1AB0, - 0x1AC1, + 0x1ACF, 0x1DC2, 0x1DF8, 0x1DF9, @@ -366331,6 +375823,10 @@ static const UV UNI_QAAI_invlist[] = { /* for all charsets */ 0xFE2E, 0x101FD, 0x101FE, + 0x1CF00, + 0x1CF2E, + 0x1CF30, + 0x1CF47, 0x1D167, 0x1D16A, 0x1D17B, @@ -366542,7 +376038,7 @@ static const UV UNI_RUNR_invlist[] = { /* for all charsets */ # if 'A' == 65 /* ASCII/Latin1 */ static const UV UNI_S_invlist[] = { /* for ASCII/Latin1 */ - 459, /* Number of elements */ + 469, /* Number of elements */ 148565664, /* Version and data structure type */ 1, /* 0 if the list starts at 0; 1 if it starts at the element beyond 0 */ @@ -366613,6 +376109,8 @@ static const UV UNI_S_invlist[] = { /* for ASCII/Latin1 */ 0x7F7, 0x7FE, 0x800, + 0x888, + 0x889, 0x9F2, 0x9F4, 0x9FA, @@ -366690,7 +376188,7 @@ static const UV UNI_S_invlist[] = { /* for ASCII/Latin1 */ 0x208A, 0x208D, 0x20A0, - 0x20C0, + 0x20C1, 0x2100, 0x2102, 0x2103, @@ -366814,9 +376312,13 @@ static const UV UNI_S_invlist[] = { /* for ASCII/Latin1 */ 0xFB29, 0xFB2A, 0xFBB2, - 0xFBC2, + 0xFBC3, + 0xFD40, + 0xFD50, + 0xFDCF, + 0xFDD0, 0xFDFC, - 0xFDFE, + 0xFE00, 0xFE62, 0xFE63, 0xFE64, @@ -366869,6 +376371,8 @@ static const UV UNI_S_invlist[] = { /* for ASCII/Latin1 */ 0x16B46, 0x1BC9C, 0x1BC9D, + 0x1CF50, + 0x1CFC4, 0x1D000, 0x1D0F6, 0x1D100, @@ -366882,7 +376386,7 @@ static const UV UNI_S_invlist[] = { /* for ASCII/Latin1 */ 0x1D18C, 0x1D1AA, 0x1D1AE, - 0x1D1E9, + 0x1D1EB, 0x1D200, 0x1D242, 0x1D245, @@ -366957,7 +376461,7 @@ static const UV UNI_S_invlist[] = { /* for ASCII/Latin1 */ 0x1F266, 0x1F300, 0x1F6D8, - 0x1F6E0, + 0x1F6DD, 0x1F6ED, 0x1F6F0, 0x1F6FD, @@ -366967,6 +376471,8 @@ static const UV UNI_S_invlist[] = { /* for ASCII/Latin1 */ 0x1F7D9, 0x1F7E0, 0x1F7EC, + 0x1F7F0, + 0x1F7F1, 0x1F800, 0x1F80C, 0x1F810, @@ -366980,27 +376486,27 @@ static const UV UNI_S_invlist[] = { /* for ASCII/Latin1 */ 0x1F8B0, 0x1F8B2, 0x1F900, - 0x1F979, - 0x1F97A, - 0x1F9CC, - 0x1F9CD, 0x1FA54, 0x1FA60, 0x1FA6E, 0x1FA70, 0x1FA75, 0x1FA78, - 0x1FA7B, + 0x1FA7D, 0x1FA80, 0x1FA87, 0x1FA90, - 0x1FAA9, + 0x1FAAD, 0x1FAB0, - 0x1FAB7, + 0x1FABB, 0x1FAC0, - 0x1FAC3, + 0x1FAC6, 0x1FAD0, - 0x1FAD7, + 0x1FADA, + 0x1FAE0, + 0x1FAE8, + 0x1FAF0, + 0x1FAF7, 0x1FB00, 0x1FB93, 0x1FB94, @@ -367015,7 +376521,7 @@ static const UV UNI_S_invlist[] = { /* for ASCII/Latin1 */ && '$' == 91 && '@' == 124 && '`' == 121 && '\n' == 21 static const UV UNI_S_invlist[] = { /* for EBCDIC 1047 */ - 465, /* Number of elements */ + 475, /* Number of elements */ 148565664, /* Version and data structure type */ 1, /* 0 if the list starts at 0; 1 if it starts at the element beyond 0 */ @@ -367092,6 +376598,8 @@ static const UV UNI_S_invlist[] = { /* for EBCDIC 1047 */ 0x7F7, 0x7FE, 0x800, + 0x888, + 0x889, 0x9F2, 0x9F4, 0x9FA, @@ -367169,7 +376677,7 @@ static const UV UNI_S_invlist[] = { /* for EBCDIC 1047 */ 0x208A, 0x208D, 0x20A0, - 0x20C0, + 0x20C1, 0x2100, 0x2102, 0x2103, @@ -367293,9 +376801,13 @@ static const UV UNI_S_invlist[] = { /* for EBCDIC 1047 */ 0xFB29, 0xFB2A, 0xFBB2, - 0xFBC2, + 0xFBC3, + 0xFD40, + 0xFD50, + 0xFDCF, + 0xFDD0, 0xFDFC, - 0xFDFE, + 0xFE00, 0xFE62, 0xFE63, 0xFE64, @@ -367348,6 +376860,8 @@ static const UV UNI_S_invlist[] = { /* for EBCDIC 1047 */ 0x16B46, 0x1BC9C, 0x1BC9D, + 0x1CF50, + 0x1CFC4, 0x1D000, 0x1D0F6, 0x1D100, @@ -367361,7 +376875,7 @@ static const UV UNI_S_invlist[] = { /* for EBCDIC 1047 */ 0x1D18C, 0x1D1AA, 0x1D1AE, - 0x1D1E9, + 0x1D1EB, 0x1D200, 0x1D242, 0x1D245, @@ -367436,7 +376950,7 @@ static const UV UNI_S_invlist[] = { /* for EBCDIC 1047 */ 0x1F266, 0x1F300, 0x1F6D8, - 0x1F6E0, + 0x1F6DD, 0x1F6ED, 0x1F6F0, 0x1F6FD, @@ -367446,6 +376960,8 @@ static const UV UNI_S_invlist[] = { /* for EBCDIC 1047 */ 0x1F7D9, 0x1F7E0, 0x1F7EC, + 0x1F7F0, + 0x1F7F1, 0x1F800, 0x1F80C, 0x1F810, @@ -367459,27 +376975,27 @@ static const UV UNI_S_invlist[] = { /* for EBCDIC 1047 */ 0x1F8B0, 0x1F8B2, 0x1F900, - 0x1F979, - 0x1F97A, - 0x1F9CC, - 0x1F9CD, 0x1FA54, 0x1FA60, 0x1FA6E, 0x1FA70, 0x1FA75, 0x1FA78, - 0x1FA7B, + 0x1FA7D, 0x1FA80, 0x1FA87, 0x1FA90, - 0x1FAA9, + 0x1FAAD, 0x1FAB0, - 0x1FAB7, + 0x1FABB, 0x1FAC0, - 0x1FAC3, + 0x1FAC6, 0x1FAD0, - 0x1FAD7, + 0x1FADA, + 0x1FAE0, + 0x1FAE8, + 0x1FAF0, + 0x1FAF7, 0x1FB00, 0x1FB93, 0x1FB94, @@ -367494,7 +377010,7 @@ static const UV UNI_S_invlist[] = { /* for EBCDIC 1047 */ && '$' == 91 && '@' == 124 && '`' == 121 && '\n' == 37 static const UV UNI_S_invlist[] = { /* for EBCDIC 037 */ - 463, /* Number of elements */ + 473, /* Number of elements */ 148565664, /* Version and data structure type */ 1, /* 0 if the list starts at 0; 1 if it starts at the element beyond 0 */ @@ -367569,6 +377085,8 @@ static const UV UNI_S_invlist[] = { /* for EBCDIC 037 */ 0x7F7, 0x7FE, 0x800, + 0x888, + 0x889, 0x9F2, 0x9F4, 0x9FA, @@ -367646,7 +377164,7 @@ static const UV UNI_S_invlist[] = { /* for EBCDIC 037 */ 0x208A, 0x208D, 0x20A0, - 0x20C0, + 0x20C1, 0x2100, 0x2102, 0x2103, @@ -367770,9 +377288,13 @@ static const UV UNI_S_invlist[] = { /* for EBCDIC 037 */ 0xFB29, 0xFB2A, 0xFBB2, - 0xFBC2, + 0xFBC3, + 0xFD40, + 0xFD50, + 0xFDCF, + 0xFDD0, 0xFDFC, - 0xFDFE, + 0xFE00, 0xFE62, 0xFE63, 0xFE64, @@ -367825,6 +377347,8 @@ static const UV UNI_S_invlist[] = { /* for EBCDIC 037 */ 0x16B46, 0x1BC9C, 0x1BC9D, + 0x1CF50, + 0x1CFC4, 0x1D000, 0x1D0F6, 0x1D100, @@ -367838,7 +377362,7 @@ static const UV UNI_S_invlist[] = { /* for EBCDIC 037 */ 0x1D18C, 0x1D1AA, 0x1D1AE, - 0x1D1E9, + 0x1D1EB, 0x1D200, 0x1D242, 0x1D245, @@ -367913,7 +377437,7 @@ static const UV UNI_S_invlist[] = { /* for EBCDIC 037 */ 0x1F266, 0x1F300, 0x1F6D8, - 0x1F6E0, + 0x1F6DD, 0x1F6ED, 0x1F6F0, 0x1F6FD, @@ -367923,6 +377447,8 @@ static const UV UNI_S_invlist[] = { /* for EBCDIC 037 */ 0x1F7D9, 0x1F7E0, 0x1F7EC, + 0x1F7F0, + 0x1F7F1, 0x1F800, 0x1F80C, 0x1F810, @@ -367936,27 +377462,27 @@ static const UV UNI_S_invlist[] = { /* for EBCDIC 037 */ 0x1F8B0, 0x1F8B2, 0x1F900, - 0x1F979, - 0x1F97A, - 0x1F9CC, - 0x1F9CD, 0x1FA54, 0x1FA60, 0x1FA6E, 0x1FA70, 0x1FA75, 0x1FA78, - 0x1FA7B, + 0x1FA7D, 0x1FA80, 0x1FA87, 0x1FA90, - 0x1FAA9, + 0x1FAAD, 0x1FAB0, - 0x1FAB7, + 0x1FABB, 0x1FAC0, - 0x1FAC3, + 0x1FAC6, 0x1FAD0, - 0x1FAD7, + 0x1FADA, + 0x1FAE0, + 0x1FAE8, + 0x1FAF0, + 0x1FAF7, 0x1FB00, 0x1FB93, 0x1FB94, @@ -368068,7 +377594,7 @@ static const UV UNI_SB__AT_invlist[] = { /* for EBCDIC 037 */ # if 'A' == 65 /* ASCII/Latin1 */ static const UV UNI_SB__CL_invlist[] = { /* for ASCII/Latin1 */ - 89, /* Number of elements */ + 91, /* Number of elements */ 148565664, /* Version and data structure type */ 1, /* 0 if the list starts at 0; 1 if it starts at the element beyond 0 */ @@ -368129,6 +377655,8 @@ static const UV UNI_SB__CL_invlist[] = { /* for ASCII/Latin1 */ 0x2E2A, 0x2E42, 0x2E43, + 0x2E55, + 0x2E5D, 0x3008, 0x3012, 0x3014, @@ -368171,7 +377699,7 @@ static const UV UNI_SB__CL_invlist[] = { /* for ASCII/Latin1 */ && '$' == 91 && '@' == 124 && '`' == 121 && '\n' == 21 static const UV UNI_SB__CL_invlist[] = { /* for EBCDIC 1047 */ - 91, /* Number of elements */ + 93, /* Number of elements */ 148565664, /* Version and data structure type */ 1, /* 0 if the list starts at 0; 1 if it starts at the element beyond 0 */ @@ -368234,6 +377762,8 @@ static const UV UNI_SB__CL_invlist[] = { /* for EBCDIC 1047 */ 0x2E2A, 0x2E42, 0x2E43, + 0x2E55, + 0x2E5D, 0x3008, 0x3012, 0x3014, @@ -368276,7 +377806,7 @@ static const UV UNI_SB__CL_invlist[] = { /* for EBCDIC 1047 */ && '$' == 91 && '@' == 124 && '`' == 121 && '\n' == 37 static const UV UNI_SB__CL_invlist[] = { /* for EBCDIC 037 */ - 89, /* Number of elements */ + 91, /* Number of elements */ 148565664, /* Version and data structure type */ 1, /* 0 if the list starts at 0; 1 if it starts at the element beyond 0 */ @@ -368337,6 +377867,8 @@ static const UV UNI_SB__CL_invlist[] = { /* for EBCDIC 037 */ 0x2E2A, 0x2E42, 0x2E43, + 0x2E55, + 0x2E5D, 0x3008, 0x3012, 0x3014, @@ -368374,7 +377906,7 @@ static const UV UNI_SB__CL_invlist[] = { /* for EBCDIC 037 */ # endif /* EBCDIC 037 */ static const UV UNI_SB__EX_invlist[] = { /* for all charsets */ - 587, /* Number of elements */ + 605, /* Number of elements */ 148565664, /* Version and data structure type */ 1, /* 0 if the list starts at 0; 1 if it starts at the element beyond 0 */ @@ -368427,7 +377959,9 @@ static const UV UNI_SB__EX_invlist[] = { /* for all charsets */ 0x82E, 0x859, 0x85C, - 0x8D3, + 0x898, + 0x8A0, + 0x8CA, 0x8E2, 0x8E3, 0x904, @@ -368511,6 +378045,8 @@ static const UV UNI_SB__EX_invlist[] = { /* for all charsets */ 0xBD8, 0xC00, 0xC05, + 0xC3C, + 0xC3D, 0xC3E, 0xC45, 0xC46, @@ -368614,7 +378150,7 @@ static const UV UNI_SB__EX_invlist[] = { /* for all charsets */ 0x135D, 0x1360, 0x1712, - 0x1715, + 0x1716, 0x1732, 0x1735, 0x1752, @@ -368627,6 +378163,8 @@ static const UV UNI_SB__EX_invlist[] = { /* for all charsets */ 0x17DE, 0x180B, 0x180E, + 0x180F, + 0x1810, 0x1885, 0x1887, 0x18A9, @@ -368644,7 +378182,7 @@ static const UV UNI_SB__EX_invlist[] = { /* for all charsets */ 0x1A7F, 0x1A80, 0x1AB0, - 0x1AC1, + 0x1ACF, 0x1B00, 0x1B05, 0x1B34, @@ -368670,8 +378208,6 @@ static const UV UNI_SB__EX_invlist[] = { /* for all charsets */ 0x1CF7, 0x1CFA, 0x1DC0, - 0x1DFA, - 0x1DFB, 0x1E00, 0x200C, 0x200E, @@ -368781,14 +378317,22 @@ static const UV UNI_SB__EX_invlist[] = { /* for all charsets */ 0x10EAD, 0x10F46, 0x10F51, + 0x10F82, + 0x10F86, 0x11000, 0x11003, 0x11038, 0x11047, + 0x11070, + 0x11071, + 0x11073, + 0x11075, 0x1107F, 0x11083, 0x110B0, 0x110BB, + 0x110C2, + 0x110C3, 0x11100, 0x11103, 0x11127, @@ -368919,6 +378463,10 @@ static const UV UNI_SB__EX_invlist[] = { /* for all charsets */ 0x16FF2, 0x1BC9D, 0x1BC9F, + 0x1CF00, + 0x1CF2E, + 0x1CF30, + 0x1CF47, 0x1D165, 0x1D16A, 0x1D16D, @@ -368955,6 +378503,8 @@ static const UV UNI_SB__EX_invlist[] = { /* for all charsets */ 0x1E02B, 0x1E130, 0x1E137, + 0x1E2AE, + 0x1E2AF, 0x1E2EC, 0x1E2F0, 0x1E8D0, @@ -368970,7 +378520,7 @@ static const UV UNI_SB__EX_invlist[] = { /* for all charsets */ # if 'A' == 65 /* ASCII/Latin1 */ static const UV UNI_SB__FO_invlist[] = { /* for ASCII/Latin1 */ - 41, /* Number of elements */ + 43, /* Number of elements */ 148565664, /* Version and data structure type */ 1, /* 0 if the list starts at 0; 1 if it starts at the element beyond 0 */ @@ -368985,6 +378535,8 @@ static const UV UNI_SB__FO_invlist[] = { /* for ASCII/Latin1 */ 0x6DE, 0x70F, 0x710, + 0x890, + 0x892, 0x8E2, 0x8E3, 0x180E, @@ -369025,7 +378577,7 @@ static const UV UNI_SB__FO_invlist[] = { /* for ASCII/Latin1 */ && '$' == 91 && '@' == 124 && '`' == 121 && '\n' == 21 static const UV UNI_SB__FO_invlist[] = { /* for EBCDIC 1047 */ - 41, /* Number of elements */ + 43, /* Number of elements */ 148565664, /* Version and data structure type */ 1, /* 0 if the list starts at 0; 1 if it starts at the element beyond 0 */ @@ -369040,6 +378592,8 @@ static const UV UNI_SB__FO_invlist[] = { /* for EBCDIC 1047 */ 0x6DE, 0x70F, 0x710, + 0x890, + 0x892, 0x8E2, 0x8E3, 0x180E, @@ -369080,7 +378634,7 @@ static const UV UNI_SB__FO_invlist[] = { /* for EBCDIC 1047 */ && '$' == 91 && '@' == 124 && '`' == 121 && '\n' == 37 static const UV UNI_SB__FO_invlist[] = { /* for EBCDIC 037 */ - 41, /* Number of elements */ + 43, /* Number of elements */ 148565664, /* Version and data structure type */ 1, /* 0 if the list starts at 0; 1 if it starts at the element beyond 0 */ @@ -369095,6 +378649,8 @@ static const UV UNI_SB__FO_invlist[] = { /* for EBCDIC 037 */ 0x6DE, 0x70F, 0x710, + 0x890, + 0x892, 0x8E2, 0x8E3, 0x180E, @@ -369130,7 +378686,7 @@ static const UV UNI_SB__FO_invlist[] = { /* for EBCDIC 037 */ # endif /* EBCDIC 037 */ static const UV UNI_SB__LE_invlist[] = { /* for all charsets */ - 1039, /* Number of elements */ + 1073, /* Number of elements */ 148565664, /* Version and data structure type */ 1, /* 0 if the list starts at 0; 1 if it starts at the element beyond 0 */ @@ -369199,10 +378755,12 @@ static const UV UNI_SB__LE_invlist[] = { /* for all charsets */ 0x859, 0x860, 0x86B, + 0x870, + 0x888, + 0x889, + 0x88F, 0x8A0, - 0x8B5, - 0x8B6, - 0x8C8, + 0x8CA, 0x904, 0x93A, 0x93D, @@ -369331,6 +378889,8 @@ static const UV UNI_SB__LE_invlist[] = { /* for all charsets */ 0xC3E, 0xC58, 0xC5B, + 0xC5D, + 0xC5E, 0xC60, 0xC62, 0xC80, @@ -369347,7 +378907,7 @@ static const UV UNI_SB__LE_invlist[] = { /* for all charsets */ 0xCBA, 0xCBD, 0xCBE, - 0xCDE, + 0xCDD, 0xCDF, 0xCE0, 0xCE2, @@ -369480,10 +379040,8 @@ static const UV UNI_SB__LE_invlist[] = { /* for all charsets */ 0x16EE, 0x16F9, 0x1700, - 0x170D, - 0x170E, 0x1712, - 0x1720, + 0x171F, 0x1732, 0x1740, 0x1752, @@ -369526,7 +379084,7 @@ static const UV UNI_SB__LE_invlist[] = { /* for all charsets */ 0x1B05, 0x1B34, 0x1B45, - 0x1B4C, + 0x1B4D, 0x1B83, 0x1BA1, 0x1BAE, @@ -369608,8 +379166,6 @@ static const UV UNI_SB__LE_invlist[] = { /* for all charsets */ 0x3400, 0x4DC0, 0x4E00, - 0x9FFD, - 0xA000, 0xA48D, 0xA4D0, 0xA4FE, @@ -369631,6 +379187,8 @@ static const UV UNI_SB__LE_invlist[] = { /* for all charsets */ 0xA789, 0xA78F, 0xA790, + 0xA7F2, + 0xA7F5, 0xA7F7, 0xA7F8, 0xA7FB, @@ -369805,6 +379363,8 @@ static const UV UNI_SB__LE_invlist[] = { /* for all charsets */ 0x10756, 0x10760, 0x10768, + 0x10781, + 0x10783, 0x10800, 0x10806, 0x10808, @@ -369871,12 +379431,18 @@ static const UV UNI_SB__LE_invlist[] = { /* for all charsets */ 0x10F28, 0x10F30, 0x10F46, + 0x10F70, + 0x10F82, 0x10FB0, 0x10FC5, 0x10FE0, 0x10FF7, 0x11003, 0x11038, + 0x11071, + 0x11073, + 0x11075, + 0x11076, 0x11083, 0x110B0, 0x110D0, @@ -369959,6 +379525,8 @@ static const UV UNI_SB__LE_invlist[] = { /* for all charsets */ 0x116B9, 0x11700, 0x1171B, + 0x11740, + 0x11747, 0x11800, 0x1182C, 0x118FF, @@ -369995,7 +379563,7 @@ static const UV UNI_SB__LE_invlist[] = { /* for all charsets */ 0x11A8A, 0x11A9D, 0x11A9E, - 0x11AC0, + 0x11AB0, 0x11AF9, 0x11C00, 0x11C09, @@ -370031,6 +379599,8 @@ static const UV UNI_SB__LE_invlist[] = { /* for all charsets */ 0x1246F, 0x12480, 0x12544, + 0x12F90, + 0x12FF1, 0x13000, 0x1342F, 0x14400, @@ -370039,6 +379609,8 @@ static const UV UNI_SB__LE_invlist[] = { /* for all charsets */ 0x16A39, 0x16A40, 0x16A5F, + 0x16A70, + 0x16ABF, 0x16AD0, 0x16AEE, 0x16B00, @@ -370065,8 +379637,14 @@ static const UV UNI_SB__LE_invlist[] = { /* for all charsets */ 0x18CD6, 0x18D00, 0x18D09, + 0x1AFF0, + 0x1AFF4, + 0x1AFF5, + 0x1AFFC, + 0x1AFFD, + 0x1AFFF, 0x1B000, - 0x1B11F, + 0x1B123, 0x1B150, 0x1B153, 0x1B164, @@ -370081,14 +379659,26 @@ static const UV UNI_SB__LE_invlist[] = { /* for all charsets */ 0x1BC89, 0x1BC90, 0x1BC9A, + 0x1DF0A, + 0x1DF0B, 0x1E100, 0x1E12D, 0x1E137, 0x1E13E, 0x1E14E, 0x1E14F, + 0x1E290, + 0x1E2AE, 0x1E2C0, 0x1E2EC, + 0x1E7E0, + 0x1E7E7, + 0x1E7E8, + 0x1E7EC, + 0x1E7ED, + 0x1E7EF, + 0x1E7F0, + 0x1E7FF, 0x1E800, 0x1E8C5, 0x1E94B, @@ -370160,9 +379750,9 @@ static const UV UNI_SB__LE_invlist[] = { /* for all charsets */ 0x1EEAB, 0x1EEBC, 0x20000, - 0x2A6DE, + 0x2A6E0, 0x2A700, - 0x2B735, + 0x2B739, 0x2B740, 0x2B81E, 0x2B820, @@ -370178,7 +379768,7 @@ static const UV UNI_SB__LE_invlist[] = { /* for all charsets */ # if 'A' == 65 /* ASCII/Latin1 */ static const UV UNI_SB__LO_invlist[] = { /* for ASCII/Latin1 */ - 1299, /* Number of elements */ + 1331, /* Number of elements */ 148565664, /* Version and data structure type */ 1, /* 0 if the list starts at 0; 1 if it starts at the element beyond 0 */ @@ -371056,7 +380646,7 @@ static const UV UNI_SB__LO_invlist[] = { /* for ASCII/Latin1 */ 0x24D0, 0x24EA, 0x2C30, - 0x2C5F, + 0x2C60, 0x2C61, 0x2C62, 0x2C65, @@ -371391,12 +380981,24 @@ static const UV UNI_SB__LO_invlist[] = { /* for ASCII/Latin1 */ 0xA7BE, 0xA7BF, 0xA7C0, + 0xA7C1, + 0xA7C2, 0xA7C3, 0xA7C4, 0xA7C8, 0xA7C9, 0xA7CA, 0xA7CB, + 0xA7D1, + 0xA7D2, + 0xA7D3, + 0xA7D4, + 0xA7D5, + 0xA7D6, + 0xA7D7, + 0xA7D8, + 0xA7D9, + 0xA7DA, 0xA7F6, 0xA7F7, 0xA7F8, @@ -371417,6 +381019,22 @@ static const UV UNI_SB__LO_invlist[] = { /* for ASCII/Latin1 */ 0x10450, 0x104D8, 0x104FC, + 0x10597, + 0x105A2, + 0x105A3, + 0x105B2, + 0x105B3, + 0x105BA, + 0x105BB, + 0x105BD, + 0x10780, + 0x10781, + 0x10783, + 0x10786, + 0x10787, + 0x107B1, + 0x107B2, + 0x107BB, 0x10CC0, 0x10CF3, 0x118C0, @@ -371479,6 +381097,10 @@ static const UV UNI_SB__LO_invlist[] = { /* for ASCII/Latin1 */ 0x1D7CA, 0x1D7CB, 0x1D7CC, + 0x1DF00, + 0x1DF0A, + 0x1DF0B, + 0x1DF1F, 0x1E922, 0x1E944 }; @@ -371491,7 +381113,7 @@ static const UV UNI_SB__LO_invlist[] = { /* for ASCII/Latin1 */ && '$' == 91 && '@' == 124 && '`' == 121 && '\n' == 21 static const UV UNI_SB__LO_invlist[] = { /* for EBCDIC 1047 */ - 1307, /* Number of elements */ + 1339, /* Number of elements */ 148565664, /* Version and data structure type */ 1, /* 0 if the list starts at 0; 1 if it starts at the element beyond 0 */ @@ -372377,7 +381999,7 @@ static const UV UNI_SB__LO_invlist[] = { /* for EBCDIC 1047 */ 0x24D0, 0x24EA, 0x2C30, - 0x2C5F, + 0x2C60, 0x2C61, 0x2C62, 0x2C65, @@ -372712,12 +382334,24 @@ static const UV UNI_SB__LO_invlist[] = { /* for EBCDIC 1047 */ 0xA7BE, 0xA7BF, 0xA7C0, + 0xA7C1, + 0xA7C2, 0xA7C3, 0xA7C4, 0xA7C8, 0xA7C9, 0xA7CA, 0xA7CB, + 0xA7D1, + 0xA7D2, + 0xA7D3, + 0xA7D4, + 0xA7D5, + 0xA7D6, + 0xA7D7, + 0xA7D8, + 0xA7D9, + 0xA7DA, 0xA7F6, 0xA7F7, 0xA7F8, @@ -372738,6 +382372,22 @@ static const UV UNI_SB__LO_invlist[] = { /* for EBCDIC 1047 */ 0x10450, 0x104D8, 0x104FC, + 0x10597, + 0x105A2, + 0x105A3, + 0x105B2, + 0x105B3, + 0x105BA, + 0x105BB, + 0x105BD, + 0x10780, + 0x10781, + 0x10783, + 0x10786, + 0x10787, + 0x107B1, + 0x107B2, + 0x107BB, 0x10CC0, 0x10CF3, 0x118C0, @@ -372800,6 +382450,10 @@ static const UV UNI_SB__LO_invlist[] = { /* for EBCDIC 1047 */ 0x1D7CA, 0x1D7CB, 0x1D7CC, + 0x1DF00, + 0x1DF0A, + 0x1DF0B, + 0x1DF1F, 0x1E922, 0x1E944 }; @@ -372812,7 +382466,7 @@ static const UV UNI_SB__LO_invlist[] = { /* for EBCDIC 1047 */ && '$' == 91 && '@' == 124 && '`' == 121 && '\n' == 37 static const UV UNI_SB__LO_invlist[] = { /* for EBCDIC 037 */ - 1307, /* Number of elements */ + 1339, /* Number of elements */ 148565664, /* Version and data structure type */ 1, /* 0 if the list starts at 0; 1 if it starts at the element beyond 0 */ @@ -373698,7 +383352,7 @@ static const UV UNI_SB__LO_invlist[] = { /* for EBCDIC 037 */ 0x24D0, 0x24EA, 0x2C30, - 0x2C5F, + 0x2C60, 0x2C61, 0x2C62, 0x2C65, @@ -374033,12 +383687,24 @@ static const UV UNI_SB__LO_invlist[] = { /* for EBCDIC 037 */ 0xA7BE, 0xA7BF, 0xA7C0, + 0xA7C1, + 0xA7C2, 0xA7C3, 0xA7C4, 0xA7C8, 0xA7C9, 0xA7CA, 0xA7CB, + 0xA7D1, + 0xA7D2, + 0xA7D3, + 0xA7D4, + 0xA7D5, + 0xA7D6, + 0xA7D7, + 0xA7D8, + 0xA7D9, + 0xA7DA, 0xA7F6, 0xA7F7, 0xA7F8, @@ -374059,6 +383725,22 @@ static const UV UNI_SB__LO_invlist[] = { /* for EBCDIC 037 */ 0x10450, 0x104D8, 0x104FC, + 0x10597, + 0x105A2, + 0x105A3, + 0x105B2, + 0x105B3, + 0x105BA, + 0x105BB, + 0x105BD, + 0x10780, + 0x10781, + 0x10783, + 0x10786, + 0x10787, + 0x107B1, + 0x107B2, + 0x107BB, 0x10CC0, 0x10CF3, 0x118C0, @@ -374121,6 +383803,10 @@ static const UV UNI_SB__LO_invlist[] = { /* for EBCDIC 037 */ 0x1D7CA, 0x1D7CB, 0x1D7CC, + 0x1DF00, + 0x1DF0A, + 0x1DF0B, + 0x1DF1F, 0x1E922, 0x1E944 }; @@ -374130,7 +383816,7 @@ static const UV UNI_SB__LO_invlist[] = { /* for EBCDIC 037 */ # if 'A' == 65 /* ASCII/Latin1 */ static const UV UNI_SB__NU_invlist[] = { /* for ASCII/Latin1 */ - 125, /* Number of elements */ + 127, /* Number of elements */ 148565664, /* Version and data structure type */ 1, /* 0 if the list starts at 0; 1 if it starts at the element beyond 0 */ @@ -374247,6 +383933,8 @@ static const UV UNI_SB__NU_invlist[] = { /* for ASCII/Latin1 */ 0x11DAA, 0x16A60, 0x16A6A, + 0x16AC0, + 0x16ACA, 0x16B50, 0x16B5A, 0x1D7CE, @@ -374269,7 +383957,7 @@ static const UV UNI_SB__NU_invlist[] = { /* for ASCII/Latin1 */ && '$' == 91 && '@' == 124 && '`' == 121 && '\n' == 21 static const UV UNI_SB__NU_invlist[] = { /* for EBCDIC 1047 */ - 125, /* Number of elements */ + 127, /* Number of elements */ 148565664, /* Version and data structure type */ 1, /* 0 if the list starts at 0; 1 if it starts at the element beyond 0 */ @@ -374386,6 +384074,8 @@ static const UV UNI_SB__NU_invlist[] = { /* for EBCDIC 1047 */ 0x11DAA, 0x16A60, 0x16A6A, + 0x16AC0, + 0x16ACA, 0x16B50, 0x16B5A, 0x1D7CE, @@ -374408,7 +384098,7 @@ static const UV UNI_SB__NU_invlist[] = { /* for EBCDIC 1047 */ && '$' == 91 && '@' == 124 && '`' == 121 && '\n' == 37 static const UV UNI_SB__NU_invlist[] = { /* for EBCDIC 037 */ - 125, /* Number of elements */ + 127, /* Number of elements */ 148565664, /* Version and data structure type */ 1, /* 0 if the list starts at 0; 1 if it starts at the element beyond 0 */ @@ -374525,6 +384215,8 @@ static const UV UNI_SB__NU_invlist[] = { /* for EBCDIC 037 */ 0x11DAA, 0x16A60, 0x16A6A, + 0x16AC0, + 0x16ACA, 0x16B50, 0x16B5A, 0x1D7CE, @@ -374850,7 +384542,7 @@ static const UV UNI_SB__SP_invlist[] = { /* for EBCDIC 037 */ # if 'A' == 65 /* ASCII/Latin1 */ static const UV UNI_SB__ST_invlist[] = { /* for ASCII/Latin1 */ - 147, /* Number of elements */ + 153, /* Number of elements */ 148565664, /* Version and data structure type */ 1, /* 0 if the list starts at 0; 1 if it starts at the element beyond 0 */ @@ -374861,7 +384553,7 @@ static const UV UNI_SB__ST_invlist[] = { /* for ASCII/Latin1 */ 0x40, 0x589, 0x58A, - 0x61E, + 0x61D, 0x620, 0x6D4, 0x6D5, @@ -374899,6 +384591,8 @@ static const UV UNI_SB__ST_invlist[] = { /* for ASCII/Latin1 */ 0x1B5C, 0x1B5E, 0x1B60, + 0x1B7D, + 0x1B7F, 0x1C3B, 0x1C3D, 0x1C7E, @@ -374911,6 +384605,8 @@ static const UV UNI_SB__ST_invlist[] = { /* for ASCII/Latin1 */ 0x2E2F, 0x2E3C, 0x2E3D, + 0x2E53, + 0x2E55, 0x3002, 0x3003, 0xA4FF, @@ -374947,6 +384643,8 @@ static const UV UNI_SB__ST_invlist[] = { /* for ASCII/Latin1 */ 0x10A58, 0x10F55, 0x10F5A, + 0x10F86, + 0x10F8A, 0x11047, 0x11049, 0x110BE, @@ -375011,7 +384709,7 @@ static const UV UNI_SB__ST_invlist[] = { /* for ASCII/Latin1 */ && '$' == 91 && '@' == 124 && '`' == 121 && '\n' == 21 static const UV UNI_SB__ST_invlist[] = { /* for EBCDIC 1047 */ - 147, /* Number of elements */ + 153, /* Number of elements */ 148565664, /* Version and data structure type */ 1, /* 0 if the list starts at 0; 1 if it starts at the element beyond 0 */ @@ -375022,7 +384720,7 @@ static const UV UNI_SB__ST_invlist[] = { /* for EBCDIC 1047 */ 0x70, 0x589, 0x58A, - 0x61E, + 0x61D, 0x620, 0x6D4, 0x6D5, @@ -375060,6 +384758,8 @@ static const UV UNI_SB__ST_invlist[] = { /* for EBCDIC 1047 */ 0x1B5C, 0x1B5E, 0x1B60, + 0x1B7D, + 0x1B7F, 0x1C3B, 0x1C3D, 0x1C7E, @@ -375072,6 +384772,8 @@ static const UV UNI_SB__ST_invlist[] = { /* for EBCDIC 1047 */ 0x2E2F, 0x2E3C, 0x2E3D, + 0x2E53, + 0x2E55, 0x3002, 0x3003, 0xA4FF, @@ -375108,6 +384810,8 @@ static const UV UNI_SB__ST_invlist[] = { /* for EBCDIC 1047 */ 0x10A58, 0x10F55, 0x10F5A, + 0x10F86, + 0x10F8A, 0x11047, 0x11049, 0x110BE, @@ -375172,7 +384876,7 @@ static const UV UNI_SB__ST_invlist[] = { /* for EBCDIC 1047 */ && '$' == 91 && '@' == 124 && '`' == 121 && '\n' == 37 static const UV UNI_SB__ST_invlist[] = { /* for EBCDIC 037 */ - 147, /* Number of elements */ + 153, /* Number of elements */ 148565664, /* Version and data structure type */ 1, /* 0 if the list starts at 0; 1 if it starts at the element beyond 0 */ @@ -375183,7 +384887,7 @@ static const UV UNI_SB__ST_invlist[] = { /* for EBCDIC 037 */ 0x70, 0x589, 0x58A, - 0x61E, + 0x61D, 0x620, 0x6D4, 0x6D5, @@ -375221,6 +384925,8 @@ static const UV UNI_SB__ST_invlist[] = { /* for EBCDIC 037 */ 0x1B5C, 0x1B5E, 0x1B60, + 0x1B7D, + 0x1B7F, 0x1C3B, 0x1C3D, 0x1C7E, @@ -375233,6 +384939,8 @@ static const UV UNI_SB__ST_invlist[] = { /* for EBCDIC 037 */ 0x2E2F, 0x2E3C, 0x2E3D, + 0x2E53, + 0x2E55, 0x3002, 0x3003, 0xA4FF, @@ -375269,6 +384977,8 @@ static const UV UNI_SB__ST_invlist[] = { /* for EBCDIC 037 */ 0x10A58, 0x10F55, 0x10F5A, + 0x10F86, + 0x10F8A, 0x11047, 0x11049, 0x110BE, @@ -375330,7 +385040,7 @@ static const UV UNI_SB__ST_invlist[] = { /* for EBCDIC 037 */ # if 'A' == 65 /* ASCII/Latin1 */ static const UV UNI_SB__UP_invlist[] = { /* for ASCII/Latin1 */ - 1289, /* Number of elements */ + 1305, /* Number of elements */ 148565664, /* Version and data structure type */ 1, /* 0 if the list starts at 0; 1 if it starts at the element beyond 0 */ @@ -376204,7 +385914,7 @@ static const UV UNI_SB__UP_invlist[] = { /* for ASCII/Latin1 */ 0x24B6, 0x24D0, 0x2C00, - 0x2C2F, + 0x2C30, 0x2C60, 0x2C61, 0x2C62, @@ -376533,12 +386243,20 @@ static const UV UNI_SB__UP_invlist[] = { /* for ASCII/Latin1 */ 0xA7BD, 0xA7BE, 0xA7BF, + 0xA7C0, + 0xA7C1, 0xA7C2, 0xA7C3, 0xA7C4, 0xA7C8, 0xA7C9, 0xA7CA, + 0xA7D0, + 0xA7D1, + 0xA7D6, + 0xA7D7, + 0xA7D8, + 0xA7D9, 0xA7F5, 0xA7F6, 0xFF21, @@ -376547,6 +386265,14 @@ static const UV UNI_SB__UP_invlist[] = { /* for ASCII/Latin1 */ 0x10428, 0x104B0, 0x104D4, + 0x10570, + 0x1057B, + 0x1057C, + 0x1058B, + 0x1058C, + 0x10593, + 0x10594, + 0x10596, 0x10C80, 0x10CB3, 0x118A0, @@ -376633,7 +386359,7 @@ static const UV UNI_SB__UP_invlist[] = { /* for ASCII/Latin1 */ && '$' == 91 && '@' == 124 && '`' == 121 && '\n' == 21 static const UV UNI_SB__UP_invlist[] = { /* for EBCDIC 1047 */ - 1307, /* Number of elements */ + 1323, /* Number of elements */ 148565664, /* Version and data structure type */ 1, /* 0 if the list starts at 0; 1 if it starts at the element beyond 0 */ @@ -377525,7 +387251,7 @@ static const UV UNI_SB__UP_invlist[] = { /* for EBCDIC 1047 */ 0x24B6, 0x24D0, 0x2C00, - 0x2C2F, + 0x2C30, 0x2C60, 0x2C61, 0x2C62, @@ -377854,12 +387580,20 @@ static const UV UNI_SB__UP_invlist[] = { /* for EBCDIC 1047 */ 0xA7BD, 0xA7BE, 0xA7BF, + 0xA7C0, + 0xA7C1, 0xA7C2, 0xA7C3, 0xA7C4, 0xA7C8, 0xA7C9, 0xA7CA, + 0xA7D0, + 0xA7D1, + 0xA7D6, + 0xA7D7, + 0xA7D8, + 0xA7D9, 0xA7F5, 0xA7F6, 0xFF21, @@ -377868,6 +387602,14 @@ static const UV UNI_SB__UP_invlist[] = { /* for EBCDIC 1047 */ 0x10428, 0x104B0, 0x104D4, + 0x10570, + 0x1057B, + 0x1057C, + 0x1058B, + 0x1058C, + 0x10593, + 0x10594, + 0x10596, 0x10C80, 0x10CB3, 0x118A0, @@ -377954,7 +387696,7 @@ static const UV UNI_SB__UP_invlist[] = { /* for EBCDIC 1047 */ && '$' == 91 && '@' == 124 && '`' == 121 && '\n' == 37 static const UV UNI_SB__UP_invlist[] = { /* for EBCDIC 037 */ - 1303, /* Number of elements */ + 1319, /* Number of elements */ 148565664, /* Version and data structure type */ 1, /* 0 if the list starts at 0; 1 if it starts at the element beyond 0 */ @@ -378842,7 +388584,7 @@ static const UV UNI_SB__UP_invlist[] = { /* for EBCDIC 037 */ 0x24B6, 0x24D0, 0x2C00, - 0x2C2F, + 0x2C30, 0x2C60, 0x2C61, 0x2C62, @@ -379171,12 +388913,20 @@ static const UV UNI_SB__UP_invlist[] = { /* for EBCDIC 037 */ 0xA7BD, 0xA7BE, 0xA7BF, + 0xA7C0, + 0xA7C1, 0xA7C2, 0xA7C3, 0xA7C4, 0xA7C8, 0xA7C9, 0xA7CA, + 0xA7D0, + 0xA7D1, + 0xA7D6, + 0xA7D7, + 0xA7D8, + 0xA7D9, 0xA7F5, 0xA7F6, 0xFF21, @@ -379185,6 +388935,14 @@ static const UV UNI_SB__UP_invlist[] = { /* for EBCDIC 037 */ 0x10428, 0x104B0, 0x104D4, + 0x10570, + 0x1057B, + 0x1057C, + 0x1058B, + 0x1058C, + 0x10593, + 0x10594, + 0x10596, 0x10C80, 0x10CB3, 0x118A0, @@ -379268,7 +389026,7 @@ static const UV UNI_SB__UP_invlist[] = { /* for EBCDIC 037 */ # if 'A' == 65 /* ASCII/Latin1 */ static const UV UNI_SB__XX_invlist[] = { /* for ASCII/Latin1 */ - 1611, /* Number of elements */ + 1661, /* Number of elements */ 148565664, /* Version and data structure type */ 0, /* 0 if the list starts at 0; 1 if it starts at the element beyond 0 */ @@ -379370,8 +389128,6 @@ static const UV UNI_SB__XX_invlist[] = { /* for ASCII/Latin1 */ 0x610, 0x61B, 0x61C, - 0x61D, - 0x61E, 0x66A, 0x66B, 0x66D, @@ -379405,11 +389161,13 @@ static const UV UNI_SB__XX_invlist[] = { /* for ASCII/Latin1 */ 0x85C, 0x860, 0x86B, - 0x8A0, - 0x8B5, - 0x8B6, - 0x8C8, - 0x8D3, + 0x870, + 0x888, + 0x889, + 0x88F, + 0x890, + 0x892, + 0x898, 0x970, 0x971, 0x984, @@ -379573,7 +389331,7 @@ static const UV UNI_SB__XX_invlist[] = { /* for ASCII/Latin1 */ 0xC29, 0xC2A, 0xC3A, - 0xC3D, + 0xC3C, 0xC45, 0xC46, 0xC49, @@ -379583,6 +389341,8 @@ static const UV UNI_SB__XX_invlist[] = { /* for ASCII/Latin1 */ 0xC57, 0xC58, 0xC5B, + 0xC5D, + 0xC5E, 0xC60, 0xC64, 0xC66, @@ -379607,7 +389367,7 @@ static const UV UNI_SB__XX_invlist[] = { /* for ASCII/Latin1 */ 0xCCE, 0xCD5, 0xCD7, - 0xCDE, + 0xCDD, 0xCDF, 0xCE0, 0xCE4, @@ -379772,10 +389532,8 @@ static const UV UNI_SB__XX_invlist[] = { /* for ASCII/Latin1 */ 0x16EE, 0x16F9, 0x1700, - 0x170D, - 0x170E, - 0x1715, - 0x1720, + 0x1716, + 0x171F, 0x1737, 0x1740, 0x1754, @@ -379798,8 +389556,6 @@ static const UV UNI_SB__XX_invlist[] = { /* for ASCII/Latin1 */ 0x1808, 0x180A, 0x180B, - 0x180F, - 0x1810, 0x181A, 0x1820, 0x1879, @@ -379836,15 +389592,17 @@ static const UV UNI_SB__XX_invlist[] = { /* for ASCII/Latin1 */ 0x1AA7, 0x1AAC, 0x1AB0, - 0x1AC1, + 0x1ACF, 0x1B00, - 0x1B4C, + 0x1B4D, 0x1B50, 0x1B5C, 0x1B5E, 0x1B60, 0x1B6B, 0x1B74, + 0x1B7D, + 0x1B7F, 0x1B80, 0x1BF4, 0x1C00, @@ -379864,8 +389622,6 @@ static const UV UNI_SB__XX_invlist[] = { /* for ASCII/Latin1 */ 0x1CD4, 0x1CFB, 0x1D00, - 0x1DFA, - 0x1DFB, 0x1F16, 0x1F18, 0x1F1E, @@ -379982,10 +389738,6 @@ static const UV UNI_SB__XX_invlist[] = { /* for ASCII/Latin1 */ 0x29FC, 0x29FE, 0x2C00, - 0x2C2F, - 0x2C30, - 0x2C5F, - 0x2C60, 0x2CE5, 0x2CEB, 0x2CF4, @@ -380029,6 +389781,8 @@ static const UV UNI_SB__XX_invlist[] = { /* for ASCII/Latin1 */ 0x2E3D, 0x2E42, 0x2E43, + 0x2E53, + 0x2E5D, 0x3000, 0x3003, 0x3005, @@ -380064,8 +389818,6 @@ static const UV UNI_SB__XX_invlist[] = { /* for ASCII/Latin1 */ 0x3400, 0x4DC0, 0x4E00, - 0x9FFD, - 0xA000, 0xA48D, 0xA4D0, 0xA4FE, @@ -380088,10 +389840,14 @@ static const UV UNI_SB__XX_invlist[] = { /* for ASCII/Latin1 */ 0xA722, 0xA789, 0xA78B, - 0xA7C0, - 0xA7C2, 0xA7CB, - 0xA7F5, + 0xA7D0, + 0xA7D2, + 0xA7D3, + 0xA7D4, + 0xA7D5, + 0xA7DA, + 0xA7F2, 0xA828, 0xA82C, 0xA82D, @@ -380297,12 +390053,34 @@ static const UV UNI_SB__XX_invlist[] = { /* for ASCII/Latin1 */ 0x10528, 0x10530, 0x10564, + 0x10570, + 0x1057B, + 0x1057C, + 0x1058B, + 0x1058C, + 0x10593, + 0x10594, + 0x10596, + 0x10597, + 0x105A2, + 0x105A3, + 0x105B2, + 0x105B3, + 0x105BA, + 0x105BB, + 0x105BD, 0x10600, 0x10737, 0x10740, 0x10756, 0x10760, 0x10768, + 0x10780, + 0x10786, + 0x10787, + 0x107B1, + 0x107B2, + 0x107BB, 0x10800, 0x10806, 0x10808, @@ -380387,6 +390165,8 @@ static const UV UNI_SB__XX_invlist[] = { /* for ASCII/Latin1 */ 0x10F51, 0x10F55, 0x10F5A, + 0x10F70, + 0x10F8A, 0x10FB0, 0x10FC5, 0x10FE0, @@ -380394,11 +390174,11 @@ static const UV UNI_SB__XX_invlist[] = { /* for ASCII/Latin1 */ 0x11000, 0x11049, 0x11066, - 0x11070, + 0x11076, 0x1107F, 0x110BB, 0x110BD, - 0x110C2, + 0x110C3, 0x110CD, 0x110CE, 0x110D0, @@ -380513,6 +390293,8 @@ static const UV UNI_SB__XX_invlist[] = { /* for ASCII/Latin1 */ 0x1173A, 0x1173C, 0x1173F, + 0x11740, + 0x11747, 0x11800, 0x1183B, 0x118A0, @@ -380553,7 +390335,7 @@ static const UV UNI_SB__XX_invlist[] = { /* for ASCII/Latin1 */ 0x11A9A, 0x11A9B, 0x11A9E, - 0x11AC0, + 0x11AB0, 0x11AF9, 0x11C00, 0x11C09, @@ -380605,6 +390387,8 @@ static const UV UNI_SB__XX_invlist[] = { /* for ASCII/Latin1 */ 0x1246F, 0x12480, 0x12544, + 0x12F90, + 0x12FF1, 0x13000, 0x1342F, 0x13430, @@ -380618,7 +390402,9 @@ static const UV UNI_SB__XX_invlist[] = { /* for ASCII/Latin1 */ 0x16A60, 0x16A6A, 0x16A6E, - 0x16A70, + 0x16ABF, + 0x16AC0, + 0x16ACA, 0x16AD0, 0x16AEE, 0x16AF0, @@ -380655,8 +390441,14 @@ static const UV UNI_SB__XX_invlist[] = { /* for ASCII/Latin1 */ 0x18CD6, 0x18D00, 0x18D09, + 0x1AFF0, + 0x1AFF4, + 0x1AFF5, + 0x1AFFC, + 0x1AFFD, + 0x1AFFF, 0x1B000, - 0x1B11F, + 0x1B123, 0x1B150, 0x1B153, 0x1B164, @@ -380673,6 +390465,10 @@ static const UV UNI_SB__XX_invlist[] = { /* for ASCII/Latin1 */ 0x1BC9A, 0x1BC9D, 0x1BCA4, + 0x1CF00, + 0x1CF2E, + 0x1CF30, + 0x1CF47, 0x1D165, 0x1D16A, 0x1D16D, @@ -380759,6 +390555,8 @@ static const UV UNI_SB__XX_invlist[] = { /* for ASCII/Latin1 */ 0x1DAA0, 0x1DAA1, 0x1DAB0, + 0x1DF00, + 0x1DF1F, 0x1E000, 0x1E007, 0x1E008, @@ -380777,8 +390575,18 @@ static const UV UNI_SB__XX_invlist[] = { /* for ASCII/Latin1 */ 0x1E14A, 0x1E14E, 0x1E14F, + 0x1E290, + 0x1E2AF, 0x1E2C0, 0x1E2FA, + 0x1E7E0, + 0x1E7E7, + 0x1E7E8, + 0x1E7EC, + 0x1E7ED, + 0x1E7EF, + 0x1E7F0, + 0x1E7FF, 0x1E800, 0x1E8C5, 0x1E8D0, @@ -380864,9 +390672,9 @@ static const UV UNI_SB__XX_invlist[] = { /* for ASCII/Latin1 */ 0x1FBF0, 0x1FBFA, 0x20000, - 0x2A6DE, + 0x2A6E0, 0x2A700, - 0x2B735, + 0x2B739, 0x2B740, 0x2B81E, 0x2B820, @@ -380893,7 +390701,7 @@ static const UV UNI_SB__XX_invlist[] = { /* for ASCII/Latin1 */ && '$' == 91 && '@' == 124 && '`' == 121 && '\n' == 21 static const UV UNI_SB__XX_invlist[] = { /* for EBCDIC 1047 */ - 1631, /* Number of elements */ + 1681, /* Number of elements */ 148565664, /* Version and data structure type */ 0, /* 0 if the list starts at 0; 1 if it starts at the element beyond 0 */ @@ -381015,8 +390823,6 @@ static const UV UNI_SB__XX_invlist[] = { /* for EBCDIC 1047 */ 0x610, 0x61B, 0x61C, - 0x61D, - 0x61E, 0x66A, 0x66B, 0x66D, @@ -381050,11 +390856,13 @@ static const UV UNI_SB__XX_invlist[] = { /* for EBCDIC 1047 */ 0x85C, 0x860, 0x86B, - 0x8A0, - 0x8B5, - 0x8B6, - 0x8C8, - 0x8D3, + 0x870, + 0x888, + 0x889, + 0x88F, + 0x890, + 0x892, + 0x898, 0x970, 0x971, 0x984, @@ -381218,7 +391026,7 @@ static const UV UNI_SB__XX_invlist[] = { /* for EBCDIC 1047 */ 0xC29, 0xC2A, 0xC3A, - 0xC3D, + 0xC3C, 0xC45, 0xC46, 0xC49, @@ -381228,6 +391036,8 @@ static const UV UNI_SB__XX_invlist[] = { /* for EBCDIC 1047 */ 0xC57, 0xC58, 0xC5B, + 0xC5D, + 0xC5E, 0xC60, 0xC64, 0xC66, @@ -381252,7 +391062,7 @@ static const UV UNI_SB__XX_invlist[] = { /* for EBCDIC 1047 */ 0xCCE, 0xCD5, 0xCD7, - 0xCDE, + 0xCDD, 0xCDF, 0xCE0, 0xCE4, @@ -381417,10 +391227,8 @@ static const UV UNI_SB__XX_invlist[] = { /* for EBCDIC 1047 */ 0x16EE, 0x16F9, 0x1700, - 0x170D, - 0x170E, - 0x1715, - 0x1720, + 0x1716, + 0x171F, 0x1737, 0x1740, 0x1754, @@ -381443,8 +391251,6 @@ static const UV UNI_SB__XX_invlist[] = { /* for EBCDIC 1047 */ 0x1808, 0x180A, 0x180B, - 0x180F, - 0x1810, 0x181A, 0x1820, 0x1879, @@ -381481,15 +391287,17 @@ static const UV UNI_SB__XX_invlist[] = { /* for EBCDIC 1047 */ 0x1AA7, 0x1AAC, 0x1AB0, - 0x1AC1, + 0x1ACF, 0x1B00, - 0x1B4C, + 0x1B4D, 0x1B50, 0x1B5C, 0x1B5E, 0x1B60, 0x1B6B, 0x1B74, + 0x1B7D, + 0x1B7F, 0x1B80, 0x1BF4, 0x1C00, @@ -381509,8 +391317,6 @@ static const UV UNI_SB__XX_invlist[] = { /* for EBCDIC 1047 */ 0x1CD4, 0x1CFB, 0x1D00, - 0x1DFA, - 0x1DFB, 0x1F16, 0x1F18, 0x1F1E, @@ -381627,10 +391433,6 @@ static const UV UNI_SB__XX_invlist[] = { /* for EBCDIC 1047 */ 0x29FC, 0x29FE, 0x2C00, - 0x2C2F, - 0x2C30, - 0x2C5F, - 0x2C60, 0x2CE5, 0x2CEB, 0x2CF4, @@ -381674,6 +391476,8 @@ static const UV UNI_SB__XX_invlist[] = { /* for EBCDIC 1047 */ 0x2E3D, 0x2E42, 0x2E43, + 0x2E53, + 0x2E5D, 0x3000, 0x3003, 0x3005, @@ -381709,8 +391513,6 @@ static const UV UNI_SB__XX_invlist[] = { /* for EBCDIC 1047 */ 0x3400, 0x4DC0, 0x4E00, - 0x9FFD, - 0xA000, 0xA48D, 0xA4D0, 0xA4FE, @@ -381733,10 +391535,14 @@ static const UV UNI_SB__XX_invlist[] = { /* for EBCDIC 1047 */ 0xA722, 0xA789, 0xA78B, - 0xA7C0, - 0xA7C2, 0xA7CB, - 0xA7F5, + 0xA7D0, + 0xA7D2, + 0xA7D3, + 0xA7D4, + 0xA7D5, + 0xA7DA, + 0xA7F2, 0xA828, 0xA82C, 0xA82D, @@ -381942,12 +391748,34 @@ static const UV UNI_SB__XX_invlist[] = { /* for EBCDIC 1047 */ 0x10528, 0x10530, 0x10564, + 0x10570, + 0x1057B, + 0x1057C, + 0x1058B, + 0x1058C, + 0x10593, + 0x10594, + 0x10596, + 0x10597, + 0x105A2, + 0x105A3, + 0x105B2, + 0x105B3, + 0x105BA, + 0x105BB, + 0x105BD, 0x10600, 0x10737, 0x10740, 0x10756, 0x10760, 0x10768, + 0x10780, + 0x10786, + 0x10787, + 0x107B1, + 0x107B2, + 0x107BB, 0x10800, 0x10806, 0x10808, @@ -382032,6 +391860,8 @@ static const UV UNI_SB__XX_invlist[] = { /* for EBCDIC 1047 */ 0x10F51, 0x10F55, 0x10F5A, + 0x10F70, + 0x10F8A, 0x10FB0, 0x10FC5, 0x10FE0, @@ -382039,11 +391869,11 @@ static const UV UNI_SB__XX_invlist[] = { /* for EBCDIC 1047 */ 0x11000, 0x11049, 0x11066, - 0x11070, + 0x11076, 0x1107F, 0x110BB, 0x110BD, - 0x110C2, + 0x110C3, 0x110CD, 0x110CE, 0x110D0, @@ -382158,6 +391988,8 @@ static const UV UNI_SB__XX_invlist[] = { /* for EBCDIC 1047 */ 0x1173A, 0x1173C, 0x1173F, + 0x11740, + 0x11747, 0x11800, 0x1183B, 0x118A0, @@ -382198,7 +392030,7 @@ static const UV UNI_SB__XX_invlist[] = { /* for EBCDIC 1047 */ 0x11A9A, 0x11A9B, 0x11A9E, - 0x11AC0, + 0x11AB0, 0x11AF9, 0x11C00, 0x11C09, @@ -382250,6 +392082,8 @@ static const UV UNI_SB__XX_invlist[] = { /* for EBCDIC 1047 */ 0x1246F, 0x12480, 0x12544, + 0x12F90, + 0x12FF1, 0x13000, 0x1342F, 0x13430, @@ -382263,7 +392097,9 @@ static const UV UNI_SB__XX_invlist[] = { /* for EBCDIC 1047 */ 0x16A60, 0x16A6A, 0x16A6E, - 0x16A70, + 0x16ABF, + 0x16AC0, + 0x16ACA, 0x16AD0, 0x16AEE, 0x16AF0, @@ -382300,8 +392136,14 @@ static const UV UNI_SB__XX_invlist[] = { /* for EBCDIC 1047 */ 0x18CD6, 0x18D00, 0x18D09, + 0x1AFF0, + 0x1AFF4, + 0x1AFF5, + 0x1AFFC, + 0x1AFFD, + 0x1AFFF, 0x1B000, - 0x1B11F, + 0x1B123, 0x1B150, 0x1B153, 0x1B164, @@ -382318,6 +392160,10 @@ static const UV UNI_SB__XX_invlist[] = { /* for EBCDIC 1047 */ 0x1BC9A, 0x1BC9D, 0x1BCA4, + 0x1CF00, + 0x1CF2E, + 0x1CF30, + 0x1CF47, 0x1D165, 0x1D16A, 0x1D16D, @@ -382404,6 +392250,8 @@ static const UV UNI_SB__XX_invlist[] = { /* for EBCDIC 1047 */ 0x1DAA0, 0x1DAA1, 0x1DAB0, + 0x1DF00, + 0x1DF1F, 0x1E000, 0x1E007, 0x1E008, @@ -382422,8 +392270,18 @@ static const UV UNI_SB__XX_invlist[] = { /* for EBCDIC 1047 */ 0x1E14A, 0x1E14E, 0x1E14F, + 0x1E290, + 0x1E2AF, 0x1E2C0, 0x1E2FA, + 0x1E7E0, + 0x1E7E7, + 0x1E7E8, + 0x1E7EC, + 0x1E7ED, + 0x1E7EF, + 0x1E7F0, + 0x1E7FF, 0x1E800, 0x1E8C5, 0x1E8D0, @@ -382509,9 +392367,9 @@ static const UV UNI_SB__XX_invlist[] = { /* for EBCDIC 1047 */ 0x1FBF0, 0x1FBFA, 0x20000, - 0x2A6DE, + 0x2A6E0, 0x2A700, - 0x2B735, + 0x2B739, 0x2B740, 0x2B81E, 0x2B820, @@ -382538,7 +392396,7 @@ static const UV UNI_SB__XX_invlist[] = { /* for EBCDIC 1047 */ && '$' == 91 && '@' == 124 && '`' == 121 && '\n' == 37 static const UV UNI_SB__XX_invlist[] = { /* for EBCDIC 037 */ - 1629, /* Number of elements */ + 1679, /* Number of elements */ 148565664, /* Version and data structure type */ 0, /* 0 if the list starts at 0; 1 if it starts at the element beyond 0 */ @@ -382658,8 +392516,6 @@ static const UV UNI_SB__XX_invlist[] = { /* for EBCDIC 037 */ 0x610, 0x61B, 0x61C, - 0x61D, - 0x61E, 0x66A, 0x66B, 0x66D, @@ -382693,11 +392549,13 @@ static const UV UNI_SB__XX_invlist[] = { /* for EBCDIC 037 */ 0x85C, 0x860, 0x86B, - 0x8A0, - 0x8B5, - 0x8B6, - 0x8C8, - 0x8D3, + 0x870, + 0x888, + 0x889, + 0x88F, + 0x890, + 0x892, + 0x898, 0x970, 0x971, 0x984, @@ -382861,7 +392719,7 @@ static const UV UNI_SB__XX_invlist[] = { /* for EBCDIC 037 */ 0xC29, 0xC2A, 0xC3A, - 0xC3D, + 0xC3C, 0xC45, 0xC46, 0xC49, @@ -382871,6 +392729,8 @@ static const UV UNI_SB__XX_invlist[] = { /* for EBCDIC 037 */ 0xC57, 0xC58, 0xC5B, + 0xC5D, + 0xC5E, 0xC60, 0xC64, 0xC66, @@ -382895,7 +392755,7 @@ static const UV UNI_SB__XX_invlist[] = { /* for EBCDIC 037 */ 0xCCE, 0xCD5, 0xCD7, - 0xCDE, + 0xCDD, 0xCDF, 0xCE0, 0xCE4, @@ -383060,10 +392920,8 @@ static const UV UNI_SB__XX_invlist[] = { /* for EBCDIC 037 */ 0x16EE, 0x16F9, 0x1700, - 0x170D, - 0x170E, - 0x1715, - 0x1720, + 0x1716, + 0x171F, 0x1737, 0x1740, 0x1754, @@ -383086,8 +392944,6 @@ static const UV UNI_SB__XX_invlist[] = { /* for EBCDIC 037 */ 0x1808, 0x180A, 0x180B, - 0x180F, - 0x1810, 0x181A, 0x1820, 0x1879, @@ -383124,15 +392980,17 @@ static const UV UNI_SB__XX_invlist[] = { /* for EBCDIC 037 */ 0x1AA7, 0x1AAC, 0x1AB0, - 0x1AC1, + 0x1ACF, 0x1B00, - 0x1B4C, + 0x1B4D, 0x1B50, 0x1B5C, 0x1B5E, 0x1B60, 0x1B6B, 0x1B74, + 0x1B7D, + 0x1B7F, 0x1B80, 0x1BF4, 0x1C00, @@ -383152,8 +393010,6 @@ static const UV UNI_SB__XX_invlist[] = { /* for EBCDIC 037 */ 0x1CD4, 0x1CFB, 0x1D00, - 0x1DFA, - 0x1DFB, 0x1F16, 0x1F18, 0x1F1E, @@ -383270,10 +393126,6 @@ static const UV UNI_SB__XX_invlist[] = { /* for EBCDIC 037 */ 0x29FC, 0x29FE, 0x2C00, - 0x2C2F, - 0x2C30, - 0x2C5F, - 0x2C60, 0x2CE5, 0x2CEB, 0x2CF4, @@ -383317,6 +393169,8 @@ static const UV UNI_SB__XX_invlist[] = { /* for EBCDIC 037 */ 0x2E3D, 0x2E42, 0x2E43, + 0x2E53, + 0x2E5D, 0x3000, 0x3003, 0x3005, @@ -383352,8 +393206,6 @@ static const UV UNI_SB__XX_invlist[] = { /* for EBCDIC 037 */ 0x3400, 0x4DC0, 0x4E00, - 0x9FFD, - 0xA000, 0xA48D, 0xA4D0, 0xA4FE, @@ -383376,10 +393228,14 @@ static const UV UNI_SB__XX_invlist[] = { /* for EBCDIC 037 */ 0xA722, 0xA789, 0xA78B, - 0xA7C0, - 0xA7C2, 0xA7CB, - 0xA7F5, + 0xA7D0, + 0xA7D2, + 0xA7D3, + 0xA7D4, + 0xA7D5, + 0xA7DA, + 0xA7F2, 0xA828, 0xA82C, 0xA82D, @@ -383585,12 +393441,34 @@ static const UV UNI_SB__XX_invlist[] = { /* for EBCDIC 037 */ 0x10528, 0x10530, 0x10564, + 0x10570, + 0x1057B, + 0x1057C, + 0x1058B, + 0x1058C, + 0x10593, + 0x10594, + 0x10596, + 0x10597, + 0x105A2, + 0x105A3, + 0x105B2, + 0x105B3, + 0x105BA, + 0x105BB, + 0x105BD, 0x10600, 0x10737, 0x10740, 0x10756, 0x10760, 0x10768, + 0x10780, + 0x10786, + 0x10787, + 0x107B1, + 0x107B2, + 0x107BB, 0x10800, 0x10806, 0x10808, @@ -383675,6 +393553,8 @@ static const UV UNI_SB__XX_invlist[] = { /* for EBCDIC 037 */ 0x10F51, 0x10F55, 0x10F5A, + 0x10F70, + 0x10F8A, 0x10FB0, 0x10FC5, 0x10FE0, @@ -383682,11 +393562,11 @@ static const UV UNI_SB__XX_invlist[] = { /* for EBCDIC 037 */ 0x11000, 0x11049, 0x11066, - 0x11070, + 0x11076, 0x1107F, 0x110BB, 0x110BD, - 0x110C2, + 0x110C3, 0x110CD, 0x110CE, 0x110D0, @@ -383801,6 +393681,8 @@ static const UV UNI_SB__XX_invlist[] = { /* for EBCDIC 037 */ 0x1173A, 0x1173C, 0x1173F, + 0x11740, + 0x11747, 0x11800, 0x1183B, 0x118A0, @@ -383841,7 +393723,7 @@ static const UV UNI_SB__XX_invlist[] = { /* for EBCDIC 037 */ 0x11A9A, 0x11A9B, 0x11A9E, - 0x11AC0, + 0x11AB0, 0x11AF9, 0x11C00, 0x11C09, @@ -383893,6 +393775,8 @@ static const UV UNI_SB__XX_invlist[] = { /* for EBCDIC 037 */ 0x1246F, 0x12480, 0x12544, + 0x12F90, + 0x12FF1, 0x13000, 0x1342F, 0x13430, @@ -383906,7 +393790,9 @@ static const UV UNI_SB__XX_invlist[] = { /* for EBCDIC 037 */ 0x16A60, 0x16A6A, 0x16A6E, - 0x16A70, + 0x16ABF, + 0x16AC0, + 0x16ACA, 0x16AD0, 0x16AEE, 0x16AF0, @@ -383943,8 +393829,14 @@ static const UV UNI_SB__XX_invlist[] = { /* for EBCDIC 037 */ 0x18CD6, 0x18D00, 0x18D09, + 0x1AFF0, + 0x1AFF4, + 0x1AFF5, + 0x1AFFC, + 0x1AFFD, + 0x1AFFF, 0x1B000, - 0x1B11F, + 0x1B123, 0x1B150, 0x1B153, 0x1B164, @@ -383961,6 +393853,10 @@ static const UV UNI_SB__XX_invlist[] = { /* for EBCDIC 037 */ 0x1BC9A, 0x1BC9D, 0x1BCA4, + 0x1CF00, + 0x1CF2E, + 0x1CF30, + 0x1CF47, 0x1D165, 0x1D16A, 0x1D16D, @@ -384047,6 +393943,8 @@ static const UV UNI_SB__XX_invlist[] = { /* for EBCDIC 037 */ 0x1DAA0, 0x1DAA1, 0x1DAB0, + 0x1DF00, + 0x1DF1F, 0x1E000, 0x1E007, 0x1E008, @@ -384065,8 +393963,18 @@ static const UV UNI_SB__XX_invlist[] = { /* for EBCDIC 037 */ 0x1E14A, 0x1E14E, 0x1E14F, + 0x1E290, + 0x1E2AF, 0x1E2C0, 0x1E2FA, + 0x1E7E0, + 0x1E7E7, + 0x1E7E8, + 0x1E7EC, + 0x1E7ED, + 0x1E7EF, + 0x1E7F0, + 0x1E7FF, 0x1E800, 0x1E8C5, 0x1E8D0, @@ -384152,9 +394060,9 @@ static const UV UNI_SB__XX_invlist[] = { /* for EBCDIC 037 */ 0x1FBF0, 0x1FBFA, 0x20000, - 0x2A6DE, + 0x2A6E0, 0x2A700, - 0x2B735, + 0x2B739, 0x2B740, 0x2B81E, 0x2B820, @@ -384206,7 +394114,7 @@ static const UV UNI_SC_invlist[] = { /* for ASCII/Latin1 */ 0x17DB, 0x17DC, 0x20A0, - 0x20C0, + 0x20C1, 0xA838, 0xA839, 0xFDFC, @@ -384267,7 +394175,7 @@ static const UV UNI_SC_invlist[] = { /* for EBCDIC 1047 */ 0x17DB, 0x17DC, 0x20A0, - 0x20C0, + 0x20C1, 0xA838, 0xA839, 0xFDFC, @@ -384328,7 +394236,7 @@ static const UV UNI_SC_invlist[] = { /* for EBCDIC 037 */ 0x17DB, 0x17DC, 0x20A0, - 0x20C0, + 0x20C1, 0xA838, 0xA839, 0xFDFC, @@ -384378,8 +394286,6 @@ static const UV UNI_SC__ARAB_invlist[] = { /* for all charsets */ 0x60D, 0x61B, 0x61C, - 0x61D, - 0x61E, 0x61F, 0x620, 0x640, @@ -384393,24 +394299,26 @@ static const UV UNI_SC__ARAB_invlist[] = { /* for all charsets */ 0x700, 0x750, 0x780, - 0x8A0, - 0x8B5, - 0x8B6, - 0x8C8, - 0x8D3, + 0x870, + 0x88F, + 0x890, + 0x892, + 0x898, 0x8E2, 0x8E3, 0x900, 0xFB50, - 0xFBC2, + 0xFBC3, 0xFBD3, 0xFD3E, - 0xFD50, + 0xFD40, 0xFD90, 0xFD92, 0xFDC8, + 0xFDCF, + 0xFDD0, 0xFDF0, - 0xFDFE, + 0xFE00, 0xFE70, 0xFE75, 0xFE76, @@ -384585,6 +394493,16 @@ static const UV UNI_SC__COPT_invlist[] = { /* for all charsets */ 0x2D00 }; +static const UV UNI_SC__CPMN_invlist[] = { /* for all charsets */ + 3, /* Number of elements */ + 148565664, /* Version and data structure type */ + 1, /* 0 if the list starts at 0; + 1 if it starts at the element beyond 0 */ + 0x0, + 0x12F90, + 0x12FF3 +}; + static const UV UNI_SC__CPRT_invlist[] = { /* for all charsets */ 13, /* Number of elements */ 148565664, /* Version and data structure type */ @@ -384702,15 +394620,13 @@ static const UV UNI_SC__GEOR_invlist[] = { /* for all charsets */ }; static const UV UNI_SC__GLAG_invlist[] = { /* for all charsets */ - 15, /* Number of elements */ + 13, /* Number of elements */ 148565664, /* Version and data structure type */ 1, /* 0 if the list starts at 0; 1 if it starts at the element beyond 0 */ 0x0, 0x2C00, - 0x2C2F, - 0x2C30, - 0x2C5F, + 0x2C60, 0x1E000, 0x1E007, 0x1E008, @@ -384960,7 +394876,7 @@ static const UV UNI_SC__GURU_invlist[] = { /* for all charsets */ }; static const UV UNI_SC__HAN_invlist[] = { /* for all charsets */ - 39, /* Number of elements */ + 41, /* Number of elements */ 148565664, /* Version and data structure type */ 1, /* 0 if the list starts at 0; 1 if it starts at the element beyond 0 */ @@ -384982,17 +394898,19 @@ static const UV UNI_SC__HAN_invlist[] = { /* for all charsets */ 0x3400, 0x4DC0, 0x4E00, - 0x9FFD, + 0xA000, 0xF900, 0xFA6E, 0xFA70, 0xFADA, + 0x16FE2, + 0x16FE4, 0x16FF0, 0x16FF2, 0x20000, - 0x2A6DE, + 0x2A6E0, 0x2A700, - 0x2B735, + 0x2B739, 0x2B740, 0x2B81E, 0x2B820, @@ -385062,7 +394980,7 @@ static const UV UNI_SC__HIRA_invlist[] = { /* for all charsets */ 0x309D, 0x30A0, 0x1B001, - 0x1B11F, + 0x1B120, 0x1B150, 0x1B153, 0x1F200, @@ -385096,7 +395014,7 @@ static const UV UNI_SC__KALI_invlist[] = { /* for all charsets */ }; static const UV UNI_SC__KANA_invlist[] = { /* for all charsets */ - 19, /* Number of elements */ + 27, /* Number of elements */ 148565664, /* Version and data structure type */ 1, /* 0 if the list starts at 0; 1 if it starts at the element beyond 0 */ @@ -385115,8 +395033,16 @@ static const UV UNI_SC__KANA_invlist[] = { /* for all charsets */ 0xFF70, 0xFF71, 0xFF9E, + 0x1AFF0, + 0x1AFF4, + 0x1AFF5, + 0x1AFFC, + 0x1AFFD, + 0x1AFFF, 0x1B000, 0x1B001, + 0x1B120, + 0x1B123, 0x1B164, 0x1B168 }; @@ -385157,7 +395083,7 @@ static const UV UNI_SC__KNDA_invlist[] = { /* for all charsets */ 0xCCE, 0xCD5, 0xCD7, - 0xCDE, + 0xCDD, 0xCDF, 0xCE0, 0xCE4, @@ -385174,7 +395100,7 @@ static const UV UNI_SC__KTHI_invlist[] = { /* for all charsets */ 1 if it starts at the element beyond 0 */ 0x0, 0x11080, - 0x110C2, + 0x110C3, 0x110CD, 0x110CE }; @@ -385182,7 +395108,7 @@ static const UV UNI_SC__KTHI_invlist[] = { /* for all charsets */ # if 'A' == 65 /* ASCII/Latin1 */ static const UV UNI_SC__LATN_invlist[] = { /* for ASCII/Latin1 */ - 65, /* Number of elements */ + 77, /* Number of elements */ 148565664, /* Version and data structure type */ 1, /* 0 if the list starts at 0; 1 if it starts at the element beyond 0 */ @@ -385234,10 +395160,14 @@ static const UV UNI_SC__LATN_invlist[] = { /* for ASCII/Latin1 */ 0xA722, 0xA788, 0xA78B, - 0xA7C0, - 0xA7C2, 0xA7CB, - 0xA7F5, + 0xA7D0, + 0xA7D2, + 0xA7D3, + 0xA7D4, + 0xA7D5, + 0xA7DA, + 0xA7F2, 0xA800, 0xAB30, 0xAB5B, @@ -385250,7 +395180,15 @@ static const UV UNI_SC__LATN_invlist[] = { /* for ASCII/Latin1 */ 0xFF21, 0xFF3B, 0xFF41, - 0xFF5B + 0xFF5B, + 0x10780, + 0x10786, + 0x10787, + 0x107B1, + 0x107B2, + 0x107BB, + 0x1DF00, + 0x1DF1F }; # endif /* ASCII/Latin1 */ @@ -385261,7 +395199,7 @@ static const UV UNI_SC__LATN_invlist[] = { /* for ASCII/Latin1 */ && '$' == 91 && '@' == 124 && '`' == 121 && '\n' == 21 static const UV UNI_SC__LATN_invlist[] = { /* for EBCDIC 1047 */ - 91, /* Number of elements */ + 103, /* Number of elements */ 148565664, /* Version and data structure type */ 1, /* 0 if the list starts at 0; 1 if it starts at the element beyond 0 */ @@ -385339,10 +395277,14 @@ static const UV UNI_SC__LATN_invlist[] = { /* for EBCDIC 1047 */ 0xA722, 0xA788, 0xA78B, - 0xA7C0, - 0xA7C2, 0xA7CB, - 0xA7F5, + 0xA7D0, + 0xA7D2, + 0xA7D3, + 0xA7D4, + 0xA7D5, + 0xA7DA, + 0xA7F2, 0xA800, 0xAB30, 0xAB5B, @@ -385355,7 +395297,15 @@ static const UV UNI_SC__LATN_invlist[] = { /* for EBCDIC 1047 */ 0xFF21, 0xFF3B, 0xFF41, - 0xFF5B + 0xFF5B, + 0x10780, + 0x10786, + 0x10787, + 0x107B1, + 0x107B2, + 0x107BB, + 0x1DF00, + 0x1DF1F }; # endif /* EBCDIC 1047 */ @@ -385366,7 +395316,7 @@ static const UV UNI_SC__LATN_invlist[] = { /* for EBCDIC 1047 */ && '$' == 91 && '@' == 124 && '`' == 121 && '\n' == 37 static const UV UNI_SC__LATN_invlist[] = { /* for EBCDIC 037 */ - 87, /* Number of elements */ + 99, /* Number of elements */ 148565664, /* Version and data structure type */ 1, /* 0 if the list starts at 0; 1 if it starts at the element beyond 0 */ @@ -385440,10 +395390,14 @@ static const UV UNI_SC__LATN_invlist[] = { /* for EBCDIC 037 */ 0xA722, 0xA788, 0xA78B, - 0xA7C0, - 0xA7C2, 0xA7CB, - 0xA7F5, + 0xA7D0, + 0xA7D2, + 0xA7D3, + 0xA7D4, + 0xA7D5, + 0xA7DA, + 0xA7F2, 0xA800, 0xAB30, 0xAB5B, @@ -385456,7 +395410,15 @@ static const UV UNI_SC__LATN_invlist[] = { /* for EBCDIC 037 */ 0xFF21, 0xFF3B, 0xFF41, - 0xFF5B + 0xFF5B, + 0x10780, + 0x10786, + 0x10787, + 0x107B1, + 0x107B2, + 0x107BB, + 0x1DF00, + 0x1DF1F }; # endif /* EBCDIC 037 */ @@ -385584,7 +395546,7 @@ static const UV UNI_SC__MODI_invlist[] = { /* for all charsets */ }; static const UV UNI_SC__MONG_invlist[] = { /* for all charsets */ - 15, /* Number of elements */ + 13, /* Number of elements */ 148565664, /* Version and data structure type */ 1, /* 0 if the list starts at 0; 1 if it starts at the element beyond 0 */ @@ -385594,8 +395556,6 @@ static const UV UNI_SC__MONG_invlist[] = { /* for all charsets */ 0x1804, 0x1805, 0x1806, - 0x180F, - 0x1810, 0x181A, 0x1820, 0x1879, @@ -385651,6 +395611,18 @@ static const UV UNI_SC__NAND_invlist[] = { /* for all charsets */ 0x119E5 }; +static const UV UNI_SC__NKO_invlist[] = { /* for all charsets */ + 5, /* Number of elements */ + 148565664, /* Version and data structure type */ + 1, /* 0 if the list starts at 0; + 1 if it starts at the element beyond 0 */ + 0x0, + 0x7C0, + 0x7FB, + 0x7FD, + 0x800 +}; + static const UV UNI_SC__ORYA_invlist[] = { /* for all charsets */ 29, /* Number of elements */ 148565664, /* Version and data structure type */ @@ -385687,6 +395659,16 @@ static const UV UNI_SC__ORYA_invlist[] = { /* for all charsets */ 0xB78 }; +static const UV UNI_SC__OUGR_invlist[] = { /* for all charsets */ + 3, /* Number of elements */ + 148565664, /* Version and data structure type */ + 1, /* 0 if the list starts at 0; + 1 if it starts at the element beyond 0 */ + 0x0, + 0x10F70, + 0x10F8A +}; + static const UV UNI_SC__PERM_invlist[] = { /* for all charsets */ 3, /* Number of elements */ 148565664, /* Version and data structure type */ @@ -385722,7 +395704,7 @@ static const UV UNI_SC__PHLP_invlist[] = { /* for all charsets */ }; static const UV UNI_SC__QAAI_invlist[] = { /* for all charsets */ - 57, /* Number of elements */ + 59, /* Number of elements */ 148565664, /* Version and data structure type */ 1, /* 0 if the list starts at 0; 1 if it starts at the element beyond 0 */ @@ -385738,7 +395720,7 @@ static const UV UNI_SC__QAAI_invlist[] = { /* for all charsets */ 0x951, 0x955, 0x1AB0, - 0x1AC1, + 0x1ACF, 0x1CD0, 0x1CD3, 0x1CD4, @@ -385752,8 +395734,6 @@ static const UV UNI_SC__QAAI_invlist[] = { /* for all charsets */ 0x1CF8, 0x1CFA, 0x1DC0, - 0x1DFA, - 0x1DFB, 0x1E00, 0x200C, 0x200E, @@ -385773,6 +395753,10 @@ static const UV UNI_SC__QAAI_invlist[] = { /* for all charsets */ 0x102E1, 0x1133B, 0x1133C, + 0x1CF00, + 0x1CF2E, + 0x1CF30, + 0x1CF47, 0x1D167, 0x1D16A, 0x1D17B, @@ -385910,7 +395894,7 @@ static const UV UNI_SC__TAKR_invlist[] = { /* for all charsets */ 1 if it starts at the element beyond 0 */ 0x0, 0x11680, - 0x116B9, + 0x116BA, 0x116C0, 0x116CA }; @@ -385972,7 +395956,7 @@ static const UV UNI_SC__TAML_invlist[] = { /* for all charsets */ }; static const UV UNI_SC__TELU_invlist[] = { /* for all charsets */ - 25, /* Number of elements */ + 27, /* Number of elements */ 148565664, /* Version and data structure type */ 1, /* 0 if the list starts at 0; 1 if it starts at the element beyond 0 */ @@ -385985,7 +395969,7 @@ static const UV UNI_SC__TELU_invlist[] = { /* for all charsets */ 0xC29, 0xC2A, 0xC3A, - 0xC3D, + 0xC3C, 0xC45, 0xC46, 0xC49, @@ -385995,6 +395979,8 @@ static const UV UNI_SC__TELU_invlist[] = { /* for all charsets */ 0xC57, 0xC58, 0xC5B, + 0xC5D, + 0xC5E, 0xC60, 0xC64, 0xC66, @@ -386010,9 +395996,9 @@ static const UV UNI_SC__TGLG_invlist[] = { /* for all charsets */ 1 if it starts at the element beyond 0 */ 0x0, 0x1700, - 0x170D, - 0x170E, - 0x1715 + 0x1716, + 0x171F, + 0x1720 }; static const UV UNI_SC__THAA_invlist[] = { /* for all charsets */ @@ -386066,7 +396052,7 @@ static const UV UNI_SC__YI_invlist[] = { /* for all charsets */ # if 'A' == 65 /* ASCII/Latin1 */ static const UV UNI_SC__ZYYY_invlist[] = { /* for ASCII/Latin1 */ - 346, /* Number of elements */ + 348, /* Number of elements */ 148565664, /* Version and data structure type */ 0, /* 0 if the list starts at 0; 1 if it starts at the element beyond 0 */ @@ -386151,7 +396137,7 @@ static const UV UNI_SC__ZYYY_invlist[] = { /* for ASCII/Latin1 */ 0x2080, 0x208F, 0x20A0, - 0x20C0, + 0x20C1, 0x2100, 0x2126, 0x2127, @@ -386177,7 +396163,7 @@ static const UV UNI_SC__ZYYY_invlist[] = { /* for ASCII/Latin1 */ 0x2B97, 0x2C00, 0x2E00, - 0x2E53, + 0x2E5E, 0x2FF0, 0x2FFC, 0x3000, @@ -386264,10 +396250,10 @@ static const UV UNI_SC__ZYYY_invlist[] = { /* for ASCII/Latin1 */ 0x101FD, 0x102E1, 0x102FC, - 0x16FE2, - 0x16FE4, 0x1BCA0, 0x1BCA4, + 0x1CF50, + 0x1CFC4, 0x1D000, 0x1D0F6, 0x1D100, @@ -386281,7 +396267,7 @@ static const UV UNI_SC__ZYYY_invlist[] = { /* for ASCII/Latin1 */ 0x1D18C, 0x1D1AA, 0x1D1AE, - 0x1D1E9, + 0x1D1EB, 0x1D2E0, 0x1D2F4, 0x1D300, @@ -386362,7 +396348,7 @@ static const UV UNI_SC__ZYYY_invlist[] = { /* for ASCII/Latin1 */ 0x1F266, 0x1F300, 0x1F6D8, - 0x1F6E0, + 0x1F6DD, 0x1F6ED, 0x1F6F0, 0x1F6FD, @@ -386372,6 +396358,8 @@ static const UV UNI_SC__ZYYY_invlist[] = { /* for ASCII/Latin1 */ 0x1F7D9, 0x1F7E0, 0x1F7EC, + 0x1F7F0, + 0x1F7F1, 0x1F800, 0x1F80C, 0x1F810, @@ -386385,27 +396373,27 @@ static const UV UNI_SC__ZYYY_invlist[] = { /* for ASCII/Latin1 */ 0x1F8B0, 0x1F8B2, 0x1F900, - 0x1F979, - 0x1F97A, - 0x1F9CC, - 0x1F9CD, 0x1FA54, 0x1FA60, 0x1FA6E, 0x1FA70, 0x1FA75, 0x1FA78, - 0x1FA7B, + 0x1FA7D, 0x1FA80, 0x1FA87, 0x1FA90, - 0x1FAA9, + 0x1FAAD, 0x1FAB0, - 0x1FAB7, + 0x1FABB, 0x1FAC0, - 0x1FAC3, + 0x1FAC6, 0x1FAD0, - 0x1FAD7, + 0x1FADA, + 0x1FAE0, + 0x1FAE8, + 0x1FAF0, + 0x1FAF7, 0x1FB00, 0x1FB93, 0x1FB94, @@ -386426,7 +396414,7 @@ static const UV UNI_SC__ZYYY_invlist[] = { /* for ASCII/Latin1 */ && '$' == 91 && '@' == 124 && '`' == 121 && '\n' == 21 static const UV UNI_SC__ZYYY_invlist[] = { /* for EBCDIC 1047 */ - 372, /* Number of elements */ + 374, /* Number of elements */ 148565664, /* Version and data structure type */ 0, /* 0 if the list starts at 0; 1 if it starts at the element beyond 0 */ @@ -386537,7 +396525,7 @@ static const UV UNI_SC__ZYYY_invlist[] = { /* for EBCDIC 1047 */ 0x2080, 0x208F, 0x20A0, - 0x20C0, + 0x20C1, 0x2100, 0x2126, 0x2127, @@ -386563,7 +396551,7 @@ static const UV UNI_SC__ZYYY_invlist[] = { /* for EBCDIC 1047 */ 0x2B97, 0x2C00, 0x2E00, - 0x2E53, + 0x2E5E, 0x2FF0, 0x2FFC, 0x3000, @@ -386650,10 +396638,10 @@ static const UV UNI_SC__ZYYY_invlist[] = { /* for EBCDIC 1047 */ 0x101FD, 0x102E1, 0x102FC, - 0x16FE2, - 0x16FE4, 0x1BCA0, 0x1BCA4, + 0x1CF50, + 0x1CFC4, 0x1D000, 0x1D0F6, 0x1D100, @@ -386667,7 +396655,7 @@ static const UV UNI_SC__ZYYY_invlist[] = { /* for EBCDIC 1047 */ 0x1D18C, 0x1D1AA, 0x1D1AE, - 0x1D1E9, + 0x1D1EB, 0x1D2E0, 0x1D2F4, 0x1D300, @@ -386748,7 +396736,7 @@ static const UV UNI_SC__ZYYY_invlist[] = { /* for EBCDIC 1047 */ 0x1F266, 0x1F300, 0x1F6D8, - 0x1F6E0, + 0x1F6DD, 0x1F6ED, 0x1F6F0, 0x1F6FD, @@ -386758,6 +396746,8 @@ static const UV UNI_SC__ZYYY_invlist[] = { /* for EBCDIC 1047 */ 0x1F7D9, 0x1F7E0, 0x1F7EC, + 0x1F7F0, + 0x1F7F1, 0x1F800, 0x1F80C, 0x1F810, @@ -386771,27 +396761,27 @@ static const UV UNI_SC__ZYYY_invlist[] = { /* for EBCDIC 1047 */ 0x1F8B0, 0x1F8B2, 0x1F900, - 0x1F979, - 0x1F97A, - 0x1F9CC, - 0x1F9CD, 0x1FA54, 0x1FA60, 0x1FA6E, 0x1FA70, 0x1FA75, 0x1FA78, - 0x1FA7B, + 0x1FA7D, 0x1FA80, 0x1FA87, 0x1FA90, - 0x1FAA9, + 0x1FAAD, 0x1FAB0, - 0x1FAB7, + 0x1FABB, 0x1FAC0, - 0x1FAC3, + 0x1FAC6, 0x1FAD0, - 0x1FAD7, + 0x1FADA, + 0x1FAE0, + 0x1FAE8, + 0x1FAF0, + 0x1FAF7, 0x1FB00, 0x1FB93, 0x1FB94, @@ -386812,7 +396802,7 @@ static const UV UNI_SC__ZYYY_invlist[] = { /* for EBCDIC 1047 */ && '$' == 91 && '@' == 124 && '`' == 121 && '\n' == 37 static const UV UNI_SC__ZYYY_invlist[] = { /* for EBCDIC 037 */ - 368, /* Number of elements */ + 370, /* Number of elements */ 148565664, /* Version and data structure type */ 0, /* 0 if the list starts at 0; 1 if it starts at the element beyond 0 */ @@ -386919,7 +396909,7 @@ static const UV UNI_SC__ZYYY_invlist[] = { /* for EBCDIC 037 */ 0x2080, 0x208F, 0x20A0, - 0x20C0, + 0x20C1, 0x2100, 0x2126, 0x2127, @@ -386945,7 +396935,7 @@ static const UV UNI_SC__ZYYY_invlist[] = { /* for EBCDIC 037 */ 0x2B97, 0x2C00, 0x2E00, - 0x2E53, + 0x2E5E, 0x2FF0, 0x2FFC, 0x3000, @@ -387032,10 +397022,10 @@ static const UV UNI_SC__ZYYY_invlist[] = { /* for EBCDIC 037 */ 0x101FD, 0x102E1, 0x102FC, - 0x16FE2, - 0x16FE4, 0x1BCA0, 0x1BCA4, + 0x1CF50, + 0x1CFC4, 0x1D000, 0x1D0F6, 0x1D100, @@ -387049,7 +397039,7 @@ static const UV UNI_SC__ZYYY_invlist[] = { /* for EBCDIC 037 */ 0x1D18C, 0x1D1AA, 0x1D1AE, - 0x1D1E9, + 0x1D1EB, 0x1D2E0, 0x1D2F4, 0x1D300, @@ -387130,7 +397120,7 @@ static const UV UNI_SC__ZYYY_invlist[] = { /* for EBCDIC 037 */ 0x1F266, 0x1F300, 0x1F6D8, - 0x1F6E0, + 0x1F6DD, 0x1F6ED, 0x1F6F0, 0x1F6FD, @@ -387140,6 +397130,8 @@ static const UV UNI_SC__ZYYY_invlist[] = { /* for EBCDIC 037 */ 0x1F7D9, 0x1F7E0, 0x1F7EC, + 0x1F7F0, + 0x1F7F1, 0x1F800, 0x1F80C, 0x1F810, @@ -387153,27 +397145,27 @@ static const UV UNI_SC__ZYYY_invlist[] = { /* for EBCDIC 037 */ 0x1F8B0, 0x1F8B2, 0x1F900, - 0x1F979, - 0x1F97A, - 0x1F9CC, - 0x1F9CD, 0x1FA54, 0x1FA60, 0x1FA6E, 0x1FA70, 0x1FA75, 0x1FA78, - 0x1FA7B, + 0x1FA7D, 0x1FA80, 0x1FA87, 0x1FA90, - 0x1FAA9, + 0x1FAAD, 0x1FAB0, - 0x1FAB7, + 0x1FABB, 0x1FAC0, - 0x1FAC3, + 0x1FAC6, 0x1FAD0, - 0x1FAD7, + 0x1FADA, + 0x1FAE0, + 0x1FAE8, + 0x1FAF0, + 0x1FAF7, 0x1FB00, 0x1FB93, 0x1FB94, @@ -387191,7 +397183,7 @@ static const UV UNI_SC__ZYYY_invlist[] = { /* for EBCDIC 037 */ # if 'A' == 65 /* ASCII/Latin1 */ static const UV UNI_SD_invlist[] = { /* for ASCII/Latin1 */ - 63, /* Number of elements */ + 65, /* Number of elements */ 148565664, /* Version and data structure type */ 1, /* 0 if the list starts at 0; 1 if it starts at the element beyond 0 */ @@ -387257,7 +397249,9 @@ static const UV UNI_SD_invlist[] = { /* for ASCII/Latin1 */ 0x1D65E, 0x1D660, 0x1D692, - 0x1D694 + 0x1D694, + 0x1DF1A, + 0x1DF1B }; # endif /* ASCII/Latin1 */ @@ -387268,7 +397262,7 @@ static const UV UNI_SD_invlist[] = { /* for ASCII/Latin1 */ && '$' == 91 && '@' == 124 && '`' == 121 && '\n' == 21 static const UV UNI_SD_invlist[] = { /* for EBCDIC 1047 */ - 65, /* Number of elements */ + 67, /* Number of elements */ 148565664, /* Version and data structure type */ 1, /* 0 if the list starts at 0; 1 if it starts at the element beyond 0 */ @@ -387336,7 +397330,9 @@ static const UV UNI_SD_invlist[] = { /* for EBCDIC 1047 */ 0x1D65E, 0x1D660, 0x1D692, - 0x1D694 + 0x1D694, + 0x1DF1A, + 0x1DF1B }; # endif /* EBCDIC 1047 */ @@ -387347,7 +397343,7 @@ static const UV UNI_SD_invlist[] = { /* for EBCDIC 1047 */ && '$' == 91 && '@' == 124 && '`' == 121 && '\n' == 37 static const UV UNI_SD_invlist[] = { /* for EBCDIC 037 */ - 65, /* Number of elements */ + 67, /* Number of elements */ 148565664, /* Version and data structure type */ 1, /* 0 if the list starts at 0; 1 if it starts at the element beyond 0 */ @@ -387415,7 +397411,9 @@ static const UV UNI_SD_invlist[] = { /* for EBCDIC 037 */ 0x1D65E, 0x1D660, 0x1D692, - 0x1D694 + 0x1D694, + 0x1DF1A, + 0x1DF1B }; # endif /* EBCDIC 037 */ @@ -387551,7 +397549,7 @@ static const UV UNI_SINHALAARCHAICNUMBERS_invlist[] = { /* for all charsets */ # if 'A' == 65 /* ASCII/Latin1 */ static const UV UNI_SK_invlist[] = { /* for ASCII/Latin1 */ - 61, /* Number of elements */ + 63, /* Number of elements */ 148565664, /* Version and data structure type */ 1, /* 0 if the list starts at 0; 1 if it starts at the element beyond 0 */ @@ -387582,6 +397580,8 @@ static const UV UNI_SK_invlist[] = { /* for ASCII/Latin1 */ 0x376, 0x384, 0x386, + 0x888, + 0x889, 0x1FBD, 0x1FBE, 0x1FBF, @@ -387607,7 +397607,7 @@ static const UV UNI_SK_invlist[] = { /* for ASCII/Latin1 */ 0xAB6A, 0xAB6C, 0xFBB2, - 0xFBC2, + 0xFBC3, 0xFF3E, 0xFF3F, 0xFF40, @@ -387626,7 +397626,7 @@ static const UV UNI_SK_invlist[] = { /* for ASCII/Latin1 */ && '$' == 91 && '@' == 124 && '`' == 121 && '\n' == 21 static const UV UNI_SK_invlist[] = { /* for EBCDIC 1047 */ - 59, /* Number of elements */ + 61, /* Number of elements */ 148565664, /* Version and data structure type */ 1, /* 0 if the list starts at 0; 1 if it starts at the element beyond 0 */ @@ -387655,6 +397655,8 @@ static const UV UNI_SK_invlist[] = { /* for EBCDIC 1047 */ 0x376, 0x384, 0x386, + 0x888, + 0x889, 0x1FBD, 0x1FBE, 0x1FBF, @@ -387680,7 +397682,7 @@ static const UV UNI_SK_invlist[] = { /* for EBCDIC 1047 */ 0xAB6A, 0xAB6C, 0xFBB2, - 0xFBC2, + 0xFBC3, 0xFF3E, 0xFF3F, 0xFF40, @@ -387699,7 +397701,7 @@ static const UV UNI_SK_invlist[] = { /* for EBCDIC 1047 */ && '$' == 91 && '@' == 124 && '`' == 121 && '\n' == 37 static const UV UNI_SK_invlist[] = { /* for EBCDIC 037 */ - 57, /* Number of elements */ + 59, /* Number of elements */ 148565664, /* Version and data structure type */ 1, /* 0 if the list starts at 0; 1 if it starts at the element beyond 0 */ @@ -387726,6 +397728,8 @@ static const UV UNI_SK_invlist[] = { /* for EBCDIC 037 */ 0x376, 0x384, 0x386, + 0x888, + 0x889, 0x1FBD, 0x1FBE, 0x1FBF, @@ -387751,7 +397755,7 @@ static const UV UNI_SK_invlist[] = { /* for EBCDIC 037 */ 0xAB6A, 0xAB6C, 0xFBB2, - 0xFBC2, + 0xFBC3, 0xFF3E, 0xFF3F, 0xFF40, @@ -388217,7 +398221,7 @@ static const UV UNI_SMALLKANAEXT_invlist[] = { /* for all charsets */ # if 'A' == 65 /* ASCII/Latin1 */ static const UV UNI_SO_invlist[] = { /* for ASCII/Latin1 */ - 365, /* Number of elements */ + 373, /* Number of elements */ 148565664, /* Version and data structure type */ 1, /* 0 if the list starts at 0; 1 if it starts at the element beyond 0 */ @@ -388436,8 +398440,12 @@ static const UV UNI_SO_invlist[] = { /* for ASCII/Latin1 */ 0xA83A, 0xAA77, 0xAA7A, + 0xFD40, + 0xFD50, + 0xFDCF, + 0xFDD0, 0xFDFD, - 0xFDFE, + 0xFE00, 0xFFE4, 0xFFE5, 0xFFE8, @@ -388474,6 +398482,8 @@ static const UV UNI_SO_invlist[] = { /* for ASCII/Latin1 */ 0x16B46, 0x1BC9C, 0x1BC9D, + 0x1CF50, + 0x1CFC4, 0x1D000, 0x1D0F6, 0x1D100, @@ -388487,7 +398497,7 @@ static const UV UNI_SO_invlist[] = { /* for ASCII/Latin1 */ 0x1D18C, 0x1D1AA, 0x1D1AE, - 0x1D1E9, + 0x1D1EB, 0x1D200, 0x1D242, 0x1D245, @@ -388538,7 +398548,7 @@ static const UV UNI_SO_invlist[] = { /* for ASCII/Latin1 */ 0x1F3FB, 0x1F400, 0x1F6D8, - 0x1F6E0, + 0x1F6DD, 0x1F6ED, 0x1F6F0, 0x1F6FD, @@ -388548,6 +398558,8 @@ static const UV UNI_SO_invlist[] = { /* for ASCII/Latin1 */ 0x1F7D9, 0x1F7E0, 0x1F7EC, + 0x1F7F0, + 0x1F7F1, 0x1F800, 0x1F80C, 0x1F810, @@ -388561,27 +398573,27 @@ static const UV UNI_SO_invlist[] = { /* for ASCII/Latin1 */ 0x1F8B0, 0x1F8B2, 0x1F900, - 0x1F979, - 0x1F97A, - 0x1F9CC, - 0x1F9CD, 0x1FA54, 0x1FA60, 0x1FA6E, 0x1FA70, 0x1FA75, 0x1FA78, - 0x1FA7B, + 0x1FA7D, 0x1FA80, 0x1FA87, 0x1FA90, - 0x1FAA9, + 0x1FAAD, 0x1FAB0, - 0x1FAB7, + 0x1FABB, 0x1FAC0, - 0x1FAC3, + 0x1FAC6, 0x1FAD0, - 0x1FAD7, + 0x1FADA, + 0x1FAE0, + 0x1FAE8, + 0x1FAF0, + 0x1FAF7, 0x1FB00, 0x1FB93, 0x1FB94, @@ -388596,7 +398608,7 @@ static const UV UNI_SO_invlist[] = { /* for ASCII/Latin1 */ && '$' == 91 && '@' == 124 && '`' == 121 && '\n' == 21 static const UV UNI_SO_invlist[] = { /* for EBCDIC 1047 */ - 365, /* Number of elements */ + 373, /* Number of elements */ 148565664, /* Version and data structure type */ 1, /* 0 if the list starts at 0; 1 if it starts at the element beyond 0 */ @@ -388815,8 +398827,12 @@ static const UV UNI_SO_invlist[] = { /* for EBCDIC 1047 */ 0xA83A, 0xAA77, 0xAA7A, + 0xFD40, + 0xFD50, + 0xFDCF, + 0xFDD0, 0xFDFD, - 0xFDFE, + 0xFE00, 0xFFE4, 0xFFE5, 0xFFE8, @@ -388853,6 +398869,8 @@ static const UV UNI_SO_invlist[] = { /* for EBCDIC 1047 */ 0x16B46, 0x1BC9C, 0x1BC9D, + 0x1CF50, + 0x1CFC4, 0x1D000, 0x1D0F6, 0x1D100, @@ -388866,7 +398884,7 @@ static const UV UNI_SO_invlist[] = { /* for EBCDIC 1047 */ 0x1D18C, 0x1D1AA, 0x1D1AE, - 0x1D1E9, + 0x1D1EB, 0x1D200, 0x1D242, 0x1D245, @@ -388917,7 +398935,7 @@ static const UV UNI_SO_invlist[] = { /* for EBCDIC 1047 */ 0x1F3FB, 0x1F400, 0x1F6D8, - 0x1F6E0, + 0x1F6DD, 0x1F6ED, 0x1F6F0, 0x1F6FD, @@ -388927,6 +398945,8 @@ static const UV UNI_SO_invlist[] = { /* for EBCDIC 1047 */ 0x1F7D9, 0x1F7E0, 0x1F7EC, + 0x1F7F0, + 0x1F7F1, 0x1F800, 0x1F80C, 0x1F810, @@ -388940,27 +398960,27 @@ static const UV UNI_SO_invlist[] = { /* for EBCDIC 1047 */ 0x1F8B0, 0x1F8B2, 0x1F900, - 0x1F979, - 0x1F97A, - 0x1F9CC, - 0x1F9CD, 0x1FA54, 0x1FA60, 0x1FA6E, 0x1FA70, 0x1FA75, 0x1FA78, - 0x1FA7B, + 0x1FA7D, 0x1FA80, 0x1FA87, 0x1FA90, - 0x1FAA9, + 0x1FAAD, 0x1FAB0, - 0x1FAB7, + 0x1FABB, 0x1FAC0, - 0x1FAC3, + 0x1FAC6, 0x1FAD0, - 0x1FAD7, + 0x1FADA, + 0x1FAE0, + 0x1FAE8, + 0x1FAF0, + 0x1FAF7, 0x1FB00, 0x1FB93, 0x1FB94, @@ -388975,7 +398995,7 @@ static const UV UNI_SO_invlist[] = { /* for EBCDIC 1047 */ && '$' == 91 && '@' == 124 && '`' == 121 && '\n' == 37 static const UV UNI_SO_invlist[] = { /* for EBCDIC 037 */ - 365, /* Number of elements */ + 373, /* Number of elements */ 148565664, /* Version and data structure type */ 1, /* 0 if the list starts at 0; 1 if it starts at the element beyond 0 */ @@ -389194,8 +399214,12 @@ static const UV UNI_SO_invlist[] = { /* for EBCDIC 037 */ 0xA83A, 0xAA77, 0xAA7A, + 0xFD40, + 0xFD50, + 0xFDCF, + 0xFDD0, 0xFDFD, - 0xFDFE, + 0xFE00, 0xFFE4, 0xFFE5, 0xFFE8, @@ -389232,6 +399256,8 @@ static const UV UNI_SO_invlist[] = { /* for EBCDIC 037 */ 0x16B46, 0x1BC9C, 0x1BC9D, + 0x1CF50, + 0x1CFC4, 0x1D000, 0x1D0F6, 0x1D100, @@ -389245,7 +399271,7 @@ static const UV UNI_SO_invlist[] = { /* for EBCDIC 037 */ 0x1D18C, 0x1D1AA, 0x1D1AE, - 0x1D1E9, + 0x1D1EB, 0x1D200, 0x1D242, 0x1D245, @@ -389296,7 +399322,7 @@ static const UV UNI_SO_invlist[] = { /* for EBCDIC 037 */ 0x1F3FB, 0x1F400, 0x1F6D8, - 0x1F6E0, + 0x1F6DD, 0x1F6ED, 0x1F6F0, 0x1F6FD, @@ -389306,6 +399332,8 @@ static const UV UNI_SO_invlist[] = { /* for EBCDIC 037 */ 0x1F7D9, 0x1F7E0, 0x1F7EC, + 0x1F7F0, + 0x1F7F1, 0x1F800, 0x1F80C, 0x1F810, @@ -389319,27 +399347,27 @@ static const UV UNI_SO_invlist[] = { /* for EBCDIC 037 */ 0x1F8B0, 0x1F8B2, 0x1F900, - 0x1F979, - 0x1F97A, - 0x1F9CC, - 0x1F9CD, 0x1FA54, 0x1FA60, 0x1FA6E, 0x1FA70, 0x1FA75, 0x1FA78, - 0x1FA7B, + 0x1FA7D, 0x1FA80, 0x1FA87, 0x1FA90, - 0x1FAA9, + 0x1FAAD, 0x1FAB0, - 0x1FAB7, + 0x1FABB, 0x1FAC0, - 0x1FAC3, + 0x1FAC6, 0x1FAD0, - 0x1FAD7, + 0x1FADA, + 0x1FAE0, + 0x1FAE8, + 0x1FAF0, + 0x1FAF7, 0x1FB00, 0x1FB93, 0x1FB94, @@ -389405,7 +399433,7 @@ static const UV UNI_SPECIALS_invlist[] = { /* for all charsets */ # if 'A' == 65 /* ASCII/Latin1 */ static const UV UNI_STERM_invlist[] = { /* for ASCII/Latin1 */ - 153, /* Number of elements */ + 159, /* Number of elements */ 148565664, /* Version and data structure type */ 1, /* 0 if the list starts at 0; 1 if it starts at the element beyond 0 */ @@ -389418,7 +399446,7 @@ static const UV UNI_STERM_invlist[] = { /* for ASCII/Latin1 */ 0x40, 0x589, 0x58A, - 0x61E, + 0x61D, 0x620, 0x6D4, 0x6D5, @@ -389456,6 +399484,8 @@ static const UV UNI_STERM_invlist[] = { /* for ASCII/Latin1 */ 0x1B5C, 0x1B5E, 0x1B60, + 0x1B7D, + 0x1B7F, 0x1C3B, 0x1C3D, 0x1C7E, @@ -389468,6 +399498,8 @@ static const UV UNI_STERM_invlist[] = { /* for ASCII/Latin1 */ 0x2E2F, 0x2E3C, 0x2E3D, + 0x2E53, + 0x2E55, 0x3002, 0x3003, 0xA4FF, @@ -389508,6 +399540,8 @@ static const UV UNI_STERM_invlist[] = { /* for ASCII/Latin1 */ 0x10A58, 0x10F55, 0x10F5A, + 0x10F86, + 0x10F8A, 0x11047, 0x11049, 0x110BE, @@ -389572,7 +399606,7 @@ static const UV UNI_STERM_invlist[] = { /* for ASCII/Latin1 */ && '$' == 91 && '@' == 124 && '`' == 121 && '\n' == 21 static const UV UNI_STERM_invlist[] = { /* for EBCDIC 1047 */ - 153, /* Number of elements */ + 159, /* Number of elements */ 148565664, /* Version and data structure type */ 1, /* 0 if the list starts at 0; 1 if it starts at the element beyond 0 */ @@ -389585,7 +399619,7 @@ static const UV UNI_STERM_invlist[] = { /* for EBCDIC 1047 */ 0x70, 0x589, 0x58A, - 0x61E, + 0x61D, 0x620, 0x6D4, 0x6D5, @@ -389623,6 +399657,8 @@ static const UV UNI_STERM_invlist[] = { /* for EBCDIC 1047 */ 0x1B5C, 0x1B5E, 0x1B60, + 0x1B7D, + 0x1B7F, 0x1C3B, 0x1C3D, 0x1C7E, @@ -389635,6 +399671,8 @@ static const UV UNI_STERM_invlist[] = { /* for EBCDIC 1047 */ 0x2E2F, 0x2E3C, 0x2E3D, + 0x2E53, + 0x2E55, 0x3002, 0x3003, 0xA4FF, @@ -389675,6 +399713,8 @@ static const UV UNI_STERM_invlist[] = { /* for EBCDIC 1047 */ 0x10A58, 0x10F55, 0x10F5A, + 0x10F86, + 0x10F8A, 0x11047, 0x11049, 0x110BE, @@ -389739,7 +399779,7 @@ static const UV UNI_STERM_invlist[] = { /* for EBCDIC 1047 */ && '$' == 91 && '@' == 124 && '`' == 121 && '\n' == 37 static const UV UNI_STERM_invlist[] = { /* for EBCDIC 037 */ - 153, /* Number of elements */ + 159, /* Number of elements */ 148565664, /* Version and data structure type */ 1, /* 0 if the list starts at 0; 1 if it starts at the element beyond 0 */ @@ -389752,7 +399792,7 @@ static const UV UNI_STERM_invlist[] = { /* for EBCDIC 037 */ 0x70, 0x589, 0x58A, - 0x61E, + 0x61D, 0x620, 0x6D4, 0x6D5, @@ -389790,6 +399830,8 @@ static const UV UNI_STERM_invlist[] = { /* for EBCDIC 037 */ 0x1B5C, 0x1B5E, 0x1B60, + 0x1B7D, + 0x1B7F, 0x1C3B, 0x1C3D, 0x1C7E, @@ -389802,6 +399844,8 @@ static const UV UNI_STERM_invlist[] = { /* for EBCDIC 037 */ 0x2E2F, 0x2E3C, 0x2E3D, + 0x2E53, + 0x2E55, 0x3002, 0x3003, 0xA4FF, @@ -389842,6 +399886,8 @@ static const UV UNI_STERM_invlist[] = { /* for EBCDIC 037 */ 0x10A58, 0x10F55, 0x10F5A, + 0x10F86, + 0x10F8A, 0x11047, 0x11049, 0x110BE, @@ -390057,7 +400103,7 @@ static const UV UNI_SYMBOLSFORLEGACYCOMPUTING_invlist[] = { /* for all charsets }; static const UV UNI_SYRC_invlist[] = { /* for all charsets */ - 23, /* Number of elements */ + 25, /* Number of elements */ 148565664, /* Version and data structure type */ 1, /* 0 if the list starts at 0; 1 if it starts at the element beyond 0 */ @@ -390083,7 +400129,9 @@ static const UV UNI_SYRC_invlist[] = { /* for all charsets */ 0x860, 0x86B, 0x1DF8, - 0x1DF9 + 0x1DF9, + 0x1DFA, + 0x1DFB }; static const UV UNI_SYRIACSUP_invlist[] = { /* for all charsets */ @@ -390143,7 +400191,7 @@ static const UV UNI_TAKR_invlist[] = { /* for all charsets */ 0xA830, 0xA83A, 0x11680, - 0x116B9, + 0x116BA, 0x116C0, 0x116CA }; @@ -390279,7 +400327,7 @@ static const UV UNI_TANGUTSUP_invlist[] = { /* for all charsets */ 1 if it starts at the element beyond 0 */ 0x0, 0x18D00, - 0x18D90 + 0x18D80 }; static const UV UNI_TAVT_invlist[] = { /* for all charsets */ @@ -390295,7 +400343,7 @@ static const UV UNI_TAVT_invlist[] = { /* for all charsets */ }; static const UV UNI_TELU_invlist[] = { /* for all charsets */ - 33, /* Number of elements */ + 35, /* Number of elements */ 148565664, /* Version and data structure type */ 1, /* 0 if the list starts at 0; 1 if it starts at the element beyond 0 */ @@ -390312,7 +400360,7 @@ static const UV UNI_TELU_invlist[] = { /* for all charsets */ 0xC29, 0xC2A, 0xC3A, - 0xC3D, + 0xC3C, 0xC45, 0xC46, 0xC49, @@ -390322,6 +400370,8 @@ static const UV UNI_TELU_invlist[] = { /* for all charsets */ 0xC57, 0xC58, 0xC5B, + 0xC5D, + 0xC5E, 0xC60, 0xC64, 0xC66, @@ -390337,7 +400387,7 @@ static const UV UNI_TELU_invlist[] = { /* for all charsets */ # if 'A' == 65 /* ASCII/Latin1 */ static const UV UNI_TERM_invlist[] = { /* for ASCII/Latin1 */ - 209, /* Number of elements */ + 215, /* Number of elements */ 148565664, /* Version and data structure type */ 1, /* 0 if the list starts at 0; 1 if it starts at the element beyond 0 */ @@ -390364,7 +400414,7 @@ static const UV UNI_TERM_invlist[] = { /* for ASCII/Latin1 */ 0x60D, 0x61B, 0x61C, - 0x61E, + 0x61D, 0x620, 0x6D4, 0x6D5, @@ -390412,6 +400462,8 @@ static const UV UNI_TERM_invlist[] = { /* for ASCII/Latin1 */ 0x1B5C, 0x1B5D, 0x1B60, + 0x1B7D, + 0x1B7F, 0x1C3B, 0x1C40, 0x1C7E, @@ -390430,6 +400482,8 @@ static const UV UNI_TERM_invlist[] = { /* for ASCII/Latin1 */ 0x2E4D, 0x2E4E, 0x2E50, + 0x2E53, + 0x2E55, 0x3001, 0x3003, 0xA4FE, @@ -390490,6 +400544,8 @@ static const UV UNI_TERM_invlist[] = { /* for ASCII/Latin1 */ 0x10B9D, 0x10F55, 0x10F5A, + 0x10F86, + 0x10F8A, 0x11047, 0x1104E, 0x110BE, @@ -390560,7 +400616,7 @@ static const UV UNI_TERM_invlist[] = { /* for ASCII/Latin1 */ && '$' == 91 && '@' == 124 && '`' == 121 && '\n' == 21 static const UV UNI_TERM_invlist[] = { /* for EBCDIC 1047 */ - 211, /* Number of elements */ + 217, /* Number of elements */ 148565664, /* Version and data structure type */ 1, /* 0 if the list starts at 0; 1 if it starts at the element beyond 0 */ @@ -390589,7 +400645,7 @@ static const UV UNI_TERM_invlist[] = { /* for EBCDIC 1047 */ 0x60D, 0x61B, 0x61C, - 0x61E, + 0x61D, 0x620, 0x6D4, 0x6D5, @@ -390637,6 +400693,8 @@ static const UV UNI_TERM_invlist[] = { /* for EBCDIC 1047 */ 0x1B5C, 0x1B5D, 0x1B60, + 0x1B7D, + 0x1B7F, 0x1C3B, 0x1C40, 0x1C7E, @@ -390655,6 +400713,8 @@ static const UV UNI_TERM_invlist[] = { /* for EBCDIC 1047 */ 0x2E4D, 0x2E4E, 0x2E50, + 0x2E53, + 0x2E55, 0x3001, 0x3003, 0xA4FE, @@ -390715,6 +400775,8 @@ static const UV UNI_TERM_invlist[] = { /* for EBCDIC 1047 */ 0x10B9D, 0x10F55, 0x10F5A, + 0x10F86, + 0x10F8A, 0x11047, 0x1104E, 0x110BE, @@ -390785,7 +400847,7 @@ static const UV UNI_TERM_invlist[] = { /* for EBCDIC 1047 */ && '$' == 91 && '@' == 124 && '`' == 121 && '\n' == 37 static const UV UNI_TERM_invlist[] = { /* for EBCDIC 037 */ - 211, /* Number of elements */ + 217, /* Number of elements */ 148565664, /* Version and data structure type */ 1, /* 0 if the list starts at 0; 1 if it starts at the element beyond 0 */ @@ -390814,7 +400876,7 @@ static const UV UNI_TERM_invlist[] = { /* for EBCDIC 037 */ 0x60D, 0x61B, 0x61C, - 0x61E, + 0x61D, 0x620, 0x6D4, 0x6D5, @@ -390862,6 +400924,8 @@ static const UV UNI_TERM_invlist[] = { /* for EBCDIC 037 */ 0x1B5C, 0x1B5D, 0x1B60, + 0x1B7D, + 0x1B7F, 0x1C3B, 0x1C40, 0x1C7E, @@ -390880,6 +400944,8 @@ static const UV UNI_TERM_invlist[] = { /* for EBCDIC 037 */ 0x2E4D, 0x2E4E, 0x2E50, + 0x2E53, + 0x2E55, 0x3001, 0x3003, 0xA4FE, @@ -390940,6 +401006,8 @@ static const UV UNI_TERM_invlist[] = { /* for EBCDIC 037 */ 0x10B9D, 0x10F55, 0x10F5A, + 0x10F86, + 0x10F8A, 0x11047, 0x1104E, 0x110BE, @@ -391025,9 +401093,9 @@ static const UV UNI_TGLG_invlist[] = { /* for all charsets */ 1 if it starts at the element beyond 0 */ 0x0, 0x1700, - 0x170D, - 0x170E, - 0x1715, + 0x1716, + 0x171F, + 0x1720, 0x1735, 0x1737 }; @@ -391108,6 +401176,28 @@ static const UV UNI_TIRH_invlist[] = { /* for all charsets */ 0x114DA }; +static const UV UNI_TNSA_invlist[] = { /* for all charsets */ + 5, /* Number of elements */ + 148565664, /* Version and data structure type */ + 1, /* 0 if the list starts at 0; + 1 if it starts at the element beyond 0 */ + 0x0, + 0x16A70, + 0x16ABF, + 0x16AC0, + 0x16ACA +}; + +static const UV UNI_TOTO_invlist[] = { /* for all charsets */ + 3, /* Number of elements */ + 148565664, /* Version and data structure type */ + 1, /* 0 if the list starts at 0; + 1 if it starts at the element beyond 0 */ + 0x0, + 0x1E290, + 0x1E2AF +}; + static const UV UNI_TRANSPORTANDMAP_invlist[] = { /* for all charsets */ 3, /* Number of elements */ 148565664, /* Version and data structure type */ @@ -391138,6 +401228,16 @@ static const UV UNI_UCASEXT_invlist[] = { /* for all charsets */ 0x1900 }; +static const UV UNI_UCASEXTA_invlist[] = { /* for all charsets */ + 3, /* Number of elements */ + 148565664, /* Version and data structure type */ + 1, /* 0 if the list starts at 0; + 1 if it starts at the element beyond 0 */ + 0x0, + 0x11AB0, + 0x11AC0 +}; + static const UV UNI_UGAR_invlist[] = { /* for all charsets */ 5, /* Number of elements */ 148565664, /* Version and data structure type */ @@ -391159,7 +401259,7 @@ static const UV UNI_UIDEO_invlist[] = { /* for all charsets */ 0x3400, 0x4DC0, 0x4E00, - 0x9FFD, + 0xA000, 0xFA0E, 0xFA10, 0xFA11, @@ -391175,9 +401275,9 @@ static const UV UNI_UIDEO_invlist[] = { /* for all charsets */ 0xFA27, 0xFA2A, 0x20000, - 0x2A6DE, + 0x2A6E0, 0x2A700, - 0x2B735, + 0x2B739, 0x2B740, 0x2B81E, 0x2B820, @@ -391218,10 +401318,34 @@ static const UV UNI_VERTICALFORMS_invlist[] = { /* for all charsets */ 0xFE20 }; +static const UV UNI_VITH_invlist[] = { /* for all charsets */ + 17, /* Number of elements */ + 148565664, /* Version and data structure type */ + 1, /* 0 if the list starts at 0; + 1 if it starts at the element beyond 0 */ + 0x0, + 0x10570, + 0x1057B, + 0x1057C, + 0x1058B, + 0x1058C, + 0x10593, + 0x10594, + 0x10596, + 0x10597, + 0x105A2, + 0x105A3, + 0x105B2, + 0x105B3, + 0x105BA, + 0x105BB, + 0x105BD +}; + # if 'A' == 65 /* ASCII/Latin1 */ static const UV UNI_VO__R_invlist[] = { /* for ASCII/Latin1 */ - 177, /* Number of elements */ + 179, /* Number of elements */ 148565664, /* Version and data structure type */ 0, /* 0 if the list starts at 0; 1 if it starts at the element beyond 0 */ @@ -391375,15 +401499,17 @@ static const UV UNI_VO__R_invlist[] = { /* for ASCII/Latin1 */ 0x11580, 0x11600, 0x11A00, - 0x11AB0, + 0x11AC0, 0x13000, 0x13440, 0x14400, 0x14680, 0x16FE0, - 0x18D90, - 0x1B000, + 0x18D80, + 0x1AFF0, 0x1B300, + 0x1CF00, + 0x1CFD0, 0x1D000, 0x1D200, 0x1D2E0, @@ -391412,7 +401538,7 @@ static const UV UNI_VO__R_invlist[] = { /* for ASCII/Latin1 */ && '$' == 91 && '@' == 124 && '`' == 121 && '\n' == 21 static const UV UNI_VO__R_invlist[] = { /* for EBCDIC 1047 */ - 175, /* Number of elements */ + 177, /* Number of elements */ 148565664, /* Version and data structure type */ 0, /* 0 if the list starts at 0; 1 if it starts at the element beyond 0 */ @@ -391564,15 +401690,17 @@ static const UV UNI_VO__R_invlist[] = { /* for EBCDIC 1047 */ 0x11580, 0x11600, 0x11A00, - 0x11AB0, + 0x11AC0, 0x13000, 0x13440, 0x14400, 0x14680, 0x16FE0, - 0x18D90, - 0x1B000, + 0x18D80, + 0x1AFF0, 0x1B300, + 0x1CF00, + 0x1CFD0, 0x1D000, 0x1D200, 0x1D2E0, @@ -391601,7 +401729,7 @@ static const UV UNI_VO__R_invlist[] = { /* for EBCDIC 1047 */ && '$' == 91 && '@' == 124 && '`' == 121 && '\n' == 37 static const UV UNI_VO__R_invlist[] = { /* for EBCDIC 037 */ - 175, /* Number of elements */ + 177, /* Number of elements */ 148565664, /* Version and data structure type */ 0, /* 0 if the list starts at 0; 1 if it starts at the element beyond 0 */ @@ -391753,15 +401881,17 @@ static const UV UNI_VO__R_invlist[] = { /* for EBCDIC 037 */ 0x11580, 0x11600, 0x11A00, - 0x11AB0, + 0x11AC0, 0x13000, 0x13440, 0x14400, 0x14680, 0x16FE0, - 0x18D90, - 0x1B000, + 0x18D80, + 0x1AFF0, 0x1B300, + 0x1CF00, + 0x1CFD0, 0x1D000, 0x1D200, 0x1D2E0, @@ -391899,7 +402029,7 @@ static const UV UNI_VO__TU_invlist[] = { /* for all charsets */ # if 'A' == 65 /* ASCII/Latin1 */ static const UV UNI_VO__U_invlist[] = { /* for ASCII/Latin1 */ - 255, /* Number of elements */ + 257, /* Number of elements */ 148565664, /* Version and data structure type */ 1, /* 0 if the list starts at 0; 1 if it starts at the element beyond 0 */ @@ -392129,15 +402259,17 @@ static const UV UNI_VO__U_invlist[] = { /* for ASCII/Latin1 */ 0x11580, 0x11600, 0x11A00, - 0x11AB0, + 0x11AC0, 0x13000, 0x13440, 0x14400, 0x14680, 0x16FE0, - 0x18D90, - 0x1B000, + 0x18D80, + 0x1AFF0, 0x1B300, + 0x1CF00, + 0x1CFD0, 0x1D000, 0x1D200, 0x1D2E0, @@ -392168,7 +402300,7 @@ static const UV UNI_VO__U_invlist[] = { /* for ASCII/Latin1 */ && '$' == 91 && '@' == 124 && '`' == 121 && '\n' == 21 static const UV UNI_VO__U_invlist[] = { /* for EBCDIC 1047 */ - 253, /* Number of elements */ + 255, /* Number of elements */ 148565664, /* Version and data structure type */ 1, /* 0 if the list starts at 0; 1 if it starts at the element beyond 0 */ @@ -392396,15 +402528,17 @@ static const UV UNI_VO__U_invlist[] = { /* for EBCDIC 1047 */ 0x11580, 0x11600, 0x11A00, - 0x11AB0, + 0x11AC0, 0x13000, 0x13440, 0x14400, 0x14680, 0x16FE0, - 0x18D90, - 0x1B000, + 0x18D80, + 0x1AFF0, 0x1B300, + 0x1CF00, + 0x1CFD0, 0x1D000, 0x1D200, 0x1D2E0, @@ -392435,7 +402569,7 @@ static const UV UNI_VO__U_invlist[] = { /* for EBCDIC 1047 */ && '$' == 91 && '@' == 124 && '`' == 121 && '\n' == 37 static const UV UNI_VO__U_invlist[] = { /* for EBCDIC 037 */ - 253, /* Number of elements */ + 255, /* Number of elements */ 148565664, /* Version and data structure type */ 1, /* 0 if the list starts at 0; 1 if it starts at the element beyond 0 */ @@ -392663,15 +402797,17 @@ static const UV UNI_VO__U_invlist[] = { /* for EBCDIC 037 */ 0x11580, 0x11600, 0x11A00, - 0x11AB0, + 0x11AC0, 0x13000, 0x13440, 0x14400, 0x14680, 0x16FE0, - 0x18D90, - 0x1B000, + 0x18D80, + 0x1AFF0, 0x1B300, + 0x1CF00, + 0x1CFD0, 0x1D000, 0x1D200, 0x1D2E0, @@ -392697,13 +402833,15 @@ static const UV UNI_VO__U_invlist[] = { /* for EBCDIC 037 */ # endif /* EBCDIC 037 */ static const UV UNI_VS_invlist[] = { /* for all charsets */ - 7, /* Number of elements */ + 9, /* Number of elements */ 148565664, /* Version and data structure type */ 1, /* 0 if the list starts at 0; 1 if it starts at the element beyond 0 */ 0x0, 0x180B, 0x180E, + 0x180F, + 0x1810, 0xFE00, 0xFE10, 0xE0100, @@ -392872,7 +403010,7 @@ static const UV UNI_WB__EX_invlist[] = { /* for EBCDIC 037 */ # endif /* EBCDIC 037 */ static const UV UNI_WB__EXTEND_invlist[] = { /* for all charsets */ - 589, /* Number of elements */ + 607, /* Number of elements */ 148565664, /* Version and data structure type */ 1, /* 0 if the list starts at 0; 1 if it starts at the element beyond 0 */ @@ -392925,7 +403063,9 @@ static const UV UNI_WB__EXTEND_invlist[] = { /* for all charsets */ 0x82E, 0x859, 0x85C, - 0x8D3, + 0x898, + 0x8A0, + 0x8CA, 0x8E2, 0x8E3, 0x904, @@ -393009,6 +403149,8 @@ static const UV UNI_WB__EXTEND_invlist[] = { /* for all charsets */ 0xBD8, 0xC00, 0xC05, + 0xC3C, + 0xC3D, 0xC3E, 0xC45, 0xC46, @@ -393112,7 +403254,7 @@ static const UV UNI_WB__EXTEND_invlist[] = { /* for all charsets */ 0x135D, 0x1360, 0x1712, - 0x1715, + 0x1716, 0x1732, 0x1735, 0x1752, @@ -393125,6 +403267,8 @@ static const UV UNI_WB__EXTEND_invlist[] = { /* for all charsets */ 0x17DE, 0x180B, 0x180E, + 0x180F, + 0x1810, 0x1885, 0x1887, 0x18A9, @@ -393142,7 +403286,7 @@ static const UV UNI_WB__EXTEND_invlist[] = { /* for all charsets */ 0x1A7F, 0x1A80, 0x1AB0, - 0x1AC1, + 0x1ACF, 0x1B00, 0x1B05, 0x1B34, @@ -393168,8 +403312,6 @@ static const UV UNI_WB__EXTEND_invlist[] = { /* for all charsets */ 0x1CF7, 0x1CFA, 0x1DC0, - 0x1DFA, - 0x1DFB, 0x1E00, 0x200C, 0x200D, @@ -393279,14 +403421,22 @@ static const UV UNI_WB__EXTEND_invlist[] = { /* for all charsets */ 0x10EAD, 0x10F46, 0x10F51, + 0x10F82, + 0x10F86, 0x11000, 0x11003, 0x11038, 0x11047, + 0x11070, + 0x11071, + 0x11073, + 0x11075, 0x1107F, 0x11083, 0x110B0, 0x110BB, + 0x110C2, + 0x110C3, 0x11100, 0x11103, 0x11127, @@ -393417,6 +403567,10 @@ static const UV UNI_WB__EXTEND_invlist[] = { /* for all charsets */ 0x16FF2, 0x1BC9D, 0x1BC9F, + 0x1CF00, + 0x1CF2E, + 0x1CF30, + 0x1CF47, 0x1D165, 0x1D16A, 0x1D16D, @@ -393453,6 +403607,8 @@ static const UV UNI_WB__EXTEND_invlist[] = { /* for all charsets */ 0x1E02B, 0x1E130, 0x1E137, + 0x1E2AE, + 0x1E2AF, 0x1E2EC, 0x1E2F0, 0x1E8D0, @@ -393470,7 +403626,7 @@ static const UV UNI_WB__EXTEND_invlist[] = { /* for all charsets */ # if 'A' == 65 /* ASCII/Latin1 */ static const UV UNI_WB__FO_invlist[] = { /* for ASCII/Latin1 */ - 39, /* Number of elements */ + 41, /* Number of elements */ 148565664, /* Version and data structure type */ 1, /* 0 if the list starts at 0; 1 if it starts at the element beyond 0 */ @@ -393485,6 +403641,8 @@ static const UV UNI_WB__FO_invlist[] = { /* for ASCII/Latin1 */ 0x6DE, 0x70F, 0x710, + 0x890, + 0x892, 0x8E2, 0x8E3, 0x180E, @@ -393523,7 +403681,7 @@ static const UV UNI_WB__FO_invlist[] = { /* for ASCII/Latin1 */ && '$' == 91 && '@' == 124 && '`' == 121 && '\n' == 21 static const UV UNI_WB__FO_invlist[] = { /* for EBCDIC 1047 */ - 39, /* Number of elements */ + 41, /* Number of elements */ 148565664, /* Version and data structure type */ 1, /* 0 if the list starts at 0; 1 if it starts at the element beyond 0 */ @@ -393538,6 +403696,8 @@ static const UV UNI_WB__FO_invlist[] = { /* for EBCDIC 1047 */ 0x6DE, 0x70F, 0x710, + 0x890, + 0x892, 0x8E2, 0x8E3, 0x180E, @@ -393576,7 +403736,7 @@ static const UV UNI_WB__FO_invlist[] = { /* for EBCDIC 1047 */ && '$' == 91 && '@' == 124 && '`' == 121 && '\n' == 37 static const UV UNI_WB__FO_invlist[] = { /* for EBCDIC 037 */ - 39, /* Number of elements */ + 41, /* Number of elements */ 148565664, /* Version and data structure type */ 1, /* 0 if the list starts at 0; 1 if it starts at the element beyond 0 */ @@ -393591,6 +403751,8 @@ static const UV UNI_WB__FO_invlist[] = { /* for EBCDIC 037 */ 0x6DE, 0x70F, 0x710, + 0x890, + 0x892, 0x8E2, 0x8E3, 0x180E, @@ -393624,7 +403786,7 @@ static const UV UNI_WB__FO_invlist[] = { /* for EBCDIC 037 */ # endif /* EBCDIC 037 */ static const UV UNI_WB__KA_invlist[] = { /* for all charsets */ - 21, /* Number of elements */ + 29, /* Number of elements */ 148565664, /* Version and data structure type */ 1, /* 0 if the list starts at 0; 1 if it starts at the element beyond 0 */ @@ -393645,8 +403807,16 @@ static const UV UNI_WB__KA_invlist[] = { /* for all charsets */ 0x3358, 0xFF66, 0xFF9E, + 0x1AFF0, + 0x1AFF4, + 0x1AFF5, + 0x1AFFC, + 0x1AFFD, + 0x1AFFF, 0x1B000, 0x1B001, + 0x1B120, + 0x1B123, 0x1B164, 0x1B168 }; @@ -393654,7 +403824,7 @@ static const UV UNI_WB__KA_invlist[] = { /* for all charsets */ # if 'A' == 65 /* ASCII/Latin1 */ static const UV UNI_WB__LE_invlist[] = { /* for ASCII/Latin1 */ - 1095, /* Number of elements */ + 1141, /* Number of elements */ 148565664, /* Version and data structure type */ 1, /* 0 if the list starts at 0; 1 if it starts at the element beyond 0 */ @@ -393753,10 +403923,12 @@ static const UV UNI_WB__LE_invlist[] = { /* for ASCII/Latin1 */ 0x859, 0x860, 0x86B, + 0x870, + 0x888, + 0x889, + 0x88F, 0x8A0, - 0x8B5, - 0x8B6, - 0x8C8, + 0x8CA, 0x904, 0x93A, 0x93D, @@ -393885,6 +404057,8 @@ static const UV UNI_WB__LE_invlist[] = { /* for ASCII/Latin1 */ 0xC3E, 0xC58, 0xC5B, + 0xC5D, + 0xC5E, 0xC60, 0xC62, 0xC80, @@ -393901,7 +404075,7 @@ static const UV UNI_WB__LE_invlist[] = { /* for ASCII/Latin1 */ 0xCBA, 0xCBD, 0xCBE, - 0xCDE, + 0xCDD, 0xCDF, 0xCE0, 0xCE2, @@ -393998,10 +404172,8 @@ static const UV UNI_WB__LE_invlist[] = { /* for ASCII/Latin1 */ 0x16EE, 0x16F9, 0x1700, - 0x170D, - 0x170E, 0x1712, - 0x1720, + 0x171F, 0x1732, 0x1740, 0x1752, @@ -394026,7 +404198,7 @@ static const UV UNI_WB__LE_invlist[] = { /* for ASCII/Latin1 */ 0x1B05, 0x1B34, 0x1B45, - 0x1B4C, + 0x1B4D, 0x1B83, 0x1BA1, 0x1BAE, @@ -394130,10 +404302,6 @@ static const UV UNI_WB__LE_invlist[] = { /* for ASCII/Latin1 */ 0x24B6, 0x24EA, 0x2C00, - 0x2C2F, - 0x2C30, - 0x2C5F, - 0x2C60, 0x2CE5, 0x2CEB, 0x2CEF, @@ -394196,10 +404364,14 @@ static const UV UNI_WB__LE_invlist[] = { /* for ASCII/Latin1 */ 0xA6A0, 0xA6F0, 0xA708, - 0xA7C0, - 0xA7C2, 0xA7CB, - 0xA7F5, + 0xA7D0, + 0xA7D2, + 0xA7D3, + 0xA7D4, + 0xA7D5, + 0xA7DA, + 0xA7F2, 0xA802, 0xA803, 0xA806, @@ -394333,12 +404505,34 @@ static const UV UNI_WB__LE_invlist[] = { /* for ASCII/Latin1 */ 0x10528, 0x10530, 0x10564, + 0x10570, + 0x1057B, + 0x1057C, + 0x1058B, + 0x1058C, + 0x10593, + 0x10594, + 0x10596, + 0x10597, + 0x105A2, + 0x105A3, + 0x105B2, + 0x105B3, + 0x105BA, + 0x105BB, + 0x105BD, 0x10600, 0x10737, 0x10740, 0x10756, 0x10760, 0x10768, + 0x10780, + 0x10786, + 0x10787, + 0x107B1, + 0x107B2, + 0x107BB, 0x10800, 0x10806, 0x10808, @@ -394409,12 +404603,18 @@ static const UV UNI_WB__LE_invlist[] = { /* for ASCII/Latin1 */ 0x10F28, 0x10F30, 0x10F46, + 0x10F70, + 0x10F82, 0x10FB0, 0x10FC5, 0x10FE0, 0x10FF7, 0x11003, 0x11038, + 0x11071, + 0x11073, + 0x11075, + 0x11076, 0x11083, 0x110B0, 0x110D0, @@ -394533,7 +404733,7 @@ static const UV UNI_WB__LE_invlist[] = { /* for ASCII/Latin1 */ 0x11A8A, 0x11A9D, 0x11A9E, - 0x11AC0, + 0x11AB0, 0x11AF9, 0x11C00, 0x11C09, @@ -394569,6 +404769,8 @@ static const UV UNI_WB__LE_invlist[] = { /* for ASCII/Latin1 */ 0x1246F, 0x12480, 0x12544, + 0x12F90, + 0x12FF1, 0x13000, 0x1342F, 0x14400, @@ -394577,6 +404779,8 @@ static const UV UNI_WB__LE_invlist[] = { /* for ASCII/Latin1 */ 0x16A39, 0x16A40, 0x16A5F, + 0x16A70, + 0x16ABF, 0x16AD0, 0x16AEE, 0x16B00, @@ -394667,14 +404871,26 @@ static const UV UNI_WB__LE_invlist[] = { /* for ASCII/Latin1 */ 0x1D7C3, 0x1D7C4, 0x1D7CC, + 0x1DF00, + 0x1DF1F, 0x1E100, 0x1E12D, 0x1E137, 0x1E13E, 0x1E14E, 0x1E14F, + 0x1E290, + 0x1E2AE, 0x1E2C0, 0x1E2EC, + 0x1E7E0, + 0x1E7E7, + 0x1E7E8, + 0x1E7EC, + 0x1E7ED, + 0x1E7EF, + 0x1E7F0, + 0x1E7FF, 0x1E800, 0x1E8C5, 0x1E900, @@ -394763,7 +404979,7 @@ static const UV UNI_WB__LE_invlist[] = { /* for ASCII/Latin1 */ && '$' == 91 && '@' == 124 && '`' == 121 && '\n' == 21 static const UV UNI_WB__LE_invlist[] = { /* for EBCDIC 1047 */ - 1121, /* Number of elements */ + 1167, /* Number of elements */ 148565664, /* Version and data structure type */ 1, /* 0 if the list starts at 0; 1 if it starts at the element beyond 0 */ @@ -394888,10 +405104,12 @@ static const UV UNI_WB__LE_invlist[] = { /* for EBCDIC 1047 */ 0x859, 0x860, 0x86B, + 0x870, + 0x888, + 0x889, + 0x88F, 0x8A0, - 0x8B5, - 0x8B6, - 0x8C8, + 0x8CA, 0x904, 0x93A, 0x93D, @@ -395020,6 +405238,8 @@ static const UV UNI_WB__LE_invlist[] = { /* for EBCDIC 1047 */ 0xC3E, 0xC58, 0xC5B, + 0xC5D, + 0xC5E, 0xC60, 0xC62, 0xC80, @@ -395036,7 +405256,7 @@ static const UV UNI_WB__LE_invlist[] = { /* for EBCDIC 1047 */ 0xCBA, 0xCBD, 0xCBE, - 0xCDE, + 0xCDD, 0xCDF, 0xCE0, 0xCE2, @@ -395133,10 +405353,8 @@ static const UV UNI_WB__LE_invlist[] = { /* for EBCDIC 1047 */ 0x16EE, 0x16F9, 0x1700, - 0x170D, - 0x170E, 0x1712, - 0x1720, + 0x171F, 0x1732, 0x1740, 0x1752, @@ -395161,7 +405379,7 @@ static const UV UNI_WB__LE_invlist[] = { /* for EBCDIC 1047 */ 0x1B05, 0x1B34, 0x1B45, - 0x1B4C, + 0x1B4D, 0x1B83, 0x1BA1, 0x1BAE, @@ -395265,10 +405483,6 @@ static const UV UNI_WB__LE_invlist[] = { /* for EBCDIC 1047 */ 0x24B6, 0x24EA, 0x2C00, - 0x2C2F, - 0x2C30, - 0x2C5F, - 0x2C60, 0x2CE5, 0x2CEB, 0x2CEF, @@ -395331,10 +405545,14 @@ static const UV UNI_WB__LE_invlist[] = { /* for EBCDIC 1047 */ 0xA6A0, 0xA6F0, 0xA708, - 0xA7C0, - 0xA7C2, 0xA7CB, - 0xA7F5, + 0xA7D0, + 0xA7D2, + 0xA7D3, + 0xA7D4, + 0xA7D5, + 0xA7DA, + 0xA7F2, 0xA802, 0xA803, 0xA806, @@ -395468,12 +405686,34 @@ static const UV UNI_WB__LE_invlist[] = { /* for EBCDIC 1047 */ 0x10528, 0x10530, 0x10564, + 0x10570, + 0x1057B, + 0x1057C, + 0x1058B, + 0x1058C, + 0x10593, + 0x10594, + 0x10596, + 0x10597, + 0x105A2, + 0x105A3, + 0x105B2, + 0x105B3, + 0x105BA, + 0x105BB, + 0x105BD, 0x10600, 0x10737, 0x10740, 0x10756, 0x10760, 0x10768, + 0x10780, + 0x10786, + 0x10787, + 0x107B1, + 0x107B2, + 0x107BB, 0x10800, 0x10806, 0x10808, @@ -395544,12 +405784,18 @@ static const UV UNI_WB__LE_invlist[] = { /* for EBCDIC 1047 */ 0x10F28, 0x10F30, 0x10F46, + 0x10F70, + 0x10F82, 0x10FB0, 0x10FC5, 0x10FE0, 0x10FF7, 0x11003, 0x11038, + 0x11071, + 0x11073, + 0x11075, + 0x11076, 0x11083, 0x110B0, 0x110D0, @@ -395668,7 +405914,7 @@ static const UV UNI_WB__LE_invlist[] = { /* for EBCDIC 1047 */ 0x11A8A, 0x11A9D, 0x11A9E, - 0x11AC0, + 0x11AB0, 0x11AF9, 0x11C00, 0x11C09, @@ -395704,6 +405950,8 @@ static const UV UNI_WB__LE_invlist[] = { /* for EBCDIC 1047 */ 0x1246F, 0x12480, 0x12544, + 0x12F90, + 0x12FF1, 0x13000, 0x1342F, 0x14400, @@ -395712,6 +405960,8 @@ static const UV UNI_WB__LE_invlist[] = { /* for EBCDIC 1047 */ 0x16A39, 0x16A40, 0x16A5F, + 0x16A70, + 0x16ABF, 0x16AD0, 0x16AEE, 0x16B00, @@ -395802,14 +406052,26 @@ static const UV UNI_WB__LE_invlist[] = { /* for EBCDIC 1047 */ 0x1D7C3, 0x1D7C4, 0x1D7CC, + 0x1DF00, + 0x1DF1F, 0x1E100, 0x1E12D, 0x1E137, 0x1E13E, 0x1E14E, 0x1E14F, + 0x1E290, + 0x1E2AE, 0x1E2C0, 0x1E2EC, + 0x1E7E0, + 0x1E7E7, + 0x1E7E8, + 0x1E7EC, + 0x1E7ED, + 0x1E7EF, + 0x1E7F0, + 0x1E7FF, 0x1E800, 0x1E8C5, 0x1E900, @@ -395898,7 +406160,7 @@ static const UV UNI_WB__LE_invlist[] = { /* for EBCDIC 1047 */ && '$' == 91 && '@' == 124 && '`' == 121 && '\n' == 37 static const UV UNI_WB__LE_invlist[] = { /* for EBCDIC 037 */ - 1117, /* Number of elements */ + 1163, /* Number of elements */ 148565664, /* Version and data structure type */ 1, /* 0 if the list starts at 0; 1 if it starts at the element beyond 0 */ @@ -396019,10 +406281,12 @@ static const UV UNI_WB__LE_invlist[] = { /* for EBCDIC 037 */ 0x859, 0x860, 0x86B, + 0x870, + 0x888, + 0x889, + 0x88F, 0x8A0, - 0x8B5, - 0x8B6, - 0x8C8, + 0x8CA, 0x904, 0x93A, 0x93D, @@ -396151,6 +406415,8 @@ static const UV UNI_WB__LE_invlist[] = { /* for EBCDIC 037 */ 0xC3E, 0xC58, 0xC5B, + 0xC5D, + 0xC5E, 0xC60, 0xC62, 0xC80, @@ -396167,7 +406433,7 @@ static const UV UNI_WB__LE_invlist[] = { /* for EBCDIC 037 */ 0xCBA, 0xCBD, 0xCBE, - 0xCDE, + 0xCDD, 0xCDF, 0xCE0, 0xCE2, @@ -396264,10 +406530,8 @@ static const UV UNI_WB__LE_invlist[] = { /* for EBCDIC 037 */ 0x16EE, 0x16F9, 0x1700, - 0x170D, - 0x170E, 0x1712, - 0x1720, + 0x171F, 0x1732, 0x1740, 0x1752, @@ -396292,7 +406556,7 @@ static const UV UNI_WB__LE_invlist[] = { /* for EBCDIC 037 */ 0x1B05, 0x1B34, 0x1B45, - 0x1B4C, + 0x1B4D, 0x1B83, 0x1BA1, 0x1BAE, @@ -396396,10 +406660,6 @@ static const UV UNI_WB__LE_invlist[] = { /* for EBCDIC 037 */ 0x24B6, 0x24EA, 0x2C00, - 0x2C2F, - 0x2C30, - 0x2C5F, - 0x2C60, 0x2CE5, 0x2CEB, 0x2CEF, @@ -396462,10 +406722,14 @@ static const UV UNI_WB__LE_invlist[] = { /* for EBCDIC 037 */ 0xA6A0, 0xA6F0, 0xA708, - 0xA7C0, - 0xA7C2, 0xA7CB, - 0xA7F5, + 0xA7D0, + 0xA7D2, + 0xA7D3, + 0xA7D4, + 0xA7D5, + 0xA7DA, + 0xA7F2, 0xA802, 0xA803, 0xA806, @@ -396599,12 +406863,34 @@ static const UV UNI_WB__LE_invlist[] = { /* for EBCDIC 037 */ 0x10528, 0x10530, 0x10564, + 0x10570, + 0x1057B, + 0x1057C, + 0x1058B, + 0x1058C, + 0x10593, + 0x10594, + 0x10596, + 0x10597, + 0x105A2, + 0x105A3, + 0x105B2, + 0x105B3, + 0x105BA, + 0x105BB, + 0x105BD, 0x10600, 0x10737, 0x10740, 0x10756, 0x10760, 0x10768, + 0x10780, + 0x10786, + 0x10787, + 0x107B1, + 0x107B2, + 0x107BB, 0x10800, 0x10806, 0x10808, @@ -396675,12 +406961,18 @@ static const UV UNI_WB__LE_invlist[] = { /* for EBCDIC 037 */ 0x10F28, 0x10F30, 0x10F46, + 0x10F70, + 0x10F82, 0x10FB0, 0x10FC5, 0x10FE0, 0x10FF7, 0x11003, 0x11038, + 0x11071, + 0x11073, + 0x11075, + 0x11076, 0x11083, 0x110B0, 0x110D0, @@ -396799,7 +407091,7 @@ static const UV UNI_WB__LE_invlist[] = { /* for EBCDIC 037 */ 0x11A8A, 0x11A9D, 0x11A9E, - 0x11AC0, + 0x11AB0, 0x11AF9, 0x11C00, 0x11C09, @@ -396835,6 +407127,8 @@ static const UV UNI_WB__LE_invlist[] = { /* for EBCDIC 037 */ 0x1246F, 0x12480, 0x12544, + 0x12F90, + 0x12FF1, 0x13000, 0x1342F, 0x14400, @@ -396843,6 +407137,8 @@ static const UV UNI_WB__LE_invlist[] = { /* for EBCDIC 037 */ 0x16A39, 0x16A40, 0x16A5F, + 0x16A70, + 0x16ABF, 0x16AD0, 0x16AEE, 0x16B00, @@ -396933,14 +407229,26 @@ static const UV UNI_WB__LE_invlist[] = { /* for EBCDIC 037 */ 0x1D7C3, 0x1D7C4, 0x1D7CC, + 0x1DF00, + 0x1DF1F, 0x1E100, 0x1E12D, 0x1E137, 0x1E13E, 0x1E14E, 0x1E14F, + 0x1E290, + 0x1E2AE, 0x1E2C0, 0x1E2EC, + 0x1E7E0, + 0x1E7E7, + 0x1E7E8, + 0x1E7EC, + 0x1E7ED, + 0x1E7EF, + 0x1E7F0, + 0x1E7FF, 0x1E800, 0x1E8C5, 0x1E900, @@ -397386,7 +407694,7 @@ static const UV UNI_WB__NL_invlist[] = { /* for EBCDIC 037 */ # if 'A' == 65 /* ASCII/Latin1 */ static const UV UNI_WB__NU_invlist[] = { /* for ASCII/Latin1 */ - 125, /* Number of elements */ + 127, /* Number of elements */ 148565664, /* Version and data structure type */ 1, /* 0 if the list starts at 0; 1 if it starts at the element beyond 0 */ @@ -397503,6 +407811,8 @@ static const UV UNI_WB__NU_invlist[] = { /* for ASCII/Latin1 */ 0x11DAA, 0x16A60, 0x16A6A, + 0x16AC0, + 0x16ACA, 0x16B50, 0x16B5A, 0x1D7CE, @@ -397525,7 +407835,7 @@ static const UV UNI_WB__NU_invlist[] = { /* for ASCII/Latin1 */ && '$' == 91 && '@' == 124 && '`' == 121 && '\n' == 21 static const UV UNI_WB__NU_invlist[] = { /* for EBCDIC 1047 */ - 125, /* Number of elements */ + 127, /* Number of elements */ 148565664, /* Version and data structure type */ 1, /* 0 if the list starts at 0; 1 if it starts at the element beyond 0 */ @@ -397642,6 +407952,8 @@ static const UV UNI_WB__NU_invlist[] = { /* for EBCDIC 1047 */ 0x11DAA, 0x16A60, 0x16A6A, + 0x16AC0, + 0x16ACA, 0x16B50, 0x16B5A, 0x1D7CE, @@ -397664,7 +407976,7 @@ static const UV UNI_WB__NU_invlist[] = { /* for EBCDIC 1047 */ && '$' == 91 && '@' == 124 && '`' == 121 && '\n' == 37 static const UV UNI_WB__NU_invlist[] = { /* for EBCDIC 037 */ - 125, /* Number of elements */ + 127, /* Number of elements */ 148565664, /* Version and data structure type */ 1, /* 0 if the list starts at 0; 1 if it starts at the element beyond 0 */ @@ -397781,6 +408093,8 @@ static const UV UNI_WB__NU_invlist[] = { /* for EBCDIC 037 */ 0x11DAA, 0x16A60, 0x16A6A, + 0x16AC0, + 0x16ACA, 0x16B50, 0x16B5A, 0x1D7CE, @@ -397926,7 +408240,7 @@ static const UV UNI_WB__WSEGSPACE_invlist[] = { /* for EBCDIC 037 */ # if 'A' == 65 /* ASCII/Latin1 */ static const UV UNI_WB__XX_invlist[] = { /* for ASCII/Latin1 */ - 1487, /* Number of elements */ + 1541, /* Number of elements */ 148565664, /* Version and data structure type */ 0, /* 0 if the list starts at 0; 1 if it starts at the element beyond 0 */ @@ -398047,11 +408361,13 @@ static const UV UNI_WB__XX_invlist[] = { /* for ASCII/Latin1 */ 0x85C, 0x860, 0x86B, - 0x8A0, - 0x8B5, - 0x8B6, - 0x8C8, - 0x8D3, + 0x870, + 0x888, + 0x889, + 0x88F, + 0x890, + 0x892, + 0x898, 0x964, 0x966, 0x970, @@ -398217,7 +408533,7 @@ static const UV UNI_WB__XX_invlist[] = { /* for ASCII/Latin1 */ 0xC29, 0xC2A, 0xC3A, - 0xC3D, + 0xC3C, 0xC45, 0xC46, 0xC49, @@ -398227,6 +408543,8 @@ static const UV UNI_WB__XX_invlist[] = { /* for ASCII/Latin1 */ 0xC57, 0xC58, 0xC5B, + 0xC5D, + 0xC5E, 0xC60, 0xC64, 0xC66, @@ -398251,7 +408569,7 @@ static const UV UNI_WB__XX_invlist[] = { /* for ASCII/Latin1 */ 0xCCE, 0xCD5, 0xCD7, - 0xCDE, + 0xCDD, 0xCDF, 0xCE0, 0xCE4, @@ -398416,10 +408734,8 @@ static const UV UNI_WB__XX_invlist[] = { /* for ASCII/Latin1 */ 0x16EE, 0x16F9, 0x1700, - 0x170D, - 0x170E, - 0x1715, - 0x1720, + 0x1716, + 0x171F, 0x1735, 0x1740, 0x1754, @@ -398436,8 +408752,6 @@ static const UV UNI_WB__XX_invlist[] = { /* for ASCII/Latin1 */ 0x17E0, 0x17EA, 0x180B, - 0x180F, - 0x1810, 0x181A, 0x1820, 0x1879, @@ -398466,9 +408780,9 @@ static const UV UNI_WB__XX_invlist[] = { /* for ASCII/Latin1 */ 0x1A90, 0x1A9A, 0x1AB0, - 0x1AC1, + 0x1ACF, 0x1B00, - 0x1B4C, + 0x1B4D, 0x1B50, 0x1B5A, 0x1B6B, @@ -398492,8 +408806,6 @@ static const UV UNI_WB__XX_invlist[] = { /* for ASCII/Latin1 */ 0x1CD4, 0x1CFB, 0x1D00, - 0x1DFA, - 0x1DFB, 0x1F16, 0x1F18, 0x1F1E, @@ -398592,10 +408904,6 @@ static const UV UNI_WB__XX_invlist[] = { /* for ASCII/Latin1 */ 0x24B6, 0x24EA, 0x2C00, - 0x2C2F, - 0x2C30, - 0x2C5F, - 0x2C60, 0x2CE5, 0x2CEB, 0x2CF4, @@ -398674,10 +408982,14 @@ static const UV UNI_WB__XX_invlist[] = { /* for ASCII/Latin1 */ 0xA67F, 0xA6F2, 0xA708, - 0xA7C0, - 0xA7C2, 0xA7CB, - 0xA7F5, + 0xA7D0, + 0xA7D2, + 0xA7D3, + 0xA7D4, + 0xA7D5, + 0xA7DA, + 0xA7F2, 0xA828, 0xA82C, 0xA82D, @@ -398873,12 +409185,34 @@ static const UV UNI_WB__XX_invlist[] = { /* for ASCII/Latin1 */ 0x10528, 0x10530, 0x10564, + 0x10570, + 0x1057B, + 0x1057C, + 0x1058B, + 0x1058C, + 0x10593, + 0x10594, + 0x10596, + 0x10597, + 0x105A2, + 0x105A3, + 0x105B2, + 0x105B3, + 0x105BA, + 0x105BB, + 0x105BD, 0x10600, 0x10737, 0x10740, 0x10756, 0x10760, 0x10768, + 0x10780, + 0x10786, + 0x10787, + 0x107B1, + 0x107B2, + 0x107BB, 0x10800, 0x10806, 0x10808, @@ -398959,6 +409293,8 @@ static const UV UNI_WB__XX_invlist[] = { /* for ASCII/Latin1 */ 0x10F28, 0x10F30, 0x10F51, + 0x10F70, + 0x10F86, 0x10FB0, 0x10FC5, 0x10FE0, @@ -398966,11 +409302,13 @@ static const UV UNI_WB__XX_invlist[] = { /* for ASCII/Latin1 */ 0x11000, 0x11047, 0x11066, - 0x11070, + 0x11076, 0x1107F, 0x110BB, 0x110BD, 0x110BE, + 0x110C2, + 0x110C3, 0x110CD, 0x110CE, 0x110D0, @@ -399113,7 +409451,7 @@ static const UV UNI_WB__XX_invlist[] = { /* for ASCII/Latin1 */ 0x11A9A, 0x11A9D, 0x11A9E, - 0x11AC0, + 0x11AB0, 0x11AF9, 0x11C00, 0x11C09, @@ -399165,6 +409503,8 @@ static const UV UNI_WB__XX_invlist[] = { /* for ASCII/Latin1 */ 0x1246F, 0x12480, 0x12544, + 0x12F90, + 0x12FF1, 0x13000, 0x1342F, 0x13430, @@ -399177,6 +409517,10 @@ static const UV UNI_WB__XX_invlist[] = { /* for ASCII/Latin1 */ 0x16A5F, 0x16A60, 0x16A6A, + 0x16A70, + 0x16ABF, + 0x16AC0, + 0x16ACA, 0x16AD0, 0x16AEE, 0x16AF0, @@ -399205,8 +409549,16 @@ static const UV UNI_WB__XX_invlist[] = { /* for ASCII/Latin1 */ 0x16FE5, 0x16FF0, 0x16FF2, + 0x1AFF0, + 0x1AFF4, + 0x1AFF5, + 0x1AFFC, + 0x1AFFD, + 0x1AFFF, 0x1B000, 0x1B001, + 0x1B120, + 0x1B123, 0x1B164, 0x1B168, 0x1BC00, @@ -399221,6 +409573,10 @@ static const UV UNI_WB__XX_invlist[] = { /* for ASCII/Latin1 */ 0x1BC9F, 0x1BCA0, 0x1BCA4, + 0x1CF00, + 0x1CF2E, + 0x1CF30, + 0x1CF47, 0x1D165, 0x1D16A, 0x1D16D, @@ -399305,6 +409661,8 @@ static const UV UNI_WB__XX_invlist[] = { /* for ASCII/Latin1 */ 0x1DAA0, 0x1DAA1, 0x1DAB0, + 0x1DF00, + 0x1DF1F, 0x1E000, 0x1E007, 0x1E008, @@ -399323,8 +409681,18 @@ static const UV UNI_WB__XX_invlist[] = { /* for ASCII/Latin1 */ 0x1E14A, 0x1E14E, 0x1E14F, + 0x1E290, + 0x1E2AF, 0x1E2C0, 0x1E2FA, + 0x1E7E0, + 0x1E7E7, + 0x1E7E8, + 0x1E7EC, + 0x1E7ED, + 0x1E7EF, + 0x1E7F0, + 0x1E7FF, 0x1E800, 0x1E8C5, 0x1E8D0, @@ -399427,7 +409795,7 @@ static const UV UNI_WB__XX_invlist[] = { /* for ASCII/Latin1 */ && '$' == 91 && '@' == 124 && '`' == 121 && '\n' == 21 static const UV UNI_WB__XX_invlist[] = { /* for EBCDIC 1047 */ - 1511, /* Number of elements */ + 1565, /* Number of elements */ 148565664, /* Version and data structure type */ 0, /* 0 if the list starts at 0; 1 if it starts at the element beyond 0 */ @@ -399572,11 +409940,13 @@ static const UV UNI_WB__XX_invlist[] = { /* for EBCDIC 1047 */ 0x85C, 0x860, 0x86B, - 0x8A0, - 0x8B5, - 0x8B6, - 0x8C8, - 0x8D3, + 0x870, + 0x888, + 0x889, + 0x88F, + 0x890, + 0x892, + 0x898, 0x964, 0x966, 0x970, @@ -399742,7 +410112,7 @@ static const UV UNI_WB__XX_invlist[] = { /* for EBCDIC 1047 */ 0xC29, 0xC2A, 0xC3A, - 0xC3D, + 0xC3C, 0xC45, 0xC46, 0xC49, @@ -399752,6 +410122,8 @@ static const UV UNI_WB__XX_invlist[] = { /* for EBCDIC 1047 */ 0xC57, 0xC58, 0xC5B, + 0xC5D, + 0xC5E, 0xC60, 0xC64, 0xC66, @@ -399776,7 +410148,7 @@ static const UV UNI_WB__XX_invlist[] = { /* for EBCDIC 1047 */ 0xCCE, 0xCD5, 0xCD7, - 0xCDE, + 0xCDD, 0xCDF, 0xCE0, 0xCE4, @@ -399941,10 +410313,8 @@ static const UV UNI_WB__XX_invlist[] = { /* for EBCDIC 1047 */ 0x16EE, 0x16F9, 0x1700, - 0x170D, - 0x170E, - 0x1715, - 0x1720, + 0x1716, + 0x171F, 0x1735, 0x1740, 0x1754, @@ -399961,8 +410331,6 @@ static const UV UNI_WB__XX_invlist[] = { /* for EBCDIC 1047 */ 0x17E0, 0x17EA, 0x180B, - 0x180F, - 0x1810, 0x181A, 0x1820, 0x1879, @@ -399991,9 +410359,9 @@ static const UV UNI_WB__XX_invlist[] = { /* for EBCDIC 1047 */ 0x1A90, 0x1A9A, 0x1AB0, - 0x1AC1, + 0x1ACF, 0x1B00, - 0x1B4C, + 0x1B4D, 0x1B50, 0x1B5A, 0x1B6B, @@ -400017,8 +410385,6 @@ static const UV UNI_WB__XX_invlist[] = { /* for EBCDIC 1047 */ 0x1CD4, 0x1CFB, 0x1D00, - 0x1DFA, - 0x1DFB, 0x1F16, 0x1F18, 0x1F1E, @@ -400117,10 +410483,6 @@ static const UV UNI_WB__XX_invlist[] = { /* for EBCDIC 1047 */ 0x24B6, 0x24EA, 0x2C00, - 0x2C2F, - 0x2C30, - 0x2C5F, - 0x2C60, 0x2CE5, 0x2CEB, 0x2CF4, @@ -400199,10 +410561,14 @@ static const UV UNI_WB__XX_invlist[] = { /* for EBCDIC 1047 */ 0xA67F, 0xA6F2, 0xA708, - 0xA7C0, - 0xA7C2, 0xA7CB, - 0xA7F5, + 0xA7D0, + 0xA7D2, + 0xA7D3, + 0xA7D4, + 0xA7D5, + 0xA7DA, + 0xA7F2, 0xA828, 0xA82C, 0xA82D, @@ -400398,12 +410764,34 @@ static const UV UNI_WB__XX_invlist[] = { /* for EBCDIC 1047 */ 0x10528, 0x10530, 0x10564, + 0x10570, + 0x1057B, + 0x1057C, + 0x1058B, + 0x1058C, + 0x10593, + 0x10594, + 0x10596, + 0x10597, + 0x105A2, + 0x105A3, + 0x105B2, + 0x105B3, + 0x105BA, + 0x105BB, + 0x105BD, 0x10600, 0x10737, 0x10740, 0x10756, 0x10760, 0x10768, + 0x10780, + 0x10786, + 0x10787, + 0x107B1, + 0x107B2, + 0x107BB, 0x10800, 0x10806, 0x10808, @@ -400484,6 +410872,8 @@ static const UV UNI_WB__XX_invlist[] = { /* for EBCDIC 1047 */ 0x10F28, 0x10F30, 0x10F51, + 0x10F70, + 0x10F86, 0x10FB0, 0x10FC5, 0x10FE0, @@ -400491,11 +410881,13 @@ static const UV UNI_WB__XX_invlist[] = { /* for EBCDIC 1047 */ 0x11000, 0x11047, 0x11066, - 0x11070, + 0x11076, 0x1107F, 0x110BB, 0x110BD, 0x110BE, + 0x110C2, + 0x110C3, 0x110CD, 0x110CE, 0x110D0, @@ -400638,7 +411030,7 @@ static const UV UNI_WB__XX_invlist[] = { /* for EBCDIC 1047 */ 0x11A9A, 0x11A9D, 0x11A9E, - 0x11AC0, + 0x11AB0, 0x11AF9, 0x11C00, 0x11C09, @@ -400690,6 +411082,8 @@ static const UV UNI_WB__XX_invlist[] = { /* for EBCDIC 1047 */ 0x1246F, 0x12480, 0x12544, + 0x12F90, + 0x12FF1, 0x13000, 0x1342F, 0x13430, @@ -400702,6 +411096,10 @@ static const UV UNI_WB__XX_invlist[] = { /* for EBCDIC 1047 */ 0x16A5F, 0x16A60, 0x16A6A, + 0x16A70, + 0x16ABF, + 0x16AC0, + 0x16ACA, 0x16AD0, 0x16AEE, 0x16AF0, @@ -400730,8 +411128,16 @@ static const UV UNI_WB__XX_invlist[] = { /* for EBCDIC 1047 */ 0x16FE5, 0x16FF0, 0x16FF2, + 0x1AFF0, + 0x1AFF4, + 0x1AFF5, + 0x1AFFC, + 0x1AFFD, + 0x1AFFF, 0x1B000, 0x1B001, + 0x1B120, + 0x1B123, 0x1B164, 0x1B168, 0x1BC00, @@ -400746,6 +411152,10 @@ static const UV UNI_WB__XX_invlist[] = { /* for EBCDIC 1047 */ 0x1BC9F, 0x1BCA0, 0x1BCA4, + 0x1CF00, + 0x1CF2E, + 0x1CF30, + 0x1CF47, 0x1D165, 0x1D16A, 0x1D16D, @@ -400830,6 +411240,8 @@ static const UV UNI_WB__XX_invlist[] = { /* for EBCDIC 1047 */ 0x1DAA0, 0x1DAA1, 0x1DAB0, + 0x1DF00, + 0x1DF1F, 0x1E000, 0x1E007, 0x1E008, @@ -400848,8 +411260,18 @@ static const UV UNI_WB__XX_invlist[] = { /* for EBCDIC 1047 */ 0x1E14A, 0x1E14E, 0x1E14F, + 0x1E290, + 0x1E2AF, 0x1E2C0, 0x1E2FA, + 0x1E7E0, + 0x1E7E7, + 0x1E7E8, + 0x1E7EC, + 0x1E7ED, + 0x1E7EF, + 0x1E7F0, + 0x1E7FF, 0x1E800, 0x1E8C5, 0x1E8D0, @@ -400952,7 +411374,7 @@ static const UV UNI_WB__XX_invlist[] = { /* for EBCDIC 1047 */ && '$' == 91 && '@' == 124 && '`' == 121 && '\n' == 37 static const UV UNI_WB__XX_invlist[] = { /* for EBCDIC 037 */ - 1507, /* Number of elements */ + 1561, /* Number of elements */ 148565664, /* Version and data structure type */ 0, /* 0 if the list starts at 0; 1 if it starts at the element beyond 0 */ @@ -401093,11 +411515,13 @@ static const UV UNI_WB__XX_invlist[] = { /* for EBCDIC 037 */ 0x85C, 0x860, 0x86B, - 0x8A0, - 0x8B5, - 0x8B6, - 0x8C8, - 0x8D3, + 0x870, + 0x888, + 0x889, + 0x88F, + 0x890, + 0x892, + 0x898, 0x964, 0x966, 0x970, @@ -401263,7 +411687,7 @@ static const UV UNI_WB__XX_invlist[] = { /* for EBCDIC 037 */ 0xC29, 0xC2A, 0xC3A, - 0xC3D, + 0xC3C, 0xC45, 0xC46, 0xC49, @@ -401273,6 +411697,8 @@ static const UV UNI_WB__XX_invlist[] = { /* for EBCDIC 037 */ 0xC57, 0xC58, 0xC5B, + 0xC5D, + 0xC5E, 0xC60, 0xC64, 0xC66, @@ -401297,7 +411723,7 @@ static const UV UNI_WB__XX_invlist[] = { /* for EBCDIC 037 */ 0xCCE, 0xCD5, 0xCD7, - 0xCDE, + 0xCDD, 0xCDF, 0xCE0, 0xCE4, @@ -401462,10 +411888,8 @@ static const UV UNI_WB__XX_invlist[] = { /* for EBCDIC 037 */ 0x16EE, 0x16F9, 0x1700, - 0x170D, - 0x170E, - 0x1715, - 0x1720, + 0x1716, + 0x171F, 0x1735, 0x1740, 0x1754, @@ -401482,8 +411906,6 @@ static const UV UNI_WB__XX_invlist[] = { /* for EBCDIC 037 */ 0x17E0, 0x17EA, 0x180B, - 0x180F, - 0x1810, 0x181A, 0x1820, 0x1879, @@ -401512,9 +411934,9 @@ static const UV UNI_WB__XX_invlist[] = { /* for EBCDIC 037 */ 0x1A90, 0x1A9A, 0x1AB0, - 0x1AC1, + 0x1ACF, 0x1B00, - 0x1B4C, + 0x1B4D, 0x1B50, 0x1B5A, 0x1B6B, @@ -401538,8 +411960,6 @@ static const UV UNI_WB__XX_invlist[] = { /* for EBCDIC 037 */ 0x1CD4, 0x1CFB, 0x1D00, - 0x1DFA, - 0x1DFB, 0x1F16, 0x1F18, 0x1F1E, @@ -401638,10 +412058,6 @@ static const UV UNI_WB__XX_invlist[] = { /* for EBCDIC 037 */ 0x24B6, 0x24EA, 0x2C00, - 0x2C2F, - 0x2C30, - 0x2C5F, - 0x2C60, 0x2CE5, 0x2CEB, 0x2CF4, @@ -401720,10 +412136,14 @@ static const UV UNI_WB__XX_invlist[] = { /* for EBCDIC 037 */ 0xA67F, 0xA6F2, 0xA708, - 0xA7C0, - 0xA7C2, 0xA7CB, - 0xA7F5, + 0xA7D0, + 0xA7D2, + 0xA7D3, + 0xA7D4, + 0xA7D5, + 0xA7DA, + 0xA7F2, 0xA828, 0xA82C, 0xA82D, @@ -401919,12 +412339,34 @@ static const UV UNI_WB__XX_invlist[] = { /* for EBCDIC 037 */ 0x10528, 0x10530, 0x10564, + 0x10570, + 0x1057B, + 0x1057C, + 0x1058B, + 0x1058C, + 0x10593, + 0x10594, + 0x10596, + 0x10597, + 0x105A2, + 0x105A3, + 0x105B2, + 0x105B3, + 0x105BA, + 0x105BB, + 0x105BD, 0x10600, 0x10737, 0x10740, 0x10756, 0x10760, 0x10768, + 0x10780, + 0x10786, + 0x10787, + 0x107B1, + 0x107B2, + 0x107BB, 0x10800, 0x10806, 0x10808, @@ -402005,6 +412447,8 @@ static const UV UNI_WB__XX_invlist[] = { /* for EBCDIC 037 */ 0x10F28, 0x10F30, 0x10F51, + 0x10F70, + 0x10F86, 0x10FB0, 0x10FC5, 0x10FE0, @@ -402012,11 +412456,13 @@ static const UV UNI_WB__XX_invlist[] = { /* for EBCDIC 037 */ 0x11000, 0x11047, 0x11066, - 0x11070, + 0x11076, 0x1107F, 0x110BB, 0x110BD, 0x110BE, + 0x110C2, + 0x110C3, 0x110CD, 0x110CE, 0x110D0, @@ -402159,7 +412605,7 @@ static const UV UNI_WB__XX_invlist[] = { /* for EBCDIC 037 */ 0x11A9A, 0x11A9D, 0x11A9E, - 0x11AC0, + 0x11AB0, 0x11AF9, 0x11C00, 0x11C09, @@ -402211,6 +412657,8 @@ static const UV UNI_WB__XX_invlist[] = { /* for EBCDIC 037 */ 0x1246F, 0x12480, 0x12544, + 0x12F90, + 0x12FF1, 0x13000, 0x1342F, 0x13430, @@ -402223,6 +412671,10 @@ static const UV UNI_WB__XX_invlist[] = { /* for EBCDIC 037 */ 0x16A5F, 0x16A60, 0x16A6A, + 0x16A70, + 0x16ABF, + 0x16AC0, + 0x16ACA, 0x16AD0, 0x16AEE, 0x16AF0, @@ -402251,8 +412703,16 @@ static const UV UNI_WB__XX_invlist[] = { /* for EBCDIC 037 */ 0x16FE5, 0x16FF0, 0x16FF2, + 0x1AFF0, + 0x1AFF4, + 0x1AFF5, + 0x1AFFC, + 0x1AFFD, + 0x1AFFF, 0x1B000, 0x1B001, + 0x1B120, + 0x1B123, 0x1B164, 0x1B168, 0x1BC00, @@ -402267,6 +412727,10 @@ static const UV UNI_WB__XX_invlist[] = { /* for EBCDIC 037 */ 0x1BC9F, 0x1BCA0, 0x1BCA4, + 0x1CF00, + 0x1CF2E, + 0x1CF30, + 0x1CF47, 0x1D165, 0x1D16A, 0x1D16D, @@ -402351,6 +412815,8 @@ static const UV UNI_WB__XX_invlist[] = { /* for EBCDIC 037 */ 0x1DAA0, 0x1DAA1, 0x1DAB0, + 0x1DF00, + 0x1DF1F, 0x1E000, 0x1E007, 0x1E008, @@ -402369,8 +412835,18 @@ static const UV UNI_WB__XX_invlist[] = { /* for EBCDIC 037 */ 0x1E14A, 0x1E14E, 0x1E14F, + 0x1E290, + 0x1E2AF, 0x1E2C0, 0x1E2FA, + 0x1E7E0, + 0x1E7E7, + 0x1E7E8, + 0x1E7EC, + 0x1E7ED, + 0x1E7EF, + 0x1E7F0, + 0x1E7FF, 0x1E800, 0x1E8C5, 0x1E8D0, @@ -402482,7 +412958,7 @@ static const UV UNI_WCHO_invlist[] = { /* for all charsets */ # if 'A' == 65 /* ASCII/Latin1 */ static const UV UNI_XIDC_invlist[] = { /* for ASCII/Latin1 */ - 1475, /* Number of elements */ + 1527, /* Number of elements */ 148565664, /* Version and data structure type */ 1, /* 0 if the list starts at 0; 1 if it starts at the element beyond 0 */ @@ -402589,11 +413065,11 @@ static const UV UNI_XIDC_invlist[] = { /* for ASCII/Latin1 */ 0x85C, 0x860, 0x86B, - 0x8A0, - 0x8B5, - 0x8B6, - 0x8C8, - 0x8D3, + 0x870, + 0x888, + 0x889, + 0x88F, + 0x898, 0x8E2, 0x8E3, 0x964, @@ -402761,7 +413237,7 @@ static const UV UNI_XIDC_invlist[] = { /* for ASCII/Latin1 */ 0xC29, 0xC2A, 0xC3A, - 0xC3D, + 0xC3C, 0xC45, 0xC46, 0xC49, @@ -402771,6 +413247,8 @@ static const UV UNI_XIDC_invlist[] = { /* for ASCII/Latin1 */ 0xC57, 0xC58, 0xC5B, + 0xC5D, + 0xC5E, 0xC60, 0xC64, 0xC66, @@ -402795,7 +413273,7 @@ static const UV UNI_XIDC_invlist[] = { /* for ASCII/Latin1 */ 0xCCE, 0xCD5, 0xCD7, - 0xCDE, + 0xCDD, 0xCDF, 0xCE0, 0xCE4, @@ -402962,10 +413440,8 @@ static const UV UNI_XIDC_invlist[] = { /* for ASCII/Latin1 */ 0x16EE, 0x16F9, 0x1700, - 0x170D, - 0x170E, - 0x1715, - 0x1720, + 0x1716, + 0x171F, 0x1735, 0x1740, 0x1754, @@ -402985,7 +413461,7 @@ static const UV UNI_XIDC_invlist[] = { /* for ASCII/Latin1 */ 0x17EA, 0x180B, 0x180E, - 0x1810, + 0x180F, 0x181A, 0x1820, 0x1879, @@ -403024,9 +413500,9 @@ static const UV UNI_XIDC_invlist[] = { /* for ASCII/Latin1 */ 0x1AB0, 0x1ABE, 0x1ABF, - 0x1AC1, + 0x1ACF, 0x1B00, - 0x1B4C, + 0x1B4D, 0x1B50, 0x1B5A, 0x1B6B, @@ -403050,8 +413526,6 @@ static const UV UNI_XIDC_invlist[] = { /* for ASCII/Latin1 */ 0x1CD4, 0x1CFB, 0x1D00, - 0x1DFA, - 0x1DFB, 0x1F16, 0x1F18, 0x1F1E, @@ -403132,10 +413606,6 @@ static const UV UNI_XIDC_invlist[] = { /* for ASCII/Latin1 */ 0x2160, 0x2189, 0x2C00, - 0x2C2F, - 0x2C30, - 0x2C5F, - 0x2C60, 0x2CE5, 0x2CEB, 0x2CF4, @@ -403198,8 +413668,6 @@ static const UV UNI_XIDC_invlist[] = { /* for ASCII/Latin1 */ 0x3400, 0x4DC0, 0x4E00, - 0x9FFD, - 0xA000, 0xA48D, 0xA4D0, 0xA4FE, @@ -403218,10 +413686,14 @@ static const UV UNI_XIDC_invlist[] = { /* for ASCII/Latin1 */ 0xA722, 0xA789, 0xA78B, - 0xA7C0, - 0xA7C2, 0xA7CB, - 0xA7F5, + 0xA7D0, + 0xA7D2, + 0xA7D3, + 0xA7D4, + 0xA7D5, + 0xA7DA, + 0xA7F2, 0xA828, 0xA82C, 0xA82D, @@ -403411,12 +413883,34 @@ static const UV UNI_XIDC_invlist[] = { /* for ASCII/Latin1 */ 0x10528, 0x10530, 0x10564, + 0x10570, + 0x1057B, + 0x1057C, + 0x1058B, + 0x1058C, + 0x10593, + 0x10594, + 0x10596, + 0x10597, + 0x105A2, + 0x105A3, + 0x105B2, + 0x105B3, + 0x105BA, + 0x105BB, + 0x105BD, 0x10600, 0x10737, 0x10740, 0x10756, 0x10760, 0x10768, + 0x10780, + 0x10786, + 0x10787, + 0x107B1, + 0x107B2, + 0x107BB, 0x10800, 0x10806, 0x10808, @@ -403497,6 +413991,8 @@ static const UV UNI_XIDC_invlist[] = { /* for ASCII/Latin1 */ 0x10F28, 0x10F30, 0x10F51, + 0x10F70, + 0x10F86, 0x10FB0, 0x10FC5, 0x10FE0, @@ -403504,9 +414000,11 @@ static const UV UNI_XIDC_invlist[] = { /* for ASCII/Latin1 */ 0x11000, 0x11047, 0x11066, - 0x11070, + 0x11076, 0x1107F, 0x110BB, + 0x110C2, + 0x110C3, 0x110D0, 0x110E9, 0x110F0, @@ -403613,6 +414111,8 @@ static const UV UNI_XIDC_invlist[] = { /* for ASCII/Latin1 */ 0x1172C, 0x11730, 0x1173A, + 0x11740, + 0x11747, 0x11800, 0x1183B, 0x118A0, @@ -403649,7 +414149,7 @@ static const UV UNI_XIDC_invlist[] = { /* for ASCII/Latin1 */ 0x11A9A, 0x11A9D, 0x11A9E, - 0x11AC0, + 0x11AB0, 0x11AF9, 0x11C00, 0x11C09, @@ -403701,6 +414201,8 @@ static const UV UNI_XIDC_invlist[] = { /* for ASCII/Latin1 */ 0x1246F, 0x12480, 0x12544, + 0x12F90, + 0x12FF1, 0x13000, 0x1342F, 0x14400, @@ -403711,6 +414213,10 @@ static const UV UNI_XIDC_invlist[] = { /* for ASCII/Latin1 */ 0x16A5F, 0x16A60, 0x16A6A, + 0x16A70, + 0x16ABF, + 0x16AC0, + 0x16ACA, 0x16AD0, 0x16AEE, 0x16AF0, @@ -403745,8 +414251,14 @@ static const UV UNI_XIDC_invlist[] = { /* for ASCII/Latin1 */ 0x18CD6, 0x18D00, 0x18D09, + 0x1AFF0, + 0x1AFF4, + 0x1AFF5, + 0x1AFFC, + 0x1AFFD, + 0x1AFFF, 0x1B000, - 0x1B11F, + 0x1B123, 0x1B150, 0x1B153, 0x1B164, @@ -403763,6 +414275,10 @@ static const UV UNI_XIDC_invlist[] = { /* for ASCII/Latin1 */ 0x1BC9A, 0x1BC9D, 0x1BC9F, + 0x1CF00, + 0x1CF2E, + 0x1CF30, + 0x1CF47, 0x1D165, 0x1D16A, 0x1D16D, @@ -403849,6 +414365,8 @@ static const UV UNI_XIDC_invlist[] = { /* for ASCII/Latin1 */ 0x1DAA0, 0x1DAA1, 0x1DAB0, + 0x1DF00, + 0x1DF1F, 0x1E000, 0x1E007, 0x1E008, @@ -403867,8 +414385,18 @@ static const UV UNI_XIDC_invlist[] = { /* for ASCII/Latin1 */ 0x1E14A, 0x1E14E, 0x1E14F, + 0x1E290, + 0x1E2AF, 0x1E2C0, 0x1E2FA, + 0x1E7E0, + 0x1E7E7, + 0x1E7E8, + 0x1E7EC, + 0x1E7ED, + 0x1E7EF, + 0x1E7F0, + 0x1E7FF, 0x1E800, 0x1E8C5, 0x1E8D0, @@ -403946,9 +414474,9 @@ static const UV UNI_XIDC_invlist[] = { /* for ASCII/Latin1 */ 0x1FBF0, 0x1FBFA, 0x20000, - 0x2A6DE, + 0x2A6E0, 0x2A700, - 0x2B735, + 0x2B739, 0x2B740, 0x2B81E, 0x2B820, @@ -403971,7 +414499,7 @@ static const UV UNI_XIDC_invlist[] = { /* for ASCII/Latin1 */ && '$' == 91 && '@' == 124 && '`' == 121 && '\n' == 21 static const UV UNI_XIDC_invlist[] = { /* for EBCDIC 1047 */ - 1499, /* Number of elements */ + 1551, /* Number of elements */ 148565664, /* Version and data structure type */ 1, /* 0 if the list starts at 0; 1 if it starts at the element beyond 0 */ @@ -404102,11 +414630,11 @@ static const UV UNI_XIDC_invlist[] = { /* for EBCDIC 1047 */ 0x85C, 0x860, 0x86B, - 0x8A0, - 0x8B5, - 0x8B6, - 0x8C8, - 0x8D3, + 0x870, + 0x888, + 0x889, + 0x88F, + 0x898, 0x8E2, 0x8E3, 0x964, @@ -404274,7 +414802,7 @@ static const UV UNI_XIDC_invlist[] = { /* for EBCDIC 1047 */ 0xC29, 0xC2A, 0xC3A, - 0xC3D, + 0xC3C, 0xC45, 0xC46, 0xC49, @@ -404284,6 +414812,8 @@ static const UV UNI_XIDC_invlist[] = { /* for EBCDIC 1047 */ 0xC57, 0xC58, 0xC5B, + 0xC5D, + 0xC5E, 0xC60, 0xC64, 0xC66, @@ -404308,7 +414838,7 @@ static const UV UNI_XIDC_invlist[] = { /* for EBCDIC 1047 */ 0xCCE, 0xCD5, 0xCD7, - 0xCDE, + 0xCDD, 0xCDF, 0xCE0, 0xCE4, @@ -404475,10 +415005,8 @@ static const UV UNI_XIDC_invlist[] = { /* for EBCDIC 1047 */ 0x16EE, 0x16F9, 0x1700, - 0x170D, - 0x170E, - 0x1715, - 0x1720, + 0x1716, + 0x171F, 0x1735, 0x1740, 0x1754, @@ -404498,7 +415026,7 @@ static const UV UNI_XIDC_invlist[] = { /* for EBCDIC 1047 */ 0x17EA, 0x180B, 0x180E, - 0x1810, + 0x180F, 0x181A, 0x1820, 0x1879, @@ -404537,9 +415065,9 @@ static const UV UNI_XIDC_invlist[] = { /* for EBCDIC 1047 */ 0x1AB0, 0x1ABE, 0x1ABF, - 0x1AC1, + 0x1ACF, 0x1B00, - 0x1B4C, + 0x1B4D, 0x1B50, 0x1B5A, 0x1B6B, @@ -404563,8 +415091,6 @@ static const UV UNI_XIDC_invlist[] = { /* for EBCDIC 1047 */ 0x1CD4, 0x1CFB, 0x1D00, - 0x1DFA, - 0x1DFB, 0x1F16, 0x1F18, 0x1F1E, @@ -404645,10 +415171,6 @@ static const UV UNI_XIDC_invlist[] = { /* for EBCDIC 1047 */ 0x2160, 0x2189, 0x2C00, - 0x2C2F, - 0x2C30, - 0x2C5F, - 0x2C60, 0x2CE5, 0x2CEB, 0x2CF4, @@ -404711,8 +415233,6 @@ static const UV UNI_XIDC_invlist[] = { /* for EBCDIC 1047 */ 0x3400, 0x4DC0, 0x4E00, - 0x9FFD, - 0xA000, 0xA48D, 0xA4D0, 0xA4FE, @@ -404731,10 +415251,14 @@ static const UV UNI_XIDC_invlist[] = { /* for EBCDIC 1047 */ 0xA722, 0xA789, 0xA78B, - 0xA7C0, - 0xA7C2, 0xA7CB, - 0xA7F5, + 0xA7D0, + 0xA7D2, + 0xA7D3, + 0xA7D4, + 0xA7D5, + 0xA7DA, + 0xA7F2, 0xA828, 0xA82C, 0xA82D, @@ -404924,12 +415448,34 @@ static const UV UNI_XIDC_invlist[] = { /* for EBCDIC 1047 */ 0x10528, 0x10530, 0x10564, + 0x10570, + 0x1057B, + 0x1057C, + 0x1058B, + 0x1058C, + 0x10593, + 0x10594, + 0x10596, + 0x10597, + 0x105A2, + 0x105A3, + 0x105B2, + 0x105B3, + 0x105BA, + 0x105BB, + 0x105BD, 0x10600, 0x10737, 0x10740, 0x10756, 0x10760, 0x10768, + 0x10780, + 0x10786, + 0x10787, + 0x107B1, + 0x107B2, + 0x107BB, 0x10800, 0x10806, 0x10808, @@ -405010,6 +415556,8 @@ static const UV UNI_XIDC_invlist[] = { /* for EBCDIC 1047 */ 0x10F28, 0x10F30, 0x10F51, + 0x10F70, + 0x10F86, 0x10FB0, 0x10FC5, 0x10FE0, @@ -405017,9 +415565,11 @@ static const UV UNI_XIDC_invlist[] = { /* for EBCDIC 1047 */ 0x11000, 0x11047, 0x11066, - 0x11070, + 0x11076, 0x1107F, 0x110BB, + 0x110C2, + 0x110C3, 0x110D0, 0x110E9, 0x110F0, @@ -405126,6 +415676,8 @@ static const UV UNI_XIDC_invlist[] = { /* for EBCDIC 1047 */ 0x1172C, 0x11730, 0x1173A, + 0x11740, + 0x11747, 0x11800, 0x1183B, 0x118A0, @@ -405162,7 +415714,7 @@ static const UV UNI_XIDC_invlist[] = { /* for EBCDIC 1047 */ 0x11A9A, 0x11A9D, 0x11A9E, - 0x11AC0, + 0x11AB0, 0x11AF9, 0x11C00, 0x11C09, @@ -405214,6 +415766,8 @@ static const UV UNI_XIDC_invlist[] = { /* for EBCDIC 1047 */ 0x1246F, 0x12480, 0x12544, + 0x12F90, + 0x12FF1, 0x13000, 0x1342F, 0x14400, @@ -405224,6 +415778,10 @@ static const UV UNI_XIDC_invlist[] = { /* for EBCDIC 1047 */ 0x16A5F, 0x16A60, 0x16A6A, + 0x16A70, + 0x16ABF, + 0x16AC0, + 0x16ACA, 0x16AD0, 0x16AEE, 0x16AF0, @@ -405258,8 +415816,14 @@ static const UV UNI_XIDC_invlist[] = { /* for EBCDIC 1047 */ 0x18CD6, 0x18D00, 0x18D09, + 0x1AFF0, + 0x1AFF4, + 0x1AFF5, + 0x1AFFC, + 0x1AFFD, + 0x1AFFF, 0x1B000, - 0x1B11F, + 0x1B123, 0x1B150, 0x1B153, 0x1B164, @@ -405276,6 +415840,10 @@ static const UV UNI_XIDC_invlist[] = { /* for EBCDIC 1047 */ 0x1BC9A, 0x1BC9D, 0x1BC9F, + 0x1CF00, + 0x1CF2E, + 0x1CF30, + 0x1CF47, 0x1D165, 0x1D16A, 0x1D16D, @@ -405362,6 +415930,8 @@ static const UV UNI_XIDC_invlist[] = { /* for EBCDIC 1047 */ 0x1DAA0, 0x1DAA1, 0x1DAB0, + 0x1DF00, + 0x1DF1F, 0x1E000, 0x1E007, 0x1E008, @@ -405380,8 +415950,18 @@ static const UV UNI_XIDC_invlist[] = { /* for EBCDIC 1047 */ 0x1E14A, 0x1E14E, 0x1E14F, + 0x1E290, + 0x1E2AF, 0x1E2C0, 0x1E2FA, + 0x1E7E0, + 0x1E7E7, + 0x1E7E8, + 0x1E7EC, + 0x1E7ED, + 0x1E7EF, + 0x1E7F0, + 0x1E7FF, 0x1E800, 0x1E8C5, 0x1E8D0, @@ -405459,9 +416039,9 @@ static const UV UNI_XIDC_invlist[] = { /* for EBCDIC 1047 */ 0x1FBF0, 0x1FBFA, 0x20000, - 0x2A6DE, + 0x2A6E0, 0x2A700, - 0x2B735, + 0x2B739, 0x2B740, 0x2B81E, 0x2B820, @@ -405484,7 +416064,7 @@ static const UV UNI_XIDC_invlist[] = { /* for EBCDIC 1047 */ && '$' == 91 && '@' == 124 && '`' == 121 && '\n' == 37 static const UV UNI_XIDC_invlist[] = { /* for EBCDIC 037 */ - 1495, /* Number of elements */ + 1547, /* Number of elements */ 148565664, /* Version and data structure type */ 1, /* 0 if the list starts at 0; 1 if it starts at the element beyond 0 */ @@ -405611,11 +416191,11 @@ static const UV UNI_XIDC_invlist[] = { /* for EBCDIC 037 */ 0x85C, 0x860, 0x86B, - 0x8A0, - 0x8B5, - 0x8B6, - 0x8C8, - 0x8D3, + 0x870, + 0x888, + 0x889, + 0x88F, + 0x898, 0x8E2, 0x8E3, 0x964, @@ -405783,7 +416363,7 @@ static const UV UNI_XIDC_invlist[] = { /* for EBCDIC 037 */ 0xC29, 0xC2A, 0xC3A, - 0xC3D, + 0xC3C, 0xC45, 0xC46, 0xC49, @@ -405793,6 +416373,8 @@ static const UV UNI_XIDC_invlist[] = { /* for EBCDIC 037 */ 0xC57, 0xC58, 0xC5B, + 0xC5D, + 0xC5E, 0xC60, 0xC64, 0xC66, @@ -405817,7 +416399,7 @@ static const UV UNI_XIDC_invlist[] = { /* for EBCDIC 037 */ 0xCCE, 0xCD5, 0xCD7, - 0xCDE, + 0xCDD, 0xCDF, 0xCE0, 0xCE4, @@ -405984,10 +416566,8 @@ static const UV UNI_XIDC_invlist[] = { /* for EBCDIC 037 */ 0x16EE, 0x16F9, 0x1700, - 0x170D, - 0x170E, - 0x1715, - 0x1720, + 0x1716, + 0x171F, 0x1735, 0x1740, 0x1754, @@ -406007,7 +416587,7 @@ static const UV UNI_XIDC_invlist[] = { /* for EBCDIC 037 */ 0x17EA, 0x180B, 0x180E, - 0x1810, + 0x180F, 0x181A, 0x1820, 0x1879, @@ -406046,9 +416626,9 @@ static const UV UNI_XIDC_invlist[] = { /* for EBCDIC 037 */ 0x1AB0, 0x1ABE, 0x1ABF, - 0x1AC1, + 0x1ACF, 0x1B00, - 0x1B4C, + 0x1B4D, 0x1B50, 0x1B5A, 0x1B6B, @@ -406072,8 +416652,6 @@ static const UV UNI_XIDC_invlist[] = { /* for EBCDIC 037 */ 0x1CD4, 0x1CFB, 0x1D00, - 0x1DFA, - 0x1DFB, 0x1F16, 0x1F18, 0x1F1E, @@ -406154,10 +416732,6 @@ static const UV UNI_XIDC_invlist[] = { /* for EBCDIC 037 */ 0x2160, 0x2189, 0x2C00, - 0x2C2F, - 0x2C30, - 0x2C5F, - 0x2C60, 0x2CE5, 0x2CEB, 0x2CF4, @@ -406220,8 +416794,6 @@ static const UV UNI_XIDC_invlist[] = { /* for EBCDIC 037 */ 0x3400, 0x4DC0, 0x4E00, - 0x9FFD, - 0xA000, 0xA48D, 0xA4D0, 0xA4FE, @@ -406240,10 +416812,14 @@ static const UV UNI_XIDC_invlist[] = { /* for EBCDIC 037 */ 0xA722, 0xA789, 0xA78B, - 0xA7C0, - 0xA7C2, 0xA7CB, - 0xA7F5, + 0xA7D0, + 0xA7D2, + 0xA7D3, + 0xA7D4, + 0xA7D5, + 0xA7DA, + 0xA7F2, 0xA828, 0xA82C, 0xA82D, @@ -406433,12 +417009,34 @@ static const UV UNI_XIDC_invlist[] = { /* for EBCDIC 037 */ 0x10528, 0x10530, 0x10564, + 0x10570, + 0x1057B, + 0x1057C, + 0x1058B, + 0x1058C, + 0x10593, + 0x10594, + 0x10596, + 0x10597, + 0x105A2, + 0x105A3, + 0x105B2, + 0x105B3, + 0x105BA, + 0x105BB, + 0x105BD, 0x10600, 0x10737, 0x10740, 0x10756, 0x10760, 0x10768, + 0x10780, + 0x10786, + 0x10787, + 0x107B1, + 0x107B2, + 0x107BB, 0x10800, 0x10806, 0x10808, @@ -406519,6 +417117,8 @@ static const UV UNI_XIDC_invlist[] = { /* for EBCDIC 037 */ 0x10F28, 0x10F30, 0x10F51, + 0x10F70, + 0x10F86, 0x10FB0, 0x10FC5, 0x10FE0, @@ -406526,9 +417126,11 @@ static const UV UNI_XIDC_invlist[] = { /* for EBCDIC 037 */ 0x11000, 0x11047, 0x11066, - 0x11070, + 0x11076, 0x1107F, 0x110BB, + 0x110C2, + 0x110C3, 0x110D0, 0x110E9, 0x110F0, @@ -406635,6 +417237,8 @@ static const UV UNI_XIDC_invlist[] = { /* for EBCDIC 037 */ 0x1172C, 0x11730, 0x1173A, + 0x11740, + 0x11747, 0x11800, 0x1183B, 0x118A0, @@ -406671,7 +417275,7 @@ static const UV UNI_XIDC_invlist[] = { /* for EBCDIC 037 */ 0x11A9A, 0x11A9D, 0x11A9E, - 0x11AC0, + 0x11AB0, 0x11AF9, 0x11C00, 0x11C09, @@ -406723,6 +417327,8 @@ static const UV UNI_XIDC_invlist[] = { /* for EBCDIC 037 */ 0x1246F, 0x12480, 0x12544, + 0x12F90, + 0x12FF1, 0x13000, 0x1342F, 0x14400, @@ -406733,6 +417339,10 @@ static const UV UNI_XIDC_invlist[] = { /* for EBCDIC 037 */ 0x16A5F, 0x16A60, 0x16A6A, + 0x16A70, + 0x16ABF, + 0x16AC0, + 0x16ACA, 0x16AD0, 0x16AEE, 0x16AF0, @@ -406767,8 +417377,14 @@ static const UV UNI_XIDC_invlist[] = { /* for EBCDIC 037 */ 0x18CD6, 0x18D00, 0x18D09, + 0x1AFF0, + 0x1AFF4, + 0x1AFF5, + 0x1AFFC, + 0x1AFFD, + 0x1AFFF, 0x1B000, - 0x1B11F, + 0x1B123, 0x1B150, 0x1B153, 0x1B164, @@ -406785,6 +417401,10 @@ static const UV UNI_XIDC_invlist[] = { /* for EBCDIC 037 */ 0x1BC9A, 0x1BC9D, 0x1BC9F, + 0x1CF00, + 0x1CF2E, + 0x1CF30, + 0x1CF47, 0x1D165, 0x1D16A, 0x1D16D, @@ -406871,6 +417491,8 @@ static const UV UNI_XIDC_invlist[] = { /* for EBCDIC 037 */ 0x1DAA0, 0x1DAA1, 0x1DAB0, + 0x1DF00, + 0x1DF1F, 0x1E000, 0x1E007, 0x1E008, @@ -406889,8 +417511,18 @@ static const UV UNI_XIDC_invlist[] = { /* for EBCDIC 037 */ 0x1E14A, 0x1E14E, 0x1E14F, + 0x1E290, + 0x1E2AF, 0x1E2C0, 0x1E2FA, + 0x1E7E0, + 0x1E7E7, + 0x1E7E8, + 0x1E7EC, + 0x1E7ED, + 0x1E7EF, + 0x1E7F0, + 0x1E7FF, 0x1E800, 0x1E8C5, 0x1E8D0, @@ -406968,9 +417600,9 @@ static const UV UNI_XIDC_invlist[] = { /* for EBCDIC 037 */ 0x1FBF0, 0x1FBFA, 0x20000, - 0x2A6DE, + 0x2A6E0, 0x2A700, - 0x2B735, + 0x2B739, 0x2B740, 0x2B81E, 0x2B820, @@ -406990,7 +417622,7 @@ static const UV UNI_XIDC_invlist[] = { /* for EBCDIC 037 */ # if 'A' == 65 /* ASCII/Latin1 */ static const UV UNI_XIDS_invlist[] = { /* for ASCII/Latin1 */ - 1259, /* Number of elements */ + 1311, /* Number of elements */ 148565664, /* Version and data structure type */ 1, /* 0 if the list starts at 0; 1 if it starts at the element beyond 0 */ @@ -407093,10 +417725,12 @@ static const UV UNI_XIDS_invlist[] = { /* for ASCII/Latin1 */ 0x859, 0x860, 0x86B, + 0x870, + 0x888, + 0x889, + 0x88F, 0x8A0, - 0x8B5, - 0x8B6, - 0x8C8, + 0x8CA, 0x904, 0x93A, 0x93D, @@ -407225,6 +417859,8 @@ static const UV UNI_XIDS_invlist[] = { /* for ASCII/Latin1 */ 0xC3E, 0xC58, 0xC5B, + 0xC5D, + 0xC5E, 0xC60, 0xC62, 0xC80, @@ -407241,7 +417877,7 @@ static const UV UNI_XIDS_invlist[] = { /* for ASCII/Latin1 */ 0xCBA, 0xCBD, 0xCBE, - 0xCDE, + 0xCDD, 0xCDF, 0xCE0, 0xCE2, @@ -407384,10 +418020,8 @@ static const UV UNI_XIDS_invlist[] = { /* for ASCII/Latin1 */ 0x16EE, 0x16F9, 0x1700, - 0x170D, - 0x170E, 0x1712, - 0x1720, + 0x171F, 0x1732, 0x1740, 0x1752, @@ -407428,7 +418062,7 @@ static const UV UNI_XIDS_invlist[] = { /* for ASCII/Latin1 */ 0x1B05, 0x1B34, 0x1B45, - 0x1B4C, + 0x1B4D, 0x1B83, 0x1BA1, 0x1BAE, @@ -407528,10 +418162,6 @@ static const UV UNI_XIDS_invlist[] = { /* for ASCII/Latin1 */ 0x2160, 0x2189, 0x2C00, - 0x2C2F, - 0x2C30, - 0x2C5F, - 0x2C60, 0x2CE5, 0x2CEB, 0x2CEF, @@ -407592,8 +418222,6 @@ static const UV UNI_XIDS_invlist[] = { /* for ASCII/Latin1 */ 0x3400, 0x4DC0, 0x4E00, - 0x9FFD, - 0xA000, 0xA48D, 0xA4D0, 0xA4FE, @@ -407614,10 +418242,14 @@ static const UV UNI_XIDS_invlist[] = { /* for ASCII/Latin1 */ 0xA722, 0xA789, 0xA78B, - 0xA7C0, - 0xA7C2, 0xA7CB, - 0xA7F5, + 0xA7D0, + 0xA7D2, + 0xA7D3, + 0xA7D4, + 0xA7D5, + 0xA7DA, + 0xA7F2, 0xA802, 0xA803, 0xA806, @@ -407809,12 +418441,34 @@ static const UV UNI_XIDS_invlist[] = { /* for ASCII/Latin1 */ 0x10528, 0x10530, 0x10564, + 0x10570, + 0x1057B, + 0x1057C, + 0x1058B, + 0x1058C, + 0x10593, + 0x10594, + 0x10596, + 0x10597, + 0x105A2, + 0x105A3, + 0x105B2, + 0x105B3, + 0x105BA, + 0x105BB, + 0x105BD, 0x10600, 0x10737, 0x10740, 0x10756, 0x10760, 0x10768, + 0x10780, + 0x10786, + 0x10787, + 0x107B1, + 0x107B2, + 0x107BB, 0x10800, 0x10806, 0x10808, @@ -407885,12 +418539,18 @@ static const UV UNI_XIDS_invlist[] = { /* for ASCII/Latin1 */ 0x10F28, 0x10F30, 0x10F46, + 0x10F70, + 0x10F82, 0x10FB0, 0x10FC5, 0x10FE0, 0x10FF7, 0x11003, 0x11038, + 0x11071, + 0x11073, + 0x11075, + 0x11076, 0x11083, 0x110B0, 0x110D0, @@ -407973,6 +418633,8 @@ static const UV UNI_XIDS_invlist[] = { /* for ASCII/Latin1 */ 0x116B9, 0x11700, 0x1171B, + 0x11740, + 0x11747, 0x11800, 0x1182C, 0x118A0, @@ -408011,7 +418673,7 @@ static const UV UNI_XIDS_invlist[] = { /* for ASCII/Latin1 */ 0x11A8A, 0x11A9D, 0x11A9E, - 0x11AC0, + 0x11AB0, 0x11AF9, 0x11C00, 0x11C09, @@ -408047,6 +418709,8 @@ static const UV UNI_XIDS_invlist[] = { /* for ASCII/Latin1 */ 0x1246F, 0x12480, 0x12544, + 0x12F90, + 0x12FF1, 0x13000, 0x1342F, 0x14400, @@ -408055,6 +418719,8 @@ static const UV UNI_XIDS_invlist[] = { /* for ASCII/Latin1 */ 0x16A39, 0x16A40, 0x16A5F, + 0x16A70, + 0x16ABF, 0x16AD0, 0x16AEE, 0x16B00, @@ -408083,8 +418749,14 @@ static const UV UNI_XIDS_invlist[] = { /* for ASCII/Latin1 */ 0x18CD6, 0x18D00, 0x18D09, + 0x1AFF0, + 0x1AFF4, + 0x1AFF5, + 0x1AFFC, + 0x1AFFD, + 0x1AFFF, 0x1B000, - 0x1B11F, + 0x1B123, 0x1B150, 0x1B153, 0x1B164, @@ -408159,14 +418831,26 @@ static const UV UNI_XIDS_invlist[] = { /* for ASCII/Latin1 */ 0x1D7C3, 0x1D7C4, 0x1D7CC, + 0x1DF00, + 0x1DF1F, 0x1E100, 0x1E12D, 0x1E137, 0x1E13E, 0x1E14E, 0x1E14F, + 0x1E290, + 0x1E2AE, 0x1E2C0, 0x1E2EC, + 0x1E7E0, + 0x1E7E7, + 0x1E7E8, + 0x1E7EC, + 0x1E7ED, + 0x1E7EF, + 0x1E7F0, + 0x1E7FF, 0x1E800, 0x1E8C5, 0x1E900, @@ -408240,9 +418924,9 @@ static const UV UNI_XIDS_invlist[] = { /* for ASCII/Latin1 */ 0x1EEAB, 0x1EEBC, 0x20000, - 0x2A6DE, + 0x2A6E0, 0x2A700, - 0x2B735, + 0x2B739, 0x2B740, 0x2B81E, 0x2B820, @@ -408263,7 +418947,7 @@ static const UV UNI_XIDS_invlist[] = { /* for ASCII/Latin1 */ && '$' == 91 && '@' == 124 && '`' == 121 && '\n' == 21 static const UV UNI_XIDS_invlist[] = { /* for EBCDIC 1047 */ - 1285, /* Number of elements */ + 1337, /* Number of elements */ 148565664, /* Version and data structure type */ 1, /* 0 if the list starts at 0; 1 if it starts at the element beyond 0 */ @@ -408392,10 +419076,12 @@ static const UV UNI_XIDS_invlist[] = { /* for EBCDIC 1047 */ 0x859, 0x860, 0x86B, + 0x870, + 0x888, + 0x889, + 0x88F, 0x8A0, - 0x8B5, - 0x8B6, - 0x8C8, + 0x8CA, 0x904, 0x93A, 0x93D, @@ -408524,6 +419210,8 @@ static const UV UNI_XIDS_invlist[] = { /* for EBCDIC 1047 */ 0xC3E, 0xC58, 0xC5B, + 0xC5D, + 0xC5E, 0xC60, 0xC62, 0xC80, @@ -408540,7 +419228,7 @@ static const UV UNI_XIDS_invlist[] = { /* for EBCDIC 1047 */ 0xCBA, 0xCBD, 0xCBE, - 0xCDE, + 0xCDD, 0xCDF, 0xCE0, 0xCE2, @@ -408683,10 +419371,8 @@ static const UV UNI_XIDS_invlist[] = { /* for EBCDIC 1047 */ 0x16EE, 0x16F9, 0x1700, - 0x170D, - 0x170E, 0x1712, - 0x1720, + 0x171F, 0x1732, 0x1740, 0x1752, @@ -408727,7 +419413,7 @@ static const UV UNI_XIDS_invlist[] = { /* for EBCDIC 1047 */ 0x1B05, 0x1B34, 0x1B45, - 0x1B4C, + 0x1B4D, 0x1B83, 0x1BA1, 0x1BAE, @@ -408827,10 +419513,6 @@ static const UV UNI_XIDS_invlist[] = { /* for EBCDIC 1047 */ 0x2160, 0x2189, 0x2C00, - 0x2C2F, - 0x2C30, - 0x2C5F, - 0x2C60, 0x2CE5, 0x2CEB, 0x2CEF, @@ -408891,8 +419573,6 @@ static const UV UNI_XIDS_invlist[] = { /* for EBCDIC 1047 */ 0x3400, 0x4DC0, 0x4E00, - 0x9FFD, - 0xA000, 0xA48D, 0xA4D0, 0xA4FE, @@ -408913,10 +419593,14 @@ static const UV UNI_XIDS_invlist[] = { /* for EBCDIC 1047 */ 0xA722, 0xA789, 0xA78B, - 0xA7C0, - 0xA7C2, 0xA7CB, - 0xA7F5, + 0xA7D0, + 0xA7D2, + 0xA7D3, + 0xA7D4, + 0xA7D5, + 0xA7DA, + 0xA7F2, 0xA802, 0xA803, 0xA806, @@ -409108,12 +419792,34 @@ static const UV UNI_XIDS_invlist[] = { /* for EBCDIC 1047 */ 0x10528, 0x10530, 0x10564, + 0x10570, + 0x1057B, + 0x1057C, + 0x1058B, + 0x1058C, + 0x10593, + 0x10594, + 0x10596, + 0x10597, + 0x105A2, + 0x105A3, + 0x105B2, + 0x105B3, + 0x105BA, + 0x105BB, + 0x105BD, 0x10600, 0x10737, 0x10740, 0x10756, 0x10760, 0x10768, + 0x10780, + 0x10786, + 0x10787, + 0x107B1, + 0x107B2, + 0x107BB, 0x10800, 0x10806, 0x10808, @@ -409184,12 +419890,18 @@ static const UV UNI_XIDS_invlist[] = { /* for EBCDIC 1047 */ 0x10F28, 0x10F30, 0x10F46, + 0x10F70, + 0x10F82, 0x10FB0, 0x10FC5, 0x10FE0, 0x10FF7, 0x11003, 0x11038, + 0x11071, + 0x11073, + 0x11075, + 0x11076, 0x11083, 0x110B0, 0x110D0, @@ -409272,6 +419984,8 @@ static const UV UNI_XIDS_invlist[] = { /* for EBCDIC 1047 */ 0x116B9, 0x11700, 0x1171B, + 0x11740, + 0x11747, 0x11800, 0x1182C, 0x118A0, @@ -409310,7 +420024,7 @@ static const UV UNI_XIDS_invlist[] = { /* for EBCDIC 1047 */ 0x11A8A, 0x11A9D, 0x11A9E, - 0x11AC0, + 0x11AB0, 0x11AF9, 0x11C00, 0x11C09, @@ -409346,6 +420060,8 @@ static const UV UNI_XIDS_invlist[] = { /* for EBCDIC 1047 */ 0x1246F, 0x12480, 0x12544, + 0x12F90, + 0x12FF1, 0x13000, 0x1342F, 0x14400, @@ -409354,6 +420070,8 @@ static const UV UNI_XIDS_invlist[] = { /* for EBCDIC 1047 */ 0x16A39, 0x16A40, 0x16A5F, + 0x16A70, + 0x16ABF, 0x16AD0, 0x16AEE, 0x16B00, @@ -409382,8 +420100,14 @@ static const UV UNI_XIDS_invlist[] = { /* for EBCDIC 1047 */ 0x18CD6, 0x18D00, 0x18D09, + 0x1AFF0, + 0x1AFF4, + 0x1AFF5, + 0x1AFFC, + 0x1AFFD, + 0x1AFFF, 0x1B000, - 0x1B11F, + 0x1B123, 0x1B150, 0x1B153, 0x1B164, @@ -409458,14 +420182,26 @@ static const UV UNI_XIDS_invlist[] = { /* for EBCDIC 1047 */ 0x1D7C3, 0x1D7C4, 0x1D7CC, + 0x1DF00, + 0x1DF1F, 0x1E100, 0x1E12D, 0x1E137, 0x1E13E, 0x1E14E, 0x1E14F, + 0x1E290, + 0x1E2AE, 0x1E2C0, 0x1E2EC, + 0x1E7E0, + 0x1E7E7, + 0x1E7E8, + 0x1E7EC, + 0x1E7ED, + 0x1E7EF, + 0x1E7F0, + 0x1E7FF, 0x1E800, 0x1E8C5, 0x1E900, @@ -409539,9 +420275,9 @@ static const UV UNI_XIDS_invlist[] = { /* for EBCDIC 1047 */ 0x1EEAB, 0x1EEBC, 0x20000, - 0x2A6DE, + 0x2A6E0, 0x2A700, - 0x2B735, + 0x2B739, 0x2B740, 0x2B81E, 0x2B820, @@ -409562,7 +420298,7 @@ static const UV UNI_XIDS_invlist[] = { /* for EBCDIC 1047 */ && '$' == 91 && '@' == 124 && '`' == 121 && '\n' == 37 static const UV UNI_XIDS_invlist[] = { /* for EBCDIC 037 */ - 1281, /* Number of elements */ + 1333, /* Number of elements */ 148565664, /* Version and data structure type */ 1, /* 0 if the list starts at 0; 1 if it starts at the element beyond 0 */ @@ -409687,10 +420423,12 @@ static const UV UNI_XIDS_invlist[] = { /* for EBCDIC 037 */ 0x859, 0x860, 0x86B, + 0x870, + 0x888, + 0x889, + 0x88F, 0x8A0, - 0x8B5, - 0x8B6, - 0x8C8, + 0x8CA, 0x904, 0x93A, 0x93D, @@ -409819,6 +420557,8 @@ static const UV UNI_XIDS_invlist[] = { /* for EBCDIC 037 */ 0xC3E, 0xC58, 0xC5B, + 0xC5D, + 0xC5E, 0xC60, 0xC62, 0xC80, @@ -409835,7 +420575,7 @@ static const UV UNI_XIDS_invlist[] = { /* for EBCDIC 037 */ 0xCBA, 0xCBD, 0xCBE, - 0xCDE, + 0xCDD, 0xCDF, 0xCE0, 0xCE2, @@ -409978,10 +420718,8 @@ static const UV UNI_XIDS_invlist[] = { /* for EBCDIC 037 */ 0x16EE, 0x16F9, 0x1700, - 0x170D, - 0x170E, 0x1712, - 0x1720, + 0x171F, 0x1732, 0x1740, 0x1752, @@ -410022,7 +420760,7 @@ static const UV UNI_XIDS_invlist[] = { /* for EBCDIC 037 */ 0x1B05, 0x1B34, 0x1B45, - 0x1B4C, + 0x1B4D, 0x1B83, 0x1BA1, 0x1BAE, @@ -410122,10 +420860,6 @@ static const UV UNI_XIDS_invlist[] = { /* for EBCDIC 037 */ 0x2160, 0x2189, 0x2C00, - 0x2C2F, - 0x2C30, - 0x2C5F, - 0x2C60, 0x2CE5, 0x2CEB, 0x2CEF, @@ -410186,8 +420920,6 @@ static const UV UNI_XIDS_invlist[] = { /* for EBCDIC 037 */ 0x3400, 0x4DC0, 0x4E00, - 0x9FFD, - 0xA000, 0xA48D, 0xA4D0, 0xA4FE, @@ -410208,10 +420940,14 @@ static const UV UNI_XIDS_invlist[] = { /* for EBCDIC 037 */ 0xA722, 0xA789, 0xA78B, - 0xA7C0, - 0xA7C2, 0xA7CB, - 0xA7F5, + 0xA7D0, + 0xA7D2, + 0xA7D3, + 0xA7D4, + 0xA7D5, + 0xA7DA, + 0xA7F2, 0xA802, 0xA803, 0xA806, @@ -410403,12 +421139,34 @@ static const UV UNI_XIDS_invlist[] = { /* for EBCDIC 037 */ 0x10528, 0x10530, 0x10564, + 0x10570, + 0x1057B, + 0x1057C, + 0x1058B, + 0x1058C, + 0x10593, + 0x10594, + 0x10596, + 0x10597, + 0x105A2, + 0x105A3, + 0x105B2, + 0x105B3, + 0x105BA, + 0x105BB, + 0x105BD, 0x10600, 0x10737, 0x10740, 0x10756, 0x10760, 0x10768, + 0x10780, + 0x10786, + 0x10787, + 0x107B1, + 0x107B2, + 0x107BB, 0x10800, 0x10806, 0x10808, @@ -410479,12 +421237,18 @@ static const UV UNI_XIDS_invlist[] = { /* for EBCDIC 037 */ 0x10F28, 0x10F30, 0x10F46, + 0x10F70, + 0x10F82, 0x10FB0, 0x10FC5, 0x10FE0, 0x10FF7, 0x11003, 0x11038, + 0x11071, + 0x11073, + 0x11075, + 0x11076, 0x11083, 0x110B0, 0x110D0, @@ -410567,6 +421331,8 @@ static const UV UNI_XIDS_invlist[] = { /* for EBCDIC 037 */ 0x116B9, 0x11700, 0x1171B, + 0x11740, + 0x11747, 0x11800, 0x1182C, 0x118A0, @@ -410605,7 +421371,7 @@ static const UV UNI_XIDS_invlist[] = { /* for EBCDIC 037 */ 0x11A8A, 0x11A9D, 0x11A9E, - 0x11AC0, + 0x11AB0, 0x11AF9, 0x11C00, 0x11C09, @@ -410641,6 +421407,8 @@ static const UV UNI_XIDS_invlist[] = { /* for EBCDIC 037 */ 0x1246F, 0x12480, 0x12544, + 0x12F90, + 0x12FF1, 0x13000, 0x1342F, 0x14400, @@ -410649,6 +421417,8 @@ static const UV UNI_XIDS_invlist[] = { /* for EBCDIC 037 */ 0x16A39, 0x16A40, 0x16A5F, + 0x16A70, + 0x16ABF, 0x16AD0, 0x16AEE, 0x16B00, @@ -410677,8 +421447,14 @@ static const UV UNI_XIDS_invlist[] = { /* for EBCDIC 037 */ 0x18CD6, 0x18D00, 0x18D09, + 0x1AFF0, + 0x1AFF4, + 0x1AFF5, + 0x1AFFC, + 0x1AFFD, + 0x1AFFF, 0x1B000, - 0x1B11F, + 0x1B123, 0x1B150, 0x1B153, 0x1B164, @@ -410753,14 +421529,26 @@ static const UV UNI_XIDS_invlist[] = { /* for EBCDIC 037 */ 0x1D7C3, 0x1D7C4, 0x1D7CC, + 0x1DF00, + 0x1DF1F, 0x1E100, 0x1E12D, 0x1E137, 0x1E13E, 0x1E14E, 0x1E14F, + 0x1E290, + 0x1E2AE, 0x1E2C0, 0x1E2EC, + 0x1E7E0, + 0x1E7E7, + 0x1E7E8, + 0x1E7EC, + 0x1E7ED, + 0x1E7EF, + 0x1E7F0, + 0x1E7FF, 0x1E800, 0x1E8C5, 0x1E900, @@ -410834,9 +421622,9 @@ static const UV UNI_XIDS_invlist[] = { /* for EBCDIC 037 */ 0x1EEAB, 0x1EEBC, 0x20000, - 0x2A6DE, + 0x2A6E0, 0x2A700, - 0x2B735, + 0x2B739, 0x2B740, 0x2B81E, 0x2B820, @@ -411059,6 +421847,16 @@ static const UV UNI_ZL_invlist[] = { /* for all charsets */ 0x2029 }; +static const UV UNI_ZNAMENNYMUSIC_invlist[] = { /* for all charsets */ + 3, /* Number of elements */ + 148565664, /* Version and data structure type */ + 1, /* 0 if the list starts at 0; + 1 if it starts at the element beyond 0 */ + 0x0, + 0x1CF00, + 0x1CFD0 +}; + static const UV UNI_ZP_invlist[] = { /* for all charsets */ 3, /* Number of elements */ 148565664, /* Version and data structure type */ @@ -411209,7 +422007,7 @@ static const UV UNI_ZYYY_invlist[] = { /* for ASCII/Latin1 */ 0x2080, 0x208F, 0x20A0, - 0x20C0, + 0x20C1, 0x2100, 0x2126, 0x2127, @@ -411237,7 +422035,7 @@ static const UV UNI_ZYYY_invlist[] = { /* for ASCII/Latin1 */ 0x2E00, 0x2E43, 0x2E44, - 0x2E53, + 0x2E5E, 0x2FF0, 0x2FFC, 0x3000, @@ -411274,8 +422072,6 @@ static const UV UNI_ZYYY_invlist[] = { /* for ASCII/Latin1 */ 0xAB5C, 0xAB6A, 0xAB6C, - 0xFD3E, - 0xFD40, 0xFE10, 0xFE1A, 0xFE30, @@ -411304,8 +422100,8 @@ static const UV UNI_ZYYY_invlist[] = { /* for ASCII/Latin1 */ 0x1019D, 0x101D0, 0x101FD, - 0x16FE2, - 0x16FE4, + 0x1CF50, + 0x1CFC4, 0x1D000, 0x1D0F6, 0x1D100, @@ -411319,7 +422115,7 @@ static const UV UNI_ZYYY_invlist[] = { /* for ASCII/Latin1 */ 0x1D18C, 0x1D1AA, 0x1D1AE, - 0x1D1E9, + 0x1D1EB, 0x1D2E0, 0x1D2F4, 0x1D300, @@ -411398,7 +422194,7 @@ static const UV UNI_ZYYY_invlist[] = { /* for ASCII/Latin1 */ 0x1F266, 0x1F300, 0x1F6D8, - 0x1F6E0, + 0x1F6DD, 0x1F6ED, 0x1F6F0, 0x1F6FD, @@ -411408,6 +422204,8 @@ static const UV UNI_ZYYY_invlist[] = { /* for ASCII/Latin1 */ 0x1F7D9, 0x1F7E0, 0x1F7EC, + 0x1F7F0, + 0x1F7F1, 0x1F800, 0x1F80C, 0x1F810, @@ -411421,27 +422219,27 @@ static const UV UNI_ZYYY_invlist[] = { /* for ASCII/Latin1 */ 0x1F8B0, 0x1F8B2, 0x1F900, - 0x1F979, - 0x1F97A, - 0x1F9CC, - 0x1F9CD, 0x1FA54, 0x1FA60, 0x1FA6E, 0x1FA70, 0x1FA75, 0x1FA78, - 0x1FA7B, + 0x1FA7D, 0x1FA80, 0x1FA87, 0x1FA90, - 0x1FAA9, + 0x1FAAD, 0x1FAB0, - 0x1FAB7, + 0x1FABB, 0x1FAC0, - 0x1FAC3, + 0x1FAC6, 0x1FAD0, - 0x1FAD7, + 0x1FADA, + 0x1FAE0, + 0x1FAE8, + 0x1FAF0, + 0x1FAF7, 0x1FB00, 0x1FB93, 0x1FB94, @@ -411545,7 +422343,7 @@ static const UV UNI_ZYYY_invlist[] = { /* for EBCDIC 1047 */ 0x2080, 0x208F, 0x20A0, - 0x20C0, + 0x20C1, 0x2100, 0x2126, 0x2127, @@ -411573,7 +422371,7 @@ static const UV UNI_ZYYY_invlist[] = { /* for EBCDIC 1047 */ 0x2E00, 0x2E43, 0x2E44, - 0x2E53, + 0x2E5E, 0x2FF0, 0x2FFC, 0x3000, @@ -411610,8 +422408,6 @@ static const UV UNI_ZYYY_invlist[] = { /* for EBCDIC 1047 */ 0xAB5C, 0xAB6A, 0xAB6C, - 0xFD3E, - 0xFD40, 0xFE10, 0xFE1A, 0xFE30, @@ -411640,8 +422436,8 @@ static const UV UNI_ZYYY_invlist[] = { /* for EBCDIC 1047 */ 0x1019D, 0x101D0, 0x101FD, - 0x16FE2, - 0x16FE4, + 0x1CF50, + 0x1CFC4, 0x1D000, 0x1D0F6, 0x1D100, @@ -411655,7 +422451,7 @@ static const UV UNI_ZYYY_invlist[] = { /* for EBCDIC 1047 */ 0x1D18C, 0x1D1AA, 0x1D1AE, - 0x1D1E9, + 0x1D1EB, 0x1D2E0, 0x1D2F4, 0x1D300, @@ -411734,7 +422530,7 @@ static const UV UNI_ZYYY_invlist[] = { /* for EBCDIC 1047 */ 0x1F266, 0x1F300, 0x1F6D8, - 0x1F6E0, + 0x1F6DD, 0x1F6ED, 0x1F6F0, 0x1F6FD, @@ -411744,6 +422540,8 @@ static const UV UNI_ZYYY_invlist[] = { /* for EBCDIC 1047 */ 0x1F7D9, 0x1F7E0, 0x1F7EC, + 0x1F7F0, + 0x1F7F1, 0x1F800, 0x1F80C, 0x1F810, @@ -411757,27 +422555,27 @@ static const UV UNI_ZYYY_invlist[] = { /* for EBCDIC 1047 */ 0x1F8B0, 0x1F8B2, 0x1F900, - 0x1F979, - 0x1F97A, - 0x1F9CC, - 0x1F9CD, 0x1FA54, 0x1FA60, 0x1FA6E, 0x1FA70, 0x1FA75, 0x1FA78, - 0x1FA7B, + 0x1FA7D, 0x1FA80, 0x1FA87, 0x1FA90, - 0x1FAA9, + 0x1FAAD, 0x1FAB0, - 0x1FAB7, + 0x1FABB, 0x1FAC0, - 0x1FAC3, + 0x1FAC6, 0x1FAD0, - 0x1FAD7, + 0x1FADA, + 0x1FAE0, + 0x1FAE8, + 0x1FAF0, + 0x1FAF7, 0x1FB00, 0x1FB93, 0x1FB94, @@ -411877,7 +422675,7 @@ static const UV UNI_ZYYY_invlist[] = { /* for EBCDIC 037 */ 0x2080, 0x208F, 0x20A0, - 0x20C0, + 0x20C1, 0x2100, 0x2126, 0x2127, @@ -411905,7 +422703,7 @@ static const UV UNI_ZYYY_invlist[] = { /* for EBCDIC 037 */ 0x2E00, 0x2E43, 0x2E44, - 0x2E53, + 0x2E5E, 0x2FF0, 0x2FFC, 0x3000, @@ -411942,8 +422740,6 @@ static const UV UNI_ZYYY_invlist[] = { /* for EBCDIC 037 */ 0xAB5C, 0xAB6A, 0xAB6C, - 0xFD3E, - 0xFD40, 0xFE10, 0xFE1A, 0xFE30, @@ -411972,8 +422768,8 @@ static const UV UNI_ZYYY_invlist[] = { /* for EBCDIC 037 */ 0x1019D, 0x101D0, 0x101FD, - 0x16FE2, - 0x16FE4, + 0x1CF50, + 0x1CFC4, 0x1D000, 0x1D0F6, 0x1D100, @@ -411987,7 +422783,7 @@ static const UV UNI_ZYYY_invlist[] = { /* for EBCDIC 037 */ 0x1D18C, 0x1D1AA, 0x1D1AE, - 0x1D1E9, + 0x1D1EB, 0x1D2E0, 0x1D2F4, 0x1D300, @@ -412066,7 +422862,7 @@ static const UV UNI_ZYYY_invlist[] = { /* for EBCDIC 037 */ 0x1F266, 0x1F300, 0x1F6D8, - 0x1F6E0, + 0x1F6DD, 0x1F6ED, 0x1F6F0, 0x1F6FD, @@ -412076,6 +422872,8 @@ static const UV UNI_ZYYY_invlist[] = { /* for EBCDIC 037 */ 0x1F7D9, 0x1F7E0, 0x1F7EC, + 0x1F7F0, + 0x1F7F1, 0x1F800, 0x1F80C, 0x1F810, @@ -412089,27 +422887,27 @@ static const UV UNI_ZYYY_invlist[] = { /* for EBCDIC 037 */ 0x1F8B0, 0x1F8B2, 0x1F900, - 0x1F979, - 0x1F97A, - 0x1F9CC, - 0x1F9CD, 0x1FA54, 0x1FA60, 0x1FA6E, 0x1FA70, 0x1FA75, 0x1FA78, - 0x1FA7B, + 0x1FA7D, 0x1FA80, 0x1FA87, 0x1FA90, - 0x1FAA9, + 0x1FAAD, 0x1FAB0, - 0x1FAB7, + 0x1FABB, 0x1FAC0, - 0x1FAC3, + 0x1FAC6, 0x1FAD0, - 0x1FAD7, + 0x1FADA, + 0x1FAE0, + 0x1FAE8, + 0x1FAF0, + 0x1FAF7, 0x1FB00, 0x1FB93, 0x1FB94, @@ -412125,7 +422923,7 @@ static const UV UNI_ZYYY_invlist[] = { /* for EBCDIC 037 */ # endif /* EBCDIC 037 */ static const UV UNI_ZZZZ_invlist[] = { /* for all charsets */ - 1350, /* Number of elements */ + 1392, /* Number of elements */ 148565664, /* Version and data structure type */ 1, /* 0 if the list starts at 0; 1 if it starts at the element beyond 0 */ @@ -412154,8 +422952,6 @@ static const UV UNI_ZZZZ_invlist[] = { /* for all charsets */ 0x5EF, 0x5F5, 0x600, - 0x61D, - 0x61E, 0x70E, 0x70F, 0x74B, @@ -412173,11 +422969,11 @@ static const UV UNI_ZZZZ_invlist[] = { /* for all charsets */ 0x85F, 0x860, 0x86B, - 0x8A0, - 0x8B5, - 0x8B6, - 0x8C8, - 0x8D3, + 0x870, + 0x88F, + 0x890, + 0x892, + 0x898, 0x984, 0x985, 0x98D, @@ -412333,7 +423129,7 @@ static const UV UNI_ZZZZ_invlist[] = { /* for all charsets */ 0xC29, 0xC2A, 0xC3A, - 0xC3D, + 0xC3C, 0xC45, 0xC46, 0xC49, @@ -412343,6 +423139,8 @@ static const UV UNI_ZZZZ_invlist[] = { /* for all charsets */ 0xC57, 0xC58, 0xC5B, + 0xC5D, + 0xC5E, 0xC60, 0xC64, 0xC66, @@ -412365,7 +423163,7 @@ static const UV UNI_ZZZZ_invlist[] = { /* for all charsets */ 0xCCE, 0xCD5, 0xCD7, - 0xCDE, + 0xCDD, 0xCDF, 0xCE0, 0xCE4, @@ -412500,10 +423298,8 @@ static const UV UNI_ZZZZ_invlist[] = { /* for all charsets */ 0x16A0, 0x16F9, 0x1700, - 0x170D, - 0x170E, - 0x1715, - 0x1720, + 0x1716, + 0x171F, 0x1737, 0x1740, 0x1754, @@ -412520,8 +423316,6 @@ static const UV UNI_ZZZZ_invlist[] = { /* for all charsets */ 0x17F0, 0x17FA, 0x1800, - 0x180F, - 0x1810, 0x181A, 0x1820, 0x1879, @@ -412560,11 +423354,11 @@ static const UV UNI_ZZZZ_invlist[] = { /* for all charsets */ 0x1AA0, 0x1AAE, 0x1AB0, - 0x1AC1, + 0x1ACF, 0x1B00, - 0x1B4C, + 0x1B4D, 0x1B50, - 0x1B7D, + 0x1B7F, 0x1B80, 0x1BF4, 0x1BFC, @@ -412580,8 +423374,6 @@ static const UV UNI_ZZZZ_invlist[] = { /* for all charsets */ 0x1CD0, 0x1CFB, 0x1D00, - 0x1DFA, - 0x1DFB, 0x1F16, 0x1F18, 0x1F1E, @@ -412622,7 +423414,7 @@ static const UV UNI_ZZZZ_invlist[] = { /* for all charsets */ 0x2090, 0x209D, 0x20A0, - 0x20C0, + 0x20C1, 0x20D0, 0x20F1, 0x2100, @@ -412636,10 +423428,6 @@ static const UV UNI_ZZZZ_invlist[] = { /* for all charsets */ 0x2B76, 0x2B96, 0x2B97, - 0x2C2F, - 0x2C30, - 0x2C5F, - 0x2C60, 0x2CF4, 0x2CF9, 0x2D26, @@ -412670,7 +423458,7 @@ static const UV UNI_ZZZZ_invlist[] = { /* for all charsets */ 0x2DD8, 0x2DDF, 0x2DE0, - 0x2E53, + 0x2E5E, 0x2E80, 0x2E9A, 0x2E9B, @@ -412694,8 +423482,6 @@ static const UV UNI_ZZZZ_invlist[] = { /* for all charsets */ 0x31F0, 0x321F, 0x3220, - 0x9FFD, - 0xA000, 0xA48D, 0xA490, 0xA4C7, @@ -412704,10 +423490,14 @@ static const UV UNI_ZZZZ_invlist[] = { /* for all charsets */ 0xA640, 0xA6F8, 0xA700, - 0xA7C0, - 0xA7C2, 0xA7CB, - 0xA7F5, + 0xA7D0, + 0xA7D2, + 0xA7D3, + 0xA7D4, + 0xA7D5, + 0xA7DA, + 0xA7F2, 0xA82D, 0xA830, 0xA83A, @@ -412778,16 +423568,14 @@ static const UV UNI_ZZZZ_invlist[] = { /* for all charsets */ 0xFB43, 0xFB45, 0xFB46, - 0xFBC2, + 0xFBC3, 0xFBD3, - 0xFD40, - 0xFD50, 0xFD90, 0xFD92, 0xFDC8, + 0xFDCF, + 0xFDD0, 0xFDF0, - 0xFDFE, - 0xFE00, 0xFE1A, 0xFE20, 0xFE53, @@ -412874,13 +423662,33 @@ static const UV UNI_ZZZZ_invlist[] = { /* for all charsets */ 0x10530, 0x10564, 0x1056F, - 0x10570, + 0x1057B, + 0x1057C, + 0x1058B, + 0x1058C, + 0x10593, + 0x10594, + 0x10596, + 0x10597, + 0x105A2, + 0x105A3, + 0x105B2, + 0x105B3, + 0x105BA, + 0x105BB, + 0x105BD, 0x10600, 0x10737, 0x10740, 0x10756, 0x10760, 0x10768, + 0x10780, + 0x10786, + 0x10787, + 0x107B1, + 0x107B2, + 0x107BB, 0x10800, 0x10806, 0x10808, @@ -412967,6 +423775,8 @@ static const UV UNI_ZZZZ_invlist[] = { /* for all charsets */ 0x10F28, 0x10F30, 0x10F5A, + 0x10F70, + 0x10F8A, 0x10FB0, 0x10FCC, 0x10FE0, @@ -412974,9 +423784,9 @@ static const UV UNI_ZZZZ_invlist[] = { /* for all charsets */ 0x11000, 0x1104E, 0x11052, - 0x11070, + 0x11076, 0x1107F, - 0x110C2, + 0x110C3, 0x110CD, 0x110CE, 0x110D0, @@ -413060,7 +423870,7 @@ static const UV UNI_ZZZZ_invlist[] = { /* for all charsets */ 0x11660, 0x1166D, 0x11680, - 0x116B9, + 0x116BA, 0x116C0, 0x116CA, 0x11700, @@ -413068,7 +423878,7 @@ static const UV UNI_ZZZZ_invlist[] = { /* for all charsets */ 0x1171D, 0x1172C, 0x11730, - 0x11740, + 0x11747, 0x11800, 0x1183C, 0x118A0, @@ -413099,7 +423909,7 @@ static const UV UNI_ZZZZ_invlist[] = { /* for all charsets */ 0x11A48, 0x11A50, 0x11AA3, - 0x11AC0, + 0x11AB0, 0x11AF9, 0x11C00, 0x11C09, @@ -413155,6 +423965,8 @@ static const UV UNI_ZZZZ_invlist[] = { /* for all charsets */ 0x12475, 0x12480, 0x12544, + 0x12F90, + 0x12FF3, 0x13000, 0x1342F, 0x13430, @@ -413168,7 +423980,9 @@ static const UV UNI_ZZZZ_invlist[] = { /* for all charsets */ 0x16A60, 0x16A6A, 0x16A6E, - 0x16A70, + 0x16ABF, + 0x16AC0, + 0x16ACA, 0x16AD0, 0x16AEE, 0x16AF0, @@ -413201,8 +424015,14 @@ static const UV UNI_ZZZZ_invlist[] = { /* for all charsets */ 0x18CD6, 0x18D00, 0x18D09, + 0x1AFF0, + 0x1AFF4, + 0x1AFF5, + 0x1AFFC, + 0x1AFFD, + 0x1AFFF, 0x1B000, - 0x1B11F, + 0x1B123, 0x1B150, 0x1B153, 0x1B164, @@ -413219,12 +424039,18 @@ static const UV UNI_ZZZZ_invlist[] = { /* for all charsets */ 0x1BC9A, 0x1BC9C, 0x1BCA4, + 0x1CF00, + 0x1CF2E, + 0x1CF30, + 0x1CF47, + 0x1CF50, + 0x1CFC4, 0x1D000, 0x1D0F6, 0x1D100, 0x1D127, 0x1D129, - 0x1D1E9, + 0x1D1EB, 0x1D200, 0x1D246, 0x1D2E0, @@ -413279,6 +424105,8 @@ static const UV UNI_ZZZZ_invlist[] = { /* for all charsets */ 0x1DAA0, 0x1DAA1, 0x1DAB0, + 0x1DF00, + 0x1DF1F, 0x1E000, 0x1E007, 0x1E008, @@ -413297,10 +424125,20 @@ static const UV UNI_ZZZZ_invlist[] = { /* for all charsets */ 0x1E14A, 0x1E14E, 0x1E150, + 0x1E290, + 0x1E2AF, 0x1E2C0, 0x1E2FA, 0x1E2FF, 0x1E300, + 0x1E7E0, + 0x1E7E7, + 0x1E7E8, + 0x1E7EC, + 0x1E7ED, + 0x1E7EF, + 0x1E7F0, + 0x1E7FF, 0x1E800, 0x1E8C5, 0x1E8C7, @@ -413409,7 +424247,7 @@ static const UV UNI_ZZZZ_invlist[] = { /* for all charsets */ 0x1F266, 0x1F300, 0x1F6D8, - 0x1F6E0, + 0x1F6DD, 0x1F6ED, 0x1F6F0, 0x1F6FD, @@ -413419,6 +424257,8 @@ static const UV UNI_ZZZZ_invlist[] = { /* for all charsets */ 0x1F7D9, 0x1F7E0, 0x1F7EC, + 0x1F7F0, + 0x1F7F1, 0x1F800, 0x1F80C, 0x1F810, @@ -413432,27 +424272,27 @@ static const UV UNI_ZZZZ_invlist[] = { /* for all charsets */ 0x1F8B0, 0x1F8B2, 0x1F900, - 0x1F979, - 0x1F97A, - 0x1F9CC, - 0x1F9CD, 0x1FA54, 0x1FA60, 0x1FA6E, 0x1FA70, 0x1FA75, 0x1FA78, - 0x1FA7B, + 0x1FA7D, 0x1FA80, 0x1FA87, 0x1FA90, - 0x1FAA9, + 0x1FAAD, 0x1FAB0, - 0x1FAB7, + 0x1FABB, 0x1FAC0, - 0x1FAC3, + 0x1FAC6, 0x1FAD0, - 0x1FAD7, + 0x1FADA, + 0x1FAE0, + 0x1FAE8, + 0x1FAF0, + 0x1FAF7, 0x1FB00, 0x1FB93, 0x1FB94, @@ -413460,9 +424300,9 @@ static const UV UNI_ZZZZ_invlist[] = { /* for all charsets */ 0x1FBF0, 0x1FBFA, 0x20000, - 0x2A6DE, + 0x2A6E0, 0x2A700, - 0x2B735, + 0x2B739, 0x2B740, 0x2B81E, 0x2B820, @@ -413637,6 +424477,7 @@ typedef enum { UNI_AGE__12, UNI_AGE__12_DOT_1, UNI_AGE__13, + UNI_AGE__14, UNI_AGE__2, UNI_AGE__2_DOT_1, UNI_AGE__3, @@ -413654,7 +424495,6 @@ typedef enum { UNI_AGE__7, UNI_AGE__8, UNI_AGE__9, - UNI_AGE__NA, UNI_AGHB, UNI_AHOM, UNI_ALCHEMICAL, @@ -413666,6 +424506,7 @@ typedef enum { UNI_ANY, UNI_ARAB, UNI_ARABICEXTA, + UNI_ARABICEXTB, UNI_ARABICMATH, UNI_ARABICPFA, UNI_ARABICPFB, @@ -413813,6 +424654,7 @@ typedef enum { UNI_COPT, UNI_COPTICEPACTNUMBERS, UNI_COUNTINGROD, + UNI_CPMN, UNI_CPRT, UNI_CUNEIFORMNUMBERS, UNI_CURRENCYSYMBOLS, @@ -413886,6 +424728,7 @@ typedef enum { UNI_ETHI, UNI_ETHIOPICEXT, UNI_ETHIOPICEXTA, + UNI_ETHIOPICEXTB, UNI_ETHIOPICSUP, UNI_EXT, UNI_EXTPICT, @@ -413973,6 +424816,7 @@ typedef enum { UNI_INCHORASMIAN, UNI_INCOPTIC, UNI_INCUNEIFORM, + UNI_INCYPROMINOAN, UNI_INCYRILLIC, UNI_INDEVANAGARI, UNI_INDICNUMBERFORMS, @@ -414049,6 +424893,7 @@ typedef enum { UNI_INOLDPERSIAN, UNI_INOLDSOGDIAN, UNI_INOLDTURKIC, + UNI_INOLDUYGHUR, UNI_INORIYA, UNI_INOSAGE, UNI_INOSMANYA, @@ -414127,6 +424972,7 @@ typedef enum { UNI_INTAIVIET, UNI_INTAKRI, UNI_INTAMIL, + UNI_INTANGSA, UNI_INTANGUT, UNI_INTELUGU, UNI_INTHAANA, @@ -414134,8 +424980,10 @@ typedef enum { UNI_INTIBETAN, UNI_INTIFINAGH, UNI_INTIRHUTA, + UNI_INTOTO, UNI_INUGARITIC, UNI_INVAI, + UNI_INVITHKUQI, UNI_INVS, UNI_INWANCHO, UNI_INWARANGCITI, @@ -414146,6 +424994,7 @@ typedef enum { UNI_IN__12, UNI_IN__12_DOT_1, UNI_IN__13, + UNI_IN__14, UNI_IN__1_DOT_1, UNI_IN__2, UNI_IN__2_DOT_1, @@ -414164,6 +425013,7 @@ typedef enum { UNI_IN__7, UNI_IN__8, UNI_IN__9, + UNI_IN__NA, UNI_IPAEXT, UNI_ITAL, UNI_JAMO, @@ -414264,6 +425114,8 @@ typedef enum { UNI_JG__TAW, UNI_JG__TEHMARBUTA, UNI_JG__TETH, + UNI_JG__THINYEH, + UNI_JG__VERTICALTAIL, UNI_JG__WAW, UNI_JG__YEH, UNI_JG__YEHBARREE, @@ -414282,6 +425134,7 @@ typedef enum { UNI_KALI, UNI_KANA, UNI_KANAEXTA, + UNI_KANAEXTB, UNI_KANASUP, UNI_KANBUN, UNI_KANGXI, @@ -414303,6 +425156,8 @@ typedef enum { UNI_LATINEXTC, UNI_LATINEXTD, UNI_LATINEXTE, + UNI_LATINEXTF, + UNI_LATINEXTG, UNI_LATN, UNI_LB__AI, UNI_LB__AL, @@ -414567,6 +425422,7 @@ typedef enum { UNI_OSGE, UNI_OSMA, UNI_OTTOMANSIYAQNUMBERS, + UNI_OUGR, UNI_P, UNI_PALM, UNI_PATSYN, @@ -414637,6 +425493,7 @@ typedef enum { UNI_SC__BUHD, UNI_SC__CAKM, UNI_SC__COPT, + UNI_SC__CPMN, UNI_SC__CPRT, UNI_SC__CYRL, UNI_SC__DEVA, @@ -414673,7 +425530,9 @@ typedef enum { UNI_SC__MULT, UNI_SC__MYMR, UNI_SC__NAND, + UNI_SC__NKO, UNI_SC__ORYA, + UNI_SC__OUGR, UNI_SC__PERM, UNI_SC__PHAG, UNI_SC__PHLP, @@ -414754,9 +425613,12 @@ typedef enum { UNI_TIBT, UNI_TIRH, UNI_TITLE, + UNI_TNSA, + UNI_TOTO, UNI_TRANSPORTANDMAP, UNI_UCAS, UNI_UCASEXT, + UNI_UCASEXTA, UNI_UGAR, UNI_UIDEO, UNI_UPPERCASELETTER, @@ -414764,6 +425626,7 @@ typedef enum { UNI_VEDICEXT, UNI_VERTICALFORMS, UNI_VERTSPACE, + UNI_VITH, UNI_VO__R, UNI_VO__TR, UNI_VO__TU, @@ -414812,6 +425675,7 @@ typedef enum { UNI_Z, UNI_ZANB, UNI_ZL, + UNI_ZNAMENNYMUSIC, UNI_ZP, UNI_ZS, UNI_ZYYY, @@ -414846,6 +425710,7 @@ static const UV * const uni_prop_ptrs[] = { UNI_AGE__12_invlist, UNI_AGE__12_DOT_1_invlist, UNI_AGE__13_invlist, + UNI_AGE__14_invlist, UNI_AGE__2_invlist, UNI_AGE__2_DOT_1_invlist, UNI_AGE__3_invlist, @@ -414863,7 +425728,6 @@ static const UV * const uni_prop_ptrs[] = { UNI_AGE__7_invlist, UNI_AGE__8_invlist, UNI_AGE__9_invlist, - UNI_AGE__NA_invlist, UNI_AGHB_invlist, UNI_AHOM_invlist, UNI_ALCHEMICAL_invlist, @@ -414875,6 +425739,7 @@ static const UV * const uni_prop_ptrs[] = { UNI_ANY_invlist, UNI_ARAB_invlist, UNI_ARABICEXTA_invlist, + UNI_ARABICEXTB_invlist, UNI_ARABICMATH_invlist, UNI_ARABICPFA_invlist, UNI_ARABICPFB_invlist, @@ -415022,6 +425887,7 @@ static const UV * const uni_prop_ptrs[] = { UNI_COPT_invlist, UNI_COPTICEPACTNUMBERS_invlist, UNI_COUNTINGROD_invlist, + UNI_CPMN_invlist, UNI_CPRT_invlist, UNI_CUNEIFORMNUMBERS_invlist, UNI_CURRENCYSYMBOLS_invlist, @@ -415095,6 +425961,7 @@ static const UV * const uni_prop_ptrs[] = { UNI_ETHI_invlist, UNI_ETHIOPICEXT_invlist, UNI_ETHIOPICEXTA_invlist, + UNI_ETHIOPICEXTB_invlist, UNI_ETHIOPICSUP_invlist, UNI_EXT_invlist, UNI_EXTPICT_invlist, @@ -415182,6 +426049,7 @@ static const UV * const uni_prop_ptrs[] = { UNI_INCHORASMIAN_invlist, UNI_INCOPTIC_invlist, UNI_INCUNEIFORM_invlist, + UNI_INCYPROMINOAN_invlist, UNI_INCYRILLIC_invlist, UNI_INDEVANAGARI_invlist, UNI_INDICNUMBERFORMS_invlist, @@ -415258,6 +426126,7 @@ static const UV * const uni_prop_ptrs[] = { UNI_INOLDPERSIAN_invlist, UNI_INOLDSOGDIAN_invlist, UNI_INOLDTURKIC_invlist, + UNI_INOLDUYGHUR_invlist, UNI_INORIYA_invlist, UNI_INOSAGE_invlist, UNI_INOSMANYA_invlist, @@ -415336,6 +426205,7 @@ static const UV * const uni_prop_ptrs[] = { UNI_INTAIVIET_invlist, UNI_INTAKRI_invlist, UNI_INTAMIL_invlist, + UNI_INTANGSA_invlist, UNI_INTANGUT_invlist, UNI_INTELUGU_invlist, UNI_INTHAANA_invlist, @@ -415343,8 +426213,10 @@ static const UV * const uni_prop_ptrs[] = { UNI_INTIBETAN_invlist, UNI_INTIFINAGH_invlist, UNI_INTIRHUTA_invlist, + UNI_INTOTO_invlist, UNI_INUGARITIC_invlist, UNI_INVAI_invlist, + UNI_INVITHKUQI_invlist, UNI_INVS_invlist, UNI_INWANCHO_invlist, UNI_INWARANGCITI_invlist, @@ -415355,6 +426227,7 @@ static const UV * const uni_prop_ptrs[] = { UNI_IN__12_invlist, UNI_IN__12_DOT_1_invlist, UNI_IN__13_invlist, + UNI_IN__14_invlist, UNI_IN__1_DOT_1_invlist, UNI_IN__2_invlist, UNI_IN__2_DOT_1_invlist, @@ -415373,6 +426246,7 @@ static const UV * const uni_prop_ptrs[] = { UNI_IN__7_invlist, UNI_IN__8_invlist, UNI_IN__9_invlist, + UNI_IN__NA_invlist, UNI_IPAEXT_invlist, UNI_ITAL_invlist, UNI_JAMO_invlist, @@ -415473,6 +426347,8 @@ static const UV * const uni_prop_ptrs[] = { UNI_JG__TAW_invlist, UNI_JG__TEHMARBUTA_invlist, UNI_JG__TETH_invlist, + UNI_JG__THINYEH_invlist, + UNI_JG__VERTICALTAIL_invlist, UNI_JG__WAW_invlist, UNI_JG__YEH_invlist, UNI_JG__YEHBARREE_invlist, @@ -415491,6 +426367,7 @@ static const UV * const uni_prop_ptrs[] = { UNI_KALI_invlist, UNI_KANA_invlist, UNI_KANAEXTA_invlist, + UNI_KANAEXTB_invlist, UNI_KANASUP_invlist, UNI_KANBUN_invlist, UNI_KANGXI_invlist, @@ -415512,6 +426389,8 @@ static const UV * const uni_prop_ptrs[] = { UNI_LATINEXTC_invlist, UNI_LATINEXTD_invlist, UNI_LATINEXTE_invlist, + UNI_LATINEXTF_invlist, + UNI_LATINEXTG_invlist, UNI_LATN_invlist, UNI_LB__AI_invlist, UNI_LB__AL_invlist, @@ -415776,6 +426655,7 @@ static const UV * const uni_prop_ptrs[] = { UNI_OSGE_invlist, UNI_OSMA_invlist, UNI_OTTOMANSIYAQNUMBERS_invlist, + UNI_OUGR_invlist, UNI_P_invlist, UNI_PALM_invlist, UNI_PATSYN_invlist, @@ -415846,6 +426726,7 @@ static const UV * const uni_prop_ptrs[] = { UNI_SC__BUHD_invlist, UNI_SC__CAKM_invlist, UNI_SC__COPT_invlist, + UNI_SC__CPMN_invlist, UNI_SC__CPRT_invlist, UNI_SC__CYRL_invlist, UNI_SC__DEVA_invlist, @@ -415882,7 +426763,9 @@ static const UV * const uni_prop_ptrs[] = { UNI_SC__MULT_invlist, UNI_SC__MYMR_invlist, UNI_SC__NAND_invlist, + UNI_SC__NKO_invlist, UNI_SC__ORYA_invlist, + UNI_SC__OUGR_invlist, UNI_SC__PERM_invlist, UNI_SC__PHAG_invlist, UNI_SC__PHLP_invlist, @@ -415963,9 +426846,12 @@ static const UV * const uni_prop_ptrs[] = { UNI_TIBT_invlist, UNI_TIRH_invlist, UNI_TITLE_invlist, + UNI_TNSA_invlist, + UNI_TOTO_invlist, UNI_TRANSPORTANDMAP_invlist, UNI_UCAS_invlist, UNI_UCASEXT_invlist, + UNI_UCASEXTA_invlist, UNI_UGAR_invlist, UNI_UIDEO_invlist, UNI_UPPERCASELETTER_invlist, @@ -415973,6 +426859,7 @@ static const UV * const uni_prop_ptrs[] = { UNI_VEDICEXT_invlist, UNI_VERTICALFORMS_invlist, UNI_VERTSPACE_invlist, + UNI_VITH_invlist, UNI_VO__R_invlist, UNI_VO__TR_invlist, UNI_VO__TU_invlist, @@ -416021,6 +426908,7 @@ static const UV * const uni_prop_ptrs[] = { UNI_Z_invlist, UNI_ZANB_invlist, UNI_ZL_invlist, + UNI_ZNAMENNYMUSIC_invlist, UNI_ZP_invlist, UNI_ZS_invlist, UNI_ZYYY_invlist, @@ -416115,6 +427003,7 @@ static const char * const UNI_age_values[] = { "12.0", "12.1", "13.0", + "14.0", "NA", "na", "Unassigned", @@ -416124,6 +427013,7 @@ static const char * const UNI_age_values[] = { "V12_0", "V12_1", "V13_0", + "V14_0", "V1_1", "V2_0", "V2_1", @@ -416148,6 +427038,7 @@ static const char * const UNI_age_values[] = { "v120", "v121", "v130", + "v140", "v20", "v21", "v30", @@ -416320,9 +427211,14 @@ static const char * const UNI_blk_values[] = { "arabic", "Arabic_Ext_A", "arabicexta", + "Arabic_Ext_B", + "arabicextb", "Arabic Extended-A", "Arabic_Extended_A", "arabicextendeda", + "Arabic Extended-B", + "Arabic_Extended_B", + "arabicextendedb", "Arabic_Math", "arabicmath", "Arabic Mathematical Alphabetic Symbols", @@ -416545,6 +427441,9 @@ static const char * const UNI_blk_values[] = { "Cypriot Syllabary", "Cypriot_Syllabary", "cypriotsyllabary", + "Cypro-Minoan", + "Cypro_Minoan", + "cyprominoan", "Cyrillic", "cyrillic", "Cyrillic_Ext_A", @@ -416641,12 +427540,17 @@ static const char * const UNI_blk_values[] = { "ethiopicext", "Ethiopic_Ext_A", "ethiopicexta", + "Ethiopic_Ext_B", + "ethiopicextb", "Ethiopic Extended", "Ethiopic_Extended", "ethiopicextended", "Ethiopic Extended-A", "Ethiopic_Extended_A", "ethiopicextendeda", + "Ethiopic Extended-B", + "Ethiopic_Extended_B", + "ethiopicextendedb", "Ethiopic_Sup", "ethiopicsup", "Ethiopic Supplement", @@ -416787,9 +427691,14 @@ static const char * const UNI_blk_values[] = { "kaithi", "Kana_Ext_A", "kanaexta", + "Kana_Ext_B", + "kanaextb", "Kana Extended-A", "Kana_Extended_A", "kanaextendeda", + "Kana Extended-B", + "Kana_Extended_B", + "kanaextendedb", "Kana_Sup", "kanasup", "Kana Supplement", @@ -416862,6 +427771,16 @@ static const char * const UNI_blk_values[] = { "Latin Extended-E", "Latin_Extended_E", "latinextendede", + "Latin Extended-F", + "Latin_Extended_F", + "latinextendedf", + "Latin Extended-G", + "Latin_Extended_G", + "latinextendedg", + "Latin_Ext_F", + "latinextf", + "Latin_Ext_G", + "latinextg", "Latin_1_Sup", "latin1sup", "Latin-1 Supplement", @@ -417070,6 +427989,9 @@ static const char * const UNI_blk_values[] = { "Old Turkic", "Old_Turkic", "oldturkic", + "Old Uyghur", + "Old_Uyghur", + "olduyghur", "Optical Character Recognition", "Optical_Character_Recognition", "opticalcharacterrecognition", @@ -417279,6 +428201,8 @@ static const char * const UNI_blk_values[] = { "Tamil Supplement", "Tamil_Supplement", "tamilsupplement", + "Tangsa", + "tangsa", "Tangut", "tangut", "Tangut Components", @@ -417301,6 +428225,8 @@ static const char * const UNI_blk_values[] = { "tifinagh", "Tirhuta", "tirhuta", + "Toto", + "toto", "Transport_And_Map", "transportandmap", "Transport and Map Symbols", @@ -417310,6 +428236,8 @@ static const char * const UNI_blk_values[] = { "ucas", "UCAS_Ext", "ucasext", + "UCAS_Ext_A", + "ucasexta", "Ugaritic", "ugaritic", "Unified Canadian Aboriginal Syllabics", @@ -417318,6 +428246,9 @@ static const char * const UNI_blk_values[] = { "Unified Canadian Aboriginal Syllabics Extended", "Unified_Canadian_Aboriginal_Syllabics_Extended", "unifiedcanadianaboriginalsyllabicsextended", + "Unified Canadian Aboriginal Syllabics Extended-A", + "Unified_Canadian_Aboriginal_Syllabics_Extended_A", + "unifiedcanadianaboriginalsyllabicsextendeda", "Vai", "vai", "Variation Selectors", @@ -417334,6 +428265,8 @@ static const char * const UNI_blk_values[] = { "Vertical Forms", "Vertical_Forms", "verticalforms", + "Vithkuqi", + "vithkuqi", "VS", "vs", "VS_Sup", @@ -417359,6 +428292,11 @@ static const char * const UNI_blk_values[] = { "Zanabazar Square", "Zanabazar_Square", "zanabazarsquare", + "Znamenny_Music", + "znamennymusic", + "Znamenny Musical Notation", + "Znamenny_Musical_Notation", + "znamennymusicalnotation", NULL }; @@ -417983,79 +428921,6 @@ static const char * const UNI_identifiertype_values[] = { NULL }; -static const char * const UNI_in_values[] = { - "1.1", - "2.0", - "2.1", - "3.0", - "3.1", - "3.2", - "4.0", - "4.1", - "5.0", - "5.1", - "5.2", - "6.0", - "6.1", - "6.2", - "6.3", - "7.0", - "8.0", - "9.0", - "10.0", - "11.0", - "12.0", - "12.1", - "13.0", - "Unassigned", - "unassigned", - "V10_0", - "V11_0", - "V12_0", - "V12_1", - "V13_0", - "V2_0", - "V2_1", - "V3_0", - "V3_1", - "V3_2", - "V4_0", - "V4_1", - "V5_0", - "V5_1", - "V5_2", - "V6_0", - "V6_1", - "V6_2", - "V6_3", - "V7_0", - "V8_0", - "V9_0", - "v100", - "v110", - "v120", - "v121", - "v130", - "v20", - "v21", - "v30", - "v31", - "v32", - "v40", - "v41", - "v50", - "v51", - "v52", - "v60", - "v61", - "v62", - "v63", - "v70", - "v80", - "v90", - NULL -}; - static const char * const UNI_inpc_values[] = { "Bottom", "bottom", @@ -418359,6 +429224,10 @@ static const char * const UNI_jg_values[] = { "tehmarbutagoal", "Teth", "teth", + "Thin_Yeh", + "thinyeh", + "Vertical_Tail", + "verticaltail", "Waw", "waw", "Yeh", @@ -418924,12 +429793,16 @@ static const char * const UNI_sc_values[] = { "copt", "Coptic", "coptic", + "Cpmn", + "cpmn", "Cprt", "cprt", "Cuneiform", "cuneiform", "Cypriot", "cypriot", + "Cypro_Minoan", + "cyprominoan", "Cyrillic", "cyrillic", "Cyrl", @@ -419236,6 +430109,8 @@ static const char * const UNI_sc_values[] = { "oldsoutharabian", "Old_Turkic", "oldturkic", + "Old_Uyghur", + "olduyghur", "Oriya", "oriya", "Orkh", @@ -419250,6 +430125,8 @@ static const char * const UNI_sc_values[] = { "osma", "Osmanya", "osmanya", + "Ougr", + "ougr", "Pahawh_Hmong", "pahawhhmong", "Palm", @@ -419378,6 +430255,8 @@ static const char * const UNI_sc_values[] = { "taml", "Tang", "tang", + "Tangsa", + "tangsa", "Tangut", "tangut", "Tavt", @@ -419406,6 +430285,10 @@ static const char * const UNI_sc_values[] = { "tirh", "Tirhuta", "tirhuta", + "Tnsa", + "tnsa", + "Toto", + "toto", "Ugar", "ugar", "Ugaritic", @@ -419416,6 +430299,10 @@ static const char * const UNI_sc_values[] = { "vai", "Vaii", "vaii", + "Vith", + "vith", + "Vithkuqi", + "vithkuqi", "Wancho", "wancho", "Wara", @@ -419570,7 +430457,6 @@ UNI_gcb_values, UNI_hst_values, UNI_identifierstatus_values, UNI_identifiertype_values, -UNI_in_values, UNI_inpc_values, UNI_insc_values, UNI_jg_values, @@ -419633,40 +430519,40 @@ UNI_wb_values #define UNI_ids_values_index UNI_ahex_values_index #define UNI_idsb_values_index UNI_ahex_values_index #define UNI_idst_values_index UNI_ahex_values_index -#define UNI_in_values_index 14 -#define UNI_inpc_values_index 15 -#define UNI_insc_values_index 16 -#define UNI_jg_values_index 17 +#define UNI_in_values_index UNI_age_values_index +#define UNI_inpc_values_index 14 +#define UNI_insc_values_index 15 +#define UNI_jg_values_index 16 #define UNI_joinc_values_index UNI_ahex_values_index -#define UNI_jt_values_index 18 -#define UNI_lb_values_index 19 +#define UNI_jt_values_index 17 +#define UNI_lb_values_index 18 #define UNI_loe_values_index UNI_ahex_values_index #define UNI_lower_values_index UNI_ahex_values_index #define UNI_math_values_index UNI_ahex_values_index #define UNI_nchar_values_index UNI_ahex_values_index -#define UNI_nfcqc_values_index 20 -#define UNI_nfdqc_values_index 21 +#define UNI_nfcqc_values_index 19 +#define UNI_nfdqc_values_index 20 #define UNI_nfkcqc_values_index UNI_nfcqc_values_index #define UNI_nfkdqc_values_index UNI_nfdqc_values_index -#define UNI_nt_values_index 22 -#define UNI_nv_values_index 23 +#define UNI_nt_values_index 21 +#define UNI_nv_values_index 22 #define UNI_patsyn_values_index UNI_ahex_values_index #define UNI_patws_values_index UNI_ahex_values_index #define UNI_pcm_values_index UNI_ahex_values_index #define UNI_qmark_values_index UNI_ahex_values_index #define UNI_radical_values_index UNI_ahex_values_index #define UNI_ri_values_index UNI_ahex_values_index -#define UNI_sb_values_index 24 -#define UNI_sc_values_index 25 +#define UNI_sb_values_index 23 +#define UNI_sc_values_index 24 #define UNI_scx_values_index UNI_sc_values_index #define UNI_sd_values_index UNI_ahex_values_index #define UNI_sterm_values_index UNI_ahex_values_index #define UNI_term_values_index UNI_ahex_values_index #define UNI_uideo_values_index UNI_ahex_values_index #define UNI_upper_values_index UNI_ahex_values_index -#define UNI_vo_values_index 26 +#define UNI_vo_values_index 25 #define UNI_vs_values_index UNI_ahex_values_index -#define UNI_wb_values_index 27 +#define UNI_wb_values_index 26 #define UNI_wspace_values_index UNI_ahex_values_index #define UNI_xidc_values_index UNI_ahex_values_index #define UNI_xids_values_index UNI_ahex_values_index @@ -419716,51 +430602,52 @@ static const U8 GCB_table[17][17] = { #define LB_RI_then_RI 15 #define LB_various_then_PO_or_PR 32 -static const U8 LB_table[41][41] = { - /* 'EAO' stands for 'East_Asian_OP'; 'edg' stands for 'EDGE'; u stands for 'unused in this Unicode release (and the data in its row and - * column are garbage) */ -/* AL B2 BA BB BK CB CL CM CP CR EAO EB edg EM EX GL H2 H3 HL HY ID IN IS JL JT JV LF NL NS NU OP PO PR QU RI SP SY WJ ZW ZWJ u */ -/* AL */ { 0, 1, 0, 1, 0, 1, 2, 0, 2, 0, 1, 1, 1, 1, 2, 0, 1, 1, 0, 0, 1, 0, 2, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 2, 0, 0, 0, 2 }, -/* B2 */ { 1, 2, 0, 1, 0, 1, 2, 0, 2, 0, 1, 1, 1, 1, 2, 0, 1, 1, 1, 0, 1, 0, 2, 1, 1, 1, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 2, 0, 0, 0, 2 }, -/* BA */ {14,14, 0,14, 0, 1, 2, 0, 2, 0, 14,14, 1,14, 2,14,14,14,14, 0,14,13, 2,14,14,14, 0, 0, 0,14,14,14,14, 0,14, 0, 2, 0, 0, 0, 2 }, -/* BB */ { 0, 0, 0, 0, 0, 1, 2, 0, 2, 0, 0, 0, 1, 0, 2, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 2 }, -/* BK */ { 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 }, -/* CB */ { 1, 1, 1, 1, 0, 1, 2, 0, 2, 0, 1, 1, 1, 1, 2, 0, 1, 1, 1, 1, 1, 1, 2, 1, 1, 1, 0, 0, 1, 1, 1, 1, 1, 0, 1, 0, 2, 0, 0, 0, 2 }, -/* CL */ { 1, 1, 0, 1, 0, 1, 2, 0, 2, 0, 1, 1, 1, 1, 2, 0, 1, 1, 1, 0, 1, 0, 2, 1, 1, 1, 0, 0, 2, 1, 1,33,33, 0, 1, 0, 2, 0, 0, 0, 2 }, -/* CM */ { 3, 3, 3, 3, 0, 3, 3, 0, 3, 0, 3, 3, 1, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 0, 0, 3, 3, 3, 3, 3, 3, 3, 0, 3, 3, 0, 3, 3 }, -/* CP */ { 0, 1, 0, 1, 0, 1, 2, 0, 2, 0, 1, 1, 1, 1, 2, 0, 1, 1, 0, 0, 1, 0, 2, 1, 1, 1, 0, 0, 2, 0, 1,33,33, 0, 1, 0, 2, 0, 0, 0, 2 }, -/* CR */ { 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 }, -/* EAO*/ { 2, 2, 2, 2, 0, 2, 2, 2, 2, 0, 2, 2, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 0, 0, 2, 2, 2, 2, 2, 2, 2, 0, 2, 2, 0, 2, 2 }, -/* EB */ { 1, 1, 0, 1, 0, 1, 2, 0, 2, 0, 1, 1, 1, 0, 2, 0, 1, 1, 1, 0, 1, 0, 2, 1, 1, 1, 0, 0, 0, 1, 1, 0, 1, 0, 1, 0, 2, 0, 0, 0, 2 }, -/* edg*/ { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, -/* EM */ { 1, 1, 0, 1, 0, 1, 2, 0, 2, 0, 1, 1, 1, 1, 2, 0, 1, 1, 1, 0, 1, 0, 2, 1, 1, 1, 0, 0, 0, 1, 1, 0, 1, 0, 1, 0, 2, 0, 0, 0, 2 }, -/* EX */ { 1, 1, 0, 1, 0, 1, 2, 0, 2, 0, 1, 1, 1, 1, 2, 0, 1, 1, 1, 0, 1, 0, 2, 1, 1, 1, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 2, 0, 0, 0, 2 }, -/* GL */ { 0, 0, 0, 0, 0, 0, 2, 0, 2, 0, 0, 0, 1, 0, 2, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 2 }, -/* H2 */ { 1, 1, 0, 1, 0, 1, 2, 0, 2, 0, 1, 1, 1, 1, 2, 0, 1, 1, 1, 0, 1, 0, 2, 1, 0, 0, 0, 0, 0, 1, 1, 0, 1, 0, 1, 0, 2, 0, 0, 0, 2 }, -/* H3 */ { 1, 1, 0, 1, 0, 1, 2, 0, 2, 0, 1, 1, 1, 1, 2, 0, 1, 1, 1, 0, 1, 0, 2, 1, 0, 1, 0, 0, 0, 1, 1, 0, 1, 0, 1, 0, 2, 0, 0, 0, 2 }, -/* HL */ { 0, 1, 0, 1, 0, 1, 2, 0, 2, 0, 1, 1, 1, 1, 2, 0, 1, 1, 0, 0, 1, 0, 2, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 2, 0, 0, 0, 2 }, -/* HY */ {14,14, 0,14, 0, 1, 2, 0, 2, 0, 14,14, 1,14, 2,14,14,14,14, 0,14,13, 2,14,14,14, 0, 0, 0,13,14,14,14, 0,14, 0, 2, 0, 0, 0, 2 }, -/* ID */ { 1, 1, 0, 1, 0, 1, 2, 0, 2, 0, 1, 1, 1, 1, 2, 0, 1, 1, 1, 0, 1, 0, 2, 1, 1, 1, 0, 0, 0, 1, 1, 0, 1, 0, 1, 0, 2, 0, 0, 0, 2 }, -/* IN */ { 1, 1, 0, 1, 0, 1, 2, 0, 2, 0, 1, 1, 1, 1, 2, 0, 1, 1, 1, 0, 1, 0, 2, 1, 1, 1, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 2, 0, 0, 0, 2 }, -/* IS */ { 0, 1, 0, 1, 0, 1, 2, 0, 2, 0, 1, 1, 1, 1, 2, 0, 1, 1, 0, 0, 1, 0, 2, 1, 1, 1, 0, 0, 0,12, 1,33,33, 0, 1, 0, 2, 0, 0, 0, 2 }, -/* JL */ { 1, 1, 0, 1, 0, 1, 2, 0, 2, 0, 1, 1, 1, 1, 2, 0, 0, 0, 1, 0, 1, 0, 2, 0, 1, 0, 0, 0, 0, 1, 1, 0, 1, 0, 1, 0, 2, 0, 0, 0, 2 }, -/* JT */ { 1, 1, 0, 1, 0, 1, 2, 0, 2, 0, 1, 1, 1, 1, 2, 0, 1, 1, 1, 0, 1, 0, 2, 1, 0, 1, 0, 0, 0, 1, 1, 0, 1, 0, 1, 0, 2, 0, 0, 0, 2 }, -/* JV */ { 1, 1, 0, 1, 0, 1, 2, 0, 2, 0, 1, 1, 1, 1, 2, 0, 1, 1, 1, 0, 1, 0, 2, 1, 0, 0, 0, 0, 0, 1, 1, 0, 1, 0, 1, 0, 2, 0, 0, 0, 2 }, -/* LF */ { 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 }, -/* NL */ { 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 }, -/* NS */ { 1, 1, 0, 1, 0, 1, 2, 0, 2, 0, 1, 1, 1, 1, 2, 0, 1, 1, 1, 0, 1, 0, 2, 1, 1, 1, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 2, 0, 0, 0, 2 }, -/* NU */ { 0, 1, 0, 1, 0, 1, 0, 0, 0, 0, 1, 1, 1, 1, 2, 0, 1, 1, 0, 0, 1, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0 }, -/* OP */ { 2, 2, 2, 2, 0, 2, 2, 2, 2, 0, 2, 2, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 0, 0, 2, 2, 2, 2, 2, 2, 2, 0, 2, 2, 0, 2, 2 }, -/* PO */ { 0, 1, 0, 1, 0, 1, 2, 0, 2, 0, 1, 1, 1, 1, 2, 0, 1, 1, 0, 0, 1, 0, 2, 1, 1, 1, 0, 0, 0, 0,10, 1, 1, 0, 1, 0, 2, 0, 0, 0, 2 }, -/* PR */ { 0, 1, 0, 1, 0, 1, 2, 0, 2, 0, 10, 0, 1, 0, 2, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0,10, 1, 1, 0, 1, 0, 2, 0, 0, 0, 2 }, -/* QU */ { 0, 0, 0, 0, 0, 0, 2, 0, 2, 0, 2, 0, 1, 0, 2, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 2, 0, 0, 0, 2 }, -/* RI */ { 1, 1, 0, 1, 0, 1, 2, 0, 2, 0, 1, 1, 1, 1, 2, 0, 1, 1, 1, 0, 1, 0, 2, 1, 1, 1, 0, 0, 0, 1, 1, 1, 1, 0,15, 0, 2, 0, 0, 0, 2 }, -/* SP */ { 7, 7, 7, 7, 0, 7, 8, 7, 8, 0, 7, 7, 1, 7, 8, 7, 7, 7, 7, 7, 7, 7, 8, 7, 7, 7, 0, 0, 7, 7, 7, 7, 7, 7, 7, 0, 8, 8, 0, 7, 8 }, -/* SY */ { 1, 1, 0, 1, 0, 1, 2, 0, 2, 0, 1, 1, 1, 1, 2, 0, 1, 1, 0, 0, 1, 0, 2, 1, 1, 1, 0, 0, 0,12, 1,33,33, 0, 1, 0, 2, 0, 0, 0, 2 }, -/* WJ */ { 0, 0, 0, 0, 0, 0, 2, 0, 2, 0, 0, 0, 1, 0, 2, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 2 }, -/* ZW */ { 1, 1, 1, 1, 0, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 0, 1, 1 }, -/* ZWJ*/ { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, -/* u */ { 1, 1, 0, 1, 0, 1, 2, 0, 2, 0, 1, 1, 1, 1, 2, 0, 1, 1, 1, 0, 1, 0, 2, 1, 1, 1, 0, 0, 2, 1, 1,33,33, 0, 1, 0, 2, 0, 0, 0, 2 } +static const U8 LB_table[42][42] = { + /* 'EAO' stands for 'East_Asian_OP'; 'edg' stands for 'EDGE'; 'UEP' stands for 'Unassigned_Extended_Pictographic_Ideographic'; u stands for + * 'unused in this Unicode release (and the data in its row and column are garbage) */ +/* AL B2 BA BB BK CB CL CM CP CR EAO EB edg EM EX GL H2 H3 HL HY ID IN IS JL JT JV LF NL NS NU OP PO PR QU RI SP SY UEP WJ ZW ZWJ u */ +/* AL */ { 0, 1, 0, 1, 0, 1, 2, 0, 2, 0, 1, 1, 1, 1, 2, 0, 1, 1, 0, 0, 1, 0, 2, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 2, 1, 0, 0, 0, 2 }, +/* B2 */ { 1, 2, 0, 1, 0, 1, 2, 0, 2, 0, 1, 1, 1, 1, 2, 0, 1, 1, 1, 0, 1, 0, 2, 1, 1, 1, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 2, 1, 0, 0, 0, 2 }, +/* BA */ {14,14, 0,14, 0, 1, 2, 0, 2, 0, 14,14, 1,14, 2,14,14,14,14, 0,14,13, 2,14,14,14, 0, 0, 0,14,14,14,14, 0,14, 0, 2, 14, 0, 0, 0, 2 }, +/* BB */ { 0, 0, 0, 0, 0, 1, 2, 0, 2, 0, 0, 0, 1, 0, 2, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 2 }, +/* BK */ { 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 }, +/* CB */ { 1, 1, 1, 1, 0, 1, 2, 0, 2, 0, 1, 1, 1, 1, 2, 0, 1, 1, 1, 1, 1, 1, 2, 1, 1, 1, 0, 0, 1, 1, 1, 1, 1, 0, 1, 0, 2, 1, 0, 0, 0, 2 }, +/* CL */ { 1, 1, 0, 1, 0, 1, 2, 0, 2, 0, 1, 1, 1, 1, 2, 0, 1, 1, 1, 0, 1, 0, 2, 1, 1, 1, 0, 0, 2, 1, 1,33,33, 0, 1, 0, 2, 1, 0, 0, 0, 2 }, +/* CM */ { 3, 3, 3, 3, 0, 3, 3, 0, 3, 0, 3, 3, 1, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 0, 0, 3, 3, 3, 3, 3, 3, 3, 0, 3, 3, 3, 0, 3, 3 }, +/* CP */ { 0, 1, 0, 1, 0, 1, 2, 0, 2, 0, 1, 1, 1, 1, 2, 0, 1, 1, 0, 0, 1, 0, 2, 1, 1, 1, 0, 0, 2, 0, 1,33,33, 0, 1, 0, 2, 1, 0, 0, 0, 2 }, +/* CR */ { 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 }, +/* EAO*/ { 2, 2, 2, 2, 0, 2, 2, 2, 2, 0, 2, 2, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 0, 0, 2, 2, 2, 2, 2, 2, 2, 0, 2, 2, 2, 0, 2, 2 }, +/* EB */ { 1, 1, 0, 1, 0, 1, 2, 0, 2, 0, 1, 1, 1, 0, 2, 0, 1, 1, 1, 0, 1, 0, 2, 1, 1, 1, 0, 0, 0, 1, 1, 0, 1, 0, 1, 0, 2, 1, 0, 0, 0, 2 }, +/* edg*/ { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, +/* EM */ { 1, 1, 0, 1, 0, 1, 2, 0, 2, 0, 1, 1, 1, 1, 2, 0, 1, 1, 1, 0, 1, 0, 2, 1, 1, 1, 0, 0, 0, 1, 1, 0, 1, 0, 1, 0, 2, 1, 0, 0, 0, 2 }, +/* EX */ { 1, 1, 0, 1, 0, 1, 2, 0, 2, 0, 1, 1, 1, 1, 2, 0, 1, 1, 1, 0, 1, 0, 2, 1, 1, 1, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 2, 1, 0, 0, 0, 2 }, +/* GL */ { 0, 0, 0, 0, 0, 0, 2, 0, 2, 0, 0, 0, 1, 0, 2, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 2 }, +/* H2 */ { 1, 1, 0, 1, 0, 1, 2, 0, 2, 0, 1, 1, 1, 1, 2, 0, 1, 1, 1, 0, 1, 0, 2, 1, 0, 0, 0, 0, 0, 1, 1, 0, 1, 0, 1, 0, 2, 1, 0, 0, 0, 2 }, +/* H3 */ { 1, 1, 0, 1, 0, 1, 2, 0, 2, 0, 1, 1, 1, 1, 2, 0, 1, 1, 1, 0, 1, 0, 2, 1, 0, 1, 0, 0, 0, 1, 1, 0, 1, 0, 1, 0, 2, 1, 0, 0, 0, 2 }, +/* HL */ { 0, 1, 0, 1, 0, 1, 2, 0, 2, 0, 1, 1, 1, 1, 2, 0, 1, 1, 0, 0, 1, 0, 2, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 2, 1, 0, 0, 0, 2 }, +/* HY */ {14,14, 0,14, 0, 1, 2, 0, 2, 0, 14,14, 1,14, 2,14,14,14,14, 0,14,13, 2,14,14,14, 0, 0, 0,13,14,14,14, 0,14, 0, 2, 14, 0, 0, 0, 2 }, +/* ID */ { 1, 1, 0, 1, 0, 1, 2, 0, 2, 0, 1, 1, 1, 1, 2, 0, 1, 1, 1, 0, 1, 0, 2, 1, 1, 1, 0, 0, 0, 1, 1, 0, 1, 0, 1, 0, 2, 1, 0, 0, 0, 2 }, +/* IN */ { 1, 1, 0, 1, 0, 1, 2, 0, 2, 0, 1, 1, 1, 1, 2, 0, 1, 1, 1, 0, 1, 0, 2, 1, 1, 1, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 2, 1, 0, 0, 0, 2 }, +/* IS */ { 0, 1, 0, 1, 0, 1, 2, 0, 2, 0, 1, 1, 1, 1, 2, 0, 1, 1, 0, 0, 1, 0, 2, 1, 1, 1, 0, 0, 0,12, 1,33,33, 0, 1, 0, 2, 1, 0, 0, 0, 2 }, +/* JL */ { 1, 1, 0, 1, 0, 1, 2, 0, 2, 0, 1, 1, 1, 1, 2, 0, 0, 0, 1, 0, 1, 0, 2, 0, 1, 0, 0, 0, 0, 1, 1, 0, 1, 0, 1, 0, 2, 1, 0, 0, 0, 2 }, +/* JT */ { 1, 1, 0, 1, 0, 1, 2, 0, 2, 0, 1, 1, 1, 1, 2, 0, 1, 1, 1, 0, 1, 0, 2, 1, 0, 1, 0, 0, 0, 1, 1, 0, 1, 0, 1, 0, 2, 1, 0, 0, 0, 2 }, +/* JV */ { 1, 1, 0, 1, 0, 1, 2, 0, 2, 0, 1, 1, 1, 1, 2, 0, 1, 1, 1, 0, 1, 0, 2, 1, 0, 0, 0, 0, 0, 1, 1, 0, 1, 0, 1, 0, 2, 1, 0, 0, 0, 2 }, +/* LF */ { 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 }, +/* NL */ { 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 }, +/* NS */ { 1, 1, 0, 1, 0, 1, 2, 0, 2, 0, 1, 1, 1, 1, 2, 0, 1, 1, 1, 0, 1, 0, 2, 1, 1, 1, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 2, 1, 0, 0, 0, 2 }, +/* NU */ { 0, 1, 0, 1, 0, 1, 0, 0, 0, 0, 1, 1, 1, 1, 2, 0, 1, 1, 0, 0, 1, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0 }, +/* OP */ { 2, 2, 2, 2, 0, 2, 2, 2, 2, 0, 2, 2, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 0, 0, 2, 2, 2, 2, 2, 2, 2, 0, 2, 2, 2, 0, 2, 2 }, +/* PO */ { 0, 1, 0, 1, 0, 1, 2, 0, 2, 0, 1, 1, 1, 1, 2, 0, 1, 1, 0, 0, 1, 0, 2, 1, 1, 1, 0, 0, 0, 0,10, 1, 1, 0, 1, 0, 2, 1, 0, 0, 0, 2 }, +/* PR */ { 0, 1, 0, 1, 0, 1, 2, 0, 2, 0, 10, 0, 1, 0, 2, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0,10, 1, 1, 0, 1, 0, 2, 0, 0, 0, 0, 2 }, +/* QU */ { 0, 0, 0, 0, 0, 0, 2, 0, 2, 0, 2, 0, 1, 0, 2, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 2 }, +/* RI */ { 1, 1, 0, 1, 0, 1, 2, 0, 2, 0, 1, 1, 1, 1, 2, 0, 1, 1, 1, 0, 1, 0, 2, 1, 1, 1, 0, 0, 0, 1, 1, 1, 1, 0,15, 0, 2, 1, 0, 0, 0, 2 }, +/* SP */ { 7, 7, 7, 7, 0, 7, 8, 7, 8, 0, 7, 7, 1, 7, 8, 7, 7, 7, 7, 7, 7, 7, 8, 7, 7, 7, 0, 0, 7, 7, 7, 7, 7, 7, 7, 0, 8, 7, 8, 0, 7, 8 }, +/* SY */ { 1, 1, 0, 1, 0, 1, 2, 0, 2, 0, 1, 1, 1, 1, 2, 0, 1, 1, 0, 0, 1, 0, 2, 1, 1, 1, 0, 0, 0,12, 1,33,33, 0, 1, 0, 2, 1, 0, 0, 0, 2 }, +/* UEP*/ { 1, 1, 0, 1, 0, 1, 2, 0, 2, 0, 1, 1, 1, 0, 2, 0, 1, 1, 1, 0, 1, 0, 2, 1, 1, 1, 0, 0, 0, 1, 1, 0, 1, 0, 1, 0, 2, 1, 0, 0, 0, 2 }, +/* WJ */ { 0, 0, 0, 0, 0, 0, 2, 0, 2, 0, 0, 0, 1, 0, 2, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 2 }, +/* ZW */ { 1, 1, 1, 1, 0, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 0, 1, 1 }, +/* ZWJ*/ { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, +/* u */ { 1, 1, 0, 1, 0, 1, 2, 0, 2, 0, 1, 1, 1, 1, 2, 0, 1, 1, 1, 0, 1, 0, 2, 1, 1, 1, 0, 0, 2, 1, 1,33,33, 0, 1, 0, 2, 1, 0, 0, 0, 2 } }; #define WB_NOBREAK 0 @@ -419816,57 +430703,57 @@ static const U8 WB_table[23][23] = { #define MAX_FOLD_FROMS 3 /* Generated from: - * d60b1a3dffe16c4aaaf3f00d21993bb320d05e9828b106182214764d4c69935c lib/Unicode/UCD.pm - * ce96627d4fc91b4fd886c409caeb9b76cf7bd345e12f05c6701add7f233f6437 lib/unicore/ArabicShaping.txt - * 0e69eef3da722cc104522d8372e86d5b86bb7afcc761b0c991e39e832294946d lib/unicore/BidiBrackets.txt - * a00d9d21585106a52113fb7b1d3d0373a5835be72e76862fb559ebddd474d70e lib/unicore/BidiMirroring.txt - * 81a82b6a9fcf1a9c12f588d7a1decd73a9afdc4cac95b0eb7e576e7942d6c19f lib/unicore/Blocks.txt - * 99d231d7c91688bbe8ca8ccebcc2f46b5b222f844babe4827295bae11e2abe5f lib/unicore/CaseFolding.txt - * 38badafd818d8405324fe298c0676be0c95186368c84b5368375fd871a645144 lib/unicore/CompositionExclusions.txt - * e779a443d3aa2a3166a15becaa2b737c922480e32c0453d5956093633555078f lib/unicore/DAge.txt - * a5d45f59b39deaab3c72ce8c1a2e212a5e086dff11b1f9d5bb0e352642e82248 lib/unicore/DCoreProperties.txt - * 3ac44e11c84bdaf6b207d2c2c20eed857ae17052393fc7f71b0fe951186ba906 lib/unicore/DNormalizationProps.txt - * 4f822ec7a9ebbb3138ad29bade8b9688d25b39c7a3c0b7431f01e7229e4fcb6e lib/unicore/EastAsianWidth.txt - * fc535aa1047a70105ab9a22c2b4c3f363a2ff02fe48ebbc5eeb9873b2752ff0b lib/unicore/EquivalentUnifiedIdeograph.txt - * b9c5158ce944d2fec57e0e4ecb716bdabfc3bdde73525f1772fe03f61a30d473 lib/unicore/HangulSyllableType.txt - * 36c1b2a626ff1fb23b8b21e6ea8712698f8ce668dded1cb48b8ddf6a6a1b04e9 lib/unicore/IdStatus.txt - * 4857c4ffa3898e6128b2d46b0a02e499a663fb91464a69ef3611096f01293acc lib/unicore/IdType.txt - * 69197b019fa5f2fb0d8c6ed1ed8acb9f2e8b5b8f45a947953ffa652f3bf54983 lib/unicore/IndicPositionalCategory.txt - * 6604e2f0fde7428675364aa0006bc686b79488dcc60ae8cb29800af2be3352e8 lib/unicore/IndicSyllabicCategory.txt - * 84ead63924aaa74b988b2eaf254a8733276ed108633ce2ef77a9ee1de7818162 lib/unicore/Jamo.txt - * d5abcd8f54c8a2aa912924c485ccf7f968ad98feaa303d8e9a29ad89172f1faf lib/unicore/LineBreak.txt - * 985128e8c8b2540233331d9b27d897d2c23bd5bcf1d05da960befce6efc59542 lib/unicore/NameAliases.txt - * 27282b8aa01d4d0c44aef436cb74195ae8639ffa187aeee4e6247af76febea76 lib/unicore/NamedSequences.txt - * 485b5a3ed25dbf1f94dfa5a9b69d8b4550ffd0c33045ccc55ccfd7c80b2a40cf lib/unicore/PropList.txt - * 6b3902e9268cd843fe65cbdea992108c9528343ec0679f800b96f356bb553e5a lib/unicore/PropValueAliases.txt - * 2bd5777847e3d6add3c7e5c0d1393ddcab89e5a0ac3ff498cb0c53041f0b86e4 lib/unicore/PropertyAliases.txt - * 03a61dc89422e44cc2b73e8e893321007880ab69e2a4d281c0f1bc29c602b9d0 lib/unicore/ScriptExtensions.txt - * 9a5ed1ec9b5f0d7147e9371ad792ab39203611af7637cff2aa4a5c663b172cde lib/unicore/Scripts.txt - * 6424312f1dc39b22e0ff9c0ffb13dfad424d9b03e6a6dc6bca941f6bf5ef1ffd lib/unicore/SpecialCasing.txt - * bdbffbbfc8ad4d3a6d01b5891510458f3d36f7170422af4ea2bed3211a73e8bb lib/unicore/UnicodeData.txt - * 160f41816234addb511901d5f21febd69574578dd93de6ef8153e35693325575 lib/unicore/VerticalOrientation.txt - * 32dfb37d21db530529a6ec3dc13d96f21f8e7c7faf7ff3db8a9760cd76cec81d lib/unicore/auxiliary/GCBTest.txt - * 2bd3c5e2d62701ff81fb3ec318e179a4618cabb1493b1e0dd2b4e7e56c5437c4 lib/unicore/auxiliary/GraphemeBreakProperty.txt - * c51fbebfa82a0f36473b44bfd71d5ef6cb6a1f81fb313375dc9a1910d79bb2b6 lib/unicore/auxiliary/LBTest.txt - * 80b0107750818d8f370bd120b6fe56b6855b60581f72affe8b60409a469b4b65 lib/unicore/auxiliary/SBTest.txt - * 09e3166ebab166ac630a227f77f4e794ebd433271abd5588f5a67e7f199c71ee lib/unicore/auxiliary/SentenceBreakProperty.txt - * bf5373ce28a5df06796c93dc159dd15a997bb2950c92704b40ae8190cfc3716d lib/unicore/auxiliary/WBTest.txt - * a2b7373cf2fe3fa3b26dbb53405ca849985f771ff47f1c61743978003ff80499 lib/unicore/auxiliary/WordBreakProperty.txt - * d2686f400a638c80775d7c662556fb8fa8dd3bbe4aa548d9d31624264c6e1bb1 lib/unicore/emoji/emoji.txt - * b827ae5da8c2b08947cc9a120a7b7fd2f1676fb160b508df78075381635b127c lib/unicore/extracted/DBidiClass.txt - * 6fdc5b5ef40444a8f0c772e6b67c00498d4216fe0c0fdf76744ce338f2ad3810 lib/unicore/extracted/DBinaryProperties.txt - * e14928a5bf6ad5958a80332bd42e96e14420080a95c660e5da29384e496755d0 lib/unicore/extracted/DCombiningClass.txt - * 579a03281fbe87b78d5d9a8523de4d255edd7e4ca6eab0e4c7729de97e9b89b1 lib/unicore/extracted/DDecompositionType.txt - * ad83c59b257e9d480ffd3001d4ac240c5fed7cb1919453e1c4e8877035256bcd lib/unicore/extracted/DEastAsianWidth.txt - * 4502f0969e4e6558c4b4c6ca4c23dad70b863d61dd3d5eed1a62a6c3c99fd570 lib/unicore/extracted/DGeneralCategory.txt - * 00bb88b89e2adb646f3177f9444e2d3192386b81a5de9556104b338274b253e1 lib/unicore/extracted/DJoinGroup.txt - * ac835b6e11a60c9820d3cf2d1cb0558dd68efb8f53f404a51632e4726690a6d7 lib/unicore/extracted/DJoinType.txt - * baba9dfc133e3cb770a89aaf0973b1341fa61c2da6c176baf6428898b3b568d8 lib/unicore/extracted/DLineBreak.txt - * 6d4a8c945dd7db83ed617cbb7d937de7f4ecf016ff22970d846e996a7c9a2a5d lib/unicore/extracted/DNumType.txt - * 5b7c14380d5cceeaffcfbc18db1ed936391d2af2d51f5a41f1a17b692c77e59b lib/unicore/extracted/DNumValues.txt - * ee0dd174fd5b158d82dfea95d7d822ca0bfcd490182669353dca3ab39a8ee807 lib/unicore/mktables - * 50b85a67451145545a65cea370dab8d3444fbfe07e9c34cef560c5b7da9d3eef lib/unicore/version - * 2680b9254eb236c5c090f11b149605043e8c8433661b96efc4a42fb4709342a5 regen/charset_translations.pl - * 6bbad21de0848e0236b02f34f5fa0edd3cdae9ba8173cc9469a5513936b9e728 regen/mk_PL_charclass.pl - * 7a7e778e903508b1c244a77bae57ec57606ab775bb5f81719dbb122eb66d4259 regen/mk_invlists.pl + * 688d673ec947f7ccf898b4eae9848139d4d33676b688dee54f449f8bf9d3bbd2 lib/Unicode/UCD.pm + * c7698811e9adb6cc98fb996a7de4be2b6532f2ac67e76055cc8afdbf6ee18af3 lib/unicore/ArabicShaping.txt + * 24a74555f918bbe99f5b3f1b83cf36fc0e205bb8a600a6a3aa539c710a3dcf27 lib/unicore/BidiBrackets.txt + * 7a5c74cedc1616a9af0a9d22e108ae592d86fe93649c144ae6ba49f193a44122 lib/unicore/BidiMirroring.txt + * 598870dddef7b34b5a972916528c456aff2765b79cd4f9647fb58ceb767e7f17 lib/unicore/Blocks.txt + * a566cd48687b2cd897e02501118b2413c14ae86d318f9abbbba97feb84189f0f lib/unicore/CaseFolding.txt + * 3360762fc3295cea54ab251c31df621d05ba4b94d46c60eaac29aa16d70ad1e0 lib/unicore/CompositionExclusions.txt + * 7e058dec02147098bc9c28d86209f0f251bba0538f3b5a705ad02ea3bb709fe0 lib/unicore/DAge.txt + * e3eddd7d469cd1b0feed7528defad1a1cc7c6a9ceb0ae4446a6d10921ed2e7bc lib/unicore/DCoreProperties.txt + * b2c444c20730b097787fdf50bd7d6dd3fc5256ab8084f5b35b11c8776eca674c lib/unicore/DNormalizationProps.txt + * f901ac011aa32a09224d6555da71e2532c59c1d3381322829de0e3b880507250 lib/unicore/EastAsianWidth.txt + * 5995522f01633073911dad1edb74d13aa832f42862c0392a79627b85d52f2391 lib/unicore/EquivalentUnifiedIdeograph.txt + * cd1c9367cba438afa965fcb5edc6ed3ec6e685fd5dd21c0cc20c026f04beb0e5 lib/unicore/HangulSyllableType.txt + * 3f3f368fccdb37f350ecedc20b37fa71ab31c04e847884c77780d34283539f73 lib/unicore/IdStatus.txt + * 45a150c23961b58d7784704af6c4daccd6517d97b6489e53d13bbdbf9e4f065f lib/unicore/IdType.txt + * d8704c8725568813a947ff2ef38bcf1f05e2a6fbea6876ba384890f187a8bf61 lib/unicore/IndicPositionalCategory.txt + * c7b969b653dc278fb66ab4136223d320e30ad19367eb791ae60dcc6d92071b16 lib/unicore/IndicSyllabicCategory.txt + * 39ff89e0a329e1ccce6d54fad8cf82e90926901928c0ca9b9a2ad5681f330dd9 lib/unicore/Jamo.txt + * 9e06e9f35c6959fb91dcc7993f90d58523c3079bc62c6b25f828b4cdebc5d70c lib/unicore/LineBreak.txt + * 14b3b677d33f95c51423dce6eef4a6a28b4b160451ecedee4b91edb6745cf4a3 lib/unicore/NameAliases.txt + * db5745688affcdc0c3927a1ee0667018a96a7b24513f866d5235e98fef6c2436 lib/unicore/NamedSequences.txt + * 6bddfdb850417a5bee6deff19290fd1b138589909afb50f5a049f343bf2c6722 lib/unicore/PropList.txt + * eb755757e20b72b330b2948df3cf2ff7adb0e31bb060140dc09dafb132ace2cd lib/unicore/PropValueAliases.txt + * 859d7225f2d2a460b3ccb1d61a7945f8cc219acdf5aa53b66b7a1e4bf6ebfc87 lib/unicore/PropertyAliases.txt + * d37eedf63ff9c48bac863d5f76862373d6cf5269fd21253d499e2430d638c01d lib/unicore/ScriptExtensions.txt + * 52db475c4ec445e73b0b16915448c357614946ad7062843c563e00d7535c6510 lib/unicore/Scripts.txt + * c667b45908fd269af25fd55d2fc5bbc157fb1b77675936e25c513ce32e080334 lib/unicore/SpecialCasing.txt + * 36018e68657fdcb3485f636630ffe8c8532e01c977703d2803f5b89d6c5feafb lib/unicore/UnicodeData.txt + * 869ff43dd012f924d03c89fc268c88f0e7eea72f0228b91ca30455afdb84f8fd lib/unicore/VerticalOrientation.txt + * ddc7d4d1f3838573b94fc5d83ff7217e63c47b22ae1cd40c5fe1a54efc15589b lib/unicore/auxiliary/GCBTest.txt + * 97e79f1f8d9cd76d120f2420381a01abc00a7c78a2aa583fa3f9627264a99742 lib/unicore/auxiliary/GraphemeBreakProperty.txt + * 488dbb6a7e1d0070d4aa7c175352c818ff6425172850d1b40c6177726658cb05 lib/unicore/auxiliary/LBTest.txt + * 7e42dd749dbb94aa44b13faf9df6319d9a16ce2ea09a3a094fcfbb5962168040 lib/unicore/auxiliary/SBTest.txt + * 7092ca4117cec891c25c7724132efc519e1dece01ae9fd6068035a9db04d526e lib/unicore/auxiliary/SentenceBreakProperty.txt + * 8094b544ec1580c7e41ac0187805cc1aeb330a90301ec7505563e1a59318284e lib/unicore/auxiliary/WBTest.txt + * 7716752aad296d4ab23ff4ed0a2746fc5328750ff84e9e7d6f3828ee9eaef742 lib/unicore/auxiliary/WordBreakProperty.txt + * b597836124298b8f7fa076273802840cfc3271a25f5c397a082e120954b82c3c lib/unicore/emoji/emoji.txt + * e5fe51acc74e3e83b4fb4c7b25f3c34491d6eb8095c9955d0712dafbca7b3c2b lib/unicore/extracted/DBidiClass.txt + * cd0a14176d93bf440b77a582a0d678190fc0688b15442d4cfb250bf2e27956af lib/unicore/extracted/DBinaryProperties.txt + * 12b0c3af9b600b49488d66545a3e7844ea980809627201bf9afeebe1c9f16f4e lib/unicore/extracted/DCombiningClass.txt + * f76064b298cfbd715ba542e7894f7a507d32da2f011070d1d01df95cad9817d6 lib/unicore/extracted/DDecompositionType.txt + * f9bef074cc916db57fece99d54a4505f8e7c7b17481619e3f0005211f7717d4b lib/unicore/extracted/DEastAsianWidth.txt + * cde679c8461976ed40d7edf61ae98cbb947540831f06f5bc7da7decbf91a1420 lib/unicore/extracted/DGeneralCategory.txt + * 9bb891831328713603a486a4a03df7f7987c3e1e8144a6d1ac71fd061ef3f732 lib/unicore/extracted/DJoinGroup.txt + * e97c65bbea0a69d2fae6ec4182b09e519e13232e20bd804b3004edc0f36bb0d4 lib/unicore/extracted/DJoinType.txt + * 43f6df50e4878f501b417e366b0ee097ae5ccb2d4ce942026bed3d62d78e7887 lib/unicore/extracted/DLineBreak.txt + * a04502ebb36a45d83cbe48a7d8132ea8143edb7b3d34d0aa6afe4a9685049741 lib/unicore/extracted/DNumType.txt + * 11075771b112e8e7ccf6ffa637c4c91eadc3ef3db0517b24e605df8fd3624239 lib/unicore/extracted/DNumValues.txt + * 1e514199c3fa46f5df6148d272db7bddbfd5e89c9710e39773ef9d734f344a2f lib/unicore/mktables + * c72bbdeda99714db1c8024d3311da4aef3c0db3b9b9f11455a7cfe10d5e9aba3 lib/unicore/version + * 0a6b5ab33bb1026531f816efe81aea1a8ffcd34a27cbea37dd6a70a63d73c844 regen/charset_translations.pl + * 5f8520d3a17ade6317fc0c423f5091470924b1ef425bca0c41ce8e4a9f8460fe regen/mk_PL_charclass.pl + * 1c73795f9150bd556573e7ae982789377289e22b6a7f3db0a05c36852e8d749f regen/mk_invlists.pl * ex: set ro: */ diff --git a/gnu/usr.bin/perl/config_h.SH b/gnu/usr.bin/perl/config_h.SH index 08c5923ef81..b8174833154 100644 --- a/gnu/usr.bin/perl/config_h.SH +++ b/gnu/usr.bin/perl/config_h.SH @@ -255,7 +255,7 @@ sed <$CONFIG_H -e 's!^#undef\(.*/\)\*!/\*#define\1 \*!' -e 's!^#un /* HAS_MBLEN: * This symbol, if defined, indicates that the mblen routine is available - * to find the number of bytes in a multibye character. + * to find the number of bytes in a multibyte character. */ #$d_mblen HAS_MBLEN /**/ @@ -1576,7 +1576,7 @@ sed <$CONFIG_H -e 's!^#undef\(.*/\)\*!/\*#define\1 \*!' -e 's!^#un #$d_endpent HAS_ENDPROTOENT /**/ /* HAS_ENDPWENT: - * This symbol, if defined, indicates that the getgrent routine is + * This symbol, if defined, indicates that the endpwent routine is * available for finalizing sequential access of the passwd database. */ #$d_endpwent HAS_ENDPWENT /**/ @@ -1767,6 +1767,8 @@ sed <$CONFIG_H -e 's!^#undef\(.*/\)\*!/\*#define\1 \*!' -e 's!^#un * LONG_DOUBLE_IS_DOUBLEDOUBLE_128_BIT_BE_BE * LONG_DOUBLE_IS_DOUBLEDOUBLE_128_BIT_LE_BE * LONG_DOUBLE_IS_DOUBLEDOUBLE_128_BIT_BE_LE + * LONG_DOUBLE_IS_DOUBLEDOUBLE_128_BIT_LITTLE_ENDIAN + * LONG_DOUBLE_IS_DOUBLEDOUBLE_128_BIT_BIG_ENDIAN * LONG_DOUBLE_IS_VAX_H_FLOAT * LONG_DOUBLE_IS_UNKNOWN_FORMAT * It is only defined if the system supports long doubles. @@ -2004,11 +2006,11 @@ sed <$CONFIG_H -e 's!^#undef\(.*/\)\*!/\*#define\1 \*!' -e 's!^#un * This symbol, if defined, indicates that the union semun is * defined by including . If not, the user code * probably needs to define it as: - * union semun { + * union semun { * int val; * struct semid_ds *buf; * unsigned short *array; - * } + * } */ /* USE_SEMCTL_SEMUN: * This symbol, if defined, indicates that union semun is @@ -2337,6 +2339,13 @@ sed <$CONFIG_H -e 's!^#undef\(.*/\)\*!/\*#define\1 \*!' -e 's!^#un */ #$d_atanh HAS_ATANH /**/ +/* HAS_NON_INT_BITFIELDS: + * This symbol, if defined, indicates that the C compiler accepts, without + * error or warning, struct bitfields that are declared with sizes other + * than plain 'int'; for example 'unsigned char' is accepted. + */ +#$d_non_int_bitfields HAS_NON_INT_BITFIELDS /**/ + /* HAS_BUILTIN_CHOOSE_EXPR: * Can we handle GCC builtin for compile-time ternary-like expressions */ @@ -2513,6 +2522,19 @@ sed <$CONFIG_H -e 's!^#undef\(.*/\)\*!/\*#define\1 \*!' -e 's!^#un */ #$d_fegetround HAS_FEGETROUND /**/ +/* HAS_FFS: + * This symbol, if defined, indicates that the ffs routine is available + * to find the first bit set in its argument. If it's not available, + * roll your own. + */ +/* HAS_FFSL: + * This symbol, if defined, indicates that the ffsl routine is available + * to find the first bit set in its argument. If it's not available, + * roll your own. + */ +#$d_ffs HAS_FFS /**/ +#$d_ffsl HAS_FFSL /**/ + /* HAS_FINITE: * This symbol, if defined, indicates that the finite routine is * available to check whether a double is finite (non-infinity non-NaN). @@ -3019,7 +3041,7 @@ sed <$CONFIG_H -e 's!^#undef\(.*/\)\*!/\*#define\1 \*!' -e 's!^#un /* HAS_MEMMEM: * This symbol, if defined, indicates that the memmem routine is - * available to return a pointer to the start of the first occurance + * available to return a pointer to the start of the first occurrence * of a substring in a memory area (or NULL if not found). * In glibc, memmem is a GNU extension. The function is visible in * libc, but the prototype is only visible if _GNU_SOURCE is #defined. @@ -3120,14 +3142,19 @@ sed <$CONFIG_H -e 's!^#undef\(.*/\)\*!/\*#define\1 \*!' -e 's!^#un * available to return the name of the locale for a category mask. */ /* I_XLOCALE: - * This symbol, if defined, indicates to the C program that it should - * include to get uselocale() and its friends. + * This symbol, if defined, indicates to the C program that the + * header xlocale.h is available. See also NEED_XLOCALE_H + */ +/* NEED_XLOCALE_H: + * This symbol, if defined, indicates that the C program should + * include to get newlocale() and its friends. */ #$d_newlocale HAS_NEWLOCALE /**/ #$d_freelocale HAS_FREELOCALE /**/ #$d_uselocale HAS_USELOCALE /**/ #$d_duplocale HAS_DUPLOCALE /**/ #$d_querylocale HAS_QUERYLOCALE /**/ +#$xlocale_needed NEED_XLOCALE_H /**/ #$i_xlocale I_XLOCALE /**/ /* HAS_NEXTAFTER: @@ -3452,6 +3479,12 @@ sed <$CONFIG_H -e 's!^#undef\(.*/\)\*!/\*#define\1 \*!' -e 's!^#un */ #$d_strtouq HAS_STRTOUQ /**/ +/* HAS_STRXFRM_L: + * This symbol, if defined, indicates that the strxfrm_l() routine is + * available to transform strings. + */ +#$d_strxfrm_l HAS_STRXFRM_L /**/ + /* HAS_SYSCALL_PROTO: * This symbol, if defined, indicates that the system provides * a prototype for the syscall() function. Otherwise, it is up @@ -4165,6 +4198,16 @@ sed <$CONFIG_H -e 's!^#undef\(.*/\)\*!/\*#define\1 \*!' -e 's!^#un */ #define SELECT_MIN_BITS $selectminbits /**/ +/* ST_DEV_SIZE: + * This variable contains the size of struct stat's st_dev in bytes. + */ +/* ST_DEV_SIGN: + * This symbol holds the signedness of struct stat's st_dev. + * 1 for unsigned, -1 for signed. + */ +#define ST_DEV_SIGN $st_dev_sign /* st_dev sign */ +#define ST_DEV_SIZE $st_dev_size /* st_dev size */ + /* ST_INO_SIZE: * This variable contains the size of struct stat's st_ino in bytes. */ @@ -4247,6 +4290,12 @@ sed <$CONFIG_H -e 's!^#undef\(.*/\)\*!/\*#define\1 \*!' -e 's!^#un */ #$usecbacktrace USE_C_BACKTRACE /**/ +/* USE_STRICT_BY_DEFAULT: + * This symbol, if defined, enables additional defaults. + * At this time it only enables implicit strict by default. + */ +#$usedefaultstrict USE_STRICT_BY_DEFAULT /* use strict by default */ + /* USE_DTRACE: * This symbol, if defined, indicates that Perl should * be built with support for DTrace. @@ -4567,6 +4616,19 @@ sed <$CONFIG_H -e 's!^#undef\(.*/\)\*!/\*#define\1 \*!' -e 's!^#un #$d_endservent_r HAS_ENDSERVENT_R /**/ #define ENDSERVENT_R_PROTO $endservent_r_proto /**/ +/* GETENV_PRESERVES_OTHER_THREAD: + * This symbol, if defined, indicates that the getenv system call doesn't + * zap the static buffer of getenv() in a different thread. + * + * The typical getenv() implementation will return a pointer to the proper + * position in **environ. But some may instead copy them to a static + * buffer in getenv(). If there is a per-thread instance of that buffer, + * or the return points to **environ, then a many-reader/1-writer mutex + * will work; otherwise an exclusive locking mutex is required to prevent + * races. + */ +#$d_getenv_preserves_other_thread GETENV_PRESERVES_OTHER_THREAD /**/ + /* HAS_GETGRENT_R: * This symbol, if defined, indicates that the getgrent_r routine * is available to getgrent re-entrantly. @@ -4863,6 +4925,9 @@ sed <$CONFIG_H -e 's!^#undef\(.*/\)\*!/\*#define\1 \*!' -e 's!^#un #define L_R_TZSET #endif +/* L_R_TZSET: + * If localtime_r() needs tzset, it is defined in this define + */ /* LOCALTIME_R_PROTO: * This symbol encodes the prototype of localtime_r. * It is zero if d_localtime_r is undef, and one of the @@ -4884,10 +4949,15 @@ sed <$CONFIG_H -e 's!^#undef\(.*/\)\*!/\*#define\1 \*!' -e 's!^#un */ #$d_mbrtowc HAS_MBRTOWC /**/ +/* HAS_NL_LANGINFO_L: + * This symbol, when defined, indicates presence of the nl_langinfo_l() + * function + */ /* HAS_THREAD_SAFE_NL_LANGINFO_L: * This symbol, when defined, indicates presence of the nl_langinfo_l() * function, and that it is thread-safe. */ +#$d_nl_langinfo_l HAS_NL_LANGINFO_L /**/ #$d_thread_safe_nl_langinfo_l HAS_THREAD_SAFE_NL_LANGINFO_L /**/ /* OLD_PTHREAD_CREATE_JOINABLE: @@ -5106,6 +5176,18 @@ sed <$CONFIG_H -e 's!^#undef\(.*/\)\*!/\*#define\1 \*!' -e 's!^#un */ #$d_strtold_l HAS_STRTOLD_L /**/ +/* PERL_THREAD_LOCAL: + * This symbol, if defined, gives a linkage specification for thread-local + * storage. For example, for a C11 compiler this will be _Thread_local. + * Beware, some compilers are sensitive to the C language standard they are + * told to parse. For example, suncc defaults to C11, so our probe will + * report that _Thread_local can be used. However, if the -std=c99 is later + * added to the compiler flags, then _Thread_local will become a syntax + * error. Hence it is important for these flags to be consistent between + * probing and use. + */ +#$d_thread_local PERL_THREAD_LOCAL $perl_thread_local /**/ + /* HAS_TMPNAM_R: * This symbol, if defined, indicates that the tmpnam_r routine * is available to tmpnam re-entrantly. @@ -5154,10 +5236,11 @@ sed <$CONFIG_H -e 's!^#undef\(.*/\)\*!/\*#define\1 \*!' -e 's!^#un * This symbol, if defined, indicates that Perl should be built to * use the interpreter-based threading implementation. */ -/* USE_5005THREADS: - * This symbol, if defined, indicates that Perl should be built to - * use the 5.005-based threading implementation. - * Only valid up to 5.8.x. +/* USE_THREADS: + * This symbol, if defined, indicates that Perl should + * be built to use threads. At present, it is a synonym for + * and USE_ITHREADS, but eventually the source ought to be + * changed to use this to mean _any_ threading implementation. */ /* OLD_PTHREADS_API: * This symbol, if defined, indicates that Perl should @@ -5168,11 +5251,8 @@ sed <$CONFIG_H -e 's!^#undef\(.*/\)\*!/\*#define\1 \*!' -e 's!^#un * try to use the various _r versions of library functions. * This is extremely experimental. */ -#$use5005threads USE_5005THREADS /**/ #$useithreads USE_ITHREADS /**/ -#if defined(USE_5005THREADS) && !defined(USE_ITHREADS) -#define USE_THREADS /* until src is revised*/ -#endif +#$usethreads USE_THREADS /**/ #$d_oldpthreads OLD_PTHREADS_API /**/ #$usereentrant USE_REENTRANT_API /**/ diff --git a/gnu/usr.bin/perl/configpm b/gnu/usr.bin/perl/configpm index 00028f658e7..94a47780373 100644 --- a/gnu/usr.bin/perl/configpm +++ b/gnu/usr.bin/perl/configpm @@ -856,7 +856,7 @@ tie %%Config, 'Config', { ENDOFTIE -open(CONFIG_POD, '>', $Config_POD) or die "Can't open $Config_POD: $!"; +open(CONFIG_POD, '>:raw', $Config_POD) or die "Can't open $Config_POD: $!"; print CONFIG_POD <<'ENDOFTAIL'; =head1 NAME @@ -1128,18 +1128,6 @@ my $orig_heavy_txt = ""; } if ($orig_config_txt ne $config_txt or $orig_heavy_txt ne $heavy_txt) { - # During the build don't look in /usr/local for libs or includes - # but after, we want to let modules look there. - my $install_heavy_txt = $heavy_txt; - $install_heavy_txt =~ s,^(ccflags|cppflags)[^=]*='[^']+,$& -I/usr/local/include,gm; - $install_heavy_txt =~ s,^(ldflags|lddlflags)[^=]*='[^']+,$& -L/usr/local/lib,gm; - - open INSTALL_CONFIG_HEAVY, ">", "$Config_heavy.install" - or die "Can't open install $Config_heavy: $!\n"; - print INSTALL_CONFIG_HEAVY $install_heavy_txt; - close INSTALL_CONFIG_HEAVY; - print "updated install $Config_heavy\n"; - open CONFIG, ">", $Config_PM or die "Can't open $Config_PM: $!\n"; open CONFIG_HEAVY, ">", $Config_heavy or die "Can't open $Config_heavy: $!\n"; print CONFIG $config_txt; @@ -1267,7 +1255,6 @@ cppflags: 185 ptrsize: 185 shrpenv: 185 static_ext: 185 -use5005threads: 185 uselargefiles: 185 alignbytes: 184 byteorder: 184 diff --git a/gnu/usr.bin/perl/configure.com b/gnu/usr.bin/perl/configure.com index 713e875d336..1ea419785bc 100644 --- a/gnu/usr.bin/perl/configure.com +++ b/gnu/usr.bin/perl/configure.com @@ -146,7 +146,6 @@ $ ccname="DECC" $ Dec_C_Version = "" $ cxxversion = "" $ use_threads = "F" -$ use_5005_threads = "N" $ use_ithreads = "N" $! $!: option parsing @@ -342,8 +341,8 @@ $ DECK "-r" : reuse C symbols value if possible (skips costly nm extraction).* "-s" : silent mode, only echoes questions and essential information. -"D" : define symbol to have some value: * - -"Dsymbol" symbol gets the value 'define' - -"Dsymbol=value" symbol gets the value 'value' + -"Dsymbol" symbol gets the value 'define' + -"Dsymbol=some value" symbol is set to "some value" -E : stop at the end of questions, after having produced config.sh. * -K : do not use unless you know what you are doing. -O : let -D and -U override definitions from loaded configuration file. * @@ -1871,9 +1870,7 @@ $ DECK If you or somebody else will be maintaining perl at your site, please fill in the correct e-mail address here so that they may be contacted -if necessary. Currently, the "perlbug" program included with perl -will send mail to this address in addition to perlbug@perl.org. You may -enter "none" for no administrator. +if necessary. You may enter "none" for no administrator. $ EOD $ ENDIF $ dflt = "''cf_email'" @@ -2001,18 +1998,9 @@ $ if f$type(useithreads) .nes. "" $ then $ if useithreads .eqs. "undef" then bool_dflt="n" $ endif -$ if f$type(use5005threads) .nes. "" -$ then -$ if use5005threads .or. use5005threads .eqs. "define" -$ then -$ echo "5.005 threads are no longer supported" -$ exit 44 -$ endif -$ endif $ rp = "Use the newer interpreter-based ithreads? [''bool_dflt'] " $ GOSUB myread $ use_ithreads=ans -$ use_5005_threads="N" $ ! Are they on VMS 7.1 or greater? $ IF "''f$extract(1,3, f$getsyi(""version""))'" .GES. "7.1" $ THEN @@ -3437,7 +3425,6 @@ $ ENDIF $! $! Now some that we build up $! -$ use5005threads = "undef" $ d_old_pthread_create_joinable = "undef" $ old_pthread_create_joinable = " " $ IF use_threads @@ -5614,12 +5601,16 @@ $ THEN $ vms_cc_type="decc" $ ENDIF $ d_faststdio="define" +$ d_ffs="undef" +$ d_ffsl="undef" +$ d_getenv_preserves_other_thread="define" $ d_locconv="define" $ d_mblen="define" $ d_mbstowcs="define" $ d_mbtowc="define" $ d_mktime="define" $ d_nl_langinfo="define" +$ d_non_int_bitfields="define" $ d_setlocale="define" $ d_setlocale_accepts_any_locale_name="undef" $ d_stdiobase="define" @@ -5628,6 +5619,7 @@ $ d_stdio_ptr_lval="define" $ d_stdstdio="define" $ d_strcoll="define" $ d_strxfrm="define" +$ d_strxfrm_l="undef" $ i_langinfo="define" $ i_locale="define" $ d_stdio_ptr_lval_sets_cnt="undef" @@ -6223,6 +6215,8 @@ $ WC "d_fdclose='undef'" $ WC "d_fdim='" + d_fdim + "'" $ WC "d_fds_bits='define'" $ WC "d_fegetround='undef'" +$ WC "d_ffs='undef'" +$ WC "d_ffsl='undef'" $ WC "d_fgetpos='define'" $ IF use_ieee_math $ THEN @@ -6409,6 +6403,9 @@ $ WC "d_nextafter='" + d_nextafter + "'" $ WC "d_nexttoward='" + d_nexttoward + "'" $ WC "d_nice='define'" $ WC "d_nl_langinfo='" + d_nl_langinfo + "'" +$ WC "d_nl_langinfo_l='undef'" +$ WC "d_non_int_bitfields='define'" +$ WC "d_getenv_preserves_other_thread='" + d_getenv_preserves_other_thread + "'" $ WC "d_nv_preserves_uv='" + d_nv_preserves_uv + "'" $ WC "nv_overflows_integers_at='" + nv_overflows_integers_at + "'" $ WC "nv_preserves_uv_bits='" + nv_preserves_uv_bits + "'" @@ -6555,6 +6552,7 @@ $ WC "d_statfs_f_flags='undef'" $ WC "d_statfs_s='undef'" $ WC "d_statfsflags='undef'" $ WC "d_static_inline='define'" +$ WC "d_thread_local='undef'" ! see perl_thread_local $ WC "d_stdio_cnt_lval='" + d_stdio_cnt_lval + "'" $ WC "d_stdio_ptr_lval='" + d_stdio_ptr_lval + "'" $ WC "d_stdio_ptr_lval_nochange_cnt='" + d_stdio_ptr_lval_nochange_cnt + "'" @@ -6580,6 +6578,7 @@ $ WC "d_strtoul='define'" $ WC "d_strtoull='" + d_strtoull + "'" $ WC "d_strtouq='" + d_strtouq + "'" $ WC "d_strxfrm='" + d_strxfrm + "'" +$ WC "d_strxfrm_l='" + d_strxfrm_l + "'" $ WC "d_suidsafe='undef'" $ WC "d_symlink='" + d_symlink + "'" $ WC "d_syscall='undef'" @@ -6790,6 +6789,7 @@ $ WC "i_vfork='undef'" $ WC "i_wchar='define'" $ WC "i_wctype='define'" $ WC "i_xlocale='undef'" +$ WC "xlocale_needed='undef'" $ WC "inc_version_list='0'" $ WC "inc_version_list_init='0'" $ WC "installarchlib='" + installarchlib + "'" @@ -6886,6 +6886,7 @@ $ WC "perllibs='" + perllibs + "'" $ WC "perlpath='" + "''vms_prefix':[000000]Perl''exe_ext'" + "'" $ WC "perl_static_inline='static inline'" $ WC "perl_symbol='" + perl_symbol + "'" ! VMS specific +$ WC "perl_thread_local=''" ! FIXME - as this is ia64 ABI, it may well be supported $ WC "perl_verb='" + perl_verb + "'" ! VMS specific $ WC "pgflquota='" + pgflquota + "'" $ WC "pidtype='" + pidtype + "'" @@ -6970,6 +6971,8 @@ $ WC "src='" + src + "'" $ WC "ssizetype='int'" $ WC "startperl=" + startperl ! This one's special--no enclosing single quotes $ WC "static_ext='" + static_ext + "'" +$ WC "st_dev_size='"4"'" +$ WC "st_dev_sign='1'" $ WC "st_ino_size='" + st_ino_size + "'" $ WC "st_ino_sign='1'" $ WC "stdchar='" + stdchar + "'" @@ -6995,11 +6998,11 @@ $ WC "uidsign='1'" $ WC "uidsize='4'" $ WC "uidtype='" + uidtype + "'" $ WC "uquadtype='" + uquadtype + "'" -$ WC "use5005threads='" + use5005threads + "'" $ WC "use64bitall='" + use64bitall + "'" $ WC "use64bitint='" + use64bitint + "'" $ WC "usecasesensitive='" + be_case_sensitive + "'" ! VMS-specific $ WC "usedebugging_perl='"+use_debugging_perl+"'" +$ WC "usedefaultstrict='undef'" $ WC "usedefaulttypes='" + usedefaulttypes + "'" ! VMS-specific $ WC "usecbacktrace='undef'" $ WC "usecrosscompile='undef'" @@ -7284,6 +7287,7 @@ $ IF unlink_all_versions .OR. unlink_all_versions .EQS. "define" THEN - $ IF d_sockaddr_sa_len .EQS. "define" then WC "#define _SOCKADDR_LEN 1" $ IF ccname .EQS. "CXX" then WC "#define NO_ENVIRON_ARRAY" $ IF ccname .EQS. "CXX" then WC "#define VMS" ! only has __VMS by default +$ WC "#define _PTHREAD_EXC_INCL_CLEAN" ! avoid conflict between DECthreads TRY/CATCH and Perl TRY/CATCH $ CLOSE CONFIG $! $ echo4 "Doing variable substitutions on .SH files..." diff --git a/gnu/usr.bin/perl/cop.h b/gnu/usr.bin/perl/cop.h index e16875ad2cf..d93e0f02a45 100644 --- a/gnu/usr.bin/perl/cop.h +++ b/gnu/usr.bin/perl/cop.h @@ -65,12 +65,12 @@ typedef struct jmpenv JMPENV; #define JMPENV_BOOTSTRAP \ STMT_START { \ - PERL_POISON_EXPR(PoisonNew(&PL_start_env, 1, JMPENV));\ - PL_top_env = &PL_start_env; \ - PL_start_env.je_prev = NULL; \ - PL_start_env.je_ret = -1; \ - PL_start_env.je_mustcatch = TRUE; \ - PL_start_env.je_old_delaymagic = 0; \ + PERL_POISON_EXPR(PoisonNew(&PL_start_env, 1, JMPENV));\ + PL_top_env = &PL_start_env; \ + PL_start_env.je_prev = NULL; \ + PL_start_env.je_ret = -1; \ + PL_start_env.je_mustcatch = TRUE; \ + PL_start_env.je_old_delaymagic = 0; \ JE_OLD_STACK_HWM_zero; \ } STMT_END @@ -112,121 +112,153 @@ typedef struct jmpenv JMPENV; #define JMPENV_PUSH(v) \ STMT_START { \ - DEBUG_l({ \ - int i = 0; JMPENV *p = PL_top_env; \ - while (p) { i++; p = p->je_prev; } \ - Perl_deb(aTHX_ "JUMPENV_PUSH level=%d at %s:%d\n", \ - i, __FILE__, __LINE__);}) \ - cur_env.je_prev = PL_top_env; \ + DEBUG_l({ \ + int i = 0; JMPENV *p = PL_top_env; \ + while (p) { i++; p = p->je_prev; } \ + Perl_deb(aTHX_ "JUMPENV_PUSH level=%d at %s:%d\n", \ + i, __FILE__, __LINE__);}) \ + cur_env.je_prev = PL_top_env; \ JE_OLD_STACK_HWM_save(cur_env); \ - cur_env.je_ret = PerlProc_setjmp(cur_env.je_buf, SCOPE_SAVES_SIGNAL_MASK); \ + cur_env.je_ret = PerlProc_setjmp(cur_env.je_buf, SCOPE_SAVES_SIGNAL_MASK); \ JE_OLD_STACK_HWM_restore(cur_env); \ - PL_top_env = &cur_env; \ - cur_env.je_mustcatch = FALSE; \ - cur_env.je_old_delaymagic = PL_delaymagic; \ - (v) = cur_env.je_ret; \ + PL_top_env = &cur_env; \ + cur_env.je_mustcatch = FALSE; \ + cur_env.je_old_delaymagic = PL_delaymagic; \ + (v) = cur_env.je_ret; \ } STMT_END #define JMPENV_POP \ STMT_START { \ - DEBUG_l({ \ - int i = -1; JMPENV *p = PL_top_env; \ - while (p) { i++; p = p->je_prev; } \ - Perl_deb(aTHX_ "JUMPENV_POP level=%d at %s:%d\n", \ - i, __FILE__, __LINE__);}) \ - assert(PL_top_env == &cur_env); \ - PL_delaymagic = cur_env.je_old_delaymagic; \ - PL_top_env = cur_env.je_prev; \ + DEBUG_l({ \ + int i = -1; JMPENV *p = PL_top_env; \ + while (p) { i++; p = p->je_prev; } \ + Perl_deb(aTHX_ "JUMPENV_POP level=%d at %s:%d\n", \ + i, __FILE__, __LINE__);}) \ + assert(PL_top_env == &cur_env); \ + PL_delaymagic = cur_env.je_old_delaymagic; \ + PL_top_env = cur_env.je_prev; \ } STMT_END #define JMPENV_JUMP(v) \ STMT_START { \ - DEBUG_l({ \ - int i = -1; JMPENV *p = PL_top_env; \ - while (p) { i++; p = p->je_prev; } \ - Perl_deb(aTHX_ "JUMPENV_JUMP(%d) level=%d at %s:%d\n", \ - (int)v, i, __FILE__, __LINE__);}) \ - if (PL_top_env->je_prev) \ - PerlProc_longjmp(PL_top_env->je_buf, (v)); \ - if ((v) == 2) \ - PerlProc_exit(STATUS_EXIT); \ - PerlIO_printf(PerlIO_stderr(), "panic: top_env, v=%d\n", (int)v); \ - PerlProc_exit(1); \ + DEBUG_l({ \ + int i = -1; JMPENV *p = PL_top_env; \ + while (p) { i++; p = p->je_prev; } \ + Perl_deb(aTHX_ "JUMPENV_JUMP(%d) level=%d at %s:%d\n", \ + (int)v, i, __FILE__, __LINE__);}) \ + if (PL_top_env->je_prev) \ + PerlProc_longjmp(PL_top_env->je_buf, (v)); \ + if ((v) == 2) \ + PerlProc_exit(STATUS_EXIT); \ + PerlIO_printf(PerlIO_stderr(), "panic: top_env, v=%d\n", (int)v); \ + PerlProc_exit(1); \ } STMT_END #define CATCH_GET (PL_top_env->je_mustcatch) #define CATCH_SET(v) \ STMT_START { \ - DEBUG_l( \ - Perl_deb(aTHX_ \ - "JUMPLEVEL set catch %d => %d (for %p) at %s:%d\n", \ - PL_top_env->je_mustcatch, v, (void*)PL_top_env, \ - __FILE__, __LINE__);) \ - PL_top_env->je_mustcatch = (v); \ + DEBUG_l( \ + Perl_deb(aTHX_ \ + "JUMPLEVEL set catch %d => %d (for %p) at %s:%d\n", \ + PL_top_env->je_mustcatch, v, (void*)PL_top_env, \ + __FILE__, __LINE__);) \ + PL_top_env->je_mustcatch = (v); \ } STMT_END /* -=head1 COP Hint Hashes +=for apidoc_section $COP */ typedef struct refcounted_he COPHH; #define COPHH_KEY_UTF8 REFCOUNTED_HE_KEY_UTF8 +#define COPHH_EXISTS REFCOUNTED_HE_EXISTS /* -=for apidoc Amx|SV *|cophh_fetch_pvn|const COPHH *cophh|const char *keypv|STRLEN keylen|U32 hash|U32 flags - -Look up the entry in the cop hints hash C with the key specified by -C and C. If C has the C bit set, -the key octets are interpreted as UTF-8, otherwise they are interpreted -as Latin-1. C is a precomputed hash of the key string, or zero if -it has not been precomputed. Returns a mortal scalar copy of the value -associated with the key, or C<&PL_sv_placeholder> if there is no value -associated with the key. +=for apidoc Amx|SV *|cophh_fetch_pvn|const COPHH *cophh|const char *key|STRLEN keylen|U32 hash|U32 flags +=for apidoc_item|SV *|cophh_fetch_pv |const COPHH *cophh|const char *key |U32 hash|U32 flags +=for apidoc_item|SV *|cophh_fetch_pvs|const COPHH *cophh| "key" |U32 flags +=for apidoc_item|SV *|cophh_fetch_sv |const COPHH *cophh| SV *key |U32 hash|U32 flags + +These look up the entry in the cop hints hash C with the key specified by +C (and C in the C form), returning that value as a mortal +scalar copy, or C<&PL_sv_placeholder> if there is no value associated with the +key. + +The forms differ in how the key is specified. +In the plain C form, the key is a C language NUL-terminated string. +In the C form, the key is a C language string literal. +In the C form, an additional parameter, C, specifies the length of +the string, which hence, may contain embedded-NUL characters. +In the C form, C<*key> is an SV, and the key is the PV extracted from that. +using C>. + +C is a precomputed hash of the key string, or zero if it has not been +precomputed. This parameter is omitted from the C form, as it is computed +automatically at compile time. + +The only flag currently used from the C parameter is C. +It is illegal to set this in the C form. In the C forms, it specifies +whether the key octets are interpreted as UTF-8 (if set) or as Latin-1 (if +cleared). The C form uses the underlying SV to determine the UTF-8ness of +the octets. =for apidoc Amnh||COPHH_KEY_UTF8 =cut */ -#define cophh_fetch_pvn(cophh, keypv, keylen, hash, flags) \ - Perl_refcounted_he_fetch_pvn(aTHX_ cophh, keypv, keylen, hash, flags) - -/* -=for apidoc Amx|SV *|cophh_fetch_pvs|const COPHH *cophh|"key"|U32 flags - -Like L, but takes a literal string instead -of a string/length pair, and no precomputed hash. - -=cut -*/ +#define cophh_fetch_pvn(cophh, key, keylen, hash, flags) \ + Perl_refcounted_he_fetch_pvn(aTHX_ cophh, key, keylen, hash, flags) #define cophh_fetch_pvs(cophh, key, flags) \ Perl_refcounted_he_fetch_pvn(aTHX_ cophh, STR_WITH_LEN(key), 0, flags) -/* -=for apidoc Amx|SV *|cophh_fetch_pv|const COPHH *cophh|const char *key|U32 hash|U32 flags - -Like L, but takes a nul-terminated string instead of -a string/length pair. - -=cut -*/ - #define cophh_fetch_pv(cophh, key, hash, flags) \ Perl_refcounted_he_fetch_pv(aTHX_ cophh, key, hash, flags) -/* -=for apidoc Amx|SV *|cophh_fetch_sv|const COPHH *cophh|SV *key|U32 hash|U32 flags +#define cophh_fetch_sv(cophh, key, hash, flags) \ + Perl_refcounted_he_fetch_sv(aTHX_ cophh, key, hash, flags) -Like L, but takes a Perl scalar instead of a -string/length pair. +/* +=for apidoc Amx|bool|cophh_exists_pvn|const COPHH *cophh|const char *key|STRLEN keylen|U32 hash|U32 flags + +These look up the hint entry in the cop C with the key specified by +C (and C in the C form), returning true if a value exists, +and false otherwise. + +The forms differ in how the key is specified. +In the plain C form, the key is a C language NUL-terminated string. +In the C form, the key is a C language string literal. +In the C form, an additional parameter, C, specifies the length of +the string, which hence, may contain embedded-NUL characters. +In the C form, C<*key> is an SV, and the key is the PV extracted from that. +using C>. + +C is a precomputed hash of the key string, or zero if it has not been +precomputed. This parameter is omitted from the C form, as it is computed +automatically at compile time. + +The only flag currently used from the C parameter is C. +It is illegal to set this in the C form. In the C forms, it specifies +whether the key octets are interpreted as UTF-8 (if set) or as Latin-1 (if +cleared). The C form uses the underlying SV to determine the UTF-8ness of +the octets. =cut */ -#define cophh_fetch_sv(cophh, key, hash, flags) \ - Perl_refcounted_he_fetch_sv(aTHX_ cophh, key, hash, flags) +#define cophh_exists_pvn(cophh, key, keylen, hash, flags) \ + cBOOL(Perl_refcounted_he_fetch_pvn(aTHX_ cophh, key, keylen, hash, flags | COPHH_EXISTS)) + +#define cophh_exists_pvs(cophh, key, flags) \ + cBOOL(Perl_refcounted_he_fetch_pvn(aTHX_ cophh, STR_WITH_LEN(key), 0, flags | COPHH_EXISTS)) + +#define cophh_exists_pv(cophh, key, hash, flags) \ + cBOOL(Perl_refcounted_he_fetch_pv(aTHX_ cophh, key, hash, flags | COPHH_EXISTS)) + +#define cophh_exists_sv(cophh, key, hash, flags) \ + cBOOL(Perl_refcounted_he_fetch_sv(aTHX_ cophh, key, hash, flags | COPHH_EXISTS)) /* =for apidoc Amx|HV *|cophh_2hv|const COPHH *cophh|U32 flags @@ -273,122 +305,102 @@ Generate and return a fresh cop hints hash containing no entries. #define cophh_new_empty() ((COPHH *)NULL) /* -=for apidoc Amx|COPHH *|cophh_store_pvn|COPHH *cophh|const char *keypv|STRLEN keylen|U32 hash|SV *value|U32 flags +=for apidoc Amx|COPHH *|cophh_store_pvn|COPHH *cophh|const char *key|STRLEN keylen|U32 hash|SV *value|U32 flags +=for apidoc_item|COPHH *|cophh_store_pv |COPHH *cophh|const char *key |U32 hash|SV *value|U32 flags +=for apidoc_item|COPHH *|cophh_store_pvs|COPHH *cophh| "key" |SV *value|U32 flags +=for apidoc_item|COPHH *|cophh_store_sv |COPHH *cophh| SV *key |U32 hash|SV *value|U32 flags -Stores a value, associated with a key, in the cop hints hash C, -and returns the modified hash. The returned hash pointer is in general +These store a value, associated with a key, in the cop hints hash C, +and return the modified hash. The returned hash pointer is in general not the same as the hash pointer that was passed in. The input hash is consumed by the function, and the pointer to it must not be subsequently used. Use L if you need both hashes. -The key is specified by C and C. If C has the -C bit set, the key octets are interpreted as UTF-8, -otherwise they are interpreted as Latin-1. C is a precomputed -hash of the key string, or zero if it has not been precomputed. - C is the scalar value to store for this key. C is copied -by this function, which thus does not take ownership of any reference -to it, and later changes to the scalar will not be reflected in the -value visible in the cop hints hash. Complex types of scalar will not -be stored with referential integrity, but will be coerced to strings. +by these functions, which thus do not take ownership of any reference +to it, and hence later changes to the scalar will not be reflected in the value +visible in the cop hints hash. Complex types of scalar will not be stored with +referential integrity, but will be coerced to strings. + +The forms differ in how the key is specified. In all forms, the key is pointed +to by C. +In the plain C form, the key is a C language NUL-terminated string. +In the C form, the key is a C language string literal. +In the C form, an additional parameter, C, specifies the length of +the string, which hence, may contain embedded-NUL characters. +In the C form, C<*key> is an SV, and the key is the PV extracted from that. +using C>. + +C is a precomputed hash of the key string, or zero if it has not been +precomputed. This parameter is omitted from the C form, as it is computed +automatically at compile time. + +The only flag currently used from the C parameter is C. +It is illegal to set this in the C form. In the C forms, it specifies +whether the key octets are interpreted as UTF-8 (if set) or as Latin-1 (if +cleared). The C form uses the underlying SV to determine the UTF-8ness of +the octets. =cut */ -#define cophh_store_pvn(cophh, keypv, keylen, hash, value, flags) \ - Perl_refcounted_he_new_pvn(aTHX_ cophh, keypv, keylen, hash, value, flags) - -/* -=for apidoc Amx|COPHH *|cophh_store_pvs|const COPHH *cophh|"key"|SV *value|U32 flags - -Like L, but takes a literal string instead -of a string/length pair, and no precomputed hash. - -=cut -*/ +#define cophh_store_pvn(cophh, key, keylen, hash, value, flags) \ + Perl_refcounted_he_new_pvn(aTHX_ cophh, key, keylen, hash, value, flags) #define cophh_store_pvs(cophh, key, value, flags) \ Perl_refcounted_he_new_pvn(aTHX_ cophh, STR_WITH_LEN(key), 0, value, flags) -/* -=for apidoc Amx|COPHH *|cophh_store_pv|const COPHH *cophh|const char *key|U32 hash|SV *value|U32 flags - -Like L, but takes a nul-terminated string instead of -a string/length pair. - -=cut -*/ - #define cophh_store_pv(cophh, key, hash, value, flags) \ Perl_refcounted_he_new_pv(aTHX_ cophh, key, hash, value, flags) -/* -=for apidoc Amx|COPHH *|cophh_store_sv|const COPHH *cophh|SV *key|U32 hash|SV *value|U32 flags - -Like L, but takes a Perl scalar instead of a -string/length pair. - -=cut -*/ - #define cophh_store_sv(cophh, key, hash, value, flags) \ Perl_refcounted_he_new_sv(aTHX_ cophh, key, hash, value, flags) /* -=for apidoc Amx|COPHH *|cophh_delete_pvn|COPHH *cophh|const char *keypv|STRLEN keylen|U32 hash|U32 flags +=for apidoc Amx|COPHH *|cophh_delete_pvn|COPHH *cophh|const char *key|STRLEN keylen|U32 hash|U32 flags +=for apidoc_item|COPHH *|cophh_delete_pv |COPHH *cophh|const char *key |U32 hash|U32 flags +=for apidoc_item|COPHH *|cophh_delete_pvs|COPHH *cophh| "key" |U32 flags +=for apidoc_item|COPHH *|cophh_delete_sv |COPHH *cophh| SV *key |U32 hash|U32 flags -Delete a key and its associated value from the cop hints hash C, -and returns the modified hash. The returned hash pointer is in general +These delete a key and its associated value from the cop hints hash C, +and return the modified hash. The returned hash pointer is in general not the same as the hash pointer that was passed in. The input hash is consumed by the function, and the pointer to it must not be subsequently used. Use L if you need both hashes. -The key is specified by C and C. If C has the -C bit set, the key octets are interpreted as UTF-8, -otherwise they are interpreted as Latin-1. C is a precomputed -hash of the key string, or zero if it has not been precomputed. +The forms differ in how the key is specified. In all forms, the key is pointed +to by C. +In the plain C form, the key is a C language NUL-terminated string. +In the C form, the key is a C language string literal. +In the C form, an additional parameter, C, specifies the length of +the string, which hence, may contain embedded-NUL characters. +In the C form, C<*key> is an SV, and the key is the PV extracted from that. +using C>. + +C is a precomputed hash of the key string, or zero if it has not been +precomputed. This parameter is omitted from the C form, as it is computed +automatically at compile time. + +The only flag currently used from the C parameter is C. +It is illegal to set this in the C form. In the C forms, it specifies +whether the key octets are interpreted as UTF-8 (if set) or as Latin-1 (if +cleared). The C form uses the underlying SV to determine the UTF-8ness of +the octets. =cut */ -#define cophh_delete_pvn(cophh, keypv, keylen, hash, flags) \ - Perl_refcounted_he_new_pvn(aTHX_ cophh, keypv, keylen, hash, \ - (SV *)NULL, flags) - -/* -=for apidoc Amx|COPHH *|cophh_delete_pvs|const COPHH *cophh|"key"|U32 flags - -Like L, but takes a literal string instead -of a string/length pair, and no precomputed hash. - -=cut -*/ +#define cophh_delete_pvn(cophh, key, keylen, hash, flags) \ + Perl_refcounted_he_new_pvn(aTHX_ cophh, key, keylen, hash, \ + (SV *)NULL, flags) #define cophh_delete_pvs(cophh, key, flags) \ Perl_refcounted_he_new_pvn(aTHX_ cophh, STR_WITH_LEN(key), 0, \ - (SV *)NULL, flags) - -/* -=for apidoc Amx|COPHH *|cophh_delete_pv|const COPHH *cophh|const char *key|U32 hash|U32 flags - -Like L, but takes a nul-terminated string instead of -a string/length pair. - -=cut -*/ + (SV *)NULL, flags) #define cophh_delete_pv(cophh, key, hash, flags) \ Perl_refcounted_he_new_pv(aTHX_ cophh, key, hash, (SV *)NULL, flags) -/* -=for apidoc Amx|COPHH *|cophh_delete_sv|const COPHH *cophh|SV *key|U32 hash|U32 flags - -Like L, but takes a Perl scalar instead of a -string/length pair. - -=cut -*/ - #define cophh_delete_sv(cophh, key, hash, flags) \ Perl_refcounted_he_new_sv(aTHX_ cophh, key, hash, (SV *)NULL, flags) @@ -402,11 +414,11 @@ struct cop { /* label for this construct is now stored in cop_hints_hash */ #ifdef USE_ITHREADS PADOFFSET cop_stashoff; /* offset into PL_stashpad, for the - package the line was compiled in */ - char * cop_file; /* file name the following line # is from */ + package the line was compiled in */ + char * cop_file; /* name of file this command is from */ #else HV * cop_stash; /* package line was compiled in */ - GV * cop_filegv; /* file the following line # is from */ + GV * cop_filegv; /* name of GV file this command is from */ #endif U32 cop_hints; /* hints bits from pragmata */ U32 cop_seq; /* parse sequence number */ @@ -423,36 +435,77 @@ struct cop { U32 cop_features; }; +/* +=for apidoc Am|const char *|CopFILE|const COP * c +Returns the name of the file associated with the C C + +=for apidoc Am|STRLEN|CopLINE|const COP * c +Returns the line number in the source code associated with the C C + +=for apidoc Am|AV *|CopFILEAV|const COP * c +Returns the AV associated with the C C, creating it if necessary. + +=for apidoc Am|AV *|CopFILEAVn|const COP * c +Returns the AV associated with the C C, returning NULL if it +doesn't already exist. + +=for apidoc Am|SV *|CopFILESV|const COP * c +Returns the SV associated with the C C + +=for apidoc Am|void|CopFILE_set|COP * c|const char * pv +Makes C the name of the file associated with the C C + +=for apidoc Am|GV *|CopFILEGV|const COP * c +Returns the GV associated with the C C + +=for apidoc CopFILEGV_set +Available only on unthreaded perls. Makes C the name of the file +associated with the C C + +=for apidoc Am|HV *|CopSTASH|const COP * c +Returns the stash associated with C. + +=for apidoc Am|bool|CopSTASH_eq|const COP * c|const HV * hv +Returns a boolean as to whether or not C is the stash associated with C. + +=for apidoc Am|bool|CopSTASH_set|COP * c|HV * hv +Set the stash associated with C to C. + +=for apidoc Am|char *|CopSTASHPV|const COP * c +Returns the package name of the stash associated with C, or C if no +associated stash + +=for apidoc Am|void|CopSTASHPV_set|COP * c|const char * pv +Set the package name of the stash associated with C, to the NUL-terminated C +string C

, creating the package if necessary. + +=cut +*/ + #ifdef USE_ITHREADS + # define CopFILE(c) ((c)->cop_file) # define CopFILEGV(c) (CopFILE(c) \ - ? gv_fetchfile(CopFILE(c)) : NULL) + ? gv_fetchfile(CopFILE(c)) : NULL) -# ifdef NETWARE -# define CopFILE_set(c,pv) ((c)->cop_file = savepv(pv)) -# define CopFILE_setn(c,pv,l) ((c)->cop_file = savepvn((pv),(l))) -# else -# define CopFILE_set(c,pv) ((c)->cop_file = savesharedpv(pv)) -# define CopFILE_setn(c,pv,l) ((c)->cop_file = savesharedpvn((pv),(l))) -# endif +# define CopFILE_set(c,pv) ((c)->cop_file = savesharedpv(pv)) +# define CopFILE_setn(c,pv,l) ((c)->cop_file = savesharedpvn((pv),(l))) # define CopFILESV(c) (CopFILE(c) \ - ? GvSV(gv_fetchfile(CopFILE(c))) : NULL) + ? GvSV(gv_fetchfile(CopFILE(c))) : NULL) # define CopFILEAV(c) (CopFILE(c) \ - ? GvAV(gv_fetchfile(CopFILE(c))) : NULL) + ? GvAV(gv_fetchfile(CopFILE(c))) : NULL) # define CopFILEAVx(c) (assert_(CopFILE(c)) \ - GvAV(gv_fetchfile(CopFILE(c)))) - + GvAV(gv_fetchfile(CopFILE(c)))) +# define CopFILEAVn(c) (cop_file_avn(c)) # define CopSTASH(c) PL_stashpad[(c)->cop_stashoff] # define CopSTASH_set(c,hv) ((c)->cop_stashoff = (hv) \ - ? alloccopstash(hv) \ - : 0) -# ifdef NETWARE -# define CopFILE_free(c) SAVECOPFILE_FREE(c) -# else -# define CopFILE_free(c) (PerlMemShared_free(CopFILE(c)),(CopFILE(c) = NULL)) -# endif -#else + ? alloccopstash(hv) \ + : 0) +# define CopFILE_free(c) (PerlMemShared_free(CopFILE(c)),(CopFILE(c) = NULL)) + +#else /* Above: yes threads; Below no threads */ + # define CopFILEGV(c) ((c)->cop_filegv) # define CopFILEGV_set(c,gv) ((c)->cop_filegv = (GV*)SvREFCNT_inc(gv)) # define CopFILE_set(c,pv) CopFILEGV_set((c), gv_fetchfile(pv)) @@ -464,8 +517,9 @@ struct cop { # else # define CopFILEAVx(c) (GvAV(CopFILEGV(c))) # endif -# define CopFILE(c) (CopFILEGV(c) \ - ? GvNAME(CopFILEGV(c))+2 : NULL) +# define CopFILEAVn(c) (CopFILEGV(c) ? GvAVn(CopFILEGV(c)) : NULL) +# define CopFILE(c) (CopFILEGV(c) /* +2 for '_<' */ \ + ? GvNAME(CopFILEGV(c))+2 : NULL) # define CopSTASH(c) ((c)->cop_stash) # define CopSTASH_set(c,hv) ((c)->cop_stash = (hv)) # define CopFILE_free(c) (SvREFCNT_dec(CopFILEGV(c)),(CopFILEGV(c) = NULL)) @@ -481,61 +535,92 @@ struct cop { #define CopHINTHASH_set(c,h) ((c)->cop_hints_hash = (h)) /* -=head1 COP Hint Reading -*/ - -/* -=for apidoc Am|SV *|cop_hints_fetch_pvn|const COP *cop|const char *keypv|STRLEN keylen|U32 hash|U32 flags - -Look up the hint entry in the cop C with the key specified by -C and C. If C has the C bit set, -the key octets are interpreted as UTF-8, otherwise they are interpreted -as Latin-1. C is a precomputed hash of the key string, or zero if -it has not been precomputed. Returns a mortal scalar copy of the value -associated with the key, or C<&PL_sv_placeholder> if there is no value -associated with the key. +=for apidoc Am|SV *|cop_hints_fetch_pvn|const COP *cop|const char *key|STRLEN keylen|U32 hash|U32 flags +=for apidoc_item|SV *|cop_hints_fetch_pv |const COP *cop|const char *key |U32 hash|U32 flags +=for apidoc_item|SV *|cop_hints_fetch_pvs|const COP *cop| "key" |U32 flags +=for apidoc_item|SV *|cop_hints_fetch_sv |const COP *cop| SV *key |U32 hash|U32 flags + +These look up the hint entry in the cop C with the key specified by +C (and C in the C form), returning that value as a mortal +scalar copy, or C<&PL_sv_placeholder> if there is no value associated with the +key. + +The forms differ in how the key is specified. +In the plain C form, the key is a C language NUL-terminated string. +In the C form, the key is a C language string literal. +In the C form, an additional parameter, C, specifies the length of +the string, which hence, may contain embedded-NUL characters. +In the C form, C<*key> is an SV, and the key is the PV extracted from that. +using C>. + +C is a precomputed hash of the key string, or zero if it has not been +precomputed. This parameter is omitted from the C form, as it is computed +automatically at compile time. + +The only flag currently used from the C parameter is C. +It is illegal to set this in the C form. In the C forms, it specifies +whether the key octets are interpreted as UTF-8 (if set) or as Latin-1 (if +cleared). The C form uses the underlying SV to determine the UTF-8ness of +the octets. =cut */ -#define cop_hints_fetch_pvn(cop, keypv, keylen, hash, flags) \ - cophh_fetch_pvn(CopHINTHASH_get(cop), keypv, keylen, hash, flags) - -/* -=for apidoc Am|SV *|cop_hints_fetch_pvs|const COP *cop|"key"|U32 flags - -Like L, but takes a literal string -instead of a string/length pair, and no precomputed hash. - -=cut -*/ +#define cop_hints_fetch_pvn(cop, key, keylen, hash, flags) \ + cophh_fetch_pvn(CopHINTHASH_get(cop), key, keylen, hash, flags) #define cop_hints_fetch_pvs(cop, key, flags) \ cophh_fetch_pvs(CopHINTHASH_get(cop), key, flags) -/* -=for apidoc Am|SV *|cop_hints_fetch_pv|const COP *cop|const char *key|U32 hash|U32 flags - -Like L, but takes a nul-terminated string instead -of a string/length pair. - -=cut -*/ - #define cop_hints_fetch_pv(cop, key, hash, flags) \ cophh_fetch_pv(CopHINTHASH_get(cop), key, hash, flags) -/* -=for apidoc Am|SV *|cop_hints_fetch_sv|const COP *cop|SV *key|U32 hash|U32 flags +#define cop_hints_fetch_sv(cop, key, hash, flags) \ + cophh_fetch_sv(CopHINTHASH_get(cop), key, hash, flags) -Like L, but takes a Perl scalar instead of a -string/length pair. +/* +=for apidoc Am|bool|cop_hints_exists_pvn|const COP *cop|const char *key|STRLEN keylen|U32 hash|U32 flags +=for apidoc_item|bool|cop_hints_exists_pv |const COP *cop|const char *key |U32 hash|U32 flags +=for apidoc_item|bool|cop_hints_exists_pvs|const COP *cop| "key" |U32 flags +=for apidoc_item|bool|cop_hints_exists_sv |const COP *cop| SV *key |U32 hash|U32 flags + +These look up the hint entry in the cop C with the key specified by +C (and C in the C form), returning true if a value exists, +and false otherwise. + +The forms differ in how the key is specified. In all forms, the key is pointed +to by C. +In the plain C form, the key is a C language NUL-terminated string. +In the C form, the key is a C language string literal. +In the C form, an additional parameter, C, specifies the length of +the string, which hence, may contain embedded-NUL characters. +In the C form, C<*key> is an SV, and the key is the PV extracted from that. +using C>. + +C is a precomputed hash of the key string, or zero if it has not been +precomputed. This parameter is omitted from the C form, as it is computed +automatically at compile time. + +The only flag currently used from the C parameter is C. +It is illegal to set this in the C form. In the C forms, it specifies +whether the key octets are interpreted as UTF-8 (if set) or as Latin-1 (if +cleared). The C form uses the underlying SV to determine the UTF-8ness of +the octets. =cut */ -#define cop_hints_fetch_sv(cop, key, hash, flags) \ - cophh_fetch_sv(CopHINTHASH_get(cop), key, hash, flags) +#define cop_hints_exists_pvn(cop, key, keylen, hash, flags) \ + cophh_exists_pvn(CopHINTHASH_get(cop), key, keylen, hash, flags) + +#define cop_hints_exists_pvs(cop, key, flags) \ + cophh_exists_pvs(CopHINTHASH_get(cop), key, flags) + +#define cop_hints_exists_pv(cop, key, hash, flags) \ + cophh_exists_pv(CopHINTHASH_get(cop), key, hash, flags) + +#define cop_hints_exists_sv(cop, key, hash, flags) \ + cophh_exists_sv(CopHINTHASH_get(cop), key, hash, flags) /* =for apidoc Am|HV *|cop_hints_2hv|const COP *cop|U32 flags @@ -551,19 +636,17 @@ be zero. cophh_2hv(CopHINTHASH_get(cop), flags) /* -=for apidoc Am|const char *|CopLABEL|COP *const cop - -Returns the label attached to a cop. - -=for apidoc Am|const char *|CopLABEL_len|COP *const cop|STRLEN *len +=for apidoc Am|const char *|CopLABEL |COP *const cop +=for apidoc_item|const char *|CopLABEL_len |COP *const cop|STRLEN *len +=for apidoc_item|const char *|CopLABEL_len_flags|COP *const cop|STRLEN *len|U32 *flags -Returns the label attached to a cop, and stores its length in bytes into -C<*len>. +These return the label attached to a cop. -=for apidoc Am|const char *|CopLABEL_len_flags|COP *const cop|STRLEN *len|U32 *flags +C and C additionally store the number of +bytes comprising the returned label into C<*len>. -Returns the label attached to a cop, and stores its length in bytes into -C<*len>. Upon return, C<*flags> will be set to either C or 0. +C additionally returns the UTF-8ness of the returned label, +by setting C<*flags> to 0 or C. =cut */ @@ -584,8 +667,8 @@ C<*len>. Upon return, C<*flags> will be set to either C or 0. #define CopHINTS_get(c) ((c)->cop_hints + 0) #define CopHINTS_set(c, h) STMT_START { \ - (c)->cop_hints = (h); \ - } STMT_END + (c)->cop_hints = (h); \ + } STMT_END /* * Here we have some enormously heavy (or at least ponderous) wizardry. @@ -636,27 +719,21 @@ struct block_format { # define CX_POP(cx) cxstack_ix--; #endif - -/* base for the next two macros. Don't use directly. - * The context frame holds a reference to the CV so that it can't be - * freed while we're executing it */ - - #define CX_PUSHSUB_GET_LVALUE_MASK(func) \ - /* If the context is indeterminate, then only the lvalue */ \ - /* flags that the caller also has are applicable. */ \ - ( \ - (PL_op->op_flags & OPf_WANT) \ - ? OPpENTERSUB_LVAL_MASK \ - : !(PL_op->op_private & OPpENTERSUB_LVAL_MASK) \ - ? 0 : (U8)func(aTHX) \ - ) + /* If the context is indeterminate, then only the lvalue */ \ + /* flags that the caller also has are applicable. */ \ + ( \ + (PL_op->op_flags & OPf_WANT) \ + ? OPpENTERSUB_LVAL_MASK \ + : !(PL_op->op_private & OPpENTERSUB_LVAL_MASK) \ + ? 0 : (U8)func(aTHX) \ + ) /* Restore old @_ */ #define CX_POP_SAVEARRAY(cx) \ STMT_START { \ AV *cx_pop_savearray_av = GvAV(PL_defgv); \ - GvAV(PL_defgv) = cx->blk_sub.savearray; \ + GvAV(PL_defgv) = cx->blk_sub.savearray; \ cx->blk_sub.savearray = NULL; \ SvREFCNT_dec(cx_pop_savearray_av); \ } STMT_END @@ -665,9 +742,9 @@ struct block_format { * leave any (a fast av_clear(ary), basically) */ #define CLEAR_ARGARRAY(ary) \ STMT_START { \ - AvMAX(ary) += AvARRAY(ary) - AvALLOC(ary); \ - AvARRAY(ary) = AvALLOC(ary); \ - AvFILLp(ary) = -1; \ + AvMAX(ary) += AvARRAY(ary) - AvALLOC(ary); \ + AvARRAY(ary) = AvALLOC(ary); \ + AvFILLp(ary) = -1; \ } STMT_END @@ -697,27 +774,27 @@ struct block_eval { struct block_loop { LOOP * my_op; /* My op, that contains redo, next and last ops. */ union { /* different ways of locating the iteration variable */ - SV **svp; /* for lexicals: address of pad slot */ - GV *gv; /* for package vars */ + SV **svp; /* for lexicals: address of pad slot */ + GV *gv; /* for package vars */ } itervar_u; SV *itersave; /* the original iteration var */ union { - struct { /* CXt_LOOP_ARY, C */ - AV *ary; /* array being iterated over */ - IV ix; /* index relative to base of array */ - } ary; - struct { /* CXt_LOOP_LIST, C */ - I32 basesp; /* first element of list on stack */ - IV ix; /* index relative to basesp */ - } stack; - struct { /* CXt_LOOP_LAZYIV, C */ - IV cur; - IV end; - } lazyiv; - struct { /* CXt_LOOP_LAZYSV C */ - SV * cur; - SV * end; /* maxiumum value (or minimum in reverse) */ - } lazysv; + struct { /* CXt_LOOP_ARY, C */ + AV *ary; /* array being iterated over */ + IV ix; /* index relative to base of array */ + } ary; + struct { /* CXt_LOOP_LIST, C */ + I32 basesp; /* first element of list on stack */ + IV ix; /* index relative to basesp */ + } stack; + struct { /* CXt_LOOP_LAZYIV, C */ + IV cur; + IV end; + } lazyiv; + struct { /* CXt_LOOP_LAZYSV C */ + SV * cur; + SV * end; /* maxiumum value (or minimum in reverse) */ + } lazysv; } state_u; #ifdef USE_ITHREADS PAD *oldcomppad; /* needed to map itervar_u.svp during thread clone */ @@ -747,13 +824,13 @@ struct block_loop { * Note the contrast with CvLVALUE(), which is a property of the sub * rather than the call site. */ -#define CxLVAL(c) (0 + ((c)->blk_u16 & 0xff)) +#define CxLVAL(c) (0 + ((U8)((c)->blk_u16))) /* given/when context */ struct block_givwhen { - OP *leave_op; + OP *leave_op; SV *defsv_save; /* the original $_ */ }; @@ -774,11 +851,11 @@ struct block { I32 blku_oldscopesp; /* scope stack index */ union { - struct block_sub blku_sub; - struct block_format blku_format; - struct block_eval blku_eval; - struct block_loop blku_loop; - struct block_givwhen blku_givwhen; + struct block_sub blku_sub; + struct block_format blku_format; + struct block_eval blku_eval; + struct block_loop blku_loop; + struct block_givwhen blku_givwhen; } blk_u; }; #define blk_oldsp cx_u.cx_blk.blku_oldsp @@ -798,15 +875,15 @@ struct block { #define CX_DEBUG(cx, action) \ DEBUG_l( \ - Perl_deb(aTHX_ "CX %ld %s %s (scope %ld,%ld) (save %ld,%ld) at %s:%d\n",\ - (long)cxstack_ix, \ - action, \ - PL_block_type[CxTYPE(cx)], \ - (long)PL_scopestack_ix, \ - (long)(cx->blk_oldscopesp), \ - (long)PL_savestack_ix, \ - (long)(cx->blk_oldsaveix), \ - __FILE__, __LINE__)); + Perl_deb(aTHX_ "CX %ld %s %s (scope %ld,%ld) (save %ld,%ld) at %s:%d\n",\ + (long)cxstack_ix, \ + action, \ + PL_block_type[CxTYPE(cx)], \ + (long)PL_scopestack_ix, \ + (long)(cx->blk_oldscopesp), \ + (long)PL_savestack_ix, \ + (long)(cx->blk_oldsaveix), \ + __FILE__, __LINE__)); @@ -828,6 +905,9 @@ struct subst { void * sbu_rxres; REGEXP * sbu_rx; }; + +#ifdef PERL_CORE + #define sb_iters cx_u.cx_subst.sbu_iters #define sb_maxiters cx_u.cx_subst.sbu_maxiters #define sb_rflags cx_u.cx_subst.sbu_rflags @@ -841,34 +921,33 @@ struct subst { #define sb_rxres cx_u.cx_subst.sbu_rxres #define sb_rx cx_u.cx_subst.sbu_rx -#ifdef PERL_CORE # define CX_PUSHSUBST(cx) CXINC, cx = CX_CUR(), \ - cx->blk_oldsaveix = oldsave, \ - cx->sb_iters = iters, \ - cx->sb_maxiters = maxiters, \ - cx->sb_rflags = r_flags, \ - cx->sb_rxtainted = rxtainted, \ - cx->sb_orig = orig, \ - cx->sb_dstr = dstr, \ - cx->sb_targ = targ, \ - cx->sb_s = s, \ - cx->sb_m = m, \ - cx->sb_strend = strend, \ - cx->sb_rxres = NULL, \ - cx->sb_rx = rx, \ - cx->cx_type = CXt_SUBST | (once ? CXp_ONCE : 0); \ - rxres_save(&cx->sb_rxres, rx); \ - (void)ReREFCNT_inc(rx); \ + cx->blk_oldsaveix = oldsave, \ + cx->sb_iters = iters, \ + cx->sb_maxiters = maxiters, \ + cx->sb_rflags = r_flags, \ + cx->sb_rxtainted = rxtainted, \ + cx->sb_orig = orig, \ + cx->sb_dstr = dstr, \ + cx->sb_targ = targ, \ + cx->sb_s = s, \ + cx->sb_m = m, \ + cx->sb_strend = strend, \ + cx->sb_rxres = NULL, \ + cx->sb_rx = rx, \ + cx->cx_type = CXt_SUBST | (once ? CXp_ONCE : 0); \ + rxres_save(&cx->sb_rxres, rx); \ + (void)ReREFCNT_inc(rx); \ SvREFCNT_inc_void_NN(targ) # define CX_POPSUBST(cx) \ STMT_START { \ REGEXP *re; \ assert(CxTYPE(cx) == CXt_SUBST); \ - rxres_free(&cx->sb_rxres); \ - re = cx->sb_rx; \ - cx->sb_rx = NULL; \ - ReREFCNT_dec(re); \ + rxres_free(&cx->sb_rxres); \ + re = cx->sb_rx; \ + cx->sb_rx = NULL; \ + ReREFCNT_dec(re); \ SvREFCNT_dec_NN(cx->sb_targ); \ } STMT_END #endif @@ -877,8 +956,8 @@ struct subst { struct context { union { - struct block cx_blk; - struct subst cx_subst; + struct block cx_blk; + struct subst cx_subst; } cx_u; }; #define cx_type cx_u.cx_subst.sbu_type @@ -905,8 +984,9 @@ struct context { or plain block { ...; } */ #define CXt_SUB 9 #define CXt_FORMAT 10 -#define CXt_EVAL 11 +#define CXt_EVAL 11 /* eval'', eval{}, try{} */ #define CXt_SUBST 12 +#define CXt_DEFER 13 /* SUBST doesn't feature in all switch statements. */ /* private flags for CXt_SUB and CXt_FORMAT */ @@ -918,7 +998,8 @@ struct context { /* private flags for CXt_EVAL */ #define CXp_REAL 0x20 /* truly eval'', not a lookalike */ -#define CXp_TRYBLOCK 0x40 /* eval{}, not eval'' or similar */ +#define CXp_EVALBLOCK 0x40 /* eval{}, not eval'' or similar */ +#define CXp_TRY 0x80 /* try {} block */ /* private flags for CXt_LOOP */ @@ -939,68 +1020,50 @@ struct context { && CxTYPE(cx) <= CXt_LOOP_PLAIN) #define CxMULTICALL(c) ((c)->cx_type & CXp_MULTICALL) #define CxREALEVAL(c) (((c)->cx_type & (CXTYPEMASK|CXp_REAL)) \ - == (CXt_EVAL|CXp_REAL)) -#define CxTRYBLOCK(c) (((c)->cx_type & (CXTYPEMASK|CXp_TRYBLOCK)) \ - == (CXt_EVAL|CXp_TRYBLOCK)) + == (CXt_EVAL|CXp_REAL)) +#define CxEVALBLOCK(c) (((c)->cx_type & (CXTYPEMASK|CXp_EVALBLOCK)) \ + == (CXt_EVAL|CXp_EVALBLOCK)) +#define CxTRY(c) (((c)->cx_type & (CXTYPEMASK|CXp_TRY)) \ + == (CXt_EVAL|CXp_TRY)) #define CxFOREACH(c) ( CxTYPE(cx) >= CXt_LOOP_ARY \ && CxTYPE(cx) <= CXt_LOOP_LIST) -#define CXINC (cxstack_ix < cxstack_max ? ++cxstack_ix : (cxstack_ix = cxinc())) - -/* -=head1 "Gimme" Values -*/ - -/* -=for apidoc AmnU||G_SCALAR -Used to indicate scalar context. See C>, C>, and -L. +/* private flags for CXt_DEFER */ +#define CXp_FINALLY 0x20 /* `finally` block; semantically identical + * but matters for diagnostic messages */ -=for apidoc AmnU||G_ARRAY -Used to indicate list context. See C>, C> and -L. +/* deprecated old name before real try/catch was added */ +#define CXp_TRYBLOCK CXp_EVALBLOCK +#define CxTRYBLOCK(c) CxEVALBLOCK(c) -=for apidoc AmnU||G_VOID -Used to indicate void context. See C> and L. - -=for apidoc AmnU||G_DISCARD -Indicates that arguments returned from a callback should be discarded. See -L. - -=for apidoc AmnU||G_EVAL - -Used to force a Perl C wrapper around a callback. See -L. - -=for apidoc AmnU||G_NOARGS - -Indicates that no arguments are being sent to a callback. See -L. +#define CXINC (cxstack_ix < cxstack_max ? ++cxstack_ix : (cxstack_ix = cxinc())) -=cut -*/ +#define G_SCALAR 2 +#define G_LIST 3 +#define G_VOID 1 +#define G_WANT 3 -#define G_SCALAR 2 -#define G_ARRAY 3 -#define G_VOID 1 -#define G_WANT 3 +#ifndef PERL_CORE + /* name prior to 5.31.1 */ +# define G_ARRAY G_LIST +#endif /* extra flags for Perl_call_* routines */ #define G_DISCARD 0x4 /* Call FREETMPS. - Don't change this without consulting the - hash actions codes defined in hv.h */ + Don't change this without consulting the + hash actions codes defined in hv.h */ #define G_EVAL 0x8 /* Assume eval {} around subroutine call. */ #define G_NOARGS 0x10 /* Don't construct a @_ array. */ #define G_KEEPERR 0x20 /* Warn for errors, don't overwrite $@ */ #define G_NODEBUG 0x40 /* Disable debugging at toplevel. */ #define G_METHOD 0x80 /* Calling method. */ #define G_FAKINGEVAL 0x100 /* Faking an eval context for call_sv or - fold_constants. */ + fold_constants. */ #define G_UNDEF_FILL 0x200 /* Fill the stack with &PL_sv_undef - A special case for UNSHIFT in - Perl_magic_methcall(). */ + A special case for UNSHIFT in + Perl_magic_methcall(). */ #define G_WRITING_TO_STDERR 0x400 /* Perl_write_to_stderr() is calling - Perl_magic_methcall(). */ + Perl_magic_methcall(). */ #define G_RE_REPARSING 0x800 /* compiling a run-time /(?{..})/ */ #define G_METHOD_NAMED 0x1000 /* calling named method, eg without :: or ' */ #define G_RETHROW 0x2000 /* eval_sv(): re-throw any error */ @@ -1044,8 +1107,8 @@ struct stackinfo { I32 si_cxsubix; /* topmost sub/eval/format */ I32 si_type; /* type of runlevel */ I32 si_markoff; /* offset where markstack begins for us. - * currently used only with DEBUGGING, - * but not #ifdef-ed for bincompat */ + * currently used only with DEBUGGING, + * but not #ifdef-ed for bincompat */ #if defined DEBUGGING && !defined DEBUGGING_RE_ONLY /* high water mark: for checking if the stack was correctly extended / * tested for extension by each pp function */ @@ -1054,6 +1117,12 @@ struct stackinfo { }; +/* +=for apidoc Ay||PERL_SI +Use this typedef to declare variables that are to hold C. + +=cut +*/ typedef struct stackinfo PERL_SI; #define cxstack (PL_curstackinfo->si_cxstack) @@ -1075,25 +1144,25 @@ typedef struct stackinfo PERL_SI; #define PUSHSTACKi(type) \ STMT_START { \ - PERL_SI *next = PL_curstackinfo->si_next; \ - DEBUG_l({ \ - int i = 0; PERL_SI *p = PL_curstackinfo; \ - while (p) { i++; p = p->si_prev; } \ - Perl_deb(aTHX_ "push STACKINFO %d at %s:%d\n", \ - i, __FILE__, __LINE__);}) \ - if (!next) { \ - next = new_stackinfo(32, 2048/sizeof(PERL_CONTEXT) - 1); \ - next->si_prev = PL_curstackinfo; \ - PL_curstackinfo->si_next = next; \ - } \ - next->si_type = type; \ - next->si_cxix = -1; \ - next->si_cxsubix = -1; \ + PERL_SI *next = PL_curstackinfo->si_next; \ + DEBUG_l({ \ + int i = 0; PERL_SI *p = PL_curstackinfo; \ + while (p) { i++; p = p->si_prev; } \ + Perl_deb(aTHX_ "push STACKINFO %d at %s:%d\n", \ + i, __FILE__, __LINE__);}) \ + if (!next) { \ + next = new_stackinfo(32, 2048/sizeof(PERL_CONTEXT) - 1); \ + next->si_prev = PL_curstackinfo; \ + PL_curstackinfo->si_next = next; \ + } \ + next->si_type = type; \ + next->si_cxix = -1; \ + next->si_cxsubix = -1; \ PUSHSTACK_INIT_HWM(next); \ - AvFILLp(next->si_stack) = 0; \ - SWITCHSTACK(PL_curstack,next->si_stack); \ - PL_curstackinfo = next; \ - SET_MARK_OFFSET; \ + AvFILLp(next->si_stack) = 0; \ + SWITCHSTACK(PL_curstack,next->si_stack); \ + PL_curstackinfo = next; \ + SET_MARK_OFFSET; \ } STMT_END #define PUSHSTACK PUSHSTACKi(PERLSI_UNKNOWN) @@ -1102,37 +1171,46 @@ typedef struct stackinfo PERL_SI; * PUTBACK/SPAGAIN to flush/refresh any local SP that may be active */ #define POPSTACK \ STMT_START { \ - dSP; \ - PERL_SI * const prev = PL_curstackinfo->si_prev; \ - DEBUG_l({ \ - int i = -1; PERL_SI *p = PL_curstackinfo; \ - while (p) { i++; p = p->si_prev; } \ - Perl_deb(aTHX_ "pop STACKINFO %d at %s:%d\n", \ - i, __FILE__, __LINE__);}) \ - if (!prev) { \ - Perl_croak_popstack(); \ - } \ - SWITCHSTACK(PL_curstack,prev->si_stack); \ - /* don't free prev here, free them all at the END{} */ \ - PL_curstackinfo = prev; \ + dSP; \ + PERL_SI * const prev = PL_curstackinfo->si_prev; \ + DEBUG_l({ \ + int i = -1; PERL_SI *p = PL_curstackinfo; \ + while (p) { i++; p = p->si_prev; } \ + Perl_deb(aTHX_ "pop STACKINFO %d at %s:%d\n", \ + i, __FILE__, __LINE__);}) \ + if (!prev) { \ + Perl_croak_popstack(); \ + } \ + SWITCHSTACK(PL_curstack,prev->si_stack); \ + /* don't free prev here, free them all at the END{} */ \ + PL_curstackinfo = prev; \ } STMT_END #define POPSTACK_TO(s) \ STMT_START { \ - while (PL_curstack != s) { \ - dounwind(-1); \ - POPSTACK; \ - } \ + while (PL_curstack != s) { \ + dounwind(-1); \ + POPSTACK; \ + } \ } STMT_END -#define IN_PERL_COMPILETIME cBOOL(PL_curcop == &PL_compiling) -#define IN_PERL_RUNTIME cBOOL(PL_curcop != &PL_compiling) - +/* +=for apidoc_section $utility +=for apidoc Amn|bool|IN_PERL_COMPILETIME +Returns 1 if this macro is being called during the compilation phase of the +program; otherwise 0; +=for apidoc Amn|bool|IN_PERL_RUNTIME +Returns 1 if this macro is being called during the execution phase of the +program; otherwise 0; +=cut +*/ +#define IN_PERL_COMPILETIME cBOOL(PL_curcop == &PL_compiling) +#define IN_PERL_RUNTIME cBOOL(PL_curcop != &PL_compiling) /* -=head1 Multicall Functions +=for apidoc_section $multicall =for apidoc Amns||dMULTICALL Declare local variables for a multicall. See L. @@ -1164,43 +1242,43 @@ See L. #define PUSH_MULTICALL_FLAGS(the_cv, flags) \ STMT_START { \ PERL_CONTEXT *cx; \ - CV * const _nOnclAshIngNamE_ = the_cv; \ - CV * const cv = _nOnclAshIngNamE_; \ - PADLIST * const padlist = CvPADLIST(cv); \ - multicall_oldcatch = CATCH_GET; \ - CATCH_SET(TRUE); \ - PUSHSTACKi(PERLSI_MULTICALL); \ - cx = cx_pushblock((CXt_SUB|CXp_MULTICALL|flags), (U8)gimme, \ + CV * const _nOnclAshIngNamE_ = the_cv; \ + CV * const cv = _nOnclAshIngNamE_; \ + PADLIST * const padlist = CvPADLIST(cv); \ + multicall_oldcatch = CATCH_GET; \ + CATCH_SET(TRUE); \ + PUSHSTACKi(PERLSI_MULTICALL); \ + cx = cx_pushblock((CXt_SUB|CXp_MULTICALL|flags), (U8)gimme, \ PL_stack_sp, PL_savestack_ix); \ cx_pushsub(cx, cv, NULL, 0); \ - SAVEOP(); \ + SAVEOP(); \ if (!(flags & CXp_SUB_RE_FAKE)) \ CvDEPTH(cv)++; \ - if (CvDEPTH(cv) >= 2) \ - Perl_pad_push(aTHX_ padlist, CvDEPTH(cv)); \ - PAD_SET_CUR_NOSAVE(padlist, CvDEPTH(cv)); \ - multicall_cop = CvSTART(cv); \ + if (CvDEPTH(cv) >= 2) \ + Perl_pad_push(aTHX_ padlist, CvDEPTH(cv)); \ + PAD_SET_CUR_NOSAVE(padlist, CvDEPTH(cv)); \ + multicall_cop = CvSTART(cv); \ } STMT_END #define MULTICALL \ STMT_START { \ - PL_op = multicall_cop; \ - CALLRUNOPS(aTHX); \ + PL_op = multicall_cop; \ + CALLRUNOPS(aTHX); \ } STMT_END #define POP_MULTICALL \ STMT_START { \ PERL_CONTEXT *cx; \ - cx = CX_CUR(); \ - CX_LEAVE_SCOPE(cx); \ + cx = CX_CUR(); \ + CX_LEAVE_SCOPE(cx); \ cx_popsub_common(cx); \ gimme = cx->blk_gimme; \ PERL_UNUSED_VAR(gimme); /* for API */ \ - cx_popblock(cx); \ - CX_POP(cx); \ - POPSTACK; \ - CATCH_SET(multicall_oldcatch); \ - SPAGAIN; \ + cx_popblock(cx); \ + CX_POP(cx); \ + POPSTACK; \ + CATCH_SET(multicall_oldcatch); \ + SPAGAIN; \ } STMT_END /* Change the CV of an already-pushed MULTICALL CxSUB block. @@ -1208,20 +1286,20 @@ See L. #define CHANGE_MULTICALL_FLAGS(the_cv, flags) \ STMT_START { \ - CV * const _nOnclAshIngNamE_ = the_cv; \ - CV * const cv = _nOnclAshIngNamE_; \ - PADLIST * const padlist = CvPADLIST(cv); \ + CV * const _nOnclAshIngNamE_ = the_cv; \ + CV * const cv = _nOnclAshIngNamE_; \ + PADLIST * const padlist = CvPADLIST(cv); \ PERL_CONTEXT *cx = CX_CUR(); \ - assert(CxMULTICALL(cx)); \ + assert(CxMULTICALL(cx)); \ cx_popsub_common(cx); \ - cx->cx_type = (CXt_SUB|CXp_MULTICALL|flags); \ + cx->cx_type = (CXt_SUB|CXp_MULTICALL|flags); \ cx_pushsub(cx, cv, NULL, 0); \ if (!(flags & CXp_SUB_RE_FAKE)) \ CvDEPTH(cv)++; \ - if (CvDEPTH(cv) >= 2) \ - Perl_pad_push(aTHX_ padlist, CvDEPTH(cv)); \ - PAD_SET_CUR_NOSAVE(padlist, CvDEPTH(cv)); \ - multicall_cop = CvSTART(cv); \ + if (CvDEPTH(cv) >= 2) \ + Perl_pad_push(aTHX_ padlist, CvDEPTH(cv)); \ + PAD_SET_CUR_NOSAVE(padlist, CvDEPTH(cv)); \ + multicall_cop = CvSTART(cv); \ } STMT_END /* * ex: set ts=8 sts=4 sw=4 et: diff --git a/gnu/usr.bin/perl/cpan/Archive-Tar/bin/ptar b/gnu/usr.bin/perl/cpan/Archive-Tar/bin/ptar index 67d41301710..8c3fec19141 100644 --- a/gnu/usr.bin/perl/cpan/Archive-Tar/bin/ptar +++ b/gnu/usr.bin/perl/cpan/Archive-Tar/bin/ptar @@ -1,5 +1,6 @@ #!/usr/bin/perl use strict; +use warnings; BEGIN { pop @INC if $INC[-1] eq '.' } use File::Find; diff --git a/gnu/usr.bin/perl/cpan/Archive-Tar/bin/ptardiff b/gnu/usr.bin/perl/cpan/Archive-Tar/bin/ptardiff index 4668fa6be07..1ae54928f26 100644 --- a/gnu/usr.bin/perl/cpan/Archive-Tar/bin/ptardiff +++ b/gnu/usr.bin/perl/cpan/Archive-Tar/bin/ptardiff @@ -2,6 +2,7 @@ BEGIN { pop @INC if $INC[-1] eq '.' } use strict; +use warnings; use Archive::Tar; use Getopt::Std; diff --git a/gnu/usr.bin/perl/cpan/Archive-Tar/lib/Archive/Tar.pm b/gnu/usr.bin/perl/cpan/Archive-Tar/lib/Archive/Tar.pm index af6786ee519..476e646e44d 100644 --- a/gnu/usr.bin/perl/cpan/Archive-Tar/lib/Archive/Tar.pm +++ b/gnu/usr.bin/perl/cpan/Archive-Tar/lib/Archive/Tar.pm @@ -31,7 +31,7 @@ use vars qw[$DEBUG $error $VERSION $WARN $FOLLOW_SYMLINK $CHOWN $CHMOD $DEBUG = 0; $WARN = 1; $FOLLOW_SYMLINK = 0; -$VERSION = "2.36"; +$VERSION = "2.40"; $CHOWN = 1; $CHMOD = 1; $SAME_PERMISSIONS = $> == 0 ? 1 : 0; @@ -48,7 +48,7 @@ BEGIN { ### switch between perlio and IO::String $HAS_IO_STRING = eval { require IO::String; - import IO::String; + IO::String->import; 1; } || 0; } @@ -918,7 +918,7 @@ sub _extract_file { } if( $CHOWN && CAN_CHOWN->() and not -l $full ) { - chown $entry->uid, $entry->gid, $full or + CORE::chown( $entry->uid, $entry->gid, $full ) or $self->_error( qq[Could not set uid/gid on '$full'] ); } @@ -929,7 +929,7 @@ sub _extract_file { unless ($SAME_PERMISSIONS) { $mode &= ~(oct(7000) | umask); } - chmod $mode, $full or + CORE::chmod( $mode, $full ) or $self->_error( qq[Could not chown '$full' to ] . $entry->mode ); } @@ -2284,7 +2284,7 @@ write a C<.tar.Z> file use Archive::Tar; use IO::File; - my $fh = new IO::File "| compress -c >$filename"; + my $fh = IO::File->new( "| compress -c >$filename" ); my $tar = Archive::Tar->new(); ... $tar->write($fh); diff --git a/gnu/usr.bin/perl/cpan/Archive-Tar/lib/Archive/Tar/Constant.pm b/gnu/usr.bin/perl/cpan/Archive-Tar/lib/Archive/Tar/Constant.pm index 398c4799a5c..6f293a2f498 100644 --- a/gnu/usr.bin/perl/cpan/Archive-Tar/lib/Archive/Tar/Constant.pm +++ b/gnu/usr.bin/perl/cpan/Archive-Tar/lib/Archive/Tar/Constant.pm @@ -1,9 +1,14 @@ package Archive::Tar::Constant; +use strict; +use warnings; + +use vars qw[$VERSION @ISA @EXPORT]; + BEGIN { require Exporter; - $VERSION = '2.36'; + $VERSION = '2.40'; @ISA = qw[Exporter]; require Time::Local if $^O eq "MacOS"; @@ -11,9 +16,6 @@ BEGIN { @EXPORT = Archive::Tar::Constant->_list_consts( __PACKAGE__ ); -use strict; -use warnings; - use constant FILE => 0; use constant HARDLINK => 1; use constant SYMLINK => 2; @@ -86,7 +88,10 @@ use constant XZ => do { !$ENV{'PERL5_AT_NO_XZ'} and }; use constant GZIP_MAGIC_NUM => qr/^(?:\037\213|\037\235)/; -use constant BZIP_MAGIC_NUM => qr/^BZh\d/; + + # ASCII: B Z h 0 9 +use constant BZIP_MAGIC_NUM => qr/^\x42\x5A\x68[\x30-\x39]/; + use constant XZ_MAGIC_NUM => qr/^\xFD\x37\x7A\x58\x5A\x00/; use constant CAN_CHOWN => sub { ($> == 0 and $^O ne "MacOS" and $^O ne "MSWin32") }; diff --git a/gnu/usr.bin/perl/cpan/Archive-Tar/lib/Archive/Tar/File.pm b/gnu/usr.bin/perl/cpan/Archive-Tar/lib/Archive/Tar/File.pm index 0887a923bd3..c361f046d7a 100644 --- a/gnu/usr.bin/perl/cpan/Archive-Tar/lib/Archive/Tar/File.pm +++ b/gnu/usr.bin/perl/cpan/Archive-Tar/lib/Archive/Tar/File.pm @@ -7,13 +7,11 @@ use File::Spec::Unix (); use File::Spec (); use File::Basename (); -### avoid circular use, so only require; -require Archive::Tar; use Archive::Tar::Constant; use vars qw[@ISA $VERSION]; #@ISA = qw[Archive::Tar]; -$VERSION = '2.36'; +$VERSION = '2.40'; ### set value to 1 to oct() it during the unpack ### @@ -469,6 +467,8 @@ sub extract { local $Carp::CarpLevel += 1; + ### avoid circular use, so only require; + require Archive::Tar; return Archive::Tar->_extract_file( $self, @_ ); } diff --git a/gnu/usr.bin/perl/cpan/CPAN/lib/App/Cpan.pm b/gnu/usr.bin/perl/cpan/CPAN/lib/App/Cpan.pm index b563addf527..6358e82a036 100644 --- a/gnu/usr.bin/perl/cpan/CPAN/lib/App/Cpan.pm +++ b/gnu/usr.bin/perl/cpan/CPAN/lib/App/Cpan.pm @@ -6,7 +6,7 @@ use vars qw($VERSION); use if $] < 5.008 => 'IO::Scalar'; -$VERSION = '1.675'; +$VERSION = '1.678'; =head1 NAME @@ -244,9 +244,9 @@ The build tools, L and L use some, while others matter to the levels above them. Some of these are specified by the Perl Toolchain Gang: -Lancaster Concensus: L +Lancaster Consensus: L -Oslo Concensus: L +Oslo Consensus: L =over 4 @@ -347,10 +347,10 @@ sub GOOD_EXIT () { 0 } # key => [ sub ref, takes args?, exit value, description ] # options that do their thing first, then exit - h => [ \&_print_help, NO_ARGS, GOOD_EXIT, 'Printing help' ], - v => [ \&_print_version, NO_ARGS, GOOD_EXIT, 'Printing version' ], - V => [ \&_print_details, NO_ARGS, GOOD_EXIT, 'Printing detailed version' ], - X => [ \&_list_all_namespaces, NO_ARGS, GOOD_EXIT, 'Listing all namespaces' ], + h => [ \&_print_help, NO_ARGS, GOOD_EXIT, 'Printing help' ], + v => [ \&_print_version, NO_ARGS, GOOD_EXIT, 'Printing version' ], + V => [ \&_print_details, NO_ARGS, GOOD_EXIT, 'Printing detailed version' ], + X => [ \&_list_all_namespaces, NO_ARGS, GOOD_EXIT, 'Listing all namespaces' ], # options that affect other options j => [ \&_load_config, ARGS, GOOD_EXIT, 'Use specified config file' ], @@ -359,7 +359,7 @@ sub GOOD_EXIT () { 0 } I => [ \&_load_local_lib, NO_ARGS, GOOD_EXIT, 'Loading local::lib' ], M => [ \&_use_these_mirrors, ARGS, GOOD_EXIT, 'Setting per session mirrors' ], P => [ \&_find_good_mirrors, NO_ARGS, GOOD_EXIT, 'Finding good mirrors' ], - w => [ \&_turn_on_warnings, NO_ARGS, GOOD_EXIT, 'Turning on warnings' ], + w => [ \&_turn_on_warnings, NO_ARGS, GOOD_EXIT, 'Turning on warnings' ], # options that do their one thing g => [ \&_download, ARGS, GOOD_EXIT, 'Download the latest distro' ], @@ -377,13 +377,13 @@ sub GOOD_EXIT () { 0 } r => [ \&_recompile, NO_ARGS, GOOD_EXIT, 'Recompiling' ], u => [ \&_upgrade, NO_ARGS, GOOD_EXIT, 'Running `make test`' ], - 's' => [ \&_shell, NO_ARGS, GOOD_EXIT, 'Running `make test`' ], + 's' => [ \&_shell, NO_ARGS, GOOD_EXIT, 'Drop into the CPAN.pm shell' ], - 'x' => [ \&_guess_namespace, ARGS, GOOD_EXIT, 'Guessing namespaces' ], + 'x' => [ \&_guess_namespace, ARGS, GOOD_EXIT, 'Guessing namespaces' ], c => [ \&_default, ARGS, GOOD_EXIT, 'Running `make clean`' ], f => [ \&_default, ARGS, GOOD_EXIT, 'Installing with force' ], i => [ \&_default, ARGS, GOOD_EXIT, 'Running `make install`' ], - 'm' => [ \&_default, ARGS, GOOD_EXIT, 'Running `make`' ], + 'm' => [ \&_default, ARGS, GOOD_EXIT, 'Running `make`' ], t => [ \&_default, ARGS, GOOD_EXIT, 'Running `make test`' ], T => [ \&_default, ARGS, GOOD_EXIT, 'Installing with notest' ], ); @@ -483,7 +483,7 @@ sub _setup_environment { $ENV{PERL_MM_USE_DEFAULT} = 1 unless defined $ENV{PERL_MM_USE_DEFAULT}; } -=item run() +=item run( ARGS ) Just do it. @@ -496,8 +496,8 @@ my $logger; sub run { - my $class = shift; - + my( $class, @args ) = @_; + local @ARGV = @args; my $return_value = HEY_IT_WORKED; # assume that things will work $logger = $class->_init_logger; @@ -555,11 +555,11 @@ unless (defined $LL{$LEVEL}){ } sub new { bless \ my $x, $_[0] } sub AUTOLOAD { - my $autoload = our $AUTOLOAD; - $autoload =~ s/.*://; - return if $LL{uc $autoload} < $LL{$LEVEL}; - $CPAN::Frontend->mywarn(">($autoload): $_\n") - for split /[\r\n]+/, $_[1]; + my $autoload = our $AUTOLOAD; + $autoload =~ s/.*://; + return if $LL{uc $autoload} < $LL{$LEVEL}; + $CPAN::Frontend->mywarn(">($autoload): $_\n") + for split /[\r\n]+/, $_[1]; } sub DESTROY { 1 } } @@ -567,24 +567,24 @@ sub DESTROY { 1 } # load a module without searching the default entry for the current # directory sub _safe_load_module { - my $name = shift; + my $name = shift; - local @INC = @INC; - pop @INC if $INC[-1] eq '.'; + local @INC = @INC; + pop @INC if $INC[-1] eq '.'; - eval "require $name; 1"; + eval "require $name; 1"; } sub _init_logger { my $log4perl_loaded = _safe_load_module("Log::Log4perl"); - unless( $log4perl_loaded ) - { - print STDOUT "Loading internal logger. Log::Log4perl recommended for better logging\n"; - $logger = Local::Null::Logger->new; - return $logger; - } + unless( $log4perl_loaded ) + { + print STDOUT "Loading internal logger. Log::Log4perl recommended for better logging\n"; + $logger = Local::Null::Logger->new; + return $logger; + } Log::Log4perl::init( \ <<"HERE" ); log4perl.rootLogger=$LEVEL, A1 @@ -689,7 +689,7 @@ sub _hook_into_CPANpm_report *CPAN::Shell::mywarn = sub { my($self,$what) = @_; - $scalar .= $what; + $scalar .= $what if defined $what; $self->print_ornamented($what, $CPAN::Config->{colorize_warn}||'bold red on_white' ); @@ -730,21 +730,21 @@ sub _get_cpanpm_last_line my @lines = <$fh>; - # This is a bit ugly. Once we examine a line, we have to - # examine the line before it and go through all of the same - # regexes. I could do something fancy, but this works. - REGEXES: { + # This is a bit ugly. Once we examine a line, we have to + # examine the line before it and go through all of the same + # regexes. I could do something fancy, but this works. + REGEXES: { foreach my $regex ( @skip_lines ) { if( $lines[-1] =~ m/$regex/ ) - { - pop @lines; - redo REGEXES; # we have to go through all of them for every line! - } + { + pop @lines; + redo REGEXES; # we have to go through all of them for every line! + } } } - $logger->debug( "Last interesting line of CPAN.pm output is:\n\t$lines[-1]" ); + $logger->debug( "Last interesting line of CPAN.pm output is:\n\t$lines[-1]" ); $lines[-1]; } @@ -833,15 +833,15 @@ sub _print_details # -V { require CPAN::Mirrors; - if ( $CPAN::Config->{connect_to_internet_ok} ) { - $CPAN::Frontend->myprint(qq{Trying to fetch a mirror list from the Internet\n}); - eval { CPAN::FTP->localize('MIRRORED.BY',File::Spec->catfile($CPAN::Config->{keep_source_where},'MIRRORED.BY'),3,1) } - or $CPAN::Frontend->mywarn(<<'HERE'); + if ( $CPAN::Config->{connect_to_internet_ok} ) { + $CPAN::Frontend->myprint(qq{Trying to fetch a mirror list from the Internet\n}); + eval { CPAN::FTP->localize('MIRRORED.BY',File::Spec->catfile($CPAN::Config->{keep_source_where},'MIRRORED.BY'),3,1) } + or $CPAN::Frontend->mywarn(<<'HERE'); We failed to get a copy of the mirror list from the Internet. You will need to provide CPAN mirror URLs yourself. HERE - $CPAN::Frontend->myprint("\n"); - } + $CPAN::Frontend->myprint("\n"); + } my $mirrors = CPAN::Mirrors->new( _mirror_file() ); my @continents = $mirrors->find_best_continents; @@ -912,21 +912,21 @@ Stolen from File::Path::Expand sub _expand_filename { - my( $path ) = @_; - no warnings 'uninitialized'; - $logger->debug( "Expanding path $path\n" ); - $path =~ s{\A~([^/]+)?}{ + my( $path ) = @_; + no warnings 'uninitialized'; + $logger->debug( "Expanding path $path\n" ); + $path =~ s{\A~([^/]+)?}{ _home_of( $1 || $> ) || "~$1" - }e; - return $path; + }e; + return $path; } sub _home_of { require User::pwent; - my( $user ) = @_; - my $ent = User::pwent::getpw($user) or return; - return $ent->dir; + my( $user ) = @_; + my $ent = User::pwent::getpw($user) or return; + return $ent->dir; } sub _get_default_inc @@ -1033,19 +1033,19 @@ sub _get_ping_report return -e $url->file; } - my( $port ) = $url->port; + my( $port ) = $url->port; - return unless $port; + return unless $port; - if ( $ping->can('port_number') ) { - $ping->port_number($port); - } - else { - $ping->{'port_num'} = $port; - } + if ( $ping->can('port_number') ) { + $ping->port_number($port); + } + else { + $ping->{'port_num'} = $port; + } - $ping->hires(1) if $ping->can( 'hires' ); - my( $alive, $rtt ) = eval{ $ping->ping( $url->host ) }; + $ping->hires(1) if $ping->can( 'hires' ); + my( $alive, $rtt ) = eval{ $ping->ping( $url->host ) }; $alive ? $rtt : undef; } @@ -1284,16 +1284,16 @@ sub _get_changes_file croak "Reading Changes files requires LWP::Simple and URI\n" unless _safe_load_module("LWP::Simple") && _safe_load_module("URI"); - my $url = shift; + my $url = shift; - my $content = LWP::Simple::get( $url ); - $logger->info( "Got $url ..." ) if defined $content; + my $content = LWP::Simple::get( $url ); + $logger->info( "Got $url ..." ) if defined $content; #print $content; my( $change_link ) = $content =~ m|Changes|gi; my $changes_url = URI->new_abs( $change_link, $url ); - $logger->debug( "Change link is: $changes_url" ); + $logger->debug( "Change link is: $changes_url" ); my $changes = LWP::Simple::get( $changes_url ); @@ -1373,8 +1373,8 @@ sub _show_out_of_date foreach my $module ( @$modules ) { - next unless $module = _expand_module($module); - next unless $module->inst_file; + next unless $module = _expand_module($module); + next unless $module->inst_file; next if $module->uptodate; printf "%-40s %.4f %.4f\n", $module->id, @@ -1479,7 +1479,7 @@ sub _eval_version # split package line to hide from PAUSE my $eval = qq{ package - ExtUtils::MakeMaker::_version; + ExtUtils::MakeMaker::_version; local $sigil$var; \$$var=undef; do { @@ -1519,8 +1519,8 @@ sub _expand_module my( $module ) = @_; my $expanded = CPAN::Shell->expandany( $module ); - return $expanded if $expanded; - $expanded = CPAN::Shell->expand( "Module", $module ); + return $expanded if $expanded; + $expanded = CPAN::Shell->expand( "Module", $module ); unless( defined $expanded ) { $logger->error( "Could not expand [$module]. Check the module name." ); my $threshold = ( @@ -1689,7 +1689,7 @@ but the canonical source is now in the above repo. Japheth Cleaver added the bits to allow a forced install (C<-f>). -Jim Brandt suggest and provided the initial implementation for the +Jim Brandt suggested and provided the initial implementation for the up-to-date and Changes features. Adam Kennedy pointed out that C causes problems on Windows @@ -1705,7 +1705,7 @@ brian d foy, C<< >> =head1 COPYRIGHT -Copyright (c) 2001-2018, brian d foy, All Rights Reserved. +Copyright (c) 2001-2021, brian d foy, All Rights Reserved. You may redistribute this under the same terms as Perl itself. diff --git a/gnu/usr.bin/perl/cpan/CPAN/lib/CPAN.pm b/gnu/usr.bin/perl/cpan/CPAN/lib/CPAN.pm index 2d87f47f8b9..19dcad24423 100644 --- a/gnu/usr.bin/perl/cpan/CPAN/lib/CPAN.pm +++ b/gnu/usr.bin/perl/cpan/CPAN/lib/CPAN.pm @@ -2,7 +2,7 @@ # vim: ts=4 sts=4 sw=4: use strict; package CPAN; -$CPAN::VERSION = '2.27'; +$CPAN::VERSION = '2.33'; $CPAN::VERSION =~ s/_//; # we need to run chdir all over and we would get at wrong libraries @@ -549,8 +549,9 @@ sub _yaml_module () { # CPAN::_yaml_loadfile sub _yaml_loadfile { - my($self,$local_file) = @_; + my($self,$local_file,$opt) = @_; return +[] unless -s $local_file; + my $opt_loadblessed = $opt->{loadblessed} || $CPAN::Config->{yaml_load_code} || 0; my $yaml_module = _yaml_module; if ($CPAN::META->has_inst($yaml_module)) { # temporarily enable yaml code deserialisation @@ -558,7 +559,9 @@ sub _yaml_loadfile { # 5.6.2 could not do the local() with the reference # so we do it manually instead my $old_loadcode = ${"$yaml_module\::LoadCode"}; + my $old_loadblessed = ${"$yaml_module\::LoadBlessed"}; ${ "$yaml_module\::LoadCode" } = $CPAN::Config->{yaml_load_code} || 0; + ${ "$yaml_module\::LoadBlessed" } = $opt_loadblessed ? 1 : 0; my ($code, @yaml); if ($code = UNIVERSAL::can($yaml_module, "LoadFile")) { @@ -569,19 +572,20 @@ sub _yaml_loadfile { } } elsif ($code = UNIVERSAL::can($yaml_module, "Load")) { local *FH; - unless (open FH, $local_file) { + if (open FH, $local_file) { + local $/; + my $ystream = ; + eval { @yaml = $code->($ystream); }; + if ($@) { + # this shall not be done by the frontend + die CPAN::Exception::yaml_process_error->new($yaml_module,$local_file,"parse",$@); + } + } else { $CPAN::Frontend->mywarn("Could not open '$local_file': $!"); - return +[]; - } - local $/; - my $ystream = ; - eval { @yaml = $code->($ystream); }; - if ($@) { - # this shall not be done by the frontend - die CPAN::Exception::yaml_process_error->new($yaml_module,$local_file,"parse",$@); } } ${"$yaml_module\::LoadCode"} = $old_loadcode; + ${"$yaml_module\::LoadBlessed"} = $old_loadblessed; return \@yaml; } else { # this shall not be done by the frontend @@ -1111,6 +1115,28 @@ sub has_usable { sub {require Net::FTP}, sub {require Net::Config}, ], + 'IO::Socket::SSL' => [ + sub { + require IO::Socket::SSL; + unless (CPAN::Version->vge(IO::Socket::SSL::->VERSION,1.56)) { + for ("Will not use IO::Socket::SSL, need 1.56\n") { + $CPAN::Frontend->mywarn($_); + die $_; + } + } + } + ], + 'Net::SSLeay' => [ + sub { + require Net::SSLeay; + unless (CPAN::Version->vge(Net::SSLeay::->VERSION,1.49)) { + for ("Will not use Net::SSLeay, need 1.49\n") { + $CPAN::Frontend->mywarn($_); + die $_; + } + } + } + ], 'HTTP::Tiny' => [ sub { require HTTP::Tiny; @@ -2249,6 +2275,8 @@ currently defined: prefs_dir local directory to store per-distro build options proxy_user username for accessing an authenticating proxy proxy_pass password for accessing an authenticating proxy + pushy_https use https to cpan.org when possible, otherwise use http + to cpan.org and issue a warning randomize_urllist add some randomness to the sequence of the urllist recommends_policy whether recommended prerequisites should be included scan_cache controls scanning of cache ('atstart', 'atexit' or 'never') diff --git a/gnu/usr.bin/perl/cpan/CPAN/lib/CPAN/Distribution.pm b/gnu/usr.bin/perl/cpan/CPAN/lib/CPAN/Distribution.pm index 34121085395..d346a6bf299 100644 --- a/gnu/usr.bin/perl/cpan/CPAN/lib/CPAN/Distribution.pm +++ b/gnu/usr.bin/perl/cpan/CPAN/lib/CPAN/Distribution.pm @@ -9,7 +9,7 @@ use File::Path (); use POSIX ":sys_wait_h"; @CPAN::Distribution::ISA = qw(CPAN::InfoObj); use vars qw($VERSION); -$VERSION = "2.27"; +$VERSION = "2.33"; my $run_allow_installing_within_test = 1; # boolean; either in test or in install, there is no third option @@ -1445,8 +1445,14 @@ sub verifyCHECKSUM { local($") = "/"; if (my $size = -s $lc_want) { $self->debug("lc_want[$lc_want]size[$size]") if $CPAN::DEBUG; - if ($self->CHECKSUM_check_file($lc_want,1)) { - return $self->{CHECKSUM_STATUS} = "OK"; + my @stat = stat $lc_want; + my $epoch_starting_support_of_cpan_path = 1637471530; + if ($stat[9] >= $epoch_starting_support_of_cpan_path) { + if ($self->CHECKSUM_check_file($lc_want, 1)) { + return $self->{CHECKSUM_STATUS} = "OK"; + } + } else { + unlink $lc_want; } } $lc_file = CPAN::FTP->localize("authors/id/@local", @@ -1473,18 +1479,32 @@ sub SIG_check_file { my($self,$chk_file) = @_; my $rv = eval { Module::Signature::_verify($chk_file) }; - if ($rv == Module::Signature::SIGNATURE_OK()) { + if ($rv eq Module::Signature::CANNOT_VERIFY()) { + $CPAN::Frontend->myprint(qq{\nSignature for }. + qq{file $chk_file could not be verified for an unknown reason. }. + $self->as_string. + qq{Module::Signature verification returned value $rv\n\n} + ); + + my $wrap = qq{The manual says for this case: Cannot verify the +OpenPGP signature, maybe due to the lack of a network connection to +the key server, or if neither gnupg nor Crypt::OpenPGP exists on the +system. You probably want to analyse the situation and if you cannot +fix it you will have to decide whether you want to stop this session +or you want to turn off signature verification. The latter would be +done with the command 'o conf init check_sigs'}; + + $CPAN::Frontend->mydie(Text::Wrap::wrap("","",$wrap)); + } if ($rv == Module::Signature::SIGNATURE_OK()) { $CPAN::Frontend->myprint("Signature for $chk_file ok\n"); return $self->{SIG_STATUS} = "OK"; } else { - $CPAN::Frontend->myprint(qq{\nSignature invalid for }. - qq{distribution file. }. + $CPAN::Frontend->mywarn(qq{\nSignature invalid for }. + qq{file $chk_file. }. qq{Please investigate.\n\n}. - $self->as_string, - $CPAN::META->instance( - 'CPAN::Author', - $self->cpan_userid - )->as_string); + $self->as_string. + qq{Module::Signature verification returned value $rv\n\n} + ); my $wrap = qq{I\'d recommend removing $chk_file. Its signature is invalid. Maybe you have configured your 'urllist' with @@ -1519,20 +1539,44 @@ sub CHECKSUM_check_file { $file = $self->{localfile}; $basename = File::Basename::basename($file); + my($signed_data); my $fh = FileHandle->new; - if (open $fh, $chk_file) { - local($/); - my $eval = <$fh>; - $eval =~ s/\015?\012/\n/g; - close $fh; - my($compmt) = Safe->new(); - $cksum = $compmt->reval($eval); - if ($@) { - rename $chk_file, "$chk_file.bad"; - Carp::confess($@) if $@; + if ($check_sigs) { + my $tempdir; + if ($CPAN::META->has_usable("File::Temp")) { + $tempdir = File::Temp::tempdir("CHECKSUMS-XXXX", CLEANUP => 1, DIR => "/tmp" ); + } else { + $tempdir = File::Spec->catdir(File::Spec->tmpdir, "CHECKSUMS-$$"); + File::Path::mkpath($tempdir); } + my $tempfile = File::Spec->catfile($tempdir, "CHECKSUMS.$$"); + unlink $tempfile; # ignore missing file + my $devnull = File::Spec->devnull; + my $gpg = $CPAN::Config->{gpg} or + $CPAN::Frontend->mydie("Your configuration suggests that you do not have 'gpg' installed. This is needed to verify checksums with the config variable 'check_sigs' on. Please configure it with 'o conf init gpg'"); + my $system = qq{"$gpg" --verify --batch --no-tty --output "$tempfile" "$chk_file" 2> "$devnull"}; + 0 == system $system or $CPAN::Frontend->mydie("gpg run was failing, cannot continue: $system"); + open $fh, $tempfile or $CPAN::Frontend->mydie("Could not open $tempfile: $!"); + local $/; + $signed_data = <$fh>; + close $fh; + File::Path::rmtree($tempdir); } else { - Carp::carp "Could not open $chk_file for reading"; + my $fh = FileHandle->new; + if (open $fh, $chk_file) { + local($/); + $signed_data = <$fh>; + } else { + $CPAN::Frontend->mydie("Could not open $chk_file for reading"); + } + close $fh; + } + $signed_data =~ s/\015?\012/\n/g; + my($compmt) = Safe->new(); + $cksum = $compmt->reval($signed_data); + if ($@) { + rename $chk_file, "$chk_file.bad"; + Carp::confess($@) if $@; } if (! ref $cksum or ref $cksum ne "HASH") { @@ -1546,6 +1590,30 @@ for further processing, but got garbage instead. $answer =~ /^\s*y/i or $CPAN::Frontend->mydie("Aborted.\n"); $self->{CHECKSUM_STATUS} = "NIL -- CHECKSUMS file broken"; return; + } elsif (exists $cksum->{$basename} && ! exists $cksum->{$basename}{cpan_path}) { + $CPAN::Frontend->mywarn(qq{ +Warning: checksum file '$chk_file' not conforming. + +The cksum does not contain the key 'cpan_path' for '$basename'. +}); + my $answer = CPAN::Shell::colorable_makemaker_prompt("Proceed nonetheless?", "no"); + $answer =~ /^\s*y/i or $CPAN::Frontend->mydie("Aborted.\n"); + $self->{CHECKSUM_STATUS} = "NIL -- CHECKSUMS file without cpan_path"; + return; + } elsif (exists $cksum->{$basename} && substr($self->{ID},0,length($cksum->{$basename}{cpan_path})) + ne $cksum->{$basename}{cpan_path}) { + $CPAN::Frontend->mywarn(qq{ +Warning: checksum file not matching path '$self->{ID}'. + +The cksum contain the key 'cpan_path=$cksum->{$basename}{cpan_path}' +which does not match the ID of the distribution '$self->{ID}'. +Something's suspicious might be going on here. Please investigate. + +}); + my $answer = CPAN::Shell::colorable_makemaker_prompt("Proceed nonetheless?", "no"); + $answer =~ /^\s*y/i or $CPAN::Frontend->mydie("Aborted.\n"); + $self->{CHECKSUM_STATUS} = "NIL -- CHECKSUMS non-matching cpan_path vs. ID"; + return; } elsif (exists $cksum->{$basename}{sha256}) { $self->debug("Found checksum for $basename:" . "$cksum->{$basename}{sha256}\n") if $CPAN::DEBUG; diff --git a/gnu/usr.bin/perl/cpan/CPAN/lib/CPAN/FTP.pm b/gnu/usr.bin/perl/cpan/CPAN/lib/CPAN/FTP.pm index 1688a118e4c..652f5be7740 100644 --- a/gnu/usr.bin/perl/cpan/CPAN/lib/CPAN/FTP.pm +++ b/gnu/usr.bin/perl/cpan/CPAN/lib/CPAN/FTP.pm @@ -15,7 +15,7 @@ use vars qw($connect_to_internet_ok $Ua $Thesite $ThesiteURL $Themethod); use vars qw( $VERSION ); -$VERSION = "5.5012"; +$VERSION = "5.5016"; sub _plus_append_open { my($fh, $file) = @_; @@ -38,7 +38,7 @@ sub _ftp_statistics { return if defined $ftpstats_size && $ftpstats_size <= 0; my $locktype = $fh ? LOCK_EX : LOCK_SH; # XXX On Windows flock() implements mandatory locking, so we can - # XXX only use shared locking to still allow _yaml_load_file() to + # XXX only use shared locking to still allow _yaml_loadfile() to # XXX read from the file using a different filehandle. $locktype = LOCK_SH if $^O eq "MSWin32"; @@ -63,7 +63,7 @@ sub _ftp_statistics { _plus_append_open($fh, $file); } } - my $stats = eval { CPAN->_yaml_loadfile($file); }; + my $stats = eval { CPAN->_yaml_loadfile($file, {loadblessed => 1}); }; if ($@) { if (ref $@) { if (ref $@ eq "CPAN::Exception::yaml_not_installed") { @@ -319,6 +319,190 @@ sub localize { my $longmess = Carp::longmess(); $self->debug("file[$file] aslocal[$aslocal] force[$force] carplongmess[$longmess]"); } + for ($CPAN::Config->{connect_to_internet_ok}) { + $connect_to_internet_ok = $_ if not defined $connect_to_internet_ok and defined $_; + } + my $ph = $CPAN::Config->{pushy_https}; + if (!defined $ph || $ph) { + return $self->localize_2021($file,$aslocal,$force,$with_defaults); + } else { + return $self->localize_1995ff($file,$aslocal,$force,$with_defaults); + } +} + +sub have_promising_aslocal { + my($self, $aslocal, $force) = @_; + if (-f $aslocal && -r _ && !($force & 1)) { + my $size; + if ($size = -s $aslocal) { + $self->debug("aslocal[$aslocal]size[$size]") if $CPAN::DEBUG; + return 1; + } else { + # empty file from a previous unsuccessful attempt to download it + unlink $aslocal or + $CPAN::Frontend->mydie("Found a zero-length '$aslocal' that I ". + "could not remove."); + } + } + return; +} + +#-> sub CPAN::FTP::localize ; +sub localize_2021 { + my($self,$file,$aslocal,$force,$with_defaults) = @_; + return $aslocal if $self->have_promising_aslocal($aslocal, $force); + my($aslocal_dir) = dirname($aslocal); + my $ret; + $self->mymkpath($aslocal_dir); + my $aslocal_tempfile = $aslocal . ".tmp" . $$; + my $base; + if ( + ($CPAN::META->has_usable('HTTP::Tiny') + && $CPAN::META->has_usable('Net::SSLeay') + && $CPAN::META->has_usable('IO::Socket::SSL') + ) + || $CPAN::Config->{curl} + || $CPAN::Config->{wget} + ) { + for my $prx (qw(https_proxy no_proxy)) { + $ENV{$prx} = $CPAN::Config->{$prx} if $CPAN::Config->{$prx}; + } + $base = "https://cpan.org/"; + } else { + my @missing_modules = grep { ! $CPAN::META->has_usable($_) } qw(HTTP::Tiny Net::SSLeay IO::Socket::SSL); + my $miss = join ", ", map { "'$_'" } @missing_modules; + my $modules = @missing_modules == 1 ? "module" : "modules"; + $CPAN::Frontend->mywarn("Missing or unusable $modules $miss, and found neither curl nor wget installed.\n"); + if ($CPAN::META->has_usable('HTTP::Tiny')) { + $CPAN::Frontend->mywarn("Need to fall back to http.\n") + } + for my $prx (qw(http_proxy no_proxy)) { + $ENV{$prx} = $CPAN::Config->{$prx} if $CPAN::Config->{$prx}; + } + $base = "http://www.cpan.org/"; + } + $ret = $self->hostdl_2021($base,$file,$aslocal_tempfile); + if ($ret) { # c&p from below + CPAN->debug("ret[$ret]aslocal[$aslocal]") if $CPAN::DEBUG; + if ($ret eq $aslocal_tempfile) { + # if we got it exactly as we asked for, only then we + # want to rename + rename $aslocal_tempfile, $aslocal + or $CPAN::Frontend->mydie("Error while trying to rename ". + "'$ret' to '$aslocal': $!"); + $ret = $aslocal; + } + } else { + unlink $aslocal_tempfile; + return; + } + return $ret; +} + +sub hostdl_2021 { + my($self, $base, $file, $aslocal) = @_; # the $aslocal is $aslocal_tempfile in the caller (old convention) + my $proxy_vars = $self->_proxy_vars($base); + my($proto) = $base =~ /^(https?)/; + my $url = "$base$file"; + # hostdl_2021 may be called with either http or https urls + if ( + $CPAN::META->has_usable('HTTP::Tiny') + && + ( + $proto eq "http" + || + ( $CPAN::META->has_usable('Net::SSLeay') + && $CPAN::META->has_usable('IO::Socket::SSL') ) + ) + ){ + # mostly c&p from below + require CPAN::HTTP::Client; + my $chc = CPAN::HTTP::Client->new( + proxy => $CPAN::Config->{http_proxy} || $ENV{http_proxy}, + no_proxy => $CPAN::Config->{no_proxy} || $ENV{no_proxy}, + ); + for my $try ( $url, ( $url !~ /\.gz(?!\n)\Z/ ? "$url.gz" : () ) ) { + $CPAN::Frontend->myprint("Fetching with HTTP::Tiny:\n$try\n"); + my $res = eval { $chc->mirror($try, $aslocal) }; + if ( $res && $res->{success} ) { + my $now = time; + utime $now, $now, $aslocal; # download time is more + # important than upload + # time + return $aslocal; + } + elsif ( $res && $res->{status} ne '599') { + $CPAN::Frontend->myprint(sprintf( + "HTTP::Tiny failed with code[%s] message[%s]\n", + $res->{status}, + $res->{reason}, + ) + ); + } + elsif ( $res && $res->{status} eq '599') { + $CPAN::Frontend->myprint(sprintf( + "HTTP::Tiny failed with an internal error: %s\n", + $res->{content}, + ) + ); + } + else { + my $err = $@ || 'Unknown error'; + $CPAN::Frontend->myprint(sprintf( + "Error downloading with HTTP::Tiny: %s\n", $err + ) + ); + } + } + } elsif ($CPAN::Config->{curl} || $CPAN::Config->{wget}){ + # c&p from further down + my($src_switch, $stdout_redir); + my($devnull) = $CPAN::Config->{devnull} || ""; + DLPRG: for my $dlprg (qw(curl wget)) { + my $dlprg_configured = $CPAN::Config->{$dlprg}; + next unless defined $dlprg_configured && length $dlprg_configured; + my $funkyftp = CPAN::HandleConfig->safe_quote($dlprg_configured); + if ($dlprg eq "wget") { + $src_switch = " -O \"$aslocal\""; + $stdout_redir = ""; + } elsif ($dlprg eq 'curl') { + $src_switch = ' -L -f -s -S --netrc-optional'; + $stdout_redir = " > \"$aslocal\""; + if ($proxy_vars->{http_proxy}) { + $src_switch .= qq{ -U "$proxy_vars->{proxy_user}:$proxy_vars->{proxy_pass}" -x "$proxy_vars->{http_proxy}"}; + } + } + $CPAN::Frontend->myprint( + qq[ +Trying with + $funkyftp$src_switch +to get + $url +]); + my($system) = + "$funkyftp$src_switch \"$url\" $devnull$stdout_redir"; + $self->debug("system[$system]") if $CPAN::DEBUG; + my($wstatus) = system($system); + if ($wstatus == 0) { + return $aslocal; + } else { + my $estatus = $wstatus >> 8; + my $size = -f $aslocal ? + ", left\n$aslocal with size ".-s _ : + "\nWarning: expected file [$aslocal] doesn't exist"; + $CPAN::Frontend->myprint(qq{ + Function system("$system") + returned status $estatus (wstat $wstatus)$size + }); + } + } # DLPRG + } # curl, wget + return; +} + +#-> sub CPAN::FTP::localize ; +sub localize_1995ff { + my($self,$file,$aslocal,$force,$with_defaults) = @_; if ($^O eq 'MacOS') { # Comment by AK on 2000-09-03: Uniq short filenames would be # available in CHECKSUMS file @@ -343,18 +527,7 @@ sub localize { } } - if (-f $aslocal && -r _ && !($force & 1)) { - my $size; - if ($size = -s $aslocal) { - $self->debug("aslocal[$aslocal]size[$size]") if $CPAN::DEBUG; - return $aslocal; - } else { - # empty file from a previous unsuccessful attempt to download it - unlink $aslocal or - $CPAN::Frontend->mydie("Found a zero-length '$aslocal' that I ". - "could not remove."); - } - } + return $aslocal if $self->have_promising_aslocal($aslocal, $force); my($maybe_restore) = 0; if (-f $aslocal) { rename $aslocal, "$aslocal.bak$$"; @@ -433,9 +606,6 @@ sub localize { $CPAN::Config->{ftp_passive} : 1; my $ret; my $stats = $self->_new_stats($file); - for ($CPAN::Config->{connect_to_internet_ok}) { - $connect_to_internet_ok = $_ if not defined $connect_to_internet_ok and defined $_; - } LEVEL: for $levelno (0..$#levels) { my $level_tuple = $levels[$levelno]; my($level,$scheme,$sitetag) = @$level_tuple; diff --git a/gnu/usr.bin/perl/cpan/CPAN/lib/CPAN/FirstTime.pm b/gnu/usr.bin/perl/cpan/CPAN/lib/CPAN/FirstTime.pm index af4a6d77591..8934f4a2c3c 100644 --- a/gnu/usr.bin/perl/cpan/CPAN/lib/CPAN/FirstTime.pm +++ b/gnu/usr.bin/perl/cpan/CPAN/lib/CPAN/FirstTime.pm @@ -11,7 +11,7 @@ use File::Spec (); use CPAN::Mirrors (); use CPAN::Version (); use vars qw($VERSION $auto_config); -$VERSION = "5.5314"; +$VERSION = "5.5317"; =head1 NAME @@ -59,8 +59,8 @@ higher distro-version number than the current one. It can then let the build of this distro fail when it would not represent the most up-to-date version of the distro. -Note: choosing anyhing but 'yes' for this option will need -Devel::DistnameInfo being installed for taking effect. +Note: choosing anything but 'yes' for this option will need +CPAN::DistnameInfo being installed for taking effect. Do you want to allow installing distros that are not indexed as the highest distro-version for all contained modules (yes, no, ask/yes, @@ -126,7 +126,7 @@ To considerably speed up the initial CPAN shell startup, it is possible to use Storable to create a cache of metadata. If Storable is not available, the normal index mechanism will be used. -Note: this mechanism is not used when use_sqlite is on and SQLLite is +Note: this mechanism is not used when use_sqlite is on and SQLite is running. Cache metadata (yes/no)? @@ -451,6 +451,20 @@ Please set your policy to one of the three values. Policy on building prerequisites (follow, ask or ignore)? +=item pushy_https + +Boolean. Defaults to true. If this option is true, the cpan shell will +use https://cpan.org/ to download stuff from the CPAN. It will fall +back to http://cpan.org/ if it can't handle https for some reason +(missing modules, missing programs). Whenever it falls back to the +http protocol, it will issue a warning. + +If this option is true, the option C will be ignored. +Consequently, if you want to work with local mirrors via your own +configured list of URLs, you will have to choose no below. + +Do you want to turn the pushy_https behaviour on? + =item randomize_urllist CPAN.pm can introduce some randomness when using hosts for download @@ -1315,6 +1329,7 @@ sub init { # Let's assume they want to use the internet and make them turn it # off if they really don't. my_yn_prompt("connect_to_internet_ok" => 1, $matcher); + my_yn_prompt("pushy_https" => 1, $matcher); # Allow matching but don't show during manual config if ($matcher) { @@ -1344,7 +1359,11 @@ sub init { ); } else { - $CPAN::Config->{urllist} = [ 'http://www.cpan.org/' ]; + # Hint: as of 2021-11: to get http, use http://www.cpan.org/ + $CPAN::Config->{urllist} = [ 'https://cpan.org/' ]; + $CPAN::Frontend->myprint( + "We initialized your 'urllist' to @{$CPAN::Config->{urllist}}. Type 'o conf init urllist' to change it.\n" + ); } } elsif (!$matcher || "urllist" =~ $matcher) { @@ -1362,9 +1381,15 @@ sub init { if ( $CPAN::Config->{install_help} eq 'local::lib' ) { if ( ! @{ $CPAN::Config->{urllist} } ) { $CPAN::Frontend->myprint( - "Skipping local::lib bootstrap because 'urllist' is not configured.\n" + "\nALERT: Skipping local::lib bootstrap because 'urllist' is not configured.\n" ); } + elsif (! $CPAN::Config->{make} ) { + $CPAN::Frontend->mywarn( + "\nALERT: Skipping local::lib bootstrap because 'make' is not configured.\n" + ); + _beg_for_make(); # repetitive, but we don't want users to miss it + } else { $CPAN::Frontend->myprint("\nAttempting to bootstrap local::lib...\n"); $CPAN::Frontend->myprint("\nWriting $configpm for bootstrap...\n"); @@ -1645,12 +1670,17 @@ Windows users may want to follow this procedure when back in the CPAN shell: perl alien_nmake.pl This will install nmake on your system which can be used as a 'make' -substitute. You can then revisit this dialog with +substitute. + +HERE + } + + $CPAN::Frontend->mywarn(<<"HERE"); +You can then retry the 'make' configuration step with o conf init make HERE - } } sub init_cpan_home { diff --git a/gnu/usr.bin/perl/cpan/CPAN/lib/CPAN/HandleConfig.pm b/gnu/usr.bin/perl/cpan/CPAN/lib/CPAN/HandleConfig.pm index e24a969c11f..c9d0dc7056d 100644 --- a/gnu/usr.bin/perl/cpan/CPAN/lib/CPAN/HandleConfig.pm +++ b/gnu/usr.bin/perl/cpan/CPAN/lib/CPAN/HandleConfig.pm @@ -12,7 +12,7 @@ CPAN::HandleConfig - internal configuration handling for CPAN.pm =cut -$VERSION = "5.5011"; # see also CPAN::Config::VERSION at end of file +$VERSION = "5.5012"; # see also CPAN::Config::VERSION at end of file %can = ( commit => "Commit changes to disk", @@ -25,8 +25,9 @@ $VERSION = "5.5011"; # see also CPAN::Config::VERSION at end of file # A1: svn diff -r 757:758 # where dagolden added test_report [git e997b71de88f1019a1472fc13cb97b1b7f96610f] # A2: svn diff -r 985:986 # where andk added yaml_module [git 312b6d9b12b1bdec0b6e282d853482145475021f] # A3: 1. add new config option to %keys below -# 2. add a Pod description in CPAN::FirstTime; it should include a -# prompt line; see others for examples +# 2. add a Pod description in CPAN::FirstTime in the DESCRIPTION +# section; it should include a prompt line; see others for +# examples # 3. add a "matcher" section in CPAN::FirstTime::init that includes # a prompt function; see others for examples # 4. add config option to documentation section in CPAN.pm @@ -98,6 +99,7 @@ $VERSION = "5.5011"; # see also CPAN::Config::VERSION at end of file "prerequisites_policy", "proxy_pass", "proxy_user", + "pushy_https", "randomize_urllist", "recommends_policy", "scan_cache", @@ -561,6 +563,23 @@ sub load { my @miss = $self->missing_config_data; CPAN->debug("do_init[$do_init]loading[$loading]miss[@miss]") if $CPAN::DEBUG; return unless $do_init || @miss; + if (@miss==1 and $miss[0] eq "pushy_https" && !$do_init) { + $CPAN::Frontend->myprint(<<'END'); + +Starting with version 2.29 of the cpan shell, a new download mechanism +is the default which exclusively uses cpan.org as the host to download +from. The configuration variable pushy_https can be used to (de)select +the new mechanism. Please read more about it and make your choice +between the old and the new mechanism by running + + o conf init pushy_https + +Once you have done that and stored the config variable this dialog +will disappear. +END + + return; + } # I'm not how we'd ever wind up in a recursive loop, but I'm leaving # this here for safety's sake -- dagolden, 2011-01-19 @@ -677,6 +696,7 @@ sub missing_config_data { "no_proxy", #"pager", "prerequisites_policy", + "pushy_https", "scan_cache", #"tar", #"unzip", @@ -776,7 +796,7 @@ sub prefs_lookup { use strict; use vars qw($AUTOLOAD $VERSION); - $VERSION = "5.5011"; + $VERSION = "5.5012"; # formerly CPAN::HandleConfig was known as CPAN::Config sub AUTOLOAD { ## no critic diff --git a/gnu/usr.bin/perl/cpan/CPAN/lib/CPAN/Index.pm b/gnu/usr.bin/perl/cpan/CPAN/lib/CPAN/Index.pm index 59e75dcaeed..06b16b6958d 100644 --- a/gnu/usr.bin/perl/cpan/CPAN/lib/CPAN/Index.pm +++ b/gnu/usr.bin/perl/cpan/CPAN/lib/CPAN/Index.pm @@ -1,7 +1,7 @@ package CPAN::Index; use strict; use vars qw($LAST_TIME $DATE_OF_02 $DATE_OF_03 $HAVE_REANIMATED $VERSION); -$VERSION = "2.12"; +$VERSION = "2.29"; @CPAN::Index::ISA = qw(CPAN::Debug); $LAST_TIME ||= 0; $DATE_OF_03 ||= 0; @@ -137,7 +137,7 @@ sub reanimate_build_dir { )); DISTRO: for $i (0..$#candidates) { my $dirent = $candidates[$i]; - my $y = eval {CPAN->_yaml_loadfile(File::Spec->catfile($d,$dirent))}; + my $y = eval {CPAN->_yaml_loadfile(File::Spec->catfile($d,$dirent), {loadblessed => 1})}; if ($@) { warn "Error while parsing file '$dirent'; error: '$@'"; next DISTRO; diff --git a/gnu/usr.bin/perl/cpan/CPAN/scripts/cpan b/gnu/usr.bin/perl/cpan/CPAN/scripts/cpan index 4e900b00547..d4f742e2883 100644 --- a/gnu/usr.bin/perl/cpan/CPAN/scripts/cpan +++ b/gnu/usr.bin/perl/cpan/CPAN/scripts/cpan @@ -251,9 +251,9 @@ The build tools, L and L use some, while others matter to the levels above them. Some of these are specified by the Perl Toolchain Gang: -Lancaster Concensus: L +Lancaster Consensus: L -Oslo Concensus: L +Oslo Consensus: L =over 4 diff --git a/gnu/usr.bin/perl/cpan/Compress-Raw-Bzip2/Bzip2.xs b/gnu/usr.bin/perl/cpan/Compress-Raw-Bzip2/Bzip2.xs index c1f1c6b76c4..fd56767a8ea 100644 --- a/gnu/usr.bin/perl/cpan/Compress-Raw-Bzip2/Bzip2.xs +++ b/gnu/usr.bin/perl/cpan/Compress-Raw-Bzip2/Bzip2.xs @@ -14,11 +14,11 @@ #include "perl.h" #include "XSUB.h" -#include "bzlib.h" +#include "bzlib.h" #ifdef USE_PPPORT_H # define NEED_sv_2pv_nolen -# include "ppport.h" +# include "ppport.h" #endif #if PERL_REVISION == 5 && (PERL_VERSION < 8 || (PERL_VERSION == 8 && PERL_SUBVERSION < 4 )) @@ -52,12 +52,12 @@ typedef struct di_stream { #define FLAG_CONSUME_INPUT 8 #define FLAG_LIMIT_OUTPUT 16 bz_stream stream; - uInt bufsize; + uInt bufsize; int last_error ; uLong bytesInflated ; uLong compressedBytes ; uLong uncompressedBytes ; - + } di_stream; typedef di_stream * deflateStream ; @@ -96,7 +96,7 @@ static const char my_z_errmsg[][32] = { sv_setpv(var, ((err) ? GetErrorString(err) : "")) ; \ SvNOK_on(var); - + #if defined(__SYMBIAN32__) # define NO_WRITEABLE_DATA #endif @@ -134,7 +134,7 @@ GetErrorString(error_no) int error_no ; #endif { - return(char*) my_z_errmsg[4 - error_no]; + return(char*) my_z_errmsg[4 - error_no]; } static void @@ -226,7 +226,7 @@ InitStream() ZMALLOC(s, di_stream) ; return s ; - + } static void @@ -244,7 +244,7 @@ PostInitStream(s, flags) } -static SV* +static SV* #ifdef CAN_PROTOTYPE deRef(SV * sv, const char * string) #else @@ -289,7 +289,7 @@ char * string ; dTHX; bool wipe = 0 ; STRLEN na; - + SvGETMAGIC(sv); wipe = ! SvOK(sv) ; @@ -337,7 +337,7 @@ BOOT: /* Check this version of bzip2 is == 1 */ if (BZ2_bzlibVersion()[0] != '1') croak(COMPRESS_CLASS " needs bzip2 version 1.x, you have %s\n", BZ2_bzlibVersion()) ; - + MODULE = Compress::Raw::Bzip2 PACKAGE = Compress::Raw::Bzip2 @@ -363,8 +363,8 @@ new(className, appendOut=1, blockSize100k=1, workfactor=0, verbosity=0) #endif if ((s = InitStream() )) { - err = BZ2_bzCompressInit ( &(s->stream), - blockSize100k, + err = BZ2_bzCompressInit ( &(s->stream), + blockSize100k, verbosity, workfactor ); @@ -453,7 +453,7 @@ new(className, appendOut=1 , consume=1, small=0, verbosity=0, limitOutput=0) XPUSHs(sv) ; } } - + MODULE = Compress::Raw::Bzip2 PACKAGE = Compress::Raw::Bzip2 @@ -463,11 +463,11 @@ DispStream(s, message=NULL) Compress::Raw::Bzip2 s const char * message -DualType +DualType bzdeflate (s, buf, output) Compress::Raw::Bzip2 s SV * buf - SV * output + SV * output uInt cur_length = NO_INIT uInt increment = NO_INIT int RETVAL = 0; @@ -478,26 +478,27 @@ bzdeflate (s, buf, output) /* If the input buffer is a reference, dereference it */ buf = deRef(buf, "deflate") ; - + /* initialise the input buffer */ -#ifdef UTF8_AVAILABLE +#ifdef UTF8_AVAILABLE if (DO_UTF8(buf) && !sv_utf8_downgrade(buf, 1)) croak("Wide character in " COMPRESS_CLASS "::bzdeflate input parameter"); -#endif +#endif s->stream.next_in = (char*)SvPV_nomg(buf, origlen) ; s->stream.avail_in = (unsigned int) origlen; - + /* and retrieve the output buffer */ output = deRef_l(output, "deflate") ; -#ifdef UTF8_AVAILABLE +#ifdef UTF8_AVAILABLE if (DO_UTF8(output) && !sv_utf8_downgrade(output, 1)) croak("Wide character in " COMPRESS_CLASS "::bzdeflate output parameter"); -#endif +#endif - if((s->flags & FLAG_APPEND_OUTPUT) != FLAG_APPEND_OUTPUT) { - SvCUR_set(output, 0); - /* sv_setpvn(output, "", 0); */ - } + if((s->flags & FLAG_APPEND_OUTPUT) == FLAG_APPEND_OUTPUT) { + SvOOK_off(output); + } else { + SvCUR_set(output, 0); + } cur_length = SvCUR(output) ; s->stream.next_out = (char*) SvPVX(output) + cur_length; increment = SvLEN(output) - cur_length; @@ -515,7 +516,7 @@ bzdeflate (s, buf, output) } RETVAL = BZ2_bzCompress(&(s->stream), BZ_RUN); - if (RETVAL != BZ_RUN_OK) + if (RETVAL != BZ_RUN_OK) break; } @@ -530,7 +531,7 @@ bzdeflate (s, buf, output) } OUTPUT: RETVAL - + void DESTROY(s) @@ -543,25 +544,26 @@ DESTROY(s) DualType bzclose(s, output) Compress::Raw::Bzip2 s - SV * output + SV * output uInt cur_length = NO_INIT uInt increment = NO_INIT uInt bufinc = NO_INIT CODE: bufinc = s->bufsize; - + s->stream.avail_in = 0; /* should be zero already anyway */ - + /* retrieve the output buffer */ output = deRef_l(output, "close") ; -#ifdef UTF8_AVAILABLE +#ifdef UTF8_AVAILABLE if (DO_UTF8(output) && !sv_utf8_downgrade(output, 1)) croak("Wide character in " COMPRESS_CLASS "::bzclose input parameter"); -#endif - if((s->flags & FLAG_APPEND_OUTPUT) != FLAG_APPEND_OUTPUT) { - SvCUR_set(output, 0); - /* sv_setpvn(output, "", 0); */ - } +#endif + if((s->flags & FLAG_APPEND_OUTPUT) == FLAG_APPEND_OUTPUT) { + SvOOK_off(output); + } else { + SvCUR_set(output, 0); + } cur_length = SvCUR(output) ; s->stream.next_out = (char*) SvPVX(output) + cur_length; increment = SvLEN(output) - cur_length; @@ -578,20 +580,20 @@ bzclose(s, output) bufinc *= 2 ; } RETVAL = BZ2_bzCompress(&(s->stream), BZ_FINISH); - + /* deflate has finished flushing only when it hasn't used up - * all the available space in the output buffer: + * all the available space in the output buffer: */ /* if (s->stream.avail_out != 0 || RETVAL < 0 ) */ if (RETVAL == BZ_STREAM_END || RETVAL < 0 ) break; } - + /* RETVAL = (RETVAL == BZ_STREAM_END ? BZ_OK : RETVAL) ; */ s->last_error = RETVAL ; s->compressedBytes += cur_length + increment - s->stream.avail_out ; - + if (RETVAL == BZ_STREAM_END) { SvPOK_only(output); SvCUR_set(output, cur_length + increment - s->stream.avail_out) ; @@ -604,25 +606,26 @@ bzclose(s, output) DualType bzflush(s, output) Compress::Raw::Bzip2 s - SV * output + SV * output uInt cur_length = NO_INIT uInt increment = NO_INIT uInt bufinc = NO_INIT CODE: bufinc = s->bufsize; - + s->stream.avail_in = 0; /* should be zero already anyway */ - + /* retrieve the output buffer */ output = deRef_l(output, "close") ; -#ifdef UTF8_AVAILABLE +#ifdef UTF8_AVAILABLE if (DO_UTF8(output) && !sv_utf8_downgrade(output, 1)) croak("Wide character in " COMPRESS_CLASS "::bzflush input parameter"); -#endif - if((s->flags & FLAG_APPEND_OUTPUT) != FLAG_APPEND_OUTPUT) { - SvCUR_set(output, 0); - /* sv_setpvn(output, "", 0); */ - } +#endif + if((s->flags & FLAG_APPEND_OUTPUT) == FLAG_APPEND_OUTPUT) { + SvOOK_off(output); + } else { + SvCUR_set(output, 0); + } cur_length = SvCUR(output) ; s->stream.next_out = (char*) SvPVX(output) + cur_length; increment = SvLEN(output) - cur_length; @@ -639,22 +642,22 @@ bzflush(s, output) bufinc *= 2 ; } RETVAL = BZ2_bzCompress(&(s->stream), BZ_FLUSH); - + if (RETVAL == BZ_RUN_OK || RETVAL < 0) break; /* deflate has finished flushing only when it hasn't used up - * all the available space in the output buffer: + * all the available space in the output buffer: */ /* RETVAL == if (s->stream.avail_out != 0 || RETVAL < 0 ) break; */ } - + /* RETVAL = (RETVAL == BZ_STREAM_END ? BZ_OK : RETVAL) ; */ s->last_error = RETVAL ; s->compressedBytes += cur_length + increment - s->stream.avail_out ; - + if (RETVAL == BZ_RUN_OK) { SvPOK_only(output); SvCUR_set(output, cur_length + increment - s->stream.avail_out) ; @@ -695,7 +698,7 @@ uncompressedBytes(s) OUTPUT: RETVAL - + MODULE = Compress::Raw::Bunzip2 PACKAGE = Compress::Raw::Bunzip2 void @@ -703,11 +706,11 @@ DispStream(s, message=NULL) Compress::Raw::Bunzip2 s const char * message -DualType +DualType bzinflate (s, buf, output) Compress::Raw::Bunzip2 s SV * buf - SV * output + SV * output uInt cur_length = 0; uInt prefix_length = 0; uInt increment = 0; @@ -715,9 +718,9 @@ bzinflate (s, buf, output) STRLEN na = NO_INIT ; STRLEN origlen = NO_INIT PREINIT: -#ifdef UTF8_AVAILABLE +#ifdef UTF8_AVAILABLE bool out_utf8 = FALSE; -#endif +#endif CODE: bufinc = s->bufsize; /* If the buffer is a reference, dereference it */ @@ -728,39 +731,41 @@ bzinflate (s, buf, output) croak(UNCOMPRESS_CLASS "::bzinflate input parameter cannot be read-only when ConsumeInput is specified"); SvPV_force(buf, na); } -#ifdef UTF8_AVAILABLE +#ifdef UTF8_AVAILABLE if (DO_UTF8(buf) && !sv_utf8_downgrade(buf, 1)) croak("Wide character in " UNCOMPRESS_CLASS "::bzinflate input parameter"); -#endif - +#endif + /* initialise the input buffer */ s->stream.next_in = (char*)SvPV_nomg(buf, origlen) ; s->stream.avail_in = (unsigned int) origlen; - + /* and retrieve the output buffer */ output = deRef_l(output, "bzinflate") ; -#ifdef UTF8_AVAILABLE +#ifdef UTF8_AVAILABLE if (DO_UTF8(output)) out_utf8 = TRUE ; if (DO_UTF8(output) && !sv_utf8_downgrade(output, 1)) croak("Wide character in " UNCOMPRESS_CLASS "::bzinflate output parameter"); -#endif - if((s->flags & FLAG_APPEND_OUTPUT) != FLAG_APPEND_OUTPUT) { - SvCUR_set(output, 0); - } +#endif + if((s->flags & FLAG_APPEND_OUTPUT) == FLAG_APPEND_OUTPUT) { + SvOOK_off(output); + } else { + SvCUR_set(output, 0); + } /* Assume no output buffer - the code below will update if there is any available */ s->stream.avail_out = 0; if (SvLEN(output)) { prefix_length = cur_length = SvCUR(output) ; - + if (s->flags & FLAG_LIMIT_OUTPUT && SvLEN(output) - cur_length - 1 < bufinc) { Sv_Grow(output, bufinc + cur_length + 1) ; } - - /* Only setup the stream output pointers if there is spare + + /* Only setup the stream output pointers if there is spare capacity in the outout SV */ if (SvLEN(output) > cur_length + 1) @@ -772,9 +777,9 @@ bzinflate (s, buf, output) } s->bytesInflated = 0; - + RETVAL = BZ_OK; - + while (1) { if (s->stream.avail_out == 0) { @@ -790,11 +795,11 @@ bzinflate (s, buf, output) /* DispStream(s, "pre"); */ RETVAL = BZ2_bzDecompress (&(s->stream)); - /* + /* printf("Status %d\n", RETVAL); - DispStream(s, "apres"); - */ - if (RETVAL != BZ_OK || s->flags & FLAG_LIMIT_OUTPUT) + DispStream(s, "apres"); + */ + if (RETVAL != BZ_OK || s->flags & FLAG_LIMIT_OUTPUT) break ; if (s->stream.avail_out == 0) @@ -804,9 +809,9 @@ bzinflate (s, buf, output) RETVAL = BZ_OK ; break ; } - + } - + s->last_error = RETVAL ; if (RETVAL == BZ_OK || RETVAL == BZ_STREAM_END) { unsigned in ; @@ -818,10 +823,10 @@ bzinflate (s, buf, output) SvPOK_only(output); SvCUR_set(output, prefix_length + s->bytesInflated) ; *SvEND(output) = '\0'; -#ifdef UTF8_AVAILABLE +#ifdef UTF8_AVAILABLE if (out_utf8) sv_utf8_upgrade(output); -#endif +#endif SvSETMAGIC(output); /* fix the input buffer */ @@ -829,7 +834,7 @@ bzinflate (s, buf, output) in = s->stream.avail_in ; SvCUR_set(buf, in) ; if (in) - Move(s->stream.next_in, SvPVX(buf), in, char) ; + Move(s->stream.next_in, SvPVX(buf), in, char) ; *SvEND(buf) = '\0'; SvSETMAGIC(buf); } diff --git a/gnu/usr.bin/perl/cpan/Compress-Raw-Bzip2/bzip2-src/bzlib.c b/gnu/usr.bin/perl/cpan/Compress-Raw-Bzip2/bzip2-src/bzlib.c index 137ba9f7d5d..612175dc36b 100644 --- a/gnu/usr.bin/perl/cpan/Compress-Raw-Bzip2/bzip2-src/bzlib.c +++ b/gnu/usr.bin/perl/cpan/Compress-Raw-Bzip2/bzip2-src/bzlib.c @@ -11,7 +11,7 @@ bzip2/libbzip2 version 1.0.8 of 13 July 2019 Copyright (C) 1996-2019 Julian Seward - Please read the WARNING, DISCLAIMER and PATENTS sections in the + Please read the WARNING, DISCLAIMER and PATENTS sections in the README file. This program is released under the terms of the license contained @@ -40,7 +40,7 @@ #ifndef BZ_NO_STDIO void BZ2_bz__AssertH__fail ( int errcode ) { - fprintf(stderr, + fprintf(stderr, "\n\nbzip2/libbzip2: internal error number %d.\n" "This is a bug in bzip2/libbzip2, %s.\n" "Please report it to: bzip2-devel@sourceware.org. If this happened\n" @@ -103,7 +103,7 @@ void* default_bzalloc ( void* opaque, Int32 items, Int32 size ) { void* v = malloc ( items * size ); ((void)opaque); /* Silence unused parameter warning */ - + return v; } @@ -149,8 +149,8 @@ Bool isempty_RL ( EState* s ) /*---------------------------------------------------*/ -int BZ_API(BZ2_bzCompressInit) - ( bz_stream* strm, +int BZ_API(BZ2_bzCompressInit) + ( bz_stream* strm, int blockSize100k, int verbosity, int workFactor ) @@ -160,7 +160,7 @@ int BZ_API(BZ2_bzCompressInit) if (!bz_config_ok()) return BZ_CONFIG_ERROR; - if (strm == NULL || + if (strm == NULL || blockSize100k < 1 || blockSize100k > 9 || workFactor < 0 || workFactor > 250) return BZ_PARAM_ERROR; @@ -303,7 +303,7 @@ Bool copy_input_until_stop ( EState* s ) /*-- no input? --*/ if (s->strm->avail_in == 0) break; progress_in = True; - ADD_CHAR_TO_BLOCK ( s, (UInt32)(*((UChar*)(s->strm->next_in))) ); + ADD_CHAR_TO_BLOCK ( s, (UInt32)(*((UChar*)(s->strm->next_in))) ); s->strm->next_in++; s->strm->avail_in--; s->strm->total_in_lo32++; @@ -321,7 +321,7 @@ Bool copy_input_until_stop ( EState* s ) /*-- flush/finish end? --*/ if (s->avail_in_expect == 0) break; progress_in = True; - ADD_CHAR_TO_BLOCK ( s, (UInt32)(*((UChar*)(s->strm->next_in))) ); + ADD_CHAR_TO_BLOCK ( s, (UInt32)(*((UChar*)(s->strm->next_in))) ); s->strm->next_in++; s->strm->avail_in--; s->strm->total_in_lo32++; @@ -367,18 +367,18 @@ Bool handle_compress ( bz_stream* strm ) Bool progress_in = False; Bool progress_out = False; EState* s = (EState*) strm->state; - + while (True) { if (s->state == BZ_S_OUTPUT) { progress_out |= copy_output_until_stop ( s ); if (s->state_out_pos < s->numZ) break; - if (s->mode == BZ_M_FINISHING && + if (s->mode == BZ_M_FINISHING && s->avail_in_expect == 0 && isempty_RL(s)) break; prepare_new_block ( s ); s->state = BZ_S_INPUT; - if (s->mode == BZ_M_FLUSHING && + if (s->mode == BZ_M_FLUSHING && s->avail_in_expect == 0 && isempty_RL(s)) break; } @@ -427,7 +427,7 @@ int BZ_API(BZ2_bzCompress) ( bz_stream *strm, int action ) if (action == BZ_RUN) { progress = handle_compress ( strm ); return progress ? BZ_RUN_OK : BZ_PARAM_ERROR; - } + } else if (action == BZ_FLUSH) { s->avail_in_expect = strm->avail_in; @@ -440,12 +440,12 @@ int BZ_API(BZ2_bzCompress) ( bz_stream *strm, int action ) s->mode = BZ_M_FINISHING; goto preswitch; } - else + else return BZ_PARAM_ERROR; case BZ_M_FLUSHING: if (action != BZ_FLUSH) return BZ_SEQUENCE_ERROR; - if (s->avail_in_expect != s->strm->avail_in) + if (s->avail_in_expect != s->strm->avail_in) return BZ_SEQUENCE_ERROR; progress = handle_compress ( strm ); if (s->avail_in_expect > 0 || !isempty_RL(s) || @@ -455,7 +455,7 @@ int BZ_API(BZ2_bzCompress) ( bz_stream *strm, int action ) case BZ_M_FINISHING: if (action != BZ_FINISH) return BZ_SEQUENCE_ERROR; - if (s->avail_in_expect != s->strm->avail_in) + if (s->avail_in_expect != s->strm->avail_in) return BZ_SEQUENCE_ERROR; progress = handle_compress ( strm ); if (!progress) return BZ_SEQUENCE_ERROR; @@ -482,7 +482,7 @@ int BZ_API(BZ2_bzCompressEnd) ( bz_stream *strm ) if (s->ftab != NULL) BZFREE(s->ftab); BZFREE(strm->state); - strm->state = NULL; + strm->state = NULL; return BZ_OK; } @@ -493,8 +493,8 @@ int BZ_API(BZ2_bzCompressEnd) ( bz_stream *strm ) /*---------------------------------------------------*/ /*---------------------------------------------------*/ -int BZ_API(BZ2_bzDecompressInit) - ( bz_stream* strm, +int BZ_API(BZ2_bzDecompressInit) + ( bz_stream* strm, int verbosity, int small ) { @@ -559,34 +559,34 @@ Bool unRLE_obuf_to_output_FAST ( DState* s ) /* can a new run be started? */ if (s->nblock_used == s->save_nblock+1) return False; - + /* Only caused by corrupt data stream? */ if (s->nblock_used > s->save_nblock+1) return True; - + s->state_out_len = 1; s->state_out_ch = s->k0; - BZ_GET_FAST(k1); BZ_RAND_UPD_MASK; + BZ_GET_FAST(k1); BZ_RAND_UPD_MASK; k1 ^= BZ_RAND_MASK; s->nblock_used++; if (s->nblock_used == s->save_nblock+1) continue; if (k1 != s->k0) { s->k0 = k1; continue; }; - + s->state_out_len = 2; - BZ_GET_FAST(k1); BZ_RAND_UPD_MASK; + BZ_GET_FAST(k1); BZ_RAND_UPD_MASK; k1 ^= BZ_RAND_MASK; s->nblock_used++; if (s->nblock_used == s->save_nblock+1) continue; if (k1 != s->k0) { s->k0 = k1; continue; }; - + s->state_out_len = 3; - BZ_GET_FAST(k1); BZ_RAND_UPD_MASK; + BZ_GET_FAST(k1); BZ_RAND_UPD_MASK; k1 ^= BZ_RAND_MASK; s->nblock_used++; if (s->nblock_used == s->save_nblock+1) continue; if (k1 != s->k0) { s->k0 = k1; continue; }; - - BZ_GET_FAST(k1); BZ_RAND_UPD_MASK; + + BZ_GET_FAST(k1); BZ_RAND_UPD_MASK; k1 ^= BZ_RAND_MASK; s->nblock_used++; s->state_out_len = ((Int32)k1) + 4; - BZ_GET_FAST(s->k0); BZ_RAND_UPD_MASK; + BZ_GET_FAST(s->k0); BZ_RAND_UPD_MASK; s->k0 ^= BZ_RAND_MASK; s->nblock_used++; } @@ -624,7 +624,7 @@ Bool unRLE_obuf_to_output_FAST ( DState* s ) } s_state_out_len_eq_one: { - if (cs_avail_out == 0) { + if (cs_avail_out == 0) { c_state_out_len = 1; goto return_notr; }; *( (UChar*)(cs_next_out) ) = c_state_out_ch; @@ -632,7 +632,7 @@ Bool unRLE_obuf_to_output_FAST ( DState* s ) cs_next_out++; cs_avail_out--; } - } + } /* Only caused by corrupt data stream? */ if (c_nblock_used > s_save_nblockPP) return True; @@ -640,25 +640,25 @@ Bool unRLE_obuf_to_output_FAST ( DState* s ) /* can a new run be started? */ if (c_nblock_used == s_save_nblockPP) { c_state_out_len = 0; goto return_notr; - }; + }; c_state_out_ch = c_k0; BZ_GET_FAST_C(k1); c_nblock_used++; - if (k1 != c_k0) { - c_k0 = k1; goto s_state_out_len_eq_one; + if (k1 != c_k0) { + c_k0 = k1; goto s_state_out_len_eq_one; }; - if (c_nblock_used == s_save_nblockPP) + if (c_nblock_used == s_save_nblockPP) goto s_state_out_len_eq_one; - + c_state_out_len = 2; BZ_GET_FAST_C(k1); c_nblock_used++; if (c_nblock_used == s_save_nblockPP) continue; if (k1 != c_k0) { c_k0 = k1; continue; }; - + c_state_out_len = 3; BZ_GET_FAST_C(k1); c_nblock_used++; if (c_nblock_used == s_save_nblockPP) continue; if (k1 != c_k0) { c_k0 = k1; continue; }; - + BZ_GET_FAST_C(k1); c_nblock_used++; c_state_out_len = ((Int32)k1) + 4; BZ_GET_FAST_C(c_k0); c_nblock_used++; @@ -729,37 +729,37 @@ Bool unRLE_obuf_to_output_SMALL ( DState* s ) s->strm->total_out_lo32++; if (s->strm->total_out_lo32 == 0) s->strm->total_out_hi32++; } - + /* can a new run be started? */ if (s->nblock_used == s->save_nblock+1) return False; /* Only caused by corrupt data stream? */ if (s->nblock_used > s->save_nblock+1) return True; - + s->state_out_len = 1; s->state_out_ch = s->k0; - BZ_GET_SMALL(k1); BZ_RAND_UPD_MASK; + BZ_GET_SMALL(k1); BZ_RAND_UPD_MASK; k1 ^= BZ_RAND_MASK; s->nblock_used++; if (s->nblock_used == s->save_nblock+1) continue; if (k1 != s->k0) { s->k0 = k1; continue; }; - + s->state_out_len = 2; - BZ_GET_SMALL(k1); BZ_RAND_UPD_MASK; + BZ_GET_SMALL(k1); BZ_RAND_UPD_MASK; k1 ^= BZ_RAND_MASK; s->nblock_used++; if (s->nblock_used == s->save_nblock+1) continue; if (k1 != s->k0) { s->k0 = k1; continue; }; - + s->state_out_len = 3; - BZ_GET_SMALL(k1); BZ_RAND_UPD_MASK; + BZ_GET_SMALL(k1); BZ_RAND_UPD_MASK; k1 ^= BZ_RAND_MASK; s->nblock_used++; if (s->nblock_used == s->save_nblock+1) continue; if (k1 != s->k0) { s->k0 = k1; continue; }; - - BZ_GET_SMALL(k1); BZ_RAND_UPD_MASK; + + BZ_GET_SMALL(k1); BZ_RAND_UPD_MASK; k1 ^= BZ_RAND_MASK; s->nblock_used++; s->state_out_len = ((Int32)k1) + 4; - BZ_GET_SMALL(s->k0); BZ_RAND_UPD_MASK; + BZ_GET_SMALL(s->k0); BZ_RAND_UPD_MASK; s->k0 ^= BZ_RAND_MASK; s->nblock_used++; } @@ -778,30 +778,30 @@ Bool unRLE_obuf_to_output_SMALL ( DState* s ) s->strm->total_out_lo32++; if (s->strm->total_out_lo32 == 0) s->strm->total_out_hi32++; } - + /* can a new run be started? */ if (s->nblock_used == s->save_nblock+1) return False; /* Only caused by corrupt data stream? */ if (s->nblock_used > s->save_nblock+1) return True; - + s->state_out_len = 1; s->state_out_ch = s->k0; BZ_GET_SMALL(k1); s->nblock_used++; if (s->nblock_used == s->save_nblock+1) continue; if (k1 != s->k0) { s->k0 = k1; continue; }; - + s->state_out_len = 2; BZ_GET_SMALL(k1); s->nblock_used++; if (s->nblock_used == s->save_nblock+1) continue; if (k1 != s->k0) { s->k0 = k1; continue; }; - + s->state_out_len = 3; BZ_GET_SMALL(k1); s->nblock_used++; if (s->nblock_used == s->save_nblock+1) continue; if (k1 != s->k0) { s->k0 = k1; continue; }; - + BZ_GET_SMALL(k1); s->nblock_used++; s->state_out_len = ((Int32)k1) + 4; BZ_GET_SMALL(s->k0); s->nblock_used++; @@ -830,14 +830,14 @@ int BZ_API(BZ2_bzDecompress) ( bz_stream *strm ) if (corrupt) return BZ_DATA_ERROR; if (s->nblock_used == s->save_nblock+1 && s->state_out_len == 0) { BZ_FINALISE_CRC ( s->calculatedBlockCRC ); - if (s->verbosity >= 3) - VPrintf2 ( " {0x%08x, 0x%08x}", s->storedBlockCRC, + if (s->verbosity >= 3) + VPrintf2 ( " {0x%08x, 0x%08x}", s->storedBlockCRC, s->calculatedBlockCRC ); if (s->verbosity >= 2) VPrintf0 ( "]" ); if (s->calculatedBlockCRC != s->storedBlockCRC) return BZ_DATA_ERROR; - s->calculatedCombinedCRC - = (s->calculatedCombinedCRC << 1) | + s->calculatedCombinedCRC + = (s->calculatedCombinedCRC << 1) | (s->calculatedCombinedCRC >> 31); s->calculatedCombinedCRC ^= s->calculatedBlockCRC; s->state = BZ_X_BLKHDR_1; @@ -849,7 +849,7 @@ int BZ_API(BZ2_bzDecompress) ( bz_stream *strm ) Int32 r = BZ2_decompress ( s ); if (r == BZ_STREAM_END) { if (s->verbosity >= 3) - VPrintf2 ( "\n combined CRCs: stored = 0x%08x, computed = 0x%08x", + VPrintf2 ( "\n combined CRCs: stored = 0x%08x, computed = 0x%08x", s->storedCombinedCRC, s->calculatedCombinedCRC ); if (s->calculatedCombinedCRC != s->storedCombinedCRC) return BZ_DATA_ERROR; @@ -896,7 +896,7 @@ int BZ_API(BZ2_bzDecompressEnd) ( bz_stream *strm ) if (bzf != NULL) bzf->lastErr = eee; \ } -typedef +typedef struct { FILE* handle; Char buf[BZ_MAX_UNUSED]; @@ -920,10 +920,10 @@ static Bool myfeof ( FILE* f ) /*---------------------------------------------------*/ -BZFILE* BZ_API(BZ2_bzWriteOpen) - ( int* bzerror, - FILE* f, - int blockSize100k, +BZFILE* BZ_API(BZ2_bzWriteOpen) + ( int* bzerror, + FILE* f, + int blockSize100k, int verbosity, int workFactor ) { @@ -955,23 +955,23 @@ BZFILE* BZ_API(BZ2_bzWriteOpen) bzf->strm.opaque = NULL; if (workFactor == 0) workFactor = 30; - ret = BZ2_bzCompressInit ( &(bzf->strm), blockSize100k, + ret = BZ2_bzCompressInit ( &(bzf->strm), blockSize100k, verbosity, workFactor ); if (ret != BZ_OK) { BZ_SETERR(ret); free(bzf); return NULL; }; bzf->strm.avail_in = 0; bzf->initialisedOk = True; - return bzf; + return bzf; } /*---------------------------------------------------*/ void BZ_API(BZ2_bzWrite) - ( int* bzerror, - BZFILE* b, - void* buf, + ( int* bzerror, + BZFILE* b, + void* buf, int len ) { Int32 n, n2, ret; @@ -1000,7 +1000,7 @@ void BZ_API(BZ2_bzWrite) if (bzf->strm.avail_out < BZ_MAX_UNUSED) { n = BZ_MAX_UNUSED - bzf->strm.avail_out; - n2 = fwrite ( (void*)(bzf->buf), sizeof(UChar), + n2 = fwrite ( (void*)(bzf->buf), sizeof(UChar), n, bzf->handle ); if (n != n2 || ferror(bzf->handle)) { BZ_SETERR(BZ_IO_ERROR); return; }; @@ -1014,20 +1014,20 @@ void BZ_API(BZ2_bzWrite) /*---------------------------------------------------*/ void BZ_API(BZ2_bzWriteClose) - ( int* bzerror, - BZFILE* b, + ( int* bzerror, + BZFILE* b, int abandon, unsigned int* nbytes_in, unsigned int* nbytes_out ) { - BZ2_bzWriteClose64 ( bzerror, b, abandon, + BZ2_bzWriteClose64 ( bzerror, b, abandon, nbytes_in, NULL, nbytes_out, NULL ); } void BZ_API(BZ2_bzWriteClose64) - ( int* bzerror, - BZFILE* b, + ( int* bzerror, + BZFILE* b, int abandon, unsigned int* nbytes_in_lo32, unsigned int* nbytes_in_hi32, @@ -1059,7 +1059,7 @@ void BZ_API(BZ2_bzWriteClose64) if (bzf->strm.avail_out < BZ_MAX_UNUSED) { n = BZ_MAX_UNUSED - bzf->strm.avail_out; - n2 = fwrite ( (void*)(bzf->buf), sizeof(UChar), + n2 = fwrite ( (void*)(bzf->buf), sizeof(UChar), n, bzf->handle ); if (n != n2 || ferror(bzf->handle)) { BZ_SETERR(BZ_IO_ERROR); return; }; @@ -1091,9 +1091,9 @@ void BZ_API(BZ2_bzWriteClose64) /*---------------------------------------------------*/ -BZFILE* BZ_API(BZ2_bzReadOpen) - ( int* bzerror, - FILE* f, +BZFILE* BZ_API(BZ2_bzReadOpen) + ( int* bzerror, + FILE* f, int verbosity, int small, void* unused, @@ -1104,7 +1104,7 @@ BZFILE* BZ_API(BZ2_bzReadOpen) BZ_SETERR(BZ_OK); - if (f == NULL || + if (f == NULL || (small != 0 && small != 1) || (verbosity < 0 || verbosity > 4) || (unused == NULL && nUnused != 0) || @@ -1115,7 +1115,7 @@ BZFILE* BZ_API(BZ2_bzReadOpen) { BZ_SETERR(BZ_IO_ERROR); return NULL; }; bzf = (bzFile*) malloc ( sizeof(bzFile) ); - if (bzf == NULL) + if (bzf == NULL) { BZ_SETERR(BZ_MEM_ERROR); return NULL; }; BZ_SETERR(BZ_OK); @@ -1127,7 +1127,7 @@ BZFILE* BZ_API(BZ2_bzReadOpen) bzf->strm.bzalloc = NULL; bzf->strm.bzfree = NULL; bzf->strm.opaque = NULL; - + while (nUnused > 0) { bzf->buf[bzf->bufN] = *((UChar*)(unused)); bzf->bufN++; unused = ((void*)( 1 + ((UChar*)(unused)) )); @@ -1142,7 +1142,7 @@ BZFILE* BZ_API(BZ2_bzReadOpen) bzf->strm.next_in = bzf->buf; bzf->initialisedOk = True; - return bzf; + return bzf; } @@ -1165,10 +1165,10 @@ void BZ_API(BZ2_bzReadClose) ( int *bzerror, BZFILE *b ) /*---------------------------------------------------*/ -int BZ_API(BZ2_bzRead) - ( int* bzerror, - BZFILE* b, - void* buf, +int BZ_API(BZ2_bzRead) + ( int* bzerror, + BZFILE* b, + void* buf, int len ) { Int32 n, ret; @@ -1190,11 +1190,11 @@ int BZ_API(BZ2_bzRead) while (True) { - if (ferror(bzf->handle)) + if (ferror(bzf->handle)) { BZ_SETERR(BZ_IO_ERROR); return 0; }; if (bzf->strm.avail_in == 0 && !myfeof(bzf->handle)) { - n = fread ( bzf->buf, sizeof(UChar), + n = fread ( bzf->buf, sizeof(UChar), BZ_MAX_UNUSED, bzf->handle ); if (ferror(bzf->handle)) { BZ_SETERR(BZ_IO_ERROR); return 0; }; @@ -1208,7 +1208,7 @@ int BZ_API(BZ2_bzRead) if (ret != BZ_OK && ret != BZ_STREAM_END) { BZ_SETERR(ret); return 0; }; - if (ret == BZ_OK && myfeof(bzf->handle) && + if (ret == BZ_OK && myfeof(bzf->handle) && bzf->strm.avail_in == 0 && bzf->strm.avail_out > 0) { BZ_SETERR(BZ_UNEXPECTED_EOF); return 0; }; @@ -1217,7 +1217,7 @@ int BZ_API(BZ2_bzRead) return len - bzf->strm.avail_out; }; if (bzf->strm.avail_out == 0) { BZ_SETERR(BZ_OK); return len; }; - + } return 0; /*not reached*/ @@ -1225,10 +1225,10 @@ int BZ_API(BZ2_bzRead) /*---------------------------------------------------*/ -void BZ_API(BZ2_bzReadGetUnused) - ( int* bzerror, - BZFILE* b, - void** unused, +void BZ_API(BZ2_bzReadGetUnused) + ( int* bzerror, + BZFILE* b, + void** unused, int* nUnused ) { bzFile* bzf = (bzFile*)b; @@ -1251,30 +1251,30 @@ void BZ_API(BZ2_bzReadGetUnused) /*---------------------------------------------------*/ /*---------------------------------------------------*/ -int BZ_API(BZ2_bzBuffToBuffCompress) - ( char* dest, +int BZ_API(BZ2_bzBuffToBuffCompress) + ( char* dest, unsigned int* destLen, - char* source, + char* source, unsigned int sourceLen, - int blockSize100k, - int verbosity, + int blockSize100k, + int verbosity, int workFactor ) { bz_stream strm; int ret; - if (dest == NULL || destLen == NULL || + if (dest == NULL || destLen == NULL || source == NULL || blockSize100k < 1 || blockSize100k > 9 || verbosity < 0 || verbosity > 4 || - workFactor < 0 || workFactor > 250) + workFactor < 0 || workFactor > 250) return BZ_PARAM_ERROR; if (workFactor == 0) workFactor = 30; strm.bzalloc = NULL; strm.bzfree = NULL; strm.opaque = NULL; - ret = BZ2_bzCompressInit ( &strm, blockSize100k, + ret = BZ2_bzCompressInit ( &strm, blockSize100k, verbosity, workFactor ); if (ret != BZ_OK) return ret; @@ -1288,7 +1288,7 @@ int BZ_API(BZ2_bzBuffToBuffCompress) if (ret != BZ_STREAM_END) goto errhandler; /* normal termination */ - *destLen -= strm.avail_out; + *destLen -= strm.avail_out; BZ2_bzCompressEnd ( &strm ); return BZ_OK; @@ -1303,10 +1303,10 @@ int BZ_API(BZ2_bzBuffToBuffCompress) /*---------------------------------------------------*/ -int BZ_API(BZ2_bzBuffToBuffDecompress) - ( char* dest, +int BZ_API(BZ2_bzBuffToBuffDecompress) + ( char* dest, unsigned int* destLen, - char* source, + char* source, unsigned int sourceLen, int small, int verbosity ) @@ -1314,10 +1314,10 @@ int BZ_API(BZ2_bzBuffToBuffDecompress) bz_stream strm; int ret; - if (dest == NULL || destLen == NULL || + if (dest == NULL || destLen == NULL || source == NULL || (small != 0 && small != 1) || - verbosity < 0 || verbosity > 4) + verbosity < 0 || verbosity > 4) return BZ_PARAM_ERROR; strm.bzalloc = NULL; @@ -1347,11 +1347,11 @@ int BZ_API(BZ2_bzBuffToBuffDecompress) } else { BZ2_bzDecompressEnd ( &strm ); return BZ_OUTBUFF_FULL; - }; + }; errhandler: BZ2_bzDecompressEnd ( &strm ); - return ret; + return ret; } @@ -1403,7 +1403,7 @@ BZFILE * bzopen_or_bzdopen int verbosity = 0; int workFactor = 30; int smallMode = 0; - int nUnused = 0; + int nUnused = 0; if (mode == NULL) return NULL; while (*mode) { @@ -1443,7 +1443,7 @@ BZFILE * bzopen_or_bzdopen if (writing) { /* Guard against total chaos and anarchy -- JRS */ if (blockSize100k < 1) blockSize100k = 1; - if (blockSize100k > 9) blockSize100k = 9; + if (blockSize100k > 9) blockSize100k = 9; bzfp = BZ2_bzWriteOpen(&bzerr,fp,blockSize100k, verbosity,workFactor); } else { @@ -1522,7 +1522,7 @@ void BZ_API(BZ2_bzclose) (BZFILE* b) { int bzerr; FILE *fp; - + if (b==NULL) {return;} fp = ((bzFile *)b)->handle; if(((bzFile*)b)->writing){ @@ -1541,7 +1541,7 @@ void BZ_API(BZ2_bzclose) (BZFILE* b) /*---------------------------------------------------*/ /*-- - return last error code + return last error code --*/ static const char *bzerrorstrings[] = { "OK" diff --git a/gnu/usr.bin/perl/cpan/Compress-Raw-Bzip2/bzip2-src/compress.c b/gnu/usr.bin/perl/cpan/Compress-Raw-Bzip2/bzip2-src/compress.c index 84e1574c914..1666cf0703a 100644 --- a/gnu/usr.bin/perl/cpan/Compress-Raw-Bzip2/bzip2-src/compress.c +++ b/gnu/usr.bin/perl/cpan/Compress-Raw-Bzip2/bzip2-src/compress.c @@ -253,8 +253,8 @@ void sendMTFValues ( EState* s ) --*/ - UInt16 cost[BZ_N_GROUPS]; - Int32 fave[BZ_N_GROUPS]; + UInt16 cost[BZ_N_GROUPS] = {0, 0, 0, 0, 0, 0}; + Int32 fave[BZ_N_GROUPS] = {0, 0, 0, 0, 0, 0}; UInt16* mtfv = s->mtfv; diff --git a/gnu/usr.bin/perl/cpan/Compress-Raw-Bzip2/lib/Compress/Raw/Bzip2.pm b/gnu/usr.bin/perl/cpan/Compress-Raw-Bzip2/lib/Compress/Raw/Bzip2.pm index 2aa14188d7e..99d7670cf4d 100644 --- a/gnu/usr.bin/perl/cpan/Compress-Raw-Bzip2/lib/Compress/Raw/Bzip2.pm +++ b/gnu/usr.bin/perl/cpan/Compress-Raw-Bzip2/lib/Compress/Raw/Bzip2.pm @@ -11,8 +11,8 @@ use Carp ; use bytes ; our ($VERSION, $XS_VERSION, @ISA, @EXPORT, $AUTOLOAD); -$VERSION = '2.093'; -$XS_VERSION = $VERSION; +$VERSION = '2.103'; +$XS_VERSION = $VERSION; $VERSION = eval $VERSION; @ISA = qw(Exporter); @@ -61,11 +61,11 @@ eval { require XSLoader; XSLoader::load('Compress::Raw::Bzip2', $XS_VERSION); 1; -} +} or do { require DynaLoader; local @ISA = qw(DynaLoader); - bootstrap Compress::Raw::Bzip2 $XS_VERSION ; + bootstrap Compress::Raw::Bzip2 $XS_VERSION ; }; #sub Compress::Raw::Bzip2::new @@ -132,14 +132,14 @@ Compress::Raw::Bzip2 - Low-Level Interface to bzip2 compression library my ($bz, $status) = new Compress::Raw::Bzip2 [OPTS] or die "Cannot create bzip2 object: $bzerno\n"; - + $status = $bz->bzdeflate($input, $output); $status = $bz->bzflush($output); $status = $bz->bzclose($output); my ($bz, $status) = new Compress::Raw::Bunzip2 [OPTS] or die "Cannot create bunzip2 object: $bzerno\n"; - + $status = $bz->bzinflate($input, $output); my $version = Compress::Raw::Bzip2::bzlibversion(); @@ -356,7 +356,7 @@ The following bzip2 constants are exported by this module =head1 SUPPORT -General feedback/questions/bug reports should be sent to +General feedback/questions/bug reports should be sent to L (preferred) or L. @@ -384,8 +384,7 @@ See the Changes file. =head1 COPYRIGHT AND LICENSE -Copyright (c) 2005-2019 Paul Marquess. All rights reserved. +Copyright (c) 2005-2022 Paul Marquess. All rights reserved. This program is free software; you can redistribute it and/or modify it under the same terms as Perl itself. - diff --git a/gnu/usr.bin/perl/cpan/Compress-Raw-Bzip2/private/MakeUtil.pm b/gnu/usr.bin/perl/cpan/Compress-Raw-Bzip2/private/MakeUtil.pm index 037782b9498..aa540c68fda 100644 --- a/gnu/usr.bin/perl/cpan/Compress-Raw-Bzip2/private/MakeUtil.pm +++ b/gnu/usr.bin/perl/cpan/Compress-Raw-Bzip2/private/MakeUtil.pm @@ -35,22 +35,21 @@ sub MY::libscan my $path = shift; return undef - if $path =~ /^(?:RCS|CVS|SCCS|\.svn|_darcs)$/ || - $path =~ /(~|\.bak|_bak)$/ || + if $path =~ /(~|\.bak|_bak)$/ || $path =~ /\..*\.sw(o|p)$/ || $path =~ /\B\.svn\b/; return $path; } -sub MY::postamble +sub MY::postamble { return '' if $ENV{PERL_CORE} ; my @files = getPerlFiles('MANIFEST'); - # Note: Once you remove all the layers of shell/makefile escaping + # Note: Once you remove all the layers of shell/makefile escaping # the regular expression below reads # # /^\s*local\s*\(\s*\$^W\s*\)/ @@ -216,7 +215,7 @@ sub UpDowngrade foreach (@files) { #if (-l $_ ) { doUpDown($our_sub, $warn_sub, $_) } - #else + #else #{ doUpDownViaCopy($our_sub, $warn_sub, $_) } } @@ -235,7 +234,7 @@ sub doUpDown local ($^I) = ($^O eq 'VMS') ? "_bak" : ".bak"; local (@ARGV) = shift; - + while (<>) { print, last if /^__(END|DATA)__/ ; @@ -278,7 +277,7 @@ sub doUpDownViaCopy push @keep, $_; last ; } - + &{ $our_sub }() if $our_sub ; &{ $warn_sub }() if $warn_sub ; push @keep, $_; @@ -335,7 +334,7 @@ sub FindBrokenDependencies Compress::Zlib ); - + my @broken = (); foreach my $module ( grep { ! $thisModule{$_} } @modules) @@ -343,12 +342,12 @@ sub FindBrokenDependencies my $hasVersion = getInstalledVersion($module); # No need to upgrade if the module isn't installed at all - next + next if ! defined $hasVersion; # If already have C::Z version 1, then an upgrade to any of the # IO::Compress modules will not break it. - next + next if $module eq 'Compress::Zlib' && $hasVersion < 2; if ($hasVersion < $version) @@ -371,14 +370,12 @@ sub getInstalledVersion { no strict 'refs'; $version = ${ $module . "::VERSION" }; - $version = 0 + $version = 0 } - + return $version; } package MakeUtil ; 1; - - diff --git a/gnu/usr.bin/perl/cpan/Compress-Raw-Bzip2/t/000prereq.t b/gnu/usr.bin/perl/cpan/Compress-Raw-Bzip2/t/000prereq.t index c390e5529d8..5ab2f35b514 100755 --- a/gnu/usr.bin/perl/cpan/Compress-Raw-Bzip2/t/000prereq.t +++ b/gnu/usr.bin/perl/cpan/Compress-Raw-Bzip2/t/000prereq.t @@ -19,13 +19,13 @@ BEGIN if eval { require Test::NoWarnings ; import Test::NoWarnings; 1 }; - my $VERSION = '2.093'; + my $VERSION = '2.103'; my @NAMES = qw( - + ); my @OPT = qw( - + ); plan tests => 1 + @NAMES + @OPT + $extra ; @@ -43,15 +43,14 @@ BEGIN eval " require $name " ; if ($@) { - ok 1, "$name not available" + ok 1, "$name not available" } - else + else { my $ver = eval("\$${name}::VERSION"); - is $ver, $VERSION, "$name version should be $VERSION" + is $ver, $VERSION, "$name version should be $VERSION" or diag "$name version is $ver, need $VERSION" ; - } + } } - -} +} diff --git a/gnu/usr.bin/perl/cpan/Compress-Raw-Zlib/Makefile.PL b/gnu/usr.bin/perl/cpan/Compress-Raw-Zlib/Makefile.PL index 20c8cd01d0a..bf3681babd8 100644 --- a/gnu/usr.bin/perl/cpan/Compress-Raw-Zlib/Makefile.PL +++ b/gnu/usr.bin/perl/cpan/Compress-Raw-Zlib/Makefile.PL @@ -32,7 +32,7 @@ my $ZLIB_LIBRARY_NAME = $^O eq 'MSWin32' ? 'zlib' : 'z' ; # ExtUtils::Install. # Don't ask if MM_USE_DEFAULT is set -- enables perl core building on cygwin -if ($^O =~ /cygwin/i and $ExtUtils::Install::VERSION < 1.39 +if ($^O =~ /cygwin/i and $ExtUtils::Install::VERSION < 1.39 and not ($ENV{PERL_MM_USE_DEFAULT} or $ENV{PERL_CORE})) { print < 'Compress::Raw::Zlib', VERSION_FROM => 'lib/Compress/Raw/Zlib.pm', - INC => "-I$ZLIB_INCLUDE" , - DEFINE => "-DNO_VIZ $OLD_ZLIB $WALL -DGZIP_OS_CODE=$GZIP_OS_CODE $USE_PPPORT_H" , + INC => $OPT_ZLIB_INCLUDE , + DEFINE => "-DNO_VIZ -DZ_SOLO $OLD_ZLIB $WALL $OPT_Z_PREFIX -DGZIP_OS_CODE=$GZIP_OS_CODE $USE_PPPORT_H -DPerl_crz_BUILD_ZLIB=$BUILD_ZLIB" , XS => { 'Zlib.xs' => 'Zlib.c'}, 'depend' => { 'Makefile' => 'config.in' }, 'clean' => { FILES => '*.c constants.h constants.xs' }, - 'dist' => { COMPRESS => 'gzip', + 'dist' => { COMPRESS => 'gzip', TARFLAGS => '-chvf', SUFFIX => 'gz', DIST_DEFAULT => 'MyTrebleCheck tardist', @@ -88,15 +104,15 @@ WriteMakefile( ( $BUILD_ZLIB ? zlib_files($ZLIB_LIB) - : (LIBS => [ "-L$ZLIB_LIB -l$ZLIB_LIBRARY_NAME " ]) + : (LIBS => [ "$OPT_ZLIB_LIB -l$ZLIB_LIBRARY_NAME " ]) ), OPTIMIZE => $OPTIMIZE, INSTALLDIRS => ($] >= 5.009 && $] < 5.011 ? 'perl' : 'site'), - ( eval { ExtUtils::MakeMaker->VERSION(6.46) } + ( eval { ExtUtils::MakeMaker->VERSION(6.46) } ? ( META_MERGE => { - + "meta-spec" => { version => 2 }, no_index => { @@ -104,7 +120,7 @@ WriteMakefile( }, resources => { - + bugtracker => { web => 'https://github.com/pmqs/Compress-Raw-Zlib/issues' }, @@ -115,15 +131,15 @@ WriteMakefile( type => 'git', url => 'git://github.com/pmqs/Compress-Raw-Zlib.git', web => 'https://github.com/pmqs/Compress-Raw-Zlib', - }, + }, }, - } - ) + } + ) : () ), ((ExtUtils::MakeMaker->VERSION() gt '6.30') ? - ('LICENSE' => 'perl') : ()), + ('LICENSE' => 'perl') : ()), ) ; @@ -201,13 +217,13 @@ if (eval {require ExtUtils::Constant; 1}) { die "The following names are missing from \@EXPORT in Zlib.pm\n" . "\t$missing\n" ; } - + push @names, { name => 'ZLIB_VERSION', type => 'PV' }; - - push @names, map { { name => $_, - macro => version_Macro $verSpecificNames{$_} - } - } + + push @names, map { { name => $_, + macro => version_Macro $verSpecificNames{$_} + } + } keys %verSpecificNames ; ExtUtils::Constant::WriteConstants( @@ -215,10 +231,10 @@ if (eval {require ExtUtils::Constant; 1}) { NAMES => \@names, C_FILE => 'constants.h', XS_FILE => 'constants.xs', - + ); -} +} else { foreach my $name (qw( constants.h constants.xs )) { @@ -263,14 +279,14 @@ sub ParseCONFIG # check parsed values my @missing = () ; - die "The following keys are missing from $CONFIG [@missing]\n" + die "The following keys are missing from $CONFIG [@missing]\n" if @missing = keys %Parsed ; $ZLIB_INCLUDE = defined $ENV{'ZLIB_INCLUDE'} - ? $ENV{'ZLIB_INCLUDE'} + ? $ENV{'ZLIB_INCLUDE'} : $Info{'INCLUDE'} ; - $ZLIB_LIB = defined $ENV{'ZLIB_LIB'} - ?$ENV{'ZLIB_LIB'} + $ZLIB_LIB = defined $ENV{'ZLIB_LIB'} + ?$ENV{'ZLIB_LIB'} : $Info{'LIB'} ; if ($^O eq 'VMS') { @@ -279,19 +295,19 @@ sub ParseCONFIG } my $y = defined $ENV{'OLD_ZLIB'} - ? $ENV{'OLD_ZLIB'} + ? $ENV{'OLD_ZLIB'} : $Info{'OLD_ZLIB'} ; $OLD_ZLIB = '-DOLD_ZLIB' if $y and $y =~ /^yes|on|true|1$/i; - my $x = defined $ENV{'BUILD_ZLIB'} - ? $ENV{'BUILD_ZLIB'} + my $x = defined $ENV{'BUILD_ZLIB'} + ? $ENV{'BUILD_ZLIB'} : $Info{'BUILD_ZLIB'} ; if ($x and $x =~ /^yes|on|true|1$/i ) { $BUILD_ZLIB = 1 ; - # ZLIB_LIB & ZLIB_INCLUDE must point to the same place when + # ZLIB_LIB & ZLIB_INCLUDE must point to the same place when # BUILD_ZLIB is specified. die "INCLUDE & LIB must be the same when BUILD_ZLIB is True\n" if $ZLIB_LIB ne $ZLIB_INCLUDE ; @@ -309,8 +325,8 @@ sub ParseCONFIG print "Building Zlib enabled\n" ; } - $GZIP_OS_CODE = defined $ENV{'GZIP_OS_CODE'} - ? $ENV{'GZIP_OS_CODE'} + $GZIP_OS_CODE = defined $ENV{'GZIP_OS_CODE'} + ? $ENV{'GZIP_OS_CODE'} : $Info{'GZIP_OS_CODE'} ; die "GZIP_OS_CODE not 'AUTO_DETECT' or a number between 0 and 255\n" @@ -322,7 +338,7 @@ sub ParseCONFIG print "Auto Detect Gzip OS Code..\n" ; $GZIP_OS_CODE = getOSCode() ; } - + my $name = getOSname($GZIP_OS_CODE); print "Setting Gzip OS Code to $GZIP_OS_CODE [$name]\n" ; @@ -347,22 +363,22 @@ sub zlib_files my @h_files = (); my @c_files = (); - + if (-f catfile($dir, "infback.c")) { # zlib 1.2.0 or greater # - @h_files = qw(crc32.h inffast.h inflate.h trees.h zconf.in.h - zutil.h deflate.h inffixed.h inftrees.h zconf.h - zlib.h + @h_files = qw(crc32.h inffast.h inflate.h trees.h zconf.in.h + zutil.h deflate.h inffixed.h inftrees.h zconf.h + zlib.h ); @c_files = qw(adler32 crc32 infback inflate uncompr - compress deflate inffast inftrees - trees zutil + compress deflate inffast inftrees + trees zutil ); } else { # zlib 1.1.x - + @h_files = qw(deflate.h infcodes.h inftrees.h zconf.h zutil.h infblock.h inffast.h infutil.h zlib.h ); @@ -371,20 +387,20 @@ sub zlib_files inftrees infcodes infutil inffast ); } - + @h_files = map { catfile($dir, $_) } @h_files ; my @o_files = map { "$_\$(OBJ_EXT)" } 'Zlib', @c_files; @c_files = map { "$_.c" } 'Zlib', @c_files ; foreach my $file (@c_files) { copy(catfile($dir, $file), '.') } - + return ( #'H' => [ @h_files ], 'C' => [ @c_files ] , #'OBJECT' => qq[ @o_files ], 'OBJECT' => q[ $(O_FILES) ], - + ) ; } @@ -418,7 +434,7 @@ BEGIN [ '' => 255, 'Unknown OS' ], ); - %OSnames = map { $$_[1] => $$_[2] } + %OSnames = map { $$_[1] => $$_[2] } @GZIP_OS_Names ; } @@ -447,4 +463,3 @@ sub getOSname } # end of file Makefile.PL - diff --git a/gnu/usr.bin/perl/cpan/Compress-Raw-Zlib/Zlib.xs b/gnu/usr.bin/perl/cpan/Compress-Raw-Zlib/Zlib.xs index 496b8767917..cb7f0e0e1e5 100644 --- a/gnu/usr.bin/perl/cpan/Compress-Raw-Zlib/Zlib.xs +++ b/gnu/usr.bin/perl/cpan/Compress-Raw-Zlib/Zlib.xs @@ -9,9 +9,9 @@ * */ -/* Parts of this code are based on the files gzio.c and gzappend.c from +/* Parts of this code are based on the files gzio.c and gzappend.c from * the standard zlib source distribution. Below are the copyright statements - * from each. + * from each. */ /* gzio.c -- IO on .gz files @@ -31,7 +31,7 @@ #include "perl.h" #include "XSUB.h" -#include "zlib.h" +#include "zlib.h" /* zlib prior to 1.06 doesn't know about z_off_t */ #ifndef z_off_t @@ -39,7 +39,7 @@ #endif #if ! defined(ZLIB_VERNUM) || ZLIB_VERNUM < 0x1200 -# define NEED_DUMMY_BYTE_AT_END +# define NEED_DUMMY_BYTE_AT_END #endif #if defined(ZLIB_VERNUM) && ZLIB_VERNUM >= 0x1210 @@ -64,7 +64,7 @@ #endif #if defined(ZLIB_VERNUM) && ZLIB_VERNUM >= 0x1252 -/* +/* Use Z_SOLO to build source means need own malloc/free */ # define AT_LEAST_ZLIB_1_2_5_2 @@ -133,7 +133,7 @@ typedef struct di_stream { uLong crc32 ; uLong adler32 ; z_stream stream; - uLong bufsize; + uLong bufsize; SV * dictionary ; uLong dict_adler ; int last_error ; @@ -169,7 +169,7 @@ typedef struct di_stream { uLong lastBlockOffset ; unsigned char window_lastByte ; - + #endif } di_stream; @@ -190,7 +190,7 @@ typedef di_stream * Compress__Raw__Zlib__inflateScanStream ; #if defined(AMIGA) || defined(AMIGAOS) || defined(__amigaos4__) # define OS_CODE 0x01 #endif - + #if defined(VAXC) || defined(VMS) # define OS_CODE 0x02 #endif @@ -198,15 +198,15 @@ typedef di_stream * Compress__Raw__Zlib__inflateScanStream ; #if 0 /* VM/CMS */ # define OS_CODE 0x04 #endif - + #if defined(ATARI) || defined(atarist) # define OS_CODE 0x05 #endif - + #ifdef OS2 # define OS_CODE 0x06 #endif - + #if defined(MACOS) || defined(TARGET_OS_MAC) # define OS_CODE 0x07 #endif @@ -214,11 +214,11 @@ typedef di_stream * Compress__Raw__Zlib__inflateScanStream ; #if 0 /* Z-System */ # define OS_CODE 0x08 #endif - + #if 0 /* CP/M */ # define OS_CODE 0x09 #endif - + #ifdef TOPS20 # define OS_CODE 0x0a #endif @@ -226,24 +226,24 @@ typedef di_stream * Compress__Raw__Zlib__inflateScanStream ; #ifdef WIN32 /* Window 95 & Windows NT */ # define OS_CODE 0x0b #endif - + #if 0 /* QDOS */ # define OS_CODE 0x0c #endif - + #if 0 /* Acorn RISCOS */ # define OS_CODE 0x0d #endif - + #if 0 /* ??? */ # define OS_CODE 0x0e #endif - + #ifdef __50SERIES /* Prime/PRIMOS */ # define OS_CODE 0x0F #endif - -/* Default to UNIX */ + +/* Default to UNIX */ #ifndef OS_CODE # define OS_CODE 0x03 /* assume Unix */ #endif @@ -273,7 +273,7 @@ static const char my_z_errmsg[][32] = { sv_setpv(var, ((err) ? GetErrorString(err) : "")) ; \ SvNOK_on(var); - + #if defined(__SYMBIAN32__) # define NO_WRITEABLE_DATA #endif @@ -300,13 +300,13 @@ int error_no ; { dTHX; char * errstr ; - + if (error_no == Z_ERRNO) { errstr = Strerror(errno) ; } else /* errstr = gzerror(fil, &error_no) ; */ - errstr = (char*) my_z_errmsg[2 - error_no]; + errstr = (char*) my_z_errmsg[2 - error_no]; return errstr ; } @@ -324,7 +324,7 @@ int error_no ; /* return the greatest common divisor of a and b using Euclid's algorithm, modified to be fast when one argument much greater than the other, and coded to avoid unnecessary swapping */ -static unsigned +static unsigned #ifdef CAN_PROTOTYPE gcd(unsigned a, unsigned b) #else @@ -352,7 +352,7 @@ gcd(a, b) } /* rotate list[0..len-1] left by rot positions, in place */ -static void +static void #ifdef CAN_PROTOTYPE rotate(unsigned char *list, unsigned len, unsigned rot) #else @@ -515,7 +515,7 @@ void my_zcfree (voidpf opaque, voidpf ptr) { PERL_UNUSED_VAR(opaque); safefree(ptr); - return; + return; } #endif @@ -556,14 +556,14 @@ PostInitStream(s, flags, bufsize, windowBits) s->last_error = 0 ; s->flags = flags ; s->zip_mode = (windowBits < 0) ; - if (flags & FLAG_CRC32) + if (flags & FLAG_CRC32) s->crc32 = crcInitial ; - if (flags & FLAG_ADLER32) + if (flags & FLAG_ADLER32) s->adler32 = adlerInitial ; } -static SV* +static SV* #ifdef CAN_PROTOTYPE deRef(SV * sv, const char * string) #else @@ -608,7 +608,7 @@ char * string ; dTHX; bool wipe = 0 ; STRLEN na; - + SvGETMAGIC(sv); wipe = ! SvOK(sv) ; @@ -654,11 +654,11 @@ flushToBuffer(di_stream* s, int flush) strm->next_in = NULL; strm->avail_in = 0; - + uLong total_output = 0; uLong have = 0; - do + do { if (output) output = (unsigned char *)saferealloc(output, total_output + s->bufsize); @@ -683,7 +683,7 @@ flushToBuffer(di_stream* s, int flush) } while (strm->avail_out == 0); s->deflateParams_out_buffer = output; - s->deflateParams_out_length = total_output; + s->deflateParams_out_length = total_output; return Z_OK; } @@ -703,9 +703,9 @@ flushParams(di_stream* s) strm->next_in = NULL; strm->avail_in = 0; - - do + + do { if (output) output = (unsigned char *)saferealloc(output, total_output + s->bufsize); @@ -719,7 +719,7 @@ flushParams(di_stream* s) /* fprintf(stderr, "deflateParams %d %s %lu\n", ret, GetErrorString(ret), s->bufsize - strm->avail_out); */ - if (ret == Z_STREAM_ERROR) + if (ret == Z_STREAM_ERROR) break; have = s->bufsize - strm->avail_out; @@ -730,10 +730,10 @@ flushParams(di_stream* s) if(ret == Z_STREAM_ERROR) safefree(output); - else + else { s->deflateParams_out_buffer = output; - s->deflateParams_out_length = total_output; + s->deflateParams_out_length = total_output; } return ret; @@ -753,13 +753,19 @@ BOOT: /* Check this version of zlib is == 1 */ if (zlibVersion()[0] != '1') croak("Compress::Raw::Zlib needs zlib version 1.x\n") ; - + { /* Create the $os_code scalar */ SV * os_code_sv = perl_get_sv("Compress::Raw::Zlib::gzip_os_code", GV_ADDMULTI) ; sv_setiv(os_code_sv, GZIP_OS_CODE) ; } + { + /* BUILD_ZLIB */ + SV * os_code_sv = perl_get_sv("Compress::Raw::Zlib::BUILD_ZLIB", GV_ADDMULTI) ; + sv_setiv(os_code_sv, Perl_crz_BUILD_ZLIB) ; + } + #define Zip_zlib_version() (const char*)zlib_version const char* @@ -801,10 +807,10 @@ Zip_adler32(buf, adler=adlerInitial) INIT: /* If the buffer is a reference, dereference it */ sv = deRef(sv, "adler32") ; -#ifdef UTF8_AVAILABLE +#ifdef UTF8_AVAILABLE if (DO_UTF8(sv) && !sv_utf8_downgrade(sv, 1)) croak("Wide character in Compress::Raw::Zlib::adler32"); -#endif +#endif buf = (Byte*)SvPVbyte(sv, len) ; if (items < 2) @@ -815,7 +821,7 @@ Zip_adler32(buf, adler=adlerInitial) adler = adlerInitial; OUTPUT: RETVAL - + #define Zip_crc32(buf, crc, offset) crc32(crc, buf+offset, (uInt)len-offset) uLong @@ -823,15 +829,15 @@ Zip_crc32(buf, crc=crcInitial, offset=0) uLong crc = NO_INIT STRLEN len = NO_INIT Bytef * buf = NO_INIT - STRLEN offset + STRLEN offset SV * sv = ST(0) ; INIT: /* If the buffer is a reference, dereference it */ sv = deRef(sv, "crc32") ; -#ifdef UTF8_AVAILABLE +#ifdef UTF8_AVAILABLE if (DO_UTF8(sv) && !sv_utf8_downgrade(sv, 1)) croak("Wide character in Compress::Raw::Zlib::crc32"); -#endif +#endif buf = (Byte*)SvPVbyte(sv, len) ; if (offset > len) @@ -843,12 +849,12 @@ Zip_crc32(buf, crc=crcInitial, offset=0) crc = SvUV(ST(1)) ; else crc = crcInitial; - + uLong crc32_combine(crc1, crc2, len2) - uLong crc1 - uLong crc2 - z_off_t len2 + uLong crc1 + uLong crc2 + z_off_t len2 CODE: #ifndef AT_LEAST_ZLIB_1_2_2_1 crc1 = crc1; crc2 = crc2 ; len2 = len2; /* Silence -Wall */ @@ -862,9 +868,9 @@ crc32_combine(crc1, crc2, len2) uLong adler32_combine(adler1, adler2, len2) - uLong adler1 - uLong adler2 - z_off_t len2 + uLong adler1 + uLong adler2 + z_off_t len2 CODE: #ifndef AT_LEAST_ZLIB_1_2_2_1 adler1 = adler1; adler2 = adler2 ; len2 = len2; /* Silence -Wall */ @@ -892,8 +898,8 @@ _deflateInit(flags,level, method, windowBits, memLevel, strategy, bufsize, dicti int err ; deflateStream s ; - if (trace) - warn("in _deflateInit(level=%d, method=%d, windowBits=%d, memLevel=%d, strategy=%d, bufsize=%ld dictionary=%p)\n", + if (trace) + warn("in _deflateInit(level=%d, method=%d, windowBits=%d, memLevel=%d, strategy=%d, bufsize=%ld dictionary=%p)\n", level, method, windowBits, memLevel, strategy, bufsize, dictionary) ; if ((s = InitStream() )) { @@ -903,7 +909,7 @@ _deflateInit(flags,level, method, windowBits, memLevel, strategy, bufsize, dicti s->MemLevel = memLevel; s->Strategy = strategy; - err = deflateInit2(&(s->stream), level, + err = deflateInit2(&(s->stream), level, method, windowBits, memLevel, strategy); if (trace) { @@ -914,12 +920,12 @@ _deflateInit(flags,level, method, windowBits, memLevel, strategy, bufsize, dicti /* Check if a dictionary has been specified */ SvGETMAGIC(dictionary); if (err == Z_OK && SvPOK(dictionary) && SvCUR(dictionary)) { -#ifdef UTF8_AVAILABLE +#ifdef UTF8_AVAILABLE if (DO_UTF8(dictionary) && !sv_utf8_downgrade(dictionary, 1)) croak("Wide character in Compress::Raw::Zlib::Deflate::new dicrionary parameter"); -#endif +#endif err = deflateSetDictionary(&(s->stream), (const Bytef*) SvPVX(dictionary), SvCUR(dictionary)) ; - if (trace) + if (trace) warn("deflateSetDictionary returned %d\n", err); s->dict_adler = s->stream.adler ; } @@ -930,13 +936,13 @@ _deflateInit(flags,level, method, windowBits, memLevel, strategy, bufsize, dicti } else PostInitStream(s, flags, bufsize, windowBits) ; - + } else err = Z_MEM_ERROR ; { - SV* obj = sv_setref_pv(sv_newmortal(), + SV* obj = sv_setref_pv(sv_newmortal(), "Compress::Raw::Zlib::deflateStream", (void*)s); XPUSHs(obj); } @@ -955,7 +961,7 @@ _inflateInit(flags, windowBits, bufsize, dictionary) ALIAS: _inflateScanInit = 1 PPCODE: - + int err = Z_OK ; inflateStream s ; #ifndef MAGIC_APPEND @@ -980,7 +986,7 @@ _inflateInit(flags, windowBits, bufsize, dictionary) if (s->WindowBits < 0) { STRLEN dlen; const Bytef* b = (const Bytef*)SvPVbyte(dictionary, dlen); - err = inflateSetDictionary(&(s->stream), + err = inflateSetDictionary(&(s->stream), b, dlen); if (err != Z_OK) { Safefree(s) ; @@ -1006,9 +1012,9 @@ _inflateInit(flags, windowBits, bufsize, dictionary) err = Z_MEM_ERROR ; { - SV* obj = sv_setref_pv(sv_newmortal(), - ix == 1 - ? "Compress::Raw::Zlib::inflateScanStream" + SV* obj = sv_setref_pv(sv_newmortal(), + ix == 1 + ? "Compress::Raw::Zlib::inflateScanStream" : "Compress::Raw::Zlib::inflateStream", (void*)s); XPUSHs(obj); @@ -1018,7 +1024,7 @@ _inflateInit(flags, windowBits, bufsize, dictionary) setDUALstatus(sv, err); XPUSHs(sv) ; } - + MODULE = Compress::Raw::Zlib PACKAGE = Compress::Raw::Zlib::deflateStream @@ -1039,11 +1045,11 @@ deflateReset(s) OUTPUT: RETVAL -DualType +DualType deflate (s, buf, output) Compress::Raw::Zlib::deflateStream s SV * buf - SV * output + SV * output uInt cur_length = NO_INIT uInt increment = NO_INIT uInt prefix = NO_INIT @@ -1055,15 +1061,15 @@ deflate (s, buf, output) /* If the input buffer is a reference, dereference it */ buf = deRef(buf, "deflate") ; - + /* initialise the input buffer */ -#ifdef UTF8_AVAILABLE +#ifdef UTF8_AVAILABLE if (DO_UTF8(buf) && !sv_utf8_downgrade(buf, 1)) croak("Wide character in Compress::Raw::Zlib::Deflate::deflate input parameter"); -#endif +#endif s->stream.next_in = (Bytef*)SvPV_nomg(buf, origlen) ; s->stream.avail_in = origlen; - + if (s->flags & FLAG_CRC32) s->crc32 = crc32(s->crc32, s->stream.next_in, s->stream.avail_in) ; @@ -1072,15 +1078,16 @@ deflate (s, buf, output) /* and retrieve the output buffer */ output = deRef_l(output, "deflate") ; -#ifdef UTF8_AVAILABLE +#ifdef UTF8_AVAILABLE if (DO_UTF8(output) && !sv_utf8_downgrade(output, 1)) croak("Wide character in Compress::Raw::Zlib::Deflate::deflate output parameter"); -#endif +#endif - if((s->flags & FLAG_APPEND) != FLAG_APPEND) { - SvCUR_set(output, 0); - /* sv_setpvn(output, "", 0); */ - } + if((s->flags & FLAG_APPEND) == FLAG_APPEND) { + SvOOK_off(output); + } else { + SvCUR_set(output, 0); + } prefix = cur_length = SvCUR(output) ; s->stream.next_out = (Bytef*) SvPVX(output) + cur_length; increment = SvLEN(output) - cur_length; @@ -1104,8 +1111,8 @@ deflate (s, buf, output) s->stream.next_out = (Bytef*) Sv_Grow(output, SvLEN(output) + plen - s->stream.avail_out) ; s->stream.next_out += cur_length; } - - Copy(s->deflateParams_out_buffer, s->stream.next_out, plen, Bytef) ; + + Copy(s->deflateParams_out_buffer, s->stream.next_out, plen, Bytef) ; cur_length += plen; SvCUR_set(output, cur_length); s->stream.next_out += plen ; @@ -1131,7 +1138,7 @@ deflate (s, buf, output) } if (trace) { - printf("DEFLATE Avail In %d, Out %d\n", s->stream.avail_in, s->stream.avail_out); + printf("DEFLATE Avail In %d, Out %d\n", s->stream.avail_in, s->stream.avail_out); DispStream(s, "BEFORE"); /* Perl_sv_dump(output); */ } @@ -1141,18 +1148,17 @@ deflate (s, buf, output) if (RETVAL != Z_STREAM_ERROR) { int done = increment - s->stream.avail_out ; printf("std DEFLATEr returned %d '%s' avail in %d, out %d wrote %d\n", RETVAL, - GetErrorString(RETVAL), s->stream.avail_in, -s->stream.avail_out, done); + GetErrorString(RETVAL), s->stream.avail_in, s->stream.avail_out, done); } */ - + if (trace) { printf("DEFLATE returned %d %s, avail in %d, out %d\n", RETVAL, - GetErrorString(RETVAL), s->stream.avail_in, s->stream.avail_out); + GetErrorString(RETVAL), s->stream.avail_in, s->stream.avail_out); DispStream(s, "AFTER"); } - if (RETVAL != Z_OK) + if (RETVAL != Z_OK) break; } @@ -1167,7 +1173,7 @@ s->stream.avail_out, done); } OUTPUT: RETVAL - + void DESTROY(s) @@ -1188,28 +1194,29 @@ DESTROY(s) DualType flush(s, output, f=Z_FINISH) Compress::Raw::Zlib::deflateStream s - SV * output + SV * output int f uInt cur_length = NO_INIT uInt increment = NO_INIT uInt prefix = NO_INIT uLong bufinc = NO_INIT - uLong availableout = NO_INIT + uLong availableout = NO_INIT CODE: bufinc = s->bufsize; - - - + + + /* retrieve the output buffer */ output = deRef_l(output, "flush") ; -#ifdef UTF8_AVAILABLE +#ifdef UTF8_AVAILABLE if (DO_UTF8(output) && !sv_utf8_downgrade(output, 1)) croak("Wide character in Compress::Raw::Zlib::Deflate::flush input parameter"); -#endif - if((s->flags & FLAG_APPEND) != FLAG_APPEND) { - SvCUR_set(output, 0); - /* sv_setpvn(output, "", 0); */ - } +#endif + if((s->flags & FLAG_APPEND) == FLAG_APPEND) { + SvOOK_off(output); + } else { + SvCUR_set(output, 0); + } prefix = cur_length = SvCUR(output) ; s->stream.next_out = (Bytef*) SvPVX(output) + cur_length; increment = SvLEN(output) - cur_length; @@ -1228,13 +1235,13 @@ flush(s, output, f=Z_FINISH) uLong plen = s->deflateParams_out_length ; /* printf("Copy %lu bytes saved data\n", plen); */ if (s->stream.avail_out < plen) { - /* printf("GROW from %d to %lu\n", s->stream.avail_out, + /* printf("GROW from %d to %lu\n", s->stream.avail_out, SvLEN(output) + plen - s->stream.avail_out); */ s->stream.next_out = (Bytef*) Sv_Grow(output, SvLEN(output) + plen - s->stream.avail_out) ; s->stream.next_out += cur_length; } - - Copy(s->deflateParams_out_buffer, s->stream.next_out, plen, Bytef) ; + + Copy(s->deflateParams_out_buffer, s->stream.next_out, plen, Bytef) ; cur_length += plen; SvCUR_set(output, cur_length); s->stream.next_out += plen ; @@ -1248,7 +1255,7 @@ flush(s, output, f=Z_FINISH) #endif for (;;) { - if (s->stream.avail_out == 0) { + if (s->stream.avail_out == 0) { /* consumed all the available output, so extend it */ s->stream.next_out = (Bytef*) Sv_Grow(output, SvLEN(output) + bufinc) ; cur_length += increment ; @@ -1257,11 +1264,11 @@ flush(s, output, f=Z_FINISH) s->stream.avail_out = increment; bufinc *= 2 ; } - + availableout = s->stream.avail_out ; - + if (trace) { - printf("flush (%d) DEFLATE Avail In %d, Out %d\n", f, s->stream.avail_in, s->stream.avail_out); + printf("flush (%d) DEFLATE Avail In %d, Out %d\n", f, s->stream.avail_in, s->stream.avail_out); DispStream(s, "BEFORE"); /* Perl_sv_dump(output); */ } @@ -1275,29 +1282,29 @@ flush(s, output, f=Z_FINISH) s->stream.avail_out, done); } */ - + if (trace) { printf("flush DEFLATE returned %d '%s', avail in %d, out %d\n", RETVAL, - GetErrorString(RETVAL), s->stream.avail_in, s->stream.avail_out); + GetErrorString(RETVAL), s->stream.avail_in, s->stream.avail_out); DispStream(s, "AFTER"); } /* Ignore the second of two consecutive flushes: */ - if (availableout == s->stream.avail_out && RETVAL == Z_BUF_ERROR) - RETVAL = Z_OK; - + if (availableout == s->stream.avail_out && RETVAL == Z_BUF_ERROR) + RETVAL = Z_OK; + /* deflate has finished flushing only when it hasn't used up - * all the available space in the output buffer: + * all the available space in the output buffer: */ if (s->stream.avail_out != 0 || RETVAL != Z_OK ) break; } - + RETVAL = (RETVAL == Z_STREAM_END ? Z_OK : RETVAL) ; s->last_error = RETVAL ; s->compressedBytes += cur_length + increment - prefix - s->stream.avail_out ; - + if (RETVAL == Z_OK) { SvPOK_only(output); SvCUR_set(output, cur_length + increment - s->stream.avail_out) ; @@ -1316,7 +1323,7 @@ _deflateParams(s, flags, level, strategy, bufsize) uLong bufsize bool changed = FALSE; CODE: - /* printf("_deflateParams(Flags %d Level %d Strategy %d Bufsize %d)\n", flags, level, strategy, bufsize); + /* printf("_deflateParams(Flags %d Level %d Strategy %d Bufsize %d)\n", flags, level, strategy, bufsize); printf("Before -- Level %d, Strategy %d, Bufsize %d\n", s->Level, s->Strategy, s->bufsize); */ if (flags & 1 && level != s->Level) { s->Level = level ; @@ -1327,17 +1334,17 @@ _deflateParams(s, flags, level, strategy, bufsize) changed = TRUE; } if (flags & 4) - s->bufsize = bufsize; + s->bufsize = bufsize; if (changed) { #ifdef SETP_BYTE - s->stream.avail_in = 0; + s->stream.avail_in = 0; s->stream.next_out = &(s->deflateParams_out_byte) ; s->stream.avail_out = 1; RETVAL = deflateParams(&(s->stream), s->Level, s->Strategy); - s->deflateParams_out_valid = + s->deflateParams_out_valid = (RETVAL == Z_OK && s->stream.avail_out == 0) ; #else - /* printf("Level %d Strategy %d, Prev Len %d\n", + /* printf("Level %d Strategy %d, Prev Len %d\n", s->Level, s->Strategy, s->deflateParams_out_length); */ RETVAL = flushParams(s); #endif @@ -1446,7 +1453,7 @@ msg(s) OUTPUT: RETVAL -int +int deflateTune(s, good_length, max_lazy, nice_length, max_chain) Compress::Raw::Zlib::deflateStream s int good_length @@ -1463,7 +1470,7 @@ deflateTune(s, good_length, max_lazy, nice_length, max_chain) #endif OUTPUT: RETVAL - + MODULE = Compress::Raw::Zlib PACKAGE = Compress::Raw::Zlib::inflateStream @@ -1483,23 +1490,23 @@ inflateReset(s) OUTPUT: RETVAL -DualType +DualType inflate (s, buf, output, eof=FALSE) Compress::Raw::Zlib::inflateStream s SV * buf - SV * output - bool eof + SV * output + bool eof uInt cur_length = 0; uInt prefix_length = 0; int increment = 0; uLong bufinc = NO_INIT STRLEN na = NO_INIT ; PREINIT: -#ifdef UTF8_AVAILABLE +#ifdef UTF8_AVAILABLE bool out_utf8 = FALSE; -#endif +#endif STRLEN origlen; - CODE: + CODE: bufinc = s->bufsize; /* If the buffer is a reference, dereference it */ buf = deRef(buf, "inflate") ; @@ -1509,40 +1516,42 @@ inflate (s, buf, output, eof=FALSE) croak("Compress::Raw::Zlib::Inflate::inflate input parameter cannot be read-only when ConsumeInput is specified"); SvPV_force(buf, na); } -#ifdef UTF8_AVAILABLE +#ifdef UTF8_AVAILABLE if (DO_UTF8(buf) && !sv_utf8_downgrade(buf, 1)) croak("Wide character in Compress::Raw::Zlib::Inflate::inflate input parameter"); -#endif - +#endif + /* initialise the input buffer */ s->stream.next_in = (Bytef*)SvPV_nomg(buf, origlen) ; s->stream.avail_in = origlen ; - + /* and retrieve the output buffer */ output = deRef_l(output, "inflate") ; -#ifdef UTF8_AVAILABLE +#ifdef UTF8_AVAILABLE if (DO_UTF8(output)) out_utf8 = TRUE ; if (DO_UTF8(output) && !sv_utf8_downgrade(output, 1)) croak("Wide character in Compress::Raw::Zlib::Inflate::inflate output parameter"); -#endif - if((s->flags & FLAG_APPEND) != FLAG_APPEND) { - SvCUR_set(output, 0); - } - +#endif + if((s->flags & FLAG_APPEND) == FLAG_APPEND) { + SvOOK_off(output); + } else { + SvCUR_set(output, 0); + } + /* Assume no output buffer - the code below will update if there is any available */ s->stream.avail_out = 0; if (SvLEN(output)) { prefix_length = cur_length = SvCUR(output) ; - + if (s->flags & FLAG_LIMIT_OUTPUT && SvLEN(output) - cur_length - 1 < bufinc) { Sv_Grow(output, bufinc + cur_length + 1) ; } - - /* Only setup the stream output pointers if there is spare + + /* Only setup the stream output pointers if there is spare capacity in the outout SV */ if (SvLEN(output) > cur_length + 1) @@ -1552,10 +1561,10 @@ inflate (s, buf, output, eof=FALSE) s->stream.avail_out = increment; } } - + s->bytesInflated = 0; - + RETVAL = Z_OK; while (RETVAL == Z_OK) { @@ -1566,35 +1575,35 @@ inflate (s, buf, output, eof=FALSE) s->stream.next_out += cur_length ; increment = bufinc ; s->stream.avail_out = increment; - bufinc *= 2 ; + bufinc *= 2 ; } /* printf("INFLATE Availl In %d, Out %d\n", s->stream.avail_in, - s->stream.avail_out); + s->stream.avail_out); DispStream(s, "BEFORE"); Perl_sv_dump(output); */ RETVAL = inflate(&(s->stream), Z_SYNC_FLUSH); /* printf("INFLATE returned %d %s, avail in %d, out %d\n", RETVAL, GetErrorString(RETVAL), s->stream.avail_in, s->stream.avail_out); */ - + if (RETVAL == Z_NEED_DICT && s->dictionary) { STRLEN dlen; const Bytef* b = (const Bytef*)SvPV(s->dictionary, dlen) ; s->dict_adler = s->stream.adler ; - RETVAL = inflateSetDictionary(&(s->stream), + RETVAL = inflateSetDictionary(&(s->stream), b, dlen); if (RETVAL == Z_OK) continue; } - - if (s->flags & FLAG_LIMIT_OUTPUT && + + if (s->flags & FLAG_LIMIT_OUTPUT && (RETVAL == Z_OK || RETVAL == Z_BUF_ERROR )) { if (s->stream.avail_out == 0) RETVAL = Z_BUF_ERROR; break; } - if (s->flags & FLAG_LIMIT_OUTPUT && + if (s->flags & FLAG_LIMIT_OUTPUT && (RETVAL == Z_OK || RETVAL == Z_BUF_ERROR )) break; @@ -1611,7 +1620,7 @@ Perl_sv_dump(output); */ } } } -#ifdef NEED_DUMMY_BYTE_AT_END +#ifdef NEED_DUMMY_BYTE_AT_END if (eof && RETVAL == Z_OK && s->flags & FLAG_LIMIT_OUTPUT == 0) { Bytef* nextIn = s->stream.next_in; uInt availIn = s->stream.avail_in; @@ -1633,7 +1642,7 @@ Perl_sv_dump(output); */ #else PERL_UNUSED_VAR(eof); #endif - + s->last_error = RETVAL ; if (RETVAL == Z_OK || RETVAL == Z_STREAM_END || RETVAL == Z_BUF_ERROR || RETVAL == Z_DATA_ERROR) { unsigned in ; @@ -1645,20 +1654,20 @@ Perl_sv_dump(output); */ SvPOK_only(output); SvCUR_set(output, prefix_length + s->bytesInflated) ; *SvEND(output) = '\0'; -#ifdef UTF8_AVAILABLE +#ifdef UTF8_AVAILABLE if (out_utf8) sv_utf8_upgrade(output); -#endif +#endif SvSETMAGIC(output); if (s->flags & FLAG_CRC32 ) - s->crc32 = crc32(s->crc32, - (const Bytef*)SvPVX(output)+prefix_length, + s->crc32 = crc32(s->crc32, + (const Bytef*)SvPVX(output)+prefix_length, SvCUR(output)-prefix_length) ; - if (s->flags & FLAG_ADLER32) - s->adler32 = adler32(s->adler32, - (const Bytef*)SvPVX(output)+prefix_length, + if (s->flags & FLAG_ADLER32) + s->adler32 = adler32(s->adler32, + (const Bytef*)SvPVX(output)+prefix_length, SvCUR(output)-prefix_length) ; /* fix the input buffer */ @@ -1666,7 +1675,7 @@ Perl_sv_dump(output); */ in = s->stream.avail_in ; SvCUR_set(buf, in) ; if (in) - Move(s->stream.next_in, SvPVX(buf), in, char) ; + Move(s->stream.next_in, SvPVX(buf), in, char) ; *SvEND(buf) = '\0'; SvSETMAGIC(buf); } @@ -1700,23 +1709,23 @@ uncompressedBytes(s) RETVAL -DualType +DualType inflateSync (s, buf) Compress::Raw::Zlib::inflateStream s SV * buf CODE: - + /* If the buffer is a reference, dereference it */ buf = deRef(buf, "inflateSync") ; -#ifdef UTF8_AVAILABLE +#ifdef UTF8_AVAILABLE if (DO_UTF8(buf) && !sv_utf8_downgrade(buf, 1)) croak("Wide character in Compress::Raw::Zlib::Inflate::inflateSync"); -#endif - +#endif + /* initialise the input buffer */ s->stream.next_in = (Bytef*)SvPV_force_nomg_nolen(buf) ; s->stream.avail_in = SvCUR(buf) ; - + /* inflateSync doesn't create any output */ s->stream.next_out = (Bytef*) NULL; s->stream.avail_out = 0; @@ -1729,7 +1738,7 @@ inflateSync (s, buf) unsigned in = s->stream.avail_in ; SvCUR_set(buf, in) ; if (in) - Move(s->stream.next_in, SvPVX(buf), in, char) ; + Move(s->stream.next_in, SvPVX(buf), in, char) ; *SvEND(buf) = '\0'; SvSETMAGIC(buf); } @@ -1867,7 +1876,7 @@ inflateReset(s) OUTPUT: RETVAL -DualType +DualType scan(s, buf, out=NULL, eof=FALSE) Compress::Raw::Zlib::inflateScanStream s SV * buf @@ -1884,15 +1893,15 @@ scan(s, buf, out=NULL, eof=FALSE) croak("scan needs zlib 1.2.1 or better"); #else buf = deRef(buf, "inflateScan") ; -#ifdef UTF8_AVAILABLE +#ifdef UTF8_AVAILABLE if (DO_UTF8(buf) && !sv_utf8_downgrade(buf, 1)) croak("Wide character in Compress::Raw::Zlib::InflateScan::scan input parameter"); -#endif +#endif /* initialise the input buffer */ s->stream.next_in = (Bytef*)SvPV_force_nomg_nolen(buf) ; s->stream.avail_in = SvCUR(buf) ; start_len = s->stream.avail_in ; - s->bytesInflated = 0 ; + s->bytesInflated = 0 ; do { if (s->stream.avail_in == 0) { @@ -1917,11 +1926,11 @@ scan(s, buf, out=NULL, eof=FALSE) break ; if (s->flags & FLAG_CRC32 ) - s->crc32 = crc32(s->crc32, s->window + s->window_have, + s->crc32 = crc32(s->crc32, s->window + s->window_have, WINDOW_SIZE - s->window_have - s->stream.avail_out); - if (s->flags & FLAG_ADLER32) - s->adler32 = adler32(s->adler32, s->window + s->window_have, + if (s->flags & FLAG_ADLER32) + s->adler32 = adler32(s->adler32, s->window + s->window_have, WINDOW_SIZE - s->window_have - s->stream.avail_out); s->uncompressedBytes = @@ -1974,7 +1983,7 @@ scan(s, buf, out=NULL, eof=FALSE) unsigned in = s->stream.avail_in ; SvCUR_set(buf, in) ; if (in) - Move(s->stream.next_in, SvPVX(buf), in, char) ; + Move(s->stream.next_in, SvPVX(buf), in, char) ; *SvEND(buf) = '\0'; SvSETMAGIC(buf); } @@ -2098,7 +2107,7 @@ _createDeflateStream(inf_s, flags,level, method, windowBits, memLevel, strategy, s->MemLevel = memLevel; s->Strategy = strategy; - err = deflateInit2(&(s->stream), level, + err = deflateInit2(&(s->stream), level, method, windowBits, memLevel, strategy); if (err == Z_OK) { @@ -2126,7 +2135,7 @@ _createDeflateStream(inf_s, flags,level, method, windowBits, memLevel, strategy, else err = Z_MEM_ERROR ; - XPUSHs(sv_setref_pv(sv_newmortal(), + XPUSHs(sv_setref_pv(sv_newmortal(), "Compress::Raw::Zlib::deflateStream", (void*)s)); if (GIMME == G_ARRAY) { SV * sv = sv_2mortal(newSViv(err)) ; @@ -2160,4 +2169,3 @@ adler32(s) RETVAL = s->adler32 ; OUTPUT: RETVAL - diff --git a/gnu/usr.bin/perl/cpan/Compress-Raw-Zlib/config.in b/gnu/usr.bin/perl/cpan/Compress-Raw-Zlib/config.in index 30d14a6b220..fa998b53dbb 100644 --- a/gnu/usr.bin/perl/cpan/Compress-Raw-Zlib/config.in +++ b/gnu/usr.bin/perl/cpan/Compress-Raw-Zlib/config.in @@ -3,11 +3,11 @@ # written by Paul Marquess # last modified 28th October 2003 # version 2.000 -# -# +# +# # This file is used to control which zlib library will be used by # Compress::Zlib -# +# # See to the sections below in the README file for details of how to # use this file. # @@ -16,9 +16,9 @@ # Setting the Gzip OS Code # -BUILD_ZLIB = False -INCLUDE = /usr/include -LIB = /usr/lib +BUILD_ZLIB = True +INCLUDE = ./zlib-src +LIB = ./zlib-src OLD_ZLIB = False GZIP_OS_CODE = AUTO_DETECT diff --git a/gnu/usr.bin/perl/cpan/Compress-Raw-Zlib/lib/Compress/Raw/Zlib.pm b/gnu/usr.bin/perl/cpan/Compress-Raw-Zlib/lib/Compress/Raw/Zlib.pm index cf7126b4238..004a541f75b 100644 --- a/gnu/usr.bin/perl/cpan/Compress-Raw-Zlib/lib/Compress/Raw/Zlib.pm +++ b/gnu/usr.bin/perl/cpan/Compress-Raw-Zlib/lib/Compress/Raw/Zlib.pm @@ -10,12 +10,12 @@ use warnings ; use bytes ; our ($VERSION, $XS_VERSION, @ISA, @EXPORT, %EXPORT_TAGS, @EXPORT_OK, $AUTOLOAD, %DEFLATE_CONSTANTS, @DEFLATE_CONSTANTS); -$VERSION = '2.093'; -$XS_VERSION = $VERSION; +$VERSION = '2.105'; +$XS_VERSION = $VERSION; $VERSION = eval $VERSION; @ISA = qw(Exporter); -%EXPORT_TAGS = ( flush => [qw{ +%EXPORT_TAGS = ( flush => [qw{ Z_NO_FLUSH Z_PARTIAL_FLUSH Z_SYNC_FLUSH @@ -23,30 +23,30 @@ $VERSION = eval $VERSION; Z_FINISH Z_BLOCK }], - level => [qw{ + level => [qw{ Z_NO_COMPRESSION Z_BEST_SPEED Z_BEST_COMPRESSION Z_DEFAULT_COMPRESSION }], - strategy => [qw{ + strategy => [qw{ Z_FILTERED Z_HUFFMAN_ONLY Z_RLE Z_FIXED Z_DEFAULT_STRATEGY }], - status => [qw{ + status => [qw{ Z_OK Z_STREAM_END Z_NEED_DICT Z_ERRNO Z_STREAM_ERROR - Z_DATA_ERROR - Z_MEM_ERROR - Z_BUF_ERROR - Z_VERSION_ERROR - }], + Z_DATA_ERROR + Z_MEM_ERROR + Z_BUF_ERROR + Z_VERSION_ERROR + }], ); %DEFLATE_CONSTANTS = %EXPORT_TAGS; @@ -54,12 +54,12 @@ $VERSION = eval $VERSION; # Items to export into callers namespace by default. Note: do not export # names by default without a very good reason. Use EXPORT_OK instead. # Do not simply export all your public functions/methods/constants. -@DEFLATE_CONSTANTS = +@DEFLATE_CONSTANTS = @EXPORT = qw( ZLIB_VERSION ZLIB_VERNUM - + OS_CODE MAX_MEM_LEVEL @@ -125,13 +125,13 @@ eval { require XSLoader; XSLoader::load('Compress::Raw::Zlib', $XS_VERSION); 1; -} +} or do { require DynaLoader; local @ISA = qw(DynaLoader); - bootstrap Compress::Raw::Zlib $XS_VERSION ; + bootstrap Compress::Raw::Zlib $XS_VERSION ; }; - + use constant Parse_any => 0x01; use constant Parse_unsigned => 0x02; @@ -153,7 +153,7 @@ use constant OFF_STICKY => 5 ; sub ParseParameters { - my $level = shift || 0 ; + my $level = shift || 0 ; my $sub = (caller($level + 1))[3] ; #local $Carp::CarpLevel = 1 ; @@ -186,13 +186,13 @@ sub Compress::Raw::Zlib::Parameters::setError $self->{Error} = $error ; return $retval; } - + #sub getError #{ # my $self = shift ; # return $self->{Error} ; #} - + sub Compress::Raw::Zlib::Parameters::parse { my $self = shift ; @@ -211,10 +211,10 @@ sub Compress::Raw::Zlib::Parameters::parse @entered = () ; } elsif (@_ == 1) { - my $href = $_[0] ; + my $href = $_[0] ; return $self->setError("Expected even number of parameters, got 1") if ! defined $href or ! ref $href or ref $href ne "HASH" ; - + foreach my $key (keys %$href) { push @entered, $key ; push @entered, \$href->{$key} ; @@ -224,7 +224,7 @@ sub Compress::Raw::Zlib::Parameters::parse my $count = @_; return $self->setError("Expected even number of parameters, got $count") if $count % 2 != 0 ; - + for my $i (0.. $count / 2 - 1) { push @entered, $_[2* $i] ; push @entered, \$_[2* $i+1] ; @@ -239,7 +239,7 @@ sub Compress::Raw::Zlib::Parameters::parse my ($first_only, $sticky, $type, $value) = @$v ; my $x ; - $self->_checkType($key, \$value, $type, 0, \$x) + $self->_checkType($key, \$value, $type, 0, \$x) or return undef ; $key = lc $key; @@ -260,7 +260,7 @@ sub Compress::Raw::Zlib::Parameters::parse $key =~ s/^-// ; my $canonkey = lc $key; - + if ($got->{$canonkey} && ($firstTime || ! $got->{$canonkey}[OFF_FIRST_ONLY] )) { @@ -275,7 +275,7 @@ sub Compress::Raw::Zlib::Parameters::parse else { push (@Bad, $key) } } - + if (@Bad) { my ($bad) = join(", ", @Bad) ; return $self->setError("unknown key value(s) @Bad") ; @@ -319,7 +319,7 @@ sub Compress::Raw::Zlib::Parameters::_checkType return $self->setError("Parameter '$key' must be an unsigned int, got '$value'") if $validate && $value !~ /^\d+$/; - $$output = defined $value ? $value : 0 ; + $$output = defined $value ? $value : 0 ; return 1; } elsif ($type & Parse_signed) @@ -329,19 +329,19 @@ sub Compress::Raw::Zlib::Parameters::_checkType return $self->setError("Parameter '$key' must be a signed int, got '$value'") if $validate && $value !~ /^-?\d+$/; - $$output = defined $value ? $value : 0 ; + $$output = defined $value ? $value : 0 ; return 1 ; } elsif ($type & Parse_boolean) { return $self->setError("Parameter '$key' must be an int, got '$value'") if $validate && defined $value && $value !~ /^\d*$/; - $$output = defined $value ? $value != 0 : 0 ; + $$output = defined $value ? $value != 0 : 0 ; return 1; } # elsif ($type & Parse_string) # { -# $$output = defined $value ? $value : "" ; +# $$output = defined $value ? $value : "" ; # return 1; # } @@ -374,7 +374,7 @@ sub Compress::Raw::Zlib::Parameters::value return $self->{Got}{lc $name}[OFF_FIXED] ; } -our $OPTIONS_deflate = +our $OPTIONS_deflate = { 'AppendOutput' => [1, 1, Parse_boolean, 0], 'CRC32' => [1, 1, Parse_boolean, 0], @@ -394,7 +394,7 @@ sub Compress::Raw::Zlib::Deflate::new my $pkg = shift ; my ($got) = ParseParameters(0, $OPTIONS_deflate, @_); - croak "Compress::Raw::Zlib::Deflate::new: Bufsize must be >= 1, you specified " . + croak "Compress::Raw::Zlib::Deflate::new: Bufsize must be >= 1, you specified " . $got->value('Bufsize') unless $got->value('Bufsize') >= 1; @@ -408,11 +408,11 @@ sub Compress::Raw::Zlib::Deflate::new if ($windowBits & MAX_WBITS()) == 0 ; _deflateInit($flags, - $got->value('Level'), - $got->value('Method'), - $windowBits, - $got->value('MemLevel'), - $got->value('Strategy'), + $got->value('Level'), + $got->value('Method'), + $windowBits, + $got->value('MemLevel'), + $got->value('Strategy'), $got->value('Bufsize'), $got->value('Dictionary')) ; @@ -431,7 +431,7 @@ sub Compress::Raw::Zlib::deflateStream::STORABLE_thaw } -our $OPTIONS_inflate = +our $OPTIONS_inflate = { 'AppendOutput' => [1, 1, Parse_boolean, 0], 'LimitOutput' => [1, 1, Parse_boolean, 0], @@ -439,7 +439,7 @@ our $OPTIONS_inflate = 'ADLER32' => [1, 1, Parse_boolean, 0], 'ConsumeInput' => [1, 1, Parse_boolean, 1], 'Bufsize' => [1, 1, Parse_unsigned, 4096], - + 'WindowBits' => [1, 1, Parse_signed, MAX_WBITS()], 'Dictionary' => [1, 1, Parse_any, ""], } ; @@ -449,7 +449,7 @@ sub Compress::Raw::Zlib::Inflate::new my $pkg = shift ; my ($got) = ParseParameters(0, $OPTIONS_inflate, @_); - croak "Compress::Raw::Zlib::Inflate::new: Bufsize must be >= 1, you specified " . + croak "Compress::Raw::Zlib::Inflate::new: Bufsize must be >= 1, you specified " . $got->value('Bufsize') unless $got->value('Bufsize') >= 1; @@ -465,7 +465,7 @@ sub Compress::Raw::Zlib::Inflate::new $windowBits += MAX_WBITS() if ($windowBits & MAX_WBITS()) == 0 ; - _inflateInit($flags, $windowBits, $got->value('Bufsize'), + _inflateInit($flags, $windowBits, $got->value('Bufsize'), $got->value('Dictionary')) ; } @@ -489,13 +489,13 @@ sub Compress::Raw::Zlib::InflateScan::new 'CRC32' => [1, 1, Parse_boolean, 0], 'ADLER32' => [1, 1, Parse_boolean, 0], 'Bufsize' => [1, 1, Parse_unsigned, 4096], - + 'WindowBits' => [1, 1, Parse_signed, -MAX_WBITS()], 'Dictionary' => [1, 1, Parse_any, ""], }, @_) ; - croak "Compress::Raw::Zlib::InflateScan::new: Bufsize must be >= 1, you specified " . + croak "Compress::Raw::Zlib::InflateScan::new: Bufsize must be >= 1, you specified " . $got->value('Bufsize') unless $got->value('Bufsize') >= 1; @@ -505,7 +505,7 @@ sub Compress::Raw::Zlib::InflateScan::new $flags |= FLAG_ADLER if $got->value('ADLER32') ; #$flags |= FLAG_CONSUME_INPUT if $got->value('ConsumeInput') ; - _inflateScanInit($flags, $got->value('WindowBits'), $got->value('Bufsize'), + _inflateScanInit($flags, $got->value('WindowBits'), $got->value('Bufsize'), '') ; } @@ -518,7 +518,7 @@ sub Compress::Raw::Zlib::inflateScanStream::createDeflateStream 'CRC32' => [1, 1, Parse_boolean, 0], 'ADLER32' => [1, 1, Parse_boolean, 0], 'Bufsize' => [1, 1, Parse_unsigned, 4096], - + 'Level' => [1, 1, Parse_signed, Z_DEFAULT_COMPRESSION()], 'Method' => [1, 1, Parse_unsigned, Z_DEFLATED()], 'WindowBits' => [1, 1, Parse_signed, - MAX_WBITS()], @@ -526,7 +526,7 @@ sub Compress::Raw::Zlib::inflateScanStream::createDeflateStream 'Strategy' => [1, 1, Parse_unsigned, Z_DEFAULT_STRATEGY()], }, @_) ; - croak "Compress::Raw::Zlib::InflateScan::createDeflateStream: Bufsize must be >= 1, you specified " . + croak "Compress::Raw::Zlib::InflateScan::createDeflateStream: Bufsize must be >= 1, you specified " . $got->value('Bufsize') unless $got->value('Bufsize') >= 1; @@ -536,11 +536,11 @@ sub Compress::Raw::Zlib::inflateScanStream::createDeflateStream $flags |= FLAG_ADLER if $got->value('ADLER32') ; $pkg->_createDeflateStream($flags, - $got->value('Level'), - $got->value('Method'), - $got->value('WindowBits'), - $got->value('MemLevel'), - $got->value('Strategy'), + $got->value('Level'), + $got->value('Method'), + $got->value('WindowBits'), + $got->value('MemLevel'), + $got->value('Strategy'), $got->value('Bufsize'), ) ; @@ -556,10 +556,10 @@ sub Compress::Raw::Zlib::inflateScanStream::inflate if ($status == Z_OK() && $_[2]) { my $byte = ' '; - + $status = $self->scan(\$byte, $_[1]) ; } - + return $status ; } @@ -570,14 +570,14 @@ sub Compress::Raw::Zlib::deflateStream::deflateParams 'Level' => [1, 1, Parse_signed, undef], 'Strategy' => [1, 1, Parse_unsigned, undef], 'Bufsize' => [1, 1, Parse_unsigned, undef], - }, + }, @_) ; croak "Compress::Raw::Zlib::deflateParams needs Level and/or Strategy" unless $got->parsed('Level') + $got->parsed('Strategy') + $got->parsed('Bufsize'); - croak "Compress::Raw::Zlib::Inflate::deflateParams: Bufsize must be >= 1, you specified " . + croak "Compress::Raw::Zlib::Inflate::deflateParams: Bufsize must be >= 1, you specified " . $got->value('Bufsize') if $got->parsed('Bufsize') && $got->value('Bufsize') <= 1; @@ -586,7 +586,7 @@ sub Compress::Raw::Zlib::deflateStream::deflateParams $flags |= 2 if $got->parsed('Strategy') ; $flags |= 4 if $got->parsed('Bufsize') ; - $self->_deflateParams($flags, $got->value('Level'), + $self->_deflateParams($flags, $got->value('Level'), $got->value('Strategy'), $got->value('Bufsize')); } @@ -644,7 +644,7 @@ Compress::Raw::Zlib - Low-Level Interface to zlib compression library =head1 DESCRIPTION The I module provides a Perl interface to the I -compression library (see L for details about where to get +compression library (see L for details about where to get I). =head1 Compress::Raw::Zlib::Deflate @@ -931,18 +931,18 @@ input, deflates it and writes it to standard output. while (<>) { $status = $x->deflate($_, $output) ; - + $status == Z_OK or die "deflation failed\n" ; - + print $output ; } - + $status = $x->flush($output) ; - + $status == Z_OK or die "deflation failed\n" ; - + print $output ; =head1 Compress::Raw::Zlib::Inflate @@ -1210,26 +1210,26 @@ Here is an example of using C. use strict ; use warnings ; - + use Compress::Raw::Zlib; - + my $x = new Compress::Raw::Zlib::Inflate() or die "Cannot create a inflation stream\n" ; - + my $input = '' ; binmode STDIN; binmode STDOUT; - + my ($output, $status) ; while (read(STDIN, $input, 4096)) { $status = $x->inflate($input, $output) ; - + print $output ; - + last if $status != Z_OK ; } - + die "inflation failed\n" unless $status == Z_STREAM_END ; @@ -1243,16 +1243,16 @@ simpler. use strict ; use warnings ; - + use Compress::Raw::Zlib; - + my $x = new Compress::Raw::Zlib::Inflate(LimitOutput => 1) or die "Cannot create a inflation stream\n" ; - + my $input = '' ; binmode STDIN; binmode STDOUT; - + my ($output, $status) ; OUTER: @@ -1269,7 +1269,7 @@ simpler. } while ($status == Z_OK && length $input); } - + die "inflation failed\n" unless $status == Z_STREAM_END ; @@ -1324,24 +1324,24 @@ source and uncompressing as you go the code will look something like this use strict ; use warnings ; - + use Compress::Raw::Zlib; - + my $x = new Compress::Raw::Zlib::Inflate() or die "Cannot create a inflation stream\n" ; - + my $input = '' ; - + my ($output, $status) ; while (read(STDIN, $input, 4096)) { $status = $x->inflate($input, $output) ; - + print $output ; - + last if $status != Z_OK ; } - + die "inflation failed\n" unless $status == Z_STREAM_END ; @@ -1391,16 +1391,16 @@ Below is typical code that shows how to use C. use strict ; use warnings ; - + use Compress::Raw::Zlib; - + my $x = new Compress::Raw::Zlib::Inflate(LimitOutput => 1) or die "Cannot create a inflation stream\n" ; - + my $input = '' ; binmode STDIN; binmode STDOUT; - + my ($output, $status) ; OUTER: @@ -1417,7 +1417,7 @@ Below is typical code that shows how to use C. } while ($status == Z_OK && length $input); } - + die "inflation failed\n" unless $status == Z_STREAM_END ; @@ -1559,7 +1559,7 @@ of I. =head1 SUPPORT -General feedback/questions/bug reports should be sent to +General feedback/questions/bug reports should be sent to L (preferred) or L. @@ -1574,9 +1574,9 @@ L, L For RFC 1950, 1951 and 1952 see -L, -L and -L +L, +L and +L The I compression library was written by Jean-loup Gailly C and Mark Adler C. @@ -1596,8 +1596,7 @@ See the Changes file. =head1 COPYRIGHT AND LICENSE -Copyright (c) 2005-2019 Paul Marquess. All rights reserved. +Copyright (c) 2005-2022 Paul Marquess. All rights reserved. This program is free software; you can redistribute it and/or modify it under the same terms as Perl itself. - diff --git a/gnu/usr.bin/perl/cpan/Compress-Raw-Zlib/private/MakeUtil.pm b/gnu/usr.bin/perl/cpan/Compress-Raw-Zlib/private/MakeUtil.pm index 037782b9498..aa540c68fda 100644 --- a/gnu/usr.bin/perl/cpan/Compress-Raw-Zlib/private/MakeUtil.pm +++ b/gnu/usr.bin/perl/cpan/Compress-Raw-Zlib/private/MakeUtil.pm @@ -35,22 +35,21 @@ sub MY::libscan my $path = shift; return undef - if $path =~ /^(?:RCS|CVS|SCCS|\.svn|_darcs)$/ || - $path =~ /(~|\.bak|_bak)$/ || + if $path =~ /(~|\.bak|_bak)$/ || $path =~ /\..*\.sw(o|p)$/ || $path =~ /\B\.svn\b/; return $path; } -sub MY::postamble +sub MY::postamble { return '' if $ENV{PERL_CORE} ; my @files = getPerlFiles('MANIFEST'); - # Note: Once you remove all the layers of shell/makefile escaping + # Note: Once you remove all the layers of shell/makefile escaping # the regular expression below reads # # /^\s*local\s*\(\s*\$^W\s*\)/ @@ -216,7 +215,7 @@ sub UpDowngrade foreach (@files) { #if (-l $_ ) { doUpDown($our_sub, $warn_sub, $_) } - #else + #else #{ doUpDownViaCopy($our_sub, $warn_sub, $_) } } @@ -235,7 +234,7 @@ sub doUpDown local ($^I) = ($^O eq 'VMS') ? "_bak" : ".bak"; local (@ARGV) = shift; - + while (<>) { print, last if /^__(END|DATA)__/ ; @@ -278,7 +277,7 @@ sub doUpDownViaCopy push @keep, $_; last ; } - + &{ $our_sub }() if $our_sub ; &{ $warn_sub }() if $warn_sub ; push @keep, $_; @@ -335,7 +334,7 @@ sub FindBrokenDependencies Compress::Zlib ); - + my @broken = (); foreach my $module ( grep { ! $thisModule{$_} } @modules) @@ -343,12 +342,12 @@ sub FindBrokenDependencies my $hasVersion = getInstalledVersion($module); # No need to upgrade if the module isn't installed at all - next + next if ! defined $hasVersion; # If already have C::Z version 1, then an upgrade to any of the # IO::Compress modules will not break it. - next + next if $module eq 'Compress::Zlib' && $hasVersion < 2; if ($hasVersion < $version) @@ -371,14 +370,12 @@ sub getInstalledVersion { no strict 'refs'; $version = ${ $module . "::VERSION" }; - $version = 0 + $version = 0 } - + return $version; } package MakeUtil ; 1; - - diff --git a/gnu/usr.bin/perl/cpan/Compress-Raw-Zlib/t/02zlib.t b/gnu/usr.bin/perl/cpan/Compress-Raw-Zlib/t/02zlib.t index 3cc762ec9f2..38124a53d36 100755 --- a/gnu/usr.bin/perl/cpan/Compress-Raw-Zlib/t/02zlib.t +++ b/gnu/usr.bin/perl/cpan/Compress-Raw-Zlib/t/02zlib.t @@ -15,8 +15,8 @@ use CompTestUtils; use constant ZLIB_1_2_12_0 => 0x12C0; -BEGIN -{ +BEGIN +{ # use Test::NoWarnings, if available my $extra = 0 ; $extra = 1 @@ -25,13 +25,13 @@ BEGIN my $count = 0 ; if ($] < 5.005) { - $count = 237 ; + $count = 249 ; } elsif ($] >= 5.006) { - $count = 325 ; + $count = 353 ; } else { - $count = 280 ; + $count = 308 ; } plan tests => $count + $extra; @@ -51,7 +51,7 @@ my $len = length $hello ; # Check zlib_version and ZLIB_VERSION are the same. SKIP: { - skip "TEST_SKIP_VERSION_CHECK is set", 1 + skip "TEST_SKIP_VERSION_CHECK is set", 1 if $ENV{TEST_SKIP_VERSION_CHECK}; is Compress::Raw::Zlib::zlib_version, ZLIB_VERSION, "ZLIB_VERSION matches Compress::Raw::Zlib::zlib_version" ; @@ -105,12 +105,12 @@ SKIP: { my $hello = "I am a HAL 9000 computer" ; my @hello = split('', $hello) ; - my ($err, $x, $X, $status); - + my ($err, $x, $X, $status); + ok( ($x, $err) = new Compress::Raw::Zlib::Deflate ( -Bufsize => 1 ), "Create deflate object" ); ok $x, "Compress::Raw::Zlib::Deflate ok" ; cmp_ok $err, '==', Z_OK, "status is Z_OK" ; - + ok ! defined $x->msg() ; is $x->total_in(), 0, "total_in() == 0" ; is $x->total_out(), 0, "total_out() == 0" ; @@ -121,26 +121,26 @@ SKIP: { { $status = $x->deflate($_, $X) ; last unless $status == Z_OK ; - + $Answer .= $X ; } - + cmp_ok $status, '==', Z_OK, "deflate returned Z_OK" ; - + cmp_ok $x->flush($X), '==', Z_OK, "flush returned Z_OK" ; $Answer .= $X ; - + ok ! defined $x->msg() ; is $x->total_in(), length $hello, "total_in ok" ; is $x->total_out(), length $Answer, "total_out ok" ; - + my @Answer = split('', $Answer) ; - + my $k; ok(($k, $err) = new Compress::Raw::Zlib::Inflate( {-Bufsize => 1}) ); ok $k, "Compress::Raw::Zlib::Inflate ok" ; cmp_ok $err, '==', Z_OK, "status is Z_OK" ; - + ok ! defined $k->msg(), "No error messages" ; is $k->total_in(), 0, "total_in() == 0" ; is $k->total_out(), 0, "total_out() == 0" ; @@ -152,9 +152,9 @@ SKIP: { $status = $k->inflate($_, $Z) ; $GOT .= $Z ; last if $status == Z_STREAM_END or $status != Z_OK ; - + } - + cmp_ok $status, '==', Z_STREAM_END, "Got Z_STREAM_END" ; is $GOT, $hello, "uncompressed data matches ok" ; ok ! defined $k->msg(), "No error messages" ; @@ -169,34 +169,34 @@ SKIP: { # ============================== my $hello = 6529 ; - + ok my ($x, $err) = new Compress::Raw::Zlib::Deflate ( -Bufsize => 1, -AppendOutput => 1 ) ; ok $x ; cmp_ok $err, '==', Z_OK ; - + my $status; my $Answer = ''; - + cmp_ok $x->deflate($hello, $Answer), '==', Z_OK ; - + cmp_ok $x->flush($Answer), '==', Z_OK ; - + my @Answer = split('', $Answer) ; - + my $k; ok(($k, $err) = new Compress::Raw::Zlib::Inflate( {-Bufsize => 1, -AppendOutput =>1}) ); ok $k ; cmp_ok $err, '==', Z_OK ; - + #my $GOT = ''; my $GOT ; foreach (@Answer) { $status = $k->inflate($_, $GOT) ; last if $status == Z_STREAM_END or $status != Z_OK ; - + } - + cmp_ok $status, '==', Z_STREAM_END ; is $GOT, $hello ; @@ -212,11 +212,11 @@ SKIP: { my $hello = "I am a HAL 9000 computer" ; my @hello = split('', $hello) ; - + ok my ($x, $err) = new Compress::Raw::Zlib::Deflate ( {-Bufsize => 1, -AppendOutput =>1} ) ; ok $x ; cmp_ok $err, '==', Z_OK ; - + my $status; my $X; foreach (@hello) @@ -224,32 +224,32 @@ SKIP: { $status = $x->deflate($_, $X) ; last unless $status == Z_OK ; } - + cmp_ok $status, '==', Z_OK ; - + cmp_ok $x->flush($X), '==', Z_OK ; - - + + my @Answer = split('', $X) ; - + my $k; ok(($k, $err) = new Compress::Raw::Zlib::Inflate( {-Bufsize => 1, -AppendOutput =>1})); ok $k ; cmp_ok $err, '==', Z_OK ; - + my $Z; foreach (@Answer) { $status = $k->inflate($_, $Z) ; last if $status == Z_STREAM_END or $status != Z_OK ; - + } - + cmp_ok $status, '==', Z_STREAM_END ; is $Z, $hello ; } - + { title "deflate/inflate - larger buffer"; @@ -259,34 +259,34 @@ SKIP: { my $contents = '' ; foreach (1 .. 50000) { $contents .= chr int rand 255 } - - + + ok my ($x, $err) = new Compress::Raw::Zlib::Deflate() ; ok $x ; cmp_ok $err, '==', Z_OK ; - + my (%X, $Y, %Z, $X, $Z); #cmp_ok $x->deflate($contents, $X{key}), '==', Z_OK ; cmp_ok $x->deflate($contents, $X), '==', Z_OK ; - + #$Y = $X{key} ; $Y = $X ; - - + + #cmp_ok $x->flush($X{key}), '==', Z_OK ; #$Y .= $X{key} ; cmp_ok $x->flush($X), '==', Z_OK ; $Y .= $X ; - - - + + + my $keep = $Y ; my $k; ok(($k, $err) = new Compress::Raw::Zlib::Inflate() ); ok $k ; cmp_ok $err, '==', Z_OK ; - + #cmp_ok $k->inflate($Y, $Z{key}), '==', Z_STREAM_END ; #ok $contents eq $Z{key} ; cmp_ok $k->inflate($Y, $Z), '==', Z_STREAM_END ; @@ -297,16 +297,16 @@ SKIP: { ok (($k, $err) = new Compress::Raw::Zlib::Inflate(-AppendOutput => 1)) ; ok $k ; cmp_ok $err, '==', Z_OK ; - - my $s ; + + my $s ; my $out ; my @bits = split('', $keep) ; foreach my $bit (@bits) { $s = $k->inflate($bit, $out) ; } - + cmp_ok $s, '==', Z_STREAM_END ; - + ok $contents eq $out ; @@ -320,16 +320,16 @@ SKIP: { my $dictionary = "hello" ; ok my $x = new Compress::Raw::Zlib::Deflate({-Level => Z_BEST_COMPRESSION, -Dictionary => $dictionary}) ; - + my $dictID = $x->dict_adler() ; my ($X, $Y, $Z); cmp_ok $x->deflate($hello, $X), '==', Z_OK; cmp_ok $x->flush($Y), '==', Z_OK; $X .= $Y ; - + ok my $k = new Compress::Raw::Zlib::Inflate(-Dictionary => $dictionary) ; - + cmp_ok $k->inflate($X, $Z), '==', Z_STREAM_END; is $k->dict_adler(), $dictID; is $hello, $Z ; @@ -339,18 +339,18 @@ SKIP: { title 'inflate - check remaining buffer after Z_STREAM_END'; # and that ConsumeInput works. # =================================================== - + for my $consume ( 0 .. 1) { ok my $x = new Compress::Raw::Zlib::Deflate(-Level => Z_BEST_COMPRESSION ) ; - + my ($X, $Y, $Z); cmp_ok $x->deflate($hello, $X), '==', Z_OK; cmp_ok $x->flush($Y), '==', Z_OK; $X .= $Y ; - + ok my $k = new Compress::Raw::Zlib::Inflate( -ConsumeInput => $consume) ; - + my $first = substr($X, 0, 2) ; my $remember_first = $first ; my $last = substr($X, 2) ; @@ -382,12 +382,12 @@ for my $consume ( 0 .. 1) title 'Check - MAX_WBITS'; # ================= - + my $hello = "Test test test test test"; my @hello = split('', $hello) ; - - ok my ($x, $err) = - new Compress::Raw::Zlib::Deflate ( -Bufsize => 1, + + ok my ($x, $err) = + new Compress::Raw::Zlib::Deflate ( -Bufsize => 1, -WindowBits => -MAX_WBITS(), -AppendOutput => 1 ) ; ok $x ; @@ -400,42 +400,42 @@ for my $consume ( 0 .. 1) $status = $x->deflate($_, $Answer) ; last unless $status == Z_OK ; } - + cmp_ok $status, '==', Z_OK ; - + cmp_ok $x->flush($Answer), '==', Z_OK ; - + my @Answer = split('', $Answer) ; - # Undocumented corner -- extra byte needed to get inflate to return - # Z_STREAM_END when done. - push @Answer, " " ; - + # Undocumented corner -- extra byte needed to get inflate to return + # Z_STREAM_END when done. + push @Answer, " " ; + my $k; - ok(($k, $err) = new Compress::Raw::Zlib::Inflate( - {-Bufsize => 1, + ok(($k, $err) = new Compress::Raw::Zlib::Inflate( + {-Bufsize => 1, -AppendOutput =>1, -WindowBits => -MAX_WBITS()})) ; ok $k ; cmp_ok $err, '==', Z_OK ; - + my $GOT = ''; foreach (@Answer) { $status = $k->inflate($_, $GOT) ; last if $status == Z_STREAM_END or $status != Z_OK ; - + } - + cmp_ok $status, '==', Z_STREAM_END ; is $GOT, $hello ; - + } SKIP: { title 'inflateSync'; - skip "inflateSync needs zlib 1.2.1 or better, you have $Zlib_ver", 22 + skip "inflateSync needs zlib 1.2.1 or better, you have $Zlib_ver", 22 if ZLIB_VERNUM() < 0x1210 ; # create a deflate stream with flush points @@ -444,31 +444,31 @@ SKIP: my $goodbye = "Will I dream?" x 2010; my ($x, $err, $answer, $X, $Z, $status); my $Answer ; - + #use Devel::Peek ; ok(($x, $err) = new Compress::Raw::Zlib::Deflate(AppendOutput => 1)) ; ok $x ; cmp_ok $err, '==', Z_OK ; - + cmp_ok $x->deflate($hello, $Answer), '==', Z_OK; - + # create a flush point cmp_ok $x->flush($Answer, Z_FULL_FLUSH), '==', Z_OK ; - + my $len1 = length $Answer; - + cmp_ok $x->deflate($goodbye, $Answer), '==', Z_OK; - + cmp_ok $x->flush($Answer), '==', Z_OK ; my $len2 = length($Answer) - $len1 ; - + my ($first, @Answer) = split('', $Answer) ; - + my $k; ok(($k, $err) = new Compress::Raw::Zlib::Inflate()) ; ok $k ; cmp_ok $err, '==', Z_OK ; - + cmp_ok $k->inflate($first, $Z), '==', Z_OK; # skip to the first flush point. @@ -480,7 +480,7 @@ SKIP: } cmp_ok $status, '==', Z_OK; - + my $GOT = ''; foreach (@Answer) { @@ -503,29 +503,30 @@ SKIP: is $GOT, $goodbye ; + # Check inflateSync leaves good data in buffer my $rest = $Answer ; $rest =~ s/^(.)//; my $initial = $1 ; - + ok(($k, $err) = new Compress::Raw::Zlib::Inflate(ConsumeInput => 0)) ; ok $k ; cmp_ok $err, '==', Z_OK ; - + cmp_ok $k->inflate($initial, $Z), '==', Z_OK; # Skip to the flush point $status = $k->inflateSync($rest); cmp_ok $status, '==', Z_OK or diag "status '$status'\nlength rest is " . length($rest) . "\n" ; - + is length($rest), $len2, "expected compressed output"; - - $GOT = ''; + + $GOT = ''; $status = $k->inflate($rest, $GOT); # Z_STREAM_END returned by 1.12.2, Z_DATA_ERROR for older zlib - if (ZLIB_VERNUM >= ZLIB_1_2_12_0) + if (ZLIB_VERNUM >= ZLIB_1_2_12_0 ) { cmp_ok $status, '==', Z_STREAM_END ; } @@ -543,7 +544,7 @@ SKIP: my $hello = "I am a HAL 9000 computer" x 2001 ; my $goodbye = "Will I dream?" x 2010; my ($x, $input, $err, $answer, $X, $status, $Answer); - + ok(($x, $err) = new Compress::Raw::Zlib::Deflate( -AppendOutput => 1, -Level => Z_DEFAULT_COMPRESSION, @@ -553,11 +554,11 @@ SKIP: ok $x->get_Level() == Z_DEFAULT_COMPRESSION; ok $x->get_Strategy() == Z_DEFAULT_STRATEGY; - + $status = $x->deflate($hello, $Answer) ; cmp_ok $status, '==', Z_OK ; $input .= $hello; - + # error cases eval { $x->deflateParams() }; like $@, mkErr('^Compress::Raw::Zlib::deflateParams needs Level and\/or Strategy'); @@ -570,54 +571,54 @@ SKIP: is $x->get_Level(), Z_DEFAULT_COMPRESSION; is $x->get_Strategy(), Z_DEFAULT_STRATEGY; - + # change both Level & Strategy $status = $x->deflateParams(-Level => Z_BEST_SPEED, -Strategy => Z_HUFFMAN_ONLY, -Bufsize => 1234) ; cmp_ok $status, '==', Z_OK ; - + is $x->get_Level(), Z_BEST_SPEED; is $x->get_Strategy(), Z_HUFFMAN_ONLY; - - # change both Level & Strategy again without any calls to deflate + + # change both Level & Strategy again without any calls to deflate $status = $x->deflateParams(-Level => Z_DEFAULT_COMPRESSION, -Strategy => Z_DEFAULT_STRATEGY, -Bufsize => 1234) ; cmp_ok $status, '==', Z_OK ; - + is $x->get_Level(), Z_DEFAULT_COMPRESSION; is $x->get_Strategy(), Z_DEFAULT_STRATEGY; - + $status = $x->deflate($goodbye, $Answer) ; cmp_ok $status, '==', Z_OK ; $input .= $goodbye; - - # change only Level + + # change only Level $status = $x->deflateParams(-Level => Z_NO_COMPRESSION) ; cmp_ok $status, '==', Z_OK ; - + is $x->get_Level(), Z_NO_COMPRESSION; is $x->get_Strategy(), Z_DEFAULT_STRATEGY; - + $status = $x->deflate($goodbye, $Answer) ; cmp_ok $status, '==', Z_OK ; $input .= $goodbye; - + # change only Strategy $status = $x->deflateParams(-Strategy => Z_FILTERED) ; cmp_ok $status, '==', Z_OK ; - + is $x->get_Level(), Z_NO_COMPRESSION; is $x->get_Strategy(), Z_FILTERED; - + $status = $x->deflate($goodbye, $Answer) ; cmp_ok $status, '==', Z_OK ; $input .= $goodbye; - + cmp_ok $x->flush($Answer), '==', Z_OK ; - + my $k; ok(($k, $err) = new Compress::Raw::Zlib::Inflate()) ; ok $k ; cmp_ok $err, '==', Z_OK ; - + my $Z; $status = $k->inflate($Answer, $Z) ; @@ -630,8 +631,8 @@ SKIP: title "ConsumeInput and a read-only buffer trapped" ; ok my $k = new Compress::Raw::Zlib::Inflate(-ConsumeInput => 1) ; - - my $Z; + + my $Z; eval { $k->inflate("abc", $Z) ; }; like $@, mkErr("Compress::Raw::Zlib::Inflate::inflate input parameter cannot be read-only when ConsumeInput is specified"); @@ -647,22 +648,22 @@ foreach (1 .. 2) foreach (1 .. 5000) { $contents .= chr int rand 255 } ok my $x = new Compress::Raw::Zlib::Deflate(-AppendOutput => 1) ; - + my $X ; my $status = $x->deflate(substr($contents,0), $X); cmp_ok $status, '==', Z_OK ; - + cmp_ok $x->flush($X), '==', Z_OK ; - + my $append = "Appended" ; $X .= $append ; - + ok my $k = new Compress::Raw::Zlib::Inflate(-AppendOutput => 1) ; - - my $Z; + + my $Z; my $keep = $X ; $status = $k->inflate(substr($X, 0), $Z) ; - + cmp_ok $status, '==', Z_STREAM_END ; #print "status $status X [$X]\n" ; is $contents, $Z ; @@ -678,34 +679,34 @@ foreach (1 .. 2) my $hello = "I am a HAL 9000 computer" ; my @hello = split('', $hello) ; - my ($err, $x, $X, $status); - + my ($err, $x, $X, $status); + ok( ($x, $err) = new Compress::Raw::Zlib::Deflate ( -Bufsize => 1 ) ); ok $x ; cmp_ok $err, '==', Z_OK ; - + $X = "" ; my $Answer = ''; foreach (@hello) { $status = $x->deflate($_, $X) ; last unless $status == Z_OK ; - + $Answer .= $X ; } - + cmp_ok $status, '==', Z_OK ; - + cmp_ok $x->flush($X), '==', Z_OK ; $Answer .= $X ; - + my @Answer = split('', $Answer) ; - + my $k; ok(($k, $err) = new Compress::Raw::Zlib::Inflate(-AppendOutput => 1) ); ok $k ; cmp_ok $err, '==', Z_OK ; - + my $GOT ; my $Z; $Z = 1 ;#x 2000 ; @@ -714,7 +715,7 @@ foreach (1 .. 2) $status = $k->inflate($_, $GOT) ; last if $status == Z_STREAM_END or $status != Z_OK ; } - + cmp_ok $status, '==', Z_STREAM_END ; is $GOT, $hello ; @@ -734,35 +735,134 @@ if ($] >= 5.005) cmp_ok $x->deflate($data, $X), '==', Z_OK ; cmp_ok $x->flush($X), '==', Z_OK ; - + my $append = "Appended" ; $X .= $append ; my $keep = $X ; - + ok my $k = new Compress::Raw::Zlib::Inflate ( -AppendOutput => 1, -ConsumeInput => 1 ) ; - + cmp_ok $k->inflate(substr($X, 0, -1), $Z), '==', Z_STREAM_END ; ; - + ok $hello eq $Z ; is $X, $append; - + $X = $keep ; $Z = ''; ok $k = new Compress::Raw::Zlib::Inflate ( -AppendOutput => 1, -ConsumeInput => 0 ) ; - + cmp_ok $k->inflate(substr($X, 0, -1), $Z), '==', Z_STREAM_END ; ; #cmp_ok $k->inflate(substr($X, 0), $Z), '==', Z_STREAM_END ; ; - + ok $hello eq $Z ; is $X, $keep; - + +} + +{ + title 'RT#132734: test inflate append OOK output parameter'; + # https://github.com/pmqs/Compress-Raw-Zlib/issues/3 + + my $hello = "I am a HAL 9000 computer" ; + my $data = $hello ; + + my($X, $Z); + + ok my $x = new Compress::Raw::Zlib::Deflate ( -AppendOutput => 1 ); + + cmp_ok $x->deflate($data, $X), '==', Z_OK ; + + cmp_ok $x->flush($X), '==', Z_OK ; + + ok my $k = new Compress::Raw::Zlib::Inflate ( -AppendOutput => 1, + -ConsumeInput => 1 ) ; + $Z = 'prev. ' ; + substr($Z, 0, 4, ''); # chop off first 4 characters using offset + cmp_ok $Z, 'eq', '. ' ; + + # use Devel::Peek ; Dump($Z) ; # shows OOK flag + + # if (1) { # workaround + # my $prev = $Z; + # undef $Z ; + # $Z = $prev ; + # } + + cmp_ok $k->inflate($X, $Z), '==', Z_STREAM_END ; + # use Devel::Peek ; Dump($Z) ; # No OOK flag + + cmp_ok $Z, 'eq', ". $hello" ; +} + + +{ + title 'RT#132734: test deflate append OOK output parameter'; + # https://github.com/pmqs/Compress-Raw-Zlib/issues/3 + + my $hello = "I am a HAL 9000 computer" ; + my $data = $hello ; + + my($X, $Z); + + $X = 'prev. ' ; + substr($X, 0, 6, ''); # chop off all characters using offset + cmp_ok $X, 'eq', '' ; + + # use Devel::Peek ; Dump($X) ; # shows OOK flag + + # if (1) { # workaround + # my $prev = $Z; + # undef $Z ; + # $Z = $prev ; + # } + + ok my $x = new Compress::Raw::Zlib::Deflate ( -AppendOutput => 1 ); + + cmp_ok $x->deflate($data, $X), '==', Z_OK ; + + cmp_ok $x->flush($X), '==', Z_OK ; + + ok my $k = new Compress::Raw::Zlib::Inflate ( -AppendOutput => 1, + -ConsumeInput => 1 ) ; + cmp_ok $k->inflate($X, $Z), '==', Z_STREAM_END ; + + is $Z, $hello ; +} + + +{ + title 'RT#132734: test flush append OOK output parameter'; + # https://github.com/pmqs/Compress-Raw-Zlib/issues/3 + + my $hello = "I am a HAL 9000 computer" ; + my $data = $hello ; + + my($X, $Z); + + my $F = 'prev. ' ; + substr($F, 0, 6, ''); # chop off all characters using offset + cmp_ok $F, 'eq', '' ; + + # use Devel::Peek ; Dump($F) ; # shows OOK flag + + ok my $x = new Compress::Raw::Zlib::Deflate ( -AppendOutput => 1 ); + + cmp_ok $x->deflate($data, $X), '==', Z_OK ; + + cmp_ok $x->flush($F), '==', Z_OK ; + + ok my $k = new Compress::Raw::Zlib::Inflate ( -AppendOutput => 1, + -ConsumeInput => 1 ) ; + cmp_ok $k->inflate($X . $F, $Z), '==', Z_STREAM_END ; + + is $Z, $hello ; } SKIP: { - skip "InflateScan needs zlib 1.2.1 or better, you have $Zlib_ver", 1 + skip "InflateScan needs zlib 1.2.1 or better, you have $Zlib_ver", 1 if ZLIB_VERNUM() < 0x1210 ; # regression - check that resetLastBlockByte can cope with a NULL @@ -777,44 +877,44 @@ SKIP: title "gzip mode"; # ================ - skip "gzip mode needs zlib 1.2.1 or better, you have $Zlib_ver", 13 + skip "gzip mode needs zlib 1.2.1 or better, you have $Zlib_ver", 13 if ZLIB_VERNUM() < 0x1210 ; my $hello = "I am a HAL 9000 computer" ; my @hello = split('', $hello) ; - my ($err, $x, $X, $status); - - ok( ($x, $err) = new Compress::Raw::Zlib::Deflate ( + my ($err, $x, $X, $status); + + ok( ($x, $err) = new Compress::Raw::Zlib::Deflate ( WindowBits => WANT_GZIP , AppendOutput => 1 ), "Create deflate object" ); ok $x, "Compress::Raw::Zlib::Deflate ok" ; cmp_ok $err, '==', Z_OK, "status is Z_OK" ; - + $status = $x->deflate($hello, $X) ; cmp_ok $status, '==', Z_OK, "deflate returned Z_OK" ; - + cmp_ok $x->flush($X), '==', Z_OK, "flush returned Z_OK" ; - - my ($k, $GOT); - ($k, $err) = new Compress::Raw::Zlib::Inflate( + + my ($k, $GOT); + ($k, $err) = new Compress::Raw::Zlib::Inflate( WindowBits => WANT_GZIP , ConsumeInput => 0 , AppendOutput => 1); ok $k, "Compress::Raw::Zlib::Inflate WANT_GZIP ok" ; cmp_ok $err, '==', Z_OK, "status is Z_OK" ; - + $status = $k->inflate($X, $GOT) ; cmp_ok $status, '==', Z_STREAM_END, "Got Z_STREAM_END" ; is $GOT, $hello, "uncompressed data matches ok" ; $GOT = ''; - ($k, $err) = new Compress::Raw::Zlib::Inflate( + ($k, $err) = new Compress::Raw::Zlib::Inflate( WindowBits => WANT_GZIP_OR_ZLIB , AppendOutput => 1); ok $k, "Compress::Raw::Zlib::Inflate WANT_GZIP_OR_ZLIB ok" ; cmp_ok $err, '==', Z_OK, "status is Z_OK" ; - + $status = $k->inflate($X, $GOT) ; cmp_ok $status, '==', Z_STREAM_END, "Got Z_STREAM_END" ; is $GOT, $hello, "uncompressed data matches ok" ; @@ -829,42 +929,42 @@ SKIP: # then read with WANT_GZIP_OR_ZLIB - thi swill work # ================ - skip "gzip mode needs zlib 1.2.1 or better, you have $Zlib_ver", 12 + skip "gzip mode needs zlib 1.2.1 or better, you have $Zlib_ver", 12 if ZLIB_VERNUM() < 0x1210 ; my $hello = "I am a HAL 9000 computer" ; - my ($err, $x, $X, $status); - - ok( ($x, $err) = new Compress::Raw::Zlib::Deflate ( + my ($err, $x, $X, $status); + + ok( ($x, $err) = new Compress::Raw::Zlib::Deflate ( WindowBits => WANT_GZIP , AppendOutput => 1 ), "Create deflate object" ); ok $x, "Compress::Raw::Zlib::Deflate ok" ; cmp_ok $err, '==', Z_OK, "status is Z_OK" ; - + $status = $x->deflate($hello, $X) ; cmp_ok $status, '==', Z_OK, "deflate returned Z_OK" ; - + cmp_ok $x->flush($X), '==', Z_OK, "flush returned Z_OK" ; - - my ($k, $GOT); - ($k, $err) = new Compress::Raw::Zlib::Inflate( + + my ($k, $GOT); + ($k, $err) = new Compress::Raw::Zlib::Inflate( WindowBits => MAX_WBITS , ConsumeInput => 0 , AppendOutput => 1); ok $k, "Compress::Raw::Zlib::Inflate WANT_GZIP ok" ; cmp_ok $err, '==', Z_OK, "status is Z_OK" ; - + $status = $k->inflate($X, $GOT) ; cmp_ok $status, '==', Z_DATA_ERROR, "Got Z_DATA_ERROR" ; $GOT = ''; - ($k, $err) = new Compress::Raw::Zlib::Inflate( + ($k, $err) = new Compress::Raw::Zlib::Inflate( WindowBits => WANT_GZIP_OR_ZLIB , AppendOutput => 1); ok $k, "Compress::Raw::Zlib::Inflate WANT_GZIP_OR_ZLIB ok" ; cmp_ok $err, '==', Z_OK, "status is Z_OK" ; - + $status = $k->inflate($X, $GOT) ; cmp_ok $status, '==', Z_STREAM_END, "Got Z_STREAM_END" ; is $GOT, $hello, "uncompressed data matches ok" ; @@ -878,41 +978,41 @@ SKIP: # then read with WANT_GZIP_OR_ZLIB - thi swill work # ================ - skip "gzip mode needs zlib 1.2.1 or better, you have $Zlib_ver", 12 + skip "gzip mode needs zlib 1.2.1 or better, you have $Zlib_ver", 12 if ZLIB_VERNUM() < 0x1210 ; my $hello = "I am a HAL 9000 computer" ; - my ($err, $x, $X, $status); - - ok( ($x, $err) = new Compress::Raw::Zlib::Deflate ( + my ($err, $x, $X, $status); + + ok( ($x, $err) = new Compress::Raw::Zlib::Deflate ( AppendOutput => 1 ), "Create deflate object" ); ok $x, "Compress::Raw::Zlib::Deflate ok" ; cmp_ok $err, '==', Z_OK, "status is Z_OK" ; - + $status = $x->deflate($hello, $X) ; cmp_ok $status, '==', Z_OK, "deflate returned Z_OK" ; - + cmp_ok $x->flush($X), '==', Z_OK, "flush returned Z_OK" ; - - my ($k, $GOT); - ($k, $err) = new Compress::Raw::Zlib::Inflate( + + my ($k, $GOT); + ($k, $err) = new Compress::Raw::Zlib::Inflate( WindowBits => WANT_GZIP , ConsumeInput => 0 , AppendOutput => 1); ok $k, "Compress::Raw::Zlib::Inflate WANT_GZIP ok" ; cmp_ok $err, '==', Z_OK, "status is Z_OK" ; - + $status = $k->inflate($X, $GOT) ; cmp_ok $status, '==', Z_DATA_ERROR, "Got Z_DATA_ERROR" ; $GOT = ''; - ($k, $err) = new Compress::Raw::Zlib::Inflate( + ($k, $err) = new Compress::Raw::Zlib::Inflate( WindowBits => WANT_GZIP_OR_ZLIB , AppendOutput => 1); ok $k, "Compress::Raw::Zlib::Inflate WANT_GZIP_OR_ZLIB ok" ; cmp_ok $err, '==', Z_OK, "status is Z_OK" ; - + $status = $k->inflate($X, $GOT) ; cmp_ok $status, '==', Z_STREAM_END, "Got Z_STREAM_END" ; is $GOT, $hello, "uncompressed data matches ok" ; @@ -937,17 +1037,17 @@ SKIP: title "repeated calls to flush after some compression"; my $hello = "I am a HAL 9000 computer" ; - my ($err, $x, $X, $status); - + my ($err, $x, $X, $status); + ok( ($x, $err) = new Compress::Raw::Zlib::Deflate ( ), "Create deflate object" ); isa_ok $x, "Compress::Raw::Zlib::deflateStream" ; cmp_ok $err, '==', Z_OK, "status is Z_OK" ; - + $status = $x->deflate($hello, $X) ; cmp_ok $status, '==', Z_OK, "deflate returned Z_OK" ; - - cmp_ok $x->flush($X, Z_SYNC_FLUSH), '==', Z_OK, "flush returned Z_OK" ; - cmp_ok $x->flush($X, Z_SYNC_FLUSH), '==', Z_OK, "second flush returned Z_OK" ; + + cmp_ok $x->flush($X, Z_SYNC_FLUSH), '==', Z_OK, "flush returned Z_OK" ; + cmp_ok $x->flush($X, Z_SYNC_FLUSH), '==', Z_OK, "second flush returned Z_OK" ; is $X, "", "no output from second flush"; } @@ -955,14 +1055,14 @@ SKIP: title "repeated calls to flush - no compression"; my $hello = "I am a HAL 9000 computer" ; - my ($err, $x, $X, $status); - + my ($err, $x, $X, $status); + ok( ($x, $err) = new Compress::Raw::Zlib::Deflate ( ), "Create deflate object" ); isa_ok $x, "Compress::Raw::Zlib::deflateStream" ; cmp_ok $err, '==', Z_OK, "status is Z_OK" ; - - cmp_ok $x->flush($X, Z_SYNC_FLUSH), '==', Z_OK, "flush returned Z_OK" ; - cmp_ok $x->flush($X, Z_SYNC_FLUSH), '==', Z_OK, "second flush returned Z_OK" ; + + cmp_ok $x->flush($X, Z_SYNC_FLUSH), '==', Z_OK, "flush returned Z_OK" ; + cmp_ok $x->flush($X, Z_SYNC_FLUSH), '==', Z_OK, "second flush returned Z_OK" ; is $X, "", "no output from second flush"; } @@ -977,19 +1077,59 @@ SKIP: } +SKIP: +{ + title "crc32_combine"; + + skip "crc32_combine needs zlib 1.2.3 or better, you have $Zlib_ver", 1 + if ZLIB_VERNUM() < 0x1230 ; + + my $first = "1234"; + my $second = "5678"; + + my $crc1 = Compress::Raw::Zlib::crc32($first); + my $crc2 = Compress::Raw::Zlib::crc32($second); + + my $composite_crc = Compress::Raw::Zlib::crc32($first . $second); + + my $combined_crc = Compress::Raw::Zlib::crc32_combine($crc1, $crc2, length $second); + + is $combined_crc, $composite_crc ; +} + +SKIP: +{ + title "adler32_combine"; + + skip "adler32_combine needs zlib 1.2.3 or better, you have $Zlib_ver", 1 + if ZLIB_VERNUM() < 0x1230 ; + + my $first = "1234"; + my $second = "5678"; + + my $adler1 = Compress::Raw::Zlib::adler32($first); + my $adler2 = Compress::Raw::Zlib::adler32($second); + + my $composite_adler = Compress::Raw::Zlib::adler32($first . $second); + + my $combined_adler = Compress::Raw::Zlib::adler32_combine($adler1, $adler2, length $second); + + is $combined_adler, $composite_adler ; +} + if (0) { title "RT #122695: sync flush appending extra empty uncompressed block"; my $hello = "I am a HAL 9000 computer" ; - my ($err, $x, $X, $status); - + my ($err, $x, $X, $status); + ok( ($x, $err) = new Compress::Raw::Zlib::Deflate ( ), "Create deflate object" ); isa_ok $x, "Compress::Raw::Zlib::deflateStream" ; cmp_ok $err, '==', Z_OK, "status is Z_OK" ; - - cmp_ok $x->flush($X, Z_SYNC_FLUSH), '==', Z_OK, "flush returned Z_OK" ; - cmp_ok $x->flush($X, Z_SYNC_FLUSH), '==', Z_OK, "second flush returned Z_OK" ; + + cmp_ok $x->flush($X, Z_SYNC_FLUSH), '==', Z_OK, "flush returned Z_OK" ; + cmp_ok $x->flush($X, Z_SYNC_FLUSH), '==', Z_OK, "second flush returned Z_OK" ; is $X, "", "no output from second flush"; } @@ -1001,36 +1141,36 @@ foreach (1 .. 2) my $hello = "I am a HAL 9000 computer" ; my @hello = split('', $hello) ; - my ($err, $x, $X, $status); - + my ($err, $x, $X, $status); + ok( ($x, $err) = new Compress::Raw::Zlib::Deflate ( -Bufsize => 1, -AppendOutput => 1 ) ); ok $x ; cmp_ok $err, '==', Z_OK ; - + $X = "" ; my $Answer = ''; foreach (@hello) { $status = $x->deflate($_, substr($Answer, length($Answer))) ; last unless $status == Z_OK ; - + } - + cmp_ok $status, '==', Z_OK ; - + cmp_ok $x->flush(substr($Answer, length($Answer))), '==', Z_OK ; - + #cmp_ok length $Answer, ">", 0 ; my @Answer = split('', $Answer) ; - - + + my $k; ok(($k, $err) = new Compress::Raw::Zlib::Inflate(-AppendOutput => 1) ); ok $k ; cmp_ok $err, '==', Z_OK ; - + my $GOT = ''; my $Z; $Z = 1 ;#x 2000 ; @@ -1039,7 +1179,7 @@ foreach (1 .. 2) $status = $k->inflate($_, substr($GOT, length($GOT))) ; last if $status == Z_STREAM_END or $status != Z_OK ; } - + cmp_ok $status, '==', Z_STREAM_END ; is $GOT, $hello ; @@ -1051,33 +1191,33 @@ foreach (1 .. 2) my $hello = "I am a HAL 9000 computer" ; my @hello = split('', $hello) ; - my ($err, $x, $X, $status); - + my ($err, $x, $X, $status); + ok( ($x, $err) = new Compress::Raw::Zlib::Deflate ( -Bufsize => 1, -AppendOutput => 1 ) ); ok $x ; cmp_ok $err, '==', Z_OK ; - + $X = "" ; my $Answer = ''; foreach (@hello) { $status = $x->deflate($_, substr($Answer, 0)) ; last unless $status == Z_OK ; - + } - + cmp_ok $status, '==', Z_OK ; - + cmp_ok $x->flush(substr($Answer, 0)), '==', Z_OK ; - + my @Answer = split('', $Answer) ; - + my $k; ok(($k, $err) = new Compress::Raw::Zlib::Inflate(-AppendOutput => 1) ); ok $k ; cmp_ok $err, '==', Z_OK ; - + my $GOT = ''; my $Z; $Z = 1 ;#x 2000 ; @@ -1086,8 +1226,7 @@ foreach (1 .. 2) $status = $k->inflate($_, substr($GOT, 0)) ; last if $status == Z_STREAM_END or $status != Z_OK ; } - + cmp_ok $status, '==', Z_STREAM_END ; is $GOT, $hello ; } - diff --git a/gnu/usr.bin/perl/cpan/Compress-Raw-Zlib/t/07bufsize.t b/gnu/usr.bin/perl/cpan/Compress-Raw-Zlib/t/07bufsize.t index 9768ffd7707..46608eab2c3 100755 --- a/gnu/usr.bin/perl/cpan/Compress-Raw-Zlib/t/07bufsize.t +++ b/gnu/usr.bin/perl/cpan/Compress-Raw-Zlib/t/07bufsize.t @@ -13,13 +13,13 @@ use bytes; use Test::More ; use CompTestUtils; -BEGIN -{ +BEGIN +{ plan skip_all => "Lengthy Tests Disabled\n" . "set COMPRESS_ZLIB_RUN_ALL or COMPRESS_ZLIB_RUN_MOST to run this test suite" unless defined $ENV{COMPRESS_ZLIB_RUN_ALL} or defined $ENV{COMPRESS_ZLIB_RUN_MOST}; - + # use Test::NoWarnings, if available my $extra = 0 ; $extra = 1 @@ -27,7 +27,7 @@ BEGIN plan tests => 288 + $extra ; - use_ok('Compress::Raw::Zlib', 2) ; + use_ok('Compress::Raw::Zlib', 2) ; } @@ -40,7 +40,7 @@ my $len = length $hello ; # Check zlib_version and ZLIB_VERSION are the same. SKIP: { - skip "TEST_SKIP_VERSION_CHECK is set", 1 + skip "TEST_SKIP_VERSION_CHECK is set", 1 if $ENV{TEST_SKIP_VERSION_CHECK}; is Compress::Raw::Zlib::zlib_version, ZLIB_VERSION, "ZLIB_VERSION matches Compress::Raw::Zlib::zlib_version" ; @@ -54,18 +54,18 @@ for my $i (1 .. 13) my $hello = "I am a HAL 9000 computer" x 2001; my $tmp = $hello ; - + my @hello = (); - push @hello, $1 + push @hello, $1 while $tmp =~ s/^(.{$i})//; push @hello, $tmp if length $tmp ; - my ($err, $x, $X, $status); - + my ($err, $x, $X, $status); + ok( ($x, $err) = new Compress::Raw::Zlib::Deflate (-AppendOutput => 1)); ok $x ; cmp_ok $err, '==', Z_OK, " status is Z_OK" ; - + ok ! defined $x->msg(), " no msg" ; is $x->total_in(), 0, " total_in == 0" ; is $x->total_out(), 0, " total_out == 0" ; @@ -75,26 +75,26 @@ for my $i (1 .. 13) { $status = $x->deflate($_, $out) ; last unless $status == Z_OK ; - + } cmp_ok $status, '==', Z_OK, " status is Z_OK" ; - + cmp_ok $x->flush($out), '==', Z_OK, " flush returned Z_OK" ; - + ok ! defined $x->msg(), " no msg" ; is $x->total_in(), length $hello, " length total_in" ; is $x->total_out(), length $out, " length total_out" ; - + my @Answer = (); $tmp = $out; push @Answer, $1 while $tmp =~ s/^(.{$i})//; push @Answer, $tmp if length $tmp ; - + my $k; ok(($k, $err) = new Compress::Raw::Zlib::Inflate( -AppendOutput => 1)); ok $k ; cmp_ok $err, '==', Z_OK, " status is Z_OK" ; - + ok ! defined $k->msg(), " no msg" ; is $k->total_in(), 0, " total_in == 0" ; is $k->total_out(), 0, " total_out == 0" ; @@ -105,9 +105,9 @@ for my $i (1 .. 13) { $status = $k->inflate($_, $GOT) ; last if $status == Z_STREAM_END or $status != Z_OK ; - + } - + cmp_ok $status, '==', Z_STREAM_END, " status is Z_STREAM_END" ; is $GOT, $hello, " got expected output" ; ok ! defined $k->msg(), " no msg" ; diff --git a/gnu/usr.bin/perl/cpan/Compress-Raw-Zlib/zlib-src/crc32.c b/gnu/usr.bin/perl/cpan/Compress-Raw-Zlib/zlib-src/crc32.c index 3e3eb179474..89b8c321955 100644 --- a/gnu/usr.bin/perl/cpan/Compress-Raw-Zlib/zlib-src/crc32.c +++ b/gnu/usr.bin/perl/cpan/Compress-Raw-Zlib/zlib-src/crc32.c @@ -1,12 +1,10 @@ /* crc32.c -- compute the CRC-32 of a data stream - * Copyright (C) 1995-2006, 2010, 2011, 2012, 2016 Mark Adler + * Copyright (C) 1995-2022 Mark Adler * For conditions of distribution and use, see copyright notice in zlib.h * - * Thanks to Rodney Brown for his contribution of faster - * CRC methods: exclusive-oring 32 bits of data at a time, and pre-computing - * tables for updating the shift register in one step with three exclusive-ors - * instead of four steps with four exclusive-ors. This results in about a - * factor of two increase in speed on a Power PC G4 (PPC7455) using gcc -O3. + * This interleaved implementation of a CRC makes use of pipelined multiple + * arithmetic-logic units, commonly found in modern CPU cores. It is due to + * Kadatch and Jenkins (2010). See doc/crc-doc.1.0.pdf in this distribution. */ /* @(#) $Id$ */ @@ -14,11 +12,12 @@ /* Note on the use of DYNAMIC_CRC_TABLE: there is no mutex or semaphore protection on the static variables used to control the first-use generation - of the crc tables. Therefore, if you #define DYNAMIC_CRC_TABLE, you should + of the crc tables. Therefore, if you #define DYNAMIC_CRC_TABLE, you should first call get_crc_table() to initialize the tables before allowing more than one thread to use crc32(). - DYNAMIC_CRC_TABLE and MAKECRCH can be #defined to write out crc32.h. + MAKECRCH can be #defined to write out crc32.h. A main() routine is also + produced, so that this one source file can be compiled to an executable. */ #ifdef MAKECRCH @@ -28,415 +27,1090 @@ # endif /* !DYNAMIC_CRC_TABLE */ #endif /* MAKECRCH */ -#include "zutil.h" /* for STDC and FAR definitions */ +#include "zutil.h" /* for Z_U4, Z_U8, z_crc_t, and FAR definitions */ -/* Definitions for doing the crc four data bytes at a time. */ -#if !defined(NOBYFOUR) && defined(Z_U4) -# define BYFOUR + /* + A CRC of a message is computed on N braids of words in the message, where + each word consists of W bytes (4 or 8). If N is 3, for example, then three + running sparse CRCs are calculated respectively on each braid, at these + indices in the array of words: 0, 3, 6, ..., 1, 4, 7, ..., and 2, 5, 8, ... + This is done starting at a word boundary, and continues until as many blocks + of N * W bytes as are available have been processed. The results are combined + into a single CRC at the end. For this code, N must be in the range 1..6 and + W must be 4 or 8. The upper limit on N can be increased if desired by adding + more #if blocks, extending the patterns apparent in the code. In addition, + crc32.h would need to be regenerated, if the maximum N value is increased. + + N and W are chosen empirically by benchmarking the execution time on a given + processor. The choices for N and W below were based on testing on Intel Kaby + Lake i7, AMD Ryzen 7, ARM Cortex-A57, Sparc64-VII, PowerPC POWER9, and MIPS64 + Octeon II processors. The Intel, AMD, and ARM processors were all fastest + with N=5, W=8. The Sparc, PowerPC, and MIPS64 were all fastest at N=5, W=4. + They were all tested with either gcc or clang, all using the -O3 optimization + level. Your mileage may vary. + */ + +/* Define N */ +#ifdef Z_TESTN +# define N Z_TESTN +#else +# define N 5 +#endif +#if N < 1 || N > 6 +# error N must be in 1..6 #endif -#ifdef BYFOUR - local unsigned long crc32_little OF((unsigned long, - const unsigned char FAR *, z_size_t)); - local unsigned long crc32_big OF((unsigned long, - const unsigned char FAR *, z_size_t)); -# define TBLS 8 + +/* + z_crc_t must be at least 32 bits. z_word_t must be at least as long as + z_crc_t. It is assumed here that z_word_t is either 32 bits or 64 bits, and + that bytes are eight bits. + */ + +/* + Define W and the associated z_word_t type. If W is not defined, then a + braided calculation is not used, and the associated tables and code are not + compiled. + */ +#ifdef Z_TESTW +# if Z_TESTW-1 != -1 +# define W Z_TESTW +# endif #else -# define TBLS 1 -#endif /* BYFOUR */ +# ifdef MAKECRCH +# define W 8 /* required for MAKECRCH */ +# else +# if defined(__x86_64__) || defined(__aarch64__) +# define W 8 +# else +# define W 4 +# endif +# endif +#endif +#ifdef W +# if W == 8 && defined(Z_U8) + typedef Z_U8 z_word_t; +# elif defined(Z_U4) +# undef W +# define W 4 + typedef Z_U4 z_word_t; +# else +# undef W +# endif +#endif -/* Local functions for crc concatenation */ -local unsigned long gf2_matrix_times OF((unsigned long *mat, - unsigned long vec)); -local void gf2_matrix_square OF((unsigned long *square, unsigned long *mat)); -local uLong crc32_combine_ OF((uLong crc1, uLong crc2, z_off64_t len2)); +/* Local functions. */ +local z_crc_t multmodp OF((z_crc_t a, z_crc_t b)); +local z_crc_t x2nmodp OF((z_off64_t n, unsigned k)); + +/* If available, use the ARM processor CRC32 instruction. */ +#if defined(__aarch64__) && defined(__ARM_FEATURE_CRC32) && W == 8 +# define ARMCRC32 +#endif + +#if defined(W) && (!defined(ARMCRC32) || defined(DYNAMIC_CRC_TABLE)) +/* + Swap the bytes in a z_word_t to convert between little and big endian. Any + self-respecting compiler will optimize this to a single machine byte-swap + instruction, if one is available. This assumes that word_t is either 32 bits + or 64 bits. + */ +local z_word_t byte_swap( + z_word_t word) +{ +# if W == 8 + return + (word & 0xff00000000000000) >> 56 | + (word & 0xff000000000000) >> 40 | + (word & 0xff0000000000) >> 24 | + (word & 0xff00000000) >> 8 | + (word & 0xff000000) << 8 | + (word & 0xff0000) << 24 | + (word & 0xff00) << 40 | + (word & 0xff) << 56; +# else /* W == 4 */ + return + (word & 0xff000000) >> 24 | + (word & 0xff0000) >> 8 | + (word & 0xff00) << 8 | + (word & 0xff) << 24; +# endif +} +#endif +/* CRC polynomial. */ +#define POLY 0xedb88320 /* p(x) reflected, with x^32 implied */ #ifdef DYNAMIC_CRC_TABLE -local volatile int crc_table_empty = 1; -local z_crc_t FAR crc_table[TBLS][256]; +local z_crc_t FAR crc_table[256]; +local z_crc_t FAR x2n_table[32]; local void make_crc_table OF((void)); +#ifdef W + local z_word_t FAR crc_big_table[256]; + local z_crc_t FAR crc_braid_table[W][256]; + local z_word_t FAR crc_braid_big_table[W][256]; + local void braid OF((z_crc_t [][256], z_word_t [][256], int, int)); +#endif #ifdef MAKECRCH - local void write_table OF((FILE *, const z_crc_t FAR *)); + local void write_table OF((FILE *, const z_crc_t FAR *, int)); + local void write_table32hi OF((FILE *, const z_word_t FAR *, int)); + local void write_table64 OF((FILE *, const z_word_t FAR *, int)); #endif /* MAKECRCH */ + +/* + Define a once() function depending on the availability of atomics. If this is + compiled with DYNAMIC_CRC_TABLE defined, and if CRCs will be computed in + multiple threads, and if atomics are not available, then get_crc_table() must + be called to initialize the tables and must return before any threads are + allowed to compute or combine CRCs. + */ + +/* Definition of once functionality. */ +typedef struct once_s once_t; +local void once OF((once_t *, void (*)(void))); + +/* Check for the availability of atomics. */ +#if defined(__STDC__) && __STDC_VERSION__ >= 201112L && \ + !defined(__STDC_NO_ATOMICS__) + +#include + +/* Structure for once(), which must be initialized with ONCE_INIT. */ +struct once_s { + atomic_flag begun; + atomic_int done; +}; +#define ONCE_INIT {ATOMIC_FLAG_INIT, 0} + +/* + Run the provided init() function exactly once, even if multiple threads + invoke once() at the same time. The state must be a once_t initialized with + ONCE_INIT. + */ +local void once(state, init) + once_t *state; + void (*init)(void); +{ + if (!atomic_load(&state->done)) { + if (atomic_flag_test_and_set(&state->begun)) + while (!atomic_load(&state->done)) + ; + else { + init(); + atomic_store(&state->done, 1); + } + } +} + +#else /* no atomics */ + +/* Structure for once(), which must be initialized with ONCE_INIT. */ +struct once_s { + volatile int begun; + volatile int done; +}; +#define ONCE_INIT {0, 0} + +/* Test and set. Alas, not atomic, but tries to minimize the period of + vulnerability. */ +local int test_and_set OF((int volatile *)); +local int test_and_set( + int volatile *flag) +{ + int was; + + was = *flag; + *flag = 1; + return was; +} + +/* Run the provided init() function once. This is not thread-safe. */ +local void once(state, init) + once_t *state; + void (*init)(void); +{ + if (!state->done) { + if (test_and_set(&state->begun)) + while (!state->done) + ; + else { + init(); + state->done = 1; + } + } +} + +#endif + +/* State for once(). */ +local once_t made = ONCE_INIT; + /* Generate tables for a byte-wise 32-bit CRC calculation on the polynomial: x^32+x^26+x^23+x^22+x^16+x^12+x^11+x^10+x^8+x^7+x^5+x^4+x^2+x+1. Polynomials over GF(2) are represented in binary, one bit per coefficient, - with the lowest powers in the most significant bit. Then adding polynomials + with the lowest powers in the most significant bit. Then adding polynomials is just exclusive-or, and multiplying a polynomial by x is a right shift by - one. If we call the above polynomial p, and represent a byte as the + one. If we call the above polynomial p, and represent a byte as the polynomial q, also with the lowest power in the most significant bit (so the - byte 0xb1 is the polynomial x^7+x^3+x+1), then the CRC is (q*x^32) mod p, + byte 0xb1 is the polynomial x^7+x^3+x^2+1), then the CRC is (q*x^32) mod p, where a mod b means the remainder after dividing a by b. This calculation is done using the shift-register method of multiplying and - taking the remainder. The register is initialized to zero, and for each + taking the remainder. The register is initialized to zero, and for each incoming bit, x^32 is added mod p to the register if the bit is a one (where - x^32 mod p is p+x^32 = x^26+...+1), and the register is multiplied mod p by - x (which is shifting right by one and adding x^32 mod p if the bit shifted - out is a one). We start with the highest power (least significant bit) of - q and repeat for all eight bits of q. - - The first table is simply the CRC of all possible eight bit values. This is - all the information needed to generate CRCs on data a byte at a time for all - combinations of CRC register values and incoming bytes. The remaining tables - allow for word-at-a-time CRC calculation for both big-endian and little- - endian machines, where a word is four bytes. -*/ + x^32 mod p is p+x^32 = x^26+...+1), and the register is multiplied mod p by x + (which is shifting right by one and adding x^32 mod p if the bit shifted out + is a one). We start with the highest power (least significant bit) of q and + repeat for all eight bits of q. + + The table is simply the CRC of all possible eight bit values. This is all the + information needed to generate CRCs on data a byte at a time for all + combinations of CRC register values and incoming bytes. + */ + local void make_crc_table() { - z_crc_t c; - int n, k; - z_crc_t poly; /* polynomial exclusive-or pattern */ - /* terms of polynomial defining this crc (except x^32): */ - static volatile int first = 1; /* flag to limit concurrent making */ - static const unsigned char p[] = {0,1,2,4,5,7,8,10,11,12,16,22,23,26}; - - /* See if another task is already doing this (not thread-safe, but better - than nothing -- significantly reduces duration of vulnerability in - case the advice about DYNAMIC_CRC_TABLE is ignored) */ - if (first) { - first = 0; - - /* make exclusive-or pattern from polynomial (0xedb88320UL) */ - poly = 0; - for (n = 0; n < (int)(sizeof(p)/sizeof(unsigned char)); n++) - poly |= (z_crc_t)1 << (31 - p[n]); - - /* generate a crc for every 8-bit value */ - for (n = 0; n < 256; n++) { - c = (z_crc_t)n; - for (k = 0; k < 8; k++) - c = c & 1 ? poly ^ (c >> 1) : c >> 1; - crc_table[0][n] = c; - } + unsigned i, j, n; + z_crc_t p; -#ifdef BYFOUR - /* generate crc for each value followed by one, two, and three zeros, - and then the byte reversal of those as well as the first table */ - for (n = 0; n < 256; n++) { - c = crc_table[0][n]; - crc_table[4][n] = ZSWAP32(c); - for (k = 1; k < 4; k++) { - c = crc_table[0][c & 0xff] ^ (c >> 8); - crc_table[k][n] = c; - crc_table[k + 4][n] = ZSWAP32(c); - } - } -#endif /* BYFOUR */ - - crc_table_empty = 0; - } - else { /* not first */ - /* wait for the other guy to finish (not efficient, but rare) */ - while (crc_table_empty) - ; + /* initialize the CRC of bytes tables */ + for (i = 0; i < 256; i++) { + p = i; + for (j = 0; j < 8; j++) + p = p & 1 ? (p >> 1) ^ POLY : p >> 1; + crc_table[i] = p; +#ifdef W + crc_big_table[i] = byte_swap(p); +#endif } + /* initialize the x^2^n mod p(x) table */ + p = (z_crc_t)1 << 30; /* x^1 */ + x2n_table[0] = p; + for (n = 1; n < 32; n++) + x2n_table[n] = p = multmodp(p, p); + +#ifdef W + /* initialize the braiding tables -- needs x2n_table[] */ + braid(crc_braid_table, crc_braid_big_table, N, W); +#endif + #ifdef MAKECRCH - /* write out CRC tables to crc32.h */ { + /* + The crc32.h header file contains tables for both 32-bit and 64-bit + z_word_t's, and so requires a 64-bit type be available. In that case, + z_word_t must be defined to be 64-bits. This code then also generates + and writes out the tables for the case that z_word_t is 32 bits. + */ +#if !defined(W) || W != 8 +# error Need a 64-bit integer type in order to generate crc32.h. +#endif FILE *out; + int k, n; + z_crc_t ltl[8][256]; + z_word_t big[8][256]; out = fopen("crc32.h", "w"); if (out == NULL) return; - fprintf(out, "/* crc32.h -- tables for rapid CRC calculation\n"); - fprintf(out, " * Generated automatically by crc32.c\n */\n\n"); - fprintf(out, "local const z_crc_t FAR "); - fprintf(out, "crc_table[TBLS][256] =\n{\n {\n"); - write_table(out, crc_table[0]); -# ifdef BYFOUR - fprintf(out, "#ifdef BYFOUR\n"); - for (k = 1; k < 8; k++) { - fprintf(out, " },\n {\n"); - write_table(out, crc_table[k]); + + /* write out little-endian CRC table to crc32.h */ + fprintf(out, + "/* crc32.h -- tables for rapid CRC calculation\n" + " * Generated automatically by crc32.c\n */\n" + "\n" + "local const z_crc_t FAR crc_table[] = {\n" + " "); + write_table(out, crc_table, 256); + fprintf(out, + "};\n"); + + /* write out big-endian CRC table for 64-bit z_word_t to crc32.h */ + fprintf(out, + "\n" + "#ifdef W\n" + "\n" + "#if W == 8\n" + "\n" + "local const z_word_t FAR crc_big_table[] = {\n" + " "); + write_table64(out, crc_big_table, 256); + fprintf(out, + "};\n"); + + /* write out big-endian CRC table for 32-bit z_word_t to crc32.h */ + fprintf(out, + "\n" + "#else /* W == 4 */\n" + "\n" + "local const z_word_t FAR crc_big_table[] = {\n" + " "); + write_table32hi(out, crc_big_table, 256); + fprintf(out, + "};\n" + "\n" + "#endif\n"); + + /* write out braid tables for each value of N */ + for (n = 1; n <= 6; n++) { + fprintf(out, + "\n" + "#if N == %d\n", n); + + /* compute braid tables for this N and 64-bit word_t */ + braid(ltl, big, n, 8); + + /* write out braid tables for 64-bit z_word_t to crc32.h */ + fprintf(out, + "\n" + "#if W == 8\n" + "\n" + "local const z_crc_t FAR crc_braid_table[][256] = {\n"); + for (k = 0; k < 8; k++) { + fprintf(out, " {"); + write_table(out, ltl[k], 256); + fprintf(out, "}%s", k < 7 ? ",\n" : ""); + } + fprintf(out, + "};\n" + "\n" + "local const z_word_t FAR crc_braid_big_table[][256] = {\n"); + for (k = 0; k < 8; k++) { + fprintf(out, " {"); + write_table64(out, big[k], 256); + fprintf(out, "}%s", k < 7 ? ",\n" : ""); + } + fprintf(out, + "};\n"); + + /* compute braid tables for this N and 32-bit word_t */ + braid(ltl, big, n, 4); + + /* write out braid tables for 32-bit z_word_t to crc32.h */ + fprintf(out, + "\n" + "#else /* W == 4 */\n" + "\n" + "local const z_crc_t FAR crc_braid_table[][256] = {\n"); + for (k = 0; k < 4; k++) { + fprintf(out, " {"); + write_table(out, ltl[k], 256); + fprintf(out, "}%s", k < 3 ? ",\n" : ""); + } + fprintf(out, + "};\n" + "\n" + "local const z_word_t FAR crc_braid_big_table[][256] = {\n"); + for (k = 0; k < 4; k++) { + fprintf(out, " {"); + write_table32hi(out, big[k], 256); + fprintf(out, "}%s", k < 3 ? ",\n" : ""); + } + fprintf(out, + "};\n" + "\n" + "#endif\n" + "\n" + "#endif\n"); } - fprintf(out, "#endif\n"); -# endif /* BYFOUR */ - fprintf(out, " }\n};\n"); + fprintf(out, + "\n" + "#endif\n"); + + /* write out zeros operator table to crc32.h */ + fprintf(out, + "\n" + "local const z_crc_t FAR x2n_table[] = {\n" + " "); + write_table(out, x2n_table, 32); + fprintf(out, + "};\n"); fclose(out); } #endif /* MAKECRCH */ } #ifdef MAKECRCH + +/* + Write the 32-bit values in table[0..k-1] to out, five per line in + hexadecimal separated by commas. + */ local void write_table( FILE *out, - const z_crc_t FAR *table) + const z_crc_t FAR *table, + int k) { int n; - for (n = 0; n < 256; n++) - fprintf(out, "%s0x%08lxUL%s", n % 5 ? "" : " ", + for (n = 0; n < k; n++) + fprintf(out, "%s0x%08lx%s", n == 0 || n % 5 ? "" : " ", (unsigned long)(table[n]), - n == 255 ? "\n" : (n % 5 == 4 ? ",\n" : ", ")); + n == k - 1 ? "" : (n % 5 == 4 ? ",\n" : ", ")); } + +/* + Write the high 32-bits of each value in table[0..k-1] to out, five per line + in hexadecimal separated by commas. + */ +local void write_table32hi( + FILE *out, + const z_word_t FAR *table, + int k) +{ + int n; + + for (n = 0; n < k; n++) + fprintf(out, "%s0x%08lx%s", n == 0 || n % 5 ? "" : " ", + (unsigned long)(table[n] >> 32), + n == k - 1 ? "" : (n % 5 == 4 ? ",\n" : ", ")); +} + +/* + Write the 64-bit values in table[0..k-1] to out, three per line in + hexadecimal separated by commas. This assumes that if there is a 64-bit + type, then there is also a long long integer type, and it is at least 64 + bits. If not, then the type cast and format string can be adjusted + accordingly. + */ +local void write_table64( + FILE *out, + const z_word_t FAR *table, + int k) +{ + int n; + + for (n = 0; n < k; n++) + fprintf(out, "%s0x%016llx%s", n == 0 || n % 3 ? "" : " ", + (unsigned long long)(table[n]), + n == k - 1 ? "" : (n % 3 == 2 ? ",\n" : ", ")); +} + +/* Actually do the deed. */ +int main() +{ + make_crc_table(); + return 0; +} + #endif /* MAKECRCH */ +#ifdef W +/* + Generate the little and big-endian braid tables for the given n and z_word_t + size w. Each array must have room for w blocks of 256 elements. + */ +local void braid(ltl, big, n, w) + z_crc_t ltl[][256]; + z_word_t big[][256]; + int n; + int w; +{ + int k; + z_crc_t i, p, q; + for (k = 0; k < w; k++) { + p = x2nmodp((n * w + 3 - k) << 3, 0); + ltl[k][0] = 0; + big[w - 1 - k][0] = 0; + for (i = 1; i < 256; i++) { + ltl[k][i] = q = multmodp(i << 24, p); + big[w - 1 - k][i] = byte_swap(q); + } + } +} +#endif + #else /* !DYNAMIC_CRC_TABLE */ /* ======================================================================== - * Tables of CRC-32s of all single-byte values, made by make_crc_table(). + * Tables for byte-wise and braided CRC-32 calculations, and a table of powers + * of x for combining CRC-32s, all made by make_crc_table(). */ #include "crc32.h" #endif /* DYNAMIC_CRC_TABLE */ +/* ======================================================================== + * Routines used for CRC calculation. Some are also required for the table + * generation above. + */ + +/* + Return a(x) multiplied by b(x) modulo p(x), where p(x) is the CRC polynomial, + reflected. For speed, this requires that a not be zero. + */ +local z_crc_t multmodp( + z_crc_t a, + z_crc_t b) +{ + z_crc_t m, p; + + m = (z_crc_t)1 << 31; + p = 0; + for (;;) { + if (a & m) { + p ^= b; + if ((a & (m - 1)) == 0) + break; + } + m >>= 1; + b = b & 1 ? (b >> 1) ^ POLY : b >> 1; + } + return p; +} + +/* + Return x^(n * 2^k) modulo p(x). Requires that x2n_table[] has been + initialized. + */ +local z_crc_t x2nmodp( + z_off64_t n, + unsigned k) +{ + z_crc_t p; + + p = (z_crc_t)1 << 31; /* x^0 == 1 */ + while (n) { + if (n & 1) + p = multmodp(x2n_table[k & 31], p); + n >>= 1; + k++; + } + return p; +} + /* ========================================================================= - * This function can be used by asm versions of crc32() + * This function can be used by asm versions of crc32(), and to force the + * generation of the CRC tables in a threaded application. */ const z_crc_t FAR * ZEXPORT get_crc_table() { #ifdef DYNAMIC_CRC_TABLE - if (crc_table_empty) - make_crc_table(); + once(&made, make_crc_table); #endif /* DYNAMIC_CRC_TABLE */ return (const z_crc_t FAR *)crc_table; } -/* ========================================================================= */ -#define DO1 crc = crc_table[0][((int)crc ^ (*buf++)) & 0xff] ^ (crc >> 8) -#define DO8 DO1; DO1; DO1; DO1; DO1; DO1; DO1; DO1 +/* ========================================================================= + * Use ARM machine instructions if available. This will compute the CRC about + * ten times faster than the braided calculation. This code does not check for + * the presence of the CRC instruction at run time. __ARM_FEATURE_CRC32 will + * only be defined if the compilation specifies an ARM processor architecture + * that has the instructions. For example, compiling with -march=armv8.1-a or + * -march=armv8-a+crc, or -march=native if the compile machine has the crc32 + * instructions. + */ +#ifdef ARMCRC32 + +/* + Constants empirically determined to maximize speed. These values are from + measurements on a Cortex-A57. Your mileage may vary. + */ +#define Z_BATCH 3990 /* number of words in a batch */ +#define Z_BATCH_ZEROS 0xa10d3d0c /* computed from Z_BATCH = 3990 */ +#define Z_BATCH_MIN 800 /* fewest words in a final batch */ -/* ========================================================================= */ unsigned long ZEXPORT crc32_z( unsigned long crc, const unsigned char FAR *buf, z_size_t len) { - if (buf == Z_NULL) return 0UL; + z_crc_t val; + z_word_t crc1, crc2; + const z_word_t *word; + z_word_t val0, val1, val2; + z_size_t last, last2, i; + z_size_t num; + + /* Return initial CRC, if requested. */ + if (buf == Z_NULL) return 0; #ifdef DYNAMIC_CRC_TABLE - if (crc_table_empty) - make_crc_table(); + once(&made, make_crc_table); #endif /* DYNAMIC_CRC_TABLE */ -#ifdef BYFOUR - if (sizeof(void *) == sizeof(ptrdiff_t)) { - z_crc_t endian; + /* Pre-condition the CRC */ + crc = (~crc) & 0xffffffff; - endian = 1; - if (*((unsigned char *)(&endian))) - return crc32_little(crc, buf, len); - else - return crc32_big(crc, buf, len); + /* Compute the CRC up to a word boundary. */ + while (len && ((z_size_t)buf & 7) != 0) { + len--; + val = *buf++; + __asm__ volatile("crc32b %w0, %w0, %w1" : "+r"(crc) : "r"(val)); } -#endif /* BYFOUR */ - crc = crc ^ 0xffffffffUL; - while (len >= 8) { - DO8; - len -= 8; + + /* Prepare to compute the CRC on full 64-bit words word[0..num-1]. */ + word = (z_word_t const *)buf; + num = len >> 3; + len &= 7; + + /* Do three interleaved CRCs to realize the throughput of one crc32x + instruction per cycle. Each CRC is calcuated on Z_BATCH words. The three + CRCs are combined into a single CRC after each set of batches. */ + while (num >= 3 * Z_BATCH) { + crc1 = 0; + crc2 = 0; + for (i = 0; i < Z_BATCH; i++) { + val0 = word[i]; + val1 = word[i + Z_BATCH]; + val2 = word[i + 2 * Z_BATCH]; + __asm__ volatile("crc32x %w0, %w0, %x1" : "+r"(crc) : "r"(val0)); + __asm__ volatile("crc32x %w0, %w0, %x1" : "+r"(crc1) : "r"(val1)); + __asm__ volatile("crc32x %w0, %w0, %x1" : "+r"(crc2) : "r"(val2)); + } + word += 3 * Z_BATCH; + num -= 3 * Z_BATCH; + crc = multmodp(Z_BATCH_ZEROS, crc) ^ crc1; + crc = multmodp(Z_BATCH_ZEROS, crc) ^ crc2; } - if (len) do { - DO1; - } while (--len); - return crc ^ 0xffffffffUL; -} -/* ========================================================================= */ -unsigned long ZEXPORT crc32( - unsigned long crc, - const unsigned char FAR *buf, - uInt len) -{ - return crc32_z(crc, buf, len); + /* Do one last smaller batch with the remaining words, if there are enough + to pay for the combination of CRCs. */ + last = num / 3; + if (last >= Z_BATCH_MIN) { + last2 = last << 1; + crc1 = 0; + crc2 = 0; + for (i = 0; i < last; i++) { + val0 = word[i]; + val1 = word[i + last]; + val2 = word[i + last2]; + __asm__ volatile("crc32x %w0, %w0, %x1" : "+r"(crc) : "r"(val0)); + __asm__ volatile("crc32x %w0, %w0, %x1" : "+r"(crc1) : "r"(val1)); + __asm__ volatile("crc32x %w0, %w0, %x1" : "+r"(crc2) : "r"(val2)); + } + word += 3 * last; + num -= 3 * last; + val = x2nmodp(last, 6); + crc = multmodp(val, crc) ^ crc1; + crc = multmodp(val, crc) ^ crc2; + } + + /* Compute the CRC on any remaining words. */ + for (i = 0; i < num; i++) { + val0 = word[i]; + __asm__ volatile("crc32x %w0, %w0, %x1" : "+r"(crc) : "r"(val0)); + } + word += num; + + /* Complete the CRC on any remaining bytes. */ + buf = (const unsigned char FAR *)word; + while (len) { + len--; + val = *buf++; + __asm__ volatile("crc32b %w0, %w0, %w1" : "+r"(crc) : "r"(val)); + } + + /* Return the CRC, post-conditioned. */ + return crc ^ 0xffffffff; } -#ifdef BYFOUR +#else + +#ifdef W /* - This BYFOUR code accesses the passed unsigned char * buffer with a 32-bit - integer pointer type. This violates the strict aliasing rule, where a - compiler can assume, for optimization purposes, that two pointers to - fundamentally different types won't ever point to the same memory. This can - manifest as a problem only if one of the pointers is written to. This code - only reads from those pointers. So long as this code remains isolated in - this compilation unit, there won't be a problem. For this reason, this code - should not be copied and pasted into a compilation unit in which other code - writes to the buffer that is passed to these routines. + Return the CRC of the W bytes in the word_t data, taking the + least-significant byte of the word as the first byte of data, without any pre + or post conditioning. This is used to combine the CRCs of each braid. */ +local z_crc_t crc_word( + z_word_t data) +{ + int k; + for (k = 0; k < W; k++) + data = (data >> 8) ^ crc_table[data & 0xff]; + return (z_crc_t)data; +} -/* ========================================================================= */ -#define DOLIT4 c ^= *buf4++; \ - c = crc_table[3][c & 0xff] ^ crc_table[2][(c >> 8) & 0xff] ^ \ - crc_table[1][(c >> 16) & 0xff] ^ crc_table[0][c >> 24] -#define DOLIT32 DOLIT4; DOLIT4; DOLIT4; DOLIT4; DOLIT4; DOLIT4; DOLIT4; DOLIT4 +local z_word_t crc_word_big( + z_word_t data) +{ + int k; + for (k = 0; k < W; k++) + data = (data << 8) ^ + crc_big_table[(data >> ((W - 1) << 3)) & 0xff]; + return data; +} + +#endif /* ========================================================================= */ -local unsigned long crc32_little( +unsigned long ZEXPORT crc32_z( unsigned long crc, const unsigned char FAR *buf, z_size_t len) { - register z_crc_t c; - register const z_crc_t FAR *buf4; + /* Return initial CRC, if requested. */ + if (buf == Z_NULL) return 0; - c = (z_crc_t)crc; - c = ~c; - while (len && ((ptrdiff_t)buf & 3)) { - c = crc_table[0][(c ^ *buf++) & 0xff] ^ (c >> 8); - len--; - } +#ifdef DYNAMIC_CRC_TABLE + once(&made, make_crc_table); +#endif /* DYNAMIC_CRC_TABLE */ - buf4 = (const z_crc_t FAR *)(const void FAR *)buf; - while (len >= 32) { - DOLIT32; - len -= 32; - } - while (len >= 4) { - DOLIT4; - len -= 4; - } - buf = (const unsigned char FAR *)buf4; + /* Pre-condition the CRC */ + crc = (~crc) & 0xffffffff; - if (len) do { - c = crc_table[0][(c ^ *buf++) & 0xff] ^ (c >> 8); - } while (--len); - c = ~c; - return (unsigned long)c; -} +#ifdef W -/* ========================================================================= */ -#define DOBIG4 c ^= *buf4++; \ - c = crc_table[4][c & 0xff] ^ crc_table[5][(c >> 8) & 0xff] ^ \ - crc_table[6][(c >> 16) & 0xff] ^ crc_table[7][c >> 24] -#define DOBIG32 DOBIG4; DOBIG4; DOBIG4; DOBIG4; DOBIG4; DOBIG4; DOBIG4; DOBIG4 + /* If provided enough bytes, do a braided CRC calculation. */ + if (len >= N * W + W - 1) { + z_size_t blks; + z_word_t const *words; + unsigned endian; + int k; -/* ========================================================================= */ -local unsigned long crc32_big( - unsigned long crc, - const unsigned char FAR *buf, - z_size_t len) -{ - register z_crc_t c; - register const z_crc_t FAR *buf4; + /* Compute the CRC up to a z_word_t boundary. */ + while (len && ((z_size_t)buf & (W - 1)) != 0) { + len--; + crc = (crc >> 8) ^ crc_table[(crc ^ *buf++) & 0xff]; + } - c = ZSWAP32((z_crc_t)crc); - c = ~c; - while (len && ((ptrdiff_t)buf & 3)) { - c = crc_table[4][(c >> 24) ^ *buf++] ^ (c << 8); - len--; + /* Compute the CRC on as many N z_word_t blocks as are available. */ + blks = len / (N * W); + len -= blks * N * W; + words = (z_word_t const *)buf; + + /* Do endian check at execution time instead of compile time, since ARM + processors can change the endianess at execution time. If the + compiler knows what the endianess will be, it can optimize out the + check and the unused branch. */ + endian = 1; + if (*(unsigned char *)&endian) { + /* Little endian. */ + + z_crc_t crc0; + z_word_t word0; +#if N > 1 + z_crc_t crc1; + z_word_t word1; +#if N > 2 + z_crc_t crc2; + z_word_t word2; +#if N > 3 + z_crc_t crc3; + z_word_t word3; +#if N > 4 + z_crc_t crc4; + z_word_t word4; +#if N > 5 + z_crc_t crc5; + z_word_t word5; +#endif +#endif +#endif +#endif +#endif + + /* Initialize the CRC for each braid. */ + crc0 = crc; +#if N > 1 + crc1 = 0; +#if N > 2 + crc2 = 0; +#if N > 3 + crc3 = 0; +#if N > 4 + crc4 = 0; +#if N > 5 + crc5 = 0; +#endif +#endif +#endif +#endif +#endif + + /* + Process the first blks-1 blocks, computing the CRCs on each braid + independently. + */ + while (--blks) { + /* Load the word for each braid into registers. */ + word0 = crc0 ^ words[0]; +#if N > 1 + word1 = crc1 ^ words[1]; +#if N > 2 + word2 = crc2 ^ words[2]; +#if N > 3 + word3 = crc3 ^ words[3]; +#if N > 4 + word4 = crc4 ^ words[4]; +#if N > 5 + word5 = crc5 ^ words[5]; +#endif +#endif +#endif +#endif +#endif + words += N; + + /* Compute and update the CRC for each word. The loop should + get unrolled. */ + crc0 = crc_braid_table[0][word0 & 0xff]; +#if N > 1 + crc1 = crc_braid_table[0][word1 & 0xff]; +#if N > 2 + crc2 = crc_braid_table[0][word2 & 0xff]; +#if N > 3 + crc3 = crc_braid_table[0][word3 & 0xff]; +#if N > 4 + crc4 = crc_braid_table[0][word4 & 0xff]; +#if N > 5 + crc5 = crc_braid_table[0][word5 & 0xff]; +#endif +#endif +#endif +#endif +#endif + for (k = 1; k < W; k++) { + crc0 ^= crc_braid_table[k][(word0 >> (k << 3)) & 0xff]; +#if N > 1 + crc1 ^= crc_braid_table[k][(word1 >> (k << 3)) & 0xff]; +#if N > 2 + crc2 ^= crc_braid_table[k][(word2 >> (k << 3)) & 0xff]; +#if N > 3 + crc3 ^= crc_braid_table[k][(word3 >> (k << 3)) & 0xff]; +#if N > 4 + crc4 ^= crc_braid_table[k][(word4 >> (k << 3)) & 0xff]; +#if N > 5 + crc5 ^= crc_braid_table[k][(word5 >> (k << 3)) & 0xff]; +#endif +#endif +#endif +#endif +#endif + } + } + + /* + Process the last block, combining the CRCs of the N braids at the + same time. + */ + crc = crc_word(crc0 ^ words[0]); +#if N > 1 + crc = crc_word(crc1 ^ words[1] ^ crc); +#if N > 2 + crc = crc_word(crc2 ^ words[2] ^ crc); +#if N > 3 + crc = crc_word(crc3 ^ words[3] ^ crc); +#if N > 4 + crc = crc_word(crc4 ^ words[4] ^ crc); +#if N > 5 + crc = crc_word(crc5 ^ words[5] ^ crc); +#endif +#endif +#endif +#endif +#endif + words += N; + } + else { + /* Big endian. */ + + z_word_t crc0, word0, comb; +#if N > 1 + z_word_t crc1, word1; +#if N > 2 + z_word_t crc2, word2; +#if N > 3 + z_word_t crc3, word3; +#if N > 4 + z_word_t crc4, word4; +#if N > 5 + z_word_t crc5, word5; +#endif +#endif +#endif +#endif +#endif + + /* Initialize the CRC for each braid. */ + crc0 = byte_swap(crc); +#if N > 1 + crc1 = 0; +#if N > 2 + crc2 = 0; +#if N > 3 + crc3 = 0; +#if N > 4 + crc4 = 0; +#if N > 5 + crc5 = 0; +#endif +#endif +#endif +#endif +#endif + + /* + Process the first blks-1 blocks, computing the CRCs on each braid + independently. + */ + while (--blks) { + /* Load the word for each braid into registers. */ + word0 = crc0 ^ words[0]; +#if N > 1 + word1 = crc1 ^ words[1]; +#if N > 2 + word2 = crc2 ^ words[2]; +#if N > 3 + word3 = crc3 ^ words[3]; +#if N > 4 + word4 = crc4 ^ words[4]; +#if N > 5 + word5 = crc5 ^ words[5]; +#endif +#endif +#endif +#endif +#endif + words += N; + + /* Compute and update the CRC for each word. The loop should + get unrolled. */ + crc0 = crc_braid_big_table[0][word0 & 0xff]; +#if N > 1 + crc1 = crc_braid_big_table[0][word1 & 0xff]; +#if N > 2 + crc2 = crc_braid_big_table[0][word2 & 0xff]; +#if N > 3 + crc3 = crc_braid_big_table[0][word3 & 0xff]; +#if N > 4 + crc4 = crc_braid_big_table[0][word4 & 0xff]; +#if N > 5 + crc5 = crc_braid_big_table[0][word5 & 0xff]; +#endif +#endif +#endif +#endif +#endif + for (k = 1; k < W; k++) { + crc0 ^= crc_braid_big_table[k][(word0 >> (k << 3)) & 0xff]; +#if N > 1 + crc1 ^= crc_braid_big_table[k][(word1 >> (k << 3)) & 0xff]; +#if N > 2 + crc2 ^= crc_braid_big_table[k][(word2 >> (k << 3)) & 0xff]; +#if N > 3 + crc3 ^= crc_braid_big_table[k][(word3 >> (k << 3)) & 0xff]; +#if N > 4 + crc4 ^= crc_braid_big_table[k][(word4 >> (k << 3)) & 0xff]; +#if N > 5 + crc5 ^= crc_braid_big_table[k][(word5 >> (k << 3)) & 0xff]; +#endif +#endif +#endif +#endif +#endif + } + } + + /* + Process the last block, combining the CRCs of the N braids at the + same time. + */ + comb = crc_word_big(crc0 ^ words[0]); +#if N > 1 + comb = crc_word_big(crc1 ^ words[1] ^ comb); +#if N > 2 + comb = crc_word_big(crc2 ^ words[2] ^ comb); +#if N > 3 + comb = crc_word_big(crc3 ^ words[3] ^ comb); +#if N > 4 + comb = crc_word_big(crc4 ^ words[4] ^ comb); +#if N > 5 + comb = crc_word_big(crc5 ^ words[5] ^ comb); +#endif +#endif +#endif +#endif +#endif + words += N; + crc = byte_swap(comb); + } + + /* + Update the pointer to the remaining bytes to process. + */ + buf = (unsigned char const *)words; } - buf4 = (const z_crc_t FAR *)(const void FAR *)buf; - while (len >= 32) { - DOBIG32; - len -= 32; +#endif /* W */ + + /* Complete the computation of the CRC on any remaining bytes. */ + while (len >= 8) { + len -= 8; + crc = (crc >> 8) ^ crc_table[(crc ^ *buf++) & 0xff]; + crc = (crc >> 8) ^ crc_table[(crc ^ *buf++) & 0xff]; + crc = (crc >> 8) ^ crc_table[(crc ^ *buf++) & 0xff]; + crc = (crc >> 8) ^ crc_table[(crc ^ *buf++) & 0xff]; + crc = (crc >> 8) ^ crc_table[(crc ^ *buf++) & 0xff]; + crc = (crc >> 8) ^ crc_table[(crc ^ *buf++) & 0xff]; + crc = (crc >> 8) ^ crc_table[(crc ^ *buf++) & 0xff]; + crc = (crc >> 8) ^ crc_table[(crc ^ *buf++) & 0xff]; } - while (len >= 4) { - DOBIG4; - len -= 4; + while (len) { + len--; + crc = (crc >> 8) ^ crc_table[(crc ^ *buf++) & 0xff]; } - buf = (const unsigned char FAR *)buf4; - if (len) do { - c = crc_table[4][(c >> 24) ^ *buf++] ^ (c << 8); - } while (--len); - c = ~c; - return (unsigned long)(ZSWAP32(c)); + /* Return the CRC, post-conditioned. */ + return crc ^ 0xffffffff; } -#endif /* BYFOUR */ - -#define GF2_DIM 32 /* dimension of GF(2) vectors (length of CRC) */ +#endif /* ========================================================================= */ -local unsigned long gf2_matrix_times( - unsigned long *mat, - unsigned long vec) +unsigned long ZEXPORT crc32( + unsigned long crc, + const unsigned char FAR *buf, + uInt len) { - unsigned long sum; - - sum = 0; - while (vec) { - if (vec & 1) - sum ^= *mat; - vec >>= 1; - mat++; - } - return sum; + return crc32_z(crc, buf, len); } /* ========================================================================= */ -local void gf2_matrix_square( - unsigned long *square, - unsigned long *mat) +uLong ZEXPORT crc32_combine64( + uLong crc1, + uLong crc2, + z_off64_t len2) { - int n; - - for (n = 0; n < GF2_DIM; n++) - square[n] = gf2_matrix_times(mat, mat[n]); +#ifdef DYNAMIC_CRC_TABLE + once(&made, make_crc_table); +#endif /* DYNAMIC_CRC_TABLE */ + return multmodp(x2nmodp(len2, 3), crc1) ^ (crc2 & 0xffffffff); } /* ========================================================================= */ -local uLong crc32_combine_( +uLong ZEXPORT crc32_combine( uLong crc1, uLong crc2, - z_off64_t len2) + z_off_t len2) { - int n; - unsigned long row; - unsigned long even[GF2_DIM]; /* even-power-of-two zeros operator */ - unsigned long odd[GF2_DIM]; /* odd-power-of-two zeros operator */ - - /* degenerate case (also disallow negative lengths) */ - if (len2 <= 0) - return crc1; - - /* put operator for one zero bit in odd */ - odd[0] = 0xedb88320UL; /* CRC-32 polynomial */ - row = 1; - for (n = 1; n < GF2_DIM; n++) { - odd[n] = row; - row <<= 1; - } + return crc32_combine64(crc1, crc2, len2); +} - /* put operator for two zero bits in even */ - gf2_matrix_square(even, odd); - - /* put operator for four zero bits in odd */ - gf2_matrix_square(odd, even); - - /* apply len2 zeros to crc1 (first square will put the operator for one - zero byte, eight zero bits, in even) */ - do { - /* apply zeros operator for this bit of len2 */ - gf2_matrix_square(even, odd); - if (len2 & 1) - crc1 = gf2_matrix_times(even, crc1); - len2 >>= 1; - - /* if no more bits set, then done */ - if (len2 == 0) - break; - - /* another iteration of the loop with odd and even swapped */ - gf2_matrix_square(odd, even); - if (len2 & 1) - crc1 = gf2_matrix_times(odd, crc1); - len2 >>= 1; - - /* if no more bits set, then done */ - } while (len2 != 0); - - /* return combined crc */ - crc1 ^= crc2; - return crc1; +/* ========================================================================= */ +uLong ZEXPORT crc32_combine_gen64( + z_off64_t len2) +{ +#ifdef DYNAMIC_CRC_TABLE + once(&made, make_crc_table); +#endif /* DYNAMIC_CRC_TABLE */ + return x2nmodp(len2, 3); } /* ========================================================================= */ -uLong ZEXPORT crc32_combine( - uLong crc1, - uLong crc2, +uLong ZEXPORT crc32_combine_gen( z_off_t len2) { - return crc32_combine_(crc1, crc2, len2); + return crc32_combine_gen64(len2); } -uLong ZEXPORT crc32_combine64( +/* ========================================================================= */ +uLong crc32_combine_op( uLong crc1, uLong crc2, - z_off64_t len2) + uLong op) { - return crc32_combine_(crc1, crc2, len2); + return multmodp(op, crc1) ^ (crc2 & 0xffffffff); } diff --git a/gnu/usr.bin/perl/cpan/Compress-Raw-Zlib/zlib-src/deflate.c b/gnu/usr.bin/perl/cpan/Compress-Raw-Zlib/zlib-src/deflate.c index 8ad318e0595..a5fb52594ed 100644 --- a/gnu/usr.bin/perl/cpan/Compress-Raw-Zlib/zlib-src/deflate.c +++ b/gnu/usr.bin/perl/cpan/Compress-Raw-Zlib/zlib-src/deflate.c @@ -1,5 +1,5 @@ /* deflate.c -- compress data using the deflation algorithm - * Copyright (C) 1995-2017 Jean-loup Gailly and Mark Adler + * Copyright (C) 1995-2022 Jean-loup Gailly and Mark Adler * For conditions of distribution and use, see copyright notice in zlib.h */ @@ -52,7 +52,7 @@ #include "deflate.h" const char deflate_copyright[] = - " deflate 1.2.11 Copyright 1995-2017 Jean-loup Gailly and Mark Adler "; + " deflate 1.2.12 Copyright 1995-2022 Jean-loup Gailly and Mark Adler "; /* If you use the zlib library in a product, an acknowledgment is welcome in the documentation of your product. If for some reason you cannot @@ -527,13 +527,13 @@ int ZEXPORT deflateResetKeep ( #ifdef GZIP s->wrap == 2 ? GZIP_STATE : #endif - s->wrap ? INIT_STATE : BUSY_STATE; + INIT_STATE; strm->adler = #ifdef GZIP s->wrap == 2 ? crc32(0L, Z_NULL, 0) : #endif adler32(0L, Z_NULL, 0); - s->last_flush = Z_NO_FLUSH; + s->last_flush = -2; _tr_init(s); @@ -627,12 +627,12 @@ int ZEXPORT deflateParams( func = configuration_table[s->level].func; if ((strategy != s->strategy || func != configuration_table[level].func) && - s->high_water) { + s->last_flush != -2) { /* Flush the last buffer: */ int err = deflate(strm, Z_BLOCK); if (err == Z_STREAM_ERROR) return err; - if (strm->avail_out == 0) + if (strm->avail_in || (s->strstart - s->block_start) + s->lookahead) return Z_BUF_ERROR; } if (s->level != level) { @@ -851,6 +851,8 @@ int ZEXPORT deflate ( } /* Write the header */ + if (s->status == INIT_STATE && s->wrap == 0) + s->status = BUSY_STATE; if (s->status == INIT_STATE) { /* zlib header */ uInt header = (Z_DEFLATED + ((s->w_bits-8)<<4)) << 8; @@ -1551,6 +1553,8 @@ local void fill_window( s->match_start -= wsize; s->strstart -= wsize; /* we now have strstart >= MAX_DIST */ s->block_start -= (long) wsize; + if (s->insert > s->strstart) + s->insert = s->strstart; slide_hash(s); more += wsize; } @@ -1780,6 +1784,7 @@ local block_state deflate_stored( s->matches = 2; /* clear hash */ zmemcpy(s->window, s->strm->next_in - s->w_size, s->w_size); s->strstart = s->w_size; + s->insert = s->strstart; } else { if (s->window_size - s->strstart <= used) { @@ -1788,12 +1793,14 @@ local block_state deflate_stored( zmemcpy(s->window, s->window + s->w_size, s->strstart); if (s->matches < 2) s->matches++; /* add a pending slide_hash() */ + if (s->insert > s->strstart) + s->insert = s->strstart; } zmemcpy(s->window + s->strstart, s->strm->next_in - used, used); s->strstart += used; + s->insert += MIN(used, s->w_size - s->insert); } s->block_start = s->strstart; - s->insert += MIN(used, s->w_size - s->insert); } if (s->high_water < s->strstart) s->high_water = s->strstart; @@ -1808,7 +1815,7 @@ local block_state deflate_stored( return block_done; /* Fill the window with any remaining input. */ - have = s->window_size - s->strstart - 1; + have = s->window_size - s->strstart; if (s->strm->avail_in > have && s->block_start >= (long)s->w_size) { /* Slide the window down. */ s->block_start -= s->w_size; @@ -1817,12 +1824,15 @@ local block_state deflate_stored( if (s->matches < 2) s->matches++; /* add a pending slide_hash() */ have += s->w_size; /* more space now */ + if (s->insert > s->strstart) + s->insert = s->strstart; } if (have > s->strm->avail_in) have = s->strm->avail_in; if (have) { read_buf(s->strm, s->window + s->strstart, have); s->strstart += have; + s->insert += MIN(have, s->w_size - s->insert); } if (s->high_water < s->strstart) s->high_water = s->strstart; diff --git a/gnu/usr.bin/perl/cpan/Compress-Raw-Zlib/zlib-src/deflate.h b/gnu/usr.bin/perl/cpan/Compress-Raw-Zlib/zlib-src/deflate.h index d4cf1a98be4..17c226113b0 100644 --- a/gnu/usr.bin/perl/cpan/Compress-Raw-Zlib/zlib-src/deflate.h +++ b/gnu/usr.bin/perl/cpan/Compress-Raw-Zlib/zlib-src/deflate.h @@ -1,5 +1,5 @@ /* deflate.h -- internal compression state - * Copyright (C) 1995-2016 Jean-loup Gailly + * Copyright (C) 1995-2018 Jean-loup Gailly * For conditions of distribution and use, see copyright notice in zlib.h */ diff --git a/gnu/usr.bin/perl/cpan/Compress-Raw-Zlib/zlib-src/inflate.c b/gnu/usr.bin/perl/cpan/Compress-Raw-Zlib/zlib-src/inflate.c index 2060956978a..390ceaf112d 100644 --- a/gnu/usr.bin/perl/cpan/Compress-Raw-Zlib/zlib-src/inflate.c +++ b/gnu/usr.bin/perl/cpan/Compress-Raw-Zlib/zlib-src/inflate.c @@ -1,5 +1,5 @@ /* inflate.c -- zlib decompression - * Copyright (C) 1995-2016 Mark Adler + * Copyright (C) 1995-2022 Mark Adler * For conditions of distribution and use, see copyright notice in zlib.h */ @@ -130,6 +130,7 @@ int ZEXPORT inflateResetKeep( state->mode = HEAD; state->last = 0; state->havedict = 0; + state->flags = -1; state->dmax = 32768U; state->head = Z_NULL; state->hold = 0; @@ -447,10 +448,10 @@ local int updatewindow( /* check function to use adler32() for zlib or crc32() for gzip */ #ifdef GUNZIP -# define UPDATE(check, buf, len) \ +# define UPDATE_CHECK(check, buf, len) \ (state->flags ? crc32(check, buf, len) : adler32(check, buf, len)) #else -# define UPDATE(check, buf, len) adler32(check, buf, len) +# define UPDATE_CHECK(check, buf, len) adler32(check, buf, len) #endif /* check macros for header crc */ @@ -670,7 +671,6 @@ int ZEXPORT inflate( state->mode = FLAGS; break; } - state->flags = 0; /* expect zlib header */ if (state->head != Z_NULL) state->head->done = -1; if (!(state->wrap & 1) || /* check if zlib header allowed */ @@ -697,6 +697,7 @@ int ZEXPORT inflate( break; } state->dmax = 1U << len; + state->flags = 0; /* indicate zlib header */ Tracev((stderr, "inflate: zlib header ok\n")); strm->adler = state->check = adler32(0L, Z_NULL, 0); state->mode = hold & 0x200 ? DICTID : TYPE; @@ -722,6 +723,7 @@ int ZEXPORT inflate( CRC2(state->check, hold); INITBITS(); state->mode = TIME; + /* fallthrough */ case TIME: NEEDBITS(32); if (state->head != Z_NULL) @@ -730,6 +732,7 @@ int ZEXPORT inflate( CRC4(state->check, hold); INITBITS(); state->mode = OS; + /* fallthrough */ case OS: NEEDBITS(16); if (state->head != Z_NULL) { @@ -740,7 +743,7 @@ int ZEXPORT inflate( CRC2(state->check, hold); INITBITS(); state->mode = EXLEN; - /* FALLTHROUGH */ + /* fallthrough */ case EXLEN: if (state->flags & 0x0400) { NEEDBITS(16); @@ -754,16 +757,15 @@ int ZEXPORT inflate( else if (state->head != Z_NULL) state->head->extra = Z_NULL; state->mode = EXTRA; - /* FALLTHROUGH */ + /* fallthrough */ case EXTRA: if (state->flags & 0x0400) { copy = state->length; if (copy > have) copy = have; if (copy) { if (state->head != Z_NULL && - state->head->extra != Z_NULL && - (len = state->head->extra_len - state->length) < - state->head->extra_max) { + state->head->extra != Z_NULL) { + len = state->head->extra_len - state->length; zmemcpy(state->head->extra + len, next, len + copy > state->head->extra_max ? state->head->extra_max - len : copy); @@ -778,7 +780,7 @@ int ZEXPORT inflate( } state->length = 0; state->mode = NAME; - /* FALLTHROUGH */ + /* fallthrough */ case NAME: if (state->flags & 0x0800) { if (have == 0) goto inf_leave; @@ -800,7 +802,7 @@ int ZEXPORT inflate( state->head->name = Z_NULL; state->length = 0; state->mode = COMMENT; - /* FALLTHROUGH */ + /* fallthrough */ case COMMENT: if (state->flags & 0x1000) { if (have == 0) goto inf_leave; @@ -821,7 +823,7 @@ int ZEXPORT inflate( else if (state->head != Z_NULL) state->head->comment = Z_NULL; state->mode = HCRC; - /* FALLTHROUGH */ + /* fallthrough */ case HCRC: if (state->flags & 0x0200) { NEEDBITS(16); @@ -845,7 +847,7 @@ int ZEXPORT inflate( strm->adler = state->check = ZSWAP32(hold); INITBITS(); state->mode = DICT; - /* FALLTHROUGH */ + /* fallthrough */ case DICT: if (state->havedict == 0) { RESTORE(); @@ -853,10 +855,10 @@ int ZEXPORT inflate( } strm->adler = state->check = adler32(0L, Z_NULL, 0); state->mode = TYPE; - /* FALLTHROUGH */ + /* fallthrough */ case TYPE: if (flush == Z_BLOCK || flush == Z_TREES) goto inf_leave; - /* FALLTHROUGH */ + /* fallthrough */ case TYPEDO: if (state->last) { BYTEBITS(); @@ -907,10 +909,10 @@ int ZEXPORT inflate( INITBITS(); state->mode = COPY_; if (flush == Z_TREES) goto inf_leave; - /* FALLTHROUGH */ + /* fallthrough */ case COPY_: state->mode = COPY; - /* FALLTHROUGH */ + /* fallthrough */ case COPY: copy = state->length; if (copy) { @@ -946,6 +948,7 @@ int ZEXPORT inflate( Tracev((stderr, "inflate: table sizes ok\n")); state->have = 0; state->mode = LENLENS; + /* fallthrough */ case LENLENS: while (state->have < state->ncode) { NEEDBITS(3); @@ -967,6 +970,7 @@ int ZEXPORT inflate( Tracev((stderr, "inflate: code lengths ok\n")); state->have = 0; state->mode = CODELENS; + /* fallthrough */ case CODELENS: while (state->have < state->nlen + state->ndist) { for (;;) { @@ -1050,10 +1054,10 @@ int ZEXPORT inflate( Tracev((stderr, "inflate: codes ok\n")); state->mode = LEN_; if (flush == Z_TREES) goto inf_leave; - /* FALLTHROUGH */ + /* fallthrough */ case LEN_: state->mode = LEN; - /* FALLTHROUGH */ + /* fallthrough */ case LEN: if (have >= 6 && left >= 258) { RESTORE(); @@ -1103,7 +1107,7 @@ int ZEXPORT inflate( } state->extra = (unsigned)(here.op) & 15; state->mode = LENEXT; - /* FALLTHROUGH */ + /* fallthrough */ case LENEXT: if (state->extra) { NEEDBITS(state->extra); @@ -1114,7 +1118,7 @@ int ZEXPORT inflate( Tracevv((stderr, "inflate: length %u\n", state->length)); state->was = state->length; state->mode = DIST; - /* FALLTHROUGH */ + /* fallthrough */ case DIST: for (;;) { here = state->distcode[BITS(state->distbits)]; @@ -1142,7 +1146,7 @@ int ZEXPORT inflate( state->offset = (unsigned)here.val; state->extra = (unsigned)(here.op) & 15; state->mode = DISTEXT; - /* FALLTHROUGH */ + /* fallthrough */ case DISTEXT: if (state->extra) { NEEDBITS(state->extra); @@ -1159,7 +1163,7 @@ int ZEXPORT inflate( #endif Tracevv((stderr, "inflate: distance %u\n", state->offset)); state->mode = MATCH; - /* FALLTHROUGH */ + /* fallthrough */ case MATCH: if (left == 0) goto inf_leave; copy = out - left; @@ -1219,7 +1223,7 @@ int ZEXPORT inflate( state->total += out; if ((state->wrap & 4) && out) strm->adler = state->check = - UPDATE(state->check, put - out, out); + UPDATE_CHECK(state->check, put - out, out); out = left; if ((state->wrap & 4) && ( #ifdef GUNZIP @@ -1235,11 +1239,11 @@ int ZEXPORT inflate( } #ifdef GUNZIP state->mode = LENGTH; - /* FALLTHROUGH */ + /* fallthrough */ case LENGTH: if (state->wrap && state->flags) { NEEDBITS(32); - if (hold != (state->total & 0xffffffffUL)) { + if ((state->wrap & 4) && hold != (state->total & 0xffffffff)) { strm->msg = (char *)"incorrect length check"; state->mode = BAD; break; @@ -1249,7 +1253,7 @@ int ZEXPORT inflate( } #endif state->mode = DONE; - /* FALLTHROUGH */ + /* fallthrough */ case DONE: ret = Z_STREAM_END; goto inf_leave; @@ -1259,6 +1263,7 @@ int ZEXPORT inflate( case MEM: return Z_MEM_ERROR; case SYNC: + /* fallthrough */ default: return Z_STREAM_ERROR; } @@ -1284,7 +1289,7 @@ int ZEXPORT inflate( state->total += out; if ((state->wrap & 4) && out) strm->adler = state->check = - UPDATE(state->check, strm->next_out - out, out); + UPDATE_CHECK(state->check, strm->next_out - out, out); strm->data_type = (int)state->bits + (state->last ? 64 : 0) + (state->mode == TYPE ? 128 : 0) + (state->mode == LEN_ || state->mode == COPY_ ? 256 : 0); @@ -1420,6 +1425,7 @@ int ZEXPORT inflateSync( z_streamp strm) { unsigned len; /* number of bytes to look at or looked at */ + int flags; /* temporary to save header status */ unsigned long in, out; /* temporary to save total_in and total_out */ unsigned char buf[4]; /* to restore bit buffer to byte string */ struct inflate_state FAR *state; @@ -1452,9 +1458,15 @@ int ZEXPORT inflateSync( /* return no joy or set up to restart inflate() on a new block */ if (state->have != 4) return Z_DATA_ERROR; + if (state->flags == -1) + state->wrap = 0; /* if no header yet, treat as raw */ + else + state->wrap &= ~4; /* no point in computing a check value now */ + flags = state->flags; in = strm->total_in; out = strm->total_out; inflateReset(strm); strm->total_in = in; strm->total_out = out; + state->flags = flags; state->mode = TYPE; return Z_OK; } @@ -1550,7 +1562,7 @@ int ZEXPORT inflateValidate( if (inflateStateCheck(strm)) return Z_STREAM_ERROR; state = (struct inflate_state FAR *)strm->state; - if (check) + if (check && state->wrap) state->wrap |= 4; else state->wrap &= ~4; diff --git a/gnu/usr.bin/perl/cpan/Compress-Raw-Zlib/zlib-src/trees.c b/gnu/usr.bin/perl/cpan/Compress-Raw-Zlib/zlib-src/trees.c index 93a2a68c0c3..658b8682ef8 100644 --- a/gnu/usr.bin/perl/cpan/Compress-Raw-Zlib/zlib-src/trees.c +++ b/gnu/usr.bin/perl/cpan/Compress-Raw-Zlib/zlib-src/trees.c @@ -1,5 +1,5 @@ /* trees.c -- output deflated data using Huffman coding - * Copyright (C) 1995-2017 Jean-loup Gailly + * Copyright (C) 1995-2021 Jean-loup Gailly * detect_data_type() function provided freely by Cosmin Truta, 2006 * For conditions of distribution and use, see copyright notice in zlib.h */ @@ -149,7 +149,7 @@ local void send_all_trees OF((deflate_state *s, int lcodes, int dcodes, local void compress_block OF((deflate_state *s, const ct_data *ltree, const ct_data *dtree)); local int detect_data_type OF((deflate_state *s)); -local unsigned bi_reverse OF((unsigned value, int length)); +local unsigned bi_reverse OF((unsigned code, int len)); local void bi_windup OF((deflate_state *s)); local void bi_flush OF((deflate_state *s)); @@ -872,7 +872,8 @@ void ZLIB_INTERNAL _tr_stored_block( bi_windup(s); /* align on byte boundary */ put_short(s, (ush)stored_len); put_short(s, (ush)~stored_len); - zmemcpy(s->pending_buf + s->pending, (Bytef *)buf, stored_len); + if (stored_len) + zmemcpy(s->pending_buf + s->pending, (Bytef *)buf, stored_len); s->pending += stored_len; #ifdef ZLIB_DEBUG s->compressed_len = (s->compressed_len + 3 + 7) & (ulg)~7L; @@ -1092,9 +1093,9 @@ local void compress_block( * Check if the data type is TEXT or BINARY, using the following algorithm: * - TEXT if the two conditions below are satisfied: * a) There are no non-portable control characters belonging to the - * "black list" (0..6, 14..25, 28..31). + * "block list" (0..6, 14..25, 28..31). * b) There is at least one printable character belonging to the - * "white list" (9 {TAB}, 10 {LF}, 13 {CR}, 32..255). + * "allow list" (9 {TAB}, 10 {LF}, 13 {CR}, 32..255). * - BINARY otherwise. * - The following partially-portable control characters form a * "gray list" that is ignored in this detection algorithm: @@ -1104,19 +1105,19 @@ local void compress_block( local int detect_data_type( deflate_state *s) { - /* black_mask is the bit mask of black-listed bytes + /* block_mask is the bit mask of block-listed bytes * set bits 0..6, 14..25, and 28..31 * 0xf3ffc07f = binary 11110011111111111100000001111111 */ - unsigned long black_mask = 0xf3ffc07fUL; + unsigned long block_mask = 0xf3ffc07fUL; int n; - /* Check for non-textual ("black-listed") bytes. */ - for (n = 0; n <= 31; n++, black_mask >>= 1) - if ((black_mask & 1) && (s->dyn_ltree[n].Freq != 0)) + /* Check for non-textual ("block-listed") bytes. */ + for (n = 0; n <= 31; n++, block_mask >>= 1) + if ((block_mask & 1) && (s->dyn_ltree[n].Freq != 0)) return Z_BINARY; - /* Check for textual ("white-listed") bytes. */ + /* Check for textual ("allow-listed") bytes. */ if (s->dyn_ltree[9].Freq != 0 || s->dyn_ltree[10].Freq != 0 || s->dyn_ltree[13].Freq != 0) return Z_TEXT; @@ -1124,7 +1125,7 @@ local int detect_data_type( if (s->dyn_ltree[n].Freq != 0) return Z_TEXT; - /* There are no "black-listed" or "white-listed" bytes: + /* There are no "block-listed" or "allow-listed" bytes: * this stream either is empty or has tolerated ("gray-listed") bytes only. */ return Z_BINARY; diff --git a/gnu/usr.bin/perl/cpan/Compress-Raw-Zlib/zlib-src/zconf.h b/gnu/usr.bin/perl/cpan/Compress-Raw-Zlib/zlib-src/zconf.h index 5e1d68a004e..9d8847366a6 100644 --- a/gnu/usr.bin/perl/cpan/Compress-Raw-Zlib/zlib-src/zconf.h +++ b/gnu/usr.bin/perl/cpan/Compress-Raw-Zlib/zlib-src/zconf.h @@ -18,46 +18,46 @@ # define Z_PREFIX_SET /* all linked symbols and init macros */ -# define _dist_code z__dist_code -# define _length_code z__length_code -# define _tr_align z__tr_align -# define _tr_flush_bits z__tr_flush_bits -# define _tr_flush_block z__tr_flush_block -# define _tr_init z__tr_init -# define _tr_stored_block z__tr_stored_block -# define _tr_tally z__tr_tally -# define adler32 z_adler32 -# define adler32_combine z_adler32_combine -# define adler32_combine64 z_adler32_combine64 -# define adler32_z z_adler32_z +# define _dist_code Perl_crz__dist_code +# define _length_code Perl_crz__length_code +# define _tr_align Perl_crz__tr_align +# define _tr_flush_bits Perl_crz__tr_flush_bits +# define _tr_flush_block Perl_crz__tr_flush_block +# define _tr_init Perl_crz__tr_init +# define _tr_stored_block Perl_crz__tr_stored_block +# define _tr_tally Perl_crz__tr_tally +# define adler32 Perl_crz_adler32 +# define adler32_combine Perl_crz_adler32_combine +# define adler32_combine64 Perl_crz_adler32_combine64 +# define adler32_z Perl_crz_adler32_z # ifndef Z_SOLO # define compress z_compress # define compress2 z_compress2 # define compressBound z_compressBound # endif -# define crc32 z_crc32 -# define crc32_combine z_crc32_combine -# define crc32_combine64 z_crc32_combine64 -# define crc32_z z_crc32_z -# define deflate z_deflate -# define deflateBound z_deflateBound -# define deflateCopy z_deflateCopy -# define deflateEnd z_deflateEnd -# define deflateGetDictionary z_deflateGetDictionary -# define deflateInit z_deflateInit -# define deflateInit2 z_deflateInit2 -# define deflateInit2_ z_deflateInit2_ -# define deflateInit_ z_deflateInit_ -# define deflateParams z_deflateParams -# define deflatePending z_deflatePending -# define deflatePrime z_deflatePrime -# define deflateReset z_deflateReset -# define deflateResetKeep z_deflateResetKeep -# define deflateSetDictionary z_deflateSetDictionary -# define deflateSetHeader z_deflateSetHeader -# define deflateTune z_deflateTune -# define deflate_copyright z_deflate_copyright -# define get_crc_table z_get_crc_table +# define crc32 Perl_crz_crc32 +# define crc32_combine Perl_crz_crc32_combine +# define crc32_combine64 Perl_crz_crc32_combine64 +# define crc32_z Perl_crz_crc32_z +# define deflate Perl_crz_deflate +# define deflateBound Perl_crz_deflateBound +# define deflateCopy Perl_crz_deflateCopy +# define deflateEnd Perl_crz_deflateEnd +# define deflateGetDictionary Perl_crz_deflateGetDictionary +# define deflateInit Perl_crz_deflateInit +# define deflateInit2 Perl_crz_deflateInit2 +# define deflateInit2_ Perl_crz_deflateInit2_ +# define deflateInit_ Perl_crz_deflateInit_ +# define deflateParams Perl_crz_deflateParams +# define deflatePending Perl_crz_deflatePending +# define deflatePrime Perl_crz_deflatePrime +# define deflateReset Perl_crz_deflateReset +# define deflateResetKeep Perl_crz_deflateResetKeep +# define deflateSetDictionary Perl_crz_deflateSetDictionary +# define deflateSetHeader Perl_crz_deflateSetHeader +# define deflateTune Perl_crz_deflateTune +# define deflate_copyright Perl_crz_deflate_copyright +# define get_crc_table Perl_crz_get_crc_table # ifndef Z_SOLO # define gz_error z_gz_error # define gz_intmax z_gz_intmax @@ -98,70 +98,70 @@ # define gzvprintf z_gzvprintf # define gzwrite z_gzwrite # endif -# define inflate z_inflate -# define inflateBack z_inflateBack -# define inflateBackEnd z_inflateBackEnd -# define inflateBackInit z_inflateBackInit -# define inflateBackInit_ z_inflateBackInit_ -# define inflateCodesUsed z_inflateCodesUsed -# define inflateCopy z_inflateCopy -# define inflateEnd z_inflateEnd -# define inflateGetDictionary z_inflateGetDictionary -# define inflateGetHeader z_inflateGetHeader -# define inflateInit z_inflateInit -# define inflateInit2 z_inflateInit2 -# define inflateInit2_ z_inflateInit2_ -# define inflateInit_ z_inflateInit_ -# define inflateMark z_inflateMark -# define inflatePrime z_inflatePrime -# define inflateReset z_inflateReset -# define inflateReset2 z_inflateReset2 -# define inflateResetKeep z_inflateResetKeep -# define inflateSetDictionary z_inflateSetDictionary -# define inflateSync z_inflateSync -# define inflateSyncPoint z_inflateSyncPoint -# define inflateUndermine z_inflateUndermine -# define inflateValidate z_inflateValidate -# define inflate_copyright z_inflate_copyright -# define inflate_fast z_inflate_fast -# define inflate_table z_inflate_table +# define inflate Perl_crz_inflate +# define inflateBack Perl_crz_inflateBack +# define inflateBackEnd Perl_crz_inflateBackEnd +# define inflateBackInit Perl_crz_inflateBackInit +# define inflateBackInit_ Perl_crz_inflateBackInit_ +# define inflateCodesUsed Perl_crz_inflateCodesUsed +# define inflateCopy Perl_crz_inflateCopy +# define inflateEnd Perl_crz_inflateEnd +# define inflateGetDictionary Perl_crz_inflateGetDictionary +# define inflateGetHeader Perl_crz_inflateGetHeader +# define inflateInit Perl_crz_inflateInit +# define inflateInit2 Perl_crz_inflateInit2 +# define inflateInit2_ Perl_crz_inflateInit2_ +# define inflateInit_ Perl_crz_inflateInit_ +# define inflateMark Perl_crz_inflateMark +# define inflatePrime Perl_crz_inflatePrime +# define inflateReset Perl_crz_inflateReset +# define inflateReset2 Perl_crz_inflateReset2 +# define inflateResetKeep Perl_crz_inflateResetKeep +# define inflateSetDictionary Perl_crz_inflateSetDictionary +# define inflateSync Perl_crz_inflateSync +# define inflateSyncPoint Perl_crz_inflateSyncPoint +# define inflateUndermine Perl_crz_inflateUndermine +# define inflateValidate Perl_crz_inflateValidate +# define inflate_copyright Perl_crz_inflate_copyright +# define inflate_fast Perl_crz_inflate_fast +# define inflate_table Perl_crz_inflate_table # ifndef Z_SOLO # define uncompress z_uncompress # define uncompress2 z_uncompress2 # endif -# define zError z_zError +# define zError Perl_crz_zError # ifndef Z_SOLO # define zcalloc z_zcalloc # define zcfree z_zcfree # endif -# define zlibCompileFlags z_zlibCompileFlags -# define zlibVersion z_zlibVersion +# define zlibCompileFlags Perl_crz_zlibCompileFlags +# define zlibVersion Perl_crz_zlibVersion /* all zlib typedefs in zlib.h and zconf.h */ -# define Byte z_Byte -# define Bytef z_Bytef -# define alloc_func z_alloc_func -# define charf z_charf -# define free_func z_free_func +# define Byte Perl_crz_Byte +# define Bytef Perl_crz_Bytef +# define alloc_func Perl_crz_alloc_func +# define charf Perl_crz_charf +# define free_func Perl_crz_free_func # ifndef Z_SOLO # define gzFile z_gzFile # endif -# define gz_header z_gz_header -# define gz_headerp z_gz_headerp -# define in_func z_in_func -# define intf z_intf -# define out_func z_out_func -# define uInt z_uInt -# define uIntf z_uIntf -# define uLong z_uLong -# define uLongf z_uLongf -# define voidp z_voidp -# define voidpc z_voidpc -# define voidpf z_voidpf +# define gz_header Perl_crz_gz_header +# define gz_headerp Perl_crz_gz_headerp +# define in_func Perl_crz_in_func +# define intf Perl_crz_intf +# define out_func Perl_crz_out_func +# define uInt Perl_crz_uInt +# define uIntf Perl_crz_uIntf +# define uLong Perl_crz_uLong +# define uLongf Perl_crz_uLongf +# define voidp Perl_crz_voidp +# define voidpc Perl_crz_voidpc +# define voidpf Perl_crz_voidpf /* all zlib structs in zlib.h and zconf.h */ -# define gz_header_s z_gz_header_s -# define internal_state z_internal_state +# define gz_header_s Perl_crz_gz_header_s +# define internal_state Perl_crz_internal_state #endif diff --git a/gnu/usr.bin/perl/cpan/Compress-Raw-Zlib/zlib-src/zutil.c b/gnu/usr.bin/perl/cpan/Compress-Raw-Zlib/zlib-src/zutil.c index ff06651f23f..a19ac2b96dd 100644 --- a/gnu/usr.bin/perl/cpan/Compress-Raw-Zlib/zlib-src/zutil.c +++ b/gnu/usr.bin/perl/cpan/Compress-Raw-Zlib/zlib-src/zutil.c @@ -136,8 +136,8 @@ const char * ZEXPORT zError( return ERR_MSG(err); } -#if defined(_WIN32_WCE) - /* The Microsoft C Run-Time Library for Windows CE doesn't have +#if defined(_WIN32_WCE) && _WIN32_WCE < 0x800 + /* The older Microsoft C Run-Time Library for Windows CE doesn't have * errno. We define it as a global variable to simplify porting. * Its value is always 0 and should not be used. */ diff --git a/gnu/usr.bin/perl/cpan/Compress-Raw-Zlib/zlib-src/zutil.h b/gnu/usr.bin/perl/cpan/Compress-Raw-Zlib/zlib-src/zutil.h index da852de01eb..2ee0791ff63 100644 --- a/gnu/usr.bin/perl/cpan/Compress-Raw-Zlib/zlib-src/zutil.h +++ b/gnu/usr.bin/perl/cpan/Compress-Raw-Zlib/zlib-src/zutil.h @@ -1,5 +1,5 @@ /* zutil.h -- internal interface and configuration of the compression library - * Copyright (C) 1995-2016 Jean-loup Gailly, Mark Adler + * Copyright (C) 1995-2022 Jean-loup Gailly, Mark Adler * For conditions of distribution and use, see copyright notice in zlib.h */ @@ -33,10 +33,6 @@ extern "C" { # include #endif -#ifdef Z_SOLO - typedef long ptrdiff_t; /* guess -- will be caught if guess is wrong */ -#endif - #ifndef local # define local static #endif @@ -50,6 +46,17 @@ typedef unsigned short ush; typedef ush FAR ushf; typedef unsigned long ulg; +#if !defined(Z_U8) && !defined(Z_SOLO) && defined(STDC) +# include +# if (ULONG_MAX == 0xffffffffffffffff) +# define Z_U8 unsigned long +# elif (ULLONG_MAX == 0xffffffffffffffff) +# define Z_U8 unsigned long long +# elif (UINT_MAX == 0xffffffffffffffff) +# define Z_U8 unsigned +# endif +#endif + extern z_const char * const z_errmsg[10]; /* indexed by 2-zlib_error */ /* (size given to avoid silly warnings with Visual C++) */ @@ -174,10 +181,6 @@ extern z_const char * const z_errmsg[10]; /* indexed by 2-zlib_error */ #if (defined(_MSC_VER) && (_MSC_VER > 600)) && !defined __INTERIX # if defined(_WIN32_WCE) # define fdopen(fd,mode) NULL /* No fdopen() */ -# ifndef _PTRDIFF_T_DEFINED - typedef int ptrdiff_t; -# define _PTRDIFF_T_DEFINED -# endif # else # define fdopen(fd,type) _fdopen(fd,type) # endif @@ -274,5 +277,5 @@ extern z_const char * const z_errmsg[10]; /* indexed by 2-zlib_error */ #ifdef __cplusplus } -#endif +#endif #endif /* ZUTIL_H */ diff --git a/gnu/usr.bin/perl/cpan/Config-Perl-V/V.pm b/gnu/usr.bin/perl/cpan/Config-Perl-V/V.pm index dbb0f88ec15..774446a83f6 100644 --- a/gnu/usr.bin/perl/cpan/Config-Perl-V/V.pm +++ b/gnu/usr.bin/perl/cpan/Config-Perl-V/V.pm @@ -6,12 +6,12 @@ use warnings; use Config; use Exporter; use vars qw($VERSION @ISA @EXPORT_OK %EXPORT_TAGS); -$VERSION = "0.32"; +$VERSION = "0.33"; @ISA = qw( Exporter ); @EXPORT_OK = qw( plv2hash summary myconfig signature ); %EXPORT_TAGS = ( - all => [ @EXPORT_OK ], - sig => [ "signature" ], + 'all' => [ @EXPORT_OK ], + 'sig' => [ "signature" ], ); # Characteristics of this binary (from libperl): @@ -24,7 +24,7 @@ $VERSION = "0.32"; # perl -ne'(/^S_Internals_V/../^}/)&&s/^\s+"( .*)"/$1/ and print' perl.c # perl.h line 4566 PL_bincompat_options # perl -ne'(/^\w.*PL_bincompat/../^\w}/)&&s/^\s+"( .*)"/$1/ and print' perl.h -my %BTD = map { $_ => 0 } qw( +my %BTD = map {( $_ => 0 )} qw( DEBUGGING NO_HASH_SEED @@ -183,52 +183,52 @@ my @config_vars = qw( ); my %empty_build = ( - osname => "", - stamp => 0, - options => { %BTD }, - patches => [], + 'osname' => "", + 'stamp' => 0, + 'options' => { %BTD }, + 'patches' => [], ); sub _make_derived { my $conf = shift; - for ( [ lseektype => "Off_t" ], - [ myuname => "uname" ], - [ perl_patchlevel => "patch" ], + for ( [ 'lseektype' => "Off_t" ], + [ 'myuname' => "uname" ], + [ 'perl_patchlevel' => "patch" ], ) { - my ($official, $derived) = @$_; - $conf->{config}{$derived} ||= $conf->{config}{$official}; - $conf->{config}{$official} ||= $conf->{config}{$derived}; - $conf->{derived}{$derived} = delete $conf->{config}{$derived}; + my ($official, $derived) = @{$_}; + $conf->{'config'}{$derived} ||= $conf->{'config'}{$official}; + $conf->{'config'}{$official} ||= $conf->{'config'}{$derived}; + $conf->{'derived'}{$derived} = delete $conf->{'config'}{$derived}; } - if (exists $conf->{config}{version_patchlevel_string} && - !exists $conf->{config}{api_version}) { - my $vps = $conf->{config}{version_patchlevel_string}; + if (exists $conf->{'config'}{'version_patchlevel_string'} && + !exists $conf->{'config'}{'api_version'}) { + my $vps = $conf->{'config'}{'version_patchlevel_string'}; $vps =~ s{\b revision \s+ (\S+) }{}x and - $conf->{config}{revision} ||= $1; + $conf->{'config'}{'revision'} ||= $1; $vps =~ s{\b version \s+ (\S+) }{}x and - $conf->{config}{api_version} ||= $1; + $conf->{'config'}{'api_version'} ||= $1; $vps =~ s{\b subversion \s+ (\S+) }{}x and - $conf->{config}{subversion} ||= $1; + $conf->{'config'}{'subversion'} ||= $1; $vps =~ s{\b patch \s+ (\S+) }{}x and - $conf->{config}{perl_patchlevel} ||= $1; + $conf->{'config'}{'perl_patchlevel'} ||= $1; } - ($conf->{config}{version_patchlevel_string} ||= join " ", - map { ($_, $conf->{config}{$_} ) } - grep { $conf->{config}{$_} } + ($conf->{'config'}{'version_patchlevel_string'} ||= join " ", + map { ($_, $conf->{'config'}{$_} ) } + grep { $conf->{'config'}{$_} } qw( api_version subversion perl_patchlevel )) =~ s/\bperl_//; - $conf->{config}{perl_patchlevel} ||= ""; # 0 is not a valid patchlevel + $conf->{'config'}{'perl_patchlevel'} ||= ""; # 0 is not a valid patchlevel - if ($conf->{config}{perl_patchlevel} =~ m{^git\w*-([^-]+)}i) { - $conf->{config}{git_branch} ||= $1; - $conf->{config}{git_describe} ||= $conf->{config}{perl_patchlevel}; + if ($conf->{'config'}{'perl_patchlevel'} =~ m{^git\w*-([^-]+)}i) { + $conf->{'config'}{'git_branch'} ||= $1; + $conf->{'config'}{'git_describe'} ||= $conf->{'config'}{'perl_patchlevel'}; } - $conf->{config}{$_} ||= "undef" for grep m/^(?:use|def)/ => @config_vars; + $conf->{'config'}{$_} ||= "undef" for grep m{^(?:use|def)} => @config_vars; $conf; } # _make_derived @@ -238,20 +238,20 @@ sub plv2hash { my $pv = join "\n" => @_; - if ($pv =~ m/^Summary of my\s+(\S+)\s+\(\s*(.*?)\s*\)/m) { - $config{"package"} = $1; + if ($pv =~ m{^Summary of my\s+(\S+)\s+\(\s*(.*?)\s*\)}m) { + $config{'package'} = $1; my $rev = $2; - $rev =~ s/^ revision \s+ (\S+) \s*//x and $config{revision} = $1; - $rev and $config{version_patchlevel_string} = $rev; - my ($rel) = $config{"package"} =~ m{perl(\d)}; + $rev =~ s/^ revision \s+ (\S+) \s*//x and $config{'revision'} = $1; + $rev and $config{'version_patchlevel_string'} = $rev; + my ($rel) = $config{'package'} =~ m{perl(\d)}; my ($vers, $subvers) = $rev =~ m{version\s+(\d+)\s+subversion\s+(\d+)}; defined $vers && defined $subvers && defined $rel and - $config{version} = "$rel.$vers.$subvers"; + $config{'version'} = "$rel.$vers.$subvers"; } - if ($pv =~ m/^\s+(Snapshot of:)\s+(\S+)/) { - $config{git_commit_id_title} = $1; - $config{git_commit_id} = $2; + if ($pv =~ m{^\s+(Snapshot of:)\s+(\S+)}) { + $config{'git_commit_id_title'} = $1; + $config{'git_commit_id'} = $2; } # these are always last on line and can have multiple quotation styles @@ -275,11 +275,11 @@ sub plv2hash { }gx)) { # between every kv pair while (my ($k, $v) = each %kv) { - $k =~ s/\s+$//; - $v =~ s/\s*\n\z//; - $v =~ s/,$//; - $v =~ m/^'(.*)'$/ and $v = $1; - $v =~ s/\s+$//; + $k =~ s{\s+$} {}; + $v =~ s{\s*\n\z} {}; + $v =~ s{,$} {}; + $v =~ m{^'(.*)'$} and $v = $1; + $v =~ s{\s+$} {}; $config{$k} = $v; } } @@ -287,36 +287,36 @@ sub plv2hash { my $build = { %empty_build }; $pv =~ m{^\s+Compiled at\s+(.*)}m - and $build->{stamp} = $1; + and $build->{'stamp'} = $1; $pv =~ m{^\s+Locally applied patches:(?:\s+|\n)(.*?)(?:[\s\n]+Buil[td] under)}ms - and $build->{patches} = [ split m/\n+\s*/, $1 ]; + and $build->{'patches'} = [ split m{\n+\s*}, $1 ]; $pv =~ m{^\s+Compile-time options:(?:\s+|\n)(.*?)(?:[\s\n]+(?:Locally applied|Buil[td] under))}ms - and map { $build->{options}{$_} = 1 } split m/\s+|\n/ => $1; + and map { $build->{'options'}{$_} = 1 } split m{\s+|\n} => $1; - $build->{osname} = $config{osname}; + $build->{'osname'} = $config{'osname'}; $pv =~ m{^\s+Built under\s+(.*)}m - and $build->{osname} = $1; - $config{osname} ||= $build->{osname}; + and $build->{'osname'} = $1; + $config{'osname'} ||= $build->{'osname'}; return _make_derived ({ - build => $build, - environment => {}, - config => \%config, - derived => {}, - inc => [], + 'build' => $build, + 'environment' => {}, + 'config' => \%config, + 'derived' => {}, + 'inc' => [], }); } # plv2hash sub summary { my $conf = shift || myconfig (); ref $conf eq "HASH" - && exists $conf->{config} - && exists $conf->{build} - && ref $conf->{config} eq "HASH" - && ref $conf->{build} eq "HASH" or return; + && exists $conf->{'config'} + && exists $conf->{'build'} + && ref $conf->{'config'} eq "HASH" + && ref $conf->{'build'} eq "HASH" or return; my %info = map { - exists $conf->{config}{$_} ? ( $_ => $conf->{config}{$_} ) : () } + exists $conf->{'config'}{$_} ? ( $_ => $conf->{'config'}{$_} ) : () } qw( archname osname osvers revision patchlevel subversion version cc ccversion gccversion config_args inc_version_list d_longdbl d_longlong use64bitall use64bitint useithreads @@ -324,7 +324,7 @@ sub summary { doublesize intsize ivsize nvsize longdblsize longlongsize lseeksize default_inc_excludes_dot ); - $info{$_}++ for grep { $conf->{build}{options}{$_} } keys %{$conf->{build}{options}}; + $info{$_}++ for grep { $conf->{'build'}{'options'}{$_} } keys %{$conf->{'build'}{'options'}}; return \%info; } # summary @@ -336,19 +336,19 @@ sub signature { eval { require Digest::MD5 }; $@ and return $no_md5; - $conf->{cc} =~ s{.*\bccache\s+}{}; - $conf->{cc} =~ s{.*[/\\]}{}; + $conf->{'cc'} =~ s{.*\bccache\s+}{}; + $conf->{'cc'} =~ s{.*[/\\]}{}; - delete $conf->{config_args}; + delete $conf->{'config_args'}; return Digest::MD5::md5_hex (join "\xFF" => map { "$_=".(defined $conf->{$_} ? $conf->{$_} : "\xFE"); - } sort keys %$conf); + } sort keys %{$conf}); } # signature sub myconfig { my $args = shift; - my %args = ref $args eq "HASH" ? %$args : - ref $args eq "ARRAY" ? @$args : (); + my %args = ref $args eq "HASH" ? %{$args} : + ref $args eq "ARRAY" ? @{$args} : (); my $build = { %empty_build }; @@ -356,33 +356,34 @@ sub myconfig { my $stamp = eval { Config::compile_date () }; if (defined $stamp) { $stamp =~ s/^Compiled at //; - $build->{osname} = $^O; - $build->{stamp} = $stamp; - $build->{patches} = [ Config::local_patches () ]; - $build->{options}{$_} = 1 for Config::bincompat_options (), - Config::non_bincompat_options (); + $build->{'osname'} = $^O; + $build->{'stamp'} = $stamp; + $build->{'patches'} = [ Config::local_patches () ]; + $build->{'options'}{$_} = 1 for Config::bincompat_options (), + Config::non_bincompat_options (); } else { #y $pv = qx[$^X -e"sub Config::myconfig{};" -V]; my $cnf = plv2hash (qx[$^X -V]); - $build->{$_} = $cnf->{build}{$_} for qw( osname stamp patches options ); + $build->{$_} = $cnf->{'build'}{$_} for qw( osname stamp patches options ); } my @KEYS = keys %ENV; my %env = - map { $_ => $ENV{$_} } grep m/^PERL/ => @KEYS; - $args{env} and - map { $env{$_} = $ENV{$_} } grep m{$args{env}} => @KEYS; + map {( $_ => $ENV{$_} )} grep m{^PERL} => @KEYS; + if ($args{'env'}) { + $env{$_} = $ENV{$_} for grep m{$args{'env'}} => @KEYS; + } my %config = map { $_ => $Config{$_} } @config_vars; return _make_derived ({ - build => $build, - environment => \%env, - config => \%config, - derived => {}, - inc => \@INC, + 'build' => $build, + 'environment' => \%env, + 'config' => \%config, + 'derived' => {}, + 'inc' => \@INC, }); } # myconfig @@ -553,7 +554,7 @@ H.Merijn Brand =head1 COPYRIGHT AND LICENSE -Copyright (C) 2009-2018 H.Merijn Brand +Copyright (C) 2009-2020 H.Merijn Brand This library is free software; you can redistribute it and/or modify it under the same terms as Perl itself. diff --git a/gnu/usr.bin/perl/cpan/DB_File/DB_File.pm b/gnu/usr.bin/perl/cpan/DB_File/DB_File.pm index a732ff41e09..22f2bdc6968 100644 --- a/gnu/usr.bin/perl/cpan/DB_File/DB_File.pm +++ b/gnu/usr.bin/perl/cpan/DB_File/DB_File.pm @@ -1,8 +1,8 @@ -# DB_File.pm -- Perl 5 interface to Berkeley DB +# DB_File.pm -- Perl 5 interface to Berkeley DB # # Written by Paul Marquess (pmqs@cpan.org) # -# Copyright (c) 1995-2020 Paul Marquess. All rights reserved. +# Copyright (c) 1995-2022 Paul Marquess. All rights reserved. # This program is free software; you can redistribute it and/or # modify it under the same terms as Perl itself. @@ -30,21 +30,21 @@ sub TIEHASH { my $pkg = shift ; - bless { VALID => { + bless { VALID => { bsize => 1, ffactor => 1, nelem => 1, cachesize => 1, hash => 2, lorder => 1, - }, + }, GOT => {} }, $pkg ; } -sub FETCH -{ +sub FETCH +{ my $self = shift ; my $key = shift ; @@ -55,7 +55,7 @@ sub FETCH } -sub STORE +sub STORE { my $self = shift ; my $key = shift ; @@ -65,17 +65,17 @@ sub STORE if ( $type ) { - croak "Key '$key' not associated with a code reference" + croak "Key '$key' not associated with a code reference" if $type == 2 && !ref $value && ref $value ne 'CODE'; $self->{GOT}{$key} = $value ; return ; } - + my $pkg = ref $self ; croak "${pkg}::STORE - Unknown element '$key'" ; } -sub DELETE +sub DELETE { my $self = shift ; my $key = shift ; @@ -85,7 +85,7 @@ sub DELETE delete $self->{GOT}{$key} ; return ; } - + my $pkg = ref $self ; croak "DB_File::HASHINFO::DELETE - Unknown element '$key'" ; } @@ -121,7 +121,7 @@ sub TIEHASH { my $pkg = shift ; - bless { VALID => { map {$_, 1} + bless { VALID => { map {$_, 1} qw( bval cachesize psize flags lorder reclen bfname ) }, GOT => {}, @@ -139,7 +139,7 @@ sub TIEHASH { my $pkg = shift ; - bless { VALID => { + bless { VALID => { flags => 1, cachesize => 1, maxkeypage => 1, @@ -163,28 +163,28 @@ our ($db_version, $use_XSLoader, $splice_end_array_no_length, $splice_end_array, use Carp; # Module not thread safe, so don't clone -sub CLONE_SKIP { 1 } +sub CLONE_SKIP { 1 } -$VERSION = "1.853" ; +$VERSION = "1.857" ; $VERSION = eval $VERSION; # needed for dev releases { local $SIG{__WARN__} = sub {$splice_end_array_no_length = join(" ",@_);}; my @a =(1); splice(@a, 3); - $splice_end_array_no_length = + $splice_end_array_no_length = ($splice_end_array_no_length =~ /^splice\(\) offset past end of array at /); -} +} { local $SIG{__WARN__} = sub {$splice_end_array = join(" ", @_);}; my @a =(1); splice(@a, 3, 1); - $splice_end_array = + $splice_end_array = ($splice_end_array =~ /^splice\(\) offset past end of array at /); -} +} #typedef enum { DB_BTREE, DB_HASH, DB_RECNO } DBTYPE; -$DB_BTREE = new DB_File::BTREEINFO ; -$DB_HASH = new DB_File::HASHINFO ; -$DB_RECNO = new DB_File::RECNOINFO ; +$DB_BTREE = DB_File::BTREEINFO->new(); +$DB_HASH = DB_File::HASHINFO->new(); +$DB_RECNO = DB_File::RECNOINFO->new(); require Tie::Hash; require Exporter; @@ -201,7 +201,7 @@ BEGIN { push @ISA, qw(Tie::Hash Exporter); @EXPORT = qw( - $DB_BTREE $DB_HASH $DB_RECNO + $DB_BTREE $DB_HASH $DB_RECNO BTREEMAGIC BTREEVERSION @@ -242,7 +242,7 @@ sub AUTOLOAD { no strict 'refs'; *{$AUTOLOAD} = sub { $val }; goto &{$AUTOLOAD}; -} +} eval { @@ -256,7 +256,7 @@ eval { if ($use_XSLoader) { XSLoader::load("DB_File", $VERSION)} else - { bootstrap DB_File $VERSION } + { DB_File->bootstrap( $VERSION ) } sub tie_hash_or_array { @@ -264,22 +264,22 @@ sub tie_hash_or_array my $tieHASH = ( (caller(1))[3] =~ /TIEHASH/ ) ; use File::Spec; - $arg[1] = File::Spec->rel2abs($arg[1]) + $arg[1] = File::Spec->rel2abs($arg[1]) if defined $arg[1] ; - $arg[4] = tied %{ $arg[4] } + $arg[4] = tied %{ $arg[4] } if @arg >= 5 && ref $arg[4] && $arg[4] =~ /=HASH/ && tied %{ $arg[4] } ; $arg[2] = O_CREAT()|O_RDWR() if @arg >=3 && ! defined $arg[2]; $arg[3] = 0666 if @arg >=4 && ! defined $arg[3]; - # make recno in Berkeley DB version 2 (or better) work like + # make recno in Berkeley DB version 2 (or better) work like # recno in version 1. if ($db_version >= 4 and ! $tieHASH) { $arg[2] |= O_CREAT(); } - if ($db_version > 1 and defined $arg[4] and $arg[4] =~ /RECNO/ and + if ($db_version > 1 and defined $arg[4] and $arg[4] =~ /RECNO/ and $arg[1] and ! -e $arg[1]) { open(FH, ">$arg[1]") or return undef ; close FH ; @@ -299,20 +299,20 @@ sub TIEARRAY tie_hash_or_array(@_) ; } -sub CLEAR +sub CLEAR { my $self = shift; my $key = 0 ; my $value = "" ; my $status = $self->seq($key, $value, R_FIRST()); my @keys; - + while ($status == 0) { push @keys, $key; $status = $self->seq($key, $value, R_NEXT()); } foreach $key (reverse @keys) { - my $s = $self->del($key); + my $s = $self->del($key); } } @@ -333,7 +333,7 @@ sub STORESIZE $self->put($length-1, "") ; } } - + sub SPLICE { @@ -348,15 +348,15 @@ sub SPLICE my $length = @_ ? shift : 0; # Carping about definedness comes _after_ the OFFSET sanity check. # This is so we get the same error messages as Perl's splice(). - # + # my @list = @_; my $size = $self->FETCHSIZE(); - + # 'If OFFSET is negative then it start that far from the end of # the array.' - # + # if ($offset < 0) { my $new_offset = $size + $offset; if ($new_offset < 0) { @@ -384,7 +384,7 @@ sub SPLICE # 'If LENGTH is negative, leave that many elements off the end of # the array.' - # + # if ($length < 0) { $length = $size - $offset + $length; @@ -392,7 +392,7 @@ sub SPLICE # The user must have specified a length bigger than the # length of the array passed in. But perl's splice() # doesn't catch this, it just behaves as for length=0. - # + # $length = 0; } } @@ -406,7 +406,7 @@ sub SPLICE # 'Removes the elements designated by OFFSET and LENGTH from an # array,'... - # + # my @removed = (); foreach (0 .. $length - 1) { my $old; @@ -480,13 +480,13 @@ sub SPLICE if (wantarray) { # 'In list context, returns the elements removed from the # array.' - # + # return @removed; } elsif (defined wantarray and not wantarray) { # 'In scalar context, returns the last element removed, or # undef if no elements are removed.' - # + # if (@removed) { my $last = pop @removed; return "$last"; @@ -506,7 +506,7 @@ sub find_dup { croak "Usage: \$db->find_dup(key,value)\n" unless @_ == 3 ; - + my $db = shift ; my ($origkey, $value_wanted) = @_ ; my ($key, $value) = ($origkey, 0); @@ -526,7 +526,7 @@ sub del_dup { croak "Usage: \$db->del_dup(key,value)\n" unless @_ == 3 ; - + my $db = shift ; my ($key, $value) = @_ ; my ($status) = $db->find_dup($key, $value) ; @@ -540,7 +540,7 @@ sub get_dup { croak "Usage: \$db->get_dup(key [,flag])\n" unless @_ == 2 or @_ == 3 ; - + my $db = shift ; my $key = shift ; my $flag = shift ; @@ -551,13 +551,13 @@ sub get_dup my @values = () ; my $counter = 0 ; my $status = 0 ; - + # iterate through the database until either EOF ($status == 0) # or a different key is encountered ($key ne $origkey). for ($status = $db->seq($key, $value, R_CURSOR()) ; $status == 0 and $key eq $origkey ; $status = $db->seq($key, $value, R_NEXT()) ) { - + # save the value or count number of matches if ($wantarray) { if ($flag) @@ -567,9 +567,9 @@ sub get_dup } else { ++ $counter } - + } - + return ($wantarray ? ($flag ? %values : @values) : $counter) ; } @@ -723,7 +723,7 @@ Berkeley DB uses the function dbopen() to open or create a database. Here is the C prototype for dbopen(): DB* - dbopen (const char * file, int flags, int mode, + dbopen (const char * file, int flags, int mode, DBTYPE type, const void * openinfo) The parameter C is an enumeration which specifies which of the 3 @@ -749,7 +749,7 @@ Apart from $DB_HASH, there is also $DB_BTREE and $DB_RECNO. The keys allowed in each of these pre-defined references is limited to the names used in the equivalent C structure. So, for example, the $DB_HASH reference will only allow keys called C, C, -C, C, C and C. +C, C, C and C. To change one of these elements, just assign to it like this: @@ -763,7 +763,7 @@ type. Here are examples of the constructors and the valid options available for DB_HASH, DB_BTREE and DB_RECNO respectively. - $a = new DB_File::HASHINFO ; + $a = DB_File::HASHINFO->new(); $a->{'bsize'} ; $a->{'cachesize'} ; $a->{'ffactor'}; @@ -771,7 +771,7 @@ for DB_HASH, DB_BTREE and DB_RECNO respectively. $a->{'lorder'} ; $a->{'nelem'} ; - $b = new DB_File::BTREEINFO ; + $b = DB_File::BTREEINFO->new(); $b->{'flags'} ; $b->{'cachesize'} ; $b->{'maxkeypage'} ; @@ -781,7 +781,7 @@ for DB_HASH, DB_BTREE and DB_RECNO respectively. $b->{'prefix'} ; $b->{'lorder'} ; - $c = new DB_File::RECNOINFO ; + $c = DB_File::RECNOINFO->new(); $c->{'bval'} ; $c->{'cachesize'} ; $c->{'psize'} ; @@ -795,7 +795,7 @@ of their C counterpart. Like their C counterparts, all are set to a default values - that means you don't have to set I of the values when you only want to change one. Here is an example: - $a = new DB_File::HASHINFO ; + $a = DB_File::HASHINFO->new(); $a->{'cachesize'} = 12345 ; tie %y, 'DB_File', "filename", $flags, 0777, $a ; @@ -826,7 +826,7 @@ to Perl subs. Below are templates for each of the subs: { my ($key, $key2) = @_ ; ... - # return number of bytes of $key2 which are + # return number of bytes of $key2 which are # necessary to determine that it is greater than $key1 return $bytes ; } @@ -885,7 +885,7 @@ contents of the database. our (%h, $k, $v) ; unlink "fruit" ; - tie %h, "DB_File", "fruit", O_RDWR|O_CREAT, 0666, $DB_HASH + tie %h, "DB_File", "fruit", O_RDWR|O_CREAT, 0666, $DB_HASH or die "Cannot open file 'fruit': $!\n"; # Add a few key/value pairs to the file @@ -946,7 +946,7 @@ insensitive compare function will be used. $DB_BTREE->{'compare'} = \&Compare ; unlink "tree" ; - tie %h, "DB_File", "tree", O_RDWR|O_CREAT, 0666, $DB_BTREE + tie %h, "DB_File", "tree", O_RDWR|O_CREAT, 0666, $DB_BTREE or die "Cannot open file 'tree': $!\n" ; # Add a key/value pair to the file @@ -1016,9 +1016,9 @@ possible to recover the original keys in sets of keys that compared as equal). -=back +=back -=head2 Handling Duplicate Keys +=head2 Handling Duplicate Keys The BTREE file type optionally allows a single key to be associated with an arbitrary number of values. This option is enabled by setting @@ -1040,7 +1040,7 @@ code: # Enable duplicate records $DB_BTREE->{'flags'} = R_DUP ; - tie %h, "DB_File", $filename, O_RDWR|O_CREAT, 0666, $DB_BTREE + tie %h, "DB_File", $filename, O_RDWR|O_CREAT, 0666, $DB_BTREE or die "Cannot open $filename: $!\n"; # Add some key/value pairs to the file @@ -1095,7 +1095,7 @@ Here is the script above rewritten using the C API method. # Enable duplicate records $DB_BTREE->{'flags'} = R_DUP ; - $x = tie %h, "DB_File", $filename, O_RDWR|O_CREAT, 0666, $DB_BTREE + $x = tie %h, "DB_File", $filename, O_RDWR|O_CREAT, 0666, $DB_BTREE or die "Cannot open $filename: $!\n"; # Add some key/value pairs to the file @@ -1127,7 +1127,7 @@ that prints: This time we have got all the key/value pairs, including the multiple values associated with the key C. -To make life easier when dealing with duplicate keys, B comes with +To make life easier when dealing with duplicate keys, B comes with a few utility methods. =head2 The get_dup() Method @@ -1166,7 +1166,7 @@ this: # Enable duplicate records $DB_BTREE->{'flags'} = R_DUP ; - $x = tie %h, "DB_File", $filename, O_RDWR|O_CREAT, 0666, $DB_BTREE + $x = tie %h, "DB_File", $filename, O_RDWR|O_CREAT, 0666, $DB_BTREE or die "Cannot open $filename: $!\n"; my $cnt = $x->get_dup("Wall") ; @@ -1200,7 +1200,7 @@ and it will print: $status = $X->find_dup($key, $value) ; This method checks for the existence of a specific key/value pair. If the -pair exists, the cursor is left pointing to the pair and the method +pair exists, the cursor is left pointing to the pair and the method returns 0. Otherwise the method returns a non-zero value. Assuming the database from the previous example: @@ -1216,13 +1216,13 @@ Assuming the database from the previous example: # Enable duplicate records $DB_BTREE->{'flags'} = R_DUP ; - $x = tie %h, "DB_File", $filename, O_RDWR|O_CREAT, 0666, $DB_BTREE + $x = tie %h, "DB_File", $filename, O_RDWR|O_CREAT, 0666, $DB_BTREE or die "Cannot open $filename: $!\n"; - $found = ( $x->find_dup("Wall", "Larry") == 0 ? "" : "not") ; + $found = ( $x->find_dup("Wall", "Larry") == 0 ? "" : "not") ; print "Larry Wall is $found there\n" ; - $found = ( $x->find_dup("Wall", "Harry") == 0 ? "" : "not") ; + $found = ( $x->find_dup("Wall", "Harry") == 0 ? "" : "not") ; print "Harry Wall is $found there\n" ; undef $x ; @@ -1255,12 +1255,12 @@ Again assuming the existence of the C database # Enable duplicate records $DB_BTREE->{'flags'} = R_DUP ; - $x = tie %h, "DB_File", $filename, O_RDWR|O_CREAT, 0666, $DB_BTREE + $x = tie %h, "DB_File", $filename, O_RDWR|O_CREAT, 0666, $DB_BTREE or die "Cannot open $filename: $!\n"; $x->del_dup("Wall", "Larry") ; - $found = ( $x->find_dup("Wall", "Larry") == 0 ? "" : "not") ; + $found = ( $x->find_dup("Wall", "Larry") == 0 ? "" : "not") ; print "Larry Wall is $found there\n" ; undef $x ; @@ -1270,7 +1270,7 @@ prints this Larry Wall is not there -=head2 Matching Partial Keys +=head2 Matching Partial Keys The BTREE interface has a feature which allows partial keys to be matched. This functionality is I available when the C method @@ -1314,7 +1314,7 @@ and print the first matching key/value pair given a partial key. # Add some key/value pairs to the file $h{'mouse'} = 'mickey' ; $h{'Wall'} = 'Larry' ; - $h{'Walls'} = 'Brick' ; + $h{'Walls'} = 'Brick' ; $h{'Smith'} = 'John' ; @@ -1393,8 +1393,8 @@ as a delimiter. =head2 A Simple Example -Here is a simple example that uses RECNO (if you are using a version -of Perl earlier than 5.004_57 this example won't work -- see +Here is a simple example that uses RECNO (if you are using a version +of Perl earlier than 5.004_57 this example won't work -- see L for a workaround). use warnings ; @@ -1405,7 +1405,7 @@ L for a workaround). unlink $filename ; my @h ; - tie @h, "DB_File", $filename, O_RDWR|O_CREAT, 0666, $DB_RECNO + tie @h, "DB_File", $filename, O_RDWR|O_CREAT, 0666, $DB_RECNO or die "Cannot open file 'text': $!\n" ; # Add a few key/value pairs to the file @@ -1488,7 +1488,7 @@ Returns a splice of the array. =head2 Another Example Here is a more complete example that makes use of some of the methods -described above. It also makes use of the API interface directly (see +described above. It also makes use of the API interface directly (see L). use warnings ; @@ -1501,7 +1501,7 @@ L). unlink $file ; - $H = tie @h, "DB_File", $file, O_RDWR|O_CREAT, 0666, $DB_RECNO + $H = tie @h, "DB_File", $file, O_RDWR|O_CREAT, 0666, $DB_RECNO or die "Cannot open file $file: $!\n" ; # first create a text file to play with @@ -1516,7 +1516,7 @@ L). # # The length method is needed here because evaluating a tied # array in a scalar context does not return the number of - # elements in the array. + # elements in the array. print "\nORIGINAL\n" ; foreach $i (0 .. $H->length - 1) { @@ -1552,8 +1552,8 @@ L). # same again, but use the API functions instead print "\nREVERSE again\n" ; my ($s, $k, $v) = (0, 0, 0) ; - for ($s = $H->seq($k, $v, R_LAST) ; - $s == 0 ; + for ($s = $H->seq($k, $v, R_LAST) ; + $s == 0 ; $s = $H->seq($k, $v, R_PREV)) { print "$k: $v\n" } @@ -1600,7 +1600,7 @@ Rather than iterating through the array, C<@h> like this: it is necessary to use either this: - foreach $i (0 .. $H->length - 1) + foreach $i (0 .. $H->length - 1) or this: @@ -1635,10 +1635,10 @@ as B methods directly like this: B If you have saved a copy of the object returned from C, the underlying database file will I be closed until both the tied variable is untied and all copies of the saved object are -destroyed. +destroyed. use DB_File ; - $db = tie %hash, "DB_File", "filename" + $db = tie %hash, "DB_File", "filename" or die "Cannot tie filename: $!" ; ... undef $db ; @@ -1685,7 +1685,7 @@ code will probably not do what you expect: $X->seq($key, $value, R_FIRST) ; # this line will modify the cursor - $count = scalar keys %x ; + $count = scalar keys %x ; # Get the second key/value pair. # oops, it didn't, it got the last key/value pair! @@ -1697,7 +1697,7 @@ The code above can be rearranged to get around the problem, like this: or die "Cannot tie $filename: $!" ; # this line will modify the cursor - $count = scalar keys %x ; + $count = scalar keys %x ; # Get the first key/value pair and set the cursor $X->seq($key, $value, R_FIRST) ; @@ -1788,7 +1788,7 @@ Using the low-level API defined below. =item 2. -Using the L module. +Using the L module. This module hides the complexity of the API defined below and comes with a number of "canned" filters that cover some of the common use-cases. @@ -1872,7 +1872,7 @@ fix very easily. my $filename = "filt" ; unlink $filename ; - my $db = tie %hash, 'DB_File', $filename, O_CREAT|O_RDWR, 0666, $DB_HASH + my $db = tie %hash, 'DB_File', $filename, O_CREAT|O_RDWR, 0666, $DB_HASH or die "Cannot open $filename: $!\n" ; # Install DBM Filters @@ -1915,7 +1915,7 @@ Here is a DBM Filter that does it: unlink $filename ; - my $db = tie %hash, 'DB_File', $filename, O_CREAT|O_RDWR, 0666, $DB_HASH + my $db = tie %hash, 'DB_File', $filename, O_CREAT|O_RDWR, 0666, $DB_HASH or die "Cannot open $filename: $!\n" ; $db->filter_fetch_key ( sub { $_ = unpack("i", $_) } ) ; @@ -1929,7 +1929,7 @@ This time only two filters have been used -- we only need to manipulate the contents of the key, so it wasn't necessary to install any value filters. -=head1 HINTS AND TIPS +=head1 HINTS AND TIPS =head2 Locking: The Trouble with fd @@ -1940,7 +1940,7 @@ function. Unfortunately this technique has been shown to be fundamentally flawed (Kudos to David Harris for tracking this down). Use it at your own peril! -The locking technique went like this. +The locking technique went like this. $db = tie(%db, 'DB_File', 'foo.db', O_CREAT|O_RDWR, 0644) || die "dbcreat foo.db $!"; @@ -2031,7 +2031,7 @@ read access, so that you have a kind of a multiversioning concurrent read system. However, updates are still serial. Use for databases where reads may be lengthy and consistency problems may occur. -=item B +=item B A B wrapper that has the ability to lock and unlock the database while it is being used. Avoids the tie-before-flock problem by simply @@ -2041,7 +2041,7 @@ session, this can be massaged into a system that will work with long updates and/or reads if the application follows the hints in the POD documentation. -=item B +=item B An extremely lightweight B wrapper that simply flocks a lockfile before tie-ing the database and drops the lock after the untie. Allows @@ -2113,7 +2113,7 @@ F). =head2 The untie() Gotcha If you make use of the Berkeley DB API, it is I strongly -recommended that you read L. +recommended that you read L. Even if you don't currently make use of the API interface, it is still worth reading it. @@ -2215,12 +2215,12 @@ B (see L) that was designed to deal with this situation. The example below shows what you need if I the key and value are -expected to be in UTF-8. +expected to be in UTF-8. use DB_File; - use DBM_Filter; + use DBM_Filter; - my $db = tie %h, 'DB_File', '/tmp/try.db', O_CREAT|O_RDWR, 0666, $DB_BTREE; + my $db = tie %h, 'DB_File', '/tmp/try.db', O_CREAT|O_RDWR, 0666, $DB_BTREE; $db->Filter_Key_Push('utf8'); $db->Filter_Value_Push('utf8'); @@ -2240,7 +2240,7 @@ Here are a couple of possibilities: =item 1. -Attempting to reopen a database without closing it. +Attempting to reopen a database without closing it. =item 2. @@ -2248,7 +2248,7 @@ Using the O_WRONLY flag. =back -=head2 What does "Bareword 'DB_File' not allowed" mean? +=head2 What does "Bareword 'DB_File' not allowed" mean? You will encounter this particular error message when you have the C pragma (or the full strict pragma) in your script. @@ -2262,7 +2262,7 @@ Consider this script: Running it produces the error in question: - Bareword "DB_File" not allowed while "strict subs" in use + Bareword "DB_File" not allowed while "strict subs" in use To get around the error, place the word C in either single or double quotes, like this: @@ -2300,7 +2300,7 @@ suggest any enhancements, I would welcome your comments. =head1 SUPPORT -General feedback/questions/bug reports should be sent to +General feedback/questions/bug reports should be sent to L (preferred) or L. @@ -2325,7 +2325,7 @@ archive in F. =head1 COPYRIGHT -Copyright (c) 1995-2020 Paul Marquess. All rights reserved. This program +Copyright (c) 1995-2022 Paul Marquess. All rights reserved. This program is free software; you can redistribute it and/or modify it under the same terms as Perl itself. @@ -2336,7 +2336,7 @@ copyright and its own license. Please take the time to read it. Here are a few words taken from the Berkeley DB FAQ (at L) regarding the license: - Do I have to license DB to use it in Perl scripts? + Do I have to license DB to use it in Perl scripts? No. The Berkeley DB license requires that software that uses Berkeley DB be freely redistributable. In the case of Perl, that diff --git a/gnu/usr.bin/perl/cpan/DB_File/DB_File.xs b/gnu/usr.bin/perl/cpan/DB_File/DB_File.xs index ab95369b25f..42f7c7df182 100644 --- a/gnu/usr.bin/perl/cpan/DB_File/DB_File.xs +++ b/gnu/usr.bin/perl/cpan/DB_File/DB_File.xs @@ -6,7 +6,7 @@ All comments/suggestions/problems are welcome - Copyright (c) 1995-2020 Paul Marquess. All rights reserved. + Copyright (c) 1995-2022 Paul Marquess. All rights reserved. This program is free software; you can redistribute it and/or modify it under the same terms as Perl itself. @@ -473,7 +473,7 @@ typedef DBT DBTKEY ; #define croak_and_free(x) \ do \ { \ - if (RETVAL->dbp) err_close(RETVAL) ; \ + if (RETVAL->dbp) { err_close(RETVAL) ; } \ Safefree(RETVAL); \ croak(x); \ } while (0) @@ -1527,12 +1527,12 @@ SV * sv ; status = (RETVAL->dbp->open)(RETVAL->dbp, name, NULL, RETVAL->type, Flags, mode) ; #endif - Trace(("open returned %d %s\n", status, db_strerror(status))) ; + Trace(("open returned %d %s\n", status, db_strerror(status))) ; if (status == 0) { status = (RETVAL->dbp->cursor)(RETVAL->dbp, NULL, &RETVAL->cursor, 0) ; - Trace(("cursor returned %d %s\n", status, db_strerror(status))) ; + Trace(("cursor returned %d %s\n", status, db_strerror(status))) ; } if (status) @@ -2066,4 +2066,3 @@ filter_store_value(db, code) SV * RETVAL = &PL_sv_undef ; CODE: DBM_setFilter(db->filter_store_value, code) ; - diff --git a/gnu/usr.bin/perl/cpan/DB_File/DB_File_BS b/gnu/usr.bin/perl/cpan/DB_File/DB_File_BS deleted file mode 100644 index 9282c498811..00000000000 --- a/gnu/usr.bin/perl/cpan/DB_File/DB_File_BS +++ /dev/null @@ -1,6 +0,0 @@ -# NeXT needs /usr/lib/libposix.a to load along with DB_File.so -if ( $dlsrc eq "dl_next.xs" ) { - @DynaLoader::dl_resolve_using = ( '/usr/lib/libposix.a' ); -} - -1; diff --git a/gnu/usr.bin/perl/cpan/DB_File/Makefile.PL b/gnu/usr.bin/perl/cpan/DB_File/Makefile.PL index 774c219f5a5..a09491e10e1 100644 --- a/gnu/usr.bin/perl/cpan/DB_File/Makefile.PL +++ b/gnu/usr.bin/perl/cpan/DB_File/Makefile.PL @@ -4,8 +4,8 @@ use strict ; use ExtUtils::MakeMaker 5.16 ; use Config ; -die "DB_File needs Perl 5.8.3 or better. This is $]\n" - if $] < 5.008003; +die "DB_File needs Perl 5.8.3 or better. This is $]\n" + if $] < 5.008003; my $VER_INFO ; my $LIB_DIR ; @@ -41,7 +41,7 @@ $OS2 = "-DOS2" if $Config{'osname'} eq 'os2' ; my $WALL = '' ; #$WALL = ' -Wall '; -# Only want ppport.h t to be used by DB_File.xs when not +# Only want ppport.h t to be used by DB_File.xs when not # building this module with the perl source distribution. my $CORE = $ENV{PERL_CORE} ? '' : '-D_NOT_CORE'; @@ -54,8 +54,8 @@ WriteMakefile( XSPROTOARG => '-noprototypes', DEFINE => "$CORE $OS2 $VER_INFO $COMPAT185 $WALL", OBJECT => 'version$(OBJ_EXT) DB_File$(OBJ_EXT)', - ((ExtUtils::MakeMaker->VERSION() gt '6.30') - ? ('LICENSE' => 'perl') + ((ExtUtils::MakeMaker->VERSION() gt '6.30') + ? ('LICENSE' => 'perl') : () ), ( @@ -64,26 +64,26 @@ WriteMakefile( AUTHOR => 'Paul Marquess ') : () ), - - ($] < 5.008 || $] > 5.011) - ? (INSTALLDIRS => 'site') + + ($] < 5.008 || $] > 5.011) + ? (INSTALLDIRS => 'site') : (INSTALLDIRS => 'perl'), #OPTIMIZE => '-g', 'depend' => { 'Makefile' => 'config.in', 'version$(OBJ_EXT)' => 'version.c'}, - 'clean' => { FILES => 'constants.h constants.xs DB_File.pm.bak t/db-btree.t.bak t/db-hash.t.bak t/db-recno.t.bak t/pod.t.bak' }, + 'clean' => { FILES => 'constants.h constants.xs *.bak t/*.t.bak' }, 'macro' => { my_files => "@files" }, 'dist' => { COMPRESS => 'gzip', SUFFIX => 'gz', DIST_DEFAULT => 'MyDoubleCheck tardist'}, - ( eval { ExtUtils::MakeMaker->VERSION(6.46) } + ( eval { ExtUtils::MakeMaker->VERSION(6.46) } ? ( META_MERGE => { - + "meta-spec" => { version => 2 }, - + resources => { - + bugtracker => { web => 'https://github.com/pmqs/DB_File/issues' }, @@ -94,10 +94,10 @@ WriteMakefile( type => 'git', url => 'git://github.com/pmqs/DB_File.git', web => 'https://github.com/pmqs/DB_File', - }, + }, }, - } - ) + } + ) : () ), @@ -159,16 +159,16 @@ if (eval {require ExtUtils::Constant; 1}) { die "The following names are missing from \@EXPORT in DB_File.pm\n" . "\t$missing\n" ; } - + ExtUtils::Constant::WriteConstants( NAME => 'DB_File', NAMES => \@names, C_FILE => 'constants.h', XS_FILE => 'constants.xs', - + ); -} +} else { use File::Copy; copy ('fallback.h', 'constants.h') @@ -186,10 +186,10 @@ sub MY::libscan my $path = shift ; return undef - if $path =~ /(~|\.bak)$/ || + if $path =~ /(~|\.bak)$/ || $path =~ /^\..*\.swp$/ ; - return $path; + return $path; } @@ -202,27 +202,27 @@ MyDoubleCheck: grep "^#DBNAME.*" config.in) >/dev/null || \ (echo config.in needs fixing ; exit 1) @echo config.in is ok - @echo + @echo @echo Checking DB_File.xs is ok for a release. @(perl -ne ' exit 1 if /^\s*#\s*define\s+TRACE/ ; ' DB_File.xs || \ (echo DB_File.xs needs fixing ; exit 1)) @echo DB_File.xs is ok - @echo + @echo @echo Checking for $$^W in files: $(my_files) @perl -ne ' \ exit 1 if /^\s*local\s*\(\s*\$$\^W\s*\)/;' $(my_files) || \ (echo found unexpected $$^W ; exit 1) @echo No $$^W found. - @echo + @echo @echo Checking for 'use vars' in files: $(my_files) @perl -ne ' \ exit 0 if /^__(DATA|END)__/; \ exit 1 if /^\s*use\s+vars/;' $(my_files) || \ (echo found unexpected "use vars"; exit 1) @echo No 'use vars' found. - @echo + @echo @echo All files are OK for a release. - @echo + @echo EOM @@ -240,7 +240,7 @@ sub ParseCONFIG print "Parsing $CONFIG...\n" ; - # DBNAME & COMPAT185 are optional, so pretend they have + # DBNAME & COMPAT185 are optional, so pretend they have # been parsed. delete $Parsed{'DBNAME'} ; delete $Parsed{'COMPAT185'} ; @@ -270,16 +270,16 @@ sub ParseCONFIG # check parsed values my @missing = () ; - die "The following keys are missing from $CONFIG file: [@missing]\n" + die "The following keys are missing from $CONFIG file: [@missing]\n" if @missing = keys %Parsed ; $INC_DIR = $ENV{'DB_FILE_INCLUDE'} || $Info{'INCLUDE'} ; $LIB_DIR = $ENV{'DB_FILE_LIB'} || $Info{'LIB'} ; $DB_NAME = $ENV{'DB_FILE_NAME'} || $Info{'DBNAME'} ; - $COMPAT185 = "-DCOMPAT185 -DDB_LIBRARY_COMPATIBILITY_API" - if (defined $ENV{'DB_FILE_COMPAT185'} && + $COMPAT185 = "-DCOMPAT185 -DDB_LIBRARY_COMPATIBILITY_API" + if (defined $ENV{'DB_FILE_COMPAT185'} && $ENV{'DB_FILE_COMPAT185'} =~ /^\s*(on|true|1)\s*$/i) || - $Info{'COMPAT185'} =~ /^\s*(on|true|1)\s*$/i ; + $Info{'COMPAT185'} =~ /^\s*(on|true|1)\s*$/i ; my $PREFIX = $Info{'PREFIX'} ; my $HASH = $Info{'HASH'} ; diff --git a/gnu/usr.bin/perl/cpan/Digest-MD5/MD5.pm b/gnu/usr.bin/perl/cpan/Digest-MD5/MD5.pm index 2742a05e658..81e5142e4d8 100644 --- a/gnu/usr.bin/perl/cpan/Digest-MD5/MD5.pm +++ b/gnu/usr.bin/perl/cpan/Digest-MD5/MD5.pm @@ -1,17 +1,18 @@ package Digest::MD5; use strict; -use vars qw($VERSION @ISA @EXPORT_OK); +use warnings; -$VERSION = '2.55_01'; +our $VERSION = '2.58'; require Exporter; *import = \&Exporter::import; -@EXPORT_OK = qw(md5 md5_hex md5_base64); +our @EXPORT_OK = qw(md5 md5_hex md5_base64); +our @ISA; eval { require Digest::base; - push(@ISA, 'Digest::base'); + @ISA = qw/Digest::base/; }; if ($@) { my $err = $@; @@ -231,11 +232,13 @@ md5 digests you might want to append the string "==" to the result. =item $md5->context(@ctx) -Saves or restores the internal state. When called with no arguments, -returns a 3-element list: number of blocks processed, a 16-byte -internal state buffer, then up to 63 bytes of unprocessed data. When -passed those same arguments, restores the state. This is only useful -for specialised operations. +Saves or restores the internal state. +When called with no arguments, returns a list: +number of blocks processed, +a 16-byte internal state buffer, +then optionally up to 63 bytes of unprocessed data if there are any. +When passed those same arguments, restores the state. +This is only useful for specialised operations. =back diff --git a/gnu/usr.bin/perl/cpan/Digest-MD5/MD5.xs b/gnu/usr.bin/perl/cpan/Digest-MD5/MD5.xs index 551d74041db..69b380c0abe 100644 --- a/gnu/usr.bin/perl/cpan/Digest-MD5/MD5.xs +++ b/gnu/usr.bin/perl/cpan/Digest-MD5/MD5.xs @@ -39,8 +39,6 @@ extern "C" { #include "EXTERN.h" #include "perl.h" #include "XSUB.h" -#include -#include #ifdef __cplusplus } #endif @@ -90,6 +88,46 @@ static MAGIC *THX_sv_magicext(pTHX_ SV *sv, SV *obj, int type, # define SvPVbyte(sv, lp) (sv_utf8_downgrade((sv), 0), SvPV((sv), (lp))) #endif +/* Perl does not guarantee that U32 is exactly 32 bits. Some system + * has no integral type with exactly 32 bits. For instance, A Cray has + * short, int and long all at 64 bits so we need to apply this macro + * to reduce U32 values to 32 bits at appropriate places. If U32 + * really does have 32 bits then this is a no-op. + */ +#if BYTEORDER > 0x4321 || defined(TRUNCATE_U32) + #define TO32(x) ((x) & 0xFFFFffff) + #define TRUNC32(x) ((x) &= 0xFFFFffff) +#else + #define TO32(x) (x) + #define TRUNC32(x) /*nothing*/ +#endif + +/* The MD5 algorithm is defined in terms of little endian 32-bit + * values. The following macros (and functions) allow us to convert + * between native integers and such values. + */ +static void u2s(U32 u, U8* s) +{ + *s++ = (U8)(u & 0xFF); + *s++ = (U8)((u >> 8) & 0xFF); + *s++ = (U8)((u >> 16) & 0xFF); + *s = (U8)((u >> 24) & 0xFF); +} + +#define s2u(s,u) ((u) = (U32)(*s) | \ + ((U32)(*(s+1)) << 8) | \ + ((U32)(*(s+2)) << 16) | \ + ((U32)(*(s+3)) << 24)) + +/* This structure keeps the current state of algorithm. + */ +typedef struct { + U32 A, B, C, D; /* current digest */ + U32 bytes_low; /* counts bytes in message */ + U32 bytes_high; /* turn it into a 64-bit counter */ + U8 buffer[128]; /* collect complete 64 byte blocks */ +} MD5_CTX; + #if defined(USE_ITHREADS) && defined(MGf_DUP) STATIC int dup_md5_ctx(pTHX_ MAGIC *mg, CLONE_PARAMS *params) { @@ -126,6 +164,300 @@ STATIC const struct { }; #endif + +/* Padding is added at the end of the message in order to fill a + * complete 64 byte block (- 8 bytes for the message length). The + * padding is also the reason the buffer in MD5_CTX have to be + * 128 bytes. + */ +static const unsigned char PADDING[64] = { + 0x80, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 +}; + +/* Constants for MD5Transform routine. + */ +#define S11 7 +#define S12 12 +#define S13 17 +#define S14 22 +#define S21 5 +#define S22 9 +#define S23 14 +#define S24 20 +#define S31 4 +#define S32 11 +#define S33 16 +#define S34 23 +#define S41 6 +#define S42 10 +#define S43 15 +#define S44 21 + +/* F, G, H and I are basic MD5 functions. + */ +#define F(x, y, z) ((((x) & ((y) ^ (z))) ^ (z))) +#define G(x, y, z) F(z, x, y) +#define H(x, y, z) ((x) ^ (y) ^ (z)) +#define I(x, y, z) ((y) ^ ((x) | (~z))) + +/* ROTATE_LEFT rotates x left n bits. + */ +#define ROTATE_LEFT(x, n) (((x) << (n) | ((x) >> (32-(n))))) + +/* FF, GG, HH, and II transformations for rounds 1, 2, 3, and 4. + * Rotation is separate from addition to prevent recomputation. + */ +#define FF(a, b, c, d, s, ac) \ + (a) += F ((b), (c), (d)) + (NEXTx) + (U32)(ac); \ + TRUNC32((a)); \ + (a) = ROTATE_LEFT ((a), (s)); \ + (a) += (b); \ + TRUNC32((a)); + +#define GG(a, b, c, d, x, s, ac) \ + (a) += G ((b), (c), (d)) + X[x] + (U32)(ac); \ + TRUNC32((a)); \ + (a) = ROTATE_LEFT ((a), (s)); \ + (a) += (b); \ + TRUNC32((a)); + +#define HH(a, b, c, d, x, s, ac) \ + (a) += H ((b), (c), (d)) + X[x] + (U32)(ac); \ + TRUNC32((a)); \ + (a) = ROTATE_LEFT ((a), (s)); \ + (a) += (b); \ + TRUNC32((a)); + +#define II(a, b, c, d, x, s, ac) \ + (a) += I ((b), (c), (d)) + X[x] + (U32)(ac); \ + TRUNC32((a)); \ + (a) = ROTATE_LEFT ((a), (s)); \ + (a) += (b); \ + TRUNC32((a)); + + +static void +MD5Init(MD5_CTX *ctx) +{ + /* Start state */ + ctx->A = 0x67452301; + ctx->B = 0xefcdab89; + ctx->C = 0x98badcfe; + ctx->D = 0x10325476; + + /* message length */ + ctx->bytes_low = ctx->bytes_high = 0; +} + + +static void +MD5Transform(MD5_CTX* ctx, const U8* buf, STRLEN blocks) +{ +#ifdef MD5_DEBUG + static int tcount = 0; +#endif + + U32 A = ctx->A; + U32 B = ctx->B; + U32 C = ctx->C; + U32 D = ctx->D; + + do { + U32 a = A; + U32 b = B; + U32 c = C; + U32 d = D; + + U32 X[16]; /* little-endian values, used in round 2-4 */ + U32 *uptr = X; + U32 tmp; + #define NEXTx (s2u(buf,tmp), buf += 4, *uptr++ = tmp) + +#ifdef MD5_DEBUG + if (buf == ctx->buffer) + fprintf(stderr,"%5d: Transform ctx->buffer", ++tcount); + else + fprintf(stderr,"%5d: Transform %p (%d)", ++tcount, buf, blocks); + + { + int i; + fprintf(stderr,"["); + for (i = 0; i < 16; i++) { + fprintf(stderr,"%x,", x[i]); /* FIXME */ + } + fprintf(stderr,"]\n"); + } +#endif + + /* Round 1 */ + FF (a, b, c, d, S11, 0xd76aa478); /* 1 */ + FF (d, a, b, c, S12, 0xe8c7b756); /* 2 */ + FF (c, d, a, b, S13, 0x242070db); /* 3 */ + FF (b, c, d, a, S14, 0xc1bdceee); /* 4 */ + FF (a, b, c, d, S11, 0xf57c0faf); /* 5 */ + FF (d, a, b, c, S12, 0x4787c62a); /* 6 */ + FF (c, d, a, b, S13, 0xa8304613); /* 7 */ + FF (b, c, d, a, S14, 0xfd469501); /* 8 */ + FF (a, b, c, d, S11, 0x698098d8); /* 9 */ + FF (d, a, b, c, S12, 0x8b44f7af); /* 10 */ + FF (c, d, a, b, S13, 0xffff5bb1); /* 11 */ + FF (b, c, d, a, S14, 0x895cd7be); /* 12 */ + FF (a, b, c, d, S11, 0x6b901122); /* 13 */ + FF (d, a, b, c, S12, 0xfd987193); /* 14 */ + FF (c, d, a, b, S13, 0xa679438e); /* 15 */ + FF (b, c, d, a, S14, 0x49b40821); /* 16 */ + + /* Round 2 */ + GG (a, b, c, d, 1, S21, 0xf61e2562); /* 17 */ + GG (d, a, b, c, 6, S22, 0xc040b340); /* 18 */ + GG (c, d, a, b, 11, S23, 0x265e5a51); /* 19 */ + GG (b, c, d, a, 0, S24, 0xe9b6c7aa); /* 20 */ + GG (a, b, c, d, 5, S21, 0xd62f105d); /* 21 */ + GG (d, a, b, c, 10, S22, 0x2441453); /* 22 */ + GG (c, d, a, b, 15, S23, 0xd8a1e681); /* 23 */ + GG (b, c, d, a, 4, S24, 0xe7d3fbc8); /* 24 */ + GG (a, b, c, d, 9, S21, 0x21e1cde6); /* 25 */ + GG (d, a, b, c, 14, S22, 0xc33707d6); /* 26 */ + GG (c, d, a, b, 3, S23, 0xf4d50d87); /* 27 */ + GG (b, c, d, a, 8, S24, 0x455a14ed); /* 28 */ + GG (a, b, c, d, 13, S21, 0xa9e3e905); /* 29 */ + GG (d, a, b, c, 2, S22, 0xfcefa3f8); /* 30 */ + GG (c, d, a, b, 7, S23, 0x676f02d9); /* 31 */ + GG (b, c, d, a, 12, S24, 0x8d2a4c8a); /* 32 */ + + /* Round 3 */ + HH (a, b, c, d, 5, S31, 0xfffa3942); /* 33 */ + HH (d, a, b, c, 8, S32, 0x8771f681); /* 34 */ + HH (c, d, a, b, 11, S33, 0x6d9d6122); /* 35 */ + HH (b, c, d, a, 14, S34, 0xfde5380c); /* 36 */ + HH (a, b, c, d, 1, S31, 0xa4beea44); /* 37 */ + HH (d, a, b, c, 4, S32, 0x4bdecfa9); /* 38 */ + HH (c, d, a, b, 7, S33, 0xf6bb4b60); /* 39 */ + HH (b, c, d, a, 10, S34, 0xbebfbc70); /* 40 */ + HH (a, b, c, d, 13, S31, 0x289b7ec6); /* 41 */ + HH (d, a, b, c, 0, S32, 0xeaa127fa); /* 42 */ + HH (c, d, a, b, 3, S33, 0xd4ef3085); /* 43 */ + HH (b, c, d, a, 6, S34, 0x4881d05); /* 44 */ + HH (a, b, c, d, 9, S31, 0xd9d4d039); /* 45 */ + HH (d, a, b, c, 12, S32, 0xe6db99e5); /* 46 */ + HH (c, d, a, b, 15, S33, 0x1fa27cf8); /* 47 */ + HH (b, c, d, a, 2, S34, 0xc4ac5665); /* 48 */ + + /* Round 4 */ + II (a, b, c, d, 0, S41, 0xf4292244); /* 49 */ + II (d, a, b, c, 7, S42, 0x432aff97); /* 50 */ + II (c, d, a, b, 14, S43, 0xab9423a7); /* 51 */ + II (b, c, d, a, 5, S44, 0xfc93a039); /* 52 */ + II (a, b, c, d, 12, S41, 0x655b59c3); /* 53 */ + II (d, a, b, c, 3, S42, 0x8f0ccc92); /* 54 */ + II (c, d, a, b, 10, S43, 0xffeff47d); /* 55 */ + II (b, c, d, a, 1, S44, 0x85845dd1); /* 56 */ + II (a, b, c, d, 8, S41, 0x6fa87e4f); /* 57 */ + II (d, a, b, c, 15, S42, 0xfe2ce6e0); /* 58 */ + II (c, d, a, b, 6, S43, 0xa3014314); /* 59 */ + II (b, c, d, a, 13, S44, 0x4e0811a1); /* 60 */ + II (a, b, c, d, 4, S41, 0xf7537e82); /* 61 */ + II (d, a, b, c, 11, S42, 0xbd3af235); /* 62 */ + II (c, d, a, b, 2, S43, 0x2ad7d2bb); /* 63 */ + II (b, c, d, a, 9, S44, 0xeb86d391); /* 64 */ + + A += a; TRUNC32(A); + B += b; TRUNC32(B); + C += c; TRUNC32(C); + D += d; TRUNC32(D); + + } while (--blocks); + ctx->A = A; + ctx->B = B; + ctx->C = C; + ctx->D = D; +} + + +#ifdef MD5_DEBUG +static char* +ctx_dump(MD5_CTX* ctx) +{ + static char buf[1024]; + sprintf(buf, "{A=%x,B=%x,C=%x,D=%x,%d,%d(%d)}", + ctx->A, ctx->B, ctx->C, ctx->D, + ctx->bytes_low, ctx->bytes_high, (ctx->bytes_low&0x3F)); + return buf; +} +#endif + + +static void +MD5Update(MD5_CTX* ctx, const U8* buf, STRLEN len) +{ + STRLEN blocks; + STRLEN fill = ctx->bytes_low & 0x3F; + +#ifdef MD5_DEBUG + static int ucount = 0; + fprintf(stderr,"%5i: Update(%s, %p, %d)\n", ++ucount, ctx_dump(ctx), + buf, len); +#endif + + ctx->bytes_low += len; + if (ctx->bytes_low < len) /* wrap around */ + ctx->bytes_high++; + + if (fill) { + STRLEN missing = 64 - fill; + if (len < missing) { + Copy(buf, ctx->buffer + fill, len, U8); + return; + } + Copy(buf, ctx->buffer + fill, missing, U8); + MD5Transform(ctx, ctx->buffer, 1); + buf += missing; + len -= missing; + } + + blocks = len >> 6; + if (blocks) + MD5Transform(ctx, buf, blocks); + if ( (len &= 0x3F)) { + Copy(buf + (blocks << 6), ctx->buffer, len, U8); + } +} + + +static void +MD5Final(U8* digest, MD5_CTX *ctx) +{ + STRLEN fill = ctx->bytes_low & 0x3F; + STRLEN padlen = (fill < 56 ? 56 : 120) - fill; + U32 bits_low, bits_high; +#ifdef MD5_DEBUG + fprintf(stderr," Final: %s\n", ctx_dump(ctx)); +#endif + Copy(PADDING, ctx->buffer + fill, padlen, U8); + fill += padlen; + + bits_low = ctx->bytes_low << 3; + bits_high = (ctx->bytes_high << 3) | (ctx->bytes_low >> 29); + u2s(bits_low, ctx->buffer + fill); fill += 4; + u2s(bits_high, ctx->buffer + fill); fill += 4; + + MD5Transform(ctx, ctx->buffer, fill >> 6); +#ifdef MD5_DEBUG + fprintf(stderr," Result: %s\n", ctx_dump(ctx)); +#endif + + u2s(ctx->A, digest); + u2s(ctx->B, digest+4); + u2s(ctx->C, digest+8); + u2s(ctx->D, digest+12); +} + +#ifndef INT2PTR +#define INT2PTR(any,d) (any)(d) +#endif + static MD5_CTX* get_md5_ctx(pTHX_ SV* sv) { MAGIC *mg; @@ -306,7 +638,7 @@ addfile(self, fh) InputStream fh PREINIT: MD5_CTX* context = get_md5_ctx(aTHX_ self); - STRLEN fill = (context->count >> 3) & (MD5_BLOCK_LENGTH - 1); + STRLEN fill = context->bytes_low & 0x3F; #ifdef USE_HEAP_INSTEAD_OF_STACK unsigned char* buffer; #else @@ -371,12 +703,14 @@ context(ctx, ...) PPCODE: if (items > 2) { STRLEN len; + unsigned long blocks = SvUV(ST(1)); unsigned char *buf = (unsigned char *)(SvPV(ST(2), len)); - ctx->count = SvUV(ST(1)) << 3; - ctx->state[0] = buf[ 0] | (buf[ 1]<<8) | (buf[ 2]<<16) | (buf[ 3]<<24); - ctx->state[1] = buf[ 4] | (buf[ 5]<<8) | (buf[ 6]<<16) | (buf[ 7]<<24); - ctx->state[2] = buf[ 8] | (buf[ 9]<<8) | (buf[10]<<16) | (buf[11]<<24); - ctx->state[3] = buf[12] | (buf[13]<<8) | (buf[14]<<16) | (buf[15]<<24); + ctx->A = buf[ 0] | (buf[ 1]<<8) | (buf[ 2]<<16) | (buf[ 3]<<24); + ctx->B = buf[ 4] | (buf[ 5]<<8) | (buf[ 6]<<16) | (buf[ 7]<<24); + ctx->C = buf[ 8] | (buf[ 9]<<8) | (buf[10]<<16) | (buf[11]<<24); + ctx->D = buf[12] | (buf[13]<<8) | (buf[14]<<16) | (buf[15]<<24); + ctx->bytes_low = blocks << 6; + ctx->bytes_high = blocks >> 26; if (items == 4) { buf = (unsigned char *)(SvPV(ST(3), len)); MD5Update(ctx, buf, len); @@ -386,20 +720,21 @@ context(ctx, ...) XSRETURN(0); } - w=ctx->state[0]; out[ 0]=w; out[ 1]=(w>>8); out[ 2]=(w>>16); out[ 3]=(w>>24); - w=ctx->state[1]; out[ 4]=w; out[ 5]=(w>>8); out[ 6]=(w>>16); out[ 7]=(w>>24); - w=ctx->state[2]; out[ 8]=w; out[ 9]=(w>>8); out[10]=(w>>16); out[11]=(w>>24); - w=ctx->state[3]; out[12]=w; out[13]=(w>>8); out[14]=(w>>16); out[15]=(w>>24); + w=ctx->A; out[ 0]=(char)w; out[ 1]=(char)(w>>8); out[ 2]=(char)(w>>16); out[ 3]=(char)(w>>24); + w=ctx->B; out[ 4]=(char)w; out[ 5]=(char)(w>>8); out[ 6]=(char)(w>>16); out[ 7]=(char)(w>>24); + w=ctx->C; out[ 8]=(char)w; out[ 9]=(char)(w>>8); out[10]=(char)(w>>16); out[11]=(char)(w>>24); + w=ctx->D; out[12]=(char)w; out[13]=(char)(w>>8); out[14]=(char)(w>>16); out[15]=(char)(w>>24); EXTEND(SP, 3); - ST(0) = sv_2mortal(newSViv((ctx->count >> 3) - - ((ctx->count >> 3) % MD5_BLOCK_LENGTH))); + ST(0) = sv_2mortal(newSVuv(ctx->bytes_high << 26 | + ctx->bytes_low >> 6)); ST(1) = sv_2mortal(newSVpv(out, 16)); - ST(2) = sv_2mortal(newSVpv("",0)); - if (((ctx->count >> 3) & (MD5_BLOCK_LENGTH - 1)) != 0) - ST(2) = sv_2mortal(newSVpv((char *)ctx->buffer, - (ctx->count >> 3) & (MD5_BLOCK_LENGTH - 1))); + if ((ctx->bytes_low & 0x3F) == 0) + XSRETURN(2); + + ST(2) = sv_2mortal(newSVpv((char *)ctx->buffer, + ctx->bytes_low & 0x3F)); XSRETURN(3); void diff --git a/gnu/usr.bin/perl/cpan/Digest-MD5/Makefile.PL b/gnu/usr.bin/perl/cpan/Digest-MD5/Makefile.PL index 76906d10463..45bbd8b83d5 100644 --- a/gnu/usr.bin/perl/cpan/Digest-MD5/Makefile.PL +++ b/gnu/usr.bin/perl/cpan/Digest-MD5/Makefile.PL @@ -1,6 +1,8 @@ #!perl -w use strict; +use warnings; + use Config qw(%Config); use ExtUtils::MakeMaker; @@ -30,7 +32,9 @@ WriteMakefile( }, 'META_MERGE' => { resources => { - repository => 'https://github.com/gisle/digest-md5', + license => 'http://dev.perl.org/licenses/', + bugtracker => 'https://github.com/Dual-Life/digest-md5/issues', + repository => 'https://github.com/dual-Life/digest-md5/', } }, @extra, diff --git a/gnu/usr.bin/perl/cpan/Digest-MD5/t/files.t b/gnu/usr.bin/perl/cpan/Digest-MD5/t/files.t index 728ceb130b8..3f70e0cc60a 100755 --- a/gnu/usr.bin/perl/cpan/Digest-MD5/t/files.t +++ b/gnu/usr.bin/perl/cpan/Digest-MD5/t/files.t @@ -1,9 +1,10 @@ - -print "1..3\n"; - use strict; +use warnings; + use Digest::MD5 qw(md5 md5_hex md5_base64); +print "1..3\n"; + # To update the EBCDIC section even on a Latin 1 platform, # run this script with $ENV{EBCDIC_MD5SUM} set to a true value. # (You'll need to have Perl 5.7.3 or later, to have the Encode installed.) @@ -14,14 +15,14 @@ my $EXPECT; if (ord "A" == 193) { # EBCDIC $EXPECT = < [["Digest::SHA", 1], "Digest::SHA1", ["Digest::SHA2", 1]], - "SHA-224" => [["Digest::SHA", 224]], - "SHA-256" => [["Digest::SHA", 256], ["Digest::SHA2", 256]], - "SHA-384" => [["Digest::SHA", 384], ["Digest::SHA2", 384]], - "SHA-512" => [["Digest::SHA", 512], ["Digest::SHA2", 512]], - "HMAC-MD5" => "Digest::HMAC_MD5", - "HMAC-SHA-1" => "Digest::HMAC_SHA1", - "CRC-16" => [["Digest::CRC", type => "crc16"]], - "CRC-32" => [["Digest::CRC", type => "crc32"]], - "CRC-CCITT" => [["Digest::CRC", type => "crcccitt"]], - "RIPEMD-160" => "Crypt::RIPEMD160", -); - -sub new -{ - shift; # class ignored - my $algorithm = shift; - my $impl = $MMAP{$algorithm} || do { - $algorithm =~ s/\W+//g; - "Digest::$algorithm"; - }; - $impl = [$impl] unless ref($impl); - local $@; # don't clobber it for our caller - my $err; - for (@$impl) { - my $class = $_; - my @args; - ($class, @args) = @$class if ref($class); - no strict 'refs'; - unless (exists ${"$class\::"}{"VERSION"}) { - my $pm_file = $class . ".pm"; - $pm_file =~ s{::}{/}g; - eval { - local @INC = @INC; - pop @INC if $INC[-1] eq '.'; - require $pm_file - }; - if ($@) { - $err ||= $@; - next; - } - } - return $class->new(@args, @_); - } - die $err; -} - -sub AUTOLOAD -{ - my $class = shift; - my $algorithm = substr($AUTOLOAD, rindex($AUTOLOAD, '::')+2); - $class->new($algorithm, @_); -} - -1; - -__END__ - -=head1 NAME - -Digest - Modules that calculate message digests - -=head1 SYNOPSIS - - $md5 = Digest->new("MD5"); - $sha1 = Digest->new("SHA-1"); - $sha256 = Digest->new("SHA-256"); - $sha384 = Digest->new("SHA-384"); - $sha512 = Digest->new("SHA-512"); - - $hmac = Digest->HMAC_MD5($key); - -=head1 DESCRIPTION - -The C modules calculate digests, also called "fingerprints" -or "hashes", of some data, called a message. The digest is (usually) -some small/fixed size string. The actual size of the digest depend of -the algorithm used. The message is simply a sequence of arbitrary -bytes or bits. - -An important property of the digest algorithms is that the digest is -I to change if the message change in some way. Another -property is that digest functions are one-way functions, that is it -should be I to find a message that correspond to some given -digest. Algorithms differ in how "likely" and how "hard", as well as -how efficient they are to compute. - -Note that the properties of the algorithms change over time, as the -algorithms are analyzed and machines grow faster. If your application -for instance depends on it being "impossible" to generate the same -digest for a different message it is wise to make it easy to plug in -stronger algorithms as the one used grow weaker. Using the interface -documented here should make it easy to change algorithms later. - -All C modules provide the same programming interface. A -functional interface for simple use, as well as an object oriented -interface that can handle messages of arbitrary length and which can -read files directly. - -The digest can be delivered in three formats: - -=over 8 - -=item I - -This is the most compact form, but it is not well suited for printing -or embedding in places that can't handle arbitrary data. - -=item I - -A twice as long string of lowercase hexadecimal digits. - -=item I - -A string of portable printable characters. This is the base64 encoded -representation of the digest with any trailing padding removed. The -string will be about 30% longer than the binary version. -L tells you more about this encoding. - -=back - - -The functional interface is simply importable functions with the same -name as the algorithm. The functions take the message as argument and -return the digest. Example: - - use Digest::MD5 qw(md5); - $digest = md5($message); - -There are also versions of the functions with "_hex" or "_base64" -appended to the name, which returns the digest in the indicated form. - -=head1 OO INTERFACE - -The following methods are available for all C modules: - -=over 4 - -=item $ctx = Digest->XXX($arg,...) - -=item $ctx = Digest->new(XXX => $arg,...) - -=item $ctx = Digest::XXX->new($arg,...) - -The constructor returns some object that encapsulate the state of the -message-digest algorithm. You can add data to the object and finally -ask for the digest. The "XXX" should of course be replaced by the proper -name of the digest algorithm you want to use. - -The two first forms are simply syntactic sugar which automatically -load the right module on first use. The second form allow you to use -algorithm names which contains letters which are not legal perl -identifiers, e.g. "SHA-1". If no implementation for the given algorithm -can be found, then an exception is raised. - -If new() is called as an instance method (i.e. $ctx->new) it will just -reset the state the object to the state of a newly created object. No -new object is created in this case, and the return value is the -reference to the object (i.e. $ctx). - -=item $other_ctx = $ctx->clone - -The clone method creates a copy of the digest state object and returns -a reference to the copy. - -=item $ctx->reset - -This is just an alias for $ctx->new. - -=item $ctx->add( $data ) - -=item $ctx->add( $chunk1, $chunk2, ... ) - -The string value of the $data provided as argument is appended to the -message we calculate the digest for. The return value is the $ctx -object itself. - -If more arguments are provided then they are all appended to the -message, thus all these lines will have the same effect on the state -of the $ctx object: - - $ctx->add("a"); $ctx->add("b"); $ctx->add("c"); - $ctx->add("a")->add("b")->add("c"); - $ctx->add("a", "b", "c"); - $ctx->add("abc"); - -Most algorithms are only defined for strings of bytes and this method -might therefore croak if the provided arguments contain chars with -ordinal number above 255. - -=item $ctx->addfile( $io_handle ) - -The $io_handle is read until EOF and the content is appended to the -message we calculate the digest for. The return value is the $ctx -object itself. - -The addfile() method will croak() if it fails reading data for some -reason. If it croaks it is unpredictable what the state of the $ctx -object will be in. The addfile() method might have been able to read -the file partially before it failed. It is probably wise to discard -or reset the $ctx object if this occurs. - -In most cases you want to make sure that the $io_handle is in -"binmode" before you pass it as argument to the addfile() method. - -=item $ctx->add_bits( $data, $nbits ) - -=item $ctx->add_bits( $bitstring ) - -The add_bits() method is an alternative to add() that allow partial -bytes to be appended to the message. Most users should just ignore -this method as partial bytes is very unlikely to be of any practical -use. - -The two argument form of add_bits() will add the first $nbits bits -from $data. For the last potentially partial byte only the high order -C<< $nbits % 8 >> bits are used. If $nbits is greater than C<< -length($data) * 8 >>, then this method would do the same as C<< -$ctx->add($data) >>. - -The one argument form of add_bits() takes a $bitstring of "1" and "0" -chars as argument. It's a shorthand for C<< $ctx->add_bits(pack("B*", -$bitstring), length($bitstring)) >>. - -The return value is the $ctx object itself. - -This example shows two calls that should have the same effect: - - $ctx->add_bits("111100001010"); - $ctx->add_bits("\xF0\xA0", 12); - -Most digest algorithms are byte based and for these it is not possible -to add bits that are not a multiple of 8, and the add_bits() method -will croak if you try. - -=item $ctx->digest - -Return the binary digest for the message. - -Note that the C operation is effectively a destructive, -read-once operation. Once it has been performed, the $ctx object is -automatically C and can be used to calculate another digest -value. Call $ctx->clone->digest if you want to calculate the digest -without resetting the digest state. - -=item $ctx->hexdigest - -Same as $ctx->digest, but will return the digest in hexadecimal form. - -=item $ctx->b64digest - -Same as $ctx->digest, but will return the digest as a base64 encoded -string. - -=back - -=head1 Digest speed - -This table should give some indication on the relative speed of -different algorithms. It is sorted by throughput based on a benchmark -done with of some implementations of this API: - - Algorithm Size Implementation MB/s - - MD4 128 Digest::MD4 v1.3 165.0 - MD5 128 Digest::MD5 v2.33 98.8 - SHA-256 256 Digest::SHA2 v1.1.0 66.7 - SHA-1 160 Digest::SHA v4.3.1 58.9 - SHA-1 160 Digest::SHA1 v2.10 48.8 - SHA-256 256 Digest::SHA v4.3.1 41.3 - Haval-256 256 Digest::Haval256 v1.0.4 39.8 - SHA-384 384 Digest::SHA2 v1.1.0 19.6 - SHA-512 512 Digest::SHA2 v1.1.0 19.3 - SHA-384 384 Digest::SHA v4.3.1 19.2 - SHA-512 512 Digest::SHA v4.3.1 19.2 - Whirlpool 512 Digest::Whirlpool v1.0.2 13.0 - MD2 128 Digest::MD2 v2.03 9.5 - - Adler-32 32 Digest::Adler32 v0.03 1.3 - CRC-16 16 Digest::CRC v0.05 1.1 - CRC-32 32 Digest::CRC v0.05 1.1 - MD5 128 Digest::Perl::MD5 v1.5 1.0 - CRC-CCITT 16 Digest::CRC v0.05 0.8 - -These numbers was achieved Apr 2004 with ActivePerl-5.8.3 running -under Linux on a P4 2.8 GHz CPU. The last 5 entries differ by being -pure perl implementations of the algorithms, which explains why they -are so slow. - -=head1 SEE ALSO - -L, L, L, -L, L, L, L, -L, L, L, L - -New digest implementations should consider subclassing from L. - -L - -http://en.wikipedia.org/wiki/Cryptographic_hash_function - -=head1 AUTHOR - -Gisle Aas - -The C interface is based on the interface originally -developed by Neil Winton for his C module. - -This library is free software; you can redistribute it and/or -modify it under the same terms as Perl itself. - - Copyright 1998-2006 Gisle Aas. - Copyright 1995,1996 Neil Winton. - -=cut diff --git a/gnu/usr.bin/perl/cpan/Digest/Digest/base.pm b/gnu/usr.bin/perl/cpan/Digest/Digest/base.pm deleted file mode 100644 index b2844ba3400..00000000000 --- a/gnu/usr.bin/perl/cpan/Digest/Digest/base.pm +++ /dev/null @@ -1,100 +0,0 @@ -package Digest::base; - -use strict; -use vars qw($VERSION); -$VERSION = "1.16"; - -# subclass is supposed to implement at least these -sub new; -sub clone; -sub add; -sub digest; - -sub reset { - my $self = shift; - $self->new(@_); # ugly -} - -sub addfile { - my ($self, $handle) = @_; - - my $n; - my $buf = ""; - - while (($n = read($handle, $buf, 4*1024))) { - $self->add($buf); - } - unless (defined $n) { - require Carp; - Carp::croak("Read failed: $!"); - } - - $self; -} - -sub add_bits { - my $self = shift; - my $bits; - my $nbits; - if (@_ == 1) { - my $arg = shift; - $bits = pack("B*", $arg); - $nbits = length($arg); - } - else { - ($bits, $nbits) = @_; - } - if (($nbits % 8) != 0) { - require Carp; - Carp::croak("Number of bits must be multiple of 8 for this algorithm"); - } - return $self->add(substr($bits, 0, $nbits/8)); -} - -sub hexdigest { - my $self = shift; - return unpack("H*", $self->digest(@_)); -} - -sub b64digest { - my $self = shift; - require MIME::Base64; - my $b64 = MIME::Base64::encode($self->digest(@_), ""); - $b64 =~ s/=+$//; - return $b64; -} - -1; - -__END__ - -=head1 NAME - -Digest::base - Digest base class - -=head1 SYNOPSIS - - package Digest::Foo; - use base 'Digest::base'; - -=head1 DESCRIPTION - -The C class provide implementations of the methods -C and C in terms of C, and of the methods -C and C in terms of C. - -Digest implementations might want to inherit from this class to get -this implementations of the alternative I and I methods. -A minimal subclass needs to implement the following methods by itself: - - new - clone - add - digest - -The arguments and expected behaviour of these methods are described in -L. - -=head1 SEE ALSO - -L diff --git a/gnu/usr.bin/perl/cpan/Digest/Digest/file.pm b/gnu/usr.bin/perl/cpan/Digest/Digest/file.pm deleted file mode 100644 index 3b86e63503a..00000000000 --- a/gnu/usr.bin/perl/cpan/Digest/Digest/file.pm +++ /dev/null @@ -1,85 +0,0 @@ -package Digest::file; - -use strict; - -use Exporter (); -use Carp qw(croak); -use Digest (); - -use vars qw($VERSION @ISA @EXPORT_OK); - -$VERSION = "1.16"; -@ISA = qw(Exporter); -@EXPORT_OK = qw(digest_file_ctx digest_file digest_file_hex digest_file_base64); - -sub digest_file_ctx { - my $file = shift; - croak("No digest algorithm specified") unless @_; - local *F; - open(F, "<", $file) || croak("Can't open '$file': $!"); - binmode(F); - my $ctx = Digest->new(@_); - $ctx->addfile(*F); - close(F); - return $ctx; -} - -sub digest_file { - digest_file_ctx(@_)->digest; -} - -sub digest_file_hex { - digest_file_ctx(@_)->hexdigest; -} - -sub digest_file_base64 { - digest_file_ctx(@_)->b64digest; -} - -1; - -__END__ - -=head1 NAME - -Digest::file - Calculate digests of files - -=head1 SYNOPSIS - - # Poor mans "md5sum" command - use Digest::file qw(digest_file_hex); - for (@ARGV) { - print digest_file_hex($_, "MD5"), " $_\n"; - } - -=head1 DESCRIPTION - -This module provide 3 convenience functions to calculate the digest -of files. The following functions are provided: - -=over - -=item digest_file( $file, $algorithm, [$arg,...] ) - -This function will calculate and return the binary digest of the bytes -of the given file. The function will croak if it fails to open or -read the file. - -The $algorithm is a string like "MD2", "MD5", "SHA-1", "SHA-512". -Additional arguments are passed to the constructor for the -implementation of the given algorithm. - -=item digest_file_hex( $file, $algorithm, [$arg,...] ) - -Same as digest_file(), but return the digest in hex form. - -=item digest_file_base64( $file, $algorithm, [$arg,...] ) - -Same as digest_file(), but return the digest as a base64 encoded -string. - -=back - -=head1 SEE ALSO - -L diff --git a/gnu/usr.bin/perl/cpan/Digest/t/base.t b/gnu/usr.bin/perl/cpan/Digest/t/base.t index bd87a5dda7e..153d4d45ed9 100755 --- a/gnu/usr.bin/perl/cpan/Digest/t/base.t +++ b/gnu/usr.bin/perl/cpan/Digest/t/base.t @@ -1,83 +1,88 @@ #!perl -w -use Test::More tests => 12; +use strict; +use warnings; + +use Test::More tests => 13; + +use File::Temp 'tempfile'; { - package LenDigest; - require Digest::base; - use vars qw(@ISA); - @ISA = qw(Digest::base); - - sub new { - my $class = shift; - my $str = ""; - bless \$str, $class; - } - - sub add { - my $self = shift; - $$self .= join("", @_); - return $self; - } - - sub digest { - my $self = shift; - my $len = length($$self); - my $first = ($len > 0) ? substr($$self, 0, 1) : "X"; - $$self = ""; - return sprintf "$first%04d", $len; - } + + package LenDigest; + require Digest::base; + our @ISA = qw(Digest::base); + + sub new { + my $class = shift; + my $str = ""; + bless \$str, $class; + } + + sub add { + my $self = shift; + $$self .= join( "", @_ ); + return $self; + } + + sub digest { + my $self = shift; + my $len = length($$self); + my $first = ( $len > 0 ) ? substr( $$self, 0, 1 ) : "X"; + $$self = ""; + return sprintf "$first%04d", $len; + } } my $ctx = LenDigest->new; -is($ctx->digest, "X0000"); +is( $ctx->digest, "X0000" ); my $EBCDIC = ord('A') == 193; if ($EBCDIC) { - is($ctx->hexdigest, "e7f0f0f0f0"); - is($ctx->b64digest, "5/Dw8PA"); -} else { - is($ctx->hexdigest, "5830303030"); - is($ctx->b64digest, "WDAwMDA"); + is( $ctx->hexdigest, "e7f0f0f0f0" ); + is( $ctx->b64digest, "5/Dw8PA" ); + is( $ctx->base64_padded_digest, "5/Dw8PA=" ); +} +else { + is( $ctx->hexdigest, "5830303030" ); + is( $ctx->b64digest, "WDAwMDA" ); + is( $ctx->base64_padded_digest, "WDAwMDA=" ); } $ctx->add("foo"); -is($ctx->digest, "f0003"); +is( $ctx->digest, "f0003" ); $ctx->add("foo"); -is($ctx->hexdigest, $EBCDIC ? "86f0f0f0f3" : "6630303033"); +is( $ctx->hexdigest, $EBCDIC ? "86f0f0f0f3" : "6630303033" ); $ctx->add("foo"); -is($ctx->b64digest, $EBCDIC ? "hvDw8PM" : "ZjAwMDM"); +is( $ctx->b64digest, $EBCDIC ? "hvDw8PM" : "ZjAwMDM" ); -open(F, ">xxtest$$") || die; -binmode(F); -print F "abc" x 100, "\n"; -close(F) || die; +{ + my ( $fh, $tempfile ) = tempfile( UNLINK => 1 ); + binmode($fh); + print $fh "abc" x 100, "\n"; + close($fh) || die; -open(F, "xxtest$$") || die; -$ctx->addfile(*F); -close(F); -unlink("xxtest$$") || warn; + open( my $fh2, $tempfile ) || die; + $ctx->addfile($fh2); + close($fh2); -is($ctx->digest, "a0301"); + is( $ctx->digest, "a0301" ); +} -eval { - $ctx->add_bits("1010"); -}; -like($@, '/^Number of bits must be multiple of 8/'); +eval { $ctx->add_bits("1010"); }; +like( $@, '/^Number of bits must be multiple of 8/' ); -$ctx->add_bits($EBCDIC ? "11100100" : "01010101"); -is($ctx->digest, "U0001"); +$ctx->add_bits( $EBCDIC ? "11100100" : "01010101" ); +is( $ctx->digest, "U0001" ); -eval { - $ctx->add_bits("abc", 12); -}; -like($@, '/^Number of bits must be multiple of 8/'); +eval { $ctx->add_bits( "abc", 12 ); }; +like( $@, '/^Number of bits must be multiple of 8/' ); -$ctx->add_bits("abc", 16); -is($ctx->digest, "a0002"); +$ctx->add_bits( "abc", 16 ); +is( $ctx->digest, "a0002" ); -$ctx->add_bits("abc", 32); -is($ctx->digest, "a0003"); +$ctx->add_bits( "abc", 32 ); +is( $ctx->digest, "a0003" ); diff --git a/gnu/usr.bin/perl/cpan/Digest/t/digest.t b/gnu/usr.bin/perl/cpan/Digest/t/digest.t index 81260277f45..941f21de76c 100755 --- a/gnu/usr.bin/perl/cpan/Digest/t/digest.t +++ b/gnu/usr.bin/perl/cpan/Digest/t/digest.t @@ -1,6 +1,8 @@ #!/usr/bin/env perl use strict; +use warnings; + use Test::More tests => 4; # To find Digest::Dummy @@ -17,6 +19,6 @@ is $d->digest, "ooo"; $d = Digest->Dummy; is $d->digest, "ooo"; -$Digest::MMAP{"Dummy-24"} = [["NotThere"], "NotThereEither", ["Digest::Dummy", 24]]; +$Digest::MMAP{"Dummy-24"} = [ ["NotThere"], "NotThereEither", [ "Digest::Dummy", 24 ] ]; $d = Digest->new("Dummy-24"); is $d->digest, "24"; diff --git a/gnu/usr.bin/perl/cpan/Digest/t/file.t b/gnu/usr.bin/perl/cpan/Digest/t/file.t index 79f32deffed..48ef39de720 100755 --- a/gnu/usr.bin/perl/cpan/Digest/t/file.t +++ b/gnu/usr.bin/perl/cpan/Digest/t/file.t @@ -1,51 +1,56 @@ #!perl -w +use strict; +use warnings; + use Test::More tests => 5; +use File::Temp 'tempfile'; + { - package Digest::Foo; - require Digest::base; - use vars qw(@ISA $VERSION); - @ISA = qw(Digest::base); - - sub new { - my $class = shift; - my $str = ""; - bless \$str, $class; - } - - sub add { - my $self = shift; - $$self .= join("", @_); - return $self; - } - - sub digest { - my $self = shift; - return sprintf "%04d", length($$self); - } + + package Digest::Foo; + $INC{'Digest/Foo.pm'} = "local"; + require Digest::base; + our @ISA = qw(Digest::base); + + sub new { + my $class = shift; + my $str = ""; + bless \$str, $class; + } + + sub add { + my $self = shift; + $$self .= join( "", @_ ); + return $self; + } + + sub digest { + my $self = shift; + return sprintf "%04d", length($$self); + } } use Digest::file qw(digest_file digest_file_hex digest_file_base64); -my $file = "test-$$"; -die if -f $file; -open(F, ">$file") || die "Can't create '$file': $!"; -binmode(F); -print F "foo\0\n"; -close(F) || die "Can't write '$file': $!"; - -is(digest_file($file, "Foo"), "0005"); - -if (ord('A') == 193) { # EBCDIC. - is(digest_file_hex($file, "Foo"), "f0f0f0f5"); - is(digest_file_base64($file, "Foo"), "8PDw9Q"); -} else { - is(digest_file_hex($file, "Foo"), "30303035"); - is(digest_file_base64($file, "Foo"), "MDAwNQ"); +{ + my ( $fh, $file ) = tempfile( UNLINK => 1 ); + binmode($fh); + print $fh "foo\0\n"; + close($fh) || die "Can't write '$file': $!"; + + is( digest_file( $file, "Foo" ), "0005" ); + + if ( ord('A') == 193 ) { # EBCDIC. + is( digest_file_hex( $file, "Foo" ), "f0f0f0f5" ); + is( digest_file_base64( $file, "Foo" ), "8PDw9Q" ); + } + else { + is( digest_file_hex( $file, "Foo" ), "30303035" ); + is( digest_file_base64( $file, "Foo" ), "MDAwNQ" ); + } } -unlink($file) || warn "Can't unlink '$file': $!"; - -ok !eval { digest_file("not-there.txt", "Foo") }; +ok !eval { digest_file( "not-there.txt", "Foo" ) }; ok $@; diff --git a/gnu/usr.bin/perl/cpan/Encode/Encode.pm b/gnu/usr.bin/perl/cpan/Encode/Encode.pm index e4a23d7a947..fc857f5af75 100644 --- a/gnu/usr.bin/perl/cpan/Encode/Encode.pm +++ b/gnu/usr.bin/perl/cpan/Encode/Encode.pm @@ -1,5 +1,5 @@ # -# $Id: Encode.pm,v 3.06 2020/05/02 02:31:14 dankogai Exp $ +# $Id: Encode.pm,v 3.17 2022/04/07 03:05:51 dankogai Exp $ # package Encode; use strict; @@ -7,8 +7,7 @@ use warnings; use constant DEBUG => !!$ENV{PERL_ENCODE_DEBUG}; our $VERSION; BEGIN { - $VERSION = "3.06_01"; - $VERSION = eval $VERSION; + $VERSION = sprintf "%d.%02d", q$Revision: 3.17 $ =~ /(\d+)/g; require XSLoader; XSLoader::load( __PACKAGE__, $VERSION ); } @@ -203,18 +202,6 @@ if ($ON_EBCDIC) { $_[1] = '' if $chk; return $res; } -} else { - package Encode::Internal; - use parent 'Encode::Encoding'; - my $obj = bless { Name => "Internal" } => "Encode::Internal"; - Encode::define_encoding($obj, 'Unicode'); - sub decode { - my ( undef, $str, $chk ) = @_; - utf8::upgrade($str); - $_[1] = '' if $chk; - return $str; - } - *encode = \&decode; } { @@ -500,19 +487,25 @@ followed by C as follows: $octets = encode_utf8($string); +B: L +Do not use it for data exchange. +Unless you want Perl's older "lax" mode, prefer +C<$octets = encode("UTF-8", $string)>. + Equivalent to C<$octets = encode("utf8", $string)>. The characters in $string are encoded in Perl's internal format, and the result is returned as a sequence of octets. Because all possible characters in Perl have a (loose, not strict) utf8 representation, this function cannot fail. -B: do not use this function for data exchange as it can produce -not strict utf8 $octets! For strictly valid UTF-8 output use -C<$octets = encode("UTF-8", $string)>. - =head3 decode_utf8 $string = decode_utf8($octets [, CHECK]); +B: L +Do not use it for data exchange. +Unless you want Perl's older "lax" mode, prefer +C<$string = decode("UTF-8", $octets [, CHECK])>. + Equivalent to C<$string = decode("utf8", $octets [, CHECK])>. The sequence of octets represented by $octets is decoded from (loose, not strict) utf8 into a sequence of logical characters. @@ -520,10 +513,6 @@ Because not all sequences of octets are valid not strict utf8, it is quite possible for this function to fail. For CHECK, see L. -B: do not use this function for data exchange as it can produce -$string with not strict utf8 representation! For strictly valid UTF-8 -$string representation use C<$string = decode("UTF-8", $octets [, CHECK])>. - B: the input I<$octets> might be modified in-place depending on what is set in CHECK. See L if you want your inputs to be left unchanged. @@ -928,6 +917,20 @@ important distinction between C<"UTF-8"> and C<"utf8">. encode("utf8", "\x{FFFF_FFFF}", 1); # okay encode("UTF-8", "\x{FFFF_FFFF}", 1); # croaks +This distinction is also important for decoding. In the following, +C<$s> stores character U+200000, which exceeds UTF-8's allowed range. +C<$s> thus stores an invalid Unicode code point: + + $s = decode("utf8", "\xf8\x88\x80\x80\x80"); + +C<"UTF-8">, by contrast, will either coerce the input to something valid: + + $s = decode("UTF-8", "\xf8\x88\x80\x80\x80"); # U+FFFD + +.. or croak: + + decode("UTF-8", "\xf8\x88\x80\x80\x80", FB_CROAK|LEAVE_SRC); + In the C module, C<"UTF-8"> is actually a canonical name for C<"utf-8-strict">. That hyphen between the C<"UTF"> and the C<"8"> is critical; without it, C goes "liberal" and (perhaps overly-)permissive: diff --git a/gnu/usr.bin/perl/cpan/Encode/Encode.xs b/gnu/usr.bin/perl/cpan/Encode/Encode.xs index 4baf2963aa4..4882cc73144 100644 --- a/gnu/usr.bin/perl/cpan/Encode/Encode.xs +++ b/gnu/usr.bin/perl/cpan/Encode/Encode.xs @@ -1,5 +1,5 @@ /* - $Id: Encode.xs,v 2.48 2020/03/02 04:34:34 dankogai Exp $ + $Id: Encode.xs,v 2.51 2021/10/08 15:29:23 dankogai Exp $ */ #define PERL_NO_GET_CONTEXT @@ -154,7 +154,7 @@ encode_method(pTHX_ const encode_t * enc, const encpage_t * dir, SV * src, U8 * STRLEN sdone = 0; /* We allocate slen+1. PerlIO dumps core if this value is smaller than this. */ - SV *dst = newSV(slen+1); + SV *dst = sv_2mortal(newSV(slen+1)); U8 *d = (U8 *)SvPVX(dst); STRLEN dlen = SvLEN(dst)-1; int code = 0; @@ -810,13 +810,12 @@ CODE: tmp = encode_method(aTHX_ enc, enc->t_utf8, src, s, slen, check, &offset, term, &code, fallback_cb); sv_catsv(dst, tmp); - SvREFCNT_dec(tmp); SvIV_set(off, (IV)offset); RETVAL = (code == ENCODE_FOUND_TERM); OUTPUT: RETVAL -SV * +void Method_decode(obj,src,check_sv = &PL_sv_no) SV * obj SV * src @@ -828,6 +827,7 @@ PREINIT: encode_t *enc; U8 *s; STRLEN slen; + SV *ret; INIT: SvGETMAGIC(src); SvGETMAGIC(check_sv); @@ -841,13 +841,13 @@ CODE: s = modify ? (U8 *)SvPV_force_nomg(src, slen) : (U8 *)SvPV_nomg(src, slen); if (SvUTF8(src)) utf8_safe_downgrade(aTHX_ &src, &s, &slen, modify); - RETVAL = encode_method(aTHX_ enc, enc->t_utf8, src, s, slen, check, + ret = encode_method(aTHX_ enc, enc->t_utf8, src, s, slen, check, NULL, Nullsv, NULL, fallback_cb); - SvUTF8_on(RETVAL); -OUTPUT: - RETVAL + SvUTF8_on(ret); + ST(0) = ret; + XSRETURN(1); -SV * +void Method_encode(obj,src,check_sv = &PL_sv_no) SV * obj SV * src @@ -859,6 +859,7 @@ PREINIT: encode_t *enc; U8 *s; STRLEN slen; + SV *ret; INIT: SvGETMAGIC(src); SvGETMAGIC(check_sv); @@ -872,10 +873,10 @@ CODE: s = modify ? (U8 *)SvPV_force_nomg(src, slen) : (U8 *)SvPV_nomg(src, slen); if (!SvUTF8(src)) utf8_safe_upgrade(aTHX_ &src, &s, &slen, modify); - RETVAL = encode_method(aTHX_ enc, enc->f_utf8, src, s, slen, check, + ret = encode_method(aTHX_ enc, enc->f_utf8, src, s, slen, check, NULL, Nullsv, NULL, fallback_cb); -OUTPUT: - RETVAL + ST(0) = ret; + XSRETURN(1); bool Method_needs_lines(obj) diff --git a/gnu/usr.bin/perl/cpan/Encode/JP/JP.pm b/gnu/usr.bin/perl/cpan/Encode/JP/JP.pm index 4251170c561..09efaaa8c31 100644 --- a/gnu/usr.bin/perl/cpan/Encode/JP/JP.pm +++ b/gnu/usr.bin/perl/cpan/Encode/JP/JP.pm @@ -7,7 +7,7 @@ BEGIN { use strict; use warnings; use Encode; -our $VERSION = do { my @r = ( q$Revision: 2.4 $ =~ /\d+/g ); sprintf "%d." . "%02d" x $#r, @r }; +our $VERSION = do { my @r = ( q$Revision: 2.5 $ =~ /\d+/g ); sprintf "%d." . "%02d" x $#r, @r }; use XSLoader; XSLoader::load( __PACKAGE__, $VERSION ); @@ -50,8 +50,8 @@ supported are as follows. cp932 /\bwindows-31j$/i Code Page 932 = Shift JIS + MS/IBM vendor mappings jis0201-raw JIS0201, raw format - jis0208-raw JIS0201, raw format - jis0212-raw JIS0201, raw format + jis0208-raw JIS0208, raw format + jis0212-raw JIS0212, raw format -------------------------------------------------------------------- =head1 DESCRIPTION diff --git a/gnu/usr.bin/perl/cpan/Encode/Makefile.PL b/gnu/usr.bin/perl/cpan/Encode/Makefile.PL index 8c20d20226f..3cb95e89f03 100644 --- a/gnu/usr.bin/perl/cpan/Encode/Makefile.PL +++ b/gnu/usr.bin/perl/cpan/Encode/Makefile.PL @@ -1,5 +1,5 @@ # -# $Id: Makefile.PL,v 2.22 2017/10/06 22:21:53 dankogai Exp $ +# $Id: Makefile.PL,v 2.24 2021/10/13 08:29:13 dankogai Exp $ # use 5.007003; use strict; @@ -20,7 +20,7 @@ if (!$ENV{PERL_CORE}) { $gccver =~ s/\.//g; $gccver =~ s/ .*//; $gccver .= "0" while length $gccver < 3; $gccver = 0+$gccver; - $ccflags .= ' -Werror=declaration-after-statement' if $gccver > 412; + $ccflags .= ' -Werror=declaration-after-statement' if $gccver > 412 and $] < 5.035005; $ccflags .= ' -Wpointer-sign' if !$Config{d_cplusplus} and $gccver > 400; $ccflags .= ' -fpermissive' if $Config{d_cplusplus}; } @@ -70,7 +70,7 @@ WriteMakefile( Storable => '0', # bundled with Perl 5.7.3 }, TEST_REQUIRES => { - 'Test::More' => '0.81_01', + 'Test::More' => '0.92', }, PMLIBDIRS => \@pmlibdirs, INSTALLDIRS => ($] < 5.011 ? 'perl' : 'site'), diff --git a/gnu/usr.bin/perl/cpan/Encode/Unicode/Unicode.pm b/gnu/usr.bin/perl/cpan/Encode/Unicode/Unicode.pm index 540337e94f6..965803772fc 100644 --- a/gnu/usr.bin/perl/cpan/Encode/Unicode/Unicode.pm +++ b/gnu/usr.bin/perl/cpan/Encode/Unicode/Unicode.pm @@ -3,7 +3,7 @@ package Encode::Unicode; use strict; use warnings; -our $VERSION = do { my @r = ( q$Revision: 2.18 $ =~ /\d+/g ); sprintf "%d." . "%02d" x $#r, @r }; +our $VERSION = do { my @r = ( q$Revision: 2.20 $ =~ /\d+/g ); sprintf "%d." . "%02d" x $#r, @r }; use XSLoader; XSLoader::load( __PACKAGE__, $VERSION ); @@ -170,7 +170,7 @@ simply treated as a normal character (ZERO WIDTH NO-BREAK SPACE). When BE or LE is omitted during decode(), it checks if BOM is at the beginning of the string; if one is found, the endianness is set to -what the BOM says. +what the BOM says. =item * @@ -258,15 +258,15 @@ Consider that "division by zero" of Encode :) =head1 SEE ALSO -L, L, L, -L, +L, L, L, +L, RFC 2781 L, -The whole Unicode standard L +The whole Unicode standard L -Ch. 15, pp. 403 of C -by Larry Wall, Tom Christiansen, Jon Orwant; -O'Reilly & Associates; ISBN 0-596-00027-8 +Ch. 6 pp. 275 of C +by Tom Christiansen, brian d foy & Larry Wall; +O'Reilly & Associates; ISBN 978-0-596-00492-7 =cut diff --git a/gnu/usr.bin/perl/cpan/Encode/Unicode/Unicode.xs b/gnu/usr.bin/perl/cpan/Encode/Unicode/Unicode.xs index 4e111e25d78..cc4817e117c 100644 --- a/gnu/usr.bin/perl/cpan/Encode/Unicode/Unicode.xs +++ b/gnu/usr.bin/perl/cpan/Encode/Unicode/Unicode.xs @@ -1,5 +1,5 @@ /* - $Id: Unicode.xs,v 2.19 2019/01/21 03:09:59 dankogai Exp $ + $Id: Unicode.xs,v 2.20 2021/07/23 02:26:54 dankogai Exp $ */ #define IN_UNICODE_XS @@ -361,6 +361,10 @@ CODE: } if (!temp_result) shrink_buffer(result); + + /* Make sure we have a trailing NUL: */ + *SvEND(result) = '\0'; + if (SvTAINTED(str)) SvTAINTED_on(result); /* propagate taintedness */ XSRETURN(1); } diff --git a/gnu/usr.bin/perl/cpan/Encode/bin/enc2xs b/gnu/usr.bin/perl/cpan/Encode/bin/enc2xs index 1209baa9cdd..c1c9796002c 100644 --- a/gnu/usr.bin/perl/cpan/Encode/bin/enc2xs +++ b/gnu/usr.bin/perl/cpan/Encode/bin/enc2xs @@ -11,7 +11,7 @@ use warnings; use Getopt::Std; use Config; my @orig_ARGV = @ARGV; -our $VERSION = do { my @r = (q$Revision: 2.23 $ =~ /\d+/g); sprintf "%d."."%02d" x $#r, @r }; +our $VERSION = do { my @r = (q$Revision: 2.24 $ =~ /\d+/g); sprintf "%d."."%02d" x $#r, @r }; # These may get re-ordered. # RAW is a do_now as inserted by &enter @@ -249,7 +249,12 @@ if ($cname =~ /\.(c|xs)$/i) # VMS may have upcased filenames with DECC$ARGV_PARS END } - if ($cname =~ /(\w+)\.xs$/) + if ($cname =~ /\.c$/i && $Config{ccname} eq "gcc") + { + print C qq(#pragma GCC diagnostic ignored "-Wc++-compat"\n); + } + + if ($cname =~ /\.xs$/i) { print C "#define PERL_NO_GET_CONTEXT\n"; print C "#include \n"; @@ -259,15 +264,15 @@ END print C "#include \"encode.h\"\n\n"; } -elsif ($cname =~ /\.enc$/) +elsif ($cname =~ /\.enc$/i) { $doEnc = 1; } -elsif ($cname =~ /\.ucm$/) +elsif ($cname =~ /\.ucm$/i) { $doUcm = 1; } -elsif ($cname =~ /\.pet$/) +elsif ($cname =~ /\.pet$/i) { $doPet = 1; } diff --git a/gnu/usr.bin/perl/cpan/Encode/bin/encguess b/gnu/usr.bin/perl/cpan/Encode/bin/encguess index 0f344ea3fc0..440733eea0b 100644 --- a/gnu/usr.bin/perl/cpan/Encode/bin/encguess +++ b/gnu/usr.bin/perl/cpan/Encode/bin/encguess @@ -61,7 +61,7 @@ encguess - guess character encodings of files =head1 VERSION -$Id: encguess,v 0.2 2016/08/04 03:15:58 dankogai Exp $ +$Id: encguess,v 0.3 2020/12/02 01:28:17 dankogai Exp $ =head1 SYNOPSIS @@ -78,7 +78,7 @@ show this message and exit. =item -s specify a list of "suspect encoding types" to test, -seperated by either C<:> or C<,> +separated by either C<:> or C<,> =item -S diff --git a/gnu/usr.bin/perl/cpan/Encode/lib/Encode/GSM0338.pm b/gnu/usr.bin/perl/cpan/Encode/lib/Encode/GSM0338.pm index e87141ebc41..b149c6dc9ca 100644 --- a/gnu/usr.bin/perl/cpan/Encode/lib/Encode/GSM0338.pm +++ b/gnu/usr.bin/perl/cpan/Encode/lib/Encode/GSM0338.pm @@ -1,5 +1,5 @@ # -# $Id: GSM0338.pm,v 2.7 2017/06/10 17:23:50 dankogai Exp $ +# $Id: GSM0338.pm,v 2.10 2021/05/24 10:56:53 dankogai Exp $ # package Encode::GSM0338; @@ -8,19 +8,18 @@ use warnings; use Carp; use vars qw($VERSION); -$VERSION = do { my @r = ( q$Revision: 2.7 $ =~ /\d+/g ); sprintf "%d." . "%02d" x $#r, @r }; +$VERSION = do { my @r = ( q$Revision: 2.10 $ =~ /\d+/g ); sprintf "%d." . "%02d" x $#r, @r }; use Encode qw(:fallbacks); use parent qw(Encode::Encoding); __PACKAGE__->Define('gsm0338'); -sub needs_lines { 1 } -sub perlio_ok { 0 } - use utf8; + +# Mapping table according to 3GPP TS 23.038 version 16.0.0 Release 16 and ETSI TS 123 038 V16.0.0 (2020-07) +# https://www.etsi.org/deliver/etsi_ts/123000_123099/123038/16.00.00_60/ts_123038v160000p.pdf (page 20 and 22) our %UNI2GSM = ( - "\x{0040}" => "\x00", # COMMERCIAL AT "\x{000A}" => "\x0A", # LINE FEED "\x{000C}" => "\x1B\x0A", # FORM FEED "\x{000D}" => "\x0D", # CARRIAGE RETURN @@ -56,6 +55,7 @@ our %UNI2GSM = ( "\x{003D}" => "\x3D", # EQUALS SIGN "\x{003E}" => "\x3E", # GREATER-THAN SIGN "\x{003F}" => "\x3F", # QUESTION MARK + "\x{0040}" => "\x00", # COMMERCIAL AT "\x{0041}" => "\x41", # LATIN CAPITAL LETTER A "\x{0042}" => "\x42", # LATIN CAPITAL LETTER B "\x{0043}" => "\x43", # LATIN CAPITAL LETTER C @@ -82,6 +82,10 @@ our %UNI2GSM = ( "\x{0058}" => "\x58", # LATIN CAPITAL LETTER X "\x{0059}" => "\x59", # LATIN CAPITAL LETTER Y "\x{005A}" => "\x5A", # LATIN CAPITAL LETTER Z + "\x{005B}" => "\x1B\x3C", # LEFT SQUARE BRACKET + "\x{005C}" => "\x1B\x2F", # REVERSE SOLIDUS + "\x{005D}" => "\x1B\x3E", # RIGHT SQUARE BRACKET + "\x{005E}" => "\x1B\x14", # CIRCUMFLEX ACCENT "\x{005F}" => "\x11", # LOW LINE "\x{0061}" => "\x61", # LATIN SMALL LETTER A "\x{0062}" => "\x62", # LATIN SMALL LETTER B @@ -109,16 +113,10 @@ our %UNI2GSM = ( "\x{0078}" => "\x78", # LATIN SMALL LETTER X "\x{0079}" => "\x79", # LATIN SMALL LETTER Y "\x{007A}" => "\x7A", # LATIN SMALL LETTER Z - "\x{000C}" => "\x1B\x0A", # FORM FEED - "\x{005B}" => "\x1B\x3C", # LEFT SQUARE BRACKET - "\x{005C}" => "\x1B\x2F", # REVERSE SOLIDUS - "\x{005D}" => "\x1B\x3E", # RIGHT SQUARE BRACKET - "\x{005E}" => "\x1B\x14", # CIRCUMFLEX ACCENT "\x{007B}" => "\x1B\x28", # LEFT CURLY BRACKET "\x{007C}" => "\x1B\x40", # VERTICAL LINE "\x{007D}" => "\x1B\x29", # RIGHT CURLY BRACKET "\x{007E}" => "\x1B\x3D", # TILDE - "\x{00A0}" => "\x1B", # NO-BREAK SPACE "\x{00A1}" => "\x40", # INVERTED EXCLAMATION MARK "\x{00A3}" => "\x01", # POUND SIGN "\x{00A4}" => "\x24", # CURRENCY SIGN @@ -128,6 +126,7 @@ our %UNI2GSM = ( "\x{00C4}" => "\x5B", # LATIN CAPITAL LETTER A WITH DIAERESIS "\x{00C5}" => "\x0E", # LATIN CAPITAL LETTER A WITH RING ABOVE "\x{00C6}" => "\x1C", # LATIN CAPITAL LETTER AE + "\x{00C7}" => "\x09", # LATIN CAPITAL LETTER C WITH CEDILLA "\x{00C9}" => "\x1F", # LATIN CAPITAL LETTER E WITH ACUTE "\x{00D1}" => "\x5D", # LATIN CAPITAL LETTER N WITH TILDE "\x{00D6}" => "\x5C", # LATIN CAPITAL LETTER O WITH DIAERESIS @@ -138,8 +137,6 @@ our %UNI2GSM = ( "\x{00E4}" => "\x7B", # LATIN SMALL LETTER A WITH DIAERESIS "\x{00E5}" => "\x0F", # LATIN SMALL LETTER A WITH RING ABOVE "\x{00E6}" => "\x1D", # LATIN SMALL LETTER AE - #"\x{00E7}" => "\x09", # LATIN SMALL LETTER C WITH CEDILLA - "\x{00C7}" => "\x09", # LATIN CAPITAL LETTER C WITH CEDILLA "\x{00E8}" => "\x04", # LATIN SMALL LETTER E WITH GRAVE "\x{00E9}" => "\x05", # LATIN SMALL LETTER E WITH ACUTE "\x{00EC}" => "\x07", # LATIN SMALL LETTER I WITH GRAVE @@ -162,76 +159,71 @@ our %UNI2GSM = ( "\x{20AC}" => "\x1B\x65", # EURO SIGN ); our %GSM2UNI = reverse %UNI2GSM; -our $ESC = "\x1b"; -our $ATMARK = "\x40"; -our $FBCHAR = "\x3F"; -our $NBSP = "\x{00A0}"; - -#define ERR_DECODE_NOMAP "%s \"\\x%02" UVXf "\" does not map to Unicode" +our $ESC = "\x1b"; sub decode ($$;$) { my ( $obj, $bytes, $chk ) = @_; return undef unless defined $bytes; - my $str = substr($bytes, 0, 0); # to propagate taintedness; + my $str = substr( $bytes, 0, 0 ); # to propagate taintedness; while ( length $bytes ) { - my $c = substr( $bytes, 0, 1, '' ); - my $u; - if ( $c eq "\x00" ) { - my $c2 = substr( $bytes, 0, 1, '' ); - $u = - !length $c2 ? $ATMARK - : $c2 eq "\x00" ? "\x{0000}" - : exists $GSM2UNI{$c2} ? $ATMARK . $GSM2UNI{$c2} - : $chk - ? croak sprintf( "\\x%02X\\x%02X does not map to Unicode", - ord($c), ord($c2) ) - : $ATMARK . $FBCHAR; - - } - elsif ( $c eq $ESC ) { - my $c2 = substr( $bytes, 0, 1, '' ); - $u = - exists $GSM2UNI{ $c . $c2 } ? $GSM2UNI{ $c . $c2 } - : exists $GSM2UNI{$c2} ? $NBSP . $GSM2UNI{$c2} - : $chk - ? croak sprintf( "\\x%02X\\x%02X does not map to Unicode", - ord($c), ord($c2) ) - : $NBSP . $FBCHAR; - } - else { - $u = - exists $GSM2UNI{$c} - ? $GSM2UNI{$c} - : $chk ? ref $chk eq 'CODE' - ? $chk->( ord $c ) - : croak sprintf( "\\x%02X does not map to Unicode", ord($c) ) - : $FBCHAR; + my $seq = ''; + my $c; + do { + $c = substr( $bytes, 0, 1, '' ); + $seq .= $c; + } while ( length $bytes and $c eq $ESC ); + my $u = + exists $GSM2UNI{$seq} ? $GSM2UNI{$seq} + : ( $chk && ref $chk eq 'CODE' ) ? $chk->( unpack 'C*', $seq ) + : "\x{FFFD}"; + if ( not exists $GSM2UNI{$seq} and $chk and not ref $chk ) { + if ( substr( $seq, 0, 1 ) eq $ESC + and ( $chk & Encode::STOP_AT_PARTIAL ) ) + { + $bytes .= $seq; + last; + } + croak join( '', map { sprintf "\\x%02X", $_ } unpack 'C*', $seq ) + . ' does not map to Unicode' + if $chk & Encode::DIE_ON_ERR; + carp join( '', map { sprintf "\\x%02X", $_ } unpack 'C*', $seq ) + . ' does not map to Unicode' + if $chk & Encode::WARN_ON_ERR; + if ( $chk & Encode::RETURN_ON_ERR ) { + $bytes .= $seq; + last; + } } $str .= $u; } - $_[1] = $bytes if $chk; + $_[1] = $bytes if not ref $chk and $chk and !( $chk & Encode::LEAVE_SRC ); return $str; } -#define ERR_ENCODE_NOMAP "\"\\x{%04" UVxf "}\" does not map to %s" - sub encode($$;$) { my ( $obj, $str, $chk ) = @_; return undef unless defined $str; - my $bytes = substr($str, 0, 0); # to propagate taintedness + my $bytes = substr( $str, 0, 0 ); # to propagate taintedness while ( length $str ) { my $u = substr( $str, 0, 1, '' ); my $c; - $bytes .= - exists $UNI2GSM{$u} - ? $UNI2GSM{$u} - : $chk ? ref $chk eq 'CODE' - ? $chk->( ord($u) ) - : croak sprintf( "\\x{%04x} does not map to %s", - ord($u), $obj->name ) - : $FBCHAR; + my $seq = + exists $UNI2GSM{$u} ? $UNI2GSM{$u} + : ( $chk && ref $chk eq 'CODE' ) ? $chk->( ord($u) ) + : $UNI2GSM{'?'}; + if ( not exists $UNI2GSM{$u} and $chk and not ref $chk ) { + croak sprintf( "\\x{%04x} does not map to %s", ord($u), $obj->name ) + if $chk & Encode::DIE_ON_ERR; + carp sprintf( "\\x{%04x} does not map to %s", ord($u), $obj->name ) + if $chk & Encode::WARN_ON_ERR; + if ( $chk & Encode::RETURN_ON_ERR ) { + $str .= $u; + last; + } + } + $bytes .= $seq; } - $_[1] = $str if $chk; + $_[1] = $str if not ref $chk and $chk and !( $chk & Encode::LEAVE_SRC ); return $bytes; } @@ -240,13 +232,13 @@ __END__ =head1 NAME -Encode::GSM0338 -- ESTI GSM 03.38 Encoding +Encode::GSM0338 -- ETSI GSM 03.38 Encoding =head1 SYNOPSIS - use Encode qw/encode decode/; - $gsm0338 = encode("gsm0338", $utf8); # loads Encode::GSM0338 implicitly - $utf8 = decode("gsm0338", $gsm0338); # ditto + use Encode qw/encode decode/; + $gsm0338 = encode("gsm0338", $unicode); # loads Encode::GSM0338 implicitly + $unicode = decode("gsm0338", $gsm0338); # ditto =head1 DESCRIPTION @@ -259,35 +251,42 @@ This was once handled by L but because of all those unusual specifications, Encode 2.20 has relocated the support to this module. -=head1 NOTES +This module implements only I and +I according to standard +3GPP TS 23.038 version 16. Therefore I +and I are not implemented nor supported. -Unlike most other encodings, the following always croaks on error -for any $chk that evaluates to true. +=head2 Septets - $gsm0338 = encode("gsm0338", $utf8 $chk); - $utf8 = decode("gsm0338", $gsm0338, $chk); +This modules operates with octets (like any other Encode module) and not +with packed septets (unlike other GSM standards). Therefore for processing +binary SMS or parts of GSM TPDU payload (3GPP TS 23.040) it is needed to do +conversion between octets and packed septets. For this purpose perl's C +and C functions may be useful: -So if you want to check the validity of the encoding, surround the -expression with C block as follows; + $bytes = substr(pack('(b*)*', unpack '(A7)*', unpack 'b*', $septets), 0, $num_of_septets); + $unicode = decode('GSM0338', $bytes); - eval { - $utf8 = decode("gsm0338", $gsm0338, $chk); - } or do { - # handle exception here - }; + $bytes = encode('GSM0338', $unicode); + $septets = pack 'b*', join '', map { substr $_, 0, 7 } unpack '(A8)*', unpack 'b*', $bytes; + $num_of_septets = length $bytes; -=head1 BUGS +Please note that for correct decoding of packed septets it is required to +know number of septets packed in binary buffer as binary buffer is always +padded with zero bits and 7 zero bits represents character C<@>. Number +of septets is also stored in TPDU payload when dealing with 3GPP TS 23.040. -ESTI GSM 03.38 Encoding itself. +=head1 BUGS -Mapping \x00 to '@' causes too much pain everywhere. +Encode::GSM0338 2.7 and older versions (part of Encode 3.06) incorrectly +handled zero bytes (character C<@>). This was fixed in Encode::GSM0338 +version 2.8 (part of Encode 3.07). -Its use of \x1b (escape) is also very questionable. +=head1 SEE ALSO -Because of those two, the code paging approach used use in ucm-based -Encoding SOMETIMES fails so this module was written. +L<3GPP TS 23.038|https://www.3gpp.org/dynareport/23038.htm> -=head1 SEE ALSO +L L diff --git a/gnu/usr.bin/perl/cpan/Encode/t/Unicode.t b/gnu/usr.bin/perl/cpan/Encode/t/Unicode.t index 2cc5d548557..61cef422fc8 100755 --- a/gnu/usr.bin/perl/cpan/Encode/t/Unicode.t +++ b/gnu/usr.bin/perl/cpan/Encode/t/Unicode.t @@ -1,5 +1,5 @@ # -# $Id: Unicode.t,v 2.3 2012/08/05 23:08:49 dankogai Exp $ +# $Id: Unicode.t,v 2.4 2021/07/23 02:26:54 dankogai Exp $ # # This script is written entirely in ASCII, even though quoted literals # do include non-BMP unicode characters -- Are you happy, jhi? @@ -25,7 +25,7 @@ use Encode qw(encode decode find_encoding); # # see -# http://www.unicode.org/unicode/reports/tr19/ +# http://www.unicode.org/reports/tr19/ # my $dankogai = "\x{5c0f}\x{98fc}\x{3000}\x{5f3e}"; diff --git a/gnu/usr.bin/perl/cpan/Encode/t/enc_data.t b/gnu/usr.bin/perl/cpan/Encode/t/enc_data.t index e610b0d10e0..f5ddaf77a6e 100755 --- a/gnu/usr.bin/perl/cpan/Encode/t/enc_data.t +++ b/gnu/usr.bin/perl/cpan/Encode/t/enc_data.t @@ -1,4 +1,4 @@ -# $Id: enc_data.t,v 2.5 2016/11/29 23:29:23 dankogai Exp $ +# $Id: enc_data.t,v 2.6 2022/04/07 03:06:40 dankogai Exp dankogai $ BEGIN { require Config; import Config; @@ -15,7 +15,7 @@ BEGIN { exit(0); } if ($] >= 5.025 and !$Config{usecperl}) { - print "1..0 # Skip: encoding pragma not supported in Perl 5.26\n"; + print "1..0 # Skip: encoding pragma not supported in Perl 5.25 or later\n"; exit(0); } if ($] <= 5.008 and !$Config{perl_patchlevel}){ diff --git a/gnu/usr.bin/perl/cpan/Encode/t/enc_module.t b/gnu/usr.bin/perl/cpan/Encode/t/enc_module.t index fd6e6dcde69..2d94e36b29a 100755 --- a/gnu/usr.bin/perl/cpan/Encode/t/enc_module.t +++ b/gnu/usr.bin/perl/cpan/Encode/t/enc_module.t @@ -1,4 +1,4 @@ -# $Id: enc_module.t,v 2.5 2016/11/29 23:29:23 dankogai Exp $ +# $Id: enc_module.t,v 2.6 2022/04/07 03:06:40 dankogai Exp dankogai $ # This file is in euc-jp BEGIN { require Config; import Config; @@ -19,7 +19,7 @@ BEGIN { exit(0); } if ($] >= 5.025 and !$Config{usecperl}) { - print "1..0 # Skip: encoding pragma not supported in Perl 5.26\n"; + print "1..0 # Skip: encoding pragma not supported in Perl 5.25 or later\n"; exit(0); } } diff --git a/gnu/usr.bin/perl/cpan/Encode/t/encoding.t b/gnu/usr.bin/perl/cpan/Encode/t/encoding.t index 33010e74b5f..d5009f510a5 100755 --- a/gnu/usr.bin/perl/cpan/Encode/t/encoding.t +++ b/gnu/usr.bin/perl/cpan/Encode/t/encoding.t @@ -13,7 +13,7 @@ BEGIN { exit(0); } if ($] >= 5.025 and !$Config{usecperl}) { - print "1..0 # Skip: encoding pragma not supported in Perl 5.26\n"; + print "1..0 # Skip: encoding pragma not supported in Perl 5.25 or later\n"; exit(0); } } diff --git a/gnu/usr.bin/perl/cpan/Encode/t/jperl.t b/gnu/usr.bin/perl/cpan/Encode/t/jperl.t index 5995a592bab..27ce8814163 100755 --- a/gnu/usr.bin/perl/cpan/Encode/t/jperl.t +++ b/gnu/usr.bin/perl/cpan/Encode/t/jperl.t @@ -1,5 +1,5 @@ # -# $Id: jperl.t,v 2.5 2016/11/29 23:29:23 dankogai Exp $ +# $Id: jperl.t,v 2.6 2022/04/07 03:06:40 dankogai Exp dankogai $ # # This script is written in euc-jp @@ -18,7 +18,7 @@ BEGIN { exit 0; } if ($] >= 5.025 and !$Config{usecperl}) { - print "1..0 # Skip: encoding pragma not supported in Perl 5.26\n"; + print "1..0 # Skip: encoding pragma not supported in Perl 5.25 or later\n"; exit(0); } $| = 1; diff --git a/gnu/usr.bin/perl/cpan/Encode/t/taint.t b/gnu/usr.bin/perl/cpan/Encode/t/taint.t index 6fa46bd957e..ba171147ae1 100644 --- a/gnu/usr.bin/perl/cpan/Encode/t/taint.t +++ b/gnu/usr.bin/perl/cpan/Encode/t/taint.t @@ -4,6 +4,7 @@ use Encode qw(encode decode); local %Encode::ExtModule = %Encode::Config::ExtModule; use Scalar::Util qw(tainted); use Test::More; +use Config; my $taint = substr($ENV{PATH},0,0); my $str = "dan\x{5f3e}" . $taint; # tainted string to encode my $bin = encode('UTF-8', $str); # tainted binary to decode @@ -11,7 +12,12 @@ my $notaint = ""; my $notaint_str = "dan\x{5f3e}" . $notaint; my $notaint_bin = encode('UTF-8', $notaint_str); my @names = Encode->encodings(':all'); -plan tests => 4 * @names + 2; +if (exists($Config{taint_support}) && not $Config{taint_support}) { + plan skip_all => "your perl was built without taint support"; +} +else { + plan tests => 4 * @names + 2; +} for my $name (@names) { my ($d, $e, $s); eval { diff --git a/gnu/usr.bin/perl/cpan/ExtUtils-Install/lib/ExtUtils/Install.pm b/gnu/usr.bin/perl/cpan/ExtUtils-Install/lib/ExtUtils/Install.pm index 7bcd941bd2a..96081806f78 100644 --- a/gnu/usr.bin/perl/cpan/ExtUtils-Install/lib/ExtUtils/Install.pm +++ b/gnu/usr.bin/perl/cpan/ExtUtils-Install/lib/ExtUtils/Install.pm @@ -32,11 +32,11 @@ ExtUtils::Install - install files from here to there =head1 VERSION -2.14 +2.20 =cut -our $VERSION = '2.14'; # <-- do not forget to update the POD section just above this line! +our $VERSION = '2.20'; # <-- do not forget to update the POD section just above this line! $VERSION = eval $VERSION; =pod @@ -65,35 +65,31 @@ anything depending on this module cannot proceed until a reboot has occurred. If this value is defined but false then such an operation has -ocurred, but should not impact later operations. - -=over +occurred, but should not impact later operations. =begin _private -=item _chmod($$;$) +=head2 _chmod($$;$) Wrapper to chmod() for debugging and error trapping. -=item _warnonce(@) +=head2 _warnonce(@) Warns about something only once. -=item _choke(@) +=head2 _choke(@) Dies with a special message. -=back - =end _private =cut BEGIN { - *Is_VMS = $^O eq 'VMS' ? sub(){1} : sub(){0}; - *Is_Win32 = $^O eq 'MSWin32' ? sub(){1} : sub(){0}; - *Is_cygwin = $^O eq 'cygwin' ? sub(){1} : sub(){0}; - *CanMoveAtBoot = ($^O eq 'MSWin32' || $^O eq 'cygwin') ? sub(){1} : sub(){0}; + *_Is_VMS = $^O eq 'VMS' ? sub(){1} : sub(){0}; + *_Is_Win32 = $^O eq 'MSWin32' ? sub(){1} : sub(){0}; + *_Is_cygwin = $^O eq 'cygwin' ? sub(){1} : sub(){0}; + *_CanMoveAtBoot = ($^O eq 'MSWin32' || $^O eq 'cygwin') ? sub(){1} : sub(){0}; } my $Inc_uninstall_warn_handler; @@ -108,7 +104,6 @@ $INSTALL_QUIET = 1 $ENV{MAKEFLAGS} =~ /\b(s|silent|quiet)\b/); my $Curdir = File::Spec->curdir; -my $Perm_Dir = $ENV{PERL_CORE} ? 0770 : 0755; sub _estr(@) { return join "\n",'!' x 72,@_,'!' x 72,''; @@ -138,8 +133,12 @@ sub _confess { } sub _compare { - require File::Compare; - File::Compare::compare(@_); + # avoid loading File::Compare in the common case + if (-f $_[1] && -s _ == -s $_[0]) { + require File::Compare; + return File::Compare::compare(@_); + } + return 1; } @@ -158,9 +157,7 @@ sub _chmod($$;$) { =begin _private -=over - -=item _move_file_at_boot( $file, $target, $moan ) +=head2 _move_file_at_boot( $file, $target, $moan ) OS-Specific, Win32/Cygwin @@ -185,15 +182,15 @@ If $moan is true then returns 0 on error and warns instead of dies. sub _move_file_at_boot { #XXX OS-SPECIFIC my ( $file, $target, $moan )= @_; _confess("Panic: Can't _move_file_at_boot on this platform!") - unless CanMoveAtBoot; + unless _CanMoveAtBoot; my $descr= ref $target ? "'$file' for deletion" : "'$file' for installation as '$target'"; - # *note* CanMoveAtBoot is only incidentally the same condition as below + # *note* _CanMoveAtBoot is only incidentally the same condition as below # this needs not hold true in the future. - $Has_Win32API_File = (Is_Win32 || Is_cygwin) + $Has_Win32API_File = (_Is_Win32 || _Is_cygwin) ? (eval {require Win32API::File; 1} || 0) : 0 unless defined $Has_Win32API_File; if ( ! $Has_Win32API_File ) { @@ -232,8 +229,7 @@ If $moan is true then returns 0 on error and warns instead of dies. =begin _private - -=item _unlink_or_rename( $file, $tryhard, $installing ) +=head2 _unlink_or_rename( $file, $tryhard, $installing ) OS-Specific, Win32/Cygwin @@ -264,8 +260,6 @@ On failure throws a fatal error. =cut - - sub _unlink_or_rename { #XXX OS-SPECIFIC my ( $file, $tryhard, $installing )= @_; @@ -283,7 +277,7 @@ sub _unlink_or_rename { #XXX OS-SPECIFIC my $error="$!"; _choke("Cannot unlink '$file': $!") - unless CanMoveAtBoot && $tryhard; + unless _CanMoveAtBoot && $tryhard; my $tmp= "AAA"; ++$tmp while -e "$file.$tmp"; @@ -311,25 +305,16 @@ sub _unlink_or_rename { #XXX OS-SPECIFIC } - -=pod - -=back - -=head2 Functions +=head1 Functions =begin _private -=over - -=item _get_install_skip +=head2 _get_install_skip Handles loading the INSTALL.SKIP file. Returns an array of patterns to use. =cut - - sub _get_install_skip { my ( $skip, $verbose )= @_; if ($ENV{EU_INSTALL_IGNORE_SKIP}) { @@ -379,9 +364,7 @@ sub _get_install_skip { return $skip } -=pod - -=item _have_write_access +=head2 _have_write_access Abstract a -w check that tries to use POSIX::access() if possible. @@ -392,7 +375,7 @@ Abstract a -w check that tries to use POSIX::access() if possible. sub _have_write_access { my $dir=shift; unless (defined $has_posix) { - $has_posix = (!Is_cygwin && !Is_Win32 + $has_posix = (!_Is_cygwin && !_Is_Win32 && eval { local $^W; require POSIX; 1} ) || 0; } if ($has_posix) { @@ -403,9 +386,7 @@ Abstract a -w check that tries to use POSIX::access() if possible. } } -=pod - -=item _can_write_dir(C<$dir>) +=head2 _can_write_dir(C<$dir>) Checks whether a given directory is writable, taking account the possibility that the directory might not exist and would have to @@ -424,7 +405,6 @@ relative paths with C<..> in them. But for our purposes it should work ok =cut - sub _can_write_dir { my $dir=shift; return @@ -438,7 +418,7 @@ sub _can_write_dir { my $path=''; my @make; while (@dirs) { - if (Is_VMS) { + if (_Is_VMS) { $dir = File::Spec->catdir($vol,@dirs); } else { @@ -462,9 +442,7 @@ sub _can_write_dir { return 0; } -=pod - -=item _mkpath($dir,$show,$mode,$verbose,$dry_run) +=head2 _mkpath($dir,$show,$mode,$verbose,$dry_run) Wrapper around File::Path::mkpath() to handle errors. @@ -487,10 +465,16 @@ sub _mkpath { printf "mkpath(%s,%d,%#o)\n", $dir, $show, $mode; } if (!$dry_run) { - if ( ! eval { File::Path::mkpath($dir,$show,$mode); 1 } ) { - _choke("Can't create '$dir'","$@"); + my @created; + eval { + @created = File::Path::mkpath($dir,$show,$mode); + 1; + } or _choke("Can't create '$dir'","$@"); + # if we created any directories, we were able to write and don't need + # extra checks + if (@created) { + return; } - } my ($can,$root,@make)=_can_write_dir($dir); if (!$can) { @@ -510,9 +494,7 @@ sub _mkpath { } -=pod - -=item _copy($from,$to,$verbose,$dry_run) +=head2 _copy($from,$to,$verbose,$dry_run) Wrapper around File::Copy::copy to handle errors. @@ -524,7 +506,6 @@ Dies if the copy fails. =cut - sub _copy { my ( $from, $to, $verbose, $dry_run)=@_; if ($verbose && $verbose>1) { @@ -538,7 +519,7 @@ sub _copy { =pod -=item _chdir($from) +=head2 _chdir($from) Wrapper around chdir to catch errors. @@ -559,15 +540,9 @@ sub _chdir { return $ret; } -=pod - -=back - =end _private -=over - -=item B +=head2 install # deprecated forms install(\%from_to); @@ -775,15 +750,9 @@ sub install { #XXX OS-SPECIFIC } # we have to do this for back compat with old File::Finds # and because the target is relative - my $save_cwd = _chdir($cwd); - my $diff = 0; - # XXX: I wonder how useful this logic is actually -- demerphq - if ( $always_copy or !-f $targetfile or -s $targetfile != $size) { - $diff++; - } else { - # we might not need to copy this file - $diff = _compare($sourcefile, $targetfile); - } + my $save_cwd = File::Spec->catfile($cwd, $sourcedir); + _chdir($cwd); + my $diff = $always_copy || _compare($sourcefile, $targetfile); $check_dirs{$targetdir}++ unless -w $targetfile; @@ -800,7 +769,7 @@ sub install { #XXX OS-SPECIFIC _chdir($cwd); } foreach my $targetdir (sort keys %check_dirs) { - _mkpath( $targetdir, 0, $Perm_Dir, $verbose, $dry_run ); + _mkpath( $targetdir, 0, 0755, $verbose, $dry_run ); } foreach my $found (@found_files) { my ($diff, $ffd, $origfile, $mode, $size, $atime, $mtime, @@ -814,7 +783,7 @@ sub install { #XXX OS-SPECIFIC $targetfile= _unlink_or_rename( $targetfile, 'tryhard', 'install' ) unless $dry_run; } elsif ( ! -d $targetdir ) { - _mkpath( $targetdir, 0, $Perm_Dir, $verbose, $dry_run ); + _mkpath( $targetdir, 0, 0755, $verbose, $dry_run ); } print "Installing $targetfile\n"; @@ -823,7 +792,7 @@ sub install { #XXX OS-SPECIFIC #XXX OS-SPECIFIC print "utime($atime,$mtime,$targetfile)\n" if $verbose>1; - utime($atime,$mtime + Is_VMS,$targetfile) unless $dry_run>1; + utime($atime,$mtime + _Is_VMS,$targetfile) unless $dry_run>1; $mode = 0444 | ( $mode & 0111 ? 0111 : 0 ); @@ -854,7 +823,7 @@ sub install { #XXX OS-SPECIFIC if ($pack{'write'}) { $dir = install_rooted_dir(dirname($pack{'write'})); - _mkpath( $dir, 0, $Perm_Dir, $verbose, $dry_run ); + _mkpath( $dir, 0, 0755, $verbose, $dry_run ); print "Writing $pack{'write'}\n" if $verbose; $packlist->write(install_rooted_file($pack{'write'})) unless $dry_run; } @@ -865,7 +834,7 @@ sub install { #XXX OS-SPECIFIC =begin _private -=item _do_cleanup +=head2 _do_cleanup Standardize finish event for after another instruction has occurred. Handles converting $MUST_REBOOT to a die for instance. @@ -888,12 +857,12 @@ sub _do_cleanup { =begin _undocumented -=item install_rooted_file( $file ) +=head2 install_rooted_file( $file ) Returns $file, or catfile($INSTALL_ROOT,$file) if $INSTALL_ROOT is defined. -=item install_rooted_dir( $dir ) +=head2 install_rooted_dir( $dir ) Returns $dir, or catdir($INSTALL_ROOT,$dir) if $INSTALL_ROOT is defined. @@ -902,7 +871,6 @@ is defined. =cut - sub install_rooted_file { if (defined $INSTALL_ROOT) { File::Spec->catfile($INSTALL_ROOT, $_[0]); @@ -922,7 +890,7 @@ sub install_rooted_dir { =begin _undocumented -=item forceunlink( $file, $tryhard ) +=head2 forceunlink( $file, $tryhard ) Tries to delete a file. If $tryhard is true then we will use whatever devious tricks we can to delete the file. Currently this only applies to @@ -933,7 +901,6 @@ reboot. A wrapper for _unlink_or_rename(). =cut - sub forceunlink { my ( $file, $tryhard )= @_; #XXX OS-SPECIFIC _unlink_or_rename( $file, $tryhard, not("installing") ); @@ -941,7 +908,7 @@ sub forceunlink { =begin _undocumented -=item directory_not_empty( $dir ) +=head2 directory_not_empty( $dir ) Returns 1 if there is an .exists file somewhere in a directory tree. Returns 0 if there is not. @@ -964,9 +931,9 @@ sub directory_not_empty ($) { return $files; } -=pod +=head2 install_default -=item B I +I install_default(); install_default($fullext); @@ -1020,7 +987,7 @@ sub install_default { } -=item B +=head2 uninstall uninstall($packlist_file); uninstall($packlist_file, $verbose, $dont_execute); @@ -1058,7 +1025,7 @@ sub uninstall { =begin _undocumented -=item inc_uninstall($filepath,$libdir,$verbose,$dry_run,$ignore,$results) +=head2 inc_uninstall($filepath,$libdir,$verbose,$dry_run,$ignore,$results) Remove shadowed files. If $ignore is true then it is assumed to hold a filename to ignore. This is used to prevent spurious warnings from @@ -1095,7 +1062,7 @@ sub inc_uninstall { #warn join "\n","---",@dirs,"---"; my $seen_ours; foreach $dir ( @dirs ) { - my $canonpath = Is_VMS ? $dir : File::Spec->canonpath($dir); + my $canonpath = _Is_VMS ? $dir : File::Spec->canonpath($dir); next if $canonpath eq $Curdir; next if $seen_dir{$canonpath}++; my $targetfile = File::Spec->catfile($canonpath,$libdir,$file); @@ -1104,13 +1071,8 @@ sub inc_uninstall { # The reason why we compare file's contents is, that we cannot # know, which is the file we just installed (AFS). So we leave # an identical file in place - my $diff = 0; - if ( -f $targetfile && -s _ == -s $filepath) { - # We have a good chance, we can skip this one - $diff = _compare($filepath,$targetfile); - } else { - $diff++; - } + my $diff = _compare($filepath,$targetfile); + print "#$file and $targetfile differ\n" if $diff && $verbose > 1; if (!$diff or $targetfile eq $ignore) { @@ -1151,7 +1113,7 @@ sub inc_uninstall { =begin _undocumented -=item run_filter($cmd,$src,$dest) +=head2 run_filter($cmd,$src,$dest) Filter $src using $cmd into $dest. @@ -1173,9 +1135,7 @@ sub run_filter { close CMD or die "Filter command '$cmd' failed for $src"; } -=pod - -=item B +=head2 pm_to_blib pm_to_blib(\%from_to); pm_to_blib(\%from_to, $autosplit_dir); @@ -1200,7 +1160,8 @@ environment variable will silence this output. sub pm_to_blib { my($fromto,$autodir,$pm_filter) = @_; - _mkpath($autodir,0,$Perm_Dir) if defined $autodir; + my %dirs; + _mkpath($autodir,0,0755) if defined $autodir; while(my($from, $to) = each %$fromto) { if( -f $to && -s $from == -s $to && -M $to < -M $from ) { print "Skip $to (unchanged)\n" unless $INSTALL_QUIET; @@ -1215,7 +1176,7 @@ sub pm_to_blib { my $need_filtering = defined $pm_filter && length $pm_filter && $from =~ /\.pm$/; - if (!$need_filtering && 0 == _compare($from,$to)) { + if (!$need_filtering && !_compare($from,$to)) { print "Skip $to (unchanged)\n" unless $INSTALL_QUIET; next; } @@ -1223,7 +1184,10 @@ sub pm_to_blib { # we wont try hard here. its too likely to mess things up. forceunlink($to); } else { - _mkpath(dirname($to),0,$Perm_Dir); + my $dirname = dirname($to); + if (!$dirs{$dirname}++) { + _mkpath($dirname,0,0755); + } } if ($need_filtering) { run_filter($pm_filter, $from, $to); @@ -1233,17 +1197,16 @@ sub pm_to_blib { print "cp $from $to\n" unless $INSTALL_QUIET; } my($mode,$atime,$mtime) = (stat $from)[2,8,9]; - utime($atime,$mtime+Is_VMS,$to); + utime($atime,$mtime+_Is_VMS,$to); _chmod(0444 | ( $mode & 0111 ? 0111 : 0 ),$to); next unless $from =~ /\.pm$/; _autosplit($to,$autodir) if defined $autodir; } } - =begin _private -=item _autosplit +=head2 _autosplit From 1.0307 back, AutoSplit will sometimes leave an open filehandle to the file being split. This causes problems on systems with mandatory @@ -1286,7 +1249,7 @@ sub DESTROY { $plural = $i>1 ? "all those files" : "this file"; my $inst = (_invokant() eq 'ExtUtils::MakeMaker') ? ( $Config::Config{make} || 'make' ).' install' - . ( ExtUtils::Install::Is_VMS ? '/MACRO="UNINST"=1' : ' UNINST=1' ) + . ( ExtUtils::Install::_Is_VMS ? '/MACRO="UNINST"=1' : ' UNINST=1' ) : './Build install uninst=1'; print "## Running '$inst' will unlink $plural for you.\n"; } @@ -1294,7 +1257,7 @@ sub DESTROY { =begin _private -=item _invokant +=head2 _invokant Does a heuristic on the stack to see who called us for more intelligent error messages. Currently assumes we will be called only by Module::Build @@ -1321,10 +1284,6 @@ sub _invokant { return $builder; } -=pod - -=back - =head1 ENVIRONMENT =over 4 diff --git a/gnu/usr.bin/perl/cpan/ExtUtils-Install/lib/ExtUtils/Installed.pm b/gnu/usr.bin/perl/cpan/ExtUtils-Install/lib/ExtUtils/Installed.pm index 8327a95a3db..0cfd96b507d 100644 --- a/gnu/usr.bin/perl/cpan/ExtUtils-Install/lib/ExtUtils/Installed.pm +++ b/gnu/usr.bin/perl/cpan/ExtUtils-Install/lib/ExtUtils/Installed.pm @@ -1,7 +1,6 @@ +use strict; package ExtUtils::Installed; -use 5.00503; -use strict; #use warnings; # XXX requires 5.6 use Carp qw(); use ExtUtils::Packlist; @@ -16,8 +15,7 @@ my $DOSISH = ($^O =~ /^(MSWin\d\d|os2|dos|mint)$/); require VMS::Filespec if $Is_VMS; -use vars qw($VERSION); -$VERSION = '2.14'; +our $VERSION = '2.20'; $VERSION = eval $VERSION; sub _is_prefix { @@ -309,7 +307,7 @@ sub version { return($self->{$module}{version}); } -sub debug_dump { +sub _debug_dump { my ($self, $module) = @_; $self= $self->new(default=>1) if !ref $self; local $self->{":private:"}{Config}; diff --git a/gnu/usr.bin/perl/cpan/ExtUtils-Install/lib/ExtUtils/Packlist.pm b/gnu/usr.bin/perl/cpan/ExtUtils-Install/lib/ExtUtils/Packlist.pm index f94e3d05cc8..98d09e3d820 100644 --- a/gnu/usr.bin/perl/cpan/ExtUtils-Install/lib/ExtUtils/Packlist.pm +++ b/gnu/usr.bin/perl/cpan/ExtUtils-Install/lib/ExtUtils/Packlist.pm @@ -1,11 +1,10 @@ package ExtUtils::Packlist; - -use 5.00503; use strict; + use Carp qw(); use Config; -use vars qw($VERSION $Relocations); -$VERSION = '2.14'; +our $Relocations; +our $VERSION = '2.20'; $VERSION = eval $VERSION; # Used for generating filehandle globs. IO::File might not be available! diff --git a/gnu/usr.bin/perl/cpan/ExtUtils-Install/t/Install.t b/gnu/usr.bin/perl/cpan/ExtUtils-Install/t/Install.t index 0900b58cb86..6ca6df5c4b5 100644 --- a/gnu/usr.bin/perl/cpan/ExtUtils-Install/t/Install.t +++ b/gnu/usr.bin/perl/cpan/ExtUtils-Install/t/Install.t @@ -1,4 +1,5 @@ #!/usr/bin/perl -w +use strict; # Test ExtUtils::Install. @@ -6,7 +7,6 @@ BEGIN { unshift @INC, 't/lib'; } -use strict; use TieOut; use File::Path; use File::Spec; diff --git a/gnu/usr.bin/perl/cpan/ExtUtils-Install/t/InstallWithMM.t b/gnu/usr.bin/perl/cpan/ExtUtils-Install/t/InstallWithMM.t index d656d43833c..6a04eb841dc 100644 --- a/gnu/usr.bin/perl/cpan/ExtUtils-Install/t/InstallWithMM.t +++ b/gnu/usr.bin/perl/cpan/ExtUtils-Install/t/InstallWithMM.t @@ -1,4 +1,5 @@ #!/usr/bin/perl -w +use strict; # Make sure EUI works with MakeMaker @@ -6,7 +7,6 @@ BEGIN { unshift @INC, 't/lib'; } -use strict; use Config; use ExtUtils::MakeMaker; diff --git a/gnu/usr.bin/perl/cpan/ExtUtils-Install/t/Installed.t b/gnu/usr.bin/perl/cpan/ExtUtils-Install/t/Installed.t index d6a099e9c7c..7d7bf243d36 100644 --- a/gnu/usr.bin/perl/cpan/ExtUtils-Install/t/Installed.t +++ b/gnu/usr.bin/perl/cpan/ExtUtils-Install/t/Installed.t @@ -1,20 +1,24 @@ #!/usr/bin/perl -w +use strict; + +# Test ExtUtils::Installed BEGIN { + # For backwards compatibility, use bundled version of Test::More unshift @INC, 't/lib/'; } my $Is_VMS = $^O eq 'VMS'; -use strict; use Config; use Cwd; use File::Path; use File::Basename; use File::Spec; +use File::Temp qw[tempdir]; -use Test::More tests => 73; +use Test::More tests => 76; BEGIN { use_ok( 'ExtUtils::Installed' ) } @@ -32,6 +36,10 @@ ok( $ei->_is_prefix('foo/bar', 'foo'), '_is_prefix() should match valid path prefix' ); ok( !$ei->_is_prefix('\foo\bar', '\bar'), '... should not match wrong prefix' ); +ok( ! defined $ei->_is_prefix( undef, 'foo' ), + '_is_prefix() needs two defined arguments' ); +ok( ! defined $ei->_is_prefix( 'foo/bar', undef ), + '_is_prefix() needs two defined arguments' ); # _is_type ok( $ei->_is_type(0, 'all'), '_is_type() should be true for type of "all"' ); @@ -63,7 +71,7 @@ ok( $ei->_is_type( File::Spec->catfile($prefix, 'bar'), 'prog'), SKIP: { skip('no man directories on this system', 1) unless $mandirs; is( $ei->_is_type('bar', 'doc'), 0, - '... should not find doc file outside path' ); + '... should not find doc file outside path' ); } ok( !$ei->_is_type('bar', 'prog'), @@ -77,268 +85,276 @@ my @under = qw( boo bar baz ); ok( !$ei->_is_under('foo', @under), '... should find no file not under dirs'); ok( $ei->_is_under('baz', @under), '... should find file under dir' ); +my $startdir = cwd(); +END { ok(chdir $startdir, "Return to where we started"); } -rmtree 'auto/FakeMod'; -ok( mkpath('auto/FakeMod') ); -END { rmtree 'auto' } +{ + my $tmpdir = tempdir( CLEANUP => 1 ); + chdir $tmpdir; + + my $fakedir = 'FakeMod'; + my $fakepath = File::Spec->catdir('auto', $fakedir); + ok( mkpath($fakepath), "Able to create directory $fakepath for testing" ); -ok(open(PACKLIST, '>auto/FakeMod/.packlist')); -print PACKLIST 'list'; -close PACKLIST; + ok(open(PACKLIST, '>', File::Spec->catfile($fakepath, '.packlist')), + "Able to open .packlist for writing"); + print PACKLIST 'list'; + close PACKLIST; -ok(open(FAKEMOD, '>auto/FakeMod/FakeMod.pm')); + ok(open(FAKEMOD, '>', File::Spec->catfile($fakepath, 'FakeMod.pm')), + "Able to open FakeMod.pm for writing"); -print FAKEMOD <<'FAKE'; + print FAKEMOD <<'FAKE'; package FakeMod; -use vars qw( $VERSION ); -$VERSION = '1.1.1'; +our $VERSION = '1.1.1'; 1; FAKE -close FAKEMOD; + close FAKEMOD; + + my $fake_mod_dir = File::Spec->catdir(cwd(), $fakepath); + { + # avoid warning and death by localizing glob + local *ExtUtils::Installed::Config; + %ExtUtils::Installed::Config = ( + %Config, + archlibexp => cwd(), + sitearchexp => $fake_mod_dir, + ); + + # should find $fake_mod_dir via '.' in @INC + + local @INC = @INC; + push @INC, '.' if not $INC[-1] eq '.'; + + my $realei = ExtUtils::Installed->new(); + isa_ok( $realei, 'ExtUtils::Installed' ); + isa_ok( $realei->{Perl}{packlist}, 'ExtUtils::Packlist' ); + is( $realei->{Perl}{version}, $Config{version}, + 'new() should set Perl version from %Config' ); + + ok( exists $realei->{FakeMod}, 'new() should find modules with .packlists'); + isa_ok( $realei->{FakeMod}{packlist}, 'ExtUtils::Packlist' ); + is( $realei->{FakeMod}{version}, '1.1.1', + '... should find version in modules' ); + } -my $fake_mod_dir = File::Spec->catdir(cwd(), 'auto', 'FakeMod'); -{ - # avoid warning and death by localizing glob - local *ExtUtils::Installed::Config; - %ExtUtils::Installed::Config = ( - %Config, - archlibexp => cwd(), - sitearchexp => $fake_mod_dir, - ); - - # should find $fake_mod_dir via '.' in @INC - - local @INC = @INC; - push @INC, '.' if not $INC[-1] eq '.'; - - my $realei = ExtUtils::Installed->new(); - isa_ok( $realei, 'ExtUtils::Installed' ); - isa_ok( $realei->{Perl}{packlist}, 'ExtUtils::Packlist' ); - is( $realei->{Perl}{version}, $Config{version}, - 'new() should set Perl version from %Config' ); - - ok( exists $realei->{FakeMod}, 'new() should find modules with .packlists'); - isa_ok( $realei->{FakeMod}{packlist}, 'ExtUtils::Packlist' ); - is( $realei->{FakeMod}{version}, '1.1.1', - '... should find version in modules' ); -} + { + # avoid warning and death by localizing glob + local *ExtUtils::Installed::Config; + %ExtUtils::Installed::Config = ( + %Config, + archlibexp => cwd(), + sitearchexp => $fake_mod_dir, + ); -{ - # avoid warning and death by localizing glob - local *ExtUtils::Installed::Config; - %ExtUtils::Installed::Config = ( - %Config, - archlibexp => cwd(), - sitearchexp => $fake_mod_dir, - ); - - # disable '.' search - - my $realei = ExtUtils::Installed->new( skip_cwd => 1 ); - isa_ok( $realei, 'ExtUtils::Installed' ); - isa_ok( $realei->{Perl}{packlist}, 'ExtUtils::Packlist' ); - is( $realei->{Perl}{version}, $Config{version}, - 'new() should set Perl version from %Config' ); - - ok( ! exists $realei->{FakeMod}, 'new( skip_cwd => 1 ) should fail to find modules with .packlists'); -} + # disable '.' search -{ - # avoid warning and death by localizing glob - local *ExtUtils::Installed::Config; - %ExtUtils::Installed::Config = ( - %Config, - archlibexp => cwd(), - sitearchexp => $fake_mod_dir, - ); - - # necessary to fool new() since we'll disable searching '.' - push @INC, $fake_mod_dir; - - my $realei = ExtUtils::Installed->new( skip_cwd => 1 ); - isa_ok( $realei, 'ExtUtils::Installed' ); - isa_ok( $realei->{Perl}{packlist}, 'ExtUtils::Packlist' ); - is( $realei->{Perl}{version}, $Config{version}, - 'new() should set Perl version from %Config' ); - - ok( exists $realei->{FakeMod}, 'new() should find modules with .packlists'); - isa_ok( $realei->{FakeMod}{packlist}, 'ExtUtils::Packlist' ); - is( $realei->{FakeMod}{version}, '1.1.1', - '... should find version in modules' ); -} + my $realei = ExtUtils::Installed->new( skip_cwd => 1 ); + isa_ok( $realei, 'ExtUtils::Installed' ); + isa_ok( $realei->{Perl}{packlist}, 'ExtUtils::Packlist' ); + is( $realei->{Perl}{version}, $Config{version}, + 'new() should set Perl version from %Config' ); -# Now try this using PERL5LIB -{ - local $ENV{PERL5LIB} = join $Config{path_sep}, $fake_mod_dir; - local *ExtUtils::Installed::Config; - %ExtUtils::Installed::Config = ( - %Config, - archlibexp => cwd(), - sitearchexp => cwd(), - ); - - my $realei = ExtUtils::Installed->new(); - isa_ok( $realei, 'ExtUtils::Installed' ); - isa_ok( $realei->{Perl}{packlist}, 'ExtUtils::Packlist' ); - is( $realei->{Perl}{version}, $Config{version}, - 'new() should set Perl version from %Config' ); - - ok( exists $realei->{FakeMod}, - 'new() should find modules with .packlists using PERL5LIB' - ); - isa_ok( $realei->{FakeMod}{packlist}, 'ExtUtils::Packlist' ); - is( $realei->{FakeMod}{version}, '1.1.1', - '... should find version in modules' ); -} + ok( ! exists $realei->{FakeMod}, 'new( skip_cwd => 1 ) should fail to find modules with .packlists'); + } -# Do the same thing as the last block, but with overrides for -# %Config and @INC. -{ - my $config_override = { %Config::Config }; - $config_override->{archlibexp} = cwd(); - $config_override->{sitearchexp} = $fake_mod_dir; - $config_override->{version} = 'fake_test_version'; - - my @inc_override = (@INC, $fake_mod_dir); - - my $realei = ExtUtils::Installed->new( - 'config_override' => $config_override, - 'inc_override' => \@inc_override, - ); - isa_ok( $realei, 'ExtUtils::Installed' ); - isa_ok( $realei->{Perl}{packlist}, 'ExtUtils::Packlist' ); - is( $realei->{Perl}{version}, 'fake_test_version', - 'new(config_override => HASH) overrides %Config' ); - - ok( exists $realei->{FakeMod}, 'new() with overrides should find modules with .packlists'); - isa_ok( $realei->{FakeMod}{packlist}, 'ExtUtils::Packlist' ); - is( $realei->{FakeMod}{version}, '1.1.1', - '... should find version in modules' ); -} + { + # avoid warning and death by localizing glob + local *ExtUtils::Installed::Config; + %ExtUtils::Installed::Config = ( + %Config, + archlibexp => cwd(), + sitearchexp => $fake_mod_dir, + ); + + # necessary to fool new() since we'll disable searching '.' + push @INC, $fake_mod_dir; + + my $realei = ExtUtils::Installed->new( skip_cwd => 1 ); + isa_ok( $realei, 'ExtUtils::Installed' ); + isa_ok( $realei->{Perl}{packlist}, 'ExtUtils::Packlist' ); + is( $realei->{Perl}{version}, $Config{version}, + 'new() should set Perl version from %Config' ); + + ok( exists $realei->{FakeMod}, 'new() should find modules with .packlists'); + isa_ok( $realei->{FakeMod}{packlist}, 'ExtUtils::Packlist' ); + is( $realei->{FakeMod}{version}, '1.1.1', + '... should find version in modules' ); + } -# Check if extra_libs works. -{ - my $realei = ExtUtils::Installed->new( - 'extra_libs' => [ cwd() ], - ); - isa_ok( $realei, 'ExtUtils::Installed' ); - isa_ok( $realei->{Perl}{packlist}, 'ExtUtils::Packlist' ); - ok( exists $realei->{FakeMod}, - 'new() with extra_libs should find modules with .packlists'); - - #{ use Data::Dumper; local $realei->{':private:'}{Config}; - # warn Dumper($realei); } - - isa_ok( $realei->{FakeMod}{packlist}, 'ExtUtils::Packlist' ); - is( $realei->{FakeMod}{version}, '1.1.1', - '... should find version in modules' ); -} + # Now try this using PERL5LIB + { + local $ENV{PERL5LIB} = join $Config{path_sep}, $fake_mod_dir; + local *ExtUtils::Installed::Config; + %ExtUtils::Installed::Config = ( + %Config, + archlibexp => cwd(), + sitearchexp => cwd(), + ); + + my $realei = ExtUtils::Installed->new(); + isa_ok( $realei, 'ExtUtils::Installed' ); + isa_ok( $realei->{Perl}{packlist}, 'ExtUtils::Packlist' ); + is( $realei->{Perl}{version}, $Config{version}, + 'new() should set Perl version from %Config' ); + + ok( exists $realei->{FakeMod}, + 'new() should find modules with .packlists using PERL5LIB' + ); + isa_ok( $realei->{FakeMod}{packlist}, 'ExtUtils::Packlist' ); + is( $realei->{FakeMod}{version}, '1.1.1', + '... should find version in modules' ); + } -# modules -$ei->{$_} = 1 for qw( abc def ghi ); -is( join(' ', $ei->modules()), 'abc def ghi', - 'modules() should return sorted keys' ); - -# This didn't work for a long time due to a sort in scalar context oddity. -is( $ei->modules, 3, 'modules() in scalar context' ); - -# files -$ei->{goodmod} = { - packlist => { - ($Config{man1direxp} ? - (File::Spec->catdir($Config{man1direxp}, 'foo') => 1) : - ()), - ($Config{man3direxp} ? - (File::Spec->catdir($Config{man3direxp}, 'bar') => 1) : - ()), - File::Spec->catdir($prefix, 'foobar') => 1, - foobaz => 1, - }, -}; - -eval { $ei->files('badmod') }; -like( $@, qr/badmod is not installed/,'files() should croak given bad modname'); -eval { $ei->files('goodmod', 'badtype' ) }; -like( $@, qr/type must be/,'files() should croak given bad type' ); - -my @files; -SKIP: { - skip('no man directory man1dir on this system', 2) - unless $Config{man1direxp}; - @files = $ei->files('goodmod', 'doc', $Config{man1direxp}); - is( scalar @files, 1, '... should find doc file under given dir' ); - is( (grep { /foo$/ } @files), 1, '... checking file name' ); -} -SKIP: { - skip('no man directories on this system', 1) unless $mandirs; - @files = $ei->files('goodmod', 'doc'); - is( scalar @files, $mandirs, '... should find all doc files with no dir' ); -} + # Do the same thing as the last block, but with overrides for + # %Config and @INC. + { + my $config_override = { %Config::Config }; + $config_override->{archlibexp} = cwd(); + $config_override->{sitearchexp} = $fake_mod_dir; + $config_override->{version} = 'fake_test_version'; + + my @inc_override = (@INC, $fake_mod_dir); + + my $realei = ExtUtils::Installed->new( + 'config_override' => $config_override, + 'inc_override' => \@inc_override, + ); + isa_ok( $realei, 'ExtUtils::Installed' ); + isa_ok( $realei->{Perl}{packlist}, 'ExtUtils::Packlist' ); + is( $realei->{Perl}{version}, 'fake_test_version', + 'new(config_override => HASH) overrides %Config' ); + + ok( exists $realei->{FakeMod}, 'new() with overrides should find modules with .packlists'); + isa_ok( $realei->{FakeMod}{packlist}, 'ExtUtils::Packlist' ); + is( $realei->{FakeMod}{version}, '1.1.1', + '... should find version in modules' ); + } -@files = $ei->files('goodmod', 'prog', 'fake', 'fake2'); -is( scalar @files, 0, '... should find no doc files given wrong dirs' ); -@files = $ei->files('goodmod', 'prog'); -is( scalar @files, 1, '... should find doc file in correct dir' ); -like( $files[0], qr/foobar[>\]]?$/, '... checking file name' ); -@files = $ei->files('goodmod'); -is( scalar @files, 2 + $mandirs, '... should find all files with no type specified' ); -my %dirnames = map { lc($_) => dirname($_) } @files; + # Check if extra_libs works. + { + my $realei = ExtUtils::Installed->new( + 'extra_libs' => [ cwd() ], + ); + isa_ok( $realei, 'ExtUtils::Installed' ); + isa_ok( $realei->{Perl}{packlist}, 'ExtUtils::Packlist' ); + ok( exists $realei->{FakeMod}, + 'new() with extra_libs should find modules with .packlists'); + + #{ use Data::Dumper; local $realei->{':private:'}{Config}; + # warn Dumper($realei); } + + isa_ok( $realei->{FakeMod}{packlist}, 'ExtUtils::Packlist' ); + is( $realei->{FakeMod}{version}, '1.1.1', + '... should find version in modules' ); + } -# directories -my @dirs = $ei->directories('goodmod', 'prog', 'fake'); -is( scalar @dirs, 0, 'directories() should return no dirs if no files found' ); + # modules + $ei->{$_} = 1 for qw( abc def ghi ); + is( join(' ', $ei->modules()), 'abc def ghi', + 'modules() should return sorted keys' ); + + # This didn't work for a long time due to a sort in scalar context oddity. + is( $ei->modules, 3, 'modules() in scalar context' ); + + # files + $ei->{goodmod} = { + packlist => { + ($Config{man1direxp} ? + (File::Spec->catdir($Config{man1direxp}, 'foo') => 1) : + ()), + ($Config{man3direxp} ? + (File::Spec->catdir($Config{man3direxp}, 'bar') => 1) : + ()), + File::Spec->catdir($prefix, 'foobar') => 1, + foobaz => 1, + }, + }; + + eval { $ei->files('badmod') }; + like( $@, qr/badmod is not installed/,'files() should croak given bad modname'); + eval { $ei->files('goodmod', 'badtype' ) }; + like( $@, qr/type must be/,'files() should croak given bad type' ); + + my @files; + SKIP: { + skip('no man directory man1dir on this system', 2) + unless $Config{man1direxp}; + @files = $ei->files('goodmod', 'doc', $Config{man1direxp}); + is( scalar @files, 1, '... should find doc file under given dir' ); + is( (grep { /foo$/ } @files), 1, '... checking file name' ); + } + SKIP: { + skip('no man directories on this system', 1) unless $mandirs; + @files = $ei->files('goodmod', 'doc'); + is( scalar @files, $mandirs, '... should find all doc files with no dir' ); + } -SKIP: { - skip('no man directories on this system', 1) unless $mandirs; - @dirs = $ei->directories('goodmod', 'doc'); - is( scalar @dirs, $mandirs, '... should find all files files() would' ); -} -@dirs = $ei->directories('goodmod'); -is( scalar @dirs, 2 + $mandirs, '... should find all files files() would, again' ); -@files = sort map { exists $dirnames{lc($_)} ? $dirnames{lc($_)} : '' } @files; -is( join(' ', @files), join(' ', @dirs), '... should sort output' ); + @files = $ei->files('goodmod', 'prog', 'fake', 'fake2'); + is( scalar @files, 0, '... should find no doc files given wrong dirs' ); + @files = $ei->files('goodmod', 'prog'); + is( scalar @files, 1, '... should find doc file in correct dir' ); + like( $files[0], qr/foobar[>\]]?$/, '... checking file name' ); + @files = $ei->files('goodmod'); + is( scalar @files, 2 + $mandirs, '... should find all files with no type specified' ); + my %dirnames = map { lc($_) => dirname($_) } @files; -# directory_tree -my $expectdirs = - ($mandirs == 2) && - (dirname($Config{man1direxp}) eq dirname($Config{man3direxp})) - ? 3 : 2; + # directories + my @dirs = $ei->directories('goodmod', 'prog', 'fake'); + is( scalar @dirs, 0, 'directories() should return no dirs if no files found' ); -SKIP: { - skip('no man directories on this system', 1) unless $mandirs; - @dirs = $ei->directory_tree('goodmod', 'doc', $Config{man1direxp} ? - dirname($Config{man1direxp}) : dirname($Config{man3direxp})); - is( scalar @dirs, $expectdirs, - 'directory_tree() should report intermediate dirs to those requested' ); -} + SKIP: { + skip('no man directories on this system', 1) unless $mandirs; + @dirs = $ei->directories('goodmod', 'doc'); + is( scalar @dirs, $mandirs, '... should find all files files() would' ); + } + @dirs = $ei->directories('goodmod'); + is( scalar @dirs, 2 + $mandirs, '... should find all files files() would, again' ); + @files = sort map { exists $dirnames{lc($_)} ? $dirnames{lc($_)} : '' } @files; + is( join(' ', @files), join(' ', @dirs), '... should sort output' ); -my $fakepak = Fakepak->new(102); + # directory_tree + my $expectdirs = + ($mandirs == 2) && + (dirname($Config{man1direxp}) eq dirname($Config{man3direxp})) + ? 3 : 2; -$ei->{yesmod} = { - version => 101, - packlist => $fakepak, -}; + SKIP: { + skip('no man directories on this system', 1) unless $mandirs; + @dirs = $ei->directory_tree('goodmod', 'doc', $Config{man1direxp} ? + dirname($Config{man1direxp}) : dirname($Config{man3direxp})); + is( scalar @dirs, $expectdirs, + 'directory_tree() should report intermediate dirs to those requested' ); + } -# these should all croak -foreach my $sub (qw( validate packlist version )) { - eval { $ei->$sub('nomod') }; - like( $@, qr/nomod is not installed/, - "$sub() should croak when asked about uninstalled module" ); -} + my $fakepak = Fakepak->new(102); + + $ei->{yesmod} = { + version => 101, + packlist => $fakepak, + }; + + # these should all croak + foreach my $sub (qw( validate packlist version )) { + eval { $ei->$sub('nomod') }; + like( $@, qr/nomod is not installed/, + "$sub() should croak when asked about uninstalled module" ); + } -# validate -is( $ei->validate('yesmod'), 'validated', - 'validate() should return results of packlist validate() call' ); + # validate + is( $ei->validate('yesmod'), 'validated', + 'validate() should return results of packlist validate() call' ); -# packlist -is( ${ $ei->packlist('yesmod') }, 102, - 'packlist() should report installed mod packlist' ); + # packlist + is( ${ $ei->packlist('yesmod') }, 102, + 'packlist() should report installed mod packlist' ); -# version -is( $ei->version('yesmod'), 101, - 'version() should report installed mod version' ); + # version + is( $ei->version('yesmod'), 101, + 'version() should report installed mod version' ); +} # End of block enclosing tempdir package Fakepak; diff --git a/gnu/usr.bin/perl/cpan/ExtUtils-Install/t/lib/MakeMaker/Test/Setup/BFD.pm b/gnu/usr.bin/perl/cpan/ExtUtils-Install/t/lib/MakeMaker/Test/Setup/BFD.pm index 37ca9a3c017..d0b57a23d5c 100644 --- a/gnu/usr.bin/perl/cpan/ExtUtils-Install/t/lib/MakeMaker/Test/Setup/BFD.pm +++ b/gnu/usr.bin/perl/cpan/ExtUtils-Install/t/lib/MakeMaker/Test/Setup/BFD.pm @@ -1,10 +1,10 @@ package MakeMaker::Test::Setup::BFD; +use strict; -@ISA = qw(Exporter); +our @ISA = qw(Exporter); require Exporter; -@EXPORT = qw(setup_recurs teardown_recurs); +our @EXPORT = qw(setup_recurs teardown_recurs); -use strict; use File::Path; use File::Basename; use MakeMaker::Test::Utils; diff --git a/gnu/usr.bin/perl/cpan/ExtUtils-MakeMaker/lib/ExtUtils/Command.pm b/gnu/usr.bin/perl/cpan/ExtUtils-MakeMaker/lib/ExtUtils/Command.pm index c5101c37b7d..34b1dc15a59 100644 --- a/gnu/usr.bin/perl/cpan/ExtUtils-MakeMaker/lib/ExtUtils/Command.pm +++ b/gnu/usr.bin/perl/cpan/ExtUtils-MakeMaker/lib/ExtUtils/Command.pm @@ -2,12 +2,13 @@ package ExtUtils::Command; use 5.00503; use strict; +use warnings; require Exporter; use vars qw(@ISA @EXPORT @EXPORT_OK $VERSION); @ISA = qw(Exporter); @EXPORT = qw(cp rm_f rm_rf mv cat eqtime mkpath touch test_f test_d chmod dos2unix); -$VERSION = '7.44'; +$VERSION = '7.64'; $VERSION =~ tr/_//d; my $Is_VMS = $^O eq 'VMS'; diff --git a/gnu/usr.bin/perl/cpan/ExtUtils-MakeMaker/lib/ExtUtils/Command/MM.pm b/gnu/usr.bin/perl/cpan/ExtUtils-MakeMaker/lib/ExtUtils/Command/MM.pm index 484fa5b69d5..348b67586e9 100644 --- a/gnu/usr.bin/perl/cpan/ExtUtils-MakeMaker/lib/ExtUtils/Command/MM.pm +++ b/gnu/usr.bin/perl/cpan/ExtUtils-MakeMaker/lib/ExtUtils/Command/MM.pm @@ -10,7 +10,7 @@ our @ISA = qw(Exporter); our @EXPORT = qw(test_harness pod2man perllocal_install uninstall warn_if_old_packlist test_s cp_nonempty); -our $VERSION = '7.44'; +our $VERSION = '7.64'; $VERSION =~ tr/_//d; my $Is_VMS = $^O eq 'VMS'; diff --git a/gnu/usr.bin/perl/cpan/ExtUtils-MakeMaker/lib/ExtUtils/Liblist.pm b/gnu/usr.bin/perl/cpan/ExtUtils-MakeMaker/lib/ExtUtils/Liblist.pm index deec54d2883..cf68149da74 100644 --- a/gnu/usr.bin/perl/cpan/ExtUtils-MakeMaker/lib/ExtUtils/Liblist.pm +++ b/gnu/usr.bin/perl/cpan/ExtUtils-MakeMaker/lib/ExtUtils/Liblist.pm @@ -1,8 +1,9 @@ package ExtUtils::Liblist; use strict; +use warnings; -our $VERSION = '7.44'; +our $VERSION = '7.64'; $VERSION =~ tr/_//d; use File::Spec; diff --git a/gnu/usr.bin/perl/cpan/ExtUtils-MakeMaker/lib/ExtUtils/Liblist/Kid.pm b/gnu/usr.bin/perl/cpan/ExtUtils-MakeMaker/lib/ExtUtils/Liblist/Kid.pm index e040a899edb..01a4a486025 100644 --- a/gnu/usr.bin/perl/cpan/ExtUtils-MakeMaker/lib/ExtUtils/Liblist/Kid.pm +++ b/gnu/usr.bin/perl/cpan/ExtUtils-MakeMaker/lib/ExtUtils/Liblist/Kid.pm @@ -11,7 +11,7 @@ use 5.006; use strict; use warnings; -our $VERSION = '7.44_01'; +our $VERSION = '7.64'; $VERSION =~ tr/_//d; use ExtUtils::MakeMaker::Config; @@ -52,12 +52,16 @@ sub _unix_os2_ext { require Text::ParseWords; my ( @searchpath ); # from "-L/path" entries in $potential_libs - my ( @libpath ) = Text::ParseWords::quotewords( '\s+', 0, $Config{'libpth'} || '' ); + my ( @libpath ) = Text::ParseWords::shellwords( $Config{'libpth'} || '' ); my ( @ldloadlibs, @bsloadlibs, @extralibs, @ld_run_path, %ld_run_path_seen ); my ( @libs, %libs_seen ); my ( $fullname, @fullname ); my ( $pwd ) = cwd(); # from Cwd.pm my ( $found ) = 0; + if ($Config{gccversion}) { + chomp(my @incpath = grep s/^ //, grep { /^#include &1 >/dev/null`); + unshift @libpath, map { s{/include[^/]*}{/lib}; $_ } @incpath + } if ( $^O eq 'darwin' or $^O eq 'next' ) { # 'escape' Mach-O ld -framework and -F flags, so they aren't dropped later on @@ -65,7 +69,7 @@ sub _unix_os2_ext { $potential_libs =~ s/(^|\s)(-F)\s*(\S+)/$1-Wl,$2 -Wl,$3/g; } - foreach my $thislib ( Text::ParseWords::quotewords( '\s+', 0, $potential_libs) ) { + foreach my $thislib ( Text::ParseWords::shellwords($potential_libs) ) { my ( $custom_name ) = ''; # Handle possible linker path arguments. diff --git a/gnu/usr.bin/perl/cpan/ExtUtils-MakeMaker/lib/ExtUtils/MM.pm b/gnu/usr.bin/perl/cpan/ExtUtils-MakeMaker/lib/ExtUtils/MM.pm index f1ffa91849e..a9d8d268999 100644 --- a/gnu/usr.bin/perl/cpan/ExtUtils-MakeMaker/lib/ExtUtils/MM.pm +++ b/gnu/usr.bin/perl/cpan/ExtUtils-MakeMaker/lib/ExtUtils/MM.pm @@ -1,9 +1,10 @@ package ExtUtils::MM; use strict; +use warnings; use ExtUtils::MakeMaker::Config; -our $VERSION = '7.44'; +our $VERSION = '7.64'; $VERSION =~ tr/_//d; require ExtUtils::Liblist; @@ -70,6 +71,7 @@ $Is{VOS} = $^O eq 'vos'; $Is{QNX} = $^O eq 'qnx'; $Is{AIX} = $^O eq 'aix'; $Is{Darwin} = $^O eq 'darwin'; +$Is{OS390} = $^O eq 'os390'; $Is{Unix} = !grep { $_ } values %Is; diff --git a/gnu/usr.bin/perl/cpan/ExtUtils-MakeMaker/lib/ExtUtils/MM_AIX.pm b/gnu/usr.bin/perl/cpan/ExtUtils-MakeMaker/lib/ExtUtils/MM_AIX.pm index 654e2213594..b25adf58b27 100644 --- a/gnu/usr.bin/perl/cpan/ExtUtils-MakeMaker/lib/ExtUtils/MM_AIX.pm +++ b/gnu/usr.bin/perl/cpan/ExtUtils-MakeMaker/lib/ExtUtils/MM_AIX.pm @@ -1,7 +1,8 @@ package ExtUtils::MM_AIX; use strict; -our $VERSION = '7.44'; +use warnings; +our $VERSION = '7.64'; $VERSION =~ tr/_//d; use ExtUtils::MakeMaker::Config; diff --git a/gnu/usr.bin/perl/cpan/ExtUtils-MakeMaker/lib/ExtUtils/MM_Any.pm b/gnu/usr.bin/perl/cpan/ExtUtils-MakeMaker/lib/ExtUtils/MM_Any.pm index 4f4b252c261..826a4a556fa 100644 --- a/gnu/usr.bin/perl/cpan/ExtUtils-MakeMaker/lib/ExtUtils/MM_Any.pm +++ b/gnu/usr.bin/perl/cpan/ExtUtils-MakeMaker/lib/ExtUtils/MM_Any.pm @@ -1,7 +1,8 @@ package ExtUtils::MM_Any; use strict; -our $VERSION = '7.44'; +use warnings; +our $VERSION = '7.64'; $VERSION =~ tr/_//d; use Carp; @@ -1670,7 +1671,7 @@ sub _mymeta_from_meta { # rolled their own tarball rather than using "make dist". if ($meta->{generated_by} && $meta->{generated_by} =~ /ExtUtils::MakeMaker version ([\d\._]+)/) { - my $eummv = do { local $^W = 0; $1+0; }; + my $eummv = do { no warnings; $1+0; }; if ($eummv < 6.2501) { return; } diff --git a/gnu/usr.bin/perl/cpan/ExtUtils-MakeMaker/lib/ExtUtils/MM_BeOS.pm b/gnu/usr.bin/perl/cpan/ExtUtils-MakeMaker/lib/ExtUtils/MM_BeOS.pm index d62a7d132f3..d00dea576ad 100644 --- a/gnu/usr.bin/perl/cpan/ExtUtils-MakeMaker/lib/ExtUtils/MM_BeOS.pm +++ b/gnu/usr.bin/perl/cpan/ExtUtils-MakeMaker/lib/ExtUtils/MM_BeOS.pm @@ -1,6 +1,7 @@ package ExtUtils::MM_BeOS; use strict; +use warnings; =head1 NAME @@ -26,7 +27,7 @@ require ExtUtils::MM_Any; require ExtUtils::MM_Unix; our @ISA = qw( ExtUtils::MM_Any ExtUtils::MM_Unix ); -our $VERSION = '7.44'; +our $VERSION = '7.64'; $VERSION =~ tr/_//d; diff --git a/gnu/usr.bin/perl/cpan/ExtUtils-MakeMaker/lib/ExtUtils/MM_Cygwin.pm b/gnu/usr.bin/perl/cpan/ExtUtils-MakeMaker/lib/ExtUtils/MM_Cygwin.pm index 2052c7c3aa3..91d20941964 100644 --- a/gnu/usr.bin/perl/cpan/ExtUtils-MakeMaker/lib/ExtUtils/MM_Cygwin.pm +++ b/gnu/usr.bin/perl/cpan/ExtUtils-MakeMaker/lib/ExtUtils/MM_Cygwin.pm @@ -1,6 +1,7 @@ package ExtUtils::MM_Cygwin; use strict; +use warnings; use ExtUtils::MakeMaker::Config; use File::Spec; @@ -9,7 +10,7 @@ require ExtUtils::MM_Unix; require ExtUtils::MM_Win32; our @ISA = qw( ExtUtils::MM_Unix ); -our $VERSION = '7.44'; +our $VERSION = '7.64'; $VERSION =~ tr/_//d; @@ -100,6 +101,16 @@ sub init_linker { $self->{EXPORT_LIST} ||= ''; } +sub init_others { + my $self = shift; + + $self->SUPER::init_others; + + $self->{LDLOADLIBS} ||= $Config{perllibs}; + + return; +} + =item maybe_command Determine whether a file is native to Cygwin by checking whether it diff --git a/gnu/usr.bin/perl/cpan/ExtUtils-MakeMaker/lib/ExtUtils/MM_DOS.pm b/gnu/usr.bin/perl/cpan/ExtUtils-MakeMaker/lib/ExtUtils/MM_DOS.pm index d5c66deb895..4e1b86a8ed4 100644 --- a/gnu/usr.bin/perl/cpan/ExtUtils-MakeMaker/lib/ExtUtils/MM_DOS.pm +++ b/gnu/usr.bin/perl/cpan/ExtUtils-MakeMaker/lib/ExtUtils/MM_DOS.pm @@ -1,8 +1,9 @@ package ExtUtils::MM_DOS; use strict; +use warnings; -our $VERSION = '7.44'; +our $VERSION = '7.64'; $VERSION =~ tr/_//d; require ExtUtils::MM_Any; diff --git a/gnu/usr.bin/perl/cpan/ExtUtils-MakeMaker/lib/ExtUtils/MM_Darwin.pm b/gnu/usr.bin/perl/cpan/ExtUtils-MakeMaker/lib/ExtUtils/MM_Darwin.pm index 9ca9d2c6214..4e971c36a94 100644 --- a/gnu/usr.bin/perl/cpan/ExtUtils-MakeMaker/lib/ExtUtils/MM_Darwin.pm +++ b/gnu/usr.bin/perl/cpan/ExtUtils-MakeMaker/lib/ExtUtils/MM_Darwin.pm @@ -1,13 +1,14 @@ package ExtUtils::MM_Darwin; use strict; +use warnings; BEGIN { require ExtUtils::MM_Unix; our @ISA = qw( ExtUtils::MM_Unix ); } -our $VERSION = '7.44'; +our $VERSION = '7.64'; $VERSION =~ tr/_//d; @@ -45,4 +46,29 @@ sub init_dist { $self->SUPER::init_dist(@_); } +=head3 cflags + +Over-ride Apple's automatic setting of -Werror + +=cut + +sub cflags { + my($self,$libperl)=@_; + return $self->{CFLAGS} if $self->{CFLAGS}; + return '' unless $self->needs_linking(); + + my $base = $self->SUPER::cflags($libperl); + + foreach (split /\n/, $base) { + /^(\S*)\s*=\s*(\S*)$/ and $self->{$1} = $2; + }; + $self->{CCFLAGS} .= " -Wno-error=implicit-function-declaration"; + + return $self->{CFLAGS} = qq{ +CCFLAGS = $self->{CCFLAGS} +OPTIMIZE = $self->{OPTIMIZE} +PERLTYPE = $self->{PERLTYPE} +}; +} + 1; diff --git a/gnu/usr.bin/perl/cpan/ExtUtils-MakeMaker/lib/ExtUtils/MM_MacOS.pm b/gnu/usr.bin/perl/cpan/ExtUtils-MakeMaker/lib/ExtUtils/MM_MacOS.pm index b10e3f9cfba..f914555bb09 100644 --- a/gnu/usr.bin/perl/cpan/ExtUtils-MakeMaker/lib/ExtUtils/MM_MacOS.pm +++ b/gnu/usr.bin/perl/cpan/ExtUtils-MakeMaker/lib/ExtUtils/MM_MacOS.pm @@ -1,8 +1,9 @@ package ExtUtils::MM_MacOS; use strict; +use warnings; -our $VERSION = '7.44'; +our $VERSION = '7.64'; $VERSION =~ tr/_//d; sub new { diff --git a/gnu/usr.bin/perl/cpan/ExtUtils-MakeMaker/lib/ExtUtils/MM_NW5.pm b/gnu/usr.bin/perl/cpan/ExtUtils-MakeMaker/lib/ExtUtils/MM_NW5.pm index a9e2e1af542..052083d29ba 100644 --- a/gnu/usr.bin/perl/cpan/ExtUtils-MakeMaker/lib/ExtUtils/MM_NW5.pm +++ b/gnu/usr.bin/perl/cpan/ExtUtils-MakeMaker/lib/ExtUtils/MM_NW5.pm @@ -19,10 +19,11 @@ the semantics. =cut use strict; +use warnings; use ExtUtils::MakeMaker::Config; use File::Basename; -our $VERSION = '7.44'; +our $VERSION = '7.64'; $VERSION =~ tr/_//d; require ExtUtils::MM_Win32; diff --git a/gnu/usr.bin/perl/cpan/ExtUtils-MakeMaker/lib/ExtUtils/MM_OS2.pm b/gnu/usr.bin/perl/cpan/ExtUtils-MakeMaker/lib/ExtUtils/MM_OS2.pm index 300f091c351..95583e264b2 100644 --- a/gnu/usr.bin/perl/cpan/ExtUtils-MakeMaker/lib/ExtUtils/MM_OS2.pm +++ b/gnu/usr.bin/perl/cpan/ExtUtils-MakeMaker/lib/ExtUtils/MM_OS2.pm @@ -1,11 +1,12 @@ package ExtUtils::MM_OS2; use strict; +use warnings; use ExtUtils::MakeMaker qw(neatvalue); use File::Spec; -our $VERSION = '7.44'; +our $VERSION = '7.64'; $VERSION =~ tr/_//d; require ExtUtils::MM_Any; diff --git a/gnu/usr.bin/perl/cpan/ExtUtils-MakeMaker/lib/ExtUtils/MM_QNX.pm b/gnu/usr.bin/perl/cpan/ExtUtils-MakeMaker/lib/ExtUtils/MM_QNX.pm index 3e6f6d06995..071a2d5aca6 100644 --- a/gnu/usr.bin/perl/cpan/ExtUtils-MakeMaker/lib/ExtUtils/MM_QNX.pm +++ b/gnu/usr.bin/perl/cpan/ExtUtils-MakeMaker/lib/ExtUtils/MM_QNX.pm @@ -1,7 +1,8 @@ package ExtUtils::MM_QNX; use strict; -our $VERSION = '7.44'; +use warnings; +our $VERSION = '7.64'; $VERSION =~ tr/_//d; require ExtUtils::MM_Unix; diff --git a/gnu/usr.bin/perl/cpan/ExtUtils-MakeMaker/lib/ExtUtils/MM_UWIN.pm b/gnu/usr.bin/perl/cpan/ExtUtils-MakeMaker/lib/ExtUtils/MM_UWIN.pm index 4201585e326..7bb41d0f371 100644 --- a/gnu/usr.bin/perl/cpan/ExtUtils-MakeMaker/lib/ExtUtils/MM_UWIN.pm +++ b/gnu/usr.bin/perl/cpan/ExtUtils-MakeMaker/lib/ExtUtils/MM_UWIN.pm @@ -1,7 +1,8 @@ package ExtUtils::MM_UWIN; use strict; -our $VERSION = '7.44'; +use warnings; +our $VERSION = '7.64'; $VERSION =~ tr/_//d; require ExtUtils::MM_Unix; diff --git a/gnu/usr.bin/perl/cpan/ExtUtils-MakeMaker/lib/ExtUtils/MM_Unix.pm b/gnu/usr.bin/perl/cpan/ExtUtils-MakeMaker/lib/ExtUtils/MM_Unix.pm index 4f8d4a409dc..504e7516306 100644 --- a/gnu/usr.bin/perl/cpan/ExtUtils-MakeMaker/lib/ExtUtils/MM_Unix.pm +++ b/gnu/usr.bin/perl/cpan/ExtUtils-MakeMaker/lib/ExtUtils/MM_Unix.pm @@ -3,6 +3,7 @@ package ExtUtils::MM_Unix; require 5.006; use strict; +use warnings; use Carp; use ExtUtils::MakeMaker::Config; @@ -14,7 +15,7 @@ use ExtUtils::MakeMaker qw($Verbose neatvalue _sprintf562); # If we make $VERSION an our variable parse_version() breaks use vars qw($VERSION); -$VERSION = '7.44'; +$VERSION = '7.64'; $VERSION =~ tr/_//d; require ExtUtils::MM_Any; @@ -140,9 +141,9 @@ sub c_o { $flags =~ s/"-I(\$\(PERL_INC\))"/-iwithsysroot "$1"/; } - if (my $cpp = $Config{cpprun}) { + if (my $cpp = $self->{CPPRUN}) { my $cpp_cmd = $self->const_cccmd; - $cpp_cmd =~ s/^CCCMD\s*=\s*\$\(CC\)/$cpp/; + $cpp_cmd =~ s/^CCCMD\s*=\s*\$\(CC\)/\$(CPPRUN)/; push @m, qq{ .c.i: $cpp_cmd $flags \$*.c > \$*.i @@ -1047,9 +1048,19 @@ sub xs_make_dynamic_lib { } $ldfrom = "-all $ldfrom -none" if $Is{OSF}; + my $ldrun = ''; # The IRIX linker doesn't use LD_RUN_PATH - my $ldrun = $Is{IRIX} && $self->{LD_RUN_PATH} ? - qq{-rpath "$self->{LD_RUN_PATH}"} : ''; + if ( $self->{LD_RUN_PATH} ) { + if ( $Is{IRIX} ) { + $ldrun = qq{-rpath "$self->{LD_RUN_PATH}"}; + } + elsif ( $^O eq 'darwin' ) { + # both clang and gcc support -Wl,-rpath, but only clang supports + # -rpath so by using -Wl,-rpath we avoid having to check for the + # type of compiler + $ldrun = qq{-Wl,-rpath,"$self->{LD_RUN_PATH}"}; + } + } # For example in AIX the shared objects/libraries from previous builds # linger quite a while in the shared dynalinker cache even when nobody @@ -1314,7 +1325,7 @@ sub _fixin_replace_shebang { if ($self->maybe_command($origcmd) && grep { $_ eq $origdir } @absdirs) { my ($odev, $oino) = stat $origcmd; my ($idev, $iino) = stat $interpreter; - if ($odev == $idev && $oino == $iino) { + if ($odev == $idev && $oino eq $iino) { warn "$origcmd is the same as $interpreter, leaving alone" if $Verbose; $interpreter = $origcmd; @@ -2214,8 +2225,7 @@ Called by init_main. Initializes PERL_* sub init_PERM { my($self) = shift; - my $perm_dir = $self->{PERL_CORE} ? 770 : 755; - $self->{PERM_DIR} = $perm_dir unless defined $self->{PERM_DIR}; + $self->{PERM_DIR} = 755 unless defined $self->{PERM_DIR}; $self->{PERM_RW} = 644 unless defined $self->{PERM_RW}; $self->{PERM_RWX} = 755 unless defined $self->{PERM_RWX}; @@ -3001,7 +3011,7 @@ sub parse_version { chop; next if /^\s*(if|unless|elsif)/; if ( m{^ \s* package \s+ \w[\w\:\']* \s+ (v?[0-9._]+) \s* (;|\{) }x ) { - local $^W = 0; + no warnings; $result = $1; } elsif ( m{(?=!])\=[^=]}x ) { @@ -3019,6 +3029,10 @@ sub parse_version { my $normal = eval { version->new( $result ) }; $result = $normal if defined $normal; } + if ( defined $result ) { + $result = "undef" unless $result =~ m!^v?[\d_\.]+$! + or eval { version->parse( $result ) }; + } $result = "undef" unless defined $result; return $result; } @@ -3034,8 +3048,8 @@ sub get_version { version::->import; }; no strict; + no warnings; local *{$name}; - local $^W = 0; $line = $1 if $line =~ m{^(.+)}s; eval($line); ## no critic return ${$name}; @@ -3233,11 +3247,12 @@ PPD_PERLVERS } my $archname = $Config{archname}; + + # archname did not change from 5.6 to 5.8, but those versions may + # not be not binary compatible so now we append the part of the + # version that changes when binary compatibility may change if ("$]" >= 5.008) { - # archname did not change from 5.6 to 5.8, but those versions may - # not be not binary compatible so now we append the part of the - # version that changes when binary compatibility may change - $archname .= "-$Config{PERL_REVISION}.$Config{PERL_VERSION}"; + $archname .= "-$Config{api_revision}.$Config{api_version}"; } push @ppd_chunks, sprintf <<'PPD_OUT', $archname; @@ -3974,8 +3989,6 @@ sub top_targets { pure_all :: config pm_to_blib subdirs linkext $(NOECHO) $(NOOP) - $(NOECHO) $(NOOP) - subdirs :: $(MYEXTLIB) $(NOECHO) $(NOOP) diff --git a/gnu/usr.bin/perl/cpan/ExtUtils-MakeMaker/lib/ExtUtils/MM_VMS.pm b/gnu/usr.bin/perl/cpan/ExtUtils-MakeMaker/lib/ExtUtils/MM_VMS.pm index fbf5f9ee265..8564bc7362e 100644 --- a/gnu/usr.bin/perl/cpan/ExtUtils-MakeMaker/lib/ExtUtils/MM_VMS.pm +++ b/gnu/usr.bin/perl/cpan/ExtUtils-MakeMaker/lib/ExtUtils/MM_VMS.pm @@ -1,6 +1,7 @@ package ExtUtils::MM_VMS; use strict; +use warnings; use ExtUtils::MakeMaker::Config; require Exporter; @@ -15,7 +16,7 @@ BEGIN { use File::Basename; -our $VERSION = '7.44'; +our $VERSION = '7.64'; $VERSION =~ tr/_//d; require ExtUtils::MM_Any; diff --git a/gnu/usr.bin/perl/cpan/ExtUtils-MakeMaker/lib/ExtUtils/MM_VOS.pm b/gnu/usr.bin/perl/cpan/ExtUtils-MakeMaker/lib/ExtUtils/MM_VOS.pm index dea49e1a566..341750e3652 100644 --- a/gnu/usr.bin/perl/cpan/ExtUtils-MakeMaker/lib/ExtUtils/MM_VOS.pm +++ b/gnu/usr.bin/perl/cpan/ExtUtils-MakeMaker/lib/ExtUtils/MM_VOS.pm @@ -1,7 +1,8 @@ package ExtUtils::MM_VOS; use strict; -our $VERSION = '7.44'; +use warnings; +our $VERSION = '7.64'; $VERSION =~ tr/_//d; require ExtUtils::MM_Unix; diff --git a/gnu/usr.bin/perl/cpan/ExtUtils-MakeMaker/lib/ExtUtils/MM_Win32.pm b/gnu/usr.bin/perl/cpan/ExtUtils-MakeMaker/lib/ExtUtils/MM_Win32.pm index 3db0f45260f..f6a1bc97630 100644 --- a/gnu/usr.bin/perl/cpan/ExtUtils-MakeMaker/lib/ExtUtils/MM_Win32.pm +++ b/gnu/usr.bin/perl/cpan/ExtUtils-MakeMaker/lib/ExtUtils/MM_Win32.pm @@ -1,7 +1,7 @@ package ExtUtils::MM_Win32; use strict; - +use warnings; =head1 NAME @@ -27,7 +27,7 @@ use ExtUtils::MakeMaker qw(neatvalue _sprintf562); require ExtUtils::MM_Any; require ExtUtils::MM_Unix; our @ISA = qw( ExtUtils::MM_Any ExtUtils::MM_Unix ); -our $VERSION = '7.44'; +our $VERSION = '7.64'; $VERSION =~ tr/_//d; $ENV{EMXSHELL} = 'sh'; # to run `commands` @@ -395,8 +395,15 @@ sub perl_script { } sub can_dep_space { - my $self = shift; - 1; # with Win32::GetShortPathName + my ($self) = @_; + return 0 unless $self->can_load_xs; + require Win32; + require File::Spec; + my ($vol, $dir) = File::Spec->splitpath($INC{'ExtUtils/MakeMaker.pm'}); + # can_dep_space via GetShortPathName, if short paths are supported + my $canary = Win32::GetShortPathName(File::Spec->catpath($vol, $dir, 'MakeMaker.pm')); + (undef, undef, my $file) = File::Spec->splitpath($canary); + return (length $file > 11) ? 0 : 1; } =item quote_dep diff --git a/gnu/usr.bin/perl/cpan/ExtUtils-MakeMaker/lib/ExtUtils/MM_Win95.pm b/gnu/usr.bin/perl/cpan/ExtUtils-MakeMaker/lib/ExtUtils/MM_Win95.pm index 4220e52dc37..f7bc5f75068 100644 --- a/gnu/usr.bin/perl/cpan/ExtUtils-MakeMaker/lib/ExtUtils/MM_Win95.pm +++ b/gnu/usr.bin/perl/cpan/ExtUtils-MakeMaker/lib/ExtUtils/MM_Win95.pm @@ -1,8 +1,9 @@ package ExtUtils::MM_Win95; use strict; +use warnings; -our $VERSION = '7.44'; +our $VERSION = '7.64'; $VERSION =~ tr/_//d; require ExtUtils::MM_Win32; diff --git a/gnu/usr.bin/perl/cpan/ExtUtils-MakeMaker/lib/ExtUtils/MY.pm b/gnu/usr.bin/perl/cpan/ExtUtils-MakeMaker/lib/ExtUtils/MY.pm index 957ab164592..5c4cf770d23 100644 --- a/gnu/usr.bin/perl/cpan/ExtUtils-MakeMaker/lib/ExtUtils/MY.pm +++ b/gnu/usr.bin/perl/cpan/ExtUtils-MakeMaker/lib/ExtUtils/MY.pm @@ -3,7 +3,7 @@ package ExtUtils::MY; use strict; require ExtUtils::MM; -our $VERSION = '7.44'; +our $VERSION = '7.64'; $VERSION =~ tr/_//d; our @ISA = qw(ExtUtils::MM); diff --git a/gnu/usr.bin/perl/cpan/ExtUtils-MakeMaker/lib/ExtUtils/MakeMaker.pm b/gnu/usr.bin/perl/cpan/ExtUtils-MakeMaker/lib/ExtUtils/MakeMaker.pm index 6dceb98be41..8ee3ca8e2c8 100644 --- a/gnu/usr.bin/perl/cpan/ExtUtils-MakeMaker/lib/ExtUtils/MakeMaker.pm +++ b/gnu/usr.bin/perl/cpan/ExtUtils-MakeMaker/lib/ExtUtils/MakeMaker.pm @@ -2,6 +2,7 @@ package ExtUtils::MakeMaker; use strict; +use warnings; BEGIN {require 5.006;} @@ -24,7 +25,7 @@ my %Recognized_Att_Keys; our %macro_fsentity; # whether a macro is a filesystem name our %macro_dep; # whether a macro is a dependency -our $VERSION = '7.44'; +our $VERSION = '7.64'; $VERSION =~ tr/_//d; # Emulate something resembling CVS $Revision$ @@ -392,7 +393,7 @@ sub full_setup { # we will use all these variables in the Makefile @Get_from_Config = qw( - ar cc cccdlflags ccdlflags dlext dlsrc exe_ext full_ar ld + ar cc cccdlflags ccdlflags cpprun dlext dlsrc exe_ext full_ar ld lddlflags ldflags libc lib_ext obj_ext osname osvers ranlib sitelibexp sitearchexp so ); @@ -425,7 +426,10 @@ sub _has_cpan_meta_requirements { return eval { require CPAN::Meta::Requirements; CPAN::Meta::Requirements->VERSION(2.130); - require B; # CMR requires this, for core we have to too. + # Make sure vstrings can be handled. Some versions of CMR require B to + # do this, which won't be available in miniperl. + CPAN::Meta::Requirements->new->add_string_requirement('Module' => v1.2); + 1; }; } @@ -510,50 +514,43 @@ sub new { check_hints($self); - if ( defined $self->{MIN_PERL_VERSION} - && $self->{MIN_PERL_VERSION} !~ /^v?[\d_\.]+$/ ) { - require version; - my $normal = eval { - local $SIG{__WARN__} = sub { - # simulate "use warnings FATAL => 'all'" for vintage perls - die @_; - }; - version->new( $self->{MIN_PERL_VERSION} ) - }; - $self->{MIN_PERL_VERSION} = $normal if defined $normal && !$@; - } - - # Translate X.Y.Z to X.00Y00Z - if( defined $self->{MIN_PERL_VERSION} ) { - $self->{MIN_PERL_VERSION} =~ s{ ^v? (\d+) \. (\d+) \. (\d+) $ } - {sprintf "%d.%03d%03d", $1, $2, $3}ex; - } + if ( $self->{MIN_PERL_VERSION}) { + my $perl_version = $self->{MIN_PERL_VERSION}; + if (ref $perl_version) { + # assume a version object + } + else { + $perl_version = eval { + local $SIG{__WARN__} = sub { + # simulate "use warnings FATAL => 'all'" for vintage perls + die @_; + }; + version->new( $perl_version )->numify; + }; + $perl_version =~ tr/_//d + if defined $perl_version; + } - my $perl_version_ok = eval { - local $SIG{__WARN__} = sub { - # simulate "use warnings FATAL => 'all'" for vintage perls - die @_; - }; - !$self->{MIN_PERL_VERSION} or $self->{MIN_PERL_VERSION} <= "$]" - }; - if (!$perl_version_ok) { - if (!defined $perl_version_ok) { - die <<'END'; -Warning: MIN_PERL_VERSION is not in a recognized format. + if (!defined $perl_version) { + # should this be a warning? + die sprintf <<'END', $self->{MIN_PERL_VERSION}; +MakeMaker FATAL: MIN_PERL_VERSION (%s) is not in a recognized format. Recommended is a quoted numerical value like '5.005' or '5.008001'. END } - elsif ($self->{PREREQ_FATAL}) { - die sprintf <<"END", $self->{MIN_PERL_VERSION}, $]; -MakeMaker FATAL: perl version too low for this distribution. -Required is %s. We run %s. + elsif ($perl_version > "$]") { + my $message = sprintf <<'END', $perl_version, $]; +Perl version %s or higher required. We run %s. END + if ($self->{PREREQ_FATAL}) { + die "MakeMaker FATAL: $message"; + } + else { + warn "Warning: $message"; + } } - else { - warn sprintf - "Warning: Perl version %s or higher required. We run %s.\n", - $self->{MIN_PERL_VERSION}, $]; - } + + $self->{MIN_PERL_VERSION} = $perl_version; } my %configure_att; # record &{$self->{CONFIGURE}} attributes @@ -637,7 +634,7 @@ END if (%unsatisfied && $self->{PREREQ_FATAL}){ my $failedprereqs = join "\n", map {" $_ $unsatisfied{$_}"} - sort { $a cmp $b } keys %unsatisfied; + sort { lc $a cmp lc $b } keys %unsatisfied; die <<"END"; MakeMaker FATAL: prerequisites not found. $failedprereqs @@ -723,7 +720,7 @@ END # RT#91540 PREREQ_FATAL not recognized on command line if (%unsatisfied && $self->{PREREQ_FATAL}){ my $failedprereqs = join "\n", map {" $_ $unsatisfied{$_}"} - sort { $a cmp $b } keys %unsatisfied; + sort { lc $a cmp lc $b } keys %unsatisfied; die <<"END"; MakeMaker FATAL: prerequisites not found. $failedprereqs @@ -1038,7 +1035,7 @@ sub _parse_line { } sub check_manifest { - print "Checking if your kit is complete...\n"; + print STDOUT "Checking if your kit is complete...\n"; require ExtUtils::Manifest; # avoid warning $ExtUtils::Manifest::Quiet = $ExtUtils::Manifest::Quiet = 1; @@ -1154,20 +1151,19 @@ sub check_hints { } sub _run_hintfile { - our $self; - local($self) = shift; # make $self available to the hint file. - my($hint_file) = shift; + my ($self, $hint_file) = @_; local($@, $!); print "Processing hints file $hint_file\n" if $Verbose; - # Just in case the ./ isn't on the hint file, which File::Spec can - # often strip off, we bung the curdir into @INC - local @INC = (File::Spec->curdir, @INC); - my $ret = do $hint_file; - if( !defined $ret ) { - my $error = $@ || $!; - warn $error; + if(open(my $fh, '<', $hint_file)) { + my $hints_content = do { local $/; <$fh> }; + no strict; + eval $hints_content; + warn "Failed to run hint file $hint_file: $@" if $@; + } + else { + warn "Could not open $hint_file for read: $!"; } } @@ -1237,15 +1233,15 @@ sub flush { my $self = shift; my $finalname = $self->{MAKEFILE}; - printf "Generating a %s %s\n", $self->make_type, $finalname if $Verbose || !$self->{PARENT}; - print "Writing $finalname for $self->{NAME}\n" if $Verbose || !$self->{PARENT}; + printf STDOUT "Generating a %s %s\n", $self->make_type, $finalname if $Verbose || !$self->{PARENT}; + print STDOUT "Writing $finalname for $self->{NAME}\n" if $Verbose || !$self->{PARENT}; unlink($finalname, "MakeMaker.tmp", $Is_VMS ? 'Descrip.MMS' : ()); write_file_via_tmp($finalname, $self->{RESULT}); # Write MYMETA.yml to communicate metadata up to the CPAN clients - print "Writing MYMETA.yml and MYMETA.json\n" + print STDOUT "Writing MYMETA.yml and MYMETA.json\n" if !$self->{NO_MYMETA} and $self->write_mymeta( $self->mymeta ); # save memory @@ -1840,7 +1836,11 @@ currently used by MakeMaker but may be handy in Makefile.PLs. =item CCFLAGS String that will be included in the compiler call command line between -the arguments INC and OPTIMIZE. +the arguments INC and OPTIMIZE. Note that setting this will overwrite its +default value (C<$Config::Config{ccflags}>); to preserve that, include +the default value directly, e.g.: + + CCFLAGS => "$Config::Config{ccflags} ..." =item CONFIG @@ -1850,6 +1850,7 @@ ar cc cccdlflags ccdlflags +cpprun dlext dlsrc ld @@ -2675,10 +2676,9 @@ instead. See above, or the L entry. =item POLLUTE -Release 5.005 grandfathered old global symbol names by providing preprocessor -macros for extension source compatibility. As of release 5.6, these -preprocessor definitions are not available by default. The POLLUTE flag -specifies that the old names should still be defined: +Prior to 5.6 various interpreter variables were available without a C +prefix, eg. C was available as C. As of release 5.6, these +are only defined if the POLLUTE flag is enabled: perl Makefile.PL POLLUTE=1 @@ -2976,7 +2976,7 @@ that purpose. =item XSPROTOARG -May be set to C<-protoypes>, C<-noprototypes> or the empty string. The +May be set to C<-prototypes>, C<-noprototypes> or the empty string. The empty string is equivalent to the xsubpp default, or C<-noprototypes>. See the xsubpp documentation for details. MakeMaker defaults to the empty string. diff --git a/gnu/usr.bin/perl/cpan/ExtUtils-MakeMaker/lib/ExtUtils/MakeMaker/Config.pm b/gnu/usr.bin/perl/cpan/ExtUtils-MakeMaker/lib/ExtUtils/MakeMaker/Config.pm index 5c93f0afdfb..7b2498b6e81 100644 --- a/gnu/usr.bin/perl/cpan/ExtUtils-MakeMaker/lib/ExtUtils/MakeMaker/Config.pm +++ b/gnu/usr.bin/perl/cpan/ExtUtils-MakeMaker/lib/ExtUtils/MakeMaker/Config.pm @@ -1,8 +1,9 @@ package ExtUtils::MakeMaker::Config; use strict; +use warnings; -our $VERSION = '7.44'; +our $VERSION = '7.64'; $VERSION =~ tr/_//d; use Config (); diff --git a/gnu/usr.bin/perl/cpan/ExtUtils-MakeMaker/lib/ExtUtils/MakeMaker/FAQ.pod b/gnu/usr.bin/perl/cpan/ExtUtils-MakeMaker/lib/ExtUtils/MakeMaker/FAQ.pod index a82c53b00c0..1184841ecb2 100644 --- a/gnu/usr.bin/perl/cpan/ExtUtils-MakeMaker/lib/ExtUtils/MakeMaker/FAQ.pod +++ b/gnu/usr.bin/perl/cpan/ExtUtils-MakeMaker/lib/ExtUtils/MakeMaker/FAQ.pod @@ -1,6 +1,6 @@ package ExtUtils::MakeMaker::FAQ; -our $VERSION = '7.44'; +our $VERSION = '7.64'; $VERSION =~ tr/_//d; 1; diff --git a/gnu/usr.bin/perl/cpan/ExtUtils-MakeMaker/lib/ExtUtils/MakeMaker/Locale.pm b/gnu/usr.bin/perl/cpan/ExtUtils-MakeMaker/lib/ExtUtils/MakeMaker/Locale.pm index 8931826b590..e4625e33303 100644 --- a/gnu/usr.bin/perl/cpan/ExtUtils-MakeMaker/lib/ExtUtils/MakeMaker/Locale.pm +++ b/gnu/usr.bin/perl/cpan/ExtUtils-MakeMaker/lib/ExtUtils/MakeMaker/Locale.pm @@ -1,7 +1,8 @@ package ExtUtils::MakeMaker::Locale; use strict; -our $VERSION = "7.44"; +use warnings; +our $VERSION = "7.64"; $VERSION =~ tr/_//d; use base 'Exporter'; diff --git a/gnu/usr.bin/perl/cpan/ExtUtils-MakeMaker/lib/ExtUtils/MakeMaker/Tutorial.pod b/gnu/usr.bin/perl/cpan/ExtUtils-MakeMaker/lib/ExtUtils/MakeMaker/Tutorial.pod index 6365e4be665..e4768745ace 100644 --- a/gnu/usr.bin/perl/cpan/ExtUtils-MakeMaker/lib/ExtUtils/MakeMaker/Tutorial.pod +++ b/gnu/usr.bin/perl/cpan/ExtUtils-MakeMaker/lib/ExtUtils/MakeMaker/Tutorial.pod @@ -1,6 +1,6 @@ package ExtUtils::MakeMaker::Tutorial; -our $VERSION = '7.44'; +our $VERSION = '7.64'; $VERSION =~ tr/_//d; diff --git a/gnu/usr.bin/perl/cpan/ExtUtils-MakeMaker/lib/ExtUtils/MakeMaker/version.pm b/gnu/usr.bin/perl/cpan/ExtUtils-MakeMaker/lib/ExtUtils/MakeMaker/version.pm index c94c855c54b..726ac76be19 100644 --- a/gnu/usr.bin/perl/cpan/ExtUtils-MakeMaker/lib/ExtUtils/MakeMaker/version.pm +++ b/gnu/usr.bin/perl/cpan/ExtUtils-MakeMaker/lib/ExtUtils/MakeMaker/version.pm @@ -12,10 +12,11 @@ package ExtUtils::MakeMaker::version; use 5.006001; use strict; +use warnings; use vars qw(@ISA $VERSION $CLASS $STRICT $LAX *declare *qv); -$VERSION = '7.44'; +$VERSION = '7.64'; $VERSION =~ tr/_//d; $CLASS = 'version'; @@ -25,7 +26,7 @@ $CLASS = 'version'; if ( $@ ) { # don't have any version.pm installed eval "use ExtUtils::MakeMaker::version::vpp"; die "$@" if ( $@ ); - local $^W; + no warnings; delete $INC{'version.pm'}; $INC{'version.pm'} = $INC{'ExtUtils/MakeMaker/version.pm'}; push @version::ISA, "ExtUtils::MakeMaker::version::vpp"; diff --git a/gnu/usr.bin/perl/cpan/ExtUtils-MakeMaker/lib/ExtUtils/MakeMaker/version/regex.pm b/gnu/usr.bin/perl/cpan/ExtUtils-MakeMaker/lib/ExtUtils/MakeMaker/version/regex.pm index 7cfed5ba88a..2f02cc93b62 100644 --- a/gnu/usr.bin/perl/cpan/ExtUtils-MakeMaker/lib/ExtUtils/MakeMaker/version/regex.pm +++ b/gnu/usr.bin/perl/cpan/ExtUtils-MakeMaker/lib/ExtUtils/MakeMaker/version/regex.pm @@ -7,10 +7,11 @@ package ExtUtils::MakeMaker::version::regex; use strict; +use warnings; use vars qw($VERSION $CLASS $STRICT $LAX); -$VERSION = '7.44'; +$VERSION = '7.64'; $VERSION =~ tr/_//d; #--------------------------------------------------------------------------# diff --git a/gnu/usr.bin/perl/cpan/ExtUtils-MakeMaker/lib/ExtUtils/Mkbootstrap.pm b/gnu/usr.bin/perl/cpan/ExtUtils-MakeMaker/lib/ExtUtils/Mkbootstrap.pm index a11a950c1b6..51b1add1635 100644 --- a/gnu/usr.bin/perl/cpan/ExtUtils-MakeMaker/lib/ExtUtils/Mkbootstrap.pm +++ b/gnu/usr.bin/perl/cpan/ExtUtils-MakeMaker/lib/ExtUtils/Mkbootstrap.pm @@ -1,9 +1,9 @@ package ExtUtils::Mkbootstrap; -# There's just too much Dynaloader incest here to turn on strict vars. -use strict 'refs'; +use strict; +use warnings; -our $VERSION = '7.44'; +our $VERSION = '7.64'; $VERSION =~ tr/_//d; require Exporter; @@ -33,6 +33,7 @@ sub Mkbootstrap { if (-f "${baseext}_BS"){ $_ = "${baseext}_BS"; package DynaLoader; # execute code as if in DynaLoader + no strict 'vars'; local($osname, $dlsrc) = (); # avoid warnings ($osname, $dlsrc) = @Config::Config{qw(osname dlsrc)}; $bscode = ""; @@ -43,6 +44,7 @@ sub Mkbootstrap { if ($Config{'dlsrc'} =~ /^dl_dld/){ package DynaLoader; + no strict 'vars'; push(@dl_resolve_using, dl_findfile('-lc')); } diff --git a/gnu/usr.bin/perl/cpan/ExtUtils-MakeMaker/lib/ExtUtils/Mksymlists.pm b/gnu/usr.bin/perl/cpan/ExtUtils-MakeMaker/lib/ExtUtils/Mksymlists.pm index 9279b6b7852..4498c39bf4b 100644 --- a/gnu/usr.bin/perl/cpan/ExtUtils-MakeMaker/lib/ExtUtils/Mksymlists.pm +++ b/gnu/usr.bin/perl/cpan/ExtUtils-MakeMaker/lib/ExtUtils/Mksymlists.pm @@ -3,6 +3,7 @@ package ExtUtils::Mksymlists; use 5.006; use strict qw[ subs refs ]; # no strict 'vars'; # until filehandles are exempted +use warnings; use Carp; use Exporter; @@ -10,7 +11,7 @@ use Config; our @ISA = qw(Exporter); our @EXPORT = qw(&Mksymlists); -our $VERSION = '7.44'; +our $VERSION = '7.64'; $VERSION =~ tr/_//d; sub Mksymlists { diff --git a/gnu/usr.bin/perl/cpan/ExtUtils-MakeMaker/lib/ExtUtils/testlib.pm b/gnu/usr.bin/perl/cpan/ExtUtils-MakeMaker/lib/ExtUtils/testlib.pm index 1ccaf776a03..de24aa3fd0e 100644 --- a/gnu/usr.bin/perl/cpan/ExtUtils-MakeMaker/lib/ExtUtils/testlib.pm +++ b/gnu/usr.bin/perl/cpan/ExtUtils-MakeMaker/lib/ExtUtils/testlib.pm @@ -3,7 +3,7 @@ package ExtUtils::testlib; use strict; use warnings; -our $VERSION = '7.44'; +our $VERSION = '7.64'; $VERSION =~ tr/_//d; use Cwd; diff --git a/gnu/usr.bin/perl/cpan/ExtUtils-MakeMaker/t/FIRST_MAKEFILE.t b/gnu/usr.bin/perl/cpan/ExtUtils-MakeMaker/t/FIRST_MAKEFILE.t index cb8d0dbc3fc..ba645b29049 100755 --- a/gnu/usr.bin/perl/cpan/ExtUtils-MakeMaker/t/FIRST_MAKEFILE.t +++ b/gnu/usr.bin/perl/cpan/ExtUtils-MakeMaker/t/FIRST_MAKEFILE.t @@ -5,6 +5,7 @@ BEGIN { } use strict; +use warnings; use Test::More tests => 7; use MakeMaker::Test::Setup::BFD; diff --git a/gnu/usr.bin/perl/cpan/ExtUtils-MakeMaker/t/INSTALL_BASE.t b/gnu/usr.bin/perl/cpan/ExtUtils-MakeMaker/t/INSTALL_BASE.t index 69398117b7e..31d645be5e3 100755 --- a/gnu/usr.bin/perl/cpan/ExtUtils-MakeMaker/t/INSTALL_BASE.t +++ b/gnu/usr.bin/perl/cpan/ExtUtils-MakeMaker/t/INSTALL_BASE.t @@ -7,6 +7,7 @@ BEGIN { } use strict; +use warnings; use File::Path; use Config; my @INSTDIRS = ('../dummy-install', '../dummy install'); diff --git a/gnu/usr.bin/perl/cpan/ExtUtils-MakeMaker/t/MM_Unix.t b/gnu/usr.bin/perl/cpan/ExtUtils-MakeMaker/t/MM_Unix.t index 62b291c770e..b3175f4f528 100755 --- a/gnu/usr.bin/perl/cpan/ExtUtils-MakeMaker/t/MM_Unix.t +++ b/gnu/usr.bin/perl/cpan/ExtUtils-MakeMaker/t/MM_Unix.t @@ -19,6 +19,7 @@ BEGIN { BEGIN { use_ok( 'ExtUtils::MM_Unix' ); } use strict; +use warnings; use File::Spec; my $class = 'ExtUtils::MM_Unix'; diff --git a/gnu/usr.bin/perl/cpan/ExtUtils-MakeMaker/t/basic.t b/gnu/usr.bin/perl/cpan/ExtUtils-MakeMaker/t/basic.t index 7c87c752128..a93700693a9 100755 --- a/gnu/usr.bin/perl/cpan/ExtUtils-MakeMaker/t/basic.t +++ b/gnu/usr.bin/perl/cpan/ExtUtils-MakeMaker/t/basic.t @@ -13,6 +13,7 @@ BEGIN { } use strict; +use warnings; use Config; use ExtUtils::MakeMaker; use utf8; @@ -132,8 +133,11 @@ like( $ppd_html, qr{^\s*}m, ' ' ); unlike( $ppd_html, qr{^\s*}m, 'no for build_require' ); my $archname = $Config{archname}; -if( "$]" >= 5.008 ) { - # XXX This is a copy of the internal logic, so it's not a great test +# XXX This is a copy of the internal logic, so it's not a great test +if( "$]" >= 5.010) { + $archname .= "-$^V->{version}->[0].$^V->{version}->[1]"; +} +elsif( "$]" >= 5.008 ) { $archname .= "-$Config{PERL_REVISION}.$Config{PERL_VERSION}"; } like( $ppd_html, qr{^\s*}m, diff --git a/gnu/usr.bin/perl/cpan/ExtUtils-MakeMaker/t/build_man.t b/gnu/usr.bin/perl/cpan/ExtUtils-MakeMaker/t/build_man.t index d2ab550fb03..59a80ebf346 100755 --- a/gnu/usr.bin/perl/cpan/ExtUtils-MakeMaker/t/build_man.t +++ b/gnu/usr.bin/perl/cpan/ExtUtils-MakeMaker/t/build_man.t @@ -7,6 +7,7 @@ BEGIN { } use strict; +use warnings; use Test::More tests => 50; use File::Spec; diff --git a/gnu/usr.bin/perl/cpan/ExtUtils-MakeMaker/t/cd.t b/gnu/usr.bin/perl/cpan/ExtUtils-MakeMaker/t/cd.t index 57da1dfe091..6d39163a127 100755 --- a/gnu/usr.bin/perl/cpan/ExtUtils-MakeMaker/t/cd.t +++ b/gnu/usr.bin/perl/cpan/ExtUtils-MakeMaker/t/cd.t @@ -4,6 +4,8 @@ BEGIN { unshift @INC, 't/lib/'; } +use strict; +use warnings; use File::Temp qw[tempdir]; my $tmpdir = tempdir( DIR => 't', CLEANUP => 1 ); use Cwd; my $cwd = getcwd; END { chdir $cwd } # so File::Temp can cleanup @@ -21,7 +23,7 @@ my @cd_args = ($dir, "command1", "command2"); { package Test::MM_Win32; use ExtUtils::MM_Win32; - @ISA = qw(ExtUtils::MM_Win32); + our @ISA = qw(ExtUtils::MM_Win32); my $mm = bless {}, 'Test::MM_Win32'; diff --git a/gnu/usr.bin/perl/cpan/ExtUtils-MakeMaker/t/echo.t b/gnu/usr.bin/perl/cpan/ExtUtils-MakeMaker/t/echo.t index 872c2b1c211..087e391212e 100644 --- a/gnu/usr.bin/perl/cpan/ExtUtils-MakeMaker/t/echo.t +++ b/gnu/usr.bin/perl/cpan/ExtUtils-MakeMaker/t/echo.t @@ -25,7 +25,7 @@ use Test::More my $cwd = abs_path; my $perl = which_perl; my $make = make_run(); -my $mm = bless { NAME => "Foo", MAKE => $Config{make}, PARENT_NAME => '' }, "MM"; +my $mm = bless { NAME => "Foo", MAKE => $Config{make}, PARENT_NAME => '', PERL_SRC => '' }, "MM"; $mm->init_INST; # *PERLRUN needs INIT_* $mm->init_PERL; # generic ECHO needs ABSPERLRUN $mm->init_tools; # need ECHO diff --git a/gnu/usr.bin/perl/cpan/ExtUtils-MakeMaker/t/eu_command.t b/gnu/usr.bin/perl/cpan/ExtUtils-MakeMaker/t/eu_command.t index 32a6f59dcab..0233c2f3f81 100644 --- a/gnu/usr.bin/perl/cpan/ExtUtils-MakeMaker/t/eu_command.t +++ b/gnu/usr.bin/perl/cpan/ExtUtils-MakeMaker/t/eu_command.t @@ -1,5 +1,10 @@ #!/usr/bin/perl -w +use strict; +use warnings; + +my $Testfile; + BEGIN { unshift @INC, 't/lib/'; } diff --git a/gnu/usr.bin/perl/cpan/ExtUtils-MakeMaker/t/lib/MakeMaker/Test/NoXS.pm b/gnu/usr.bin/perl/cpan/ExtUtils-MakeMaker/t/lib/MakeMaker/Test/NoXS.pm index df36e82c217..29e4856f8bf 100644 --- a/gnu/usr.bin/perl/cpan/ExtUtils-MakeMaker/t/lib/MakeMaker/Test/NoXS.pm +++ b/gnu/usr.bin/perl/cpan/ExtUtils-MakeMaker/t/lib/MakeMaker/Test/NoXS.pm @@ -2,6 +2,8 @@ package MakeMaker::Test::NoXS; # Disable all XS loading. +use strict; +use warnings; use Carp; require DynaLoader; @@ -11,12 +13,18 @@ require XSLoader; delete $DynaLoader::{boot_DynaLoader}; if ($^O eq 'MSWin32') { + # Load Win32. Then clear the stash of all other entries but GetCwd and SetChildShowWindow + # SetChildShowWindow and GetCwd are provided by perl core in modern perls, so we + # can use them in miniperl. on older perls, we can load them from Win32 so the + # test can proceed as normal. + require Win32; - my $GetCwd = *{'Win32::GetCwd'}{CODE}; - my $SetChildShowWindow = *{'Win32::SetChildShowWindow'}{CODE}; - %{*main::Win32::{HASH}} = (); - *{'Win32::GetCwd'} = $GetCwd; - *{'Win32::SetChildShowWindow'} = $SetChildShowWindow; + + foreach my $slot (keys %Win32::) { + next if $slot eq 'GetCwd'; + next if $slot eq 'SetChildShowWindow'; + delete $Win32::{$slot}; + } } # This isn't 100%. Things like Win32.pm will crap out rather than diff --git a/gnu/usr.bin/perl/cpan/ExtUtils-MakeMaker/t/lib/MakeMaker/Test/Setup/XS.pm b/gnu/usr.bin/perl/cpan/ExtUtils-MakeMaker/t/lib/MakeMaker/Test/Setup/XS.pm index 3d1f57e6bd6..eb0a21c30f5 100644 --- a/gnu/usr.bin/perl/cpan/ExtUtils-MakeMaker/t/lib/MakeMaker/Test/Setup/XS.pm +++ b/gnu/usr.bin/perl/cpan/ExtUtils-MakeMaker/t/lib/MakeMaker/Test/Setup/XS.pm @@ -5,6 +5,7 @@ require Exporter; @EXPORT = qw(run_tests list_dynamic list_static); use strict; +use warnings; use File::Path; use MakeMaker::Test::Utils; use Config; @@ -134,7 +135,7 @@ my %Files = ( 'Makefile.PL' => sprintf($MAKEFILEPL, 'Test', 'lib/XS/Test.pm', qq{'$typemap'}, ''), ); -my %label2files = (basic => \%Files); +my %label2files = (basic => \%Files, basic2 => \%Files); # basic2 so no clash $label2files{bscode} = +{ %{ $label2files{'basic'} }, # make copy @@ -381,7 +382,7 @@ sub setup_xs { sub list_static { ( - ( !$Config{usedl} ? [ 'basic', '', '' ] : ()), # still needs testing on static perl + ( !$Config{usedl} ? [ 'basic2', '', '' ] : ()), # still needs testing on static perl [ 'static', '', '' ], [ 'basic', ' static', '_static' ], [ 'multi', ' static', '_static' ], @@ -400,11 +401,17 @@ sub list_dynamic { $^O !~ m!^(VMS|aix)$! ? ([ 'subdirscomplex', '', '' ]) : (), ) : (), # DynaLoader different [ 'subdirs', '', '' ], - [ 'subdirsstatic', ' LINKTYPE=dynamic', ' LINKTYPE=dynamic' ], - [ 'subdirsstatic', ' dynamic', '_dynamic' ], + # https://github.com/Perl/perl5/issues/17601 + # https://rt.cpan.org/Ticket/Display.html?id=115321 + $^O ne 'MSWin32' ? ( + [ 'subdirsstatic', ' LINKTYPE=dynamic', ' LINKTYPE=dynamic' ], + [ 'subdirsstatic', ' dynamic', '_dynamic' ], + ) : (), [ 'multi', '', '' ], - [ 'staticmulti', ' LINKTYPE=dynamic', ' LINKTYPE=dynamic' ], - [ 'staticmulti', ' dynamic', '_dynamic' ], + $^O ne 'MSWin32' ? ( + [ 'staticmulti', ' LINKTYPE=dynamic', ' LINKTYPE=dynamic' ], + [ 'staticmulti', ' dynamic', '_dynamic' ], + ) : (), [ 'xsbuild', '', '' ], [ 'subdirsskip', '', '' ], ); diff --git a/gnu/usr.bin/perl/cpan/ExtUtils-MakeMaker/t/lib/MakeMaker/Test/Utils.pm b/gnu/usr.bin/perl/cpan/ExtUtils-MakeMaker/t/lib/MakeMaker/Test/Utils.pm index 76c1ad5010d..e86923139e6 100644 --- a/gnu/usr.bin/perl/cpan/ExtUtils-MakeMaker/t/lib/MakeMaker/Test/Utils.pm +++ b/gnu/usr.bin/perl/cpan/ExtUtils-MakeMaker/t/lib/MakeMaker/Test/Utils.pm @@ -2,6 +2,7 @@ package MakeMaker::Test::Utils; use File::Spec; use strict; +use warnings; use Config; use Cwd qw(getcwd); use Carp qw(croak); @@ -358,12 +359,18 @@ Returns true if there is a compiler available for XS builds. =cut sub have_compiler { + return 1 if $ENV{PERL_CORE}; + my $have_compiler = 0; - eval { - require ExtUtils::CBuilder; - my $cb = ExtUtils::CBuilder->new(quiet=>1); - $have_compiler = $cb->have_compiler; - }; + + in_dir(sub { + eval { + require ExtUtils::CBuilder; + my $cb = ExtUtils::CBuilder->new(quiet=>1); + $have_compiler = $cb->have_compiler; + }; + }); + return $have_compiler; } diff --git a/gnu/usr.bin/perl/cpan/ExtUtils-MakeMaker/t/min_perl_version.t b/gnu/usr.bin/perl/cpan/ExtUtils-MakeMaker/t/min_perl_version.t index 8c8f801d0eb..cb138fcb004 100755 --- a/gnu/usr.bin/perl/cpan/ExtUtils-MakeMaker/t/min_perl_version.t +++ b/gnu/usr.bin/perl/cpan/ExtUtils-MakeMaker/t/min_perl_version.t @@ -63,6 +63,7 @@ chdir 't'; perl_lib(); +rmtree($DIRNAME); hash2files($DIRNAME, \%FILES); END { ok( chdir(File::Spec->updir), 'leaving dir' ); @@ -132,7 +133,7 @@ note "Argument verification"; { }; ok( '' ne $warnings, 'MIN_PERL_VERSION=999999 triggers a warning' ); is( $warnings, - "Warning: Perl version 999999 or higher required. We run $].\n", + "Warning: Perl version 999999.000 or higher required. We run $].\n", ' with expected message text' ); is( $@, '', ' and without a hard failure' ); @@ -146,8 +147,7 @@ note "Argument verification"; { }; is( $warnings, '', 'MIN_PERL_VERSION=999999 and PREREQ_FATAL: no warning' ); is( $@, <<"END", ' correct exception' ); -MakeMaker FATAL: perl version too low for this distribution. -Required is 999999. We run $]. +MakeMaker FATAL: Perl version 999999.000 or higher required. We run $]. END $warnings = ''; @@ -158,7 +158,7 @@ END ); }; is( $@, <<'END', 'Invalid MIN_PERL_VERSION is fatal' ); -Warning: MIN_PERL_VERSION is not in a recognized format. +MakeMaker FATAL: MIN_PERL_VERSION (foobar) is not in a recognized format. Recommended is a quoted numerical value like '5.005' or '5.008001'. END diff --git a/gnu/usr.bin/perl/cpan/ExtUtils-MakeMaker/t/miniperl.t b/gnu/usr.bin/perl/cpan/ExtUtils-MakeMaker/t/miniperl.t index 20ff3478b16..0f6df71ab82 100755 --- a/gnu/usr.bin/perl/cpan/ExtUtils-MakeMaker/t/miniperl.t +++ b/gnu/usr.bin/perl/cpan/ExtUtils-MakeMaker/t/miniperl.t @@ -4,6 +4,7 @@ # This mostly means no XS modules. use strict; +use warnings; use lib 't/lib'; use Test::More; diff --git a/gnu/usr.bin/perl/cpan/ExtUtils-MakeMaker/t/oneliner.t b/gnu/usr.bin/perl/cpan/ExtUtils-MakeMaker/t/oneliner.t index e7c2621f2d1..daeaea96194 100755 --- a/gnu/usr.bin/perl/cpan/ExtUtils-MakeMaker/t/oneliner.t +++ b/gnu/usr.bin/perl/cpan/ExtUtils-MakeMaker/t/oneliner.t @@ -1,5 +1,8 @@ #!/usr/bin/perl -w +use strict; +use warnings; + BEGIN { unshift @INC, 't/lib'; } diff --git a/gnu/usr.bin/perl/cpan/ExtUtils-MakeMaker/t/parse_version.t b/gnu/usr.bin/perl/cpan/ExtUtils-MakeMaker/t/parse_version.t index dc9919a5515..ecba13d8a26 100755 --- a/gnu/usr.bin/perl/cpan/ExtUtils-MakeMaker/t/parse_version.t +++ b/gnu/usr.bin/perl/cpan/ExtUtils-MakeMaker/t/parse_version.t @@ -1,5 +1,8 @@ #!/usr/bin/perl -w +use strict; +use warnings; + BEGIN { unshift @INC, 't/lib'; } @@ -19,13 +22,13 @@ my %versions = (q[$VERSION = '1.00'] => '1.00', q[*FOO::VERSION = \'1.11';] => '1.11', '$VERSION = 0.02' => 0.02, '$VERSION = 0.0' => 0.0, - '$VERSION = -1.0' => -1.0, + '$VERSION = -1.0' => 'undef', '$VERSION = undef' => 'undef', '$wibble = 1.0' => undef, q[my $VERSION = '1.01'] => 'undef', q[local $VERSION = '1.02'] => 'undef', q[local $FOO::VERSION = '1.30'] => 'undef', - q[if( $Foo::VERSION >= 3.00 ) {]=> 'undef', + q[if( $Foo::VERSION >= 3.00 ) {]=> undef, q[our $VERSION = '1.23';] => '1.23', q[$CGI::VERSION='3.63'] => '3.63', q[$VERSION = "1.627"; # ==> ALSO update the version in the pod text below!] => '1.627', @@ -44,7 +47,6 @@ my %versions = (q[$VERSION = '1.00'] => '1.00', '$VERSION = substr(q$Revision: 2.8 $, 10) + 2 . "";' => '4.8', q[our $VERSION = do { my @r = ( q$Revision: 2.7 $ =~ /\d+/g ); sprintf "%d." . "%02d" x $#r, @r };] => '2.07', # Fucking seriously? 'elsif ( $Something::VERSION >= 1.99 )' => undef, - ); if( $Has_Version ) { @@ -60,11 +62,9 @@ if( "$]" >= 5.011001 ) { $versions{'package Foo::Bar v1.2.3;' } = 'v1.2.3'; $versions{' package Foo::Bar 1.23 ;' } = '1.23'; $versions{"package Foo'Bar 1.23;" } = '1.23'; - $versions{"package Foo::Bar 1.2.3;" } = '1.2.3'; $versions{'package Foo 1.230;' } = '1.230'; - $versions{'package Foo 1.23_01;' } = '1.23_01'; - $versions{'package Foo v1.23_01;' } = 'v1.23_01'; - $versions{q["package Foo 1.23"]} = 'undef'; + $versions{q["package Foo 1.23"]} = undef; + $versions{q[our $VERSION = "1.00 / the fucking fuck";]} = 'undef'; $versions{<<'END'} = '1.23'; package Foo 1.23; our $VERSION = 2.34; @@ -88,10 +88,7 @@ if( "$]" >= 5.014 ) { $versions{'package Foo::Bar v1.2.3 { }' } = 'v1.2.3'; $versions{' package Foo::Bar 1.23 { }' } = '1.23'; $versions{"package Foo'Bar 1.23 { }" } = '1.23'; - $versions{"package Foo::Bar 1.2.3 { }" } = '1.2.3'; $versions{'package Foo 1.230 { }' } = '1.230'; - $versions{'package Foo 1.23_01 { }' } = '1.23_01'; - $versions{'package Foo v1.23_01 { }' } = 'v1.23_01'; $versions{<<'END'} = '1.23'; package Foo 1.23 { our $VERSION = 2.34; diff --git a/gnu/usr.bin/perl/cpan/ExtUtils-MakeMaker/t/pm_to_blib.t b/gnu/usr.bin/perl/cpan/ExtUtils-MakeMaker/t/pm_to_blib.t index ebf5f943b3d..e00c5de2de2 100755 --- a/gnu/usr.bin/perl/cpan/ExtUtils-MakeMaker/t/pm_to_blib.t +++ b/gnu/usr.bin/perl/cpan/ExtUtils-MakeMaker/t/pm_to_blib.t @@ -3,6 +3,7 @@ # Ensure pm_to_blib runs at the right times. use strict; +use warnings; use lib 't/lib'; use File::Temp qw[tempdir]; diff --git a/gnu/usr.bin/perl/cpan/ExtUtils-MakeMaker/t/postamble.t b/gnu/usr.bin/perl/cpan/ExtUtils-MakeMaker/t/postamble.t index a20df132d5d..eb58b0f3cc8 100755 --- a/gnu/usr.bin/perl/cpan/ExtUtils-MakeMaker/t/postamble.t +++ b/gnu/usr.bin/perl/cpan/ExtUtils-MakeMaker/t/postamble.t @@ -7,6 +7,7 @@ BEGIN { } use strict; +use warnings; use Config; use Test::More tests => 8; use MakeMaker::Test::Utils; diff --git a/gnu/usr.bin/perl/cpan/ExtUtils-MakeMaker/t/prereq.t b/gnu/usr.bin/perl/cpan/ExtUtils-MakeMaker/t/prereq.t index a01ff2bbae8..9f81a9802c4 100755 --- a/gnu/usr.bin/perl/cpan/ExtUtils-MakeMaker/t/prereq.t +++ b/gnu/usr.bin/perl/cpan/ExtUtils-MakeMaker/t/prereq.t @@ -8,6 +8,7 @@ BEGIN { } use strict; +use warnings; use Config; use Test::More tests => 21; use File::Temp qw[tempdir]; @@ -132,10 +133,14 @@ ok( chdir 'Big-Dummy', "chdir'd to Big-Dummy" ) || "strict" => 99999, } ); - is $warnings, - "Warning: prerequisite I::Do::Not::Exist 0 not found.\n". - sprintf("Warning: prerequisite strict 99999 not found. We have %s.\n", - $strict::VERSION), '2 bad prereq warnings'; + + my $strict_warn + = sprintf("Warning: prerequisite strict 99999 not found. We have %s.\n", + $strict::VERSION); + # Done this way because EBCDIC sorts in a different order + ok( $warnings =~ s/Warning: prerequisite I::Do::Not::Exist 0 not found\.\n// + && $warnings =~ s/\Q$strict_warn// + && $warnings eq "", '2 bad prereq warnings'); $warnings = ''; eval { diff --git a/gnu/usr.bin/perl/cpan/ExtUtils-MakeMaker/t/several_authors.t b/gnu/usr.bin/perl/cpan/ExtUtils-MakeMaker/t/several_authors.t index f1b0f1ebeba..0def030d120 100644 --- a/gnu/usr.bin/perl/cpan/ExtUtils-MakeMaker/t/several_authors.t +++ b/gnu/usr.bin/perl/cpan/ExtUtils-MakeMaker/t/several_authors.t @@ -8,7 +8,7 @@ BEGIN { } use strict; - +use warnings; use TieOut; use MakeMaker::Test::Utils; use Config; diff --git a/gnu/usr.bin/perl/cpan/ExtUtils-MakeMaker/t/testrules.yml b/gnu/usr.bin/perl/cpan/ExtUtils-MakeMaker/t/testrules.yml deleted file mode 100644 index 97fad8cf199..00000000000 --- a/gnu/usr.bin/perl/cpan/ExtUtils-MakeMaker/t/testrules.yml +++ /dev/null @@ -1,11 +0,0 @@ ---- -# TAP::Harness test rules -# "t\02-xsdynamic.t" (and possibly "t\03-xsstatic.t") should *not* be run in parallel -# ... allowing overlap of these tests causes race conditions which lead to intermittent failures -seq: - - seq: - # serialize all tests in files matching "t/0*.t" - - t{\\,/}0*.t - - par: - # run all other tests in parallel - - ** diff --git a/gnu/usr.bin/perl/cpan/ExtUtils-MakeMaker/t/unicode.t b/gnu/usr.bin/perl/cpan/ExtUtils-MakeMaker/t/unicode.t index 14a0c8501b0..f9b75329d2b 100644 --- a/gnu/usr.bin/perl/cpan/ExtUtils-MakeMaker/t/unicode.t +++ b/gnu/usr.bin/perl/cpan/ExtUtils-MakeMaker/t/unicode.t @@ -6,6 +6,7 @@ BEGIN { chdir 't'; use strict; +use warnings; use ExtUtils::MM; use MakeMaker::Test::Utils qw(makefile_name make make_run run hash2files); use Test::More; diff --git a/gnu/usr.bin/perl/cpan/ExtUtils-MakeMaker/t/vstrings.t b/gnu/usr.bin/perl/cpan/ExtUtils-MakeMaker/t/vstrings.t index 63ef8e292bd..9fc17c650e6 100644 --- a/gnu/usr.bin/perl/cpan/ExtUtils-MakeMaker/t/vstrings.t +++ b/gnu/usr.bin/perl/cpan/ExtUtils-MakeMaker/t/vstrings.t @@ -93,7 +93,7 @@ sub run_test { local $_; SKIP: { skip "No vstring test <5.8", 2 - if "$]" < 5.008 && $pkg eq 'BareV2String' && $descrip =~ m!^2-part!; + if "$]" <= 5.008 && $pkg eq 'BareV2String' && $descrip =~ m!^2-part!; my $warnings; eval { $warnings = capture_make("Fake::$pkg" => $version); }; is($@, '', "$descrip not fatal") or skip "$descrip WM failed", 1; diff --git a/gnu/usr.bin/perl/cpan/ExtUtils-MakeMaker/t/writemakefile_args.t b/gnu/usr.bin/perl/cpan/ExtUtils-MakeMaker/t/writemakefile_args.t index 460a8a2a08b..7fa672719a4 100755 --- a/gnu/usr.bin/perl/cpan/ExtUtils-MakeMaker/t/writemakefile_args.t +++ b/gnu/usr.bin/perl/cpan/ExtUtils-MakeMaker/t/writemakefile_args.t @@ -8,6 +8,7 @@ BEGIN { } use strict; +use warnings; use Config; use Test::More tests => 43; diff --git a/gnu/usr.bin/perl/cpan/ExtUtils-Manifest/lib/ExtUtils/MANIFEST.SKIP b/gnu/usr.bin/perl/cpan/ExtUtils-Manifest/lib/ExtUtils/MANIFEST.SKIP index 72286fdf199..9d1430745a6 100644 --- a/gnu/usr.bin/perl/cpan/ExtUtils-Manifest/lib/ExtUtils/MANIFEST.SKIP +++ b/gnu/usr.bin/perl/cpan/ExtUtils-Manifest/lib/ExtUtils/MANIFEST.SKIP @@ -5,6 +5,7 @@ ,v$ \B\.svn\b \B\.git\b +^\.github\b \B\.gitignore\b \b_darcs\b \B\.cvsignore$ @@ -51,6 +52,8 @@ \B\.DS_Store # Mac OSX SMB mount metadata files \B\._ +# Placeholder files created when iCloud will "optimize Mac storage" +\.i[cC]loud$ # Avoid Devel::Cover and Devel::CoverX::Covered files. \bcover_db\b diff --git a/gnu/usr.bin/perl/cpan/ExtUtils-Manifest/lib/ExtUtils/Manifest.pm b/gnu/usr.bin/perl/cpan/ExtUtils-Manifest/lib/ExtUtils/Manifest.pm index 201fd36cb9e..c0a7b06764a 100644 --- a/gnu/usr.bin/perl/cpan/ExtUtils-Manifest/lib/ExtUtils/Manifest.pm +++ b/gnu/usr.bin/perl/cpan/ExtUtils-Manifest/lib/ExtUtils/Manifest.pm @@ -1,4 +1,4 @@ -package ExtUtils::Manifest; # git description: 1.71-18-g17b7919 +package ExtUtils::Manifest; # git description: 1.72-7-g54209ce require Exporter; use Config; @@ -10,7 +10,7 @@ use Carp; use strict; use warnings; -our $VERSION = '1.72'; +our $VERSION = '1.73'; our @ISA = ('Exporter'); our @EXPORT_OK = qw(mkmanifest manicheck filecheck fullcheck skipcheck @@ -56,7 +56,7 @@ our $Verbose = defined $ENV{PERL_MM_MANIFEST_VERBOSE} ? our $Quiet = 0; our $MANIFEST = 'MANIFEST'; -our $DEFAULT_MSKIP = File::Spec->catfile( dirname(__FILE__), "$MANIFEST.SKIP" ); +our $DEFAULT_MSKIP = File::Spec->rel2abs(File::Spec->catfile( dirname(__FILE__), "$MANIFEST.SKIP" )); =head1 NAME @@ -65,7 +65,7 @@ ExtUtils::Manifest - Utilities to write and check a MANIFEST file =head1 VERSION -version 1.72 +version 1.73 =head1 SYNOPSIS diff --git a/gnu/usr.bin/perl/cpan/File-Fetch/lib/File/Fetch.pm b/gnu/usr.bin/perl/cpan/File-Fetch/lib/File/Fetch.pm index 90c62e96bee..157f308ade6 100644 --- a/gnu/usr.bin/perl/cpan/File-Fetch/lib/File/Fetch.pm +++ b/gnu/usr.bin/perl/cpan/File-Fetch/lib/File/Fetch.pm @@ -22,7 +22,7 @@ use vars qw[ $VERBOSE $PREFER_BIN $FROM_EMAIL $USER_AGENT $FTP_PASSIVE $TIMEOUT $DEBUG $WARN $FORCEIPV4 ]; -$VERSION = '0.56'; +$VERSION = '1.04'; $VERSION = eval $VERSION; # avoid warnings with development releases $PREFER_BIN = 0; # XXX TODO implement $FROM_EMAIL = 'File-Fetch@example.com'; @@ -52,9 +52,6 @@ local $Params::Check::VERBOSE = 1; local $Module::Load::Conditional::VERBOSE = 0; local $Module::Load::Conditional::VERBOSE = 0; -### Fix CVE-2016-1238 ### -local $Module::Load::Conditional::FORCE_SAFE_INC = 1; - ### see what OS we are on, important for file:// uris ### use constant ON_WIN => ($^O eq 'MSWin32'); use constant ON_VMS => ($^O eq 'VMS'); @@ -362,7 +359,7 @@ sub _parse_uri { $href->{scheme} = $1; ### See rfc 1738 section 3.10 - ### http://www.faqs.org/rfcs/rfc1738.html + ### https://datatracker.ietf.org/doc/html/rfc1738#section-3.10 ### And wikipedia for more on windows file:// urls ### http://en.wikipedia.org/wiki/File:// if( $href->{scheme} eq 'file' ) { @@ -576,6 +573,8 @@ sub _lwp_fetch { $use_list->{'LWP::Protocol::https'} = '0'; } + ### Fix CVE-2016-1238 ### + local $Module::Load::Conditional::FORCE_SAFE_INC = 1; unless( can_load( modules => $use_list ) ) { $METHOD_FAIL->{'lwp'} = 1; return; @@ -633,6 +632,8 @@ sub _httptiny_fetch { }; + ### Fix CVE-2016-1238 ### + local $Module::Load::Conditional::FORCE_SAFE_INC = 1; unless( can_load(modules => $use_list) ) { $METHOD_FAIL->{'httptiny'} = 1; return; @@ -672,6 +673,8 @@ sub _httplite_fetch { 'MIME::Base64' => '0', }; + ### Fix CVE-2016-1238 ### + local $Module::Load::Conditional::FORCE_SAFE_INC = 1; unless( can_load(modules => $use_list) ) { $METHOD_FAIL->{'httplite'} = 1; return; @@ -752,6 +755,8 @@ sub _iosock_fetch { 'IO::Select' => '0.0', }; + ### Fix CVE-2016-1238 ### + local $Module::Load::Conditional::FORCE_SAFE_INC = 1; unless( can_load(modules => $use_list) ) { $METHOD_FAIL->{'iosock'} = 1; return; @@ -835,6 +840,8 @@ sub _netftp_fetch { ### required modules ### my $use_list = { 'Net::FTP' => 0 }; + ### Fix CVE-2016-1238 ### + local $Module::Load::Conditional::FORCE_SAFE_INC = 1; unless( can_load( modules => $use_list ) ) { $METHOD_FAIL->{'netftp'} = 1; return; @@ -899,7 +906,7 @@ sub _wget_fetch { push(@$cmd, '--timeout=' . $TIMEOUT) if $TIMEOUT; ### run passive if specified ### - push @$cmd, '--passive-ftp' if $FTP_PASSIVE; + push @$cmd, '--passive-ftp' if $self->scheme eq 'ftp' && $FTP_PASSIVE; ### set the output document, add the uri ### push @$cmd, '--output-document', $to, $self->uri; @@ -1308,7 +1315,7 @@ sub _fetch_fetch { ### use File::Copy for fetching file:// urls ### ### -### See section 3.10 of RFC 1738 (http://www.faqs.org/rfcs/rfc1738.html) +### See section 3.10 of RFC 1738 (https://datatracker.ietf.org/doc/html/rfc1738#section-3.10) ### Also see wikipedia on file:// (http://en.wikipedia.org/wiki/File://) ### @@ -1691,7 +1698,7 @@ the C module from CPAN, and pre-encode your URI before passing it to C. You can read about the details of URIs and URI encoding here: - http://www.faqs.org/rfcs/rfc2396.html +L =head1 TODO diff --git a/gnu/usr.bin/perl/cpan/File-Path/lib/File/Path.pm b/gnu/usr.bin/perl/cpan/File-Path/lib/File/Path.pm index 22e53f8ff9e..3f7545fdbe0 100644 --- a/gnu/usr.bin/perl/cpan/File-Path/lib/File/Path.pm +++ b/gnu/usr.bin/perl/cpan/File-Path/lib/File/Path.pm @@ -18,7 +18,7 @@ BEGIN { use Exporter (); use vars qw($VERSION @ISA @EXPORT @EXPORT_OK); -$VERSION = '2.16'; +$VERSION = '2.18'; $VERSION = eval $VERSION; @ISA = qw(Exporter); @EXPORT = qw(mkpath rmtree); @@ -633,7 +633,7 @@ File::Path - Create or remove directory trees =head1 VERSION -2.16 - released August 31 2018. +2.18 - released November 4 2020. =head1 SYNOPSIS @@ -1277,7 +1277,7 @@ Contributors to File::Path, in alphabetical order by first name. =head1 COPYRIGHT This module is copyright (C) Charles Bailey, Tim Bunce, David Landgren, -James Keenan and Richard Elberger 1995-2018. All rights reserved. +James Keenan and Richard Elberger 1995-2020. All rights reserved. =head1 LICENSE diff --git a/gnu/usr.bin/perl/cpan/File-Path/t/Path.t b/gnu/usr.bin/perl/cpan/File-Path/t/Path.t index 8ea3d87c9a5..b265aeeb2d1 100755 --- a/gnu/usr.bin/perl/cpan/File-Path/t/Path.t +++ b/gnu/usr.bin/perl/cpan/File-Path/t/Path.t @@ -3,7 +3,7 @@ use strict; -use Test::More tests => 165; +use Test::More tests => 167; use Config; use Fcntl ':mode'; use lib './t'; @@ -845,7 +845,18 @@ SKIP: { my ($least_deep, $next_deepest, $deepest) = create_3_level_subdirs( qw| b5wj8CJcc7gl XTJe2C3WGLg5 VZ_y2T0XfKu3 | ); my (@created, $error); + my $warn; + local $SIG{__WARN__} = sub { $warn = shift }; @created = mkpath($deepest, { mode => 0711, uid => $>, error => \$error }); + SKIP: { + my $skip_count = 1; + skip "Warning should only appear on Windows", $skip_count + unless $^O eq 'MSWin32'; + like($warn, + qr/Option\(s\) implausible on Win32 passed to mkpath\(\) or make_path\(\)/, + 'make_path with final hashref warned due to options implausible on Win32' + ); + } is(scalar(@created), 3, "Provide valid 'uid' argument: 3 subdirectories created"); cleanup_3_level_subdirs($least_deep); @@ -897,7 +908,18 @@ SKIP: { my ($least_deep, $next_deepest, $deepest) = create_3_level_subdirs( qw| BEcigvaBNisY rd4lJ1iZRyeS OyQnDPIBxP2K | ); my (@created, $error); + my $warn; + local $SIG{__WARN__} = sub { $warn = shift }; @created = mkpath($deepest, { mode => 0711, group => $(, error => \$error }); + SKIP: { + my $skip_count = 1; + skip "Warning should only appear on Windows", $skip_count + unless $^O eq 'MSWin32'; + like($warn, + qr/Option\(s\) implausible on Win32 passed to mkpath\(\) or make_path\(\)/, + 'make_path with final hashref warned due to options implausible on Win32' + ); + } is(scalar(@created), 3, "Provide valid 'group' argument: 3 subdirectories created"); cleanup_3_level_subdirs($least_deep); diff --git a/gnu/usr.bin/perl/cpan/File-Path/t/Path_root.t b/gnu/usr.bin/perl/cpan/File-Path/t/Path_root.t index 8af39f791b8..6050c2e3397 100644 --- a/gnu/usr.bin/perl/cpan/File-Path/t/Path_root.t +++ b/gnu/usr.bin/perl/cpan/File-Path/t/Path_root.t @@ -112,7 +112,6 @@ sub max_g { my $max_gid = 0; my $max_group = undef; while ( my @g = getgrent() ) { - print Dumper @g; if ($max_gid < $g[2]) { $max_gid = $g[2]; $max_group = $g[0]; diff --git a/gnu/usr.bin/perl/cpan/Filter-Util-Call/Call.pm b/gnu/usr.bin/perl/cpan/Filter-Util-Call/Call.pm index c969c9aa718..0805ae73350 100644 --- a/gnu/usr.bin/perl/cpan/Filter-Util-Call/Call.pm +++ b/gnu/usr.bin/perl/cpan/Filter-Util-Call/Call.pm @@ -18,7 +18,7 @@ use warnings; our @ISA = qw(Exporter); our @EXPORT = qw( filter_add filter_del filter_read filter_read_exact) ; -our $VERSION = "1.59" ; +our $VERSION = "1.60" ; our $XS_VERSION = $VERSION; $VERSION = eval $VERSION; diff --git a/gnu/usr.bin/perl/cpan/Filter-Util-Call/Call.xs b/gnu/usr.bin/perl/cpan/Filter-Util-Call/Call.xs index c637108b6d7..2ac88e29fc9 100644 --- a/gnu/usr.bin/perl/cpan/Filter-Util-Call/Call.xs +++ b/gnu/usr.bin/perl/cpan/Filter-Util-Call/Call.xs @@ -3,7 +3,7 @@ * * Author : Paul Marquess * Date : 2014-12-09 02:48:44 rurban - * Version : 1.59 + * Version : 1.60 * * Copyright (c) 1995-2011 Paul Marquess. All rights reserved. * Copyright (c) 2011-2014 Reini Urban. All rights reserved. diff --git a/gnu/usr.bin/perl/cpan/Filter-Util-Call/t/call.t b/gnu/usr.bin/perl/cpan/Filter-Util-Call/t/call.t index 0be7cfa0e1f..7618a9dee7f 100755 --- a/gnu/usr.bin/perl/cpan/Filter-Util-Call/t/call.t +++ b/gnu/usr.bin/perl/cpan/Filter-Util-Call/t/call.t @@ -6,6 +6,8 @@ BEGIN { print "1..0 # Skip: Filter::Util::Call was not built\n"; exit 0; } + require Cwd; + unshift @INC, Cwd::cwd(); } } @@ -128,10 +130,10 @@ use $module ; EOM use Cwd ; -$here = getcwd ; +my $here = getcwd ; print "I am $here\n" ; print "some letters ABC\n" ; -$y = "ABCDEF" ; +my $y = "ABCDEF" ; print <>8) == 0) ; +ok(5, ($? >>8) == 0) or warn $a; ok(6, $a eq <>8) == 0) ; +ok(7, ($? >>8) == 0) or warn $a; ok(8, $a eq <>8) == 0) ; +ok(9, ($? >>8) == 0) or warn $a; ok(10, $a eq <>8) == 0) ; +ok(11, ($? >>8) == 0) or warn $a; ok(12, $a eq <>8) == 0) ; +ok(13, ($? >>8) == 0) or warn $a; ok(14, $a eq <>8) == 0) ; +ok(15, ($? >>8) == 0) or warn $a; ok(16, $a eq <>8) == 0) ; +ok(17, ($? >>8) == 0) or warn $a; ok(18, $a eq <>8) == 0) ; +ok(19, ($? >>8) == 0) or warn $a; ok(20, $a eq <>8) == 0) ; +ok(21, ($? >>8) == 0) or warn $a; ok(22, $a eq <>8) == 0) ; +ok(23, ($? >>8) == 0) or warn $a; ok(24, $a eq <; +my @a = ; print @a; __DATA__ HERE I am @@ -735,7 +737,7 @@ HERE today gone tomorrow EOM $a = `$Perl "-I." $Inc $filename $redir` ; -ok(25, ($? >>8) == 0) ; +ok(25, ($? >>8) == 0) or warn $a; ok(26, $a eq <; +my @a = ; print @a; __END__ HERE I am @@ -791,7 +793,7 @@ HERE today gone tomorrow EOM $a = `$Perl "-I." $Inc $filename $redir` ; -ok(27, ($? >>8) == 0) ; +ok(27, ($? >>8) == 0) or warn $a; ok(28, $a eq <>8) == 0); +ok(29, ($? >>8) == 0) or warn $a; chomp( $a ) if $^O eq 'VMS'; ok(30, $a eq 'ok'); $a = `$Perl "-I." $Inc $filename2`; -ok(31, ($? >>8) == 0); +ok(31, ($? >>8) == 0) or warn $a; chomp( $a ) if $^O eq 'VMS'; ok(32, $a eq 'ok'); @@ -873,7 +875,7 @@ HERE today gone tomorrow\n" ; EOM $a = `$Perl "-I." $Inc $filenamebin $redir` ; -ok(33, ($? >>8) != 0) ; +ok(33, ($? >>8) != 0) or warn $a; ok(34, $a =~ /^filter_read_exact: size parameter must be > 0 at block.pm/) ; diff --git a/gnu/usr.bin/perl/cpan/Filter-Util-Call/t/rt_54452-rebless.t b/gnu/usr.bin/perl/cpan/Filter-Util-Call/t/rt_54452-rebless.t index 93b702f87d4..074a46543d7 100644 --- a/gnu/usr.bin/perl/cpan/Filter-Util-Call/t/rt_54452-rebless.t +++ b/gnu/usr.bin/perl/cpan/Filter-Util-Call/t/rt_54452-rebless.t @@ -6,6 +6,13 @@ if ($] < 5.004_55) { exit 0; } +BEGIN { + if ($ENV{PERL_CORE}) { + require Cwd; + unshift @INC, Cwd::cwd(); + } +} + use strict; use warnings; diff --git a/gnu/usr.bin/perl/cpan/Getopt-Long/lib/Getopt/Long.pm b/gnu/usr.bin/perl/cpan/Getopt-Long/lib/Getopt/Long.pm index 70ac4159565..8263e217131 100644 --- a/gnu/usr.bin/perl/cpan/Getopt-Long/lib/Getopt/Long.pm +++ b/gnu/usr.bin/perl/cpan/Getopt-Long/lib/Getopt/Long.pm @@ -4,8 +4,8 @@ # Author : Johan Vromans # Created On : Tue Sep 11 15:00:12 1990 # Last Modified By: Johan Vromans -# Last Modified On: Mon Aug 12 17:05:46 2019 -# Update Count : 1728 +# Last Modified On: Tue Aug 18 14:48:05 2020 +# Update Count : 1739 # Status : Released ################ Module Preamble ################ @@ -18,10 +18,10 @@ use warnings; package Getopt::Long; use vars qw($VERSION); -$VERSION = 2.51; +$VERSION = 2.52; # For testing versions only. use vars qw($VERSION_STRING); -$VERSION_STRING = "2.51"; +$VERSION_STRING = "2.52"; use Exporter; use vars qw(@ISA @EXPORT @EXPORT_OK); @@ -538,6 +538,7 @@ sub GetOptionsFromArray(@) { while ( defined $arg ) { # Get the canonical name. + my $given = $opt; print STDERR ("=> cname for \"$opt\" is ") if $debug; $opt = $ctl->[CTL_CNAME]; print STDERR ("\"$ctl->[CTL_CNAME]\"\n") if $debug; @@ -606,6 +607,7 @@ sub GetOptionsFromArray(@) { &{$linkage{$opt}} (Getopt::Long::CallBack->new (name => $opt, + given => $given, ctl => $ctl, opctl => \%opctl, linkage => \%linkage, @@ -1143,7 +1145,7 @@ sub FindOption ($$$$$) { : !(defined $rest || @$argv > 0) ) { # Complain if this option needs an argument. # if ( $mand && !($type eq 's' ? defined($optarg) : 0) ) { - if ( $mand ) { + if ( $mand || $ctl->[CTL_DEST] == CTL_DEST_HASH ) { return (0) if $passthrough; warn ("Option ", $opt, " requires an argument\n"); $error++; @@ -1561,6 +1563,11 @@ sub name { ''.$self->{name}; } +sub given { + my $self = shift; + $self->{given}; +} + use overload # Treat this object as an ordinary string for legacy API. '""' => \&name, @@ -1867,12 +1874,6 @@ it is interpreted specially by GetOptions(). There is currently one special command implemented: C will cause GetOptions() to stop processing options, as if it encountered a double dash C<-->. -In version 2.37 the first argument to the callback function was -changed from string to object. This was done to make room for -extensions and more detailed control. The object stringifies to the -option name so this change should not introduce compatibility -problems. - Here is an example of how to access the option name and value from within a subroutine: @@ -2033,6 +2034,29 @@ Configuration options can be passed to the constructor: $p = new Getopt::Long::Parser config => [...configuration options...]; +=head2 Callback object + +In version 2.37 the first argument to the callback function was +changed from string to object. This was done to make room for +extensions and more detailed control. The object stringifies to the +option name so this change should not introduce compatibility +problems. + +The callback object has the following methods: + +=over + +=item name + +The name of the option, unabbreviated. For an option with multiple +names it return the first (canonical) name. + +=item given + +The name of the option as actually used, unabbreveated. + +=back + =head2 Thread Safety Getopt::Long is thread safe when using ithreads as of Perl 5.8. It is @@ -2138,7 +2162,7 @@ list context, a message will be given and C will return failure. As with GetOptionsFromArray, a first argument hash reference now -becomes the second argument. +becomes the second argument. See the next section. =head2 Storing options values in a hash @@ -2205,9 +2229,9 @@ The simplest style of bundling can be enabled with: Getopt::Long::Configure ("bundling"); Configured this way, single-character options can be bundled but long -options B always start with a double dash C<--> to avoid -ambiguity. For example, when C, C, C and C are all valid -options, +options (and any of their auto-abbreviated shortened forms) B +always start with a double dash C<--> to avoid ambiguity. For example, +when C, C, C and C are all valid options, -vax @@ -2298,8 +2322,9 @@ L. Getopt::Long can be configured by calling subroutine Getopt::Long::Configure(). This subroutine takes a list of quoted strings, each specifying a configuration option to be enabled, e.g. -C, or disabled, e.g. C. Case does not -matter. Multiple calls to Configure() are possible. +C. To disable, prefix with C or C, e.g. +C. Case does not matter. Multiple calls to Configure() +are possible. Alternatively, as of version 2.24, the configuration options may be passed together with the C statement: @@ -2398,7 +2423,8 @@ first. Enabling this option will allow single-character options to be bundled. To distinguish bundles from long option names, long options -I be introduced with C<--> and bundles with C<->. +(and any of their auto-abbreviated shortened forms) I be +introduced with C<--> and bundles with C<->. Note that, if you have options C, C and C, and auto_abbrev enabled, possible arguments and option settings are: diff --git a/gnu/usr.bin/perl/cpan/HTTP-Tiny/lib/HTTP/Tiny.pm b/gnu/usr.bin/perl/cpan/HTTP-Tiny/lib/HTTP/Tiny.pm index 5803e4599f0..83ca06d18ce 100644 --- a/gnu/usr.bin/perl/cpan/HTTP-Tiny/lib/HTTP/Tiny.pm +++ b/gnu/usr.bin/perl/cpan/HTTP-Tiny/lib/HTTP/Tiny.pm @@ -4,7 +4,7 @@ use strict; use warnings; # ABSTRACT: A small, simple, correct HTTP/1.1 client -our $VERSION = '0.076'; +our $VERSION = '0.080'; sub _croak { require Carp; Carp::croak(@_) } @@ -26,8 +26,8 @@ sub _croak { require Carp; Carp::croak(@_) } #pod scheme, host and port) (defaults to 1) #pod * C — Maximum number of redirects allowed (defaults to 5) #pod * C — Maximum response size in bytes (only when not using a data -#pod callback). If defined, responses larger than this will return an -#pod exception. +#pod callback). If defined, requests with responses larger than this will return +#pod a 599 status code. #pod * C — URL of a proxy server to use for HTTP connections #pod (default is C<$ENV{http_proxy}> — if set) #pod * C — URL of a proxy server to use for HTTPS connections @@ -38,23 +38,26 @@ sub _croak { require Carp; Carp::croak(@_) } #pod be a comma-separated string or an array reference. (default is #pod C<$ENV{no_proxy}> —) #pod * C — Request timeout in seconds (default is 60) If a socket open, -#pod read or write takes longer than the timeout, an exception is thrown. +#pod read or write takes longer than the timeout, the request response status code +#pod will be 599. #pod * C — A boolean that indicates whether to validate the SSL #pod certificate of an C — connection (default is false) #pod * C — A hashref of C — options to pass through to #pod L #pod +#pod An accessor/mutator method exists for each attribute. +#pod #pod Passing an explicit C for C, C or C will #pod prevent getting the corresponding proxies from the environment. #pod -#pod Exceptions from C, C or other errors will result in a -#pod pseudo-HTTP status code of 599 and a reason of "Internal Exception". The -#pod content field in the response will contain the text of the exception. +#pod Errors during request execution will result in a pseudo-HTTP status code of 599 +#pod and a reason of "Internal Exception". The content field in the response will +#pod contain the text of the error. #pod #pod The C parameter enables a persistent connection, but only to a -#pod single destination scheme, host and port. Also, if any connection-relevant -#pod attributes are modified, or if the process ID or thread ID change, the -#pod persistent connection will be dropped. If you want persistent connections +#pod single destination scheme, host and port. If any connection-relevant +#pod attributes are modified via accessor, or if the process ID or thread ID change, +#pod the persistent connection will be dropped. If you want persistent connections #pod across multiple destinations, use multiple HTTP::Tiny objects. #pod #pod See L for more on the C and C attributes. @@ -152,7 +155,7 @@ sub _set_proxies { # http proxy if (! exists $self->{http_proxy} ) { # under CGI, bypass HTTP_PROXY as request sets it from Proxy header - local $ENV{HTTP_PROXY} if $ENV{REQUEST_METHOD}; + local $ENV{HTTP_PROXY} = ($ENV{CGI_HTTP_PROXY} || "") if $ENV{REQUEST_METHOD}; $self->{http_proxy} = $ENV{http_proxy} || $ENV{HTTP_PROXY} || $self->{proxy}; } @@ -186,7 +189,7 @@ sub _set_proxies { return; } -#pod =method get|head|put|post|delete +#pod =method get|head|put|post|patch|delete #pod #pod $response = $http->get($url); #pod $response = $http->get($url, \%options); @@ -200,7 +203,7 @@ sub _set_proxies { #pod #pod =cut -for my $sub_name ( qw/get head put post delete/ ) { +for my $sub_name ( qw/get head put post patch delete/ ) { my $req_method = uc $sub_name; no strict 'refs'; eval <<"HERE"; ## no critic @@ -416,8 +419,8 @@ sub mirror { #pod redirects in the same order that redirections occurred. If it does #pod not exist, then no redirections occurred. #pod -#pod On an exception during the execution of the request, the C field will -#pod contain 599, and the C field will contain the text of the exception. +#pod On an error during the execution of the request, the C field will +#pod contain 599, and the C field will contain the text of the error. #pod #pod =cut @@ -434,7 +437,7 @@ sub request { for ( 0 .. 1 ) { $response = eval { $self->_request($method, $url, $args) }; last unless $@ && $idempotent{$method} - && $@ =~ m{^(?:Socket closed|Unexpected end)}; + && $@ =~ m{^(?:Socket closed|Unexpected end|SSL read error)}; } if (my $e = $@) { @@ -490,6 +493,8 @@ sub www_form_urlencode { my @terms; while( @params ) { my ($key, $value) = splice(@params, 0, 2); + _croak("form data keys must not be undef") + if !defined($key); if ( ref $value eq 'ARRAY' ) { unshift @params, map { $key => $_ } @$value; } @@ -573,16 +578,8 @@ sub can_ssl { sub connected { my ($self) = @_; - # If a socket exists... - if ($self->{handle} && $self->{handle}{fh}) { - my $socket = $self->{handle}{fh}; - - # ...and is connected, return the peer host and port. - if ($socket->connected) { - return wantarray - ? ($socket->peerhost, $socket->peerport) - : join(':', $socket->peerhost, $socket->peerport); - } + if ( $self->{handle} ) { + return $self->{handle}->connected; } return; } @@ -599,7 +596,9 @@ my %DefaultPort = ( sub _agent { my $class = ref($_[0]) || $_[0]; (my $default_agent = $class) =~ s{::}{-}g; - return $default_agent . "/" . $class->VERSION; + my $version = $class->VERSION; + $default_agent .= "/$version" if defined $version; + return $default_agent; } sub _request { @@ -607,6 +606,10 @@ sub _request { my ($scheme, $host, $port, $path_query, $auth) = $self->_split_url($url); + if ($scheme ne 'http' && $scheme ne 'https') { + die(qq/Unsupported URL scheme '$scheme'\n/); + } + my $request = { method => $method, scheme => $scheme, @@ -659,6 +662,7 @@ sub _request { } if ( $self->{keep_alive} + && $handle->connected && $known_message_length && $response->{protocol} eq 'HTTP/1.1' && ($response->{headers}{connection} || '') ne 'close' @@ -812,13 +816,25 @@ sub _prepare_headers_and_cb { $request->{headers}{'connection'} = "close" unless $self->{keep_alive}; + # Some servers error on an empty-body PUT/POST without a content-length + if ( $request->{method} eq 'PUT' || $request->{method} eq 'POST' ) { + if (!defined($args->{content}) || !length($args->{content}) ) { + $request->{headers}{'content-length'} = 0; + } + } + if ( defined $args->{content} ) { - if (ref $args->{content} eq 'CODE') { - $request->{headers}{'content-type'} ||= "application/octet-stream"; - $request->{headers}{'transfer-encoding'} = 'chunked' - unless $request->{headers}{'content-length'} + if ( ref $args->{content} eq 'CODE' ) { + if ( exists $request->{'content-length'} && $request->{'content-length'} == 0 ) { + $request->{cb} = sub { "" }; + } + else { + $request->{headers}{'content-type'} ||= "application/octet-stream"; + $request->{headers}{'transfer-encoding'} = 'chunked' + unless exists $request->{headers}{'content-length'} || $request->{headers}{'transfer-encoding'}; - $request->{cb} = $args->{content}; + $request->{cb} = $args->{content}; + } } elsif ( length $args->{content} ) { my $content = $args->{content}; @@ -988,6 +1004,7 @@ my $unsafe_char = qr/[^A-Za-z0-9\-\._~]/; sub _uri_escape { my ($self, $str) = @_; + return "" if !defined $str; if ( $] ge '5.008' ) { utf8::encode($str); } @@ -1014,7 +1031,7 @@ use Socket qw[SOL_SOCKET SO_KEEPALIVE]; # not intended for general, per-client use and may be removed in the future my $SOCKET_CLASS = $ENV{PERL_HTTP_TINY_IPV4_ONLY} ? 'IO::Socket::INET' : - eval { require IO::Socket::IP; IO::Socket::IP->VERSION(0.25) } ? 'IO::Socket::IP' : + eval { require IO::Socket::IP; IO::Socket::IP->VERSION(0.32) } ? 'IO::Socket::IP' : 'IO::Socket::INET'; sub BUFSIZE () { 32768 } ## no critic @@ -1062,9 +1079,7 @@ sub connect { if ( $scheme eq 'https' ) { $self->_assert_ssl; } - elsif ( $scheme ne 'http' ) { - die(qq/Unsupported URL scheme '$scheme'\n/); - } + $self->{fh} = $SOCKET_CLASS->new( PeerHost => $peer, PeerPort => $port, @@ -1097,6 +1112,16 @@ sub connect { return $self; } +sub connected { + my ($self) = @_; + if ( $self->{fh} && $self->{fh}->connected ) { + return wantarray + ? ( $self->{fh}->peerhost, $self->{fh}->peerport ) + : join( ':', $self->{fh}->peerhost, $self->{fh}->peerport ); + } + return; +} + sub start_ssl { my ($self, $host) = @_; @@ -1186,6 +1211,11 @@ sub read { $len -= $take; } + # Ignore SIGPIPE because SSL reads can result in writes that might error. + # See "Expecting exactly the same behavior as plain sockets" in + # https://metacpan.org/dist/IO-Socket-SSL/view/lib/IO/Socket/SSL.pod#Common-Usage-Errors + local $SIG{PIPE} = 'IGNORE'; + while ($len > 0) { $self->can_read or die(q/Timed out while waiting for socket to become ready for reading/ . "\n"); @@ -1376,7 +1406,8 @@ sub read_body { sub write_body { @_ == 2 || die(q/Usage: $handle->write_body(request)/ . "\n"); my ($self, $request) = @_; - if ($request->{headers}{'content-length'}) { + if (exists $request->{headers}{'content-length'}) { + return unless $request->{headers}{'content-length'}; return $self->write_content_body($request); } else { @@ -1493,10 +1524,11 @@ sub read_response_header { my $line = $self->readline; - $line =~ /\A (HTTP\/(0*\d+\.0*\d+)) [\x09\x20]+ ([0-9]{3}) [\x09\x20]+ ([^\x0D\x0A]*) \x0D?\x0A/x + $line =~ /\A (HTTP\/(0*\d+\.0*\d+)) [\x09\x20]+ ([0-9]{3}) (?: [\x09\x20]+ ([^\x0D\x0A]*) )? \x0D?\x0A/x or die(q/Malformed Status-Line: / . $Printable->($line). "\n"); my ($protocol, $version, $status, $reason) = ($1, $2, $3, $4); + $reason = "" unless defined $reason; die (qq/Unsupported HTTP protocol: $protocol\n/) unless $version =~ /0*1\.0*[01]/; @@ -1672,7 +1704,7 @@ HTTP::Tiny - A small, simple, correct HTTP/1.1 client =head1 VERSION -version 0.076 +version 0.080 =head1 SYNOPSIS @@ -1741,7 +1773,7 @@ C — Maximum number of redirects allowed (defaults to 5) =item * -C — Maximum response size in bytes (only when not using a data callback). If defined, responses larger than this will return an exception. +C — Maximum response size in bytes (only when not using a data callback). If defined, requests with responses larger than this will return a 599 status code. =item * @@ -1761,7 +1793,7 @@ C — List of domain suffixes that should not be proxied. Must be a c =item * -C — Request timeout in seconds (default is 60) If a socket open, read or write takes longer than the timeout, an exception is thrown. +C — Request timeout in seconds (default is 60) If a socket open, read or write takes longer than the timeout, the request response status code will be 599. =item * @@ -1773,22 +1805,24 @@ C — A hashref of C — options to pass through to L for C, C or C will prevent getting the corresponding proxies from the environment. -Exceptions from C, C or other errors will result in a -pseudo-HTTP status code of 599 and a reason of "Internal Exception". The -content field in the response will contain the text of the exception. +Errors during request execution will result in a pseudo-HTTP status code of 599 +and a reason of "Internal Exception". The content field in the response will +contain the text of the error. The C parameter enables a persistent connection, but only to a -single destination scheme, host and port. Also, if any connection-relevant -attributes are modified, or if the process ID or thread ID change, the -persistent connection will be dropped. If you want persistent connections +single destination scheme, host and port. If any connection-relevant +attributes are modified via accessor, or if the process ID or thread ID change, +the persistent connection will be dropped. If you want persistent connections across multiple destinations, use multiple HTTP::Tiny objects. See L for more on the C and C attributes. -=head2 get|head|put|post|delete +=head2 get|head|put|post|patch|delete $response = $http->get($url); $response = $http->get($url, \%options); @@ -1948,8 +1982,8 @@ C If this field exists, it is an arrayref of response hash references =back -On an exception during the execution of the request, the C field will -contain 599, and the C field will contain the text of the exception. +On an error during the execution of the request, the C field will +contain 599, and the C field will contain the text of the error. =head2 www_form_urlencode @@ -2012,8 +2046,8 @@ verify_SSL =head1 SSL SUPPORT Direct C connections are supported only if L 1.56 or -greater and L 1.49 or greater are installed. An exception will be -thrown if new enough versions of these modules are not installed or if the SSL +greater and L 1.49 or greater are installed. An error will occur +if new enough versions of these modules are not installed or if the SSL encryption fails. You can also use C utility function that returns boolean to see if the required modules are installed. @@ -2083,7 +2117,7 @@ system-specific default locations for a CA certificate file: =back -An exception will be raised if C is true and no CA certificate file +An error will be occur if C is true and no CA certificate file is available. If you desire complete control over SSL connections, the C attribute @@ -2127,7 +2161,7 @@ all_proxy or ALL_PROXY If the C environment variable is set, then this might be a CGI process and C would be set from the C header, which is a security risk. If C is set, C (the upper case -variant only) is ignored. +variant only) is ignored, but C is considered instead. Tunnelling C over an C proxy using the CONNECT method is supported. If your proxy uses C itself, you can not tunnel C @@ -2178,7 +2212,7 @@ L: It attempts to meet all "MUST" requirements of the specification, but does not implement all "SHOULD" requirements. (Note: it was developed against the earlier RFC 2616 specification and may not yet meet the revised RFC 7230-7235 -spec.) +spec.) Additionally, HTTP::Tiny supports the C method of RFC 5789. Some particular limitations of note include: @@ -2268,7 +2302,7 @@ L - Required for SSL support =back -=for :stopwords cpan testmatrix url annocpan anno bugtracker rt cpants kwalitee diff irc mailto metadata placeholders metacpan +=for :stopwords cpan testmatrix url bugtracker rt cpants kwalitee diff irc mailto metadata placeholders metacpan =head1 SUPPORT @@ -2303,7 +2337,7 @@ David Golden =head1 CONTRIBUTORS -=for stopwords Alan Gardner Alessandro Ghedini A. Sinan Unur Brad Gilbert brian m. carlson Chris Nehren Weyl Claes Jakobsson Clinton Gormley Craig Berry David Golden Mitchell Dean Pearce Edward Zborowski Felipe Gasper James Raspass Jeremy Mates Jess Robinson Karen Etheridge Lukas Eklund Martin J. Evans Martin-Louis Bright Mike Doherty Nicolas Rochelemagne Olaf Alders Olivier Mengué Petr Písař Serguei Trouchelle Shoichi Kaji SkyMarshal Sören Kornetzki Steve Grazzini Syohei YOSHIDA Tatsuhiko Miyagawa Tom Hukins Tony Cook +=for stopwords Alan Gardner Alessandro Ghedini A. Sinan Unur Brad Gilbert brian m. carlson Chris Nehren Weyl Claes Jakobsson Clinton Gormley Craig Berry David Golden Mitchell Dean Pearce Edward Zborowski Felipe Gasper Greg Kennedy James E Keenan Raspass Jeremy Mates Jess Robinson Karen Etheridge Lukas Eklund Martin J. Evans Martin-Louis Bright Matthew Horsfall Michael R. Davis Mike Doherty Nicolas Rochelemagne Olaf Alders Olivier Mengué Petr Písař sanjay-cpu Serguei Trouchelle Shoichi Kaji SkyMarshal Sören Kornetzki Steve Grazzini Syohei YOSHIDA Tatsuhiko Miyagawa Tom Hukins Tony Cook Xavier Guimard =over 4 @@ -2373,6 +2407,14 @@ Felipe Gasper =item * +Greg Kennedy + +=item * + +James E Keenan + +=item * + James Raspass =item * @@ -2401,6 +2443,14 @@ Martin-Louis Bright =item * +Matthew Horsfall + +=item * + +Michael R. Davis + +=item * + Mike Doherty =item * @@ -2421,6 +2471,10 @@ Petr Písař =item * +sanjay-cpu + +=item * + Serguei Trouchelle =item * @@ -2455,11 +2509,15 @@ Tom Hukins Tony Cook +=item * + +Xavier Guimard + =back =head1 COPYRIGHT AND LICENSE -This software is copyright (c) 2018 by Christian Hansen. +This software is copyright (c) 2021 by Christian Hansen. This is free software; you can redistribute it and/or modify it under the same terms as the Perl 5 programming language system itself. diff --git a/gnu/usr.bin/perl/cpan/HTTP-Tiny/t/001_api.t b/gnu/usr.bin/perl/cpan/HTTP-Tiny/t/001_api.t index 3e6864e5ceb..48cc2f812cc 100644 --- a/gnu/usr.bin/perl/cpan/HTTP-Tiny/t/001_api.t +++ b/gnu/usr.bin/perl/cpan/HTTP-Tiny/t/001_api.t @@ -11,7 +11,7 @@ my @accessors = qw( max_redirect max_size proxy no_proxy timeout SSL_options verify_SSL cookie_jar ); my @methods = qw( - new get head put post delete post_form request mirror www_form_urlencode can_ssl + new get head put post patch delete post_form request mirror www_form_urlencode can_ssl connected ); diff --git a/gnu/usr.bin/perl/cpan/HTTP-Tiny/t/002_croakage.t b/gnu/usr.bin/perl/cpan/HTTP-Tiny/t/002_croakage.t index ac3c8b93e44..331fda88a5b 100644 --- a/gnu/usr.bin/perl/cpan/HTTP-Tiny/t/002_croakage.t +++ b/gnu/usr.bin/perl/cpan/HTTP-Tiny/t/002_croakage.t @@ -5,7 +5,7 @@ use warnings; use Test::More; use lib 't'; -use Util qw[tmpfile monkey_patch set_socket_source]; +use Util qw[tmpfile monkey_patch set_socket_source clear_socket_source]; use HTTP::Tiny; @@ -35,6 +35,7 @@ my $res_fh = tmpfile(); my $req_fh = tmpfile(); my $http = HTTP::Tiny->new; +clear_socket_source(); set_socket_source($req_fh, $res_fh); for my $c ( @cases ) { @@ -48,5 +49,21 @@ my $res = eval{ $http->get("http://www.example.com/", { headers => { host => "ww is( $res->{status}, 599, "Providing a Host header errors with 599" ); like( $res->{content}, qr/'Host' header/, "Providing a Host header gives right error message" ); +$res = eval { $http->head("hxxp://www.example.com/") }; +is( $res->{status}, 599, "Error on unsupported scheme" ); +like( + $res->{content}, + qr/Unsupported URL scheme 'hxxp'/, + "Error for unsupported scheme" +); + +$res = eval { $http->post_form("http://www.example.com/", [undef, "123"]) }; +my $err = $@; +like( + $err, + qr/form data keys must not be undef/, + "Error for undef key in form" +); + done_testing; diff --git a/gnu/usr.bin/perl/cpan/HTTP-Tiny/t/100_get.t b/gnu/usr.bin/perl/cpan/HTTP-Tiny/t/100_get.t index 5dbf3e8a6c9..17642af7a57 100644 --- a/gnu/usr.bin/perl/cpan/HTTP-Tiny/t/100_get.t +++ b/gnu/usr.bin/perl/cpan/HTTP-Tiny/t/100_get.t @@ -7,7 +7,8 @@ use File::Basename; use Test::More 0.88; use lib 't'; use Util qw[tmpfile rewind slurp monkey_patch dir_list parse_case - hashify connect_args set_socket_source sort_headers $CRLF $LF]; + hashify connect_args clear_socket_source set_socket_source sort_headers + $CRLF $LF]; use HTTP::Tiny; BEGIN { monkey_patch() } @@ -42,6 +43,7 @@ for my $file ( dir_list("corpus", qr/^get/ ) ) { my $req_fh = tmpfile(); my $http = HTTP::Tiny->new(keep_alive => 0, %new_args); + clear_socket_source(); set_socket_source($req_fh, $res_fh); (my $url_basename = $url) =~ s{.*/}{}; diff --git a/gnu/usr.bin/perl/cpan/HTTP-Tiny/t/101_head.t b/gnu/usr.bin/perl/cpan/HTTP-Tiny/t/101_head.t index ace074566cc..57062a57138 100644 --- a/gnu/usr.bin/perl/cpan/HTTP-Tiny/t/101_head.t +++ b/gnu/usr.bin/perl/cpan/HTTP-Tiny/t/101_head.t @@ -6,8 +6,8 @@ use warnings; use File::Basename; use Test::More 0.88; use lib 't'; -use Util qw[tmpfile rewind slurp monkey_patch dir_list parse_case - set_socket_source sort_headers $CRLF $LF]; +use Util qw[tmpfile rewind slurp monkey_patch dir_list parse_case + clear_socket_source set_socket_source sort_headers $CRLF $LF]; use HTTP::Tiny; BEGIN { monkey_patch() } @@ -47,6 +47,7 @@ for my $file ( dir_list("corpus", qr/^head/ ) ) { my $req_fh = tmpfile(); my $http = HTTP::Tiny->new( keep_alive => 0 ); + clear_socket_source(); set_socket_source($req_fh, $res_fh); (my $url_basename = $url) =~ s{.*/}{}; diff --git a/gnu/usr.bin/perl/cpan/HTTP-Tiny/t/102_put.t b/gnu/usr.bin/perl/cpan/HTTP-Tiny/t/102_put.t index 2fe3626dbc9..57b2d974343 100644 --- a/gnu/usr.bin/perl/cpan/HTTP-Tiny/t/102_put.t +++ b/gnu/usr.bin/perl/cpan/HTTP-Tiny/t/102_put.t @@ -6,8 +6,8 @@ use warnings; use File::Basename; use Test::More 0.88; use lib 't'; -use Util qw[tmpfile rewind slurp monkey_patch dir_list parse_case - set_socket_source sort_headers $CRLF $LF]; +use Util qw[tmpfile rewind slurp monkey_patch dir_list parse_case + clear_socket_source set_socket_source sort_headers $CRLF $LF]; use HTTP::Tiny; BEGIN { monkey_patch() } @@ -34,6 +34,9 @@ for my $file ( dir_list("corpus", qr/^put/ ) ) { if ( $case->{content} ) { $options{content} = $case->{content}[0]; } + elsif ( exists $case->{content} ) { + $options{content} = ""; + } elsif ( $case->{content_cb} ) { $options{content} = eval join "\n", @{$case->{content_cb}}; } @@ -47,6 +50,7 @@ for my $file ( dir_list("corpus", qr/^put/ ) ) { my $req_fh = tmpfile(); my $http = HTTP::Tiny->new( keep_alive => 0 ); + clear_socket_source(); set_socket_source($req_fh, $res_fh); (my $url_basename = $url) =~ s{.*/}{}; diff --git a/gnu/usr.bin/perl/cpan/HTTP-Tiny/t/103_delete.t b/gnu/usr.bin/perl/cpan/HTTP-Tiny/t/103_delete.t index 66d345b698e..39276ebafb0 100644 --- a/gnu/usr.bin/perl/cpan/HTTP-Tiny/t/103_delete.t +++ b/gnu/usr.bin/perl/cpan/HTTP-Tiny/t/103_delete.t @@ -6,8 +6,8 @@ use warnings; use File::Basename; use Test::More 0.88; use lib 't'; -use Util qw[tmpfile rewind slurp monkey_patch dir_list parse_case - set_socket_source sort_headers $CRLF $LF]; +use Util qw[tmpfile rewind slurp monkey_patch dir_list parse_case + clear_socket_source set_socket_source sort_headers $CRLF $LF]; use HTTP::Tiny; BEGIN { monkey_patch() } @@ -47,6 +47,7 @@ for my $file ( dir_list("corpus", qr/^delete/ ) ) { my $req_fh = tmpfile(); my $http = HTTP::Tiny->new( keep_alive => 0 ); + clear_socket_source(); set_socket_source($req_fh, $res_fh); (my $url_basename = $url) =~ s{.*/}{}; diff --git a/gnu/usr.bin/perl/cpan/HTTP-Tiny/t/104_post.t b/gnu/usr.bin/perl/cpan/HTTP-Tiny/t/104_post.t index 9c765bd56bb..ba49a0e37ba 100644 --- a/gnu/usr.bin/perl/cpan/HTTP-Tiny/t/104_post.t +++ b/gnu/usr.bin/perl/cpan/HTTP-Tiny/t/104_post.t @@ -6,8 +6,8 @@ use warnings; use File::Basename; use Test::More 0.88; use lib 't'; -use Util qw[tmpfile rewind slurp monkey_patch dir_list parse_case - set_socket_source sort_headers $CRLF $LF]; +use Util qw[tmpfile rewind slurp monkey_patch dir_list parse_case + clear_socket_source set_socket_source sort_headers $CRLF $LF]; use HTTP::Tiny; BEGIN { monkey_patch() } @@ -47,6 +47,7 @@ for my $file ( dir_list("corpus", qr/^post/ ) ) { my $req_fh = tmpfile(); my $http = HTTP::Tiny->new( keep_alive => 0 ); + clear_socket_source(); set_socket_source($req_fh, $res_fh); (my $url_basename = $url) =~ s{.*/}{}; diff --git a/gnu/usr.bin/perl/cpan/HTTP-Tiny/t/110_mirror.t b/gnu/usr.bin/perl/cpan/HTTP-Tiny/t/110_mirror.t index de38fd128ad..30a8b352e82 100644 --- a/gnu/usr.bin/perl/cpan/HTTP-Tiny/t/110_mirror.t +++ b/gnu/usr.bin/perl/cpan/HTTP-Tiny/t/110_mirror.t @@ -6,8 +6,8 @@ use warnings; use File::Basename; use Test::More 0.88; use lib 't'; -use Util qw[tmpfile rewind slurp monkey_patch dir_list parse_case - set_socket_source sort_headers $CRLF $LF]; +use Util qw[tmpfile rewind slurp monkey_patch dir_list parse_case + clear_socket_source set_socket_source sort_headers $CRLF $LF]; use HTTP::Tiny; use File::Temp qw/tempdir/; use File::Spec; @@ -64,6 +64,7 @@ for my $file ( dir_list("corpus", qr/^mirror/ ) ) { my $req_fh = tmpfile(); my $http = HTTP::Tiny->new( keep_alive => 0 ); + clear_socket_source(); set_socket_source($req_fh, $res_fh); my @call_args = %options ? ($url, $tempfile, \%options) : ($url, $tempfile); diff --git a/gnu/usr.bin/perl/cpan/HTTP-Tiny/t/140_proxy.t b/gnu/usr.bin/perl/cpan/HTTP-Tiny/t/140_proxy.t index dd384628247..5f190339c08 100644 --- a/gnu/usr.bin/perl/cpan/HTTP-Tiny/t/140_proxy.t +++ b/gnu/usr.bin/perl/cpan/HTTP-Tiny/t/140_proxy.t @@ -17,8 +17,9 @@ BEGIN { # Require a true value for my $proxy (undef, "", 0){ - local $ENV{all_proxy} = undef; - local $ENV{ALL_PROXY} = undef; + no warnings 'uninitialized'; + local $ENV{all_proxy}; + local $ENV{ALL_PROXY}; local $ENV{http_proxy} = $proxy; my $c = HTTP::Tiny->new(); ok(!defined $c->http_proxy); @@ -80,4 +81,14 @@ for my $var ( qw/http_proxy https_proxy all_proxy/ ) { } +# allow CGI_HTTP_PROXY with REQUEST_METHOD +{ + local $ENV{HTTP_PROXY} = "http://localhost:8080"; + local $ENV{CGI_HTTP_PROXY} = "http://localhost:9090"; + local $ENV{REQUEST_METHOD} = 'GET'; + my $c = HTTP::Tiny->new(); + is($c->http_proxy, "http://localhost:9090", + "http_proxy set from CGI_HTTP_PROXY if REQUEST_METHOD set"); +} + done_testing(); diff --git a/gnu/usr.bin/perl/cpan/HTTP-Tiny/t/150_post_form.t b/gnu/usr.bin/perl/cpan/HTTP-Tiny/t/150_post_form.t index 790cbc0481b..0e76600c4b8 100644 --- a/gnu/usr.bin/perl/cpan/HTTP-Tiny/t/150_post_form.t +++ b/gnu/usr.bin/perl/cpan/HTTP-Tiny/t/150_post_form.t @@ -7,8 +7,8 @@ use open IN => ':raw'; use File::Basename; use Test::More 0.88; use lib 't'; -use Util qw[tmpfile rewind slurp monkey_patch dir_list parse_case - set_socket_source sort_headers $CRLF $LF]; +use Util qw[tmpfile rewind slurp monkey_patch dir_list parse_case + clear_socket_source set_socket_source sort_headers $CRLF $LF]; use HTTP::Tiny; BEGIN { monkey_patch() } @@ -38,6 +38,9 @@ for my $file ( dir_list("corpus", qr/^form/ ) ) { if ( $case->{datatype}[0] eq 'HASH' ) { while ( @params ) { my ($key, $value) = splice( @params, 0, 2 ); + if ($value eq "") { + $value = undef; + } if ( ref $formdata->{$key} ) { push @{$formdata->{$key}}, $value; } @@ -50,7 +53,7 @@ for my $file ( dir_list("corpus", qr/^form/ ) ) { } } else { - $formdata = [ @params ]; + $formdata = [ map { $_ eq "" ? undef : $_ } @params ]; } # setup mocking and test @@ -58,6 +61,7 @@ for my $file ( dir_list("corpus", qr/^form/ ) ) { my $req_fh = tmpfile(); my $http = HTTP::Tiny->new( keep_alive => 0 ); + clear_socket_source(); set_socket_source($req_fh, $res_fh); (my $url_basename = $url) =~ s{.*/}{}; diff --git a/gnu/usr.bin/perl/cpan/HTTP-Tiny/t/Util.pm b/gnu/usr.bin/perl/cpan/HTTP-Tiny/t/Util.pm index 2e85b04823d..6537b7e421b 100644 --- a/gnu/usr.bin/perl/cpan/HTTP-Tiny/t/Util.pm +++ b/gnu/usr.bin/perl/cpan/HTTP-Tiny/t/Util.pm @@ -87,6 +87,7 @@ sub parse_case { my ($case) = @_; my %args; my $key = ''; + my %seen; for my $line ( split "\n", $case ) { chomp $line; if ( substr($line,0,1) eq q{ } ) { @@ -95,8 +96,12 @@ sub parse_case { } else { $key = $line; + $seen{$key}++; } } + for my $k (keys %seen) { + $args{$k}=undef unless exists $args{$k}; + } return \%args; } @@ -168,6 +173,7 @@ sub sort_headers { $self->{fh} = shift @res_fh; }; *HTTP::Tiny::Handle::close = sub { 1 }; # don't close our temps + *HTTP::Tiny::Handle::connected = sub { 1 }; # don't try to proxy in mock-mode delete $ENV{$_} for map { $_, uc($_) } qw/http_proxy https_proxy all_proxy/; diff --git a/gnu/usr.bin/perl/cpan/IO-Compress/Makefile.PL b/gnu/usr.bin/perl/cpan/IO-Compress/Makefile.PL index d22a4c2b4bb..8e9acfe7cf5 100644 --- a/gnu/usr.bin/perl/cpan/IO-Compress/Makefile.PL +++ b/gnu/usr.bin/perl/cpan/IO-Compress/Makefile.PL @@ -3,7 +3,8 @@ use strict ; require 5.006 ; -$::VERSION = '2.093' ; +$::VERSION = '2.106' ; +$::DEP_VERSION = '2.103'; use lib '.'; use private::MakeUtil; @@ -12,10 +13,10 @@ use ExtUtils::MakeMaker 5.16 ; UpDowngrade(getPerlFiles('MANIFEST')) unless $ENV{PERL_CORE}; -WriteMakefile( +WriteMakefile( NAME => 'IO::Compress', VERSION_FROM => 'lib/IO/Compress/Base.pm', - 'dist' => { COMPRESS => 'gzip', + 'dist' => { COMPRESS => 'gzip', TARFLAGS => '-chvf', SUFFIX => 'gz', DIST_DEFAULT => 'MyTrebleCheck tardist', @@ -24,15 +25,16 @@ WriteMakefile( ( $ENV{SKIP_FOR_CORE} ? () - : (PREREQ_PM => { 'Compress::Raw::Bzip2' => $::VERSION, - 'Compress::Raw::Zlib' => $::VERSION, + : (PREREQ_PM => { 'Compress::Raw::Bzip2' => $::DEP_VERSION, + 'Compress::Raw::Zlib' => $::DEP_VERSION, 'Scalar::Util' => 0, - $] >= 5.005 && $] < 5.006 - ? ('File::BSDGlob' => 0) + 'Encode' => 0, + $] >= 5.005 && $] < 5.006 + ? ('File::BSDGlob' => 0) : () } ) ), - + ( $] >= 5.005 ? (ABSTRACT => 'IO Interface to compressed data files/buffers', @@ -43,16 +45,16 @@ WriteMakefile( INSTALLDIRS => ($] >= 5.009 && $] < 5.011 ? 'perl' : 'site'), EXE_FILES => ['bin/zipdetails', 'bin/streamzip'], - + ( $] >= 5.009 && $] <= 5.011001 && ! $ENV{PERL_CORE} ? (INSTALLPRIVLIB => '$(INSTALLARCHLIB)') : () ), - ( eval { ExtUtils::MakeMaker->VERSION(6.46) } + ( eval { ExtUtils::MakeMaker->VERSION(6.46) } ? ( META_MERGE => { - + "meta-spec" => { version => 2 }, no_index => { @@ -60,7 +62,7 @@ WriteMakefile( }, resources => { - + bugtracker => { web => 'https://github.com/pmqs/IO-Compress/issues' }, @@ -71,17 +73,16 @@ WriteMakefile( type => 'git', url => 'git://github.com/pmqs/IO-Compress.git', web => 'https://github.com/pmqs/IO-Compress', - }, + }, }, - } - ) + } + ) : () ), ((ExtUtils::MakeMaker->VERSION() gt '6.30') ? - ('LICENSE' => 'perl') : ()), + ('LICENSE' => 'perl') : ()), ) ; # end of file Makefile.PL - diff --git a/gnu/usr.bin/perl/cpan/IO-Compress/bin/zipdetails b/gnu/usr.bin/perl/cpan/IO-Compress/bin/zipdetails index bff32a1c02e..3f89b836256 100644 --- a/gnu/usr.bin/perl/cpan/IO-Compress/bin/zipdetails +++ b/gnu/usr.bin/perl/cpan/IO-Compress/bin/zipdetails @@ -5,20 +5,38 @@ # Display info on the contents of a Zip file # +use 5.010; # for unpack "Q<" + +BEGIN { + # Check for a 32-bit Perl + if (!eval { pack "Q", 1 }) { + warn "zipdetails requires 64 bit integers, ", + "this Perl has 32 bit integers.\n"; + exit(1); + } +} + BEGIN { pop @INC if $INC[-1] eq '.' } use strict; use warnings ; +no warnings 'portable'; # for unpacking > 2^32 +use feature 'state'; use IO::File; use Encode; +use Getopt::Long; -# Compression types +my $VERSION = "2.104" ; + +use constant MAX32 => 0xFFFFFFFF ; + +# Compression types use constant ZIP_CM_STORE => 0 ; use constant ZIP_CM_IMPLODE => 6 ; use constant ZIP_CM_DEFLATE => 8 ; use constant ZIP_CM_BZIP2 => 12 ; use constant ZIP_CM_LZMA => 14 ; -use constant ZIP_CM_PPMD => 98 ; +use constant ZIP_CM_PPMD => 98 ; # General Purpose Flag use constant ZIP_GP_FLAG_ENCRYPTED_MASK => (1 << 0) ; @@ -38,8 +56,8 @@ use constant ZIP_CENTRAL_HDR_SIG => 0x02014b50; use constant ZIP_END_CENTRAL_HDR_SIG => 0x06054b50; use constant ZIP64_END_CENTRAL_REC_HDR_SIG => 0x06064b50; use constant ZIP64_END_CENTRAL_LOC_HDR_SIG => 0x07064b50; -use constant ZIP64_ARCHIVE_EXTRA_SIG => 0x08064b50; -use constant ZIP64_DIGITAL_SIGNATURE_SIG => 0x05054b50; +use constant ZIP_ARCHIVE_EXTRA_DATA_SIG => 0x08064b50; +use constant ZIP_DIGITAL_SIGNATURE_SIG => 0x05054b50; use constant ZIP_ARCHIVE_EXTRA_DATA_RECORD_SIG => 0x08064b50; @@ -50,7 +68,7 @@ use constant ZIP_EXTRA_SUBFIELD_ID_SIZE => 2 ; use constant ZIP_EXTRA_SUBFIELD_LEN_SIZE => 2 ; use constant ZIP_EXTRA_SUBFIELD_HEADER_SIZE => ZIP_EXTRA_SUBFIELD_ID_SIZE + ZIP_EXTRA_SUBFIELD_LEN_SIZE; -use constant ZIP_EXTRA_SUBFIELD_MAX_SIZE => ZIP_EXTRA_MAX_SIZE - +use constant ZIP_EXTRA_SUBFIELD_MAX_SIZE => ZIP_EXTRA_MAX_SIZE - ZIP_EXTRA_SUBFIELD_HEADER_SIZE; my %ZIP_CompressionMethods = @@ -67,15 +85,17 @@ my %ZIP_CompressionMethods = 9 => 'Enhanced Deflating using Deflate64(tm)', 10 => 'PKWARE Data Compression Library Imploding', 11 => 'Reserved by PKWARE', - 12 => 'BZIP2 ', + 12 => 'BZIP2', 13 => 'Reserved by PKWARE', 14 => 'LZMA', 15 => 'Reserved by PKWARE', - 16 => 'Reserved by PKWARE', + 16 => 'IBM z/OS CMPSC Compression', 17 => 'Reserved by PKWARE', 18 => 'File is compressed using IBM TERSE (new)', 19 => 'IBM LZ77 z Architecture (PFS)', - 95 => 'XZ', + 93 => 'Zstandard', + 94 => 'MP3', + 95 => 'XZ', 96 => 'WinZip JPEG Compression', 97 => 'WavPack compressed data', 98 => 'PPMd version I, Rev 1', @@ -93,7 +113,7 @@ my %OS_Lookup = ( 7 => "Macintosh", 8 => "Z-System", 9 => "CP/M", - 10 => "Windoxs NTFS or TOPS-20", + 10 => "Windows NTFS or TOPS-20", 11 => "MVS or NTFS", 12 => "VSE or SMS/QDOS", 13 => "Acorn RISC OS", @@ -114,9 +134,11 @@ my %Lookup = ( ZIP_END_CENTRAL_HDR_SIG, \&EndCentralHeader, ZIP64_END_CENTRAL_REC_HDR_SIG, \&Zip64EndCentralHeader, ZIP64_END_CENTRAL_LOC_HDR_SIG, \&Zip64EndCentralLocator, - - # TODO - Archive Encryption Headers + + # TODO - Archive Encryption Headers & digital signature #ZIP_ARCHIVE_EXTRA_DATA_RECORD_SIG + #ZIP_DIGITAL_SIGNATURE_SIG + #ZIP_ARCHIVE_EXTRA_DATA_SIG ); my %Extras = ( @@ -135,7 +157,10 @@ my %Extras = ( 0x0017, ['Strong Encryption Header', undef], 0x0018, ['Record Management Controls', undef], 0x0019, ['PKCS#7 Encryption Recipient Certificate List', undef], - + 0x0020, ['Reserved for Timestamp record', undef], + 0x0021, ['Policy Decryption Key Record', undef], + 0x0022, ['Smartcrypt Key Provider Record', undef], + 0x0023, ['Smartcrypt Policy Key Data Record', undef], # The Header ID mappings defined by Info-ZIP and third parties are: @@ -144,7 +169,7 @@ my %Extras = ( 0x07c8, ['Info-ZIP Macintosh (old, J. Lee)', undef], 0x2605, ['ZipIt Macintosh (first version)', undef], 0x2705, ['ZipIt Macintosh v 1.3.5 and newer (w/o full filename)', undef], - 0x2805, ['ZipIt Macintosh v 1.3.5 and newer ', undef], + 0x2805, ['ZipIt Macintosh v 1.3.5 and newer', undef], 0x334d, ["Info-ZIP Macintosh (new, D. Haase's 'Mac3' field)", undef], 0x4154, ['Tandem NSK', undef], 0x4341, ['Acorn/SparkFS (David Pilling)', undef], @@ -173,14 +198,13 @@ my %Extras = ( 0x7855, ['Unix Extra type 2', \&decode_Ux], 0x7875, ['Unix Extra Type 3', \&decode_ux], 0x9901, ['AES Encryption', \&decode_AES], - 0xa11e, ['Data Stream Alignment', undef], - 0xA220, ['Open Packaging Growth Hint', undef ], + 0xa11e, ['Data Stream Alignment', \&decode_DataStreamAlignment], + 0xA220, ['Open Packaging Growth Hint', \&decode_GrowthHint ], 0xCAFE, ['Java Executable', \&decode_Java_exe], 0xfb4a, ['SMS/QDOS', undef], ); -my $VERSION = "1.11" ; my $FH; @@ -190,16 +214,21 @@ my $LocalHeaderCount = 0; my $CentralHeaderCount = 0; my $START; -my $OFFSET = new U64 0; +my $OFFSET = 0 ; my $TRAILING = 0 ; -my $PAYLOADLIMIT = 256; #new U64 256; -my $ZERO = new U64 0 ; +my $PAYLOADLIMIT = 256; +my $ZERO = 0 ; +my $APK = 0 ; +my $START_APK = 0; +my $APK_LEN = 0; + +my $SEEN = Seen->new(); sub prOff { my $offset = shift; my $s = offset($OFFSET); - $OFFSET->add($offset); + $OFFSET += $offset; return $s; } @@ -207,25 +236,7 @@ sub offset { my $v = shift ; - if (ref $v eq 'U64') { - my $hi = $v->getHigh(); - my $lo = $v->getLow(); - - if ($hi) - { - my $hiNib = $NIBBLES - 8 ; - sprintf("%0${hiNib}X", $hi) . - sprintf("%08X", $lo); - } - else - { - sprintf("%0${NIBBLES}X", $lo); - } - } - else { - sprintf("%0${NIBBLES}X", $v); - } - + sprintf("%0${NIBBLES}X", $v); } my ($OFF, $LENGTH, $CONTENT, $TEXT, $VALUE) ; @@ -237,23 +248,23 @@ sub setupFormat { my $wantVerbose = shift ; my $nibbles = shift; - + my $width = '@' . ('>' x ($nibbles -1)); my $space = " " x length($width); my $fmt ; - + if ($wantVerbose) { - + $FMT1 = " format STDOUT = $width $width ^<<<<<<<<<<<^<<<<<<<<<<<<<<<<<<<< ^<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< \$OFF, \$LENGTH, \$CONTENT, \$TEXT, \$VALUE $space $space ^<<<<<<<<<<<^<<<<<<<<<<<<<<<<<<<< ^<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<~~ \$CONTENT, \$TEXT, \$VALUE -. +. "; - + $FMT2 = " format STDOUT = $width $width ^<<<<<<<<<<< ^<<<<<<<<<<<<<<<<<< ^<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< @@ -285,15 +296,15 @@ $space ^<<<<<<<<<<<<<<<<<< ^<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<~~ } eval "$FMT1"; - + $| = 1; } sub mySpr -{ +{ my $format = shift ; - + return "" if ! defined $format; return $format unless @_ ; return sprintf $format, @_ ; @@ -304,13 +315,13 @@ sub out0 my $size = shift; my $text = shift; my $format = shift; - + $OFF = prOff($size); $LENGTH = offset($size) ; $CONTENT = '...'; $TEXT = $text; $VALUE = mySpr $format, @_; - + write; skip($FH, $size); @@ -328,20 +339,25 @@ sub hexDump { my $input = shift; - my $out = unpack('H*', $input) ; + my $out = unpack('H*', $input) ; $out =~ s#(..)# $1#g ; $out =~ s/^ //; - $out = uc $out; + $out = uc $out; return $out; } +sub hexValue +{ + return sprintf("%X", $_[0]); +} + sub out { my $data = shift; my $text = shift; my $format = shift; - + my $size = length($data) ; $OFF = prOff($size); @@ -349,7 +365,7 @@ sub out $CONTENT = hexDump($data); $TEXT = $text; $VALUE = mySpr $format, @_; - + no warnings; write; @@ -359,12 +375,12 @@ sub out1 { my $text = shift; my $format = shift; - + $OFF = ''; $LENGTH = '' ; $CONTENT = ''; - $TEXT = $text; - $VALUE = mySpr $format, @_; + $TEXT = $text; + $VALUE = mySpr $format, @_; write; } @@ -374,13 +390,13 @@ sub out2 my $data = shift ; my $text = shift ; my $format = shift; - + my $size = length($data) ; $OFF = prOff($size); $LENGTH = offset($size); $CONTENT = hexDump($data); - $TEXT = $text; - $VALUE = mySpr $format, @_; + $TEXT = $text; + $VALUE = mySpr $format, @_; no warnings; eval "$FMT2"; @@ -399,8 +415,10 @@ sub Value { return Value_v(@value) } elsif ($letter eq 'V') { return Value_V(@value) } - elsif ($letter eq 'VV') - { return Value_VV(@value) } + elsif ($letter eq 'Q<') + { return Value_Q(@value) } + else + { die "here letter $letter"} } sub outer @@ -412,7 +430,7 @@ sub outer my $cb2 = shift ; - myRead(my $buff, $size); + myRead(my $buff, $size); my (@value) = unpack $unpack, $buff; my $hex = Value($unpack, @value); @@ -426,7 +444,7 @@ sub outer } $v = "'" . $v unless $v =~ /^'/; - $v .= "'" unless $v =~ /'$/; + $v .= "'" unless $v =~ /'$/; $hex .= " $v" ; } @@ -434,7 +452,7 @@ sub outer $cb2->(@value) if defined $cb2 ; - + return $value[0]; } @@ -465,45 +483,29 @@ sub out_V outer($name, 'V', 4, $cb1, $cb2); } -sub out_VV +sub out_Q { my $name = shift ; my $cb1 = shift ; my $cb2 = shift ; - outer($name, 'VV', 8, $cb1, $cb2); + outer($name, 'Q<', 8, $cb1, $cb2); } -# sub outSomeData -# { -# my $size = shift; -# my $message = shift; - -# my $size64 = U64::mkU64($size); - -# if ($size64->gt($ZERO)) { -# my $size32 = $size64->getLow(); -# if ($size64->gt($PAYLOADLIMIT) ) { -# out0 $size32, $message; -# } else { -# myRead(my $buffer, $size32 ); -# out $buffer, $message, xDump $buffer ; -# } -# } -# } - sub outSomeData { my $size = shift; my $message = shift; + my $redact = shift ; if ($size > 0) { if ($size > $PAYLOADLIMIT) { my $before = $FH->tell(); out0 $size, $message; - # printf "outSomeData %X %X $size %X\n", $before, $FH->tell(), $size; } else { myRead(my $buffer, $size ); + $buffer = "X" x $size + if $redact; out $buffer, $message, xDump $buffer ; } } @@ -541,62 +543,23 @@ sub Value_V sprintf "%08X", $v; } -sub unpackValue_VV -{ - my ($lo, $hi) = unpack ("V V", $_[0]); - Value_VV($lo, $hi); -} - -sub Value_U64 -{ - my $u64 = shift ; - Value_VV($u64->getLow(), $u64->getHigh()); -} - -sub Value_VV -{ - my $lo = defined $_[0] ? $_[0] : 0; - my $hi = defined $_[1] ? $_[1] : 0; - - if ($hi == 0) - { - sprintf "%016X", $lo; - } - else - { - sprintf("%08X", $hi) . - sprintf "%08X", $lo; - } -} - -sub Value_VV64 +sub unpackValue_Q { - my $buffer = shift; - - # This needs perl 5.10 - # return unpack "Q<", $buffer; - - my ($lo, $hi) = unpack ("V V" , $buffer); - no warnings 'uninitialized'; - return $hi * (0xFFFFFFFF+1) + $lo; + my $v = unpack ("Q<", $_[0]); + Value_Q($v); } -sub read_U64 +sub Value_Q { - my $b ; - myRead($b, 8); - my ($lo, $hi) = unpack ("V V" , $b); - no warnings 'uninitialized'; - return ($b, new U64 $hi, $lo); + my $v = shift ; + sprintf "%016X", $v; } -sub read_VV +sub read_Q { my $b ; - myRead($b, 8); - my ($lo, $hi) = unpack ("V V" , $b); - no warnings 'uninitialized'; - return ($b, $hi * (0xFFFFFFFF+1) + $lo); + myRead($b, 8); + return ($b, unpack ("Q<" , $b)); } sub read_V @@ -621,27 +584,99 @@ sub read_C return ($b, unpack "C", $b); } +sub seekTo +{ + my $offset = shift ; + my $loc = shift ; + + $loc = SEEK_SET + if ! defined $loc ; -my $opt_verbose = 0; -while (@ARGV && $ARGV[0] =~ /^-/) + $FH->seek($offset, $loc); + $OFFSET = $FH->tell(); +} + +sub scanForSignature { - my $opt = shift; - - if ($opt =~ /^-h/i) - { - Usage(); - exit; - } - elsif ($opt =~ /^-v/i) + my %sigs = + map { $_ => 1 } + map { substr $_, 2, 2 } # don't want the initial "PK" + map { pack "V", $_ } + ( + ZIP_LOCAL_HDR_SIG , + ZIP_DATA_HDR_SIG , + ZIP_CENTRAL_HDR_SIG , + ZIP_END_CENTRAL_HDR_SIG , + ZIP64_END_CENTRAL_REC_HDR_SIG , + ZIP64_END_CENTRAL_LOC_HDR_SIG , + # ZIP_ARCHIVE_EXTRA_DATA_SIG , + # ZIP_DIGITAL_SIGNATURE_SIG , + # ZIP_ARCHIVE_EXTRA_DATA_RECORD_SIG , + ); + + my $start = $FH->tell(); + + my $last = ''; + my $offset = 0; + my $buffer ; + BUFFER: + while ($FH->read($buffer, 1024 * 1000)) { - $opt_verbose = 1; - } - else { - Usage(); + my $combine = $last . $buffer ; + + my $ix = 0; + while (1) + { + $ix = index($combine, "PK", $ix) ; + + if ($ix == -1) + { + $last = ''; + next BUFFER; + } + + my $rest = substr($combine, $ix + 2, 2); + + if (! $sigs{$rest}) + { + $ix += 2; + next; + } + + # possible match + my $here = $FH->tell(); + seekTo($here - length($combine) + $ix); + + return 1; + } + + $last = substr($combine, $ix+4); } + + return 0; } -Usage() unless @ARGV == 1; +my $is64In32 = 0; + +my $opt_verbose = 0; +my $opt_scan = 0; +my $opt_Redact = 0; +my $opt_utc = 0; + + +$Getopt::Long::bundling = 1 ; + +GetOptions("h" => \&Usage, + "v" => \$opt_verbose, + "scan" => \$opt_scan, + "redact" => \$opt_Redact, + "utc" => \$opt_utc, + "version" => sub { print "$VERSION\n"; exit }, + ) + or Usage("Invalid command line option\n"); + + +Usage("No zipfile") unless @ARGV == 1; my $filename = shift @ARGV; @@ -651,17 +686,13 @@ die "$filename does not exist\n" die "$filename not a standard file\n" unless -f $filename ; -$FH = new IO::File "<$filename" +$FH = IO::File->new( "<$filename" ) or die "Cannot open $filename: $!\n"; -my $FILELEN = -s $filename ; -$TRAILING = -s $filename ; -$NIBBLES = U64::nibbles(-s $filename) ; -#$NIBBLES = int ($NIBBLES / 4) + ( ($NIBBLES % 4) ? 1 : 0 ); -#$NIBBLES = 4 * $NIBBLES; -# Minimum of 4 nibbles -$NIBBLES = 4 if $NIBBLES < 4 ; +my $FILELEN = -s $filename ; +$TRAILING = -s $filename ; +$NIBBLES = nibbles(-s $filename) ; die "$filename too short to be a zip file\n" if $FILELEN < 22 ; @@ -678,18 +709,65 @@ if(0) $FH->seek(0, SEEK_SET) ; } +my @Messages = (); + +if ($opt_scan) +{ + my $foundCentralHeader = 0; + my $lastEndsAt = 0; + + while(scanForSignature()) + { + my $here = $FH->tell(); + + my ($buffer, $signature) = read_V(); + + # check for an APK header directly before the first central header + if ($signature == ZIP_CENTRAL_HDR_SIG && $foundCentralHeader == 0) + { + $foundCentralHeader = 1; + + ($START_APK, $APK, $APK_LEN) = chckForAPKSigningBlock($FH, $here) ; + + if ($START_APK) + { + seekTo($lastEndsAt+4); + + scanApkBlock(); + seekTo($here); + next; + } + + seekTo($here + 4); + } + + my $handler = $Lookup{$signature}; + $handler->($signature, $buffer); + + $lastEndsAt = $FH->tell(); + + seekTo($here + 4) ; + } + + dislayMessages(); + exit; + +} -our ($CdExists, @CentralDirectory) = scanCentralDirectory($FH); +our ($CdExists, $CdOffset, @CentralDirectory) = scanCentralDirectory($FH); die "No Central Directory records found\n" if ! $CdExists ; -$OFFSET->reset(); +$OFFSET = 0 ; $FH->seek(0, SEEK_SET) ; outSomeData($START, "PREFIX DATA") if defined $START && $START > 0 ; +my $skippedFrom = 0 ; +my $skippedContent = 0 ; + while (1) { last if $FH->eof(); @@ -712,8 +790,8 @@ while (1) # Should be at offset that central directory says my $locOffset = $CentralDirectory[0][0]; my $delta = $locOffset - $here ; - - if ($here < $locOffset ) { + + if ($here + 4 == $locOffset ) { for (0 .. 3) { $FH->ungetc(ord(substr($buffer, $_, 1))) } @@ -722,18 +800,66 @@ while (1) } } - printf "\n\nUnexpecded END at offset %08X, value %s\n", $here, Value_V($signature); - last; + + if ($here < $CdOffset) + { + if ($APK) + { + scanApkBlock(); + next; + } + + # next + # if scanForSignature() ; + + $skippedFrom = $FH->tell() ; + $skippedContent = $CdOffset - $skippedFrom ; + + printf "\nWARNING!\nZip local header not found at offset 0x%X\n", $skippedFrom; + printf "Skipping 0x%x bytes to Central Directory...\n", $skippedContent; + + push @Messages, + sprintf("Expected Zip header not found at offset 0x%X, ", $skippedFrom) . + sprintf("skipped 0x%X bytes\n", $skippedContent); + + seekTo($CdOffset); + + next; + } + else + { + printf "\n\nUnexpected END at offset %08X, value %s\n", $here, Value_V($signature); + + last; + } } $ZIP64 = 0 if $signature != ZIP_DATA_HDR_SIG ; $handler->($signature, $buffer); } -print "Done\n"; + +dislayMessages(); exit ; +sub dislayMessages +{ + $SEEN->short_summary(); + + $SEEN->summary(); + + + if (@Messages) + { + my $count = scalar @Messages ; + print "\nWARNINGS\n\n"; + print "* $_\n" for @Messages ; + } + + print "Done\n"; +} + sub compressionMethod { my $id = shift ; @@ -742,18 +868,25 @@ sub compressionMethod sub LocalHeader { - my $signature = shift ; - my $data = shift ; - + my $signature = shift ; + my $data = shift ; + + my $from_offset = $FH->tell() - 4; + print "\n"; ++ $LocalHeaderCount; - out $data, "LOCAL HEADER #" . sprintf("%X", $LocalHeaderCount) , Value_V($signature); + my $hexHdrCount = sprintf("%X", $LocalHeaderCount) ; + out $data, "LOCAL HEADER #$hexHdrCount" , Value_V($signature); my $buffer; - my ($loc, $CDcompressedLength) = @{ shift @CentralDirectory }; - # print "LocalHeader loc $loc CDL $CDcompressedLength\n"; - # TODO - add test to check that the loc from central header matches + my ($loc, $CDcompressedLength, $cdZip64, $zip64Sizes, $cdIndex, $cdEntryOffset) ; + if (! $opt_scan) + { + ($loc, $CDcompressedLength, $cdZip64, $zip64Sizes, $cdIndex, $cdEntryOffset) = @{ shift @CentralDirectory } ; + # my $cdi = sprintf("%X", $cdIndex) ; + # out1 "CENTRAL HEADER #$cdi", sprintf "Offset %s\n", Value_Q($cdEntryOffset); + } out_C "Extract Zip Spec", \&decodeZipVer; out_C "Extract OS", \&decodeOS; @@ -762,11 +895,11 @@ sub LocalHeader my ($bcm, $compressedMethod) = read_v(); out $bgp, "General Purpose Flag", Value_v($gpFlag) ; - GeneralPurposeBits($compressedMethod, $gpFlag); + GeneralPurposeBits($compressedMethod, $gpFlag); out $bcm, "Compression Method", compressionMethod($compressedMethod) ; - out_V "Last Mod Time", sub { scalar getTime(_dosToUnixTime($_[0])) }; + out_V "Last Mod Time", sub { getTime(_dosToUnixTime($_[0])) }; my $crc = out_V "CRC"; my $compressedLength = out_V "Compressed Length"; @@ -776,9 +909,9 @@ sub LocalHeader my $filename ; myRead($filename, $filenameLength); - out $filename, "Filename", "'". $filename . "'"; + outputFilename($filename); - my $cl64 = new U64 $compressedLength ; + my $cl64 = $compressedLength; my %ExtraContext = (); if ($extraLength) { @@ -788,6 +921,29 @@ sub LocalHeader walkExtra($extraLength, \%ExtraContext); } + + my @msg ; + # if ($cdZip64 && ! $ZIP64) + # { + # # Central directory said this was Zip64 + # # some zip files don't have the Zip64 field in the local header + # # seems to be a streaming issue. + # push @msg, "Missing Zip64 extra field in Local Header #$hexHdrCount\n"; + + # if (! $zip64Sizes) + # { + # # Central has a ZIP64 entry that doesn't have sizes + # # Local doesn't have a Zip 64 at all + # push @msg, "Unzip may complain about 'overlapped components' #$hexHdrCount\n"; + # } + # else + # { + # $ZIP64 = 1 + # } + # } + + + my $size = 0; $size = printAes(\%ExtraContext) if $compressedMethod == 99 ; @@ -795,13 +951,13 @@ sub LocalHeader $size += printLzmaProperties() if $compressedMethod == ZIP_CM_LZMA ; - # $CDcompressedLength->subtract($size) - # if $size ; + $CDcompressedLength = $compressedLength + if $opt_scan ; + $CDcompressedLength -= $size; - - # if ($CDcompressedLength->getHigh() || $CDcompressedLength->getLow()) { + if ($CDcompressedLength) { - outSomeData($CDcompressedLength, "PAYLOAD") ; + outSomeData($CDcompressedLength, "PAYLOAD", $opt_Redact) ; } if ($compressedMethod == 99) { @@ -809,14 +965,51 @@ sub LocalHeader myRead($auth, 10); out $auth, "AES Auth", hexDump($auth); } + + print "WARNING: $_" + for @msg; + + push @Messages, @msg ; + + + # $SEEN->save("LOCAL HEADER #" . sprintf("%X", $LocalHeaderCount), $filename, $from_offset, $from_offset + $CDcompressedLength); +} + +sub redactFilename +{ + my $filename = shift; + + # Redact everything apart from directory seperators + $filename =~ s([^/])(X)g + if $opt_Redact; + + return $filename; } +sub outputFilename +{ + my $filename = shift; + + $filename = redactFilename($filename) ; + + if (length $filename > 256) + { + my $f = substr($filename, 0, 256) ; + out $f, "Filename", "'". $f . "' ..."; + } + else + { + out $filename, "Filename", "'". $filename . "'"; + } +} sub CentralHeader { my $signature = shift ; - my $data = shift ; - + my $data = shift ; + + my $from_offset = $FH->tell() - 4; + ++ $CentralHeaderCount; print "\n"; out $data, "CENTRAL HEADER #" . sprintf("%X", $CentralHeaderCount) . "", Value_V($signature); @@ -824,18 +1017,18 @@ sub CentralHeader out_C "Created Zip Spec", \&decodeZipVer; out_C "Created OS", \&decodeOS; - out_C "Extract Zip Spec", \&decodeZipVer; - out_C "Extract OS", \&decodeOS; + out_C "Extract Zip Spec", \&decodeZipVer; + out_C "Extract OS", \&decodeOS; my ($bgp, $gpFlag) = read_v(); my ($bcm, $compressedMethod) = read_v(); out $bgp, "General Purpose Flag", Value_v($gpFlag) ; - GeneralPurposeBits($compressedMethod, $gpFlag); + GeneralPurposeBits($compressedMethod, $gpFlag); out $bcm, "Compression Method", compressionMethod($compressedMethod) ; - out_V "Last Mod Time", sub { scalar getTime(_dosToUnixTime($_[0])) }; + out_V "Last Mod Time", sub { getTime(_dosToUnixTime($_[0])) }; my $crc = out_V "CRC"; my $compressedLength = out_V "Compressed Length"; @@ -849,32 +1042,36 @@ sub CentralHeader out1 "[Bit 0]", $int_file_attrib & 1 ? "1 Text Data" : "0 'Binary Data'"; my $ext_file_attrib = out_V "Ext File Attributes"; - out1 "[Bit 0]", "Read-Only" + out1 "[Bit 0]", "Read-Only" if $ext_file_attrib & 0x01 ; - out1 "[Bit 1]", "Hidden" + out1 "[Bit 1]", "Hidden" if $ext_file_attrib & 0x02 ; - out1 "[Bit 2]", "System" + out1 "[Bit 2]", "System" if $ext_file_attrib & 0x04 ; - out1 "[Bit 3]", "Label" + out1 "[Bit 3]", "Label" if $ext_file_attrib & 0x08 ; - out1 "[Bit 4]", "Directory" + out1 "[Bit 4]", "Directory" if $ext_file_attrib & 0x10 ; - out1 "[Bit 5]", "Archive" + out1 "[Bit 5]", "Archive" if $ext_file_attrib & 0x20 ; my $lcl_hdr_offset = out_V "Local Header Offset"; my $filename ; myRead($filename, $filenameLength); - out $filename, "Filename", "'". $filename . "'"; + outputFilename($filename); + + + my %ExtraContext = ( CRC => $crc, + LocalHdrOffset => $lcl_hdr_offset, + CompressedLength => $compressedLength); - my %ExtraContext = (); if ($extraLength) { my @z64 = ($uncompressedLength, $compressedLength, $lcl_hdr_offset, $disk_start); $ExtraContext{Zip64} = \@z64 ; $ExtraContext{InCentralDir} = 1; - walkExtra($extraLength, \%ExtraContext); + walkExtra($extraLength, \%ExtraContext); } if ($comment_length) @@ -883,30 +1080,33 @@ sub CentralHeader myRead($comment, $comment_length); out $comment, "Comment", "'". $comment . "'"; } + + + $SEEN->save("CENTRAL HEADER ref Local #" . sprintf("%X", $CentralHeaderCount), $filename, \%ExtraContext) ; } sub decodeZipVer { my $ver = shift ; - + my $sHi = int($ver /10) ; my $sLo = $ver % 10 ; - - #out1 "Zip Spec", "$sHi.$sLo"; - "$sHi.$sLo"; + + #out1 "Zip Spec", "$sHi.$sLo"; + "$sHi.$sLo"; } sub decodeOS { my $ver = shift ; - + $OS_Lookup{$ver} || "Unknown" ; } sub Zip64EndCentralHeader { - my $signature = shift ; - my $data = shift ; + my $signature = shift ; + my $data = shift ; print "\n"; out $data, "ZIP64 END CENTRAL DIR RECORD", Value_V($signature); @@ -914,9 +1114,9 @@ sub Zip64EndCentralHeader my $buff; myRead($buff, 8); - out $buff, "Size of record", unpackValue_VV($buff); + out $buff, "Size of record", unpackValue_Q($buff); - my $size = Value_VV64($buff); + my $size = unpack "Q<", $buff; out_C "Created Zip Spec", \&decodeZipVer; out_C "Created OS", \&decodeOS; @@ -924,35 +1124,37 @@ sub Zip64EndCentralHeader out_C "Extract OS", \&decodeOS; out_V "Number of this disk"; out_V "Central Dir Disk no"; - out_VV "Entries in this disk"; - out_VV "Total Entries"; - out_VV "Size of Central Dir"; - out_VV "Offset to Central dir"; + out_Q "Entries in this disk"; + out_Q "Total Entries"; + out_Q "Size of Central Dir"; + out_Q "Offset to Central dir"; - # TODO - - die "Unsupported Size ($size) in Zip64EndCentralHeader\n" - if $size != 44; + # TODO - + if ($size != 44) + { + push @Messages, "Unsupported Size field in Zip64EndCentralHeader: should be 44, got $size\n" + } } sub Zip64EndCentralLocator { my $signature = shift ; - my $data = shift ; - + my $data = shift ; + print "\n"; out $data, "ZIP64 END CENTRAL DIR LOCATOR", Value_V($signature); - + out_V "Central Dir Disk no"; - out_VV "Offset to Central dir"; - out_V "Total no of Disks"; + out_Q "Offset to Central dir"; + out_V "Total no of Disks"; } sub EndCentralHeader { - my $signature = shift ; - my $data = shift ; - + my $signature = shift ; + my $data = shift ; + print "\n"; out $data, "END CENTRAL HEADER", Value_V($signature); @@ -966,31 +1168,31 @@ sub EndCentralHeader if ($comment_length) { - my $comment ; + my $comment ; myRead($comment, $comment_length); out $comment, "Comment", "'$comment'"; - } + } } sub DataHeader { - my $signature = shift ; - my $data = shift ; - + my $signature = shift ; + my $data = shift ; + print "\n"; out $data, "STREAMING DATA HEADER", Value_V($signature); - + out_V "CRC"; - + if ($ZIP64) { - out_VV "Compressed Length" ; - out_VV "Uncompressed Length" ; + out_Q "Compressed Length" ; + out_Q "Uncompressed Length" ; } else { out_V "Compressed Length" ; - out_V "Uncompressed Length" ; + out_V "Uncompressed Length" ; } } @@ -1000,8 +1202,8 @@ sub GeneralPurposeBits my $method = shift; my $gp = shift; - out1 "[Bit 0]", "1 'Encryption'" if $gp & ZIP_GP_FLAG_ENCRYPTED_MASK; - + out1 "[Bit 0]", "1 'Encryption'" if $gp & ZIP_GP_FLAG_ENCRYPTED_MASK; + my %lookup = ( 0 => "Normal Compression", 1 => "Maximum Compression", @@ -1011,9 +1213,9 @@ sub GeneralPurposeBits if ($method == ZIP_CM_DEFLATE) { - my $mid = $gp & 0x03; - - out1 "[Bits 1-2]", "$mid '$lookup{$mid}'"; + my $mid = ($gp >> 1) & 0x03 ; + + out1 "[Bits 1-2]", "$mid '$lookup{$mid}'"; } if ($method == ZIP_CM_LZMA) @@ -1025,23 +1227,22 @@ sub GeneralPurposeBits out1 "[Bit 1]", "0 'LZMA EOS Marker Not Present'" ; } } - + if ($method == ZIP_CM_IMPLODE) # Imploding { - out1 "[Bit 1]", ($gp & 1 ? "1 '8k" : "0 '4k") . " Sliding Dictionary'" ; - out1 "[Bit 2]", ($gp & 2 ? "1 '3" : "0 '2" ) . " Shannon-Fano - Trees'" ; - } - + out1 "[Bit 1]", ($gp & (1 << 1) ? "1 '8k" : "0 '4k") . " Sliding Dictionary'" ; + out1 "[Bit 2]", ($gp & (2 << 1) ? "1 '3" : "0 '2" ) . " Shannon-Fano Trees'" ; + } + out1 "[Bit 3]", "1 'Streamed'" if $gp & ZIP_GP_FLAG_STREAMING_MASK; out1 "[Bit 4]", "1 'Enhanced Deflating'" if $gp & 1 << 4; out1 "[Bit 5]", "1 'Compressed Patched'" if $gp & 1 << 5 ; out1 "[Bit 6]", "1 'Strong Encryption'" if $gp & ZIP_GP_FLAG_STRONG_ENCRYPTED_MASK; - out1 "[Bit 11]", "1 'Language Encoding'" if $gp & ZIP_GP_FLAG_LANGUAGE_ENCODING; - out1 "[Bit 12]", "1 'Pkware Enhanced Compression'" if $gp & 1 <<12 ; - out1 "[Bit 13]", "1 'Encrypted Central Dir'" if $gp & 1 <<13 ; - - return (); + out1 "[Bit 11]", "1 'Language Encoding'" if $gp & ZIP_GP_FLAG_LANGUAGE_ENCODING; + out1 "[Bit 12]", "1 'Pkware Enhanced Compression'" if $gp & 1 <<12 ; + out1 "[Bit 13]", "1 'Encrypted Central Dir'" if $gp & 1 <<13 ; + + return (); } @@ -1051,13 +1252,8 @@ sub seekSet my $size = $_[1]; use Fcntl qw(SEEK_SET); - if (ref $size eq 'U64') { - seek($fh, $size->get64bit(), SEEK_SET); - } - else { - seek($fh, $size, SEEK_SET); - } - + seek($fh, $size, SEEK_SET); + } sub skip @@ -1066,13 +1262,8 @@ sub skip my $size = $_[1]; use Fcntl qw(SEEK_CUR); - if (ref $size eq 'U64') { - seek($fh, $size->get64bit(), SEEK_CUR); - } - else { - seek($fh, $size, SEEK_CUR); - } - + seek($fh, $size, SEEK_CUR); + } @@ -1109,50 +1300,73 @@ sub myRead sub walkExtra { my $XLEN = shift; - my $context = shift; + my $context = shift; my $buff ; my $offset = 0 ; - + my $id; my $subLen; my $payload ; - - my $count = 0 ; - - if ($XLEN < ZIP_EXTRA_SUBFIELD_ID_SIZE + ZIP_EXTRA_SUBFIELD_LEN_SIZE) - { - # Android zipalign is prime candidate for this non-standard extra field. - myRead($payload, $XLEN); - my $data = hexDump($payload); - - out $payload, "Malformed Extra Data", $data; - return undef; - } + my $count = 0 ; while ($offset < $XLEN) { ++ $count; - - return undef - if $offset + ZIP_EXTRA_SUBFIELD_HEADER_SIZE > $XLEN ; - myRead($id, ZIP_EXTRA_SUBFIELD_ID_SIZE); + # Detect if there is not enough data for an extra ID and length. + # Android zipalign and zipflinger are prime candidates for these + # non-standard extra sub-fields. + my $remaining = $XLEN - $offset; + if ($remaining < ZIP_EXTRA_SUBFIELD_HEADER_SIZE) { + # There is not enough left. + # Consume whatever is there and return so parsing + # can continue. + myRead($payload, $remaining); + my $data = hexDump($payload); + + if ($payload =~ /^\x00+$/) + { + out $payload, "Null Padding in Extra"; + } + else + { + out $payload, "Malformed Extra Data", $data; + } + + return undef; + } + + myRead($id, ZIP_EXTRA_SUBFIELD_ID_SIZE); $offset += ZIP_EXTRA_SUBFIELD_ID_SIZE; my $lookID = unpack "v", $id ; - my ($who, $decoder) = @{ defined $Extras{$lookID} ? $Extras{$lookID} : ['', undef] }; - #my ($who, $decoder) = @{ $Extras{unpack "v", $id} || ['', undef] }; - + if ($lookID == 0) + { + # check for null padding at end of extra + my $here = $FH->tell(); + my $rest; + myRead($rest, $XLEN - $offset); + if ($rest =~ /^\x00+$/) + { + out $id . $rest, "Null Padding in Extra"; + return undef; + } + + seekTo($here); + } + + my ($who, $decoder) = @{ $Extras{$lookID} // ['', undef ] }; + $who = "$id: $who" if $id =~ /\w\w/ ; - $who = "'$who'"; + $who = "'$who'"; out $id, "Extra ID #" . Value_v($count), unpackValue_v($id) . " $who" ; - - myRead($buff, ZIP_EXTRA_SUBFIELD_LEN_SIZE); - $offset += ZIP_EXTRA_SUBFIELD_LEN_SIZE; - + + myRead($buff, ZIP_EXTRA_SUBFIELD_LEN_SIZE); + $offset += ZIP_EXTRA_SUBFIELD_LEN_SIZE; + $subLen = unpack("v", $buff); out2 $buff, "Length", Value_v($subLen) ; @@ -1161,68 +1375,71 @@ sub walkExtra if (! defined $decoder) { - myRead($payload, $subLen); - my $data = hexDump($payload); - - out2 $payload, "Extra Payload", $data; + if ($subLen) + { + myRead($payload, $subLen); + my $data = hexDump($payload); + + out2 $payload, "Extra Payload", $data; + } } else { $decoder->($subLen, $context) ; } - + $offset += $subLen ; } - + return undef ; } -sub full32 +sub full32 { - return $_[0] == 0xFFFFFFFF ; + return $_[0] == MAX32 ; } sub decode_Zip64 { my $len = shift; my $context = shift; - - my $z64Data = $context->{Zip64}; + + my $z64Data = $context->{Zip64}; + my $inCentralHdr = $context->{InCentralDir} ; + my $inLocalHdr = ! $inCentralHdr ; $ZIP64 = 1; - if (full32 $z64Data->[0] ) { - out_VV " Uncompressed Size"; + if ($inLocalHdr || full32 $z64Data->[0]) { + out_Q " Uncompressed Size"; } - if (full32 $z64Data->[1] ) { - out_VV " Compressed Size"; + if ($inLocalHdr || full32 $z64Data->[1]) { + $context->{CompressedLength} = out_Q " Compressed Size"; } if (full32 $z64Data->[2] ) { - out_VV " Offset to Local Dir"; + $context->{LocalHdrOffset} = out_Q " Offset to Local Dir"; } if ($z64Data->[3] == 0xFFFF ) { - out_V " Disk Number"; + out_V " Disk Number"; } } sub Ntfs2Unix { + my $m = shift; my $v = shift; - my $u64 = shift; # NTFS offset is 19DB1DED53E8000 - my $hex = Value_U64($u64) ; - my $NTFS_OFFSET = new U64 0x19DB1DE, 0xD53E8000 ; - $u64->subtract($NTFS_OFFSET); - my $elapse = $u64->get64bit(); - my $ns = ($elapse % 10000000) * 100; - $elapse = int ($elapse/10000000); - return "$hex '" . localtime($elapse) . + my $hex = Value_Q($v) ; + $v -= 0x19DB1DED53E8000 ; + my $ns = ($v % 10000000) * 100; + my $elapse = int ($v/10000000); + return "$hex '" . getT($elapse) . " " . sprintf("%0dns'", $ns); } @@ -1234,46 +1451,56 @@ sub decode_NTFS_Filetimes out_V " Reserved"; out_v " Tag1"; out_v " Size1" ; - - my ($m, $s1) = read_U64; + + my ($m, $s1) = read_Q; out $m, " Mtime", Ntfs2Unix($m, $s1); - my ($c, $s2) = read_U64; + my ($a, $s3) = read_Q; + out $m, " Atime", Ntfs2Unix($m, $s3); + + my ($c, $s2) = read_Q; out $c, " Ctime", Ntfs2Unix($m, $s2); +} - my ($a, $s3) = read_U64; - out $m, " Atime", Ntfs2Unix($m, $s3); +sub getT +{ + my $time = shift ; + + if ($opt_utc) + { return scalar gmtime($time) } + else + { return scalar localtime($time) } } sub getTime { my $time = shift ; - return "'" . localtime($time) . "'" ; + return "'" . getT($time) . "'"; } sub decode_UT { my $len = shift; my $context = shift; - + my ($data, $flags) = read_C(); my $f = Value_C $flags; $f .= " mod" if $flags & 1; $f .= " access" if $flags & 2; $f .= " change" if $flags & 4; - + out $data, " Flags", "'$f'"; - + -- $len; - + if ($flags & 1) { my ($data, $time) = read_V(); out2 $data, "Mod Time", Value_V($time) . " " . getTime($time) ; - + $len -= 4 ; } @@ -1281,15 +1508,15 @@ sub decode_UT if ($flags & 2 && $len > 0 ) { my ($data, $time) = read_V(); - + out2 $data, "Access Time", Value_V($time) . " " . getTime($time) ; $len -= 4 ; } - + if ($flags & 4 && $len > 0) { my ($data, $time) = read_V(); - + out2 $data, "Change Time", Value_V($time) . " " . getTime($time) ; } } @@ -1298,38 +1525,89 @@ sub decode_UT sub decode_AES { + # ref https://www.winzip.com/win/es/aes_info.html + my $len = shift; my $context = shift; return if $len == 0 ; - + my %lookup = ( 1 => "AE-1", 2 => "AE-2"); out_v " Vendor Version", sub { $lookup{$_[0]} || "Unknown" } ; - - my $id ; + + my $id ; myRead($id, 2); out $id, " Vendor ID", unpackValue_v($id) . " '$id'"; - + my %strengths = (1 => "128-bit encryption key", 2 => "192-bit encryption key", 3 => "256-bit encryption key", ); - - my $strength = out_C " Encryption Strength", sub {$strengths{$_[0]} || "Unknown" } ; + + my $strength = out_C " Encryption Strength", sub {$strengths{$_[0]} || "Unknown" } ; my ($bmethod, $method) = read_v(); out $bmethod, " Compression Method", compressionMethod($method) ; - $context->{AesStrength} = $strength ; + $context->{AesStrength} = $strength ; +} + +sub decode_GrowthHint +{ + my $len = shift; + my $context = shift; + my $inCentralHdr = $context->{InCentralDir} ; + + return if $len == 0 ; + + out_v " Signature" ; + out_v " Initial Value"; + + my $padding; + myRead($padding, $len - 4); + my $data = hexDump($padding); + + out2 $padding, "Padding", $data; +} + +sub decode_DataStreamAlignment +{ + my $len = shift; + my $context = shift; + my $inCentralHdr = $context->{InCentralDir} ; + + return if $len == 0 ; + + my ($data, $alignment) = read_v(); + + out $data, " Alignment", Value_v($alignment) ; + + my $recompress_value = $alignment & 0x8000 ? 1 : 0; + + my $recompressing = $recompress_value ? "True" : "False"; + $alignment &= 0x7FFF ; + my $hexAl = sprintf("%X", $alignment); + + out1 " [Bit 15]", "$recompress_value 'Recompress $recompressing'"; + out1 " [Bits 0-14]", "$hexAl 'Minimal Alignment $alignment'"; + + if (! $inCentralHdr && $len - 2 > 0) + { + my $padding; + myRead($padding, $len - 2); + + out2 $padding, "Padding", hexDump($padding); + } } + sub decode_UX { my $len = shift; my $context = shift; my $inCentralHdr = $context->{InCentralDir} ; - return if $len == 0 ; + return if $len == 0 ; my ($data, $time) = read_V(); out2 $data, "Access Time", Value_V($time) . " " . getTime($time) ; @@ -1339,7 +1617,7 @@ sub decode_UX if (! $inCentralHdr ) { out_v " UID" ; - out_v " GID"; + out_v " GID"; } } @@ -1348,9 +1626,9 @@ sub decode_Ux my $len = shift; my $context = shift; - return if $len == 0 ; + return if $len == 0 ; out_v " UID" ; - out_v " GID"; + out_v " GID"; } sub decodeLitteEndian @@ -1369,7 +1647,7 @@ sub decodeLitteEndian my $got = 0 ; my $shift = 0; - #hexDump + #hexDump #reverse #my @a =unpack "C*", $value; #@a = reverse @a; @@ -1379,7 +1657,7 @@ sub decodeLitteEndian { $got = ($got << 8) + $_ ; } - + return $got ; } @@ -1388,16 +1666,16 @@ sub decode_ux my $len = shift; my $context = shift; - return if $len == 0 ; + return if $len == 0 ; out_C " Version" ; - my $uidSize = out_C " UID Size"; + my $uidSize = out_C " UID Size"; myRead(my $data, $uidSize); out2 $data, "UID", decodeLitteEndian($data); - my $gidSize = out_C " GID Size"; + my $gidSize = out_C " GID Size"; myRead($data, $gidSize); out2 $data, "GID", decodeLitteEndian($data); - + } sub decode_Java_exe @@ -1412,13 +1690,13 @@ sub decode_up my $len = shift; my $context = shift; - + out_C " Version"; out_V " NameCRC32"; - + myRead(my $data, $len - 5); - - out $data, " UnicodeName", $data; + + out $data, " UnicodeName", $data; } sub decode_Xceed_unicode @@ -1427,17 +1705,34 @@ sub decode_Xceed_unicode my $context = shift; my $data ; - - # guess the fields used for this one + + # No public definition available, so guess the fields used for this one + # Data analysis based on output from Fiddler (https://www.telerik.com/fiddler), + # which uses this field + + # First 4 bytes appear to be "NUCX" all the time myRead($data, 4); - out $data, " ID", $data; + out $data, " ID", $data; + # Next 2 bytes contains a count of the remaining bytes/2 + # Probably the number of UTF-16 characters, including the + # optional NULL prefix out_v " Length"; - out_v " Null"; - - myRead($data, $len - 8); - - out $data, " UTF16LE Name", decode("UTF16LE", $data); + + # next is a UTF16 encode filename + # sometimes preceeded by a two Null bytes + + myRead($data, $len - 6); + + my $prefix = substr($data, 0, 2); + if ($prefix eq "\x00\x00") + { + # Found the Null prefix + out $prefix, " Null", '0000'; + substr($data, 0, 2) = ''; + } + + out $data, " UTF16LE Name", decode("UTF16LE", $data); } @@ -1446,18 +1741,18 @@ sub decode_NT_security my $len = shift; my $context = shift; my $inCentralHdr = $context->{InCentralDir} ; - + out_V " Uncompressed Size" ; - + if (! $inCentralHdr) { - + out_C " Version" ; - - out_v " Type"; - + + out_v " Type"; + out_V " NameCRC32" ; - - my $plen = $len - 4 - 1 - 2 - 4; + + my $plen = $len - 4 - 1 - 2 - 4; myRead(my $payload, $plen); out $plen, " Extra Payload", hexDump($payload); } @@ -1483,6 +1778,8 @@ sub decodeMVS sub printAes { + # ref https://www.winzip.com/win/es/aes_info.html + my $context = shift ; my %saltSize = ( @@ -1494,7 +1791,7 @@ sub printAes myRead(my $salt, $saltSize{$context->{AesStrength} }); out $salt, "AES Salt", hexDump($salt); myRead(my $pwv, 2); - out $pwv, "AES Pwd Ver", hexDump($pwv); + out $pwv, "AES Pwd Ver", hexDump($pwv); return $saltSize{$context->{AesStrength}} + 2 + 10; } @@ -1527,7 +1824,7 @@ sub printLzmaProperties out1 " PosStateBits", $PosStateBits; out1 " LiteralPosStateBits", $LiteralPosStateBits; out1 " LiteralContextBits", $LiteralContextBits; - + out_V "LZMA Dictionary Size"; # TODO - assumption that this is 5 @@ -1539,6 +1836,134 @@ sub printLzmaProperties return $len; } +sub readFromOffset +{ + # my $fh = shift; + my $offset = shift; + my $len = shift; + + seekTo($offset) ; + + my $buffer; + myRead($buffer, $len); + # $fh->read($buffer, $len) == $len + length $buffer == $len + or return ''; + + return $buffer; +} + +sub chckForAPKSigningBlock +{ + my $fh = shift; + my $cdOffset = shift; + + # APK Signing Block comes directy before the Central directory + + # If offset less than + # + # len1 8 + # id 4 + # kv with zero len 8 + # len1 8 + # magic 16 + # ---------- + # 44 + + return (0, 0, '') + if $cdOffset < 44; + + # Step 1 - 16 bytes before CD is literal string "APK Sig Block 42" + my $magicOffset = $cdOffset - 16; + my $buffer = readFromOffset($magicOffset, 16); + + return (0, 0, '') + if $buffer ne "APK Sig Block 42" ; + + # Step 2 - read the two length fields + # and check they are identical + $buffer = readFromOffset($cdOffset - 16 - 8, 8); + my $len2 = unpack("Q<", $buffer); + + return (0, 0, '') + if $len2 == 0 ; + + my $startApkOffset = $cdOffset - 8 - $len2 ; + + $buffer = readFromOffset($startApkOffset, 8); + my $len1 = unpack("Q<", $buffer); + + return (0, 0, '') + if $len1 != $len2; + + return ($startApkOffset, $cdOffset - 16 - 8, $buffer); +} + +sub scanApkBlock +{ + state $IDs = { + 0x7109871a => "APK Signature v2", + 0xf05368c0 => "APK Signature v3", + 0x42726577 => "Verity Padding Block", # from https://android.googlesource.com/platform/tools/apksig/+/master/src/main/java/com/android/apksig/internal/apk/ApkSigningBlockUtils.java + 0x6dff800d => "Source Stamp", + 0x504b4453 => "Dependency Info", + 0x71777777 => "APK Channel Block", + 0xff3b5998 => "Zero Block", + 0x2146444e => "Play Metadata", + } ; + + + seekTo($FH->tell() - 4) ; + print "\nAPK SIGNING BLOCK\n"; + + scanApkPadding(''); + out_Q "Block Length Copy #1"; + my $ix = 1; + + while ($FH->tell() < $APK - 8) + { + my ($bytes, $id, $len); + ($bytes, $len) = read_Q ; + out $bytes, "ID/Value Length #" . sprintf("%X", $ix), Value_Q($len); + + ($bytes, $id) = read_V; + + out $bytes, " ID", Value_V($id) . " '" . ($IDs->{$id} // 'Unknown ID') . "'"; + + outSomeData($len-4, " Value"); + ++ $ix; + } + + out_Q "Block Length Copy #2"; + + my $magic ; + myRead($magic, 16); + + out $magic, "Magic", qq['$magic']; +} + +sub scanApkPadding +{ + my $bytes = shift ; + + # padding + my $here = $FH->tell(); + my $got; + myRead($got, $APK - $here); + $got = $bytes . $got; + if ($got =~ /^(\x00+)($APK_LEN)?/) + { + my $len = length $1 ; + seekTo($here - length($bytes)); + outSomeData($len, "Null Padding"); + } + else + { + seekTo($here); + } + +} + sub scanCentralDirectory { my $fh = shift; @@ -1559,74 +1984,59 @@ sub scanCentralDirectory # Now walk the Central Directory Records my $buffer ; - while ($fh->read($buffer, 46) == 46 && + my $cdIndex = 0; + while ($fh->read($buffer, 46) == 46 && unpack("V", $buffer) == ZIP_CENTRAL_HDR_SIG) { + my $cdEntryOffset = $fh->tell() - 46; + ++ $cdIndex ; + my $compressedLength = unpack("V", substr($buffer, 20, 4)); my $uncompressedLength = unpack("V", substr($buffer, 24, 4)); my $filename_length = unpack("v", substr($buffer, 28, 2)); my $extra_length = unpack("v", substr($buffer, 30, 2)); my $comment_length = unpack("v", substr($buffer, 32, 2)); my $locHeaderOffset = unpack("V", substr($buffer, 42, 4)); - - $START = $locHeaderOffset - if ! defined $START; + my $cdZip64 = 0; + my $zip64Sizes = 0; skip($fh, $filename_length ) ; if ($extra_length) { $fh->read(my $extraField, $extra_length) ; - # $self->smartReadExact(\$extraField, $extra_length); + # $self->smartReadExact(\$extraField, $extra_length); # Check for Zip64 - # my $zip64Extended = findID("\x01\x00", $extraField); + # my SizesExtended = findID("\x01\x00", $extraField); my $zip64Extended = findID(0x0001, $extraField); - + if ($zip64Extended) { - if ($uncompressedLength == 0xFFFFFFFF) + $cdZip64 = 1; + + if ($uncompressedLength == MAX32) { - $uncompressedLength = Value_VV64 substr($zip64Extended, 0, 8, ""); - # $uncompressedLength = unpack "Q<", substr($zip64Extended, 0, 8, ""); + $uncompressedLength = unpack "Q<", substr($zip64Extended, 0, 8, ""); + $zip64Sizes = 1; } - if ($compressedLength == 0xFFFFFFFF) + if ($compressedLength == MAX32) { - $compressedLength = Value_VV64 substr($zip64Extended, 0, 8, ""); - # $compressedLength = unpack "Q<", substr($zip64Extended, 0, 8, ""); - } - if ($locHeaderOffset == 0xFFFFFFFF) + $compressedLength = unpack "Q<", substr($zip64Extended, 0, 8, ""); + $zip64Sizes = 1; + + } + if ($locHeaderOffset == MAX32) { - $locHeaderOffset = Value_VV64 substr($zip64Extended, 0, 8, ""); - # $locHeaderOffset = unpack "Q<", substr($zip64Extended, 0, 8, ""); - } - } - } - - my $got = [$locHeaderOffset, $compressedLength] ; - - # my $v64 = new U64 $compressedLength ; - # my $loc64 = new U64 $locHeaderOffset ; - # my $got = [$loc64, $v64] ; - - # if (full32 $compressedLength || full32 $locHeaderOffset) { - # $fh->read($buffer, $extra_length) ; - # # TODO - fix this - # die "xxx $offset $comment_length $filename_length $extra_length" . length($buffer) - # if length($buffer) != $extra_length; - # $got = get64Extra($buffer, full32($uncompressedLength), - # $v64, - # $loc64); - - # # If not Zip64 extra field, assume size is 0xFFFFFFFF - # #$v64 = $got if defined $got; - # } - # else { - # skip($fh, $extra_length) ; - # } + $locHeaderOffset = unpack "Q<", substr($zip64Extended, 0, 8, ""); + } + } + } + + my $got = [$locHeaderOffset, $compressedLength, $cdZip64, $zip64Sizes, $cdIndex, $cdEntryOffset] ; skip($fh, $comment_length ) ; - + push @CD, $got ; } @@ -1634,7 +2044,12 @@ sub scanCentralDirectory # @CD = sort { $a->[0]->cmp($b->[0]) } @CD ; @CD = sort { $a->[0] <=> $b->[0] } @CD ; - return (1, @CD); + + # Set the first Local File Header offset. + $START = $CD[0]->[0] + if @CD ; + + return (1, $offset, @CD); } @@ -1643,19 +2058,22 @@ sub offsetFromZip64 my $fh = shift ; my $here = shift; - $fh->seek($here - 20, SEEK_SET) + $fh->seek($here - 20, SEEK_SET) # TODO - fix this or die "xx $!" ; my $buffer; my $got = 0; - ($got = $fh->read($buffer, 20)) == 20 + ($got = $fh->read($buffer, 20)) == 20 # TODO - fix this - or die "xxx $here $got $!" ; + or die "xxx + + + $here $got $!" ; if ( unpack("V", $buffer) == ZIP64_END_CENTRAL_LOC_HDR_SIG ) { - my $cd64 = Value_VV64 substr($buffer, 8, 8); - + my $cd64 = unpack "Q<", substr($buffer, 8, 8); + $fh->seek($cd64, SEEK_SET) ; $fh->read($buffer, 4) == 4 @@ -1667,22 +2085,20 @@ sub offsetFromZip64 $fh->read($buffer, 8) == 8 # TODO - fix this or die "xxx" ; - my $size = Value_VV64($buffer); + my $size = unpack "Q<", $buffer; $fh->read($buffer, $size) == $size # TODO - fix this or die "xxx" ; - my $cd64 = Value_VV64 substr($buffer, 36, 8); + my $cd64 = unpack "Q<", substr($buffer, 36, 8); return $cd64 ; } - - # TODO - fix this - die "zzz"; + + die "Cannot find 'Zip64 end of central directory record': 0x06054b50\nTry running with --scan option.\n" ; } - # TODO - fix this - die "zzz"; + die "Cannot find signature for 'Zip64 end of central directory locator': 0x07064b50 \nTry running with --scan option.\n" ; } use constant Pack_ZIP_END_CENTRAL_HDR_SIG => pack("V", ZIP_END_CENTRAL_HDR_SIG); @@ -1698,13 +2114,17 @@ sub findCentralDirectoryOffset $fh->seek(-22, SEEK_END) ; my $here = $fh->tell(); + my $is64bit = $here > MAX32; + my $over64bit = $here & (~ MAX32); + my $buffer; - $fh->read($buffer, 22) == 22 + $fh->read($buffer, 22) == 22 # TODO - fix this or die "xxx" ; - my $zip64 = 0; + my $zip64 = 0; my $centralDirOffset ; + if ( unpack("V", $buffer) == ZIP_END_CENTRAL_HDR_SIG ) { $centralDirOffset = unpack("V", substr($buffer, 16, 4)); } @@ -1721,7 +2141,7 @@ sub findCentralDirectoryOffset $seekTo = 0; $want = $fileLen ; } - $fh->seek( $seekTo, SEEK_SET) + $fh->seek( $seekTo, SEEK_SET) # TODO - fix this or die "xxx $!" ; my $got; @@ -1749,8 +2169,24 @@ sub findCentralDirectoryOffset } } - $centralDirOffset = offsetFromZip64($fh, $here) - if full32 $centralDirOffset ; + if (full32 $centralDirOffset) + { + $centralDirOffset = offsetFromZip64($fh, $here) + } + elsif ($is64bit) + { + # use-case is where a 64-bit zip file doesn't use the 64-bit + # extensions. + print "EOCD not 64-bit $centralDirOffset ($here)\n" ; + + push @Messages, + sprintf "Zip file > 4Gig. Expected 'Offset to Central Dir' to be 0xFFFFFFFF, got 0x%X\n", $centralDirOffset; + + $centralDirOffset += $over64bit; + $is64In32 = 1; + } + + ($START_APK, $APK, $APK_LEN) = chckForAPKSigningBlock($fh, $centralDirOffset); return $centralDirOffset ; } @@ -1768,7 +2204,7 @@ sub findID return undef if $offset + ZIP_EXTRA_SUBFIELD_HEADER_SIZE > $XLEN ; - my $id = substr($data, $offset, ZIP_EXTRA_SUBFIELD_ID_SIZE); + my $id = substr($data, $offset, ZIP_EXTRA_SUBFIELD_ID_SIZE); $id = unpack("v", $id); $offset += ZIP_EXTRA_SUBFIELD_ID_SIZE; @@ -1784,7 +2220,7 @@ sub findID $offset += $subLen ; } - + return undef ; } @@ -1804,271 +2240,155 @@ sub _dosToUnixTime use POSIX 'mktime'; + # Force mktime to return a UTC time + local $ENV{TZ} = "UTC"; + my $time_t = mktime( $sec, $min, $hour, $mday, $mon, $year, 0, 0, -1 ); return 0 if ! defined $time_t; return $time_t; } +sub nibbles +{ + my @nibbles = ( + [ 16 => 0x1000000000000000 ], + [ 15 => 0x100000000000000 ], + [ 14 => 0x10000000000000 ], + [ 13 => 0x1000000000000 ], + [ 12 => 0x100000000000 ], + [ 11 => 0x10000000000 ], + [ 10 => 0x1000000000 ], + [ 9 => 0x100000000 ], + [ 8 => 0x10000000 ], + [ 7 => 0x1000000 ], + [ 6 => 0x100000 ], + [ 5 => 0x10000 ], + [ 4 => 0x1000 ], + [ 4 => 0x100 ], + [ 4 => 0x10 ], + [ 4 => 0x1 ], + ); + my $value = shift ; -{ - package U64; - - use constant MAX32 => 0xFFFFFFFF ; - use constant HI_1 => MAX32 + 1 ; - use constant LOW => 0 ; - use constant HIGH => 1; - - sub new - { - my $class = shift ; - - my $high = 0 ; - my $low = 0 ; - - if (@_ == 2) { - $high = shift ; - $low = shift ; - } - elsif (@_ == 1) { - $low = shift ; - } - - bless [$low, $high], $class; - } - - sub newUnpack_V64 - { - my $string = shift; - - my ($low, $hi) = unpack "V V", $string ; - bless [ $low, $hi ], "U64"; - } - - sub newUnpack_V32 - { - my $string = shift; - - my $low = unpack "V", $string ; - bless [ $low, 0 ], "U64"; - } - - sub reset + for my $pair (@nibbles) { - my $self = shift; - $self->[HIGH] = $self->[LOW] = 0; - } + my ($count, $limit) = @{ $pair }; - sub clone - { - my $self = shift; - bless [ @$self ], ref $self ; + return $count + if $value >= $limit ; } +} - sub mkU64 - { - my $value = shift; - - return $value - if ref $value eq 'U64'; - - bless [ $value, 0 ], "U64" ; - } - sub getHigh - { - my $self = shift; - return $self->[HIGH]; - } +{ + package Seen; - sub getLow + sub new { - my $self = shift; - return $self->[LOW]; - } + my $class = shift ; - sub get32bit - { - my $self = shift; - return $self->[LOW]; - } + my %object = ( overlaps => [], + duplicates => [], + detail => [], + duplicate_count => 0, + overlap_count => 0, + ) ; - sub get64bit - { - my $self = shift; - # Not using << here because the result will still be - # a 32-bit value on systems where int size is 32-bits - return $self->[HIGH] * HI_1 + $self->[LOW]; + bless \%object, $class; } - sub add + sub save { - my $self = shift; - my $value = shift; - - if (ref $value eq 'U64') { - $self->[HIGH] += $value->[HIGH] ; - $value = $value->[LOW]; - } - - my $available = MAX32 - $self->[LOW] ; + my $self = shift ; + my $hdrId = shift; + my $name = shift; + my $extras = shift; - if ($value > $available) { - ++ $self->[HIGH] ; - $self->[LOW] = $value - $available - 1; - } - else { - $self->[LOW] += $value ; - } - - } + my $from_offset = $extras->{LocalHdrOffset}; + my $to_offset = $from_offset ; + $to_offset += $extras->{CompressedLength} - 1 ; - sub subtract - { - my $self = shift; - my $value = shift; - - if (ref $value eq 'U64') { + my $crc = $extras->{CRC}; - if ($value->[HIGH]) { - die "unsupport subtract option" - if $self->[HIGH] == 0 || - $value->[HIGH] > $self->[HIGH] ; + $name = ::redactFilename($name) ; - $self->[HIGH] -= $value->[HIGH] ; + for my $entry ( @{ $self->{detail} } ) + { + if ( $from_offset == $entry->{from} && $to_offset == $entry->{to} && $crc == $entry->{crc}) + { + $self->{duplicate_count} ++; + print "$hdrId: '$name' matches with $entry->{str}\n" } + elsif ( ($from_offset >= $entry->{from} && $from_offset <= $entry->{to} ) || + ($to_offset >= $entry->{from} && $to_offset <= $entry->{to} ) + ) + { + # die "overlap!" + # push @{ $self->{overlap} }, + $self->{overlap_count} ++; - $value = $value->[LOW] ; + print "$hdrId: '$name' overlaps with $entry->{str}\n"; + } } - if ($value > $self->[LOW]) { - -- $self->[HIGH] ; - $self->[LOW] = MAX32 - $value + $self->[LOW] + 1; - } - else { - $self->[LOW] -= $value; - } + # warn "ADD $from_offset $to_offset $hdrId: $name\n"; + push @{ $self->{detail} }, + { + from => $from_offset, + to => $to_offset, + length => $extras->{CompressedLength}, + id => $hdrId, + crc => $crc, + name => $name, + str => "$hdrId: '$name'", + } ; } - sub rshift + sub short_summary { my $self = shift; - my $count = shift; - for (1 .. $count) - { - $self->[LOW] >>= 1; - $self->[LOW] |= 0x80000000 - if $self->[HIGH] & 1 ; - $self->[HIGH] >>= 1; - } - } + my $duplicates = $self->{duplicate_count}; + push @Messages, "$duplicates duplicate entries" + if $duplicates; - sub is64bit - { - my $self = shift; - return $self->[HIGH] > 0 ; + my $overlaps = $self->{overlap_count}; + push @Messages, "$overlaps overlap entries" + if $overlaps; } - sub getPacked_V64 + sub summary { - my $self = shift; + my $self = shift ; - return pack "V V", @$self ; - } + # disable for now + return; - sub getPacked_V32 - { - my $self = shift; + print "\n"; + for my $entry ( sort { $a->{from}->cmp($b->{from}) } @{ $self->{detail} } ) - return pack "V", $self->[LOW] ; - } - - sub pack_V64 - { - my $low = shift; - - return pack "V V", $low, 0; - } - - sub max32 - { - my $self = shift; - return $self->[HIGH] == 0 && $self->[LOW] == MAX32; - } - - sub stringify - { - my $self = shift; - - return "High [$self->[HIGH]], Low [$self->[LOW]]"; - } - - sub equal - { - my $self = shift; - my $other = shift; - - return $self->[LOW] == $other->[LOW] && - $self->[HIGH] == $other->[HIGH] ; - } - - sub gt - { - my $self = shift; - my $other = shift; + { + my $from_offset = $entry->{from}; + my $to_offset = $entry->{to}; + my $hdrId = $entry->{id}; + my $name = $entry->{name}; + print "$hdrId\t" . $entry->{from} . "\n"; - return $self->cmp($other) > 0 ; - } - sub cmp - { - my $self = shift; - my $other = shift ; - - if ($self->[LOW] == $other->[LOW]) { - return $self->[HIGH] - $other->[HIGH] ; - } - else { - return $self->[LOW] - $other->[LOW] ; } } - - sub nibbles - { - my @nibbles = ( - [ 16 => HI_1 * 0x10000000 ], - [ 15 => HI_1 * 0x1000000 ], - [ 14 => HI_1 * 0x100000 ], - [ 13 => HI_1 * 0x10000 ], - [ 12 => HI_1 * 0x1000 ], - [ 11 => HI_1 * 0x100 ], - [ 10 => HI_1 * 0x10 ], - [ 9 => HI_1 * 0x1 ], - - [ 8 => 0x10000000 ], - [ 7 => 0x1000000 ], - [ 6 => 0x100000 ], - [ 5 => 0x10000 ], - [ 4 => 0x1000 ], - [ 3 => 0x100 ], - [ 2 => 0x10 ], - [ 1 => 0x1 ], - ); - my $value = shift ; - for my $pair (@nibbles) - { - my ($count, $limit) = @{ $pair }; - - return $count - if $value >= $limit ; - } - - } } sub Usage { + if (@_) + { + warn "$_\n" + for @_ ; + warn "\n"; + } + die < for details). +=item an optional hex dump of the item. + +=back + + +The program assumes a prior understanding of the internal structure of Zip +files. You should have a copy of the Zip +L file +at hand to help understand the output from this program. + +=head2 Default Behaviour + +By default the program expects to be given a well-formed zip file. It will +navigate the Zip file by first parsing the zip central directory at the end +of the file. If that is found, it will then walk through the zip records +starting at the beginning of the file. Any badly formed zip data structures +encountered are likely to terminate the program. + +If the program finds any structural problems with the zip file it will +print a summary at the end of the output report. The set of error cases +reported is very much a work in progress, so don't rely on this feature to +find all the possible errors in a zip file. If you have suggestions for +use-cases where this could be enhanced please consider creating an +enhancement request (see L<"SUPPORT">). + +Date/time fields are found in zip files are displayed in local time. Use +the C<--utc> option to display these fields in Coordinated Universal Time +(UTC). + +=head2 Scan-Mode + +If you do have a potentially corrupt zip file, particulatly where the +central directory at the end of the file is absent/incomplete, you can try +usng the C<--scan> option to search for zip records that are still present. + +When Scan-mode is enabled, the program will walk the zip file from the +start, blindly looking for the 4-byte signatures that preceed each of the +zip data structures. If it finds any of the recognised signatures it will +attempt to dump the associated zip record. For very large zip files, this +operation can take a long time to run. + +Note that the 4-byte signatures used in zip files can sometimes match with +random data stored in the zip file, so care is needed interpreting the +results. =head2 OPTIONS =over 5 +=item -h + +Display help + +=item --redact + +Obscure filenames in the output. Handy for the use case where the zip files +contains sensitive data that cannot be shared. + +=item --scan + +Walk the zip file loking for possible zip records. Can be error-prone. +See L<"Scan-Mode"> + +=item --utc + +By default, date/time fields are displayed in local time. Use this option +to display them in in Coordinated Universal Time (UTC). + =item -v -Enable Verbose mode +Enable Verbose mode. See L<"Verbose Output">. -=item -h +=item --version -Display help +Display version number of the program and exit. =back +=head2 Default Output By default zipdetails will output the details of the zip file in three columns. @@ -2141,14 +2534,111 @@ This contains a textual description of the field. =item Column 3 If the field contains a numeric value it will be displayed in hex. Zip -stored most numbers in little-endian format - the value displayed will have +stores most numbers in little-endian format - the value displayed will have the little-endian encoding removed. Next, is an optional description of what the value means. - =back +For example, assuming you have a zip file with two entries, like this + + $ unzip -l test.zip + Archive: setup/test.zip + Length Date Time Name + --------- ---------- ----- ---- + 6 2021-03-23 18:52 latters.txt + 6 2021-03-23 18:52 numbers.txt + --------- ------- + 12 2 files + +Running C will gives this output + + $ zipdetails test.zip + + 0000 LOCAL HEADER #1 04034B50 + 0004 Extract Zip Spec 0A '1.0' + 0005 Extract OS 00 'MS-DOS' + 0006 General Purpose Flag 0000 + 0008 Compression Method 0000 'Stored' + 000A Last Mod Time 5277983D 'Tue Mar 23 19:01:58 2021' + 000E CRC 0F8A149C + 0012 Compressed Length 00000006 + 0016 Uncompressed Length 00000006 + 001A Filename Length 000B + 001C Extra Length 0000 + 001E Filename 'letters.txt' + 0029 PAYLOAD abcde. + + 002F LOCAL HEADER #2 04034B50 + 0033 Extract Zip Spec 0A '1.0' + 0034 Extract OS 00 'MS-DOS' + 0035 General Purpose Flag 0000 + 0037 Compression Method 0000 'Stored' + 0039 Last Mod Time 5277983D 'Tue Mar 23 19:01:58 2021' + 003D CRC 261DAFE6 + 0041 Compressed Length 00000006 + 0045 Uncompressed Length 00000006 + 0049 Filename Length 000B + 004B Extra Length 0000 + 004D Filename 'numbers.txt' + 0058 PAYLOAD 12345. + + 005E CENTRAL HEADER #1 02014B50 + 0062 Created Zip Spec 1E '3.0' + 0063 Created OS 03 'Unix' + 0064 Extract Zip Spec 0A '1.0' + 0065 Extract OS 00 'MS-DOS' + 0066 General Purpose Flag 0000 + 0068 Compression Method 0000 'Stored' + 006A Last Mod Time 5277983D 'Tue Mar 23 19:01:58 2021' + 006E CRC 0F8A149C + 0072 Compressed Length 00000006 + 0076 Uncompressed Length 00000006 + 007A Filename Length 000B + 007C Extra Length 0000 + 007E Comment Length 0000 + 0080 Disk Start 0000 + 0082 Int File Attributes 0001 + [Bit 0] 1 Text Data + 0084 Ext File Attributes 81B40000 + 0088 Local Header Offset 00000000 + 008C Filename 'letters.txt' + + 0097 CENTRAL HEADER #2 02014B50 + 009B Created Zip Spec 1E '3.0' + 009C Created OS 03 'Unix' + 009D Extract Zip Spec 0A '1.0' + 009E Extract OS 00 'MS-DOS' + 009F General Purpose Flag 0000 + 00A1 Compression Method 0000 'Stored' + 00A3 Last Mod Time 5277983D 'Tue Mar 23 19:01:58 2021' + 00A7 CRC 261DAFE6 + 00AB Compressed Length 00000006 + 00AF Uncompressed Length 00000006 + 00B3 Filename Length 000B + 00B5 Extra Length 0000 + 00B7 Comment Length 0000 + 00B9 Disk Start 0000 + 00BB Int File Attributes 0001 + [Bit 0] 1 Text Data + 00BD Ext File Attributes 81B40000 + 00C1 Local Header Offset 0000002F + 00C5 Filename 'numbers.txt' + + 00D0 END CENTRAL HEADER 06054B50 + 00D4 Number of this disk 0000 + 00D6 Central Dir Disk no 0000 + 00D8 Entries in this disk 0002 + 00DA Total Entries 0002 + 00DC Size of Central Dir 00000072 + 00E0 Offset to Central Dir 0000005E + 00E4 Comment Length 0000 + Done + + +=head2 Verbose Output + If the C<-v> option is present, column 1 is expanded to include =over 5 @@ -2159,7 +2649,7 @@ The offset from the start of the file in hex. =item * -The length of the filed in hex. +The length of the field in hex. =item * @@ -2168,45 +2658,151 @@ file. =back +Here is the same zip file dumped using the C C<-v> option: + + $ zipdetails -v test.zip + + 0000 0004 50 4B 03 04 LOCAL HEADER #1 04034B50 + 0004 0001 0A Extract Zip Spec 0A '1.0' + 0005 0001 00 Extract OS 00 'MS-DOS' + 0006 0002 00 00 General Purpose Flag 0000 + 0008 0002 00 00 Compression Method 0000 'Stored' + 000A 0004 3D 98 77 52 Last Mod Time 5277983D 'Tue Mar 23 19:01:58 2021' + 000E 0004 9C 14 8A 0F CRC 0F8A149C + 0012 0004 06 00 00 00 Compressed Length 00000006 + 0016 0004 06 00 00 00 Uncompressed Length 00000006 + 001A 0002 0B 00 Filename Length 000B + 001C 0002 00 00 Extra Length 0000 + 001E 000B 6C 65 74 74 Filename 'letters.txt' + 65 72 73 2E + 74 78 74 + 0029 0006 61 62 63 64 PAYLOAD abcde. + 65 0A + + 002F 0004 50 4B 03 04 LOCAL HEADER #2 04034B50 + 0033 0001 0A Extract Zip Spec 0A '1.0' + 0034 0001 00 Extract OS 00 'MS-DOS' + 0035 0002 00 00 General Purpose Flag 0000 + 0037 0002 00 00 Compression Method 0000 'Stored' + 0039 0004 3D 98 77 52 Last Mod Time 5277983D 'Tue Mar 23 19:01:58 2021' + 003D 0004 E6 AF 1D 26 CRC 261DAFE6 + 0041 0004 06 00 00 00 Compressed Length 00000006 + 0045 0004 06 00 00 00 Uncompressed Length 00000006 + 0049 0002 0B 00 Filename Length 000B + 004B 0002 00 00 Extra Length 0000 + 004D 000B 6E 75 6D 62 Filename 'numbers.txt' + 65 72 73 2E + 74 78 74 + 0058 0006 31 32 33 34 PAYLOAD 12345. + 35 0A + + 005E 0004 50 4B 01 02 CENTRAL HEADER #1 02014B50 + 0062 0001 1E Created Zip Spec 1E '3.0' + 0063 0001 03 Created OS 03 'Unix' + 0064 0001 0A Extract Zip Spec 0A '1.0' + 0065 0001 00 Extract OS 00 'MS-DOS' + 0066 0002 00 00 General Purpose Flag 0000 + 0068 0002 00 00 Compression Method 0000 'Stored' + 006A 0004 3D 98 77 52 Last Mod Time 5277983D 'Tue Mar 23 19:01:58 2021' + 006E 0004 9C 14 8A 0F CRC 0F8A149C + 0072 0004 06 00 00 00 Compressed Length 00000006 + 0076 0004 06 00 00 00 Uncompressed Length 00000006 + 007A 0002 0B 00 Filename Length 000B + 007C 0002 00 00 Extra Length 0000 + 007E 0002 00 00 Comment Length 0000 + 0080 0002 00 00 Disk Start 0000 + 0082 0002 01 00 Int File Attributes 0001 + [Bit 0] 1 Text Data + 0084 0004 00 00 B4 81 Ext File Attributes 81B40000 + 0088 0004 00 00 00 00 Local Header Offset 00000000 + 008C 000B 6C 65 74 74 Filename 'letters.txt' + 65 72 73 2E + 74 78 74 + + 0097 0004 50 4B 01 02 CENTRAL HEADER #2 02014B50 + 009B 0001 1E Created Zip Spec 1E '3.0' + 009C 0001 03 Created OS 03 'Unix' + 009D 0001 0A Extract Zip Spec 0A '1.0' + 009E 0001 00 Extract OS 00 'MS-DOS' + 009F 0002 00 00 General Purpose Flag 0000 + 00A1 0002 00 00 Compression Method 0000 'Stored' + 00A3 0004 3D 98 77 52 Last Mod Time 5277983D 'Tue Mar 23 19:01:58 2021' + 00A7 0004 E6 AF 1D 26 CRC 261DAFE6 + 00AB 0004 06 00 00 00 Compressed Length 00000006 + 00AF 0004 06 00 00 00 Uncompressed Length 00000006 + 00B3 0002 0B 00 Filename Length 000B + 00B5 0002 00 00 Extra Length 0000 + 00B7 0002 00 00 Comment Length 0000 + 00B9 0002 00 00 Disk Start 0000 + 00BB 0002 01 00 Int File Attributes 0001 + [Bit 0] 1 Text Data + 00BD 0004 00 00 B4 81 Ext File Attributes 81B40000 + 00C1 0004 2F 00 00 00 Local Header Offset 0000002F + 00C5 000B 6E 75 6D 62 Filename 'numbers.txt' + 65 72 73 2E + 74 78 74 + + 00D0 0004 50 4B 05 06 END CENTRAL HEADER 06054B50 + 00D4 0002 00 00 Number of this disk 0000 + 00D6 0002 00 00 Central Dir Disk no 0000 + 00D8 0002 02 00 Entries in this disk 0002 + 00DA 0002 02 00 Total Entries 0002 + 00DC 0004 72 00 00 00 Size of Central Dir 00000072 + 00E0 0004 5E 00 00 00 Offset to Central Dir 0000005E + 00E4 0002 00 00 Comment Length 0000 + Done + +=head1 LIMITATIONS + +The following zip file features are not supported by this program: -=head1 TODO +=over 5 + +=item * -Error handling is still a work in progress. If the program encounters a -problem reading a zip file it is likely to terminate with an unhelpful -error message. +Multi-part archives. + +=item * + +The strong encryption features defined in the L document. + +=back + +=head1 TODO + +Error handling is a work in progress. If the program encounters a problem +reading a zip file it is likely to terminate with an unhelpful error +message. =head1 SUPPORT -General feedback/questions/bug reports should be sent to -L (preferred) or -L. +General feedback/questions/bug reports should be sent to +L. =head1 SEE ALSO -The primary reference for Zip files is the "appnote" document available at -L. +The primary reference for Zip files is +L. An alternative reference is the Info-Zip appnote. This is available from L +For details of WinZip AES encryption see L. The C program that comes with the info-zip distribution (L) can also display details of the structure of a zip file. -See also L, L, -L. - =head1 AUTHOR Paul Marquess F. -=head1 COPYRIGHT +=head1 COPYRIGHT -Copyright (c) 2011-2019 Paul Marquess. All rights reserved. +Copyright (c) 2011-2022 Paul Marquess. All rights reserved. This program is free software; you can redistribute it and/or modify it -under the same terms as Perl itself. - +under the same terms as Perl itself. diff --git a/gnu/usr.bin/perl/cpan/IO-Compress/lib/Compress/Zlib.pm b/gnu/usr.bin/perl/cpan/IO-Compress/lib/Compress/Zlib.pm index 4a0aae6c4bc..37aa051557d 100644 --- a/gnu/usr.bin/perl/cpan/IO-Compress/lib/Compress/Zlib.pm +++ b/gnu/usr.bin/perl/cpan/IO-Compress/lib/Compress/Zlib.pm @@ -7,18 +7,18 @@ use Carp ; use IO::Handle ; use Scalar::Util qw(dualvar); -use IO::Compress::Base::Common 2.093 ; -use Compress::Raw::Zlib 2.093 ; -use IO::Compress::Gzip 2.093 ; -use IO::Uncompress::Gunzip 2.093 ; +use IO::Compress::Base::Common 2.106 ; +use Compress::Raw::Zlib 2.103 ; +use IO::Compress::Gzip 2.106 ; +use IO::Uncompress::Gunzip 2.106 ; use strict ; use warnings ; use bytes ; our ($VERSION, $XS_VERSION, @ISA, @EXPORT, @EXPORT_OK, %EXPORT_TAGS); -$VERSION = '2.093'; -$XS_VERSION = $VERSION; +$VERSION = '2.106'; +$XS_VERSION = $VERSION; $VERSION = eval $VERSION; @ISA = qw(Exporter); @@ -126,7 +126,7 @@ sub gzopen($$) my @params = () ; croak "gzopen: file parameter is not a filehandle or filename" - unless isaFilehandle $file || isaFilename $file || + unless isaFilehandle $file || isaFilename $file || (ref $file && ref $file eq 'SCALAR'); return undef unless $mode =~ /[rwa]/i ; @@ -134,17 +134,17 @@ sub gzopen($$) _set_gzerr(0) ; if ($writing) { - $gz = new IO::Compress::Gzip($file, Minimal => 1, AutoClose => 1, - %defOpts) + $gz = IO::Compress::Gzip->new($file, Minimal => 1, AutoClose => 1, + %defOpts) or $Compress::Zlib::gzerrno = $IO::Compress::Gzip::GzipError; } else { - $gz = new IO::Uncompress::Gunzip($file, + $gz = IO::Uncompress::Gunzip->new($file, Transparent => 1, - Append => 0, - AutoClose => 1, + Append => 0, + AutoClose => 1, MultiStream => 1, - Strict => 0) + Strict => 0) or $Compress::Zlib::gzerrno = $IO::Uncompress::Gunzip::GunzipError; } @@ -161,7 +161,7 @@ sub Compress::Zlib::gzFile::gzread return _set_gzerr(Z_STREAM_ERROR()) if $self->[1] ne 'inflate'; - my $len = defined $_[1] ? $_[1] : 4096 ; + my $len = defined $_[1] ? $_[1] : 4096 ; my $gz = $self->[0] ; if ($self->gzeof() || $len == 0) { @@ -171,7 +171,7 @@ sub Compress::Zlib::gzFile::gzread return 0 ; } - my $status = $gz->read($_[0], $len) ; + my $status = $gz->read($_[0], $len) ; _save_gzerr($gz, 1); return $status ; } @@ -185,7 +185,7 @@ sub Compress::Zlib::gzFile::gzreadline # Maintain backward compatibility with 1.x behaviour # It didn't support $/, so this can't either. local $/ = "\n" ; - $_[0] = $gz->getline() ; + $_[0] = $gz->getline() ; } _save_gzerr($gz, 1); return defined $_[0] ? length $_[0] : 0 ; @@ -199,7 +199,7 @@ sub Compress::Zlib::gzFile::gzwrite return _set_gzerr(Z_STREAM_ERROR()) if $self->[1] ne 'deflate'; - $] >= 5.008 and (utf8::downgrade($_[0], 1) + $] >= 5.008 and (utf8::downgrade($_[0], 1) or croak "Wide character in gzwrite"); my $status = $gz->write($_[0]) ; @@ -282,8 +282,8 @@ sub Compress::Zlib::gzFile::gzsetparams return _set_gzerr(Z_STREAM_ERROR()) if $self->[1] ne 'deflate'; - - my $status = *$gz->{Compress}->deflateParams(-Level => $level, + + my $status = *$gz->{Compress}->deflateParams(-Level => $level, -Strategy => $strategy); _save_gzerr($gz); return $status ; @@ -293,7 +293,7 @@ sub Compress::Zlib::gzFile::gzerror { my $self = shift ; my $gz = $self->[0] ; - + return $Compress::Zlib::gzerrno ; } @@ -310,7 +310,7 @@ sub compress($;$) $in = \$_[0] ; } - $] >= 5.008 and (utf8::downgrade($$in, 1) + $] >= 5.008 and (utf8::downgrade($$in, 1) or croak "Wide character in compress"); my $level = (@_ == 2 ? $_[1] : Z_DEFAULT_COMPRESSION() ); @@ -322,7 +322,7 @@ sub compress($;$) MAX_MEM_LEVEL, Z_DEFAULT_STRATEGY, 4096, - '') + '') or return undef ; $err = $x->deflate($in, $output) ; @@ -330,7 +330,7 @@ sub compress($;$) $err = $x->flush($output) ; return undef unless $err == Z_OK() ; - + return $output ; } @@ -346,21 +346,21 @@ sub uncompress($) $in = \$_[0] ; } - $] >= 5.008 and (utf8::downgrade($$in, 1) - or croak "Wide character in uncompress"); - + $] >= 5.008 and (utf8::downgrade($$in, 1) + or croak "Wide character in uncompress"); + my ($obj, $status) = Compress::Raw::Zlib::_inflateInit(0, - MAX_WBITS, 4096, "") ; - - $status == Z_OK + MAX_WBITS, 4096, "") ; + + $status == Z_OK or return undef; - - $obj->inflate($in, $output) == Z_STREAM_END + + $obj->inflate($in, $output) == Z_STREAM_END or return undef; - + return $output; } - + sub deflateInit(@) { my ($got) = ParseParameters(0, @@ -374,27 +374,27 @@ sub deflateInit(@) 'dictionary' => [IO::Compress::Base::Common::Parse_any, ""], }, @_ ) ; - croak "Compress::Zlib::deflateInit: Bufsize must be >= 1, you specified " . + croak "Compress::Zlib::deflateInit: Bufsize must be >= 1, you specified " . $got->getValue('bufsize') unless $got->getValue('bufsize') >= 1; my $obj ; - + my $status = 0 ; - ($obj, $status) = + ($obj, $status) = Compress::Raw::Zlib::_deflateInit(0, - $got->getValue('level'), - $got->getValue('method'), - $got->getValue('windowbits'), - $got->getValue('memlevel'), - $got->getValue('strategy'), + $got->getValue('level'), + $got->getValue('method'), + $got->getValue('windowbits'), + $got->getValue('memlevel'), + $got->getValue('strategy'), $got->getValue('bufsize'), $got->getValue('dictionary')) ; my $x = ($status == Z_OK() ? bless $obj, "Zlib::OldDeflate" : undef) ; return wantarray ? ($x, $status) : $x ; } - + sub inflateInit(@) { my ($got) = ParseParameters(0, @@ -405,15 +405,15 @@ sub inflateInit(@) }, @_) ; - croak "Compress::Zlib::inflateInit: Bufsize must be >= 1, you specified " . + croak "Compress::Zlib::inflateInit: Bufsize must be >= 1, you specified " . $got->getValue('bufsize') unless $got->getValue('bufsize') >= 1; my $status = 0 ; my $obj ; ($obj, $status) = Compress::Raw::Zlib::_inflateInit(FLAG_CONSUME_INPUT, - $got->getValue('windowbits'), - $got->getValue('bufsize'), + $got->getValue('windowbits'), + $got->getValue('bufsize'), $got->getValue('dictionary')) ; my $x = ($status == Z_OK() ? bless $obj, "Zlib::OldInflate" : undef) ; @@ -442,7 +442,7 @@ sub flush my $output ; my $flag = shift || Compress::Zlib::Z_FINISH(); my $status = $self->SUPER::flush($output, $flag) ; - + wantarray ? ($output, $status) : $output ; } @@ -461,7 +461,7 @@ sub inflate package Compress::Zlib ; -use IO::Compress::Gzip::Constants 2.093 ; +use IO::Compress::Gzip::Constants 2.106 ; sub memGzip($) { @@ -473,13 +473,13 @@ sub memGzip($) MAX_MEM_LEVEL, Z_DEFAULT_STRATEGY, 4096, - '') + '') or return undef ; - + # if the deflation buffer isn't a reference, make it one my $string = (ref $_[0] ? $_[0] : \$_[0]) ; - $] >= 5.008 and (utf8::downgrade($$string, 1) + $] >= 5.008 and (utf8::downgrade($$string, 1) or croak "Wide character in memGzip"); my $out; @@ -487,12 +487,12 @@ sub memGzip($) $x->deflate($string, $out) == Z_OK or return undef ; - + $x->flush($out) == Z_OK or return undef ; - - return IO::Compress::Gzip::Constants::GZIP_MINIMUM_HEADER . - $out . + + return IO::Compress::Gzip::Constants::GZIP_MINIMUM_HEADER . + $out . pack("V V", $x->crc32(), $x->total_in()); } @@ -501,10 +501,10 @@ sub _removeGzipHeader($) { my $string = shift ; - return Z_DATA_ERROR() + return Z_DATA_ERROR() if length($$string) < GZIP_MIN_HEADER_SIZE ; - my ($magic1, $magic2, $method, $flags, $time, $xflags, $oscode) = + my ($magic1, $magic2, $method, $flags, $time, $xflags, $oscode) = unpack ('CCCCVCC', $$string); return Z_DATA_ERROR() @@ -551,7 +551,7 @@ sub _removeGzipHeader($) if length ($$string) < GZIP_FHCRC_SIZE ; substr($$string, 0, GZIP_FHCRC_SIZE) = ''; } - + return Z_OK(); } @@ -566,24 +566,24 @@ sub memGunzip($) { # if the buffer isn't a reference, make it one my $string = (ref $_[0] ? $_[0] : \$_[0]); - - $] >= 5.008 and (utf8::downgrade($$string, 1) + + $] >= 5.008 and (utf8::downgrade($$string, 1) or croak "Wide character in memGunzip"); _set_gzerr(0); my $status = _removeGzipHeader($string) ; - $status == Z_OK() + $status == Z_OK() or return _set_gzerr_undef($status); - + my $bufsize = length $$string > 4096 ? length $$string : 4096 ; my $x = Compress::Raw::Zlib::_inflateInit(FLAG_CRC | FLAG_CONSUME_INPUT, - -MAX_WBITS(), $bufsize, '') + -MAX_WBITS(), $bufsize, '') or return _ret_gun_error(); my $output = '' ; $status = $x->inflate($string, $output); - + if ( $status == Z_OK() ) { _set_gzerr(Z_DATA_ERROR()); @@ -606,7 +606,7 @@ sub memGunzip($) $$string = ''; } - return $output; + return $output; } # Autoload methods go after __END__, and are processed by the autosplit program. @@ -938,23 +938,23 @@ I function. use strict ; use warnings ; - + use Compress::Zlib ; - + # use stdin if no files supplied @ARGV = '-' unless @ARGV ; - + foreach my $file (@ARGV) { my $buffer ; - + my $gz = gzopen($file, "rb") or die "Cannot open $file: $gzerrno\n" ; - + print $buffer while $gz->gzread($buffer) > 0 ; - + die "Error reading from $file: $gzerrno" . ($gzerrno+0) . "\n" if $gzerrno != Z_STREAM_END ; - + $gz->gzclose() ; } @@ -963,28 +963,28 @@ very simple I like script. use strict ; use warnings ; - + use Compress::Zlib ; - + die "Usage: gzgrep pattern [file...]\n" unless @ARGV >= 1; - + my $pattern = shift ; - + # use stdin if no files supplied @ARGV = '-' unless @ARGV ; - + foreach my $file (@ARGV) { my $gz = gzopen($file, "rb") or die "Cannot open $file: $gzerrno\n" ; - + while ($gz->gzreadline($_) > 0) { print if /$pattern/ ; } - + die "Error reading from $file: $gzerrno\n" if $gzerrno != Z_STREAM_END ; - + $gz->gzclose() ; } @@ -994,14 +994,14 @@ standard output. use strict ; use warnings ; - + use Compress::Zlib ; - + binmode STDOUT; # gzopen only sets it on the fd - + my $gz = gzopen(\*STDOUT, "wb") or die "Cannot open stdout: $gzerrno\n" ; - + while (<>) { $gz->gzwrite($_) or die "error writing: $gzerrno\n" ; @@ -1275,18 +1275,18 @@ input, deflates it and writes it to standard output. while (<>) { ($output, $status) = $x->deflate($_) ; - + $status == Z_OK or die "deflation failed\n" ; - + print $output ; } - + ($output, $status) = $x->flush() ; - + $status == Z_OK or die "deflation failed\n" ; - + print $output ; =head1 Inflate Interface @@ -1313,13 +1313,13 @@ I error code. The function optionally takes a number of named options specified as C<< -Name=>value >> pairs. This allows individual options to be tailored without having to specify them all in the parameter list. - + For backward compatibility, it is also possible to pass the parameters as a reference to a hash containing the name=>value pairs. - + The function takes one optional parameter, a reference to a hash. The contents of the hash allow the deflation interface to be tailored. - + Here is a list of the valid options: =over 5 @@ -1409,27 +1409,27 @@ Here is an example of using C. use strict ; use warnings ; - + use Compress::Zlib ; - + my $x = inflateInit() or die "Cannot create a inflation stream\n" ; - + my $input = '' ; binmode STDIN; binmode STDOUT; - + my ($output, $status) ; while (read(STDIN, $input, 4096)) { ($output, $status) = $x->inflate(\$input) ; - + print $output if $status == Z_OK or $status == Z_STREAM_END ; - + last if $status != Z_OK ; } - + die "inflation failed\n" unless $status == Z_STREAM_END ; @@ -1469,7 +1469,7 @@ of I. =head1 SUPPORT -General feedback/questions/bug reports should be sent to +General feedback/questions/bug reports should be sent to L (preferred) or L. @@ -1484,9 +1484,9 @@ L, L For RFC 1950, 1951 and 1952 see -L, -L and -L +L, +L and +L The I compression library was written by Jean-loup Gailly C and Mark Adler C. @@ -1506,8 +1506,7 @@ See the Changes file. =head1 COPYRIGHT AND LICENSE -Copyright (c) 1995-2019 Paul Marquess. All rights reserved. +Copyright (c) 1995-2022 Paul Marquess. All rights reserved. This program is free software; you can redistribute it and/or modify it under the same terms as Perl itself. - diff --git a/gnu/usr.bin/perl/cpan/IO-Compress/lib/File/GlobMapper.pm b/gnu/usr.bin/perl/cpan/IO-Compress/lib/File/GlobMapper.pm index a4e5385565e..f015b165674 100644 --- a/gnu/usr.bin/perl/cpan/IO-Compress/lib/File/GlobMapper.pm +++ b/gnu/usr.bin/perl/cpan/IO-Compress/lib/File/GlobMapper.pm @@ -51,7 +51,7 @@ sub globmap ($$;) my $inputGlob = shift ; my $outputGlob = shift ; - my $obj = new File::GlobMapper($inputGlob, $outputGlob, @_) + my $obj = File::GlobMapper->new($inputGlob, $outputGlob, @_) or croak "globmap: $Error" ; return $obj->getFileMap(); } @@ -383,7 +383,7 @@ File::GlobMapper - Extend File Glob to Allow Input and Output Files my $aref = globmap $input => $output or die $File::GlobMapper::Error ; - my $gm = new File::GlobMapper $input => $output + my $gm = File::GlobMapper->new( $input => $output ) or die $File::GlobMapper::Error ; diff --git a/gnu/usr.bin/perl/cpan/IO-Compress/lib/IO/Compress/Adapter/Bzip2.pm b/gnu/usr.bin/perl/cpan/IO-Compress/lib/IO/Compress/Adapter/Bzip2.pm index a8a7762ce70..cc1700aab26 100644 --- a/gnu/usr.bin/perl/cpan/IO-Compress/lib/IO/Compress/Adapter/Bzip2.pm +++ b/gnu/usr.bin/perl/cpan/IO-Compress/lib/IO/Compress/Adapter/Bzip2.pm @@ -4,12 +4,12 @@ use strict; use warnings; use bytes; -use IO::Compress::Base::Common 2.093 qw(:Status); +use IO::Compress::Base::Common 2.106 qw(:Status); -use Compress::Raw::Bzip2 2.093 ; +use Compress::Raw::Bzip2 2.103 ; our ($VERSION); -$VERSION = '2.093'; +$VERSION = '2.106'; sub mkCompObject { @@ -21,7 +21,7 @@ sub mkCompObject $WorkFactor = 0 if ! defined $WorkFactor ; $Verbosity = 0 if ! defined $Verbosity ; - my ($def, $status) = new Compress::Raw::Bzip2(1, $BlockSize100K, + my ($def, $status) = Compress::Raw::Bzip2->new(1, $BlockSize100K, $WorkFactor, $Verbosity); return (undef, "Could not create Deflate object: $status", $status) @@ -30,7 +30,7 @@ sub mkCompObject return bless {'Def' => $def, 'Error' => '', 'ErrorNo' => 0, - } ; + } ; } sub compr @@ -44,11 +44,11 @@ sub compr if ($status != BZ_RUN_OK) { - $self->{Error} = "Deflate Error: $status"; + $self->{Error} = "Deflate Error: $status"; return STATUS_ERROR; } - return STATUS_OK; + return STATUS_OK; } sub flush @@ -62,12 +62,12 @@ sub flush if ($status != BZ_RUN_OK) { - $self->{Error} = "Deflate Error: $status"; + $self->{Error} = "Deflate Error: $status"; return STATUS_ERROR; } - return STATUS_OK; - + return STATUS_OK; + } sub close @@ -81,12 +81,12 @@ sub close if ($status != BZ_STREAM_END) { - $self->{Error} = "Deflate Error: $status"; + $self->{Error} = "Deflate Error: $status"; return STATUS_ERROR; } - return STATUS_OK; - + return STATUS_OK; + } @@ -96,18 +96,18 @@ sub reset my $outer = $self->{Outer}; - my ($def, $status) = new Compress::Raw::Bzip2(); + my ($def, $status) = Compress::Raw::Bzip2->new(); $self->{ErrorNo} = ($status == BZ_OK) ? 0 : $status ; if ($status != BZ_OK) { - $self->{Error} = "Cannot create Deflate object: $status"; + $self->{Error} = "Cannot create Deflate object: $status"; return STATUS_ERROR; } $self->{Def} = $def; - return STATUS_OK; + return STATUS_OK; } sub compressedBytes @@ -151,4 +151,3 @@ sub uncompressedBytes 1; __END__ - diff --git a/gnu/usr.bin/perl/cpan/IO-Compress/lib/IO/Compress/Adapter/Deflate.pm b/gnu/usr.bin/perl/cpan/IO-Compress/lib/IO/Compress/Adapter/Deflate.pm index 140d29ff29f..12f97ccc52d 100644 --- a/gnu/usr.bin/perl/cpan/IO-Compress/lib/IO/Compress/Adapter/Deflate.pm +++ b/gnu/usr.bin/perl/cpan/IO-Compress/lib/IO/Compress/Adapter/Deflate.pm @@ -4,13 +4,13 @@ use strict; use warnings; use bytes; -use IO::Compress::Base::Common 2.093 qw(:Status); -use Compress::Raw::Zlib 2.093 qw( !crc32 !adler32 ) ; - -require Exporter; +use IO::Compress::Base::Common 2.106 qw(:Status); +use Compress::Raw::Zlib 2.103 qw( !crc32 !adler32 ) ; + +require Exporter; our ($VERSION, @ISA, @EXPORT_OK, %EXPORT_TAGS, @EXPORT, %DEFLATE_CONSTANTS); -$VERSION = '2.093'; +$VERSION = '2.106'; @ISA = qw(Exporter); @EXPORT_OK = @Compress::Raw::Zlib::DEFLATE_CONSTANTS; %EXPORT_TAGS = %Compress::Raw::Zlib::DEFLATE_CONSTANTS; @@ -24,20 +24,20 @@ sub mkCompObject my $level = shift ; my $strategy = shift ; - my ($def, $status) = new Compress::Raw::Zlib::Deflate + my ($def, $status) = Compress::Raw::Zlib::Deflate->new( -AppendOutput => 1, -CRC32 => $crc32, -ADLER32 => $adler32, -Level => $level, -Strategy => $strategy, - -WindowBits => - MAX_WBITS; + -WindowBits => - MAX_WBITS); - return (undef, "Cannot create Deflate object: $status", $status) - if $status != Z_OK; + return (undef, "Cannot create Deflate object: $status", $status) + if $status != Z_OK; return bless {'Def' => $def, 'Error' => '', - } ; + } ; } sub compr @@ -51,11 +51,11 @@ sub compr if ($status != Z_OK) { - $self->{Error} = "Deflate Error: $status"; + $self->{Error} = "Deflate Error: $status"; return STATUS_ERROR; } - return STATUS_OK; + return STATUS_OK; } sub flush @@ -70,11 +70,11 @@ sub flush if ($status != Z_OK) { - $self->{Error} = "Deflate Error: $status"; + $self->{Error} = "Deflate Error: $status"; return STATUS_ERROR; } - return STATUS_OK; + return STATUS_OK; } sub close @@ -97,14 +97,14 @@ sub reset $self->{ErrorNo} = $status; if ($status != Z_OK) { - $self->{Error} = "Deflate Error: $status"; + $self->{Error} = "Deflate Error: $status"; return STATUS_ERROR; } - return STATUS_OK; + return STATUS_OK; } -sub deflateParams +sub deflateParams { my $self = shift ; @@ -114,11 +114,11 @@ sub deflateParams $self->{ErrorNo} = $status; if ($status != Z_OK) { - $self->{Error} = "deflateParams Error: $status"; + $self->{Error} = "deflateParams Error: $status"; return STATUS_ERROR; } - return STATUS_OK; + return STATUS_OK; } @@ -167,4 +167,3 @@ sub adler32 1; __END__ - diff --git a/gnu/usr.bin/perl/cpan/IO-Compress/lib/IO/Compress/Adapter/Identity.pm b/gnu/usr.bin/perl/cpan/IO-Compress/lib/IO/Compress/Adapter/Identity.pm index 487cfa7b476..a21962ea1aa 100644 --- a/gnu/usr.bin/perl/cpan/IO-Compress/lib/IO/Compress/Adapter/Identity.pm +++ b/gnu/usr.bin/perl/cpan/IO-Compress/lib/IO/Compress/Adapter/Identity.pm @@ -4,10 +4,10 @@ use strict; use warnings; use bytes; -use IO::Compress::Base::Common 2.093 qw(:Status); +use IO::Compress::Base::Common 2.106 qw(:Status); our ($VERSION); -$VERSION = '2.093'; +$VERSION = '2.106'; sub mkCompObject { @@ -19,7 +19,7 @@ sub mkCompObject 'UnCompSize' => 0, 'Error' => '', 'ErrorNo' => 0, - } ; + } ; } sub compr @@ -30,7 +30,7 @@ sub compr $self->{CompSize} += length ${ $_[0] } ; $self->{UnCompSize} = $self->{CompSize} ; - if ( ref $_[1] ) + if ( ref $_[1] ) { ${ $_[1] } .= ${ $_[0] } } else { $_[1] .= ${ $_[0] } } @@ -43,14 +43,14 @@ sub flush { my $self = shift ; - return STATUS_OK; + return STATUS_OK; } sub close { my $self = shift ; - return STATUS_OK; + return STATUS_OK; } sub reset @@ -60,14 +60,14 @@ sub reset $self->{CompSize} = 0; $self->{UnCompSize} = 0; - return STATUS_OK; + return STATUS_OK; } -sub deflateParams +sub deflateParams { my $self = shift ; - return STATUS_OK; + return STATUS_OK; } #sub total_out @@ -98,4 +98,3 @@ sub uncompressedBytes __END__ - diff --git a/gnu/usr.bin/perl/cpan/IO-Compress/lib/IO/Compress/Base.pm b/gnu/usr.bin/perl/cpan/IO-Compress/lib/IO/Compress/Base.pm index f817d13b472..fdb169d7716 100644 --- a/gnu/usr.bin/perl/cpan/IO-Compress/lib/IO/Compress/Base.pm +++ b/gnu/usr.bin/perl/cpan/IO-Compress/lib/IO/Compress/Base.pm @@ -6,7 +6,7 @@ require 5.006 ; use strict ; use warnings; -use IO::Compress::Base::Common 2.093 ; +use IO::Compress::Base::Common 2.106 ; use IO::File (); ; use Scalar::Util (); @@ -20,7 +20,7 @@ use Symbol(); our (@ISA, $VERSION); @ISA = qw(IO::File Exporter); -$VERSION = '2.093'; +$VERSION = '2.106'; #Can't locate object method "SWASHNEW" via package "utf8" (perhaps you forgot to load "utf8"?) at .../ext/Compress-Zlib/Gzip/blib/lib/Compress/Zlib/Common.pm line 16. @@ -254,8 +254,8 @@ sub _create *$obj->{Compress} = $obj->mkComp($got) or return undef; - *$obj->{UnCompSize} = new U64 ; - *$obj->{CompSize} = new U64 ; + *$obj->{UnCompSize} = U64->new; + *$obj->{CompSize} = U64->new; if ( $outType eq 'buffer') { ${ *$obj->{Buffer} } = '' @@ -279,7 +279,7 @@ sub _create my $mode = '>' ; $mode = '>>' if $appendOutput; - *$obj->{FH} = new IO::File "$mode $outValue" + *$obj->{FH} = IO::File->new( "$mode $outValue" ) or return $obj->saveErrorString(undef, "cannot open file '$outValue': $!", $!) ; *$obj->{StdIO} = ($outValue eq '-'); setBinModeOutput(*$obj->{FH}) ; @@ -340,7 +340,7 @@ sub _def my $haveOut = @_ ; my $output = shift ; - my $x = new IO::Compress::Base::Validator($class, *$obj->{Error}, $name, $input, $output) + my $x = IO::Compress::Base::Validator->new($class, *$obj->{Error}, $name, $input, $output) or return undef ; push @_, $output if $haveOut && $x->{Hash}; @@ -493,7 +493,7 @@ sub _wr2 if ( ! $isFilehandle ) { - $fh = new IO::File "<$input" + $fh = IO::File->new( "<$input" ) or return $self->saveErrorString(undef, "cannot open file '$input': $!", $!) ; } binmode $fh ; @@ -983,23 +983,27 @@ sub _notAvailable return sub { Carp::croak "$name Not Available: File opened only for output" ; } ; } -*read = _notAvailable('read'); -*READ = _notAvailable('read'); -*readline = _notAvailable('readline'); -*READLINE = _notAvailable('readline'); -*getc = _notAvailable('getc'); -*GETC = _notAvailable('getc'); - -*FILENO = \&fileno; -*PRINT = \&print; -*PRINTF = \&printf; -*WRITE = \&syswrite; -*write = \&syswrite; -*SEEK = \&seek; -*TELL = \&tell; -*EOF = \&eof; -*CLOSE = \&close; -*BINMODE = \&binmode; +{ + no warnings 'once'; + + *read = _notAvailable('read'); + *READ = _notAvailable('read'); + *readline = _notAvailable('readline'); + *READLINE = _notAvailable('readline'); + *getc = _notAvailable('getc'); + *GETC = _notAvailable('getc'); + + *FILENO = \&fileno; + *PRINT = \&print; + *PRINTF = \&printf; + *WRITE = \&syswrite; + *write = \&syswrite; + *SEEK = \&seek; + *TELL = \&tell; + *EOF = \&eof; + *CLOSE = \&close; + *BINMODE = \&binmode; +} #*sysread = \&_notAvailable; #*syswrite = \&_write; @@ -1023,7 +1027,7 @@ purpose is to be sub-classed by IO::Compress modules. =head1 SUPPORT -General feedback/questions/bug reports should be sent to +General feedback/questions/bug reports should be sent to L (preferred) or L. @@ -1047,8 +1051,7 @@ See the Changes file. =head1 COPYRIGHT AND LICENSE -Copyright (c) 2005-2019 Paul Marquess. All rights reserved. +Copyright (c) 2005-2022 Paul Marquess. All rights reserved. This program is free software; you can redistribute it and/or modify it under the same terms as Perl itself. - diff --git a/gnu/usr.bin/perl/cpan/IO-Compress/lib/IO/Compress/Base/Common.pm b/gnu/usr.bin/perl/cpan/IO-Compress/lib/IO/Compress/Base/Common.pm index 87af18b6de8..39ac0168589 100644 --- a/gnu/usr.bin/perl/cpan/IO-Compress/lib/IO/Compress/Base/Common.pm +++ b/gnu/usr.bin/perl/cpan/IO-Compress/lib/IO/Compress/Base/Common.pm @@ -11,7 +11,7 @@ use File::GlobMapper; require Exporter; our ($VERSION, @ISA, @EXPORT, %EXPORT_TAGS, $HAS_ENCODE); @ISA = qw(Exporter); -$VERSION = '2.093'; +$VERSION = '2.106'; @EXPORT = qw( isaFilehandle isaFilename isaScalar whatIsInput whatIsOutput @@ -160,7 +160,7 @@ sub whatIsInput($;$) #use IO::File; $got = 'handle'; $_[0] = *STDIN; - #$_[0] = new IO::File("<-"); + #$_[0] = IO::File->new("<-"); } return $got; @@ -174,7 +174,7 @@ sub whatIsOutput($;$) { $got = 'handle'; $_[0] = *STDOUT; - #$_[0] = new IO::File(">-"); + #$_[0] = IO::File->new(">-"); } return $got; @@ -267,7 +267,7 @@ sub IO::Compress::Base::Validator::new { $data{GlobMap} = 1 ; $data{inType} = $data{outType} = 'filename'; - my $mapper = new File::GlobMapper($_[0], $_[1]); + my $mapper = File::GlobMapper->new($_[0], $_[1]); if ( ! $mapper ) { return $obj->saveErrorString($File::GlobMapper::Error) ; @@ -509,7 +509,7 @@ sub ParseParameters return $_[1] if @_ == 2 && defined $_[1] && UNIVERSAL::isa($_[1], "IO::Compress::Base::Parameters"); - my $p = new IO::Compress::Base::Parameters() ; + my $p = IO::Compress::Base::Parameters->new(); $p->parse(@_) or croak "$sub: $p->[IxError]" ; diff --git a/gnu/usr.bin/perl/cpan/IO-Compress/lib/IO/Compress/Bzip2.pm b/gnu/usr.bin/perl/cpan/IO-Compress/lib/IO/Compress/Bzip2.pm index 13d3b4674df..faf043b1540 100644 --- a/gnu/usr.bin/perl/cpan/IO-Compress/lib/IO/Compress/Bzip2.pm +++ b/gnu/usr.bin/perl/cpan/IO-Compress/lib/IO/Compress/Bzip2.pm @@ -5,16 +5,16 @@ use warnings; use bytes; require Exporter ; -use IO::Compress::Base 2.093 ; +use IO::Compress::Base 2.106 ; -use IO::Compress::Base::Common 2.093 qw(); -use IO::Compress::Adapter::Bzip2 2.093 ; +use IO::Compress::Base::Common 2.106 qw(); +use IO::Compress::Adapter::Bzip2 2.106 ; our ($VERSION, @ISA, @EXPORT_OK, %EXPORT_TAGS, $Bzip2Error); -$VERSION = '2.093'; +$VERSION = '2.106'; $Bzip2Error = ''; @ISA = qw(IO::Compress::Base Exporter); @@ -40,7 +40,7 @@ sub bzip2 } -sub mkHeader +sub mkHeader { my $self = shift ; return ''; @@ -51,9 +51,9 @@ sub getExtraParams { my $self = shift ; - use IO::Compress::Base::Common 2.093 qw(:Parse); - - return ( + use IO::Compress::Base::Common 2.106 qw(:Parse); + + return ( 'blocksize100k' => [IO::Compress::Base::Common::Parse_unsigned, 1], 'workfactor' => [IO::Compress::Base::Common::Parse_unsigned, 0], 'verbosity' => [IO::Compress::Base::Common::Parse_boolean, 0], @@ -66,7 +66,7 @@ sub ckParams { my $self = shift ; my $got = shift; - + # check that BlockSize100K is a number between 1 & 9 if ($got->parsed('blocksize100k')) { my $value = $got->getValue('blocksize100k'); @@ -101,7 +101,7 @@ sub mkComp return $self->saveErrorString(undef, $errstr, $errno) if ! defined $obj; - + return $obj; } @@ -133,7 +133,7 @@ sub getFileInfo my $self = shift ; my $params = shift; my $file = shift ; - + } 1; @@ -151,7 +151,7 @@ IO::Compress::Bzip2 - Write bzip2 files/buffers my $status = bzip2 $input => $output [,OPTS] or die "bzip2 failed: $Bzip2Error\n"; - my $z = new IO::Compress::Bzip2 $output [,OPTS] + my $z = IO::Compress::Bzip2->new( $output [,OPTS] ) or die "bzip2 failed: $Bzip2Error\n"; $z->print($string); @@ -426,7 +426,7 @@ compressed data to a buffer, C<$buffer>. use IO::Compress::Bzip2 qw(bzip2 $Bzip2Error) ; use IO::File ; - my $input = new IO::File "new( " \$buffer @@ -463,7 +463,7 @@ and if you want to compress each file one at a time, this will do the trick The format of the constructor for C is shown below - my $z = new IO::Compress::Bzip2 $output [,OPTS] + my $z = IO::Compress::Bzip2->new( $output [,OPTS] ) or die "IO::Compress::Bzip2 failed: $Bzip2Error\n"; It returns an C object on success and undef on failure. @@ -765,7 +765,7 @@ See the L section for more details. =head1 Importing -No symbolic constants are required by this IO::Compress::Bzip2 at present. +No symbolic constants are required by IO::Compress::Bzip2 at present. =over 5 @@ -790,7 +790,7 @@ See L =head1 SUPPORT -General feedback/questions/bug reports should be sent to +General feedback/questions/bug reports should be sent to L (preferred) or L. @@ -818,8 +818,7 @@ See the Changes file. =head1 COPYRIGHT AND LICENSE -Copyright (c) 2005-2019 Paul Marquess. All rights reserved. +Copyright (c) 2005-2022 Paul Marquess. All rights reserved. This program is free software; you can redistribute it and/or modify it under the same terms as Perl itself. - diff --git a/gnu/usr.bin/perl/cpan/IO-Compress/lib/IO/Compress/Deflate.pm b/gnu/usr.bin/perl/cpan/IO-Compress/lib/IO/Compress/Deflate.pm index 5ecac19b889..0998952b4de 100644 --- a/gnu/usr.bin/perl/cpan/IO-Compress/lib/IO/Compress/Deflate.pm +++ b/gnu/usr.bin/perl/cpan/IO-Compress/lib/IO/Compress/Deflate.pm @@ -8,16 +8,16 @@ use bytes; require Exporter ; -use IO::Compress::RawDeflate 2.093 (); -use IO::Compress::Adapter::Deflate 2.093 ; +use IO::Compress::RawDeflate 2.106 (); +use IO::Compress::Adapter::Deflate 2.106 ; -use IO::Compress::Zlib::Constants 2.093 ; -use IO::Compress::Base::Common 2.093 qw(); +use IO::Compress::Zlib::Constants 2.106 ; +use IO::Compress::Base::Common 2.106 qw(); our ($VERSION, @ISA, @EXPORT_OK, %EXPORT_TAGS, %DEFLATE_CONSTANTS, $DeflateError); -$VERSION = '2.093'; +$VERSION = '2.106'; $DeflateError = ''; @ISA = qw(IO::Compress::RawDeflate Exporter); @@ -80,7 +80,7 @@ sub mkDeflateHdr($$$;$) return $hdr; } -sub mkHeader +sub mkHeader { my $self = shift ; my $param = shift ; @@ -89,7 +89,7 @@ sub mkHeader my $strategy = $param->getValue('strategy'); my $lflag ; - $level = 6 + $level = 6 if $level == Z_DEFAULT_COMPRESSION ; if (ZLIB_VERNUM >= 0x1210) @@ -118,7 +118,7 @@ sub ckParams { my $self = shift ; my $got = shift; - + $got->setValue('adler32' => 1); return 1 ; } @@ -149,6 +149,7 @@ sub getExtraParams sub getInverseClass { + no warnings 'once'; return ('IO::Uncompress::Inflate', \$IO::Uncompress::Inflate::InflateError); } @@ -158,7 +159,7 @@ sub getFileInfo my $self = shift ; my $params = shift; my $file = shift ; - + } @@ -178,7 +179,7 @@ IO::Compress::Deflate - Write RFC 1950 files/buffers my $status = deflate $input => $output [,OPTS] or die "deflate failed: $DeflateError\n"; - my $z = new IO::Compress::Deflate $output [,OPTS] + my $z = IO::Compress::Deflate->new( $output [,OPTS] ) or die "deflate failed: $DeflateError\n"; $z->print($string); @@ -455,7 +456,7 @@ compressed data to a buffer, C<$buffer>. use IO::Compress::Deflate qw(deflate $DeflateError) ; use IO::File ; - my $input = new IO::File "new( " \$buffer @@ -492,7 +493,7 @@ and if you want to compress each file one at a time, this will do the trick The format of the constructor for C is shown below - my $z = new IO::Compress::Deflate $output [,OPTS] + my $z = IO::Compress::Deflate->new( $output [,OPTS] ) or die "IO::Compress::Deflate failed: $DeflateError\n"; It returns an C object on success and undef on failure. @@ -914,7 +915,7 @@ See L =head1 SUPPORT -General feedback/questions/bug reports should be sent to +General feedback/questions/bug reports should be sent to L (preferred) or L. @@ -929,9 +930,9 @@ L, L For RFC 1950, 1951 and 1952 see -L, -L and -L +L, +L and +L The I compression library was written by Jean-loup Gailly C and Mark Adler C. @@ -951,8 +952,7 @@ See the Changes file. =head1 COPYRIGHT AND LICENSE -Copyright (c) 2005-2019 Paul Marquess. All rights reserved. +Copyright (c) 2005-2022 Paul Marquess. All rights reserved. This program is free software; you can redistribute it and/or modify it under the same terms as Perl itself. - diff --git a/gnu/usr.bin/perl/cpan/IO-Compress/lib/IO/Compress/FAQ.pod b/gnu/usr.bin/perl/cpan/IO-Compress/lib/IO/Compress/FAQ.pod index 697f0f3d3b0..466488bb89f 100644 --- a/gnu/usr.bin/perl/cpan/IO-Compress/lib/IO/Compress/FAQ.pod +++ b/gnu/usr.bin/perl/cpan/IO-Compress/lib/IO/Compress/FAQ.pod @@ -79,7 +79,7 @@ write a C<.tar.Z> file use Archive::Tar; use IO::File; - my $fh = new IO::File "| compress -c >$filename"; + my $fh = IO::File->new( "| compress -c >$filename" ); my $tar = Archive::Tar->new(); ... $tar->write($fh); @@ -101,7 +101,7 @@ recompression. my $gzipFile = "somefile.gz"; my $bzipFile = "somefile.bz2"; - my $gunzip = new IO::Uncompress::Gunzip $gzipFile + my $gunzip = IO::Uncompress::Gunzip->new( $gzipFile ) or die "Cannot gunzip $gzipFile: $GunzipError\n" ; bzip2 $gunzip => $bzipFile @@ -167,8 +167,8 @@ by including the C option. If you want to create a zip64 zip file with the OO interface you must specify the C option. - my $zip = new IO::Compress::Zip "whatever", Zip64 => 1; - + my $zip = IO::Compress::Zip->new( "whatever", Zip64 => 1 ); + When uncompressing with C, it will automatically detect if the zip file is zip64. @@ -197,7 +197,7 @@ L =head2 Gzip Resources The primary reference for gzip files is RFC 1952 -L +L The primary site for gzip is L. @@ -300,14 +300,14 @@ L 0x1f8b; use constant OS_MAGIC => 0x03; - + sub handler { my $r = shift; my ($fh,$gz); @@ -316,28 +316,28 @@ Lheader_out('Content-Encoding'=>'gzip'); $r->send_http_header; return OK if $r->header_only; - + tie *STDOUT,'Apache::GZip',$r; print($_) while <$fh>; untie *STDOUT; return OK; } - + sub TIEHANDLE { my($class,$r) = @_; # initialize a deflation stream my $d = deflateInit(-WindowBits=>-MAX_WBITS()) || return undef; - + # gzip header -- don't ask how I found out $r->print(pack("nccVcc",GZIP_MAGIC,Z_DEFLATED,0,time(),0,OS_MAGIC)); - + return bless { r => $r, crc => crc32(undef), d => $d, l => 0 },$class; } - + sub PRINT { my $self = shift; foreach (@_) { @@ -349,18 +349,18 @@ L{crc} = crc32($_,$self->{crc}); } } - + sub DESTROY { my $self = shift; - + # flush the output buffers my $data = $self->{d}->flush; $self->{r}->print($data); - + # print the CRC and the total length (uncompressed) $self->{r}->print(pack("LL",@{$self}{qw/crc l/})); } - + 1; Here's the Apache configuration entry you'll need to make use of it. Once @@ -401,12 +401,12 @@ C is used instead of C the whole tied filehandle code can be removed. Here is the rewritten code. package Apache::GZip; - + use strict vars; use Apache::Constants ':common'; use IO::Compress::Gzip; use IO::File; - + sub handler { my $r = shift; my ($fh,$gz); @@ -416,22 +416,22 @@ filehandle code can be removed. Here is the rewritten code. $r->send_http_header; return OK if $r->header_only; - my $gz = new IO::Compress::Gzip '-', Minimal => 1 + my $gz = IO::Compress::Gzip->new( '-', Minimal => 1 ) or return DECLINED ; print $gz $_ while <$fh>; - + return OK; } - + or even more succinctly, like this, using a one-shot gzip package Apache::GZip; - + use strict vars; use Apache::Constants ':common'; use IO::Compress::Gzip qw(gzip); - + sub handler { my $r = shift; $r->header_out('Content-Encoding'=>'gzip'); @@ -443,7 +443,7 @@ or even more succinctly, like this, using a one-shot gzip return OK; } - + 1; The use of one-shot C above just reads from C<< $r->filename >> and @@ -468,7 +468,7 @@ read from the FTP Server. use Net::FTP; use IO::Uncompress::Gunzip qw(:all); - my $ftp = new Net::FTP ... + my $ftp = Net::FTP->new( ... ) my $retr_fh = $ftp->retr($compressed_filename); gunzip $retr_fh => $outFilename, AutoClose => 1 @@ -518,7 +518,7 @@ the other C modules. my $file = $ARGV[0] ; - my $fh = new IO::File "<$file" + my $fh = IO::File->new( "<$file" ) or die "Cannot open '$file': $!\n"; while (1) @@ -566,9 +566,9 @@ the other C modules. # Done reading the Local Header - my $inf = new IO::Uncompress::RawInflate $fh, + my $inf = IO::Uncompress::RawInflate->new( $fh, Transparent => 1, - InputLength => $compressedLength + InputLength => $compressedLength ) or die "Cannot uncompress $file [$filename]: $RawInflateError\n" ; my $line_count = 0; @@ -585,14 +585,14 @@ The majority of the code above is concerned with reading the zip local header data. The code that I want to focus on is at the bottom. while (1) { - + # read local zip header data # get $filename # get $compressedLength - my $inf = new IO::Uncompress::RawInflate $fh, + my $inf = IO::Uncompress::RawInflate->new( $fh, Transparent => 1, - InputLength => $compressedLength + InputLength => $compressedLength ) or die "Cannot uncompress $file [$filename]: $RawInflateError\n" ; my $line_count = 0; @@ -618,7 +618,7 @@ byte directly after the compressed data stream. Now consider what the code looks like without C while (1) { - + # read local zip header data # get $filename # get $compressedLength @@ -626,8 +626,8 @@ Now consider what the code looks like without C # read all the compressed data into $data read($fh, $data, $compressedLength); - my $inf = new IO::Uncompress::RawInflate \$data, - Transparent => 1, + my $inf = IO::Uncompress::RawInflate->new( \$data, + Transparent => 1 ) or die "Cannot uncompress $file [$filename]: $RawInflateError\n" ; my $line_count = 0; @@ -658,7 +658,7 @@ file. =head1 SUPPORT -General feedback/questions/bug reports should be sent to +General feedback/questions/bug reports should be sent to L (preferred) or L. @@ -682,7 +682,7 @@ See the Changes file. =head1 COPYRIGHT AND LICENSE -Copyright (c) 2005-2019 Paul Marquess. All rights reserved. +Copyright (c) 2005-2022 Paul Marquess. All rights reserved. This program is free software; you can redistribute it and/or modify it under the same terms as Perl itself. diff --git a/gnu/usr.bin/perl/cpan/IO-Compress/lib/IO/Compress/Gzip.pm b/gnu/usr.bin/perl/cpan/IO-Compress/lib/IO/Compress/Gzip.pm index 3fd13695083..0471e33ea7a 100644 --- a/gnu/usr.bin/perl/cpan/IO-Compress/lib/IO/Compress/Gzip.pm +++ b/gnu/usr.bin/perl/cpan/IO-Compress/lib/IO/Compress/Gzip.pm @@ -8,24 +8,24 @@ use bytes; require Exporter ; -use IO::Compress::RawDeflate 2.093 () ; -use IO::Compress::Adapter::Deflate 2.093 ; +use IO::Compress::RawDeflate 2.106 () ; +use IO::Compress::Adapter::Deflate 2.106 ; -use IO::Compress::Base::Common 2.093 qw(:Status ); -use IO::Compress::Gzip::Constants 2.093 ; -use IO::Compress::Zlib::Extra 2.093 ; +use IO::Compress::Base::Common 2.106 qw(:Status ); +use IO::Compress::Gzip::Constants 2.106 ; +use IO::Compress::Zlib::Extra 2.106 ; BEGIN { - if (defined &utf8::downgrade ) + if (defined &utf8::downgrade ) { *noUTF8 = \&utf8::downgrade } else - { *noUTF8 = sub {} } + { *noUTF8 = sub {} } } our ($VERSION, @ISA, @EXPORT_OK, %EXPORT_TAGS, %DEFLATE_CONSTANTS, $GzipError); -$VERSION = '2.093'; +$VERSION = '2.106'; $GzipError = '' ; @ISA = qw(IO::Compress::RawDeflate Exporter); @@ -65,7 +65,7 @@ sub getExtraParams return ( # zlib behaviour $self->getZlibParams(), - + # Gzip header fields 'minimal' => [IO::Compress::Base::Common::Parse_boolean, 0], 'comment' => [IO::Compress::Base::Common::Parse_any, undef], @@ -105,7 +105,7 @@ sub ckParams # Also check that they only contain ISO 8859-1 chars. if ($got->parsed('name') && defined $got->getValue('name')) { my $name = $got->getValue('name'); - + return $self->saveErrorString(undef, "Null Character found in Name", Z_DATA_ERROR) if $strict && $name =~ /\x00/ ; @@ -132,16 +132,16 @@ sub ckParams return $self->saveErrorString(undef, "OS_Code must be between 0 and 255, got '$value'") if $value < 0 || $value > 255 ; - + } # gzip only supports Deflate at present $got->setValue('method' => Z_DEFLATED) ; if ( ! $got->parsed('extraflags')) { - $got->setValue('extraflags' => 2) + $got->setValue('extraflags' => 2) if $got->getValue('level') == Z_BEST_COMPRESSION ; - $got->setValue('extraflags' => 4) + $got->setValue('extraflags' => 4) if $got->getValue('level') == Z_BEST_SPEED ; } @@ -161,12 +161,13 @@ sub ckParams sub mkTrailer { my $self = shift ; - return pack("V V", *$self->{Compress}->crc32(), + return pack("V V", *$self->{Compress}->crc32(), *$self->{UnCompSize}->get32bit()); } sub getInverseClass { + no warnings 'once'; return ('IO::Uncompress::Gunzip', \$IO::Uncompress::Gunzip::GunzipError); } @@ -184,7 +185,7 @@ sub getFileInfo $params->setValue('name' => $filename) if ! $params->parsed('name') ; - $params->setValue('time' => $defaultTime) + $params->setValue('time' => $defaultTime) if ! $params->parsed('time') ; } @@ -207,7 +208,7 @@ sub mkHeader $flags |= GZIP_FLG_FEXTRA if $param->wantValue('extrafield') ; $flags |= GZIP_FLG_FNAME if $param->wantValue('name') ; $flags |= GZIP_FLG_FCOMMENT if $param->wantValue('comment') ; - + # MTIME my $time = $param->valueOrDefault('time', GZIP_MTIME_DEFAULT) ; @@ -218,7 +219,7 @@ sub mkHeader my $os_code = $param->valueOrDefault('os_code', GZIP_OS_DEFAULT) ; - my $out = pack("C4 V C C", + my $out = pack("C4 V C C", GZIP_ID1, # ID1 GZIP_ID2, # ID2 $method, # Compression Method @@ -240,7 +241,7 @@ sub mkHeader $name =~ s/\x00.*$//; $out .= $name ; # Terminate the filename with NULL unless it already is - $out .= GZIP_NULL_BYTE + $out .= GZIP_NULL_BYTE if !length $name or substr($name, 1, -1) ne GZIP_NULL_BYTE ; } @@ -257,7 +258,7 @@ sub mkHeader } # HEADER CRC - $out .= pack("v", Compress::Raw::Zlib::crc32($out) & 0x00FF ) + $out .= pack("v", Compress::Raw::Zlib::crc32($out) & 0x00FF ) if $param->getValue('headercrc') ; noUTF8($out); @@ -270,7 +271,7 @@ sub mkFinalTrailer return ''; } -1; +1; __END__ @@ -285,7 +286,7 @@ IO::Compress::Gzip - Write RFC 1952 files/buffers my $status = gzip $input => $output [,OPTS] or die "gzip failed: $GzipError\n"; - my $z = new IO::Compress::Gzip $output [,OPTS] + my $z = IO::Compress::Gzip->new( $output [,OPTS] ) or die "gzip failed: $GzipError\n"; $z->print($string); @@ -573,7 +574,7 @@ compressed data to a buffer, C<$buffer>. use IO::Compress::Gzip qw(gzip $GzipError) ; use IO::File ; - my $input = new IO::File "new( " \$buffer @@ -610,7 +611,7 @@ and if you want to compress each file one at a time, this will do the trick The format of the constructor for C is shown below - my $z = new IO::Compress::Gzip $output [,OPTS] + my $z = IO::Compress::Gzip->new( $output [,OPTS] ) or die "IO::Compress::Gzip failed: $GzipError\n"; It returns an C object on success and undef on failure. @@ -1226,7 +1227,7 @@ See L =head1 SUPPORT -General feedback/questions/bug reports should be sent to +General feedback/questions/bug reports should be sent to L (preferred) or L. @@ -1241,9 +1242,9 @@ L, L For RFC 1950, 1951 and 1952 see -L, -L and -L +L, +L and +L The I compression library was written by Jean-loup Gailly C and Mark Adler C. @@ -1263,8 +1264,7 @@ See the Changes file. =head1 COPYRIGHT AND LICENSE -Copyright (c) 2005-2019 Paul Marquess. All rights reserved. +Copyright (c) 2005-2022 Paul Marquess. All rights reserved. This program is free software; you can redistribute it and/or modify it under the same terms as Perl itself. - diff --git a/gnu/usr.bin/perl/cpan/IO-Compress/lib/IO/Compress/Gzip/Constants.pm b/gnu/usr.bin/perl/cpan/IO-Compress/lib/IO/Compress/Gzip/Constants.pm index 1d18fc4004c..8e32e17d590 100644 --- a/gnu/usr.bin/perl/cpan/IO-Compress/lib/IO/Compress/Gzip/Constants.pm +++ b/gnu/usr.bin/perl/cpan/IO-Compress/lib/IO/Compress/Gzip/Constants.pm @@ -9,7 +9,7 @@ require Exporter; our ($VERSION, @ISA, @EXPORT, %GZIP_OS_Names); our ($GZIP_FNAME_INVALID_CHAR_RE, $GZIP_FCOMMENT_INVALID_CHAR_RE); -$VERSION = '2.093'; +$VERSION = '2.106'; @ISA = qw(Exporter); @@ -89,22 +89,22 @@ use constant GZIP_FEXTRA_SUBFIELD_ID_SIZE => 2 ; use constant GZIP_FEXTRA_SUBFIELD_LEN_SIZE => 2 ; use constant GZIP_FEXTRA_SUBFIELD_HEADER_SIZE => GZIP_FEXTRA_SUBFIELD_ID_SIZE + GZIP_FEXTRA_SUBFIELD_LEN_SIZE; -use constant GZIP_FEXTRA_SUBFIELD_MAX_SIZE => GZIP_FEXTRA_MAX_SIZE - +use constant GZIP_FEXTRA_SUBFIELD_MAX_SIZE => GZIP_FEXTRA_MAX_SIZE - GZIP_FEXTRA_SUBFIELD_HEADER_SIZE ; if (ord('A') == 193) { - # EBCDIC + # EBCDIC $GZIP_FNAME_INVALID_CHAR_RE = '[\x00-\x3f\xff]'; $GZIP_FCOMMENT_INVALID_CHAR_RE = '[\x00-\x0a\x11-\x14\x16-\x3f\xff]'; - + } else { $GZIP_FNAME_INVALID_CHAR_RE = '[\x00-\x1F\x7F-\x9F]'; $GZIP_FCOMMENT_INVALID_CHAR_RE = '[\x00-\x09\x11-\x1F\x7F-\x9F]'; -} +} use constant GZIP_FHCRC_SIZE => 2 ; # aka CONTINUATION in gzip @@ -140,7 +140,7 @@ use constant GZIP_OS_DEFAULT=> 0xFF ; GZIP_OS_DEFAULT() => 'Unknown', ) ; -use constant GZIP_MINIMUM_HEADER => pack("C4 V C C", +use constant GZIP_MINIMUM_HEADER => pack("C4 V C C", GZIP_ID1, GZIP_ID2, GZIP_CM_DEFLATED, GZIP_FLG_DEFAULT, GZIP_MTIME_DEFAULT, GZIP_XFL_DEFAULT, GZIP_OS_DEFAULT) ; diff --git a/gnu/usr.bin/perl/cpan/IO-Compress/lib/IO/Compress/RawDeflate.pm b/gnu/usr.bin/perl/cpan/IO-Compress/lib/IO/Compress/RawDeflate.pm index c833f5e98b0..de0f332ecb8 100644 --- a/gnu/usr.bin/perl/cpan/IO-Compress/lib/IO/Compress/RawDeflate.pm +++ b/gnu/usr.bin/perl/cpan/IO-Compress/lib/IO/Compress/RawDeflate.pm @@ -6,15 +6,16 @@ use strict ; use warnings; use bytes; -use IO::Compress::Base 2.093 ; -use IO::Compress::Base::Common 2.093 qw(:Status ); -use IO::Compress::Adapter::Deflate 2.093 ; +use IO::Compress::Base 2.106 ; +use IO::Compress::Base::Common 2.106 qw(:Status :Parse); +use IO::Compress::Adapter::Deflate 2.106 ; +use Compress::Raw::Zlib 2.103 qw(Z_DEFLATED Z_DEFAULT_COMPRESSION Z_DEFAULT_STRATEGY); require Exporter ; our ($VERSION, @ISA, @EXPORT_OK, %DEFLATE_CONSTANTS, %EXPORT_TAGS, $RawDeflateError); -$VERSION = '2.093'; +$VERSION = '2.106'; $RawDeflateError = ''; @ISA = qw(IO::Compress::Base Exporter); @@ -28,8 +29,8 @@ push @EXPORT_OK, @IO::Compress::Adapter::Deflate::EXPORT_OK ; my %seen; foreach (keys %EXPORT_TAGS ) { - push @{$EXPORT_TAGS{constants}}, - grep { !$seen{$_}++ } + push @{$EXPORT_TAGS{constants}}, + grep { !$seen{$_}++ } @{ $EXPORT_TAGS{$_} } } $EXPORT_TAGS{all} = $EXPORT_TAGS{constants} ; @@ -41,7 +42,7 @@ push @EXPORT_OK, @IO::Compress::Adapter::Deflate::EXPORT_OK ; #push @{ $EXPORT_TAGS{all} }, @EXPORT_OK ; Exporter::export_ok_tags('all'); - + sub new @@ -82,7 +83,7 @@ sub mkComp return $self->saveErrorString(undef, $errstr, $errno) if ! defined $obj; - return $obj; + return $obj; } @@ -116,8 +117,6 @@ sub getExtraParams return getZlibParams(); } -use IO::Compress::Base::Common 2.093 qw(:Parse); -use Compress::Raw::Zlib 2.093 qw(Z_DEFLATED Z_DEFAULT_COMPRESSION Z_DEFAULT_STRATEGY); our %PARAMS = ( #'method' => [IO::Compress::Base::Common::Parse_unsigned, Z_DEFLATED], 'level' => [IO::Compress::Base::Common::Parse_signed, Z_DEFAULT_COMPRESSION], @@ -125,17 +124,18 @@ our %PARAMS = ( 'crc32' => [IO::Compress::Base::Common::Parse_boolean, 0], 'adler32' => [IO::Compress::Base::Common::Parse_boolean, 0], - 'merge' => [IO::Compress::Base::Common::Parse_boolean, 0], + 'merge' => [IO::Compress::Base::Common::Parse_boolean, 0], ); - + sub getZlibParams { - return %PARAMS; + return %PARAMS; } sub getInverseClass { - return ('IO::Uncompress::RawInflate', + no warnings 'once'; + return ('IO::Uncompress::RawInflate', \$IO::Uncompress::RawInflate::RawInflateError); } @@ -144,7 +144,7 @@ sub getFileInfo my $self = shift ; my $params = shift; my $file = shift ; - + } use Fcntl qw(SEEK_SET); @@ -156,20 +156,20 @@ sub createMerge my $outType = shift ; my ($invClass, $error_ref) = $self->getInverseClass(); - eval "require $invClass" + eval "require $invClass" or die "aaaahhhh" ; - my $inf = $invClass->new( $outValue, - Transparent => 0, + my $inf = $invClass->new( $outValue, + Transparent => 0, #Strict => 1, AutoClose => 0, Scan => 1) or return $self->saveErrorString(undef, "Cannot create InflateScan object: $$error_ref" ) ; my $end_offset = 0; - $inf->scan() + $inf->scan() or return $self->saveErrorString(undef, "Error Scanning: $$error_ref", $inf->errorNo) ; - $inf->zap($end_offset) + $inf->zap($end_offset) or return $self->saveErrorString(undef, "Error Zapping: $$error_ref", $inf->errorNo) ; my $def = *$self->{Compress} = $inf->createDeflate(); @@ -178,10 +178,10 @@ sub createMerge *$self->{UnCompSize} = *$inf->{UnCompSize}->clone(); *$self->{CompSize} = *$inf->{CompSize}->clone(); # TODO -- fix this - #*$self->{CompSize} = new U64(0, *$self->{UnCompSize_32bit}); + #*$self->{CompSize} = U64->new(0, *$self->{UnCompSize_32bit}); - if ( $outType eq 'buffer') + if ( $outType eq 'buffer') { substr( ${ *$self->{Buffer} }, $end_offset) = '' } elsif ($outType eq 'handle' || $outType eq 'filename') { *$self->{FH} = *$inf->{FH} ; @@ -189,8 +189,8 @@ sub createMerge *$self->{FH}->flush() ; *$self->{Handle} = 1 if $outType eq 'handle'; - #seek(*$self->{FH}, $end_offset, SEEK_SET) - *$self->{FH}->seek($end_offset, SEEK_SET) + #seek(*$self->{FH}, $end_offset, SEEK_SET) + *$self->{FH}->seek($end_offset, SEEK_SET) or return $self->saveErrorString(undef, $!, $!) ; } @@ -199,7 +199,7 @@ sub createMerge #### zlib specific methods -sub deflateParams +sub deflateParams { my $self = shift ; @@ -210,7 +210,7 @@ sub deflateParams return $self->saveErrorString(0, *$self->{Compress}{Error}, *$self->{Compress}{ErrorNo}) if $status == STATUS_ERROR; - return 1; + return 1; } @@ -231,7 +231,7 @@ IO::Compress::RawDeflate - Write RFC 1951 files/buffers my $status = rawdeflate $input => $output [,OPTS] or die "rawdeflate failed: $RawDeflateError\n"; - my $z = new IO::Compress::RawDeflate $output [,OPTS] + my $z = IO::Compress::RawDeflate->new( $output [,OPTS] ) or die "rawdeflate failed: $RawDeflateError\n"; $z->print($string); @@ -511,7 +511,7 @@ compressed data to a buffer, C<$buffer>. use IO::Compress::RawDeflate qw(rawdeflate $RawDeflateError) ; use IO::File ; - my $input = new IO::File "new( " \$buffer @@ -548,7 +548,7 @@ and if you want to compress each file one at a time, this will do the trick The format of the constructor for C is shown below - my $z = new IO::Compress::RawDeflate $output [,OPTS] + my $z = IO::Compress::RawDeflate->new( $output [,OPTS] ) or die "IO::Compress::RawDeflate failed: $RawDeflateError\n"; It returns an C object on success and undef on failure. @@ -970,7 +970,7 @@ See L =head1 SUPPORT -General feedback/questions/bug reports should be sent to +General feedback/questions/bug reports should be sent to L (preferred) or L. @@ -985,9 +985,9 @@ L, L For RFC 1950, 1951 and 1952 see -L, -L and -L +L, +L and +L The I compression library was written by Jean-loup Gailly C and Mark Adler C. @@ -1007,8 +1007,7 @@ See the Changes file. =head1 COPYRIGHT AND LICENSE -Copyright (c) 2005-2019 Paul Marquess. All rights reserved. +Copyright (c) 2005-2022 Paul Marquess. All rights reserved. This program is free software; you can redistribute it and/or modify it under the same terms as Perl itself. - diff --git a/gnu/usr.bin/perl/cpan/IO-Compress/lib/IO/Compress/Zip.pm b/gnu/usr.bin/perl/cpan/IO-Compress/lib/IO/Compress/Zip.pm index 70b98b80d6e..ecba767727b 100644 --- a/gnu/usr.bin/perl/cpan/IO-Compress/lib/IO/Compress/Zip.pm +++ b/gnu/usr.bin/perl/cpan/IO-Compress/lib/IO/Compress/Zip.pm @@ -4,30 +4,41 @@ use strict ; use warnings; use bytes; -use IO::Compress::Base::Common 2.093 qw(:Status ); -use IO::Compress::RawDeflate 2.093 (); -use IO::Compress::Adapter::Deflate 2.093 ; -use IO::Compress::Adapter::Identity 2.093 ; -use IO::Compress::Zlib::Extra 2.093 ; -use IO::Compress::Zip::Constants 2.093 ; +use IO::Compress::Base::Common 2.106 qw(:Status ); +use IO::Compress::RawDeflate 2.106 (); +use IO::Compress::Adapter::Deflate 2.106 ; +use IO::Compress::Adapter::Identity 2.106 ; +use IO::Compress::Zlib::Extra 2.106 ; +use IO::Compress::Zip::Constants 2.106 ; use File::Spec(); use Config; -use Compress::Raw::Zlib 2.093 (); +use Compress::Raw::Zlib 2.103 (); BEGIN { - eval { require IO::Compress::Adapter::Bzip2 ; - import IO::Compress::Adapter::Bzip2 2.093 ; - require IO::Compress::Bzip2 ; - import IO::Compress::Bzip2 2.093 ; + eval { require IO::Compress::Adapter::Bzip2 ; + IO::Compress::Adapter::Bzip2->import( 2.103 ); + require IO::Compress::Bzip2 ; + IO::Compress::Bzip2->import( 2.103 ); } ; - - eval { require IO::Compress::Adapter::Lzma ; - import IO::Compress::Adapter::Lzma 2.093 ; - require IO::Compress::Lzma ; - import IO::Compress::Lzma 2.093 ; + + eval { require IO::Compress::Adapter::Lzma ; + IO::Compress::Adapter::Lzma->import( 2.103 ); + require IO::Compress::Lzma ; + IO::Compress::Lzma->import( 2.103 ); + } ; + + eval { require IO::Compress::Adapter::Xz ; + IO::Compress::Adapter::Xz->import( 2.103 ); + require IO::Compress::Xz ; + IO::Compress::Xz->import( 2.103 ); + } ; + eval { require IO::Compress::Adapter::Zstd ; + IO::Compress::Adapter::Zstd->import( 2.103 ); + require IO::Compress::Zstd ; + IO::Compress::Zstd->import( 2.103 ); } ; } @@ -36,7 +47,7 @@ require Exporter ; our ($VERSION, @ISA, @EXPORT_OK, %EXPORT_TAGS, %DEFLATE_CONSTANTS, $ZipError); -$VERSION = '2.093'; +$VERSION = '2.106'; $ZipError = ''; @ISA = qw(IO::Compress::RawDeflate Exporter); @@ -45,7 +56,7 @@ $ZipError = ''; push @{ $EXPORT_TAGS{all} }, @EXPORT_OK ; -$EXPORT_TAGS{zip_method} = [qw( ZIP_CM_STORE ZIP_CM_DEFLATE ZIP_CM_BZIP2 ZIP_CM_LZMA)]; +$EXPORT_TAGS{zip_method} = [qw( ZIP_CM_STORE ZIP_CM_DEFLATE ZIP_CM_BZIP2 ZIP_CM_LZMA ZIP_CM_XZ ZIP_CM_ZSTD)]; push @{ $EXPORT_TAGS{all} }, @{ $EXPORT_TAGS{zip_method} }; Exporter::export_ok_tags('all'); @@ -54,34 +65,42 @@ sub new { my $class = shift ; - my $obj = IO::Compress::Base::Common::createSelfTiedObject($class, \$ZipError); + my $obj = IO::Compress::Base::Common::createSelfTiedObject($class, \$ZipError); $obj->_create(undef, @_); } sub zip { - my $obj = IO::Compress::Base::Common::createSelfTiedObject(undef, \$ZipError); + my $obj = IO::Compress::Base::Common::createSelfTiedObject(undef, \$ZipError); return $obj->_def(@_); } sub isMethodAvailable { my $method = shift; - + # Store & Deflate are always available return 1 if $method == ZIP_CM_STORE || $method == ZIP_CM_DEFLATE ; - - return 1 - if $method == ZIP_CM_BZIP2 and + + return 1 + if $method == ZIP_CM_BZIP2 and defined $IO::Compress::Adapter::Bzip2::VERSION; - + return 1 if $method == ZIP_CM_LZMA and defined $IO::Compress::Adapter::Lzma::VERSION; - - return 0; + + return 1 + if $method == ZIP_CM_XZ and + defined $IO::Compress::Adapter::Xz::VERSION; + + return 1 + if $method == ZIP_CM_ZSTD and + defined $IO::Compress::Adapter::ZSTD::VERSION; + + return 0; } sub beforePayload @@ -94,12 +113,12 @@ sub beforePayload my $sparse = *$self->{ZipData}{Sparse} ; *$self->{CompSize}->add( $sparse ); *$self->{UnCompSize}->add( $sparse ); - + *$self->{FH}->seek($sparse, IO::Handle::SEEK_CUR); - + *$self->{ZipData}{CRC32} = Compress::Raw::Zlib::crc32($NULLS, *$self->{ZipData}{CRC32}) for 1 .. int $sparse / $inc; - *$self->{ZipData}{CRC32} = Compress::Raw::Zlib::crc32(substr($NULLS, 0, $sparse % $inc), + *$self->{ZipData}{CRC32} = Compress::Raw::Zlib::crc32(substr($NULLS, 0, $sparse % $inc), *$self->{ZipData}{CRC32}) if $sparse % $inc; } @@ -141,19 +160,31 @@ sub mkComp ); *$self->{ZipData}{CRC32} = Compress::Raw::Zlib::crc32(undef); } + elsif (*$self->{ZipData}{Method} == ZIP_CM_XZ) { + ($obj, $errstr, $errno) = IO::Compress::Adapter::Xz::mkCompObject($got->getValue('preset'), + $got->getValue('extreme'), + 0 + ); + *$self->{ZipData}{CRC32} = Compress::Raw::Zlib::crc32(undef); + } + elsif (*$self->{ZipData}{Method} == ZIP_CM_ZSTD) { + ($obj, $errstr, $errno) = IO::Compress::Adapter::Zstd::mkCompObject(defined $got->getValue('level') ? $got->getValue('level') : 3, + ); + *$self->{ZipData}{CRC32} = Compress::Raw::Zlib::crc32(undef); + } return $self->saveErrorString(undef, $errstr, $errno) if ! defined $obj; if (! defined *$self->{ZipData}{SizesOffset}) { *$self->{ZipData}{SizesOffset} = 0; - *$self->{ZipData}{Offset} = new U64 ; + *$self->{ZipData}{Offset} = U64->new(); } *$self->{ZipData}{AnyZip64} = 0 if ! defined *$self->{ZipData}{AnyZip64} ; - return $obj; + return $obj; } sub reset @@ -163,7 +194,7 @@ sub reset *$self->{Compress}->reset(); *$self->{ZipData}{CRC32} = Compress::Raw::Zlib::crc32(''); - return STATUS_OK; + return STATUS_OK; } sub filterUncompressed @@ -187,7 +218,7 @@ sub canonicalName # separators become slashes, etc.). # Will translate internal slashes in path components (i.e. on Macs) to # underscores. Discards volume names. - # When $forceDir is set, returns paths with trailing slashes + # When $forceDir is set, returns paths with trailing slashes # # input output # . '.' @@ -204,8 +235,8 @@ sub canonicalName my ( $volume, $directories, $file ) = File::Spec->splitpath( File::Spec->canonpath($name), $forceDir ); - - my @dirs = map { $_ =~ s{/}{_}g; $_ } + + my @dirs = map { $_ =~ s{/}{_}g; $_ } File::Spec->splitdir($directories); if ( @dirs > 0 ) { pop (@dirs) if $dirs[-1] eq '' } # remove empty component @@ -229,9 +260,9 @@ sub mkHeader { my $self = shift; my $param = shift ; - + *$self->{ZipData}{LocalHdrOffset} = U64::clone(*$self->{ZipData}{Offset}); - + my $comment = ''; $comment = $param->valueOrDefault('comment') ; @@ -256,7 +287,7 @@ sub mkHeader utf8::downgrade($comment, 1) or Carp::croak "Wide character in zip comment"; } - } + } my $hdr = ''; @@ -267,19 +298,19 @@ sub mkHeader my $empty = 0; my $osCode = $param->getValue('os_code') ; my $extFileAttr = 0 ; - + # This code assumes Unix. # TODO - revisit this - $extFileAttr = 0100644 << 16 + $extFileAttr = 0100644 << 16 if $osCode == ZIP_OS_CODE_UNIX ; if (*$self->{ZipData}{Zip64}) { $empty = IO::Compress::Base::Common::MAX32; my $x = ''; - $x .= pack "V V", 0, 0 ; # uncompressedLength - $x .= pack "V V", 0, 0 ; # compressedLength - + $x .= pack "V V", 0, 0 ; # uncompressedLength + $x .= pack "V V", 0, 0 ; # compressedLength + # Zip64 needs to be first in extra field to workaround a Windows Explorer Bug # See http://www.info-zip.org/phpBB3/viewtopic.php?f=3&t=440 for details $extra .= IO::Compress::Zlib::Extra::mkSubField(ZIP_EXTRA_ID_ZIP64, $x); @@ -288,8 +319,8 @@ sub mkHeader if (! $param->getValue('minimal')) { if ($param->parsed('mtime')) { - $extra .= mkExtendedTime($param->getValue('mtime'), - $param->getValue('atime'), + $extra .= mkExtendedTime($param->getValue('mtime'), + $param->getValue('atime'), $param->getValue('ctime')); $ctlExtra .= mkExtendedTime($param->getValue('mtime')); @@ -299,30 +330,30 @@ sub mkHeader { if ( $param->getValue('want_exunixn') ) { - my $ux3 = mkUnixNExtra( @{ $param->getValue('want_exunixn') }); + my $ux3 = mkUnixNExtra( @{ $param->getValue('want_exunixn') }); $extra .= $ux3; $ctlExtra .= $ux3; } if ( $param->getValue('exunix2') ) { - $extra .= mkUnix2Extra( @{ $param->getValue('exunix2') }); + $extra .= mkUnix2Extra( @{ $param->getValue('exunix2') }); $ctlExtra .= mkUnix2Extra(); } } - $extFileAttr = $param->getValue('extattr') + $extFileAttr = $param->getValue('extattr') if defined $param->getValue('extattr') ; - $extra .= $param->getValue('extrafieldlocal') + $extra .= $param->getValue('extrafieldlocal') if defined $param->getValue('extrafieldlocal'); - $ctlExtra .= $param->getValue('extrafieldcentral') + $ctlExtra .= $param->getValue('extrafieldcentral') if defined $param->getValue('extrafieldcentral'); } my $method = *$self->{ZipData}{Method} ; - my $gpFlag = 0 ; + my $gpFlag = 0 ; $gpFlag |= ZIP_GP_FLAG_STREAMING_MASK if *$self->{ZipData}{Stream} ; @@ -356,7 +387,7 @@ sub mkHeader $hdr .= pack 'V', $empty ; # uncompressed length - 0 when streaming $hdr .= pack 'v', length $filename ; # filename length $hdr .= pack 'v', length $extra ; # extra length - + $hdr .= $filename ; # Remember the offset for the compressed & uncompressed lengths in the @@ -391,18 +422,18 @@ sub mkHeader $ctl .= pack 'v', length $ctlExtra ; # extra length $ctl .= pack 'v', length $comment ; # file comment length - $ctl .= pack 'v', 0 ; # disk number start + $ctl .= pack 'v', 0 ; # disk number start $ctl .= pack 'v', $ifa ; # internal file attributes $ctl .= pack 'V', $extFileAttr ; # external file attributes # offset to local hdr - if (*$self->{ZipData}{LocalHdrOffset}->is64bit() ) { + if (*$self->{ZipData}{LocalHdrOffset}->is64bit() ) { $ctl .= pack 'V', IO::Compress::Base::Common::MAX32 ; } else { - $ctl .= *$self->{ZipData}{LocalHdrOffset}->getPacked_V32() ; + $ctl .= *$self->{ZipData}{LocalHdrOffset}->getPacked_V32() ; } - + $ctl .= $filename ; *$self->{ZipData}{Offset}->add32(length $hdr) ; @@ -424,7 +455,7 @@ sub mkTrailer $crc32 = pack "V", *$self->{ZipData}{CRC32}; } - my ($ctl, $ctlExtra, $comment) = @{ *$self->{ZipData}{CentralHeader} }; + my ($ctl, $ctlExtra, $comment) = @{ *$self->{ZipData}{CentralHeader} }; my $sizes ; if (! *$self->{ZipData}{Zip64}) { @@ -450,7 +481,7 @@ sub mkTrailer else { $self->writeAt(*$self->{ZipData}{LocalHdrOffset}->get64bit() + 14, $crc32) or return undef; - $self->writeAt(*$self->{ZipData}{SizesOffset}, + $self->writeAt(*$self->{ZipData}{SizesOffset}, *$self->{ZipData}{Zip64} ? $xtrasize : $sizes) or return undef; } @@ -463,31 +494,31 @@ sub mkTrailer # uncompressed length - only set zip64 if needed if (*$self->{UnCompSize}->isAlmost64bit()) { # || *$self->{ZipData}{Zip64}) { - $zip64Payload .= *$self->{UnCompSize}->getPacked_V64() ; + $zip64Payload .= *$self->{UnCompSize}->getPacked_V64() ; } else { substr($ctl, 24, 4) = *$self->{UnCompSize}->getPacked_V32() ; } # compressed length - only set zip64 if needed if (*$self->{CompSize}->isAlmost64bit()) { # || *$self->{ZipData}{Zip64}) { - $zip64Payload .= *$self->{CompSize}->getPacked_V64() ; + $zip64Payload .= *$self->{CompSize}->getPacked_V64() ; } else { substr($ctl, 20, 4) = *$self->{CompSize}->getPacked_V32() ; } # Local Header offset $zip64Payload .= *$self->{ZipData}{LocalHdrOffset}->getPacked_V64() - if *$self->{ZipData}{LocalHdrOffset}->is64bit() ; + if *$self->{ZipData}{LocalHdrOffset}->is64bit() ; # disk no - always zero, so don't need to include it. - #$zip64Payload .= pack "V", 0 ; + #$zip64Payload .= pack "V", 0 ; my $zip64Xtra = ''; - + if (length $zip64Payload) { $zip64Xtra = IO::Compress::Zlib::Extra::mkSubField(ZIP_EXTRA_ID_ZIP64, $zip64Payload); - - substr($ctl, *$self->{ZipData}{ExtraOffset}, 2) = + + substr($ctl, *$self->{ZipData}{ExtraOffset}, 2) = pack 'v', *$self->{ZipData}{ExtraSize} + length $zip64Xtra; *$self->{ZipData}{AnyZip64} = 1; @@ -496,7 +527,7 @@ sub mkTrailer # Zip64 needs to be first in extra field to workaround a Windows Explorer Bug # See http://www.info-zip.org/phpBB3/viewtopic.php?f=3&t=440 for details $ctl .= $zip64Xtra . $ctlExtra . $comment; - + *$self->{ZipData}{Offset}->add32(length($hdr)); *$self->{ZipData}{Offset}->add( *$self->{CompSize} ); push @{ *$self->{ZipData}{CentralDir} }, $ctl ; @@ -507,17 +538,17 @@ sub mkTrailer sub mkFinalTrailer { my $self = shift ; - + my $comment = ''; $comment = *$self->{ZipData}{ZipComment} ; my $cd_offset = *$self->{ZipData}{Offset}->get32bit() ; # offset to start central dir my $entries = @{ *$self->{ZipData}{CentralDir} }; - - *$self->{ZipData}{AnyZip64} = 1 - if *$self->{ZipData}{Offset}->is64bit || $entries >= 0xFFFF ; - + + *$self->{ZipData}{AnyZip64} = 1 + if *$self->{ZipData}{Offset}->is64bit || $entries >= 0xFFFF ; + my $cd = join '', @{ *$self->{ZipData}{CentralDir} }; my $cd_len = length $cd ; @@ -540,12 +571,12 @@ sub mkFinalTrailer . U64::pack_V64(length $z64e) . $z64e ; - *$self->{ZipData}{Offset}->add32(length $cd) ; + *$self->{ZipData}{Offset}->add32(length $cd) ; $z64e .= pack "V", ZIP64_END_CENTRAL_LOC_HDR_SIG; # signature $z64e .= pack 'V', 0 ; # number of disk with central dir $z64e .= *$self->{ZipData}{Offset}->getPacked_V64() ; # offset to end zip64 central dir - $z64e .= pack 'V', 1 ; # Total number of disks + $z64e .= pack 'V', 1 ; # Total number of disks $cd_offset = IO::Compress::Base::Common::MAX32 ; $cd_len = IO::Compress::Base::Common::MAX32 if IO::Compress::Base::Common::isGeMax32 $cd_len ; @@ -570,7 +601,7 @@ sub ckParams { my $self = shift ; my $got = shift; - + $got->setValue('crc32' => 1); if (! $got->parsed('time') ) { @@ -581,7 +612,7 @@ sub ckParams if ($got->parsed('extime') ) { my $timeRef = $got->getValue('extime'); if ( defined $timeRef) { - return $self->saveErrorString(undef, "exTime not a 3-element array ref") + return $self->saveErrorString(undef, "exTime not a 3-element array ref") if ref $timeRef ne 'ARRAY' || @$timeRef != 3; } @@ -589,14 +620,14 @@ sub ckParams $got->setValue("atime", $timeRef->[0]); $got->setValue("ctime", $timeRef->[2]); } - + # Unix2/3 Extended Attribute for my $name (qw(exunix2 exunixn)) { if ($got->parsed($name) ) { my $idRef = $got->getValue($name); if ( defined $idRef) { - return $self->saveErrorString(undef, "$name not a 2-element array ref") + return $self->saveErrorString(undef, "$name not a 2-element array ref") if ref $idRef ne 'ARRAY' || @$idRef != 2; } @@ -612,15 +643,15 @@ sub ckParams *$self->{ZipData}{Stream} = $got->getValue('stream'); my $method = $got->getValue('method'); - return $self->saveErrorString(undef, "Unknown Method '$method'") + return $self->saveErrorString(undef, "Unknown Method '$method'") if ! defined $ZIP_CM_MIN_VERSIONS{$method}; return $self->saveErrorString(undef, "Bzip2 not available") - if $method == ZIP_CM_BZIP2 and + if $method == ZIP_CM_BZIP2 and ! defined $IO::Compress::Adapter::Bzip2::VERSION; return $self->saveErrorString(undef, "Lzma not available") - if $method == ZIP_CM_LZMA + if $method == ZIP_CM_LZMA and ! defined $IO::Compress::Adapter::Lzma::VERSION; *$self->{ZipData}{Method} = $method; @@ -673,11 +704,11 @@ sub outputPayload #} -our %PARAMS = ( +our %PARAMS = ( 'stream' => [IO::Compress::Base::Common::Parse_boolean, 1], #'store' => [IO::Compress::Base::Common::Parse_boolean, 0], 'method' => [IO::Compress::Base::Common::Parse_unsigned, ZIP_CM_DEFLATE], - + # # Zip header fields 'minimal' => [IO::Compress::Base::Common::Parse_boolean, 0], 'zip64' => [IO::Compress::Base::Common::Parse_boolean, 0], @@ -689,14 +720,14 @@ our %PARAMS = ( 'efs' => [IO::Compress::Base::Common::Parse_boolean, 0], 'time' => [IO::Compress::Base::Common::Parse_any, undef], 'extime' => [IO::Compress::Base::Common::Parse_any, undef], - 'exunix2' => [IO::Compress::Base::Common::Parse_any, undef], - 'exunixn' => [IO::Compress::Base::Common::Parse_any, undef], - 'extattr' => [IO::Compress::Base::Common::Parse_any, - $Compress::Raw::Zlib::gzip_os_code == 3 - ? 0100644 << 16 + 'exunix2' => [IO::Compress::Base::Common::Parse_any, undef], + 'exunixn' => [IO::Compress::Base::Common::Parse_any, undef], + 'extattr' => [IO::Compress::Base::Common::Parse_any, + $Compress::Raw::Zlib::gzip_os_code == 3 + ? 0100644 << 16 : 0], 'os_code' => [IO::Compress::Base::Common::Parse_unsigned, $Compress::Raw::Zlib::gzip_os_code], - + 'textflag' => [IO::Compress::Base::Common::Parse_boolean, 0], 'extrafieldlocal' => [IO::Compress::Base::Common::Parse_any, undef], 'extrafieldcentral'=> [IO::Compress::Base::Common::Parse_any, undef], @@ -705,15 +736,15 @@ our %PARAMS = ( 'preset' => [IO::Compress::Base::Common::Parse_unsigned, 6], 'extreme' => [IO::Compress::Base::Common::Parse_boolean, 0], - # For internal use only + # For internal use only 'sparse' => [IO::Compress::Base::Common::Parse_unsigned, 0], IO::Compress::RawDeflate::getZlibParams(), defined $IO::Compress::Bzip2::VERSION ? IO::Compress::Bzip2::getExtraParams() : () - - + + ); sub getExtraParams @@ -723,6 +754,7 @@ sub getExtraParams sub getInverseClass { + no warnings 'once'; return ('IO::Uncompress::Unzip', \$IO::Uncompress::Unzip::UnzipError); } @@ -744,12 +776,12 @@ sub getFileInfo my ($mode, $uid, $gid, $size, $atime, $mtime, $ctime) ; if ( $params->parsed('storelinks') ) { - ($mode, $uid, $gid, $size, $atime, $mtime, $ctime) + ($mode, $uid, $gid, $size, $atime, $mtime, $ctime) = (lstat($filename))[2, 4,5,7, 8,9,10] ; } else { - ($mode, $uid, $gid, $size, $atime, $mtime, $ctime) + ($mode, $uid, $gid, $size, $atime, $mtime, $ctime) = (stat($filename))[2, 4,5,7, 8,9,10] ; } @@ -762,9 +794,9 @@ sub getFileInfo $params->setValue('name' => $filename) if ! $params->parsed('name') ; - $params->setValue('time' => $mtime) + $params->setValue('time' => $mtime) if ! $params->parsed('time') ; - + if ( ! $params->parsed('extime')) { $params->setValue('mtime' => $mtime) ; @@ -780,14 +812,14 @@ sub getFileInfo my $attr = $mode << 16; $attr |= ZIP_A_RONLY if ($mode & S_IWRITE) == 0 ; $attr |= ZIP_A_DIR if ($mode & S_IFMT ) == S_IFDIR ; - + $params->setValue('extattr' => $attr); } $params->setValue('want_exunixn', [$uid, $gid]); $params->setValue('uid' => $uid) ; $params->setValue('gid' => $gid) ; - + } sub mkExtendedTime @@ -821,7 +853,7 @@ sub mkUnix2Extra $ids .= pack("v", $id); } - return IO::Compress::Zlib::Extra::mkSubField(ZIP_EXTRA_ID_INFO_ZIP_UNIX2, + return IO::Compress::Zlib::Extra::mkSubField(ZIP_EXTRA_ID_INFO_ZIP_UNIX2, $ids); } @@ -838,7 +870,7 @@ sub mkUnixNExtra $ids .= pack "C", $Config{gidsize}; $ids .= pack "V", $gid; - return IO::Compress::Zlib::Extra::mkSubField(ZIP_EXTRA_ID_INFO_ZIP_UNIXN, + return IO::Compress::Zlib::Extra::mkSubField(ZIP_EXTRA_ID_INFO_ZIP_UNIXN, $ids); } @@ -847,8 +879,8 @@ sub mkUnixNExtra sub _unixToDosTime # Archive::Zip::Member { my $time_t = shift; - - # TODO - add something to cope with unix time < 1980 + + # TODO - add something to cope with unix time < 1980 my ( $sec, $min, $hour, $mday, $mon, $year ) = localtime($time_t); my $dt = 0; $dt += ( $sec >> 1 ); @@ -875,7 +907,7 @@ IO::Compress::Zip - Write zip files/buffers my $status = zip $input => $output [,OPTS] or die "zip failed: $ZipError\n"; - my $z = new IO::Compress::Zip $output [,OPTS] + my $z = IO::Compress::Zip->new( $output [,OPTS] ) or die "zip failed: $ZipError\n"; $z->print($string); @@ -916,19 +948,35 @@ This module provides a Perl interface that allows writing zip compressed data to files or buffer. The primary purpose of this module is to provide streaming write access to -zip files and buffers. It is not a general-purpose file archiver. If that -is what you want, check out C or C. +zip files and buffers. -At present the following compression methods are supported by IO::Compress::Zip, -namely Store (no compression at all), Deflate, Bzip2 and LZMA. - -B +At present the following compression methods are supported by IO::Compress::Zip =over 5 -=item * To use Bzip2 compression, the module C must be installed. +=item Store (0) + +=item Deflate (8) + +=item Bzip2 (12) + +To write Bzip2 content, the module C must +be installed. + +=item Lzma (14) + +To write LZMA content, the module C must +be installed. + +=item Zstandard (93) + +To write Zstandard content, the module C must +be installed. -=item * To use LZMA compression, the module C must be installed. +=item Xz (95) + +To write Xz content, the module C must +be installed. =back @@ -1205,7 +1253,7 @@ compressed data to a buffer, C<$buffer>. use IO::Compress::Zip qw(zip $ZipError) ; use IO::File ; - my $input = new IO::File "new( " \$buffer @@ -1246,7 +1294,7 @@ or more succinctly The format of the constructor for C is shown below - my $z = new IO::Compress::Zip $output [,OPTS] + my $z = IO::Compress::Zip->new( $output [,OPTS] ) or die "IO::Compress::Zip failed: $ZipError\n"; It returns an C object on success and undef on failure. @@ -1338,7 +1386,7 @@ This parameter defaults to 0. =head3 File Naming Options -A quick bit of zip file terminology -- A zip archive consists of one or more I, where each member has an associated +A quick bit of zip file terminology -- A zip archive consists of one or more I, where each member has an associated filename, known as the I. The options listed in this section control how the I (or filename) is stored the zip archive. @@ -1355,7 +1403,7 @@ By default when adding a filename to the zip archive, the I You should only need to use this option if you want the I to be different from the uncompressed filename or when the input is a filehandle or a buffer. -The default behaviour for what I is used when the C option +The default behaviour for what I is used when the C option is I specified depends on the form of the C<$input> parameter: =over 5 @@ -1365,11 +1413,11 @@ is I specified depends on the form of the C<$input> parameter: If the C<$input> parameter is a filename, the value of C<$input> will be used for the I . -=item * +=item * If the C<$input> parameter is not a filename, the I will be an empty string. -=back +=back Note that both the C and C options can modify the value used for the I. @@ -1484,7 +1532,7 @@ archive. The default is 0. -=back +=back =head3 Deflate Compression Options @@ -1553,7 +1601,7 @@ The default is 0. =back -=head3 Lzma Compression Options +=head3 Lzma and Xz Compression Options =over 5 @@ -1683,11 +1731,11 @@ By default, no comment field is written to the zip file. =item C<< Method => $method >> -Controls which compression method is used. At present four compression -methods are supported, namely Store (no compression at all), Deflate, -Bzip2 and Lzma. +Controls which compression method is used. At present the compression +methods supported are: Store (no compression at all), Deflate, +Bzip2, Zstd, Xz and Lzma. -The symbols, ZIP_CM_STORE, ZIP_CM_DEFLATE, ZIP_CM_BZIP2 and ZIP_CM_LZMA +The symbols ZIP_CM_STORE, ZIP_CM_DEFLATE, ZIP_CM_BZIP2, ZIP_CM_ZSTD, ZIP_CM_XZ and ZIP_CM_LZMA are used to select the compression method. These constants are not imported by C by default. @@ -1704,6 +1752,14 @@ Note that to create Lzma content, the module C must be installed. A fatal error will be thrown if you attempt to create Lzma content when C is not available. +Note that to create Xz content, the module C must +be installed. A fatal error will be thrown if you attempt to create Xz +content when C is not available. + +Note that to create Zstd content, the module C must +be installed. A fatal error will be thrown if you attempt to create Zstd +content when C is not available. + The default method is ZIP_CM_DEFLATE. =item C<< TextFlag => 0|1 >> @@ -2050,7 +2106,7 @@ See L =head1 SUPPORT -General feedback/questions/bug reports should be sent to +General feedback/questions/bug reports should be sent to L (preferred) or L. @@ -2065,9 +2121,9 @@ L, L For RFC 1950, 1951 and 1952 see -L, -L and -L +L, +L and +L The I compression library was written by Jean-loup Gailly C and Mark Adler C. @@ -2087,8 +2143,7 @@ See the Changes file. =head1 COPYRIGHT AND LICENSE -Copyright (c) 2005-2019 Paul Marquess. All rights reserved. +Copyright (c) 2005-2022 Paul Marquess. All rights reserved. This program is free software; you can redistribute it and/or modify it under the same terms as Perl itself. - diff --git a/gnu/usr.bin/perl/cpan/IO-Compress/lib/IO/Compress/Zip/Constants.pm b/gnu/usr.bin/perl/cpan/IO-Compress/lib/IO/Compress/Zip/Constants.pm index edae0c29d27..7cfe431932a 100644 --- a/gnu/usr.bin/perl/cpan/IO-Compress/lib/IO/Compress/Zip/Constants.pm +++ b/gnu/usr.bin/perl/cpan/IO-Compress/lib/IO/Compress/Zip/Constants.pm @@ -7,7 +7,7 @@ require Exporter; our ($VERSION, @ISA, @EXPORT, %ZIP_CM_MIN_VERSIONS); -$VERSION = '2.093'; +$VERSION = '2.106'; @ISA = qw(Exporter); @@ -18,7 +18,10 @@ $VERSION = '2.093'; ZIP_CM_BZIP2 ZIP_CM_LZMA ZIP_CM_PPMD - + ZIP_CM_XZ + ZIP_CM_ZSTD + ZIP_CM_AES + ZIP_LOCAL_HDR_SIG ZIP_DATA_HDR_SIG ZIP_CENTRAL_HDR_SIG @@ -40,7 +43,7 @@ $VERSION = '2.093'; ZIP_EXTRA_ID_INFO_ZIP_UNIX2 ZIP_EXTRA_ID_INFO_ZIP_UNIXN ZIP_EXTRA_ID_INFO_ZIP_Upath - ZIP_EXTRA_ID_INFO_ZIP_Ucom + ZIP_EXTRA_ID_INFO_ZIP_Ucom ZIP_EXTRA_ID_JAVA_EXE ZIP_OS_CODE_UNIX @@ -55,7 +58,7 @@ $VERSION = '2.093'; ZIP_A_HIDDEN ZIP_A_SYSTEM ZIP_A_LABEL - ZIP_A_DIR + ZIP_A_DIR ZIP_A_ARCHIVE ); @@ -63,8 +66,11 @@ $VERSION = '2.093'; use constant ZIP_CM_STORE => 0 ; use constant ZIP_CM_DEFLATE => 8 ; use constant ZIP_CM_BZIP2 => 12 ; -use constant ZIP_CM_LZMA => 14 ; # Not Supported yet +use constant ZIP_CM_LZMA => 14 ; +use constant ZIP_CM_ZSTD => 93 ; +use constant ZIP_CM_XZ => 95 ; use constant ZIP_CM_PPMD => 98 ; # Not Supported yet +use constant ZIP_CM_AES => 99 ; # General Purpose Flag use constant ZIP_GP_FLAG_ENCRYPTED_MASK => (1 << 0) ; @@ -116,10 +122,11 @@ use constant ZIP64_MIN_VERSION => 45; ZIP_CM_BZIP2() => 46, ZIP_CM_LZMA() => 63, ZIP_CM_PPMD() => 63, + ZIP_CM_ZSTD() => 20, # Winzip needs these to be 20 + ZIP_CM_XZ() => 20, ); 1; __END__ - diff --git a/gnu/usr.bin/perl/cpan/IO-Compress/lib/IO/Compress/Zlib/Constants.pm b/gnu/usr.bin/perl/cpan/IO-Compress/lib/IO/Compress/Zlib/Constants.pm index c2fecba974f..1d1dab5018c 100644 --- a/gnu/usr.bin/perl/cpan/IO-Compress/lib/IO/Compress/Zlib/Constants.pm +++ b/gnu/usr.bin/perl/cpan/IO-Compress/lib/IO/Compress/Zlib/Constants.pm @@ -9,7 +9,7 @@ require Exporter; our ($VERSION, @ISA, @EXPORT); -$VERSION = '2.093'; +$VERSION = '2.106'; @ISA = qw(Exporter); @@ -23,7 +23,7 @@ $VERSION = '2.093'; ZLIB_CMF_CM_DEFLATED ZLIB_CMF_CINFO_OFFSET - ZLIB_CMF_CINFO_BITS + ZLIB_CMF_CINFO_BITS ZLIB_CMF_CINFO_MAX ZLIB_FLG_FCHECK_OFFSET diff --git a/gnu/usr.bin/perl/cpan/IO-Compress/lib/IO/Compress/Zlib/Extra.pm b/gnu/usr.bin/perl/cpan/IO-Compress/lib/IO/Compress/Zlib/Extra.pm index 6e13d4fb2f1..24204fafa3b 100644 --- a/gnu/usr.bin/perl/cpan/IO-Compress/lib/IO/Compress/Zlib/Extra.pm +++ b/gnu/usr.bin/perl/cpan/IO-Compress/lib/IO/Compress/Zlib/Extra.pm @@ -8,9 +8,9 @@ use bytes; our ($VERSION, @ISA, @EXPORT_OK, %EXPORT_TAGS); -$VERSION = '2.093'; +$VERSION = '2.106'; -use IO::Compress::Gzip::Constants 2.093 ; +use IO::Compress::Gzip::Constants 2.106 ; sub ExtraFieldError { @@ -36,11 +36,11 @@ sub validateExtraFieldPair return ExtraFieldError("SubField Data is a reference") if ref $pair->[1] ; - # ID is exactly two chars + # ID is exactly two chars return ExtraFieldError("SubField ID not two chars long") unless length $pair->[0] == GZIP_FEXTRA_SUBFIELD_ID_SIZE ; - # Check that the 2nd byte of the ID isn't 0 + # Check that the 2nd byte of the ID isn't 0 return ExtraFieldError("SubField ID 2nd byte is 0x00") if $strict && $gzipMode && substr($pair->[0], 1, 1) eq "\x00" ; @@ -74,7 +74,7 @@ sub parseRawExtra return ExtraFieldError("Truncated in FEXTRA Body Section") if $offset + GZIP_FEXTRA_SUBFIELD_HEADER_SIZE > $XLEN ; - my $id = substr($data, $offset, GZIP_FEXTRA_SUBFIELD_ID_SIZE); + my $id = substr($data, $offset, GZIP_FEXTRA_SUBFIELD_ID_SIZE); $offset += GZIP_FEXTRA_SUBFIELD_ID_SIZE; my $subLen = unpack("v", substr($data, $offset, @@ -84,8 +84,8 @@ sub parseRawExtra return ExtraFieldError("Truncated in FEXTRA Body Section") if $offset + $subLen > $XLEN ; - my $bad = validateExtraFieldPair( [$id, - substr($data, $offset, $subLen)], + my $bad = validateExtraFieldPair( [$id, + substr($data, $offset, $subLen)], $strict, $gzipMode ); return $bad if $bad ; push @$extraRef, [$id => substr($data, $offset, $subLen)] @@ -94,7 +94,7 @@ sub parseRawExtra $offset += $subLen ; } - + return undef ; } @@ -111,7 +111,7 @@ sub findID return undef if $offset + GZIP_FEXTRA_SUBFIELD_HEADER_SIZE > $XLEN ; - my $id = substr($data, $offset, GZIP_FEXTRA_SUBFIELD_ID_SIZE); + my $id = substr($data, $offset, GZIP_FEXTRA_SUBFIELD_ID_SIZE); $offset += GZIP_FEXTRA_SUBFIELD_ID_SIZE; my $subLen = unpack("v", substr($data, $offset, @@ -126,7 +126,7 @@ sub findID $offset += $subLen ; } - + return undef ; } @@ -165,7 +165,7 @@ sub parseExtraField # $id2 => $data2, # ... # } - + if ( ! ref $dataRef ) { return undef @@ -177,7 +177,7 @@ sub parseExtraField my $data = $dataRef; my $out = '' ; - if (ref $data eq 'ARRAY') { + if (ref $data eq 'ARRAY') { if (ref $data->[0]) { foreach my $pair (@$data) { @@ -188,30 +188,30 @@ sub parseExtraField return $bad if $bad ; $out .= mkSubField(@$pair); - } - } + } + } else { return ExtraFieldError("Not even number of elements") unless @$data % 2 == 0; for (my $ix = 0; $ix <= @$data -1 ; $ix += 2) { my $bad = validateExtraFieldPair([$data->[$ix], - $data->[$ix+1]], + $data->[$ix+1]], $strict, $gzipMode) ; return $bad if $bad ; $out .= mkSubField($data->[$ix], $data->[$ix+1]); - } + } } - } - elsif (ref $data eq 'HASH') { + } + elsif (ref $data eq 'HASH') { while (my ($id, $info) = each %$data) { my $bad = validateExtraFieldPair([$id, $info], $strict, $gzipMode); return $bad if $bad ; $out .= mkSubField($id, $info); - } - } + } + } else { return ExtraFieldError("Not a scalar, array ref or hash ref") ; } diff --git a/gnu/usr.bin/perl/cpan/IO-Compress/lib/IO/Uncompress/Adapter/Bunzip2.pm b/gnu/usr.bin/perl/cpan/IO-Compress/lib/IO/Uncompress/Adapter/Bunzip2.pm index 3fc176e5006..0d0707b34a3 100644 --- a/gnu/usr.bin/perl/cpan/IO-Compress/lib/IO/Uncompress/Adapter/Bunzip2.pm +++ b/gnu/usr.bin/perl/cpan/IO-Compress/lib/IO/Uncompress/Adapter/Bunzip2.pm @@ -4,19 +4,19 @@ use strict; use warnings; use bytes; -use IO::Compress::Base::Common 2.093 qw(:Status); +use IO::Compress::Base::Common 2.106 qw(:Status); -use Compress::Raw::Bzip2 2.093 ; +use Compress::Raw::Bzip2 2.103 ; our ($VERSION, @ISA); -$VERSION = '2.093'; +$VERSION = '2.106'; sub mkUncompObject { my $small = shift || 0; my $verbosity = shift || 0; - my ($inflate, $status) = new Compress::Raw::Bunzip2(1, 1, $small, $verbosity, 1); + my ($inflate, $status) = Compress::Raw::Bunzip2->new(1, 1, $small, $verbosity, 1); return (undef, "Could not create Inflation object: $status", $status) if $status != BZ_OK ; @@ -26,8 +26,8 @@ sub mkUncompObject 'UnCompSize' => 0, 'Error' => '', 'ConsumesInput' => 1, - } ; - + } ; + } sub uncompr @@ -48,7 +48,7 @@ sub uncompr return STATUS_ERROR; } - + return STATUS_OK if $status == BZ_OK ; return STATUS_ENDSTREAM if $status == BZ_STREAM_END ; return STATUS_ERROR ; @@ -59,12 +59,12 @@ sub reset { my $self = shift ; - my ($inf, $status) = new Compress::Raw::Bunzip2(); + my ($inf, $status) = Compress::Raw::Bunzip2->new(); $self->{ErrorNo} = ($status == BZ_OK) ? 0 : $status ; if ($status != BZ_OK) { - $self->{Error} = "Cannot create Inflate object: $status"; + $self->{Error} = "Cannot create Inflate object: $status"; return STATUS_ERROR; } @@ -100,8 +100,8 @@ sub adler32 sub sync { my $self = shift ; - #( $self->{Inf}->inflateSync(@_) == BZ_OK) - # ? STATUS_OK + #( $self->{Inf}->inflateSync(@_) == BZ_OK) + # ? STATUS_OK # : STATUS_ERROR ; } @@ -109,4 +109,3 @@ sub sync 1; __END__ - diff --git a/gnu/usr.bin/perl/cpan/IO-Compress/lib/IO/Uncompress/Adapter/Identity.pm b/gnu/usr.bin/perl/cpan/IO-Compress/lib/IO/Uncompress/Adapter/Identity.pm index c8622a59137..dd124836159 100644 --- a/gnu/usr.bin/perl/cpan/IO-Compress/lib/IO/Uncompress/Adapter/Identity.pm +++ b/gnu/usr.bin/perl/cpan/IO-Compress/lib/IO/Uncompress/Adapter/Identity.pm @@ -4,14 +4,14 @@ use warnings; use strict; use bytes; -use IO::Compress::Base::Common 2.093 qw(:Status); +use IO::Compress::Base::Common 2.106 qw(:Status); use IO::Compress::Zip::Constants ; our ($VERSION); -$VERSION = '2.093'; +$VERSION = '2.106'; -use Compress::Raw::Zlib 2.093 (); +use Compress::Raw::Zlib 2.103 (); sub mkUncompObject { @@ -21,7 +21,7 @@ sub mkUncompObject my $crc32 = 1; #shift ; my $adler32 = shift; - bless { 'CompSize' => new U64 , # 0, + bless { 'CompSize' => U64->new(), # 0, 'UnCompSize' => 0, 'wantCRC32' => $crc32, 'CRC32' => Compress::Raw::Zlib::crc32(''), @@ -70,7 +70,7 @@ sub uncompr $ind = $len - 1 ; } } - + if ($ind >= 0) { $remainder = substr($$in, $ind) ; substr($$in, $ind) = '' ; @@ -94,7 +94,7 @@ sub uncompr $l1 = U64::newUnpack_V32(substr($remainder, 8)); $l2 = U64::newUnpack_V32(substr($remainder, 12)); } - + my $newLen = $self->{CompSize}->clone(); $newLen->add(length $$in); if ($l1->equal($l2) && $l1->equal($newLen) ) { @@ -142,7 +142,7 @@ sub reset $self->{CompSize}->reset(); $self->{UnCompSize} = 0; $self->{CRC32} = Compress::Raw::Zlib::crc32(''); - $self->{ADLER32} = Compress::Raw::Zlib::adler32(''); + $self->{ADLER32} = Compress::Raw::Zlib::adler32(''); return STATUS_OK ; } diff --git a/gnu/usr.bin/perl/cpan/IO-Compress/lib/IO/Uncompress/Adapter/Inflate.pm b/gnu/usr.bin/perl/cpan/IO-Compress/lib/IO/Uncompress/Adapter/Inflate.pm index a27af5ba8e7..05f6de2ea06 100644 --- a/gnu/usr.bin/perl/cpan/IO-Compress/lib/IO/Uncompress/Adapter/Inflate.pm +++ b/gnu/usr.bin/perl/cpan/IO-Compress/lib/IO/Uncompress/Adapter/Inflate.pm @@ -4,11 +4,11 @@ use strict; use warnings; use bytes; -use IO::Compress::Base::Common 2.093 qw(:Status); -use Compress::Raw::Zlib 2.093 qw(Z_OK Z_BUF_ERROR Z_STREAM_END Z_FINISH MAX_WBITS); +use IO::Compress::Base::Common 2.106 qw(:Status); +use Compress::Raw::Zlib 2.103 qw(Z_OK Z_BUF_ERROR Z_STREAM_END Z_FINISH MAX_WBITS); our ($VERSION); -$VERSION = '2.093'; +$VERSION = '2.106'; @@ -23,23 +23,23 @@ sub mkUncompObject if ($scan) { - ($inflate, $status) = new Compress::Raw::Zlib::InflateScan + ($inflate, $status) = Compress::Raw::Zlib::InflateScan->new( #LimitOutput => 1, CRC32 => $crc32, ADLER32 => $adler32, - WindowBits => - MAX_WBITS ; + WindowBits => - MAX_WBITS ); } else { - ($inflate, $status) = new Compress::Raw::Zlib::Inflate + ($inflate, $status) = Compress::Raw::Zlib::Inflate->new( AppendOutput => 1, LimitOutput => 1, CRC32 => $crc32, ADLER32 => $adler32, - WindowBits => - MAX_WBITS ; + WindowBits => - MAX_WBITS ); } - return (undef, "Could not create Inflation object: $status", $status) + return (undef, "Could not create Inflation object: $status", $status) if $status != Z_OK ; return bless {'Inf' => $inflate, @@ -47,8 +47,8 @@ sub mkUncompObject 'UnCompSize' => 0, 'Error' => '', 'ConsumesInput' => 1, - } ; - + } ; + } sub uncompr @@ -67,7 +67,7 @@ sub uncompr $self->{Error} = "Inflation Error: $status"; return STATUS_ERROR; } - + return STATUS_OK if $status == Z_BUF_ERROR ; # ??? return STATUS_OK if $status == Z_OK ; return STATUS_ENDSTREAM if $status == Z_STREAM_END ; @@ -115,8 +115,8 @@ sub adler32 sub sync { my $self = shift ; - ( $self->{Inf}->inflateSync(@_) == Z_OK) - ? STATUS_OK + ( $self->{Inf}->inflateSync(@_) == Z_OK) + ? STATUS_OK : STATUS_ERROR ; } @@ -154,4 +154,3 @@ sub createDeflateStream __END__ - diff --git a/gnu/usr.bin/perl/cpan/IO-Compress/lib/IO/Uncompress/AnyInflate.pm b/gnu/usr.bin/perl/cpan/IO-Compress/lib/IO/Uncompress/AnyInflate.pm index 6172737e26e..4d99439a57d 100644 --- a/gnu/usr.bin/perl/cpan/IO-Compress/lib/IO/Uncompress/AnyInflate.pm +++ b/gnu/usr.bin/perl/cpan/IO-Compress/lib/IO/Uncompress/AnyInflate.pm @@ -6,27 +6,27 @@ use strict; use warnings; use bytes; -use IO::Compress::Base::Common 2.093 (); +use IO::Compress::Base::Common 2.106 qw(:Parse); -use IO::Uncompress::Adapter::Inflate 2.093 (); +use IO::Uncompress::Adapter::Inflate 2.106 (); -use IO::Uncompress::Base 2.093 ; -use IO::Uncompress::Gunzip 2.093 ; -use IO::Uncompress::Inflate 2.093 ; -use IO::Uncompress::RawInflate 2.093 ; -use IO::Uncompress::Unzip 2.093 ; +use IO::Uncompress::Base 2.106 ; +use IO::Uncompress::Gunzip 2.106 ; +use IO::Uncompress::Inflate 2.106 ; +use IO::Uncompress::RawInflate 2.106 ; +use IO::Uncompress::Unzip 2.106 ; require Exporter ; our ($VERSION, @ISA, @EXPORT_OK, %EXPORT_TAGS, $AnyInflateError); -$VERSION = '2.093'; +$VERSION = '2.106'; $AnyInflateError = ''; @ISA = qw(IO::Uncompress::Base Exporter); @EXPORT_OK = qw( $AnyInflateError anyinflate ) ; -%EXPORT_TAGS = %IO::Uncompress::Base::DEFLATE_CONSTANTS ; +%EXPORT_TAGS = %IO::Uncompress::Base::DEFLATE_CONSTANTS if keys %IO::Uncompress::Base::DEFLATE_CONSTANTS; push @{ $EXPORT_TAGS{all} }, @EXPORT_OK ; Exporter::export_ok_tags('all'); @@ -48,7 +48,6 @@ sub anyinflate sub getExtraParams { - use IO::Compress::Base::Common 2.093 qw(:Parse); return ( 'rawinflate' => [Parse_boolean, 0] ) ; } @@ -75,9 +74,9 @@ sub mkUncomp if ! defined $obj; *$self->{Uncomp} = $obj; - + my @possible = qw( Inflate Gunzip Unzip ); - unshift @possible, 'RawInflate' + unshift @possible, 'RawInflate' if 1 || $got->getValue('rawinflate'); my $magic = $self->ckMagic( @possible ); @@ -113,7 +112,7 @@ sub ckMagic $self->pushBack(*$self->{HeaderPending}) ; *$self->{HeaderPending} = '' ; - } + } bless $self => $keep; return undef; @@ -135,7 +134,7 @@ IO::Uncompress::AnyInflate - Uncompress zlib-based (zip, gzip) file/buffer my $status = anyinflate $input => $output [,OPTS] or die "anyinflate failed: $AnyInflateError\n"; - my $z = new IO::Uncompress::AnyInflate $input [OPTS] + my $z = IO::Uncompress::AnyInflate->new( $input [OPTS] ) or die "anyinflate failed: $AnyInflateError\n"; $status = $z->read($buffer) @@ -444,7 +443,7 @@ uncompressed data to a buffer, C<$buffer>. use IO::Uncompress::AnyInflate qw(anyinflate $AnyInflateError) ; use IO::File ; - my $input = new IO::File "new( " \$buffer @@ -479,7 +478,7 @@ and if you want to compress each file one at a time, this will do the trick The format of the constructor for IO::Uncompress::AnyInflate is shown below - my $z = new IO::Uncompress::AnyInflate $input [OPTS] + my $z = IO::Uncompress::AnyInflate->new( $input [OPTS] ) or die "IO::Uncompress::AnyInflate failed: $AnyInflateError\n"; Returns an C object on success and undef on failure. @@ -941,7 +940,7 @@ C option in the constructor. =head1 Importing -No symbolic constants are required by this IO::Uncompress::AnyInflate at present. +No symbolic constants are required by IO::Uncompress::AnyInflate at present. =over 5 @@ -962,7 +961,7 @@ See L =head1 SUPPORT -General feedback/questions/bug reports should be sent to +General feedback/questions/bug reports should be sent to L (preferred) or L. @@ -977,9 +976,9 @@ L, L For RFC 1950, 1951 and 1952 see -L, -L and -L +L, +L and +L The I compression library was written by Jean-loup Gailly C and Mark Adler C. @@ -999,8 +998,7 @@ See the Changes file. =head1 COPYRIGHT AND LICENSE -Copyright (c) 2005-2019 Paul Marquess. All rights reserved. +Copyright (c) 2005-2022 Paul Marquess. All rights reserved. This program is free software; you can redistribute it and/or modify it under the same terms as Perl itself. - diff --git a/gnu/usr.bin/perl/cpan/IO-Compress/lib/IO/Uncompress/AnyUncompress.pm b/gnu/usr.bin/perl/cpan/IO-Compress/lib/IO/Uncompress/AnyUncompress.pm index 251b7cf2632..ed192ca38ed 100644 --- a/gnu/usr.bin/perl/cpan/IO-Compress/lib/IO/Uncompress/AnyUncompress.pm +++ b/gnu/usr.bin/perl/cpan/IO-Compress/lib/IO/Uncompress/AnyUncompress.pm @@ -4,21 +4,21 @@ use strict; use warnings; use bytes; -use IO::Compress::Base::Common 2.093 (); +use IO::Compress::Base::Common 2.106 (); -use IO::Uncompress::Base 2.093 ; +use IO::Uncompress::Base 2.106 ; require Exporter ; our ($VERSION, @ISA, @EXPORT_OK, %EXPORT_TAGS, $AnyUncompressError); -$VERSION = '2.093'; +$VERSION = '2.106'; $AnyUncompressError = ''; @ISA = qw(IO::Uncompress::Base Exporter); @EXPORT_OK = qw( $AnyUncompressError anyuncompress ) ; -%EXPORT_TAGS = %IO::Uncompress::Base::DEFLATE_CONSTANTS ; +%EXPORT_TAGS = %IO::Uncompress::Base::DEFLATE_CONSTANTS if keys %IO::Uncompress::Base::DEFLATE_CONSTANTS; push @{ $EXPORT_TAGS{all} }, @EXPORT_OK ; Exporter::export_ok_tags('all'); @@ -33,26 +33,26 @@ BEGIN # Don't trigger any __DIE__ Hooks. local $SIG{__DIE__}; - eval ' use IO::Uncompress::Adapter::Inflate 2.093 ;'; - eval ' use IO::Uncompress::Adapter::Bunzip2 2.093 ;'; - eval ' use IO::Uncompress::Adapter::LZO 2.093 ;'; - eval ' use IO::Uncompress::Adapter::Lzf 2.093 ;'; - eval ' use IO::Uncompress::Adapter::UnLzma 2.093 ;'; - eval ' use IO::Uncompress::Adapter::UnXz 2.093 ;'; - eval ' use IO::Uncompress::Adapter::UnZstd 2.083 ;'; - eval ' use IO::Uncompress::Adapter::UnLzip 2.093 ;'; - - eval ' use IO::Uncompress::Bunzip2 2.093 ;'; - eval ' use IO::Uncompress::UnLzop 2.093 ;'; - eval ' use IO::Uncompress::Gunzip 2.093 ;'; - eval ' use IO::Uncompress::Inflate 2.093 ;'; - eval ' use IO::Uncompress::RawInflate 2.093 ;'; - eval ' use IO::Uncompress::Unzip 2.093 ;'; - eval ' use IO::Uncompress::UnLzf 2.093 ;'; - eval ' use IO::Uncompress::UnLzma 2.093 ;'; - eval ' use IO::Uncompress::UnXz 2.093 ;'; - eval ' use IO::Uncompress::UnZstd 2.093 ;'; - eval ' use IO::Uncompress::UnLzip 2.093 ;'; + eval ' use IO::Uncompress::Adapter::Inflate 2.103 ;'; + eval ' use IO::Uncompress::Adapter::Bunzip2 2.103 ;'; + eval ' use IO::Uncompress::Adapter::LZO 2.103 ;'; + eval ' use IO::Uncompress::Adapter::Lzf 2.103 ;'; + eval ' use IO::Uncompress::Adapter::UnLzma 2.103 ;'; + eval ' use IO::Uncompress::Adapter::UnXz 2.103 ;'; + eval ' use IO::Uncompress::Adapter::UnZstd 2.103 ;'; + eval ' use IO::Uncompress::Adapter::UnLzip 2.103 ;'; + + eval ' use IO::Uncompress::Bunzip2 2.103 ;'; + eval ' use IO::Uncompress::UnLzop 2.103 ;'; + eval ' use IO::Uncompress::Gunzip 2.103 ;'; + eval ' use IO::Uncompress::Inflate 2.103 ;'; + eval ' use IO::Uncompress::RawInflate 2.103 ;'; + eval ' use IO::Uncompress::Unzip 2.103 ;'; + eval ' use IO::Uncompress::UnLzf 2.103 ;'; + eval ' use IO::Uncompress::UnLzma 2.103 ;'; + eval ' use IO::Uncompress::UnXz 2.103 ;'; + eval ' use IO::Uncompress::UnZstd 2.103 ;'; + eval ' use IO::Uncompress::UnLzip 2.103 ;'; } @@ -70,7 +70,7 @@ sub anyuncompress } sub getExtraParams -{ +{ return ( 'rawinflate' => [IO::Compress::Base::Common::Parse_boolean, 0] , 'unlzma' => [IO::Compress::Base::Common::Parse_boolean, 0] ) ; } @@ -103,13 +103,13 @@ sub mkUncomp if ! defined $obj; *$self->{Uncomp} = $obj; - + my @possible = qw( Inflate Gunzip Unzip ); - unshift @possible, 'RawInflate' + unshift @possible, 'RawInflate' if $got->getValue('rawinflate'); $magic = $self->ckMagic( @possible ); - + if ($magic) { *$self->{Info} = $self->readHeader($magic) or return undef ; @@ -126,9 +126,9 @@ sub mkUncomp if ! defined $obj; *$self->{Uncomp} = $obj; - + my @possible = qw( UnLzma ); - #unshift @possible, 'RawInflate' + #unshift @possible, 'RawInflate' # if $got->getValue('rawinflate'); if ( *$self->{Info} = $self->ckMagic( @possible )) @@ -206,7 +206,7 @@ sub mkUncomp *$self->{Info} = $self->readHeader($magic) or return undef ; - my ($obj, $errstr, $errno) = IO::Uncompress::Adapter::Zstd::mkUncompObject(); + my ($obj, $errstr, $errno) = IO::Uncompress::Adapter::UnZstd::mkUncompObject(); return $self->saveErrorString(undef, $errstr, $errno) if ! defined $obj; @@ -257,7 +257,7 @@ sub ckMagic $self->pushBack(*$self->{HeaderPending}) ; *$self->{HeaderPending} = '' ; - } + } bless $self => $keep; return undef; @@ -270,7 +270,7 @@ __END__ =head1 NAME -IO::Uncompress::AnyUncompress - Uncompress gzip, zip, bzip2, xz, lzma, lzip, lzf or lzop file/buffer +IO::Uncompress::AnyUncompress - Uncompress gzip, zip, bzip2, zstd, xz, lzma, lzip, lzf or lzop file/buffer =head1 SYNOPSIS @@ -279,7 +279,7 @@ IO::Uncompress::AnyUncompress - Uncompress gzip, zip, bzip2, xz, lzma, lzip, lzf my $status = anyuncompress $input => $output [,OPTS] or die "anyuncompress failed: $AnyUncompressError\n"; - my $z = new IO::Uncompress::AnyUncompress $input [OPTS] + my $z = IO::Uncompress::AnyUncompress->new( $input [OPTS] ) or die "anyuncompress failed: $AnyUncompressError\n"; $status = $z->read($buffer) @@ -333,6 +333,8 @@ The formats supported are: =item zip +=item zstd (Zstandard) + =item bzip2 =item lzop @@ -598,7 +600,7 @@ uncompressed data to a buffer, C<$buffer>. use IO::Uncompress::AnyUncompress qw(anyuncompress $AnyUncompressError) ; use IO::File ; - my $input = new IO::File "new( " \$buffer @@ -633,7 +635,7 @@ and if you want to compress each file one at a time, this will do the trick The format of the constructor for IO::Uncompress::AnyUncompress is shown below - my $z = new IO::Uncompress::AnyUncompress $input [OPTS] + my $z = IO::Uncompress::AnyUncompress->new( $input [OPTS] ) or die "IO::Uncompress::AnyUncompress failed: $AnyUncompressError\n"; Returns an C object on success and undef on failure. @@ -1034,7 +1036,7 @@ C option in the constructor. =head1 Importing -No symbolic constants are required by this IO::Uncompress::AnyUncompress at present. +No symbolic constants are required by IO::Uncompress::AnyUncompress at present. =over 5 @@ -1051,7 +1053,7 @@ Same as doing this =head1 SUPPORT -General feedback/questions/bug reports should be sent to +General feedback/questions/bug reports should be sent to L (preferred) or L. @@ -1075,8 +1077,7 @@ See the Changes file. =head1 COPYRIGHT AND LICENSE -Copyright (c) 2005-2019 Paul Marquess. All rights reserved. +Copyright (c) 2005-2022 Paul Marquess. All rights reserved. This program is free software; you can redistribute it and/or modify it under the same terms as Perl itself. - diff --git a/gnu/usr.bin/perl/cpan/IO-Compress/lib/IO/Uncompress/Base.pm b/gnu/usr.bin/perl/cpan/IO-Compress/lib/IO/Uncompress/Base.pm index b9901ca1fff..a922a5be8ac 100644 --- a/gnu/usr.bin/perl/cpan/IO-Compress/lib/IO/Uncompress/Base.pm +++ b/gnu/usr.bin/perl/cpan/IO-Compress/lib/IO/Uncompress/Base.pm @@ -9,12 +9,12 @@ our (@ISA, $VERSION, @EXPORT_OK, %EXPORT_TAGS); @ISA = qw(IO::File Exporter); -$VERSION = '2.093'; +$VERSION = '2.106'; use constant G_EOF => 0 ; use constant G_ERR => -1 ; -use IO::Compress::Base::Common 2.093 ; +use IO::Compress::Base::Common 2.106 ; use IO::File ; use Symbol; @@ -58,7 +58,7 @@ sub smartRead if (defined *$self->{FH}) { if ($offset) { - # Not using this + # Not using this # # *$self->{FH}->read($$out, $get_size, $offset); # @@ -75,7 +75,7 @@ sub smartRead elsif (defined *$self->{InputEvent}) { my $got = 1 ; while (length $$out < $size) { - last + last if ($got = *$self->{InputEvent}->($$out, $get_size)) <= 0; } @@ -93,13 +93,13 @@ sub smartRead substr($$out, $offset) = substr($$buf, *$self->{BufferOffset}, $get_size); if (*$self->{ConsumeInput}) { substr($$buf, 0, $get_size) = '' } - else + else { *$self->{BufferOffset} += length($$out) - $offset } } - *$self->{InputLengthRemaining} -= length($$out) #- $offset + *$self->{InputLengthRemaining} -= length($$out) #- $offset if defined *$self->{InputLength}; - + if (! defined $status) { $self->saveStatus($!) ; return STATUS_ERROR; @@ -169,7 +169,7 @@ sub smartTell if (defined *$self->{FH}) { return *$self->{FH}->tell() } - else + else { return *$self->{BufferOffset} } } @@ -179,7 +179,7 @@ sub smartWrite my $out_data = shift ; if (defined *$self->{FH}) { - # flush needed for 5.8.0 + # flush needed for 5.8.0 defined *$self->{FH}->write($out_data, length $out_data) && defined *$self->{FH}->flush() ; } @@ -199,7 +199,7 @@ sub smartReadExact sub smartEof { my ($self) = $_[0]; - local $.; + local $.; return 0 if length *$self->{Prime} || *$self->{PushMode}; @@ -207,15 +207,15 @@ sub smartEof { # Could use # - # *$self->{FH}->eof() + # *$self->{FH}->eof() # # here, but this can cause trouble if # the filehandle is itself a tied handle, but it uses sysread. - # Then we get into mixing buffered & non-buffered IO, + # Then we get into mixing buffered & non-buffered IO, # which will cause trouble my $info = $self->getErrInfo(); - + my $buffer = ''; my $status = $self->smartRead(\$buffer, 1); $self->pushBack($buffer) if length $buffer; @@ -225,7 +225,7 @@ sub smartEof } elsif (defined *$self->{InputEvent}) { *$self->{EventEof} } - else + else { *$self->{BufferOffset} >= length(${ *$self->{Buffer} }) } } @@ -347,7 +347,7 @@ sub checkParams my $class = shift ; my $got = shift || IO::Compress::Base::Parameters::new(); - + my $Valid = { 'blocksize' => [IO::Compress::Base::Common::Parse_unsigned, 16 * 1024], 'autoclose' => [IO::Compress::Base::Common::Parse_boolean, 0], @@ -362,7 +362,7 @@ sub checkParams #'decode' => [IO::Compress::Base::Common::Parse_any, undef], #'consumeinput' => [IO::Compress::Base::Common::Parse_boolean, 0], - + $self->getExtraParams(), #'Todo - Revert to ordinary file on end Z_STREAM_END'=> 0, @@ -371,11 +371,11 @@ sub checkParams $Valid->{trailingdata} = [IO::Compress::Base::Common::Parse_writable_scalar, undef] if *$self->{OneShot} ; - - $got->parse($Valid, @_ ) + + $got->parse($Valid, @_ ) or $self->croakError("${class}: " . $got->getError()) ; - $self->postCheckParams($got) + $self->postCheckParams($got) or $self->croakError("${class}: " . $self->error()) ; return $got; @@ -403,7 +403,7 @@ sub _create my $inType = whatIsInput($inValue, 1); - $obj->ckInputParam($class, $inValue, 1) + $obj->ckInputParam($class, $inValue, 1) or return undef ; *$obj->{InNew} = 1; @@ -412,8 +412,8 @@ sub _create or $obj->croakError("${class}: " . *$obj->{Error}); if ($inType eq 'buffer' || $inType eq 'code') { - *$obj->{Buffer} = $inValue ; - *$obj->{InputEvent} = $inValue + *$obj->{Buffer} = $inValue ; + *$obj->{InputEvent} = $inValue if $inType eq 'code' ; } else { @@ -422,18 +422,18 @@ sub _create *$obj->{Handle} = 1 ; # Need to rewind for Scan - *$obj->{FH}->seek(0, SEEK_SET) + *$obj->{FH}->seek(0, SEEK_SET) if $got->getValue('scan'); - } - else { + } + else { no warnings ; my $mode = '<'; $mode = '+<' if $got->getValue('scan'); *$obj->{StdIO} = ($inValue eq '-'); - *$obj->{FH} = new IO::File "$mode $inValue" + *$obj->{FH} = IO::File->new( "$mode $inValue" ) or return $obj->saveErrorString(undef, "cannot open file '$inValue': $!", $!) ; } - + *$obj->{LineNo} = $. = 0; setBinModeInput(*$obj->{FH}) ; @@ -441,7 +441,7 @@ sub _create *$obj->{Buffer} = \$buff ; } -# if ($got->getValue('decode')) { +# if ($got->getValue('decode')) { # my $want_encoding = $got->getValue('decode'); # *$obj->{Encoding} = IO::Compress::Base::Common::getEncoding($obj, $class, $want_encoding); # } @@ -449,7 +449,7 @@ sub _create # *$obj->{Encoding} = undef; # } - *$obj->{InputLength} = $got->parsed('inputlength') + *$obj->{InputLength} = $got->parsed('inputlength') ? $got->getValue('inputlength') : undef ; *$obj->{InputLengthRemaining} = $got->getValue('inputlength'); @@ -465,7 +465,7 @@ sub _create # TODO - move these two into RawDeflate *$obj->{Scan} = $got->getValue('scan'); - *$obj->{ParseExtra} = $got->getValue('parseextra') + *$obj->{ParseExtra} = $got->getValue('parseextra') || $got->getValue('strict') ; *$obj->{Type} = ''; *$obj->{Prime} = $got->getValue('prime') || '' ; @@ -473,8 +473,8 @@ sub _create *$obj->{Plain} = 0; *$obj->{PlainBytesRead} = 0; *$obj->{InflatedBytesRead} = 0; - *$obj->{UnCompSize} = new U64; - *$obj->{CompSize} = new U64; + *$obj->{UnCompSize} = U64->new; + *$obj->{CompSize} = U64->new; *$obj->{TotalInflatedBytesRead} = 0; *$obj->{NewStream} = 0 ; *$obj->{EventEof} = 0 ; @@ -494,19 +494,19 @@ sub _create *$obj->{InNew} = 0; *$obj->{Closed} = 0; - - return $obj + + return $obj if *$obj->{Pause} ; if ($status) { # Need to try uncompressing to catch the case # where the compressed file uncompresses to an # empty string - so eof is set immediately. - + my $out_buffer = ''; $status = $obj->read(\$out_buffer); - + if ($status < 0) { *$obj->{ReadStatus} = [ $status, $obj->error(), $obj->errorNo() ]; } @@ -515,7 +515,7 @@ sub _create if length $out_buffer; } else { - return undef + return undef unless *$obj->{Transparent}; $obj->clearError(); @@ -549,7 +549,7 @@ sub ckInputParam # # if ($_[0] ne '-' && ! -e $_[0] ) # { -# return $self->saveErrorString(1, +# return $self->saveErrorString(1, # "input file '$_[0]' does not exist", STATUS_ERROR); # } # } @@ -573,13 +573,13 @@ sub _inf my $output = shift ; - my $x = new IO::Compress::Base::Validator($class, *$obj->{Error}, $name, $input, $output) + my $x = IO::Compress::Base::Validator->new($class, *$obj->{Error}, $name, $input, $output) or return undef ; - + push @_, $output if $haveOut && $x->{Hash}; *$obj->{OneShot} = 1 ; - + my $got = $obj->checkParams($name, undef, @_) or return undef ; @@ -589,25 +589,25 @@ sub _inf # warn "TD $value "; # #$value = $$value; ## warn "TD $value $$value "; -# +# # return retErr($obj, "Parameter 'TrailingData' not writable") -# if readonly $$value ; +# if readonly $$value ; # -# if (ref $$value) +# if (ref $$value) # { # return retErr($obj,"Parameter 'TrailingData' not a scalar reference") # if ref $$value ne 'SCALAR' ; -# +# # *$obj->{TrailingData} = $$value ; # } -# else +# else # { # return retErr($obj,"Parameter 'TrailingData' not a scalar") -# if ref $value ne 'SCALAR' ; +# if ref $value ne 'SCALAR' ; # # *$obj->{TrailingData} = $value ; # } - + *$obj->{TrailingData} = $got->getValue('trailingdata'); } @@ -620,7 +620,7 @@ sub _inf # { # while (my($k, $v) = each %$input) # { -# $v = \$input->{$k} +# $v = \$input->{$k} # unless defined $v ; # # $obj->_singleTarget($x, $k, $v, @_) @@ -629,7 +629,7 @@ sub _inf # # return keys %$input ; # } - + if ($x->{GlobMap}) { $x->{oneInput} = 1 ; @@ -645,11 +645,11 @@ sub _inf if (! $x->{oneOutput} ) { - my $inFile = ($x->{inType} eq 'filenames' + my $inFile = ($x->{inType} eq 'filenames' || $x->{inType} eq 'filename'); $x->{inType} = $inFile ? 'filename' : 'buffer'; - + foreach my $in ($x->{oneInput} ? $input : @$input) { my $out ; @@ -684,7 +684,7 @@ sub _singleTarget my $x = shift ; my $input = shift; my $output = shift; - + my $buff = ''; $x->{buff} = \$buff ; @@ -693,7 +693,7 @@ sub _singleTarget my $mode = '>' ; $mode = '>>' if $x->{Got}->getValue('append') ; - $x->{fh} = new IO::File "$mode $output" + $x->{fh} = IO::File->new( "$mode $output" ) or return retErr($x, "cannot open file '$output': $!") ; binmode $x->{fh} ; @@ -708,10 +708,10 @@ sub _singleTarget } } - + elsif ($x->{outType} eq 'buffer' ) { - $$output = '' + $$output = '' unless $x->{Got}->getValue('append'); $x->{buff} = $output ; } @@ -719,22 +719,22 @@ sub _singleTarget if ($x->{oneInput}) { defined $self->_rd2($x, $input, $output) - or return undef; + or return undef; } else { for my $element ( ($x->{inType} eq 'hash') ? keys %$input : @$input) { - defined $self->_rd2($x, $element, $output) + defined $self->_rd2($x, $element, $output) or return undef ; } } - if ( ($x->{outType} eq 'filename' && $output ne '-') || + if ( ($x->{outType} eq 'filename' && $output ne '-') || ($x->{outType} eq 'handle' && $x->{Got}->getValue('autoclose'))) { - $x->{fh}->close() - or return retErr($x, $!); + $x->{fh}->close() + or return retErr($x, $!); delete $x->{fh}; } @@ -747,15 +747,15 @@ sub _rd2 my $x = shift ; my $input = shift; my $output = shift; - + my $z = IO::Compress::Base::Common::createSelfTiedObject($x->{Class}, *$self->{Error}); - + $z->_create($x->{Got}, 1, $input, @_) or return undef ; my $status ; my $fh = $x->{fh}; - + while (1) { while (($status = $z->read($x->{buff})) > 0) { @@ -770,9 +770,9 @@ sub _rd2 if (! $x->{oneOutput} ) { my $ot = $x->{outType} ; - if ($ot eq 'array') + if ($ot eq 'array') { push @$output, $x->{buff} } - elsif ($ot eq 'hash') + elsif ($ot eq 'hash') { $output->{$input} = $x->{buff} } my $buff = ''; @@ -781,12 +781,12 @@ sub _rd2 last if $status < 0 || $z->smartEof(); - last + last unless *$self->{MultiStream}; $status = $z->nextStream(); - last + last unless $status == 1 ; } @@ -796,7 +796,7 @@ sub _rd2 ${ *$self->{TrailingData} } = $z->trailingData() if defined *$self->{TrailingData} ; - $z->close() + $z->close() or return undef ; return 1 ; @@ -808,7 +808,7 @@ sub TIEHANDLE die "OOPS\n" ; } - + sub UNTIE { my $self = shift ; @@ -836,7 +836,7 @@ sub readBlock $size = List::Util::min($size, *$self->{CompressedInputLengthRemaining} ); *$self->{CompressedInputLengthRemaining} -= $size ; } - + my $status = $self->smartRead($buff, $size) ; return $self->saveErrorString(STATUS_ERROR, "Error Reading Data: $!", $!) if $status == STATUS_ERROR ; @@ -861,7 +861,7 @@ sub _raw_read # >0 - ok, number of bytes read # =0 - ok, eof # <0 - not ok - + my $self = shift ; return G_EOF if *$self->{Closed} ; @@ -873,8 +873,8 @@ sub _raw_read if (*$self->{Plain}) { my $tmp_buff ; my $len = $self->smartRead(\$tmp_buff, *$self->{BlockSize}) ; - - return $self->saveErrorString(G_ERR, "Error reading data: $!", $!) + + return $self->saveErrorString(G_ERR, "Error reading data: $!", $!) if $len == STATUS_ERROR ; if ($len == 0 ) { @@ -898,13 +898,13 @@ sub _raw_read $$buffer .= *$self->{Pending} ; my $len = length *$self->{Pending} ; *$self->{Pending} = ''; - return $len; + return $len; } my $temp_buf = ''; my $outSize = 0; my $status = $self->readBlock(\$temp_buf, *$self->{BlockSize}, $outSize) ; - + return G_ERR if $status == STATUS_ERROR ; @@ -915,18 +915,18 @@ sub _raw_read $status = *$self->{Uncomp}->uncompr(\$temp_buf, $buffer, defined *$self->{CompressedInputLengthDone} || $self->smartEof(), $outSize); - + # Remember the input buffer if it wasn't consumed completely $self->pushBack($temp_buf) if *$self->{Uncomp}{ConsumesInput}; return $self->saveErrorString(G_ERR, *$self->{Uncomp}{Error}, *$self->{Uncomp}{ErrorNo}) - if $self->saveStatus($status) == STATUS_ERROR; + if $self->saveStatus($status) == STATUS_ERROR; $self->postBlockChk($buffer, $before_len) == STATUS_OK or return G_ERR; $buf_len = defined $$buffer ? length($$buffer) - $before_len : 0; - + *$self->{CompSize}->add($beforeC_len - length $temp_buf) ; *$self->{InflatedBytesRead} += $buf_len ; @@ -960,7 +960,7 @@ sub _raw_read or return G_ERR; } else { - return $self->TrailerError("trailer truncated. Expected " . + return $self->TrailerError("trailer truncated. Expected " . "$trailer_size bytes, got $got") if *$self->{Strict}; $self->pushBack($trailer) ; @@ -978,7 +978,7 @@ sub _raw_read } } - + # return the number of uncompressed bytes read return $buf_len ; @@ -1006,6 +1006,11 @@ sub nextStream { my $self = shift ; + # An uncompressed file cannot have a next stream, so + # return immediately. + return 0 + if *$self->{Plain} ; + my $status = $self->gotoNextStream(); $status == 1 or return $status ; @@ -1029,7 +1034,7 @@ sub gotoNextStream # TODO - make this more efficient if know the offset for the end of # the stream and seekable - $status = $self->read($buffer) + $status = $self->read($buffer) while $status > 0 ; return $status @@ -1074,7 +1079,7 @@ sub gotoNextStream push @{ *$self->{InfoList} }, *$self->{Info} ; - return 1; + return 1; } sub streamCount @@ -1090,7 +1095,7 @@ sub read # >0 - ok, number of bytes read # =0 - ok, eof # <0 - not ok - + my $self = shift ; if (defined *$self->{ReadStatus} ) { @@ -1123,7 +1128,7 @@ sub read my $offset = $_[2] || 0; if (! *$self->{AppendOutput}) { - if (! $offset) { + if (! $offset) { $$buffer = '' ; } @@ -1161,13 +1166,13 @@ sub read } else { my $len = 0; - $len = $self->_raw_read($buffer) + $len = $self->_raw_read($buffer) while ! *$self->{EndStream} && $len == 0 ; return $len ; } } - # Need to jump through more hoops - either length or offset + # Need to jump through more hoops - either length or offset # or both are specified. my $out_buffer = *$self->{Pending} ; *$self->{Pending} = ''; @@ -1176,17 +1181,17 @@ sub read while (! *$self->{EndStream} && length($out_buffer) < $length) { my $buf_len = $self->_raw_read(\$out_buffer); - return $buf_len + return $buf_len if $buf_len < 0 ; } - $length = length $out_buffer + $length = length $out_buffer if length($out_buffer) < $length ; - return 0 + return 0 if $length == 0 ; - $$buffer = '' + $$buffer = '' if ! defined $$buffer; $offset = length $$buffer @@ -1223,7 +1228,7 @@ sub _getline # Paragraph Mode if ( ! length $/ ) { - my $paragraph ; + my $paragraph ; while (($status = $self->read($paragraph)) > 0 ) { if ($paragraph =~ s/^(.*?\n\n+)//s) { *$self->{Pending} = $paragraph ; @@ -1236,13 +1241,13 @@ sub _getline # $/ isn't empty, or a reference, so it's Line Mode. { - my $line ; + my $line ; my $p = \*$self->{Pending} ; while (($status = $self->read($line)) > 0 ) { my $offset = index($line, $/); if ($offset >= 0) { my $l = substr($line, 0, $offset + length $/ ); - substr($line, 0, $offset + length $/) = ''; + substr($line, 0, $offset + length $/) = ''; $$p = $line; return (1, \$l); } @@ -1262,7 +1267,7 @@ sub getline return undef; } - return undef + return undef if *$self->{Closed} || (!length *$self->{Pending} && *$self->{EndStream}) ; my $current_append = *$self->{AppendOutput} ; @@ -1271,7 +1276,7 @@ sub getline my ($status, $lineref) = $self->_getline(); *$self->{AppendOutput} = $current_append; - return undef + return undef if $status < 0 || length $$lineref == 0 ; $. = ++ *$self->{LineNo} ; @@ -1282,10 +1287,10 @@ sub getline sub getlines { my $self = shift; - $self->croakError(*$self->{ClassName} . + $self->croakError(*$self->{ClassName} . "::getlines: called in scalar context\n") unless wantarray; my($line, @lines); - push(@lines, $line) + push(@lines, $line) while defined($line = $self->getline); return @lines; } @@ -1307,8 +1312,8 @@ sub getc sub ungetc { my $self = shift; - *$self->{Pending} = "" unless defined *$self->{Pending} ; - *$self->{Pending} = $_[0] . *$self->{Pending} ; + *$self->{Pending} = "" unless defined *$self->{Pending} ; + *$self->{Pending} = $_[0] . *$self->{Pending} ; } @@ -1332,7 +1337,7 @@ sub eof my $self = shift ; return (*$self->{Closed} || - (!length *$self->{Pending} + (!length *$self->{Pending} && ( $self->smartEof() || *$self->{EndStream}))) ; } @@ -1362,14 +1367,14 @@ sub close return 1 if *$self->{Closed} ; - untie *$self + untie *$self if $] >= 5.008 ; my $status = 1 ; if (defined *$self->{FH}) { if ((! *$self->{Handle} || *$self->{AutoClose}) && ! *$self->{StdIO}) { - local $.; + local $.; $! = 0 ; $status = *$self->{FH}->close(); return $self->saveErrorString(0, $!, $!) @@ -1449,8 +1454,8 @@ sub seek sub fileno { my $self = shift ; - return defined *$self->{FH} - ? fileno *$self->{FH} + return defined *$self->{FH} + ? fileno *$self->{FH} : undef ; } @@ -1458,8 +1463,8 @@ sub binmode { 1; # my $self = shift ; -# return defined *$self->{FH} -# ? binmode *$self->{FH} +# return defined *$self->{FH} +# ? binmode *$self->{FH} # : 1 ; } @@ -1472,8 +1477,8 @@ sub opened sub autoflush { my $self = shift ; - return defined *$self->{FH} - ? *$self->{FH}->autoflush(@_) + return defined *$self->{FH} + ? *$self->{FH}->autoflush(@_) : undef ; } @@ -1485,33 +1490,35 @@ sub input_line_number return $last; } - -*BINMODE = \&binmode; -*SEEK = \&seek; -*READ = \&read; -*sysread = \&read; -*TELL = \&tell; -*EOF = \&eof; - -*FILENO = \&fileno; -*CLOSE = \&close; - sub _notAvailable { my $name = shift ; return sub { croak "$name Not Available: File opened only for intput" ; } ; } - -*print = _notAvailable('print'); -*PRINT = _notAvailable('print'); -*printf = _notAvailable('printf'); -*PRINTF = _notAvailable('printf'); -*write = _notAvailable('write'); -*WRITE = _notAvailable('write'); - -#*sysread = \&read; -#*syswrite = \&_notAvailable; +{ + no warnings 'once'; + + *BINMODE = \&binmode; + *SEEK = \&seek; + *READ = \&read; + *sysread = \&read; + *TELL = \&tell; + *EOF = \&eof; + + *FILENO = \&fileno; + *CLOSE = \&close; + + *print = _notAvailable('print'); + *PRINT = _notAvailable('print'); + *printf = _notAvailable('printf'); + *PRINTF = _notAvailable('printf'); + *write = _notAvailable('write'); + *WRITE = _notAvailable('write'); + + #*sysread = \&read; + #*syswrite = \&_notAvailable; +} @@ -1536,7 +1543,7 @@ purpose is to be sub-classed by IO::Uncompress modules. =head1 SUPPORT -General feedback/questions/bug reports should be sent to +General feedback/questions/bug reports should be sent to L (preferred) or L. @@ -1560,8 +1567,7 @@ See the Changes file. =head1 COPYRIGHT AND LICENSE -Copyright (c) 2005-2019 Paul Marquess. All rights reserved. +Copyright (c) 2005-2022 Paul Marquess. All rights reserved. This program is free software; you can redistribute it and/or modify it under the same terms as Perl itself. - diff --git a/gnu/usr.bin/perl/cpan/IO-Compress/lib/IO/Uncompress/Bunzip2.pm b/gnu/usr.bin/perl/cpan/IO-Compress/lib/IO/Uncompress/Bunzip2.pm index 8e805d4c9e2..e72b36fbbcf 100644 --- a/gnu/usr.bin/perl/cpan/IO-Compress/lib/IO/Uncompress/Bunzip2.pm +++ b/gnu/usr.bin/perl/cpan/IO-Compress/lib/IO/Uncompress/Bunzip2.pm @@ -4,15 +4,15 @@ use strict ; use warnings; use bytes; -use IO::Compress::Base::Common 2.093 qw(:Status ); +use IO::Compress::Base::Common 2.106 qw(:Status ); -use IO::Uncompress::Base 2.093 ; -use IO::Uncompress::Adapter::Bunzip2 2.093 ; +use IO::Uncompress::Base 2.106 ; +use IO::Uncompress::Adapter::Bunzip2 2.106 ; require Exporter ; our ($VERSION, @ISA, @EXPORT_OK, %EXPORT_TAGS, $Bunzip2Error); -$VERSION = '2.093'; +$VERSION = '2.106'; $Bunzip2Error = ''; @ISA = qw(IO::Uncompress::Base Exporter); @@ -72,7 +72,7 @@ sub mkUncomp return $self->saveErrorString(undef, $errstr, $errno) if ! defined $obj; - + *$self->{Uncomp} = $obj; return 1; @@ -88,15 +88,15 @@ sub ckMagic $self->smartReadExact(\$magic, 4); *$self->{HeaderPending} = $magic ; - - return $self->HeaderError("Header size is " . - 4 . " bytes") + + return $self->HeaderError("Header size is " . + 4 . " bytes") if length $magic != 4; return $self->HeaderError("Bad Magic.") if ! isBzip2Magic($magic) ; - - + + *$self->{Type} = 'bzip2'; return $magic; } @@ -117,7 +117,7 @@ sub readHeader 'TrailerLength' => 0, 'Header' => '$magic' }; - + } sub chkTrailer @@ -130,7 +130,9 @@ sub chkTrailer sub isBzip2Magic { my $buffer = shift ; - return $buffer =~ /^BZh\d$/; + + # ASCII: B Z h 0 9 + return $buffer =~ qr/^\x42\x5A\x68[\x30-\x39]$/; } 1 ; @@ -149,7 +151,7 @@ IO::Uncompress::Bunzip2 - Read bzip2 files/buffers my $status = bunzip2 $input => $output [,OPTS] or die "bunzip2 failed: $Bunzip2Error\n"; - my $z = new IO::Uncompress::Bunzip2 $input [OPTS] + my $z = IO::Uncompress::Bunzip2->new( $input [OPTS] ) or die "bunzip2 failed: $Bunzip2Error\n"; $status = $z->read($buffer) @@ -440,7 +442,7 @@ uncompressed data to a buffer, C<$buffer>. use IO::Uncompress::Bunzip2 qw(bunzip2 $Bunzip2Error) ; use IO::File ; - my $input = new IO::File "new( " \$buffer @@ -475,7 +477,7 @@ and if you want to compress each file one at a time, this will do the trick The format of the constructor for IO::Uncompress::Bunzip2 is shown below - my $z = new IO::Uncompress::Bunzip2 $input [OPTS] + my $z = IO::Uncompress::Bunzip2->new( $input [OPTS] ) or die "IO::Uncompress::Bunzip2 failed: $Bunzip2Error\n"; Returns an C object on success and undef on failure. @@ -858,7 +860,7 @@ C option in the constructor. =head1 Importing -No symbolic constants are required by this IO::Uncompress::Bunzip2 at present. +No symbolic constants are required by IO::Uncompress::Bunzip2 at present. =over 5 @@ -879,7 +881,7 @@ See L =head1 SUPPORT -General feedback/questions/bug reports should be sent to +General feedback/questions/bug reports should be sent to L (preferred) or L. @@ -907,8 +909,7 @@ See the Changes file. =head1 COPYRIGHT AND LICENSE -Copyright (c) 2005-2019 Paul Marquess. All rights reserved. +Copyright (c) 2005-2022 Paul Marquess. All rights reserved. This program is free software; you can redistribute it and/or modify it under the same terms as Perl itself. - diff --git a/gnu/usr.bin/perl/cpan/IO-Compress/lib/IO/Uncompress/Gunzip.pm b/gnu/usr.bin/perl/cpan/IO-Compress/lib/IO/Uncompress/Gunzip.pm index 6e57e961184..b7d4ae54d37 100644 --- a/gnu/usr.bin/perl/cpan/IO-Compress/lib/IO/Uncompress/Gunzip.pm +++ b/gnu/usr.bin/perl/cpan/IO-Compress/lib/IO/Uncompress/Gunzip.pm @@ -9,12 +9,12 @@ use strict ; use warnings; use bytes; -use IO::Uncompress::RawInflate 2.093 ; +use IO::Uncompress::RawInflate 2.106 ; -use Compress::Raw::Zlib 2.093 () ; -use IO::Compress::Base::Common 2.093 qw(:Status ); -use IO::Compress::Gzip::Constants 2.093 ; -use IO::Compress::Zlib::Extra 2.093 ; +use Compress::Raw::Zlib 2.103 () ; +use IO::Compress::Base::Common 2.106 qw(:Status ); +use IO::Compress::Gzip::Constants 2.106 ; +use IO::Compress::Zlib::Extra 2.106 ; require Exporter ; @@ -28,7 +28,7 @@ Exporter::export_ok_tags('all'); $GunzipError = ''; -$VERSION = '2.093'; +$VERSION = '2.106'; sub new { @@ -70,9 +70,9 @@ sub ckMagic *$self->{HeaderPending} = $magic ; - return $self->HeaderError("Minimum header size is " . - GZIP_MIN_HEADER_SIZE . " bytes") - if length $magic != GZIP_ID_SIZE ; + return $self->HeaderError("Minimum header size is " . + GZIP_MIN_HEADER_SIZE . " bytes") + if length $magic != GZIP_ID_SIZE ; return $self->HeaderError("Bad Magic") if ! isGzipMagic($magic) ; @@ -95,10 +95,10 @@ sub chkTrailer my $self = shift; my $trailer = shift; - # Check CRC & ISIZE + # Check CRC & ISIZE my ($CRC32, $ISIZE) = unpack("V V", $trailer) ; - *$self->{Info}{CRC32} = $CRC32; - *$self->{Info}{ISIZE} = $ISIZE; + *$self->{Info}{CRC32} = $CRC32; + *$self->{Info}{ISIZE} = $ISIZE; if (*$self->{Strict}) { return $self->TrailerError("CRC mismatch") @@ -130,9 +130,9 @@ sub _readFullGzipHeader($) *$self->{HeaderPending} = $magic ; - return $self->HeaderError("Minimum header size is " . - GZIP_MIN_HEADER_SIZE . " bytes") - if length $magic != GZIP_ID_SIZE ; + return $self->HeaderError("Minimum header size is " . + GZIP_MIN_HEADER_SIZE . " bytes") + if length $magic != GZIP_ID_SIZE ; return $self->HeaderError("Bad Magic") @@ -150,7 +150,7 @@ sub _readGzipHeader($) my ($buffer) = '' ; $self->smartReadExact(\$buffer, GZIP_MIN_HEADER_SIZE - GZIP_ID_SIZE) - or return $self->HeaderError("Minimum header size is " . + or return $self->HeaderError("Minimum header size is " . GZIP_MIN_HEADER_SIZE . " bytes") ; my $keep = $magic . $buffer ; @@ -159,22 +159,22 @@ sub _readGzipHeader($) # now split out the various parts my ($cm, $flag, $mtime, $xfl, $os) = unpack("C C V C C", $buffer) ; - $cm == GZIP_CM_DEFLATED + $cm == GZIP_CM_DEFLATED or return $self->HeaderError("Not Deflate (CM is $cm)") ; # check for use of reserved bits return $self->HeaderError("Use of Reserved Bits in FLG field.") - if $flag & GZIP_FLG_RESERVED ; + if $flag & GZIP_FLG_RESERVED ; my $EXTRA ; my @EXTRA = () ; if ($flag & GZIP_FLG_FEXTRA) { $EXTRA = "" ; - $self->smartReadExact(\$buffer, GZIP_FEXTRA_HEADER_SIZE) + $self->smartReadExact(\$buffer, GZIP_FEXTRA_HEADER_SIZE) or return $self->TruncatedHeader("FEXTRA Length") ; my ($XLEN) = unpack("v", $buffer) ; - $self->smartReadExact(\$EXTRA, $XLEN) + $self->smartReadExact(\$EXTRA, $XLEN) or return $self->TruncatedHeader("FEXTRA Body"); $keep .= $buffer . $EXTRA ; @@ -190,10 +190,10 @@ sub _readGzipHeader($) if ($flag & GZIP_FLG_FNAME) { $origname = "" ; while (1) { - $self->smartReadExact(\$buffer, 1) + $self->smartReadExact(\$buffer, 1) or return $self->TruncatedHeader("FNAME"); last if $buffer eq GZIP_NULL_BYTE ; - $origname .= $buffer + $origname .= $buffer } $keep .= $origname . GZIP_NULL_BYTE ; @@ -205,10 +205,10 @@ sub _readGzipHeader($) if ($flag & GZIP_FLG_FCOMMENT) { $comment = ""; while (1) { - $self->smartReadExact(\$buffer, 1) + $self->smartReadExact(\$buffer, 1) or return $self->TruncatedHeader("FCOMMENT"); last if $buffer eq GZIP_NULL_BYTE ; - $comment .= $buffer + $comment .= $buffer } $keep .= $comment . GZIP_NULL_BYTE ; @@ -217,7 +217,7 @@ sub _readGzipHeader($) } if ($flag & GZIP_FLG_FHCRC) { - $self->smartReadExact(\$buffer, GZIP_FHCRC_SIZE) + $self->smartReadExact(\$buffer, GZIP_FHCRC_SIZE) or return $self->TruncatedHeader("FHCRC"); $HeaderCRC = unpack("v", $buffer) ; @@ -254,7 +254,7 @@ sub _readGzipHeader($) 'Comment' => $comment, 'Time' => $mtime, 'OsID' => $os, - 'OsName' => defined $GZIP_OS_Names{$os} + 'OsName' => defined $GZIP_OS_Names{$os} ? $GZIP_OS_Names{$os} : "Unknown", 'HeaderCRC' => $HeaderCRC, 'Flags' => $flag, @@ -286,7 +286,7 @@ IO::Uncompress::Gunzip - Read RFC 1952 files/buffers my $status = gunzip $input => $output [,OPTS] or die "gunzip failed: $GunzipError\n"; - my $z = new IO::Uncompress::Gunzip $input [OPTS] + my $z = IO::Uncompress::Gunzip->new( $input [OPTS] ) or die "gunzip failed: $GunzipError\n"; $status = $z->read($buffer) @@ -579,7 +579,7 @@ uncompressed data to a buffer, C<$buffer>. use IO::Uncompress::Gunzip qw(gunzip $GunzipError) ; use IO::File ; - my $input = new IO::File "new( " \$buffer @@ -614,7 +614,7 @@ and if you want to compress each file one at a time, this will do the trick The format of the constructor for IO::Uncompress::Gunzip is shown below - my $z = new IO::Uncompress::Gunzip $input [OPTS] + my $z = IO::Uncompress::Gunzip->new( $input [OPTS] ) or die "IO::Uncompress::Gunzip failed: $GunzipError\n"; Returns an C object on success and undef on failure. @@ -1064,7 +1064,7 @@ C option in the constructor. =head1 Importing -No symbolic constants are required by this IO::Uncompress::Gunzip at present. +No symbolic constants are required by IO::Uncompress::Gunzip at present. =over 5 @@ -1085,7 +1085,7 @@ See L =head1 SUPPORT -General feedback/questions/bug reports should be sent to +General feedback/questions/bug reports should be sent to L (preferred) or L. @@ -1100,9 +1100,9 @@ L, L For RFC 1950, 1951 and 1952 see -L, -L and -L +L, +L and +L The I compression library was written by Jean-loup Gailly C and Mark Adler C. @@ -1122,8 +1122,7 @@ See the Changes file. =head1 COPYRIGHT AND LICENSE -Copyright (c) 2005-2019 Paul Marquess. All rights reserved. +Copyright (c) 2005-2022 Paul Marquess. All rights reserved. This program is free software; you can redistribute it and/or modify it under the same terms as Perl itself. - diff --git a/gnu/usr.bin/perl/cpan/IO-Compress/lib/IO/Uncompress/Inflate.pm b/gnu/usr.bin/perl/cpan/IO-Compress/lib/IO/Uncompress/Inflate.pm index 993a1dddc89..d7623646839 100644 --- a/gnu/usr.bin/perl/cpan/IO-Compress/lib/IO/Uncompress/Inflate.pm +++ b/gnu/usr.bin/perl/cpan/IO-Compress/lib/IO/Uncompress/Inflate.pm @@ -5,15 +5,15 @@ use strict ; use warnings; use bytes; -use IO::Compress::Base::Common 2.093 qw(:Status ); -use IO::Compress::Zlib::Constants 2.093 ; +use IO::Compress::Base::Common 2.106 qw(:Status ); +use IO::Compress::Zlib::Constants 2.106 ; -use IO::Uncompress::RawInflate 2.093 ; +use IO::Uncompress::RawInflate 2.106 ; require Exporter ; our ($VERSION, @ISA, @EXPORT_OK, %EXPORT_TAGS, $InflateError); -$VERSION = '2.093'; +$VERSION = '2.106'; $InflateError = ''; @ISA = qw(IO::Uncompress::RawInflate Exporter); @@ -62,14 +62,14 @@ sub ckMagic *$self->{HeaderPending} = $magic ; - return $self->HeaderError("Header size is " . - ZLIB_HEADER_SIZE . " bytes") + return $self->HeaderError("Header size is " . + ZLIB_HEADER_SIZE . " bytes") if length $magic != ZLIB_HEADER_SIZE; #return $self->HeaderError("CRC mismatch.") return undef if ! $self->isZlibMagic($magic) ; - + *$self->{Type} = 'rfc1950'; return $magic; } @@ -88,7 +88,7 @@ sub chkTrailer my $trailer = shift; my $ADLER32 = unpack("N", $trailer) ; - *$self->{Info}{ADLER32} = $ADLER32; + *$self->{Info}{ADLER32} = $ADLER32; return $self->TrailerError("CRC mismatch") if *$self->{Strict} && $ADLER32 != *$self->{Uncomp}->adler32() ; @@ -102,7 +102,7 @@ sub isZlibMagic my $self = shift; my $buffer = shift ; - return 0 + return 0 if length $buffer < ZLIB_HEADER_SIZE ; my $hdr = unpack("n", $buffer) ; @@ -114,16 +114,16 @@ sub isZlibMagic my $cm = bits($CMF, ZLIB_CMF_CM_OFFSET, ZLIB_CMF_CM_BITS) ; # Only Deflate supported - return $self->HeaderError("Not Deflate (CM is $cm)") + return $self->HeaderError("Not Deflate (CM is $cm)") if $cm != ZLIB_CMF_CM_DEFLATED ; # Max window value is 7 for Deflate. my $cinfo = bits($CMF, ZLIB_CMF_CINFO_OFFSET, ZLIB_CMF_CINFO_BITS) ; - return $self->HeaderError("CINFO > " . ZLIB_CMF_CINFO_MAX . - " (CINFO is $cinfo)") + return $self->HeaderError("CINFO > " . ZLIB_CMF_CINFO_MAX . + " (CINFO is $cinfo)") if $cinfo > ZLIB_CMF_CINFO_MAX ; - return 1; + return 1; } sub bits @@ -145,19 +145,19 @@ sub _readDeflateHeader # # *$self->{HeaderPending} = $buffer ; # -# return $self->HeaderError("Header size is " . -# ZLIB_HEADER_SIZE . " bytes") +# return $self->HeaderError("Header size is " . +# ZLIB_HEADER_SIZE . " bytes") # if length $buffer != ZLIB_HEADER_SIZE; # # return $self->HeaderError("CRC mismatch.") # if ! isZlibMagic($buffer) ; # } - + my ($CMF, $FLG) = unpack "C C", $buffer; my $FDICT = bits($FLG, ZLIB_FLG_FDICT_OFFSET, ZLIB_FLG_FDICT_BITS ), my $cm = bits($CMF, ZLIB_CMF_CM_OFFSET, ZLIB_CMF_CM_BITS) ; - $cm == ZLIB_CMF_CM_DEFLATED + $cm == ZLIB_CMF_CM_DEFLATED or return $self->HeaderError("Not Deflate (CM is $cm)") ; my $DICTID; @@ -208,7 +208,7 @@ IO::Uncompress::Inflate - Read RFC 1950 files/buffers my $status = inflate $input => $output [,OPTS] or die "inflate failed: $InflateError\n"; - my $z = new IO::Uncompress::Inflate $input [OPTS] + my $z = IO::Uncompress::Inflate->new( $input [OPTS] ) or die "inflate failed: $InflateError\n"; $status = $z->read($buffer) @@ -501,7 +501,7 @@ uncompressed data to a buffer, C<$buffer>. use IO::Uncompress::Inflate qw(inflate $InflateError) ; use IO::File ; - my $input = new IO::File "new( " \$buffer @@ -536,7 +536,7 @@ and if you want to compress each file one at a time, this will do the trick The format of the constructor for IO::Uncompress::Inflate is shown below - my $z = new IO::Uncompress::Inflate $input [OPTS] + my $z = IO::Uncompress::Inflate->new( $input [OPTS] ) or die "IO::Uncompress::Inflate failed: $InflateError\n"; Returns an C object on success and undef on failure. @@ -936,7 +936,7 @@ C option in the constructor. =head1 Importing -No symbolic constants are required by this IO::Uncompress::Inflate at present. +No symbolic constants are required by IO::Uncompress::Inflate at present. =over 5 @@ -957,7 +957,7 @@ See L =head1 SUPPORT -General feedback/questions/bug reports should be sent to +General feedback/questions/bug reports should be sent to L (preferred) or L. @@ -972,9 +972,9 @@ L, L For RFC 1950, 1951 and 1952 see -L, -L and -L +L, +L and +L The I compression library was written by Jean-loup Gailly C and Mark Adler C. @@ -994,8 +994,7 @@ See the Changes file. =head1 COPYRIGHT AND LICENSE -Copyright (c) 2005-2019 Paul Marquess. All rights reserved. +Copyright (c) 2005-2022 Paul Marquess. All rights reserved. This program is free software; you can redistribute it and/or modify it under the same terms as Perl itself. - diff --git a/gnu/usr.bin/perl/cpan/IO-Compress/lib/IO/Uncompress/RawInflate.pm b/gnu/usr.bin/perl/cpan/IO-Compress/lib/IO/Uncompress/RawInflate.pm index 2fa318816ac..6e957f3329d 100644 --- a/gnu/usr.bin/perl/cpan/IO-Compress/lib/IO/Uncompress/RawInflate.pm +++ b/gnu/usr.bin/perl/cpan/IO-Compress/lib/IO/Uncompress/RawInflate.pm @@ -5,16 +5,16 @@ use strict ; use warnings; use bytes; -use Compress::Raw::Zlib 2.093 ; -use IO::Compress::Base::Common 2.093 qw(:Status ); +use Compress::Raw::Zlib 2.103 ; +use IO::Compress::Base::Common 2.106 qw(:Status ); -use IO::Uncompress::Base 2.093 ; -use IO::Uncompress::Adapter::Inflate 2.093 ; +use IO::Uncompress::Base 2.106 ; +use IO::Uncompress::Adapter::Inflate 2.106 ; require Exporter ; our ($VERSION, @ISA, @EXPORT_OK, %EXPORT_TAGS, %DEFLATE_CONSTANTS, $RawInflateError); -$VERSION = '2.093'; +$VERSION = '2.106'; $RawInflateError = ''; @ISA = qw(IO::Uncompress::Base Exporter); @@ -25,16 +25,16 @@ push @{ $EXPORT_TAGS{all} }, @EXPORT_OK ; Exporter::export_ok_tags('all'); #{ -# # Execute at runtime +# # Execute at runtime # my %bad; # for my $module (qw(Compress::Raw::Zlib IO::Compress::Base::Common IO::Uncompress::Base IO::Uncompress::Adapter::Inflate)) # { # my $ver = ${ $module . "::VERSION"} ; -# +# # $bad{$module} = $ver # if $ver ne $VERSION; # } -# +# # if (keys %bad) # { # my $string = join "\n", map { "$_ $bad{$_}" } keys %bad; @@ -148,14 +148,14 @@ sub _isRawx my $buffer = ''; - $self->smartRead(\$buffer, *$self->{BlockSize}) >= 0 + $self->smartRead(\$buffer, *$self->{BlockSize}) >= 0 or return $self->saveErrorString(undef, "No data to read"); my $temp_buf = $magic . $buffer ; - *$self->{HeaderPending} = $temp_buf ; + *$self->{HeaderPending} = $temp_buf ; $buffer = ''; my $status = *$self->{Uncomp}->uncompr(\$temp_buf, \$buffer, $self->smartEof()) ; - + return $self->saveErrorString(undef, *$self->{Uncomp}{Error}, STATUS_ERROR) if $status == STATUS_ERROR; @@ -163,12 +163,12 @@ sub _isRawx return $self->saveErrorString(undef, "unexpected end of file", STATUS_ERROR) if $self->smartEof() && $status != STATUS_ENDSTREAM; - + #my $buf_len = *$self->{Uncomp}->uncompressedBytes(); my $buf_len = length $buffer; if ($status == STATUS_ENDSTREAM) { - if (*$self->{MultiStream} + if (*$self->{MultiStream} && (length $temp_buf || ! $self->smartEof())){ *$self->{NewStream} = 1 ; *$self->{EndStream} = 0 ; @@ -177,9 +177,9 @@ sub _isRawx *$self->{EndStream} = 1 ; } } - *$self->{HeaderPending} = $buffer ; - *$self->{InflatedBytesRead} = $buf_len ; - *$self->{TotalInflatedBytesRead} += $buf_len ; + *$self->{HeaderPending} = $buffer ; + *$self->{InflatedBytesRead} = $buf_len ; + *$self->{TotalInflatedBytesRead} += $buf_len ; *$self->{Type} = 'rfc1951'; $self->saveStatus(STATUS_OK); @@ -229,7 +229,7 @@ sub inflateSync return $self->saveErrorString(0, "unexpected end of file", STATUS_ERROR); } } - + $status = *$self->{Uncomp}->sync($temp_buf) ; if ($status == STATUS_OK) @@ -251,23 +251,23 @@ sub inflateSync # my $status ; # my $end_offset = 0; # -# $status = $self->scan() +# $status = $self->scan() # #or return $self->saveErrorString(undef, "Error Scanning: $$error_ref", $self->errorNo) ; # or return $self->saveErrorString(G_ERR, "Error Scanning: $status") # -# $status = $self->zap($end_offset) +# $status = $self->zap($end_offset) # or return $self->saveErrorString(G_ERR, "Error Zapping: $status"); # #or return $self->saveErrorString(undef, "Error Zapping: $$error_ref", $self->errorNo) ; # # #(*$obj->{Deflate}, $status) = $inf->createDeflate(); # ## *$obj->{Header} = *$inf->{Info}{Header}; -## *$obj->{UnCompSize_32bit} = +## *$obj->{UnCompSize_32bit} = ## *$obj->{BytesWritten} = *$inf->{UnCompSize_32bit} ; ## *$obj->{CompSize_32bit} = *$inf->{CompSize_32bit} ; # # -## if ( $outType eq 'buffer') +## if ( $outType eq 'buffer') ## { substr( ${ *$self->{Buffer} }, $end_offset) = '' } ## elsif ($outType eq 'handle' || $outType eq 'filename') { ## *$self->{FH} = *$inf->{FH} ; @@ -275,11 +275,11 @@ sub inflateSync ## *$obj->{FH}->flush() ; ## *$obj->{Handle} = 1 if $outType eq 'handle'; ## -## #seek(*$obj->{FH}, $end_offset, SEEK_SET) -## *$obj->{FH}->seek($end_offset, SEEK_SET) +## #seek(*$obj->{FH}, $end_offset, SEEK_SET) +## *$obj->{FH}->seek($end_offset, SEEK_SET) ## or return $obj->saveErrorString(undef, $!, $!) ; ## } -# +# #} sub scan @@ -292,7 +292,7 @@ sub scan my $buffer = '' ; my $len = 0; - $len = $self->_raw_read(\$buffer, 1) + $len = $self->_raw_read(\$buffer, 1) while ! *$self->{EndStream} && $len >= 0 ; #return $len if $len < 0 ? $len : 0 ; @@ -310,16 +310,16 @@ sub zap #printf "# block_offset $block_offset %x\n", $block_offset; my $byte ; ( $self->smartSeek($block_offset) && - $self->smartRead(\$byte, 1) ) - or return $self->saveErrorString(0, $!, $!); + $self->smartRead(\$byte, 1) ) + or return $self->saveErrorString(0, $!, $!); #printf "#byte is %x\n", unpack('C*',$byte); *$self->{Uncomp}->resetLastBlockByte($byte); #printf "#to byte is %x\n", unpack('C*',$byte); - ( $self->smartSeek($block_offset) && + ( $self->smartSeek($block_offset) && $self->smartWrite($byte) ) - or return $self->saveErrorString(0, $!, $!); + or return $self->saveErrorString(0, $!, $!); #$self->smartSeek($end_offset, 1); @@ -335,12 +335,12 @@ sub createDeflate -CRC32 => *$self->{Params}->getValue('crc32'), -ADLER32 => *$self->{Params}->getValue('adler32'), ); - - return wantarray ? ($status, $def) : $def ; + + return wantarray ? ($status, $def) : $def ; } -1; +1; __END__ @@ -356,7 +356,7 @@ IO::Uncompress::RawInflate - Read RFC 1951 files/buffers my $status = rawinflate $input => $output [,OPTS] or die "rawinflate failed: $RawInflateError\n"; - my $z = new IO::Uncompress::RawInflate $input [OPTS] + my $z = IO::Uncompress::RawInflate->new( $input [OPTS] ) or die "rawinflate failed: $RawInflateError\n"; $status = $z->read($buffer) @@ -646,7 +646,7 @@ uncompressed data to a buffer, C<$buffer>. use IO::Uncompress::RawInflate qw(rawinflate $RawInflateError) ; use IO::File ; - my $input = new IO::File "new( " \$buffer @@ -681,7 +681,7 @@ and if you want to compress each file one at a time, this will do the trick The format of the constructor for IO::Uncompress::RawInflate is shown below - my $z = new IO::Uncompress::RawInflate $input [OPTS] + my $z = IO::Uncompress::RawInflate->new( $input [OPTS] ) or die "IO::Uncompress::RawInflate failed: $RawInflateError\n"; Returns an C object on success and undef on failure. @@ -1064,7 +1064,7 @@ C option in the constructor. =head1 Importing -No symbolic constants are required by this IO::Uncompress::RawInflate at present. +No symbolic constants are required by IO::Uncompress::RawInflate at present. =over 5 @@ -1085,7 +1085,7 @@ See L =head1 SUPPORT -General feedback/questions/bug reports should be sent to +General feedback/questions/bug reports should be sent to L (preferred) or L. @@ -1100,9 +1100,9 @@ L, L For RFC 1950, 1951 and 1952 see -L, -L and -L +L, +L and +L The I compression library was written by Jean-loup Gailly C and Mark Adler C. @@ -1122,8 +1122,7 @@ See the Changes file. =head1 COPYRIGHT AND LICENSE -Copyright (c) 2005-2019 Paul Marquess. All rights reserved. +Copyright (c) 2005-2022 Paul Marquess. All rights reserved. This program is free software; you can redistribute it and/or modify it under the same terms as Perl itself. - diff --git a/gnu/usr.bin/perl/cpan/IO-Compress/lib/IO/Uncompress/Unzip.pm b/gnu/usr.bin/perl/cpan/IO-Compress/lib/IO/Uncompress/Unzip.pm index 856487f8fcd..cfe56d3cd58 100644 --- a/gnu/usr.bin/perl/cpan/IO-Compress/lib/IO/Uncompress/Unzip.pm +++ b/gnu/usr.bin/perl/cpan/IO-Compress/lib/IO/Uncompress/Unzip.pm @@ -9,24 +9,28 @@ use warnings; use bytes; use IO::File; -use IO::Uncompress::RawInflate 2.093 ; -use IO::Compress::Base::Common 2.093 qw(:Status ); -use IO::Uncompress::Adapter::Inflate 2.093 ; -use IO::Uncompress::Adapter::Identity 2.093 ; -use IO::Compress::Zlib::Extra 2.093 ; -use IO::Compress::Zip::Constants 2.093 ; +use IO::Uncompress::RawInflate 2.106 ; +use IO::Compress::Base::Common 2.106 qw(:Status ); +use IO::Uncompress::Adapter::Inflate 2.106 ; +use IO::Uncompress::Adapter::Identity 2.106 ; +use IO::Compress::Zlib::Extra 2.106 ; +use IO::Compress::Zip::Constants 2.106 ; -use Compress::Raw::Zlib 2.093 () ; +use Compress::Raw::Zlib 2.103 () ; BEGIN { # Don't trigger any __DIE__ Hooks. local $SIG{__DIE__}; - + eval{ require IO::Uncompress::Adapter::Bunzip2 ; - import IO::Uncompress::Adapter::Bunzip2 } ; + IO::Uncompress::Adapter::Bunzip2->import() } ; eval{ require IO::Uncompress::Adapter::UnLzma ; - import IO::Uncompress::Adapter::UnLzma } ; + IO::Uncompress::Adapter::UnLzma->import() } ; + eval{ require IO::Uncompress::Adapter::UnXz ; + IO::Uncompress::Adapter::UnXz->import() } ; + eval{ require IO::Uncompress::Adapter::UnZstd ; + IO::Uncompress::Adapter::UnZstd->import() } ; } @@ -34,11 +38,11 @@ require Exporter ; our ($VERSION, @ISA, @EXPORT_OK, %EXPORT_TAGS, $UnzipError, %headerLookup); -$VERSION = '2.093'; +$VERSION = '2.106'; $UnzipError = ''; @ISA = qw(IO::Uncompress::RawInflate Exporter); -@EXPORT_OK = qw( $UnzipError unzip ); +@EXPORT_OK = qw($UnzipError unzip ); %EXPORT_TAGS = %IO::Uncompress::RawInflate::EXPORT_TAGS ; push @{ $EXPORT_TAGS{all} }, @EXPORT_OK ; Exporter::export_ok_tags('all'); @@ -52,6 +56,15 @@ Exporter::export_ok_tags('all'); ZIP64_DIGITAL_SIGNATURE_SIG, \&skipDigitalSignature, ); +my %MethodNames = ( + ZIP_CM_DEFLATE() => 'Deflated', + ZIP_CM_BZIP2() => 'Bzip2', + ZIP_CM_LZMA() => 'Lzma', + ZIP_CM_STORE() => 'Stored', + ZIP_CM_XZ() => 'Xz', + ZIP_CM_ZSTD() => 'Zstd', + ); + sub new { my $class = shift ; @@ -67,18 +80,18 @@ sub unzip sub getExtraParams { - + return ( # # Zip header fields 'name' => [IO::Compress::Base::Common::Parse_any, undef], 'stream' => [IO::Compress::Base::Common::Parse_boolean, 0], 'efs' => [IO::Compress::Base::Common::Parse_boolean, 0], - + # TODO - This means reading the central directory to get # 1. the local header offsets # 2. The compressed data length - ); + ); } sub ckParams @@ -119,9 +132,9 @@ sub ckMagic *$self->{HeaderPending} = $magic ; - return $self->HeaderError("Minimum header size is " . - 4 . " bytes") - if length $magic != 4 ; + return $self->HeaderError("Minimum header size is " . + 4 . " bytes") + if length $magic != 4 ; return $self->HeaderError("Bad Magic") if ! _isZipMagic($magic) ; @@ -189,9 +202,9 @@ sub readHeader $status = *$self->{Uncomp}->uncompr(\$b, \$temp_buf, 0, $out); - return $self->saveErrorString(undef, *$self->{Uncomp}{Error}, + return $self->saveErrorString(undef, *$self->{Uncomp}{Error}, *$self->{Uncomp}{ErrorNo}) - if $self->saveStatus($status) == STATUS_ERROR; + if $self->saveStatus($status) == STATUS_ERROR; $self->pushBack($b) ; @@ -248,7 +261,7 @@ sub chkTrailer if $sig != ZIP_DATA_HDR_SIG; } else { - ($CRC32, $cSize, $uSize) = + ($CRC32, $cSize, $uSize) = (*$self->{ZipData}{Crc32}, *$self->{ZipData}{CompressedLen}, *$self->{ZipData}{UnCompressedLen}); @@ -334,7 +347,7 @@ sub skipCentralDirectory my $buffer; $self->smartReadExact(\$buffer, 46 - 4) - or return $self->TrailerError("Minimum header size is " . + or return $self->TrailerError("Minimum header size is " . 46 . " bytes") ; my $keep = $magic . $buffer ; @@ -348,7 +361,7 @@ sub skipCentralDirectory #my $crc32 = unpack ("V", substr($buffer, 16-4, 4)); my $compressedLength = unpack ("V", substr($buffer, 20-4, 4)); my $uncompressedLength = unpack ("V", substr($buffer, 24-4, 4)); - my $filename_length = unpack ("v", substr($buffer, 28-4, 2)); + my $filename_length = unpack ("v", substr($buffer, 28-4, 2)); my $extra_length = unpack ("v", substr($buffer, 30-4, 2)); my $comment_length = unpack ("v", substr($buffer, 32-4, 2)); #my $disk_start = unpack ("v", substr($buffer, 34-4, 2)); @@ -356,7 +369,7 @@ sub skipCentralDirectory #my $ext_file_attrib = unpack ("V", substr($buffer, 38-4, 2)); #my $lcl_hdr_offset = unpack ("V", substr($buffer, 42-4, 2)); - + my $filename; my $extraField; my $comment ; @@ -391,7 +404,7 @@ sub skipArchiveExtra my $buffer; $self->smartReadExact(\$buffer, 4) - or return $self->TrailerError("Minimum header size is " . + or return $self->TrailerError("Minimum header size is " . 4 . " bytes") ; my $keep = $magic . $buffer ; @@ -399,7 +412,7 @@ sub skipArchiveExtra my $size = unpack ("V", $buffer); $self->smartReadExact(\$buffer, $size) - or return $self->TrailerError("Minimum header size is " . + or return $self->TrailerError("Minimum header size is " . $size . " bytes") ; $keep .= $buffer ; @@ -416,7 +429,7 @@ sub skipCentralDirectory64Rec my $buffer; $self->smartReadExact(\$buffer, 8) - or return $self->TrailerError("Minimum header size is " . + or return $self->TrailerError("Minimum header size is " . 8 . " bytes") ; my $keep = $magic . $buffer ; @@ -425,7 +438,7 @@ sub skipCentralDirectory64Rec my $size = $sizeHi * U64::MAX32 + $sizeLo; $self->fastForward($size) - or return $self->TrailerError("Minimum header size is " . + or return $self->TrailerError("Minimum header size is " . $size . " bytes") ; #$keep .= $buffer ; @@ -450,7 +463,7 @@ sub skipCentralDirectory64Loc my $buffer; $self->smartReadExact(\$buffer, 20 - 4) - or return $self->TrailerError("Minimum header size is " . + or return $self->TrailerError("Minimum header size is " . 20 . " bytes") ; my $keep = $magic . $buffer ; @@ -471,7 +484,7 @@ sub skipEndCentralDirectory my $buffer; $self->smartReadExact(\$buffer, 22 - 4) - or return $self->TrailerError("Minimum header size is " . + or return $self->TrailerError("Minimum header size is " . 22 . " bytes") ; my $keep = $magic . $buffer ; @@ -485,7 +498,7 @@ sub skipEndCentralDirectory #my $offsetToCD = unpack ("V", substr($buffer, 16-4, 4)); my $comment_length = unpack ("v", substr($buffer, 20-4, 2)); - + my $comment ; if ($comment_length) { @@ -516,9 +529,9 @@ sub _readFullZipHeader($) *$self->{HeaderPending} = $magic ; - return $self->HeaderError("Minimum header size is " . - 30 . " bytes") - if length $magic != 4 ; + return $self->HeaderError("Minimum header size is " . + 30 . " bytes") + if length $magic != 4 ; return $self->HeaderError("Bad Magic") @@ -536,7 +549,7 @@ sub _readZipHeader($) my ($buffer) = '' ; $self->smartReadExact(\$buffer, 30 - 4) - or return $self->HeaderError("Minimum header size is " . + or return $self->HeaderError("Minimum header size is " . 30 . " bytes") ; my $keep = $magic . $buffer ; @@ -549,13 +562,19 @@ sub _readZipHeader($) my $crc32 = unpack ("V", substr($buffer, 14-4, 4)); my $compressedLength = U64::newUnpack_V32 substr($buffer, 18-4, 4); my $uncompressedLength = U64::newUnpack_V32 substr($buffer, 22-4, 4); - my $filename_length = unpack ("v", substr($buffer, 26-4, 2)); + my $filename_length = unpack ("v", substr($buffer, 26-4, 2)); my $extra_length = unpack ("v", substr($buffer, 28-4, 2)); my $filename; my $extraField; my @EXTRA = (); - my $streamingMode = ($gpFlag & ZIP_GP_FLAG_STREAMING_MASK) ? 1 : 0 ; + + # Some programs (some versions of LibreOffice) mark entries as streamed, but still fill out + # compressedLength/uncompressedLength & crc32 in the local file header. + # The expected data descriptor is not populated. + # So only assume streaming if the Streaming bit is set AND the compressed length is zero + my $streamingMode = (($gpFlag & ZIP_GP_FLAG_STREAMING_MASK) && $crc32 == 0) ? 1 : 0 ; + my $efs_flag = ($gpFlag & ZIP_GP_FLAG_LANGUAGE_ENCODING) ? 1 : 0; return $self->HeaderError("Encrypted content not supported") @@ -577,7 +596,7 @@ sub _readZipHeader($) require Encode; eval { $filename = Encode::decode_utf8($filename, 1) } or Carp::croak "Zip Filename not UTF-8" ; - } + } $keep .= $filename ; } @@ -601,7 +620,7 @@ sub _readZipHeader($) { $Extra{$_->[0]} = \$_->[1]; } - + if (defined $Extra{ZIP_EXTRA_ID_ZIP64()}) { $zip64 = 1 ; @@ -616,7 +635,7 @@ sub _readZipHeader($) my $offset = 0 ; if (U64::full32 $uncompressedLength->get32bit() ) { - $uncompressedLength + $uncompressedLength = U64::newUnpack_V64 substr($buff, 0, 8); $offset += 8 ; @@ -624,7 +643,7 @@ sub _readZipHeader($) if (U64::full32 $compressedLength->get32bit() ) { - $compressedLength + $compressedLength = U64::newUnpack_V64 substr($buff, $offset, 8); $offset += 8 ; @@ -657,18 +676,40 @@ sub _readZipHeader($) { return $self->HeaderError("Unsupported Compression format $compressedMethod") if ! defined $IO::Uncompress::Adapter::Bunzip2::VERSION ; - + *$self->{Type} = 'zip-bzip2'; - + my $obj = IO::Uncompress::Adapter::Bunzip2::mkUncompObject(); *$self->{Uncomp} = $obj; } + elsif ($compressedMethod == ZIP_CM_XZ) + { + return $self->HeaderError("Unsupported Compression format $compressedMethod") + if ! defined $IO::Uncompress::Adapter::UnXz::VERSION ; + + *$self->{Type} = 'zip-xz'; + + my $obj = IO::Uncompress::Adapter::UnXz::mkUncompObject(); + + *$self->{Uncomp} = $obj; + } + elsif ($compressedMethod == ZIP_CM_ZSTD) + { + return $self->HeaderError("Unsupported Compression format $compressedMethod") + if ! defined $IO::Uncompress::Adapter::UnZstd::VERSION ; + + *$self->{Type} = 'zip-zstd'; + + my $obj = IO::Uncompress::Adapter::UnZstd::mkUncompObject(); + + *$self->{Uncomp} = $obj; + } elsif ($compressedMethod == ZIP_CM_LZMA) { return $self->HeaderError("Unsupported Compression format $compressedMethod") if ! defined $IO::Uncompress::Adapter::UnLzma::VERSION ; - + *$self->{Type} = 'zip-lzma'; my $LzmaHeader; $self->smartReadExact(\$LzmaHeader, 4) @@ -695,7 +736,7 @@ sub _readZipHeader($) elsif ($compressedMethod == ZIP_CM_STORE) { *$self->{Type} = 'zip-stored'; - + my $obj = IO::Uncompress::Adapter::Identity::mkUncompObject($streamingMode, $zip64); @@ -724,15 +765,7 @@ sub _readZipHeader($) 'Stream' => $streamingMode, 'MethodID' => $compressedMethod, - 'MethodName' => $compressedMethod == ZIP_CM_DEFLATE - ? "Deflated" - : $compressedMethod == ZIP_CM_BZIP2 - ? "Bzip2" - : $compressedMethod == ZIP_CM_LZMA - ? "Lzma" - : $compressedMethod == ZIP_CM_STORE - ? "Stored" - : "Unknown" , + 'MethodName' => $MethodNames{$compressedMethod} || 'Unknown', # 'TextFlag' => $flag & GZIP_FLG_FTEXT ? 1 : 0, # 'HeaderCRCFlag' => $flag & GZIP_FLG_FHCRC ? 1 : 0, @@ -741,7 +774,7 @@ sub _readZipHeader($) # 'ExtraFlag' => $flag & GZIP_FLG_FEXTRA ? 1 : 0, # 'Comment' => $comment, # 'OsID' => $os, -# 'OsName' => defined $GZIP_OS_Names{$os} +# 'OsName' => defined $GZIP_OS_Names{$os} # ? $GZIP_OS_Names{$os} : "Unknown", # 'HeaderCRC' => $HeaderCRC, # 'Flags' => $flag, @@ -763,7 +796,7 @@ sub filterUncompressed else { *$self->{ZipData}{CRC32} = Compress::Raw::Zlib::crc32(${$_[0]}, *$self->{ZipData}{CRC32}, $_[1]); } -} +} # from Archive::Zip & info-zip @@ -805,7 +838,7 @@ sub _dosToUnixTime # # # Now walk the Central Directory Records # my $buffer ; -# while ($self->smartReadExact(\$buffer, 46) && +# while ($self->smartReadExact(\$buffer, 46) && # unpack("V", $buffer) == ZIP_CENTRAL_HDR_SIG) { # # my $compressedLength = unpack ("V", substr($buffer, 20, 4)); @@ -813,7 +846,7 @@ sub _dosToUnixTime # my $extra_length = unpack ("v", substr($buffer, 30, 2)); # my $comment_length = unpack ("v", substr($buffer, 32, 2)); # -# $self->smarkSeek($filename_length + $extra_length + $comment_length, 0, SEEK_CUR) +# $self->smarkSeek($filename_length + $extra_length + $comment_length, 0, SEEK_CUR) # if $extra_length || $comment_length || $filename_length; # push @CD, $compressedLength ; # } @@ -833,7 +866,7 @@ sub _dosToUnixTime # my $buffer; # $self->smartReadExact(\$buffer, 22) ; # -# my $zip64 = 0; +# my $zip64 = 0; # my $centralDirOffset ; # if ( unpack("V", $buffer) == ZIP_END_CENTRAL_HDR_SIG ) { # $centralDirOffset = unpack ("V", substr($buffer, 16, 2)); @@ -864,7 +897,7 @@ sub skip else { $self->smartSeek($size, SEEK_CUR); } - + } @@ -888,7 +921,7 @@ sub scanCentralDirectory # Now walk the Central Directory Records my $buffer ; - while ($self->smartReadExact(\$buffer, 46) && + while ($self->smartReadExact(\$buffer, 46) && unpack("V", $buffer) == ZIP_CENTRAL_HDR_SIG) { my $compressedLength = unpack("V", substr($buffer, 20, 4)); @@ -899,11 +932,11 @@ sub scanCentralDirectory $self->skip($filename_length ) ; - my $v64 = new U64 $compressedLength ; + my $v64 = U64->new( $compressedLength ); if (U64::full32 $compressedLength ) { $self->smartReadExact(\$buffer, $extra_length) ; - die "xxx $offset $comment_length $filename_length $extra_length" . length($buffer) + die "xxx $offset $comment_length $filename_length $extra_length" . length($buffer) if length($buffer) != $extra_length; my $got = $self->get64Extra($buffer, U64::full32 $uncompressedLength); @@ -915,7 +948,7 @@ sub scanCentralDirectory } $self->skip($comment_length ) ; - + push @CD, $v64 ; } @@ -932,7 +965,7 @@ sub get64Extra my $is_uncomp = shift ; my $extra = IO::Compress::Zlib::Extra::findID(0x0001, $buffer); - + if (! defined $extra) { return undef; @@ -941,7 +974,7 @@ sub get64Extra { my $u64 = U64::newUnpack_V64(substr($extra, $is_uncomp ? 8 : 0)) ; return $u64; - } + } } sub offsetFromZip64 @@ -949,20 +982,20 @@ sub offsetFromZip64 my $self = shift ; my $here = shift; - $self->smartSeek($here - 20, 0, SEEK_SET) + $self->smartSeek($here - 20, 0, SEEK_SET) or die "xx $!" ; my $buffer; my $got = 0; - $self->smartReadExact(\$buffer, 20) + $self->smartReadExact(\$buffer, 20) or die "xxx $here $got $!" ; if ( unpack("V", $buffer) == ZIP64_END_CENTRAL_LOC_HDR_SIG ) { my $cd64 = U64::Value_VV64 substr($buffer, 8, 8); - + $self->smartSeek($cd64, 0, SEEK_SET) ; - $self->smartReadExact(\$buffer, 4) + $self->smartReadExact(\$buffer, 4) or die "xxx" ; if ( unpack("V", $buffer) == ZIP64_END_CENTRAL_REC_HDR_SIG ) { @@ -977,7 +1010,7 @@ sub offsetFromZip64 return $cd64 ; } - + die "zzz"; } @@ -998,10 +1031,10 @@ sub findCentralDirectoryOffset my $here = $self->tell(); my $buffer; - $self->smartReadExact(\$buffer, 22) + $self->smartReadExact(\$buffer, 22) or die "xxx" ; - my $zip64 = 0; + my $zip64 = 0; my $centralDirOffset ; if ( unpack("V", $buffer) == ZIP_END_CENTRAL_HDR_SIG ) { $centralDirOffset = unpack("V", substr($buffer, 16, 4)); @@ -1019,7 +1052,7 @@ sub findCentralDirectoryOffset $seekTo = 0; $want = $fileLen ; } - $self->smartSeek( $seekTo, 0, SEEK_SET) + $self->smartSeek( $seekTo, 0, SEEK_SET) or die "xxx $!" ; my $got; $self->smartReadExact($buffer, $want) @@ -1060,7 +1093,7 @@ IO::Uncompress::Unzip - Read zip files/buffers my $status = unzip $input => $output [,OPTS] or die "unzip failed: $UnzipError\n"; - my $z = new IO::Uncompress::Unzip $input [OPTS] + my $z = IO::Uncompress::Unzip->new( $input [OPTS] ) or die "unzip failed: $UnzipError\n"; $status = $z->read($buffer) @@ -1105,6 +1138,39 @@ zlib files/buffers. For writing zip files/buffers, see the companion module IO::Compress::Zip. +The primary purpose of this module is to provide I read access to +zip files and buffers. + +At present the following compression methods are supported by IO::Uncompress::Unzip + +=over 5 + +=item Store (0) + +=item Deflate (8) + +=item Bzip2 (12) + +To read Bzip2 content, the module C must +be installed. + +=item Lzma (14) + +To read LZMA content, the module C must +be installed. + +=item Xz (95) + +To read Xz content, the module C must +be installed. + +=item Zstandard (93) + +To read Zstandard content, the module C must +be installed. + +=back + =head1 Functional Interface A top-level function, C, is provided to carry out @@ -1379,7 +1445,7 @@ uncompressed data to a buffer, C<$buffer>. use IO::Uncompress::Unzip qw(unzip $UnzipError) ; use IO::File ; - my $input = new IO::File "new( " \$buffer @@ -1391,7 +1457,7 @@ uncompressed data to a buffer, C<$buffer>. The format of the constructor for IO::Uncompress::Unzip is shown below - my $z = new IO::Uncompress::Unzip $input [OPTS] + my $z = IO::Uncompress::Unzip->new( $input [OPTS] ) or die "IO::Uncompress::Unzip failed: $UnzipError\n"; Returns an C object on success and undef on failure. @@ -1449,7 +1515,7 @@ Open "membername" from the zip file for reading. =item C<< Efs => 0| 1 >> -When this option is set to true AND the zip archive being read has +When this option is set to true AND the zip archive being read has the "Language Encoding Flag" (EFS) set, the member name is assumed to be encoded in UTF-8. If the member name in the zip archive is not valid UTF-8 when this optionn is true, @@ -1797,7 +1863,7 @@ C option in the constructor. =head1 Importing -No symbolic constants are required by this IO::Uncompress::Unzip at present. +No symbolic constants are required by IO::Uncompress::Unzip at present. =over 5 @@ -1824,13 +1890,13 @@ stream at a time. use IO::Uncompress::Unzip qw($UnzipError); my $zipfile = "somefile.zip"; - my $u = new IO::Uncompress::Unzip $zipfile + my $u = IO::Uncompress::Unzip->new( $zipfile ) or die "Cannot open $zipfile: $UnzipError"; my $status; for ($status = 1; $status > 0; $status = $u->nextStream()) { - + my $name = $u->getHeaderInfo()->{Name}; warn "Processing member $name\n" ; @@ -1862,7 +1928,7 @@ The script is available from L =head1 SUPPORT -General feedback/questions/bug reports should be sent to +General feedback/questions/bug reports should be sent to L (preferred) or L. @@ -1877,9 +1943,9 @@ L, L For RFC 1950, 1951 and 1952 see -L, -L and -L +L, +L and +L The I compression library was written by Jean-loup Gailly C and Mark Adler C. @@ -1899,8 +1965,7 @@ See the Changes file. =head1 COPYRIGHT AND LICENSE -Copyright (c) 2005-2019 Paul Marquess. All rights reserved. +Copyright (c) 2005-2022 Paul Marquess. All rights reserved. This program is free software; you can redistribute it and/or modify it under the same terms as Perl itself. - diff --git a/gnu/usr.bin/perl/cpan/IO-Compress/private/MakeUtil.pm b/gnu/usr.bin/perl/cpan/IO-Compress/private/MakeUtil.pm index 037782b9498..aa540c68fda 100644 --- a/gnu/usr.bin/perl/cpan/IO-Compress/private/MakeUtil.pm +++ b/gnu/usr.bin/perl/cpan/IO-Compress/private/MakeUtil.pm @@ -35,22 +35,21 @@ sub MY::libscan my $path = shift; return undef - if $path =~ /^(?:RCS|CVS|SCCS|\.svn|_darcs)$/ || - $path =~ /(~|\.bak|_bak)$/ || + if $path =~ /(~|\.bak|_bak)$/ || $path =~ /\..*\.sw(o|p)$/ || $path =~ /\B\.svn\b/; return $path; } -sub MY::postamble +sub MY::postamble { return '' if $ENV{PERL_CORE} ; my @files = getPerlFiles('MANIFEST'); - # Note: Once you remove all the layers of shell/makefile escaping + # Note: Once you remove all the layers of shell/makefile escaping # the regular expression below reads # # /^\s*local\s*\(\s*\$^W\s*\)/ @@ -216,7 +215,7 @@ sub UpDowngrade foreach (@files) { #if (-l $_ ) { doUpDown($our_sub, $warn_sub, $_) } - #else + #else #{ doUpDownViaCopy($our_sub, $warn_sub, $_) } } @@ -235,7 +234,7 @@ sub doUpDown local ($^I) = ($^O eq 'VMS') ? "_bak" : ".bak"; local (@ARGV) = shift; - + while (<>) { print, last if /^__(END|DATA)__/ ; @@ -278,7 +277,7 @@ sub doUpDownViaCopy push @keep, $_; last ; } - + &{ $our_sub }() if $our_sub ; &{ $warn_sub }() if $warn_sub ; push @keep, $_; @@ -335,7 +334,7 @@ sub FindBrokenDependencies Compress::Zlib ); - + my @broken = (); foreach my $module ( grep { ! $thisModule{$_} } @modules) @@ -343,12 +342,12 @@ sub FindBrokenDependencies my $hasVersion = getInstalledVersion($module); # No need to upgrade if the module isn't installed at all - next + next if ! defined $hasVersion; # If already have C::Z version 1, then an upgrade to any of the # IO::Compress modules will not break it. - next + next if $module eq 'Compress::Zlib' && $hasVersion < 2; if ($hasVersion < $version) @@ -371,14 +370,12 @@ sub getInstalledVersion { no strict 'refs'; $version = ${ $module . "::VERSION" }; - $version = 0 + $version = 0 } - + return $version; } package MakeUtil ; 1; - - diff --git a/gnu/usr.bin/perl/cpan/IO-Compress/t/000prereq.t b/gnu/usr.bin/perl/cpan/IO-Compress/t/000prereq.t index 9467cd37711..a7fe036f595 100755 --- a/gnu/usr.bin/perl/cpan/IO-Compress/t/000prereq.t +++ b/gnu/usr.bin/perl/cpan/IO-Compress/t/000prereq.t @@ -25,7 +25,7 @@ BEGIN if eval { require Test::NoWarnings ; import Test::NoWarnings; 1 }; - my $VERSION = '2.093'; + my $VERSION = '2.103'; my @NAMES = qw( Compress::Raw::Bzip2 Compress::Raw::Zlib @@ -60,7 +60,7 @@ BEGIN ); - my @OPT = qw( + my @OPT = qw( ); plan tests => 1 + 2 + @NAMES + @OPT + $extra ; @@ -76,21 +76,21 @@ BEGIN eval " require $name " ; if ($@) { - ok 1, "$name not available" + ok 1, "$name not available" } - else + else { my $ver = eval("\$${name}::VERSION"); - is $ver, $VERSION, "$name version should be $VERSION" + is $ver, $VERSION, "$name version should be $VERSION" or diag "$name version is $ver, need $VERSION" ; - } + } } # need zlib 1.2.0 or better - + cmp_ok Compress::Raw::Zlib::ZLIB_VERNUM(), ">=", 0x1200 - or diag "IO::Compress needs zlib 1.2.0 or better, you have " . Compress::Raw::Zlib::zlib_version(); - + or diag "IO::Compress needs zlib 1.2.0 or better, you have " . Compress::Raw::Zlib::zlib_version(); + use_ok('Scalar::Util') ; } @@ -99,4 +99,3 @@ ok gotScalarUtilXS(), "Got XS Version of Scalar::Util" or diag < "Lengthy Tests Disabled\n" . "set COMPRESS_ZLIB_RUN_ALL to run this test suite" unless defined $ENV{COMPRESS_ZLIB_RUN_ALL} ; @@ -33,7 +33,7 @@ BEGIN use_ok('IO::Compress::Gzip::Constants'); } -my $compressed ; +my $compressed ; my $expected_crc ; for my $wrap (0 .. 2) @@ -59,7 +59,7 @@ for my $wrap (0 .. 2) else { $expected_isize = $offset - 1; } - + sub gzipClosure { my $gzip = shift ; @@ -70,7 +70,7 @@ for my $wrap (0 .. 2) my $buff = 'x' x $inc ; my $left = $max ; - return + return sub { if ($max == 0 && $index == 0) { @@ -113,16 +113,16 @@ for my $wrap (0 .. 2) }; } - my $gzip = new IO::Compress::Gzip \$compressed, + my $gzip = IO::Compress::Gzip->new( \$compressed, -Append => 0, - -HeaderCRC => 1; + -HeaderCRC => 1 ); ok $gzip, " Created IO::Compress::Gzip object"; - my $gunzip = new IO::Uncompress::Gunzip gzipClosure($gzip, $size), + my $gunzip = IO::Uncompress::Gunzip->new( gzipClosure($gzip, $size), -BlockSize => 1024 * 500 , -Append => 0, - -Strict => 1; + -Strict => 1 ); ok $gunzip, " Created IO::Uncompress::Gunzip object"; @@ -147,12 +147,11 @@ for my $wrap (0 .. 2) my $gunzip_hdr = $gunzip->getHeaderInfo(); - is $gunzip_hdr->{ISIZE}, $expected_isize, + is $gunzip_hdr->{ISIZE}, $expected_isize, sprintf(" ISIZE is $expected_isize [0x%X]", $expected_isize); - is $gunzip_hdr->{CRC32}, $expected_crc, + is $gunzip_hdr->{CRC32}, $expected_crc, sprintf(" CRC32 is $expected_crc [0x%X]", $expected_crc); $expected_crc = 0 ; } } - diff --git a/gnu/usr.bin/perl/cpan/IO-Compress/t/101truncate-bzip2.t b/gnu/usr.bin/perl/cpan/IO-Compress/t/101truncate-bzip2.t index d533f237a0d..e8e45256085 100755 --- a/gnu/usr.bin/perl/cpan/IO-Compress/t/101truncate-bzip2.t +++ b/gnu/usr.bin/perl/cpan/IO-Compress/t/101truncate-bzip2.t @@ -15,7 +15,7 @@ BEGIN { plan skip_all => "Lengthy Tests Disabled\n" . "set COMPRESS_ZLIB_RUN_ALL or COMPRESS_ZLIB_RUN_MOST to run this test suite" unless defined $ENV{COMPRESS_ZLIB_RUN_ALL} or defined $ENV{COMPRESS_ZLIB_RUN_MOST}; - + # use Test::NoWarnings, if available my $extra = 0 ; $extra = 1 diff --git a/gnu/usr.bin/perl/cpan/IO-Compress/t/101truncate-deflate.t b/gnu/usr.bin/perl/cpan/IO-Compress/t/101truncate-deflate.t index 49f9ae41ca5..1e8b58e35f4 100755 --- a/gnu/usr.bin/perl/cpan/IO-Compress/t/101truncate-deflate.t +++ b/gnu/usr.bin/perl/cpan/IO-Compress/t/101truncate-deflate.t @@ -15,7 +15,7 @@ BEGIN { plan skip_all => "Lengthy Tests Disabled\n" . "set COMPRESS_ZLIB_RUN_ALL or COMPRESS_ZLIB_RUN_MOST to run this test suite" unless defined $ENV{COMPRESS_ZLIB_RUN_ALL} or defined $ENV{COMPRESS_ZLIB_RUN_MOST}; - + # use Test::NoWarnings, if available my $extra = 0 ; $extra = 1 diff --git a/gnu/usr.bin/perl/cpan/IO-Compress/t/101truncate-gzip.t b/gnu/usr.bin/perl/cpan/IO-Compress/t/101truncate-gzip.t index 16b2d079638..df5d877e3f8 100755 --- a/gnu/usr.bin/perl/cpan/IO-Compress/t/101truncate-gzip.t +++ b/gnu/usr.bin/perl/cpan/IO-Compress/t/101truncate-gzip.t @@ -16,7 +16,7 @@ BEGIN { plan skip_all => "Lengthy Tests Disabled\n" . "set COMPRESS_ZLIB_RUN_ALL or COMPRESS_ZLIB_RUN_MOST to run this test suite" unless defined $ENV{COMPRESS_ZLIB_RUN_ALL} or defined $ENV{COMPRESS_ZLIB_RUN_MOST}; - + # use Test::NoWarnings, if available my $extra = 0 ; $extra = 1 diff --git a/gnu/usr.bin/perl/cpan/IO-Compress/t/101truncate-rawdeflate.t b/gnu/usr.bin/perl/cpan/IO-Compress/t/101truncate-rawdeflate.t index 177a3d5b37f..371ed5c4b07 100755 --- a/gnu/usr.bin/perl/cpan/IO-Compress/t/101truncate-rawdeflate.t +++ b/gnu/usr.bin/perl/cpan/IO-Compress/t/101truncate-rawdeflate.t @@ -15,7 +15,7 @@ BEGIN { plan skip_all => "Lengthy Tests Disabled\n" . "set COMPRESS_ZLIB_RUN_ALL or COMPRESS_ZLIB_RUN_MOST to run this test suite" unless defined $ENV{COMPRESS_ZLIB_RUN_ALL} or defined $ENV{COMPRESS_ZLIB_RUN_MOST}; - + # use Test::NoWarnings, if available my $extra = 0 ; $extra = 1 @@ -55,22 +55,22 @@ foreach my $CompressClass ( 'IO::Compress::RawDeflate') my $Error = getErrorRef($UncompressClass); my $compressed ; - ok( my $x = new IO::Compress::RawDeflate \$compressed); + ok( my $x = IO::Compress::RawDeflate->new( \$compressed ) ); ok $x->write($hello) ; ok $x->close ; - + my $cc = $compressed ; my $gz ; - ok($gz = new $UncompressClass(\$cc, + ok($gz = $UncompressClass->can('new')->( $UncompressClass, \$cc, -Transparent => 0)) or diag "$$Error\n"; my $un; is $gz->read($un, length($hello)), length($hello); ok $gz->close(); is $un, $hello ; - + for my $trans (0 .. 1) { title "Testing $CompressClass, Transparent = $trans"; @@ -82,19 +82,19 @@ foreach my $CompressClass ( 'IO::Compress::RawDeflate') ok 1, "Header size is $header_size" ; ok 1, "Trailer size is $trailer_size" ; - + title "Compressed Data Truncation"; foreach my $i (0 .. $blocksize) { - - my $lex = new LexFile my $name ; - + + my $lex = LexFile->new( my $name ); + ok 1, "Length $i" ; my $part = substr($compressed, 0, $i); writeFile($name, $part); - my $gz = new $UncompressClass $name, + my $gz = $UncompressClass->can('new')->( $UncompressClass, $name, -BlockSize => $blocksize, - -Transparent => $trans; + -Transparent => $trans ); if ($trans) { ok $gz; ok ! $gz->error() ; @@ -111,15 +111,15 @@ foreach my $CompressClass ( 'IO::Compress::RawDeflate') foreach my $i ($blocksize+1 .. length($compressed)-1) { - - my $lex = new LexFile my $name ; - + + my $lex = LexFile->new( my $name ); + ok 1, "Length $i" ; my $part = substr($compressed, 0, $i); writeFile($name, $part); - ok my $gz = new $UncompressClass $name, + ok my $gz = $UncompressClass->can('new')->( $UncompressClass, $name, -BlockSize => $blocksize, - -Transparent => $trans; + -Transparent => $trans ); my $un ; my $status = 1 ; $status = $gz->read($un) while $status > 0 ; @@ -129,6 +129,5 @@ foreach my $CompressClass ( 'IO::Compress::RawDeflate') $gz->close(); } } - -} +} diff --git a/gnu/usr.bin/perl/cpan/IO-Compress/t/101truncate-zip.t b/gnu/usr.bin/perl/cpan/IO-Compress/t/101truncate-zip.t index 80a0aee2751..94d4a8da9bf 100755 --- a/gnu/usr.bin/perl/cpan/IO-Compress/t/101truncate-zip.t +++ b/gnu/usr.bin/perl/cpan/IO-Compress/t/101truncate-zip.t @@ -16,7 +16,7 @@ BEGIN { plan skip_all => "Lengthy Tests Disabled\n" . "set COMPRESS_ZLIB_RUN_ALL or COMPRESS_ZLIB_RUN_MOST to run this test suite" unless defined $ENV{COMPRESS_ZLIB_RUN_ALL} or defined $ENV{COMPRESS_ZLIB_RUN_MOST}; - + # use Test::NoWarnings, if available my $extra = 0 ; $extra = 1 diff --git a/gnu/usr.bin/perl/cpan/IO-Compress/t/105oneshot-zip-store-only.t b/gnu/usr.bin/perl/cpan/IO-Compress/t/105oneshot-zip-store-only.t index 641fb609a8c..a7a1eb109a3 100644 --- a/gnu/usr.bin/perl/cpan/IO-Compress/t/105oneshot-zip-store-only.t +++ b/gnu/usr.bin/perl/cpan/IO-Compress/t/105oneshot-zip-store-only.t @@ -22,8 +22,8 @@ BEGIN { unless defined $ENV{COMPRESS_ZLIB_RUN_ALL} or defined $ENV{COMPRESS_ZLIB_RUN_MOST}; plan(skip_all => "IO::Compress::Bzip2 not available" ) - unless eval { require IO::Compress::Bzip2; - require IO::Uncompress::Bunzip2; + unless eval { require IO::Compress::Bzip2; + require IO::Uncompress::Bunzip2; 1 } ; @@ -86,7 +86,7 @@ for $content (@contents) ok zip(\$content => \$zipped , Method => ZIP_CM_STORE, Zip64 => $zip64, - Stream => $stream), " zip ok" + Stream => $stream), " zip ok" or diag $ZipError ; my $got ; @@ -99,4 +99,3 @@ for $content (@contents) } } } - diff --git a/gnu/usr.bin/perl/cpan/IO-Compress/t/compress/oneshot.pl b/gnu/usr.bin/perl/cpan/IO-Compress/t/compress/oneshot.pl index 790d1b2b0c6..b27c1f1878d 100644 --- a/gnu/usr.bin/perl/cpan/IO-Compress/t/compress/oneshot.pl +++ b/gnu/usr.bin/perl/cpan/IO-Compress/t/compress/oneshot.pl @@ -73,16 +73,16 @@ sub run my $in ; eval { $a = $Func->($in, \$x) ;} ; - like $@, mkErr("^$TopType: input filename is undef or null string"), + like $@, mkErr("^$TopType: input filename is undef or null string"), ' Input filename undef' ; - $in = ''; + $in = ''; eval { $a = $Func->($in, \$x) ;} ; - like $@, mkErr("^$TopType: input filename is undef or null string"), + like $@, mkErr("^$TopType: input filename is undef or null string"), ' Input filename empty' ; { - my $lex1 = new LexFile my $in ; + my $lex1 = LexFile->new( my $in ); writeFile($in, "abc"); my $out = $in ; eval { $a = $Func->($in, $out) ;} ; @@ -92,7 +92,7 @@ sub run { my $dir ; - my $lex = new LexDir $dir ; + my $lex = LexDir->new( $dir ); my $d = quotemeta $dir; $a = $Func->("$dir", \$x) ; @@ -109,7 +109,7 @@ sub run eval { $a = $Func->(\$in, \$in) ;} ; like $@, mkErr("^$TopType: input and output buffer are identical"), ' Input and Output buffer are the same'; - + SKIP: { # Threaded 5.6.x seems to have a problem comparing filehandles. @@ -118,12 +118,12 @@ sub run skip 'Cannot compare filehandles with threaded $]', 2 if $] >= 5.006 && $] < 5.007 && $Config{useithreads}; - my $lex = new LexFile my $out_file ; + my $lex = LexFile->new( my $out_file ); open OUT, ">$out_file" ; eval { $a = $Func->(\*OUT, \*OUT) ;} ; like $@, mkErr("^$TopType: input and output handle are identical"), ' Input and Output handle are the same'; - + close OUT; is -s $out_file, 0, " File zero length" ; } @@ -137,12 +137,12 @@ sub run eval { $a = $Func->(\$x, $object) ;} ; like $@, mkErr("^$TopType: illegal output parameter"), ' Bad Output Param'; - + # Buffer not a scalar reference eval { $a = $Func->(\$x, \%x) ;} ; like $@, mkErr("^$TopType: illegal output parameter"), ' Bad Output Param'; - + eval { $a = $Func->(\%x, \$x) ;} ; like $@, mkErr("^$TopType: illegal input parameter"), @@ -159,13 +159,13 @@ sub run $a = $Func->($filename, \$x) ; is $a, undef, " $TopType returned undef"; like $$Error, "/^input file '$filename' does not exist\$/", " input File '$filename' does not exist"; - + $filename = '/tmp/abd/abc.def'; ok ! -e $filename, " output File '$filename' does not exist"; $a = $Func->(\$x, $filename) ; is $a, undef, " $TopType returned undef"; like $$Error, ("/^(cannot open file '$filename'|input file '$filename' does not exist):/"), " output File '$filename' does not exist"; - + eval { $a = $Func->(\$x, '') } ; like $$Error, "/Need input fileglob for outout fileglob/", ' Output fileglob with no input fileglob'; @@ -199,7 +199,7 @@ sub run skip '\\ returns mutable value in 5.19.3', 1 if $] >= 5.019003; - + eval { $a = $Func->(\$in, \$out, TrailingData => \"abc") ;} ; like $@, mkErr("^$TopType: Parameter 'TrailingData' not writable"), ' TrailingData output not writable'; @@ -335,7 +335,7 @@ sub run { title "$TopType - From Array Ref to Array Ref content '$disp_content' Append $append" ; - my $lex = new LexFile my $in_file ; + my $lex = LexFile->new( my $in_file ); writeFile($in_file, $buffer); my @output = ('first') ; my @input = ($in_file); @@ -350,7 +350,7 @@ sub run { title "$TopType - From Buff to Filename content '$disp_content' Append $append" ; - my $lex = new LexFile my $out_file ; + my $lex = LexFile->new( my $out_file ); ok ! -e $out_file, " Output file does not exist"; writeFile($out_file, $already); @@ -365,11 +365,11 @@ sub run { title "$TopType - From Buff to Handle content '$disp_content' Append $append" ; - my $lex = new LexFile my $out_file ; + my $lex = LexFile->new( my $out_file ); ok ! -e $out_file, " Output file does not exist"; writeFile($out_file, $already); - my $of = new IO::File ">>$out_file" ; + my $of = IO::File->new( ">>$out_file" ); ok $of, " Created output filehandle" ; ok &$Func(\$buffer, $of, AutoClose => 1, Append => $append), ' Compressed ok' ; @@ -384,7 +384,7 @@ sub run { title "$TopType - From Filename to Filename content '$disp_content' Append $append" ; - my $lex = new LexFile(my $in_file, my $out_file) ; + my $lex = LexFile->new( my $in_file, my $out_file) ; writeFile($in_file, $buffer); ok ! -e $out_file, " Output file does not exist"; @@ -402,12 +402,12 @@ sub run { title "$TopType - From Filename to Handle content '$disp_content' Append $append" ; - my $lex = new LexFile(my $in_file, my $out_file) ; + my $lex = LexFile->new( my $in_file, my $out_file) ; writeFile($in_file, $buffer); ok ! -e $out_file, " Output file does not exist"; writeFile($out_file, $already); - my $out = new IO::File ">>$out_file" ; + my $out = IO::File->new( ">>$out_file" ); ok &$Func($in_file, $out, AutoClose => 1, Append => $append), ' Compressed ok' ; @@ -421,7 +421,7 @@ sub run { title "$TopType - From Filename to Buffer content '$disp_content' Append $append" ; - my $lex = new LexFile(my $in_file, my $out_file) ; + my $lex = LexFile->new( my $in_file, my $out_file) ; writeFile($in_file, $buffer); my $out = $already; @@ -433,18 +433,18 @@ sub run is $got, $buffer, " Uncompressed matches original"; } - + { title "$TopType - From Handle to Filename content '$disp_content' Append $append" ; - my $lex = new LexFile(my $in_file, my $out_file) ; + my $lex = LexFile->new( my $in_file, my $out_file) ; writeFile($in_file, $buffer); - my $in = new IO::File "<$in_file" ; + my $in = IO::File->new( "<$in_file" ); ok ! -e $out_file, " Output file does not exist"; writeFile($out_file, $already); - ok &$Func($in, $out_file, Append => $append), ' Compressed ok' + ok &$Func($in, $out_file, Append => $append), ' Compressed ok' or diag "error is $$Error" ; ok -e $out_file, " Created output file"; @@ -457,13 +457,13 @@ sub run { title "$TopType - From Handle to Handle content '$disp_content' Append $append" ; - my $lex = new LexFile(my $in_file, my $out_file) ; + my $lex = LexFile->new( my $in_file, my $out_file) ; writeFile($in_file, $buffer); - my $in = new IO::File "<$in_file" ; + my $in = IO::File->new( "<$in_file" ); ok ! -e $out_file, " Output file does not exist"; writeFile($out_file, $already); - my $out = new IO::File ">>$out_file" ; + my $out = IO::File->new( ">>$out_file" ); ok &$Func($in, $out, AutoClose => 1, Append => $append), ' Compressed ok' ; @@ -477,9 +477,9 @@ sub run { title "$TopType - From Handle to Buffer content '$disp_content' Append $append" ; - my $lex = new LexFile(my $in_file, my $out_file) ; + my $lex = LexFile->new( my $in_file, my $out_file) ; writeFile($in_file, $buffer); - my $in = new IO::File "<$in_file" ; + my $in = IO::File->new( "<$in_file" ); my $out = $already ; @@ -491,22 +491,28 @@ sub run } + SKIP: { title "$TopType - From stdin (via '-') to Buffer content '$disp_content' Append $append" ; - my $lex = new LexFile(my $in_file, my $out_file) ; + # Older versions of Windows can hang on these tests + skip 'Skipping STDIN tests', 3 + $append + if $ENV{IO_COMPRESS_SKIP_STDIN_TESTS}; + + my $lex = LexFile->new( my $in_file, my $out_file) ; writeFile($in_file, $buffer); - open(SAVEIN, "<&STDIN"); + open(SAVEIN, "<&STDIN"); + my $dummy = fileno SAVEIN ; ok open(STDIN, "<$in_file"), " redirect STDIN"; my $out = $already; - ok &$Func('-', \$out, Append => $append), ' Compressed ok' + ok &$Func('-', \$out, Append => $append), ' Compressed ok' or diag $$Error ; - open(STDIN, "<&SAVEIN"); + open(STDIN, "<&SAVEIN"); my $got = anyUncompress(\$out, $already); $got = undef if ! defined $buffer && $got eq '' ; @@ -528,11 +534,11 @@ sub run my $FuncInverse = getTopFuncRef($TopTypeInverse); my $ErrorInverse = getErrorRef($TopTypeInverse); - my $lex = new LexFile(my $file1, my $file2) ; + my $lex = LexFile->new( my $file1, my $file2) ; writeFile($file1, $OriginalContent1); writeFile($file2, $OriginalContent2); - my $of = new IO::File "<$file1" ; + my $of = IO::File->new( "<$file1" ); ok $of, " Created output filehandle" ; #my @input = ( undef, "", $file2, \undef, \'', \"abcde", $of) ; @@ -574,7 +580,7 @@ sub run $of->open("<$file1") ; my $output ; - ok &$Func(\@input, \$output, MultiStream => $ms, AutoClose => 0), ' Compressed ok' + ok &$Func(\@input, \$output, MultiStream => $ms, AutoClose => 0), ' Compressed ok' or diag $$Error; my $got = anyUncompress([ \$output, MultiStream => $ms ]); @@ -587,7 +593,7 @@ sub run { title "$TopType - From Array Ref to Filename, MultiStream $ms" ; - my $lex = new LexFile( my $file3) ; + my $lex = LexFile->new( my $file3) ; # rewind the filehandle $of->open("<$file1") ; @@ -605,9 +611,9 @@ sub run { title "$TopType - From Array Ref to Filehandle, MultiStream $ms" ; - my $lex = new LexFile(my $file3) ; + my $lex = LexFile->new( my $file3) ; - my $fh3 = new IO::File ">$file3"; + my $fh3 = IO::File->new( ">$file3" ); # rewind the filehandle $of->open("<$file1") ; @@ -667,7 +673,7 @@ sub run title 'Round trip binary data that happens to include \r\n' ; - my $lex = new LexFile(my $file1, my $file2, my $file3) ; + my $lex = LexFile->new( my $file1, my $file2, my $file3) ; my $original = join '', map { chr } 0x00 .. 0xff ; $original .= "data1\r\ndata2\r\ndata3\r\n" ; @@ -678,7 +684,7 @@ sub run ok &$Func($file1 => $file2), ' Compressed ok' ; ok &$FuncInverse($file2 => $file3), ' Uncompressed ok' ; is readFile($file3), $original, " round tripped ok"; - + } foreach my $bit ($UncompressClass, @@ -692,7 +698,7 @@ sub run my $C_Func = getTopFuncRef($CompressClass); - + my $data = "mary had a little lamb" ; my $keep = $data ; my $extra = "after the main event"; @@ -705,7 +711,7 @@ sub run skip "zstd doesn't support trailing data", 9 if $CompressClass =~ /zstd/i ; - my $lex = new LexFile my $name ; + my $lex = LexFile->new( my $name ); my $input ; my $compressed ; @@ -720,7 +726,7 @@ sub run { writeFile($name, $compressed); - $input = new IO::File "<$name" ; + $input = IO::File->new( "<$name" ); } my $trailing; @@ -735,7 +741,7 @@ sub run } is $trailing . $rest, $extra, " Got trailing data"; - + } } @@ -751,10 +757,10 @@ sub run # # my @inFiles = map { "in$_.tmp" } 1..4; # my @outFiles = map { "out$_.tmp" } 1..4; -# my $lex = new LexFile(@inFiles, @outFiles); +# my $lex = LexFile->new( @inFiles, @outFiles); # # writeFile($_, "data $_") foreach @inFiles ; -# +# # { # title "$TopType - Hash Ref: to filename" ; # @@ -791,8 +797,8 @@ sub run # my @buffer ; # my %hash = ( $inFiles[0] => undef, # $inFiles[1] => undef, -# $inFiles[2] => undef, -# ); +# $inFiles[2] => undef, +# ); # # ok &$Func( \%hash ), ' Compressed ok' ; # @@ -845,10 +851,10 @@ sub run # # my @inFiles = map { "in$_.tmp" } 1..4; # my @outFiles = map { "out$_.tmp" } 1..4; -# my $lex = new LexFile(@inFiles, @outFiles); +# my $lex = LexFile->new( @inFiles, @outFiles); # # writeFile($_, "data $_") foreach @inFiles ; -# +# # # # # if (0) @@ -888,7 +894,7 @@ sub run # # title "$TopType - From Array Ref to Filename" ; # # # # my ($file3) = ("file3"); -# # my $lex = new LexFile($file3) ; +# # my $lex = LexFile->new( $file3) ; # # # # # rewind the filehandle # # $of->open("<$file1") ; @@ -906,9 +912,9 @@ sub run # # title "$TopType - From Array Ref to Filehandle" ; # # # # my ($file3) = ("file3"); -# # my $lex = new LexFile($file3) ; +# # my $lex = LexFile->new( $file3) ; # # -# # my $fh3 = new IO::File ">$file3"; +# # my $fh3 = IO::File->new( ">$file3" ); # # # # # rewind the filehandle # # $of->open("<$file1") ; @@ -936,7 +942,7 @@ sub run my $tmpDir1 ; my $tmpDir2 ; - my $lex = new LexDir($tmpDir1, $tmpDir2) ; + my $lex = LexDir->new($tmpDir1, $tmpDir2) ; my $d1 = quotemeta $tmpDir1 ; my $d2 = quotemeta $tmpDir2 ; @@ -951,7 +957,7 @@ sub run { title "$TopType - From FileGlob to FileGlob files [@$files]" ; - ok &$Func("<$tmpDir1/a*.tmp>" => "<$tmpDir2/a#1.tmp>"), ' Compressed ok' + ok &$Func("<$tmpDir1/a*.tmp>" => "<$tmpDir2/a#1.tmp>"), ' Compressed ok' or diag $$Error ; my @copy = @expected; @@ -967,7 +973,7 @@ sub run title "$TopType - From FileGlob to Array files [@$files]" ; my @buffer = ('first') ; - ok &$Func("<$tmpDir1/a*.tmp>" => \@buffer), ' Compressed ok' + ok &$Func("<$tmpDir1/a*.tmp>" => \@buffer), ' Compressed ok' or diag $$Error ; is shift @buffer, 'first'; @@ -987,8 +993,8 @@ sub run title "$TopType - From FileGlob to Buffer files [@$files], MS $ms" ; my $buffer ; - ok &$Func("<$tmpDir1/a*.tmp>" => \$buffer, - MultiStream => $ms), ' Compressed ok' + ok &$Func("<$tmpDir1/a*.tmp>" => \$buffer, + MultiStream => $ms), ' Compressed ok' or diag $$Error ; #hexDump(\$buffer); @@ -1003,10 +1009,10 @@ sub run { title "$TopType - From FileGlob to Filename files [@$files], MS $ms" ; - my $lex = new LexFile(my $filename) ; - + my $lex = LexFile->new( my $filename) ; + ok &$Func("<$tmpDir1/a*.tmp>" => $filename, - MultiStream => $ms), ' Compressed ok' + MultiStream => $ms), ' Compressed ok' or diag $$Error ; #hexDump(\$buffer); @@ -1021,11 +1027,11 @@ sub run { title "$TopType - From FileGlob to Filehandle files [@$files], MS $ms" ; - my $lex = new LexFile(my $filename) ; - my $fh = new IO::File ">$filename"; - - ok &$Func("<$tmpDir1/a*.tmp>" => $fh, - MultiStream => $ms, AutoClose => 1), ' Compressed ok' + my $lex = LexFile->new( my $filename) ; + my $fh = IO::File->new( ">$filename" ); + + ok &$Func("<$tmpDir1/a*.tmp>" => $fh, + MultiStream => $ms, AutoClose => 1), ' Compressed ok' or diag $$Error ; #hexDump(\$buffer); @@ -1050,7 +1056,7 @@ sub run my $TopType = getTopFuncName($bit); my $buffer = $OriginalContent1; - my $buffer2 = $OriginalContent2; + my $buffer2 = $OriginalContent2; my $keep_orig = $buffer; my $comp = compressBuffer($UncompressClass, $buffer) ; @@ -1096,7 +1102,7 @@ sub run { title "$TopType - From Buff to Filename, Append($append)" ; - my $lex = new LexFile(my $out_file) ; + my $lex = LexFile->new( my $out_file) ; if ($append) { writeFile($out_file, $incumbent) } else @@ -1114,15 +1120,15 @@ sub run { title "$TopType - From Buff to Handle, Append($append)" ; - my $lex = new LexFile(my $out_file) ; + my $lex = LexFile->new( my $out_file) ; my $of ; if ($append) { writeFile($out_file, $incumbent) ; - $of = new IO::File "+< $out_file" ; + $of = IO::File->new( "+< $out_file" ); } else { ok ! -e $out_file, " Output file does not exist" ; - $of = new IO::File "> $out_file" ; + $of = IO::File->new( "> $out_file" ); } isa_ok $of, 'IO::File', ' $of' ; @@ -1138,7 +1144,7 @@ sub run { title "$TopType - From Filename to Filename, Append($append)" ; - my $lex = new LexFile(my $in_file, my $out_file) ; + my $lex = LexFile->new( my $in_file, my $out_file) ; if ($append) { writeFile($out_file, $incumbent) } else @@ -1158,15 +1164,15 @@ sub run { title "$TopType - From Filename to Handle, Append($append)" ; - my $lex = new LexFile(my $in_file, my $out_file) ; + my $lex = LexFile->new( my $in_file, my $out_file) ; my $out ; if ($append) { writeFile($out_file, $incumbent) ; - $out = new IO::File "+< $out_file" ; + $out = IO::File->new( "+< $out_file" ); } else { ok ! -e $out_file, " Output file does not exist" ; - $out = new IO::File "> $out_file" ; + $out = IO::File->new( "> $out_file" ); } isa_ok $out, 'IO::File', ' $out' ; @@ -1184,7 +1190,7 @@ sub run { title "$TopType - From Filename to Buffer, Append($append)" ; - my $lex = new LexFile(my $in_file) ; + my $lex = LexFile->new( my $in_file) ; writeFile($in_file, $comp); my $output ; @@ -1199,14 +1205,14 @@ sub run { title "$TopType - From Handle to Filename, Append($append)" ; - my $lex = new LexFile(my $in_file, my $out_file) ; + my $lex = LexFile->new( my $in_file, my $out_file) ; if ($append) { writeFile($out_file, $incumbent) } else { ok ! -e $out_file, " Output file does not exist" } writeFile($in_file, $comp); - my $in = new IO::File "<$in_file" ; + my $in = IO::File->new( "<$in_file" ); ok &$Func($in, $out_file, Append => $append, @opts), ' Uncompressed ok' ; @@ -1220,20 +1226,20 @@ sub run { title "$TopType - From Handle to Handle, Append($append)" ; - my $lex = new LexFile(my $in_file, my $out_file) ; + my $lex = LexFile->new( my $in_file, my $out_file) ; my $out ; if ($append) { writeFile($out_file, $incumbent) ; - $out = new IO::File "+< $out_file" ; + $out = IO::File->new( "+< $out_file" ); } else { ok ! -e $out_file, " Output file does not exist" ; - $out = new IO::File "> $out_file" ; + $out = IO::File->new( "> $out_file" ); } isa_ok $out, 'IO::File', ' $out' ; writeFile($in_file, $comp); - my $in = new IO::File "<$in_file" ; + my $in = IO::File->new( "<$in_file" ); ok &$Func($in, $out, Append => $append, AutoClose => 1, @opts), ' Uncompressed ok' ; @@ -1247,9 +1253,9 @@ sub run { title "$TopType - From Filename to Buffer, Append($append)" ; - my $lex = new LexFile(my $in_file) ; + my $lex = LexFile->new( my $in_file) ; writeFile($in_file, $comp); - my $in = new IO::File "<$in_file" ; + my $in = IO::File->new( "<$in_file" ); my $output ; $output = $incumbent if $append ; @@ -1260,23 +1266,29 @@ sub run is $output, $expected, " Uncompressed matches original"; } + SKIP: { title "$TopType - From stdin (via '-') to Buffer content, Append($append) " ; - my $lex = new LexFile(my $in_file) ; + # Older versions of Windows can hang on these tests + skip 'Skipping STDIN tests', 4 + if $ENV{IO_COMPRESS_SKIP_STDIN_TESTS}; + + my $lex = LexFile->new( my $in_file) ; writeFile($in_file, $comp); - open(SAVEIN, "<&STDIN"); + open(SAVEIN, "<&STDIN"); + my $dummy = fileno SAVEIN ; ok open(STDIN, "<$in_file"), " redirect STDIN"; my $output ; $output = $incumbent if $append ; - ok &$Func('-', \$output, Append => $append, @opts), ' Uncompressed ok' + ok &$Func('-', \$output, Append => $append, @opts), ' Uncompressed ok' or diag $$Error ; - open(STDIN, "<&SAVEIN"); + open(STDIN, "<&SAVEIN"); is $keep_comp, $comp, " Input buffer not changed" ; is $output, $expected, " Uncompressed matches original"; @@ -1286,14 +1298,14 @@ sub run { title "$TopType - From Handle to Buffer, InputLength" ; - my $lex = new LexFile(my $in_file, my $out_file) ; + my $lex = LexFile->new( my $in_file, my $out_file) ; my $out ; my $expected = $buffer ; my $appended = 'appended'; my $len_appended = length $appended; writeFile($in_file, $comp . $appended . $comp . $appended) ; - my $in = new IO::File "<$in_file" ; + my $in = IO::File->new( "<$in_file" ); ok &$Func($in, \$out, Transparent => 0, InputLength => length $comp, @opts), ' Uncompressed ok' ; @@ -1313,32 +1325,42 @@ sub run is $buff, $appended, " Appended data ok"; } - for my $stdin ('-', *STDIN) # , \*STDIN) + SKIP: { - title "$TopType - From stdin (via $stdin) to Buffer content, InputLength" ; - my $lex = new LexFile my $in_file ; - my $expected = $buffer ; - my $appended = 'appended'; - my $len_appended = length $appended; - writeFile($in_file, $comp . $appended ) ; + # Older versions of Windows can hang on these tests + skip 'Skipping STDIN tests', 12 + if $ENV{IO_COMPRESS_SKIP_STDIN_TESTS}; - open(SAVEIN, "<&STDIN"); - my $dummy = fileno SAVEIN ; - ok open(STDIN, "<$in_file"), " redirect STDIN"; + for my $stdin ('-', *STDIN) # , \*STDIN) + { + title "$TopType - From stdin (via $stdin) to Buffer content, InputLength" ; - my $output ; - ok &$Func($stdin, \$output, Transparent => 0, InputLength => length $comp, @opts), ' Uncompressed ok' - or diag $$Error ; - my $buff ; - is read(STDIN, $buff, $len_appended), $len_appended, " Length of Appended data ok"; + my $lex = LexFile->new( my $in_file ); + my $expected = $buffer ; + my $appended = 'appended'; + my $len_appended = length $appended; + writeFile($in_file, $comp . $appended ) ; - is $output, $expected, " Uncompressed matches original"; - is $buff, $appended, " Appended data ok"; + open(SAVEIN, "<&STDIN"); + my $dummy = fileno SAVEIN ; + ok open(STDIN, "<$in_file"), " redirect STDIN"; - open(STDIN, "<&SAVEIN"); + my $output ; + + ok &$Func($stdin, \$output, Transparent => 0, InputLength => length $comp, @opts), ' Uncompressed ok' + or diag $$Error ; + + my $buff ; + is read(STDIN, $buff, $len_appended), $len_appended, " Length of Appended data ok"; + + is $output, $expected, " Uncompressed matches original"; + is $buff, $appended, " Appended data ok"; + + open(STDIN, "<&SAVEIN"); + } } } @@ -1366,12 +1388,12 @@ sub run my $incumbent = "incumbent data" ; - my $lex = new LexFile(my $file1, my $file2) ; + my $lex = LexFile->new( my $file1, my $file2) ; writeFile($file1, compressBuffer($UncompressClass, $OriginalContent1)); writeFile($file2, compressBuffer($UncompressClass, $OriginalContent2)); - my $of = new IO::File "<$file1" ; + my $of = IO::File->new( "<$file1" ); ok $of, " Created output filehandle" ; #my @input = ($file2, \$undef, \$null, \$comp, $of) ; @@ -1393,7 +1415,7 @@ sub run { title "$TopType - From ArrayRef to Filename" ; - my $lex = new LexFile my $output; + my $lex = LexFile->new( my $output ); $of->open("<$file1") ; ok &$Func(\@input, $output, AutoClose => 0, @opts), ' UnCompressed ok' ; @@ -1404,8 +1426,8 @@ sub run { title "$TopType - From ArrayRef to Filehandle" ; - my $lex = new LexFile my $output; - my $fh = new IO::File ">$output" ; + my $lex = LexFile->new( my $output ); + my $fh = IO::File->new( ">$output" ); $of->open("<$file1") ; ok &$Func(\@input, $fh, AutoClose => 0, @opts), ' UnCompressed ok' ; @@ -1422,8 +1444,8 @@ sub run ok &$Func(\@input, \@output, AutoClose => 0, @opts), ' UnCompressed ok' ; is_deeply \@input, \@keep, " Input array not changed" ; - is_deeply [map { defined $$_ ? $$_ : "" } @output], - ['first', @expected], + is_deeply [map { defined $$_ ? $$_ : "" } @output], + ['first', @expected], " Got Expected uncompressed data"; } @@ -1441,7 +1463,7 @@ sub run my $tmpDir1 ; my $tmpDir2 ; - my $lex = new LexDir($tmpDir1, $tmpDir2) ; + my $lex = LexDir->new($tmpDir1, $tmpDir2) ; my $d1 = quotemeta $tmpDir1 ; my $d2 = quotemeta $tmpDir2 ; @@ -1460,7 +1482,7 @@ sub run { title "$TopType - From FileGlob to FileGlob" ; - ok &$Func("<$tmpDir1/a*.tmp>" => "<$tmpDir2/a#1.tmp>", @opts), ' UnCompressed ok' + ok &$Func("<$tmpDir1/a*.tmp>" => "<$tmpDir2/a#1.tmp>", @opts), ' UnCompressed ok' or diag $$Error ; my @copy = @expected; @@ -1476,7 +1498,7 @@ sub run title "$TopType - From FileGlob to Arrayref" ; my @output = (\'first'); - ok &$Func("<$tmpDir1/a*.tmp>" => \@output, @opts), ' UnCompressed ok' + ok &$Func("<$tmpDir1/a*.tmp>" => \@output, @opts), ' UnCompressed ok' or diag $$Error ; my @copy = ('first', @expected); @@ -1492,7 +1514,7 @@ sub run title "$TopType - From FileGlob to Buffer" ; my $output ; - ok &$Func("<$tmpDir1/a*.tmp>" => \$output, @opts), ' UnCompressed ok' + ok &$Func("<$tmpDir1/a*.tmp>" => \$output, @opts), ' UnCompressed ok' or diag $$Error ; is $output, join('', @expected), " got expected uncompressed data"; @@ -1501,9 +1523,9 @@ sub run { title "$TopType - From FileGlob to Filename" ; - my $lex = new LexFile my $output ; + my $lex = LexFile->new( my $output ); ok ! -e $output, " $output does not exist" ; - ok &$Func("<$tmpDir1/a*.tmp>" => $output, @opts), ' UnCompressed ok' + ok &$Func("<$tmpDir1/a*.tmp>" => $output, @opts), ' UnCompressed ok' or diag $$Error ; ok -e $output, " $output does exist" ; @@ -1513,9 +1535,9 @@ sub run { title "$TopType - From FileGlob to Filehandle" ; - my $lex = new LexFile my $output ; - my $fh = new IO::File ">$output" ; - ok &$Func("<$tmpDir1/a*.tmp>" => $fh, AutoClose => 1, @opts), ' UnCompressed ok' + my $lex = LexFile->new( my $output ); + my $fh = IO::File->new( ">$output" ); + ok &$Func("<$tmpDir1/a*.tmp>" => $fh, AutoClose => 1, @opts), ' UnCompressed ok' or diag $$Error ; ok -e $output, " $output does exist" ; @@ -1534,7 +1556,7 @@ sub run title "More write tests" ; - my $lex = new LexFile(my $file1, my $file2, my $file3) ; + my $lex = LexFile->new( my $file1, my $file2, my $file3) ; writeFile($file1, "F1"); writeFile($file2, "F2"); @@ -1551,9 +1573,9 @@ sub run # { # my ($send, $get) = @$data ; # -# my $fh1 = new IO::File "< $file1" ; -# my $fh2 = new IO::File "< $file2" ; -# my $fh3 = new IO::File "< $file3" ; +# my $fh1 = IO::File->new( "< $file1" ); +# my $fh2 = IO::File->new( "< $file2" ); +# my $fh3 = IO::File->new( "< $file3" ); # # title "$send"; # my ($copy); @@ -1587,9 +1609,9 @@ sub run { my ($send, $get) = @$data ; - my $fh1 = new IO::File "< $file1" ; - my $fh2 = new IO::File "< $file2" ; - my $fh3 = new IO::File "< $file3" ; + my $fh1 = IO::File->new( "< $file1" ); + my $fh2 = IO::File->new( "< $file2" ); + my $fh3 = IO::File->new( "< $file3" ); title "$send"; my($copy); @@ -1604,8 +1626,8 @@ sub run } @data = ( - '[""]', - '[undef]', + '[""]', + '[undef]', ) ; @@ -1616,7 +1638,7 @@ sub run eval "\$copy = $send"; my $Answer ; eval { &$Func($copy, \$Answer) } ; - like $@, mkErr("^$TopFuncName: input filename is undef or null string"), + like $@, mkErr("^$TopFuncName: input filename is undef or null string"), " got error message"; } @@ -1624,11 +1646,11 @@ sub run { - # check setting $\ + # check setting $\ my $CompFunc = getTopFuncRef($CompressClass); my $UncompFunc = getTopFuncRef($UncompressClass); - my $lex = new LexFile my $file ; + my $lex = LexFile->new( my $file ); local $\ = "\n" ; my $input = "hello world"; @@ -1647,6 +1669,7 @@ sub run skip "open filehandle to buffer not supported in Perl $]", 7 if $] < 5.008 ; + my $CompFunc = getTopFuncRef($CompressClass); my $UncompFunc = getTopFuncRef($UncompressClass); @@ -1664,7 +1687,7 @@ sub run is $output, $input, "round trip ok" ; } - + } # TODO add more error cases diff --git a/gnu/usr.bin/perl/cpan/IO-Compress/t/compress/prime.pl b/gnu/usr.bin/perl/cpan/IO-Compress/t/compress/prime.pl index cae424c7aed..2b0af2835d7 100644 --- a/gnu/usr.bin/perl/cpan/IO-Compress/t/compress/prime.pl +++ b/gnu/usr.bin/perl/cpan/IO-Compress/t/compress/prime.pl @@ -13,7 +13,7 @@ BEGIN { plan skip_all => "Lengthy Tests Disabled\n" . "set COMPRESS_ZLIB_RUN_ALL or COMPRESS_ZLIB_RUN_MOST to run this test suite" unless defined $ENV{COMPRESS_ZLIB_RUN_ALL} or defined $ENV{COMPRESS_ZLIB_RUN_MOST}; - + # use Test::NoWarnings, if available $extra = 0 ; $extra = 1 @@ -54,11 +54,11 @@ EOM for my $useBuf (0 .. 1) { print "#\n# BlockSize $blocksize, Length $i, Buffer $useBuf\n#\n" ; - my $lex = new LexFile my $name ; - + my $lex = LexFile->new( my $name ); + my $prime = substr($compressed, 0, $i); my $rest = substr($compressed, $i); - + my $start ; if ($useBuf) { $start = \$rest ; @@ -68,20 +68,20 @@ EOM writeFile($name, $rest); } - #my $gz = new $UncompressClass $name, - my $gz = new $UncompressClass $start, + #my $gz = $UncompressClass->can('new')->( $UncompressClass, $name, + my $gz = $UncompressClass->can('new')->( $UncompressClass, $start, -Append => 1, -BlockSize => $blocksize, -Prime => $prime, -Transparent => 0 - ; + ); ok $gz; ok ! $gz->error() ; my $un ; my $status = 1 ; $status = $gz->read($un) while $status > 0 ; is $status, 0 ; - ok ! $gz->error() + ok ! $gz->error() or print "Error is '" . $gz->error() . "'\n"; is $un, $hello ; ok $gz->eof() ; @@ -90,5 +90,5 @@ EOM } } } - + 1; diff --git a/gnu/usr.bin/perl/cpan/IO-Socket-IP/lib/IO/Socket/IP.pm b/gnu/usr.bin/perl/cpan/IO-Socket-IP/lib/IO/Socket/IP.pm index 5a5ee7d204a..3158ef55ab6 100644 --- a/gnu/usr.bin/perl/cpan/IO-Socket-IP/lib/IO/Socket/IP.pm +++ b/gnu/usr.bin/perl/cpan/IO-Socket-IP/lib/IO/Socket/IP.pm @@ -1,17 +1,20 @@ # You may distribute under the terms of either the GNU General Public License # or the Artistic License (the same terms as Perl itself) # -# (C) Paul Evans, 2010-2015 -- leonerd@leonerd.org.uk +# (C) Paul Evans, 2010-2020 -- leonerd@leonerd.org.uk package IO::Socket::IP; + +use v5; +use strict; +use warnings; + # $VERSION needs to be set before use base 'IO::Socket' # - https://rt.cpan.org/Ticket/Display.html?id=92107 BEGIN { - $VERSION = '0.39'; + our $VERSION = '0.41'; } -use strict; -use warnings; use base qw( IO::Socket ); use Carp; @@ -96,11 +99,10 @@ falling back to IPv4-only on systems which don't. =head1 REPLACING C DEFAULT BEHAVIOUR -By placing C<-register> in the import list, L uses -C rather than C as the class that handles -C. C will also use C rather than -C to handle C, provided that the C -constant is available. +By placing C<-register> in the import list to C, it will +register itself with L as the class that handles C. It +will also ask to handle C as well, provided that constant is +available. Changing C's default behaviour means that calling the C constructor with either C or C as the @@ -167,7 +169,9 @@ sub import =cut -=head2 $sock = IO::Socket::IP->new( %args ) +=head2 new + + $sock = IO::Socket::IP->new( %args ) Creates a new C object, containing a newly created socket handle according to the named arguments passed. The recognised arguments are: @@ -353,7 +357,9 @@ If the constructor fails, it will set C<$@> to an appropriate error message; this may be from C<$!> or it may be some other string; not every failure necessarily has an associated C value. -=head2 $sock = IO::Socket::IP->new( $peeraddr ) +=head2 new (one arg) + + $sock = IO::Socket::IP->new( $peeraddr ) As a special case, if the constructor is passed a single argument (as opposed to an even-sized list of key/value pairs), it is taken to be the value @@ -817,7 +823,9 @@ sub _unpack_sockaddr } } -=head2 ( $host, $service ) = $sock->sockhost_service( $numeric ) +=head2 sockhost_service + + ( $host, $service ) = $sock->sockhost_service( $numeric ) Returns the hostname and service name of the local address (that is, the socket address given by the C method). @@ -840,19 +848,27 @@ sub sockhost_service $self->_get_host_service( $self->sockname, $numeric ? NI_NUMERICHOST|NI_NUMERICSERV : 0 ); } -=head2 $addr = $sock->sockhost +=head2 sockhost + + $addr = $sock->sockhost Return the numeric form of the local address as a textual representation -=head2 $port = $sock->sockport +=head2 sockport + + $port = $sock->sockport Return the numeric form of the local port number -=head2 $host = $sock->sockhostname +=head2 sockhostname + + $host = $sock->sockhostname Return the resolved name of the local address -=head2 $service = $sock->sockservice +=head2 sockservice + + $service = $sock->sockservice Return the resolved name of the local port number @@ -864,7 +880,9 @@ sub sockport { my $self = shift; scalar +( $self->_get_host_service( $self->sock sub sockhostname { my $self = shift; scalar +( $self->_get_host_service( $self->sockname, 0, NIx_NOSERV ) )[0] } sub sockservice { my $self = shift; scalar +( $self->_get_host_service( $self->sockname, 0, NIx_NOHOST ) )[1] } -=head2 $addr = $sock->sockaddr +=head2 sockaddr + + $addr = $sock->sockaddr Return the local address as a binary octet string @@ -872,7 +890,9 @@ Return the local address as a binary octet string sub sockaddr { my $self = shift; _unpack_sockaddr $self->sockname } -=head2 ( $host, $service ) = $sock->peerhost_service( $numeric ) +=head2 peerhost_service + + ( $host, $service ) = $sock->peerhost_service( $numeric ) Returns the hostname and service name of the peer address (that is, the socket address given by the C method), similar to the @@ -893,19 +913,27 @@ sub peerhost_service $self->_get_host_service( $self->peername, $numeric ? NI_NUMERICHOST|NI_NUMERICSERV : 0 ); } -=head2 $addr = $sock->peerhost +=head2 peerhost + + $addr = $sock->peerhost Return the numeric form of the peer address as a textual representation -=head2 $port = $sock->peerport +=head2 peerport + + $port = $sock->peerport Return the numeric form of the peer port number -=head2 $host = $sock->peerhostname +=head2 peerhostname + + $host = $sock->peerhostname Return the resolved name of the peer address -=head2 $service = $sock->peerservice +=head2 peerservice + + $service = $sock->peerservice Return the resolved name of the peer port number @@ -917,7 +945,9 @@ sub peerport { my $self = shift; scalar +( $self->_get_host_service( $self->peer sub peerhostname { my $self = shift; scalar +( $self->_get_host_service( $self->peername, 0, NIx_NOSERV ) )[0] } sub peerservice { my $self = shift; scalar +( $self->_get_host_service( $self->peername, 0, NIx_NOHOST ) )[1] } -=head2 $addr = $peer->peeraddr +=head2 peeraddr + + $addr = $peer->peeraddr Return the peer address as a binary octet string @@ -967,7 +997,9 @@ BEGIN { } } -=head2 $inet = $sock->as_inet +=head2 as_inet + + $inet = $sock->as_inet Returns a new L instance wrapping the same filehandle. This may be useful in cases where it is required, for backward-compatibility, to @@ -1089,7 +1121,9 @@ If the C<...Host> argument is in this special form and the corresponding C<...Service> or C<...Port> argument is also defined, the one parsed from the C<...Host> argument will take precedence and the other will be ignored. -=head2 ( $host, $port ) = IO::Socket::IP->split_addr( $addr ) +=head2 split_addr + + ( $host, $port ) = IO::Socket::IP->split_addr( $addr ) Utility method that provides the parsing functionality described above. Returns a 2-element list, containing either the split hostname and port @@ -1125,7 +1159,9 @@ sub split_addr return ( $addr, undef ); } -=head2 $addr = IO::Socket::IP->join_addr( $host, $port ) +=head2 join_addr + + $addr = IO::Socket::IP->join_addr( $host, $port ) Utility method that performs the reverse of C, returning a string formed by joining the specified host address and port number. The host address diff --git a/gnu/usr.bin/perl/cpan/IO-Socket-IP/t/01local-client-v4.t b/gnu/usr.bin/perl/cpan/IO-Socket-IP/t/01local-client-v4.t index 7ab71569933..b9e53884cb0 100644 --- a/gnu/usr.bin/perl/cpan/IO-Socket-IP/t/01local-client-v4.t +++ b/gnu/usr.bin/perl/cpan/IO-Socket-IP/t/01local-client-v4.t @@ -1,5 +1,6 @@ #!/usr/bin/perl +use v5; use strict; use warnings; diff --git a/gnu/usr.bin/perl/cpan/IO-Socket-IP/t/02local-server-v4.t b/gnu/usr.bin/perl/cpan/IO-Socket-IP/t/02local-server-v4.t index c0d349f5738..88691532fca 100644 --- a/gnu/usr.bin/perl/cpan/IO-Socket-IP/t/02local-server-v4.t +++ b/gnu/usr.bin/perl/cpan/IO-Socket-IP/t/02local-server-v4.t @@ -1,5 +1,6 @@ #!/usr/bin/perl +use v5; use strict; use warnings; diff --git a/gnu/usr.bin/perl/cpan/IO-Socket-IP/t/03local-cross-v4.t b/gnu/usr.bin/perl/cpan/IO-Socket-IP/t/03local-cross-v4.t index 8cac72a95b7..63c17fbb94c 100644 --- a/gnu/usr.bin/perl/cpan/IO-Socket-IP/t/03local-cross-v4.t +++ b/gnu/usr.bin/perl/cpan/IO-Socket-IP/t/03local-cross-v4.t @@ -1,5 +1,6 @@ #!/usr/bin/perl +use v5; use strict; use warnings; diff --git a/gnu/usr.bin/perl/cpan/IO-Socket-IP/t/05local-server-v6.t b/gnu/usr.bin/perl/cpan/IO-Socket-IP/t/05local-server-v6.t index bd33d41bdf2..392078b273a 100644 --- a/gnu/usr.bin/perl/cpan/IO-Socket-IP/t/05local-server-v6.t +++ b/gnu/usr.bin/perl/cpan/IO-Socket-IP/t/05local-server-v6.t @@ -1,5 +1,6 @@ #!/usr/bin/perl +use v5; use strict; use warnings; diff --git a/gnu/usr.bin/perl/cpan/IO-Socket-IP/t/06local-cross-v6.t b/gnu/usr.bin/perl/cpan/IO-Socket-IP/t/06local-cross-v6.t index 9618b9722a9..d4f3bc30f99 100644 --- a/gnu/usr.bin/perl/cpan/IO-Socket-IP/t/06local-cross-v6.t +++ b/gnu/usr.bin/perl/cpan/IO-Socket-IP/t/06local-cross-v6.t @@ -1,5 +1,6 @@ #!/usr/bin/perl +use v5; use strict; use warnings; diff --git a/gnu/usr.bin/perl/cpan/IO-Socket-IP/t/11sockopts.t b/gnu/usr.bin/perl/cpan/IO-Socket-IP/t/11sockopts.t index 5b850924dd5..e3bbd081f4a 100644 --- a/gnu/usr.bin/perl/cpan/IO-Socket-IP/t/11sockopts.t +++ b/gnu/usr.bin/perl/cpan/IO-Socket-IP/t/11sockopts.t @@ -1,5 +1,6 @@ #!/usr/bin/perl +use v5; use strict; use warnings; diff --git a/gnu/usr.bin/perl/cpan/IO-Socket-IP/t/15io-socket.t b/gnu/usr.bin/perl/cpan/IO-Socket-IP/t/15io-socket.t index 07472941a6a..584ebfa87bc 100644 --- a/gnu/usr.bin/perl/cpan/IO-Socket-IP/t/15io-socket.t +++ b/gnu/usr.bin/perl/cpan/IO-Socket-IP/t/15io-socket.t @@ -1,5 +1,6 @@ #!/usr/bin/perl +use v5; use strict; use warnings; diff --git a/gnu/usr.bin/perl/cpan/IO-Socket-IP/t/16v6only.t b/gnu/usr.bin/perl/cpan/IO-Socket-IP/t/16v6only.t index d900cd7ceb9..792ca2f4f52 100644 --- a/gnu/usr.bin/perl/cpan/IO-Socket-IP/t/16v6only.t +++ b/gnu/usr.bin/perl/cpan/IO-Socket-IP/t/16v6only.t @@ -1,5 +1,6 @@ #!/usr/bin/perl +use v5; use strict; use warnings; diff --git a/gnu/usr.bin/perl/cpan/IPC-SysV/Makefile.PL b/gnu/usr.bin/perl/cpan/IPC-SysV/Makefile.PL index 0b30c4ec2e8..713a93affc0 100644 --- a/gnu/usr.bin/perl/cpan/IPC-SysV/Makefile.PL +++ b/gnu/usr.bin/perl/cpan/IPC-SysV/Makefile.PL @@ -47,7 +47,8 @@ sub configure if ($ENV{'PERL_CORE'}) { # clean out const-* files in the core - push @moreopts, realclean => { FILES => "const-c.inc const-xs.inc" }; + push @moreopts, realclean => { FILES => "const-c.inc const-xs.inc" }, + DEFINE => '-DNO_PPPORT_H'; } else { # IPC::SysV is in the core since 5.005 diff --git a/gnu/usr.bin/perl/cpan/IPC-SysV/SysV.xs b/gnu/usr.bin/perl/cpan/IPC-SysV/SysV.xs index 490d4103092..6690718aa85 100644 --- a/gnu/usr.bin/perl/cpan/IPC-SysV/SysV.xs +++ b/gnu/usr.bin/perl/cpan/IPC-SysV/SysV.xs @@ -12,9 +12,11 @@ #include "perl.h" #include "XSUB.h" -#define NEED_sv_2pv_flags -#define NEED_sv_pvn_force_flags -#include "ppport.h" +#ifndef NO_PPPORT_H +# define NEED_sv_2pv_flags +# define NEED_sv_pvn_force_flags +# include "ppport.h" +#endif #include @@ -346,8 +348,8 @@ void memread(addr, sv, pos, size) SV *addr SV *sv - int pos - int size + UV pos + UV size CODE: char *caddr = (char *) sv2addr(addr); char *dst; @@ -371,13 +373,13 @@ void memwrite(addr, sv, pos, size) SV *addr SV *sv - int pos - int size + UV pos + UV size CODE: char *caddr = (char *) sv2addr(addr); STRLEN len; const char *src = SvPV_const(sv, len); - int n = ((int) len > size) ? size : (int) len; + unsigned int n = ((unsigned int) len > size) ? size : (unsigned int) len; Copy(src, caddr + pos, n, char); if (n < size) { diff --git a/gnu/usr.bin/perl/cpan/IPC-SysV/lib/IPC/Msg.pm b/gnu/usr.bin/perl/cpan/IPC-SysV/lib/IPC/Msg.pm index db2411d4bf4..281b2202017 100644 --- a/gnu/usr.bin/perl/cpan/IPC-SysV/lib/IPC/Msg.pm +++ b/gnu/usr.bin/perl/cpan/IPC-SysV/lib/IPC/Msg.pm @@ -15,7 +15,7 @@ use strict; use vars qw($VERSION); use Carp; -$VERSION = '2.07'; +$VERSION = '2.09'; # Figure out if we have support for native sized types my $N = do { my $foo = eval { pack "L!", 0 }; $@ ? '' : '!' }; @@ -42,7 +42,7 @@ my $N = do { my $foo = eval { pack "L!", 0 }; $@ ? '' : '!' }; } sub new { - @_ == 3 || croak 'new IPC::Msg ( KEY , FLAGS )'; + @_ == 3 || croak 'IPC::Msg->new( KEY , FLAGS )'; my $class = shift; my $id = msgget($_[0],$_[1]); diff --git a/gnu/usr.bin/perl/cpan/IPC-SysV/lib/IPC/Semaphore.pm b/gnu/usr.bin/perl/cpan/IPC-SysV/lib/IPC/Semaphore.pm index 2cc5bc5a72c..a8f61b26c8e 100644 --- a/gnu/usr.bin/perl/cpan/IPC-SysV/lib/IPC/Semaphore.pm +++ b/gnu/usr.bin/perl/cpan/IPC-SysV/lib/IPC/Semaphore.pm @@ -16,7 +16,7 @@ use strict; use vars qw($VERSION); use Carp; -$VERSION = '2.07'; +$VERSION = '2.09'; # Figure out if we have support for native sized types my $N = do { my $foo = eval { pack "L!", 0 }; $@ ? '' : '!' }; @@ -39,7 +39,7 @@ my $N = do { my $foo = eval { pack "L!", 0 }; $@ ? '' : '!' }; } sub new { - @_ == 4 || croak 'new ' . __PACKAGE__ . '( KEY, NSEMS, FLAGS )'; + @_ == 4 || croak __PACKAGE__ . '->new( KEY, NSEMS, FLAGS )'; my $class = shift; my $id = semget($_[0],$_[1],$_[2]); diff --git a/gnu/usr.bin/perl/cpan/IPC-SysV/lib/IPC/SharedMem.pm b/gnu/usr.bin/perl/cpan/IPC-SysV/lib/IPC/SharedMem.pm index 993b5e6bd5e..e1fbc850b3c 100644 --- a/gnu/usr.bin/perl/cpan/IPC-SysV/lib/IPC/SharedMem.pm +++ b/gnu/usr.bin/perl/cpan/IPC-SysV/lib/IPC/SharedMem.pm @@ -15,7 +15,7 @@ use strict; use vars qw($VERSION); use Carp; -$VERSION = '2.07'; +$VERSION = '2.09'; # Figure out if we have support for native sized types my $N = do { my $foo = eval { pack "L!", 0 }; $@ ? '' : '!' }; diff --git a/gnu/usr.bin/perl/cpan/IPC-SysV/lib/IPC/SysV.pm b/gnu/usr.bin/perl/cpan/IPC-SysV/lib/IPC/SysV.pm index 4f917b40aa6..ebafceb9385 100644 --- a/gnu/usr.bin/perl/cpan/IPC-SysV/lib/IPC/SysV.pm +++ b/gnu/usr.bin/perl/cpan/IPC-SysV/lib/IPC/SysV.pm @@ -18,7 +18,7 @@ use Config; require Exporter; @ISA = qw(Exporter); -$VERSION = '2.07'; +$VERSION = '2.09'; # To support new constants, just add them to @EXPORT_OK # and the C/XS code will be generated automagically. @@ -81,14 +81,10 @@ sub AUTOLOAD BOOT_XS: { # If I inherit DynaLoader then I inherit AutoLoader and I DON'T WANT TO - require DynaLoader; + use XSLoader (); - # DynaLoader calls dl_load_flags as a static method. - *dl_load_flags = DynaLoader->can('dl_load_flags'); + XSLoader::load( 'IPC::SysV', $VERSION ); - do { - __PACKAGE__->can('bootstrap') || \&DynaLoader::bootstrap - }->(__PACKAGE__, $VERSION); } 1; diff --git a/gnu/usr.bin/perl/cpan/IPC-SysV/t/ipcsysv.t b/gnu/usr.bin/perl/cpan/IPC-SysV/t/ipcsysv.t index 68d2a05e5d5..8bbea07fd0f 100755 --- a/gnu/usr.bin/perl/cpan/IPC-SysV/t/ipcsysv.t +++ b/gnu/usr.bin/perl/cpan/IPC-SysV/t/ipcsysv.t @@ -8,9 +8,13 @@ # ################################################################################ +use strict; +use warnings; + +our %Config; BEGIN { - require Test::More; import Test::More; - require Config; import Config; + require Test::More; Test::More->import; + require Config; Config->import; if ($ENV{'PERL_CORE'} && $Config{'extensions'} !~ m[\bIPC/SysV\b]) { plan(skip_all => 'IPC::SysV was not built'); @@ -30,7 +34,6 @@ plan(tests => 39); # Later the sem* tests will import more for themselves. use IPC::SysV qw(IPC_PRIVATE IPC_NOWAIT IPC_STAT IPC_RMID S_IRWXU); -use strict; { my $did_diag = 0; diff --git a/gnu/usr.bin/perl/cpan/IPC-SysV/t/msg.t b/gnu/usr.bin/perl/cpan/IPC-SysV/t/msg.t index 0d289ba0cf4..c216202e06b 100755 --- a/gnu/usr.bin/perl/cpan/IPC-SysV/t/msg.t +++ b/gnu/usr.bin/perl/cpan/IPC-SysV/t/msg.t @@ -8,14 +8,18 @@ # ################################################################################ +use strict; +use warnings; + +our %Config; BEGIN { if ($ENV{'PERL_CORE'}) { chdir 't' if -d 't'; @INC = '../lib' if -d '../lib' && -d '../ext'; } - require Test::More; import Test::More; - require Config; import Config; + require Test::More; Test::More->import; + require Config; Config->import; if ($ENV{'PERL_CORE'} && $Config{'extensions'} !~ m[\bIPC/SysV\b]) { plan(skip_all => 'IPC::SysV was not built'); @@ -29,7 +33,6 @@ if ($Config{'d_sem'} ne 'define') { } use IPC::SysV qw(IPC_PRIVATE IPC_RMID IPC_NOWAIT IPC_STAT S_IRWXU S_IRWXG S_IRWXO); -use strict; use IPC::Msg; #Creating a message queue @@ -41,7 +44,7 @@ my $msq = sub { return $code->(); } return $code->(); -}->(sub { new IPC::Msg(IPC_PRIVATE, S_IRWXU | S_IRWXG | S_IRWXO) }); +}->(sub { IPC::Msg->new(IPC_PRIVATE, S_IRWXU | S_IRWXG | S_IRWXO) }); unless (defined $msq) { my $info = "IPC::Msg->new failed: $!"; diff --git a/gnu/usr.bin/perl/cpan/IPC-SysV/t/pod.t b/gnu/usr.bin/perl/cpan/IPC-SysV/t/pod.t index 6853526b9a0..d3fee6b3054 100755 --- a/gnu/usr.bin/perl/cpan/IPC-SysV/t/pod.t +++ b/gnu/usr.bin/perl/cpan/IPC-SysV/t/pod.t @@ -8,22 +8,24 @@ # ################################################################################ +use strict; +use warnings; + +our %Config; BEGIN { if ($ENV{'PERL_CORE'}) { chdir 't' if -d 't'; @INC = '../lib' if -d '../lib' && -d '../ext'; } - require Test::More; import Test::More; - require Config; import Config; + require Test::More; Test::More->import; + require Config; Config->import; if ($ENV{'PERL_CORE'} && $Config{'extensions'} !~ m[\bIPC/SysV\b]) { plan(skip_all => 'IPC::SysV was not built'); } } -use strict; - my @pods; # find all potential pod files @@ -49,12 +51,12 @@ eval { require Test::Pod; $Test::Pod::VERSION >= 0.95 or die "Test::Pod version only $Test::Pod::VERSION"; - import Test::Pod tests => scalar @pods; + Test::Pod->import( tests => scalar @pods ); }; if ($@) { require Test::More; - import Test::More skip_all => "testing pod requires Test::Pod"; + Test::More->import( skip_all => "testing pod requires Test::Pod" ); } else { for my $pod (@pods) { diff --git a/gnu/usr.bin/perl/cpan/IPC-SysV/t/podcov.t b/gnu/usr.bin/perl/cpan/IPC-SysV/t/podcov.t index b67776462fd..7067482ec8c 100755 --- a/gnu/usr.bin/perl/cpan/IPC-SysV/t/podcov.t +++ b/gnu/usr.bin/perl/cpan/IPC-SysV/t/podcov.t @@ -8,22 +8,24 @@ # ################################################################################ +use strict; +use warnings; + +our %Config; BEGIN { if ($ENV{'PERL_CORE'}) { chdir 't' if -d 't'; @INC = '../lib' if -d '../lib' && -d '../ext'; } - require Test::More; import Test::More; - require Config; import Config; + require Test::More; Test::More->import; + require Config; Config->import; if ($ENV{'PERL_CORE'} && $Config{'extensions'} !~ m[\bIPC/SysV\b]) { plan(skip_all => 'IPC::SysV was not built'); } } -use strict; - my @modules = qw( IPC::SysV IPC::Msg IPC::Semaphore IPC::SharedMem ); eval 'use Pod::Coverage 0.10'; diff --git a/gnu/usr.bin/perl/cpan/IPC-SysV/t/sem.t b/gnu/usr.bin/perl/cpan/IPC-SysV/t/sem.t index e0de5523561..1f1d06a97b8 100755 --- a/gnu/usr.bin/perl/cpan/IPC-SysV/t/sem.t +++ b/gnu/usr.bin/perl/cpan/IPC-SysV/t/sem.t @@ -8,14 +8,18 @@ # ################################################################################ +use strict; +use warnings; + +our %Config; BEGIN { if ($ENV{'PERL_CORE'}) { chdir 't' if -d 't'; @INC = '../lib' if -d '../lib' && -d '../ext'; } - require Test::More; import Test::More; - require Config; import Config; + require Test::More; Test::More->import; + require Config; Config->import; if ($ENV{'PERL_CORE'} && $Config{'extensions'} !~ m[\bIPC/SysV\b]) { plan(skip_all => 'IPC::SysV was not built'); diff --git a/gnu/usr.bin/perl/cpan/IPC-SysV/t/shm.t b/gnu/usr.bin/perl/cpan/IPC-SysV/t/shm.t index 447514e5b89..5f4282ce4f0 100755 --- a/gnu/usr.bin/perl/cpan/IPC-SysV/t/shm.t +++ b/gnu/usr.bin/perl/cpan/IPC-SysV/t/shm.t @@ -8,14 +8,18 @@ # ################################################################################ +use strict; +use warnings; + +our %Config; BEGIN { if ($ENV{'PERL_CORE'}) { chdir 't' if -d 't'; @INC = '../lib' if -d '../lib' && -d '../ext'; } - require Test::More; import Test::More; - require Config; import Config; + require Test::More; Test::More->import; + require Config; Config->import; if ($ENV{'PERL_CORE'} && $Config{'extensions'} !~ m[\bIPC/SysV\b]) { plan(skip_all => 'IPC::SysV was not built'); diff --git a/gnu/usr.bin/perl/cpan/JSON-PP/lib/JSON/PP.pm b/gnu/usr.bin/perl/cpan/JSON-PP/lib/JSON/PP.pm index 9f083542851..ff23fc7c0f9 100644 --- a/gnu/usr.bin/perl/cpan/JSON-PP/lib/JSON/PP.pm +++ b/gnu/usr.bin/perl/cpan/JSON-PP/lib/JSON/PP.pm @@ -14,7 +14,7 @@ use JSON::PP::Boolean; use Carp (); #use Devel::Peek; -$JSON::PP::VERSION = '4.04'; +$JSON::PP::VERSION = '4.07'; @JSON::PP::EXPORT = qw(encode_json decode_json from_json to_json); @@ -201,12 +201,11 @@ sub boolean_values { my ($false, $true) = @_; $self->{false} = $false; $self->{true} = $true; - return ($false, $true); } else { delete $self->{false}; delete $self->{true}; - return; } + return $self; } sub get_boolean_values { @@ -1564,6 +1563,11 @@ sub incr_parse { } } + unless ( $coder->get_utf8 ) { + utf8::upgrade( $self->{incr_text} ); + utf8::decode( $self->{incr_text} ); + } + my ($obj, $offset) = $coder->PP_decode_json( $self->{incr_text}, 0x00000001 ); push @ret, $obj; use bytes; @@ -1771,10 +1775,6 @@ JSON::PP - JSON::XS compatible pure-Perl module. use JSON; -=head1 VERSION - - 4.04 - =head1 DESCRIPTION JSON::PP is a pure perl JSON decoder/encoder, and (almost) compatible to much diff --git a/gnu/usr.bin/perl/cpan/JSON-PP/t/zero-mojibake.t b/gnu/usr.bin/perl/cpan/JSON-PP/t/zero-mojibake.t index 0ace37016c8..8d5185ded32 100644 --- a/gnu/usr.bin/perl/cpan/JSON-PP/t/zero-mojibake.t +++ b/gnu/usr.bin/perl/cpan/JSON-PP/t/zero-mojibake.t @@ -1,4 +1,5 @@ use strict; +use warnings; use Test::More; BEGIN { plan tests => 1 }; diff --git a/gnu/usr.bin/perl/cpan/MIME-Base64/Base64.pm b/gnu/usr.bin/perl/cpan/MIME-Base64/Base64.pm deleted file mode 100644 index 120cd728016..00000000000 --- a/gnu/usr.bin/perl/cpan/MIME-Base64/Base64.pm +++ /dev/null @@ -1,188 +0,0 @@ -package MIME::Base64; - -use strict; -use vars qw(@ISA @EXPORT @EXPORT_OK $VERSION); - -require Exporter; -@ISA = qw(Exporter); -@EXPORT = qw(encode_base64 decode_base64); -@EXPORT_OK = qw(encode_base64url decode_base64url encoded_base64_length decoded_base64_length); - -$VERSION = '3.15'; - -require XSLoader; -XSLoader::load('MIME::Base64', $VERSION); - -*encode = \&encode_base64; -*decode = \&decode_base64; - -sub encode_base64url { - my $e = encode_base64(shift, ""); - $e =~ s/=+\z//; - $e =~ tr[+/][-_]; - return $e; -} - -sub decode_base64url { - my $s = shift; - $s =~ tr[-_][+/]; - $s .= '=' while length($s) % 4; - return decode_base64($s); -} - -1; - -__END__ - -=head1 NAME - -MIME::Base64 - Encoding and decoding of base64 strings - -=head1 SYNOPSIS - - use MIME::Base64; - - $encoded = encode_base64('Aladdin:open sesame'); - $decoded = decode_base64($encoded); - -=head1 DESCRIPTION - -This module provides functions to encode and decode strings into and from the -base64 encoding specified in RFC 2045 - I. The base64 encoding is designed to represent -arbitrary sequences of octets in a form that need not be humanly -readable. A 65-character subset ([A-Za-z0-9+/=]) of US-ASCII is used, -enabling 6 bits to be represented per printable character. - -The following primary functions are provided: - -=over 4 - -=item encode_base64( $bytes ) - -=item encode_base64( $bytes, $eol ); - -Encode data by calling the encode_base64() function. The first -argument is the byte string to encode. The second argument is the -line-ending sequence to use. It is optional and defaults to "\n". The -returned encoded string is broken into lines of no more than 76 -characters each and it will end with $eol unless it is empty. Pass an -empty string as second argument if you do not want the encoded string -to be broken into lines. - -The function will croak with "Wide character in subroutine entry" if $bytes -contains characters with code above 255. The base64 encoding is only defined -for single-byte characters. Use the Encode module to select the byte encoding -you want. - -=item decode_base64( $str ) - -Decode a base64 string by calling the decode_base64() function. This -function takes a single argument which is the string to decode and -returns the decoded data. - -Any character not part of the 65-character base64 subset is -silently ignored. Characters occurring after a '=' padding character -are never decoded. - -=back - -If you prefer not to import these routines into your namespace, you can -call them as: - - use MIME::Base64 (); - $encoded = MIME::Base64::encode($decoded); - $decoded = MIME::Base64::decode($encoded); - -Additional functions not exported by default: - -=over 4 - -=item encode_base64url( $bytes ) - -=item decode_base64url( $str ) - -Encode and decode according to the base64 scheme for "URL applications" [1]. -This is a variant of the base64 encoding which does not use padding, does not -break the string into multiple lines and use the characters "-" and "_" instead -of "+" and "/" to avoid using reserved URL characters. - -=item encoded_base64_length( $bytes ) - -=item encoded_base64_length( $bytes, $eol ) - -Returns the length that the encoded string would have without actually -encoding it. This will return the same value as C<< length(encode_base64($bytes)) >>, -but should be more efficient. - -=item decoded_base64_length( $str ) - -Returns the length that the decoded string would have without actually -decoding it. This will return the same value as C<< length(decode_base64($str)) >>, -but should be more efficient. - -=back - -=head1 EXAMPLES - -If you want to encode a large file, you should encode it in chunks -that are a multiple of 57 bytes. This ensures that the base64 lines -line up and that you do not end up with padding in the middle. 57 -bytes of data fills one complete base64 line (76 == 57*4/3): - - use MIME::Base64 qw(encode_base64); - - open(FILE, "/var/log/wtmp") or die "$!"; - while (read(FILE, $buf, 60*57)) { - print encode_base64($buf); - } - -or if you know you have enough memory - - use MIME::Base64 qw(encode_base64); - local($/) = undef; # slurp - print encode_base64(); - -The same approach as a command line: - - perl -MMIME::Base64 -0777 -ne 'print encode_base64($_)' and Joerg Reichelt and -code posted to comp.lang.perl <3pd2lp$6gf@wsinti07.win.tue.nl> by Hans -Mulder - -The XS implementation uses code from metamail. Copyright 1991 Bell -Communications Research, Inc. (Bellcore) - -=head1 SEE ALSO - -L - -[1] L - -=cut diff --git a/gnu/usr.bin/perl/cpan/MIME-Base64/Base64.xs b/gnu/usr.bin/perl/cpan/MIME-Base64/Base64.xs index 903aa211c10..308a75b0388 100644 --- a/gnu/usr.bin/perl/cpan/MIME-Base64/Base64.xs +++ b/gnu/usr.bin/perl/cpan/MIME-Base64/Base64.xs @@ -25,16 +25,10 @@ metamail, which comes with this message: */ -#ifdef __cplusplus -extern "C" { -#endif #define PERL_NO_GET_CONTEXT /* we want efficiency */ #include "EXTERN.h" #include "perl.h" #include "XSUB.h" -#ifdef __cplusplus -} -#endif #define MAX_LINE 76 /* size of encoded lines */ diff --git a/gnu/usr.bin/perl/cpan/MIME-Base64/QuotedPrint.pm b/gnu/usr.bin/perl/cpan/MIME-Base64/QuotedPrint.pm deleted file mode 100644 index d0c71d10439..00000000000 --- a/gnu/usr.bin/perl/cpan/MIME-Base64/QuotedPrint.pm +++ /dev/null @@ -1,114 +0,0 @@ -package MIME::QuotedPrint; - -use strict; -use vars qw(@ISA @EXPORT $VERSION); - -require Exporter; -@ISA = qw(Exporter); -@EXPORT = qw(encode_qp decode_qp); - -$VERSION = "3.13"; - -use MIME::Base64; # will load XS version of {en,de}code_qp() - -*encode = \&encode_qp; -*decode = \&decode_qp; - -1; - -__END__ - -=head1 NAME - -MIME::QuotedPrint - Encoding and decoding of quoted-printable strings - -=head1 SYNOPSIS - - use MIME::QuotedPrint; - - $encoded = encode_qp($decoded); - $decoded = decode_qp($encoded); - -=head1 DESCRIPTION - -This module provides functions to encode and decode strings into and from the -quoted-printable encoding specified in RFC 2045 - I. The quoted-printable encoding is intended -to represent data that largely consists of bytes that correspond to -printable characters in the ASCII character set. Each non-printable -character (as defined by English Americans) is represented by a -triplet consisting of the character "=" followed by two hexadecimal -digits. - -The following functions are provided: - -=over 4 - -=item encode_qp( $str) - -=item encode_qp( $str, $eol) - -=item encode_qp( $str, $eol, $binmode ) - -This function returns an encoded version of the string ($str) given as -argument. - -The second argument ($eol) is the line-ending sequence to use. It is -optional and defaults to "\n". Every occurrence of "\n" is replaced -with this string, and it is also used for additional "soft line -breaks" to ensure that no line end up longer than 76 characters. Pass -it as "\015\012" to produce data suitable for external consumption. -The string "\r\n" produces the same result on many platforms, but not -all. - -The third argument ($binmode) will select binary mode if passed as a -TRUE value. In binary mode "\n" will be encoded in the same way as -any other non-printable character. This ensures that a decoder will -end up with exactly the same string whatever line ending sequence it -uses. In general it is preferable to use the base64 encoding for -binary data; see L. - -An $eol of "" (the empty string) is special. In this case, no "soft -line breaks" are introduced and binary mode is effectively enabled so -that any "\n" in the original data is encoded as well. - -=item decode_qp( $str ) - -This function returns the plain text version of the string given -as argument. The lines of the result are "\n" terminated, even if -the $str argument contains "\r\n" terminated lines. - -=back - - -If you prefer not to import these routines into your namespace, you can -call them as: - - use MIME::QuotedPrint (); - $encoded = MIME::QuotedPrint::encode($decoded); - $decoded = MIME::QuotedPrint::decode($encoded); - -Perl v5.8 and better allow extended Unicode characters in strings. -Such strings cannot be encoded directly, as the quoted-printable -encoding is only defined for single-byte characters. The solution is -to use the Encode module to select the byte encoding you want. For -example: - - use MIME::QuotedPrint qw(encode_qp); - use Encode qw(encode); - - $encoded = encode_qp(encode("UTF-8", "\x{FFFF}\n")); - print $encoded; - -=head1 COPYRIGHT - -Copyright 1995-1997,2002-2004 Gisle Aas. - -This library is free software; you can redistribute it and/or -modify it under the same terms as Perl itself. - -=head1 SEE ALSO - -L - -=cut diff --git a/gnu/usr.bin/perl/cpan/Math-BigInt-FastCalc/lib/Math/BigInt/FastCalc.pm b/gnu/usr.bin/perl/cpan/Math-BigInt-FastCalc/lib/Math/BigInt/FastCalc.pm index 4e903bd4f10..f20c8eb1d82 100644 --- a/gnu/usr.bin/perl/cpan/Math-BigInt-FastCalc/lib/Math/BigInt/FastCalc.pm +++ b/gnu/usr.bin/perl/cpan/Math-BigInt-FastCalc/lib/Math/BigInt/FastCalc.pm @@ -1,27 +1,88 @@ package Math::BigInt::FastCalc; -use 5.006; +use 5.006001; use strict; use warnings; +use Carp qw< carp croak >; + use Math::BigInt::Calc 1.999801; -our @ISA = qw< Math::BigInt::Calc >; +BEGIN { + our @ISA = qw< Math::BigInt::Calc >; +} + +our $VERSION = '0.5012'; + +my $MAX_EXP_F; # the maximum possible base 10 exponent with "no integer" +my $MAX_EXP_I; # the maximum possible base 10 exponent with "use integer" +my $BASE_LEN; # the current base exponent in use +my $USE_INT; # whether "use integer" is used in the computations + +sub _base_len { + my $class = shift; + + if (@_) { # if called as setter ... + my ($base_len, $use_int) = @_; + + croak "The base length must be a positive integer" + unless defined($base_len) && $base_len == int($base_len) + && $base_len > 0; + + if ( $use_int && ($base_len > $MAX_EXP_I) || + !$use_int && ($base_len > $MAX_EXP_F)) + { + croak "The maximum base length (exponent) is $MAX_EXP_I with", + " 'use integer' and $MAX_EXP_F without 'use integer'. The", + " requested settings, a base length of $base_len ", + $use_int ? "with" : "without", " 'use integer', is invalid."; + } + + return $class -> SUPER::_base_len($base_len, $use_int); + } + + return $class -> SUPER::_base_len(); +} -our $VERSION = '0.5009'; +BEGIN { + + my @params = Math::BigInt::FastCalc -> SUPER::_base_len(); + $BASE_LEN = $params[0]; + $MAX_EXP_F = $params[8]; + $MAX_EXP_I = $params[9]; + + # With quadmath support it should work with a base length of 17, because the + # maximum intermediate value used in the computations is less than 2**113. + # However, for some reason a base length of 17 doesn't work, but trial and + # error shows that a base length of 15 works for all methods except + # _is_odd() and _is_even(). These two methods determine whether the least + # significand component is odd or even by converting it to a UV and do a + # bitwise & operation. Because of this, we need to limit the base length to + # what fits inside an UV. + + require Config; + my $max_exp_i = int(8 * $Config::Config{uvsize} * log(2) / log(10)); + $MAX_EXP_I = $max_exp_i if $max_exp_i < $MAX_EXP_I; + $MAX_EXP_F = $MAX_EXP_I if $MAX_EXP_I < $MAX_EXP_F; + + ($BASE_LEN, $USE_INT) = $MAX_EXP_I > $MAX_EXP_F ? ($MAX_EXP_I, 1) + : ($MAX_EXP_F, 0); + + Math::BigInt::FastCalc -> SUPER::_base_len($BASE_LEN, $USE_INT); +} ############################################################################## # global constants, flags and accessory -# announce that we are compatible with MBI v1.83 and up -sub api_version () { 2; } +# Announce that we are compatible with MBI v1.83 and up. This method has been +# made redundant. Each backend is now a subclass of Math::BigInt::Lib, which +# provides the methods not present in the subclasses. -# use Calc to override the methods that we do not provide in XS +sub api_version () { 2; } require XSLoader; XSLoader::load(__PACKAGE__, $VERSION, Math::BigInt::Calc->_base_len()); -############################################################################## ############################################################################## 1; @@ -57,12 +118,20 @@ In order to allow for multiple big integer libraries, Math::BigInt was rewritten to use library modules for core math routines. Any module which follows the same API as this can be used instead by using the following: - use Math::BigInt lib => 'libname'; + use Math::BigInt lib => 'libname'; 'libname' is either the long name ('Math::BigInt::Pari'), or only the short version like 'Pari'. To use this library: - use Math::BigInt lib => 'FastCalc'; + use Math::BigInt lib => 'FastCalc'; + +The default behaviour is to chose the best internal representation of big +integers, but the base length used in the internal representation can be +specified explicitly. Note that this must be done before Math::BigInt is loaded. +For example, + + use Math::BigInt::FastCalc base_len => 3; + use Math::BigInt lib => 'FastCalc'; =head1 STORAGE @@ -73,25 +142,25 @@ stored in decimal form chopped into parts. The following functions are now implemented in FastCalc.xs: - _is_odd _is_even _is_one _is_zero - _is_two _is_ten - _zero _one _two _ten - _acmp _len - _inc _dec - __strip_zeros _copy + _is_odd _is_even _is_one _is_zero + _is_two _is_ten + _zero _one _two _ten + _acmp _len + _inc _dec + __strip_zeros _copy =head1 BUGS Please report any bugs or feature requests to C, or through the web interface at L -(requires login). -We will be notified, and then you'll automatically be notified of progress on -your bug as I make changes. +(requires login). We will be notified, and then you'll automatically be +notified of progress on your bug as I make changes. =head1 SUPPORT -You can find documentation for this module with the perldoc command. +After installing, you can find documentation for this module with the perldoc +command. perldoc Math::BigInt::FastCalc @@ -99,43 +168,25 @@ You can also look for information at: =over 4 -=item * RT: CPAN's request tracker +=item GitHub -L +L -=item * AnnoCPAN: Annotated CPAN documentation +=item RT: CPAN's request tracker -L +L -=item * CPAN Ratings +=item MetaCPAN -L +L -=item * Search CPAN - -L - -=item * CPAN Testers Matrix +=item CPAN Testers Matrix L -=item * The Bignum mailing list - -=over 4 - -=item * Post to mailing list - -C - -=item * View mailing list - -L +=item CPAN Ratings -=item * Subscribe/Unsubscribe - -L - -=back +L =back @@ -148,12 +199,13 @@ the same terms as Perl itself. Original math code by Mark Biggar, rewritten by Tels L in late 2000. -Separated from BigInt and shaped API with the help of John Peacock. + +Separated from Math::BigInt and shaped API with the help of John Peacock. Fixed, sped-up and enhanced by Tels http://bloodgate.com 2001-2003. Further streamlining (api_version 1 etc.) by Tels 2004-2007. -Bug-fixing by Peter John Acklam Epjacklam@online.noE 2010-2016. +Maintained by Peter John Acklam Epjacklam@gmail.comE 2010-2021. =head1 SEE ALSO diff --git a/gnu/usr.bin/perl/cpan/Math-BigInt-FastCalc/t/bigintfc.t b/gnu/usr.bin/perl/cpan/Math-BigInt-FastCalc/t/bigintfc.t index a3dd4a8d37c..a7f27729bef 100755 --- a/gnu/usr.bin/perl/cpan/Math-BigInt-FastCalc/t/bigintfc.t +++ b/gnu/usr.bin/perl/cpan/Math-BigInt-FastCalc/t/bigintfc.t @@ -1,425 +1,778 @@ -#!/usr/bin/perl -w +# -*- mode: perl; -*- + +# Test Math::BigInt::FastCalc use strict; -use Test::More tests => 359; +use warnings; + +use Test::More tests => 524; use Math::BigInt::FastCalc; -my ($BASE_LEN, undef, $AND_BITS, $XOR_BITS, $OR_BITS, $BASE_LEN_SMALL, $MAX_VAL) = - Math::BigInt::FastCalc->_base_len(); +my ($BASE_LEN, $BASE, $AND_BITS, $XOR_BITS, $OR_BITS, + $BASE_LEN_SMALL, $MAX_VAL, + $MAX_BITS, $MAX_EXP_F, $MAX_EXP_I, $USE_INT) + = Math::BigInt::Calc -> _base_len(); -print "# BASE_LEN = $BASE_LEN\n"; -print "# MAX_VAL = $MAX_VAL\n"; -print "# AND_BITS = $AND_BITS\n"; -print "# XOR_BITS = $XOR_BITS\n"; -print "# IOR_BITS = $OR_BITS\n"; +note(<<"EOF"); -# testing of Math::BigInt::FastCalc +BASE_LEN = $BASE_LEN +BASE = $BASE +MAX_VAL = $MAX_VAL +AND_BITS = $AND_BITS +XOR_BITS = $XOR_BITS +OR_BITS = $OR_BITS +MAX_EXP_F = $MAX_EXP_F +MAX_EXP_I = $MAX_EXP_I +USE_INT = $USE_INT +EOF -my $C = 'Math::BigInt::FastCalc'; # pass classname to sub's +my $LIB = 'Math::BigInt::FastCalc'; +my $REF = 'ARRAY'; # _new and _str -my $x = $C->_new("123"); my $y = $C->_new("321"); -is (ref($x),'ARRAY'); is ($C->_str($x),123); is ($C->_str($y),321); + +my $x = $LIB->_new("123"); +my $y = $LIB->_new("321"); +is(ref($x), $REF, q|ref($x) is a $REF|); +is($LIB->_str($x), 123, qq|$LIB->_str(\$x) = 123|); +is($LIB->_str($y), 321, qq|$LIB->_str(\$y) = 321|); ############################################################################### # _add, _sub, _mul, _div -is ($C->_str($C->_add($x,$y)),444); -is ($C->_str($C->_sub($x,$y)),123); -is ($C->_str($C->_mul($x,$y)),39483); -is ($C->_str($C->_div($x,$y)),123); + +is($LIB->_str($LIB->_add($x, $y)), 444, + qq|$LIB->_str($LIB->_add(\$x, \$y)) = 444|); +is($LIB->_str($LIB->_sub($x, $y)), 123, + qq|$LIB->_str($LIB->_sub(\$x, \$y)) = 123|); +is($LIB->_str($LIB->_mul($x, $y)), 39483, + qq|$LIB->_str($LIB->_mul(\$x, \$y)) = 39483|); +is($LIB->_str($LIB->_div($x, $y)), 123, + qq|$LIB->_str($LIB->_div(\$x, \$y)) = 123|); ############################################################################### # check that mul/div doesn't change $y # and returns the same reference, not something new -is ($C->_str($C->_mul($x,$y)),39483); -is ($C->_str($x),39483); is ($C->_str($y),321); - -is ($C->_str($C->_div($x,$y)),123); -is ($C->_str($x),123); is ($C->_str($y),321); -$x = $C->_new("39483"); -my ($x1,$r1) = $C->_div($x,$y); -is ("$x1","$x"); -$C->_inc($x1); -is ("$x1","$x"); -is ($C->_str($r1),'0'); - -$x = $C->_new("39483"); # reset +is($LIB->_str($LIB->_mul($x, $y)), 39483, + qq|$LIB->_str($LIB->_mul(\$x, \$y)) = 39483|); +is($LIB->_str($x), 39483, + qq|$LIB->_str(\$x) = 39483|); +is($LIB->_str($y), 321, + qq|$LIB->_str(\$y) = 321|); + +is($LIB->_str($LIB->_div($x, $y)), 123, + qq|$LIB->_str($LIB->_div(\$x, \$y)) = 123|); +is($LIB->_str($x), 123, + qq|$LIB->_str(\$x) = 123|); +is($LIB->_str($y), 321, + qq|$LIB->_str(\$y) = 321|); + +$x = $LIB->_new("39483"); +my ($x1, $r1) = $LIB->_div($x, $y); +is("$x1", "$x", q|"$x1" = "$x"|); +$LIB->_inc($x1); +is("$x1", "$x", q|"$x1" = "$x"|); +is($LIB->_str($r1), "0", qq|$LIB->_str(\$r1) = "0"|); + +$x = $LIB->_new("39483"); # reset ############################################################################### -my $z = $C->_new("2"); -is ($C->_str($C->_add($x,$z)),39485); -my ($re,$rr) = $C->_div($x,$y); -is ($C->_str($re),123); is ($C->_str($rr),2); +my $z = $LIB->_new("2"); +is($LIB->_str($LIB->_add($x, $z)), 39485, + qq|$LIB->_str($LIB->_add(\$x, \$z)) = 39485|); +my ($re, $rr) = $LIB->_div($x, $y); + +is($LIB->_str($re), 123, qq|$LIB->_str(\$re) = 123|); +is($LIB->_str($rr), 2, qq|$LIB->_str(\$rr) = 2|); # is_zero, _is_one, _one, _zero -is ($C->_is_zero($x),''); -is ($C->_is_one($x),''); -is ($C->_str($C->_zero()),"0"); -is ($C->_str($C->_one()),"1"); +ok(! $LIB->_is_zero($x), qq|$LIB->_is_zero(\$x)|); +ok(! $LIB->_is_one($x), qq|$LIB->_is_one(\$x)|); + +is($LIB->_str($LIB->_zero()), "0", qq|$LIB->_str($LIB->_zero()) = "0"|); +is($LIB->_str($LIB->_one()), "1", qq|$LIB->_str($LIB->_one()) = "1"|); # _two() and _ten() -is ($C->_str($C->_two()),"2"); -is ($C->_str($C->_ten()),"10"); -is ($C->_is_ten($C->_two()),''); -is ($C->_is_two($C->_two()),1); -is ($C->_is_ten($C->_ten()),1); -is ($C->_is_two($C->_ten()),''); -is ($C->_is_one($C->_one()),1); -is ($C->_is_one($C->_two()), ''); -is ($C->_is_one($C->_ten()), ''); +is($LIB->_str($LIB->_two()), "2", qq|$LIB->_str($LIB->_two()) = "2"|); +is($LIB->_str($LIB->_ten()), "10", qq|$LIB->_str($LIB->_ten()) = "10"|); -is ($C->_is_one($C->_zero()), ''); +ok(! $LIB->_is_ten($LIB->_two()), qq|$LIB->_is_ten($LIB->_two()) is false|); +ok( $LIB->_is_two($LIB->_two()), qq|$LIB->_is_two($LIB->_two()) is true|); +ok( $LIB->_is_ten($LIB->_ten()), qq|$LIB->_is_ten($LIB->_ten()) is true|); +ok(! $LIB->_is_two($LIB->_ten()), qq|$LIB->_is_two($LIB->_ten()) is false|); -is ($C->_is_zero($C->_zero()),1); +ok( $LIB->_is_one($LIB->_one()), qq|$LIB->_is_one($LIB->_one()) is true|); +ok(! $LIB->_is_one($LIB->_two()), qq|$LIB->_is_one($LIB->_two()) is false|); +ok(! $LIB->_is_one($LIB->_ten()), qq|$LIB->_is_one($LIB->_ten()) is false|); -is ($C->_is_zero($C->_one()), ''); +ok(! $LIB->_is_one($LIB->_zero()), qq/$LIB->_is_one($LIB->_zero()) is false/); +ok( $LIB->_is_zero($LIB->_zero()), qq|$LIB->_is_zero($LIB->_zero()) is true|); +ok(! $LIB->_is_zero($LIB->_one()), qq/$LIB->_is_zero($LIB->_one()) is false/); # is_odd, is_even -is ($C->_is_odd($C->_one()),1); is ($C->_is_odd($C->_zero()),''); -is ($C->_is_even($C->_one()), ''); is ($C->_is_even($C->_zero()),1); - -# _len -for my $method (qw/_alen _len/) - { - $x = $C->_new("1"); is ($C->$method($x),1); - $x = $C->_new("12"); is ($C->$method($x),2); - $x = $C->_new("123"); is ($C->$method($x),3); - $x = $C->_new("1234"); is ($C->$method($x),4); - $x = $C->_new("12345"); is ($C->$method($x),5); - $x = $C->_new("123456"); is ($C->$method($x),6); - $x = $C->_new("1234567"); is ($C->$method($x),7); - $x = $C->_new("12345678"); is ($C->$method($x),8); - $x = $C->_new("123456789"); is ($C->$method($x),9); - - $x = $C->_new("8"); is ($C->$method($x),1); - $x = $C->_new("21"); is ($C->$method($x),2); - $x = $C->_new("321"); is ($C->$method($x),3); - $x = $C->_new("4321"); is ($C->$method($x),4); - $x = $C->_new("54321"); is ($C->$method($x),5); - $x = $C->_new("654321"); is ($C->$method($x),6); - $x = $C->_new("7654321"); is ($C->$method($x),7); - $x = $C->_new("87654321"); is ($C->$method($x),8); - $x = $C->_new("987654321"); is ($C->$method($x),9); - - $x = $C->_new("0"); is ($C->$method($x),1); - $x = $C->_new("20"); is ($C->$method($x),2); - $x = $C->_new("320"); is ($C->$method($x),3); - $x = $C->_new("4320"); is ($C->$method($x),4); - $x = $C->_new("54320"); is ($C->$method($x),5); - $x = $C->_new("654320"); is ($C->$method($x),6); - $x = $C->_new("7654320"); is ($C->$method($x),7); - $x = $C->_new("87654320"); is ($C->$method($x),8); - $x = $C->_new("987654320"); is ($C->$method($x),9); - - for (my $i = 1; $i < 9; $i++) - { - my $a = "$i" . '0' x ($i-1); - $x = $C->_new($a); - print "# Tried len '$a'\n" unless is ($C->_len($x),$i); + +ok( $LIB->_is_odd($LIB->_one()), qq/$LIB->_is_odd($LIB->_one()) is true/); +ok(! $LIB->_is_odd($LIB->_zero()), qq/$LIB->_is_odd($LIB->_zero()) is false/); +ok(! $LIB->_is_even($LIB->_one()), qq/$LIB->_is_even($LIB->_one()) is false/); +ok( $LIB->_is_even($LIB->_zero()), qq/$LIB->_is_even($LIB->_zero()) is true/); + +# _alen and _len + +for my $method (qw/_alen _len/) { + $x = $LIB->_new("1"); + is($LIB->$method($x), 1, qq|$LIB->$method(\$x) = 1|); + $x = $LIB->_new("12"); + is($LIB->$method($x), 2, qq|$LIB->$method(\$x) = 2|); + $x = $LIB->_new("123"); + is($LIB->$method($x), 3, qq|$LIB->$method(\$x) = 3|); + $x = $LIB->_new("1234"); + is($LIB->$method($x), 4, qq|$LIB->$method(\$x) = 4|); + $x = $LIB->_new("12345"); + is($LIB->$method($x), 5, qq|$LIB->$method(\$x) = 5|); + $x = $LIB->_new("123456"); + is($LIB->$method($x), 6, qq|$LIB->$method(\$x) = 6|); + $x = $LIB->_new("1234567"); + is($LIB->$method($x), 7, qq|$LIB->$method(\$x) = 7|); + $x = $LIB->_new("12345678"); + is($LIB->$method($x), 8, qq|$LIB->$method(\$x) = 8|); + $x = $LIB->_new("123456789"); + is($LIB->$method($x), 9, qq|$LIB->$method(\$x) = 9|); + + $x = $LIB->_new("8"); + is($LIB->$method($x), 1, qq|$LIB->$method(\$x) = 1|); + $x = $LIB->_new("21"); + is($LIB->$method($x), 2, qq|$LIB->$method(\$x) = 2|); + $x = $LIB->_new("321"); + is($LIB->$method($x), 3, qq|$LIB->$method(\$x) = 3|); + $x = $LIB->_new("4321"); + is($LIB->$method($x), 4, qq|$LIB->$method(\$x) = 4|); + $x = $LIB->_new("54321"); + is($LIB->$method($x), 5, qq|$LIB->$method(\$x) = 5|); + $x = $LIB->_new("654321"); + is($LIB->$method($x), 6, qq|$LIB->$method(\$x) = 6|); + $x = $LIB->_new("7654321"); + is($LIB->$method($x), 7, qq|$LIB->$method(\$x) = 7|); + $x = $LIB->_new("87654321"); + is($LIB->$method($x), 8, qq|$LIB->$method(\$x) = 8|); + $x = $LIB->_new("987654321"); + is($LIB->$method($x), 9, qq|$LIB->$method(\$x) = 9|); + + $x = $LIB->_new("0"); + is($LIB->$method($x), 1, qq|$LIB->$method(\$x) = 1|); + $x = $LIB->_new("20"); + is($LIB->$method($x), 2, qq|$LIB->$method(\$x) = 2|); + $x = $LIB->_new("320"); + is($LIB->$method($x), 3, qq|$LIB->$method(\$x) = 3|); + $x = $LIB->_new("4320"); + is($LIB->$method($x), 4, qq|$LIB->$method(\$x) = 4|); + $x = $LIB->_new("54320"); + is($LIB->$method($x), 5, qq|$LIB->$method(\$x) = 5|); + $x = $LIB->_new("654320"); + is($LIB->$method($x), 6, qq|$LIB->$method(\$x) = 6|); + $x = $LIB->_new("7654320"); + is($LIB->$method($x), 7, qq|$LIB->$method(\$x) = 7|); + $x = $LIB->_new("87654320"); + is($LIB->$method($x), 8, qq|$LIB->$method(\$x) = 8|); + $x = $LIB->_new("987654320"); + is($LIB->$method($x), 9, qq|$LIB->$method(\$x) = 9|); + + for (my $i = 1; $i < 9; $i++) { + my $a = "$i" . '0' x ($i - 1); + $x = $LIB->_new($a); + is($LIB->_len($x), $i, qq|$LIB->_len(\$x) = $i|); } - } +} # _digit -$x = $C->_new("123456789"); -is ($C->_digit($x,0),9); -is ($C->_digit($x,1),8); -is ($C->_digit($x,2),7); -is ($C->_digit($x,-1),1); -is ($C->_digit($x,-2),2); -is ($C->_digit($x,-3),3); + +$x = $LIB->_new("123456789"); +is($LIB->_digit($x, 0), 9, qq|$LIB->_digit(\$x, 0) = 9|); +is($LIB->_digit($x, 1), 8, qq|$LIB->_digit(\$x, 1) = 8|); +is($LIB->_digit($x, 2), 7, qq|$LIB->_digit(\$x, 2) = 7|); +is($LIB->_digit($x, 8), 1, qq|$LIB->_digit(\$x, 8) = 1|); +is($LIB->_digit($x, 9), 0, qq|$LIB->_digit(\$x, 9) = 0|); +is($LIB->_digit($x, -1), 1, qq|$LIB->_digit(\$x, -1) = 1|); +is($LIB->_digit($x, -2), 2, qq|$LIB->_digit(\$x, -2) = 2|); +is($LIB->_digit($x, -3), 3, qq|$LIB->_digit(\$x, -3) = 3|); +is($LIB->_digit($x, -9), 9, qq|$LIB->_digit(\$x, -9) = 9|); +is($LIB->_digit($x, -10), 0, qq|$LIB->_digit(\$x, -10) = 0|); # _copy -foreach (qw/ 1 12 123 1234 12345 123456 1234567 12345678 123456789/) - { - $x = $C->_new("$_"); - is ($C->_str($C->_copy($x)),"$_"); - is ($C->_str($x),"$_"); # did _copy destroy original x? - } + +foreach (qw/ 1 12 123 1234 12345 123456 1234567 12345678 123456789/) { + $x = $LIB->_new("$_"); + is($LIB->_str($LIB->_copy($x)), "$_", + qq|$LIB->_str($LIB->_copy(\$x)) = "$_"|); + is($LIB->_str($x), "$_", # did _copy destroy original x? + qq|$LIB->_str(\$x) = "$_"|); +} # _zeros -$x = $C->_new("1256000000"); is ($C->_zeros($x),6); -$x = $C->_new("152"); is ($C->_zeros($x),0); -$x = $C->_new("123000"); is ($C->_zeros($x),3); -$x = $C->_new("0"); is ($C->_zeros($x),0); -# _lsft, _rsft -$x = $C->_new("10"); $y = $C->_new("3"); -is ($C->_str($C->_lsft($x,$y,10)),10000); -$x = $C->_new("20"); $y = $C->_new("3"); -is ($C->_str($C->_lsft($x,$y,10)),20000); +$x = $LIB->_new("1256000000"); +is($LIB->_zeros($x), 6, qq|$LIB->_zeros(\$x) = 6|); -$x = $C->_new("128"); $y = $C->_new("4"); -is ($C->_str($C->_lsft($x,$y,2)), 128 << 4); +$x = $LIB->_new("152"); +is($LIB->_zeros($x), 0, qq|$LIB->_zeros(\$x) = 0|); -$x = $C->_new("1000"); $y = $C->_new("3"); -is ($C->_str($C->_rsft($x,$y,10)),1); -$x = $C->_new("20000"); $y = $C->_new("3"); -is ($C->_str($C->_rsft($x,$y,10)),20); -$x = $C->_new("256"); $y = $C->_new("4"); -is ($C->_str($C->_rsft($x,$y,2)),256 >> 4); +$x = $LIB->_new("123000"); +is($LIB->_zeros($x), 3, qq|$LIB->_zeros(\$x) = 3|); -$x = $C->_new("6411906467305339182857313397200584952398"); -$y = $C->_new("45"); -is ($C->_str($C->_rsft($x,$y,10)),0); +$x = $LIB->_new("0"); +is($LIB->_zeros($x), 0, qq|$LIB->_zeros(\$x) = 0|); + +# _lsft, _rsft + +$x = $LIB->_new("10"); +$y = $LIB->_new("3"); +is($LIB->_str($LIB->_lsft($x, $y, 10)), 10000, + qq|$LIB->_str($LIB->_lsft(\$x, \$y, 10)) = 10000|); + +$x = $LIB->_new("20"); +$y = $LIB->_new("3"); +is($LIB->_str($LIB->_lsft($x, $y, 10)), 20000, + qq|$LIB->_str($LIB->_lsft(\$x, \$y, 10)) = 20000|); + +$x = $LIB->_new("128"); +$y = $LIB->_new("4"); +is($LIB->_str($LIB->_lsft($x, $y, 2)), 128 << 4, + qq|$LIB->_str($LIB->_lsft(\$x, \$y, 2)) = 128 << 4|); + +$x = $LIB->_new("1000"); +$y = $LIB->_new("3"); +is($LIB->_str($LIB->_rsft($x, $y, 10)), 1, + qq|$LIB->_str($LIB->_rsft(\$x, \$y, 10)) = 1|); + +$x = $LIB->_new("20000"); +$y = $LIB->_new("3"); +is($LIB->_str($LIB->_rsft($x, $y, 10)), 20, + qq|$LIB->_str($LIB->_rsft(\$x, \$y, 10)) = 20|); + +$x = $LIB->_new("256"); +$y = $LIB->_new("4"); +is($LIB->_str($LIB->_rsft($x, $y, 2)), 256 >> 4, + qq|$LIB->_str($LIB->_rsft(\$x, \$y, 2)) = 256 >> 4|); + +$x = $LIB->_new("6411906467305339182857313397200584952398"); +$y = $LIB->_new("45"); +is($LIB->_str($LIB->_rsft($x, $y, 10)), 0, + qq|$LIB->_str($LIB->_rsft(\$x, \$y, 10)) = 0|); + +# _lsft() with large bases + +for my $xstr ("1", "2", "3") { + for my $nstr ("1", "2", "3") { + for my $bpow (25, 50, 75) { + my $bstr = "1" . ("0" x $bpow); + my $expected = $xstr . ("0" x ($bpow * $nstr)); + my $xobj = $LIB->_new($xstr); + my $nobj = $LIB->_new($nstr); + my $bobj = $LIB->_new($bstr); + + is($LIB->_str($LIB->_lsft($xobj, $nobj, $bobj)), $expected, + qq|$LIB->_str($LIB->_lsft($LIB->_new("$xstr"), | + . qq|$LIB->_new("$nstr"), | + . qq|$LIB->_new("$bstr")))|); + is($LIB->_str($nobj), $nstr, q|$n is unmodified|); + is($LIB->_str($bobj), $bstr, q|$b is unmodified|); + } + } +} # _acmp -$x = $C->_new("123456789"); -$y = $C->_new("987654321"); -is ($C->_acmp($x,$y),-1); -is ($C->_acmp($y,$x),1); -is ($C->_acmp($x,$x),0); -is ($C->_acmp($y,$y),0); -$x = $C->_new("12"); -$y = $C->_new("12"); -is ($C->_acmp($x,$y),0); -$x = $C->_new("21"); -is ($C->_acmp($x,$y),1); -is ($C->_acmp($y,$x),-1); -$x = $C->_new("123456789"); -$y = $C->_new("1987654321"); -is ($C->_acmp($x,$y),-1); -is ($C->_acmp($y,$x),+1); - -$x = $C->_new("1234567890123456789"); -$y = $C->_new("987654321012345678"); -is ($C->_acmp($x,$y),1); -is ($C->_acmp($y,$x),-1); -is ($C->_acmp($x,$x),0); -is ($C->_acmp($y,$y),0); - -$x = $C->_new("1234"); -$y = $C->_new("987654321012345678"); -is ($C->_acmp($x,$y),-1); -is ($C->_acmp($y,$x),1); -is ($C->_acmp($x,$x),0); -is ($C->_acmp($y,$y),0); + +$x = $LIB->_new("123456789"); +$y = $LIB->_new("987654321"); +is($LIB->_acmp($x, $y), -1, qq|$LIB->_acmp(\$x, \$y) = -1|); +is($LIB->_acmp($y, $x), 1, qq|$LIB->_acmp(\$y, \$x) = 1|); +is($LIB->_acmp($x, $x), 0, qq|$LIB->_acmp(\$x, \$x) = 0|); +is($LIB->_acmp($y, $y), 0, qq|$LIB->_acmp(\$y, \$y) = 0|); +$x = $LIB->_new("12"); +$y = $LIB->_new("12"); +is($LIB->_acmp($x, $y), 0, qq|$LIB->_acmp(\$x, \$y) = 0|); +$x = $LIB->_new("21"); +is($LIB->_acmp($x, $y), 1, qq|$LIB->_acmp(\$x, \$y) = 1|); +is($LIB->_acmp($y, $x), -1, qq|$LIB->_acmp(\$y, \$x) = -1|); +$x = $LIB->_new("123456789"); +$y = $LIB->_new("1987654321"); +is($LIB->_acmp($x, $y), -1, qq|$LIB->_acmp(\$x, \$y) = -1|); +is($LIB->_acmp($y, $x), +1, qq|$LIB->_acmp(\$y, \$x) = +1|); + +$x = $LIB->_new("1234567890123456789"); +$y = $LIB->_new("987654321012345678"); +is($LIB->_acmp($x, $y), 1, qq|$LIB->_acmp(\$x, \$y) = 1|); +is($LIB->_acmp($y, $x), -1, qq|$LIB->_acmp(\$y, \$x) = -1|); +is($LIB->_acmp($x, $x), 0, qq|$LIB->_acmp(\$x, \$x) = 0|); +is($LIB->_acmp($y, $y), 0, qq|$LIB->_acmp(\$y, \$y) = 0|); + +$x = $LIB->_new("1234"); +$y = $LIB->_new("987654321012345678"); +is($LIB->_acmp($x, $y), -1, qq|$LIB->_acmp(\$x, \$y) = -1|); +is($LIB->_acmp($y, $x), 1, qq|$LIB->_acmp(\$y, \$x) = 1|); +is($LIB->_acmp($x, $x), 0, qq|$LIB->_acmp(\$x, \$x) = 0|); +is($LIB->_acmp($y, $y), 0, qq|$LIB->_acmp(\$y, \$y) = 0|); # _modinv -$x = $C->_new("8"); -$y = $C->_new("5033"); -my ($xmod,$sign) = $C->_modinv($x,$y); -is ($C->_str($xmod),'629'); # -629 % 5033 == 4404 -is ($sign, '-'); + +$x = $LIB->_new("8"); +$y = $LIB->_new("5033"); +my ($xmod, $sign) = $LIB->_modinv($x, $y); +is($LIB->_str($xmod), "629", # -629 % 5033 == 4404 + qq|$LIB->_str(\$xmod) = "629"|); +is($sign, "-", q|$sign = "-"|); # _div -$x = $C->_new("3333"); $y = $C->_new("1111"); -is ($C->_str(scalar $C->_div($x,$y)),3); -$x = $C->_new("33333"); $y = $C->_new("1111"); ($x,$y) = $C->_div($x,$y); -is ($C->_str($x),30); is ($C->_str($y),3); -$x = $C->_new("123"); $y = $C->_new("1111"); -($x,$y) = $C->_div($x,$y); is ($C->_str($x),0); is ($C->_str($y),123); -# _num -foreach (qw/1 12 123 1234 12345 1234567 12345678 123456789 1234567890/) - { - $x = $C->_new("$_"); - is (ref($x),'ARRAY'); is ($C->_str($x),"$_"); - $x = $C->_num($x); is (ref($x),''); is ($x,$_); - } +$x = $LIB->_new("3333"); +$y = $LIB->_new("1111"); +is($LIB->_str(scalar($LIB->_div($x, $y))), 3, + qq|$LIB->_str(scalar($LIB->_div(\$x, \$y))) = 3|); -# _sqrt -$x = $C->_new("144"); is ($C->_str($C->_sqrt($x)),'12'); -$x = $C->_new("144000000000000"); is ($C->_str($C->_sqrt($x)),'12000000'); +$x = $LIB->_new("33333"); +$y = $LIB->_new("1111"); +($x, $y) = $LIB->_div($x, $y); +is($LIB->_str($x), 30, qq|$LIB->_str(\$x) = 30|); +is($LIB->_str($y), 3, qq|$LIB->_str(\$y) = 3|); -# _root -$x = $C->_new("81"); my $n = $C->_new("3"); # 4*4*4 = 64, 5*5*5 = 125 -is ($C->_str($C->_root($x,$n)),'4'); # 4.xx => 4.0 -$x = $C->_new("81"); $n = $C->_new("4"); # 3*3*3*3 == 81 -is ($C->_str($C->_root($x,$n)),'3'); +$x = $LIB->_new("123"); +$y = $LIB->_new("1111"); +($x, $y) = $LIB->_div($x, $y); +is($LIB->_str($x), 0, qq|$LIB->_str(\$x) = 0|); +is($LIB->_str($y), 123, qq|$LIB->_str(\$y) = 123|); -# _pow (and _root) -$x = $C->_new("0"); $n = $C->_new("3"); # 0 ** y => 0 -is ($C->_str($C->_pow($x,$n)), 0); -$x = $C->_new("3"); $n = $C->_new("0"); # x ** 0 => 1 -is ($C->_str($C->_pow($x,$n)), 1); -$x = $C->_new("1"); $n = $C->_new("3"); # 1 ** y => 1 -is ($C->_str($C->_pow($x,$n)), 1); -$x = $C->_new("5"); $n = $C->_new("1"); # x ** 1 => x -is ($C->_str($C->_pow($x,$n)), 5); +# _num + +foreach (qw/1 12 123 1234 12345 1234567 12345678 123456789 1234567890/) { -$x = $C->_new("81"); $n = $C->_new("3"); # 81 ** 3 == 531441 -is ($C->_str($C->_pow($x,$n)),81 ** 3); + $x = $LIB->_new("$_"); + is(ref($x), $REF, q|ref($x) = "$REF"|); + is($LIB->_str($x), "$_", qq|$LIB->_str(\$x) = "$_"|); -is ($C->_str($C->_root($x,$n)),81); + $x = $LIB->_num($x); + is(ref($x), "", q|ref($x) = ""|); + is($x, $_, qq|\$x = $_|); +} -$x = $C->_new("81"); -is ($C->_str($C->_pow($x,$n)),81 ** 3); -is ($C->_str($C->_pow($x,$n)),'150094635296999121'); # 531441 ** 3 == +# _sqrt -is ($C->_str($C->_root($x,$n)),'531441'); -is ($C->_str($C->_root($x,$n)),'81'); +$x = $LIB->_new("144"); +is($LIB->_str($LIB->_sqrt($x)), "12", + qq|$LIB->_str($LIB->_sqrt(\$x)) = "12"|); +$x = $LIB->_new("144000000000000"); +is($LIB->_str($LIB->_sqrt($x)), "12000000", + qq|$LIB->_str($LIB->_sqrt(\$x)) = "12000000"|); -$x = $C->_new("81"); $n = $C->_new("14"); -is ($C->_str($C->_pow($x,$n)),'523347633027360537213511521'); -is ($C->_str($C->_root($x,$n)),'81'); +# _root -$x = $C->_new("523347633027360537213511520"); -is ($C->_str($C->_root($x,$n)),'80'); +$x = $LIB->_new("81"); +my $n = $LIB->_new("3"); # 4*4*4 = 64, 5*5*5 = 125 +is($LIB->_str($LIB->_root($x, $n)), "4", + qq|$LIB->_str($LIB->_root(\$x, \$n)) = "4"|); # 4.xx => 4.0 -$x = $C->_new("523347633027360537213511522"); -is ($C->_str($C->_root($x,$n)),'81'); +$x = $LIB->_new("81"); +$n = $LIB->_new("4"); # 3*3*3*3 == 81 +is($LIB->_str($LIB->_root($x, $n)), "3", + qq|$LIB->_str($LIB->_root(\$x, \$n)) = "3"|); + +# _pow (and _root) -my $res = [ qw/ 9 31 99 316 999 3162 9999/ ]; +$x = $LIB->_new("0"); +$n = $LIB->_new("3"); # 0 ** y => 0 +is($LIB->_str($LIB->_pow($x, $n)), 0, + qq|$LIB->_str($LIB->_pow(\$x, \$n)) = 0|); + +$x = $LIB->_new("3"); +$n = $LIB->_new("0"); # x ** 0 => 1 +is($LIB->_str($LIB->_pow($x, $n)), 1, + qq|$LIB->_str($LIB->_pow(\$x, \$n)) = 1|); + +$x = $LIB->_new("1"); +$n = $LIB->_new("3"); # 1 ** y => 1 +is($LIB->_str($LIB->_pow($x, $n)), 1, + qq|$LIB->_str($LIB->_pow(\$x, \$n)) = 1|); + +$x = $LIB->_new("5"); +$n = $LIB->_new("1"); # x ** 1 => x +is($LIB->_str($LIB->_pow($x, $n)), 5, + qq|$LIB->_str($LIB->_pow(\$x, \$n)) = 5|); + +$x = $LIB->_new("81"); +$n = $LIB->_new("3"); # 81 ** 3 == 531441 +is($LIB->_str($LIB->_pow($x, $n)), 81 ** 3, + qq|$LIB->_str($LIB->_pow(\$x, \$n)) = 81 ** 3|); + +is($LIB->_str($LIB->_root($x, $n)), 81, + qq|$LIB->_str($LIB->_root(\$x, \$n)) = 81|); + +$x = $LIB->_new("81"); +is($LIB->_str($LIB->_pow($x, $n)), 81 ** 3, + qq|$LIB->_str($LIB->_pow(\$x, \$n)) = 81 ** 3|); +is($LIB->_str($LIB->_pow($x, $n)), "150094635296999121", # 531441 ** 3 + qq|$LIB->_str($LIB->_pow(\$x, \$n)) = "150094635296999121"|); + +is($LIB->_str($LIB->_root($x, $n)), "531441", + qq|$LIB->_str($LIB->_root(\$x, \$n)) = "531441"|); +is($LIB->_str($LIB->_root($x, $n)), "81", + qq|$LIB->_str($LIB->_root(\$x, \$n)) = "81"|); + +$x = $LIB->_new("81"); +$n = $LIB->_new("14"); +is($LIB->_str($LIB->_pow($x, $n)), "523347633027360537213511521", + qq|$LIB->_str($LIB->_pow(\$x, \$n)) = "523347633027360537213511521"|); +is($LIB->_str($LIB->_root($x, $n)), "81", + qq|$LIB->_str($LIB->_root(\$x, \$n)) = "81"|); + +$x = $LIB->_new("523347633027360537213511520"); +is($LIB->_str($LIB->_root($x, $n)), "80", + qq|$LIB->_str($LIB->_root(\$x, \$n)) = "80"|); + +$x = $LIB->_new("523347633027360537213511522"); +is($LIB->_str($LIB->_root($x, $n)), "81", + qq|$LIB->_str($LIB->_root(\$x, \$n)) = "81"|); + +my $res = [ qw/9 31 99 316 999 3162 9999 31622 99999/ ]; # 99 ** 2 = 9801, 999 ** 2 = 998001 etc -for my $i (2 .. 9) - { - $x = '9' x $i; $x = $C->_new($x); - $n = $C->_new("2"); - my $rc = '9' x ($i-1). '8' . '0' x ($i-1) . '1'; - print "# _pow( ", '9' x $i, ", 2) \n" unless - is ($C->_str($C->_pow($x,$n)),$rc); - - if ($i <= 7) - { - $x = '9' x $i; $x = $C->_new($x); - $n = '9' x $i; $n = $C->_new($n); - print "# _root( ", '9' x $i, ", ", 9 x $i, ") \n" unless - is ($C->_str($C->_root($x,$n)),'1'); - - $x = '9' x $i; $x = $C->_new($x); - $n = $C->_new("2"); - print "# _root( ", '9' x $i, ", ", 9 x $i, ") \n" unless - is ($C->_str($C->_root($x,$n)), $res->[$i-2]); + +for my $i (2 .. 9) { + $x = '9' x $i; + $x = $LIB->_new($x); + $n = $LIB->_new("2"); + my $rc = '9' x ($i-1). '8' . '0' x ($i - 1) . '1'; + print "# _pow( ", '9' x $i, ", 2) \n" unless + is($LIB->_str($LIB->_pow($x, $n)), $rc, + qq|$LIB->_str($LIB->_pow(\$x, \$n)) = $rc|); + + SKIP: { + # If $i > $BASE_LEN, the test takes a really long time. + skip "$i > $BASE_LEN", 2 unless $i <= $BASE_LEN; + + $x = '9' x $i; + $x = $LIB->_new($x); + $n = '9' x $i; + $n = $LIB->_new($n); + print "# _root( ", '9' x $i, ", ", 9 x $i, ") \n"; + print "# _root( ", '9' x $i, ", ", 9 x $i, ") \n" + unless is($LIB->_str($LIB->_root($x, $n)), '1', + qq|$LIB->_str($LIB->_root(\$x, \$n)) = '1'|); + + $x = '9' x $i; + $x = $LIB->_new($x); + $n = $LIB->_new("2"); + print "# BASE_LEN $BASE_LEN _root( ", '9' x $i, ", ", 9 x $i, ") \n" + unless is($LIB->_str($LIB->_root($x, $n)), $res->[$i-2], + qq|$LIB->_str($LIB->_root(\$x, \$n)) = $res->[$i-2]|); } - } +} ############################################################################## # _fac -$x = $C->_new("0"); is ($C->_str($C->_fac($x)),'1'); -$x = $C->_new("1"); is ($C->_str($C->_fac($x)),'1'); -$x = $C->_new("2"); is ($C->_str($C->_fac($x)),'2'); -$x = $C->_new("3"); is ($C->_str($C->_fac($x)),'6'); -$x = $C->_new("4"); is ($C->_str($C->_fac($x)),'24'); -$x = $C->_new("5"); is ($C->_str($C->_fac($x)),'120'); -$x = $C->_new("10"); is ($C->_str($C->_fac($x)),'3628800'); -$x = $C->_new("11"); is ($C->_str($C->_fac($x)),'39916800'); -$x = $C->_new("12"); is ($C->_str($C->_fac($x)),'479001600'); -$x = $C->_new("13"); is ($C->_str($C->_fac($x)),'6227020800'); + +$x = $LIB->_new("0"); +is($LIB->_str($LIB->_fac($x)), "1", + qq|$LIB->_str($LIB->_fac(\$x)) = "1"|); + +$x = $LIB->_new("1"); +is($LIB->_str($LIB->_fac($x)), "1", + qq|$LIB->_str($LIB->_fac(\$x)) = "1"|); + +$x = $LIB->_new("2"); +is($LIB->_str($LIB->_fac($x)), "2", + qq|$LIB->_str($LIB->_fac(\$x)) = "2"|); + +$x = $LIB->_new("3"); +is($LIB->_str($LIB->_fac($x)), "6", + qq|$LIB->_str($LIB->_fac(\$x)) = "6"|); + +$x = $LIB->_new("4"); +is($LIB->_str($LIB->_fac($x)), "24", + qq|$LIB->_str($LIB->_fac(\$x)) = "24"|); + +$x = $LIB->_new("5"); +is($LIB->_str($LIB->_fac($x)), "120", + qq|$LIB->_str($LIB->_fac(\$x)) = "120"|); + +$x = $LIB->_new("10"); +is($LIB->_str($LIB->_fac($x)), "3628800", + qq|$LIB->_str($LIB->_fac(\$x)) = "3628800"|); + +$x = $LIB->_new("11"); +is($LIB->_str($LIB->_fac($x)), "39916800", + qq|$LIB->_str($LIB->_fac(\$x)) = "39916800"|); + +$x = $LIB->_new("12"); +is($LIB->_str($LIB->_fac($x)), "479001600", + qq|$LIB->_str($LIB->_fac(\$x)) = "479001600"|); + +$x = $LIB->_new("13"); +is($LIB->_str($LIB->_fac($x)), "6227020800", + qq|$LIB->_str($LIB->_fac(\$x)) = "6227020800"|); # test that _fac modifies $x in place for small arguments -$x = $C->_new("3"); $C->_fac($x); is ($C->_str($x),'6'); -$x = $C->_new("13"); $C->_fac($x); is ($C->_str($x),'6227020800'); -############################################################################## +$x = $LIB->_new("3"); +$LIB->_fac($x); +is($LIB->_str($x), "6", + qq|$LIB->_str(\$x) = "6"|); + +$x = $LIB->_new("13"); +$LIB->_fac($x); +is($LIB->_str($x), "6227020800", + qq|$LIB->_str(\$x) = "6227020800"|); + # _inc and _dec -foreach (qw/1 11 121 1231 12341 1234561 12345671 123456781 1234567891/) - { - $x = $C->_new("$_"); $C->_inc($x); - print "# \$x = ",$C->_str($x),"\n" - unless is ($C->_str($x),substr($_,0,length($_)-1) . '2'); - $C->_dec($x); is ($C->_str($x),$_); - } -foreach (qw/19 119 1219 12319 1234519 12345619 123456719 1234567819/) - { - $x = $C->_new("$_"); $C->_inc($x); - print "# \$x = ",$C->_str($x),"\n" - unless is ($C->_str($x),substr($_,0,length($_)-2) . '20'); - $C->_dec($x); is ($C->_str($x),$_); - } -foreach (qw/999 9999 99999 9999999 99999999 999999999 9999999999 99999999999/) - { - $x = $C->_new("$_"); $C->_inc($x); - print "# \$x = ",$C->_str($x),"\n" - unless is ($C->_str($x), '1' . '0' x (length($_))); - $C->_dec($x); is ($C->_str($x),$_); - } - -$x = $C->_new("1000"); $C->_inc($x); is ($C->_str($x),'1001'); -$C->_dec($x); is ($C->_str($x),'1000'); - -my $BL = $C -> _base_len(); + +for (qw/1 11 121 1231 12341 1234561 12345671 123456781 1234567891/) { + $x = $LIB->_new("$_"); + $LIB->_inc($x); + my $expected = substr($_, 0, length($_) - 1) . '2'; + is($LIB->_str($x), $expected, qq|$LIB->_str(\$x) = $expected|); + $LIB->_dec($x); + is($LIB->_str($x), $_, qq|$LIB->_str(\$x) = $_|); +} + +for (qw/19 119 1219 12319 1234519 12345619 123456719 1234567819/) { + $x = $LIB->_new("$_"); + $LIB->_inc($x); + my $expected = substr($_, 0, length($_)-2) . '20'; + is($LIB->_str($x), $expected, qq|$LIB->_str(\$x) = $expected|); + $LIB->_dec($x); + is($LIB->_str($x), $_, qq|$LIB->_str(\$x) = $_|); +} + +for (1 .. 20) { + my $p = "9" x $_; # = $q - 1 + my $q = "1" . ("0" x $_); # = $p + 1 + + $x = $LIB->_new("$p"); + $LIB->_inc($x); + is($LIB->_str($x), $q, qq|\$x = $LIB->_new("$p"); $LIB->_inc()|); + + $x = $LIB->_new("$q"); + $LIB->_dec($x); + is($LIB->_str($x), $p, qq|\$x = $LIB->_new("$q"); $LIB->_dec()|); +} + +for (1 .. 20) { + my $p = "1" . ("0" x $_); # = $q - 1 + my $q = "1" . ("0" x ($_ - 1)) . "1"; # = $p + 1 + + $x = $LIB->_new("$p"); + $LIB->_inc($x); + is($LIB->_str($x), $q, qq|\$x = $LIB->_new("$p"); $LIB->_inc()|); + + $x = $LIB->_new("$q"); + $LIB->_dec($x); + is($LIB->_str($x), $p, qq|\$x = $LIB->_new("$q"); $LIB->_dec()|); +} + +$x = $LIB->_new("1000"); +$LIB->_inc($x); +is($LIB->_str($x), "1001", qq|$LIB->_str(\$x) = "1001"|); +$LIB->_dec($x); +is($LIB->_str($x), "1000", qq|$LIB->_str(\$x) = "1000"|); + +my $BL = $LIB -> _base_len(); $x = '1' . '0' x $BL; -$z = '1' . '0' x ($BL-1); $z .= '1'; -$x = $C->_new($x); $C->_inc($x); is ($C->_str($x),$z); +$z = '1' . '0' x ($BL - 1); +$z .= '1'; +$x = $LIB->_new($x); +$LIB->_inc($x); +is($LIB->_str($x), $z, qq|$LIB->_str(\$x) = $z|); -$x = '1' . '0' x $BL; $z = '9' x $BL; -$x = $C->_new($x); $C->_dec($x); is ($C->_str($x),$z); +$x = '1' . '0' x $BL; +$z = '9' x $BL; +$x = $LIB->_new($x); +$LIB->_dec($x); +is($LIB->_str($x), $z, qq|$LIB->_str(\$x) = $z|); # should not happen: -# $x = $C->_new("-2"); $y = $C->_new("4"); is ($C->_acmp($x,$y),-1); +# $x = $LIB->_new("-2"); +# $y = $LIB->_new("4"); +# is($LIB->_acmp($x, $y), -1, qq|$LIB->_acmp($x, $y) = -1|); ############################################################################### # _mod -$x = $C->_new("1000"); $y = $C->_new("3"); -is ($C->_str(scalar $C->_mod($x,$y)),1); -$x = $C->_new("1000"); $y = $C->_new("2"); -is ($C->_str(scalar $C->_mod($x,$y)),0); + +$x = $LIB->_new("1000"); +$y = $LIB->_new("3"); +is($LIB->_str(scalar($LIB->_mod($x, $y))), 1, + qq|$LIB->_str(scalar($LIB->_mod(\$x, \$y))) = 1|); + +$x = $LIB->_new("1000"); +$y = $LIB->_new("2"); +is($LIB->_str(scalar($LIB->_mod($x, $y))), 0, + qq|$LIB->_str(scalar($LIB->_mod(\$x, \$y))) = 0|); # _and, _or, _xor -$x = $C->_new("5"); $y = $C->_new("2"); -is ($C->_str(scalar $C->_xor($x,$y)),7); -$x = $C->_new("5"); $y = $C->_new("2"); -is ($C->_str(scalar $C->_or($x,$y)),7); -$x = $C->_new("5"); $y = $C->_new("3"); -is ($C->_str(scalar $C->_and($x,$y)),1); + +$x = $LIB->_new("5"); +$y = $LIB->_new("2"); +is($LIB->_str(scalar($LIB->_xor($x, $y))), 7, + qq|$LIB->_str(scalar($LIB->_xor(\$x, \$y))) = 7|); + +$x = $LIB->_new("5"); +$y = $LIB->_new("2"); +is($LIB->_str(scalar($LIB->_or($x, $y))), 7, + qq|$LIB->_str(scalar($LIB->_or(\$x, \$y))) = 7|); + +$x = $LIB->_new("5"); +$y = $LIB->_new("3"); +is($LIB->_str(scalar($LIB->_and($x, $y))), 1, + qq|$LIB->_str(scalar($LIB->_and(\$x, \$y))) = 1|); # _from_hex, _from_bin, _from_oct -is ($C->_str( $C->_from_hex("0xFf")),255); -is ($C->_str( $C->_from_bin("0b10101011")),160+11); -is ($C->_str( $C->_from_oct("0100")), 8*8); -is ($C->_str( $C->_from_oct("01000")), 8*8*8); -is ($C->_str( $C->_from_oct("010001")), 8*8*8*8+1); -is ($C->_str( $C->_from_oct("010007")), 8*8*8*8+7); + +is($LIB->_str($LIB->_from_hex("0xFf")), 255, + qq|$LIB->_str($LIB->_from_hex("0xFf")) = 255|); +is($LIB->_str($LIB->_from_bin("0b10101011")), 160+11, + qq|$LIB->_str($LIB->_from_bin("0b10101011")) = 160+11|); +is($LIB->_str($LIB->_from_oct("0100")), 8*8, + qq|$LIB->_str($LIB->_from_oct("0100")) = 8*8|); +is($LIB->_str($LIB->_from_oct("01000")), 8*8*8, + qq|$LIB->_str($LIB->_from_oct("01000")) = 8*8*8|); +is($LIB->_str($LIB->_from_oct("010001")), 8*8*8*8+1, + qq|$LIB->_str($LIB->_from_oct("010001")) = 8*8*8*8+1|); +is($LIB->_str($LIB->_from_oct("010007")), 8*8*8*8+7, + qq|$LIB->_str($LIB->_from_oct("010007")) = 8*8*8*8+7|); # _as_hex, _as_bin, as_oct -is ($C->_str( $C->_from_hex( $C->_as_hex( $C->_new("128")))), 128); -is ($C->_str( $C->_from_bin( $C->_as_bin( $C->_new("128")))), 128); -is ($C->_str( $C->_from_oct( $C->_as_oct( $C->_new("128")))), 128); -is ($C->_str( $C->_from_oct( $C->_as_oct( $C->_new("123456")))), 123456); -is ($C->_str( $C->_from_oct( $C->_as_oct( $C->_new("123456789")))), "123456789"); -is ($C->_str( $C->_from_oct( $C->_as_oct( $C->_new("1234567890123")))), "1234567890123"); +is($LIB->_str($LIB->_from_hex($LIB->_as_hex($LIB->_new("128")))), 128, + qq|$LIB->_str($LIB->_from_hex($LIB->_as_hex(| + . qq|$LIB->_new("128")))) = 128|); +is($LIB->_str($LIB->_from_bin($LIB->_as_bin($LIB->_new("128")))), 128, + qq|$LIB->_str($LIB->_from_bin($LIB->_as_bin(| + . qq|$LIB->_new("128")))) = 128|); +is($LIB->_str($LIB->_from_oct($LIB->_as_oct($LIB->_new("128")))), 128, + qq|$LIB->_str($LIB->_from_oct($LIB->_as_oct(| + . qq|$LIB->_new("128")))) = 128|); + +is($LIB->_str($LIB->_from_oct($LIB->_as_oct($LIB->_new("123456")))), + 123456, + qq|$LIB->_str($LIB->_from_oct($LIB->_as_oct| + . qq|($LIB->_new("123456")))) = 123456|); +is($LIB->_str($LIB->_from_oct($LIB->_as_oct($LIB->_new("123456789")))), + "123456789", + qq|$LIB->_str($LIB->_from_oct($LIB->_as_oct(| + . qq|$LIB->_new("123456789")))) = "123456789"|); +is($LIB->_str($LIB->_from_oct($LIB->_as_oct($LIB->_new("1234567890123")))), + "1234567890123", + qq|$LIB->_str($LIB->_from_oct($LIB->_as_oct(| + . qq|$LIB->_new("1234567890123")))) = "1234567890123"|); + +my $long = "123456789012345678901234567890"; +is($LIB->_str($LIB->_from_hex($LIB->_as_hex($LIB->_new($long)))), $long, + qq|$LIB->_str($LIB->_from_hex($LIB->_as_hex(| + . qq|$LIB->_new("$long")))) = "$long"|); +is($LIB->_str($LIB->_from_bin($LIB->_as_bin($LIB->_new($long)))), $long, + qq|$LIB->_str($LIB->_from_bin($LIB->_as_bin(| + . qq|$LIB->_new("$long")))) = "$long"|); +is($LIB->_str($LIB->_from_oct($LIB->_as_oct($LIB->_new($long)))), $long, + qq|$LIB->_str($LIB->_from_oct($LIB->_as_oct(| + . qq|$LIB->_new("$long")))) = "$long"|); + +is($LIB->_str($LIB->_from_hex($LIB->_as_hex($LIB->_new("0")))), 0, + qq|$LIB->_str($LIB->_from_hex($LIB->_as_hex(| + . qq|$LIB->_new("0")))) = 0|); +is($LIB->_str($LIB->_from_bin($LIB->_as_bin($LIB->_new("0")))), 0, + qq|$LIB->_str($LIB->_from_bin($LIB->_as_bin(| + . qq|$LIB->_new("0")))) = 0|); +is($LIB->_str($LIB->_from_oct($LIB->_as_oct($LIB->_new("0")))), 0, + qq|$LIB->_str($LIB->_from_oct($LIB->_as_oct(| + . qq|$LIB->_new("0")))) = 0|); + +is($LIB->_as_hex($LIB->_new("0")), "0x0", + qq|$LIB->_as_hex($LIB->_new("0")) = "0x0"|); +is($LIB->_as_bin($LIB->_new("0")), "0b0", + qq|$LIB->_as_bin($LIB->_new("0")) = "0b0"|); +is($LIB->_as_oct($LIB->_new("0")), "00", + qq|$LIB->_as_oct($LIB->_new("0")) = "00"|); + +is($LIB->_as_hex($LIB->_new("12")), "0xc", + qq|$LIB->_as_hex($LIB->_new("12")) = "0xc"|); +is($LIB->_as_bin($LIB->_new("12")), "0b1100", + qq|$LIB->_as_bin($LIB->_new("12")) = "0b1100"|); +is($LIB->_as_oct($LIB->_new("64")), "0100", + qq|$LIB->_as_oct($LIB->_new("64")) = "0100"|); # _1ex -is ($C->_str($C->_1ex(0)), "1"); -is ($C->_str($C->_1ex(1)), "10"); -is ($C->_str($C->_1ex(2)), "100"); -is ($C->_str($C->_1ex(12)), "1000000000000"); -is ($C->_str($C->_1ex(16)), "10000000000000000"); + +is($LIB->_str($LIB->_1ex(0)), "1", + qq|$LIB->_str($LIB->_1ex(0)) = "1"|); +is($LIB->_str($LIB->_1ex(1)), "10", + qq|$LIB->_str($LIB->_1ex(1)) = "10"|); +is($LIB->_str($LIB->_1ex(2)), "100", + qq|$LIB->_str($LIB->_1ex(2)) = "100"|); +is($LIB->_str($LIB->_1ex(12)), "1000000000000", + qq|$LIB->_str($LIB->_1ex(12)) = "1000000000000"|); +is($LIB->_str($LIB->_1ex(16)), "10000000000000000", + qq|$LIB->_str($LIB->_1ex(16)) = "10000000000000000"|); # _check -$x = $C->_new("123456789"); -is ($C->_check($x),0); -is ($C->_check(123),'123 is not a reference'); + +$x = $LIB->_new("123456789"); +is($LIB->_check($x), 0, + qq|$LIB->_check(\$x) = 0|); +is($LIB->_check(123), "123 is not a reference", + qq|$LIB->_check(123) = "123 is not a reference"|); ############################################################################### # __strip_zeros { - no strict 'refs'; - # correct empty arrays - $x = &{$C."::__strip_zeros"}([]); is (@$x,1); is ($x->[0],0); - # don't strip single elements - $x = &{$C."::__strip_zeros"}([0]); is (@$x,1); is ($x->[0],0); - $x = &{$C."::__strip_zeros"}([1]); is (@$x,1); is ($x->[0],1); - # don't strip non-zero elements - $x = &{$C."::__strip_zeros"}([0,1]); - is (@$x,2); is ($x->[0],0); is ($x->[1],1); - $x = &{$C."::__strip_zeros"}([0,1,2]); - is (@$x,3); is ($x->[0],0); is ($x->[1],1); is ($x->[2],2); - - # but strip leading zeros - $x = &{$C."::__strip_zeros"}([0,1,2,0]); - is (@$x,3); is ($x->[0],0); is ($x->[1],1); is ($x->[2],2); - - $x = &{$C."::__strip_zeros"}([0,1,2,0,0]); - is (@$x,3); is ($x->[0],0); is ($x->[1],1); is ($x->[2],2); - - $x = &{$C."::__strip_zeros"}([0,1,2,0,0,0]); - is (@$x,3); is ($x->[0],0); is ($x->[1],1); is ($x->[2],2); - - # collapse multiple zeros - $x = &{$C."::__strip_zeros"}([0,0,0,0]); - is (@$x,1); is ($x->[0],0); + no strict 'refs'; + + # correct empty arrays + $x = &{$LIB."::__strip_zeros"}([]); + is(@$x, 1, q|@$x = 1|); + is($x->[0], 0, q|$x->[0] = 0|); + + # don't strip single elements + $x = &{$LIB."::__strip_zeros"}([0]); + is(@$x, 1, q|@$x = 1|); + is($x->[0], 0, q|$x->[0] = 0|); + $x = &{$LIB."::__strip_zeros"}([1]); + is(@$x, 1, q|@$x = 1|); + is($x->[0], 1, q|$x->[0] = 1|); + + # don't strip non-zero elements + $x = &{$LIB."::__strip_zeros"}([0, 1]); + is(@$x, 2, q|@$x = 2|); + is($x->[0], 0, q|$x->[0] = 0|); + is($x->[1], 1, q|$x->[1] = 1|); + $x = &{$LIB."::__strip_zeros"}([0, 1, 2]); + is(@$x, 3, q|@$x = 3|); + is($x->[0], 0, q|$x->[0] = 0|); + is($x->[1], 1, q|$x->[1] = 1|); + is($x->[2], 2, q|$x->[2] = 2|); + + # but strip leading zeros + $x = &{$LIB."::__strip_zeros"}([0, 1, 2, 0]); + is(@$x, 3, q|@$x = 3|); + is($x->[0], 0, q|$x->[0] = 0|); + is($x->[1], 1, q|$x->[1] = 1|); + is($x->[2], 2, q|$x->[2] = 2|); + + $x = &{$LIB."::__strip_zeros"}([0, 1, 2, 0, 0]); + is(@$x, 3, q|@$x = 3|); + is($x->[0], 0, q|$x->[0] = 0|); + is($x->[1], 1, q|$x->[1] = 1|); + is($x->[2], 2, q|$x->[2] = 2|); + + $x = &{$LIB."::__strip_zeros"}([0, 1, 2, 0, 0, 0]); + is(@$x, 3, q|@$x = 3|); + is($x->[0], 0, q|$x->[0] = 0|); + is($x->[1], 1, q|$x->[1] = 1|); + is($x->[2], 2, q|$x->[2] = 2|); + + # collapse multiple zeros + $x = &{$LIB."::__strip_zeros"}([0, 0, 0, 0]); + is(@$x, 1, q|@$x = 1|); + is($x->[0], 0, q|$x->[0] = 0|); } - -# done - -1; diff --git a/gnu/usr.bin/perl/cpan/Math-BigInt-FastCalc/t/bootstrap.t b/gnu/usr.bin/perl/cpan/Math-BigInt-FastCalc/t/bootstrap.t index 6f94bebc883..153dc92b91d 100755 --- a/gnu/usr.bin/perl/cpan/Math-BigInt-FastCalc/t/bootstrap.t +++ b/gnu/usr.bin/perl/cpan/Math-BigInt-FastCalc/t/bootstrap.t @@ -1,4 +1,4 @@ -#!/usr/bin/perl -w +# -*- mode: perl; -*- use Test::More tests => 1; diff --git a/gnu/usr.bin/perl/cpan/Math-BigInt-FastCalc/t/leak.t b/gnu/usr.bin/perl/cpan/Math-BigInt-FastCalc/t/leak.t index 6d0f7464a57..58935ba7599 100755 --- a/gnu/usr.bin/perl/cpan/Math-BigInt-FastCalc/t/leak.t +++ b/gnu/usr.bin/perl/cpan/Math-BigInt-FastCalc/t/leak.t @@ -1,4 +1,4 @@ -#!/usr/bin/perl -w +# -*- mode: perl; -*- # Test for memory leaks. diff --git a/gnu/usr.bin/perl/cpan/Math-BigInt-FastCalc/t/mbi_rand.t b/gnu/usr.bin/perl/cpan/Math-BigInt-FastCalc/t/mbi_rand.t index 1186e2e144c..1b4599e45bb 100755 --- a/gnu/usr.bin/perl/cpan/Math-BigInt-FastCalc/t/mbi_rand.t +++ b/gnu/usr.bin/perl/cpan/Math-BigInt-FastCalc/t/mbi_rand.t @@ -1,4 +1,4 @@ -#!perl +# -*- mode: perl; -*- use strict; use warnings; diff --git a/gnu/usr.bin/perl/cpan/Math-BigInt/lib/Math/BigFloat.pm b/gnu/usr.bin/perl/cpan/Math-BigInt/lib/Math/BigFloat.pm index f1d7a1a0a0a..d404f66af30 100644 --- a/gnu/usr.bin/perl/cpan/Math-BigInt/lib/Math/BigFloat.pm +++ b/gnu/usr.bin/perl/cpan/Math-BigInt/lib/Math/BigFloat.pm @@ -16,10 +16,12 @@ use 5.006001; use strict; use warnings; -use Carp qw< carp croak >; -use Math::BigInt (); +use Carp qw< carp croak >; +use Scalar::Util qw< blessed >; +use Math::BigInt qw< >; -our $VERSION = '1.999818'; +our $VERSION = '1.999830'; +$VERSION =~ tr/_//d; require Exporter; our @ISA = qw/Math::BigInt/; @@ -58,21 +60,21 @@ use overload # overload key: assign - '+=' => sub { $_[0]->badd($_[1]); }, + '+=' => sub { $_[0] -> badd($_[1]); }, - '-=' => sub { $_[0]->bsub($_[1]); }, + '-=' => sub { $_[0] -> bsub($_[1]); }, - '*=' => sub { $_[0]->bmul($_[1]); }, + '*=' => sub { $_[0] -> bmul($_[1]); }, - '/=' => sub { scalar $_[0]->bdiv($_[1]); }, + '/=' => sub { scalar $_[0] -> bdiv($_[1]); }, - '%=' => sub { $_[0]->bmod($_[1]); }, + '%=' => sub { $_[0] -> bmod($_[1]); }, - '**=' => sub { $_[0]->bpow($_[1]); }, + '**=' => sub { $_[0] -> bpow($_[1]); }, - '<<=' => sub { $_[0]->blsft($_[1]); }, + '<<=' => sub { $_[0] -> blsft($_[1]); }, - '>>=' => sub { $_[0]->brsft($_[1]); }, + '>>=' => sub { $_[0] -> brsft($_[1]); }, # 'x=' => sub { }, @@ -194,7 +196,7 @@ use overload '0+' => sub { $_[0] -> numify(); }, - '=' => sub { $_[0]->copy(); }, + '=' => sub { $_[0] -> copy(); }, ; @@ -360,193 +362,201 @@ sub new { my $selfref = ref $self; my $class = $selfref || $self; - my ($wanted, @r) = @_; + # Make "require" work. - # avoid numify-calls by not using || on $wanted! + $class -> import() if $IMPORT == 0; - unless (defined $wanted) { - #carp("Use of uninitialized value in new"); - return $self->bzero(@r); - } + # Although this use has been discouraged for more than 10 years, people + # apparently still use it, so we still support it. - # Using $wanted->isa("Math::BigFloat") here causes a 'Deep recursion on - # subroutine "Math::BigFloat::as_number"' in some tests. Fixme! + return $class -> bzero() unless @_; - if (UNIVERSAL::isa($wanted, 'Math::BigFloat')) { - my $copy = $wanted -> copy(); - if ($selfref) { # if new() called as instance method - %$self = %$copy; - } else { # if new() called as class method - $self = $copy; - } - return $copy; + my ($wanted, @r) = @_; + + if (!defined($wanted)) { + #if (warnings::enabled("uninitialized")) { + # warnings::warn("uninitialized", + # "Use of uninitialized value in new()"); + #} + return $class -> bzero(@r); } - $class->import() if $IMPORT == 0; # make require work + if (!ref($wanted) && $wanted eq "") { + #if (warnings::enabled("numeric")) { + # warnings::warn("numeric", + # q|Argument "" isn't numeric in new()|); + #} + #return $class -> bzero(@r); + return $class -> bnan(@r); + } - # If called as a class method, initialize a new object. + # Initialize a new object. $self = bless {}, $class unless $selfref; - # shortcut for bigints and its subclasses - if ((ref($wanted)) && $wanted -> can("as_number")) { - $self->{_m} = $wanted->as_number()->{value}; # get us a bigint copy - $self->{_e} = $LIB->_zero(); - $self->{_es} = '+'; - $self->{sign} = $wanted->sign(); - return $self->bnorm(); + # The first following ought to work. However, it causes a 'Deep recursion on + # subroutine "Math::BigFloat::as_number"' in some tests. Fixme! + + if (defined(blessed($wanted)) && $wanted -> isa('Math::BigFloat')) { + #if (defined(blessed($wanted)) && UNIVERSAL::isa($wanted, 'Math::BigFloat')) { + $self -> {sign} = $wanted -> {sign}; + $self -> {_m} = $LIB -> _copy($wanted -> {_m}); + $self -> {_es} = $wanted -> {_es}; + $self -> {_e} = $LIB -> _copy($wanted -> {_e}); + $self->round(@r) unless @r >= 2 && !defined($r[0]) && !defined($r[1]); + return $self; } - # else: got a string or something masquerading as number (with overload) + # Shortcut for Math::BigInt and its subclasses. This should be improved. + + if (defined(blessed($wanted))) { + if ($wanted -> isa('Math::BigInt')) { + $self->{sign} = $wanted -> {sign}; + $self->{_m} = $LIB -> _copy($wanted -> {value}); + $self->{_es} = '+'; + $self->{_e} = $LIB -> _zero(); + return $self -> bnorm(); + } + + if ($wanted -> can("as_number")) { + $self->{sign} = $wanted -> sign(); + $self->{_m} = $wanted -> as_number() -> {value}; + $self->{_es} = '+'; + $self->{_e} = $LIB -> _zero(); + return $self -> bnorm(); + } + } # Handle Infs. if ($wanted =~ /^\s*([+-]?)inf(inity)?\s*\z/i) { - return $downgrade->new($wanted) if $downgrade; + return $downgrade->new($wanted) if defined $downgrade; my $sgn = $1 || '+'; - $self->{sign} = $sgn . 'inf'; # set a default sign for bstr() - return $self->binf($sgn); + $self = $class -> binf($sgn); + $self->round(@r) unless @r >= 2 && !defined($r[0]) && !defined($r[1]); + return $self; } # Handle explicit NaNs (not the ones returned due to invalid input). if ($wanted =~ /^\s*([+-]?)nan\s*\z/i) { - return $downgrade->new($wanted) if $downgrade; + return $downgrade->new($wanted) if defined $downgrade; $self = $class -> bnan(); $self->round(@r) unless @r >= 2 && !defined $r[0] && !defined $r[1]; return $self; } - # Handle hexadecimal numbers. We auto-detect hexadecimal numbers if they - # have a "0x" or "0X" prefix. + # Shortcut for simple forms like '123' that have no trailing zeros. - if ($wanted =~ /^\s*[+-]?0[Xx]/) { - $self = $class -> from_hex($wanted); + if ($wanted =~ / ^ + \s* # optional leading whitespace + ( [+-]? ) # optional sign + 0* # optional leading zeros + ( [1-9] (?: [0-9]* [1-9] )? ) # significand + \s* # optional trailing whitespace + $ + /x) + { + return $downgrade->new($1 . $2) if defined $downgrade; + $self->{sign} = $1 || '+'; + $self->{_m} = $LIB -> _new($2); + $self->{_es} = '+'; + $self->{_e} = $LIB -> _zero(); $self->round(@r) unless @r >= 2 && !defined $r[0] && !defined $r[1]; return $self; } - # Handle octal numbers. We auto-detect octal numbers if they have a "0" - # prefix and a binary exponent. + my @parts; + + if ( + # Handle hexadecimal numbers. We auto-detect hexadecimal numbers if they + # have a "0x", "0X", "x", or "X" prefix, cf. CORE::oct(). - if ($wanted =~ / - ^ - \s* + $wanted =~ /^\s*[+-]?0?[Xx]/ and + @parts = $class -> _hex_str_to_lib_parts($wanted) - # sign - [+-]? + or - # prefix - 0 + # Handle octal numbers. We auto-detect octal numbers if they have a + # "0o", "0O", "o", "O" prefix, cf. CORE::oct(). - # significand using the octal digits 0..7 - [0-7]+ (?: _ [0-7]+ )* - (?: - \. - (?: [0-7]+ (?: _ [0-7]+ )* )? - )? + $wanted =~ /^\s*[+-]?0?[Oo]/ and + @parts = $class -> _oct_str_to_lib_parts($wanted) - # exponent (power of 2) using decimal digits - [Pp] - [+-]? - \d+ (?: _ \d+ )* + or - \s* - $ - /x) + # Handle binary numbers. We auto-detect binary numbers if they have a + # "0b", "0B", "b", or "B" prefix, cf. CORE::oct(). + + $wanted =~ /^\s*[+-]?0?[Bb]/ and + @parts = $class -> _bin_str_to_lib_parts($wanted) + + or + + # At this point, what is left are decimal numbers that aren't handled + # above and octal floating point numbers that don't have any of the + # "0o", "0O", "o", or "O" prefixes. First see if it is a decimal number. + + @parts = $class -> _dec_str_to_lib_parts($wanted) + or + + # See if it is an octal floating point number. The extra check is + # included because _oct_str_to_lib_parts() accepts octal numbers that + # don't have a prefix (this is needed to make it work with, e.g., + # from_oct() that don't require a prefix). However, Perl requires a + # prefix for octal floating point literals. For example, "1p+0" is not + # valid, but "01p+0" and "0__1p+0" are. + + $wanted =~ /^\s*[+-]?0_*\d/ and + @parts = $class -> _oct_str_to_lib_parts($wanted)) { - $self = $class -> from_oct($wanted); - $self->round(@r) unless @r >= 2 && !defined $r[0] && !defined $r[1]; - return $self; - } + # The value is an integer iff the exponent is non-negative. - # Handle binary numbers. We auto-detect binary numbers if they have a "0b" - # or "0B" prefix. + if ($parts[2] eq '+' && $downgrade) { + return $downgrade->new($wanted, @r); + } - if ($wanted =~ /^\s*[+-]?0[Bb]/) { - $self = $class -> from_bin($wanted); - $self->round(@r) unless @r >= 2 && !defined $r[0] && !defined $r[1]; + ($self->{sign}, $self->{_m}, $self->{_es}, $self->{_e}) = @parts; + $self->round(@r) unless @r >= 2 && !defined($r[0]) && !defined($r[1]); return $self; } - # Shortcut for simple forms like '12' that have no trailing zeros. - if ($wanted =~ /^([+-]?)0*([1-9][0-9]*[1-9])$/) { - $self->{_e} = $LIB -> _zero(); - $self->{_es} = '+'; - $self->{sign} = $1 || '+'; - $self->{_m} = $LIB -> _new($2); - if (!$downgrade) { - $self->round(@r) unless @r >= 2 && !defined $r[0] && !defined $r[1]; - return $self; - } - } + # If we get here, the value is neither a valid decimal, binary, octal, or + # hexadecimal number. It is not an explicit Inf or a NaN either. - my ($mis, $miv, $mfv, $es, $ev) = Math::BigInt::_split($wanted); - if (!ref $mis) { - if ($_trap_nan) { - croak("$wanted is not a number initialized to $class"); - } + return $class -> bnan(); +} - return $downgrade->bnan() if $downgrade; +sub from_dec { + my $self = shift; + my $selfref = ref $self; + my $class = $selfref || $self; - $self->{_e} = $LIB->_zero(); - $self->{_es} = '+'; - $self->{_m} = $LIB->_zero(); - $self->{sign} = $nan; - } else { - # make integer from mantissa by adjusting exp, then convert to int - $self->{_e} = $LIB->_new($$ev); # exponent - $self->{_es} = $$es || '+'; - my $mantissa = "$$miv$$mfv"; # create mant. - $mantissa =~ s/^0+(\d)/$1/; # strip leading zeros - $self->{_m} = $LIB->_new($mantissa); # create mant. - - # 3.123E0 = 3123E-3, and 3.123E-2 => 3123E-5 - if (CORE::length($$mfv) != 0) { - my $len = $LIB->_new(CORE::length($$mfv)); - ($self->{_e}, $self->{_es}) = - _e_sub($self->{_e}, $len, $self->{_es}, '+'); - } - # we can only have trailing zeros on the mantissa if $$mfv eq '' - else { - # Use a regexp to count the trailing zeros in $$miv instead of - # _zeros() because that is faster, especially when _m is not stored - # in base 10. - my $zeros = 0; - $zeros = CORE::length($1) if $$miv =~ /[1-9](0*)$/; - if ($zeros != 0) { - my $z = $LIB->_new($zeros); - # turn '120e2' into '12e3' - $self->{_m} = $LIB->_rsft($self->{_m}, $z, 10); - ($self->{_e}, $self->{_es}) = - _e_add($self->{_e}, $z, $self->{_es}, '+'); - } - } - $self->{sign} = $$mis; + # Don't modify constant (read-only) objects. - # for something like 0Ey, set y to 0, and -0 => +0 - # Check $$miv for being '0' and $$mfv eq '', because otherwise _m could not - # have become 0. That's faster than to call $LIB->_is_zero(). - $self->{sign} = '+', $self->{_e} = $LIB->_zero() - if $$miv eq '0' and $$mfv eq ''; + return if $selfref && $self->modify('from_dec'); - if (!$downgrade) { - $self->round(@r) unless @r >= 2 && !defined $r[0] && !defined $r[1]; - return $self; - } - } + my $str = shift; + my @r = @_; + + # If called as a class method, initialize a new object. + + $self = $class -> bzero() unless $selfref; - # if downgrade, inf, NaN or integers go down + if (my @parts = $class -> _dec_str_to_lib_parts($str)) { - if ($downgrade && $self->{_es} eq '+') { - if ($LIB->_is_zero($self->{_e})) { - return $downgrade->new($$mis . $LIB->_str($self->{_m})); + # The value is an integer iff the exponent is non-negative. + + if ($parts[2] eq '+') { + return $downgrade->new($str, @r) if defined $downgrade; } - return $downgrade->new($self->bsstr()); + + ($self->{sign}, $self->{_m}, $self->{_es}, $self->{_e}) = @parts; + $self->round(@r) unless @r >= 2 && !defined($r[0]) && !defined($r[1]); + return $self; } - $self->bnorm(); - $self->round(@r) unless @r >= 2 && !defined $r[0] && !defined $r[1]; - return $self; + + return $self -> bnan(@r); } sub from_hex { @@ -559,85 +569,26 @@ sub from_hex { return if $selfref && $self->modify('from_hex'); my $str = shift; + my @r = @_; # If called as a class method, initialize a new object. $self = $class -> bzero() unless $selfref; - if ($str =~ s/ - ^ - \s* - - # sign - ( [+-]? ) - - # optional "hex marker" - (?: 0? x )? - - # significand using the hex digits 0..9 and a..f - ( - [0-9a-fA-F]+ (?: _ [0-9a-fA-F]+ )* - (?: - \. - (?: [0-9a-fA-F]+ (?: _ [0-9a-fA-F]+ )* )? - )? - | - \. - [0-9a-fA-F]+ (?: _ [0-9a-fA-F]+ )* - ) - - # exponent (power of 2) using decimal digits - (?: - [Pp] - ( [+-]? ) - ( \d+ (?: _ \d+ )* ) - )? - - \s* - $ - //x) - { - my $s_sign = $1 || '+'; - my $s_value = $2; - my $e_sign = $3 || '+'; - my $e_value = $4 || '0'; - $s_value =~ tr/_//d; - $e_value =~ tr/_//d; - - # The significand must be multiplied by 2 raised to this exponent. - - my $two_expon = $class -> new($e_value); - $two_expon -> bneg() if $e_sign eq '-'; - - # If there is a dot in the significand, remove it and adjust the - # exponent according to the number of digits in the fraction part of - # the significand. Since the digits in the significand are in base 16, - # but the exponent is only in base 2, multiply the exponent adjustment - # value by log(16) / log(2) = 4. - - my $idx = index($s_value, '.'); - if ($idx >= 0) { - substr($s_value, $idx, 1) = ''; - $two_expon -= $class -> new(CORE::length($s_value)) - -> bsub($idx) - -> bmul("4"); - } + if (my @parts = $class -> _hex_str_to_lib_parts($str)) { - $self -> {sign} = $s_sign; - $self -> {_m} = $LIB -> _from_hex('0x' . $s_value); + # The value is an integer iff the exponent is non-negative. - if ($two_expon > 0) { - my $factor = $class -> new("2") -> bpow($two_expon); - $self -> bmul($factor); - } elsif ($two_expon < 0) { - my $factor = $class -> new("0.5") -> bpow(-$two_expon); - $self -> bmul($factor); + if ($parts[2] eq '+' && defined $downgrade) { + return $downgrade -> from_hex($str, @r); } + ($self->{sign}, $self->{_m}, $self->{_es}, $self->{_e}) = @parts; + $self->round(@r) unless @r >= 2 && !defined($r[0]) && !defined($r[1]); return $self; } - return $self->bnan(); + return $self -> bnan(@r); } sub from_oct { @@ -650,82 +601,26 @@ sub from_oct { return if $selfref && $self->modify('from_oct'); my $str = shift; + my @r = @_; # If called as a class method, initialize a new object. $self = $class -> bzero() unless $selfref; - if ($str =~ s/ - ^ - \s* - - # sign - ( [+-]? ) - - # significand using the octal digits 0..7 - ( - [0-7]+ (?: _ [0-7]+ )* - (?: - \. - (?: [0-7]+ (?: _ [0-7]+ )* )? - )? - | - \. - [0-7]+ (?: _ [0-7]+ )* - ) - - # exponent (power of 2) using decimal digits - (?: - [Pp] - ( [+-]? ) - ( \d+ (?: _ \d+ )* ) - )? - - \s* - $ - //x) - { - my $s_sign = $1 || '+'; - my $s_value = $2; - my $e_sign = $3 || '+'; - my $e_value = $4 || '0'; - $s_value =~ tr/_//d; - $e_value =~ tr/_//d; - - # The significand must be multiplied by 2 raised to this exponent. - - my $two_expon = $class -> new($e_value); - $two_expon -> bneg() if $e_sign eq '-'; - - # If there is a dot in the significand, remove it and adjust the - # exponent according to the number of digits in the fraction part of - # the significand. Since the digits in the significand are in base 8, - # but the exponent is only in base 2, multiply the exponent adjustment - # value by log(8) / log(2) = 3. - - my $idx = index($s_value, '.'); - if ($idx >= 0) { - substr($s_value, $idx, 1) = ''; - $two_expon -= $class -> new(CORE::length($s_value)) - -> bsub($idx) - -> bmul("3"); - } + if (my @parts = $class -> _oct_str_to_lib_parts($str)) { - $self -> {sign} = $s_sign; - $self -> {_m} = $LIB -> _from_oct($s_value); + # The value is an integer iff the exponent is non-negative. - if ($two_expon > 0) { - my $factor = $class -> new("2") -> bpow($two_expon); - $self -> bmul($factor); - } elsif ($two_expon < 0) { - my $factor = $class -> new("0.5") -> bpow(-$two_expon); - $self -> bmul($factor); + if ($parts[2] eq '+') { + return $downgrade -> from_oct($str, @r) if defined $downgrade; } + ($self->{sign}, $self->{_m}, $self->{_es}, $self->{_e}) = @parts; + $self->round(@r) unless @r >= 2 && !defined($r[0]) && !defined($r[1]); return $self; } - return $self->bnan(); + return $self -> bnan(@r); } sub from_bin { @@ -738,82 +633,26 @@ sub from_bin { return if $selfref && $self->modify('from_bin'); my $str = shift; + my @r = @_; # If called as a class method, initialize a new object. $self = $class -> bzero() unless $selfref; - if ($str =~ s/ - ^ - \s* - - # sign - ( [+-]? ) - - # optional "bin marker" - (?: 0? b )? - - # significand using the binary digits 0 and 1 - ( - [01]+ (?: _ [01]+ )* - (?: - \. - (?: [01]+ (?: _ [01]+ )* )? - )? - | - \. - [01]+ (?: _ [01]+ )* - ) - - # exponent (power of 2) using decimal digits - (?: - [Pp] - ( [+-]? ) - ( \d+ (?: _ \d+ )* ) - )? - - \s* - $ - //x) - { - my $s_sign = $1 || '+'; - my $s_value = $2; - my $e_sign = $3 || '+'; - my $e_value = $4 || '0'; - $s_value =~ tr/_//d; - $e_value =~ tr/_//d; - - # The significand must be multiplied by 2 raised to this exponent. - - my $two_expon = $class -> new($e_value); - $two_expon -> bneg() if $e_sign eq '-'; - - # If there is a dot in the significand, remove it and adjust the - # exponent according to the number of digits in the fraction part of - # the significand. - - my $idx = index($s_value, '.'); - if ($idx >= 0) { - substr($s_value, $idx, 1) = ''; - $two_expon -= $class -> new(CORE::length($s_value)) - -> bsub($idx); - } + if (my @parts = $class -> _bin_str_to_lib_parts($str)) { - $self -> {sign} = $s_sign; - $self -> {_m} = $LIB -> _from_bin('0b' . $s_value); + # The value is an integer iff the exponent is non-negative. - if ($two_expon > 0) { - my $factor = $class -> new("2") -> bpow($two_expon); - $self -> bmul($factor); - } elsif ($two_expon < 0) { - my $factor = $class -> new("0.5") -> bpow(-$two_expon); - $self -> bmul($factor); + if ($parts[2] eq '+') { + return $downgrade -> from_bin($str, @r) if defined $downgrade; } + ($self->{sign}, $self->{_m}, $self->{_es}, $self->{_e}) = @parts; + $self->round(@r) unless @r >= 2 && !defined($r[0]) && !defined($r[1]); return $self; } - return $self->bnan(); + return $self -> bnan(@r); } sub from_ieee754 { @@ -830,6 +669,7 @@ sub from_ieee754 { my $enc; # significand encoding (applies only to decimal) my $k; # storage width in bits my $b; # base + my @r = @_; if ($format =~ /^binary(\d+)\z/) { $k = $1; @@ -898,7 +738,7 @@ sub from_ieee754 { unless (defined $in) { carp("Input is undefined"); - return $self -> bzero(); + return $self -> bzero(@r); } # Make sure input string is a string of zeros and ones. @@ -969,7 +809,10 @@ sub from_ieee754 { } else { $self = $x; } - return $self; + + return $downgrade -> new($x, @r) + if defined($downgrade) && $x -> is_int(); + return $self -> round(@r); } croak("The format '$format' is not yet supported."); @@ -991,6 +834,8 @@ sub bzero { $self->import() if $IMPORT == 0; # make require work return if $selfref && $self->modify('bzero'); + return $downgrade->bzero() if defined $downgrade; + $self = bless {}, $class unless $selfref; $self -> {sign} = '+'; @@ -1033,6 +878,8 @@ sub bone { $self->import() if $IMPORT == 0; # make require work return if $selfref && $self->modify('bone'); + return $downgrade->bone() if defined $downgrade; + my $sign = shift; $sign = defined $sign && $sign =~ /^\s*-/ ? "-" : "+"; @@ -1073,6 +920,8 @@ sub binf { unshift @_, __PACKAGE__; } + return $downgrade->binf(@_) if defined $downgrade; + my $self = shift; my $selfref = ref $self; my $class = $selfref || $self; @@ -1125,6 +974,8 @@ sub bnan { unshift @_, __PACKAGE__; } + return $downgrade->bnan(@_) if defined $downgrade; + my $self = shift; my $selfref = ref $self; my $class = $selfref || $self; @@ -1199,13 +1050,13 @@ sub bpi { # we assume bpi() is called as a function. if (@_ == 0 && - (defined($self) && !ref($self) && $self =~ /^\s*[+-]?\d/i) + (defined($self) && !ref($self) && $self =~ /^\s*[+-]?\d/) || !defined($self)) { $r[0] = $self; $class = __PACKAGE__; - $self = $class -> bzero(@r); # initialize + $self = bless {}, $class; # initialize } # ... or if bpi() is called as a method ... @@ -1215,7 +1066,7 @@ sub bpi { if ($selfref) { # bpi() called as instance method return $self if $self -> modify('bpi'); } else { # bpi() called as class method - $self = $class -> bzero(@r); # initialize + $self = bless {}, $class; # initialize } } @@ -1453,7 +1304,7 @@ sub bcmp { # Handle all 'nan' cases. - return undef if ($x->{sign} eq $nan) || ($y->{sign} eq $nan); + return if ($x->{sign} eq $nan) || ($y->{sign} eq $nan); # Handle all '+inf' and '-inf' cases. @@ -1611,9 +1462,9 @@ sub bacmp { # handle +-inf and NaN's if ($x->{sign} !~ /^[+-]$/ || $y->{sign} !~ /^[+-]$/) { - return undef if (($x->{sign} eq $nan) || ($y->{sign} eq $nan)); - return 0 if ($x->is_inf() && $y->is_inf()); - return 1 if ($x->is_inf() && !$y->is_inf()); + return if (($x->{sign} eq $nan) || ($y->{sign} eq $nan)); + return 0 if ($x->is_inf() && $y->is_inf()); + return 1 if ($x->is_inf() && !$y->is_inf()); return -1; } @@ -1664,14 +1515,21 @@ sub bneg { # for +0 do not negate (to have always normalized +0). Does nothing for 'NaN' $x->{sign} =~ tr/+-/-+/ unless ($x->{sign} eq '+' && $LIB->_is_zero($x->{_m})); - $x; + + return $downgrade -> new($x) + if defined($downgrade) && ($x -> is_int() || $x -> is_inf() || $x -> is_nan()); + return $x; } sub bnorm { # adjust m and e so that m is smallest possible my ($class, $x) = ref($_[0]) ? (undef, $_[0]) : objectify(1, @_); - return $x if $x->{sign} !~ /^[+-]$/; # inf, nan etc + # inf, nan etc + if ($x->{sign} !~ /^[+-]$/) { + return $downgrade->new($x) if defined $downgrade; + return $x; + } my $zeros = $LIB->_zeros($x->{_m}); # correct for trailing zeros if ($zeros != 0) { @@ -1695,6 +1553,7 @@ sub bnorm { if $LIB->_is_zero($x->{_m}); } + return $downgrade->new($x) if defined($downgrade) && $x->is_int(); $x; } @@ -1769,6 +1628,7 @@ sub badd { # set up parameters my ($class, $x, $y, @r) = (ref($_[0]), @_); + # objectify is costly, so avoid it if ((!ref($_[0])) || (ref($_[0]) ne ref($_[1]))) { ($class, $x, $y, @r) = objectify(2, @_); @@ -1777,17 +1637,25 @@ sub badd { return $x if $x->modify('badd'); # inf and NaN handling - if (($x->{sign} !~ /^[+-]$/) || ($y->{sign} !~ /^[+-]$/)) { + if ($x->{sign} !~ /^[+-]$/ || $y->{sign} !~ /^[+-]$/) { + # NaN first - return $x->bnan() if (($x->{sign} eq $nan) || ($y->{sign} eq $nan)); + if ($x->{sign} eq $nan || $y->{sign} eq $nan) { + $x->bnan(); + } + # inf handling - if (($x->{sign} =~ /^[+-]inf$/) && ($y->{sign} =~ /^[+-]inf$/)) { + elsif ($x->{sign} =~ /^[+-]inf$/ && $y->{sign} =~ /^[+-]inf$/) { # +inf++inf or -inf+-inf => same, rest is NaN - return $x if $x->{sign} eq $y->{sign}; - return $x->bnan(); + $x->bnan() if $x->{sign} ne $y->{sign}; } + # +-inf + something => +inf; something +-inf => +-inf - $x->{sign} = $y->{sign}, return $x if $y->{sign} =~ /^[+-]inf$/; + elsif ($y->{sign} =~ /^[+-]inf$/) { + $x->{sign} = $y->{sign}; + } + + return $downgrade->new($x, @r) if defined $downgrade; return $x; } @@ -1796,49 +1664,61 @@ sub badd { $r[3] = $y; # no push! - # speed: no add for 0+y or x+0 - return $x->bround(@r) if $y->is_zero(); # x+0 - if ($x->is_zero()) # 0+y - { + # for speed: no add for $x + 0 + if ($y->is_zero()) { + $x->bround(@r); + } + + # for speed: no add for 0 + $y + elsif ($x->is_zero()) { # make copy, clobbering up x (modify in place!) $x->{_e} = $LIB->_copy($y->{_e}); $x->{_es} = $y->{_es}; $x->{_m} = $LIB->_copy($y->{_m}); $x->{sign} = $y->{sign} || $nan; - return $x->round(@r); + $x->round(@r); } - # take lower of the two e's and adapt m1 to it to match m2 - my $e = $y->{_e}; - $e = $LIB->_zero() if !defined $e; # if no BFLOAT? - $e = $LIB->_copy($e); # make copy (didn't do it yet) + else { - my $es; + # take lower of the two e's and adapt m1 to it to match m2 + my $e = $y->{_e}; + $e = $LIB->_zero() if !defined $e; # if no BFLOAT? + $e = $LIB->_copy($e); # make copy (didn't do it yet) - ($e, $es) = _e_sub($e, $x->{_e}, $y->{_es} || '+', $x->{_es}); + my $es; - my $add = $LIB->_copy($y->{_m}); + ($e, $es) = _e_sub($e, $x->{_e}, $y->{_es} || '+', $x->{_es}); + #($e, $es) = $LIB -> _ssub($e, $y->{_es} || '+', $x->{_e}, $x->{_es}); - if ($es eq '-') # < 0 - { - $x->{_m} = $LIB->_lsft($x->{_m}, $e, 10); - ($x->{_e}, $x->{_es}) = _e_add($x->{_e}, $e, $x->{_es}, $es); - } elsif (!$LIB->_is_zero($e)) # > 0 - { - $add = $LIB->_lsft($add, $e, 10); - } - # else: both e are the same, so just leave them + my $add = $LIB->_copy($y->{_m}); - if ($x->{sign} eq $y->{sign}) { - # add - $x->{_m} = $LIB->_add($x->{_m}, $add); - } else { - ($x->{_m}, $x->{sign}) = - _e_add($x->{_m}, $add, $x->{sign}, $y->{sign}); + if ($es eq '-') { # < 0 + $x->{_m} = $LIB->_lsft($x->{_m}, $e, 10); + ($x->{_e}, $x->{_es}) = _e_add($x->{_e}, $e, $x->{_es}, $es); + #$x->{_m} = $LIB->_lsft($x->{_m}, $e, 10); + #($x->{_e}, $x->{_es}) = $LIB -> _sadd($x->{_e}, $x->{_es}, $e, $es); + } elsif (!$LIB->_is_zero($e)) { # > 0 + $add = $LIB->_lsft($add, $e, 10); + } + + # else: both e are the same, so just leave them + + if ($x->{sign} eq $y->{sign}) { + $x->{_m} = $LIB->_add($x->{_m}, $add); + } else { + ($x->{_m}, $x->{sign}) = + _e_add($x->{_m}, $add, $x->{sign}, $y->{sign}); + #($x->{_m}, $x->{sign}) = + # $LIB -> _sadd($x->{_m}, $x->{sign}, $add, $y->{sign}); + } + + # delete trailing zeros, then round + $x->bnorm()->round(@r); } - # delete trailing zeros, then round - $x->bnorm()->round(@r); + return $downgrade->new($x, @r) if defined($downgrade) && $x -> is_int(); + return $x; } sub bsub { @@ -1858,21 +1738,31 @@ sub bsub { return $upgrade -> new($x) -> bsub($upgrade -> new($y), @r) if defined $upgrade && (!$x -> isa($class) || !$y -> isa($class)); - return $x -> round(@r) if $y -> is_zero(); + if ($y -> is_zero()) { + $x -> round(@r); + } else { - # To correctly handle the lone special case $x -> bsub($x), we note the - # sign of $x, then flip the sign from $y, and if the sign of $x did change, - # too, then we caught the special case: + # To correctly handle the special case $x -> bsub($x), we note the sign + # of $x, then flip the sign of $y, and if the sign of $x changed too, + # then we know that $x and $y are the same object. - my $xsign = $x -> {sign}; - $y -> {sign} =~ tr/+-/-+/; # does nothing for NaN - if ($xsign ne $x -> {sign}) { - # special case of $x -> bsub($x) results in 0 - return $x -> bzero(@r) if $xsign =~ /^[+-]$/; - return $x -> bnan(); # NaN, -inf, +inf + my $xsign = $x -> {sign}; + $y -> {sign} =~ tr/+-/-+/; # does nothing for NaN + if ($xsign ne $x -> {sign}) { + # special case of $x -> bsub($x) results in 0 + if ($xsign =~ /^[+-]$/) { + $x -> bzero(@r); + } else { + $x -> bnan(); # NaN, -inf, +inf + } + return $downgrade->new($x, @r) if defined $downgrade; + return $x; + } + $x = $x -> badd($y, @r); # badd does not leave internal zeros + $y -> {sign} =~ tr/+-/-+/; # reset $y (does nothing for NaN) } - $x -> badd($y, @r); # badd does not leave internal zeros - $y -> {sign} =~ tr/+-/-+/; # refix $y (does nothing for NaN) + return $downgrade->new($x, @r) + if defined($downgrade) && ($x->is_int() || $x->is_inf() || $x->is_nan()); $x; # already rounded by badd() or no rounding } @@ -1907,6 +1797,7 @@ sub bmul { # aEb * cEd = (a*c)E(b+d) $x->{_m} = $LIB->_mul($x->{_m}, $y->{_m}); ($x->{_e}, $x->{_es}) = _e_add($x->{_e}, $y->{_e}, $x->{_es}, $y->{_es}); + #($x->{_e}, $x->{_es}) = $LIB -> _sadd($x->{_e}, $x->{_es}, $y->{_e}, $y->{_es}); $r[3] = $y; # no push! @@ -1944,6 +1835,7 @@ sub bmuladd { # aEb * cEd = (a*c)E(b+d) $x->{_m} = $LIB->_mul($x->{_m}, $y->{_m}); ($x->{_e}, $x->{_es}) = _e_add($x->{_e}, $y->{_e}, $x->{_es}, $y->{_es}); + #($x->{_e}, $x->{_es}) = $LIB -> _sadd($x->{_e}, $x->{_es}, $y->{_e}, $y->{_es}); $r[3] = $y; # no push! @@ -1951,7 +1843,11 @@ sub bmuladd { $x->{sign} = $x->{sign} ne $y->{sign} ? '-' : '+'; # z=inf handling (z=NaN handled above) - $x->{sign} = $z->{sign}, return $x if $z->{sign} =~ /^[+-]inf$/; + if ($z->{sign} =~ /^[+-]inf$/) { + $x->{sign} = $z->{sign}; + return $downgrade->new($x) if defined $downgrade; + return $x; + } # take lower of the two e's and adapt m1 to it to match m2 my $e = $z->{_e}; @@ -1961,6 +1857,7 @@ sub bmuladd { my $es; ($e, $es) = _e_sub($e, $x->{_e}, $z->{_es} || '+', $x->{_es}); + #($e, $es) = $LIB -> _ssub($e, $z->{_es} || '+', $x->{_e}, $x->{_es}); my $add = $LIB->_copy($z->{_m}); @@ -1968,6 +1865,8 @@ sub bmuladd { { $x->{_m} = $LIB->_lsft($x->{_m}, $e, 10); ($x->{_e}, $x->{_es}) = _e_add($x->{_e}, $e, $x->{_es}, $es); + #$x->{_m} = $LIB->_lsft($x->{_m}, $e, 10); + #($x->{_e}, $x->{_es}) = $LIB -> _sadd($x->{_e}, $x->{_es}, $e, $es); } elsif (!$LIB->_is_zero($e)) # > 0 { $add = $LIB->_lsft($add, $e, 10); @@ -1980,6 +1879,8 @@ sub bmuladd { } else { ($x->{_m}, $x->{sign}) = _e_add($x->{_m}, $add, $x->{sign}, $z->{sign}); + #($x->{_m}, $x->{sign}) = + # $LIB -> _sadd($x->{_m}, $x->{sign}, $add, $z->{sign}); } # delete trailing zeros, then round @@ -2075,9 +1976,6 @@ sub bdiv { # x == 0? return wantarray ? ($x, $class->bzero()) : $x if $x->is_zero(); - # upgrade ? - return $upgrade->bdiv($upgrade->new($x), $y, $a, $p, $r) if defined $upgrade; - # we need to limit the accuracy to protect against overflow my $fallback = 0; my (@params, $scale); @@ -2144,8 +2042,12 @@ sub bdiv { # correct exponent of $x ($x->{_e}, $x->{_es}) = _e_sub($x->{_e}, $y->{_e}, $x->{_es}, $y->{_es}); + #($x->{_e}, $x->{_es}) + # = $LIB -> _ssub($x->{_e}, $x->{_es}, $y->{_e}, $y->{_es}); # correct for 10**scale ($x->{_e}, $x->{_es}) = _e_sub($x->{_e}, $LIB->_new($scale), $x->{_es}, '+'); + #($x->{_e}, $x->{_es}) + # = $LIB -> _ssub($x->{_e}, $x->{_es}, $LIB->_new($scale), '+'); $x->bnorm(); # remove trailing 0's } } # end else $x != $y @@ -2172,8 +2074,14 @@ sub bdiv { # clear a/p after round, since user did not request it delete $rem->{_a}; delete $rem->{_p}; } + $x = $downgrade -> new($x) + if defined($downgrade) && $x -> is_int(); + $rem = $downgrade -> new($rem) + if defined($downgrade) && $rem -> is_int(); return ($x, $rem); } + + $x = $downgrade -> new($x) if defined($downgrade) && $x -> is_int(); $x; } @@ -2332,71 +2240,81 @@ sub bpow { ($class, $x, $y, $a, $p, $r) = objectify(2, @_); } - return $x if $x->modify('bpow'); + return $x if $x -> modify('bpow'); # $x and/or $y is a NaN - return $x->bnan() if $x->is_nan() || $y->is_nan(); + return $x -> bnan() if $x -> is_nan() || $y -> is_nan(); # $x and/or $y is a +/-Inf - if ($x->is_inf("-")) { - return $x->bzero() if $y->is_negative(); - return $x->bnan() if $y->is_zero(); - return $x if $y->is_odd(); - return $x->bneg(); - } elsif ($x->is_inf("+")) { - return $x->bzero() if $y->is_negative(); - return $x->bnan() if $y->is_zero(); + if ($x -> is_inf("-")) { + return $x -> bzero() if $y -> is_negative(); + return $x -> bnan() if $y -> is_zero(); + return $x if $y -> is_odd(); + return $x -> bneg(); + } elsif ($x -> is_inf("+")) { + return $x -> bzero() if $y -> is_negative(); + return $x -> bnan() if $y -> is_zero(); + return $x; + } elsif ($y -> is_inf("-")) { + return $x -> bnan() if $x -> is_one("-"); + return $x -> binf("+") if $x > -1 && $x < 1; + return $x -> bone() if $x -> is_one("+"); + return $x -> bzero(); + } elsif ($y -> is_inf("+")) { + return $x -> bnan() if $x -> is_one("-"); + return $x -> bzero() if $x > -1 && $x < 1; + return $x -> bone() if $x -> is_one("+"); + return $x -> binf("+"); + } + + if ($x -> is_zero()) { + return $x -> bone() if $y -> is_zero(); + return $x -> binf() if $y -> is_negative(); return $x; - } elsif ($y->is_inf("-")) { - return $x->bnan() if $x -> is_one("-"); - return $x->binf("+") if $x > -1 && $x < 1; - return $x->bone() if $x -> is_one("+"); - return $x->bzero(); - } elsif ($y->is_inf("+")) { - return $x->bnan() if $x -> is_one("-"); - return $x->bzero() if $x > -1 && $x < 1; - return $x->bone() if $x -> is_one("+"); - return $x->binf("+"); } - # we don't support complex numbers, so return NaN - return $x->bnan() if $x->is_negative() && !$y->is_int(); - - # cache the result of is_zero - my $y_is_zero = $y->is_zero(); - return $x->bone() if $y_is_zero; - return $x if $x->is_one() || $y->is_one(); - - my $x_is_zero = $x->is_zero(); - return $x->_pow($y, $a, $p, $r) if !$x_is_zero && !$y->is_int(); + # We don't support complex numbers, so upgrade or return NaN. - my $y1 = $y->as_number()->{value}; # make MBI part + if ($x -> is_negative() && !$y -> is_int()) { + return $upgrade -> bpow($upgrade -> new($x), $y, $a, $p, $r) + if defined $upgrade; + return $x -> bnan(); + } - if ($x->is_one("-")) { - # if $x == -1 and odd/even y => +1/-1 because +-1 ^ (+-1) => +-1 - return $LIB->_is_odd($y1) ? $x : $x->babs(1); + if ($x -> is_one("+") || $y -> is_one()) { + return $x; } - if ($x_is_zero) { - return $x if $y->{sign} eq '+'; # 0**y => 0 (if not y <= 0) - # 0 ** -y => 1 / (0 ** y) => 1 / 0! (1 / 0 => +inf) - return $x->binf(); + + if ($x -> is_one("-")) { + return $x if $y -> is_odd(); + return $x -> bneg(); } + return $x -> _pow($y, $a, $p, $r) if !$y -> is_int(); + + my $y1 = $y -> as_int()->{value}; # make MBI part + my $new_sign = '+'; - $new_sign = $LIB->_is_odd($y1) ? '-' : '+' if $x->{sign} ne '+'; + $new_sign = $LIB -> _is_odd($y1) ? '-' : '+' if $x->{sign} ne '+'; # calculate $x->{_m} ** $y and $x->{_e} * $y separately (faster) - $x->{_m} = $LIB->_pow($x->{_m}, $y1); - $x->{_e} = $LIB->_mul ($x->{_e}, $y1); + $x->{_m} = $LIB -> _pow($x->{_m}, $y1); + $x->{_e} = $LIB -> _mul($x->{_e}, $y1); $x->{sign} = $new_sign; - $x->bnorm(); + $x -> bnorm(); + + # x ** (-y) = 1 / (x ** y) + if ($y->{sign} eq '-') { # modify $x in place! - my $z = $x->copy(); $x->bone(); - return scalar $x->bdiv($z, $a, $p, $r); # round in one go (might ignore y's A!) + my $z = $x -> copy(); + $x -> bone(); + # round in one go (might ignore y's A!) + return scalar $x -> bdiv($z, $a, $p, $r); } - $x->round($a, $p, $r, $y); + + $x -> round($a, $p, $r, $y); } sub blog { @@ -2794,7 +2712,7 @@ sub bsin { # constant object or error in _find_round_parameters? return $x if $x->modify('bsin') || $x->is_nan(); - + return $x->bnan() if $x->is_inf(); return $x->bzero(@r) if $x->is_zero(); # no rounding at all, so must use fallback @@ -2884,7 +2802,7 @@ sub bcos { # constant object or error in _find_round_parameters? return $x if $x->modify('bcos') || $x->is_nan(); - + return $x->bnan() if $x->is_inf(); return $x->bone(@r) if $x->is_zero(); # no rounding at all, so must use fallback @@ -3519,11 +3437,12 @@ sub bdfac { ($class, $x, @r) = objectify(1, @_) if !ref($x); # inf => inf - return $x if $x->modify('bfac') || $x->{sign} eq '+inf'; + return $x if $x->modify('bdfac') || $x->{sign} eq '+inf'; - return $x->bnan() - if (($x->{sign} ne '+') || # inf, NaN, <0 etc => NaN - ($x->{_es} ne '+')); # digits after dot? + return $x->bnan() if ($x->is_nan() || + $x->{_es} ne '+'); # digits after dot? + return $x->bnan() if $x <= -2; + return $x->bone() if $x <= 1; croak("bdfac() requires a newer version of the $LIB library.") unless $LIB->can('_dfac'); @@ -3537,6 +3456,55 @@ sub bdfac { $x->bnorm()->round(@r); # norm again and round result } +sub btfac { + # compute triple factorial + + # set up parameters + my ($class, $x, @r) = (ref($_[0]), @_); + # objectify is costly, so avoid it + ($class, $x, @r) = objectify(1, @_) if !ref($x); + + # inf => inf + return $x if $x->modify('btfac') || $x->{sign} eq '+inf'; + + return $x->bnan() if ($x->is_nan() || + $x->{_es} ne '+'); # digits after dot? + + my $k = $class -> new("3"); + return $x->bnan() if $x <= -$k; + + my $one = $class -> bone(); + return $x->bone() if $x <= $one; + + my $f = $x -> copy(); + while ($f -> bsub($k) > $one) { + $x -> bmul($f); + } + $x->round(@r); +} + +sub bmfac { + my ($class, $x, $k, @r) = objectify(2, @_); + + # inf => inf + return $x if $x->modify('bmfac') || $x->{sign} eq '+inf'; + + return $x->bnan() if ($x->is_nan() || $k->is_nan() || + $k < 1 || $x <= -$k || + $x->{_es} ne '+' || $k->{_es} ne '+'); + + return $x->bnan() if $x <= -$k; + + my $one = $class -> bone(); + return $x->bone() if $x <= $one; + + my $f = $x -> copy(); + while ($f -> bsub($k) > $one) { + $x -> bmul($f); + } + $x->round(@r); +} + sub blsft { # shift left by $y (multiply by $b ** $y) @@ -3711,24 +3679,42 @@ sub bround { croak('bround() needs positive accuracy'); } + return $x if $x->modify('bround'); + my ($scale, $mode) = $x->_scale_a(@_); - return $x if !defined $scale || $x->modify('bround'); # no-op + if (!defined $scale) { # no-op + return $downgrade->new($x) if defined($downgrade) + && ($x->is_int() || $x->is_inf() || $x->is_nan()); + return $x; + } - # scale is now either $x->{_a}, $accuracy, or the user parameter - # test whether $x already has lower accuracy, do nothing in this case - # but do round if the accuracy is the same, since a math operation might - # want to round a number with A=5 to 5 digits afterwards again - return $x if defined $x->{_a} && $x->{_a} < $scale; + # Scale is now either $x->{_a}, $accuracy, or the input argument. Test + # whether $x already has lower accuracy, do nothing in this case but do + # round if the accuracy is the same, since a math operation might want to + # round a number with A=5 to 5 digits afterwards again + + if (defined $x->{_a} && $x->{_a} < $scale) { + return $downgrade->new($x) if defined($downgrade) + && ($x->is_int() || $x->is_inf() || $x->is_nan()); + return $x; + } # scale < 0 makes no sense # scale == 0 => keep all digits # never round a +-inf, NaN - return $x if ($scale <= 0) || $x->{sign} !~ /^[+-]$/; + + if ($scale <= 0 || $x->{sign} !~ /^[+-]$/) { + return $downgrade->new($x) if defined($downgrade) + && ($x->is_int() || $x->is_inf() || $x->is_nan()); + return $x; + } # 1: never round a 0 # 2: if we should keep more digits than the mantissa has, do nothing if ($x->is_zero() || $LIB->_len($x->{_m}) <= $scale) { $x->{_a} = $scale if !defined $x->{_a} || $x->{_a} > $scale; + return $downgrade->new($x) if defined($downgrade) + && ($x->is_int() || $x->is_inf() || $x->is_nan()); return $x; } @@ -3739,6 +3725,8 @@ sub bround { $x->{_m} = $m->{value}; # get our mantissa back $x->{_a} = $scale; # remember rounding delete $x->{_p}; # and clear P + + # bnorm() downgrades if necessary, so no need to check whether to downgrade. $x->bnorm(); # del trailing zeros gen. by bround() } @@ -3750,25 +3738,47 @@ sub bfround { my $class = ref($x) || $x; $x = $class->new(shift) if !ref($x); + return $x if $x->modify('bfround'); # no-op + my ($scale, $mode) = $x->_scale_p(@_); - return $x if !defined $scale || $x->modify('bfround'); # no-op + if (!defined $scale) { + return $downgrade->new($x) if defined($downgrade) + && ($x->is_int() || $x->is_inf() || $x->is_nan()); + return $x; + } # never round a 0, +-inf, NaN + if ($x->is_zero()) { $x->{_p} = $scale if !defined $x->{_p} || $x->{_p} < $scale; # -3 < -2 + return $downgrade->new($x) if defined($downgrade) + && ($x->is_int() || $x->is_inf() || $x->is_nan()); + return $x; + } + + if ($x->{sign} !~ /^[+-]$/) { + return $downgrade->new($x) if defined($downgrade) + && ($x->is_int() || $x->is_inf() || $x->is_nan()); return $x; } - return $x if $x->{sign} !~ /^[+-]$/; # don't round if x already has lower precision - return $x if (defined $x->{_p} && $x->{_p} < 0 && $scale < $x->{_p}); + if (defined $x->{_p} && $x->{_p} < 0 && $scale < $x->{_p}) { + return $downgrade->new($x) if defined($downgrade) + && ($x->is_int() || $x->is_inf() || $x->is_nan()); + return $x; + } $x->{_p} = $scale; # remember round in any case delete $x->{_a}; # and clear A if ($scale < 0) { # round right from the '.' - return $x if $x->{_es} eq '+'; # e >= 0 => nothing to round + if ($x->{_es} eq '+') { # e >= 0 => nothing to round + return $downgrade->new($x) if defined($downgrade) + && ($x->is_int() || $x->is_inf() || $x->is_nan()); + return $x; + } $scale = -$scale; # positive for simplicity my $len = $LIB->_len($x->{_m}); # length of mantissa @@ -3788,13 +3798,22 @@ sub bfround { # 1.2345 12345e-4 5 0 4 # do not round after/right of the $dad - return $x if $scale > $dad; # 0.123, scale >= 3 => exit + + if ($scale > $dad) { # 0.123, scale >= 3 => exit + return $downgrade->new($x) if defined($downgrade) + && ($x->is_int() || $x->is_inf() || $x->is_nan()); + return $x; + } # round to zero if rounding inside the $zad, but not for last zero like: # 0.0065, scale -2, round last '0' with following '65' (scale == zad case) - return $x->bzero() if $scale < $zad; - if ($scale == $zad) # for 0.006, scale -3 and trunc - { + if ($scale < $zad) { + return $downgrade->new($x) if defined($downgrade) + && ($x->is_int() || $x->is_inf() || $x->is_nan()); + return $x->bzero(); + } + + if ($scale == $zad) { # for 0.006, scale -3 and trunc $scale = -$len; } else { # adjust round-point to be inside mantissa @@ -3817,12 +3836,17 @@ sub bfround { # should be the same, so treat it as this $scale = 1 if $scale == 0; # shortcut if already integer - return $x if $scale == 1 && $dbt <= $dbd; + if ($scale == 1 && $dbt <= $dbd) { + return $downgrade->new($x) if defined($downgrade) + && ($x->is_int() || $x->is_inf() || $x->is_nan()); + return $x; + } # maximum digits before dot ++$dbd; if ($scale > $dbd) { # not enough digits before dot, so round to zero + return $downgrade->new($x) if defined($downgrade); return $x->bzero; } elsif ($scale == $dbd) { # maximum @@ -3831,66 +3855,81 @@ sub bfround { $scale = $dbd - $scale; } } + # pass sign to bround for rounding modes '+inf' and '-inf' my $m = bless { sign => $x->{sign}, value => $x->{_m} }, 'Math::BigInt'; $m->bround($scale, $mode); $x->{_m} = $m->{value}; # get our mantissa back + + # bnorm() downgrades if necessary, so no need to check whether to downgrade. $x->bnorm(); } sub bfloor { # round towards minus infinity - my ($class, $x, $a, $p, $r) = ref($_[0]) ? (ref($_[0]), @_) : objectify(1, @_); + my ($class, $x, @r) = ref($_[0]) ? (ref($_[0]), @_) : objectify(1, @_); return $x if $x->modify('bfloor'); - return $x if $x->{sign} !~ /^[+-]$/; # nan, +inf, -inf - # if $x has digits after dot - if ($x->{_es} eq '-') { - $x->{_m} = $LIB->_rsft($x->{_m}, $x->{_e}, 10); # cut off digits after dot - $x->{_e} = $LIB->_zero(); # trunc/norm - $x->{_es} = '+'; # abs e - $x->{_m} = $LIB->_inc($x->{_m}) if $x->{sign} eq '-'; # increment if negative + if ($x->{sign} =~ /^[+-]$/) { + # if $x has digits after dot, remove them + if ($x->{_es} eq '-') { + $x->{_m} = $LIB->_rsft($x->{_m}, $x->{_e}, 10); + $x->{_e} = $LIB->_zero(); + $x->{_es} = '+'; + # increment if negative + $x->{_m} = $LIB->_inc($x->{_m}) if $x->{sign} eq '-'; + } + $x->round(@r); } - $x->round($a, $p, $r); + return $downgrade->new($x, @r) if defined($downgrade); + return $x; } sub bceil { # round towards plus infinity - my ($class, $x, $a, $p, $r) = ref($_[0]) ? (ref($_[0]), @_) : objectify(1, @_); + my ($class, $x, @r) = ref($_[0]) ? (ref($_[0]), @_) : objectify(1, @_); return $x if $x->modify('bceil'); - return $x if $x->{sign} !~ /^[+-]$/; # nan, +inf, -inf - # if $x has digits after dot - if ($x->{_es} eq '-') { - $x->{_m} = $LIB->_rsft($x->{_m}, $x->{_e}, 10); # cut off digits after dot - $x->{_e} = $LIB->_zero(); # trunc/norm - $x->{_es} = '+'; # abs e - if ($x->{sign} eq '+') { - $x->{_m} = $LIB->_inc($x->{_m}); # increment if positive - } else { - $x->{sign} = '+' if $LIB->_is_zero($x->{_m}); # avoid -0 + # if $x has digits after dot, remove them + if ($x->{sign} =~ /^[+-]$/) { + if ($x->{_es} eq '-') { + $x->{_m} = $LIB->_rsft($x->{_m}, $x->{_e}, 10); + $x->{_e} = $LIB->_zero(); + $x->{_es} = '+'; + if ($x->{sign} eq '+') { + $x->{_m} = $LIB->_inc($x->{_m}); # increment if positive + } else { + $x->{sign} = '+' if $LIB->_is_zero($x->{_m}); # avoid -0 + } } + $x->round(@r); } - $x->round($a, $p, $r); + + return $downgrade->new($x, @r) if defined($downgrade); + return $x; } sub bint { # round towards zero - my ($class, $x, $a, $p, $r) = ref($_[0]) ? (ref($_[0]), @_) : objectify(1, @_); + my ($class, $x, @r) = ref($_[0]) ? (ref($_[0]), @_) : objectify(1, @_); return $x if $x->modify('bint'); - return $x if $x->{sign} !~ /^[+-]$/; # nan, +inf, -inf - # if $x has digits after the decimal point - if ($x->{_es} eq '-') { - $x->{_m} = $LIB->_rsft($x->{_m}, $x->{_e}, 10); # cut off digits after dot - $x->{_e} = $LIB->_zero(); # truncate/normalize - $x->{_es} = '+'; # abs e - $x->{sign} = '+' if $LIB->_is_zero($x->{_m}); # avoid -0 + if ($x->{sign} =~ /^[+-]$/) { + # if $x has digits after the decimal point + if ($x->{_es} eq '-') { + $x->{_m} = $LIB->_rsft($x->{_m}, $x->{_e}, 10); # remove fraction part + $x->{_e} = $LIB->_zero(); # truncate/normalize + $x->{_es} = '+'; # abs e + $x->{sign} = '+' if $LIB->_is_zero($x->{_m}); # avoid -0 + } + $x->round(@r); } - $x->round($a, $p, $r); + + return $downgrade->new($x, @r) if defined($downgrade); + return $x; } ############################################################################### @@ -4042,7 +4081,7 @@ sub sparts { # Finite number. - my $mant = $class -> bzero(); + my $mant = $self -> copy() -> bzero(); $mant -> {sign} = $self -> {sign}; $mant -> {_m} = $LIB->_copy($self -> {_m}); return $mant unless wantarray; @@ -4159,6 +4198,94 @@ sub dparts { return ($int, $frc); } +sub fparts { + my $x = shift; + my $class = ref $x; + + croak("fparts() is an instance method") unless $class; + + return ($class -> bnan(), + $class -> bnan()) if $x -> is_nan(); + + return ($class -> binf($x -> sign()), + $class -> bone()) if $x -> is_inf(); + + return ($class -> bzero(), + $class -> bone()) if $x -> is_zero(); + + if ($x -> {_es} eq '-') { # exponent < 0 + my $numer_lib = $LIB -> _copy($x -> {_m}); + my $denom_lib = $LIB -> _1ex($x -> {_e}); + my $gcd_lib = $LIB -> _gcd($LIB -> _copy($numer_lib), $denom_lib); + $numer_lib = $LIB -> _div($numer_lib, $gcd_lib); + $denom_lib = $LIB -> _div($denom_lib, $gcd_lib); + return ($class -> new($x -> {sign} . $LIB -> _str($numer_lib)), + $class -> new($LIB -> _str($denom_lib))); + } + + elsif (! $LIB -> _is_zero($x -> {_e})) { # exponent > 0 + my $numer_lib = $LIB -> _copy($x -> {_m}); + $numer_lib = $LIB -> _lsft($numer_lib, $x -> {_e}, 10); + return ($class -> new($x -> {sign} . $LIB -> _str($numer_lib)), + $class -> bone()); + } + + else { # exponent = 0 + return ($class -> new($x -> {sign} . $LIB -> _str($x -> {_m})), + $class -> bone()); + } +} + +sub numerator { + my $x = shift; + my $class = ref $x; + + croak("numerator() is an instance method") unless $class; + + return $class -> bnan() if $x -> is_nan(); + return $class -> binf($x -> sign()) if $x -> is_inf(); + return $class -> bzero() if $x -> is_zero(); + + if ($x -> {_es} eq '-') { # exponent < 0 + my $numer_lib = $LIB -> _copy($x -> {_m}); + my $denom_lib = $LIB -> _1ex($x -> {_e}); + my $gcd_lib = $LIB -> _gcd($LIB -> _copy($numer_lib), $denom_lib); + $numer_lib = $LIB -> _div($numer_lib, $gcd_lib); + return $class -> new($x -> {sign} . $LIB -> _str($numer_lib)); + } + + elsif (! $LIB -> _is_zero($x -> {_e})) { # exponent > 0 + my $numer_lib = $LIB -> _copy($x -> {_m}); + $numer_lib = $LIB -> _lsft($numer_lib, $x -> {_e}, 10); + return $class -> new($x -> {sign} . $LIB -> _str($numer_lib)); + } + + else { # exponent = 0 + return $class -> new($x -> {sign} . $LIB -> _str($x -> {_m})); + } +} + +sub denominator { + my $x = shift; + my $class = ref $x; + + croak("denominator() is an instance method") unless $class; + + return $class -> bnan() if $x -> is_nan(); + + if ($x -> {_es} eq '-') { # exponent < 0 + my $numer_lib = $LIB -> _copy($x -> {_m}); + my $denom_lib = $LIB -> _1ex($x -> {_e}); + my $gcd_lib = $LIB -> _gcd($LIB -> _copy($numer_lib), $denom_lib); + $denom_lib = $LIB -> _div($denom_lib, $gcd_lib); + return $class -> new($LIB -> _str($denom_lib)); + } + + else { # exponent >= 0 + return $class -> bone(); + } +} + ############################################################################### # String conversion methods ############################################################################### @@ -4500,7 +4627,7 @@ sub to_ieee754 { $mant -> bmul($b -> copy() -> bpow($expo_abs)); } - # Final adjustment. + # Final adjustment of the estimate above. while ($mant >= $b && $expo <= $emax) { $mant -> bmul($binv); @@ -4512,19 +4639,63 @@ sub to_ieee754 { $expo -> bdec(); } - # Encode as infinity, normal number or subnormal number? + # This is when the magnitude is larger than what can be represented + # in this format. Encode as infinity. - if ($expo > $emax) { # overflow => infinity - $expo = $emax -> copy() -> binc(); + if ($expo > $emax) { $mant = $class -> bzero(); - } elsif ($expo < $emin) { # subnormal number - my $const = $class -> new(2) -> bpow($t - 1); + $expo = $emax -> copy() -> binc(); + } + + # This is when the magnitude is so small that the number is encoded + # as a subnormal number. + # + # If the magnitude is smaller than that of the smallest subnormal + # number, and rounded downwards, it is encoded as zero. This works + # transparently and does not need to be treated as a special case. + # + # If the number is between the largest subnormal number and the + # smallest normal number, and the value is rounded upwards, the + # value must be encoded as a normal number. This must be treated as + # a special case. + + elsif ($expo < $emin) { + + # Scale up the mantissa (significand), and round to integer. + + my $const = $class -> new($b) -> bpow($t - 1); $mant -> bmul($const); $mant -> bfround(0); - } else { # normal number - $mant -> bdec(); # remove implicit leading bit - my $const = $class -> new(2) -> bpow($t); + + # If the mantissa overflowed, encode as the smallest normal + # number. + + if ($mant == $const -> bmul($b)) { + $mant -> bzero(); + $expo -> binc(); + } + } + + # This is when the magnitude is within the range of what can be + # encoded as a normal number. + + else { + + # Remove implicit leading bit, scale up the mantissa + # (significand) to an integer, and round. + + $mant -> bdec(); + my $const = $class -> new($b) -> bpow($t); $mant -> bmul($const) -> bfround(0); + + # If the mantissa overflowed, encode as the next larger value. + # This works correctly also when the next larger value is + # infinity. + + if ($mant == $const) { + $mant -> bzero(); + $expo -> binc(); + } } } @@ -4605,13 +4776,13 @@ sub numify { if ($x -> is_nan()) { require Math::Complex; - my $inf = Math::Complex::Inf(); + my $inf = $Math::Complex::Inf; return $inf - $inf; } if ($x -> is_inf()) { require Math::Complex; - my $inf = Math::Complex::Inf(); + my $inf = $Math::Complex::Inf; return $x -> is_negative() ? -$inf : $inf; } @@ -4625,65 +4796,97 @@ sub numify { sub import { my $class = shift; - my $l = scalar @_; - my $lib = ''; - my @a; - my $lib_kind = 'try'; - $IMPORT=1; - for (my $i = 0; $i < $l ; $i++) { - if ($_[$i] eq ':constant') { - # This causes overlord er load to step in. 'binary' and 'integer' - # are handled by BigInt. - overload::constant float => sub { $class->new(shift); }; - } elsif ($_[$i] eq 'upgrade') { - # this causes upgrading - $upgrade = $_[$i+1]; # or undef to disable - $i++; - } elsif ($_[$i] eq 'downgrade') { - # this causes downgrading - $downgrade = $_[$i+1]; # or undef to disable - $i++; - } elsif ($_[$i] =~ /^(lib|try|only)\z/) { - # alternative library - $lib = $_[$i+1] || ''; # default Calc - $lib_kind = $1; # lib, try or only - $i++; - } elsif ($_[$i] eq 'with') { + $IMPORT++; # remember we did import() + + my @import = ('objectify'); + my @a; # unrecognized arguments + + while (@_) { + my $param = shift; + + # Enable overloading of constants. + + if ($param eq ':constant') { + overload::constant + + integer => sub { + $class -> new(shift); + }, + + float => sub { + $class -> new(shift); + }, + + binary => sub { + # E.g., a literal 0377 shall result in an object whose value + # is decimal 255, but new("0377") returns decimal 377. + return $class -> from_oct($_[0]) if $_[0] =~ /^0_*[0-7]/; + $class -> new(shift); + }; + next; + } + + # Upgrading. + + if ($param eq 'upgrade') { + $class -> upgrade(shift); + next; + } + + # Downgrading. + + if ($param eq 'downgrade') { + $class -> downgrade(shift); + next; + } + + # Accuracy. + + if ($param eq 'accuracy') { + $class -> accuracy(shift); + next; + } + + # Precision. + + if ($param eq 'precision') { + $class -> precision(shift); + next; + } + + # Rounding mode. + + if ($param eq 'round_mode') { + $class -> round_mode(shift); + next; + } + + # Backend library. + + if ($param =~ /^(lib|try|only)\z/) { + push @import, $param; + push @import, shift() if @_; + next; + } + + if ($param eq 'with') { # alternative class for our private parts() # XXX: no longer supported - # $LIB = $_[$i+1] || 'Math::BigInt'; - $i++; - } else { - push @a, $_[$i]; + # $LIB = shift() || 'Calc'; + # carp "'with' is no longer supported, use 'lib', 'try', or 'only'"; + shift; + next; } - } - - $lib =~ tr/a-zA-Z0-9,://cd; # restrict to sane characters - # let use Math::BigInt lib => 'GMP'; use Math::BigFloat; still work - my $mbilib = eval { Math::BigInt->config('lib') }; - if ((defined $mbilib) && ($LIB eq 'Math::BigInt::Calc')) { - # $LIB already loaded - Math::BigInt->import($lib_kind, "$lib, $mbilib", 'objectify'); - } else { - # $LIB not loaded, or with ne "Math::BigInt::Calc" - $lib .= ",$mbilib" if defined $mbilib; - $lib =~ s/^,//; # don't leave empty - # replacement library can handle lib statement, but also could ignore it + # Unrecognized parameter. - # Perl < 5.6.0 dies with "out of memory!" when eval() and ':constant' is - # used in the same script, or eval inside import(). So we require MBI: - require Math::BigInt; - Math::BigInt->import($lib_kind => $lib, 'objectify'); - } - if ($@) { - croak("Couldn't load $lib: $! $@"); + push @a, $param; } - # find out which one was actually loaded - $LIB = Math::BigInt->config('lib'); - # register us with MBI to get notified of future lib changes - Math::BigInt::_register_callback($class, sub { $LIB = $_[0]; }); + Math::BigInt -> import(@import); + + # find out which one was actually loaded + $LIB = Math::BigInt -> config('lib'); $class->export_to_level(1, $class, @a); # export wanted functions } @@ -4945,7 +5148,8 @@ sub _log_10 { } ($x->{_e}, $x->{_es}) = _e_sub($x->{_e}, $LIB->_new($dbd), $x->{_es}, $dbd_sign); # 123 => 1.23 - + #($x->{_e}, $x->{_es}) = + # $LIB -> _ssub($x->{_e}, $x->{_es}, $LIB->_new($dbd), $dbd_sign); } # Now: 0.1 <= $x < 10 (and possible correction in l_10) @@ -5035,6 +5239,7 @@ sub _e_sub { # flip sign $ys = $ys eq '+' ? '-' : '+'; # swap sign of second operand ... _e_add($x, $y, $xs, $ys); # ... and let _e_add() do the job + #$LIB -> _sadd($x, $xs, $y, $ys); # ... and let $LIB -> _sadd() do the job } sub _pow { @@ -5146,7 +5351,7 @@ __END__ =head1 NAME -Math::BigFloat - Arbitrary size floating point math package +Math::BigFloat - arbitrary size floating point math package =head1 SYNOPSIS @@ -5169,10 +5374,13 @@ Math::BigFloat - Arbitrary size floating point math package $x = Math::BigFloat->new($str); # defaults to 0 $x = Math::BigFloat->new('0x123'); # from hexadecimal + $x = Math::BigFloat->new('0o377'); # from octal $x = Math::BigFloat->new('0b101'); # from binary $x = Math::BigFloat->from_hex('0xc.afep+3'); # from hex $x = Math::BigFloat->from_hex('cafe'); # ditto $x = Math::BigFloat->from_oct('1.3267p-4'); # from octal + $x = Math::BigFloat->from_oct('01.3267p-4'); # ditto + $x = Math::BigFloat->from_oct('0o1.3267p-4'); # ditto $x = Math::BigFloat->from_oct('0377'); # ditto $x = Math::BigFloat->from_bin('0b1.1001p-4'); # from binary $x = Math::BigFloat->from_bin('0101'); # ditto @@ -5297,6 +5505,9 @@ Math::BigFloat - Arbitrary size floating point math package $x->nparts(); # mantissa and exponent (normalised) $x->eparts(); # mantissa and exponent (engineering notation) $x->dparts(); # integer and fraction part + $x->fparts(); # numerator and denominator + $x->numerator(); # numerator + $x->denominator(); # denominator # Conversion methods (do not modify the invocand) @@ -5330,7 +5541,8 @@ exactly what you expect. =head2 Input Input values to these routines may be any scalar number or string that looks -like a number and represents a floating point number. +like a number. Anything that is accepted by Perl as a literal numeric constant +should be accepted by this module. =over @@ -5340,48 +5552,77 @@ Leading and trailing whitespace is ignored. =item * -Leading and trailing zeros are ignored. +Leading zeros are ignored, except for floating point numbers with a binary +exponent, in which case the number is interpreted as an octal floating point +number. For example, "01.4p+0" gives 1.5, "00.4p+0" gives 0.5, but "0.4p+0" +gives a NaN. And while "0377" gives 255, "0377p0" gives 255. =item * -If the string has a "0x" prefix, it is interpreted as a hexadecimal number. +If the string has a "0x" or "0X" prefix, it is interpreted as a hexadecimal +number. =item * -If the string has a "0b" prefix, it is interpreted as a binary number. +If the string has a "0o" or "0O" prefix, it is interpreted as an octal number. A +floating point literal with a "0" prefix is also interpreted as an octal number. =item * -For hexadecimal and binary numbers, the exponent must be separated from the -significand (mantissa) by the letter "p" or "P", not "e" or "E" as with decimal -numbers. +If the string has a "0b" or "0B" prefix, it is interpreted as a binary number. =item * -One underline is allowed between any two digits, including hexadecimal and -binary digits. +Underline characters are allowed in the same way as they are allowed in literal +numerical constants. =item * If the string can not be interpreted, NaN is returned. -=back +=item * + +For hexadecimal, octal, and binary floating point numbers, the exponent must be +separated from the significand (mantissa) by the letter "p" or "P", not "e" or +"E" as with decimal numbers. -Octal numbers are typically prefixed by "0", but since leading zeros are -stripped, these methods can not automatically recognize octal numbers, so use -the constructor from_oct() to interpret octal strings. +=back Some examples of valid string input Input string Resulting value + 123 123 1.23e2 123 12300e-2 123 - 0xcafe 51966 - 0b1101 13 + 67_538_754 67538754 -4_5_6.7_8_9e+0_1_0 -4567890000000 + + 0x13a 314 + 0x13ap0 314 + 0x1.3ap+8 314 + 0x0.00013ap+24 314 + 0x13a000p-12 314 + + 0o472 314 + 0o1.164p+8 314 + 0o0.0001164p+20 314 + 0o1164000p-10 314 + + 0472 472 Note! + 01.164p+8 314 + 00.0001164p+20 314 + 01164000p-10 314 + + 0b100111010 314 + 0b1.0011101p+8 314 + 0b0.00010011101p+12 314 + 0b100111010000p-3 314 + 0x1.921fb5p+1 3.14159262180328369140625e+0 + 0o1.2677025p1 2.71828174591064453125 + 01.2677025p1 2.71828174591064453125 0b1.1001p-4 9.765625e-2 =head2 Output @@ -5752,76 +5993,103 @@ C: $x = Math::BigFloat->new(2.5); $y = $x->as_number('odd'); # $y = 3 -=head1 Autocreating constants +=head1 NUMERIC LITERALS -After C all the floating point constants -in the given scope are converted to C. This conversion -happens at compile time. +After C all numeric literals in the given scope +are converted to C objects. This conversion happens at compile +time. -In particular +For example, - perl -MMath::BigFloat=:constant -e 'print 2E-100,"\n"' + perl -MMath::BigFloat=:constant -le 'print 2e-150' -prints the value of C<2E-100>. Note that without conversion of -constants the expression 2E-100 will be calculated as normal floating point -number. +prints the exact value of C<2e-150>. Note that without conversion of constants +the expression C<2e-150> is calculated using Perl scalars, which leads to an +inaccuracte result. -Please note that ':constant' does not affect integer constants, nor binary -nor hexadecimal constants. Use L or L to get this to -work. +Note that strings are not affected, so that -=head2 Math library + use Math::BigFloat qw/:constant/; -Math with the numbers is done (by default) by a module called -Math::BigInt::Calc. This is equivalent to saying: + $y = "1234567890123456789012345678901234567890" + + "123456789123456789"; - use Math::BigFloat lib => 'Calc'; +does not give you what you expect. You need an explicit Math::BigFloat->new() +around at least one of the operands. You should also quote large constants to +prevent loss of precision: -You can change this by using: + use Math::BigFloat; - use Math::BigFloat lib => 'GMP'; + $x = Math::BigFloat->new("1234567889123456789123456789123456789"); -B: General purpose packages should not be explicit about the library -to use; let the script author decide which is best. +Without the quotes Perl converts the large number to a floating point constant +at compile time, and then converts the result to a Math::BigFloat object at +runtime, which results in an inaccurate result. -Note: The keyword 'lib' will warn when the requested library could not be -loaded. To suppress the warning use 'try' instead: +=head2 Hexadecimal, octal, and binary floating point literals - use Math::BigFloat try => 'GMP'; +Perl (and this module) accepts hexadecimal, octal, and binary floating point +literals, but use them with care with Perl versions before v5.32.0, because some +versions of Perl silently give the wrong result. Below are some examples of +different ways to write the number decimal 314. -If your script works with huge numbers and Calc is too slow for them, -you can also for the loading of one of these libraries and if none -of them can be used, the code will die: +Hexadecimal floating point literals: - use Math::BigFloat only => 'GMP,Pari'; + 0x1.3ap+8 0X1.3AP+8 + 0x1.3ap8 0X1.3AP8 + 0x13a0p-4 0X13A0P-4 -The following would first try to find Math::BigInt::Foo, then -Math::BigInt::Bar, and when this also fails, revert to Math::BigInt::Calc: +Octal floating point literals (with "0" prefix): - use Math::BigFloat lib => 'Foo,Math::BigInt::Bar'; + 01.164p+8 01.164P+8 + 01.164p8 01.164P8 + 011640p-4 011640P-4 -See the respective low-level library documentation for further details. +Octal floating point literals (with "0o" prefix) (requires v5.34.0): -Please note that Math::BigFloat does B use the denoted library itself, -but it merely passes the lib argument to Math::BigInt. So, instead of the need -to do: + 0o1.164p+8 0O1.164P+8 + 0o1.164p8 0O1.164P8 + 0o11640p-4 0O11640P-4 - use Math::BigInt lib => 'GMP'; - use Math::BigFloat; +Binary floating point literals: -you can roll it all into one line: + 0b1.0011101p+8 0B1.0011101P+8 + 0b1.0011101p8 0B1.0011101P8 + 0b10011101000p-2 0B10011101000P-2 - use Math::BigFloat lib => 'GMP'; +=head2 Math library -It is also possible to just require Math::BigFloat: +Math with the numbers is done (by default) by a module called +Math::BigInt::Calc. This is equivalent to saying: - require Math::BigFloat; + use Math::BigFloat lib => "Calc"; -This will load the necessary things (like BigInt) when they are needed, and -automatically. +You can change this by using: + + use Math::BigFloat lib => "GMP"; + +B: General purpose packages should not be explicit about the library to +use; let the script author decide which is best. + +Note: The keyword 'lib' will warn when the requested library could not be +loaded. To suppress the warning use 'try' instead: -See L for more details than you ever wanted to know about using -a different low-level library. + use Math::BigFloat try => "GMP"; + +If your script works with huge numbers and Calc is too slow for them, you can +also for the loading of one of these libraries and if none of them can be used, +the code will die: + + use Math::BigFloat only => "GMP,Pari"; + +The following would first try to find Math::BigInt::Foo, then Math::BigInt::Bar, +and when this also fails, revert to Math::BigInt::Calc: + + use Math::BigFloat lib => "Foo,Math::BigInt::Bar"; + +See the respective low-level library documentation for further details. + +See L for more details about using a different low-level library. =head2 Using Math::BigInt::Lite @@ -5944,8 +6212,7 @@ influence any further operation. Please report any bugs or feature requests to C, or through the web interface at -L -(requires login). +L (requires login). We will be notified, and then you'll automatically be notified of progress on your bug as I make changes. @@ -5959,17 +6226,13 @@ You can also look for information at: =over 4 -=item * RT: CPAN's request tracker - -L +=item * GitHub -=item * AnnoCPAN: Annotated CPAN documentation +L -L +=item * RT: CPAN's request tracker -=item * CPAN Ratings - -L +L =item * MetaCPAN @@ -5979,6 +6242,10 @@ L L +=item * CPAN Ratings + +L + =item * The Bignum mailing list =over 4 @@ -6006,11 +6273,10 @@ the same terms as Perl itself. =head1 SEE ALSO -L and L as well as the backends +L and L as well as the backends L, L, and L. -The pragmas L, L and L also might be of interest -because they solve the autoupgrading/downgrading issue, at least partly. +The pragmas L, L and L. =head1 AUTHORS @@ -6030,7 +6296,7 @@ Florian Ragwitz Eflora@cpan.orgE, 2010. =item * -Peter John Acklam Epjacklam@online.noE, 2011-. +Peter John Acklam Epjacklam@gmail.comE, 2011-. =back diff --git a/gnu/usr.bin/perl/cpan/Math-BigInt/lib/Math/BigInt.pm b/gnu/usr.bin/perl/cpan/Math-BigInt/lib/Math/BigInt.pm index 185f8028350..489dbb6ce5b 100644 --- a/gnu/usr.bin/perl/cpan/Math-BigInt/lib/Math/BigInt.pm +++ b/gnu/usr.bin/perl/cpan/Math-BigInt/lib/Math/BigInt.pm @@ -20,9 +20,11 @@ use 5.006001; use strict; use warnings; -use Carp qw< carp croak >; +use Carp qw< carp croak >; +use Scalar::Util qw< blessed >; -our $VERSION = '1.999818'; +our $VERSION = '1.999830'; +$VERSION =~ tr/_//d; require Exporter; our @ISA = qw(Exporter); @@ -45,44 +47,44 @@ use overload '+' => sub { $_[0] -> copy() -> badd($_[1]); }, - '-' => sub { my $c = $_[0] -> copy; + '-' => sub { my $c = $_[0] -> copy(); $_[2] ? $c -> bneg() -> badd($_[1]) : $c -> bsub($_[1]); }, '*' => sub { $_[0] -> copy() -> bmul($_[1]); }, '/' => sub { $_[2] ? ref($_[0]) -> new($_[1]) -> bdiv($_[0]) - : $_[0] -> copy -> bdiv($_[1]); }, + : $_[0] -> copy() -> bdiv($_[1]); }, '%' => sub { $_[2] ? ref($_[0]) -> new($_[1]) -> bmod($_[0]) - : $_[0] -> copy -> bmod($_[1]); }, + : $_[0] -> copy() -> bmod($_[1]); }, '**' => sub { $_[2] ? ref($_[0]) -> new($_[1]) -> bpow($_[0]) - : $_[0] -> copy -> bpow($_[1]); }, + : $_[0] -> copy() -> bpow($_[1]); }, '<<' => sub { $_[2] ? ref($_[0]) -> new($_[1]) -> blsft($_[0]) - : $_[0] -> copy -> blsft($_[1]); }, + : $_[0] -> copy() -> blsft($_[1]); }, '>>' => sub { $_[2] ? ref($_[0]) -> new($_[1]) -> brsft($_[0]) - : $_[0] -> copy -> brsft($_[1]); }, + : $_[0] -> copy() -> brsft($_[1]); }, # overload key: assign - '+=' => sub { $_[0]->badd($_[1]); }, + '+=' => sub { $_[0] -> badd($_[1]); }, - '-=' => sub { $_[0]->bsub($_[1]); }, + '-=' => sub { $_[0] -> bsub($_[1]); }, - '*=' => sub { $_[0]->bmul($_[1]); }, + '*=' => sub { $_[0] -> bmul($_[1]); }, - '/=' => sub { scalar $_[0]->bdiv($_[1]); }, + '/=' => sub { scalar $_[0] -> bdiv($_[1]); }, - '%=' => sub { $_[0]->bmod($_[1]); }, + '%=' => sub { $_[0] -> bmod($_[1]); }, - '**=' => sub { $_[0]->bpow($_[1]); }, + '**=' => sub { $_[0] -> bpow($_[1]); }, - '<<=' => sub { $_[0]->blsft($_[1]); }, + '<<=' => sub { $_[0] -> blsft($_[1]); }, - '>>=' => sub { $_[0]->brsft($_[1]); }, + '>>=' => sub { $_[0] -> brsft($_[1]); }, # 'x=' => sub { }, @@ -116,13 +118,13 @@ use overload # overload key: str_comparison -# 'lt' => sub { $_[2] ? ref($_[0]) -> new($_[1]) -> bstrlt($_[0]) +# 'lt' => sub { $_[2] ? ref($_[0]) -> new($_[1]) -> bstrlt($_[0]) # : $_[0] -> bstrlt($_[1]); }, # # 'le' => sub { $_[2] ? ref($_[0]) -> new($_[1]) -> bstrle($_[0]) # : $_[0] -> bstrle($_[1]); }, # -# 'gt' => sub { $_[2] ? ref($_[0]) -> new($_[1]) -> bstrgt($_[0]) +# 'gt' => sub { $_[2] ? ref($_[0]) -> new($_[1]) -> bstrgt($_[0]) # : $_[0] -> bstrgt($_[1]); }, # # 'ge' => sub { $_[2] ? ref($_[0]) -> new($_[1]) -> bstrge($_[0]) @@ -135,17 +137,17 @@ use overload # overload key: binary '&' => sub { $_[2] ? ref($_[0]) -> new($_[1]) -> band($_[0]) - : $_[0] -> copy -> band($_[1]); }, + : $_[0] -> copy() -> band($_[1]); }, '&=' => sub { $_[0] -> band($_[1]); }, '|' => sub { $_[2] ? ref($_[0]) -> new($_[1]) -> bior($_[0]) - : $_[0] -> copy -> bior($_[1]); }, + : $_[0] -> copy() -> bior($_[1]); }, '|=' => sub { $_[0] -> bior($_[1]); }, '^' => sub { $_[2] ? ref($_[0]) -> new($_[1]) -> bxor($_[0]) - : $_[0] -> copy -> bxor($_[1]); }, + : $_[0] -> copy() -> bxor($_[1]); }, '^=' => sub { $_[0] -> bxor($_[1]); }, @@ -182,9 +184,9 @@ use overload 'atan2' => sub { $_[2] ? ref($_[0]) -> new($_[1]) -> batan2($_[0]) : $_[0] -> copy() -> batan2($_[1]); }, - 'cos' => sub { $_[0] -> copy -> bcos(); }, + 'cos' => sub { $_[0] -> copy() -> bcos(); }, - 'sin' => sub { $_[0] -> copy -> bsin(); }, + 'sin' => sub { $_[0] -> copy() -> bsin(); }, 'exp' => sub { $_[0] -> copy() -> bexp($_[1]); }, @@ -204,7 +206,7 @@ use overload '0+' => sub { $_[0] -> numify(); }, - '=' => sub { $_[0]->copy(); }, + '=' => sub { $_[0] -> copy(); }, ; @@ -228,11 +230,14 @@ our $_trap_inf = 0; # are infs ok? set w/ config() my $nan = 'NaN'; # constants for easier life -my $LIB = 'Math::BigInt::Calc'; # module to do the low level math - # default is Calc.pm -my $IMPORT = 0; # was import() called yet? - # used to make require work -my %CALLBACKS; # callbacks to notify on lib loads +# Module to do the low level math. + +my $DEFAULT_LIB = 'Math::BigInt::Calc'; +my $LIB; + +# Has import() been called yet? Needed to make "require" work. + +my $IMPORT = 0; ############################################################################## # the old code had $rnd_mode, so we need to support it, too @@ -267,18 +272,24 @@ BEGIN { ############################################################################### sub round_mode { - no strict 'refs'; - # make Class->round_mode() work my $self = shift; my $class = ref($self) || $self || __PACKAGE__; - if (defined $_[0]) { + + if (@_) { # setter my $m = shift; - if ($m !~ /^(even|odd|\+inf|\-inf|zero|trunc|common)$/) { - croak("Unknown round mode '$m'"); - } - return ${"${class}::round_mode"} = $m; + croak("The value for 'round_mode' must be defined") + unless defined $m; + croak("Unknown round mode '$m'") + unless $m =~ /^(even|odd|\+inf|\-inf|zero|trunc|common)$/; + no strict 'refs'; + ${"${class}::round_mode"} = $m; + } + + else { # getter + no strict 'refs'; + my $m = ${"${class}::round_mode"}; + defined($m) ? $m : $round_mode; } - ${"${class}::round_mode"}; } sub upgrade { @@ -306,17 +317,23 @@ sub downgrade { } sub div_scale { - no strict 'refs'; - # make Class->div_scale() work my $self = shift; my $class = ref($self) || $self || __PACKAGE__; - if (defined $_[0]) { - if ($_[0] < 0) { - croak('div_scale must be greater than zero'); - } - ${"${class}::div_scale"} = $_[0]; + + if (@_) { # setter + my $ds = shift; + croak("The value for 'div_scale' must be defined") unless defined $ds; + croak("The value for 'div_scale' must be positive") unless $ds > 0; + $ds = $ds -> numify() if defined(blessed($ds)); + no strict 'refs'; + ${"${class}::div_scale"} = $ds; + } + + else { # getter + no strict 'refs'; + my $ds = ${"${class}::div_scale"}; + defined($ds) ? $ds : $div_scale; } - ${"${class}::div_scale"}; } sub accuracy { @@ -530,49 +547,54 @@ sub new { my $selfref = ref $self; my $class = $selfref || $self; - # The POD says: - # - # "Currently, Math::BigInt->new() defaults to 0, while Math::BigInt->new('') - # results in 'NaN'. This might change in the future, so use always the - # following explicit forms to get a zero or NaN: - # $zero = Math::BigInt->bzero(); - # $nan = Math::BigInt->bnan(); - # - # But although this use has been discouraged for more than 10 years, people - # apparently still use it, so we still support it. + # Make "require" work. - return $self->bzero() unless @_; + $class -> import() if $IMPORT == 0; - my ($wanted, $a, $p, $r) = @_; + # Although this use has been discouraged for more than 10 years, people + # apparently still use it, so we still support it. - # Always return a new object, so if called as an instance method, copy the - # invocand, and if called as a class method, initialize a new object. + return $class -> bzero() unless @_; - $self = $selfref ? $self -> copy() - : bless {}, $class; + my ($wanted, @r) = @_; - unless (defined $wanted) { - #carp("Use of uninitialized value in new()"); - return $self->bzero($a, $p, $r); + if (!defined($wanted)) { + #if (warnings::enabled("uninitialized")) { + # warnings::warn("uninitialized", + # "Use of uninitialized value in new()"); + #} + return $class -> bzero(@r); } - if (ref($wanted) && $wanted->isa($class)) { # MBI or subclass - # Using "$copy = $wanted -> copy()" here fails some tests. Fixme! - my $copy = $class -> copy($wanted); - if ($selfref) { - %$self = %$copy; - } else { - $self = $copy; - } - return $self; + if (!ref($wanted) && $wanted eq "") { + #if (warnings::enabled("numeric")) { + # warnings::warn("numeric", + # q|Argument "" isn't numeric in new()|); + #} + #return $class -> bzero(@r); + return $class -> bnan(@r); } - $class->import() if $IMPORT == 0; # make require work + # Initialize a new object. + + $self = bless {}, $class; + + # Math::BigInt or subclass + + if (defined(blessed($wanted)) && $wanted -> isa($class)) { + + # We don't copy the accuracy and precision, because a new object should + # get them from the global configuration. + + $self -> {sign} = $wanted -> {sign}; + $self -> {value} = $LIB -> _copy($wanted -> {value}); + $self->round(@r) unless @r >= 2 && !defined($r[0]) && !defined($r[1]); + return $self; + } # Shortcut for non-zero scalar integers with no non-zero exponent. - if (!ref($wanted) && - $wanted =~ / ^ + if ($wanted =~ / ^ ([+-]?) # optional sign ([1-9][0-9]*) # non-zero significand (\.0*)? # ... with optional zero fraction @@ -584,16 +606,7 @@ sub new { my $abs = $2; $self->{sign} = $sgn || '+'; $self->{value} = $LIB->_new($abs); - - no strict 'refs'; - if (defined($a) || defined($p) - || defined(${"${class}::precision"}) - || defined(${"${class}::accuracy"})) - { - $self->round($a, $p, $r) - unless @_ >= 3 && !defined $a && !defined $p; - } - + $self->round(@r) unless @r >= 2 && !defined($r[0]) && !defined($r[1]); return $self; } @@ -601,112 +614,118 @@ sub new { if ($wanted =~ /^\s*([+-]?)inf(inity)?\s*\z/i) { my $sgn = $1 || '+'; - $self->{sign} = $sgn . 'inf'; # set a default sign for bstr() - return $class->binf($sgn); + $self = $class -> binf($sgn); + $self->round(@r) unless @r >= 2 && !defined($r[0]) && !defined($r[1]); + return $self; } # Handle explicit NaNs (not the ones returned due to invalid input). if ($wanted =~ /^\s*([+-]?)nan\s*\z/i) { $self = $class -> bnan(); - $self->round($a, $p, $r) unless @_ >= 3 && !defined $a && !defined $p; + $self->round(@r) unless @r >= 2 && !defined($r[0]) && !defined($r[1]); return $self; } - # Handle hexadecimal numbers. + my @parts; - if ($wanted =~ /^\s*[+-]?0[Xx]/) { - $self = $class -> from_hex($wanted); - $self->round($a, $p, $r) unless @_ >= 3 && !defined $a && !defined $p; - return $self; - } + if ( + # Handle hexadecimal numbers. We auto-detect hexadecimal numbers if they + # have a "0x", "0X", "x", or "X" prefix, cf. CORE::oct(). - # Handle binary numbers. + $wanted =~ /^\s*[+-]?0?[Xx]/ and + @parts = $class -> _hex_str_to_lib_parts($wanted) - if ($wanted =~ /^\s*[+-]?0[Bb]/) { - $self = $class -> from_bin($wanted); - $self->round($a, $p, $r) unless @_ >= 3 && !defined $a && !defined $p; - return $self; - } + or - # Split string into mantissa, exponent, integer, fraction, value, and sign. - my ($mis, $miv, $mfv, $es, $ev) = _split($wanted); - if (!ref $mis) { - if ($_trap_nan) { - croak("$wanted is not a number in $class"); - } - $self->{value} = $LIB->_zero(); - $self->{sign} = $nan; - return $self; - } + # Handle octal numbers. We auto-detect octal numbers if they have a + # "0o", "0O", "o", "O" prefix, cf. CORE::oct(). - if (!ref $miv) { - # _from_hex or _from_bin - $self->{value} = $mis->{value}; - $self->{sign} = $mis->{sign}; - return $self; # throw away $mis - } + $wanted =~ /^\s*[+-]?0?[Oo]/ and + @parts = $class -> _oct_str_to_lib_parts($wanted) - # Make integer from mantissa by adjusting exponent, then convert to a - # Math::BigInt. - $self->{sign} = $$mis; # store sign - $self->{value} = $LIB->_zero(); # for all the NaN cases - my $e = int("$$es$$ev"); # exponent (avoid recursion) - if ($e > 0) { - my $diff = $e - CORE::length($$mfv); - if ($diff < 0) { # Not integer - if ($_trap_nan) { - croak("$wanted not an integer in $class"); - } - #print "NOI 1\n"; - return $upgrade->new($wanted, $a, $p, $r) if defined $upgrade; - $self->{sign} = $nan; - } else { # diff >= 0 - # adjust fraction and add it to value - #print "diff > 0 $$miv\n"; - $$miv = $$miv . ($$mfv . '0' x $diff); + or + + # Handle binary numbers. We auto-detect binary numbers if they have a + # "0b", "0B", "b", or "B" prefix, cf. CORE::oct(). + + $wanted =~ /^\s*[+-]?0?[Bb]/ and + @parts = $class -> _bin_str_to_lib_parts($wanted) + + or + + # At this point, what is left are decimal numbers that aren't handled + # above and octal floating point numbers that don't have any of the + # "0o", "0O", "o", or "O" prefixes. First see if it is a decimal number. + + @parts = $class -> _dec_str_to_lib_parts($wanted) + or + + # See if it is an octal floating point number. The extra check is + # included because _oct_str_to_lib_parts() accepts octal numbers that + # don't have a prefix (this is needed to make it work with, e.g., + # from_oct() that don't require a prefix). However, Perl requires a + # prefix for octal floating point literals. For example, "1p+0" is not + # valid, but "01p+0" and "0__1p+0" are. + + $wanted =~ /^\s*[+-]?0_*\d/ and + @parts = $class -> _oct_str_to_lib_parts($wanted)) + { + # The value is an integer iff the exponent is non-negative. + + if ($parts[2] eq '+') { + $self -> {sign} = $parts[0]; + $self -> {value} = $LIB -> _lsft($parts[1], $parts[3], 10); + $self->round(@r) unless @r >= 2 && !defined($r[0]) && !defined($r[1]); + return $self; } + + # If we get here, the value is a valid number, but it is not an integer. + + return $upgrade -> new($wanted, @r) if defined $upgrade; + return $class -> bnan(); } - else { - if ($$mfv ne '') { # e <= 0 - # fraction and negative/zero E => NOI - if ($_trap_nan) { - croak("$wanted not an integer in $class"); - } - #print "NOI 2 \$\$mfv '$$mfv'\n"; - return $upgrade->new($wanted, $a, $p, $r) if defined $upgrade; - $self->{sign} = $nan; - } elsif ($e < 0) { - # xE-y, and empty mfv - # Split the mantissa at the decimal point. E.g., if - # $$miv = 12345 and $e = -2, then $frac = 45 and $$miv = 123. - - my $frac = substr($$miv, $e); # $frac is fraction part - substr($$miv, $e) = ""; # $$miv is now integer part - - if ($frac =~ /[^0]/) { - if ($_trap_nan) { - croak("$wanted not an integer in $class"); - } - #print "NOI 3\n"; - return $upgrade->new($wanted, $a, $p, $r) if defined $upgrade; - $self->{sign} = $nan; - } + # If we get here, the value is neither a valid decimal, binary, octal, or + # hexadecimal number. It is not explicit an Inf or a NaN either. + + return $class -> bnan(); +} + +# Create a Math::BigInt from a decimal string. This is an equivalent to +# from_hex(), from_oct(), and from_bin(). It is like new() except that it does +# not accept anything but a string representing a finite decimal number. + +sub from_dec { + my $self = shift; + my $selfref = ref $self; + my $class = $selfref || $self; + + # Don't modify constant (read-only) objects. + + return if $selfref && $self->modify('from_dec'); + + my $str = shift; + my @r = @_; + + # If called as a class method, initialize a new object. + + $self = $class -> bzero() unless $selfref; + + if (my @parts = $class -> _dec_str_to_lib_parts($str)) { + + # The value is an integer iff the exponent is non-negative. + + if ($parts[2] eq '+') { + $self -> {sign} = $parts[0]; + $self -> {value} = $LIB -> _lsft($parts[1], $parts[3], 10); + return $self -> round(@r); } - } - unless ($self->{sign} eq $nan) { - $self->{sign} = '+' if $$miv eq '0'; # normalize -0 => +0 - $self->{value} = $LIB->_new($$miv) if $self->{sign} =~ /^[+-]$/; + return $upgrade -> new($str, @r) if defined $upgrade; } - # If any of the globals are set, use them to round, and store them inside - # $self. Do not round for new($x, undef, undef) since that is used by MBF - # to signal no rounding. - - $self->round($a, $p, $r) unless @_ >= 3 && !defined $a && !defined $p; - $self; + return $self -> bnan(@r); } # Create a Math::BigInt from a hexadecimal string. @@ -721,48 +740,26 @@ sub from_hex { return if $selfref && $self->modify('from_hex'); my $str = shift; + my @r = @_; # If called as a class method, initialize a new object. $self = $class -> bzero() unless $selfref; - if ($str =~ s/ - ^ - \s* - ( [+-]? ) - (0?x)? - ( - [0-9a-fA-F]* - ( _ [0-9a-fA-F]+ )* - ) - \s* - $ - //x) - { - # Get a "clean" version of the string, i.e., non-emtpy and with no - # underscores or invalid characters. - - my $sign = $1; - my $chrs = $3; - $chrs =~ tr/_//d; - $chrs = '0' unless CORE::length $chrs; - - # The library method requires a prefix. + if (my @parts = $class -> _hex_str_to_lib_parts($str)) { - $self->{value} = $LIB->_from_hex('0x' . $chrs); + # The value is an integer iff the exponent is non-negative. - # Place the sign. - - $self->{sign} = $sign eq '-' && ! $LIB->_is_zero($self->{value}) - ? '-' : '+'; + if ($parts[2] eq '+') { + $self -> {sign} = $parts[0]; + $self -> {value} = $LIB -> _lsft($parts[1], $parts[3], 10); + return $self -> round(@r); + } - return $self; + return $upgrade -> new($str, @r) if defined $upgrade; } - # CORE::hex() parses as much as it can, and ignores any trailing garbage. - # For backwards compatibility, we return NaN. - - return $self->bnan(); + return $self -> bnan(@r); } # Create a Math::BigInt from an octal string. @@ -777,47 +774,26 @@ sub from_oct { return if $selfref && $self->modify('from_oct'); my $str = shift; + my @r = @_; # If called as a class method, initialize a new object. $self = $class -> bzero() unless $selfref; - if ($str =~ s/ - ^ - \s* - ( [+-]? ) - ( - [0-7]* - ( _ [0-7]+ )* - ) - \s* - $ - //x) - { - # Get a "clean" version of the string, i.e., non-emtpy and with no - # underscores or invalid characters. - - my $sign = $1; - my $chrs = $2; - $chrs =~ tr/_//d; - $chrs = '0' unless CORE::length $chrs; + if (my @parts = $class -> _oct_str_to_lib_parts($str)) { - # The library method requires a prefix. + # The value is an integer iff the exponent is non-negative. - $self->{value} = $LIB->_from_oct('0' . $chrs); - - # Place the sign. - - $self->{sign} = $sign eq '-' && ! $LIB->_is_zero($self->{value}) - ? '-' : '+'; + if ($parts[2] eq '+') { + $self -> {sign} = $parts[0]; + $self -> {value} = $LIB -> _lsft($parts[1], $parts[3], 10); + return $self -> round(@r); + } - return $self; + return $upgrade -> new($str, @r) if defined $upgrade; } - # CORE::oct() parses as much as it can, and ignores any trailing garbage. - # For backwards compatibility, we return NaN. - - return $self->bnan(); + return $self -> bnan(@r); } # Create a Math::BigInt from a binary string. @@ -832,49 +808,26 @@ sub from_bin { return if $selfref && $self->modify('from_bin'); my $str = shift; + my @r = @_; # If called as a class method, initialize a new object. $self = $class -> bzero() unless $selfref; - if ($str =~ s/ - ^ - \s* - ( [+-]? ) - (0?b)? - ( - [01]* - ( _ [01]+ )* - ) - \s* - $ - //x) - { - # Get a "clean" version of the string, i.e., non-emtpy and with no - # underscores or invalid characters. - - my $sign = $1; - my $chrs = $3; - $chrs =~ tr/_//d; - $chrs = '0' unless CORE::length $chrs; - - # The library method requires a prefix. + if (my @parts = $class -> _bin_str_to_lib_parts($str)) { - $self->{value} = $LIB->_from_bin('0b' . $chrs); + # The value is an integer iff the exponent is non-negative. - # Place the sign. - - $self->{sign} = $sign eq '-' && ! $LIB->_is_zero($self->{value}) - ? '-' : '+'; + if ($parts[2] eq '+') { + $self -> {sign} = $parts[0]; + $self -> {value} = $LIB -> _lsft($parts[1], $parts[3], 10); + return $self -> round(@r); + } - return $self; + return $upgrade -> new($str, @r) if defined $upgrade; } - # For consistency with from_hex() and from_oct(), we return NaN when the - # input is invalid. - - return $self->bnan(); - + return $self -> bnan(@r); } # Create a Math::BigInt from a byte string. @@ -892,13 +845,14 @@ sub from_bytes { unless $LIB->can('_from_bytes'); my $str = shift; + my @r = @_; # If called as a class method, initialize a new object. $self = $class -> bzero() unless $selfref; $self -> {sign} = '+'; $self -> {value} = $LIB -> _from_bytes($str); - return $self; + return $self -> round(@r); } sub from_base { @@ -942,7 +896,49 @@ sub from_base { $self -> {sign} = '+'; $self -> {value} = $LIB->_from_base($str, $base -> {value}, @_ ? shift() : ()); - return $self + return $self; +} + +sub from_base_num { + my $self = shift; + my $selfref = ref $self; + my $class = $selfref || $self; + + # Don't modify constant (read-only) objects. + + return if $selfref && $self->modify('from_base_num'); + + # Make sure we have an array of non-negative, finite, numerical objects. + + my $nums = shift; + $nums = [ @$nums ]; # create new reference + + for my $i (0 .. $#$nums) { + # Make sure we have an object. + $nums -> [$i] = $class -> new($nums -> [$i]) + unless ref($nums -> [$i]) && $nums -> [$i] -> isa($class); + # Make sure we have a finite, non-negative integer. + croak "the elements must be finite non-negative integers" + if $nums -> [$i] -> is_neg() || ! $nums -> [$i] -> is_int(); + } + + my $base = shift; + $base = $class -> new($base) unless ref($base) && $base -> isa($class); + + my @r = @_; + + # If called as a class method, initialize a new object. + + $self = $class -> bzero() unless $selfref; + + croak("from_base_num() requires a newer version of the $LIB library.") + unless $LIB->can('_from_base_num'); + + $self -> {sign} = '+'; + $self -> {value} = $LIB -> _from_base_num([ map { $_ -> {value} } @$nums ], + $base -> {value}); + + return $self -> round(@r); } sub bzero { @@ -1123,24 +1119,86 @@ sub bnan { $self -> {sign} = $nan; $self -> {value} = $LIB -> _zero(); + # If rounding parameters are given as arguments, use them. If no rounding + # parameters are given, and if called as a class method initialize the new + # instance with the class variables. + + if (@_) { + croak "can't specify both accuracy and precision" + if @_ >= 2 && defined $_[0] && defined $_[1]; + $self->{_a} = $_[0]; + $self->{_p} = $_[1]; + } else { + unless($selfref) { + $self->{_a} = $class -> accuracy(); + $self->{_p} = $class -> precision(); + } + } + return $self; } sub bpi { - # Calculate PI to N digits. Unless upgrading is in effect, returns the - # result truncated to an integer, that is, always returns '3'. - my ($self, $n) = @_; - if (@_ == 1) { - # called like Math::BigInt::bpi(10); - $n = $self; - $self = __PACKAGE__; + + # Called as Argument list + # --------- ------------- + # Math::BigInt->bpi() ("Math::BigInt") + # Math::BigInt->bpi(10) ("Math::BigInt", 10) + # $x->bpi() ($x) + # $x->bpi(10) ($x, 10) + # Math::BigInt::bpi() () + # Math::BigInt::bpi(10) (10) + # + # In ambiguous cases, we favour the OO-style, so the following case + # + # $n = Math::BigInt->new("10"); + # $x = Math::BigInt->bpi($n); + # + # which gives an argument list with the single element $n, is resolved as + # + # $n->bpi(); + + my $self = shift; + my $selfref = ref $self; + my $class = $selfref || $self; + + my @r; # rounding paramters + + # If bpi() is called as a function ... + # + # This cludge is necessary because we still support bpi() as a function. If + # bpi() is called with either no argument or one argument, and that one + # argument is either undefined or a scalar that looks like a number, then + # we assume bpi() is called as a function. + + if (@_ == 0 && + (defined($self) && !ref($self) && $self =~ /^\s*[+-]?\d/) + || + !defined($self)) + { + $r[0] = $self; + $class = __PACKAGE__; + $self = bless {}, $class; + } + + # ... or if bpi() is called as a method ... + + else { + @r = @_; + if ($selfref) { # bpi() called as instance method + return $self if $self -> modify('bpi'); + } else { # bpi() called as class method + $self = bless {}, $class; + } } - $self = ref($self) if ref($self); - return $upgrade->new($n) if defined $upgrade; + return $upgrade -> bpi(@r) if defined $upgrade; # hard-wired to "3" - $self->new(3); + $self -> {sign} = '+'; + $self -> {value} = $LIB -> _new("3"); + $self -> round(@r) unless @r >= 2 && !defined($r[0]) && !defined($r[1]); + return $self; } sub copy { @@ -1292,8 +1350,8 @@ sub bcmp { if (($x->{sign} !~ /^[+-]$/) || ($y->{sign} !~ /^[+-]$/)) { # handle +-inf and NaN - return undef if (($x->{sign} eq $nan) || ($y->{sign} eq $nan)); - return 0 if $x->{sign} eq $y->{sign} && $x->{sign} =~ /^[+-]inf$/; + return if (($x->{sign} eq $nan) || ($y->{sign} eq $nan)); + return 0 if $x->{sign} eq $y->{sign} && $x->{sign} =~ /^[+-]inf$/; return +1 if $x->{sign} eq '+inf'; return -1 if $x->{sign} eq '-inf'; return -1 if $y->{sign} eq '+inf'; @@ -1332,7 +1390,7 @@ sub bacmp { if (($x->{sign} !~ /^[+-]$/) || ($y->{sign} !~ /^[+-]$/)) { # handle +-inf and NaN - return undef if (($x->{sign} eq $nan) || ($y->{sign} eq $nan)); + return if (($x->{sign} eq $nan) || ($y->{sign} eq $nan)); return 0 if $x->{sign} =~ /^[+-]inf$/ && $y->{sign} =~ /^[+-]inf$/; return 1 if $x->{sign} =~ /^[+-]inf$/ && $y->{sign} !~ /^[+-]inf$/; return -1; @@ -1585,6 +1643,7 @@ sub bdec { #} sub badd { + # add second arg (BINT or string) to first (BINT) (modifies first) # return result as BINT @@ -1651,7 +1710,7 @@ sub bsub { return $x if $x -> modify('bsub'); - return $upgrade -> new($x) -> bsub($upgrade -> new($y), @r) + return $upgrade -> bsub($upgrade -> new($x), $upgrade -> new($y), @r) if defined $upgrade && (!$x -> isa($class) || !$y -> isa($class)); return $x -> round(@r) if $y -> is_zero(); @@ -2385,47 +2444,63 @@ sub bpow { ($class, $x, $y, @r) = objectify(2, @_); } - return $x if $x->modify('bpow'); + return $x if $x -> modify('bpow'); # $x and/or $y is a NaN - return $x->bnan() if $x->is_nan() || $y->is_nan(); + return $x -> bnan() if $x -> is_nan() || $y -> is_nan(); # $x and/or $y is a +/-Inf - if ($x->is_inf("-")) { - return $x->bzero() if $y->is_negative(); - return $x->bnan() if $y->is_zero(); - return $x if $y->is_odd(); - return $x->bneg(); - } elsif ($x->is_inf("+")) { - return $x->bzero() if $y->is_negative(); - return $x->bnan() if $y->is_zero(); + if ($x -> is_inf("-")) { + return $x -> bzero() if $y -> is_negative(); + return $x -> bnan() if $y -> is_zero(); + return $x if $y -> is_odd(); + return $x -> bneg(); + } elsif ($x -> is_inf("+")) { + return $x -> bzero() if $y -> is_negative(); + return $x -> bnan() if $y -> is_zero(); + return $x; + } elsif ($y -> is_inf("-")) { + return $x -> bnan() if $x -> is_one("-"); + return $x -> binf("+") if $x -> is_zero(); + return $x -> bone() if $x -> is_one("+"); + return $x -> bzero(); + } elsif ($y -> is_inf("+")) { + return $x -> bnan() if $x -> is_one("-"); + return $x -> bzero() if $x -> is_zero(); + return $x -> bone() if $x -> is_one("+"); + return $x -> binf("+"); + } + + if ($x -> is_zero()) { + return $x -> bone() if $y -> is_zero(); + return $x -> binf() if $y -> is_negative(); return $x; - } elsif ($y->is_inf("-")) { - return $x->bnan() if $x -> is_one("-"); - return $x->binf("+") if $x -> is_zero(); - return $x->bone() if $x -> is_one("+"); - return $x->bzero(); - } elsif ($y->is_inf("+")) { - return $x->bnan() if $x -> is_one("-"); - return $x->bzero() if $x -> is_zero(); - return $x->bone() if $x -> is_one("+"); - return $x->binf("+"); } - return $upgrade->bpow($upgrade->new($x), $y, @r) - if defined $upgrade && (!$y->isa($class) || $y->{sign} eq '-'); + if ($x -> is_one("+")) { + return $x; + } - $r[3] = $y; # no push! + if ($x -> is_one("-")) { + return $x if $y -> is_odd(); + return $x -> bneg(); + } - # 0 ** -y => ( 1 / (0 ** y)) => 1 / 0 => +inf - return $x->binf() if $y->is_negative() && $x->is_zero(); + # We don't support finite non-integers, so upgrade or return zero. The + # reason for returning zero, not NaN, is that all output is in the open + # interval (0,1), and truncating that to integer gives zero. - # 1 ** -y => 1 / (1 ** |y|) - return $x->bzero() if $y->is_negative() && !$LIB->_is_one($x->{value}); + if ($y->{sign} eq '-' || !$y -> isa($class)) { + return $upgrade -> bpow($upgrade -> new($x), $y, @r) + if defined $upgrade; + return $x -> bzero(); + } - $x->{value} = $LIB->_pow($x->{value}, $y->{value}); - $x->{sign} = $x->is_negative() && $y->is_odd() ? '-' : '+'; - $x->round(@r); + $r[3] = $y; # no push! + + $x->{value} = $LIB -> _pow($x->{value}, $y->{value}); + $x->{sign} = $x -> is_negative() && $y -> is_odd() ? '-' : '+'; + $x -> round(@r); } sub blog { @@ -2740,7 +2815,7 @@ sub bsin { return $x->bnan() if $x->{sign} !~ /^[+-]\z/; # -inf +inf or NaN => NaN - return $upgrade->new($x)->bsin(@r) if defined $upgrade; + return $upgrade -> bsin($upgrade -> new($x, @r)) if defined $upgrade; require Math::BigFloat; # calculate the result and truncate it to integer @@ -2760,11 +2835,11 @@ sub bcos { return $x->bnan() if $x->{sign} !~ /^[+-]\z/; # -inf +inf or NaN => NaN - return $upgrade->new($x)->bcos(@r) if defined $upgrade; + return $upgrade -> bcos($upgrade -> new($x), @r) if defined $upgrade; require Math::BigFloat; # calculate the result and truncate it to integer - my $t = Math::BigFloat->new($x)->bcos(@r)->as_int(); + my $t = Math::BigFloat -> bcos(Math::BigFloat -> new($x), @r) -> as_int(); $x->bone() if $t->is_one(); $x->bzero() if $t->is_zero(); @@ -2895,7 +2970,7 @@ sub bfac { my ($class, $x, @r) = ref($_[0]) ? (undef, @_) : objectify(1, @_); return $x if $x->modify('bfac') || $x->{sign} eq '+inf'; # inf => inf - return $x->bnan() if $x->{sign} ne '+'; # NaN, <0 etc => NaN + return $x->bnan() if $x->{sign} ne '+'; # NaN, <0 => NaN $x->{value} = $LIB->_fac($x->{value}); $x->round(@r); @@ -2906,7 +2981,8 @@ sub bdfac { my ($class, $x, @r) = ref($_[0]) ? (undef, @_) : objectify(1, @_); return $x if $x->modify('bdfac') || $x->{sign} eq '+inf'; # inf => inf - return $x->bnan() if $x->{sign} ne '+'; # NaN, <0 etc => NaN + return $x->bnan() if $x->is_nan() || $x <= -2; + return $x->bone() if $x <= 1; croak("bdfac() requires a newer version of the $LIB library.") unless $LIB->can('_dfac'); @@ -2915,6 +2991,44 @@ sub bdfac { $x->round(@r); } +sub btfac { + # compute triple factorial, modify $x in place + my ($class, $x, @r) = objectify(1, @_); + + return $x if $x->modify('btfac') || $x->{sign} eq '+inf'; # inf => inf + + return $x->bnan() if $x->is_nan(); + + my $k = $class -> new("3"); + return $x->bnan() if $x <= -$k; + + my $one = $class -> bone(); + return $x->bone() if $x <= $one; + + my $f = $x -> copy(); + while ($f -> bsub($k) > $one) { + $x -> bmul($f); + } + $x->round(@r); +} + +sub bmfac { + # compute multi-factorial + my ($class, $x, $k, @r) = objectify(2, @_); + + return $x if $x->modify('bmfac') || $x->{sign} eq '+inf'; + return $x->bnan() if $x->is_nan() || $k->is_nan() || $k < 1 || $x <= -$k; + + my $one = $class -> bone(); + return $x->bone() if $x <= $one; + + my $f = $x -> copy(); + while ($f -> bsub($k) > $one) { + $x -> bmul($f); + } + $x->round(@r); +} + sub bfib { # compute Fibonacci number(s) my ($class, $x, @r) = objectify(1, @_); @@ -3352,6 +3466,7 @@ sub bround { if (($pad > 0) && ($pad <= $len)) { substr($xs, -$pad, $pad) = '0' x $pad; # replace with '00...' + $xs =~ s/^0+(\d)/$1/; # "00000" -> "0" $put_back = 1; # need to put back } elsif ($pad > $len) { $x->bzero(); # round to '0' @@ -3373,7 +3488,6 @@ sub bround { last if $c != 0; # no overflow => early out } $xs = '1'.$xs if $c == 0; - } $x->{value} = $LIB->_new($xs) if $put_back == 1; # put back, if needed @@ -3708,6 +3822,34 @@ sub dparts { return ($int, $frc); } +sub fparts { + my $x = shift; + my $class = ref $x; + + croak("fparts() is an instance method") unless $class; + + return ($x -> copy(), + $x -> is_nan() ? $class -> bnan() : $class -> bone()); +} + +sub numerator { + my $x = shift; + my $class = ref $x; + + croak("numerator() is an instance method") unless $class; + + return $x -> copy(); +} + +sub denominator { + my $x = shift; + my $class = ref $x; + + croak("denominator() is an instance method") unless $class; + + return $x -> is_nan() ? $class -> bnan() : $class -> bone(); +} + ############################################################################### # String conversion methods ############################################################################### @@ -3895,6 +4037,37 @@ sub to_base { return $LIB->_to_base($x->{value}, $base -> {value}, @_ ? shift() : ()); } +sub to_base_num { + my $x = shift; + my $class = ref $x; + + # return a base anything string + croak("the value to convert must be a finite non-negative integer") + if $x -> is_neg() || !$x -> is_int(); + + my $base = shift; + $base = $class -> new($base) unless ref $base; + + croak("the base must be a finite integer >= 2") + if $base < 2 || ! $base -> is_int(); + + croak("to_base() requires a newer version of the $LIB library.") + unless $LIB->can('_to_base'); + + # Get a reference to an array of library thingies, and replace each element + # with a Math::BigInt object using that thingy. + + my $vals = $LIB -> _to_base_num($x->{value}, $base -> {value}); + + for my $i (0 .. $#$vals) { + my $x = $class -> bzero(); + $x -> {value} = $vals -> [$i]; + $vals -> [$i] = $x; + } + + return $vals; +} + sub as_hex { # return as hex string, with prefixed 0x my $x = shift; @@ -3941,13 +4114,13 @@ sub numify { if ($x -> is_nan()) { require Math::Complex; - my $inf = Math::Complex::Inf(); + my $inf = $Math::Complex::Inf; return $inf - $inf; } if ($x -> is_inf()) { require Math::Complex; - my $inf = Math::Complex::Inf(); + my $inf = $Math::Complex::Inf; return $x -> is_negative() ? -$inf : $inf; } @@ -4015,9 +4188,13 @@ sub objectify { no strict 'refs'; - # What we upgrade to, if anything. + # What we upgrade to, if anything. Note that we need the whole upgrade + # chain, since there might be multiple levels of upgrading. E.g., class A + # upgrades to class B, which upgrades to class C. Delay getting the chain + # until we actually need it. - my $up = ${"$a[0]::upgrade"}; + my @upg = (); + my $have_upgrade_chain = 0; # Disable downgrading, because Math::BigFloat -> foo('1.0', '2.0') needs # floats. @@ -4028,7 +4205,7 @@ sub objectify { ${"$a[0]::downgrade"} = undef; } - for my $i (1 .. $count) { + ARG: for my $i (1 .. $count) { my $ref = ref $a[$i]; @@ -4043,10 +4220,23 @@ sub objectify { next if $ref -> isa($a[0]); - # Upgrading is OK, so skip further tests if the argument is upgraded. + # Upgrading is OK, so skip further tests if the argument is upgraded, + # but first get the whole upgrade chain if we haven't got it yet. + + unless ($have_upgrade_chain) { + my $cls = $class; + my $upg = $cls -> upgrade(); + while (defined $upg) { + last if $upg eq $cls; + push @upg, $upg; + $cls = $upg; + $upg = $cls -> upgrade(); + } + $have_upgrade_chain = 1; + } - if (defined $up && $ref -> isa($up)) { - next; + for my $upg (@upg) { + next ARG if $ref -> isa($upg); } # See if we can call one of the as_xxx() methods. We don't know whether @@ -4105,166 +4295,190 @@ sub import { my $class = shift; $IMPORT++; # remember we did import() my @a; # unrecognized arguments - my $warn_or_die = 0; # 0 - no warn, 1 - warn, 2 - die - for (my $i = 0; $i <= $#_ ; $i++) { - if ($_[$i] eq ':constant') { - # this causes overlord er load to step in - overload::constant - integer => sub { $class->new(shift) }, - binary => sub { $class->new(shift) }; - } elsif ($_[$i] eq 'upgrade') { - # this causes upgrading - $upgrade = $_[$i+1]; # or undef to disable - $i++; - } elsif ($_[$i] =~ /^(lib|try|only)\z/) { - # this causes a different low lib to take care... - $LIB = $_[$i+1] || ''; - # try => 0 (no warn) - # lib => 1 (warn on fallback) - # only => 2 (die on fallback) - $warn_or_die = 1 if $_[$i] eq 'lib'; - $warn_or_die = 2 if $_[$i] eq 'only'; - $i++; - } else { - push @a, $_[$i]; - } - } - # any non :constant stuff is handled by our parent, Exporter - if (@a > 0) { - $class->SUPER::import(@a); # need it for subclasses - $class->export_to_level(1, $class, @a); # need it for MBF - } - - # try to load core math lib - my @c = split /\s*,\s*/, $LIB; - foreach (@c) { - tr/a-zA-Z0-9://cd; # limit to sane characters - } - push @c, \'Calc' # if all fail, try these - if $warn_or_die < 2; # but not for "only" - $LIB = ''; # signal error - foreach my $l (@c) { - # fallback libraries are "marked" as \'string', extract string if nec. - my $lib = $l; - $lib = $$l if ref($l); - - next unless defined($lib) && CORE::length($lib); - $lib = 'Math::BigInt::'.$lib if $lib !~ /^Math::BigInt/i; - $lib =~ s/\.pm$//; - my @parts = split /::/, $lib; # Math::BigInt => Math BigInt - $parts[-1] .= '.pm'; # BigInt => BigInt.pm - require File::Spec; - my $file = File::Spec->catfile(@parts); - eval { require $file; }; - if ($@ eq '') { - $lib->import(); - $LIB = $lib; - if ($warn_or_die > 0 && ref($l)) { - my $msg = "Math::BigInt: couldn't load specified" - . " math lib(s), fallback to $lib"; - carp($msg) if $warn_or_die == 1; - croak($msg) if $warn_or_die == 2; - } - last; # found a usable one, break - } - } - if ($LIB eq '') { - if ($warn_or_die == 2) { - croak("Couldn't load specified math lib(s)" . - " and fallback disallowed"); - } else { - croak("Couldn't load any math lib(s), not even fallback to Calc.pm"); - } - } - # notify callbacks - foreach my $class (keys %CALLBACKS) { - &{$CALLBACKS{$class}}($LIB); - } + while (@_) { + my $param = shift; - # import done -} + # Enable overloading of constants. -sub _register_callback { - my ($class, $callback) = @_; + if ($param eq ':constant') { + overload::constant - if (ref($callback) ne 'CODE') { - croak("$callback is not a coderef"); - } - $CALLBACKS{$class} = $callback; -} + integer => sub { + $class -> new(shift); + }, -sub _split_dec_string { - my $str = shift; + float => sub { + $class -> new(shift); + }, - if ($str =~ s/ - ^ - - # leading whitespace - ( \s* ) - - # optional sign - ( [+-]? ) - - # significand - ( - \d+ (?: _ \d+ )* - (?: - \. - (?: \d+ (?: _ \d+ )* )? - )? - | - \. - \d+ (?: _ \d+ )* - ) - - # optional exponent - (?: - [Ee] - ( [+-]? ) - ( \d+ (?: _ \d+ )* ) - )? - - # trailing stuff - ( \D .*? )? + binary => sub { + # E.g., a literal 0377 shall result in an object whose value + # is decimal 255, but new("0377") returns decimal 377. + return $class -> from_oct($_[0]) if $_[0] =~ /^0_*[0-7]/; + $class -> new(shift); + }; + next; + } - \z - //x) { - my $leading = $1; - my $significand_sgn = $2 || '+'; - my $significand_abs = $3; - my $exponent_sgn = $4 || '+'; - my $exponent_abs = $5 || '0'; - my $trailing = $6; - - # Remove underscores and leading zeros. - - $significand_abs =~ tr/_//d; - $exponent_abs =~ tr/_//d; - - $significand_abs =~ s/^0+(.)/$1/; - $exponent_abs =~ s/^0+(.)/$1/; - - # If the significand contains a dot, remove it and adjust the exponent - # accordingly. E.g., "1234.56789e+3" -> "123456789e-2" - - my $idx = index $significand_abs, '.'; - if ($idx > -1) { - $significand_abs =~ s/0+\z//; - substr($significand_abs, $idx, 1) = ''; - my $exponent = $exponent_sgn . $exponent_abs; - $exponent .= $idx - CORE::length($significand_abs); - $exponent_abs = abs $exponent; - $exponent_sgn = $exponent < 0 ? '-' : '+'; + # Upgrading. + + if ($param eq 'upgrade') { + $class -> upgrade(shift); + next; + } + + # Downgrading. + + if ($param eq 'downgrade') { + $class -> downgrade(shift); + next; + } + + # Accuracy. + + if ($param eq 'accuracy') { + $class -> accuracy(shift); + next; + } + + # Precision. + + if ($param eq 'precision') { + $class -> precision(shift); + next; + } + + # Rounding mode. + + if ($param eq 'round_mode') { + $class -> round_mode(shift); + next; } - return($leading, - $significand_sgn, $significand_abs, - $exponent_sgn, $exponent_abs, - $trailing); + # Backend library. + + if ($param =~ /^(lib|try|only)\z/) { + # try => 0 (no warn if unavailable module) + # lib => 1 (warn on fallback) + # only => 2 (die on fallback) + + # Get the list of user-specified libraries. + + croak "Library argument for import parameter '$param' is missing" + unless @_; + my $libs = shift; + croak "Library argument for import parameter '$param' is undefined" + unless defined($libs); + + # Check and clean up the list of user-specified libraries. + + my @libs; + for my $lib (split /,/, $libs) { + $lib =~ s/^\s+//; + $lib =~ s/\s+$//; + + if ($lib =~ /[^a-zA-Z0-9_:]/) { + carp "Library name '$lib' contains invalid characters"; + next; + } + + if (! CORE::length $lib) { + carp "Library name is empty"; + next; + } + + $lib = "Math::BigInt::$lib" if $lib !~ /^Math::BigInt::/i; + + # If a library has already been loaded, that is OK only if the + # requested library is identical to the loaded one. + + if (defined($LIB)) { + if ($lib ne $LIB) { + #carp "Library '$LIB' has already been loaded, so", + # " ignoring requested library '$lib'"; + } + next; + } + + push @libs, $lib; + } + + next if defined $LIB; + + croak "Library list contains no valid libraries" unless @libs; + + # Try to load the specified libraries, if any. + + for (my $i = 0 ; $i <= $#libs ; $i++) { + my $lib = $libs[$i]; + eval "require $lib"; + unless ($@) { + $LIB = $lib; + last; + } + } + + next if defined $LIB; + + # No library has been loaded, and none of the requested libraries + # could be loaded, and fallback and the user doesn't allow fallback. + + if ($param eq 'only') { + croak "Couldn't load the specified math lib(s) ", + join(", ", map "'$_'", @libs), + ", and fallback to '$DEFAULT_LIB' is not allowed"; + } + + # No library has been loaded, and none of the requested libraries + # could be loaded, but the user accepts the use of a fallback + # library, so try to load it. + + eval "require $DEFAULT_LIB"; + if ($@) { + croak "Couldn't load the specified math lib(s) ", + join(", ", map "'$_'", @libs), + ", not even the fallback lib '$DEFAULT_LIB'"; + } + + # The fallback library was successfully loaded, but the user + # might want to know that we are using the fallback. + + if ($param eq 'lib') { + carp "Couldn't load the specified math lib(s) ", + join(", ", map "'$_'", @libs), + ", so using fallback lib '$DEFAULT_LIB'"; + } + + next; + } + + # Unrecognized parameter. + + push @a, $param; } - return undef; + # Any non-':constant' stuff is handled by our parent, Exporter + + if (@a) { + $class->SUPER::import(@a); # need it for subclasses + $class->export_to_level(1, $class, @a); # need it for Math::BigFloat + } + + # We might not have loaded any backend library yet, either because the user + # didn't specify any, or because the specified libraries failed to load and + # the user allows the use of a fallback library. + + unless (defined $LIB) { + eval "require $DEFAULT_LIB"; + if ($@) { + croak "No lib specified, and couldn't load the default", + " lib '$DEFAULT_LIB'"; + } + $LIB = $DEFAULT_LIB; + } + + # import done } sub _split { @@ -4334,6 +4548,49 @@ sub _split { return; # NaN, not a number } +sub _e_add { + # Internal helper sub to take two positive integers and their signs and + # then add them. Input ($LIB, $LIB, ('+'|'-'), ('+'|'-')), output + # ($LIB, ('+'|'-')). + + my ($x, $y, $xs, $ys) = @_; + + # if the signs are equal we can add them (-5 + -3 => -(5 + 3) => -8) + if ($xs eq $ys) { + $x = $LIB->_add($x, $y); # +a + +b or -a + -b + } else { + my $a = $LIB->_acmp($x, $y); + if ($a == 0) { + # This does NOT modify $x in-place. TODO: Fix this? + $x = $LIB->_zero(); # result is 0 + $xs = '+'; + return ($x, $xs); + } + if ($a > 0) { + $x = $LIB->_sub($x, $y); # abs sub + } else { # a < 0 + $x = $LIB->_sub ($y, $x, 1); # abs sub + $xs = $ys; + } + } + + $xs = '+' if $xs eq '-' && $LIB->_is_zero($x); # no "-0" + + return ($x, $xs); +} + +sub _e_sub { + # Internal helper sub to take two positive integers and their signs and + # then subtract them. Input ($LIB, $LIB, ('+'|'-'), ('+'|'-')), + # output ($LIB, ('+'|'-')) + my ($x, $y, $xs, $ys) = @_; + + # flip sign + $ys = $ys eq '+' ? '-' : '+'; # swap sign of second operand ... + _e_add($x, $y, $xs, $ys); # ... and let _e_add() do the job + #$LIB -> _sadd($x, $xs, $y, $ys); # ... and let $LIB -> _sadd() do the job +} + sub _trailing_zeros { # return the amount of trailing zeros in $x (as scalar) my $x = shift; @@ -4422,6 +4679,635 @@ sub _find_round_parameters { ($self, $a, $p, $r); } +# Trims the sign of the significand, the (absolute value of the) significand, +# the sign of the exponent, and the (absolute value of the) exponent. The +# returned values have no underscores ("_") or unnecessary leading or trailing +# zeros. + +sub _trim_split_parts { + shift; + + my $sig_sgn = shift() || '+'; + my $sig_str = shift() || '0'; + my $exp_sgn = shift() || '+'; + my $exp_str = shift() || '0'; + + $sig_str =~ tr/_//d; # "1.0_0_0" -> "1.000" + $sig_str =~ s/^0+//; # "01.000" -> "1.000" + $sig_str =~ s/\.0*$// # "1.000" -> "1" + || $sig_str =~ s/(\..*[^0])0+$/$1/; # "1.010" -> "1.01" + $sig_str = '0' unless CORE::length($sig_str); + + return '+', '0', '+', '0' if $sig_str eq '0'; + + $exp_str =~ tr/_//d; # "01_234" -> "01234" + $exp_str =~ s/^0+//; # "01234" -> "1234" + $exp_str = '0' unless CORE::length($exp_str); + + return $sig_sgn, $sig_str, $exp_sgn, $exp_str; +} + +# Takes any string representing a valid decimal number and splits it into four +# strings: the sign of the significand, the absolute value of the significand, +# the sign of the exponent, and the absolute value of the exponent. Both the +# significand and the exponent are in base 10. +# +# Perl accepts literals like the following. The value is 100.1. +# +# 1__0__.__0__1__e+0__1__ (prints "Misplaced _ in number") +# 1_0.0_1e+0_1 +# +# Strings representing decimal numbers do not allow underscores, so only the +# following is valid +# +# "10.01e+01" + +sub _dec_str_to_str_parts { + my $class = shift; + my $str = shift; + + if ($str =~ / + ^ + + # optional leading whitespace + \s* + + # optional sign + ( [+-]? ) + + # significand + ( + # integer part and optional fraction part ... + \d+ (?: _+ \d+ )* _* + (?: + \. + (?: _* \d+ (?: _+ \d+ )* _* )? + )? + | + # ... or mandatory fraction part + \. + \d+ (?: _+ \d+ )* _* + ) + + # optional exponent + (?: + [Ee] + ( [+-]? ) + ( \d+ (?: _+ \d+ )* _* ) + )? + + # optional trailing whitespace + \s* + + $ + /x) + { + return $class -> _trim_split_parts($1, $2, $3, $4); + } + + return; +} + +# Takes any string representing a valid hexadecimal number and splits it into +# four strings: the sign of the significand, the absolute value of the +# significand, the sign of the exponent, and the absolute value of the exponent. +# The significand is in base 16, and the exponent is in base 2. +# +# Perl accepts literals like the following. The "x" might be a capital "X". The +# value is 32.0078125. +# +# 0x__1__0__.0__1__p+0__1__ (prints "Misplaced _ in number") +# 0x1_0.0_1p+0_1 +# +# The CORE::hex() function does not accept floating point accepts +# +# "0x_1_0" +# "x_1_0" +# "_1_0" + +sub _hex_str_to_str_parts { + my $class = shift; + my $str = shift; + + if ($str =~ / + ^ + + # optional leading whitespace + \s* + + # optional sign + ( [+-]? ) + + # optional hex prefix + (?: 0? [Xx] _* )? + + # significand using the hex digits 0..9 and a..f + ( + # integer part and optional fraction part ... + [0-9a-fA-F]+ (?: _+ [0-9a-fA-F]+ )* _* + (?: + \. + (?: _* [0-9a-fA-F]+ (?: _+ [0-9a-fA-F]+ )* _* )? + )? + | + # ... or mandatory fraction part + \. + [0-9a-fA-F]+ (?: _+ [0-9a-fA-F]+ )* _* + ) + + # optional exponent (power of 2) using decimal digits + (?: + [Pp] + ( [+-]? ) + ( \d+ (?: _+ \d+ )* _* ) + )? + + # optional trailing whitespace + \s* + + $ + /x) + { + return $class -> _trim_split_parts($1, $2, $3, $4); + } + + return; +} + +# Takes any string representing a valid octal number and splits it into four +# strings: the sign of the significand, the absolute value of the significand, +# the sign of the exponent, and the absolute value of the exponent. The +# significand is in base 8, and the exponent is in base 2. + +sub _oct_str_to_str_parts { + my $class = shift; + my $str = shift; + + if ($str =~ / + ^ + + # optional leading whitespace + \s* + + # optional sign + ( [+-]? ) + + # optional octal prefix + (?: 0? [Oo] _* )? + + # significand using the octal digits 0..7 + ( + # integer part and optional fraction part ... + [0-7]+ (?: _+ [0-7]+ )* _* + (?: + \. + (?: _* [0-7]+ (?: _+ [0-7]+ )* _* )? + )? + | + # ... or mandatory fraction part + \. + [0-7]+ (?: _+ [0-7]+ )* _* + ) + + # optional exponent (power of 2) using decimal digits + (?: + [Pp] + ( [+-]? ) + ( \d+ (?: _+ \d+ )* _* ) + )? + + # optional trailing whitespace + \s* + + $ + /x) + { + return $class -> _trim_split_parts($1, $2, $3, $4); + } + + return; +} + +# Takes any string representing a valid binary number and splits it into four +# strings: the sign of the significand, the absolute value of the significand, +# the sign of the exponent, and the absolute value of the exponent. The +# significand is in base 2, and the exponent is in base 2. + +sub _bin_str_to_str_parts { + my $class = shift; + my $str = shift; + + if ($str =~ / + ^ + + # optional leading whitespace + \s* + + # optional sign + ( [+-]? ) + + # optional binary prefix + (?: 0? [Bb] _* )? + + # significand using the binary digits 0 and 1 + ( + # integer part and optional fraction part ... + [01]+ (?: _+ [01]+ )* _* + (?: + \. + (?: _* [01]+ (?: _+ [01]+ )* _* )? + )? + | + # ... or mandatory fraction part + \. + [01]+ (?: _+ [01]+ )* _* + ) + + # optional exponent (power of 2) using decimal digits + (?: + [Pp] + ( [+-]? ) + ( \d+ (?: _+ \d+ )* _* ) + )? + + # optional trailing whitespace + \s* + + $ + /x) + { + return $class -> _trim_split_parts($1, $2, $3, $4); + } + + return; +} + +# Takes any string representing a valid decimal number and splits it into four +# parts: the sign of the significand, the absolute value of the significand as a +# libray thingy, the sign of the exponent, and the absolute value of the +# exponent as a library thingy. + +sub _dec_parts_to_lib_parts { + shift; + + my ($sig_sgn, $sig_str, $exp_sgn, $exp_str) = @_; + + # Handle zero. + + if ($sig_str eq '0') { + return '+', $LIB -> _zero(), '+', $LIB -> _zero(); + } + + # Absolute value of exponent as library "object". + + my $exp_lib = $LIB -> _new($exp_str); + + # If there is a dot in the significand, remove it so the significand + # becomes an integer and adjust the exponent accordingly. Also remove + # leading zeros which might now appear in the significand. E.g., + # + # 12.345e-2 -> 12345e-5 + # 12.345e+2 -> 12345e-1 + # 0.0123e+5 -> 00123e+1 -> 123e+1 + + my $idx = index $sig_str, '.'; + if ($idx >= 0) { + substr($sig_str, $idx, 1) = ''; + + # delta = length - index + my $delta = $LIB -> _new(CORE::length($sig_str)); + $delta = $LIB -> _sub($delta, $LIB -> _new($idx)); + + # exponent - delta + ($exp_lib, $exp_sgn) = _e_sub($exp_lib, $delta, $exp_sgn, '+'); + #($exp_lib, $exp_sgn) = $LIB -> _ssub($exp_lib, $exp_sgn, $delta, '+'); + + $sig_str =~ s/^0+//; + } + + # If there are trailing zeros in the significand, remove them and + # adjust the exponent. E.g., + # + # 12340e-5 -> 1234e-4 + # 12340e-1 -> 1234e0 + # 12340e+3 -> 1234e4 + + if ($sig_str =~ s/(0+)\z//) { + my $len = CORE::length($1); + ($exp_lib, $exp_sgn) = + $LIB -> _sadd($exp_lib, $exp_sgn, $LIB -> _new($len), '+'); + } + + # At this point, the significand is empty or an integer with no trailing + # zeros. The exponent is in base 10. + + unless (CORE::length $sig_str) { + return '+', $LIB -> _zero(), '+', $LIB -> _zero(); + } + + # Absolute value of significand as library "object". + + my $sig_lib = $LIB -> _new($sig_str); + + return $sig_sgn, $sig_lib, $exp_sgn, $exp_lib; +} + +# Takes any string representing a valid binary number and splits it into four +# parts: the sign of the significand, the absolute value of the significand as a +# libray thingy, the sign of the exponent, and the absolute value of the +# exponent as a library thingy. + +sub _bin_parts_to_lib_parts { + shift; + + my ($sig_sgn, $sig_str, $exp_sgn, $exp_str, $bpc) = @_; + my $bpc_lib = $LIB -> _new($bpc); + + # Handle zero. + + if ($sig_str eq '0') { + return '+', $LIB -> _zero(), '+', $LIB -> _zero(); + } + + # Absolute value of exponent as library "object". + + my $exp_lib = $LIB -> _new($exp_str); + + # If there is a dot in the significand, remove it so the significand + # becomes an integer and adjust the exponent accordingly. Also remove + # leading zeros which might now appear in the significand. E.g., with + # hexadecimal numbers + # + # 12.345p-2 -> 12345p-14 + # 12.345p+2 -> 12345p-10 + # 0.0123p+5 -> 00123p-11 -> 123p-11 + + my $idx = index $sig_str, '.'; + if ($idx >= 0) { + substr($sig_str, $idx, 1) = ''; + + # delta = (length - index) * bpc + my $delta = $LIB -> _new(CORE::length($sig_str)); + $delta = $LIB -> _sub($delta, $LIB -> _new($idx)); + $delta = $LIB -> _mul($delta, $bpc_lib) if $bpc != 1; + + # exponent - delta + ($exp_lib, $exp_sgn) = _e_sub($exp_lib, $delta, $exp_sgn, '+'); + #($exp_lib, $exp_sgn) = $LIB -> _ssub($exp_lib, $exp_sgn, $delta, '+'); + + $sig_str =~ s/^0+//; + } + + # If there are trailing zeros in the significand, remove them and + # adjust the exponent accordingly. E.g., with hexadecimal numbers + # + # 12340p-5 -> 1234p-1 + # 12340p-1 -> 1234p+3 + # 12340p+3 -> 1234p+7 + + if ($sig_str =~ s/(0+)\z//) { + + # delta = length * bpc + my $delta = $LIB -> _new(CORE::length($1)); + $delta = $LIB -> _mul($delta, $bpc_lib) if $bpc != 1; + + # exponent + delta + ($exp_lib, $exp_sgn) = $LIB -> _sadd($exp_lib, $exp_sgn, $delta, '+'); + } + + # At this point, the significand is empty or an integer with no leading + # or trailing zeros. The exponent is in base 2. + + unless (CORE::length $sig_str) { + return '+', $LIB -> _zero(), '+', $LIB -> _zero(); + } + + # Absolute value of significand as library "object". + + my $sig_lib = $bpc == 1 ? $LIB -> _from_bin('0b' . $sig_str) + : $bpc == 3 ? $LIB -> _from_oct('0' . $sig_str) + : $bpc == 4 ? $LIB -> _from_hex('0x' . $sig_str) + : die "internal error: invalid exponent multiplier"; + + # If the exponent (in base 2) is positive or zero ... + + if ($exp_sgn eq '+') { + + if (!$LIB -> _is_zero($exp_lib)) { + + # Multiply significand by 2 raised to the exponent. + + my $p = $LIB -> _pow($LIB -> _two(), $exp_lib); + $sig_lib = $LIB -> _mul($sig_lib, $p); + $exp_lib = $LIB -> _zero(); + } + } + + # ... else if the exponent is negative ... + + else { + + # Rather than dividing the significand by 2 raised to the absolute + # value of the exponent, multiply the significand by 5 raised to the + # absolute value of the exponent and let the exponent be in base 10: + # + # a * 2^(-b) = a * 5^b * 10^(-b) = c * 10^(-b), where c = a * 5^b + + my $p = $LIB -> _pow($LIB -> _new("5"), $exp_lib); + $sig_lib = $LIB -> _mul($sig_lib, $p); + } + + # Adjust for the case when the conversion to decimal introduced trailing + # zeros in the significand. + + my $n = $LIB -> _zeros($sig_lib); + if ($n) { + $n = $LIB -> _new($n); + $sig_lib = $LIB -> _rsft($sig_lib, $n, 10); + ($exp_lib, $exp_sgn) = $LIB -> _sadd($exp_lib, $exp_sgn, $n, '+'); + } + + return $sig_sgn, $sig_lib, $exp_sgn, $exp_lib; +} + +# Takes any string representing a valid hexadecimal number and splits it into +# four parts: the sign of the significand, the absolute value of the significand +# as a libray thingy, the sign of the exponent, and the absolute value of the +# exponent as a library thingy. + +sub _hex_str_to_lib_parts { + my $class = shift; + my $str = shift; + if (my @parts = $class -> _hex_str_to_str_parts($str)) { + return $class -> _bin_parts_to_lib_parts(@parts, 4); # 4 bits pr. chr + } + return; +} + +# Takes any string representing a valid octal number and splits it into four +# parts: the sign of the significand, the absolute value of the significand as a +# libray thingy, the sign of the exponent, and the absolute value of the +# exponent as a library thingy. + +sub _oct_str_to_lib_parts { + my $class = shift; + my $str = shift; + if (my @parts = $class -> _oct_str_to_str_parts($str)) { + return $class -> _bin_parts_to_lib_parts(@parts, 3); # 3 bits pr. chr + } + return; +} + +# Takes any string representing a valid binary number and splits it into four +# parts: the sign of the significand, the absolute value of the significand as a +# libray thingy, the sign of the exponent, and the absolute value of the +# exponent as a library thingy. + +sub _bin_str_to_lib_parts { + my $class = shift; + my $str = shift; + if (my @parts = $class -> _bin_str_to_str_parts($str)) { + return $class -> _bin_parts_to_lib_parts(@parts, 1); # 1 bit pr. chr + } + return; +} + +# Decimal string is split into the sign of the signficant, the absolute value of +# the significand as library thingy, the sign of the exponent, and the absolute +# value of the exponent as a a library thingy. + +sub _dec_str_to_lib_parts { + my $class = shift; + my $str = shift; + if (my @parts = $class -> _dec_str_to_str_parts($str)) { + return $class -> _dec_parts_to_lib_parts(@parts); + } + return; +} + +# Hexdecimal string to a string using decimal floating point notation. + +sub hex_str_to_dec_flt_str { + my $class = shift; + my $str = shift; + if (my @parts = $class -> _hex_str_to_lib_parts($str)) { + return $class -> _lib_parts_to_flt_str(@parts); + } + return; +} + +# Octal string to a string using decimal floating point notation. + +sub oct_str_to_dec_flt_str { + my $class = shift; + my $str = shift; + if (my @parts = $class -> _oct_str_to_lib_parts($str)) { + return $class -> _lib_parts_to_flt_str(@parts); + } + return; +} + +# Binary string to a string decimal floating point notation. + +sub bin_str_to_dec_flt_str { + my $class = shift; + my $str = shift; + if (my @parts = $class -> _bin_str_to_lib_parts($str)) { + return $class -> _lib_parts_to_flt_str(@parts); + } + return; +} + +# Decimal string to a string using decimal floating point notation. + +sub dec_str_to_dec_flt_str { + my $class = shift; + my $str = shift; + if (my @parts = $class -> _dec_str_to_lib_parts($str)) { + return $class -> _lib_parts_to_flt_str(@parts); + } + return; +} + +# Hexdecimal string to decimal notation (no exponent). + +sub hex_str_to_dec_str { + my $class = shift; + my $str = shift; + if (my @parts = $class -> _dec_str_to_lib_parts($str)) { + return $class -> _lib_parts_to_dec_str(@parts); + } + return; +} + +# Octal string to decimal notation (no exponent). + +sub oct_str_to_dec_str { + my $class = shift; + my $str = shift; + if (my @parts = $class -> _oct_str_to_lib_parts($str)) { + return $class -> _lib_parts_to_dec_str(@parts); + } + return; +} + +# Binary string to decimal notation (no exponent). + +sub bin_str_to_dec_str { + my $class = shift; + my $str = shift; + if (my @parts = $class -> _bin_str_to_lib_parts($str)) { + return $class -> _lib_parts_to_dec_str(@parts); + } + return; +} + +# Decimal string to decimal notation (no exponent). + +sub dec_str_to_dec_str { + my $class = shift; + my $str = shift; + if (my @parts = $class -> _dec_str_to_lib_parts($str)) { + return $class -> _lib_parts_to_dec_str(@parts); + } + return; +} + +sub _lib_parts_to_flt_str { + my $class = shift; + my @parts = @_; + return $parts[0] . $LIB -> _str($parts[1]) + . 'e' . $parts[2] . $LIB -> _str($parts[3]); +} + +sub _lib_parts_to_dec_str { + my $class = shift; + my @parts = @_; + + # The number is an integer iff the exponent is non-negative. + + if ($parts[2] eq '+') { + my $str = $parts[0] + . $LIB -> _str($LIB -> _lsft($parts[1], $parts[3], 10)); + return $str; + } + + # If it is not an integer, add a decimal point. + + else { + my $mant = $LIB -> _str($parts[1]); + my $mant_len = CORE::length($mant); + my $expo = $LIB -> _num($parts[3]); + my $len_cmp = $mant_len <=> $expo; + if ($len_cmp <= 0) { + return $parts[0] . '0.' . '0' x ($expo - $mant_len) . $mant; + } else { + substr $mant, $mant_len - $expo, 0, '.'; + return $parts[0] . $mant; + } + } +} + ############################################################################### # this method returns 0 if the object can be modified, or 1 if not. # We use a fast constant sub() here, to avoid costly calls. Subclasses @@ -4437,7 +5323,7 @@ __END__ =head1 NAME -Math::BigInt - Arbitrary size integer/float math package +Math::BigInt - arbitrary size integer math package =head1 SYNOPSIS @@ -4448,13 +5334,13 @@ Math::BigInt - Arbitrary size integer/float math package # pure Perl if the GMP library is not installed): # (See also the L section!) - # warns if Math::BigInt::GMP cannot be found + # to warn if Math::BigInt::GMP cannot be found, use use Math::BigInt lib => 'GMP'; - # to suppress the warning use this: + # to suppress the warning if Math::BigInt::GMP cannot be found, use # use Math::BigInt try => 'GMP'; - # dies if GMP cannot be loaded: + # to die if Math::BigInt::GMP cannot be found, use # use Math::BigInt only => 'GMP'; my $str = '1234567890'; @@ -4483,6 +5369,7 @@ Math::BigInt - Arbitrary size integer/float math package $x = Math::BigInt->from_oct('377'); # from octal $x = Math::BigInt->from_bin('1101'); # from binary $x = Math::BigInt->from_base('why', 36); # from any base + $x = Math::BigInt->from_base_num([1, 0], 2); # from any base $x = Math::BigInt->bzero(); # create a +0 $x = Math::BigInt->bone(); # create a +1 $x = Math::BigInt->bone('-'); # create a -1 @@ -4559,6 +5446,9 @@ Math::BigInt - Arbitrary size integer/float math package $x->bsqrt(); # calculate square root $x->broot($y); # $y'th root of $x (e.g. $y == 3 => cubic root) $x->bfac(); # factorial of $x (1*2*3*4*..$x) + $x->bdfac(); # double factorial of $x ($x*($x-2)*($x-4)*...) + $x->btfac(); # triple factorial of $x ($x*($x-3)*($x-6)*...) + $x->bmfac($k); # $k'th multi-factorial of $x ($x*($x-$k)*...) $x->blsft($n); # left shift $n places in base 2 $x->blsft($n,$b); # left shift $n places in base $b @@ -4605,6 +5495,9 @@ Math::BigInt - Arbitrary size integer/float math package $x->nparts(); # mantissa and exponent (normalised) $x->eparts(); # mantissa and exponent (engineering notation) $x->dparts(); # integer and fraction part + $x->fparts(); # numerator and denominator + $x->numerator(); # numerator + $x->denominator(); # denominator # Conversion methods (do not modify the invocand) @@ -4619,6 +5512,7 @@ Math::BigInt - Arbitrary size integer/float math package $x->to_oct(); # as signed octal string $x->to_bytes(); # as byte string $x->to_base($b); # as string in any base + $x->to_base_num($b); # as array of integers in any base $x->as_hex(); # as signed hexadecimal string with prefixed 0x $x->as_bin(); # as signed binary string with prefixed 0b @@ -4636,7 +5530,9 @@ also provided for Perl operators. =head2 Input Input values to these routines may be any scalar number or string that looks -like a number and represents an integer. +like a number and represents an integer. Anything that is accepted by Perl as a +literal numeric constant should be accepted by this module, except that finite +non-integers return NaN. =over @@ -4646,53 +5542,86 @@ Leading and trailing whitespace is ignored. =item * -Leading and trailing zeros are ignored. +Leading zeros are ignored, except for floating point numbers with a binary +exponent, in which case the number is interpreted as an octal floating point +number. For example, "01.4p+0" gives 1.5, "00.4p+0" gives 0.5, but "0.4p+0" +gives a NaN. And while "0377" gives 255, "0377p0" gives 255. =item * -If the string has a "0x" prefix, it is interpreted as a hexadecimal number. +If the string has a "0x" or "0X" prefix, it is interpreted as a hexadecimal +number. =item * -If the string has a "0b" prefix, it is interpreted as a binary number. +If the string has a "0o" or "0O" prefix, it is interpreted as an octal number. A +floating point literal with a "0" prefix is also interpreted as an octal number. =item * -One underline is allowed between any two digits. +If the string has a "0b" or "0B" prefix, it is interpreted as a binary number. =item * -If the string can not be interpreted, NaN is returned. +Underline characters are allowed in the same way as they are allowed in literal +numerical constants. -=back +=item * -Octal numbers are typically prefixed by "0", but since leading zeros are -stripped, these methods can not automatically recognize octal numbers, so use -the constructor from_oct() to interpret octal strings. +If the string can not be interpreted, or does not represent a finite integer, +NaN is returned. + +=item * + +For hexadecimal, octal, and binary floating point numbers, the exponent must be +separated from the significand (mantissa) by the letter "p" or "P", not "e" or +"E" as with decimal numbers. + +=back Some examples of valid string input Input string Resulting value + 123 123 1.23e2 123 12300e-2 123 - 0xcafe 51966 - 0b1101 13 + 67_538_754 67538754 -4_5_6.7_8_9e+0_1_0 -4567890000000 + 0x13a 314 + 0x13ap0 314 + 0x1.3ap+8 314 + 0x0.00013ap+24 314 + 0x13a000p-12 314 + + 0o472 314 + 0o1.164p+8 314 + 0o0.0001164p+20 314 + 0o1164000p-10 314 + + 0472 472 Note! + 01.164p+8 314 + 00.0001164p+20 314 + 01164000p-10 314 + + 0b100111010 314 + 0b1.0011101p+8 314 + 0b0.00010011101p+12 314 + 0b100111010000p-3 314 + Input given as scalar numbers might lose precision. Quote your input to ensure that no digits are lost: $x = Math::BigInt->new( 56789012345678901234 ); # bad $x = Math::BigInt->new('56789012345678901234'); # good -Currently, Math::BigInt->new() defaults to 0, while Math::BigInt->new('') -results in 'NaN'. This might change in the future, so use always the following -explicit forms to get a zero or NaN: +Currently, Cnew()> (no input argument) and +Cnew("")> return 0. This might change in the future, so always +use the following explicit forms to get a zero: $zero = Math::BigInt->bzero(); - $nan = Math::BigInt->bnan(); =head2 Output @@ -4802,18 +5731,25 @@ Set/get the rounding mode. Set/get the class for upgrading. When a computation might result in a non-integer, the operands are upgraded to this class. This is used for instance -by L. The default is C, thus the following operation creates -a Math::BigInt, not a Math::BigFloat: +by L. The default is C, i.e., no upgrading. + + # with no upgrading + $x = Math::BigInt->new(12); + $y = Math::BigInt->new(5); + print $x / $y, "\n"; # 2 as a Math::BigInt - my $i = Math::BigInt->new(123); - my $f = Math::BigFloat->new('123.1'); + # with upgrading to Math::BigFloat + Math::BigInt -> upgrade("Math::BigFloat"); + print $x / $y, "\n"; # 2.4 as a Math::BigFloat - print $i + $f, "\n"; # prints 246 + # with upgrading to Math::BigRat (after loading Math::BigRat) + Math::BigInt -> upgrade("Math::BigRat"); + print $x / $y, "\n"; # 12/5 as a Math::BigRat =item downgrade() -Set/get the class for downgrading. The default is C. Downgrading is not -done by Math::BigInt. +Set/get the class for downgrading. The default is C, i.e., no +downgrading. Downgrading is not done by Math::BigInt. =item modify() @@ -4871,11 +5807,18 @@ parameters are marked as RW. The following parameters are supported. $x = Math::BigInt->new($str,$A,$P,$R); Creates a new Math::BigInt object from a scalar or another Math::BigInt object. -The input is accepted as decimal, hexadecimal (with leading '0x') or binary -(with leading '0b'). +The input is accepted as decimal, hexadecimal (with leading '0x'), octal (with +leading ('0o') or binary (with leading '0b'). See L for more info on accepted input formats. +=item from_dec() + + $x = Math::BigInt->from_dec("314159"); # input is decimal + +Interpret input as a decimal. It is equivalent to new(), but does not accept +anything but strings representing finite, decimal numbers. + =item from_hex() $x = Math::BigInt->from_hex("0xcafe"); # input is hexadecimal @@ -4969,6 +5912,16 @@ are equivalent $x = Math::BigInt->from_base("100", 2, "01"); # $x is 4 $x = Math::BigInt->from_base("|--", 2, "-|"); # $x is 4 +=item from_base_num() + +Returns a new Math::BigInt object given an array of values and a base. This +method is equivalent to C, but works on numbers in an array rather +than characters in a string. Unlike C, all input values may be +arbitrarily large. + + $x = Math::BigInt->from_base_num([1, 1, 0, 1], 2) # $x is 13 + $x = Math::BigInt->from_base_num([3, 125, 39], 128) # $x is 65191 + =item bzero() $x = Math::BigInt->bzero(); @@ -5539,19 +6492,35 @@ Calculates the N'th root of C<$x>. =item bfac() - $x->bfac(); # factorial of $x (1*2*3*4*..*$x) + $x->bfac(); # factorial of $x -Returns the factorial of C<$x>, i.e., the product of all positive integers up -to and including C<$x>. +Returns the factorial of C<$x>, i.e., $x*($x-1)*($x-2)*...*2*1, the product of +all positive integers up to and including C<$x>. C<$x> must be > -1. The +factorial of N is commonly written as N!, or N!1, when using the multifactorial +notation. =item bdfac() - $x->bdfac(); # double factorial of $x (1*2*3*4*..*$x) + $x->bdfac(); # double factorial of $x -Returns the double factorial of C<$x>. If C<$x> is an even integer, returns the -product of all positive, even integers up to and including C<$x>, i.e., -2*4*6*...*$x. If C<$x> is an odd integer, returns the product of all positive, -odd integers, i.e., 1*3*5*...*$x. +Returns the double factorial of C<$x>, i.e., $x*($x-2)*($x-4)*... C<$x> must be +> -2. The double factorial of N is commonly written as N!!, or N!2, when using +the multifactorial notation. + +=item btfac() + + $x->btfac(); # triple factorial of $x + +Returns the triple factorial of C<$x>, i.e., $x*($x-3)*($x-6)*... C<$x> must be +> -3. The triple factorial of N is commonly written as N!!!, or N!3, when using +the multifactorial notation. + +=item bmfac() + + $x->bmfac($k); # $k'th multifactorial of $x + +Returns the multi-factorial of C<$x>, i.e., $x*($x-$k)*($x-2*$k)*... C<$x> must +be > -$k. The multi-factorial of N is commonly written as N!K. =item bfib() @@ -5847,6 +6816,24 @@ Returns the integer part and the fraction part. If the fraction part can not be represented as an integer, upgrading is performed or NaN is returned. The output of C corresponds to the output from C. +=item fparts() + +Returns the smallest possible numerator and denominator so that the numerator +divided by the denominator gives back the original value. For finite numbers, +both values are integers. Mnemonic: fraction. + +=item numerator() + +Together with L, returns the smallest integers so that the +numerator divided by the denominator reproduces the original value. With +Math::BigInt, numerator() simply returns a copy of the invocand. + +=item denominator() + +Together with L, returns the smallest integers so that the +numerator divided by the denominator reproduces the original value. With +Math::BigInt, denominator() always returns either a 1 or a NaN. + =back =head2 String conversion methods @@ -5954,6 +6941,19 @@ Here are some more examples See from_base() for information and examples. +=item to_base_num() + +Converts the given number to the given base. This method is equivalent to +C<_to_base()>, but returns numbers in an array rather than characters in a +string. In the output, the first element is the most significant. Unlike +C<_to_base()>, all input values may be arbitrarily large. + + $x = Math::BigInt->new(13); + $x->to_base_num(2); # returns [1, 1, 0, 1] + + $x = Math::BigInt->new(65191); + $x->to_base_num(128); # returns [3, 125, 39] + =item as_hex() $x->as_hex(); @@ -5991,6 +6991,94 @@ needed, for instance in array index operations. =back +=head2 Utility methods + +These utility methods are made public + +=over + +=item dec_str_to_dec_flt_str() + +Takes a string representing any valid number using decimal notation and converts +it to a string representing the same number using decimal floating point +notation. The output consists of five parts joined together: the sign of the +significand, the absolute value of the significand as the smallest possible +integer, the letter "e", the sign of the exponent, and the absolute value of the +exponent. If the input is invalid, nothing is returned. + + $str2 = $class -> dec_str_to_dec_flt_str($str1); + +Some examples + + Input Output + 31400.00e-4 +314e-2 + -0.00012300e8 -123e+2 + 0 +0e+0 + +=item hex_str_to_dec_flt_str() + +Takes a string representing any valid number using hexadecimal notation and +converts it to a string representing the same number using decimal floating +point notation. The output has the same format as that of +L. + + $str2 = $class -> hex_str_to_dec_flt_str($str1); + +Some examples + + Input Output + 0xff +255e+0 + +Some examples + +=item oct_str_to_dec_flt_str() + +Takes a string representing any valid number using octal notation and converts +it to a string representing the same number using decimal floating point +notation. The output has the same format as that of +L. + + $str2 = $class -> oct_str_to_dec_flt_str($str1); + +=item bin_str_to_dec_flt_str() + +Takes a string representing any valid number using binary notation and converts +it to a string representing the same number using decimal floating point +notation. The output has the same format as that of +L. + + $str2 = $class -> bin_str_to_dec_flt_str($str1); + +=item dec_str_to_dec_str() + +Takes a string representing any valid number using decimal notation and converts +it to a string representing the same number using decimal notation. If the +number represents an integer, the output consists of a sign and the absolute +value. If the number represents a non-integer, the output consists of a sign, +the integer part of the number, the decimal point ".", and the fraction part of +the number without any trailing zeros. If the input is invalid, nothing is +returned. + +=item hex_str_to_dec_str() + +Takes a string representing any valid number using hexadecimal notation and +converts it to a string representing the same number using decimal notation. The +output has the same format as that of L. + +=item oct_str_to_dec_str() + +Takes a string representing any valid number using octal notation and converts +it to a string representing the same number using decimal notation. The +output has the same format as that of L. + +=item bin_str_to_dec_str() + +Takes a string representing any valid number using binary notation and converts +it to a string representing the same number using decimal notation. The output +has the same format as that of L. + +=back + =head1 ACCURACY and PRECISION Math::BigInt and Math::BigFloat have full support for accuracy and precision @@ -6182,7 +7270,7 @@ This is how it works now: * You can also set P globally by using Math::SomeClass->precision() likewise. * Globals are classwide, and not inherited by subclasses. - * to undefine A, use Math::SomeCLass->accuracy(undef); + * to undefine A, use Math::SomeClass->accuracy(undef); * to undefine P, use Math::SomeClass->precision(undef); * Setting Math::SomeClass->accuracy() clears automatically Math::SomeClass->precision(), and vice versa. @@ -6217,8 +7305,8 @@ This is how it works now: use Math::BigInt; Math::BigInt->accuracy(2); - Math::BigInt::SomeSubClass->accuracy(3); - $x = Math::BigInt::SomeSubClass->new(1234); + Math::BigInt::SomeSubclass->accuracy(3); + $x = Math::BigInt::SomeSubclass->new(1234); $x is now 1230, and not 1200. A subclass might choose to implement this otherwise, e.g. falling back to the parent's A and P. @@ -6385,52 +7473,80 @@ instead relying on the internal representation. =head2 MATH LIBRARY -Math with the numbers is done (by default) by a module called -C. This is equivalent to saying: +The mathematical computations are performed by a backend library. It is not +required to specify which backend library to use, but some backend libraries +are much faster than the default library. + +=head3 The default library + +The default library is L, which is implemented in pure Perl +and hence does not require a compiler. + +=head3 Specifying a library + +The simple case + + use Math::BigInt; + +is equivalent to saying use Math::BigInt try => 'Calc'; -You can change this backend library by using: +You can use a different backend library with, e.g., use Math::BigInt try => 'GMP'; -B: General purpose packages should not be explicit about the library to -use; let the script author decide which is best. +which attempts to load the L library, and falls back to the +default library if the specified library can't be loaded. + +Multiple libraries can be specified by separating them by a comma, e.g., -If your script works with huge numbers and Calc is too slow for them, you can -also for the loading of one of these libraries and if none of them can be used, -the code dies: + use Math::BigInt try => 'GMP,Pari'; + +If you request a specific set of libraries and do not allow fallback to the +default library, specify them using "only", use Math::BigInt only => 'GMP,Pari'; -The following would first try to find Math::BigInt::Foo, then -Math::BigInt::Bar, and when this also fails, revert to Math::BigInt::Calc: +If you prefer a specific set of libraries, but want to see a warning if the +fallback library is used, specify them using "lib", - use Math::BigInt try => 'Foo,Math::BigInt::Bar'; + use Math::BigInt lib => 'GMP,Pari'; + +The following first tries to find Math::BigInt::Foo, then Math::BigInt::Bar, and +if this also fails, reverts to Math::BigInt::Calc: -The library that is loaded last is used. Note that this can be overwritten at -any time by loading a different library, and numbers constructed with different -libraries cannot be used in math operations together. + use Math::BigInt try => 'Foo,Math::BigInt::Bar'; -=head3 What library to use? +=head3 Which library to use? B: General purpose packages should not be explicit about the library to use; let the script author decide which is best. -L and L are in cases involving big -numbers much faster than Calc, however it is slower when dealing with very -small numbers (less than about 20 digits) and when converting very large -numbers to decimal (for instance for printing, rounding, calculating their -length in decimal etc). +L, L, and L are in +cases involving big numbers much faster than L. However +these libraries are slower when dealing with very small numbers (less than about +20 digits) and when converting very large numbers to decimal (for instance for +printing, rounding, calculating their length in decimal etc.). So please select carefully what library you want to use. -Different low-level libraries use different formats to store the numbers. -However, you should B depend on the number having a specific format -internally. +Different low-level libraries use different formats to store the numbers, so +mixing them won't work. You should not depend on the number having a specific +internal format. See the respective math library module documentation for further details. +=head3 Loading multiple libraries + +The first library that is successfully loaded is the one that will be used. Any +further attempts at loading a different module will be ignored. This is to avoid +the situation where module A requires math library X, and module B requires math +library Y, causing modules A and B to be incompatible. For example, + + use Math::BigInt; # loads default "Calc" + use Math::BigFloat only => "GMP"; # ignores "GMP" + =head2 SIGN The sign is either '+', '-', 'NaN', '+inf' or '-inf'. @@ -6452,7 +7568,7 @@ when dividing any negative number by 0. $x = Math::BigInt->babs("-12345"); # Math::BigInt "12345" $x = Math::BigInt->bnorm("-0.00"); # Math::BigInt "0" $x = bigint(1) + bigint(2); # Math::BigInt "3" - $x = bigint(1) + "2"; # ditto (auto-Math::BigIntify of "2") + $x = bigint(1) + "2"; # ditto ("2" becomes a Math::BigInt) $x = bigint(1); # Math::BigInt "1" $x = $x + 5 / 2; # Math::BigInt "3" $x = $x ** 3; # Math::BigInt "27" @@ -6491,49 +7607,69 @@ Examples for converting: my $x = Math::BigInt->new('0b1'.'01' x 123); print "bin: ",$x->as_bin()," hex:",$x->as_hex()," dec: ",$x,"\n"; -=head1 Autocreating constants +=head1 NUMERIC LITERALS -After C all the B decimal, hexadecimal -and binary constants in the given scope are converted to C. This -conversion happens at compile time. +After C all numeric literals in the given scope +are converted to C objects. This conversion happens at compile +time. Every non-integer is convert to a NaN. -In particular, +For example, - perl -MMath::BigInt=:constant -e 'print 2**100,"\n"' + perl -MMath::BigInt=:constant -le 'print 2**150' -prints the integer value of C<2**100>. Note that without conversion of -constants the expression 2**100 is calculated using Perl scalars. +prints the exact value of C<2**150>. Note that without conversion of constants +to objects the expression C<2**150> is calculated using Perl scalars, which +leads to an inaccurate result. -Please note that strings and floating point constants are not affected, so that +Please note that strings are not affected, so that use Math::BigInt qw/:constant/; - $x = 1234567890123456789012345678901234567890 - + 123456789123456789; - $y = '1234567890123456789012345678901234567890' - + '123456789123456789'; + $x = "1234567890123456789012345678901234567890" + + "123456789123456789"; -does not give you what you expect. You need an explicit Math::BigInt->new() -around one of the operands. You should also quote large constants to protect +does give you what you expect. You need an explicit Math::BigInt->new() around +at least one of the operands. You should also quote large constants to prevent loss of precision: use Math::BigInt; - $x = Math::BigInt->new('1234567889123456789123456789123456789'); + $x = Math::BigInt->new("1234567889123456789123456789123456789"); + +Without the quotes Perl first converts the large number to a floating point +constant at compile time, and then converts the result to a Math::BigInt object +at run time, which results in an inaccurate result. + +=head2 Hexadecimal, octal, and binary floating point literals + +Perl (and this module) accepts hexadecimal, octal, and binary floating point +literals, but use them with care with Perl versions before v5.32.0, because some +versions of Perl silently give the wrong result. Below are some examples of +different ways to write the number decimal 314. + +Hexadecimal floating point literals: + + 0x1.3ap+8 0X1.3AP+8 + 0x1.3ap8 0X1.3AP8 + 0x13a0p-4 0X13A0P-4 -Without the quotes Perl would convert the large number to a floating point -constant at compile time and then hand the result to Math::BigInt, which -results in an truncated result or a NaN. +Octal floating point literals (with "0" prefix): -This also applies to integers that look like floating point constants: + 01.164p+8 01.164P+8 + 01.164p8 01.164P8 + 011640p-4 011640P-4 - use Math::BigInt ':constant'; +Octal floating point literals (with "0o" prefix) (requires v5.34.0): - print ref(123e2),"\n"; - print ref(123.2e2),"\n"; + 0o1.164p+8 0O1.164P+8 + 0o1.164p8 0O1.164P8 + 0o11640p-4 0O11640P-4 -prints nothing but newlines. Use either L or L to get -this to work. +Binary floating point literals: + + 0b1.0011101p+8 0B1.0011101P+8 + 0b1.0011101p8 0B1.0011101P8 + 0b10011101000p-2 0B10011101000P-2 =head1 PERFORMANCE @@ -6871,17 +8007,13 @@ You can also look for information at: =over 4 -=item * RT: CPAN's request tracker - -L +=item * GitHub -=item * AnnoCPAN: Annotated CPAN documentation +L -L +=item * RT: CPAN's request tracker -=item * CPAN Ratings - -L +L =item * MetaCPAN @@ -6891,6 +8023,10 @@ L L +=item * CPAN Ratings + +L + =item * The Bignum mailing list =over 4 @@ -6942,7 +8078,7 @@ Florian Ragwitz Eflora@cpan.orgE, 2010. =item * -Peter John Acklam Epjacklam@online.noE, 2011-. +Peter John Acklam Epjacklam@gmail.comE, 2011-. =back diff --git a/gnu/usr.bin/perl/cpan/Math-BigInt/lib/Math/BigInt/Calc.pm b/gnu/usr.bin/perl/cpan/Math-BigInt/lib/Math/BigInt/Calc.pm index cd8f1ee44e6..c6cb703ad71 100644 --- a/gnu/usr.bin/perl/cpan/Math-BigInt/lib/Math/BigInt/Calc.pm +++ b/gnu/usr.bin/perl/cpan/Math-BigInt/lib/Math/BigInt/Calc.pm @@ -7,89 +7,171 @@ use warnings; use Carp qw< carp croak >; use Math::BigInt::Lib; -our $VERSION = '1.999818'; +our $VERSION = '1.999830'; +$VERSION =~ tr/_//d; our @ISA = ('Math::BigInt::Lib'); # Package to store unsigned big integers in decimal and do math with them - +# # Internally the numbers are stored in an array with at least 1 element, no # leading zero parts (except the first) and in base 1eX where X is determined # automatically at loading time to be the maximum possible value - +# # todo: # - fully remove funky $# stuff in div() (maybe - that code scares me...) -# USE_MUL: due to problems on certain os (os390, posix-bc) "* 1e-5" is used -# instead of "/ 1e5" at some places, (marked with USE_MUL). Other platforms -# BS2000, some Crays need USE_DIV instead. -# The BEGIN block is used to determine which of the two variants gives the -# correct result. - -# Beware of things like: -# $i = $i * $y + $car; $car = int($i / $BASE); $i = $i % $BASE; -# This works on x86, but fails on ARM (SA1100, iPAQ) due to who knows what -# reasons. So, use this instead (slower, but correct): -# $i = $i * $y + $car; $car = int($i / $BASE); $i -= $BASE * $car; - ############################################################################## # global constants, flags and accessory # constants for easier life -my ($BASE, $BASE_LEN, $RBASE, $MAX_VAL); -my ($AND_BITS, $XOR_BITS, $OR_BITS); -my ($AND_MASK, $XOR_MASK, $OR_MASK); -sub _base_len { - # Set/get the BASE_LEN and assorted other, related values. - # Used only by the testsuite, the set variant is used only by the BEGIN - # block below: - - my ($class, $b, $int) = @_; - if (defined $b) { - no warnings "redefine"; - - if ($] >= 5.008 && $int && $b > 7) { - $BASE_LEN = $b; - *_mul = \&_mul_use_div_64; - *_div = \&_div_use_div_64; - $BASE = int("1e" . $BASE_LEN); - $MAX_VAL = $BASE-1; - return $BASE_LEN unless wantarray; - return ($BASE_LEN, $BASE, $AND_BITS, $XOR_BITS, $OR_BITS, $BASE_LEN, $MAX_VAL); - } +my $MAX_EXP_F; # the maximum possible base 10 exponent with "no integer" +my $MAX_EXP_I; # the maximum possible base 10 exponent with "use integer" + +my $MAX_BITS; # the maximum possible number of bits for $AND_BITS etc. + +my $BASE_LEN; # the current base exponent in use +my $USE_INT; # whether "use integer" is used in the computations + +my $BASE; # the current base, e.g., 10000 if $BASE_LEN is 5 +my $MAX_VAL; # maximum value for an element, i.e., $BASE - 1 + +my $AND_BITS; # maximum value used in binary and, e.g., 0xffff +my $OR_BITS; # ditto for binary or +my $XOR_BITS; # ditto for binary xor + +my $AND_MASK; # $AND_BITS + 1, e.g., 0x10000 if $AND_BITS is 0xffff +my $OR_MASK; # ditto for binary or +my $XOR_MASK; # ditto for binary xor + +sub config { + my $self = shift; - # find whether we can use mul or div in mul()/div() - $BASE_LEN = $b + 1; - my $caught = 0; - while (--$BASE_LEN > 5) { - $BASE = int("1e" . $BASE_LEN); - $RBASE = abs('1e-' . $BASE_LEN); # see USE_MUL - $caught = 0; - $caught += 1 if (int($BASE * $RBASE) != 1); # should be 1 - $caught += 2 if (int($BASE / $BASE) != 1); # should be 1 - last if $caught != 3; + croak "Missing input argument" unless @_; + + # Called as a getter. + + if (@_ == 1) { + my $param = shift; + croak "Parameter name must be a non-empty string" + unless defined $param && length $param; + return $BASE_LEN if $param eq 'base_len'; + return $USE_INT if $param eq 'use_int'; + croak "Unknown parameter '$param'"; + } + + # Called as a setter. + + my $opts; + while (@_) { + my $param = shift; + croak "Parameter name must be a non-empty string" + unless defined $param && length $param; + croak "Missing value for parameter '$param'" + unless @_; + my $value = shift; + + if ($param eq 'base_len' || $param eq 'use_int') { + $opts -> {$param} = $value; + next; } - $BASE = int("1e" . $BASE_LEN); - $RBASE = abs('1e-' . $BASE_LEN); # see USE_MUL - $MAX_VAL = $BASE-1; - # ($caught & 1) != 0 => cannot use MUL - # ($caught & 2) != 0 => cannot use DIV - if ($caught == 2) # 2 + croak "Unknown parameter '$param'"; + } + + $BASE_LEN = $opts -> {base_len} if exists $opts -> {base_len}; + $USE_INT = $opts -> {use_int} if exists $opts -> {use_int}; + __PACKAGE__ -> _base_len($BASE_LEN, $USE_INT); + + return $self; +} + +sub _base_len { + #my $class = shift; # $class is not used + shift; + + if (@_) { # if called as setter ... + my ($base_len, $use_int) = @_; + + croak "The base length must be a positive integer" + unless defined($base_len) && $base_len == int($base_len) + && $base_len > 0; + + if ( $use_int && ($base_len > $MAX_EXP_I) || + !$use_int && ($base_len > $MAX_EXP_F)) { - # must USE_MUL since we cannot use DIV - *_mul = \&_mul_use_mul; - *_div = \&_div_use_mul; - } else # 0 or 1 + croak "The maximum base length (exponent) is $MAX_EXP_I with", + " 'use integer' and $MAX_EXP_F without 'use integer'. The", + " requested settings, a base length of $base_len ", + $use_int ? "with" : "without", " 'use integer', is invalid."; + } + + $BASE_LEN = $base_len; + $BASE = 0 + ("1" . ("0" x $BASE_LEN)); + $MAX_VAL = $BASE - 1; + $USE_INT = $use_int ? 1 : 0; + { - # can USE_DIV instead - *_mul = \&_mul_use_div; - *_div = \&_div_use_div; + no warnings "redefine"; + if ($use_int) { + *_mul = \&_mul_use_int; + *_div = \&_div_use_int; + } else { + *_mul = \&_mul_no_int; + *_div = \&_div_no_int; + } } } + + # Find max bits. This is the largest power of two that is both no larger + # than $BASE and no larger than the maximum integer (i.e., ~0). We need + # this limitation because _and(), _or(), and _xor() only work on one + # element at a time. + + my $umax = ~0; # largest unsigned integer + my $tmp = $umax < $BASE ? $umax : $BASE; + + $MAX_BITS = 0; + while ($tmp >>= 1) { + $MAX_BITS++; + } + + # Limit to 32 bits for portability. Is this really necessary? XXX + + $MAX_BITS = 32 if $MAX_BITS > 32; + + # Find out how many bits _and, _or and _xor can take (old default = 16). + # Are these tests really necessary? Can't we just use $MAX_BITS? XXX + + for ($AND_BITS = $MAX_BITS ; $AND_BITS > 0 ; $AND_BITS--) { + my $x = CORE::oct('0b' . '1' x $AND_BITS); + my $y = $x & $x; + my $z = 2 * (2 ** ($AND_BITS - 1)) + 1; + last unless $AND_BITS < $MAX_BITS && $x == $z && $y == $x; + } + + for ($XOR_BITS = $MAX_BITS ; $XOR_BITS > 0 ; $XOR_BITS--) { + my $x = CORE::oct('0b' . '1' x $XOR_BITS); + my $y = $x ^ $x; + my $z = 2 * (2 ** ($XOR_BITS - 1)) + 1; + last unless $XOR_BITS < $MAX_BITS && $x == $z && $y == $x; + } + + for ($OR_BITS = $MAX_BITS ; $OR_BITS > 0 ; $OR_BITS--) { + my $x = CORE::oct('0b' . '1' x $OR_BITS); + my $y = $x | $x; + my $z = 2 * (2 ** ($OR_BITS - 1)) + 1; + last unless $OR_BITS < $MAX_BITS && $x == $z && $y == $x; + } + + $AND_MASK = __PACKAGE__->_new(( 2 ** $AND_BITS )); + $XOR_MASK = __PACKAGE__->_new(( 2 ** $XOR_BITS )); + $OR_MASK = __PACKAGE__->_new(( 2 ** $OR_BITS )); + return $BASE_LEN unless wantarray; - return ($BASE_LEN, $BASE, $AND_BITS, $XOR_BITS, $OR_BITS, $BASE_LEN, $MAX_VAL); + return ($BASE_LEN, $BASE, $AND_BITS, $XOR_BITS, $OR_BITS, $BASE_LEN, $MAX_VAL, + $MAX_BITS, $MAX_EXP_F, $MAX_EXP_I, $USE_INT); } sub _new { @@ -116,89 +198,98 @@ sub _new { } BEGIN { - # from Daniel Pfeiffer: determine largest group of digits that is precisely - # multipliable with itself plus carry - # Test now changed to expect the proper pattern, not a result off by 1 or 2 - my ($e, $num) = 3; # lowest value we will use is 3+1-1 = 3 - do { - $num = '9' x ++$e; - $num *= $num + 1; - } while $num =~ /9{$e}0{$e}/; # must be a certain pattern - $e--; # last test failed, so retract one step - # the limits below brush the problems with the test above under the rug: - # the test should be able to find the proper $e automatically - $e = 5 if $^O =~ /^uts/; # UTS get's some special treatment - $e = 5 if $^O =~ /^unicos/; # unicos is also problematic (6 seems to work - # there, but we play safe) - - my $int = 0; - if ($e > 7) { - use integer; - my $e1 = 7; - $num = 7; - do { - $num = ('9' x ++$e1) + 0; - $num *= $num + 1; - } while ("$num" =~ /9{$e1}0{$e1}/); # must be a certain pattern - $e1--; # last test failed, so retract one step - if ($e1 > 7) { - $int = 1; - $e = $e1; - } - } - - __PACKAGE__ -> _base_len($e, $int); # set and store - use integer; - # find out how many bits _and, _or and _xor can take (old default = 16) - # I don't think anybody has yet 128 bit scalars, so let's play safe. - local $^W = 0; # don't warn about 'nonportable number' - $AND_BITS = 15; - $XOR_BITS = 15; - $OR_BITS = 15; - - # find max bits, we will not go higher than numberofbits that fit into $BASE - # to make _and etc simpler (and faster for smaller, slower for large numbers) - my $max = 16; - while (2 ** $max < $BASE) { - $max++; - } - { - no integer; - $max = 16 if $] < 5.006; # older Perls might not take >16 too well - } - my ($x, $y, $z); - - do { - $AND_BITS++; - $x = CORE::oct('0b' . '1' x $AND_BITS); - $y = $x & $x; - $z = (2 ** $AND_BITS) - 1; - } while ($AND_BITS < $max && $x == $z && $y == $x); - $AND_BITS --; # retreat one step - - do { - $XOR_BITS++; - $x = CORE::oct('0b' . '1' x $XOR_BITS); - $y = $x ^ 0; - $z = (2 ** $XOR_BITS) - 1; - } while ($XOR_BITS < $max && $x == $z && $y == $x); - $XOR_BITS --; # retreat one step - - do { - $OR_BITS++; - $x = CORE::oct('0b' . '1' x $OR_BITS); - $y = $x | $x; - $z = (2 ** $OR_BITS) - 1; - } while ($OR_BITS < $max && $x == $z && $y == $x); - $OR_BITS--; # retreat one step + # Compute $MAX_EXP_F, the maximum usable base 10 exponent. - $AND_MASK = __PACKAGE__->_new(( 2 ** $AND_BITS )); - $XOR_MASK = __PACKAGE__->_new(( 2 ** $XOR_BITS )); - $OR_MASK = __PACKAGE__->_new(( 2 ** $OR_BITS )); - - # We can compute the approximate length no faster than the real length: - *_alen = \&_len; + # The largest element in base 10**$BASE_LEN is 10**$BASE_LEN-1. For instance, + # with $BASE_LEN = 5, the largest element is 99_999, and the largest carry is + # + # int( 99_999 * 99_999 / 100_000 ) = 99_998 + # + # so make sure that 99_999 * 99_999 + 99_998 is within the range of integers + # that can be represented accuratly. + # + # Note that on some systems with quadmath support, the following is within + # the range of numbers that can be represented exactly, but it still gives + # the incorrect value $r = 2 (even though POSIX::fmod($x, $y) gives the + # correct value of 1: + # + # $x = 99999999999999999; + # $y = 100000000000000000; + # $r = $x * $x % $y; # should be 1 + # + # so also check for this. + + for ($MAX_EXP_F = 1 ; ; $MAX_EXP_F++) { # when $MAX_EXP_F = 5 + my $MAX_EXP_FM1 = $MAX_EXP_F - 1; # = 4 + my $bs = "1" . ("0" x $MAX_EXP_F); # = "100000" + my $xs = "9" x $MAX_EXP_F; # = "99999" + my $cs = ("9" x $MAX_EXP_FM1) . "8"; # = "99998" + my $ys = $cs . ("0" x $MAX_EXP_FM1) . "1"; # = "9999800001" + + # Compute and check the product. + my $yn = $xs * $xs; # = 9999800001 + last if $yn != $ys; + + # Compute and check the remainder. + my $rn = $yn % $bs; # = 1 + last if $rn != 1; + + # Compute and check the carry. The division here is exact. + my $cn = ($yn - $rn) / $bs; # = 99998 + last if $cn != $cs; + + # Compute and check product plus carry. + my $zs = $cs . ("9" x $MAX_EXP_F); # = "9999899999" + my $zn = $yn + $cn; # = 99998999999 + last if $zn != $zs; + last if $zn - ($zn - 1) != 1; + } + $MAX_EXP_F--; # last test failed, so retract one step + + # Compute $MAX_EXP_I, the maximum usable base 10 exponent within the range + # of what is available with "use integer". On older versions of Perl, + # integers are converted to floating point numbers, even though they are + # within the range of what can be represented as integers. For example, on + # some 64 bit Perls, 999999999 * 999999999 becomes 999999998000000000, not + # 999999998000000001, even though the latter is less than the maximum value + # for a 64 bit integer, 18446744073709551615. + + my $umax = ~0; # largest unsigned integer + for ($MAX_EXP_I = int(0.5 * log($umax) / log(10)); + $MAX_EXP_I > 0; + $MAX_EXP_I--) + { # when $MAX_EXP_I = 5 + my $MAX_EXP_IM1 = $MAX_EXP_I - 1; # = 4 + my $bs = "1" . ("0" x $MAX_EXP_I); # = "100000" + my $xs = "9" x $MAX_EXP_I; # = "99999" + my $cs = ("9" x $MAX_EXP_IM1) . "8"; # = "99998" + my $ys = $cs . ("0" x $MAX_EXP_IM1) . "1"; # = "9999800001" + + # Compute and check the product. + my $yn = $xs * $xs; # = 9999800001 + next if $yn != $ys; + + # Compute and check the remainder. + my $rn = $yn % $bs; # = 1 + next if $rn != 1; + + # Compute and check the carry. The division here is exact. + my $cn = ($yn - $rn) / $bs; # = 99998 + next if $cn != $cs; + + # Compute and check product plus carry. + my $zs = $cs . ("9" x $MAX_EXP_I); # = "9999899999" + my $zn = $yn + $cn; # = 99998999999 + next if $zn != $zs; + next if $zn - ($zn - 1) != 1; + last; + } + + ($BASE_LEN, $USE_INT) = $MAX_EXP_F > $MAX_EXP_I + ? ($MAX_EXP_F, 0) : ($MAX_EXP_I, 1); + + __PACKAGE__ -> _base_len($BASE_LEN, $USE_INT); } ############################################################################### @@ -224,18 +315,20 @@ sub _two { sub _ten { # create a 10 my $class = shift; - bless [ 10 ], $class; + my $self = $BASE_LEN == 1 ? [ 0, 1 ] : [ 10 ]; + bless $self, $class; } sub _1ex { # create a 1Ex my $class = shift; - my $rem = $_[0] % $BASE_LEN; # remainder - my $parts = $_[0] / $BASE_LEN; # parts + my $rem = $_[0] % $BASE_LEN; # remainder + my $div = ($_[0] - $rem) / $BASE_LEN; # parts - # 000000, 000000, 100 - bless [ (0) x $parts, '1' . ('0' x $rem) ], $class; + # With a $BASE_LEN of 6, 1e14 becomes + # [ 000000, 000000, 100 ] -> [ 0, 0, 100 ] + bless [ (0) x $div, 0 + ("1" . ("0" x $rem)) ], $class; } sub _copy { @@ -244,8 +337,33 @@ sub _copy { return bless [ @{ $_[0] } ], $class; } -# catch and throw away -sub import { } +sub import { + my $self = shift; + + my $opts; + my ($base_len, $use_int); + while (@_) { + my $param = shift; + croak "Parameter name must be a non-empty string" + unless defined $param && length $param; + croak "Missing value for parameter '$param'" + unless @_; + my $value = shift; + + if ($param eq 'base_len' || $param eq 'use_int') { + $opts -> {$param} = $value; + next; + } + + croak "Unknown parameter '$param'"; + } + + $base_len = exists $opts -> {base_len} ? $opts -> {base_len} : $BASE_LEN; + $use_int = exists $opts -> {use_int} ? $opts -> {use_int} : $USE_INT; + __PACKAGE__ -> _base_len($base_len, $use_int); + + return $self; +} ############################################################################## # convert back to string and number @@ -319,10 +437,10 @@ sub _add { # For each in Y, add Y to X and carry. If after that, something is left in # X, foreach in X add carry to X and then return X, carry. Trades one # "$j++" for having to shift arrays. - my $i; + my $car = 0; my $j = 0; - for $i (@$y) { + for my $i (@$y) { $x->[$j] -= $BASE if $car = (($x->[$j] += $i + $car) >= $BASE) ? 1 : 0; $j++; } @@ -368,10 +486,9 @@ sub _sub { my ($c, $sx, $sy, $s) = @_; my $car = 0; - my $i; my $j = 0; if (!$s) { - for $i (@$sx) { + for my $i (@$sx) { last unless defined $sy->[$j] || $car; $i += $BASE if $car = (($i -= ($sy->[$j] || 0) + $car) < 0); $j++; @@ -379,7 +496,7 @@ sub _sub { # might leave leading zeros, so fix that return __strip_zeros($sx); } - for $i (@$sx) { + for my $i (@$sx) { # We can't do an early out if $x < $y, since we need to copy the high # chunks from $y. Found by Bob Mathews. #last unless defined $sy->[$j] || $car; @@ -391,76 +508,12 @@ sub _sub { __strip_zeros($sy); } -sub _mul_use_mul { - # (ref to int_num_array, ref to int_num_array) - # multiply two numbers in internal representation - # modifies first arg, second need not be different from first - my ($c, $xv, $yv) = @_; - - if (@$yv == 1) { - # shortcut for two very short numbers (improved by Nathan Zook) works - # also if xv and yv are the same reference, and handles also $x == 0 - if (@$xv == 1) { - if (($xv->[0] *= $yv->[0]) >= $BASE) { - my $rem = $xv->[0] % $BASE; - $xv->[1] = ($xv->[0] - $rem) * $RBASE; - $xv->[0] = $rem; - } - return $xv; - } - # $x * 0 => 0 - if ($yv->[0] == 0) { - @$xv = (0); - return $xv; - } - - # multiply a large number a by a single element one, so speed up - my $y = $yv->[0]; - my $car = 0; - my $rem; - foreach my $i (@$xv) { - $i = $i * $y + $car; - $rem = $i % $BASE; - $car = ($i - $rem) * $RBASE; - $i = $rem; - } - push @$xv, $car if $car != 0; - return $xv; - } - - # shortcut for result $x == 0 => result = 0 - return $xv if @$xv == 1 && $xv->[0] == 0; - - # since multiplying $x with $x fails, make copy in this case - $yv = $c->_copy($xv) if $xv == $yv; # same references? - - my @prod = (); - my ($prod, $rem, $car, $cty, $xi, $yi); - for $xi (@$xv) { - $car = 0; - $cty = 0; - # looping through this if $xi == 0 is silly - so optimize it away! - $xi = (shift(@prod) || 0), next if $xi == 0; - for $yi (@$yv) { - $prod = $xi * $yi + ($prod[$cty] || 0) + $car; - $rem = $prod % $BASE; - $car = int(($prod - $rem) * $RBASE); - $prod[$cty++] = $rem; - } - $prod[$cty] += $car if $car; # need really to check for 0? - $xi = shift(@prod) || 0; # || 0 makes v5.005_3 happy - } - push @$xv, @prod; - $xv; -} - -sub _mul_use_div_64 { +sub _mul_use_int { # (ref to int_num_array, ref to int_num_array) # multiply two numbers in internal representation # modifies first arg, second need not be different from first # works for 64 bit integer with "use integer" my ($c, $xv, $yv) = @_; - use integer; if (@$yv == 1) { @@ -498,13 +551,13 @@ sub _mul_use_div_64 { $yv = $c->_copy($xv) if $xv == $yv; # same references? my @prod = (); - my ($prod, $car, $cty, $xi, $yi); - for $xi (@$xv) { + my ($prod, $car, $cty); + for my $xi (@$xv) { $car = 0; $cty = 0; # looping through this if $xi == 0 is silly - so optimize it away! $xi = (shift(@prod) || 0), next if $xi == 0; - for $yi (@$yv) { + for my $yi (@$yv) { $prod = $xi * $yi + ($prod[$cty] || 0) + $car; $prod[$cty++] = $prod - ($car = $prod / $BASE) * $BASE; } @@ -515,7 +568,7 @@ sub _mul_use_div_64 { $xv; } -sub _mul_use_div { +sub _mul_no_int { # (ref to int_num_array, ref to int_num_array) # multiply two numbers in internal representation # modifies first arg, second need not be different from first @@ -559,13 +612,13 @@ sub _mul_use_div { $yv = $c->_copy($xv) if $xv == $yv; # same references? my @prod = (); - my ($prod, $rem, $car, $cty, $xi, $yi); - for $xi (@$xv) { + my ($prod, $rem, $car, $cty); + for my $xi (@$xv) { $car = 0; $cty = 0; # looping through this if $xi == 0 is silly - so optimize it away! $xi = (shift(@prod) || 0), next if $xi == 0; - for $yi (@$yv) { + for my $yi (@$yv) { $prod = $xi * $yi + ($prod[$cty] || 0) + $car; $rem = $prod % $BASE; $car = ($prod - $rem) / $BASE; @@ -578,166 +631,7 @@ sub _mul_use_div { $xv; } -sub _div_use_mul { - # ref to array, ref to array, modify first array and return remainder if - # in list context - - my ($c, $x, $yorg) = @_; - - # the general div algorithm here is about O(N*N) and thus quite slow, so - # we first check for some special cases and use shortcuts to handle them. - - # if both numbers have only one element: - if (@$x == 1 && @$yorg == 1) { - # shortcut, $yorg and $x are two small numbers - my $rem = [ $x->[0] % $yorg->[0] ]; - bless $rem, $c; - $x->[0] = ($x->[0] - $rem->[0]) / $yorg->[0]; - return ($x, $rem) if wantarray; - return $x; - } - - # if x has more than one, but y has only one element: - if (@$yorg == 1) { - my $rem; - $rem = $c->_mod($c->_copy($x), $yorg) if wantarray; - - # shortcut, $y is < $BASE - my $j = @$x; - my $r = 0; - my $y = $yorg->[0]; - my $b; - while ($j-- > 0) { - $b = $r * $BASE + $x->[$j]; - $r = $b % $y; - $x->[$j] = ($b - $r) / $y; - } - pop(@$x) if @$x > 1 && $x->[-1] == 0; # remove any trailing zero - return ($x, $rem) if wantarray; - return $x; - } - - # now x and y have more than one element - - # check whether y has more elements than x, if so, the result is 0 - if (@$yorg > @$x) { - my $rem; - $rem = $c->_copy($x) if wantarray; # make copy - @$x = 0; # set to 0 - return ($x, $rem) if wantarray; # including remainder? - return $x; # only x, which is [0] now - } - - # check whether the numbers have the same number of elements, in that case - # the result will fit into one element and can be computed efficiently - if (@$yorg == @$x) { - my $cmp = 0; - for (my $j = $#$x ; $j >= 0 ; --$j) { - last if $cmp = $x->[$j] - $yorg->[$j]; - } - - if ($cmp == 0) { # x = y - @$x = 1; - return $x, $c->_zero() if wantarray; - return $x; - } - - if ($cmp < 0) { # x < y - if (wantarray) { - my $rem = $c->_copy($x); - @$x = 0; - return $x, $rem; - } - @$x = 0; - return $x; - } - } - - # all other cases: - - my $y = $c->_copy($yorg); # always make copy to preserve - - my $tmp = $y->[-1] + 1; - my $rem = $BASE % $tmp; - my $dd = ($BASE - $rem) / $tmp; - if ($dd != 1) { - my $car = 0; - for my $xi (@$x) { - $xi = $xi * $dd + $car; - $xi -= ($car = int($xi * $RBASE)) * $BASE; # see USE_MUL - } - push(@$x, $car); - $car = 0; - for my $yi (@$y) { - $yi = $yi * $dd + $car; - $yi -= ($car = int($yi * $RBASE)) * $BASE; # see USE_MUL - } - } else { - push(@$x, 0); - } - - # @q will accumulate the final result, $q contains the current computed - # part of the final result - - my @q = (); - my ($v2, $v1) = @$y[-2, -1]; - $v2 = 0 unless $v2; - while ($#$x > $#$y) { - my ($u2, $u1, $u0) = @$x[-3 .. -1]; - $u2 = 0 unless $u2; - #warn "oups v1 is 0, u0: $u0 $y->[-2] $y->[-1] l ",scalar @$y,"\n" - # if $v1 == 0; - my $tmp = $u0 * $BASE + $u1; - my $rem = $tmp % $v1; - my $q = $u0 == $v1 ? $MAX_VAL : (($tmp - $rem) / $v1); - --$q while $v2 * $q > ($u0 * $BASE + $u1 - $q * $v1) * $BASE + $u2; - if ($q) { - my $prd; - my ($car, $bar) = (0, 0); - for (my $yi = 0, my $xi = $#$x - $#$y - 1; $yi <= $#$y; ++$yi, ++$xi) { - $prd = $q * $y->[$yi] + $car; - $prd -= ($car = int($prd * $RBASE)) * $BASE; # see USE_MUL - $x->[$xi] += $BASE if $bar = (($x->[$xi] -= $prd + $bar) < 0); - } - if ($x->[-1] < $car + $bar) { - $car = 0; - --$q; - for (my $yi = 0, my $xi = $#$x - $#$y - 1; $yi <= $#$y; ++$yi, ++$xi) { - $x->[$xi] -= $BASE - if $car = (($x->[$xi] += $y->[$yi] + $car) >= $BASE); - } - } - } - pop(@$x); - unshift(@q, $q); - } - - if (wantarray) { - my $d = bless [], $c; - if ($dd != 1) { - my $car = 0; - my ($prd, $rem); - for my $xi (reverse @$x) { - $prd = $car * $BASE + $xi; - $rem = $prd % $dd; - $tmp = ($prd - $rem) / $dd; - $car = $rem; - unshift @$d, $tmp; - } - } else { - @$d = @$x; - } - @$x = @q; - __strip_zeros($x); - __strip_zeros($d); - return ($x, $d); - } - @$x = @q; - __strip_zeros($x); - $x; -} - -sub _div_use_div_64 { +sub _div_use_int { # ref to array, ref to array, modify first array and return remainder if # in list context @@ -900,7 +794,7 @@ sub _div_use_div_64 { $x; } -sub _div_use_div { +sub _div_no_int { # ref to array, ref to array, modify first array and return remainder if # in list context @@ -1157,12 +1051,12 @@ sub _is_zero { sub _is_even { # return true if arg is even - $_[1]->[0] & 1 ? 0 : 1; + $_[1]->[0] % 2 ? 0 : 1; } sub _is_odd { # return true if arg is odd - $_[1]->[0] & 1 ? 1 : 0; + $_[1]->[0] % 2 ? 1 : 0; } sub _is_one { @@ -1177,7 +1071,11 @@ sub _is_two { sub _is_ten { # return true if arg is ten - @{$_[1]} == 1 && $_[1]->[0] == 10 ? 1 : 0; + if ($BASE_LEN == 1) { + @{$_[1]} == 2 && $_[1]->[0] == 0 && $_[1]->[1] == 1 ? 1 : 0; + } else { + @{$_[1]} == 1 && $_[1]->[0] == 10 ? 1 : 0; + } } sub __strip_zeros { @@ -1316,17 +1214,21 @@ sub _mod { # shifts sub _rsft { - my ($c, $x, $y, $n) = @_; + my ($c, $x, $n, $b) = @_; + return $x if $c->_is_zero($x) || $c->_is_zero($n); - if ($n != 10) { - $n = $c->_new($n); - return scalar $c->_div($x, $c->_pow($n, $y)); + # For backwards compatibility, allow the base $b to be a scalar. + + $b = $c->_new($b) unless ref $b; + + if ($c -> _acmp($b, $c -> _ten())) { + return scalar $c->_div($x, $c->_pow($c->_copy($b), $n)); } # shortcut (faster) for shifting by 10) # multiples of $BASE_LEN my $dst = 0; # destination - my $src = $c->_num($y); # as normal int + my $src = $c->_num($n); # as normal int my $xlen = (@$x - 1) * $BASE_LEN + length(int($x->[-1])); if ($src >= $xlen or ($src == $xlen and !defined $x->[1])) { # 12345 67890 shifted right by more than 10 digits => 0 @@ -1519,27 +1421,50 @@ sub _nok { return $n; } -my @factorials = ( - 1, - 1, - 2, - 2*3, - 2*3*4, - 2*3*4*5, - 2*3*4*5*6, - 2*3*4*5*6*7, - ); - sub _fac { # factorial of $x # ref to array, return ref to array my ($c, $cx) = @_; - if ((@$cx == 1) && ($cx->[0] <= 7)) { - $cx->[0] = $factorials[$cx->[0]]; # 0 => 1, 1 => 1, 2 => 2 etc. + # We cache the smallest values. Don't assume that a single element has a + # value larger than 9 or else it won't work with a $BASE_LEN of 1. + + if (@$cx == 1) { + my @factorials = + ( + '1', + '1', + '2', + '6', + '24', + '120', + '720', + '5040', + '40320', + '362880', + ); + if ($cx->[0] <= $#factorials) { + my $tmp = $c -> _new($factorials[ $cx->[0] ]); + @$cx = @$tmp; + return $cx; + } + } + + # The old code further below doesn't work for small values of $BASE_LEN. + # Alas, I have not been able to (or taken the time to) decipher it, so for + # the case when $BASE_LEN is small, we call the parent class. This code + # works in for every value of $x and $BASE_LEN. We could use this code for + # all cases, but it is a little slower than the code further below, so at + # least for now we keep the code below. + + if ($BASE_LEN <= 2) { + my $tmp = $c -> SUPER::_fac($cx); + @$cx = @$tmp; return $cx; } + # This code does not work for small values of $BASE_LEN. + if ((@$cx == 1) && # we do this only if $x >= 12 and $x <= 7000 ($cx->[0] >= 12 && $cx->[0] < 7000)) { @@ -1759,9 +1684,9 @@ sub _log_int { $log += (@$base - 1) * $BASE_LEN; # calculate now a guess based on the values obtained above: - my $res = int($len / $log); + my $res = $c->_new(int($len / $log)); - @$x = $res; + @$x = @$res; my $trial = $c->_pow($c->_copy($base), $x); my $acmp = $c->_acmp($trial, $x_org); @@ -1795,9 +1720,8 @@ my $steps = 0; sub steps { $steps }; sub _sqrt { - # square-root of $x in place - # Compute a guess of the result (by rule of thumb), then improve it via - # Newton's method. + # square-root of $x in-place + my ($c, $x) = @_; if (@$x == 1) { @@ -1805,68 +1729,65 @@ sub _sqrt { $x->[0] = int(sqrt($x->[0])); return $x; } - my $y = $c->_copy($x); - # hopefully _len/2 is < $BASE, the -1 is to always undershot the guess - # since our guess will "grow" - my $l = int(($c->_len($x)-1) / 2); - - my $lastelem = $x->[-1]; # for guess - my $elems = @$x - 1; - # not enough digits, but could have more? - if ((length($lastelem) <= 3) && ($elems > 1)) { - # right-align with zero pad - my $len = length($lastelem) & 1; - print "$lastelem => " if DEBUG; - $lastelem .= substr($x->[-2] . '0' x $BASE_LEN, 0, $BASE_LEN); - # former odd => make odd again, or former even to even again - $lastelem = $lastelem / 10 if (length($lastelem) & 1) != $len; - print "$lastelem\n" if DEBUG; - } - - # construct $x (instead of $c->_lsft($x, $l, 10) - my $r = $l % $BASE_LEN; # 10000 00000 00000 00000 ($BASE_LEN=5) - $l = int($l / $BASE_LEN); - print "l = $l " if DEBUG; - - splice @$x, $l; # keep ref($x), but modify it - - # we make the first part of the guess not '1000...0' but int(sqrt($lastelem)) - # that gives us: - # 14400 00000 => sqrt(14400) => guess first digits to be 120 - # 144000 000000 => sqrt(144000) => guess 379 - - print "$lastelem (elems $elems) => " if DEBUG; - $lastelem = $lastelem / 10 if ($elems & 1 == 1); # odd or even? - my $g = sqrt($lastelem); - $g =~ s/\.//; # 2.345 => 2345 - $r -= 1 if $elems & 1 == 0; # 70 => 7 - - # padd with zeros if result is too short - $x->[$l--] = int(substr($g . '0' x $r, 0, $r+1)); - print "now ", $x->[-1] if DEBUG; - print " would have been ", int('1' . '0' x $r), "\n" if DEBUG; - - # If @$x > 1, we could compute the second elem of the guess, too, to create - # an even better guess. Not implemented yet. Does it improve performance? - $x->[$l--] = 0 while ($l >= 0); # all other digits of guess are zero - - print "start x= ", $c->_str($x), "\n" if DEBUG; - my $two = $c->_two(); - my $last = $c->_zero(); - my $lastlast = $c->_zero(); - $steps = 0 if DEBUG; - while ($c->_acmp($last, $x) != 0 && $c->_acmp($lastlast, $x) != 0) { - $steps++ if DEBUG; - $lastlast = $c->_copy($last); - $last = $c->_copy($x); - $c->_add($x, $c->_div($c->_copy($y), $x)); - $c->_div($x, $two ); - print " x= ", $c->_str($x), "\n" if DEBUG; - } - print "\nsteps in sqrt: $steps, " if DEBUG; - $c->_dec($x) if $c->_acmp($y, $c->_mul($c->_copy($x), $x)) < 0; # overshot? - print " final ", $x->[-1], "\n" if DEBUG; - $x; + + # Create an initial guess for the square root. + + my $s; + if (@$x % 2) { + $s = [ (0) x ((@$x - 1) / 2), int(sqrt($x->[-1])) ]; + } else { + $s = [ (0) x ((@$x - 2) / 2), int(sqrt($x->[-2] + $x->[-1] * $BASE)) ]; + } + + # Newton's method for the square root of y: + # + # x(n) * x(n) - y + # x(n+1) = x(n) - ----------------- + # 2 * x(n) + + my $cmp; + while (1) { + my $sq = $c -> _mul($c -> _copy($s), $s); + $cmp = $c -> _acmp($sq, $x); + + # If x(n)*x(n) > y, compute + # + # x(n) * x(n) - y + # x(n+1) = x(n) - ----------------- + # 2 * x(n) + + if ($cmp > 0) { + my $num = $c -> _sub($c -> _copy($sq), $x); + my $den = $c -> _mul($c -> _two(), $s); + my $delta = $c -> _div($num, $den); + last if $c -> _is_zero($delta); + $s = $c -> _sub($s, $delta); + } + + # If x(n)*x(n) < y, compute + # + # y - x(n) * x(n) + # x(n+1) = x(n) + ----------------- + # 2 * x(n) + + elsif ($cmp < 0) { + my $num = $c -> _sub($c -> _copy($x), $sq); + my $den = $c -> _mul($c -> _two(), $s); + my $delta = $c -> _div($num, $den); + last if $c -> _is_zero($delta); + $s = $c -> _add($s, $delta); + } + + # If x(n)*x(n) = y, we have the exact result. + + else { + last; + } + } + + $s = $c -> _dec($s) if $cmp > 0; # never overshoot + @$x = @$s; + return $x; } sub _root { @@ -1876,14 +1797,18 @@ sub _root { # Small numbers. - if (@$x == 1 && @$n == 1) { - # Result can be computed directly. Adjust initial result for numerical - # errors, e.g., int(1000**(1/3)) is 2, not 3. - my $y = int($x->[0] ** (1 / $n->[0])); - my $yp1 = $y + 1; - $y = $yp1 if $yp1 ** $n->[0] == $x->[0]; - $x->[0] = $y; - return $x; + if (@$x == 1) { + return $x if $x -> [0] == 0 || $x -> [0] == 1; + + if (@$n == 1) { + # Result can be computed directly. Adjust initial result for + # numerical errors, e.g., int(1000**(1/3)) is 2, not 3. + my $y = int($x->[0] ** (1 / $n->[0])); + my $yp1 = $y + 1; + $y = $yp1 if $yp1 ** $n->[0] == $x->[0]; + $x->[0] = $y; + return $x; + } } # If x <= n, the result is always (truncated to) 1. @@ -1891,7 +1816,7 @@ sub _root { if ((@$x > 1 || $x -> [0] > 0) && # if x is non-zero ... $c -> _acmp($x, $n) <= 0) # ... and x <= n { - my $one = $x -> _one(); + my $one = $c -> _one(); @$x = @$one; return $x; } @@ -2173,7 +2098,6 @@ sub _or { # $b = 1; $xrr = 0; foreach (@$xr) { $xrr += $_ * $b; $b *= $BASE; } # $b = 1; $yrr = 0; foreach (@$yr) { $yrr += $_ * $b; $b *= $BASE; } # $c->_add($x, $c->_mul(_new( $c, ($xrr | $yrr) ), $m) ); - $c->_add($z, $c->_mul([ 0 + $xr->[0] | 0 + $yr->[0] ], $m)); $c->_mul($m, $mask); } @@ -2191,94 +2115,70 @@ sub _as_hex { # convert a decimal number to hex (ref to array, return ref to string) my ($c, $x) = @_; - # fits into one element (handle also 0x0 case) - return sprintf("0x%x", $x->[0]) if @$x == 1; + return "0x0" if @$x == 1 && $x->[0] == 0; my $x1 = $c->_copy($x); + my $x10000 = [ 0x10000 ]; + my $es = ''; - my ($xr, $h, $x10000); - if ($] >= 5.006) { - $x10000 = [ 0x10000 ]; - $h = 'h4'; - } else { - $x10000 = [ 0x1000 ]; - $h = 'h3'; - } - while (@$x1 != 1 || $x1->[0] != 0) # _is_zero() - { + my $xr; + until (@$x1 == 1 && $x1->[0] == 0) { # _is_zero() ($x1, $xr) = $c->_div($x1, $x10000); - $es .= unpack($h, pack('V', $xr->[0])); + $es = sprintf('%04x', $xr->[0]) . $es; } - $es = reverse $es; - $es =~ s/^[0]+//; # strip leading zeros - '0x' . $es; # return result prepended with 0x + #$es = reverse $es; + $es =~ s/^0*/0x/; + return $es; } sub _as_bin { # convert a decimal number to bin (ref to array, return ref to string) my ($c, $x) = @_; - # fits into one element (and Perl recent enough), handle also 0b0 case - # handle zero case for older Perls - if ($] <= 5.005 && @$x == 1 && $x->[0] == 0) { - my $t = '0b0'; - return $t; - } - if (@$x == 1 && $] >= 5.006) { - my $t = sprintf("0b%b", $x->[0]); - return $t; - } + return "0b0" if @$x == 1 && $x->[0] == 0; + my $x1 = $c->_copy($x); + my $x10000 = [ 0x10000 ]; + my $es = ''; - my ($xr, $b, $x10000); - if ($] >= 5.006) { - $x10000 = [ 0x10000 ]; - $b = 'b16'; - } else { - $x10000 = [ 0x1000 ]; - $b = 'b12'; - } - while (!(@$x1 == 1 && $x1->[0] == 0)) # _is_zero() - { + my $xr; + + until (@$x1 == 1 && $x1->[0] == 0) { # _is_zero() ($x1, $xr) = $c->_div($x1, $x10000); - $es .= unpack($b, pack('v', $xr->[0])); + $es = sprintf('%016b', $xr->[0]) . $es; } - $es = reverse $es; - $es =~ s/^[0]+//; # strip leading zeros - '0b' . $es; # return result prepended with 0b + $es =~ s/^0*/0b/; + return $es; } sub _as_oct { # convert a decimal number to octal (ref to array, return ref to string) my ($c, $x) = @_; - # fits into one element (handle also 0 case) - return sprintf("0%o", $x->[0]) if @$x == 1; + return "00" if @$x == 1 && $x->[0] == 0; my $x1 = $c->_copy($x); + my $x1000 = [ 1 << 15 ]; # 15 bits = 32768 = 0100000 + my $es = ''; my $xr; - my $x1000 = [ 0100000 ]; - while (@$x1 != 1 || $x1->[0] != 0) # _is_zero() - { + until (@$x1 == 1 && $x1->[0] == 0) { # _is_zero() ($x1, $xr) = $c->_div($x1, $x1000); - $es .= reverse sprintf("%05o", $xr->[0]); + $es = sprintf("%05o", $xr->[0]) . $es; } - $es = reverse $es; - $es =~ s/^0+//; # strip leading zeros - '0' . $es; # return result prepended with 0 + $es =~ s/^0*/0/; # excactly one leading zero + return $es; } sub _from_oct { # convert a octal number to decimal (string, return ref to array) my ($c, $os) = @_; - # for older Perls, play safe - my $m = [ 0100000 ]; - my $d = 5; # 5 digits at a time + my $m = $c->_new(1 << 30); # 30 bits at a time (<32 bits!) + my $d = 10; # 10 octal digits at a time my $mul = $c->_one(); my $x = $c->_zero(); @@ -2291,7 +2191,7 @@ sub _from_oct { $val = CORE::oct($val); $i -= $d; $len --; - my $adder = [ $val ]; + my $adder = $c -> _new($val); $c->_add($x, $c->_mul($adder, $mul)) if $val != 0; $c->_mul($mul, $m) if $len >= 0; # skip last mul } @@ -2302,8 +2202,8 @@ sub _from_hex { # convert a hex number to decimal (string, return ref to array) my ($c, $hs) = @_; - my $m = $c->_new(0x10000000); # 28 bit at a time (<32 bit!) - my $d = 7; # 7 digits at a time + my $m = $c->_new(0x10000000); # 28 bit at a time (<32 bit!) + my $d = 7; # 7 hexadecimal digits at a time my $mul = $c->_one(); my $x = $c->_zero(); @@ -2316,7 +2216,7 @@ sub _from_hex { $val = CORE::hex($val); # hex does not like wrong chars $i -= $d; $len --; - my $adder = [ $val ]; + my $adder = $c->_new($val); # if the resulting number was to big to fit into one element, create a # two-element version (bug found by Mark Lakata - Thanx!) if (CORE::length($val) > $BASE_LEN) { @@ -2353,7 +2253,7 @@ sub _modinv { # modulo zero if ($c->_is_zero($y)) { - return undef, undef; + return; } # modulo one @@ -2384,7 +2284,7 @@ sub _modinv { } # if the gcd is not 1, then return NaN - return (undef, undef) unless $c->_is_one($a); + return unless $c->_is_one($a); ($v, $sign == 1 ? '+' : '-'); } @@ -2471,7 +2371,7 @@ sub _gcd { =head1 NAME -Math::BigInt::Calc - Pure Perl module to support Math::BigInt +Math::BigInt::Calc - pure Perl module to support Math::BigInt =head1 SYNOPSIS @@ -2484,25 +2384,76 @@ Math::BigInt::Calc - Pure Perl module to support Math::BigInt # to use it with Math::BigRat use Math::BigRat lib => 'Calc'; + # explicitly set base length and whether to "use integer" + use Math::BigInt::Calc base_len => 4, use_int => 1; + use Math::BigInt lib => 'Calc'; + =head1 DESCRIPTION Math::BigInt::Calc inherits from Math::BigInt::Lib. -In this library, the numbers are represented in base B = 10**N, where N is the -largest possible value that does not cause overflow in the intermediate -computations. The base B elements are stored in an array, with the least -significant element stored in array element zero. There are no leading zero -elements, except a single zero element when the number is zero. +In this library, the numbers are represented interenally in base B = 10**N, +where N is the largest possible integer that does not cause overflow in the +intermediate computations. The base B elements are stored in an array, with the +least significant element stored in array element zero. There are no leading +zero elements, except a single zero element when the number is zero. For +instance, if B = 10000, the number 1234567890 is represented internally as +[7890, 3456, 12]. + +=head1 OPTIONS + +When the module is loaded, it computes the maximum exponent, i.e., power of 10, +that can be used with and without "use integer" in the computations. The default +is to use this maximum exponent. If the combination of the 'base_len' value and +the 'use_int' value exceeds the maximum value, an error is thrown. + +=over 4 + +=item base_len + +The base length can be specified explicitly with the 'base_len' option. The +value must be a positive integer. + + use Math::BigInt::Calc base_len => 4; # use 10000 as internal base + +=item use_int + +This option is used to specify whether "use integer" should be used in the +internal computations. The value is interpreted as a boolean value, so use 0 or +"" for false and anything else for true. If the 'base_len' is not specified +together with 'use_int', the current value for the base length is used. + + use Math::BigInt::Calc use_int => 1; # use "use integer" internally + +=back + +=head1 METHODS + +This overview constains only the methods that are specific to +C. For the other methods, see L. + +=over 4 + +=item _base_len() + +Specify the desired base length and whether to enable "use integer" in the +computations. + + Math::BigInt::Calc -> _base_len($base_len, $use_int); + +Note that it is better to specify the base length and whether to use integers as +options when the module is loaded, for example like this + + use Math::BigInt::Calc base_len => 6, use_int => 1; -For instance, if B = 10000, the number 1234567890 is represented internally -as [7890, 3456, 12]. +=back =head1 SEE ALSO L for a description of the API. -Alternative libraries L, L, and -L. +Alternative libraries L, L, +L, L, and L. Some of the modules that use these libraries L, L, and L. diff --git a/gnu/usr.bin/perl/cpan/Math-BigInt/t/Math/BigFloat/Subclass.pm b/gnu/usr.bin/perl/cpan/Math-BigInt/t/Math/BigFloat/Subclass.pm index c9ec01e1293..938d10c625f 100644 --- a/gnu/usr.bin/perl/cpan/Math-BigInt/t/Math/BigFloat/Subclass.pm +++ b/gnu/usr.bin/perl/cpan/Math-BigInt/t/Math/BigFloat/Subclass.pm @@ -1,4 +1,4 @@ -#!perl +# -*- mode: perl; -*- # for testing subclassing Math::BigFloat @@ -10,20 +10,20 @@ use strict; use warnings; use Exporter; -use Math::BigFloat 1.38; - -our ($accuracy, $precision, $round_mode, $div_scale); +use Math::BigFloat; our @ISA = qw(Math::BigFloat Exporter); -our $VERSION = "0.07"; +our $VERSION = "0.08"; use overload; # inherit overload from BigInt # Globals -$accuracy = $precision = undef; -$round_mode = 'even'; -$div_scale = 40; +our $accuracy = undef; +our $precision = undef; +our $round_mode = Math::BigFloat::Subclass -> round_mode(); +our $div_scale = Math::BigFloat::Subclass -> div_scale(); +our $lib = ''; sub new { my $proto = shift; diff --git a/gnu/usr.bin/perl/cpan/Math-BigInt/t/Math/BigInt/BareCalc.pm b/gnu/usr.bin/perl/cpan/Math-BigInt/t/Math/BigInt/BareCalc.pm index 86522d5d63c..30e1a14fdf6 100644 --- a/gnu/usr.bin/perl/cpan/Math-BigInt/t/Math/BigInt/BareCalc.pm +++ b/gnu/usr.bin/perl/cpan/Math-BigInt/t/Math/BigInt/BareCalc.pm @@ -1,4 +1,4 @@ -#!perl +# -*- mode: perl; -*- package Math::BigInt::BareCalc; @@ -9,9 +9,10 @@ our $VERSION = '1.999803'; # Package to to test Bigint's simulation of Calc -use Math::BigInt::Calc '1.9998'; +use Math::BigInt::Calc 1.9998; our @ISA = qw(Math::BigInt::Calc); -print "# BareCalc using Calc v", Math::BigInt::Calc -> VERSION, "\n"; +print "# Math::BigInt::BareCalc v", $VERSION, " using", + " Math::BigInt::Calc v", Math::BigInt::Calc -> VERSION, "\n"; 1; diff --git a/gnu/usr.bin/perl/cpan/Math-BigInt/t/Math/BigInt/Subclass.pm b/gnu/usr.bin/perl/cpan/Math-BigInt/t/Math/BigInt/Subclass.pm index 5acdf1c24d7..3f340fd3df4 100644 --- a/gnu/usr.bin/perl/cpan/Math-BigInt/t/Math/BigInt/Subclass.pm +++ b/gnu/usr.bin/perl/cpan/Math-BigInt/t/Math/BigInt/Subclass.pm @@ -1,4 +1,4 @@ -#!perl +# -*- mode: perl; -*- package Math::BigInt::Subclass; @@ -8,24 +8,21 @@ use strict; use warnings; use Exporter; -use Math::BigInt 1.64; - -# $lib is for the "lib => " test -our $lib; -our ($accuracy, $precision, $round_mode, $div_scale); +use Math::BigInt; our @ISA = qw(Math::BigInt Exporter); our @EXPORT_OK = qw(bgcd objectify); -our $VERSION = "0.06"; +our $VERSION = "0.07"; use overload; # inherit overload from BigInt # Globals -$accuracy = $precision = undef; -$round_mode = 'even'; -$div_scale = 40; -$lib = ''; +our $accuracy = undef; +our $precision = undef; +our $round_mode = Math::BigInt::Subclass -> round_mode(); +our $div_scale = Math::BigInt::Subclass -> div_scale(); +our $lib = ''; sub new { my $proto = shift; diff --git a/gnu/usr.bin/perl/cpan/Math-BigInt/t/_e_math.t b/gnu/usr.bin/perl/cpan/Math-BigInt/t/_e_math.t index 1c136a565e0..3cf917bb01b 100755 --- a/gnu/usr.bin/perl/cpan/Math-BigInt/t/_e_math.t +++ b/gnu/usr.bin/perl/cpan/Math-BigInt/t/_e_math.t @@ -1,4 +1,4 @@ -#!perl +# -*- mode: perl; -*- # test the helper math routines in Math::BigFloat diff --git a/gnu/usr.bin/perl/cpan/Math-BigInt/t/alias.inc b/gnu/usr.bin/perl/cpan/Math-BigInt/t/alias.inc index 3b381e18e2f..a3f3857fc9c 100644 --- a/gnu/usr.bin/perl/cpan/Math-BigInt/t/alias.inc +++ b/gnu/usr.bin/perl/cpan/Math-BigInt/t/alias.inc @@ -1,4 +1,4 @@ -#!perl +# -*- mode: perl; -*- use strict; use warnings; diff --git a/gnu/usr.bin/perl/cpan/Math-BigInt/t/bare_mbf.t b/gnu/usr.bin/perl/cpan/Math-BigInt/t/bare_mbf.t index c8184cb8610..3d94a6cb079 100755 --- a/gnu/usr.bin/perl/cpan/Math-BigInt/t/bare_mbf.t +++ b/gnu/usr.bin/perl/cpan/Math-BigInt/t/bare_mbf.t @@ -1,9 +1,9 @@ -#!perl +# -*- mode: perl; -*- use strict; use warnings; -use Test::More tests => 2830; +use Test::More tests => 3070; use lib 't'; diff --git a/gnu/usr.bin/perl/cpan/Math-BigInt/t/bare_mbi.t b/gnu/usr.bin/perl/cpan/Math-BigInt/t/bare_mbi.t index 7c24404738a..f3509cfa450 100755 --- a/gnu/usr.bin/perl/cpan/Math-BigInt/t/bare_mbi.t +++ b/gnu/usr.bin/perl/cpan/Math-BigInt/t/bare_mbi.t @@ -1,9 +1,9 @@ -#!perl +# -*- mode: perl; -*- use strict; use warnings; -use Test::More tests => 4038; # tests in require'd file +use Test::More tests => 4280; # tests in require'd file use lib 't'; diff --git a/gnu/usr.bin/perl/cpan/Math-BigInt/t/bare_mif.t b/gnu/usr.bin/perl/cpan/Math-BigInt/t/bare_mif.t index 3946d1524a4..ed2c27cf368 100755 --- a/gnu/usr.bin/perl/cpan/Math-BigInt/t/bare_mif.t +++ b/gnu/usr.bin/perl/cpan/Math-BigInt/t/bare_mif.t @@ -1,4 +1,4 @@ -#!perl +# -*- mode: perl; -*- # test rounding, accuracy, precision and fallback, round_mode and mixing # of classes under Math::BigInt::BareCalc diff --git a/gnu/usr.bin/perl/cpan/Math-BigInt/t/big_pi_e.t b/gnu/usr.bin/perl/cpan/Math-BigInt/t/big_pi_e.t index 66705da1ae1..8e2aa112811 100755 --- a/gnu/usr.bin/perl/cpan/Math-BigInt/t/big_pi_e.t +++ b/gnu/usr.bin/perl/cpan/Math-BigInt/t/big_pi_e.t @@ -1,4 +1,4 @@ -#!perl +# -*- mode: perl; -*- # Test bpi() and bexp() diff --git a/gnu/usr.bin/perl/cpan/Math-BigInt/t/bigfltpm.inc b/gnu/usr.bin/perl/cpan/Math-BigInt/t/bigfltpm.inc index af6e422e882..0b25505849a 100644 --- a/gnu/usr.bin/perl/cpan/Math-BigInt/t/bigfltpm.inc +++ b/gnu/usr.bin/perl/cpan/Math-BigInt/t/bigfltpm.inc @@ -49,7 +49,9 @@ while () { $try .= qq| \$x->accuracy($args[1]); \$x->precision($args[2]);|; $try .= ' $x->bstr();'; # some unary ops - } elsif ($f =~ /^b(nan|floor|ceil|int|sstr|neg|abs|sgn|inc|dec|not|sqrt|exp|fac)$/) { + } elsif ($f =~ /^b(nan|floor|ceil|int|sstr|neg|abs|sgn|inc|dec|not|sqrt|exp)$/) { + $try .= qq| \$x->$f();|; + } elsif ($f =~ /^b[dt]?fac$/) { $try .= qq| \$x->$f();|; } elsif ($f =~ /^(numify|length|as_number)$/) { $try .= qq| \$x->$f();|; @@ -113,6 +115,8 @@ while () { $try .= ' $x->bpow($y);'; } elsif ($f eq "bnok") { $try .= ' $x->bnok($y);'; + } elsif ($f eq "bmfac") { + $try .= ' $x->bmfac($y);'; } elsif ($f eq "bcos") { $try .= ' $x->bcos($y);'; } elsif ($f eq "bsin") { @@ -179,9 +183,9 @@ while () { $x = Math::BigInt->new(1200); $y = $CLASS->new($x); is($y, 1200, - q|$x = Math::BigInt->new(1200); $y = $CLASS->new($x); # check $y|); + qq|\$x = Math::BigInt->new(1200); \$y = $CLASS->new(\$x); # check \$y|); is($x, 1200, - q|$x = Math::BigInt->new(1200); $y = $CLASS->new($x); # check $x|); + qq|\$x = Math::BigInt->new(1200); \$y = $CLASS->new(\$x); # check \$x|); ############################################################################### # Really huge, big, ultra-mega-biggy-monster exponents. Technically, the @@ -515,6 +519,9 @@ abc:+0:NaN $div_scale = 40 &bcos +NaN:10:NaN ++inf:10:NaN +-inf:10:NaN 1.2:10:0.3623577545 2.4:12:-0.737393715541 0:10:1 @@ -523,6 +530,9 @@ $div_scale = 40 1:12:0.540302305868 &bsin +NaN:10:NaN ++inf:10:NaN +-inf:10:NaN 1:10:0.8414709848 0:10:0 0:20:0 @@ -688,9 +698,6 @@ invalid:NaN 123:123 -123.4567:-123.4567 # invalid inputs -1__2:NaN -1E1__2:NaN -11__2E2:NaN .2E-3.:NaN 1e3e4:NaN # strange, but valid @@ -1981,10 +1988,10 @@ abc:1:abc:NaN 3:-1:0 &bfac -Nanfac:NaN --1:NaN +invalid:NaN +inf:inf -inf:NaN +-1:NaN 0:1 1:1 2:2 @@ -1992,15 +1999,22 @@ Nanfac:NaN 4:24 5:120 6:720 +7:5040 +8:40320 +9:362880 10:3628800 11:39916800 12:479001600 +20:2432902008176640000 +22:1124000727777607680000 +69:171122452428141311372468338881272839092270544893520369393648040923257279754140647424000000000000000 &bdfac NaN:NaN --1:NaN +inf:inf -inf:NaN +-2:NaN +-1:1 0:1 1:1 2:2 @@ -2015,6 +2029,126 @@ NaN:NaN 11:10395 12:46080 +&btfac +NaN:NaN ++inf:inf +-inf:NaN +-3:NaN +-2:1 +-1:1 +0:1 +1:1 +2:2 +3:3 +4:4 +5:10 +6:18 +7:28 +8:80 +9:162 +10:280 +11:880 +12:1944 + +&bmfac + +7:-inf:NaN +7:-1:NaN +7:0:NaN +7:2.5:NaN +7:inf:7 +7:NaN:NaN + +NaN:1:NaN ++inf:1:inf +-inf:1:NaN +-1:1:NaN +0:1:1 +1:1:1 +2:1:2 +3:1:6 +4:1:24 +5:1:120 +6:1:720 +7:1:5040 +8:1:40320 +9:1:362880 +10:1:3628800 + +NaN:2:NaN ++inf:2:inf +-inf:2:NaN +-2:2:NaN +-1:2:1 +0:2:1 +1:2:1 +2:2:2 +3:2:3 +4:2:8 +5:2:15 +6:2:48 +7:2:105 +8:2:384 +9:2:945 +10:2:3840 + +NaN:3:NaN ++inf:3:inf +-inf:3:NaN +-3:3:NaN +-2:3:1 +-1:3:1 +0:3:1 +1:3:1 +2:3:2 +3:3:3 +4:3:4 +5:3:10 +6:3:18 +7:3:28 +8:3:80 +9:3:162 +10:3:280 + +NaN:4:NaN ++inf:4:inf +-inf:4:NaN +-4:4:NaN +-3:4:1 +-2:4:1 +-1:4:1 +0:4:1 +1:4:1 +2:4:2 +3:4:3 +4:4:4 +5:4:5 +6:4:12 +7:4:21 +8:4:32 +9:4:45 +10:4:120 + +NaN:5:NaN ++inf:5:inf +-inf:5:NaN +-5:5:NaN +-4:5:1 +-3:5:1 +-2:5:1 +-1:5:1 +0:5:1 +1:5:1 +2:5:2 +3:5:3 +4:5:4 +5:5:5 +6:5:6 +7:5:14 +8:5:24 +9:5:36 +10:5:50 + &broot # sqrt() +0:2:0 diff --git a/gnu/usr.bin/perl/cpan/Math-BigInt/t/bigfltpm.t b/gnu/usr.bin/perl/cpan/Math-BigInt/t/bigfltpm.t index 8b0079fedc9..d2c7300b056 100755 --- a/gnu/usr.bin/perl/cpan/Math-BigInt/t/bigfltpm.t +++ b/gnu/usr.bin/perl/cpan/Math-BigInt/t/bigfltpm.t @@ -1,9 +1,9 @@ -#!perl +# -*- mode: perl; -*- use strict; use warnings; -use Test::More tests => 2830 # tests in require'd file +use Test::More tests => 3070 # tests in require'd file + 19; # tests in this file use Math::BigInt only => 'Calc'; diff --git a/gnu/usr.bin/perl/cpan/Math-BigInt/t/bigintc.t b/gnu/usr.bin/perl/cpan/Math-BigInt/t/bigintc.t index f9c16d233b0..cf589ad14f3 100755 --- a/gnu/usr.bin/perl/cpan/Math-BigInt/t/bigintc.t +++ b/gnu/usr.bin/perl/cpan/Math-BigInt/t/bigintc.t @@ -1,31 +1,40 @@ -#!perl +# -*- mode: perl; -*- + +# Test Math::BigInt::Calc use strict; use warnings; -use Test::More tests => 460; +use Test::More tests => 524; use Math::BigInt::Calc; -my ($BASE_LEN, undef, $AND_BITS, $XOR_BITS, $OR_BITS, - $BASE_LEN_SMALL, $MAX_VAL) - = Math::BigInt::Calc->_base_len(); +my ($BASE_LEN, $BASE, $AND_BITS, $XOR_BITS, $OR_BITS, + $BASE_LEN_SMALL, $MAX_VAL, + $MAX_BITS, $MAX_EXP_F, $MAX_EXP_I, $USE_INT) + = Math::BigInt::Calc -> _base_len(); -print "# BASE_LEN = $BASE_LEN\n"; -print "# MAX_VAL = $MAX_VAL\n"; -print "# AND_BITS = $AND_BITS\n"; -print "# XOR_BITS = $XOR_BITS\n"; -print "# IOR_BITS = $OR_BITS\n"; +note(<<"EOF"); -# testing of Math::BigInt::Calc +BASE_LEN = $BASE_LEN +BASE = $BASE +MAX_VAL = $MAX_VAL +AND_BITS = $AND_BITS +XOR_BITS = $XOR_BITS +OR_BITS = $OR_BITS +MAX_EXP_F = $MAX_EXP_F +MAX_EXP_I = $MAX_EXP_I +USE_INT = $USE_INT +EOF -my $LIB = 'Math::BigInt::Calc'; # pass classname to sub's +my $LIB = 'Math::BigInt::Calc'; +my $REF = 'Math::BigInt::Calc'; # _new and _str my $x = $LIB->_new("123"); my $y = $LIB->_new("321"); -is(ref($x), "Math::BigInt::Calc", q|ref($x) is an Math::BigInt::Calc|); +is(ref($x), $REF, q|ref($x) is a $REF|); is($LIB->_str($x), 123, qq|$LIB->_str(\$x) = 123|); is($LIB->_str($y), 321, qq|$LIB->_str(\$y) = 321|); @@ -80,46 +89,38 @@ is($LIB->_str($rr), 2, qq|$LIB->_str(\$rr) = 2|); # is_zero, _is_one, _one, _zero -is($LIB->_is_zero($x) || 0, 0, qq/$LIB->_is_zero(\$x) || 0 = 0/); -is($LIB->_is_one($x) || 0, 0, qq/$LIB->_is_one(\$x) || 0 = 0/); +ok(! $LIB->_is_zero($x), qq|$LIB->_is_zero(\$x)|); +ok(! $LIB->_is_one($x), qq|$LIB->_is_one(\$x)|); is($LIB->_str($LIB->_zero()), "0", qq|$LIB->_str($LIB->_zero()) = "0"|); is($LIB->_str($LIB->_one()), "1", qq|$LIB->_str($LIB->_one()) = "1"|); # _two() and _ten() -is($LIB->_str($LIB->_two()), "2", qq|$LIB->_str($LIB->_two()) = "2"|); -is($LIB->_str($LIB->_ten()), "10", qq|$LIB->_str($LIB->_ten()) = "10"|); -is($LIB->_is_ten($LIB->_two()), 0, qq|$LIB->_is_ten($LIB->_two()) = 0|); -is($LIB->_is_two($LIB->_two()), 1, qq|$LIB->_is_two($LIB->_two()) = 1|); -is($LIB->_is_ten($LIB->_ten()), 1, qq|$LIB->_is_ten($LIB->_ten()) = 1|); -is($LIB->_is_two($LIB->_ten()), 0, qq|$LIB->_is_two($LIB->_ten()) = 0|); - -is($LIB->_is_one($LIB->_one()), 1, qq|$LIB->_is_one($LIB->_one()) = 1|); -is($LIB->_is_one($LIB->_two()), 0, qq|$LIB->_is_one($LIB->_two()) = 0|); -is($LIB->_is_one($LIB->_ten()), 0, qq|$LIB->_is_one($LIB->_ten()) = 0|); +is($LIB->_str($LIB->_two()), "2", qq|$LIB->_str($LIB->_two()) = "2"|); +is($LIB->_str($LIB->_ten()), "10", qq|$LIB->_str($LIB->_ten()) = "10"|); -is($LIB->_is_one($LIB->_zero()) || 0, 0, - qq/$LIB->_is_one($LIB->_zero()) || 0 = 0/); +ok(! $LIB->_is_ten($LIB->_two()), qq|$LIB->_is_ten($LIB->_two()) is false|); +ok( $LIB->_is_two($LIB->_two()), qq|$LIB->_is_two($LIB->_two()) is true|); +ok( $LIB->_is_ten($LIB->_ten()), qq|$LIB->_is_ten($LIB->_ten()) is true|); +ok(! $LIB->_is_two($LIB->_ten()), qq|$LIB->_is_two($LIB->_ten()) is false|); -is($LIB->_is_zero($LIB->_zero()), 1, - qq|$LIB->_is_zero($LIB->_zero()) = 1|); +ok( $LIB->_is_one($LIB->_one()), qq|$LIB->_is_one($LIB->_one()) is true|); +ok(! $LIB->_is_one($LIB->_two()), qq|$LIB->_is_one($LIB->_two()) is false|); +ok(! $LIB->_is_one($LIB->_ten()), qq|$LIB->_is_one($LIB->_ten()) is false|); -is($LIB->_is_zero($LIB->_one()) || 0, 0, - qq/$LIB->_is_zero($LIB->_one()) || 0 = 0/); +ok(! $LIB->_is_one($LIB->_zero()), qq/$LIB->_is_one($LIB->_zero()) is false/); +ok( $LIB->_is_zero($LIB->_zero()), qq|$LIB->_is_zero($LIB->_zero()) is true|); +ok(! $LIB->_is_zero($LIB->_one()), qq/$LIB->_is_zero($LIB->_one()) is false/); # is_odd, is_even -is($LIB->_is_odd($LIB->_one()), 1, - qq/$LIB->_is_odd($LIB->_one()) = 1/); -is($LIB->_is_odd($LIB->_zero()) || 0, 0, - qq/$LIB->_is_odd($LIB->_zero()) || 0 = 0/); -is($LIB->_is_even($LIB->_one()) || 0, 0, - qq/$LIB->_is_even($LIB->_one()) || 0 = 0/); -is($LIB->_is_even($LIB->_zero()), 1, - qq/$LIB->_is_even($LIB->_zero()) = 1/); +ok( $LIB->_is_odd($LIB->_one()), qq/$LIB->_is_odd($LIB->_one()) is true/); +ok(! $LIB->_is_odd($LIB->_zero()), qq/$LIB->_is_odd($LIB->_zero()) is false/); +ok(! $LIB->_is_even($LIB->_one()), qq/$LIB->_is_even($LIB->_one()) is false/); +ok( $LIB->_is_even($LIB->_zero()), qq/$LIB->_is_even($LIB->_zero()) is true/); -# _len +# _alen and _len for my $method (qw/_alen _len/) { $x = $LIB->_new("1"); @@ -348,8 +349,7 @@ is($LIB->_str($y), 123, qq|$LIB->_str(\$y) = 123|); foreach (qw/1 12 123 1234 12345 1234567 12345678 123456789 1234567890/) { $x = $LIB->_new("$_"); - is(ref($x), "Math::BigInt::Calc", - q|ref($x) = "Math::BigInt::Calc"|); + is(ref($x), $REF, q|ref($x) = "$REF"|); is($LIB->_str($x), "$_", qq|$LIB->_str(\$x) = "$_"|); $x = $LIB->_num($x); @@ -524,7 +524,6 @@ $LIB->_fac($x); is($LIB->_str($x), "6227020800", qq|$LIB->_str(\$x) = "6227020800"|); -############################################################################## # _inc and _dec for (qw/1 11 121 1231 12341 1234561 12345671 123456781 1234567891/) { @@ -545,13 +544,30 @@ for (qw/19 119 1219 12319 1234519 12345619 123456719 1234567819/) { is($LIB->_str($x), $_, qq|$LIB->_str(\$x) = $_|); } -for (qw/999 9999 99999 9999999 99999999 999999999 9999999999 99999999999/) { - $x = $LIB->_new("$_"); +for (1 .. 20) { + my $p = "9" x $_; # = $q - 1 + my $q = "1" . ("0" x $_); # = $p + 1 + + $x = $LIB->_new("$p"); $LIB->_inc($x); - my $expected = '1' . '0' x (length($_)); - is($LIB->_str($x), $expected, qq|$LIB->_str(\$x) = $expected|); + is($LIB->_str($x), $q, qq|\$x = $LIB->_new("$p"); $LIB->_inc()|); + + $x = $LIB->_new("$q"); $LIB->_dec($x); - is($LIB->_str($x), $_, qq|$LIB->_str(\$x) = $_|); + is($LIB->_str($x), $p, qq|\$x = $LIB->_new("$q"); $LIB->_dec()|); +} + +for (1 .. 20) { + my $p = "1" . ("0" x $_); # = $q - 1 + my $q = "1" . ("0" x ($_ - 1)) . "1"; # = $p + 1 + + $x = $LIB->_new("$p"); + $LIB->_inc($x); + is($LIB->_str($x), $q, qq|\$x = $LIB->_new("$p"); $LIB->_inc()|); + + $x = $LIB->_new("$q"); + $LIB->_dec($x); + is($LIB->_str($x), $p, qq|\$x = $LIB->_new("$q"); $LIB->_dec()|); } $x = $LIB->_new("1000"); @@ -560,11 +576,7 @@ is($LIB->_str($x), "1001", qq|$LIB->_str(\$x) = "1001"|); $LIB->_dec($x); is($LIB->_str($x), "1000", qq|$LIB->_str(\$x) = "1000"|); -my $BL; -{ - no strict 'refs'; - $BL = &{"$LIB"."::_base_len"}(); -} +my $BL = $LIB -> _base_len(); $x = '1' . '0' x $BL; $z = '1' . '0' x ($BL - 1); @@ -764,7 +776,3 @@ is($LIB->_check(123), "123 is not a reference", is(@$x, 1, q|@$x = 1|); is($x->[0], 0, q|$x->[0] = 0|); } - -# done - -1; diff --git a/gnu/usr.bin/perl/cpan/Math-BigInt/t/bigintpm.inc b/gnu/usr.bin/perl/cpan/Math-BigInt/t/bigintpm.inc index 9dd331ab175..3090699b5f9 100644 --- a/gnu/usr.bin/perl/cpan/Math-BigInt/t/bigintpm.inc +++ b/gnu/usr.bin/perl/cpan/Math-BigInt/t/bigintpm.inc @@ -77,7 +77,9 @@ while () { } elsif ($f eq "bone") { $try .= qq| \$x->bone("$args[1]");|; # some unary ops - } elsif ($f =~ /^b(nan|floor|ceil|int|sstr|neg|abs|sgn|inc|dec|not|sqrt|exp|fac)$/) { + } elsif ($f =~ /^b(nan|floor|ceil|int|sstr|neg|abs|sgn|inc|dec|not|sqrt|exp)$/) { + $try .= " \$x->$f();"; + } elsif ($f =~ /^b[dt]?fac$/) { $try .= " \$x->$f();"; } elsif ($f =~ /^(numify|length|stringify)$/) { $try .= " \$x->$f();"; @@ -159,6 +161,8 @@ while () { } } elsif ($f eq "bnok") { $try .= " \$x->bnok(\$y);"; + } elsif ($f eq "bmfac") { + $try .= " \$x->bmfac(\$y);"; } elsif ($f eq "broot") { $try .= " \$x->broot(\$y);"; } elsif ($f eq "blog") { @@ -814,9 +818,11 @@ SKIP: { $x = '9' x $bl; $x = $CLASS->new($x); - # 999 * 999 => 998 . 001, 9999*9999 => 9998 . 0001 - is($x * $x, '9' x ($bl - 1) . '8' . '0' x ($bl - 1) . '1', - "see if mul shortcut for small numbers works"); + # 999 * 999 => 998 . 001 + # 9999 * 9999 => 9998 . 0001 + $y = '9' x ($bl - 1) . '8' . '0' x ($bl - 1) . '1'; + is($x * $x, $y, + "see if mul shortcut for small numbers works ($x * $x = $y)"); } ########################################################################### @@ -1226,7 +1232,6 @@ NaN:-inf: 0b100000000000000000000000000000001:4294967297 0b1000000000000000000000000000000001:8589934593 0b10000000000000000000000000000000001:17179869185 -0b__101:NaN 0b1_0_1:5 0b0_0_0_1:1 # hex input @@ -1239,7 +1244,6 @@ NaN:-inf: 0x12345678:305419896 0x1_2_3_4_56_78:305419896 0xa_b_c_d_e_f:11259375 -0x__123:NaN 0x9:9 0x11:17 0x21:33 @@ -1292,10 +1296,6 @@ abc:NaN # only one underscore between two digits _123:NaN _123_:NaN -123_:NaN -1__23:NaN -1E1__2:NaN -1_E12:NaN 1E_12:NaN 1_E_12:NaN +_1E12:NaN @@ -2836,10 +2836,10 @@ abc:NaN,NaN -inf:-inf,inf &bfac --1:NaN -invalid:NaN +NaN:NaN +inf:inf -inf:NaN +-1:NaN 0:1 1:1 2:2 @@ -2857,6 +2857,145 @@ invalid:NaN 22:1124000727777607680000 69:171122452428141311372468338881272839092270544893520369393648040923257279754140647424000000000000000 +&bdfac +NaN:NaN ++inf:inf +-inf:NaN +-2:NaN +-1:1 +0:1 +1:1 +2:2 +3:3 +4:8 +5:15 +6:48 +7:105 +8:384 +9:945 +10:3840 +11:10395 +12:46080 + +&btfac +NaN:NaN ++inf:inf +-inf:NaN +-3:NaN +-2:1 +-1:1 +0:1 +1:1 +2:2 +3:3 +4:4 +5:10 +6:18 +7:28 +8:80 +9:162 +10:280 +11:880 +12:1944 + +&bmfac + +7:-inf:NaN +7:-1:NaN +7:0:NaN +7:inf:7 +7:NaN:NaN + +NaN:1:NaN ++inf:1:inf +-inf:1:NaN +-1:1:NaN +0:1:1 +1:1:1 +2:1:2 +3:1:6 +4:1:24 +5:1:120 +6:1:720 +7:1:5040 +8:1:40320 +9:1:362880 +10:1:3628800 + +NaN:2:NaN ++inf:2:inf +-inf:2:NaN +-2:2:NaN +-1:2:1 +0:2:1 +1:2:1 +2:2:2 +3:2:3 +4:2:8 +5:2:15 +6:2:48 +7:2:105 +8:2:384 +9:2:945 +10:2:3840 + +NaN:3:NaN ++inf:3:inf +-inf:3:NaN +-3:3:NaN +-2:3:1 +-1:3:1 +0:3:1 +1:3:1 +2:3:2 +3:3:3 +4:3:4 +5:3:10 +6:3:18 +7:3:28 +8:3:80 +9:3:162 +10:3:280 + +NaN:4:NaN ++inf:4:inf +-inf:4:NaN +-4:4:NaN +-3:4:1 +-2:4:1 +-1:4:1 +0:4:1 +1:4:1 +2:4:2 +3:4:3 +4:4:4 +5:4:5 +6:4:12 +7:4:21 +8:4:32 +9:4:45 +10:4:120 + +NaN:5:NaN ++inf:5:inf +-inf:5:NaN +-5:5:NaN +-4:5:1 +-3:5:1 +-2:5:1 +-1:5:1 +0:5:1 +1:5:1 +2:5:2 +3:5:3 +4:5:4 +5:5:5 +6:5:6 +7:5:14 +8:5:24 +9:5:36 +10:5:50 + &bpow # abc:12:NaN @@ -3220,23 +3359,6 @@ $round_mode("odd") #-501234500:-4:-501235000 +12345000:4:12350000 -12345000:4:-12350000 -$round_mode("even") -+60123456789:5:60123000000 --60123456789:5:-60123000000 -+60123456789:9:60123456800 --60123456789:9:-60123456800 -+601234500:6:601234000 --601234500:6:-601234000 -#+601234500:-4:601234000 -#-601234500:-4:-601234000 -#-601234500:-9:0 -#-501234500:-9:0 -#-601234500:-8:0 -#-501234500:-8:0 -+1234567:7:1234567 -+1234567:6:1234570 -+12345000:4:12340000 --12345000:4:-12340000 $round_mode("common") +60123456789:5:60123000000 +60123199999:5:60123000000 @@ -3258,6 +3380,23 @@ $round_mode("common") -60123700000:5:-60124000000 -60123800000:5:-60124000000 -60123900000:5:-60124000000 +$round_mode("even") ++60123456789:5:60123000000 +-60123456789:5:-60123000000 ++60123456789:9:60123456800 +-60123456789:9:-60123456800 ++601234500:6:601234000 +-601234500:6:-601234000 +#+601234500:-4:601234000 +#-601234500:-4:-601234000 +#-601234500:-9:0 +#-501234500:-9:0 +#-601234500:-8:0 +#-501234500:-8:0 ++1234567:7:1234567 ++1234567:6:1234570 ++12345000:4:12340000 +-12345000:4:-12340000 &is_zero 0:1 diff --git a/gnu/usr.bin/perl/cpan/Math-BigInt/t/bigintpm.t b/gnu/usr.bin/perl/cpan/Math-BigInt/t/bigintpm.t index 7d05dc9e98f..3b78f2e1af4 100755 --- a/gnu/usr.bin/perl/cpan/Math-BigInt/t/bigintpm.t +++ b/gnu/usr.bin/perl/cpan/Math-BigInt/t/bigintpm.t @@ -1,9 +1,9 @@ -#!perl +# -*- mode: perl; -*- use strict; use warnings; -use Test::More tests => 4038 # tests in require'd file +use Test::More tests => 4280 # tests in require'd file + 20; # tests in this file use Math::BigInt only => 'Calc'; diff --git a/gnu/usr.bin/perl/cpan/Math-BigInt/t/bigints.t b/gnu/usr.bin/perl/cpan/Math-BigInt/t/bigints.t index 1a08f255c5e..b02a44bce7f 100755 --- a/gnu/usr.bin/perl/cpan/Math-BigInt/t/bigints.t +++ b/gnu/usr.bin/perl/cpan/Math-BigInt/t/bigints.t @@ -1,4 +1,4 @@ -#!perl +# -*- mode: perl; -*- use strict; use warnings; diff --git a/gnu/usr.bin/perl/cpan/Math-BigInt/t/biglog.t b/gnu/usr.bin/perl/cpan/Math-BigInt/t/biglog.t index d6d695ccb95..6045a6f8c33 100755 --- a/gnu/usr.bin/perl/cpan/Math-BigInt/t/biglog.t +++ b/gnu/usr.bin/perl/cpan/Math-BigInt/t/biglog.t @@ -1,4 +1,4 @@ -#!perl +# -*- mode: perl; -*- # Test blog function (and bpow, since it uses blog), as well as bexp(). diff --git a/gnu/usr.bin/perl/cpan/Math-BigInt/t/bigroot.t b/gnu/usr.bin/perl/cpan/Math-BigInt/t/bigroot.t index 3280c7068c7..4a62bdc5f67 100755 --- a/gnu/usr.bin/perl/cpan/Math-BigInt/t/bigroot.t +++ b/gnu/usr.bin/perl/cpan/Math-BigInt/t/bigroot.t @@ -1,4 +1,4 @@ -#!perl +# -*- mode: perl; -*- # Test broot function (and bsqrt() function, since it is used by broot()). diff --git a/gnu/usr.bin/perl/cpan/Math-BigInt/t/calling.t b/gnu/usr.bin/perl/cpan/Math-BigInt/t/calling.t deleted file mode 100755 index c3c9affebb2..00000000000 --- a/gnu/usr.bin/perl/cpan/Math-BigInt/t/calling.t +++ /dev/null @@ -1,70 +0,0 @@ -#!perl - -# test calling conventions, and :constant overloading - -use strict; -use warnings; -use lib 't'; - -my $VERSION = '1.999818'; # adjust manually to match latest release - -use Test::More tests => 5; - -############################################################################## - -package Math::BigInt::Test; - -use Math::BigInt; -our @ISA = qw/Math::BigInt/; # subclass of MBI -use overload; - -############################################################################## - -package Math::BigFloat::Test; - -use Math::BigFloat; -our @ISA = qw/Math::BigFloat/; # subclass of MBF -use overload; - -############################################################################## - -package main; - -use Math::BigInt try => 'Calc'; -use Math::BigFloat; - -my ($x, $expected, $try); - -my $class = 'Math::BigInt'; - -# test whether use Math::BigInt qw/VERSION/ works -$try = "use $class (" . ($VERSION . '1') .");"; -$try .= ' $x = $class->new(123); $x = "$x";'; -eval $try; -like($@, qr/ ^ Math::BigInt \s+ ( version \s+ )? \S+ \s+ required--this \s+ - is \s+ only \s+ version \s+ \S+ /x, - $try); - -# test whether fallback to calc works -$try = qq|use $class ($VERSION, "try", "foo, bar, ");| - . qq| $class\->config('lib');|; -$expected = eval $try; -like($expected, qr/^Math::BigInt::(Fast)?Calc\z/, $try); - -# test whether constant works or not, also test for qw($VERSION) -# bgcd() is present in subclass, too -$try = qq|use $class ($VERSION, "bgcd", ":constant");| - . q| $x = 2**150; bgcd($x); $x = "$x";|; -$expected = eval $try; -is($expected, "1427247692705959881058285969449495136382746624", $try); - -# test whether Math::BigInt::Scalar via use works (w/ dff. spellings of calc) -$try = qq|use $class ($VERSION, "lib", "Scalar");| - . q| $x = 2**10; $x = "$x";|; -$expected = eval $try; -is($expected, "1024", $try); - -$try = qq|use $class ($VERSION, "lib", "$class\::Scalar");| - . q| $x = 2**10; $x = "$x";|; -$expected = eval $try; -is($expected, "1024", $try); diff --git a/gnu/usr.bin/perl/cpan/Math-BigInt/t/config.t b/gnu/usr.bin/perl/cpan/Math-BigInt/t/config.t index e472404a1b0..25fd92a1549 100755 --- a/gnu/usr.bin/perl/cpan/Math-BigInt/t/config.t +++ b/gnu/usr.bin/perl/cpan/Math-BigInt/t/config.t @@ -1,4 +1,4 @@ -#!perl +# -*- mode: perl; -*- use strict; use warnings; diff --git a/gnu/usr.bin/perl/cpan/Math-BigInt/t/const_mbf.t b/gnu/usr.bin/perl/cpan/Math-BigInt/t/const_mbf.t deleted file mode 100755 index 37524a357be..00000000000 --- a/gnu/usr.bin/perl/cpan/Math-BigInt/t/const_mbf.t +++ /dev/null @@ -1,16 +0,0 @@ -#!perl - -# test Math::BigFloat constants alone (w/o Math::BigInt loading) - -use strict; -use warnings; - -use Test::More tests => 2; - -use Math::BigFloat ':constant'; - -is(1.0 / 3.0, '0.3333333333333333333333333333333333333333', - "1.0 / 3.0 = 0.3333333333333333333333333333333333333333"); - -# Math::BigInt was not loaded with ':constant', so only floats are handled -is(ref(2 ** 2), '', "2 ** 2 is a scalar"); diff --git a/gnu/usr.bin/perl/cpan/Math-BigInt/t/constant.t b/gnu/usr.bin/perl/cpan/Math-BigInt/t/constant.t deleted file mode 100755 index 1f760d6280d..00000000000 --- a/gnu/usr.bin/perl/cpan/Math-BigInt/t/constant.t +++ /dev/null @@ -1,46 +0,0 @@ -#!perl - -use strict; -use warnings; - -use Test::More tests => 7; - -use Math::BigInt ':constant'; - -is(2 ** 255, - '578960446186580977117854925043439539266' - . '34992332820282019728792003956564819968', - '2 ** 255'); - -{ - no warnings 'portable'; # protect against "non-portable" warnings - - # hexadecimal constants - is(0x123456789012345678901234567890, - Math::BigInt->new('0x123456789012345678901234567890'), - 'hexadecimal constant 0x123456789012345678901234567890'); - - # binary constants - is(0b01010100011001010110110001110011010010010110000101101101, - Math::BigInt->new('0b0101010001100101011011000111' - . '0011010010010110000101101101'), - 'binary constant 0b0101010001100101011011000111' - . '0011010010010110000101101101'); -} - -use Math::BigFloat ':constant'; -is(1.0 / 3.0, '0.3333333333333333333333333333333333333333', - '1.0 / 3.0 = 0.3333333333333333333333333333333333333333'); - -# stress-test Math::BigFloat->import() - -Math::BigFloat->import(qw/:constant/); -pass('Math::BigFloat->import(qw/:constant/);'); - -Math::BigFloat->import(qw/:constant upgrade Math::BigRat/); -pass('Math::BigFloat->import(qw/:constant upgrade Math::BigRat/);'); - -Math::BigFloat->import(qw/upgrade Math::BigRat :constant/); -pass('Math::BigFloat->import(qw/upgrade Math::BigRat :constant/);'); - -# all tests done diff --git a/gnu/usr.bin/perl/cpan/Math-BigInt/t/downgrade.t b/gnu/usr.bin/perl/cpan/Math-BigInt/t/downgrade.t index ce8a24ff564..c5f34402e4a 100755 --- a/gnu/usr.bin/perl/cpan/Math-BigInt/t/downgrade.t +++ b/gnu/usr.bin/perl/cpan/Math-BigInt/t/downgrade.t @@ -1,40 +1,18 @@ -#!perl +# -*- mode: perl; -*- + +# Note that this does not test Math::BigFloat upgrading. use strict; use warnings; -use Test::More tests => 15; +use Test::More tests => 164; use Math::BigInt upgrade => 'Math::BigFloat'; -use Math::BigFloat downgrade => 'Math::BigInt', - upgrade => 'Math::BigInt'; - -our ($CLASS, $EXPECTED_CLASS, $LIB); -$CLASS = "Math::BigInt"; -$EXPECTED_CLASS = "Math::BigFloat"; -$LIB = "Math::BigInt::Calc"; # backend +use Math::BigFloat downgrade => 'Math::BigInt'; # simplistic test for now is(Math::BigFloat->downgrade(), 'Math::BigInt', 'Math::BigFloat->downgrade()'); -is(Math::BigFloat->upgrade(), 'Math::BigInt', 'Math::BigFloat->upgrade()'); - -# these downgrade -is(ref(Math::BigFloat->new("inf")), "Math::BigInt", - qq|ref(Math::BigFloat->new("inf"))|); -is(ref(Math::BigFloat->new("-inf")), "Math::BigInt", - qq|ref(Math::BigFloat->new("-inf"))|); -is(ref(Math::BigFloat->new("NaN")), "Math::BigInt", - qq|ref(Math::BigFloat->new("NaN"))|); -is(ref(Math::BigFloat->new("0")), "Math::BigInt", - qq|ref(Math::BigFloat->new("0"))|); -is(ref(Math::BigFloat->new("1")), "Math::BigInt", - qq|ref(Math::BigFloat->new("1"))|); -is(ref(Math::BigFloat->new("10")), "Math::BigInt", - qq|ref(Math::BigFloat->new("10"))|); -is(ref(Math::BigFloat->new("-10")), "Math::BigInt", - qq|ref(Math::BigFloat->new("-10"))|); -is(ref(Math::BigFloat->new("-10.0E1")), "Math::BigInt", - qq|ref(Math::BigFloat->new("-10.0E1"))|); +is(Math::BigInt->upgrade(), 'Math::BigFloat', 'Math::BigInt->upgrade()'); # bug until v1.67: is(Math::BigFloat->new("0.2E0"), "0.2", qq|Math::BigFloat->new("0.2E0")|); @@ -53,4 +31,462 @@ my $x = Math::BigFloat->new(2); # downgrades is(Math::BigFloat->bpow("2", "0.5"), $x->bsqrt(), qq|Math::BigFloat->bpow("2", "0.5")|); +################################################################################ +# Verify that constructors downgrade when they should. + +note("Enable downgrading, and see if constructors downgrade"); + +Math::BigFloat -> downgrade("Math::BigInt"); + +# new() + +$x = Math::BigFloat -> new("0.5"); +cmp_ok($x, "==", 0.5); +is(ref $x, "Math::BigFloat", "Creating a 0.5 does not downgrade"); + +$x = Math::BigFloat -> new("4"); +cmp_ok($x, "==", 4, 'new("4")'); +is(ref $x, "Math::BigInt", "Creating a 4 downgrades to Math::BigInt"); + +$x = Math::BigFloat -> new("0"); +cmp_ok($x, "==", 0, 'new("0")'); +is(ref $x, "Math::BigInt", "Creating a 0 downgrades to Math::BigInt"); + +$x = Math::BigFloat -> new("1"); +cmp_ok($x, "==", 1, 'new("1")'); +is(ref $x, "Math::BigInt", "Creating a 1 downgrades to Math::BigInt"); + +$x = Math::BigFloat -> new("Inf"); +cmp_ok($x, "==", "Inf", 'new("inf")'); +is(ref $x, "Math::BigInt", "Creating an Inf downgrades to Math::BigInt"); + +$x = Math::BigFloat -> new("NaN"); +is($x, "NaN", 'new("NaN")'); +is(ref $x, "Math::BigInt", "Creating a NaN downgrades to Math::BigInt"); + +# bzero() + +$x = Math::BigFloat -> bzero(); +cmp_ok($x, "==", 0, "bzero()"); +is(ref $x, "Math::BigInt", "Creating a 0 downgrades to Math::BigInt"); + +# bone() + +$x = Math::BigFloat -> bone(); +cmp_ok($x, "==", 1, "bone()"); +is(ref $x, "Math::BigInt", "Creating a 1 downgrades to Math::BigInt"); + +# binf() + +$x = Math::BigFloat -> binf(); +cmp_ok($x, "==", "Inf", "binf()"); +is(ref $x, "Math::BigInt", "Creating an Inf downgrades to Math::BigInt"); + +# bnan() + +$x = Math::BigFloat -> bnan(); +is($x, "NaN", "bnan()"); +is(ref $x, "Math::BigInt", "Creating a NaN downgrades to Math::BigInt"); + +# from_dec() + +$x = Math::BigFloat -> from_dec("3.14e2"); +cmp_ok($x, "==", 314, 'from_dec("3.14e2")'); +is(ref $x, "Math::BigInt", 'from_dec("3.14e2") downgrades to Math::BigInt'); + +# from_hex() + +$x = Math::BigFloat -> from_hex("0x1.3ap+8"); +cmp_ok($x, "==", 314, 'from_hex("3.14e2")'); +is(ref $x, "Math::BigInt", 'from_hex("3.14e2") downgrades to Math::BigInt'); + +# from_oct() + +$x = Math::BigFloat -> from_oct("0o1.164p+8"); +cmp_ok($x, "==", 314, 'from_oct("0o1.164p+8")'); +is(ref $x, "Math::BigInt", 'from_oct("0o1.164p+8") downgrades to Math::BigInt'); + +# from_bin() + +$x = Math::BigFloat -> from_bin("0b1.0011101p+8"); +cmp_ok($x, "==", 314, 'from_bin("0b1.0011101p+8")'); +is(ref $x, "Math::BigInt", + 'from_bin("0b1.0011101p+8") downgrades to Math::BigInt'); + +# from_ieee754() + +$x = Math::BigFloat -> from_ieee754("\x43\x9d\x00\x00", "binary32"); +cmp_ok($x, "==", 314, 'from_ieee754("\x43\x9d\x00\x00", "binary32")'); +is(ref $x, "Math::BigInt", + 'from_ieee754("\x43\x9d\x00\x00", "binary32") downgrades to Math::BigInt'); + +note("Disable downgrading, and see if constructors downgrade"); + +Math::BigFloat -> downgrade(undef); + +my $half = Math::BigFloat -> new("0.5"); +my $four = Math::BigFloat -> new("4"); +my $zero = Math::BigFloat -> bzero(); +my $inf = Math::BigFloat -> binf(); +my $nan = Math::BigFloat -> bnan(); + +is(ref $half, "Math::BigFloat", "Creating a 0.5 does not downgrade"); +is(ref $four, "Math::BigFloat", "Creating a 4 does not downgrade"); +is(ref $zero, "Math::BigFloat", "Creating a 0 does not downgrade"); +is(ref $inf, "Math::BigFloat", "Creating an Inf does not downgrade"); +is(ref $nan, "Math::BigFloat", "Creating a NaN does not downgrade"); + +################################################################################ +# Verify that other methods downgrade when they should. + +Math::BigFloat -> downgrade("Math::BigInt"); + +# This shouldn't be necessary, but it is. Fixme! + +Math::BigInt -> upgrade(undef); + +# bneg() + +$x = $zero -> copy() -> bneg(); +cmp_ok($x, "==", 0, "-(0) = 0"); +is(ref($x), "Math::BigInt", "-(0) => Math::BigInt"); + +$x = $four -> copy() -> bneg(); +cmp_ok($x, "==", -4, "-(4) = -4"); +is(ref($x), "Math::BigInt", "-(4) => Math::BigInt"); + +$x = $inf -> copy() -> bneg(); +cmp_ok($x, "==", "-inf", "-(Inf) = -Inf"); +is(ref($x), "Math::BigInt", "-(Inf) => Math::BigInt"); + +$x = $nan -> copy() -> bneg(); +is($x, "NaN", "-(NaN) = NaN"); +is(ref($x), "Math::BigInt", "-(NaN) => Math::BigInt"); + +# bnorm() + +$x = $zero -> copy() -> bnorm(); +cmp_ok($x, "==", 0, "bnorm(0)"); +is(ref($x), "Math::BigInt", "bnorm(0) => Math::BigInt"); + +$x = $four -> copy() -> bnorm(); +cmp_ok($x, "==", 4, "bnorm(4)"); +is(ref($x), "Math::BigInt", "bnorm(4) => Math::BigInt"); + +$x = $inf -> copy() -> bnorm(); +cmp_ok($x, "==", "inf", "bnorm(Inf)"); +is(ref($x), "Math::BigInt", "bnorm(Inf) => Math::BigInt"); + +$x = $nan -> copy() -> bnorm(); +is($x, "NaN", "bnorm(NaN)"); +is(ref($x), "Math::BigInt", "bnorm(NaN) => Math::BigInt"); + +# binc() + +$x = $zero -> copy() -> binc(); +cmp_ok($x, "==", 1, "binc(0)"); +is(ref($x), "Math::BigInt", "binc(0) => Math::BigInt"); + +$x = $four -> copy() -> binc(); +cmp_ok($x, "==", 5, "binc(4)"); +is(ref($x), "Math::BigInt", "binc(4) => Math::BigInt"); + +$x = $inf -> copy() -> binc(); +cmp_ok($x, "==", "inf", "binc(Inf)"); +is(ref($x), "Math::BigInt", "binc(Inf) => Math::BigInt"); + +$x = $nan -> copy() -> binc(); +is($x, "NaN", "binc(NaN)"); +is(ref($x), "Math::BigInt", "binc(NaN) => Math::BigInt"); + +# bdec() + +$x = $zero -> copy() -> bdec(); +cmp_ok($x, "==", -1, "bdec(0)"); +is(ref($x), "Math::BigInt", "bdec(0) => Math::BigInt"); + +$x = $four -> copy() -> bdec(); +cmp_ok($x, "==", 3, "bdec(4)"); +is(ref($x), "Math::BigInt", "bdec(4) => Math::BigInt"); + +$x = $inf -> copy() -> bdec(); +cmp_ok($x, "==", "inf", "bdec(Inf)"); +is(ref($x), "Math::BigInt", "bdec(Inf) => Math::BigInt"); + +$x = $nan -> copy() -> bdec(); +is($x, "NaN", "bdec(NaN)"); +is(ref($x), "Math::BigInt", "bdec(NaN) => Math::BigInt"); + +# badd() + +$x = $half -> copy() -> badd($nan); +is($x, "NaN", "0.5 + NaN = NaN"); +is(ref($x), "Math::BigInt", "0.5 + NaN => Math::BigInt"); + +$x = $half -> copy() -> badd($inf); +cmp_ok($x, "==", "+Inf", "0.5 + Inf = Inf"); +is(ref($x), "Math::BigInt", "2.5 + Inf => Math::BigInt"); + +$x = $half -> copy() -> badd($half); +cmp_ok($x, "==", 1, "0.5 + 0.5 = 1"); +is(ref($x), "Math::BigInt", "0.5 + 0.5 => Math::BigInt"); + +$x = $half -> copy() -> badd($half -> copy() -> bneg()); +cmp_ok($x, "==", 0, "0.5 + -0.5 = 0"); +is(ref($x), "Math::BigInt", "0.5 + -0.5 => Math::BigInt"); + +$x = $four -> copy() -> badd($zero); +cmp_ok($x, "==", 4, "4 + 0 = 4"); +is(ref($x), "Math::BigInt", "4 + 0 => Math::BigInt"); + +$x = $zero -> copy() -> badd($four); +cmp_ok($x, "==", 4, "0 + 4 = 4"); +is(ref($x), "Math::BigInt", "0 + 4 => Math::BigInt"); + +$x = $inf -> copy() -> badd($four); +cmp_ok($x, "==", "+Inf", "Inf + 4 = Inf"); +is(ref($x), "Math::BigInt", "Inf + 4 => Math::BigInt"); + +$x = $nan -> copy() -> badd($four); +is($x, "NaN", "NaN + 4 = NaN"); +is(ref($x), "Math::BigInt", "NaN + 4 => Math::BigInt"); + +# bsub() + +$x = $half -> copy() -> bsub($nan); +is($x, "NaN", "0.5 - NaN = NaN"); +is(ref($x), "Math::BigInt", "0.5 - NaN => Math::BigInt"); + +$x = $half -> copy() -> bsub($inf); +cmp_ok($x, "==", "-Inf", "2.5 - Inf = -Inf"); +is(ref($x), "Math::BigInt", "2.5 - Inf => Math::BigInt"); + +$x = $half -> copy() -> bsub($half); +cmp_ok($x, "==", 0, "0.5 + 0.5 = 0"); +is(ref($x), "Math::BigInt", "0.5 - 0.5 => Math::BigInt"); + +$x = $half -> copy() -> bsub($half -> copy() -> bneg()); +cmp_ok($x, "==", 1, "0.5 - -0.5 = 1"); +is(ref($x), "Math::BigInt", "0.5 - -0.5 => Math::BigInt"); + +$x = $four -> copy() -> bsub($zero); +cmp_ok($x, "==", 4, "4 - 0 = 4"); +is(ref($x), "Math::BigInt", "4 - 0 => Math::BigInt"); + +$x = $zero -> copy() -> bsub($four); +cmp_ok($x, "==", -4, "0 - 4 = -4"); +is(ref($x), "Math::BigInt", "0 - 4 => Math::BigInt"); + +$x = $inf -> copy() -> bsub($four); +cmp_ok($x, "==", "Inf", "Inf - 4 = Inf"); +is(ref($x), "Math::BigInt", "Inf - 4 => Math::BigInt"); + +$x = $nan -> copy() -> bsub($four); +is($x, "NaN", "NaN - 4 = NaN"); +is(ref($x), "Math::BigInt", "NaN - 4 => Math::BigInt"); + +# bmul() + +$x = $zero -> copy() -> bmul($four); +cmp_ok($x, "==", 0, "bmul(0, 4) = 0"); +is(ref($x), "Math::BigInt", "bmul(0, 4) => Math::BigInt"); + +$x = $four -> copy() -> bmul($four); +cmp_ok($x, "==", 16, "bmul(4, 4) = 16"); +is(ref($x), "Math::BigInt", "bmul(4, 4) => Math::BigInt"); + +$x = $inf -> copy() -> bmul($four); +cmp_ok($x, "==", "inf", "bmul(Inf, 4) = Inf"); +is(ref($x), "Math::BigInt", "bmul(Inf, 4) => Math::BigInt"); + +$x = $nan -> copy() -> bmul($four); +is($x, "NaN", "bmul(NaN, 4) = NaN"); +is(ref($x), "Math::BigInt", "bmul(NaN, 4) => Math::BigInt"); + +$x = $four -> copy() -> bmul("0.5"); +cmp_ok($x, "==", 2, "bmul(4, 0.5) = 2"); +is(ref($x), "Math::BigInt", "bmul(4, 0.5) => Math::BigInt"); + +# bmuladd() + +$x = $zero -> copy() -> bmuladd($four, $four); +cmp_ok($x, "==", 4, "bmuladd(0, 4, 4) = 4"); +is(ref($x), "Math::BigInt", "bmuladd(0, 4, 4) => Math::BigInt"); + +$x = $four -> copy() -> bmuladd($four, $four); +cmp_ok($x, "==", 20, "bmuladd(4, 4, 4) = 20"); +is(ref($x), "Math::BigInt", "bmuladd(4, 4, 4) => Math::BigInt"); + +$x = $four -> copy() -> bmuladd($four, $inf); +cmp_ok($x, "==", "inf", "bmuladd(4, 4, Inf) = Inf"); +is(ref($x), "Math::BigInt", "bmuladd(4, 4, Inf) => Math::BigInt"); + +$x = $inf -> copy() -> bmuladd($four, $four); +cmp_ok($x, "==", "inf", "bmuladd(Inf, 4, 4) = Inf"); +is(ref($x), "Math::BigInt", "bmuladd(Inf, 4, 4) => Math::BigInt"); + +$x = $inf -> copy() -> bmuladd($four, $four); +cmp_ok($x, "==", "inf", "bmuladd(Inf, 4, 4) = Inf"); +is(ref($x), "Math::BigInt", "bmuladd(Inf, 4, 4) => Math::BigInt"); + +$x = $nan -> copy() -> bmuladd($four, $four); +is($x, "NaN", "bmuladd(NaN, 4, 4) = NaN"); +is(ref($x), "Math::BigInt", "bmuladd(NaN, 4, 4) => Math::BigInt"); + +$x = $four -> copy() -> bmuladd("0.5", $four); +cmp_ok($x, "==", 6, "bmuladd(4, 0.5, 4) = 6"); +is(ref($x), "Math::BigInt", "bmuladd(4, 0.5, 4) => Math::BigInt"); + +# bdiv() + +# bmod() + +# bmodpow() + +# bpow() + +# blog() + +# bexp() + +# bnok() + +# bsin() + +# bcos() + +# batan() + +# batan() + +# bsqrt() + +# broot() + +# bfac() + +# bdfac() + +# btfac() + +# bmfac() + +# blsft() + +# brsft() + +# band() + +# bior() + +# bxor() + +# bnot() + +# bround() + +# Add tests for rounding a non-integer to an integer. Fixme! + +$x = $zero -> copy() -> bround(); +cmp_ok($x, "==", 0, "bround(0)"); +is(ref($x), "Math::BigInt", "bround(0) => Math::BigInt"); + +$x = $four -> copy() -> bround(); +cmp_ok($x, "==", 4, "bround(4)"); +is(ref($x), "Math::BigInt", "bround(4) => Math::BigInt"); + +$x = $inf -> copy() -> bround(); +cmp_ok($x, "==", "inf", "bround(Inf)"); +is(ref($x), "Math::BigInt", "bround(Inf) => Math::BigInt"); + +$x = $nan -> copy() -> bround(); +is($x, "NaN", "bround(NaN)"); +is(ref($x), "Math::BigInt", "bround(NaN) => Math::BigInt"); + +# bfround() + +# Add tests for rounding a non-integer to an integer. Fixme! + +$x = $zero -> copy() -> bfround(); +cmp_ok($x, "==", 0, "bfround(0)"); +is(ref($x), "Math::BigInt", "bfround(0) => Math::BigInt"); + +$x = $four -> copy() -> bfround(); +cmp_ok($x, "==", 4, "bfround(4)"); +is(ref($x), "Math::BigInt", "bfround(4) => Math::BigInt"); + +$x = $inf -> copy() -> bfround(); +cmp_ok($x, "==", "inf", "bfround(Inf)"); +is(ref($x), "Math::BigInt", "bfround(Inf) => Math::BigInt"); + +$x = $nan -> copy() -> bfround(); +is($x, "NaN", "bfround(NaN)"); +is(ref($x), "Math::BigInt", "bfround(NaN) => Math::BigInt"); + +# bfloor() + +$x = $half -> copy() -> bfloor(); +cmp_ok($x, "==", 0, "bfloor(0)"); +is(ref($x), "Math::BigInt", "bfloor(0) => Math::BigInt"); + +$x = $inf -> copy() -> bfloor(); +cmp_ok($x, "==", "Inf", "bfloor(Inf)"); +is(ref($x), "Math::BigInt", "bfloor(Inf) => Math::BigInt"); + +$x = $nan -> copy() -> bfloor(); +is($x, "NaN", "bfloor(NaN)"); +is(ref($x), "Math::BigInt", "bfloor(NaN) => Math::BigInt"); + +# bceil() + +$x = $half -> copy() -> bceil(); +cmp_ok($x, "==", 1, "bceil(0)"); +is(ref($x), "Math::BigInt", "bceil(0) => Math::BigInt"); + +$x = $inf -> copy() -> bceil(); +cmp_ok($x, "==", "Inf", "bceil(Inf)"); +is(ref($x), "Math::BigInt", "bceil(Inf) => Math::BigInt"); + +$x = $nan -> copy() -> bceil(); +is($x, "NaN", "bceil(NaN)"); +is(ref($x), "Math::BigInt", "bceil(NaN) => Math::BigInt"); + +# bint() + +$x = $half -> copy() -> bint(); +cmp_ok($x, "==", 0, "bint(0)"); +is(ref($x), "Math::BigInt", "bint(0) => Math::BigInt"); + +$x = $inf -> copy() -> bint(); +cmp_ok($x, "==", "Inf", "bint(Inf)"); +is(ref($x), "Math::BigInt", "bint(Inf) => Math::BigInt"); + +$x = $nan -> copy() -> bint(); +is($x, "NaN", "bint(NaN)"); +is(ref($x), "Math::BigInt", "bint(NaN) => Math::BigInt"); + +# bgcd() + +# blcm() + +# mantissa() ? + +# exponent() ? + +# parts() ? + +# sparts() + +# nparts() + +# eparts() + +# dparts() + +# fparts() + +# numerator() + +# denominator() + #require 'upgrade.inc'; # all tests here for sharing diff --git a/gnu/usr.bin/perl/cpan/Math-BigInt/t/from_hex-mbf.t b/gnu/usr.bin/perl/cpan/Math-BigInt/t/from_hex-mbf.t index 34b7726b40a..8a9f3cf012a 100644 --- a/gnu/usr.bin/perl/cpan/Math-BigInt/t/from_hex-mbf.t +++ b/gnu/usr.bin/perl/cpan/Math-BigInt/t/from_hex-mbf.t @@ -1,14 +1,14 @@ -#!perl +# -*- mode: perl; -*- use strict; use warnings; -use Test::More tests => 729; +use Test::More tests => 785; my $class; BEGIN { $class = 'Math::BigFloat'; } -BEGIN { use_ok($class, '1.999710'); } +BEGIN { use_ok($class, '1.999821'); } my @data; my $space = "\t\r\n "; @@ -88,7 +88,9 @@ __END__ 0x0.0p+0:0 0xcafe:51966 +0Xcafe:51966 xcafe:51966 +Xcafe:51966 cafe:51966 0x1.9p+3:12.5 @@ -96,7 +98,8 @@ cafe:51966 -0x.789abcdefp+32:-2023406814.9375 0x12.3456789ap+31:39093746765 +0x.p+0:NaN + NaN:NaN +inf:NaN -inf:NaN -0x.p+0:NaN diff --git a/gnu/usr.bin/perl/cpan/Math-BigInt/t/inf_nan.t b/gnu/usr.bin/perl/cpan/Math-BigInt/t/inf_nan.t index f297c1d9d94..9634396b713 100755 --- a/gnu/usr.bin/perl/cpan/Math-BigInt/t/inf_nan.t +++ b/gnu/usr.bin/perl/cpan/Math-BigInt/t/inf_nan.t @@ -1,4 +1,4 @@ -#!perl +# -*- mode: perl; -*- # test inf/NaN handling all in one place # Thanx to Jarkko for the excellent explanations and the tables diff --git a/gnu/usr.bin/perl/cpan/Math-BigInt/t/isa.t b/gnu/usr.bin/perl/cpan/Math-BigInt/t/isa.t index b99babc7833..366c12d09fe 100755 --- a/gnu/usr.bin/perl/cpan/Math-BigInt/t/isa.t +++ b/gnu/usr.bin/perl/cpan/Math-BigInt/t/isa.t @@ -1,4 +1,4 @@ -#!perl +# -*- mode: perl; -*- use strict; use warnings; @@ -20,7 +20,7 @@ isa_ok($class->new(123), 'Math::BigInt'); # ditto for plain Math::BigInt isa_ok(Math::BigInt->new(123), 'Math::BigInt'); -# But Math::BigFloats aren't +# But Math::BigFloat objects aren't ok(!Math::BigFloat->new(123)->isa('Math::BigInt'), "A Math::BigFloat isn't a Math::BigInt"); diff --git a/gnu/usr.bin/perl/cpan/Math-BigInt/t/lib_load.t b/gnu/usr.bin/perl/cpan/Math-BigInt/t/lib_load.t deleted file mode 100755 index 68871e2244b..00000000000 --- a/gnu/usr.bin/perl/cpan/Math-BigInt/t/lib_load.t +++ /dev/null @@ -1,32 +0,0 @@ -#!perl - -use strict; -use warnings; - -use Test::More tests => 4; - -use lib 't'; - -# first load Math::BigInt with Math::BigInt::Calc -use Math::BigInt lib => 'Calc'; - -# Math::BigFloat will remember that we loaded Math::BigInt::Calc -require Math::BigFloat; -is(Math::BigFloat->config("lib"), 'Math::BigInt::Calc', - 'Math::BigFloat got Math::BigInt::Calc'); - -# now load Math::BigInt again with a different lib -Math::BigInt->import(lib => 'BareCalc'); - -# and finally test that Math::BigFloat knows about Math::BigInt::BareCalc - -is(Math::BigFloat->config("lib"), 'Math::BigInt::BareCalc', - 'Math::BigFloat was notified'); - -# See that Math::BigFloat supports "only" -eval { Math::BigFloat->import('only' => 'Calc') }; -is(Math::BigFloat->config("lib"), 'Math::BigInt::Calc', '"only" worked'); - -# See that Math::BigFloat supports "try" -eval { Math::BigFloat->import('try' => 'BareCalc') }; -is(Math::BigFloat->config("lib"), 'Math::BigInt::BareCalc', '"try" worked'); diff --git a/gnu/usr.bin/perl/cpan/Math-BigInt/t/mbf_ali.t b/gnu/usr.bin/perl/cpan/Math-BigInt/t/mbf_ali.t index 3999aa7e820..b96d2051b59 100755 --- a/gnu/usr.bin/perl/cpan/Math-BigInt/t/mbf_ali.t +++ b/gnu/usr.bin/perl/cpan/Math-BigInt/t/mbf_ali.t @@ -1,4 +1,4 @@ -#!perl +# -*- mode: perl; -*- # test that the new alias names work diff --git a/gnu/usr.bin/perl/cpan/Math-BigInt/t/mbi_ali.t b/gnu/usr.bin/perl/cpan/Math-BigInt/t/mbi_ali.t index 45ed6c4dc6f..7e3e0a063f3 100755 --- a/gnu/usr.bin/perl/cpan/Math-BigInt/t/mbi_ali.t +++ b/gnu/usr.bin/perl/cpan/Math-BigInt/t/mbi_ali.t @@ -1,4 +1,4 @@ -#!perl +# -*- mode: perl; -*- # test that the new alias names work diff --git a/gnu/usr.bin/perl/cpan/Math-BigInt/t/mbi_rand.t b/gnu/usr.bin/perl/cpan/Math-BigInt/t/mbi_rand.t index fce5e20cddd..eae6e39e02f 100755 --- a/gnu/usr.bin/perl/cpan/Math-BigInt/t/mbi_rand.t +++ b/gnu/usr.bin/perl/cpan/Math-BigInt/t/mbi_rand.t @@ -1,4 +1,4 @@ -#!perl +# -*- mode: perl; -*- use strict; use warnings; diff --git a/gnu/usr.bin/perl/cpan/Math-BigInt/t/mbimbf.inc b/gnu/usr.bin/perl/cpan/Math-BigInt/t/mbimbf.inc index e291820b58e..7a52d73c8a9 100644 --- a/gnu/usr.bin/perl/cpan/Math-BigInt/t/mbimbf.inc +++ b/gnu/usr.bin/perl/cpan/Math-BigInt/t/mbimbf.inc @@ -680,7 +680,8 @@ eval { $x = $mbf->new(1); like($@, qr/^bround\(\) needs positive accuracy/, qq|"\$x->bround(-2)" gives warning as expected|); -# test whether rounding to higher accuracy is no-op +note("test whether rounding to higher accuracy is no-op"); + $x = $mbf->new(1); $x->{_a} = 4; is($x, "1.000", q|$x = "1.000"|); @@ -695,65 +696,76 @@ $x->bround(6); # must be no-op is($x->{_a}, 3, q|$x->{_a} = 3|); is($x, "1230", q|$x = "1230"|); -# bround(n) should set _a +note("bround(n) should set _a"); + $x->bround(2); # smaller works is($x, "1200", q|$x = "1200"|); is($x->{_a}, 2, q|$x->{_a} = 2|); # bround(-n) is undocumented and only used by MBF -# bround(-n) should set _a + +note("bround(-n) should set _a"); + $x = $mbi->new(12345); $x->bround(-1); is($x, "12300", q|$x = "12300"|); is($x->{_a}, 4, q|$x->{_a} = 4|); -# bround(-n) should set _a +note("bround(-n) should set _a"); + $x = $mbi->new(12345); $x->bround(-2); is($x, "12000", q|$x = "12000"|); is($x->{_a}, 3, q|$x->{_a} = 3|); -# bround(-n) should set _a +note("bround(-n) should set _a"); + $x = $mbi->new(12345); $x->{_a} = 5; $x->bround(-3); is($x, "10000", q|$x = "10000"|); is($x->{_a}, 2, q|$x->{_a} = 2|); -# bround(-n) should set _a +note("bround(-n) should set _a"); + $x = $mbi->new(12345); $x->{_a} = 5; $x->bround(-4); is($x, "0", q|$x = "0"|); is($x->{_a}, 1, q|$x->{_a} = 1|); -# bround(-n) should be no-op if n too big +note("bround(-n) should be no-op if n too big"); + $x = $mbi->new(12345); $x->bround(-5); is($x, "0", q|$x = "0"|); # scale to "big" => 0 is($x->{_a}, 0, q|$x->{_a} = 0|); -# bround(-n) should be no-op if n too big +note("bround(-n) should be no-op if n too big"); + $x = $mbi->new(54321); $x->bround(-5); is($x, "100000", q|$x = "100000"|); # used by MBF to round 0.0054321 at 0.0_6_00000 is($x->{_a}, 0, q|$x->{_a} = 0|); -# bround(-n) should be no-op if n too big +note("bround(-n) should be no-op if n too big"); + $x = $mbi->new(54321); $x->{_a} = 5; $x->bround(-6); is($x, "100000", q|$x = "100000"|); # no-op is($x->{_a}, 0, q|$x->{_a} = 0|); -# bround(n) should set _a +note("bround(n) should set _a"); + $x = $mbi->new(12345); $x->{_a} = 5; $x->bround(5); # must be no-op is($x, "12345", q|$x = "12345"|); is($x->{_a}, 5, q|$x->{_a} = 5|); -# bround(n) should set _a +note("bround(n) should set _a"); + $x = $mbi->new(12345); $x->{_a} = 5; $x->bround(6); # must be no-op @@ -776,13 +788,14 @@ $x = $mbf->new("12340"); $x->bfround(2); is($x, "12340", q|$x = "12340"|); -# MBI::bfround should clear A for negative P +note("MBI::bfround should clear A for negative P"); + $x = $mbi->new("1234"); $x->accuracy(3); $x->bfround(-2); is($x->{_a}, undef, q|$x->{_a} = undef|); -# test that bfround() and bround() work with large numbers +note("test that bfround() and bround() work with large numbers"); $x = $mbf->new(1)->bdiv(5678, undef, -63); is($x, "0.000176118351532229658330398027474462839027826699542092286016203", @@ -801,13 +814,15 @@ is($x, "0.00017611835153222965833039802747446283902782" . q|669954209228601620288834096512856639662"|); ############################################################################### -# rounding with already set precision/accuracy + +note("rounding with already set precision/accuracy"); $x = $mbf->new(1); $x->{_p} = -5; is($x, "1.00000", q|$x = "1.00000"|); -# further rounding donw +note("further rounding down"); + is($x->bfround(-2), "1.00", q|$x->bfround(-2) = "1.00"|); is($x->{_p}, -2, q|$x->{_p} = -2|); @@ -821,7 +836,8 @@ $x->{_a} = 5; is($x->bround(2), "1.2", q|$x->bround(2) = "1.2"|); is($x->{_a}, 2, q|$x->{_a} = 2|); -# mantissa/exponent format and A/P +note("mantissa/exponent format and A/P"); + $x = $mbf->new("12345.678"); $x->accuracy(4); is($x, "12350", q|$x = "12350"|); @@ -833,13 +849,14 @@ is($x->{_p}, undef, q|$x->{_p} = undef|); #is($x->{_m}->{_p}, undef, q|$x->{_m}->{_p} = undef|); #is($x->{_e}->{_p}, undef, q|$x->{_e}->{_p} = undef|); -# check for no A/P in case of fallback -# result +note("check for no A/P in case of fallback result"); + $x = $mbf->new(100) / 3; is($x->{_a}, undef, q|$x->{_a} = undef|); is($x->{_p}, undef, q|$x->{_p} = undef|); -# result & remainder +note("result & remainder"); + $x = $mbf->new(100) / 3; ($x, $y) = $x->bdiv(3); is($x->{_a}, undef, q|$x->{_a} = undef|); diff --git a/gnu/usr.bin/perl/cpan/Math-BigInt/t/mbimbf.t b/gnu/usr.bin/perl/cpan/Math-BigInt/t/mbimbf.t index d9167e1807f..23599ddb6a8 100755 --- a/gnu/usr.bin/perl/cpan/Math-BigInt/t/mbimbf.t +++ b/gnu/usr.bin/perl/cpan/Math-BigInt/t/mbimbf.t @@ -1,4 +1,4 @@ -#!/usr/bin/perl +# -*- mode: perl; -*- # test rounding, accuracy, precision and fallback, round_mode and mixing # of classes diff --git a/gnu/usr.bin/perl/cpan/Math-BigInt/t/nan_cmp.t b/gnu/usr.bin/perl/cpan/Math-BigInt/t/nan_cmp.t index c84be9003eb..adaf9062264 100755 --- a/gnu/usr.bin/perl/cpan/Math-BigInt/t/nan_cmp.t +++ b/gnu/usr.bin/perl/cpan/Math-BigInt/t/nan_cmp.t @@ -1,4 +1,4 @@ -#!perl +# -*- mode: perl; -*- # test that overloaded compare works when NaN are involved diff --git a/gnu/usr.bin/perl/cpan/Math-BigInt/t/new_overloaded.t b/gnu/usr.bin/perl/cpan/Math-BigInt/t/new_overloaded.t index 011f54fc78e..b5a4f274e4e 100755 --- a/gnu/usr.bin/perl/cpan/Math-BigInt/t/new_overloaded.t +++ b/gnu/usr.bin/perl/cpan/Math-BigInt/t/new_overloaded.t @@ -1,4 +1,4 @@ -#!perl +# -*- mode: perl; -*- # Math::BigFloat->new had a bug where it would assume any object is a # Math::BigInt which broke overloaded non-Math::BigInt objects. diff --git a/gnu/usr.bin/perl/cpan/Math-BigInt/t/req_mbf0.t b/gnu/usr.bin/perl/cpan/Math-BigInt/t/req_mbf0.t index f8af78727f0..976cb0c2637 100755 --- a/gnu/usr.bin/perl/cpan/Math-BigInt/t/req_mbf0.t +++ b/gnu/usr.bin/perl/cpan/Math-BigInt/t/req_mbf0.t @@ -1,4 +1,4 @@ -#!perl +# -*- mode: perl; -*- # check that simple requiring Math::BigFloat and then bzero() works diff --git a/gnu/usr.bin/perl/cpan/Math-BigInt/t/req_mbf1.t b/gnu/usr.bin/perl/cpan/Math-BigInt/t/req_mbf1.t index f9b7cc48e22..74ad48bca0d 100755 --- a/gnu/usr.bin/perl/cpan/Math-BigInt/t/req_mbf1.t +++ b/gnu/usr.bin/perl/cpan/Math-BigInt/t/req_mbf1.t @@ -1,4 +1,4 @@ -#!perl +# -*- mode: perl; -*- # check that simple requiring Math::BigFloat and then bone() works diff --git a/gnu/usr.bin/perl/cpan/Math-BigInt/t/req_mbfa.t b/gnu/usr.bin/perl/cpan/Math-BigInt/t/req_mbfa.t index 1a83b1cca62..a436aa27a25 100755 --- a/gnu/usr.bin/perl/cpan/Math-BigInt/t/req_mbfa.t +++ b/gnu/usr.bin/perl/cpan/Math-BigInt/t/req_mbfa.t @@ -1,4 +1,4 @@ -#!perl +# -*- mode: perl; -*- # check that simple requiring Math::BigFloat and then bnan() works diff --git a/gnu/usr.bin/perl/cpan/Math-BigInt/t/req_mbfi.t b/gnu/usr.bin/perl/cpan/Math-BigInt/t/req_mbfi.t index 9db1e9ab846..69c82c0f085 100755 --- a/gnu/usr.bin/perl/cpan/Math-BigInt/t/req_mbfi.t +++ b/gnu/usr.bin/perl/cpan/Math-BigInt/t/req_mbfi.t @@ -1,4 +1,4 @@ -#!/usr/bin/perl +# -*- mode: perl; -*- # check that simple requiring Math::BigFloat and then binf() works diff --git a/gnu/usr.bin/perl/cpan/Math-BigInt/t/req_mbfn.t b/gnu/usr.bin/perl/cpan/Math-BigInt/t/req_mbfn.t index ffeb8b3b0ef..eef0e011af3 100755 --- a/gnu/usr.bin/perl/cpan/Math-BigInt/t/req_mbfn.t +++ b/gnu/usr.bin/perl/cpan/Math-BigInt/t/req_mbfn.t @@ -1,4 +1,4 @@ -#!/usr/bin/perl +# -*- mode: perl; -*- # check that simple requiring Math::BigFloat and then new() works diff --git a/gnu/usr.bin/perl/cpan/Math-BigInt/t/req_mbfw.t b/gnu/usr.bin/perl/cpan/Math-BigInt/t/req_mbfw.t index db095677c03..2e7ece75b2d 100755 --- a/gnu/usr.bin/perl/cpan/Math-BigInt/t/req_mbfw.t +++ b/gnu/usr.bin/perl/cpan/Math-BigInt/t/req_mbfw.t @@ -1,4 +1,4 @@ -#!/usr/bin/perl +# -*- mode: perl; -*- # check that requiring Math::BigFloat and then calling import() works diff --git a/gnu/usr.bin/perl/cpan/Math-BigInt/t/require.t b/gnu/usr.bin/perl/cpan/Math-BigInt/t/require.t index 3c34db68854..32fde97158d 100755 --- a/gnu/usr.bin/perl/cpan/Math-BigInt/t/require.t +++ b/gnu/usr.bin/perl/cpan/Math-BigInt/t/require.t @@ -1,4 +1,4 @@ -#!/usr/bin/perl +# -*- mode: perl; -*- # check that simple requiring Math::BigInt works diff --git a/gnu/usr.bin/perl/cpan/Math-BigInt/t/round.t b/gnu/usr.bin/perl/cpan/Math-BigInt/t/round.t index 4110626c3dc..e92b57fd400 100755 --- a/gnu/usr.bin/perl/cpan/Math-BigInt/t/round.t +++ b/gnu/usr.bin/perl/cpan/Math-BigInt/t/round.t @@ -1,4 +1,4 @@ -#!/usr/bin/perl +# -*- mode: perl; -*- # test rounding with non-integer A and P parameters diff --git a/gnu/usr.bin/perl/cpan/Math-BigInt/t/sub_ali.t b/gnu/usr.bin/perl/cpan/Math-BigInt/t/sub_ali.t index 2f145b4e23b..4b125db3441 100755 --- a/gnu/usr.bin/perl/cpan/Math-BigInt/t/sub_ali.t +++ b/gnu/usr.bin/perl/cpan/Math-BigInt/t/sub_ali.t @@ -1,4 +1,4 @@ -#!/usr/bin/perl +# -*- mode: perl; -*- # test that the new alias names work diff --git a/gnu/usr.bin/perl/cpan/Math-BigInt/t/sub_mbf.t b/gnu/usr.bin/perl/cpan/Math-BigInt/t/sub_mbf.t index 2f5d3fc1e79..cf2788ea6b9 100755 --- a/gnu/usr.bin/perl/cpan/Math-BigInt/t/sub_mbf.t +++ b/gnu/usr.bin/perl/cpan/Math-BigInt/t/sub_mbf.t @@ -1,10 +1,10 @@ -#!perl +# -*- mode: perl; -*- use strict; use warnings; -use Test::More tests => 2830 # tests in require'd file - + 6; # tests in this file +use Test::More tests => 3070 # tests in require'd file + + 8; # tests in this file use lib 't'; @@ -34,3 +34,9 @@ $ms += $bf; is($ms, 46, '$ms is 46'); is($ms->{_custom}, 1, '$ms has custom attribute $ms->{_custom}'); is(ref($ms), $CLASS, "\$ms is not an object of class '$CLASS'"); + +cmp_ok(Math::BigFloat::Subclass -> div_scale(), "==", 40, + "Math::BigFloat::Subclass gets 'div_scale' from parent"); + +is(Math::BigFloat::Subclass -> round_mode(), "even", + "Math::BigFloat::Subclass gets 'round_mode' from parent"); diff --git a/gnu/usr.bin/perl/cpan/Math-BigInt/t/sub_mbi.t b/gnu/usr.bin/perl/cpan/Math-BigInt/t/sub_mbi.t index 97bcdee397e..d4553e8e5b6 100755 --- a/gnu/usr.bin/perl/cpan/Math-BigInt/t/sub_mbi.t +++ b/gnu/usr.bin/perl/cpan/Math-BigInt/t/sub_mbi.t @@ -1,10 +1,10 @@ -#!/usr/bin/perl +# -*- mode: perl; -*- use strict; use warnings; -use Test::More tests => 4038 # tests in require'd file - + 5; # tests in this file +use Test::More tests => 4280 # tests in require'd file + + 7; # tests in this file use lib 't'; @@ -32,3 +32,9 @@ $ms += $bi; is($ms, 46, '$ms is 46'); is($ms->{_custom}, 1, '$ms has custom attribute $ms->{_custom}'); is(ref($ms), $CLASS, "\$ms is not an object of class '$CLASS'"); + +cmp_ok(Math::BigInt::Subclass -> div_scale(), "==", 40, + "Math::BigInt::Subclass gets 'div_scale' from parent"); + +is(Math::BigInt::Subclass -> round_mode(), "even", + "Math::BigInt::Subclass gets 'round_mode' from parent"); diff --git a/gnu/usr.bin/perl/cpan/Math-BigInt/t/sub_mif.t b/gnu/usr.bin/perl/cpan/Math-BigInt/t/sub_mif.t index 250db3f189a..8e9cad4f102 100755 --- a/gnu/usr.bin/perl/cpan/Math-BigInt/t/sub_mif.t +++ b/gnu/usr.bin/perl/cpan/Math-BigInt/t/sub_mif.t @@ -1,4 +1,4 @@ -#!/usr/bin/perl +# -*- mode: perl; -*- # test rounding, accuracy, precision and fallback, round_mode and mixing # of classes diff --git a/gnu/usr.bin/perl/cpan/Math-BigInt/t/trap.t b/gnu/usr.bin/perl/cpan/Math-BigInt/t/trap.t index 05af8821b47..28d75cf6d8c 100755 --- a/gnu/usr.bin/perl/cpan/Math-BigInt/t/trap.t +++ b/gnu/usr.bin/perl/cpan/Math-BigInt/t/trap.t @@ -1,4 +1,4 @@ -#!/usr/bin/perl +# -*- mode: perl; -*- # test that config ( trap_nan => 1, trap_inf => 1) really works/dies diff --git a/gnu/usr.bin/perl/cpan/Math-BigInt/t/upgrade.inc b/gnu/usr.bin/perl/cpan/Math-BigInt/t/upgrade.inc index d58376f2444..3cef71108da 100644 --- a/gnu/usr.bin/perl/cpan/Math-BigInt/t/upgrade.inc +++ b/gnu/usr.bin/perl/cpan/Math-BigInt/t/upgrade.inc @@ -91,7 +91,7 @@ while () { } elsif ($f eq "bone") { $try .= " \$x->bone('$args[1]');"; # some unary ops - } elsif ($f =~ /^b(nan|floor|ceil|int|sstr|neg|abs|inc|dec|not|sqrt|d?fac)$/) { + } elsif ($f =~ /^b(nan|floor|ceil|int|sstr|neg|abs|inc|dec|not|sqrt)$/) { $try .= " \$x->$f();"; } elsif ($f eq "length") { $try .= ' $x->length();'; @@ -231,7 +231,7 @@ sub is_valid { my ($x, $f, $c) = @_; # The checks here are loosened a bit to allow Math::BigInt or - # Math::BigFloats to pass + # Math::BigFloat objects to pass my $e = 0; # error? @@ -430,7 +430,6 @@ NaN:-inf: 0b100000000000000000000000000000001:4294967297 0b1000000000000000000000000000000001:8589934593 0b10000000000000000000000000000000001:17179869185 -0b__101:NaN 0b1_0_1:5 0b0_0_0_1:1 # hex input @@ -443,7 +442,6 @@ NaN:-inf: 0x12345678:305419896 0x1_2_3_4_56_78:305419896 0xa_b_c_d_e_f:11259375 -0x__123:NaN 0x9:9 0x11:17 0x21:33 @@ -493,10 +491,6 @@ abc:NaN # only one underscore between two digits _123:NaN _123_:NaN -123_:NaN -1__23:NaN -1E1__2:NaN -1_E12:NaN 1E_12:NaN 1_E_12:NaN +_1E12:NaN @@ -1291,41 +1285,6 @@ abc:NaN,NaN +inf:inf,inf -inf:-inf,inf -&bfac --1:NaN -NaNfac:NaN -+inf:inf --inf:NaN -0:1 -1:1 -2:2 -3:6 -4:24 -5:120 -6:720 -10:3628800 -11:39916800 -12:479001600 - -&bdfac -NaN:NaN --1:NaN -+inf:inf --inf:NaN -0:1 -1:1 -2:2 -3:3 -4:8 -5:15 -6:48 -7:105 -8:384 -9:945 -10:3840 -11:10395 -12:46080 - &bpow abc:12:NaN 12:abc:NaN diff --git a/gnu/usr.bin/perl/cpan/Math-BigInt/t/upgrade.t b/gnu/usr.bin/perl/cpan/Math-BigInt/t/upgrade.t index 552c8ae5117..94f7e8a0dc2 100755 --- a/gnu/usr.bin/perl/cpan/Math-BigInt/t/upgrade.t +++ b/gnu/usr.bin/perl/cpan/Math-BigInt/t/upgrade.t @@ -1,14 +1,32 @@ -#!/usr/bin/perl +# -*- mode: perl; -*- use strict; use warnings; -use Test::More tests => 2208 # tests in require'd file - + 2; # tests in this file +use Test::More tests => 2134 # tests in require'd file + + 6; # tests in this file -use Math::BigInt upgrade => 'Math::BigFloat'; +use Math::BigInt; use Math::BigFloat; +my $x = Math::BigInt -> new(9); +my $y = Math::BigInt -> new(4); + +# Without upgrading. + +my $zi = $x / $y; +cmp_ok($zi, "==", 2, "9/4 = 2 without upgrading"); +is(ref($zi), "Math::BigInt", "9/4 gives a Math::BigInt without upgrading"); + +# With upgrading. + +Math::BigInt -> upgrade("Math::BigFloat"); +my $zf = $x / $y; +cmp_ok($zf, "==", 2.25, "9/4 = 2.25 with upgrading"); +is(ref($zf), "Math::BigFloat", "9/4 gives a Math::BigFloat with upgrading"); + +# Other tests. + our ($CLASS, $EXPECTED_CLASS, $LIB); $CLASS = "Math::BigInt"; $EXPECTED_CLASS = "Math::BigFloat"; diff --git a/gnu/usr.bin/perl/cpan/Math-BigInt/t/upgradef.t b/gnu/usr.bin/perl/cpan/Math-BigInt/t/upgradef.t index d79297ba756..d76e97c74b4 100755 --- a/gnu/usr.bin/perl/cpan/Math-BigInt/t/upgradef.t +++ b/gnu/usr.bin/perl/cpan/Math-BigInt/t/upgradef.t @@ -1,4 +1,4 @@ -#!/usr/bin/perl +# -*- mode: perl; -*- use strict; use warnings; @@ -16,7 +16,7 @@ use overload; sub isa { my ($self, $class) = @_; - return if $class =~ /^Math::Big(Int|Float)/; # we aren't one of these + return if $class =~ /^Math::Big(Int|Float$)/; # we aren't one of these UNIVERSAL::isa($self, $class); } @@ -43,8 +43,8 @@ $LIB = "Math::BigInt::Calc"; # backend is(Math::BigFloat->upgrade(), $EXPECTED_CLASS, qq|Math::BigFloat->upgrade()|); -is(Math::BigFloat->downgrade() || '', '', - qq/Math::BigFloat->downgrade() || ''/); +is(Math::BigFloat->downgrade(), undef, + qq|Math::BigFloat->downgrade()|); $x = $CLASS->new(123); $y = $EXPECTED_CLASS->new(123); diff --git a/gnu/usr.bin/perl/cpan/Math-BigInt/t/use.t b/gnu/usr.bin/perl/cpan/Math-BigInt/t/use.t index d04a11afc14..a84e3dff21c 100755 --- a/gnu/usr.bin/perl/cpan/Math-BigInt/t/use.t +++ b/gnu/usr.bin/perl/cpan/Math-BigInt/t/use.t @@ -1,4 +1,4 @@ -#!/usr/bin/perl +# -*- mode: perl; -*- # use Module(); doesn't call import() - thanx for cpan testers David. M. Town # and Andreas Marcel Riechert for spotting it. It is fixed by the same code diff --git a/gnu/usr.bin/perl/cpan/Math-BigInt/t/use_lib1.t b/gnu/usr.bin/perl/cpan/Math-BigInt/t/use_lib1.t index c1e4bd98e2b..eb12b91fffc 100755 --- a/gnu/usr.bin/perl/cpan/Math-BigInt/t/use_lib1.t +++ b/gnu/usr.bin/perl/cpan/Math-BigInt/t/use_lib1.t @@ -1,16 +1,15 @@ -#!/usr/bin/perl +# -*- mode: perl; -*- # see if using Math::BigInt and Math::BigFloat works together nicely. # all use_lib*.t should be equivalent use strict; use warnings; +use lib 't'; use Test::More tests => 2; -use lib 't'; - -use Math::BigFloat lib => 'BareCalc'; +use Math::BigFloat lib => 'BareCalc'; # loads "BareCalc" is(Math::BigInt->config('lib'), 'Math::BigInt::BareCalc', "Math::BigInt->config('lib')"); diff --git a/gnu/usr.bin/perl/cpan/Math-BigInt/t/use_lib2.t b/gnu/usr.bin/perl/cpan/Math-BigInt/t/use_lib2.t index d5bcff12ad6..d3a7b45165f 100755 --- a/gnu/usr.bin/perl/cpan/Math-BigInt/t/use_lib2.t +++ b/gnu/usr.bin/perl/cpan/Math-BigInt/t/use_lib2.t @@ -1,19 +1,18 @@ -#!/usr/bin/perl +# -*- mode: perl; -*- # see if using Math::BigInt and Math::BigFloat works together nicely. # all use_lib*.t should be equivalent use strict; use warnings; +use lib 't'; use Test::More tests => 2; -use lib 't'; - -use Math::BigInt; -use Math::BigFloat lib => 'BareCalc'; +use Math::BigInt; # loads "Calc" +use Math::BigFloat lib => 'BareCalc'; # ignores "BareCalc" -is(Math::BigInt->config('lib'), 'Math::BigInt::BareCalc', +is(Math::BigInt->config('lib'), 'Math::BigInt::Calc', "Math::BigInt->config('lib')"); is(Math::BigFloat->new(123)->badd(123), 246, diff --git a/gnu/usr.bin/perl/cpan/Math-BigInt/t/use_lib3.t b/gnu/usr.bin/perl/cpan/Math-BigInt/t/use_lib3.t index f7d801ab855..bcf7967d199 100755 --- a/gnu/usr.bin/perl/cpan/Math-BigInt/t/use_lib3.t +++ b/gnu/usr.bin/perl/cpan/Math-BigInt/t/use_lib3.t @@ -1,16 +1,15 @@ -#!/usr/bin/perl +# -*- mode: perl; -*- # see if using Math::BigInt and Math::BigFloat works together nicely. # all use_lib*.t should be equivalent use strict; use warnings; +use lib 't'; use Test::More tests => 2; -use lib 't'; - -use Math::BigInt lib => 'BareCalc'; +use Math::BigInt lib => 'BareCalc'; # ignores "BareCalc" use Math::BigFloat; is(Math::BigInt->config('lib'), 'Math::BigInt::BareCalc', diff --git a/gnu/usr.bin/perl/cpan/Math-BigInt/t/use_lib4.t b/gnu/usr.bin/perl/cpan/Math-BigInt/t/use_lib4.t index 032b425893a..190d7bbf172 100755 --- a/gnu/usr.bin/perl/cpan/Math-BigInt/t/use_lib4.t +++ b/gnu/usr.bin/perl/cpan/Math-BigInt/t/use_lib4.t @@ -1,4 +1,4 @@ -#!/usr/bin/perl +# -*- mode: perl; -*- # see if using Math::BigInt and Math::BigFloat works together nicely. # all use_lib*.t should be equivalent, except this, since the later overrides @@ -10,10 +10,10 @@ use lib 't'; use Test::More tests => 2; -use Math::BigInt lib => 'BareCalc'; -use Math::BigFloat lib => 'Calc'; +use Math::BigInt lib => 'BareCalc'; # loads "BareCalc" +use Math::BigFloat lib => 'Calc'; # ignores "Calc" -is(Math::BigInt->config('lib'), 'Math::BigInt::Calc', +is(Math::BigInt->config('lib'), 'Math::BigInt::BareCalc', "Math::BigInt->config('lib')"); is(Math::BigFloat->new(123)->badd(123), 246, diff --git a/gnu/usr.bin/perl/cpan/Math-BigInt/t/use_mbfw.t b/gnu/usr.bin/perl/cpan/Math-BigInt/t/use_mbfw.t index 06d9c286ebc..3b19c55c97c 100755 --- a/gnu/usr.bin/perl/cpan/Math-BigInt/t/use_mbfw.t +++ b/gnu/usr.bin/perl/cpan/Math-BigInt/t/use_mbfw.t @@ -1,4 +1,4 @@ -#!perl +# -*- mode: perl; -*- # check that using Math::BigFloat with "with" and "lib" at the same time works # broken in versions up to v1.63 diff --git a/gnu/usr.bin/perl/cpan/Math-BigInt/t/with_sub.t b/gnu/usr.bin/perl/cpan/Math-BigInt/t/with_sub.t index 0ce15d10cb9..2f007ad6167 100755 --- a/gnu/usr.bin/perl/cpan/Math-BigInt/t/with_sub.t +++ b/gnu/usr.bin/perl/cpan/Math-BigInt/t/with_sub.t @@ -1,11 +1,11 @@ -#!perl +# -*- mode: perl; -*- # Test use Math::BigFloat with => 'Math::BigInt::SomeSubclass'; use strict; use warnings; -use Test::More tests => 2830 # tests in require'd file +use Test::More tests => 3070 # tests in require'd file + 1; # tests in this file use Math::BigFloat with => 'Math::BigInt::Subclass', diff --git a/gnu/usr.bin/perl/cpan/Math-BigRat/lib/Math/BigRat.pm b/gnu/usr.bin/perl/cpan/Math-BigRat/lib/Math/BigRat.pm index e3d172836c0..391e6d055f8 100644 --- a/gnu/usr.bin/perl/cpan/Math-BigRat/lib/Math/BigRat.pm +++ b/gnu/usr.bin/perl/cpan/Math-BigRat/lib/Math/BigRat.pm @@ -16,11 +16,12 @@ use 5.006; use strict; use warnings; -use Carp qw< carp croak >; +use Carp qw< carp croak >; +use Scalar::Util qw< blessed >; -use Math::BigFloat 1.999718; +use Math::BigFloat (); -our $VERSION = '0.2614'; +our $VERSION = '0.2621'; our @ISA = qw(Math::BigFloat); @@ -305,14 +306,24 @@ sub new { unless (defined $d) { #return $n -> copy($n) if $n -> isa('Math::BigRat'); - return $class -> copy($n) if $n -> isa('Math::BigRat'); - return $class -> bnan() if $n -> is_nan(); - return $class -> binf($n -> sign()) if $n -> is_inf(); + if ($n -> isa('Math::BigRat')) { + return $downgrade -> new($n) if defined($downgrade) && $n -> is_int(); + return $class -> copy($n); + } + + if ($n -> is_nan()) { + return $class -> bnan(); + } + + if ($n -> is_inf()) { + return $class -> binf($n -> sign()); + } if ($n -> isa('Math::BigInt')) { $self -> {_n} = $LIB -> _new($n -> copy() -> babs() -> bstr()); $self -> {_d} = $LIB -> _one(); $self -> {sign} = $n -> sign(); + return $downgrade -> new($n) if defined $downgrade; return $self; } @@ -337,6 +348,7 @@ sub new { } $self -> {sign} = $n -> sign(); + return $downgrade -> new($n) if defined($downgrade) && $n -> is_int(); return $self; } @@ -353,19 +365,30 @@ sub new { # At this point both $n and $d are objects. - return $class -> bnan() if $n -> is_nan() || $d -> is_nan(); + if ($n -> is_nan() || $d -> is_nan()) { + return $class -> bnan(); + } # At this point neither $n nor $d is a NaN. if ($n -> is_zero()) { - return $class -> bnan() if $d -> is_zero(); # 0/0 = NaN + if ($d -> is_zero()) { # 0/0 = NaN + return $class -> bnan(); + } return $class -> bzero(); } - return $class -> binf($d -> sign()) if $d -> is_zero(); + if ($d -> is_zero()) { + return $class -> binf($d -> sign()); + } # At this point, neither $n nor $d is a NaN or a zero. + # Copy them now before manipulating them. + + $n = $n -> copy(); + $d = $d -> copy(); + if ($d < 0) { # make sure denominator is positive $n -> bneg(); $d -> bneg(); @@ -411,6 +434,8 @@ sub new { $self -> {_d} = $LIB -> _mul($LIB -> _div($LIB -> _copy($q), $gcd_sq), $LIB -> _div($LIB -> _copy($r), $gcd_pr)); + return $downgrade -> new($n->bstr()) + if defined($downgrade) && $self -> is_int(); return $self; # no need for $self -> bnorm() here } @@ -516,6 +541,8 @@ sub new { } } + return $downgrade -> new($self -> bstr()) + if defined($downgrade) && $self -> is_int(); return $self; } @@ -553,6 +580,8 @@ sub bnan { croak ("Tried to set a variable to NaN in $class->bnan()"); } + return $downgrade -> bnan() if defined $downgrade; + $self -> {sign} = $nan; $self -> {_n} = $LIB -> _zero(); $self -> {_d} = $LIB -> _one(); @@ -577,6 +606,8 @@ sub binf { croak ("Tried to set a variable to +-inf in $class->binf()"); } + return $downgrade -> binf($sign) if defined $downgrade; + $self -> {sign} = $sign; $self -> {_n} = $LIB -> _zero(); $self -> {_d} = $LIB -> _one(); @@ -592,11 +623,12 @@ sub bone { my $selfref = ref $self; my $class = $selfref || $self; - $self = bless {}, $class unless $selfref; - my $sign = shift(); $sign = '+' unless defined($sign) && $sign eq '-'; + return $downgrade -> bone($sign) if defined $downgrade; + + $self = bless {}, $class unless $selfref; $self -> {sign} = $sign; $self -> {_n} = $LIB -> _one(); $self -> {_d} = $LIB -> _one(); @@ -612,8 +644,9 @@ sub bzero { my $selfref = ref $self; my $class = $selfref || $self; - $self = bless {}, $class unless $selfref; + return $downgrade -> bzero() if defined $downgrade; + $self = bless {}, $class unless $selfref; $self -> {sign} = '+'; $self -> {_n} = $LIB -> _zero(); $self -> {_d} = $LIB -> _one(); @@ -689,16 +722,24 @@ sub bnorm { } # no normalize for NaN, inf etc. - return $x if $x->{sign} !~ /^[+-]$/; + if ($x->{sign} !~ /^[+-]$/) { + return $downgrade -> new($x) if defined $downgrade; + return $x; + } # normalize zeros to 0/1 if ($LIB->_is_zero($x->{_n})) { + return $downgrade -> bzero() if defined($downgrade); $x->{sign} = '+'; # never leave a -0 $x->{_d} = $LIB->_one() unless $LIB->_is_one($x->{_d}); return $x; } - return $x if $LIB->_is_one($x->{_d}); # no need to reduce + # n/1 + if ($LIB->_is_one($x->{_d})) { + return $downgrade -> new($LIB -> _str($x->{_d})) if defined($downgrade); + return $x; # no need to reduce + } # Compute the GCD. my $gcd = $LIB->_gcd($LIB->_copy($x->{_n}), $x->{_d}); @@ -723,6 +764,9 @@ sub bneg { # for +0 do not negate (to have always normalized +0). Does nothing for 'NaN' $x->{sign} =~ tr/+-/-+/ unless ($x->{sign} eq '+' && $LIB->_is_zero($x->{_n})); + + return $downgrade -> new($LIB -> _str($x->{_n})) + if defined($downgrade) && $LIB -> _is_one($x->{_d}); $x; } @@ -788,12 +832,21 @@ sub badd { ($class, $x, $y, @r) = objectify(2, @_); } - # +inf + +inf => +inf, -inf + -inf => -inf - return $x->binf(substr($x->{sign}, 0, 1)) - if $x->{sign} eq $y->{sign} && $x->{sign} =~ /^[+-]inf$/; - - # +inf + -inf or -inf + +inf => NaN - return $x->bnan() if ($x->{sign} !~ /^[+-]$/ || $y->{sign} !~ /^[+-]$/); + unless ($x -> is_finite() && $y -> is_finite()) { + if ($x -> is_nan() || $y -> is_nan()) { + return $x -> bnan(@r); + } elsif ($x -> is_inf("+")) { + return $x -> bnan(@r) if $y -> is_inf("-"); + return $x -> binf("+", @r); + } elsif ($x -> is_inf("-")) { + return $x -> bnan(@r) if $y -> is_inf("+"); + return $x -> binf("-", @r); + } elsif ($y -> is_inf("+")) { + return $x -> binf("+", @r); + } elsif ($y -> is_inf("-")) { + return $x -> binf("-", @r); + } + } # 1 1 gcd(3, 4) = 1 1*3 + 1*4 7 # - + - = --------- = -- @@ -839,7 +892,7 @@ sub bsub { $x->{sign} =~ tr/+-/-+/ unless $x->{sign} eq '+' && $LIB->_is_zero($x->{_n}); # not -0 - $x; + $x->bnorm(); } sub bmul { @@ -893,7 +946,7 @@ sub bmul { # compute new sign $x->{sign} = $x->{sign} eq $y->{sign} ? '+' : '-'; - $x->round(@r); + $x->bnorm()->round(@r); } sub bdiv { @@ -916,7 +969,15 @@ sub bdiv { # method. if ($x -> is_nan() || $y -> is_nan()) { - return $wantarray ? ($x -> bnan(), $class -> bnan()) : $x -> bnan(); + if ($wantarray) { + return $downgrade -> bnan(), $downgrade -> bnan() + if defined($downgrade) && $LIB -> _is_one($x->{_d}); + return $x -> bnan(), $class -> bnan(); + } else { + return $downgrade -> bnan() + if defined($downgrade) && $LIB -> _is_one($x->{_d}); + return $x -> bnan(); + } } # Divide by zero and modulo zero. This is handled the same way as in @@ -933,6 +994,11 @@ sub bdiv { } else { $quo = $x -> binf($x -> {sign}); } + + $quo = $downgrade -> new($quo) + if defined($downgrade) && $quo -> is_int(); + $rem = $downgrade -> new($rem) + if $wantarray && defined($downgrade) && $rem -> is_int(); return $wantarray ? ($quo, $rem) : $quo; } @@ -949,6 +1015,11 @@ sub bdiv { my $sign = $x -> bcmp(0) == $y -> bcmp(0) ? '+' : '-'; $quo = $x -> binf($sign); } + + $quo = $downgrade -> new($quo) + if defined($downgrade) && $quo -> is_int(); + $rem = $downgrade -> new($rem) + if $wantarray && defined($downgrade) && $rem -> is_int(); return $wantarray ? ($quo, $rem) : $quo; } @@ -966,12 +1037,18 @@ sub bdiv { $rem = $class -> binf($y -> {sign}); $quo = $x -> bone('-'); } + $quo = $downgrade -> new($quo) + if defined($downgrade) && $quo -> is_int(); + $rem = $downgrade -> new($rem) + if defined($downgrade) && $rem -> is_int(); return ($quo, $rem); } else { if ($y -> is_inf()) { if ($x -> is_nan() || $x -> is_inf()) { + return $downgrade -> bnan() if defined $downgrade; return $x -> bnan(); } else { + return $downgrade -> bzero() if defined $downgrade; return $x -> bzero(); } } @@ -982,7 +1059,11 @@ sub bdiv { # the denominator (divisor) is non-zero. # x == 0? - return wantarray ? ($x, $class->bzero()) : $x if $x->is_zero(); + if ($x->is_zero()) { + return $wantarray ? ($downgrade -> bzero(), $downgrade -> bzero()) + : $downgrade -> bzero() if defined $downgrade; + return $wantarray ? ($x, $class->bzero()) : $x; + } # XXX TODO: list context, upgrade # According to Knuth, this can be optimized by doing gcd twice (for d and n) @@ -1001,13 +1082,14 @@ sub bdiv { $x -> bnorm(); if (wantarray) { my $rem = $x -> copy(); - $x -> bfloor(); - $x -> round(@r); - $rem -> bsub($x -> copy()) -> bmul($y); + $x = $x -> bfloor(); + $x = $x -> round(@r); + $rem = $rem -> bsub($x -> copy()) -> bmul($y); + $x = $downgrade -> new($x) if defined($downgrade) && $x -> is_int(); + $rem = $downgrade -> new($rem) if defined($downgrade) && $rem -> is_int(); return $x, $rem; } else { - $x -> round(@r); - return $x; + return $x -> round(@r); } } @@ -1033,6 +1115,7 @@ sub bmod { # Modulo zero. This is handled the same way as in Math::BigInt -> bmod(). if ($y -> is_zero()) { + return $downgrade -> bzero() if defined $downgrade; return $x; } @@ -1048,8 +1131,10 @@ sub bmod { if ($y -> is_inf()) { if ($x -> is_zero() || $x -> bcmp(0) == $y -> bcmp(0)) { + return $downgrade -> new($x) if defined($downgrade) && $x -> is_int(); return $x; } else { + return $downgrade -> binf($y -> sign()) if defined($downgrade); return $x -> binf($y -> sign()); } } @@ -1057,7 +1142,10 @@ sub bmod { # At this point, both the numerator and denominator are finite numbers, and # the denominator (divisor) is non-zero. - return $x if $x->is_zero(); # 0 / 7 = 0, mod 0 + if ($x->is_zero()) { # 0 / 7 = 0, mod 0 + return $downgrade -> bzero() if defined $downgrade; + return $x; + } # Compute $x - $y * floor($x/$y). This can probably be optimized by working # on a lower level. @@ -1073,7 +1161,10 @@ sub bdec { # decrement value (subtract 1) my ($class, $x, @r) = ref($_[0]) ? (ref($_[0]), @_) : objectify(1, @_); - return $x if $x->{sign} !~ /^[+-]$/; # NaN, inf, -inf + if ($x->{sign} !~ /^[+-]$/) { # NaN, inf, -inf + return $downgrade -> new($x) if defined $downgrade; + return $x; + } if ($x->{sign} eq '-') { $x->{_n} = $LIB->_add($x->{_n}, $x->{_d}); # -5/2 => -7/2 @@ -1094,7 +1185,10 @@ sub binc { # increment value (add 1) my ($class, $x, @r) = ref($_[0]) ? (ref($_[0]), @_) : objectify(1, @_); - return $x if $x->{sign} !~ /^[+-]$/; # NaN, inf, -inf + if ($x->{sign} !~ /^[+-]$/) { # NaN, inf, -inf + return $downgrade -> new($x) if defined $downgrade; + return $x; + } if ($x->{sign} eq '-') { if ($LIB->_acmp($x->{_n}, $x->{_d}) < 0) { @@ -1110,6 +1204,20 @@ sub binc { $x->bnorm()->round(@r); } +sub binv { + my $x = shift; + my @r = @_; + + return $x if $x->modify('binv'); + + return $x if $x -> is_nan(); + return $x -> bzero() if $x -> is_inf(); + return $x -> binf("+") if $x -> is_zero(); + + ($x -> {_n}, $x -> {_d}) = ($x -> {_d}, $x -> {_n}); + $x -> round(@r); +} + ############################################################################## # is_foo methods (the rest is inherited) @@ -1201,6 +1309,53 @@ sub parts { ($n, $d); } +sub dparts { + my $x = shift; + my $class = ref $x; + + croak("dparts() is an instance method") unless $class; + + if ($x -> is_nan()) { + return $class -> bnan(), $class -> bnan() if wantarray; + return $class -> bnan(); + } + + if ($x -> is_inf()) { + return $class -> binf($x -> sign()), $class -> bzero() if wantarray; + return $class -> binf($x -> sign()); + } + + # 355/113 => 3 + 16/113 + + my ($q, $r) = $LIB -> _div($LIB -> _copy($x -> {_n}), $x -> {_d}); + + my $int = Math::BigRat -> new($x -> {sign} . $LIB -> _str($q)); + return $int unless wantarray; + + my $frc = Math::BigRat -> new($x -> {sign} . $LIB -> _str($r), + $LIB -> _str($x -> {_d})); + + return $int, $frc; +} + +sub fparts { + my $x = shift; + my $class = ref $x; + + croak("fparts() is an instance method") unless $class; + + return ($class -> bnan(), + $class -> bnan()) if $x -> is_nan(); + + my $numer = $x -> copy(); + my $denom = $class -> bzero(); + + $denom -> {_n} = $numer -> {_d}; + $numer -> {_d} = $LIB -> _one(); + + return ($numer, $denom); +} + sub length { my ($class, $x) = ref($_[0]) ? (undef, $_[0]) : objectify(1, @_); @@ -1221,8 +1376,12 @@ sub digit { sub bceil { my ($class, $x) = ref($_[0]) ? (ref($_[0]), $_[0]) : objectify(1, @_); - return $x if ($x->{sign} !~ /^[+-]$/ || # not for NaN, inf - $LIB->_is_one($x->{_d})); # 22/1 => 22, 0/1 => 0 + if ($x->{sign} !~ /^[+-]$/ || # NaN or inf or + $LIB->_is_one($x->{_d})) # integer + { + return $downgrade -> new($x) if defined $downgrade; + return $x; + } $x->{_n} = $LIB->_div($x->{_n}, $x->{_d}); # 22/7 => 3/1 w/ truncate $x->{_d} = $LIB->_one(); # d => 1 @@ -1234,8 +1393,12 @@ sub bceil { sub bfloor { my ($class, $x) = ref($_[0]) ? (ref($_[0]), $_[0]) : objectify(1, @_); - return $x if ($x->{sign} !~ /^[+-]$/ || # not for NaN, inf - $LIB->_is_one($x->{_d})); # 22/1 => 22, 0/1 => 0 + if ($x->{sign} !~ /^[+-]$/ || # NaN or inf or + $LIB->_is_one($x->{_d})) # integer + { + return $downgrade -> new($x) if defined $downgrade; + return $x; + } $x->{_n} = $LIB->_div($x->{_n}, $x->{_d}); # 22/7 => 3/1 w/ truncate $x->{_d} = $LIB->_one(); # d => 1 @@ -1244,10 +1407,14 @@ sub bfloor { } sub bint { - my ($class, $x, @r) = ref($_[0]) ? (ref($_[0]), $_[0]) : objectify(1, @_); + my ($class, $x) = ref($_[0]) ? (ref($_[0]), $_[0]) : objectify(1, @_); - return $x if ($x->{sign} !~ /^[+-]$/ || # +/-inf or NaN - $LIB -> _is_one($x->{_d})); # already an integer + if ($x->{sign} !~ /^[+-]$/ || # NaN or inf or + $LIB->_is_one($x->{_d})) # integer + { + return $downgrade -> new($x) if defined $downgrade; + return $x; + } $x->{_n} = $LIB->_div($x->{_n}, $x->{_d}); # 22/7 => 3/1 w/ truncate $x->{_d} = $LIB->_one(); # d => 1 @@ -1279,6 +1446,8 @@ sub bpow { ($class, $x, $y, @r) = objectify(2, @_); } + return $x if $x->modify('bpow'); + # $x and/or $y is a NaN return $x->bnan() if $x->is_nan() || $y->is_nan(); @@ -1304,21 +1473,28 @@ sub bpow { return $x->binf("+"); } - if ($x->is_zero()) { - return $x->binf() if $y->is_negative(); - return $x->bone("+") if $y->is_zero(); + if ($x -> is_zero()) { + return $x -> bone() if $y -> is_zero(); + return $x -> binf() if $y -> is_negative(); return $x; - } elsif ($x->is_one()) { - return $x->round(@r) if $y->is_odd(); # x is -1, y is odd => -1 - return $x->babs()->round(@r); # x is -1, y is even => 1 - } elsif ($y->is_zero()) { - return $x->bone(@r); # x^0 and x != 0 => 1 - } elsif ($y->is_one()) { - return $x->round(@r); # x^1 => x } - # we don't support complex numbers, so return NaN - return $x->bnan() if $x->is_negative() && !$y->is_int(); + # We don't support complex numbers, so upgrade or return NaN. + + if ($x -> is_negative() && !$y -> is_int()) { + return $upgrade -> bpow($upgrade -> new($x), $y, @r) + if defined $upgrade; + return $x -> bnan(); + } + + if ($x -> is_one("+") || $y -> is_one()) { + return $x; + } + + if ($x -> is_one("-")) { + return $x if $y -> is_odd(); + return $x -> bneg(); + } # (a/b)^-(c/d) = (b/a)^(c/d) ($x->{_n}, $x->{_d}) = ($x->{_d}, $x->{_n}) if $y->is_negative(); @@ -1348,11 +1524,11 @@ sub blog { # $x->blog(undef) signals that the base is Euler's number. if (!ref($_[0]) && $_[0] =~ /^[A-Za-z]|::/) { - # E.g., Math::BigFloat->blog(256, 2) + # E.g., Math::BigRat->blog(256, 2) ($class, $x, $base, @r) = defined $_[2] ? objectify(2, @_) : objectify(1, @_); } else { - # E.g., Math::BigFloat::blog(256, 2) or $x->blog(2) + # E.g., Math::BigRat::blog(256, 2) or $x->blog(2) ($class, $x, $base, @r) = defined $_[1] ? objectify(2, @_) : objectify(1, @_); } @@ -1393,6 +1569,24 @@ sub blog { return $x -> binf($sign); } + # Now take care of the cases where $x and/or $base is 1/N. + # + # log(1/N) / log(B) = -log(N)/log(B) + # log(1/N) / log(1/B) = log(N)/log(B) + # log(N) / log(1/B) = -log(N)/log(B) + + my $neg = 0; + if ($x -> numerator() -> is_one()) { + $x -> binv(); + $neg = !$neg; + } + if (defined(blessed($base)) && $base -> isa($class)) { + if ($base -> numerator() -> is_one()) { + $base = $base -> copy() -> binv(); + $neg = !$neg; + } + } + # At this point we are done handling all exception cases and trivial cases. $base = Math::BigFloat -> new($base) if defined $base; @@ -1406,7 +1600,7 @@ sub blog { $x -> {_n} = $xtmp -> {_n}; $x -> {_d} = $xtmp -> {_d}; - return $x; + return $neg ? $x -> bneg() : $x; } sub bexp { @@ -1513,13 +1707,18 @@ sub bnok { ($class, $x, $y, @r) = objectify(2, @_); } - my $xint = Math::BigInt -> new($x -> bint() -> bsstr()); - my $yint = Math::BigInt -> new($y -> bint() -> bsstr()); + return $x->bnan() if $x->is_nan() || $y->is_nan(); + return $x->bnan() if (($x->is_finite() && !$x->is_int()) || + ($y->is_finite() && !$y->is_int())); + + my $xint = Math::BigInt -> new($x -> bstr()); + my $yint = Math::BigInt -> new($y -> bstr()); $xint -> bnok($yint); + my $xrat = Math::BigRat -> new($xint); - $x -> {sign} = $xint -> {sign}; - $x -> {_n} = $xint -> {_n}; - $x -> {_d} = $xint -> {_d}; + $x -> {sign} = $xrat -> {sign}; + $x -> {_n} = $xrat -> {_n}; + $x -> {_d} = $xrat -> {_d}; return $x; } @@ -1570,7 +1769,7 @@ sub bmodpow { my $yint = Math::BigInt -> new($y -> copy() -> bint()); my $mint = Math::BigInt -> new($m -> copy() -> bint()); - $xint -> bmodpow($y, $m, @r); + $xint -> bmodpow($yint, $mint, @r); my $xtmp = Math::BigRat -> new($xint -> bsstr()); $x -> {sign} = $xtmp -> {sign}; @@ -1592,7 +1791,7 @@ sub bmodinv { my $xint = Math::BigInt -> new($x -> copy() -> bint()); my $yint = Math::BigInt -> new($y -> copy() -> bint()); - $xint -> bmodinv($y, @r); + $xint -> bmodinv($yint, @r); my $xtmp = Math::BigRat -> new($xint -> bsstr()); $x -> {sign} = $xtmp -> {sign}; @@ -1651,7 +1850,7 @@ sub bsqrt { } sub blsft { - my ($class, $x, $y, $b, @r) = objectify(2, @_); + my ($class, $x, $y, $b) = objectify(2, @_); $b = 2 if !defined $b; $b = $class -> new($b) unless ref($b) && $b -> isa($class); @@ -1665,7 +1864,7 @@ sub blsft { } sub brsft { - my ($class, $x, $y, $b, @r) = objectify(2, @_); + my ($class, $x, $y, $b) = objectify(2, @_); $b = 2 if !defined $b; $b = $class -> new($b) unless ref($b) && $b -> isa($class); @@ -1776,15 +1975,21 @@ sub bnot { # round sub round { - $_[0]; + my $x = shift; + $x = $downgrade -> new($x) if defined($downgrade) && $x -> is_int(); + $x; } sub bround { - $_[0]; + my $x = shift; + $x = $downgrade -> new($x) if defined($downgrade) && $x -> is_int(); + $x; } sub bfround { - $_[0]; + my $x = shift; + $x = $downgrade -> new($x) if defined($downgrade) && $x -> is_int(); + $x; } ############################################################################## @@ -1803,9 +2008,9 @@ sub bcmp { if ($x->{sign} !~ /^[+-]$/ || $y->{sign} !~ /^[+-]$/) { # $x is NaN and/or $y is NaN - return undef if $x->{sign} eq $nan || $y->{sign} eq $nan; + return if $x->{sign} eq $nan || $y->{sign} eq $nan; # $x and $y are both either +inf or -inf - return 0 if $x->{sign} eq $y->{sign} && $x->{sign} =~ /^[+-]inf$/; + return 0 if $x->{sign} eq $y->{sign} && $x->{sign} =~ /^[+-]inf$/; # $x = +inf and $y < +inf return +1 if $x->{sign} eq '+inf'; # $x = -inf and $y > -inf @@ -1850,9 +2055,9 @@ sub bacmp { if (($x->{sign} !~ /^[+-]$/) || ($y->{sign} !~ /^[+-]$/)) { # handle +-inf and NaN - return undef if (($x->{sign} eq $nan) || ($y->{sign} eq $nan)); - return 0 if $x->{sign} =~ /^[+-]inf$/ && $y->{sign} =~ /^[+-]inf$/; - return 1 if $x->{sign} =~ /^[+-]inf$/ && $y->{sign} !~ /^[+-]inf$/; + return if (($x->{sign} eq $nan) || ($y->{sign} eq $nan)); + return 0 if $x->{sign} =~ /^[+-]inf$/ && $y->{sign} =~ /^[+-]inf$/; + return 1 if $x->{sign} =~ /^[+-]inf$/ && $y->{sign} !~ /^[+-]inf$/; return -1; } @@ -1864,7 +2069,7 @@ sub bacmp { sub beq { my $self = shift; my $selfref = ref $self; - my $class = $selfref || $self; + #my $class = $selfref || $self; croak 'beq() is an instance method, not a class method' unless $selfref; croak 'Wrong number of arguments for beq()' unless @_ == 1; @@ -1876,7 +2081,7 @@ sub beq { sub bne { my $self = shift; my $selfref = ref $self; - my $class = $selfref || $self; + #my $class = $selfref || $self; croak 'bne() is an instance method, not a class method' unless $selfref; croak 'Wrong number of arguments for bne()' unless @_ == 1; @@ -1888,7 +2093,7 @@ sub bne { sub blt { my $self = shift; my $selfref = ref $self; - my $class = $selfref || $self; + #my $class = $selfref || $self; croak 'blt() is an instance method, not a class method' unless $selfref; croak 'Wrong number of arguments for blt()' unless @_ == 1; @@ -1900,7 +2105,7 @@ sub blt { sub ble { my $self = shift; my $selfref = ref $self; - my $class = $selfref || $self; + #my $class = $selfref || $self; croak 'ble() is an instance method, not a class method' unless $selfref; croak 'Wrong number of arguments for ble()' unless @_ == 1; @@ -1912,7 +2117,7 @@ sub ble { sub bgt { my $self = shift; my $selfref = ref $self; - my $class = $selfref || $self; + #my $class = $selfref || $self; croak 'bgt() is an instance method, not a class method' unless $selfref; croak 'Wrong number of arguments for bgt()' unless @_ == 1; @@ -1924,7 +2129,7 @@ sub bgt { sub bge { my $self = shift; my $selfref = ref $self; - my $class = $selfref || $self; + #my $class = $selfref || $self; croak 'bge() is an instance method, not a class method' unless $selfref; @@ -1943,7 +2148,17 @@ sub numify { # Non-finite number. - return $x->bstr() if $x->{sign} !~ /^[+-]$/; + if ($x -> is_nan()) { + require Math::Complex; + my $inf = $Math::Complex::Inf; + return $inf - $inf; + } + + if ($x -> is_inf()) { + require Math::Complex; + my $inf = $Math::Complex::Inf; + return $x -> is_negative() ? -$inf : $inf; + } # Finite number. @@ -1978,10 +2193,13 @@ sub as_float { # NaN, inf etc return Math::BigFloat->new($x->{sign}) if $x->{sign} !~ /^[+-]$/; - my $xd = Math::BigFloat -> new($LIB -> _str($x->{_d})); my $xflt = Math::BigFloat -> new($LIB -> _str($x->{_n})); $xflt -> {sign} = $x -> {sign}; - $xflt -> bdiv($xd, @r); + + unless ($LIB -> _is_one($x->{_d})) { + my $xd = Math::BigFloat -> new($LIB -> _str($x->{_d})); + $xflt -> bdiv($xd, @r); + } return $xflt; } @@ -2019,18 +2237,27 @@ sub as_oct { sub from_hex { my $class = shift; - $class->new(@_); + # The relationship should probably go the otherway, i.e, that new() calls + # from_hex(). Fixme! + my ($x, @r) = @_; + $x =~ s|^\s*(?:0?[Xx]_*)?|0x|; + $class->new($x, @r); } sub from_bin { my $class = shift; - $class->new(@_); + # The relationship should probably go the otherway, i.e, that new() calls + # from_bin(). Fixme! + my ($x, @r) = @_; + $x =~ s|^\s*(?:0?[Bb]_*)?|0b|; + $class->new($x, @r); } sub from_oct { my $class = shift; + # Why is this different from from_hex() and from_bin()? Fixme! my @parts; for my $c (@_) { push @parts, Math::BigInt->from_oct($c); @@ -2043,57 +2270,101 @@ sub from_oct { sub import { my $class = shift; - my $l = scalar @_; - my $lib = ''; my @a; - my $try = 'try'; - - for (my $i = 0; $i < $l ; $i++) { - if ($_[$i] eq ':constant') { - # this rest causes overlord er load to step in - overload::constant float => sub { $class->new(shift); }; + my @a; # unrecognized arguments + my $lib_param = ''; + my $lib_value = ''; + + while (@_) { + my $param = shift; + + # Enable overloading of constants. + + if ($param eq ':constant') { + overload::constant + + integer => sub { + $class -> new(shift); + }, + + float => sub { + $class -> new(shift); + }, + + binary => sub { + # E.g., a literal 0377 shall result in an object whose value + # is decimal 255, but new("0377") returns decimal 377. + return $class -> from_oct($_[0]) if $_[0] =~ /^0_*[0-7]/; + $class -> new(shift); + }; + next; } - # elsif ($_[$i] eq 'upgrade') - # { - # # this causes upgrading - # $upgrade = $_[$i+1]; # or undef to disable - # $i++; - # } - elsif ($_[$i] eq 'downgrade') { - # this causes downgrading - $downgrade = $_[$i+1]; # or undef to disable - $i++; - } elsif ($_[$i] =~ /^(lib|try|only)\z/) { - $lib = $_[$i+1] || ''; # default Calc - $try = $1; # lib, try or only - $i++; - } elsif ($_[$i] eq 'with') { - # this argument is no longer used - #$LIB = $_[$i+1] || 'Math::BigInt::Calc'; # default Math::BigInt::Calc - $i++; - } else { - push @a, $_[$i]; + + # Upgrading. + + if ($param eq 'upgrade') { + $class -> upgrade(shift); + next; + } + + # Downgrading. + + if ($param eq 'downgrade') { + $class -> downgrade(shift); + next; + } + + # Accuracy. + + if ($param eq 'accuracy') { + $class -> accuracy(shift); + next; } - } - require Math::BigInt; - # let use Math::BigInt lib => 'GMP'; use Math::BigRat; still have GMP - if ($lib ne '') { - my @c = split /\s*,\s*/, $lib; - foreach (@c) { - $_ =~ tr/a-zA-Z0-9://cd; # limit to sane characters + # Precision. + + if ($param eq 'precision') { + $class -> precision(shift); + next; + } + + # Rounding mode. + + if ($param eq 'round_mode') { + $class -> round_mode(shift); + next; + } + + # Backend library. + + if ($param =~ /^(lib|try|only)\z/) { + # alternative library + $lib_param = $param; # "lib", "try", or "only" + $lib_value = shift; + next; + } + + if ($param eq 'with') { + # alternative class for our private parts() + # XXX: no longer supported + # $LIB = shift() || 'Calc'; + # carp "'with' is no longer supported, use 'lib', 'try', or 'only'"; + shift; + next; } - $lib = join(",", @c); + + # Unrecognized parameter. + + push @a, $param; } - my @import = ('objectify'); - push @import, $try => $lib if $lib ne ''; - # LIB already loaded, so feed it our lib arguments - Math::BigInt->import(@import); + require Math::BigInt; - $LIB = Math::BigFloat->config("lib"); + my @import = ('objectify'); + push @import, $lib_param, $lib_value if $lib_param ne ''; + Math::BigInt -> import(@import); - # register us with LIB to get notified of future lib changes - Math::BigInt::_register_callback($class, sub { $LIB = $_[0]; }); + # find out which one was actually loaded + $LIB = Math::BigInt -> config("lib"); # any non :constant stuff is handled by Exporter (loaded by parent class) # even if @_ is empty, to give it a chance @@ -2109,7 +2380,7 @@ __END__ =head1 NAME -Math::BigRat - Arbitrary big rational numbers +Math::BigRat - arbitrary size rational number math package =head1 SYNOPSIS @@ -2201,6 +2472,16 @@ Returns a copy of the denominator (the part under the line) as positive BigInt. Return a list consisting of (signed) numerator and (unsigned) denominator as BigInts. +=item dparts() + +Returns the integer part and the fraction part. + +=item fparts() + +Returns the smallest possible numerator and denominator so that the numerator +divided by the denominator gives back the original value. For finite numbers, +both values are integers. Mnemonic: fraction. + =item numify() my $y = $x->numify(); @@ -2513,7 +2794,13 @@ Subtracts $y from $x and returns the result. In scalar context, divides $x by $y and returns the result. In list context, does floored division (F-division), returning an integer $q and a remainder $r so that $x = $q * $y + $r. The remainer (modulo) is equal to what is returned -by C<$x->bmod($y)>. +by C<< $x->bmod($y) >>. + +=item binv() + + $x->binv(); + +Inverse of $x. =item bdec() @@ -2695,6 +2982,70 @@ supported. =back +=head1 NUMERIC LITERALS + +After C all numeric literals in the given scope +are converted to C objects. This conversion happens at compile +time. Every non-integer is convert to a NaN. + +For example, + + perl -MMath::BigRat=:constant -le 'print 2**150' + +prints the exact value of C<2**150>. Note that without conversion of constants +to objects the expression C<2**150> is calculated using Perl scalars, which +leads to an inaccurate result. + +Please note that strings are not affected, so that + + use Math::BigRat qw/:constant/; + + $x = "1234567890123456789012345678901234567890" + + "123456789123456789"; + +does give you what you expect. You need an explicit Math::BigRat->new() around +at least one of the operands. You should also quote large constants to prevent +loss of precision: + + use Math::BigRat; + + $x = Math::BigRat->new("1234567889123456789123456789123456789"); + +Without the quotes Perl first converts the large number to a floating point +constant at compile time, and then converts the result to a Math::BigRat object +at run time, which results in an inaccurate result. + +=head2 Hexadecimal, octal, and binary floating point literals + +Perl (and this module) accepts hexadecimal, octal, and binary floating point +literals, but use them with care with Perl versions before v5.32.0, because some +versions of Perl silently give the wrong result. Below are some examples of +different ways to write the number decimal 314. + +Hexadecimal floating point literals: + + 0x1.3ap+8 0X1.3AP+8 + 0x1.3ap8 0X1.3AP8 + 0x13a0p-4 0X13A0P-4 + +Octal floating point literals (with "0" prefix): + + 01.164p+8 01.164P+8 + 01.164p8 01.164P8 + 011640p-4 011640P-4 + +Octal floating point literals (with "0o" prefix) (requires v5.34.0): + + 0o1.164p+8 0O1.164P+8 + 0o1.164p8 0O1.164P8 + 0o11640p-4 0O11640P-4 + +Binary floating point literals: + + 0b1.0011101p+8 0B1.0011101P+8 + 0b1.0011101p8 0B1.0011101P8 + 0b10011101000p-2 0B10011101000P-2 + =head1 BUGS Please report any bugs or feature requests to @@ -2714,43 +3065,25 @@ You can also look for information at: =over 4 -=item * RT: CPAN's request tracker - -L - -=item * AnnoCPAN: Annotated CPAN documentation +=item * GitHub -L +L -=item * CPAN Ratings +=item * RT: CPAN's request tracker -L +L -=item * Search CPAN +=item * MetaCPAN -L +L =item * CPAN Testers Matrix L -=item * The Bignum mailing list - -=over 4 - -=item * Post to mailing list - -C - -=item * View mailing list - -L - -=item * Subscribe/Unsubscribe - -L +=item * CPAN Ratings -=back +L =back @@ -2774,7 +3107,7 @@ Tels L 2001-2009. =item * -Maintained by Peter John Acklam 2011- +Maintained by Peter John Acklam 2011- =back diff --git a/gnu/usr.bin/perl/cpan/Math-BigRat/t/big_ap.t b/gnu/usr.bin/perl/cpan/Math-BigRat/t/big_ap.t index 1ac46e5d9fc..dd114be7078 100755 --- a/gnu/usr.bin/perl/cpan/Math-BigRat/t/big_ap.t +++ b/gnu/usr.bin/perl/cpan/Math-BigRat/t/big_ap.t @@ -1,4 +1,4 @@ -#!perl +# -*- mode: perl; -*- # Test that accuracy() and precision() in BigInt/BigFloat do not disturb # the rounding force in BigRat. diff --git a/gnu/usr.bin/perl/cpan/Math-BigRat/t/bigfltrt.t b/gnu/usr.bin/perl/cpan/Math-BigRat/t/bigfltrt.t index 856318614f0..27a17b2d81b 100755 --- a/gnu/usr.bin/perl/cpan/Math-BigRat/t/bigfltrt.t +++ b/gnu/usr.bin/perl/cpan/Math-BigRat/t/bigfltrt.t @@ -1,4 +1,4 @@ -#!perl +# -*- mode: perl; -*- use strict; use warnings; diff --git a/gnu/usr.bin/perl/cpan/Math-BigRat/t/bigrat.t b/gnu/usr.bin/perl/cpan/Math-BigRat/t/bigrat.t index fec6afd568c..41fcd2d5c69 100755 --- a/gnu/usr.bin/perl/cpan/Math-BigRat/t/bigrat.t +++ b/gnu/usr.bin/perl/cpan/Math-BigRat/t/bigrat.t @@ -1,9 +1,9 @@ -#!perl +# -*- mode: perl; -*- use strict; use warnings; -use Test::More tests => 202; +use Test::More tests => 203; # basic testing of Math::BigRat @@ -346,7 +346,8 @@ $x = $mbr->new('-7/5')->bsstr(); is($x, '-7/5'); ############################################################################## -# numify() + +note("numify()"); my @array = qw/1 2 3 4 5 6 7 8 9/; $x = $mbr->new('8/8'); @@ -367,23 +368,60 @@ is($array[$x], 6); $x = $mbr->new('-8/1'); is($array[$x], 2); # -8 => 2 -$x = $mbr->new('33/8'); -is($x->numify() * 1000, 4125); +require Math::Complex; -$x = $mbr->new('-33/8'); -is($x->numify() * 1000, -4125); +my $inf = $Math::Complex::Inf; +my $nan = $inf - $inf; + +sub isnumeric { + my $value = shift; + ($value ^ $value) eq "0"; +} -$x = $mbr->new('inf'); -is($x->numify(), 'inf'); +subtest qq|$mbr -> new("33/8") -> numify()| => sub { + plan tests => 3; -$x = $mbr->new('-inf'); -is($x->numify(), '-inf'); + $x = $mbr -> new("33/8") -> numify(); + is(ref($x), "", '$x is a scalar'); + ok(isnumeric($x), '$x is numeric'); + cmp_ok($x, "==", 4.125, '$x has the right value'); +}; -$x = $mbr->new('NaN'); -is($x->numify(), 'NaN'); +subtest qq|$mbr -> new("-33/8") -> numify()| => sub { + plan tests => 3; + + $x = $mbr -> new("-33/8") -> numify(); + is(ref($x), "", '$x is a scalar'); + ok(isnumeric($x), '$x is numeric'); + cmp_ok($x, "==", -4.125, '$x has the right value'); +}; -$x = $mbr->new('4/3'); -is($x->numify(), 4/3); +subtest qq|$mbr -> new("inf") -> numify()| => sub { + plan tests => 3; + + $x = $mbr -> new("inf") -> numify(); + is(ref($x), "", '$x is a scalar'); + ok(isnumeric($x), '$x is numeric'); + cmp_ok($x, "==", $inf, '$x has the right value'); +}; + +subtest qq|$mbr -> new("-inf") -> numify()| => sub { + plan tests => 3; + + $x = $mbr -> new("-inf") -> numify(); + is(ref($x), "", '$x is a scalar'); + ok(isnumeric($x), '$x is numeric'); + cmp_ok($x, "==", -$inf, '$x has the right value'); +}; + +subtest qq|$mbr -> new("NaN") -> numify()| => sub { + plan tests => 3; + + $x = $mbr -> new("NaN") -> numify(); + is(ref($x), "", '$x is a scalar'); + ok(isnumeric($x), '$x is numeric'); + cmp_ok($x, "!=", $nan, '$x has the right value'); # Note: NaN != NaN +}; ############################################################################## # as_hex(), as_bin(), as_oct() @@ -470,6 +508,14 @@ $f = $x->as_float(5); is($x, '2/3', '$x unmodified'); is($f, '0.66667', 'as_float(2/3, 5)'); +# Integers should be converted exactly. +$x = Math::BigRat->new("3141592653589793238462643383279502884197169399375106"); +$f = $x->as_float(); + +is($x, "3141592653589793238462643383279502884197169399375106", '$x unmodified'); +is($f, "3141592653589793238462643383279502884197169399375106", + 'as_float(3141592653589793238462643383279502884197169399375106, 5)'); + ############################################################################## # int() diff --git a/gnu/usr.bin/perl/cpan/Math-BigRat/t/bigratpm.inc b/gnu/usr.bin/perl/cpan/Math-BigRat/t/bigratpm.inc index b3015360b84..9d5f77ed098 100644 --- a/gnu/usr.bin/perl/cpan/Math-BigRat/t/bigratpm.inc +++ b/gnu/usr.bin/perl/cpan/Math-BigRat/t/bigratpm.inc @@ -318,9 +318,6 @@ NaN:1:NaN 5/2:2.5 3/2:1.5 5/4:1.25 -NaN:NaN -+inf:inf --inf:-inf &fnan abc:NaN @@ -361,10 +358,6 @@ inf/-5:-inf -inf/-5:inf 123:123 -123.4567:-1234567/10000 -# invalid inputs -1__2:NaN -1E1__2:NaN -11__2E2:NaN #1.E3:NaN .2E-3.:NaN #1e3e4:NaN diff --git a/gnu/usr.bin/perl/cpan/Math-BigRat/t/bigratpm.t b/gnu/usr.bin/perl/cpan/Math-BigRat/t/bigratpm.t index 40f9f6eb8a1..d6d9641b21b 100755 --- a/gnu/usr.bin/perl/cpan/Math-BigRat/t/bigratpm.t +++ b/gnu/usr.bin/perl/cpan/Math-BigRat/t/bigratpm.t @@ -1,9 +1,9 @@ -#!perl +# -*- mode: perl; -*- use strict; use warnings; -use Test::More tests => 905; +use Test::More tests => 899; use Math::BigRat lib => 'Calc'; diff --git a/gnu/usr.bin/perl/cpan/Math-BigRat/t/bigratup.t b/gnu/usr.bin/perl/cpan/Math-BigRat/t/bigratup.t index f424486a521..1f9bf49c29f 100755 --- a/gnu/usr.bin/perl/cpan/Math-BigRat/t/bigratup.t +++ b/gnu/usr.bin/perl/cpan/Math-BigRat/t/bigratup.t @@ -1,4 +1,4 @@ -#!perl +# -*- mode: perl; -*- # Test whether $Math::BigInt::upgrade breaks our neck diff --git a/gnu/usr.bin/perl/cpan/Math-BigRat/t/bitwise.t b/gnu/usr.bin/perl/cpan/Math-BigRat/t/bitwise.t index 6bd499fa51e..490b0f3dcfe 100644 --- a/gnu/usr.bin/perl/cpan/Math-BigRat/t/bitwise.t +++ b/gnu/usr.bin/perl/cpan/Math-BigRat/t/bitwise.t @@ -1,4 +1,4 @@ -#!perl +# -*- mode: perl; -*- use strict; use warnings; diff --git a/gnu/usr.bin/perl/cpan/Math-BigRat/t/hang.t b/gnu/usr.bin/perl/cpan/Math-BigRat/t/hang.t index 21b9304cbd8..3e8637749ec 100755 --- a/gnu/usr.bin/perl/cpan/Math-BigRat/t/hang.t +++ b/gnu/usr.bin/perl/cpan/Math-BigRat/t/hang.t @@ -1,4 +1,4 @@ -#!perl +# -*- mode: perl; -*- # test for bug #34584: hang in exp(1/2) diff --git a/gnu/usr.bin/perl/cpan/Math-BigRat/t/requirer.t b/gnu/usr.bin/perl/cpan/Math-BigRat/t/requirer.t index 6788783a290..4e2fadb9696 100755 --- a/gnu/usr.bin/perl/cpan/Math-BigRat/t/requirer.t +++ b/gnu/usr.bin/perl/cpan/Math-BigRat/t/requirer.t @@ -1,4 +1,4 @@ -#!perl +# -*- mode: perl; -*- # check that simple requiring BigRat works diff --git a/gnu/usr.bin/perl/cpan/Math-BigRat/t/trap.t b/gnu/usr.bin/perl/cpan/Math-BigRat/t/trap.t index bab85d4e5dd..a61abb9b45c 100755 --- a/gnu/usr.bin/perl/cpan/Math-BigRat/t/trap.t +++ b/gnu/usr.bin/perl/cpan/Math-BigRat/t/trap.t @@ -1,4 +1,4 @@ -#!perl +# -*- mode: perl; -*- # test that config( trap_nan => 1, trap_inf => 1) really works/dies diff --git a/gnu/usr.bin/perl/cpan/Module-Load-Conditional/lib/Module/Load/Conditional.pm b/gnu/usr.bin/perl/cpan/Module-Load-Conditional/lib/Module/Load/Conditional.pm index b0685d2ec12..b851aeb723e 100644 --- a/gnu/usr.bin/perl/cpan/Module-Load-Conditional/lib/Module/Load/Conditional.pm +++ b/gnu/usr.bin/perl/cpan/Module-Load-Conditional/lib/Module/Load/Conditional.pm @@ -22,7 +22,7 @@ BEGIN { $FIND_VERSION $ERROR $CHECK_INC_HASH $FORCE_SAFE_INC ]; use Exporter; @ISA = qw[Exporter]; - $VERSION = '0.70'; + $VERSION = '0.74'; $VERBOSE = 0; $DEPRECATED = 0; $FIND_VERSION = 1; @@ -238,7 +238,7 @@ sub check_install { $filename = File::Spec->catfile($dir, $file); next unless -e $filename; - $fh = new FileHandle; + $fh = FileHandle->new(); if (!$fh->open($filename)) { warn loc(q[Cannot open file '%1': %2], $file, $!) if $args->{verbose}; @@ -320,6 +320,7 @@ sub check_install { require Module::CoreList; require Config; + no warnings 'once'; $href->{uptodate} = 0 if exists $Module::CoreList::version{ 0+$] }{ $args->{module} } and Module::CoreList::is_deprecated( $args->{module} ) and diff --git a/gnu/usr.bin/perl/cpan/NEXT/lib/NEXT.pm b/gnu/usr.bin/perl/cpan/NEXT/lib/NEXT.pm index a2ad070f651..067929053ad 100644 --- a/gnu/usr.bin/perl/cpan/NEXT/lib/NEXT.pm +++ b/gnu/usr.bin/perl/cpan/NEXT/lib/NEXT.pm @@ -5,7 +5,7 @@ use strict; use warnings; use overload (); -our $VERSION = '0.67_01'; +our $VERSION = '0.69'; sub NEXT::ELSEWHERE::ancestors { diff --git a/gnu/usr.bin/perl/cpan/NEXT/t/actual.t b/gnu/usr.bin/perl/cpan/NEXT/t/actual.t index 85ae2850892..d2922b2eb1a 100755 --- a/gnu/usr.bin/perl/cpan/NEXT/t/actual.t +++ b/gnu/usr.bin/perl/cpan/NEXT/t/actual.t @@ -1,25 +1,33 @@ +use strict; +use warnings; use Test::More tests => 10; BEGIN { use_ok('NEXT') }; my $order = 0; package A; -@ISA = qw/B C D/; +our @ISA = qw/B C D/; +use if $] >= 5.009005, 'mro', 'dfs'; + sub test { ++$order; ::ok($order==1,"test A"); $_[0]->NEXT::ACTUAL::test;} package B; -@ISA = qw/D C/; +our @ISA = qw/D C/; +use if $] >= 5.009005, 'mro', 'dfs'; sub test { ++$order; ::ok($order==2,"test B"); $_[0]->NEXT::ACTUAL::test;} package C; -@ISA = qw/D/; +our @ISA = qw/D/; +use if $] >= 5.009005, 'mro', 'dfs'; + sub test { ++$order; ::ok($order==4||$order==6,"test C"); $_[0]->NEXT::ACTUAL::test; } package D; +use if $] >= 5.009005, 'mro', 'dfs'; sub test { ++$order; ::ok($order==3||$order==5||$order==7||$order==8,"test D"); @@ -27,6 +35,7 @@ sub test { } package main; +use if $] >= 5.009005, 'mro', 'dfs'; my $foo = {}; diff --git a/gnu/usr.bin/perl/cpan/PerlIO-via-QuotedPrint/lib/PerlIO/via/QuotedPrint.pm b/gnu/usr.bin/perl/cpan/PerlIO-via-QuotedPrint/lib/PerlIO/via/QuotedPrint.pm index 8135e176403..d02ec682ae5 100644 --- a/gnu/usr.bin/perl/cpan/PerlIO-via-QuotedPrint/lib/PerlIO/via/QuotedPrint.pm +++ b/gnu/usr.bin/perl/cpan/PerlIO-via-QuotedPrint/lib/PerlIO/via/QuotedPrint.pm @@ -1,10 +1,19 @@ +# Copyright (C) 2002-2004, 2012 Elizabeth Mattijsen. All rights reserved. +# Copyright (C) 2015 Steve Hay. All rights reserved. + +# This module is free software; you can redistribute it and/or modify it under +# the same terms as Perl itself, i.e. under the terms of either the GNU General +# Public License or the Artistic License, as specified in the F file. + package PerlIO::via::QuotedPrint; -$VERSION= '0.08'; +use 5.008001; # be as strict as possible use strict; +our $VERSION = '0.09'; + # modules that we need use MIME::QuotedPrint (); # no need to pollute this namespace @@ -61,17 +70,13 @@ PerlIO::via::QuotedPrint - PerlIO layer for quoted-printable strings =head1 SYNOPSIS - use PerlIO::via::QuotedPrint; + use PerlIO::via::QuotedPrint; - open( my $in, '<:via(QuotedPrint)', 'file.qp' ) - or die "Can't open file.qp for reading: $!\n"; - - open( my $out, '>:via(QuotedPrint)', 'file.qp' ) - or die "Can't open file.qp for writing: $!\n"; - -=head1 VERSION + open(my $in, '<:via(QuotedPrint)', 'file.qp') or + die "Can't open file.qp for reading: $!\n"; -This documentation describes version 0.08. + open(my $out, '>:via(QuotedPrint)', 'file.qp') or + die "Can't open file.qp for writing: $!\n"; =head1 DESCRIPTION @@ -79,24 +84,93 @@ This module implements a PerlIO layer that works on files encoded in the quoted-printable format. It will decode from quoted-printable while reading from a handle, and it will encode as quoted-printable while writing to a handle. -=head1 REQUIRED MODULES +=head1 EXPORTS + +I. + +=head1 KNOWN BUGS + +I. + +=head1 FEEDBACK - MIME::QuotedPrint (any) +Patches, bug reports, suggestions or any other feedback is welcome. + +Patches can be sent as GitHub pull requests at +L. + +Bug reports and suggestions can be made on the CPAN Request Tracker at +L. + +Currently active requests on the CPAN Request Tracker can be viewed at +L. + +Please test this distribution. See CPAN Testers Reports at +L for details of how to get involved. + +Previous test results on CPAN Testers Reports can be viewed at +L. + +Please rate this distribution on CPAN Ratings at +L. =head1 SEE ALSO -L, L, L, -L, L, L. +L, +L. =head1 ACKNOWLEDGEMENTS -Based on example that was initially added to MIME::QuotedPrint.pm for the -5.8.0 distribution of Perl. +Based on an example in the standard library module MIME::QuotedPrint in Perl +(version 5.8.0). + +=head1 AVAILABILITY + +The latest version of this module is available from CPAN (see +L for details) at + +L or + +L or + +L. + +The latest source code is available from GitHub at +L. + +=head1 INSTALLATION + +See the F file. + +=head1 AUTHOR + +Elizabeth Mattijsen ELE. + +Steve Hay ELE is now maintaining +PerlIO::via::QuotedPrint as of version 0.08. =head1 COPYRIGHT -Copyright (c) 2002, 2003, 2004, 2012 Elizabeth Mattijsen. All rights reserved. -This library is free software; you can redistribute it and/or modify it under -the same terms as Perl itself. +Copyright (C) 2002-2004, 2012 Elizabeth Mattijsen. All rights reserved. + +Copyright (C) 2015, 2020 Steve Hay. All rights reserved. + +=head1 LICENCE + +This module is free software; you can redistribute it and/or modify it under +the same terms as Perl itself, i.e. under the terms of either the GNU General +Public License or the Artistic License, as specified in the F file. + +=head1 VERSION + +Version 0.09 + +=head1 DATE + +08 Dec 2020 + +=head1 HISTORY + +See the F file. =cut diff --git a/gnu/usr.bin/perl/cpan/Pod-Perldoc/lib/Pod/Perldoc.pm b/gnu/usr.bin/perl/cpan/Pod-Perldoc/lib/Pod/Perldoc.pm index 42ed4b49d54..bb6ffc83efb 100644 --- a/gnu/usr.bin/perl/cpan/Pod-Perldoc/lib/Pod/Perldoc.pm +++ b/gnu/usr.bin/perl/cpan/Pod-Perldoc/lib/Pod/Perldoc.pm @@ -486,8 +486,6 @@ sub init_formatter_class_list { $self->opt_M_with('Pod::Perldoc::ToPod'); # the always-there fallthru $self->opt_o_with('text'); - $self->opt_o_with('man') - if $ENV{TERM} && $ENV{TERM} !~ /dumb|emacs|none|unknown/i; return; } diff --git a/gnu/usr.bin/perl/cpan/Pod-Perldoc/lib/Pod/Perldoc/ToMan.pm b/gnu/usr.bin/perl/cpan/Pod-Perldoc/lib/Pod/Perldoc/ToMan.pm index d8e42b1703b..bfcb5c40ee6 100644 --- a/gnu/usr.bin/perl/cpan/Pod-Perldoc/lib/Pod/Perldoc/ToMan.pm +++ b/gnu/usr.bin/perl/cpan/Pod-Perldoc/lib/Pod/Perldoc/ToMan.pm @@ -144,9 +144,7 @@ sub _get_podman_switches { # # See RT #77465 # - # Then again, do *not* comment it out on OpenBSD: - # mandoc handles UTF-8 input just fine. - push @switches, 'utf8' => 1; + #push @switches, 'utf8' => 1; $self->debug( "Pod::Man switches are [@switches]\n" ); @@ -211,6 +209,12 @@ sub _have_groff_with_utf8 { $version ge $minimum_groff_version; } +sub _have_mandoc_with_utf8 { + my( $self ) = @_; + + $self->_is_mandoc and not system 'mandoc -Tlocale -V > /dev/null 2>&1'; + } + sub _collect_nroff_switches { my( $self ) = shift; @@ -223,10 +227,6 @@ sub _collect_nroff_switches { push @render_switches, '-rLL=' . (int $c) . 'n' if $cols > 80; } - if( $self->_is_mandoc ) { - push @render_switches, '-Owidth=' . $self->_get_columns; - } - # I hear persistent reports that adding a -c switch to $render # solves many people's problems. But I also hear that some mans # don't have a -c switch, so that unconditionally adding it here @@ -242,6 +242,7 @@ sub _get_device_switches { if( $self->_is_nroff ) { qw() } elsif( $self->_have_groff_with_utf8 ) { qw(-Kutf8 -Tutf8) } elsif( $self->_is_ebcdic ) { qw(-Tcp1047) } + elsif( $self->_have_mandoc_with_utf8 ) { qw(-Tlocale) } elsif( $self->_is_mandoc ) { qw() } else { qw(-Tlatin1) } } @@ -357,9 +358,6 @@ sub _filter_through_nroff { length $done ); - # wait for it to exit - waitpid( $pid, 0 ); - if( $? ) { $self->warn( "Error from pipe to $render!\n" ); $self->debug( 'Error: ' . do { local $/; <$err> } ); diff --git a/gnu/usr.bin/perl/cpan/Pod-Simple/lib/Pod/Simple.pm b/gnu/usr.bin/perl/cpan/Pod-Simple/lib/Pod/Simple.pm index 6c91b8ac1fb..ee89c0a4898 100644 --- a/gnu/usr.bin/perl/cpan/Pod-Simple/lib/Pod/Simple.pm +++ b/gnu/usr.bin/perl/cpan/Pod-Simple/lib/Pod/Simple.pm @@ -8,6 +8,7 @@ use integer; use Pod::Escapes 1.04 (); use Pod::Simple::LinkSection (); use Pod::Simple::BlackBox (); +use Pod::Simple::TiedOutFH; #use utf8; use vars qw( @@ -18,11 +19,11 @@ use vars qw( ); @ISA = ('Pod::Simple::BlackBox'); -$VERSION = '3.40'; +$VERSION = '3.43'; @Known_formatting_codes = qw(I B C L E F S X Z); %Known_formatting_codes = map(($_=>1), @Known_formatting_codes); -@Known_directives = qw(head1 head2 head3 head4 item over back); +@Known_directives = qw(head1 head2 head3 head4 head5 head6 item over back); %Known_directives = map(($_=>'Plain'), @Known_directives); $NL = $/ unless defined $NL; @@ -202,7 +203,6 @@ sub output_string { my $this = shift; return $this->{'output_string'} unless @_; # GET. - require Pod::Simple::TiedOutFH; my $x = (defined($_[0]) and ref($_[0])) ? $_[0] : \( $_[0] ); $$x = '' unless defined $$x; DEBUG > 4 and print STDERR "# Output string set to $x ($$x)\n"; diff --git a/gnu/usr.bin/perl/cpan/Pod-Simple/lib/Pod/Simple/BlackBox.pm b/gnu/usr.bin/perl/cpan/Pod-Simple/lib/Pod/Simple/BlackBox.pm index d115aee7e3e..7c0d9aa469a 100644 --- a/gnu/usr.bin/perl/cpan/Pod-Simple/lib/Pod/Simple/BlackBox.pm +++ b/gnu/usr.bin/perl/cpan/Pod-Simple/lib/Pod/Simple/BlackBox.pm @@ -22,7 +22,7 @@ use integer; # vroom! use strict; use Carp (); use vars qw($VERSION ); -$VERSION = '3.40'; +$VERSION = '3.43'; #use constant DEBUG => 7; sub my_qr ($$) { @@ -64,7 +64,7 @@ my $non_ascii_re = my_qr('[[:^ascii:]]', "\xB6"); $non_ascii_re = qr/[\x80-\xFF]/ unless $non_ascii_re; # Use patterns understandable by Perl 5.6, if possible -my $cs_re = my_qr('\p{IsCs}', "\x{D800}"); +my $cs_re = do { no warnings; my_qr('\p{IsCs}', "\x{D800}") }; my $cn_re = my_qr('\p{IsCn}', "\x{09E4}"); # code point unlikely # to get assigned my $rare_blocks_re = my_qr('[\p{InIPAExtensions}\p{InSpacingModifierLetters}]', @@ -139,10 +139,8 @@ sub parse_lines { # Usage: $parser->parse_lines(@lines) # An attempt to match the pod portions of a line. This is not fool proof, # but is good enough to serve as part of the heuristic for guessing the pod # encoding if not specified. - my $format_codes = join "", '[', grep { / ^ [A-Za-z] $/x } - keys %{$self->{accept_codes}}; - $format_codes .= ']'; - my $pod_chars_re = qr/ ^ = [A-Za-z]+ | $format_codes < /x; + my $codes = join '', grep { / ^ [A-Za-z] $/x } sort keys %{$self->{accept_codes}}; + my $pod_chars_re = qr/ ^ = [A-Za-z]+ | [\Q$codes\E] < /x; my $line; foreach my $source_line (@_) { diff --git a/gnu/usr.bin/perl/cpan/Pod-Simple/lib/Pod/Simple/Checker.pm b/gnu/usr.bin/perl/cpan/Pod-Simple/lib/Pod/Simple/Checker.pm index 2fef0305a5c..3b22a3d6cd9 100644 --- a/gnu/usr.bin/perl/cpan/Pod-Simple/lib/Pod/Simple/Checker.pm +++ b/gnu/usr.bin/perl/cpan/Pod-Simple/lib/Pod/Simple/Checker.pm @@ -9,7 +9,7 @@ use Carp (); use Pod::Simple::Methody (); use Pod::Simple (); use vars qw( @ISA $VERSION ); -$VERSION = '3.40'; +$VERSION = '3.43'; @ISA = ('Pod::Simple::Methody'); BEGIN { *DEBUG = defined(&Pod::Simple::DEBUG) ? \&Pod::Simple::DEBUG diff --git a/gnu/usr.bin/perl/cpan/Pod-Simple/lib/Pod/Simple/Debug.pm b/gnu/usr.bin/perl/cpan/Pod-Simple/lib/Pod/Simple/Debug.pm index aaa5a887e6b..7f51efa9dc4 100644 --- a/gnu/usr.bin/perl/cpan/Pod-Simple/lib/Pod/Simple/Debug.pm +++ b/gnu/usr.bin/perl/cpan/Pod-Simple/lib/Pod/Simple/Debug.pm @@ -2,7 +2,7 @@ require 5; package Pod::Simple::Debug; use strict; use vars qw($VERSION ); -$VERSION = '3.40'; +$VERSION = '3.43'; sub import { my($value,$variable); diff --git a/gnu/usr.bin/perl/cpan/Pod-Simple/lib/Pod/Simple/DumpAsText.pm b/gnu/usr.bin/perl/cpan/Pod-Simple/lib/Pod/Simple/DumpAsText.pm index bade6fcc472..dfcee5d2b4a 100644 --- a/gnu/usr.bin/perl/cpan/Pod-Simple/lib/Pod/Simple/DumpAsText.pm +++ b/gnu/usr.bin/perl/cpan/Pod-Simple/lib/Pod/Simple/DumpAsText.pm @@ -1,7 +1,7 @@ require 5; package Pod::Simple::DumpAsText; -$VERSION = '3.40'; +$VERSION = '3.43'; use Pod::Simple (); BEGIN {@ISA = ('Pod::Simple')} diff --git a/gnu/usr.bin/perl/cpan/Pod-Simple/lib/Pod/Simple/DumpAsXML.pm b/gnu/usr.bin/perl/cpan/Pod-Simple/lib/Pod/Simple/DumpAsXML.pm index 6f0b7b18621..c5e719cdf8e 100644 --- a/gnu/usr.bin/perl/cpan/Pod-Simple/lib/Pod/Simple/DumpAsXML.pm +++ b/gnu/usr.bin/perl/cpan/Pod-Simple/lib/Pod/Simple/DumpAsXML.pm @@ -1,7 +1,7 @@ require 5; package Pod::Simple::DumpAsXML; -$VERSION = '3.40'; +$VERSION = '3.43'; use Pod::Simple (); BEGIN {@ISA = ('Pod::Simple')} diff --git a/gnu/usr.bin/perl/cpan/Pod-Simple/lib/Pod/Simple/HTML.pm b/gnu/usr.bin/perl/cpan/Pod-Simple/lib/Pod/Simple/HTML.pm index 0219b979100..cebf5702a8b 100644 --- a/gnu/usr.bin/perl/cpan/Pod-Simple/lib/Pod/Simple/HTML.pm +++ b/gnu/usr.bin/perl/cpan/Pod-Simple/lib/Pod/Simple/HTML.pm @@ -9,7 +9,7 @@ use vars qw( $Doctype_decl $Content_decl ); @ISA = ('Pod::Simple::PullParser'); -$VERSION = '3.40'; +$VERSION = '3.43'; BEGIN { if(defined &DEBUG) { } # no-op elsif( defined &Pod::Simple::DEBUG ) { *DEBUG = \&Pod::Simple::DEBUG } @@ -109,10 +109,14 @@ my @_to_accept; 'head2' => "\n

", # '' 'head3' => "\n

", # '' 'head4' => "\n

", # '' + 'head5' => "\n

", # '' + 'head6' => "\n
", # '' '/head1' => "
\n", '/head2' => "

\n", '/head3' => "\n", '/head4' => "\n", + '/head5' => "\n", + '/head6' => "\n", 'X' => "", @@ -224,7 +228,7 @@ sub __adjust_html_h_levels { return if ($self->{'Adjusted_html_h_levels'}||0) == $add; $add -= 1; - for (1 .. 4) { + for (1 .. 6) { $Tagmap->{"head$_"} =~ s/$_/$_ + $add/e; $Tagmap->{"/head$_"} =~ s/$_/$_ + $add/e; } @@ -323,7 +327,7 @@ sub version_tag_comment { "\n", esc( ref($self), $self->VERSION(), $ISA[0], $ISA[0]->VERSION(), - $], scalar(gmtime), + $], scalar(gmtime($ENV{SOURCE_DATE_EPOCH} || time)), ), $self->_modnote(), ; } diff --git a/gnu/usr.bin/perl/cpan/Pod-Simple/lib/Pod/Simple/HTMLBatch.pm b/gnu/usr.bin/perl/cpan/Pod-Simple/lib/Pod/Simple/HTMLBatch.pm index 227d6d3af0d..cd33a4c97c1 100644 --- a/gnu/usr.bin/perl/cpan/Pod-Simple/lib/Pod/Simple/HTMLBatch.pm +++ b/gnu/usr.bin/perl/cpan/Pod-Simple/lib/Pod/Simple/HTMLBatch.pm @@ -5,7 +5,7 @@ use strict; use vars qw( $VERSION $HTML_RENDER_CLASS $HTML_EXTENSION $CSS $JAVASCRIPT $SLEEPY $SEARCH_CLASS @ISA ); -$VERSION = '3.40'; +$VERSION = '3.43'; @ISA = (); # Yup, we're NOT a subclass of Pod::Simple::HTML! # TODO: nocontents stylesheets. Strike some of the color variations? @@ -94,11 +94,11 @@ sub new { $new->contents_page_end( sprintf( - "\n\n

Generated by %s v%s under Perl v%s\n
At %s GMT, which is %s local time.

\n\n\n", + "\n\n

Generated by %s v%s under Perl v%s\n
At %s GMT.

\n\n\n", esc( ref($new), eval {$new->VERSION} || $VERSION, - $], scalar(gmtime), scalar(localtime), + $], scalar(gmtime($ENV{SOURCE_DATE_EPOCH} || time)), ))); return $new; @@ -871,7 +871,8 @@ $CSS = <<'EOCSS'; background-color: #000; } - body.pod h1, body.pod h2, body.pod h3, body.pod h4 { + body.pod h1, body.pod h2, body.pod h3, + body.pod h4, body.pod h5, body.pod h6 { font-family: Tahoma, Verdana, Helvetica, Arial, sans-serif; font-weight: normal; margin-top: 1.2em; @@ -884,11 +885,15 @@ $CSS = <<'EOCSS'; body.pod h2 { border-top-color: #080; } body.pod h3 { border-top-color: #040; } body.pod h4 { border-top-color: #010; } + body.pod h5 { border-top-color: #010; } + body.pod h6 { border-top-color: #010; } p.backlinktop + h1 { border-top: none; margin-top: 0em; } p.backlinktop + h2 { border-top: none; margin-top: 0em; } p.backlinktop + h3 { border-top: none; margin-top: 0em; } p.backlinktop + h4 { border-top: none; margin-top: 0em; } + p.backlinktop + h5 { border-top: none; margin-top: 0em; } + p.backlinktop + h6 { border-top: none; margin-top: 0em; } body.pod dt { font-size: 105%; /* just a wee bit more than normal */ diff --git a/gnu/usr.bin/perl/cpan/Pod-Simple/lib/Pod/Simple/LinkSection.pm b/gnu/usr.bin/perl/cpan/Pod-Simple/lib/Pod/Simple/LinkSection.pm index b9ca19cdf93..c14dabcea27 100644 --- a/gnu/usr.bin/perl/cpan/Pod-Simple/lib/Pod/Simple/LinkSection.pm +++ b/gnu/usr.bin/perl/cpan/Pod-Simple/lib/Pod/Simple/LinkSection.pm @@ -6,7 +6,7 @@ package Pod::Simple::LinkSection; use strict; use Pod::Simple::BlackBox; use vars qw($VERSION ); -$VERSION = '3.40'; +$VERSION = '3.43'; use overload( # So it'll stringify nice '""' => \&Pod::Simple::BlackBox::stringify_lol, diff --git a/gnu/usr.bin/perl/cpan/Pod-Simple/lib/Pod/Simple/Methody.pm b/gnu/usr.bin/perl/cpan/Pod-Simple/lib/Pod/Simple/Methody.pm index 5bcee54d4f7..cc096facbb5 100644 --- a/gnu/usr.bin/perl/cpan/Pod-Simple/lib/Pod/Simple/Methody.pm +++ b/gnu/usr.bin/perl/cpan/Pod-Simple/lib/Pod/Simple/Methody.pm @@ -4,7 +4,7 @@ package Pod::Simple::Methody; use strict; use Pod::Simple (); use vars qw(@ISA $VERSION); -$VERSION = '3.40'; +$VERSION = '3.43'; @ISA = ('Pod::Simple'); # Yes, we could use named variables, but I want this to be impose diff --git a/gnu/usr.bin/perl/cpan/Pod-Simple/lib/Pod/Simple/Progress.pm b/gnu/usr.bin/perl/cpan/Pod-Simple/lib/Pod/Simple/Progress.pm index 3d6f4031125..d1eaba2d6f7 100644 --- a/gnu/usr.bin/perl/cpan/Pod-Simple/lib/Pod/Simple/Progress.pm +++ b/gnu/usr.bin/perl/cpan/Pod-Simple/lib/Pod/Simple/Progress.pm @@ -1,7 +1,7 @@ require 5; package Pod::Simple::Progress; -$VERSION = '3.40'; +$VERSION = '3.43'; use strict; # Objects of this class are used for noting progress of an diff --git a/gnu/usr.bin/perl/cpan/Pod-Simple/lib/Pod/Simple/PullParser.pm b/gnu/usr.bin/perl/cpan/Pod-Simple/lib/Pod/Simple/PullParser.pm index ceeb3f92504..8c00592fba7 100644 --- a/gnu/usr.bin/perl/cpan/Pod-Simple/lib/Pod/Simple/PullParser.pm +++ b/gnu/usr.bin/perl/cpan/Pod-Simple/lib/Pod/Simple/PullParser.pm @@ -1,6 +1,6 @@ require 5; package Pod::Simple::PullParser; -$VERSION = '3.40'; +$VERSION = '3.43'; use Pod::Simple (); BEGIN {@ISA = ('Pod::Simple')} diff --git a/gnu/usr.bin/perl/cpan/Pod-Simple/lib/Pod/Simple/PullParserEndToken.pm b/gnu/usr.bin/perl/cpan/Pod-Simple/lib/Pod/Simple/PullParserEndToken.pm index d9ebdcbcf0e..2d656e088fb 100644 --- a/gnu/usr.bin/perl/cpan/Pod-Simple/lib/Pod/Simple/PullParserEndToken.pm +++ b/gnu/usr.bin/perl/cpan/Pod-Simple/lib/Pod/Simple/PullParserEndToken.pm @@ -5,7 +5,7 @@ use Pod::Simple::PullParserToken (); use strict; use vars qw(@ISA $VERSION); @ISA = ('Pod::Simple::PullParserToken'); -$VERSION = '3.40'; +$VERSION = '3.43'; sub new { # Class->new(tagname); my $class = shift; diff --git a/gnu/usr.bin/perl/cpan/Pod-Simple/lib/Pod/Simple/PullParserStartToken.pm b/gnu/usr.bin/perl/cpan/Pod-Simple/lib/Pod/Simple/PullParserStartToken.pm index 61608fb466c..5e1bf71ed9a 100644 --- a/gnu/usr.bin/perl/cpan/Pod-Simple/lib/Pod/Simple/PullParserStartToken.pm +++ b/gnu/usr.bin/perl/cpan/Pod-Simple/lib/Pod/Simple/PullParserStartToken.pm @@ -5,7 +5,7 @@ use Pod::Simple::PullParserToken (); use strict; use vars qw(@ISA $VERSION); @ISA = ('Pod::Simple::PullParserToken'); -$VERSION = '3.40'; +$VERSION = '3.43'; sub new { # Class->new(tagname, optional_attrhash); my $class = shift; diff --git a/gnu/usr.bin/perl/cpan/Pod-Simple/lib/Pod/Simple/PullParserTextToken.pm b/gnu/usr.bin/perl/cpan/Pod-Simple/lib/Pod/Simple/PullParserTextToken.pm index c8247a081e7..159839952e0 100644 --- a/gnu/usr.bin/perl/cpan/Pod-Simple/lib/Pod/Simple/PullParserTextToken.pm +++ b/gnu/usr.bin/perl/cpan/Pod-Simple/lib/Pod/Simple/PullParserTextToken.pm @@ -5,7 +5,7 @@ use Pod::Simple::PullParserToken (); use strict; use vars qw(@ISA $VERSION); @ISA = ('Pod::Simple::PullParserToken'); -$VERSION = '3.40'; +$VERSION = '3.43'; sub new { # Class->new(text); my $class = shift; diff --git a/gnu/usr.bin/perl/cpan/Pod-Simple/lib/Pod/Simple/PullParserToken.pm b/gnu/usr.bin/perl/cpan/Pod-Simple/lib/Pod/Simple/PullParserToken.pm index f14b5637cd4..48cece540f5 100644 --- a/gnu/usr.bin/perl/cpan/Pod-Simple/lib/Pod/Simple/PullParserToken.pm +++ b/gnu/usr.bin/perl/cpan/Pod-Simple/lib/Pod/Simple/PullParserToken.pm @@ -3,7 +3,7 @@ require 5; package Pod::Simple::PullParserToken; # Base class for tokens gotten from Pod::Simple::PullParser's $parser->get_token @ISA = (); -$VERSION = '3.40'; +$VERSION = '3.43'; use strict; sub new { # Class->new('type', stuff...); ## Overridden in derived classes anyway diff --git a/gnu/usr.bin/perl/cpan/Pod-Simple/lib/Pod/Simple/RTF.pm b/gnu/usr.bin/perl/cpan/Pod-Simple/lib/Pod/Simple/RTF.pm index ed0de149ae0..793a8b2a498 100644 --- a/gnu/usr.bin/perl/cpan/Pod-Simple/lib/Pod/Simple/RTF.pm +++ b/gnu/usr.bin/perl/cpan/Pod-Simple/lib/Pod/Simple/RTF.pm @@ -8,7 +8,7 @@ package Pod::Simple::RTF; use strict; use vars qw($VERSION @ISA %Escape $WRAP %Tagmap); -$VERSION = '3.40'; +$VERSION = '3.43'; use Pod::Simple::PullParser (); BEGIN {@ISA = ('Pod::Simple::PullParser')} @@ -494,7 +494,7 @@ END # None of the following things should need escaping, I dare say! $tag, $ISA[0], $ISA[0]->VERSION(), - $], scalar(gmtime), + $], scalar(gmtime($ENV{SOURCE_DATE_EPOCH} || time)), ; } diff --git a/gnu/usr.bin/perl/cpan/Pod-Simple/lib/Pod/Simple/Search.pm b/gnu/usr.bin/perl/cpan/Pod-Simple/lib/Pod/Simple/Search.pm index a07d33b85ac..6462549492d 100644 --- a/gnu/usr.bin/perl/cpan/Pod-Simple/lib/Pod/Simple/Search.pm +++ b/gnu/usr.bin/perl/cpan/Pod-Simple/lib/Pod/Simple/Search.pm @@ -3,7 +3,7 @@ package Pod::Simple::Search; use strict; use vars qw($VERSION $MAX_VERSION_WITHIN $SLEEPY); -$VERSION = '3.40'; ## Current version of this package +$VERSION = '3.43'; ## Current version of this package BEGIN { *DEBUG = sub () {0} unless defined &DEBUG; } # set DEBUG level use Carp (); diff --git a/gnu/usr.bin/perl/cpan/Pod-Simple/lib/Pod/Simple/SimpleTree.pm b/gnu/usr.bin/perl/cpan/Pod-Simple/lib/Pod/Simple/SimpleTree.pm index 85dbabcd70e..15f457baaff 100644 --- a/gnu/usr.bin/perl/cpan/Pod-Simple/lib/Pod/Simple/SimpleTree.pm +++ b/gnu/usr.bin/perl/cpan/Pod-Simple/lib/Pod/Simple/SimpleTree.pm @@ -5,7 +5,7 @@ use strict; use Carp (); use Pod::Simple (); use vars qw( $ATTR_PAD @ISA $VERSION $SORT_ATTRS); -$VERSION = '3.40'; +$VERSION = '3.43'; BEGIN { @ISA = ('Pod::Simple'); *DEBUG = \&Pod::Simple::DEBUG unless defined &DEBUG; diff --git a/gnu/usr.bin/perl/cpan/Pod-Simple/lib/Pod/Simple/Text.pm b/gnu/usr.bin/perl/cpan/Pod-Simple/lib/Pod/Simple/Text.pm index de50b510eae..f44987f4e43 100644 --- a/gnu/usr.bin/perl/cpan/Pod-Simple/lib/Pod/Simple/Text.pm +++ b/gnu/usr.bin/perl/cpan/Pod-Simple/lib/Pod/Simple/Text.pm @@ -6,7 +6,7 @@ use Carp (); use Pod::Simple::Methody (); use Pod::Simple (); use vars qw( @ISA $VERSION $FREAKYMODE); -$VERSION = '3.40'; +$VERSION = '3.43'; @ISA = ('Pod::Simple::Methody'); BEGIN { *DEBUG = defined(&Pod::Simple::DEBUG) ? \&Pod::Simple::DEBUG diff --git a/gnu/usr.bin/perl/cpan/Pod-Simple/lib/Pod/Simple/TextContent.pm b/gnu/usr.bin/perl/cpan/Pod-Simple/lib/Pod/Simple/TextContent.pm index ad4172b7a31..9c2932e37d1 100644 --- a/gnu/usr.bin/perl/cpan/Pod-Simple/lib/Pod/Simple/TextContent.pm +++ b/gnu/usr.bin/perl/cpan/Pod-Simple/lib/Pod/Simple/TextContent.pm @@ -6,7 +6,7 @@ use strict; use Carp (); use Pod::Simple (); use vars qw( @ISA $VERSION ); -$VERSION = '3.40'; +$VERSION = '3.43'; @ISA = ('Pod::Simple'); sub new { diff --git a/gnu/usr.bin/perl/cpan/Pod-Simple/lib/Pod/Simple/TiedOutFH.pm b/gnu/usr.bin/perl/cpan/Pod-Simple/lib/Pod/Simple/TiedOutFH.pm index 0dd12c412dd..af5e745a302 100644 --- a/gnu/usr.bin/perl/cpan/Pod-Simple/lib/Pod/Simple/TiedOutFH.pm +++ b/gnu/usr.bin/perl/cpan/Pod-Simple/lib/Pod/Simple/TiedOutFH.pm @@ -4,7 +4,7 @@ package Pod::Simple::TiedOutFH; use Symbol ('gensym'); use Carp (); use vars qw($VERSION ); -$VERSION = '3.40'; +$VERSION = '3.43'; #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ diff --git a/gnu/usr.bin/perl/cpan/Pod-Simple/lib/Pod/Simple/Transcode.pm b/gnu/usr.bin/perl/cpan/Pod-Simple/lib/Pod/Simple/Transcode.pm index eb127022827..fef5d17d45d 100644 --- a/gnu/usr.bin/perl/cpan/Pod-Simple/lib/Pod/Simple/Transcode.pm +++ b/gnu/usr.bin/perl/cpan/Pod-Simple/lib/Pod/Simple/Transcode.pm @@ -3,7 +3,7 @@ require 5; package Pod::Simple::Transcode; use strict; use vars qw($VERSION @ISA); -$VERSION = '3.40'; +$VERSION = '3.43'; BEGIN { if(defined &DEBUG) {;} # Okay diff --git a/gnu/usr.bin/perl/cpan/Pod-Simple/lib/Pod/Simple/TranscodeDumb.pm b/gnu/usr.bin/perl/cpan/Pod-Simple/lib/Pod/Simple/TranscodeDumb.pm index 2b675ccb787..776b0676459 100644 --- a/gnu/usr.bin/perl/cpan/Pod-Simple/lib/Pod/Simple/TranscodeDumb.pm +++ b/gnu/usr.bin/perl/cpan/Pod-Simple/lib/Pod/Simple/TranscodeDumb.pm @@ -5,7 +5,7 @@ require 5; package Pod::Simple::TranscodeDumb; use strict; use vars qw($VERSION %Supported); -$VERSION = '3.40'; +$VERSION = '3.43'; # This module basically pretends it knows how to transcode, except # only for null-transcodings! We use this when Encode isn't # available. diff --git a/gnu/usr.bin/perl/cpan/Pod-Simple/lib/Pod/Simple/TranscodeSmart.pm b/gnu/usr.bin/perl/cpan/Pod-Simple/lib/Pod/Simple/TranscodeSmart.pm index 99f55683ab3..f46d1f9d05a 100644 --- a/gnu/usr.bin/perl/cpan/Pod-Simple/lib/Pod/Simple/TranscodeSmart.pm +++ b/gnu/usr.bin/perl/cpan/Pod-Simple/lib/Pod/Simple/TranscodeSmart.pm @@ -9,7 +9,7 @@ use strict; use Pod::Simple; require Encode; use vars qw($VERSION ); -$VERSION = '3.40'; +$VERSION = '3.43'; sub is_dumb {0} sub is_smart {1} diff --git a/gnu/usr.bin/perl/cpan/Pod-Simple/lib/Pod/Simple/XHTML.pm b/gnu/usr.bin/perl/cpan/Pod-Simple/lib/Pod/Simple/XHTML.pm index b9c6269bf98..e8d7e111270 100644 --- a/gnu/usr.bin/perl/cpan/Pod-Simple/lib/Pod/Simple/XHTML.pm +++ b/gnu/usr.bin/perl/cpan/Pod-Simple/lib/Pod/Simple/XHTML.pm @@ -45,7 +45,7 @@ declare the output character set as UTF-8 before parsing, like so: package Pod::Simple::XHTML; use strict; use vars qw( $VERSION @ISA $HAS_HTML_ENTITIES ); -$VERSION = '3.40'; +$VERSION = '3.43'; use Pod::Simple::Methody (); @ISA = ('Pod::Simple::Methody'); @@ -400,6 +400,8 @@ sub start_head1 { $_[0]{'in_head'} = 1; $_[0]{htext} = ''; } sub start_head2 { $_[0]{'in_head'} = 2; $_[0]{htext} = ''; } sub start_head3 { $_[0]{'in_head'} = 3; $_[0]{htext} = ''; } sub start_head4 { $_[0]{'in_head'} = 4; $_[0]{htext} = ''; } +sub start_head5 { $_[0]{'in_head'} = 5; $_[0]{htext} = ''; } +sub start_head6 { $_[0]{'in_head'} = 6; $_[0]{htext} = ''; } sub start_item_number { $_[0]{'scratch'} = "\n" if ($_[0]{'in_li'}->[-1] && pop @{$_[0]{'in_li'}}); @@ -483,6 +485,8 @@ sub end_head1 { shift->_end_head(@_); } sub end_head2 { shift->_end_head(@_); } sub end_head3 { shift->_end_head(@_); } sub end_head4 { shift->_end_head(@_); } +sub end_head5 { shift->_end_head(@_); } +sub end_head6 { shift->_end_head(@_); } sub end_item_bullet { $_[0]{'scratch'} .= '

'; $_[0]->emit } sub end_item_number { $_[0]{'scratch'} .= '

'; $_[0]->emit } diff --git a/gnu/usr.bin/perl/cpan/Pod-Simple/lib/Pod/Simple/XMLOutStream.pm b/gnu/usr.bin/perl/cpan/Pod-Simple/lib/Pod/Simple/XMLOutStream.pm index cb818a17409..74d8c16b7b6 100644 --- a/gnu/usr.bin/perl/cpan/Pod-Simple/lib/Pod/Simple/XMLOutStream.pm +++ b/gnu/usr.bin/perl/cpan/Pod-Simple/lib/Pod/Simple/XMLOutStream.pm @@ -5,7 +5,7 @@ use strict; use Carp (); use Pod::Simple (); use vars qw( $ATTR_PAD @ISA $VERSION $SORT_ATTRS); -$VERSION = '3.40'; +$VERSION = '3.43'; BEGIN { @ISA = ('Pod::Simple'); *DEBUG = \&Pod::Simple::DEBUG unless defined &DEBUG; diff --git a/gnu/usr.bin/perl/cpan/Pod-Simple/t/basic.t b/gnu/usr.bin/perl/cpan/Pod-Simple/t/basic.t index 157a640c9ca..9b1cecfd337 100755 --- a/gnu/usr.bin/perl/cpan/Pod-Simple/t/basic.t +++ b/gnu/usr.bin/perl/cpan/Pod-Simple/t/basic.t @@ -6,6 +6,7 @@ BEGIN { } use strict; +use warnings; use Test; BEGIN { plan tests => 31 }; @@ -26,7 +27,12 @@ require Pod::Simple::DumpAsXML; ok 1; require Pod::Simple::XMLOutStream; ok 1; -sub e ($$) { Pod::Simple::DumpAsXML->_duo(@_) } +BEGIN { + require FindBin; + unshift @INC, $FindBin::Bin . '/lib'; + require helpers; + helpers->import; +} print "# Simple identity tests...\n"; diff --git a/gnu/usr.bin/perl/cpan/Pod-Simple/t/corpus.t b/gnu/usr.bin/perl/cpan/Pod-Simple/t/corpus.t index 4075f91fd9b..013ee3fcb31 100755 --- a/gnu/usr.bin/perl/cpan/Pod-Simple/t/corpus.t +++ b/gnu/usr.bin/perl/cpan/Pod-Simple/t/corpus.t @@ -22,6 +22,7 @@ use Test qw(plan ok skip); use File::Spec; #use utf8; use strict; +use warnings; my(@testfiles, %xmlfiles, %wouldxml); #use Pod::Simple::Debug (10); BEGIN { diff --git a/gnu/usr.bin/perl/cpan/Pod-Simple/t/enc-chars.t b/gnu/usr.bin/perl/cpan/Pod-Simple/t/enc-chars.t index 1455ae6417d..a648b9e76e4 100644 --- a/gnu/usr.bin/perl/cpan/Pod-Simple/t/enc-chars.t +++ b/gnu/usr.bin/perl/cpan/Pod-Simple/t/enc-chars.t @@ -16,6 +16,7 @@ BEGIN { } use strict; +use warnings; use Test; BEGIN { plan tests => 5 }; diff --git a/gnu/usr.bin/perl/cpan/Pod-Simple/t/encod04.t b/gnu/usr.bin/perl/cpan/Pod-Simple/t/encod04.t index 8f41f98a6cc..6a821328ea5 100644 --- a/gnu/usr.bin/perl/cpan/Pod-Simple/t/encod04.t +++ b/gnu/usr.bin/perl/cpan/Pod-Simple/t/encod04.t @@ -10,6 +10,7 @@ BEGIN { } use strict; +use warnings; use Test; BEGIN { plan tests => 6, todo => []; diff --git a/gnu/usr.bin/perl/cpan/Pod-Simple/t/html01.t b/gnu/usr.bin/perl/cpan/Pod-Simple/t/html01.t index 8d8e528320d..a0e1a55a768 100755 --- a/gnu/usr.bin/perl/cpan/Pod-Simple/t/html01.t +++ b/gnu/usr.bin/perl/cpan/Pod-Simple/t/html01.t @@ -8,14 +8,15 @@ BEGIN { } use strict; +use warnings; use Test; -BEGIN { plan tests => 14 }; +BEGIN { plan tests => 16 }; #use Pod::Simple::Debug (10); use Pod::Simple::HTML; -sub x ($;&) { +sub x { my $code = $_[1]; Pod::Simple::HTML->_out( sub{ $_[0]->bare_output(1); $code->($_[0]) if $code }, @@ -78,6 +79,18 @@ ok(x( "heading building" ); +ok(x( +'=head5 The number of the heading shall be five') + => q{/\s*
]+>The\s+number\s+of\s+the\s+heading\s+shall\s+be\s+five
\s*$/}, + "heading building" +); + +ok(x( +'=head6 The sixth a heading is the perfect heading') + => q{/\s*
]+>The\s+sixth\s+a\s+heading\s+is\s+the\s+perfect\s+heading
\s*$/}, + "heading building" +); + ok(x( '=head2 Yada Yada Operator X<...> X<... operator> X') diff --git a/gnu/usr.bin/perl/cpan/Pod-Simple/t/render.t b/gnu/usr.bin/perl/cpan/Pod-Simple/t/render.t index dd0ee2b6d03..c8ddf64383c 100755 --- a/gnu/usr.bin/perl/cpan/Pod-Simple/t/render.t +++ b/gnu/usr.bin/perl/cpan/Pod-Simple/t/render.t @@ -8,6 +8,7 @@ BEGIN { } use strict; +use warnings; use Test; BEGIN { plan tests => 26 }; use Pod::Simple::TextContent; diff --git a/gnu/usr.bin/perl/cpan/Pod-Simple/t/search10.t b/gnu/usr.bin/perl/cpan/Pod-Simple/t/search10.t index 96ac7fd49f1..fd05f46272d 100755 --- a/gnu/usr.bin/perl/cpan/Pod-Simple/t/search10.t +++ b/gnu/usr.bin/perl/cpan/Pod-Simple/t/search10.t @@ -8,6 +8,7 @@ BEGIN { # Time-stamp: "2004-05-23 22:38:58 ADT" use strict; +use warnings; #sub Pod::Simple::Search::DEBUG () {5}; diff --git a/gnu/usr.bin/perl/cpan/Pod-Simple/t/search12.t b/gnu/usr.bin/perl/cpan/Pod-Simple/t/search12.t index 5da1859bdba..31596cf2fa0 100755 --- a/gnu/usr.bin/perl/cpan/Pod-Simple/t/search12.t +++ b/gnu/usr.bin/perl/cpan/Pod-Simple/t/search12.t @@ -6,6 +6,7 @@ BEGIN { } use strict; +use warnings; use Pod::Simple::Search; use Test; BEGIN { plan tests => 11 } diff --git a/gnu/usr.bin/perl/cpan/Pod-Simple/t/search20.t b/gnu/usr.bin/perl/cpan/Pod-Simple/t/search20.t index 1b17c3b021a..d9c0699c45f 100755 --- a/gnu/usr.bin/perl/cpan/Pod-Simple/t/search20.t +++ b/gnu/usr.bin/perl/cpan/Pod-Simple/t/search20.t @@ -6,6 +6,7 @@ BEGIN { } use strict; +use warnings; use Pod::Simple::Search; use Test; BEGIN { plan tests => 11 } diff --git a/gnu/usr.bin/perl/cpan/Pod-Simple/t/search22.t b/gnu/usr.bin/perl/cpan/Pod-Simple/t/search22.t index 6fb498a3318..99d9acffca9 100755 --- a/gnu/usr.bin/perl/cpan/Pod-Simple/t/search22.t +++ b/gnu/usr.bin/perl/cpan/Pod-Simple/t/search22.t @@ -6,6 +6,7 @@ BEGIN { } use strict; +use warnings; use Pod::Simple::Search; use Test; BEGIN { plan tests => 15 } diff --git a/gnu/usr.bin/perl/cpan/Pod-Simple/t/search26.t b/gnu/usr.bin/perl/cpan/Pod-Simple/t/search26.t index 5910291a3de..03e1afb9572 100755 --- a/gnu/usr.bin/perl/cpan/Pod-Simple/t/search26.t +++ b/gnu/usr.bin/perl/cpan/Pod-Simple/t/search26.t @@ -6,6 +6,7 @@ BEGIN { } use strict; +use warnings; use Pod::Simple::Search; use Test; BEGIN { plan tests => 5 } diff --git a/gnu/usr.bin/perl/cpan/Pod-Simple/t/search28.t b/gnu/usr.bin/perl/cpan/Pod-Simple/t/search28.t index 05606a7b1ba..680d9cd7c0a 100755 --- a/gnu/usr.bin/perl/cpan/Pod-Simple/t/search28.t +++ b/gnu/usr.bin/perl/cpan/Pod-Simple/t/search28.t @@ -6,6 +6,7 @@ BEGIN { } use strict; +use warnings; use Pod::Simple::Search; use Test; BEGIN { plan tests => 4 } diff --git a/gnu/usr.bin/perl/cpan/Pod-Simple/t/search50.t b/gnu/usr.bin/perl/cpan/Pod-Simple/t/search50.t index 0dc9d75a296..5e9b26e1866 100755 --- a/gnu/usr.bin/perl/cpan/Pod-Simple/t/search50.t +++ b/gnu/usr.bin/perl/cpan/Pod-Simple/t/search50.t @@ -6,6 +6,7 @@ BEGIN { } } use strict; +use warnings; #sub Pod::Simple::Search::DEBUG () {5}; diff --git a/gnu/usr.bin/perl/cpan/Pod-Simple/t/xhtml01.t b/gnu/usr.bin/perl/cpan/Pod-Simple/t/xhtml01.t index 7ee08652162..72d3930b432 100755 --- a/gnu/usr.bin/perl/cpan/Pod-Simple/t/xhtml01.t +++ b/gnu/usr.bin/perl/cpan/Pod-Simple/t/xhtml01.t @@ -7,8 +7,9 @@ BEGIN { } use strict; +use warnings; use lib '../lib'; -use Test::More tests => 62; +use Test::More tests => 64; #use Test::More 'no_plan'; use_ok('Pod::Simple::XHTML') or exit; @@ -51,7 +52,15 @@ initialize($parser, $results); $parser->parse_string_document( "=head4 Zort & Zog!" ); is($results, qq{

Zort & Zog!

\n\n}, "head4 level output"); -sub x ($;&) { +initialize($parser, $results); +$parser->parse_string_document( "=head5 I think so Brain, but..." ); +is($results, qq{
I think so Brain, but...
\n\n}, "head5 level output"); + +initialize($parser, $results); +$parser->parse_string_document( "=head6 Narf!" ); +is($results, qq{
Narf!
\n\n}, "head6 level output"); + +sub x { my $code = $_[1]; Pod::Simple::XHTML->_out( sub { $code->($_[0]) if $code }, diff --git a/gnu/usr.bin/perl/cpan/Pod-Usage/lib/Pod/Usage.pm b/gnu/usr.bin/perl/cpan/Pod-Usage/lib/Pod/Usage.pm index 8f7985040f3..c290f2baf1e 100644 --- a/gnu/usr.bin/perl/cpan/Pod-Usage/lib/Pod/Usage.pm +++ b/gnu/usr.bin/perl/cpan/Pod-Usage/lib/Pod/Usage.pm @@ -9,19 +9,19 @@ ############################################################################# package Pod::Usage; -use strict; -use vars qw($VERSION @ISA @EXPORT); -$VERSION = '1.69'; ## Current version of this package +use strict; require 5.006; ## requires this Perl version or later -#use diagnostics; use Carp; use Config; use Exporter; use File::Spec; -@EXPORT = qw(&pod2usage); +our $VERSION = '2.01'; + +our @EXPORT = qw(&pod2usage); +our @ISA; BEGIN { $Pod::Usage::Formatter ||= 'Pod::Text'; eval "require $Pod::Usage::Formatter"; @@ -103,13 +103,13 @@ sub pod2usage { my @paths = (ref $pathspec) ? @$pathspec : split($pathsep, $pathspec); for my $dirname (@paths) { - $_ = File::Spec->catfile($dirname, $basename) if length; + $_ = length($dirname) ? File::Spec->catfile($dirname, $basename) : $basename; last if (-e $_) && ($opts{'-input'} = $_); } } ## Now create a pod reader and constrain it to the desired sections. - my $parser = new Pod::Usage(USAGE_OPTIONS => \%opts); + my $parser = Pod::Usage->new(USAGE_OPTIONS => \%opts); if ($opts{'-verbose'} == 0) { $parser->select('(?:SYNOPSIS|USAGE)\s*'); } @@ -130,8 +130,8 @@ sub pod2usage { ## Check for perldoc my $progpath = $opts{'-perldoc'} ? $opts{'-perldoc'} : - File::Spec->catfile($Config{scriptdirexp} - || $Config{scriptdir}, 'perldoc'); + File::Spec->catfile($Config{scriptdirexp} || $Config{scriptdir}, + 'perldoc'); my $version = sprintf("%vd",$^V); if ($Config{versiononly} and $Config{startperl} =~ /\Q$version\E$/ ) { @@ -159,9 +159,17 @@ sub pod2usage { push @perldoc_cmd, ('-F', $f); unshift @perldoc_cmd, $opts{'-perlcmd'} if $opts{'-perlcmd'}; system(@perldoc_cmd); + # RT16091: fall back to more if perldoc failed if($?) { - # RT16091: fall back to more if perldoc failed - system(($Config{pager} || $ENV{PAGER} || '/bin/more'), $1); + # RT131844: prefer PAGER env + my $pager = $ENV{PAGER} || $Config{pager}; + if(defined($pager) && length($pager)) { + my $cmd = $pager . ' ' . ($^O =~ /win/i ? qq("$f") : quotemeta($f)); + system($cmd); + } else { + # the most humble fallback; should work (at least) on *nix and Win + system('more', $f); + } } } else { croak "Unspecified input file or insecure argument.\n"; @@ -275,7 +283,12 @@ sub select { sub seq_i { return $_[1] } # Override Pod::Text->cmd_i to return just "arg", not "*arg*". # newer version based on Pod::Simple -sub cmd_i { return $_[2] } +sub cmd_i { + my $self = shift; + # RT121489: highlighting should be there with Termcap + return $self->SUPER::cmd_i(@_) if $self->isa('Pod::Text::Termcap'); + return $_[1]; +} # This overrides the Pod::Text method to do something very akin to what # Pod::Select did as well as the work done below by preprocess_paragraph. @@ -373,13 +386,15 @@ sub preprocess_paragraph { __END__ +=for stopwords pod2usage verboseness downcased MSWin32 Marek Rouchal Christiansen ATOOMIC rjbs McDougall + =head1 NAME -Pod::Usage - print a usage message from embedded pod documentation +Pod::Usage - extracts POD documentation and shows usage information =head1 SYNOPSIS - use Pod::Usage + use Pod::Usage; my $message_text = "This text precedes the usage message."; my $exit_status = 2; ## The exit status to use @@ -391,13 +406,13 @@ Pod::Usage - print a usage message from embedded pod documentation pod2usage($exit_status); pod2usage( { -message => $message_text , - -exitval => $exit_status , - -verbose => $verbose_level, + -exitval => $exit_status , + -verbose => $verbose_level, -output => $filehandle } ); pod2usage( -msg => $message_text , - -exitval => $exit_status , - -verbose => $verbose_level, + -exitval => $exit_status , + -verbose => $verbose_level, -output => $filehandle ); pod2usage( -verbose => 2, @@ -443,39 +458,39 @@ keys: =item C<-msg> I The text of a message to print immediately prior to printing the -program's usage message. +program's usage message. =item C<-exitval> I The desired exit status to pass to the B function. -This should be an integer, or else the string "NOEXIT" to +This should be an integer, or else the string C to indicate that control should simply be returned without terminating the invoking process. =item C<-verbose> I The desired level of "verboseness" to use when printing the usage message. -If the value is 0, then only the "SYNOPSIS" section of the pod documentation -is printed. If the value is 1, then the "SYNOPSIS" section, along with any -section entitled "OPTIONS", "ARGUMENTS", or "OPTIONS AND ARGUMENTS" is -printed. If the corresponding value is 2 or more then the entire manpage is -printed, using L if available; otherwise L is used for -the formatting. For better readability, the all-capital headings are -downcased, e.g. C =E C. +If the value is 0, then only the "SYNOPSIS" and/or "USAGE" sections of the +pod documentation are printed. If the value is 1, then the "SYNOPSIS" and/or +"USAGE" sections, along with any section entitled "OPTIONS", "ARGUMENTS", or +"OPTIONS AND ARGUMENTS" is printed. If the corresponding value is 2 or more +then the entire manpage is printed, using L if available; otherwise +L is used for the formatting. For better readability, the +all-capital headings are downcased, e.g. C =E C. The special verbosity level 99 requires to also specify the -sections parameter; then these sections are extracted and printed. =item C<-sections> I -There are two ways to specify the selection. Either a string (scalar) +There are two ways to specify the selection. Either a string (scalar) representing a selection regexp for sections to be printed when -verbose is set to 99, e.g. "NAME|SYNOPSIS|DESCRIPTION|VERSION" With the above regexp all content following (and including) any of the -given C<=head1> headings will be shown. It is possible to restrict the +given C<=head1> headings will be shown. It is possible to restrict the output to particular subsections only, e.g.: "DESCRIPTION/Algorithm" @@ -484,7 +499,7 @@ This will output only the C<=head2 Algorithm> heading and content within the C<=head1 DESCRIPTION> section. The regexp binding is stronger than the section separator, such that e.g.: - "DESCRIPTION|OPTIONS|ENVIORNMENT/Caveats" + "DESCRIPTION|OPTIONS|ENVIRONMENT/Caveats" will print any C<=head2 Caveats> section (only) within any of the three C<=head1> sections. @@ -494,7 +509,7 @@ Alternatively, an array reference of section specifications can be used: pod2usage(-verbose => 99, -sections => [ qw(DESCRIPTION DESCRIPTION/Introduction) ] ); -This will print only the content of C<=head1 DESCRIPTION> and the +This will print only the content of C<=head1 DESCRIPTION> and the C<=head2 Introduction> sections, but no other C<=head2>, and no other C<=head1> either. @@ -528,17 +543,16 @@ MSWin32 and DOS). =item C<-noperldoc> -By default, Pod::Usage will call L when -verbose >= 2 is -specified. This does not work well e.g. if the script was packed -with L. The -noperldoc option suppresses the external call to -L and uses the simple text formatter (L) to -output the POD. +By default, Pod::Usage will call L when -verbose >= 2 is specified. +This does not work well e.g. if the script was packed with L. This option +suppresses the external call to L and uses the simple text formatter +(L) to output the POD. =item C<-perlcmd> By default, Pod::Usage will call L when -verbose >= 2 is specified. In case of special or unusual Perl installations, -the -perlcmd option may be used to supply the path to a L executable +this option may be used to supply the path to a L executable which should run L. =item C<-perldoc> I @@ -551,7 +565,7 @@ the correct path to L. =item C<-perldocopt> I By default, Pod::Usage will call L when -verbose >= 2 is specified. -The -perldocopt option may be used to supply options to L. The +This option may be used to supply options to L. The string may contain several, space-separated options. =back @@ -659,7 +673,7 @@ more verbose description of program usage in this case. =back -B doesn't force the above conventions upon you, but it will +B does not force the above conventions upon you, but it will use them by default if you don't expressly tell it to do otherwise. The ability of B to accept a single number or a string makes it convenient to use as an innocent looking error message handling function: @@ -848,7 +862,7 @@ things: By default, B will use C<$0> as the path to the pod input file. Unfortunately, not all systems on which Perl runs will set C<$0> -properly (although if C<$0> isn't found, B will search +properly (although if C<$0> is not found, B will search C<$ENV{PATH}> or else the list specified by the C<-pathlist> option). If this is the case for your system, you may need to explicitly specify the path to the pod docs for the invoking script using something @@ -865,23 +879,45 @@ the script: use FindBin; pod2usage(-input => $FindBin::Bin . "/" . $FindBin::Script); -=head1 AUTHOR +=head1 SUPPORT -Please report bugs using L. +This module is managed in a GitHub repository, +L Feel free to fork and contribute, or +to clone and send patches! + +Please use L to file a bug +report. The previous ticketing system, +L, is deprecated for +this package. + +More general questions or discussion about POD should be sent to the +C mail list. Send an empty email to +C to subscribe. + +=head1 AUTHOR Marek Rouchal Emarekr@cpan.orgE +Nicolas R Enicolas@atoomic.orgE + Brad Appleton Ebradapp@enteract.comE Based on code for B written by Tom Christiansen Etchrist@mox.perl.comE +=head1 LICENSE + +Pod::Usage (the distribution) is licensed under the same terms as Perl. + =head1 ACKNOWLEDGMENTS +Nicolas R (ATOOMIC) for setting up the Github repo and modernizing this +package. + rjbs for refactoring Pod::Usage to not use Pod::Parser any more. -Steven McDougall Eswmcd@world.std.comE for his help and patience -with re-writing this manpage. +Steven McDougall Eswmcd@world.std.comE for his help and patience with +re-writing this manpage. =head1 SEE ALSO diff --git a/gnu/usr.bin/perl/cpan/Pod-Usage/scripts/pod2usage.PL b/gnu/usr.bin/perl/cpan/Pod-Usage/scripts/pod2usage.PL index 46617186d02..573559da93e 100644 --- a/gnu/usr.bin/perl/cpan/Pod-Usage/scripts/pod2usage.PL +++ b/gnu/usr.bin/perl/cpan/Pod-Usage/scripts/pod2usage.PL @@ -1,5 +1,7 @@ #!/usr/local/bin/perl +use strict; +use warnings; use Config; use File::Basename qw(&basename &dirname); use Cwd; @@ -13,19 +15,19 @@ use Cwd; # This forces PL files to create target in same directory as PL file. # This is so that make depend always knows where to find PL derivatives. -$origdir = cwd; -chdir(dirname($0)); -$file = basename($0, '.PL'); +my $origdir = cwd; +chdir( dirname($0) ); +my $file = basename( $0, '.PL' ); $file .= '.com' if $^O eq 'VMS'; -open OUT,">$file" or die "Can't create $file: $!"; +open my $OUT, '>', $file or die "Can't create $file: $!"; print "Extracting $file (with variable substitutions)\n"; # In this section, perl variables will be expanded during extraction. # You can use $Config{...} to use Configure variables. -print OUT <<"!GROK!THIS!"; +print {$OUT} <<"!GROK!THIS!"; $Config{'startperl'} eval 'exec perl -S \$0 "\$@"' if 0; @@ -33,7 +35,7 @@ $Config{'startperl'} # In the following, perl variables are not expanded during extraction. -print OUT <<'!NO!SUBS!'; +print {$OUT} <<'!NO!SUBS!'; ############################################################################# # pod2usage -- command to print usage messages from embedded pod docs @@ -120,7 +122,9 @@ This option assumes that the formatter (see above) understands the option =item I The pathname of a file containing pod documentation to be output in -usage message format (defaults to standard input). +usage message format. If omitted, standard input is read - but the +output is then formatted with L only - unless a specific +formatter has been specified with B<-formatter>. =back @@ -135,7 +139,8 @@ module. Please see L. =head1 SEE ALSO -L, L +L, L, L, L, +L =head1 AUTHOR @@ -174,14 +179,13 @@ pod2usage(VERBOSE => 2) if ($options{man}); ## Dont default to STDIN if connected to a terminal pod2usage(2) if ((@ARGV == 0) && (-t STDIN)); -@ARGV = ('-') unless (@ARGV); if (@ARGV > 1) { print STDERR "pod2usage: Too many filenames given\n\n"; pod2usage(2); } my %usage = (); -$usage{-input} = shift(@ARGV); +$usage{-input} = shift(@ARGV) || \*STDIN; $usage{-exitval} = $options{'exit'} if (defined $options{'exit'}); $usage{-output} = $options{'output'} if (defined $options{'output'}); $usage{-verbose} = $options{'verbose'} if (defined $options{'verbose'}); @@ -193,7 +197,7 @@ pod2usage(\%usage); !NO!SUBS! -close OUT or die "Can't close $file: $!"; -chmod 0755, $file or die "Can't reset permissions for $file: $!\n"; +close($OUT) or die "Can't close $file: $!"; +chmod( 0755, $file ) or die "Can't reset permissions for $file: $!\n"; exec("$Config{'eunicefix'} $file") if $Config{'eunicefix'} ne ':'; -chdir $origdir; +chdir($origdir); diff --git a/gnu/usr.bin/perl/cpan/Pod-Usage/t/pod/p2u_data.pl b/gnu/usr.bin/perl/cpan/Pod-Usage/t/pod/p2u_data.pl index ec0e3a7e50f..4569043622e 100644 --- a/gnu/usr.bin/perl/cpan/Pod-Usage/t/pod/p2u_data.pl +++ b/gnu/usr.bin/perl/cpan/Pod-Usage/t/pod/p2u_data.pl @@ -1,4 +1,7 @@ use Pod::Usage; +use strict; +use warnings; + pod2usage(-verbose => 2, -exit => 17, -input => \*DATA); __DATA__ diff --git a/gnu/usr.bin/perl/cpan/Pod-Usage/t/pod/pod2usage.t b/gnu/usr.bin/perl/cpan/Pod-Usage/t/pod/pod2usage.t index cf2c31b83ff..3ee74503988 100644 --- a/gnu/usr.bin/perl/cpan/Pod-Usage/t/pod/pod2usage.t +++ b/gnu/usr.bin/perl/cpan/Pod-Usage/t/pod/pod2usage.t @@ -1,9 +1,12 @@ +use strict; +use warnings; + BEGIN { use File::Basename; my $THISDIR = dirname $0; unshift @INC, $THISDIR; require "testp2pt.pl"; - import TestPodIncPlainText; + TestPodIncPlainText->import; } my %options = map { $_ => 1 } @ARGV; ## convert cmdline to options-hash diff --git a/gnu/usr.bin/perl/cpan/Pod-Usage/t/pod/pod2usage.xr b/gnu/usr.bin/perl/cpan/Pod-Usage/t/pod/pod2usage.xr index 7460a6da54e..43e811efe85 100644 --- a/gnu/usr.bin/perl/cpan/Pod-Usage/t/pod/pod2usage.xr +++ b/gnu/usr.bin/perl/cpan/Pod-Usage/t/pod/pod2usage.xr @@ -42,7 +42,10 @@ OPTIONS AND ARGUMENTS the option "utf8". It turns on generation of utf8 output. *file* The pathname of a file containing pod documentation to be output - in usage message format (defaults to standard input). + in usage message format. If omitted, standard input is read - + but the output is then formatted with the Pod::Text manpage only + - unless a specific formatter has been specified with + -formatter. DESCRIPTION pod2usage will read the given input file looking for pod documentation @@ -53,7 +56,8 @@ DESCRIPTION Please see the pod2usage() entry in the Pod::Usage manpage. SEE ALSO - the Pod::Usage manpage, the pod2text(1) manpage + the Pod::Usage manpage, the pod2text manpage, the Pod::Text manpage, the + Pod::Text::Termcap manpage, the perldoc manpage AUTHOR Please report bugs using http://rt.cpan.org. diff --git a/gnu/usr.bin/perl/cpan/Pod-Usage/t/pod/pod2usage2.t b/gnu/usr.bin/perl/cpan/Pod-Usage/t/pod/pod2usage2.t index 7eb54022e90..8616422c94e 100644 --- a/gnu/usr.bin/perl/cpan/Pod-Usage/t/pod/pod2usage2.t +++ b/gnu/usr.bin/perl/cpan/Pod-Usage/t/pod/pod2usage2.t @@ -1,14 +1,17 @@ #!/usr/bin/perl -w -use Test::More; use strict; +use warnings; +use Test::More; +use File::Basename qw(fileparse); +use File::Spec; BEGIN { if ($^O eq 'MSWin32' || $^O eq 'VMS') { plan skip_all => "Not portable on Win32 or VMS\n"; } else { - plan tests => 33; + plan tests => 42; } use_ok ("Pod::Usage"); } @@ -16,24 +19,32 @@ BEGIN { sub getoutput { my ($code) = @_; - my $pid = open(TEST_IN, "-|"); - unless(defined $pid) { - die "Cannot fork: $!"; - } - if($pid) { + my $pid = open(my $in, "-|"); + die "Cannot fork: $!" unless defined $pid; + if ($pid) { # parent - my @out = ; - close(TEST_IN); + my @out = <$in>; + close($in); + my $exit = $?>>8; s/^/#/ for @out; + local $" = ""; + print "#EXIT=$exit OUTPUT=+++#@out#+++\n"; - return($exit, join("",@out)); + waitpid( $pid, 1 ); + + return ($exit, join("", @out) ); } # child - open(STDERR, ">&STDOUT"); + open (STDERR, ">&STDOUT"); + Test::More->builder->no_ending(1); - &$code; + local $SIG{ALRM} = sub { die "Alarm reached" }; + alarm(600); + + # this could hang + $code->(); print "--NORMAL-RETURN--\n"; exit 0; } @@ -69,17 +80,17 @@ ok (compare ($text, <<'EOT'), "Output test pod2usage (-message => '...', -verbos #You naughty person, what did you say? # Usage: # frobnicate [ -r | --recursive ] [ -f | --force ] file ... -# +# # Options: # -r | --recursive # Run recursively. -# +# # -f | --force # Just do it! -# +# # -n number # Specify number of frobs, default is 42. -# +# EOT ($exit, $text) = getoutput( sub { pod2usage( @@ -214,7 +225,7 @@ is ($exit, 0, "Exit status pod2usage with USAGE and verbose=99") ok (compare ($text, <<'EOT'), "Output test pod2usage with USAGE and verbose=99") or diag "Got:\n$text\n"; #Usage: # This is a test for CPAN#33020 -# +# EOT # test with self @@ -226,7 +237,7 @@ $text =~ s{#Using.*/blib.*\n}{}; # older blib's emit something to STDERR is ($exit, 0, "Exit status pod2usage with self"); ok (compare ($text, <<'EOT'), "Output test pod2usage with self") or diag "Got:\n$text\n"; #Usage: -# use Pod::Usage +# use Pod::Usage; # # my $message_text = "This text precedes the usage message."; # my $exit_status = 2; ## The exit status to use @@ -238,13 +249,13 @@ ok (compare ($text, <<'EOT'), "Output test pod2usage with self") or diag "Got:\n # pod2usage($exit_status); # # pod2usage( { -message => $message_text , -# -exitval => $exit_status , -# -verbose => $verbose_level, +# -exitval => $exit_status , +# -verbose => $verbose_level, # -output => $filehandle } ); # # pod2usage( -msg => $message_text , -# -exitval => $exit_status , -# -verbose => $verbose_level, +# -exitval => $exit_status , +# -verbose => $verbose_level, # -output => $filehandle ); # # pod2usage( -verbose => 2, @@ -323,6 +334,58 @@ ok (compare ($text, <<'EOT'), "Output test pod2usage with subheadings in OPTIONS # from the values by whitespace or the "=" character. # EOT + +# test various use cases of calling pod2usage to increase coverage +($exit, $text) = getoutput( sub { + pod2usage({ -input => $pod_file2, + -exitval => 3, -verbose => 0 }) } ); +is ($exit, 3, "Exit status pod2usage with hash options"); +like ($text, qr/^\s*$/s, "Output test pod2usage with hash options is empty") or diag "Got:\n$text\n"; + +# call with single string option +($exit, $text) = getoutput( sub { + pod2usage('Just print this') } ); +is ($exit, 2, "Exit status pod2usage with single string option"); +like ($text, qr/^#Just print this/, "Output test pod2usage with single string options has first line") or diag "Got:\n$text\n"; + +# call with search path and relative file name +my ($file, $dir) = fileparse($0); +($exit, $text) = getoutput( sub { + pod2usage({ -input => $file, -pathlist => [ $dir ], -exit => 0, -verbose => 2 } ) } ); +is ($exit, 0, "Exit status pod2usage with relative path"); +like ($text, qr/frobnicate - do what I mean/, "Output test pod2usage with relative path works OK") or diag "Got:\n$text\n"; + +# trigger specific perldoc case +# ...and one coverage line +{ no warnings; + *Pod::Usage::initialize = sub { 1; }; +} + +SKIP: { + my $perldoc = $^X . 'doc'; + skip "Missing perldoc binary", 2 unless -x $perldoc; + + my $out = qx[$perldoc 2>&1] || ''; + skip "Need perl-doc package", 2 if $out =~ qr[You need to install the perl-doc package to use this program]; + + ($exit, $text) = getoutput( sub { + require Pod::Perldoc; + my $devnull = File::Spec->devnull(); + open(SAVE_STDOUT, '>&', \*STDOUT); + open(STDOUT, '>', $devnull); + pod2usage({ -verbose => 2, -input => $0, -output => \*STDOUT, -exit => 0, -message => 'Special perldoc case', -perldocopt => '-i' }); + open(STDOUT, '>&', \*SAVE_STDOUT); + } ); + is ($exit, 0, "Exit status pod2usage with special perldoc case"); + # output went to devnull + like ($text, qr/^\s*$/s, "Output test pod2usage with special perldoc case") or diag "Got:\n$text\n"; + +} + +# bad regexp syntax +($exit, $text) = getoutput( sub { pod2usage( -verbose => 99, -sections => 'DESCRIPTION{BLAH') } ); +like ($text, qr/Bad regular expression/, "Output test pod2usage with bad section regexp"); + } # end SKIP __END__ diff --git a/gnu/usr.bin/perl/cpan/Pod-Usage/t/pod/testp2pt.pl b/gnu/usr.bin/perl/cpan/Pod-Usage/t/pod/testp2pt.pl index 720575336c0..f33fd4ae557 100644 --- a/gnu/usr.bin/perl/cpan/Pod-Usage/t/pod/testp2pt.pl +++ b/gnu/usr.bin/perl/cpan/Pod-Usage/t/pod/testp2pt.pl @@ -10,9 +10,10 @@ BEGIN { my $THISDIR = abs_path(dirname $0); unshift @INC, $THISDIR; require "testcmp.pl"; - import TestCompare; + TestCompare->import; + # RT#130418: previous use of dirname() was failing on VMS $PARENTDIR = File::Spec->catdir($THISDIR, File::Spec->updir()); - push @INC, map { File::Spec->catfile($_, 'lib') } ($PARENTDIR, $THISDIR); + push @INC, map { File::Spec->catdir($_, 'lib') } ($PARENTDIR, $THISDIR); } #use strict; @@ -27,8 +28,8 @@ $MYPKG = eval { (caller)[0] }; @EXPORT = qw(&testpodplaintext); BEGIN { # we want this for testing only - unshift(@INC, File::Spec->catfile($PARENTDIR, 'inc')); -print "INC=@INC\n"; + unshift(@INC, File::Spec->catdir($PARENTDIR, 'inc')); + #print "INC=@INC\n"; require Pod::PlainText; @ISA = qw( Pod::PlainText ); @@ -39,7 +40,7 @@ print "INC=@INC\n"; ## reproducible results between environments @ENV{qw(TERMCAP COLUMNS)} = ('co=76:do=^J', 76); -sub catfile(@) { File::Spec->catfile(@_); } +sub catdir(@) { File::Spec->catdir(@_); } my $INSTDIR = abs_path(dirname $0); $INSTDIR = VMS::Filespec::unixpath($INSTDIR) if $^O eq 'VMS'; @@ -48,15 +49,15 @@ $INSTDIR =~ s#:$## if $^O eq 'MacOS'; $INSTDIR = (dirname $INSTDIR) if (basename($INSTDIR) eq 'pod'); $INSTDIR =~ s#:$## if $^O eq 'MacOS'; $INSTDIR = (dirname $INSTDIR) if (basename($INSTDIR) eq 't'); -my @PODINCDIRS = ( catfile($INSTDIR, 'lib', 'Pod'), - catfile($INSTDIR, 'scripts'), - catfile($INSTDIR, 'pod'), - catfile($INSTDIR, 't', 'pod') +my @PODINCDIRS = ( catdir($INSTDIR, 'lib', 'Pod'), + catdir($INSTDIR, 'scripts'), + catdir($INSTDIR, 'pod'), + catdir($INSTDIR, 't', 'pod') ); # FIXME - we should make the core capable of finding utilities built in # locations in ext. -push @PODINCDIRS, catfile((File::Spec->updir()) x 2, 'pod') if $ENV{PERL_CORE}; +push @PODINCDIRS, catdir((File::Spec->updir()) x 2, 'pod') if $ENV{PERL_CORE}; ## Find the path to the file to =include sub findinclude { @@ -74,7 +75,7 @@ sub findinclude { my @podincdirs = ($thispoddir, $parentdir, @PODINCDIRS); for (@podincdirs) { - my $incfile = catfile($_, $incname); + my $incfile = File::Spec->catfile($_, $incname); return $incfile if (-r $incfile); } warn("*** Can't find =include file $incname in @podincdirs\n"); diff --git a/gnu/usr.bin/perl/cpan/Scalar-List-Utils/ListUtil.xs b/gnu/usr.bin/perl/cpan/Scalar-List-Utils/ListUtil.xs index 5bccc88444d..16a34ec748f 100644 --- a/gnu/usr.bin/perl/cpan/Scalar-List-Utils/ListUtil.xs +++ b/gnu/usr.bin/perl/cpan/Scalar-List-Utils/ListUtil.xs @@ -28,7 +28,7 @@ #if defined(USE_LONG_DOUBLE) && LDBL_MANT_DIG == 106 # define NV_IS_DOUBLEDOUBLE -#endif +#endif #ifndef PERL_VERSION_DECIMAL # define PERL_VERSION_DECIMAL(r,v,s) (r*1000000 + v*1000 + s) @@ -88,7 +88,7 @@ #define sv_catpvn_flags(b,n,l,f) sv_catpvn(b,n,l) #endif -#if !PERL_VERSION_GE(5,8,0) +#if !PERL_VERSION_GE(5,8,3) static NV Perl_ceil(NV nv) { return -Perl_floor(-nv); } @@ -138,10 +138,6 @@ my_sv_copypv(pTHX_ SV *const dsv, SV *const ssv) # define PERL_HAS_BAD_MULTICALL_REFCOUNT #endif -#if PERL_VERSION < 14 -# define croak_no_modify() croak("%s", PL_no_modify) -#endif - #ifndef SvNV_nomg # define SvNV_nomg SvNV #endif @@ -244,6 +240,31 @@ static double MY_callrand(pTHX_ CV *randcv) return ret; } +#define sv_to_cv(sv, subname) MY_sv_to_cv(aTHX_ sv, subname); +static CV* MY_sv_to_cv(pTHX_ SV* sv, const char * const subname) +{ + GV *gv; + HV *stash; + CV *cv = sv_2cv(sv, &stash, &gv, 0); + + if(cv == Nullcv) + croak("Not a subroutine reference"); + + if(!CvROOT(cv) && !CvXSUB(cv)) + croak("Undefined subroutine in %s", subname); + + return cv; +} + +enum { + ZIP_SHORTEST = 1, + ZIP_LONGEST = 2, + + ZIP_MESH = 4, + ZIP_MESH_LONGEST = ZIP_MESH|ZIP_LONGEST, + ZIP_MESH_SHORTEST = ZIP_MESH|ZIP_SHORTEST, +}; + MODULE=List::Util PACKAGE=List::Util void @@ -385,7 +406,7 @@ CODE: IV i = SvIV(sv); if (retiv == 0) /* avoid later division by zero */ break; - if (retiv < 0) { + if (retiv < -1) { /* avoid -1 because that causes SIGFPE */ if (i < 0) { if (i >= IV_MAX / retiv) { retiv *= i; @@ -399,7 +420,7 @@ CODE: } } } - else { + else if (retiv > 0) { if (i < 0) { if (i >= IV_MIN / retiv) { retiv *= i; @@ -527,14 +548,10 @@ CODE: { SV *ret = sv_newmortal(); int index; - AV *retvals; - GV *agv,*bgv,*gv; - HV *stash; + AV *retvals = NULL; + GV *agv,*bgv; SV **args = &PL_stack_base[ax]; - CV *cv = sv_2cv(block, &stash, &gv, 0); - - if(cv == Nullcv) - croak("Not a subroutine reference"); + CV *cv = sv_to_cv(block, ix ? "reductions" : "reduce"); if(items <= 1) { if(ix) @@ -621,13 +638,8 @@ PROTOTYPE: &@ CODE: { int index; - GV *gv; - HV *stash; SV **args = &PL_stack_base[ax]; - CV *cv = sv_2cv(block, &stash, &gv, 0); - - if(cv == Nullcv) - croak("Not a subroutine reference"); + CV *cv = sv_to_cv(block, "first"); if(items <= 1) XSRETURN_UNDEF; @@ -696,13 +708,13 @@ PPCODE: { int ret_true = !(ix & 2); /* return true at end of loop for none/all; false for any/notall */ int invert = (ix & 1); /* invert block test for all/notall */ - GV *gv; - HV *stash; SV **args = &PL_stack_base[ax]; - CV *cv = sv_2cv(block, &stash, &gv, 0); - - if(cv == Nullcv) - croak("Not a subroutine reference"); + CV *cv = sv_to_cv(block, + ix == 0 ? "none" : + ix == 1 ? "all" : + ix == 2 ? "any" : + ix == 3 ? "notall" : + "unknown 'any' alias"); SAVESPTR(GvSV(PL_defgv)); #ifdef dMULTICALL @@ -925,9 +937,8 @@ pairfirst(block,...) PROTOTYPE: &@ PPCODE: { - GV *agv,*bgv,*gv; - HV *stash; - CV *cv = sv_2cv(block, &stash, &gv, 0); + GV *agv,*bgv; + CV *cv = sv_to_cv(block, "pairfirst"); I32 ret_gimme = GIMME_V; int argi = 1; /* "shift" the block */ @@ -959,7 +970,7 @@ PPCODE: continue; POP_MULTICALL; - if(ret_gimme == G_ARRAY) { + if(ret_gimme == G_LIST) { ST(0) = sv_mortalcopy(a); ST(1) = sv_mortalcopy(b); XSRETURN(2); @@ -986,7 +997,7 @@ PPCODE: if(!SvTRUEx(*PL_stack_sp)) continue; - if(ret_gimme == G_ARRAY) { + if(ret_gimme == G_LIST) { ST(0) = sv_mortalcopy(a); ST(1) = sv_mortalcopy(b); XSRETURN(2); @@ -1005,9 +1016,8 @@ pairgrep(block,...) PROTOTYPE: &@ PPCODE: { - GV *agv,*bgv,*gv; - HV *stash; - CV *cv = sv_2cv(block, &stash, &gv, 0); + GV *agv,*bgv; + CV *cv = sv_to_cv(block, "pairgrep"); I32 ret_gimme = GIMME_V; /* This function never returns more than it consumed in arguments. So we @@ -1042,7 +1052,7 @@ PPCODE: MULTICALL; if(SvTRUEx(*PL_stack_sp)) { - if(ret_gimme == G_ARRAY) { + if(ret_gimme == G_LIST) { /* We can't mortalise yet or they'd be mortal too early */ stack[reti++] = newSVsv(a); stack[reti++] = newSVsv(b); @@ -1053,7 +1063,7 @@ PPCODE: } POP_MULTICALL; - if(ret_gimme == G_ARRAY) + if(ret_gimme == G_LIST) for(i = 0; i < reti; i++) sv_2mortal(stack[i]); } @@ -1071,7 +1081,7 @@ PPCODE: SPAGAIN; if(SvTRUEx(*PL_stack_sp)) { - if(ret_gimme == G_ARRAY) { + if(ret_gimme == G_LIST) { ST(reti++) = sv_mortalcopy(a); ST(reti++) = sv_mortalcopy(b); } @@ -1081,7 +1091,7 @@ PPCODE: } } - if(ret_gimme == G_ARRAY) + if(ret_gimme == G_LIST) XSRETURN(reti); else if(ret_gimme == G_SCALAR) { ST(0) = newSViv(reti); @@ -1095,9 +1105,8 @@ pairmap(block,...) PROTOTYPE: &@ PPCODE: { - GV *agv,*bgv,*gv; - HV *stash; - CV *cv = sv_2cv(block, &stash, &gv, 0); + GV *agv,*bgv; + CV *cv = sv_to_cv(block, "pairmap"); SV **args_copy = NULL; I32 ret_gimme = GIMME_V; @@ -1124,7 +1133,7 @@ PPCODE: AV *spill = NULL; /* accumulates results if too big for stack */ dMULTICALL; - I32 gimme = G_ARRAY; + I32 gimme = G_LIST; UNUSED_VAR_newsp; PUSH_MULTICALL(cv); @@ -1168,11 +1177,12 @@ PPCODE: stack[reti++] = newSVsv(PL_stack_base[i + 1]); } - if (spill) + if (spill) { /* the POP_MULTICALL will trigger the SAVEFREESV above; * keep it alive it on the temps stack instead */ SvREFCNT_inc_simple_void_NN(spill); sv_2mortal((SV*)spill); + } POP_MULTICALL; @@ -1186,7 +1196,7 @@ PPCODE: av_clear(spill); } - if(ret_gimme == G_ARRAY) + if(ret_gimme == G_LIST) for(i = 0; i < reti; i++) sv_2mortal(ST(i)); } @@ -1204,11 +1214,11 @@ PPCODE: &PL_sv_undef; PUSHMARK(SP); - count = call_sv((SV*)cv, G_ARRAY); + count = call_sv((SV*)cv, G_LIST); SPAGAIN; - if(count > 2 && !args_copy && ret_gimme == G_ARRAY) { + if(count > 2 && !args_copy && ret_gimme == G_LIST) { int n_args = items - argi; Newx(args_copy, n_args, SV *); SAVEFREEPV(args_copy); @@ -1219,7 +1229,7 @@ PPCODE: items = n_args; } - if(ret_gimme == G_ARRAY) + if(ret_gimme == G_LIST) for(i = 0; i < count; i++) ST(reti++) = sv_mortalcopy(SP[i - count + 1]); else @@ -1229,7 +1239,7 @@ PPCODE: } } - if(ret_gimme == G_ARRAY) + if(ret_gimme == G_LIST) XSRETURN(reti); ST(0) = sv_2mortal(newSViv(reti)); @@ -1349,7 +1359,7 @@ CODE: seen_undef++; - if(GIMME_V == G_ARRAY) + if(GIMME_V == G_LIST) ST(retcount) = arg; retcount++; continue; @@ -1397,13 +1407,13 @@ CODE: hv_store_ent(seen, arg, &PL_sv_yes, 0); #endif - if(GIMME_V == G_ARRAY) + if(GIMME_V == G_LIST) ST(retcount) = SvOK(arg) ? arg : sv_2mortal(newSVpvn("", 0)); retcount++; } finish: - if(GIMME_V == G_ARRAY) + if(GIMME_V == G_LIST) XSRETURN(retcount); else ST(0) = sv_2mortal(newSViv(retcount)); @@ -1449,7 +1459,7 @@ CODE: #endif } #if NVSIZE > IVSIZE /* $Config{nvsize} > $Config{ivsize} */ - /* Avoid altering arg's flags */ + /* Avoid altering arg's flags */ if(SvUOK(arg)) nv_arg = (NV)SvUV(arg); else if(SvIOK(arg)) nv_arg = (NV)SvIV(arg); else nv_arg = SvNV(arg); @@ -1474,9 +1484,9 @@ CODE: * that are allocated but never used. (It is only the 10-byte * * extended precision long double that allocates bytes that are * * never used. For all other NV types ACTUAL_NVSIZE == sizeof(NV). */ - sv_setpvn(keysv, (char *) &nv_arg, ACTUAL_NVSIZE); + sv_setpvn(keysv, (char *) &nv_arg, ACTUAL_NVSIZE); } -#else /* $Config{nvsize} == $Config{ivsize} == 8 */ +#else /* $Config{nvsize} == $Config{ivsize} == 8 */ if( SvIOK(arg) || !SvOK(arg) ) { /* It doesn't matter if SvUOK(arg) is TRUE */ @@ -1506,7 +1516,7 @@ CODE: * Then subtract 1 so that all of the ("allowed") bits below the set bit * * are 1 && all other ("disallowed") bits are set to 0. * * (If the value prior to subtraction was 0, then subtracting 1 will set * - * all bits - which is also fine.) */ + * all bits - which is also fine.) */ UV valid_bits = (lowest_set << 53) - 1; /* The value of arg can be exactly represented by a double unless one * @@ -1515,9 +1525,9 @@ CODE: * by -1 prior to performing that '&' operation - so multiply iv by sign.*/ if( !((iv * sign) & (~valid_bits)) ) { /* Avoid altering arg's flags */ - nv_arg = uok ? (NV)SvUV(arg) : (NV)SvIV(arg); + nv_arg = uok ? (NV)SvUV(arg) : (NV)SvIV(arg); sv_setpvn(keysv, (char *) &nv_arg, 8); - } + } else { /* Read in the bytes, rather than the numeric value of the IV/UV as * * this is more efficient, despite having to sv_catpvn an extra byte.*/ @@ -1553,18 +1563,111 @@ CODE: hv_store(seen, SvPVX(keysv), SvCUR(keysv), &PL_sv_yes, 0); #endif - if(GIMME_V == G_ARRAY) + if(GIMME_V == G_LIST) ST(retcount) = SvOK(arg) ? arg : sv_2mortal(newSViv(0)); retcount++; } finish: - if(GIMME_V == G_ARRAY) + if(GIMME_V == G_LIST) XSRETURN(retcount); else ST(0) = sv_2mortal(newSViv(retcount)); } +void +zip(...) +ALIAS: + zip_longest = ZIP_LONGEST + zip_shortest = ZIP_SHORTEST + mesh = ZIP_MESH + mesh_longest = ZIP_MESH_LONGEST + mesh_shortest = ZIP_MESH_SHORTEST +PPCODE: + Size_t nlists = items; /* number of lists */ + AV **lists; /* inbound lists */ + Size_t len = 0; /* length of longest inbound list = length of result */ + Size_t i; + bool is_mesh = (ix & ZIP_MESH); + ix &= ~ZIP_MESH; + + if(!nlists) + XSRETURN(0); + + Newx(lists, nlists, AV *); + SAVEFREEPV(lists); + + /* TODO: This may or maynot work on objects with arrayification overload */ + /* Remember to unit test it */ + + for(i = 0; i < nlists; i++) { + SV *arg = ST(i); + AV *av; + + if(!SvROK(arg) || SvTYPE(SvRV(arg)) != SVt_PVAV) + croak("Expected an ARRAY reference to zip"); + av = lists[i] = (AV *)SvRV(arg); + + if(!i) { + len = av_count(av); + continue; + } + + switch(ix) { + case 0: /* zip is alias to zip_longest */ + case ZIP_LONGEST: + if(av_count(av) > len) + len = av_count(av); + break; + + case ZIP_SHORTEST: + if(av_count(av) < len) + len = av_count(av); + break; + } + } + + if(is_mesh) { + SSize_t retcount = (SSize_t)(len * nlists); + + EXTEND(SP, retcount); + + for(i = 0; i < len; i++) { + Size_t listi; + + for(listi = 0; listi < nlists; listi++) { + SV *item = (i < av_count(lists[listi])) ? + AvARRAY(lists[listi])[i] : + &PL_sv_undef; + + mPUSHs(SvREFCNT_inc(item)); + } + } + + XSRETURN(retcount); + } + else { + EXTEND(SP, (SSize_t)len); + + for(i = 0; i < len; i++) { + Size_t listi; + AV *ret = newAV(); + av_extend(ret, nlists); + + for(listi = 0; listi < nlists; listi++) { + SV *item = (i < av_count(lists[listi])) ? + AvARRAY(lists[listi])[i] : + &PL_sv_undef; + + av_push(ret, SvREFCNT_inc(item)); + } + + mPUSHs(newRV_noinc((SV *)ret)); + } + + XSRETURN(len); + } + MODULE=List::Util PACKAGE=Scalar::Util void @@ -1669,11 +1772,7 @@ weaken(sv) SV *sv PROTOTYPE: $ CODE: -#ifdef SvWEAKREF sv_rvweaken(sv); -#else - croak("weak references are not implemented in this release of perl"); -#endif void unweaken(sv) @@ -1685,7 +1784,7 @@ CODE: #if defined(sv_rvunweaken) PERL_UNUSED_VAR(tsv); sv_rvunweaken(sv); -#elif defined(SvWEAKREF) +#else /* This code stolen from core's sv_rvweaken() and modified */ if (!SvOK(sv)) return; @@ -1711,8 +1810,6 @@ CODE: SvRV_set(sv, SvREFCNT_inc_NN(tsv)); SvROK_on(sv); #endif -#else - croak("weak references are not implemented in this release of perl"); #endif void @@ -1720,12 +1817,8 @@ isweak(sv) SV *sv PROTOTYPE: $ CODE: -#ifdef SvWEAKREF ST(0) = boolSV(SvROK(sv) && SvWEAKREF(sv)); XSRETURN(1); -#else - croak("weak references are not implemented in this release of perl"); -#endif int readonly(sv) @@ -1931,12 +2024,13 @@ PPCODE: } if (old_data && HeVAL(old_data)) { + SV* old_val = HeVAL(old_data); SV* new_full_name = sv_2mortal(newSVpvn_flags(HvNAME(stash), HvNAMELEN_get(stash), HvNAMEUTF8(stash) ? SVf_UTF8 : 0)); sv_catpvn(new_full_name, "::", 2); sv_catpvn_flags(new_full_name, nameptr, s - nameptr, utf8flag ? SV_CATUTF8 : SV_CATBYTES); - SvREFCNT_inc(HeVAL(old_data)); - if (hv_store_ent(DBsub, new_full_name, HeVAL(old_data), 0) != NULL) - SvREFCNT_inc(HeVAL(old_data)); + SvREFCNT_inc(old_val); + if (!hv_store_ent(DBsub, new_full_name, old_val, 0)) + SvREFCNT_dec(old_val); } } @@ -2003,7 +2097,7 @@ BOOT: HV *lu_stash = gv_stashpvn("List::Util", 10, TRUE); GV *rmcgv = *(GV**)hv_fetch(lu_stash, "REAL_MULTICALL", 14, TRUE); SV *rmcsv; -#if !defined(SvWEAKREF) || !defined(SvVOK) +#if !defined(SvVOK) HV *su_stash = gv_stashpvn("Scalar::Util", 12, TRUE); GV *vargv = *(GV**)hv_fetch(su_stash, "EXPORT_FAIL", 11, TRUE); AV *varav; @@ -2014,10 +2108,6 @@ BOOT: if(SvTYPE(rmcgv) != SVt_PVGV) gv_init(rmcgv, lu_stash, "List::Util", 10, TRUE); rmcsv = GvSVn(rmcgv); -#ifndef SvWEAKREF - av_push(varav, newSVpv("weaken",6)); - av_push(varav, newSVpv("isweak",6)); -#endif #ifndef SvVOK av_push(varav, newSVpv("isvstring",9)); #endif diff --git a/gnu/usr.bin/perl/cpan/Scalar-List-Utils/lib/List/Util.pm b/gnu/usr.bin/perl/cpan/Scalar-List-Utils/lib/List/Util.pm index e582d608743..a03b2983146 100644 --- a/gnu/usr.bin/perl/cpan/Scalar-List-Utils/lib/List/Util.pm +++ b/gnu/usr.bin/perl/cpan/Scalar-List-Utils/lib/List/Util.pm @@ -13,10 +13,10 @@ require Exporter; our @ISA = qw(Exporter); our @EXPORT_OK = qw( all any first min max minstr maxstr none notall product reduce reductions sum sum0 - sample shuffle uniq uniqint uniqnum uniqstr + sample shuffle uniq uniqint uniqnum uniqstr zip zip_longest zip_shortest mesh mesh_longest mesh_shortest head tail pairs unpairs pairkeys pairvalues pairmap pairgrep pairfirst ); -our $VERSION = "1.55"; +our $VERSION = "1.62"; our $XS_VERSION = $VERSION; $VERSION =~ tr/_//d; @@ -57,7 +57,7 @@ List::Util - A selection of general-utility list subroutines pairs unpairs pairkeys pairvalues pairfirst pairgrep pairmap - shuffle uniq uniqint uniqnum uniqstr + shuffle uniq uniqint uniqnum uniqstr zip mesh ); =head1 DESCRIPTION @@ -653,6 +653,83 @@ all but the first C<$size> elements from C<@list>. @result = tail -2, qw( foo bar baz ); # baz +=head2 zip + + my @result = zip [1..3], ['a'..'c']; + # [1, 'a'], [2, 'b'], [3, 'c'] + +I + +Returns a list of array references, composed of elements from the given list +of array references. Each array in the returned list is composed of elements +at that corresponding position from each of the given input arrays. If any +input arrays run out of elements before others, then C will be inserted +into the result to fill in the gaps. + +The C function is particularly handy for iterating over multiple arrays +at the same time with a C loop, taking one element from each: + + foreach ( zip \@xs, \@ys, \@zs ) { + my ($x, $y, $z) = @$_; + ... + } + +B to users of L: This function does not behave the same +as C, but is actually a non-prototyped equivalent to +C. This function does not apply a prototype, +so make sure to invoke it with references to arrays. + +For a function similar to the C function from C, see +L. + + my @result = zip_shortest ... + +A variation of the function that differs in how it behaves when given input +arrays of differing lengths. C will stop as soon as any one of +the input arrays run out of elements, discarding any remaining unused values +from the others. + + my @result = zip_longest ... + +C is an alias to the C function, provided simply to be +explicit about that behaviour as compared to C. + +=head2 mesh + + my @result = mesh [1..3], ['a'..'c']; + # (1, 'a', 2, 'b', 3, 'c') + +I + +Returns a list of items collected from elements of the given list of array +references. Each section of items in the returned list is composed of elements +at the corresponding position from each of the given input arrays. If any +input arrays run out of elements before others, then C will be inserted +into the result to fill in the gaps. + +This is similar to L, except that all of the ranges in the result are +returned in one long flattened list, instead of being bundled into separate +arrays. + +Because it returns a flat list of items, the C function is particularly +useful for building a hash out of two separate arrays of keys and values: + + my %hash = mesh \@keys, \@values; + + my $href = { mesh \@keys, \@values }; + +B to users of L: This function is a non-prototyped +equivalent to C or C (themselves +aliases of each other). This function does not apply a prototype, so make sure +to invoke it with references to arrays. + + my @result = mesh_shortest ... + + my @result = mesh_longest ... + +These variations are similar to those of L, in that they differ in +behaviour when one of the input lists runs out of elements before the others. + =head1 CONFIGURATION VARIABLES =head2 $RAND diff --git a/gnu/usr.bin/perl/cpan/Scalar-List-Utils/lib/List/Util/XS.pm b/gnu/usr.bin/perl/cpan/Scalar-List-Utils/lib/List/Util/XS.pm index 88f663f0ec4..1be196073c6 100644 --- a/gnu/usr.bin/perl/cpan/Scalar-List-Utils/lib/List/Util/XS.pm +++ b/gnu/usr.bin/perl/cpan/Scalar-List-Utils/lib/List/Util/XS.pm @@ -3,7 +3,7 @@ use strict; use warnings; use List::Util; -our $VERSION = "1.55"; # FIXUP +our $VERSION = "1.62"; # FIXUP $VERSION =~ tr/_//d; # FIXUP 1; diff --git a/gnu/usr.bin/perl/cpan/Scalar-List-Utils/lib/Scalar/Util.pm b/gnu/usr.bin/perl/cpan/Scalar-List-Utils/lib/Scalar/Util.pm index a7345aad78a..984ccdde918 100644 --- a/gnu/usr.bin/perl/cpan/Scalar-List-Utils/lib/Scalar/Util.pm +++ b/gnu/usr.bin/perl/cpan/Scalar-List-Utils/lib/Scalar/Util.pm @@ -17,33 +17,17 @@ our @EXPORT_OK = qw( dualvar isdual isvstring looks_like_number openhandle readonly set_prototype tainted ); -our $VERSION = "1.55"; +our $VERSION = "1.62"; $VERSION =~ tr/_//d; require List::Util; # List::Util loads the XS List::Util->VERSION( $VERSION ); # Ensure we got the right XS version (RT#100863) -our @EXPORT_FAIL; - -unless (defined &weaken) { - push @EXPORT_FAIL, qw(weaken); -} -unless (defined &isweak) { - push @EXPORT_FAIL, qw(isweak isvstring); -} -unless (defined &isvstring) { - push @EXPORT_FAIL, qw(isvstring); -} - +# populating @EXPORT_FAIL is done in the XS code sub export_fail { - if (grep { /^(?:weaken|isweak)$/ } @_ ) { - require Carp; - Carp::croak("Weak references are not implemented in the version of perl"); - } - if (grep { /^isvstring$/ } @_ ) { require Carp; - Carp::croak("Vstrings are not implemented in the version of perl"); + Carp::croak("Vstrings are not implemented in this version of perl"); } @_; @@ -80,6 +64,21 @@ being individual extensions would be wasteful. By default C does not export any subroutines. +=head2 Core Perl C Functions + +Many functions in this module have served as the inspiration for a new +experimental facility in recent versions of Perl. From various development +versions, starting at 5.35.7, equivalent functions to many of these utilities +are available in the C package. + + use Scalar::Util qw(blessed); + + $class = blessed $obj; + + $class = builtin::blessed $obj; # equivalent + +For more information, see the documentation on L. + =cut =head1 FUNCTIONS FOR REFERENCES @@ -105,6 +104,9 @@ into is returned. Otherwise C is returned. Take care when using this function simply as a truth test (such as in C) because the package name C<"0"> is defined yet false. +I an equivalent function is available as +C. + =head2 refaddr my $addr = refaddr( $ref ); @@ -119,6 +121,9 @@ returned as a plain integer. Otherwise C is returned. $obj = bless {}, "Foo"; $addr = refaddr $obj; # eg 88123488 +I an equivalent function is available as +C. + =head2 reftype my $type = reftype( $ref ); @@ -139,6 +144,9 @@ blessed references; thus C returns the package name string C<"Regexp"> on these but C will return the underlying C structure type of C<"REGEXP"> in all capitals. +I an equivalent function is available as +C. + =head2 weaken weaken( $ref ); @@ -178,6 +186,9 @@ references to objects will be strong, causing the remaining objects to never be destroyed because there is now always a strong reference to them in the @object array. +I an equivalent function is available as +C. + =head2 unweaken unweaken( $ref ); @@ -199,6 +210,9 @@ otherwise-equivalent code (because in particular, simply assigning a weak reference back to itself does not work to unweaken it; C<$REF = $REF> does not work). +I an equivalent function is available as +C. + =head2 isweak my $weak = isweak( $ref ); @@ -215,6 +229,9 @@ B: Copying a weak reference creates a normal, strong, reference. $copy = $ref; $weak = isweak($copy); # false +I an equivalent function is available as +C. + =head1 OTHER FUNCTIONS =head2 dualvar @@ -241,24 +258,24 @@ true. $dual = isdual($foo); # true Note that a scalar can be made to have both string and numeric content through -numeric operations: +standard operations: $foo = "10"; $dual = isdual($foo); # false $bar = $foo + 0; $dual = isdual($foo); # true -Note that although C<$!> appears to be a dual-valued variable, it is -actually implemented as a magical variable inside the interpreter: +The C<$!> variable is commonly dual-valued, though it is also magical in other +ways: $! = 1; + $dual = isdual($!); # true print("$!\n"); # "Operation not permitted" - $dual = isdual($!); # false - -You can capture its numeric and string content using: - $err = dualvar $!, $!; - $dual = isdual($err); # true +B: This function is not as useful as it may seem. Dualvars are not a +distinct concept in Perl, but a standard internal construct of all scalar +values. Almost any value could be considered as a dualvar by this function +through the course of normal operations. =head2 isvstring @@ -324,12 +341,7 @@ Module use may give one of the following errors during import. =over -=item Weak references are not implemented in the version of perl - -The version of perl that you are using does not implement weak references, to -use L or L you will need to use a newer release of perl. - -=item Vstrings are not implemented in the version of perl +=item Vstrings are not implemented in this version of perl The version of perl that you are using does not implement Vstrings, to use L you will need to use a newer release of perl. diff --git a/gnu/usr.bin/perl/cpan/Scalar-List-Utils/lib/Sub/Util.pm b/gnu/usr.bin/perl/cpan/Scalar-List-Utils/lib/Sub/Util.pm index d7b59aebab8..573d920a765 100644 --- a/gnu/usr.bin/perl/cpan/Scalar-List-Utils/lib/Sub/Util.pm +++ b/gnu/usr.bin/perl/cpan/Scalar-List-Utils/lib/Sub/Util.pm @@ -15,7 +15,7 @@ our @EXPORT_OK = qw( subname set_subname ); -our $VERSION = "1.55"; +our $VERSION = "1.62"; $VERSION =~ tr/_//d; require List::Util; # as it has the XS diff --git a/gnu/usr.bin/perl/cpan/Scalar-List-Utils/t/dualvar.t b/gnu/usr.bin/perl/cpan/Scalar-List-Utils/t/dualvar.t index bd77c969b5a..e452749f017 100644 --- a/gnu/usr.bin/perl/cpan/Scalar-List-Utils/t/dualvar.t +++ b/gnu/usr.bin/perl/cpan/Scalar-List-Utils/t/dualvar.t @@ -3,15 +3,10 @@ use strict; use warnings; -use Scalar::Util (); -use Test::More (grep { /dualvar/ } @Scalar::Util::EXPORT_FAIL) - ? (skip_all => 'dualvar requires XS version') - : (tests => 41); +use Scalar::Util qw(dualvar isdual); +use Test::More tests => 41; use Config; -Scalar::Util->import('dualvar'); -Scalar::Util->import('isdual'); - my $var; $var = dualvar( 2.2,"string"); diff --git a/gnu/usr.bin/perl/cpan/Scalar-List-Utils/t/first.t b/gnu/usr.bin/perl/cpan/Scalar-List-Utils/t/first.t index 3f008e703c0..07b7ec24dcf 100644 --- a/gnu/usr.bin/perl/cpan/Scalar-List-Utils/t/first.t +++ b/gnu/usr.bin/perl/cpan/Scalar-List-Utils/t/first.t @@ -90,7 +90,7 @@ SKIP: { } # These tests are only relevant for the real multicall implementation. The -# psuedo-multicall implementation behaves differently. +# pseudo-multicall implementation behaves differently. SKIP: { $List::Util::REAL_MULTICALL ||= 0; # Avoid use only once skip("Poor man's MULTICALL can't cope", 2) diff --git a/gnu/usr.bin/perl/cpan/Scalar-List-Utils/t/isvstring.t b/gnu/usr.bin/perl/cpan/Scalar-List-Utils/t/isvstring.t index 3649d41c59f..e613a6e2578 100644 --- a/gnu/usr.bin/perl/cpan/Scalar-List-Utils/t/isvstring.t +++ b/gnu/usr.bin/perl/cpan/Scalar-List-Utils/t/isvstring.t @@ -6,10 +6,10 @@ use warnings; $|=1; use Scalar::Util (); use Test::More (grep { /isvstring/ } @Scalar::Util::EXPORT_FAIL) - ? (skip_all => 'isvstring requires XS version') + ? (skip_all => 'isvstring is not supported on this perl version') : (tests => 3); -Scalar::Util->import(qw[isvstring]); +use Scalar::Util qw(isvstring); my $vs = ord("A") == 193 ? 241.75.240 : 49.46.48; diff --git a/gnu/usr.bin/perl/cpan/Scalar-List-Utils/t/pair.t b/gnu/usr.bin/perl/cpan/Scalar-List-Utils/t/pair.t index 7d7a6a9bb59..27e836454b7 100644 --- a/gnu/usr.bin/perl/cpan/Scalar-List-Utils/t/pair.t +++ b/gnu/usr.bin/perl/cpan/Scalar-List-Utils/t/pair.t @@ -5,7 +5,6 @@ use warnings; use Test::More tests => 29; use List::Util qw(pairgrep pairfirst pairmap pairs unpairs pairkeys pairvalues); -use Scalar::Util qw(blessed); no warnings 'misc'; # avoid "Odd number of elements" warnings most of the time @@ -108,7 +107,7 @@ is_deeply( [ pairs one => 1, two => ], is_deeply( $p[0]->TO_JSON, [ one => 1 ], 'pairs ->TO_JSON' ); - ok( !blessed($p[0]->TO_JSON) , 'pairs ->TO_JSON is not blessed' ); + is( ref($p[0]->TO_JSON), 'ARRAY', 'pairs ->TO_JSON is not blessed' ); } is_deeply( [ unpairs [ four => 4 ], [ five => 5 ], [ six => 6 ] ], diff --git a/gnu/usr.bin/perl/cpan/Scalar-List-Utils/t/product.t b/gnu/usr.bin/perl/cpan/Scalar-List-Utils/t/product.t index 87e887cf886..3ff5ae0f13e 100644 --- a/gnu/usr.bin/perl/cpan/Scalar-List-Utils/t/product.t +++ b/gnu/usr.bin/perl/cpan/Scalar-List-Utils/t/product.t @@ -3,7 +3,7 @@ use strict; use warnings; -use Test::More tests => 25; +use Test::More tests => 27; use Config; use List::Util qw(product); @@ -32,6 +32,13 @@ is( $v, 0, '1 * 0'); $v = product(0, 0); is( $v, 0, 'two 0'); +# RT139601 cornercases +{ + # Numify the result because some older perl versions see "-0" as a string + is( 0+product(-1.0, 0), 0, 'product(-1.0, 0)' ); + is( 0+product(-1, 0), 0, 'product(-1, 0)' ); +} + my $x = -3; $v = product($x, 3); diff --git a/gnu/usr.bin/perl/cpan/Scalar-List-Utils/t/reduce.t b/gnu/usr.bin/perl/cpan/Scalar-List-Utils/t/reduce.t index 67fdbaac228..6e90ffba017 100644 --- a/gnu/usr.bin/perl/cpan/Scalar-List-Utils/t/reduce.t +++ b/gnu/usr.bin/perl/cpan/Scalar-List-Utils/t/reduce.t @@ -126,7 +126,7 @@ SKIP: { } # These tests are only relevant for the real multicall implementation. The -# psuedo-multicall implementation behaves differently. +# pseudo-multicall implementation behaves differently. SKIP: { $List::Util::REAL_MULTICALL ||= 0; # Avoid use only once skip("Poor man's MULTICALL can't cope", 2) diff --git a/gnu/usr.bin/perl/cpan/Scalar-List-Utils/t/tainted.t b/gnu/usr.bin/perl/cpan/Scalar-List-Utils/t/tainted.t index 1197b295869..2cefe92299a 100644 --- a/gnu/usr.bin/perl/cpan/Scalar-List-Utils/t/tainted.t +++ b/gnu/usr.bin/perl/cpan/Scalar-List-Utils/t/tainted.t @@ -3,10 +3,18 @@ use strict; use warnings; -use Test::More tests => 5; - +use Config; +use Test::More; use Scalar::Util qw(tainted); +if (exists($Config{taint_support}) && not $Config{taint_support}) { + plan skip_all => "your perl was built without taint support"; +} +else { + plan tests => 5; +} + + ok( !tainted(1), 'constant number'); my $var = 2; diff --git a/gnu/usr.bin/perl/cpan/Scalar-List-Utils/t/weak.t b/gnu/usr.bin/perl/cpan/Scalar-List-Utils/t/weak.t index 39a4167cd6a..90bf469f295 100644 --- a/gnu/usr.bin/perl/cpan/Scalar-List-Utils/t/weak.t +++ b/gnu/usr.bin/perl/cpan/Scalar-List-Utils/t/weak.t @@ -5,12 +5,8 @@ use warnings; use Config; -use Scalar::Util (); -use Test::More ((grep { /weaken/ } @Scalar::Util::EXPORT_FAIL) and !$ENV{PERL_CORE}) - ? (skip_all => 'weaken requires XS version') - : (tests => 28); - -Scalar::Util->import(qw(weaken unweaken isweak)); +use Scalar::Util qw(weaken unweaken isweak); +use Test::More tests => 28; # two references, one is weakened, the other is then undef'ed. { diff --git a/gnu/usr.bin/perl/cpan/Socket/Makefile.PL b/gnu/usr.bin/perl/cpan/Socket/Makefile.PL index b69f50c9c78..f7c6bd2c9f7 100644 --- a/gnu/usr.bin/perl/cpan/Socket/Makefile.PL +++ b/gnu/usr.bin/perl/cpan/Socket/Makefile.PL @@ -170,8 +170,7 @@ my @names = ( AF_WAN AF_X25 AI_ADDRCONFIG AI_ALL AI_CANONIDN AI_CANONNAME AI_IDN - AI_IDN_ALLOW_UNASSIGNED AI_IDN_USE_STD3_ASCII_RULES AI_NUMERICHOST - AI_NUMERICSERV AI_PASSIVE AI_V4MAPPED + AI_NUMERICHOST AI_NUMERICSERV AI_PASSIVE AI_V4MAPPED EAI_ADDRFAMILY EAI_AGAIN EAI_BADFLAGS EAI_BADHINTS EAI_FAIL EAI_FAMILY EAI_NODATA EAI_NONAME EAI_PROTOCOL EAI_SERVICE EAI_SOCKTYPE EAI_SYSTEM @@ -193,13 +192,14 @@ my @names = ( IPV6_MULTICAST_IF IPV6_MULTICAST_LOOP IPV6_RECVERR IPV6_ROUTER_ALERT IPV6_UNICAST_HOPS IPV6_V6ONLY + LOCAL_CONNWAIT LOCAL_CREDS LOCAL_OCREDS LOCAL_PEEREID + MSG_BCAST MSG_BTAG MSG_CTLFLAGS MSG_CTLIGNORE MSG_DONTWAIT MSG_EOF MSG_EOR MSG_ERRQUEUE MSG_ETAG MSG_FASTOPEN MSG_FIN MSG_MAXIOVLEN MSG_MCAST MSG_NOSIGNAL MSG_RST MSG_SYN MSG_TRUNC MSG_URG MSG_WAITALL MSG_WIRE - NI_DGRAM NI_IDN NI_IDN_ALLOW_UNASSIGNED NI_IDN_USE_STD3_ASCII_RULES - NI_NAMEREQD NI_NOFQDN NI_NUMERICHOST NI_NUMERICSERV + NI_DGRAM NI_IDN NI_NAMEREQD NI_NOFQDN NI_NUMERICHOST NI_NUMERICSERV PF_802 PF_AAL PF_APPLETALK PF_CCITT PF_CHAOS PF_CTF PF_DATAKIT PF_DECnet PF_DLI PF_ECMA PF_GOSIP PF_HYLINK PF_IMPLINK PF_INET PF_INET6 diff --git a/gnu/usr.bin/perl/cpan/Socket/Socket.pm b/gnu/usr.bin/perl/cpan/Socket/Socket.pm index 2c6b5e45d04..5087ffc60cc 100644 --- a/gnu/usr.bin/perl/cpan/Socket/Socket.pm +++ b/gnu/usr.bin/perl/cpan/Socket/Socket.pm @@ -1,9 +1,9 @@ package Socket; use strict; -{ use 5.006001; } +{ use v5.6.1; } -our $VERSION = '2.029'; +our $VERSION = '2.033'; =head1 NAME @@ -110,7 +110,7 @@ level. =head2 IP_PMTUDISC_WANT, IP_PMTUDISC_DONT, ... -Socket option value contants for C socket option. +Socket option value constants for C socket option. =head2 IPTOS_LOWDELAY, IPTOS_THROUGHPUT, IPTOS_RELIABILITY, ... @@ -837,6 +837,14 @@ BEGIN { *LF = \LF(); *CRLF = \CRLF(); +# The four deprecated addrinfo constants +foreach my $name (qw( AI_IDN_ALLOW_UNASSIGNED AI_IDN_USE_STD3_ASCII_RULES NI_IDN_ALLOW_UNASSIGNED NI_IDN_USE_STD3_ASCII_RULES )) { + no strict 'refs'; + *$name = sub { + croak "The addrinfo constant $name is deprecated"; + }; +} + sub sockaddr_in { if (@_ == 6 && !wantarray) { # perl5.001m compat; use this && die my($af, $port, @quad) = @_; @@ -916,13 +924,9 @@ if( defined &getaddrinfo ) { # Constants we don't support. Export them, but croak if anyone tries to # use them - AI_IDN => 64, - AI_CANONIDN => 128, - AI_IDN_ALLOW_UNASSIGNED => 256, - AI_IDN_USE_STD3_ASCII_RULES => 512, - NI_IDN => 32, - NI_IDN_ALLOW_UNASSIGNED => 64, - NI_IDN_USE_STD3_ASCII_RULES => 128, + AI_IDN => 64, + AI_CANONIDN => 128, + NI_IDN => 32, # Error constants we'll never return, so it doesn't matter what value # these have, nor that we don't provide strings for them @@ -992,7 +996,7 @@ sub fake_getaddrinfo # to talk AF_INET. If not we'd have to return no addresses at all. :) $flags &= ~(AI_V4MAPPED()|AI_ALL()|AI_ADDRCONFIG()); - $flags & (AI_IDN()|AI_CANONIDN()|AI_IDN_ALLOW_UNASSIGNED()|AI_IDN_USE_STD3_ASCII_RULES()) and + $flags & (AI_IDN()|AI_CANONIDN()) and croak "Socket::getaddrinfo() does not support IDN"; $flags == 0 or return fake_makeerr( EAI_BADFLAGS() ); @@ -1090,7 +1094,7 @@ sub fake_getnameinfo my $flag_namereqd = $flags & NI_NAMEREQD(); $flags &= ~NI_NAMEREQD(); my $flag_dgram = $flags & NI_DGRAM() ; $flags &= ~NI_DGRAM(); - $flags & (NI_IDN()|NI_IDN_ALLOW_UNASSIGNED()|NI_IDN_USE_STD3_ASCII_RULES()) and + $flags & NI_IDN() and croak "Socket::getnameinfo() does not support IDN"; $flags == 0 or return fake_makeerr( EAI_BADFLAGS() ); diff --git a/gnu/usr.bin/perl/cpan/Socket/Socket.xs b/gnu/usr.bin/perl/cpan/Socket/Socket.xs index e46c93e1719..b4bccb796d4 100644 --- a/gnu/usr.bin/perl/cpan/Socket/Socket.xs +++ b/gnu/usr.bin/perl/cpan/Socket/Socket.xs @@ -228,9 +228,9 @@ static SV *my_newSVpvn_flags(pTHX_ const char *s, STRLEN len, U32 flags) # define SvRV_set(sv, val) (SvRV(sv) = (val)) #endif /* !SvRV_set */ -#ifndef SvPV_nomg -# define SvPV_nomg SvPV -#endif /* !SvPV_nomg */ +#ifndef SvPVbyte_nomg +# define SvPVbyte_nomg SvPV +#endif /* !SvPVbyte_nomg */ #ifndef HEK_FLAGS # define HEK_FLAGS(hek) 0 @@ -297,6 +297,10 @@ static void *my_hv_common_key_len(pTHX_ HV *hv, const char *key, I32 kl, # define mPUSHs(s) PUSHs(sv_2mortal(s)) #endif /* !mPUSHs */ +#ifndef G_LIST +# define G_LIST G_ARRAY +#endif /* !G_LIST */ + #ifndef CvCONST_on # undef newCONSTSUB # define newCONSTSUB(stash, name, val) my_newCONSTSUB(aTHX_ stash, name, val) @@ -610,14 +614,14 @@ static void xs_getaddrinfo(pTHX_ CV *cv) SvGETMAGIC(host); if(SvOK(host)) { - hostname = SvPV_nomg(host, len); + hostname = SvPVbyte_nomg(host, len); if (!len) hostname = NULL; } SvGETMAGIC(service); if(SvOK(service)) { - servicename = SvPV_nomg(service, len); + servicename = SvPVbyte_nomg(service, len); if (!len) servicename = NULL; } @@ -729,8 +733,13 @@ static void xs_getnameinfo(pTHX_ CV *cv) #endif err = getnameinfo((struct sockaddr *)sa, addr_len, - want_host ? host : NULL, want_host ? sizeof(host) : 0, - want_serv ? serv : NULL, want_serv ? sizeof(serv) : 0, +#ifdef OS390 /* This OS requires both parameters to be non-NULL */ + host, sizeof(host), + serv, sizeof(serv), +#else + want_host ? host : NULL, want_host ? sizeof(host) : 0, + want_serv ? serv : NULL, want_serv ? sizeof(serv) : 0, +#endif flags); Safefree(sa); @@ -764,20 +773,33 @@ inet_aton(host) char * host CODE: { +#ifdef HAS_GETADDRINFO + struct addrinfo *res; + struct addrinfo hints = {0}; + hints.ai_family = AF_INET; + if (!getaddrinfo(host, NULL, &hints, &res)) { + ST(0) = sv_2mortal(newSVpvn( + (char *)&(((struct sockaddr_in *)res->ai_addr)->sin_addr.s_addr), + 4)); + freeaddrinfo(res); + XSRETURN(1); + } +#else struct in_addr ip_address; struct hostent * phe; - if ((*host != '\0') && inet_aton(host, &ip_address)) { ST(0) = sv_2mortal(newSVpvn((char *)&ip_address, sizeof(ip_address))); XSRETURN(1); } #ifdef HAS_GETHOSTBYNAME + /* gethostbyname is not thread-safe */ phe = gethostbyname(host); if (phe && phe->h_addrtype == AF_INET && phe->h_length == 4) { ST(0) = sv_2mortal(newSVpvn((char *)phe->h_addr, phe->h_length)); XSRETURN(1); } -#endif +#endif /* HAS_GETHOSTBYNAME */ +#endif /* HAS_GETADDRINFO */ XSRETURN_UNDEF; } @@ -794,10 +816,10 @@ inet_ntoa(ip_address_sv) ip_address = SvPVbyte(ip_address_sv, addrlen); if (addrlen == sizeof(addr) || addrlen == 4) addr.s_addr = - (ip_address[0] & 0xFF) << 24 | - (ip_address[1] & 0xFF) << 16 | - (ip_address[2] & 0xFF) << 8 | - (ip_address[3] & 0xFF); + (unsigned long)(ip_address[0] & 0xFF) << 24 | + (unsigned long)(ip_address[1] & 0xFF) << 16 | + (unsigned long)(ip_address[2] & 0xFF) << 8 | + (unsigned long)(ip_address[3] & 0xFF); else croak("Bad arg length for %s, length is %" UVuf ", should be %" UVuf, @@ -843,7 +865,7 @@ pack_sockaddr_un(pathname) Zero(&sun_ad, sizeof(sun_ad), char); sun_ad.sun_family = AF_UNIX; - pathname_pv = SvPV(pathname,len); + pathname_pv = SvPVbyte(pathname,len); if (len > sizeof(sun_ad.sun_path)) { warn("Path length (%" UVuf ") is longer than maximum supported length" " (%" UVuf ") and will be truncated", @@ -910,9 +932,9 @@ unpack_sockaddr_un(sun_sv) if (!SvOK(sun_sv)) croak("Undefined address for %s", "Socket::unpack_sockaddr_un"); sun_ad = SvPVbyte(sun_sv,sockaddrlen); -# if defined(__linux__) || defined(HAS_SOCKADDR_SA_LEN) - /* On Linux or *BSD sockaddrlen on sockets returned by accept, recvfrom, - getpeername and getsockname is not equal to sizeof(addr). */ +# if defined(__linux__) || defined(__CYGWIN__) || defined(HAS_SOCKADDR_SA_LEN) + /* On Linux, Cygwin or *BSD sockaddrlen on sockets returned by accept, + * recvfrom, getpeername and getsockname is not equal to sizeof(addr). */ if (sockaddrlen < sizeof(addr)) { Copy(sun_ad, &addr, sockaddrlen, char); Zero(((char*)&addr) + sockaddrlen, sizeof(addr) - sockaddrlen, char); @@ -974,8 +996,12 @@ pack_sockaddr_in(port_sv, ip_address_sv) STRLEN addrlen; unsigned short port = 0; char * ip_address; - if (SvOK(port_sv)) + if (SvOK(port_sv)) { port = SvUV(port_sv); + if (SvUV(port_sv) > 0xFFFF) + warn("Port number above 0xFFFF, will be truncated to %d for %s", + port, "Socket::pack_sockaddr_in"); + } if (!SvOK(ip_address_sv)) croak("Undefined address for %s", "Socket::pack_sockaddr_in"); if (DO_UTF8(ip_address_sv) && !sv_utf8_downgrade(ip_address_sv, 1)) @@ -1026,7 +1052,7 @@ unpack_sockaddr_in(sin_sv) } ip_address_sv = newSVpvn((char *)&addr.sin_addr, sizeof(addr.sin_addr)); - if(GIMME_V == G_ARRAY) { + if(GIMME_V == G_LIST) { EXTEND(SP, 2); mPUSHi(ntohs(addr.sin_port)); mPUSHs(ip_address_sv); @@ -1049,8 +1075,12 @@ pack_sockaddr_in6(port_sv, sin6_addr, scope_id=0, flowinfo=0) struct sockaddr_in6 sin6; char * addrbytes; STRLEN addrlen; - if (SvOK(port_sv)) + if (SvOK(port_sv)) { port = SvUV(port_sv); + if (SvUV(port_sv) > 0xFFFF) + warn("Port number above 0xFFFF, will be truncated to %d for %s", + port, "Socket::pack_sockaddr_in6"); + } if (!SvOK(sin6_addr)) croak("Undefined address for %s", "Socket::pack_sockaddr_in6"); if (DO_UTF8(sin6_addr) && !sv_utf8_downgrade(sin6_addr, 1)) @@ -1106,7 +1136,7 @@ unpack_sockaddr_in6(sin6_sv) "Socket::unpack_sockaddr_in6", sin6.sin6_family, AF_INET6); ip_address_sv = newSVpvn((char *)&sin6.sin6_addr, sizeof(sin6.sin6_addr)); - if(GIMME_V == G_ARRAY) { + if(GIMME_V == G_LIST) { EXTEND(SP, 4); mPUSHi(ntohs(sin6.sin6_port)); mPUSHs(ip_address_sv); @@ -1145,7 +1175,7 @@ inet_ntop(af, ip_address_sv) if (DO_UTF8(ip_address_sv) && !sv_utf8_downgrade(ip_address_sv, 1)) croak("Wide character in %s", "Socket::inet_ntop"); - ip_address = SvPV(ip_address_sv, addrlen); + ip_address = SvPVbyte(ip_address_sv, addrlen); switch(af) { case AF_INET: diff --git a/gnu/usr.bin/perl/cpan/Socket/t/getaddrinfo.t b/gnu/usr.bin/perl/cpan/Socket/t/getaddrinfo.t index b33a3e7c6ea..971e51679e9 100644 --- a/gnu/usr.bin/perl/cpan/Socket/t/getaddrinfo.t +++ b/gnu/usr.bin/perl/cpan/Socket/t/getaddrinfo.t @@ -1,3 +1,4 @@ +use v5.6.1; use strict; use warnings; use Test::More tests => 31; diff --git a/gnu/usr.bin/perl/cpan/Socket/t/getnameinfo.t b/gnu/usr.bin/perl/cpan/Socket/t/getnameinfo.t index c5655bc4e64..9441fb48eb0 100644 --- a/gnu/usr.bin/perl/cpan/Socket/t/getnameinfo.t +++ b/gnu/usr.bin/perl/cpan/Socket/t/getnameinfo.t @@ -1,3 +1,4 @@ +use v5.6.1; use strict; use warnings; use Test::More tests => 13; diff --git a/gnu/usr.bin/perl/cpan/Socket/t/socketpair.t b/gnu/usr.bin/perl/cpan/Socket/t/socketpair.t index cb11e26e55e..a803302db93 100644 --- a/gnu/usr.bin/perl/cpan/Socket/t/socketpair.t +++ b/gnu/usr.bin/perl/cpan/Socket/t/socketpair.t @@ -1,9 +1,14 @@ #!./perl -w +use v5.6.1; +use strict; +use warnings; + my $child; my $can_fork; my $has_perlio; +our %Config; BEGIN { require Config; import Config; $can_fork = $Config{'d_fork'} || $Config{'d_pseudofork'}; @@ -63,8 +68,9 @@ if( !$Config{d_alarm} ) { } elsif( !$can_fork ) { plan skip_all => "fork() not implemented on this platform"; } else { + my ($lefth, $righth); # This should fail but not die if there is real socketpair - eval {socketpair LEFT, RIGHT, -1, -1, -1}; + eval {socketpair $lefth, $righth, -1, -1, -1}; if ($@ =~ /^Unsupported socket function "socketpair" called/ || $! =~ /^The operation requested is not supported./) { # Stratus VOS plan skip_all => 'No socketpair (real or emulated)'; @@ -81,90 +87,95 @@ if( !$Config{d_alarm} ) { # But we'll install an alarm handler in case any of the races below fail. $SIG{ALRM} = sub {die "Unexpected alarm during testing"}; -ok (socketpair (LEFT, RIGHT, AF_UNIX, SOCK_STREAM, PF_UNSPEC), - "socketpair (LEFT, RIGHT, AF_UNIX, SOCK_STREAM, PF_UNSPEC)") - or print STDERR "# \$\! = $!\n"; - -if ($has_perlio) { - binmode(LEFT, ":bytes"); - binmode(RIGHT, ":bytes"); -} - my @left = ("hello ", "world\n"); my @right = ("perl ", "rules!"); # Not like I'm trying to bias any survey here. -foreach (@left) { - # is (syswrite (LEFT, $_), length $_, "write " . _qq ($_) . " to left"); - is (syswrite (LEFT, $_), length $_, "syswrite to left"); -} -foreach (@right) { - # is (syswrite (RIGHT, $_), length $_, "write " . _qq ($_) . " to right"); - is (syswrite (RIGHT, $_), length $_, "syswrite to right"); -} - -# stream socket, so our writes will become joined: -my ($buffer, $expect); -$expect = join '', @right; -undef $buffer; -is (read (LEFT, $buffer, length $expect), length $expect, "read on left"); -is ($buffer, $expect, "content what we expected?"); -$expect = join '', @left; -undef $buffer; -is (read (RIGHT, $buffer, length $expect), length $expect, "read on right"); -is ($buffer, $expect, "content what we expected?"); - -ok (shutdown(LEFT, SHUT_WR), "shutdown left for writing"); -# This will hang forever if eof is buggy, and alarm doesn't interrupt system -# Calls. Hence the child process minder. -SKIP: { - skip "SCO Unixware / OSR have a bug with shutdown",2 if $^O =~ /^(?:svr|sco)/; - local $SIG{ALRM} = sub { warn "EOF on right took over 3 seconds" }; - local $TODO = "Known problems with unix sockets on $^O" - if $^O eq 'hpux' || $^O eq 'super-ux'; - alarm 3; - $! = 0; - ok (eof RIGHT, "right is at EOF"); - local $TODO = "Known problems with unix sockets on $^O" - if $^O eq 'unicos' || $^O eq 'unicosmk'; - is ($!, '', 'and $! should report no error'); - alarm 60; -} +my @gripping = (chr 255, chr 127); -my $err = $!; -$SIG{PIPE} = 'IGNORE'; -{ - local $SIG{ALRM} = - sub { warn "syswrite to left didn't fail within 3 seconds" }; - alarm 3; - # Split the system call from the is() - is() does IO so - # (say) a flush may do a seek which on a pipe may disturb errno - my $ans = syswrite (LEFT, "void"); - $err = $!; - is ($ans, undef, "syswrite to shutdown left should fail"); - alarm 60; -} { - # This may need skipping on some OSes - restoring value saved above - # should help - $! = $err; - ok (($!{EPIPE} or $!{ESHUTDOWN}), '$! should be EPIPE or ESHUTDOWN') - or printf STDERR "# \$\! = %d (%s)\n", $err, $err; -} + my ($lefth, $righth); -my @gripping = (chr 255, chr 127); -foreach (@gripping) { - is (syswrite (RIGHT, $_), length $_, "syswrite to right"); -} + ok (socketpair ($lefth, $righth, AF_UNIX, SOCK_STREAM, PF_UNSPEC), + "socketpair (\$lefth, \$righth, AF_UNIX, SOCK_STREAM, PF_UNSPEC)") + or print STDERR "# \$\! = $!\n"; -ok (!eof LEFT, "left is not at EOF"); + if ($has_perlio) { + binmode($lefth, ":bytes"); + binmode($righth, ":bytes"); + } -$expect = join '', @gripping; -undef $buffer; -is (read (LEFT, $buffer, length $expect), length $expect, "read on left"); -is ($buffer, $expect, "content what we expected?"); + foreach (@left) { + # is (syswrite ($lefth, $_), length $_, "write " . _qq ($_) . " to left"); + is (syswrite ($lefth, $_), length $_, "syswrite to left"); + } + foreach (@right) { + # is (syswrite ($righth, $_), length $_, "write " . _qq ($_) . " to right"); + is (syswrite ($righth, $_), length $_, "syswrite to right"); + } -ok (close LEFT, "close left"); -ok (close RIGHT, "close right"); + # stream socket, so our writes will become joined: + my ($buffer, $expect); + $expect = join '', @right; + undef $buffer; + is (read ($lefth, $buffer, length $expect), length $expect, "read on left"); + is ($buffer, $expect, "content what we expected?"); + $expect = join '', @left; + undef $buffer; + is (read ($righth, $buffer, length $expect), length $expect, "read on right"); + is ($buffer, $expect, "content what we expected?"); + + ok (shutdown($lefth, SHUT_WR), "shutdown left for writing"); + # This will hang forever if eof is buggy, and alarm doesn't interrupt system + # Calls. Hence the child process minder. + SKIP: { + skip "SCO Unixware / OSR have a bug with shutdown",2 if $^O =~ /^(?:svr|sco)/; + local $SIG{ALRM} = sub { warn "EOF on right took over 3 seconds" }; + local $TODO = "Known problems with unix sockets on $^O" + if $^O eq 'hpux' || $^O eq 'super-ux'; + alarm 3; + $! = 0; + ok (eof $righth, "right is at EOF"); + local $TODO = "Known problems with unix sockets on $^O" + if $^O eq 'unicos' || $^O eq 'unicosmk'; + is ($!, '', 'and $! should report no error'); + alarm 60; + } + + my $err = $!; + $SIG{PIPE} = 'IGNORE'; + { + local $SIG{ALRM} = + sub { warn "syswrite to left didn't fail within 3 seconds" }; + alarm 3; + # Split the system call from the is() - is() does IO so + # (say) a flush may do a seek which on a pipe may disturb errno + my $ans = syswrite ($lefth, "void"); + $err = $!; + is ($ans, undef, "syswrite to shutdown left should fail"); + alarm 60; + } + { + # This may need skipping on some OSes - restoring value saved above + # should help + $! = $err; + ok (($!{EPIPE} or $!{ESHUTDOWN}), '$! should be EPIPE or ESHUTDOWN') + or printf STDERR "# \$\! = %d (%s)\n", $err, $err; + } + + foreach (@gripping) { + is (syswrite ($righth, $_), length $_, "syswrite to right"); + } + + ok (!eof $lefth, "left is not at EOF"); + + $expect = join '', @gripping; + undef $buffer; + is (read ($lefth, $buffer, length $expect), length $expect, "read on left"); + is ($buffer, $expect, "content what we expected?"); + + ok (close $lefth, "close left"); + ok (close $righth, "close right"); +} # And now datagrams @@ -172,44 +183,49 @@ ok (close RIGHT, "close right"); # guarantee that the stack won't drop a UDP packet, even if it is for localhost. SKIP: { - skip "No usable SOCK_DGRAM for socketpair", 24 if ($^O =~ /^(MSWin32|os2)\z/); skip "alarm doesn't interrupt I/O on this Perl", 24 if "$]" < 5.008; + + my $success = socketpair my $lefth, my $righth, AF_UNIX, SOCK_DGRAM, PF_UNSPEC; + + skip "No useable SOCK_DGRAM for socketpair", 24 if !$success and + ($!{EAFNOSUPPORT} or $!{EOPNOTSUPP} or $!{EPROTONOSUPPORT} or $!{EPROTOTYPE}); + # Maybe this test is redundant now? + skip "No usable SOCK_DGRAM for socketpair", 24 if ($^O =~ /^(MSWin32|os2)\z/); local $TODO = "socketpair not supported on $^O" if $^O eq 'nto'; - ok (socketpair (LEFT, RIGHT, AF_UNIX, SOCK_DGRAM, PF_UNSPEC), - "socketpair (LEFT, RIGHT, AF_UNIX, SOCK_DGRAM, PF_UNSPEC)") + ok ($success, "socketpair (\$left, \$righth, AF_UNIX, SOCK_DGRAM, PF_UNSPEC)") or print STDERR "# \$\! = $!\n"; if ($has_perlio) { - binmode(LEFT, ":bytes"); - binmode(RIGHT, ":bytes"); + binmode($lefth, ":bytes"); + binmode($righth, ":bytes"); } foreach (@left) { - # is (syswrite (LEFT, $_), length $_, "write " . _qq ($_) . " to left"); - is (syswrite (LEFT, $_), length $_, "syswrite to left"); + # is (syswrite ($lefth, $_), length $_, "write " . _qq ($_) . " to left"); + is (syswrite ($lefth, $_), length $_, "syswrite to left"); } foreach (@right) { - # is (syswrite (RIGHT, $_), length $_, "write " . _qq ($_) . " to right"); - is (syswrite (RIGHT, $_), length $_, "syswrite to right"); + # is (syswrite ($righth, $_), length $_, "write " . _qq ($_) . " to right"); + is (syswrite ($righth, $_), length $_, "syswrite to right"); } # stream socket, so our writes will become joined: - my ($total); + my ($total, $buffer); $total = join '', @right; - foreach $expect (@right) { + foreach my $expect (@right) { undef $buffer; - is (sysread (LEFT, $buffer, length $total), length $expect, "read on left"); + is (sysread ($lefth, $buffer, length $total), length $expect, "read on left"); is ($buffer, $expect, "content what we expected?"); } $total = join '', @left; - foreach $expect (@left) { + foreach my $expect (@left) { undef $buffer; - is (sysread (RIGHT, $buffer, length $total), length $expect, "read on right"); + is (sysread ($righth, $buffer, length $total), length $expect, "read on right"); is ($buffer, $expect, "content what we expected?"); } - ok (shutdown(LEFT, 1), "shutdown left for writing"); + ok (shutdown($lefth, 1), "shutdown left for writing"); # eof uses buffering. eof is indicated by a sysread of zero. # but for a datagram socket there's no way it can know nothing will ever be @@ -222,7 +238,7 @@ SKIP: { print "# Approximate forever as 3 seconds. Wait 'forever'...\n"; alarm 3; undef $buffer; - is (sysread (RIGHT, $buffer, 1), undef, + is (sysread ($righth, $buffer, 1), undef, "read on right should be interrupted"); is ($alarmed, 1, "alarm should have fired"); } @@ -230,18 +246,18 @@ SKIP: { alarm 30; foreach (@gripping) { - is (syswrite (RIGHT, $_), length $_, "syswrite to right"); + is (syswrite ($righth, $_), length $_, "syswrite to right"); } $total = join '', @gripping; - foreach $expect (@gripping) { + foreach my $expect (@gripping) { undef $buffer; - is (sysread (LEFT, $buffer, length $total), length $expect, "read on left"); + is (sysread ($lefth, $buffer, length $total), length $expect, "read on left"); is ($buffer, $expect, "content what we expected?"); } - ok (close LEFT, "close left"); - ok (close RIGHT, "close right"); + ok (close $lefth, "close left"); + ok (close $righth, "close right"); } # end of DGRAM SKIP diff --git a/gnu/usr.bin/perl/cpan/Sys-Syslog/Makefile.PL b/gnu/usr.bin/perl/cpan/Sys-Syslog/Makefile.PL index c76963d0b96..d09ba69fc90 100644 --- a/gnu/usr.bin/perl/cpan/Sys-Syslog/Makefile.PL +++ b/gnu/usr.bin/perl/cpan/Sys-Syslog/Makefile.PL @@ -14,7 +14,7 @@ if ($] < 5.008) { } # create a lib/ dir in order to avoid warnings in Test::Distribution -mkdir "lib", $ENV{PERL_CORE} ? 0770 : 0755; +mkdir "lib", 0755; # virtual paths given to EU::MM my %virtual_path = ( 'Syslog.pm' => '$(INST_LIBDIR)/Syslog.pm' ); diff --git a/gnu/usr.bin/perl/cpan/Test-Harness/bin/prove b/gnu/usr.bin/perl/cpan/Test-Harness/bin/prove index 3d41db06bd0..1bd27330620 100644 --- a/gnu/usr.bin/perl/cpan/Test-Harness/bin/prove +++ b/gnu/usr.bin/perl/cpan/Test-Harness/bin/prove @@ -207,7 +207,7 @@ new problems have been introduced. =item C -Run all tests in normal order. Multple options may be specified, so to +Run all tests in normal order. Multiple options may be specified, so to run all tests with the failures from last time first: $ prove -b --state=failed,all,save diff --git a/gnu/usr.bin/perl/cpan/Test-Harness/lib/App/Prove.pm b/gnu/usr.bin/perl/cpan/Test-Harness/lib/App/Prove.pm index 9298726d24f..e2785cbee70 100644 --- a/gnu/usr.bin/perl/cpan/Test-Harness/lib/App/Prove.pm +++ b/gnu/usr.bin/perl/cpan/Test-Harness/lib/App/Prove.pm @@ -18,11 +18,11 @@ App::Prove - Implements the C command. =head1 VERSION -Version 3.42 +Version 3.44 =cut -our $VERSION = '3.42'; +our $VERSION = '3.44'; =head1 DESCRIPTION @@ -344,13 +344,13 @@ sub _get_args { # Handle verbose, quiet, really_quiet flags my %verb_map = ( verbose => 1, quiet => -1, really_quiet => -2, ); - my @verb_adj = grep {$_} map { $self->$_() ? $verb_map{$_} : 0 } + my @verb_adj = map { $self->$_() ? $verb_map{$_} : () } keys %verb_map; die "Only one of verbose, quiet or really_quiet should be specified\n" if @verb_adj > 1; - $args{verbosity} = shift @verb_adj || 0; + $args{verbosity} = shift @verb_adj if @verb_adj; for my $a (qw( merge failures comments timer directives normalize )) { $args{$a} = 1 if $self->$a(); diff --git a/gnu/usr.bin/perl/cpan/Test-Harness/lib/App/Prove/State.pm b/gnu/usr.bin/perl/cpan/Test-Harness/lib/App/Prove/State.pm index 0b61a824590..f3f1125e6f1 100644 --- a/gnu/usr.bin/perl/cpan/Test-Harness/lib/App/Prove/State.pm +++ b/gnu/usr.bin/perl/cpan/Test-Harness/lib/App/Prove/State.pm @@ -25,11 +25,11 @@ App::Prove::State - State storage for the C command. =head1 VERSION -Version 3.42 +Version 3.44 =cut -our $VERSION = '3.42'; +our $VERSION = '3.44'; =head1 DESCRIPTION diff --git a/gnu/usr.bin/perl/cpan/Test-Harness/lib/App/Prove/State/Result.pm b/gnu/usr.bin/perl/cpan/Test-Harness/lib/App/Prove/State/Result.pm index 8f89c775aff..72b625ff9a2 100644 --- a/gnu/usr.bin/perl/cpan/Test-Harness/lib/App/Prove/State/Result.pm +++ b/gnu/usr.bin/perl/cpan/Test-Harness/lib/App/Prove/State/Result.pm @@ -14,11 +14,11 @@ App::Prove::State::Result - Individual test suite results. =head1 VERSION -Version 3.42 +Version 3.44 =cut -our $VERSION = '3.42'; +our $VERSION = '3.44'; =head1 DESCRIPTION diff --git a/gnu/usr.bin/perl/cpan/Test-Harness/lib/App/Prove/State/Result/Test.pm b/gnu/usr.bin/perl/cpan/Test-Harness/lib/App/Prove/State/Result/Test.pm index b795280f307..a45911e4611 100644 --- a/gnu/usr.bin/perl/cpan/Test-Harness/lib/App/Prove/State/Result/Test.pm +++ b/gnu/usr.bin/perl/cpan/Test-Harness/lib/App/Prove/State/Result/Test.pm @@ -9,11 +9,11 @@ App::Prove::State::Result::Test - Individual test results. =head1 VERSION -Version 3.42 +Version 3.44 =cut -our $VERSION = '3.42'; +our $VERSION = '3.44'; =head1 DESCRIPTION diff --git a/gnu/usr.bin/perl/cpan/Test-Harness/lib/TAP/Base.pm b/gnu/usr.bin/perl/cpan/Test-Harness/lib/TAP/Base.pm index 78e07ab0547..d3de9339e06 100644 --- a/gnu/usr.bin/perl/cpan/Test-Harness/lib/TAP/Base.pm +++ b/gnu/usr.bin/perl/cpan/Test-Harness/lib/TAP/Base.pm @@ -12,11 +12,11 @@ and L =head1 VERSION -Version 3.42 +Version 3.44 =cut -our $VERSION = '3.42'; +our $VERSION = '3.44'; use constant GOT_TIME_HIRES => do { eval 'use Time::HiRes qw(time);'; diff --git a/gnu/usr.bin/perl/cpan/Test-Harness/lib/TAP/Formatter/Base.pm b/gnu/usr.bin/perl/cpan/Test-Harness/lib/TAP/Formatter/Base.pm index bf65e12ca15..33fdd991f50 100644 --- a/gnu/usr.bin/perl/cpan/Test-Harness/lib/TAP/Formatter/Base.pm +++ b/gnu/usr.bin/perl/cpan/Test-Harness/lib/TAP/Formatter/Base.pm @@ -58,11 +58,11 @@ TAP::Formatter::Base - Base class for harness output delegates =head1 VERSION -Version 3.42 +Version 3.44 =cut -our $VERSION = '3.42'; +our $VERSION = '3.44'; =head1 DESCRIPTION @@ -387,7 +387,30 @@ sub _summary_test_header { $spaces = ' ' unless $spaces; my $output = $self->_get_output_method($parser); my $wait = $parser->wait; - defined $wait or $wait = '(none)'; + + if (defined $wait) { + my $signum = $wait & 0x7f; + + my $description; + + if ($signum) { + require Config; + my @names = split ' ', $Config::Config{'sig_name'}; + $description = "Signal: $names[$signum]"; + + my $dumped = $wait & 0x80; + $description .= ', dumped core' if $dumped; + } + elsif ($wait != 0) { + $description = sprintf 'exited %d', ($wait >> 8); + } + + $wait .= " ($description)" if $wait != 0; + } + else { + $wait = '(none)'; + } + $self->$output( sprintf "$test$spaces(Wstat: %s Tests: %d Failed: %d)\n", $wait, $parser->tests_run, scalar $parser->failed diff --git a/gnu/usr.bin/perl/cpan/Test-Harness/lib/TAP/Formatter/Color.pm b/gnu/usr.bin/perl/cpan/Test-Harness/lib/TAP/Formatter/Color.pm index 79807901012..b10f2d5c362 100644 --- a/gnu/usr.bin/perl/cpan/Test-Harness/lib/TAP/Formatter/Color.pm +++ b/gnu/usr.bin/perl/cpan/Test-Harness/lib/TAP/Formatter/Color.pm @@ -39,11 +39,11 @@ TAP::Formatter::Color - Run Perl test scripts with color =head1 VERSION -Version 3.42 +Version 3.44 =cut -our $VERSION = '3.42'; +our $VERSION = '3.44'; =head1 DESCRIPTION diff --git a/gnu/usr.bin/perl/cpan/Test-Harness/lib/TAP/Formatter/Console.pm b/gnu/usr.bin/perl/cpan/Test-Harness/lib/TAP/Formatter/Console.pm index 1c82ef43c6c..d7df761cf84 100644 --- a/gnu/usr.bin/perl/cpan/Test-Harness/lib/TAP/Formatter/Console.pm +++ b/gnu/usr.bin/perl/cpan/Test-Harness/lib/TAP/Formatter/Console.pm @@ -11,11 +11,11 @@ TAP::Formatter::Console - Harness output delegate for default console output =head1 VERSION -Version 3.42 +Version 3.44 =cut -our $VERSION = '3.42'; +our $VERSION = '3.44'; =head1 DESCRIPTION diff --git a/gnu/usr.bin/perl/cpan/Test-Harness/lib/TAP/Formatter/Console/ParallelSession.pm b/gnu/usr.bin/perl/cpan/Test-Harness/lib/TAP/Formatter/Console/ParallelSession.pm index 6826b4e379f..867e025e638 100644 --- a/gnu/usr.bin/perl/cpan/Test-Harness/lib/TAP/Formatter/Console/ParallelSession.pm +++ b/gnu/usr.bin/perl/cpan/Test-Harness/lib/TAP/Formatter/Console/ParallelSession.pm @@ -41,11 +41,11 @@ TAP::Formatter::Console::ParallelSession - Harness output delegate for parallel =head1 VERSION -Version 3.42 +Version 3.44 =cut -our $VERSION = '3.42'; +our $VERSION = '3.44'; =head1 DESCRIPTION diff --git a/gnu/usr.bin/perl/cpan/Test-Harness/lib/TAP/Formatter/Console/Session.pm b/gnu/usr.bin/perl/cpan/Test-Harness/lib/TAP/Formatter/Console/Session.pm index 492bdd7b081..aba854c4ead 100644 --- a/gnu/usr.bin/perl/cpan/Test-Harness/lib/TAP/Formatter/Console/Session.pm +++ b/gnu/usr.bin/perl/cpan/Test-Harness/lib/TAP/Formatter/Console/Session.pm @@ -26,11 +26,11 @@ TAP::Formatter::Console::Session - Harness output delegate for default console o =head1 VERSION -Version 3.42 +Version 3.44 =cut -our $VERSION = '3.42'; +our $VERSION = '3.44'; =head1 DESCRIPTION diff --git a/gnu/usr.bin/perl/cpan/Test-Harness/lib/TAP/Formatter/File.pm b/gnu/usr.bin/perl/cpan/Test-Harness/lib/TAP/Formatter/File.pm index ced7b3f85ea..c103e52cce3 100644 --- a/gnu/usr.bin/perl/cpan/Test-Harness/lib/TAP/Formatter/File.pm +++ b/gnu/usr.bin/perl/cpan/Test-Harness/lib/TAP/Formatter/File.pm @@ -13,11 +13,11 @@ TAP::Formatter::File - Harness output delegate for file output =head1 VERSION -Version 3.42 +Version 3.44 =cut -our $VERSION = '3.42'; +our $VERSION = '3.44'; =head1 DESCRIPTION diff --git a/gnu/usr.bin/perl/cpan/Test-Harness/lib/TAP/Formatter/File/Session.pm b/gnu/usr.bin/perl/cpan/Test-Harness/lib/TAP/Formatter/File/Session.pm index 3403540e40b..e167bc5cec5 100644 --- a/gnu/usr.bin/perl/cpan/Test-Harness/lib/TAP/Formatter/File/Session.pm +++ b/gnu/usr.bin/perl/cpan/Test-Harness/lib/TAP/Formatter/File/Session.pm @@ -10,11 +10,11 @@ TAP::Formatter::File::Session - Harness output delegate for file output =head1 VERSION -Version 3.42 +Version 3.44 =cut -our $VERSION = '3.42'; +our $VERSION = '3.44'; =head1 DESCRIPTION diff --git a/gnu/usr.bin/perl/cpan/Test-Harness/lib/TAP/Formatter/Session.pm b/gnu/usr.bin/perl/cpan/Test-Harness/lib/TAP/Formatter/Session.pm index 2022220aaaf..59b6afa3007 100644 --- a/gnu/usr.bin/perl/cpan/Test-Harness/lib/TAP/Formatter/Session.pm +++ b/gnu/usr.bin/perl/cpan/Test-Harness/lib/TAP/Formatter/Session.pm @@ -23,11 +23,11 @@ TAP::Formatter::Session - Abstract base class for harness output delegate =head1 VERSION -Version 3.42 +Version 3.44 =cut -our $VERSION = '3.42'; +our $VERSION = '3.44'; =head1 METHODS diff --git a/gnu/usr.bin/perl/cpan/Test-Harness/lib/TAP/Harness.pm b/gnu/usr.bin/perl/cpan/Test-Harness/lib/TAP/Harness.pm index a2f6daf1dbd..54782decf4b 100644 --- a/gnu/usr.bin/perl/cpan/Test-Harness/lib/TAP/Harness.pm +++ b/gnu/usr.bin/perl/cpan/Test-Harness/lib/TAP/Harness.pm @@ -16,11 +16,11 @@ TAP::Harness - Run test scripts with statistics =head1 VERSION -Version 3.42 +Version 3.44 =cut -our $VERSION = '3.42'; +our $VERSION = '3.44'; $ENV{HARNESS_ACTIVE} = 1; $ENV{HARNESS_VERSION} = $VERSION; @@ -555,8 +555,11 @@ sub runtests { $self->_make_callback( 'after_runtests', $aggregate ); }; my $run = sub { - $self->aggregate_tests( $aggregate, @tests ); + my $bailout; + eval { $self->aggregate_tests( $aggregate, @tests ); 1 } + or do { $bailout = $@ || 'unknown_error' }; $finish->(); + die $bailout if defined $bailout; }; if ( $self->trap ) { @@ -595,7 +598,12 @@ sub _after_test { } sub _bailout { - my ( $self, $result ) = @_; + my ( $self, $result, $parser, $session, $aggregate, $job ) = @_; + + $self->finish_parser( $parser, $session ); + $self->_after_test( $aggregate, $job, $parser ); + $job->finish; + my $explanation = $result->explanation; die "FAILED--Further testing stopped" . ( $explanation ? ": $explanation\n" : ".\n" ); @@ -619,13 +627,18 @@ sub _aggregate_parallel { my ( $parser, $session ) = $self->make_parser($job); $mux->add( $parser, [ $session, $job ] ); + + # The job has started: begin the timers + $parser->start_time( $parser->get_time ); + $parser->start_times( $parser->get_times ); } if ( my ( $parser, $stash, $result ) = $mux->next ) { my ( $session, $job ) = @$stash; if ( defined $result ) { $session->result($result); - $self->_bailout($result) if $result->is_bailout; + $self->_bailout($result, $parser, $session, $aggregate, $job ) + if $result->is_bailout; } else { @@ -657,7 +670,7 @@ sub _aggregate_single { # Keep reading until input is exhausted in the hope # of allowing any pending diagnostics to show up. 1 while $parser->next; - $self->_bailout($result); + $self->_bailout($result, $parser, $session, $aggregate, $job ); } } diff --git a/gnu/usr.bin/perl/cpan/Test-Harness/lib/TAP/Harness/Env.pm b/gnu/usr.bin/perl/cpan/Test-Harness/lib/TAP/Harness/Env.pm index 077626df2de..c27f3e5fbba 100644 --- a/gnu/usr.bin/perl/cpan/Test-Harness/lib/TAP/Harness/Env.pm +++ b/gnu/usr.bin/perl/cpan/Test-Harness/lib/TAP/Harness/Env.pm @@ -7,7 +7,7 @@ use constant IS_VMS => ( $^O eq 'VMS' ); use TAP::Object; use Text::ParseWords qw/shellwords/; -our $VERSION = '3.42'; +our $VERSION = '3.44'; # Get the parts of @INC which are changed from the stock list AND # preserve reordering of stock directories. @@ -126,7 +126,7 @@ TAP::Harness::Env - Parsing harness related environmental variables where approp =head1 VERSION -Version 3.42 +Version 3.44 =head1 SYNOPSIS @@ -189,7 +189,7 @@ C =item C<< fPackage-With-Dashes >> Set the formatter_class of the harness being run. Since the C -is seperated by C<:>, we use C<-> instead. +is separated by C<:>, we use C<-> instead. =back diff --git a/gnu/usr.bin/perl/cpan/Test-Harness/lib/TAP/Object.pm b/gnu/usr.bin/perl/cpan/Test-Harness/lib/TAP/Object.pm index e9da17f4ff1..ac7c1951792 100644 --- a/gnu/usr.bin/perl/cpan/Test-Harness/lib/TAP/Object.pm +++ b/gnu/usr.bin/perl/cpan/Test-Harness/lib/TAP/Object.pm @@ -9,11 +9,11 @@ TAP::Object - Base class that provides common functionality to all C mod =head1 VERSION -Version 3.42 +Version 3.44 =cut -our $VERSION = '3.42'; +our $VERSION = '3.44'; =head1 SYNOPSIS diff --git a/gnu/usr.bin/perl/cpan/Test-Harness/lib/TAP/Parser.pm b/gnu/usr.bin/perl/cpan/Test-Harness/lib/TAP/Parser.pm index 34f411048e3..8f0d7e17fc7 100644 --- a/gnu/usr.bin/perl/cpan/Test-Harness/lib/TAP/Parser.pm +++ b/gnu/usr.bin/perl/cpan/Test-Harness/lib/TAP/Parser.pm @@ -27,11 +27,11 @@ TAP::Parser - Parse L output =head1 VERSION -Version 3.42 +Version 3.44 =cut -our $VERSION = '3.42'; +our $VERSION = '3.44'; my $DEFAULT_TAP_VERSION = 12; my $MAX_TAP_VERSION = 13; @@ -1384,8 +1384,8 @@ sub _iter { my $state = 'INIT'; my $state_table = $self->_make_state_table; - $self->start_time( $self->get_time ); - $self->start_times( $self->get_times ); + $self->start_time( $self->get_time ) unless $self->{start_time}; + $self->start_times( $self->get_times ) unless $self->{start_times}; # Make next_state closure my $next_state = sub { diff --git a/gnu/usr.bin/perl/cpan/Test-Harness/lib/TAP/Parser/Aggregator.pm b/gnu/usr.bin/perl/cpan/Test-Harness/lib/TAP/Parser/Aggregator.pm index 65be445f308..af961e8b737 100644 --- a/gnu/usr.bin/perl/cpan/Test-Harness/lib/TAP/Parser/Aggregator.pm +++ b/gnu/usr.bin/perl/cpan/Test-Harness/lib/TAP/Parser/Aggregator.pm @@ -12,11 +12,11 @@ TAP::Parser::Aggregator - Aggregate TAP::Parser results =head1 VERSION -Version 3.42 +Version 3.44 =cut -our $VERSION = '3.42'; +our $VERSION = '3.44'; =head1 SYNOPSIS diff --git a/gnu/usr.bin/perl/cpan/Test-Harness/lib/TAP/Parser/Grammar.pm b/gnu/usr.bin/perl/cpan/Test-Harness/lib/TAP/Parser/Grammar.pm index ff0f2aa2ad7..398396ca13b 100644 --- a/gnu/usr.bin/perl/cpan/Test-Harness/lib/TAP/Parser/Grammar.pm +++ b/gnu/usr.bin/perl/cpan/Test-Harness/lib/TAP/Parser/Grammar.pm @@ -14,11 +14,11 @@ TAP::Parser::Grammar - A grammar for the Test Anything Protocol. =head1 VERSION -Version 3.42 +Version 3.44 =cut -our $VERSION = '3.42'; +our $VERSION = '3.44'; =head1 SYNOPSIS diff --git a/gnu/usr.bin/perl/cpan/Test-Harness/lib/TAP/Parser/Iterator.pm b/gnu/usr.bin/perl/cpan/Test-Harness/lib/TAP/Parser/Iterator.pm index fab48cb2bed..1ce907f49da 100644 --- a/gnu/usr.bin/perl/cpan/Test-Harness/lib/TAP/Parser/Iterator.pm +++ b/gnu/usr.bin/perl/cpan/Test-Harness/lib/TAP/Parser/Iterator.pm @@ -11,11 +11,11 @@ TAP::Parser::Iterator - Base class for TAP source iterators =head1 VERSION -Version 3.42 +Version 3.44 =cut -our $VERSION = '3.42'; +our $VERSION = '3.44'; =head1 SYNOPSIS diff --git a/gnu/usr.bin/perl/cpan/Test-Harness/lib/TAP/Parser/Iterator/Array.pm b/gnu/usr.bin/perl/cpan/Test-Harness/lib/TAP/Parser/Iterator/Array.pm index 5a098cca7c0..8f8dc4681e4 100644 --- a/gnu/usr.bin/perl/cpan/Test-Harness/lib/TAP/Parser/Iterator/Array.pm +++ b/gnu/usr.bin/perl/cpan/Test-Harness/lib/TAP/Parser/Iterator/Array.pm @@ -11,11 +11,11 @@ TAP::Parser::Iterator::Array - Iterator for array-based TAP sources =head1 VERSION -Version 3.42 +Version 3.44 =cut -our $VERSION = '3.42'; +our $VERSION = '3.44'; =head1 SYNOPSIS diff --git a/gnu/usr.bin/perl/cpan/Test-Harness/lib/TAP/Parser/Iterator/Process.pm b/gnu/usr.bin/perl/cpan/Test-Harness/lib/TAP/Parser/Iterator/Process.pm index a121485aec4..144fc13fcf0 100644 --- a/gnu/usr.bin/perl/cpan/Test-Harness/lib/TAP/Parser/Iterator/Process.pm +++ b/gnu/usr.bin/perl/cpan/Test-Harness/lib/TAP/Parser/Iterator/Process.pm @@ -16,11 +16,11 @@ TAP::Parser::Iterator::Process - Iterator for process-based TAP sources =head1 VERSION -Version 3.42 +Version 3.44 =cut -our $VERSION = '3.42'; +our $VERSION = '3.44'; =head1 SYNOPSIS diff --git a/gnu/usr.bin/perl/cpan/Test-Harness/lib/TAP/Parser/Iterator/Stream.pm b/gnu/usr.bin/perl/cpan/Test-Harness/lib/TAP/Parser/Iterator/Stream.pm index 2a21485357f..dab28ea11a4 100644 --- a/gnu/usr.bin/perl/cpan/Test-Harness/lib/TAP/Parser/Iterator/Stream.pm +++ b/gnu/usr.bin/perl/cpan/Test-Harness/lib/TAP/Parser/Iterator/Stream.pm @@ -11,11 +11,11 @@ TAP::Parser::Iterator::Stream - Iterator for filehandle-based TAP sources =head1 VERSION -Version 3.42 +Version 3.44 =cut -our $VERSION = '3.42'; +our $VERSION = '3.44'; =head1 SYNOPSIS diff --git a/gnu/usr.bin/perl/cpan/Test-Harness/lib/TAP/Parser/IteratorFactory.pm b/gnu/usr.bin/perl/cpan/Test-Harness/lib/TAP/Parser/IteratorFactory.pm index cd677028bd8..1a61e8260ea 100644 --- a/gnu/usr.bin/perl/cpan/Test-Harness/lib/TAP/Parser/IteratorFactory.pm +++ b/gnu/usr.bin/perl/cpan/Test-Harness/lib/TAP/Parser/IteratorFactory.pm @@ -16,11 +16,11 @@ TAP::Parser::IteratorFactory - Figures out which SourceHandler objects to use fo =head1 VERSION -Version 3.42 +Version 3.44 =cut -our $VERSION = '3.42'; +our $VERSION = '3.44'; =head1 SYNOPSIS diff --git a/gnu/usr.bin/perl/cpan/Test-Harness/lib/TAP/Parser/Multiplexer.pm b/gnu/usr.bin/perl/cpan/Test-Harness/lib/TAP/Parser/Multiplexer.pm index 16af2d30854..328aa49cc0e 100644 --- a/gnu/usr.bin/perl/cpan/Test-Harness/lib/TAP/Parser/Multiplexer.pm +++ b/gnu/usr.bin/perl/cpan/Test-Harness/lib/TAP/Parser/Multiplexer.pm @@ -4,6 +4,7 @@ use strict; use warnings; use IO::Select; +use Errno; use base 'TAP::Object'; @@ -17,11 +18,11 @@ TAP::Parser::Multiplexer - Multiplex multiple TAP::Parsers =head1 VERSION -Version 3.42 +Version 3.44 =cut -our $VERSION = '3.42'; +our $VERSION = '3.44'; =head1 SYNOPSIS @@ -130,9 +131,10 @@ sub _iter { return ( $parser, $stash, $result ); } - unless (@ready) { + until (@ready) { return unless $sel->count; @ready = $sel->can_read; + last if @ready || $! != Errno::EINTR; } my ( $h, $parser, $stash, @handles ) = @{ shift @ready }; diff --git a/gnu/usr.bin/perl/cpan/Test-Harness/lib/TAP/Parser/Result.pm b/gnu/usr.bin/perl/cpan/Test-Harness/lib/TAP/Parser/Result.pm index c8927968dbe..f5d1c211da7 100644 --- a/gnu/usr.bin/perl/cpan/Test-Harness/lib/TAP/Parser/Result.pm +++ b/gnu/usr.bin/perl/cpan/Test-Harness/lib/TAP/Parser/Result.pm @@ -24,11 +24,11 @@ TAP::Parser::Result - Base class for TAP::Parser output objects =head1 VERSION -Version 3.42 +Version 3.44 =cut -our $VERSION = '3.42'; +our $VERSION = '3.44'; =head1 SYNOPSIS diff --git a/gnu/usr.bin/perl/cpan/Test-Harness/lib/TAP/Parser/Result/Bailout.pm b/gnu/usr.bin/perl/cpan/Test-Harness/lib/TAP/Parser/Result/Bailout.pm index facae6fe8e4..528b0194b9b 100644 --- a/gnu/usr.bin/perl/cpan/Test-Harness/lib/TAP/Parser/Result/Bailout.pm +++ b/gnu/usr.bin/perl/cpan/Test-Harness/lib/TAP/Parser/Result/Bailout.pm @@ -11,11 +11,11 @@ TAP::Parser::Result::Bailout - Bailout result token. =head1 VERSION -Version 3.42 +Version 3.44 =cut -our $VERSION = '3.42'; +our $VERSION = '3.44'; =head1 DESCRIPTION diff --git a/gnu/usr.bin/perl/cpan/Test-Harness/lib/TAP/Parser/Result/Comment.pm b/gnu/usr.bin/perl/cpan/Test-Harness/lib/TAP/Parser/Result/Comment.pm index 0f99b57b08e..20cac164874 100644 --- a/gnu/usr.bin/perl/cpan/Test-Harness/lib/TAP/Parser/Result/Comment.pm +++ b/gnu/usr.bin/perl/cpan/Test-Harness/lib/TAP/Parser/Result/Comment.pm @@ -11,11 +11,11 @@ TAP::Parser::Result::Comment - Comment result token. =head1 VERSION -Version 3.42 +Version 3.44 =cut -our $VERSION = '3.42'; +our $VERSION = '3.44'; =head1 DESCRIPTION diff --git a/gnu/usr.bin/perl/cpan/Test-Harness/lib/TAP/Parser/Result/Plan.pm b/gnu/usr.bin/perl/cpan/Test-Harness/lib/TAP/Parser/Result/Plan.pm index 9db060e90df..7da449208d2 100644 --- a/gnu/usr.bin/perl/cpan/Test-Harness/lib/TAP/Parser/Result/Plan.pm +++ b/gnu/usr.bin/perl/cpan/Test-Harness/lib/TAP/Parser/Result/Plan.pm @@ -11,11 +11,11 @@ TAP::Parser::Result::Plan - Plan result token. =head1 VERSION -Version 3.42 +Version 3.44 =cut -our $VERSION = '3.42'; +our $VERSION = '3.44'; =head1 DESCRIPTION diff --git a/gnu/usr.bin/perl/cpan/Test-Harness/lib/TAP/Parser/Result/Pragma.pm b/gnu/usr.bin/perl/cpan/Test-Harness/lib/TAP/Parser/Result/Pragma.pm index c7a26beeedd..04a0e178514 100644 --- a/gnu/usr.bin/perl/cpan/Test-Harness/lib/TAP/Parser/Result/Pragma.pm +++ b/gnu/usr.bin/perl/cpan/Test-Harness/lib/TAP/Parser/Result/Pragma.pm @@ -11,11 +11,11 @@ TAP::Parser::Result::Pragma - TAP pragma token. =head1 VERSION -Version 3.42 +Version 3.44 =cut -our $VERSION = '3.42'; +our $VERSION = '3.44'; =head1 DESCRIPTION diff --git a/gnu/usr.bin/perl/cpan/Test-Harness/lib/TAP/Parser/Result/Test.pm b/gnu/usr.bin/perl/cpan/Test-Harness/lib/TAP/Parser/Result/Test.pm index b3bd224c16f..dbe0817484e 100644 --- a/gnu/usr.bin/perl/cpan/Test-Harness/lib/TAP/Parser/Result/Test.pm +++ b/gnu/usr.bin/perl/cpan/Test-Harness/lib/TAP/Parser/Result/Test.pm @@ -11,11 +11,11 @@ TAP::Parser::Result::Test - Test result token. =head1 VERSION -Version 3.42 +Version 3.44 =cut -our $VERSION = '3.42'; +our $VERSION = '3.44'; =head1 DESCRIPTION diff --git a/gnu/usr.bin/perl/cpan/Test-Harness/lib/TAP/Parser/Result/Unknown.pm b/gnu/usr.bin/perl/cpan/Test-Harness/lib/TAP/Parser/Result/Unknown.pm index d735ed165ac..1c77dc072c5 100644 --- a/gnu/usr.bin/perl/cpan/Test-Harness/lib/TAP/Parser/Result/Unknown.pm +++ b/gnu/usr.bin/perl/cpan/Test-Harness/lib/TAP/Parser/Result/Unknown.pm @@ -11,11 +11,11 @@ TAP::Parser::Result::Unknown - Unknown result token. =head1 VERSION -Version 3.42 +Version 3.44 =cut -our $VERSION = '3.42'; +our $VERSION = '3.44'; =head1 DESCRIPTION diff --git a/gnu/usr.bin/perl/cpan/Test-Harness/lib/TAP/Parser/Result/Version.pm b/gnu/usr.bin/perl/cpan/Test-Harness/lib/TAP/Parser/Result/Version.pm index 5f4cb932bd3..c73a7620041 100644 --- a/gnu/usr.bin/perl/cpan/Test-Harness/lib/TAP/Parser/Result/Version.pm +++ b/gnu/usr.bin/perl/cpan/Test-Harness/lib/TAP/Parser/Result/Version.pm @@ -11,11 +11,11 @@ TAP::Parser::Result::Version - TAP syntax version token. =head1 VERSION -Version 3.42 +Version 3.44 =cut -our $VERSION = '3.42'; +our $VERSION = '3.44'; =head1 DESCRIPTION diff --git a/gnu/usr.bin/perl/cpan/Test-Harness/lib/TAP/Parser/Result/YAML.pm b/gnu/usr.bin/perl/cpan/Test-Harness/lib/TAP/Parser/Result/YAML.pm index a88b8da1f7e..e20975b7578 100644 --- a/gnu/usr.bin/perl/cpan/Test-Harness/lib/TAP/Parser/Result/YAML.pm +++ b/gnu/usr.bin/perl/cpan/Test-Harness/lib/TAP/Parser/Result/YAML.pm @@ -11,11 +11,11 @@ TAP::Parser::Result::YAML - YAML result token. =head1 VERSION -Version 3.42 +Version 3.44 =cut -our $VERSION = '3.42'; +our $VERSION = '3.44'; =head1 DESCRIPTION diff --git a/gnu/usr.bin/perl/cpan/Test-Harness/lib/TAP/Parser/ResultFactory.pm b/gnu/usr.bin/perl/cpan/Test-Harness/lib/TAP/Parser/ResultFactory.pm index 27776ea05c7..894636269bf 100644 --- a/gnu/usr.bin/perl/cpan/Test-Harness/lib/TAP/Parser/ResultFactory.pm +++ b/gnu/usr.bin/perl/cpan/Test-Harness/lib/TAP/Parser/ResultFactory.pm @@ -29,11 +29,11 @@ TAP::Parser::ResultFactory - Factory for creating TAP::Parser output objects =head1 VERSION -Version 3.42 +Version 3.44 =cut -our $VERSION = '3.42'; +our $VERSION = '3.44'; =head2 DESCRIPTION diff --git a/gnu/usr.bin/perl/cpan/Test-Harness/lib/TAP/Parser/Scheduler.pm b/gnu/usr.bin/perl/cpan/Test-Harness/lib/TAP/Parser/Scheduler.pm index e13d68e087b..3ec5b7ca897 100644 --- a/gnu/usr.bin/perl/cpan/Test-Harness/lib/TAP/Parser/Scheduler.pm +++ b/gnu/usr.bin/perl/cpan/Test-Harness/lib/TAP/Parser/Scheduler.pm @@ -13,11 +13,11 @@ TAP::Parser::Scheduler - Schedule tests during parallel testing =head1 VERSION -Version 3.42 +Version 3.44 =cut -our $VERSION = '3.42'; +our $VERSION = '3.44'; =head1 SYNOPSIS diff --git a/gnu/usr.bin/perl/cpan/Test-Harness/lib/TAP/Parser/Scheduler/Job.pm b/gnu/usr.bin/perl/cpan/Test-Harness/lib/TAP/Parser/Scheduler/Job.pm index b765ab27b0e..ce6ef14a43c 100644 --- a/gnu/usr.bin/perl/cpan/Test-Harness/lib/TAP/Parser/Scheduler/Job.pm +++ b/gnu/usr.bin/perl/cpan/Test-Harness/lib/TAP/Parser/Scheduler/Job.pm @@ -10,11 +10,11 @@ TAP::Parser::Scheduler::Job - A single testing job. =head1 VERSION -Version 3.42 +Version 3.44 =cut -our $VERSION = '3.42'; +our $VERSION = '3.44'; =head1 SYNOPSIS diff --git a/gnu/usr.bin/perl/cpan/Test-Harness/lib/TAP/Parser/Scheduler/Spinner.pm b/gnu/usr.bin/perl/cpan/Test-Harness/lib/TAP/Parser/Scheduler/Spinner.pm index 47bc28fc913..4cb974c8758 100644 --- a/gnu/usr.bin/perl/cpan/Test-Harness/lib/TAP/Parser/Scheduler/Spinner.pm +++ b/gnu/usr.bin/perl/cpan/Test-Harness/lib/TAP/Parser/Scheduler/Spinner.pm @@ -10,11 +10,11 @@ TAP::Parser::Scheduler::Spinner - A no-op job. =head1 VERSION -Version 3.42 +Version 3.44 =cut -our $VERSION = '3.42'; +our $VERSION = '3.44'; =head1 SYNOPSIS diff --git a/gnu/usr.bin/perl/cpan/Test-Harness/lib/TAP/Parser/Source.pm b/gnu/usr.bin/perl/cpan/Test-Harness/lib/TAP/Parser/Source.pm index 5bd85e37f71..e91439ac03b 100644 --- a/gnu/usr.bin/perl/cpan/Test-Harness/lib/TAP/Parser/Source.pm +++ b/gnu/usr.bin/perl/cpan/Test-Harness/lib/TAP/Parser/Source.pm @@ -14,11 +14,11 @@ TAP::Parser::Source - a TAP source & meta data about it =head1 VERSION -Version 3.42 +Version 3.44 =cut -our $VERSION = '3.42'; +our $VERSION = '3.44'; =head1 SYNOPSIS diff --git a/gnu/usr.bin/perl/cpan/Test-Harness/lib/TAP/Parser/SourceHandler.pm b/gnu/usr.bin/perl/cpan/Test-Harness/lib/TAP/Parser/SourceHandler.pm index 0156b99fd68..b41ca010655 100644 --- a/gnu/usr.bin/perl/cpan/Test-Harness/lib/TAP/Parser/SourceHandler.pm +++ b/gnu/usr.bin/perl/cpan/Test-Harness/lib/TAP/Parser/SourceHandler.pm @@ -12,11 +12,11 @@ TAP::Parser::SourceHandler - Base class for different TAP source handlers =head1 VERSION -Version 3.42 +Version 3.44 =cut -our $VERSION = '3.42'; +our $VERSION = '3.44'; =head1 SYNOPSIS diff --git a/gnu/usr.bin/perl/cpan/Test-Harness/lib/TAP/Parser/SourceHandler/Executable.pm b/gnu/usr.bin/perl/cpan/Test-Harness/lib/TAP/Parser/SourceHandler/Executable.pm index 376e8d148d8..0aa78ad7311 100644 --- a/gnu/usr.bin/perl/cpan/Test-Harness/lib/TAP/Parser/SourceHandler/Executable.pm +++ b/gnu/usr.bin/perl/cpan/Test-Harness/lib/TAP/Parser/SourceHandler/Executable.pm @@ -16,11 +16,11 @@ TAP::Parser::SourceHandler::Executable - Stream output from an executable TAP so =head1 VERSION -Version 3.42 +Version 3.44 =cut -our $VERSION = '3.42'; +our $VERSION = '3.44'; =head1 SYNOPSIS diff --git a/gnu/usr.bin/perl/cpan/Test-Harness/lib/TAP/Parser/SourceHandler/File.pm b/gnu/usr.bin/perl/cpan/Test-Harness/lib/TAP/Parser/SourceHandler/File.pm index 7e1843759e8..e93f786b332 100644 --- a/gnu/usr.bin/perl/cpan/Test-Harness/lib/TAP/Parser/SourceHandler/File.pm +++ b/gnu/usr.bin/perl/cpan/Test-Harness/lib/TAP/Parser/SourceHandler/File.pm @@ -16,11 +16,11 @@ TAP::Parser::SourceHandler::File - Stream TAP from a text file. =head1 VERSION -Version 3.42 +Version 3.44 =cut -our $VERSION = '3.42'; +our $VERSION = '3.44'; =head1 SYNOPSIS diff --git a/gnu/usr.bin/perl/cpan/Test-Harness/lib/TAP/Parser/SourceHandler/Handle.pm b/gnu/usr.bin/perl/cpan/Test-Harness/lib/TAP/Parser/SourceHandler/Handle.pm index a0a051340f7..1b9881cd010 100644 --- a/gnu/usr.bin/perl/cpan/Test-Harness/lib/TAP/Parser/SourceHandler/Handle.pm +++ b/gnu/usr.bin/perl/cpan/Test-Harness/lib/TAP/Parser/SourceHandler/Handle.pm @@ -16,11 +16,11 @@ TAP::Parser::SourceHandler::Handle - Stream TAP from an IO::Handle or a GLOB. =head1 VERSION -Version 3.42 +Version 3.44 =cut -our $VERSION = '3.42'; +our $VERSION = '3.44'; =head1 SYNOPSIS diff --git a/gnu/usr.bin/perl/cpan/Test-Harness/lib/TAP/Parser/SourceHandler/Perl.pm b/gnu/usr.bin/perl/cpan/Test-Harness/lib/TAP/Parser/SourceHandler/Perl.pm index c2ea252ec2a..ce7a2b427bc 100644 --- a/gnu/usr.bin/perl/cpan/Test-Harness/lib/TAP/Parser/SourceHandler/Perl.pm +++ b/gnu/usr.bin/perl/cpan/Test-Harness/lib/TAP/Parser/SourceHandler/Perl.pm @@ -21,11 +21,11 @@ TAP::Parser::SourceHandler::Perl - Stream TAP from a Perl executable =head1 VERSION -Version 3.42 +Version 3.44 =cut -our $VERSION = '3.42'; +our $VERSION = '3.44'; =head1 SYNOPSIS @@ -62,7 +62,7 @@ won't need to use this module directly. Only votes if $source looks like a file. Casts the following votes: 0.9 if it has a shebang ala "#!...perl" - 0.75 if it has any shebang + 0.3 if it has any shebang 0.8 if it's a .t file 0.9 if it's a .pl file 0.75 if it's in a 't' directory diff --git a/gnu/usr.bin/perl/cpan/Test-Harness/lib/TAP/Parser/SourceHandler/RawTAP.pm b/gnu/usr.bin/perl/cpan/Test-Harness/lib/TAP/Parser/SourceHandler/RawTAP.pm index 2ef77118bc8..c311935bf8a 100644 --- a/gnu/usr.bin/perl/cpan/Test-Harness/lib/TAP/Parser/SourceHandler/RawTAP.pm +++ b/gnu/usr.bin/perl/cpan/Test-Harness/lib/TAP/Parser/SourceHandler/RawTAP.pm @@ -16,11 +16,11 @@ TAP::Parser::SourceHandler::RawTAP - Stream output from raw TAP in a scalar/arra =head1 VERSION -Version 3.42 +Version 3.44 =cut -our $VERSION = '3.42'; +our $VERSION = '3.44'; =head1 SYNOPSIS diff --git a/gnu/usr.bin/perl/cpan/Test-Harness/lib/TAP/Parser/YAMLish/Reader.pm b/gnu/usr.bin/perl/cpan/Test-Harness/lib/TAP/Parser/YAMLish/Reader.pm index 1a8185eb6b5..1c122300a39 100644 --- a/gnu/usr.bin/perl/cpan/Test-Harness/lib/TAP/Parser/YAMLish/Reader.pm +++ b/gnu/usr.bin/perl/cpan/Test-Harness/lib/TAP/Parser/YAMLish/Reader.pm @@ -5,16 +5,21 @@ use warnings; use base 'TAP::Object'; -our $VERSION = '3.42'; +our $VERSION = '3.44'; + + # No EBCDIC support on early perls +*to_native = (ord "A" == 65 || $] < 5.008) + ? sub { return shift } + : sub { utf8::unicode_to_native(shift) }; # TODO: # Handle blessed object syntax # Printable characters for escapes my %UNESCAPES = ( - z => "\x00", a => "\x07", t => "\x09", - n => "\x0a", v => "\x0b", f => "\x0c", - r => "\x0d", e => "\x1b", '\\' => '\\', + z => "\x00", a => "\a", t => "\t", + n => "\n", v => "\cK", f => "\f", + r => "\r", e => "\e", '\\' => '\\', ); my $QQ_STRING = qr{ " (?:\\. | [^"])* " }x; @@ -22,6 +27,7 @@ my $HASH_LINE = qr{ ^ ($QQ_STRING|\S+) \s* : \s* (?: (.+?) \s* )? $ }x; my $IS_HASH_KEY = qr{ ^ [\w\'\"] }x; my $IS_END_YAML = qr{ ^ \.\.\. \s* $ }x; my $IS_QQ_STRING = qr{ ^ $QQ_STRING $ }x; +my $IS_ARRAY_LINE = qr{ ^ - \s* ($QQ_STRING|\S+) }x; # new() implementation supplied by TAP::Object @@ -117,7 +123,8 @@ sub _read_qq { $str =~ s/\\"/"/gx; $str =~ s/ \\ ( [tartan\\favez] | x([0-9a-fA-F]{2}) ) - / (length($1) > 1) ? pack("H2", $2) : $UNESCAPES{$1} /gex; + / (length($1) > 1) ? pack("H2", to_native($2)) + : $UNESCAPES{$1} /gex; return $str; } @@ -240,9 +247,17 @@ sub _read_hash { my ( $key, $value ) = ( $self->_read_scalar($1), $2 ); $self->_next; + my ( $next_line, $next_indent ) = $self->_peek; + if ( defined $value ) { $hash->{$key} = $self->_read_scalar($value); } + elsif (not defined $value # no explicit undef ("~") given + and $next_indent <= $limit # next line is same or less indentation + and $next_line !~ $IS_ARRAY_LINE) # arrays can start at same indent + { + $hash->{$key} = undef; + } else { $hash->{$key} = $self->_read_nested; } @@ -269,7 +284,7 @@ TAP::Parser::YAMLish::Reader - Read YAMLish data from iterator =head1 VERSION -Version 3.42 +Version 3.44 =head1 SYNOPSIS diff --git a/gnu/usr.bin/perl/cpan/Test-Harness/lib/TAP/Parser/YAMLish/Writer.pm b/gnu/usr.bin/perl/cpan/Test-Harness/lib/TAP/Parser/YAMLish/Writer.pm index 904244ae110..1199cf45bf3 100644 --- a/gnu/usr.bin/perl/cpan/Test-Harness/lib/TAP/Parser/YAMLish/Writer.pm +++ b/gnu/usr.bin/perl/cpan/Test-Harness/lib/TAP/Parser/YAMLish/Writer.pm @@ -5,17 +5,26 @@ use warnings; use base 'TAP::Object'; -our $VERSION = '3.42'; +our $VERSION = '3.44'; -my $ESCAPE_CHAR = qr{ [ \x00-\x1f \" ] }x; + # No EBCDIC support on early perls +*from_native = (ord "A" == 65 || $] < 5.008) + ? sub { return shift } + : sub { utf8::native_to_unicode(shift) }; + +my $ESCAPE_CHAR = qr{ [ [:cntrl:] \" ] }x; my $ESCAPE_KEY = qr{ (?: ^\W ) | $ESCAPE_CHAR }x; -my @UNPRINTABLE = qw( - z x01 x02 x03 x04 x05 x06 a - x08 t n v f r x0e x0f - x10 x11 x12 x13 x14 x15 x16 x17 - x18 x19 x1a e x1c x1d x1e x1f -); +my @UNPRINTABLE; +$UNPRINTABLE[$_] = sprintf("x%02x", from_native($_)) for 0 .. ord(" ") - 1; +$UNPRINTABLE[ord "\0"] = 'z'; +$UNPRINTABLE[ord "\a"] = 'a'; +$UNPRINTABLE[ord "\t"] = 't'; +$UNPRINTABLE[ord "\n"] = 'n'; +$UNPRINTABLE[ord "\cK"] = 'v'; +$UNPRINTABLE[ord "\f"] = 'f'; +$UNPRINTABLE[ord "\r"] = 'r'; +$UNPRINTABLE[ord "\e"] = 'e'; # new() implementation supplied by TAP::Object @@ -76,7 +85,7 @@ sub _enc_scalar { if ( $val =~ /$rule/ ) { $val =~ s/\\/\\\\/g; $val =~ s/"/\\"/g; - $val =~ s/ ( [\x00-\x1f] ) / '\\' . $UNPRINTABLE[ ord($1) ] /gex; + $val =~ s/ ( [[:cntrl:]] ) / '\\' . $UNPRINTABLE[ ord($1) ] /gex; return qq{"$val"}; } @@ -146,7 +155,7 @@ TAP::Parser::YAMLish::Writer - Write YAMLish data =head1 VERSION -Version 3.42 +Version 3.44 =head1 SYNOPSIS diff --git a/gnu/usr.bin/perl/cpan/Test-Harness/lib/Test/Harness.pm b/gnu/usr.bin/perl/cpan/Test-Harness/lib/Test/Harness.pm index 6cce46e3b62..ea2302bd660 100644 --- a/gnu/usr.bin/perl/cpan/Test-Harness/lib/Test/Harness.pm +++ b/gnu/usr.bin/perl/cpan/Test-Harness/lib/Test/Harness.pm @@ -31,11 +31,11 @@ Test::Harness - Run Perl standard test scripts with statistics =head1 VERSION -Version 3.42 +Version 3.44 =cut -our $VERSION = '3.42'; +our $VERSION = '3.44'; # Backwards compatibility for exportable variable names. *verbose = *Verbose; @@ -550,7 +550,7 @@ C =item C<< fPackage-With-Dashes >> Set the formatter_class of the harness being run. Since the C -is seperated by C<:>, we use C<-> instead. +is separated by C<:>, we use C<-> instead. =back diff --git a/gnu/usr.bin/perl/cpan/Test-Harness/t/prove.t b/gnu/usr.bin/perl/cpan/Test-Harness/t/prove.t index 75718f62cb2..1dd6541239b 100755 --- a/gnu/usr.bin/perl/cpan/Test-Harness/t/prove.t +++ b/gnu/usr.bin/perl/cpan/Test-Harness/t/prove.t @@ -171,8 +171,7 @@ BEGIN { # START PLAN expect => {}, runlog => [ [ '_runtests', - { verbosity => 0, - show_count => 1, + { show_count => 1, }, 'one', 'two', 'three' ] @@ -206,7 +205,7 @@ BEGIN { # START PLAN }, runlog => [ [ '_runtests', - { verbosity => 0, show_count => 1 }, + { show_count => 1 }, 'one', 'two', 'three' ] @@ -223,7 +222,6 @@ BEGIN { # START PLAN runlog => [ [ '_runtests', { lib => mabs( [ 'blib/lib', 'blib/arch' ] ), - verbosity => 0, show_count => 1, }, 'one', 'two', 'three' @@ -242,7 +240,6 @@ BEGIN { # START PLAN runlog => [ [ '_runtests', { color => 1, - verbosity => 0, show_count => 1, }, 'one', 'two', 'three' @@ -261,7 +258,6 @@ BEGIN { # START PLAN runlog => [ [ '_runtests', { directives => 1, - verbosity => 0, show_count => 1, }, 'one', 'two', 'three' @@ -279,7 +275,6 @@ BEGIN { # START PLAN runlog => [ [ '_runtests', { exec => [1], - verbosity => 0, show_count => 1, }, 'one', 'two', 'three' @@ -297,7 +292,6 @@ BEGIN { # START PLAN runlog => [ [ '_runtests', { failures => 1, - verbosity => 0, show_count => 1, }, 'one', 'two', 'three' @@ -316,7 +310,6 @@ BEGIN { # START PLAN runlog => [ [ '_runtests', { formatter_class => 'TAP::Harness', - verbosity => 0, show_count => 1, }, 'one', 'two', 'three' @@ -335,7 +328,6 @@ BEGIN { # START PLAN runlog => [ [ '_runtests', { lib => mabs( [qw( four five six )] ), - verbosity => 0, show_count => 1, }, 'one', 'two', 'three' @@ -353,7 +345,6 @@ BEGIN { # START PLAN runlog => [ [ '_runtests', { lib => mabs( ['lib'] ), - verbosity => 0, show_count => 1, }, 'one', 'two', 'three' @@ -371,7 +362,6 @@ BEGIN { # START PLAN runlog => [ [ '_runtests', { merge => 1, - verbosity => 0, show_count => 1, }, 'one', 'two', 'three' @@ -389,7 +379,6 @@ BEGIN { # START PLAN runlog => [ [ '_runtests', { errors => 1, - verbosity => 0, show_count => 1, }, 'one', 'two', 'three' @@ -440,8 +429,7 @@ BEGIN { # START PLAN }, runlog => [ [ '_runtests', - { verbosity => 0, - show_count => 1, + { show_count => 1, }, 'one', 'two', 'three' ] @@ -457,8 +445,7 @@ BEGIN { # START PLAN }, runlog => [ [ '_runtests', - { verbosity => 0, - show_count => 1, + { show_count => 1, }, 'three', 'two', 'one' ] @@ -475,8 +462,7 @@ BEGIN { # START PLAN }, runlog => [ [ '_runtests', - { verbosity => 0, - show_count => 1, + { show_count => 1, }, 'xxxone', 'xxxtwo', 'xxxthree' @@ -494,7 +480,6 @@ BEGIN { # START PLAN runlog => [ [ '_runtests', { switches => ['-T'], - verbosity => 0, show_count => 1, }, 'one', 'two', 'three' @@ -512,7 +497,6 @@ BEGIN { # START PLAN runlog => [ [ '_runtests', { switches => ['-t'], - verbosity => 0, show_count => 1, }, 'one', 'two', 'three' @@ -547,7 +531,6 @@ BEGIN { # START PLAN runlog => [ [ '_runtests', { switches => ['-W'], - verbosity => 0, show_count => 1, }, 'one', 'two', 'three' @@ -565,7 +548,6 @@ BEGIN { # START PLAN runlog => [ [ '_runtests', { switches => ['-w'], - verbosity => 0, show_count => 1, }, 'one', 'two', 'three' @@ -619,7 +601,6 @@ BEGIN { # START PLAN runlog => [ [ '_runtests', { failures => 1, - verbosity => 0, show_count => 1, }, $dummy_test @@ -636,7 +617,6 @@ BEGIN { # START PLAN runlog => [ [ '_runtests', { failures => 1, - verbosity => 0, show_count => 1, }, $dummy_test @@ -653,7 +633,6 @@ BEGIN { # START PLAN runlog => [ [ '_runtests', { lib => mabs( ['lib'] ), - verbosity => 0, show_count => 1, }, $dummy_test @@ -670,7 +649,6 @@ BEGIN { # START PLAN runlog => [ [ '_runtests', { lib => mabs( ['lib'] ), - verbosity => 0, show_count => 1, }, $dummy_test @@ -687,7 +665,6 @@ BEGIN { # START PLAN runlog => [ [ '_runtests', { lib => mabs( [ 'blib/lib', 'blib/arch' ] ), - verbosity => 0, show_count => 1, }, $dummy_test @@ -704,7 +681,6 @@ BEGIN { # START PLAN runlog => [ [ '_runtests', { lib => mabs( [ 'blib/lib', 'blib/arch' ] ), - verbosity => 0, show_count => 1, }, $dummy_test @@ -720,8 +696,7 @@ BEGIN { # START PLAN expect => { shuffle => 1 }, runlog => [ [ '_runtests', - { verbosity => 0, - show_count => 1, + { show_count => 1, }, "xxx$dummy_test" ] @@ -736,8 +711,7 @@ BEGIN { # START PLAN expect => { shuffle => 1 }, runlog => [ [ '_runtests', - { verbosity => 0, - show_count => 1, + { show_count => 1, }, "xxx$dummy_test" ] @@ -753,7 +727,6 @@ BEGIN { # START PLAN runlog => [ [ '_runtests', { color => 1, - verbosity => 0, show_count => 1, }, $dummy_test @@ -769,8 +742,7 @@ BEGIN { # START PLAN expect => { recurse => 1 }, runlog => [ [ '_runtests', - { verbosity => 0, - show_count => 1, + { show_count => 1, }, $dummy_test ] @@ -785,8 +757,7 @@ BEGIN { # START PLAN expect => { recurse => 1 }, runlog => [ [ '_runtests', - { verbosity => 0, - show_count => 1, + { show_count => 1, }, $dummy_test ] @@ -801,8 +772,7 @@ BEGIN { # START PLAN expect => { backwards => 1 }, runlog => [ [ '_runtests', - { verbosity => 0, - show_count => 1, + { show_count => 1, }, reverse @dummy_tests ] @@ -820,7 +790,6 @@ BEGIN { # START PLAN runlog => [ [ '_runtests', { errors => 1, - verbosity => 0, show_count => 1, }, $dummy_test @@ -839,7 +808,6 @@ BEGIN { # START PLAN runlog => [ [ '_runtests', { errors => 1, - verbosity => 0, show_count => 1, }, $dummy_test @@ -920,7 +888,6 @@ BEGIN { # START PLAN runlog => [ [ '_runtests', { merge => 1, - verbosity => 0, show_count => 1, }, $dummy_test @@ -937,7 +904,6 @@ BEGIN { # START PLAN runlog => [ [ '_runtests', { merge => 1, - verbosity => 0, show_count => 1, }, $dummy_test @@ -954,7 +920,6 @@ BEGIN { # START PLAN runlog => [ [ '_runtests', { directives => 1, - verbosity => 0, show_count => 1, }, $dummy_test @@ -973,7 +938,6 @@ BEGIN { # START PLAN runlog => [ [ '_runtests', { exec => [], - verbosity => 0, show_count => 1, }, $dummy_test @@ -991,7 +955,6 @@ BEGIN { # START PLAN runlog => [ [ '_runtests', { exec => ['-s'], - verbosity => 0, show_count => 1, }, $dummy_test @@ -1009,7 +972,6 @@ BEGIN { # START PLAN runlog => [ [ '_runtests', { exec => [qw(/foo/bar/perl -Ilib)], - verbosity => 0, show_count => 1, }, $dummy_test @@ -1027,7 +989,6 @@ BEGIN { # START PLAN runlog => [ [ '_runtests', { exec => [], - verbosity => 0, show_count => 1, }, $dummy_test @@ -1041,8 +1002,7 @@ BEGIN { # START PLAN expect => { extensions => ['.wango'] }, runlog => [ [ '_runtests', - { verbosity => 0, - show_count => 1, + { show_count => 1, }, ] ], @@ -1054,8 +1014,7 @@ BEGIN { # START PLAN expect => { extensions => [ '.foo', '.bar' ] }, runlog => [ [ '_runtests', - { verbosity => 0, - show_count => 1, + { show_count => 1, }, ] ], @@ -1075,7 +1034,6 @@ BEGIN { # START PLAN { sources => { MyCustom => {}, }, - verbosity => 0, show_count => 1, }, $dummy_test @@ -1122,7 +1080,6 @@ BEGIN { # START PLAN sep => 'foo=bar', }, }, - verbosity => 0, show_count => 1, }, $dummy_test @@ -1147,8 +1104,7 @@ BEGIN { # START PLAN plan => 1, runlog => [ [ '_runtests', - { verbosity => 0, - show_count => 1, + { show_count => 1, }, $dummy_test ] @@ -1175,8 +1131,7 @@ BEGIN { # START PLAN plan => 1, runlog => [ [ '_runtests', - { verbosity => 0, - show_count => 1, + { show_count => 1, }, $dummy_test ] @@ -1199,8 +1154,7 @@ BEGIN { # START PLAN plan => 1, runlog => [ [ '_runtests', - { verbosity => 0, - show_count => 1, + { show_count => 1, }, $dummy_test ] @@ -1239,8 +1193,7 @@ BEGIN { # START PLAN plan => 5, runlog => [ [ '_runtests', - { verbosity => 0, - show_count => 1, + { show_count => 1, }, $dummy_test ] @@ -1263,8 +1216,7 @@ BEGIN { # START PLAN plan => 1, runlog => [ [ '_runtests', - { verbosity => 0, - show_count => 1, + { show_count => 1, }, $dummy_test ] diff --git a/gnu/usr.bin/perl/cpan/Test-Harness/t/yamlish.t b/gnu/usr.bin/perl/cpan/Test-Harness/t/yamlish.t index 8d4a7d08b3e..07c36838694 100755 --- a/gnu/usr.bin/perl/cpan/Test-Harness/t/yamlish.t +++ b/gnu/usr.bin/perl/cpan/Test-Harness/t/yamlish.t @@ -138,6 +138,74 @@ BEGIN { six => '6' }, }, + { name => 'Edge cases for hash start vs. undefined scalar 1', + in => [ + '---', + 'one:', + ' five: 5', + ' two:', + ' four: 4', + ' three: 3', + 'six: 6', + '...', + ], + out => { + one => { two => undef, three => '3', four => '4', five => '5' }, + six => '6' + }, + }, + { name => 'Edge cases for hash start vs. undefined scalar 2', + in => [ + '---', + 'one:', + ' five: 5', + ' two: ~', + ' four: 4', + ' three: 3', + 'six: 6', + '...', + ], + out => { + one => { two => undef, three => '3', four => '4', five => '5' }, + six => '6' + }, + }, + { name => 'Edge cases for hash start vs. undefined scalar 3', + in => [ + '---', + 'two:', + 'four: 4', + 'three: 3', + '...', + ], + out => { + two => undef, three => '3', four => '4', + }, + }, + { name => 'Edge cases for hash start vs. undefined scalar 4', + in => [ + '---', + 'two:', + ' four: 4', + ' three: 3', + '...', + ], + out => { + two => { three => '3', four => '4' }, + }, + }, + { name => 'Edge cases for hash start vs. undefined scalar 5', + in => [ + '---', + 'two:', + '- four: 4', + '- three: 3', + '...', + ], + out => { + two => [ { four => '4' }, { three => '3' } ], + }, + }, { name => 'Space after colon', in => [ '---', 'spog: ', ' - 1', ' - 2', '...' ], out => { spog => [ 1, 2 ] }, @@ -451,7 +519,7 @@ BEGIN { ], name => 'Regression: inline_nested_hash' }, - { name => "Unprintables", + { name => "Unprintables", # This is an ASCII centric test in => [ "---", "- \"\\z\\x01\\x02\\x03\\x04\\x05\\x06\\a\\x08\\t\\n\\v\\f\\r\\x0e\\x0f\"", diff --git a/gnu/usr.bin/perl/cpan/Test-Simple/lib/Test/Builder.pm b/gnu/usr.bin/perl/cpan/Test-Simple/lib/Test/Builder.pm index 1a49b7a8e7c..4e630f8dc8b 100644 --- a/gnu/usr.bin/perl/cpan/Test-Simple/lib/Test/Builder.pm +++ b/gnu/usr.bin/perl/cpan/Test-Simple/lib/Test/Builder.pm @@ -4,7 +4,7 @@ use 5.006; use strict; use warnings; -our $VERSION = '1.302175'; +our $VERSION = '1.302190'; BEGIN { if( $] < 5.008 ) { @@ -51,40 +51,80 @@ sub _add_ts_hooks { #$hub->add_context_aquire(sub {$_[0]->{level} += $Level - 1}); - $hub->pre_filter(sub { - my ($active_hub, $e) = @_; + $hub->pre_filter( + sub { + my ($active_hub, $e) = @_; - my $epkg = $$epkgr; - my $cpkg = $e->{trace} ? $e->{trace}->{frame}->[0] : undef; + my $epkg = $$epkgr; + my $cpkg = $e->{trace} ? $e->{trace}->{frame}->[0] : undef; - no strict 'refs'; - no warnings 'once'; - my $todo; - $todo = ${"$cpkg\::TODO"} if $cpkg; - $todo = ${"$epkg\::TODO"} if $epkg && !$todo; + no strict 'refs'; + no warnings 'once'; + my $todo; + $todo = ${"$cpkg\::TODO"} if $cpkg; + $todo = ${"$epkg\::TODO"} if $epkg && !$todo; - return $e unless defined($todo); - return $e unless length($todo); + return $e unless defined($todo); + return $e unless length($todo); - # Turn a diag into a todo diag - return Test::Builder::TodoDiag->new(%$e) if ref($e) eq 'Test2::Event::Diag'; + # Turn a diag into a todo diag + return Test::Builder::TodoDiag->new(%$e) if ref($e) eq 'Test2::Event::Diag'; - $e->set_todo($todo) if $e->can('set_todo'); - $e->add_amnesty({tag => 'TODO', details => $todo}); + $e->set_todo($todo) if $e->can('set_todo'); + $e->add_amnesty({tag => 'TODO', details => $todo}); - # Set todo on ok's - if ($e->isa('Test2::Event::Ok')) { - $e->set_effective_pass(1); + # Set todo on ok's + if ($e->isa('Test2::Event::Ok')) { + $e->set_effective_pass(1); - if (my $result = $e->get_meta(__PACKAGE__)) { - $result->{reason} ||= $todo; - $result->{type} ||= 'todo'; - $result->{ok} = 1; + if (my $result = $e->get_meta(__PACKAGE__)) { + $result->{reason} ||= $todo; + $result->{type} ||= 'todo'; + $result->{ok} = 1; + } } - } - return $e; - }, inherit => 1); + return $e; + }, + + inherit => 1, + + intercept_inherit => { + clean => sub { + my %params = @_; + + my $state = $params{state}; + my $trace = $params{trace}; + + my $epkg = $$epkgr; + my $cpkg = $trace->{frame}->[0]; + + no strict 'refs'; + no warnings 'once'; + + $state->{+__PACKAGE__} = {}; + $state->{+__PACKAGE__}->{"$cpkg\::TODO"} = ${"$cpkg\::TODO"} if $cpkg; + $state->{+__PACKAGE__}->{"$epkg\::TODO"} = ${"$epkg\::TODO"} if $epkg; + + ${"$cpkg\::TODO"} = undef if $cpkg; + ${"$epkg\::TODO"} = undef if $epkg; + }, + restore => sub { + my %params = @_; + my $state = $params{state}; + + no strict 'refs'; + no warnings 'once'; + + for my $item (keys %{$state->{+__PACKAGE__}}) { + no strict 'refs'; + no warnings 'once'; + + ${"$item"} = $state->{+__PACKAGE__}->{$item}; + } + }, + }, + ); } { @@ -615,6 +655,8 @@ sub skip_all { die 'Label not found for "last T2_SUBTEST_WRAPPER"' if $begin && $ctx->hub->meta(__PACKAGE__, {})->{parent}; } + $reason = "$reason" if defined $reason; + $ctx->plan(0, SKIP => $reason); } @@ -725,7 +767,7 @@ sub _unoverload { require overload; } my $string_meth = overload::Method( $$thing, $type ) || return; - $$thing = $$thing->$string_meth(); + $$thing = $$thing->$string_meth(undef, 0); } sub _unoverload_str { @@ -922,9 +964,14 @@ sub cmp_ok { local( $@, $!, $SIG{__DIE__} ); # isolate eval my($pack, $file, $line) = $ctx->trace->call(); + my $warning_bits = $ctx->trace->warning_bits; + # convert this to a code string so the BEGIN doesn't have to close + # over it, which can lead to issues with Devel::Cover + my $bits_code = defined $warning_bits ? qq["\Q$warning_bits\E"] : 'undef'; # This is so that warnings come out at the caller's level $succ = eval qq[ +BEGIN {\${^WARNING_BITS} = $bits_code}; #line $line "(eval in cmp_ok) $file" \$test = (\$got $type \$expect); 1; @@ -1027,6 +1074,13 @@ sub skip { my $ctx = $self->ctx; + $name = "$name"; + $why = "$why"; + + $name =~ s|#|\\#|g; # # in a name can confuse Test::Harness. + $name =~ s{\n}{\n# }sg; + $why =~ s{\n}{\n# }sg; + $ctx->hub->meta(__PACKAGE__, {})->{Test_Results}[ $ctx->hub->count ] = { 'ok' => 1, actual_ok => 1, @@ -1035,10 +1089,6 @@ sub skip { reason => $why, } unless $self->{no_log_results}; - $name =~ s|#|\\#|g; # # in a name can confuse Test::Harness. - $name =~ s{\n}{\n# }sg; - $why =~ s{\n}{\n# }sg; - my $tctx = $ctx->snapshot; $tctx->skip('', $why); diff --git a/gnu/usr.bin/perl/cpan/Test-Simple/lib/Test/Builder/Module.pm b/gnu/usr.bin/perl/cpan/Test-Simple/lib/Test/Builder/Module.pm index 6e550eb6f7f..0123188cee8 100644 --- a/gnu/usr.bin/perl/cpan/Test-Simple/lib/Test/Builder/Module.pm +++ b/gnu/usr.bin/perl/cpan/Test-Simple/lib/Test/Builder/Module.pm @@ -7,7 +7,7 @@ use Test::Builder; require Exporter; our @ISA = qw(Exporter); -our $VERSION = '1.302175'; +our $VERSION = '1.302190'; =head1 NAME diff --git a/gnu/usr.bin/perl/cpan/Test-Simple/lib/Test/Builder/Tester.pm b/gnu/usr.bin/perl/cpan/Test-Simple/lib/Test/Builder/Tester.pm index da98e3d9a07..bbd61404332 100644 --- a/gnu/usr.bin/perl/cpan/Test-Simple/lib/Test/Builder/Tester.pm +++ b/gnu/usr.bin/perl/cpan/Test-Simple/lib/Test/Builder/Tester.pm @@ -1,7 +1,7 @@ package Test::Builder::Tester; use strict; -our $VERSION = '1.302175'; +our $VERSION = '1.302190'; use Test::Builder; use Symbol; diff --git a/gnu/usr.bin/perl/cpan/Test-Simple/lib/Test/Builder/Tester/Color.pm b/gnu/usr.bin/perl/cpan/Test-Simple/lib/Test/Builder/Tester/Color.pm index 116e6057d85..9252488ef63 100644 --- a/gnu/usr.bin/perl/cpan/Test-Simple/lib/Test/Builder/Tester/Color.pm +++ b/gnu/usr.bin/perl/cpan/Test-Simple/lib/Test/Builder/Tester/Color.pm @@ -1,7 +1,7 @@ package Test::Builder::Tester::Color; use strict; -our $VERSION = '1.302175'; +our $VERSION = '1.302190'; require Test::Builder::Tester; diff --git a/gnu/usr.bin/perl/cpan/Test-Simple/lib/Test/More.pm b/gnu/usr.bin/perl/cpan/Test-Simple/lib/Test/More.pm index b2f82286b44..488a1f102ca 100644 --- a/gnu/usr.bin/perl/cpan/Test-Simple/lib/Test/More.pm +++ b/gnu/usr.bin/perl/cpan/Test-Simple/lib/Test/More.pm @@ -17,7 +17,7 @@ sub _carp { return warn @_, " at $file line $line\n"; } -our $VERSION = '1.302175'; +our $VERSION = '1.302190'; use Test::Builder::Module; our @ISA = qw(Test::Builder::Module); @@ -411,8 +411,8 @@ sub isnt ($$;$) { return $tb->isnt_eq(@_); } -*isn't = \&isnt; -# ' to unconfuse syntax higlighters +# make this available as isn't() +*isn::t = \&isnt; =item B @@ -1409,6 +1409,15 @@ and you'll know immediately when they're fixed. Once a todo test starts succeeding, simply move it outside the block. When the block is empty, delete it. +Note that, if you leave $TODO unset or undef, Test::More reports failures +as normal. This can be useful to mark the tests as expected to fail only +in certain conditions, e.g.: + + TODO: { + local $TODO = "$^O doesn't work yet. :(" if !_os_is_supported($^O); + + ... + } =item B diff --git a/gnu/usr.bin/perl/cpan/Test-Simple/lib/Test/Simple.pm b/gnu/usr.bin/perl/cpan/Test-Simple/lib/Test/Simple.pm index 6ff8183b804..210f86704d5 100644 --- a/gnu/usr.bin/perl/cpan/Test-Simple/lib/Test/Simple.pm +++ b/gnu/usr.bin/perl/cpan/Test-Simple/lib/Test/Simple.pm @@ -4,7 +4,7 @@ use 5.006; use strict; -our $VERSION = '1.302175'; +our $VERSION = '1.302190'; use Test::Builder::Module; our @ISA = qw(Test::Builder::Module); diff --git a/gnu/usr.bin/perl/cpan/Test-Simple/lib/Test/Tester.pm b/gnu/usr.bin/perl/cpan/Test-Simple/lib/Test/Tester.pm index 1cc7bd179e7..7ddc3cfe2be 100644 --- a/gnu/usr.bin/perl/cpan/Test-Simple/lib/Test/Tester.pm +++ b/gnu/usr.bin/perl/cpan/Test-Simple/lib/Test/Tester.pm @@ -18,7 +18,7 @@ require Exporter; use vars qw( @ISA @EXPORT ); -our $VERSION = '1.302175'; +our $VERSION = '1.302190'; @EXPORT = qw( run_tests check_tests check_test cmp_results show_space ); @ISA = qw( Exporter ); diff --git a/gnu/usr.bin/perl/cpan/Test-Simple/lib/Test/Tester/Capture.pm b/gnu/usr.bin/perl/cpan/Test-Simple/lib/Test/Tester/Capture.pm index c5c454215f5..846f1d23ab4 100644 --- a/gnu/usr.bin/perl/cpan/Test-Simple/lib/Test/Tester/Capture.pm +++ b/gnu/usr.bin/perl/cpan/Test-Simple/lib/Test/Tester/Capture.pm @@ -2,7 +2,7 @@ use strict; package Test::Tester::Capture; -our $VERSION = '1.302175'; +our $VERSION = '1.302190'; use Test::Builder; diff --git a/gnu/usr.bin/perl/cpan/Test-Simple/lib/Test/Tester/CaptureRunner.pm b/gnu/usr.bin/perl/cpan/Test-Simple/lib/Test/Tester/CaptureRunner.pm index a86ef0616c8..dff28a6f491 100644 --- a/gnu/usr.bin/perl/cpan/Test-Simple/lib/Test/Tester/CaptureRunner.pm +++ b/gnu/usr.bin/perl/cpan/Test-Simple/lib/Test/Tester/CaptureRunner.pm @@ -3,7 +3,7 @@ use strict; package Test::Tester::CaptureRunner; -our $VERSION = '1.302175'; +our $VERSION = '1.302190'; use Test::Tester::Capture; diff --git a/gnu/usr.bin/perl/cpan/Test-Simple/lib/Test/Tester/Delegate.pm b/gnu/usr.bin/perl/cpan/Test-Simple/lib/Test/Tester/Delegate.pm index 2036f2ebc28..20738f8da96 100644 --- a/gnu/usr.bin/perl/cpan/Test-Simple/lib/Test/Tester/Delegate.pm +++ b/gnu/usr.bin/perl/cpan/Test-Simple/lib/Test/Tester/Delegate.pm @@ -3,7 +3,7 @@ use warnings; package Test::Tester::Delegate; -our $VERSION = '1.302175'; +our $VERSION = '1.302190'; use Scalar::Util(); diff --git a/gnu/usr.bin/perl/cpan/Test-Simple/lib/Test/use/ok.pm b/gnu/usr.bin/perl/cpan/Test-Simple/lib/Test/use/ok.pm index 4113ef59c86..5f0e686dc83 100644 --- a/gnu/usr.bin/perl/cpan/Test-Simple/lib/Test/use/ok.pm +++ b/gnu/usr.bin/perl/cpan/Test-Simple/lib/Test/use/ok.pm @@ -1,7 +1,7 @@ package Test::use::ok; use 5.005; -our $VERSION = '1.302175'; +our $VERSION = '1.302190'; __END__ diff --git a/gnu/usr.bin/perl/cpan/Test-Simple/lib/ok.pm b/gnu/usr.bin/perl/cpan/Test-Simple/lib/ok.pm index f3b394d9f69..a300a73d8bf 100644 --- a/gnu/usr.bin/perl/cpan/Test-Simple/lib/ok.pm +++ b/gnu/usr.bin/perl/cpan/Test-Simple/lib/ok.pm @@ -1,5 +1,5 @@ package ok; -our $VERSION = '1.302175'; +our $VERSION = '1.302190'; use strict; use Test::More (); diff --git a/gnu/usr.bin/perl/cpan/Text-Balanced/lib/Text/Balanced.pm b/gnu/usr.bin/perl/cpan/Text-Balanced/lib/Text/Balanced.pm index 4fbb1bc6315..324a023f385 100644 --- a/gnu/usr.bin/perl/cpan/Text-Balanced/lib/Text/Balanced.pm +++ b/gnu/usr.bin/perl/cpan/Text-Balanced/lib/Text/Balanced.pm @@ -1,35 +1,44 @@ +# Copyright (C) 1997-2001 Damian Conway. All rights reserved. +# Copyright (C) 2009 Adam Kennedy. +# Copyright (C) 2015 Steve Hay. All rights reserved. + +# This module is free software; you can redistribute it and/or modify it under +# the same terms as Perl itself, i.e. under the terms of either the GNU General +# Public License or the Artistic License, as specified in the F file. + package Text::Balanced; # EXTRACT VARIOUSLY DELIMITED TEXT SEQUENCES FROM STRINGS. # FOR FULL DOCUMENTATION SEE Balanced.pod -use 5.005; +use 5.008001; use strict; use Exporter (); -use SelfLoader; use vars qw { $VERSION @ISA %EXPORT_TAGS }; BEGIN { - $VERSION = '2.03'; - @ISA = 'Exporter'; - %EXPORT_TAGS = ( - ALL => [ qw{ - &extract_delimited - &extract_bracketed - &extract_quotelike - &extract_codeblock - &extract_variable - &extract_tagged - &extract_multiple - &gen_delimited_pat - &gen_extract_tagged - &delimited_pat - } ], - ); + $VERSION = '2.04'; + @ISA = 'Exporter'; + %EXPORT_TAGS = ( + ALL => [ qw{ + &extract_delimited + &extract_bracketed + &extract_quotelike + &extract_codeblock + &extract_variable + &extract_tagged + &extract_multiple + &gen_delimited_pat + &gen_extract_tagged + &delimited_pat + } ], + ); } Exporter::export_ok_tags('ALL'); +## no critic (Subroutines::ProhibitSubroutinePrototypes) + # PROTOTYPES sub _match_bracketed($$$$$$); @@ -40,80 +49,80 @@ sub _match_quotelike($$$$); # HANDLE RETURN VALUES IN VARIOUS CONTEXTS sub _failmsg { - my ($message, $pos) = @_; - $@ = bless { - error => $message, - pos => $pos, - }, 'Text::Balanced::ErrorMsg'; + my ($message, $pos) = @_; + $@ = bless { + error => $message, + pos => $pos, + }, 'Text::Balanced::ErrorMsg'; } sub _fail { - my ($wantarray, $textref, $message, $pos) = @_; - _failmsg $message, $pos if $message; - return (undef, $$textref, undef) if $wantarray; - return undef; + my ($wantarray, $textref, $message, $pos) = @_; + _failmsg $message, $pos if $message; + return (undef, $$textref, undef) if $wantarray; + return; } sub _succeed { - $@ = undef; - my ($wantarray,$textref) = splice @_, 0, 2; - my ($extrapos, $extralen) = @_ > 18 - ? splice(@_, -2, 2) - : (0, 0); - my ($startlen, $oppos) = @_[5,6]; - my $remainderpos = $_[2]; - if ( $wantarray ) { - my @res; - while (my ($from, $len) = splice @_, 0, 2) { - push @res, substr($$textref, $from, $len); - } - if ( $extralen ) { # CORRECT FILLET - my $extra = substr($res[0], $extrapos-$oppos, $extralen, "\n"); - $res[1] = "$extra$res[1]"; - eval { substr($$textref,$remainderpos,0) = $extra; - substr($$textref,$extrapos,$extralen,"\n")} ; - #REARRANGE HERE DOC AND FILLET IF POSSIBLE - pos($$textref) = $remainderpos-$extralen+1; # RESET \G - } else { - pos($$textref) = $remainderpos; # RESET \G - } - return @res; - } else { - my $match = substr($$textref,$_[0],$_[1]); - substr($match,$extrapos-$_[0]-$startlen,$extralen,"") if $extralen; - my $extra = $extralen - ? substr($$textref, $extrapos, $extralen)."\n" : ""; - eval {substr($$textref,$_[4],$_[1]+$_[5])=$extra} ; #CHOP OUT PREFIX & MATCH, IF POSSIBLE - pos($$textref) = $_[4]; # RESET \G - return $match; - } + $@ = undef; + my ($wantarray,$textref) = splice @_, 0, 2; + my ($extrapos, $extralen) = @_ > 18 + ? splice(@_, -2, 2) + : (0, 0); + my ($startlen, $oppos) = @_[5,6]; + my $remainderpos = $_[2]; + if ( $wantarray ) { + my @res; + while (my ($from, $len) = splice @_, 0, 2) { + push @res, substr($$textref, $from, $len); + } + if ( $extralen ) { # CORRECT FILLET + my $extra = substr($res[0], $extrapos-$oppos, $extralen, "\n"); + $res[1] = "$extra$res[1]"; + eval { substr($$textref,$remainderpos,0) = $extra; + substr($$textref,$extrapos,$extralen,"\n")} ; + #REARRANGE HERE DOC AND FILLET IF POSSIBLE + pos($$textref) = $remainderpos-$extralen+1; # RESET \G + } else { + pos($$textref) = $remainderpos; # RESET \G + } + return @res; + } else { + my $match = substr($$textref,$_[0],$_[1]); + substr($match,$extrapos-$_[0]-$startlen,$extralen,"") if $extralen; + my $extra = $extralen + ? substr($$textref, $extrapos, $extralen)."\n" : ""; + eval {substr($$textref,$_[4],$_[1]+$_[5])=$extra} ; #CHOP OUT PREFIX & MATCH, IF POSSIBLE + pos($$textref) = $_[4]; # RESET \G + return $match; + } } # BUILD A PATTERN MATCHING A SIMPLE DELIMITED STRING sub gen_delimited_pat($;$) # ($delimiters;$escapes) { - my ($dels, $escs) = @_; - return "" unless $dels =~ /\S/; - $escs = '\\' unless $escs; - $escs .= substr($escs,-1) x (length($dels)-length($escs)); - my @pat = (); - my $i; - for ($i=0; $i\0-\377/[[(({{</) - { - return _fail $wantarray, $textref, - "Did not find a suitable bracket in delimiter: \"$_[1]\"", - 0; - } - my $posbug = pos; - $ldel = join('|', map { quotemeta $_ } split('', $ldel)); - $rdel = join('|', map { quotemeta $_ } split('', $rdel)); - pos = $posbug; - - my $startpos = pos $$textref || 0; - my @match = _match_bracketed($textref,$pre, $ldel, $qdel, $quotelike, $rdel); - - return _fail ($wantarray, $textref) unless @match; - - return _succeed ( $wantarray, $textref, - $match[2], $match[5]+2, # MATCH - @match[8,9], # REMAINDER - @match[0,1], # PREFIX - ); + my $textref = defined $_[0] ? \$_[0] : \$_; + my $ldel = defined $_[1] ? $_[1] : '{([<'; + my $pre = defined $_[2] ? $_[2] : '\s*'; + my $wantarray = wantarray; + my $qdel = ""; + my $quotelike; + $ldel =~ s/'//g and $qdel .= q{'}; + $ldel =~ s/"//g and $qdel .= q{"}; + $ldel =~ s/`//g and $qdel .= q{`}; + $ldel =~ s/q//g and $quotelike = 1; + $ldel =~ tr/[](){}<>\0-\377/[[(({{</) + { + return _fail $wantarray, $textref, + "Did not find a suitable bracket in delimiter: \"$_[1]\"", + 0; + } + my $posbug = pos; + $ldel = join('|', map { quotemeta $_ } split('', $ldel)); + $rdel = join('|', map { quotemeta $_ } split('', $rdel)); + pos = $posbug; + + my $startpos = pos $$textref || 0; + my @match = _match_bracketed($textref,$pre, $ldel, $qdel, $quotelike, $rdel); + + return _fail ($wantarray, $textref) unless @match; + + return _succeed ( $wantarray, $textref, + $match[2], $match[5]+2, # MATCH + @match[8,9], # REMAINDER + @match[0,1], # PREFIX + ); } -sub _match_bracketed($$$$$$) # $textref, $pre, $ldel, $qdel, $quotelike, $rdel +sub _match_bracketed($$$$$$) # $textref, $pre, $ldel, $qdel, $quotelike, $rdel { - my ($textref, $pre, $ldel, $qdel, $quotelike, $rdel) = @_; - my ($startpos, $ldelpos, $endpos) = (pos $$textref = pos $$textref||0); - unless ($$textref =~ m/\G$pre/gc) - { - _failmsg "Did not find prefix: /$pre/", $startpos; - return; - } - - $ldelpos = pos $$textref; - - unless ($$textref =~ m/\G($ldel)/gc) - { - _failmsg "Did not find opening bracket after prefix: \"$pre\"", - pos $$textref; - pos $$textref = $startpos; - return; - } - - my @nesting = ( $1 ); - my $textlen = length $$textref; - while (pos $$textref < $textlen) - { - next if $$textref =~ m/\G\\./gcs; - - if ($$textref =~ m/\G($ldel)/gc) - { - push @nesting, $1; - } - elsif ($$textref =~ m/\G($rdel)/gc) - { - my ($found, $brackettype) = ($1, $1); - if ($#nesting < 0) - { - _failmsg "Unmatched closing bracket: \"$found\"", - pos $$textref; - pos $$textref = $startpos; - return; - } - my $expected = pop(@nesting); - $expected =~ tr/({[/; - if ($expected ne $brackettype) - { - _failmsg qq{Mismatched closing bracket: expected "$expected" but found "$found"}, - pos $$textref; - pos $$textref = $startpos; - return; - } - last if $#nesting < 0; - } - elsif ($qdel && $$textref =~ m/\G([$qdel])/gc) - { - $$textref =~ m/\G[^\\$1]*(?:\\.[^\\$1]*)*(\Q$1\E)/gsc and next; - _failmsg "Unmatched embedded quote ($1)", - pos $$textref; - pos $$textref = $startpos; - return; - } - elsif ($quotelike && _match_quotelike($textref,"",1,0)) - { - next; - } - - else { $$textref =~ m/\G(?:[a-zA-Z0-9]+|.)/gcs } - } - if ($#nesting>=0) - { - _failmsg "Unmatched opening bracket(s): " - . join("..",@nesting)."..", - pos $$textref; - pos $$textref = $startpos; - return; - } - - $endpos = pos $$textref; - - return ( - $startpos, $ldelpos-$startpos, # PREFIX - $ldelpos, 1, # OPENING BRACKET - $ldelpos+1, $endpos-$ldelpos-2, # CONTENTS - $endpos-1, 1, # CLOSING BRACKET - $endpos, length($$textref)-$endpos, # REMAINDER - ); + my ($textref, $pre, $ldel, $qdel, $quotelike, $rdel) = @_; + my ($startpos, $ldelpos, $endpos) = (pos $$textref = pos $$textref||0); + unless ($$textref =~ m/\G$pre/gc) + { + _failmsg "Did not find prefix: /$pre/", $startpos; + return; + } + + $ldelpos = pos $$textref; + + unless ($$textref =~ m/\G($ldel)/gc) + { + _failmsg "Did not find opening bracket after prefix: \"$pre\"", + pos $$textref; + pos $$textref = $startpos; + return; + } + + my @nesting = ( $1 ); + my $textlen = length $$textref; + while (pos $$textref < $textlen) + { + next if $$textref =~ m/\G\\./gcs; + + if ($$textref =~ m/\G($ldel)/gc) + { + push @nesting, $1; + } + elsif ($$textref =~ m/\G($rdel)/gc) + { + my ($found, $brackettype) = ($1, $1); + if ($#nesting < 0) + { + _failmsg "Unmatched closing bracket: \"$found\"", + pos $$textref; + pos $$textref = $startpos; + return; + } + my $expected = pop(@nesting); + $expected =~ tr/({[/; + if ($expected ne $brackettype) + { + _failmsg qq{Mismatched closing bracket: expected "$expected" but found "$found"}, + pos $$textref; + pos $$textref = $startpos; + return; + } + last if $#nesting < 0; + } + elsif ($qdel && $$textref =~ m/\G([$qdel])/gc) + { + $$textref =~ m/\G[^\\$1]*(?:\\.[^\\$1]*)*(\Q$1\E)/gsc and next; + _failmsg "Unmatched embedded quote ($1)", + pos $$textref; + pos $$textref = $startpos; + return; + } + elsif ($quotelike && _match_quotelike($textref,"",1,0)) + { + next; + } + + else { $$textref =~ m/\G(?:[a-zA-Z0-9]+|.)/gcs } + } + if ($#nesting>=0) + { + _failmsg "Unmatched opening bracket(s): " + . join("..",@nesting)."..", + pos $$textref; + pos $$textref = $startpos; + return; + } + + $endpos = pos $$textref; + + return ( + $startpos, $ldelpos-$startpos, # PREFIX + $ldelpos, 1, # OPENING BRACKET + $ldelpos+1, $endpos-$ldelpos-2, # CONTENTS + $endpos-1, 1, # CLOSING BRACKET + $endpos, length($$textref)-$endpos, # REMAINDER + ); } sub _revbracket($) { - my $brack = reverse $_[0]; - $brack =~ tr/[({/; - return $brack; + my $brack = reverse $_[0]; + $brack =~ tr/[({/; + return $brack; } my $XMLNAME = q{[a-zA-Z_:][a-zA-Z0-9_:.-]*}; sub extract_tagged (;$$$$$) # ($text, $opentag, $closetag, $pre, \%options) { - my $textref = defined $_[0] ? \$_[0] : \$_; - my $ldel = $_[1]; - my $rdel = $_[2]; - my $pre = defined $_[3] ? $_[3] : '\s*'; - my %options = defined $_[4] ? %{$_[4]} : (); - my $omode = defined $options{fail} ? $options{fail} : ''; - my $bad = ref($options{reject}) eq 'ARRAY' ? join('|', @{$options{reject}}) - : defined($options{reject}) ? $options{reject} - : '' - ; - my $ignore = ref($options{ignore}) eq 'ARRAY' ? join('|', @{$options{ignore}}) - : defined($options{ignore}) ? $options{ignore} - : '' - ; - - if (!defined $ldel) { $ldel = '<\w+(?:' . gen_delimited_pat(q{'"}) . '|[^>])*>'; } - $@ = undef; - - my @match = _match_tagged($textref, $pre, $ldel, $rdel, $omode, $bad, $ignore); - - return _fail(wantarray, $textref) unless @match; - return _succeed wantarray, $textref, - $match[2], $match[3]+$match[5]+$match[7], # MATCH - @match[8..9,0..1,2..7]; # REM, PRE, BITS + my $textref = defined $_[0] ? \$_[0] : \$_; + my $ldel = $_[1]; + my $rdel = $_[2]; + my $pre = defined $_[3] ? $_[3] : '\s*'; + my %options = defined $_[4] ? %{$_[4]} : (); + my $omode = defined $options{fail} ? $options{fail} : ''; + my $bad = ref($options{reject}) eq 'ARRAY' ? join('|', @{$options{reject}}) + : defined($options{reject}) ? $options{reject} + : '' + ; + my $ignore = ref($options{ignore}) eq 'ARRAY' ? join('|', @{$options{ignore}}) + : defined($options{ignore}) ? $options{ignore} + : '' + ; + + if (!defined $ldel) { $ldel = '<\w+(?:' . gen_delimited_pat(q{'"}) . '|[^>])*>'; } + $@ = undef; + + my @match = _match_tagged($textref, $pre, $ldel, $rdel, $omode, $bad, $ignore); + + return _fail(wantarray, $textref) unless @match; + return _succeed wantarray, $textref, + $match[2], $match[3]+$match[5]+$match[7], # MATCH + @match[8..9,0..1,2..7]; # REM, PRE, BITS } -sub _match_tagged # ($$$$$$$) +sub _match_tagged # ($$$$$$$) { - my ($textref, $pre, $ldel, $rdel, $omode, $bad, $ignore) = @_; - my $rdelspec; - - my ($startpos, $opentagpos, $textpos, $parapos, $closetagpos, $endpos) = ( pos($$textref) = pos($$textref)||0 ); - - unless ($$textref =~ m/\G($pre)/gc) - { - _failmsg "Did not find prefix: /$pre/", pos $$textref; - goto failed; - } - - $opentagpos = pos($$textref); - - unless ($$textref =~ m/\G$ldel/gc) - { - _failmsg "Did not find opening tag: /$ldel/", pos $$textref; - goto failed; - } - - $textpos = pos($$textref); - - if (!defined $rdel) - { - $rdelspec = substr($$textref, $-[0], $+[0] - $-[0]); - unless ($rdelspec =~ s/\A([[(<{]+)($XMLNAME).*/ quotemeta "$1\/$2". _revbracket($1) /oes) - { - _failmsg "Unable to construct closing tag to match: $rdel", - pos $$textref; - goto failed; - } - } - else - { - $rdelspec = eval "qq{$rdel}" || do { - my $del; - for (qw,~ ! ^ & * ) _ + - = } ] : " ; ' > . ? / | ',) - { next if $rdel =~ /\Q$_/; $del = $_; last } - unless ($del) { - use Carp; - croak "Can't interpolate right delimiter $rdel" - } - eval "qq$del$rdel$del"; - }; - } - - while (pos($$textref) < length($$textref)) - { - next if $$textref =~ m/\G\\./gc; - - if ($$textref =~ m/\G(\n[ \t]*\n)/gc ) - { - $parapos = pos($$textref) - length($1) - unless defined $parapos; - } - elsif ($$textref =~ m/\G($rdelspec)/gc ) - { - $closetagpos = pos($$textref)-length($1); - goto matched; - } - elsif ($ignore && $$textref =~ m/\G(?:$ignore)/gc) - { - next; - } - elsif ($bad && $$textref =~ m/\G($bad)/gcs) - { - pos($$textref) -= length($1); # CUT OFF WHATEVER CAUSED THE SHORTNESS - goto short if ($omode eq 'PARA' || $omode eq 'MAX'); - _failmsg "Found invalid nested tag: $1", pos $$textref; - goto failed; - } - elsif ($$textref =~ m/\G($ldel)/gc) - { - my $tag = $1; - pos($$textref) -= length($tag); # REWIND TO NESTED TAG - unless (_match_tagged(@_)) # MATCH NESTED TAG - { - goto short if $omode eq 'PARA' || $omode eq 'MAX'; - _failmsg "Found unbalanced nested tag: $tag", - pos $$textref; - goto failed; - } - } - else { $$textref =~ m/./gcs } - } + my ($textref, $pre, $ldel, $rdel, $omode, $bad, $ignore) = @_; + my $rdelspec; + + my ($startpos, $opentagpos, $textpos, $parapos, $closetagpos, $endpos) = ( pos($$textref) = pos($$textref)||0 ); + + unless ($$textref =~ m/\G($pre)/gc) + { + _failmsg "Did not find prefix: /$pre/", pos $$textref; + goto failed; + } + + $opentagpos = pos($$textref); + + unless ($$textref =~ m/\G$ldel/gc) + { + _failmsg "Did not find opening tag: /$ldel/", pos $$textref; + goto failed; + } + + $textpos = pos($$textref); + + if (!defined $rdel) + { + $rdelspec = substr($$textref, $-[0], $+[0] - $-[0]); + unless ($rdelspec =~ s/\A([[(<{]+)($XMLNAME).*/ quotemeta "$1\/$2". _revbracket($1) /oes) + { + _failmsg "Unable to construct closing tag to match: $rdel", + pos $$textref; + goto failed; + } + } + else + { + ## no critic (BuiltinFunctions::ProhibitStringyEval) + $rdelspec = eval "qq{$rdel}" || do { + my $del; + for (qw,~ ! ^ & * ) _ + - = } ] : " ; ' > . ? / | ',) + { next if $rdel =~ /\Q$_/; $del = $_; last } + unless ($del) { + use Carp; + croak "Can't interpolate right delimiter $rdel" + } + eval "qq$del$rdel$del"; + }; + } + + while (pos($$textref) < length($$textref)) + { + next if $$textref =~ m/\G\\./gc; + + if ($$textref =~ m/\G(\n[ \t]*\n)/gc ) + { + $parapos = pos($$textref) - length($1) + unless defined $parapos; + } + elsif ($$textref =~ m/\G($rdelspec)/gc ) + { + $closetagpos = pos($$textref)-length($1); + goto matched; + } + elsif ($ignore && $$textref =~ m/\G(?:$ignore)/gc) + { + next; + } + elsif ($bad && $$textref =~ m/\G($bad)/gcs) + { + pos($$textref) -= length($1); # CUT OFF WHATEVER CAUSED THE SHORTNESS + goto short if ($omode eq 'PARA' || $omode eq 'MAX'); + _failmsg "Found invalid nested tag: $1", pos $$textref; + goto failed; + } + elsif ($$textref =~ m/\G($ldel)/gc) + { + my $tag = $1; + pos($$textref) -= length($tag); # REWIND TO NESTED TAG + unless (_match_tagged(@_)) # MATCH NESTED TAG + { + goto short if $omode eq 'PARA' || $omode eq 'MAX'; + _failmsg "Found unbalanced nested tag: $tag", + pos $$textref; + goto failed; + } + } + else { $$textref =~ m/./gcs } + } short: - $closetagpos = pos($$textref); - goto matched if $omode eq 'MAX'; - goto failed unless $omode eq 'PARA'; - - if (defined $parapos) { pos($$textref) = $parapos } - else { $parapos = pos($$textref) } - - return ( - $startpos, $opentagpos-$startpos, # PREFIX - $opentagpos, $textpos-$opentagpos, # OPENING TAG - $textpos, $parapos-$textpos, # TEXT - $parapos, 0, # NO CLOSING TAG - $parapos, length($$textref)-$parapos, # REMAINDER - ); - + $closetagpos = pos($$textref); + goto matched if $omode eq 'MAX'; + goto failed unless $omode eq 'PARA'; + + if (defined $parapos) { pos($$textref) = $parapos } + else { $parapos = pos($$textref) } + + return ( + $startpos, $opentagpos-$startpos, # PREFIX + $opentagpos, $textpos-$opentagpos, # OPENING TAG + $textpos, $parapos-$textpos, # TEXT + $parapos, 0, # NO CLOSING TAG + $parapos, length($$textref)-$parapos, # REMAINDER + ); + matched: - $endpos = pos($$textref); - return ( - $startpos, $opentagpos-$startpos, # PREFIX - $opentagpos, $textpos-$opentagpos, # OPENING TAG - $textpos, $closetagpos-$textpos, # TEXT - $closetagpos, $endpos-$closetagpos, # CLOSING TAG - $endpos, length($$textref)-$endpos, # REMAINDER - ); + $endpos = pos($$textref); + return ( + $startpos, $opentagpos-$startpos, # PREFIX + $opentagpos, $textpos-$opentagpos, # OPENING TAG + $textpos, $closetagpos-$textpos, # TEXT + $closetagpos, $endpos-$closetagpos, # CLOSING TAG + $endpos, length($$textref)-$endpos, # REMAINDER + ); failed: - _failmsg "Did not find closing tag", pos $$textref unless $@; - pos($$textref) = $startpos; - return; + _failmsg "Did not find closing tag", pos $$textref unless $@; + pos($$textref) = $startpos; + return; } sub extract_variable (;$$) { - my $textref = defined $_[0] ? \$_[0] : \$_; - return ("","","") unless defined $$textref; - my $pre = defined $_[1] ? $_[1] : '\s*'; + my $textref = defined $_[0] ? \$_[0] : \$_; + return ("","","") unless defined $$textref; + my $pre = defined $_[1] ? $_[1] : '\s*'; - my @match = _match_variable($textref,$pre); + my @match = _match_variable($textref,$pre); - return _fail wantarray, $textref unless @match; + return _fail wantarray, $textref unless @match; - return _succeed wantarray, $textref, - @match[2..3,4..5,0..1]; # MATCH, REMAINDER, PREFIX + return _succeed wantarray, $textref, + @match[2..3,4..5,0..1]; # MATCH, REMAINDER, PREFIX } sub _match_variable($$) @@ -438,582 +448,581 @@ sub _match_variable($$) # $# # $^ # $$ - my ($textref, $pre) = @_; - my $startpos = pos($$textref) = pos($$textref)||0; - unless ($$textref =~ m/\G($pre)/gc) - { - _failmsg "Did not find prefix: /$pre/", pos $$textref; - return; - } - my $varpos = pos($$textref); - unless ($$textref =~ m{\G\$\s*(?!::)(\d+|[][&`'+*./|,";%=~:?!\@<>()-]|\^[a-z]?)}gci) - { - unless ($$textref =~ m/\G((\$#?|[*\@\%]|\\&)+)/gc) - { - _failmsg "Did not find leading dereferencer", pos $$textref; - pos $$textref = $startpos; - return; - } - my $deref = $1; - - unless ($$textref =~ m/\G\s*(?:::|')?(?:[_a-z]\w*(?:::|'))*[_a-z]\w*/gci - or _match_codeblock($textref, "", '\{', '\}', '\{', '\}', 0) - or $deref eq '$#' or $deref eq '$$' ) - { - _failmsg "Bad identifier after dereferencer", pos $$textref; - pos $$textref = $startpos; - return; - } - } - - while (1) - { - next if $$textref =~ m/\G\s*(?:->)?\s*[{]\w+[}]/gc; - next if _match_codeblock($textref, - qr/\s*->\s*(?:[_a-zA-Z]\w+\s*)?/, - qr/[({[]/, qr/[)}\]]/, - qr/[({[]/, qr/[)}\]]/, 0); - next if _match_codeblock($textref, - qr/\s*/, qr/[{[]/, qr/[}\]]/, - qr/[{[]/, qr/[}\]]/, 0); - next if _match_variable($textref,'\s*->\s*'); - next if $$textref =~ m/\G\s*->\s*\w+(?![{([])/gc; - last; - } - - my $endpos = pos($$textref); - return ($startpos, $varpos-$startpos, - $varpos, $endpos-$varpos, - $endpos, length($$textref)-$endpos - ); + my ($textref, $pre) = @_; + my $startpos = pos($$textref) = pos($$textref)||0; + unless ($$textref =~ m/\G($pre)/gc) + { + _failmsg "Did not find prefix: /$pre/", pos $$textref; + return; + } + my $varpos = pos($$textref); + unless ($$textref =~ m{\G\$\s*(?!::)(\d+|[][&`'+*./|,";%=~:?!\@<>()-]|\^[a-z]?)}gci) + { + unless ($$textref =~ m/\G((\$#?|[*\@\%]|\\&)+)/gc) + { + _failmsg "Did not find leading dereferencer", pos $$textref; + pos $$textref = $startpos; + return; + } + my $deref = $1; + + unless ($$textref =~ m/\G\s*(?:::|')?(?:[_a-z]\w*(?:::|'))*[_a-z]\w*/gci + or _match_codeblock($textref, "", '\{', '\}', '\{', '\}', 0) + or $deref eq '$#' or $deref eq '$$' ) + { + _failmsg "Bad identifier after dereferencer", pos $$textref; + pos $$textref = $startpos; + return; + } + } + + while (1) + { + next if $$textref =~ m/\G\s*(?:->)?\s*[{]\w+[}]/gc; + next if _match_codeblock($textref, + qr/\s*->\s*(?:[_a-zA-Z]\w+\s*)?/, + qr/[({[]/, qr/[)}\]]/, + qr/[({[]/, qr/[)}\]]/, 0); + next if _match_codeblock($textref, + qr/\s*/, qr/[{[]/, qr/[}\]]/, + qr/[{[]/, qr/[}\]]/, 0); + next if _match_variable($textref,'\s*->\s*'); + next if $$textref =~ m/\G\s*->\s*\w+(?![{([])/gc; + last; + } + + my $endpos = pos($$textref); + return ($startpos, $varpos-$startpos, + $varpos, $endpos-$varpos, + $endpos, length($$textref)-$endpos + ); } sub extract_codeblock (;$$$$$) { - my $textref = defined $_[0] ? \$_[0] : \$_; - my $wantarray = wantarray; - my $ldel_inner = defined $_[1] ? $_[1] : '{'; - my $pre = defined $_[2] ? $_[2] : '\s*'; - my $ldel_outer = defined $_[3] ? $_[3] : $ldel_inner; - my $rd = $_[4]; - my $rdel_inner = $ldel_inner; - my $rdel_outer = $ldel_outer; - my $posbug = pos; - for ($ldel_inner, $ldel_outer) { tr/[]()<>{}\0-\377/[[((<<{{/ds } - for ($rdel_inner, $rdel_outer) { tr/[]()<>{}\0-\377/]]))>>}}/ds } - for ($ldel_inner, $ldel_outer, $rdel_inner, $rdel_outer) - { - $_ = '('.join('|',map { quotemeta $_ } split('',$_)).')' - } - pos = $posbug; - - my @match = _match_codeblock($textref, $pre, - $ldel_outer, $rdel_outer, - $ldel_inner, $rdel_inner, - $rd); - return _fail($wantarray, $textref) unless @match; - return _succeed($wantarray, $textref, - @match[2..3,4..5,0..1] # MATCH, REMAINDER, PREFIX - ); + my $textref = defined $_[0] ? \$_[0] : \$_; + my $wantarray = wantarray; + my $ldel_inner = defined $_[1] ? $_[1] : '{'; + my $pre = defined $_[2] ? $_[2] : '\s*'; + my $ldel_outer = defined $_[3] ? $_[3] : $ldel_inner; + my $rd = $_[4]; + my $rdel_inner = $ldel_inner; + my $rdel_outer = $ldel_outer; + my $posbug = pos; + for ($ldel_inner, $ldel_outer) { tr/[]()<>{}\0-\377/[[((<<{{/ds } + for ($rdel_inner, $rdel_outer) { tr/[]()<>{}\0-\377/]]))>>}}/ds } + for ($ldel_inner, $ldel_outer, $rdel_inner, $rdel_outer) + { + $_ = '('.join('|',map { quotemeta $_ } split('',$_)).')' + } + pos = $posbug; + + my @match = _match_codeblock($textref, $pre, + $ldel_outer, $rdel_outer, + $ldel_inner, $rdel_inner, + $rd); + return _fail($wantarray, $textref) unless @match; + return _succeed($wantarray, $textref, + @match[2..3,4..5,0..1] # MATCH, REMAINDER, PREFIX + ); } sub _match_codeblock($$$$$$$) { - my ($textref, $pre, $ldel_outer, $rdel_outer, $ldel_inner, $rdel_inner, $rd) = @_; - my $startpos = pos($$textref) = pos($$textref) || 0; - unless ($$textref =~ m/\G($pre)/gc) - { - _failmsg qq{Did not match prefix /$pre/ at"} . - substr($$textref,pos($$textref),20) . - q{..."}, - pos $$textref; - return; - } - my $codepos = pos($$textref); - unless ($$textref =~ m/\G($ldel_outer)/gc) # OUTERMOST DELIMITER - { - _failmsg qq{Did not find expected opening bracket at "} . - substr($$textref,pos($$textref),20) . - q{..."}, - pos $$textref; - pos $$textref = $startpos; - return; - } - my $closing = $1; - $closing =~ tr/([<{/)]>}/; - my $matched; - my $patvalid = 1; - while (pos($$textref) < length($$textref)) - { - $matched = ''; - if ($rd && $$textref =~ m#\G(\Q(?)\E|\Q(s?)\E|\Q(s)\E)#gc) - { - $patvalid = 0; - next; - } - - if ($$textref =~ m/\G\s*#.*/gc) - { - next; - } - - if ($$textref =~ m/\G\s*($rdel_outer)/gc) - { - unless ($matched = ($closing && $1 eq $closing) ) - { - next if $1 eq '>'; # MIGHT BE A "LESS THAN" - _failmsg q{Mismatched closing bracket at "} . - substr($$textref,pos($$textref),20) . - qq{...". Expected '$closing'}, - pos $$textref; - } - last; - } - - if (_match_variable($textref,'\s*') || - _match_quotelike($textref,'\s*',$patvalid,$patvalid) ) - { - $patvalid = 0; - next; - } - - - # NEED TO COVER MANY MORE CASES HERE!!! - if ($$textref =~ m#\G\s*(?!$ldel_inner) - ( [-+*x/%^&|.]=? - | [!=]~ - | =(?!>) - | (\*\*|&&|\|\||<<|>>)=? - | split|grep|map|return - | [([] - )#gcx) - { - $patvalid = 1; - next; - } - - if ( _match_codeblock($textref, '\s*', $ldel_inner, $rdel_inner, $ldel_inner, $rdel_inner, $rd) ) - { - $patvalid = 1; - next; - } - - if ($$textref =~ m/\G\s*$ldel_outer/gc) - { - _failmsg q{Improperly nested codeblock at "} . - substr($$textref,pos($$textref),20) . - q{..."}, - pos $$textref; - last; - } - - $patvalid = 0; - $$textref =~ m/\G\s*(\w+|[-=>]>|.|\Z)/gc; - } - continue { $@ = undef } - - unless ($matched) - { - _failmsg 'No match found for opening bracket', pos $$textref - unless $@; - return; - } - - my $endpos = pos($$textref); - return ( $startpos, $codepos-$startpos, - $codepos, $endpos-$codepos, - $endpos, length($$textref)-$endpos, - ); + my ($textref, $pre, $ldel_outer, $rdel_outer, $ldel_inner, $rdel_inner, $rd) = @_; + my $startpos = pos($$textref) = pos($$textref) || 0; + unless ($$textref =~ m/\G($pre)/gc) + { + _failmsg qq{Did not match prefix /$pre/ at"} . + substr($$textref,pos($$textref),20) . + q{..."}, + pos $$textref; + return; + } + my $codepos = pos($$textref); + unless ($$textref =~ m/\G($ldel_outer)/gc) # OUTERMOST DELIMITER + { + _failmsg qq{Did not find expected opening bracket at "} . + substr($$textref,pos($$textref),20) . + q{..."}, + pos $$textref; + pos $$textref = $startpos; + return; + } + my $closing = $1; + $closing =~ tr/([<{/)]>}/; + my $matched; + my $patvalid = 1; + while (pos($$textref) < length($$textref)) + { + $matched = ''; + if ($rd && $$textref =~ m#\G(\Q(?)\E|\Q(s?)\E|\Q(s)\E)#gc) + { + $patvalid = 0; + next; + } + + if ($$textref =~ m/\G\s*#.*/gc) + { + next; + } + + if ($$textref =~ m/\G\s*($rdel_outer)/gc) + { + unless ($matched = ($closing && $1 eq $closing) ) + { + next if $1 eq '>'; # MIGHT BE A "LESS THAN" + _failmsg q{Mismatched closing bracket at "} . + substr($$textref,pos($$textref),20) . + qq{...". Expected '$closing'}, + pos $$textref; + } + last; + } + + if (_match_variable($textref,'\s*') || + _match_quotelike($textref,'\s*',$patvalid,$patvalid) ) + { + $patvalid = 0; + next; + } + + + # NEED TO COVER MANY MORE CASES HERE!!! + if ($$textref =~ m#\G\s*(?!$ldel_inner) + ( [-+*x/%^&|.]=? + | [!=]~ + | =(?!>) + | (\*\*|&&|\|\||<<|>>)=? + | split|grep|map|return + | [([] + )#gcx) + { + $patvalid = 1; + next; + } + + if ( _match_codeblock($textref, '\s*', $ldel_inner, $rdel_inner, $ldel_inner, $rdel_inner, $rd) ) + { + $patvalid = 1; + next; + } + + if ($$textref =~ m/\G\s*$ldel_outer/gc) + { + _failmsg q{Improperly nested codeblock at "} . + substr($$textref,pos($$textref),20) . + q{..."}, + pos $$textref; + last; + } + + $patvalid = 0; + $$textref =~ m/\G\s*(\w+|[-=>]>|.|\Z)/gc; + } + continue { $@ = undef } + + unless ($matched) + { + _failmsg 'No match found for opening bracket', pos $$textref + unless $@; + return; + } + + my $endpos = pos($$textref); + return ( $startpos, $codepos-$startpos, + $codepos, $endpos-$codepos, + $endpos, length($$textref)-$endpos, + ); } my %mods = ( - 'none' => '[cgimsox]*', - 'm' => '[cgimsox]*', - 's' => '[cegimsox]*', - 'tr' => '[cds]*', - 'y' => '[cds]*', - 'qq' => '', - 'qx' => '', - 'qw' => '', - 'qr' => '[imsx]*', - 'q' => '', - ); + 'none' => '[cgimsox]*', + 'm' => '[cgimsox]*', + 's' => '[cegimsox]*', + 'tr' => '[cds]*', + 'y' => '[cds]*', + 'qq' => '', + 'qx' => '', + 'qw' => '', + 'qr' => '[imsx]*', + 'q' => '', +); sub extract_quotelike (;$$) { - my $textref = $_[0] ? \$_[0] : \$_; - my $wantarray = wantarray; - my $pre = defined $_[1] ? $_[1] : '\s*'; - - my @match = _match_quotelike($textref,$pre,1,0); - return _fail($wantarray, $textref) unless @match; - return _succeed($wantarray, $textref, - $match[2], $match[18]-$match[2], # MATCH - @match[18,19], # REMAINDER - @match[0,1], # PREFIX - @match[2..17], # THE BITS - @match[20,21], # ANY FILLET? - ); + my $textref = $_[0] ? \$_[0] : \$_; + my $wantarray = wantarray; + my $pre = defined $_[1] ? $_[1] : '\s*'; + + my @match = _match_quotelike($textref,$pre,1,0); + return _fail($wantarray, $textref) unless @match; + return _succeed($wantarray, $textref, + $match[2], $match[18]-$match[2], # MATCH + @match[18,19], # REMAINDER + @match[0,1], # PREFIX + @match[2..17], # THE BITS + @match[20,21], # ANY FILLET? + ); }; -sub _match_quotelike($$$$) # ($textref, $prepat, $allow_raw_match) +sub _match_quotelike($$$$) # ($textref, $prepat, $allow_raw_match) { - my ($textref, $pre, $rawmatch, $qmark) = @_; - - my ($textlen,$startpos, - $oppos, - $preld1pos,$ld1pos,$str1pos,$rd1pos, - $preld2pos,$ld2pos,$str2pos,$rd2pos, - $modpos) = ( length($$textref), pos($$textref) = pos($$textref) || 0 ); - - unless ($$textref =~ m/\G($pre)/gc) - { - _failmsg qq{Did not find prefix /$pre/ at "} . - substr($$textref, pos($$textref), 20) . - q{..."}, - pos $$textref; - return; - } - $oppos = pos($$textref); - - my $initial = substr($$textref,$oppos,1); - - if ($initial && $initial =~ m|^[\"\'\`]| - || $rawmatch && $initial =~ m|^/| - || $qmark && $initial =~ m|^\?|) - { - unless ($$textref =~ m/ \Q$initial\E [^\\$initial]* (\\.[^\\$initial]*)* \Q$initial\E /gcsx) - { - _failmsg qq{Did not find closing delimiter to match '$initial' at "} . - substr($$textref, $oppos, 20) . - q{..."}, - pos $$textref; - pos $$textref = $startpos; - return; - } - $modpos= pos($$textref); - $rd1pos = $modpos-1; - - if ($initial eq '/' || $initial eq '?') - { - $$textref =~ m/\G$mods{none}/gc - } - - my $endpos = pos($$textref); - return ( - $startpos, $oppos-$startpos, # PREFIX - $oppos, 0, # NO OPERATOR - $oppos, 1, # LEFT DEL - $oppos+1, $rd1pos-$oppos-1, # STR/PAT - $rd1pos, 1, # RIGHT DEL - $modpos, 0, # NO 2ND LDEL - $modpos, 0, # NO 2ND STR - $modpos, 0, # NO 2ND RDEL - $modpos, $endpos-$modpos, # MODIFIERS - $endpos, $textlen-$endpos, # REMAINDER - ); - } - - unless ($$textref =~ m{\G(\b(?:m|s|qq|qx|qw|q|qr|tr|y)\b(?=\s*\S)|<<)}gc) - { - _failmsg q{No quotelike operator found after prefix at "} . - substr($$textref, pos($$textref), 20) . - q{..."}, - pos $$textref; - pos $$textref = $startpos; - return; - } - - my $op = $1; - $preld1pos = pos($$textref); - if ($op eq '<<') { - $ld1pos = pos($$textref); - my $label; - if ($$textref =~ m{\G([A-Za-z_]\w*)}gc) { - $label = $1; - } - elsif ($$textref =~ m{ \G ' ([^'\\]* (?:\\.[^'\\]*)*) ' - | \G " ([^"\\]* (?:\\.[^"\\]*)*) " - | \G ` ([^`\\]* (?:\\.[^`\\]*)*) ` - }gcsx) { - $label = $+; - } - else { - $label = ""; - } - my $extrapos = pos($$textref); - $$textref =~ m{.*\n}gc; - $str1pos = pos($$textref)--; - unless ($$textref =~ m{.*?\n(?=\Q$label\E\n)}gc) { - _failmsg qq{Missing here doc terminator ('$label') after "} . - substr($$textref, $startpos, 20) . - q{..."}, - pos $$textref; - pos $$textref = $startpos; - return; - } - $rd1pos = pos($$textref); + my ($textref, $pre, $rawmatch, $qmark) = @_; + + my ($textlen,$startpos, + $oppos, + $preld1pos,$ld1pos,$str1pos,$rd1pos, + $preld2pos,$ld2pos,$str2pos,$rd2pos, + $modpos) = ( length($$textref), pos($$textref) = pos($$textref) || 0 ); + + unless ($$textref =~ m/\G($pre)/gc) + { + _failmsg qq{Did not find prefix /$pre/ at "} . + substr($$textref, pos($$textref), 20) . + q{..."}, + pos $$textref; + return; + } + $oppos = pos($$textref); + + my $initial = substr($$textref,$oppos,1); + + if ($initial && $initial =~ m|^[\"\'\`]| + || $rawmatch && $initial =~ m|^/| + || $qmark && $initial =~ m|^\?|) + { + unless ($$textref =~ m/ \Q$initial\E [^\\$initial]* (\\.[^\\$initial]*)* \Q$initial\E /gcsx) + { + _failmsg qq{Did not find closing delimiter to match '$initial' at "} . + substr($$textref, $oppos, 20) . + q{..."}, + pos $$textref; + pos $$textref = $startpos; + return; + } + $modpos= pos($$textref); + $rd1pos = $modpos-1; + + if ($initial eq '/' || $initial eq '?') + { + $$textref =~ m/\G$mods{none}/gc + } + + my $endpos = pos($$textref); + return ( + $startpos, $oppos-$startpos, # PREFIX + $oppos, 0, # NO OPERATOR + $oppos, 1, # LEFT DEL + $oppos+1, $rd1pos-$oppos-1, # STR/PAT + $rd1pos, 1, # RIGHT DEL + $modpos, 0, # NO 2ND LDEL + $modpos, 0, # NO 2ND STR + $modpos, 0, # NO 2ND RDEL + $modpos, $endpos-$modpos, # MODIFIERS + $endpos, $textlen-$endpos, # REMAINDER + ); + } + + unless ($$textref =~ m{\G(\b(?:m|s|qq|qx|qw|q|qr|tr|y)\b(?=\s*\S)|<<)}gc) + { + _failmsg q{No quotelike operator found after prefix at "} . + substr($$textref, pos($$textref), 20) . + q{..."}, + pos $$textref; + pos $$textref = $startpos; + return; + } + + my $op = $1; + $preld1pos = pos($$textref); + if ($op eq '<<') { + $ld1pos = pos($$textref); + my $label; + if ($$textref =~ m{\G([A-Za-z_]\w*)}gc) { + $label = $1; + } + elsif ($$textref =~ m{ \G ' ([^'\\]* (?:\\.[^'\\]*)*) ' + | \G " ([^"\\]* (?:\\.[^"\\]*)*) " + | \G ` ([^`\\]* (?:\\.[^`\\]*)*) ` + }gcsx) { + $label = $+; + } + else { + $label = ""; + } + my $extrapos = pos($$textref); + $$textref =~ m{.*\n}gc; + $str1pos = pos($$textref)--; + unless ($$textref =~ m{.*?\n(?=\Q$label\E\n)}gc) { + _failmsg qq{Missing here doc terminator ('$label') after "} . + substr($$textref, $startpos, 20) . + q{..."}, + pos $$textref; + pos $$textref = $startpos; + return; + } + $rd1pos = pos($$textref); $$textref =~ m{\Q$label\E\n}gc; - $ld2pos = pos($$textref); - return ( - $startpos, $oppos-$startpos, # PREFIX - $oppos, length($op), # OPERATOR - $ld1pos, $extrapos-$ld1pos, # LEFT DEL - $str1pos, $rd1pos-$str1pos, # STR/PAT - $rd1pos, $ld2pos-$rd1pos, # RIGHT DEL - $ld2pos, 0, # NO 2ND LDEL - $ld2pos, 0, # NO 2ND STR - $ld2pos, 0, # NO 2ND RDEL - $ld2pos, 0, # NO MODIFIERS - $ld2pos, $textlen-$ld2pos, # REMAINDER - $extrapos, $str1pos-$extrapos, # FILLETED BIT - ); - } - - $$textref =~ m/\G\s*/gc; - $ld1pos = pos($$textref); - $str1pos = $ld1pos+1; - - unless ($$textref =~ m/\G(\S)/gc) # SHOULD USE LOOKAHEAD - { - _failmsg "No block delimiter found after quotelike $op", - pos $$textref; - pos $$textref = $startpos; - return; - } - pos($$textref) = $ld1pos; # HAVE TO DO THIS BECAUSE LOOKAHEAD BROKEN - my ($ldel1, $rdel1) = ("\Q$1","\Q$1"); - if ($ldel1 =~ /[[(<{]/) - { - $rdel1 =~ tr/[({/; - defined(_match_bracketed($textref,"",$ldel1,"","",$rdel1)) - || do { pos $$textref = $startpos; return }; + $ld2pos = pos($$textref); + return ( + $startpos, $oppos-$startpos, # PREFIX + $oppos, length($op), # OPERATOR + $ld1pos, $extrapos-$ld1pos, # LEFT DEL + $str1pos, $rd1pos-$str1pos, # STR/PAT + $rd1pos, $ld2pos-$rd1pos, # RIGHT DEL + $ld2pos, 0, # NO 2ND LDEL + $ld2pos, 0, # NO 2ND STR + $ld2pos, 0, # NO 2ND RDEL + $ld2pos, 0, # NO MODIFIERS + $ld2pos, $textlen-$ld2pos, # REMAINDER + $extrapos, $str1pos-$extrapos, # FILLETED BIT + ); + } + + $$textref =~ m/\G\s*/gc; + $ld1pos = pos($$textref); + $str1pos = $ld1pos+1; + + unless ($$textref =~ m/\G(\S)/gc) # SHOULD USE LOOKAHEAD + { + _failmsg "No block delimiter found after quotelike $op", + pos $$textref; + pos $$textref = $startpos; + return; + } + pos($$textref) = $ld1pos; # HAVE TO DO THIS BECAUSE LOOKAHEAD BROKEN + my ($ldel1, $rdel1) = ("\Q$1","\Q$1"); + if ($ldel1 =~ /[[(<{]/) + { + $rdel1 =~ tr/[({/; + defined(_match_bracketed($textref,"",$ldel1,"","",$rdel1)) + || do { pos $$textref = $startpos; return }; $ld2pos = pos($$textref); $rd1pos = $ld2pos-1; - } - else - { - $$textref =~ /\G$ldel1[^\\$ldel1]*(\\.[^\\$ldel1]*)*$ldel1/gcs - || do { pos $$textref = $startpos; return }; + } + else + { + $$textref =~ /\G$ldel1[^\\$ldel1]*(\\.[^\\$ldel1]*)*$ldel1/gcs + || do { pos $$textref = $startpos; return }; $ld2pos = $rd1pos = pos($$textref)-1; - } - - my $second_arg = $op =~ /s|tr|y/ ? 1 : 0; - if ($second_arg) - { - my ($ldel2, $rdel2); - if ($ldel1 =~ /[[(<{]/) - { - unless ($$textref =~ /\G\s*(\S)/gc) # SHOULD USE LOOKAHEAD - { - _failmsg "Missing second block for quotelike $op", - pos $$textref; - pos $$textref = $startpos; - return; - } - $ldel2 = $rdel2 = "\Q$1"; - $rdel2 =~ tr/[({/; - } - else - { - $ldel2 = $rdel2 = $ldel1; - } - $str2pos = $ld2pos+1; - - if ($ldel2 =~ /[[(<{]/) - { - pos($$textref)--; # OVERCOME BROKEN LOOKAHEAD - defined(_match_bracketed($textref,"",$ldel2,"","",$rdel2)) - || do { pos $$textref = $startpos; return }; - } - else - { - $$textref =~ /[^\\$ldel2]*(\\.[^\\$ldel2]*)*$ldel2/gcs - || do { pos $$textref = $startpos; return }; - } - $rd2pos = pos($$textref)-1; - } - else - { - $ld2pos = $str2pos = $rd2pos = $rd1pos; - } - - $modpos = pos $$textref; - - $$textref =~ m/\G($mods{$op})/gc; - my $endpos = pos $$textref; - - return ( - $startpos, $oppos-$startpos, # PREFIX - $oppos, length($op), # OPERATOR - $ld1pos, 1, # LEFT DEL - $str1pos, $rd1pos-$str1pos, # STR/PAT - $rd1pos, 1, # RIGHT DEL - $ld2pos, $second_arg, # 2ND LDEL (MAYBE) - $str2pos, $rd2pos-$str2pos, # 2ND STR (MAYBE) - $rd2pos, $second_arg, # 2ND RDEL (MAYBE) - $modpos, $endpos-$modpos, # MODIFIERS - $endpos, $textlen-$endpos, # REMAINDER - ); + } + + my $second_arg = $op =~ /s|tr|y/ ? 1 : 0; + if ($second_arg) + { + my ($ldel2, $rdel2); + if ($ldel1 =~ /[[(<{]/) + { + unless ($$textref =~ /\G\s*(\S)/gc) # SHOULD USE LOOKAHEAD + { + _failmsg "Missing second block for quotelike $op", + pos $$textref; + pos $$textref = $startpos; + return; + } + $ldel2 = $rdel2 = "\Q$1"; + $rdel2 =~ tr/[({/; + } + else + { + $ldel2 = $rdel2 = $ldel1; + } + $str2pos = $ld2pos+1; + + if ($ldel2 =~ /[[(<{]/) + { + pos($$textref)--; # OVERCOME BROKEN LOOKAHEAD + defined(_match_bracketed($textref,"",$ldel2,"","",$rdel2)) + || do { pos $$textref = $startpos; return }; + } + else + { + $$textref =~ /[^\\$ldel2]*(\\.[^\\$ldel2]*)*$ldel2/gcs + || do { pos $$textref = $startpos; return }; + } + $rd2pos = pos($$textref)-1; + } + else + { + $ld2pos = $str2pos = $rd2pos = $rd1pos; + } + + $modpos = pos $$textref; + + $$textref =~ m/\G($mods{$op})/gc; + my $endpos = pos $$textref; + + return ( + $startpos, $oppos-$startpos, # PREFIX + $oppos, length($op), # OPERATOR + $ld1pos, 1, # LEFT DEL + $str1pos, $rd1pos-$str1pos, # STR/PAT + $rd1pos, 1, # RIGHT DEL + $ld2pos, $second_arg, # 2ND LDEL (MAYBE) + $str2pos, $rd2pos-$str2pos, # 2ND STR (MAYBE) + $rd2pos, $second_arg, # 2ND RDEL (MAYBE) + $modpos, $endpos-$modpos, # MODIFIERS + $endpos, $textlen-$endpos, # REMAINDER + ); } my $def_func = [ - sub { extract_variable($_[0], '') }, - sub { extract_quotelike($_[0],'') }, - sub { extract_codeblock($_[0],'{}','') }, + sub { extract_variable($_[0], '') }, + sub { extract_quotelike($_[0],'') }, + sub { extract_codeblock($_[0],'{}','') }, ]; -sub extract_multiple (;$$$$) # ($text, $functions_ref, $max_fields, $ignoreunknown) +sub extract_multiple (;$$$$) # ($text, $functions_ref, $max_fields, $ignoreunknown) { - my $textref = defined($_[0]) ? \$_[0] : \$_; - my $posbug = pos; - my ($lastpos, $firstpos); - my @fields = (); - - #for ($$textref) - { - my @func = defined $_[1] ? @{$_[1]} : @{$def_func}; - my $max = defined $_[2] && $_[2]>0 ? $_[2] : 1_000_000_000; - my $igunk = $_[3]; - - pos $$textref ||= 0; - - unless (wantarray) - { - use Carp; - carp "extract_multiple reset maximal count to 1 in scalar context" - if $^W && defined($_[2]) && $max > 1; - $max = 1 - } - - my $unkpos; - my $func; - my $class; - - my @class; - foreach $func ( @func ) - { - if (ref($func) eq 'HASH') - { - push @class, (keys %$func)[0]; - $func = (values %$func)[0]; - } - else - { - push @class, undef; - } - } - - FIELD: while (pos($$textref) < length($$textref)) - { - my ($field, $rem); - my @bits; - foreach my $i ( 0..$#func ) - { - my $pref; - $func = $func[$i]; - $class = $class[$i]; - $lastpos = pos $$textref; - if (ref($func) eq 'CODE') - { ($field,$rem,$pref) = @bits = $func->($$textref) } - elsif (ref($func) eq 'Text::Balanced::Extractor') - { @bits = $field = $func->extract($$textref) } - elsif( $$textref =~ m/\G$func/gc ) - { @bits = $field = defined($1) - ? $1 - : substr($$textref, $-[0], $+[0] - $-[0]) + my $textref = defined($_[0]) ? \$_[0] : \$_; + my $posbug = pos; + my ($lastpos, $firstpos); + my @fields = (); + + #for ($$textref) + { + my @func = defined $_[1] ? @{$_[1]} : @{$def_func}; + my $max = defined $_[2] && $_[2]>0 ? $_[2] : 1_000_000_000; + my $igunk = $_[3]; + + pos $$textref ||= 0; + + unless (wantarray) + { + use Carp; + carp "extract_multiple reset maximal count to 1 in scalar context" + if $^W && defined($_[2]) && $max > 1; + $max = 1 + } + + my $unkpos; + my $class; + + my @class; + foreach my $func ( @func ) + { + if (ref($func) eq 'HASH') + { + push @class, (keys %$func)[0]; + $func = (values %$func)[0]; + } + else + { + push @class, undef; + } + } + + FIELD: while (pos($$textref) < length($$textref)) + { + my ($field, $rem); + my @bits; + foreach my $i ( 0..$#func ) + { + my $pref; + my $func = $func[$i]; + $class = $class[$i]; + $lastpos = pos $$textref; + if (ref($func) eq 'CODE') + { ($field,$rem,$pref) = @bits = $func->($$textref) } + elsif (ref($func) eq 'Text::Balanced::Extractor') + { @bits = $field = $func->extract($$textref) } + elsif( $$textref =~ m/\G$func/gc ) + { @bits = $field = defined($1) + ? $1 + : substr($$textref, $-[0], $+[0] - $-[0]) + } + $pref ||= ""; + if (defined($field) && length($field)) + { + if (!$igunk) { + $unkpos = $lastpos + if length($pref) && !defined($unkpos); + if (defined $unkpos) + { + push @fields, substr($$textref, $unkpos, $lastpos-$unkpos).$pref; + $firstpos = $unkpos unless defined $firstpos; + undef $unkpos; + last FIELD if @fields == $max; + } } - $pref ||= ""; - if (defined($field) && length($field)) - { - if (!$igunk) { - $unkpos = $lastpos - if length($pref) && !defined($unkpos); - if (defined $unkpos) - { - push @fields, substr($$textref, $unkpos, $lastpos-$unkpos).$pref; - $firstpos = $unkpos unless defined $firstpos; - undef $unkpos; - last FIELD if @fields == $max; - } - } - push @fields, $class - ? bless (\$field, $class) - : $field; - $firstpos = $lastpos unless defined $firstpos; - $lastpos = pos $$textref; - last FIELD if @fields == $max; - next FIELD; - } - } - if ($$textref =~ /\G(.)/gcs) - { - $unkpos = pos($$textref)-1 - unless $igunk || defined $unkpos; - } - } - - if (defined $unkpos) - { - push @fields, substr($$textref, $unkpos); - $firstpos = $unkpos unless defined $firstpos; - $lastpos = length $$textref; - } - last; - } - - pos $$textref = $lastpos; - return @fields if wantarray; - - $firstpos ||= 0; - eval { substr($$textref,$firstpos,$lastpos-$firstpos)=""; - pos $$textref = $firstpos }; - return $fields[0]; + push @fields, $class + ? bless (\$field, $class) + : $field; + $firstpos = $lastpos unless defined $firstpos; + $lastpos = pos $$textref; + last FIELD if @fields == $max; + next FIELD; + } + } + if ($$textref =~ /\G(.)/gcs) + { + $unkpos = pos($$textref)-1 + unless $igunk || defined $unkpos; + } + } + + if (defined $unkpos) + { + push @fields, substr($$textref, $unkpos); + $firstpos = $unkpos unless defined $firstpos; + $lastpos = length $$textref; + } + last; + } + + pos $$textref = $lastpos; + return @fields if wantarray; + + $firstpos ||= 0; + eval { substr($$textref,$firstpos,$lastpos-$firstpos)=""; + pos $$textref = $firstpos }; + return $fields[0]; } sub gen_extract_tagged # ($opentag, $closetag, $pre, \%options) { - my $ldel = $_[0]; - my $rdel = $_[1]; - my $pre = defined $_[2] ? $_[2] : '\s*'; - my %options = defined $_[3] ? %{$_[3]} : (); - my $omode = defined $options{fail} ? $options{fail} : ''; - my $bad = ref($options{reject}) eq 'ARRAY' ? join('|', @{$options{reject}}) - : defined($options{reject}) ? $options{reject} - : '' - ; - my $ignore = ref($options{ignore}) eq 'ARRAY' ? join('|', @{$options{ignore}}) - : defined($options{ignore}) ? $options{ignore} - : '' - ; - - if (!defined $ldel) { $ldel = '<\w+(?:' . gen_delimited_pat(q{'"}) . '|[^>])*>'; } - - my $posbug = pos; - for ($ldel, $pre, $bad, $ignore) { $_ = qr/$_/ if $_ } - pos = $posbug; - - my $closure = sub - { - my $textref = defined $_[0] ? \$_[0] : \$_; - my @match = Text::Balanced::_match_tagged($textref, $pre, $ldel, $rdel, $omode, $bad, $ignore); - - return _fail(wantarray, $textref) unless @match; - return _succeed wantarray, $textref, - $match[2], $match[3]+$match[5]+$match[7], # MATCH - @match[8..9,0..1,2..7]; # REM, PRE, BITS - }; - - bless $closure, 'Text::Balanced::Extractor'; + my $ldel = $_[0]; + my $rdel = $_[1]; + my $pre = defined $_[2] ? $_[2] : '\s*'; + my %options = defined $_[3] ? %{$_[3]} : (); + my $omode = defined $options{fail} ? $options{fail} : ''; + my $bad = ref($options{reject}) eq 'ARRAY' ? join('|', @{$options{reject}}) + : defined($options{reject}) ? $options{reject} + : '' + ; + my $ignore = ref($options{ignore}) eq 'ARRAY' ? join('|', @{$options{ignore}}) + : defined($options{ignore}) ? $options{ignore} + : '' + ; + + if (!defined $ldel) { $ldel = '<\w+(?:' . gen_delimited_pat(q{'"}) . '|[^>])*>'; } + + my $posbug = pos; + for ($ldel, $pre, $bad, $ignore) { $_ = qr/$_/ if $_ } + pos = $posbug; + + my $closure = sub + { + my $textref = defined $_[0] ? \$_[0] : \$_; + my @match = Text::Balanced::_match_tagged($textref, $pre, $ldel, $rdel, $omode, $bad, $ignore); + + return _fail(wantarray, $textref) unless @match; + return _succeed wantarray, $textref, + $match[2], $match[3]+$match[5]+$match[7], # MATCH + @match[8..9,0..1,2..7]; # REM, PRE, BITS + }; + + bless $closure, 'Text::Balanced::Extractor'; } package Text::Balanced::Extractor; -sub extract($$) # ($self, $text) +sub extract($$) # ($self, $text) { - &{$_[0]}($_[1]); + &{$_[0]}($_[1]); } package Text::Balanced::ErrorMsg; @@ -1032,83 +1041,76 @@ Text::Balanced - Extract delimited text sequences from strings. =head1 SYNOPSIS - use Text::Balanced qw ( - extract_delimited - extract_bracketed - extract_quotelike - extract_codeblock - extract_variable - extract_tagged - extract_multiple - gen_delimited_pat - gen_extract_tagged - ); + use Text::Balanced qw ( + extract_delimited + extract_bracketed + extract_quotelike + extract_codeblock + extract_variable + extract_tagged + extract_multiple + gen_delimited_pat + gen_extract_tagged + ); - # Extract the initial substring of $text that is delimited by - # two (unescaped) instances of the first character in $delim. + # Extract the initial substring of $text that is delimited by + # two (unescaped) instances of the first character in $delim. - ($extracted, $remainder) = extract_delimited($text,$delim); + ($extracted, $remainder) = extract_delimited($text,$delim); + # Extract the initial substring of $text that is bracketed + # with a delimiter(s) specified by $delim (where the string + # in $delim contains one or more of '(){}[]<>'). - # Extract the initial substring of $text that is bracketed - # with a delimiter(s) specified by $delim (where the string - # in $delim contains one or more of '(){}[]<>'). + ($extracted, $remainder) = extract_bracketed($text,$delim); - ($extracted, $remainder) = extract_bracketed($text,$delim); + # Extract the initial substring of $text that is bounded by + # an XML tag. + ($extracted, $remainder) = extract_tagged($text); - # Extract the initial substring of $text that is bounded by - # an XML tag. + # Extract the initial substring of $text that is bounded by + # a C...C pair. Don't allow nested C tags - ($extracted, $remainder) = extract_tagged($text); + ($extracted, $remainder) = + extract_tagged($text,"BEGIN","END",undef,{bad=>["BEGIN"]}); + # Extract the initial substring of $text that represents a + # Perl "quote or quote-like operation" - # Extract the initial substring of $text that is bounded by - # a C...C pair. Don't allow nested C tags + ($extracted, $remainder) = extract_quotelike($text); - ($extracted, $remainder) = - extract_tagged($text,"BEGIN","END",undef,{bad=>["BEGIN"]}); + # Extract the initial substring of $text that represents a block + # of Perl code, bracketed by any of character(s) specified by $delim + # (where the string $delim contains one or more of '(){}[]<>'). + ($extracted, $remainder) = extract_codeblock($text,$delim); - # Extract the initial substring of $text that represents a - # Perl "quote or quote-like operation" + # Extract the initial substrings of $text that would be extracted by + # one or more sequential applications of the specified functions + # or regular expressions - ($extracted, $remainder) = extract_quotelike($text); + @extracted = extract_multiple($text, + [ \&extract_bracketed, + \&extract_quotelike, + \&some_other_extractor_sub, + qr/[xyz]*/, + 'literal', + ]); + # Create a string representing an optimized pattern (a la Friedl) + # that matches a substring delimited by any of the specified characters + # (in this case: any type of quote or a slash) - # Extract the initial substring of $text that represents a block - # of Perl code, bracketed by any of character(s) specified by $delim - # (where the string $delim contains one or more of '(){}[]<>'). + $patstring = gen_delimited_pat(q{'"`/}); - ($extracted, $remainder) = extract_codeblock($text,$delim); + # Generate a reference to an anonymous sub that is just like extract_tagged + # but pre-compiled and optimized for a specific pair of tags, and + # consequently much faster (i.e. 3 times faster). It uses qr// for better + # performance on repeated calls. - - # Extract the initial substrings of $text that would be extracted by - # one or more sequential applications of the specified functions - # or regular expressions - - @extracted = extract_multiple($text, - [ \&extract_bracketed, - \&extract_quotelike, - \&some_other_extractor_sub, - qr/[xyz]*/, - 'literal', - ]); - -# Create a string representing an optimized pattern (a la Friedl) -# that matches a substring delimited by any of the specified characters -# (in this case: any type of quote or a slash) - - $patstring = gen_delimited_pat(q{'"`/}); - -# Generate a reference to an anonymous sub that is just like extract_tagged -# but pre-compiled and optimized for a specific pair of tags, and consequently -# much faster (i.e. 3 times faster). It uses qr// for better performance on -# repeated calls, so it only works under Perl 5.005 or later. - - $extract_head = gen_extract_tagged('',''); - - ($extracted, $remainder) = $extract_head->($text); + $extract_head = gen_extract_tagged('',''); + ($extracted, $remainder) = $extract_head->($text); =head1 DESCRIPTION @@ -1128,7 +1130,7 @@ they extract an occurrence of the substring appearing immediately at the current matching position in the string (like a C<\G>-anchored regex would). -=head2 General behaviour in list contexts +=head2 General Behaviour in List Contexts In a list context, all the subroutines return a list, the first three elements of which are always: @@ -1150,31 +1152,31 @@ extracted string). On failure, the entire string is returned. The skipped prefix (i.e. the characters before the extracted string). On failure, C is returned. -=back +=back Note that in a list context, the contents of the original input text (the first -argument) are not modified in any way. +argument) are not modified in any way. However, if the input text was passed in a variable, that variable's C value is updated to point at the first character after the extracted text. That means that in a list context the various subroutines can be used much like regular expressions. For example: - while ( $next = (extract_quotelike($text))[0] ) - { - # process next quote-like (in $next) - } + while ( $next = (extract_quotelike($text))[0] ) + { + # process next quote-like (in $next) + } -=head2 General behaviour in scalar and void contexts +=head2 General Behaviour in Scalar and Void Contexts In a scalar context, the extracted string is returned, having first been removed from the input text. Thus, the following code also processes each quote-like operation, but actually removes them from $text: - while ( $next = extract_quotelike($text) ) - { - # process next quote-like (in $next) - } + while ( $next = extract_quotelike($text) ) + { + # process next quote-like (in $next) + } Note that if the input text is a read-only string (i.e. a literal), no attempt is made to remove the extracted text. @@ -1183,7 +1185,7 @@ In a void context the behaviour of the extraction subroutines is exactly the same as in a scalar context, except (of course) that the extracted substring is not returned. -=head2 A note about prefixes +=head2 A Note About Prefixes Prefix patterns are matched without any trailing modifiers (C etc.) This can bite you if you're expecting a prefix specification like @@ -1194,19 +1196,23 @@ pattern will only succeed if the

tag is on the current line, since To overcome this limitation, you need to turn on /s matching within the prefix pattern, using the C<(?s)> directive: '(?s).*?(?=

)' -=head2 C +=head2 Functions + +=over 4 + +=item C The C function formalizes the common idiom of extracting a single-character-delimited substring from the start of a string. For example, to extract a single-quote delimited string, the following code is typically used: - ($remainder = $text) =~ s/\A('(\\.|[^'])*')//s; - $extracted = $1; + ($remainder = $text) =~ s/\A('(\\.|[^'])*')//s; + $extracted = $1; but with C it can be simplified to: - ($extracted,$remainder) = extract_delimited($text, "'"); + ($extracted,$remainder) = extract_delimited($text, "'"); C takes up to four scalars (the input text, the delimiters, a prefix pattern to be skipped, and any escape characters) @@ -1240,42 +1246,42 @@ removed from the beginning of the first argument. Examples: - # Remove a single-quoted substring from the very beginning of $text: + # Remove a single-quoted substring from the very beginning of $text: - $substring = extract_delimited($text, "'", ''); + $substring = extract_delimited($text, "'", ''); - # Remove a single-quoted Pascalish substring (i.e. one in which - # doubling the quote character escapes it) from the very - # beginning of $text: + # Remove a single-quoted Pascalish substring (i.e. one in which + # doubling the quote character escapes it) from the very + # beginning of $text: - $substring = extract_delimited($text, "'", '', "'"); + $substring = extract_delimited($text, "'", '', "'"); - # Extract a single- or double- quoted substring from the - # beginning of $text, optionally after some whitespace - # (note the list context to protect $text from modification): + # Extract a single- or double- quoted substring from the + # beginning of $text, optionally after some whitespace + # (note the list context to protect $text from modification): - ($substring) = extract_delimited $text, q{"'}; + ($substring) = extract_delimited $text, q{"'}; - # Delete the substring delimited by the first '/' in $text: + # Delete the substring delimited by the first '/' in $text: - $text = join '', (extract_delimited($text,'/','[^/]*')[2,1]; + $text = join '', (extract_delimited($text,'/','[^/]*')[2,1]; Note that this last example is I the same as deleting the first quote-like pattern. For instance, if C<$text> contained the string: - "if ('./cmd' =~ m/$UNIXCMD/s) { $cmd = $1; }" - + "if ('./cmd' =~ m/$UNIXCMD/s) { $cmd = $1; }" + then after the deletion it would contain: - "if ('.$UNIXCMD/s) { $cmd = $1; }" + "if ('.$UNIXCMD/s) { $cmd = $1; }" not: - "if ('./cmd' =~ ms) { $cmd = $1; }" - + "if ('./cmd' =~ ms) { $cmd = $1; }" + See L<"extract_quotelike"> for a (partial) solution to this problem. -=head2 C +=item C Like C<"extract_delimited">, the C function takes up to three optional scalar arguments: a string to extract from, a delimiter @@ -1307,15 +1313,15 @@ balanced and correctly nested within the substring, and any other kind of For example, given the string: - $text = "{ an '[irregularly :-(] {} parenthesized >:-)' string }"; + $text = "{ an '[irregularly :-(] {} parenthesized >:-)' string }"; then a call to C in a list context: - @result = extract_bracketed( $text, '{}' ); + @result = extract_bracketed( $text, '{}' ); would return: - ( "{ an '[irregularly :-(] {} parenthesized >:-)' string }" , "" , "" ) + ( "{ an '[irregularly :-(] {} parenthesized >:-)' string }" , "" , "" ) since both sets of C<'{..}'> brackets are properly nested and evenly balanced. (In a scalar context just the first element of the array would be returned. In @@ -1323,18 +1329,18 @@ a void context, C<$text> would be replaced by an empty string.) Likewise the call in: - @result = extract_bracketed( $text, '{[' ); + @result = extract_bracketed( $text, '{[' ); would return the same result, since all sets of both types of specified delimiter brackets are correctly nested and balanced. However, the call in: - @result = extract_bracketed( $text, '{([<' ); + @result = extract_bracketed( $text, '{([<' ); would fail, returning: - ( undef , "{ an '[irregularly :-(] {} parenthesized >:-)' string }" ); + ( undef , "{ an '[irregularly :-(] {} parenthesized >:-)' string }" ); because the embedded pairs of C<'(..)'>s and C<'[..]'>s are "cross-nested" and the embedded C<'E'> is unbalanced. (In a scalar context, this call would @@ -1348,37 +1354,37 @@ However, if a particular species of quote character is included in the delimiter specification, then that type of quote will be correctly handled. for example, if C<$text> is: - $text = 'link'; + $text = 'link'; then - @result = extract_bracketed( $text, '<">' ); + @result = extract_bracketed( $text, '<">' ); returns: - ( '', 'link', "" ) + ( '', 'link', "" ) as expected. Without the specification of C<"> as an embedded quoter: - @result = extract_bracketed( $text, '<>' ); + @result = extract_bracketed( $text, '<>' ); the result would be: - ( 'link', "" ) + ( 'link', "" ) In addition to the quote delimiters C<'>, C<">, and C<`>, full Perl quote-like quoting (i.e. q{string}, qq{string}, etc) can be specified by including the letter 'q' as a delimiter. Hence: - @result = extract_bracketed( $text, '' ); + @result = extract_bracketed( $text, '' ); would correctly match something like this: - $text = ''; + $text = ''; See also: C<"extract_quotelike"> and C<"extract_codeblock">. -=head2 C +=item C C extracts any valid Perl variable or variable-involved expression, including scalars, arrays, hashes, array @@ -1429,11 +1435,10 @@ failure. In addition, the original input text has the returned substring In a void context, the input text just has the matched substring (and any specified prefix) removed. - -=head2 C +=item C C extracts and segments text between (balanced) -specified tags. +specified tags. The subroutine takes up to five optional arguments: @@ -1451,12 +1456,12 @@ that matches any standard XML tag is used. =item 3. -A string specifying a pattern to be matched at the closing tag. +A string specifying a pattern to be matched at the closing tag. If the pattern string is omitted (or C) then the closing tag is constructed by inserting a C after any leading bracket characters in the actual opening tag that was matched (I the pattern that matched the tag). For example, if the opening tag pattern -is specified as C<'{{\w+}}'> and actually matched the opening tag +is specified as C<'{{\w+}}'> and actually matched the opening tag C<"{{DATA}}">, then the constructed closing tag would be C<"{{/DATA}}">. =item 4. @@ -1487,7 +1492,7 @@ an HTML link (which should not contain nested links) use: =item C $listref> The list reference contains one or more strings specifying patterns -that are I be be treated as nested tags within the tagged text +that are I to be treated as nested tags within the tagged text (even if they would match the start tag pattern). For example, to extract an arbitrary XML tag, but ignore "empty" elements: @@ -1575,9 +1580,7 @@ text has the returned substring (and any prefix) removed from it. In a void context, the input text just has the matched substring (and any specified prefix) removed. -=head2 C - -(Note: This subroutine is only available under Perl5.005) +=item C C generates a new anonymous subroutine which extracts text between (balanced) specified tags. In other words, @@ -1589,7 +1592,7 @@ C, is that those generated subroutines: =over 4 -=item * +=item * do not have to reparse tag specification or parsing options every time they are called (whereas C has to effectively rebuild @@ -1598,7 +1601,7 @@ its tag parser on every call); =item * make use of the new qr// construct to pre-compile the regexes they use -(whereas C uses standard string variable interpolation +(whereas C uses standard string variable interpolation to create tag-matching patterns). =back @@ -1618,16 +1621,14 @@ equivalent to: return $extractor->($text); } -(although C is not currently implemented that way, in order -to preserve pre-5.005 compatibility). +(although C is not currently implemented that way). -Using C to create extraction functions for specific tags +Using C to create extraction functions for specific tags is a good idea if those functions are going to be called more than once, since their performance is typically twice as good as the more general-purpose C. - -=head2 C +=item C C attempts to recognize, extract, and segment any one of the various Perl quotes and quotelike operators (see @@ -1636,7 +1637,7 @@ delimiters (for the quotelike operators), and trailing modifiers are all caught. For example, in: extract_quotelike 'q # an octothorpe: \# (not the end of the q!) #' - + extract_quotelike ' "You said, \"Use sed\"." ' extract_quotelike ' s{([A-Z]{1,8}\.[A-Z]{3})} /\L$1\E/; ' @@ -1664,7 +1665,7 @@ will be extracted as if it were: This behaviour is identical to that of the actual compiler. C takes two arguments: the text to be processed and -a prefix to be matched at the very beginning of the text. If no prefix +a prefix to be matched at the very beginning of the text. If no prefix is specified, optional whitespace is the default. If no text is given, C<$_> is used. @@ -1710,7 +1711,7 @@ the left delimiter of the second block of the operation =item [8] -the text of the second block of the operation +the text of the second block of the operation (that is, the replacement of a substitution or the translation list of a translation), @@ -1757,7 +1758,7 @@ Examples: print "$op is not a pattern matching operation\n"; } -=head2 C and "here documents" +=item C C can successfully extract "here documents" from an input string, but with an important caveat in list contexts. @@ -1842,7 +1843,7 @@ you can pass the input variable as an interpolated literal: $quotelike = extract_quotelike("$var"); -=head2 C +=item C C attempts to recognize and extract a balanced bracket delimited substring that may contain unbalanced brackets @@ -1861,7 +1862,7 @@ Omitting the third argument (prefix argument) implies optional whitespace at the Omitting the fourth argument (outermost delimiter brackets) indicates that the value of the second argument is to be used for the outermost delimiters. -Once the prefix an dthe outermost opening delimiter bracket have been +Once the prefix and the outermost opening delimiter bracket have been recognized, code blocks are extracted by stepping through the input text and trying the following alternatives in sequence: @@ -1933,9 +1934,9 @@ SE')>> the '>' character is only treated as a delimited at the outermost level of the code block, so the directive is parsed correctly. -=head2 C +=item C -The C subroutine takes a string to be processed and a +The C subroutine takes a string to be processed and a list of extractors (subroutines or regular expressions) to apply to that string. In an array context C returns an array of substrings @@ -1947,7 +1948,7 @@ extracted substring removed from it. In all contexts C starts at the current C of the string, and sets that C appropriately after it matches. -Hence, the aim of of a call to C in a list context +Hence, the aim of a call to C in a list context is to split the processed string into as many non-overlapping fields as possible, by repeatedly applying each of the specified extractors to the remainder of the string. Thus C is @@ -1982,11 +1983,11 @@ An number specifying the maximum number of fields to return. If this argument is omitted (or C), split continues as long as possible. If the third argument is I, then extraction continues until I fields -have been successfully extracted, or until the string has been completely +have been successfully extracted, or until the string has been completely processed. -Note that in scalar and void contexts the value of this argument is -automatically reset to 1 (under C<-w>, a warning is issued if the argument +Note that in scalar and void contexts the value of this argument is +automatically reset to 1 (under C<-w>, a warning is issued if the argument has to be reset). =item 4. @@ -2026,7 +2027,7 @@ return value of the extractor will be blessed. If an extractor returns a defined value, that value is immediately treated as the next extracted field and pushed onto the list of fields. If the extractor was specified in a hash reference, the field is also -blessed into the appropriate class, +blessed into the appropriate class, If the extractor fails to match (in the case of a regex extractor), or returns an empty list or an undefined value (in the case of a subroutine extractor), it is assumed to have failed to extract. @@ -2080,7 +2081,7 @@ If you wanted the commas preserved as separate fields (i.e. like split does if your split pattern has capturing parentheses), you would just make the last parameter undefined (or remove it). -=head2 C +=item C The C subroutine takes a single (string) argument and > builds a Friedl-style optimized regex that matches a string delimited @@ -2119,11 +2120,12 @@ If more delimiters than escape chars are specified, the last escape char is used for the remaining delimiters. If no escape char is specified for a given specified delimiter, '\' is used. -=head2 C +=item C Note that C was previously called C. That name may still be used, but is now deprecated. - + +=back =head1 DIAGNOSTICS @@ -2170,7 +2172,7 @@ a closing bracket where none was expected. =item C -C, C or C ran +C, C or C ran out of characters in the text before closing one or more levels of nested brackets. @@ -2257,25 +2259,125 @@ to match the original opening tag (and the failure mode was not =back -=head1 AUTHOR +=head1 EXPORTS -Damian Conway (damian@conway.org) +The following symbols are, or can be, exported by this module: -=head1 BUGS AND IRRITATIONS +=over 4 + +=item Default Exports + +I. + +=item Optional Exports + +C, +C, +C, +C, +C, +C, +C, +C, +C, +C. + +=item Export Tags + +=over 4 + +=item C<:ALL> + +C, +C, +C, +C, +C, +C, +C, +C, +C, +C. + +=back + +=back + +=head1 KNOWN BUGS + +See L. + +=head1 FEEDBACK + +Patches, bug reports, suggestions or any other feedback is welcome. + +Patches can be sent as GitHub pull requests at +L. + +Bug reports and suggestions can be made on the CPAN Request Tracker at +L. + +Currently active requests on the CPAN Request Tracker can be viewed at +L. -There are undoubtedly serious bugs lurking somewhere in this code, if -only because parts of it give the impression of understanding a great deal -more about Perl than they really do. +Please test this distribution. See CPAN Testers Reports at +L for details of how to get involved. -Bug reports and other feedback are most welcome. +Previous test results on CPAN Testers Reports can be viewed at +L. + +Please rate this distribution on CPAN Ratings at +L. + +=head1 AVAILABILITY + +The latest version of this module is available from CPAN (see +L for details) at + +L or + +L or + +L. + +The latest source code is available from GitHub at +L. + +=head1 INSTALLATION + +See the F file. + +=head1 AUTHOR + +Damian Conway ELE. + +Steve Hay ELE is now maintaining +Text::Balanced as of version 2.03. =head1 COPYRIGHT -Copyright 1997 - 2001 Damian Conway. All Rights Reserved. +Copyright (C) 1997-2001 Damian Conway. All rights reserved. + +Copyright (C) 2009 Adam Kennedy. + +Copyright (C) 2015, 2020 Steve Hay. All rights reserved. + +=head1 LICENCE + +This module is free software; you can redistribute it and/or modify it under the +same terms as Perl itself, i.e. under the terms of either the GNU General Public +License or the Artistic License, as specified in the F file. + +=head1 VERSION + +Version 2.04 + +=head1 DATE + +11 Dec 2020 -Some (minor) parts copyright 2009 Adam Kennedy. +=head1 HISTORY -This module is free software. It may be used, redistributed -and/or modified under the same terms as Perl itself. +See the F file. =cut diff --git a/gnu/usr.bin/perl/cpan/Text-ParseWords/lib/Text/ParseWords.pm b/gnu/usr.bin/perl/cpan/Text-ParseWords/lib/Text/ParseWords.pm index 87f9c70a216..2bfe74d4a31 100644 --- a/gnu/usr.bin/perl/cpan/Text-ParseWords/lib/Text/ParseWords.pm +++ b/gnu/usr.bin/perl/cpan/Text-ParseWords/lib/Text/ParseWords.pm @@ -1,8 +1,9 @@ package Text::ParseWords; use strict; +use warnings; require 5.006; -our $VERSION = "3.30"; +our $VERSION = "3.31"; use Exporter; @@ -190,31 +191,46 @@ Text::ParseWords - parse text into an array of tokens or array of arrays =head1 DESCRIPTION -The &nested_quotewords() and "ewords() functions accept a delimiter +The C and C functions accept a delimiter (which can be a regular expression) and a list of lines and then breaks those lines up into a list of -words ignoring delimiters that appear inside quotes. "ewords() -returns all of the tokens in a single long list, while &nested_quotewords() -returns a list of token lists corresponding to the elements of @lines. -&parse_line() does tokenizing on a single string. The &*quotewords() -functions simply call &parse_line(), so if you're only splitting -one line you can call &parse_line() directly and save a function +words ignoring delimiters that appear inside quotes. C +returns all of the tokens in a single long list, while C +returns a list of token lists corresponding to the elements of C<@lines>. +C does tokenizing on a single string. The C<*quotewords()> +functions simply call C, so if you're only splitting +one line you can call C directly and save a function call. -The $keep argument is a boolean flag. If true, then the tokens are -split on the specified delimiter, but all other characters (including -quotes and backslashes) are kept in the tokens. If $keep is false then the -&*quotewords() functions remove all quotes and backslashes that are +The C<$keep> controls what happens with delimters and special characters: + +=over 4 + +=item true + +If true, then the tokens are split on the specified delimiter, +but all other characters (including quotes and backslashes) +are kept in the tokens. + +=item false + +If $keep is false then the C<*quotewords()> functions +remove all quotes and backslashes that are not themselves backslash-escaped or inside of single quotes (i.e., -"ewords() tries to interpret these characters just like the Bourne +C tries to interpret these characters just like the Bourne shell). NB: these semantics are significantly different from the original version of this module shipped with Perl 5.000 through 5.004. + +=item C<"delimiters"> + As an additional feature, $keep may be the keyword "delimiters" which causes the functions to preserve the delimiters in each string as tokens in the token lists, in addition to preserving quote and backslash characters. -&shellwords() is written as a special case of "ewords(), and it +=back + +C is written as a special case of C, and it does token parsing with whitespace as a delimiter-- similar to most Unix shells. @@ -280,20 +296,28 @@ L - for parsing CSV files =head1 AUTHORS -Maintainer: Alexandr Ciornii . +The original author is unknown, +but presumably this evolved from C in Perl 4. + +Much of the code for C +(including the primary regexp) +came from Joerk Behrends Ejbehrends@multimediaproduzenten.deE. + +Examples section and other documentation provided by +John Heidemann Ejohnh@ISI.EDUE. -Previous maintainer: Hal Pomeranz , 1994-1997 (Original -author unknown). Much of the code for &parse_line() (including the -primary regexp) from Joerk Behrends . +Hal Pomeranz Epomeranz@netcom.comE +maintained this from 1994 through 1999, +and did the first CPAN release. -Examples section another documentation provided by John Heidemann - +Alexandr Ciornii EalexchornyATgmail.comE +maintained this from 2008 to 2015. -Bug reports, patches, and nagging provided by lots of folks-- thanks -everybody! Special thanks to Michael Schwern -for assuring me that a &nested_quotewords() would be useful, and to -Jeff Friedl for telling me not to worry about -error-checking (sort of-- you had to be there). +Many other people have contributed, +with special thanks due to +Michael Schwern Eschwern@envirolink.orgE +and +Jeff Friedl Ejfriedl@yahoo-inc.comE. =head1 COPYRIGHT AND LICENSE diff --git a/gnu/usr.bin/perl/cpan/Text-ParseWords/t/ParseWords.t b/gnu/usr.bin/perl/cpan/Text-ParseWords/t/ParseWords.t index 905ea00864d..b859a8707f7 100755 --- a/gnu/usr.bin/perl/cpan/Text-ParseWords/t/ParseWords.t +++ b/gnu/usr.bin/perl/cpan/Text-ParseWords/t/ParseWords.t @@ -1,122 +1,123 @@ -#!./perl - -use warnings; -use Text::ParseWords; -use Test::More tests => 27; - -@words = shellwords(qq(foo "bar quiz" zoo)); -is($words[0], 'foo'); -is($words[1], 'bar quiz'); -is($words[2], 'zoo'); - -{ - # Gonna get some undefined things back - no warnings 'uninitialized' ; - - # Test quotewords() with other parameters and null last field - @words = quotewords(':+', 1, 'foo:::"bar:foo":zoo zoo:'); - is(join(";", @words), qq(foo;"bar:foo";zoo zoo;)); -} - -# Test $keep eq 'delimiters' and last field zero -@words = quotewords('\s+', 'delimiters', '4 3 2 1 0'); -is(join(";", @words), qq(4; ;3; ;2; ;1; ;0)); - -# Big ol' nasty test (thanks, Joerk!) -$string = 'aaaa"bbbbb" cc\\ cc \\\\\\"dddd" eee\\\\\\"ffff" "gg"'; - -# First with $keep == 1 -$result = join('|', parse_line('\s+', 1, $string)); -is($result, 'aaaa"bbbbb"|cc\\ cc|\\\\\\"dddd" eee\\\\\\"ffff"|"gg"'); - -# Now, $keep == 0 -$result = join('|', parse_line('\s+', 0, $string)); -is($result, 'aaaabbbbb|cc cc|\\"dddd eee\\"ffff|gg'); - -# Now test single quote behavior -$string = 'aaaa"bbbbb" cc\\ cc \\\\\\"dddd\' eee\\\\\\"ffff\' gg'; -$result = join('|', parse_line('\s+', 0, $string)); -is($result, 'aaaabbbbb|cc cc|\\"dddd eee\\\\\\"ffff|gg'); - -# Make sure @nested_quotewords does the right thing -@lists = nested_quotewords('\s+', 0, 'a b c', '1 2 3', 'x y z'); -is (@lists, 3); -is (@{$lists[0]}, 3); -is (@{$lists[1]}, 3); -is (@{$lists[2]}, 3); - -# Now test error return -$string = 'foo bar baz"bach blech boop'; - -@words = shellwords($string); -is(@words, 0); - -@words = parse_line('s+', 0, $string); -is(@words, 0); - -@words = quotewords('s+', 0, $string); -is(@words, 0); - -{ - # Gonna get some more undefined things back - no warnings 'uninitialized' ; - - @words = nested_quotewords('s+', 0, $string); - is(@words, 0); - - # Now test empty fields - $result = join('|', parse_line(':', 0, 'foo::0:"":::')); - is($result, 'foo||0||||'); - - # Test for 0 in quotes without $keep - $result = join('|', parse_line(':', 0, ':"0":')); - is($result, '|0|'); - - # Test for \001 in quoted string - $result = join('|', parse_line(':', 0, ':"' . "\001" . '":')); - is($result, "|\1|"); - -} - -# Now test perlish single quote behavior -$Text::ParseWords::PERL_SINGLE_QUOTE = 1; -$string = 'aaaa"bbbbb" cc\ cc \\\\\"dddd\' eee\\\\\"\\\'ffff\' gg'; -$result = join('|', parse_line('\s+', 0, $string)); -is($result, 'aaaabbbbb|cc cc|\"dddd eee\\\\"\'ffff|gg'); - -# test whitespace in the delimiters -@words = quotewords(' ', 1, '4 3 2 1 0'); -is(join(";", @words), qq(4;3;2;1;0)); - -# [perl #30442] Text::ParseWords does not handle backslashed newline inside quoted text -$string = qq{"field1" "field2\\\nstill field2" "field3"}; - -$result = join('|', parse_line("\t", 1, $string)); -is($result, qq{"field1"|"field2\\\nstill field2"|"field3"}); - -$result = join('|', parse_line("\t", 0, $string)); -is($result, "field1|field2\nstill field2|field3"); - -SKIP: { # unicode - skip "No unicode",1 if $]<5.008; - $string = qq{"field1"\x{1234}"field2\\\x{1234}still field2"\x{1234}"field3"}; - $result = join('|', parse_line("\x{1234}", 0, $string)); - is($result, "field1|field2\x{1234}still field2|field3",'Unicode'); -} - -# missing quote after matching regex used to hang after change #22997 -"1234" =~ /(1)(2)(3)(4)/; -$string = qq{"missing quote}; -$result = join('|', shellwords($string)); -is($result, ""); - -# make sure shellwords strips out leading whitespace and trailng undefs -# from parse_line, so it's behavior is more like /bin/sh -$result = join('|', shellwords(" aa \\ \\ bb ", " \\ ", "cc dd ee\\ ")); -is($result, "aa| | bb| |cc|dd|ee "); - -$SIG{ALRM} = sub {die "Timeout!"}; -alarm(3); -@words = Text::ParseWords::old_shellwords("foo\\"); -is(@words, 1); -alarm(0); +#!./perl + +use strict; +use warnings; +use Text::ParseWords; +use Test::More tests => 27; + +my @words = shellwords(qq(foo "bar quiz" zoo)); +is($words[0], 'foo'); +is($words[1], 'bar quiz'); +is($words[2], 'zoo'); + +{ + # Gonna get some undefined things back + no warnings 'uninitialized' ; + + # Test quotewords() with other parameters and null last field + @words = quotewords(':+', 1, 'foo:::"bar:foo":zoo zoo:'); + is(join(";", @words), qq(foo;"bar:foo";zoo zoo;)); +} + +# Test $keep eq 'delimiters' and last field zero +@words = quotewords('\s+', 'delimiters', '4 3 2 1 0'); +is(join(";", @words), qq(4; ;3; ;2; ;1; ;0)); + +# Big ol' nasty test (thanks, Joerk!) +my $string = 'aaaa"bbbbb" cc\\ cc \\\\\\"dddd" eee\\\\\\"ffff" "gg"'; + +# First with $keep == 1 +my $result = join('|', parse_line('\s+', 1, $string)); +is($result, 'aaaa"bbbbb"|cc\\ cc|\\\\\\"dddd" eee\\\\\\"ffff"|"gg"'); + +# Now, $keep == 0 +$result = join('|', parse_line('\s+', 0, $string)); +is($result, 'aaaabbbbb|cc cc|\\"dddd eee\\"ffff|gg'); + +# Now test single quote behavior +$string = 'aaaa"bbbbb" cc\\ cc \\\\\\"dddd\' eee\\\\\\"ffff\' gg'; +$result = join('|', parse_line('\s+', 0, $string)); +is($result, 'aaaabbbbb|cc cc|\\"dddd eee\\\\\\"ffff|gg'); + +# Make sure @nested_quotewords does the right thing +my @lists = nested_quotewords('\s+', 0, 'a b c', '1 2 3', 'x y z'); +is (@lists, 3); +is (@{$lists[0]}, 3); +is (@{$lists[1]}, 3); +is (@{$lists[2]}, 3); + +# Now test error return +$string = 'foo bar baz"bach blech boop'; + +@words = shellwords($string); +is(@words, 0); + +@words = parse_line('s+', 0, $string); +is(@words, 0); + +@words = quotewords('s+', 0, $string); +is(@words, 0); + +{ + # Gonna get some more undefined things back + no warnings 'uninitialized' ; + + @words = nested_quotewords('s+', 0, $string); + is(@words, 0); + + # Now test empty fields + $result = join('|', parse_line(':', 0, 'foo::0:"":::')); + is($result, 'foo||0||||'); + + # Test for 0 in quotes without $keep + $result = join('|', parse_line(':', 0, ':"0":')); + is($result, '|0|'); + + # Test for \001 in quoted string + $result = join('|', parse_line(':', 0, ':"' . "\001" . '":')); + is($result, "|\1|"); + +} + +# Now test perlish single quote behavior +$Text::ParseWords::PERL_SINGLE_QUOTE = 1; +$string = 'aaaa"bbbbb" cc\ cc \\\\\"dddd\' eee\\\\\"\\\'ffff\' gg'; +$result = join('|', parse_line('\s+', 0, $string)); +is($result, 'aaaabbbbb|cc cc|\"dddd eee\\\\"\'ffff|gg'); + +# test whitespace in the delimiters +@words = quotewords(' ', 1, '4 3 2 1 0'); +is(join(";", @words), qq(4;3;2;1;0)); + +# [perl #30442] Text::ParseWords does not handle backslashed newline inside quoted text +$string = qq{"field1" "field2\\\nstill field2" "field3"}; + +$result = join('|', parse_line("\t", 1, $string)); +is($result, qq{"field1"|"field2\\\nstill field2"|"field3"}); + +$result = join('|', parse_line("\t", 0, $string)); +is($result, "field1|field2\nstill field2|field3"); + +SKIP: { # unicode + skip "No unicode",1 if $]<5.008; + $string = qq{"field1"\x{1234}"field2\\\x{1234}still field2"\x{1234}"field3"}; + $result = join('|', parse_line("\x{1234}", 0, $string)); + is($result, "field1|field2\x{1234}still field2|field3",'Unicode'); +} + +# missing quote after matching regex used to hang after change #22997 +"1234" =~ /(1)(2)(3)(4)/; +$string = qq{"missing quote}; +$result = join('|', shellwords($string)); +is($result, ""); + +# make sure shellwords strips out leading whitespace and trailng undefs +# from parse_line, so it's behavior is more like /bin/sh +$result = join('|', shellwords(" aa \\ \\ bb ", " \\ ", "cc dd ee\\ ")); +is($result, "aa| | bb| |cc|dd|ee "); + +$SIG{ALRM} = sub {die "Timeout!"}; +alarm(3); +@words = Text::ParseWords::old_shellwords("foo\\"); +is(@words, 1); +alarm(0); diff --git a/gnu/usr.bin/perl/cpan/Text-Tabs/lib/Text/Tabs.pm b/gnu/usr.bin/perl/cpan/Text-Tabs/lib/Text/Tabs.pm index 07fe2b8b021..b6c826ded93 100644 --- a/gnu/usr.bin/perl/cpan/Text-Tabs/lib/Text/Tabs.pm +++ b/gnu/usr.bin/perl/cpan/Text-Tabs/lib/Text/Tabs.pm @@ -1,44 +1,32 @@ -package Text::Tabs; - -require Exporter; - -@ISA = (Exporter); -@EXPORT = qw(expand unexpand $tabstop); +use strict; use warnings; -use vars qw($VERSION $SUBVERSION $tabstop $debug); -$VERSION = 2013.0523; -$SUBVERSION = 'modern'; - -use strict; +package Text::Tabs; -use 5.010_000; +BEGIN { require Exporter; *import = \&Exporter::import } -BEGIN { - $tabstop = 8; - $debug = 0; -} +our @EXPORT = qw( expand unexpand $tabstop ); -my $CHUNK = qr/\X/; +our $VERSION = '2021.0814'; +our $SUBVERSION = 'modern'; # back-compat vestige -sub _xlen (_) { scalar(() = $_[0] =~ /$CHUNK/g) } -sub _xpos (_) { _xlen( substr( $_[0], 0, pos($_[0]) ) ) } +our $tabstop = 8; sub expand { my @l; my $pad; for ( @_ ) { + defined or do { push @l, ''; next }; my $s = ''; for (split(/^/m, $_, -1)) { - my $offs = 0; - s{\t}{ - # this works on both 5.10 and 5.11 - $pad = $tabstop - (_xlen(${^PREMATCH}) + $offs) % $tabstop; - # this works on 5.11, but fails on 5.10 - #XXX# $pad = $tabstop - (_xpos() + $offs) % $tabstop; - $offs += $pad - 1; - " " x $pad; - }peg; - $s .= $_; + my $offs; + for (split(/\t/, $_, -1)) { + if (defined $offs) { + $pad = $tabstop - $offs % $tabstop; + $s .= " " x $pad; + } + $s .= $_; + $offs = () = /\PM/g; + } } push(@l, $s); } @@ -56,21 +44,17 @@ sub unexpand my $lastbit; my $ts_as_space = " " x $tabstop; for $x (@l) { + defined $x or next; @lines = split("\n", $x, -1); for $line (@lines) { $line = expand($line); - @e = split(/(${CHUNK}{$tabstop})/,$line,-1); + @e = split(/((?:\PM\pM*){$tabstop})/,$line,-1); $lastbit = pop(@e); $lastbit = '' unless defined $lastbit; $lastbit = "\t" if $lastbit eq $ts_as_space; for $_ (@e) { - if ($debug) { - my $x = $_; - $x =~ s/\t/^I\t/gs; - print "sub on '$x'\n"; - } s/ +$/\t/; } $line = join('',@e, $lastbit); @@ -82,22 +66,8 @@ sub unexpand } 1; -__END__ - -sub expand -{ - my (@l) = @_; - for $_ (@l) { - 1 while s/(^|\n)([^\t\n]*)(\t+)/ - $1. $2 . (" " x - ($tabstop * length($3) - - (length($2) % $tabstop))) - /sex; - } - return @l if wantarray; - return $l[0]; -} +__END__ =head1 NAME @@ -164,17 +134,6 @@ Instead of the shell's C command, use: perl -MText::Tabs -n -e 'print unexpand $_' -=head1 SUBVERSION - -This module comes in two flavors: one for modern perls (5.10 and above) -and one for ancient obsolete perls. The version for modern perls has -support for Unicode. The version for old perls does not. You can tell -which version you have installed by looking at C<$Text::Tabs::SUBVERSION>: -it is C for obsolete perls and C for current perls. - -This man page is for the version for modern perls and so that's probably -what you've got. - =head1 BUGS Text::Tabs handles only tabs (C<"\t">) and combining characters (C). It doesn't diff --git a/gnu/usr.bin/perl/cpan/Text-Tabs/lib/Text/Wrap.pm b/gnu/usr.bin/perl/cpan/Text-Tabs/lib/Text/Wrap.pm index db0d15f6106..eff0e717c49 100644 --- a/gnu/usr.bin/perl/cpan/Text-Tabs/lib/Text/Wrap.pm +++ b/gnu/usr.bin/perl/cpan/Text-Tabs/lib/Text/Wrap.pm @@ -1,42 +1,32 @@ +use strict; use warnings; + package Text::Wrap; use warnings::register; -require Exporter; - -@ISA = qw(Exporter); -@EXPORT = qw(wrap fill); -@EXPORT_OK = qw($columns $break $huge); -$VERSION = 2013.0523; -$SUBVERSION = 'modern'; +BEGIN { require Exporter; *import = \&Exporter::import } -use 5.010_000; +our @EXPORT = qw( wrap fill ); +our @EXPORT_OK = qw( $columns $break $huge ); -use vars qw($VERSION $SUBVERSION $columns $debug $break $huge $unexpand $tabstop $separator $separator2); -use strict; - -BEGIN { - $columns = 76; # <= screen width - $debug = 0; - $break = '(?=\s)\X'; - $huge = 'wrap'; # alternatively: 'die' or 'overflow' - $unexpand = 1; - $tabstop = 8; - $separator = "\n"; - $separator2 = undef; -} +our $VERSION = '2021.0814'; +our $SUBVERSION = 'modern'; # back-compat vestige -my $CHUNK = qr/\X/; +our $columns = 76; # <= screen width +our $break = '(?=\s)(?:\r\n|\PM\pM*)'; +our $huge = 'wrap'; # alternatively: 'die' or 'overflow' +our $unexpand = 1; +our $tabstop = 8; +our $separator = "\n"; +our $separator2 = undef; -sub _xlen(_) { scalar(() = $_[0] =~ /$CHUNK/g) } - -sub _xpos(_) { _xlen( substr( $_[0], 0, pos($_[0]) ) ) } +sub _xlen { () = $_[0] =~ /\PM/g } use Text::Tabs qw(expand unexpand); sub wrap { - my ($ip, $xp, @t) = @_; + my ($ip, $xp, @t) = map +( defined $_ ? $_ : '' ), @_; local($Text::Tabs::tabstop) = $tabstop; my $r = ""; @@ -59,17 +49,17 @@ sub wrap pos($t) = 0; while ($t !~ /\G(?:$break)*\Z/gc) { - if ($t =~ /\G((?:(?=[^\n])\X){0,$ll})($break|\n+|\z)/xmgc) { + if ($t =~ /\G((?:(?!\n)\PM\pM*){0,$ll})($break|\n+|\z)/xmgc) { $r .= $unexpand ? unexpand($nl . $lead . $1) : $nl . $lead . $1; $remainder = $2; - } elsif ($huge eq 'wrap' && $t =~ /\G((?:(?=[^\n])\X){$ll})/gc) { + } elsif ($huge eq 'wrap' && $t =~ /\G((?:(?!\n)\PM\pM*){$ll})/gc) { $r .= $unexpand ? unexpand($nl . $lead . $1) : $nl . $lead . $1; $remainder = defined($separator2) ? $separator2 : $separator; - } elsif ($huge eq 'overflow' && $t =~ /\G((?:(?=[^\n])\X)*?)($break|\n+|\z)/xmgc) { + } elsif ($huge eq 'overflow' && $t =~ /\G((?:(?!\n)\PM\pM*)*?)($break|\n+|\z)/xmgc) { $r .= $unexpand ? unexpand($nl . $lead . $1) : $nl . $lead . $1; @@ -79,7 +69,7 @@ sub wrap } elsif ($columns < 2) { warnings::warnif "Increasing \$Text::Wrap::columns from $columns to 2"; $columns = 2; - return ($ip, $xp, @t); + return @_; } else { die "This shouldn't happen"; } @@ -94,23 +84,15 @@ sub wrap } $r .= $remainder; - print "-----------$r---------\n" if $debug; - - print "Finish up with '$lead'\n" if $debug; - - my($opos) = pos($t); - $r .= $lead . substr($t, pos($t), length($t) - pos($t)) if pos($t) ne length($t); - print "-----------$r---------\n" if $debug;; - return $r; } sub fill { - my ($ip, $xp, @raw) = @_; + my ($ip, $xp, @raw) = map +( defined $_ ? $_ : '' ), @_; my @para; my $pp; @@ -128,6 +110,7 @@ sub fill } 1; + __END__ =head1 NAME @@ -269,17 +252,6 @@ Result: "This is a bit of|text that forms a|normal book-style|paragraph" -=head1 SUBVERSION - -This module comes in two flavors: one for modern perls (5.10 and above) -and one for ancient obsolete perls. The version for modern perls has -support for Unicode. The version for old perls does not. You can tell -which version you have installed by looking at C<$Text::Wrap::SUBVERSION>: -it is C for obsolete perls and C for current perls. - -This man page is for the version for modern perls and so that's probably -what you've got. - =head1 SEE ALSO For correct handling of East Asian half- and full-width characters, diff --git a/gnu/usr.bin/perl/cpan/Text-Tabs/t/Tabs-ElCid.t b/gnu/usr.bin/perl/cpan/Text-Tabs/t/Tabs-ElCid.t index 79e265d4db4..0f554afa3fa 100644 --- a/gnu/usr.bin/perl/cpan/Text-Tabs/t/Tabs-ElCid.t +++ b/gnu/usr.bin/perl/cpan/Text-Tabs/t/Tabs-ElCid.t @@ -1,14 +1,7 @@ -#!perl +use strict; use warnings FATAL => 'all'; -BEGIN { - if ($] <= 5.010) { - print "1..0 # skip this test requires perl 5.010 or greater ($])\n"; - exit 0; - } -} +BEGIN { eval sprintf 'sub NEED_REPEATED_DECODE () { %d }', $] lt '5.008' } -use strict; -use warnings "FATAL" => "all"; use Text::Tabs; require bytes; @@ -57,7 +50,7 @@ our @DATA = ( }, ); -$| = 1; + my $numtests = @DATA; print "1..$numtests\n"; @@ -105,9 +98,9 @@ sub check($$$$) { sub check_data { - binmode(DATA, ":utf8") || die "can't binmode DATA to utf8: $!"; local($_); while ( ) { + $_ = pack "U0a*", $_; my $bad = 0; @@ -121,8 +114,8 @@ sub check_data { $byte_count = bytes::length($_); $char_count = length(); - $chunk_count = () = /\X/g; - $word_count = () = /(?:(?=\pL)\X)+/g; + $chunk_count = () = /\PM/g; + $word_count = () = /(?:\pL\pM*)+/g; $tab_count = y/\t//; $bad++ unless check($byte_count, $., "OLD", "BYTES"); @@ -132,13 +125,14 @@ sub check_data { $bad++ unless check($tab_count, $., "OLD", "TABS"); $_ = expand($_); + $_ = pack "U0a*", $_ if NEED_REPEATED_DECODE; $DATA[$.]{NEW}{DATA} = $_; $byte_count = bytes::length($_); $char_count = length(); - $chunk_count = () = /\X/g; - $word_count = () = /(?:(?=\pL)\X)+/g; + $chunk_count = () = /\PM/g; + $word_count = () = /(?:\pL\pM*)+/g; $tab_count = y/\t//; $bad++ unless check($byte_count, $., "NEW", "BYTES"); @@ -148,6 +142,7 @@ sub check_data { $bad++ unless check($tab_count, $., "NEW", "TABS"); $_ = unexpand($_); + $_ = pack "U0a*", $_ if NEED_REPEATED_DECODE; if ($_ ne $DATA[$.]{OLD}{DATA}) { warn "expand/unexpand round-trip equivalency failed at line $."; diff --git a/gnu/usr.bin/perl/cpan/Text-Tabs/t/Wrap-JLB.t b/gnu/usr.bin/perl/cpan/Text-Tabs/t/Wrap-JLB.t index f3d655ade54..d7ce187e30e 100644 --- a/gnu/usr.bin/perl/cpan/Text-Tabs/t/Wrap-JLB.t +++ b/gnu/usr.bin/perl/cpan/Text-Tabs/t/Wrap-JLB.t @@ -1,14 +1,7 @@ -#!perl +use strict; use warnings FATAL => 'all'; -BEGIN { - if ($] <= 5.010) { - print "1..0 # skip this test requires perl 5.010 or greater\n"; - exit 0; - } -} +BEGIN { eval sprintf 'sub NEED_REPEATED_DECODE () { %d }', $] lt '5.008' } -use strict; -use warnings "FATAL" => "all"; use Text::Wrap; $Text::Wrap::columns = 72; @@ -18,7 +11,6 @@ require bytes; our $Errors = 0; $/ = q(); -binmode(DATA, ":utf8") || die "can't binmode DATA to utf8: $!"; our @DATA = ( [ # paragraph 0 @@ -42,7 +34,7 @@ our @DATA = ( }, ); -$| = 1; + my $numtests = @DATA; print "1..$numtests\n"; @@ -86,9 +78,9 @@ sub check($$$$) { sub check_data { - binmode(DATA, ":utf8") || die "can't binmode DATA to utf8: $!"; local($_); while ( ) { + $_ = pack "U0a*", $_; my $bad = 0; @@ -102,8 +94,8 @@ sub check_data { $byte_count = bytes::length($_); $char_count = length(); - $chunk_count = () = /\X/g; - $word_count = () = /(?:(?=\pL)\X)+/g; + $chunk_count = () = /\PM/g; + $word_count = () = /(?:\pL\pM*)+/g; $tab_count = y/\t//; $line_count = y/\n//; @@ -117,11 +109,12 @@ sub check_data { my $nl = "\n" x chomp; $_ = wrap("", "", $_) . $nl; + $_ = pack "U0a*", $_ if NEED_REPEATED_DECODE; $byte_count = bytes::length($_); $char_count = length(); - $chunk_count = () = /\X/g; - $word_count = () = /(?:(?=\pL)\X)+/g; + $chunk_count = () = /\PM/g; + $word_count = () = /(?:\pL\pM*)+/g; $tab_count = y/\t//; $line_count = y/\n//; diff --git a/gnu/usr.bin/perl/cpan/Unicode-Collate/Collate.pm b/gnu/usr.bin/perl/cpan/Unicode-Collate/Collate.pm index 4239ac09082..7b8e5470733 100644 --- a/gnu/usr.bin/perl/cpan/Unicode-Collate/Collate.pm +++ b/gnu/usr.bin/perl/cpan/Unicode-Collate/Collate.pm @@ -1,14 +1,5 @@ package Unicode::Collate; -BEGIN { - unless ("A" eq pack('U', 0x41)) { - die "Unicode::Collate cannot stringify a Unicode code point\n"; - } - unless (0x41 == unpack('U', 'A')) { - die "Unicode::Collate cannot get a Unicode code point\n"; - } -} - use 5.006; use strict; use warnings; @@ -17,7 +8,7 @@ use File::Spec; no warnings 'utf8'; -our $VERSION = '1.27'; +our $VERSION = '1.31'; our $PACKAGE = __PACKAGE__; ### begin XS only ### @@ -88,19 +79,30 @@ my $DefaultRearrange = [ 0x0E40..0x0E44, 0x0EC0..0x0EC4 ]; my $HighestVCE = pack(VCE_TEMPLATE, 0, 0xFFFE, 0x20, 0x5, 0xFFFF); my $minimalVCE = pack(VCE_TEMPLATE, 0, 1, 0x20, 0x5, 0xFFFE); -sub UCA_Version { '36' } +sub UCA_Version { '43' } -sub Base_Unicode_Version { '10.0.0' } +sub Base_Unicode_Version { '13.0.0' } ###### +my $native_to_unicode = ($::IS_ASCII || $] < 5.008) + ? sub { return shift } + : sub { utf8::native_to_unicode(shift) }; + +my $unicode_to_native = ($::IS_ASCII || $] < 5.008) + ? sub { return shift } + : sub { utf8::unicode_to_native(shift) }; + +# pack_U() should get Unicode code points. sub pack_U { - return pack('U*', @_); + return pack('U*', map $unicode_to_native->($_), @_); } +# unpack_U() should return Unicode code points. sub unpack_U { - return unpack('U*', shift(@_).pack('U*')); + return map $native_to_unicode->($_), unpack('U*', shift(@_).pack('U*')); } +# for older perl version, pack('U*') generates empty string with utf8 flag. ###### @@ -191,6 +193,10 @@ my %DerivCode = ( 32 => \&_derivCE_32, 34 => \&_derivCE_34, 36 => \&_derivCE_36, + 38 => \&_derivCE_38, + 40 => \&_derivCE_40, + 41 => \&_derivCE_40, # 41 == 40 + 43 => \&_derivCE_43, ); sub checkCollator { @@ -1104,25 +1110,29 @@ If the revision (previously "tracking version") number of UCA is given, behavior of that revision is emulated on collating. If omitted, the return value of C is used. -The following revisions are supported. The default is 36. +The following revisions are supported. The default is 43. UCA Unicode Standard DUCET (@version) ------------------------------------------------------- 8 3.1 3.0.1 (3.0.1d9) - 9 3.1 with Corrigendum 3 3.1.1 (3.1.1) - 11 4.0 4.0.0 (4.0.0) - 14 4.1.0 4.1.0 (4.1.0) - 16 5.0 5.0.0 (5.0.0) - 18 5.1.0 5.1.0 (5.1.0) - 20 5.2.0 5.2.0 (5.2.0) - 22 6.0.0 6.0.0 (6.0.0) - 24 6.1.0 6.1.0 (6.1.0) - 26 6.2.0 6.2.0 (6.2.0) - 28 6.3.0 6.3.0 (6.3.0) - 30 7.0.0 7.0.0 (7.0.0) - 32 8.0.0 8.0.0 (8.0.0) - 34 9.0.0 9.0.0 (9.0.0) - 36 10.0.0 10.0.0(10.0.0) + 9 3.1 with Corrigendum 3 3.1.1 + 11 4.0.0 + 14 4.1.0 + 16 5.0.0 + 18 5.1.0 + 20 5.2.0 + 22 6.0.0 + 24 6.1.0 + 26 6.2.0 + 28 6.3.0 + 30 7.0.0 + 32 8.0.0 + 34 9.0.0 + 36 10.0.0 + 38 11.0.0 + 40 12.0.0 + 41 12.1.0 + 43 13.0.0 * See below for C with C 22 and 24. @@ -1464,13 +1474,19 @@ those in the CJK Unified Ideographs Extension A etc. U+4E00..U+9FCC if UCA_Version is 24 to 30. U+4E00..U+9FD5 if UCA_Version is 32 or 34. U+4E00..U+9FEA if UCA_Version is 36. + U+4E00..U+9FEF if UCA_Version is 38, 40 or 41. + U+4E00..U+9FFC if UCA_Version is 43. In the CJK Unified Ideographs Extension blocks: - Ext.A (U+3400..U+4DB5) and Ext.B (U+20000..U+2A6D6) in any UCA_Version. + Ext.A (U+3400..U+4DB5) if UCA_Version is 8 to 41. + Ext.A (U+3400..U+4DBF) if UCA_Version is 43. + Ext.B (U+20000..U+2A6D6) if UCA_Version is 8 to 41. + Ext.B (U+20000..U+2A6DD) if UCA_Version is 43. Ext.C (U+2A700..U+2B734) if UCA_Version is 20 or later. Ext.D (U+2B740..U+2B81D) if UCA_Version is 22 or later. Ext.E (U+2B820..U+2CEA1) if UCA_Version is 32 or later. - Ext.F (U+2CEB0..U+2EBE0) if UCA_Version is 36. + Ext.F (U+2CEB0..U+2EBE0) if UCA_Version is 36 or later. + Ext.G (U+30000..U+3134A) if UCA_Version is 43. Through C, ordering of CJK unified ideographs (including extensions) can be overridden. @@ -2087,20 +2103,22 @@ C "non-ignorable", level =E 3)> should be used. B +B + =back =head1 AUTHOR, COPYRIGHT AND LICENSE The Unicode::Collate module for perl was written by SADAHIRO Tomoyuki, -. This module is Copyright(C) 2001-2018, +. This module is Copyright(C) 2001-2021, SADAHIRO Tomoyuki. Japan. All rights reserved. This module is free software; you can redistribute it and/or modify it under the same terms as Perl itself. The file Unicode/Collate/allkeys.txt was copied verbatim -from L. -For this file, Copyright (c) 2016 Unicode, Inc.; distributed +from L. +For this file, Copyright (c) 2020 Unicode, Inc.; distributed under the Terms of Use in L =head1 SEE ALSO diff --git a/gnu/usr.bin/perl/cpan/Unicode-Collate/Collate.xs b/gnu/usr.bin/perl/cpan/Unicode-Collate/Collate.xs index ac57b47971f..db075cc2068 100644 --- a/gnu/usr.bin/perl/cpan/Unicode-Collate/Collate.xs +++ b/gnu/usr.bin/perl/cpan/Unicode-Collate/Collate.xs @@ -58,11 +58,15 @@ #define CJK_UidF61 (0x9FCC) /* Unicode 6.1 */ #define CJK_UidF80 (0x9FD5) /* Unicode 8.0 */ #define CJK_UidF100 (0x9FEA) /* Unicode 10.0 */ +#define CJK_UidF110 (0x9FEF) /* Unicode 11.0 */ +#define CJK_UidF130 (0x9FFC) /* Unicode 13.0 */ #define CJK_ExtAIni (0x3400) /* Unicode 3.0 */ #define CJK_ExtAFin (0x4DB5) /* Unicode 3.0 */ +#define CJK_ExtA130 (0x4DBF) /* Unicode 13.0 */ #define CJK_ExtBIni (0x20000) /* Unicode 3.1 */ #define CJK_ExtBFin (0x2A6D6) /* Unicode 3.1 */ +#define CJK_ExtB130 (0x2A6DD) /* Unicode 13.0 */ #define CJK_ExtCIni (0x2A700) /* Unicode 5.2 */ #define CJK_ExtCFin (0x2B734) /* Unicode 5.2 */ #define CJK_ExtDIni (0x2B740) /* Unicode 6.0 */ @@ -71,6 +75,8 @@ #define CJK_ExtEFin (0x2CEA1) /* Unicode 8.0 */ #define CJK_ExtFIni (0x2CEB0) /* Unicode 10.0 */ #define CJK_ExtFFin (0x2EBE0) /* Unicode 10.0 */ +#define CJK_ExtGIni (0x30000) /* Unicode 13.0 */ +#define CJK_ExtGFin (0x3134A) /* Unicode 13.0 */ #define CJK_CompIni (0xFA0E) #define CJK_CompFin (0xFA29) @@ -80,10 +86,17 @@ static const STDCHAR UnifiedCompat[] = { #define TangIdeoIni (0x17000) /* Unicode 9.0 */ #define TangIdeoFin (0x187EC) /* Unicode 9.0 */ +#define TangIdeo110 (0x187F1) /* Unicode 11.0 */ +#define TangIdeo120 (0x187F7) /* Unicode 12.0 */ #define TangCompIni (0x18800) /* Unicode 9.0 */ #define TangCompFin (0x18AF2) /* Unicode 9.0 */ +#define TangComp130 (0x18AFF) /* Unicode 13.0 */ +#define TangSuppIni (0x18D00) /* Unicode 13.0 */ +#define TangSuppFin (0x18D08) /* Unicode 13.0 */ #define NushuIni (0x1B170) /* Unicode 10.0 */ #define NushuFin (0x1B2FB) /* Unicode 10.0 */ +#define KhitanIni (0x18B00) /* Unicode 13.0 */ +#define KhitanFin (0x18CD5) /* Unicode 13.0 */ #define codeRange(bcode, ecode) ((bcode) <= code && code <= (ecode)) @@ -283,39 +296,58 @@ _derivCE_9 (code) _derivCE_32 = 6 _derivCE_34 = 7 _derivCE_36 = 8 + _derivCE_38 = 9 + _derivCE_40 = 10 + _derivCE_43 = 11 PREINIT: UV base, aaaa, bbbb; U8 a[VCE_Length + 1] = "\x00\x00\x00\x00\x00\x00\x00\x00\x00"; U8 b[VCE_Length + 1] = "\x00\x00\x00\x00\x00\x00\x00\x00\x00"; - bool basic_unified = 0, tangut = 0, nushu = 0; + bool basic_unified = 0, tangut = 0, nushu = 0, khitan = 0; PPCODE: if (codeRange(CJK_UidIni, CJK_CompFin)) { if (codeRange(CJK_CompIni, CJK_CompFin)) basic_unified = (bool)UnifiedCompat[code - CJK_CompIni]; else - basic_unified = (ix >= 8 ? (code <= CJK_UidF100) : - ix >= 6 ? (code <= CJK_UidF80) : - ix == 5 ? (code <= CJK_UidF61) : - ix >= 3 ? (code <= CJK_UidF52) : - ix == 2 ? (code <= CJK_UidF51) : - ix == 1 ? (code <= CJK_UidF41) : - (code <= CJK_UidFin)); + basic_unified = (ix >= 11 ? (code <= CJK_UidF130) : + ix >= 9 ? (code <= CJK_UidF110) : + ix == 8 ? (code <= CJK_UidF100) : + ix >= 6 ? (code <= CJK_UidF80) : + ix == 5 ? (code <= CJK_UidF61) : + ix >= 3 ? (code <= CJK_UidF52) : + ix == 2 ? (code <= CJK_UidF51) : + ix == 1 ? (code <= CJK_UidF41) : + (code <= CJK_UidFin)); } else { - if (ix >= 7) - tangut = (codeRange(TangIdeoIni, TangIdeoFin) || - codeRange(TangCompIni, TangCompFin)); + if (ix >= 7) { + tangut = (ix >= 11) ? (codeRange(TangIdeoIni, TangIdeo120) || + codeRange(TangCompIni, TangComp130) || + codeRange(TangSuppIni, TangSuppFin)) : + (ix == 10) ? (codeRange(TangIdeoIni, TangIdeo120) || + codeRange(TangCompIni, TangCompFin)) : + (ix == 9) ? (codeRange(TangIdeoIni, TangIdeo110) || + codeRange(TangCompIni, TangCompFin)) : + (codeRange(TangIdeoIni, TangIdeoFin) || + codeRange(TangCompIni, TangCompFin)); + } if (ix >= 8) nushu = (codeRange(NushuIni, NushuFin)); + if (ix >= 11) + khitan = (codeRange(KhitanIni, KhitanFin)); } base = tangut ? 0xFB00 : nushu ? 0xFB01 : + khitan + ? 0xFB02 : basic_unified ? 0xFB40 : /* CJK */ - ((codeRange(CJK_ExtAIni, CJK_ExtAFin)) + ((ix >= 11 ? codeRange(CJK_ExtAIni, CJK_ExtA130) + : codeRange(CJK_ExtAIni, CJK_ExtAFin)) || - (codeRange(CJK_ExtBIni, CJK_ExtBFin)) + (ix >= 11 ? codeRange(CJK_ExtBIni, CJK_ExtB130) + : codeRange(CJK_ExtBIni, CJK_ExtBFin)) || (ix >= 3 && codeRange(CJK_ExtCIni, CJK_ExtCFin)) || @@ -323,12 +355,15 @@ _derivCE_9 (code) || (ix >= 6 && codeRange(CJK_ExtEIni, CJK_ExtEFin)) || - (ix >= 8 && codeRange(CJK_ExtFIni, CJK_ExtFFin))) + (ix >= 8 && codeRange(CJK_ExtFIni, CJK_ExtFFin)) + || + (ix >= 11 && codeRange(CJK_ExtGIni, CJK_ExtGFin))) ? 0xFB80 /* CJK ext. */ : 0xFBC0; /* others */ - aaaa = tangut || nushu ? base : base + (code >> 15); + aaaa = tangut || nushu || khitan ? base : base + (code >> 15); bbbb = (tangut ? (code - TangIdeoIni) : - nushu ? (code - NushuIni) : (code & 0x7FFF)) | 0x8000; + nushu ? (code - NushuIni) : + khitan ? (code - KhitanIni) : (code & 0x7FFF)) | 0x8000; a[1] = (U8)(aaaa >> 8); a[2] = (U8)(aaaa & 0xFF); b[1] = (U8)(bbbb >> 8); @@ -389,7 +424,9 @@ _isUIdeo (code, uca_vers) if (codeRange(CJK_CompIni, CJK_CompFin)) basic_unified = (bool)UnifiedCompat[code - CJK_CompIni]; else - basic_unified = (uca_vers >= 36 ? (code <= CJK_UidF100) : + basic_unified = (uca_vers >= 43 ? (code <= CJK_UidF130) : + uca_vers >= 38 ? (code <= CJK_UidF110) : + uca_vers >= 36 ? (code <= CJK_UidF100) : uca_vers >= 32 ? (code <= CJK_UidF80) : uca_vers >= 24 ? (code <= CJK_UidF61) : uca_vers >= 20 ? (code <= CJK_UidF52) : @@ -402,8 +439,12 @@ _isUIdeo (code, uca_vers) || (codeRange(CJK_ExtAIni, CJK_ExtAFin)) || + (uca_vers >= 43 && codeRange(CJK_ExtAIni, CJK_ExtA130)) + || (uca_vers >= 8 && codeRange(CJK_ExtBIni, CJK_ExtBFin)) || + (uca_vers >= 43 && codeRange(CJK_ExtBIni, CJK_ExtB130)) + || (uca_vers >= 20 && codeRange(CJK_ExtCIni, CJK_ExtCFin)) || (uca_vers >= 22 && codeRange(CJK_ExtDIni, CJK_ExtDFin)) @@ -411,6 +452,8 @@ _isUIdeo (code, uca_vers) (uca_vers >= 32 && codeRange(CJK_ExtEIni, CJK_ExtEFin)) || (uca_vers >= 36 && codeRange(CJK_ExtFIni, CJK_ExtFFin)) + || + (uca_vers >= 43 && codeRange(CJK_ExtGIni, CJK_ExtGFin)) ); OUTPUT: RETVAL diff --git a/gnu/usr.bin/perl/cpan/Unicode-Collate/Collate/CJK/Big5.pm b/gnu/usr.bin/perl/cpan/Unicode-Collate/Collate/CJK/Big5.pm index 95516a3d766..ebc2be2ee58 100644 --- a/gnu/usr.bin/perl/cpan/Unicode-Collate/Collate/CJK/Big5.pm +++ b/gnu/usr.bin/perl/cpan/Unicode-Collate/Collate/CJK/Big5.pm @@ -4,7 +4,7 @@ use 5.006; use strict; use warnings; -our $VERSION = '1.27'; +our $VERSION = '1.31'; my %u2p; my $wt = 0x8000; diff --git a/gnu/usr.bin/perl/cpan/Unicode-Collate/Collate/CJK/GB2312.pm b/gnu/usr.bin/perl/cpan/Unicode-Collate/Collate/CJK/GB2312.pm index 67927c78ad3..5e1f9f9b75b 100644 --- a/gnu/usr.bin/perl/cpan/Unicode-Collate/Collate/CJK/GB2312.pm +++ b/gnu/usr.bin/perl/cpan/Unicode-Collate/Collate/CJK/GB2312.pm @@ -4,7 +4,7 @@ use 5.006; use strict; use warnings; -our $VERSION = '1.27'; +our $VERSION = '1.31'; my %u2p; my $wt = 0x8000; diff --git a/gnu/usr.bin/perl/cpan/Unicode-Collate/Collate/CJK/JISX0208.pm b/gnu/usr.bin/perl/cpan/Unicode-Collate/Collate/CJK/JISX0208.pm index b21c9dd5dad..4e8ffabcc1e 100644 --- a/gnu/usr.bin/perl/cpan/Unicode-Collate/Collate/CJK/JISX0208.pm +++ b/gnu/usr.bin/perl/cpan/Unicode-Collate/Collate/CJK/JISX0208.pm @@ -4,7 +4,7 @@ use 5.006; use strict; use warnings; -our $VERSION = '1.27'; +our $VERSION = '1.31'; my %u2p; my $wt = 0x8000; diff --git a/gnu/usr.bin/perl/cpan/Unicode-Collate/Collate/CJK/Korean.pm b/gnu/usr.bin/perl/cpan/Unicode-Collate/Collate/CJK/Korean.pm index 73e4053ae8c..f83f8247f7d 100644 --- a/gnu/usr.bin/perl/cpan/Unicode-Collate/Collate/CJK/Korean.pm +++ b/gnu/usr.bin/perl/cpan/Unicode-Collate/Collate/CJK/Korean.pm @@ -4,21 +4,21 @@ use 5.006; use strict; use warnings; -our $VERSION = '1.27'; +our $VERSION = '1.31'; my %jamo2prim = ( - '1100', 0x3D0C, '1101', 0x3D0D, '1102', 0x3D0E, '1103', 0x3D0F, - '1105', 0x3D11, '1106', 0x3D12, '1107', 0x3D13, '1109', 0x3D15, - '110A', 0x3D16, '110B', 0x3D17, '110C', 0x3D18, '110E', 0x3D1A, - '110F', 0x3D1B, '1110', 0x3D1C, '1111', 0x3D1D, '1112', 0x3D1E, - '1161', 0x3D8A, '1162', 0x3D8B, '1163', 0x3D8C, '1165', 0x3D8E, - '1166', 0x3D8F, '1167', 0x3D90, '1168', 0x3D91, '1169', 0x3D92, - '116A', 0x3D93, '116B', 0x3D94, '116C', 0x3D95, '116D', 0x3D96, - '116E', 0x3D97, '116F', 0x3D98, '1170', 0x3D99, '1171', 0x3D9A, - '1172', 0x3D9B, '1173', 0x3D9C, '1174', 0x3D9D, '1175', 0x3D9E, - '11A8', 0x3DE8, '11AB', 0x3DEB, '11AF', 0x3DEF, '11B7', 0x3DF7, - '11B8', 0x3DF8, '11BC', 0x3DFC, '11BD', 0x3DFD, -); # for DUCET v10.0.0 + '1100', 0x4175, '1101', 0x4176, '1102', 0x4177, '1103', 0x4178, + '1105', 0x417A, '1106', 0x417B, '1107', 0x417C, '1109', 0x417E, + '110A', 0x417F, '110B', 0x4180, '110C', 0x4181, '110E', 0x4183, + '110F', 0x4184, '1110', 0x4185, '1111', 0x4186, '1112', 0x4187, + '1161', 0x41F3, '1162', 0x41F4, '1163', 0x41F5, '1165', 0x41F7, + '1166', 0x41F8, '1167', 0x41F9, '1168', 0x41FA, '1169', 0x41FB, + '116A', 0x41FC, '116B', 0x41FD, '116C', 0x41FE, '116D', 0x41FF, + '116E', 0x4200, '116F', 0x4201, '1170', 0x4202, '1171', 0x4203, + '1172', 0x4204, '1173', 0x4205, '1174', 0x4206, '1175', 0x4207, + '11A8', 0x4251, '11AB', 0x4254, '11AF', 0x4258, '11B7', 0x4260, + '11B8', 0x4261, '11BC', 0x4265, '11BD', 0x4266, +); # for DUCET v13.0.0 my(%u2e, $prim, $wt); while () { diff --git a/gnu/usr.bin/perl/cpan/Unicode-Collate/Collate/CJK/Pinyin.pm b/gnu/usr.bin/perl/cpan/Unicode-Collate/Collate/CJK/Pinyin.pm index a21554f4005..e650d7684c0 100644 --- a/gnu/usr.bin/perl/cpan/Unicode-Collate/Collate/CJK/Pinyin.pm +++ b/gnu/usr.bin/perl/cpan/Unicode-Collate/Collate/CJK/Pinyin.pm @@ -4,7 +4,7 @@ use 5.006; use strict; use warnings; -our $VERSION = '1.27'; +our $VERSION = '1.31'; my %u2p; my $wt = 0x8000; diff --git a/gnu/usr.bin/perl/cpan/Unicode-Collate/Collate/CJK/Stroke.pm b/gnu/usr.bin/perl/cpan/Unicode-Collate/Collate/CJK/Stroke.pm index 2e7f5354283..ff5c4d9ed1a 100644 --- a/gnu/usr.bin/perl/cpan/Unicode-Collate/Collate/CJK/Stroke.pm +++ b/gnu/usr.bin/perl/cpan/Unicode-Collate/Collate/CJK/Stroke.pm @@ -4,7 +4,7 @@ use 5.006; use strict; use warnings; -our $VERSION = '1.27'; +our $VERSION = '1.31'; my %u2p; my $wt = 0x8000; diff --git a/gnu/usr.bin/perl/cpan/Unicode-Collate/Collate/CJK/Zhuyin.pm b/gnu/usr.bin/perl/cpan/Unicode-Collate/Collate/CJK/Zhuyin.pm index 61f027d4974..acfe6863070 100644 --- a/gnu/usr.bin/perl/cpan/Unicode-Collate/Collate/CJK/Zhuyin.pm +++ b/gnu/usr.bin/perl/cpan/Unicode-Collate/Collate/CJK/Zhuyin.pm @@ -4,7 +4,7 @@ use 5.006; use strict; use warnings; -our $VERSION = '1.27'; +our $VERSION = '1.31'; my %u2p; my $wt = 0x8000; diff --git a/gnu/usr.bin/perl/cpan/Unicode-Collate/Collate/Locale.pm b/gnu/usr.bin/perl/cpan/Unicode-Collate/Collate/Locale.pm index 461e2a63b5e..185d0a8d223 100644 --- a/gnu/usr.bin/perl/cpan/Unicode-Collate/Collate/Locale.pm +++ b/gnu/usr.bin/perl/cpan/Unicode-Collate/Collate/Locale.pm @@ -5,7 +5,7 @@ use warnings; use Carp; use base qw(Unicode::Collate); -our $VERSION = '1.27'; +our $VERSION = '1.31'; my $PL_EXT = '.pl'; @@ -519,7 +519,7 @@ The order of any groups including scripts is not changed. The Unicode::Collate::Locale module for perl was written by SADAHIRO Tomoyuki, . -This module is Copyright(C) 2004-2018, SADAHIRO Tomoyuki. Japan. +This module is Copyright(C) 2004-2020, SADAHIRO Tomoyuki. Japan. All rights reserved. This module is free software; you can redistribute it and/or diff --git a/gnu/usr.bin/perl/cpan/Unicode-Collate/Collate/Locale/af.pl b/gnu/usr.bin/perl/cpan/Unicode-Collate/Collate/Locale/af.pl index 8c61e10764a..b0cc371e793 100644 --- a/gnu/usr.bin/perl/cpan/Unicode-Collate/Collate/Locale/af.pl +++ b/gnu/usr.bin/perl/cpan/Unicode-Collate/Collate/Locale/af.pl @@ -1,6 +1,6 @@ +{ - locale_version => 1.27, - entry => <<'ENTRY', # for DUCET v10.0.0 -0149 ; [.1E1F.0020.0009] # LATIN SMALL LETTER N PRECEDED BY APOSTROPHE + locale_version => 1.31, + entry => <<'ENTRY', # for DUCET v13.0.0 +0149 ; [.2118.0020.0009] # LATIN SMALL LETTER N PRECEDED BY APOSTROPHE ENTRY }; diff --git a/gnu/usr.bin/perl/cpan/Unicode-Collate/Collate/Locale/ar.pl b/gnu/usr.bin/perl/cpan/Unicode-Collate/Collate/Locale/ar.pl index 69a1aa0e3de..787a4f44ba1 100644 --- a/gnu/usr.bin/perl/cpan/Unicode-Collate/Collate/Locale/ar.pl +++ b/gnu/usr.bin/perl/cpan/Unicode-Collate/Collate/Locale/ar.pl @@ -1,15 +1,15 @@ +{ - locale_version => 1.27, - entry => <<'ENTRY', # for DUCET v10.0.0 -0629 ; [.2383.0021.0002] # ARABIC LETTER TEH MARBUTA -FE94 ; [.2383.0021.0019] # ARABIC LETTER TEH MARBUTA FINAL FORM -FE93 ; [.2383.0021.001A] # ARABIC LETTER TEH MARBUTA ISOLATED FORM -0649 ; [.242C.0021.0002] # ARABIC LETTER ALEF MAKSURA -FBE8 ; [.242C.0021.0017] # ARABIC LETTER UIGHUR KAZAKH KIRGHIZ ALEF MAKSURA INITIAL FORM -FBE9 ; [.242C.0021.0018] # ARABIC LETTER UIGHUR KAZAKH KIRGHIZ ALEF MAKSURA MEDIAL FORM -FEF0 ; [.242C.0021.0019] # ARABIC LETTER ALEF MAKSURA FINAL FORM -FEEF ; [.242C.0021.001A] # ARABIC LETTER ALEF MAKSURA ISOLATED FORM -FC90 ; [.242C.0021.001B] # ARABIC LIGATURE ALEF MAKSURA WITH SUPERSCRIPT ALEF FINAL FORM -FC5D ; [.242C.0021.001C] # ARABIC LIGATURE ALEF MAKSURA WITH SUPERSCRIPT ALEF ISOLATED FORM + locale_version => 1.31, + entry => <<'ENTRY', # for DUCET v13.0.0 +0629 ; [.2685.0021.0002] # ARABIC LETTER TEH MARBUTA +FE94 ; [.2685.0021.0019] # ARABIC LETTER TEH MARBUTA FINAL FORM +FE93 ; [.2685.0021.001A] # ARABIC LETTER TEH MARBUTA ISOLATED FORM +0649 ; [.2737.0021.0002] # ARABIC LETTER ALEF MAKSURA +FBE8 ; [.2737.0021.0017] # ARABIC LETTER UIGHUR KAZAKH KIRGHIZ ALEF MAKSURA INITIAL FORM +FBE9 ; [.2737.0021.0018] # ARABIC LETTER UIGHUR KAZAKH KIRGHIZ ALEF MAKSURA MEDIAL FORM +FEF0 ; [.2737.0021.0019] # ARABIC LETTER ALEF MAKSURA FINAL FORM +FEEF ; [.2737.0021.001A] # ARABIC LETTER ALEF MAKSURA ISOLATED FORM +FC90 ; [.2737.0021.001B] # ARABIC LIGATURE ALEF MAKSURA WITH SUPERSCRIPT ALEF FINAL FORM +FC5D ; [.2737.0021.001C] # ARABIC LIGATURE ALEF MAKSURA WITH SUPERSCRIPT ALEF ISOLATED FORM ENTRY }; diff --git a/gnu/usr.bin/perl/cpan/Unicode-Collate/Collate/Locale/as.pl b/gnu/usr.bin/perl/cpan/Unicode-Collate/Collate/Locale/as.pl index 6a78bf5b096..0d86a679bae 100644 --- a/gnu/usr.bin/perl/cpan/Unicode-Collate/Collate/Locale/as.pl +++ b/gnu/usr.bin/perl/cpan/Unicode-Collate/Collate/Locale/as.pl @@ -1,14 +1,14 @@ +{ - locale_version => 1.27, - entry => <<'ENTRY', # for DUCET v10.0.0 -0982 ; [.273E.0020.0002][.FFF1.0000.0000] # BENGALI SIGN ANUSVARA -0981 ; [.273E.0020.0002][.FFF2.0000.0000] # BENGALI SIGN CANDRABINDU -0983 ; [.273E.0020.0002][.FFF3.0000.0000] # BENGALI SIGN VISARGA -0994 ; [.273E.0020.0002][.FFF0.0000.0000] # BENGALI LETTER AU -09CE ; [.274E.0020.0002][.FFF0.0000.0000] # BENGALI LETTER KHANDA TA -09A4 09CD 200D ; [.274E.0020.0002][.FFF0.0000.0000] # -09A4 ; [.274E.0020.0002][.FFF1.0000.0000] # BENGALI LETTER TA -0995 09CD 09B7 ; [.2760.0020.0002][.FFF1.0000.0000] # -09B9 ; [.2760.0020.0002][.FFF0.0000.0000] # BENGALI LETTER HA + locale_version => 1.31, + entry => <<'ENTRY', # for DUCET v13.0.0 +0982 ; [.2A4B.0020.0002][.FFF1.0000.0000] # BENGALI SIGN ANUSVARA +0981 ; [.2A4B.0020.0002][.FFF2.0000.0000] # BENGALI SIGN CANDRABINDU +0983 ; [.2A4B.0020.0002][.FFF3.0000.0000] # BENGALI SIGN VISARGA +0994 ; [.2A4B.0020.0002][.FFF0.0000.0000] # BENGALI LETTER AU +09CE ; [.2A5B.0020.0002][.FFF0.0000.0000] # BENGALI LETTER KHANDA TA +09A4 09CD 200D ; [.2A5B.0020.0002][.FFF0.0000.0000] # +09A4 ; [.2A5B.0020.0002][.FFF1.0000.0000] # BENGALI LETTER TA +0995 09CD 09B7 ; [.2A6D.0020.0002][.FFF1.0000.0000] # +09B9 ; [.2A6D.0020.0002][.FFF0.0000.0000] # BENGALI LETTER HA ENTRY }; diff --git a/gnu/usr.bin/perl/cpan/Unicode-Collate/Collate/Locale/az.pl b/gnu/usr.bin/perl/cpan/Unicode-Collate/Collate/Locale/az.pl index dab41a90bae..bda9ad35fda 100644 --- a/gnu/usr.bin/perl/cpan/Unicode-Collate/Collate/Locale/az.pl +++ b/gnu/usr.bin/perl/cpan/Unicode-Collate/Collate/Locale/az.pl @@ -1,53 +1,53 @@ +{ - locale_version => 1.27, + locale_version => 1.31, # schwa doesn't require tailoring - entry => <<'ENTRY', # for DUCET v10.0.0 -00E7 ; [.1CE1.0020.0002] # LATIN SMALL LETTER C WITH CEDILLA -0063 0327 ; [.1CE1.0020.0002] # LATIN SMALL LETTER C WITH CEDILLA -00C7 ; [.1CE1.0020.0008] # LATIN CAPITAL LETTER C WITH CEDILLA -0043 0327 ; [.1CE1.0020.0008] # LATIN CAPITAL LETTER C WITH CEDILLA -011F ; [.1D5B.0020.0002] # LATIN SMALL LETTER G WITH BREVE -0067 0306 ; [.1D5B.0020.0002] # LATIN SMALL LETTER G WITH BREVE -011E ; [.1D5B.0020.0008] # LATIN CAPITAL LETTER G WITH BREVE -0047 0306 ; [.1D5B.0020.0008] # LATIN CAPITAL LETTER G WITH BREVE -0131 ; [.1D97.0020.0002] # LATIN SMALL LETTER DOTLESS I -0049 ; [.1D97.0020.0008] # LATIN CAPITAL LETTER I -00CC ; [.1D97.0020.0008][.0000.0025.0002] # LATIN CAPITAL LETTER I WITH GRAVE -00CD ; [.1D97.0020.0008][.0000.0024.0002] # LATIN CAPITAL LETTER I WITH ACUTE -00CE ; [.1D97.0020.0008][.0000.0027.0002] # LATIN CAPITAL LETTER I WITH CIRCUMFLEX -00CF ; [.1D97.0020.0008][.0000.002B.0002] # LATIN CAPITAL LETTER I WITH DIAERESIS -012A ; [.1D97.0020.0008][.0000.0032.0002] # LATIN CAPITAL LETTER I WITH MACRON -012C ; [.1D97.0020.0008][.0000.0026.0002] # LATIN CAPITAL LETTER I WITH BREVE -012E ; [.1D97.0020.0008][.0000.0031.0002] # LATIN CAPITAL LETTER I WITH OGONEK -0130 ; [.1D98.0020.0008] # LATIN CAPITAL LETTER I WITH DOT ABOVE -0049 0307 ; [.1D98.0020.0008] # LATIN CAPITAL LETTER I WITH DOT ABOVE -00F6 ; [.1E44.0020.0002] # LATIN SMALL LETTER O WITH DIAERESIS -006F 0308 ; [.1E44.0020.0002] # LATIN SMALL LETTER O WITH DIAERESIS -00D6 ; [.1E44.0020.0008] # LATIN CAPITAL LETTER O WITH DIAERESIS -004F 0308 ; [.1E44.0020.0008] # LATIN CAPITAL LETTER O WITH DIAERESIS -022B ; [.1E44.0020.0002][.0000.0032.0002] # LATIN SMALL LETTER O WITH DIAERESIS AND MACRON -022A ; [.1E44.0020.0008][.0000.0032.0002] # LATIN CAPITAL LETTER O WITH DIAERESIS AND MACRON -015F ; [.1ED8.0020.0002] # LATIN SMALL LETTER S WITH CEDILLA -0073 0327 ; [.1ED8.0020.0002] # LATIN SMALL LETTER S WITH CEDILLA -015E ; [.1ED8.0020.0008] # LATIN CAPITAL LETTER S WITH CEDILLA -0053 0327 ; [.1ED8.0020.0008] # LATIN CAPITAL LETTER S WITH CEDILLA -00FC ; [.1F1C.0020.0002] # LATIN SMALL LETTER U WITH DIAERESIS -0075 0308 ; [.1F1C.0020.0002] # LATIN SMALL LETTER U WITH DIAERESIS -00DC ; [.1F1C.0020.0008] # LATIN CAPITAL LETTER U WITH DIAERESIS -0055 0308 ; [.1F1C.0020.0008] # LATIN CAPITAL LETTER U WITH DIAERESIS -01DC ; [.1F1C.0020.0002][.0000.0025.0002] # LATIN SMALL LETTER U WITH DIAERESIS AND GRAVE -01DB ; [.1F1C.0020.0008][.0000.0025.0002] # LATIN CAPITAL LETTER U WITH DIAERESIS AND GRAVE -01D8 ; [.1F1C.0020.0002][.0000.0024.0002] # LATIN SMALL LETTER U WITH DIAERESIS AND ACUTE -01D7 ; [.1F1C.0020.0008][.0000.0024.0002] # LATIN CAPITAL LETTER U WITH DIAERESIS AND ACUTE -01D6 ; [.1F1C.0020.0002][.0000.0032.0002] # LATIN SMALL LETTER U WITH DIAERESIS AND MACRON -01D5 ; [.1F1C.0020.0008][.0000.0032.0002] # LATIN CAPITAL LETTER U WITH DIAERESIS AND MACRON -01DA ; [.1F1C.0020.0002][.0000.0028.0002] # LATIN SMALL LETTER U WITH DIAERESIS AND CARON -01D9 ; [.1F1C.0020.0008][.0000.0028.0002] # LATIN CAPITAL LETTER U WITH DIAERESIS AND CARON -0071 ; [.1DCC.0020.0002] # LATIN SMALL LETTER Q -0051 ; [.1DCC.0020.0008] # LATIN CAPITAL LETTER Q -0078 ; [.1D7F.0020.0002] # LATIN SMALL LETTER X -0058 ; [.1D7F.0020.0008] # LATIN CAPITAL LETTER X -0077 ; [.1F88.0020.0002] # LATIN SMALL LETTER W -0057 ; [.1F88.0020.0008] # LATIN CAPITAL LETTER W + entry => <<'ENTRY', # for DUCET v13.0.0 +00E7 ; [.1FD7.0020.0002] # LATIN SMALL LETTER C WITH CEDILLA +0063 0327 ; [.1FD7.0020.0002] # LATIN SMALL LETTER C WITH CEDILLA +00C7 ; [.1FD7.0020.0008] # LATIN CAPITAL LETTER C WITH CEDILLA +0043 0327 ; [.1FD7.0020.0008] # LATIN CAPITAL LETTER C WITH CEDILLA +011F ; [.2052.0020.0002] # LATIN SMALL LETTER G WITH BREVE +0067 0306 ; [.2052.0020.0002] # LATIN SMALL LETTER G WITH BREVE +011E ; [.2052.0020.0008] # LATIN CAPITAL LETTER G WITH BREVE +0047 0306 ; [.2052.0020.0008] # LATIN CAPITAL LETTER G WITH BREVE +0131 ; [.208F.0020.0002] # LATIN SMALL LETTER DOTLESS I +0049 ; [.208F.0020.0008] # LATIN CAPITAL LETTER I +00CC ; [.208F.0020.0008][.0000.0025.0002] # LATIN CAPITAL LETTER I WITH GRAVE +00CD ; [.208F.0020.0008][.0000.0024.0002] # LATIN CAPITAL LETTER I WITH ACUTE +00CE ; [.208F.0020.0008][.0000.0027.0002] # LATIN CAPITAL LETTER I WITH CIRCUMFLEX +00CF ; [.208F.0020.0008][.0000.002B.0002] # LATIN CAPITAL LETTER I WITH DIAERESIS +012A ; [.208F.0020.0008][.0000.0032.0002] # LATIN CAPITAL LETTER I WITH MACRON +012C ; [.208F.0020.0008][.0000.0026.0002] # LATIN CAPITAL LETTER I WITH BREVE +012E ; [.208F.0020.0008][.0000.0031.0002] # LATIN CAPITAL LETTER I WITH OGONEK +0130 ; [.2090.0020.0008] # LATIN CAPITAL LETTER I WITH DOT ABOVE +0049 0307 ; [.2090.0020.0008] # LATIN CAPITAL LETTER I WITH DOT ABOVE +00F6 ; [.213D.0020.0002] # LATIN SMALL LETTER O WITH DIAERESIS +006F 0308 ; [.213D.0020.0002] # LATIN SMALL LETTER O WITH DIAERESIS +00D6 ; [.213D.0020.0008] # LATIN CAPITAL LETTER O WITH DIAERESIS +004F 0308 ; [.213D.0020.0008] # LATIN CAPITAL LETTER O WITH DIAERESIS +022B ; [.213D.0020.0002][.0000.0032.0002] # LATIN SMALL LETTER O WITH DIAERESIS AND MACRON +022A ; [.213D.0020.0008][.0000.0032.0002] # LATIN CAPITAL LETTER O WITH DIAERESIS AND MACRON +015F ; [.21D3.0020.0002] # LATIN SMALL LETTER S WITH CEDILLA +0073 0327 ; [.21D3.0020.0002] # LATIN SMALL LETTER S WITH CEDILLA +015E ; [.21D3.0020.0008] # LATIN CAPITAL LETTER S WITH CEDILLA +0053 0327 ; [.21D3.0020.0008] # LATIN CAPITAL LETTER S WITH CEDILLA +00FC ; [.2218.0020.0002] # LATIN SMALL LETTER U WITH DIAERESIS +0075 0308 ; [.2218.0020.0002] # LATIN SMALL LETTER U WITH DIAERESIS +00DC ; [.2218.0020.0008] # LATIN CAPITAL LETTER U WITH DIAERESIS +0055 0308 ; [.2218.0020.0008] # LATIN CAPITAL LETTER U WITH DIAERESIS +01DC ; [.2218.0020.0002][.0000.0025.0002] # LATIN SMALL LETTER U WITH DIAERESIS AND GRAVE +01DB ; [.2218.0020.0008][.0000.0025.0002] # LATIN CAPITAL LETTER U WITH DIAERESIS AND GRAVE +01D8 ; [.2218.0020.0002][.0000.0024.0002] # LATIN SMALL LETTER U WITH DIAERESIS AND ACUTE +01D7 ; [.2218.0020.0008][.0000.0024.0002] # LATIN CAPITAL LETTER U WITH DIAERESIS AND ACUTE +01D6 ; [.2218.0020.0002][.0000.0032.0002] # LATIN SMALL LETTER U WITH DIAERESIS AND MACRON +01D5 ; [.2218.0020.0008][.0000.0032.0002] # LATIN CAPITAL LETTER U WITH DIAERESIS AND MACRON +01DA ; [.2218.0020.0002][.0000.0028.0002] # LATIN SMALL LETTER U WITH DIAERESIS AND CARON +01D9 ; [.2218.0020.0008][.0000.0028.0002] # LATIN CAPITAL LETTER U WITH DIAERESIS AND CARON +0071 ; [.20C5.0020.0002] # LATIN SMALL LETTER Q +0051 ; [.20C5.0020.0008] # LATIN CAPITAL LETTER Q +0078 ; [.2076.0020.0002] # LATIN SMALL LETTER X +0058 ; [.2076.0020.0008] # LATIN CAPITAL LETTER X +0077 ; [.2287.0020.0002] # LATIN SMALL LETTER W +0057 ; [.2287.0020.0008] # LATIN CAPITAL LETTER W ENTRY }; diff --git a/gnu/usr.bin/perl/cpan/Unicode-Collate/Collate/Locale/be.pl b/gnu/usr.bin/perl/cpan/Unicode-Collate/Collate/Locale/be.pl index 399c53f7613..de97d045f2a 100644 --- a/gnu/usr.bin/perl/cpan/Unicode-Collate/Collate/Locale/be.pl +++ b/gnu/usr.bin/perl/cpan/Unicode-Collate/Collate/Locale/be.pl @@ -1,13 +1,13 @@ +{ - locale_version => 1.27, - entry => <<'ENTRY', # for DUCET v10.0.0 -0451 ; [.20C1.0020.0002] # CYRILLIC SMALL LETTER IO -0435 0308 ; [.20C1.0020.0002] # CYRILLIC SMALL LETTER IO -0401 ; [.20C1.0020.0008] # CYRILLIC CAPITAL LETTER IO -0415 0308 ; [.20C1.0020.0008] # CYRILLIC CAPITAL LETTER IO -045E ; [.2184.0020.0002] # CYRILLIC SMALL LETTER SHORT U -0443 0306 ; [.2184.0020.0002] # CYRILLIC SMALL LETTER SHORT U -040E ; [.2184.0020.0008] # CYRILLIC CAPITAL LETTER SHORT U -0423 0306 ; [.2184.0020.0008] # CYRILLIC CAPITAL LETTER SHORT U + locale_version => 1.31, + entry => <<'ENTRY', # for DUCET v13.0.0 +0451 ; [.23C0.0020.0002] # CYRILLIC SMALL LETTER IO +0435 0308 ; [.23C0.0020.0002] # CYRILLIC SMALL LETTER IO +0401 ; [.23C0.0020.0008] # CYRILLIC CAPITAL LETTER IO +0415 0308 ; [.23C0.0020.0008] # CYRILLIC CAPITAL LETTER IO +045E ; [.2483.0020.0002] # CYRILLIC SMALL LETTER SHORT U +0443 0306 ; [.2483.0020.0002] # CYRILLIC SMALL LETTER SHORT U +040E ; [.2483.0020.0008] # CYRILLIC CAPITAL LETTER SHORT U +0423 0306 ; [.2483.0020.0008] # CYRILLIC CAPITAL LETTER SHORT U ENTRY }; diff --git a/gnu/usr.bin/perl/cpan/Unicode-Collate/Collate/Locale/bn.pl b/gnu/usr.bin/perl/cpan/Unicode-Collate/Collate/Locale/bn.pl index 8ba21d03492..12305aa0115 100644 --- a/gnu/usr.bin/perl/cpan/Unicode-Collate/Collate/Locale/bn.pl +++ b/gnu/usr.bin/perl/cpan/Unicode-Collate/Collate/Locale/bn.pl @@ -1,9 +1,9 @@ +{ - locale_version => 1.27, - entry => <<'ENTRY', # for DUCET v10.0.0 -0982 ; [.273E.0020.0002][.FFF1.0000.0000] # BENGALI SIGN ANUSVARA -0983 ; [.273E.0020.0002][.FFF2.0000.0000] # BENGALI SIGN VISARGA -0981 ; [.273E.0020.0002][.FFF3.0000.0000] # BENGALI SIGN CANDRABINDU -0994 ; [.273E.0020.0002][.FFF0.0000.0000] # BENGALI LETTER AU + locale_version => 1.31, + entry => <<'ENTRY', # for DUCET v13.0.0 +0982 ; [.2A4B.0020.0002][.FFF1.0000.0000] # BENGALI SIGN ANUSVARA +0983 ; [.2A4B.0020.0002][.FFF2.0000.0000] # BENGALI SIGN VISARGA +0981 ; [.2A4B.0020.0002][.FFF3.0000.0000] # BENGALI SIGN CANDRABINDU +0994 ; [.2A4B.0020.0002][.FFF0.0000.0000] # BENGALI LETTER AU ENTRY }; diff --git a/gnu/usr.bin/perl/cpan/Unicode-Collate/Collate/Locale/ca.pl b/gnu/usr.bin/perl/cpan/Unicode-Collate/Collate/Locale/ca.pl index 446b9258b8d..0a94d3162a9 100644 --- a/gnu/usr.bin/perl/cpan/Unicode-Collate/Collate/Locale/ca.pl +++ b/gnu/usr.bin/perl/cpan/Unicode-Collate/Collate/Locale/ca.pl @@ -1,17 +1,17 @@ +{ - locale_version => 1.27, - entry => <<'ENTRY', # for DUCET v10.0.0 -0063 0068 ; [.1CE1.0020.0002] # -0063 0048 ; [.1CE1.0020.0007][.0000.0000.0002] # -0043 0068 ; [.1CE1.0020.0007][.0000.0000.0008] # -0043 0048 ; [.1CE1.0020.0008] # -006C 006C ; [.1DDE.0020.0002][.0000.0000.0001] # -006C 00B7 006C ; [.1DDE.0020.0002][.0000.0000.0007] # -006C 004C ; [.1DDE.0020.0007][.0000.0000.0002][.0000.0000.0001] # -006C 00B7 004C ; [.1DDE.0020.0007][.0000.0000.0002][.0000.0000.0007] # -004C 006C ; [.1DDE.0020.0007][.0000.0000.0008][.0000.0000.0001] # -004C 00B7 006C ; [.1DDE.0020.0007][.0000.0000.0008][.0000.0000.0007] # -004C 004C ; [.1DDE.0020.0008][.0000.0000.0001] # -004C 00B7 004C ; [.1DDE.0020.0008][.0000.0000.0007] # + locale_version => 1.31, + entry => <<'ENTRY', # for DUCET v13.0.0 +0063 0068 ; [.1FD7.0020.0002] # +0063 0048 ; [.1FD7.0020.0007][.0000.0000.0002] # +0043 0068 ; [.1FD7.0020.0007][.0000.0000.0008] # +0043 0048 ; [.1FD7.0020.0008] # +006C 006C ; [.20D7.0020.0002][.0000.0000.0001] # +006C 00B7 006C ; [.20D7.0020.0002][.0000.0000.0007] # +006C 004C ; [.20D7.0020.0007][.0000.0000.0002][.0000.0000.0001] # +006C 00B7 004C ; [.20D7.0020.0007][.0000.0000.0002][.0000.0000.0007] # +004C 006C ; [.20D7.0020.0007][.0000.0000.0008][.0000.0000.0001] # +004C 00B7 006C ; [.20D7.0020.0007][.0000.0000.0008][.0000.0000.0007] # +004C 004C ; [.20D7.0020.0008][.0000.0000.0001] # +004C 00B7 004C ; [.20D7.0020.0008][.0000.0000.0007] # ENTRY }; diff --git a/gnu/usr.bin/perl/cpan/Unicode-Collate/Collate/Locale/cs.pl b/gnu/usr.bin/perl/cpan/Unicode-Collate/Collate/Locale/cs.pl index 8c9024d2581..6f6c1944d99 100644 --- a/gnu/usr.bin/perl/cpan/Unicode-Collate/Collate/Locale/cs.pl +++ b/gnu/usr.bin/perl/cpan/Unicode-Collate/Collate/Locale/cs.pl @@ -1,25 +1,25 @@ +{ - locale_version => 1.27, - entry => <<'ENTRY', # for DUCET v10.0.0 -010D ; [.1CE1.0020.0002] # LATIN SMALL LETTER C WITH CARON -0063 030C ; [.1CE1.0020.0002] # LATIN SMALL LETTER C WITH CARON -010C ; [.1CE1.0020.0008] # LATIN CAPITAL LETTER C WITH CARON -0043 030C ; [.1CE1.0020.0008] # LATIN CAPITAL LETTER C WITH CARON -0063 0068 ; [.1D7F.0020.0002] # -0063 0048 ; [.1D7F.0020.0007][.0000.0000.0002] # -0043 0068 ; [.1D7F.0020.0007][.0000.0000.0008] # -0043 0048 ; [.1D7F.0020.0008] # -0159 ; [.1E9A.0020.0002] # LATIN SMALL LETTER R WITH CARON -0072 030C ; [.1E9A.0020.0002] # LATIN SMALL LETTER R WITH CARON -0158 ; [.1E9A.0020.0008] # LATIN CAPITAL LETTER R WITH CARON -0052 030C ; [.1E9A.0020.0008] # LATIN CAPITAL LETTER R WITH CARON -0161 ; [.1ED8.0020.0002] # LATIN SMALL LETTER S WITH CARON -0073 030C ; [.1ED8.0020.0002] # LATIN SMALL LETTER S WITH CARON -0160 ; [.1ED8.0020.0008] # LATIN CAPITAL LETTER S WITH CARON -0053 030C ; [.1ED8.0020.0008] # LATIN CAPITAL LETTER S WITH CARON -017E ; [.1F88.0020.0002] # LATIN SMALL LETTER Z WITH CARON -007A 030C ; [.1F88.0020.0002] # LATIN SMALL LETTER Z WITH CARON -017D ; [.1F88.0020.0008] # LATIN CAPITAL LETTER Z WITH CARON -005A 030C ; [.1F88.0020.0008] # LATIN CAPITAL LETTER Z WITH CARON + locale_version => 1.31, + entry => <<'ENTRY', # for DUCET v13.0.0 +010D ; [.1FD7.0020.0002] # LATIN SMALL LETTER C WITH CARON +0063 030C ; [.1FD7.0020.0002] # LATIN SMALL LETTER C WITH CARON +010C ; [.1FD7.0020.0008] # LATIN CAPITAL LETTER C WITH CARON +0043 030C ; [.1FD7.0020.0008] # LATIN CAPITAL LETTER C WITH CARON +0063 0068 ; [.2076.0020.0002] # +0063 0048 ; [.2076.0020.0007][.0000.0000.0002] # +0043 0068 ; [.2076.0020.0007][.0000.0000.0008] # +0043 0048 ; [.2076.0020.0008] # +0159 ; [.2194.0020.0002] # LATIN SMALL LETTER R WITH CARON +0072 030C ; [.2194.0020.0002] # LATIN SMALL LETTER R WITH CARON +0158 ; [.2194.0020.0008] # LATIN CAPITAL LETTER R WITH CARON +0052 030C ; [.2194.0020.0008] # LATIN CAPITAL LETTER R WITH CARON +0161 ; [.21D3.0020.0002] # LATIN SMALL LETTER S WITH CARON +0073 030C ; [.21D3.0020.0002] # LATIN SMALL LETTER S WITH CARON +0160 ; [.21D3.0020.0008] # LATIN CAPITAL LETTER S WITH CARON +0053 030C ; [.21D3.0020.0008] # LATIN CAPITAL LETTER S WITH CARON +017E ; [.2287.0020.0002] # LATIN SMALL LETTER Z WITH CARON +007A 030C ; [.2287.0020.0002] # LATIN SMALL LETTER Z WITH CARON +017D ; [.2287.0020.0008] # LATIN CAPITAL LETTER Z WITH CARON +005A 030C ; [.2287.0020.0008] # LATIN CAPITAL LETTER Z WITH CARON ENTRY }; diff --git a/gnu/usr.bin/perl/cpan/Unicode-Collate/Collate/Locale/cy.pl b/gnu/usr.bin/perl/cpan/Unicode-Collate/Collate/Locale/cy.pl index 58ca40e7d8e..8d806736763 100644 --- a/gnu/usr.bin/perl/cpan/Unicode-Collate/Collate/Locale/cy.pl +++ b/gnu/usr.bin/perl/cpan/Unicode-Collate/Collate/Locale/cy.pl @@ -1,29 +1,29 @@ +{ - locale_version => 1.27, - entry => <<'ENTRY', # for DUCET v10.0.0 -0063 0068 ; [.1CE1.0020.0002] # -0043 0068 ; [.1CE1.0020.0007] # -0043 0048 ; [.1CE1.0020.0008] # -0064 0064 ; [.1CF6.0020.0002] # -0044 0064 ; [.1CF6.0020.0007] # -0044 0044 ; [.1CF6.0020.0008] # -0066 0066 ; [.1D4C.0020.0002] # -0046 0066 ; [.1D4C.0020.0007] # -0046 0046 ; [.1D4C.0020.0008] # -006E 0067 ; [.1D5B.0020.0002] # -004E 0067 ; [.1D5B.0020.0007] # -004E 0047 ; [.1D5B.0020.0008] # -006C 006C ; [.1DDE.0020.0002] # -004C 006C ; [.1DDE.0020.0007] # -004C 004C ; [.1DDE.0020.0008] # -0070 0068 ; [.1E73.0020.0002] # -0050 0068 ; [.1E73.0020.0007] # -0050 0048 ; [.1E73.0020.0008] # -0072 0068 ; [.1E9A.0020.0002] # -0052 0068 ; [.1E9A.0020.0007] # -0052 0048 ; [.1E9A.0020.0008] # -0074 0068 ; [.1EFC.0020.0002] # -0054 0068 ; [.1EFC.0020.0007] # -0054 0048 ; [.1EFC.0020.0008] # + locale_version => 1.31, + entry => <<'ENTRY', # for DUCET v13.0.0 +0063 0068 ; [.1FD7.0020.0002] # +0043 0068 ; [.1FD7.0020.0007] # +0043 0048 ; [.1FD7.0020.0008] # +0064 0064 ; [.1FEC.0020.0002] # +0044 0064 ; [.1FEC.0020.0007] # +0044 0044 ; [.1FEC.0020.0008] # +0066 0066 ; [.2043.0020.0002] # +0046 0066 ; [.2043.0020.0007] # +0046 0046 ; [.2043.0020.0008] # +006E 0067 ; [.2052.0020.0002] # +004E 0067 ; [.2052.0020.0007] # +004E 0047 ; [.2052.0020.0008] # +006C 006C ; [.20D7.0020.0002] # +004C 006C ; [.20D7.0020.0007] # +004C 004C ; [.20D7.0020.0008] # +0070 0068 ; [.216C.0020.0002] # +0050 0068 ; [.216C.0020.0007] # +0050 0048 ; [.216C.0020.0008] # +0072 0068 ; [.2194.0020.0002] # +0052 0068 ; [.2194.0020.0007] # +0052 0048 ; [.2194.0020.0008] # +0074 0068 ; [.21F8.0020.0002] # +0054 0068 ; [.21F8.0020.0007] # +0054 0048 ; [.21F8.0020.0008] # ENTRY }; diff --git a/gnu/usr.bin/perl/cpan/Unicode-Collate/Collate/Locale/da.pl b/gnu/usr.bin/perl/cpan/Unicode-Collate/Collate/Locale/da.pl index f68564cd39c..282a81c6a36 100644 --- a/gnu/usr.bin/perl/cpan/Unicode-Collate/Collate/Locale/da.pl +++ b/gnu/usr.bin/perl/cpan/Unicode-Collate/Collate/Locale/da.pl @@ -1,78 +1,78 @@ +{ - locale_version => 1.27, + locale_version => 1.31, upper_before_lower => 1, - entry => <<'ENTRY', # for DUCET v10.0.0 -0111 ; [.1CF5.0021.0002] # LATIN SMALL LETTER D WITH STROKE -0064 0335 ; [.1CF5.0021.0002] # LATIN SMALL LETTER D WITH STROKE -0110 ; [.1CF5.0021.0008] # LATIN CAPITAL LETTER D WITH STROKE -0044 0335 ; [.1CF5.0021.0008] # LATIN CAPITAL LETTER D WITH STROKE -00F0 ; [.1CF5.0022.0002] # LATIN SMALL LETTER ETH -1DD9 ; [.1CF5.0022.0002] # COMBINING LATIN SMALL LETTER ETH -00D0 ; [.1CF5.0022.0008] # LATIN CAPITAL LETTER ETH -00FE ; [.1EFB.0020.0003][.1D7E.0020.0003] # LATIN SMALL LETTER THORN -00DE ; [.1EFB.0020.0009][.1D7E.0020.0009] # LATIN CAPITAL LETTER THORN -00FC ; [.1F71.0021.0002] # LATIN SMALL LETTER U WITH DIAERESIS -0075 0308 ; [.1F71.0021.0002] # LATIN SMALL LETTER U WITH DIAERESIS -00DC ; [.1F71.0021.0008] # LATIN CAPITAL LETTER U WITH DIAERESIS -0055 0308 ; [.1F71.0021.0008] # LATIN CAPITAL LETTER U WITH DIAERESIS -01DC ; [.1F71.0021.0002][.0000.0025.0002] # LATIN SMALL LETTER U WITH DIAERESIS AND GRAVE -01DB ; [.1F71.0021.0008][.0000.0025.0002] # LATIN CAPITAL LETTER U WITH DIAERESIS AND GRAVE -01D8 ; [.1F71.0021.0002][.0000.0024.0002] # LATIN SMALL LETTER U WITH DIAERESIS AND ACUTE -01D7 ; [.1F71.0021.0008][.0000.0024.0002] # LATIN CAPITAL LETTER U WITH DIAERESIS AND ACUTE -01D6 ; [.1F71.0021.0002][.0000.0032.0002] # LATIN SMALL LETTER U WITH DIAERESIS AND MACRON -01D5 ; [.1F71.0021.0008][.0000.0032.0002] # LATIN CAPITAL LETTER U WITH DIAERESIS AND MACRON -01DA ; [.1F71.0021.0002][.0000.0028.0002] # LATIN SMALL LETTER U WITH DIAERESIS AND CARON -01D9 ; [.1F71.0021.0008][.0000.0028.0002] # LATIN CAPITAL LETTER U WITH DIAERESIS AND CARON -0171 ; [.1F71.0022.0002] # LATIN SMALL LETTER U WITH DOUBLE ACUTE -0075 030B ; [.1F71.0022.0002] # LATIN SMALL LETTER U WITH DOUBLE ACUTE -0170 ; [.1F71.0022.0008] # LATIN CAPITAL LETTER U WITH DOUBLE ACUTE -0055 030B ; [.1F71.0022.0008] # LATIN CAPITAL LETTER U WITH DOUBLE ACUTE -00E6 ; [.1FFC.0020.0002] # LATIN SMALL LETTER AE -1DD4 ; [.1FFC.0020.0002] # COMBINING LATIN SMALL LETTER AE -00C6 ; [.1FFC.0020.0008] # LATIN CAPITAL LETTER AE -1D2D ; [.1FFC.0020.0014] # MODIFIER LETTER CAPITAL AE -01FD ; [.1FFC.0020.0002][.0000.0024.0002] # LATIN SMALL LETTER AE WITH ACUTE -01FC ; [.1FFC.0020.0008][.0000.0024.0002] # LATIN CAPITAL LETTER AE WITH ACUTE -01E3 ; [.1FFC.0020.0002][.0000.0032.0002] # LATIN SMALL LETTER AE WITH MACRON -01E2 ; [.1FFC.0020.0008][.0000.0032.0002] # LATIN CAPITAL LETTER AE WITH MACRON -00E4 ; [.1FFC.0021.0002] # LATIN SMALL LETTER A WITH DIAERESIS -0061 0308 ; [.1FFC.0021.0002] # LATIN SMALL LETTER A WITH DIAERESIS -00C4 ; [.1FFC.0021.0008] # LATIN CAPITAL LETTER A WITH DIAERESIS -0041 0308 ; [.1FFC.0021.0008] # LATIN CAPITAL LETTER A WITH DIAERESIS -01DF ; [.1FFC.0021.0002][.0000.0032.0002] # LATIN SMALL LETTER A WITH DIAERESIS AND MACRON -01DE ; [.1FFC.0021.0008][.0000.0032.0002] # LATIN CAPITAL LETTER A WITH DIAERESIS AND MACRON -0119 ; [.1FFC.0022.0002] # LATIN SMALL LETTER E WITH OGONEK -0065 0328 ; [.1FFC.0022.0002] # LATIN SMALL LETTER E WITH OGONEK -0118 ; [.1FFC.0022.0008] # LATIN CAPITAL LETTER E WITH OGONEK -0045 0328 ; [.1FFC.0022.0008] # LATIN CAPITAL LETTER E WITH OGONEK -00F8 ; [.1FFD.0020.0002] # LATIN SMALL LETTER O WITH STROKE -006F 0338 ; [.1FFD.0020.0002] # LATIN SMALL LETTER O WITH STROKE -00D8 ; [.1FFD.0020.0008] # LATIN CAPITAL LETTER O WITH STROKE -004F 0338 ; [.1FFD.0020.0008] # LATIN CAPITAL LETTER O WITH STROKE -01FF ; [.1FFD.0020.0002][.0000.0024.0002] # LATIN SMALL LETTER O WITH STROKE AND ACUTE -01FE ; [.1FFD.0020.0008][.0000.0024.0002] # LATIN CAPITAL LETTER O WITH STROKE AND ACUTE -00F6 ; [.1FFD.0021.0002] # LATIN SMALL LETTER O WITH DIAERESIS -006F 0308 ; [.1FFD.0021.0002] # LATIN SMALL LETTER O WITH DIAERESIS -00D6 ; [.1FFD.0021.0008] # LATIN CAPITAL LETTER O WITH DIAERESIS -004F 0308 ; [.1FFD.0021.0008] # LATIN CAPITAL LETTER O WITH DIAERESIS -022B ; [.1FFD.0021.0002][.0000.0032.0002] # LATIN SMALL LETTER O WITH DIAERESIS AND MACRON -022A ; [.1FFD.0021.0008][.0000.0032.0002] # LATIN CAPITAL LETTER O WITH DIAERESIS AND MACRON -0151 ; [.1FFD.0022.0002] # LATIN SMALL LETTER O WITH DOUBLE ACUTE -006F 030B ; [.1FFD.0022.0002] # LATIN SMALL LETTER O WITH DOUBLE ACUTE -0150 ; [.1FFD.0022.0008] # LATIN CAPITAL LETTER O WITH DOUBLE ACUTE -004F 030B ; [.1FFD.0022.0008] # LATIN CAPITAL LETTER O WITH DOUBLE ACUTE -0153 ; [.1FFD.0023.0002] # LATIN SMALL LIGATURE OE -0152 ; [.1FFD.0023.0008] # LATIN CAPITAL LIGATURE OE -00E5 ; [.1FFE.0020.0002][.0000.0000.0001] # LATIN SMALL LETTER A WITH RING ABOVE -0061 030A ; [.1FFE.0020.0002][.0000.0000.0001] # LATIN SMALL LETTER A WITH RING ABOVE -00C5 ; [.1FFE.0020.0008][.0000.0000.0001] # LATIN CAPITAL LETTER A WITH RING ABOVE -0041 030A ; [.1FFE.0020.0008][.0000.0000.0001] # LATIN CAPITAL LETTER A WITH RING ABOVE -212B ; [.1FFE.0020.0008][.0000.0000.0001] # ANGSTROM SIGN -01FB ; [.1FFE.0020.0002][.0000.0000.0001][.0000.0024.0002] # LATIN SMALL LETTER A WITH RING ABOVE AND ACUTE -01FA ; [.1FFE.0020.0008][.0000.0000.0001][.0000.0024.0002] # LATIN CAPITAL LETTER A WITH RING ABOVE AND ACUTE -0061 0061 ; [.1FFE.0020.0002][.0000.0000.0007] # -0041 0061 ; [.1FFE.0020.0007][.0000.0000.0002] # -0061 0041 ; [.1FFE.0020.0007][.0000.0000.0008] # -0041 0041 ; [.1FFE.0020.0008][.0000.0000.0007] # + entry => <<'ENTRY', # for DUCET v13.0.0 +0111 ; [.1FEB.0021.0002] # LATIN SMALL LETTER D WITH STROKE +0064 0335 ; [.1FEB.0021.0002] # LATIN SMALL LETTER D WITH STROKE +0110 ; [.1FEB.0021.0008] # LATIN CAPITAL LETTER D WITH STROKE +0044 0335 ; [.1FEB.0021.0008] # LATIN CAPITAL LETTER D WITH STROKE +00F0 ; [.1FEB.0022.0002] # LATIN SMALL LETTER ETH +1DD9 ; [.1FEB.0022.0002] # COMBINING LATIN SMALL LETTER ETH +00D0 ; [.1FEB.0022.0008] # LATIN CAPITAL LETTER ETH +00FE ; [.21F7.0020.0003][.2075.0020.0003] # LATIN SMALL LETTER THORN +00DE ; [.21F7.0020.0009][.2075.0020.0009] # LATIN CAPITAL LETTER THORN +00FC ; [.2270.0021.0002] # LATIN SMALL LETTER U WITH DIAERESIS +0075 0308 ; [.2270.0021.0002] # LATIN SMALL LETTER U WITH DIAERESIS +00DC ; [.2270.0021.0008] # LATIN CAPITAL LETTER U WITH DIAERESIS +0055 0308 ; [.2270.0021.0008] # LATIN CAPITAL LETTER U WITH DIAERESIS +01DC ; [.2270.0021.0002][.0000.0025.0002] # LATIN SMALL LETTER U WITH DIAERESIS AND GRAVE +01DB ; [.2270.0021.0008][.0000.0025.0002] # LATIN CAPITAL LETTER U WITH DIAERESIS AND GRAVE +01D8 ; [.2270.0021.0002][.0000.0024.0002] # LATIN SMALL LETTER U WITH DIAERESIS AND ACUTE +01D7 ; [.2270.0021.0008][.0000.0024.0002] # LATIN CAPITAL LETTER U WITH DIAERESIS AND ACUTE +01D6 ; [.2270.0021.0002][.0000.0032.0002] # LATIN SMALL LETTER U WITH DIAERESIS AND MACRON +01D5 ; [.2270.0021.0008][.0000.0032.0002] # LATIN CAPITAL LETTER U WITH DIAERESIS AND MACRON +01DA ; [.2270.0021.0002][.0000.0028.0002] # LATIN SMALL LETTER U WITH DIAERESIS AND CARON +01D9 ; [.2270.0021.0008][.0000.0028.0002] # LATIN CAPITAL LETTER U WITH DIAERESIS AND CARON +0171 ; [.2270.0022.0002] # LATIN SMALL LETTER U WITH DOUBLE ACUTE +0075 030B ; [.2270.0022.0002] # LATIN SMALL LETTER U WITH DOUBLE ACUTE +0170 ; [.2270.0022.0008] # LATIN CAPITAL LETTER U WITH DOUBLE ACUTE +0055 030B ; [.2270.0022.0008] # LATIN CAPITAL LETTER U WITH DOUBLE ACUTE +00E6 ; [.22FB.0020.0002] # LATIN SMALL LETTER AE +1DD4 ; [.22FB.0020.0002] # COMBINING LATIN SMALL LETTER AE +00C6 ; [.22FB.0020.0008] # LATIN CAPITAL LETTER AE +1D2D ; [.22FB.0020.0014] # MODIFIER LETTER CAPITAL AE +01FD ; [.22FB.0020.0002][.0000.0024.0002] # LATIN SMALL LETTER AE WITH ACUTE +01FC ; [.22FB.0020.0008][.0000.0024.0002] # LATIN CAPITAL LETTER AE WITH ACUTE +01E3 ; [.22FB.0020.0002][.0000.0032.0002] # LATIN SMALL LETTER AE WITH MACRON +01E2 ; [.22FB.0020.0008][.0000.0032.0002] # LATIN CAPITAL LETTER AE WITH MACRON +00E4 ; [.22FB.0021.0002] # LATIN SMALL LETTER A WITH DIAERESIS +0061 0308 ; [.22FB.0021.0002] # LATIN SMALL LETTER A WITH DIAERESIS +00C4 ; [.22FB.0021.0008] # LATIN CAPITAL LETTER A WITH DIAERESIS +0041 0308 ; [.22FB.0021.0008] # LATIN CAPITAL LETTER A WITH DIAERESIS +01DF ; [.22FB.0021.0002][.0000.0032.0002] # LATIN SMALL LETTER A WITH DIAERESIS AND MACRON +01DE ; [.22FB.0021.0008][.0000.0032.0002] # LATIN CAPITAL LETTER A WITH DIAERESIS AND MACRON +0119 ; [.22FB.0022.0002] # LATIN SMALL LETTER E WITH OGONEK +0065 0328 ; [.22FB.0022.0002] # LATIN SMALL LETTER E WITH OGONEK +0118 ; [.22FB.0022.0008] # LATIN CAPITAL LETTER E WITH OGONEK +0045 0328 ; [.22FB.0022.0008] # LATIN CAPITAL LETTER E WITH OGONEK +00F8 ; [.22FC.0020.0002] # LATIN SMALL LETTER O WITH STROKE +006F 0338 ; [.22FC.0020.0002] # LATIN SMALL LETTER O WITH STROKE +00D8 ; [.22FC.0020.0008] # LATIN CAPITAL LETTER O WITH STROKE +004F 0338 ; [.22FC.0020.0008] # LATIN CAPITAL LETTER O WITH STROKE +01FF ; [.22FC.0020.0002][.0000.0024.0002] # LATIN SMALL LETTER O WITH STROKE AND ACUTE +01FE ; [.22FC.0020.0008][.0000.0024.0002] # LATIN CAPITAL LETTER O WITH STROKE AND ACUTE +00F6 ; [.22FC.0021.0002] # LATIN SMALL LETTER O WITH DIAERESIS +006F 0308 ; [.22FC.0021.0002] # LATIN SMALL LETTER O WITH DIAERESIS +00D6 ; [.22FC.0021.0008] # LATIN CAPITAL LETTER O WITH DIAERESIS +004F 0308 ; [.22FC.0021.0008] # LATIN CAPITAL LETTER O WITH DIAERESIS +022B ; [.22FC.0021.0002][.0000.0032.0002] # LATIN SMALL LETTER O WITH DIAERESIS AND MACRON +022A ; [.22FC.0021.0008][.0000.0032.0002] # LATIN CAPITAL LETTER O WITH DIAERESIS AND MACRON +0151 ; [.22FC.0022.0002] # LATIN SMALL LETTER O WITH DOUBLE ACUTE +006F 030B ; [.22FC.0022.0002] # LATIN SMALL LETTER O WITH DOUBLE ACUTE +0150 ; [.22FC.0022.0008] # LATIN CAPITAL LETTER O WITH DOUBLE ACUTE +004F 030B ; [.22FC.0022.0008] # LATIN CAPITAL LETTER O WITH DOUBLE ACUTE +0153 ; [.22FC.0023.0002] # LATIN SMALL LIGATURE OE +0152 ; [.22FC.0023.0008] # LATIN CAPITAL LIGATURE OE +00E5 ; [.22FD.0020.0002][.0000.0000.0001] # LATIN SMALL LETTER A WITH RING ABOVE +0061 030A ; [.22FD.0020.0002][.0000.0000.0001] # LATIN SMALL LETTER A WITH RING ABOVE +00C5 ; [.22FD.0020.0008][.0000.0000.0001] # LATIN CAPITAL LETTER A WITH RING ABOVE +0041 030A ; [.22FD.0020.0008][.0000.0000.0001] # LATIN CAPITAL LETTER A WITH RING ABOVE +212B ; [.22FD.0020.0008][.0000.0000.0001] # ANGSTROM SIGN +01FB ; [.22FD.0020.0002][.0000.0000.0001][.0000.0024.0002] # LATIN SMALL LETTER A WITH RING ABOVE AND ACUTE +01FA ; [.22FD.0020.0008][.0000.0000.0001][.0000.0024.0002] # LATIN CAPITAL LETTER A WITH RING ABOVE AND ACUTE +0061 0061 ; [.22FD.0020.0002][.0000.0000.0007] # +0041 0061 ; [.22FD.0020.0007][.0000.0000.0002] # +0061 0041 ; [.22FD.0020.0007][.0000.0000.0008] # +0041 0041 ; [.22FD.0020.0008][.0000.0000.0007] # ENTRY }; diff --git a/gnu/usr.bin/perl/cpan/Unicode-Collate/Collate/Locale/de_phone.pl b/gnu/usr.bin/perl/cpan/Unicode-Collate/Collate/Locale/de_phone.pl index 29d22a052f5..398bad76f65 100644 --- a/gnu/usr.bin/perl/cpan/Unicode-Collate/Collate/Locale/de_phone.pl +++ b/gnu/usr.bin/perl/cpan/Unicode-Collate/Collate/Locale/de_phone.pl @@ -1,29 +1,29 @@ +{ - locale_version => 1.27, - entry => <<'ENTRY', # for DUCET v10.0.0 -00E4 ; [.1CAD.0021.0002][.1D10.0021.0002] # LATIN SMALL LETTER A WITH DIAERESIS -0061 0308 ; [.1CAD.0021.0002][.1D10.0021.0002] # LATIN SMALL LETTER A WITH DIAERESIS -00C4 ; [.1CAD.0021.0008][.1D10.0021.0008] # LATIN CAPITAL LETTER A WITH DIAERESIS -0041 0308 ; [.1CAD.0021.0008][.1D10.0021.0008] # LATIN CAPITAL LETTER A WITH DIAERESIS -01DF ; [.1CAD.0021.0002][.1D10.0021.0002][.0000.0032.0002] # LATIN SMALL LETTER A WITH DIAERESIS AND MACRON -01DE ; [.1CAD.0021.0008][.1D10.0021.0008][.0000.0032.0002] # LATIN CAPITAL LETTER A WITH DIAERESIS AND MACRON -00F6 ; [.1E43.0021.0002][.1D10.0021.0002] # LATIN SMALL LETTER O WITH DIAERESIS -006F 0308 ; [.1E43.0021.0002][.1D10.0021.0002] # LATIN SMALL LETTER O WITH DIAERESIS -00D6 ; [.1E43.0021.0008][.1D10.0021.0008] # LATIN CAPITAL LETTER O WITH DIAERESIS -004F 0308 ; [.1E43.0021.0008][.1D10.0021.0008] # LATIN CAPITAL LETTER O WITH DIAERESIS -022B ; [.1E43.0021.0002][.1D10.0021.0002][.0000.0032.0002] # LATIN SMALL LETTER O WITH DIAERESIS AND MACRON -022A ; [.1E43.0021.0008][.1D10.0021.0008][.0000.0032.0002] # LATIN CAPITAL LETTER O WITH DIAERESIS AND MACRON -00FC ; [.1F1B.0021.0002][.1D10.0021.0002] # LATIN SMALL LETTER U WITH DIAERESIS -0075 0308 ; [.1F1B.0021.0002][.1D10.0021.0002] # LATIN SMALL LETTER U WITH DIAERESIS -00DC ; [.1F1B.0021.0008][.1D10.0021.0008] # LATIN CAPITAL LETTER U WITH DIAERESIS -0055 0308 ; [.1F1B.0021.0008][.1D10.0021.0008] # LATIN CAPITAL LETTER U WITH DIAERESIS -01DC ; [.1F1B.0021.0002][.1D10.0021.0002][.0000.0025.0002] # LATIN SMALL LETTER U WITH DIAERESIS AND GRAVE -01DB ; [.1F1B.0021.0008][.1D10.0021.0008][.0000.0025.0002] # LATIN CAPITAL LETTER U WITH DIAERESIS AND GRAVE -01D8 ; [.1F1B.0021.0002][.1D10.0021.0002][.0000.0024.0002] # LATIN SMALL LETTER U WITH DIAERESIS AND ACUTE -01D7 ; [.1F1B.0021.0008][.1D10.0021.0008][.0000.0024.0002] # LATIN CAPITAL LETTER U WITH DIAERESIS AND ACUTE -01D6 ; [.1F1B.0021.0002][.1D10.0021.0002][.0000.0032.0002] # LATIN SMALL LETTER U WITH DIAERESIS AND MACRON -01D5 ; [.1F1B.0021.0008][.1D10.0021.0008][.0000.0032.0002] # LATIN CAPITAL LETTER U WITH DIAERESIS AND MACRON -01DA ; [.1F1B.0021.0002][.1D10.0021.0002][.0000.0028.0002] # LATIN SMALL LETTER U WITH DIAERESIS AND CARON -01D9 ; [.1F1B.0021.0008][.1D10.0021.0008][.0000.0028.0002] # LATIN CAPITAL LETTER U WITH DIAERESIS AND CARON + locale_version => 1.31, + entry => <<'ENTRY', # for DUCET v13.0.0 +00E4 ; [.1FA2.0021.0002][.2007.0021.0002] # LATIN SMALL LETTER A WITH DIAERESIS +0061 0308 ; [.1FA2.0021.0002][.2007.0021.0002] # LATIN SMALL LETTER A WITH DIAERESIS +00C4 ; [.1FA2.0021.0008][.2007.0021.0008] # LATIN CAPITAL LETTER A WITH DIAERESIS +0041 0308 ; [.1FA2.0021.0008][.2007.0021.0008] # LATIN CAPITAL LETTER A WITH DIAERESIS +01DF ; [.1FA2.0021.0002][.2007.0021.0002][.0000.0032.0002] # LATIN SMALL LETTER A WITH DIAERESIS AND MACRON +01DE ; [.1FA2.0021.0008][.2007.0021.0008][.0000.0032.0002] # LATIN CAPITAL LETTER A WITH DIAERESIS AND MACRON +00F6 ; [.213C.0021.0002][.2007.0021.0002] # LATIN SMALL LETTER O WITH DIAERESIS +006F 0308 ; [.213C.0021.0002][.2007.0021.0002] # LATIN SMALL LETTER O WITH DIAERESIS +00D6 ; [.213C.0021.0008][.2007.0021.0008] # LATIN CAPITAL LETTER O WITH DIAERESIS +004F 0308 ; [.213C.0021.0008][.2007.0021.0008] # LATIN CAPITAL LETTER O WITH DIAERESIS +022B ; [.213C.0021.0002][.2007.0021.0002][.0000.0032.0002] # LATIN SMALL LETTER O WITH DIAERESIS AND MACRON +022A ; [.213C.0021.0008][.2007.0021.0008][.0000.0032.0002] # LATIN CAPITAL LETTER O WITH DIAERESIS AND MACRON +00FC ; [.2217.0021.0002][.2007.0021.0002] # LATIN SMALL LETTER U WITH DIAERESIS +0075 0308 ; [.2217.0021.0002][.2007.0021.0002] # LATIN SMALL LETTER U WITH DIAERESIS +00DC ; [.2217.0021.0008][.2007.0021.0008] # LATIN CAPITAL LETTER U WITH DIAERESIS +0055 0308 ; [.2217.0021.0008][.2007.0021.0008] # LATIN CAPITAL LETTER U WITH DIAERESIS +01DC ; [.2217.0021.0002][.2007.0021.0002][.0000.0025.0002] # LATIN SMALL LETTER U WITH DIAERESIS AND GRAVE +01DB ; [.2217.0021.0008][.2007.0021.0008][.0000.0025.0002] # LATIN CAPITAL LETTER U WITH DIAERESIS AND GRAVE +01D8 ; [.2217.0021.0002][.2007.0021.0002][.0000.0024.0002] # LATIN SMALL LETTER U WITH DIAERESIS AND ACUTE +01D7 ; [.2217.0021.0008][.2007.0021.0008][.0000.0024.0002] # LATIN CAPITAL LETTER U WITH DIAERESIS AND ACUTE +01D6 ; [.2217.0021.0002][.2007.0021.0002][.0000.0032.0002] # LATIN SMALL LETTER U WITH DIAERESIS AND MACRON +01D5 ; [.2217.0021.0008][.2007.0021.0008][.0000.0032.0002] # LATIN CAPITAL LETTER U WITH DIAERESIS AND MACRON +01DA ; [.2217.0021.0002][.2007.0021.0002][.0000.0028.0002] # LATIN SMALL LETTER U WITH DIAERESIS AND CARON +01D9 ; [.2217.0021.0008][.2007.0021.0008][.0000.0028.0002] # LATIN CAPITAL LETTER U WITH DIAERESIS AND CARON ENTRY }; diff --git a/gnu/usr.bin/perl/cpan/Unicode-Collate/Collate/Locale/ee.pl b/gnu/usr.bin/perl/cpan/Unicode-Collate/Collate/Locale/ee.pl index 5490978b44a..b21ba43e72f 100644 --- a/gnu/usr.bin/perl/cpan/Unicode-Collate/Collate/Locale/ee.pl +++ b/gnu/usr.bin/perl/cpan/Unicode-Collate/Collate/Locale/ee.pl @@ -1,36 +1,36 @@ +{ - locale_version => 1.27, + locale_version => 1.31, # d-tail, open-e, f-hook, gamma, eng, open-o, v-hook don't require tailoring - entry => <<'ENTRY', # for DUCET v10.0.0 + entry => <<'ENTRY', # for DUCET v13.0.0 0302 ; [.0000.0029.0002] # COMBINING CIRCUMFLEX ACCENT -00E2 ; [.1CAD.0020.0002][.0000.0029.0002] # LATIN SMALL LETTER A WITH CIRCUMFLEX -00C2 ; [.1CAD.0020.0008][.0000.0029.0002] # LATIN CAPITAL LETTER A WITH CIRCUMFLEX -00EA ; [.1D10.0020.0002][.0000.0029.0002] # LATIN SMALL LETTER E WITH CIRCUMFLEX -00CA ; [.1D10.0020.0008][.0000.0029.0002] # LATIN CAPITAL LETTER E WITH CIRCUMFLEX -00EE ; [.1D98.0020.0002][.0000.0029.0002] # LATIN SMALL LETTER I WITH CIRCUMFLEX -00CE ; [.1D98.0020.0008][.0000.0029.0002] # LATIN CAPITAL LETTER I WITH CIRCUMFLEX -00F4 ; [.1E43.0020.0002][.0000.0029.0002] # LATIN SMALL LETTER O WITH CIRCUMFLEX -00D4 ; [.1E43.0020.0008][.0000.0029.0002] # LATIN CAPITAL LETTER O WITH CIRCUMFLEX -00FB ; [.1F1B.0020.0002][.0000.0029.0002] # LATIN SMALL LETTER U WITH CIRCUMFLEX -00DB ; [.1F1B.0020.0008][.0000.0029.0002] # LATIN CAPITAL LETTER U WITH CIRCUMFLEX -0177 ; [.1F71.0020.0002][.0000.0029.0002] # LATIN SMALL LETTER Y WITH CIRCUMFLEX -0176 ; [.1F71.0020.0008][.0000.0029.0002] # LATIN CAPITAL LETTER Y WITH CIRCUMFLEX -0064 007A ; [.1CF6.0020.0002] # -0044 007A ; [.1CF6.0020.0007] # -0044 005A ; [.1CF6.0020.0008] # -0067 0062 ; [.1D5B.0020.0002] # -0047 0062 ; [.1D5B.0020.0007] # -0047 0042 ; [.1D5B.0020.0008] # -0078 ; [.1D7F.0020.0002] # LATIN SMALL LETTER X -0058 ; [.1D7F.0020.0008] # LATIN CAPITAL LETTER X -006B 0070 ; [.1DCC.0020.0002] # -004B 0070 ; [.1DCC.0020.0007] # -004B 0050 ; [.1DCC.0020.0008] # -006E 0079 ; [.1E20.0020.0002] # -004E 0079 ; [.1E20.0020.0007] # -004E 0059 ; [.1E20.0020.0008] # -0074 0073 ; [.1EFC.0020.0002] # -0054 0073 ; [.1EFC.0020.0007] # -0054 0053 ; [.1EFC.0020.0008] # +00E2 ; [.1FA2.0020.0002][.0000.0029.0002] # LATIN SMALL LETTER A WITH CIRCUMFLEX +00C2 ; [.1FA2.0020.0008][.0000.0029.0002] # LATIN CAPITAL LETTER A WITH CIRCUMFLEX +00EA ; [.2007.0020.0002][.0000.0029.0002] # LATIN SMALL LETTER E WITH CIRCUMFLEX +00CA ; [.2007.0020.0008][.0000.0029.0002] # LATIN CAPITAL LETTER E WITH CIRCUMFLEX +00EE ; [.2090.0020.0002][.0000.0029.0002] # LATIN SMALL LETTER I WITH CIRCUMFLEX +00CE ; [.2090.0020.0008][.0000.0029.0002] # LATIN CAPITAL LETTER I WITH CIRCUMFLEX +00F4 ; [.213C.0020.0002][.0000.0029.0002] # LATIN SMALL LETTER O WITH CIRCUMFLEX +00D4 ; [.213C.0020.0008][.0000.0029.0002] # LATIN CAPITAL LETTER O WITH CIRCUMFLEX +00FB ; [.2217.0020.0002][.0000.0029.0002] # LATIN SMALL LETTER U WITH CIRCUMFLEX +00DB ; [.2217.0020.0008][.0000.0029.0002] # LATIN CAPITAL LETTER U WITH CIRCUMFLEX +0177 ; [.2270.0020.0002][.0000.0029.0002] # LATIN SMALL LETTER Y WITH CIRCUMFLEX +0176 ; [.2270.0020.0008][.0000.0029.0002] # LATIN CAPITAL LETTER Y WITH CIRCUMFLEX +0064 007A ; [.1FEC.0020.0002] # +0044 007A ; [.1FEC.0020.0007] # +0044 005A ; [.1FEC.0020.0008] # +0067 0062 ; [.2052.0020.0002] # +0047 0062 ; [.2052.0020.0007] # +0047 0042 ; [.2052.0020.0008] # +0078 ; [.2076.0020.0002] # LATIN SMALL LETTER X +0058 ; [.2076.0020.0008] # LATIN CAPITAL LETTER X +006B 0070 ; [.20C5.0020.0002] # +004B 0070 ; [.20C5.0020.0007] # +004B 0050 ; [.20C5.0020.0008] # +006E 0079 ; [.2119.0020.0002] # +004E 0079 ; [.2119.0020.0007] # +004E 0059 ; [.2119.0020.0008] # +0074 0073 ; [.21F8.0020.0002] # +0054 0073 ; [.21F8.0020.0007] # +0054 0053 ; [.21F8.0020.0008] # ENTRY }; diff --git a/gnu/usr.bin/perl/cpan/Unicode-Collate/Collate/Locale/eo.pl b/gnu/usr.bin/perl/cpan/Unicode-Collate/Collate/Locale/eo.pl index acd604ece0a..f835b1d84f6 100644 --- a/gnu/usr.bin/perl/cpan/Unicode-Collate/Collate/Locale/eo.pl +++ b/gnu/usr.bin/perl/cpan/Unicode-Collate/Collate/Locale/eo.pl @@ -1,29 +1,29 @@ +{ - locale_version => 1.27, - entry => <<'ENTRY', # for DUCET v10.0.0 -0109 ; [.1CE1.0020.0002] # LATIN SMALL LETTER C WITH CIRCUMFLEX -0063 0302 ; [.1CE1.0020.0002] # LATIN SMALL LETTER C WITH CIRCUMFLEX -0108 ; [.1CE1.0020.0008] # LATIN CAPITAL LETTER C WITH CIRCUMFLEX -0043 0302 ; [.1CE1.0020.0008] # LATIN CAPITAL LETTER C WITH CIRCUMFLEX -011D ; [.1D5B.0020.0002] # LATIN SMALL LETTER G WITH CIRCUMFLEX -0067 0302 ; [.1D5B.0020.0002] # LATIN SMALL LETTER G WITH CIRCUMFLEX -011C ; [.1D5B.0020.0008] # LATIN CAPITAL LETTER G WITH CIRCUMFLEX -0047 0302 ; [.1D5B.0020.0008] # LATIN CAPITAL LETTER G WITH CIRCUMFLEX -0125 ; [.1D7F.0020.0002] # LATIN SMALL LETTER H WITH CIRCUMFLEX -0068 0302 ; [.1D7F.0020.0002] # LATIN SMALL LETTER H WITH CIRCUMFLEX -0124 ; [.1D7F.0020.0008] # LATIN CAPITAL LETTER H WITH CIRCUMFLEX -0048 0302 ; [.1D7F.0020.0008] # LATIN CAPITAL LETTER H WITH CIRCUMFLEX -0135 ; [.1DB3.0020.0002] # LATIN SMALL LETTER J WITH CIRCUMFLEX -006A 0302 ; [.1DB3.0020.0002] # LATIN SMALL LETTER J WITH CIRCUMFLEX -0134 ; [.1DB3.0020.0008] # LATIN CAPITAL LETTER J WITH CIRCUMFLEX -004A 0302 ; [.1DB3.0020.0008] # LATIN CAPITAL LETTER J WITH CIRCUMFLEX -015D ; [.1ED8.0020.0002] # LATIN SMALL LETTER S WITH CIRCUMFLEX -0073 0302 ; [.1ED8.0020.0002] # LATIN SMALL LETTER S WITH CIRCUMFLEX -015C ; [.1ED8.0020.0008] # LATIN CAPITAL LETTER S WITH CIRCUMFLEX -0053 0302 ; [.1ED8.0020.0008] # LATIN CAPITAL LETTER S WITH CIRCUMFLEX -016D ; [.1F1C.0020.0002] # LATIN SMALL LETTER U WITH BREVE -0075 0306 ; [.1F1C.0020.0002] # LATIN SMALL LETTER U WITH BREVE -016C ; [.1F1C.0020.0008] # LATIN CAPITAL LETTER U WITH BREVE -0055 0306 ; [.1F1C.0020.0008] # LATIN CAPITAL LETTER U WITH BREVE + locale_version => 1.31, + entry => <<'ENTRY', # for DUCET v13.0.0 +0109 ; [.1FD7.0020.0002] # LATIN SMALL LETTER C WITH CIRCUMFLEX +0063 0302 ; [.1FD7.0020.0002] # LATIN SMALL LETTER C WITH CIRCUMFLEX +0108 ; [.1FD7.0020.0008] # LATIN CAPITAL LETTER C WITH CIRCUMFLEX +0043 0302 ; [.1FD7.0020.0008] # LATIN CAPITAL LETTER C WITH CIRCUMFLEX +011D ; [.2052.0020.0002] # LATIN SMALL LETTER G WITH CIRCUMFLEX +0067 0302 ; [.2052.0020.0002] # LATIN SMALL LETTER G WITH CIRCUMFLEX +011C ; [.2052.0020.0008] # LATIN CAPITAL LETTER G WITH CIRCUMFLEX +0047 0302 ; [.2052.0020.0008] # LATIN CAPITAL LETTER G WITH CIRCUMFLEX +0125 ; [.2076.0020.0002] # LATIN SMALL LETTER H WITH CIRCUMFLEX +0068 0302 ; [.2076.0020.0002] # LATIN SMALL LETTER H WITH CIRCUMFLEX +0124 ; [.2076.0020.0008] # LATIN CAPITAL LETTER H WITH CIRCUMFLEX +0048 0302 ; [.2076.0020.0008] # LATIN CAPITAL LETTER H WITH CIRCUMFLEX +0135 ; [.20AC.0020.0002] # LATIN SMALL LETTER J WITH CIRCUMFLEX +006A 0302 ; [.20AC.0020.0002] # LATIN SMALL LETTER J WITH CIRCUMFLEX +0134 ; [.20AC.0020.0008] # LATIN CAPITAL LETTER J WITH CIRCUMFLEX +004A 0302 ; [.20AC.0020.0008] # LATIN CAPITAL LETTER J WITH CIRCUMFLEX +015D ; [.21D3.0020.0002] # LATIN SMALL LETTER S WITH CIRCUMFLEX +0073 0302 ; [.21D3.0020.0002] # LATIN SMALL LETTER S WITH CIRCUMFLEX +015C ; [.21D3.0020.0008] # LATIN CAPITAL LETTER S WITH CIRCUMFLEX +0053 0302 ; [.21D3.0020.0008] # LATIN CAPITAL LETTER S WITH CIRCUMFLEX +016D ; [.2218.0020.0002] # LATIN SMALL LETTER U WITH BREVE +0075 0306 ; [.2218.0020.0002] # LATIN SMALL LETTER U WITH BREVE +016C ; [.2218.0020.0008] # LATIN CAPITAL LETTER U WITH BREVE +0055 0306 ; [.2218.0020.0008] # LATIN CAPITAL LETTER U WITH BREVE ENTRY }; diff --git a/gnu/usr.bin/perl/cpan/Unicode-Collate/Collate/Locale/es.pl b/gnu/usr.bin/perl/cpan/Unicode-Collate/Collate/Locale/es.pl index ffa67440ddd..599ff8c25da 100644 --- a/gnu/usr.bin/perl/cpan/Unicode-Collate/Collate/Locale/es.pl +++ b/gnu/usr.bin/perl/cpan/Unicode-Collate/Collate/Locale/es.pl @@ -1,9 +1,9 @@ +{ - locale_version => 1.27, - entry => <<'ENTRY', # for DUCET v10.0.0 -00F1 ; [.1E20.0020.0002] # LATIN SMALL LETTER N WITH TILDE -006E 0303 ; [.1E20.0020.0002] # LATIN SMALL LETTER N WITH TILDE -00D1 ; [.1E20.0020.0008] # LATIN CAPITAL LETTER N WITH TILDE -004E 0303 ; [.1E20.0020.0008] # LATIN CAPITAL LETTER N WITH TILDE + locale_version => 1.31, + entry => <<'ENTRY', # for DUCET v13.0.0 +00F1 ; [.2119.0020.0002] # LATIN SMALL LETTER N WITH TILDE +006E 0303 ; [.2119.0020.0002] # LATIN SMALL LETTER N WITH TILDE +00D1 ; [.2119.0020.0008] # LATIN CAPITAL LETTER N WITH TILDE +004E 0303 ; [.2119.0020.0008] # LATIN CAPITAL LETTER N WITH TILDE ENTRY }; diff --git a/gnu/usr.bin/perl/cpan/Unicode-Collate/Collate/Locale/es_trad.pl b/gnu/usr.bin/perl/cpan/Unicode-Collate/Collate/Locale/es_trad.pl index 351f3b831d0..6753ebda8e7 100644 --- a/gnu/usr.bin/perl/cpan/Unicode-Collate/Collate/Locale/es_trad.pl +++ b/gnu/usr.bin/perl/cpan/Unicode-Collate/Collate/Locale/es_trad.pl @@ -1,15 +1,15 @@ +{ - locale_version => 1.27, - entry => <<'ENTRY', # for DUCET v10.0.0 -0063 0068 ; [.1CE1.0020.0002] # -0043 0068 ; [.1CE1.0020.0007] # -0043 0048 ; [.1CE1.0020.0008] # -006C 006C ; [.1DDE.0020.0002] # -004C 006C ; [.1DDE.0020.0007] # -004C 004C ; [.1DDE.0020.0008] # -00F1 ; [.1E20.0020.0002] # LATIN SMALL LETTER N WITH TILDE -006E 0303 ; [.1E20.0020.0002] # LATIN SMALL LETTER N WITH TILDE -00D1 ; [.1E20.0020.0008] # LATIN CAPITAL LETTER N WITH TILDE -004E 0303 ; [.1E20.0020.0008] # LATIN CAPITAL LETTER N WITH TILDE + locale_version => 1.31, + entry => <<'ENTRY', # for DUCET v13.0.0 +0063 0068 ; [.1FD7.0020.0002] # +0043 0068 ; [.1FD7.0020.0007] # +0043 0048 ; [.1FD7.0020.0008] # +006C 006C ; [.20D7.0020.0002] # +004C 006C ; [.20D7.0020.0007] # +004C 004C ; [.20D7.0020.0008] # +00F1 ; [.2119.0020.0002] # LATIN SMALL LETTER N WITH TILDE +006E 0303 ; [.2119.0020.0002] # LATIN SMALL LETTER N WITH TILDE +00D1 ; [.2119.0020.0008] # LATIN CAPITAL LETTER N WITH TILDE +004E 0303 ; [.2119.0020.0008] # LATIN CAPITAL LETTER N WITH TILDE ENTRY }; diff --git a/gnu/usr.bin/perl/cpan/Unicode-Collate/Collate/Locale/et.pl b/gnu/usr.bin/perl/cpan/Unicode-Collate/Collate/Locale/et.pl index 318c293cbf2..aee11ab6218 100644 --- a/gnu/usr.bin/perl/cpan/Unicode-Collate/Collate/Locale/et.pl +++ b/gnu/usr.bin/perl/cpan/Unicode-Collate/Collate/Locale/et.pl @@ -1,51 +1,51 @@ +{ - locale_version => 1.27, - entry => <<'ENTRY', # for DUCET v10.0.0 -0161 ; [.1EF8.0020.0002] # LATIN SMALL LETTER S WITH CARON -0073 030C ; [.1EF8.0020.0002] # LATIN SMALL LETTER S WITH CARON -0160 ; [.1EF8.0020.0008] # LATIN CAPITAL LETTER S WITH CARON -0053 030C ; [.1EF8.0020.0008] # LATIN CAPITAL LETTER S WITH CARON -007A ; [.1EF9.0020.0002] # LATIN SMALL LETTER Z -005A ; [.1EF9.0020.0008] # LATIN CAPITAL LETTER Z -017E ; [.1EFA.0020.0002] # LATIN SMALL LETTER Z WITH CARON -007A 030C ; [.1EFA.0020.0002] # LATIN SMALL LETTER Z WITH CARON -017D ; [.1EFA.0020.0008] # LATIN CAPITAL LETTER Z WITH CARON -005A 030C ; [.1EFA.0020.0008] # LATIN CAPITAL LETTER Z WITH CARON -00F5 ; [.1F61.0020.0002] # LATIN SMALL LETTER O WITH TILDE -006F 0303 ; [.1F61.0020.0002] # LATIN SMALL LETTER O WITH TILDE -00D5 ; [.1F61.0020.0008] # LATIN CAPITAL LETTER O WITH TILDE -004F 0303 ; [.1F61.0020.0008] # LATIN CAPITAL LETTER O WITH TILDE -1E4D ; [.1F61.0020.0002][.0000.0024.0002] # LATIN SMALL LETTER O WITH TILDE AND ACUTE -1E4C ; [.1F61.0020.0008][.0000.0024.0002] # LATIN CAPITAL LETTER O WITH TILDE AND ACUTE -022D ; [.1F61.0020.0002][.0000.0032.0002] # LATIN SMALL LETTER O WITH TILDE AND MACRON -022C ; [.1F61.0020.0008][.0000.0032.0002] # LATIN CAPITAL LETTER O WITH TILDE AND MACRON -1E4F ; [.1F61.0020.0002][.0000.002B.0002] # LATIN SMALL LETTER O WITH TILDE AND DIAERESIS -1E4E ; [.1F61.0020.0008][.0000.002B.0002] # LATIN CAPITAL LETTER O WITH TILDE AND DIAERESIS -1EE1 ; [.1F61.0020.0002][.0000.003F.0002] # LATIN SMALL LETTER O WITH HORN AND TILDE -1EE0 ; [.1F61.0020.0008][.0000.003F.0002] # LATIN CAPITAL LETTER O WITH HORN AND TILDE -00E4 ; [.1F62.0020.0002] # LATIN SMALL LETTER A WITH DIAERESIS -0061 0308 ; [.1F62.0020.0002] # LATIN SMALL LETTER A WITH DIAERESIS -00C4 ; [.1F62.0020.0008] # LATIN CAPITAL LETTER A WITH DIAERESIS -0041 0308 ; [.1F62.0020.0008] # LATIN CAPITAL LETTER A WITH DIAERESIS -01DF ; [.1F62.0020.0002][.0000.0032.0002] # LATIN SMALL LETTER A WITH DIAERESIS AND MACRON -01DE ; [.1F62.0020.0008][.0000.0032.0002] # LATIN CAPITAL LETTER A WITH DIAERESIS AND MACRON -00F6 ; [.1F63.0020.0002] # LATIN SMALL LETTER O WITH DIAERESIS -006F 0308 ; [.1F63.0020.0002] # LATIN SMALL LETTER O WITH DIAERESIS -00D6 ; [.1F63.0020.0008] # LATIN CAPITAL LETTER O WITH DIAERESIS -004F 0308 ; [.1F63.0020.0008] # LATIN CAPITAL LETTER O WITH DIAERESIS -022B ; [.1F63.0020.0002][.0000.0032.0002] # LATIN SMALL LETTER O WITH DIAERESIS AND MACRON -022A ; [.1F63.0020.0008][.0000.0032.0002] # LATIN CAPITAL LETTER O WITH DIAERESIS AND MACRON -00FC ; [.1F64.0020.0002] # LATIN SMALL LETTER U WITH DIAERESIS -0075 0308 ; [.1F64.0020.0002] # LATIN SMALL LETTER U WITH DIAERESIS -00DC ; [.1F64.0020.0008] # LATIN CAPITAL LETTER U WITH DIAERESIS -0055 0308 ; [.1F64.0020.0008] # LATIN CAPITAL LETTER U WITH DIAERESIS -01DC ; [.1F64.0020.0002][.0000.0025.0002] # LATIN SMALL LETTER U WITH DIAERESIS AND GRAVE -01DB ; [.1F64.0020.0008][.0000.0025.0002] # LATIN CAPITAL LETTER U WITH DIAERESIS AND GRAVE -01D8 ; [.1F64.0020.0002][.0000.0024.0002] # LATIN SMALL LETTER U WITH DIAERESIS AND ACUTE -01D7 ; [.1F64.0020.0008][.0000.0024.0002] # LATIN CAPITAL LETTER U WITH DIAERESIS AND ACUTE -01D6 ; [.1F64.0020.0002][.0000.0032.0002] # LATIN SMALL LETTER U WITH DIAERESIS AND MACRON -01D5 ; [.1F64.0020.0008][.0000.0032.0002] # LATIN CAPITAL LETTER U WITH DIAERESIS AND MACRON -01DA ; [.1F64.0020.0002][.0000.0028.0002] # LATIN SMALL LETTER U WITH DIAERESIS AND CARON -01D9 ; [.1F64.0020.0008][.0000.0028.0002] # LATIN CAPITAL LETTER U WITH DIAERESIS AND CARON + locale_version => 1.31, + entry => <<'ENTRY', # for DUCET v13.0.0 +0161 ; [.21F4.0020.0002] # LATIN SMALL LETTER S WITH CARON +0073 030C ; [.21F4.0020.0002] # LATIN SMALL LETTER S WITH CARON +0160 ; [.21F4.0020.0008] # LATIN CAPITAL LETTER S WITH CARON +0053 030C ; [.21F4.0020.0008] # LATIN CAPITAL LETTER S WITH CARON +007A ; [.21F5.0020.0002] # LATIN SMALL LETTER Z +005A ; [.21F5.0020.0008] # LATIN CAPITAL LETTER Z +017E ; [.21F6.0020.0002] # LATIN SMALL LETTER Z WITH CARON +007A 030C ; [.21F6.0020.0002] # LATIN SMALL LETTER Z WITH CARON +017D ; [.21F6.0020.0008] # LATIN CAPITAL LETTER Z WITH CARON +005A 030C ; [.21F6.0020.0008] # LATIN CAPITAL LETTER Z WITH CARON +00F5 ; [.2260.0020.0002] # LATIN SMALL LETTER O WITH TILDE +006F 0303 ; [.2260.0020.0002] # LATIN SMALL LETTER O WITH TILDE +00D5 ; [.2260.0020.0008] # LATIN CAPITAL LETTER O WITH TILDE +004F 0303 ; [.2260.0020.0008] # LATIN CAPITAL LETTER O WITH TILDE +1E4D ; [.2260.0020.0002][.0000.0024.0002] # LATIN SMALL LETTER O WITH TILDE AND ACUTE +1E4C ; [.2260.0020.0008][.0000.0024.0002] # LATIN CAPITAL LETTER O WITH TILDE AND ACUTE +022D ; [.2260.0020.0002][.0000.0032.0002] # LATIN SMALL LETTER O WITH TILDE AND MACRON +022C ; [.2260.0020.0008][.0000.0032.0002] # LATIN CAPITAL LETTER O WITH TILDE AND MACRON +1E4F ; [.2260.0020.0002][.0000.002B.0002] # LATIN SMALL LETTER O WITH TILDE AND DIAERESIS +1E4E ; [.2260.0020.0008][.0000.002B.0002] # LATIN CAPITAL LETTER O WITH TILDE AND DIAERESIS +1EE1 ; [.2260.0020.0002][.0000.003F.0002] # LATIN SMALL LETTER O WITH HORN AND TILDE +1EE0 ; [.2260.0020.0008][.0000.003F.0002] # LATIN CAPITAL LETTER O WITH HORN AND TILDE +00E4 ; [.2261.0020.0002] # LATIN SMALL LETTER A WITH DIAERESIS +0061 0308 ; [.2261.0020.0002] # LATIN SMALL LETTER A WITH DIAERESIS +00C4 ; [.2261.0020.0008] # LATIN CAPITAL LETTER A WITH DIAERESIS +0041 0308 ; [.2261.0020.0008] # LATIN CAPITAL LETTER A WITH DIAERESIS +01DF ; [.2261.0020.0002][.0000.0032.0002] # LATIN SMALL LETTER A WITH DIAERESIS AND MACRON +01DE ; [.2261.0020.0008][.0000.0032.0002] # LATIN CAPITAL LETTER A WITH DIAERESIS AND MACRON +00F6 ; [.2262.0020.0002] # LATIN SMALL LETTER O WITH DIAERESIS +006F 0308 ; [.2262.0020.0002] # LATIN SMALL LETTER O WITH DIAERESIS +00D6 ; [.2262.0020.0008] # LATIN CAPITAL LETTER O WITH DIAERESIS +004F 0308 ; [.2262.0020.0008] # LATIN CAPITAL LETTER O WITH DIAERESIS +022B ; [.2262.0020.0002][.0000.0032.0002] # LATIN SMALL LETTER O WITH DIAERESIS AND MACRON +022A ; [.2262.0020.0008][.0000.0032.0002] # LATIN CAPITAL LETTER O WITH DIAERESIS AND MACRON +00FC ; [.2263.0020.0002] # LATIN SMALL LETTER U WITH DIAERESIS +0075 0308 ; [.2263.0020.0002] # LATIN SMALL LETTER U WITH DIAERESIS +00DC ; [.2263.0020.0008] # LATIN CAPITAL LETTER U WITH DIAERESIS +0055 0308 ; [.2263.0020.0008] # LATIN CAPITAL LETTER U WITH DIAERESIS +01DC ; [.2263.0020.0002][.0000.0025.0002] # LATIN SMALL LETTER U WITH DIAERESIS AND GRAVE +01DB ; [.2263.0020.0008][.0000.0025.0002] # LATIN CAPITAL LETTER U WITH DIAERESIS AND GRAVE +01D8 ; [.2263.0020.0002][.0000.0024.0002] # LATIN SMALL LETTER U WITH DIAERESIS AND ACUTE +01D7 ; [.2263.0020.0008][.0000.0024.0002] # LATIN CAPITAL LETTER U WITH DIAERESIS AND ACUTE +01D6 ; [.2263.0020.0002][.0000.0032.0002] # LATIN SMALL LETTER U WITH DIAERESIS AND MACRON +01D5 ; [.2263.0020.0008][.0000.0032.0002] # LATIN CAPITAL LETTER U WITH DIAERESIS AND MACRON +01DA ; [.2263.0020.0002][.0000.0028.0002] # LATIN SMALL LETTER U WITH DIAERESIS AND CARON +01D9 ; [.2263.0020.0008][.0000.0028.0002] # LATIN CAPITAL LETTER U WITH DIAERESIS AND CARON ENTRY }; diff --git a/gnu/usr.bin/perl/cpan/Unicode-Collate/Collate/Locale/fa.pl b/gnu/usr.bin/perl/cpan/Unicode-Collate/Collate/Locale/fa.pl index ab800610191..59db813b61f 100644 --- a/gnu/usr.bin/perl/cpan/Unicode-Collate/Collate/Locale/fa.pl +++ b/gnu/usr.bin/perl/cpan/Unicode-Collate/Collate/Locale/fa.pl @@ -1,51 +1,51 @@ +{ - locale_version => 1.27, - entry => <<'ENTRY', # for DUCET v10.0.0 + locale_version => 1.31, + entry => <<'ENTRY', # for DUCET v13.0.0 0650 ; [.0000.0077.0002] # ARABIC KASRA 064B ; [.0000.007B.0002] # ARABIC FATHATAN 064D ; [.0000.007C.0002] # ARABIC KASRATAN 064C ; [.0000.007D.0002] # ARABIC DAMMATAN -0622 ; [.2370.0020.0002][.FFF1.0000.0000] # ARABIC LETTER ALEF WITH MADDA ABOVE -0627 0653 ; [.2370.0020.0002][.FFF1.0000.0000] # ARABIC LETTER ALEF WITH MADDA ABOVE -08AC ; [.2370.0020.0002][.FFF0.0000.0000] # ARABIC LETTER ROHINGYA YEH -0671 ; [.2371.0021.0002] # ARABIC LETTER ALEF WASLA -0621 ; [.2372.0020.0002][.FFF0.0000.0000] # ARABIC LETTER HAMZA -0623 ; [.2372.0021.0002][.FFF0.0000.0000] # ARABIC LETTER ALEF WITH HAMZA ABOVE -0627 0654 ; [.2372.0021.0002][.FFF0.0000.0000] # ARABIC LETTER ALEF WITH HAMZA ABOVE -0672 ; [.2372.0022.0002][.FFF0.0000.0000] # ARABIC LETTER ALEF WITH WAVY HAMZA ABOVE -0625 ; [.2372.0023.0002][.FFF0.0000.0000] # ARABIC LETTER ALEF WITH HAMZA BELOW -0627 0655 ; [.2372.0023.0002][.FFF0.0000.0000] # ARABIC LETTER ALEF WITH HAMZA BELOW -0673 ; [.2372.0024.0002][.FFF0.0000.0000] # ARABIC LETTER ALEF WITH WAVY HAMZA BELOW -0624 ; [.2372.0025.0002][.FFF0.0000.0000] # ARABIC LETTER WAW WITH HAMZA ABOVE -0648 0654 ; [.2372.0025.0002][.FFF0.0000.0000] # ARABIC LETTER WAW WITH HAMZA ABOVE -06CC 0654 ; [.2372.0026.0002][.FFF0.0000.0000] # -0649 0654 ; [.2372.0026.0003][.FFF0.0000.0000] # -0626 ; [.2372.0026.0004][.FFF0.0000.0000] # ARABIC LETTER YEH WITH HAMZA ABOVE -064A 0654 ; [.2372.0026.0004][.FFF0.0000.0000] # ARABIC LETTER YEH WITH HAMZA ABOVE -066E ; [.2372.0020.0002][.FFF1.0000.0000] # ARABIC LETTER DOTLESS BEH -06AA ; [.23EE.0021.0002] # ARABIC LETTER SWASH KAF -06AB ; [.23EE.0022.0002] # ARABIC LETTER KAF WITH RING -0643 ; [.23EE.0023.0002] # ARABIC LETTER KAF -06AC ; [.23EE.0024.0002] # ARABIC LETTER KAF WITH DOT ABOVE -06AD ; [.23EE.0025.0002] # ARABIC LETTER NG -06AE ; [.23EE.0026.0002] # ARABIC LETTER KAF WITH THREE DOTS BELOW -0647 ; [.2427.0020.0002][.FFF1.0000.0000] # ARABIC LETTER HEH -06D5 ; [.2427.0021.0002][.FFF1.0000.0000] # ARABIC LETTER AE -06C1 ; [.2427.0022.0002][.FFF1.0000.0000] # ARABIC LETTER HEH GOAL -06C2 ; [.2427.0022.0002][.FFF1.0000.0000][.0000.0083.0002] # ARABIC LETTER HEH GOAL WITH HAMZA ABOVE -0629 ; [.2427.0023.0002][.FFF1.0000.0000] # ARABIC LETTER TEH MARBUTA -06C3 ; [.2427.0024.0002][.FFF1.0000.0000] # ARABIC LETTER TEH MARBUTA GOAL -06C0 ; [.2427.0025.0002][.FFF1.0000.0000] # ARABIC LETTER HEH WITH YEH ABOVE -06D5 0654 ; [.2427.0025.0002][.FFF1.0000.0000] # ARABIC LETTER HEH WITH YEH ABOVE -06BE ; [.2427.0026.0002][.FFF1.0000.0000] # ARABIC LETTER HEH DOACHASHMEE -06CF ; [.2427.0020.0002][.FFF0.0000.0000] # ARABIC LETTER WAW WITH DOT ABOVE -0649 ; [.242D.0021.0002] # ARABIC LETTER ALEF MAKSURA -06D2 ; [.242D.0022.0002] # ARABIC LETTER YEH BARREE -06D3 ; [.242D.0022.0002][.0000.0083.0002] # ARABIC LETTER YEH BARREE WITH HAMZA ABOVE -064A ; [.242D.0023.0002] # ARABIC LETTER YEH -06D0 ; [.242D.0024.0002] # ARABIC LETTER E -06D1 ; [.242D.0025.0002] # ARABIC LETTER YEH WITH THREE DOTS BELOW -06CD ; [.242D.0026.0002] # ARABIC LETTER YEH WITH TAIL -06CE ; [.242D.0027.0002] # ARABIC LETTER YEH WITH SMALL V +0622 ; [.2671.0020.0002][.FFF1.0000.0000] # ARABIC LETTER ALEF WITH MADDA ABOVE +0627 0653 ; [.2671.0020.0002][.FFF1.0000.0000] # ARABIC LETTER ALEF WITH MADDA ABOVE +08AC ; [.2671.0020.0002][.FFF0.0000.0000] # ARABIC LETTER ROHINGYA YEH +0671 ; [.2672.0021.0002] # ARABIC LETTER ALEF WASLA +0621 ; [.2673.0020.0002][.FFF0.0000.0000] # ARABIC LETTER HAMZA +0623 ; [.2673.0021.0002][.FFF0.0000.0000] # ARABIC LETTER ALEF WITH HAMZA ABOVE +0627 0654 ; [.2673.0021.0002][.FFF0.0000.0000] # ARABIC LETTER ALEF WITH HAMZA ABOVE +0672 ; [.2673.0022.0002][.FFF0.0000.0000] # ARABIC LETTER ALEF WITH WAVY HAMZA ABOVE +0625 ; [.2673.0023.0002][.FFF0.0000.0000] # ARABIC LETTER ALEF WITH HAMZA BELOW +0627 0655 ; [.2673.0023.0002][.FFF0.0000.0000] # ARABIC LETTER ALEF WITH HAMZA BELOW +0673 ; [.2673.0024.0002][.FFF0.0000.0000] # ARABIC LETTER ALEF WITH WAVY HAMZA BELOW +0624 ; [.2673.0025.0002][.FFF0.0000.0000] # ARABIC LETTER WAW WITH HAMZA ABOVE +0648 0654 ; [.2673.0025.0002][.FFF0.0000.0000] # ARABIC LETTER WAW WITH HAMZA ABOVE +06CC 0654 ; [.2673.0026.0002][.FFF0.0000.0000] # +0649 0654 ; [.2673.0026.0003][.FFF0.0000.0000] # +0626 ; [.2673.0026.0004][.FFF0.0000.0000] # ARABIC LETTER YEH WITH HAMZA ABOVE +064A 0654 ; [.2673.0026.0004][.FFF0.0000.0000] # ARABIC LETTER YEH WITH HAMZA ABOVE +066E ; [.2673.0020.0002][.FFF1.0000.0000] # ARABIC LETTER DOTLESS BEH +06AA ; [.26F7.0021.0002] # ARABIC LETTER SWASH KAF +06AB ; [.26F7.0022.0002] # ARABIC LETTER KAF WITH RING +0643 ; [.26F7.0023.0002] # ARABIC LETTER KAF +06AC ; [.26F7.0024.0002] # ARABIC LETTER KAF WITH DOT ABOVE +06AD ; [.26F7.0025.0002] # ARABIC LETTER NG +06AE ; [.26F7.0026.0002] # ARABIC LETTER KAF WITH THREE DOTS BELOW +0647 ; [.2732.0020.0002][.FFF1.0000.0000] # ARABIC LETTER HEH +06D5 ; [.2732.0021.0002][.FFF1.0000.0000] # ARABIC LETTER AE +06C1 ; [.2732.0022.0002][.FFF1.0000.0000] # ARABIC LETTER HEH GOAL +06C2 ; [.2732.0022.0002][.FFF1.0000.0000][.0000.0083.0002] # ARABIC LETTER HEH GOAL WITH HAMZA ABOVE +0629 ; [.2732.0023.0002][.FFF1.0000.0000] # ARABIC LETTER TEH MARBUTA +06C3 ; [.2732.0024.0002][.FFF1.0000.0000] # ARABIC LETTER TEH MARBUTA GOAL +06C0 ; [.2732.0025.0002][.FFF1.0000.0000] # ARABIC LETTER HEH WITH YEH ABOVE +06D5 0654 ; [.2732.0025.0002][.FFF1.0000.0000] # ARABIC LETTER HEH WITH YEH ABOVE +06BE ; [.2732.0026.0002][.FFF1.0000.0000] # ARABIC LETTER HEH DOACHASHMEE +06CF ; [.2732.0020.0002][.FFF0.0000.0000] # ARABIC LETTER WAW WITH DOT ABOVE +0649 ; [.2738.0021.0002] # ARABIC LETTER ALEF MAKSURA +06D2 ; [.2738.0022.0002] # ARABIC LETTER YEH BARREE +06D3 ; [.2738.0022.0002][.0000.0083.0002] # ARABIC LETTER YEH BARREE WITH HAMZA ABOVE +064A ; [.2738.0023.0002] # ARABIC LETTER YEH +06D0 ; [.2738.0024.0002] # ARABIC LETTER E +06D1 ; [.2738.0025.0002] # ARABIC LETTER YEH WITH THREE DOTS BELOW +06CD ; [.2738.0026.0002] # ARABIC LETTER YEH WITH TAIL +06CE ; [.2738.0027.0002] # ARABIC LETTER YEH WITH SMALL V ENTRY }; diff --git a/gnu/usr.bin/perl/cpan/Unicode-Collate/Collate/Locale/fi.pl b/gnu/usr.bin/perl/cpan/Unicode-Collate/Collate/Locale/fi.pl index 49be79eaf33..301f63c55ce 100644 --- a/gnu/usr.bin/perl/cpan/Unicode-Collate/Collate/Locale/fi.pl +++ b/gnu/usr.bin/perl/cpan/Unicode-Collate/Collate/Locale/fi.pl @@ -1,65 +1,65 @@ +{ - locale_version => 1.27, + locale_version => 1.31, # in cldr test/fi.xml why x{110}x < xdx though xd < x{110} ? - entry => <<'ENTRY', # for DUCET v10.0.0 -0111 ; [.1CF5.0021.0002][.0000.0039.0002] # LATIN SMALL LETTER D WITH STROKE -0110 ; [.1CF5.0021.0008][.0000.0039.0002] # LATIN CAPITAL LETTER D WITH STROKE -01E5 ; [.1D5A.0021.0002][.0000.0039.0002] # LATIN SMALL LETTER G WITH STROKE -01E4 ; [.1D5A.0021.0008][.0000.0039.0002] # LATIN CAPITAL LETTER G WITH STROKE -014B ; [.1E1F.0021.0002][.0000.0039.0002] # LATIN SMALL LETTER ENG -014A ; [.1E1F.0021.0008][.0000.0039.0002] # LATIN CAPITAL LETTER ENG -0167 ; [.1EFB.0021.0002][.0000.0039.0002] # LATIN SMALL LETTER T WITH STROKE -0166 ; [.1EFB.0021.0008][.0000.0039.0002] # LATIN CAPITAL LETTER T WITH STROKE -0077 ; [.1F49.0021.0002] # LATIN SMALL LETTER W -0057 ; [.1F49.0021.0008] # LATIN CAPITAL LETTER W -00FC ; [.1F71.0021.0002] # LATIN SMALL LETTER U WITH DIAERESIS -0075 0308 ; [.1F71.0021.0002] # LATIN SMALL LETTER U WITH DIAERESIS -00DC ; [.1F71.0021.0008] # LATIN CAPITAL LETTER U WITH DIAERESIS -0055 0308 ; [.1F71.0021.0008] # LATIN CAPITAL LETTER U WITH DIAERESIS -01DC ; [.1F71.0021.0002][.0000.0025.0002] # LATIN SMALL LETTER U WITH DIAERESIS AND GRAVE -01DB ; [.1F71.0021.0008][.0000.0025.0002] # LATIN CAPITAL LETTER U WITH DIAERESIS AND GRAVE -01D8 ; [.1F71.0021.0002][.0000.0024.0002] # LATIN SMALL LETTER U WITH DIAERESIS AND ACUTE -01D7 ; [.1F71.0021.0008][.0000.0024.0002] # LATIN CAPITAL LETTER U WITH DIAERESIS AND ACUTE -01D6 ; [.1F71.0021.0002][.0000.0032.0002] # LATIN SMALL LETTER U WITH DIAERESIS AND MACRON -01D5 ; [.1F71.0021.0008][.0000.0032.0002] # LATIN CAPITAL LETTER U WITH DIAERESIS AND MACRON -01DA ; [.1F71.0021.0002][.0000.0028.0002] # LATIN SMALL LETTER U WITH DIAERESIS AND CARON -01D9 ; [.1F71.0021.0008][.0000.0028.0002] # LATIN CAPITAL LETTER U WITH DIAERESIS AND CARON -0292 ; [.1F87.0021.0002][.0000.0039.0002] # LATIN SMALL LETTER EZH -01B7 ; [.1F87.0021.0008][.0000.0039.0002] # LATIN CAPITAL LETTER EZH -01EF ; [.1F87.0021.0002][.0000.0039.0002][.0000.0028.0002] # LATIN SMALL LETTER EZH WITH CARON -01EE ; [.1F87.0021.0008][.0000.0039.0002][.0000.0028.0002] # LATIN CAPITAL LETTER EZH WITH CARON -00E5 ; [.1FFC.0020.0002] # LATIN SMALL LETTER A WITH RING ABOVE -0061 030A ; [.1FFC.0020.0002] # LATIN SMALL LETTER A WITH RING ABOVE -00C5 ; [.1FFC.0020.0008] # LATIN CAPITAL LETTER A WITH RING ABOVE -0041 030A ; [.1FFC.0020.0008] # LATIN CAPITAL LETTER A WITH RING ABOVE -212B ; [.1FFC.0020.0008] # ANGSTROM SIGN -01FB ; [.1FFC.0020.0002][.0000.0024.0002] # LATIN SMALL LETTER A WITH RING ABOVE AND ACUTE -01FA ; [.1FFC.0020.0008][.0000.0024.0002] # LATIN CAPITAL LETTER A WITH RING ABOVE AND ACUTE -00E4 ; [.1FFD.0020.0002] # LATIN SMALL LETTER A WITH DIAERESIS -0061 0308 ; [.1FFD.0020.0002] # LATIN SMALL LETTER A WITH DIAERESIS -00C4 ; [.1FFD.0020.0008] # LATIN CAPITAL LETTER A WITH DIAERESIS -0041 0308 ; [.1FFD.0020.0008] # LATIN CAPITAL LETTER A WITH DIAERESIS -01DF ; [.1FFD.0020.0002][.0000.0032.0002] # LATIN SMALL LETTER A WITH DIAERESIS AND MACRON -01DE ; [.1FFD.0020.0008][.0000.0032.0002] # LATIN CAPITAL LETTER A WITH DIAERESIS AND MACRON -00E6 ; [.1FFD.0021.0002] # LATIN SMALL LETTER AE -1DD4 ; [.1FFD.0021.0002] # COMBINING LATIN SMALL LETTER AE -00C6 ; [.1FFD.0021.0008] # LATIN CAPITAL LETTER AE -1D2D ; [.1FFD.0021.0014] # MODIFIER LETTER CAPITAL AE -01FD ; [.1FFD.0021.0002][.0000.0024.0002] # LATIN SMALL LETTER AE WITH ACUTE -01FC ; [.1FFD.0021.0008][.0000.0024.0002] # LATIN CAPITAL LETTER AE WITH ACUTE -01E3 ; [.1FFD.0021.0002][.0000.0032.0002] # LATIN SMALL LETTER AE WITH MACRON -01E2 ; [.1FFD.0021.0008][.0000.0032.0002] # LATIN CAPITAL LETTER AE WITH MACRON -00F6 ; [.1FFE.0020.0002] # LATIN SMALL LETTER O WITH DIAERESIS -006F 0308 ; [.1FFE.0020.0002] # LATIN SMALL LETTER O WITH DIAERESIS -00D6 ; [.1FFE.0020.0008] # LATIN CAPITAL LETTER O WITH DIAERESIS -004F 0308 ; [.1FFE.0020.0008] # LATIN CAPITAL LETTER O WITH DIAERESIS -022B ; [.1FFE.0020.0002][.0000.0032.0002] # LATIN SMALL LETTER O WITH DIAERESIS AND MACRON -022A ; [.1FFE.0020.0008][.0000.0032.0002] # LATIN CAPITAL LETTER O WITH DIAERESIS AND MACRON -00F8 ; [.1FFE.0021.0002] # LATIN SMALL LETTER O WITH STROKE -006F 0338 ; [.1FFE.0021.0002] # LATIN SMALL LETTER O WITH STROKE -00D8 ; [.1FFE.0021.0008] # LATIN CAPITAL LETTER O WITH STROKE -004F 0338 ; [.1FFE.0021.0008] # LATIN CAPITAL LETTER O WITH STROKE -01FF ; [.1FFE.0021.0002][.0000.0024.0002] # LATIN SMALL LETTER O WITH STROKE AND ACUTE -01FE ; [.1FFE.0021.0008][.0000.0024.0002] # LATIN CAPITAL LETTER O WITH STROKE AND ACUTE + entry => <<'ENTRY', # for DUCET v13.0.0 +0111 ; [.1FEB.0021.0002][.0000.0039.0002] # LATIN SMALL LETTER D WITH STROKE +0110 ; [.1FEB.0021.0008][.0000.0039.0002] # LATIN CAPITAL LETTER D WITH STROKE +01E5 ; [.2051.0021.0002][.0000.0039.0002] # LATIN SMALL LETTER G WITH STROKE +01E4 ; [.2051.0021.0008][.0000.0039.0002] # LATIN CAPITAL LETTER G WITH STROKE +014B ; [.2118.0021.0002][.0000.0039.0002] # LATIN SMALL LETTER ENG +014A ; [.2118.0021.0008][.0000.0039.0002] # LATIN CAPITAL LETTER ENG +0167 ; [.21F7.0021.0002][.0000.0039.0002] # LATIN SMALL LETTER T WITH STROKE +0166 ; [.21F7.0021.0008][.0000.0039.0002] # LATIN CAPITAL LETTER T WITH STROKE +0077 ; [.2247.0021.0002] # LATIN SMALL LETTER W +0057 ; [.2247.0021.0008] # LATIN CAPITAL LETTER W +00FC ; [.2270.0021.0002] # LATIN SMALL LETTER U WITH DIAERESIS +0075 0308 ; [.2270.0021.0002] # LATIN SMALL LETTER U WITH DIAERESIS +00DC ; [.2270.0021.0008] # LATIN CAPITAL LETTER U WITH DIAERESIS +0055 0308 ; [.2270.0021.0008] # LATIN CAPITAL LETTER U WITH DIAERESIS +01DC ; [.2270.0021.0002][.0000.0025.0002] # LATIN SMALL LETTER U WITH DIAERESIS AND GRAVE +01DB ; [.2270.0021.0008][.0000.0025.0002] # LATIN CAPITAL LETTER U WITH DIAERESIS AND GRAVE +01D8 ; [.2270.0021.0002][.0000.0024.0002] # LATIN SMALL LETTER U WITH DIAERESIS AND ACUTE +01D7 ; [.2270.0021.0008][.0000.0024.0002] # LATIN CAPITAL LETTER U WITH DIAERESIS AND ACUTE +01D6 ; [.2270.0021.0002][.0000.0032.0002] # LATIN SMALL LETTER U WITH DIAERESIS AND MACRON +01D5 ; [.2270.0021.0008][.0000.0032.0002] # LATIN CAPITAL LETTER U WITH DIAERESIS AND MACRON +01DA ; [.2270.0021.0002][.0000.0028.0002] # LATIN SMALL LETTER U WITH DIAERESIS AND CARON +01D9 ; [.2270.0021.0008][.0000.0028.0002] # LATIN CAPITAL LETTER U WITH DIAERESIS AND CARON +0292 ; [.2286.0021.0002][.0000.0039.0002] # LATIN SMALL LETTER EZH +01B7 ; [.2286.0021.0008][.0000.0039.0002] # LATIN CAPITAL LETTER EZH +01EF ; [.2286.0021.0002][.0000.0039.0002][.0000.0028.0002] # LATIN SMALL LETTER EZH WITH CARON +01EE ; [.2286.0021.0008][.0000.0039.0002][.0000.0028.0002] # LATIN CAPITAL LETTER EZH WITH CARON +00E5 ; [.22FB.0020.0002] # LATIN SMALL LETTER A WITH RING ABOVE +0061 030A ; [.22FB.0020.0002] # LATIN SMALL LETTER A WITH RING ABOVE +00C5 ; [.22FB.0020.0008] # LATIN CAPITAL LETTER A WITH RING ABOVE +0041 030A ; [.22FB.0020.0008] # LATIN CAPITAL LETTER A WITH RING ABOVE +212B ; [.22FB.0020.0008] # ANGSTROM SIGN +01FB ; [.22FB.0020.0002][.0000.0024.0002] # LATIN SMALL LETTER A WITH RING ABOVE AND ACUTE +01FA ; [.22FB.0020.0008][.0000.0024.0002] # LATIN CAPITAL LETTER A WITH RING ABOVE AND ACUTE +00E4 ; [.22FC.0020.0002] # LATIN SMALL LETTER A WITH DIAERESIS +0061 0308 ; [.22FC.0020.0002] # LATIN SMALL LETTER A WITH DIAERESIS +00C4 ; [.22FC.0020.0008] # LATIN CAPITAL LETTER A WITH DIAERESIS +0041 0308 ; [.22FC.0020.0008] # LATIN CAPITAL LETTER A WITH DIAERESIS +01DF ; [.22FC.0020.0002][.0000.0032.0002] # LATIN SMALL LETTER A WITH DIAERESIS AND MACRON +01DE ; [.22FC.0020.0008][.0000.0032.0002] # LATIN CAPITAL LETTER A WITH DIAERESIS AND MACRON +00E6 ; [.22FC.0021.0002] # LATIN SMALL LETTER AE +1DD4 ; [.22FC.0021.0002] # COMBINING LATIN SMALL LETTER AE +00C6 ; [.22FC.0021.0008] # LATIN CAPITAL LETTER AE +1D2D ; [.22FC.0021.0014] # MODIFIER LETTER CAPITAL AE +01FD ; [.22FC.0021.0002][.0000.0024.0002] # LATIN SMALL LETTER AE WITH ACUTE +01FC ; [.22FC.0021.0008][.0000.0024.0002] # LATIN CAPITAL LETTER AE WITH ACUTE +01E3 ; [.22FC.0021.0002][.0000.0032.0002] # LATIN SMALL LETTER AE WITH MACRON +01E2 ; [.22FC.0021.0008][.0000.0032.0002] # LATIN CAPITAL LETTER AE WITH MACRON +00F6 ; [.22FD.0020.0002] # LATIN SMALL LETTER O WITH DIAERESIS +006F 0308 ; [.22FD.0020.0002] # LATIN SMALL LETTER O WITH DIAERESIS +00D6 ; [.22FD.0020.0008] # LATIN CAPITAL LETTER O WITH DIAERESIS +004F 0308 ; [.22FD.0020.0008] # LATIN CAPITAL LETTER O WITH DIAERESIS +022B ; [.22FD.0020.0002][.0000.0032.0002] # LATIN SMALL LETTER O WITH DIAERESIS AND MACRON +022A ; [.22FD.0020.0008][.0000.0032.0002] # LATIN CAPITAL LETTER O WITH DIAERESIS AND MACRON +00F8 ; [.22FD.0021.0002] # LATIN SMALL LETTER O WITH STROKE +006F 0338 ; [.22FD.0021.0002] # LATIN SMALL LETTER O WITH STROKE +00D8 ; [.22FD.0021.0008] # LATIN CAPITAL LETTER O WITH STROKE +004F 0338 ; [.22FD.0021.0008] # LATIN CAPITAL LETTER O WITH STROKE +01FF ; [.22FD.0021.0002][.0000.0024.0002] # LATIN SMALL LETTER O WITH STROKE AND ACUTE +01FE ; [.22FD.0021.0008][.0000.0024.0002] # LATIN CAPITAL LETTER O WITH STROKE AND ACUTE ENTRY }; diff --git a/gnu/usr.bin/perl/cpan/Unicode-Collate/Collate/Locale/fi_phone.pl b/gnu/usr.bin/perl/cpan/Unicode-Collate/Collate/Locale/fi_phone.pl index d91a71a7f1e..3b15ff33a91 100644 --- a/gnu/usr.bin/perl/cpan/Unicode-Collate/Collate/Locale/fi_phone.pl +++ b/gnu/usr.bin/perl/cpan/Unicode-Collate/Collate/Locale/fi_phone.pl @@ -1,63 +1,63 @@ +{ - locale_version => 1.27, + locale_version => 1.31, # in cldr test/fi.xml why x{110}x < xdx though xd < x{110} ? - entry => <<'ENTRY', # for DUCET v10.0.0 -0111 ; [.1CF5.0021.0002][.0000.0039.0002] # LATIN SMALL LETTER D WITH STROKE -0110 ; [.1CF5.0021.0008][.0000.0039.0002] # LATIN CAPITAL LETTER D WITH STROKE -01E5 ; [.1D5A.0021.0002][.0000.0039.0002] # LATIN SMALL LETTER G WITH STROKE -01E4 ; [.1D5A.0021.0008][.0000.0039.0002] # LATIN CAPITAL LETTER G WITH STROKE -014B ; [.1E1F.0021.0002][.0000.0039.0002] # LATIN SMALL LETTER ENG -014A ; [.1E1F.0021.0008][.0000.0039.0002] # LATIN CAPITAL LETTER ENG -0167 ; [.1EFB.0021.0002][.0000.0039.0002] # LATIN SMALL LETTER T WITH STROKE -0166 ; [.1EFB.0021.0008][.0000.0039.0002] # LATIN CAPITAL LETTER T WITH STROKE -00FC ; [.1F71.0021.0002] # LATIN SMALL LETTER U WITH DIAERESIS -0075 0308 ; [.1F71.0021.0002] # LATIN SMALL LETTER U WITH DIAERESIS -00DC ; [.1F71.0021.0008] # LATIN CAPITAL LETTER U WITH DIAERESIS -0055 0308 ; [.1F71.0021.0008] # LATIN CAPITAL LETTER U WITH DIAERESIS -01DC ; [.1F71.0021.0002][.0000.0025.0002] # LATIN SMALL LETTER U WITH DIAERESIS AND GRAVE -01DB ; [.1F71.0021.0008][.0000.0025.0002] # LATIN CAPITAL LETTER U WITH DIAERESIS AND GRAVE -01D8 ; [.1F71.0021.0002][.0000.0024.0002] # LATIN SMALL LETTER U WITH DIAERESIS AND ACUTE -01D7 ; [.1F71.0021.0008][.0000.0024.0002] # LATIN CAPITAL LETTER U WITH DIAERESIS AND ACUTE -01D6 ; [.1F71.0021.0002][.0000.0032.0002] # LATIN SMALL LETTER U WITH DIAERESIS AND MACRON -01D5 ; [.1F71.0021.0008][.0000.0032.0002] # LATIN CAPITAL LETTER U WITH DIAERESIS AND MACRON -01DA ; [.1F71.0021.0002][.0000.0028.0002] # LATIN SMALL LETTER U WITH DIAERESIS AND CARON -01D9 ; [.1F71.0021.0008][.0000.0028.0002] # LATIN CAPITAL LETTER U WITH DIAERESIS AND CARON -0292 ; [.1F87.0021.0002][.0000.0039.0002] # LATIN SMALL LETTER EZH -01B7 ; [.1F87.0021.0008][.0000.0039.0002] # LATIN CAPITAL LETTER EZH -01EF ; [.1F87.0021.0002][.0000.0039.0002][.0000.0028.0002] # LATIN SMALL LETTER EZH WITH CARON -01EE ; [.1F87.0021.0008][.0000.0039.0002][.0000.0028.0002] # LATIN CAPITAL LETTER EZH WITH CARON -00E5 ; [.1FFC.0020.0002] # LATIN SMALL LETTER A WITH RING ABOVE -0061 030A ; [.1FFC.0020.0002] # LATIN SMALL LETTER A WITH RING ABOVE -00C5 ; [.1FFC.0020.0008] # LATIN CAPITAL LETTER A WITH RING ABOVE -0041 030A ; [.1FFC.0020.0008] # LATIN CAPITAL LETTER A WITH RING ABOVE -212B ; [.1FFC.0020.0008] # ANGSTROM SIGN -01FB ; [.1FFC.0020.0002][.0000.0024.0002] # LATIN SMALL LETTER A WITH RING ABOVE AND ACUTE -01FA ; [.1FFC.0020.0008][.0000.0024.0002] # LATIN CAPITAL LETTER A WITH RING ABOVE AND ACUTE -00E4 ; [.1FFD.0020.0002] # LATIN SMALL LETTER A WITH DIAERESIS -0061 0308 ; [.1FFD.0020.0002] # LATIN SMALL LETTER A WITH DIAERESIS -00C4 ; [.1FFD.0020.0008] # LATIN CAPITAL LETTER A WITH DIAERESIS -0041 0308 ; [.1FFD.0020.0008] # LATIN CAPITAL LETTER A WITH DIAERESIS -01DF ; [.1FFD.0020.0002][.0000.0032.0002] # LATIN SMALL LETTER A WITH DIAERESIS AND MACRON -01DE ; [.1FFD.0020.0008][.0000.0032.0002] # LATIN CAPITAL LETTER A WITH DIAERESIS AND MACRON -00E6 ; [.1FFD.0021.0002] # LATIN SMALL LETTER AE -1DD4 ; [.1FFD.0021.0002] # COMBINING LATIN SMALL LETTER AE -00C6 ; [.1FFD.0021.0008] # LATIN CAPITAL LETTER AE -1D2D ; [.1FFD.0021.0014] # MODIFIER LETTER CAPITAL AE -01FD ; [.1FFD.0021.0002][.0000.0024.0002] # LATIN SMALL LETTER AE WITH ACUTE -01FC ; [.1FFD.0021.0008][.0000.0024.0002] # LATIN CAPITAL LETTER AE WITH ACUTE -01E3 ; [.1FFD.0021.0002][.0000.0032.0002] # LATIN SMALL LETTER AE WITH MACRON -01E2 ; [.1FFD.0021.0008][.0000.0032.0002] # LATIN CAPITAL LETTER AE WITH MACRON -00F6 ; [.1FFE.0020.0002] # LATIN SMALL LETTER O WITH DIAERESIS -006F 0308 ; [.1FFE.0020.0002] # LATIN SMALL LETTER O WITH DIAERESIS -00D6 ; [.1FFE.0020.0008] # LATIN CAPITAL LETTER O WITH DIAERESIS -004F 0308 ; [.1FFE.0020.0008] # LATIN CAPITAL LETTER O WITH DIAERESIS -022B ; [.1FFE.0020.0002][.0000.0032.0002] # LATIN SMALL LETTER O WITH DIAERESIS AND MACRON -022A ; [.1FFE.0020.0008][.0000.0032.0002] # LATIN CAPITAL LETTER O WITH DIAERESIS AND MACRON -00F8 ; [.1FFE.0021.0002] # LATIN SMALL LETTER O WITH STROKE -006F 0338 ; [.1FFE.0021.0002] # LATIN SMALL LETTER O WITH STROKE -00D8 ; [.1FFE.0021.0008] # LATIN CAPITAL LETTER O WITH STROKE -004F 0338 ; [.1FFE.0021.0008] # LATIN CAPITAL LETTER O WITH STROKE -01FF ; [.1FFE.0021.0002][.0000.0024.0002] # LATIN SMALL LETTER O WITH STROKE AND ACUTE -01FE ; [.1FFE.0021.0008][.0000.0024.0002] # LATIN CAPITAL LETTER O WITH STROKE AND ACUTE + entry => <<'ENTRY', # for DUCET v13.0.0 +0111 ; [.1FEB.0021.0002][.0000.0039.0002] # LATIN SMALL LETTER D WITH STROKE +0110 ; [.1FEB.0021.0008][.0000.0039.0002] # LATIN CAPITAL LETTER D WITH STROKE +01E5 ; [.2051.0021.0002][.0000.0039.0002] # LATIN SMALL LETTER G WITH STROKE +01E4 ; [.2051.0021.0008][.0000.0039.0002] # LATIN CAPITAL LETTER G WITH STROKE +014B ; [.2118.0021.0002][.0000.0039.0002] # LATIN SMALL LETTER ENG +014A ; [.2118.0021.0008][.0000.0039.0002] # LATIN CAPITAL LETTER ENG +0167 ; [.21F7.0021.0002][.0000.0039.0002] # LATIN SMALL LETTER T WITH STROKE +0166 ; [.21F7.0021.0008][.0000.0039.0002] # LATIN CAPITAL LETTER T WITH STROKE +00FC ; [.2270.0021.0002] # LATIN SMALL LETTER U WITH DIAERESIS +0075 0308 ; [.2270.0021.0002] # LATIN SMALL LETTER U WITH DIAERESIS +00DC ; [.2270.0021.0008] # LATIN CAPITAL LETTER U WITH DIAERESIS +0055 0308 ; [.2270.0021.0008] # LATIN CAPITAL LETTER U WITH DIAERESIS +01DC ; [.2270.0021.0002][.0000.0025.0002] # LATIN SMALL LETTER U WITH DIAERESIS AND GRAVE +01DB ; [.2270.0021.0008][.0000.0025.0002] # LATIN CAPITAL LETTER U WITH DIAERESIS AND GRAVE +01D8 ; [.2270.0021.0002][.0000.0024.0002] # LATIN SMALL LETTER U WITH DIAERESIS AND ACUTE +01D7 ; [.2270.0021.0008][.0000.0024.0002] # LATIN CAPITAL LETTER U WITH DIAERESIS AND ACUTE +01D6 ; [.2270.0021.0002][.0000.0032.0002] # LATIN SMALL LETTER U WITH DIAERESIS AND MACRON +01D5 ; [.2270.0021.0008][.0000.0032.0002] # LATIN CAPITAL LETTER U WITH DIAERESIS AND MACRON +01DA ; [.2270.0021.0002][.0000.0028.0002] # LATIN SMALL LETTER U WITH DIAERESIS AND CARON +01D9 ; [.2270.0021.0008][.0000.0028.0002] # LATIN CAPITAL LETTER U WITH DIAERESIS AND CARON +0292 ; [.2286.0021.0002][.0000.0039.0002] # LATIN SMALL LETTER EZH +01B7 ; [.2286.0021.0008][.0000.0039.0002] # LATIN CAPITAL LETTER EZH +01EF ; [.2286.0021.0002][.0000.0039.0002][.0000.0028.0002] # LATIN SMALL LETTER EZH WITH CARON +01EE ; [.2286.0021.0008][.0000.0039.0002][.0000.0028.0002] # LATIN CAPITAL LETTER EZH WITH CARON +00E5 ; [.22FB.0020.0002] # LATIN SMALL LETTER A WITH RING ABOVE +0061 030A ; [.22FB.0020.0002] # LATIN SMALL LETTER A WITH RING ABOVE +00C5 ; [.22FB.0020.0008] # LATIN CAPITAL LETTER A WITH RING ABOVE +0041 030A ; [.22FB.0020.0008] # LATIN CAPITAL LETTER A WITH RING ABOVE +212B ; [.22FB.0020.0008] # ANGSTROM SIGN +01FB ; [.22FB.0020.0002][.0000.0024.0002] # LATIN SMALL LETTER A WITH RING ABOVE AND ACUTE +01FA ; [.22FB.0020.0008][.0000.0024.0002] # LATIN CAPITAL LETTER A WITH RING ABOVE AND ACUTE +00E4 ; [.22FC.0020.0002] # LATIN SMALL LETTER A WITH DIAERESIS +0061 0308 ; [.22FC.0020.0002] # LATIN SMALL LETTER A WITH DIAERESIS +00C4 ; [.22FC.0020.0008] # LATIN CAPITAL LETTER A WITH DIAERESIS +0041 0308 ; [.22FC.0020.0008] # LATIN CAPITAL LETTER A WITH DIAERESIS +01DF ; [.22FC.0020.0002][.0000.0032.0002] # LATIN SMALL LETTER A WITH DIAERESIS AND MACRON +01DE ; [.22FC.0020.0008][.0000.0032.0002] # LATIN CAPITAL LETTER A WITH DIAERESIS AND MACRON +00E6 ; [.22FC.0021.0002] # LATIN SMALL LETTER AE +1DD4 ; [.22FC.0021.0002] # COMBINING LATIN SMALL LETTER AE +00C6 ; [.22FC.0021.0008] # LATIN CAPITAL LETTER AE +1D2D ; [.22FC.0021.0014] # MODIFIER LETTER CAPITAL AE +01FD ; [.22FC.0021.0002][.0000.0024.0002] # LATIN SMALL LETTER AE WITH ACUTE +01FC ; [.22FC.0021.0008][.0000.0024.0002] # LATIN CAPITAL LETTER AE WITH ACUTE +01E3 ; [.22FC.0021.0002][.0000.0032.0002] # LATIN SMALL LETTER AE WITH MACRON +01E2 ; [.22FC.0021.0008][.0000.0032.0002] # LATIN CAPITAL LETTER AE WITH MACRON +00F6 ; [.22FD.0020.0002] # LATIN SMALL LETTER O WITH DIAERESIS +006F 0308 ; [.22FD.0020.0002] # LATIN SMALL LETTER O WITH DIAERESIS +00D6 ; [.22FD.0020.0008] # LATIN CAPITAL LETTER O WITH DIAERESIS +004F 0308 ; [.22FD.0020.0008] # LATIN CAPITAL LETTER O WITH DIAERESIS +022B ; [.22FD.0020.0002][.0000.0032.0002] # LATIN SMALL LETTER O WITH DIAERESIS AND MACRON +022A ; [.22FD.0020.0008][.0000.0032.0002] # LATIN CAPITAL LETTER O WITH DIAERESIS AND MACRON +00F8 ; [.22FD.0021.0002] # LATIN SMALL LETTER O WITH STROKE +006F 0338 ; [.22FD.0021.0002] # LATIN SMALL LETTER O WITH STROKE +00D8 ; [.22FD.0021.0008] # LATIN CAPITAL LETTER O WITH STROKE +004F 0338 ; [.22FD.0021.0008] # LATIN CAPITAL LETTER O WITH STROKE +01FF ; [.22FD.0021.0002][.0000.0024.0002] # LATIN SMALL LETTER O WITH STROKE AND ACUTE +01FE ; [.22FD.0021.0008][.0000.0024.0002] # LATIN CAPITAL LETTER O WITH STROKE AND ACUTE ENTRY }; diff --git a/gnu/usr.bin/perl/cpan/Unicode-Collate/Collate/Locale/fil.pl b/gnu/usr.bin/perl/cpan/Unicode-Collate/Collate/Locale/fil.pl index cd9603e5a1e..88a28b4119b 100644 --- a/gnu/usr.bin/perl/cpan/Unicode-Collate/Collate/Locale/fil.pl +++ b/gnu/usr.bin/perl/cpan/Unicode-Collate/Collate/Locale/fil.pl @@ -1,12 +1,12 @@ +{ - locale_version => 1.27, - entry => <<'ENTRY', # for DUCET v10.0.0 -00F1 ; [.1E20.0020.0002] # LATIN SMALL LETTER N WITH TILDE -006E 0303 ; [.1E20.0020.0002] # LATIN SMALL LETTER N WITH TILDE -00D1 ; [.1E20.0020.0008] # LATIN CAPITAL LETTER N WITH TILDE -004E 0303 ; [.1E20.0020.0008] # LATIN CAPITAL LETTER N WITH TILDE -006E 0067 ; [.1E21.0020.0002] # -004E 0067 ; [.1E21.0020.0007] # -004E 0047 ; [.1E21.0020.0008] # + locale_version => 1.31, + entry => <<'ENTRY', # for DUCET v13.0.0 +00F1 ; [.2119.0020.0002] # LATIN SMALL LETTER N WITH TILDE +006E 0303 ; [.2119.0020.0002] # LATIN SMALL LETTER N WITH TILDE +00D1 ; [.2119.0020.0008] # LATIN CAPITAL LETTER N WITH TILDE +004E 0303 ; [.2119.0020.0008] # LATIN CAPITAL LETTER N WITH TILDE +006E 0067 ; [.211A.0020.0002] # +004E 0067 ; [.211A.0020.0007] # +004E 0047 ; [.211A.0020.0008] # ENTRY }; diff --git a/gnu/usr.bin/perl/cpan/Unicode-Collate/Collate/Locale/fo.pl b/gnu/usr.bin/perl/cpan/Unicode-Collate/Collate/Locale/fo.pl index 3a70ed6035b..13d22fd9f82 100644 --- a/gnu/usr.bin/perl/cpan/Unicode-Collate/Collate/Locale/fo.pl +++ b/gnu/usr.bin/perl/cpan/Unicode-Collate/Collate/Locale/fo.pl @@ -1,77 +1,77 @@ +{ - locale_version => 1.27, - entry => <<'ENTRY', # for DUCET v10.0.0 -0111 ; [.1CF5.0021.0002] # LATIN SMALL LETTER D WITH STROKE -0064 0335 ; [.1CF5.0021.0002] # LATIN SMALL LETTER D WITH STROKE -0110 ; [.1CF5.0021.0008] # LATIN CAPITAL LETTER D WITH STROKE -0044 0335 ; [.1CF5.0021.0008] # LATIN CAPITAL LETTER D WITH STROKE -00F0 ; [.1CF5.0022.0002] # LATIN SMALL LETTER ETH -1DD9 ; [.1CF5.0022.0002] # COMBINING LATIN SMALL LETTER ETH -00D0 ; [.1CF5.0022.0008] # LATIN CAPITAL LETTER ETH -00FE ; [.1EFB.0020.0003][.1D7E.0020.0003] # LATIN SMALL LETTER THORN -00DE ; [.1EFB.0020.0009][.1D7E.0020.0009] # LATIN CAPITAL LETTER THORN -00FC ; [.1F71.0021.0002] # LATIN SMALL LETTER U WITH DIAERESIS -0075 0308 ; [.1F71.0021.0002] # LATIN SMALL LETTER U WITH DIAERESIS -00DC ; [.1F71.0021.0008] # LATIN CAPITAL LETTER U WITH DIAERESIS -0055 0308 ; [.1F71.0021.0008] # LATIN CAPITAL LETTER U WITH DIAERESIS -01DC ; [.1F71.0021.0002][.0000.0025.0002] # LATIN SMALL LETTER U WITH DIAERESIS AND GRAVE -01DB ; [.1F71.0021.0008][.0000.0025.0002] # LATIN CAPITAL LETTER U WITH DIAERESIS AND GRAVE -01D8 ; [.1F71.0021.0002][.0000.0024.0002] # LATIN SMALL LETTER U WITH DIAERESIS AND ACUTE -01D7 ; [.1F71.0021.0008][.0000.0024.0002] # LATIN CAPITAL LETTER U WITH DIAERESIS AND ACUTE -01D6 ; [.1F71.0021.0002][.0000.0032.0002] # LATIN SMALL LETTER U WITH DIAERESIS AND MACRON -01D5 ; [.1F71.0021.0008][.0000.0032.0002] # LATIN CAPITAL LETTER U WITH DIAERESIS AND MACRON -01DA ; [.1F71.0021.0002][.0000.0028.0002] # LATIN SMALL LETTER U WITH DIAERESIS AND CARON -01D9 ; [.1F71.0021.0008][.0000.0028.0002] # LATIN CAPITAL LETTER U WITH DIAERESIS AND CARON -0171 ; [.1F71.0022.0002] # LATIN SMALL LETTER U WITH DOUBLE ACUTE -0075 030B ; [.1F71.0022.0002] # LATIN SMALL LETTER U WITH DOUBLE ACUTE -0170 ; [.1F71.0022.0008] # LATIN CAPITAL LETTER U WITH DOUBLE ACUTE -0055 030B ; [.1F71.0022.0008] # LATIN CAPITAL LETTER U WITH DOUBLE ACUTE -00E6 ; [.1FFC.0020.0002] # LATIN SMALL LETTER AE -1DD4 ; [.1FFC.0020.0002] # COMBINING LATIN SMALL LETTER AE -00C6 ; [.1FFC.0020.0008] # LATIN CAPITAL LETTER AE -1D2D ; [.1FFC.0020.0014] # MODIFIER LETTER CAPITAL AE -01FD ; [.1FFC.0020.0002][.0000.0024.0002] # LATIN SMALL LETTER AE WITH ACUTE -01FC ; [.1FFC.0020.0008][.0000.0024.0002] # LATIN CAPITAL LETTER AE WITH ACUTE -01E3 ; [.1FFC.0020.0002][.0000.0032.0002] # LATIN SMALL LETTER AE WITH MACRON -01E2 ; [.1FFC.0020.0008][.0000.0032.0002] # LATIN CAPITAL LETTER AE WITH MACRON -00E4 ; [.1FFC.0021.0002] # LATIN SMALL LETTER A WITH DIAERESIS -0061 0308 ; [.1FFC.0021.0002] # LATIN SMALL LETTER A WITH DIAERESIS -00C4 ; [.1FFC.0021.0008] # LATIN CAPITAL LETTER A WITH DIAERESIS -0041 0308 ; [.1FFC.0021.0008] # LATIN CAPITAL LETTER A WITH DIAERESIS -01DF ; [.1FFC.0021.0002][.0000.0032.0002] # LATIN SMALL LETTER A WITH DIAERESIS AND MACRON -01DE ; [.1FFC.0021.0008][.0000.0032.0002] # LATIN CAPITAL LETTER A WITH DIAERESIS AND MACRON -0119 ; [.1FFC.0022.0002] # LATIN SMALL LETTER E WITH OGONEK -0065 0328 ; [.1FFC.0022.0002] # LATIN SMALL LETTER E WITH OGONEK -0118 ; [.1FFC.0022.0008] # LATIN CAPITAL LETTER E WITH OGONEK -0045 0328 ; [.1FFC.0022.0008] # LATIN CAPITAL LETTER E WITH OGONEK -00F8 ; [.1FFD.0020.0002] # LATIN SMALL LETTER O WITH STROKE -006F 0338 ; [.1FFD.0020.0002] # LATIN SMALL LETTER O WITH STROKE -00D8 ; [.1FFD.0020.0008] # LATIN CAPITAL LETTER O WITH STROKE -004F 0338 ; [.1FFD.0020.0008] # LATIN CAPITAL LETTER O WITH STROKE -01FF ; [.1FFD.0020.0002][.0000.0024.0002] # LATIN SMALL LETTER O WITH STROKE AND ACUTE -01FE ; [.1FFD.0020.0008][.0000.0024.0002] # LATIN CAPITAL LETTER O WITH STROKE AND ACUTE -00F6 ; [.1FFD.0021.0002] # LATIN SMALL LETTER O WITH DIAERESIS -006F 0308 ; [.1FFD.0021.0002] # LATIN SMALL LETTER O WITH DIAERESIS -00D6 ; [.1FFD.0021.0008] # LATIN CAPITAL LETTER O WITH DIAERESIS -004F 0308 ; [.1FFD.0021.0008] # LATIN CAPITAL LETTER O WITH DIAERESIS -022B ; [.1FFD.0021.0002][.0000.0032.0002] # LATIN SMALL LETTER O WITH DIAERESIS AND MACRON -022A ; [.1FFD.0021.0008][.0000.0032.0002] # LATIN CAPITAL LETTER O WITH DIAERESIS AND MACRON -0151 ; [.1FFD.0022.0002] # LATIN SMALL LETTER O WITH DOUBLE ACUTE -006F 030B ; [.1FFD.0022.0002] # LATIN SMALL LETTER O WITH DOUBLE ACUTE -0150 ; [.1FFD.0022.0008] # LATIN CAPITAL LETTER O WITH DOUBLE ACUTE -004F 030B ; [.1FFD.0022.0008] # LATIN CAPITAL LETTER O WITH DOUBLE ACUTE -0153 ; [.1FFD.0023.0002] # LATIN SMALL LIGATURE OE -0152 ; [.1FFD.0023.0008] # LATIN CAPITAL LIGATURE OE -00E5 ; [.1FFE.0020.0002] # LATIN SMALL LETTER A WITH RING ABOVE -0061 030A ; [.1FFE.0020.0002] # LATIN SMALL LETTER A WITH RING ABOVE -00C5 ; [.1FFE.0020.0008] # LATIN CAPITAL LETTER A WITH RING ABOVE -0041 030A ; [.1FFE.0020.0008] # LATIN CAPITAL LETTER A WITH RING ABOVE -212B ; [.1FFE.0020.0008] # ANGSTROM SIGN -01FB ; [.1FFE.0020.0002][.0000.0024.0002] # LATIN SMALL LETTER A WITH RING ABOVE AND ACUTE -01FA ; [.1FFE.0020.0008][.0000.0024.0002] # LATIN CAPITAL LETTER A WITH RING ABOVE AND ACUTE -0061 0061 ; [.1FFE.0020.001C][.0000.0000.0002] # -0061 0041 ; [.1FFE.0020.001C][.0000.0000.0008] # -0041 0061 ; [.1FFE.0020.001D][.0000.0000.0002] # -0041 0041 ; [.1FFE.0020.001D][.0000.0000.0008] # + locale_version => 1.31, + entry => <<'ENTRY', # for DUCET v13.0.0 +0111 ; [.1FEB.0021.0002] # LATIN SMALL LETTER D WITH STROKE +0064 0335 ; [.1FEB.0021.0002] # LATIN SMALL LETTER D WITH STROKE +0110 ; [.1FEB.0021.0008] # LATIN CAPITAL LETTER D WITH STROKE +0044 0335 ; [.1FEB.0021.0008] # LATIN CAPITAL LETTER D WITH STROKE +00F0 ; [.1FEB.0022.0002] # LATIN SMALL LETTER ETH +1DD9 ; [.1FEB.0022.0002] # COMBINING LATIN SMALL LETTER ETH +00D0 ; [.1FEB.0022.0008] # LATIN CAPITAL LETTER ETH +00FE ; [.21F7.0020.0003][.2075.0020.0003] # LATIN SMALL LETTER THORN +00DE ; [.21F7.0020.0009][.2075.0020.0009] # LATIN CAPITAL LETTER THORN +00FC ; [.2270.0021.0002] # LATIN SMALL LETTER U WITH DIAERESIS +0075 0308 ; [.2270.0021.0002] # LATIN SMALL LETTER U WITH DIAERESIS +00DC ; [.2270.0021.0008] # LATIN CAPITAL LETTER U WITH DIAERESIS +0055 0308 ; [.2270.0021.0008] # LATIN CAPITAL LETTER U WITH DIAERESIS +01DC ; [.2270.0021.0002][.0000.0025.0002] # LATIN SMALL LETTER U WITH DIAERESIS AND GRAVE +01DB ; [.2270.0021.0008][.0000.0025.0002] # LATIN CAPITAL LETTER U WITH DIAERESIS AND GRAVE +01D8 ; [.2270.0021.0002][.0000.0024.0002] # LATIN SMALL LETTER U WITH DIAERESIS AND ACUTE +01D7 ; [.2270.0021.0008][.0000.0024.0002] # LATIN CAPITAL LETTER U WITH DIAERESIS AND ACUTE +01D6 ; [.2270.0021.0002][.0000.0032.0002] # LATIN SMALL LETTER U WITH DIAERESIS AND MACRON +01D5 ; [.2270.0021.0008][.0000.0032.0002] # LATIN CAPITAL LETTER U WITH DIAERESIS AND MACRON +01DA ; [.2270.0021.0002][.0000.0028.0002] # LATIN SMALL LETTER U WITH DIAERESIS AND CARON +01D9 ; [.2270.0021.0008][.0000.0028.0002] # LATIN CAPITAL LETTER U WITH DIAERESIS AND CARON +0171 ; [.2270.0022.0002] # LATIN SMALL LETTER U WITH DOUBLE ACUTE +0075 030B ; [.2270.0022.0002] # LATIN SMALL LETTER U WITH DOUBLE ACUTE +0170 ; [.2270.0022.0008] # LATIN CAPITAL LETTER U WITH DOUBLE ACUTE +0055 030B ; [.2270.0022.0008] # LATIN CAPITAL LETTER U WITH DOUBLE ACUTE +00E6 ; [.22FB.0020.0002] # LATIN SMALL LETTER AE +1DD4 ; [.22FB.0020.0002] # COMBINING LATIN SMALL LETTER AE +00C6 ; [.22FB.0020.0008] # LATIN CAPITAL LETTER AE +1D2D ; [.22FB.0020.0014] # MODIFIER LETTER CAPITAL AE +01FD ; [.22FB.0020.0002][.0000.0024.0002] # LATIN SMALL LETTER AE WITH ACUTE +01FC ; [.22FB.0020.0008][.0000.0024.0002] # LATIN CAPITAL LETTER AE WITH ACUTE +01E3 ; [.22FB.0020.0002][.0000.0032.0002] # LATIN SMALL LETTER AE WITH MACRON +01E2 ; [.22FB.0020.0008][.0000.0032.0002] # LATIN CAPITAL LETTER AE WITH MACRON +00E4 ; [.22FB.0021.0002] # LATIN SMALL LETTER A WITH DIAERESIS +0061 0308 ; [.22FB.0021.0002] # LATIN SMALL LETTER A WITH DIAERESIS +00C4 ; [.22FB.0021.0008] # LATIN CAPITAL LETTER A WITH DIAERESIS +0041 0308 ; [.22FB.0021.0008] # LATIN CAPITAL LETTER A WITH DIAERESIS +01DF ; [.22FB.0021.0002][.0000.0032.0002] # LATIN SMALL LETTER A WITH DIAERESIS AND MACRON +01DE ; [.22FB.0021.0008][.0000.0032.0002] # LATIN CAPITAL LETTER A WITH DIAERESIS AND MACRON +0119 ; [.22FB.0022.0002] # LATIN SMALL LETTER E WITH OGONEK +0065 0328 ; [.22FB.0022.0002] # LATIN SMALL LETTER E WITH OGONEK +0118 ; [.22FB.0022.0008] # LATIN CAPITAL LETTER E WITH OGONEK +0045 0328 ; [.22FB.0022.0008] # LATIN CAPITAL LETTER E WITH OGONEK +00F8 ; [.22FC.0020.0002] # LATIN SMALL LETTER O WITH STROKE +006F 0338 ; [.22FC.0020.0002] # LATIN SMALL LETTER O WITH STROKE +00D8 ; [.22FC.0020.0008] # LATIN CAPITAL LETTER O WITH STROKE +004F 0338 ; [.22FC.0020.0008] # LATIN CAPITAL LETTER O WITH STROKE +01FF ; [.22FC.0020.0002][.0000.0024.0002] # LATIN SMALL LETTER O WITH STROKE AND ACUTE +01FE ; [.22FC.0020.0008][.0000.0024.0002] # LATIN CAPITAL LETTER O WITH STROKE AND ACUTE +00F6 ; [.22FC.0021.0002] # LATIN SMALL LETTER O WITH DIAERESIS +006F 0308 ; [.22FC.0021.0002] # LATIN SMALL LETTER O WITH DIAERESIS +00D6 ; [.22FC.0021.0008] # LATIN CAPITAL LETTER O WITH DIAERESIS +004F 0308 ; [.22FC.0021.0008] # LATIN CAPITAL LETTER O WITH DIAERESIS +022B ; [.22FC.0021.0002][.0000.0032.0002] # LATIN SMALL LETTER O WITH DIAERESIS AND MACRON +022A ; [.22FC.0021.0008][.0000.0032.0002] # LATIN CAPITAL LETTER O WITH DIAERESIS AND MACRON +0151 ; [.22FC.0022.0002] # LATIN SMALL LETTER O WITH DOUBLE ACUTE +006F 030B ; [.22FC.0022.0002] # LATIN SMALL LETTER O WITH DOUBLE ACUTE +0150 ; [.22FC.0022.0008] # LATIN CAPITAL LETTER O WITH DOUBLE ACUTE +004F 030B ; [.22FC.0022.0008] # LATIN CAPITAL LETTER O WITH DOUBLE ACUTE +0153 ; [.22FC.0023.0002] # LATIN SMALL LIGATURE OE +0152 ; [.22FC.0023.0008] # LATIN CAPITAL LIGATURE OE +00E5 ; [.22FD.0020.0002] # LATIN SMALL LETTER A WITH RING ABOVE +0061 030A ; [.22FD.0020.0002] # LATIN SMALL LETTER A WITH RING ABOVE +00C5 ; [.22FD.0020.0008] # LATIN CAPITAL LETTER A WITH RING ABOVE +0041 030A ; [.22FD.0020.0008] # LATIN CAPITAL LETTER A WITH RING ABOVE +212B ; [.22FD.0020.0008] # ANGSTROM SIGN +01FB ; [.22FD.0020.0002][.0000.0024.0002] # LATIN SMALL LETTER A WITH RING ABOVE AND ACUTE +01FA ; [.22FD.0020.0008][.0000.0024.0002] # LATIN CAPITAL LETTER A WITH RING ABOVE AND ACUTE +0061 0061 ; [.22FD.0020.001C][.0000.0000.0002] # +0061 0041 ; [.22FD.0020.001C][.0000.0000.0008] # +0041 0061 ; [.22FD.0020.001D][.0000.0000.0002] # +0041 0041 ; [.22FD.0020.001D][.0000.0000.0008] # ENTRY }; diff --git a/gnu/usr.bin/perl/cpan/Unicode-Collate/Collate/Locale/gu.pl b/gnu/usr.bin/perl/cpan/Unicode-Collate/Collate/Locale/gu.pl index 82864f77b19..ed8e223bfd3 100644 --- a/gnu/usr.bin/perl/cpan/Unicode-Collate/Collate/Locale/gu.pl +++ b/gnu/usr.bin/perl/cpan/Unicode-Collate/Collate/Locale/gu.pl @@ -1,9 +1,9 @@ +{ - locale_version => 1.27, - entry => <<'ENTRY', # for DUCET v10.0.0 -0A82 ; [.27AB.0020.0002][.FFF1.0000.0000] # GUJARATI SIGN ANUSVARA -0A81 ; [.27AB.0021.0002][.FFF1.0000.0000] # GUJARATI SIGN CANDRABINDU -0A83 ; [.27AB.0020.0002][.FFF2.0000.0000] # GUJARATI SIGN VISARGA -0AD0 ; [.27AB.0020.0002][.FFF0.0000.0000] # GUJARATI OM + locale_version => 1.31, + entry => <<'ENTRY', # for DUCET v13.0.0 +0A82 ; [.2AB8.0020.0002][.FFF1.0000.0000] # GUJARATI SIGN ANUSVARA +0A81 ; [.2AB8.0021.0002][.FFF1.0000.0000] # GUJARATI SIGN CANDRABINDU +0A83 ; [.2AB8.0020.0002][.FFF2.0000.0000] # GUJARATI SIGN VISARGA +0AD0 ; [.2AB8.0020.0002][.FFF0.0000.0000] # GUJARATI OM ENTRY }; diff --git a/gnu/usr.bin/perl/cpan/Unicode-Collate/Collate/Locale/ha.pl b/gnu/usr.bin/perl/cpan/Unicode-Collate/Collate/Locale/ha.pl index 9a36ea3697a..0dcac73c7e5 100644 --- a/gnu/usr.bin/perl/cpan/Unicode-Collate/Collate/Locale/ha.pl +++ b/gnu/usr.bin/perl/cpan/Unicode-Collate/Collate/Locale/ha.pl @@ -1,16 +1,16 @@ +{ - locale_version => 1.27, + locale_version => 1.31, # b-hook, d-hook, k-hook, y-hook don't require tailoring - entry => <<'ENTRY', # for DUCET v10.0.0 -0073 0068 ; [.1ED8.0020.0002] # -0053 0068 ; [.1ED8.0020.0007] # -0053 0048 ; [.1ED8.0020.0008] # -0074 0073 ; [.1EFC.0020.0002] # -0054 0073 ; [.1EFC.0020.0007] # -0054 0053 ; [.1EFC.0020.0008] # -02BC 0079 ; [.1F7D.0020.0003] # -02BC 0059 ; [.1F7D.0020.0009] # -0027 0079 ; [.1F7D.0020.0004] # -0027 0059 ; [.1F7D.0020.000A] # + entry => <<'ENTRY', # for DUCET v13.0.0 +0073 0068 ; [.21D3.0020.0002] # +0053 0068 ; [.21D3.0020.0007] # +0053 0048 ; [.21D3.0020.0008] # +0074 0073 ; [.21F8.0020.0002] # +0054 0073 ; [.21F8.0020.0007] # +0054 0053 ; [.21F8.0020.0008] # +02BC 0079 ; [.227C.0020.0003] # +02BC 0059 ; [.227C.0020.0009] # +0027 0079 ; [.227C.0020.0004] # +0027 0059 ; [.227C.0020.000A] # ENTRY }; diff --git a/gnu/usr.bin/perl/cpan/Unicode-Collate/Collate/Locale/haw.pl b/gnu/usr.bin/perl/cpan/Unicode-Collate/Collate/Locale/haw.pl index 42f0753004d..cf8b460f36c 100644 --- a/gnu/usr.bin/perl/cpan/Unicode-Collate/Collate/Locale/haw.pl +++ b/gnu/usr.bin/perl/cpan/Unicode-Collate/Collate/Locale/haw.pl @@ -1,22 +1,22 @@ +{ - locale_version => 1.27, - entry => <<'ENTRY', # for DUCET v10.0.0 -0065 ; [.1CAE.0020.0002][.FFF1.0000.0000] # LATIN SMALL LETTER E -0045 ; [.1CAE.0020.0008][.FFF1.0000.0000] # LATIN CAPITAL LETTER E -0069 ; [.1CAE.0020.0002][.FFF2.0000.0000] # LATIN SMALL LETTER I -0049 ; [.1CAE.0020.0008][.FFF2.0000.0000] # LATIN CAPITAL LETTER I -006F ; [.1CAE.0020.0002][.FFF3.0000.0000] # LATIN SMALL LETTER O -004F ; [.1CAE.0020.0008][.FFF3.0000.0000] # LATIN CAPITAL LETTER O -0075 ; [.1CAE.0020.0002][.FFF4.0000.0000] # LATIN SMALL LETTER U -0055 ; [.1CAE.0020.0008][.FFF4.0000.0000] # LATIN CAPITAL LETTER U -02BB ; [.1F5C.0020.0002] # MODIFIER LETTER TURNED COMMA -0113 ; [.1CAE.0020.0002][.FFF1.0000.0000][.0000.0032.0002] # LATIN SMALL LETTER E WITH MACRON -0112 ; [.1CAE.0020.0008][.FFF1.0000.0000][.0000.0032.0002] # LATIN CAPITAL LETTER E WITH MACRON -012B ; [.1CAE.0020.0002][.FFF2.0000.0000][.0000.0032.0002] # LATIN SMALL LETTER I WITH MACRON -012A ; [.1CAE.0020.0008][.FFF2.0000.0000][.0000.0032.0002] # LATIN CAPITAL LETTER I WITH MACRON -014D ; [.1CAE.0020.0002][.FFF3.0000.0000][.0000.0032.0002] # LATIN SMALL LETTER O WITH MACRON -014C ; [.1CAE.0020.0008][.FFF3.0000.0000][.0000.0032.0002] # LATIN CAPITAL LETTER O WITH MACRON -016B ; [.1CAE.0020.0002][.FFF4.0000.0000][.0000.0032.0002] # LATIN SMALL LETTER U WITH MACRON -016A ; [.1CAE.0020.0008][.FFF4.0000.0000][.0000.0032.0002] # LATIN CAPITAL LETTER U WITH MACRON + locale_version => 1.31, + entry => <<'ENTRY', # for DUCET v13.0.0 +0065 ; [.1FA3.0020.0002][.FFF1.0000.0000] # LATIN SMALL LETTER E +0045 ; [.1FA3.0020.0008][.FFF1.0000.0000] # LATIN CAPITAL LETTER E +0069 ; [.1FA3.0020.0002][.FFF2.0000.0000] # LATIN SMALL LETTER I +0049 ; [.1FA3.0020.0008][.FFF2.0000.0000] # LATIN CAPITAL LETTER I +006F ; [.1FA3.0020.0002][.FFF3.0000.0000] # LATIN SMALL LETTER O +004F ; [.1FA3.0020.0008][.FFF3.0000.0000] # LATIN CAPITAL LETTER O +0075 ; [.1FA3.0020.0002][.FFF4.0000.0000] # LATIN SMALL LETTER U +0055 ; [.1FA3.0020.0008][.FFF4.0000.0000] # LATIN CAPITAL LETTER U +02BB ; [.225A.0020.0002] # MODIFIER LETTER TURNED COMMA +0113 ; [.1FA3.0020.0002][.FFF1.0000.0000][.0000.0032.0002] # LATIN SMALL LETTER E WITH MACRON +0112 ; [.1FA3.0020.0008][.FFF1.0000.0000][.0000.0032.0002] # LATIN CAPITAL LETTER E WITH MACRON +012B ; [.1FA3.0020.0002][.FFF2.0000.0000][.0000.0032.0002] # LATIN SMALL LETTER I WITH MACRON +012A ; [.1FA3.0020.0008][.FFF2.0000.0000][.0000.0032.0002] # LATIN CAPITAL LETTER I WITH MACRON +014D ; [.1FA3.0020.0002][.FFF3.0000.0000][.0000.0032.0002] # LATIN SMALL LETTER O WITH MACRON +014C ; [.1FA3.0020.0008][.FFF3.0000.0000][.0000.0032.0002] # LATIN CAPITAL LETTER O WITH MACRON +016B ; [.1FA3.0020.0002][.FFF4.0000.0000][.0000.0032.0002] # LATIN SMALL LETTER U WITH MACRON +016A ; [.1FA3.0020.0008][.FFF4.0000.0000][.0000.0032.0002] # LATIN CAPITAL LETTER U WITH MACRON ENTRY }; diff --git a/gnu/usr.bin/perl/cpan/Unicode-Collate/Collate/Locale/hi.pl b/gnu/usr.bin/perl/cpan/Unicode-Collate/Collate/Locale/hi.pl index 972352af198..310201fca72 100644 --- a/gnu/usr.bin/perl/cpan/Unicode-Collate/Collate/Locale/hi.pl +++ b/gnu/usr.bin/perl/cpan/Unicode-Collate/Collate/Locale/hi.pl @@ -1,9 +1,9 @@ +{ - locale_version => 1.27, - entry => <<'ENTRY', # for DUCET v10.0.0 -0902 ; [.26CC.0020.0002][.FFF1.0000.0000] # DEVANAGARI SIGN ANUSVARA -0901 ; [.26CC.0021.0002][.FFF1.0000.0000] # DEVANAGARI SIGN CANDRABINDU -0903 ; [.26CC.0020.0002][.FFF2.0000.0000] # DEVANAGARI SIGN VISARGA -0950 ; [.26CC.0020.0002][.FFF0.0000.0000] # DEVANAGARI OM + locale_version => 1.31, + entry => <<'ENTRY', # for DUCET v13.0.0 +0902 ; [.29D7.0020.0002][.FFF1.0000.0000] # DEVANAGARI SIGN ANUSVARA +0901 ; [.29D7.0021.0002][.FFF1.0000.0000] # DEVANAGARI SIGN CANDRABINDU +0903 ; [.29D7.0020.0002][.FFF2.0000.0000] # DEVANAGARI SIGN VISARGA +0950 ; [.29D7.0020.0002][.FFF0.0000.0000] # DEVANAGARI OM ENTRY }; diff --git a/gnu/usr.bin/perl/cpan/Unicode-Collate/Collate/Locale/hr.pl b/gnu/usr.bin/perl/cpan/Unicode-Collate/Collate/Locale/hr.pl index 48bca1e8647..faa3655a967 100644 --- a/gnu/usr.bin/perl/cpan/Unicode-Collate/Collate/Locale/hr.pl +++ b/gnu/usr.bin/perl/cpan/Unicode-Collate/Collate/Locale/hr.pl @@ -1,48 +1,48 @@ +{ - locale_version => 1.27, - entry => <<'ENTRY', # for DUCET v10.0.0 -010D ; [.1CE1.0020.0002] # LATIN SMALL LETTER C WITH CARON -0063 030C ; [.1CE1.0020.0002] # LATIN SMALL LETTER C WITH CARON -010C ; [.1CE1.0020.0008] # LATIN CAPITAL LETTER C WITH CARON -0043 030C ; [.1CE1.0020.0008] # LATIN CAPITAL LETTER C WITH CARON -0107 ; [.1CE2.0020.0002] # LATIN SMALL LETTER C WITH ACUTE -0063 0301 ; [.1CE2.0020.0002] # LATIN SMALL LETTER C WITH ACUTE -0063 0341 ; [.1CE2.0020.0002] # LATIN SMALL LETTER C WITH ACUTE -0106 ; [.1CE2.0020.0008] # LATIN CAPITAL LETTER C WITH ACUTE -0043 0301 ; [.1CE2.0020.0008] # LATIN CAPITAL LETTER C WITH ACUTE -0043 0341 ; [.1CE2.0020.0008] # LATIN CAPITAL LETTER C WITH ACUTE -0064 017E ; [.1CF6.0020.0002] # -01C6 ; [.1CF6.0020.0003] # LATIN SMALL LETTER DZ WITH CARON -0044 017E ; [.1CF6.0020.0007][.0000.0000.0001] # -01C5 ; [.1CF6.0020.0007][.0000.0000.0007] # LATIN CAPITAL LETTER D WITH SMALL LETTER Z WITH CARON -0044 017D ; [.1CF6.0020.0008] # -01C4 ; [.1CF6.0020.0009] # LATIN CAPITAL LETTER DZ WITH CARON -0064 007A 030C ; [.1CF6.0020.0002] # -0044 007A 030C ; [.1CF6.0020.0007][.0000.0000.0001] # -0044 005A 030C ; [.1CF6.0020.0008] # -0111 ; [.1CF7.0020.0002] # LATIN SMALL LETTER D WITH STROKE -0064 0335 ; [.1CF7.0020.0002] # LATIN SMALL LETTER D WITH STROKE -0110 ; [.1CF7.0020.0008] # LATIN CAPITAL LETTER D WITH STROKE -0044 0335 ; [.1CF7.0020.0008] # LATIN CAPITAL LETTER D WITH STROKE -006C 006A ; [.1DDE.0020.0002] # -01C9 ; [.1DDE.0020.0003] # LATIN SMALL LETTER LJ -004C 006A ; [.1DDE.0020.0007][.0000.0000.0001] # -01C8 ; [.1DDE.0020.0007][.0000.0000.0007] # LATIN CAPITAL LETTER L WITH SMALL LETTER J -004C 004A ; [.1DDE.0020.0008] # -01C7 ; [.1DDE.0020.0009] # LATIN CAPITAL LETTER LJ -006E 006A ; [.1E20.0020.0002] # -01CC ; [.1E20.0020.0003] # LATIN SMALL LETTER NJ -004E 006A ; [.1E20.0020.0007][.0000.0000.0001] # -01CB ; [.1E20.0020.0007][.0000.0000.0007] # LATIN CAPITAL LETTER N WITH SMALL LETTER J -004E 004A ; [.1E20.0020.0008] # -01CA ; [.1E20.0020.0009] # LATIN CAPITAL LETTER NJ -0161 ; [.1ED8.0020.0002] # LATIN SMALL LETTER S WITH CARON -0073 030C ; [.1ED8.0020.0002] # LATIN SMALL LETTER S WITH CARON -0160 ; [.1ED8.0020.0008] # LATIN CAPITAL LETTER S WITH CARON -0053 030C ; [.1ED8.0020.0008] # LATIN CAPITAL LETTER S WITH CARON -017E ; [.1F88.0020.0002] # LATIN SMALL LETTER Z WITH CARON -007A 030C ; [.1F88.0020.0002] # LATIN SMALL LETTER Z WITH CARON -017D ; [.1F88.0020.0008] # LATIN CAPITAL LETTER Z WITH CARON -005A 030C ; [.1F88.0020.0008] # LATIN CAPITAL LETTER Z WITH CARON + locale_version => 1.31, + entry => <<'ENTRY', # for DUCET v13.0.0 +010D ; [.1FD7.0020.0002] # LATIN SMALL LETTER C WITH CARON +0063 030C ; [.1FD7.0020.0002] # LATIN SMALL LETTER C WITH CARON +010C ; [.1FD7.0020.0008] # LATIN CAPITAL LETTER C WITH CARON +0043 030C ; [.1FD7.0020.0008] # LATIN CAPITAL LETTER C WITH CARON +0107 ; [.1FD8.0020.0002] # LATIN SMALL LETTER C WITH ACUTE +0063 0301 ; [.1FD8.0020.0002] # LATIN SMALL LETTER C WITH ACUTE +0063 0341 ; [.1FD8.0020.0002] # LATIN SMALL LETTER C WITH ACUTE +0106 ; [.1FD8.0020.0008] # LATIN CAPITAL LETTER C WITH ACUTE +0043 0301 ; [.1FD8.0020.0008] # LATIN CAPITAL LETTER C WITH ACUTE +0043 0341 ; [.1FD8.0020.0008] # LATIN CAPITAL LETTER C WITH ACUTE +0064 017E ; [.1FEC.0020.0002] # +01C6 ; [.1FEC.0020.0003] # LATIN SMALL LETTER DZ WITH CARON +0044 017E ; [.1FEC.0020.0007][.0000.0000.0001] # +01C5 ; [.1FEC.0020.0007][.0000.0000.0007] # LATIN CAPITAL LETTER D WITH SMALL LETTER Z WITH CARON +0044 017D ; [.1FEC.0020.0008] # +01C4 ; [.1FEC.0020.0009] # LATIN CAPITAL LETTER DZ WITH CARON +0064 007A 030C ; [.1FEC.0020.0002] # +0044 007A 030C ; [.1FEC.0020.0007][.0000.0000.0001] # +0044 005A 030C ; [.1FEC.0020.0008] # +0111 ; [.1FED.0020.0002] # LATIN SMALL LETTER D WITH STROKE +0064 0335 ; [.1FED.0020.0002] # LATIN SMALL LETTER D WITH STROKE +0110 ; [.1FED.0020.0008] # LATIN CAPITAL LETTER D WITH STROKE +0044 0335 ; [.1FED.0020.0008] # LATIN CAPITAL LETTER D WITH STROKE +006C 006A ; [.20D7.0020.0002] # +01C9 ; [.20D7.0020.0003] # LATIN SMALL LETTER LJ +004C 006A ; [.20D7.0020.0007][.0000.0000.0001] # +01C8 ; [.20D7.0020.0007][.0000.0000.0007] # LATIN CAPITAL LETTER L WITH SMALL LETTER J +004C 004A ; [.20D7.0020.0008] # +01C7 ; [.20D7.0020.0009] # LATIN CAPITAL LETTER LJ +006E 006A ; [.2119.0020.0002] # +01CC ; [.2119.0020.0003] # LATIN SMALL LETTER NJ +004E 006A ; [.2119.0020.0007][.0000.0000.0001] # +01CB ; [.2119.0020.0007][.0000.0000.0007] # LATIN CAPITAL LETTER N WITH SMALL LETTER J +004E 004A ; [.2119.0020.0008] # +01CA ; [.2119.0020.0009] # LATIN CAPITAL LETTER NJ +0161 ; [.21D3.0020.0002] # LATIN SMALL LETTER S WITH CARON +0073 030C ; [.21D3.0020.0002] # LATIN SMALL LETTER S WITH CARON +0160 ; [.21D3.0020.0008] # LATIN CAPITAL LETTER S WITH CARON +0053 030C ; [.21D3.0020.0008] # LATIN CAPITAL LETTER S WITH CARON +017E ; [.2287.0020.0002] # LATIN SMALL LETTER Z WITH CARON +007A 030C ; [.2287.0020.0002] # LATIN SMALL LETTER Z WITH CARON +017D ; [.2287.0020.0008] # LATIN CAPITAL LETTER Z WITH CARON +005A 030C ; [.2287.0020.0008] # LATIN CAPITAL LETTER Z WITH CARON ENTRY }; diff --git a/gnu/usr.bin/perl/cpan/Unicode-Collate/Collate/Locale/hu.pl b/gnu/usr.bin/perl/cpan/Unicode-Collate/Collate/Locale/hu.pl index e783dd0cb82..ae1809a678f 100644 --- a/gnu/usr.bin/perl/cpan/Unicode-Collate/Collate/Locale/hu.pl +++ b/gnu/usr.bin/perl/cpan/Unicode-Collate/Collate/Locale/hu.pl @@ -1,151 +1,151 @@ +{ - locale_version => 1.27, - entry => <<'ENTRY', # for DUCET v10.0.0 -0063 0073 ; [.1CE1.0020.0002] # -0063 0053 ; [.1CE1.0020.0007][.0000.0000.0002] # -0043 0073 ; [.1CE1.0020.0007][.0000.0000.0008] # -0043 0053 ; [.1CE1.0020.0008] # -0064 007A ; [.1CF6.0020.0002] # -0064 005A ; [.1CF6.0020.0007][.0000.0000.0002] # -0044 007A ; [.1CF6.0020.0007][.0000.0000.0008] # -0044 005A ; [.1CF6.0020.0008] # -0064 007A 0073 ; [.1CF7.0020.0002] # -0064 007A 0053 ; [.1CF7.0020.0007][.0000.0000.0002][.0000.0000.0002] # -0064 005A 0073 ; [.1CF7.0020.0007][.0000.0000.0002][.0000.0000.0007] # -0064 005A 0053 ; [.1CF7.0020.0007][.0000.0000.0002][.0000.0000.0008] # -0044 007A 0073 ; [.1CF7.0020.0007][.0000.0000.0008][.0000.0000.0002] # -0044 007A 0053 ; [.1CF7.0020.0007][.0000.0000.0008][.0000.0000.0007] # -0044 005A 0073 ; [.1CF7.0020.0007][.0000.0000.0008][.0000.0000.0008] # -0044 005A 0053 ; [.1CF7.0020.0008] # -0067 0079 ; [.1D5B.0020.0002] # -0067 0059 ; [.1D5B.0020.0007][.0000.0000.0002] # -0047 0079 ; [.1D5B.0020.0007][.0000.0000.0008] # -0047 0059 ; [.1D5B.0020.0008] # -006C 0079 ; [.1DDE.0020.0002] # -006C 0059 ; [.1DDE.0020.0007][.0000.0000.0002] # -004C 0079 ; [.1DDE.0020.0007][.0000.0000.0008] # -004C 0059 ; [.1DDE.0020.0008] # -006E 0079 ; [.1E20.0020.0002] # -006E 0059 ; [.1E20.0020.0007][.0000.0000.0002] # -004E 0079 ; [.1E20.0020.0007][.0000.0000.0008] # -004E 0059 ; [.1E20.0020.0008] # -0073 007A ; [.1ED8.0020.0002] # -0073 005A ; [.1ED8.0020.0007][.0000.0000.0002] # -0053 007A ; [.1ED8.0020.0007][.0000.0000.0008] # -0053 005A ; [.1ED8.0020.0008] # -0074 0079 ; [.1EFC.0020.0002] # -0074 0059 ; [.1EFC.0020.0007][.0000.0000.0002] # -0054 0079 ; [.1EFC.0020.0007][.0000.0000.0008] # -0054 0059 ; [.1EFC.0020.0008] # -007A 0073 ; [.1F88.0020.0002] # -007A 0053 ; [.1F88.0020.0007][.0000.0000.0002] # -005A 0073 ; [.1F88.0020.0007][.0000.0000.0008] # -005A 0053 ; [.1F88.0020.0008] # -00F6 ; [.1E44.0020.0002] # LATIN SMALL LETTER O WITH DIAERESIS -006F 0308 ; [.1E44.0020.0002] # LATIN SMALL LETTER O WITH DIAERESIS -00D6 ; [.1E44.0020.0008] # LATIN CAPITAL LETTER O WITH DIAERESIS -004F 0308 ; [.1E44.0020.0008] # LATIN CAPITAL LETTER O WITH DIAERESIS -022B ; [.1E44.0020.0002][.0000.0032.0002] # LATIN SMALL LETTER O WITH DIAERESIS AND MACRON -022A ; [.1E44.0020.0008][.0000.0032.0002] # LATIN CAPITAL LETTER O WITH DIAERESIS AND MACRON -0151 ; [.1E44.0021.0002] # LATIN SMALL LETTER O WITH DOUBLE ACUTE -006F 030B ; [.1E44.0021.0002] # LATIN SMALL LETTER O WITH DOUBLE ACUTE -0150 ; [.1E44.0021.0008] # LATIN CAPITAL LETTER O WITH DOUBLE ACUTE -004F 030B ; [.1E44.0021.0008] # LATIN CAPITAL LETTER O WITH DOUBLE ACUTE -00FC ; [.1F1C.0020.0002] # LATIN SMALL LETTER U WITH DIAERESIS -0075 0308 ; [.1F1C.0020.0002] # LATIN SMALL LETTER U WITH DIAERESIS -00DC ; [.1F1C.0020.0008] # LATIN CAPITAL LETTER U WITH DIAERESIS -0055 0308 ; [.1F1C.0020.0008] # LATIN CAPITAL LETTER U WITH DIAERESIS -01DC ; [.1F1C.0020.0002][.0000.0025.0002] # LATIN SMALL LETTER U WITH DIAERESIS AND GRAVE -01DB ; [.1F1C.0020.0008][.0000.0025.0002] # LATIN CAPITAL LETTER U WITH DIAERESIS AND GRAVE -01D8 ; [.1F1C.0020.0002][.0000.0024.0002] # LATIN SMALL LETTER U WITH DIAERESIS AND ACUTE -01D7 ; [.1F1C.0020.0008][.0000.0024.0002] # LATIN CAPITAL LETTER U WITH DIAERESIS AND ACUTE -01D6 ; [.1F1C.0020.0002][.0000.0032.0002] # LATIN SMALL LETTER U WITH DIAERESIS AND MACRON -01D5 ; [.1F1C.0020.0008][.0000.0032.0002] # LATIN CAPITAL LETTER U WITH DIAERESIS AND MACRON -01DA ; [.1F1C.0020.0002][.0000.0028.0002] # LATIN SMALL LETTER U WITH DIAERESIS AND CARON -01D9 ; [.1F1C.0020.0008][.0000.0028.0002] # LATIN CAPITAL LETTER U WITH DIAERESIS AND CARON -0171 ; [.1F1C.0021.0002] # LATIN SMALL LETTER U WITH DOUBLE ACUTE -0075 030B ; [.1F1C.0021.0002] # LATIN SMALL LETTER U WITH DOUBLE ACUTE -0170 ; [.1F1C.0021.0008] # LATIN CAPITAL LETTER U WITH DOUBLE ACUTE -0055 030B ; [.1F1C.0021.0008] # LATIN CAPITAL LETTER U WITH DOUBLE ACUTE -0063 0063 0073 ; [.1CE1.0020.0002][.1CE1.0020.0002] # -0063 0063 0053 ; [.1CE1.0020.0002][.1CE1.0020.0007][.0000.0000.0002] # -0063 0043 0073 ; [.1CE1.0020.0002][.1CE1.0020.0007][.0000.0000.0008] # -0063 0043 0053 ; [.1CE1.0020.0002][.1CE1.0020.0008] # -0043 0063 0073 ; [.1CE1.0020.0008][.1CE1.0020.0002] # -0043 0063 0053 ; [.1CE1.0020.0008][.1CE1.0020.0007][.0000.0000.0002] # -0043 0043 0073 ; [.1CE1.0020.0008][.1CE1.0020.0007][.0000.0000.0008] # -0043 0043 0053 ; [.1CE1.0020.0008][.1CE1.0020.0008] # -0064 0064 007A ; [.1CF6.0020.0002][.1CF6.0020.0002] # -0064 0064 005A ; [.1CF6.0020.0002][.1CF6.0020.0007][.0000.0000.0002] # -0064 0044 007A ; [.1CF6.0020.0002][.1CF6.0020.0007][.0000.0000.0008] # -0064 0044 005A ; [.1CF6.0020.0002][.1CF6.0020.0008] # -0044 0064 007A ; [.1CF6.0020.0008][.1CF6.0020.0002] # -0044 0064 005A ; [.1CF6.0020.0008][.1CF6.0020.0007][.0000.0000.0002] # -0044 0044 007A ; [.1CF6.0020.0008][.1CF6.0020.0007][.0000.0000.0008] # -0044 0044 005A ; [.1CF6.0020.0008][.1CF6.0020.0008] # -0064 0064 007A 0073 ; [.1CF7.0020.0002][.1CF7.0020.0002] # -0064 0064 007A 0053 ; [.1CF7.0020.0002][.1CF7.0020.0007][.0000.0000.0002][.0000.0000.0002] # -0064 0064 005A 0073 ; [.1CF7.0020.0002][.1CF7.0020.0007][.0000.0000.0002][.0000.0000.0007] # -0064 0064 005A 0053 ; [.1CF7.0020.0002][.1CF7.0020.0007][.0000.0000.0002][.0000.0000.0008] # -0064 0044 007A 0073 ; [.1CF7.0020.0002][.1CF7.0020.0007][.0000.0000.0008][.0000.0000.0002] # -0064 0044 007A 0053 ; [.1CF7.0020.0002][.1CF7.0020.0007][.0000.0000.0008][.0000.0000.0007] # -0064 0044 005A 0073 ; [.1CF7.0020.0002][.1CF7.0020.0007][.0000.0000.0008][.0000.0000.0008] # -0064 0044 005A 0053 ; [.1CF7.0020.0002][.1CF7.0020.0008] # -0044 0064 007A 0073 ; [.1CF7.0020.0008][.1CF7.0020.0002] # -0044 0064 007A 0053 ; [.1CF7.0020.0008][.1CF7.0020.0007][.0000.0000.0002][.0000.0000.0002] # -0044 0064 005A 0073 ; [.1CF7.0020.0008][.1CF7.0020.0007][.0000.0000.0002][.0000.0000.0007] # -0044 0064 005A 0053 ; [.1CF7.0020.0008][.1CF7.0020.0007][.0000.0000.0002][.0000.0000.0008] # -0044 0044 007A 0073 ; [.1CF7.0020.0008][.1CF7.0020.0007][.0000.0000.0008][.0000.0000.0002] # -0044 0044 007A 0053 ; [.1CF7.0020.0008][.1CF7.0020.0007][.0000.0000.0008][.0000.0000.0007] # -0044 0044 005A 0073 ; [.1CF7.0020.0008][.1CF7.0020.0007][.0000.0000.0008][.0000.0000.0008] # -0044 0044 005A 0053 ; [.1CF7.0020.0008][.1CF7.0020.0008] # -0067 0067 0079 ; [.1D5B.0020.0002][.1D5B.0020.0002] # -0067 0067 0059 ; [.1D5B.0020.0002][.1D5B.0020.0007][.0000.0000.0002] # -0067 0047 0079 ; [.1D5B.0020.0002][.1D5B.0020.0007][.0000.0000.0008] # -0067 0047 0059 ; [.1D5B.0020.0002][.1D5B.0020.0008] # -0047 0067 0079 ; [.1D5B.0020.0008][.1D5B.0020.0002] # -0047 0067 0059 ; [.1D5B.0020.0008][.1D5B.0020.0007][.0000.0000.0002] # -0047 0047 0079 ; [.1D5B.0020.0008][.1D5B.0020.0007][.0000.0000.0008] # -0047 0047 0059 ; [.1D5B.0020.0008][.1D5B.0020.0008] # -006C 006C 0079 ; [.1DDE.0020.0002][.1DDE.0020.0002] # -006C 006C 0059 ; [.1DDE.0020.0002][.1DDE.0020.0007][.0000.0000.0002] # -006C 004C 0079 ; [.1DDE.0020.0002][.1DDE.0020.0007][.0000.0000.0008] # -006C 004C 0059 ; [.1DDE.0020.0002][.1DDE.0020.0008] # -004C 006C 0079 ; [.1DDE.0020.0008][.1DDE.0020.0002] # -004C 006C 0059 ; [.1DDE.0020.0008][.1DDE.0020.0007][.0000.0000.0002] # -004C 004C 0079 ; [.1DDE.0020.0008][.1DDE.0020.0007][.0000.0000.0008] # -004C 004C 0059 ; [.1DDE.0020.0008][.1DDE.0020.0008] # -006E 006E 0079 ; [.1E20.0020.0002][.1E20.0020.0002] # -006E 006E 0059 ; [.1E20.0020.0002][.1E20.0020.0007][.0000.0000.0002] # -006E 004E 0079 ; [.1E20.0020.0002][.1E20.0020.0007][.0000.0000.0008] # -006E 004E 0059 ; [.1E20.0020.0002][.1E20.0020.0008] # -004E 006E 0079 ; [.1E20.0020.0008][.1E20.0020.0002] # -004E 006E 0059 ; [.1E20.0020.0008][.1E20.0020.0007][.0000.0000.0002] # -004E 004E 0079 ; [.1E20.0020.0008][.1E20.0020.0007][.0000.0000.0008] # -004E 004E 0059 ; [.1E20.0020.0008][.1E20.0020.0008] # -0073 0073 007A ; [.1ED8.0020.0002][.1ED8.0020.0002] # -0073 0073 005A ; [.1ED8.0020.0002][.1ED8.0020.0007][.0000.0000.0002] # -0073 0053 007A ; [.1ED8.0020.0002][.1ED8.0020.0007][.0000.0000.0008] # -0073 0053 005A ; [.1ED8.0020.0002][.1ED8.0020.0008] # -0053 0073 007A ; [.1ED8.0020.0008][.1ED8.0020.0002] # -0053 0073 005A ; [.1ED8.0020.0008][.1ED8.0020.0007][.0000.0000.0002] # -0053 0053 007A ; [.1ED8.0020.0008][.1ED8.0020.0007][.0000.0000.0008] # -0053 0053 005A ; [.1ED8.0020.0008][.1ED8.0020.0008] # -0074 0074 0079 ; [.1EFC.0020.0002][.1EFC.0020.0002] # -0074 0074 0059 ; [.1EFC.0020.0002][.1EFC.0020.0007][.0000.0000.0002] # -0074 0054 0079 ; [.1EFC.0020.0002][.1EFC.0020.0007][.0000.0000.0008] # -0074 0054 0059 ; [.1EFC.0020.0002][.1EFC.0020.0008] # -0054 0074 0079 ; [.1EFC.0020.0008][.1EFC.0020.0002] # -0054 0074 0059 ; [.1EFC.0020.0008][.1EFC.0020.0007][.0000.0000.0002] # -0054 0054 0079 ; [.1EFC.0020.0008][.1EFC.0020.0007][.0000.0000.0008] # -0054 0054 0059 ; [.1EFC.0020.0008][.1EFC.0020.0008] # -007A 007A 0073 ; [.1F88.0020.0002][.1F88.0020.0002] # -007A 007A 0053 ; [.1F88.0020.0002][.1F88.0020.0007][.0000.0000.0002] # -007A 005A 0073 ; [.1F88.0020.0002][.1F88.0020.0007][.0000.0000.0008] # -007A 005A 0053 ; [.1F88.0020.0002][.1F88.0020.0008] # -005A 007A 0073 ; [.1F88.0020.0008][.1F88.0020.0002] # -005A 007A 0053 ; [.1F88.0020.0008][.1F88.0020.0007][.0000.0000.0002] # -005A 005A 0073 ; [.1F88.0020.0008][.1F88.0020.0007][.0000.0000.0008] # -005A 005A 0053 ; [.1F88.0020.0008][.1F88.0020.0008] # + locale_version => 1.31, + entry => <<'ENTRY', # for DUCET v13.0.0 +0063 0073 ; [.1FD7.0020.0002] # +0063 0053 ; [.1FD7.0020.0007][.0000.0000.0002] # +0043 0073 ; [.1FD7.0020.0007][.0000.0000.0008] # +0043 0053 ; [.1FD7.0020.0008] # +0064 007A ; [.1FEC.0020.0002] # +0064 005A ; [.1FEC.0020.0007][.0000.0000.0002] # +0044 007A ; [.1FEC.0020.0007][.0000.0000.0008] # +0044 005A ; [.1FEC.0020.0008] # +0064 007A 0073 ; [.1FED.0020.0002] # +0064 007A 0053 ; [.1FED.0020.0007][.0000.0000.0002][.0000.0000.0002] # +0064 005A 0073 ; [.1FED.0020.0007][.0000.0000.0002][.0000.0000.0007] # +0064 005A 0053 ; [.1FED.0020.0007][.0000.0000.0002][.0000.0000.0008] # +0044 007A 0073 ; [.1FED.0020.0007][.0000.0000.0008][.0000.0000.0002] # +0044 007A 0053 ; [.1FED.0020.0007][.0000.0000.0008][.0000.0000.0007] # +0044 005A 0073 ; [.1FED.0020.0007][.0000.0000.0008][.0000.0000.0008] # +0044 005A 0053 ; [.1FED.0020.0008] # +0067 0079 ; [.2052.0020.0002] # +0067 0059 ; [.2052.0020.0007][.0000.0000.0002] # +0047 0079 ; [.2052.0020.0007][.0000.0000.0008] # +0047 0059 ; [.2052.0020.0008] # +006C 0079 ; [.20D7.0020.0002] # +006C 0059 ; [.20D7.0020.0007][.0000.0000.0002] # +004C 0079 ; [.20D7.0020.0007][.0000.0000.0008] # +004C 0059 ; [.20D7.0020.0008] # +006E 0079 ; [.2119.0020.0002] # +006E 0059 ; [.2119.0020.0007][.0000.0000.0002] # +004E 0079 ; [.2119.0020.0007][.0000.0000.0008] # +004E 0059 ; [.2119.0020.0008] # +0073 007A ; [.21D3.0020.0002] # +0073 005A ; [.21D3.0020.0007][.0000.0000.0002] # +0053 007A ; [.21D3.0020.0007][.0000.0000.0008] # +0053 005A ; [.21D3.0020.0008] # +0074 0079 ; [.21F8.0020.0002] # +0074 0059 ; [.21F8.0020.0007][.0000.0000.0002] # +0054 0079 ; [.21F8.0020.0007][.0000.0000.0008] # +0054 0059 ; [.21F8.0020.0008] # +007A 0073 ; [.2287.0020.0002] # +007A 0053 ; [.2287.0020.0007][.0000.0000.0002] # +005A 0073 ; [.2287.0020.0007][.0000.0000.0008] # +005A 0053 ; [.2287.0020.0008] # +00F6 ; [.213D.0020.0002] # LATIN SMALL LETTER O WITH DIAERESIS +006F 0308 ; [.213D.0020.0002] # LATIN SMALL LETTER O WITH DIAERESIS +00D6 ; [.213D.0020.0008] # LATIN CAPITAL LETTER O WITH DIAERESIS +004F 0308 ; [.213D.0020.0008] # LATIN CAPITAL LETTER O WITH DIAERESIS +022B ; [.213D.0020.0002][.0000.0032.0002] # LATIN SMALL LETTER O WITH DIAERESIS AND MACRON +022A ; [.213D.0020.0008][.0000.0032.0002] # LATIN CAPITAL LETTER O WITH DIAERESIS AND MACRON +0151 ; [.213D.0021.0002] # LATIN SMALL LETTER O WITH DOUBLE ACUTE +006F 030B ; [.213D.0021.0002] # LATIN SMALL LETTER O WITH DOUBLE ACUTE +0150 ; [.213D.0021.0008] # LATIN CAPITAL LETTER O WITH DOUBLE ACUTE +004F 030B ; [.213D.0021.0008] # LATIN CAPITAL LETTER O WITH DOUBLE ACUTE +00FC ; [.2218.0020.0002] # LATIN SMALL LETTER U WITH DIAERESIS +0075 0308 ; [.2218.0020.0002] # LATIN SMALL LETTER U WITH DIAERESIS +00DC ; [.2218.0020.0008] # LATIN CAPITAL LETTER U WITH DIAERESIS +0055 0308 ; [.2218.0020.0008] # LATIN CAPITAL LETTER U WITH DIAERESIS +01DC ; [.2218.0020.0002][.0000.0025.0002] # LATIN SMALL LETTER U WITH DIAERESIS AND GRAVE +01DB ; [.2218.0020.0008][.0000.0025.0002] # LATIN CAPITAL LETTER U WITH DIAERESIS AND GRAVE +01D8 ; [.2218.0020.0002][.0000.0024.0002] # LATIN SMALL LETTER U WITH DIAERESIS AND ACUTE +01D7 ; [.2218.0020.0008][.0000.0024.0002] # LATIN CAPITAL LETTER U WITH DIAERESIS AND ACUTE +01D6 ; [.2218.0020.0002][.0000.0032.0002] # LATIN SMALL LETTER U WITH DIAERESIS AND MACRON +01D5 ; [.2218.0020.0008][.0000.0032.0002] # LATIN CAPITAL LETTER U WITH DIAERESIS AND MACRON +01DA ; [.2218.0020.0002][.0000.0028.0002] # LATIN SMALL LETTER U WITH DIAERESIS AND CARON +01D9 ; [.2218.0020.0008][.0000.0028.0002] # LATIN CAPITAL LETTER U WITH DIAERESIS AND CARON +0171 ; [.2218.0021.0002] # LATIN SMALL LETTER U WITH DOUBLE ACUTE +0075 030B ; [.2218.0021.0002] # LATIN SMALL LETTER U WITH DOUBLE ACUTE +0170 ; [.2218.0021.0008] # LATIN CAPITAL LETTER U WITH DOUBLE ACUTE +0055 030B ; [.2218.0021.0008] # LATIN CAPITAL LETTER U WITH DOUBLE ACUTE +0063 0063 0073 ; [.1FD7.0020.0002][.1FD7.0020.0002] # +0063 0063 0053 ; [.1FD7.0020.0002][.1FD7.0020.0007][.0000.0000.0002] # +0063 0043 0073 ; [.1FD7.0020.0002][.1FD7.0020.0007][.0000.0000.0008] # +0063 0043 0053 ; [.1FD7.0020.0002][.1FD7.0020.0008] # +0043 0063 0073 ; [.1FD7.0020.0008][.1FD7.0020.0002] # +0043 0063 0053 ; [.1FD7.0020.0008][.1FD7.0020.0007][.0000.0000.0002] # +0043 0043 0073 ; [.1FD7.0020.0008][.1FD7.0020.0007][.0000.0000.0008] # +0043 0043 0053 ; [.1FD7.0020.0008][.1FD7.0020.0008] # +0064 0064 007A ; [.1FEC.0020.0002][.1FEC.0020.0002] # +0064 0064 005A ; [.1FEC.0020.0002][.1FEC.0020.0007][.0000.0000.0002] # +0064 0044 007A ; [.1FEC.0020.0002][.1FEC.0020.0007][.0000.0000.0008] # +0064 0044 005A ; [.1FEC.0020.0002][.1FEC.0020.0008] # +0044 0064 007A ; [.1FEC.0020.0008][.1FEC.0020.0002] # +0044 0064 005A ; [.1FEC.0020.0008][.1FEC.0020.0007][.0000.0000.0002] # +0044 0044 007A ; [.1FEC.0020.0008][.1FEC.0020.0007][.0000.0000.0008] # +0044 0044 005A ; [.1FEC.0020.0008][.1FEC.0020.0008] # +0064 0064 007A 0073 ; [.1FED.0020.0002][.1FED.0020.0002] # +0064 0064 007A 0053 ; [.1FED.0020.0002][.1FED.0020.0007][.0000.0000.0002][.0000.0000.0002] # +0064 0064 005A 0073 ; [.1FED.0020.0002][.1FED.0020.0007][.0000.0000.0002][.0000.0000.0007] # +0064 0064 005A 0053 ; [.1FED.0020.0002][.1FED.0020.0007][.0000.0000.0002][.0000.0000.0008] # +0064 0044 007A 0073 ; [.1FED.0020.0002][.1FED.0020.0007][.0000.0000.0008][.0000.0000.0002] # +0064 0044 007A 0053 ; [.1FED.0020.0002][.1FED.0020.0007][.0000.0000.0008][.0000.0000.0007] # +0064 0044 005A 0073 ; [.1FED.0020.0002][.1FED.0020.0007][.0000.0000.0008][.0000.0000.0008] # +0064 0044 005A 0053 ; [.1FED.0020.0002][.1FED.0020.0008] # +0044 0064 007A 0073 ; [.1FED.0020.0008][.1FED.0020.0002] # +0044 0064 007A 0053 ; [.1FED.0020.0008][.1FED.0020.0007][.0000.0000.0002][.0000.0000.0002] # +0044 0064 005A 0073 ; [.1FED.0020.0008][.1FED.0020.0007][.0000.0000.0002][.0000.0000.0007] # +0044 0064 005A 0053 ; [.1FED.0020.0008][.1FED.0020.0007][.0000.0000.0002][.0000.0000.0008] # +0044 0044 007A 0073 ; [.1FED.0020.0008][.1FED.0020.0007][.0000.0000.0008][.0000.0000.0002] # +0044 0044 007A 0053 ; [.1FED.0020.0008][.1FED.0020.0007][.0000.0000.0008][.0000.0000.0007] # +0044 0044 005A 0073 ; [.1FED.0020.0008][.1FED.0020.0007][.0000.0000.0008][.0000.0000.0008] # +0044 0044 005A 0053 ; [.1FED.0020.0008][.1FED.0020.0008] # +0067 0067 0079 ; [.2052.0020.0002][.2052.0020.0002] # +0067 0067 0059 ; [.2052.0020.0002][.2052.0020.0007][.0000.0000.0002] # +0067 0047 0079 ; [.2052.0020.0002][.2052.0020.0007][.0000.0000.0008] # +0067 0047 0059 ; [.2052.0020.0002][.2052.0020.0008] # +0047 0067 0079 ; [.2052.0020.0008][.2052.0020.0002] # +0047 0067 0059 ; [.2052.0020.0008][.2052.0020.0007][.0000.0000.0002] # +0047 0047 0079 ; [.2052.0020.0008][.2052.0020.0007][.0000.0000.0008] # +0047 0047 0059 ; [.2052.0020.0008][.2052.0020.0008] # +006C 006C 0079 ; [.20D7.0020.0002][.20D7.0020.0002] # +006C 006C 0059 ; [.20D7.0020.0002][.20D7.0020.0007][.0000.0000.0002] # +006C 004C 0079 ; [.20D7.0020.0002][.20D7.0020.0007][.0000.0000.0008] # +006C 004C 0059 ; [.20D7.0020.0002][.20D7.0020.0008] # +004C 006C 0079 ; [.20D7.0020.0008][.20D7.0020.0002] # +004C 006C 0059 ; [.20D7.0020.0008][.20D7.0020.0007][.0000.0000.0002] # +004C 004C 0079 ; [.20D7.0020.0008][.20D7.0020.0007][.0000.0000.0008] # +004C 004C 0059 ; [.20D7.0020.0008][.20D7.0020.0008] # +006E 006E 0079 ; [.2119.0020.0002][.2119.0020.0002] # +006E 006E 0059 ; [.2119.0020.0002][.2119.0020.0007][.0000.0000.0002] # +006E 004E 0079 ; [.2119.0020.0002][.2119.0020.0007][.0000.0000.0008] # +006E 004E 0059 ; [.2119.0020.0002][.2119.0020.0008] # +004E 006E 0079 ; [.2119.0020.0008][.2119.0020.0002] # +004E 006E 0059 ; [.2119.0020.0008][.2119.0020.0007][.0000.0000.0002] # +004E 004E 0079 ; [.2119.0020.0008][.2119.0020.0007][.0000.0000.0008] # +004E 004E 0059 ; [.2119.0020.0008][.2119.0020.0008] # +0073 0073 007A ; [.21D3.0020.0002][.21D3.0020.0002] # +0073 0073 005A ; [.21D3.0020.0002][.21D3.0020.0007][.0000.0000.0002] # +0073 0053 007A ; [.21D3.0020.0002][.21D3.0020.0007][.0000.0000.0008] # +0073 0053 005A ; [.21D3.0020.0002][.21D3.0020.0008] # +0053 0073 007A ; [.21D3.0020.0008][.21D3.0020.0002] # +0053 0073 005A ; [.21D3.0020.0008][.21D3.0020.0007][.0000.0000.0002] # +0053 0053 007A ; [.21D3.0020.0008][.21D3.0020.0007][.0000.0000.0008] # +0053 0053 005A ; [.21D3.0020.0008][.21D3.0020.0008] # +0074 0074 0079 ; [.21F8.0020.0002][.21F8.0020.0002] # +0074 0074 0059 ; [.21F8.0020.0002][.21F8.0020.0007][.0000.0000.0002] # +0074 0054 0079 ; [.21F8.0020.0002][.21F8.0020.0007][.0000.0000.0008] # +0074 0054 0059 ; [.21F8.0020.0002][.21F8.0020.0008] # +0054 0074 0079 ; [.21F8.0020.0008][.21F8.0020.0002] # +0054 0074 0059 ; [.21F8.0020.0008][.21F8.0020.0007][.0000.0000.0002] # +0054 0054 0079 ; [.21F8.0020.0008][.21F8.0020.0007][.0000.0000.0008] # +0054 0054 0059 ; [.21F8.0020.0008][.21F8.0020.0008] # +007A 007A 0073 ; [.2287.0020.0002][.2287.0020.0002] # +007A 007A 0053 ; [.2287.0020.0002][.2287.0020.0007][.0000.0000.0002] # +007A 005A 0073 ; [.2287.0020.0002][.2287.0020.0007][.0000.0000.0008] # +007A 005A 0053 ; [.2287.0020.0002][.2287.0020.0008] # +005A 007A 0073 ; [.2287.0020.0008][.2287.0020.0002] # +005A 007A 0053 ; [.2287.0020.0008][.2287.0020.0007][.0000.0000.0002] # +005A 005A 0073 ; [.2287.0020.0008][.2287.0020.0007][.0000.0000.0008] # +005A 005A 0053 ; [.2287.0020.0008][.2287.0020.0008] # ENTRY }; diff --git a/gnu/usr.bin/perl/cpan/Unicode-Collate/Collate/Locale/hy.pl b/gnu/usr.bin/perl/cpan/Unicode-Collate/Collate/Locale/hy.pl index 8f245705bb7..e03cba74715 100644 --- a/gnu/usr.bin/perl/cpan/Unicode-Collate/Collate/Locale/hy.pl +++ b/gnu/usr.bin/perl/cpan/Unicode-Collate/Collate/Locale/hy.pl @@ -1,9 +1,9 @@ +{ - locale_version => 1.27, - entry => <<'ENTRY', # for DUCET v10.0.0 -0587 ; [.2319.0020.0002][.FFF1.0000.0000] # ARMENIAN SMALL LIGATURE ECH YIWN -0584 ; [.2319.0020.0002][.FFF0.0000.0000] # ARMENIAN SMALL LETTER KEH -0535 0582 ; [.2319.0020.0008][.FFF1.0000.0000] # -0554 ; [.2319.0020.0008][.FFF0.0000.0000] # ARMENIAN CAPITAL LETTER KEH + locale_version => 1.31, + entry => <<'ENTRY', # for DUCET v13.0.0 +0587 ; [.261A.0020.0002][.FFF1.0000.0000] # ARMENIAN SMALL LIGATURE ECH YIWN +0584 ; [.261A.0020.0002][.FFF0.0000.0000] # ARMENIAN SMALL LETTER KEH +0535 0582 ; [.261A.0020.0008][.FFF1.0000.0000] # +0554 ; [.261A.0020.0008][.FFF0.0000.0000] # ARMENIAN CAPITAL LETTER KEH ENTRY }; diff --git a/gnu/usr.bin/perl/cpan/Unicode-Collate/Collate/Locale/ig.pl b/gnu/usr.bin/perl/cpan/Unicode-Collate/Collate/Locale/ig.pl index f6127d15434..99681bab1b3 100644 --- a/gnu/usr.bin/perl/cpan/Unicode-Collate/Collate/Locale/ig.pl +++ b/gnu/usr.bin/perl/cpan/Unicode-Collate/Collate/Locale/ig.pl @@ -1,54 +1,54 @@ +{ - locale_version => 1.27, - entry => <<'ENTRY', # for DUCET v10.0.0 -0063 0068 ; [.1CC7.0020.0002] # -0043 0068 ; [.1CC7.0020.0007] # -0043 0048 ; [.1CC7.0020.0008] # -0067 0062 ; [.1D5B.0020.0002] # -0047 0062 ; [.1D5B.0020.0007] # -0047 0042 ; [.1D5B.0020.0008] # -0067 0068 ; [.1D5C.0020.0002] # -0047 0068 ; [.1D5C.0020.0007] # -0047 0048 ; [.1D5C.0020.0008] # -0067 0077 ; [.1D5D.0020.0002] # -0047 0077 ; [.1D5D.0020.0007] # -0047 0057 ; [.1D5D.0020.0008] # -1ECB ; [.1D99.0020.0002] # LATIN SMALL LETTER I WITH DOT BELOW -0069 0323 ; [.1D99.0020.0002] # LATIN SMALL LETTER I WITH DOT BELOW -1ECA ; [.1D99.0020.0008] # LATIN CAPITAL LETTER I WITH DOT BELOW -0049 0323 ; [.1D99.0020.0008] # LATIN CAPITAL LETTER I WITH DOT BELOW -006B 0070 ; [.1DCC.0020.0002] # -004B 0070 ; [.1DCC.0020.0007] # -004B 0050 ; [.1DCC.0020.0008] # -006B 0077 ; [.1DCD.0020.0002] # -004B 0077 ; [.1DCD.0020.0007] # -004B 0057 ; [.1DCD.0020.0008] # -1E45 ; [.1E20.0020.0002] # LATIN SMALL LETTER N WITH DOT ABOVE -006E 0307 ; [.1E20.0020.0002] # LATIN SMALL LETTER N WITH DOT ABOVE -1E44 ; [.1E20.0020.0008] # LATIN CAPITAL LETTER N WITH DOT ABOVE -004E 0307 ; [.1E20.0020.0008] # LATIN CAPITAL LETTER N WITH DOT ABOVE -006E 0077 ; [.1E21.0020.0002] # -004E 0077 ; [.1E21.0020.0007] # -004E 0057 ; [.1E21.0020.0008] # -006E 0079 ; [.1E22.0020.0002] # -004E 0079 ; [.1E22.0020.0007] # -004E 0059 ; [.1E22.0020.0008] # -1ECD ; [.1E44.0020.0002] # LATIN SMALL LETTER O WITH DOT BELOW -006F 0323 ; [.1E44.0020.0002] # LATIN SMALL LETTER O WITH DOT BELOW -1ECC ; [.1E44.0020.0008] # LATIN CAPITAL LETTER O WITH DOT BELOW -004F 0323 ; [.1E44.0020.0008] # LATIN CAPITAL LETTER O WITH DOT BELOW -1ED9 ; [.1E44.0020.0002][.0000.0027.0002] # LATIN SMALL LETTER O WITH CIRCUMFLEX AND DOT BELOW -1ED8 ; [.1E44.0020.0008][.0000.0027.0002] # LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND DOT BELOW -1EE3 ; [.1E44.0020.0002][.0000.003F.0002] # LATIN SMALL LETTER O WITH HORN AND DOT BELOW -1EE2 ; [.1E44.0020.0008][.0000.003F.0002] # LATIN CAPITAL LETTER O WITH HORN AND DOT BELOW -0073 0068 ; [.1ED8.0020.0002] # -0053 0068 ; [.1ED8.0020.0007] # -0053 0048 ; [.1ED8.0020.0008] # -1EE5 ; [.1F1C.0020.0002] # LATIN SMALL LETTER U WITH DOT BELOW -0075 0323 ; [.1F1C.0020.0002] # LATIN SMALL LETTER U WITH DOT BELOW -1EE4 ; [.1F1C.0020.0008] # LATIN CAPITAL LETTER U WITH DOT BELOW -0055 0323 ; [.1F1C.0020.0008] # LATIN CAPITAL LETTER U WITH DOT BELOW -1EF1 ; [.1F1C.0020.0002][.0000.003F.0002] # LATIN SMALL LETTER U WITH HORN AND DOT BELOW -1EF0 ; [.1F1C.0020.0008][.0000.003F.0002] # LATIN CAPITAL LETTER U WITH HORN AND DOT BELOW + locale_version => 1.31, + entry => <<'ENTRY', # for DUCET v13.0.0 +0063 0068 ; [.1FBD.0020.0002] # +0043 0068 ; [.1FBD.0020.0007] # +0043 0048 ; [.1FBD.0020.0008] # +0067 0062 ; [.2052.0020.0002] # +0047 0062 ; [.2052.0020.0007] # +0047 0042 ; [.2052.0020.0008] # +0067 0068 ; [.2053.0020.0002] # +0047 0068 ; [.2053.0020.0007] # +0047 0048 ; [.2053.0020.0008] # +0067 0077 ; [.2054.0020.0002] # +0047 0077 ; [.2054.0020.0007] # +0047 0057 ; [.2054.0020.0008] # +1ECB ; [.2091.0020.0002] # LATIN SMALL LETTER I WITH DOT BELOW +0069 0323 ; [.2091.0020.0002] # LATIN SMALL LETTER I WITH DOT BELOW +1ECA ; [.2091.0020.0008] # LATIN CAPITAL LETTER I WITH DOT BELOW +0049 0323 ; [.2091.0020.0008] # LATIN CAPITAL LETTER I WITH DOT BELOW +006B 0070 ; [.20C5.0020.0002] # +004B 0070 ; [.20C5.0020.0007] # +004B 0050 ; [.20C5.0020.0008] # +006B 0077 ; [.20C6.0020.0002] # +004B 0077 ; [.20C6.0020.0007] # +004B 0057 ; [.20C6.0020.0008] # +1E45 ; [.2119.0020.0002] # LATIN SMALL LETTER N WITH DOT ABOVE +006E 0307 ; [.2119.0020.0002] # LATIN SMALL LETTER N WITH DOT ABOVE +1E44 ; [.2119.0020.0008] # LATIN CAPITAL LETTER N WITH DOT ABOVE +004E 0307 ; [.2119.0020.0008] # LATIN CAPITAL LETTER N WITH DOT ABOVE +006E 0077 ; [.211A.0020.0002] # +004E 0077 ; [.211A.0020.0007] # +004E 0057 ; [.211A.0020.0008] # +006E 0079 ; [.211B.0020.0002] # +004E 0079 ; [.211B.0020.0007] # +004E 0059 ; [.211B.0020.0008] # +1ECD ; [.213D.0020.0002] # LATIN SMALL LETTER O WITH DOT BELOW +006F 0323 ; [.213D.0020.0002] # LATIN SMALL LETTER O WITH DOT BELOW +1ECC ; [.213D.0020.0008] # LATIN CAPITAL LETTER O WITH DOT BELOW +004F 0323 ; [.213D.0020.0008] # LATIN CAPITAL LETTER O WITH DOT BELOW +1ED9 ; [.213D.0020.0002][.0000.0027.0002] # LATIN SMALL LETTER O WITH CIRCUMFLEX AND DOT BELOW +1ED8 ; [.213D.0020.0008][.0000.0027.0002] # LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND DOT BELOW +1EE3 ; [.213D.0020.0002][.0000.003F.0002] # LATIN SMALL LETTER O WITH HORN AND DOT BELOW +1EE2 ; [.213D.0020.0008][.0000.003F.0002] # LATIN CAPITAL LETTER O WITH HORN AND DOT BELOW +0073 0068 ; [.21D3.0020.0002] # +0053 0068 ; [.21D3.0020.0007] # +0053 0048 ; [.21D3.0020.0008] # +1EE5 ; [.2218.0020.0002] # LATIN SMALL LETTER U WITH DOT BELOW +0075 0323 ; [.2218.0020.0002] # LATIN SMALL LETTER U WITH DOT BELOW +1EE4 ; [.2218.0020.0008] # LATIN CAPITAL LETTER U WITH DOT BELOW +0055 0323 ; [.2218.0020.0008] # LATIN CAPITAL LETTER U WITH DOT BELOW +1EF1 ; [.2218.0020.0002][.0000.003F.0002] # LATIN SMALL LETTER U WITH HORN AND DOT BELOW +1EF0 ; [.2218.0020.0008][.0000.003F.0002] # LATIN CAPITAL LETTER U WITH HORN AND DOT BELOW ENTRY }; diff --git a/gnu/usr.bin/perl/cpan/Unicode-Collate/Collate/Locale/is.pl b/gnu/usr.bin/perl/cpan/Unicode-Collate/Collate/Locale/is.pl index 9887f6b2a95..8ae880f97c7 100644 --- a/gnu/usr.bin/perl/cpan/Unicode-Collate/Collate/Locale/is.pl +++ b/gnu/usr.bin/perl/cpan/Unicode-Collate/Collate/Locale/is.pl @@ -1,81 +1,81 @@ +{ - locale_version => 1.27, - entry => <<'ENTRY', # for DUCET v10.0.0 -00E1 ; [.1CC5.0020.0002] # LATIN SMALL LETTER A WITH ACUTE -0061 0301 ; [.1CC5.0020.0002] # LATIN SMALL LETTER A WITH ACUTE -0061 0341 ; [.1CC5.0020.0002] # LATIN SMALL LETTER A WITH ACUTE -00C1 ; [.1CC5.0020.0008] # LATIN CAPITAL LETTER A WITH ACUTE -0041 0301 ; [.1CC5.0020.0008] # LATIN CAPITAL LETTER A WITH ACUTE -0041 0341 ; [.1CC5.0020.0008] # LATIN CAPITAL LETTER A WITH ACUTE -0111 ; [.1CF5.0021.0002] # LATIN SMALL LETTER D WITH STROKE -0064 0335 ; [.1CF5.0021.0002] # LATIN SMALL LETTER D WITH STROKE -0110 ; [.1CF5.0021.0008] # LATIN CAPITAL LETTER D WITH STROKE -0044 0335 ; [.1CF5.0021.0008] # LATIN CAPITAL LETTER D WITH STROKE -00F0 ; [.1CF6.0020.0002] # LATIN SMALL LETTER ETH -1DD9 ; [.1CF6.0020.0002] # COMBINING LATIN SMALL LETTER ETH -00D0 ; [.1CF6.0020.0008] # LATIN CAPITAL LETTER ETH -00E9 ; [.1D4A.0020.0002] # LATIN SMALL LETTER E WITH ACUTE -0065 0301 ; [.1D4A.0020.0002] # LATIN SMALL LETTER E WITH ACUTE -0065 0341 ; [.1D4A.0020.0002] # LATIN SMALL LETTER E WITH ACUTE -00C9 ; [.1D4A.0020.0008] # LATIN CAPITAL LETTER E WITH ACUTE -0045 0301 ; [.1D4A.0020.0008] # LATIN CAPITAL LETTER E WITH ACUTE -0045 0341 ; [.1D4A.0020.0008] # LATIN CAPITAL LETTER E WITH ACUTE -00ED ; [.1DB1.0020.0002] # LATIN SMALL LETTER I WITH ACUTE -0069 0301 ; [.1DB1.0020.0002] # LATIN SMALL LETTER I WITH ACUTE -0069 0341 ; [.1DB1.0020.0002] # LATIN SMALL LETTER I WITH ACUTE -00CD ; [.1DB1.0020.0008] # LATIN CAPITAL LETTER I WITH ACUTE -0049 0301 ; [.1DB1.0020.0008] # LATIN CAPITAL LETTER I WITH ACUTE -0049 0341 ; [.1DB1.0020.0008] # LATIN CAPITAL LETTER I WITH ACUTE -00F3 ; [.1E71.0020.0002] # LATIN SMALL LETTER O WITH ACUTE -006F 0301 ; [.1E71.0020.0002] # LATIN SMALL LETTER O WITH ACUTE -006F 0341 ; [.1E71.0020.0002] # LATIN SMALL LETTER O WITH ACUTE -00D3 ; [.1E71.0020.0008] # LATIN CAPITAL LETTER O WITH ACUTE -004F 0301 ; [.1E71.0020.0008] # LATIN CAPITAL LETTER O WITH ACUTE -004F 0341 ; [.1E71.0020.0008] # LATIN CAPITAL LETTER O WITH ACUTE -00FA ; [.1F48.0020.0002] # LATIN SMALL LETTER U WITH ACUTE -0075 0301 ; [.1F48.0020.0002] # LATIN SMALL LETTER U WITH ACUTE -0075 0341 ; [.1F48.0020.0002] # LATIN SMALL LETTER U WITH ACUTE -00DA ; [.1F48.0020.0008] # LATIN CAPITAL LETTER U WITH ACUTE -0055 0301 ; [.1F48.0020.0008] # LATIN CAPITAL LETTER U WITH ACUTE -0055 0341 ; [.1F48.0020.0008] # LATIN CAPITAL LETTER U WITH ACUTE -00FD ; [.1F86.0020.0002] # LATIN SMALL LETTER Y WITH ACUTE -0079 0301 ; [.1F86.0020.0002] # LATIN SMALL LETTER Y WITH ACUTE -0079 0341 ; [.1F86.0020.0002] # LATIN SMALL LETTER Y WITH ACUTE -00DD ; [.1F86.0020.0008] # LATIN CAPITAL LETTER Y WITH ACUTE -0059 0301 ; [.1F86.0020.0008] # LATIN CAPITAL LETTER Y WITH ACUTE -0059 0341 ; [.1F86.0020.0008] # LATIN CAPITAL LETTER Y WITH ACUTE -00E6 ; [.1FFC.0020.0002] # LATIN SMALL LETTER AE -1DD4 ; [.1FFC.0020.0002] # COMBINING LATIN SMALL LETTER AE -00C6 ; [.1FFC.0020.0008] # LATIN CAPITAL LETTER AE -1D2D ; [.1FFC.0020.0014] # MODIFIER LETTER CAPITAL AE -01FD ; [.1FFC.0020.0002][.0000.0024.0002] # LATIN SMALL LETTER AE WITH ACUTE -01FC ; [.1FFC.0020.0008][.0000.0024.0002] # LATIN CAPITAL LETTER AE WITH ACUTE -01E3 ; [.1FFC.0020.0002][.0000.0032.0002] # LATIN SMALL LETTER AE WITH MACRON -01E2 ; [.1FFC.0020.0008][.0000.0032.0002] # LATIN CAPITAL LETTER AE WITH MACRON -00E4 ; [.1FFC.0021.0002] # LATIN SMALL LETTER A WITH DIAERESIS -0061 0308 ; [.1FFC.0021.0002] # LATIN SMALL LETTER A WITH DIAERESIS -00C4 ; [.1FFC.0021.0008] # LATIN CAPITAL LETTER A WITH DIAERESIS -0041 0308 ; [.1FFC.0021.0008] # LATIN CAPITAL LETTER A WITH DIAERESIS -01DF ; [.1FFC.0021.0002][.0000.0032.0002] # LATIN SMALL LETTER A WITH DIAERESIS AND MACRON -01DE ; [.1FFC.0021.0008][.0000.0032.0002] # LATIN CAPITAL LETTER A WITH DIAERESIS AND MACRON -00F6 ; [.1FFD.0020.0002] # LATIN SMALL LETTER O WITH DIAERESIS -006F 0308 ; [.1FFD.0020.0002] # LATIN SMALL LETTER O WITH DIAERESIS -00D6 ; [.1FFD.0020.0008] # LATIN CAPITAL LETTER O WITH DIAERESIS -004F 0308 ; [.1FFD.0020.0008] # LATIN CAPITAL LETTER O WITH DIAERESIS -022B ; [.1FFD.0020.0002][.0000.0032.0002] # LATIN SMALL LETTER O WITH DIAERESIS AND MACRON -022A ; [.1FFD.0020.0008][.0000.0032.0002] # LATIN CAPITAL LETTER O WITH DIAERESIS AND MACRON -00F8 ; [.1FFD.0021.0002] # LATIN SMALL LETTER O WITH STROKE -006F 0338 ; [.1FFD.0021.0002] # LATIN SMALL LETTER O WITH STROKE -00D8 ; [.1FFD.0021.0008] # LATIN CAPITAL LETTER O WITH STROKE -004F 0338 ; [.1FFD.0021.0008] # LATIN CAPITAL LETTER O WITH STROKE -01FF ; [.1FFD.0021.0002][.0000.0024.0002] # LATIN SMALL LETTER O WITH STROKE AND ACUTE -01FE ; [.1FFD.0021.0008][.0000.0024.0002] # LATIN CAPITAL LETTER O WITH STROKE AND ACUTE -00E5 ; [.1FFE.0020.0002] # LATIN SMALL LETTER A WITH RING ABOVE -0061 030A ; [.1FFE.0020.0002] # LATIN SMALL LETTER A WITH RING ABOVE -00C5 ; [.1FFE.0020.0008] # LATIN CAPITAL LETTER A WITH RING ABOVE -0041 030A ; [.1FFE.0020.0008] # LATIN CAPITAL LETTER A WITH RING ABOVE -212B ; [.1FFE.0020.0008] # ANGSTROM SIGN -01FB ; [.1FFE.0020.0002][.0000.0024.0002] # LATIN SMALL LETTER A WITH RING ABOVE AND ACUTE -01FA ; [.1FFE.0020.0008][.0000.0024.0002] # LATIN CAPITAL LETTER A WITH RING ABOVE AND ACUTE + locale_version => 1.31, + entry => <<'ENTRY', # for DUCET v13.0.0 +00E1 ; [.1FBB.0020.0002] # LATIN SMALL LETTER A WITH ACUTE +0061 0301 ; [.1FBB.0020.0002] # LATIN SMALL LETTER A WITH ACUTE +0061 0341 ; [.1FBB.0020.0002] # LATIN SMALL LETTER A WITH ACUTE +00C1 ; [.1FBB.0020.0008] # LATIN CAPITAL LETTER A WITH ACUTE +0041 0301 ; [.1FBB.0020.0008] # LATIN CAPITAL LETTER A WITH ACUTE +0041 0341 ; [.1FBB.0020.0008] # LATIN CAPITAL LETTER A WITH ACUTE +0111 ; [.1FEB.0021.0002] # LATIN SMALL LETTER D WITH STROKE +0064 0335 ; [.1FEB.0021.0002] # LATIN SMALL LETTER D WITH STROKE +0110 ; [.1FEB.0021.0008] # LATIN CAPITAL LETTER D WITH STROKE +0044 0335 ; [.1FEB.0021.0008] # LATIN CAPITAL LETTER D WITH STROKE +00F0 ; [.1FEC.0020.0002] # LATIN SMALL LETTER ETH +1DD9 ; [.1FEC.0020.0002] # COMBINING LATIN SMALL LETTER ETH +00D0 ; [.1FEC.0020.0008] # LATIN CAPITAL LETTER ETH +00E9 ; [.2041.0020.0002] # LATIN SMALL LETTER E WITH ACUTE +0065 0301 ; [.2041.0020.0002] # LATIN SMALL LETTER E WITH ACUTE +0065 0341 ; [.2041.0020.0002] # LATIN SMALL LETTER E WITH ACUTE +00C9 ; [.2041.0020.0008] # LATIN CAPITAL LETTER E WITH ACUTE +0045 0301 ; [.2041.0020.0008] # LATIN CAPITAL LETTER E WITH ACUTE +0045 0341 ; [.2041.0020.0008] # LATIN CAPITAL LETTER E WITH ACUTE +00ED ; [.20AA.0020.0002] # LATIN SMALL LETTER I WITH ACUTE +0069 0301 ; [.20AA.0020.0002] # LATIN SMALL LETTER I WITH ACUTE +0069 0341 ; [.20AA.0020.0002] # LATIN SMALL LETTER I WITH ACUTE +00CD ; [.20AA.0020.0008] # LATIN CAPITAL LETTER I WITH ACUTE +0049 0301 ; [.20AA.0020.0008] # LATIN CAPITAL LETTER I WITH ACUTE +0049 0341 ; [.20AA.0020.0008] # LATIN CAPITAL LETTER I WITH ACUTE +00F3 ; [.216A.0020.0002] # LATIN SMALL LETTER O WITH ACUTE +006F 0301 ; [.216A.0020.0002] # LATIN SMALL LETTER O WITH ACUTE +006F 0341 ; [.216A.0020.0002] # LATIN SMALL LETTER O WITH ACUTE +00D3 ; [.216A.0020.0008] # LATIN CAPITAL LETTER O WITH ACUTE +004F 0301 ; [.216A.0020.0008] # LATIN CAPITAL LETTER O WITH ACUTE +004F 0341 ; [.216A.0020.0008] # LATIN CAPITAL LETTER O WITH ACUTE +00FA ; [.2246.0020.0002] # LATIN SMALL LETTER U WITH ACUTE +0075 0301 ; [.2246.0020.0002] # LATIN SMALL LETTER U WITH ACUTE +0075 0341 ; [.2246.0020.0002] # LATIN SMALL LETTER U WITH ACUTE +00DA ; [.2246.0020.0008] # LATIN CAPITAL LETTER U WITH ACUTE +0055 0301 ; [.2246.0020.0008] # LATIN CAPITAL LETTER U WITH ACUTE +0055 0341 ; [.2246.0020.0008] # LATIN CAPITAL LETTER U WITH ACUTE +00FD ; [.2285.0020.0002] # LATIN SMALL LETTER Y WITH ACUTE +0079 0301 ; [.2285.0020.0002] # LATIN SMALL LETTER Y WITH ACUTE +0079 0341 ; [.2285.0020.0002] # LATIN SMALL LETTER Y WITH ACUTE +00DD ; [.2285.0020.0008] # LATIN CAPITAL LETTER Y WITH ACUTE +0059 0301 ; [.2285.0020.0008] # LATIN CAPITAL LETTER Y WITH ACUTE +0059 0341 ; [.2285.0020.0008] # LATIN CAPITAL LETTER Y WITH ACUTE +00E6 ; [.22FB.0020.0002] # LATIN SMALL LETTER AE +1DD4 ; [.22FB.0020.0002] # COMBINING LATIN SMALL LETTER AE +00C6 ; [.22FB.0020.0008] # LATIN CAPITAL LETTER AE +1D2D ; [.22FB.0020.0014] # MODIFIER LETTER CAPITAL AE +01FD ; [.22FB.0020.0002][.0000.0024.0002] # LATIN SMALL LETTER AE WITH ACUTE +01FC ; [.22FB.0020.0008][.0000.0024.0002] # LATIN CAPITAL LETTER AE WITH ACUTE +01E3 ; [.22FB.0020.0002][.0000.0032.0002] # LATIN SMALL LETTER AE WITH MACRON +01E2 ; [.22FB.0020.0008][.0000.0032.0002] # LATIN CAPITAL LETTER AE WITH MACRON +00E4 ; [.22FB.0021.0002] # LATIN SMALL LETTER A WITH DIAERESIS +0061 0308 ; [.22FB.0021.0002] # LATIN SMALL LETTER A WITH DIAERESIS +00C4 ; [.22FB.0021.0008] # LATIN CAPITAL LETTER A WITH DIAERESIS +0041 0308 ; [.22FB.0021.0008] # LATIN CAPITAL LETTER A WITH DIAERESIS +01DF ; [.22FB.0021.0002][.0000.0032.0002] # LATIN SMALL LETTER A WITH DIAERESIS AND MACRON +01DE ; [.22FB.0021.0008][.0000.0032.0002] # LATIN CAPITAL LETTER A WITH DIAERESIS AND MACRON +00F6 ; [.22FC.0020.0002] # LATIN SMALL LETTER O WITH DIAERESIS +006F 0308 ; [.22FC.0020.0002] # LATIN SMALL LETTER O WITH DIAERESIS +00D6 ; [.22FC.0020.0008] # LATIN CAPITAL LETTER O WITH DIAERESIS +004F 0308 ; [.22FC.0020.0008] # LATIN CAPITAL LETTER O WITH DIAERESIS +022B ; [.22FC.0020.0002][.0000.0032.0002] # LATIN SMALL LETTER O WITH DIAERESIS AND MACRON +022A ; [.22FC.0020.0008][.0000.0032.0002] # LATIN CAPITAL LETTER O WITH DIAERESIS AND MACRON +00F8 ; [.22FC.0021.0002] # LATIN SMALL LETTER O WITH STROKE +006F 0338 ; [.22FC.0021.0002] # LATIN SMALL LETTER O WITH STROKE +00D8 ; [.22FC.0021.0008] # LATIN CAPITAL LETTER O WITH STROKE +004F 0338 ; [.22FC.0021.0008] # LATIN CAPITAL LETTER O WITH STROKE +01FF ; [.22FC.0021.0002][.0000.0024.0002] # LATIN SMALL LETTER O WITH STROKE AND ACUTE +01FE ; [.22FC.0021.0008][.0000.0024.0002] # LATIN CAPITAL LETTER O WITH STROKE AND ACUTE +00E5 ; [.22FD.0020.0002] # LATIN SMALL LETTER A WITH RING ABOVE +0061 030A ; [.22FD.0020.0002] # LATIN SMALL LETTER A WITH RING ABOVE +00C5 ; [.22FD.0020.0008] # LATIN CAPITAL LETTER A WITH RING ABOVE +0041 030A ; [.22FD.0020.0008] # LATIN CAPITAL LETTER A WITH RING ABOVE +212B ; [.22FD.0020.0008] # ANGSTROM SIGN +01FB ; [.22FD.0020.0002][.0000.0024.0002] # LATIN SMALL LETTER A WITH RING ABOVE AND ACUTE +01FA ; [.22FD.0020.0008][.0000.0024.0002] # LATIN CAPITAL LETTER A WITH RING ABOVE AND ACUTE ENTRY }; diff --git a/gnu/usr.bin/perl/cpan/Unicode-Collate/Collate/Locale/ja.pl b/gnu/usr.bin/perl/cpan/Unicode-Collate/Collate/Locale/ja.pl index e6de1eac720..9008202dcd3 100644 --- a/gnu/usr.bin/perl/cpan/Unicode-Collate/Collate/Locale/ja.pl +++ b/gnu/usr.bin/perl/cpan/Unicode-Collate/Collate/Locale/ja.pl @@ -1,1337 +1,1337 @@ use Unicode::Collate::CJK::JISX0208; +{ - locale_version => 1.27, + locale_version => 1.31, overrideCJK => \&Unicode::Collate::CJK::JISX0208::weightJISX0208, - entry => <<'ENTRY', # for DUCET v10.0.0 -30A1 ; [.3E71.0020.000F.0002] # KATAKANA LETTER SMALL A -30A2 ; [.3E71.0020.0011.0002] # KATAKANA LETTER A -30A3 ; [.3E72.0020.000F.0002] # KATAKANA LETTER SMALL I -30A4 ; [.3E72.0020.0011.0002] # KATAKANA LETTER I -30A5 ; [.3E73.0020.000F.0002] # KATAKANA LETTER SMALL U -30A6 ; [.3E73.0020.0011.0002] # KATAKANA LETTER U -30A7 ; [.3E75.0020.000F.0002] # KATAKANA LETTER SMALL E -30A8 ; [.3E75.0020.0011.0002] # KATAKANA LETTER E -30A9 ; [.3E76.0020.000F.0002] # KATAKANA LETTER SMALL O -30AA ; [.3E76.0020.0011.0002] # KATAKANA LETTER O -30AB ; [.3E77.0020.0011.0002] # KATAKANA LETTER KA -30AC ; [.3E77.0020.0011.0002][.0000.0037.0002] # KATAKANA LETTER GA -30AD ; [.3E78.0020.0011.0002] # KATAKANA LETTER KI -30AE ; [.3E78.0020.0011.0002][.0000.0037.0002] # KATAKANA LETTER GI -30AF ; [.3E79.0020.0011.0002] # KATAKANA LETTER KU -30B0 ; [.3E79.0020.0011.0002][.0000.0037.0002] # KATAKANA LETTER GU -30B1 ; [.3E7A.0020.0011.0002] # KATAKANA LETTER KE -30B2 ; [.3E7A.0020.0011.0002][.0000.0037.0002] # KATAKANA LETTER GE -30B3 ; [.3E7B.0020.0011.0002] # KATAKANA LETTER KO -30B4 ; [.3E7B.0020.0011.0002][.0000.0037.0002] # KATAKANA LETTER GO -30B5 ; [.3E7C.0020.0011.0002] # KATAKANA LETTER SA -30B6 ; [.3E7C.0020.0011.0002][.0000.0037.0002] # KATAKANA LETTER ZA -30B7 ; [.3E7D.0020.0011.0002] # KATAKANA LETTER SI -30B8 ; [.3E7D.0020.0011.0002][.0000.0037.0002] # KATAKANA LETTER ZI -30B9 ; [.3E7E.0020.0011.0002] # KATAKANA LETTER SU -30BA ; [.3E7E.0020.0011.0002][.0000.0037.0002] # KATAKANA LETTER ZU -30BB ; [.3E7F.0020.0011.0002] # KATAKANA LETTER SE -30BC ; [.3E7F.0020.0011.0002][.0000.0037.0002] # KATAKANA LETTER ZE -30BD ; [.3E80.0020.0011.0002] # KATAKANA LETTER SO -30BE ; [.3E80.0020.0011.0002][.0000.0037.0002] # KATAKANA LETTER ZO -30BF ; [.3E81.0020.0011.0002] # KATAKANA LETTER TA -30C0 ; [.3E81.0020.0011.0002][.0000.0037.0002] # KATAKANA LETTER DA -30C1 ; [.3E82.0020.0011.0002] # KATAKANA LETTER TI -30C2 ; [.3E82.0020.0011.0002][.0000.0037.0002] # KATAKANA LETTER DI -30C3 ; [.3E83.0020.000F.0002] # KATAKANA LETTER SMALL TU -30C4 ; [.3E83.0020.0011.0002] # KATAKANA LETTER TU -30C5 ; [.3E83.0020.0011.0002][.0000.0037.0002] # KATAKANA LETTER DU -30C6 ; [.3E84.0020.0011.0002] # KATAKANA LETTER TE -30C7 ; [.3E84.0020.0011.0002][.0000.0037.0002] # KATAKANA LETTER DE -30C8 ; [.3E85.0020.0011.0002] # KATAKANA LETTER TO -30C9 ; [.3E85.0020.0011.0002][.0000.0037.0002] # KATAKANA LETTER DO -30CA ; [.3E86.0020.0011.0002] # KATAKANA LETTER NA -30CB ; [.3E87.0020.0011.0002] # KATAKANA LETTER NI -30CC ; [.3E88.0020.0011.0002] # KATAKANA LETTER NU -30CD ; [.3E89.0020.0011.0002] # KATAKANA LETTER NE -30CE ; [.3E8A.0020.0011.0002] # KATAKANA LETTER NO -30CF ; [.3E8B.0020.0011.0002] # KATAKANA LETTER HA -30D0 ; [.3E8B.0020.0011.0002][.0000.0037.0002] # KATAKANA LETTER BA -30D1 ; [.3E8B.0020.0011.0002][.0000.0038.0002] # KATAKANA LETTER PA -30D2 ; [.3E8C.0020.0011.0002] # KATAKANA LETTER HI -30D3 ; [.3E8C.0020.0011.0002][.0000.0037.0002] # KATAKANA LETTER BI -30D4 ; [.3E8C.0020.0011.0002][.0000.0038.0002] # KATAKANA LETTER PI -30D5 ; [.3E8D.0020.0011.0002] # KATAKANA LETTER HU -30D6 ; [.3E8D.0020.0011.0002][.0000.0037.0002] # KATAKANA LETTER BU -30D7 ; [.3E8D.0020.0011.0002][.0000.0038.0002] # KATAKANA LETTER PU -30D8 ; [.3E8E.0020.0011.0002] # KATAKANA LETTER HE -30D9 ; [.3E8E.0020.0011.0002][.0000.0037.0002] # KATAKANA LETTER BE -30DA ; [.3E8E.0020.0011.0002][.0000.0038.0002] # KATAKANA LETTER PE -30DB ; [.3E8F.0020.0011.0002] # KATAKANA LETTER HO -30DC ; [.3E8F.0020.0011.0002][.0000.0037.0002] # KATAKANA LETTER BO -30DD ; [.3E8F.0020.0011.0002][.0000.0038.0002] # KATAKANA LETTER PO -30DE ; [.3E90.0020.0011.0002] # KATAKANA LETTER MA -30DF ; [.3E91.0020.0011.0002] # KATAKANA LETTER MI -30E0 ; [.3E92.0020.0011.0002] # KATAKANA LETTER MU -30E1 ; [.3E93.0020.0011.0002] # KATAKANA LETTER ME -30E2 ; [.3E94.0020.0011.0002] # KATAKANA LETTER MO -30E3 ; [.3E95.0020.000F.0002] # KATAKANA LETTER SMALL YA -30E4 ; [.3E95.0020.0011.0002] # KATAKANA LETTER YA -30E5 ; [.3E96.0020.000F.0002] # KATAKANA LETTER SMALL YU -30E6 ; [.3E96.0020.0011.0002] # KATAKANA LETTER YU -30E7 ; [.3E97.0020.000F.0002] # KATAKANA LETTER SMALL YO -30E8 ; [.3E97.0020.0011.0002] # KATAKANA LETTER YO -30E9 ; [.3E98.0020.0011.0002] # KATAKANA LETTER RA -30EA ; [.3E99.0020.0011.0002] # KATAKANA LETTER RI -30EB ; [.3E9A.0020.0011.0002] # KATAKANA LETTER RU -30EC ; [.3E9B.0020.0011.0002] # KATAKANA LETTER RE -30ED ; [.3E9C.0020.0011.0002] # KATAKANA LETTER RO -30EE ; [.3E9D.0020.000F.0002] # KATAKANA LETTER SMALL WA -30EF ; [.3E9D.0020.0011.0002] # KATAKANA LETTER WA -30F0 ; [.3E9E.0020.0011.0002] # KATAKANA LETTER WI -30F1 ; [.3E9F.0020.0011.0002] # KATAKANA LETTER WE -30F2 ; [.3EA0.0020.0011.0002] # KATAKANA LETTER WO -30F3 ; [.3EA1.0020.0011.0002] # KATAKANA LETTER N -30F4 ; [.3E73.0020.0011.0002][.0000.0037.0002] # KATAKANA LETTER VU -30F5 ; [.3E77.0020.000F.0002] # KATAKANA LETTER SMALL KA -30F6 ; [.3E7A.0020.000F.0002] # KATAKANA LETTER SMALL KE -30F7 ; [.3E9D.0020.0011.0002][.0000.0037.0002] # KATAKANA LETTER VA -30F8 ; [.3E9E.0020.0011.0002][.0000.0037.0002] # KATAKANA LETTER VI -30F9 ; [.3E9F.0020.0011.0002][.0000.0037.0002] # KATAKANA LETTER VE -30FA ; [.3EA0.0020.0011.0002][.0000.0037.0002] # KATAKANA LETTER VO -30FD ; [.1C74.0020.0002.0002] # KATAKANA ITERATION MARK -30FE ; [.1C74.0020.0002.0002][.0000.0037.0002] # KATAKANA VOICED ITERATION MARK -3041 ; [.3E71.0020.000F.0001] # HIRAGANA LETTER SMALL A -3042 ; [.3E71.0020.0011.0001] # HIRAGANA LETTER A -3043 ; [.3E72.0020.000F.0001] # HIRAGANA LETTER SMALL I -3044 ; [.3E72.0020.0011.0001] # HIRAGANA LETTER I -3045 ; [.3E73.0020.000F.0001] # HIRAGANA LETTER SMALL U -3046 ; [.3E73.0020.0011.0001] # HIRAGANA LETTER U -3047 ; [.3E75.0020.000F.0001] # HIRAGANA LETTER SMALL E -3048 ; [.3E75.0020.0011.0001] # HIRAGANA LETTER E -3049 ; [.3E76.0020.000F.0001] # HIRAGANA LETTER SMALL O -304A ; [.3E76.0020.0011.0001] # HIRAGANA LETTER O -304B ; [.3E77.0020.0011.0001] # HIRAGANA LETTER KA -304C ; [.3E77.0020.0011.0001][.0000.0037.0002] # HIRAGANA LETTER GA -304D ; [.3E78.0020.0011.0001] # HIRAGANA LETTER KI -304E ; [.3E78.0020.0011.0001][.0000.0037.0002] # HIRAGANA LETTER GI -304F ; [.3E79.0020.0011.0001] # HIRAGANA LETTER KU -3050 ; [.3E79.0020.0011.0001][.0000.0037.0002] # HIRAGANA LETTER GU -3051 ; [.3E7A.0020.0011.0001] # HIRAGANA LETTER KE -3052 ; [.3E7A.0020.0011.0001][.0000.0037.0002] # HIRAGANA LETTER GE -3053 ; [.3E7B.0020.0011.0001] # HIRAGANA LETTER KO -3054 ; [.3E7B.0020.0011.0001][.0000.0037.0002] # HIRAGANA LETTER GO -3055 ; [.3E7C.0020.0011.0001] # HIRAGANA LETTER SA -3056 ; [.3E7C.0020.0011.0001][.0000.0037.0002] # HIRAGANA LETTER ZA -3057 ; [.3E7D.0020.0011.0001] # HIRAGANA LETTER SI -3058 ; [.3E7D.0020.0011.0001][.0000.0037.0002] # HIRAGANA LETTER ZI -3059 ; [.3E7E.0020.0011.0001] # HIRAGANA LETTER SU -305A ; [.3E7E.0020.0011.0001][.0000.0037.0002] # HIRAGANA LETTER ZU -305B ; [.3E7F.0020.0011.0001] # HIRAGANA LETTER SE -305C ; [.3E7F.0020.0011.0001][.0000.0037.0002] # HIRAGANA LETTER ZE -305D ; [.3E80.0020.0011.0001] # HIRAGANA LETTER SO -305E ; [.3E80.0020.0011.0001][.0000.0037.0002] # HIRAGANA LETTER ZO -305F ; [.3E81.0020.0011.0001] # HIRAGANA LETTER TA -3060 ; [.3E81.0020.0011.0001][.0000.0037.0002] # HIRAGANA LETTER DA -3061 ; [.3E82.0020.0011.0001] # HIRAGANA LETTER TI -3062 ; [.3E82.0020.0011.0001][.0000.0037.0002] # HIRAGANA LETTER DI -3063 ; [.3E83.0020.000F.0001] # HIRAGANA LETTER SMALL TU -3064 ; [.3E83.0020.0011.0001] # HIRAGANA LETTER TU -3065 ; [.3E83.0020.0011.0001][.0000.0037.0002] # HIRAGANA LETTER DU -3066 ; [.3E84.0020.0011.0001] # HIRAGANA LETTER TE -3067 ; [.3E84.0020.0011.0001][.0000.0037.0002] # HIRAGANA LETTER DE -3068 ; [.3E85.0020.0011.0001] # HIRAGANA LETTER TO -3069 ; [.3E85.0020.0011.0001][.0000.0037.0002] # HIRAGANA LETTER DO -306A ; [.3E86.0020.0011.0001] # HIRAGANA LETTER NA -306B ; [.3E87.0020.0011.0001] # HIRAGANA LETTER NI -306C ; [.3E88.0020.0011.0001] # HIRAGANA LETTER NU -306D ; [.3E89.0020.0011.0001] # HIRAGANA LETTER NE -306E ; [.3E8A.0020.0011.0001] # HIRAGANA LETTER NO -306F ; [.3E8B.0020.0011.0001] # HIRAGANA LETTER HA -3070 ; [.3E8B.0020.0011.0001][.0000.0037.0002] # HIRAGANA LETTER BA -3071 ; [.3E8B.0020.0011.0001][.0000.0038.0002] # HIRAGANA LETTER PA -3072 ; [.3E8C.0020.0011.0001] # HIRAGANA LETTER HI -3073 ; [.3E8C.0020.0011.0001][.0000.0037.0002] # HIRAGANA LETTER BI -3074 ; [.3E8C.0020.0011.0001][.0000.0038.0002] # HIRAGANA LETTER PI -3075 ; [.3E8D.0020.0011.0001] # HIRAGANA LETTER HU -3076 ; [.3E8D.0020.0011.0001][.0000.0037.0002] # HIRAGANA LETTER BU -3077 ; [.3E8D.0020.0011.0001][.0000.0038.0002] # HIRAGANA LETTER PU -3078 ; [.3E8E.0020.0011.0001] # HIRAGANA LETTER HE -3079 ; [.3E8E.0020.0011.0001][.0000.0037.0002] # HIRAGANA LETTER BE -307A ; [.3E8E.0020.0011.0001][.0000.0038.0002] # HIRAGANA LETTER PE -307B ; [.3E8F.0020.0011.0001] # HIRAGANA LETTER HO -307C ; [.3E8F.0020.0011.0001][.0000.0037.0002] # HIRAGANA LETTER BO -307D ; [.3E8F.0020.0011.0001][.0000.0038.0002] # HIRAGANA LETTER PO -307E ; [.3E90.0020.0011.0001] # HIRAGANA LETTER MA -307F ; [.3E91.0020.0011.0001] # HIRAGANA LETTER MI -3080 ; [.3E92.0020.0011.0001] # HIRAGANA LETTER MU -3081 ; [.3E93.0020.0011.0001] # HIRAGANA LETTER ME -3082 ; [.3E94.0020.0011.0001] # HIRAGANA LETTER MO -3083 ; [.3E95.0020.000F.0001] # HIRAGANA LETTER SMALL YA -3084 ; [.3E95.0020.0011.0001] # HIRAGANA LETTER YA -3085 ; [.3E96.0020.000F.0001] # HIRAGANA LETTER SMALL YU -3086 ; [.3E96.0020.0011.0001] # HIRAGANA LETTER YU -3087 ; [.3E97.0020.000F.0001] # HIRAGANA LETTER SMALL YO -3088 ; [.3E97.0020.0011.0001] # HIRAGANA LETTER YO -3089 ; [.3E98.0020.0011.0001] # HIRAGANA LETTER RA -308A ; [.3E99.0020.0011.0001] # HIRAGANA LETTER RI -308B ; [.3E9A.0020.0011.0001] # HIRAGANA LETTER RU -308C ; [.3E9B.0020.0011.0001] # HIRAGANA LETTER RE -308D ; [.3E9C.0020.0011.0001] # HIRAGANA LETTER RO -308E ; [.3E9D.0020.000F.0001] # HIRAGANA LETTER SMALL WA -308F ; [.3E9D.0020.0011.0001] # HIRAGANA LETTER WA -3090 ; [.3E9E.0020.0011.0001] # HIRAGANA LETTER WI -3091 ; [.3E9F.0020.0011.0001] # HIRAGANA LETTER WE -3092 ; [.3EA0.0020.0011.0001] # HIRAGANA LETTER WO -3093 ; [.3EA1.0020.0011.0001] # HIRAGANA LETTER N -3094 ; [.3E73.0020.0011.0001][.0000.0037.0002] # HIRAGANA LETTER VU -3095 ; [.3E77.0020.000F.0001] # HIRAGANA LETTER SMALL KA -3096 ; [.3E7A.0020.000F.0001] # HIRAGANA LETTER SMALL KE -309D ; [.1C74.0020.0002.0001] # HIRAGANA ITERATION MARK -309E ; [.1C74.0020.0002.0001][.0000.0037.0002] # HIRAGANA VOICED ITERATION MARK + entry => <<'ENTRY', # for DUCET v13.0.0 +30A1 ; [.42DA.0020.000F.0002] # KATAKANA LETTER SMALL A +30A2 ; [.42DA.0020.0011.0002] # KATAKANA LETTER A +30A3 ; [.42DB.0020.000F.0002] # KATAKANA LETTER SMALL I +30A4 ; [.42DB.0020.0011.0002] # KATAKANA LETTER I +30A5 ; [.42DC.0020.000F.0002] # KATAKANA LETTER SMALL U +30A6 ; [.42DC.0020.0011.0002] # KATAKANA LETTER U +30A7 ; [.42DE.0020.000F.0002] # KATAKANA LETTER SMALL E +30A8 ; [.42DE.0020.0011.0002] # KATAKANA LETTER E +30A9 ; [.42DF.0020.000F.0002] # KATAKANA LETTER SMALL O +30AA ; [.42DF.0020.0011.0002] # KATAKANA LETTER O +30AB ; [.42E0.0020.0011.0002] # KATAKANA LETTER KA +30AC ; [.42E0.0020.0011.0002][.0000.0037.0002] # KATAKANA LETTER GA +30AD ; [.42E1.0020.0011.0002] # KATAKANA LETTER KI +30AE ; [.42E1.0020.0011.0002][.0000.0037.0002] # KATAKANA LETTER GI +30AF ; [.42E2.0020.0011.0002] # KATAKANA LETTER KU +30B0 ; [.42E2.0020.0011.0002][.0000.0037.0002] # KATAKANA LETTER GU +30B1 ; [.42E3.0020.0011.0002] # KATAKANA LETTER KE +30B2 ; [.42E3.0020.0011.0002][.0000.0037.0002] # KATAKANA LETTER GE +30B3 ; [.42E4.0020.0011.0002] # KATAKANA LETTER KO +30B4 ; [.42E4.0020.0011.0002][.0000.0037.0002] # KATAKANA LETTER GO +30B5 ; [.42E5.0020.0011.0002] # KATAKANA LETTER SA +30B6 ; [.42E5.0020.0011.0002][.0000.0037.0002] # KATAKANA LETTER ZA +30B7 ; [.42E6.0020.0011.0002] # KATAKANA LETTER SI +30B8 ; [.42E6.0020.0011.0002][.0000.0037.0002] # KATAKANA LETTER ZI +30B9 ; [.42E7.0020.0011.0002] # KATAKANA LETTER SU +30BA ; [.42E7.0020.0011.0002][.0000.0037.0002] # KATAKANA LETTER ZU +30BB ; [.42E8.0020.0011.0002] # KATAKANA LETTER SE +30BC ; [.42E8.0020.0011.0002][.0000.0037.0002] # KATAKANA LETTER ZE +30BD ; [.42E9.0020.0011.0002] # KATAKANA LETTER SO +30BE ; [.42E9.0020.0011.0002][.0000.0037.0002] # KATAKANA LETTER ZO +30BF ; [.42EA.0020.0011.0002] # KATAKANA LETTER TA +30C0 ; [.42EA.0020.0011.0002][.0000.0037.0002] # KATAKANA LETTER DA +30C1 ; [.42EB.0020.0011.0002] # KATAKANA LETTER TI +30C2 ; [.42EB.0020.0011.0002][.0000.0037.0002] # KATAKANA LETTER DI +30C3 ; [.42EC.0020.000F.0002] # KATAKANA LETTER SMALL TU +30C4 ; [.42EC.0020.0011.0002] # KATAKANA LETTER TU +30C5 ; [.42EC.0020.0011.0002][.0000.0037.0002] # KATAKANA LETTER DU +30C6 ; [.42ED.0020.0011.0002] # KATAKANA LETTER TE +30C7 ; [.42ED.0020.0011.0002][.0000.0037.0002] # KATAKANA LETTER DE +30C8 ; [.42EE.0020.0011.0002] # KATAKANA LETTER TO +30C9 ; [.42EE.0020.0011.0002][.0000.0037.0002] # KATAKANA LETTER DO +30CA ; [.42EF.0020.0011.0002] # KATAKANA LETTER NA +30CB ; [.42F0.0020.0011.0002] # KATAKANA LETTER NI +30CC ; [.42F1.0020.0011.0002] # KATAKANA LETTER NU +30CD ; [.42F2.0020.0011.0002] # KATAKANA LETTER NE +30CE ; [.42F3.0020.0011.0002] # KATAKANA LETTER NO +30CF ; [.42F4.0020.0011.0002] # KATAKANA LETTER HA +30D0 ; [.42F4.0020.0011.0002][.0000.0037.0002] # KATAKANA LETTER BA +30D1 ; [.42F4.0020.0011.0002][.0000.0038.0002] # KATAKANA LETTER PA +30D2 ; [.42F5.0020.0011.0002] # KATAKANA LETTER HI +30D3 ; [.42F5.0020.0011.0002][.0000.0037.0002] # KATAKANA LETTER BI +30D4 ; [.42F5.0020.0011.0002][.0000.0038.0002] # KATAKANA LETTER PI +30D5 ; [.42F6.0020.0011.0002] # KATAKANA LETTER HU +30D6 ; [.42F6.0020.0011.0002][.0000.0037.0002] # KATAKANA LETTER BU +30D7 ; [.42F6.0020.0011.0002][.0000.0038.0002] # KATAKANA LETTER PU +30D8 ; [.42F7.0020.0011.0002] # KATAKANA LETTER HE +30D9 ; [.42F7.0020.0011.0002][.0000.0037.0002] # KATAKANA LETTER BE +30DA ; [.42F7.0020.0011.0002][.0000.0038.0002] # KATAKANA LETTER PE +30DB ; [.42F8.0020.0011.0002] # KATAKANA LETTER HO +30DC ; [.42F8.0020.0011.0002][.0000.0037.0002] # KATAKANA LETTER BO +30DD ; [.42F8.0020.0011.0002][.0000.0038.0002] # KATAKANA LETTER PO +30DE ; [.42F9.0020.0011.0002] # KATAKANA LETTER MA +30DF ; [.42FA.0020.0011.0002] # KATAKANA LETTER MI +30E0 ; [.42FB.0020.0011.0002] # KATAKANA LETTER MU +30E1 ; [.42FC.0020.0011.0002] # KATAKANA LETTER ME +30E2 ; [.42FD.0020.0011.0002] # KATAKANA LETTER MO +30E3 ; [.42FE.0020.000F.0002] # KATAKANA LETTER SMALL YA +30E4 ; [.42FE.0020.0011.0002] # KATAKANA LETTER YA +30E5 ; [.42FF.0020.000F.0002] # KATAKANA LETTER SMALL YU +30E6 ; [.42FF.0020.0011.0002] # KATAKANA LETTER YU +30E7 ; [.4300.0020.000F.0002] # KATAKANA LETTER SMALL YO +30E8 ; [.4300.0020.0011.0002] # KATAKANA LETTER YO +30E9 ; [.4301.0020.0011.0002] # KATAKANA LETTER RA +30EA ; [.4302.0020.0011.0002] # KATAKANA LETTER RI +30EB ; [.4303.0020.0011.0002] # KATAKANA LETTER RU +30EC ; [.4304.0020.0011.0002] # KATAKANA LETTER RE +30ED ; [.4305.0020.0011.0002] # KATAKANA LETTER RO +30EE ; [.4306.0020.000F.0002] # KATAKANA LETTER SMALL WA +30EF ; [.4306.0020.0011.0002] # KATAKANA LETTER WA +30F0 ; [.4307.0020.0011.0002] # KATAKANA LETTER WI +30F1 ; [.4308.0020.0011.0002] # KATAKANA LETTER WE +30F2 ; [.4309.0020.0011.0002] # KATAKANA LETTER WO +30F3 ; [.430A.0020.0011.0002] # KATAKANA LETTER N +30F4 ; [.42DC.0020.0011.0002][.0000.0037.0002] # KATAKANA LETTER VU +30F5 ; [.42E0.0020.000F.0002] # KATAKANA LETTER SMALL KA +30F6 ; [.42E3.0020.000F.0002] # KATAKANA LETTER SMALL KE +30F7 ; [.4306.0020.0011.0002][.0000.0037.0002] # KATAKANA LETTER VA +30F8 ; [.4307.0020.0011.0002][.0000.0037.0002] # KATAKANA LETTER VI +30F9 ; [.4308.0020.0011.0002][.0000.0037.0002] # KATAKANA LETTER VE +30FA ; [.4309.0020.0011.0002][.0000.0037.0002] # KATAKANA LETTER VO +30FD ; [.1F61.0020.0002.0002] # KATAKANA ITERATION MARK +30FE ; [.1F61.0020.0002.0002][.0000.0037.0002] # KATAKANA VOICED ITERATION MARK +3041 ; [.42DA.0020.000F.0001] # HIRAGANA LETTER SMALL A +3042 ; [.42DA.0020.0011.0001] # HIRAGANA LETTER A +3043 ; [.42DB.0020.000F.0001] # HIRAGANA LETTER SMALL I +3044 ; [.42DB.0020.0011.0001] # HIRAGANA LETTER I +3045 ; [.42DC.0020.000F.0001] # HIRAGANA LETTER SMALL U +3046 ; [.42DC.0020.0011.0001] # HIRAGANA LETTER U +3047 ; [.42DE.0020.000F.0001] # HIRAGANA LETTER SMALL E +3048 ; [.42DE.0020.0011.0001] # HIRAGANA LETTER E +3049 ; [.42DF.0020.000F.0001] # HIRAGANA LETTER SMALL O +304A ; [.42DF.0020.0011.0001] # HIRAGANA LETTER O +304B ; [.42E0.0020.0011.0001] # HIRAGANA LETTER KA +304C ; [.42E0.0020.0011.0001][.0000.0037.0002] # HIRAGANA LETTER GA +304D ; [.42E1.0020.0011.0001] # HIRAGANA LETTER KI +304E ; [.42E1.0020.0011.0001][.0000.0037.0002] # HIRAGANA LETTER GI +304F ; [.42E2.0020.0011.0001] # HIRAGANA LETTER KU +3050 ; [.42E2.0020.0011.0001][.0000.0037.0002] # HIRAGANA LETTER GU +3051 ; [.42E3.0020.0011.0001] # HIRAGANA LETTER KE +3052 ; [.42E3.0020.0011.0001][.0000.0037.0002] # HIRAGANA LETTER GE +3053 ; [.42E4.0020.0011.0001] # HIRAGANA LETTER KO +3054 ; [.42E4.0020.0011.0001][.0000.0037.0002] # HIRAGANA LETTER GO +3055 ; [.42E5.0020.0011.0001] # HIRAGANA LETTER SA +3056 ; [.42E5.0020.0011.0001][.0000.0037.0002] # HIRAGANA LETTER ZA +3057 ; [.42E6.0020.0011.0001] # HIRAGANA LETTER SI +3058 ; [.42E6.0020.0011.0001][.0000.0037.0002] # HIRAGANA LETTER ZI +3059 ; [.42E7.0020.0011.0001] # HIRAGANA LETTER SU +305A ; [.42E7.0020.0011.0001][.0000.0037.0002] # HIRAGANA LETTER ZU +305B ; [.42E8.0020.0011.0001] # HIRAGANA LETTER SE +305C ; [.42E8.0020.0011.0001][.0000.0037.0002] # HIRAGANA LETTER ZE +305D ; [.42E9.0020.0011.0001] # HIRAGANA LETTER SO +305E ; [.42E9.0020.0011.0001][.0000.0037.0002] # HIRAGANA LETTER ZO +305F ; [.42EA.0020.0011.0001] # HIRAGANA LETTER TA +3060 ; [.42EA.0020.0011.0001][.0000.0037.0002] # HIRAGANA LETTER DA +3061 ; [.42EB.0020.0011.0001] # HIRAGANA LETTER TI +3062 ; [.42EB.0020.0011.0001][.0000.0037.0002] # HIRAGANA LETTER DI +3063 ; [.42EC.0020.000F.0001] # HIRAGANA LETTER SMALL TU +3064 ; [.42EC.0020.0011.0001] # HIRAGANA LETTER TU +3065 ; [.42EC.0020.0011.0001][.0000.0037.0002] # HIRAGANA LETTER DU +3066 ; [.42ED.0020.0011.0001] # HIRAGANA LETTER TE +3067 ; [.42ED.0020.0011.0001][.0000.0037.0002] # HIRAGANA LETTER DE +3068 ; [.42EE.0020.0011.0001] # HIRAGANA LETTER TO +3069 ; [.42EE.0020.0011.0001][.0000.0037.0002] # HIRAGANA LETTER DO +306A ; [.42EF.0020.0011.0001] # HIRAGANA LETTER NA +306B ; [.42F0.0020.0011.0001] # HIRAGANA LETTER NI +306C ; [.42F1.0020.0011.0001] # HIRAGANA LETTER NU +306D ; [.42F2.0020.0011.0001] # HIRAGANA LETTER NE +306E ; [.42F3.0020.0011.0001] # HIRAGANA LETTER NO +306F ; [.42F4.0020.0011.0001] # HIRAGANA LETTER HA +3070 ; [.42F4.0020.0011.0001][.0000.0037.0002] # HIRAGANA LETTER BA +3071 ; [.42F4.0020.0011.0001][.0000.0038.0002] # HIRAGANA LETTER PA +3072 ; [.42F5.0020.0011.0001] # HIRAGANA LETTER HI +3073 ; [.42F5.0020.0011.0001][.0000.0037.0002] # HIRAGANA LETTER BI +3074 ; [.42F5.0020.0011.0001][.0000.0038.0002] # HIRAGANA LETTER PI +3075 ; [.42F6.0020.0011.0001] # HIRAGANA LETTER HU +3076 ; [.42F6.0020.0011.0001][.0000.0037.0002] # HIRAGANA LETTER BU +3077 ; [.42F6.0020.0011.0001][.0000.0038.0002] # HIRAGANA LETTER PU +3078 ; [.42F7.0020.0011.0001] # HIRAGANA LETTER HE +3079 ; [.42F7.0020.0011.0001][.0000.0037.0002] # HIRAGANA LETTER BE +307A ; [.42F7.0020.0011.0001][.0000.0038.0002] # HIRAGANA LETTER PE +307B ; [.42F8.0020.0011.0001] # HIRAGANA LETTER HO +307C ; [.42F8.0020.0011.0001][.0000.0037.0002] # HIRAGANA LETTER BO +307D ; [.42F8.0020.0011.0001][.0000.0038.0002] # HIRAGANA LETTER PO +307E ; [.42F9.0020.0011.0001] # HIRAGANA LETTER MA +307F ; [.42FA.0020.0011.0001] # HIRAGANA LETTER MI +3080 ; [.42FB.0020.0011.0001] # HIRAGANA LETTER MU +3081 ; [.42FC.0020.0011.0001] # HIRAGANA LETTER ME +3082 ; [.42FD.0020.0011.0001] # HIRAGANA LETTER MO +3083 ; [.42FE.0020.000F.0001] # HIRAGANA LETTER SMALL YA +3084 ; [.42FE.0020.0011.0001] # HIRAGANA LETTER YA +3085 ; [.42FF.0020.000F.0001] # HIRAGANA LETTER SMALL YU +3086 ; [.42FF.0020.0011.0001] # HIRAGANA LETTER YU +3087 ; [.4300.0020.000F.0001] # HIRAGANA LETTER SMALL YO +3088 ; [.4300.0020.0011.0001] # HIRAGANA LETTER YO +3089 ; [.4301.0020.0011.0001] # HIRAGANA LETTER RA +308A ; [.4302.0020.0011.0001] # HIRAGANA LETTER RI +308B ; [.4303.0020.0011.0001] # HIRAGANA LETTER RU +308C ; [.4304.0020.0011.0001] # HIRAGANA LETTER RE +308D ; [.4305.0020.0011.0001] # HIRAGANA LETTER RO +308E ; [.4306.0020.000F.0001] # HIRAGANA LETTER SMALL WA +308F ; [.4306.0020.0011.0001] # HIRAGANA LETTER WA +3090 ; [.4307.0020.0011.0001] # HIRAGANA LETTER WI +3091 ; [.4308.0020.0011.0001] # HIRAGANA LETTER WE +3092 ; [.4309.0020.0011.0001] # HIRAGANA LETTER WO +3093 ; [.430A.0020.0011.0001] # HIRAGANA LETTER N +3094 ; [.42DC.0020.0011.0001][.0000.0037.0002] # HIRAGANA LETTER VU +3095 ; [.42E0.0020.000F.0001] # HIRAGANA LETTER SMALL KA +3096 ; [.42E3.0020.000F.0001] # HIRAGANA LETTER SMALL KE +309D ; [.1F61.0020.0002.0001] # HIRAGANA ITERATION MARK +309E ; [.1F61.0020.0002.0001][.0000.0037.0002] # HIRAGANA VOICED ITERATION MARK 3000 ; [*0209.0020.0002] # IDEOGRAPHIC SPACE -FF01 ; [*0261.0020.0002] # FULLWIDTH EXCLAMATION MARK -FF02 ; [*030D.0020.0002] # FULLWIDTH QUOTATION MARK -FF03 ; [*0399.0020.0002] # FULLWIDTH NUMBER SIGN -FF04 ; [.1C77.0020.0002] # FULLWIDTH DOLLAR SIGN -FF05 ; [*039A.0020.0002] # FULLWIDTH PERCENT SIGN -FF06 ; [*0397.0020.0002] # FULLWIDTH AMPERSAND -FF07 ; [*0306.0020.0002] # FULLWIDTH APOSTROPHE -FF08 ; [*0318.0020.0002] # FULLWIDTH LEFT PARENTHESIS -FF09 ; [*0319.0020.0002] # FULLWIDTH RIGHT PARENTHESIS -FF0A ; [*0390.0020.0002] # FULLWIDTH ASTERISK -FF0B ; [*062C.0020.0002] # FULLWIDTH PLUS SIGN -FF0C ; [*0222.0020.0002] # FULLWIDTH COMMA +FF01 ; [*0267.0020.0002] # FULLWIDTH EXCLAMATION MARK +FF02 ; [*031D.0020.0002] # FULLWIDTH QUOTATION MARK +FF03 ; [*03AC.0020.0002] # FULLWIDTH NUMBER SIGN +FF04 ; [.1F64.0020.0002] # FULLWIDTH DOLLAR SIGN +FF05 ; [*03AD.0020.0002] # FULLWIDTH PERCENT SIGN +FF06 ; [*03A9.0020.0002] # FULLWIDTH AMPERSAND +FF07 ; [*0316.0020.0002] # FULLWIDTH APOSTROPHE +FF08 ; [*0328.0020.0002] # FULLWIDTH LEFT PARENTHESIS +FF09 ; [*0329.0020.0002] # FULLWIDTH RIGHT PARENTHESIS +FF0A ; [*03A1.0020.0002] # FULLWIDTH ASTERISK +FF0B ; [*0666.0020.0002] # FULLWIDTH PLUS SIGN +FF0C ; [*0223.0020.0002] # FULLWIDTH COMMA FF0D ; [*020D.0020.0002] # FULLWIDTH HYPHEN-MINUS -FF0E ; [*0278.0020.0002] # FULLWIDTH FULL STOP -FF0F ; [*0395.0020.0002] # FULLWIDTH SOLIDUS -FF10 ; [.1CA3.0020.0002] # FULLWIDTH DIGIT ZERO -FF11 ; [.1CA4.0020.0002] # FULLWIDTH DIGIT ONE -FF12 ; [.1CA5.0020.0002] # FULLWIDTH DIGIT TWO -FF13 ; [.1CA6.0020.0002] # FULLWIDTH DIGIT THREE -FF14 ; [.1CA7.0020.0002] # FULLWIDTH DIGIT FOUR -FF15 ; [.1CA8.0020.0002] # FULLWIDTH DIGIT FIVE -FF16 ; [.1CA9.0020.0002] # FULLWIDTH DIGIT SIX -FF17 ; [.1CAA.0020.0002] # FULLWIDTH DIGIT SEVEN -FF18 ; [.1CAB.0020.0002] # FULLWIDTH DIGIT EIGHT -FF19 ; [.1CAC.0020.0002] # FULLWIDTH DIGIT NINE -FF1A ; [*023A.0020.0002] # FULLWIDTH COLON -FF1B ; [*0234.0020.0002] # FULLWIDTH SEMICOLON -FF1C ; [*0630.0020.0002] # FULLWIDTH LESS-THAN SIGN -FF1D ; [*0631.0020.0002] # FULLWIDTH EQUALS SIGN -FF1E ; [*0632.0020.0002] # FULLWIDTH GREATER-THAN SIGN -FF1F ; [*0267.0020.0002] # FULLWIDTH QUESTION MARK -FF20 ; [*038F.0020.0002] # FULLWIDTH COMMERCIAL AT -FF21 ; [.1CAD.0020.0008] # FULLWIDTH LATIN CAPITAL LETTER A -FF22 ; [.1CC6.0020.0008] # FULLWIDTH LATIN CAPITAL LETTER B -FF23 ; [.1CE0.0020.0008] # FULLWIDTH LATIN CAPITAL LETTER C -FF24 ; [.1CF5.0020.0008] # FULLWIDTH LATIN CAPITAL LETTER D -FF25 ; [.1D10.0020.0008] # FULLWIDTH LATIN CAPITAL LETTER E -FF26 ; [.1D4B.0020.0008] # FULLWIDTH LATIN CAPITAL LETTER F -FF27 ; [.1D5A.0020.0008] # FULLWIDTH LATIN CAPITAL LETTER G -FF28 ; [.1D7E.0020.0008] # FULLWIDTH LATIN CAPITAL LETTER H -FF29 ; [.1D98.0020.0008] # FULLWIDTH LATIN CAPITAL LETTER I -FF2A ; [.1DB2.0020.0008] # FULLWIDTH LATIN CAPITAL LETTER J -FF2B ; [.1DCB.0020.0008] # FULLWIDTH LATIN CAPITAL LETTER K -FF2C ; [.1DDD.0020.0008] # FULLWIDTH LATIN CAPITAL LETTER L -FF2D ; [.1E10.0020.0008] # FULLWIDTH LATIN CAPITAL LETTER M -FF2E ; [.1E1F.0020.0008] # FULLWIDTH LATIN CAPITAL LETTER N -FF2F ; [.1E43.0020.0008] # FULLWIDTH LATIN CAPITAL LETTER O -FF30 ; [.1E72.0020.0008] # FULLWIDTH LATIN CAPITAL LETTER P -FF31 ; [.1E87.0020.0008] # FULLWIDTH LATIN CAPITAL LETTER Q -FF32 ; [.1E99.0020.0008] # FULLWIDTH LATIN CAPITAL LETTER R -FF33 ; [.1ED7.0020.0008] # FULLWIDTH LATIN CAPITAL LETTER S -FF34 ; [.1EFB.0020.0008] # FULLWIDTH LATIN CAPITAL LETTER T -FF35 ; [.1F1B.0020.0008] # FULLWIDTH LATIN CAPITAL LETTER U -FF36 ; [.1F49.0020.0008] # FULLWIDTH LATIN CAPITAL LETTER V -FF37 ; [.1F5B.0020.0008] # FULLWIDTH LATIN CAPITAL LETTER W -FF38 ; [.1F65.0020.0008] # FULLWIDTH LATIN CAPITAL LETTER X -FF39 ; [.1F71.0020.0008] # FULLWIDTH LATIN CAPITAL LETTER Y -FF3A ; [.1F87.0020.0008] # FULLWIDTH LATIN CAPITAL LETTER Z -FF3B ; [*031A.0020.0002] # FULLWIDTH LEFT SQUARE BRACKET -FF3C ; [*0306.0020.0002] # FULLWIDTH REVERSE SOLIDUS -FF3D ; [*031B.0020.0002] # FULLWIDTH RIGHT SQUARE BRACKET -FF3E ; [*049B.0020.0002] # FULLWIDTH CIRCUMFLEX ACCENT +FF0E ; [*027E.0020.0002] # FULLWIDTH FULL STOP +FF0F ; [*03A6.0020.0002] # FULLWIDTH SOLIDUS +FF10 ; [.1F98.0020.0002] # FULLWIDTH DIGIT ZERO +FF11 ; [.1F99.0020.0002] # FULLWIDTH DIGIT ONE +FF12 ; [.1F9A.0020.0002] # FULLWIDTH DIGIT TWO +FF13 ; [.1F9B.0020.0002] # FULLWIDTH DIGIT THREE +FF14 ; [.1F9C.0020.0002] # FULLWIDTH DIGIT FOUR +FF15 ; [.1F9D.0020.0002] # FULLWIDTH DIGIT FIVE +FF16 ; [.1F9E.0020.0002] # FULLWIDTH DIGIT SIX +FF17 ; [.1F9F.0020.0002] # FULLWIDTH DIGIT SEVEN +FF18 ; [.1FA0.0020.0002] # FULLWIDTH DIGIT EIGHT +FF19 ; [.1FA1.0020.0002] # FULLWIDTH DIGIT NINE +FF1A ; [*0240.0020.0002] # FULLWIDTH COLON +FF1B ; [*023A.0020.0002] # FULLWIDTH SEMICOLON +FF1C ; [*066A.0020.0002] # FULLWIDTH LESS-THAN SIGN +FF1D ; [*066B.0020.0002] # FULLWIDTH EQUALS SIGN +FF1E ; [*066C.0020.0002] # FULLWIDTH GREATER-THAN SIGN +FF1F ; [*026D.0020.0002] # FULLWIDTH QUESTION MARK +FF20 ; [*03A0.0020.0002] # FULLWIDTH COMMERCIAL AT +FF21 ; [.1FA2.0020.0008] # FULLWIDTH LATIN CAPITAL LETTER A +FF22 ; [.1FBC.0020.0008] # FULLWIDTH LATIN CAPITAL LETTER B +FF23 ; [.1FD6.0020.0008] # FULLWIDTH LATIN CAPITAL LETTER C +FF24 ; [.1FEB.0020.0008] # FULLWIDTH LATIN CAPITAL LETTER D +FF25 ; [.2007.0020.0008] # FULLWIDTH LATIN CAPITAL LETTER E +FF26 ; [.2042.0020.0008] # FULLWIDTH LATIN CAPITAL LETTER F +FF27 ; [.2051.0020.0008] # FULLWIDTH LATIN CAPITAL LETTER G +FF28 ; [.2075.0020.0008] # FULLWIDTH LATIN CAPITAL LETTER H +FF29 ; [.2090.0020.0008] # FULLWIDTH LATIN CAPITAL LETTER I +FF2A ; [.20AB.0020.0008] # FULLWIDTH LATIN CAPITAL LETTER J +FF2B ; [.20C4.0020.0008] # FULLWIDTH LATIN CAPITAL LETTER K +FF2C ; [.20D6.0020.0008] # FULLWIDTH LATIN CAPITAL LETTER L +FF2D ; [.2109.0020.0008] # FULLWIDTH LATIN CAPITAL LETTER M +FF2E ; [.2118.0020.0008] # FULLWIDTH LATIN CAPITAL LETTER N +FF2F ; [.213C.0020.0008] # FULLWIDTH LATIN CAPITAL LETTER O +FF30 ; [.216B.0020.0008] # FULLWIDTH LATIN CAPITAL LETTER P +FF31 ; [.2180.0020.0008] # FULLWIDTH LATIN CAPITAL LETTER Q +FF32 ; [.2193.0020.0008] # FULLWIDTH LATIN CAPITAL LETTER R +FF33 ; [.21D2.0020.0008] # FULLWIDTH LATIN CAPITAL LETTER S +FF34 ; [.21F7.0020.0008] # FULLWIDTH LATIN CAPITAL LETTER T +FF35 ; [.2217.0020.0008] # FULLWIDTH LATIN CAPITAL LETTER U +FF36 ; [.2247.0020.0008] # FULLWIDTH LATIN CAPITAL LETTER V +FF37 ; [.2259.0020.0008] # FULLWIDTH LATIN CAPITAL LETTER W +FF38 ; [.2264.0020.0008] # FULLWIDTH LATIN CAPITAL LETTER X +FF39 ; [.2270.0020.0008] # FULLWIDTH LATIN CAPITAL LETTER Y +FF3A ; [.2286.0020.0008] # FULLWIDTH LATIN CAPITAL LETTER Z +FF3B ; [*032A.0020.0002] # FULLWIDTH LEFT SQUARE BRACKET +FF3C ; [*0316.0020.0002] # FULLWIDTH REVERSE SOLIDUS +FF3D ; [*032B.0020.0002] # FULLWIDTH RIGHT SQUARE BRACKET +FF3E ; [*04B7.0020.0002] # FULLWIDTH CIRCUMFLEX ACCENT FF3F ; [*020B.0020.0002] # FULLWIDTH LOW LINE -FF40 ; [*0498.0020.0002] # FULLWIDTH GRAVE ACCENT -FF41 ; [.1CAD.0020.0002] # FULLWIDTH LATIN SMALL LETTER A -FF42 ; [.1CC6.0020.0002] # FULLWIDTH LATIN SMALL LETTER B -FF43 ; [.1CE0.0020.0002] # FULLWIDTH LATIN SMALL LETTER C -FF44 ; [.1CF5.0020.0002] # FULLWIDTH LATIN SMALL LETTER D -FF45 ; [.1D10.0020.0002] # FULLWIDTH LATIN SMALL LETTER E -FF46 ; [.1D4B.0020.0002] # FULLWIDTH LATIN SMALL LETTER F -FF47 ; [.1D5A.0020.0002] # FULLWIDTH LATIN SMALL LETTER G -FF48 ; [.1D7E.0020.0002] # FULLWIDTH LATIN SMALL LETTER H -FF49 ; [.1D98.0020.0002] # FULLWIDTH LATIN SMALL LETTER I -FF4A ; [.1DB2.0020.0002] # FULLWIDTH LATIN SMALL LETTER J -FF4B ; [.1DCB.0020.0002] # FULLWIDTH LATIN SMALL LETTER K -FF4C ; [.1DDD.0020.0002] # FULLWIDTH LATIN SMALL LETTER L -FF4D ; [.1E10.0020.0002] # FULLWIDTH LATIN SMALL LETTER M -FF4E ; [.1E1F.0020.0002] # FULLWIDTH LATIN SMALL LETTER N -FF4F ; [.1E43.0020.0002] # FULLWIDTH LATIN SMALL LETTER O -FF50 ; [.1E72.0020.0002] # FULLWIDTH LATIN SMALL LETTER P -FF51 ; [.1E87.0020.0002] # FULLWIDTH LATIN SMALL LETTER Q -FF52 ; [.1E99.0020.0002] # FULLWIDTH LATIN SMALL LETTER R -FF53 ; [.1ED7.0020.0002] # FULLWIDTH LATIN SMALL LETTER S -FF54 ; [.1EFB.0020.0002] # FULLWIDTH LATIN SMALL LETTER T -FF55 ; [.1F1B.0020.0002] # FULLWIDTH LATIN SMALL LETTER U -FF56 ; [.1F49.0020.0002] # FULLWIDTH LATIN SMALL LETTER V -FF57 ; [.1F5B.0020.0002] # FULLWIDTH LATIN SMALL LETTER W -FF58 ; [.1F65.0020.0002] # FULLWIDTH LATIN SMALL LETTER X -FF59 ; [.1F71.0020.0002] # FULLWIDTH LATIN SMALL LETTER Y -FF5A ; [.1F87.0020.0002] # FULLWIDTH LATIN SMALL LETTER Z -FF5B ; [*031C.0020.0002] # FULLWIDTH LEFT CURLY BRACKET -FF5C ; [*0634.0020.0002] # FULLWIDTH VERTICAL LINE -FF5D ; [*031D.0020.0002] # FULLWIDTH RIGHT CURLY BRACKET -FF5E ; [*0636.0020.0002] # FULLWIDTH TILDE -FF5F ; [*032E.0020.0002] # FULLWIDTH LEFT WHITE PARENTHESIS -FF60 ; [*032F.0020.0002] # FULLWIDTH RIGHT WHITE PARENTHESIS -FF61 ; [*028B.0020.0002] # HALFWIDTH IDEOGRAPHIC FULL STOP -FF62 ; [*0374.0020.0002] # HALFWIDTH LEFT CORNER BRACKET -FF63 ; [*0375.0020.0002] # HALFWIDTH RIGHT CORNER BRACKET -FF64 ; [*0231.0020.0002] # HALFWIDTH IDEOGRAPHIC COMMA +FF40 ; [*04B4.0020.0002] # FULLWIDTH GRAVE ACCENT +FF41 ; [.1FA2.0020.0002] # FULLWIDTH LATIN SMALL LETTER A +FF42 ; [.1FBC.0020.0002] # FULLWIDTH LATIN SMALL LETTER B +FF43 ; [.1FD6.0020.0002] # FULLWIDTH LATIN SMALL LETTER C +FF44 ; [.1FEB.0020.0002] # FULLWIDTH LATIN SMALL LETTER D +FF45 ; [.2007.0020.0002] # FULLWIDTH LATIN SMALL LETTER E +FF46 ; [.2042.0020.0002] # FULLWIDTH LATIN SMALL LETTER F +FF47 ; [.2051.0020.0002] # FULLWIDTH LATIN SMALL LETTER G +FF48 ; [.2075.0020.0002] # FULLWIDTH LATIN SMALL LETTER H +FF49 ; [.2090.0020.0002] # FULLWIDTH LATIN SMALL LETTER I +FF4A ; [.20AB.0020.0002] # FULLWIDTH LATIN SMALL LETTER J +FF4B ; [.20C4.0020.0002] # FULLWIDTH LATIN SMALL LETTER K +FF4C ; [.20D6.0020.0002] # FULLWIDTH LATIN SMALL LETTER L +FF4D ; [.2109.0020.0002] # FULLWIDTH LATIN SMALL LETTER M +FF4E ; [.2118.0020.0002] # FULLWIDTH LATIN SMALL LETTER N +FF4F ; [.213C.0020.0002] # FULLWIDTH LATIN SMALL LETTER O +FF50 ; [.216B.0020.0002] # FULLWIDTH LATIN SMALL LETTER P +FF51 ; [.2180.0020.0002] # FULLWIDTH LATIN SMALL LETTER Q +FF52 ; [.2193.0020.0002] # FULLWIDTH LATIN SMALL LETTER R +FF53 ; [.21D2.0020.0002] # FULLWIDTH LATIN SMALL LETTER S +FF54 ; [.21F7.0020.0002] # FULLWIDTH LATIN SMALL LETTER T +FF55 ; [.2217.0020.0002] # FULLWIDTH LATIN SMALL LETTER U +FF56 ; [.2247.0020.0002] # FULLWIDTH LATIN SMALL LETTER V +FF57 ; [.2259.0020.0002] # FULLWIDTH LATIN SMALL LETTER W +FF58 ; [.2264.0020.0002] # FULLWIDTH LATIN SMALL LETTER X +FF59 ; [.2270.0020.0002] # FULLWIDTH LATIN SMALL LETTER Y +FF5A ; [.2286.0020.0002] # FULLWIDTH LATIN SMALL LETTER Z +FF5B ; [*032C.0020.0002] # FULLWIDTH LEFT CURLY BRACKET +FF5C ; [*066E.0020.0002] # FULLWIDTH VERTICAL LINE +FF5D ; [*032D.0020.0002] # FULLWIDTH RIGHT CURLY BRACKET +FF5E ; [*0670.0020.0002] # FULLWIDTH TILDE +FF5F ; [*033E.0020.0002] # FULLWIDTH LEFT WHITE PARENTHESIS +FF60 ; [*033F.0020.0002] # FULLWIDTH RIGHT WHITE PARENTHESIS +FF61 ; [*0292.0020.0002] # HALFWIDTH IDEOGRAPHIC FULL STOP +FF62 ; [*0384.0020.0002] # HALFWIDTH LEFT CORNER BRACKET +FF63 ; [*0385.0020.0002] # HALFWIDTH RIGHT CORNER BRACKET +FF64 ; [*0236.0020.0002] # HALFWIDTH IDEOGRAPHIC COMMA FF65 ; [*0221.0020.0002] # HALFWIDTH KATAKANA MIDDLE DOT -FF66 ; [.3EA0.0020.0011.0002] # HALFWIDTH KATAKANA LETTER WO -FF67 ; [.3E71.0020.000F.0002] # HALFWIDTH KATAKANA LETTER SMALL A -FF68 ; [.3E72.0020.000F.0002] # HALFWIDTH KATAKANA LETTER SMALL I -FF69 ; [.3E73.0020.000F.0002] # HALFWIDTH KATAKANA LETTER SMALL U -FF6A ; [.3E75.0020.000F.0002] # HALFWIDTH KATAKANA LETTER SMALL E -FF6B ; [.3E76.0020.000F.0002] # HALFWIDTH KATAKANA LETTER SMALL O -FF6C ; [.3E95.0020.000F.0002] # HALFWIDTH KATAKANA LETTER SMALL YA -FF6D ; [.3E96.0020.000F.0002] # HALFWIDTH KATAKANA LETTER SMALL YU -FF6E ; [.3E97.0020.000F.0002] # HALFWIDTH KATAKANA LETTER SMALL YO -FF6F ; [.3E83.0020.000F.0002] # HALFWIDTH KATAKANA LETTER SMALL TU -FF70 ; [.1C73.0020.0002] # HALFWIDTH KATAKANA-HIRAGANA PROLONGED SOUND MARK -FF71 ; [.3E71.0020.0011.0002] # HALFWIDTH KATAKANA LETTER A -FF72 ; [.3E72.0020.0011.0002] # HALFWIDTH KATAKANA LETTER I -FF73 ; [.3E73.0020.0011.0002] # HALFWIDTH KATAKANA LETTER U -FF74 ; [.3E75.0020.0011.0002] # HALFWIDTH KATAKANA LETTER E -FF75 ; [.3E76.0020.0011.0002] # HALFWIDTH KATAKANA LETTER O -FF76 ; [.3E77.0020.0011.0002] # HALFWIDTH KATAKANA LETTER KA -FF77 ; [.3E78.0020.0011.0002] # HALFWIDTH KATAKANA LETTER KI -FF78 ; [.3E79.0020.0011.0002] # HALFWIDTH KATAKANA LETTER KU -FF79 ; [.3E7A.0020.0011.0002] # HALFWIDTH KATAKANA LETTER KE -FF7A ; [.3E7B.0020.0011.0002] # HALFWIDTH KATAKANA LETTER KO -FF7B ; [.3E7C.0020.0011.0002] # HALFWIDTH KATAKANA LETTER SA -FF7C ; [.3E7D.0020.0011.0002] # HALFWIDTH KATAKANA LETTER SI -FF7D ; [.3E7E.0020.0011.0002] # HALFWIDTH KATAKANA LETTER SU -FF7E ; [.3E7F.0020.0011.0002] # HALFWIDTH KATAKANA LETTER SE -FF7F ; [.3E80.0020.0011.0002] # HALFWIDTH KATAKANA LETTER SO -FF80 ; [.3E81.0020.0011.0002] # HALFWIDTH KATAKANA LETTER TA -FF81 ; [.3E82.0020.0011.0002] # HALFWIDTH KATAKANA LETTER TI -FF82 ; [.3E83.0020.0011.0002] # HALFWIDTH KATAKANA LETTER TU -FF83 ; [.3E84.0020.0011.0002] # HALFWIDTH KATAKANA LETTER TE -FF84 ; [.3E85.0020.0011.0002] # HALFWIDTH KATAKANA LETTER TO -FF85 ; [.3E86.0020.0011.0002] # HALFWIDTH KATAKANA LETTER NA -FF86 ; [.3E87.0020.0011.0002] # HALFWIDTH KATAKANA LETTER NI -FF87 ; [.3E88.0020.0011.0002] # HALFWIDTH KATAKANA LETTER NU -FF88 ; [.3E89.0020.0011.0002] # HALFWIDTH KATAKANA LETTER NE -FF89 ; [.3E8A.0020.0011.0002] # HALFWIDTH KATAKANA LETTER NO -FF8A ; [.3E8B.0020.0011.0002] # HALFWIDTH KATAKANA LETTER HA -FF8B ; [.3E8C.0020.0011.0002] # HALFWIDTH KATAKANA LETTER HI -FF8C ; [.3E8D.0020.0011.0002] # HALFWIDTH KATAKANA LETTER HU -FF8D ; [.3E8E.0020.0011.0002] # HALFWIDTH KATAKANA LETTER HE -FF8E ; [.3E8F.0020.0011.0002] # HALFWIDTH KATAKANA LETTER HO -FF8F ; [.3E90.0020.0011.0002] # HALFWIDTH KATAKANA LETTER MA -FF90 ; [.3E91.0020.0011.0002] # HALFWIDTH KATAKANA LETTER MI -FF91 ; [.3E92.0020.0011.0002] # HALFWIDTH KATAKANA LETTER MU -FF92 ; [.3E93.0020.0011.0002] # HALFWIDTH KATAKANA LETTER ME -FF93 ; [.3E94.0020.0011.0002] # HALFWIDTH KATAKANA LETTER MO -FF94 ; [.3E95.0020.0011.0002] # HALFWIDTH KATAKANA LETTER YA -FF95 ; [.3E96.0020.0011.0002] # HALFWIDTH KATAKANA LETTER YU -FF96 ; [.3E97.0020.0011.0002] # HALFWIDTH KATAKANA LETTER YO -FF97 ; [.3E98.0020.0011.0002] # HALFWIDTH KATAKANA LETTER RA -FF98 ; [.3E99.0020.0011.0002] # HALFWIDTH KATAKANA LETTER RI -FF99 ; [.3E9A.0020.0011.0002] # HALFWIDTH KATAKANA LETTER RU -FF9A ; [.3E9B.0020.0011.0002] # HALFWIDTH KATAKANA LETTER RE -FF9B ; [.3E9C.0020.0011.0002] # HALFWIDTH KATAKANA LETTER RO -FF9C ; [.3E9D.0020.0011.0002] # HALFWIDTH KATAKANA LETTER WA -FF9D ; [.3EA1.0020.0011.0002] # HALFWIDTH KATAKANA LETTER N +FF66 ; [.4309.0020.0011.0002] # HALFWIDTH KATAKANA LETTER WO +FF67 ; [.42DA.0020.000F.0002] # HALFWIDTH KATAKANA LETTER SMALL A +FF68 ; [.42DB.0020.000F.0002] # HALFWIDTH KATAKANA LETTER SMALL I +FF69 ; [.42DC.0020.000F.0002] # HALFWIDTH KATAKANA LETTER SMALL U +FF6A ; [.42DE.0020.000F.0002] # HALFWIDTH KATAKANA LETTER SMALL E +FF6B ; [.42DF.0020.000F.0002] # HALFWIDTH KATAKANA LETTER SMALL O +FF6C ; [.42FE.0020.000F.0002] # HALFWIDTH KATAKANA LETTER SMALL YA +FF6D ; [.42FF.0020.000F.0002] # HALFWIDTH KATAKANA LETTER SMALL YU +FF6E ; [.4300.0020.000F.0002] # HALFWIDTH KATAKANA LETTER SMALL YO +FF6F ; [.42EC.0020.000F.0002] # HALFWIDTH KATAKANA LETTER SMALL TU +FF70 ; [.1F60.0020.0002] # HALFWIDTH KATAKANA-HIRAGANA PROLONGED SOUND MARK +FF71 ; [.42DA.0020.0011.0002] # HALFWIDTH KATAKANA LETTER A +FF72 ; [.42DB.0020.0011.0002] # HALFWIDTH KATAKANA LETTER I +FF73 ; [.42DC.0020.0011.0002] # HALFWIDTH KATAKANA LETTER U +FF74 ; [.42DE.0020.0011.0002] # HALFWIDTH KATAKANA LETTER E +FF75 ; [.42DF.0020.0011.0002] # HALFWIDTH KATAKANA LETTER O +FF76 ; [.42E0.0020.0011.0002] # HALFWIDTH KATAKANA LETTER KA +FF77 ; [.42E1.0020.0011.0002] # HALFWIDTH KATAKANA LETTER KI +FF78 ; [.42E2.0020.0011.0002] # HALFWIDTH KATAKANA LETTER KU +FF79 ; [.42E3.0020.0011.0002] # HALFWIDTH KATAKANA LETTER KE +FF7A ; [.42E4.0020.0011.0002] # HALFWIDTH KATAKANA LETTER KO +FF7B ; [.42E5.0020.0011.0002] # HALFWIDTH KATAKANA LETTER SA +FF7C ; [.42E6.0020.0011.0002] # HALFWIDTH KATAKANA LETTER SI +FF7D ; [.42E7.0020.0011.0002] # HALFWIDTH KATAKANA LETTER SU +FF7E ; [.42E8.0020.0011.0002] # HALFWIDTH KATAKANA LETTER SE +FF7F ; [.42E9.0020.0011.0002] # HALFWIDTH KATAKANA LETTER SO +FF80 ; [.42EA.0020.0011.0002] # HALFWIDTH KATAKANA LETTER TA +FF81 ; [.42EB.0020.0011.0002] # HALFWIDTH KATAKANA LETTER TI +FF82 ; [.42EC.0020.0011.0002] # HALFWIDTH KATAKANA LETTER TU +FF83 ; [.42ED.0020.0011.0002] # HALFWIDTH KATAKANA LETTER TE +FF84 ; [.42EE.0020.0011.0002] # HALFWIDTH KATAKANA LETTER TO +FF85 ; [.42EF.0020.0011.0002] # HALFWIDTH KATAKANA LETTER NA +FF86 ; [.42F0.0020.0011.0002] # HALFWIDTH KATAKANA LETTER NI +FF87 ; [.42F1.0020.0011.0002] # HALFWIDTH KATAKANA LETTER NU +FF88 ; [.42F2.0020.0011.0002] # HALFWIDTH KATAKANA LETTER NE +FF89 ; [.42F3.0020.0011.0002] # HALFWIDTH KATAKANA LETTER NO +FF8A ; [.42F4.0020.0011.0002] # HALFWIDTH KATAKANA LETTER HA +FF8B ; [.42F5.0020.0011.0002] # HALFWIDTH KATAKANA LETTER HI +FF8C ; [.42F6.0020.0011.0002] # HALFWIDTH KATAKANA LETTER HU +FF8D ; [.42F7.0020.0011.0002] # HALFWIDTH KATAKANA LETTER HE +FF8E ; [.42F8.0020.0011.0002] # HALFWIDTH KATAKANA LETTER HO +FF8F ; [.42F9.0020.0011.0002] # HALFWIDTH KATAKANA LETTER MA +FF90 ; [.42FA.0020.0011.0002] # HALFWIDTH KATAKANA LETTER MI +FF91 ; [.42FB.0020.0011.0002] # HALFWIDTH KATAKANA LETTER MU +FF92 ; [.42FC.0020.0011.0002] # HALFWIDTH KATAKANA LETTER ME +FF93 ; [.42FD.0020.0011.0002] # HALFWIDTH KATAKANA LETTER MO +FF94 ; [.42FE.0020.0011.0002] # HALFWIDTH KATAKANA LETTER YA +FF95 ; [.42FF.0020.0011.0002] # HALFWIDTH KATAKANA LETTER YU +FF96 ; [.4300.0020.0011.0002] # HALFWIDTH KATAKANA LETTER YO +FF97 ; [.4301.0020.0011.0002] # HALFWIDTH KATAKANA LETTER RA +FF98 ; [.4302.0020.0011.0002] # HALFWIDTH KATAKANA LETTER RI +FF99 ; [.4303.0020.0011.0002] # HALFWIDTH KATAKANA LETTER RU +FF9A ; [.4304.0020.0011.0002] # HALFWIDTH KATAKANA LETTER RE +FF9B ; [.4305.0020.0011.0002] # HALFWIDTH KATAKANA LETTER RO +FF9C ; [.4306.0020.0011.0002] # HALFWIDTH KATAKANA LETTER WA +FF9D ; [.430A.0020.0011.0002] # HALFWIDTH KATAKANA LETTER N FF9E ; [.0000.0037.0002] # HALFWIDTH KATAKANA VOICED SOUND MARK FF9F ; [.0000.0038.0002] # HALFWIDTH KATAKANA SEMI-VOICED SOUND MARK -FFE0 ; [.1C76.0020.0002] # FULLWIDTH CENT SIGN -FFE1 ; [.1C78.0020.0002] # FULLWIDTH POUND SIGN -FFE2 ; [*0633.0020.0002] # FULLWIDTH NOT SIGN +FFE0 ; [.1F63.0020.0002] # FULLWIDTH CENT SIGN +FFE1 ; [.1F65.0020.0002] # FULLWIDTH POUND SIGN +FFE2 ; [*066D.0020.0002] # FULLWIDTH NOT SIGN FFE3 ; [*0209.0020.0002] # FULLWIDTH MACRON -FFE4 ; [*0635.0020.0002] # FULLWIDTH BROKEN BAR -FFE5 ; [.1C79.0020.0002] # FULLWIDTH YEN SIGN -FFE6 ; [.1C8C.0020.0002] # FULLWIDTH WON SIGN -FFE8 ; [*0831.0020.0002] # HALFWIDTH FORMS LIGHT VERTICAL -FFE9 ; [*05B2.0020.0002] # HALFWIDTH LEFTWARDS ARROW -FFEA ; [*05B4.0020.0002] # HALFWIDTH UPWARDS ARROW -FFEB ; [*05B3.0020.0002] # HALFWIDTH RIGHTWARDS ARROW -FFEC ; [*05B5.0020.0002] # HALFWIDTH DOWNWARDS ARROW -FFED ; [*08CF.0020.0002] # HALFWIDTH BLACK SQUARE -FFEE ; [*08FA.0020.0002] # HALFWIDTH WHITE CIRCLE -30A1 30FC ; [.3E71.0020.000F.0002][.3E71.0020.0007.0002] # -FF67 30FC ; [.3E71.0020.000F.0002][.3E71.0020.0007.0002] # -FF67 FF70 ; [.3E71.0020.000F.0002][.3E71.0020.0007.0002] # -3041 30FC ; [.3E71.0020.000F.0001][.3E71.0020.0007.0002] # -30A2 30FC ; [.3E71.0020.0011.0002][.3E71.0020.0007.0002] # -FF71 30FC ; [.3E71.0020.0011.0002][.3E71.0020.0007.0002] # -FF71 FF70 ; [.3E71.0020.0011.0002][.3E71.0020.0007.0002] # -3042 30FC ; [.3E71.0020.0011.0001][.3E71.0020.0007.0002] # -30AB 30FC ; [.3E77.0020.0011.0002][.3E71.0020.0007.0002] # -FF76 30FC ; [.3E77.0020.0011.0002][.3E71.0020.0007.0002] # -FF76 FF70 ; [.3E77.0020.0011.0002][.3E71.0020.0007.0002] # -304B 30FC ; [.3E77.0020.0011.0001][.3E71.0020.0007.0002] # -30AC 30FC ; [.3E77.0020.0011.0002][.0000.0037.0002][.3E71.0020.0007.0002] # -30AB 3099 30FC ; [.3E77.0020.0011.0002][.0000.0037.0002][.3E71.0020.0007.0002] # -FF76 FF9E 30FC ; [.3E77.0020.0011.0002][.0000.0037.0002][.3E71.0020.0007.0002] # -FF76 FF9E FF70 ; [.3E77.0020.0011.0002][.0000.0037.0002][.3E71.0020.0007.0002] # -304C 30FC ; [.3E77.0020.0011.0001][.0000.0037.0002][.3E71.0020.0007.0002] # -304B 3099 30FC ; [.3E77.0020.0011.0001][.0000.0037.0002][.3E71.0020.0007.0002] # -30B5 30FC ; [.3E7C.0020.0011.0002][.3E71.0020.0007.0002] # -FF7B 30FC ; [.3E7C.0020.0011.0002][.3E71.0020.0007.0002] # -FF7B FF70 ; [.3E7C.0020.0011.0002][.3E71.0020.0007.0002] # -3055 30FC ; [.3E7C.0020.0011.0001][.3E71.0020.0007.0002] # -30B6 30FC ; [.3E7C.0020.0011.0002][.0000.0037.0002][.3E71.0020.0007.0002] # -30B5 3099 30FC ; [.3E7C.0020.0011.0002][.0000.0037.0002][.3E71.0020.0007.0002] # -FF7B FF9E 30FC ; [.3E7C.0020.0011.0002][.0000.0037.0002][.3E71.0020.0007.0002] # -FF7B FF9E FF70 ; [.3E7C.0020.0011.0002][.0000.0037.0002][.3E71.0020.0007.0002] # -3056 30FC ; [.3E7C.0020.0011.0001][.0000.0037.0002][.3E71.0020.0007.0002] # -3055 3099 30FC ; [.3E7C.0020.0011.0001][.0000.0037.0002][.3E71.0020.0007.0002] # -30BF 30FC ; [.3E81.0020.0011.0002][.3E71.0020.0007.0002] # -FF80 30FC ; [.3E81.0020.0011.0002][.3E71.0020.0007.0002] # -FF80 FF70 ; [.3E81.0020.0011.0002][.3E71.0020.0007.0002] # -305F 30FC ; [.3E81.0020.0011.0001][.3E71.0020.0007.0002] # -30C0 30FC ; [.3E81.0020.0011.0002][.0000.0037.0002][.3E71.0020.0007.0002] # -30BF 3099 30FC ; [.3E81.0020.0011.0002][.0000.0037.0002][.3E71.0020.0007.0002] # -FF80 FF9E 30FC ; [.3E81.0020.0011.0002][.0000.0037.0002][.3E71.0020.0007.0002] # -FF80 FF9E FF70 ; [.3E81.0020.0011.0002][.0000.0037.0002][.3E71.0020.0007.0002] # -3060 30FC ; [.3E81.0020.0011.0001][.0000.0037.0002][.3E71.0020.0007.0002] # -305F 3099 30FC ; [.3E81.0020.0011.0001][.0000.0037.0002][.3E71.0020.0007.0002] # -30CA 30FC ; [.3E86.0020.0011.0002][.3E71.0020.0007.0002] # -FF85 30FC ; [.3E86.0020.0011.0002][.3E71.0020.0007.0002] # -FF85 FF70 ; [.3E86.0020.0011.0002][.3E71.0020.0007.0002] # -306A 30FC ; [.3E86.0020.0011.0001][.3E71.0020.0007.0002] # -30CF 30FC ; [.3E8B.0020.0011.0002][.3E71.0020.0007.0002] # -FF8A 30FC ; [.3E8B.0020.0011.0002][.3E71.0020.0007.0002] # -FF8A FF70 ; [.3E8B.0020.0011.0002][.3E71.0020.0007.0002] # -306F 30FC ; [.3E8B.0020.0011.0001][.3E71.0020.0007.0002] # -30D0 30FC ; [.3E8B.0020.0011.0002][.0000.0037.0002][.3E71.0020.0007.0002] # -30CF 3099 30FC ; [.3E8B.0020.0011.0002][.0000.0037.0002][.3E71.0020.0007.0002] # -FF8A FF9E 30FC ; [.3E8B.0020.0011.0002][.0000.0037.0002][.3E71.0020.0007.0002] # -FF8A FF9E FF70 ; [.3E8B.0020.0011.0002][.0000.0037.0002][.3E71.0020.0007.0002] # -3070 30FC ; [.3E8B.0020.0011.0001][.0000.0037.0002][.3E71.0020.0007.0002] # -306F 3099 30FC ; [.3E8B.0020.0011.0001][.0000.0037.0002][.3E71.0020.0007.0002] # -30D1 30FC ; [.3E8B.0020.0011.0002][.0000.0038.0002][.3E71.0020.0007.0002] # -30CF 309A 30FC ; [.3E8B.0020.0011.0002][.0000.0038.0002][.3E71.0020.0007.0002] # -FF8A FF9F 30FC ; [.3E8B.0020.0011.0002][.0000.0038.0002][.3E71.0020.0007.0002] # -FF8A FF9F FF70 ; [.3E8B.0020.0011.0002][.0000.0038.0002][.3E71.0020.0007.0002] # -3071 30FC ; [.3E8B.0020.0011.0001][.0000.0038.0002][.3E71.0020.0007.0002] # -306F 309A 30FC ; [.3E8B.0020.0011.0001][.0000.0038.0002][.3E71.0020.0007.0002] # -30DE 30FC ; [.3E90.0020.0011.0002][.3E71.0020.0007.0002] # -FF8F 30FC ; [.3E90.0020.0011.0002][.3E71.0020.0007.0002] # -FF8F FF70 ; [.3E90.0020.0011.0002][.3E71.0020.0007.0002] # -307E 30FC ; [.3E90.0020.0011.0001][.3E71.0020.0007.0002] # -30E3 30FC ; [.3E95.0020.000F.0002][.3E71.0020.0007.0002] # -FF6C 30FC ; [.3E95.0020.000F.0002][.3E71.0020.0007.0002] # -FF6C FF70 ; [.3E95.0020.000F.0002][.3E71.0020.0007.0002] # -3083 30FC ; [.3E95.0020.000F.0001][.3E71.0020.0007.0002] # -30E4 30FC ; [.3E95.0020.0011.0002][.3E71.0020.0007.0002] # -FF94 30FC ; [.3E95.0020.0011.0002][.3E71.0020.0007.0002] # -FF94 FF70 ; [.3E95.0020.0011.0002][.3E71.0020.0007.0002] # -3084 30FC ; [.3E95.0020.0011.0001][.3E71.0020.0007.0002] # -30E9 30FC ; [.3E98.0020.0011.0002][.3E71.0020.0007.0002] # -FF97 30FC ; [.3E98.0020.0011.0002][.3E71.0020.0007.0002] # -FF97 FF70 ; [.3E98.0020.0011.0002][.3E71.0020.0007.0002] # -3089 30FC ; [.3E98.0020.0011.0001][.3E71.0020.0007.0002] # -30EE 30FC ; [.3E9D.0020.000F.0002][.3E71.0020.0007.0002] # -308E 30FC ; [.3E9D.0020.000F.0001][.3E71.0020.0007.0002] # -30EF 30FC ; [.3E9D.0020.0011.0002][.3E71.0020.0007.0002] # -FF9C 30FC ; [.3E9D.0020.0011.0002][.3E71.0020.0007.0002] # -FF9C FF70 ; [.3E9D.0020.0011.0002][.3E71.0020.0007.0002] # -308F 30FC ; [.3E9D.0020.0011.0001][.3E71.0020.0007.0002] # -30F7 30FC ; [.3E9D.0020.0011.0002][.0000.0037.0002][.3E71.0020.0007.0002] # -30EF 3099 30FC ; [.3E9D.0020.0011.0002][.0000.0037.0002][.3E71.0020.0007.0002] # -FF9C FF9E 30FC ; [.3E9D.0020.0011.0002][.0000.0037.0002][.3E71.0020.0007.0002] # -FF9C FF9E FF70 ; [.3E9D.0020.0011.0002][.0000.0037.0002][.3E71.0020.0007.0002] # -30F5 30FC ; [.3E77.0020.000F.0002][.3E71.0020.0007.0002] # -3095 30FC ; [.3E77.0020.000F.0001][.3E71.0020.0007.0002] # -31F5 30FC ; [.3E8B.0020.000F][.3E71.0020.0007.0002] # -31FB 30FC ; [.3E98.0020.000F][.3E71.0020.0007.0002] # -30A3 30FC ; [.3E72.0020.000F.0002][.3E72.0020.0007.0002] # -FF68 30FC ; [.3E72.0020.000F.0002][.3E72.0020.0007.0002] # -FF68 FF70 ; [.3E72.0020.000F.0002][.3E72.0020.0007.0002] # -3043 30FC ; [.3E72.0020.000F.0001][.3E72.0020.0007.0002] # -30A4 30FC ; [.3E72.0020.0011.0002][.3E72.0020.0007.0002] # -FF72 30FC ; [.3E72.0020.0011.0002][.3E72.0020.0007.0002] # -FF72 FF70 ; [.3E72.0020.0011.0002][.3E72.0020.0007.0002] # -3044 30FC ; [.3E72.0020.0011.0001][.3E72.0020.0007.0002] # -30AD 30FC ; [.3E78.0020.0011.0002][.3E72.0020.0007.0002] # -FF77 30FC ; [.3E78.0020.0011.0002][.3E72.0020.0007.0002] # -FF77 FF70 ; [.3E78.0020.0011.0002][.3E72.0020.0007.0002] # -304D 30FC ; [.3E78.0020.0011.0001][.3E72.0020.0007.0002] # -30AE 30FC ; [.3E78.0020.0011.0002][.0000.0037.0002][.3E72.0020.0007.0002] # -30AD 3099 30FC ; [.3E78.0020.0011.0002][.0000.0037.0002][.3E72.0020.0007.0002] # -FF77 FF9E 30FC ; [.3E78.0020.0011.0002][.0000.0037.0002][.3E72.0020.0007.0002] # -FF77 FF9E FF70 ; [.3E78.0020.0011.0002][.0000.0037.0002][.3E72.0020.0007.0002] # -304E 30FC ; [.3E78.0020.0011.0001][.0000.0037.0002][.3E72.0020.0007.0002] # -304D 3099 30FC ; [.3E78.0020.0011.0001][.0000.0037.0002][.3E72.0020.0007.0002] # -30B7 30FC ; [.3E7D.0020.0011.0002][.3E72.0020.0007.0002] # -FF7C 30FC ; [.3E7D.0020.0011.0002][.3E72.0020.0007.0002] # -FF7C FF70 ; [.3E7D.0020.0011.0002][.3E72.0020.0007.0002] # -3057 30FC ; [.3E7D.0020.0011.0001][.3E72.0020.0007.0002] # -30B8 30FC ; [.3E7D.0020.0011.0002][.0000.0037.0002][.3E72.0020.0007.0002] # -30B7 3099 30FC ; [.3E7D.0020.0011.0002][.0000.0037.0002][.3E72.0020.0007.0002] # -FF7C FF9E 30FC ; [.3E7D.0020.0011.0002][.0000.0037.0002][.3E72.0020.0007.0002] # -FF7C FF9E FF70 ; [.3E7D.0020.0011.0002][.0000.0037.0002][.3E72.0020.0007.0002] # -3058 30FC ; [.3E7D.0020.0011.0001][.0000.0037.0002][.3E72.0020.0007.0002] # -3057 3099 30FC ; [.3E7D.0020.0011.0001][.0000.0037.0002][.3E72.0020.0007.0002] # -30C1 30FC ; [.3E82.0020.0011.0002][.3E72.0020.0007.0002] # -FF81 30FC ; [.3E82.0020.0011.0002][.3E72.0020.0007.0002] # -FF81 FF70 ; [.3E82.0020.0011.0002][.3E72.0020.0007.0002] # -3061 30FC ; [.3E82.0020.0011.0001][.3E72.0020.0007.0002] # -30C2 30FC ; [.3E82.0020.0011.0002][.0000.0037.0002][.3E72.0020.0007.0002] # -30C1 3099 30FC ; [.3E82.0020.0011.0002][.0000.0037.0002][.3E72.0020.0007.0002] # -FF81 FF9E 30FC ; [.3E82.0020.0011.0002][.0000.0037.0002][.3E72.0020.0007.0002] # -FF81 FF9E FF70 ; [.3E82.0020.0011.0002][.0000.0037.0002][.3E72.0020.0007.0002] # -3062 30FC ; [.3E82.0020.0011.0001][.0000.0037.0002][.3E72.0020.0007.0002] # -3061 3099 30FC ; [.3E82.0020.0011.0001][.0000.0037.0002][.3E72.0020.0007.0002] # -30CB 30FC ; [.3E87.0020.0011.0002][.3E72.0020.0007.0002] # -FF86 30FC ; [.3E87.0020.0011.0002][.3E72.0020.0007.0002] # -FF86 FF70 ; [.3E87.0020.0011.0002][.3E72.0020.0007.0002] # -306B 30FC ; [.3E87.0020.0011.0001][.3E72.0020.0007.0002] # -30D2 30FC ; [.3E8C.0020.0011.0002][.3E72.0020.0007.0002] # -FF8B 30FC ; [.3E8C.0020.0011.0002][.3E72.0020.0007.0002] # -FF8B FF70 ; [.3E8C.0020.0011.0002][.3E72.0020.0007.0002] # -3072 30FC ; [.3E8C.0020.0011.0001][.3E72.0020.0007.0002] # -30D3 30FC ; [.3E8C.0020.0011.0002][.0000.0037.0002][.3E72.0020.0007.0002] # -30D2 3099 30FC ; [.3E8C.0020.0011.0002][.0000.0037.0002][.3E72.0020.0007.0002] # -FF8B FF9E 30FC ; [.3E8C.0020.0011.0002][.0000.0037.0002][.3E72.0020.0007.0002] # -FF8B FF9E FF70 ; [.3E8C.0020.0011.0002][.0000.0037.0002][.3E72.0020.0007.0002] # -3073 30FC ; [.3E8C.0020.0011.0001][.0000.0037.0002][.3E72.0020.0007.0002] # -3072 3099 30FC ; [.3E8C.0020.0011.0001][.0000.0037.0002][.3E72.0020.0007.0002] # -30D4 30FC ; [.3E8C.0020.0011.0002][.0000.0038.0002][.3E72.0020.0007.0002] # -30D2 309A 30FC ; [.3E8C.0020.0011.0002][.0000.0038.0002][.3E72.0020.0007.0002] # -FF8B FF9F 30FC ; [.3E8C.0020.0011.0002][.0000.0038.0002][.3E72.0020.0007.0002] # -FF8B FF9F FF70 ; [.3E8C.0020.0011.0002][.0000.0038.0002][.3E72.0020.0007.0002] # -3074 30FC ; [.3E8C.0020.0011.0001][.0000.0038.0002][.3E72.0020.0007.0002] # -3072 309A 30FC ; [.3E8C.0020.0011.0001][.0000.0038.0002][.3E72.0020.0007.0002] # -30DF 30FC ; [.3E91.0020.0011.0002][.3E72.0020.0007.0002] # -FF90 30FC ; [.3E91.0020.0011.0002][.3E72.0020.0007.0002] # -FF90 FF70 ; [.3E91.0020.0011.0002][.3E72.0020.0007.0002] # -307F 30FC ; [.3E91.0020.0011.0001][.3E72.0020.0007.0002] # -30EA 30FC ; [.3E99.0020.0011.0002][.3E72.0020.0007.0002] # -FF98 30FC ; [.3E99.0020.0011.0002][.3E72.0020.0007.0002] # -FF98 FF70 ; [.3E99.0020.0011.0002][.3E72.0020.0007.0002] # -308A 30FC ; [.3E99.0020.0011.0001][.3E72.0020.0007.0002] # -30F0 30FC ; [.3E9E.0020.0011.0002][.3E72.0020.0007.0002] # -3090 30FC ; [.3E9E.0020.0011.0001][.3E72.0020.0007.0002] # -30F8 30FC ; [.3E9E.0020.0011.0002][.0000.0037.0002][.3E72.0020.0007.0002] # -30F0 3099 30FC ; [.3E9E.0020.0011.0002][.0000.0037.0002][.3E72.0020.0007.0002] # -31F1 30FC ; [.3E7D.0020.000F][.3E72.0020.0007.0002] # -31F6 30FC ; [.3E8C.0020.000F][.3E72.0020.0007.0002] # -31FC 30FC ; [.3E99.0020.000F][.3E72.0020.0007.0002] # -30A5 30FC ; [.3E73.0020.000F.0002][.3E73.0020.0007.0002] # -FF69 30FC ; [.3E73.0020.000F.0002][.3E73.0020.0007.0002] # -FF69 FF70 ; [.3E73.0020.000F.0002][.3E73.0020.0007.0002] # -3045 30FC ; [.3E73.0020.000F.0001][.3E73.0020.0007.0002] # -30A6 30FC ; [.3E73.0020.0011.0002][.3E73.0020.0007.0002] # -FF73 30FC ; [.3E73.0020.0011.0002][.3E73.0020.0007.0002] # -FF73 FF70 ; [.3E73.0020.0011.0002][.3E73.0020.0007.0002] # -3046 30FC ; [.3E73.0020.0011.0001][.3E73.0020.0007.0002] # -30AF 30FC ; [.3E79.0020.0011.0002][.3E73.0020.0007.0002] # -FF78 30FC ; [.3E79.0020.0011.0002][.3E73.0020.0007.0002] # -FF78 FF70 ; [.3E79.0020.0011.0002][.3E73.0020.0007.0002] # -304F 30FC ; [.3E79.0020.0011.0001][.3E73.0020.0007.0002] # -30B0 30FC ; [.3E79.0020.0011.0002][.0000.0037.0002][.3E73.0020.0007.0002] # -30AF 3099 30FC ; [.3E79.0020.0011.0002][.0000.0037.0002][.3E73.0020.0007.0002] # -FF78 FF9E 30FC ; [.3E79.0020.0011.0002][.0000.0037.0002][.3E73.0020.0007.0002] # -FF78 FF9E FF70 ; [.3E79.0020.0011.0002][.0000.0037.0002][.3E73.0020.0007.0002] # -3050 30FC ; [.3E79.0020.0011.0001][.0000.0037.0002][.3E73.0020.0007.0002] # -304F 3099 30FC ; [.3E79.0020.0011.0001][.0000.0037.0002][.3E73.0020.0007.0002] # -30B9 30FC ; [.3E7E.0020.0011.0002][.3E73.0020.0007.0002] # -FF7D 30FC ; [.3E7E.0020.0011.0002][.3E73.0020.0007.0002] # -FF7D FF70 ; [.3E7E.0020.0011.0002][.3E73.0020.0007.0002] # -3059 30FC ; [.3E7E.0020.0011.0001][.3E73.0020.0007.0002] # -30BA 30FC ; [.3E7E.0020.0011.0002][.0000.0037.0002][.3E73.0020.0007.0002] # -30B9 3099 30FC ; [.3E7E.0020.0011.0002][.0000.0037.0002][.3E73.0020.0007.0002] # -FF7D FF9E 30FC ; [.3E7E.0020.0011.0002][.0000.0037.0002][.3E73.0020.0007.0002] # -FF7D FF9E FF70 ; [.3E7E.0020.0011.0002][.0000.0037.0002][.3E73.0020.0007.0002] # -305A 30FC ; [.3E7E.0020.0011.0001][.0000.0037.0002][.3E73.0020.0007.0002] # -3059 3099 30FC ; [.3E7E.0020.0011.0001][.0000.0037.0002][.3E73.0020.0007.0002] # -30C3 30FC ; [.3E83.0020.000F.0002][.3E73.0020.0007.0002] # -FF6F 30FC ; [.3E83.0020.000F.0002][.3E73.0020.0007.0002] # -FF6F FF70 ; [.3E83.0020.000F.0002][.3E73.0020.0007.0002] # -3063 30FC ; [.3E83.0020.000F.0001][.3E73.0020.0007.0002] # -30C4 30FC ; [.3E83.0020.0011.0002][.3E73.0020.0007.0002] # -FF82 30FC ; [.3E83.0020.0011.0002][.3E73.0020.0007.0002] # -FF82 FF70 ; [.3E83.0020.0011.0002][.3E73.0020.0007.0002] # -3064 30FC ; [.3E83.0020.0011.0001][.3E73.0020.0007.0002] # -30C5 30FC ; [.3E83.0020.0011.0002][.0000.0037.0002][.3E73.0020.0007.0002] # -30C4 3099 30FC ; [.3E83.0020.0011.0002][.0000.0037.0002][.3E73.0020.0007.0002] # -FF82 FF9E 30FC ; [.3E83.0020.0011.0002][.0000.0037.0002][.3E73.0020.0007.0002] # -FF82 FF9E FF70 ; [.3E83.0020.0011.0002][.0000.0037.0002][.3E73.0020.0007.0002] # -3065 30FC ; [.3E83.0020.0011.0001][.0000.0037.0002][.3E73.0020.0007.0002] # -3064 3099 30FC ; [.3E83.0020.0011.0001][.0000.0037.0002][.3E73.0020.0007.0002] # -30CC 30FC ; [.3E88.0020.0011.0002][.3E73.0020.0007.0002] # -FF87 30FC ; [.3E88.0020.0011.0002][.3E73.0020.0007.0002] # -FF87 FF70 ; [.3E88.0020.0011.0002][.3E73.0020.0007.0002] # -306C 30FC ; [.3E88.0020.0011.0001][.3E73.0020.0007.0002] # -30D5 30FC ; [.3E8D.0020.0011.0002][.3E73.0020.0007.0002] # -FF8C 30FC ; [.3E8D.0020.0011.0002][.3E73.0020.0007.0002] # -FF8C FF70 ; [.3E8D.0020.0011.0002][.3E73.0020.0007.0002] # -3075 30FC ; [.3E8D.0020.0011.0001][.3E73.0020.0007.0002] # -30D6 30FC ; [.3E8D.0020.0011.0002][.0000.0037.0002][.3E73.0020.0007.0002] # -30D5 3099 30FC ; [.3E8D.0020.0011.0002][.0000.0037.0002][.3E73.0020.0007.0002] # -FF8C FF9E 30FC ; [.3E8D.0020.0011.0002][.0000.0037.0002][.3E73.0020.0007.0002] # -FF8C FF9E FF70 ; [.3E8D.0020.0011.0002][.0000.0037.0002][.3E73.0020.0007.0002] # -3076 30FC ; [.3E8D.0020.0011.0001][.0000.0037.0002][.3E73.0020.0007.0002] # -3075 3099 30FC ; [.3E8D.0020.0011.0001][.0000.0037.0002][.3E73.0020.0007.0002] # -30D7 30FC ; [.3E8D.0020.0011.0002][.0000.0038.0002][.3E73.0020.0007.0002] # -30D5 309A 30FC ; [.3E8D.0020.0011.0002][.0000.0038.0002][.3E73.0020.0007.0002] # -FF8C FF9F 30FC ; [.3E8D.0020.0011.0002][.0000.0038.0002][.3E73.0020.0007.0002] # -FF8C FF9F FF70 ; [.3E8D.0020.0011.0002][.0000.0038.0002][.3E73.0020.0007.0002] # -3077 30FC ; [.3E8D.0020.0011.0001][.0000.0038.0002][.3E73.0020.0007.0002] # -3075 309A 30FC ; [.3E8D.0020.0011.0001][.0000.0038.0002][.3E73.0020.0007.0002] # -30E0 30FC ; [.3E92.0020.0011.0002][.3E73.0020.0007.0002] # -FF91 30FC ; [.3E92.0020.0011.0002][.3E73.0020.0007.0002] # -FF91 FF70 ; [.3E92.0020.0011.0002][.3E73.0020.0007.0002] # -3080 30FC ; [.3E92.0020.0011.0001][.3E73.0020.0007.0002] # -30E5 30FC ; [.3E96.0020.000F.0002][.3E73.0020.0007.0002] # -FF6D 30FC ; [.3E96.0020.000F.0002][.3E73.0020.0007.0002] # -FF6D FF70 ; [.3E96.0020.000F.0002][.3E73.0020.0007.0002] # -3085 30FC ; [.3E96.0020.000F.0001][.3E73.0020.0007.0002] # -30E6 30FC ; [.3E96.0020.0011.0002][.3E73.0020.0007.0002] # -FF95 30FC ; [.3E96.0020.0011.0002][.3E73.0020.0007.0002] # -FF95 FF70 ; [.3E96.0020.0011.0002][.3E73.0020.0007.0002] # -3086 30FC ; [.3E96.0020.0011.0001][.3E73.0020.0007.0002] # -30EB 30FC ; [.3E9A.0020.0011.0002][.3E73.0020.0007.0002] # -FF99 30FC ; [.3E9A.0020.0011.0002][.3E73.0020.0007.0002] # -FF99 FF70 ; [.3E9A.0020.0011.0002][.3E73.0020.0007.0002] # -308B 30FC ; [.3E9A.0020.0011.0001][.3E73.0020.0007.0002] # -30F4 30FC ; [.3E73.0020.0011.0002][.0000.0037.0002][.3E73.0020.0007.0002] # -30A6 3099 30FC ; [.3E73.0020.0011.0002][.0000.0037.0002][.3E73.0020.0007.0002] # -FF73 FF9E 30FC ; [.3E73.0020.0011.0002][.0000.0037.0002][.3E73.0020.0007.0002] # -FF73 FF9E FF70 ; [.3E73.0020.0011.0002][.0000.0037.0002][.3E73.0020.0007.0002] # -3094 30FC ; [.3E73.0020.0011.0001][.0000.0037.0002][.3E73.0020.0007.0002] # -3046 3099 30FC ; [.3E73.0020.0011.0001][.0000.0037.0002][.3E73.0020.0007.0002] # -31F0 30FC ; [.3E79.0020.000F][.3E73.0020.0007.0002] # -31F2 30FC ; [.3E7E.0020.000F][.3E73.0020.0007.0002] # -31F4 30FC ; [.3E88.0020.000F][.3E73.0020.0007.0002] # -31F7 30FC ; [.3E8D.0020.000F][.3E73.0020.0007.0002] # -31FA 30FC ; [.3E92.0020.000F][.3E73.0020.0007.0002] # -31FD 30FC ; [.3E9A.0020.000F][.3E73.0020.0007.0002] # -30A7 30FC ; [.3E75.0020.000F.0002][.3E75.0020.0007.0002] # -FF6A 30FC ; [.3E75.0020.000F.0002][.3E75.0020.0007.0002] # -FF6A FF70 ; [.3E75.0020.000F.0002][.3E75.0020.0007.0002] # -3047 30FC ; [.3E75.0020.000F.0001][.3E75.0020.0007.0002] # -30A8 30FC ; [.3E75.0020.0011.0002][.3E75.0020.0007.0002] # -FF74 30FC ; [.3E75.0020.0011.0002][.3E75.0020.0007.0002] # -FF74 FF70 ; [.3E75.0020.0011.0002][.3E75.0020.0007.0002] # -3048 30FC ; [.3E75.0020.0011.0001][.3E75.0020.0007.0002] # -30B1 30FC ; [.3E7A.0020.0011.0002][.3E75.0020.0007.0002] # -FF79 30FC ; [.3E7A.0020.0011.0002][.3E75.0020.0007.0002] # -FF79 FF70 ; [.3E7A.0020.0011.0002][.3E75.0020.0007.0002] # -3051 30FC ; [.3E7A.0020.0011.0001][.3E75.0020.0007.0002] # -30B2 30FC ; [.3E7A.0020.0011.0002][.0000.0037.0002][.3E75.0020.0007.0002] # -30B1 3099 30FC ; [.3E7A.0020.0011.0002][.0000.0037.0002][.3E75.0020.0007.0002] # -FF79 FF9E 30FC ; [.3E7A.0020.0011.0002][.0000.0037.0002][.3E75.0020.0007.0002] # -FF79 FF9E FF70 ; [.3E7A.0020.0011.0002][.0000.0037.0002][.3E75.0020.0007.0002] # -3052 30FC ; [.3E7A.0020.0011.0001][.0000.0037.0002][.3E75.0020.0007.0002] # -3051 3099 30FC ; [.3E7A.0020.0011.0001][.0000.0037.0002][.3E75.0020.0007.0002] # -30BB 30FC ; [.3E7F.0020.0011.0002][.3E75.0020.0007.0002] # -FF7E 30FC ; [.3E7F.0020.0011.0002][.3E75.0020.0007.0002] # -FF7E FF70 ; [.3E7F.0020.0011.0002][.3E75.0020.0007.0002] # -305B 30FC ; [.3E7F.0020.0011.0001][.3E75.0020.0007.0002] # -30BC 30FC ; [.3E7F.0020.0011.0002][.0000.0037.0002][.3E75.0020.0007.0002] # -30BB 3099 30FC ; [.3E7F.0020.0011.0002][.0000.0037.0002][.3E75.0020.0007.0002] # -FF7E FF9E 30FC ; [.3E7F.0020.0011.0002][.0000.0037.0002][.3E75.0020.0007.0002] # -FF7E FF9E FF70 ; [.3E7F.0020.0011.0002][.0000.0037.0002][.3E75.0020.0007.0002] # -305C 30FC ; [.3E7F.0020.0011.0001][.0000.0037.0002][.3E75.0020.0007.0002] # -305B 3099 30FC ; [.3E7F.0020.0011.0001][.0000.0037.0002][.3E75.0020.0007.0002] # -30C6 30FC ; [.3E84.0020.0011.0002][.3E75.0020.0007.0002] # -FF83 30FC ; [.3E84.0020.0011.0002][.3E75.0020.0007.0002] # -FF83 FF70 ; [.3E84.0020.0011.0002][.3E75.0020.0007.0002] # -3066 30FC ; [.3E84.0020.0011.0001][.3E75.0020.0007.0002] # -30C7 30FC ; [.3E84.0020.0011.0002][.0000.0037.0002][.3E75.0020.0007.0002] # -30C6 3099 30FC ; [.3E84.0020.0011.0002][.0000.0037.0002][.3E75.0020.0007.0002] # -FF83 FF9E 30FC ; [.3E84.0020.0011.0002][.0000.0037.0002][.3E75.0020.0007.0002] # -FF83 FF9E FF70 ; [.3E84.0020.0011.0002][.0000.0037.0002][.3E75.0020.0007.0002] # -3067 30FC ; [.3E84.0020.0011.0001][.0000.0037.0002][.3E75.0020.0007.0002] # -3066 3099 30FC ; [.3E84.0020.0011.0001][.0000.0037.0002][.3E75.0020.0007.0002] # -30CD 30FC ; [.3E89.0020.0011.0002][.3E75.0020.0007.0002] # -FF88 30FC ; [.3E89.0020.0011.0002][.3E75.0020.0007.0002] # -FF88 FF70 ; [.3E89.0020.0011.0002][.3E75.0020.0007.0002] # -306D 30FC ; [.3E89.0020.0011.0001][.3E75.0020.0007.0002] # -30D8 30FC ; [.3E8E.0020.0011.0002][.3E75.0020.0007.0002] # -FF8D 30FC ; [.3E8E.0020.0011.0002][.3E75.0020.0007.0002] # -FF8D FF70 ; [.3E8E.0020.0011.0002][.3E75.0020.0007.0002] # -3078 30FC ; [.3E8E.0020.0011.0001][.3E75.0020.0007.0002] # -30D9 30FC ; [.3E8E.0020.0011.0002][.0000.0037.0002][.3E75.0020.0007.0002] # -30D8 3099 30FC ; [.3E8E.0020.0011.0002][.0000.0037.0002][.3E75.0020.0007.0002] # -FF8D FF9E 30FC ; [.3E8E.0020.0011.0002][.0000.0037.0002][.3E75.0020.0007.0002] # -FF8D FF9E FF70 ; [.3E8E.0020.0011.0002][.0000.0037.0002][.3E75.0020.0007.0002] # -3079 30FC ; [.3E8E.0020.0011.0001][.0000.0037.0002][.3E75.0020.0007.0002] # -3078 3099 30FC ; [.3E8E.0020.0011.0001][.0000.0037.0002][.3E75.0020.0007.0002] # -30DA 30FC ; [.3E8E.0020.0011.0002][.0000.0038.0002][.3E75.0020.0007.0002] # -30D8 309A 30FC ; [.3E8E.0020.0011.0002][.0000.0038.0002][.3E75.0020.0007.0002] # -FF8D FF9F 30FC ; [.3E8E.0020.0011.0002][.0000.0038.0002][.3E75.0020.0007.0002] # -FF8D FF9F FF70 ; [.3E8E.0020.0011.0002][.0000.0038.0002][.3E75.0020.0007.0002] # -307A 30FC ; [.3E8E.0020.0011.0001][.0000.0038.0002][.3E75.0020.0007.0002] # -3078 309A 30FC ; [.3E8E.0020.0011.0001][.0000.0038.0002][.3E75.0020.0007.0002] # -30E1 30FC ; [.3E93.0020.0011.0002][.3E75.0020.0007.0002] # -FF92 30FC ; [.3E93.0020.0011.0002][.3E75.0020.0007.0002] # -FF92 FF70 ; [.3E93.0020.0011.0002][.3E75.0020.0007.0002] # -3081 30FC ; [.3E93.0020.0011.0001][.3E75.0020.0007.0002] # -30EC 30FC ; [.3E9B.0020.0011.0002][.3E75.0020.0007.0002] # -FF9A 30FC ; [.3E9B.0020.0011.0002][.3E75.0020.0007.0002] # -FF9A FF70 ; [.3E9B.0020.0011.0002][.3E75.0020.0007.0002] # -308C 30FC ; [.3E9B.0020.0011.0001][.3E75.0020.0007.0002] # -30F1 30FC ; [.3E9F.0020.0011.0002][.3E75.0020.0007.0002] # -3091 30FC ; [.3E9F.0020.0011.0001][.3E75.0020.0007.0002] # -30F9 30FC ; [.3E9F.0020.0011.0002][.0000.0037.0002][.3E75.0020.0007.0002] # -30F1 3099 30FC ; [.3E9F.0020.0011.0002][.0000.0037.0002][.3E75.0020.0007.0002] # -30F6 30FC ; [.3E7A.0020.000F.0002][.3E75.0020.0007.0002] # -3096 30FC ; [.3E7A.0020.000F.0001][.3E75.0020.0007.0002] # -31F8 30FC ; [.3E8E.0020.000F][.3E75.0020.0007.0002] # -31FE 30FC ; [.3E9B.0020.000F][.3E75.0020.0007.0002] # -30A9 30FC ; [.3E76.0020.000F.0002][.3E76.0020.0007.0002] # -FF6B 30FC ; [.3E76.0020.000F.0002][.3E76.0020.0007.0002] # -FF6B FF70 ; [.3E76.0020.000F.0002][.3E76.0020.0007.0002] # -3049 30FC ; [.3E76.0020.000F.0001][.3E76.0020.0007.0002] # -30AA 30FC ; [.3E76.0020.0011.0002][.3E76.0020.0007.0002] # -FF75 30FC ; [.3E76.0020.0011.0002][.3E76.0020.0007.0002] # -FF75 FF70 ; [.3E76.0020.0011.0002][.3E76.0020.0007.0002] # -304A 30FC ; [.3E76.0020.0011.0001][.3E76.0020.0007.0002] # -30B3 30FC ; [.3E7B.0020.0011.0002][.3E76.0020.0007.0002] # -FF7A 30FC ; [.3E7B.0020.0011.0002][.3E76.0020.0007.0002] # -FF7A FF70 ; [.3E7B.0020.0011.0002][.3E76.0020.0007.0002] # -3053 30FC ; [.3E7B.0020.0011.0001][.3E76.0020.0007.0002] # -30B4 30FC ; [.3E7B.0020.0011.0002][.0000.0037.0002][.3E76.0020.0007.0002] # -30B3 3099 30FC ; [.3E7B.0020.0011.0002][.0000.0037.0002][.3E76.0020.0007.0002] # -FF7A FF9E 30FC ; [.3E7B.0020.0011.0002][.0000.0037.0002][.3E76.0020.0007.0002] # -FF7A FF9E FF70 ; [.3E7B.0020.0011.0002][.0000.0037.0002][.3E76.0020.0007.0002] # -3054 30FC ; [.3E7B.0020.0011.0001][.0000.0037.0002][.3E76.0020.0007.0002] # -3053 3099 30FC ; [.3E7B.0020.0011.0001][.0000.0037.0002][.3E76.0020.0007.0002] # -30BD 30FC ; [.3E80.0020.0011.0002][.3E76.0020.0007.0002] # -FF7F 30FC ; [.3E80.0020.0011.0002][.3E76.0020.0007.0002] # -FF7F FF70 ; [.3E80.0020.0011.0002][.3E76.0020.0007.0002] # -305D 30FC ; [.3E80.0020.0011.0001][.3E76.0020.0007.0002] # -30BE 30FC ; [.3E80.0020.0011.0002][.0000.0037.0002][.3E76.0020.0007.0002] # -30BD 3099 30FC ; [.3E80.0020.0011.0002][.0000.0037.0002][.3E76.0020.0007.0002] # -FF7F FF9E 30FC ; [.3E80.0020.0011.0002][.0000.0037.0002][.3E76.0020.0007.0002] # -FF7F FF9E FF70 ; [.3E80.0020.0011.0002][.0000.0037.0002][.3E76.0020.0007.0002] # -305E 30FC ; [.3E80.0020.0011.0001][.0000.0037.0002][.3E76.0020.0007.0002] # -305D 3099 30FC ; [.3E80.0020.0011.0001][.0000.0037.0002][.3E76.0020.0007.0002] # -30C8 30FC ; [.3E85.0020.0011.0002][.3E76.0020.0007.0002] # -FF84 30FC ; [.3E85.0020.0011.0002][.3E76.0020.0007.0002] # -FF84 FF70 ; [.3E85.0020.0011.0002][.3E76.0020.0007.0002] # -3068 30FC ; [.3E85.0020.0011.0001][.3E76.0020.0007.0002] # -30C9 30FC ; [.3E85.0020.0011.0002][.0000.0037.0002][.3E76.0020.0007.0002] # -30C8 3099 30FC ; [.3E85.0020.0011.0002][.0000.0037.0002][.3E76.0020.0007.0002] # -FF84 FF9E 30FC ; [.3E85.0020.0011.0002][.0000.0037.0002][.3E76.0020.0007.0002] # -FF84 FF9E FF70 ; [.3E85.0020.0011.0002][.0000.0037.0002][.3E76.0020.0007.0002] # -3069 30FC ; [.3E85.0020.0011.0001][.0000.0037.0002][.3E76.0020.0007.0002] # -3068 3099 30FC ; [.3E85.0020.0011.0001][.0000.0037.0002][.3E76.0020.0007.0002] # -30CE 30FC ; [.3E8A.0020.0011.0002][.3E76.0020.0007.0002] # -FF89 30FC ; [.3E8A.0020.0011.0002][.3E76.0020.0007.0002] # -FF89 FF70 ; [.3E8A.0020.0011.0002][.3E76.0020.0007.0002] # -306E 30FC ; [.3E8A.0020.0011.0001][.3E76.0020.0007.0002] # -30DB 30FC ; [.3E8F.0020.0011.0002][.3E76.0020.0007.0002] # -FF8E 30FC ; [.3E8F.0020.0011.0002][.3E76.0020.0007.0002] # -FF8E FF70 ; [.3E8F.0020.0011.0002][.3E76.0020.0007.0002] # -307B 30FC ; [.3E8F.0020.0011.0001][.3E76.0020.0007.0002] # -30DC 30FC ; [.3E8F.0020.0011.0002][.0000.0037.0002][.3E76.0020.0007.0002] # -30DB 3099 30FC ; [.3E8F.0020.0011.0002][.0000.0037.0002][.3E76.0020.0007.0002] # -FF8E FF9E 30FC ; [.3E8F.0020.0011.0002][.0000.0037.0002][.3E76.0020.0007.0002] # -FF8E FF9E FF70 ; [.3E8F.0020.0011.0002][.0000.0037.0002][.3E76.0020.0007.0002] # -307C 30FC ; [.3E8F.0020.0011.0001][.0000.0037.0002][.3E76.0020.0007.0002] # -307B 3099 30FC ; [.3E8F.0020.0011.0001][.0000.0037.0002][.3E76.0020.0007.0002] # -30DD 30FC ; [.3E8F.0020.0011.0002][.0000.0038.0002][.3E76.0020.0007.0002] # -30DB 309A 30FC ; [.3E8F.0020.0011.0002][.0000.0038.0002][.3E76.0020.0007.0002] # -FF8E FF9F 30FC ; [.3E8F.0020.0011.0002][.0000.0038.0002][.3E76.0020.0007.0002] # -FF8E FF9F FF70 ; [.3E8F.0020.0011.0002][.0000.0038.0002][.3E76.0020.0007.0002] # -307D 30FC ; [.3E8F.0020.0011.0001][.0000.0038.0002][.3E76.0020.0007.0002] # -307B 309A 30FC ; [.3E8F.0020.0011.0001][.0000.0038.0002][.3E76.0020.0007.0002] # -30E2 30FC ; [.3E94.0020.0011.0002][.3E76.0020.0007.0002] # -FF93 30FC ; [.3E94.0020.0011.0002][.3E76.0020.0007.0002] # -FF93 FF70 ; [.3E94.0020.0011.0002][.3E76.0020.0007.0002] # -3082 30FC ; [.3E94.0020.0011.0001][.3E76.0020.0007.0002] # -30E7 30FC ; [.3E97.0020.000F.0002][.3E76.0020.0007.0002] # -FF6E 30FC ; [.3E97.0020.000F.0002][.3E76.0020.0007.0002] # -FF6E FF70 ; [.3E97.0020.000F.0002][.3E76.0020.0007.0002] # -3087 30FC ; [.3E97.0020.000F.0001][.3E76.0020.0007.0002] # -30E8 30FC ; [.3E97.0020.0011.0002][.3E76.0020.0007.0002] # -FF96 30FC ; [.3E97.0020.0011.0002][.3E76.0020.0007.0002] # -FF96 FF70 ; [.3E97.0020.0011.0002][.3E76.0020.0007.0002] # -3088 30FC ; [.3E97.0020.0011.0001][.3E76.0020.0007.0002] # -30ED 30FC ; [.3E9C.0020.0011.0002][.3E76.0020.0007.0002] # -FF9B 30FC ; [.3E9C.0020.0011.0002][.3E76.0020.0007.0002] # -FF9B FF70 ; [.3E9C.0020.0011.0002][.3E76.0020.0007.0002] # -308D 30FC ; [.3E9C.0020.0011.0001][.3E76.0020.0007.0002] # -30F2 30FC ; [.3EA0.0020.0011.0002][.3E76.0020.0007.0002] # -FF66 30FC ; [.3EA0.0020.0011.0002][.3E76.0020.0007.0002] # -FF66 FF70 ; [.3EA0.0020.0011.0002][.3E76.0020.0007.0002] # -3092 30FC ; [.3EA0.0020.0011.0001][.3E76.0020.0007.0002] # -30FA 30FC ; [.3EA0.0020.0011.0002][.0000.0037.0002][.3E76.0020.0007.0002] # -30F2 3099 30FC ; [.3EA0.0020.0011.0002][.0000.0037.0002][.3E76.0020.0007.0002] # -FF66 FF9E 30FC ; [.3EA0.0020.0011.0002][.0000.0037.0002][.3E76.0020.0007.0002] # -FF66 FF9E FF70 ; [.3EA0.0020.0011.0002][.0000.0037.0002][.3E76.0020.0007.0002] # -31F3 30FC ; [.3E85.0020.000F][.3E76.0020.0007.0002] # -31F9 30FC ; [.3E8F.0020.000F][.3E76.0020.0007.0002] # -31FF 30FC ; [.3E9C.0020.000F][.3E76.0020.0007.0002] # -30A1 30FD ; [.3E71.0020.000F.0002][.3E71.0020.0010.0002] # -FF67 30FD ; [.3E71.0020.000F.0002][.3E71.0020.0010.0002] # -3041 309D ; [.3E71.0020.000F.0001][.3E71.0020.0010.0002] # -30A2 30FD ; [.3E71.0020.0011.0002][.3E71.0020.0010.0002] # -FF71 30FD ; [.3E71.0020.0011.0002][.3E71.0020.0010.0002] # -3042 309D ; [.3E71.0020.0011.0001][.3E71.0020.0010.0002] # -30A3 30FD ; [.3E72.0020.000F.0002][.3E72.0020.0010.0002] # -FF68 30FD ; [.3E72.0020.000F.0002][.3E72.0020.0010.0002] # -3043 309D ; [.3E72.0020.000F.0001][.3E72.0020.0010.0002] # -30A4 30FD ; [.3E72.0020.0011.0002][.3E72.0020.0010.0002] # -FF72 30FD ; [.3E72.0020.0011.0002][.3E72.0020.0010.0002] # -3044 309D ; [.3E72.0020.0011.0001][.3E72.0020.0010.0002] # -30A5 30FD ; [.3E73.0020.000F.0002][.3E73.0020.0010.0002] # -FF69 30FD ; [.3E73.0020.000F.0002][.3E73.0020.0010.0002] # -3045 309D ; [.3E73.0020.000F.0001][.3E73.0020.0010.0002] # -30A5 30FE ; [.3E73.0020.000F.0002][.3E73.0020.0010.0002][.0000.0037.0002] # -FF69 30FE ; [.3E73.0020.000F.0002][.3E73.0020.0010.0002][.0000.0037.0002] # -3045 309E ; [.3E73.0020.000F.0001][.3E73.0020.0010.0002][.0000.0037.0002] # -30A6 30FD ; [.3E73.0020.0011.0002][.3E73.0020.0010.0002] # -FF73 30FD ; [.3E73.0020.0011.0002][.3E73.0020.0010.0002] # -3046 309D ; [.3E73.0020.0011.0001][.3E73.0020.0010.0002] # -30A6 30FE ; [.3E73.0020.0011.0002][.3E73.0020.0010.0002][.0000.0037.0002] # -FF73 30FE ; [.3E73.0020.0011.0002][.3E73.0020.0010.0002][.0000.0037.0002] # -3046 309E ; [.3E73.0020.0011.0001][.3E73.0020.0010.0002][.0000.0037.0002] # -30A7 30FD ; [.3E75.0020.000F.0002][.3E75.0020.0010.0002] # -FF6A 30FD ; [.3E75.0020.000F.0002][.3E75.0020.0010.0002] # -3047 309D ; [.3E75.0020.000F.0001][.3E75.0020.0010.0002] # -30A8 30FD ; [.3E75.0020.0011.0002][.3E75.0020.0010.0002] # -FF74 30FD ; [.3E75.0020.0011.0002][.3E75.0020.0010.0002] # -3048 309D ; [.3E75.0020.0011.0001][.3E75.0020.0010.0002] # -30A9 30FD ; [.3E76.0020.000F.0002][.3E76.0020.0010.0002] # -FF6B 30FD ; [.3E76.0020.000F.0002][.3E76.0020.0010.0002] # -3049 309D ; [.3E76.0020.000F.0001][.3E76.0020.0010.0002] # -30AA 30FD ; [.3E76.0020.0011.0002][.3E76.0020.0010.0002] # -FF75 30FD ; [.3E76.0020.0011.0002][.3E76.0020.0010.0002] # -304A 309D ; [.3E76.0020.0011.0001][.3E76.0020.0010.0002] # -30AB 30FD ; [.3E77.0020.0011.0002][.3E77.0020.0010.0002] # -FF76 30FD ; [.3E77.0020.0011.0002][.3E77.0020.0010.0002] # -304B 309D ; [.3E77.0020.0011.0001][.3E77.0020.0010.0002] # -30AB 30FE ; [.3E77.0020.0011.0002][.3E77.0020.0010.0002][.0000.0037.0002] # -FF76 30FE ; [.3E77.0020.0011.0002][.3E77.0020.0010.0002][.0000.0037.0002] # -304B 309E ; [.3E77.0020.0011.0001][.3E77.0020.0010.0002][.0000.0037.0002] # -30AC 30FD ; [.3E77.0020.0011.0002][.0000.0037.0002][.3E77.0020.0010.0002] # -30AB 3099 30FD ; [.3E77.0020.0011.0002][.0000.0037.0002][.3E77.0020.0010.0002] # -FF76 FF9E 30FD ; [.3E77.0020.0011.0002][.0000.0037.0002][.3E77.0020.0010.0002] # -304C 309D ; [.3E77.0020.0011.0001][.0000.0037.0002][.3E77.0020.0010.0002] # -304B 3099 309D ; [.3E77.0020.0011.0001][.0000.0037.0002][.3E77.0020.0010.0002] # -30AC 30FE ; [.3E77.0020.0011.0002][.0000.0037.0002][.3E77.0020.0010.0002][.0000.0037.0002] # -30AB 3099 30FE ; [.3E77.0020.0011.0002][.0000.0037.0002][.3E77.0020.0010.0002][.0000.0037.0002] # -FF76 FF9E 30FE ; [.3E77.0020.0011.0002][.0000.0037.0002][.3E77.0020.0010.0002][.0000.0037.0002] # -304C 309E ; [.3E77.0020.0011.0001][.0000.0037.0002][.3E77.0020.0010.0002][.0000.0037.0002] # -304B 3099 309E ; [.3E77.0020.0011.0001][.0000.0037.0002][.3E77.0020.0010.0002][.0000.0037.0002] # -30AD 30FD ; [.3E78.0020.0011.0002][.3E78.0020.0010.0002] # -FF77 30FD ; [.3E78.0020.0011.0002][.3E78.0020.0010.0002] # -304D 309D ; [.3E78.0020.0011.0001][.3E78.0020.0010.0002] # -30AD 30FE ; [.3E78.0020.0011.0002][.3E78.0020.0010.0002][.0000.0037.0002] # -FF77 30FE ; [.3E78.0020.0011.0002][.3E78.0020.0010.0002][.0000.0037.0002] # -304D 309E ; [.3E78.0020.0011.0001][.3E78.0020.0010.0002][.0000.0037.0002] # -30AE 30FD ; [.3E78.0020.0011.0002][.0000.0037.0002][.3E78.0020.0010.0002] # -30AD 3099 30FD ; [.3E78.0020.0011.0002][.0000.0037.0002][.3E78.0020.0010.0002] # -FF77 FF9E 30FD ; [.3E78.0020.0011.0002][.0000.0037.0002][.3E78.0020.0010.0002] # -304E 309D ; [.3E78.0020.0011.0001][.0000.0037.0002][.3E78.0020.0010.0002] # -304D 3099 309D ; [.3E78.0020.0011.0001][.0000.0037.0002][.3E78.0020.0010.0002] # -30AE 30FE ; [.3E78.0020.0011.0002][.0000.0037.0002][.3E78.0020.0010.0002][.0000.0037.0002] # -30AD 3099 30FE ; [.3E78.0020.0011.0002][.0000.0037.0002][.3E78.0020.0010.0002][.0000.0037.0002] # -FF77 FF9E 30FE ; [.3E78.0020.0011.0002][.0000.0037.0002][.3E78.0020.0010.0002][.0000.0037.0002] # -304E 309E ; [.3E78.0020.0011.0001][.0000.0037.0002][.3E78.0020.0010.0002][.0000.0037.0002] # -304D 3099 309E ; [.3E78.0020.0011.0001][.0000.0037.0002][.3E78.0020.0010.0002][.0000.0037.0002] # -30AF 30FD ; [.3E79.0020.0011.0002][.3E79.0020.0010.0002] # -FF78 30FD ; [.3E79.0020.0011.0002][.3E79.0020.0010.0002] # -304F 309D ; [.3E79.0020.0011.0001][.3E79.0020.0010.0002] # -30AF 30FE ; [.3E79.0020.0011.0002][.3E79.0020.0010.0002][.0000.0037.0002] # -FF78 30FE ; [.3E79.0020.0011.0002][.3E79.0020.0010.0002][.0000.0037.0002] # -304F 309E ; [.3E79.0020.0011.0001][.3E79.0020.0010.0002][.0000.0037.0002] # -30B0 30FD ; [.3E79.0020.0011.0002][.0000.0037.0002][.3E79.0020.0010.0002] # -30AF 3099 30FD ; [.3E79.0020.0011.0002][.0000.0037.0002][.3E79.0020.0010.0002] # -FF78 FF9E 30FD ; [.3E79.0020.0011.0002][.0000.0037.0002][.3E79.0020.0010.0002] # -3050 309D ; [.3E79.0020.0011.0001][.0000.0037.0002][.3E79.0020.0010.0002] # -304F 3099 309D ; [.3E79.0020.0011.0001][.0000.0037.0002][.3E79.0020.0010.0002] # -30B0 30FE ; [.3E79.0020.0011.0002][.0000.0037.0002][.3E79.0020.0010.0002][.0000.0037.0002] # -30AF 3099 30FE ; [.3E79.0020.0011.0002][.0000.0037.0002][.3E79.0020.0010.0002][.0000.0037.0002] # -FF78 FF9E 30FE ; [.3E79.0020.0011.0002][.0000.0037.0002][.3E79.0020.0010.0002][.0000.0037.0002] # -3050 309E ; [.3E79.0020.0011.0001][.0000.0037.0002][.3E79.0020.0010.0002][.0000.0037.0002] # -304F 3099 309E ; [.3E79.0020.0011.0001][.0000.0037.0002][.3E79.0020.0010.0002][.0000.0037.0002] # -30B1 30FD ; [.3E7A.0020.0011.0002][.3E7A.0020.0010.0002] # -FF79 30FD ; [.3E7A.0020.0011.0002][.3E7A.0020.0010.0002] # -3051 309D ; [.3E7A.0020.0011.0001][.3E7A.0020.0010.0002] # -30B1 30FE ; [.3E7A.0020.0011.0002][.3E7A.0020.0010.0002][.0000.0037.0002] # -FF79 30FE ; [.3E7A.0020.0011.0002][.3E7A.0020.0010.0002][.0000.0037.0002] # -3051 309E ; [.3E7A.0020.0011.0001][.3E7A.0020.0010.0002][.0000.0037.0002] # -30B2 30FD ; [.3E7A.0020.0011.0002][.0000.0037.0002][.3E7A.0020.0010.0002] # -30B1 3099 30FD ; [.3E7A.0020.0011.0002][.0000.0037.0002][.3E7A.0020.0010.0002] # -FF79 FF9E 30FD ; [.3E7A.0020.0011.0002][.0000.0037.0002][.3E7A.0020.0010.0002] # -3052 309D ; [.3E7A.0020.0011.0001][.0000.0037.0002][.3E7A.0020.0010.0002] # -3051 3099 309D ; [.3E7A.0020.0011.0001][.0000.0037.0002][.3E7A.0020.0010.0002] # -30B2 30FE ; [.3E7A.0020.0011.0002][.0000.0037.0002][.3E7A.0020.0010.0002][.0000.0037.0002] # -30B1 3099 30FE ; [.3E7A.0020.0011.0002][.0000.0037.0002][.3E7A.0020.0010.0002][.0000.0037.0002] # -FF79 FF9E 30FE ; [.3E7A.0020.0011.0002][.0000.0037.0002][.3E7A.0020.0010.0002][.0000.0037.0002] # -3052 309E ; [.3E7A.0020.0011.0001][.0000.0037.0002][.3E7A.0020.0010.0002][.0000.0037.0002] # -3051 3099 309E ; [.3E7A.0020.0011.0001][.0000.0037.0002][.3E7A.0020.0010.0002][.0000.0037.0002] # -30B3 30FD ; [.3E7B.0020.0011.0002][.3E7B.0020.0010.0002] # -FF7A 30FD ; [.3E7B.0020.0011.0002][.3E7B.0020.0010.0002] # -3053 309D ; [.3E7B.0020.0011.0001][.3E7B.0020.0010.0002] # -30B3 30FE ; [.3E7B.0020.0011.0002][.3E7B.0020.0010.0002][.0000.0037.0002] # -FF7A 30FE ; [.3E7B.0020.0011.0002][.3E7B.0020.0010.0002][.0000.0037.0002] # -3053 309E ; [.3E7B.0020.0011.0001][.3E7B.0020.0010.0002][.0000.0037.0002] # -30B4 30FD ; [.3E7B.0020.0011.0002][.0000.0037.0002][.3E7B.0020.0010.0002] # -30B3 3099 30FD ; [.3E7B.0020.0011.0002][.0000.0037.0002][.3E7B.0020.0010.0002] # -FF7A FF9E 30FD ; [.3E7B.0020.0011.0002][.0000.0037.0002][.3E7B.0020.0010.0002] # -3054 309D ; [.3E7B.0020.0011.0001][.0000.0037.0002][.3E7B.0020.0010.0002] # -3053 3099 309D ; [.3E7B.0020.0011.0001][.0000.0037.0002][.3E7B.0020.0010.0002] # -30B4 30FE ; [.3E7B.0020.0011.0002][.0000.0037.0002][.3E7B.0020.0010.0002][.0000.0037.0002] # -30B3 3099 30FE ; [.3E7B.0020.0011.0002][.0000.0037.0002][.3E7B.0020.0010.0002][.0000.0037.0002] # -FF7A FF9E 30FE ; [.3E7B.0020.0011.0002][.0000.0037.0002][.3E7B.0020.0010.0002][.0000.0037.0002] # -3054 309E ; [.3E7B.0020.0011.0001][.0000.0037.0002][.3E7B.0020.0010.0002][.0000.0037.0002] # -3053 3099 309E ; [.3E7B.0020.0011.0001][.0000.0037.0002][.3E7B.0020.0010.0002][.0000.0037.0002] # -30B5 30FD ; [.3E7C.0020.0011.0002][.3E7C.0020.0010.0002] # -FF7B 30FD ; [.3E7C.0020.0011.0002][.3E7C.0020.0010.0002] # -3055 309D ; [.3E7C.0020.0011.0001][.3E7C.0020.0010.0002] # -30B5 30FE ; [.3E7C.0020.0011.0002][.3E7C.0020.0010.0002][.0000.0037.0002] # -FF7B 30FE ; [.3E7C.0020.0011.0002][.3E7C.0020.0010.0002][.0000.0037.0002] # -3055 309E ; [.3E7C.0020.0011.0001][.3E7C.0020.0010.0002][.0000.0037.0002] # -30B6 30FD ; [.3E7C.0020.0011.0002][.0000.0037.0002][.3E7C.0020.0010.0002] # -30B5 3099 30FD ; [.3E7C.0020.0011.0002][.0000.0037.0002][.3E7C.0020.0010.0002] # -FF7B FF9E 30FD ; [.3E7C.0020.0011.0002][.0000.0037.0002][.3E7C.0020.0010.0002] # -3056 309D ; [.3E7C.0020.0011.0001][.0000.0037.0002][.3E7C.0020.0010.0002] # -3055 3099 309D ; [.3E7C.0020.0011.0001][.0000.0037.0002][.3E7C.0020.0010.0002] # -30B6 30FE ; [.3E7C.0020.0011.0002][.0000.0037.0002][.3E7C.0020.0010.0002][.0000.0037.0002] # -30B5 3099 30FE ; [.3E7C.0020.0011.0002][.0000.0037.0002][.3E7C.0020.0010.0002][.0000.0037.0002] # -FF7B FF9E 30FE ; [.3E7C.0020.0011.0002][.0000.0037.0002][.3E7C.0020.0010.0002][.0000.0037.0002] # -3056 309E ; [.3E7C.0020.0011.0001][.0000.0037.0002][.3E7C.0020.0010.0002][.0000.0037.0002] # -3055 3099 309E ; [.3E7C.0020.0011.0001][.0000.0037.0002][.3E7C.0020.0010.0002][.0000.0037.0002] # -30B7 30FD ; [.3E7D.0020.0011.0002][.3E7D.0020.0010.0002] # -FF7C 30FD ; [.3E7D.0020.0011.0002][.3E7D.0020.0010.0002] # -3057 309D ; [.3E7D.0020.0011.0001][.3E7D.0020.0010.0002] # -30B7 30FE ; [.3E7D.0020.0011.0002][.3E7D.0020.0010.0002][.0000.0037.0002] # -FF7C 30FE ; [.3E7D.0020.0011.0002][.3E7D.0020.0010.0002][.0000.0037.0002] # -3057 309E ; [.3E7D.0020.0011.0001][.3E7D.0020.0010.0002][.0000.0037.0002] # -30B8 30FD ; [.3E7D.0020.0011.0002][.0000.0037.0002][.3E7D.0020.0010.0002] # -30B7 3099 30FD ; [.3E7D.0020.0011.0002][.0000.0037.0002][.3E7D.0020.0010.0002] # -FF7C FF9E 30FD ; [.3E7D.0020.0011.0002][.0000.0037.0002][.3E7D.0020.0010.0002] # -3058 309D ; [.3E7D.0020.0011.0001][.0000.0037.0002][.3E7D.0020.0010.0002] # -3057 3099 309D ; [.3E7D.0020.0011.0001][.0000.0037.0002][.3E7D.0020.0010.0002] # -30B8 30FE ; [.3E7D.0020.0011.0002][.0000.0037.0002][.3E7D.0020.0010.0002][.0000.0037.0002] # -30B7 3099 30FE ; [.3E7D.0020.0011.0002][.0000.0037.0002][.3E7D.0020.0010.0002][.0000.0037.0002] # -FF7C FF9E 30FE ; [.3E7D.0020.0011.0002][.0000.0037.0002][.3E7D.0020.0010.0002][.0000.0037.0002] # -3058 309E ; [.3E7D.0020.0011.0001][.0000.0037.0002][.3E7D.0020.0010.0002][.0000.0037.0002] # -3057 3099 309E ; [.3E7D.0020.0011.0001][.0000.0037.0002][.3E7D.0020.0010.0002][.0000.0037.0002] # -30B9 30FD ; [.3E7E.0020.0011.0002][.3E7E.0020.0010.0002] # -FF7D 30FD ; [.3E7E.0020.0011.0002][.3E7E.0020.0010.0002] # -3059 309D ; [.3E7E.0020.0011.0001][.3E7E.0020.0010.0002] # -30B9 30FE ; [.3E7E.0020.0011.0002][.3E7E.0020.0010.0002][.0000.0037.0002] # -FF7D 30FE ; [.3E7E.0020.0011.0002][.3E7E.0020.0010.0002][.0000.0037.0002] # -3059 309E ; [.3E7E.0020.0011.0001][.3E7E.0020.0010.0002][.0000.0037.0002] # -30BA 30FD ; [.3E7E.0020.0011.0002][.0000.0037.0002][.3E7E.0020.0010.0002] # -30B9 3099 30FD ; [.3E7E.0020.0011.0002][.0000.0037.0002][.3E7E.0020.0010.0002] # -FF7D FF9E 30FD ; [.3E7E.0020.0011.0002][.0000.0037.0002][.3E7E.0020.0010.0002] # -305A 309D ; [.3E7E.0020.0011.0001][.0000.0037.0002][.3E7E.0020.0010.0002] # -3059 3099 309D ; [.3E7E.0020.0011.0001][.0000.0037.0002][.3E7E.0020.0010.0002] # -30BA 30FE ; [.3E7E.0020.0011.0002][.0000.0037.0002][.3E7E.0020.0010.0002][.0000.0037.0002] # -30B9 3099 30FE ; [.3E7E.0020.0011.0002][.0000.0037.0002][.3E7E.0020.0010.0002][.0000.0037.0002] # -FF7D FF9E 30FE ; [.3E7E.0020.0011.0002][.0000.0037.0002][.3E7E.0020.0010.0002][.0000.0037.0002] # -305A 309E ; [.3E7E.0020.0011.0001][.0000.0037.0002][.3E7E.0020.0010.0002][.0000.0037.0002] # -3059 3099 309E ; [.3E7E.0020.0011.0001][.0000.0037.0002][.3E7E.0020.0010.0002][.0000.0037.0002] # -30BB 30FD ; [.3E7F.0020.0011.0002][.3E7F.0020.0010.0002] # -FF7E 30FD ; [.3E7F.0020.0011.0002][.3E7F.0020.0010.0002] # -305B 309D ; [.3E7F.0020.0011.0001][.3E7F.0020.0010.0002] # -30BB 30FE ; [.3E7F.0020.0011.0002][.3E7F.0020.0010.0002][.0000.0037.0002] # -FF7E 30FE ; [.3E7F.0020.0011.0002][.3E7F.0020.0010.0002][.0000.0037.0002] # -305B 309E ; [.3E7F.0020.0011.0001][.3E7F.0020.0010.0002][.0000.0037.0002] # -30BC 30FD ; [.3E7F.0020.0011.0002][.0000.0037.0002][.3E7F.0020.0010.0002] # -30BB 3099 30FD ; [.3E7F.0020.0011.0002][.0000.0037.0002][.3E7F.0020.0010.0002] # -FF7E FF9E 30FD ; [.3E7F.0020.0011.0002][.0000.0037.0002][.3E7F.0020.0010.0002] # -305C 309D ; [.3E7F.0020.0011.0001][.0000.0037.0002][.3E7F.0020.0010.0002] # -305B 3099 309D ; [.3E7F.0020.0011.0001][.0000.0037.0002][.3E7F.0020.0010.0002] # -30BC 30FE ; [.3E7F.0020.0011.0002][.0000.0037.0002][.3E7F.0020.0010.0002][.0000.0037.0002] # -30BB 3099 30FE ; [.3E7F.0020.0011.0002][.0000.0037.0002][.3E7F.0020.0010.0002][.0000.0037.0002] # -FF7E FF9E 30FE ; [.3E7F.0020.0011.0002][.0000.0037.0002][.3E7F.0020.0010.0002][.0000.0037.0002] # -305C 309E ; [.3E7F.0020.0011.0001][.0000.0037.0002][.3E7F.0020.0010.0002][.0000.0037.0002] # -305B 3099 309E ; [.3E7F.0020.0011.0001][.0000.0037.0002][.3E7F.0020.0010.0002][.0000.0037.0002] # -30BD 30FD ; [.3E80.0020.0011.0002][.3E80.0020.0010.0002] # -FF7F 30FD ; [.3E80.0020.0011.0002][.3E80.0020.0010.0002] # -305D 309D ; [.3E80.0020.0011.0001][.3E80.0020.0010.0002] # -30BD 30FE ; [.3E80.0020.0011.0002][.3E80.0020.0010.0002][.0000.0037.0002] # -FF7F 30FE ; [.3E80.0020.0011.0002][.3E80.0020.0010.0002][.0000.0037.0002] # -305D 309E ; [.3E80.0020.0011.0001][.3E80.0020.0010.0002][.0000.0037.0002] # -30BE 30FD ; [.3E80.0020.0011.0002][.0000.0037.0002][.3E80.0020.0010.0002] # -30BD 3099 30FD ; [.3E80.0020.0011.0002][.0000.0037.0002][.3E80.0020.0010.0002] # -FF7F FF9E 30FD ; [.3E80.0020.0011.0002][.0000.0037.0002][.3E80.0020.0010.0002] # -305E 309D ; [.3E80.0020.0011.0001][.0000.0037.0002][.3E80.0020.0010.0002] # -305D 3099 309D ; [.3E80.0020.0011.0001][.0000.0037.0002][.3E80.0020.0010.0002] # -30BE 30FE ; [.3E80.0020.0011.0002][.0000.0037.0002][.3E80.0020.0010.0002][.0000.0037.0002] # -30BD 3099 30FE ; [.3E80.0020.0011.0002][.0000.0037.0002][.3E80.0020.0010.0002][.0000.0037.0002] # -FF7F FF9E 30FE ; [.3E80.0020.0011.0002][.0000.0037.0002][.3E80.0020.0010.0002][.0000.0037.0002] # -305E 309E ; [.3E80.0020.0011.0001][.0000.0037.0002][.3E80.0020.0010.0002][.0000.0037.0002] # -305D 3099 309E ; [.3E80.0020.0011.0001][.0000.0037.0002][.3E80.0020.0010.0002][.0000.0037.0002] # -30BF 30FD ; [.3E81.0020.0011.0002][.3E81.0020.0010.0002] # -FF80 30FD ; [.3E81.0020.0011.0002][.3E81.0020.0010.0002] # -305F 309D ; [.3E81.0020.0011.0001][.3E81.0020.0010.0002] # -30BF 30FE ; [.3E81.0020.0011.0002][.3E81.0020.0010.0002][.0000.0037.0002] # -FF80 30FE ; [.3E81.0020.0011.0002][.3E81.0020.0010.0002][.0000.0037.0002] # -305F 309E ; [.3E81.0020.0011.0001][.3E81.0020.0010.0002][.0000.0037.0002] # -30C0 30FD ; [.3E81.0020.0011.0002][.0000.0037.0002][.3E81.0020.0010.0002] # -30BF 3099 30FD ; [.3E81.0020.0011.0002][.0000.0037.0002][.3E81.0020.0010.0002] # -FF80 FF9E 30FD ; [.3E81.0020.0011.0002][.0000.0037.0002][.3E81.0020.0010.0002] # -3060 309D ; [.3E81.0020.0011.0001][.0000.0037.0002][.3E81.0020.0010.0002] # -305F 3099 309D ; [.3E81.0020.0011.0001][.0000.0037.0002][.3E81.0020.0010.0002] # -30C0 30FE ; [.3E81.0020.0011.0002][.0000.0037.0002][.3E81.0020.0010.0002][.0000.0037.0002] # -30BF 3099 30FE ; [.3E81.0020.0011.0002][.0000.0037.0002][.3E81.0020.0010.0002][.0000.0037.0002] # -FF80 FF9E 30FE ; [.3E81.0020.0011.0002][.0000.0037.0002][.3E81.0020.0010.0002][.0000.0037.0002] # -3060 309E ; [.3E81.0020.0011.0001][.0000.0037.0002][.3E81.0020.0010.0002][.0000.0037.0002] # -305F 3099 309E ; [.3E81.0020.0011.0001][.0000.0037.0002][.3E81.0020.0010.0002][.0000.0037.0002] # -30C1 30FD ; [.3E82.0020.0011.0002][.3E82.0020.0010.0002] # -FF81 30FD ; [.3E82.0020.0011.0002][.3E82.0020.0010.0002] # -3061 309D ; [.3E82.0020.0011.0001][.3E82.0020.0010.0002] # -30C1 30FE ; [.3E82.0020.0011.0002][.3E82.0020.0010.0002][.0000.0037.0002] # -FF81 30FE ; [.3E82.0020.0011.0002][.3E82.0020.0010.0002][.0000.0037.0002] # -3061 309E ; [.3E82.0020.0011.0001][.3E82.0020.0010.0002][.0000.0037.0002] # -30C2 30FD ; [.3E82.0020.0011.0002][.0000.0037.0002][.3E82.0020.0010.0002] # -30C1 3099 30FD ; [.3E82.0020.0011.0002][.0000.0037.0002][.3E82.0020.0010.0002] # -FF81 FF9E 30FD ; [.3E82.0020.0011.0002][.0000.0037.0002][.3E82.0020.0010.0002] # -3062 309D ; [.3E82.0020.0011.0001][.0000.0037.0002][.3E82.0020.0010.0002] # -3061 3099 309D ; [.3E82.0020.0011.0001][.0000.0037.0002][.3E82.0020.0010.0002] # -30C2 30FE ; [.3E82.0020.0011.0002][.0000.0037.0002][.3E82.0020.0010.0002][.0000.0037.0002] # -30C1 3099 30FE ; [.3E82.0020.0011.0002][.0000.0037.0002][.3E82.0020.0010.0002][.0000.0037.0002] # -FF81 FF9E 30FE ; [.3E82.0020.0011.0002][.0000.0037.0002][.3E82.0020.0010.0002][.0000.0037.0002] # -3062 309E ; [.3E82.0020.0011.0001][.0000.0037.0002][.3E82.0020.0010.0002][.0000.0037.0002] # -3061 3099 309E ; [.3E82.0020.0011.0001][.0000.0037.0002][.3E82.0020.0010.0002][.0000.0037.0002] # -30C3 30FD ; [.3E83.0020.000F.0002][.3E83.0020.0010.0002] # -FF6F 30FD ; [.3E83.0020.000F.0002][.3E83.0020.0010.0002] # -3063 309D ; [.3E83.0020.000F.0001][.3E83.0020.0010.0002] # -30C3 30FE ; [.3E83.0020.000F.0002][.3E83.0020.0010.0002][.0000.0037.0002] # -FF6F 30FE ; [.3E83.0020.000F.0002][.3E83.0020.0010.0002][.0000.0037.0002] # -3063 309E ; [.3E83.0020.000F.0001][.3E83.0020.0010.0002][.0000.0037.0002] # -30C4 30FD ; [.3E83.0020.0011.0002][.3E83.0020.0010.0002] # -FF82 30FD ; [.3E83.0020.0011.0002][.3E83.0020.0010.0002] # -3064 309D ; [.3E83.0020.0011.0001][.3E83.0020.0010.0002] # -30C4 30FE ; [.3E83.0020.0011.0002][.3E83.0020.0010.0002][.0000.0037.0002] # -FF82 30FE ; [.3E83.0020.0011.0002][.3E83.0020.0010.0002][.0000.0037.0002] # -3064 309E ; [.3E83.0020.0011.0001][.3E83.0020.0010.0002][.0000.0037.0002] # -30C5 30FD ; [.3E83.0020.0011.0002][.0000.0037.0002][.3E83.0020.0010.0002] # -30C4 3099 30FD ; [.3E83.0020.0011.0002][.0000.0037.0002][.3E83.0020.0010.0002] # -FF82 FF9E 30FD ; [.3E83.0020.0011.0002][.0000.0037.0002][.3E83.0020.0010.0002] # -3065 309D ; [.3E83.0020.0011.0001][.0000.0037.0002][.3E83.0020.0010.0002] # -3064 3099 309D ; [.3E83.0020.0011.0001][.0000.0037.0002][.3E83.0020.0010.0002] # -30C5 30FE ; [.3E83.0020.0011.0002][.0000.0037.0002][.3E83.0020.0010.0002][.0000.0037.0002] # -30C4 3099 30FE ; [.3E83.0020.0011.0002][.0000.0037.0002][.3E83.0020.0010.0002][.0000.0037.0002] # -FF82 FF9E 30FE ; [.3E83.0020.0011.0002][.0000.0037.0002][.3E83.0020.0010.0002][.0000.0037.0002] # -3065 309E ; [.3E83.0020.0011.0001][.0000.0037.0002][.3E83.0020.0010.0002][.0000.0037.0002] # -3064 3099 309E ; [.3E83.0020.0011.0001][.0000.0037.0002][.3E83.0020.0010.0002][.0000.0037.0002] # -30C6 30FD ; [.3E84.0020.0011.0002][.3E84.0020.0010.0002] # -FF83 30FD ; [.3E84.0020.0011.0002][.3E84.0020.0010.0002] # -3066 309D ; [.3E84.0020.0011.0001][.3E84.0020.0010.0002] # -30C6 30FE ; [.3E84.0020.0011.0002][.3E84.0020.0010.0002][.0000.0037.0002] # -FF83 30FE ; [.3E84.0020.0011.0002][.3E84.0020.0010.0002][.0000.0037.0002] # -3066 309E ; [.3E84.0020.0011.0001][.3E84.0020.0010.0002][.0000.0037.0002] # -30C7 30FD ; [.3E84.0020.0011.0002][.0000.0037.0002][.3E84.0020.0010.0002] # -30C6 3099 30FD ; [.3E84.0020.0011.0002][.0000.0037.0002][.3E84.0020.0010.0002] # -FF83 FF9E 30FD ; [.3E84.0020.0011.0002][.0000.0037.0002][.3E84.0020.0010.0002] # -3067 309D ; [.3E84.0020.0011.0001][.0000.0037.0002][.3E84.0020.0010.0002] # -3066 3099 309D ; [.3E84.0020.0011.0001][.0000.0037.0002][.3E84.0020.0010.0002] # -30C7 30FE ; [.3E84.0020.0011.0002][.0000.0037.0002][.3E84.0020.0010.0002][.0000.0037.0002] # -30C6 3099 30FE ; [.3E84.0020.0011.0002][.0000.0037.0002][.3E84.0020.0010.0002][.0000.0037.0002] # -FF83 FF9E 30FE ; [.3E84.0020.0011.0002][.0000.0037.0002][.3E84.0020.0010.0002][.0000.0037.0002] # -3067 309E ; [.3E84.0020.0011.0001][.0000.0037.0002][.3E84.0020.0010.0002][.0000.0037.0002] # -3066 3099 309E ; [.3E84.0020.0011.0001][.0000.0037.0002][.3E84.0020.0010.0002][.0000.0037.0002] # -30C8 30FD ; [.3E85.0020.0011.0002][.3E85.0020.0010.0002] # -FF84 30FD ; [.3E85.0020.0011.0002][.3E85.0020.0010.0002] # -3068 309D ; [.3E85.0020.0011.0001][.3E85.0020.0010.0002] # -30C8 30FE ; [.3E85.0020.0011.0002][.3E85.0020.0010.0002][.0000.0037.0002] # -FF84 30FE ; [.3E85.0020.0011.0002][.3E85.0020.0010.0002][.0000.0037.0002] # -3068 309E ; [.3E85.0020.0011.0001][.3E85.0020.0010.0002][.0000.0037.0002] # -30C9 30FD ; [.3E85.0020.0011.0002][.0000.0037.0002][.3E85.0020.0010.0002] # -30C8 3099 30FD ; [.3E85.0020.0011.0002][.0000.0037.0002][.3E85.0020.0010.0002] # -FF84 FF9E 30FD ; [.3E85.0020.0011.0002][.0000.0037.0002][.3E85.0020.0010.0002] # -3069 309D ; [.3E85.0020.0011.0001][.0000.0037.0002][.3E85.0020.0010.0002] # -3068 3099 309D ; [.3E85.0020.0011.0001][.0000.0037.0002][.3E85.0020.0010.0002] # -30C9 30FE ; [.3E85.0020.0011.0002][.0000.0037.0002][.3E85.0020.0010.0002][.0000.0037.0002] # -30C8 3099 30FE ; [.3E85.0020.0011.0002][.0000.0037.0002][.3E85.0020.0010.0002][.0000.0037.0002] # -FF84 FF9E 30FE ; [.3E85.0020.0011.0002][.0000.0037.0002][.3E85.0020.0010.0002][.0000.0037.0002] # -3069 309E ; [.3E85.0020.0011.0001][.0000.0037.0002][.3E85.0020.0010.0002][.0000.0037.0002] # -3068 3099 309E ; [.3E85.0020.0011.0001][.0000.0037.0002][.3E85.0020.0010.0002][.0000.0037.0002] # -30CA 30FD ; [.3E86.0020.0011.0002][.3E86.0020.0010.0002] # -FF85 30FD ; [.3E86.0020.0011.0002][.3E86.0020.0010.0002] # -306A 309D ; [.3E86.0020.0011.0001][.3E86.0020.0010.0002] # -30CB 30FD ; [.3E87.0020.0011.0002][.3E87.0020.0010.0002] # -FF86 30FD ; [.3E87.0020.0011.0002][.3E87.0020.0010.0002] # -306B 309D ; [.3E87.0020.0011.0001][.3E87.0020.0010.0002] # -30CC 30FD ; [.3E88.0020.0011.0002][.3E88.0020.0010.0002] # -FF87 30FD ; [.3E88.0020.0011.0002][.3E88.0020.0010.0002] # -306C 309D ; [.3E88.0020.0011.0001][.3E88.0020.0010.0002] # -30CD 30FD ; [.3E89.0020.0011.0002][.3E89.0020.0010.0002] # -FF88 30FD ; [.3E89.0020.0011.0002][.3E89.0020.0010.0002] # -306D 309D ; [.3E89.0020.0011.0001][.3E89.0020.0010.0002] # -30CE 30FD ; [.3E8A.0020.0011.0002][.3E8A.0020.0010.0002] # -FF89 30FD ; [.3E8A.0020.0011.0002][.3E8A.0020.0010.0002] # -306E 309D ; [.3E8A.0020.0011.0001][.3E8A.0020.0010.0002] # -30CF 30FD ; [.3E8B.0020.0011.0002][.3E8B.0020.0010.0002] # -FF8A 30FD ; [.3E8B.0020.0011.0002][.3E8B.0020.0010.0002] # -306F 309D ; [.3E8B.0020.0011.0001][.3E8B.0020.0010.0002] # -30CF 30FE ; [.3E8B.0020.0011.0002][.3E8B.0020.0010.0002][.0000.0037.0002] # -FF8A 30FE ; [.3E8B.0020.0011.0002][.3E8B.0020.0010.0002][.0000.0037.0002] # -306F 309E ; [.3E8B.0020.0011.0001][.3E8B.0020.0010.0002][.0000.0037.0002] # -30D0 30FD ; [.3E8B.0020.0011.0002][.0000.0037.0002][.3E8B.0020.0010.0002] # -30CF 3099 30FD ; [.3E8B.0020.0011.0002][.0000.0037.0002][.3E8B.0020.0010.0002] # -FF8A FF9E 30FD ; [.3E8B.0020.0011.0002][.0000.0037.0002][.3E8B.0020.0010.0002] # -3070 309D ; [.3E8B.0020.0011.0001][.0000.0037.0002][.3E8B.0020.0010.0002] # -306F 3099 309D ; [.3E8B.0020.0011.0001][.0000.0037.0002][.3E8B.0020.0010.0002] # -30D0 30FE ; [.3E8B.0020.0011.0002][.0000.0037.0002][.3E8B.0020.0010.0002][.0000.0037.0002] # -30CF 3099 30FE ; [.3E8B.0020.0011.0002][.0000.0037.0002][.3E8B.0020.0010.0002][.0000.0037.0002] # -FF8A FF9E 30FE ; [.3E8B.0020.0011.0002][.0000.0037.0002][.3E8B.0020.0010.0002][.0000.0037.0002] # -3070 309E ; [.3E8B.0020.0011.0001][.0000.0037.0002][.3E8B.0020.0010.0002][.0000.0037.0002] # -306F 3099 309E ; [.3E8B.0020.0011.0001][.0000.0037.0002][.3E8B.0020.0010.0002][.0000.0037.0002] # -30D1 30FD ; [.3E8B.0020.0011.0002][.0000.0038.0002][.3E8B.0020.0010.0002] # -30CF 309A 30FD ; [.3E8B.0020.0011.0002][.0000.0038.0002][.3E8B.0020.0010.0002] # -FF8A FF9F 30FD ; [.3E8B.0020.0011.0002][.0000.0038.0002][.3E8B.0020.0010.0002] # -3071 309D ; [.3E8B.0020.0011.0001][.0000.0038.0002][.3E8B.0020.0010.0002] # -306F 309A 309D ; [.3E8B.0020.0011.0001][.0000.0038.0002][.3E8B.0020.0010.0002] # -30D1 30FE ; [.3E8B.0020.0011.0002][.0000.0038.0002][.3E8B.0020.0010.0002][.0000.0037.0002] # -30CF 309A 30FE ; [.3E8B.0020.0011.0002][.0000.0038.0002][.3E8B.0020.0010.0002][.0000.0037.0002] # -FF8A FF9F 30FE ; [.3E8B.0020.0011.0002][.0000.0038.0002][.3E8B.0020.0010.0002][.0000.0037.0002] # -3071 309E ; [.3E8B.0020.0011.0001][.0000.0038.0002][.3E8B.0020.0010.0002][.0000.0037.0002] # -306F 309A 309E ; [.3E8B.0020.0011.0001][.0000.0038.0002][.3E8B.0020.0010.0002][.0000.0037.0002] # -30D2 30FD ; [.3E8C.0020.0011.0002][.3E8C.0020.0010.0002] # -FF8B 30FD ; [.3E8C.0020.0011.0002][.3E8C.0020.0010.0002] # -3072 309D ; [.3E8C.0020.0011.0001][.3E8C.0020.0010.0002] # -30D2 30FE ; [.3E8C.0020.0011.0002][.3E8C.0020.0010.0002][.0000.0037.0002] # -FF8B 30FE ; [.3E8C.0020.0011.0002][.3E8C.0020.0010.0002][.0000.0037.0002] # -3072 309E ; [.3E8C.0020.0011.0001][.3E8C.0020.0010.0002][.0000.0037.0002] # -30D3 30FD ; [.3E8C.0020.0011.0002][.0000.0037.0002][.3E8C.0020.0010.0002] # -30D2 3099 30FD ; [.3E8C.0020.0011.0002][.0000.0037.0002][.3E8C.0020.0010.0002] # -FF8B FF9E 30FD ; [.3E8C.0020.0011.0002][.0000.0037.0002][.3E8C.0020.0010.0002] # -3073 309D ; [.3E8C.0020.0011.0001][.0000.0037.0002][.3E8C.0020.0010.0002] # -3072 3099 309D ; [.3E8C.0020.0011.0001][.0000.0037.0002][.3E8C.0020.0010.0002] # -30D3 30FE ; [.3E8C.0020.0011.0002][.0000.0037.0002][.3E8C.0020.0010.0002][.0000.0037.0002] # -30D2 3099 30FE ; [.3E8C.0020.0011.0002][.0000.0037.0002][.3E8C.0020.0010.0002][.0000.0037.0002] # -FF8B FF9E 30FE ; [.3E8C.0020.0011.0002][.0000.0037.0002][.3E8C.0020.0010.0002][.0000.0037.0002] # -3073 309E ; [.3E8C.0020.0011.0001][.0000.0037.0002][.3E8C.0020.0010.0002][.0000.0037.0002] # -3072 3099 309E ; [.3E8C.0020.0011.0001][.0000.0037.0002][.3E8C.0020.0010.0002][.0000.0037.0002] # -30D4 30FD ; [.3E8C.0020.0011.0002][.0000.0038.0002][.3E8C.0020.0010.0002] # -30D2 309A 30FD ; [.3E8C.0020.0011.0002][.0000.0038.0002][.3E8C.0020.0010.0002] # -FF8B FF9F 30FD ; [.3E8C.0020.0011.0002][.0000.0038.0002][.3E8C.0020.0010.0002] # -3074 309D ; [.3E8C.0020.0011.0001][.0000.0038.0002][.3E8C.0020.0010.0002] # -3072 309A 309D ; [.3E8C.0020.0011.0001][.0000.0038.0002][.3E8C.0020.0010.0002] # -30D4 30FE ; [.3E8C.0020.0011.0002][.0000.0038.0002][.3E8C.0020.0010.0002][.0000.0037.0002] # -30D2 309A 30FE ; [.3E8C.0020.0011.0002][.0000.0038.0002][.3E8C.0020.0010.0002][.0000.0037.0002] # -FF8B FF9F 30FE ; [.3E8C.0020.0011.0002][.0000.0038.0002][.3E8C.0020.0010.0002][.0000.0037.0002] # -3074 309E ; [.3E8C.0020.0011.0001][.0000.0038.0002][.3E8C.0020.0010.0002][.0000.0037.0002] # -3072 309A 309E ; [.3E8C.0020.0011.0001][.0000.0038.0002][.3E8C.0020.0010.0002][.0000.0037.0002] # -30D5 30FD ; [.3E8D.0020.0011.0002][.3E8D.0020.0010.0002] # -FF8C 30FD ; [.3E8D.0020.0011.0002][.3E8D.0020.0010.0002] # -3075 309D ; [.3E8D.0020.0011.0001][.3E8D.0020.0010.0002] # -30D5 30FE ; [.3E8D.0020.0011.0002][.3E8D.0020.0010.0002][.0000.0037.0002] # -FF8C 30FE ; [.3E8D.0020.0011.0002][.3E8D.0020.0010.0002][.0000.0037.0002] # -3075 309E ; [.3E8D.0020.0011.0001][.3E8D.0020.0010.0002][.0000.0037.0002] # -30D6 30FD ; [.3E8D.0020.0011.0002][.0000.0037.0002][.3E8D.0020.0010.0002] # -30D5 3099 30FD ; [.3E8D.0020.0011.0002][.0000.0037.0002][.3E8D.0020.0010.0002] # -FF8C FF9E 30FD ; [.3E8D.0020.0011.0002][.0000.0037.0002][.3E8D.0020.0010.0002] # -3076 309D ; [.3E8D.0020.0011.0001][.0000.0037.0002][.3E8D.0020.0010.0002] # -3075 3099 309D ; [.3E8D.0020.0011.0001][.0000.0037.0002][.3E8D.0020.0010.0002] # -30D6 30FE ; [.3E8D.0020.0011.0002][.0000.0037.0002][.3E8D.0020.0010.0002][.0000.0037.0002] # -30D5 3099 30FE ; [.3E8D.0020.0011.0002][.0000.0037.0002][.3E8D.0020.0010.0002][.0000.0037.0002] # -FF8C FF9E 30FE ; [.3E8D.0020.0011.0002][.0000.0037.0002][.3E8D.0020.0010.0002][.0000.0037.0002] # -3076 309E ; [.3E8D.0020.0011.0001][.0000.0037.0002][.3E8D.0020.0010.0002][.0000.0037.0002] # -3075 3099 309E ; [.3E8D.0020.0011.0001][.0000.0037.0002][.3E8D.0020.0010.0002][.0000.0037.0002] # -30D7 30FD ; [.3E8D.0020.0011.0002][.0000.0038.0002][.3E8D.0020.0010.0002] # -30D5 309A 30FD ; [.3E8D.0020.0011.0002][.0000.0038.0002][.3E8D.0020.0010.0002] # -FF8C FF9F 30FD ; [.3E8D.0020.0011.0002][.0000.0038.0002][.3E8D.0020.0010.0002] # -3077 309D ; [.3E8D.0020.0011.0001][.0000.0038.0002][.3E8D.0020.0010.0002] # -3075 309A 309D ; [.3E8D.0020.0011.0001][.0000.0038.0002][.3E8D.0020.0010.0002] # -30D7 30FE ; [.3E8D.0020.0011.0002][.0000.0038.0002][.3E8D.0020.0010.0002][.0000.0037.0002] # -30D5 309A 30FE ; [.3E8D.0020.0011.0002][.0000.0038.0002][.3E8D.0020.0010.0002][.0000.0037.0002] # -FF8C FF9F 30FE ; [.3E8D.0020.0011.0002][.0000.0038.0002][.3E8D.0020.0010.0002][.0000.0037.0002] # -3077 309E ; [.3E8D.0020.0011.0001][.0000.0038.0002][.3E8D.0020.0010.0002][.0000.0037.0002] # -3075 309A 309E ; [.3E8D.0020.0011.0001][.0000.0038.0002][.3E8D.0020.0010.0002][.0000.0037.0002] # -30D8 30FD ; [.3E8E.0020.0011.0002][.3E8E.0020.0010.0002] # -FF8D 30FD ; [.3E8E.0020.0011.0002][.3E8E.0020.0010.0002] # -3078 309D ; [.3E8E.0020.0011.0001][.3E8E.0020.0010.0002] # -30D8 30FE ; [.3E8E.0020.0011.0002][.3E8E.0020.0010.0002][.0000.0037.0002] # -FF8D 30FE ; [.3E8E.0020.0011.0002][.3E8E.0020.0010.0002][.0000.0037.0002] # -3078 309E ; [.3E8E.0020.0011.0001][.3E8E.0020.0010.0002][.0000.0037.0002] # -30D9 30FD ; [.3E8E.0020.0011.0002][.0000.0037.0002][.3E8E.0020.0010.0002] # -30D8 3099 30FD ; [.3E8E.0020.0011.0002][.0000.0037.0002][.3E8E.0020.0010.0002] # -FF8D FF9E 30FD ; [.3E8E.0020.0011.0002][.0000.0037.0002][.3E8E.0020.0010.0002] # -3079 309D ; [.3E8E.0020.0011.0001][.0000.0037.0002][.3E8E.0020.0010.0002] # -3078 3099 309D ; [.3E8E.0020.0011.0001][.0000.0037.0002][.3E8E.0020.0010.0002] # -30D9 30FE ; [.3E8E.0020.0011.0002][.0000.0037.0002][.3E8E.0020.0010.0002][.0000.0037.0002] # -30D8 3099 30FE ; [.3E8E.0020.0011.0002][.0000.0037.0002][.3E8E.0020.0010.0002][.0000.0037.0002] # -FF8D FF9E 30FE ; [.3E8E.0020.0011.0002][.0000.0037.0002][.3E8E.0020.0010.0002][.0000.0037.0002] # -3079 309E ; [.3E8E.0020.0011.0001][.0000.0037.0002][.3E8E.0020.0010.0002][.0000.0037.0002] # -3078 3099 309E ; [.3E8E.0020.0011.0001][.0000.0037.0002][.3E8E.0020.0010.0002][.0000.0037.0002] # -30DA 30FD ; [.3E8E.0020.0011.0002][.0000.0038.0002][.3E8E.0020.0010.0002] # -30D8 309A 30FD ; [.3E8E.0020.0011.0002][.0000.0038.0002][.3E8E.0020.0010.0002] # -FF8D FF9F 30FD ; [.3E8E.0020.0011.0002][.0000.0038.0002][.3E8E.0020.0010.0002] # -307A 309D ; [.3E8E.0020.0011.0001][.0000.0038.0002][.3E8E.0020.0010.0002] # -3078 309A 309D ; [.3E8E.0020.0011.0001][.0000.0038.0002][.3E8E.0020.0010.0002] # -30DA 30FE ; [.3E8E.0020.0011.0002][.0000.0038.0002][.3E8E.0020.0010.0002][.0000.0037.0002] # -30D8 309A 30FE ; [.3E8E.0020.0011.0002][.0000.0038.0002][.3E8E.0020.0010.0002][.0000.0037.0002] # -FF8D FF9F 30FE ; [.3E8E.0020.0011.0002][.0000.0038.0002][.3E8E.0020.0010.0002][.0000.0037.0002] # -307A 309E ; [.3E8E.0020.0011.0001][.0000.0038.0002][.3E8E.0020.0010.0002][.0000.0037.0002] # -3078 309A 309E ; [.3E8E.0020.0011.0001][.0000.0038.0002][.3E8E.0020.0010.0002][.0000.0037.0002] # -30DB 30FD ; [.3E8F.0020.0011.0002][.3E8F.0020.0010.0002] # -FF8E 30FD ; [.3E8F.0020.0011.0002][.3E8F.0020.0010.0002] # -307B 309D ; [.3E8F.0020.0011.0001][.3E8F.0020.0010.0002] # -30DB 30FE ; [.3E8F.0020.0011.0002][.3E8F.0020.0010.0002][.0000.0037.0002] # -FF8E 30FE ; [.3E8F.0020.0011.0002][.3E8F.0020.0010.0002][.0000.0037.0002] # -307B 309E ; [.3E8F.0020.0011.0001][.3E8F.0020.0010.0002][.0000.0037.0002] # -30DC 30FD ; [.3E8F.0020.0011.0002][.0000.0037.0002][.3E8F.0020.0010.0002] # -30DB 3099 30FD ; [.3E8F.0020.0011.0002][.0000.0037.0002][.3E8F.0020.0010.0002] # -FF8E FF9E 30FD ; [.3E8F.0020.0011.0002][.0000.0037.0002][.3E8F.0020.0010.0002] # -307C 309D ; [.3E8F.0020.0011.0001][.0000.0037.0002][.3E8F.0020.0010.0002] # -307B 3099 309D ; [.3E8F.0020.0011.0001][.0000.0037.0002][.3E8F.0020.0010.0002] # -30DC 30FE ; [.3E8F.0020.0011.0002][.0000.0037.0002][.3E8F.0020.0010.0002][.0000.0037.0002] # -30DB 3099 30FE ; [.3E8F.0020.0011.0002][.0000.0037.0002][.3E8F.0020.0010.0002][.0000.0037.0002] # -FF8E FF9E 30FE ; [.3E8F.0020.0011.0002][.0000.0037.0002][.3E8F.0020.0010.0002][.0000.0037.0002] # -307C 309E ; [.3E8F.0020.0011.0001][.0000.0037.0002][.3E8F.0020.0010.0002][.0000.0037.0002] # -307B 3099 309E ; [.3E8F.0020.0011.0001][.0000.0037.0002][.3E8F.0020.0010.0002][.0000.0037.0002] # -30DD 30FD ; [.3E8F.0020.0011.0002][.0000.0038.0002][.3E8F.0020.0010.0002] # -30DB 309A 30FD ; [.3E8F.0020.0011.0002][.0000.0038.0002][.3E8F.0020.0010.0002] # -FF8E FF9F 30FD ; [.3E8F.0020.0011.0002][.0000.0038.0002][.3E8F.0020.0010.0002] # -307D 309D ; [.3E8F.0020.0011.0001][.0000.0038.0002][.3E8F.0020.0010.0002] # -307B 309A 309D ; [.3E8F.0020.0011.0001][.0000.0038.0002][.3E8F.0020.0010.0002] # -30DD 30FE ; [.3E8F.0020.0011.0002][.0000.0038.0002][.3E8F.0020.0010.0002][.0000.0037.0002] # -30DB 309A 30FE ; [.3E8F.0020.0011.0002][.0000.0038.0002][.3E8F.0020.0010.0002][.0000.0037.0002] # -FF8E FF9F 30FE ; [.3E8F.0020.0011.0002][.0000.0038.0002][.3E8F.0020.0010.0002][.0000.0037.0002] # -307D 309E ; [.3E8F.0020.0011.0001][.0000.0038.0002][.3E8F.0020.0010.0002][.0000.0037.0002] # -307B 309A 309E ; [.3E8F.0020.0011.0001][.0000.0038.0002][.3E8F.0020.0010.0002][.0000.0037.0002] # -30DE 30FD ; [.3E90.0020.0011.0002][.3E90.0020.0010.0002] # -FF8F 30FD ; [.3E90.0020.0011.0002][.3E90.0020.0010.0002] # -307E 309D ; [.3E90.0020.0011.0001][.3E90.0020.0010.0002] # -30DF 30FD ; [.3E91.0020.0011.0002][.3E91.0020.0010.0002] # -FF90 30FD ; [.3E91.0020.0011.0002][.3E91.0020.0010.0002] # -307F 309D ; [.3E91.0020.0011.0001][.3E91.0020.0010.0002] # -30E0 30FD ; [.3E92.0020.0011.0002][.3E92.0020.0010.0002] # -FF91 30FD ; [.3E92.0020.0011.0002][.3E92.0020.0010.0002] # -3080 309D ; [.3E92.0020.0011.0001][.3E92.0020.0010.0002] # -30E1 30FD ; [.3E93.0020.0011.0002][.3E93.0020.0010.0002] # -FF92 30FD ; [.3E93.0020.0011.0002][.3E93.0020.0010.0002] # -3081 309D ; [.3E93.0020.0011.0001][.3E93.0020.0010.0002] # -30E2 30FD ; [.3E94.0020.0011.0002][.3E94.0020.0010.0002] # -FF93 30FD ; [.3E94.0020.0011.0002][.3E94.0020.0010.0002] # -3082 309D ; [.3E94.0020.0011.0001][.3E94.0020.0010.0002] # -30E3 30FD ; [.3E95.0020.000F.0002][.3E95.0020.0010.0002] # -FF6C 30FD ; [.3E95.0020.000F.0002][.3E95.0020.0010.0002] # -3083 309D ; [.3E95.0020.000F.0001][.3E95.0020.0010.0002] # -30E4 30FD ; [.3E95.0020.0011.0002][.3E95.0020.0010.0002] # -FF94 30FD ; [.3E95.0020.0011.0002][.3E95.0020.0010.0002] # -3084 309D ; [.3E95.0020.0011.0001][.3E95.0020.0010.0002] # -30E5 30FD ; [.3E96.0020.000F.0002][.3E96.0020.0010.0002] # -FF6D 30FD ; [.3E96.0020.000F.0002][.3E96.0020.0010.0002] # -3085 309D ; [.3E96.0020.000F.0001][.3E96.0020.0010.0002] # -30E6 30FD ; [.3E96.0020.0011.0002][.3E96.0020.0010.0002] # -FF95 30FD ; [.3E96.0020.0011.0002][.3E96.0020.0010.0002] # -3086 309D ; [.3E96.0020.0011.0001][.3E96.0020.0010.0002] # -30E7 30FD ; [.3E97.0020.000F.0002][.3E97.0020.0010.0002] # -FF6E 30FD ; [.3E97.0020.000F.0002][.3E97.0020.0010.0002] # -3087 309D ; [.3E97.0020.000F.0001][.3E97.0020.0010.0002] # -30E8 30FD ; [.3E97.0020.0011.0002][.3E97.0020.0010.0002] # -FF96 30FD ; [.3E97.0020.0011.0002][.3E97.0020.0010.0002] # -3088 309D ; [.3E97.0020.0011.0001][.3E97.0020.0010.0002] # -30E9 30FD ; [.3E98.0020.0011.0002][.3E98.0020.0010.0002] # -FF97 30FD ; [.3E98.0020.0011.0002][.3E98.0020.0010.0002] # -3089 309D ; [.3E98.0020.0011.0001][.3E98.0020.0010.0002] # -30EA 30FD ; [.3E99.0020.0011.0002][.3E99.0020.0010.0002] # -FF98 30FD ; [.3E99.0020.0011.0002][.3E99.0020.0010.0002] # -308A 309D ; [.3E99.0020.0011.0001][.3E99.0020.0010.0002] # -30EB 30FD ; [.3E9A.0020.0011.0002][.3E9A.0020.0010.0002] # -FF99 30FD ; [.3E9A.0020.0011.0002][.3E9A.0020.0010.0002] # -308B 309D ; [.3E9A.0020.0011.0001][.3E9A.0020.0010.0002] # -30EC 30FD ; [.3E9B.0020.0011.0002][.3E9B.0020.0010.0002] # -FF9A 30FD ; [.3E9B.0020.0011.0002][.3E9B.0020.0010.0002] # -308C 309D ; [.3E9B.0020.0011.0001][.3E9B.0020.0010.0002] # -30ED 30FD ; [.3E9C.0020.0011.0002][.3E9C.0020.0010.0002] # -FF9B 30FD ; [.3E9C.0020.0011.0002][.3E9C.0020.0010.0002] # -308D 309D ; [.3E9C.0020.0011.0001][.3E9C.0020.0010.0002] # -30EE 30FD ; [.3E9D.0020.000F.0002][.3E9D.0020.0010.0002] # -308E 309D ; [.3E9D.0020.000F.0001][.3E9D.0020.0010.0002] # -30EE 30FE ; [.3E9D.0020.000F.0002][.3E9D.0020.0010.0002][.0000.0037.0002] # -308E 309E ; [.3E9D.0020.000F.0001][.3E9D.0020.0010.0002][.0000.0037.0002] # -30EF 30FD ; [.3E9D.0020.0011.0002][.3E9D.0020.0010.0002] # -FF9C 30FD ; [.3E9D.0020.0011.0002][.3E9D.0020.0010.0002] # -308F 309D ; [.3E9D.0020.0011.0001][.3E9D.0020.0010.0002] # -30EF 30FE ; [.3E9D.0020.0011.0002][.3E9D.0020.0010.0002][.0000.0037.0002] # -FF9C 30FE ; [.3E9D.0020.0011.0002][.3E9D.0020.0010.0002][.0000.0037.0002] # -308F 309E ; [.3E9D.0020.0011.0001][.3E9D.0020.0010.0002][.0000.0037.0002] # -30F0 30FD ; [.3E9E.0020.0011.0002][.3E9E.0020.0010.0002] # -3090 309D ; [.3E9E.0020.0011.0001][.3E9E.0020.0010.0002] # -30F0 30FE ; [.3E9E.0020.0011.0002][.3E9E.0020.0010.0002][.0000.0037.0002] # -3090 309E ; [.3E9E.0020.0011.0001][.3E9E.0020.0010.0002][.0000.0037.0002] # -30F1 30FD ; [.3E9F.0020.0011.0002][.3E9F.0020.0010.0002] # -3091 309D ; [.3E9F.0020.0011.0001][.3E9F.0020.0010.0002] # -30F1 30FE ; [.3E9F.0020.0011.0002][.3E9F.0020.0010.0002][.0000.0037.0002] # -3091 309E ; [.3E9F.0020.0011.0001][.3E9F.0020.0010.0002][.0000.0037.0002] # -30F2 30FD ; [.3EA0.0020.0011.0002][.3EA0.0020.0010.0002] # -FF66 30FD ; [.3EA0.0020.0011.0002][.3EA0.0020.0010.0002] # -3092 309D ; [.3EA0.0020.0011.0001][.3EA0.0020.0010.0002] # -30F2 30FE ; [.3EA0.0020.0011.0002][.3EA0.0020.0010.0002][.0000.0037.0002] # -FF66 30FE ; [.3EA0.0020.0011.0002][.3EA0.0020.0010.0002][.0000.0037.0002] # -3092 309E ; [.3EA0.0020.0011.0001][.3EA0.0020.0010.0002][.0000.0037.0002] # -30F3 30FD ; [.3EA1.0020.0011.0002][.3EA1.0020.0010.0002] # -FF9D 30FD ; [.3EA1.0020.0011.0002][.3EA1.0020.0010.0002] # -3093 309D ; [.3EA1.0020.0011.0001][.3EA1.0020.0010.0002] # -30F4 30FD ; [.3E73.0020.0011.0002][.0000.0037.0002][.3E73.0020.0010.0002] # -30A6 3099 30FD ; [.3E73.0020.0011.0002][.0000.0037.0002][.3E73.0020.0010.0002] # -FF73 FF9E 30FD ; [.3E73.0020.0011.0002][.0000.0037.0002][.3E73.0020.0010.0002] # -3094 309D ; [.3E73.0020.0011.0001][.0000.0037.0002][.3E73.0020.0010.0002] # -3046 3099 309D ; [.3E73.0020.0011.0001][.0000.0037.0002][.3E73.0020.0010.0002] # -30F4 30FE ; [.3E73.0020.0011.0002][.0000.0037.0002][.3E73.0020.0010.0002][.0000.0037.0002] # -30A6 3099 30FE ; [.3E73.0020.0011.0002][.0000.0037.0002][.3E73.0020.0010.0002][.0000.0037.0002] # -FF73 FF9E 30FE ; [.3E73.0020.0011.0002][.0000.0037.0002][.3E73.0020.0010.0002][.0000.0037.0002] # -3094 309E ; [.3E73.0020.0011.0001][.0000.0037.0002][.3E73.0020.0010.0002][.0000.0037.0002] # -3046 3099 309E ; [.3E73.0020.0011.0001][.0000.0037.0002][.3E73.0020.0010.0002][.0000.0037.0002] # -30F5 30FD ; [.3E77.0020.000F.0002][.3E77.0020.0010.0002] # -3095 309D ; [.3E77.0020.000F.0001][.3E77.0020.0010.0002] # -30F5 30FE ; [.3E77.0020.000F.0002][.3E77.0020.0010.0002][.0000.0037.0002] # -3095 309E ; [.3E77.0020.000F.0001][.3E77.0020.0010.0002][.0000.0037.0002] # -30F6 30FD ; [.3E7A.0020.000F.0002][.3E7A.0020.0010.0002] # -3096 309D ; [.3E7A.0020.000F.0001][.3E7A.0020.0010.0002] # -30F6 30FE ; [.3E7A.0020.000F.0002][.3E7A.0020.0010.0002][.0000.0037.0002] # -3096 309E ; [.3E7A.0020.000F.0001][.3E7A.0020.0010.0002][.0000.0037.0002] # -30F7 30FD ; [.3E9D.0020.0011.0002][.0000.0037.0002][.3E9D.0020.0010.0002] # -30EF 3099 30FD ; [.3E9D.0020.0011.0002][.0000.0037.0002][.3E9D.0020.0010.0002] # -FF9C FF9E 30FD ; [.3E9D.0020.0011.0002][.0000.0037.0002][.3E9D.0020.0010.0002] # -30F7 30FE ; [.3E9D.0020.0011.0002][.0000.0037.0002][.3E9D.0020.0010.0002][.0000.0037.0002] # -30EF 3099 30FE ; [.3E9D.0020.0011.0002][.0000.0037.0002][.3E9D.0020.0010.0002][.0000.0037.0002] # -FF9C FF9E 30FE ; [.3E9D.0020.0011.0002][.0000.0037.0002][.3E9D.0020.0010.0002][.0000.0037.0002] # -30F8 30FD ; [.3E9E.0020.0011.0002][.0000.0037.0002][.3E9E.0020.0010.0002] # -30F0 3099 30FD ; [.3E9E.0020.0011.0002][.0000.0037.0002][.3E9E.0020.0010.0002] # -30F8 30FE ; [.3E9E.0020.0011.0002][.0000.0037.0002][.3E9E.0020.0010.0002][.0000.0037.0002] # -30F0 3099 30FE ; [.3E9E.0020.0011.0002][.0000.0037.0002][.3E9E.0020.0010.0002][.0000.0037.0002] # -30F9 30FD ; [.3E9F.0020.0011.0002][.0000.0037.0002][.3E9F.0020.0010.0002] # -30F1 3099 30FD ; [.3E9F.0020.0011.0002][.0000.0037.0002][.3E9F.0020.0010.0002] # -30F9 30FE ; [.3E9F.0020.0011.0002][.0000.0037.0002][.3E9F.0020.0010.0002][.0000.0037.0002] # -30F1 3099 30FE ; [.3E9F.0020.0011.0002][.0000.0037.0002][.3E9F.0020.0010.0002][.0000.0037.0002] # -30FA 30FD ; [.3EA0.0020.0011.0002][.0000.0037.0002][.3EA0.0020.0010.0002] # -30F2 3099 30FD ; [.3EA0.0020.0011.0002][.0000.0037.0002][.3EA0.0020.0010.0002] # -FF66 FF9E 30FD ; [.3EA0.0020.0011.0002][.0000.0037.0002][.3EA0.0020.0010.0002] # -30FA 30FE ; [.3EA0.0020.0011.0002][.0000.0037.0002][.3EA0.0020.0010.0002][.0000.0037.0002] # -30F2 3099 30FE ; [.3EA0.0020.0011.0002][.0000.0037.0002][.3EA0.0020.0010.0002][.0000.0037.0002] # -FF66 FF9E 30FE ; [.3EA0.0020.0011.0002][.0000.0037.0002][.3EA0.0020.0010.0002][.0000.0037.0002] # -31F0 30FD ; [.3E79.0020.000F][.3E79.0020.0010.0002] # -31F0 30FE ; [.3E79.0020.000F][.3E79.0020.0010.0002][.0000.0037.0002] # -31F1 30FD ; [.3E7D.0020.000F][.3E7D.0020.0010.0002] # -31F1 30FE ; [.3E7D.0020.000F][.3E7D.0020.0010.0002][.0000.0037.0002] # -31F2 30FD ; [.3E7E.0020.000F][.3E7E.0020.0010.0002] # -31F2 30FE ; [.3E7E.0020.000F][.3E7E.0020.0010.0002][.0000.0037.0002] # -31F3 30FD ; [.3E85.0020.000F][.3E85.0020.0010.0002] # -31F3 30FE ; [.3E85.0020.000F][.3E85.0020.0010.0002][.0000.0037.0002] # -31F4 30FD ; [.3E88.0020.000F][.3E88.0020.0010.0002] # -31F5 30FD ; [.3E8B.0020.000F][.3E8B.0020.0010.0002] # -31F5 30FE ; [.3E8B.0020.000F][.3E8B.0020.0010.0002][.0000.0037.0002] # -31F6 30FD ; [.3E8C.0020.000F][.3E8C.0020.0010.0002] # -31F6 30FE ; [.3E8C.0020.000F][.3E8C.0020.0010.0002][.0000.0037.0002] # -31F7 30FD ; [.3E8D.0020.000F][.3E8D.0020.0010.0002] # -31F7 30FE ; [.3E8D.0020.000F][.3E8D.0020.0010.0002][.0000.0037.0002] # -31F8 30FD ; [.3E8E.0020.000F][.3E8E.0020.0010.0002] # -31F8 30FE ; [.3E8E.0020.000F][.3E8E.0020.0010.0002][.0000.0037.0002] # -31F9 30FD ; [.3E8F.0020.000F][.3E8F.0020.0010.0002] # -31F9 30FE ; [.3E8F.0020.000F][.3E8F.0020.0010.0002][.0000.0037.0002] # -31FA 30FD ; [.3E92.0020.000F][.3E92.0020.0010.0002] # -31FB 30FD ; [.3E98.0020.000F][.3E98.0020.0010.0002] # -31FC 30FD ; [.3E99.0020.000F][.3E99.0020.0010.0002] # -31FD 30FD ; [.3E9A.0020.000F][.3E9A.0020.0010.0002] # -31FE 30FD ; [.3E9B.0020.000F][.3E9B.0020.0010.0002] # -31FF 30FD ; [.3E9C.0020.000F][.3E9C.0020.0010.0002] # +FFE4 ; [*066F.0020.0002] # FULLWIDTH BROKEN BAR +FFE5 ; [.1F66.0020.0002] # FULLWIDTH YEN SIGN +FFE6 ; [.1F80.0020.0002] # FULLWIDTH WON SIGN +FFE8 ; [*086B.0020.0002] # HALFWIDTH FORMS LIGHT VERTICAL +FFE9 ; [*05EC.0020.0002] # HALFWIDTH LEFTWARDS ARROW +FFEA ; [*05EE.0020.0002] # HALFWIDTH UPWARDS ARROW +FFEB ; [*05ED.0020.0002] # HALFWIDTH RIGHTWARDS ARROW +FFEC ; [*05EF.0020.0002] # HALFWIDTH DOWNWARDS ARROW +FFED ; [*0909.0020.0002] # HALFWIDTH BLACK SQUARE +FFEE ; [*0934.0020.0002] # HALFWIDTH WHITE CIRCLE +30A1 30FC ; [.42DA.0020.000F.0002][.42DA.0020.0007.0002] # +FF67 30FC ; [.42DA.0020.000F.0002][.42DA.0020.0007.0002] # +FF67 FF70 ; [.42DA.0020.000F.0002][.42DA.0020.0007.0002] # +3041 30FC ; [.42DA.0020.000F.0001][.42DA.0020.0007.0002] # +30A2 30FC ; [.42DA.0020.0011.0002][.42DA.0020.0007.0002] # +FF71 30FC ; [.42DA.0020.0011.0002][.42DA.0020.0007.0002] # +FF71 FF70 ; [.42DA.0020.0011.0002][.42DA.0020.0007.0002] # +3042 30FC ; [.42DA.0020.0011.0001][.42DA.0020.0007.0002] # +30AB 30FC ; [.42E0.0020.0011.0002][.42DA.0020.0007.0002] # +FF76 30FC ; [.42E0.0020.0011.0002][.42DA.0020.0007.0002] # +FF76 FF70 ; [.42E0.0020.0011.0002][.42DA.0020.0007.0002] # +304B 30FC ; [.42E0.0020.0011.0001][.42DA.0020.0007.0002] # +30AC 30FC ; [.42E0.0020.0011.0002][.0000.0037.0002][.42DA.0020.0007.0002] # +30AB 3099 30FC ; [.42E0.0020.0011.0002][.0000.0037.0002][.42DA.0020.0007.0002] # +FF76 FF9E 30FC ; [.42E0.0020.0011.0002][.0000.0037.0002][.42DA.0020.0007.0002] # +FF76 FF9E FF70 ; [.42E0.0020.0011.0002][.0000.0037.0002][.42DA.0020.0007.0002] # +304C 30FC ; [.42E0.0020.0011.0001][.0000.0037.0002][.42DA.0020.0007.0002] # +304B 3099 30FC ; [.42E0.0020.0011.0001][.0000.0037.0002][.42DA.0020.0007.0002] # +30B5 30FC ; [.42E5.0020.0011.0002][.42DA.0020.0007.0002] # +FF7B 30FC ; [.42E5.0020.0011.0002][.42DA.0020.0007.0002] # +FF7B FF70 ; [.42E5.0020.0011.0002][.42DA.0020.0007.0002] # +3055 30FC ; [.42E5.0020.0011.0001][.42DA.0020.0007.0002] # +30B6 30FC ; [.42E5.0020.0011.0002][.0000.0037.0002][.42DA.0020.0007.0002] # +30B5 3099 30FC ; [.42E5.0020.0011.0002][.0000.0037.0002][.42DA.0020.0007.0002] # +FF7B FF9E 30FC ; [.42E5.0020.0011.0002][.0000.0037.0002][.42DA.0020.0007.0002] # +FF7B FF9E FF70 ; [.42E5.0020.0011.0002][.0000.0037.0002][.42DA.0020.0007.0002] # +3056 30FC ; [.42E5.0020.0011.0001][.0000.0037.0002][.42DA.0020.0007.0002] # +3055 3099 30FC ; [.42E5.0020.0011.0001][.0000.0037.0002][.42DA.0020.0007.0002] # +30BF 30FC ; [.42EA.0020.0011.0002][.42DA.0020.0007.0002] # +FF80 30FC ; [.42EA.0020.0011.0002][.42DA.0020.0007.0002] # +FF80 FF70 ; [.42EA.0020.0011.0002][.42DA.0020.0007.0002] # +305F 30FC ; [.42EA.0020.0011.0001][.42DA.0020.0007.0002] # +30C0 30FC ; [.42EA.0020.0011.0002][.0000.0037.0002][.42DA.0020.0007.0002] # +30BF 3099 30FC ; [.42EA.0020.0011.0002][.0000.0037.0002][.42DA.0020.0007.0002] # +FF80 FF9E 30FC ; [.42EA.0020.0011.0002][.0000.0037.0002][.42DA.0020.0007.0002] # +FF80 FF9E FF70 ; [.42EA.0020.0011.0002][.0000.0037.0002][.42DA.0020.0007.0002] # +3060 30FC ; [.42EA.0020.0011.0001][.0000.0037.0002][.42DA.0020.0007.0002] # +305F 3099 30FC ; [.42EA.0020.0011.0001][.0000.0037.0002][.42DA.0020.0007.0002] # +30CA 30FC ; [.42EF.0020.0011.0002][.42DA.0020.0007.0002] # +FF85 30FC ; [.42EF.0020.0011.0002][.42DA.0020.0007.0002] # +FF85 FF70 ; [.42EF.0020.0011.0002][.42DA.0020.0007.0002] # +306A 30FC ; [.42EF.0020.0011.0001][.42DA.0020.0007.0002] # +30CF 30FC ; [.42F4.0020.0011.0002][.42DA.0020.0007.0002] # +FF8A 30FC ; [.42F4.0020.0011.0002][.42DA.0020.0007.0002] # +FF8A FF70 ; [.42F4.0020.0011.0002][.42DA.0020.0007.0002] # +306F 30FC ; [.42F4.0020.0011.0001][.42DA.0020.0007.0002] # +30D0 30FC ; [.42F4.0020.0011.0002][.0000.0037.0002][.42DA.0020.0007.0002] # +30CF 3099 30FC ; [.42F4.0020.0011.0002][.0000.0037.0002][.42DA.0020.0007.0002] # +FF8A FF9E 30FC ; [.42F4.0020.0011.0002][.0000.0037.0002][.42DA.0020.0007.0002] # +FF8A FF9E FF70 ; [.42F4.0020.0011.0002][.0000.0037.0002][.42DA.0020.0007.0002] # +3070 30FC ; [.42F4.0020.0011.0001][.0000.0037.0002][.42DA.0020.0007.0002] # +306F 3099 30FC ; [.42F4.0020.0011.0001][.0000.0037.0002][.42DA.0020.0007.0002] # +30D1 30FC ; [.42F4.0020.0011.0002][.0000.0038.0002][.42DA.0020.0007.0002] # +30CF 309A 30FC ; [.42F4.0020.0011.0002][.0000.0038.0002][.42DA.0020.0007.0002] # +FF8A FF9F 30FC ; [.42F4.0020.0011.0002][.0000.0038.0002][.42DA.0020.0007.0002] # +FF8A FF9F FF70 ; [.42F4.0020.0011.0002][.0000.0038.0002][.42DA.0020.0007.0002] # +3071 30FC ; [.42F4.0020.0011.0001][.0000.0038.0002][.42DA.0020.0007.0002] # +306F 309A 30FC ; [.42F4.0020.0011.0001][.0000.0038.0002][.42DA.0020.0007.0002] # +30DE 30FC ; [.42F9.0020.0011.0002][.42DA.0020.0007.0002] # +FF8F 30FC ; [.42F9.0020.0011.0002][.42DA.0020.0007.0002] # +FF8F FF70 ; [.42F9.0020.0011.0002][.42DA.0020.0007.0002] # +307E 30FC ; [.42F9.0020.0011.0001][.42DA.0020.0007.0002] # +30E3 30FC ; [.42FE.0020.000F.0002][.42DA.0020.0007.0002] # +FF6C 30FC ; [.42FE.0020.000F.0002][.42DA.0020.0007.0002] # +FF6C FF70 ; [.42FE.0020.000F.0002][.42DA.0020.0007.0002] # +3083 30FC ; [.42FE.0020.000F.0001][.42DA.0020.0007.0002] # +30E4 30FC ; [.42FE.0020.0011.0002][.42DA.0020.0007.0002] # +FF94 30FC ; [.42FE.0020.0011.0002][.42DA.0020.0007.0002] # +FF94 FF70 ; [.42FE.0020.0011.0002][.42DA.0020.0007.0002] # +3084 30FC ; [.42FE.0020.0011.0001][.42DA.0020.0007.0002] # +30E9 30FC ; [.4301.0020.0011.0002][.42DA.0020.0007.0002] # +FF97 30FC ; [.4301.0020.0011.0002][.42DA.0020.0007.0002] # +FF97 FF70 ; [.4301.0020.0011.0002][.42DA.0020.0007.0002] # +3089 30FC ; [.4301.0020.0011.0001][.42DA.0020.0007.0002] # +30EE 30FC ; [.4306.0020.000F.0002][.42DA.0020.0007.0002] # +308E 30FC ; [.4306.0020.000F.0001][.42DA.0020.0007.0002] # +30EF 30FC ; [.4306.0020.0011.0002][.42DA.0020.0007.0002] # +FF9C 30FC ; [.4306.0020.0011.0002][.42DA.0020.0007.0002] # +FF9C FF70 ; [.4306.0020.0011.0002][.42DA.0020.0007.0002] # +308F 30FC ; [.4306.0020.0011.0001][.42DA.0020.0007.0002] # +30F7 30FC ; [.4306.0020.0011.0002][.0000.0037.0002][.42DA.0020.0007.0002] # +30EF 3099 30FC ; [.4306.0020.0011.0002][.0000.0037.0002][.42DA.0020.0007.0002] # +FF9C FF9E 30FC ; [.4306.0020.0011.0002][.0000.0037.0002][.42DA.0020.0007.0002] # +FF9C FF9E FF70 ; [.4306.0020.0011.0002][.0000.0037.0002][.42DA.0020.0007.0002] # +30F5 30FC ; [.42E0.0020.000F.0002][.42DA.0020.0007.0002] # +3095 30FC ; [.42E0.0020.000F.0001][.42DA.0020.0007.0002] # +31F5 30FC ; [.42F4.0020.000F][.42DA.0020.0007.0002] # +31FB 30FC ; [.4301.0020.000F][.42DA.0020.0007.0002] # +30A3 30FC ; [.42DB.0020.000F.0002][.42DB.0020.0007.0002] # +FF68 30FC ; [.42DB.0020.000F.0002][.42DB.0020.0007.0002] # +FF68 FF70 ; [.42DB.0020.000F.0002][.42DB.0020.0007.0002] # +3043 30FC ; [.42DB.0020.000F.0001][.42DB.0020.0007.0002] # +30A4 30FC ; [.42DB.0020.0011.0002][.42DB.0020.0007.0002] # +FF72 30FC ; [.42DB.0020.0011.0002][.42DB.0020.0007.0002] # +FF72 FF70 ; [.42DB.0020.0011.0002][.42DB.0020.0007.0002] # +3044 30FC ; [.42DB.0020.0011.0001][.42DB.0020.0007.0002] # +30AD 30FC ; [.42E1.0020.0011.0002][.42DB.0020.0007.0002] # +FF77 30FC ; [.42E1.0020.0011.0002][.42DB.0020.0007.0002] # +FF77 FF70 ; [.42E1.0020.0011.0002][.42DB.0020.0007.0002] # +304D 30FC ; [.42E1.0020.0011.0001][.42DB.0020.0007.0002] # +30AE 30FC ; [.42E1.0020.0011.0002][.0000.0037.0002][.42DB.0020.0007.0002] # +30AD 3099 30FC ; [.42E1.0020.0011.0002][.0000.0037.0002][.42DB.0020.0007.0002] # +FF77 FF9E 30FC ; [.42E1.0020.0011.0002][.0000.0037.0002][.42DB.0020.0007.0002] # +FF77 FF9E FF70 ; [.42E1.0020.0011.0002][.0000.0037.0002][.42DB.0020.0007.0002] # +304E 30FC ; [.42E1.0020.0011.0001][.0000.0037.0002][.42DB.0020.0007.0002] # +304D 3099 30FC ; [.42E1.0020.0011.0001][.0000.0037.0002][.42DB.0020.0007.0002] # +30B7 30FC ; [.42E6.0020.0011.0002][.42DB.0020.0007.0002] # +FF7C 30FC ; [.42E6.0020.0011.0002][.42DB.0020.0007.0002] # +FF7C FF70 ; [.42E6.0020.0011.0002][.42DB.0020.0007.0002] # +3057 30FC ; [.42E6.0020.0011.0001][.42DB.0020.0007.0002] # +30B8 30FC ; [.42E6.0020.0011.0002][.0000.0037.0002][.42DB.0020.0007.0002] # +30B7 3099 30FC ; [.42E6.0020.0011.0002][.0000.0037.0002][.42DB.0020.0007.0002] # +FF7C FF9E 30FC ; [.42E6.0020.0011.0002][.0000.0037.0002][.42DB.0020.0007.0002] # +FF7C FF9E FF70 ; [.42E6.0020.0011.0002][.0000.0037.0002][.42DB.0020.0007.0002] # +3058 30FC ; [.42E6.0020.0011.0001][.0000.0037.0002][.42DB.0020.0007.0002] # +3057 3099 30FC ; [.42E6.0020.0011.0001][.0000.0037.0002][.42DB.0020.0007.0002] # +30C1 30FC ; [.42EB.0020.0011.0002][.42DB.0020.0007.0002] # +FF81 30FC ; [.42EB.0020.0011.0002][.42DB.0020.0007.0002] # +FF81 FF70 ; [.42EB.0020.0011.0002][.42DB.0020.0007.0002] # +3061 30FC ; [.42EB.0020.0011.0001][.42DB.0020.0007.0002] # +30C2 30FC ; [.42EB.0020.0011.0002][.0000.0037.0002][.42DB.0020.0007.0002] # +30C1 3099 30FC ; [.42EB.0020.0011.0002][.0000.0037.0002][.42DB.0020.0007.0002] # +FF81 FF9E 30FC ; [.42EB.0020.0011.0002][.0000.0037.0002][.42DB.0020.0007.0002] # +FF81 FF9E FF70 ; [.42EB.0020.0011.0002][.0000.0037.0002][.42DB.0020.0007.0002] # +3062 30FC ; [.42EB.0020.0011.0001][.0000.0037.0002][.42DB.0020.0007.0002] # +3061 3099 30FC ; [.42EB.0020.0011.0001][.0000.0037.0002][.42DB.0020.0007.0002] # +30CB 30FC ; [.42F0.0020.0011.0002][.42DB.0020.0007.0002] # +FF86 30FC ; [.42F0.0020.0011.0002][.42DB.0020.0007.0002] # +FF86 FF70 ; [.42F0.0020.0011.0002][.42DB.0020.0007.0002] # +306B 30FC ; [.42F0.0020.0011.0001][.42DB.0020.0007.0002] # +30D2 30FC ; [.42F5.0020.0011.0002][.42DB.0020.0007.0002] # +FF8B 30FC ; [.42F5.0020.0011.0002][.42DB.0020.0007.0002] # +FF8B FF70 ; [.42F5.0020.0011.0002][.42DB.0020.0007.0002] # +3072 30FC ; [.42F5.0020.0011.0001][.42DB.0020.0007.0002] # +30D3 30FC ; [.42F5.0020.0011.0002][.0000.0037.0002][.42DB.0020.0007.0002] # +30D2 3099 30FC ; [.42F5.0020.0011.0002][.0000.0037.0002][.42DB.0020.0007.0002] # +FF8B FF9E 30FC ; [.42F5.0020.0011.0002][.0000.0037.0002][.42DB.0020.0007.0002] # +FF8B FF9E FF70 ; [.42F5.0020.0011.0002][.0000.0037.0002][.42DB.0020.0007.0002] # +3073 30FC ; [.42F5.0020.0011.0001][.0000.0037.0002][.42DB.0020.0007.0002] # +3072 3099 30FC ; [.42F5.0020.0011.0001][.0000.0037.0002][.42DB.0020.0007.0002] # +30D4 30FC ; [.42F5.0020.0011.0002][.0000.0038.0002][.42DB.0020.0007.0002] # +30D2 309A 30FC ; [.42F5.0020.0011.0002][.0000.0038.0002][.42DB.0020.0007.0002] # +FF8B FF9F 30FC ; [.42F5.0020.0011.0002][.0000.0038.0002][.42DB.0020.0007.0002] # +FF8B FF9F FF70 ; [.42F5.0020.0011.0002][.0000.0038.0002][.42DB.0020.0007.0002] # +3074 30FC ; [.42F5.0020.0011.0001][.0000.0038.0002][.42DB.0020.0007.0002] # +3072 309A 30FC ; [.42F5.0020.0011.0001][.0000.0038.0002][.42DB.0020.0007.0002] # +30DF 30FC ; [.42FA.0020.0011.0002][.42DB.0020.0007.0002] # +FF90 30FC ; [.42FA.0020.0011.0002][.42DB.0020.0007.0002] # +FF90 FF70 ; [.42FA.0020.0011.0002][.42DB.0020.0007.0002] # +307F 30FC ; [.42FA.0020.0011.0001][.42DB.0020.0007.0002] # +30EA 30FC ; [.4302.0020.0011.0002][.42DB.0020.0007.0002] # +FF98 30FC ; [.4302.0020.0011.0002][.42DB.0020.0007.0002] # +FF98 FF70 ; [.4302.0020.0011.0002][.42DB.0020.0007.0002] # +308A 30FC ; [.4302.0020.0011.0001][.42DB.0020.0007.0002] # +30F0 30FC ; [.4307.0020.0011.0002][.42DB.0020.0007.0002] # +3090 30FC ; [.4307.0020.0011.0001][.42DB.0020.0007.0002] # +30F8 30FC ; [.4307.0020.0011.0002][.0000.0037.0002][.42DB.0020.0007.0002] # +30F0 3099 30FC ; [.4307.0020.0011.0002][.0000.0037.0002][.42DB.0020.0007.0002] # +31F1 30FC ; [.42E6.0020.000F][.42DB.0020.0007.0002] # +31F6 30FC ; [.42F5.0020.000F][.42DB.0020.0007.0002] # +31FC 30FC ; [.4302.0020.000F][.42DB.0020.0007.0002] # +30A5 30FC ; [.42DC.0020.000F.0002][.42DC.0020.0007.0002] # +FF69 30FC ; [.42DC.0020.000F.0002][.42DC.0020.0007.0002] # +FF69 FF70 ; [.42DC.0020.000F.0002][.42DC.0020.0007.0002] # +3045 30FC ; [.42DC.0020.000F.0001][.42DC.0020.0007.0002] # +30A6 30FC ; [.42DC.0020.0011.0002][.42DC.0020.0007.0002] # +FF73 30FC ; [.42DC.0020.0011.0002][.42DC.0020.0007.0002] # +FF73 FF70 ; [.42DC.0020.0011.0002][.42DC.0020.0007.0002] # +3046 30FC ; [.42DC.0020.0011.0001][.42DC.0020.0007.0002] # +30AF 30FC ; [.42E2.0020.0011.0002][.42DC.0020.0007.0002] # +FF78 30FC ; [.42E2.0020.0011.0002][.42DC.0020.0007.0002] # +FF78 FF70 ; [.42E2.0020.0011.0002][.42DC.0020.0007.0002] # +304F 30FC ; [.42E2.0020.0011.0001][.42DC.0020.0007.0002] # +30B0 30FC ; [.42E2.0020.0011.0002][.0000.0037.0002][.42DC.0020.0007.0002] # +30AF 3099 30FC ; [.42E2.0020.0011.0002][.0000.0037.0002][.42DC.0020.0007.0002] # +FF78 FF9E 30FC ; [.42E2.0020.0011.0002][.0000.0037.0002][.42DC.0020.0007.0002] # +FF78 FF9E FF70 ; [.42E2.0020.0011.0002][.0000.0037.0002][.42DC.0020.0007.0002] # +3050 30FC ; [.42E2.0020.0011.0001][.0000.0037.0002][.42DC.0020.0007.0002] # +304F 3099 30FC ; [.42E2.0020.0011.0001][.0000.0037.0002][.42DC.0020.0007.0002] # +30B9 30FC ; [.42E7.0020.0011.0002][.42DC.0020.0007.0002] # +FF7D 30FC ; [.42E7.0020.0011.0002][.42DC.0020.0007.0002] # +FF7D FF70 ; [.42E7.0020.0011.0002][.42DC.0020.0007.0002] # +3059 30FC ; [.42E7.0020.0011.0001][.42DC.0020.0007.0002] # +30BA 30FC ; [.42E7.0020.0011.0002][.0000.0037.0002][.42DC.0020.0007.0002] # +30B9 3099 30FC ; [.42E7.0020.0011.0002][.0000.0037.0002][.42DC.0020.0007.0002] # +FF7D FF9E 30FC ; [.42E7.0020.0011.0002][.0000.0037.0002][.42DC.0020.0007.0002] # +FF7D FF9E FF70 ; [.42E7.0020.0011.0002][.0000.0037.0002][.42DC.0020.0007.0002] # +305A 30FC ; [.42E7.0020.0011.0001][.0000.0037.0002][.42DC.0020.0007.0002] # +3059 3099 30FC ; [.42E7.0020.0011.0001][.0000.0037.0002][.42DC.0020.0007.0002] # +30C3 30FC ; [.42EC.0020.000F.0002][.42DC.0020.0007.0002] # +FF6F 30FC ; [.42EC.0020.000F.0002][.42DC.0020.0007.0002] # +FF6F FF70 ; [.42EC.0020.000F.0002][.42DC.0020.0007.0002] # +3063 30FC ; [.42EC.0020.000F.0001][.42DC.0020.0007.0002] # +30C4 30FC ; [.42EC.0020.0011.0002][.42DC.0020.0007.0002] # +FF82 30FC ; [.42EC.0020.0011.0002][.42DC.0020.0007.0002] # +FF82 FF70 ; [.42EC.0020.0011.0002][.42DC.0020.0007.0002] # +3064 30FC ; [.42EC.0020.0011.0001][.42DC.0020.0007.0002] # +30C5 30FC ; [.42EC.0020.0011.0002][.0000.0037.0002][.42DC.0020.0007.0002] # +30C4 3099 30FC ; [.42EC.0020.0011.0002][.0000.0037.0002][.42DC.0020.0007.0002] # +FF82 FF9E 30FC ; [.42EC.0020.0011.0002][.0000.0037.0002][.42DC.0020.0007.0002] # +FF82 FF9E FF70 ; [.42EC.0020.0011.0002][.0000.0037.0002][.42DC.0020.0007.0002] # +3065 30FC ; [.42EC.0020.0011.0001][.0000.0037.0002][.42DC.0020.0007.0002] # +3064 3099 30FC ; [.42EC.0020.0011.0001][.0000.0037.0002][.42DC.0020.0007.0002] # +30CC 30FC ; [.42F1.0020.0011.0002][.42DC.0020.0007.0002] # +FF87 30FC ; [.42F1.0020.0011.0002][.42DC.0020.0007.0002] # +FF87 FF70 ; [.42F1.0020.0011.0002][.42DC.0020.0007.0002] # +306C 30FC ; [.42F1.0020.0011.0001][.42DC.0020.0007.0002] # +30D5 30FC ; [.42F6.0020.0011.0002][.42DC.0020.0007.0002] # +FF8C 30FC ; [.42F6.0020.0011.0002][.42DC.0020.0007.0002] # +FF8C FF70 ; [.42F6.0020.0011.0002][.42DC.0020.0007.0002] # +3075 30FC ; [.42F6.0020.0011.0001][.42DC.0020.0007.0002] # +30D6 30FC ; [.42F6.0020.0011.0002][.0000.0037.0002][.42DC.0020.0007.0002] # +30D5 3099 30FC ; [.42F6.0020.0011.0002][.0000.0037.0002][.42DC.0020.0007.0002] # +FF8C FF9E 30FC ; [.42F6.0020.0011.0002][.0000.0037.0002][.42DC.0020.0007.0002] # +FF8C FF9E FF70 ; [.42F6.0020.0011.0002][.0000.0037.0002][.42DC.0020.0007.0002] # +3076 30FC ; [.42F6.0020.0011.0001][.0000.0037.0002][.42DC.0020.0007.0002] # +3075 3099 30FC ; [.42F6.0020.0011.0001][.0000.0037.0002][.42DC.0020.0007.0002] # +30D7 30FC ; [.42F6.0020.0011.0002][.0000.0038.0002][.42DC.0020.0007.0002] # +30D5 309A 30FC ; [.42F6.0020.0011.0002][.0000.0038.0002][.42DC.0020.0007.0002] # +FF8C FF9F 30FC ; [.42F6.0020.0011.0002][.0000.0038.0002][.42DC.0020.0007.0002] # +FF8C FF9F FF70 ; [.42F6.0020.0011.0002][.0000.0038.0002][.42DC.0020.0007.0002] # +3077 30FC ; [.42F6.0020.0011.0001][.0000.0038.0002][.42DC.0020.0007.0002] # +3075 309A 30FC ; [.42F6.0020.0011.0001][.0000.0038.0002][.42DC.0020.0007.0002] # +30E0 30FC ; [.42FB.0020.0011.0002][.42DC.0020.0007.0002] # +FF91 30FC ; [.42FB.0020.0011.0002][.42DC.0020.0007.0002] # +FF91 FF70 ; [.42FB.0020.0011.0002][.42DC.0020.0007.0002] # +3080 30FC ; [.42FB.0020.0011.0001][.42DC.0020.0007.0002] # +30E5 30FC ; [.42FF.0020.000F.0002][.42DC.0020.0007.0002] # +FF6D 30FC ; [.42FF.0020.000F.0002][.42DC.0020.0007.0002] # +FF6D FF70 ; [.42FF.0020.000F.0002][.42DC.0020.0007.0002] # +3085 30FC ; [.42FF.0020.000F.0001][.42DC.0020.0007.0002] # +30E6 30FC ; [.42FF.0020.0011.0002][.42DC.0020.0007.0002] # +FF95 30FC ; [.42FF.0020.0011.0002][.42DC.0020.0007.0002] # +FF95 FF70 ; [.42FF.0020.0011.0002][.42DC.0020.0007.0002] # +3086 30FC ; [.42FF.0020.0011.0001][.42DC.0020.0007.0002] # +30EB 30FC ; [.4303.0020.0011.0002][.42DC.0020.0007.0002] # +FF99 30FC ; [.4303.0020.0011.0002][.42DC.0020.0007.0002] # +FF99 FF70 ; [.4303.0020.0011.0002][.42DC.0020.0007.0002] # +308B 30FC ; [.4303.0020.0011.0001][.42DC.0020.0007.0002] # +30F4 30FC ; [.42DC.0020.0011.0002][.0000.0037.0002][.42DC.0020.0007.0002] # +30A6 3099 30FC ; [.42DC.0020.0011.0002][.0000.0037.0002][.42DC.0020.0007.0002] # +FF73 FF9E 30FC ; [.42DC.0020.0011.0002][.0000.0037.0002][.42DC.0020.0007.0002] # +FF73 FF9E FF70 ; [.42DC.0020.0011.0002][.0000.0037.0002][.42DC.0020.0007.0002] # +3094 30FC ; [.42DC.0020.0011.0001][.0000.0037.0002][.42DC.0020.0007.0002] # +3046 3099 30FC ; [.42DC.0020.0011.0001][.0000.0037.0002][.42DC.0020.0007.0002] # +31F0 30FC ; [.42E2.0020.000F][.42DC.0020.0007.0002] # +31F2 30FC ; [.42E7.0020.000F][.42DC.0020.0007.0002] # +31F4 30FC ; [.42F1.0020.000F][.42DC.0020.0007.0002] # +31F7 30FC ; [.42F6.0020.000F][.42DC.0020.0007.0002] # +31FA 30FC ; [.42FB.0020.000F][.42DC.0020.0007.0002] # +31FD 30FC ; [.4303.0020.000F][.42DC.0020.0007.0002] # +30A7 30FC ; [.42DE.0020.000F.0002][.42DE.0020.0007.0002] # +FF6A 30FC ; [.42DE.0020.000F.0002][.42DE.0020.0007.0002] # +FF6A FF70 ; [.42DE.0020.000F.0002][.42DE.0020.0007.0002] # +3047 30FC ; [.42DE.0020.000F.0001][.42DE.0020.0007.0002] # +30A8 30FC ; [.42DE.0020.0011.0002][.42DE.0020.0007.0002] # +FF74 30FC ; [.42DE.0020.0011.0002][.42DE.0020.0007.0002] # +FF74 FF70 ; [.42DE.0020.0011.0002][.42DE.0020.0007.0002] # +3048 30FC ; [.42DE.0020.0011.0001][.42DE.0020.0007.0002] # +30B1 30FC ; [.42E3.0020.0011.0002][.42DE.0020.0007.0002] # +FF79 30FC ; [.42E3.0020.0011.0002][.42DE.0020.0007.0002] # +FF79 FF70 ; [.42E3.0020.0011.0002][.42DE.0020.0007.0002] # +3051 30FC ; [.42E3.0020.0011.0001][.42DE.0020.0007.0002] # +30B2 30FC ; [.42E3.0020.0011.0002][.0000.0037.0002][.42DE.0020.0007.0002] # +30B1 3099 30FC ; [.42E3.0020.0011.0002][.0000.0037.0002][.42DE.0020.0007.0002] # +FF79 FF9E 30FC ; [.42E3.0020.0011.0002][.0000.0037.0002][.42DE.0020.0007.0002] # +FF79 FF9E FF70 ; [.42E3.0020.0011.0002][.0000.0037.0002][.42DE.0020.0007.0002] # +3052 30FC ; [.42E3.0020.0011.0001][.0000.0037.0002][.42DE.0020.0007.0002] # +3051 3099 30FC ; [.42E3.0020.0011.0001][.0000.0037.0002][.42DE.0020.0007.0002] # +30BB 30FC ; [.42E8.0020.0011.0002][.42DE.0020.0007.0002] # +FF7E 30FC ; [.42E8.0020.0011.0002][.42DE.0020.0007.0002] # +FF7E FF70 ; [.42E8.0020.0011.0002][.42DE.0020.0007.0002] # +305B 30FC ; [.42E8.0020.0011.0001][.42DE.0020.0007.0002] # +30BC 30FC ; [.42E8.0020.0011.0002][.0000.0037.0002][.42DE.0020.0007.0002] # +30BB 3099 30FC ; [.42E8.0020.0011.0002][.0000.0037.0002][.42DE.0020.0007.0002] # +FF7E FF9E 30FC ; [.42E8.0020.0011.0002][.0000.0037.0002][.42DE.0020.0007.0002] # +FF7E FF9E FF70 ; [.42E8.0020.0011.0002][.0000.0037.0002][.42DE.0020.0007.0002] # +305C 30FC ; [.42E8.0020.0011.0001][.0000.0037.0002][.42DE.0020.0007.0002] # +305B 3099 30FC ; [.42E8.0020.0011.0001][.0000.0037.0002][.42DE.0020.0007.0002] # +30C6 30FC ; [.42ED.0020.0011.0002][.42DE.0020.0007.0002] # +FF83 30FC ; [.42ED.0020.0011.0002][.42DE.0020.0007.0002] # +FF83 FF70 ; [.42ED.0020.0011.0002][.42DE.0020.0007.0002] # +3066 30FC ; [.42ED.0020.0011.0001][.42DE.0020.0007.0002] # +30C7 30FC ; [.42ED.0020.0011.0002][.0000.0037.0002][.42DE.0020.0007.0002] # +30C6 3099 30FC ; [.42ED.0020.0011.0002][.0000.0037.0002][.42DE.0020.0007.0002] # +FF83 FF9E 30FC ; [.42ED.0020.0011.0002][.0000.0037.0002][.42DE.0020.0007.0002] # +FF83 FF9E FF70 ; [.42ED.0020.0011.0002][.0000.0037.0002][.42DE.0020.0007.0002] # +3067 30FC ; [.42ED.0020.0011.0001][.0000.0037.0002][.42DE.0020.0007.0002] # +3066 3099 30FC ; [.42ED.0020.0011.0001][.0000.0037.0002][.42DE.0020.0007.0002] # +30CD 30FC ; [.42F2.0020.0011.0002][.42DE.0020.0007.0002] # +FF88 30FC ; [.42F2.0020.0011.0002][.42DE.0020.0007.0002] # +FF88 FF70 ; [.42F2.0020.0011.0002][.42DE.0020.0007.0002] # +306D 30FC ; [.42F2.0020.0011.0001][.42DE.0020.0007.0002] # +30D8 30FC ; [.42F7.0020.0011.0002][.42DE.0020.0007.0002] # +FF8D 30FC ; [.42F7.0020.0011.0002][.42DE.0020.0007.0002] # +FF8D FF70 ; [.42F7.0020.0011.0002][.42DE.0020.0007.0002] # +3078 30FC ; [.42F7.0020.0011.0001][.42DE.0020.0007.0002] # +30D9 30FC ; [.42F7.0020.0011.0002][.0000.0037.0002][.42DE.0020.0007.0002] # +30D8 3099 30FC ; [.42F7.0020.0011.0002][.0000.0037.0002][.42DE.0020.0007.0002] # +FF8D FF9E 30FC ; [.42F7.0020.0011.0002][.0000.0037.0002][.42DE.0020.0007.0002] # +FF8D FF9E FF70 ; [.42F7.0020.0011.0002][.0000.0037.0002][.42DE.0020.0007.0002] # +3079 30FC ; [.42F7.0020.0011.0001][.0000.0037.0002][.42DE.0020.0007.0002] # +3078 3099 30FC ; [.42F7.0020.0011.0001][.0000.0037.0002][.42DE.0020.0007.0002] # +30DA 30FC ; [.42F7.0020.0011.0002][.0000.0038.0002][.42DE.0020.0007.0002] # +30D8 309A 30FC ; [.42F7.0020.0011.0002][.0000.0038.0002][.42DE.0020.0007.0002] # +FF8D FF9F 30FC ; [.42F7.0020.0011.0002][.0000.0038.0002][.42DE.0020.0007.0002] # +FF8D FF9F FF70 ; [.42F7.0020.0011.0002][.0000.0038.0002][.42DE.0020.0007.0002] # +307A 30FC ; [.42F7.0020.0011.0001][.0000.0038.0002][.42DE.0020.0007.0002] # +3078 309A 30FC ; [.42F7.0020.0011.0001][.0000.0038.0002][.42DE.0020.0007.0002] # +30E1 30FC ; [.42FC.0020.0011.0002][.42DE.0020.0007.0002] # +FF92 30FC ; [.42FC.0020.0011.0002][.42DE.0020.0007.0002] # +FF92 FF70 ; [.42FC.0020.0011.0002][.42DE.0020.0007.0002] # +3081 30FC ; [.42FC.0020.0011.0001][.42DE.0020.0007.0002] # +30EC 30FC ; [.4304.0020.0011.0002][.42DE.0020.0007.0002] # +FF9A 30FC ; [.4304.0020.0011.0002][.42DE.0020.0007.0002] # +FF9A FF70 ; [.4304.0020.0011.0002][.42DE.0020.0007.0002] # +308C 30FC ; [.4304.0020.0011.0001][.42DE.0020.0007.0002] # +30F1 30FC ; [.4308.0020.0011.0002][.42DE.0020.0007.0002] # +3091 30FC ; [.4308.0020.0011.0001][.42DE.0020.0007.0002] # +30F9 30FC ; [.4308.0020.0011.0002][.0000.0037.0002][.42DE.0020.0007.0002] # +30F1 3099 30FC ; [.4308.0020.0011.0002][.0000.0037.0002][.42DE.0020.0007.0002] # +30F6 30FC ; [.42E3.0020.000F.0002][.42DE.0020.0007.0002] # +3096 30FC ; [.42E3.0020.000F.0001][.42DE.0020.0007.0002] # +31F8 30FC ; [.42F7.0020.000F][.42DE.0020.0007.0002] # +31FE 30FC ; [.4304.0020.000F][.42DE.0020.0007.0002] # +30A9 30FC ; [.42DF.0020.000F.0002][.42DF.0020.0007.0002] # +FF6B 30FC ; [.42DF.0020.000F.0002][.42DF.0020.0007.0002] # +FF6B FF70 ; [.42DF.0020.000F.0002][.42DF.0020.0007.0002] # +3049 30FC ; [.42DF.0020.000F.0001][.42DF.0020.0007.0002] # +30AA 30FC ; [.42DF.0020.0011.0002][.42DF.0020.0007.0002] # +FF75 30FC ; [.42DF.0020.0011.0002][.42DF.0020.0007.0002] # +FF75 FF70 ; [.42DF.0020.0011.0002][.42DF.0020.0007.0002] # +304A 30FC ; [.42DF.0020.0011.0001][.42DF.0020.0007.0002] # +30B3 30FC ; [.42E4.0020.0011.0002][.42DF.0020.0007.0002] # +FF7A 30FC ; [.42E4.0020.0011.0002][.42DF.0020.0007.0002] # +FF7A FF70 ; [.42E4.0020.0011.0002][.42DF.0020.0007.0002] # +3053 30FC ; [.42E4.0020.0011.0001][.42DF.0020.0007.0002] # +30B4 30FC ; [.42E4.0020.0011.0002][.0000.0037.0002][.42DF.0020.0007.0002] # +30B3 3099 30FC ; [.42E4.0020.0011.0002][.0000.0037.0002][.42DF.0020.0007.0002] # +FF7A FF9E 30FC ; [.42E4.0020.0011.0002][.0000.0037.0002][.42DF.0020.0007.0002] # +FF7A FF9E FF70 ; [.42E4.0020.0011.0002][.0000.0037.0002][.42DF.0020.0007.0002] # +3054 30FC ; [.42E4.0020.0011.0001][.0000.0037.0002][.42DF.0020.0007.0002] # +3053 3099 30FC ; [.42E4.0020.0011.0001][.0000.0037.0002][.42DF.0020.0007.0002] # +30BD 30FC ; [.42E9.0020.0011.0002][.42DF.0020.0007.0002] # +FF7F 30FC ; [.42E9.0020.0011.0002][.42DF.0020.0007.0002] # +FF7F FF70 ; [.42E9.0020.0011.0002][.42DF.0020.0007.0002] # +305D 30FC ; [.42E9.0020.0011.0001][.42DF.0020.0007.0002] # +30BE 30FC ; [.42E9.0020.0011.0002][.0000.0037.0002][.42DF.0020.0007.0002] # +30BD 3099 30FC ; [.42E9.0020.0011.0002][.0000.0037.0002][.42DF.0020.0007.0002] # +FF7F FF9E 30FC ; [.42E9.0020.0011.0002][.0000.0037.0002][.42DF.0020.0007.0002] # +FF7F FF9E FF70 ; [.42E9.0020.0011.0002][.0000.0037.0002][.42DF.0020.0007.0002] # +305E 30FC ; [.42E9.0020.0011.0001][.0000.0037.0002][.42DF.0020.0007.0002] # +305D 3099 30FC ; [.42E9.0020.0011.0001][.0000.0037.0002][.42DF.0020.0007.0002] # +30C8 30FC ; [.42EE.0020.0011.0002][.42DF.0020.0007.0002] # +FF84 30FC ; [.42EE.0020.0011.0002][.42DF.0020.0007.0002] # +FF84 FF70 ; [.42EE.0020.0011.0002][.42DF.0020.0007.0002] # +3068 30FC ; [.42EE.0020.0011.0001][.42DF.0020.0007.0002] # +30C9 30FC ; [.42EE.0020.0011.0002][.0000.0037.0002][.42DF.0020.0007.0002] # +30C8 3099 30FC ; [.42EE.0020.0011.0002][.0000.0037.0002][.42DF.0020.0007.0002] # +FF84 FF9E 30FC ; [.42EE.0020.0011.0002][.0000.0037.0002][.42DF.0020.0007.0002] # +FF84 FF9E FF70 ; [.42EE.0020.0011.0002][.0000.0037.0002][.42DF.0020.0007.0002] # +3069 30FC ; [.42EE.0020.0011.0001][.0000.0037.0002][.42DF.0020.0007.0002] # +3068 3099 30FC ; [.42EE.0020.0011.0001][.0000.0037.0002][.42DF.0020.0007.0002] # +30CE 30FC ; [.42F3.0020.0011.0002][.42DF.0020.0007.0002] # +FF89 30FC ; [.42F3.0020.0011.0002][.42DF.0020.0007.0002] # +FF89 FF70 ; [.42F3.0020.0011.0002][.42DF.0020.0007.0002] # +306E 30FC ; [.42F3.0020.0011.0001][.42DF.0020.0007.0002] # +30DB 30FC ; [.42F8.0020.0011.0002][.42DF.0020.0007.0002] # +FF8E 30FC ; [.42F8.0020.0011.0002][.42DF.0020.0007.0002] # +FF8E FF70 ; [.42F8.0020.0011.0002][.42DF.0020.0007.0002] # +307B 30FC ; [.42F8.0020.0011.0001][.42DF.0020.0007.0002] # +30DC 30FC ; [.42F8.0020.0011.0002][.0000.0037.0002][.42DF.0020.0007.0002] # +30DB 3099 30FC ; [.42F8.0020.0011.0002][.0000.0037.0002][.42DF.0020.0007.0002] # +FF8E FF9E 30FC ; [.42F8.0020.0011.0002][.0000.0037.0002][.42DF.0020.0007.0002] # +FF8E FF9E FF70 ; [.42F8.0020.0011.0002][.0000.0037.0002][.42DF.0020.0007.0002] # +307C 30FC ; [.42F8.0020.0011.0001][.0000.0037.0002][.42DF.0020.0007.0002] # +307B 3099 30FC ; [.42F8.0020.0011.0001][.0000.0037.0002][.42DF.0020.0007.0002] # +30DD 30FC ; [.42F8.0020.0011.0002][.0000.0038.0002][.42DF.0020.0007.0002] # +30DB 309A 30FC ; [.42F8.0020.0011.0002][.0000.0038.0002][.42DF.0020.0007.0002] # +FF8E FF9F 30FC ; [.42F8.0020.0011.0002][.0000.0038.0002][.42DF.0020.0007.0002] # +FF8E FF9F FF70 ; [.42F8.0020.0011.0002][.0000.0038.0002][.42DF.0020.0007.0002] # +307D 30FC ; [.42F8.0020.0011.0001][.0000.0038.0002][.42DF.0020.0007.0002] # +307B 309A 30FC ; [.42F8.0020.0011.0001][.0000.0038.0002][.42DF.0020.0007.0002] # +30E2 30FC ; [.42FD.0020.0011.0002][.42DF.0020.0007.0002] # +FF93 30FC ; [.42FD.0020.0011.0002][.42DF.0020.0007.0002] # +FF93 FF70 ; [.42FD.0020.0011.0002][.42DF.0020.0007.0002] # +3082 30FC ; [.42FD.0020.0011.0001][.42DF.0020.0007.0002] # +30E7 30FC ; [.4300.0020.000F.0002][.42DF.0020.0007.0002] # +FF6E 30FC ; [.4300.0020.000F.0002][.42DF.0020.0007.0002] # +FF6E FF70 ; [.4300.0020.000F.0002][.42DF.0020.0007.0002] # +3087 30FC ; [.4300.0020.000F.0001][.42DF.0020.0007.0002] # +30E8 30FC ; [.4300.0020.0011.0002][.42DF.0020.0007.0002] # +FF96 30FC ; [.4300.0020.0011.0002][.42DF.0020.0007.0002] # +FF96 FF70 ; [.4300.0020.0011.0002][.42DF.0020.0007.0002] # +3088 30FC ; [.4300.0020.0011.0001][.42DF.0020.0007.0002] # +30ED 30FC ; [.4305.0020.0011.0002][.42DF.0020.0007.0002] # +FF9B 30FC ; [.4305.0020.0011.0002][.42DF.0020.0007.0002] # +FF9B FF70 ; [.4305.0020.0011.0002][.42DF.0020.0007.0002] # +308D 30FC ; [.4305.0020.0011.0001][.42DF.0020.0007.0002] # +30F2 30FC ; [.4309.0020.0011.0002][.42DF.0020.0007.0002] # +FF66 30FC ; [.4309.0020.0011.0002][.42DF.0020.0007.0002] # +FF66 FF70 ; [.4309.0020.0011.0002][.42DF.0020.0007.0002] # +3092 30FC ; [.4309.0020.0011.0001][.42DF.0020.0007.0002] # +30FA 30FC ; [.4309.0020.0011.0002][.0000.0037.0002][.42DF.0020.0007.0002] # +30F2 3099 30FC ; [.4309.0020.0011.0002][.0000.0037.0002][.42DF.0020.0007.0002] # +FF66 FF9E 30FC ; [.4309.0020.0011.0002][.0000.0037.0002][.42DF.0020.0007.0002] # +FF66 FF9E FF70 ; [.4309.0020.0011.0002][.0000.0037.0002][.42DF.0020.0007.0002] # +31F3 30FC ; [.42EE.0020.000F][.42DF.0020.0007.0002] # +31F9 30FC ; [.42F8.0020.000F][.42DF.0020.0007.0002] # +31FF 30FC ; [.4305.0020.000F][.42DF.0020.0007.0002] # +30A1 30FD ; [.42DA.0020.000F.0002][.42DA.0020.0010.0002] # +FF67 30FD ; [.42DA.0020.000F.0002][.42DA.0020.0010.0002] # +3041 309D ; [.42DA.0020.000F.0001][.42DA.0020.0010.0002] # +30A2 30FD ; [.42DA.0020.0011.0002][.42DA.0020.0010.0002] # +FF71 30FD ; [.42DA.0020.0011.0002][.42DA.0020.0010.0002] # +3042 309D ; [.42DA.0020.0011.0001][.42DA.0020.0010.0002] # +30A3 30FD ; [.42DB.0020.000F.0002][.42DB.0020.0010.0002] # +FF68 30FD ; [.42DB.0020.000F.0002][.42DB.0020.0010.0002] # +3043 309D ; [.42DB.0020.000F.0001][.42DB.0020.0010.0002] # +30A4 30FD ; [.42DB.0020.0011.0002][.42DB.0020.0010.0002] # +FF72 30FD ; [.42DB.0020.0011.0002][.42DB.0020.0010.0002] # +3044 309D ; [.42DB.0020.0011.0001][.42DB.0020.0010.0002] # +30A5 30FD ; [.42DC.0020.000F.0002][.42DC.0020.0010.0002] # +FF69 30FD ; [.42DC.0020.000F.0002][.42DC.0020.0010.0002] # +3045 309D ; [.42DC.0020.000F.0001][.42DC.0020.0010.0002] # +30A5 30FE ; [.42DC.0020.000F.0002][.42DC.0020.0010.0002][.0000.0037.0002] # +FF69 30FE ; [.42DC.0020.000F.0002][.42DC.0020.0010.0002][.0000.0037.0002] # +3045 309E ; [.42DC.0020.000F.0001][.42DC.0020.0010.0002][.0000.0037.0002] # +30A6 30FD ; [.42DC.0020.0011.0002][.42DC.0020.0010.0002] # +FF73 30FD ; [.42DC.0020.0011.0002][.42DC.0020.0010.0002] # +3046 309D ; [.42DC.0020.0011.0001][.42DC.0020.0010.0002] # +30A6 30FE ; [.42DC.0020.0011.0002][.42DC.0020.0010.0002][.0000.0037.0002] # +FF73 30FE ; [.42DC.0020.0011.0002][.42DC.0020.0010.0002][.0000.0037.0002] # +3046 309E ; [.42DC.0020.0011.0001][.42DC.0020.0010.0002][.0000.0037.0002] # +30A7 30FD ; [.42DE.0020.000F.0002][.42DE.0020.0010.0002] # +FF6A 30FD ; [.42DE.0020.000F.0002][.42DE.0020.0010.0002] # +3047 309D ; [.42DE.0020.000F.0001][.42DE.0020.0010.0002] # +30A8 30FD ; [.42DE.0020.0011.0002][.42DE.0020.0010.0002] # +FF74 30FD ; [.42DE.0020.0011.0002][.42DE.0020.0010.0002] # +3048 309D ; [.42DE.0020.0011.0001][.42DE.0020.0010.0002] # +30A9 30FD ; [.42DF.0020.000F.0002][.42DF.0020.0010.0002] # +FF6B 30FD ; [.42DF.0020.000F.0002][.42DF.0020.0010.0002] # +3049 309D ; [.42DF.0020.000F.0001][.42DF.0020.0010.0002] # +30AA 30FD ; [.42DF.0020.0011.0002][.42DF.0020.0010.0002] # +FF75 30FD ; [.42DF.0020.0011.0002][.42DF.0020.0010.0002] # +304A 309D ; [.42DF.0020.0011.0001][.42DF.0020.0010.0002] # +30AB 30FD ; [.42E0.0020.0011.0002][.42E0.0020.0010.0002] # +FF76 30FD ; [.42E0.0020.0011.0002][.42E0.0020.0010.0002] # +304B 309D ; [.42E0.0020.0011.0001][.42E0.0020.0010.0002] # +30AB 30FE ; [.42E0.0020.0011.0002][.42E0.0020.0010.0002][.0000.0037.0002] # +FF76 30FE ; [.42E0.0020.0011.0002][.42E0.0020.0010.0002][.0000.0037.0002] # +304B 309E ; [.42E0.0020.0011.0001][.42E0.0020.0010.0002][.0000.0037.0002] # +30AC 30FD ; [.42E0.0020.0011.0002][.0000.0037.0002][.42E0.0020.0010.0002] # +30AB 3099 30FD ; [.42E0.0020.0011.0002][.0000.0037.0002][.42E0.0020.0010.0002] # +FF76 FF9E 30FD ; [.42E0.0020.0011.0002][.0000.0037.0002][.42E0.0020.0010.0002] # +304C 309D ; [.42E0.0020.0011.0001][.0000.0037.0002][.42E0.0020.0010.0002] # +304B 3099 309D ; [.42E0.0020.0011.0001][.0000.0037.0002][.42E0.0020.0010.0002] # +30AC 30FE ; [.42E0.0020.0011.0002][.0000.0037.0002][.42E0.0020.0010.0002][.0000.0037.0002] # +30AB 3099 30FE ; [.42E0.0020.0011.0002][.0000.0037.0002][.42E0.0020.0010.0002][.0000.0037.0002] # +FF76 FF9E 30FE ; [.42E0.0020.0011.0002][.0000.0037.0002][.42E0.0020.0010.0002][.0000.0037.0002] # +304C 309E ; [.42E0.0020.0011.0001][.0000.0037.0002][.42E0.0020.0010.0002][.0000.0037.0002] # +304B 3099 309E ; [.42E0.0020.0011.0001][.0000.0037.0002][.42E0.0020.0010.0002][.0000.0037.0002] # +30AD 30FD ; [.42E1.0020.0011.0002][.42E1.0020.0010.0002] # +FF77 30FD ; [.42E1.0020.0011.0002][.42E1.0020.0010.0002] # +304D 309D ; [.42E1.0020.0011.0001][.42E1.0020.0010.0002] # +30AD 30FE ; [.42E1.0020.0011.0002][.42E1.0020.0010.0002][.0000.0037.0002] # +FF77 30FE ; [.42E1.0020.0011.0002][.42E1.0020.0010.0002][.0000.0037.0002] # +304D 309E ; [.42E1.0020.0011.0001][.42E1.0020.0010.0002][.0000.0037.0002] # +30AE 30FD ; [.42E1.0020.0011.0002][.0000.0037.0002][.42E1.0020.0010.0002] # +30AD 3099 30FD ; [.42E1.0020.0011.0002][.0000.0037.0002][.42E1.0020.0010.0002] # +FF77 FF9E 30FD ; [.42E1.0020.0011.0002][.0000.0037.0002][.42E1.0020.0010.0002] # +304E 309D ; [.42E1.0020.0011.0001][.0000.0037.0002][.42E1.0020.0010.0002] # +304D 3099 309D ; [.42E1.0020.0011.0001][.0000.0037.0002][.42E1.0020.0010.0002] # +30AE 30FE ; [.42E1.0020.0011.0002][.0000.0037.0002][.42E1.0020.0010.0002][.0000.0037.0002] # +30AD 3099 30FE ; [.42E1.0020.0011.0002][.0000.0037.0002][.42E1.0020.0010.0002][.0000.0037.0002] # +FF77 FF9E 30FE ; [.42E1.0020.0011.0002][.0000.0037.0002][.42E1.0020.0010.0002][.0000.0037.0002] # +304E 309E ; [.42E1.0020.0011.0001][.0000.0037.0002][.42E1.0020.0010.0002][.0000.0037.0002] # +304D 3099 309E ; [.42E1.0020.0011.0001][.0000.0037.0002][.42E1.0020.0010.0002][.0000.0037.0002] # +30AF 30FD ; [.42E2.0020.0011.0002][.42E2.0020.0010.0002] # +FF78 30FD ; [.42E2.0020.0011.0002][.42E2.0020.0010.0002] # +304F 309D ; [.42E2.0020.0011.0001][.42E2.0020.0010.0002] # +30AF 30FE ; [.42E2.0020.0011.0002][.42E2.0020.0010.0002][.0000.0037.0002] # +FF78 30FE ; [.42E2.0020.0011.0002][.42E2.0020.0010.0002][.0000.0037.0002] # +304F 309E ; [.42E2.0020.0011.0001][.42E2.0020.0010.0002][.0000.0037.0002] # +30B0 30FD ; [.42E2.0020.0011.0002][.0000.0037.0002][.42E2.0020.0010.0002] # +30AF 3099 30FD ; [.42E2.0020.0011.0002][.0000.0037.0002][.42E2.0020.0010.0002] # +FF78 FF9E 30FD ; [.42E2.0020.0011.0002][.0000.0037.0002][.42E2.0020.0010.0002] # +3050 309D ; [.42E2.0020.0011.0001][.0000.0037.0002][.42E2.0020.0010.0002] # +304F 3099 309D ; [.42E2.0020.0011.0001][.0000.0037.0002][.42E2.0020.0010.0002] # +30B0 30FE ; [.42E2.0020.0011.0002][.0000.0037.0002][.42E2.0020.0010.0002][.0000.0037.0002] # +30AF 3099 30FE ; [.42E2.0020.0011.0002][.0000.0037.0002][.42E2.0020.0010.0002][.0000.0037.0002] # +FF78 FF9E 30FE ; [.42E2.0020.0011.0002][.0000.0037.0002][.42E2.0020.0010.0002][.0000.0037.0002] # +3050 309E ; [.42E2.0020.0011.0001][.0000.0037.0002][.42E2.0020.0010.0002][.0000.0037.0002] # +304F 3099 309E ; [.42E2.0020.0011.0001][.0000.0037.0002][.42E2.0020.0010.0002][.0000.0037.0002] # +30B1 30FD ; [.42E3.0020.0011.0002][.42E3.0020.0010.0002] # +FF79 30FD ; [.42E3.0020.0011.0002][.42E3.0020.0010.0002] # +3051 309D ; [.42E3.0020.0011.0001][.42E3.0020.0010.0002] # +30B1 30FE ; [.42E3.0020.0011.0002][.42E3.0020.0010.0002][.0000.0037.0002] # +FF79 30FE ; [.42E3.0020.0011.0002][.42E3.0020.0010.0002][.0000.0037.0002] # +3051 309E ; [.42E3.0020.0011.0001][.42E3.0020.0010.0002][.0000.0037.0002] # +30B2 30FD ; [.42E3.0020.0011.0002][.0000.0037.0002][.42E3.0020.0010.0002] # +30B1 3099 30FD ; [.42E3.0020.0011.0002][.0000.0037.0002][.42E3.0020.0010.0002] # +FF79 FF9E 30FD ; [.42E3.0020.0011.0002][.0000.0037.0002][.42E3.0020.0010.0002] # +3052 309D ; [.42E3.0020.0011.0001][.0000.0037.0002][.42E3.0020.0010.0002] # +3051 3099 309D ; [.42E3.0020.0011.0001][.0000.0037.0002][.42E3.0020.0010.0002] # +30B2 30FE ; [.42E3.0020.0011.0002][.0000.0037.0002][.42E3.0020.0010.0002][.0000.0037.0002] # +30B1 3099 30FE ; [.42E3.0020.0011.0002][.0000.0037.0002][.42E3.0020.0010.0002][.0000.0037.0002] # +FF79 FF9E 30FE ; [.42E3.0020.0011.0002][.0000.0037.0002][.42E3.0020.0010.0002][.0000.0037.0002] # +3052 309E ; [.42E3.0020.0011.0001][.0000.0037.0002][.42E3.0020.0010.0002][.0000.0037.0002] # +3051 3099 309E ; [.42E3.0020.0011.0001][.0000.0037.0002][.42E3.0020.0010.0002][.0000.0037.0002] # +30B3 30FD ; [.42E4.0020.0011.0002][.42E4.0020.0010.0002] # +FF7A 30FD ; [.42E4.0020.0011.0002][.42E4.0020.0010.0002] # +3053 309D ; [.42E4.0020.0011.0001][.42E4.0020.0010.0002] # +30B3 30FE ; [.42E4.0020.0011.0002][.42E4.0020.0010.0002][.0000.0037.0002] # +FF7A 30FE ; [.42E4.0020.0011.0002][.42E4.0020.0010.0002][.0000.0037.0002] # +3053 309E ; [.42E4.0020.0011.0001][.42E4.0020.0010.0002][.0000.0037.0002] # +30B4 30FD ; [.42E4.0020.0011.0002][.0000.0037.0002][.42E4.0020.0010.0002] # +30B3 3099 30FD ; [.42E4.0020.0011.0002][.0000.0037.0002][.42E4.0020.0010.0002] # +FF7A FF9E 30FD ; [.42E4.0020.0011.0002][.0000.0037.0002][.42E4.0020.0010.0002] # +3054 309D ; [.42E4.0020.0011.0001][.0000.0037.0002][.42E4.0020.0010.0002] # +3053 3099 309D ; [.42E4.0020.0011.0001][.0000.0037.0002][.42E4.0020.0010.0002] # +30B4 30FE ; [.42E4.0020.0011.0002][.0000.0037.0002][.42E4.0020.0010.0002][.0000.0037.0002] # +30B3 3099 30FE ; [.42E4.0020.0011.0002][.0000.0037.0002][.42E4.0020.0010.0002][.0000.0037.0002] # +FF7A FF9E 30FE ; [.42E4.0020.0011.0002][.0000.0037.0002][.42E4.0020.0010.0002][.0000.0037.0002] # +3054 309E ; [.42E4.0020.0011.0001][.0000.0037.0002][.42E4.0020.0010.0002][.0000.0037.0002] # +3053 3099 309E ; [.42E4.0020.0011.0001][.0000.0037.0002][.42E4.0020.0010.0002][.0000.0037.0002] # +30B5 30FD ; [.42E5.0020.0011.0002][.42E5.0020.0010.0002] # +FF7B 30FD ; [.42E5.0020.0011.0002][.42E5.0020.0010.0002] # +3055 309D ; [.42E5.0020.0011.0001][.42E5.0020.0010.0002] # +30B5 30FE ; [.42E5.0020.0011.0002][.42E5.0020.0010.0002][.0000.0037.0002] # +FF7B 30FE ; [.42E5.0020.0011.0002][.42E5.0020.0010.0002][.0000.0037.0002] # +3055 309E ; [.42E5.0020.0011.0001][.42E5.0020.0010.0002][.0000.0037.0002] # +30B6 30FD ; [.42E5.0020.0011.0002][.0000.0037.0002][.42E5.0020.0010.0002] # +30B5 3099 30FD ; [.42E5.0020.0011.0002][.0000.0037.0002][.42E5.0020.0010.0002] # +FF7B FF9E 30FD ; [.42E5.0020.0011.0002][.0000.0037.0002][.42E5.0020.0010.0002] # +3056 309D ; [.42E5.0020.0011.0001][.0000.0037.0002][.42E5.0020.0010.0002] # +3055 3099 309D ; [.42E5.0020.0011.0001][.0000.0037.0002][.42E5.0020.0010.0002] # +30B6 30FE ; [.42E5.0020.0011.0002][.0000.0037.0002][.42E5.0020.0010.0002][.0000.0037.0002] # +30B5 3099 30FE ; [.42E5.0020.0011.0002][.0000.0037.0002][.42E5.0020.0010.0002][.0000.0037.0002] # +FF7B FF9E 30FE ; [.42E5.0020.0011.0002][.0000.0037.0002][.42E5.0020.0010.0002][.0000.0037.0002] # +3056 309E ; [.42E5.0020.0011.0001][.0000.0037.0002][.42E5.0020.0010.0002][.0000.0037.0002] # +3055 3099 309E ; [.42E5.0020.0011.0001][.0000.0037.0002][.42E5.0020.0010.0002][.0000.0037.0002] # +30B7 30FD ; [.42E6.0020.0011.0002][.42E6.0020.0010.0002] # +FF7C 30FD ; [.42E6.0020.0011.0002][.42E6.0020.0010.0002] # +3057 309D ; [.42E6.0020.0011.0001][.42E6.0020.0010.0002] # +30B7 30FE ; [.42E6.0020.0011.0002][.42E6.0020.0010.0002][.0000.0037.0002] # +FF7C 30FE ; [.42E6.0020.0011.0002][.42E6.0020.0010.0002][.0000.0037.0002] # +3057 309E ; [.42E6.0020.0011.0001][.42E6.0020.0010.0002][.0000.0037.0002] # +30B8 30FD ; [.42E6.0020.0011.0002][.0000.0037.0002][.42E6.0020.0010.0002] # +30B7 3099 30FD ; [.42E6.0020.0011.0002][.0000.0037.0002][.42E6.0020.0010.0002] # +FF7C FF9E 30FD ; [.42E6.0020.0011.0002][.0000.0037.0002][.42E6.0020.0010.0002] # +3058 309D ; [.42E6.0020.0011.0001][.0000.0037.0002][.42E6.0020.0010.0002] # +3057 3099 309D ; [.42E6.0020.0011.0001][.0000.0037.0002][.42E6.0020.0010.0002] # +30B8 30FE ; [.42E6.0020.0011.0002][.0000.0037.0002][.42E6.0020.0010.0002][.0000.0037.0002] # +30B7 3099 30FE ; [.42E6.0020.0011.0002][.0000.0037.0002][.42E6.0020.0010.0002][.0000.0037.0002] # +FF7C FF9E 30FE ; [.42E6.0020.0011.0002][.0000.0037.0002][.42E6.0020.0010.0002][.0000.0037.0002] # +3058 309E ; [.42E6.0020.0011.0001][.0000.0037.0002][.42E6.0020.0010.0002][.0000.0037.0002] # +3057 3099 309E ; [.42E6.0020.0011.0001][.0000.0037.0002][.42E6.0020.0010.0002][.0000.0037.0002] # +30B9 30FD ; [.42E7.0020.0011.0002][.42E7.0020.0010.0002] # +FF7D 30FD ; [.42E7.0020.0011.0002][.42E7.0020.0010.0002] # +3059 309D ; [.42E7.0020.0011.0001][.42E7.0020.0010.0002] # +30B9 30FE ; [.42E7.0020.0011.0002][.42E7.0020.0010.0002][.0000.0037.0002] # +FF7D 30FE ; [.42E7.0020.0011.0002][.42E7.0020.0010.0002][.0000.0037.0002] # +3059 309E ; [.42E7.0020.0011.0001][.42E7.0020.0010.0002][.0000.0037.0002] # +30BA 30FD ; [.42E7.0020.0011.0002][.0000.0037.0002][.42E7.0020.0010.0002] # +30B9 3099 30FD ; [.42E7.0020.0011.0002][.0000.0037.0002][.42E7.0020.0010.0002] # +FF7D FF9E 30FD ; [.42E7.0020.0011.0002][.0000.0037.0002][.42E7.0020.0010.0002] # +305A 309D ; [.42E7.0020.0011.0001][.0000.0037.0002][.42E7.0020.0010.0002] # +3059 3099 309D ; [.42E7.0020.0011.0001][.0000.0037.0002][.42E7.0020.0010.0002] # +30BA 30FE ; [.42E7.0020.0011.0002][.0000.0037.0002][.42E7.0020.0010.0002][.0000.0037.0002] # +30B9 3099 30FE ; [.42E7.0020.0011.0002][.0000.0037.0002][.42E7.0020.0010.0002][.0000.0037.0002] # +FF7D FF9E 30FE ; [.42E7.0020.0011.0002][.0000.0037.0002][.42E7.0020.0010.0002][.0000.0037.0002] # +305A 309E ; [.42E7.0020.0011.0001][.0000.0037.0002][.42E7.0020.0010.0002][.0000.0037.0002] # +3059 3099 309E ; [.42E7.0020.0011.0001][.0000.0037.0002][.42E7.0020.0010.0002][.0000.0037.0002] # +30BB 30FD ; [.42E8.0020.0011.0002][.42E8.0020.0010.0002] # +FF7E 30FD ; [.42E8.0020.0011.0002][.42E8.0020.0010.0002] # +305B 309D ; [.42E8.0020.0011.0001][.42E8.0020.0010.0002] # +30BB 30FE ; [.42E8.0020.0011.0002][.42E8.0020.0010.0002][.0000.0037.0002] # +FF7E 30FE ; [.42E8.0020.0011.0002][.42E8.0020.0010.0002][.0000.0037.0002] # +305B 309E ; [.42E8.0020.0011.0001][.42E8.0020.0010.0002][.0000.0037.0002] # +30BC 30FD ; [.42E8.0020.0011.0002][.0000.0037.0002][.42E8.0020.0010.0002] # +30BB 3099 30FD ; [.42E8.0020.0011.0002][.0000.0037.0002][.42E8.0020.0010.0002] # +FF7E FF9E 30FD ; [.42E8.0020.0011.0002][.0000.0037.0002][.42E8.0020.0010.0002] # +305C 309D ; [.42E8.0020.0011.0001][.0000.0037.0002][.42E8.0020.0010.0002] # +305B 3099 309D ; [.42E8.0020.0011.0001][.0000.0037.0002][.42E8.0020.0010.0002] # +30BC 30FE ; [.42E8.0020.0011.0002][.0000.0037.0002][.42E8.0020.0010.0002][.0000.0037.0002] # +30BB 3099 30FE ; [.42E8.0020.0011.0002][.0000.0037.0002][.42E8.0020.0010.0002][.0000.0037.0002] # +FF7E FF9E 30FE ; [.42E8.0020.0011.0002][.0000.0037.0002][.42E8.0020.0010.0002][.0000.0037.0002] # +305C 309E ; [.42E8.0020.0011.0001][.0000.0037.0002][.42E8.0020.0010.0002][.0000.0037.0002] # +305B 3099 309E ; [.42E8.0020.0011.0001][.0000.0037.0002][.42E8.0020.0010.0002][.0000.0037.0002] # +30BD 30FD ; [.42E9.0020.0011.0002][.42E9.0020.0010.0002] # +FF7F 30FD ; [.42E9.0020.0011.0002][.42E9.0020.0010.0002] # +305D 309D ; [.42E9.0020.0011.0001][.42E9.0020.0010.0002] # +30BD 30FE ; [.42E9.0020.0011.0002][.42E9.0020.0010.0002][.0000.0037.0002] # +FF7F 30FE ; [.42E9.0020.0011.0002][.42E9.0020.0010.0002][.0000.0037.0002] # +305D 309E ; [.42E9.0020.0011.0001][.42E9.0020.0010.0002][.0000.0037.0002] # +30BE 30FD ; [.42E9.0020.0011.0002][.0000.0037.0002][.42E9.0020.0010.0002] # +30BD 3099 30FD ; [.42E9.0020.0011.0002][.0000.0037.0002][.42E9.0020.0010.0002] # +FF7F FF9E 30FD ; [.42E9.0020.0011.0002][.0000.0037.0002][.42E9.0020.0010.0002] # +305E 309D ; [.42E9.0020.0011.0001][.0000.0037.0002][.42E9.0020.0010.0002] # +305D 3099 309D ; [.42E9.0020.0011.0001][.0000.0037.0002][.42E9.0020.0010.0002] # +30BE 30FE ; [.42E9.0020.0011.0002][.0000.0037.0002][.42E9.0020.0010.0002][.0000.0037.0002] # +30BD 3099 30FE ; [.42E9.0020.0011.0002][.0000.0037.0002][.42E9.0020.0010.0002][.0000.0037.0002] # +FF7F FF9E 30FE ; [.42E9.0020.0011.0002][.0000.0037.0002][.42E9.0020.0010.0002][.0000.0037.0002] # +305E 309E ; [.42E9.0020.0011.0001][.0000.0037.0002][.42E9.0020.0010.0002][.0000.0037.0002] # +305D 3099 309E ; [.42E9.0020.0011.0001][.0000.0037.0002][.42E9.0020.0010.0002][.0000.0037.0002] # +30BF 30FD ; [.42EA.0020.0011.0002][.42EA.0020.0010.0002] # +FF80 30FD ; [.42EA.0020.0011.0002][.42EA.0020.0010.0002] # +305F 309D ; [.42EA.0020.0011.0001][.42EA.0020.0010.0002] # +30BF 30FE ; [.42EA.0020.0011.0002][.42EA.0020.0010.0002][.0000.0037.0002] # +FF80 30FE ; [.42EA.0020.0011.0002][.42EA.0020.0010.0002][.0000.0037.0002] # +305F 309E ; [.42EA.0020.0011.0001][.42EA.0020.0010.0002][.0000.0037.0002] # +30C0 30FD ; [.42EA.0020.0011.0002][.0000.0037.0002][.42EA.0020.0010.0002] # +30BF 3099 30FD ; [.42EA.0020.0011.0002][.0000.0037.0002][.42EA.0020.0010.0002] # +FF80 FF9E 30FD ; [.42EA.0020.0011.0002][.0000.0037.0002][.42EA.0020.0010.0002] # +3060 309D ; [.42EA.0020.0011.0001][.0000.0037.0002][.42EA.0020.0010.0002] # +305F 3099 309D ; [.42EA.0020.0011.0001][.0000.0037.0002][.42EA.0020.0010.0002] # +30C0 30FE ; [.42EA.0020.0011.0002][.0000.0037.0002][.42EA.0020.0010.0002][.0000.0037.0002] # +30BF 3099 30FE ; [.42EA.0020.0011.0002][.0000.0037.0002][.42EA.0020.0010.0002][.0000.0037.0002] # +FF80 FF9E 30FE ; [.42EA.0020.0011.0002][.0000.0037.0002][.42EA.0020.0010.0002][.0000.0037.0002] # +3060 309E ; [.42EA.0020.0011.0001][.0000.0037.0002][.42EA.0020.0010.0002][.0000.0037.0002] # +305F 3099 309E ; [.42EA.0020.0011.0001][.0000.0037.0002][.42EA.0020.0010.0002][.0000.0037.0002] # +30C1 30FD ; [.42EB.0020.0011.0002][.42EB.0020.0010.0002] # +FF81 30FD ; [.42EB.0020.0011.0002][.42EB.0020.0010.0002] # +3061 309D ; [.42EB.0020.0011.0001][.42EB.0020.0010.0002] # +30C1 30FE ; [.42EB.0020.0011.0002][.42EB.0020.0010.0002][.0000.0037.0002] # +FF81 30FE ; [.42EB.0020.0011.0002][.42EB.0020.0010.0002][.0000.0037.0002] # +3061 309E ; [.42EB.0020.0011.0001][.42EB.0020.0010.0002][.0000.0037.0002] # +30C2 30FD ; [.42EB.0020.0011.0002][.0000.0037.0002][.42EB.0020.0010.0002] # +30C1 3099 30FD ; [.42EB.0020.0011.0002][.0000.0037.0002][.42EB.0020.0010.0002] # +FF81 FF9E 30FD ; [.42EB.0020.0011.0002][.0000.0037.0002][.42EB.0020.0010.0002] # +3062 309D ; [.42EB.0020.0011.0001][.0000.0037.0002][.42EB.0020.0010.0002] # +3061 3099 309D ; [.42EB.0020.0011.0001][.0000.0037.0002][.42EB.0020.0010.0002] # +30C2 30FE ; [.42EB.0020.0011.0002][.0000.0037.0002][.42EB.0020.0010.0002][.0000.0037.0002] # +30C1 3099 30FE ; [.42EB.0020.0011.0002][.0000.0037.0002][.42EB.0020.0010.0002][.0000.0037.0002] # +FF81 FF9E 30FE ; [.42EB.0020.0011.0002][.0000.0037.0002][.42EB.0020.0010.0002][.0000.0037.0002] # +3062 309E ; [.42EB.0020.0011.0001][.0000.0037.0002][.42EB.0020.0010.0002][.0000.0037.0002] # +3061 3099 309E ; [.42EB.0020.0011.0001][.0000.0037.0002][.42EB.0020.0010.0002][.0000.0037.0002] # +30C3 30FD ; [.42EC.0020.000F.0002][.42EC.0020.0010.0002] # +FF6F 30FD ; [.42EC.0020.000F.0002][.42EC.0020.0010.0002] # +3063 309D ; [.42EC.0020.000F.0001][.42EC.0020.0010.0002] # +30C3 30FE ; [.42EC.0020.000F.0002][.42EC.0020.0010.0002][.0000.0037.0002] # +FF6F 30FE ; [.42EC.0020.000F.0002][.42EC.0020.0010.0002][.0000.0037.0002] # +3063 309E ; [.42EC.0020.000F.0001][.42EC.0020.0010.0002][.0000.0037.0002] # +30C4 30FD ; [.42EC.0020.0011.0002][.42EC.0020.0010.0002] # +FF82 30FD ; [.42EC.0020.0011.0002][.42EC.0020.0010.0002] # +3064 309D ; [.42EC.0020.0011.0001][.42EC.0020.0010.0002] # +30C4 30FE ; [.42EC.0020.0011.0002][.42EC.0020.0010.0002][.0000.0037.0002] # +FF82 30FE ; [.42EC.0020.0011.0002][.42EC.0020.0010.0002][.0000.0037.0002] # +3064 309E ; [.42EC.0020.0011.0001][.42EC.0020.0010.0002][.0000.0037.0002] # +30C5 30FD ; [.42EC.0020.0011.0002][.0000.0037.0002][.42EC.0020.0010.0002] # +30C4 3099 30FD ; [.42EC.0020.0011.0002][.0000.0037.0002][.42EC.0020.0010.0002] # +FF82 FF9E 30FD ; [.42EC.0020.0011.0002][.0000.0037.0002][.42EC.0020.0010.0002] # +3065 309D ; [.42EC.0020.0011.0001][.0000.0037.0002][.42EC.0020.0010.0002] # +3064 3099 309D ; [.42EC.0020.0011.0001][.0000.0037.0002][.42EC.0020.0010.0002] # +30C5 30FE ; [.42EC.0020.0011.0002][.0000.0037.0002][.42EC.0020.0010.0002][.0000.0037.0002] # +30C4 3099 30FE ; [.42EC.0020.0011.0002][.0000.0037.0002][.42EC.0020.0010.0002][.0000.0037.0002] # +FF82 FF9E 30FE ; [.42EC.0020.0011.0002][.0000.0037.0002][.42EC.0020.0010.0002][.0000.0037.0002] # +3065 309E ; [.42EC.0020.0011.0001][.0000.0037.0002][.42EC.0020.0010.0002][.0000.0037.0002] # +3064 3099 309E ; [.42EC.0020.0011.0001][.0000.0037.0002][.42EC.0020.0010.0002][.0000.0037.0002] # +30C6 30FD ; [.42ED.0020.0011.0002][.42ED.0020.0010.0002] # +FF83 30FD ; [.42ED.0020.0011.0002][.42ED.0020.0010.0002] # +3066 309D ; [.42ED.0020.0011.0001][.42ED.0020.0010.0002] # +30C6 30FE ; [.42ED.0020.0011.0002][.42ED.0020.0010.0002][.0000.0037.0002] # +FF83 30FE ; [.42ED.0020.0011.0002][.42ED.0020.0010.0002][.0000.0037.0002] # +3066 309E ; [.42ED.0020.0011.0001][.42ED.0020.0010.0002][.0000.0037.0002] # +30C7 30FD ; [.42ED.0020.0011.0002][.0000.0037.0002][.42ED.0020.0010.0002] # +30C6 3099 30FD ; [.42ED.0020.0011.0002][.0000.0037.0002][.42ED.0020.0010.0002] # +FF83 FF9E 30FD ; [.42ED.0020.0011.0002][.0000.0037.0002][.42ED.0020.0010.0002] # +3067 309D ; [.42ED.0020.0011.0001][.0000.0037.0002][.42ED.0020.0010.0002] # +3066 3099 309D ; [.42ED.0020.0011.0001][.0000.0037.0002][.42ED.0020.0010.0002] # +30C7 30FE ; [.42ED.0020.0011.0002][.0000.0037.0002][.42ED.0020.0010.0002][.0000.0037.0002] # +30C6 3099 30FE ; [.42ED.0020.0011.0002][.0000.0037.0002][.42ED.0020.0010.0002][.0000.0037.0002] # +FF83 FF9E 30FE ; [.42ED.0020.0011.0002][.0000.0037.0002][.42ED.0020.0010.0002][.0000.0037.0002] # +3067 309E ; [.42ED.0020.0011.0001][.0000.0037.0002][.42ED.0020.0010.0002][.0000.0037.0002] # +3066 3099 309E ; [.42ED.0020.0011.0001][.0000.0037.0002][.42ED.0020.0010.0002][.0000.0037.0002] # +30C8 30FD ; [.42EE.0020.0011.0002][.42EE.0020.0010.0002] # +FF84 30FD ; [.42EE.0020.0011.0002][.42EE.0020.0010.0002] # +3068 309D ; [.42EE.0020.0011.0001][.42EE.0020.0010.0002] # +30C8 30FE ; [.42EE.0020.0011.0002][.42EE.0020.0010.0002][.0000.0037.0002] # +FF84 30FE ; [.42EE.0020.0011.0002][.42EE.0020.0010.0002][.0000.0037.0002] # +3068 309E ; [.42EE.0020.0011.0001][.42EE.0020.0010.0002][.0000.0037.0002] # +30C9 30FD ; [.42EE.0020.0011.0002][.0000.0037.0002][.42EE.0020.0010.0002] # +30C8 3099 30FD ; [.42EE.0020.0011.0002][.0000.0037.0002][.42EE.0020.0010.0002] # +FF84 FF9E 30FD ; [.42EE.0020.0011.0002][.0000.0037.0002][.42EE.0020.0010.0002] # +3069 309D ; [.42EE.0020.0011.0001][.0000.0037.0002][.42EE.0020.0010.0002] # +3068 3099 309D ; [.42EE.0020.0011.0001][.0000.0037.0002][.42EE.0020.0010.0002] # +30C9 30FE ; [.42EE.0020.0011.0002][.0000.0037.0002][.42EE.0020.0010.0002][.0000.0037.0002] # +30C8 3099 30FE ; [.42EE.0020.0011.0002][.0000.0037.0002][.42EE.0020.0010.0002][.0000.0037.0002] # +FF84 FF9E 30FE ; [.42EE.0020.0011.0002][.0000.0037.0002][.42EE.0020.0010.0002][.0000.0037.0002] # +3069 309E ; [.42EE.0020.0011.0001][.0000.0037.0002][.42EE.0020.0010.0002][.0000.0037.0002] # +3068 3099 309E ; [.42EE.0020.0011.0001][.0000.0037.0002][.42EE.0020.0010.0002][.0000.0037.0002] # +30CA 30FD ; [.42EF.0020.0011.0002][.42EF.0020.0010.0002] # +FF85 30FD ; [.42EF.0020.0011.0002][.42EF.0020.0010.0002] # +306A 309D ; [.42EF.0020.0011.0001][.42EF.0020.0010.0002] # +30CB 30FD ; [.42F0.0020.0011.0002][.42F0.0020.0010.0002] # +FF86 30FD ; [.42F0.0020.0011.0002][.42F0.0020.0010.0002] # +306B 309D ; [.42F0.0020.0011.0001][.42F0.0020.0010.0002] # +30CC 30FD ; [.42F1.0020.0011.0002][.42F1.0020.0010.0002] # +FF87 30FD ; [.42F1.0020.0011.0002][.42F1.0020.0010.0002] # +306C 309D ; [.42F1.0020.0011.0001][.42F1.0020.0010.0002] # +30CD 30FD ; [.42F2.0020.0011.0002][.42F2.0020.0010.0002] # +FF88 30FD ; [.42F2.0020.0011.0002][.42F2.0020.0010.0002] # +306D 309D ; [.42F2.0020.0011.0001][.42F2.0020.0010.0002] # +30CE 30FD ; [.42F3.0020.0011.0002][.42F3.0020.0010.0002] # +FF89 30FD ; [.42F3.0020.0011.0002][.42F3.0020.0010.0002] # +306E 309D ; [.42F3.0020.0011.0001][.42F3.0020.0010.0002] # +30CF 30FD ; [.42F4.0020.0011.0002][.42F4.0020.0010.0002] # +FF8A 30FD ; [.42F4.0020.0011.0002][.42F4.0020.0010.0002] # +306F 309D ; [.42F4.0020.0011.0001][.42F4.0020.0010.0002] # +30CF 30FE ; [.42F4.0020.0011.0002][.42F4.0020.0010.0002][.0000.0037.0002] # +FF8A 30FE ; [.42F4.0020.0011.0002][.42F4.0020.0010.0002][.0000.0037.0002] # +306F 309E ; [.42F4.0020.0011.0001][.42F4.0020.0010.0002][.0000.0037.0002] # +30D0 30FD ; [.42F4.0020.0011.0002][.0000.0037.0002][.42F4.0020.0010.0002] # +30CF 3099 30FD ; [.42F4.0020.0011.0002][.0000.0037.0002][.42F4.0020.0010.0002] # +FF8A FF9E 30FD ; [.42F4.0020.0011.0002][.0000.0037.0002][.42F4.0020.0010.0002] # +3070 309D ; [.42F4.0020.0011.0001][.0000.0037.0002][.42F4.0020.0010.0002] # +306F 3099 309D ; [.42F4.0020.0011.0001][.0000.0037.0002][.42F4.0020.0010.0002] # +30D0 30FE ; [.42F4.0020.0011.0002][.0000.0037.0002][.42F4.0020.0010.0002][.0000.0037.0002] # +30CF 3099 30FE ; [.42F4.0020.0011.0002][.0000.0037.0002][.42F4.0020.0010.0002][.0000.0037.0002] # +FF8A FF9E 30FE ; [.42F4.0020.0011.0002][.0000.0037.0002][.42F4.0020.0010.0002][.0000.0037.0002] # +3070 309E ; [.42F4.0020.0011.0001][.0000.0037.0002][.42F4.0020.0010.0002][.0000.0037.0002] # +306F 3099 309E ; [.42F4.0020.0011.0001][.0000.0037.0002][.42F4.0020.0010.0002][.0000.0037.0002] # +30D1 30FD ; [.42F4.0020.0011.0002][.0000.0038.0002][.42F4.0020.0010.0002] # +30CF 309A 30FD ; [.42F4.0020.0011.0002][.0000.0038.0002][.42F4.0020.0010.0002] # +FF8A FF9F 30FD ; [.42F4.0020.0011.0002][.0000.0038.0002][.42F4.0020.0010.0002] # +3071 309D ; [.42F4.0020.0011.0001][.0000.0038.0002][.42F4.0020.0010.0002] # +306F 309A 309D ; [.42F4.0020.0011.0001][.0000.0038.0002][.42F4.0020.0010.0002] # +30D1 30FE ; [.42F4.0020.0011.0002][.0000.0038.0002][.42F4.0020.0010.0002][.0000.0037.0002] # +30CF 309A 30FE ; [.42F4.0020.0011.0002][.0000.0038.0002][.42F4.0020.0010.0002][.0000.0037.0002] # +FF8A FF9F 30FE ; [.42F4.0020.0011.0002][.0000.0038.0002][.42F4.0020.0010.0002][.0000.0037.0002] # +3071 309E ; [.42F4.0020.0011.0001][.0000.0038.0002][.42F4.0020.0010.0002][.0000.0037.0002] # +306F 309A 309E ; [.42F4.0020.0011.0001][.0000.0038.0002][.42F4.0020.0010.0002][.0000.0037.0002] # +30D2 30FD ; [.42F5.0020.0011.0002][.42F5.0020.0010.0002] # +FF8B 30FD ; [.42F5.0020.0011.0002][.42F5.0020.0010.0002] # +3072 309D ; [.42F5.0020.0011.0001][.42F5.0020.0010.0002] # +30D2 30FE ; [.42F5.0020.0011.0002][.42F5.0020.0010.0002][.0000.0037.0002] # +FF8B 30FE ; [.42F5.0020.0011.0002][.42F5.0020.0010.0002][.0000.0037.0002] # +3072 309E ; [.42F5.0020.0011.0001][.42F5.0020.0010.0002][.0000.0037.0002] # +30D3 30FD ; [.42F5.0020.0011.0002][.0000.0037.0002][.42F5.0020.0010.0002] # +30D2 3099 30FD ; [.42F5.0020.0011.0002][.0000.0037.0002][.42F5.0020.0010.0002] # +FF8B FF9E 30FD ; [.42F5.0020.0011.0002][.0000.0037.0002][.42F5.0020.0010.0002] # +3073 309D ; [.42F5.0020.0011.0001][.0000.0037.0002][.42F5.0020.0010.0002] # +3072 3099 309D ; [.42F5.0020.0011.0001][.0000.0037.0002][.42F5.0020.0010.0002] # +30D3 30FE ; [.42F5.0020.0011.0002][.0000.0037.0002][.42F5.0020.0010.0002][.0000.0037.0002] # +30D2 3099 30FE ; [.42F5.0020.0011.0002][.0000.0037.0002][.42F5.0020.0010.0002][.0000.0037.0002] # +FF8B FF9E 30FE ; [.42F5.0020.0011.0002][.0000.0037.0002][.42F5.0020.0010.0002][.0000.0037.0002] # +3073 309E ; [.42F5.0020.0011.0001][.0000.0037.0002][.42F5.0020.0010.0002][.0000.0037.0002] # +3072 3099 309E ; [.42F5.0020.0011.0001][.0000.0037.0002][.42F5.0020.0010.0002][.0000.0037.0002] # +30D4 30FD ; [.42F5.0020.0011.0002][.0000.0038.0002][.42F5.0020.0010.0002] # +30D2 309A 30FD ; [.42F5.0020.0011.0002][.0000.0038.0002][.42F5.0020.0010.0002] # +FF8B FF9F 30FD ; [.42F5.0020.0011.0002][.0000.0038.0002][.42F5.0020.0010.0002] # +3074 309D ; [.42F5.0020.0011.0001][.0000.0038.0002][.42F5.0020.0010.0002] # +3072 309A 309D ; [.42F5.0020.0011.0001][.0000.0038.0002][.42F5.0020.0010.0002] # +30D4 30FE ; [.42F5.0020.0011.0002][.0000.0038.0002][.42F5.0020.0010.0002][.0000.0037.0002] # +30D2 309A 30FE ; [.42F5.0020.0011.0002][.0000.0038.0002][.42F5.0020.0010.0002][.0000.0037.0002] # +FF8B FF9F 30FE ; [.42F5.0020.0011.0002][.0000.0038.0002][.42F5.0020.0010.0002][.0000.0037.0002] # +3074 309E ; [.42F5.0020.0011.0001][.0000.0038.0002][.42F5.0020.0010.0002][.0000.0037.0002] # +3072 309A 309E ; [.42F5.0020.0011.0001][.0000.0038.0002][.42F5.0020.0010.0002][.0000.0037.0002] # +30D5 30FD ; [.42F6.0020.0011.0002][.42F6.0020.0010.0002] # +FF8C 30FD ; [.42F6.0020.0011.0002][.42F6.0020.0010.0002] # +3075 309D ; [.42F6.0020.0011.0001][.42F6.0020.0010.0002] # +30D5 30FE ; [.42F6.0020.0011.0002][.42F6.0020.0010.0002][.0000.0037.0002] # +FF8C 30FE ; [.42F6.0020.0011.0002][.42F6.0020.0010.0002][.0000.0037.0002] # +3075 309E ; [.42F6.0020.0011.0001][.42F6.0020.0010.0002][.0000.0037.0002] # +30D6 30FD ; [.42F6.0020.0011.0002][.0000.0037.0002][.42F6.0020.0010.0002] # +30D5 3099 30FD ; [.42F6.0020.0011.0002][.0000.0037.0002][.42F6.0020.0010.0002] # +FF8C FF9E 30FD ; [.42F6.0020.0011.0002][.0000.0037.0002][.42F6.0020.0010.0002] # +3076 309D ; [.42F6.0020.0011.0001][.0000.0037.0002][.42F6.0020.0010.0002] # +3075 3099 309D ; [.42F6.0020.0011.0001][.0000.0037.0002][.42F6.0020.0010.0002] # +30D6 30FE ; [.42F6.0020.0011.0002][.0000.0037.0002][.42F6.0020.0010.0002][.0000.0037.0002] # +30D5 3099 30FE ; [.42F6.0020.0011.0002][.0000.0037.0002][.42F6.0020.0010.0002][.0000.0037.0002] # +FF8C FF9E 30FE ; [.42F6.0020.0011.0002][.0000.0037.0002][.42F6.0020.0010.0002][.0000.0037.0002] # +3076 309E ; [.42F6.0020.0011.0001][.0000.0037.0002][.42F6.0020.0010.0002][.0000.0037.0002] # +3075 3099 309E ; [.42F6.0020.0011.0001][.0000.0037.0002][.42F6.0020.0010.0002][.0000.0037.0002] # +30D7 30FD ; [.42F6.0020.0011.0002][.0000.0038.0002][.42F6.0020.0010.0002] # +30D5 309A 30FD ; [.42F6.0020.0011.0002][.0000.0038.0002][.42F6.0020.0010.0002] # +FF8C FF9F 30FD ; [.42F6.0020.0011.0002][.0000.0038.0002][.42F6.0020.0010.0002] # +3077 309D ; [.42F6.0020.0011.0001][.0000.0038.0002][.42F6.0020.0010.0002] # +3075 309A 309D ; [.42F6.0020.0011.0001][.0000.0038.0002][.42F6.0020.0010.0002] # +30D7 30FE ; [.42F6.0020.0011.0002][.0000.0038.0002][.42F6.0020.0010.0002][.0000.0037.0002] # +30D5 309A 30FE ; [.42F6.0020.0011.0002][.0000.0038.0002][.42F6.0020.0010.0002][.0000.0037.0002] # +FF8C FF9F 30FE ; [.42F6.0020.0011.0002][.0000.0038.0002][.42F6.0020.0010.0002][.0000.0037.0002] # +3077 309E ; [.42F6.0020.0011.0001][.0000.0038.0002][.42F6.0020.0010.0002][.0000.0037.0002] # +3075 309A 309E ; [.42F6.0020.0011.0001][.0000.0038.0002][.42F6.0020.0010.0002][.0000.0037.0002] # +30D8 30FD ; [.42F7.0020.0011.0002][.42F7.0020.0010.0002] # +FF8D 30FD ; [.42F7.0020.0011.0002][.42F7.0020.0010.0002] # +3078 309D ; [.42F7.0020.0011.0001][.42F7.0020.0010.0002] # +30D8 30FE ; [.42F7.0020.0011.0002][.42F7.0020.0010.0002][.0000.0037.0002] # +FF8D 30FE ; [.42F7.0020.0011.0002][.42F7.0020.0010.0002][.0000.0037.0002] # +3078 309E ; [.42F7.0020.0011.0001][.42F7.0020.0010.0002][.0000.0037.0002] # +30D9 30FD ; [.42F7.0020.0011.0002][.0000.0037.0002][.42F7.0020.0010.0002] # +30D8 3099 30FD ; [.42F7.0020.0011.0002][.0000.0037.0002][.42F7.0020.0010.0002] # +FF8D FF9E 30FD ; [.42F7.0020.0011.0002][.0000.0037.0002][.42F7.0020.0010.0002] # +3079 309D ; [.42F7.0020.0011.0001][.0000.0037.0002][.42F7.0020.0010.0002] # +3078 3099 309D ; [.42F7.0020.0011.0001][.0000.0037.0002][.42F7.0020.0010.0002] # +30D9 30FE ; [.42F7.0020.0011.0002][.0000.0037.0002][.42F7.0020.0010.0002][.0000.0037.0002] # +30D8 3099 30FE ; [.42F7.0020.0011.0002][.0000.0037.0002][.42F7.0020.0010.0002][.0000.0037.0002] # +FF8D FF9E 30FE ; [.42F7.0020.0011.0002][.0000.0037.0002][.42F7.0020.0010.0002][.0000.0037.0002] # +3079 309E ; [.42F7.0020.0011.0001][.0000.0037.0002][.42F7.0020.0010.0002][.0000.0037.0002] # +3078 3099 309E ; [.42F7.0020.0011.0001][.0000.0037.0002][.42F7.0020.0010.0002][.0000.0037.0002] # +30DA 30FD ; [.42F7.0020.0011.0002][.0000.0038.0002][.42F7.0020.0010.0002] # +30D8 309A 30FD ; [.42F7.0020.0011.0002][.0000.0038.0002][.42F7.0020.0010.0002] # +FF8D FF9F 30FD ; [.42F7.0020.0011.0002][.0000.0038.0002][.42F7.0020.0010.0002] # +307A 309D ; [.42F7.0020.0011.0001][.0000.0038.0002][.42F7.0020.0010.0002] # +3078 309A 309D ; [.42F7.0020.0011.0001][.0000.0038.0002][.42F7.0020.0010.0002] # +30DA 30FE ; [.42F7.0020.0011.0002][.0000.0038.0002][.42F7.0020.0010.0002][.0000.0037.0002] # +30D8 309A 30FE ; [.42F7.0020.0011.0002][.0000.0038.0002][.42F7.0020.0010.0002][.0000.0037.0002] # +FF8D FF9F 30FE ; [.42F7.0020.0011.0002][.0000.0038.0002][.42F7.0020.0010.0002][.0000.0037.0002] # +307A 309E ; [.42F7.0020.0011.0001][.0000.0038.0002][.42F7.0020.0010.0002][.0000.0037.0002] # +3078 309A 309E ; [.42F7.0020.0011.0001][.0000.0038.0002][.42F7.0020.0010.0002][.0000.0037.0002] # +30DB 30FD ; [.42F8.0020.0011.0002][.42F8.0020.0010.0002] # +FF8E 30FD ; [.42F8.0020.0011.0002][.42F8.0020.0010.0002] # +307B 309D ; [.42F8.0020.0011.0001][.42F8.0020.0010.0002] # +30DB 30FE ; [.42F8.0020.0011.0002][.42F8.0020.0010.0002][.0000.0037.0002] # +FF8E 30FE ; [.42F8.0020.0011.0002][.42F8.0020.0010.0002][.0000.0037.0002] # +307B 309E ; [.42F8.0020.0011.0001][.42F8.0020.0010.0002][.0000.0037.0002] # +30DC 30FD ; [.42F8.0020.0011.0002][.0000.0037.0002][.42F8.0020.0010.0002] # +30DB 3099 30FD ; [.42F8.0020.0011.0002][.0000.0037.0002][.42F8.0020.0010.0002] # +FF8E FF9E 30FD ; [.42F8.0020.0011.0002][.0000.0037.0002][.42F8.0020.0010.0002] # +307C 309D ; [.42F8.0020.0011.0001][.0000.0037.0002][.42F8.0020.0010.0002] # +307B 3099 309D ; [.42F8.0020.0011.0001][.0000.0037.0002][.42F8.0020.0010.0002] # +30DC 30FE ; [.42F8.0020.0011.0002][.0000.0037.0002][.42F8.0020.0010.0002][.0000.0037.0002] # +30DB 3099 30FE ; [.42F8.0020.0011.0002][.0000.0037.0002][.42F8.0020.0010.0002][.0000.0037.0002] # +FF8E FF9E 30FE ; [.42F8.0020.0011.0002][.0000.0037.0002][.42F8.0020.0010.0002][.0000.0037.0002] # +307C 309E ; [.42F8.0020.0011.0001][.0000.0037.0002][.42F8.0020.0010.0002][.0000.0037.0002] # +307B 3099 309E ; [.42F8.0020.0011.0001][.0000.0037.0002][.42F8.0020.0010.0002][.0000.0037.0002] # +30DD 30FD ; [.42F8.0020.0011.0002][.0000.0038.0002][.42F8.0020.0010.0002] # +30DB 309A 30FD ; [.42F8.0020.0011.0002][.0000.0038.0002][.42F8.0020.0010.0002] # +FF8E FF9F 30FD ; [.42F8.0020.0011.0002][.0000.0038.0002][.42F8.0020.0010.0002] # +307D 309D ; [.42F8.0020.0011.0001][.0000.0038.0002][.42F8.0020.0010.0002] # +307B 309A 309D ; [.42F8.0020.0011.0001][.0000.0038.0002][.42F8.0020.0010.0002] # +30DD 30FE ; [.42F8.0020.0011.0002][.0000.0038.0002][.42F8.0020.0010.0002][.0000.0037.0002] # +30DB 309A 30FE ; [.42F8.0020.0011.0002][.0000.0038.0002][.42F8.0020.0010.0002][.0000.0037.0002] # +FF8E FF9F 30FE ; [.42F8.0020.0011.0002][.0000.0038.0002][.42F8.0020.0010.0002][.0000.0037.0002] # +307D 309E ; [.42F8.0020.0011.0001][.0000.0038.0002][.42F8.0020.0010.0002][.0000.0037.0002] # +307B 309A 309E ; [.42F8.0020.0011.0001][.0000.0038.0002][.42F8.0020.0010.0002][.0000.0037.0002] # +30DE 30FD ; [.42F9.0020.0011.0002][.42F9.0020.0010.0002] # +FF8F 30FD ; [.42F9.0020.0011.0002][.42F9.0020.0010.0002] # +307E 309D ; [.42F9.0020.0011.0001][.42F9.0020.0010.0002] # +30DF 30FD ; [.42FA.0020.0011.0002][.42FA.0020.0010.0002] # +FF90 30FD ; [.42FA.0020.0011.0002][.42FA.0020.0010.0002] # +307F 309D ; [.42FA.0020.0011.0001][.42FA.0020.0010.0002] # +30E0 30FD ; [.42FB.0020.0011.0002][.42FB.0020.0010.0002] # +FF91 30FD ; [.42FB.0020.0011.0002][.42FB.0020.0010.0002] # +3080 309D ; [.42FB.0020.0011.0001][.42FB.0020.0010.0002] # +30E1 30FD ; [.42FC.0020.0011.0002][.42FC.0020.0010.0002] # +FF92 30FD ; [.42FC.0020.0011.0002][.42FC.0020.0010.0002] # +3081 309D ; [.42FC.0020.0011.0001][.42FC.0020.0010.0002] # +30E2 30FD ; [.42FD.0020.0011.0002][.42FD.0020.0010.0002] # +FF93 30FD ; [.42FD.0020.0011.0002][.42FD.0020.0010.0002] # +3082 309D ; [.42FD.0020.0011.0001][.42FD.0020.0010.0002] # +30E3 30FD ; [.42FE.0020.000F.0002][.42FE.0020.0010.0002] # +FF6C 30FD ; [.42FE.0020.000F.0002][.42FE.0020.0010.0002] # +3083 309D ; [.42FE.0020.000F.0001][.42FE.0020.0010.0002] # +30E4 30FD ; [.42FE.0020.0011.0002][.42FE.0020.0010.0002] # +FF94 30FD ; [.42FE.0020.0011.0002][.42FE.0020.0010.0002] # +3084 309D ; [.42FE.0020.0011.0001][.42FE.0020.0010.0002] # +30E5 30FD ; [.42FF.0020.000F.0002][.42FF.0020.0010.0002] # +FF6D 30FD ; [.42FF.0020.000F.0002][.42FF.0020.0010.0002] # +3085 309D ; [.42FF.0020.000F.0001][.42FF.0020.0010.0002] # +30E6 30FD ; [.42FF.0020.0011.0002][.42FF.0020.0010.0002] # +FF95 30FD ; [.42FF.0020.0011.0002][.42FF.0020.0010.0002] # +3086 309D ; [.42FF.0020.0011.0001][.42FF.0020.0010.0002] # +30E7 30FD ; [.4300.0020.000F.0002][.4300.0020.0010.0002] # +FF6E 30FD ; [.4300.0020.000F.0002][.4300.0020.0010.0002] # +3087 309D ; [.4300.0020.000F.0001][.4300.0020.0010.0002] # +30E8 30FD ; [.4300.0020.0011.0002][.4300.0020.0010.0002] # +FF96 30FD ; [.4300.0020.0011.0002][.4300.0020.0010.0002] # +3088 309D ; [.4300.0020.0011.0001][.4300.0020.0010.0002] # +30E9 30FD ; [.4301.0020.0011.0002][.4301.0020.0010.0002] # +FF97 30FD ; [.4301.0020.0011.0002][.4301.0020.0010.0002] # +3089 309D ; [.4301.0020.0011.0001][.4301.0020.0010.0002] # +30EA 30FD ; [.4302.0020.0011.0002][.4302.0020.0010.0002] # +FF98 30FD ; [.4302.0020.0011.0002][.4302.0020.0010.0002] # +308A 309D ; [.4302.0020.0011.0001][.4302.0020.0010.0002] # +30EB 30FD ; [.4303.0020.0011.0002][.4303.0020.0010.0002] # +FF99 30FD ; [.4303.0020.0011.0002][.4303.0020.0010.0002] # +308B 309D ; [.4303.0020.0011.0001][.4303.0020.0010.0002] # +30EC 30FD ; [.4304.0020.0011.0002][.4304.0020.0010.0002] # +FF9A 30FD ; [.4304.0020.0011.0002][.4304.0020.0010.0002] # +308C 309D ; [.4304.0020.0011.0001][.4304.0020.0010.0002] # +30ED 30FD ; [.4305.0020.0011.0002][.4305.0020.0010.0002] # +FF9B 30FD ; [.4305.0020.0011.0002][.4305.0020.0010.0002] # +308D 309D ; [.4305.0020.0011.0001][.4305.0020.0010.0002] # +30EE 30FD ; [.4306.0020.000F.0002][.4306.0020.0010.0002] # +308E 309D ; [.4306.0020.000F.0001][.4306.0020.0010.0002] # +30EE 30FE ; [.4306.0020.000F.0002][.4306.0020.0010.0002][.0000.0037.0002] # +308E 309E ; [.4306.0020.000F.0001][.4306.0020.0010.0002][.0000.0037.0002] # +30EF 30FD ; [.4306.0020.0011.0002][.4306.0020.0010.0002] # +FF9C 30FD ; [.4306.0020.0011.0002][.4306.0020.0010.0002] # +308F 309D ; [.4306.0020.0011.0001][.4306.0020.0010.0002] # +30EF 30FE ; [.4306.0020.0011.0002][.4306.0020.0010.0002][.0000.0037.0002] # +FF9C 30FE ; [.4306.0020.0011.0002][.4306.0020.0010.0002][.0000.0037.0002] # +308F 309E ; [.4306.0020.0011.0001][.4306.0020.0010.0002][.0000.0037.0002] # +30F0 30FD ; [.4307.0020.0011.0002][.4307.0020.0010.0002] # +3090 309D ; [.4307.0020.0011.0001][.4307.0020.0010.0002] # +30F0 30FE ; [.4307.0020.0011.0002][.4307.0020.0010.0002][.0000.0037.0002] # +3090 309E ; [.4307.0020.0011.0001][.4307.0020.0010.0002][.0000.0037.0002] # +30F1 30FD ; [.4308.0020.0011.0002][.4308.0020.0010.0002] # +3091 309D ; [.4308.0020.0011.0001][.4308.0020.0010.0002] # +30F1 30FE ; [.4308.0020.0011.0002][.4308.0020.0010.0002][.0000.0037.0002] # +3091 309E ; [.4308.0020.0011.0001][.4308.0020.0010.0002][.0000.0037.0002] # +30F2 30FD ; [.4309.0020.0011.0002][.4309.0020.0010.0002] # +FF66 30FD ; [.4309.0020.0011.0002][.4309.0020.0010.0002] # +3092 309D ; [.4309.0020.0011.0001][.4309.0020.0010.0002] # +30F2 30FE ; [.4309.0020.0011.0002][.4309.0020.0010.0002][.0000.0037.0002] # +FF66 30FE ; [.4309.0020.0011.0002][.4309.0020.0010.0002][.0000.0037.0002] # +3092 309E ; [.4309.0020.0011.0001][.4309.0020.0010.0002][.0000.0037.0002] # +30F3 30FD ; [.430A.0020.0011.0002][.430A.0020.0010.0002] # +FF9D 30FD ; [.430A.0020.0011.0002][.430A.0020.0010.0002] # +3093 309D ; [.430A.0020.0011.0001][.430A.0020.0010.0002] # +30F4 30FD ; [.42DC.0020.0011.0002][.0000.0037.0002][.42DC.0020.0010.0002] # +30A6 3099 30FD ; [.42DC.0020.0011.0002][.0000.0037.0002][.42DC.0020.0010.0002] # +FF73 FF9E 30FD ; [.42DC.0020.0011.0002][.0000.0037.0002][.42DC.0020.0010.0002] # +3094 309D ; [.42DC.0020.0011.0001][.0000.0037.0002][.42DC.0020.0010.0002] # +3046 3099 309D ; [.42DC.0020.0011.0001][.0000.0037.0002][.42DC.0020.0010.0002] # +30F4 30FE ; [.42DC.0020.0011.0002][.0000.0037.0002][.42DC.0020.0010.0002][.0000.0037.0002] # +30A6 3099 30FE ; [.42DC.0020.0011.0002][.0000.0037.0002][.42DC.0020.0010.0002][.0000.0037.0002] # +FF73 FF9E 30FE ; [.42DC.0020.0011.0002][.0000.0037.0002][.42DC.0020.0010.0002][.0000.0037.0002] # +3094 309E ; [.42DC.0020.0011.0001][.0000.0037.0002][.42DC.0020.0010.0002][.0000.0037.0002] # +3046 3099 309E ; [.42DC.0020.0011.0001][.0000.0037.0002][.42DC.0020.0010.0002][.0000.0037.0002] # +30F5 30FD ; [.42E0.0020.000F.0002][.42E0.0020.0010.0002] # +3095 309D ; [.42E0.0020.000F.0001][.42E0.0020.0010.0002] # +30F5 30FE ; [.42E0.0020.000F.0002][.42E0.0020.0010.0002][.0000.0037.0002] # +3095 309E ; [.42E0.0020.000F.0001][.42E0.0020.0010.0002][.0000.0037.0002] # +30F6 30FD ; [.42E3.0020.000F.0002][.42E3.0020.0010.0002] # +3096 309D ; [.42E3.0020.000F.0001][.42E3.0020.0010.0002] # +30F6 30FE ; [.42E3.0020.000F.0002][.42E3.0020.0010.0002][.0000.0037.0002] # +3096 309E ; [.42E3.0020.000F.0001][.42E3.0020.0010.0002][.0000.0037.0002] # +30F7 30FD ; [.4306.0020.0011.0002][.0000.0037.0002][.4306.0020.0010.0002] # +30EF 3099 30FD ; [.4306.0020.0011.0002][.0000.0037.0002][.4306.0020.0010.0002] # +FF9C FF9E 30FD ; [.4306.0020.0011.0002][.0000.0037.0002][.4306.0020.0010.0002] # +30F7 30FE ; [.4306.0020.0011.0002][.0000.0037.0002][.4306.0020.0010.0002][.0000.0037.0002] # +30EF 3099 30FE ; [.4306.0020.0011.0002][.0000.0037.0002][.4306.0020.0010.0002][.0000.0037.0002] # +FF9C FF9E 30FE ; [.4306.0020.0011.0002][.0000.0037.0002][.4306.0020.0010.0002][.0000.0037.0002] # +30F8 30FD ; [.4307.0020.0011.0002][.0000.0037.0002][.4307.0020.0010.0002] # +30F0 3099 30FD ; [.4307.0020.0011.0002][.0000.0037.0002][.4307.0020.0010.0002] # +30F8 30FE ; [.4307.0020.0011.0002][.0000.0037.0002][.4307.0020.0010.0002][.0000.0037.0002] # +30F0 3099 30FE ; [.4307.0020.0011.0002][.0000.0037.0002][.4307.0020.0010.0002][.0000.0037.0002] # +30F9 30FD ; [.4308.0020.0011.0002][.0000.0037.0002][.4308.0020.0010.0002] # +30F1 3099 30FD ; [.4308.0020.0011.0002][.0000.0037.0002][.4308.0020.0010.0002] # +30F9 30FE ; [.4308.0020.0011.0002][.0000.0037.0002][.4308.0020.0010.0002][.0000.0037.0002] # +30F1 3099 30FE ; [.4308.0020.0011.0002][.0000.0037.0002][.4308.0020.0010.0002][.0000.0037.0002] # +30FA 30FD ; [.4309.0020.0011.0002][.0000.0037.0002][.4309.0020.0010.0002] # +30F2 3099 30FD ; [.4309.0020.0011.0002][.0000.0037.0002][.4309.0020.0010.0002] # +FF66 FF9E 30FD ; [.4309.0020.0011.0002][.0000.0037.0002][.4309.0020.0010.0002] # +30FA 30FE ; [.4309.0020.0011.0002][.0000.0037.0002][.4309.0020.0010.0002][.0000.0037.0002] # +30F2 3099 30FE ; [.4309.0020.0011.0002][.0000.0037.0002][.4309.0020.0010.0002][.0000.0037.0002] # +FF66 FF9E 30FE ; [.4309.0020.0011.0002][.0000.0037.0002][.4309.0020.0010.0002][.0000.0037.0002] # +31F0 30FD ; [.42E2.0020.000F][.42E2.0020.0010.0002] # +31F0 30FE ; [.42E2.0020.000F][.42E2.0020.0010.0002][.0000.0037.0002] # +31F1 30FD ; [.42E6.0020.000F][.42E6.0020.0010.0002] # +31F1 30FE ; [.42E6.0020.000F][.42E6.0020.0010.0002][.0000.0037.0002] # +31F2 30FD ; [.42E7.0020.000F][.42E7.0020.0010.0002] # +31F2 30FE ; [.42E7.0020.000F][.42E7.0020.0010.0002][.0000.0037.0002] # +31F3 30FD ; [.42EE.0020.000F][.42EE.0020.0010.0002] # +31F3 30FE ; [.42EE.0020.000F][.42EE.0020.0010.0002][.0000.0037.0002] # +31F4 30FD ; [.42F1.0020.000F][.42F1.0020.0010.0002] # +31F5 30FD ; [.42F4.0020.000F][.42F4.0020.0010.0002] # +31F5 30FE ; [.42F4.0020.000F][.42F4.0020.0010.0002][.0000.0037.0002] # +31F6 30FD ; [.42F5.0020.000F][.42F5.0020.0010.0002] # +31F6 30FE ; [.42F5.0020.000F][.42F5.0020.0010.0002][.0000.0037.0002] # +31F7 30FD ; [.42F6.0020.000F][.42F6.0020.0010.0002] # +31F7 30FE ; [.42F6.0020.000F][.42F6.0020.0010.0002][.0000.0037.0002] # +31F8 30FD ; [.42F7.0020.000F][.42F7.0020.0010.0002] # +31F8 30FE ; [.42F7.0020.000F][.42F7.0020.0010.0002][.0000.0037.0002] # +31F9 30FD ; [.42F8.0020.000F][.42F8.0020.0010.0002] # +31F9 30FE ; [.42F8.0020.000F][.42F8.0020.0010.0002][.0000.0037.0002] # +31FA 30FD ; [.42FB.0020.000F][.42FB.0020.0010.0002] # +31FB 30FD ; [.4301.0020.000F][.4301.0020.0010.0002] # +31FC 30FD ; [.4302.0020.000F][.4302.0020.0010.0002] # +31FD 30FD ; [.4303.0020.000F][.4303.0020.0010.0002] # +31FE 30FD ; [.4304.0020.000F][.4304.0020.0010.0002] # +31FF 30FD ; [.4305.0020.000F][.4305.0020.0010.0002] # F967 ; [.8961.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F967 FA70 ; [.89AD.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA70 F905 ; [.828D.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F905 diff --git a/gnu/usr.bin/perl/cpan/Unicode-Collate/Collate/Locale/kk.pl b/gnu/usr.bin/perl/cpan/Unicode-Collate/Collate/Locale/kk.pl index 62d172d6e08..49ab3303dbd 100644 --- a/gnu/usr.bin/perl/cpan/Unicode-Collate/Collate/Locale/kk.pl +++ b/gnu/usr.bin/perl/cpan/Unicode-Collate/Collate/Locale/kk.pl @@ -1,16 +1,16 @@ +{ - locale_version => 1.27, - entry => <<'ENTRY', # for DUCET v10.0.0 -0451 ; [.20C1.0020.0002] # CYRILLIC SMALL LETTER IO -0435 0308 ; [.20C1.0020.0002] # CYRILLIC SMALL LETTER IO -0401 ; [.20C1.0020.0008] # CYRILLIC CAPITAL LETTER IO -0415 0308 ; [.20C1.0020.0008] # CYRILLIC CAPITAL LETTER IO -04AF ; [.218C.0020.0002] # CYRILLIC SMALL LETTER STRAIGHT U -04AE ; [.218C.0020.0008] # CYRILLIC CAPITAL LETTER STRAIGHT U -0456 ; [.21FD.0020.0002] # CYRILLIC SMALL LETTER BYELORUSSIAN-UKRAINIAN I -0406 ; [.21FD.0020.0008] # CYRILLIC CAPITAL LETTER BYELORUSSIAN-UKRAINIAN I -0457 ; [.21FD.0020.0002][.0000.002B.0002] # CYRILLIC SMALL LETTER YI -A676 ; [.21FD.0020.0004][.0000.002B.0004] # COMBINING CYRILLIC LETTER YI -0407 ; [.21FD.0020.0008][.0000.002B.0002] # CYRILLIC CAPITAL LETTER YI + locale_version => 1.31, + entry => <<'ENTRY', # for DUCET v13.0.0 +0451 ; [.23C0.0020.0002] # CYRILLIC SMALL LETTER IO +0435 0308 ; [.23C0.0020.0002] # CYRILLIC SMALL LETTER IO +0401 ; [.23C0.0020.0008] # CYRILLIC CAPITAL LETTER IO +0415 0308 ; [.23C0.0020.0008] # CYRILLIC CAPITAL LETTER IO +04AF ; [.248B.0020.0002] # CYRILLIC SMALL LETTER STRAIGHT U +04AE ; [.248B.0020.0008] # CYRILLIC CAPITAL LETTER STRAIGHT U +0456 ; [.24FC.0020.0002] # CYRILLIC SMALL LETTER BYELORUSSIAN-UKRAINIAN I +0406 ; [.24FC.0020.0008] # CYRILLIC CAPITAL LETTER BYELORUSSIAN-UKRAINIAN I +0457 ; [.24FC.0020.0002][.0000.002B.0002] # CYRILLIC SMALL LETTER YI +A676 ; [.24FC.0020.0004][.0000.002B.0004] # COMBINING CYRILLIC LETTER YI +0407 ; [.24FC.0020.0008][.0000.002B.0002] # CYRILLIC CAPITAL LETTER YI ENTRY }; diff --git a/gnu/usr.bin/perl/cpan/Unicode-Collate/Collate/Locale/kl.pl b/gnu/usr.bin/perl/cpan/Unicode-Collate/Collate/Locale/kl.pl index 9e38ff3e960..be88f6e6d1a 100644 --- a/gnu/usr.bin/perl/cpan/Unicode-Collate/Collate/Locale/kl.pl +++ b/gnu/usr.bin/perl/cpan/Unicode-Collate/Collate/Locale/kl.pl @@ -1,75 +1,75 @@ +{ - locale_version => 1.27, - entry => <<'ENTRY', # for DUCET v10.0.0 -0111 ; [.1CF5.0021.0002] # LATIN SMALL LETTER D WITH STROKE -0064 0335 ; [.1CF5.0021.0002] # LATIN SMALL LETTER D WITH STROKE -0110 ; [.1CF5.0021.0008] # LATIN CAPITAL LETTER D WITH STROKE -0044 0335 ; [.1CF5.0021.0008] # LATIN CAPITAL LETTER D WITH STROKE -00F0 ; [.1CF5.0022.0002] # LATIN SMALL LETTER ETH -1DD9 ; [.1CF5.0022.0002] # COMBINING LATIN SMALL LETTER ETH -00D0 ; [.1CF5.0022.0008] # LATIN CAPITAL LETTER ETH -0138 ; [.1E87.0021.0002] # LATIN SMALL LETTER KRA -004B 0027 ; [.1E87.0021.0008] # -00FE ; [.1EFB.0020.0003][.1D7E.0020.0003] # LATIN SMALL LETTER THORN -00DE ; [.1EFB.0020.0009][.1D7E.0020.0009] # LATIN CAPITAL LETTER THORN -00FC ; [.1F71.0021.0002] # LATIN SMALL LETTER U WITH DIAERESIS -0075 0308 ; [.1F71.0021.0002] # LATIN SMALL LETTER U WITH DIAERESIS -00DC ; [.1F71.0021.0008] # LATIN CAPITAL LETTER U WITH DIAERESIS -0055 0308 ; [.1F71.0021.0008] # LATIN CAPITAL LETTER U WITH DIAERESIS -01DC ; [.1F71.0021.0002][.0000.0025.0002] # LATIN SMALL LETTER U WITH DIAERESIS AND GRAVE -01DB ; [.1F71.0021.0008][.0000.0025.0002] # LATIN CAPITAL LETTER U WITH DIAERESIS AND GRAVE -01D8 ; [.1F71.0021.0002][.0000.0024.0002] # LATIN SMALL LETTER U WITH DIAERESIS AND ACUTE -01D7 ; [.1F71.0021.0008][.0000.0024.0002] # LATIN CAPITAL LETTER U WITH DIAERESIS AND ACUTE -01D6 ; [.1F71.0021.0002][.0000.0032.0002] # LATIN SMALL LETTER U WITH DIAERESIS AND MACRON -01D5 ; [.1F71.0021.0008][.0000.0032.0002] # LATIN CAPITAL LETTER U WITH DIAERESIS AND MACRON -01DA ; [.1F71.0021.0002][.0000.0028.0002] # LATIN SMALL LETTER U WITH DIAERESIS AND CARON -01D9 ; [.1F71.0021.0008][.0000.0028.0002] # LATIN CAPITAL LETTER U WITH DIAERESIS AND CARON -0171 ; [.1F71.0022.0002] # LATIN SMALL LETTER U WITH DOUBLE ACUTE -0075 030B ; [.1F71.0022.0002] # LATIN SMALL LETTER U WITH DOUBLE ACUTE -0170 ; [.1F71.0022.0008] # LATIN CAPITAL LETTER U WITH DOUBLE ACUTE -0055 030B ; [.1F71.0022.0008] # LATIN CAPITAL LETTER U WITH DOUBLE ACUTE -00E6 ; [.1FFC.0020.0002] # LATIN SMALL LETTER AE -1DD4 ; [.1FFC.0020.0002] # COMBINING LATIN SMALL LETTER AE -00C6 ; [.1FFC.0020.0008] # LATIN CAPITAL LETTER AE -1D2D ; [.1FFC.0020.0014] # MODIFIER LETTER CAPITAL AE -01FD ; [.1FFC.0020.0002][.0000.0024.0002] # LATIN SMALL LETTER AE WITH ACUTE -01FC ; [.1FFC.0020.0008][.0000.0024.0002] # LATIN CAPITAL LETTER AE WITH ACUTE -01E3 ; [.1FFC.0020.0002][.0000.0032.0002] # LATIN SMALL LETTER AE WITH MACRON -01E2 ; [.1FFC.0020.0008][.0000.0032.0002] # LATIN CAPITAL LETTER AE WITH MACRON -00E4 ; [.1FFC.0021.0002] # LATIN SMALL LETTER A WITH DIAERESIS -0061 0308 ; [.1FFC.0021.0002] # LATIN SMALL LETTER A WITH DIAERESIS -00C4 ; [.1FFC.0021.0008] # LATIN CAPITAL LETTER A WITH DIAERESIS -0041 0308 ; [.1FFC.0021.0008] # LATIN CAPITAL LETTER A WITH DIAERESIS -01DF ; [.1FFC.0021.0002][.0000.0032.0002] # LATIN SMALL LETTER A WITH DIAERESIS AND MACRON -01DE ; [.1FFC.0021.0008][.0000.0032.0002] # LATIN CAPITAL LETTER A WITH DIAERESIS AND MACRON -0119 ; [.1FFC.0022.0002] # LATIN SMALL LETTER E WITH OGONEK -0065 0328 ; [.1FFC.0022.0002] # LATIN SMALL LETTER E WITH OGONEK -0118 ; [.1FFC.0022.0008] # LATIN CAPITAL LETTER E WITH OGONEK -0045 0328 ; [.1FFC.0022.0008] # LATIN CAPITAL LETTER E WITH OGONEK -00F8 ; [.1FFD.0020.0002] # LATIN SMALL LETTER O WITH STROKE -006F 0338 ; [.1FFD.0020.0002] # LATIN SMALL LETTER O WITH STROKE -00D8 ; [.1FFD.0020.0008] # LATIN CAPITAL LETTER O WITH STROKE -004F 0338 ; [.1FFD.0020.0008] # LATIN CAPITAL LETTER O WITH STROKE -01FF ; [.1FFD.0020.0002][.0000.0024.0002] # LATIN SMALL LETTER O WITH STROKE AND ACUTE -01FE ; [.1FFD.0020.0008][.0000.0024.0002] # LATIN CAPITAL LETTER O WITH STROKE AND ACUTE -00F6 ; [.1FFD.0021.0002] # LATIN SMALL LETTER O WITH DIAERESIS -006F 0308 ; [.1FFD.0021.0002] # LATIN SMALL LETTER O WITH DIAERESIS -00D6 ; [.1FFD.0021.0008] # LATIN CAPITAL LETTER O WITH DIAERESIS -004F 0308 ; [.1FFD.0021.0008] # LATIN CAPITAL LETTER O WITH DIAERESIS -022B ; [.1FFD.0021.0002][.0000.0032.0002] # LATIN SMALL LETTER O WITH DIAERESIS AND MACRON -022A ; [.1FFD.0021.0008][.0000.0032.0002] # LATIN CAPITAL LETTER O WITH DIAERESIS AND MACRON -0151 ; [.1FFD.0022.0002] # LATIN SMALL LETTER O WITH DOUBLE ACUTE -006F 030B ; [.1FFD.0022.0002] # LATIN SMALL LETTER O WITH DOUBLE ACUTE -0150 ; [.1FFD.0022.0008] # LATIN CAPITAL LETTER O WITH DOUBLE ACUTE -004F 030B ; [.1FFD.0022.0008] # LATIN CAPITAL LETTER O WITH DOUBLE ACUTE -0153 ; [.1FFD.0023.0002] # LATIN SMALL LIGATURE OE -0152 ; [.1FFD.0023.0008] # LATIN CAPITAL LIGATURE OE -00E5 ; [.1FFE.0020.0002] # LATIN SMALL LETTER A WITH RING ABOVE -0061 030A ; [.1FFE.0020.0002] # LATIN SMALL LETTER A WITH RING ABOVE -00C5 ; [.1FFE.0020.0008] # LATIN CAPITAL LETTER A WITH RING ABOVE -0041 030A ; [.1FFE.0020.0008] # LATIN CAPITAL LETTER A WITH RING ABOVE -212B ; [.1FFE.0020.0008] # ANGSTROM SIGN -01FB ; [.1FFE.0020.0002][.0000.0024.0002] # LATIN SMALL LETTER A WITH RING ABOVE AND ACUTE -01FA ; [.1FFE.0020.0008][.0000.0024.0002] # LATIN CAPITAL LETTER A WITH RING ABOVE AND ACUTE + locale_version => 1.31, + entry => <<'ENTRY', # for DUCET v13.0.0 +0111 ; [.1FEB.0021.0002] # LATIN SMALL LETTER D WITH STROKE +0064 0335 ; [.1FEB.0021.0002] # LATIN SMALL LETTER D WITH STROKE +0110 ; [.1FEB.0021.0008] # LATIN CAPITAL LETTER D WITH STROKE +0044 0335 ; [.1FEB.0021.0008] # LATIN CAPITAL LETTER D WITH STROKE +00F0 ; [.1FEB.0022.0002] # LATIN SMALL LETTER ETH +1DD9 ; [.1FEB.0022.0002] # COMBINING LATIN SMALL LETTER ETH +00D0 ; [.1FEB.0022.0008] # LATIN CAPITAL LETTER ETH +0138 ; [.2180.0021.0002] # LATIN SMALL LETTER KRA +004B 0027 ; [.2180.0021.0008] # +00FE ; [.21F7.0020.0003][.2075.0020.0003] # LATIN SMALL LETTER THORN +00DE ; [.21F7.0020.0009][.2075.0020.0009] # LATIN CAPITAL LETTER THORN +00FC ; [.2270.0021.0002] # LATIN SMALL LETTER U WITH DIAERESIS +0075 0308 ; [.2270.0021.0002] # LATIN SMALL LETTER U WITH DIAERESIS +00DC ; [.2270.0021.0008] # LATIN CAPITAL LETTER U WITH DIAERESIS +0055 0308 ; [.2270.0021.0008] # LATIN CAPITAL LETTER U WITH DIAERESIS +01DC ; [.2270.0021.0002][.0000.0025.0002] # LATIN SMALL LETTER U WITH DIAERESIS AND GRAVE +01DB ; [.2270.0021.0008][.0000.0025.0002] # LATIN CAPITAL LETTER U WITH DIAERESIS AND GRAVE +01D8 ; [.2270.0021.0002][.0000.0024.0002] # LATIN SMALL LETTER U WITH DIAERESIS AND ACUTE +01D7 ; [.2270.0021.0008][.0000.0024.0002] # LATIN CAPITAL LETTER U WITH DIAERESIS AND ACUTE +01D6 ; [.2270.0021.0002][.0000.0032.0002] # LATIN SMALL LETTER U WITH DIAERESIS AND MACRON +01D5 ; [.2270.0021.0008][.0000.0032.0002] # LATIN CAPITAL LETTER U WITH DIAERESIS AND MACRON +01DA ; [.2270.0021.0002][.0000.0028.0002] # LATIN SMALL LETTER U WITH DIAERESIS AND CARON +01D9 ; [.2270.0021.0008][.0000.0028.0002] # LATIN CAPITAL LETTER U WITH DIAERESIS AND CARON +0171 ; [.2270.0022.0002] # LATIN SMALL LETTER U WITH DOUBLE ACUTE +0075 030B ; [.2270.0022.0002] # LATIN SMALL LETTER U WITH DOUBLE ACUTE +0170 ; [.2270.0022.0008] # LATIN CAPITAL LETTER U WITH DOUBLE ACUTE +0055 030B ; [.2270.0022.0008] # LATIN CAPITAL LETTER U WITH DOUBLE ACUTE +00E6 ; [.22FB.0020.0002] # LATIN SMALL LETTER AE +1DD4 ; [.22FB.0020.0002] # COMBINING LATIN SMALL LETTER AE +00C6 ; [.22FB.0020.0008] # LATIN CAPITAL LETTER AE +1D2D ; [.22FB.0020.0014] # MODIFIER LETTER CAPITAL AE +01FD ; [.22FB.0020.0002][.0000.0024.0002] # LATIN SMALL LETTER AE WITH ACUTE +01FC ; [.22FB.0020.0008][.0000.0024.0002] # LATIN CAPITAL LETTER AE WITH ACUTE +01E3 ; [.22FB.0020.0002][.0000.0032.0002] # LATIN SMALL LETTER AE WITH MACRON +01E2 ; [.22FB.0020.0008][.0000.0032.0002] # LATIN CAPITAL LETTER AE WITH MACRON +00E4 ; [.22FB.0021.0002] # LATIN SMALL LETTER A WITH DIAERESIS +0061 0308 ; [.22FB.0021.0002] # LATIN SMALL LETTER A WITH DIAERESIS +00C4 ; [.22FB.0021.0008] # LATIN CAPITAL LETTER A WITH DIAERESIS +0041 0308 ; [.22FB.0021.0008] # LATIN CAPITAL LETTER A WITH DIAERESIS +01DF ; [.22FB.0021.0002][.0000.0032.0002] # LATIN SMALL LETTER A WITH DIAERESIS AND MACRON +01DE ; [.22FB.0021.0008][.0000.0032.0002] # LATIN CAPITAL LETTER A WITH DIAERESIS AND MACRON +0119 ; [.22FB.0022.0002] # LATIN SMALL LETTER E WITH OGONEK +0065 0328 ; [.22FB.0022.0002] # LATIN SMALL LETTER E WITH OGONEK +0118 ; [.22FB.0022.0008] # LATIN CAPITAL LETTER E WITH OGONEK +0045 0328 ; [.22FB.0022.0008] # LATIN CAPITAL LETTER E WITH OGONEK +00F8 ; [.22FC.0020.0002] # LATIN SMALL LETTER O WITH STROKE +006F 0338 ; [.22FC.0020.0002] # LATIN SMALL LETTER O WITH STROKE +00D8 ; [.22FC.0020.0008] # LATIN CAPITAL LETTER O WITH STROKE +004F 0338 ; [.22FC.0020.0008] # LATIN CAPITAL LETTER O WITH STROKE +01FF ; [.22FC.0020.0002][.0000.0024.0002] # LATIN SMALL LETTER O WITH STROKE AND ACUTE +01FE ; [.22FC.0020.0008][.0000.0024.0002] # LATIN CAPITAL LETTER O WITH STROKE AND ACUTE +00F6 ; [.22FC.0021.0002] # LATIN SMALL LETTER O WITH DIAERESIS +006F 0308 ; [.22FC.0021.0002] # LATIN SMALL LETTER O WITH DIAERESIS +00D6 ; [.22FC.0021.0008] # LATIN CAPITAL LETTER O WITH DIAERESIS +004F 0308 ; [.22FC.0021.0008] # LATIN CAPITAL LETTER O WITH DIAERESIS +022B ; [.22FC.0021.0002][.0000.0032.0002] # LATIN SMALL LETTER O WITH DIAERESIS AND MACRON +022A ; [.22FC.0021.0008][.0000.0032.0002] # LATIN CAPITAL LETTER O WITH DIAERESIS AND MACRON +0151 ; [.22FC.0022.0002] # LATIN SMALL LETTER O WITH DOUBLE ACUTE +006F 030B ; [.22FC.0022.0002] # LATIN SMALL LETTER O WITH DOUBLE ACUTE +0150 ; [.22FC.0022.0008] # LATIN CAPITAL LETTER O WITH DOUBLE ACUTE +004F 030B ; [.22FC.0022.0008] # LATIN CAPITAL LETTER O WITH DOUBLE ACUTE +0153 ; [.22FC.0023.0002] # LATIN SMALL LIGATURE OE +0152 ; [.22FC.0023.0008] # LATIN CAPITAL LIGATURE OE +00E5 ; [.22FD.0020.0002] # LATIN SMALL LETTER A WITH RING ABOVE +0061 030A ; [.22FD.0020.0002] # LATIN SMALL LETTER A WITH RING ABOVE +00C5 ; [.22FD.0020.0008] # LATIN CAPITAL LETTER A WITH RING ABOVE +0041 030A ; [.22FD.0020.0008] # LATIN CAPITAL LETTER A WITH RING ABOVE +212B ; [.22FD.0020.0008] # ANGSTROM SIGN +01FB ; [.22FD.0020.0002][.0000.0024.0002] # LATIN SMALL LETTER A WITH RING ABOVE AND ACUTE +01FA ; [.22FD.0020.0008][.0000.0024.0002] # LATIN CAPITAL LETTER A WITH RING ABOVE AND ACUTE ENTRY }; diff --git a/gnu/usr.bin/perl/cpan/Unicode-Collate/Collate/Locale/kn.pl b/gnu/usr.bin/perl/cpan/Unicode-Collate/Collate/Locale/kn.pl index 1167ec24524..e1cadd31a2a 100644 --- a/gnu/usr.bin/perl/cpan/Unicode-Collate/Collate/Locale/kn.pl +++ b/gnu/usr.bin/perl/cpan/Unicode-Collate/Collate/Locale/kn.pl @@ -1,10 +1,10 @@ +{ - locale_version => 1.27, - entry => <<'ENTRY', # for DUCET v10.0.0 -0C82 ; [.28BE.0020.0002][.FFF1.0000.0000] # KANNADA SIGN ANUSVARA -0C83 ; [.28BE.0020.0002][.FFF2.0000.0000] # KANNADA SIGN VISARGA -0CF1 ; [.28BE.0020.0002][.FFF3.0000.0000] # KANNADA SIGN JIHVAMULIYA -0CF2 ; [.28BE.0020.0002][.FFF4.0000.0000] # KANNADA SIGN UPADHMANIYA -0C94 ; [.28BE.0020.0002][.FFF0.0000.0000] # KANNADA LETTER AU + locale_version => 1.31, + entry => <<'ENTRY', # for DUCET v13.0.0 +0C82 ; [.2BCB.0020.0002][.FFF1.0000.0000] # KANNADA SIGN ANUSVARA +0C83 ; [.2BCB.0020.0002][.FFF2.0000.0000] # KANNADA SIGN VISARGA +0CF1 ; [.2BCB.0020.0002][.FFF3.0000.0000] # KANNADA SIGN JIHVAMULIYA +0CF2 ; [.2BCB.0020.0002][.FFF4.0000.0000] # KANNADA SIGN UPADHMANIYA +0C94 ; [.2BCB.0020.0002][.FFF0.0000.0000] # KANNADA LETTER AU ENTRY }; diff --git a/gnu/usr.bin/perl/cpan/Unicode-Collate/Collate/Locale/ko.pl b/gnu/usr.bin/perl/cpan/Unicode-Collate/Collate/Locale/ko.pl index a53c42406dc..e45f1be9b26 100644 --- a/gnu/usr.bin/perl/cpan/Unicode-Collate/Collate/Locale/ko.pl +++ b/gnu/usr.bin/perl/cpan/Unicode-Collate/Collate/Locale/ko.pl @@ -1,647 +1,647 @@ use Unicode::Collate::CJK::Korean; +{ - locale_version => 1.27, + locale_version => 1.31, overrideCJK => \&Unicode::Collate::CJK::Korean::weightKorean, - entry => <<'ENTRY', # for DUCET v10.0.0 -F967 ; [.3D13.0021.0002.4E0D][.3D97.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F967 -FA70 ; [.3D13.0032.0002.4E26][.3D90.0020.0002][.3DFC.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA70 -F905 ; [.3D0C.0021.0002.4E32][.3D92.0020.0002][.3DFD.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F905 -2F801 ; [.3D1E.0021.0002.4E38][.3D93.0020.0002][.3DEB.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F801 -F95E ; [.3D0F.0021.0002.4E39][.3D8A.0020.0002][.3DEB.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F95E -F91B ; [.3D11.0021.0002.4E82][.3D8A.0020.0002][.3DEB.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F91B -F9BA ; [.3D11.0021.0002.4E86][.3D96.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9BA -F977 ; [.3D11.0021.0002.4EAE][.3D8C.0020.0002][.3DFC.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F977 -F9FD ; [.3D15.0021.0002.4EC0][.3D9E.0020.0002][.3DF8.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9FD -F9A8 ; [.3D11.0021.0002.4EE4][.3D90.0020.0002][.3DFC.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9A8 -F92D ; [.3D11.0021.0002.4F86][.3D8B.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F92D -F9B5 ; [.3D11.0021.0002.4F8B][.3D91.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9B5 -FA30 ; [.3D12.0021.0002.4FAE][.3D92.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA30 -2F805 ; [.3D12.0021.0002.4FAE][.3D92.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F805 -2F806 ; [.3D1C.0023.0002.4FBB][.3D8A.0020.0002][.3DEF.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F806 -F965 ; [.3D1D.0021.0002.4FBF][.3D90.0020.0002][.3DEB.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F965 -2F807 ; [.3D13.0022.0002.5002][.3D90.0020.0002][.3DFC.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F807 -F9D4 ; [.3D11.0022.0002.502B][.3D9B.0020.0002][.3DEB.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9D4 -2F809 ; [.3D13.0022.0002.5099][.3D9E.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F809 -2F80B ; [.3D15.0023.0002.50CF][.3D8A.0020.0002][.3DFC.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F80B -F9BB ; [.3D11.0022.0002.50DA][.3D96.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9BB -FA31 ; [.3D15.0023.0002.50E7][.3D9C.0020.0002][.3DFC.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA31 -2F80A ; [.3D15.0023.0002.50E7][.3D9C.0020.0002][.3DFC.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F80A -FA0C ; [.3D17.0021.0002.5140][.3D92.0020.0002][.3DEF.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA0C -FA74 ; [.3D1A.0021.0002.5145][.3D97.0020.0002][.3DFC.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA74 -FA32 ; [.3D12.0021.0002.514D][.3D90.0020.0002][.3DEB.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA32 -2F80E ; [.3D12.0021.0002.514D][.3D90.0020.0002][.3DEB.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F80E -2F814 ; [.3D0E.0022.0002.5167][.3D8B.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F814 -FA72 ; [.3D18.0024.0002.5168][.3D8E.0020.0002][.3DEB.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA72 -F978 ; [.3D11.0023.0002.5169][.3D8C.0020.0002][.3DFC.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F978 -F9D1 ; [.3D11.0021.0002.516D][.3D9B.0020.0002][.3DE8.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9D1 -2F811 ; [.3D0C.0026.0002.5177][.3D97.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F811 -FA75 ; [.3D0C.0024.0002.5180][.3D9E.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA75 -2F815 ; [.3D18.0021.0002.518D][.3D8B.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F815 -2F8D2 ; [.3D12.0022.0002.5192][.3D92.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F8D2 -2F8D3 ; [.3D12.0022.0002.5195][.3D90.0020.0002][.3DEB.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F8D3 -2F817 ; [.3D17.0023.0002.5197][.3D96.0020.0002][.3DFC.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F817 -2F818 ; [.3D17.003B.0002.51A4][.3D98.0020.0002][.3DEB.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F818 -2F81A ; [.3D0F.0022.0002.51AC][.3D92.0020.0002][.3DFC.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F81A -F92E ; [.3D11.0021.0002.51B7][.3D8B.0020.0002][.3DFC.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F92E -F979 ; [.3D11.0024.0002.51C9][.3D8C.0020.0002][.3DFC.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F979 -F955 ; [.3D11.0021.0002.51CC][.3D9C.0020.0002][.3DFC.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F955 -F954 ; [.3D11.0021.0002.51DC][.3D9C.0020.0002][.3DF7.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F954 -FA15 ; [.3D1E.0022.0002.51DE][.3D9D.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA15 -2F81E ; [.3D17.0023.0002.5203][.3D9E.0020.0002][.3DEB.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F81E -FA00 ; [.3D18.0021.0002.5207][.3D8E.0020.0002][.3DEF.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA00 -2F850 ; [.3D18.0021.0002.5207][.3D8E.0020.0002][.3DEF.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F850 -F99C ; [.3D11.0022.0002.5217][.3D90.0020.0002][.3DEF.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F99C -F9DD ; [.3D11.0022.0002.5229][.3D9E.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9DD -F9FF ; [.3D18.0022.0002.523A][.3D8A.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9FF -2F820 ; [.3D0C.0021.0002.523B][.3D8A.0020.0002][.3DE8.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F820 -2F822 ; [.3D1E.0021.0002.5272][.3D8A.0020.0002][.3DEF.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F822 -2F823 ; [.3D15.002D.0002.5277][.3D8A.0020.0002][.3DEB.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F823 -F9C7 ; [.3D11.0021.0002.5289][.3D9B.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9C7 -F98A ; [.3D11.0021.0002.529B][.3D90.0020.0002][.3DE8.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F98A -F99D ; [.3D11.0023.0002.52A3][.3D90.0020.0002][.3DEF.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F99D -FA76 ; [.3D17.0024.0002.52C7][.3D96.0020.0002][.3DFC.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA76 -2F825 ; [.3D17.0024.0002.52C7][.3D96.0020.0002][.3DFC.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F825 -FA33 ; [.3D12.0023.0002.52C9][.3D90.0020.0002][.3DEB.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA33 -2F826 ; [.3D12.0023.0002.52C9][.3D90.0020.0002][.3DEB.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F826 -F952 ; [.3D11.0021.0002.52D2][.3D9C.0020.0002][.3DE8.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F952 -F92F ; [.3D11.0021.0002.52DE][.3D92.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F92F -FA34 ; [.3D0C.0023.0002.52E4][.3D9C.0020.0002][.3DEB.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA34 -2F827 ; [.3D0C.0023.0002.52E4][.3D9C.0020.0002][.3DEB.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F827 -F97F ; [.3D11.0023.0002.52F5][.3D90.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F97F -FA77 ; [.3D18.0022.0002.52FA][.3D8A.0020.0002][.3DE8.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA77 -2F828 ; [.3D18.0022.0002.52FA][.3D8A.0020.0002][.3DE8.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F828 -2F829 ; [.3D1D.0022.0002.5305][.3D92.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F829 -F963 ; [.3D13.0021.0002.5317][.3D97.0020.0002][.3DE8.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F963 -2F82B ; [.3D13.0021.0002.5317][.3D97.0020.0002][.3DE8.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F82B -F9EB ; [.3D0E.0021.0002.533F][.3D9E.0020.0002][.3DE8.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9EB -2F82C ; [.3D1E.0021.0002.5349][.3D99.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F82C -FA35 ; [.3D13.0025.0002.5351][.3D9E.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA35 -2F82D ; [.3D13.0025.0002.5351][.3D9E.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F82D -2F82E ; [.3D13.0022.0002.535A][.3D8A.0020.0002][.3DE8.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F82E -2F82F ; [.3D18.0022.0002.5373][.3D9C.0020.0002][.3DE8.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F82F -F91C ; [.3D11.0022.0002.5375][.3D8A.0020.0002][.3DEB.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F91C -2F830 ; [.3D18.0021.0002.537D][.3D9C.0020.0002][.3DE8.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F830 -2F831 ; [.3D0C.0028.0002.537F][.3D90.0020.0002][.3DFC.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F831 -2F832 ; [.3D0C.0028.0002.537F][.3D90.0020.0002][.3DFC.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F832 -2F833 ; [.3D0C.0028.0002.537F][.3D90.0020.0002][.3DFC.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F833 -F96B ; [.3D1A.0022.0002.53C3][.3D8A.0020.0002][.3DF7.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F96B -2F836 ; [.3D0C.0022.0002.53CA][.3D9C.0020.0002][.3DF8.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F836 -2F837 ; [.3D15.005E.0002.53DF][.3D97.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F837 -F906 ; [.3D0C.002A.0002.53E5][.3D97.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F906 -2F839 ; [.3D0C.0021.0002.53EB][.3D9B.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F839 -2F83A ; [.3D18.0022.0002.53F1][.3D9E.0020.0002][.3DEF.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F83A -F9DE ; [.3D11.0024.0002.540F][.3D9E.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9DE -F9ED ; [.3D11.0021.0002.541D][.3D9E.0020.0002][.3DEB.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9ED -2F83D ; [.3D1E.0021.0002.5438][.3D9C.0020.0002][.3DF8.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F83D -F980 ; [.3D11.0024.0002.5442][.3D90.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F980 -2F83E ; [.3D18.0026.0002.5448][.3D8E.0020.0002][.3DFC.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F83E -2F83F ; [.3D18.0028.0002.5468][.3D97.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F83F -2F840 ; [.3D17.0031.0002.54A2][.3D8A.0020.0002][.3DE8.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F840 -F99E ; [.3D17.0025.0002.54BD][.3D9E.0020.0002][.3DEB.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F99E -2F842 ; [.3D0F.0021.0002.5510][.3D8A.0020.0002][.3DFC.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F842 -2F843 ; [.3D0C.0022.0002.5553][.3D91.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F843 -2F844 ; [.3D1E.0024.0002.5563][.3D8A.0020.0002][.3DF7.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F844 -2F845 ; [.3D15.0024.0002.5584][.3D8E.0020.0002][.3DEB.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F845 -2F846 ; [.3D15.0024.0002.5584][.3D8E.0020.0002][.3DEB.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F846 -F90B ; [.3D11.0021.0002.5587][.3D8A.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F90B -FA7A ; [.3D1E.0022.0002.5599][.3D99.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA7A -2F847 ; [.3D1E.0022.0002.5599][.3D99.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F847 -FA36 ; [.3D0C.0022.0002.559D][.3D8A.0020.0002][.3DEF.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA36 -FA78 ; [.3D0C.0022.0002.559D][.3D8A.0020.0002][.3DEF.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA78 -2F848 ; [.3D0D.0021.0002.55AB][.3D9E.0020.0002][.3DE8.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F848 -FA7B ; [.3D17.0022.0002.55E2][.3D92.0020.0002][.3DEF.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA7B -FA37 ; [.3D1C.0022.0002.5606][.3D8A.0020.0002][.3DEB.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA37 -2F84C ; [.3D1C.0022.0002.5606][.3D8A.0020.0002][.3DEB.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F84C -FA38 ; [.3D0C.0026.0002.5668][.3D9E.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA38 -2F84F ; [.3D13.0023.0002.5674][.3D97.0020.0002][.3DEB.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F84F -F9A9 ; [.3D11.0023.0002.56F9][.3D90.0020.0002][.3DFC.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9A9 -2F84B ; [.3D0F.0024.0002.5716][.3D92.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F84B -2F855 ; [.3D1E.0024.0002.578B][.3D90.0020.0002][.3DFC.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F855 -2F852 ; [.3D15.0021.0002.57CE][.3D8E.0020.0002][.3DFC.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F852 -2F853 ; [.3D15.0021.0002.57F4][.3D9E.0020.0002][.3DE8.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F853 -2F857 ; [.3D13.0023.0002.5831][.3D92.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F857 -FA39 ; [.3D13.0033.0002.5840][.3D90.0020.0002][.3DFC.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA39 -FA10 ; [.3D1A.0022.0002.585A][.3D92.0020.0002][.3DFC.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA10 -FA7C ; [.3D1A.0022.0002.585A][.3D92.0020.0002][.3DFC.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA7C -F96C ; [.3D15.0021.0002.585E][.3D8B.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F96C -FA3A ; [.3D12.0021.0002.58A8][.3D97.0020.0002][.3DE8.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA3A -FA7D ; [.3D13.0024.0002.58B3][.3D97.0020.0002][.3DEB.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA7D -F94A ; [.3D11.0021.0002.58D8][.3D97.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F94A -F942 ; [.3D11.0021.0002.58DF][.3D92.0020.0002][.3DFC.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F942 -2F85C ; [.3D13.0032.0002.5906][.3D92.0020.0002][.3DFC.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F85C -2F85D ; [.3D0F.0021.0002.591A][.3D8A.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F85D -2F85E ; [.3D12.0021.0002.5922][.3D92.0020.0002][.3DFC.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F85E -FA7E ; [.3D17.0024.0002.5944][.3D8E.0020.0002][.3DF7.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA7E -F90C ; [.3D0E.0023.0002.5948][.3D8B.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F90C -F909 ; [.3D0C.0024.0002.5951][.3D91.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F909 -FA7F ; [.3D13.0025.0002.5954][.3D97.0020.0002][.3DEB.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA7F -2F85F ; [.3D15.0030.0002.5962][.3D8A.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F85F -F981 ; [.3D0E.0021.0002.5973][.3D90.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F981 -2F862 ; [.3D1E.0026.0002.59EC][.3D9D.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F862 -2F863 ; [.3D17.002C.0002.5A1B][.3D92.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F863 -2F864 ; [.3D1C.0030.0002.5A27][.3D8B.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F864 -FA80 ; [.3D13.0027.0002.5A62][.3D9E.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA80 -2F866 ; [.3D13.002B.0002.5A66][.3D97.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F866 -2F986 ; [.3D17.0025.0002.5AB5][.3D9E.0020.0002][.3DFC.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F986 -2F869 ; [.3D17.0041.0002.5B08][.3D96.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F869 -FA81 ; [.3D18.003C.0002.5B28][.3D8A.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA81 -2F86A ; [.3D11.0029.0002.5B3E][.3D8A.0020.0002][.3DEB.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F86A -2F86B ; [.3D11.0029.0002.5B3E][.3D8A.0020.0002][.3DEB.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F86B -FA04 ; [.3D0F.0021.0002.5B85][.3D8B.0020.0002][.3DE8.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA04 -2F86D ; [.3D17.0029.0002.5BC3][.3D98.0020.0002][.3DEB.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F86D -2F86E ; [.3D1A.003B.0002.5BD8][.3D9E.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F86E -F95F ; [.3D0E.0021.0002.5BE7][.3D90.0020.0002][.3DFC.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F95F -F9AA ; [.3D0E.0021.0002.5BE7][.3D90.0020.0002][.3DFC.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9AA -2F86F ; [.3D0E.0021.0002.5BE7][.3D90.0020.0002][.3DFC.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F86F -F9BC ; [.3D11.0023.0002.5BEE][.3D96.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9BC -F9BD ; [.3D0E.0021.0002.5C3F][.3D96.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9BD -2F877 ; [.3D0F.0028.0002.5C60][.3D92.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F877 -F94B ; [.3D11.0023.0002.5C62][.3D97.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F94B -FA3B ; [.3D1A.0021.0002.5C64][.3D9C.0020.0002][.3DFC.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA3B -F9DF ; [.3D11.0026.0002.5C65][.3D9E.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9DF -2F879 ; [.3D15.002A.0002.5CC0][.3D97.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F879 -F9D5 ; [.3D11.0023.0002.5D19][.3D9B.0020.0002][.3DEB.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9D5 -F921 ; [.3D11.0021.0002.5D50][.3D8A.0020.0002][.3DF7.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F921 -F9AB ; [.3D11.0025.0002.5DBA][.3D90.0020.0002][.3DFC.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9AB -2F881 ; [.3D15.0021.0002.5DE1][.3D97.0020.0002][.3DEB.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F881 -2F882 ; [.3D15.0027.0002.5DE2][.3D92.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F882 -2F884 ; [.3D15.0022.0002.5DFD][.3D92.0020.0002][.3DEB.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F884 -2F885 ; [.3D15.0029.0002.5E28][.3D8F.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F885 -2F886 ; [.3D12.0025.0002.5E3D][.3D92.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F886 -F98E ; [.3D0E.0021.0002.5E74][.3D90.0020.0002][.3DEB.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F98E -FA01 ; [.3D0F.002B.0002.5EA6][.3D92.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA01 -2F88C ; [.3D13.0052.0002.5EB3][.3D9E.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F88C -2F88D ; [.3D15.0025.0002.5EB6][.3D8E.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F88D -F9A2 ; [.3D11.0021.0002.5EC9][.3D90.0020.0002][.3DF7.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9A2 -F928 ; [.3D11.0021.0002.5ECA][.3D8A.0020.0002][.3DFC.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F928 -2F88E ; [.3D11.0021.0002.5ECA][.3D8A.0020.0002][.3DFC.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F88E -FA0B ; [.3D0C.0021.0002.5ED3][.3D93.0020.0002][.3DE8.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA0B -F982 ; [.3D11.0025.0002.5EEC][.3D90.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F982 -F943 ; [.3D11.0022.0002.5F04][.3D92.0020.0002][.3DFC.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F943 -2F894 ; [.3D0F.004B.0002.5F22][.3D92.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F894 -2F895 ; [.3D0F.004B.0002.5F22][.3D92.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F895 -2F899 ; [.3D1E.0025.0002.5F62][.3D90.0020.0002][.3DFC.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F899 -FA84 ; [.3D1A.0025.0002.5F69][.3D8B.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA84 -2F89A ; [.3D18.0027.0002.5F6B][.3D92.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F89A -F9D8 ; [.3D11.0021.0002.5F8B][.3D9B.0020.0002][.3DEF.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9D8 -F966 ; [.3D13.0026.0002.5FA9][.3D92.0020.0002][.3DE8.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F966 -FA85 ; [.3D17.0043.0002.5FAD][.3D96.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA85 -2F89D ; [.3D17.002A.0002.5FCD][.3D9E.0020.0002][.3DEB.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F89D -2F89E ; [.3D18.0026.0002.5FD7][.3D9E.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F89E -F9A3 ; [.3D0E.0021.0002.5FF5][.3D90.0020.0002][.3DF7.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9A3 -F960 ; [.3D0E.0024.0002.6012][.3D92.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F960 -F9AC ; [.3D11.0026.0002.601C][.3D90.0020.0002][.3DFC.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9AC -2F8A0 ; [.3D17.0042.0002.6081][.3D90.0020.0002][.3DEB.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F8A0 -FA3D ; [.3D1E.0026.0002.6094][.3D95.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA3D -2F8A3 ; [.3D1E.0026.0002.6094][.3D95.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F8A3 -2F8A5 ; [.3D0F.0022.0002.60C7][.3D92.0020.0002][.3DEB.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F8A5 -FA86 ; [.3D12.002D.0002.60D8][.3D8A.0020.0002][.3DFC.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA86 -F9B9 ; [.3D17.0025.0002.60E1][.3D8A.0020.0002][.3DE8.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9B9 -FA88 ; [.3D17.002E.0002.6108][.3D9B.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA88 -F9D9 ; [.3D11.0022.0002.6144][.3D9B.0020.0002][.3DEF.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9D9 -2F8A6 ; [.3D18.002A.0002.6148][.3D8A.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F8A6 -2F8A7 ; [.3D1E.0027.0002.614C][.3D93.0020.0002][.3DFC.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F8A7 -2F8A9 ; [.3D1E.0027.0002.614C][.3D93.0020.0002][.3DFC.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F8A9 -FA8A ; [.3D17.0047.0002.6160][.3D92.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA8A -FA3E ; [.3D0C.0028.0002.6168][.3D8B.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA3E -2F8AA ; [.3D11.0031.0002.617A][.3D97.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F8AA -FA3F ; [.3D18.0022.0002.618E][.3D9C.0020.0002][.3DFC.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA3F -FA89 ; [.3D18.0022.0002.618E][.3D9C.0020.0002][.3DFC.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA89 -2F8AB ; [.3D18.0022.0002.618E][.3D9C.0020.0002][.3DFC.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F8AB -F98F ; [.3D11.0021.0002.6190][.3D90.0020.0002][.3DEB.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F98F -2F8AD ; [.3D13.0028.0002.61A4][.3D97.0020.0002][.3DEB.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F8AD -2F8AE ; [.3D1A.0030.0002.61AF][.3D8A.0020.0002][.3DF7.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F8AE -2F8AC ; [.3D1E.0021.0002.61B2][.3D8E.0020.0002][.3DEB.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F8AC -2F8AF ; [.3D12.0025.0002.61DE][.3D92.0020.0002][.3DFC.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F8AF -FA40 ; [.3D18.0022.0002.61F2][.3D9E.0020.0002][.3DFC.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA40 -FA8B ; [.3D18.0022.0002.61F2][.3D9E.0020.0002][.3DFC.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA8B -2F8B0 ; [.3D18.0022.0002.61F2][.3D9E.0020.0002][.3DFC.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F8B0 -F90D ; [.3D11.0022.0002.61F6][.3D8A.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F90D -2F8B1 ; [.3D11.0022.0002.61F6][.3D8A.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F8B1 -F990 ; [.3D11.0022.0002.6200][.3D90.0020.0002][.3DEB.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F990 -2F8B2 ; [.3D15.0026.0002.6210][.3D8E.0020.0002][.3DFC.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F8B2 -F9D2 ; [.3D11.0022.0002.622E][.3D9B.0020.0002][.3DE8.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9D2 -FA8C ; [.3D0F.0029.0002.6234][.3D8B.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA8C -2F8B5 ; [.3D1D.002B.0002.62B1][.3D92.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F8B5 -F925 ; [.3D11.0021.0002.62C9][.3D8A.0020.0002][.3DF8.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F925 -F95B ; [.3D0E.0024.0002.62CF][.3D8A.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F95B -FA02 ; [.3D1A.0026.0002.62D3][.3D8E.0020.0002][.3DE8.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA02 -2F8B6 ; [.3D13.0022.0002.62D4][.3D8A.0020.0002][.3DEF.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F8B6 -F973 ; [.3D15.0022.0002.62FE][.3D9C.0020.0002][.3DF8.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F973 -2F8B9 ; [.3D12.0027.0002.633D][.3D8A.0020.0002][.3DEB.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F8B9 -2F8B7 ; [.3D17.0027.0002.6350][.3D90.0020.0002][.3DEB.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F8B7 -2F8BB ; [.3D15.0039.0002.6368][.3D8A.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F8BB -F9A4 ; [.3D0E.0024.0002.637B][.3D90.0020.0002][.3DF7.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9A4 -2F8BC ; [.3D15.0029.0002.6383][.3D92.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F8BC -F975 ; [.3D11.0021.0002.63A0][.3D8C.0020.0002][.3DE8.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F975 -2F8C1 ; [.3D17.0025.0002.63A9][.3D8E.0020.0002][.3DF7.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F8C1 -FA8D ; [.3D17.0030.0002.63C4][.3D9B.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA8D -FA8E ; [.3D15.0030.0002.641C][.3D97.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA8E -2F8BF ; [.3D18.0025.0002.6422][.3D9E.0020.0002][.3DEB.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F8BF -2F8C3 ; [.3D12.0021.0002.6469][.3D8A.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F8C3 -F991 ; [.3D0E.0022.0002.649A][.3D90.0020.0002][.3DEB.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F991 -2F8C5 ; [.3D1E.0029.0002.649D][.3D9A.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F8C5 -F930 ; [.3D11.0023.0002.64C4][.3D92.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F930 -FA41 ; [.3D12.0025.0002.654F][.3D9E.0020.0002][.3DEB.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA41 -2F8C8 ; [.3D12.0025.0002.654F][.3D9E.0020.0002][.3DEB.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F8C8 -FA90 ; [.3D17.0030.0002.6556][.3D92.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA90 -2F8C9 ; [.3D0C.0030.0002.656C][.3D90.0020.0002][.3DFC.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F8C9 -F969 ; [.3D15.0032.0002.6578][.3D97.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F969 -F9BE ; [.3D11.0025.0002.6599][.3D96.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9BE -F983 ; [.3D11.0028.0002.65C5][.3D90.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F983 -2F8CB ; [.3D0C.0035.0002.65E3][.3D9E.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F8CB -F9E0 ; [.3D17.0024.0002.6613][.3D90.0020.0002][.3DE8.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9E0 -2F8CD ; [.3D18.0026.0002.6649][.3D9E.0020.0002][.3DEB.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F8CD -FA12 ; [.3D1A.0022.0002.6674][.3D8E.0020.0002][.3DFC.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA12 -FA91 ; [.3D1A.0022.0002.6674][.3D8E.0020.0002][.3DFC.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA91 -F9C5 ; [.3D1E.002A.0002.6688][.3D97.0020.0002][.3DEB.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9C5 -FA43 ; [.3D15.002B.0002.6691][.3D8E.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA43 -2F8CF ; [.3D15.002B.0002.6691][.3D8E.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F8CF -FA06 ; [.3D1D.0022.0002.66B4][.3D92.0020.0002][.3DE8.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA06 -F98B ; [.3D11.0022.0002.66C6][.3D90.0020.0002][.3DE8.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F98B -F901 ; [.3D0C.0033.0002.66F4][.3D90.0020.0002][.3DFC.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F901 -2F8CC ; [.3D15.002D.0002.66F8][.3D8E.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F8CC -2F8D4 ; [.3D1A.0023.0002.6700][.3D95.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F8D4 -F929 ; [.3D11.0022.0002.6717][.3D8A.0020.0002][.3DFC.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F929 -FA92 ; [.3D11.0022.0002.6717][.3D8A.0020.0002][.3DFC.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA92 -2F8D8 ; [.3D11.0022.0002.6717][.3D8A.0020.0002][.3DFC.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F8D8 -FA93 ; [.3D12.0025.0002.671B][.3D8A.0020.0002][.3DFC.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA93 -2F8D9 ; [.3D12.0025.0002.671B][.3D8A.0020.0002][.3DFC.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F8D9 -F9E1 ; [.3D11.0028.0002.674E][.3D9E.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9E1 -2F8DC ; [.3D1D.0025.0002.6753][.3D96.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F8DC -FA94 ; [.3D18.002E.0002.6756][.3D8A.0020.0002][.3DFC.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA94 -2F8DB ; [.3D0C.0038.0002.675E][.3D9E.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F8DB -F9C8 ; [.3D0E.0021.0002.677B][.3D9B.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9C8 -F9F4 ; [.3D11.0021.0002.6797][.3D9E.0020.0002][.3DF7.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9F4 -F9C9 ; [.3D11.0023.0002.67F3][.3D9B.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9C9 -F9DA ; [.3D11.0023.0002.6817][.3D9B.0020.0002][.3DEF.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9DA -F97A ; [.3D11.0025.0002.6881][.3D8C.0020.0002][.3DFC.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F97A -FA44 ; [.3D12.0027.0002.6885][.3D8B.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA44 -2F8E2 ; [.3D12.0027.0002.6885][.3D8B.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F8E2 -F9E2 ; [.3D11.0029.0002.68A8][.3D9E.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9E2 -2F8E8 ; [.3D15.0062.0002.6942][.3D8A.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F8E8 -2F8EA ; [.3D0C.002A.0002.69EA][.3D8B.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F8EA -F914 ; [.3D17.0028.0002.6A02][.3D8A.0020.0002][.3DE8.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F914 -F95C ; [.3D17.0028.0002.6A02][.3D8A.0020.0002][.3DE8.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F95C -F9BF ; [.3D17.0028.0002.6A02][.3D8A.0020.0002][.3DE8.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9BF -F94C ; [.3D11.0024.0002.6A13][.3D97.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F94C -F931 ; [.3D11.0024.0002.6AD3][.3D92.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F931 -2F8ED ; [.3D18.0021.0002.6ADB][.3D9C.0020.0002][.3DEF.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F8ED -F91D ; [.3D11.0023.0002.6B04][.3D8A.0020.0002][.3DEB.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F91D -2F8EF ; [.3D1A.0028.0002.6B21][.3D8A.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F8EF -2F8F1 ; [.3D1E.0025.0002.6B54][.3D8E.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F8F1 -2F8F3 ; [.3D15.0023.0002.6B72][.3D8F.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F8F3 -F98C ; [.3D11.0023.0002.6B77][.3D90.0020.0002][.3DE8.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F98C -F9A5 ; [.3D11.0023.0002.6BAE][.3D90.0020.0002][.3DF7.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9A5 -F970 ; [.3D15.0023.0002.6BBA][.3D8A.0020.0002][.3DEF.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F970 -FA96 ; [.3D15.0023.0002.6BBA][.3D8A.0020.0002][.3DEF.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA96 -2F8F5 ; [.3D15.0023.0002.6BBA][.3D8A.0020.0002][.3DEF.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F8F5 -2F8FA ; [.3D13.0025.0002.6C4E][.3D8E.0020.0002][.3DF7.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F8FA -F972 ; [.3D1A.0024.0002.6C88][.3D9E.0020.0002][.3DF7.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F972 -2F8FC ; [.3D17.002B.0002.6CBF][.3D90.0020.0002][.3DEB.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F8FC -F968 ; [.3D1D.0024.0002.6CCC][.3D9E.0020.0002][.3DEF.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F968 -F9E3 ; [.3D0E.0022.0002.6CE5][.3D9E.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9E3 -F915 ; [.3D11.0021.0002.6D1B][.3D8A.0020.0002][.3DE8.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F915 -FA05 ; [.3D0F.002A.0002.6D1E][.3D92.0020.0002][.3DFC.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA05 -2F900 ; [.3D1D.0029.0002.6D3E][.3D8A.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F900 -F9CA ; [.3D11.0025.0002.6D41][.3D9B.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9CA -FA97 ; [.3D11.0025.0002.6D41][.3D9B.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA97 -2F902 ; [.3D11.0025.0002.6D41][.3D9B.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F902 -2F903 ; [.3D1E.002E.0002.6D69][.3D92.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F903 -F92A ; [.3D11.0023.0002.6D6A][.3D8A.0020.0002][.3DFC.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F92A -FA45 ; [.3D1E.002A.0002.6D77][.3D8B.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA45 -2F901 ; [.3D1E.002A.0002.6D77][.3D8B.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F901 -2F904 ; [.3D1A.0025.0002.6D78][.3D9E.0020.0002][.3DF7.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F904 -2F905 ; [.3D17.0022.0002.6D85][.3D90.0020.0002][.3DEF.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F905 -F9F5 ; [.3D11.0022.0002.6DCB][.3D9E.0020.0002][.3DF7.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9F5 -F94D ; [.3D11.0025.0002.6DDA][.3D97.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F94D -F9D6 ; [.3D11.0024.0002.6DEA][.3D9B.0020.0002][.3DEB.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9D6 -2F90E ; [.3D17.0026.0002.6DF9][.3D8E.0020.0002][.3DF7.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F90E -FA46 ; [.3D18.002C.0002.6E1A][.3D8E.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA46 -2F908 ; [.3D1E.002B.0002.6E2F][.3D8A.0020.0002][.3DFC.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F908 -2F909 ; [.3D17.002B.0002.6E6E][.3D9E.0020.0002][.3DEB.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F909 -F9CB ; [.3D11.0026.0002.6E9C][.3D9B.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9CB -F9EC ; [.3D0E.0022.0002.6EBA][.3D9E.0020.0002][.3DE8.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9EC -FA99 ; [.3D18.002B.0002.6ECB][.3D8A.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA99 -2F90B ; [.3D18.002B.0002.6ECB][.3D8A.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F90B -F904 ; [.3D1E.0022.0002.6ED1][.3D93.0020.0002][.3DEF.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F904 -F94E ; [.3D11.0026.0002.6F0F][.3D97.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F94E -FA47 ; [.3D1E.0026.0002.6F22][.3D8A.0020.0002][.3DEB.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA47 -FA9A ; [.3D1E.0026.0002.6F22][.3D8A.0020.0002][.3DEB.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA9A -F992 ; [.3D11.0024.0002.6F23][.3D90.0020.0002][.3DEB.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F992 -2F90F ; [.3D18.0033.0002.6F6E][.3D92.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F90F -2F912 ; [.3D13.003C.0002.6FC6][.3D97.0020.0002][.3DEB.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F912 -F922 ; [.3D11.0025.0002.6FEB][.3D8A.0020.0002][.3DF7.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F922 -F984 ; [.3D11.002A.0002.6FFE][.3D90.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F984 -2F915 ; [.3D17.002D.0002.701B][.3D90.0020.0002][.3DFC.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F915 -FA9B ; [.3D18.003D.0002.701E][.3D8E.0020.0002][.3DFC.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA9B -2F914 ; [.3D18.003D.0002.701E][.3D8E.0020.0002][.3DFC.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F914 -2F835 ; [.3D1E.002D.0002.7070][.3D95.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F835 -2F918 ; [.3D18.002B.0002.707D][.3D8B.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F918 -F9FB ; [.3D18.002C.0002.7099][.3D8A.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9FB -2F91A ; [.3D1C.0028.0002.70AD][.3D8A.0020.0002][.3DEB.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F91A -F99F ; [.3D11.0025.0002.70C8][.3D90.0020.0002][.3DEF.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F99F -F916 ; [.3D11.0022.0002.70D9][.3D8A.0020.0002][.3DE8.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F916 -F993 ; [.3D11.0025.0002.7149][.3D90.0020.0002][.3DEB.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F993 -FA48 ; [.3D18.002D.0002.716E][.3D8A.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA48 -FA9C ; [.3D18.002D.0002.716E][.3D8A.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA9C -F9C0 ; [.3D11.0026.0002.71CE][.3D96.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9C0 -F9EE ; [.3D11.0023.0002.71D0][.3D9E.0020.0002][.3DEB.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9EE -F932 ; [.3D11.0027.0002.7210][.3D92.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F932 -F91E ; [.3D11.0026.0002.721B][.3D8A.0020.0002][.3DEB.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F91E -2F920 ; [.3D1A.0036.0002.7228][.3D8A.0020.0002][.3DEB.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F920 -FA9E ; [.3D18.0028.0002.7235][.3D8A.0020.0002][.3DE8.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA9E -2F921 ; [.3D18.0028.0002.7235][.3D8A.0020.0002][.3DE8.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F921 -F946 ; [.3D11.0023.0002.7262][.3D95.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F946 -2F924 ; [.3D15.0030.0002.7280][.3D8E.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F924 -FA9F ; [.3D13.0027.0002.72AF][.3D8E.0020.0002][.3DF7.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA9F -F9FA ; [.3D15.0035.0002.72C0][.3D8A.0020.0002][.3DFC.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9FA -F92B ; [.3D11.0024.0002.72FC][.3D8A.0020.0002][.3DFC.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F92B -FA16 ; [.3D18.002E.0002.732A][.3D8E.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA16 -FAA0 ; [.3D18.002E.0002.732A][.3D8E.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FAA0 -F9A7 ; [.3D11.0021.0002.7375][.3D90.0020.0002][.3DF8.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9A7 -2F928 ; [.3D0F.0023.0002.737A][.3D8A.0020.0002][.3DEF.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F928 -F961 ; [.3D15.0021.0002.7387][.3D92.0020.0002][.3DEF.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F961 -F9DB ; [.3D15.0021.0002.7387][.3D92.0020.0002][.3DEF.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9DB -2F929 ; [.3D17.0025.0002.738B][.3D93.0020.0002][.3DFC.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F929 -F9AD ; [.3D11.0027.0002.73B2][.3D90.0020.0002][.3DFC.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9AD -F917 ; [.3D11.0023.0002.73DE][.3D8A.0020.0002][.3DE8.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F917 -F9E4 ; [.3D11.002D.0002.7406][.3D9E.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9E4 -F9CC ; [.3D11.0028.0002.7409][.3D9B.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9CC -FA4A ; [.3D1C.002B.0002.7422][.3D8A.0020.0002][.3DE8.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA4A -2F92F ; [.3D17.003D.0002.745C][.3D9B.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F92F -F9AE ; [.3D1E.002D.0002.7469][.3D90.0020.0002][.3DFC.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9AE -FAA1 ; [.3D18.0057.0002.7471][.3D8E.0020.0002][.3DEB.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FAA1 -2F930 ; [.3D18.0057.0002.7471][.3D8E.0020.0002][.3DEB.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F930 -F994 ; [.3D11.0026.0002.7489][.3D90.0020.0002][.3DEB.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F994 -F9EF ; [.3D11.0024.0002.7498][.3D9E.0020.0002][.3DEB.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9EF -2F932 ; [.3D0C.003A.0002.74CA][.3D90.0020.0002][.3DFC.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F932 -F9CD ; [.3D11.002A.0002.7559][.3D9B.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9CD -F976 ; [.3D11.0022.0002.7565][.3D8C.0020.0002][.3DE8.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F976 -F962 ; [.3D17.002C.0002.7570][.3D9E.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F962 -2F938 ; [.3D17.002C.0002.7570][.3D9E.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F938 -F9E5 ; [.3D11.002F.0002.75E2][.3D9E.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9E5 -2F93A ; [.3D17.0059.0002.7610][.3D9B.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F93A -FAA5 ; [.3D17.0023.0002.761F][.3D92.0020.0002][.3DEB.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FAA5 -F9C1 ; [.3D11.0027.0002.7642][.3D96.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9C1 -F90E ; [.3D11.0023.0002.7669][.3D8A.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F90E -FA17 ; [.3D17.0022.0002.76CA][.3D9E.0020.0002][.3DE8.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA17 -FAA6 ; [.3D17.0022.0002.76CA][.3D9E.0020.0002][.3DE8.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FAA6 -FAA7 ; [.3D15.002B.0002.76DB][.3D8E.0020.0002][.3DFC.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FAA7 -F933 ; [.3D11.0028.0002.76E7][.3D92.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F933 -FAA8 ; [.3D18.0021.0002.76F4][.3D9E.0020.0002][.3DE8.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FAA8 -2F940 ; [.3D18.0021.0002.76F4][.3D9E.0020.0002][.3DE8.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F940 -F96D ; [.3D15.002C.0002.7701][.3D8E.0020.0002][.3DFC.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F96D -2F945 ; [.3D18.0033.0002.771E][.3D9E.0020.0002][.3DEB.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F945 -FAAA ; [.3D1A.0023.0002.7740][.3D8A.0020.0002][.3DE8.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FAAA -2F94A ; [.3D18.0034.0002.778B][.3D9E.0020.0002][.3DEB.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F94A -F9CE ; [.3D11.002C.0002.786B][.3D9B.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9CE -F93B ; [.3D11.0021.0002.788C][.3D92.0020.0002][.3DE8.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F93B -2F94F ; [.3D11.0021.0002.788C][.3D92.0020.0002][.3DE8.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F94F -FA4B ; [.3D13.0038.0002.7891][.3D9E.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA4B -F947 ; [.3D11.0024.0002.78CA][.3D95.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F947 -F964 ; [.3D13.0032.0002.78FB][.3D8A.0020.0002][.3DEB.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F964 -F985 ; [.3D11.002B.0002.792A][.3D90.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F985 -FA4C ; [.3D15.0046.0002.793E][.3D8A.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA4C -FA4E ; [.3D0C.004C.0002.7948][.3D9E.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA4E -FA4D ; [.3D18.0035.0002.7949][.3D9E.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA4D -FA4F ; [.3D17.0032.0002.7950][.3D97.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA4F -FA50 ; [.3D18.0039.0002.7956][.3D92.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA50 -2F953 ; [.3D18.0039.0002.7956][.3D92.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F953 -FA51 ; [.3D1A.0023.0002.795D][.3D97.0020.0002][.3DE8.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA51 -FA19 ; [.3D15.002C.0002.795E][.3D9E.0020.0002][.3DEB.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA19 -FA1A ; [.3D15.0037.0002.7965][.3D8A.0020.0002][.3DFC.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA1A -F93C ; [.3D11.0022.0002.797F][.3D92.0020.0002][.3DE8.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F93C -FA52 ; [.3D1E.0027.0002.798D][.3D93.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA52 -FA53 ; [.3D18.0044.0002.798E][.3D8E.0020.0002][.3DFC.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA53 -FA1B ; [.3D13.0028.0002.798F][.3D92.0020.0002][.3DE8.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA1B -2F956 ; [.3D13.0028.0002.798F][.3D92.0020.0002][.3DE8.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F956 -F9B6 ; [.3D11.0023.0002.79AE][.3D91.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9B6 -F995 ; [.3D0E.0023.0002.79CA][.3D90.0020.0002][.3DEB.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F995 -2F957 ; [.3D1A.0024.0002.79EB][.3D97.0020.0002][.3DEF.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F957 -F956 ; [.3D11.0023.0002.7A1C][.3D9C.0020.0002][.3DFC.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F956 -FA54 ; [.3D0C.0025.0002.7A40][.3D92.0020.0002][.3DE8.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA54 -2F959 ; [.3D0C.0025.0002.7A40][.3D92.0020.0002][.3DE8.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F959 -FA55 ; [.3D0F.0022.0002.7A81][.3D92.0020.0002][.3DEF.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA55 -F9F7 ; [.3D11.0022.0002.7ACB][.3D9E.0020.0002][.3DF8.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9F7 -F9F8 ; [.3D11.0023.0002.7B20][.3D9E.0020.0002][.3DF8.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9F8 -FA56 ; [.3D18.0027.0002.7BC0][.3D8E.0020.0002][.3DEF.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA56 -FAAD ; [.3D18.0027.0002.7BC0][.3D8E.0020.0002][.3DEF.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FAAD -2F962 ; [.3D18.003D.0002.7BC6][.3D8E.0020.0002][.3DEB.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F962 -2F963 ; [.3D1A.0026.0002.7BC9][.3D97.0020.0002][.3DE8.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F963 -F9A6 ; [.3D11.0025.0002.7C3E][.3D90.0020.0002][.3DF7.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9A6 -F944 ; [.3D11.0026.0002.7C60][.3D92.0020.0002][.3DFC.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F944 -F9F9 ; [.3D11.0024.0002.7C92][.3D9E.0020.0002][.3DF8.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9F9 -FA1D ; [.3D18.0047.0002.7CBE][.3D8E.0020.0002][.3DFC.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA1D -FA03 ; [.3D0F.0029.0002.7CD6][.3D8A.0020.0002][.3DFC.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA03 -F97B ; [.3D11.0029.0002.7CE7][.3D8C.0020.0002][.3DFC.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F97B -2F96A ; [.3D0C.004F.0002.7D00][.3D9E.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F96A -F9CF ; [.3D0E.0022.0002.7D10][.3D9B.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9CF -F96A ; [.3D15.0023.0002.7D22][.3D8B.0020.0002][.3DE8.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F96A -F94F ; [.3D11.0028.0002.7D2F][.3D97.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F94F -FAAF ; [.3D18.0063.0002.7D5B][.3D92.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FAAF -2F96C ; [.3D13.0034.0002.7D63][.3D90.0020.0002][.3DFC.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F96C -F93D ; [.3D11.0023.0002.7DA0][.3D92.0020.0002][.3DE8.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F93D -F957 ; [.3D11.0024.0002.7DBE][.3D9C.0020.0002][.3DFC.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F957 -2F96E ; [.3D1A.0030.0002.7DC7][.3D9E.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F96E -F996 ; [.3D11.0027.0002.7DF4][.3D90.0020.0002][.3DEB.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F996 -FA57 ; [.3D11.0027.0002.7DF4][.3D90.0020.0002][.3DEB.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA57 -FAB0 ; [.3D11.0027.0002.7DF4][.3D90.0020.0002][.3DEB.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FAB0 -FA58 ; [.3D18.0036.0002.7E09][.3D9E.0020.0002][.3DEB.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA58 -F950 ; [.3D11.0029.0002.7E37][.3D97.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F950 -FA59 ; [.3D13.0026.0002.7E41][.3D8E.0020.0002][.3DEB.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA59 -2F970 ; [.3D15.0052.0002.7E45][.3D92.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F970 -FAB1 ; [.3D13.0035.0002.7F3E][.3D90.0020.0002][.3DFC.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FAB1 -FA5A ; [.3D15.0035.0002.7F72][.3D8E.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA5A -F9E6 ; [.3D11.0031.0002.7F79][.3D9E.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9E6 -F90F ; [.3D11.0024.0002.7F85][.3D8A.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F90F -F9AF ; [.3D11.0029.0002.7F9A][.3D90.0020.0002][.3DFC.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9AF -FA1E ; [.3D17.0036.0002.7FBD][.3D97.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA1E -2F979 ; [.3D0C.005A.0002.7FFA][.3D92.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F979 -F934 ; [.3D11.0029.0002.8001][.3D92.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F934 -FA5B ; [.3D18.0033.0002.8005][.3D8A.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA5B -FAB2 ; [.3D18.0033.0002.8005][.3D8A.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FAB2 -2F97A ; [.3D18.0033.0002.8005][.3D8A.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F97A -F9B0 ; [.3D11.002B.0002.8046][.3D90.0020.0002][.3DFC.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9B0 -F997 ; [.3D11.0028.0002.806F][.3D90.0020.0002][.3DEB.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F997 -2F97F ; [.3D1A.0028.0002.8070][.3D92.0020.0002][.3DFC.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F97F -F945 ; [.3D11.0027.0002.807E][.3D92.0020.0002][.3DFC.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F945 -F953 ; [.3D11.0022.0002.808B][.3D9C.0020.0002][.3DE8.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F953 -2F8D6 ; [.3D0E.0023.0002.80AD][.3D97.0020.0002][.3DEF.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F8D6 -2F982 ; [.3D17.0024.0002.80B2][.3D9B.0020.0002][.3DE8.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F982 -2F985 ; [.3D13.003F.0002.813E][.3D9E.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F985 -F926 ; [.3D11.0022.0002.81D8][.3D8A.0020.0002][.3DF8.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F926 -F9F6 ; [.3D11.0024.0002.81E8][.3D9E.0020.0002][.3DF7.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9F6 -FA5C ; [.3D1A.002A.0002.81ED][.3D9A.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA5C -2F893 ; [.3D17.002E.0002.8201][.3D90.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F893 -2F98B ; [.3D17.002E.0002.8201][.3D90.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F98B -F97C ; [.3D11.002A.0002.826F][.3D8C.0020.0002][.3DFC.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F97C -2F990 ; [.3D17.0037.0002.828B][.3D97.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F990 -2F991 ; [.3D18.003B.0002.829D][.3D9E.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F991 -2F993 ; [.3D1E.0029.0002.82B1][.3D93.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F993 -2F994 ; [.3D13.0035.0002.82B3][.3D8A.0020.0002][.3DFC.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F994 -2F995 ; [.3D17.0029.0002.82BD][.3D8A.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F995 -F974 ; [.3D17.0023.0002.82E5][.3D8C.0020.0002][.3DE8.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F974 -2F998 ; [.3D17.0023.0002.82E5][.3D8C.0020.0002][.3DE8.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F998 -2F996 ; [.3D0C.003A.0002.82E6][.3D92.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F996 -2F999 ; [.3D1A.002E.0002.831D][.3D8B.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F999 -2F99C ; [.3D17.004C.0002.8323][.3D92.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F99C -F9FE ; [.3D0F.0022.0002.8336][.3D8A.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9FE -FAB3 ; [.3D1E.0034.0002.8352][.3D93.0020.0002][.3DFC.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FAB3 -2F99D ; [.3D12.002A.0002.83BD][.3D8A.0020.0002][.3DFC.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F99D -F93E ; [.3D11.0024.0002.83C9][.3D92.0020.0002][.3DE8.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F93E -2F9A1 ; [.3D0C.0023.0002.83CA][.3D97.0020.0002][.3DE8.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F9A1 -2F9A2 ; [.3D0C.0025.0002.83CC][.3D9B.0020.0002][.3DEB.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F9A2 -2F9A3 ; [.3D1A.0029.0002.83DC][.3D8B.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F9A3 -FAB4 ; [.3D1E.002A.0002.83EF][.3D93.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FAB4 -F958 ; [.3D11.0025.0002.83F1][.3D9C.0020.0002][.3DFC.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F958 -F918 ; [.3D11.0025.0002.843D][.3D8A.0020.0002][.3DE8.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F918 -F96E ; [.3D17.0023.0002.8449][.3D90.0020.0002][.3DF8.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F96E -FA5F ; [.3D18.0034.0002.8457][.3D8E.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA5F -2F99F ; [.3D18.0034.0002.8457][.3D8E.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F99F -F999 ; [.3D11.0029.0002.84EE][.3D90.0020.0002][.3DEB.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F999 -2F9A8 ; [.3D1D.002A.0002.84F1][.3D90.0020.0002][.3DFC.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F9A8 -F9C2 ; [.3D11.002A.0002.84FC][.3D96.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9C2 -2F9AC ; [.3D17.0062.0002.8564][.3D9B.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F9AC -F923 ; [.3D11.0028.0002.85CD][.3D8A.0020.0002][.3DF7.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F923 -F9F0 ; [.3D11.0025.0002.85FA][.3D9E.0020.0002][.3DEB.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9F0 -F935 ; [.3D11.002A.0002.8606][.3D92.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F935 -F91F ; [.3D11.0027.0002.862D][.3D8A.0020.0002][.3DEB.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F91F -F910 ; [.3D11.0025.0002.863F][.3D8A.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F910 -2F9B3 ; [.3D1E.0023.0002.8650][.3D8A.0020.0002][.3DE8.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F9B3 -F936 ; [.3D11.002B.0002.865C][.3D92.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F936 -2F9B4 ; [.3D11.002B.0002.865C][.3D92.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F9B4 -2F9B5 ; [.3D1E.0025.0002.8667][.3D9B.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F9B5 -2F9B7 ; [.3D1A.0034.0002.86A9][.3D9E.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F9B7 -2F9BC ; [.3D18.0026.0002.8728][.3D8E.0020.0002][.3DF8.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F9BC -F911 ; [.3D11.0026.0002.87BA][.3D8A.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F911 -F927 ; [.3D11.0023.0002.881F][.3D8A.0020.0002][.3DF8.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F927 -FA08 ; [.3D1E.0025.0002.884C][.3D8B.0020.0002][.3DFC.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA08 -2F9C4 ; [.3D17.0030.0002.8863][.3D9D.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F9C4 -F9A0 ; [.3D11.0026.0002.88C2][.3D90.0020.0002][.3DEF.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9A0 -F9E7 ; [.3D11.0034.0002.88CF][.3D9E.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9E7 -F9E8 ; [.3D11.0035.0002.88E1][.3D9E.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9E8 -F912 ; [.3D11.0027.0002.88F8][.3D8A.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F912 -FA60 ; [.3D0C.0028.0002.8910][.3D8A.0020.0002][.3DEF.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA60 -FAB6 ; [.3D0C.0034.0002.8941][.3D8A.0020.0002][.3DFC.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FAB6 -F924 ; [.3D11.0029.0002.8964][.3D8A.0020.0002][.3DF7.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F924 -FAB7 ; [.3D13.002D.0002.8986][.3D92.0020.0002][.3DE8.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FAB7 -FA0A ; [.3D0C.0028.0002.898B][.3D90.0020.0002][.3DEB.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA0A -FA61 ; [.3D15.0037.0002.8996][.3D9E.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA61 -FAB8 ; [.3D15.0037.0002.8996][.3D9E.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FAB8 -2F9CF ; [.3D15.0031.0002.8AA0][.3D8E.0020.0002][.3DFC.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F9CF -F96F ; [.3D15.002B.0002.8AAA][.3D8E.0020.0002][.3DEF.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F96F -F9A1 ; [.3D15.002B.0002.8AAA][.3D8E.0020.0002][.3DEF.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9A1 -FAB9 ; [.3D18.0046.0002.8ABF][.3D92.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FAB9 -FABB ; [.3D1A.0026.0002.8ACB][.3D8E.0020.0002][.3DFC.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FABB -F97D ; [.3D11.002B.0002.8AD2][.3D8C.0020.0002][.3DFC.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F97D -F941 ; [.3D11.0021.0002.8AD6][.3D92.0020.0002][.3DEB.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F941 -FABE ; [.3D17.0046.0002.8AED][.3D9B.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FABE -2F9D0 ; [.3D17.0046.0002.8AED][.3D9B.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F9D0 -FA22 ; [.3D18.0030.0002.8AF8][.3D8F.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA22 -FABA ; [.3D18.0030.0002.8AF8][.3D8F.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FABA -F95D ; [.3D0E.0021.0002.8AFE][.3D8A.0020.0002][.3DE8.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F95D -FABD ; [.3D0E.0021.0002.8AFE][.3D8A.0020.0002][.3DE8.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FABD -FA62 ; [.3D17.0022.0002.8B01][.3D8A.0020.0002][.3DEF.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA62 -FABC ; [.3D17.0022.0002.8B01][.3D8A.0020.0002][.3DEF.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FABC -FA63 ; [.3D0C.002D.0002.8B39][.3D9C.0020.0002][.3DEB.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA63 -FABF ; [.3D0C.002D.0002.8B39][.3D9C.0020.0002][.3DEB.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FABF -F9FC ; [.3D15.002C.0002.8B58][.3D9E.0020.0002][.3DE8.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9FC -F95A ; [.3D0F.002A.0002.8B80][.3D92.0020.0002][.3DE8.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F95A -FAC0 ; [.3D13.0023.0002.8B8A][.3D90.0020.0002][.3DEB.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FAC0 -2F9D1 ; [.3D13.0023.0002.8B8A][.3D90.0020.0002][.3DEB.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F9D1 -F900 ; [.3D0C.0057.0002.8C48][.3D9E.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F900 -2F9D2 ; [.3D15.003B.0002.8C55][.3D9E.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F9D2 -2F9D4 ; [.3D0C.002E.0002.8CAB][.3D93.0020.0002][.3DEB.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F9D4 -2F9D5 ; [.3D13.0032.0002.8CC1][.3D97.0020.0002][.3DEB.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F9D5 -F948 ; [.3D11.0025.0002.8CC2][.3D95.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F948 -F903 ; [.3D0C.0039.0002.8CC8][.3D8A.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F903 -FA64 ; [.3D13.002D.0002.8CD3][.3D9E.0020.0002][.3DEB.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA64 -FA65 ; [.3D18.002B.0002.8D08][.3D9C.0020.0002][.3DFC.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA65 -FAC1 ; [.3D18.002B.0002.8D08][.3D9C.0020.0002][.3DFC.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FAC1 -2F9D6 ; [.3D0C.0039.0002.8D1B][.3D92.0020.0002][.3DFC.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F9D6 -2F9D7 ; [.3D0C.0058.0002.8D77][.3D9E.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F9D7 -2F9DA ; [.3D13.0027.0002.8DCB][.3D8A.0020.0002][.3DEF.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F9DA -F937 ; [.3D11.002C.0002.8DEF][.3D92.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F937 -F902 ; [.3D1A.002D.0002.8ECA][.3D8A.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F902 -F998 ; [.3D11.002A.0002.8F26][.3D90.0020.0002][.3DEB.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F998 -F9D7 ; [.3D11.0026.0002.8F2A][.3D9B.0020.0002][.3DEB.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9D7 -FAC2 ; [.3D15.004F.0002.8F38][.3D97.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FAC2 -2F9DF ; [.3D15.004F.0002.8F38][.3D97.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F9DF -FA07 ; [.3D13.002F.0002.8F3B][.3D92.0020.0002][.3DE8.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA07 -F98D ; [.3D11.0026.0002.8F62][.3D90.0020.0002][.3DE8.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F98D -F971 ; [.3D18.003E.0002.8FB0][.3D9E.0020.0002][.3DEB.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F971 -F99A ; [.3D11.002B.0002.9023][.3D90.0020.0002][.3DEB.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F99A -FA25 ; [.3D17.0027.0002.9038][.3D9E.0020.0002][.3DEF.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA25 -FA67 ; [.3D17.0027.0002.9038][.3D9E.0020.0002][.3DEF.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA67 -FAC3 ; [.3D18.0041.0002.9072][.3D9E.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FAC3 -F9C3 ; [.3D11.002B.0002.907C][.3D96.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9C3 -F913 ; [.3D11.0028.0002.908F][.3D8A.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F913 -FA2E ; [.3D11.0028.0002.90DE][.3D8A.0020.0002][.3DFC.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA2E -FA26 ; [.3D0F.0045.0002.90FD][.3D92.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA26 -F919 ; [.3D11.0026.0002.916A][.3D8A.0020.0002][.3DE8.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F919 -F9B7 ; [.3D11.0024.0002.91B4][.3D91.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9B7 -F9E9 ; [.3D11.0036.0002.91CC][.3D9E.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9E9 -F97E ; [.3D11.002D.0002.91CF][.3D8C.0020.0002][.3DFC.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F97E -F90A ; [.3D0C.0021.0002.91D1][.3D9E.0020.0002][.3DF7.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F90A -F9B1 ; [.3D11.002D.0002.9234][.3D90.0020.0002][.3DFC.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9B1 -2F9E7 ; [.3D13.002F.0002.9238][.3D8A.0020.0002][.3DEF.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F9E7 -2F9EA ; [.3D13.0039.0002.927C][.3D90.0020.0002][.3DFC.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F9EA -2F9E8 ; [.3D1E.003F.0002.92D7][.3D90.0020.0002][.3DEB.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F9E8 -F93F ; [.3D11.0025.0002.9304][.3D92.0020.0002][.3DE8.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F93F -F99B ; [.3D11.002C.0002.934A][.3D90.0020.0002][.3DEB.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F99B -2F9EE ; [.3D0C.0033.0002.958B][.3D8B.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F9EE -F986 ; [.3D11.002E.0002.95AD][.3D90.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F986 -F9C6 ; [.3D17.0031.0002.962E][.3D93.0020.0002][.3DEB.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9C6 -F951 ; [.3D11.002D.0002.964B][.3D97.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F951 -FA09 ; [.3D0C.0037.0002.964D][.3D8A.0020.0002][.3DFC.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA09 -F959 ; [.3D11.0026.0002.9675][.3D9C.0020.0002][.3DFC.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F959 -F9D3 ; [.3D11.0023.0002.9678][.3D9B.0020.0002][.3DE8.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9D3 -FAC6 ; [.3D18.004E.0002.967C][.3D8E.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FAC6 -F9DC ; [.3D11.0021.0002.9686][.3D9B.0020.0002][.3DFC.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9DC -F9F1 ; [.3D11.0027.0002.96A3][.3D9E.0020.0002][.3DEB.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9F1 -FA2F ; [.3D11.0025.0002.96B7][.3D91.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA2F -F9B8 ; [.3D11.0026.0002.96B8][.3D91.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9B8 -F9EA ; [.3D11.0038.0002.96E2][.3D9E.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9EA -FA68 ; [.3D0E.0023.0002.96E3][.3D8A.0020.0002][.3DEB.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA68 -FAC7 ; [.3D0E.0023.0002.96E3][.3D8A.0020.0002][.3DEB.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FAC7 -F9B2 ; [.3D11.002E.0002.96F6][.3D90.0020.0002][.3DFC.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9B2 -F949 ; [.3D11.0028.0002.96F7][.3D95.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F949 -2F9F5 ; [.3D17.0031.0002.9723][.3D97.0020.0002][.3DEB.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F9F5 -F938 ; [.3D11.002E.0002.9732][.3D92.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F938 -F9B3 ; [.3D11.002F.0002.9748][.3D90.0020.0002][.3DFC.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9B3 -FA1C ; [.3D18.0054.0002.9756][.3D8E.0020.0002][.3DFC.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA1C -FAC8 ; [.3D18.0054.0002.9756][.3D8E.0020.0002][.3DFC.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FAC8 -2F9FA ; [.3D1D.0034.0002.97E0][.3D9E.0020.0002][.3DEF.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F9FA -FA69 ; [.3D1E.0026.0002.97FF][.3D8C.0020.0002][.3DFC.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA69 -FACA ; [.3D1E.0026.0002.97FF][.3D8C.0020.0002][.3DFC.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FACA -F9B4 ; [.3D11.0030.0002.9818][.3D90.0020.0002][.3DFC.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9B4 -FA6A ; [.3D13.002E.0002.983B][.3D9E.0020.0002][.3DEB.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA6A -FACC ; [.3D13.002E.0002.983B][.3D9E.0020.0002][.3DEB.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FACC -F9D0 ; [.3D11.002E.0002.985E][.3D9B.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9D0 -2FA02 ; [.3D0C.005B.0002.98E2][.3D9E.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2FA02 -FA2A ; [.3D13.0039.0002.98EF][.3D8A.0020.0002][.3DEB.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA2A -FA2B ; [.3D15.005A.0002.98FC][.3D8A.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA2B -FA2C ; [.3D0C.0030.0002.9928][.3D93.0020.0002][.3DEB.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA2C -F91A ; [.3D11.0027.0002.99F1][.3D8A.0020.0002][.3DE8.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F91A -F987 ; [.3D11.0030.0002.9A6A][.3D90.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F987 -FACD ; [.3D18.004C.0002.9B12][.3D9E.0020.0002][.3DEB.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FACD -2FA0A ; [.3D18.004C.0002.9B12][.3D9E.0020.0002][.3DEB.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2FA0A -F939 ; [.3D11.002F.0002.9B6F][.3D92.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F939 -F9F2 ; [.3D11.0028.0002.9C57][.3D9E.0020.0002][.3DEB.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9F2 -FA2D ; [.3D1E.0025.0002.9DB4][.3D8A.0020.0002][.3DE8.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA2D -F93A ; [.3D11.0030.0002.9DFA][.3D92.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F93A -F920 ; [.3D11.0028.0002.9E1E][.3D8A.0020.0002][.3DEB.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F920 -F940 ; [.3D11.0026.0002.9E7F][.3D92.0020.0002][.3DE8.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F940 -F988 ; [.3D11.0031.0002.9E97][.3D90.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F988 -F9F3 ; [.3D11.0029.0002.9E9F][.3D9E.0020.0002][.3DEB.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9F3 -2FA15 ; [.3D12.0028.0002.9EBB][.3D8A.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2FA15 -F989 ; [.3D11.0032.0002.9ECE][.3D90.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F989 -2FA1C ; [.3D13.004A.0002.9F3B][.3D9E.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2FA1C -F9C4 ; [.3D11.0021.0002.9F8D][.3D96.0020.0002][.3DFC.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9C4 -FAD9 ; [.3D11.002E.0002.9F8E][.3D92.0020.0002][.3DFC.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FAD9 -F907 ; [.3D0C.0056.0002.9F9C][.3D97.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F907 -F908 ; [.3D0C.0056.0002.9F9C][.3D97.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F908 -FACE ; [.3D0C.0056.0002.9F9C][.3D97.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FACE + entry => <<'ENTRY', # for DUCET v13.0.0 +F967 ; [.417C.0021.0002.4E0D][.4200.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F967 +FA70 ; [.417C.0032.0002.4E26][.41F9.0020.0002][.4265.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA70 +F905 ; [.4175.0021.0002.4E32][.41FB.0020.0002][.4266.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F905 +2F801 ; [.4187.0021.0002.4E38][.41FC.0020.0002][.4254.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F801 +F95E ; [.4178.0021.0002.4E39][.41F3.0020.0002][.4254.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F95E +F91B ; [.417A.0021.0002.4E82][.41F3.0020.0002][.4254.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F91B +F9BA ; [.417A.0021.0002.4E86][.41FF.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9BA +F977 ; [.417A.0021.0002.4EAE][.41F5.0020.0002][.4265.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F977 +F9FD ; [.417E.0021.0002.4EC0][.4207.0020.0002][.4261.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9FD +F9A8 ; [.417A.0021.0002.4EE4][.41F9.0020.0002][.4265.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9A8 +F92D ; [.417A.0021.0002.4F86][.41F4.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F92D +F9B5 ; [.417A.0021.0002.4F8B][.41FA.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9B5 +FA30 ; [.417B.0021.0002.4FAE][.41FB.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA30 +2F805 ; [.417B.0021.0002.4FAE][.41FB.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F805 +2F806 ; [.4185.0023.0002.4FBB][.41F3.0020.0002][.4258.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F806 +F965 ; [.4186.0021.0002.4FBF][.41F9.0020.0002][.4254.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F965 +2F807 ; [.417C.0022.0002.5002][.41F9.0020.0002][.4265.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F807 +F9D4 ; [.417A.0022.0002.502B][.4204.0020.0002][.4254.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9D4 +2F809 ; [.417C.0022.0002.5099][.4207.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F809 +2F80B ; [.417E.0023.0002.50CF][.41F3.0020.0002][.4265.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F80B +F9BB ; [.417A.0022.0002.50DA][.41FF.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9BB +FA31 ; [.417E.0023.0002.50E7][.4205.0020.0002][.4265.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA31 +2F80A ; [.417E.0023.0002.50E7][.4205.0020.0002][.4265.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F80A +FA0C ; [.4180.0021.0002.5140][.41FB.0020.0002][.4258.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA0C +FA74 ; [.4183.0021.0002.5145][.4200.0020.0002][.4265.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA74 +FA32 ; [.417B.0021.0002.514D][.41F9.0020.0002][.4254.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA32 +2F80E ; [.417B.0021.0002.514D][.41F9.0020.0002][.4254.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F80E +2F814 ; [.4177.0022.0002.5167][.41F4.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F814 +FA72 ; [.4181.0024.0002.5168][.41F7.0020.0002][.4254.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA72 +F978 ; [.417A.0023.0002.5169][.41F5.0020.0002][.4265.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F978 +F9D1 ; [.417A.0021.0002.516D][.4204.0020.0002][.4251.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9D1 +2F811 ; [.4175.0026.0002.5177][.4200.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F811 +FA75 ; [.4175.0024.0002.5180][.4207.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA75 +2F815 ; [.4181.0021.0002.518D][.41F4.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F815 +2F8D2 ; [.417B.0022.0002.5192][.41FB.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F8D2 +2F8D3 ; [.417B.0022.0002.5195][.41F9.0020.0002][.4254.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F8D3 +2F817 ; [.4180.0023.0002.5197][.41FF.0020.0002][.4265.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F817 +2F818 ; [.4180.003B.0002.51A4][.4201.0020.0002][.4254.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F818 +2F81A ; [.4178.0022.0002.51AC][.41FB.0020.0002][.4265.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F81A +F92E ; [.417A.0021.0002.51B7][.41F4.0020.0002][.4265.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F92E +F979 ; [.417A.0024.0002.51C9][.41F5.0020.0002][.4265.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F979 +F955 ; [.417A.0021.0002.51CC][.4205.0020.0002][.4265.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F955 +F954 ; [.417A.0021.0002.51DC][.4205.0020.0002][.4260.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F954 +FA15 ; [.4187.0022.0002.51DE][.4206.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA15 +2F81E ; [.4180.0023.0002.5203][.4207.0020.0002][.4254.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F81E +FA00 ; [.4181.0021.0002.5207][.41F7.0020.0002][.4258.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA00 +2F850 ; [.4181.0021.0002.5207][.41F7.0020.0002][.4258.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F850 +F99C ; [.417A.0022.0002.5217][.41F9.0020.0002][.4258.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F99C +F9DD ; [.417A.0022.0002.5229][.4207.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9DD +F9FF ; [.4181.0022.0002.523A][.41F3.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9FF +2F820 ; [.4175.0021.0002.523B][.41F3.0020.0002][.4251.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F820 +2F822 ; [.4187.0021.0002.5272][.41F3.0020.0002][.4258.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F822 +2F823 ; [.417E.002D.0002.5277][.41F3.0020.0002][.4254.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F823 +F9C7 ; [.417A.0021.0002.5289][.4204.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9C7 +F98A ; [.417A.0021.0002.529B][.41F9.0020.0002][.4251.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F98A +F99D ; [.417A.0023.0002.52A3][.41F9.0020.0002][.4258.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F99D +FA76 ; [.4180.0024.0002.52C7][.41FF.0020.0002][.4265.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA76 +2F825 ; [.4180.0024.0002.52C7][.41FF.0020.0002][.4265.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F825 +FA33 ; [.417B.0023.0002.52C9][.41F9.0020.0002][.4254.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA33 +2F826 ; [.417B.0023.0002.52C9][.41F9.0020.0002][.4254.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F826 +F952 ; [.417A.0021.0002.52D2][.4205.0020.0002][.4251.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F952 +F92F ; [.417A.0021.0002.52DE][.41FB.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F92F +FA34 ; [.4175.0023.0002.52E4][.4205.0020.0002][.4254.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA34 +2F827 ; [.4175.0023.0002.52E4][.4205.0020.0002][.4254.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F827 +F97F ; [.417A.0023.0002.52F5][.41F9.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F97F +FA77 ; [.4181.0022.0002.52FA][.41F3.0020.0002][.4251.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA77 +2F828 ; [.4181.0022.0002.52FA][.41F3.0020.0002][.4251.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F828 +2F829 ; [.4186.0022.0002.5305][.41FB.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F829 +F963 ; [.417C.0021.0002.5317][.4200.0020.0002][.4251.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F963 +2F82B ; [.417C.0021.0002.5317][.4200.0020.0002][.4251.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F82B +F9EB ; [.4177.0021.0002.533F][.4207.0020.0002][.4251.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9EB +2F82C ; [.4187.0021.0002.5349][.4202.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F82C +FA35 ; [.417C.0025.0002.5351][.4207.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA35 +2F82D ; [.417C.0025.0002.5351][.4207.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F82D +2F82E ; [.417C.0022.0002.535A][.41F3.0020.0002][.4251.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F82E +2F82F ; [.4181.0022.0002.5373][.4205.0020.0002][.4251.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F82F +F91C ; [.417A.0022.0002.5375][.41F3.0020.0002][.4254.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F91C +2F830 ; [.4181.0021.0002.537D][.4205.0020.0002][.4251.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F830 +2F831 ; [.4175.0028.0002.537F][.41F9.0020.0002][.4265.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F831 +2F832 ; [.4175.0028.0002.537F][.41F9.0020.0002][.4265.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F832 +2F833 ; [.4175.0028.0002.537F][.41F9.0020.0002][.4265.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F833 +F96B ; [.4183.0022.0002.53C3][.41F3.0020.0002][.4260.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F96B +2F836 ; [.4175.0022.0002.53CA][.4205.0020.0002][.4261.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F836 +2F837 ; [.417E.005E.0002.53DF][.4200.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F837 +F906 ; [.4175.002A.0002.53E5][.4200.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F906 +2F839 ; [.4175.0021.0002.53EB][.4204.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F839 +2F83A ; [.4181.0022.0002.53F1][.4207.0020.0002][.4258.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F83A +F9DE ; [.417A.0024.0002.540F][.4207.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9DE +F9ED ; [.417A.0021.0002.541D][.4207.0020.0002][.4254.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9ED +2F83D ; [.4187.0021.0002.5438][.4205.0020.0002][.4261.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F83D +F980 ; [.417A.0024.0002.5442][.41F9.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F980 +2F83E ; [.4181.0026.0002.5448][.41F7.0020.0002][.4265.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F83E +2F83F ; [.4181.0028.0002.5468][.4200.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F83F +2F840 ; [.4180.0031.0002.54A2][.41F3.0020.0002][.4251.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F840 +F99E ; [.4180.0025.0002.54BD][.4207.0020.0002][.4254.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F99E +2F842 ; [.4178.0021.0002.5510][.41F3.0020.0002][.4265.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F842 +2F843 ; [.4175.0022.0002.5553][.41FA.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F843 +2F844 ; [.4187.0024.0002.5563][.41F3.0020.0002][.4260.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F844 +2F845 ; [.417E.0024.0002.5584][.41F7.0020.0002][.4254.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F845 +2F846 ; [.417E.0024.0002.5584][.41F7.0020.0002][.4254.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F846 +F90B ; [.417A.0021.0002.5587][.41F3.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F90B +FA7A ; [.4187.0022.0002.5599][.4202.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA7A +2F847 ; [.4187.0022.0002.5599][.4202.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F847 +FA36 ; [.4175.0022.0002.559D][.41F3.0020.0002][.4258.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA36 +FA78 ; [.4175.0022.0002.559D][.41F3.0020.0002][.4258.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA78 +2F848 ; [.4176.0021.0002.55AB][.4207.0020.0002][.4251.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F848 +FA7B ; [.4180.0022.0002.55E2][.41FB.0020.0002][.4258.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA7B +FA37 ; [.4185.0022.0002.5606][.41F3.0020.0002][.4254.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA37 +2F84C ; [.4185.0022.0002.5606][.41F3.0020.0002][.4254.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F84C +FA38 ; [.4175.0026.0002.5668][.4207.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA38 +2F84F ; [.417C.0023.0002.5674][.4200.0020.0002][.4254.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F84F +F9A9 ; [.417A.0023.0002.56F9][.41F9.0020.0002][.4265.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9A9 +2F84B ; [.4178.0024.0002.5716][.41FB.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F84B +2F855 ; [.4187.0024.0002.578B][.41F9.0020.0002][.4265.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F855 +2F852 ; [.417E.0021.0002.57CE][.41F7.0020.0002][.4265.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F852 +2F853 ; [.417E.0021.0002.57F4][.4207.0020.0002][.4251.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F853 +2F857 ; [.417C.0023.0002.5831][.41FB.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F857 +FA39 ; [.417C.0033.0002.5840][.41F9.0020.0002][.4265.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA39 +FA10 ; [.4183.0022.0002.585A][.41FB.0020.0002][.4265.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA10 +FA7C ; [.4183.0022.0002.585A][.41FB.0020.0002][.4265.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA7C +F96C ; [.417E.0021.0002.585E][.41F4.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F96C +FA3A ; [.417B.0021.0002.58A8][.4200.0020.0002][.4251.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA3A +FA7D ; [.417C.0024.0002.58B3][.4200.0020.0002][.4254.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA7D +F94A ; [.417A.0021.0002.58D8][.4200.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F94A +F942 ; [.417A.0021.0002.58DF][.41FB.0020.0002][.4265.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F942 +2F85C ; [.417C.0032.0002.5906][.41FB.0020.0002][.4265.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F85C +2F85D ; [.4178.0021.0002.591A][.41F3.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F85D +2F85E ; [.417B.0021.0002.5922][.41FB.0020.0002][.4265.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F85E +FA7E ; [.4180.0024.0002.5944][.41F7.0020.0002][.4260.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA7E +F90C ; [.4177.0023.0002.5948][.41F4.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F90C +F909 ; [.4175.0024.0002.5951][.41FA.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F909 +FA7F ; [.417C.0025.0002.5954][.4200.0020.0002][.4254.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA7F +2F85F ; [.417E.0030.0002.5962][.41F3.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F85F +F981 ; [.4177.0021.0002.5973][.41F9.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F981 +2F862 ; [.4187.0026.0002.59EC][.4206.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F862 +2F863 ; [.4180.002C.0002.5A1B][.41FB.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F863 +2F864 ; [.4185.0030.0002.5A27][.41F4.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F864 +FA80 ; [.417C.0027.0002.5A62][.4207.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA80 +2F866 ; [.417C.002B.0002.5A66][.4200.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F866 +2F986 ; [.4180.0025.0002.5AB5][.4207.0020.0002][.4265.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F986 +2F869 ; [.4180.0041.0002.5B08][.41FF.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F869 +FA81 ; [.4181.003C.0002.5B28][.41F3.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA81 +2F86A ; [.417A.0029.0002.5B3E][.41F3.0020.0002][.4254.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F86A +2F86B ; [.417A.0029.0002.5B3E][.41F3.0020.0002][.4254.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F86B +FA04 ; [.4178.0021.0002.5B85][.41F4.0020.0002][.4251.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA04 +2F86D ; [.4180.0029.0002.5BC3][.4201.0020.0002][.4254.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F86D +2F86E ; [.4183.003B.0002.5BD8][.4207.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F86E +F95F ; [.4177.0021.0002.5BE7][.41F9.0020.0002][.4265.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F95F +F9AA ; [.4177.0021.0002.5BE7][.41F9.0020.0002][.4265.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9AA +2F86F ; [.4177.0021.0002.5BE7][.41F9.0020.0002][.4265.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F86F +F9BC ; [.417A.0023.0002.5BEE][.41FF.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9BC +F9BD ; [.4177.0021.0002.5C3F][.41FF.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9BD +2F877 ; [.4178.0028.0002.5C60][.41FB.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F877 +F94B ; [.417A.0023.0002.5C62][.4200.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F94B +FA3B ; [.4183.0021.0002.5C64][.4205.0020.0002][.4265.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA3B +F9DF ; [.417A.0026.0002.5C65][.4207.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9DF +2F879 ; [.417E.002A.0002.5CC0][.4200.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F879 +F9D5 ; [.417A.0023.0002.5D19][.4204.0020.0002][.4254.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9D5 +F921 ; [.417A.0021.0002.5D50][.41F3.0020.0002][.4260.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F921 +F9AB ; [.417A.0025.0002.5DBA][.41F9.0020.0002][.4265.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9AB +2F881 ; [.417E.0021.0002.5DE1][.4200.0020.0002][.4254.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F881 +2F882 ; [.417E.0027.0002.5DE2][.41FB.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F882 +2F884 ; [.417E.0022.0002.5DFD][.41FB.0020.0002][.4254.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F884 +2F885 ; [.417E.0029.0002.5E28][.41F8.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F885 +2F886 ; [.417B.0025.0002.5E3D][.41FB.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F886 +F98E ; [.4177.0021.0002.5E74][.41F9.0020.0002][.4254.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F98E +FA01 ; [.4178.002B.0002.5EA6][.41FB.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA01 +2F88C ; [.417C.0052.0002.5EB3][.4207.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F88C +2F88D ; [.417E.0025.0002.5EB6][.41F7.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F88D +F9A2 ; [.417A.0021.0002.5EC9][.41F9.0020.0002][.4260.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9A2 +F928 ; [.417A.0021.0002.5ECA][.41F3.0020.0002][.4265.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F928 +2F88E ; [.417A.0021.0002.5ECA][.41F3.0020.0002][.4265.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F88E +FA0B ; [.4175.0021.0002.5ED3][.41FC.0020.0002][.4251.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA0B +F982 ; [.417A.0025.0002.5EEC][.41F9.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F982 +F943 ; [.417A.0022.0002.5F04][.41FB.0020.0002][.4265.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F943 +2F894 ; [.4178.004B.0002.5F22][.41FB.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F894 +2F895 ; [.4178.004B.0002.5F22][.41FB.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F895 +2F899 ; [.4187.0025.0002.5F62][.41F9.0020.0002][.4265.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F899 +FA84 ; [.4183.0025.0002.5F69][.41F4.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA84 +2F89A ; [.4181.0027.0002.5F6B][.41FB.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F89A +F9D8 ; [.417A.0021.0002.5F8B][.4204.0020.0002][.4258.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9D8 +F966 ; [.417C.0026.0002.5FA9][.41FB.0020.0002][.4251.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F966 +FA85 ; [.4180.0043.0002.5FAD][.41FF.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA85 +2F89D ; [.4180.002A.0002.5FCD][.4207.0020.0002][.4254.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F89D +2F89E ; [.4181.0026.0002.5FD7][.4207.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F89E +F9A3 ; [.4177.0021.0002.5FF5][.41F9.0020.0002][.4260.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9A3 +F960 ; [.4177.0024.0002.6012][.41FB.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F960 +F9AC ; [.417A.0026.0002.601C][.41F9.0020.0002][.4265.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9AC +2F8A0 ; [.4180.0042.0002.6081][.41F9.0020.0002][.4254.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F8A0 +FA3D ; [.4187.0026.0002.6094][.41FE.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA3D +2F8A3 ; [.4187.0026.0002.6094][.41FE.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F8A3 +2F8A5 ; [.4178.0022.0002.60C7][.41FB.0020.0002][.4254.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F8A5 +FA86 ; [.417B.002D.0002.60D8][.41F3.0020.0002][.4265.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA86 +F9B9 ; [.4180.0025.0002.60E1][.41F3.0020.0002][.4251.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9B9 +FA88 ; [.4180.002E.0002.6108][.4204.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA88 +F9D9 ; [.417A.0022.0002.6144][.4204.0020.0002][.4258.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9D9 +2F8A6 ; [.4181.002A.0002.6148][.41F3.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F8A6 +2F8A7 ; [.4187.0027.0002.614C][.41FC.0020.0002][.4265.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F8A7 +2F8A9 ; [.4187.0027.0002.614C][.41FC.0020.0002][.4265.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F8A9 +FA8A ; [.4180.0047.0002.6160][.41FB.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA8A +FA3E ; [.4175.0028.0002.6168][.41F4.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA3E +2F8AA ; [.417A.0031.0002.617A][.4200.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F8AA +FA3F ; [.4181.0022.0002.618E][.4205.0020.0002][.4265.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA3F +FA89 ; [.4181.0022.0002.618E][.4205.0020.0002][.4265.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA89 +2F8AB ; [.4181.0022.0002.618E][.4205.0020.0002][.4265.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F8AB +F98F ; [.417A.0021.0002.6190][.41F9.0020.0002][.4254.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F98F +2F8AD ; [.417C.0028.0002.61A4][.4200.0020.0002][.4254.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F8AD +2F8AE ; [.4183.0030.0002.61AF][.41F3.0020.0002][.4260.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F8AE +2F8AC ; [.4187.0021.0002.61B2][.41F7.0020.0002][.4254.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F8AC +2F8AF ; [.417B.0025.0002.61DE][.41FB.0020.0002][.4265.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F8AF +FA40 ; [.4181.0022.0002.61F2][.4207.0020.0002][.4265.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA40 +FA8B ; [.4181.0022.0002.61F2][.4207.0020.0002][.4265.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA8B +2F8B0 ; [.4181.0022.0002.61F2][.4207.0020.0002][.4265.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F8B0 +F90D ; [.417A.0022.0002.61F6][.41F3.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F90D +2F8B1 ; [.417A.0022.0002.61F6][.41F3.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F8B1 +F990 ; [.417A.0022.0002.6200][.41F9.0020.0002][.4254.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F990 +2F8B2 ; [.417E.0026.0002.6210][.41F7.0020.0002][.4265.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F8B2 +F9D2 ; [.417A.0022.0002.622E][.4204.0020.0002][.4251.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9D2 +FA8C ; [.4178.0029.0002.6234][.41F4.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA8C +2F8B5 ; [.4186.002B.0002.62B1][.41FB.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F8B5 +F925 ; [.417A.0021.0002.62C9][.41F3.0020.0002][.4261.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F925 +F95B ; [.4177.0024.0002.62CF][.41F3.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F95B +FA02 ; [.4183.0026.0002.62D3][.41F7.0020.0002][.4251.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA02 +2F8B6 ; [.417C.0022.0002.62D4][.41F3.0020.0002][.4258.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F8B6 +F973 ; [.417E.0022.0002.62FE][.4205.0020.0002][.4261.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F973 +2F8B9 ; [.417B.0027.0002.633D][.41F3.0020.0002][.4254.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F8B9 +2F8B7 ; [.4180.0027.0002.6350][.41F9.0020.0002][.4254.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F8B7 +2F8BB ; [.417E.0039.0002.6368][.41F3.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F8BB +F9A4 ; [.4177.0024.0002.637B][.41F9.0020.0002][.4260.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9A4 +2F8BC ; [.417E.0029.0002.6383][.41FB.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F8BC +F975 ; [.417A.0021.0002.63A0][.41F5.0020.0002][.4251.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F975 +2F8C1 ; [.4180.0025.0002.63A9][.41F7.0020.0002][.4260.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F8C1 +FA8D ; [.4180.0030.0002.63C4][.4204.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA8D +FA8E ; [.417E.0030.0002.641C][.4200.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA8E +2F8BF ; [.4181.0025.0002.6422][.4207.0020.0002][.4254.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F8BF +2F8C3 ; [.417B.0021.0002.6469][.41F3.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F8C3 +F991 ; [.4177.0022.0002.649A][.41F9.0020.0002][.4254.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F991 +2F8C5 ; [.4187.0029.0002.649D][.4203.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F8C5 +F930 ; [.417A.0023.0002.64C4][.41FB.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F930 +FA41 ; [.417B.0025.0002.654F][.4207.0020.0002][.4254.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA41 +2F8C8 ; [.417B.0025.0002.654F][.4207.0020.0002][.4254.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F8C8 +FA90 ; [.4180.0030.0002.6556][.41FB.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA90 +2F8C9 ; [.4175.0030.0002.656C][.41F9.0020.0002][.4265.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F8C9 +F969 ; [.417E.0032.0002.6578][.4200.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F969 +F9BE ; [.417A.0025.0002.6599][.41FF.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9BE +F983 ; [.417A.0028.0002.65C5][.41F9.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F983 +2F8CB ; [.4175.0035.0002.65E3][.4207.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F8CB +F9E0 ; [.4180.0024.0002.6613][.41F9.0020.0002][.4251.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9E0 +2F8CD ; [.4181.0026.0002.6649][.4207.0020.0002][.4254.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F8CD +FA12 ; [.4183.0022.0002.6674][.41F7.0020.0002][.4265.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA12 +FA91 ; [.4183.0022.0002.6674][.41F7.0020.0002][.4265.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA91 +F9C5 ; [.4187.002A.0002.6688][.4200.0020.0002][.4254.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9C5 +FA43 ; [.417E.002B.0002.6691][.41F7.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA43 +2F8CF ; [.417E.002B.0002.6691][.41F7.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F8CF +FA06 ; [.4186.0022.0002.66B4][.41FB.0020.0002][.4251.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA06 +F98B ; [.417A.0022.0002.66C6][.41F9.0020.0002][.4251.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F98B +F901 ; [.4175.0033.0002.66F4][.41F9.0020.0002][.4265.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F901 +2F8CC ; [.417E.002D.0002.66F8][.41F7.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F8CC +2F8D4 ; [.4183.0023.0002.6700][.41FE.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F8D4 +F929 ; [.417A.0022.0002.6717][.41F3.0020.0002][.4265.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F929 +FA92 ; [.417A.0022.0002.6717][.41F3.0020.0002][.4265.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA92 +2F8D8 ; [.417A.0022.0002.6717][.41F3.0020.0002][.4265.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F8D8 +FA93 ; [.417B.0025.0002.671B][.41F3.0020.0002][.4265.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA93 +2F8D9 ; [.417B.0025.0002.671B][.41F3.0020.0002][.4265.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F8D9 +F9E1 ; [.417A.0028.0002.674E][.4207.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9E1 +2F8DC ; [.4186.0025.0002.6753][.41FF.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F8DC +FA94 ; [.4181.002E.0002.6756][.41F3.0020.0002][.4265.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA94 +2F8DB ; [.4175.0038.0002.675E][.4207.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F8DB +F9C8 ; [.4177.0021.0002.677B][.4204.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9C8 +F9F4 ; [.417A.0021.0002.6797][.4207.0020.0002][.4260.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9F4 +F9C9 ; [.417A.0023.0002.67F3][.4204.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9C9 +F9DA ; [.417A.0023.0002.6817][.4204.0020.0002][.4258.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9DA +F97A ; [.417A.0025.0002.6881][.41F5.0020.0002][.4265.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F97A +FA44 ; [.417B.0027.0002.6885][.41F4.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA44 +2F8E2 ; [.417B.0027.0002.6885][.41F4.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F8E2 +F9E2 ; [.417A.0029.0002.68A8][.4207.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9E2 +2F8E8 ; [.417E.0062.0002.6942][.41F3.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F8E8 +2F8EA ; [.4175.002A.0002.69EA][.41F4.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F8EA +F914 ; [.4180.0028.0002.6A02][.41F3.0020.0002][.4251.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F914 +F95C ; [.4180.0028.0002.6A02][.41F3.0020.0002][.4251.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F95C +F9BF ; [.4180.0028.0002.6A02][.41F3.0020.0002][.4251.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9BF +F94C ; [.417A.0024.0002.6A13][.4200.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F94C +F931 ; [.417A.0024.0002.6AD3][.41FB.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F931 +2F8ED ; [.4181.0021.0002.6ADB][.4205.0020.0002][.4258.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F8ED +F91D ; [.417A.0023.0002.6B04][.41F3.0020.0002][.4254.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F91D +2F8EF ; [.4183.0028.0002.6B21][.41F3.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F8EF +2F8F1 ; [.4187.0025.0002.6B54][.41F7.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F8F1 +2F8F3 ; [.417E.0023.0002.6B72][.41F8.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F8F3 +F98C ; [.417A.0023.0002.6B77][.41F9.0020.0002][.4251.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F98C +F9A5 ; [.417A.0023.0002.6BAE][.41F9.0020.0002][.4260.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9A5 +F970 ; [.417E.0023.0002.6BBA][.41F3.0020.0002][.4258.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F970 +FA96 ; [.417E.0023.0002.6BBA][.41F3.0020.0002][.4258.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA96 +2F8F5 ; [.417E.0023.0002.6BBA][.41F3.0020.0002][.4258.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F8F5 +2F8FA ; [.417C.0025.0002.6C4E][.41F7.0020.0002][.4260.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F8FA +F972 ; [.4183.0024.0002.6C88][.4207.0020.0002][.4260.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F972 +2F8FC ; [.4180.002B.0002.6CBF][.41F9.0020.0002][.4254.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F8FC +F968 ; [.4186.0024.0002.6CCC][.4207.0020.0002][.4258.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F968 +F9E3 ; [.4177.0022.0002.6CE5][.4207.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9E3 +F915 ; [.417A.0021.0002.6D1B][.41F3.0020.0002][.4251.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F915 +FA05 ; [.4178.002A.0002.6D1E][.41FB.0020.0002][.4265.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA05 +2F900 ; [.4186.0029.0002.6D3E][.41F3.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F900 +F9CA ; [.417A.0025.0002.6D41][.4204.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9CA +FA97 ; [.417A.0025.0002.6D41][.4204.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA97 +2F902 ; [.417A.0025.0002.6D41][.4204.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F902 +2F903 ; [.4187.002E.0002.6D69][.41FB.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F903 +F92A ; [.417A.0023.0002.6D6A][.41F3.0020.0002][.4265.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F92A +FA45 ; [.4187.002A.0002.6D77][.41F4.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA45 +2F901 ; [.4187.002A.0002.6D77][.41F4.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F901 +2F904 ; [.4183.0025.0002.6D78][.4207.0020.0002][.4260.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F904 +2F905 ; [.4180.0022.0002.6D85][.41F9.0020.0002][.4258.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F905 +F9F5 ; [.417A.0022.0002.6DCB][.4207.0020.0002][.4260.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9F5 +F94D ; [.417A.0025.0002.6DDA][.4200.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F94D +F9D6 ; [.417A.0024.0002.6DEA][.4204.0020.0002][.4254.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9D6 +2F90E ; [.4180.0026.0002.6DF9][.41F7.0020.0002][.4260.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F90E +FA46 ; [.4181.002C.0002.6E1A][.41F7.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA46 +2F908 ; [.4187.002B.0002.6E2F][.41F3.0020.0002][.4265.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F908 +2F909 ; [.4180.002B.0002.6E6E][.4207.0020.0002][.4254.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F909 +F9CB ; [.417A.0026.0002.6E9C][.4204.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9CB +F9EC ; [.4177.0022.0002.6EBA][.4207.0020.0002][.4251.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9EC +FA99 ; [.4181.002B.0002.6ECB][.41F3.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA99 +2F90B ; [.4181.002B.0002.6ECB][.41F3.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F90B +F904 ; [.4187.0022.0002.6ED1][.41FC.0020.0002][.4258.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F904 +F94E ; [.417A.0026.0002.6F0F][.4200.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F94E +FA47 ; [.4187.0026.0002.6F22][.41F3.0020.0002][.4254.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA47 +FA9A ; [.4187.0026.0002.6F22][.41F3.0020.0002][.4254.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA9A +F992 ; [.417A.0024.0002.6F23][.41F9.0020.0002][.4254.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F992 +2F90F ; [.4181.0033.0002.6F6E][.41FB.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F90F +2F912 ; [.417C.003C.0002.6FC6][.4200.0020.0002][.4254.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F912 +F922 ; [.417A.0025.0002.6FEB][.41F3.0020.0002][.4260.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F922 +F984 ; [.417A.002A.0002.6FFE][.41F9.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F984 +2F915 ; [.4180.002D.0002.701B][.41F9.0020.0002][.4265.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F915 +FA9B ; [.4181.003D.0002.701E][.41F7.0020.0002][.4265.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA9B +2F914 ; [.4181.003D.0002.701E][.41F7.0020.0002][.4265.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F914 +2F835 ; [.4187.002D.0002.7070][.41FE.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F835 +2F918 ; [.4181.002B.0002.707D][.41F4.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F918 +F9FB ; [.4181.002C.0002.7099][.41F3.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9FB +2F91A ; [.4185.0028.0002.70AD][.41F3.0020.0002][.4254.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F91A +F99F ; [.417A.0025.0002.70C8][.41F9.0020.0002][.4258.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F99F +F916 ; [.417A.0022.0002.70D9][.41F3.0020.0002][.4251.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F916 +F993 ; [.417A.0025.0002.7149][.41F9.0020.0002][.4254.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F993 +FA48 ; [.4181.002D.0002.716E][.41F3.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA48 +FA9C ; [.4181.002D.0002.716E][.41F3.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA9C +F9C0 ; [.417A.0026.0002.71CE][.41FF.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9C0 +F9EE ; [.417A.0023.0002.71D0][.4207.0020.0002][.4254.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9EE +F932 ; [.417A.0027.0002.7210][.41FB.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F932 +F91E ; [.417A.0026.0002.721B][.41F3.0020.0002][.4254.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F91E +2F920 ; [.4183.0036.0002.7228][.41F3.0020.0002][.4254.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F920 +FA9E ; [.4181.0028.0002.7235][.41F3.0020.0002][.4251.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA9E +2F921 ; [.4181.0028.0002.7235][.41F3.0020.0002][.4251.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F921 +F946 ; [.417A.0023.0002.7262][.41FE.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F946 +2F924 ; [.417E.0030.0002.7280][.41F7.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F924 +FA9F ; [.417C.0027.0002.72AF][.41F7.0020.0002][.4260.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA9F +F9FA ; [.417E.0035.0002.72C0][.41F3.0020.0002][.4265.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9FA +F92B ; [.417A.0024.0002.72FC][.41F3.0020.0002][.4265.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F92B +FA16 ; [.4181.002E.0002.732A][.41F7.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA16 +FAA0 ; [.4181.002E.0002.732A][.41F7.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FAA0 +F9A7 ; [.417A.0021.0002.7375][.41F9.0020.0002][.4261.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9A7 +2F928 ; [.4178.0023.0002.737A][.41F3.0020.0002][.4258.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F928 +F961 ; [.417E.0021.0002.7387][.41FB.0020.0002][.4258.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F961 +F9DB ; [.417E.0021.0002.7387][.41FB.0020.0002][.4258.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9DB +2F929 ; [.4180.0025.0002.738B][.41FC.0020.0002][.4265.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F929 +F9AD ; [.417A.0027.0002.73B2][.41F9.0020.0002][.4265.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9AD +F917 ; [.417A.0023.0002.73DE][.41F3.0020.0002][.4251.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F917 +F9E4 ; [.417A.002D.0002.7406][.4207.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9E4 +F9CC ; [.417A.0028.0002.7409][.4204.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9CC +FA4A ; [.4185.002B.0002.7422][.41F3.0020.0002][.4251.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA4A +2F92F ; [.4180.003D.0002.745C][.4204.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F92F +F9AE ; [.4187.002D.0002.7469][.41F9.0020.0002][.4265.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9AE +FAA1 ; [.4181.0057.0002.7471][.41F7.0020.0002][.4254.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FAA1 +2F930 ; [.4181.0057.0002.7471][.41F7.0020.0002][.4254.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F930 +F994 ; [.417A.0026.0002.7489][.41F9.0020.0002][.4254.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F994 +F9EF ; [.417A.0024.0002.7498][.4207.0020.0002][.4254.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9EF +2F932 ; [.4175.003A.0002.74CA][.41F9.0020.0002][.4265.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F932 +F9CD ; [.417A.002A.0002.7559][.4204.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9CD +F976 ; [.417A.0022.0002.7565][.41F5.0020.0002][.4251.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F976 +F962 ; [.4180.002C.0002.7570][.4207.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F962 +2F938 ; [.4180.002C.0002.7570][.4207.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F938 +F9E5 ; [.417A.002F.0002.75E2][.4207.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9E5 +2F93A ; [.4180.0059.0002.7610][.4204.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F93A +FAA5 ; [.4180.0023.0002.761F][.41FB.0020.0002][.4254.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FAA5 +F9C1 ; [.417A.0027.0002.7642][.41FF.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9C1 +F90E ; [.417A.0023.0002.7669][.41F3.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F90E +FA17 ; [.4180.0022.0002.76CA][.4207.0020.0002][.4251.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA17 +FAA6 ; [.4180.0022.0002.76CA][.4207.0020.0002][.4251.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FAA6 +FAA7 ; [.417E.002B.0002.76DB][.41F7.0020.0002][.4265.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FAA7 +F933 ; [.417A.0028.0002.76E7][.41FB.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F933 +FAA8 ; [.4181.0021.0002.76F4][.4207.0020.0002][.4251.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FAA8 +2F940 ; [.4181.0021.0002.76F4][.4207.0020.0002][.4251.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F940 +F96D ; [.417E.002C.0002.7701][.41F7.0020.0002][.4265.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F96D +2F945 ; [.4181.0033.0002.771E][.4207.0020.0002][.4254.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F945 +FAAA ; [.4183.0023.0002.7740][.41F3.0020.0002][.4251.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FAAA +2F94A ; [.4181.0034.0002.778B][.4207.0020.0002][.4254.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F94A +F9CE ; [.417A.002C.0002.786B][.4204.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9CE +F93B ; [.417A.0021.0002.788C][.41FB.0020.0002][.4251.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F93B +2F94F ; [.417A.0021.0002.788C][.41FB.0020.0002][.4251.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F94F +FA4B ; [.417C.0038.0002.7891][.4207.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA4B +F947 ; [.417A.0024.0002.78CA][.41FE.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F947 +F964 ; [.417C.0032.0002.78FB][.41F3.0020.0002][.4254.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F964 +F985 ; [.417A.002B.0002.792A][.41F9.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F985 +FA4C ; [.417E.0046.0002.793E][.41F3.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA4C +FA4E ; [.4175.004C.0002.7948][.4207.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA4E +FA4D ; [.4181.0035.0002.7949][.4207.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA4D +FA4F ; [.4180.0032.0002.7950][.4200.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA4F +FA50 ; [.4181.0039.0002.7956][.41FB.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA50 +2F953 ; [.4181.0039.0002.7956][.41FB.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F953 +FA51 ; [.4183.0023.0002.795D][.4200.0020.0002][.4251.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA51 +FA19 ; [.417E.002C.0002.795E][.4207.0020.0002][.4254.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA19 +FA1A ; [.417E.0037.0002.7965][.41F3.0020.0002][.4265.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA1A +F93C ; [.417A.0022.0002.797F][.41FB.0020.0002][.4251.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F93C +FA52 ; [.4187.0027.0002.798D][.41FC.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA52 +FA53 ; [.4181.0044.0002.798E][.41F7.0020.0002][.4265.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA53 +FA1B ; [.417C.0028.0002.798F][.41FB.0020.0002][.4251.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA1B +2F956 ; [.417C.0028.0002.798F][.41FB.0020.0002][.4251.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F956 +F9B6 ; [.417A.0023.0002.79AE][.41FA.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9B6 +F995 ; [.4177.0023.0002.79CA][.41F9.0020.0002][.4254.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F995 +2F957 ; [.4183.0024.0002.79EB][.4200.0020.0002][.4258.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F957 +F956 ; [.417A.0023.0002.7A1C][.4205.0020.0002][.4265.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F956 +FA54 ; [.4175.0025.0002.7A40][.41FB.0020.0002][.4251.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA54 +2F959 ; [.4175.0025.0002.7A40][.41FB.0020.0002][.4251.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F959 +FA55 ; [.4178.0022.0002.7A81][.41FB.0020.0002][.4258.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA55 +F9F7 ; [.417A.0022.0002.7ACB][.4207.0020.0002][.4261.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9F7 +F9F8 ; [.417A.0023.0002.7B20][.4207.0020.0002][.4261.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9F8 +FA56 ; [.4181.0027.0002.7BC0][.41F7.0020.0002][.4258.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA56 +FAAD ; [.4181.0027.0002.7BC0][.41F7.0020.0002][.4258.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FAAD +2F962 ; [.4181.003D.0002.7BC6][.41F7.0020.0002][.4254.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F962 +2F963 ; [.4183.0026.0002.7BC9][.4200.0020.0002][.4251.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F963 +F9A6 ; [.417A.0025.0002.7C3E][.41F9.0020.0002][.4260.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9A6 +F944 ; [.417A.0026.0002.7C60][.41FB.0020.0002][.4265.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F944 +F9F9 ; [.417A.0024.0002.7C92][.4207.0020.0002][.4261.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9F9 +FA1D ; [.4181.0047.0002.7CBE][.41F7.0020.0002][.4265.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA1D +FA03 ; [.4178.0029.0002.7CD6][.41F3.0020.0002][.4265.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA03 +F97B ; [.417A.0029.0002.7CE7][.41F5.0020.0002][.4265.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F97B +2F96A ; [.4175.004F.0002.7D00][.4207.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F96A +F9CF ; [.4177.0022.0002.7D10][.4204.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9CF +F96A ; [.417E.0023.0002.7D22][.41F4.0020.0002][.4251.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F96A +F94F ; [.417A.0028.0002.7D2F][.4200.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F94F +FAAF ; [.4181.0063.0002.7D5B][.41FB.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FAAF +2F96C ; [.417C.0034.0002.7D63][.41F9.0020.0002][.4265.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F96C +F93D ; [.417A.0023.0002.7DA0][.41FB.0020.0002][.4251.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F93D +F957 ; [.417A.0024.0002.7DBE][.4205.0020.0002][.4265.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F957 +2F96E ; [.4183.0030.0002.7DC7][.4207.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F96E +F996 ; [.417A.0027.0002.7DF4][.41F9.0020.0002][.4254.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F996 +FA57 ; [.417A.0027.0002.7DF4][.41F9.0020.0002][.4254.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA57 +FAB0 ; [.417A.0027.0002.7DF4][.41F9.0020.0002][.4254.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FAB0 +FA58 ; [.4181.0036.0002.7E09][.4207.0020.0002][.4254.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA58 +F950 ; [.417A.0029.0002.7E37][.4200.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F950 +FA59 ; [.417C.0026.0002.7E41][.41F7.0020.0002][.4254.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA59 +2F970 ; [.417E.0052.0002.7E45][.41FB.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F970 +FAB1 ; [.417C.0035.0002.7F3E][.41F9.0020.0002][.4265.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FAB1 +FA5A ; [.417E.0035.0002.7F72][.41F7.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA5A +F9E6 ; [.417A.0031.0002.7F79][.4207.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9E6 +F90F ; [.417A.0024.0002.7F85][.41F3.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F90F +F9AF ; [.417A.0029.0002.7F9A][.41F9.0020.0002][.4265.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9AF +FA1E ; [.4180.0036.0002.7FBD][.4200.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA1E +2F979 ; [.4175.005A.0002.7FFA][.41FB.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F979 +F934 ; [.417A.0029.0002.8001][.41FB.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F934 +FA5B ; [.4181.0033.0002.8005][.41F3.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA5B +FAB2 ; [.4181.0033.0002.8005][.41F3.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FAB2 +2F97A ; [.4181.0033.0002.8005][.41F3.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F97A +F9B0 ; [.417A.002B.0002.8046][.41F9.0020.0002][.4265.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9B0 +F997 ; [.417A.0028.0002.806F][.41F9.0020.0002][.4254.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F997 +2F97F ; [.4183.0028.0002.8070][.41FB.0020.0002][.4265.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F97F +F945 ; [.417A.0027.0002.807E][.41FB.0020.0002][.4265.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F945 +F953 ; [.417A.0022.0002.808B][.4205.0020.0002][.4251.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F953 +2F8D6 ; [.4177.0023.0002.80AD][.4200.0020.0002][.4258.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F8D6 +2F982 ; [.4180.0024.0002.80B2][.4204.0020.0002][.4251.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F982 +2F985 ; [.417C.003F.0002.813E][.4207.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F985 +F926 ; [.417A.0022.0002.81D8][.41F3.0020.0002][.4261.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F926 +F9F6 ; [.417A.0024.0002.81E8][.4207.0020.0002][.4260.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9F6 +FA5C ; [.4183.002A.0002.81ED][.4203.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA5C +2F893 ; [.4180.002E.0002.8201][.41F9.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F893 +2F98B ; [.4180.002E.0002.8201][.41F9.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F98B +F97C ; [.417A.002A.0002.826F][.41F5.0020.0002][.4265.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F97C +2F990 ; [.4180.0037.0002.828B][.4200.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F990 +2F991 ; [.4181.003B.0002.829D][.4207.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F991 +2F993 ; [.4187.0029.0002.82B1][.41FC.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F993 +2F994 ; [.417C.0035.0002.82B3][.41F3.0020.0002][.4265.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F994 +2F995 ; [.4180.0029.0002.82BD][.41F3.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F995 +F974 ; [.4180.0023.0002.82E5][.41F5.0020.0002][.4251.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F974 +2F998 ; [.4180.0023.0002.82E5][.41F5.0020.0002][.4251.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F998 +2F996 ; [.4175.003A.0002.82E6][.41FB.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F996 +2F999 ; [.4183.002E.0002.831D][.41F4.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F999 +2F99C ; [.4180.004C.0002.8323][.41FB.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F99C +F9FE ; [.4178.0022.0002.8336][.41F3.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9FE +FAB3 ; [.4187.0034.0002.8352][.41FC.0020.0002][.4265.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FAB3 +2F99D ; [.417B.002A.0002.83BD][.41F3.0020.0002][.4265.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F99D +F93E ; [.417A.0024.0002.83C9][.41FB.0020.0002][.4251.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F93E +2F9A1 ; [.4175.0023.0002.83CA][.4200.0020.0002][.4251.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F9A1 +2F9A2 ; [.4175.0025.0002.83CC][.4204.0020.0002][.4254.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F9A2 +2F9A3 ; [.4183.0029.0002.83DC][.41F4.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F9A3 +FAB4 ; [.4187.002A.0002.83EF][.41FC.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FAB4 +F958 ; [.417A.0025.0002.83F1][.4205.0020.0002][.4265.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F958 +F918 ; [.417A.0025.0002.843D][.41F3.0020.0002][.4251.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F918 +F96E ; [.4180.0023.0002.8449][.41F9.0020.0002][.4261.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F96E +FA5F ; [.4181.0034.0002.8457][.41F7.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA5F +2F99F ; [.4181.0034.0002.8457][.41F7.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F99F +F999 ; [.417A.0029.0002.84EE][.41F9.0020.0002][.4254.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F999 +2F9A8 ; [.4186.002A.0002.84F1][.41F9.0020.0002][.4265.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F9A8 +F9C2 ; [.417A.002A.0002.84FC][.41FF.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9C2 +2F9AC ; [.4180.0062.0002.8564][.4204.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F9AC +F923 ; [.417A.0028.0002.85CD][.41F3.0020.0002][.4260.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F923 +F9F0 ; [.417A.0025.0002.85FA][.4207.0020.0002][.4254.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9F0 +F935 ; [.417A.002A.0002.8606][.41FB.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F935 +F91F ; [.417A.0027.0002.862D][.41F3.0020.0002][.4254.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F91F +F910 ; [.417A.0025.0002.863F][.41F3.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F910 +2F9B3 ; [.4187.0023.0002.8650][.41F3.0020.0002][.4251.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F9B3 +F936 ; [.417A.002B.0002.865C][.41FB.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F936 +2F9B4 ; [.417A.002B.0002.865C][.41FB.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F9B4 +2F9B5 ; [.4187.0025.0002.8667][.4204.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F9B5 +2F9B7 ; [.4183.0034.0002.86A9][.4207.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F9B7 +2F9BC ; [.4181.0026.0002.8728][.41F7.0020.0002][.4261.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F9BC +F911 ; [.417A.0026.0002.87BA][.41F3.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F911 +F927 ; [.417A.0023.0002.881F][.41F3.0020.0002][.4261.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F927 +FA08 ; [.4187.0025.0002.884C][.41F4.0020.0002][.4265.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA08 +2F9C4 ; [.4180.0030.0002.8863][.4206.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F9C4 +F9A0 ; [.417A.0026.0002.88C2][.41F9.0020.0002][.4258.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9A0 +F9E7 ; [.417A.0034.0002.88CF][.4207.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9E7 +F9E8 ; [.417A.0035.0002.88E1][.4207.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9E8 +F912 ; [.417A.0027.0002.88F8][.41F3.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F912 +FA60 ; [.4175.0028.0002.8910][.41F3.0020.0002][.4258.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA60 +FAB6 ; [.4175.0034.0002.8941][.41F3.0020.0002][.4265.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FAB6 +F924 ; [.417A.0029.0002.8964][.41F3.0020.0002][.4260.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F924 +FAB7 ; [.417C.002D.0002.8986][.41FB.0020.0002][.4251.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FAB7 +FA0A ; [.4175.0028.0002.898B][.41F9.0020.0002][.4254.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA0A +FA61 ; [.417E.0037.0002.8996][.4207.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA61 +FAB8 ; [.417E.0037.0002.8996][.4207.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FAB8 +2F9CF ; [.417E.0031.0002.8AA0][.41F7.0020.0002][.4265.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F9CF +F96F ; [.417E.002B.0002.8AAA][.41F7.0020.0002][.4258.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F96F +F9A1 ; [.417E.002B.0002.8AAA][.41F7.0020.0002][.4258.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9A1 +FAB9 ; [.4181.0046.0002.8ABF][.41FB.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FAB9 +FABB ; [.4183.0026.0002.8ACB][.41F7.0020.0002][.4265.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FABB +F97D ; [.417A.002B.0002.8AD2][.41F5.0020.0002][.4265.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F97D +F941 ; [.417A.0021.0002.8AD6][.41FB.0020.0002][.4254.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F941 +FABE ; [.4180.0046.0002.8AED][.4204.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FABE +2F9D0 ; [.4180.0046.0002.8AED][.4204.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F9D0 +FA22 ; [.4181.0030.0002.8AF8][.41F8.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA22 +FABA ; [.4181.0030.0002.8AF8][.41F8.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FABA +F95D ; [.4177.0021.0002.8AFE][.41F3.0020.0002][.4251.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F95D +FABD ; [.4177.0021.0002.8AFE][.41F3.0020.0002][.4251.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FABD +FA62 ; [.4180.0022.0002.8B01][.41F3.0020.0002][.4258.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA62 +FABC ; [.4180.0022.0002.8B01][.41F3.0020.0002][.4258.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FABC +FA63 ; [.4175.002D.0002.8B39][.4205.0020.0002][.4254.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA63 +FABF ; [.4175.002D.0002.8B39][.4205.0020.0002][.4254.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FABF +F9FC ; [.417E.002C.0002.8B58][.4207.0020.0002][.4251.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9FC +F95A ; [.4178.002A.0002.8B80][.41FB.0020.0002][.4251.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F95A +FAC0 ; [.417C.0023.0002.8B8A][.41F9.0020.0002][.4254.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FAC0 +2F9D1 ; [.417C.0023.0002.8B8A][.41F9.0020.0002][.4254.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F9D1 +F900 ; [.4175.0057.0002.8C48][.4207.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F900 +2F9D2 ; [.417E.003B.0002.8C55][.4207.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F9D2 +2F9D4 ; [.4175.002E.0002.8CAB][.41FC.0020.0002][.4254.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F9D4 +2F9D5 ; [.417C.0032.0002.8CC1][.4200.0020.0002][.4254.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F9D5 +F948 ; [.417A.0025.0002.8CC2][.41FE.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F948 +F903 ; [.4175.0039.0002.8CC8][.41F3.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F903 +FA64 ; [.417C.002D.0002.8CD3][.4207.0020.0002][.4254.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA64 +FA65 ; [.4181.002B.0002.8D08][.4205.0020.0002][.4265.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA65 +FAC1 ; [.4181.002B.0002.8D08][.4205.0020.0002][.4265.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FAC1 +2F9D6 ; [.4175.0039.0002.8D1B][.41FB.0020.0002][.4265.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F9D6 +2F9D7 ; [.4175.0058.0002.8D77][.4207.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F9D7 +2F9DA ; [.417C.0027.0002.8DCB][.41F3.0020.0002][.4258.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F9DA +F937 ; [.417A.002C.0002.8DEF][.41FB.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F937 +F902 ; [.4183.002D.0002.8ECA][.41F3.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F902 +F998 ; [.417A.002A.0002.8F26][.41F9.0020.0002][.4254.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F998 +F9D7 ; [.417A.0026.0002.8F2A][.4204.0020.0002][.4254.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9D7 +FAC2 ; [.417E.004F.0002.8F38][.4200.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FAC2 +2F9DF ; [.417E.004F.0002.8F38][.4200.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F9DF +FA07 ; [.417C.002F.0002.8F3B][.41FB.0020.0002][.4251.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA07 +F98D ; [.417A.0026.0002.8F62][.41F9.0020.0002][.4251.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F98D +F971 ; [.4181.003E.0002.8FB0][.4207.0020.0002][.4254.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F971 +F99A ; [.417A.002B.0002.9023][.41F9.0020.0002][.4254.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F99A +FA25 ; [.4180.0027.0002.9038][.4207.0020.0002][.4258.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA25 +FA67 ; [.4180.0027.0002.9038][.4207.0020.0002][.4258.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA67 +FAC3 ; [.4181.0041.0002.9072][.4207.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FAC3 +F9C3 ; [.417A.002B.0002.907C][.41FF.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9C3 +F913 ; [.417A.0028.0002.908F][.41F3.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F913 +FA2E ; [.417A.0028.0002.90DE][.41F3.0020.0002][.4265.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA2E +FA26 ; [.4178.0045.0002.90FD][.41FB.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA26 +F919 ; [.417A.0026.0002.916A][.41F3.0020.0002][.4251.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F919 +F9B7 ; [.417A.0024.0002.91B4][.41FA.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9B7 +F9E9 ; [.417A.0036.0002.91CC][.4207.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9E9 +F97E ; [.417A.002D.0002.91CF][.41F5.0020.0002][.4265.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F97E +F90A ; [.4175.0021.0002.91D1][.4207.0020.0002][.4260.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F90A +F9B1 ; [.417A.002D.0002.9234][.41F9.0020.0002][.4265.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9B1 +2F9E7 ; [.417C.002F.0002.9238][.41F3.0020.0002][.4258.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F9E7 +2F9EA ; [.417C.0039.0002.927C][.41F9.0020.0002][.4265.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F9EA +2F9E8 ; [.4187.003F.0002.92D7][.41F9.0020.0002][.4254.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F9E8 +F93F ; [.417A.0025.0002.9304][.41FB.0020.0002][.4251.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F93F +F99B ; [.417A.002C.0002.934A][.41F9.0020.0002][.4254.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F99B +2F9EE ; [.4175.0033.0002.958B][.41F4.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F9EE +F986 ; [.417A.002E.0002.95AD][.41F9.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F986 +F9C6 ; [.4180.0031.0002.962E][.41FC.0020.0002][.4254.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9C6 +F951 ; [.417A.002D.0002.964B][.4200.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F951 +FA09 ; [.4175.0037.0002.964D][.41F3.0020.0002][.4265.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA09 +F959 ; [.417A.0026.0002.9675][.4205.0020.0002][.4265.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F959 +F9D3 ; [.417A.0023.0002.9678][.4204.0020.0002][.4251.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9D3 +FAC6 ; [.4181.004E.0002.967C][.41F7.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FAC6 +F9DC ; [.417A.0021.0002.9686][.4204.0020.0002][.4265.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9DC +F9F1 ; [.417A.0027.0002.96A3][.4207.0020.0002][.4254.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9F1 +FA2F ; [.417A.0025.0002.96B7][.41FA.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA2F +F9B8 ; [.417A.0026.0002.96B8][.41FA.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9B8 +F9EA ; [.417A.0038.0002.96E2][.4207.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9EA +FA68 ; [.4177.0023.0002.96E3][.41F3.0020.0002][.4254.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA68 +FAC7 ; [.4177.0023.0002.96E3][.41F3.0020.0002][.4254.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FAC7 +F9B2 ; [.417A.002E.0002.96F6][.41F9.0020.0002][.4265.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9B2 +F949 ; [.417A.0028.0002.96F7][.41FE.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F949 +2F9F5 ; [.4180.0031.0002.9723][.4200.0020.0002][.4254.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F9F5 +F938 ; [.417A.002E.0002.9732][.41FB.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F938 +F9B3 ; [.417A.002F.0002.9748][.41F9.0020.0002][.4265.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9B3 +FA1C ; [.4181.0054.0002.9756][.41F7.0020.0002][.4265.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA1C +FAC8 ; [.4181.0054.0002.9756][.41F7.0020.0002][.4265.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FAC8 +2F9FA ; [.4186.0034.0002.97E0][.4207.0020.0002][.4258.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2F9FA +FA69 ; [.4187.0026.0002.97FF][.41F5.0020.0002][.4265.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA69 +FACA ; [.4187.0026.0002.97FF][.41F5.0020.0002][.4265.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FACA +F9B4 ; [.417A.0030.0002.9818][.41F9.0020.0002][.4265.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9B4 +FA6A ; [.417C.002E.0002.983B][.4207.0020.0002][.4254.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA6A +FACC ; [.417C.002E.0002.983B][.4207.0020.0002][.4254.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FACC +F9D0 ; [.417A.002E.0002.985E][.4204.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9D0 +2FA02 ; [.4175.005B.0002.98E2][.4207.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2FA02 +FA2A ; [.417C.0039.0002.98EF][.41F3.0020.0002][.4254.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA2A +FA2B ; [.417E.005A.0002.98FC][.41F3.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA2B +FA2C ; [.4175.0030.0002.9928][.41FC.0020.0002][.4254.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA2C +F91A ; [.417A.0027.0002.99F1][.41F3.0020.0002][.4251.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F91A +F987 ; [.417A.0030.0002.9A6A][.41F9.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F987 +FACD ; [.4181.004C.0002.9B12][.4207.0020.0002][.4254.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FACD +2FA0A ; [.4181.004C.0002.9B12][.4207.0020.0002][.4254.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2FA0A +F939 ; [.417A.002F.0002.9B6F][.41FB.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F939 +F9F2 ; [.417A.0028.0002.9C57][.4207.0020.0002][.4254.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9F2 +FA2D ; [.4187.0025.0002.9DB4][.41F3.0020.0002][.4251.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA2D +F93A ; [.417A.0030.0002.9DFA][.41FB.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F93A +F920 ; [.417A.0028.0002.9E1E][.41F3.0020.0002][.4254.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F920 +F940 ; [.417A.0026.0002.9E7F][.41FB.0020.0002][.4251.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F940 +F988 ; [.417A.0031.0002.9E97][.41F9.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F988 +F9F3 ; [.417A.0029.0002.9E9F][.4207.0020.0002][.4254.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9F3 +2FA15 ; [.417B.0028.0002.9EBB][.41F3.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2FA15 +F989 ; [.417A.0032.0002.9ECE][.41F9.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F989 +2FA1C ; [.417C.004A.0002.9F3B][.4207.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-2FA1C +F9C4 ; [.417A.0021.0002.9F8D][.41FF.0020.0002][.4265.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F9C4 +FAD9 ; [.417A.002E.0002.9F8E][.41FB.0020.0002][.4265.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FAD9 +F907 ; [.4175.0056.0002.9F9C][.4200.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F907 +F908 ; [.4175.0056.0002.9F9C][.4200.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F908 +FACE ; [.4175.0056.0002.9F9C][.4200.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FACE ENTRY }; diff --git a/gnu/usr.bin/perl/cpan/Unicode-Collate/Collate/Locale/kok.pl b/gnu/usr.bin/perl/cpan/Unicode-Collate/Collate/Locale/kok.pl index 40baeec4f6a..7a528f2fcfd 100644 --- a/gnu/usr.bin/perl/cpan/Unicode-Collate/Collate/Locale/kok.pl +++ b/gnu/usr.bin/perl/cpan/Unicode-Collate/Collate/Locale/kok.pl @@ -1,13 +1,13 @@ +{ - locale_version => 1.27, - entry => <<'ENTRY', # for DUCET v10.0.0 -0902 ; [.26CC.0020.0002][.FFF1.0000.0000] # DEVANAGARI SIGN ANUSVARA -0901 ; [.26CC.0021.0002][.FFF1.0000.0000] # DEVANAGARI SIGN CANDRABINDU -0903 ; [.26CC.0020.0002][.FFF2.0000.0000] # DEVANAGARI SIGN VISARGA -0950 ; [.26CC.0020.0002][.FFF0.0000.0000] # DEVANAGARI OM -0933 ; [.270F.0020.0002][.FFF1.0000.0000] # DEVANAGARI LETTER LLA -0934 ; [.270F.0020.0002][.FFF1.0000.0000][.0000.00C2.0002] # DEVANAGARI LETTER LLLA -0915 094D 0937 ; [.270F.0020.0002][.FFF2.0000.0000] # -0939 ; [.270F.0020.0002][.FFF0.0000.0000] # DEVANAGARI LETTER HA + locale_version => 1.31, + entry => <<'ENTRY', # for DUCET v13.0.0 +0902 ; [.29D7.0020.0002][.FFF1.0000.0000] # DEVANAGARI SIGN ANUSVARA +0901 ; [.29D7.0021.0002][.FFF1.0000.0000] # DEVANAGARI SIGN CANDRABINDU +0903 ; [.29D7.0020.0002][.FFF2.0000.0000] # DEVANAGARI SIGN VISARGA +0950 ; [.29D7.0020.0002][.FFF0.0000.0000] # DEVANAGARI OM +0933 ; [.2A1B.0020.0002][.FFF1.0000.0000] # DEVANAGARI LETTER LLA +0934 ; [.2A1B.0020.0002][.FFF1.0000.0000][.0000.00C2.0002] # DEVANAGARI LETTER LLLA +0915 094D 0937 ; [.2A1B.0020.0002][.FFF2.0000.0000] # +0939 ; [.2A1B.0020.0002][.FFF0.0000.0000] # DEVANAGARI LETTER HA ENTRY }; diff --git a/gnu/usr.bin/perl/cpan/Unicode-Collate/Collate/Locale/ln.pl b/gnu/usr.bin/perl/cpan/Unicode-Collate/Collate/Locale/ln.pl index d50533d6bd6..c90ec82717a 100644 --- a/gnu/usr.bin/perl/cpan/Unicode-Collate/Collate/Locale/ln.pl +++ b/gnu/usr.bin/perl/cpan/Unicode-Collate/Collate/Locale/ln.pl @@ -1,12 +1,12 @@ +{ - locale_version => 1.27, - entry => <<'ENTRY', # for DUCET v10.0.0 -025B ; [.1D11.0020.0002] # LATIN SMALL LETTER OPEN E -0190 ; [.1D11.0020.0008] # LATIN CAPITAL LETTER OPEN E -2107 ; [.1D11.0020.000A] # EULER CONSTANT -1D4B ; [.1D11.0020.0014] # MODIFIER LETTER SMALL OPEN E -0254 ; [.1E43.0021.0002] # LATIN SMALL LETTER OPEN O -0186 ; [.1E43.0021.0008] # LATIN CAPITAL LETTER OPEN O -1D53 ; [.1E43.0021.0014] # MODIFIER LETTER SMALL OPEN O + locale_version => 1.31, + entry => <<'ENTRY', # for DUCET v13.0.0 +025B ; [.2008.0020.0002] # LATIN SMALL LETTER OPEN E +0190 ; [.2008.0020.0008] # LATIN CAPITAL LETTER OPEN E +2107 ; [.2008.0020.000A] # EULER CONSTANT +1D4B ; [.2008.0020.0014] # MODIFIER LETTER SMALL OPEN E +0254 ; [.213C.0021.0002] # LATIN SMALL LETTER OPEN O +0186 ; [.213C.0021.0008] # LATIN CAPITAL LETTER OPEN O +1D53 ; [.213C.0021.0014] # MODIFIER LETTER SMALL OPEN O ENTRY }; diff --git a/gnu/usr.bin/perl/cpan/Unicode-Collate/Collate/Locale/lt.pl b/gnu/usr.bin/perl/cpan/Unicode-Collate/Collate/Locale/lt.pl index c0a3c22528d..53211cbf266 100644 --- a/gnu/usr.bin/perl/cpan/Unicode-Collate/Collate/Locale/lt.pl +++ b/gnu/usr.bin/perl/cpan/Unicode-Collate/Collate/Locale/lt.pl @@ -1,48 +1,48 @@ +{ - locale_version => 1.27, + locale_version => 1.31, # in cldr test/lt.xml why I-dot-acute > I-dot though i-dot-acute < i-dot ? - entry => <<'ENTRY', # for DUCET v10.0.0 -0049 0307 ; [.1D98.0020.0008][.0000.002E.0002] # + entry => <<'ENTRY', # for DUCET v13.0.0 +0049 0307 ; [.2090.0020.0008][.0000.002E.0002] # 0307 0300 ; [.0000.0025.0002] # 0307 0301 ; [.0000.0024.0002] # 0307 0303 ; [.0000.002D.0002] # -0105 ; [.1CAD.0021.0002] # LATIN SMALL LETTER A WITH OGONEK -0061 0328 ; [.1CAD.0021.0002] # LATIN SMALL LETTER A WITH OGONEK -0104 ; [.1CAD.0021.0008] # LATIN CAPITAL LETTER A WITH OGONEK -0041 0328 ; [.1CAD.0021.0008] # LATIN CAPITAL LETTER A WITH OGONEK -010D ; [.1CE1.0020.0002] # LATIN SMALL LETTER C WITH CARON -0063 030C ; [.1CE1.0020.0002] # LATIN SMALL LETTER C WITH CARON -010C ; [.1CE1.0020.0008] # LATIN CAPITAL LETTER C WITH CARON -0043 030C ; [.1CE1.0020.0008] # LATIN CAPITAL LETTER C WITH CARON -0119 ; [.1D10.0021.0002] # LATIN SMALL LETTER E WITH OGONEK -0065 0328 ; [.1D10.0021.0002] # LATIN SMALL LETTER E WITH OGONEK -0118 ; [.1D10.0021.0008] # LATIN CAPITAL LETTER E WITH OGONEK -0045 0328 ; [.1D10.0021.0008] # LATIN CAPITAL LETTER E WITH OGONEK -0117 ; [.1D10.0022.0002] # LATIN SMALL LETTER E WITH DOT ABOVE -0065 0307 ; [.1D10.0022.0002] # LATIN SMALL LETTER E WITH DOT ABOVE -0116 ; [.1D10.0022.0008] # LATIN CAPITAL LETTER E WITH DOT ABOVE -0045 0307 ; [.1D10.0022.0008] # LATIN CAPITAL LETTER E WITH DOT ABOVE -012F ; [.1D98.0021.0002] # LATIN SMALL LETTER I WITH OGONEK -0069 0328 ; [.1D98.0021.0002] # LATIN SMALL LETTER I WITH OGONEK -012E ; [.1D98.0021.0008] # LATIN CAPITAL LETTER I WITH OGONEK -0049 0328 ; [.1D98.0021.0008] # LATIN CAPITAL LETTER I WITH OGONEK -0079 ; [.1D98.0022.0002] # LATIN SMALL LETTER Y -0059 ; [.1D98.0022.0008] # LATIN CAPITAL LETTER Y -0161 ; [.1ED8.0020.0002] # LATIN SMALL LETTER S WITH CARON -0073 030C ; [.1ED8.0020.0002] # LATIN SMALL LETTER S WITH CARON -0160 ; [.1ED8.0020.0008] # LATIN CAPITAL LETTER S WITH CARON -0053 030C ; [.1ED8.0020.0008] # LATIN CAPITAL LETTER S WITH CARON -0173 ; [.1F1B.0021.0002] # LATIN SMALL LETTER U WITH OGONEK -0075 0328 ; [.1F1B.0021.0002] # LATIN SMALL LETTER U WITH OGONEK -0172 ; [.1F1B.0021.0008] # LATIN CAPITAL LETTER U WITH OGONEK -0055 0328 ; [.1F1B.0021.0008] # LATIN CAPITAL LETTER U WITH OGONEK -016B ; [.1F1B.0022.0002] # LATIN SMALL LETTER U WITH MACRON -0075 0304 ; [.1F1B.0022.0002] # LATIN SMALL LETTER U WITH MACRON -016A ; [.1F1B.0022.0008] # LATIN CAPITAL LETTER U WITH MACRON -0055 0304 ; [.1F1B.0022.0008] # LATIN CAPITAL LETTER U WITH MACRON -017E ; [.1F88.0020.0002] # LATIN SMALL LETTER Z WITH CARON -007A 030C ; [.1F88.0020.0002] # LATIN SMALL LETTER Z WITH CARON -017D ; [.1F88.0020.0008] # LATIN CAPITAL LETTER Z WITH CARON -005A 030C ; [.1F88.0020.0008] # LATIN CAPITAL LETTER Z WITH CARON +0105 ; [.1FA2.0021.0002] # LATIN SMALL LETTER A WITH OGONEK +0061 0328 ; [.1FA2.0021.0002] # LATIN SMALL LETTER A WITH OGONEK +0104 ; [.1FA2.0021.0008] # LATIN CAPITAL LETTER A WITH OGONEK +0041 0328 ; [.1FA2.0021.0008] # LATIN CAPITAL LETTER A WITH OGONEK +010D ; [.1FD7.0020.0002] # LATIN SMALL LETTER C WITH CARON +0063 030C ; [.1FD7.0020.0002] # LATIN SMALL LETTER C WITH CARON +010C ; [.1FD7.0020.0008] # LATIN CAPITAL LETTER C WITH CARON +0043 030C ; [.1FD7.0020.0008] # LATIN CAPITAL LETTER C WITH CARON +0119 ; [.2007.0021.0002] # LATIN SMALL LETTER E WITH OGONEK +0065 0328 ; [.2007.0021.0002] # LATIN SMALL LETTER E WITH OGONEK +0118 ; [.2007.0021.0008] # LATIN CAPITAL LETTER E WITH OGONEK +0045 0328 ; [.2007.0021.0008] # LATIN CAPITAL LETTER E WITH OGONEK +0117 ; [.2007.0022.0002] # LATIN SMALL LETTER E WITH DOT ABOVE +0065 0307 ; [.2007.0022.0002] # LATIN SMALL LETTER E WITH DOT ABOVE +0116 ; [.2007.0022.0008] # LATIN CAPITAL LETTER E WITH DOT ABOVE +0045 0307 ; [.2007.0022.0008] # LATIN CAPITAL LETTER E WITH DOT ABOVE +012F ; [.2090.0021.0002] # LATIN SMALL LETTER I WITH OGONEK +0069 0328 ; [.2090.0021.0002] # LATIN SMALL LETTER I WITH OGONEK +012E ; [.2090.0021.0008] # LATIN CAPITAL LETTER I WITH OGONEK +0049 0328 ; [.2090.0021.0008] # LATIN CAPITAL LETTER I WITH OGONEK +0079 ; [.2090.0022.0002] # LATIN SMALL LETTER Y +0059 ; [.2090.0022.0008] # LATIN CAPITAL LETTER Y +0161 ; [.21D3.0020.0002] # LATIN SMALL LETTER S WITH CARON +0073 030C ; [.21D3.0020.0002] # LATIN SMALL LETTER S WITH CARON +0160 ; [.21D3.0020.0008] # LATIN CAPITAL LETTER S WITH CARON +0053 030C ; [.21D3.0020.0008] # LATIN CAPITAL LETTER S WITH CARON +0173 ; [.2217.0021.0002] # LATIN SMALL LETTER U WITH OGONEK +0075 0328 ; [.2217.0021.0002] # LATIN SMALL LETTER U WITH OGONEK +0172 ; [.2217.0021.0008] # LATIN CAPITAL LETTER U WITH OGONEK +0055 0328 ; [.2217.0021.0008] # LATIN CAPITAL LETTER U WITH OGONEK +016B ; [.2217.0022.0002] # LATIN SMALL LETTER U WITH MACRON +0075 0304 ; [.2217.0022.0002] # LATIN SMALL LETTER U WITH MACRON +016A ; [.2217.0022.0008] # LATIN CAPITAL LETTER U WITH MACRON +0055 0304 ; [.2217.0022.0008] # LATIN CAPITAL LETTER U WITH MACRON +017E ; [.2287.0020.0002] # LATIN SMALL LETTER Z WITH CARON +007A 030C ; [.2287.0020.0002] # LATIN SMALL LETTER Z WITH CARON +017D ; [.2287.0020.0008] # LATIN CAPITAL LETTER Z WITH CARON +005A 030C ; [.2287.0020.0008] # LATIN CAPITAL LETTER Z WITH CARON ENTRY }; diff --git a/gnu/usr.bin/perl/cpan/Unicode-Collate/Collate/Locale/lv.pl b/gnu/usr.bin/perl/cpan/Unicode-Collate/Collate/Locale/lv.pl index f71338b43a1..3f7a2d2fd04 100644 --- a/gnu/usr.bin/perl/cpan/Unicode-Collate/Collate/Locale/lv.pl +++ b/gnu/usr.bin/perl/cpan/Unicode-Collate/Collate/Locale/lv.pl @@ -1,37 +1,37 @@ +{ - locale_version => 1.27, - entry => <<'ENTRY', # for DUCET v10.0.0 -010D ; [.1CF4.0020.0002] # LATIN SMALL LETTER C WITH CARON -0063 030C ; [.1CF4.0020.0002] # LATIN SMALL LETTER C WITH CARON -010C ; [.1CF4.0020.0008] # LATIN CAPITAL LETTER C WITH CARON -0043 030C ; [.1CF4.0020.0008] # LATIN CAPITAL LETTER C WITH CARON -0123 ; [.1D7D.0020.0002] # LATIN SMALL LETTER G WITH CEDILLA -0067 0327 ; [.1D7D.0020.0002] # LATIN SMALL LETTER G WITH CEDILLA -0122 ; [.1D7D.0020.0008] # LATIN CAPITAL LETTER G WITH CEDILLA -0047 0327 ; [.1D7D.0020.0008] # LATIN CAPITAL LETTER G WITH CEDILLA -0137 ; [.1DDC.0020.0002] # LATIN SMALL LETTER K WITH CEDILLA -006B 0327 ; [.1DDC.0020.0002] # LATIN SMALL LETTER K WITH CEDILLA -0136 ; [.1DDC.0020.0008] # LATIN CAPITAL LETTER K WITH CEDILLA -004B 0327 ; [.1DDC.0020.0008] # LATIN CAPITAL LETTER K WITH CEDILLA -013C ; [.1E0F.0020.0002] # LATIN SMALL LETTER L WITH CEDILLA -006C 0327 ; [.1E0F.0020.0002] # LATIN SMALL LETTER L WITH CEDILLA -013B ; [.1E0F.0020.0008] # LATIN CAPITAL LETTER L WITH CEDILLA -004C 0327 ; [.1E0F.0020.0008] # LATIN CAPITAL LETTER L WITH CEDILLA -0146 ; [.1E42.0020.0002] # LATIN SMALL LETTER N WITH CEDILLA -006E 0327 ; [.1E42.0020.0002] # LATIN SMALL LETTER N WITH CEDILLA -0145 ; [.1E42.0020.0008] # LATIN CAPITAL LETTER N WITH CEDILLA -004E 0327 ; [.1E42.0020.0008] # LATIN CAPITAL LETTER N WITH CEDILLA -0157 ; [.1ED6.0020.0002] # LATIN SMALL LETTER R WITH CEDILLA -0072 0327 ; [.1ED6.0020.0002] # LATIN SMALL LETTER R WITH CEDILLA -0156 ; [.1ED6.0020.0008] # LATIN CAPITAL LETTER R WITH CEDILLA -0052 0327 ; [.1ED6.0020.0008] # LATIN CAPITAL LETTER R WITH CEDILLA -0161 ; [.1EFA.0020.0002] # LATIN SMALL LETTER S WITH CARON -0073 030C ; [.1EFA.0020.0002] # LATIN SMALL LETTER S WITH CARON -0160 ; [.1EFA.0020.0008] # LATIN CAPITAL LETTER S WITH CARON -0053 030C ; [.1EFA.0020.0008] # LATIN CAPITAL LETTER S WITH CARON -017E ; [.1FA3.0020.0002] # LATIN SMALL LETTER Z WITH CARON -007A 030C ; [.1FA3.0020.0002] # LATIN SMALL LETTER Z WITH CARON -017D ; [.1FA3.0020.0008] # LATIN CAPITAL LETTER Z WITH CARON -005A 030C ; [.1FA3.0020.0008] # LATIN CAPITAL LETTER Z WITH CARON + locale_version => 1.31, + entry => <<'ENTRY', # for DUCET v13.0.0 +010D ; [.1FEA.0020.0002] # LATIN SMALL LETTER C WITH CARON +0063 030C ; [.1FEA.0020.0002] # LATIN SMALL LETTER C WITH CARON +010C ; [.1FEA.0020.0008] # LATIN CAPITAL LETTER C WITH CARON +0043 030C ; [.1FEA.0020.0008] # LATIN CAPITAL LETTER C WITH CARON +0123 ; [.2074.0020.0002] # LATIN SMALL LETTER G WITH CEDILLA +0067 0327 ; [.2074.0020.0002] # LATIN SMALL LETTER G WITH CEDILLA +0122 ; [.2074.0020.0008] # LATIN CAPITAL LETTER G WITH CEDILLA +0047 0327 ; [.2074.0020.0008] # LATIN CAPITAL LETTER G WITH CEDILLA +0137 ; [.20D5.0020.0002] # LATIN SMALL LETTER K WITH CEDILLA +006B 0327 ; [.20D5.0020.0002] # LATIN SMALL LETTER K WITH CEDILLA +0136 ; [.20D5.0020.0008] # LATIN CAPITAL LETTER K WITH CEDILLA +004B 0327 ; [.20D5.0020.0008] # LATIN CAPITAL LETTER K WITH CEDILLA +013C ; [.2108.0020.0002] # LATIN SMALL LETTER L WITH CEDILLA +006C 0327 ; [.2108.0020.0002] # LATIN SMALL LETTER L WITH CEDILLA +013B ; [.2108.0020.0008] # LATIN CAPITAL LETTER L WITH CEDILLA +004C 0327 ; [.2108.0020.0008] # LATIN CAPITAL LETTER L WITH CEDILLA +0146 ; [.213B.0020.0002] # LATIN SMALL LETTER N WITH CEDILLA +006E 0327 ; [.213B.0020.0002] # LATIN SMALL LETTER N WITH CEDILLA +0145 ; [.213B.0020.0008] # LATIN CAPITAL LETTER N WITH CEDILLA +004E 0327 ; [.213B.0020.0008] # LATIN CAPITAL LETTER N WITH CEDILLA +0157 ; [.21D1.0020.0002] # LATIN SMALL LETTER R WITH CEDILLA +0072 0327 ; [.21D1.0020.0002] # LATIN SMALL LETTER R WITH CEDILLA +0156 ; [.21D1.0020.0008] # LATIN CAPITAL LETTER R WITH CEDILLA +0052 0327 ; [.21D1.0020.0008] # LATIN CAPITAL LETTER R WITH CEDILLA +0161 ; [.21F6.0020.0002] # LATIN SMALL LETTER S WITH CARON +0073 030C ; [.21F6.0020.0002] # LATIN SMALL LETTER S WITH CARON +0160 ; [.21F6.0020.0008] # LATIN CAPITAL LETTER S WITH CARON +0053 030C ; [.21F6.0020.0008] # LATIN CAPITAL LETTER S WITH CARON +017E ; [.22A2.0020.0002] # LATIN SMALL LETTER Z WITH CARON +007A 030C ; [.22A2.0020.0002] # LATIN SMALL LETTER Z WITH CARON +017D ; [.22A2.0020.0008] # LATIN CAPITAL LETTER Z WITH CARON +005A 030C ; [.22A2.0020.0008] # LATIN CAPITAL LETTER Z WITH CARON ENTRY }; diff --git a/gnu/usr.bin/perl/cpan/Unicode-Collate/Collate/Locale/mk.pl b/gnu/usr.bin/perl/cpan/Unicode-Collate/Collate/Locale/mk.pl index 92960db5f4b..53429b23052 100644 --- a/gnu/usr.bin/perl/cpan/Unicode-Collate/Collate/Locale/mk.pl +++ b/gnu/usr.bin/perl/cpan/Unicode-Collate/Collate/Locale/mk.pl @@ -1,20 +1,20 @@ +{ - locale_version => 1.27, + locale_version => 1.31, suppress => [0x0418, 0x0438], - entry => <<'ENTRY', # for DUCET v10.0.0 -0453 ; [.20BC.0020.0002] # CYRILLIC SMALL LETTER GJE -0433 0301 ; [.20BC.0020.0002] # CYRILLIC SMALL LETTER GJE -0433 0341 ; [.20BC.0020.0002] # CYRILLIC SMALL LETTER GJE -0403 ; [.20BC.0020.0008] # CYRILLIC CAPITAL LETTER GJE -0413 0301 ; [.20BC.0020.0008] # CYRILLIC CAPITAL LETTER GJE -0413 0341 ; [.20BC.0020.0008] # CYRILLIC CAPITAL LETTER GJE -045C ; [.2180.0020.0002] # CYRILLIC SMALL LETTER KJE -043A 0301 ; [.2180.0020.0002] # CYRILLIC SMALL LETTER KJE -043A 0341 ; [.2180.0020.0002] # CYRILLIC SMALL LETTER KJE -040C ; [.2180.0020.0008] # CYRILLIC CAPITAL LETTER KJE -041A 0301 ; [.2180.0020.0008] # CYRILLIC CAPITAL LETTER KJE -041A 0341 ; [.2180.0020.0008] # CYRILLIC CAPITAL LETTER KJE -0439 ; [.20E6.0020.0002][.0000.0026.0002] # CYRILLIC SMALL LETTER SHORT I -0419 ; [.20E6.0020.0008][.0000.0026.0002] # CYRILLIC CAPITAL LETTER SHORT I + entry => <<'ENTRY', # for DUCET v13.0.0 +0453 ; [.23BB.0020.0002] # CYRILLIC SMALL LETTER GJE +0433 0301 ; [.23BB.0020.0002] # CYRILLIC SMALL LETTER GJE +0433 0341 ; [.23BB.0020.0002] # CYRILLIC SMALL LETTER GJE +0403 ; [.23BB.0020.0008] # CYRILLIC CAPITAL LETTER GJE +0413 0301 ; [.23BB.0020.0008] # CYRILLIC CAPITAL LETTER GJE +0413 0341 ; [.23BB.0020.0008] # CYRILLIC CAPITAL LETTER GJE +045C ; [.247F.0020.0002] # CYRILLIC SMALL LETTER KJE +043A 0301 ; [.247F.0020.0002] # CYRILLIC SMALL LETTER KJE +043A 0341 ; [.247F.0020.0002] # CYRILLIC SMALL LETTER KJE +040C ; [.247F.0020.0008] # CYRILLIC CAPITAL LETTER KJE +041A 0301 ; [.247F.0020.0008] # CYRILLIC CAPITAL LETTER KJE +041A 0341 ; [.247F.0020.0008] # CYRILLIC CAPITAL LETTER KJE +0439 ; [.23E5.0020.0002][.0000.0026.0002] # CYRILLIC SMALL LETTER SHORT I +0419 ; [.23E5.0020.0008][.0000.0026.0002] # CYRILLIC CAPITAL LETTER SHORT I ENTRY }; diff --git a/gnu/usr.bin/perl/cpan/Unicode-Collate/Collate/Locale/ml.pl b/gnu/usr.bin/perl/cpan/Unicode-Collate/Collate/Locale/ml.pl index 8a23381813b..57f45d684e4 100644 --- a/gnu/usr.bin/perl/cpan/Unicode-Collate/Collate/Locale/ml.pl +++ b/gnu/usr.bin/perl/cpan/Unicode-Collate/Collate/Locale/ml.pl @@ -1,23 +1,23 @@ +{ - locale_version => 1.27, - entry => <<'ENTRY', # for DUCET v10.0.0 + locale_version => 1.31, + entry => <<'ENTRY', # for DUCET v13.0.0 0D3D ; [.0000.00C6.0002] # MALAYALAM SIGN AVAGRAHA -0D57 ; [.293F.0020.0002] # MALAYALAM AU LENGTH MARK -0D4C ; [.293F.0020.0003] # MALAYALAM VOWEL SIGN AU -0D46 0D57 ; [.293F.0020.0003] # MALAYALAM VOWEL SIGN AU -0D15 0D4D 200D ; [.290A.0020.0002][.2941.0021.0002] # -0D7F ; [.290A.0020.0003][.2941.0021.0002] # MALAYALAM LETTER CHILLU K -0D23 0D4D 200D ; [.2918.0020.0002][.2941.0021.0002] # -0D7A ; [.2918.0020.0003][.2941.0021.0002] # MALAYALAM LETTER CHILLU NN -0D28 0D4D 200D ; [.291D.0020.0002][.2941.0021.0002] # -0D7B ; [.291D.0020.0003][.2941.0021.0002] # MALAYALAM LETTER CHILLU N -0D30 0D4D 200D ; [.2925.0020.0002][.2941.0021.0002] # -0D7C ; [.2925.0020.0003][.2941.0021.0002] # MALAYALAM LETTER CHILLU RR -0D32 0D4D 200D ; [.2926.0020.0002][.2941.0021.0002] # -0D7D ; [.2926.0020.0003][.2941.0021.0002] # MALAYALAM LETTER CHILLU L -0D33 0D4D 200D ; [.292C.0020.0002][.2941.0021.0002] # -0D7E ; [.292C.0020.0003][.2941.0021.0002] # MALAYALAM LETTER CHILLU LL -0D02 ; [.2923.0020.0002][.2941.0021.0002] # MALAYALAM SIGN ANUSVARA -0D7B 0D4D ; [.291D.0020.0002][.2941.0020.0003] # +0D57 ; [.2C4D.0020.0002] # MALAYALAM AU LENGTH MARK +0D4C ; [.2C4D.0020.0003] # MALAYALAM VOWEL SIGN AU +0D46 0D57 ; [.2C4D.0020.0003] # MALAYALAM VOWEL SIGN AU +0D15 0D4D 200D ; [.2C17.0020.0002][.2C4F.0021.0002] # +0D7F ; [.2C17.0020.0003][.2C4F.0021.0002] # MALAYALAM LETTER CHILLU K +0D23 0D4D 200D ; [.2C25.0020.0002][.2C4F.0021.0002] # +0D7A ; [.2C25.0020.0003][.2C4F.0021.0002] # MALAYALAM LETTER CHILLU NN +0D28 0D4D 200D ; [.2C2A.0020.0002][.2C4F.0021.0002] # +0D7B ; [.2C2A.0020.0003][.2C4F.0021.0002] # MALAYALAM LETTER CHILLU N +0D30 0D4D 200D ; [.2C32.0020.0002][.2C4F.0021.0002] # +0D7C ; [.2C32.0020.0003][.2C4F.0021.0002] # MALAYALAM LETTER CHILLU RR +0D32 0D4D 200D ; [.2C33.0020.0002][.2C4F.0021.0002] # +0D7D ; [.2C33.0020.0003][.2C4F.0021.0002] # MALAYALAM LETTER CHILLU L +0D33 0D4D 200D ; [.2C39.0020.0002][.2C4F.0021.0002] # +0D7E ; [.2C39.0020.0003][.2C4F.0021.0002] # MALAYALAM LETTER CHILLU LL +0D02 ; [.2C30.0020.0002][.2C4F.0021.0002] # MALAYALAM SIGN ANUSVARA +0D7B 0D4D ; [.2C2A.0020.0002][.2C4F.0020.0003] # ENTRY }; diff --git a/gnu/usr.bin/perl/cpan/Unicode-Collate/Collate/Locale/mr.pl b/gnu/usr.bin/perl/cpan/Unicode-Collate/Collate/Locale/mr.pl index ac89aa1c017..fd786ee6d33 100644 --- a/gnu/usr.bin/perl/cpan/Unicode-Collate/Collate/Locale/mr.pl +++ b/gnu/usr.bin/perl/cpan/Unicode-Collate/Collate/Locale/mr.pl @@ -1,14 +1,14 @@ +{ - locale_version => 1.27, - entry => <<'ENTRY', # for DUCET v10.0.0 -0902 ; [.26CC.0020.0002][.FFF1.0000.0000] # DEVANAGARI SIGN ANUSVARA -0901 ; [.26CC.0021.0002][.FFF1.0000.0000] # DEVANAGARI SIGN CANDRABINDU -0903 ; [.26CC.0020.0002][.FFF2.0000.0000] # DEVANAGARI SIGN VISARGA -0950 ; [.26CC.0020.0002][.FFF0.0000.0000] # DEVANAGARI OM -0933 ; [.270F.0020.0002][.FFF1.0000.0000] # DEVANAGARI LETTER LLA -0934 ; [.270F.0020.0002][.FFF1.0000.0000][.0000.00C2.0002] # DEVANAGARI LETTER LLLA -0915 094D 0937 ; [.270F.0020.0002][.FFF2.0000.0000] # -091C 094D 091E ; [.270F.0020.0002][.FFF3.0000.0000] # -0939 ; [.270F.0020.0002][.FFF0.0000.0000] # DEVANAGARI LETTER HA + locale_version => 1.31, + entry => <<'ENTRY', # for DUCET v13.0.0 +0902 ; [.29D7.0020.0002][.FFF1.0000.0000] # DEVANAGARI SIGN ANUSVARA +0901 ; [.29D7.0021.0002][.FFF1.0000.0000] # DEVANAGARI SIGN CANDRABINDU +0903 ; [.29D7.0020.0002][.FFF2.0000.0000] # DEVANAGARI SIGN VISARGA +0950 ; [.29D7.0020.0002][.FFF0.0000.0000] # DEVANAGARI OM +0933 ; [.2A1B.0020.0002][.FFF1.0000.0000] # DEVANAGARI LETTER LLA +0934 ; [.2A1B.0020.0002][.FFF1.0000.0000][.0000.00C2.0002] # DEVANAGARI LETTER LLLA +0915 094D 0937 ; [.2A1B.0020.0002][.FFF2.0000.0000] # +091C 094D 091E ; [.2A1B.0020.0002][.FFF3.0000.0000] # +0939 ; [.2A1B.0020.0002][.FFF0.0000.0000] # DEVANAGARI LETTER HA ENTRY }; diff --git a/gnu/usr.bin/perl/cpan/Unicode-Collate/Collate/Locale/mt.pl b/gnu/usr.bin/perl/cpan/Unicode-Collate/Collate/Locale/mt.pl index aba88404944..b4fec802c70 100644 --- a/gnu/usr.bin/perl/cpan/Unicode-Collate/Collate/Locale/mt.pl +++ b/gnu/usr.bin/perl/cpan/Unicode-Collate/Collate/Locale/mt.pl @@ -1,31 +1,31 @@ +{ - locale_version => 1.27, + locale_version => 1.31, upper_before_lower => 1, - entry => <<'ENTRY', # for DUCET v10.0.0 -010B ; [.1CDF.0020.0002] # LATIN SMALL LETTER C WITH DOT ABOVE -0063 0307 ; [.1CDF.0020.0002] # LATIN SMALL LETTER C WITH DOT ABOVE -010A ; [.1CDF.0020.0008] # LATIN CAPITAL LETTER C WITH DOT ABOVE -0043 0307 ; [.1CDF.0020.0008] # LATIN CAPITAL LETTER C WITH DOT ABOVE -0121 ; [.1D59.0020.0002] # LATIN SMALL LETTER G WITH DOT ABOVE -0067 0307 ; [.1D59.0020.0002] # LATIN SMALL LETTER G WITH DOT ABOVE -0120 ; [.1D59.0020.0008] # LATIN CAPITAL LETTER G WITH DOT ABOVE -0047 0307 ; [.1D59.0020.0008] # LATIN CAPITAL LETTER G WITH DOT ABOVE -0067 0127 ; [.1D7D.0020.0002] # -0067 0126 ; [.1D7D.0020.0007][.0000.0000.0002] # -0047 0127 ; [.1D7D.0020.0007][.0000.0000.0008] # -0047 0126 ; [.1D7D.0020.0008] # -0067 0068 0335 ; [.1D7D.0020.0002] # -0067 0048 0335 ; [.1D7D.0020.0007][.0000.0000.0002] # -0047 0068 0335 ; [.1D7D.0020.0007][.0000.0000.0008] # -0047 0048 0335 ; [.1D7D.0020.0008] # -0127 ; [.1D97.0020.0002] # LATIN SMALL LETTER H WITH STROKE -0068 0335 ; [.1D97.0020.0002] # LATIN SMALL LETTER H WITH STROKE -210F ; [.1D97.0020.0002] # PLANCK CONSTANT OVER TWO PI -0126 ; [.1D97.0020.0008] # LATIN CAPITAL LETTER H WITH STROKE -0048 0335 ; [.1D97.0020.0008] # LATIN CAPITAL LETTER H WITH STROKE -017C ; [.1F86.0020.0002] # LATIN SMALL LETTER Z WITH DOT ABOVE -007A 0307 ; [.1F86.0020.0002] # LATIN SMALL LETTER Z WITH DOT ABOVE -017B ; [.1F86.0020.0008] # LATIN CAPITAL LETTER Z WITH DOT ABOVE -005A 0307 ; [.1F86.0020.0008] # LATIN CAPITAL LETTER Z WITH DOT ABOVE + entry => <<'ENTRY', # for DUCET v13.0.0 +010B ; [.1FD5.0020.0002] # LATIN SMALL LETTER C WITH DOT ABOVE +0063 0307 ; [.1FD5.0020.0002] # LATIN SMALL LETTER C WITH DOT ABOVE +010A ; [.1FD5.0020.0008] # LATIN CAPITAL LETTER C WITH DOT ABOVE +0043 0307 ; [.1FD5.0020.0008] # LATIN CAPITAL LETTER C WITH DOT ABOVE +0121 ; [.2050.0020.0002] # LATIN SMALL LETTER G WITH DOT ABOVE +0067 0307 ; [.2050.0020.0002] # LATIN SMALL LETTER G WITH DOT ABOVE +0120 ; [.2050.0020.0008] # LATIN CAPITAL LETTER G WITH DOT ABOVE +0047 0307 ; [.2050.0020.0008] # LATIN CAPITAL LETTER G WITH DOT ABOVE +0067 0127 ; [.2074.0020.0002] # +0067 0126 ; [.2074.0020.0007][.0000.0000.0002] # +0047 0127 ; [.2074.0020.0007][.0000.0000.0008] # +0047 0126 ; [.2074.0020.0008] # +0067 0068 0335 ; [.2074.0020.0002] # +0067 0048 0335 ; [.2074.0020.0007][.0000.0000.0002] # +0047 0068 0335 ; [.2074.0020.0007][.0000.0000.0008] # +0047 0048 0335 ; [.2074.0020.0008] # +0127 ; [.208F.0020.0002] # LATIN SMALL LETTER H WITH STROKE +0068 0335 ; [.208F.0020.0002] # LATIN SMALL LETTER H WITH STROKE +210F ; [.208F.0020.0002] # PLANCK CONSTANT OVER TWO PI +0126 ; [.208F.0020.0008] # LATIN CAPITAL LETTER H WITH STROKE +0048 0335 ; [.208F.0020.0008] # LATIN CAPITAL LETTER H WITH STROKE +017C ; [.2285.0020.0002] # LATIN SMALL LETTER Z WITH DOT ABOVE +007A 0307 ; [.2285.0020.0002] # LATIN SMALL LETTER Z WITH DOT ABOVE +017B ; [.2285.0020.0008] # LATIN CAPITAL LETTER Z WITH DOT ABOVE +005A 0307 ; [.2285.0020.0008] # LATIN CAPITAL LETTER Z WITH DOT ABOVE ENTRY }; diff --git a/gnu/usr.bin/perl/cpan/Unicode-Collate/Collate/Locale/nb.pl b/gnu/usr.bin/perl/cpan/Unicode-Collate/Collate/Locale/nb.pl index 745a9ccef24..a1c27e1c085 100644 --- a/gnu/usr.bin/perl/cpan/Unicode-Collate/Collate/Locale/nb.pl +++ b/gnu/usr.bin/perl/cpan/Unicode-Collate/Collate/Locale/nb.pl @@ -1,76 +1,76 @@ +{ - locale_version => 1.27, - entry => <<'ENTRY', # for DUCET v10.0.0 -0111 ; [.1CF5.0021.0002] # LATIN SMALL LETTER D WITH STROKE -0064 0335 ; [.1CF5.0021.0002] # LATIN SMALL LETTER D WITH STROKE -0110 ; [.1CF5.0021.0008] # LATIN CAPITAL LETTER D WITH STROKE -0044 0335 ; [.1CF5.0021.0008] # LATIN CAPITAL LETTER D WITH STROKE -00F0 ; [.1CF5.0022.0002] # LATIN SMALL LETTER ETH -1DD9 ; [.1CF5.0022.0002] # COMBINING LATIN SMALL LETTER ETH -00D0 ; [.1CF5.0022.0008] # LATIN CAPITAL LETTER ETH -00FE ; [.1EFB.0020.0003][.1D7E.0020.0003] # LATIN SMALL LETTER THORN -00DE ; [.1EFB.0020.0009][.1D7E.0020.0009] # LATIN CAPITAL LETTER THORN -00FC ; [.1F71.0021.0002] # LATIN SMALL LETTER U WITH DIAERESIS -0075 0308 ; [.1F71.0021.0002] # LATIN SMALL LETTER U WITH DIAERESIS -00DC ; [.1F71.0021.0008] # LATIN CAPITAL LETTER U WITH DIAERESIS -0055 0308 ; [.1F71.0021.0008] # LATIN CAPITAL LETTER U WITH DIAERESIS -01DC ; [.1F71.0021.0002][.0000.0025.0002] # LATIN SMALL LETTER U WITH DIAERESIS AND GRAVE -01DB ; [.1F71.0021.0008][.0000.0025.0002] # LATIN CAPITAL LETTER U WITH DIAERESIS AND GRAVE -01D8 ; [.1F71.0021.0002][.0000.0024.0002] # LATIN SMALL LETTER U WITH DIAERESIS AND ACUTE -01D7 ; [.1F71.0021.0008][.0000.0024.0002] # LATIN CAPITAL LETTER U WITH DIAERESIS AND ACUTE -01D6 ; [.1F71.0021.0002][.0000.0032.0002] # LATIN SMALL LETTER U WITH DIAERESIS AND MACRON -01D5 ; [.1F71.0021.0008][.0000.0032.0002] # LATIN CAPITAL LETTER U WITH DIAERESIS AND MACRON -01DA ; [.1F71.0021.0002][.0000.0028.0002] # LATIN SMALL LETTER U WITH DIAERESIS AND CARON -01D9 ; [.1F71.0021.0008][.0000.0028.0002] # LATIN CAPITAL LETTER U WITH DIAERESIS AND CARON -0171 ; [.1F71.0022.0002] # LATIN SMALL LETTER U WITH DOUBLE ACUTE -0075 030B ; [.1F71.0022.0002] # LATIN SMALL LETTER U WITH DOUBLE ACUTE -0170 ; [.1F71.0022.0008] # LATIN CAPITAL LETTER U WITH DOUBLE ACUTE -0055 030B ; [.1F71.0022.0008] # LATIN CAPITAL LETTER U WITH DOUBLE ACUTE -00E6 ; [.1FFC.0020.0002] # LATIN SMALL LETTER AE -1DD4 ; [.1FFC.0020.0002] # COMBINING LATIN SMALL LETTER AE -00C6 ; [.1FFC.0020.0008] # LATIN CAPITAL LETTER AE -1D2D ; [.1FFC.0020.0014] # MODIFIER LETTER CAPITAL AE -01FD ; [.1FFC.0020.0002][.0000.0024.0002] # LATIN SMALL LETTER AE WITH ACUTE -01FC ; [.1FFC.0020.0008][.0000.0024.0002] # LATIN CAPITAL LETTER AE WITH ACUTE -01E3 ; [.1FFC.0020.0002][.0000.0032.0002] # LATIN SMALL LETTER AE WITH MACRON -01E2 ; [.1FFC.0020.0008][.0000.0032.0002] # LATIN CAPITAL LETTER AE WITH MACRON -00E4 ; [.1FFC.0021.0002] # LATIN SMALL LETTER A WITH DIAERESIS -0061 0308 ; [.1FFC.0021.0002] # LATIN SMALL LETTER A WITH DIAERESIS -00C4 ; [.1FFC.0021.0008] # LATIN CAPITAL LETTER A WITH DIAERESIS -0041 0308 ; [.1FFC.0021.0008] # LATIN CAPITAL LETTER A WITH DIAERESIS -01DF ; [.1FFC.0021.0002][.0000.0032.0002] # LATIN SMALL LETTER A WITH DIAERESIS AND MACRON -01DE ; [.1FFC.0021.0008][.0000.0032.0002] # LATIN CAPITAL LETTER A WITH DIAERESIS AND MACRON -0119 ; [.1FFC.0022.0002] # LATIN SMALL LETTER E WITH OGONEK -0065 0328 ; [.1FFC.0022.0002] # LATIN SMALL LETTER E WITH OGONEK -0118 ; [.1FFC.0022.0008] # LATIN CAPITAL LETTER E WITH OGONEK -0045 0328 ; [.1FFC.0022.0008] # LATIN CAPITAL LETTER E WITH OGONEK -00F8 ; [.1FFD.0020.0002] # LATIN SMALL LETTER O WITH STROKE -006F 0338 ; [.1FFD.0020.0002] # LATIN SMALL LETTER O WITH STROKE -00D8 ; [.1FFD.0020.0008] # LATIN CAPITAL LETTER O WITH STROKE -004F 0338 ; [.1FFD.0020.0008] # LATIN CAPITAL LETTER O WITH STROKE -01FF ; [.1FFD.0020.0002][.0000.0024.0002] # LATIN SMALL LETTER O WITH STROKE AND ACUTE -01FE ; [.1FFD.0020.0008][.0000.0024.0002] # LATIN CAPITAL LETTER O WITH STROKE AND ACUTE -00F6 ; [.1FFD.0021.0002] # LATIN SMALL LETTER O WITH DIAERESIS -006F 0308 ; [.1FFD.0021.0002] # LATIN SMALL LETTER O WITH DIAERESIS -00D6 ; [.1FFD.0021.0008] # LATIN CAPITAL LETTER O WITH DIAERESIS -004F 0308 ; [.1FFD.0021.0008] # LATIN CAPITAL LETTER O WITH DIAERESIS -022B ; [.1FFD.0021.0002][.0000.0032.0002] # LATIN SMALL LETTER O WITH DIAERESIS AND MACRON -022A ; [.1FFD.0021.0008][.0000.0032.0002] # LATIN CAPITAL LETTER O WITH DIAERESIS AND MACRON -0151 ; [.1FFD.0022.0002] # LATIN SMALL LETTER O WITH DOUBLE ACUTE -006F 030B ; [.1FFD.0022.0002] # LATIN SMALL LETTER O WITH DOUBLE ACUTE -0150 ; [.1FFD.0022.0008] # LATIN CAPITAL LETTER O WITH DOUBLE ACUTE -004F 030B ; [.1FFD.0022.0008] # LATIN CAPITAL LETTER O WITH DOUBLE ACUTE -0153 ; [.1FFD.0023.0002] # LATIN SMALL LIGATURE OE -0152 ; [.1FFD.0023.0008] # LATIN CAPITAL LIGATURE OE -00E5 ; [.1FFE.0020.0002] # LATIN SMALL LETTER A WITH RING ABOVE -0061 030A ; [.1FFE.0020.0002] # LATIN SMALL LETTER A WITH RING ABOVE -00C5 ; [.1FFE.0020.0008] # LATIN CAPITAL LETTER A WITH RING ABOVE -0041 030A ; [.1FFE.0020.0008] # LATIN CAPITAL LETTER A WITH RING ABOVE -212B ; [.1FFE.0020.0008] # ANGSTROM SIGN -01FB ; [.1FFE.0020.0002][.0000.0024.0002] # LATIN SMALL LETTER A WITH RING ABOVE AND ACUTE -01FA ; [.1FFE.0020.0008][.0000.0024.0002] # LATIN CAPITAL LETTER A WITH RING ABOVE AND ACUTE -0061 0061 ; [.1FFE.0021.0002] # -0041 0061 ; [.1FFE.0021.0007] # -0041 0041 ; [.1FFE.0021.0008] # + locale_version => 1.31, + entry => <<'ENTRY', # for DUCET v13.0.0 +0111 ; [.1FEB.0021.0002] # LATIN SMALL LETTER D WITH STROKE +0064 0335 ; [.1FEB.0021.0002] # LATIN SMALL LETTER D WITH STROKE +0110 ; [.1FEB.0021.0008] # LATIN CAPITAL LETTER D WITH STROKE +0044 0335 ; [.1FEB.0021.0008] # LATIN CAPITAL LETTER D WITH STROKE +00F0 ; [.1FEB.0022.0002] # LATIN SMALL LETTER ETH +1DD9 ; [.1FEB.0022.0002] # COMBINING LATIN SMALL LETTER ETH +00D0 ; [.1FEB.0022.0008] # LATIN CAPITAL LETTER ETH +00FE ; [.21F7.0020.0003][.2075.0020.0003] # LATIN SMALL LETTER THORN +00DE ; [.21F7.0020.0009][.2075.0020.0009] # LATIN CAPITAL LETTER THORN +00FC ; [.2270.0021.0002] # LATIN SMALL LETTER U WITH DIAERESIS +0075 0308 ; [.2270.0021.0002] # LATIN SMALL LETTER U WITH DIAERESIS +00DC ; [.2270.0021.0008] # LATIN CAPITAL LETTER U WITH DIAERESIS +0055 0308 ; [.2270.0021.0008] # LATIN CAPITAL LETTER U WITH DIAERESIS +01DC ; [.2270.0021.0002][.0000.0025.0002] # LATIN SMALL LETTER U WITH DIAERESIS AND GRAVE +01DB ; [.2270.0021.0008][.0000.0025.0002] # LATIN CAPITAL LETTER U WITH DIAERESIS AND GRAVE +01D8 ; [.2270.0021.0002][.0000.0024.0002] # LATIN SMALL LETTER U WITH DIAERESIS AND ACUTE +01D7 ; [.2270.0021.0008][.0000.0024.0002] # LATIN CAPITAL LETTER U WITH DIAERESIS AND ACUTE +01D6 ; [.2270.0021.0002][.0000.0032.0002] # LATIN SMALL LETTER U WITH DIAERESIS AND MACRON +01D5 ; [.2270.0021.0008][.0000.0032.0002] # LATIN CAPITAL LETTER U WITH DIAERESIS AND MACRON +01DA ; [.2270.0021.0002][.0000.0028.0002] # LATIN SMALL LETTER U WITH DIAERESIS AND CARON +01D9 ; [.2270.0021.0008][.0000.0028.0002] # LATIN CAPITAL LETTER U WITH DIAERESIS AND CARON +0171 ; [.2270.0022.0002] # LATIN SMALL LETTER U WITH DOUBLE ACUTE +0075 030B ; [.2270.0022.0002] # LATIN SMALL LETTER U WITH DOUBLE ACUTE +0170 ; [.2270.0022.0008] # LATIN CAPITAL LETTER U WITH DOUBLE ACUTE +0055 030B ; [.2270.0022.0008] # LATIN CAPITAL LETTER U WITH DOUBLE ACUTE +00E6 ; [.22FB.0020.0002] # LATIN SMALL LETTER AE +1DD4 ; [.22FB.0020.0002] # COMBINING LATIN SMALL LETTER AE +00C6 ; [.22FB.0020.0008] # LATIN CAPITAL LETTER AE +1D2D ; [.22FB.0020.0014] # MODIFIER LETTER CAPITAL AE +01FD ; [.22FB.0020.0002][.0000.0024.0002] # LATIN SMALL LETTER AE WITH ACUTE +01FC ; [.22FB.0020.0008][.0000.0024.0002] # LATIN CAPITAL LETTER AE WITH ACUTE +01E3 ; [.22FB.0020.0002][.0000.0032.0002] # LATIN SMALL LETTER AE WITH MACRON +01E2 ; [.22FB.0020.0008][.0000.0032.0002] # LATIN CAPITAL LETTER AE WITH MACRON +00E4 ; [.22FB.0021.0002] # LATIN SMALL LETTER A WITH DIAERESIS +0061 0308 ; [.22FB.0021.0002] # LATIN SMALL LETTER A WITH DIAERESIS +00C4 ; [.22FB.0021.0008] # LATIN CAPITAL LETTER A WITH DIAERESIS +0041 0308 ; [.22FB.0021.0008] # LATIN CAPITAL LETTER A WITH DIAERESIS +01DF ; [.22FB.0021.0002][.0000.0032.0002] # LATIN SMALL LETTER A WITH DIAERESIS AND MACRON +01DE ; [.22FB.0021.0008][.0000.0032.0002] # LATIN CAPITAL LETTER A WITH DIAERESIS AND MACRON +0119 ; [.22FB.0022.0002] # LATIN SMALL LETTER E WITH OGONEK +0065 0328 ; [.22FB.0022.0002] # LATIN SMALL LETTER E WITH OGONEK +0118 ; [.22FB.0022.0008] # LATIN CAPITAL LETTER E WITH OGONEK +0045 0328 ; [.22FB.0022.0008] # LATIN CAPITAL LETTER E WITH OGONEK +00F8 ; [.22FC.0020.0002] # LATIN SMALL LETTER O WITH STROKE +006F 0338 ; [.22FC.0020.0002] # LATIN SMALL LETTER O WITH STROKE +00D8 ; [.22FC.0020.0008] # LATIN CAPITAL LETTER O WITH STROKE +004F 0338 ; [.22FC.0020.0008] # LATIN CAPITAL LETTER O WITH STROKE +01FF ; [.22FC.0020.0002][.0000.0024.0002] # LATIN SMALL LETTER O WITH STROKE AND ACUTE +01FE ; [.22FC.0020.0008][.0000.0024.0002] # LATIN CAPITAL LETTER O WITH STROKE AND ACUTE +00F6 ; [.22FC.0021.0002] # LATIN SMALL LETTER O WITH DIAERESIS +006F 0308 ; [.22FC.0021.0002] # LATIN SMALL LETTER O WITH DIAERESIS +00D6 ; [.22FC.0021.0008] # LATIN CAPITAL LETTER O WITH DIAERESIS +004F 0308 ; [.22FC.0021.0008] # LATIN CAPITAL LETTER O WITH DIAERESIS +022B ; [.22FC.0021.0002][.0000.0032.0002] # LATIN SMALL LETTER O WITH DIAERESIS AND MACRON +022A ; [.22FC.0021.0008][.0000.0032.0002] # LATIN CAPITAL LETTER O WITH DIAERESIS AND MACRON +0151 ; [.22FC.0022.0002] # LATIN SMALL LETTER O WITH DOUBLE ACUTE +006F 030B ; [.22FC.0022.0002] # LATIN SMALL LETTER O WITH DOUBLE ACUTE +0150 ; [.22FC.0022.0008] # LATIN CAPITAL LETTER O WITH DOUBLE ACUTE +004F 030B ; [.22FC.0022.0008] # LATIN CAPITAL LETTER O WITH DOUBLE ACUTE +0153 ; [.22FC.0023.0002] # LATIN SMALL LIGATURE OE +0152 ; [.22FC.0023.0008] # LATIN CAPITAL LIGATURE OE +00E5 ; [.22FD.0020.0002] # LATIN SMALL LETTER A WITH RING ABOVE +0061 030A ; [.22FD.0020.0002] # LATIN SMALL LETTER A WITH RING ABOVE +00C5 ; [.22FD.0020.0008] # LATIN CAPITAL LETTER A WITH RING ABOVE +0041 030A ; [.22FD.0020.0008] # LATIN CAPITAL LETTER A WITH RING ABOVE +212B ; [.22FD.0020.0008] # ANGSTROM SIGN +01FB ; [.22FD.0020.0002][.0000.0024.0002] # LATIN SMALL LETTER A WITH RING ABOVE AND ACUTE +01FA ; [.22FD.0020.0008][.0000.0024.0002] # LATIN CAPITAL LETTER A WITH RING ABOVE AND ACUTE +0061 0061 ; [.22FD.0021.0002] # +0041 0061 ; [.22FD.0021.0007] # +0041 0041 ; [.22FD.0021.0008] # ENTRY }; diff --git a/gnu/usr.bin/perl/cpan/Unicode-Collate/Collate/Locale/nn.pl b/gnu/usr.bin/perl/cpan/Unicode-Collate/Collate/Locale/nn.pl index 745a9ccef24..a1c27e1c085 100644 --- a/gnu/usr.bin/perl/cpan/Unicode-Collate/Collate/Locale/nn.pl +++ b/gnu/usr.bin/perl/cpan/Unicode-Collate/Collate/Locale/nn.pl @@ -1,76 +1,76 @@ +{ - locale_version => 1.27, - entry => <<'ENTRY', # for DUCET v10.0.0 -0111 ; [.1CF5.0021.0002] # LATIN SMALL LETTER D WITH STROKE -0064 0335 ; [.1CF5.0021.0002] # LATIN SMALL LETTER D WITH STROKE -0110 ; [.1CF5.0021.0008] # LATIN CAPITAL LETTER D WITH STROKE -0044 0335 ; [.1CF5.0021.0008] # LATIN CAPITAL LETTER D WITH STROKE -00F0 ; [.1CF5.0022.0002] # LATIN SMALL LETTER ETH -1DD9 ; [.1CF5.0022.0002] # COMBINING LATIN SMALL LETTER ETH -00D0 ; [.1CF5.0022.0008] # LATIN CAPITAL LETTER ETH -00FE ; [.1EFB.0020.0003][.1D7E.0020.0003] # LATIN SMALL LETTER THORN -00DE ; [.1EFB.0020.0009][.1D7E.0020.0009] # LATIN CAPITAL LETTER THORN -00FC ; [.1F71.0021.0002] # LATIN SMALL LETTER U WITH DIAERESIS -0075 0308 ; [.1F71.0021.0002] # LATIN SMALL LETTER U WITH DIAERESIS -00DC ; [.1F71.0021.0008] # LATIN CAPITAL LETTER U WITH DIAERESIS -0055 0308 ; [.1F71.0021.0008] # LATIN CAPITAL LETTER U WITH DIAERESIS -01DC ; [.1F71.0021.0002][.0000.0025.0002] # LATIN SMALL LETTER U WITH DIAERESIS AND GRAVE -01DB ; [.1F71.0021.0008][.0000.0025.0002] # LATIN CAPITAL LETTER U WITH DIAERESIS AND GRAVE -01D8 ; [.1F71.0021.0002][.0000.0024.0002] # LATIN SMALL LETTER U WITH DIAERESIS AND ACUTE -01D7 ; [.1F71.0021.0008][.0000.0024.0002] # LATIN CAPITAL LETTER U WITH DIAERESIS AND ACUTE -01D6 ; [.1F71.0021.0002][.0000.0032.0002] # LATIN SMALL LETTER U WITH DIAERESIS AND MACRON -01D5 ; [.1F71.0021.0008][.0000.0032.0002] # LATIN CAPITAL LETTER U WITH DIAERESIS AND MACRON -01DA ; [.1F71.0021.0002][.0000.0028.0002] # LATIN SMALL LETTER U WITH DIAERESIS AND CARON -01D9 ; [.1F71.0021.0008][.0000.0028.0002] # LATIN CAPITAL LETTER U WITH DIAERESIS AND CARON -0171 ; [.1F71.0022.0002] # LATIN SMALL LETTER U WITH DOUBLE ACUTE -0075 030B ; [.1F71.0022.0002] # LATIN SMALL LETTER U WITH DOUBLE ACUTE -0170 ; [.1F71.0022.0008] # LATIN CAPITAL LETTER U WITH DOUBLE ACUTE -0055 030B ; [.1F71.0022.0008] # LATIN CAPITAL LETTER U WITH DOUBLE ACUTE -00E6 ; [.1FFC.0020.0002] # LATIN SMALL LETTER AE -1DD4 ; [.1FFC.0020.0002] # COMBINING LATIN SMALL LETTER AE -00C6 ; [.1FFC.0020.0008] # LATIN CAPITAL LETTER AE -1D2D ; [.1FFC.0020.0014] # MODIFIER LETTER CAPITAL AE -01FD ; [.1FFC.0020.0002][.0000.0024.0002] # LATIN SMALL LETTER AE WITH ACUTE -01FC ; [.1FFC.0020.0008][.0000.0024.0002] # LATIN CAPITAL LETTER AE WITH ACUTE -01E3 ; [.1FFC.0020.0002][.0000.0032.0002] # LATIN SMALL LETTER AE WITH MACRON -01E2 ; [.1FFC.0020.0008][.0000.0032.0002] # LATIN CAPITAL LETTER AE WITH MACRON -00E4 ; [.1FFC.0021.0002] # LATIN SMALL LETTER A WITH DIAERESIS -0061 0308 ; [.1FFC.0021.0002] # LATIN SMALL LETTER A WITH DIAERESIS -00C4 ; [.1FFC.0021.0008] # LATIN CAPITAL LETTER A WITH DIAERESIS -0041 0308 ; [.1FFC.0021.0008] # LATIN CAPITAL LETTER A WITH DIAERESIS -01DF ; [.1FFC.0021.0002][.0000.0032.0002] # LATIN SMALL LETTER A WITH DIAERESIS AND MACRON -01DE ; [.1FFC.0021.0008][.0000.0032.0002] # LATIN CAPITAL LETTER A WITH DIAERESIS AND MACRON -0119 ; [.1FFC.0022.0002] # LATIN SMALL LETTER E WITH OGONEK -0065 0328 ; [.1FFC.0022.0002] # LATIN SMALL LETTER E WITH OGONEK -0118 ; [.1FFC.0022.0008] # LATIN CAPITAL LETTER E WITH OGONEK -0045 0328 ; [.1FFC.0022.0008] # LATIN CAPITAL LETTER E WITH OGONEK -00F8 ; [.1FFD.0020.0002] # LATIN SMALL LETTER O WITH STROKE -006F 0338 ; [.1FFD.0020.0002] # LATIN SMALL LETTER O WITH STROKE -00D8 ; [.1FFD.0020.0008] # LATIN CAPITAL LETTER O WITH STROKE -004F 0338 ; [.1FFD.0020.0008] # LATIN CAPITAL LETTER O WITH STROKE -01FF ; [.1FFD.0020.0002][.0000.0024.0002] # LATIN SMALL LETTER O WITH STROKE AND ACUTE -01FE ; [.1FFD.0020.0008][.0000.0024.0002] # LATIN CAPITAL LETTER O WITH STROKE AND ACUTE -00F6 ; [.1FFD.0021.0002] # LATIN SMALL LETTER O WITH DIAERESIS -006F 0308 ; [.1FFD.0021.0002] # LATIN SMALL LETTER O WITH DIAERESIS -00D6 ; [.1FFD.0021.0008] # LATIN CAPITAL LETTER O WITH DIAERESIS -004F 0308 ; [.1FFD.0021.0008] # LATIN CAPITAL LETTER O WITH DIAERESIS -022B ; [.1FFD.0021.0002][.0000.0032.0002] # LATIN SMALL LETTER O WITH DIAERESIS AND MACRON -022A ; [.1FFD.0021.0008][.0000.0032.0002] # LATIN CAPITAL LETTER O WITH DIAERESIS AND MACRON -0151 ; [.1FFD.0022.0002] # LATIN SMALL LETTER O WITH DOUBLE ACUTE -006F 030B ; [.1FFD.0022.0002] # LATIN SMALL LETTER O WITH DOUBLE ACUTE -0150 ; [.1FFD.0022.0008] # LATIN CAPITAL LETTER O WITH DOUBLE ACUTE -004F 030B ; [.1FFD.0022.0008] # LATIN CAPITAL LETTER O WITH DOUBLE ACUTE -0153 ; [.1FFD.0023.0002] # LATIN SMALL LIGATURE OE -0152 ; [.1FFD.0023.0008] # LATIN CAPITAL LIGATURE OE -00E5 ; [.1FFE.0020.0002] # LATIN SMALL LETTER A WITH RING ABOVE -0061 030A ; [.1FFE.0020.0002] # LATIN SMALL LETTER A WITH RING ABOVE -00C5 ; [.1FFE.0020.0008] # LATIN CAPITAL LETTER A WITH RING ABOVE -0041 030A ; [.1FFE.0020.0008] # LATIN CAPITAL LETTER A WITH RING ABOVE -212B ; [.1FFE.0020.0008] # ANGSTROM SIGN -01FB ; [.1FFE.0020.0002][.0000.0024.0002] # LATIN SMALL LETTER A WITH RING ABOVE AND ACUTE -01FA ; [.1FFE.0020.0008][.0000.0024.0002] # LATIN CAPITAL LETTER A WITH RING ABOVE AND ACUTE -0061 0061 ; [.1FFE.0021.0002] # -0041 0061 ; [.1FFE.0021.0007] # -0041 0041 ; [.1FFE.0021.0008] # + locale_version => 1.31, + entry => <<'ENTRY', # for DUCET v13.0.0 +0111 ; [.1FEB.0021.0002] # LATIN SMALL LETTER D WITH STROKE +0064 0335 ; [.1FEB.0021.0002] # LATIN SMALL LETTER D WITH STROKE +0110 ; [.1FEB.0021.0008] # LATIN CAPITAL LETTER D WITH STROKE +0044 0335 ; [.1FEB.0021.0008] # LATIN CAPITAL LETTER D WITH STROKE +00F0 ; [.1FEB.0022.0002] # LATIN SMALL LETTER ETH +1DD9 ; [.1FEB.0022.0002] # COMBINING LATIN SMALL LETTER ETH +00D0 ; [.1FEB.0022.0008] # LATIN CAPITAL LETTER ETH +00FE ; [.21F7.0020.0003][.2075.0020.0003] # LATIN SMALL LETTER THORN +00DE ; [.21F7.0020.0009][.2075.0020.0009] # LATIN CAPITAL LETTER THORN +00FC ; [.2270.0021.0002] # LATIN SMALL LETTER U WITH DIAERESIS +0075 0308 ; [.2270.0021.0002] # LATIN SMALL LETTER U WITH DIAERESIS +00DC ; [.2270.0021.0008] # LATIN CAPITAL LETTER U WITH DIAERESIS +0055 0308 ; [.2270.0021.0008] # LATIN CAPITAL LETTER U WITH DIAERESIS +01DC ; [.2270.0021.0002][.0000.0025.0002] # LATIN SMALL LETTER U WITH DIAERESIS AND GRAVE +01DB ; [.2270.0021.0008][.0000.0025.0002] # LATIN CAPITAL LETTER U WITH DIAERESIS AND GRAVE +01D8 ; [.2270.0021.0002][.0000.0024.0002] # LATIN SMALL LETTER U WITH DIAERESIS AND ACUTE +01D7 ; [.2270.0021.0008][.0000.0024.0002] # LATIN CAPITAL LETTER U WITH DIAERESIS AND ACUTE +01D6 ; [.2270.0021.0002][.0000.0032.0002] # LATIN SMALL LETTER U WITH DIAERESIS AND MACRON +01D5 ; [.2270.0021.0008][.0000.0032.0002] # LATIN CAPITAL LETTER U WITH DIAERESIS AND MACRON +01DA ; [.2270.0021.0002][.0000.0028.0002] # LATIN SMALL LETTER U WITH DIAERESIS AND CARON +01D9 ; [.2270.0021.0008][.0000.0028.0002] # LATIN CAPITAL LETTER U WITH DIAERESIS AND CARON +0171 ; [.2270.0022.0002] # LATIN SMALL LETTER U WITH DOUBLE ACUTE +0075 030B ; [.2270.0022.0002] # LATIN SMALL LETTER U WITH DOUBLE ACUTE +0170 ; [.2270.0022.0008] # LATIN CAPITAL LETTER U WITH DOUBLE ACUTE +0055 030B ; [.2270.0022.0008] # LATIN CAPITAL LETTER U WITH DOUBLE ACUTE +00E6 ; [.22FB.0020.0002] # LATIN SMALL LETTER AE +1DD4 ; [.22FB.0020.0002] # COMBINING LATIN SMALL LETTER AE +00C6 ; [.22FB.0020.0008] # LATIN CAPITAL LETTER AE +1D2D ; [.22FB.0020.0014] # MODIFIER LETTER CAPITAL AE +01FD ; [.22FB.0020.0002][.0000.0024.0002] # LATIN SMALL LETTER AE WITH ACUTE +01FC ; [.22FB.0020.0008][.0000.0024.0002] # LATIN CAPITAL LETTER AE WITH ACUTE +01E3 ; [.22FB.0020.0002][.0000.0032.0002] # LATIN SMALL LETTER AE WITH MACRON +01E2 ; [.22FB.0020.0008][.0000.0032.0002] # LATIN CAPITAL LETTER AE WITH MACRON +00E4 ; [.22FB.0021.0002] # LATIN SMALL LETTER A WITH DIAERESIS +0061 0308 ; [.22FB.0021.0002] # LATIN SMALL LETTER A WITH DIAERESIS +00C4 ; [.22FB.0021.0008] # LATIN CAPITAL LETTER A WITH DIAERESIS +0041 0308 ; [.22FB.0021.0008] # LATIN CAPITAL LETTER A WITH DIAERESIS +01DF ; [.22FB.0021.0002][.0000.0032.0002] # LATIN SMALL LETTER A WITH DIAERESIS AND MACRON +01DE ; [.22FB.0021.0008][.0000.0032.0002] # LATIN CAPITAL LETTER A WITH DIAERESIS AND MACRON +0119 ; [.22FB.0022.0002] # LATIN SMALL LETTER E WITH OGONEK +0065 0328 ; [.22FB.0022.0002] # LATIN SMALL LETTER E WITH OGONEK +0118 ; [.22FB.0022.0008] # LATIN CAPITAL LETTER E WITH OGONEK +0045 0328 ; [.22FB.0022.0008] # LATIN CAPITAL LETTER E WITH OGONEK +00F8 ; [.22FC.0020.0002] # LATIN SMALL LETTER O WITH STROKE +006F 0338 ; [.22FC.0020.0002] # LATIN SMALL LETTER O WITH STROKE +00D8 ; [.22FC.0020.0008] # LATIN CAPITAL LETTER O WITH STROKE +004F 0338 ; [.22FC.0020.0008] # LATIN CAPITAL LETTER O WITH STROKE +01FF ; [.22FC.0020.0002][.0000.0024.0002] # LATIN SMALL LETTER O WITH STROKE AND ACUTE +01FE ; [.22FC.0020.0008][.0000.0024.0002] # LATIN CAPITAL LETTER O WITH STROKE AND ACUTE +00F6 ; [.22FC.0021.0002] # LATIN SMALL LETTER O WITH DIAERESIS +006F 0308 ; [.22FC.0021.0002] # LATIN SMALL LETTER O WITH DIAERESIS +00D6 ; [.22FC.0021.0008] # LATIN CAPITAL LETTER O WITH DIAERESIS +004F 0308 ; [.22FC.0021.0008] # LATIN CAPITAL LETTER O WITH DIAERESIS +022B ; [.22FC.0021.0002][.0000.0032.0002] # LATIN SMALL LETTER O WITH DIAERESIS AND MACRON +022A ; [.22FC.0021.0008][.0000.0032.0002] # LATIN CAPITAL LETTER O WITH DIAERESIS AND MACRON +0151 ; [.22FC.0022.0002] # LATIN SMALL LETTER O WITH DOUBLE ACUTE +006F 030B ; [.22FC.0022.0002] # LATIN SMALL LETTER O WITH DOUBLE ACUTE +0150 ; [.22FC.0022.0008] # LATIN CAPITAL LETTER O WITH DOUBLE ACUTE +004F 030B ; [.22FC.0022.0008] # LATIN CAPITAL LETTER O WITH DOUBLE ACUTE +0153 ; [.22FC.0023.0002] # LATIN SMALL LIGATURE OE +0152 ; [.22FC.0023.0008] # LATIN CAPITAL LIGATURE OE +00E5 ; [.22FD.0020.0002] # LATIN SMALL LETTER A WITH RING ABOVE +0061 030A ; [.22FD.0020.0002] # LATIN SMALL LETTER A WITH RING ABOVE +00C5 ; [.22FD.0020.0008] # LATIN CAPITAL LETTER A WITH RING ABOVE +0041 030A ; [.22FD.0020.0008] # LATIN CAPITAL LETTER A WITH RING ABOVE +212B ; [.22FD.0020.0008] # ANGSTROM SIGN +01FB ; [.22FD.0020.0002][.0000.0024.0002] # LATIN SMALL LETTER A WITH RING ABOVE AND ACUTE +01FA ; [.22FD.0020.0008][.0000.0024.0002] # LATIN CAPITAL LETTER A WITH RING ABOVE AND ACUTE +0061 0061 ; [.22FD.0021.0002] # +0041 0061 ; [.22FD.0021.0007] # +0041 0041 ; [.22FD.0021.0008] # ENTRY }; diff --git a/gnu/usr.bin/perl/cpan/Unicode-Collate/Collate/Locale/nso.pl b/gnu/usr.bin/perl/cpan/Unicode-Collate/Collate/Locale/nso.pl index c4f4fadd930..1614979c4f8 100644 --- a/gnu/usr.bin/perl/cpan/Unicode-Collate/Collate/Locale/nso.pl +++ b/gnu/usr.bin/perl/cpan/Unicode-Collate/Collate/Locale/nso.pl @@ -1,37 +1,37 @@ +{ - locale_version => 1.27, - entry => <<'ENTRY', # for DUCET v10.0.0 -00EA ; [.1D11.0020.0002] # LATIN SMALL LETTER E WITH CIRCUMFLEX -0065 0302 ; [.1D11.0020.0002] # LATIN SMALL LETTER E WITH CIRCUMFLEX -00CA ; [.1D11.0020.0008] # LATIN CAPITAL LETTER E WITH CIRCUMFLEX -0045 0302 ; [.1D11.0020.0008] # LATIN CAPITAL LETTER E WITH CIRCUMFLEX -1EC1 ; [.1D11.0020.0002][.0000.0025.0002] # LATIN SMALL LETTER E WITH CIRCUMFLEX AND GRAVE -1EC0 ; [.1D11.0020.0008][.0000.0025.0002] # LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND GRAVE -1EBF ; [.1D11.0020.0002][.0000.0024.0002] # LATIN SMALL LETTER E WITH CIRCUMFLEX AND ACUTE -1EBE ; [.1D11.0020.0008][.0000.0024.0002] # LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND ACUTE -1EC5 ; [.1D11.0020.0002][.0000.002D.0002] # LATIN SMALL LETTER E WITH CIRCUMFLEX AND TILDE -1EC4 ; [.1D11.0020.0008][.0000.002D.0002] # LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND TILDE -1EC3 ; [.1D11.0020.0002][.0000.003B.0002] # LATIN SMALL LETTER E WITH CIRCUMFLEX AND HOOK ABOVE -1EC2 ; [.1D11.0020.0008][.0000.003B.0002] # LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND HOOK ABOVE -1EC7 ; [.1D11.0020.0002][.0000.0042.0002] # LATIN SMALL LETTER E WITH CIRCUMFLEX AND DOT BELOW -1EC6 ; [.1D11.0020.0008][.0000.0042.0002] # LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND DOT BELOW -00F4 ; [.1E44.0020.0002] # LATIN SMALL LETTER O WITH CIRCUMFLEX -006F 0302 ; [.1E44.0020.0002] # LATIN SMALL LETTER O WITH CIRCUMFLEX -00D4 ; [.1E44.0020.0008] # LATIN CAPITAL LETTER O WITH CIRCUMFLEX -004F 0302 ; [.1E44.0020.0008] # LATIN CAPITAL LETTER O WITH CIRCUMFLEX -1ED3 ; [.1E44.0020.0002][.0000.0025.0002] # LATIN SMALL LETTER O WITH CIRCUMFLEX AND GRAVE -1ED2 ; [.1E44.0020.0008][.0000.0025.0002] # LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND GRAVE -1ED1 ; [.1E44.0020.0002][.0000.0024.0002] # LATIN SMALL LETTER O WITH CIRCUMFLEX AND ACUTE -1ED0 ; [.1E44.0020.0008][.0000.0024.0002] # LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND ACUTE -1ED7 ; [.1E44.0020.0002][.0000.002D.0002] # LATIN SMALL LETTER O WITH CIRCUMFLEX AND TILDE -1ED6 ; [.1E44.0020.0008][.0000.002D.0002] # LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND TILDE -1ED5 ; [.1E44.0020.0002][.0000.003B.0002] # LATIN SMALL LETTER O WITH CIRCUMFLEX AND HOOK ABOVE -1ED4 ; [.1E44.0020.0008][.0000.003B.0002] # LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND HOOK ABOVE -1ED9 ; [.1E44.0020.0002][.0000.0042.0002] # LATIN SMALL LETTER O WITH CIRCUMFLEX AND DOT BELOW -1ED8 ; [.1E44.0020.0008][.0000.0042.0002] # LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND DOT BELOW -0161 ; [.1ED8.0020.0002] # LATIN SMALL LETTER S WITH CARON -0073 030C ; [.1ED8.0020.0002] # LATIN SMALL LETTER S WITH CARON -0160 ; [.1ED8.0020.0008] # LATIN CAPITAL LETTER S WITH CARON -0053 030C ; [.1ED8.0020.0008] # LATIN CAPITAL LETTER S WITH CARON + locale_version => 1.31, + entry => <<'ENTRY', # for DUCET v13.0.0 +00EA ; [.2008.0020.0002] # LATIN SMALL LETTER E WITH CIRCUMFLEX +0065 0302 ; [.2008.0020.0002] # LATIN SMALL LETTER E WITH CIRCUMFLEX +00CA ; [.2008.0020.0008] # LATIN CAPITAL LETTER E WITH CIRCUMFLEX +0045 0302 ; [.2008.0020.0008] # LATIN CAPITAL LETTER E WITH CIRCUMFLEX +1EC1 ; [.2008.0020.0002][.0000.0025.0002] # LATIN SMALL LETTER E WITH CIRCUMFLEX AND GRAVE +1EC0 ; [.2008.0020.0008][.0000.0025.0002] # LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND GRAVE +1EBF ; [.2008.0020.0002][.0000.0024.0002] # LATIN SMALL LETTER E WITH CIRCUMFLEX AND ACUTE +1EBE ; [.2008.0020.0008][.0000.0024.0002] # LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND ACUTE +1EC5 ; [.2008.0020.0002][.0000.002D.0002] # LATIN SMALL LETTER E WITH CIRCUMFLEX AND TILDE +1EC4 ; [.2008.0020.0008][.0000.002D.0002] # LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND TILDE +1EC3 ; [.2008.0020.0002][.0000.003B.0002] # LATIN SMALL LETTER E WITH CIRCUMFLEX AND HOOK ABOVE +1EC2 ; [.2008.0020.0008][.0000.003B.0002] # LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND HOOK ABOVE +1EC7 ; [.2008.0020.0002][.0000.0042.0002] # LATIN SMALL LETTER E WITH CIRCUMFLEX AND DOT BELOW +1EC6 ; [.2008.0020.0008][.0000.0042.0002] # LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND DOT BELOW +00F4 ; [.213D.0020.0002] # LATIN SMALL LETTER O WITH CIRCUMFLEX +006F 0302 ; [.213D.0020.0002] # LATIN SMALL LETTER O WITH CIRCUMFLEX +00D4 ; [.213D.0020.0008] # LATIN CAPITAL LETTER O WITH CIRCUMFLEX +004F 0302 ; [.213D.0020.0008] # LATIN CAPITAL LETTER O WITH CIRCUMFLEX +1ED3 ; [.213D.0020.0002][.0000.0025.0002] # LATIN SMALL LETTER O WITH CIRCUMFLEX AND GRAVE +1ED2 ; [.213D.0020.0008][.0000.0025.0002] # LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND GRAVE +1ED1 ; [.213D.0020.0002][.0000.0024.0002] # LATIN SMALL LETTER O WITH CIRCUMFLEX AND ACUTE +1ED0 ; [.213D.0020.0008][.0000.0024.0002] # LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND ACUTE +1ED7 ; [.213D.0020.0002][.0000.002D.0002] # LATIN SMALL LETTER O WITH CIRCUMFLEX AND TILDE +1ED6 ; [.213D.0020.0008][.0000.002D.0002] # LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND TILDE +1ED5 ; [.213D.0020.0002][.0000.003B.0002] # LATIN SMALL LETTER O WITH CIRCUMFLEX AND HOOK ABOVE +1ED4 ; [.213D.0020.0008][.0000.003B.0002] # LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND HOOK ABOVE +1ED9 ; [.213D.0020.0002][.0000.0042.0002] # LATIN SMALL LETTER O WITH CIRCUMFLEX AND DOT BELOW +1ED8 ; [.213D.0020.0008][.0000.0042.0002] # LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND DOT BELOW +0161 ; [.21D3.0020.0002] # LATIN SMALL LETTER S WITH CARON +0073 030C ; [.21D3.0020.0002] # LATIN SMALL LETTER S WITH CARON +0160 ; [.21D3.0020.0008] # LATIN CAPITAL LETTER S WITH CARON +0053 030C ; [.21D3.0020.0008] # LATIN CAPITAL LETTER S WITH CARON ENTRY }; diff --git a/gnu/usr.bin/perl/cpan/Unicode-Collate/Collate/Locale/om.pl b/gnu/usr.bin/perl/cpan/Unicode-Collate/Collate/Locale/om.pl index ff989a50b89..de08ffbcff3 100644 --- a/gnu/usr.bin/perl/cpan/Unicode-Collate/Collate/Locale/om.pl +++ b/gnu/usr.bin/perl/cpan/Unicode-Collate/Collate/Locale/om.pl @@ -1,22 +1,22 @@ +{ - locale_version => 1.27, - entry => <<'ENTRY', # for DUCET v10.0.0 -0063 0068 ; [.1F88.0020.0002] # -0043 0068 ; [.1F88.0020.0007] # -0043 0048 ; [.1F88.0020.0008] # -0064 0068 ; [.1F89.0020.0002] # -0044 0068 ; [.1F89.0020.0007] # -0044 0048 ; [.1F89.0020.0008] # -006B 0068 ; [.1F8A.0020.0002] # -004B 0068 ; [.1F8A.0020.0007] # -004B 0048 ; [.1F8A.0020.0008] # -006E 0079 ; [.1F8B.0020.0002] # -004E 0079 ; [.1F8B.0020.0007] # -004E 0059 ; [.1F8B.0020.0008] # -0070 0068 ; [.1F8C.0020.0002] # -0050 0068 ; [.1F8C.0020.0007] # -0050 0048 ; [.1F8C.0020.0008] # -0073 0068 ; [.1F8D.0020.0002] # -0053 0068 ; [.1F8D.0020.0007] # + locale_version => 1.31, + entry => <<'ENTRY', # for DUCET v13.0.0 +0063 0068 ; [.2287.0020.0002] # +0043 0068 ; [.2287.0020.0007] # +0043 0048 ; [.2287.0020.0008] # +0064 0068 ; [.2288.0020.0002] # +0044 0068 ; [.2288.0020.0007] # +0044 0048 ; [.2288.0020.0008] # +006B 0068 ; [.2289.0020.0002] # +004B 0068 ; [.2289.0020.0007] # +004B 0048 ; [.2289.0020.0008] # +006E 0079 ; [.228A.0020.0002] # +004E 0079 ; [.228A.0020.0007] # +004E 0059 ; [.228A.0020.0008] # +0070 0068 ; [.228B.0020.0002] # +0050 0068 ; [.228B.0020.0007] # +0050 0048 ; [.228B.0020.0008] # +0073 0068 ; [.228C.0020.0002] # +0053 0068 ; [.228C.0020.0007] # ENTRY }; diff --git a/gnu/usr.bin/perl/cpan/Unicode-Collate/Collate/Locale/or.pl b/gnu/usr.bin/perl/cpan/Unicode-Collate/Collate/Locale/or.pl index db329cbf90c..52e029c23bb 100644 --- a/gnu/usr.bin/perl/cpan/Unicode-Collate/Collate/Locale/or.pl +++ b/gnu/usr.bin/perl/cpan/Unicode-Collate/Collate/Locale/or.pl @@ -1,12 +1,12 @@ +{ - locale_version => 1.27, - entry => <<'ENTRY', # for DUCET v10.0.0 -0B01 ; [.27FD.0020.0002][.FFF1.0000.0000] # ORIYA SIGN CANDRABINDU -0B02 ; [.27FD.0020.0002][.FFF2.0000.0000] # ORIYA SIGN ANUSVARA -0B03 ; [.27FD.0020.0002][.FFF3.0000.0000] # ORIYA SIGN VISARGA -0B14 ; [.27FD.0020.0002][.FFF0.0000.0000] # ORIYA LETTER AU -0B15 0B4D 0B37 ; [.2821.0020.0002][.FFF1.0000.0000] # -0B39 ; [.2821.0020.0002][.FFF0.0000.0000] # ORIYA LETTER HA -0B5F ; [.2817.0021.0002] # ORIYA LETTER YYA + locale_version => 1.31, + entry => <<'ENTRY', # for DUCET v13.0.0 +0B01 ; [.2B0A.0020.0002][.FFF1.0000.0000] # ORIYA SIGN CANDRABINDU +0B02 ; [.2B0A.0020.0002][.FFF2.0000.0000] # ORIYA SIGN ANUSVARA +0B03 ; [.2B0A.0020.0002][.FFF3.0000.0000] # ORIYA SIGN VISARGA +0B14 ; [.2B0A.0020.0002][.FFF0.0000.0000] # ORIYA LETTER AU +0B15 0B4D 0B37 ; [.2B2E.0020.0002][.FFF1.0000.0000] # +0B39 ; [.2B2E.0020.0002][.FFF0.0000.0000] # ORIYA LETTER HA +0B5F ; [.2B24.0021.0002] # ORIYA LETTER YYA ENTRY }; diff --git a/gnu/usr.bin/perl/cpan/Unicode-Collate/Collate/Locale/pa.pl b/gnu/usr.bin/perl/cpan/Unicode-Collate/Collate/Locale/pa.pl index 04c732a7782..2c8ce36feca 100644 --- a/gnu/usr.bin/perl/cpan/Unicode-Collate/Collate/Locale/pa.pl +++ b/gnu/usr.bin/perl/cpan/Unicode-Collate/Collate/Locale/pa.pl @@ -1,27 +1,27 @@ +{ - locale_version => 1.27, - entry => <<'ENTRY', # for DUCET v10.0.0 -0A71 ; [.0000.00C3.0002] # GURMUKHI ADDAK -0A03 ; [.0000.00C2.0002] # GURMUKHI SIGN VISARGA -0A70 ; [.0000.00C4.0002] # GURMUKHI TIPPI -0A02 ; [.0000.00C5.0002] # GURMUKHI SIGN BINDI -0A01 ; [.0000.00C6.0002] # GURMUKHI SIGN ADAK BINDI -0A3C ; [.0000.00C7.0002] # GURMUKHI SIGN NUKTA -0A33 ; [.279E.0020.0002][.0000.00C7.0002] # GURMUKHI LETTER LLA -0A36 ; [.277F.0020.0002][.0000.00C7.0002] # GURMUKHI LETTER SHA -0A59 ; [.2783.0020.0002][.0000.00C7.0002] # GURMUKHI LETTER KHHA -0A5A ; [.2784.0020.0002][.0000.00C7.0002] # GURMUKHI LETTER GHHA -0A5B ; [.2789.0020.0002][.0000.00C7.0002] # GURMUKHI LETTER ZA -0A5E ; [.2797.0020.0002][.0000.00C7.0002] # GURMUKHI LETTER FA -0A4D ; [.27A1.0020.0002] # GURMUKHI SIGN VIRAMA -0A3E ; [.27A2.0020.0002] # GURMUKHI VOWEL SIGN AA -0A3F ; [.27A3.0020.0002] # GURMUKHI VOWEL SIGN I -0A40 ; [.27A4.0020.0002] # GURMUKHI VOWEL SIGN II -0A41 ; [.27A5.0020.0002] # GURMUKHI VOWEL SIGN U -0A42 ; [.27A6.0020.0002] # GURMUKHI VOWEL SIGN UU -0A47 ; [.27A7.0020.0002] # GURMUKHI VOWEL SIGN EE -0A48 ; [.27A8.0020.0002] # GURMUKHI VOWEL SIGN AI -0A4B ; [.27A9.0020.0002] # GURMUKHI VOWEL SIGN OO -0A4C ; [.27AA.0020.0002] # GURMUKHI VOWEL SIGN AU + locale_version => 1.31, + entry => <<'ENTRY', # for DUCET v13.0.0 +0A71 ; [.0000.00C4.0002] # GURMUKHI ADDAK +0A03 ; [.0000.00C3.0002] # GURMUKHI SIGN VISARGA +0A70 ; [.0000.00C5.0002] # GURMUKHI TIPPI +0A02 ; [.0000.00C6.0002] # GURMUKHI SIGN BINDI +0A01 ; [.0000.00C7.0002] # GURMUKHI SIGN ADAK BINDI +0A3C ; [.0000.00C8.0002] # GURMUKHI SIGN NUKTA +0A33 ; [.2AAB.0020.0002][.0000.00C8.0002] # GURMUKHI LETTER LLA +0A36 ; [.2A8C.0020.0002][.0000.00C8.0002] # GURMUKHI LETTER SHA +0A59 ; [.2A90.0020.0002][.0000.00C8.0002] # GURMUKHI LETTER KHHA +0A5A ; [.2A91.0020.0002][.0000.00C8.0002] # GURMUKHI LETTER GHHA +0A5B ; [.2A96.0020.0002][.0000.00C8.0002] # GURMUKHI LETTER ZA +0A5E ; [.2AA4.0020.0002][.0000.00C8.0002] # GURMUKHI LETTER FA +0A4D ; [.2AAE.0020.0002] # GURMUKHI SIGN VIRAMA +0A3E ; [.2AAF.0020.0002] # GURMUKHI VOWEL SIGN AA +0A3F ; [.2AB0.0020.0002] # GURMUKHI VOWEL SIGN I +0A40 ; [.2AB1.0020.0002] # GURMUKHI VOWEL SIGN II +0A41 ; [.2AB2.0020.0002] # GURMUKHI VOWEL SIGN U +0A42 ; [.2AB3.0020.0002] # GURMUKHI VOWEL SIGN UU +0A47 ; [.2AB4.0020.0002] # GURMUKHI VOWEL SIGN EE +0A48 ; [.2AB5.0020.0002] # GURMUKHI VOWEL SIGN AI +0A4B ; [.2AB6.0020.0002] # GURMUKHI VOWEL SIGN OO +0A4C ; [.2AB7.0020.0002] # GURMUKHI VOWEL SIGN AU ENTRY }; diff --git a/gnu/usr.bin/perl/cpan/Unicode-Collate/Collate/Locale/pl.pl b/gnu/usr.bin/perl/cpan/Unicode-Collate/Collate/Locale/pl.pl index 7ef5133ab11..998663e3502 100644 --- a/gnu/usr.bin/perl/cpan/Unicode-Collate/Collate/Locale/pl.pl +++ b/gnu/usr.bin/perl/cpan/Unicode-Collate/Collate/Locale/pl.pl @@ -1,51 +1,51 @@ +{ - locale_version => 1.27, - entry => <<'ENTRY', # for DUCET v10.0.0 -0105 ; [.1CAE.0020.0002] # LATIN SMALL LETTER A WITH OGONEK -0061 0328 ; [.1CAE.0020.0002] # LATIN SMALL LETTER A WITH OGONEK -0104 ; [.1CAE.0020.0008] # LATIN CAPITAL LETTER A WITH OGONEK -0041 0328 ; [.1CAE.0020.0008] # LATIN CAPITAL LETTER A WITH OGONEK -0107 ; [.1CE1.0020.0002] # LATIN SMALL LETTER C WITH ACUTE -0063 0301 ; [.1CE1.0020.0002] # LATIN SMALL LETTER C WITH ACUTE -0063 0341 ; [.1CE1.0020.0002] # LATIN SMALL LETTER C WITH ACUTE -0106 ; [.1CE1.0020.0008] # LATIN CAPITAL LETTER C WITH ACUTE -0043 0301 ; [.1CE1.0020.0008] # LATIN CAPITAL LETTER C WITH ACUTE -0043 0341 ; [.1CE1.0020.0008] # LATIN CAPITAL LETTER C WITH ACUTE -0119 ; [.1D11.0020.0002] # LATIN SMALL LETTER E WITH OGONEK -0065 0328 ; [.1D11.0020.0002] # LATIN SMALL LETTER E WITH OGONEK -0118 ; [.1D11.0020.0008] # LATIN CAPITAL LETTER E WITH OGONEK -0045 0328 ; [.1D11.0020.0008] # LATIN CAPITAL LETTER E WITH OGONEK -0142 ; [.1DDE.0020.0002] # LATIN SMALL LETTER L WITH STROKE -006C 0335 ; [.1DDE.0020.0002] # LATIN SMALL LETTER L WITH STROKE -0141 ; [.1DDE.0020.0008] # LATIN CAPITAL LETTER L WITH STROKE -004C 0335 ; [.1DDE.0020.0008] # LATIN CAPITAL LETTER L WITH STROKE -0144 ; [.1E20.0020.0002] # LATIN SMALL LETTER N WITH ACUTE -006E 0301 ; [.1E20.0020.0002] # LATIN SMALL LETTER N WITH ACUTE -006E 0341 ; [.1E20.0020.0002] # LATIN SMALL LETTER N WITH ACUTE -0143 ; [.1E20.0020.0008] # LATIN CAPITAL LETTER N WITH ACUTE -004E 0301 ; [.1E20.0020.0008] # LATIN CAPITAL LETTER N WITH ACUTE -004E 0341 ; [.1E20.0020.0008] # LATIN CAPITAL LETTER N WITH ACUTE -00F3 ; [.1E44.0020.0002] # LATIN SMALL LETTER O WITH ACUTE -006F 0301 ; [.1E44.0020.0002] # LATIN SMALL LETTER O WITH ACUTE -006F 0341 ; [.1E44.0020.0002] # LATIN SMALL LETTER O WITH ACUTE -00D3 ; [.1E44.0020.0008] # LATIN CAPITAL LETTER O WITH ACUTE -004F 0301 ; [.1E44.0020.0008] # LATIN CAPITAL LETTER O WITH ACUTE -004F 0341 ; [.1E44.0020.0008] # LATIN CAPITAL LETTER O WITH ACUTE -015B ; [.1ED8.0020.0002] # LATIN SMALL LETTER S WITH ACUTE -0073 0301 ; [.1ED8.0020.0002] # LATIN SMALL LETTER S WITH ACUTE -0073 0341 ; [.1ED8.0020.0002] # LATIN SMALL LETTER S WITH ACUTE -015A ; [.1ED8.0020.0008] # LATIN CAPITAL LETTER S WITH ACUTE -0053 0301 ; [.1ED8.0020.0008] # LATIN CAPITAL LETTER S WITH ACUTE -0053 0341 ; [.1ED8.0020.0008] # LATIN CAPITAL LETTER S WITH ACUTE -017A ; [.1F88.0020.0002] # LATIN SMALL LETTER Z WITH ACUTE -007A 0301 ; [.1F88.0020.0002] # LATIN SMALL LETTER Z WITH ACUTE -007A 0341 ; [.1F88.0020.0002] # LATIN SMALL LETTER Z WITH ACUTE -0179 ; [.1F88.0020.0008] # LATIN CAPITAL LETTER Z WITH ACUTE -005A 0301 ; [.1F88.0020.0008] # LATIN CAPITAL LETTER Z WITH ACUTE -005A 0341 ; [.1F88.0020.0008] # LATIN CAPITAL LETTER Z WITH ACUTE -017C ; [.1F89.0020.0002] # LATIN SMALL LETTER Z WITH DOT ABOVE -007A 0307 ; [.1F89.0020.0002] # LATIN SMALL LETTER Z WITH DOT ABOVE -017B ; [.1F89.0020.0008] # LATIN CAPITAL LETTER Z WITH DOT ABOVE -005A 0307 ; [.1F89.0020.0008] # LATIN CAPITAL LETTER Z WITH DOT ABOVE + locale_version => 1.31, + entry => <<'ENTRY', # for DUCET v13.0.0 +0105 ; [.1FA3.0020.0002] # LATIN SMALL LETTER A WITH OGONEK +0061 0328 ; [.1FA3.0020.0002] # LATIN SMALL LETTER A WITH OGONEK +0104 ; [.1FA3.0020.0008] # LATIN CAPITAL LETTER A WITH OGONEK +0041 0328 ; [.1FA3.0020.0008] # LATIN CAPITAL LETTER A WITH OGONEK +0107 ; [.1FD7.0020.0002] # LATIN SMALL LETTER C WITH ACUTE +0063 0301 ; [.1FD7.0020.0002] # LATIN SMALL LETTER C WITH ACUTE +0063 0341 ; [.1FD7.0020.0002] # LATIN SMALL LETTER C WITH ACUTE +0106 ; [.1FD7.0020.0008] # LATIN CAPITAL LETTER C WITH ACUTE +0043 0301 ; [.1FD7.0020.0008] # LATIN CAPITAL LETTER C WITH ACUTE +0043 0341 ; [.1FD7.0020.0008] # LATIN CAPITAL LETTER C WITH ACUTE +0119 ; [.2008.0020.0002] # LATIN SMALL LETTER E WITH OGONEK +0065 0328 ; [.2008.0020.0002] # LATIN SMALL LETTER E WITH OGONEK +0118 ; [.2008.0020.0008] # LATIN CAPITAL LETTER E WITH OGONEK +0045 0328 ; [.2008.0020.0008] # LATIN CAPITAL LETTER E WITH OGONEK +0142 ; [.20D7.0020.0002] # LATIN SMALL LETTER L WITH STROKE +006C 0335 ; [.20D7.0020.0002] # LATIN SMALL LETTER L WITH STROKE +0141 ; [.20D7.0020.0008] # LATIN CAPITAL LETTER L WITH STROKE +004C 0335 ; [.20D7.0020.0008] # LATIN CAPITAL LETTER L WITH STROKE +0144 ; [.2119.0020.0002] # LATIN SMALL LETTER N WITH ACUTE +006E 0301 ; [.2119.0020.0002] # LATIN SMALL LETTER N WITH ACUTE +006E 0341 ; [.2119.0020.0002] # LATIN SMALL LETTER N WITH ACUTE +0143 ; [.2119.0020.0008] # LATIN CAPITAL LETTER N WITH ACUTE +004E 0301 ; [.2119.0020.0008] # LATIN CAPITAL LETTER N WITH ACUTE +004E 0341 ; [.2119.0020.0008] # LATIN CAPITAL LETTER N WITH ACUTE +00F3 ; [.213D.0020.0002] # LATIN SMALL LETTER O WITH ACUTE +006F 0301 ; [.213D.0020.0002] # LATIN SMALL LETTER O WITH ACUTE +006F 0341 ; [.213D.0020.0002] # LATIN SMALL LETTER O WITH ACUTE +00D3 ; [.213D.0020.0008] # LATIN CAPITAL LETTER O WITH ACUTE +004F 0301 ; [.213D.0020.0008] # LATIN CAPITAL LETTER O WITH ACUTE +004F 0341 ; [.213D.0020.0008] # LATIN CAPITAL LETTER O WITH ACUTE +015B ; [.21D3.0020.0002] # LATIN SMALL LETTER S WITH ACUTE +0073 0301 ; [.21D3.0020.0002] # LATIN SMALL LETTER S WITH ACUTE +0073 0341 ; [.21D3.0020.0002] # LATIN SMALL LETTER S WITH ACUTE +015A ; [.21D3.0020.0008] # LATIN CAPITAL LETTER S WITH ACUTE +0053 0301 ; [.21D3.0020.0008] # LATIN CAPITAL LETTER S WITH ACUTE +0053 0341 ; [.21D3.0020.0008] # LATIN CAPITAL LETTER S WITH ACUTE +017A ; [.2287.0020.0002] # LATIN SMALL LETTER Z WITH ACUTE +007A 0301 ; [.2287.0020.0002] # LATIN SMALL LETTER Z WITH ACUTE +007A 0341 ; [.2287.0020.0002] # LATIN SMALL LETTER Z WITH ACUTE +0179 ; [.2287.0020.0008] # LATIN CAPITAL LETTER Z WITH ACUTE +005A 0301 ; [.2287.0020.0008] # LATIN CAPITAL LETTER Z WITH ACUTE +005A 0341 ; [.2287.0020.0008] # LATIN CAPITAL LETTER Z WITH ACUTE +017C ; [.2288.0020.0002] # LATIN SMALL LETTER Z WITH DOT ABOVE +007A 0307 ; [.2288.0020.0002] # LATIN SMALL LETTER Z WITH DOT ABOVE +017B ; [.2288.0020.0008] # LATIN CAPITAL LETTER Z WITH DOT ABOVE +005A 0307 ; [.2288.0020.0008] # LATIN CAPITAL LETTER Z WITH DOT ABOVE ENTRY }; diff --git a/gnu/usr.bin/perl/cpan/Unicode-Collate/Collate/Locale/ro.pl b/gnu/usr.bin/perl/cpan/Unicode-Collate/Collate/Locale/ro.pl index 0ebc0caee46..09eeb5c92c1 100644 --- a/gnu/usr.bin/perl/cpan/Unicode-Collate/Collate/Locale/ro.pl +++ b/gnu/usr.bin/perl/cpan/Unicode-Collate/Collate/Locale/ro.pl @@ -1,53 +1,53 @@ +{ - locale_version => 1.27, - entry => <<'ENTRY', # for DUCET v10.0.0 -0103 ; [.1CAE.0020.0002] # LATIN SMALL LETTER A WITH BREVE -0061 0306 ; [.1CAE.0020.0002] # LATIN SMALL LETTER A WITH BREVE -0102 ; [.1CAE.0020.0008] # LATIN CAPITAL LETTER A WITH BREVE -0041 0306 ; [.1CAE.0020.0008] # LATIN CAPITAL LETTER A WITH BREVE -1EB1 ; [.1CAE.0020.0002][.0000.0025.0002] # LATIN SMALL LETTER A WITH BREVE AND GRAVE -1EB0 ; [.1CAE.0020.0008][.0000.0025.0002] # LATIN CAPITAL LETTER A WITH BREVE AND GRAVE -1EAF ; [.1CAE.0020.0002][.0000.0024.0002] # LATIN SMALL LETTER A WITH BREVE AND ACUTE -1EAE ; [.1CAE.0020.0008][.0000.0024.0002] # LATIN CAPITAL LETTER A WITH BREVE AND ACUTE -1EB5 ; [.1CAE.0020.0002][.0000.002D.0002] # LATIN SMALL LETTER A WITH BREVE AND TILDE -1EB4 ; [.1CAE.0020.0008][.0000.002D.0002] # LATIN CAPITAL LETTER A WITH BREVE AND TILDE -1EB3 ; [.1CAE.0020.0002][.0000.003B.0002] # LATIN SMALL LETTER A WITH BREVE AND HOOK ABOVE -1EB2 ; [.1CAE.0020.0008][.0000.003B.0002] # LATIN CAPITAL LETTER A WITH BREVE AND HOOK ABOVE -1EB7 ; [.1CAE.0020.0002][.0000.0042.0002] # LATIN SMALL LETTER A WITH BREVE AND DOT BELOW -1EB6 ; [.1CAE.0020.0008][.0000.0042.0002] # LATIN CAPITAL LETTER A WITH BREVE AND DOT BELOW -00E2 ; [.1CAF.0020.0002] # LATIN SMALL LETTER A WITH CIRCUMFLEX -0061 0302 ; [.1CAF.0020.0002] # LATIN SMALL LETTER A WITH CIRCUMFLEX -00C2 ; [.1CAF.0020.0008] # LATIN CAPITAL LETTER A WITH CIRCUMFLEX -0041 0302 ; [.1CAF.0020.0008] # LATIN CAPITAL LETTER A WITH CIRCUMFLEX -1EA7 ; [.1CAF.0020.0002][.0000.0025.0002] # LATIN SMALL LETTER A WITH CIRCUMFLEX AND GRAVE -1EA6 ; [.1CAF.0020.0008][.0000.0025.0002] # LATIN CAPITAL LETTER A WITH CIRCUMFLEX AND GRAVE -1EA5 ; [.1CAF.0020.0002][.0000.0024.0002] # LATIN SMALL LETTER A WITH CIRCUMFLEX AND ACUTE -1EA4 ; [.1CAF.0020.0008][.0000.0024.0002] # LATIN CAPITAL LETTER A WITH CIRCUMFLEX AND ACUTE -1EAB ; [.1CAF.0020.0002][.0000.002D.0002] # LATIN SMALL LETTER A WITH CIRCUMFLEX AND TILDE -1EAA ; [.1CAF.0020.0008][.0000.002D.0002] # LATIN CAPITAL LETTER A WITH CIRCUMFLEX AND TILDE -1EA9 ; [.1CAF.0020.0002][.0000.003B.0002] # LATIN SMALL LETTER A WITH CIRCUMFLEX AND HOOK ABOVE -1EA8 ; [.1CAF.0020.0008][.0000.003B.0002] # LATIN CAPITAL LETTER A WITH CIRCUMFLEX AND HOOK ABOVE -1EAD ; [.1CAF.0020.0002][.0000.0042.0002] # LATIN SMALL LETTER A WITH CIRCUMFLEX AND DOT BELOW -1EAC ; [.1CAF.0020.0008][.0000.0042.0002] # LATIN CAPITAL LETTER A WITH CIRCUMFLEX AND DOT BELOW -00EE ; [.1D99.0020.0002] # LATIN SMALL LETTER I WITH CIRCUMFLEX -0069 0302 ; [.1D99.0020.0002] # LATIN SMALL LETTER I WITH CIRCUMFLEX -00CE ; [.1D99.0020.0008] # LATIN CAPITAL LETTER I WITH CIRCUMFLEX -0049 0302 ; [.1D99.0020.0008] # LATIN CAPITAL LETTER I WITH CIRCUMFLEX -015F ; [.1ED8.0020.0002] # LATIN SMALL LETTER S WITH CEDILLA -0073 0327 ; [.1ED8.0020.0002] # LATIN SMALL LETTER S WITH CEDILLA -0219 ; [.1ED8.0020.0002] # LATIN SMALL LETTER S WITH COMMA BELOW -0073 0326 ; [.1ED8.0020.0002] # LATIN SMALL LETTER S WITH COMMA BELOW -015E ; [.1ED8.0020.0008] # LATIN CAPITAL LETTER S WITH CEDILLA -0053 0327 ; [.1ED8.0020.0008] # LATIN CAPITAL LETTER S WITH CEDILLA -0218 ; [.1ED8.0020.0008] # LATIN CAPITAL LETTER S WITH COMMA BELOW -0053 0326 ; [.1ED8.0020.0008] # LATIN CAPITAL LETTER S WITH COMMA BELOW -0163 ; [.1EFC.0020.0002] # LATIN SMALL LETTER T WITH CEDILLA -0074 0327 ; [.1EFC.0020.0002] # LATIN SMALL LETTER T WITH CEDILLA -021B ; [.1EFC.0020.0002] # LATIN SMALL LETTER T WITH COMMA BELOW -0074 0326 ; [.1EFC.0020.0002] # LATIN SMALL LETTER T WITH COMMA BELOW -0162 ; [.1EFC.0020.0008] # LATIN CAPITAL LETTER T WITH CEDILLA -0054 0327 ; [.1EFC.0020.0008] # LATIN CAPITAL LETTER T WITH CEDILLA -021A ; [.1EFC.0020.0008] # LATIN CAPITAL LETTER T WITH COMMA BELOW -0054 0326 ; [.1EFC.0020.0008] # LATIN CAPITAL LETTER T WITH COMMA BELOW + locale_version => 1.31, + entry => <<'ENTRY', # for DUCET v13.0.0 +0103 ; [.1FA3.0020.0002] # LATIN SMALL LETTER A WITH BREVE +0061 0306 ; [.1FA3.0020.0002] # LATIN SMALL LETTER A WITH BREVE +0102 ; [.1FA3.0020.0008] # LATIN CAPITAL LETTER A WITH BREVE +0041 0306 ; [.1FA3.0020.0008] # LATIN CAPITAL LETTER A WITH BREVE +1EB1 ; [.1FA3.0020.0002][.0000.0025.0002] # LATIN SMALL LETTER A WITH BREVE AND GRAVE +1EB0 ; [.1FA3.0020.0008][.0000.0025.0002] # LATIN CAPITAL LETTER A WITH BREVE AND GRAVE +1EAF ; [.1FA3.0020.0002][.0000.0024.0002] # LATIN SMALL LETTER A WITH BREVE AND ACUTE +1EAE ; [.1FA3.0020.0008][.0000.0024.0002] # LATIN CAPITAL LETTER A WITH BREVE AND ACUTE +1EB5 ; [.1FA3.0020.0002][.0000.002D.0002] # LATIN SMALL LETTER A WITH BREVE AND TILDE +1EB4 ; [.1FA3.0020.0008][.0000.002D.0002] # LATIN CAPITAL LETTER A WITH BREVE AND TILDE +1EB3 ; [.1FA3.0020.0002][.0000.003B.0002] # LATIN SMALL LETTER A WITH BREVE AND HOOK ABOVE +1EB2 ; [.1FA3.0020.0008][.0000.003B.0002] # LATIN CAPITAL LETTER A WITH BREVE AND HOOK ABOVE +1EB7 ; [.1FA3.0020.0002][.0000.0042.0002] # LATIN SMALL LETTER A WITH BREVE AND DOT BELOW +1EB6 ; [.1FA3.0020.0008][.0000.0042.0002] # LATIN CAPITAL LETTER A WITH BREVE AND DOT BELOW +00E2 ; [.1FA4.0020.0002] # LATIN SMALL LETTER A WITH CIRCUMFLEX +0061 0302 ; [.1FA4.0020.0002] # LATIN SMALL LETTER A WITH CIRCUMFLEX +00C2 ; [.1FA4.0020.0008] # LATIN CAPITAL LETTER A WITH CIRCUMFLEX +0041 0302 ; [.1FA4.0020.0008] # LATIN CAPITAL LETTER A WITH CIRCUMFLEX +1EA7 ; [.1FA4.0020.0002][.0000.0025.0002] # LATIN SMALL LETTER A WITH CIRCUMFLEX AND GRAVE +1EA6 ; [.1FA4.0020.0008][.0000.0025.0002] # LATIN CAPITAL LETTER A WITH CIRCUMFLEX AND GRAVE +1EA5 ; [.1FA4.0020.0002][.0000.0024.0002] # LATIN SMALL LETTER A WITH CIRCUMFLEX AND ACUTE +1EA4 ; [.1FA4.0020.0008][.0000.0024.0002] # LATIN CAPITAL LETTER A WITH CIRCUMFLEX AND ACUTE +1EAB ; [.1FA4.0020.0002][.0000.002D.0002] # LATIN SMALL LETTER A WITH CIRCUMFLEX AND TILDE +1EAA ; [.1FA4.0020.0008][.0000.002D.0002] # LATIN CAPITAL LETTER A WITH CIRCUMFLEX AND TILDE +1EA9 ; [.1FA4.0020.0002][.0000.003B.0002] # LATIN SMALL LETTER A WITH CIRCUMFLEX AND HOOK ABOVE +1EA8 ; [.1FA4.0020.0008][.0000.003B.0002] # LATIN CAPITAL LETTER A WITH CIRCUMFLEX AND HOOK ABOVE +1EAD ; [.1FA4.0020.0002][.0000.0042.0002] # LATIN SMALL LETTER A WITH CIRCUMFLEX AND DOT BELOW +1EAC ; [.1FA4.0020.0008][.0000.0042.0002] # LATIN CAPITAL LETTER A WITH CIRCUMFLEX AND DOT BELOW +00EE ; [.2091.0020.0002] # LATIN SMALL LETTER I WITH CIRCUMFLEX +0069 0302 ; [.2091.0020.0002] # LATIN SMALL LETTER I WITH CIRCUMFLEX +00CE ; [.2091.0020.0008] # LATIN CAPITAL LETTER I WITH CIRCUMFLEX +0049 0302 ; [.2091.0020.0008] # LATIN CAPITAL LETTER I WITH CIRCUMFLEX +015F ; [.21D3.0020.0002] # LATIN SMALL LETTER S WITH CEDILLA +0073 0327 ; [.21D3.0020.0002] # LATIN SMALL LETTER S WITH CEDILLA +0219 ; [.21D3.0020.0002] # LATIN SMALL LETTER S WITH COMMA BELOW +0073 0326 ; [.21D3.0020.0002] # LATIN SMALL LETTER S WITH COMMA BELOW +015E ; [.21D3.0020.0008] # LATIN CAPITAL LETTER S WITH CEDILLA +0053 0327 ; [.21D3.0020.0008] # LATIN CAPITAL LETTER S WITH CEDILLA +0218 ; [.21D3.0020.0008] # LATIN CAPITAL LETTER S WITH COMMA BELOW +0053 0326 ; [.21D3.0020.0008] # LATIN CAPITAL LETTER S WITH COMMA BELOW +0163 ; [.21F8.0020.0002] # LATIN SMALL LETTER T WITH CEDILLA +0074 0327 ; [.21F8.0020.0002] # LATIN SMALL LETTER T WITH CEDILLA +021B ; [.21F8.0020.0002] # LATIN SMALL LETTER T WITH COMMA BELOW +0074 0326 ; [.21F8.0020.0002] # LATIN SMALL LETTER T WITH COMMA BELOW +0162 ; [.21F8.0020.0008] # LATIN CAPITAL LETTER T WITH CEDILLA +0054 0327 ; [.21F8.0020.0008] # LATIN CAPITAL LETTER T WITH CEDILLA +021A ; [.21F8.0020.0008] # LATIN CAPITAL LETTER T WITH COMMA BELOW +0054 0326 ; [.21F8.0020.0008] # LATIN CAPITAL LETTER T WITH COMMA BELOW ENTRY }; diff --git a/gnu/usr.bin/perl/cpan/Unicode-Collate/Collate/Locale/sa.pl b/gnu/usr.bin/perl/cpan/Unicode-Collate/Collate/Locale/sa.pl index ac89aa1c017..fd786ee6d33 100644 --- a/gnu/usr.bin/perl/cpan/Unicode-Collate/Collate/Locale/sa.pl +++ b/gnu/usr.bin/perl/cpan/Unicode-Collate/Collate/Locale/sa.pl @@ -1,14 +1,14 @@ +{ - locale_version => 1.27, - entry => <<'ENTRY', # for DUCET v10.0.0 -0902 ; [.26CC.0020.0002][.FFF1.0000.0000] # DEVANAGARI SIGN ANUSVARA -0901 ; [.26CC.0021.0002][.FFF1.0000.0000] # DEVANAGARI SIGN CANDRABINDU -0903 ; [.26CC.0020.0002][.FFF2.0000.0000] # DEVANAGARI SIGN VISARGA -0950 ; [.26CC.0020.0002][.FFF0.0000.0000] # DEVANAGARI OM -0933 ; [.270F.0020.0002][.FFF1.0000.0000] # DEVANAGARI LETTER LLA -0934 ; [.270F.0020.0002][.FFF1.0000.0000][.0000.00C2.0002] # DEVANAGARI LETTER LLLA -0915 094D 0937 ; [.270F.0020.0002][.FFF2.0000.0000] # -091C 094D 091E ; [.270F.0020.0002][.FFF3.0000.0000] # -0939 ; [.270F.0020.0002][.FFF0.0000.0000] # DEVANAGARI LETTER HA + locale_version => 1.31, + entry => <<'ENTRY', # for DUCET v13.0.0 +0902 ; [.29D7.0020.0002][.FFF1.0000.0000] # DEVANAGARI SIGN ANUSVARA +0901 ; [.29D7.0021.0002][.FFF1.0000.0000] # DEVANAGARI SIGN CANDRABINDU +0903 ; [.29D7.0020.0002][.FFF2.0000.0000] # DEVANAGARI SIGN VISARGA +0950 ; [.29D7.0020.0002][.FFF0.0000.0000] # DEVANAGARI OM +0933 ; [.2A1B.0020.0002][.FFF1.0000.0000] # DEVANAGARI LETTER LLA +0934 ; [.2A1B.0020.0002][.FFF1.0000.0000][.0000.00C2.0002] # DEVANAGARI LETTER LLLA +0915 094D 0937 ; [.2A1B.0020.0002][.FFF2.0000.0000] # +091C 094D 091E ; [.2A1B.0020.0002][.FFF3.0000.0000] # +0939 ; [.2A1B.0020.0002][.FFF0.0000.0000] # DEVANAGARI LETTER HA ENTRY }; diff --git a/gnu/usr.bin/perl/cpan/Unicode-Collate/Collate/Locale/se.pl b/gnu/usr.bin/perl/cpan/Unicode-Collate/Collate/Locale/se.pl index 70f01dc0384..7fb613a611f 100644 --- a/gnu/usr.bin/perl/cpan/Unicode-Collate/Collate/Locale/se.pl +++ b/gnu/usr.bin/perl/cpan/Unicode-Collate/Collate/Locale/se.pl @@ -1,150 +1,150 @@ +{ - locale_version => 1.27, + locale_version => 1.31, # eng, g-stroke, t-stroke don't require tailoring - entry => <<'ENTRY', # for DUCET v10.0.0 -00E1 ; [.1CC5.0020.0002] # LATIN SMALL LETTER A WITH ACUTE -0061 0301 ; [.1CC5.0020.0002] # LATIN SMALL LETTER A WITH ACUTE -0061 0341 ; [.1CC5.0020.0002] # LATIN SMALL LETTER A WITH ACUTE -00C1 ; [.1CC5.0020.0008] # LATIN CAPITAL LETTER A WITH ACUTE -0041 0301 ; [.1CC5.0020.0008] # LATIN CAPITAL LETTER A WITH ACUTE -0041 0341 ; [.1CC5.0020.0008] # LATIN CAPITAL LETTER A WITH ACUTE -010D ; [.1CF2.0020.0002] # LATIN SMALL LETTER C WITH CARON -0063 030C ; [.1CF2.0020.0002] # LATIN SMALL LETTER C WITH CARON -010C ; [.1CF2.0020.0008] # LATIN CAPITAL LETTER C WITH CARON -0043 030C ; [.1CF2.0020.0008] # LATIN CAPITAL LETTER C WITH CARON -0292 ; [.1CF3.0020.0002] # LATIN SMALL LETTER EZH -01B7 ; [.1CF3.0020.0008] # LATIN CAPITAL LETTER EZH -01EF ; [.1CF4.0020.0002] # LATIN SMALL LETTER EZH WITH CARON -0292 030C ; [.1CF4.0020.0002] # LATIN SMALL LETTER EZH WITH CARON -01EE ; [.1CF4.0020.0008] # LATIN CAPITAL LETTER EZH WITH CARON -01B7 030C ; [.1CF4.0020.0008] # LATIN CAPITAL LETTER EZH WITH CARON -0111 ; [.1D0F.0020.0002] # LATIN SMALL LETTER D WITH STROKE -0064 0335 ; [.1D0F.0020.0002] # LATIN SMALL LETTER D WITH STROKE -0110 ; [.1D0F.0020.0008] # LATIN CAPITAL LETTER D WITH STROKE -0044 0335 ; [.1D0F.0020.0008] # LATIN CAPITAL LETTER D WITH STROKE -00F0 ; [.1D0F.0021.0002] # LATIN SMALL LETTER ETH -1DD9 ; [.1D0F.0021.0002] # COMBINING LATIN SMALL LETTER ETH -00D0 ; [.1D0F.0021.0008] # LATIN CAPITAL LETTER ETH -01E7 ; [.1D66.0020.0002] # LATIN SMALL LETTER G WITH CARON -0067 030C ; [.1D66.0020.0002] # LATIN SMALL LETTER G WITH CARON -01E6 ; [.1D66.0020.0008] # LATIN CAPITAL LETTER G WITH CARON -0047 030C ; [.1D66.0020.0008] # LATIN CAPITAL LETTER G WITH CARON -01E9 ; [.1DDC.0020.0002] # LATIN SMALL LETTER K WITH CARON -006B 030C ; [.1DDC.0020.0002] # LATIN SMALL LETTER K WITH CARON -01E8 ; [.1DDC.0020.0008] # LATIN CAPITAL LETTER K WITH CARON -004B 030C ; [.1DDC.0020.0008] # LATIN CAPITAL LETTER K WITH CARON -0144 ; [.1E3E.0021.0002] # LATIN SMALL LETTER N WITH ACUTE -006E 0301 ; [.1E3E.0021.0002] # LATIN SMALL LETTER N WITH ACUTE -006E 0341 ; [.1E3E.0021.0002] # LATIN SMALL LETTER N WITH ACUTE -0143 ; [.1E3E.0021.0008] # LATIN CAPITAL LETTER N WITH ACUTE -004E 0301 ; [.1E3E.0021.0008] # LATIN CAPITAL LETTER N WITH ACUTE -004E 0341 ; [.1E3E.0021.0008] # LATIN CAPITAL LETTER N WITH ACUTE -00F1 ; [.1E3E.0022.0002] # LATIN SMALL LETTER N WITH TILDE -006E 0303 ; [.1E3E.0022.0002] # LATIN SMALL LETTER N WITH TILDE -00D1 ; [.1E3E.0022.0008] # LATIN CAPITAL LETTER N WITH TILDE -004E 0303 ; [.1E3E.0022.0008] # LATIN CAPITAL LETTER N WITH TILDE -0161 ; [.1EFA.0020.0002] # LATIN SMALL LETTER S WITH CARON -0073 030C ; [.1EFA.0020.0002] # LATIN SMALL LETTER S WITH CARON -0160 ; [.1EFA.0020.0008] # LATIN CAPITAL LETTER S WITH CARON -0053 030C ; [.1EFA.0020.0008] # LATIN CAPITAL LETTER S WITH CARON -00FE ; [.1F00.0021.0002] # LATIN SMALL LETTER THORN -00DE ; [.1F00.0021.0008] # LATIN CAPITAL LETTER THORN -00FC ; [.1F71.0021.0002] # LATIN SMALL LETTER U WITH DIAERESIS -0075 0308 ; [.1F71.0021.0002] # LATIN SMALL LETTER U WITH DIAERESIS -00DC ; [.1F71.0021.0008] # LATIN CAPITAL LETTER U WITH DIAERESIS -0055 0308 ; [.1F71.0021.0008] # LATIN CAPITAL LETTER U WITH DIAERESIS -01DC ; [.1F71.0021.0002][.0000.0025.0002] # LATIN SMALL LETTER U WITH DIAERESIS AND GRAVE -01DB ; [.1F71.0021.0008][.0000.0025.0002] # LATIN CAPITAL LETTER U WITH DIAERESIS AND GRAVE -01D8 ; [.1F71.0021.0002][.0000.0024.0002] # LATIN SMALL LETTER U WITH DIAERESIS AND ACUTE -01D7 ; [.1F71.0021.0008][.0000.0024.0002] # LATIN CAPITAL LETTER U WITH DIAERESIS AND ACUTE -01D6 ; [.1F71.0021.0002][.0000.0032.0002] # LATIN SMALL LETTER U WITH DIAERESIS AND MACRON -01D5 ; [.1F71.0021.0008][.0000.0032.0002] # LATIN CAPITAL LETTER U WITH DIAERESIS AND MACRON -01DA ; [.1F71.0021.0002][.0000.0028.0002] # LATIN SMALL LETTER U WITH DIAERESIS AND CARON -01D9 ; [.1F71.0021.0008][.0000.0028.0002] # LATIN CAPITAL LETTER U WITH DIAERESIS AND CARON -0171 ; [.1F71.0022.0002] # LATIN SMALL LETTER U WITH DOUBLE ACUTE -0075 030B ; [.1F71.0022.0002] # LATIN SMALL LETTER U WITH DOUBLE ACUTE -0170 ; [.1F71.0022.0008] # LATIN CAPITAL LETTER U WITH DOUBLE ACUTE -0055 030B ; [.1F71.0022.0008] # LATIN CAPITAL LETTER U WITH DOUBLE ACUTE -017E ; [.1FF8.0020.0002] # LATIN SMALL LETTER Z WITH CARON -007A 030C ; [.1FF8.0020.0002] # LATIN SMALL LETTER Z WITH CARON -017D ; [.1FF8.0020.0008] # LATIN CAPITAL LETTER Z WITH CARON -005A 030C ; [.1FF8.0020.0008] # LATIN CAPITAL LETTER Z WITH CARON -00F8 ; [.1FF9.0020.0002] # LATIN SMALL LETTER O WITH STROKE -006F 0338 ; [.1FF9.0020.0002] # LATIN SMALL LETTER O WITH STROKE -00D8 ; [.1FF9.0020.0008] # LATIN CAPITAL LETTER O WITH STROKE -004F 0338 ; [.1FF9.0020.0008] # LATIN CAPITAL LETTER O WITH STROKE -01FF ; [.1FF9.0020.0002][.0000.0024.0002] # LATIN SMALL LETTER O WITH STROKE AND ACUTE -01FE ; [.1FF9.0020.0008][.0000.0024.0002] # LATIN CAPITAL LETTER O WITH STROKE AND ACUTE -0153 ; [.1FF9.0021.0002] # LATIN SMALL LIGATURE OE -0152 ; [.1FF9.0021.0008] # LATIN CAPITAL LIGATURE OE -00E6 ; [.1FFA.0020.0002] # LATIN SMALL LETTER AE -1DD4 ; [.1FFA.0020.0002] # COMBINING LATIN SMALL LETTER AE -00C6 ; [.1FFA.0020.0008] # LATIN CAPITAL LETTER AE -1D2D ; [.1FFA.0020.0014] # MODIFIER LETTER CAPITAL AE -01FD ; [.1FFA.0020.0002][.0000.0024.0002] # LATIN SMALL LETTER AE WITH ACUTE -01FC ; [.1FFA.0020.0008][.0000.0024.0002] # LATIN CAPITAL LETTER AE WITH ACUTE -01E3 ; [.1FFA.0020.0002][.0000.0032.0002] # LATIN SMALL LETTER AE WITH MACRON -01E2 ; [.1FFA.0020.0008][.0000.0032.0002] # LATIN CAPITAL LETTER AE WITH MACRON -00E5 ; [.1FFC.0020.0002] # LATIN SMALL LETTER A WITH RING ABOVE -0061 030A ; [.1FFC.0020.0002] # LATIN SMALL LETTER A WITH RING ABOVE -00C5 ; [.1FFC.0020.0008] # LATIN CAPITAL LETTER A WITH RING ABOVE -0041 030A ; [.1FFC.0020.0008] # LATIN CAPITAL LETTER A WITH RING ABOVE -212B ; [.1FFC.0020.0008] # ANGSTROM SIGN -01FB ; [.1FFC.0020.0002][.0000.0024.0002] # LATIN SMALL LETTER A WITH RING ABOVE AND ACUTE -01FA ; [.1FFC.0020.0008][.0000.0024.0002] # LATIN CAPITAL LETTER A WITH RING ABOVE AND ACUTE -0227 ; [.1FFC.0021.0002] # LATIN SMALL LETTER A WITH DOT ABOVE -0061 0307 ; [.1FFC.0021.0002] # LATIN SMALL LETTER A WITH DOT ABOVE -0226 ; [.1FFC.0021.0008] # LATIN CAPITAL LETTER A WITH DOT ABOVE -0041 0307 ; [.1FFC.0021.0008] # LATIN CAPITAL LETTER A WITH DOT ABOVE -00E4 ; [.1FFD.0020.0002] # LATIN SMALL LETTER A WITH DIAERESIS -0061 0308 ; [.1FFD.0020.0002] # LATIN SMALL LETTER A WITH DIAERESIS -00C4 ; [.1FFD.0020.0008] # LATIN CAPITAL LETTER A WITH DIAERESIS -0041 0308 ; [.1FFD.0020.0008] # LATIN CAPITAL LETTER A WITH DIAERESIS -01DF ; [.1FFD.0020.0002][.0000.0032.0002] # LATIN SMALL LETTER A WITH DIAERESIS AND MACRON -01DE ; [.1FFD.0020.0008][.0000.0032.0002] # LATIN CAPITAL LETTER A WITH DIAERESIS AND MACRON -00E3 ; [.1FFD.0021.0002] # LATIN SMALL LETTER A WITH TILDE -0061 0303 ; [.1FFD.0021.0002] # LATIN SMALL LETTER A WITH TILDE -00C3 ; [.1FFD.0021.0008] # LATIN CAPITAL LETTER A WITH TILDE -0041 0303 ; [.1FFD.0021.0008] # LATIN CAPITAL LETTER A WITH TILDE -00F6 ; [.1FFE.0020.0002] # LATIN SMALL LETTER O WITH DIAERESIS -006F 0308 ; [.1FFE.0020.0002] # LATIN SMALL LETTER O WITH DIAERESIS -00D6 ; [.1FFE.0020.0008] # LATIN CAPITAL LETTER O WITH DIAERESIS -004F 0308 ; [.1FFE.0020.0008] # LATIN CAPITAL LETTER O WITH DIAERESIS -022B ; [.1FFE.0020.0002][.0000.0032.0002] # LATIN SMALL LETTER O WITH DIAERESIS AND MACRON -022A ; [.1FFE.0020.0008][.0000.0032.0002] # LATIN CAPITAL LETTER O WITH DIAERESIS AND MACRON -0151 ; [.1FFE.0021.0002] # LATIN SMALL LETTER O WITH DOUBLE ACUTE -006F 030B ; [.1FFE.0021.0002] # LATIN SMALL LETTER O WITH DOUBLE ACUTE -0150 ; [.1FFE.0021.0008] # LATIN CAPITAL LETTER O WITH DOUBLE ACUTE -004F 030B ; [.1FFE.0021.0008] # LATIN CAPITAL LETTER O WITH DOUBLE ACUTE -00F5 ; [.1FFE.0022.0002] # LATIN SMALL LETTER O WITH TILDE -006F 0303 ; [.1FFE.0022.0002] # LATIN SMALL LETTER O WITH TILDE -00D5 ; [.1FFE.0022.0008] # LATIN CAPITAL LETTER O WITH TILDE -004F 0303 ; [.1FFE.0022.0008] # LATIN CAPITAL LETTER O WITH TILDE -1E4D ; [.1FFE.0022.0002][.0000.0024.0002] # LATIN SMALL LETTER O WITH TILDE AND ACUTE -1E4C ; [.1FFE.0022.0008][.0000.0024.0002] # LATIN CAPITAL LETTER O WITH TILDE AND ACUTE -022D ; [.1FFE.0022.0002][.0000.0032.0002] # LATIN SMALL LETTER O WITH TILDE AND MACRON -022C ; [.1FFE.0022.0008][.0000.0032.0002] # LATIN CAPITAL LETTER O WITH TILDE AND MACRON -1E4F ; [.1FFE.0022.0002][.0000.002B.0002] # LATIN SMALL LETTER O WITH TILDE AND DIAERESIS -1E4E ; [.1FFE.0022.0008][.0000.002B.0002] # LATIN CAPITAL LETTER O WITH TILDE AND DIAERESIS -1EE1 ; [.1FFE.0022.0002][.0000.003F.0002] # LATIN SMALL LETTER O WITH HORN AND TILDE -1EE0 ; [.1FFE.0022.0008][.0000.003F.0002] # LATIN CAPITAL LETTER O WITH HORN AND TILDE -00F4 ; [.1FFE.0023.0002] # LATIN SMALL LETTER O WITH CIRCUMFLEX -006F 0302 ; [.1FFE.0023.0002] # LATIN SMALL LETTER O WITH CIRCUMFLEX -00D4 ; [.1FFE.0023.0008] # LATIN CAPITAL LETTER O WITH CIRCUMFLEX -004F 0302 ; [.1FFE.0023.0008] # LATIN CAPITAL LETTER O WITH CIRCUMFLEX -1ED3 ; [.1FFE.0023.0002][.0000.0025.0002] # LATIN SMALL LETTER O WITH CIRCUMFLEX AND GRAVE -1ED2 ; [.1FFE.0023.0008][.0000.0025.0002] # LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND GRAVE -1ED1 ; [.1FFE.0023.0002][.0000.0024.0002] # LATIN SMALL LETTER O WITH CIRCUMFLEX AND ACUTE -1ED0 ; [.1FFE.0023.0008][.0000.0024.0002] # LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND ACUTE -1ED7 ; [.1FFE.0023.0002][.0000.002D.0002] # LATIN SMALL LETTER O WITH CIRCUMFLEX AND TILDE -1ED6 ; [.1FFE.0023.0008][.0000.002D.0002] # LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND TILDE -1ED5 ; [.1FFE.0023.0002][.0000.003B.0002] # LATIN SMALL LETTER O WITH CIRCUMFLEX AND HOOK ABOVE -1ED4 ; [.1FFE.0023.0008][.0000.003B.0002] # LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND HOOK ABOVE -1ED9 ; [.1FFE.0023.0002][.0000.0042.0002] # LATIN SMALL LETTER O WITH CIRCUMFLEX AND DOT BELOW -1ED8 ; [.1FFE.0023.0008][.0000.0042.0002] # LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND DOT BELOW -01EB ; [.1FFE.0024.0002] # LATIN SMALL LETTER O WITH OGONEK -006F 0328 ; [.1FFE.0024.0002] # LATIN SMALL LETTER O WITH OGONEK -01EA ; [.1FFE.0024.0008] # LATIN CAPITAL LETTER O WITH OGONEK -004F 0328 ; [.1FFE.0024.0008] # LATIN CAPITAL LETTER O WITH OGONEK + entry => <<'ENTRY', # for DUCET v13.0.0 +00E1 ; [.1FBB.0020.0002] # LATIN SMALL LETTER A WITH ACUTE +0061 0301 ; [.1FBB.0020.0002] # LATIN SMALL LETTER A WITH ACUTE +0061 0341 ; [.1FBB.0020.0002] # LATIN SMALL LETTER A WITH ACUTE +00C1 ; [.1FBB.0020.0008] # LATIN CAPITAL LETTER A WITH ACUTE +0041 0301 ; [.1FBB.0020.0008] # LATIN CAPITAL LETTER A WITH ACUTE +0041 0341 ; [.1FBB.0020.0008] # LATIN CAPITAL LETTER A WITH ACUTE +010D ; [.1FE8.0020.0002] # LATIN SMALL LETTER C WITH CARON +0063 030C ; [.1FE8.0020.0002] # LATIN SMALL LETTER C WITH CARON +010C ; [.1FE8.0020.0008] # LATIN CAPITAL LETTER C WITH CARON +0043 030C ; [.1FE8.0020.0008] # LATIN CAPITAL LETTER C WITH CARON +0292 ; [.1FE9.0020.0002] # LATIN SMALL LETTER EZH +01B7 ; [.1FE9.0020.0008] # LATIN CAPITAL LETTER EZH +01EF ; [.1FEA.0020.0002] # LATIN SMALL LETTER EZH WITH CARON +0292 030C ; [.1FEA.0020.0002] # LATIN SMALL LETTER EZH WITH CARON +01EE ; [.1FEA.0020.0008] # LATIN CAPITAL LETTER EZH WITH CARON +01B7 030C ; [.1FEA.0020.0008] # LATIN CAPITAL LETTER EZH WITH CARON +0111 ; [.2006.0020.0002] # LATIN SMALL LETTER D WITH STROKE +0064 0335 ; [.2006.0020.0002] # LATIN SMALL LETTER D WITH STROKE +0110 ; [.2006.0020.0008] # LATIN CAPITAL LETTER D WITH STROKE +0044 0335 ; [.2006.0020.0008] # LATIN CAPITAL LETTER D WITH STROKE +00F0 ; [.2006.0021.0002] # LATIN SMALL LETTER ETH +1DD9 ; [.2006.0021.0002] # COMBINING LATIN SMALL LETTER ETH +00D0 ; [.2006.0021.0008] # LATIN CAPITAL LETTER ETH +01E7 ; [.205D.0020.0002] # LATIN SMALL LETTER G WITH CARON +0067 030C ; [.205D.0020.0002] # LATIN SMALL LETTER G WITH CARON +01E6 ; [.205D.0020.0008] # LATIN CAPITAL LETTER G WITH CARON +0047 030C ; [.205D.0020.0008] # LATIN CAPITAL LETTER G WITH CARON +01E9 ; [.20D5.0020.0002] # LATIN SMALL LETTER K WITH CARON +006B 030C ; [.20D5.0020.0002] # LATIN SMALL LETTER K WITH CARON +01E8 ; [.20D5.0020.0008] # LATIN CAPITAL LETTER K WITH CARON +004B 030C ; [.20D5.0020.0008] # LATIN CAPITAL LETTER K WITH CARON +0144 ; [.2137.0021.0002] # LATIN SMALL LETTER N WITH ACUTE +006E 0301 ; [.2137.0021.0002] # LATIN SMALL LETTER N WITH ACUTE +006E 0341 ; [.2137.0021.0002] # LATIN SMALL LETTER N WITH ACUTE +0143 ; [.2137.0021.0008] # LATIN CAPITAL LETTER N WITH ACUTE +004E 0301 ; [.2137.0021.0008] # LATIN CAPITAL LETTER N WITH ACUTE +004E 0341 ; [.2137.0021.0008] # LATIN CAPITAL LETTER N WITH ACUTE +00F1 ; [.2137.0022.0002] # LATIN SMALL LETTER N WITH TILDE +006E 0303 ; [.2137.0022.0002] # LATIN SMALL LETTER N WITH TILDE +00D1 ; [.2137.0022.0008] # LATIN CAPITAL LETTER N WITH TILDE +004E 0303 ; [.2137.0022.0008] # LATIN CAPITAL LETTER N WITH TILDE +0161 ; [.21F6.0020.0002] # LATIN SMALL LETTER S WITH CARON +0073 030C ; [.21F6.0020.0002] # LATIN SMALL LETTER S WITH CARON +0160 ; [.21F6.0020.0008] # LATIN CAPITAL LETTER S WITH CARON +0053 030C ; [.21F6.0020.0008] # LATIN CAPITAL LETTER S WITH CARON +00FE ; [.21FC.0021.0002] # LATIN SMALL LETTER THORN +00DE ; [.21FC.0021.0008] # LATIN CAPITAL LETTER THORN +00FC ; [.2270.0021.0002] # LATIN SMALL LETTER U WITH DIAERESIS +0075 0308 ; [.2270.0021.0002] # LATIN SMALL LETTER U WITH DIAERESIS +00DC ; [.2270.0021.0008] # LATIN CAPITAL LETTER U WITH DIAERESIS +0055 0308 ; [.2270.0021.0008] # LATIN CAPITAL LETTER U WITH DIAERESIS +01DC ; [.2270.0021.0002][.0000.0025.0002] # LATIN SMALL LETTER U WITH DIAERESIS AND GRAVE +01DB ; [.2270.0021.0008][.0000.0025.0002] # LATIN CAPITAL LETTER U WITH DIAERESIS AND GRAVE +01D8 ; [.2270.0021.0002][.0000.0024.0002] # LATIN SMALL LETTER U WITH DIAERESIS AND ACUTE +01D7 ; [.2270.0021.0008][.0000.0024.0002] # LATIN CAPITAL LETTER U WITH DIAERESIS AND ACUTE +01D6 ; [.2270.0021.0002][.0000.0032.0002] # LATIN SMALL LETTER U WITH DIAERESIS AND MACRON +01D5 ; [.2270.0021.0008][.0000.0032.0002] # LATIN CAPITAL LETTER U WITH DIAERESIS AND MACRON +01DA ; [.2270.0021.0002][.0000.0028.0002] # LATIN SMALL LETTER U WITH DIAERESIS AND CARON +01D9 ; [.2270.0021.0008][.0000.0028.0002] # LATIN CAPITAL LETTER U WITH DIAERESIS AND CARON +0171 ; [.2270.0022.0002] # LATIN SMALL LETTER U WITH DOUBLE ACUTE +0075 030B ; [.2270.0022.0002] # LATIN SMALL LETTER U WITH DOUBLE ACUTE +0170 ; [.2270.0022.0008] # LATIN CAPITAL LETTER U WITH DOUBLE ACUTE +0055 030B ; [.2270.0022.0008] # LATIN CAPITAL LETTER U WITH DOUBLE ACUTE +017E ; [.22F7.0020.0002] # LATIN SMALL LETTER Z WITH CARON +007A 030C ; [.22F7.0020.0002] # LATIN SMALL LETTER Z WITH CARON +017D ; [.22F7.0020.0008] # LATIN CAPITAL LETTER Z WITH CARON +005A 030C ; [.22F7.0020.0008] # LATIN CAPITAL LETTER Z WITH CARON +00F8 ; [.22F8.0020.0002] # LATIN SMALL LETTER O WITH STROKE +006F 0338 ; [.22F8.0020.0002] # LATIN SMALL LETTER O WITH STROKE +00D8 ; [.22F8.0020.0008] # LATIN CAPITAL LETTER O WITH STROKE +004F 0338 ; [.22F8.0020.0008] # LATIN CAPITAL LETTER O WITH STROKE +01FF ; [.22F8.0020.0002][.0000.0024.0002] # LATIN SMALL LETTER O WITH STROKE AND ACUTE +01FE ; [.22F8.0020.0008][.0000.0024.0002] # LATIN CAPITAL LETTER O WITH STROKE AND ACUTE +0153 ; [.22F8.0021.0002] # LATIN SMALL LIGATURE OE +0152 ; [.22F8.0021.0008] # LATIN CAPITAL LIGATURE OE +00E6 ; [.22F9.0020.0002] # LATIN SMALL LETTER AE +1DD4 ; [.22F9.0020.0002] # COMBINING LATIN SMALL LETTER AE +00C6 ; [.22F9.0020.0008] # LATIN CAPITAL LETTER AE +1D2D ; [.22F9.0020.0014] # MODIFIER LETTER CAPITAL AE +01FD ; [.22F9.0020.0002][.0000.0024.0002] # LATIN SMALL LETTER AE WITH ACUTE +01FC ; [.22F9.0020.0008][.0000.0024.0002] # LATIN CAPITAL LETTER AE WITH ACUTE +01E3 ; [.22F9.0020.0002][.0000.0032.0002] # LATIN SMALL LETTER AE WITH MACRON +01E2 ; [.22F9.0020.0008][.0000.0032.0002] # LATIN CAPITAL LETTER AE WITH MACRON +00E5 ; [.22FB.0020.0002] # LATIN SMALL LETTER A WITH RING ABOVE +0061 030A ; [.22FB.0020.0002] # LATIN SMALL LETTER A WITH RING ABOVE +00C5 ; [.22FB.0020.0008] # LATIN CAPITAL LETTER A WITH RING ABOVE +0041 030A ; [.22FB.0020.0008] # LATIN CAPITAL LETTER A WITH RING ABOVE +212B ; [.22FB.0020.0008] # ANGSTROM SIGN +01FB ; [.22FB.0020.0002][.0000.0024.0002] # LATIN SMALL LETTER A WITH RING ABOVE AND ACUTE +01FA ; [.22FB.0020.0008][.0000.0024.0002] # LATIN CAPITAL LETTER A WITH RING ABOVE AND ACUTE +0227 ; [.22FB.0021.0002] # LATIN SMALL LETTER A WITH DOT ABOVE +0061 0307 ; [.22FB.0021.0002] # LATIN SMALL LETTER A WITH DOT ABOVE +0226 ; [.22FB.0021.0008] # LATIN CAPITAL LETTER A WITH DOT ABOVE +0041 0307 ; [.22FB.0021.0008] # LATIN CAPITAL LETTER A WITH DOT ABOVE +00E4 ; [.22FC.0020.0002] # LATIN SMALL LETTER A WITH DIAERESIS +0061 0308 ; [.22FC.0020.0002] # LATIN SMALL LETTER A WITH DIAERESIS +00C4 ; [.22FC.0020.0008] # LATIN CAPITAL LETTER A WITH DIAERESIS +0041 0308 ; [.22FC.0020.0008] # LATIN CAPITAL LETTER A WITH DIAERESIS +01DF ; [.22FC.0020.0002][.0000.0032.0002] # LATIN SMALL LETTER A WITH DIAERESIS AND MACRON +01DE ; [.22FC.0020.0008][.0000.0032.0002] # LATIN CAPITAL LETTER A WITH DIAERESIS AND MACRON +00E3 ; [.22FC.0021.0002] # LATIN SMALL LETTER A WITH TILDE +0061 0303 ; [.22FC.0021.0002] # LATIN SMALL LETTER A WITH TILDE +00C3 ; [.22FC.0021.0008] # LATIN CAPITAL LETTER A WITH TILDE +0041 0303 ; [.22FC.0021.0008] # LATIN CAPITAL LETTER A WITH TILDE +00F6 ; [.22FD.0020.0002] # LATIN SMALL LETTER O WITH DIAERESIS +006F 0308 ; [.22FD.0020.0002] # LATIN SMALL LETTER O WITH DIAERESIS +00D6 ; [.22FD.0020.0008] # LATIN CAPITAL LETTER O WITH DIAERESIS +004F 0308 ; [.22FD.0020.0008] # LATIN CAPITAL LETTER O WITH DIAERESIS +022B ; [.22FD.0020.0002][.0000.0032.0002] # LATIN SMALL LETTER O WITH DIAERESIS AND MACRON +022A ; [.22FD.0020.0008][.0000.0032.0002] # LATIN CAPITAL LETTER O WITH DIAERESIS AND MACRON +0151 ; [.22FD.0021.0002] # LATIN SMALL LETTER O WITH DOUBLE ACUTE +006F 030B ; [.22FD.0021.0002] # LATIN SMALL LETTER O WITH DOUBLE ACUTE +0150 ; [.22FD.0021.0008] # LATIN CAPITAL LETTER O WITH DOUBLE ACUTE +004F 030B ; [.22FD.0021.0008] # LATIN CAPITAL LETTER O WITH DOUBLE ACUTE +00F5 ; [.22FD.0022.0002] # LATIN SMALL LETTER O WITH TILDE +006F 0303 ; [.22FD.0022.0002] # LATIN SMALL LETTER O WITH TILDE +00D5 ; [.22FD.0022.0008] # LATIN CAPITAL LETTER O WITH TILDE +004F 0303 ; [.22FD.0022.0008] # LATIN CAPITAL LETTER O WITH TILDE +1E4D ; [.22FD.0022.0002][.0000.0024.0002] # LATIN SMALL LETTER O WITH TILDE AND ACUTE +1E4C ; [.22FD.0022.0008][.0000.0024.0002] # LATIN CAPITAL LETTER O WITH TILDE AND ACUTE +022D ; [.22FD.0022.0002][.0000.0032.0002] # LATIN SMALL LETTER O WITH TILDE AND MACRON +022C ; [.22FD.0022.0008][.0000.0032.0002] # LATIN CAPITAL LETTER O WITH TILDE AND MACRON +1E4F ; [.22FD.0022.0002][.0000.002B.0002] # LATIN SMALL LETTER O WITH TILDE AND DIAERESIS +1E4E ; [.22FD.0022.0008][.0000.002B.0002] # LATIN CAPITAL LETTER O WITH TILDE AND DIAERESIS +1EE1 ; [.22FD.0022.0002][.0000.003F.0002] # LATIN SMALL LETTER O WITH HORN AND TILDE +1EE0 ; [.22FD.0022.0008][.0000.003F.0002] # LATIN CAPITAL LETTER O WITH HORN AND TILDE +00F4 ; [.22FD.0023.0002] # LATIN SMALL LETTER O WITH CIRCUMFLEX +006F 0302 ; [.22FD.0023.0002] # LATIN SMALL LETTER O WITH CIRCUMFLEX +00D4 ; [.22FD.0023.0008] # LATIN CAPITAL LETTER O WITH CIRCUMFLEX +004F 0302 ; [.22FD.0023.0008] # LATIN CAPITAL LETTER O WITH CIRCUMFLEX +1ED3 ; [.22FD.0023.0002][.0000.0025.0002] # LATIN SMALL LETTER O WITH CIRCUMFLEX AND GRAVE +1ED2 ; [.22FD.0023.0008][.0000.0025.0002] # LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND GRAVE +1ED1 ; [.22FD.0023.0002][.0000.0024.0002] # LATIN SMALL LETTER O WITH CIRCUMFLEX AND ACUTE +1ED0 ; [.22FD.0023.0008][.0000.0024.0002] # LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND ACUTE +1ED7 ; [.22FD.0023.0002][.0000.002D.0002] # LATIN SMALL LETTER O WITH CIRCUMFLEX AND TILDE +1ED6 ; [.22FD.0023.0008][.0000.002D.0002] # LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND TILDE +1ED5 ; [.22FD.0023.0002][.0000.003B.0002] # LATIN SMALL LETTER O WITH CIRCUMFLEX AND HOOK ABOVE +1ED4 ; [.22FD.0023.0008][.0000.003B.0002] # LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND HOOK ABOVE +1ED9 ; [.22FD.0023.0002][.0000.0042.0002] # LATIN SMALL LETTER O WITH CIRCUMFLEX AND DOT BELOW +1ED8 ; [.22FD.0023.0008][.0000.0042.0002] # LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND DOT BELOW +01EB ; [.22FD.0024.0002] # LATIN SMALL LETTER O WITH OGONEK +006F 0328 ; [.22FD.0024.0002] # LATIN SMALL LETTER O WITH OGONEK +01EA ; [.22FD.0024.0008] # LATIN CAPITAL LETTER O WITH OGONEK +004F 0328 ; [.22FD.0024.0008] # LATIN CAPITAL LETTER O WITH OGONEK ENTRY }; diff --git a/gnu/usr.bin/perl/cpan/Unicode-Collate/Collate/Locale/si.pl b/gnu/usr.bin/perl/cpan/Unicode-Collate/Collate/Locale/si.pl index e8149927071..2d73b243d66 100644 --- a/gnu/usr.bin/perl/cpan/Unicode-Collate/Collate/Locale/si.pl +++ b/gnu/usr.bin/perl/cpan/Unicode-Collate/Collate/Locale/si.pl @@ -1,10 +1,10 @@ +{ - locale_version => 1.27, - entry => <<'ENTRY', # for DUCET v10.0.0 -0D82 ; [.2953.0020.0002][.FFF1.0000.0000] # SINHALA SIGN ANUSVARAYA -0D83 ; [.2953.0020.0002][.FFF2.0000.0000] # SINHALA SIGN VISARGAYA -0D96 ; [.2953.0020.0002][.FFF0.0000.0000] # SINHALA LETTER AUYANNA -0DA5 ; [.295E.0020.0002] # SINHALA LETTER TAALUJA SANYOOGA NAAKSIKYAYA -0DA4 ; [.295F.0020.0002] # SINHALA LETTER TAALUJA NAASIKYAYA + locale_version => 1.31, + entry => <<'ENTRY', # for DUCET v13.0.0 +0D82 ; [.2C61.0020.0002][.FFF1.0000.0000] # SINHALA SIGN ANUSVARAYA +0D83 ; [.2C61.0020.0002][.FFF2.0000.0000] # SINHALA SIGN VISARGAYA +0D96 ; [.2C61.0020.0002][.FFF0.0000.0000] # SINHALA LETTER AUYANNA +0DA5 ; [.2C6C.0020.0002] # SINHALA LETTER TAALUJA SANYOOGA NAAKSIKYAYA +0DA4 ; [.2C6D.0020.0002] # SINHALA LETTER TAALUJA NAASIKYAYA ENTRY }; diff --git a/gnu/usr.bin/perl/cpan/Unicode-Collate/Collate/Locale/si_dict.pl b/gnu/usr.bin/perl/cpan/Unicode-Collate/Collate/Locale/si_dict.pl index 75e70cf6617..31b499e1986 100644 --- a/gnu/usr.bin/perl/cpan/Unicode-Collate/Collate/Locale/si_dict.pl +++ b/gnu/usr.bin/perl/cpan/Unicode-Collate/Collate/Locale/si_dict.pl @@ -1,9 +1,9 @@ +{ - locale_version => 1.27, - entry => <<'ENTRY', # for DUCET v10.0.0 -0D82 ; [.2953.0020.0002][.FFF1.0000.0000] # SINHALA SIGN ANUSVARAYA -0D83 ; [.2953.0020.0002][.FFF2.0000.0000] # SINHALA SIGN VISARGAYA -0D96 ; [.2953.0020.0002][.FFF0.0000.0000] # SINHALA LETTER AUYANNA -0DA5 ; [.295C.0020.0002][.298E.0020.0002][.295E.0021.0002] # SINHALA LETTER TAALUJA SANYOOGA NAAKSIKYAYA + locale_version => 1.31, + entry => <<'ENTRY', # for DUCET v13.0.0 +0D82 ; [.2C61.0020.0002][.FFF1.0000.0000] # SINHALA SIGN ANUSVARAYA +0D83 ; [.2C61.0020.0002][.FFF2.0000.0000] # SINHALA SIGN VISARGAYA +0D96 ; [.2C61.0020.0002][.FFF0.0000.0000] # SINHALA LETTER AUYANNA +0DA5 ; [.2C6A.0020.0002][.2C9C.0020.0002][.2C6C.0021.0002] # SINHALA LETTER TAALUJA SANYOOGA NAAKSIKYAYA ENTRY }; diff --git a/gnu/usr.bin/perl/cpan/Unicode-Collate/Collate/Locale/sk.pl b/gnu/usr.bin/perl/cpan/Unicode-Collate/Collate/Locale/sk.pl index 5207a30b5e7..8db55fbe839 100644 --- a/gnu/usr.bin/perl/cpan/Unicode-Collate/Collate/Locale/sk.pl +++ b/gnu/usr.bin/perl/cpan/Unicode-Collate/Collate/Locale/sk.pl @@ -1,45 +1,45 @@ +{ - locale_version => 1.27, - entry => <<'ENTRY', # for DUCET v10.0.0 -00E4 ; [.1CAE.0020.0002] # LATIN SMALL LETTER A WITH DIAERESIS -0061 0308 ; [.1CAE.0020.0002] # LATIN SMALL LETTER A WITH DIAERESIS -00C4 ; [.1CAE.0020.0008] # LATIN CAPITAL LETTER A WITH DIAERESIS -0041 0308 ; [.1CAE.0020.0008] # LATIN CAPITAL LETTER A WITH DIAERESIS -01DF ; [.1CAE.0020.0002][.0000.0032.0002] # LATIN SMALL LETTER A WITH DIAERESIS AND MACRON -01DE ; [.1CAE.0020.0008][.0000.0032.0002] # LATIN CAPITAL LETTER A WITH DIAERESIS AND MACRON -010D ; [.1CE1.0020.0002] # LATIN SMALL LETTER C WITH CARON -0063 030C ; [.1CE1.0020.0002] # LATIN SMALL LETTER C WITH CARON -010C ; [.1CE1.0020.0008] # LATIN CAPITAL LETTER C WITH CARON -0043 030C ; [.1CE1.0020.0008] # LATIN CAPITAL LETTER C WITH CARON -0063 0068 ; [.1D7F.0020.0002] # -0063 0048 ; [.1D7F.0020.0007][.0000.0000.0002] # -0043 0068 ; [.1D7F.0020.0007][.0000.0000.0008] # -0043 0048 ; [.1D7F.0020.0008] # -00F4 ; [.1E44.0020.0002] # LATIN SMALL LETTER O WITH CIRCUMFLEX -006F 0302 ; [.1E44.0020.0002] # LATIN SMALL LETTER O WITH CIRCUMFLEX -00D4 ; [.1E44.0020.0008] # LATIN CAPITAL LETTER O WITH CIRCUMFLEX -004F 0302 ; [.1E44.0020.0008] # LATIN CAPITAL LETTER O WITH CIRCUMFLEX -1ED3 ; [.1E44.0020.0002][.0000.0025.0002] # LATIN SMALL LETTER O WITH CIRCUMFLEX AND GRAVE -1ED2 ; [.1E44.0020.0008][.0000.0025.0002] # LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND GRAVE -1ED1 ; [.1E44.0020.0002][.0000.0024.0002] # LATIN SMALL LETTER O WITH CIRCUMFLEX AND ACUTE -1ED0 ; [.1E44.0020.0008][.0000.0024.0002] # LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND ACUTE -1ED7 ; [.1E44.0020.0002][.0000.002D.0002] # LATIN SMALL LETTER O WITH CIRCUMFLEX AND TILDE -1ED6 ; [.1E44.0020.0008][.0000.002D.0002] # LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND TILDE -1ED5 ; [.1E44.0020.0002][.0000.003B.0002] # LATIN SMALL LETTER O WITH CIRCUMFLEX AND HOOK ABOVE -1ED4 ; [.1E44.0020.0008][.0000.003B.0002] # LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND HOOK ABOVE -1ED9 ; [.1E44.0020.0002][.0000.0042.0002] # LATIN SMALL LETTER O WITH CIRCUMFLEX AND DOT BELOW -1ED8 ; [.1E44.0020.0008][.0000.0042.0002] # LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND DOT BELOW -0159 ; [.1E9A.0020.0002] # LATIN SMALL LETTER R WITH CARON -0072 030C ; [.1E9A.0020.0002] # LATIN SMALL LETTER R WITH CARON -0158 ; [.1E9A.0020.0008] # LATIN CAPITAL LETTER R WITH CARON -0052 030C ; [.1E9A.0020.0008] # LATIN CAPITAL LETTER R WITH CARON -0161 ; [.1ED8.0020.0002] # LATIN SMALL LETTER S WITH CARON -0073 030C ; [.1ED8.0020.0002] # LATIN SMALL LETTER S WITH CARON -0160 ; [.1ED8.0020.0008] # LATIN CAPITAL LETTER S WITH CARON -0053 030C ; [.1ED8.0020.0008] # LATIN CAPITAL LETTER S WITH CARON -017E ; [.1F88.0020.0002] # LATIN SMALL LETTER Z WITH CARON -007A 030C ; [.1F88.0020.0002] # LATIN SMALL LETTER Z WITH CARON -017D ; [.1F88.0020.0008] # LATIN CAPITAL LETTER Z WITH CARON -005A 030C ; [.1F88.0020.0008] # LATIN CAPITAL LETTER Z WITH CARON + locale_version => 1.31, + entry => <<'ENTRY', # for DUCET v13.0.0 +00E4 ; [.1FA3.0020.0002] # LATIN SMALL LETTER A WITH DIAERESIS +0061 0308 ; [.1FA3.0020.0002] # LATIN SMALL LETTER A WITH DIAERESIS +00C4 ; [.1FA3.0020.0008] # LATIN CAPITAL LETTER A WITH DIAERESIS +0041 0308 ; [.1FA3.0020.0008] # LATIN CAPITAL LETTER A WITH DIAERESIS +01DF ; [.1FA3.0020.0002][.0000.0032.0002] # LATIN SMALL LETTER A WITH DIAERESIS AND MACRON +01DE ; [.1FA3.0020.0008][.0000.0032.0002] # LATIN CAPITAL LETTER A WITH DIAERESIS AND MACRON +010D ; [.1FD7.0020.0002] # LATIN SMALL LETTER C WITH CARON +0063 030C ; [.1FD7.0020.0002] # LATIN SMALL LETTER C WITH CARON +010C ; [.1FD7.0020.0008] # LATIN CAPITAL LETTER C WITH CARON +0043 030C ; [.1FD7.0020.0008] # LATIN CAPITAL LETTER C WITH CARON +0063 0068 ; [.2076.0020.0002] # +0063 0048 ; [.2076.0020.0007][.0000.0000.0002] # +0043 0068 ; [.2076.0020.0007][.0000.0000.0008] # +0043 0048 ; [.2076.0020.0008] # +00F4 ; [.213D.0020.0002] # LATIN SMALL LETTER O WITH CIRCUMFLEX +006F 0302 ; [.213D.0020.0002] # LATIN SMALL LETTER O WITH CIRCUMFLEX +00D4 ; [.213D.0020.0008] # LATIN CAPITAL LETTER O WITH CIRCUMFLEX +004F 0302 ; [.213D.0020.0008] # LATIN CAPITAL LETTER O WITH CIRCUMFLEX +1ED3 ; [.213D.0020.0002][.0000.0025.0002] # LATIN SMALL LETTER O WITH CIRCUMFLEX AND GRAVE +1ED2 ; [.213D.0020.0008][.0000.0025.0002] # LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND GRAVE +1ED1 ; [.213D.0020.0002][.0000.0024.0002] # LATIN SMALL LETTER O WITH CIRCUMFLEX AND ACUTE +1ED0 ; [.213D.0020.0008][.0000.0024.0002] # LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND ACUTE +1ED7 ; [.213D.0020.0002][.0000.002D.0002] # LATIN SMALL LETTER O WITH CIRCUMFLEX AND TILDE +1ED6 ; [.213D.0020.0008][.0000.002D.0002] # LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND TILDE +1ED5 ; [.213D.0020.0002][.0000.003B.0002] # LATIN SMALL LETTER O WITH CIRCUMFLEX AND HOOK ABOVE +1ED4 ; [.213D.0020.0008][.0000.003B.0002] # LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND HOOK ABOVE +1ED9 ; [.213D.0020.0002][.0000.0042.0002] # LATIN SMALL LETTER O WITH CIRCUMFLEX AND DOT BELOW +1ED8 ; [.213D.0020.0008][.0000.0042.0002] # LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND DOT BELOW +0159 ; [.2194.0020.0002] # LATIN SMALL LETTER R WITH CARON +0072 030C ; [.2194.0020.0002] # LATIN SMALL LETTER R WITH CARON +0158 ; [.2194.0020.0008] # LATIN CAPITAL LETTER R WITH CARON +0052 030C ; [.2194.0020.0008] # LATIN CAPITAL LETTER R WITH CARON +0161 ; [.21D3.0020.0002] # LATIN SMALL LETTER S WITH CARON +0073 030C ; [.21D3.0020.0002] # LATIN SMALL LETTER S WITH CARON +0160 ; [.21D3.0020.0008] # LATIN CAPITAL LETTER S WITH CARON +0053 030C ; [.21D3.0020.0008] # LATIN CAPITAL LETTER S WITH CARON +017E ; [.2287.0020.0002] # LATIN SMALL LETTER Z WITH CARON +007A 030C ; [.2287.0020.0002] # LATIN SMALL LETTER Z WITH CARON +017D ; [.2287.0020.0008] # LATIN CAPITAL LETTER Z WITH CARON +005A 030C ; [.2287.0020.0008] # LATIN CAPITAL LETTER Z WITH CARON ENTRY }; diff --git a/gnu/usr.bin/perl/cpan/Unicode-Collate/Collate/Locale/sl.pl b/gnu/usr.bin/perl/cpan/Unicode-Collate/Collate/Locale/sl.pl index 00882f52a81..65a683a50ad 100644 --- a/gnu/usr.bin/perl/cpan/Unicode-Collate/Collate/Locale/sl.pl +++ b/gnu/usr.bin/perl/cpan/Unicode-Collate/Collate/Locale/sl.pl @@ -1,17 +1,17 @@ +{ - locale_version => 1.27, - entry => <<'ENTRY', # for DUCET v10.0.0 -010D ; [.1CE1.0020.0002] # LATIN SMALL LETTER C WITH CARON -0063 030C ; [.1CE1.0020.0002] # LATIN SMALL LETTER C WITH CARON -010C ; [.1CE1.0020.0008] # LATIN CAPITAL LETTER C WITH CARON -0043 030C ; [.1CE1.0020.0008] # LATIN CAPITAL LETTER C WITH CARON -0161 ; [.1ED8.0020.0002] # LATIN SMALL LETTER S WITH CARON -0073 030C ; [.1ED8.0020.0002] # LATIN SMALL LETTER S WITH CARON -0160 ; [.1ED8.0020.0008] # LATIN CAPITAL LETTER S WITH CARON -0053 030C ; [.1ED8.0020.0008] # LATIN CAPITAL LETTER S WITH CARON -017E ; [.1F88.0020.0002] # LATIN SMALL LETTER Z WITH CARON -007A 030C ; [.1F88.0020.0002] # LATIN SMALL LETTER Z WITH CARON -017D ; [.1F88.0020.0008] # LATIN CAPITAL LETTER Z WITH CARON -005A 030C ; [.1F88.0020.0008] # LATIN CAPITAL LETTER Z WITH CARON + locale_version => 1.31, + entry => <<'ENTRY', # for DUCET v13.0.0 +010D ; [.1FD7.0020.0002] # LATIN SMALL LETTER C WITH CARON +0063 030C ; [.1FD7.0020.0002] # LATIN SMALL LETTER C WITH CARON +010C ; [.1FD7.0020.0008] # LATIN CAPITAL LETTER C WITH CARON +0043 030C ; [.1FD7.0020.0008] # LATIN CAPITAL LETTER C WITH CARON +0161 ; [.21D3.0020.0002] # LATIN SMALL LETTER S WITH CARON +0073 030C ; [.21D3.0020.0002] # LATIN SMALL LETTER S WITH CARON +0160 ; [.21D3.0020.0008] # LATIN CAPITAL LETTER S WITH CARON +0053 030C ; [.21D3.0020.0008] # LATIN CAPITAL LETTER S WITH CARON +017E ; [.2287.0020.0002] # LATIN SMALL LETTER Z WITH CARON +007A 030C ; [.2287.0020.0002] # LATIN SMALL LETTER Z WITH CARON +017D ; [.2287.0020.0008] # LATIN CAPITAL LETTER Z WITH CARON +005A 030C ; [.2287.0020.0008] # LATIN CAPITAL LETTER Z WITH CARON ENTRY }; diff --git a/gnu/usr.bin/perl/cpan/Unicode-Collate/Collate/Locale/sq.pl b/gnu/usr.bin/perl/cpan/Unicode-Collate/Collate/Locale/sq.pl index ad3dac94ad7..f4bfbfa45ea 100644 --- a/gnu/usr.bin/perl/cpan/Unicode-Collate/Collate/Locale/sq.pl +++ b/gnu/usr.bin/perl/cpan/Unicode-Collate/Collate/Locale/sq.pl @@ -1,49 +1,49 @@ +{ - locale_version => 1.27, - entry => <<'ENTRY', # for DUCET v10.0.0 -00E7 ; [.1CF4.0020.0002] # LATIN SMALL LETTER C WITH CEDILLA -0063 0327 ; [.1CF4.0020.0002] # LATIN SMALL LETTER C WITH CEDILLA -00C7 ; [.1CF4.0020.0008] # LATIN CAPITAL LETTER C WITH CEDILLA -0043 0327 ; [.1CF4.0020.0008] # LATIN CAPITAL LETTER C WITH CEDILLA -0064 0068 ; [.1D0F.0020.0002] # -0064 0048 ; [.1D0F.0020.0007][.0000.0000.0002] # -0044 0068 ; [.1D0F.0020.0007][.0000.0000.0008] # -0044 0048 ; [.1D0F.0020.0008] # -00EB ; [.1D4A.0020.0002] # LATIN SMALL LETTER E WITH DIAERESIS -0065 0308 ; [.1D4A.0020.0002] # LATIN SMALL LETTER E WITH DIAERESIS -00CB ; [.1D4A.0020.0008] # LATIN CAPITAL LETTER E WITH DIAERESIS -0045 0308 ; [.1D4A.0020.0008] # LATIN CAPITAL LETTER E WITH DIAERESIS -0067 006A ; [.1D7D.0020.0002] # -0067 004A ; [.1D7D.0020.0007][.0000.0000.0002] # -0047 006A ; [.1D7D.0020.0007][.0000.0000.0008] # -0047 004A ; [.1D7D.0020.0008] # -006C 006C ; [.1E0F.0020.0002] # -006C 004C ; [.1E0F.0020.0007][.0000.0000.0002] # -004C 006C ; [.1E0F.0020.0007][.0000.0000.0008] # -004C 004C ; [.1E0F.0020.0008] # -006E 006A ; [.1E42.0020.0002] # -006E 004A ; [.1E42.0020.0007][.0000.0000.0002] # -004E 006A ; [.1E42.0020.0007][.0000.0000.0008] # -004E 004A ; [.1E42.0020.0008] # -0072 0072 ; [.1ED6.0020.0002] # -0072 0052 ; [.1ED6.0020.0007][.0000.0000.0002] # -0052 0072 ; [.1ED6.0020.0007][.0000.0000.0008] # -0052 0052 ; [.1ED6.0020.0008] # -0073 0068 ; [.1EFA.0020.0002] # -0073 0048 ; [.1EFA.0020.0007][.0000.0000.0002] # -0053 0068 ; [.1EFA.0020.0007][.0000.0000.0008] # -0053 0048 ; [.1EFA.0020.0008] # -0074 0068 ; [.1F1A.0020.0002] # -0074 0048 ; [.1F1A.0020.0007][.0000.0000.0002] # -0054 0068 ; [.1F1A.0020.0007][.0000.0000.0008] # -0054 0048 ; [.1F1A.0020.0008] # -0078 0068 ; [.1F70.0020.0002] # -0078 0048 ; [.1F70.0020.0007][.0000.0000.0002] # -0058 0068 ; [.1F70.0020.0007][.0000.0000.0008] # -0058 0048 ; [.1F70.0020.0008] # -007A 0068 ; [.1FA3.0020.0002] # -007A 0048 ; [.1FA3.0020.0007][.0000.0000.0002] # -005A 0068 ; [.1FA3.0020.0007][.0000.0000.0008] # -005A 0048 ; [.1FA3.0020.0008] # + locale_version => 1.31, + entry => <<'ENTRY', # for DUCET v13.0.0 +00E7 ; [.1FEA.0020.0002] # LATIN SMALL LETTER C WITH CEDILLA +0063 0327 ; [.1FEA.0020.0002] # LATIN SMALL LETTER C WITH CEDILLA +00C7 ; [.1FEA.0020.0008] # LATIN CAPITAL LETTER C WITH CEDILLA +0043 0327 ; [.1FEA.0020.0008] # LATIN CAPITAL LETTER C WITH CEDILLA +0064 0068 ; [.2006.0020.0002] # +0064 0048 ; [.2006.0020.0007][.0000.0000.0002] # +0044 0068 ; [.2006.0020.0007][.0000.0000.0008] # +0044 0048 ; [.2006.0020.0008] # +00EB ; [.2041.0020.0002] # LATIN SMALL LETTER E WITH DIAERESIS +0065 0308 ; [.2041.0020.0002] # LATIN SMALL LETTER E WITH DIAERESIS +00CB ; [.2041.0020.0008] # LATIN CAPITAL LETTER E WITH DIAERESIS +0045 0308 ; [.2041.0020.0008] # LATIN CAPITAL LETTER E WITH DIAERESIS +0067 006A ; [.2074.0020.0002] # +0067 004A ; [.2074.0020.0007][.0000.0000.0002] # +0047 006A ; [.2074.0020.0007][.0000.0000.0008] # +0047 004A ; [.2074.0020.0008] # +006C 006C ; [.2108.0020.0002] # +006C 004C ; [.2108.0020.0007][.0000.0000.0002] # +004C 006C ; [.2108.0020.0007][.0000.0000.0008] # +004C 004C ; [.2108.0020.0008] # +006E 006A ; [.213B.0020.0002] # +006E 004A ; [.213B.0020.0007][.0000.0000.0002] # +004E 006A ; [.213B.0020.0007][.0000.0000.0008] # +004E 004A ; [.213B.0020.0008] # +0072 0072 ; [.21D1.0020.0002] # +0072 0052 ; [.21D1.0020.0007][.0000.0000.0002] # +0052 0072 ; [.21D1.0020.0007][.0000.0000.0008] # +0052 0052 ; [.21D1.0020.0008] # +0073 0068 ; [.21F6.0020.0002] # +0073 0048 ; [.21F6.0020.0007][.0000.0000.0002] # +0053 0068 ; [.21F6.0020.0007][.0000.0000.0008] # +0053 0048 ; [.21F6.0020.0008] # +0074 0068 ; [.2216.0020.0002] # +0074 0048 ; [.2216.0020.0007][.0000.0000.0002] # +0054 0068 ; [.2216.0020.0007][.0000.0000.0008] # +0054 0048 ; [.2216.0020.0008] # +0078 0068 ; [.226F.0020.0002] # +0078 0048 ; [.226F.0020.0007][.0000.0000.0002] # +0058 0068 ; [.226F.0020.0007][.0000.0000.0008] # +0058 0048 ; [.226F.0020.0008] # +007A 0068 ; [.22A2.0020.0002] # +007A 0048 ; [.22A2.0020.0007][.0000.0000.0002] # +005A 0068 ; [.22A2.0020.0007][.0000.0000.0008] # +005A 0048 ; [.22A2.0020.0008] # ENTRY }; diff --git a/gnu/usr.bin/perl/cpan/Unicode-Collate/Collate/Locale/sr.pl b/gnu/usr.bin/perl/cpan/Unicode-Collate/Collate/Locale/sr.pl index a416f16069b..5194ceea57c 100644 --- a/gnu/usr.bin/perl/cpan/Unicode-Collate/Collate/Locale/sr.pl +++ b/gnu/usr.bin/perl/cpan/Unicode-Collate/Collate/Locale/sr.pl @@ -1,8 +1,8 @@ +{ - locale_version => 1.27, + locale_version => 1.31, suppress => [0x0418, 0x0438], - entry => <<'ENTRY', # for DUCET v10.0.0 -0439 ; [.20E6.0020.0002][.0000.0026.0002] # CYRILLIC SMALL LETTER SHORT I -0419 ; [.20E6.0020.0008][.0000.0026.0002] # CYRILLIC CAPITAL LETTER SHORT I + entry => <<'ENTRY', # for DUCET v13.0.0 +0439 ; [.23E5.0020.0002][.0000.0026.0002] # CYRILLIC SMALL LETTER SHORT I +0419 ; [.23E5.0020.0008][.0000.0026.0002] # CYRILLIC CAPITAL LETTER SHORT I ENTRY }; diff --git a/gnu/usr.bin/perl/cpan/Unicode-Collate/Collate/Locale/sv.pl b/gnu/usr.bin/perl/cpan/Unicode-Collate/Collate/Locale/sv.pl index 0609f084705..1e47fc4bee6 100644 --- a/gnu/usr.bin/perl/cpan/Unicode-Collate/Collate/Locale/sv.pl +++ b/gnu/usr.bin/perl/cpan/Unicode-Collate/Collate/Locale/sv.pl @@ -1,89 +1,89 @@ +{ - locale_version => 1.27, - entry => <<'ENTRY', # for DUCET v10.0.0 -0111 ; [.1CF5.0021.0002] # LATIN SMALL LETTER D WITH STROKE -0064 0335 ; [.1CF5.0021.0002] # LATIN SMALL LETTER D WITH STROKE -0110 ; [.1CF5.0021.0008] # LATIN CAPITAL LETTER D WITH STROKE -0044 0335 ; [.1CF5.0021.0008] # LATIN CAPITAL LETTER D WITH STROKE -00F0 ; [.1CF5.0022.0002] # LATIN SMALL LETTER ETH -1DD9 ; [.1CF5.0022.0002] # COMBINING LATIN SMALL LETTER ETH -00D0 ; [.1CF5.0022.0008] # LATIN CAPITAL LETTER ETH -00FE ; [.1EFB.0020.0003][.1D7E.0020.0003] # LATIN SMALL LETTER THORN -00DE ; [.1EFB.0020.0009][.1D7E.0020.0009] # LATIN CAPITAL LETTER THORN -0077 ; [.1F49.0021.0002] # LATIN SMALL LETTER W -0057 ; [.1F49.0021.0008] # LATIN CAPITAL LETTER W -00FC ; [.1F71.0021.0002] # LATIN SMALL LETTER U WITH DIAERESIS -0075 0308 ; [.1F71.0021.0002] # LATIN SMALL LETTER U WITH DIAERESIS -00DC ; [.1F71.0021.0008] # LATIN CAPITAL LETTER U WITH DIAERESIS -0055 0308 ; [.1F71.0021.0008] # LATIN CAPITAL LETTER U WITH DIAERESIS -01DC ; [.1F71.0021.0002][.0000.0025.0002] # LATIN SMALL LETTER U WITH DIAERESIS AND GRAVE -01DB ; [.1F71.0021.0008][.0000.0025.0002] # LATIN CAPITAL LETTER U WITH DIAERESIS AND GRAVE -01D8 ; [.1F71.0021.0002][.0000.0024.0002] # LATIN SMALL LETTER U WITH DIAERESIS AND ACUTE -01D7 ; [.1F71.0021.0008][.0000.0024.0002] # LATIN CAPITAL LETTER U WITH DIAERESIS AND ACUTE -01D6 ; [.1F71.0021.0002][.0000.0032.0002] # LATIN SMALL LETTER U WITH DIAERESIS AND MACRON -01D5 ; [.1F71.0021.0008][.0000.0032.0002] # LATIN CAPITAL LETTER U WITH DIAERESIS AND MACRON -01DA ; [.1F71.0021.0002][.0000.0028.0002] # LATIN SMALL LETTER U WITH DIAERESIS AND CARON -01D9 ; [.1F71.0021.0008][.0000.0028.0002] # LATIN CAPITAL LETTER U WITH DIAERESIS AND CARON -0171 ; [.1F71.0022.0002] # LATIN SMALL LETTER U WITH DOUBLE ACUTE -0075 030B ; [.1F71.0022.0002] # LATIN SMALL LETTER U WITH DOUBLE ACUTE -0170 ; [.1F71.0022.0008] # LATIN CAPITAL LETTER U WITH DOUBLE ACUTE -0055 030B ; [.1F71.0022.0008] # LATIN CAPITAL LETTER U WITH DOUBLE ACUTE -00E5 ; [.1FFC.0020.0002] # LATIN SMALL LETTER A WITH RING ABOVE -0061 030A ; [.1FFC.0020.0002] # LATIN SMALL LETTER A WITH RING ABOVE -00C5 ; [.1FFC.0020.0008] # LATIN CAPITAL LETTER A WITH RING ABOVE -0041 030A ; [.1FFC.0020.0008] # LATIN CAPITAL LETTER A WITH RING ABOVE -212B ; [.1FFC.0020.0008] # ANGSTROM SIGN -01FB ; [.1FFC.0020.0002][.0000.0024.0002] # LATIN SMALL LETTER A WITH RING ABOVE AND ACUTE -01FA ; [.1FFC.0020.0008][.0000.0024.0002] # LATIN CAPITAL LETTER A WITH RING ABOVE AND ACUTE -00E4 ; [.1FFD.0020.0002] # LATIN SMALL LETTER A WITH DIAERESIS -0061 0308 ; [.1FFD.0020.0002] # LATIN SMALL LETTER A WITH DIAERESIS -00C4 ; [.1FFD.0020.0008] # LATIN CAPITAL LETTER A WITH DIAERESIS -0041 0308 ; [.1FFD.0020.0008] # LATIN CAPITAL LETTER A WITH DIAERESIS -01DF ; [.1FFD.0020.0002][.0000.0032.0002] # LATIN SMALL LETTER A WITH DIAERESIS AND MACRON -01DE ; [.1FFD.0020.0008][.0000.0032.0002] # LATIN CAPITAL LETTER A WITH DIAERESIS AND MACRON -00E6 ; [.1FFD.0021.0002] # LATIN SMALL LETTER AE -1DD4 ; [.1FFD.0021.0002] # COMBINING LATIN SMALL LETTER AE -00C6 ; [.1FFD.0021.0008] # LATIN CAPITAL LETTER AE -1D2D ; [.1FFD.0021.0014] # MODIFIER LETTER CAPITAL AE -01FD ; [.1FFD.0021.0002][.0000.0024.0002] # LATIN SMALL LETTER AE WITH ACUTE -01FC ; [.1FFD.0021.0008][.0000.0024.0002] # LATIN CAPITAL LETTER AE WITH ACUTE -01E3 ; [.1FFD.0021.0002][.0000.0032.0002] # LATIN SMALL LETTER AE WITH MACRON -01E2 ; [.1FFD.0021.0008][.0000.0032.0002] # LATIN CAPITAL LETTER AE WITH MACRON -0119 ; [.1FFD.0022.0002] # LATIN SMALL LETTER E WITH OGONEK -0065 0328 ; [.1FFD.0022.0002] # LATIN SMALL LETTER E WITH OGONEK -0118 ; [.1FFD.0022.0008] # LATIN CAPITAL LETTER E WITH OGONEK -0045 0328 ; [.1FFD.0022.0008] # LATIN CAPITAL LETTER E WITH OGONEK -00F6 ; [.1FFE.0020.0002] # LATIN SMALL LETTER O WITH DIAERESIS -006F 0308 ; [.1FFE.0020.0002] # LATIN SMALL LETTER O WITH DIAERESIS -00D6 ; [.1FFE.0020.0008] # LATIN CAPITAL LETTER O WITH DIAERESIS -004F 0308 ; [.1FFE.0020.0008] # LATIN CAPITAL LETTER O WITH DIAERESIS -022B ; [.1FFE.0020.0002][.0000.0032.0002] # LATIN SMALL LETTER O WITH DIAERESIS AND MACRON -022A ; [.1FFE.0020.0008][.0000.0032.0002] # LATIN CAPITAL LETTER O WITH DIAERESIS AND MACRON -00F8 ; [.1FFE.0021.0002] # LATIN SMALL LETTER O WITH STROKE -006F 0338 ; [.1FFE.0021.0002] # LATIN SMALL LETTER O WITH STROKE -00D8 ; [.1FFE.0021.0008] # LATIN CAPITAL LETTER O WITH STROKE -004F 0338 ; [.1FFE.0021.0008] # LATIN CAPITAL LETTER O WITH STROKE -01FF ; [.1FFE.0021.0002][.0000.0024.0002] # LATIN SMALL LETTER O WITH STROKE AND ACUTE -01FE ; [.1FFE.0021.0008][.0000.0024.0002] # LATIN CAPITAL LETTER O WITH STROKE AND ACUTE -0151 ; [.1FFE.0022.0002] # LATIN SMALL LETTER O WITH DOUBLE ACUTE -006F 030B ; [.1FFE.0022.0002] # LATIN SMALL LETTER O WITH DOUBLE ACUTE -0150 ; [.1FFE.0022.0008] # LATIN CAPITAL LETTER O WITH DOUBLE ACUTE -004F 030B ; [.1FFE.0022.0008] # LATIN CAPITAL LETTER O WITH DOUBLE ACUTE -0153 ; [.1FFE.0023.0002] # LATIN SMALL LIGATURE OE -0152 ; [.1FFE.0023.0008] # LATIN CAPITAL LIGATURE OE -00F4 ; [.1FFE.0024.0002] # LATIN SMALL LETTER O WITH CIRCUMFLEX -006F 0302 ; [.1FFE.0024.0002] # LATIN SMALL LETTER O WITH CIRCUMFLEX -00D4 ; [.1FFE.0024.0008] # LATIN CAPITAL LETTER O WITH CIRCUMFLEX -004F 0302 ; [.1FFE.0024.0008] # LATIN CAPITAL LETTER O WITH CIRCUMFLEX -1ED3 ; [.1FFE.0024.0002][.0000.0025.0002] # LATIN SMALL LETTER O WITH CIRCUMFLEX AND GRAVE -1ED2 ; [.1FFE.0024.0008][.0000.0025.0002] # LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND GRAVE -1ED1 ; [.1FFE.0024.0002][.0000.0024.0002] # LATIN SMALL LETTER O WITH CIRCUMFLEX AND ACUTE -1ED0 ; [.1FFE.0024.0008][.0000.0024.0002] # LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND ACUTE -1ED7 ; [.1FFE.0024.0002][.0000.002D.0002] # LATIN SMALL LETTER O WITH CIRCUMFLEX AND TILDE -1ED6 ; [.1FFE.0024.0008][.0000.002D.0002] # LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND TILDE -1ED5 ; [.1FFE.0024.0002][.0000.003B.0002] # LATIN SMALL LETTER O WITH CIRCUMFLEX AND HOOK ABOVE -1ED4 ; [.1FFE.0024.0008][.0000.003B.0002] # LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND HOOK ABOVE -1ED9 ; [.1FFE.0024.0002][.0000.0042.0002] # LATIN SMALL LETTER O WITH CIRCUMFLEX AND DOT BELOW -1ED8 ; [.1FFE.0024.0008][.0000.0042.0002] # LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND DOT BELOW + locale_version => 1.31, + entry => <<'ENTRY', # for DUCET v13.0.0 +0111 ; [.1FEB.0021.0002] # LATIN SMALL LETTER D WITH STROKE +0064 0335 ; [.1FEB.0021.0002] # LATIN SMALL LETTER D WITH STROKE +0110 ; [.1FEB.0021.0008] # LATIN CAPITAL LETTER D WITH STROKE +0044 0335 ; [.1FEB.0021.0008] # LATIN CAPITAL LETTER D WITH STROKE +00F0 ; [.1FEB.0022.0002] # LATIN SMALL LETTER ETH +1DD9 ; [.1FEB.0022.0002] # COMBINING LATIN SMALL LETTER ETH +00D0 ; [.1FEB.0022.0008] # LATIN CAPITAL LETTER ETH +00FE ; [.21F7.0020.0003][.2075.0020.0003] # LATIN SMALL LETTER THORN +00DE ; [.21F7.0020.0009][.2075.0020.0009] # LATIN CAPITAL LETTER THORN +0077 ; [.2247.0021.0002] # LATIN SMALL LETTER W +0057 ; [.2247.0021.0008] # LATIN CAPITAL LETTER W +00FC ; [.2270.0021.0002] # LATIN SMALL LETTER U WITH DIAERESIS +0075 0308 ; [.2270.0021.0002] # LATIN SMALL LETTER U WITH DIAERESIS +00DC ; [.2270.0021.0008] # LATIN CAPITAL LETTER U WITH DIAERESIS +0055 0308 ; [.2270.0021.0008] # LATIN CAPITAL LETTER U WITH DIAERESIS +01DC ; [.2270.0021.0002][.0000.0025.0002] # LATIN SMALL LETTER U WITH DIAERESIS AND GRAVE +01DB ; [.2270.0021.0008][.0000.0025.0002] # LATIN CAPITAL LETTER U WITH DIAERESIS AND GRAVE +01D8 ; [.2270.0021.0002][.0000.0024.0002] # LATIN SMALL LETTER U WITH DIAERESIS AND ACUTE +01D7 ; [.2270.0021.0008][.0000.0024.0002] # LATIN CAPITAL LETTER U WITH DIAERESIS AND ACUTE +01D6 ; [.2270.0021.0002][.0000.0032.0002] # LATIN SMALL LETTER U WITH DIAERESIS AND MACRON +01D5 ; [.2270.0021.0008][.0000.0032.0002] # LATIN CAPITAL LETTER U WITH DIAERESIS AND MACRON +01DA ; [.2270.0021.0002][.0000.0028.0002] # LATIN SMALL LETTER U WITH DIAERESIS AND CARON +01D9 ; [.2270.0021.0008][.0000.0028.0002] # LATIN CAPITAL LETTER U WITH DIAERESIS AND CARON +0171 ; [.2270.0022.0002] # LATIN SMALL LETTER U WITH DOUBLE ACUTE +0075 030B ; [.2270.0022.0002] # LATIN SMALL LETTER U WITH DOUBLE ACUTE +0170 ; [.2270.0022.0008] # LATIN CAPITAL LETTER U WITH DOUBLE ACUTE +0055 030B ; [.2270.0022.0008] # LATIN CAPITAL LETTER U WITH DOUBLE ACUTE +00E5 ; [.22FB.0020.0002] # LATIN SMALL LETTER A WITH RING ABOVE +0061 030A ; [.22FB.0020.0002] # LATIN SMALL LETTER A WITH RING ABOVE +00C5 ; [.22FB.0020.0008] # LATIN CAPITAL LETTER A WITH RING ABOVE +0041 030A ; [.22FB.0020.0008] # LATIN CAPITAL LETTER A WITH RING ABOVE +212B ; [.22FB.0020.0008] # ANGSTROM SIGN +01FB ; [.22FB.0020.0002][.0000.0024.0002] # LATIN SMALL LETTER A WITH RING ABOVE AND ACUTE +01FA ; [.22FB.0020.0008][.0000.0024.0002] # LATIN CAPITAL LETTER A WITH RING ABOVE AND ACUTE +00E4 ; [.22FC.0020.0002] # LATIN SMALL LETTER A WITH DIAERESIS +0061 0308 ; [.22FC.0020.0002] # LATIN SMALL LETTER A WITH DIAERESIS +00C4 ; [.22FC.0020.0008] # LATIN CAPITAL LETTER A WITH DIAERESIS +0041 0308 ; [.22FC.0020.0008] # LATIN CAPITAL LETTER A WITH DIAERESIS +01DF ; [.22FC.0020.0002][.0000.0032.0002] # LATIN SMALL LETTER A WITH DIAERESIS AND MACRON +01DE ; [.22FC.0020.0008][.0000.0032.0002] # LATIN CAPITAL LETTER A WITH DIAERESIS AND MACRON +00E6 ; [.22FC.0021.0002] # LATIN SMALL LETTER AE +1DD4 ; [.22FC.0021.0002] # COMBINING LATIN SMALL LETTER AE +00C6 ; [.22FC.0021.0008] # LATIN CAPITAL LETTER AE +1D2D ; [.22FC.0021.0014] # MODIFIER LETTER CAPITAL AE +01FD ; [.22FC.0021.0002][.0000.0024.0002] # LATIN SMALL LETTER AE WITH ACUTE +01FC ; [.22FC.0021.0008][.0000.0024.0002] # LATIN CAPITAL LETTER AE WITH ACUTE +01E3 ; [.22FC.0021.0002][.0000.0032.0002] # LATIN SMALL LETTER AE WITH MACRON +01E2 ; [.22FC.0021.0008][.0000.0032.0002] # LATIN CAPITAL LETTER AE WITH MACRON +0119 ; [.22FC.0022.0002] # LATIN SMALL LETTER E WITH OGONEK +0065 0328 ; [.22FC.0022.0002] # LATIN SMALL LETTER E WITH OGONEK +0118 ; [.22FC.0022.0008] # LATIN CAPITAL LETTER E WITH OGONEK +0045 0328 ; [.22FC.0022.0008] # LATIN CAPITAL LETTER E WITH OGONEK +00F6 ; [.22FD.0020.0002] # LATIN SMALL LETTER O WITH DIAERESIS +006F 0308 ; [.22FD.0020.0002] # LATIN SMALL LETTER O WITH DIAERESIS +00D6 ; [.22FD.0020.0008] # LATIN CAPITAL LETTER O WITH DIAERESIS +004F 0308 ; [.22FD.0020.0008] # LATIN CAPITAL LETTER O WITH DIAERESIS +022B ; [.22FD.0020.0002][.0000.0032.0002] # LATIN SMALL LETTER O WITH DIAERESIS AND MACRON +022A ; [.22FD.0020.0008][.0000.0032.0002] # LATIN CAPITAL LETTER O WITH DIAERESIS AND MACRON +00F8 ; [.22FD.0021.0002] # LATIN SMALL LETTER O WITH STROKE +006F 0338 ; [.22FD.0021.0002] # LATIN SMALL LETTER O WITH STROKE +00D8 ; [.22FD.0021.0008] # LATIN CAPITAL LETTER O WITH STROKE +004F 0338 ; [.22FD.0021.0008] # LATIN CAPITAL LETTER O WITH STROKE +01FF ; [.22FD.0021.0002][.0000.0024.0002] # LATIN SMALL LETTER O WITH STROKE AND ACUTE +01FE ; [.22FD.0021.0008][.0000.0024.0002] # LATIN CAPITAL LETTER O WITH STROKE AND ACUTE +0151 ; [.22FD.0022.0002] # LATIN SMALL LETTER O WITH DOUBLE ACUTE +006F 030B ; [.22FD.0022.0002] # LATIN SMALL LETTER O WITH DOUBLE ACUTE +0150 ; [.22FD.0022.0008] # LATIN CAPITAL LETTER O WITH DOUBLE ACUTE +004F 030B ; [.22FD.0022.0008] # LATIN CAPITAL LETTER O WITH DOUBLE ACUTE +0153 ; [.22FD.0023.0002] # LATIN SMALL LIGATURE OE +0152 ; [.22FD.0023.0008] # LATIN CAPITAL LIGATURE OE +00F4 ; [.22FD.0024.0002] # LATIN SMALL LETTER O WITH CIRCUMFLEX +006F 0302 ; [.22FD.0024.0002] # LATIN SMALL LETTER O WITH CIRCUMFLEX +00D4 ; [.22FD.0024.0008] # LATIN CAPITAL LETTER O WITH CIRCUMFLEX +004F 0302 ; [.22FD.0024.0008] # LATIN CAPITAL LETTER O WITH CIRCUMFLEX +1ED3 ; [.22FD.0024.0002][.0000.0025.0002] # LATIN SMALL LETTER O WITH CIRCUMFLEX AND GRAVE +1ED2 ; [.22FD.0024.0008][.0000.0025.0002] # LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND GRAVE +1ED1 ; [.22FD.0024.0002][.0000.0024.0002] # LATIN SMALL LETTER O WITH CIRCUMFLEX AND ACUTE +1ED0 ; [.22FD.0024.0008][.0000.0024.0002] # LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND ACUTE +1ED7 ; [.22FD.0024.0002][.0000.002D.0002] # LATIN SMALL LETTER O WITH CIRCUMFLEX AND TILDE +1ED6 ; [.22FD.0024.0008][.0000.002D.0002] # LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND TILDE +1ED5 ; [.22FD.0024.0002][.0000.003B.0002] # LATIN SMALL LETTER O WITH CIRCUMFLEX AND HOOK ABOVE +1ED4 ; [.22FD.0024.0008][.0000.003B.0002] # LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND HOOK ABOVE +1ED9 ; [.22FD.0024.0002][.0000.0042.0002] # LATIN SMALL LETTER O WITH CIRCUMFLEX AND DOT BELOW +1ED8 ; [.22FD.0024.0008][.0000.0042.0002] # LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND DOT BELOW ENTRY }; diff --git a/gnu/usr.bin/perl/cpan/Unicode-Collate/Collate/Locale/sv_refo.pl b/gnu/usr.bin/perl/cpan/Unicode-Collate/Collate/Locale/sv_refo.pl index f277ba59e25..cecb12f0a30 100644 --- a/gnu/usr.bin/perl/cpan/Unicode-Collate/Collate/Locale/sv_refo.pl +++ b/gnu/usr.bin/perl/cpan/Unicode-Collate/Collate/Locale/sv_refo.pl @@ -1,87 +1,87 @@ +{ - locale_version => 1.27, - entry => <<'ENTRY', # for DUCET v10.0.0 -0111 ; [.1CF5.0021.0002] # LATIN SMALL LETTER D WITH STROKE -0064 0335 ; [.1CF5.0021.0002] # LATIN SMALL LETTER D WITH STROKE -0110 ; [.1CF5.0021.0008] # LATIN CAPITAL LETTER D WITH STROKE -0044 0335 ; [.1CF5.0021.0008] # LATIN CAPITAL LETTER D WITH STROKE -00F0 ; [.1CF5.0022.0002] # LATIN SMALL LETTER ETH -1DD9 ; [.1CF5.0022.0002] # COMBINING LATIN SMALL LETTER ETH -00D0 ; [.1CF5.0022.0008] # LATIN CAPITAL LETTER ETH -00FE ; [.1EFB.0020.0003][.1D7E.0020.0003] # LATIN SMALL LETTER THORN -00DE ; [.1EFB.0020.0009][.1D7E.0020.0009] # LATIN CAPITAL LETTER THORN -00FC ; [.1F71.0021.0002] # LATIN SMALL LETTER U WITH DIAERESIS -0075 0308 ; [.1F71.0021.0002] # LATIN SMALL LETTER U WITH DIAERESIS -00DC ; [.1F71.0021.0008] # LATIN CAPITAL LETTER U WITH DIAERESIS -0055 0308 ; [.1F71.0021.0008] # LATIN CAPITAL LETTER U WITH DIAERESIS -01DC ; [.1F71.0021.0002][.0000.0025.0002] # LATIN SMALL LETTER U WITH DIAERESIS AND GRAVE -01DB ; [.1F71.0021.0008][.0000.0025.0002] # LATIN CAPITAL LETTER U WITH DIAERESIS AND GRAVE -01D8 ; [.1F71.0021.0002][.0000.0024.0002] # LATIN SMALL LETTER U WITH DIAERESIS AND ACUTE -01D7 ; [.1F71.0021.0008][.0000.0024.0002] # LATIN CAPITAL LETTER U WITH DIAERESIS AND ACUTE -01D6 ; [.1F71.0021.0002][.0000.0032.0002] # LATIN SMALL LETTER U WITH DIAERESIS AND MACRON -01D5 ; [.1F71.0021.0008][.0000.0032.0002] # LATIN CAPITAL LETTER U WITH DIAERESIS AND MACRON -01DA ; [.1F71.0021.0002][.0000.0028.0002] # LATIN SMALL LETTER U WITH DIAERESIS AND CARON -01D9 ; [.1F71.0021.0008][.0000.0028.0002] # LATIN CAPITAL LETTER U WITH DIAERESIS AND CARON -0171 ; [.1F71.0022.0002] # LATIN SMALL LETTER U WITH DOUBLE ACUTE -0075 030B ; [.1F71.0022.0002] # LATIN SMALL LETTER U WITH DOUBLE ACUTE -0170 ; [.1F71.0022.0008] # LATIN CAPITAL LETTER U WITH DOUBLE ACUTE -0055 030B ; [.1F71.0022.0008] # LATIN CAPITAL LETTER U WITH DOUBLE ACUTE -00E5 ; [.1FFC.0020.0002] # LATIN SMALL LETTER A WITH RING ABOVE -0061 030A ; [.1FFC.0020.0002] # LATIN SMALL LETTER A WITH RING ABOVE -00C5 ; [.1FFC.0020.0008] # LATIN CAPITAL LETTER A WITH RING ABOVE -0041 030A ; [.1FFC.0020.0008] # LATIN CAPITAL LETTER A WITH RING ABOVE -212B ; [.1FFC.0020.0008] # ANGSTROM SIGN -01FB ; [.1FFC.0020.0002][.0000.0024.0002] # LATIN SMALL LETTER A WITH RING ABOVE AND ACUTE -01FA ; [.1FFC.0020.0008][.0000.0024.0002] # LATIN CAPITAL LETTER A WITH RING ABOVE AND ACUTE -00E4 ; [.1FFD.0020.0002] # LATIN SMALL LETTER A WITH DIAERESIS -0061 0308 ; [.1FFD.0020.0002] # LATIN SMALL LETTER A WITH DIAERESIS -00C4 ; [.1FFD.0020.0008] # LATIN CAPITAL LETTER A WITH DIAERESIS -0041 0308 ; [.1FFD.0020.0008] # LATIN CAPITAL LETTER A WITH DIAERESIS -01DF ; [.1FFD.0020.0002][.0000.0032.0002] # LATIN SMALL LETTER A WITH DIAERESIS AND MACRON -01DE ; [.1FFD.0020.0008][.0000.0032.0002] # LATIN CAPITAL LETTER A WITH DIAERESIS AND MACRON -00E6 ; [.1FFD.0021.0002] # LATIN SMALL LETTER AE -1DD4 ; [.1FFD.0021.0002] # COMBINING LATIN SMALL LETTER AE -00C6 ; [.1FFD.0021.0008] # LATIN CAPITAL LETTER AE -1D2D ; [.1FFD.0021.0014] # MODIFIER LETTER CAPITAL AE -01FD ; [.1FFD.0021.0002][.0000.0024.0002] # LATIN SMALL LETTER AE WITH ACUTE -01FC ; [.1FFD.0021.0008][.0000.0024.0002] # LATIN CAPITAL LETTER AE WITH ACUTE -01E3 ; [.1FFD.0021.0002][.0000.0032.0002] # LATIN SMALL LETTER AE WITH MACRON -01E2 ; [.1FFD.0021.0008][.0000.0032.0002] # LATIN CAPITAL LETTER AE WITH MACRON -0119 ; [.1FFD.0022.0002] # LATIN SMALL LETTER E WITH OGONEK -0065 0328 ; [.1FFD.0022.0002] # LATIN SMALL LETTER E WITH OGONEK -0118 ; [.1FFD.0022.0008] # LATIN CAPITAL LETTER E WITH OGONEK -0045 0328 ; [.1FFD.0022.0008] # LATIN CAPITAL LETTER E WITH OGONEK -00F6 ; [.1FFE.0020.0002] # LATIN SMALL LETTER O WITH DIAERESIS -006F 0308 ; [.1FFE.0020.0002] # LATIN SMALL LETTER O WITH DIAERESIS -00D6 ; [.1FFE.0020.0008] # LATIN CAPITAL LETTER O WITH DIAERESIS -004F 0308 ; [.1FFE.0020.0008] # LATIN CAPITAL LETTER O WITH DIAERESIS -022B ; [.1FFE.0020.0002][.0000.0032.0002] # LATIN SMALL LETTER O WITH DIAERESIS AND MACRON -022A ; [.1FFE.0020.0008][.0000.0032.0002] # LATIN CAPITAL LETTER O WITH DIAERESIS AND MACRON -00F8 ; [.1FFE.0021.0002] # LATIN SMALL LETTER O WITH STROKE -006F 0338 ; [.1FFE.0021.0002] # LATIN SMALL LETTER O WITH STROKE -00D8 ; [.1FFE.0021.0008] # LATIN CAPITAL LETTER O WITH STROKE -004F 0338 ; [.1FFE.0021.0008] # LATIN CAPITAL LETTER O WITH STROKE -01FF ; [.1FFE.0021.0002][.0000.0024.0002] # LATIN SMALL LETTER O WITH STROKE AND ACUTE -01FE ; [.1FFE.0021.0008][.0000.0024.0002] # LATIN CAPITAL LETTER O WITH STROKE AND ACUTE -0151 ; [.1FFE.0022.0002] # LATIN SMALL LETTER O WITH DOUBLE ACUTE -006F 030B ; [.1FFE.0022.0002] # LATIN SMALL LETTER O WITH DOUBLE ACUTE -0150 ; [.1FFE.0022.0008] # LATIN CAPITAL LETTER O WITH DOUBLE ACUTE -004F 030B ; [.1FFE.0022.0008] # LATIN CAPITAL LETTER O WITH DOUBLE ACUTE -0153 ; [.1FFE.0023.0002] # LATIN SMALL LIGATURE OE -0152 ; [.1FFE.0023.0008] # LATIN CAPITAL LIGATURE OE -00F4 ; [.1FFE.0024.0002] # LATIN SMALL LETTER O WITH CIRCUMFLEX -006F 0302 ; [.1FFE.0024.0002] # LATIN SMALL LETTER O WITH CIRCUMFLEX -00D4 ; [.1FFE.0024.0008] # LATIN CAPITAL LETTER O WITH CIRCUMFLEX -004F 0302 ; [.1FFE.0024.0008] # LATIN CAPITAL LETTER O WITH CIRCUMFLEX -1ED3 ; [.1FFE.0024.0002][.0000.0025.0002] # LATIN SMALL LETTER O WITH CIRCUMFLEX AND GRAVE -1ED2 ; [.1FFE.0024.0008][.0000.0025.0002] # LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND GRAVE -1ED1 ; [.1FFE.0024.0002][.0000.0024.0002] # LATIN SMALL LETTER O WITH CIRCUMFLEX AND ACUTE -1ED0 ; [.1FFE.0024.0008][.0000.0024.0002] # LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND ACUTE -1ED7 ; [.1FFE.0024.0002][.0000.002D.0002] # LATIN SMALL LETTER O WITH CIRCUMFLEX AND TILDE -1ED6 ; [.1FFE.0024.0008][.0000.002D.0002] # LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND TILDE -1ED5 ; [.1FFE.0024.0002][.0000.003B.0002] # LATIN SMALL LETTER O WITH CIRCUMFLEX AND HOOK ABOVE -1ED4 ; [.1FFE.0024.0008][.0000.003B.0002] # LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND HOOK ABOVE -1ED9 ; [.1FFE.0024.0002][.0000.0042.0002] # LATIN SMALL LETTER O WITH CIRCUMFLEX AND DOT BELOW -1ED8 ; [.1FFE.0024.0008][.0000.0042.0002] # LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND DOT BELOW + locale_version => 1.31, + entry => <<'ENTRY', # for DUCET v13.0.0 +0111 ; [.1FEB.0021.0002] # LATIN SMALL LETTER D WITH STROKE +0064 0335 ; [.1FEB.0021.0002] # LATIN SMALL LETTER D WITH STROKE +0110 ; [.1FEB.0021.0008] # LATIN CAPITAL LETTER D WITH STROKE +0044 0335 ; [.1FEB.0021.0008] # LATIN CAPITAL LETTER D WITH STROKE +00F0 ; [.1FEB.0022.0002] # LATIN SMALL LETTER ETH +1DD9 ; [.1FEB.0022.0002] # COMBINING LATIN SMALL LETTER ETH +00D0 ; [.1FEB.0022.0008] # LATIN CAPITAL LETTER ETH +00FE ; [.21F7.0020.0003][.2075.0020.0003] # LATIN SMALL LETTER THORN +00DE ; [.21F7.0020.0009][.2075.0020.0009] # LATIN CAPITAL LETTER THORN +00FC ; [.2270.0021.0002] # LATIN SMALL LETTER U WITH DIAERESIS +0075 0308 ; [.2270.0021.0002] # LATIN SMALL LETTER U WITH DIAERESIS +00DC ; [.2270.0021.0008] # LATIN CAPITAL LETTER U WITH DIAERESIS +0055 0308 ; [.2270.0021.0008] # LATIN CAPITAL LETTER U WITH DIAERESIS +01DC ; [.2270.0021.0002][.0000.0025.0002] # LATIN SMALL LETTER U WITH DIAERESIS AND GRAVE +01DB ; [.2270.0021.0008][.0000.0025.0002] # LATIN CAPITAL LETTER U WITH DIAERESIS AND GRAVE +01D8 ; [.2270.0021.0002][.0000.0024.0002] # LATIN SMALL LETTER U WITH DIAERESIS AND ACUTE +01D7 ; [.2270.0021.0008][.0000.0024.0002] # LATIN CAPITAL LETTER U WITH DIAERESIS AND ACUTE +01D6 ; [.2270.0021.0002][.0000.0032.0002] # LATIN SMALL LETTER U WITH DIAERESIS AND MACRON +01D5 ; [.2270.0021.0008][.0000.0032.0002] # LATIN CAPITAL LETTER U WITH DIAERESIS AND MACRON +01DA ; [.2270.0021.0002][.0000.0028.0002] # LATIN SMALL LETTER U WITH DIAERESIS AND CARON +01D9 ; [.2270.0021.0008][.0000.0028.0002] # LATIN CAPITAL LETTER U WITH DIAERESIS AND CARON +0171 ; [.2270.0022.0002] # LATIN SMALL LETTER U WITH DOUBLE ACUTE +0075 030B ; [.2270.0022.0002] # LATIN SMALL LETTER U WITH DOUBLE ACUTE +0170 ; [.2270.0022.0008] # LATIN CAPITAL LETTER U WITH DOUBLE ACUTE +0055 030B ; [.2270.0022.0008] # LATIN CAPITAL LETTER U WITH DOUBLE ACUTE +00E5 ; [.22FB.0020.0002] # LATIN SMALL LETTER A WITH RING ABOVE +0061 030A ; [.22FB.0020.0002] # LATIN SMALL LETTER A WITH RING ABOVE +00C5 ; [.22FB.0020.0008] # LATIN CAPITAL LETTER A WITH RING ABOVE +0041 030A ; [.22FB.0020.0008] # LATIN CAPITAL LETTER A WITH RING ABOVE +212B ; [.22FB.0020.0008] # ANGSTROM SIGN +01FB ; [.22FB.0020.0002][.0000.0024.0002] # LATIN SMALL LETTER A WITH RING ABOVE AND ACUTE +01FA ; [.22FB.0020.0008][.0000.0024.0002] # LATIN CAPITAL LETTER A WITH RING ABOVE AND ACUTE +00E4 ; [.22FC.0020.0002] # LATIN SMALL LETTER A WITH DIAERESIS +0061 0308 ; [.22FC.0020.0002] # LATIN SMALL LETTER A WITH DIAERESIS +00C4 ; [.22FC.0020.0008] # LATIN CAPITAL LETTER A WITH DIAERESIS +0041 0308 ; [.22FC.0020.0008] # LATIN CAPITAL LETTER A WITH DIAERESIS +01DF ; [.22FC.0020.0002][.0000.0032.0002] # LATIN SMALL LETTER A WITH DIAERESIS AND MACRON +01DE ; [.22FC.0020.0008][.0000.0032.0002] # LATIN CAPITAL LETTER A WITH DIAERESIS AND MACRON +00E6 ; [.22FC.0021.0002] # LATIN SMALL LETTER AE +1DD4 ; [.22FC.0021.0002] # COMBINING LATIN SMALL LETTER AE +00C6 ; [.22FC.0021.0008] # LATIN CAPITAL LETTER AE +1D2D ; [.22FC.0021.0014] # MODIFIER LETTER CAPITAL AE +01FD ; [.22FC.0021.0002][.0000.0024.0002] # LATIN SMALL LETTER AE WITH ACUTE +01FC ; [.22FC.0021.0008][.0000.0024.0002] # LATIN CAPITAL LETTER AE WITH ACUTE +01E3 ; [.22FC.0021.0002][.0000.0032.0002] # LATIN SMALL LETTER AE WITH MACRON +01E2 ; [.22FC.0021.0008][.0000.0032.0002] # LATIN CAPITAL LETTER AE WITH MACRON +0119 ; [.22FC.0022.0002] # LATIN SMALL LETTER E WITH OGONEK +0065 0328 ; [.22FC.0022.0002] # LATIN SMALL LETTER E WITH OGONEK +0118 ; [.22FC.0022.0008] # LATIN CAPITAL LETTER E WITH OGONEK +0045 0328 ; [.22FC.0022.0008] # LATIN CAPITAL LETTER E WITH OGONEK +00F6 ; [.22FD.0020.0002] # LATIN SMALL LETTER O WITH DIAERESIS +006F 0308 ; [.22FD.0020.0002] # LATIN SMALL LETTER O WITH DIAERESIS +00D6 ; [.22FD.0020.0008] # LATIN CAPITAL LETTER O WITH DIAERESIS +004F 0308 ; [.22FD.0020.0008] # LATIN CAPITAL LETTER O WITH DIAERESIS +022B ; [.22FD.0020.0002][.0000.0032.0002] # LATIN SMALL LETTER O WITH DIAERESIS AND MACRON +022A ; [.22FD.0020.0008][.0000.0032.0002] # LATIN CAPITAL LETTER O WITH DIAERESIS AND MACRON +00F8 ; [.22FD.0021.0002] # LATIN SMALL LETTER O WITH STROKE +006F 0338 ; [.22FD.0021.0002] # LATIN SMALL LETTER O WITH STROKE +00D8 ; [.22FD.0021.0008] # LATIN CAPITAL LETTER O WITH STROKE +004F 0338 ; [.22FD.0021.0008] # LATIN CAPITAL LETTER O WITH STROKE +01FF ; [.22FD.0021.0002][.0000.0024.0002] # LATIN SMALL LETTER O WITH STROKE AND ACUTE +01FE ; [.22FD.0021.0008][.0000.0024.0002] # LATIN CAPITAL LETTER O WITH STROKE AND ACUTE +0151 ; [.22FD.0022.0002] # LATIN SMALL LETTER O WITH DOUBLE ACUTE +006F 030B ; [.22FD.0022.0002] # LATIN SMALL LETTER O WITH DOUBLE ACUTE +0150 ; [.22FD.0022.0008] # LATIN CAPITAL LETTER O WITH DOUBLE ACUTE +004F 030B ; [.22FD.0022.0008] # LATIN CAPITAL LETTER O WITH DOUBLE ACUTE +0153 ; [.22FD.0023.0002] # LATIN SMALL LIGATURE OE +0152 ; [.22FD.0023.0008] # LATIN CAPITAL LIGATURE OE +00F4 ; [.22FD.0024.0002] # LATIN SMALL LETTER O WITH CIRCUMFLEX +006F 0302 ; [.22FD.0024.0002] # LATIN SMALL LETTER O WITH CIRCUMFLEX +00D4 ; [.22FD.0024.0008] # LATIN CAPITAL LETTER O WITH CIRCUMFLEX +004F 0302 ; [.22FD.0024.0008] # LATIN CAPITAL LETTER O WITH CIRCUMFLEX +1ED3 ; [.22FD.0024.0002][.0000.0025.0002] # LATIN SMALL LETTER O WITH CIRCUMFLEX AND GRAVE +1ED2 ; [.22FD.0024.0008][.0000.0025.0002] # LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND GRAVE +1ED1 ; [.22FD.0024.0002][.0000.0024.0002] # LATIN SMALL LETTER O WITH CIRCUMFLEX AND ACUTE +1ED0 ; [.22FD.0024.0008][.0000.0024.0002] # LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND ACUTE +1ED7 ; [.22FD.0024.0002][.0000.002D.0002] # LATIN SMALL LETTER O WITH CIRCUMFLEX AND TILDE +1ED6 ; [.22FD.0024.0008][.0000.002D.0002] # LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND TILDE +1ED5 ; [.22FD.0024.0002][.0000.003B.0002] # LATIN SMALL LETTER O WITH CIRCUMFLEX AND HOOK ABOVE +1ED4 ; [.22FD.0024.0008][.0000.003B.0002] # LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND HOOK ABOVE +1ED9 ; [.22FD.0024.0002][.0000.0042.0002] # LATIN SMALL LETTER O WITH CIRCUMFLEX AND DOT BELOW +1ED8 ; [.22FD.0024.0008][.0000.0042.0002] # LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND DOT BELOW ENTRY }; diff --git a/gnu/usr.bin/perl/cpan/Unicode-Collate/Collate/Locale/ta.pl b/gnu/usr.bin/perl/cpan/Unicode-Collate/Collate/Locale/ta.pl index 5503c07a6a8..e719e95d526 100644 --- a/gnu/usr.bin/perl/cpan/Unicode-Collate/Collate/Locale/ta.pl +++ b/gnu/usr.bin/perl/cpan/Unicode-Collate/Collate/Locale/ta.pl @@ -1,55 +1,55 @@ +{ - locale_version => 1.27, - entry => <<'ENTRY', # for DUCET v10.0.0 -0B82 ; [.2840.0020.0002][.FFF0.0000.0000] # TAMIL SIGN ANUSVARA -0B83 ; [.2840.0020.0002][.FFF1.0000.0000] # TAMIL SIGN VISARGA -0B95 0BCD 0BB7 0BCD ; [.2857.0020.0002][.FFF2.0000.0000] # -0B95 0BCD 0BB7 ; [.2857.0020.0002][.FFF3.0000.0000] # -0B95 0BCD ; [.2841.0020.0002][.FFF0.0000.0000] # -0B95 ; [.2841.0020.0002][.FFF1.0000.0000] # TAMIL LETTER KA -0B99 0BCD ; [.2842.0020.0002][.FFF0.0000.0000] # -0B99 ; [.2842.0020.0002][.FFF1.0000.0000] # TAMIL LETTER NGA -0B9A 0BCD ; [.2843.0020.0002][.FFF0.0000.0000] # -0B9A ; [.2843.0020.0002][.FFF1.0000.0000] # TAMIL LETTER CA -0B9E 0BCD ; [.2844.0020.0002][.FFF0.0000.0000] # -0B9E ; [.2844.0020.0002][.FFF1.0000.0000] # TAMIL LETTER NYA -0B9F 0BCD ; [.2845.0020.0002][.FFF0.0000.0000] # -0B9F ; [.2845.0020.0002][.FFF1.0000.0000] # TAMIL LETTER TTA -0BA3 0BCD ; [.2846.0020.0002][.FFF0.0000.0000] # -0BA3 ; [.2846.0020.0002][.FFF1.0000.0000] # TAMIL LETTER NNA -0BA4 0BCD ; [.2847.0020.0002][.FFF0.0000.0000] # -0BA4 ; [.2847.0020.0002][.FFF1.0000.0000] # TAMIL LETTER TA -0BA8 0BCD ; [.2848.0020.0002][.FFF0.0000.0000] # -0BA8 ; [.2848.0020.0002][.FFF1.0000.0000] # TAMIL LETTER NA -0BAA 0BCD ; [.2849.0020.0002][.FFF0.0000.0000] # -0BAA ; [.2849.0020.0002][.FFF1.0000.0000] # TAMIL LETTER PA -0BAE 0BCD ; [.284A.0020.0002][.FFF0.0000.0000] # -0BAE ; [.284A.0020.0002][.FFF1.0000.0000] # TAMIL LETTER MA -0BAF 0BCD ; [.284B.0020.0002][.FFF0.0000.0000] # -0BAF ; [.284B.0020.0002][.FFF1.0000.0000] # TAMIL LETTER YA -0BB0 0BCD ; [.284C.0020.0002][.FFF0.0000.0000] # -0BB0 ; [.284C.0020.0002][.FFF1.0000.0000] # TAMIL LETTER RA -0BB2 0BCD ; [.284D.0020.0002][.FFF0.0000.0000] # -0BB2 ; [.284D.0020.0002][.FFF1.0000.0000] # TAMIL LETTER LA -0BB5 0BCD ; [.284E.0020.0002][.FFF0.0000.0000] # -0BB5 ; [.284E.0020.0002][.FFF1.0000.0000] # TAMIL LETTER VA -0BB4 0BCD ; [.284F.0020.0002][.FFF0.0000.0000] # -0BB4 ; [.284F.0020.0002][.FFF1.0000.0000] # TAMIL LETTER LLLA -0BB3 0BCD ; [.2850.0020.0002][.FFF0.0000.0000] # -0BB3 ; [.2850.0020.0002][.FFF1.0000.0000] # TAMIL LETTER LLA -0BB1 0BCD ; [.2851.0020.0002][.FFF0.0000.0000] # -0BB1 ; [.2851.0020.0002][.FFF1.0000.0000] # TAMIL LETTER RRA -0BA9 0BCD ; [.2852.0020.0002][.FFF0.0000.0000] # -0BA9 ; [.2852.0020.0002][.FFF1.0000.0000] # TAMIL LETTER NNNA -0B9C 0BCD ; [.2853.0020.0002][.FFF0.0000.0000] # -0B9C ; [.2853.0020.0002][.FFF1.0000.0000] # TAMIL LETTER JA -0BB6 0BCD ; [.2854.0020.0002][.FFF0.0000.0000] # -0BB6 ; [.2854.0020.0002][.FFF1.0000.0000] # TAMIL LETTER SHA -0BB7 0BCD ; [.2855.0020.0002][.FFF0.0000.0000] # -0BB7 ; [.2855.0020.0002][.FFF1.0000.0000] # TAMIL LETTER SSA -0BB8 0BCD ; [.2856.0020.0002][.FFF0.0000.0000] # -0BB8 ; [.2856.0020.0002][.FFF1.0000.0000] # TAMIL LETTER SA -0BB9 0BCD ; [.2857.0020.0002][.FFF0.0000.0000] # -0BB9 ; [.2857.0020.0002][.FFF1.0000.0000] # TAMIL LETTER HA + locale_version => 1.31, + entry => <<'ENTRY', # for DUCET v13.0.0 +0B82 ; [.2B4D.0020.0002][.FFF0.0000.0000] # TAMIL SIGN ANUSVARA +0B83 ; [.2B4D.0020.0002][.FFF1.0000.0000] # TAMIL SIGN VISARGA +0B95 0BCD 0BB7 0BCD ; [.2B64.0020.0002][.FFF2.0000.0000] # +0B95 0BCD 0BB7 ; [.2B64.0020.0002][.FFF3.0000.0000] # +0B95 0BCD ; [.2B4E.0020.0002][.FFF0.0000.0000] # +0B95 ; [.2B4E.0020.0002][.FFF1.0000.0000] # TAMIL LETTER KA +0B99 0BCD ; [.2B4F.0020.0002][.FFF0.0000.0000] # +0B99 ; [.2B4F.0020.0002][.FFF1.0000.0000] # TAMIL LETTER NGA +0B9A 0BCD ; [.2B50.0020.0002][.FFF0.0000.0000] # +0B9A ; [.2B50.0020.0002][.FFF1.0000.0000] # TAMIL LETTER CA +0B9E 0BCD ; [.2B51.0020.0002][.FFF0.0000.0000] # +0B9E ; [.2B51.0020.0002][.FFF1.0000.0000] # TAMIL LETTER NYA +0B9F 0BCD ; [.2B52.0020.0002][.FFF0.0000.0000] # +0B9F ; [.2B52.0020.0002][.FFF1.0000.0000] # TAMIL LETTER TTA +0BA3 0BCD ; [.2B53.0020.0002][.FFF0.0000.0000] # +0BA3 ; [.2B53.0020.0002][.FFF1.0000.0000] # TAMIL LETTER NNA +0BA4 0BCD ; [.2B54.0020.0002][.FFF0.0000.0000] # +0BA4 ; [.2B54.0020.0002][.FFF1.0000.0000] # TAMIL LETTER TA +0BA8 0BCD ; [.2B55.0020.0002][.FFF0.0000.0000] # +0BA8 ; [.2B55.0020.0002][.FFF1.0000.0000] # TAMIL LETTER NA +0BAA 0BCD ; [.2B56.0020.0002][.FFF0.0000.0000] # +0BAA ; [.2B56.0020.0002][.FFF1.0000.0000] # TAMIL LETTER PA +0BAE 0BCD ; [.2B57.0020.0002][.FFF0.0000.0000] # +0BAE ; [.2B57.0020.0002][.FFF1.0000.0000] # TAMIL LETTER MA +0BAF 0BCD ; [.2B58.0020.0002][.FFF0.0000.0000] # +0BAF ; [.2B58.0020.0002][.FFF1.0000.0000] # TAMIL LETTER YA +0BB0 0BCD ; [.2B59.0020.0002][.FFF0.0000.0000] # +0BB0 ; [.2B59.0020.0002][.FFF1.0000.0000] # TAMIL LETTER RA +0BB2 0BCD ; [.2B5A.0020.0002][.FFF0.0000.0000] # +0BB2 ; [.2B5A.0020.0002][.FFF1.0000.0000] # TAMIL LETTER LA +0BB5 0BCD ; [.2B5B.0020.0002][.FFF0.0000.0000] # +0BB5 ; [.2B5B.0020.0002][.FFF1.0000.0000] # TAMIL LETTER VA +0BB4 0BCD ; [.2B5C.0020.0002][.FFF0.0000.0000] # +0BB4 ; [.2B5C.0020.0002][.FFF1.0000.0000] # TAMIL LETTER LLLA +0BB3 0BCD ; [.2B5D.0020.0002][.FFF0.0000.0000] # +0BB3 ; [.2B5D.0020.0002][.FFF1.0000.0000] # TAMIL LETTER LLA +0BB1 0BCD ; [.2B5E.0020.0002][.FFF0.0000.0000] # +0BB1 ; [.2B5E.0020.0002][.FFF1.0000.0000] # TAMIL LETTER RRA +0BA9 0BCD ; [.2B5F.0020.0002][.FFF0.0000.0000] # +0BA9 ; [.2B5F.0020.0002][.FFF1.0000.0000] # TAMIL LETTER NNNA +0B9C 0BCD ; [.2B60.0020.0002][.FFF0.0000.0000] # +0B9C ; [.2B60.0020.0002][.FFF1.0000.0000] # TAMIL LETTER JA +0BB6 0BCD ; [.2B61.0020.0002][.FFF0.0000.0000] # +0BB6 ; [.2B61.0020.0002][.FFF1.0000.0000] # TAMIL LETTER SHA +0BB7 0BCD ; [.2B62.0020.0002][.FFF0.0000.0000] # +0BB7 ; [.2B62.0020.0002][.FFF1.0000.0000] # TAMIL LETTER SSA +0BB8 0BCD ; [.2B63.0020.0002][.FFF0.0000.0000] # +0BB8 ; [.2B63.0020.0002][.FFF1.0000.0000] # TAMIL LETTER SA +0BB9 0BCD ; [.2B64.0020.0002][.FFF0.0000.0000] # +0BB9 ; [.2B64.0020.0002][.FFF1.0000.0000] # TAMIL LETTER HA ENTRY }; diff --git a/gnu/usr.bin/perl/cpan/Unicode-Collate/Collate/Locale/te.pl b/gnu/usr.bin/perl/cpan/Unicode-Collate/Collate/Locale/te.pl index c452a98e22e..dbba1fe4650 100644 --- a/gnu/usr.bin/perl/cpan/Unicode-Collate/Collate/Locale/te.pl +++ b/gnu/usr.bin/perl/cpan/Unicode-Collate/Collate/Locale/te.pl @@ -1,9 +1,9 @@ +{ - locale_version => 1.27, - entry => <<'ENTRY', # for DUCET v10.0.0 -0C01 ; [.2874.0020.0002][.FFF1.0000.0000] # TELUGU SIGN CANDRABINDU -0C02 ; [.2874.0020.0002][.FFF2.0000.0000] # TELUGU SIGN ANUSVARA -0C03 ; [.2874.0020.0002][.FFF3.0000.0000] # TELUGU SIGN VISARGA -0C14 ; [.2874.0020.0002][.FFF0.0000.0000] # TELUGU LETTER AU + locale_version => 1.31, + entry => <<'ENTRY', # for DUCET v13.0.0 +0C01 ; [.2B81.0020.0002][.FFF1.0000.0000] # TELUGU SIGN CANDRABINDU +0C02 ; [.2B81.0020.0002][.FFF2.0000.0000] # TELUGU SIGN ANUSVARA +0C03 ; [.2B81.0020.0002][.FFF3.0000.0000] # TELUGU SIGN VISARGA +0C14 ; [.2B81.0020.0002][.FFF0.0000.0000] # TELUGU LETTER AU ENTRY }; diff --git a/gnu/usr.bin/perl/cpan/Unicode-Collate/Collate/Locale/th.pl b/gnu/usr.bin/perl/cpan/Unicode-Collate/Collate/Locale/th.pl index cb6d5b53c12..ff8ebbf9369 100644 --- a/gnu/usr.bin/perl/cpan/Unicode-Collate/Collate/Locale/th.pl +++ b/gnu/usr.bin/perl/cpan/Unicode-Collate/Collate/Locale/th.pl @@ -1,23 +1,23 @@ +{ - locale_version => 1.27, + locale_version => 1.31, variable => 'shifted', alternate => 'shifted', - entry => <<'ENTRY', # for DUCET v10.0.0 -0E2F ; [*03F5.0020.0002][*FFF0.0000.0000] # THAI CHARACTER PAIYANNOI -0E5A ; [*03F5.0020.0002][*FFF1.0000.0000] # THAI CHARACTER ANGKHANKHU -0E46 ; [*03F6.0020.0002][*FFF1.0000.0000] # THAI CHARACTER MAIYAMOK -0E5B ; [*03F6.0020.0002][*FFF0.0000.0000] # THAI CHARACTER KHOMUT -0E4C ; [.0000.00D3.0002] # THAI CHARACTER THANTHAKHAT -0E47 ; [.0000.00D4.0002] # THAI CHARACTER MAITAIKHU -0E48 ; [.0000.00D5.0002] # THAI CHARACTER MAI EK -0E49 ; [.0000.00D6.0002] # THAI CHARACTER MAI THO -0E4A ; [.0000.00D7.0002] # THAI CHARACTER MAI TRI -0E4B ; [.0000.00D8.0002] # THAI CHARACTER MAI CHATTAWA -0E4D ; [.2E4E.0020.0002] # THAI CHARACTER NIKHAHIT -0E45 ; [.2E51.0020.0003] # THAI CHARACTER LAKKHANGYAO -0E4D 0E32 ; [.2E51.0020.0002][.2E4E.0020.0003] # THAI CHARACTER SARA AM -0E33 ; [.2E51.0020.0002][.2E4E.0020.0004] # THAI CHARACTER SARA AM -0E45 0E4D ; [.2E4E.0020.0002][.2E51.0020.0004] # -0E3A ; [.2E5F.0020.0002] # THAI CHARACTER PHINTHU + entry => <<'ENTRY', # for DUCET v13.0.0 +0E2F ; [*040C.0020.0002][*FFF0.0000.0000] # THAI CHARACTER PAIYANNOI +0E5A ; [*040C.0020.0002][*FFF1.0000.0000] # THAI CHARACTER ANGKHANKHU +0E46 ; [*040D.0020.0002][*FFF1.0000.0000] # THAI CHARACTER MAIYAMOK +0E5B ; [*040D.0020.0002][*FFF0.0000.0000] # THAI CHARACTER KHOMUT +0E4C ; [.0000.00D4.0002] # THAI CHARACTER THANTHAKHAT +0E47 ; [.0000.00D5.0002] # THAI CHARACTER MAITAIKHU +0E48 ; [.0000.00D6.0002] # THAI CHARACTER MAI EK +0E49 ; [.0000.00D7.0002] # THAI CHARACTER MAI THO +0E4A ; [.0000.00D8.0002] # THAI CHARACTER MAI TRI +0E4B ; [.0000.00D9.0002] # THAI CHARACTER MAI CHATTAWA +0E4D ; [.3245.0020.0002] # THAI CHARACTER NIKHAHIT +0E45 ; [.3248.0020.0003] # THAI CHARACTER LAKKHANGYAO +0E4D 0E32 ; [.3248.0020.0002][.3245.0020.0003] # THAI CHARACTER SARA AM +0E33 ; [.3248.0020.0002][.3245.0020.0004] # THAI CHARACTER SARA AM +0E45 0E4D ; [.3245.0020.0002][.3248.0020.0004] # +0E3A ; [.3256.0020.0002] # THAI CHARACTER PHINTHU ENTRY }; diff --git a/gnu/usr.bin/perl/cpan/Unicode-Collate/Collate/Locale/tn.pl b/gnu/usr.bin/perl/cpan/Unicode-Collate/Collate/Locale/tn.pl index c4f4fadd930..1614979c4f8 100644 --- a/gnu/usr.bin/perl/cpan/Unicode-Collate/Collate/Locale/tn.pl +++ b/gnu/usr.bin/perl/cpan/Unicode-Collate/Collate/Locale/tn.pl @@ -1,37 +1,37 @@ +{ - locale_version => 1.27, - entry => <<'ENTRY', # for DUCET v10.0.0 -00EA ; [.1D11.0020.0002] # LATIN SMALL LETTER E WITH CIRCUMFLEX -0065 0302 ; [.1D11.0020.0002] # LATIN SMALL LETTER E WITH CIRCUMFLEX -00CA ; [.1D11.0020.0008] # LATIN CAPITAL LETTER E WITH CIRCUMFLEX -0045 0302 ; [.1D11.0020.0008] # LATIN CAPITAL LETTER E WITH CIRCUMFLEX -1EC1 ; [.1D11.0020.0002][.0000.0025.0002] # LATIN SMALL LETTER E WITH CIRCUMFLEX AND GRAVE -1EC0 ; [.1D11.0020.0008][.0000.0025.0002] # LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND GRAVE -1EBF ; [.1D11.0020.0002][.0000.0024.0002] # LATIN SMALL LETTER E WITH CIRCUMFLEX AND ACUTE -1EBE ; [.1D11.0020.0008][.0000.0024.0002] # LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND ACUTE -1EC5 ; [.1D11.0020.0002][.0000.002D.0002] # LATIN SMALL LETTER E WITH CIRCUMFLEX AND TILDE -1EC4 ; [.1D11.0020.0008][.0000.002D.0002] # LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND TILDE -1EC3 ; [.1D11.0020.0002][.0000.003B.0002] # LATIN SMALL LETTER E WITH CIRCUMFLEX AND HOOK ABOVE -1EC2 ; [.1D11.0020.0008][.0000.003B.0002] # LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND HOOK ABOVE -1EC7 ; [.1D11.0020.0002][.0000.0042.0002] # LATIN SMALL LETTER E WITH CIRCUMFLEX AND DOT BELOW -1EC6 ; [.1D11.0020.0008][.0000.0042.0002] # LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND DOT BELOW -00F4 ; [.1E44.0020.0002] # LATIN SMALL LETTER O WITH CIRCUMFLEX -006F 0302 ; [.1E44.0020.0002] # LATIN SMALL LETTER O WITH CIRCUMFLEX -00D4 ; [.1E44.0020.0008] # LATIN CAPITAL LETTER O WITH CIRCUMFLEX -004F 0302 ; [.1E44.0020.0008] # LATIN CAPITAL LETTER O WITH CIRCUMFLEX -1ED3 ; [.1E44.0020.0002][.0000.0025.0002] # LATIN SMALL LETTER O WITH CIRCUMFLEX AND GRAVE -1ED2 ; [.1E44.0020.0008][.0000.0025.0002] # LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND GRAVE -1ED1 ; [.1E44.0020.0002][.0000.0024.0002] # LATIN SMALL LETTER O WITH CIRCUMFLEX AND ACUTE -1ED0 ; [.1E44.0020.0008][.0000.0024.0002] # LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND ACUTE -1ED7 ; [.1E44.0020.0002][.0000.002D.0002] # LATIN SMALL LETTER O WITH CIRCUMFLEX AND TILDE -1ED6 ; [.1E44.0020.0008][.0000.002D.0002] # LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND TILDE -1ED5 ; [.1E44.0020.0002][.0000.003B.0002] # LATIN SMALL LETTER O WITH CIRCUMFLEX AND HOOK ABOVE -1ED4 ; [.1E44.0020.0008][.0000.003B.0002] # LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND HOOK ABOVE -1ED9 ; [.1E44.0020.0002][.0000.0042.0002] # LATIN SMALL LETTER O WITH CIRCUMFLEX AND DOT BELOW -1ED8 ; [.1E44.0020.0008][.0000.0042.0002] # LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND DOT BELOW -0161 ; [.1ED8.0020.0002] # LATIN SMALL LETTER S WITH CARON -0073 030C ; [.1ED8.0020.0002] # LATIN SMALL LETTER S WITH CARON -0160 ; [.1ED8.0020.0008] # LATIN CAPITAL LETTER S WITH CARON -0053 030C ; [.1ED8.0020.0008] # LATIN CAPITAL LETTER S WITH CARON + locale_version => 1.31, + entry => <<'ENTRY', # for DUCET v13.0.0 +00EA ; [.2008.0020.0002] # LATIN SMALL LETTER E WITH CIRCUMFLEX +0065 0302 ; [.2008.0020.0002] # LATIN SMALL LETTER E WITH CIRCUMFLEX +00CA ; [.2008.0020.0008] # LATIN CAPITAL LETTER E WITH CIRCUMFLEX +0045 0302 ; [.2008.0020.0008] # LATIN CAPITAL LETTER E WITH CIRCUMFLEX +1EC1 ; [.2008.0020.0002][.0000.0025.0002] # LATIN SMALL LETTER E WITH CIRCUMFLEX AND GRAVE +1EC0 ; [.2008.0020.0008][.0000.0025.0002] # LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND GRAVE +1EBF ; [.2008.0020.0002][.0000.0024.0002] # LATIN SMALL LETTER E WITH CIRCUMFLEX AND ACUTE +1EBE ; [.2008.0020.0008][.0000.0024.0002] # LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND ACUTE +1EC5 ; [.2008.0020.0002][.0000.002D.0002] # LATIN SMALL LETTER E WITH CIRCUMFLEX AND TILDE +1EC4 ; [.2008.0020.0008][.0000.002D.0002] # LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND TILDE +1EC3 ; [.2008.0020.0002][.0000.003B.0002] # LATIN SMALL LETTER E WITH CIRCUMFLEX AND HOOK ABOVE +1EC2 ; [.2008.0020.0008][.0000.003B.0002] # LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND HOOK ABOVE +1EC7 ; [.2008.0020.0002][.0000.0042.0002] # LATIN SMALL LETTER E WITH CIRCUMFLEX AND DOT BELOW +1EC6 ; [.2008.0020.0008][.0000.0042.0002] # LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND DOT BELOW +00F4 ; [.213D.0020.0002] # LATIN SMALL LETTER O WITH CIRCUMFLEX +006F 0302 ; [.213D.0020.0002] # LATIN SMALL LETTER O WITH CIRCUMFLEX +00D4 ; [.213D.0020.0008] # LATIN CAPITAL LETTER O WITH CIRCUMFLEX +004F 0302 ; [.213D.0020.0008] # LATIN CAPITAL LETTER O WITH CIRCUMFLEX +1ED3 ; [.213D.0020.0002][.0000.0025.0002] # LATIN SMALL LETTER O WITH CIRCUMFLEX AND GRAVE +1ED2 ; [.213D.0020.0008][.0000.0025.0002] # LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND GRAVE +1ED1 ; [.213D.0020.0002][.0000.0024.0002] # LATIN SMALL LETTER O WITH CIRCUMFLEX AND ACUTE +1ED0 ; [.213D.0020.0008][.0000.0024.0002] # LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND ACUTE +1ED7 ; [.213D.0020.0002][.0000.002D.0002] # LATIN SMALL LETTER O WITH CIRCUMFLEX AND TILDE +1ED6 ; [.213D.0020.0008][.0000.002D.0002] # LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND TILDE +1ED5 ; [.213D.0020.0002][.0000.003B.0002] # LATIN SMALL LETTER O WITH CIRCUMFLEX AND HOOK ABOVE +1ED4 ; [.213D.0020.0008][.0000.003B.0002] # LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND HOOK ABOVE +1ED9 ; [.213D.0020.0002][.0000.0042.0002] # LATIN SMALL LETTER O WITH CIRCUMFLEX AND DOT BELOW +1ED8 ; [.213D.0020.0008][.0000.0042.0002] # LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND DOT BELOW +0161 ; [.21D3.0020.0002] # LATIN SMALL LETTER S WITH CARON +0073 030C ; [.21D3.0020.0002] # LATIN SMALL LETTER S WITH CARON +0160 ; [.21D3.0020.0008] # LATIN CAPITAL LETTER S WITH CARON +0053 030C ; [.21D3.0020.0008] # LATIN CAPITAL LETTER S WITH CARON ENTRY }; diff --git a/gnu/usr.bin/perl/cpan/Unicode-Collate/Collate/Locale/to.pl b/gnu/usr.bin/perl/cpan/Unicode-Collate/Collate/Locale/to.pl index cc82ba7c88f..0317d3b5180 100644 --- a/gnu/usr.bin/perl/cpan/Unicode-Collate/Collate/Locale/to.pl +++ b/gnu/usr.bin/perl/cpan/Unicode-Collate/Collate/Locale/to.pl @@ -1,62 +1,62 @@ +{ - locale_version => 1.27, - entry => <<'ENTRY', # for DUCET v10.0.0 -006E 0067 ; [.1E20.0020.0002] # -004E 0067 ; [.1E20.0020.0007] # -004E 0047 ; [.1E20.0020.0008] # -014B ; [.1E20.0020.001C] # LATIN SMALL LETTER ENG -014A ; [.1E20.0020.001D] # LATIN CAPITAL LETTER ENG -02BB ; [.1F88.0020.0002] # MODIFIER LETTER TURNED COMMA -02BD ; [.1F88.0020.0003] # MODIFIER LETTER REVERSED COMMA -00E1 ; [.1CAD.0021.0002] # LATIN SMALL LETTER A WITH ACUTE -0061 0301 ; [.1CAD.0021.0002] # LATIN SMALL LETTER A WITH ACUTE -0061 0341 ; [.1CAD.0021.0002] # LATIN SMALL LETTER A WITH ACUTE -00C1 ; [.1CAD.0021.0008] # LATIN CAPITAL LETTER A WITH ACUTE -0041 0301 ; [.1CAD.0021.0008] # LATIN CAPITAL LETTER A WITH ACUTE -0041 0341 ; [.1CAD.0021.0008] # LATIN CAPITAL LETTER A WITH ACUTE -0101 ; [.1CAD.0022.0002] # LATIN SMALL LETTER A WITH MACRON -0061 0304 ; [.1CAD.0022.0002] # LATIN SMALL LETTER A WITH MACRON -0100 ; [.1CAD.0022.0008] # LATIN CAPITAL LETTER A WITH MACRON -0041 0304 ; [.1CAD.0022.0008] # LATIN CAPITAL LETTER A WITH MACRON -00E9 ; [.1D10.0021.0002] # LATIN SMALL LETTER E WITH ACUTE -0065 0301 ; [.1D10.0021.0002] # LATIN SMALL LETTER E WITH ACUTE -0065 0341 ; [.1D10.0021.0002] # LATIN SMALL LETTER E WITH ACUTE -00C9 ; [.1D10.0021.0008] # LATIN CAPITAL LETTER E WITH ACUTE -0045 0301 ; [.1D10.0021.0008] # LATIN CAPITAL LETTER E WITH ACUTE -0045 0341 ; [.1D10.0021.0008] # LATIN CAPITAL LETTER E WITH ACUTE -0113 ; [.1D10.0022.0002] # LATIN SMALL LETTER E WITH MACRON -0065 0304 ; [.1D10.0022.0002] # LATIN SMALL LETTER E WITH MACRON -0112 ; [.1D10.0022.0008] # LATIN CAPITAL LETTER E WITH MACRON -0045 0304 ; [.1D10.0022.0008] # LATIN CAPITAL LETTER E WITH MACRON -00ED ; [.1D98.0021.0002] # LATIN SMALL LETTER I WITH ACUTE -0069 0301 ; [.1D98.0021.0002] # LATIN SMALL LETTER I WITH ACUTE -0069 0341 ; [.1D98.0021.0002] # LATIN SMALL LETTER I WITH ACUTE -00CD ; [.1D98.0021.0008] # LATIN CAPITAL LETTER I WITH ACUTE -0049 0301 ; [.1D98.0021.0008] # LATIN CAPITAL LETTER I WITH ACUTE -0049 0341 ; [.1D98.0021.0008] # LATIN CAPITAL LETTER I WITH ACUTE -012B ; [.1D98.0022.0002] # LATIN SMALL LETTER I WITH MACRON -0069 0304 ; [.1D98.0022.0002] # LATIN SMALL LETTER I WITH MACRON -012A ; [.1D98.0022.0008] # LATIN CAPITAL LETTER I WITH MACRON -0049 0304 ; [.1D98.0022.0008] # LATIN CAPITAL LETTER I WITH MACRON -00F3 ; [.1E43.0021.0002] # LATIN SMALL LETTER O WITH ACUTE -006F 0301 ; [.1E43.0021.0002] # LATIN SMALL LETTER O WITH ACUTE -006F 0341 ; [.1E43.0021.0002] # LATIN SMALL LETTER O WITH ACUTE -00D3 ; [.1E43.0021.0008] # LATIN CAPITAL LETTER O WITH ACUTE -004F 0301 ; [.1E43.0021.0008] # LATIN CAPITAL LETTER O WITH ACUTE -004F 0341 ; [.1E43.0021.0008] # LATIN CAPITAL LETTER O WITH ACUTE -014D ; [.1E43.0022.0002] # LATIN SMALL LETTER O WITH MACRON -006F 0304 ; [.1E43.0022.0002] # LATIN SMALL LETTER O WITH MACRON -014C ; [.1E43.0022.0008] # LATIN CAPITAL LETTER O WITH MACRON -004F 0304 ; [.1E43.0022.0008] # LATIN CAPITAL LETTER O WITH MACRON -00FA ; [.1F1B.0021.0002] # LATIN SMALL LETTER U WITH ACUTE -0075 0301 ; [.1F1B.0021.0002] # LATIN SMALL LETTER U WITH ACUTE -0075 0341 ; [.1F1B.0021.0002] # LATIN SMALL LETTER U WITH ACUTE -00DA ; [.1F1B.0021.0008] # LATIN CAPITAL LETTER U WITH ACUTE -0055 0301 ; [.1F1B.0021.0008] # LATIN CAPITAL LETTER U WITH ACUTE -0055 0341 ; [.1F1B.0021.0008] # LATIN CAPITAL LETTER U WITH ACUTE -016B ; [.1F1B.0022.0002] # LATIN SMALL LETTER U WITH MACRON -0075 0304 ; [.1F1B.0022.0002] # LATIN SMALL LETTER U WITH MACRON -016A ; [.1F1B.0022.0008] # LATIN CAPITAL LETTER U WITH MACRON -0055 0304 ; [.1F1B.0022.0008] # LATIN CAPITAL LETTER U WITH MACRON + locale_version => 1.31, + entry => <<'ENTRY', # for DUCET v13.0.0 +006E 0067 ; [.2119.0020.0002] # +004E 0067 ; [.2119.0020.0007] # +004E 0047 ; [.2119.0020.0008] # +014B ; [.2119.0020.001C] # LATIN SMALL LETTER ENG +014A ; [.2119.0020.001D] # LATIN CAPITAL LETTER ENG +02BB ; [.2287.0020.0002] # MODIFIER LETTER TURNED COMMA +02BD ; [.2287.0020.0003] # MODIFIER LETTER REVERSED COMMA +00E1 ; [.1FA2.0021.0002] # LATIN SMALL LETTER A WITH ACUTE +0061 0301 ; [.1FA2.0021.0002] # LATIN SMALL LETTER A WITH ACUTE +0061 0341 ; [.1FA2.0021.0002] # LATIN SMALL LETTER A WITH ACUTE +00C1 ; [.1FA2.0021.0008] # LATIN CAPITAL LETTER A WITH ACUTE +0041 0301 ; [.1FA2.0021.0008] # LATIN CAPITAL LETTER A WITH ACUTE +0041 0341 ; [.1FA2.0021.0008] # LATIN CAPITAL LETTER A WITH ACUTE +0101 ; [.1FA2.0022.0002] # LATIN SMALL LETTER A WITH MACRON +0061 0304 ; [.1FA2.0022.0002] # LATIN SMALL LETTER A WITH MACRON +0100 ; [.1FA2.0022.0008] # LATIN CAPITAL LETTER A WITH MACRON +0041 0304 ; [.1FA2.0022.0008] # LATIN CAPITAL LETTER A WITH MACRON +00E9 ; [.2007.0021.0002] # LATIN SMALL LETTER E WITH ACUTE +0065 0301 ; [.2007.0021.0002] # LATIN SMALL LETTER E WITH ACUTE +0065 0341 ; [.2007.0021.0002] # LATIN SMALL LETTER E WITH ACUTE +00C9 ; [.2007.0021.0008] # LATIN CAPITAL LETTER E WITH ACUTE +0045 0301 ; [.2007.0021.0008] # LATIN CAPITAL LETTER E WITH ACUTE +0045 0341 ; [.2007.0021.0008] # LATIN CAPITAL LETTER E WITH ACUTE +0113 ; [.2007.0022.0002] # LATIN SMALL LETTER E WITH MACRON +0065 0304 ; [.2007.0022.0002] # LATIN SMALL LETTER E WITH MACRON +0112 ; [.2007.0022.0008] # LATIN CAPITAL LETTER E WITH MACRON +0045 0304 ; [.2007.0022.0008] # LATIN CAPITAL LETTER E WITH MACRON +00ED ; [.2090.0021.0002] # LATIN SMALL LETTER I WITH ACUTE +0069 0301 ; [.2090.0021.0002] # LATIN SMALL LETTER I WITH ACUTE +0069 0341 ; [.2090.0021.0002] # LATIN SMALL LETTER I WITH ACUTE +00CD ; [.2090.0021.0008] # LATIN CAPITAL LETTER I WITH ACUTE +0049 0301 ; [.2090.0021.0008] # LATIN CAPITAL LETTER I WITH ACUTE +0049 0341 ; [.2090.0021.0008] # LATIN CAPITAL LETTER I WITH ACUTE +012B ; [.2090.0022.0002] # LATIN SMALL LETTER I WITH MACRON +0069 0304 ; [.2090.0022.0002] # LATIN SMALL LETTER I WITH MACRON +012A ; [.2090.0022.0008] # LATIN CAPITAL LETTER I WITH MACRON +0049 0304 ; [.2090.0022.0008] # LATIN CAPITAL LETTER I WITH MACRON +00F3 ; [.213C.0021.0002] # LATIN SMALL LETTER O WITH ACUTE +006F 0301 ; [.213C.0021.0002] # LATIN SMALL LETTER O WITH ACUTE +006F 0341 ; [.213C.0021.0002] # LATIN SMALL LETTER O WITH ACUTE +00D3 ; [.213C.0021.0008] # LATIN CAPITAL LETTER O WITH ACUTE +004F 0301 ; [.213C.0021.0008] # LATIN CAPITAL LETTER O WITH ACUTE +004F 0341 ; [.213C.0021.0008] # LATIN CAPITAL LETTER O WITH ACUTE +014D ; [.213C.0022.0002] # LATIN SMALL LETTER O WITH MACRON +006F 0304 ; [.213C.0022.0002] # LATIN SMALL LETTER O WITH MACRON +014C ; [.213C.0022.0008] # LATIN CAPITAL LETTER O WITH MACRON +004F 0304 ; [.213C.0022.0008] # LATIN CAPITAL LETTER O WITH MACRON +00FA ; [.2217.0021.0002] # LATIN SMALL LETTER U WITH ACUTE +0075 0301 ; [.2217.0021.0002] # LATIN SMALL LETTER U WITH ACUTE +0075 0341 ; [.2217.0021.0002] # LATIN SMALL LETTER U WITH ACUTE +00DA ; [.2217.0021.0008] # LATIN CAPITAL LETTER U WITH ACUTE +0055 0301 ; [.2217.0021.0008] # LATIN CAPITAL LETTER U WITH ACUTE +0055 0341 ; [.2217.0021.0008] # LATIN CAPITAL LETTER U WITH ACUTE +016B ; [.2217.0022.0002] # LATIN SMALL LETTER U WITH MACRON +0075 0304 ; [.2217.0022.0002] # LATIN SMALL LETTER U WITH MACRON +016A ; [.2217.0022.0008] # LATIN CAPITAL LETTER U WITH MACRON +0055 0304 ; [.2217.0022.0008] # LATIN CAPITAL LETTER U WITH MACRON ENTRY }; diff --git a/gnu/usr.bin/perl/cpan/Unicode-Collate/Collate/Locale/tr.pl b/gnu/usr.bin/perl/cpan/Unicode-Collate/Collate/Locale/tr.pl index adbf6c7948b..f3e2f61f12d 100644 --- a/gnu/usr.bin/perl/cpan/Unicode-Collate/Collate/Locale/tr.pl +++ b/gnu/usr.bin/perl/cpan/Unicode-Collate/Collate/Locale/tr.pl @@ -1,46 +1,46 @@ +{ - locale_version => 1.27, - entry => <<'ENTRY', # for DUCET v10.0.0 -00E7 ; [.1CE1.0020.0002] # LATIN SMALL LETTER C WITH CEDILLA -0063 0327 ; [.1CE1.0020.0002] # LATIN SMALL LETTER C WITH CEDILLA -00C7 ; [.1CE1.0020.0008] # LATIN CAPITAL LETTER C WITH CEDILLA -0043 0327 ; [.1CE1.0020.0008] # LATIN CAPITAL LETTER C WITH CEDILLA -011F ; [.1D5B.0020.0002] # LATIN SMALL LETTER G WITH BREVE -0067 0306 ; [.1D5B.0020.0002] # LATIN SMALL LETTER G WITH BREVE -011E ; [.1D5B.0020.0008] # LATIN CAPITAL LETTER G WITH BREVE -0047 0306 ; [.1D5B.0020.0008] # LATIN CAPITAL LETTER G WITH BREVE -0131 ; [.1D97.0020.0002] # LATIN SMALL LETTER DOTLESS I -0049 ; [.1D97.0020.0008] # LATIN CAPITAL LETTER I -00CC ; [.1D97.0020.0008][.0000.0025.0002] # LATIN CAPITAL LETTER I WITH GRAVE -00CD ; [.1D97.0020.0008][.0000.0024.0002] # LATIN CAPITAL LETTER I WITH ACUTE -00CE ; [.1D97.0020.0008][.0000.0027.0002] # LATIN CAPITAL LETTER I WITH CIRCUMFLEX -00CF ; [.1D97.0020.0008][.0000.002B.0002] # LATIN CAPITAL LETTER I WITH DIAERESIS -012A ; [.1D97.0020.0008][.0000.0032.0002] # LATIN CAPITAL LETTER I WITH MACRON -012C ; [.1D97.0020.0008][.0000.0026.0002] # LATIN CAPITAL LETTER I WITH BREVE -012E ; [.1D97.0020.0008][.0000.0031.0002] # LATIN CAPITAL LETTER I WITH OGONEK -0130 ; [.1D98.0020.0008] # LATIN CAPITAL LETTER I WITH DOT ABOVE -0049 0307 ; [.1D98.0020.0008] # LATIN CAPITAL LETTER I WITH DOT ABOVE -00F6 ; [.1E44.0020.0002] # LATIN SMALL LETTER O WITH DIAERESIS -006F 0308 ; [.1E44.0020.0002] # LATIN SMALL LETTER O WITH DIAERESIS -00D6 ; [.1E44.0020.0008] # LATIN CAPITAL LETTER O WITH DIAERESIS -004F 0308 ; [.1E44.0020.0008] # LATIN CAPITAL LETTER O WITH DIAERESIS -022B ; [.1E44.0020.0002][.0000.0032.0002] # LATIN SMALL LETTER O WITH DIAERESIS AND MACRON -022A ; [.1E44.0020.0008][.0000.0032.0002] # LATIN CAPITAL LETTER O WITH DIAERESIS AND MACRON -015F ; [.1ED8.0020.0002] # LATIN SMALL LETTER S WITH CEDILLA -0073 0327 ; [.1ED8.0020.0002] # LATIN SMALL LETTER S WITH CEDILLA -015E ; [.1ED8.0020.0008] # LATIN CAPITAL LETTER S WITH CEDILLA -0053 0327 ; [.1ED8.0020.0008] # LATIN CAPITAL LETTER S WITH CEDILLA -00FC ; [.1F1C.0020.0002] # LATIN SMALL LETTER U WITH DIAERESIS -0075 0308 ; [.1F1C.0020.0002] # LATIN SMALL LETTER U WITH DIAERESIS -00DC ; [.1F1C.0020.0008] # LATIN CAPITAL LETTER U WITH DIAERESIS -0055 0308 ; [.1F1C.0020.0008] # LATIN CAPITAL LETTER U WITH DIAERESIS -01DC ; [.1F1C.0020.0002][.0000.0025.0002] # LATIN SMALL LETTER U WITH DIAERESIS AND GRAVE -01DB ; [.1F1C.0020.0008][.0000.0025.0002] # LATIN CAPITAL LETTER U WITH DIAERESIS AND GRAVE -01D8 ; [.1F1C.0020.0002][.0000.0024.0002] # LATIN SMALL LETTER U WITH DIAERESIS AND ACUTE -01D7 ; [.1F1C.0020.0008][.0000.0024.0002] # LATIN CAPITAL LETTER U WITH DIAERESIS AND ACUTE -01D6 ; [.1F1C.0020.0002][.0000.0032.0002] # LATIN SMALL LETTER U WITH DIAERESIS AND MACRON -01D5 ; [.1F1C.0020.0008][.0000.0032.0002] # LATIN CAPITAL LETTER U WITH DIAERESIS AND MACRON -01DA ; [.1F1C.0020.0002][.0000.0028.0002] # LATIN SMALL LETTER U WITH DIAERESIS AND CARON -01D9 ; [.1F1C.0020.0008][.0000.0028.0002] # LATIN CAPITAL LETTER U WITH DIAERESIS AND CARON + locale_version => 1.31, + entry => <<'ENTRY', # for DUCET v13.0.0 +00E7 ; [.1FD7.0020.0002] # LATIN SMALL LETTER C WITH CEDILLA +0063 0327 ; [.1FD7.0020.0002] # LATIN SMALL LETTER C WITH CEDILLA +00C7 ; [.1FD7.0020.0008] # LATIN CAPITAL LETTER C WITH CEDILLA +0043 0327 ; [.1FD7.0020.0008] # LATIN CAPITAL LETTER C WITH CEDILLA +011F ; [.2052.0020.0002] # LATIN SMALL LETTER G WITH BREVE +0067 0306 ; [.2052.0020.0002] # LATIN SMALL LETTER G WITH BREVE +011E ; [.2052.0020.0008] # LATIN CAPITAL LETTER G WITH BREVE +0047 0306 ; [.2052.0020.0008] # LATIN CAPITAL LETTER G WITH BREVE +0131 ; [.208F.0020.0002] # LATIN SMALL LETTER DOTLESS I +0049 ; [.208F.0020.0008] # LATIN CAPITAL LETTER I +00CC ; [.208F.0020.0008][.0000.0025.0002] # LATIN CAPITAL LETTER I WITH GRAVE +00CD ; [.208F.0020.0008][.0000.0024.0002] # LATIN CAPITAL LETTER I WITH ACUTE +00CE ; [.208F.0020.0008][.0000.0027.0002] # LATIN CAPITAL LETTER I WITH CIRCUMFLEX +00CF ; [.208F.0020.0008][.0000.002B.0002] # LATIN CAPITAL LETTER I WITH DIAERESIS +012A ; [.208F.0020.0008][.0000.0032.0002] # LATIN CAPITAL LETTER I WITH MACRON +012C ; [.208F.0020.0008][.0000.0026.0002] # LATIN CAPITAL LETTER I WITH BREVE +012E ; [.208F.0020.0008][.0000.0031.0002] # LATIN CAPITAL LETTER I WITH OGONEK +0130 ; [.2090.0020.0008] # LATIN CAPITAL LETTER I WITH DOT ABOVE +0049 0307 ; [.2090.0020.0008] # LATIN CAPITAL LETTER I WITH DOT ABOVE +00F6 ; [.213D.0020.0002] # LATIN SMALL LETTER O WITH DIAERESIS +006F 0308 ; [.213D.0020.0002] # LATIN SMALL LETTER O WITH DIAERESIS +00D6 ; [.213D.0020.0008] # LATIN CAPITAL LETTER O WITH DIAERESIS +004F 0308 ; [.213D.0020.0008] # LATIN CAPITAL LETTER O WITH DIAERESIS +022B ; [.213D.0020.0002][.0000.0032.0002] # LATIN SMALL LETTER O WITH DIAERESIS AND MACRON +022A ; [.213D.0020.0008][.0000.0032.0002] # LATIN CAPITAL LETTER O WITH DIAERESIS AND MACRON +015F ; [.21D3.0020.0002] # LATIN SMALL LETTER S WITH CEDILLA +0073 0327 ; [.21D3.0020.0002] # LATIN SMALL LETTER S WITH CEDILLA +015E ; [.21D3.0020.0008] # LATIN CAPITAL LETTER S WITH CEDILLA +0053 0327 ; [.21D3.0020.0008] # LATIN CAPITAL LETTER S WITH CEDILLA +00FC ; [.2218.0020.0002] # LATIN SMALL LETTER U WITH DIAERESIS +0075 0308 ; [.2218.0020.0002] # LATIN SMALL LETTER U WITH DIAERESIS +00DC ; [.2218.0020.0008] # LATIN CAPITAL LETTER U WITH DIAERESIS +0055 0308 ; [.2218.0020.0008] # LATIN CAPITAL LETTER U WITH DIAERESIS +01DC ; [.2218.0020.0002][.0000.0025.0002] # LATIN SMALL LETTER U WITH DIAERESIS AND GRAVE +01DB ; [.2218.0020.0008][.0000.0025.0002] # LATIN CAPITAL LETTER U WITH DIAERESIS AND GRAVE +01D8 ; [.2218.0020.0002][.0000.0024.0002] # LATIN SMALL LETTER U WITH DIAERESIS AND ACUTE +01D7 ; [.2218.0020.0008][.0000.0024.0002] # LATIN CAPITAL LETTER U WITH DIAERESIS AND ACUTE +01D6 ; [.2218.0020.0002][.0000.0032.0002] # LATIN SMALL LETTER U WITH DIAERESIS AND MACRON +01D5 ; [.2218.0020.0008][.0000.0032.0002] # LATIN CAPITAL LETTER U WITH DIAERESIS AND MACRON +01DA ; [.2218.0020.0002][.0000.0028.0002] # LATIN SMALL LETTER U WITH DIAERESIS AND CARON +01D9 ; [.2218.0020.0008][.0000.0028.0002] # LATIN CAPITAL LETTER U WITH DIAERESIS AND CARON ENTRY }; diff --git a/gnu/usr.bin/perl/cpan/Unicode-Collate/Collate/Locale/uk.pl b/gnu/usr.bin/perl/cpan/Unicode-Collate/Collate/Locale/uk.pl index 7a62ea0b0ee..f1eb2d2aca0 100644 --- a/gnu/usr.bin/perl/cpan/Unicode-Collate/Collate/Locale/uk.pl +++ b/gnu/usr.bin/perl/cpan/Unicode-Collate/Collate/Locale/uk.pl @@ -1,14 +1,14 @@ +{ - locale_version => 1.27, - entry => <<'ENTRY', # for DUCET v10.0.0 -0491 ; [.209D.0020.0002] # CYRILLIC SMALL LETTER GHE WITH UPTURN -0490 ; [.209D.0020.0008] # CYRILLIC CAPITAL LETTER GHE WITH UPTURN -A647 ; [.20EF.0020.0002] # CYRILLIC SMALL LETTER IOTA -A646 ; [.20EF.0020.0008] # CYRILLIC CAPITAL LETTER IOTA -0457 ; [.20F0.0020.0002] # CYRILLIC SMALL LETTER YI -0456 0308 ; [.20F0.0020.0002] # CYRILLIC SMALL LETTER YI -0407 ; [.20F0.0020.0008] # CYRILLIC CAPITAL LETTER YI -0406 0308 ; [.20F0.0020.0008] # CYRILLIC CAPITAL LETTER YI -A676 ; [.20F0.0020.0004] # COMBINING CYRILLIC LETTER YI + locale_version => 1.31, + entry => <<'ENTRY', # for DUCET v13.0.0 +0491 ; [.239C.0020.0002] # CYRILLIC SMALL LETTER GHE WITH UPTURN +0490 ; [.239C.0020.0008] # CYRILLIC CAPITAL LETTER GHE WITH UPTURN +A647 ; [.23EE.0020.0002] # CYRILLIC SMALL LETTER IOTA +A646 ; [.23EE.0020.0008] # CYRILLIC CAPITAL LETTER IOTA +0457 ; [.23EF.0020.0002] # CYRILLIC SMALL LETTER YI +0456 0308 ; [.23EF.0020.0002] # CYRILLIC SMALL LETTER YI +0407 ; [.23EF.0020.0008] # CYRILLIC CAPITAL LETTER YI +0406 0308 ; [.23EF.0020.0008] # CYRILLIC CAPITAL LETTER YI +A676 ; [.23EF.0020.0004] # COMBINING CYRILLIC LETTER YI ENTRY }; diff --git a/gnu/usr.bin/perl/cpan/Unicode-Collate/Collate/Locale/ur.pl b/gnu/usr.bin/perl/cpan/Unicode-Collate/Collate/Locale/ur.pl index 832cdb9f1a9..400ee1c507f 100644 --- a/gnu/usr.bin/perl/cpan/Unicode-Collate/Collate/Locale/ur.pl +++ b/gnu/usr.bin/perl/cpan/Unicode-Collate/Collate/Locale/ur.pl @@ -1,76 +1,76 @@ +{ - locale_version => 1.27, - entry => <<'ENTRY', # for DUCET v10.0.0 -0623 ; [.2371.0021.0002] # ARABIC LETTER ALEF WITH HAMZA ABOVE -0627 0654 ; [.2371.0021.0002] # ARABIC LETTER ALEF WITH HAMZA ABOVE -0622 ; [.2372.0020.0002][.FFC0.0000.0000] # ARABIC LETTER ALEF WITH MADDA ABOVE -0627 0653 ; [.2372.0020.0002][.FFC0.0000.0000] # ARABIC LETTER ALEF WITH MADDA ABOVE -0628 ; [.2372.0020.0002][.FFC1.0000.0000] # ARABIC LETTER BEH -0628 06BE ; [.2372.0020.0002][.FFC2.0000.0000] # -067E ; [.2372.0020.0002][.FFC3.0000.0000] # ARABIC LETTER PEH -067E 06BE ; [.2372.0020.0002][.FFC4.0000.0000] # -062A ; [.2372.0020.0002][.FFC5.0000.0000] # ARABIC LETTER TEH -062A 06BE ; [.2372.0020.0002][.FFC6.0000.0000] # -0679 ; [.2372.0020.0002][.FFC7.0000.0000] # ARABIC LETTER TTEH -0679 06BE ; [.2372.0020.0002][.FFC8.0000.0000] # -062B ; [.2372.0020.0002][.FFC9.0000.0000] # ARABIC LETTER THEH -062C ; [.2372.0020.0002][.FFCA.0000.0000] # ARABIC LETTER JEEM -062C 06BE ; [.2372.0020.0002][.FFCB.0000.0000] # -0686 ; [.2372.0020.0002][.FFCC.0000.0000] # ARABIC LETTER TCHEH -0686 06BE ; [.2372.0020.0002][.FFCD.0000.0000] # -062D ; [.2372.0020.0002][.FFCE.0000.0000] # ARABIC LETTER HAH -062E ; [.2372.0020.0002][.FFCF.0000.0000] # ARABIC LETTER KHAH -062F ; [.2372.0020.0002][.FFD0.0000.0000] # ARABIC LETTER DAL -062F 06BE ; [.2372.0020.0002][.FFD1.0000.0000] # -0688 ; [.2372.0020.0002][.FFD2.0000.0000] # ARABIC LETTER DDAL -0688 06BE ; [.2372.0020.0002][.FFD3.0000.0000] # -0630 ; [.2372.0020.0002][.FFD4.0000.0000] # ARABIC LETTER THAL -0631 ; [.2372.0020.0002][.FFD5.0000.0000] # ARABIC LETTER REH -0631 06BE ; [.2372.0020.0002][.FFD6.0000.0000] # -0691 ; [.2372.0020.0002][.FFD7.0000.0000] # ARABIC LETTER RREH -0691 06BE ; [.2372.0020.0002][.FFD8.0000.0000] # -0632 ; [.2372.0020.0002][.FFD9.0000.0000] # ARABIC LETTER ZAIN -0698 ; [.2372.0020.0002][.FFDA.0000.0000] # ARABIC LETTER JEH -0633 ; [.2372.0020.0002][.FFDB.0000.0000] # ARABIC LETTER SEEN -0634 ; [.2372.0020.0002][.FFDC.0000.0000] # ARABIC LETTER SHEEN -0635 ; [.2372.0020.0002][.FFDD.0000.0000] # ARABIC LETTER SAD -0636 ; [.2372.0020.0002][.FFDE.0000.0000] # ARABIC LETTER DAD -0637 ; [.2372.0020.0002][.FFDF.0000.0000] # ARABIC LETTER TAH -0638 ; [.2372.0020.0002][.FFE0.0000.0000] # ARABIC LETTER ZAH -0639 ; [.2372.0020.0002][.FFE1.0000.0000] # ARABIC LETTER AIN -063A ; [.2372.0020.0002][.FFE2.0000.0000] # ARABIC LETTER GHAIN -0641 ; [.2372.0020.0002][.FFE3.0000.0000] # ARABIC LETTER FEH -0642 ; [.2372.0020.0002][.FFE4.0000.0000] # ARABIC LETTER QAF -06A9 ; [.2372.0020.0002][.FFE5.0000.0000] # ARABIC LETTER KEHEH -06A9 06BE ; [.2372.0020.0002][.FFE6.0000.0000] # -06AF ; [.2372.0020.0002][.FFE7.0000.0000] # ARABIC LETTER GAF -06AF 06BE ; [.2372.0020.0002][.FFE8.0000.0000] # -0644 ; [.2372.0020.0002][.FFE9.0000.0000] # ARABIC LETTER LAM -0644 06BE ; [.2372.0020.0002][.FFEA.0000.0000] # -0645 ; [.2372.0020.0002][.FFEB.0000.0000] # ARABIC LETTER MEEM -0645 06BE ; [.2372.0020.0002][.FFEC.0000.0000] # -0646 ; [.2372.0020.0002][.FFED.0000.0000] # ARABIC LETTER NOON -0646 06BE ; [.2372.0020.0002][.FFEE.0000.0000] # -06BA ; [.2372.0020.0002][.FFEF.0000.0000] # ARABIC LETTER NOON GHUNNA -06BA 06BE ; [.2372.0020.0002][.FFF0.0000.0000] # -0648 ; [.2372.0020.0002][.FFF1.0000.0000] # ARABIC LETTER WAW -0624 ; [.2372.0021.0002][.FFF1.0000.0000] # ARABIC LETTER WAW WITH HAMZA ABOVE -0648 0654 ; [.2372.0021.0002][.FFF1.0000.0000] # ARABIC LETTER WAW WITH HAMZA ABOVE -0648 06BE ; [.2372.0020.0002][.FFF2.0000.0000] # -06C1 ; [.2372.0020.0002][.FFF3.0000.0000] # ARABIC LETTER HEH GOAL -06C2 ; [.2372.0021.0002][.FFF3.0000.0000] # ARABIC LETTER HEH GOAL WITH HAMZA ABOVE -06C1 0654 ; [.2372.0021.0002][.FFF3.0000.0000] # ARABIC LETTER HEH GOAL WITH HAMZA ABOVE -06BE ; [.2372.0020.0002][.FFF4.0000.0000] # ARABIC LETTER HEH DOACHASHMEE -06C3 ; [.2372.0020.0002][.FFF5.0000.0000] # ARABIC LETTER TEH MARBUTA GOAL -0621 ; [.2372.0020.0002][.FFF6.0000.0000] # ARABIC LETTER HAMZA -06CC ; [.2372.0020.0002][.FFF7.0000.0000] # ARABIC LETTER FARSI YEH -0626 ; [.2372.0021.0002][.FFF7.0000.0000] # ARABIC LETTER YEH WITH HAMZA ABOVE -064A 0654 ; [.2372.0021.0002][.FFF7.0000.0000] # ARABIC LETTER YEH WITH HAMZA ABOVE -06CC 06BE ; [.2372.0020.0002][.FFF8.0000.0000] # -06D2 ; [.2372.0020.0002][.FFF9.0000.0000] # ARABIC LETTER YEH BARREE -06D3 ; [.2372.0021.0002][.FFF9.0000.0000] # ARABIC LETTER YEH BARREE WITH HAMZA ABOVE -06D2 0654 ; [.2372.0021.0002][.FFF9.0000.0000] # ARABIC LETTER YEH BARREE WITH HAMZA ABOVE -066E ; [.2372.0020.0002][.FFFA.0000.0000] # ARABIC LETTER DOTLESS BEH + locale_version => 1.31, + entry => <<'ENTRY', # for DUCET v13.0.0 +0623 ; [.2672.0021.0002] # ARABIC LETTER ALEF WITH HAMZA ABOVE +0627 0654 ; [.2672.0021.0002] # ARABIC LETTER ALEF WITH HAMZA ABOVE +0622 ; [.2673.0020.0002][.FFC0.0000.0000] # ARABIC LETTER ALEF WITH MADDA ABOVE +0627 0653 ; [.2673.0020.0002][.FFC0.0000.0000] # ARABIC LETTER ALEF WITH MADDA ABOVE +0628 ; [.2673.0020.0002][.FFC1.0000.0000] # ARABIC LETTER BEH +0628 06BE ; [.2673.0020.0002][.FFC2.0000.0000] # +067E ; [.2673.0020.0002][.FFC3.0000.0000] # ARABIC LETTER PEH +067E 06BE ; [.2673.0020.0002][.FFC4.0000.0000] # +062A ; [.2673.0020.0002][.FFC5.0000.0000] # ARABIC LETTER TEH +062A 06BE ; [.2673.0020.0002][.FFC6.0000.0000] # +0679 ; [.2673.0020.0002][.FFC7.0000.0000] # ARABIC LETTER TTEH +0679 06BE ; [.2673.0020.0002][.FFC8.0000.0000] # +062B ; [.2673.0020.0002][.FFC9.0000.0000] # ARABIC LETTER THEH +062C ; [.2673.0020.0002][.FFCA.0000.0000] # ARABIC LETTER JEEM +062C 06BE ; [.2673.0020.0002][.FFCB.0000.0000] # +0686 ; [.2673.0020.0002][.FFCC.0000.0000] # ARABIC LETTER TCHEH +0686 06BE ; [.2673.0020.0002][.FFCD.0000.0000] # +062D ; [.2673.0020.0002][.FFCE.0000.0000] # ARABIC LETTER HAH +062E ; [.2673.0020.0002][.FFCF.0000.0000] # ARABIC LETTER KHAH +062F ; [.2673.0020.0002][.FFD0.0000.0000] # ARABIC LETTER DAL +062F 06BE ; [.2673.0020.0002][.FFD1.0000.0000] # +0688 ; [.2673.0020.0002][.FFD2.0000.0000] # ARABIC LETTER DDAL +0688 06BE ; [.2673.0020.0002][.FFD3.0000.0000] # +0630 ; [.2673.0020.0002][.FFD4.0000.0000] # ARABIC LETTER THAL +0631 ; [.2673.0020.0002][.FFD5.0000.0000] # ARABIC LETTER REH +0631 06BE ; [.2673.0020.0002][.FFD6.0000.0000] # +0691 ; [.2673.0020.0002][.FFD7.0000.0000] # ARABIC LETTER RREH +0691 06BE ; [.2673.0020.0002][.FFD8.0000.0000] # +0632 ; [.2673.0020.0002][.FFD9.0000.0000] # ARABIC LETTER ZAIN +0698 ; [.2673.0020.0002][.FFDA.0000.0000] # ARABIC LETTER JEH +0633 ; [.2673.0020.0002][.FFDB.0000.0000] # ARABIC LETTER SEEN +0634 ; [.2673.0020.0002][.FFDC.0000.0000] # ARABIC LETTER SHEEN +0635 ; [.2673.0020.0002][.FFDD.0000.0000] # ARABIC LETTER SAD +0636 ; [.2673.0020.0002][.FFDE.0000.0000] # ARABIC LETTER DAD +0637 ; [.2673.0020.0002][.FFDF.0000.0000] # ARABIC LETTER TAH +0638 ; [.2673.0020.0002][.FFE0.0000.0000] # ARABIC LETTER ZAH +0639 ; [.2673.0020.0002][.FFE1.0000.0000] # ARABIC LETTER AIN +063A ; [.2673.0020.0002][.FFE2.0000.0000] # ARABIC LETTER GHAIN +0641 ; [.2673.0020.0002][.FFE3.0000.0000] # ARABIC LETTER FEH +0642 ; [.2673.0020.0002][.FFE4.0000.0000] # ARABIC LETTER QAF +06A9 ; [.2673.0020.0002][.FFE5.0000.0000] # ARABIC LETTER KEHEH +06A9 06BE ; [.2673.0020.0002][.FFE6.0000.0000] # +06AF ; [.2673.0020.0002][.FFE7.0000.0000] # ARABIC LETTER GAF +06AF 06BE ; [.2673.0020.0002][.FFE8.0000.0000] # +0644 ; [.2673.0020.0002][.FFE9.0000.0000] # ARABIC LETTER LAM +0644 06BE ; [.2673.0020.0002][.FFEA.0000.0000] # +0645 ; [.2673.0020.0002][.FFEB.0000.0000] # ARABIC LETTER MEEM +0645 06BE ; [.2673.0020.0002][.FFEC.0000.0000] # +0646 ; [.2673.0020.0002][.FFED.0000.0000] # ARABIC LETTER NOON +0646 06BE ; [.2673.0020.0002][.FFEE.0000.0000] # +06BA ; [.2673.0020.0002][.FFEF.0000.0000] # ARABIC LETTER NOON GHUNNA +06BA 06BE ; [.2673.0020.0002][.FFF0.0000.0000] # +0648 ; [.2673.0020.0002][.FFF1.0000.0000] # ARABIC LETTER WAW +0624 ; [.2673.0021.0002][.FFF1.0000.0000] # ARABIC LETTER WAW WITH HAMZA ABOVE +0648 0654 ; [.2673.0021.0002][.FFF1.0000.0000] # ARABIC LETTER WAW WITH HAMZA ABOVE +0648 06BE ; [.2673.0020.0002][.FFF2.0000.0000] # +06C1 ; [.2673.0020.0002][.FFF3.0000.0000] # ARABIC LETTER HEH GOAL +06C2 ; [.2673.0021.0002][.FFF3.0000.0000] # ARABIC LETTER HEH GOAL WITH HAMZA ABOVE +06C1 0654 ; [.2673.0021.0002][.FFF3.0000.0000] # ARABIC LETTER HEH GOAL WITH HAMZA ABOVE +06BE ; [.2673.0020.0002][.FFF4.0000.0000] # ARABIC LETTER HEH DOACHASHMEE +06C3 ; [.2673.0020.0002][.FFF5.0000.0000] # ARABIC LETTER TEH MARBUTA GOAL +0621 ; [.2673.0020.0002][.FFF6.0000.0000] # ARABIC LETTER HAMZA +06CC ; [.2673.0020.0002][.FFF7.0000.0000] # ARABIC LETTER FARSI YEH +0626 ; [.2673.0021.0002][.FFF7.0000.0000] # ARABIC LETTER YEH WITH HAMZA ABOVE +064A 0654 ; [.2673.0021.0002][.FFF7.0000.0000] # ARABIC LETTER YEH WITH HAMZA ABOVE +06CC 06BE ; [.2673.0020.0002][.FFF8.0000.0000] # +06D2 ; [.2673.0020.0002][.FFF9.0000.0000] # ARABIC LETTER YEH BARREE +06D3 ; [.2673.0021.0002][.FFF9.0000.0000] # ARABIC LETTER YEH BARREE WITH HAMZA ABOVE +06D2 0654 ; [.2673.0021.0002][.FFF9.0000.0000] # ARABIC LETTER YEH BARREE WITH HAMZA ABOVE +066E ; [.2673.0020.0002][.FFFA.0000.0000] # ARABIC LETTER DOTLESS BEH 0652 ; [.0000.0074.0002] # ARABIC SUKUN 064E ; [.0000.0075.0002] # ARABIC FATHA 0650 ; [.0000.0076.0002] # ARABIC KASRA diff --git a/gnu/usr.bin/perl/cpan/Unicode-Collate/Collate/Locale/vi.pl b/gnu/usr.bin/perl/cpan/Unicode-Collate/Collate/Locale/vi.pl index 7070fe2de47..f729103a1d2 100644 --- a/gnu/usr.bin/perl/cpan/Unicode-Collate/Collate/Locale/vi.pl +++ b/gnu/usr.bin/perl/cpan/Unicode-Collate/Collate/Locale/vi.pl @@ -1,220 +1,220 @@ +{ - locale_version => 1.27, + locale_version => 1.31, # 0306 is not a Vietnamese tone, just to avoid \x{306} eq. to something. - entry => <<'ENTRY', # for DUCET v10.0.0 + entry => <<'ENTRY', # for DUCET v13.0.0 0309 ; [.0000.0026.0002][.0000.00F0.0000] # COMBINING HOOK ABOVE -1EA3 ; [.1CAD.0020.0002][.0000.0026.0002][.0000.00F0.0000] # LATIN SMALL LETTER A WITH HOOK ABOVE -1EA2 ; [.1CAD.0020.0008][.0000.0026.0002][.0000.00F0.0000] # LATIN CAPITAL LETTER A WITH HOOK ABOVE -1EBB ; [.1D10.0020.0002][.0000.0026.0002][.0000.00F0.0000] # LATIN SMALL LETTER E WITH HOOK ABOVE -1EBA ; [.1D10.0020.0008][.0000.0026.0002][.0000.00F0.0000] # LATIN CAPITAL LETTER E WITH HOOK ABOVE -1EC9 ; [.1D98.0020.0002][.0000.0026.0002][.0000.00F0.0000] # LATIN SMALL LETTER I WITH HOOK ABOVE -1EC8 ; [.1D98.0020.0008][.0000.0026.0002][.0000.00F0.0000] # LATIN CAPITAL LETTER I WITH HOOK ABOVE -1ECF ; [.1E43.0020.0002][.0000.0026.0002][.0000.00F0.0000] # LATIN SMALL LETTER O WITH HOOK ABOVE -1ECE ; [.1E43.0020.0008][.0000.0026.0002][.0000.00F0.0000] # LATIN CAPITAL LETTER O WITH HOOK ABOVE -1EE7 ; [.1F1B.0020.0002][.0000.0026.0002][.0000.00F0.0000] # LATIN SMALL LETTER U WITH HOOK ABOVE -1EE6 ; [.1F1B.0020.0008][.0000.0026.0002][.0000.00F0.0000] # LATIN CAPITAL LETTER U WITH HOOK ABOVE -1EF7 ; [.1F71.0020.0002][.0000.0026.0002][.0000.00F0.0000] # LATIN SMALL LETTER Y WITH HOOK ABOVE -1EF6 ; [.1F71.0020.0008][.0000.0026.0002][.0000.00F0.0000] # LATIN CAPITAL LETTER Y WITH HOOK ABOVE +1EA3 ; [.1FA2.0020.0002][.0000.0026.0002][.0000.00F0.0000] # LATIN SMALL LETTER A WITH HOOK ABOVE +1EA2 ; [.1FA2.0020.0008][.0000.0026.0002][.0000.00F0.0000] # LATIN CAPITAL LETTER A WITH HOOK ABOVE +1EBB ; [.2007.0020.0002][.0000.0026.0002][.0000.00F0.0000] # LATIN SMALL LETTER E WITH HOOK ABOVE +1EBA ; [.2007.0020.0008][.0000.0026.0002][.0000.00F0.0000] # LATIN CAPITAL LETTER E WITH HOOK ABOVE +1EC9 ; [.2090.0020.0002][.0000.0026.0002][.0000.00F0.0000] # LATIN SMALL LETTER I WITH HOOK ABOVE +1EC8 ; [.2090.0020.0008][.0000.0026.0002][.0000.00F0.0000] # LATIN CAPITAL LETTER I WITH HOOK ABOVE +1ECF ; [.213C.0020.0002][.0000.0026.0002][.0000.00F0.0000] # LATIN SMALL LETTER O WITH HOOK ABOVE +1ECE ; [.213C.0020.0008][.0000.0026.0002][.0000.00F0.0000] # LATIN CAPITAL LETTER O WITH HOOK ABOVE +1EE7 ; [.2217.0020.0002][.0000.0026.0002][.0000.00F0.0000] # LATIN SMALL LETTER U WITH HOOK ABOVE +1EE6 ; [.2217.0020.0008][.0000.0026.0002][.0000.00F0.0000] # LATIN CAPITAL LETTER U WITH HOOK ABOVE +1EF7 ; [.2270.0020.0002][.0000.0026.0002][.0000.00F0.0000] # LATIN SMALL LETTER Y WITH HOOK ABOVE +1EF6 ; [.2270.0020.0008][.0000.0026.0002][.0000.00F0.0000] # LATIN CAPITAL LETTER Y WITH HOOK ABOVE 0303 ; [.0000.0026.0002][.0000.00F1.0000] # COMBINING TILDE -00E3 ; [.1CAD.0020.0002][.0000.0026.0002][.0000.00F1.0000] # LATIN SMALL LETTER A WITH TILDE -00C3 ; [.1CAD.0020.0008][.0000.0026.0002][.0000.00F1.0000] # LATIN CAPITAL LETTER A WITH TILDE -1EBD ; [.1D10.0020.0002][.0000.0026.0002][.0000.00F1.0000] # LATIN SMALL LETTER E WITH TILDE -1EBC ; [.1D10.0020.0008][.0000.0026.0002][.0000.00F1.0000] # LATIN CAPITAL LETTER E WITH TILDE -0129 ; [.1D98.0020.0002][.0000.0026.0002][.0000.00F1.0000] # LATIN SMALL LETTER I WITH TILDE -0128 ; [.1D98.0020.0008][.0000.0026.0002][.0000.00F1.0000] # LATIN CAPITAL LETTER I WITH TILDE -00F5 ; [.1E43.0020.0002][.0000.0026.0002][.0000.00F1.0000] # LATIN SMALL LETTER O WITH TILDE -00D5 ; [.1E43.0020.0008][.0000.0026.0002][.0000.00F1.0000] # LATIN CAPITAL LETTER O WITH TILDE -0169 ; [.1F1B.0020.0002][.0000.0026.0002][.0000.00F1.0000] # LATIN SMALL LETTER U WITH TILDE -0168 ; [.1F1B.0020.0008][.0000.0026.0002][.0000.00F1.0000] # LATIN CAPITAL LETTER U WITH TILDE -1EF9 ; [.1F71.0020.0002][.0000.0026.0002][.0000.00F1.0000] # LATIN SMALL LETTER Y WITH TILDE -1EF8 ; [.1F71.0020.0008][.0000.0026.0002][.0000.00F1.0000] # LATIN CAPITAL LETTER Y WITH TILDE +00E3 ; [.1FA2.0020.0002][.0000.0026.0002][.0000.00F1.0000] # LATIN SMALL LETTER A WITH TILDE +00C3 ; [.1FA2.0020.0008][.0000.0026.0002][.0000.00F1.0000] # LATIN CAPITAL LETTER A WITH TILDE +1EBD ; [.2007.0020.0002][.0000.0026.0002][.0000.00F1.0000] # LATIN SMALL LETTER E WITH TILDE +1EBC ; [.2007.0020.0008][.0000.0026.0002][.0000.00F1.0000] # LATIN CAPITAL LETTER E WITH TILDE +0129 ; [.2090.0020.0002][.0000.0026.0002][.0000.00F1.0000] # LATIN SMALL LETTER I WITH TILDE +0128 ; [.2090.0020.0008][.0000.0026.0002][.0000.00F1.0000] # LATIN CAPITAL LETTER I WITH TILDE +00F5 ; [.213C.0020.0002][.0000.0026.0002][.0000.00F1.0000] # LATIN SMALL LETTER O WITH TILDE +00D5 ; [.213C.0020.0008][.0000.0026.0002][.0000.00F1.0000] # LATIN CAPITAL LETTER O WITH TILDE +0169 ; [.2217.0020.0002][.0000.0026.0002][.0000.00F1.0000] # LATIN SMALL LETTER U WITH TILDE +0168 ; [.2217.0020.0008][.0000.0026.0002][.0000.00F1.0000] # LATIN CAPITAL LETTER U WITH TILDE +1EF9 ; [.2270.0020.0002][.0000.0026.0002][.0000.00F1.0000] # LATIN SMALL LETTER Y WITH TILDE +1EF8 ; [.2270.0020.0008][.0000.0026.0002][.0000.00F1.0000] # LATIN CAPITAL LETTER Y WITH TILDE 0301 ; [.0000.0026.0002][.0000.00F2.0000] # COMBINING ACUTE ACCENT -00E1 ; [.1CAD.0020.0002][.0000.0026.0002][.0000.00F2.0000] # LATIN SMALL LETTER A WITH ACUTE -00C1 ; [.1CAD.0020.0008][.0000.0026.0002][.0000.00F2.0000] # LATIN CAPITAL LETTER A WITH ACUTE -00E9 ; [.1D10.0020.0002][.0000.0026.0002][.0000.00F2.0000] # LATIN SMALL LETTER E WITH ACUTE -00C9 ; [.1D10.0020.0008][.0000.0026.0002][.0000.00F2.0000] # LATIN CAPITAL LETTER E WITH ACUTE -00ED ; [.1D98.0020.0002][.0000.0026.0002][.0000.00F2.0000] # LATIN SMALL LETTER I WITH ACUTE -00CD ; [.1D98.0020.0008][.0000.0026.0002][.0000.00F2.0000] # LATIN CAPITAL LETTER I WITH ACUTE -00F3 ; [.1E43.0020.0002][.0000.0026.0002][.0000.00F2.0000] # LATIN SMALL LETTER O WITH ACUTE -00D3 ; [.1E43.0020.0008][.0000.0026.0002][.0000.00F2.0000] # LATIN CAPITAL LETTER O WITH ACUTE -00FA ; [.1F1B.0020.0002][.0000.0026.0002][.0000.00F2.0000] # LATIN SMALL LETTER U WITH ACUTE -00DA ; [.1F1B.0020.0008][.0000.0026.0002][.0000.00F2.0000] # LATIN CAPITAL LETTER U WITH ACUTE -00FD ; [.1F71.0020.0002][.0000.0026.0002][.0000.00F2.0000] # LATIN SMALL LETTER Y WITH ACUTE -00DD ; [.1F71.0020.0008][.0000.0026.0002][.0000.00F2.0000] # LATIN CAPITAL LETTER Y WITH ACUTE +00E1 ; [.1FA2.0020.0002][.0000.0026.0002][.0000.00F2.0000] # LATIN SMALL LETTER A WITH ACUTE +00C1 ; [.1FA2.0020.0008][.0000.0026.0002][.0000.00F2.0000] # LATIN CAPITAL LETTER A WITH ACUTE +00E9 ; [.2007.0020.0002][.0000.0026.0002][.0000.00F2.0000] # LATIN SMALL LETTER E WITH ACUTE +00C9 ; [.2007.0020.0008][.0000.0026.0002][.0000.00F2.0000] # LATIN CAPITAL LETTER E WITH ACUTE +00ED ; [.2090.0020.0002][.0000.0026.0002][.0000.00F2.0000] # LATIN SMALL LETTER I WITH ACUTE +00CD ; [.2090.0020.0008][.0000.0026.0002][.0000.00F2.0000] # LATIN CAPITAL LETTER I WITH ACUTE +00F3 ; [.213C.0020.0002][.0000.0026.0002][.0000.00F2.0000] # LATIN SMALL LETTER O WITH ACUTE +00D3 ; [.213C.0020.0008][.0000.0026.0002][.0000.00F2.0000] # LATIN CAPITAL LETTER O WITH ACUTE +00FA ; [.2217.0020.0002][.0000.0026.0002][.0000.00F2.0000] # LATIN SMALL LETTER U WITH ACUTE +00DA ; [.2217.0020.0008][.0000.0026.0002][.0000.00F2.0000] # LATIN CAPITAL LETTER U WITH ACUTE +00FD ; [.2270.0020.0002][.0000.0026.0002][.0000.00F2.0000] # LATIN SMALL LETTER Y WITH ACUTE +00DD ; [.2270.0020.0008][.0000.0026.0002][.0000.00F2.0000] # LATIN CAPITAL LETTER Y WITH ACUTE 0341 ; [.0000.0026.0002][.0000.00F2.0000] # COMBINING ACUTE TONE MARK 0323 ; [.0000.0026.0002][.0000.00F3.0000] # COMBINING DOT BELOW -1EA1 ; [.1CAD.0020.0002][.0000.0026.0002][.0000.00F3.0000] # LATIN SMALL LETTER A WITH DOT BELOW -1EA0 ; [.1CAD.0020.0008][.0000.0026.0002][.0000.00F3.0000] # LATIN CAPITAL LETTER A WITH DOT BELOW -1EB9 ; [.1D10.0020.0002][.0000.0026.0002][.0000.00F3.0000] # LATIN SMALL LETTER E WITH DOT BELOW -1EB8 ; [.1D10.0020.0008][.0000.0026.0002][.0000.00F3.0000] # LATIN CAPITAL LETTER E WITH DOT BELOW -1ECB ; [.1D98.0020.0002][.0000.0026.0002][.0000.00F3.0000] # LATIN SMALL LETTER I WITH DOT BELOW -1ECA ; [.1D98.0020.0008][.0000.0026.0002][.0000.00F3.0000] # LATIN CAPITAL LETTER I WITH DOT BELOW -1ECD ; [.1E43.0020.0002][.0000.0026.0002][.0000.00F3.0000] # LATIN SMALL LETTER O WITH DOT BELOW -1ECC ; [.1E43.0020.0008][.0000.0026.0002][.0000.00F3.0000] # LATIN CAPITAL LETTER O WITH DOT BELOW -1EE5 ; [.1F1B.0020.0002][.0000.0026.0002][.0000.00F3.0000] # LATIN SMALL LETTER U WITH DOT BELOW -1EE4 ; [.1F1B.0020.0008][.0000.0026.0002][.0000.00F3.0000] # LATIN CAPITAL LETTER U WITH DOT BELOW -1EF5 ; [.1F71.0020.0002][.0000.0026.0002][.0000.00F3.0000] # LATIN SMALL LETTER Y WITH DOT BELOW -1EF4 ; [.1F71.0020.0008][.0000.0026.0002][.0000.00F3.0000] # LATIN CAPITAL LETTER Y WITH DOT BELOW +1EA1 ; [.1FA2.0020.0002][.0000.0026.0002][.0000.00F3.0000] # LATIN SMALL LETTER A WITH DOT BELOW +1EA0 ; [.1FA2.0020.0008][.0000.0026.0002][.0000.00F3.0000] # LATIN CAPITAL LETTER A WITH DOT BELOW +1EB9 ; [.2007.0020.0002][.0000.0026.0002][.0000.00F3.0000] # LATIN SMALL LETTER E WITH DOT BELOW +1EB8 ; [.2007.0020.0008][.0000.0026.0002][.0000.00F3.0000] # LATIN CAPITAL LETTER E WITH DOT BELOW +1ECB ; [.2090.0020.0002][.0000.0026.0002][.0000.00F3.0000] # LATIN SMALL LETTER I WITH DOT BELOW +1ECA ; [.2090.0020.0008][.0000.0026.0002][.0000.00F3.0000] # LATIN CAPITAL LETTER I WITH DOT BELOW +1ECD ; [.213C.0020.0002][.0000.0026.0002][.0000.00F3.0000] # LATIN SMALL LETTER O WITH DOT BELOW +1ECC ; [.213C.0020.0008][.0000.0026.0002][.0000.00F3.0000] # LATIN CAPITAL LETTER O WITH DOT BELOW +1EE5 ; [.2217.0020.0002][.0000.0026.0002][.0000.00F3.0000] # LATIN SMALL LETTER U WITH DOT BELOW +1EE4 ; [.2217.0020.0008][.0000.0026.0002][.0000.00F3.0000] # LATIN CAPITAL LETTER U WITH DOT BELOW +1EF5 ; [.2270.0020.0002][.0000.0026.0002][.0000.00F3.0000] # LATIN SMALL LETTER Y WITH DOT BELOW +1EF4 ; [.2270.0020.0008][.0000.0026.0002][.0000.00F3.0000] # LATIN CAPITAL LETTER Y WITH DOT BELOW 0306 ; [.0000.0026.0002][.0000.00F4.0000] # COMBINING BREVE -0115 ; [.1D10.0020.0002][.0000.0026.0002][.0000.00F4.0000] # LATIN SMALL LETTER E WITH BREVE -0114 ; [.1D10.0020.0008][.0000.0026.0002][.0000.00F4.0000] # LATIN CAPITAL LETTER E WITH BREVE -012D ; [.1D98.0020.0002][.0000.0026.0002][.0000.00F4.0000] # LATIN SMALL LETTER I WITH BREVE -012C ; [.1D98.0020.0008][.0000.0026.0002][.0000.00F4.0000] # LATIN CAPITAL LETTER I WITH BREVE -014F ; [.1E43.0020.0002][.0000.0026.0002][.0000.00F4.0000] # LATIN SMALL LETTER O WITH BREVE -014E ; [.1E43.0020.0008][.0000.0026.0002][.0000.00F4.0000] # LATIN CAPITAL LETTER O WITH BREVE -016D ; [.1F1B.0020.0002][.0000.0026.0002][.0000.00F4.0000] # LATIN SMALL LETTER U WITH BREVE -016C ; [.1F1B.0020.0008][.0000.0026.0002][.0000.00F4.0000] # LATIN CAPITAL LETTER U WITH BREVE -0103 ; [.1CAE.0020.0002] # LATIN SMALL LETTER A WITH BREVE -0061 0306 ; [.1CAE.0020.0002] # LATIN SMALL LETTER A WITH BREVE -0102 ; [.1CAE.0020.0008] # LATIN CAPITAL LETTER A WITH BREVE -0041 0306 ; [.1CAE.0020.0008] # LATIN CAPITAL LETTER A WITH BREVE -1EB1 ; [.1CAE.0020.0002][.0000.0025.0002] # LATIN SMALL LETTER A WITH BREVE AND GRAVE -1EB0 ; [.1CAE.0020.0008][.0000.0025.0002] # LATIN CAPITAL LETTER A WITH BREVE AND GRAVE -1EAF ; [.1CAE.0020.0002][.0000.0026.0002][.0000.00F2.0000] # LATIN SMALL LETTER A WITH BREVE AND ACUTE -1EAE ; [.1CAE.0020.0008][.0000.0026.0002][.0000.00F2.0000] # LATIN CAPITAL LETTER A WITH BREVE AND ACUTE -1EB5 ; [.1CAE.0020.0002][.0000.0026.0002][.0000.00F1.0000] # LATIN SMALL LETTER A WITH BREVE AND TILDE -1EB4 ; [.1CAE.0020.0008][.0000.0026.0002][.0000.00F1.0000] # LATIN CAPITAL LETTER A WITH BREVE AND TILDE -1EB3 ; [.1CAE.0020.0002][.0000.0026.0002][.0000.00F0.0000] # LATIN SMALL LETTER A WITH BREVE AND HOOK ABOVE -1EB2 ; [.1CAE.0020.0008][.0000.0026.0002][.0000.00F0.0000] # LATIN CAPITAL LETTER A WITH BREVE AND HOOK ABOVE -1EB7 ; [.1CAE.0020.0002][.0000.0026.0002][.0000.00F3.0000] # LATIN SMALL LETTER A WITH BREVE AND DOT BELOW -1EB6 ; [.1CAE.0020.0008][.0000.0026.0002][.0000.00F3.0000] # LATIN CAPITAL LETTER A WITH BREVE AND DOT BELOW -00E2 ; [.1CAF.0020.0002] # LATIN SMALL LETTER A WITH CIRCUMFLEX -0061 0302 ; [.1CAF.0020.0002] # LATIN SMALL LETTER A WITH CIRCUMFLEX -00C2 ; [.1CAF.0020.0008] # LATIN CAPITAL LETTER A WITH CIRCUMFLEX -0041 0302 ; [.1CAF.0020.0008] # LATIN CAPITAL LETTER A WITH CIRCUMFLEX -1EA7 ; [.1CAF.0020.0002][.0000.0025.0002] # LATIN SMALL LETTER A WITH CIRCUMFLEX AND GRAVE -1EA6 ; [.1CAF.0020.0008][.0000.0025.0002] # LATIN CAPITAL LETTER A WITH CIRCUMFLEX AND GRAVE -1EA5 ; [.1CAF.0020.0002][.0000.0026.0002][.0000.00F2.0000] # LATIN SMALL LETTER A WITH CIRCUMFLEX AND ACUTE -1EA4 ; [.1CAF.0020.0008][.0000.0026.0002][.0000.00F2.0000] # LATIN CAPITAL LETTER A WITH CIRCUMFLEX AND ACUTE -1EAB ; [.1CAF.0020.0002][.0000.0026.0002][.0000.00F1.0000] # LATIN SMALL LETTER A WITH CIRCUMFLEX AND TILDE -1EAA ; [.1CAF.0020.0008][.0000.0026.0002][.0000.00F1.0000] # LATIN CAPITAL LETTER A WITH CIRCUMFLEX AND TILDE -1EA9 ; [.1CAF.0020.0002][.0000.0026.0002][.0000.00F0.0000] # LATIN SMALL LETTER A WITH CIRCUMFLEX AND HOOK ABOVE -1EA8 ; [.1CAF.0020.0008][.0000.0026.0002][.0000.00F0.0000] # LATIN CAPITAL LETTER A WITH CIRCUMFLEX AND HOOK ABOVE -1EAD ; [.1CAF.0020.0002][.0000.0026.0002][.0000.00F3.0000] # LATIN SMALL LETTER A WITH CIRCUMFLEX AND DOT BELOW -1EAC ; [.1CAF.0020.0008][.0000.0026.0002][.0000.00F3.0000] # LATIN CAPITAL LETTER A WITH CIRCUMFLEX AND DOT BELOW -0111 ; [.1CF6.0020.0002] # LATIN SMALL LETTER D WITH STROKE -0064 0335 ; [.1CF6.0020.0002] # LATIN SMALL LETTER D WITH STROKE -0110 ; [.1CF6.0020.0008] # LATIN CAPITAL LETTER D WITH STROKE -0044 0335 ; [.1CF6.0020.0008] # LATIN CAPITAL LETTER D WITH STROKE -00EA ; [.1D11.0020.0002] # LATIN SMALL LETTER E WITH CIRCUMFLEX -0065 0302 ; [.1D11.0020.0002] # LATIN SMALL LETTER E WITH CIRCUMFLEX -00CA ; [.1D11.0020.0008] # LATIN CAPITAL LETTER E WITH CIRCUMFLEX -0045 0302 ; [.1D11.0020.0008] # LATIN CAPITAL LETTER E WITH CIRCUMFLEX -1EC1 ; [.1D11.0020.0002][.0000.0025.0002] # LATIN SMALL LETTER E WITH CIRCUMFLEX AND GRAVE -1EC0 ; [.1D11.0020.0008][.0000.0025.0002] # LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND GRAVE -1EBF ; [.1D11.0020.0002][.0000.0026.0002][.0000.00F2.0000] # LATIN SMALL LETTER E WITH CIRCUMFLEX AND ACUTE -1EBE ; [.1D11.0020.0008][.0000.0026.0002][.0000.00F2.0000] # LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND ACUTE -1EC5 ; [.1D11.0020.0002][.0000.0026.0002][.0000.00F1.0000] # LATIN SMALL LETTER E WITH CIRCUMFLEX AND TILDE -1EC4 ; [.1D11.0020.0008][.0000.0026.0002][.0000.00F1.0000] # LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND TILDE -1EC3 ; [.1D11.0020.0002][.0000.0026.0002][.0000.00F0.0000] # LATIN SMALL LETTER E WITH CIRCUMFLEX AND HOOK ABOVE -1EC2 ; [.1D11.0020.0008][.0000.0026.0002][.0000.00F0.0000] # LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND HOOK ABOVE -1EC7 ; [.1D11.0020.0002][.0000.0026.0002][.0000.00F3.0000] # LATIN SMALL LETTER E WITH CIRCUMFLEX AND DOT BELOW -1EC6 ; [.1D11.0020.0008][.0000.0026.0002][.0000.00F3.0000] # LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND DOT BELOW -00F4 ; [.1E44.0020.0002] # LATIN SMALL LETTER O WITH CIRCUMFLEX -006F 0302 ; [.1E44.0020.0002] # LATIN SMALL LETTER O WITH CIRCUMFLEX -00D4 ; [.1E44.0020.0008] # LATIN CAPITAL LETTER O WITH CIRCUMFLEX -004F 0302 ; [.1E44.0020.0008] # LATIN CAPITAL LETTER O WITH CIRCUMFLEX -1ED3 ; [.1E44.0020.0002][.0000.0025.0002] # LATIN SMALL LETTER O WITH CIRCUMFLEX AND GRAVE -1ED2 ; [.1E44.0020.0008][.0000.0025.0002] # LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND GRAVE -1ED1 ; [.1E44.0020.0002][.0000.0026.0002][.0000.00F2.0000] # LATIN SMALL LETTER O WITH CIRCUMFLEX AND ACUTE -1ED0 ; [.1E44.0020.0008][.0000.0026.0002][.0000.00F2.0000] # LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND ACUTE -1ED7 ; [.1E44.0020.0002][.0000.0026.0002][.0000.00F1.0000] # LATIN SMALL LETTER O WITH CIRCUMFLEX AND TILDE -1ED6 ; [.1E44.0020.0008][.0000.0026.0002][.0000.00F1.0000] # LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND TILDE -1ED5 ; [.1E44.0020.0002][.0000.0026.0002][.0000.00F0.0000] # LATIN SMALL LETTER O WITH CIRCUMFLEX AND HOOK ABOVE -1ED4 ; [.1E44.0020.0008][.0000.0026.0002][.0000.00F0.0000] # LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND HOOK ABOVE -1ED9 ; [.1E44.0020.0002][.0000.0026.0002][.0000.00F3.0000] # LATIN SMALL LETTER O WITH CIRCUMFLEX AND DOT BELOW -1ED8 ; [.1E44.0020.0008][.0000.0026.0002][.0000.00F3.0000] # LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND DOT BELOW -01A1 ; [.1E45.0020.0002] # LATIN SMALL LETTER O WITH HORN -006F 031B ; [.1E45.0020.0002] # LATIN SMALL LETTER O WITH HORN -01A0 ; [.1E45.0020.0008] # LATIN CAPITAL LETTER O WITH HORN -004F 031B ; [.1E45.0020.0008] # LATIN CAPITAL LETTER O WITH HORN -1EDD ; [.1E45.0020.0002][.0000.0025.0002] # LATIN SMALL LETTER O WITH HORN AND GRAVE -1EDC ; [.1E45.0020.0008][.0000.0025.0002] # LATIN CAPITAL LETTER O WITH HORN AND GRAVE -1EDB ; [.1E45.0020.0002][.0000.0026.0002][.0000.00F2.0000] # LATIN SMALL LETTER O WITH HORN AND ACUTE -1EDA ; [.1E45.0020.0008][.0000.0026.0002][.0000.00F2.0000] # LATIN CAPITAL LETTER O WITH HORN AND ACUTE -1EE1 ; [.1E45.0020.0002][.0000.0026.0002][.0000.00F1.0000] # LATIN SMALL LETTER O WITH HORN AND TILDE -1EE0 ; [.1E45.0020.0008][.0000.0026.0002][.0000.00F1.0000] # LATIN CAPITAL LETTER O WITH HORN AND TILDE -1EDF ; [.1E45.0020.0002][.0000.0026.0002][.0000.00F0.0000] # LATIN SMALL LETTER O WITH HORN AND HOOK ABOVE -1EDE ; [.1E45.0020.0008][.0000.0026.0002][.0000.00F0.0000] # LATIN CAPITAL LETTER O WITH HORN AND HOOK ABOVE -1EE3 ; [.1E45.0020.0002][.0000.0026.0002][.0000.00F3.0000] # LATIN SMALL LETTER O WITH HORN AND DOT BELOW -1EE2 ; [.1E45.0020.0008][.0000.0026.0002][.0000.00F3.0000] # LATIN CAPITAL LETTER O WITH HORN AND DOT BELOW -01B0 ; [.1F1C.0020.0002] # LATIN SMALL LETTER U WITH HORN -0075 031B ; [.1F1C.0020.0002] # LATIN SMALL LETTER U WITH HORN -01AF ; [.1F1C.0020.0008] # LATIN CAPITAL LETTER U WITH HORN -0055 031B ; [.1F1C.0020.0008] # LATIN CAPITAL LETTER U WITH HORN -1EEB ; [.1F1C.0020.0002][.0000.0025.0002] # LATIN SMALL LETTER U WITH HORN AND GRAVE -1EEA ; [.1F1C.0020.0008][.0000.0025.0002] # LATIN CAPITAL LETTER U WITH HORN AND GRAVE -1EE9 ; [.1F1C.0020.0002][.0000.0026.0002][.0000.00F2.0000] # LATIN SMALL LETTER U WITH HORN AND ACUTE -1EE8 ; [.1F1C.0020.0008][.0000.0026.0002][.0000.00F2.0000] # LATIN CAPITAL LETTER U WITH HORN AND ACUTE -1EEF ; [.1F1C.0020.0002][.0000.0026.0002][.0000.00F1.0000] # LATIN SMALL LETTER U WITH HORN AND TILDE -1EEE ; [.1F1C.0020.0008][.0000.0026.0002][.0000.00F1.0000] # LATIN CAPITAL LETTER U WITH HORN AND TILDE -1EED ; [.1F1C.0020.0002][.0000.0026.0002][.0000.00F0.0000] # LATIN SMALL LETTER U WITH HORN AND HOOK ABOVE -1EEC ; [.1F1C.0020.0008][.0000.0026.0002][.0000.00F0.0000] # LATIN CAPITAL LETTER U WITH HORN AND HOOK ABOVE -1EF1 ; [.1F1C.0020.0002][.0000.0026.0002][.0000.00F3.0000] # LATIN SMALL LETTER U WITH HORN AND DOT BELOW -1EF0 ; [.1F1C.0020.0008][.0000.0026.0002][.0000.00F3.0000] # LATIN CAPITAL LETTER U WITH HORN AND DOT BELOW -1EA1 0306 ; [.1CAE.0020.0002][.0000.0026.0002][.0000.00F3.0000] # -1EA0 0306 ; [.1CAE.0020.0008][.0000.0026.0002][.0000.00F3.0000] # -1EA1 0302 ; [.1CAF.0020.0002][.0000.0026.0002][.0000.00F3.0000] # -1EA0 0302 ; [.1CAF.0020.0008][.0000.0026.0002][.0000.00F3.0000] # -1EB9 0302 ; [.1D11.0020.0002][.0000.0026.0002][.0000.00F3.0000] # -1EB8 0302 ; [.1D11.0020.0008][.0000.0026.0002][.0000.00F3.0000] # -1ECD 0302 ; [.1E44.0020.0002][.0000.0026.0002][.0000.00F3.0000] # -1ECC 0302 ; [.1E44.0020.0008][.0000.0026.0002][.0000.00F3.0000] # -00F2 031B ; [.1E45.0020.0002][.0000.0025.0002] # -1ECF 031B ; [.1E45.0020.0002][.0000.0026.0002][.0000.00F0.0000] # -00F5 031B ; [.1E45.0020.0002][.0000.0026.0002][.0000.00F1.0000] # -00F3 031B ; [.1E45.0020.0002][.0000.0026.0002][.0000.00F2.0000] # -1ECD 031B ; [.1E45.0020.0002][.0000.0026.0002][.0000.00F3.0000] # -00D2 031B ; [.1E45.0020.0008][.0000.0025.0002] # -1ECE 031B ; [.1E45.0020.0008][.0000.0026.0002][.0000.00F0.0000] # -00D5 031B ; [.1E45.0020.0008][.0000.0026.0002][.0000.00F1.0000] # -00D3 031B ; [.1E45.0020.0008][.0000.0026.0002][.0000.00F2.0000] # -1ECC 031B ; [.1E45.0020.0008][.0000.0026.0002][.0000.00F3.0000] # -00F9 031B ; [.1F1C.0020.0002][.0000.0025.0002] # -1EE7 031B ; [.1F1C.0020.0002][.0000.0026.0002][.0000.00F0.0000] # -0169 031B ; [.1F1C.0020.0002][.0000.0026.0002][.0000.00F1.0000] # -00FA 031B ; [.1F1C.0020.0002][.0000.0026.0002][.0000.00F2.0000] # -1EE5 031B ; [.1F1C.0020.0002][.0000.0026.0002][.0000.00F3.0000] # -00D9 031B ; [.1F1C.0020.0008][.0000.0025.0002] # -1EE6 031B ; [.1F1C.0020.0008][.0000.0026.0002][.0000.00F0.0000] # -0168 031B ; [.1F1C.0020.0008][.0000.0026.0002][.0000.00F1.0000] # -00DA 031B ; [.1F1C.0020.0008][.0000.0026.0002][.0000.00F2.0000] # -1EE4 031B ; [.1F1C.0020.0008][.0000.0026.0002][.0000.00F3.0000] # -0061 0323 0306 ; [.1CAE.0020.0002][.0000.0026.0002][.0000.00F3.0000] # -0041 0323 0306 ; [.1CAE.0020.0008][.0000.0026.0002][.0000.00F3.0000] # -0061 0323 0302 ; [.1CAF.0020.0002][.0000.0026.0002][.0000.00F3.0000] # -0041 0323 0302 ; [.1CAF.0020.0008][.0000.0026.0002][.0000.00F3.0000] # -0065 0323 0302 ; [.1D11.0020.0002][.0000.0026.0002][.0000.00F3.0000] # -0045 0323 0302 ; [.1D11.0020.0008][.0000.0026.0002][.0000.00F3.0000] # -006F 0323 0302 ; [.1E44.0020.0002][.0000.0026.0002][.0000.00F3.0000] # -004F 0323 0302 ; [.1E44.0020.0008][.0000.0026.0002][.0000.00F3.0000] # -006F 0300 031B ; [.1E45.0020.0002][.0000.0025.0002] # -006F 0340 031B ; [.1E45.0020.0002][.0000.0025.0002] # -006F 0309 031B ; [.1E45.0020.0002][.0000.0026.0002][.0000.00F0.0000] # -006F 0303 031B ; [.1E45.0020.0002][.0000.0026.0002][.0000.00F1.0000] # -006F 0301 031B ; [.1E45.0020.0002][.0000.0026.0002][.0000.00F2.0000] # -006F 0341 031B ; [.1E45.0020.0002][.0000.0026.0002][.0000.00F2.0000] # -006F 0323 031B ; [.1E45.0020.0002][.0000.0026.0002][.0000.00F3.0000] # -004F 0300 031B ; [.1E45.0020.0008][.0000.0025.0002] # -004F 0340 031B ; [.1E45.0020.0008][.0000.0025.0002] # -004F 0309 031B ; [.1E45.0020.0008][.0000.0026.0002][.0000.00F0.0000] # -004F 0303 031B ; [.1E45.0020.0008][.0000.0026.0002][.0000.00F1.0000] # -004F 0301 031B ; [.1E45.0020.0008][.0000.0026.0002][.0000.00F2.0000] # -004F 0341 031B ; [.1E45.0020.0008][.0000.0026.0002][.0000.00F2.0000] # -004F 0323 031B ; [.1E45.0020.0008][.0000.0026.0002][.0000.00F3.0000] # -0075 0300 031B ; [.1F1C.0020.0002][.0000.0025.0002] # -0075 0340 031B ; [.1F1C.0020.0002][.0000.0025.0002] # -0075 0309 031B ; [.1F1C.0020.0002][.0000.0026.0002][.0000.00F0.0000] # -0075 0303 031B ; [.1F1C.0020.0002][.0000.0026.0002][.0000.00F1.0000] # -0075 0301 031B ; [.1F1C.0020.0002][.0000.0026.0002][.0000.00F2.0000] # -0075 0341 031B ; [.1F1C.0020.0002][.0000.0026.0002][.0000.00F2.0000] # -0075 0323 031B ; [.1F1C.0020.0002][.0000.0026.0002][.0000.00F3.0000] # -0055 0300 031B ; [.1F1C.0020.0008][.0000.0025.0002] # -0055 0340 031B ; [.1F1C.0020.0008][.0000.0025.0002] # -0055 0309 031B ; [.1F1C.0020.0008][.0000.0026.0002][.0000.00F0.0000] # -0055 0303 031B ; [.1F1C.0020.0008][.0000.0026.0002][.0000.00F1.0000] # -0055 0301 031B ; [.1F1C.0020.0008][.0000.0026.0002][.0000.00F2.0000] # -0055 0341 031B ; [.1F1C.0020.0008][.0000.0026.0002][.0000.00F2.0000] # -0055 0323 031B ; [.1F1C.0020.0008][.0000.0026.0002][.0000.00F3.0000] # +0115 ; [.2007.0020.0002][.0000.0026.0002][.0000.00F4.0000] # LATIN SMALL LETTER E WITH BREVE +0114 ; [.2007.0020.0008][.0000.0026.0002][.0000.00F4.0000] # LATIN CAPITAL LETTER E WITH BREVE +012D ; [.2090.0020.0002][.0000.0026.0002][.0000.00F4.0000] # LATIN SMALL LETTER I WITH BREVE +012C ; [.2090.0020.0008][.0000.0026.0002][.0000.00F4.0000] # LATIN CAPITAL LETTER I WITH BREVE +014F ; [.213C.0020.0002][.0000.0026.0002][.0000.00F4.0000] # LATIN SMALL LETTER O WITH BREVE +014E ; [.213C.0020.0008][.0000.0026.0002][.0000.00F4.0000] # LATIN CAPITAL LETTER O WITH BREVE +016D ; [.2217.0020.0002][.0000.0026.0002][.0000.00F4.0000] # LATIN SMALL LETTER U WITH BREVE +016C ; [.2217.0020.0008][.0000.0026.0002][.0000.00F4.0000] # LATIN CAPITAL LETTER U WITH BREVE +0103 ; [.1FA3.0020.0002] # LATIN SMALL LETTER A WITH BREVE +0061 0306 ; [.1FA3.0020.0002] # LATIN SMALL LETTER A WITH BREVE +0102 ; [.1FA3.0020.0008] # LATIN CAPITAL LETTER A WITH BREVE +0041 0306 ; [.1FA3.0020.0008] # LATIN CAPITAL LETTER A WITH BREVE +1EB1 ; [.1FA3.0020.0002][.0000.0025.0002] # LATIN SMALL LETTER A WITH BREVE AND GRAVE +1EB0 ; [.1FA3.0020.0008][.0000.0025.0002] # LATIN CAPITAL LETTER A WITH BREVE AND GRAVE +1EAF ; [.1FA3.0020.0002][.0000.0026.0002][.0000.00F2.0000] # LATIN SMALL LETTER A WITH BREVE AND ACUTE +1EAE ; [.1FA3.0020.0008][.0000.0026.0002][.0000.00F2.0000] # LATIN CAPITAL LETTER A WITH BREVE AND ACUTE +1EB5 ; [.1FA3.0020.0002][.0000.0026.0002][.0000.00F1.0000] # LATIN SMALL LETTER A WITH BREVE AND TILDE +1EB4 ; [.1FA3.0020.0008][.0000.0026.0002][.0000.00F1.0000] # LATIN CAPITAL LETTER A WITH BREVE AND TILDE +1EB3 ; [.1FA3.0020.0002][.0000.0026.0002][.0000.00F0.0000] # LATIN SMALL LETTER A WITH BREVE AND HOOK ABOVE +1EB2 ; [.1FA3.0020.0008][.0000.0026.0002][.0000.00F0.0000] # LATIN CAPITAL LETTER A WITH BREVE AND HOOK ABOVE +1EB7 ; [.1FA3.0020.0002][.0000.0026.0002][.0000.00F3.0000] # LATIN SMALL LETTER A WITH BREVE AND DOT BELOW +1EB6 ; [.1FA3.0020.0008][.0000.0026.0002][.0000.00F3.0000] # LATIN CAPITAL LETTER A WITH BREVE AND DOT BELOW +00E2 ; [.1FA4.0020.0002] # LATIN SMALL LETTER A WITH CIRCUMFLEX +0061 0302 ; [.1FA4.0020.0002] # LATIN SMALL LETTER A WITH CIRCUMFLEX +00C2 ; [.1FA4.0020.0008] # LATIN CAPITAL LETTER A WITH CIRCUMFLEX +0041 0302 ; [.1FA4.0020.0008] # LATIN CAPITAL LETTER A WITH CIRCUMFLEX +1EA7 ; [.1FA4.0020.0002][.0000.0025.0002] # LATIN SMALL LETTER A WITH CIRCUMFLEX AND GRAVE +1EA6 ; [.1FA4.0020.0008][.0000.0025.0002] # LATIN CAPITAL LETTER A WITH CIRCUMFLEX AND GRAVE +1EA5 ; [.1FA4.0020.0002][.0000.0026.0002][.0000.00F2.0000] # LATIN SMALL LETTER A WITH CIRCUMFLEX AND ACUTE +1EA4 ; [.1FA4.0020.0008][.0000.0026.0002][.0000.00F2.0000] # LATIN CAPITAL LETTER A WITH CIRCUMFLEX AND ACUTE +1EAB ; [.1FA4.0020.0002][.0000.0026.0002][.0000.00F1.0000] # LATIN SMALL LETTER A WITH CIRCUMFLEX AND TILDE +1EAA ; [.1FA4.0020.0008][.0000.0026.0002][.0000.00F1.0000] # LATIN CAPITAL LETTER A WITH CIRCUMFLEX AND TILDE +1EA9 ; [.1FA4.0020.0002][.0000.0026.0002][.0000.00F0.0000] # LATIN SMALL LETTER A WITH CIRCUMFLEX AND HOOK ABOVE +1EA8 ; [.1FA4.0020.0008][.0000.0026.0002][.0000.00F0.0000] # LATIN CAPITAL LETTER A WITH CIRCUMFLEX AND HOOK ABOVE +1EAD ; [.1FA4.0020.0002][.0000.0026.0002][.0000.00F3.0000] # LATIN SMALL LETTER A WITH CIRCUMFLEX AND DOT BELOW +1EAC ; [.1FA4.0020.0008][.0000.0026.0002][.0000.00F3.0000] # LATIN CAPITAL LETTER A WITH CIRCUMFLEX AND DOT BELOW +0111 ; [.1FEC.0020.0002] # LATIN SMALL LETTER D WITH STROKE +0064 0335 ; [.1FEC.0020.0002] # LATIN SMALL LETTER D WITH STROKE +0110 ; [.1FEC.0020.0008] # LATIN CAPITAL LETTER D WITH STROKE +0044 0335 ; [.1FEC.0020.0008] # LATIN CAPITAL LETTER D WITH STROKE +00EA ; [.2008.0020.0002] # LATIN SMALL LETTER E WITH CIRCUMFLEX +0065 0302 ; [.2008.0020.0002] # LATIN SMALL LETTER E WITH CIRCUMFLEX +00CA ; [.2008.0020.0008] # LATIN CAPITAL LETTER E WITH CIRCUMFLEX +0045 0302 ; [.2008.0020.0008] # LATIN CAPITAL LETTER E WITH CIRCUMFLEX +1EC1 ; [.2008.0020.0002][.0000.0025.0002] # LATIN SMALL LETTER E WITH CIRCUMFLEX AND GRAVE +1EC0 ; [.2008.0020.0008][.0000.0025.0002] # LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND GRAVE +1EBF ; [.2008.0020.0002][.0000.0026.0002][.0000.00F2.0000] # LATIN SMALL LETTER E WITH CIRCUMFLEX AND ACUTE +1EBE ; [.2008.0020.0008][.0000.0026.0002][.0000.00F2.0000] # LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND ACUTE +1EC5 ; [.2008.0020.0002][.0000.0026.0002][.0000.00F1.0000] # LATIN SMALL LETTER E WITH CIRCUMFLEX AND TILDE +1EC4 ; [.2008.0020.0008][.0000.0026.0002][.0000.00F1.0000] # LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND TILDE +1EC3 ; [.2008.0020.0002][.0000.0026.0002][.0000.00F0.0000] # LATIN SMALL LETTER E WITH CIRCUMFLEX AND HOOK ABOVE +1EC2 ; [.2008.0020.0008][.0000.0026.0002][.0000.00F0.0000] # LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND HOOK ABOVE +1EC7 ; [.2008.0020.0002][.0000.0026.0002][.0000.00F3.0000] # LATIN SMALL LETTER E WITH CIRCUMFLEX AND DOT BELOW +1EC6 ; [.2008.0020.0008][.0000.0026.0002][.0000.00F3.0000] # LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND DOT BELOW +00F4 ; [.213D.0020.0002] # LATIN SMALL LETTER O WITH CIRCUMFLEX +006F 0302 ; [.213D.0020.0002] # LATIN SMALL LETTER O WITH CIRCUMFLEX +00D4 ; [.213D.0020.0008] # LATIN CAPITAL LETTER O WITH CIRCUMFLEX +004F 0302 ; [.213D.0020.0008] # LATIN CAPITAL LETTER O WITH CIRCUMFLEX +1ED3 ; [.213D.0020.0002][.0000.0025.0002] # LATIN SMALL LETTER O WITH CIRCUMFLEX AND GRAVE +1ED2 ; [.213D.0020.0008][.0000.0025.0002] # LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND GRAVE +1ED1 ; [.213D.0020.0002][.0000.0026.0002][.0000.00F2.0000] # LATIN SMALL LETTER O WITH CIRCUMFLEX AND ACUTE +1ED0 ; [.213D.0020.0008][.0000.0026.0002][.0000.00F2.0000] # LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND ACUTE +1ED7 ; [.213D.0020.0002][.0000.0026.0002][.0000.00F1.0000] # LATIN SMALL LETTER O WITH CIRCUMFLEX AND TILDE +1ED6 ; [.213D.0020.0008][.0000.0026.0002][.0000.00F1.0000] # LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND TILDE +1ED5 ; [.213D.0020.0002][.0000.0026.0002][.0000.00F0.0000] # LATIN SMALL LETTER O WITH CIRCUMFLEX AND HOOK ABOVE +1ED4 ; [.213D.0020.0008][.0000.0026.0002][.0000.00F0.0000] # LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND HOOK ABOVE +1ED9 ; [.213D.0020.0002][.0000.0026.0002][.0000.00F3.0000] # LATIN SMALL LETTER O WITH CIRCUMFLEX AND DOT BELOW +1ED8 ; [.213D.0020.0008][.0000.0026.0002][.0000.00F3.0000] # LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND DOT BELOW +01A1 ; [.213E.0020.0002] # LATIN SMALL LETTER O WITH HORN +006F 031B ; [.213E.0020.0002] # LATIN SMALL LETTER O WITH HORN +01A0 ; [.213E.0020.0008] # LATIN CAPITAL LETTER O WITH HORN +004F 031B ; [.213E.0020.0008] # LATIN CAPITAL LETTER O WITH HORN +1EDD ; [.213E.0020.0002][.0000.0025.0002] # LATIN SMALL LETTER O WITH HORN AND GRAVE +1EDC ; [.213E.0020.0008][.0000.0025.0002] # LATIN CAPITAL LETTER O WITH HORN AND GRAVE +1EDB ; [.213E.0020.0002][.0000.0026.0002][.0000.00F2.0000] # LATIN SMALL LETTER O WITH HORN AND ACUTE +1EDA ; [.213E.0020.0008][.0000.0026.0002][.0000.00F2.0000] # LATIN CAPITAL LETTER O WITH HORN AND ACUTE +1EE1 ; [.213E.0020.0002][.0000.0026.0002][.0000.00F1.0000] # LATIN SMALL LETTER O WITH HORN AND TILDE +1EE0 ; [.213E.0020.0008][.0000.0026.0002][.0000.00F1.0000] # LATIN CAPITAL LETTER O WITH HORN AND TILDE +1EDF ; [.213E.0020.0002][.0000.0026.0002][.0000.00F0.0000] # LATIN SMALL LETTER O WITH HORN AND HOOK ABOVE +1EDE ; [.213E.0020.0008][.0000.0026.0002][.0000.00F0.0000] # LATIN CAPITAL LETTER O WITH HORN AND HOOK ABOVE +1EE3 ; [.213E.0020.0002][.0000.0026.0002][.0000.00F3.0000] # LATIN SMALL LETTER O WITH HORN AND DOT BELOW +1EE2 ; [.213E.0020.0008][.0000.0026.0002][.0000.00F3.0000] # LATIN CAPITAL LETTER O WITH HORN AND DOT BELOW +01B0 ; [.2218.0020.0002] # LATIN SMALL LETTER U WITH HORN +0075 031B ; [.2218.0020.0002] # LATIN SMALL LETTER U WITH HORN +01AF ; [.2218.0020.0008] # LATIN CAPITAL LETTER U WITH HORN +0055 031B ; [.2218.0020.0008] # LATIN CAPITAL LETTER U WITH HORN +1EEB ; [.2218.0020.0002][.0000.0025.0002] # LATIN SMALL LETTER U WITH HORN AND GRAVE +1EEA ; [.2218.0020.0008][.0000.0025.0002] # LATIN CAPITAL LETTER U WITH HORN AND GRAVE +1EE9 ; [.2218.0020.0002][.0000.0026.0002][.0000.00F2.0000] # LATIN SMALL LETTER U WITH HORN AND ACUTE +1EE8 ; [.2218.0020.0008][.0000.0026.0002][.0000.00F2.0000] # LATIN CAPITAL LETTER U WITH HORN AND ACUTE +1EEF ; [.2218.0020.0002][.0000.0026.0002][.0000.00F1.0000] # LATIN SMALL LETTER U WITH HORN AND TILDE +1EEE ; [.2218.0020.0008][.0000.0026.0002][.0000.00F1.0000] # LATIN CAPITAL LETTER U WITH HORN AND TILDE +1EED ; [.2218.0020.0002][.0000.0026.0002][.0000.00F0.0000] # LATIN SMALL LETTER U WITH HORN AND HOOK ABOVE +1EEC ; [.2218.0020.0008][.0000.0026.0002][.0000.00F0.0000] # LATIN CAPITAL LETTER U WITH HORN AND HOOK ABOVE +1EF1 ; [.2218.0020.0002][.0000.0026.0002][.0000.00F3.0000] # LATIN SMALL LETTER U WITH HORN AND DOT BELOW +1EF0 ; [.2218.0020.0008][.0000.0026.0002][.0000.00F3.0000] # LATIN CAPITAL LETTER U WITH HORN AND DOT BELOW +1EA1 0306 ; [.1FA3.0020.0002][.0000.0026.0002][.0000.00F3.0000] # +1EA0 0306 ; [.1FA3.0020.0008][.0000.0026.0002][.0000.00F3.0000] # +1EA1 0302 ; [.1FA4.0020.0002][.0000.0026.0002][.0000.00F3.0000] # +1EA0 0302 ; [.1FA4.0020.0008][.0000.0026.0002][.0000.00F3.0000] # +1EB9 0302 ; [.2008.0020.0002][.0000.0026.0002][.0000.00F3.0000] # +1EB8 0302 ; [.2008.0020.0008][.0000.0026.0002][.0000.00F3.0000] # +1ECD 0302 ; [.213D.0020.0002][.0000.0026.0002][.0000.00F3.0000] # +1ECC 0302 ; [.213D.0020.0008][.0000.0026.0002][.0000.00F3.0000] # +00F2 031B ; [.213E.0020.0002][.0000.0025.0002] # +1ECF 031B ; [.213E.0020.0002][.0000.0026.0002][.0000.00F0.0000] # +00F5 031B ; [.213E.0020.0002][.0000.0026.0002][.0000.00F1.0000] # +00F3 031B ; [.213E.0020.0002][.0000.0026.0002][.0000.00F2.0000] # +1ECD 031B ; [.213E.0020.0002][.0000.0026.0002][.0000.00F3.0000] # +00D2 031B ; [.213E.0020.0008][.0000.0025.0002] # +1ECE 031B ; [.213E.0020.0008][.0000.0026.0002][.0000.00F0.0000] # +00D5 031B ; [.213E.0020.0008][.0000.0026.0002][.0000.00F1.0000] # +00D3 031B ; [.213E.0020.0008][.0000.0026.0002][.0000.00F2.0000] # +1ECC 031B ; [.213E.0020.0008][.0000.0026.0002][.0000.00F3.0000] # +00F9 031B ; [.2218.0020.0002][.0000.0025.0002] # +1EE7 031B ; [.2218.0020.0002][.0000.0026.0002][.0000.00F0.0000] # +0169 031B ; [.2218.0020.0002][.0000.0026.0002][.0000.00F1.0000] # +00FA 031B ; [.2218.0020.0002][.0000.0026.0002][.0000.00F2.0000] # +1EE5 031B ; [.2218.0020.0002][.0000.0026.0002][.0000.00F3.0000] # +00D9 031B ; [.2218.0020.0008][.0000.0025.0002] # +1EE6 031B ; [.2218.0020.0008][.0000.0026.0002][.0000.00F0.0000] # +0168 031B ; [.2218.0020.0008][.0000.0026.0002][.0000.00F1.0000] # +00DA 031B ; [.2218.0020.0008][.0000.0026.0002][.0000.00F2.0000] # +1EE4 031B ; [.2218.0020.0008][.0000.0026.0002][.0000.00F3.0000] # +0061 0323 0306 ; [.1FA3.0020.0002][.0000.0026.0002][.0000.00F3.0000] # +0041 0323 0306 ; [.1FA3.0020.0008][.0000.0026.0002][.0000.00F3.0000] # +0061 0323 0302 ; [.1FA4.0020.0002][.0000.0026.0002][.0000.00F3.0000] # +0041 0323 0302 ; [.1FA4.0020.0008][.0000.0026.0002][.0000.00F3.0000] # +0065 0323 0302 ; [.2008.0020.0002][.0000.0026.0002][.0000.00F3.0000] # +0045 0323 0302 ; [.2008.0020.0008][.0000.0026.0002][.0000.00F3.0000] # +006F 0323 0302 ; [.213D.0020.0002][.0000.0026.0002][.0000.00F3.0000] # +004F 0323 0302 ; [.213D.0020.0008][.0000.0026.0002][.0000.00F3.0000] # +006F 0300 031B ; [.213E.0020.0002][.0000.0025.0002] # +006F 0340 031B ; [.213E.0020.0002][.0000.0025.0002] # +006F 0309 031B ; [.213E.0020.0002][.0000.0026.0002][.0000.00F0.0000] # +006F 0303 031B ; [.213E.0020.0002][.0000.0026.0002][.0000.00F1.0000] # +006F 0301 031B ; [.213E.0020.0002][.0000.0026.0002][.0000.00F2.0000] # +006F 0341 031B ; [.213E.0020.0002][.0000.0026.0002][.0000.00F2.0000] # +006F 0323 031B ; [.213E.0020.0002][.0000.0026.0002][.0000.00F3.0000] # +004F 0300 031B ; [.213E.0020.0008][.0000.0025.0002] # +004F 0340 031B ; [.213E.0020.0008][.0000.0025.0002] # +004F 0309 031B ; [.213E.0020.0008][.0000.0026.0002][.0000.00F0.0000] # +004F 0303 031B ; [.213E.0020.0008][.0000.0026.0002][.0000.00F1.0000] # +004F 0301 031B ; [.213E.0020.0008][.0000.0026.0002][.0000.00F2.0000] # +004F 0341 031B ; [.213E.0020.0008][.0000.0026.0002][.0000.00F2.0000] # +004F 0323 031B ; [.213E.0020.0008][.0000.0026.0002][.0000.00F3.0000] # +0075 0300 031B ; [.2218.0020.0002][.0000.0025.0002] # +0075 0340 031B ; [.2218.0020.0002][.0000.0025.0002] # +0075 0309 031B ; [.2218.0020.0002][.0000.0026.0002][.0000.00F0.0000] # +0075 0303 031B ; [.2218.0020.0002][.0000.0026.0002][.0000.00F1.0000] # +0075 0301 031B ; [.2218.0020.0002][.0000.0026.0002][.0000.00F2.0000] # +0075 0341 031B ; [.2218.0020.0002][.0000.0026.0002][.0000.00F2.0000] # +0075 0323 031B ; [.2218.0020.0002][.0000.0026.0002][.0000.00F3.0000] # +0055 0300 031B ; [.2218.0020.0008][.0000.0025.0002] # +0055 0340 031B ; [.2218.0020.0008][.0000.0025.0002] # +0055 0309 031B ; [.2218.0020.0008][.0000.0026.0002][.0000.00F0.0000] # +0055 0303 031B ; [.2218.0020.0008][.0000.0026.0002][.0000.00F1.0000] # +0055 0301 031B ; [.2218.0020.0008][.0000.0026.0002][.0000.00F2.0000] # +0055 0341 031B ; [.2218.0020.0008][.0000.0026.0002][.0000.00F2.0000] # +0055 0323 031B ; [.2218.0020.0008][.0000.0026.0002][.0000.00F3.0000] # ENTRY }; diff --git a/gnu/usr.bin/perl/cpan/Unicode-Collate/Collate/Locale/wae.pl b/gnu/usr.bin/perl/cpan/Unicode-Collate/Collate/Locale/wae.pl index 43315c52d51..6b16cf6b3a6 100644 --- a/gnu/usr.bin/perl/cpan/Unicode-Collate/Collate/Locale/wae.pl +++ b/gnu/usr.bin/perl/cpan/Unicode-Collate/Collate/Locale/wae.pl @@ -1,24 +1,24 @@ +{ - locale_version => 1.27, - entry => <<'ENTRY', # for DUCET v10.0.0 -0061 0061 ; [.1CAD.0020.0002][.0000.0024.0002] # -00E4 00E4 ; [.1CAD.0020.0002][.0000.002D.0002] # -00E4 0061 0308 ; [.1CAD.0020.0002][.0000.002D.0002] # -0061 0308 00E4 ; [.1CAD.0020.0002][.0000.002D.0002] # -0061 0308 0061 0308 ; [.1CAD.0020.0002][.0000.002D.0002] # -0065 0065 ; [.1D10.0020.0002][.0000.0024.0002] # -0069 0069 ; [.1D98.0020.0002][.0000.0024.0002] # -006F 006F ; [.1E43.0020.0002][.0000.0024.0002] # -00F6 00F6 ; [.1E43.0020.0002][.0000.002D.0002] # -00F6 006F 0308 ; [.1E43.0020.0002][.0000.002D.0002] # -006F 0308 00F6 ; [.1E43.0020.0002][.0000.002D.0002] # -006F 0308 006F 0308 ; [.1E43.0020.0002][.0000.002D.0002] # -0063 0068 ; [.1CE0.0020.0002][.0000.0028.0002] # -0073 0063 0068 ; [.1ED7.0020.0002][.0000.0028.0002] # -0075 0075 ; [.1F1B.0020.0002][.0000.0024.0002] # -00FC 00FC ; [.1F1B.0020.0002][.0000.002D.0002] # -00FC 0075 0308 ; [.1F1B.0020.0002][.0000.002D.0002] # -0075 0308 00FC ; [.1F1B.0020.0002][.0000.002D.0002] # -0075 0308 0075 0308 ; [.1F1B.0020.0002][.0000.002D.0002] # + locale_version => 1.31, + entry => <<'ENTRY', # for DUCET v13.0.0 +0061 0061 ; [.1FA2.0020.0002][.0000.0024.0002] # +00E4 00E4 ; [.1FA2.0020.0002][.0000.002D.0002] # +00E4 0061 0308 ; [.1FA2.0020.0002][.0000.002D.0002] # +0061 0308 00E4 ; [.1FA2.0020.0002][.0000.002D.0002] # +0061 0308 0061 0308 ; [.1FA2.0020.0002][.0000.002D.0002] # +0065 0065 ; [.2007.0020.0002][.0000.0024.0002] # +0069 0069 ; [.2090.0020.0002][.0000.0024.0002] # +006F 006F ; [.213C.0020.0002][.0000.0024.0002] # +00F6 00F6 ; [.213C.0020.0002][.0000.002D.0002] # +00F6 006F 0308 ; [.213C.0020.0002][.0000.002D.0002] # +006F 0308 00F6 ; [.213C.0020.0002][.0000.002D.0002] # +006F 0308 006F 0308 ; [.213C.0020.0002][.0000.002D.0002] # +0063 0068 ; [.1FD6.0020.0002][.0000.0028.0002] # +0073 0063 0068 ; [.21D2.0020.0002][.0000.0028.0002] # +0075 0075 ; [.2217.0020.0002][.0000.0024.0002] # +00FC 00FC ; [.2217.0020.0002][.0000.002D.0002] # +00FC 0075 0308 ; [.2217.0020.0002][.0000.002D.0002] # +0075 0308 00FC ; [.2217.0020.0002][.0000.002D.0002] # +0075 0308 0075 0308 ; [.2217.0020.0002][.0000.002D.0002] # ENTRY }; diff --git a/gnu/usr.bin/perl/cpan/Unicode-Collate/Collate/Locale/wo.pl b/gnu/usr.bin/perl/cpan/Unicode-Collate/Collate/Locale/wo.pl index eab0dc50df7..6491f60b56b 100644 --- a/gnu/usr.bin/perl/cpan/Unicode-Collate/Collate/Locale/wo.pl +++ b/gnu/usr.bin/perl/cpan/Unicode-Collate/Collate/Locale/wo.pl @@ -1,32 +1,32 @@ +{ - locale_version => 1.27, + locale_version => 1.31, # eng doesn't require tailoring - entry => <<'ENTRY', # for DUCET v10.0.0 -00E0 ; [.1CAE.0020.0002] # LATIN SMALL LETTER A WITH GRAVE -0061 0300 ; [.1CAE.0020.0002] # LATIN SMALL LETTER A WITH GRAVE -0061 0340 ; [.1CAE.0020.0002] # LATIN SMALL LETTER A WITH GRAVE -00C0 ; [.1CAE.0020.0008] # LATIN CAPITAL LETTER A WITH GRAVE -0041 0300 ; [.1CAE.0020.0008] # LATIN CAPITAL LETTER A WITH GRAVE -0041 0340 ; [.1CAE.0020.0008] # LATIN CAPITAL LETTER A WITH GRAVE -00E9 ; [.1D11.0020.0002] # LATIN SMALL LETTER E WITH ACUTE -0065 0301 ; [.1D11.0020.0002] # LATIN SMALL LETTER E WITH ACUTE -0065 0341 ; [.1D11.0020.0002] # LATIN SMALL LETTER E WITH ACUTE -00C9 ; [.1D11.0020.0008] # LATIN CAPITAL LETTER E WITH ACUTE -0045 0301 ; [.1D11.0020.0008] # LATIN CAPITAL LETTER E WITH ACUTE -0045 0341 ; [.1D11.0020.0008] # LATIN CAPITAL LETTER E WITH ACUTE -00EB ; [.1D12.0020.0002] # LATIN SMALL LETTER E WITH DIAERESIS -0065 0308 ; [.1D12.0020.0002] # LATIN SMALL LETTER E WITH DIAERESIS -00CB ; [.1D12.0020.0008] # LATIN CAPITAL LETTER E WITH DIAERESIS -0045 0308 ; [.1D12.0020.0008] # LATIN CAPITAL LETTER E WITH DIAERESIS -00F1 ; [.1E20.0020.0002] # LATIN SMALL LETTER N WITH TILDE -006E 0303 ; [.1E20.0020.0002] # LATIN SMALL LETTER N WITH TILDE -00D1 ; [.1E20.0020.0008] # LATIN CAPITAL LETTER N WITH TILDE -004E 0303 ; [.1E20.0020.0008] # LATIN CAPITAL LETTER N WITH TILDE -00F3 ; [.1E44.0020.0002] # LATIN SMALL LETTER O WITH ACUTE -006F 0301 ; [.1E44.0020.0002] # LATIN SMALL LETTER O WITH ACUTE -006F 0341 ; [.1E44.0020.0002] # LATIN SMALL LETTER O WITH ACUTE -00D3 ; [.1E44.0020.0008] # LATIN CAPITAL LETTER O WITH ACUTE -004F 0301 ; [.1E44.0020.0008] # LATIN CAPITAL LETTER O WITH ACUTE -004F 0341 ; [.1E44.0020.0008] # LATIN CAPITAL LETTER O WITH ACUTE + entry => <<'ENTRY', # for DUCET v13.0.0 +00E0 ; [.1FA3.0020.0002] # LATIN SMALL LETTER A WITH GRAVE +0061 0300 ; [.1FA3.0020.0002] # LATIN SMALL LETTER A WITH GRAVE +0061 0340 ; [.1FA3.0020.0002] # LATIN SMALL LETTER A WITH GRAVE +00C0 ; [.1FA3.0020.0008] # LATIN CAPITAL LETTER A WITH GRAVE +0041 0300 ; [.1FA3.0020.0008] # LATIN CAPITAL LETTER A WITH GRAVE +0041 0340 ; [.1FA3.0020.0008] # LATIN CAPITAL LETTER A WITH GRAVE +00E9 ; [.2008.0020.0002] # LATIN SMALL LETTER E WITH ACUTE +0065 0301 ; [.2008.0020.0002] # LATIN SMALL LETTER E WITH ACUTE +0065 0341 ; [.2008.0020.0002] # LATIN SMALL LETTER E WITH ACUTE +00C9 ; [.2008.0020.0008] # LATIN CAPITAL LETTER E WITH ACUTE +0045 0301 ; [.2008.0020.0008] # LATIN CAPITAL LETTER E WITH ACUTE +0045 0341 ; [.2008.0020.0008] # LATIN CAPITAL LETTER E WITH ACUTE +00EB ; [.2009.0020.0002] # LATIN SMALL LETTER E WITH DIAERESIS +0065 0308 ; [.2009.0020.0002] # LATIN SMALL LETTER E WITH DIAERESIS +00CB ; [.2009.0020.0008] # LATIN CAPITAL LETTER E WITH DIAERESIS +0045 0308 ; [.2009.0020.0008] # LATIN CAPITAL LETTER E WITH DIAERESIS +00F1 ; [.2119.0020.0002] # LATIN SMALL LETTER N WITH TILDE +006E 0303 ; [.2119.0020.0002] # LATIN SMALL LETTER N WITH TILDE +00D1 ; [.2119.0020.0008] # LATIN CAPITAL LETTER N WITH TILDE +004E 0303 ; [.2119.0020.0008] # LATIN CAPITAL LETTER N WITH TILDE +00F3 ; [.213D.0020.0002] # LATIN SMALL LETTER O WITH ACUTE +006F 0301 ; [.213D.0020.0002] # LATIN SMALL LETTER O WITH ACUTE +006F 0341 ; [.213D.0020.0002] # LATIN SMALL LETTER O WITH ACUTE +00D3 ; [.213D.0020.0008] # LATIN CAPITAL LETTER O WITH ACUTE +004F 0301 ; [.213D.0020.0008] # LATIN CAPITAL LETTER O WITH ACUTE +004F 0341 ; [.213D.0020.0008] # LATIN CAPITAL LETTER O WITH ACUTE ENTRY }; diff --git a/gnu/usr.bin/perl/cpan/Unicode-Collate/Collate/Locale/yo.pl b/gnu/usr.bin/perl/cpan/Unicode-Collate/Collate/Locale/yo.pl index 448ed265086..44f8aa7d0a4 100644 --- a/gnu/usr.bin/perl/cpan/Unicode-Collate/Collate/Locale/yo.pl +++ b/gnu/usr.bin/perl/cpan/Unicode-Collate/Collate/Locale/yo.pl @@ -1,26 +1,26 @@ +{ - locale_version => 1.27, - entry => <<'ENTRY', # for DUCET v10.0.0 -1EB9 ; [.1D11.0020.0002] # LATIN SMALL LETTER E WITH DOT BELOW -0065 0323 ; [.1D11.0020.0002] # LATIN SMALL LETTER E WITH DOT BELOW -1EB8 ; [.1D11.0020.0008] # LATIN CAPITAL LETTER E WITH DOT BELOW -0045 0323 ; [.1D11.0020.0008] # LATIN CAPITAL LETTER E WITH DOT BELOW -1EC7 ; [.1D11.0020.0002][.0000.0027.0002] # LATIN SMALL LETTER E WITH CIRCUMFLEX AND DOT BELOW -1EC6 ; [.1D11.0020.0008][.0000.0027.0002] # LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND DOT BELOW -0067 0062 ; [.1D5B.0020.0002] # -0047 0062 ; [.1D5B.0020.0007] # -0047 0042 ; [.1D5B.0020.0008] # -1ECD ; [.1E44.0020.0002] # LATIN SMALL LETTER O WITH DOT BELOW -006F 0323 ; [.1E44.0020.0002] # LATIN SMALL LETTER O WITH DOT BELOW -1ECC ; [.1E44.0020.0008] # LATIN CAPITAL LETTER O WITH DOT BELOW -004F 0323 ; [.1E44.0020.0008] # LATIN CAPITAL LETTER O WITH DOT BELOW -1ED9 ; [.1E44.0020.0002][.0000.0027.0002] # LATIN SMALL LETTER O WITH CIRCUMFLEX AND DOT BELOW -1ED8 ; [.1E44.0020.0008][.0000.0027.0002] # LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND DOT BELOW -1EE3 ; [.1E44.0020.0002][.0000.003F.0002] # LATIN SMALL LETTER O WITH HORN AND DOT BELOW -1EE2 ; [.1E44.0020.0008][.0000.003F.0002] # LATIN CAPITAL LETTER O WITH HORN AND DOT BELOW -1E63 ; [.1ED8.0020.0002] # LATIN SMALL LETTER S WITH DOT BELOW -0073 0323 ; [.1ED8.0020.0002] # LATIN SMALL LETTER S WITH DOT BELOW -1E62 ; [.1ED8.0020.0008] # LATIN CAPITAL LETTER S WITH DOT BELOW -0053 0323 ; [.1ED8.0020.0008] # LATIN CAPITAL LETTER S WITH DOT BELOW + locale_version => 1.31, + entry => <<'ENTRY', # for DUCET v13.0.0 +1EB9 ; [.2008.0020.0002] # LATIN SMALL LETTER E WITH DOT BELOW +0065 0323 ; [.2008.0020.0002] # LATIN SMALL LETTER E WITH DOT BELOW +1EB8 ; [.2008.0020.0008] # LATIN CAPITAL LETTER E WITH DOT BELOW +0045 0323 ; [.2008.0020.0008] # LATIN CAPITAL LETTER E WITH DOT BELOW +1EC7 ; [.2008.0020.0002][.0000.0027.0002] # LATIN SMALL LETTER E WITH CIRCUMFLEX AND DOT BELOW +1EC6 ; [.2008.0020.0008][.0000.0027.0002] # LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND DOT BELOW +0067 0062 ; [.2052.0020.0002] # +0047 0062 ; [.2052.0020.0007] # +0047 0042 ; [.2052.0020.0008] # +1ECD ; [.213D.0020.0002] # LATIN SMALL LETTER O WITH DOT BELOW +006F 0323 ; [.213D.0020.0002] # LATIN SMALL LETTER O WITH DOT BELOW +1ECC ; [.213D.0020.0008] # LATIN CAPITAL LETTER O WITH DOT BELOW +004F 0323 ; [.213D.0020.0008] # LATIN CAPITAL LETTER O WITH DOT BELOW +1ED9 ; [.213D.0020.0002][.0000.0027.0002] # LATIN SMALL LETTER O WITH CIRCUMFLEX AND DOT BELOW +1ED8 ; [.213D.0020.0008][.0000.0027.0002] # LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND DOT BELOW +1EE3 ; [.213D.0020.0002][.0000.003F.0002] # LATIN SMALL LETTER O WITH HORN AND DOT BELOW +1EE2 ; [.213D.0020.0008][.0000.003F.0002] # LATIN CAPITAL LETTER O WITH HORN AND DOT BELOW +1E63 ; [.21D3.0020.0002] # LATIN SMALL LETTER S WITH DOT BELOW +0073 0323 ; [.21D3.0020.0002] # LATIN SMALL LETTER S WITH DOT BELOW +1E62 ; [.21D3.0020.0008] # LATIN CAPITAL LETTER S WITH DOT BELOW +0053 0323 ; [.21D3.0020.0008] # LATIN CAPITAL LETTER S WITH DOT BELOW ENTRY }; diff --git a/gnu/usr.bin/perl/cpan/Unicode-Collate/Collate/Locale/zh.pl b/gnu/usr.bin/perl/cpan/Unicode-Collate/Collate/Locale/zh.pl index 6cb6607a4a9..63dff38029e 100644 --- a/gnu/usr.bin/perl/cpan/Unicode-Collate/Collate/Locale/zh.pl +++ b/gnu/usr.bin/perl/cpan/Unicode-Collate/Collate/Locale/zh.pl @@ -1,211 +1,211 @@ +{ - locale_version => 1.27, - entry => <<'ENTRY', # for DUCET v10.0.0 -0101 ; [.1CAD.001C.0002] # LATIN SMALL LETTER A WITH MACRON -0061 0304 ; [.1CAD.001C.0002] # LATIN SMALL LETTER A WITH MACRON -0100 ; [.1CAD.001C.0008] # LATIN CAPITAL LETTER A WITH MACRON -0041 0304 ; [.1CAD.001C.0008] # LATIN CAPITAL LETTER A WITH MACRON -00E1 ; [.1CAD.001D.0002] # LATIN SMALL LETTER A WITH ACUTE -0061 0301 ; [.1CAD.001D.0002] # LATIN SMALL LETTER A WITH ACUTE -0061 0341 ; [.1CAD.001D.0002] # LATIN SMALL LETTER A WITH ACUTE -00C1 ; [.1CAD.001D.0008] # LATIN CAPITAL LETTER A WITH ACUTE -0041 0301 ; [.1CAD.001D.0008] # LATIN CAPITAL LETTER A WITH ACUTE -0041 0341 ; [.1CAD.001D.0008] # LATIN CAPITAL LETTER A WITH ACUTE -01CE ; [.1CAD.001E.0002] # LATIN SMALL LETTER A WITH CARON -0061 030C ; [.1CAD.001E.0002] # LATIN SMALL LETTER A WITH CARON -01CD ; [.1CAD.001E.0008] # LATIN CAPITAL LETTER A WITH CARON -0041 030C ; [.1CAD.001E.0008] # LATIN CAPITAL LETTER A WITH CARON -00E0 ; [.1CAD.001F.0002] # LATIN SMALL LETTER A WITH GRAVE -0061 0300 ; [.1CAD.001F.0002] # LATIN SMALL LETTER A WITH GRAVE -0061 0340 ; [.1CAD.001F.0002] # LATIN SMALL LETTER A WITH GRAVE -00C0 ; [.1CAD.001F.0008] # LATIN CAPITAL LETTER A WITH GRAVE -0041 0300 ; [.1CAD.001F.0008] # LATIN CAPITAL LETTER A WITH GRAVE -0041 0340 ; [.1CAD.001F.0008] # LATIN CAPITAL LETTER A WITH GRAVE -0113 ; [.1D10.001C.0002] # LATIN SMALL LETTER E WITH MACRON -0065 0304 ; [.1D10.001C.0002] # LATIN SMALL LETTER E WITH MACRON -0112 ; [.1D10.001C.0008] # LATIN CAPITAL LETTER E WITH MACRON -0045 0304 ; [.1D10.001C.0008] # LATIN CAPITAL LETTER E WITH MACRON -00E9 ; [.1D10.001D.0002] # LATIN SMALL LETTER E WITH ACUTE -0065 0301 ; [.1D10.001D.0002] # LATIN SMALL LETTER E WITH ACUTE -0065 0341 ; [.1D10.001D.0002] # LATIN SMALL LETTER E WITH ACUTE -00C9 ; [.1D10.001D.0008] # LATIN CAPITAL LETTER E WITH ACUTE -0045 0301 ; [.1D10.001D.0008] # LATIN CAPITAL LETTER E WITH ACUTE -0045 0341 ; [.1D10.001D.0008] # LATIN CAPITAL LETTER E WITH ACUTE -011B ; [.1D10.001E.0002] # LATIN SMALL LETTER E WITH CARON -0065 030C ; [.1D10.001E.0002] # LATIN SMALL LETTER E WITH CARON -011A ; [.1D10.001E.0008] # LATIN CAPITAL LETTER E WITH CARON -0045 030C ; [.1D10.001E.0008] # LATIN CAPITAL LETTER E WITH CARON -00E8 ; [.1D10.001F.0002] # LATIN SMALL LETTER E WITH GRAVE -0065 0300 ; [.1D10.001F.0002] # LATIN SMALL LETTER E WITH GRAVE -0065 0340 ; [.1D10.001F.0002] # LATIN SMALL LETTER E WITH GRAVE -00C8 ; [.1D10.001F.0008] # LATIN CAPITAL LETTER E WITH GRAVE -0045 0300 ; [.1D10.001F.0008] # LATIN CAPITAL LETTER E WITH GRAVE -0045 0340 ; [.1D10.001F.0008] # LATIN CAPITAL LETTER E WITH GRAVE -00EA 0304 ; [.1D10.0021.0002] # -00CA 0304 ; [.1D10.0021.0008] # -0065 0302 0304 ; [.1D10.0021.0002] # -0045 0302 0304 ; [.1D10.0021.0008] # -1EBF ; [.1D10.0022.0002] # LATIN SMALL LETTER E WITH CIRCUMFLEX AND ACUTE -0065 0302 0301 ; [.1D10.0022.0002] # LATIN SMALL LETTER E WITH CIRCUMFLEX AND ACUTE -0065 0302 0341 ; [.1D10.0022.0002] # LATIN SMALL LETTER E WITH CIRCUMFLEX AND ACUTE -1EBE ; [.1D10.0022.0008] # LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND ACUTE -0045 0302 0301 ; [.1D10.0022.0008] # LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND ACUTE -0045 0302 0341 ; [.1D10.0022.0008] # LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND ACUTE -00EA 0301 ; [.1D10.0022.0002] # -00EA 0341 ; [.1D10.0022.0002] # -00CA 0301 ; [.1D10.0022.0008] # -00CA 0341 ; [.1D10.0022.0008] # -00EA 030C ; [.1D10.0023.0002] # -00CA 030C ; [.1D10.0023.0008] # -0065 0302 030C ; [.1D10.0023.0002] # -0045 0302 030C ; [.1D10.0023.0008] # -1EC1 ; [.1D10.0024.0002] # LATIN SMALL LETTER E WITH CIRCUMFLEX AND GRAVE -0065 0302 0300 ; [.1D10.0024.0002] # LATIN SMALL LETTER E WITH CIRCUMFLEX AND GRAVE -0065 0302 0340 ; [.1D10.0024.0002] # LATIN SMALL LETTER E WITH CIRCUMFLEX AND GRAVE -1EC0 ; [.1D10.0024.0008] # LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND GRAVE -0045 0302 0300 ; [.1D10.0024.0008] # LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND GRAVE -0045 0302 0340 ; [.1D10.0024.0008] # LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND GRAVE -00EA 0300 ; [.1D10.0024.0002] # -00EA 0340 ; [.1D10.0024.0002] # -00CA 0300 ; [.1D10.0024.0008] # -00CA 0340 ; [.1D10.0024.0008] # -00EA ; [.1D10.0025.0002] # LATIN SMALL LETTER E WITH CIRCUMFLEX -0065 0302 ; [.1D10.0025.0002] # LATIN SMALL LETTER E WITH CIRCUMFLEX -00CA ; [.1D10.0025.0008] # LATIN CAPITAL LETTER E WITH CIRCUMFLEX -0045 0302 ; [.1D10.0025.0008] # LATIN CAPITAL LETTER E WITH CIRCUMFLEX -1EC5 ; [.1D10.0025.0002][.0000.002D.0002] # LATIN SMALL LETTER E WITH CIRCUMFLEX AND TILDE -1EC4 ; [.1D10.0025.0008][.0000.002D.0002] # LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND TILDE -1EC3 ; [.1D10.0025.0002][.0000.003B.0002] # LATIN SMALL LETTER E WITH CIRCUMFLEX AND HOOK ABOVE -1EC2 ; [.1D10.0025.0008][.0000.003B.0002] # LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND HOOK ABOVE -1EC7 ; [.1D10.0025.0002][.0000.0042.0002] # LATIN SMALL LETTER E WITH CIRCUMFLEX AND DOT BELOW -1EC6 ; [.1D10.0025.0008][.0000.0042.0002] # LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND DOT BELOW -012B ; [.1D98.001C.0002] # LATIN SMALL LETTER I WITH MACRON -0069 0304 ; [.1D98.001C.0002] # LATIN SMALL LETTER I WITH MACRON -012A ; [.1D98.001C.0008] # LATIN CAPITAL LETTER I WITH MACRON -0049 0304 ; [.1D98.001C.0008] # LATIN CAPITAL LETTER I WITH MACRON -00ED ; [.1D98.001D.0002] # LATIN SMALL LETTER I WITH ACUTE -0069 0301 ; [.1D98.001D.0002] # LATIN SMALL LETTER I WITH ACUTE -0069 0341 ; [.1D98.001D.0002] # LATIN SMALL LETTER I WITH ACUTE -00CD ; [.1D98.001D.0008] # LATIN CAPITAL LETTER I WITH ACUTE -0049 0301 ; [.1D98.001D.0008] # LATIN CAPITAL LETTER I WITH ACUTE -0049 0341 ; [.1D98.001D.0008] # LATIN CAPITAL LETTER I WITH ACUTE -01D0 ; [.1D98.001E.0002] # LATIN SMALL LETTER I WITH CARON -0069 030C ; [.1D98.001E.0002] # LATIN SMALL LETTER I WITH CARON -01CF ; [.1D98.001E.0008] # LATIN CAPITAL LETTER I WITH CARON -0049 030C ; [.1D98.001E.0008] # LATIN CAPITAL LETTER I WITH CARON -00EC ; [.1D98.001F.0002] # LATIN SMALL LETTER I WITH GRAVE -0069 0300 ; [.1D98.001F.0002] # LATIN SMALL LETTER I WITH GRAVE -0069 0340 ; [.1D98.001F.0002] # LATIN SMALL LETTER I WITH GRAVE -00CC ; [.1D98.001F.0008] # LATIN CAPITAL LETTER I WITH GRAVE -0049 0300 ; [.1D98.001F.0008] # LATIN CAPITAL LETTER I WITH GRAVE -0049 0340 ; [.1D98.001F.0008] # LATIN CAPITAL LETTER I WITH GRAVE -006D 0304 ; [.1E10.001C.0002] # -004D 0304 ; [.1E10.001C.0008] # -1E3F ; [.1E10.001D.0002] # LATIN SMALL LETTER M WITH ACUTE -006D 0301 ; [.1E10.001D.0002] # LATIN SMALL LETTER M WITH ACUTE -006D 0341 ; [.1E10.001D.0002] # LATIN SMALL LETTER M WITH ACUTE -1E3E ; [.1E10.001D.0008] # LATIN CAPITAL LETTER M WITH ACUTE -004D 0301 ; [.1E10.001D.0008] # LATIN CAPITAL LETTER M WITH ACUTE -004D 0341 ; [.1E10.001D.0008] # LATIN CAPITAL LETTER M WITH ACUTE -006D 030C ; [.1E10.001E.0002] # -004D 030C ; [.1E10.001E.0008] # -006D 0300 ; [.1E10.001F.0002] # -006D 0340 ; [.1E10.001F.0002] # -004D 0300 ; [.1E10.001F.0008] # -004D 0340 ; [.1E10.001F.0008] # -006E 0304 ; [.1E1F.001C.0002] # -004E 0304 ; [.1E1F.001C.0008] # -0144 ; [.1E1F.001D.0002] # LATIN SMALL LETTER N WITH ACUTE -006E 0301 ; [.1E1F.001D.0002] # LATIN SMALL LETTER N WITH ACUTE -006E 0341 ; [.1E1F.001D.0002] # LATIN SMALL LETTER N WITH ACUTE -0143 ; [.1E1F.001D.0008] # LATIN CAPITAL LETTER N WITH ACUTE -004E 0301 ; [.1E1F.001D.0008] # LATIN CAPITAL LETTER N WITH ACUTE -004E 0341 ; [.1E1F.001D.0008] # LATIN CAPITAL LETTER N WITH ACUTE -0148 ; [.1E1F.001E.0002] # LATIN SMALL LETTER N WITH CARON -006E 030C ; [.1E1F.001E.0002] # LATIN SMALL LETTER N WITH CARON -0147 ; [.1E1F.001E.0008] # LATIN CAPITAL LETTER N WITH CARON -004E 030C ; [.1E1F.001E.0008] # LATIN CAPITAL LETTER N WITH CARON -01F9 ; [.1E1F.001F.0002] # LATIN SMALL LETTER N WITH GRAVE -006E 0300 ; [.1E1F.001F.0002] # LATIN SMALL LETTER N WITH GRAVE -006E 0340 ; [.1E1F.001F.0002] # LATIN SMALL LETTER N WITH GRAVE -01F8 ; [.1E1F.001F.0008] # LATIN CAPITAL LETTER N WITH GRAVE -004E 0300 ; [.1E1F.001F.0008] # LATIN CAPITAL LETTER N WITH GRAVE -004E 0340 ; [.1E1F.001F.0008] # LATIN CAPITAL LETTER N WITH GRAVE -014D ; [.1E43.001C.0002] # LATIN SMALL LETTER O WITH MACRON -006F 0304 ; [.1E43.001C.0002] # LATIN SMALL LETTER O WITH MACRON -014C ; [.1E43.001C.0008] # LATIN CAPITAL LETTER O WITH MACRON -004F 0304 ; [.1E43.001C.0008] # LATIN CAPITAL LETTER O WITH MACRON -00F3 ; [.1E43.001D.0002] # LATIN SMALL LETTER O WITH ACUTE -006F 0301 ; [.1E43.001D.0002] # LATIN SMALL LETTER O WITH ACUTE -006F 0341 ; [.1E43.001D.0002] # LATIN SMALL LETTER O WITH ACUTE -00D3 ; [.1E43.001D.0008] # LATIN CAPITAL LETTER O WITH ACUTE -004F 0301 ; [.1E43.001D.0008] # LATIN CAPITAL LETTER O WITH ACUTE -004F 0341 ; [.1E43.001D.0008] # LATIN CAPITAL LETTER O WITH ACUTE -01D2 ; [.1E43.001E.0002] # LATIN SMALL LETTER O WITH CARON -006F 030C ; [.1E43.001E.0002] # LATIN SMALL LETTER O WITH CARON -01D1 ; [.1E43.001E.0008] # LATIN CAPITAL LETTER O WITH CARON -004F 030C ; [.1E43.001E.0008] # LATIN CAPITAL LETTER O WITH CARON -00F2 ; [.1E43.001F.0002] # LATIN SMALL LETTER O WITH GRAVE -006F 0300 ; [.1E43.001F.0002] # LATIN SMALL LETTER O WITH GRAVE -006F 0340 ; [.1E43.001F.0002] # LATIN SMALL LETTER O WITH GRAVE -00D2 ; [.1E43.001F.0008] # LATIN CAPITAL LETTER O WITH GRAVE -004F 0300 ; [.1E43.001F.0008] # LATIN CAPITAL LETTER O WITH GRAVE -004F 0340 ; [.1E43.001F.0008] # LATIN CAPITAL LETTER O WITH GRAVE -016B ; [.1F1B.001C.0002] # LATIN SMALL LETTER U WITH MACRON -0075 0304 ; [.1F1B.001C.0002] # LATIN SMALL LETTER U WITH MACRON -016A ; [.1F1B.001C.0008] # LATIN CAPITAL LETTER U WITH MACRON -0055 0304 ; [.1F1B.001C.0008] # LATIN CAPITAL LETTER U WITH MACRON -00FA ; [.1F1B.001D.0002] # LATIN SMALL LETTER U WITH ACUTE -0075 0301 ; [.1F1B.001D.0002] # LATIN SMALL LETTER U WITH ACUTE -0075 0341 ; [.1F1B.001D.0002] # LATIN SMALL LETTER U WITH ACUTE -00DA ; [.1F1B.001D.0008] # LATIN CAPITAL LETTER U WITH ACUTE -0055 0301 ; [.1F1B.001D.0008] # LATIN CAPITAL LETTER U WITH ACUTE -0055 0341 ; [.1F1B.001D.0008] # LATIN CAPITAL LETTER U WITH ACUTE -01D4 ; [.1F1B.001E.0002] # LATIN SMALL LETTER U WITH CARON -0075 030C ; [.1F1B.001E.0002] # LATIN SMALL LETTER U WITH CARON -01D3 ; [.1F1B.001E.0008] # LATIN CAPITAL LETTER U WITH CARON -0055 030C ; [.1F1B.001E.0008] # LATIN CAPITAL LETTER U WITH CARON -00F9 ; [.1F1B.001F.0002] # LATIN SMALL LETTER U WITH GRAVE -0075 0300 ; [.1F1B.001F.0002] # LATIN SMALL LETTER U WITH GRAVE -0075 0340 ; [.1F1B.001F.0002] # LATIN SMALL LETTER U WITH GRAVE -00D9 ; [.1F1B.001F.0008] # LATIN CAPITAL LETTER U WITH GRAVE -0055 0300 ; [.1F1B.001F.0008] # LATIN CAPITAL LETTER U WITH GRAVE -0055 0340 ; [.1F1B.001F.0008] # LATIN CAPITAL LETTER U WITH GRAVE -01D6 ; [.1F1B.0021.0002] # LATIN SMALL LETTER U WITH DIAERESIS AND MACRON -0075 0308 0304 ; [.1F1B.0021.0002] # LATIN SMALL LETTER U WITH DIAERESIS AND MACRON -01D5 ; [.1F1B.0021.0008] # LATIN CAPITAL LETTER U WITH DIAERESIS AND MACRON -0055 0308 0304 ; [.1F1B.0021.0008] # LATIN CAPITAL LETTER U WITH DIAERESIS AND MACRON -00FC 0304 ; [.1F1B.0021.0002] # -00DC 0304 ; [.1F1B.0021.0008] # -01D8 ; [.1F1B.0022.0002] # LATIN SMALL LETTER U WITH DIAERESIS AND ACUTE -0075 0308 0301 ; [.1F1B.0022.0002] # LATIN SMALL LETTER U WITH DIAERESIS AND ACUTE -0075 0308 0341 ; [.1F1B.0022.0002] # LATIN SMALL LETTER U WITH DIAERESIS AND ACUTE -01D7 ; [.1F1B.0022.0008] # LATIN CAPITAL LETTER U WITH DIAERESIS AND ACUTE -0055 0308 0301 ; [.1F1B.0022.0008] # LATIN CAPITAL LETTER U WITH DIAERESIS AND ACUTE -0055 0308 0341 ; [.1F1B.0022.0008] # LATIN CAPITAL LETTER U WITH DIAERESIS AND ACUTE -00FC 0301 ; [.1F1B.0022.0002] # -00FC 0341 ; [.1F1B.0022.0002] # -00DC 0301 ; [.1F1B.0022.0008] # -00DC 0341 ; [.1F1B.0022.0008] # -01DA ; [.1F1B.0023.0002] # LATIN SMALL LETTER U WITH DIAERESIS AND CARON -0075 0308 030C ; [.1F1B.0023.0002] # LATIN SMALL LETTER U WITH DIAERESIS AND CARON -01D9 ; [.1F1B.0023.0008] # LATIN CAPITAL LETTER U WITH DIAERESIS AND CARON -0055 0308 030C ; [.1F1B.0023.0008] # LATIN CAPITAL LETTER U WITH DIAERESIS AND CARON -00FC 030C ; [.1F1B.0023.0002] # -00DC 030C ; [.1F1B.0023.0008] # -01DC ; [.1F1B.0024.0002] # LATIN SMALL LETTER U WITH DIAERESIS AND GRAVE -0075 0308 0300 ; [.1F1B.0024.0002] # LATIN SMALL LETTER U WITH DIAERESIS AND GRAVE -0075 0308 0340 ; [.1F1B.0024.0002] # LATIN SMALL LETTER U WITH DIAERESIS AND GRAVE -01DB ; [.1F1B.0024.0008] # LATIN CAPITAL LETTER U WITH DIAERESIS AND GRAVE -0055 0308 0300 ; [.1F1B.0024.0008] # LATIN CAPITAL LETTER U WITH DIAERESIS AND GRAVE -0055 0308 0340 ; [.1F1B.0024.0008] # LATIN CAPITAL LETTER U WITH DIAERESIS AND GRAVE -00FC 0300 ; [.1F1B.0024.0002] # -00FC 0340 ; [.1F1B.0024.0002] # -00DC 0300 ; [.1F1B.0024.0008] # -00DC 0340 ; [.1F1B.0024.0008] # -00FC ; [.1F1B.0025.0002] # LATIN SMALL LETTER U WITH DIAERESIS -0075 0308 ; [.1F1B.0025.0002] # LATIN SMALL LETTER U WITH DIAERESIS -00DC ; [.1F1B.0025.0008] # LATIN CAPITAL LETTER U WITH DIAERESIS -0055 0308 ; [.1F1B.0025.0008] # LATIN CAPITAL LETTER U WITH DIAERESIS + locale_version => 1.31, + entry => <<'ENTRY', # for DUCET v13.0.0 +0101 ; [.1FA2.001C.0002] # LATIN SMALL LETTER A WITH MACRON +0061 0304 ; [.1FA2.001C.0002] # LATIN SMALL LETTER A WITH MACRON +0100 ; [.1FA2.001C.0008] # LATIN CAPITAL LETTER A WITH MACRON +0041 0304 ; [.1FA2.001C.0008] # LATIN CAPITAL LETTER A WITH MACRON +00E1 ; [.1FA2.001D.0002] # LATIN SMALL LETTER A WITH ACUTE +0061 0301 ; [.1FA2.001D.0002] # LATIN SMALL LETTER A WITH ACUTE +0061 0341 ; [.1FA2.001D.0002] # LATIN SMALL LETTER A WITH ACUTE +00C1 ; [.1FA2.001D.0008] # LATIN CAPITAL LETTER A WITH ACUTE +0041 0301 ; [.1FA2.001D.0008] # LATIN CAPITAL LETTER A WITH ACUTE +0041 0341 ; [.1FA2.001D.0008] # LATIN CAPITAL LETTER A WITH ACUTE +01CE ; [.1FA2.001E.0002] # LATIN SMALL LETTER A WITH CARON +0061 030C ; [.1FA2.001E.0002] # LATIN SMALL LETTER A WITH CARON +01CD ; [.1FA2.001E.0008] # LATIN CAPITAL LETTER A WITH CARON +0041 030C ; [.1FA2.001E.0008] # LATIN CAPITAL LETTER A WITH CARON +00E0 ; [.1FA2.001F.0002] # LATIN SMALL LETTER A WITH GRAVE +0061 0300 ; [.1FA2.001F.0002] # LATIN SMALL LETTER A WITH GRAVE +0061 0340 ; [.1FA2.001F.0002] # LATIN SMALL LETTER A WITH GRAVE +00C0 ; [.1FA2.001F.0008] # LATIN CAPITAL LETTER A WITH GRAVE +0041 0300 ; [.1FA2.001F.0008] # LATIN CAPITAL LETTER A WITH GRAVE +0041 0340 ; [.1FA2.001F.0008] # LATIN CAPITAL LETTER A WITH GRAVE +0113 ; [.2007.001C.0002] # LATIN SMALL LETTER E WITH MACRON +0065 0304 ; [.2007.001C.0002] # LATIN SMALL LETTER E WITH MACRON +0112 ; [.2007.001C.0008] # LATIN CAPITAL LETTER E WITH MACRON +0045 0304 ; [.2007.001C.0008] # LATIN CAPITAL LETTER E WITH MACRON +00E9 ; [.2007.001D.0002] # LATIN SMALL LETTER E WITH ACUTE +0065 0301 ; [.2007.001D.0002] # LATIN SMALL LETTER E WITH ACUTE +0065 0341 ; [.2007.001D.0002] # LATIN SMALL LETTER E WITH ACUTE +00C9 ; [.2007.001D.0008] # LATIN CAPITAL LETTER E WITH ACUTE +0045 0301 ; [.2007.001D.0008] # LATIN CAPITAL LETTER E WITH ACUTE +0045 0341 ; [.2007.001D.0008] # LATIN CAPITAL LETTER E WITH ACUTE +011B ; [.2007.001E.0002] # LATIN SMALL LETTER E WITH CARON +0065 030C ; [.2007.001E.0002] # LATIN SMALL LETTER E WITH CARON +011A ; [.2007.001E.0008] # LATIN CAPITAL LETTER E WITH CARON +0045 030C ; [.2007.001E.0008] # LATIN CAPITAL LETTER E WITH CARON +00E8 ; [.2007.001F.0002] # LATIN SMALL LETTER E WITH GRAVE +0065 0300 ; [.2007.001F.0002] # LATIN SMALL LETTER E WITH GRAVE +0065 0340 ; [.2007.001F.0002] # LATIN SMALL LETTER E WITH GRAVE +00C8 ; [.2007.001F.0008] # LATIN CAPITAL LETTER E WITH GRAVE +0045 0300 ; [.2007.001F.0008] # LATIN CAPITAL LETTER E WITH GRAVE +0045 0340 ; [.2007.001F.0008] # LATIN CAPITAL LETTER E WITH GRAVE +00EA 0304 ; [.2007.0021.0002] # +00CA 0304 ; [.2007.0021.0008] # +0065 0302 0304 ; [.2007.0021.0002] # +0045 0302 0304 ; [.2007.0021.0008] # +1EBF ; [.2007.0022.0002] # LATIN SMALL LETTER E WITH CIRCUMFLEX AND ACUTE +0065 0302 0301 ; [.2007.0022.0002] # LATIN SMALL LETTER E WITH CIRCUMFLEX AND ACUTE +0065 0302 0341 ; [.2007.0022.0002] # LATIN SMALL LETTER E WITH CIRCUMFLEX AND ACUTE +1EBE ; [.2007.0022.0008] # LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND ACUTE +0045 0302 0301 ; [.2007.0022.0008] # LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND ACUTE +0045 0302 0341 ; [.2007.0022.0008] # LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND ACUTE +00EA 0301 ; [.2007.0022.0002] # +00EA 0341 ; [.2007.0022.0002] # +00CA 0301 ; [.2007.0022.0008] # +00CA 0341 ; [.2007.0022.0008] # +00EA 030C ; [.2007.0023.0002] # +00CA 030C ; [.2007.0023.0008] # +0065 0302 030C ; [.2007.0023.0002] # +0045 0302 030C ; [.2007.0023.0008] # +1EC1 ; [.2007.0024.0002] # LATIN SMALL LETTER E WITH CIRCUMFLEX AND GRAVE +0065 0302 0300 ; [.2007.0024.0002] # LATIN SMALL LETTER E WITH CIRCUMFLEX AND GRAVE +0065 0302 0340 ; [.2007.0024.0002] # LATIN SMALL LETTER E WITH CIRCUMFLEX AND GRAVE +1EC0 ; [.2007.0024.0008] # LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND GRAVE +0045 0302 0300 ; [.2007.0024.0008] # LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND GRAVE +0045 0302 0340 ; [.2007.0024.0008] # LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND GRAVE +00EA 0300 ; [.2007.0024.0002] # +00EA 0340 ; [.2007.0024.0002] # +00CA 0300 ; [.2007.0024.0008] # +00CA 0340 ; [.2007.0024.0008] # +00EA ; [.2007.0025.0002] # LATIN SMALL LETTER E WITH CIRCUMFLEX +0065 0302 ; [.2007.0025.0002] # LATIN SMALL LETTER E WITH CIRCUMFLEX +00CA ; [.2007.0025.0008] # LATIN CAPITAL LETTER E WITH CIRCUMFLEX +0045 0302 ; [.2007.0025.0008] # LATIN CAPITAL LETTER E WITH CIRCUMFLEX +1EC5 ; [.2007.0025.0002][.0000.002D.0002] # LATIN SMALL LETTER E WITH CIRCUMFLEX AND TILDE +1EC4 ; [.2007.0025.0008][.0000.002D.0002] # LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND TILDE +1EC3 ; [.2007.0025.0002][.0000.003B.0002] # LATIN SMALL LETTER E WITH CIRCUMFLEX AND HOOK ABOVE +1EC2 ; [.2007.0025.0008][.0000.003B.0002] # LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND HOOK ABOVE +1EC7 ; [.2007.0025.0002][.0000.0042.0002] # LATIN SMALL LETTER E WITH CIRCUMFLEX AND DOT BELOW +1EC6 ; [.2007.0025.0008][.0000.0042.0002] # LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND DOT BELOW +012B ; [.2090.001C.0002] # LATIN SMALL LETTER I WITH MACRON +0069 0304 ; [.2090.001C.0002] # LATIN SMALL LETTER I WITH MACRON +012A ; [.2090.001C.0008] # LATIN CAPITAL LETTER I WITH MACRON +0049 0304 ; [.2090.001C.0008] # LATIN CAPITAL LETTER I WITH MACRON +00ED ; [.2090.001D.0002] # LATIN SMALL LETTER I WITH ACUTE +0069 0301 ; [.2090.001D.0002] # LATIN SMALL LETTER I WITH ACUTE +0069 0341 ; [.2090.001D.0002] # LATIN SMALL LETTER I WITH ACUTE +00CD ; [.2090.001D.0008] # LATIN CAPITAL LETTER I WITH ACUTE +0049 0301 ; [.2090.001D.0008] # LATIN CAPITAL LETTER I WITH ACUTE +0049 0341 ; [.2090.001D.0008] # LATIN CAPITAL LETTER I WITH ACUTE +01D0 ; [.2090.001E.0002] # LATIN SMALL LETTER I WITH CARON +0069 030C ; [.2090.001E.0002] # LATIN SMALL LETTER I WITH CARON +01CF ; [.2090.001E.0008] # LATIN CAPITAL LETTER I WITH CARON +0049 030C ; [.2090.001E.0008] # LATIN CAPITAL LETTER I WITH CARON +00EC ; [.2090.001F.0002] # LATIN SMALL LETTER I WITH GRAVE +0069 0300 ; [.2090.001F.0002] # LATIN SMALL LETTER I WITH GRAVE +0069 0340 ; [.2090.001F.0002] # LATIN SMALL LETTER I WITH GRAVE +00CC ; [.2090.001F.0008] # LATIN CAPITAL LETTER I WITH GRAVE +0049 0300 ; [.2090.001F.0008] # LATIN CAPITAL LETTER I WITH GRAVE +0049 0340 ; [.2090.001F.0008] # LATIN CAPITAL LETTER I WITH GRAVE +006D 0304 ; [.2109.001C.0002] # +004D 0304 ; [.2109.001C.0008] # +1E3F ; [.2109.001D.0002] # LATIN SMALL LETTER M WITH ACUTE +006D 0301 ; [.2109.001D.0002] # LATIN SMALL LETTER M WITH ACUTE +006D 0341 ; [.2109.001D.0002] # LATIN SMALL LETTER M WITH ACUTE +1E3E ; [.2109.001D.0008] # LATIN CAPITAL LETTER M WITH ACUTE +004D 0301 ; [.2109.001D.0008] # LATIN CAPITAL LETTER M WITH ACUTE +004D 0341 ; [.2109.001D.0008] # LATIN CAPITAL LETTER M WITH ACUTE +006D 030C ; [.2109.001E.0002] # +004D 030C ; [.2109.001E.0008] # +006D 0300 ; [.2109.001F.0002] # +006D 0340 ; [.2109.001F.0002] # +004D 0300 ; [.2109.001F.0008] # +004D 0340 ; [.2109.001F.0008] # +006E 0304 ; [.2118.001C.0002] # +004E 0304 ; [.2118.001C.0008] # +0144 ; [.2118.001D.0002] # LATIN SMALL LETTER N WITH ACUTE +006E 0301 ; [.2118.001D.0002] # LATIN SMALL LETTER N WITH ACUTE +006E 0341 ; [.2118.001D.0002] # LATIN SMALL LETTER N WITH ACUTE +0143 ; [.2118.001D.0008] # LATIN CAPITAL LETTER N WITH ACUTE +004E 0301 ; [.2118.001D.0008] # LATIN CAPITAL LETTER N WITH ACUTE +004E 0341 ; [.2118.001D.0008] # LATIN CAPITAL LETTER N WITH ACUTE +0148 ; [.2118.001E.0002] # LATIN SMALL LETTER N WITH CARON +006E 030C ; [.2118.001E.0002] # LATIN SMALL LETTER N WITH CARON +0147 ; [.2118.001E.0008] # LATIN CAPITAL LETTER N WITH CARON +004E 030C ; [.2118.001E.0008] # LATIN CAPITAL LETTER N WITH CARON +01F9 ; [.2118.001F.0002] # LATIN SMALL LETTER N WITH GRAVE +006E 0300 ; [.2118.001F.0002] # LATIN SMALL LETTER N WITH GRAVE +006E 0340 ; [.2118.001F.0002] # LATIN SMALL LETTER N WITH GRAVE +01F8 ; [.2118.001F.0008] # LATIN CAPITAL LETTER N WITH GRAVE +004E 0300 ; [.2118.001F.0008] # LATIN CAPITAL LETTER N WITH GRAVE +004E 0340 ; [.2118.001F.0008] # LATIN CAPITAL LETTER N WITH GRAVE +014D ; [.213C.001C.0002] # LATIN SMALL LETTER O WITH MACRON +006F 0304 ; [.213C.001C.0002] # LATIN SMALL LETTER O WITH MACRON +014C ; [.213C.001C.0008] # LATIN CAPITAL LETTER O WITH MACRON +004F 0304 ; [.213C.001C.0008] # LATIN CAPITAL LETTER O WITH MACRON +00F3 ; [.213C.001D.0002] # LATIN SMALL LETTER O WITH ACUTE +006F 0301 ; [.213C.001D.0002] # LATIN SMALL LETTER O WITH ACUTE +006F 0341 ; [.213C.001D.0002] # LATIN SMALL LETTER O WITH ACUTE +00D3 ; [.213C.001D.0008] # LATIN CAPITAL LETTER O WITH ACUTE +004F 0301 ; [.213C.001D.0008] # LATIN CAPITAL LETTER O WITH ACUTE +004F 0341 ; [.213C.001D.0008] # LATIN CAPITAL LETTER O WITH ACUTE +01D2 ; [.213C.001E.0002] # LATIN SMALL LETTER O WITH CARON +006F 030C ; [.213C.001E.0002] # LATIN SMALL LETTER O WITH CARON +01D1 ; [.213C.001E.0008] # LATIN CAPITAL LETTER O WITH CARON +004F 030C ; [.213C.001E.0008] # LATIN CAPITAL LETTER O WITH CARON +00F2 ; [.213C.001F.0002] # LATIN SMALL LETTER O WITH GRAVE +006F 0300 ; [.213C.001F.0002] # LATIN SMALL LETTER O WITH GRAVE +006F 0340 ; [.213C.001F.0002] # LATIN SMALL LETTER O WITH GRAVE +00D2 ; [.213C.001F.0008] # LATIN CAPITAL LETTER O WITH GRAVE +004F 0300 ; [.213C.001F.0008] # LATIN CAPITAL LETTER O WITH GRAVE +004F 0340 ; [.213C.001F.0008] # LATIN CAPITAL LETTER O WITH GRAVE +016B ; [.2217.001C.0002] # LATIN SMALL LETTER U WITH MACRON +0075 0304 ; [.2217.001C.0002] # LATIN SMALL LETTER U WITH MACRON +016A ; [.2217.001C.0008] # LATIN CAPITAL LETTER U WITH MACRON +0055 0304 ; [.2217.001C.0008] # LATIN CAPITAL LETTER U WITH MACRON +00FA ; [.2217.001D.0002] # LATIN SMALL LETTER U WITH ACUTE +0075 0301 ; [.2217.001D.0002] # LATIN SMALL LETTER U WITH ACUTE +0075 0341 ; [.2217.001D.0002] # LATIN SMALL LETTER U WITH ACUTE +00DA ; [.2217.001D.0008] # LATIN CAPITAL LETTER U WITH ACUTE +0055 0301 ; [.2217.001D.0008] # LATIN CAPITAL LETTER U WITH ACUTE +0055 0341 ; [.2217.001D.0008] # LATIN CAPITAL LETTER U WITH ACUTE +01D4 ; [.2217.001E.0002] # LATIN SMALL LETTER U WITH CARON +0075 030C ; [.2217.001E.0002] # LATIN SMALL LETTER U WITH CARON +01D3 ; [.2217.001E.0008] # LATIN CAPITAL LETTER U WITH CARON +0055 030C ; [.2217.001E.0008] # LATIN CAPITAL LETTER U WITH CARON +00F9 ; [.2217.001F.0002] # LATIN SMALL LETTER U WITH GRAVE +0075 0300 ; [.2217.001F.0002] # LATIN SMALL LETTER U WITH GRAVE +0075 0340 ; [.2217.001F.0002] # LATIN SMALL LETTER U WITH GRAVE +00D9 ; [.2217.001F.0008] # LATIN CAPITAL LETTER U WITH GRAVE +0055 0300 ; [.2217.001F.0008] # LATIN CAPITAL LETTER U WITH GRAVE +0055 0340 ; [.2217.001F.0008] # LATIN CAPITAL LETTER U WITH GRAVE +01D6 ; [.2217.0021.0002] # LATIN SMALL LETTER U WITH DIAERESIS AND MACRON +0075 0308 0304 ; [.2217.0021.0002] # LATIN SMALL LETTER U WITH DIAERESIS AND MACRON +01D5 ; [.2217.0021.0008] # LATIN CAPITAL LETTER U WITH DIAERESIS AND MACRON +0055 0308 0304 ; [.2217.0021.0008] # LATIN CAPITAL LETTER U WITH DIAERESIS AND MACRON +00FC 0304 ; [.2217.0021.0002] # +00DC 0304 ; [.2217.0021.0008] # +01D8 ; [.2217.0022.0002] # LATIN SMALL LETTER U WITH DIAERESIS AND ACUTE +0075 0308 0301 ; [.2217.0022.0002] # LATIN SMALL LETTER U WITH DIAERESIS AND ACUTE +0075 0308 0341 ; [.2217.0022.0002] # LATIN SMALL LETTER U WITH DIAERESIS AND ACUTE +01D7 ; [.2217.0022.0008] # LATIN CAPITAL LETTER U WITH DIAERESIS AND ACUTE +0055 0308 0301 ; [.2217.0022.0008] # LATIN CAPITAL LETTER U WITH DIAERESIS AND ACUTE +0055 0308 0341 ; [.2217.0022.0008] # LATIN CAPITAL LETTER U WITH DIAERESIS AND ACUTE +00FC 0301 ; [.2217.0022.0002] # +00FC 0341 ; [.2217.0022.0002] # +00DC 0301 ; [.2217.0022.0008] # +00DC 0341 ; [.2217.0022.0008] # +01DA ; [.2217.0023.0002] # LATIN SMALL LETTER U WITH DIAERESIS AND CARON +0075 0308 030C ; [.2217.0023.0002] # LATIN SMALL LETTER U WITH DIAERESIS AND CARON +01D9 ; [.2217.0023.0008] # LATIN CAPITAL LETTER U WITH DIAERESIS AND CARON +0055 0308 030C ; [.2217.0023.0008] # LATIN CAPITAL LETTER U WITH DIAERESIS AND CARON +00FC 030C ; [.2217.0023.0002] # +00DC 030C ; [.2217.0023.0008] # +01DC ; [.2217.0024.0002] # LATIN SMALL LETTER U WITH DIAERESIS AND GRAVE +0075 0308 0300 ; [.2217.0024.0002] # LATIN SMALL LETTER U WITH DIAERESIS AND GRAVE +0075 0308 0340 ; [.2217.0024.0002] # LATIN SMALL LETTER U WITH DIAERESIS AND GRAVE +01DB ; [.2217.0024.0008] # LATIN CAPITAL LETTER U WITH DIAERESIS AND GRAVE +0055 0308 0300 ; [.2217.0024.0008] # LATIN CAPITAL LETTER U WITH DIAERESIS AND GRAVE +0055 0308 0340 ; [.2217.0024.0008] # LATIN CAPITAL LETTER U WITH DIAERESIS AND GRAVE +00FC 0300 ; [.2217.0024.0002] # +00FC 0340 ; [.2217.0024.0002] # +00DC 0300 ; [.2217.0024.0008] # +00DC 0340 ; [.2217.0024.0008] # +00FC ; [.2217.0025.0002] # LATIN SMALL LETTER U WITH DIAERESIS +0075 0308 ; [.2217.0025.0002] # LATIN SMALL LETTER U WITH DIAERESIS +00DC ; [.2217.0025.0008] # LATIN CAPITAL LETTER U WITH DIAERESIS +0055 0308 ; [.2217.0025.0008] # LATIN CAPITAL LETTER U WITH DIAERESIS ENTRY }; diff --git a/gnu/usr.bin/perl/cpan/Unicode-Collate/Collate/Locale/zh_big5.pl b/gnu/usr.bin/perl/cpan/Unicode-Collate/Collate/Locale/zh_big5.pl index 2854f5b51d1..b62f740682a 100644 --- a/gnu/usr.bin/perl/cpan/Unicode-Collate/Collate/Locale/zh_big5.pl +++ b/gnu/usr.bin/perl/cpan/Unicode-Collate/Collate/Locale/zh_big5.pl @@ -1,214 +1,214 @@ use Unicode::Collate::CJK::Big5; +{ - locale_version => 1.27, + locale_version => 1.31, overrideCJK => \&Unicode::Collate::CJK::Big5::weightBig5, - entry => <<'ENTRY', # for DUCET v10.0.0 -0101 ; [.1CAD.001C.0002] # LATIN SMALL LETTER A WITH MACRON -0061 0304 ; [.1CAD.001C.0002] # LATIN SMALL LETTER A WITH MACRON -0100 ; [.1CAD.001C.0008] # LATIN CAPITAL LETTER A WITH MACRON -0041 0304 ; [.1CAD.001C.0008] # LATIN CAPITAL LETTER A WITH MACRON -00E1 ; [.1CAD.001D.0002] # LATIN SMALL LETTER A WITH ACUTE -0061 0301 ; [.1CAD.001D.0002] # LATIN SMALL LETTER A WITH ACUTE -0061 0341 ; [.1CAD.001D.0002] # LATIN SMALL LETTER A WITH ACUTE -00C1 ; [.1CAD.001D.0008] # LATIN CAPITAL LETTER A WITH ACUTE -0041 0301 ; [.1CAD.001D.0008] # LATIN CAPITAL LETTER A WITH ACUTE -0041 0341 ; [.1CAD.001D.0008] # LATIN CAPITAL LETTER A WITH ACUTE -01CE ; [.1CAD.001E.0002] # LATIN SMALL LETTER A WITH CARON -0061 030C ; [.1CAD.001E.0002] # LATIN SMALL LETTER A WITH CARON -01CD ; [.1CAD.001E.0008] # LATIN CAPITAL LETTER A WITH CARON -0041 030C ; [.1CAD.001E.0008] # LATIN CAPITAL LETTER A WITH CARON -00E0 ; [.1CAD.001F.0002] # LATIN SMALL LETTER A WITH GRAVE -0061 0300 ; [.1CAD.001F.0002] # LATIN SMALL LETTER A WITH GRAVE -0061 0340 ; [.1CAD.001F.0002] # LATIN SMALL LETTER A WITH GRAVE -00C0 ; [.1CAD.001F.0008] # LATIN CAPITAL LETTER A WITH GRAVE -0041 0300 ; [.1CAD.001F.0008] # LATIN CAPITAL LETTER A WITH GRAVE -0041 0340 ; [.1CAD.001F.0008] # LATIN CAPITAL LETTER A WITH GRAVE -0113 ; [.1D10.001C.0002] # LATIN SMALL LETTER E WITH MACRON -0065 0304 ; [.1D10.001C.0002] # LATIN SMALL LETTER E WITH MACRON -0112 ; [.1D10.001C.0008] # LATIN CAPITAL LETTER E WITH MACRON -0045 0304 ; [.1D10.001C.0008] # LATIN CAPITAL LETTER E WITH MACRON -00E9 ; [.1D10.001D.0002] # LATIN SMALL LETTER E WITH ACUTE -0065 0301 ; [.1D10.001D.0002] # LATIN SMALL LETTER E WITH ACUTE -0065 0341 ; [.1D10.001D.0002] # LATIN SMALL LETTER E WITH ACUTE -00C9 ; [.1D10.001D.0008] # LATIN CAPITAL LETTER E WITH ACUTE -0045 0301 ; [.1D10.001D.0008] # LATIN CAPITAL LETTER E WITH ACUTE -0045 0341 ; [.1D10.001D.0008] # LATIN CAPITAL LETTER E WITH ACUTE -011B ; [.1D10.001E.0002] # LATIN SMALL LETTER E WITH CARON -0065 030C ; [.1D10.001E.0002] # LATIN SMALL LETTER E WITH CARON -011A ; [.1D10.001E.0008] # LATIN CAPITAL LETTER E WITH CARON -0045 030C ; [.1D10.001E.0008] # LATIN CAPITAL LETTER E WITH CARON -00E8 ; [.1D10.001F.0002] # LATIN SMALL LETTER E WITH GRAVE -0065 0300 ; [.1D10.001F.0002] # LATIN SMALL LETTER E WITH GRAVE -0065 0340 ; [.1D10.001F.0002] # LATIN SMALL LETTER E WITH GRAVE -00C8 ; [.1D10.001F.0008] # LATIN CAPITAL LETTER E WITH GRAVE -0045 0300 ; [.1D10.001F.0008] # LATIN CAPITAL LETTER E WITH GRAVE -0045 0340 ; [.1D10.001F.0008] # LATIN CAPITAL LETTER E WITH GRAVE -00EA 0304 ; [.1D10.0021.0002] # -00CA 0304 ; [.1D10.0021.0008] # -0065 0302 0304 ; [.1D10.0021.0002] # -0045 0302 0304 ; [.1D10.0021.0008] # -1EBF ; [.1D10.0022.0002] # LATIN SMALL LETTER E WITH CIRCUMFLEX AND ACUTE -0065 0302 0301 ; [.1D10.0022.0002] # LATIN SMALL LETTER E WITH CIRCUMFLEX AND ACUTE -0065 0302 0341 ; [.1D10.0022.0002] # LATIN SMALL LETTER E WITH CIRCUMFLEX AND ACUTE -1EBE ; [.1D10.0022.0008] # LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND ACUTE -0045 0302 0301 ; [.1D10.0022.0008] # LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND ACUTE -0045 0302 0341 ; [.1D10.0022.0008] # LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND ACUTE -00EA 0301 ; [.1D10.0022.0002] # -00EA 0341 ; [.1D10.0022.0002] # -00CA 0301 ; [.1D10.0022.0008] # -00CA 0341 ; [.1D10.0022.0008] # -00EA 030C ; [.1D10.0023.0002] # -00CA 030C ; [.1D10.0023.0008] # -0065 0302 030C ; [.1D10.0023.0002] # -0045 0302 030C ; [.1D10.0023.0008] # -1EC1 ; [.1D10.0024.0002] # LATIN SMALL LETTER E WITH CIRCUMFLEX AND GRAVE -0065 0302 0300 ; [.1D10.0024.0002] # LATIN SMALL LETTER E WITH CIRCUMFLEX AND GRAVE -0065 0302 0340 ; [.1D10.0024.0002] # LATIN SMALL LETTER E WITH CIRCUMFLEX AND GRAVE -1EC0 ; [.1D10.0024.0008] # LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND GRAVE -0045 0302 0300 ; [.1D10.0024.0008] # LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND GRAVE -0045 0302 0340 ; [.1D10.0024.0008] # LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND GRAVE -00EA 0300 ; [.1D10.0024.0002] # -00EA 0340 ; [.1D10.0024.0002] # -00CA 0300 ; [.1D10.0024.0008] # -00CA 0340 ; [.1D10.0024.0008] # -00EA ; [.1D10.0025.0002] # LATIN SMALL LETTER E WITH CIRCUMFLEX -0065 0302 ; [.1D10.0025.0002] # LATIN SMALL LETTER E WITH CIRCUMFLEX -00CA ; [.1D10.0025.0008] # LATIN CAPITAL LETTER E WITH CIRCUMFLEX -0045 0302 ; [.1D10.0025.0008] # LATIN CAPITAL LETTER E WITH CIRCUMFLEX -1EC5 ; [.1D10.0025.0002][.0000.002D.0002] # LATIN SMALL LETTER E WITH CIRCUMFLEX AND TILDE -1EC4 ; [.1D10.0025.0008][.0000.002D.0002] # LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND TILDE -1EC3 ; [.1D10.0025.0002][.0000.003B.0002] # LATIN SMALL LETTER E WITH CIRCUMFLEX AND HOOK ABOVE -1EC2 ; [.1D10.0025.0008][.0000.003B.0002] # LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND HOOK ABOVE -1EC7 ; [.1D10.0025.0002][.0000.0042.0002] # LATIN SMALL LETTER E WITH CIRCUMFLEX AND DOT BELOW -1EC6 ; [.1D10.0025.0008][.0000.0042.0002] # LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND DOT BELOW -012B ; [.1D98.001C.0002] # LATIN SMALL LETTER I WITH MACRON -0069 0304 ; [.1D98.001C.0002] # LATIN SMALL LETTER I WITH MACRON -012A ; [.1D98.001C.0008] # LATIN CAPITAL LETTER I WITH MACRON -0049 0304 ; [.1D98.001C.0008] # LATIN CAPITAL LETTER I WITH MACRON -00ED ; [.1D98.001D.0002] # LATIN SMALL LETTER I WITH ACUTE -0069 0301 ; [.1D98.001D.0002] # LATIN SMALL LETTER I WITH ACUTE -0069 0341 ; [.1D98.001D.0002] # LATIN SMALL LETTER I WITH ACUTE -00CD ; [.1D98.001D.0008] # LATIN CAPITAL LETTER I WITH ACUTE -0049 0301 ; [.1D98.001D.0008] # LATIN CAPITAL LETTER I WITH ACUTE -0049 0341 ; [.1D98.001D.0008] # LATIN CAPITAL LETTER I WITH ACUTE -01D0 ; [.1D98.001E.0002] # LATIN SMALL LETTER I WITH CARON -0069 030C ; [.1D98.001E.0002] # LATIN SMALL LETTER I WITH CARON -01CF ; [.1D98.001E.0008] # LATIN CAPITAL LETTER I WITH CARON -0049 030C ; [.1D98.001E.0008] # LATIN CAPITAL LETTER I WITH CARON -00EC ; [.1D98.001F.0002] # LATIN SMALL LETTER I WITH GRAVE -0069 0300 ; [.1D98.001F.0002] # LATIN SMALL LETTER I WITH GRAVE -0069 0340 ; [.1D98.001F.0002] # LATIN SMALL LETTER I WITH GRAVE -00CC ; [.1D98.001F.0008] # LATIN CAPITAL LETTER I WITH GRAVE -0049 0300 ; [.1D98.001F.0008] # LATIN CAPITAL LETTER I WITH GRAVE -0049 0340 ; [.1D98.001F.0008] # LATIN CAPITAL LETTER I WITH GRAVE -006D 0304 ; [.1E10.001C.0002] # -004D 0304 ; [.1E10.001C.0008] # -1E3F ; [.1E10.001D.0002] # LATIN SMALL LETTER M WITH ACUTE -006D 0301 ; [.1E10.001D.0002] # LATIN SMALL LETTER M WITH ACUTE -006D 0341 ; [.1E10.001D.0002] # LATIN SMALL LETTER M WITH ACUTE -1E3E ; [.1E10.001D.0008] # LATIN CAPITAL LETTER M WITH ACUTE -004D 0301 ; [.1E10.001D.0008] # LATIN CAPITAL LETTER M WITH ACUTE -004D 0341 ; [.1E10.001D.0008] # LATIN CAPITAL LETTER M WITH ACUTE -006D 030C ; [.1E10.001E.0002] # -004D 030C ; [.1E10.001E.0008] # -006D 0300 ; [.1E10.001F.0002] # -006D 0340 ; [.1E10.001F.0002] # -004D 0300 ; [.1E10.001F.0008] # -004D 0340 ; [.1E10.001F.0008] # -006E 0304 ; [.1E1F.001C.0002] # -004E 0304 ; [.1E1F.001C.0008] # -0144 ; [.1E1F.001D.0002] # LATIN SMALL LETTER N WITH ACUTE -006E 0301 ; [.1E1F.001D.0002] # LATIN SMALL LETTER N WITH ACUTE -006E 0341 ; [.1E1F.001D.0002] # LATIN SMALL LETTER N WITH ACUTE -0143 ; [.1E1F.001D.0008] # LATIN CAPITAL LETTER N WITH ACUTE -004E 0301 ; [.1E1F.001D.0008] # LATIN CAPITAL LETTER N WITH ACUTE -004E 0341 ; [.1E1F.001D.0008] # LATIN CAPITAL LETTER N WITH ACUTE -0148 ; [.1E1F.001E.0002] # LATIN SMALL LETTER N WITH CARON -006E 030C ; [.1E1F.001E.0002] # LATIN SMALL LETTER N WITH CARON -0147 ; [.1E1F.001E.0008] # LATIN CAPITAL LETTER N WITH CARON -004E 030C ; [.1E1F.001E.0008] # LATIN CAPITAL LETTER N WITH CARON -01F9 ; [.1E1F.001F.0002] # LATIN SMALL LETTER N WITH GRAVE -006E 0300 ; [.1E1F.001F.0002] # LATIN SMALL LETTER N WITH GRAVE -006E 0340 ; [.1E1F.001F.0002] # LATIN SMALL LETTER N WITH GRAVE -01F8 ; [.1E1F.001F.0008] # LATIN CAPITAL LETTER N WITH GRAVE -004E 0300 ; [.1E1F.001F.0008] # LATIN CAPITAL LETTER N WITH GRAVE -004E 0340 ; [.1E1F.001F.0008] # LATIN CAPITAL LETTER N WITH GRAVE -014D ; [.1E43.001C.0002] # LATIN SMALL LETTER O WITH MACRON -006F 0304 ; [.1E43.001C.0002] # LATIN SMALL LETTER O WITH MACRON -014C ; [.1E43.001C.0008] # LATIN CAPITAL LETTER O WITH MACRON -004F 0304 ; [.1E43.001C.0008] # LATIN CAPITAL LETTER O WITH MACRON -00F3 ; [.1E43.001D.0002] # LATIN SMALL LETTER O WITH ACUTE -006F 0301 ; [.1E43.001D.0002] # LATIN SMALL LETTER O WITH ACUTE -006F 0341 ; [.1E43.001D.0002] # LATIN SMALL LETTER O WITH ACUTE -00D3 ; [.1E43.001D.0008] # LATIN CAPITAL LETTER O WITH ACUTE -004F 0301 ; [.1E43.001D.0008] # LATIN CAPITAL LETTER O WITH ACUTE -004F 0341 ; [.1E43.001D.0008] # LATIN CAPITAL LETTER O WITH ACUTE -01D2 ; [.1E43.001E.0002] # LATIN SMALL LETTER O WITH CARON -006F 030C ; [.1E43.001E.0002] # LATIN SMALL LETTER O WITH CARON -01D1 ; [.1E43.001E.0008] # LATIN CAPITAL LETTER O WITH CARON -004F 030C ; [.1E43.001E.0008] # LATIN CAPITAL LETTER O WITH CARON -00F2 ; [.1E43.001F.0002] # LATIN SMALL LETTER O WITH GRAVE -006F 0300 ; [.1E43.001F.0002] # LATIN SMALL LETTER O WITH GRAVE -006F 0340 ; [.1E43.001F.0002] # LATIN SMALL LETTER O WITH GRAVE -00D2 ; [.1E43.001F.0008] # LATIN CAPITAL LETTER O WITH GRAVE -004F 0300 ; [.1E43.001F.0008] # LATIN CAPITAL LETTER O WITH GRAVE -004F 0340 ; [.1E43.001F.0008] # LATIN CAPITAL LETTER O WITH GRAVE -016B ; [.1F1B.001C.0002] # LATIN SMALL LETTER U WITH MACRON -0075 0304 ; [.1F1B.001C.0002] # LATIN SMALL LETTER U WITH MACRON -016A ; [.1F1B.001C.0008] # LATIN CAPITAL LETTER U WITH MACRON -0055 0304 ; [.1F1B.001C.0008] # LATIN CAPITAL LETTER U WITH MACRON -00FA ; [.1F1B.001D.0002] # LATIN SMALL LETTER U WITH ACUTE -0075 0301 ; [.1F1B.001D.0002] # LATIN SMALL LETTER U WITH ACUTE -0075 0341 ; [.1F1B.001D.0002] # LATIN SMALL LETTER U WITH ACUTE -00DA ; [.1F1B.001D.0008] # LATIN CAPITAL LETTER U WITH ACUTE -0055 0301 ; [.1F1B.001D.0008] # LATIN CAPITAL LETTER U WITH ACUTE -0055 0341 ; [.1F1B.001D.0008] # LATIN CAPITAL LETTER U WITH ACUTE -01D4 ; [.1F1B.001E.0002] # LATIN SMALL LETTER U WITH CARON -0075 030C ; [.1F1B.001E.0002] # LATIN SMALL LETTER U WITH CARON -01D3 ; [.1F1B.001E.0008] # LATIN CAPITAL LETTER U WITH CARON -0055 030C ; [.1F1B.001E.0008] # LATIN CAPITAL LETTER U WITH CARON -00F9 ; [.1F1B.001F.0002] # LATIN SMALL LETTER U WITH GRAVE -0075 0300 ; [.1F1B.001F.0002] # LATIN SMALL LETTER U WITH GRAVE -0075 0340 ; [.1F1B.001F.0002] # LATIN SMALL LETTER U WITH GRAVE -00D9 ; [.1F1B.001F.0008] # LATIN CAPITAL LETTER U WITH GRAVE -0055 0300 ; [.1F1B.001F.0008] # LATIN CAPITAL LETTER U WITH GRAVE -0055 0340 ; [.1F1B.001F.0008] # LATIN CAPITAL LETTER U WITH GRAVE -01D6 ; [.1F1B.0021.0002] # LATIN SMALL LETTER U WITH DIAERESIS AND MACRON -0075 0308 0304 ; [.1F1B.0021.0002] # LATIN SMALL LETTER U WITH DIAERESIS AND MACRON -01D5 ; [.1F1B.0021.0008] # LATIN CAPITAL LETTER U WITH DIAERESIS AND MACRON -0055 0308 0304 ; [.1F1B.0021.0008] # LATIN CAPITAL LETTER U WITH DIAERESIS AND MACRON -00FC 0304 ; [.1F1B.0021.0002] # -00DC 0304 ; [.1F1B.0021.0008] # -01D8 ; [.1F1B.0022.0002] # LATIN SMALL LETTER U WITH DIAERESIS AND ACUTE -0075 0308 0301 ; [.1F1B.0022.0002] # LATIN SMALL LETTER U WITH DIAERESIS AND ACUTE -0075 0308 0341 ; [.1F1B.0022.0002] # LATIN SMALL LETTER U WITH DIAERESIS AND ACUTE -01D7 ; [.1F1B.0022.0008] # LATIN CAPITAL LETTER U WITH DIAERESIS AND ACUTE -0055 0308 0301 ; [.1F1B.0022.0008] # LATIN CAPITAL LETTER U WITH DIAERESIS AND ACUTE -0055 0308 0341 ; [.1F1B.0022.0008] # LATIN CAPITAL LETTER U WITH DIAERESIS AND ACUTE -00FC 0301 ; [.1F1B.0022.0002] # -00FC 0341 ; [.1F1B.0022.0002] # -00DC 0301 ; [.1F1B.0022.0008] # -00DC 0341 ; [.1F1B.0022.0008] # -01DA ; [.1F1B.0023.0002] # LATIN SMALL LETTER U WITH DIAERESIS AND CARON -0075 0308 030C ; [.1F1B.0023.0002] # LATIN SMALL LETTER U WITH DIAERESIS AND CARON -01D9 ; [.1F1B.0023.0008] # LATIN CAPITAL LETTER U WITH DIAERESIS AND CARON -0055 0308 030C ; [.1F1B.0023.0008] # LATIN CAPITAL LETTER U WITH DIAERESIS AND CARON -00FC 030C ; [.1F1B.0023.0002] # -00DC 030C ; [.1F1B.0023.0008] # -01DC ; [.1F1B.0024.0002] # LATIN SMALL LETTER U WITH DIAERESIS AND GRAVE -0075 0308 0300 ; [.1F1B.0024.0002] # LATIN SMALL LETTER U WITH DIAERESIS AND GRAVE -0075 0308 0340 ; [.1F1B.0024.0002] # LATIN SMALL LETTER U WITH DIAERESIS AND GRAVE -01DB ; [.1F1B.0024.0008] # LATIN CAPITAL LETTER U WITH DIAERESIS AND GRAVE -0055 0308 0300 ; [.1F1B.0024.0008] # LATIN CAPITAL LETTER U WITH DIAERESIS AND GRAVE -0055 0308 0340 ; [.1F1B.0024.0008] # LATIN CAPITAL LETTER U WITH DIAERESIS AND GRAVE -00FC 0300 ; [.1F1B.0024.0002] # -00FC 0340 ; [.1F1B.0024.0002] # -00DC 0300 ; [.1F1B.0024.0008] # -00DC 0340 ; [.1F1B.0024.0008] # -00FC ; [.1F1B.0025.0002] # LATIN SMALL LETTER U WITH DIAERESIS -0075 0308 ; [.1F1B.0025.0002] # LATIN SMALL LETTER U WITH DIAERESIS -00DC ; [.1F1B.0025.0008] # LATIN CAPITAL LETTER U WITH DIAERESIS -0055 0308 ; [.1F1B.0025.0008] # LATIN CAPITAL LETTER U WITH DIAERESIS + entry => <<'ENTRY', # for DUCET v13.0.0 +0101 ; [.1FA2.001C.0002] # LATIN SMALL LETTER A WITH MACRON +0061 0304 ; [.1FA2.001C.0002] # LATIN SMALL LETTER A WITH MACRON +0100 ; [.1FA2.001C.0008] # LATIN CAPITAL LETTER A WITH MACRON +0041 0304 ; [.1FA2.001C.0008] # LATIN CAPITAL LETTER A WITH MACRON +00E1 ; [.1FA2.001D.0002] # LATIN SMALL LETTER A WITH ACUTE +0061 0301 ; [.1FA2.001D.0002] # LATIN SMALL LETTER A WITH ACUTE +0061 0341 ; [.1FA2.001D.0002] # LATIN SMALL LETTER A WITH ACUTE +00C1 ; [.1FA2.001D.0008] # LATIN CAPITAL LETTER A WITH ACUTE +0041 0301 ; [.1FA2.001D.0008] # LATIN CAPITAL LETTER A WITH ACUTE +0041 0341 ; [.1FA2.001D.0008] # LATIN CAPITAL LETTER A WITH ACUTE +01CE ; [.1FA2.001E.0002] # LATIN SMALL LETTER A WITH CARON +0061 030C ; [.1FA2.001E.0002] # LATIN SMALL LETTER A WITH CARON +01CD ; [.1FA2.001E.0008] # LATIN CAPITAL LETTER A WITH CARON +0041 030C ; [.1FA2.001E.0008] # LATIN CAPITAL LETTER A WITH CARON +00E0 ; [.1FA2.001F.0002] # LATIN SMALL LETTER A WITH GRAVE +0061 0300 ; [.1FA2.001F.0002] # LATIN SMALL LETTER A WITH GRAVE +0061 0340 ; [.1FA2.001F.0002] # LATIN SMALL LETTER A WITH GRAVE +00C0 ; [.1FA2.001F.0008] # LATIN CAPITAL LETTER A WITH GRAVE +0041 0300 ; [.1FA2.001F.0008] # LATIN CAPITAL LETTER A WITH GRAVE +0041 0340 ; [.1FA2.001F.0008] # LATIN CAPITAL LETTER A WITH GRAVE +0113 ; [.2007.001C.0002] # LATIN SMALL LETTER E WITH MACRON +0065 0304 ; [.2007.001C.0002] # LATIN SMALL LETTER E WITH MACRON +0112 ; [.2007.001C.0008] # LATIN CAPITAL LETTER E WITH MACRON +0045 0304 ; [.2007.001C.0008] # LATIN CAPITAL LETTER E WITH MACRON +00E9 ; [.2007.001D.0002] # LATIN SMALL LETTER E WITH ACUTE +0065 0301 ; [.2007.001D.0002] # LATIN SMALL LETTER E WITH ACUTE +0065 0341 ; [.2007.001D.0002] # LATIN SMALL LETTER E WITH ACUTE +00C9 ; [.2007.001D.0008] # LATIN CAPITAL LETTER E WITH ACUTE +0045 0301 ; [.2007.001D.0008] # LATIN CAPITAL LETTER E WITH ACUTE +0045 0341 ; [.2007.001D.0008] # LATIN CAPITAL LETTER E WITH ACUTE +011B ; [.2007.001E.0002] # LATIN SMALL LETTER E WITH CARON +0065 030C ; [.2007.001E.0002] # LATIN SMALL LETTER E WITH CARON +011A ; [.2007.001E.0008] # LATIN CAPITAL LETTER E WITH CARON +0045 030C ; [.2007.001E.0008] # LATIN CAPITAL LETTER E WITH CARON +00E8 ; [.2007.001F.0002] # LATIN SMALL LETTER E WITH GRAVE +0065 0300 ; [.2007.001F.0002] # LATIN SMALL LETTER E WITH GRAVE +0065 0340 ; [.2007.001F.0002] # LATIN SMALL LETTER E WITH GRAVE +00C8 ; [.2007.001F.0008] # LATIN CAPITAL LETTER E WITH GRAVE +0045 0300 ; [.2007.001F.0008] # LATIN CAPITAL LETTER E WITH GRAVE +0045 0340 ; [.2007.001F.0008] # LATIN CAPITAL LETTER E WITH GRAVE +00EA 0304 ; [.2007.0021.0002] # +00CA 0304 ; [.2007.0021.0008] # +0065 0302 0304 ; [.2007.0021.0002] # +0045 0302 0304 ; [.2007.0021.0008] # +1EBF ; [.2007.0022.0002] # LATIN SMALL LETTER E WITH CIRCUMFLEX AND ACUTE +0065 0302 0301 ; [.2007.0022.0002] # LATIN SMALL LETTER E WITH CIRCUMFLEX AND ACUTE +0065 0302 0341 ; [.2007.0022.0002] # LATIN SMALL LETTER E WITH CIRCUMFLEX AND ACUTE +1EBE ; [.2007.0022.0008] # LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND ACUTE +0045 0302 0301 ; [.2007.0022.0008] # LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND ACUTE +0045 0302 0341 ; [.2007.0022.0008] # LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND ACUTE +00EA 0301 ; [.2007.0022.0002] # +00EA 0341 ; [.2007.0022.0002] # +00CA 0301 ; [.2007.0022.0008] # +00CA 0341 ; [.2007.0022.0008] # +00EA 030C ; [.2007.0023.0002] # +00CA 030C ; [.2007.0023.0008] # +0065 0302 030C ; [.2007.0023.0002] # +0045 0302 030C ; [.2007.0023.0008] # +1EC1 ; [.2007.0024.0002] # LATIN SMALL LETTER E WITH CIRCUMFLEX AND GRAVE +0065 0302 0300 ; [.2007.0024.0002] # LATIN SMALL LETTER E WITH CIRCUMFLEX AND GRAVE +0065 0302 0340 ; [.2007.0024.0002] # LATIN SMALL LETTER E WITH CIRCUMFLEX AND GRAVE +1EC0 ; [.2007.0024.0008] # LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND GRAVE +0045 0302 0300 ; [.2007.0024.0008] # LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND GRAVE +0045 0302 0340 ; [.2007.0024.0008] # LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND GRAVE +00EA 0300 ; [.2007.0024.0002] # +00EA 0340 ; [.2007.0024.0002] # +00CA 0300 ; [.2007.0024.0008] # +00CA 0340 ; [.2007.0024.0008] # +00EA ; [.2007.0025.0002] # LATIN SMALL LETTER E WITH CIRCUMFLEX +0065 0302 ; [.2007.0025.0002] # LATIN SMALL LETTER E WITH CIRCUMFLEX +00CA ; [.2007.0025.0008] # LATIN CAPITAL LETTER E WITH CIRCUMFLEX +0045 0302 ; [.2007.0025.0008] # LATIN CAPITAL LETTER E WITH CIRCUMFLEX +1EC5 ; [.2007.0025.0002][.0000.002D.0002] # LATIN SMALL LETTER E WITH CIRCUMFLEX AND TILDE +1EC4 ; [.2007.0025.0008][.0000.002D.0002] # LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND TILDE +1EC3 ; [.2007.0025.0002][.0000.003B.0002] # LATIN SMALL LETTER E WITH CIRCUMFLEX AND HOOK ABOVE +1EC2 ; [.2007.0025.0008][.0000.003B.0002] # LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND HOOK ABOVE +1EC7 ; [.2007.0025.0002][.0000.0042.0002] # LATIN SMALL LETTER E WITH CIRCUMFLEX AND DOT BELOW +1EC6 ; [.2007.0025.0008][.0000.0042.0002] # LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND DOT BELOW +012B ; [.2090.001C.0002] # LATIN SMALL LETTER I WITH MACRON +0069 0304 ; [.2090.001C.0002] # LATIN SMALL LETTER I WITH MACRON +012A ; [.2090.001C.0008] # LATIN CAPITAL LETTER I WITH MACRON +0049 0304 ; [.2090.001C.0008] # LATIN CAPITAL LETTER I WITH MACRON +00ED ; [.2090.001D.0002] # LATIN SMALL LETTER I WITH ACUTE +0069 0301 ; [.2090.001D.0002] # LATIN SMALL LETTER I WITH ACUTE +0069 0341 ; [.2090.001D.0002] # LATIN SMALL LETTER I WITH ACUTE +00CD ; [.2090.001D.0008] # LATIN CAPITAL LETTER I WITH ACUTE +0049 0301 ; [.2090.001D.0008] # LATIN CAPITAL LETTER I WITH ACUTE +0049 0341 ; [.2090.001D.0008] # LATIN CAPITAL LETTER I WITH ACUTE +01D0 ; [.2090.001E.0002] # LATIN SMALL LETTER I WITH CARON +0069 030C ; [.2090.001E.0002] # LATIN SMALL LETTER I WITH CARON +01CF ; [.2090.001E.0008] # LATIN CAPITAL LETTER I WITH CARON +0049 030C ; [.2090.001E.0008] # LATIN CAPITAL LETTER I WITH CARON +00EC ; [.2090.001F.0002] # LATIN SMALL LETTER I WITH GRAVE +0069 0300 ; [.2090.001F.0002] # LATIN SMALL LETTER I WITH GRAVE +0069 0340 ; [.2090.001F.0002] # LATIN SMALL LETTER I WITH GRAVE +00CC ; [.2090.001F.0008] # LATIN CAPITAL LETTER I WITH GRAVE +0049 0300 ; [.2090.001F.0008] # LATIN CAPITAL LETTER I WITH GRAVE +0049 0340 ; [.2090.001F.0008] # LATIN CAPITAL LETTER I WITH GRAVE +006D 0304 ; [.2109.001C.0002] # +004D 0304 ; [.2109.001C.0008] # +1E3F ; [.2109.001D.0002] # LATIN SMALL LETTER M WITH ACUTE +006D 0301 ; [.2109.001D.0002] # LATIN SMALL LETTER M WITH ACUTE +006D 0341 ; [.2109.001D.0002] # LATIN SMALL LETTER M WITH ACUTE +1E3E ; [.2109.001D.0008] # LATIN CAPITAL LETTER M WITH ACUTE +004D 0301 ; [.2109.001D.0008] # LATIN CAPITAL LETTER M WITH ACUTE +004D 0341 ; [.2109.001D.0008] # LATIN CAPITAL LETTER M WITH ACUTE +006D 030C ; [.2109.001E.0002] # +004D 030C ; [.2109.001E.0008] # +006D 0300 ; [.2109.001F.0002] # +006D 0340 ; [.2109.001F.0002] # +004D 0300 ; [.2109.001F.0008] # +004D 0340 ; [.2109.001F.0008] # +006E 0304 ; [.2118.001C.0002] # +004E 0304 ; [.2118.001C.0008] # +0144 ; [.2118.001D.0002] # LATIN SMALL LETTER N WITH ACUTE +006E 0301 ; [.2118.001D.0002] # LATIN SMALL LETTER N WITH ACUTE +006E 0341 ; [.2118.001D.0002] # LATIN SMALL LETTER N WITH ACUTE +0143 ; [.2118.001D.0008] # LATIN CAPITAL LETTER N WITH ACUTE +004E 0301 ; [.2118.001D.0008] # LATIN CAPITAL LETTER N WITH ACUTE +004E 0341 ; [.2118.001D.0008] # LATIN CAPITAL LETTER N WITH ACUTE +0148 ; [.2118.001E.0002] # LATIN SMALL LETTER N WITH CARON +006E 030C ; [.2118.001E.0002] # LATIN SMALL LETTER N WITH CARON +0147 ; [.2118.001E.0008] # LATIN CAPITAL LETTER N WITH CARON +004E 030C ; [.2118.001E.0008] # LATIN CAPITAL LETTER N WITH CARON +01F9 ; [.2118.001F.0002] # LATIN SMALL LETTER N WITH GRAVE +006E 0300 ; [.2118.001F.0002] # LATIN SMALL LETTER N WITH GRAVE +006E 0340 ; [.2118.001F.0002] # LATIN SMALL LETTER N WITH GRAVE +01F8 ; [.2118.001F.0008] # LATIN CAPITAL LETTER N WITH GRAVE +004E 0300 ; [.2118.001F.0008] # LATIN CAPITAL LETTER N WITH GRAVE +004E 0340 ; [.2118.001F.0008] # LATIN CAPITAL LETTER N WITH GRAVE +014D ; [.213C.001C.0002] # LATIN SMALL LETTER O WITH MACRON +006F 0304 ; [.213C.001C.0002] # LATIN SMALL LETTER O WITH MACRON +014C ; [.213C.001C.0008] # LATIN CAPITAL LETTER O WITH MACRON +004F 0304 ; [.213C.001C.0008] # LATIN CAPITAL LETTER O WITH MACRON +00F3 ; [.213C.001D.0002] # LATIN SMALL LETTER O WITH ACUTE +006F 0301 ; [.213C.001D.0002] # LATIN SMALL LETTER O WITH ACUTE +006F 0341 ; [.213C.001D.0002] # LATIN SMALL LETTER O WITH ACUTE +00D3 ; [.213C.001D.0008] # LATIN CAPITAL LETTER O WITH ACUTE +004F 0301 ; [.213C.001D.0008] # LATIN CAPITAL LETTER O WITH ACUTE +004F 0341 ; [.213C.001D.0008] # LATIN CAPITAL LETTER O WITH ACUTE +01D2 ; [.213C.001E.0002] # LATIN SMALL LETTER O WITH CARON +006F 030C ; [.213C.001E.0002] # LATIN SMALL LETTER O WITH CARON +01D1 ; [.213C.001E.0008] # LATIN CAPITAL LETTER O WITH CARON +004F 030C ; [.213C.001E.0008] # LATIN CAPITAL LETTER O WITH CARON +00F2 ; [.213C.001F.0002] # LATIN SMALL LETTER O WITH GRAVE +006F 0300 ; [.213C.001F.0002] # LATIN SMALL LETTER O WITH GRAVE +006F 0340 ; [.213C.001F.0002] # LATIN SMALL LETTER O WITH GRAVE +00D2 ; [.213C.001F.0008] # LATIN CAPITAL LETTER O WITH GRAVE +004F 0300 ; [.213C.001F.0008] # LATIN CAPITAL LETTER O WITH GRAVE +004F 0340 ; [.213C.001F.0008] # LATIN CAPITAL LETTER O WITH GRAVE +016B ; [.2217.001C.0002] # LATIN SMALL LETTER U WITH MACRON +0075 0304 ; [.2217.001C.0002] # LATIN SMALL LETTER U WITH MACRON +016A ; [.2217.001C.0008] # LATIN CAPITAL LETTER U WITH MACRON +0055 0304 ; [.2217.001C.0008] # LATIN CAPITAL LETTER U WITH MACRON +00FA ; [.2217.001D.0002] # LATIN SMALL LETTER U WITH ACUTE +0075 0301 ; [.2217.001D.0002] # LATIN SMALL LETTER U WITH ACUTE +0075 0341 ; [.2217.001D.0002] # LATIN SMALL LETTER U WITH ACUTE +00DA ; [.2217.001D.0008] # LATIN CAPITAL LETTER U WITH ACUTE +0055 0301 ; [.2217.001D.0008] # LATIN CAPITAL LETTER U WITH ACUTE +0055 0341 ; [.2217.001D.0008] # LATIN CAPITAL LETTER U WITH ACUTE +01D4 ; [.2217.001E.0002] # LATIN SMALL LETTER U WITH CARON +0075 030C ; [.2217.001E.0002] # LATIN SMALL LETTER U WITH CARON +01D3 ; [.2217.001E.0008] # LATIN CAPITAL LETTER U WITH CARON +0055 030C ; [.2217.001E.0008] # LATIN CAPITAL LETTER U WITH CARON +00F9 ; [.2217.001F.0002] # LATIN SMALL LETTER U WITH GRAVE +0075 0300 ; [.2217.001F.0002] # LATIN SMALL LETTER U WITH GRAVE +0075 0340 ; [.2217.001F.0002] # LATIN SMALL LETTER U WITH GRAVE +00D9 ; [.2217.001F.0008] # LATIN CAPITAL LETTER U WITH GRAVE +0055 0300 ; [.2217.001F.0008] # LATIN CAPITAL LETTER U WITH GRAVE +0055 0340 ; [.2217.001F.0008] # LATIN CAPITAL LETTER U WITH GRAVE +01D6 ; [.2217.0021.0002] # LATIN SMALL LETTER U WITH DIAERESIS AND MACRON +0075 0308 0304 ; [.2217.0021.0002] # LATIN SMALL LETTER U WITH DIAERESIS AND MACRON +01D5 ; [.2217.0021.0008] # LATIN CAPITAL LETTER U WITH DIAERESIS AND MACRON +0055 0308 0304 ; [.2217.0021.0008] # LATIN CAPITAL LETTER U WITH DIAERESIS AND MACRON +00FC 0304 ; [.2217.0021.0002] # +00DC 0304 ; [.2217.0021.0008] # +01D8 ; [.2217.0022.0002] # LATIN SMALL LETTER U WITH DIAERESIS AND ACUTE +0075 0308 0301 ; [.2217.0022.0002] # LATIN SMALL LETTER U WITH DIAERESIS AND ACUTE +0075 0308 0341 ; [.2217.0022.0002] # LATIN SMALL LETTER U WITH DIAERESIS AND ACUTE +01D7 ; [.2217.0022.0008] # LATIN CAPITAL LETTER U WITH DIAERESIS AND ACUTE +0055 0308 0301 ; [.2217.0022.0008] # LATIN CAPITAL LETTER U WITH DIAERESIS AND ACUTE +0055 0308 0341 ; [.2217.0022.0008] # LATIN CAPITAL LETTER U WITH DIAERESIS AND ACUTE +00FC 0301 ; [.2217.0022.0002] # +00FC 0341 ; [.2217.0022.0002] # +00DC 0301 ; [.2217.0022.0008] # +00DC 0341 ; [.2217.0022.0008] # +01DA ; [.2217.0023.0002] # LATIN SMALL LETTER U WITH DIAERESIS AND CARON +0075 0308 030C ; [.2217.0023.0002] # LATIN SMALL LETTER U WITH DIAERESIS AND CARON +01D9 ; [.2217.0023.0008] # LATIN CAPITAL LETTER U WITH DIAERESIS AND CARON +0055 0308 030C ; [.2217.0023.0008] # LATIN CAPITAL LETTER U WITH DIAERESIS AND CARON +00FC 030C ; [.2217.0023.0002] # +00DC 030C ; [.2217.0023.0008] # +01DC ; [.2217.0024.0002] # LATIN SMALL LETTER U WITH DIAERESIS AND GRAVE +0075 0308 0300 ; [.2217.0024.0002] # LATIN SMALL LETTER U WITH DIAERESIS AND GRAVE +0075 0308 0340 ; [.2217.0024.0002] # LATIN SMALL LETTER U WITH DIAERESIS AND GRAVE +01DB ; [.2217.0024.0008] # LATIN CAPITAL LETTER U WITH DIAERESIS AND GRAVE +0055 0308 0300 ; [.2217.0024.0008] # LATIN CAPITAL LETTER U WITH DIAERESIS AND GRAVE +0055 0308 0340 ; [.2217.0024.0008] # LATIN CAPITAL LETTER U WITH DIAERESIS AND GRAVE +00FC 0300 ; [.2217.0024.0002] # +00FC 0340 ; [.2217.0024.0002] # +00DC 0300 ; [.2217.0024.0008] # +00DC 0340 ; [.2217.0024.0008] # +00FC ; [.2217.0025.0002] # LATIN SMALL LETTER U WITH DIAERESIS +0075 0308 ; [.2217.0025.0002] # LATIN SMALL LETTER U WITH DIAERESIS +00DC ; [.2217.0025.0008] # LATIN CAPITAL LETTER U WITH DIAERESIS +0055 0308 ; [.2217.0025.0008] # LATIN CAPITAL LETTER U WITH DIAERESIS F967 ; [.804A.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F967 FA70 ; [.82DE.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-FA70 F905 ; [.81CB.0020.0002] # CJK COMPATIBILITY IDEOGRAPH-F905 diff --git a/gnu/usr.bin/perl/cpan/Unicode-Collate/Collate/Locale/zh_gb.pl b/gnu/usr.bin/perl/cpan/Unicode-Collate/Collate/Locale/zh_gb.pl index 5f42ea4a8f7..308c6405b1c 100644 --- a/gnu/usr.bin/perl/cpan/Unicode-Collate/Collate/Locale/zh_gb.pl +++ b/gnu/usr.bin/perl/cpan/Unicode-Collate/Collate/Locale/zh_gb.pl @@ -1,214 +1,214 @@ use Unicode::Collate::CJK::GB2312; +{ - locale_version => 1.27, + locale_version => 1.31, overrideCJK => \&Unicode::Collate::CJK::GB2312::weightGB2312, - entry => <<'ENTRY', # for DUCET v10.0.0 -0101 ; [.1CAD.001C.0002] # LATIN SMALL LETTER A WITH MACRON -0061 0304 ; [.1CAD.001C.0002] # LATIN SMALL LETTER A WITH MACRON -0100 ; [.1CAD.001C.0008] # LATIN CAPITAL LETTER A WITH MACRON -0041 0304 ; [.1CAD.001C.0008] # LATIN CAPITAL LETTER A WITH MACRON -00E1 ; [.1CAD.001D.0002] # LATIN SMALL LETTER A WITH ACUTE -0061 0301 ; [.1CAD.001D.0002] # LATIN SMALL LETTER A WITH ACUTE -0061 0341 ; [.1CAD.001D.0002] # LATIN SMALL LETTER A WITH ACUTE -00C1 ; [.1CAD.001D.0008] # LATIN CAPITAL LETTER A WITH ACUTE -0041 0301 ; [.1CAD.001D.0008] # LATIN CAPITAL LETTER A WITH ACUTE -0041 0341 ; [.1CAD.001D.0008] # LATIN CAPITAL LETTER A WITH ACUTE -01CE ; [.1CAD.001E.0002] # LATIN SMALL LETTER A WITH CARON -0061 030C ; [.1CAD.001E.0002] # LATIN SMALL LETTER A WITH CARON -01CD ; [.1CAD.001E.0008] # LATIN CAPITAL LETTER A WITH CARON -0041 030C ; [.1CAD.001E.0008] # LATIN CAPITAL LETTER A WITH CARON -00E0 ; [.1CAD.001F.0002] # LATIN SMALL LETTER A WITH GRAVE -0061 0300 ; [.1CAD.001F.0002] # LATIN SMALL LETTER A WITH GRAVE -0061 0340 ; [.1CAD.001F.0002] # LATIN SMALL LETTER A WITH GRAVE -00C0 ; [.1CAD.001F.0008] # LATIN CAPITAL LETTER A WITH GRAVE -0041 0300 ; [.1CAD.001F.0008] # LATIN CAPITAL LETTER A WITH GRAVE -0041 0340 ; [.1CAD.001F.0008] # LATIN CAPITAL LETTER A WITH GRAVE -0113 ; [.1D10.001C.0002] # LATIN SMALL LETTER E WITH MACRON -0065 0304 ; [.1D10.001C.0002] # LATIN SMALL LETTER E WITH MACRON -0112 ; [.1D10.001C.0008] # LATIN CAPITAL LETTER E WITH MACRON -0045 0304 ; [.1D10.001C.0008] # LATIN CAPITAL LETTER E WITH MACRON -00E9 ; [.1D10.001D.0002] # LATIN SMALL LETTER E WITH ACUTE -0065 0301 ; [.1D10.001D.0002] # LATIN SMALL LETTER E WITH ACUTE -0065 0341 ; [.1D10.001D.0002] # LATIN SMALL LETTER E WITH ACUTE -00C9 ; [.1D10.001D.0008] # LATIN CAPITAL LETTER E WITH ACUTE -0045 0301 ; [.1D10.001D.0008] # LATIN CAPITAL LETTER E WITH ACUTE -0045 0341 ; [.1D10.001D.0008] # LATIN CAPITAL LETTER E WITH ACUTE -011B ; [.1D10.001E.0002] # LATIN SMALL LETTER E WITH CARON -0065 030C ; [.1D10.001E.0002] # LATIN SMALL LETTER E WITH CARON -011A ; [.1D10.001E.0008] # LATIN CAPITAL LETTER E WITH CARON -0045 030C ; [.1D10.001E.0008] # LATIN CAPITAL LETTER E WITH CARON -00E8 ; [.1D10.001F.0002] # LATIN SMALL LETTER E WITH GRAVE -0065 0300 ; [.1D10.001F.0002] # LATIN SMALL LETTER E WITH GRAVE -0065 0340 ; [.1D10.001F.0002] # LATIN SMALL LETTER E WITH GRAVE -00C8 ; [.1D10.001F.0008] # LATIN CAPITAL LETTER E WITH GRAVE -0045 0300 ; [.1D10.001F.0008] # LATIN CAPITAL LETTER E WITH GRAVE -0045 0340 ; [.1D10.001F.0008] # LATIN CAPITAL LETTER E WITH GRAVE -00EA 0304 ; [.1D10.0021.0002] # -00CA 0304 ; [.1D10.0021.0008] # -0065 0302 0304 ; [.1D10.0021.0002] # -0045 0302 0304 ; [.1D10.0021.0008] # -1EBF ; [.1D10.0022.0002] # LATIN SMALL LETTER E WITH CIRCUMFLEX AND ACUTE -0065 0302 0301 ; [.1D10.0022.0002] # LATIN SMALL LETTER E WITH CIRCUMFLEX AND ACUTE -0065 0302 0341 ; [.1D10.0022.0002] # LATIN SMALL LETTER E WITH CIRCUMFLEX AND ACUTE -1EBE ; [.1D10.0022.0008] # LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND ACUTE -0045 0302 0301 ; [.1D10.0022.0008] # LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND ACUTE -0045 0302 0341 ; [.1D10.0022.0008] # LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND ACUTE -00EA 0301 ; [.1D10.0022.0002] # -00EA 0341 ; [.1D10.0022.0002] # -00CA 0301 ; [.1D10.0022.0008] # -00CA 0341 ; [.1D10.0022.0008] # -00EA 030C ; [.1D10.0023.0002] # -00CA 030C ; [.1D10.0023.0008] # -0065 0302 030C ; [.1D10.0023.0002] # -0045 0302 030C ; [.1D10.0023.0008] # -1EC1 ; [.1D10.0024.0002] # LATIN SMALL LETTER E WITH CIRCUMFLEX AND GRAVE -0065 0302 0300 ; [.1D10.0024.0002] # LATIN SMALL LETTER E WITH CIRCUMFLEX AND GRAVE -0065 0302 0340 ; [.1D10.0024.0002] # LATIN SMALL LETTER E WITH CIRCUMFLEX AND GRAVE -1EC0 ; [.1D10.0024.0008] # LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND GRAVE -0045 0302 0300 ; [.1D10.0024.0008] # LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND GRAVE -0045 0302 0340 ; [.1D10.0024.0008] # LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND GRAVE -00EA 0300 ; [.1D10.0024.0002] # -00EA 0340 ; [.1D10.0024.0002] # -00CA 0300 ; [.1D10.0024.0008] # -00CA 0340 ; [.1D10.0024.0008] # -00EA ; [.1D10.0025.0002] # LATIN SMALL LETTER E WITH CIRCUMFLEX -0065 0302 ; [.1D10.0025.0002] # LATIN SMALL LETTER E WITH CIRCUMFLEX -00CA ; [.1D10.0025.0008] # LATIN CAPITAL LETTER E WITH CIRCUMFLEX -0045 0302 ; [.1D10.0025.0008] # LATIN CAPITAL LETTER E WITH CIRCUMFLEX -1EC5 ; [.1D10.0025.0002][.0000.002D.0002] # LATIN SMALL LETTER E WITH CIRCUMFLEX AND TILDE -1EC4 ; [.1D10.0025.0008][.0000.002D.0002] # LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND TILDE -1EC3 ; [.1D10.0025.0002][.0000.003B.0002] # LATIN SMALL LETTER E WITH CIRCUMFLEX AND HOOK ABOVE -1EC2 ; [.1D10.0025.0008][.0000.003B.0002] # LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND HOOK ABOVE -1EC7 ; [.1D10.0025.0002][.0000.0042.0002] # LATIN SMALL LETTER E WITH CIRCUMFLEX AND DOT BELOW -1EC6 ; [.1D10.0025.0008][.0000.0042.0002] # LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND DOT BELOW -012B ; [.1D98.001C.0002] # LATIN SMALL LETTER I WITH MACRON -0069 0304 ; [.1D98.001C.0002] # LATIN SMALL LETTER I WITH MACRON -012A ; [.1D98.001C.0008] # LATIN CAPITAL LETTER I WITH MACRON -0049 0304 ; [.1D98.001C.0008] # LATIN CAPITAL LETTER I WITH MACRON -00ED ; [.1D98.001D.0002] # LATIN SMALL LETTER I WITH ACUTE -0069 0301 ; [.1D98.001D.0002] # LATIN SMALL LETTER I WITH ACUTE -0069 0341 ; [.1D98.001D.0002] # LATIN SMALL LETTER I WITH ACUTE -00CD ; [.1D98.001D.0008] # LATIN CAPITAL LETTER I WITH ACUTE -0049 0301 ; [.1D98.001D.0008] # LATIN CAPITAL LETTER I WITH ACUTE -0049 0341 ; [.1D98.001D.0008] # LATIN CAPITAL LETTER I WITH ACUTE -01D0 ; [.1D98.001E.0002] # LATIN SMALL LETTER I WITH CARON -0069 030C ; [.1D98.001E.0002] # LATIN SMALL LETTER I WITH CARON -01CF ; [.1D98.001E.0008] # LATIN CAPITAL LETTER I WITH CARON -0049 030C ; [.1D98.001E.0008] # LATIN CAPITAL LETTER I WITH CARON -00EC ; [.1D98.001F.0002] # LATIN SMALL LETTER I WITH GRAVE -0069 0300 ; [.1D98.001F.0002] # LATIN SMALL LETTER I WITH GRAVE -0069 0340 ; [.1D98.001F.0002] # LATIN SMALL LETTER I WITH GRAVE -00CC ; [.1D98.001F.0008] # LATIN CAPITAL LETTER I WITH GRAVE -0049 0300 ; [.1D98.001F.0008] # LATIN CAPITAL LETTER I WITH GRAVE -0049 0340 ; [.1D98.001F.0008] # LATIN CAPITAL LETTER I WITH GRAVE -006D 0304 ; [.1E10.001C.0002] # -004D 0304 ; [.1E10.001C.0008] # -1E3F ; [.1E10.001D.0002] # LATIN SMALL LETTER M WITH ACUTE -006D 0301 ; [.1E10.001D.0002] # LATIN SMALL LETTER M WITH ACUTE -006D 0341 ; [.1E10.001D.0002] # LATIN SMALL LETTER M WITH ACUTE -1E3E ; [.1E10.001D.0008] # LATIN CAPITAL LETTER M WITH ACUTE -004D 0301 ; [.1E10.001D.0008] # LATIN CAPITAL LETTER M WITH ACUTE -004D 0341 ; [.1E10.001D.0008] # LATIN CAPITAL LETTER M WITH ACUTE -006D 030C ; [.1E10.001E.0002] # -004D 030C ; [.1E10.001E.0008] # -006D 0300 ; [.1E10.001F.0002] # -006D 0340 ; [.1E10.001F.0002] # -004D 0300 ; [.1E10.001F.0008] # -004D 0340 ; [.1E10.001F.0008] # -006E 0304 ; [.1E1F.001C.0002] # -004E 0304 ; [.1E1F.001C.0008] # -0144 ; [.1E1F.001D.0002] # LATIN SMALL LETTER N WITH ACUTE -006E 0301 ; [.1E1F.001D.0002] # LATIN SMALL LETTER N WITH ACUTE -006E 0341 ; [.1E1F.001D.0002] # LATIN SMALL LETTER N WITH ACUTE -0143 ; [.1E1F.001D.0008] # LATIN CAPITAL LETTER N WITH ACUTE -004E 0301 ; [.1E1F.001D.0008] # LATIN CAPITAL LETTER N WITH ACUTE -004E 0341 ; [.1E1F.001D.0008] # LATIN CAPITAL LETTER N WITH ACUTE -0148 ; [.1E1F.001E.0002] # LATIN SMALL LETTER N WITH CARON -006E 030C ; [.1E1F.001E.0002] # LATIN SMALL LETTER N WITH CARON -0147 ; [.1E1F.001E.0008] # LATIN CAPITAL LETTER N WITH CARON -004E 030C ; [.1E1F.001E.0008] # LATIN CAPITAL LETTER N WITH CARON -01F9 ; [.1E1F.001F.0002] # LATIN SMALL LETTER N WITH GRAVE -006E 0300 ; [.1E1F.001F.0002] # LATIN SMALL LETTER N WITH GRAVE -006E 0340 ; [.1E1F.001F.0002] # LATIN SMALL LETTER N WITH GRAVE -01F8 ; [.1E1F.001F.0008] # LATIN CAPITAL LETTER N WITH GRAVE -004E 0300 ; [.1E1F.001F.0008] # LATIN CAPITAL LETTER N WITH GRAVE -004E 0340 ; [.1E1F.001F.0008] # LATIN CAPITAL LETTER N WITH GRAVE -014D ; [.1E43.001C.0002] # LATIN SMALL LETTER O WITH MACRON -006F 0304 ; [.1E43.001C.0002] # LATIN SMALL LETTER O WITH MACRON -014C ; [.1E43.001C.0008] # LATIN CAPITAL LETTER O WITH MACRON -004F 0304 ; [.1E43.001C.0008] # LATIN CAPITAL LETTER O WITH MACRON -00F3 ; [.1E43.001D.0002] # LATIN SMALL LETTER O WITH ACUTE -006F 0301 ; [.1E43.001D.0002] # LATIN SMALL LETTER O WITH ACUTE -006F 0341 ; [.1E43.001D.0002] # LATIN SMALL LETTER O WITH ACUTE -00D3 ; [.1E43.001D.0008] # LATIN CAPITAL LETTER O WITH ACUTE -004F 0301 ; [.1E43.001D.0008] # LATIN CAPITAL LETTER O WITH ACUTE -004F 0341 ; [.1E43.001D.0008] # LATIN CAPITAL LETTER O WITH ACUTE -01D2 ; [.1E43.001E.0002] # LATIN SMALL LETTER O WITH CARON -006F 030C ; [.1E43.001E.0002] # LATIN SMALL LETTER O WITH CARON -01D1 ; [.1E43.001E.0008] # LATIN CAPITAL LETTER O WITH CARON -004F 030C ; [.1E43.001E.0008] # LATIN CAPITAL LETTER O WITH CARON -00F2 ; [.1E43.001F.0002] # LATIN SMALL LETTER O WITH GRAVE -006F 0300 ; [.1E43.001F.0002] # LATIN SMALL LETTER O WITH GRAVE -006F 0340 ; [.1E43.001F.0002] # LATIN SMALL LETTER O WITH GRAVE -00D2 ; [.1E43.001F.0008] # LATIN CAPITAL LETTER O WITH GRAVE -004F 0300 ; [.1E43.001F.0008] # LATIN CAPITAL LETTER O WITH GRAVE -004F 0340 ; [.1E43.001F.0008] # LATIN CAPITAL LETTER O WITH GRAVE -016B ; [.1F1B.001C.0002] # LATIN SMALL LETTER U WITH MACRON -0075 0304 ; [.1F1B.001C.0002] # LATIN SMALL LETTER U WITH MACRON -016A ; [.1F1B.001C.0008] # LATIN CAPITAL LETTER U WITH MACRON -0055 0304 ; [.1F1B.001C.0008] # LATIN CAPITAL LETTER U WITH MACRON -00FA ; [.1F1B.001D.0002] # LATIN SMALL LETTER U WITH ACUTE -0075 0301 ; [.1F1B.001D.0002] # LATIN SMALL LETTER U WITH ACUTE -0075 0341 ; [.1F1B.001D.0002] # LATIN SMALL LETTER U WITH ACUTE -00DA ; [.1F1B.001D.0008] # LATIN CAPITAL LETTER U WITH ACUTE -0055 0301 ; [.1F1B.001D.0008] # LATIN CAPITAL LETTER U WITH ACUTE -0055 0341 ; [.1F1B.001D.0008] # LATIN CAPITAL LETTER U WITH ACUTE -01D4 ; [.1F1B.001E.0002] # LATIN SMALL LETTER U WITH CARON -0075 030C ; [.1F1B.001E.0002] # LATIN SMALL LETTER U WITH CARON -01D3 ; [.1F1B.001E.0008] # LATIN CAPITAL LETTER U WITH CARON -0055 030C ; [.1F1B.001E.0008] # LATIN CAPITAL LETTER U WITH CARON -00F9 ; [.1F1B.001F.0002] # LATIN SMALL LETTER U WITH GRAVE -0075 0300 ; [.1F1B.001F.0002] # LATIN SMALL LETTER U WITH GRAVE -0075 0340 ; [.1F1B.001F.0002] # LATIN SMALL LETTER U WITH GRAVE -00D9 ; [.1F1B.001F.0008] # LATIN CAPITAL LETTER U WITH GRAVE -0055 0300 ; [.1F1B.001F.0008] # LATIN CAPITAL LETTER U WITH GRAVE -0055 0340 ; [.1F1B.001F.0008] # LATIN CAPITAL LETTER U WITH GRAVE -01D6 ; [.1F1B.0021.0002] # LATIN SMALL LETTER U WITH DIAERESIS AND MACRON -0075 0308 0304 ; [.1F1B.0021.0002] # LATIN SMALL LETTER U WITH DIAERESIS AND MACRON -01D5 ; [.1F1B.0021.0008] # LATIN CAPITAL LETTER U WITH DIAERESIS AND MACRON -0055 0308 0304 ; [.1F1B.0021.0008] # LATIN CAPITAL LETTER U WITH DIAERESIS AND MACRON -00FC 0304 ; [.1F1B.0021.0002] # -00DC 0304 ; [.1F1B.0021.0008] # -01D8 ; [.1F1B.0022.0002] # LATIN SMALL LETTER U WITH DIAERESIS AND ACUTE -0075 0308 0301 ; [.1F1B.0022.0002] # LATIN SMALL LETTER U WITH DIAERESIS AND ACUTE -0075 0308 0341 ; [.1F1B.0022.0002] # LATIN SMALL LETTER U WITH DIAERESIS AND ACUTE -01D7 ; [.1F1B.0022.0008] # LATIN CAPITAL LETTER U WITH DIAERESIS AND ACUTE -0055 0308 0301 ; [.1F1B.0022.0008] # LATIN CAPITAL LETTER U WITH DIAERESIS AND ACUTE -0055 0308 0341 ; [.1F1B.0022.0008] # LATIN CAPITAL LETTER U WITH DIAERESIS AND ACUTE -00FC 0301 ; [.1F1B.0022.0002] # -00FC 0341 ; [.1F1B.0022.0002] # -00DC 0301 ; [.1F1B.0022.0008] # -00DC 0341 ; [.1F1B.0022.0008] # -01DA ; [.1F1B.0023.0002] # LATIN SMALL LETTER U WITH DIAERESIS AND CARON -0075 0308 030C ; [.1F1B.0023.0002] # LATIN SMALL LETTER U WITH DIAERESIS AND CARON -01D9 ; [.1F1B.0023.0008] # LATIN CAPITAL LETTER U WITH DIAERESIS AND CARON -0055 0308 030C ; [.1F1B.0023.0008] # LATIN CAPITAL LETTER U WITH DIAERESIS AND CARON -00FC 030C ; [.1F1B.0023.0002] # -00DC 030C ; [.1F1B.0023.0008] # -01DC ; [.1F1B.0024.0002] # LATIN SMALL LETTER U WITH DIAERESIS AND GRAVE -0075 0308 0300 ; [.1F1B.0024.0002] # LATIN SMALL LETTER U WITH DIAERESIS AND GRAVE -0075 0308 0340 ; [.1F1B.0024.0002] # LATIN SMALL LETTER U WITH DIAERESIS AND GRAVE -01DB ; [.1F1B.0024.0008] # LATIN CAPITAL LETTER U WITH DIAERESIS AND GRAVE -0055 0308 0300 ; [.1F1B.0024.0008] # LATIN CAPITAL LETTER U WITH DIAERESIS AND GRAVE -0055 0308 0340 ; [.1F1B.0024.0008] # LATIN CAPITAL LETTER U WITH DIAERESIS AND GRAVE -00FC 0300 ; [.1F1B.0024.0002] # -00FC 0340 ; [.1F1B.0024.0002] # -00DC 0300 ; [.1F1B.0024.0008] # -00DC 0340 ; [.1F1B.0024.0008] # -00FC ; [.1F1B.0025.0002] # LATIN SMALL LETTER U WITH DIAERESIS -0075 0308 ; [.1F1B.0025.0002] # LATIN SMALL LETTER U WITH DIAERESIS -00DC ; [.1F1B.0025.0008] # LATIN CAPITAL LETTER U WITH DIAERESIS -0055 0308 ; [.1F1B.0025.0008] # LATIN CAPITAL LETTER U WITH DIAERESIS + entry => <<'ENTRY', # for DUCET v13.0.0 +0101 ; [.1FA2.001C.0002] # LATIN SMALL LETTER A WITH MACRON +0061 0304 ; [.1FA2.001C.0002] # LATIN SMALL LETTER A WITH MACRON +0100 ; [.1FA2.001C.0008] # LATIN CAPITAL LETTER A WITH MACRON +0041 0304 ; [.1FA2.001C.0008] # LATIN CAPITAL LETTER A WITH MACRON +00E1 ; [.1FA2.001D.0002] # LATIN SMALL LETTER A WITH ACUTE +0061 0301 ; [.1FA2.001D.0002] # LATIN SMALL LETTER A WITH ACUTE +0061 0341 ; [.1FA2.001D.0002] # LATIN SMALL LETTER A WITH ACUTE +00C1 ; [.1FA2.001D.0008] # LATIN CAPITAL LETTER A WITH ACUTE +0041 0301 ; [.1FA2.001D.0008] # LATIN CAPITAL LETTER A WITH ACUTE +0041 0341 ; [.1FA2.001D.0008] # LATIN CAPITAL LETTER A WITH ACUTE +01CE ; [.1FA2.001E.0002] # LATIN SMALL LETTER A WITH CARON +0061 030C ; [.1FA2.001E.0002] # LATIN SMALL LETTER A WITH CARON +01CD ; [.1FA2.001E.0008] # LATIN CAPITAL LETTER A WITH CARON +0041 030C ; [.1FA2.001E.0008] # LATIN CAPITAL LETTER A WITH CARON +00E0 ; [.1FA2.001F.0002] # LATIN SMALL LETTER A WITH GRAVE +0061 0300 ; [.1FA2.001F.0002] # LATIN SMALL LETTER A WITH GRAVE +0061 0340 ; [.1FA2.001F.0002] # LATIN SMALL LETTER A WITH GRAVE +00C0 ; [.1FA2.001F.0008] # LATIN CAPITAL LETTER A WITH GRAVE +0041 0300 ; [.1FA2.001F.0008] # LATIN CAPITAL LETTER A WITH GRAVE +0041 0340 ; [.1FA2.001F.0008] # LATIN CAPITAL LETTER A WITH GRAVE +0113 ; [.2007.001C.0002] # LATIN SMALL LETTER E WITH MACRON +0065 0304 ; [.2007.001C.0002] # LATIN SMALL LETTER E WITH MACRON +0112 ; [.2007.001C.0008] # LATIN CAPITAL LETTER E WITH MACRON +0045 0304 ; [.2007.001C.0008] # LATIN CAPITAL LETTER E WITH MACRON +00E9 ; [.2007.001D.0002] # LATIN SMALL LETTER E WITH ACUTE +0065 0301 ; [.2007.001D.0002] # LATIN SMALL LETTER E WITH ACUTE +0065 0341 ; [.2007.001D.0002] # LATIN SMALL LETTER E WITH ACUTE +00C9 ; [.2007.001D.0008] # LATIN CAPITAL LETTER E WITH ACUTE +0045 0301 ; [.2007.001D.0008] # LATIN CAPITAL LETTER E WITH ACUTE +0045 0341 ; [.2007.001D.0008] # LATIN CAPITAL LETTER E WITH ACUTE +011B ; [.2007.001E.0002] # LATIN SMALL LETTER E WITH CARON +0065 030C ; [.2007.001E.0002] # LATIN SMALL LETTER E WITH CARON +011A ; [.2007.001E.0008] # LATIN CAPITAL LETTER E WITH CARON +0045 030C ; [.2007.001E.0008] # LATIN CAPITAL LETTER E WITH CARON +00E8 ; [.2007.001F.0002] # LATIN SMALL LETTER E WITH GRAVE +0065 0300 ; [.2007.001F.0002] # LATIN SMALL LETTER E WITH GRAVE +0065 0340 ; [.2007.001F.0002] # LATIN SMALL LETTER E WITH GRAVE +00C8 ; [.2007.001F.0008] # LATIN CAPITAL LETTER E WITH GRAVE +0045 0300 ; [.2007.001F.0008] # LATIN CAPITAL LETTER E WITH GRAVE +0045 0340 ; [.2007.001F.0008] # LATIN CAPITAL LETTER E WITH GRAVE +00EA 0304 ; [.2007.0021.0002] # +00CA 0304 ; [.2007.0021.0008] # +0065 0302 0304 ; [.2007.0021.0002] # +0045 0302 0304 ; [.2007.0021.0008] # +1EBF ; [.2007.0022.0002] # LATIN SMALL LETTER E WITH CIRCUMFLEX AND ACUTE +0065 0302 0301 ; [.2007.0022.0002] # LATIN SMALL LETTER E WITH CIRCUMFLEX AND ACUTE +0065 0302 0341 ; [.2007.0022.0002] # LATIN SMALL LETTER E WITH CIRCUMFLEX AND ACUTE +1EBE ; [.2007.0022.0008] # LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND ACUTE +0045 0302 0301 ; [.2007.0022.0008] # LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND ACUTE +0045 0302 0341 ; [.2007.0022.0008] # LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND ACUTE +00EA 0301 ; [.2007.0022.0002] # +00EA 0341 ; [.2007.0022.0002] # +00CA 0301 ; [.2007.0022.0008] # +00CA 0341 ; [.2007.0022.0008] # +00EA 030C ; [.2007.0023.0002] # +00CA 030C ; [.2007.0023.0008] # +0065 0302 030C ; [.2007.0023.0002] # +0045 0302 030C ; [.2007.0023.0008] # +1EC1 ; [.2007.0024.0002] # LATIN SMALL LETTER E WITH CIRCUMFLEX AND GRAVE +0065 0302 0300 ; [.2007.0024.0002] # LATIN SMALL LETTER E WITH CIRCUMFLEX AND GRAVE +0065 0302 0340 ; [.2007.0024.0002] # LATIN SMALL LETTER E WITH CIRCUMFLEX AND GRAVE +1EC0 ; [.2007.0024.0008] # LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND GRAVE +0045 0302 0300 ; [.2007.0024.0008] # LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND GRAVE +0045 0302 0340 ; [.2007.0024.0008] # LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND GRAVE +00EA 0300 ; [.2007.0024.0002] # +00EA 0340 ; [.2007.0024.0002] # +00CA 0300 ; [.2007.0024.0008] # +00CA 0340 ; [.2007.0024.0008] # +00EA ; [.2007.0025.0002] # LATIN SMALL LETTER E WITH CIRCUMFLEX +0065 0302 ; [.2007.0025.0002] # LATIN SMALL LETTER E WITH CIRCUMFLEX +00CA ; [.2007.0025.0008] # LATIN CAPITAL LETTER E WITH CIRCUMFLEX +0045 0302 ; [.2007.0025.0008] # LATIN CAPITAL LETTER E WITH CIRCUMFLEX +1EC5 ; [.2007.0025.0002][.0000.002D.0002] # LATIN SMALL LETTER E WITH CIRCUMFLEX AND TILDE +1EC4 ; [.2007.0025.0008][.0000.002D.0002] # LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND TILDE +1EC3 ; [.2007.0025.0002][.0000.003B.0002] # LATIN SMALL LETTER E WITH CIRCUMFLEX AND HOOK ABOVE +1EC2 ; [.2007.0025.0008][.0000.003B.0002] # LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND HOOK ABOVE +1EC7 ; [.2007.0025.0002][.0000.0042.0002] # LATIN SMALL LETTER E WITH CIRCUMFLEX AND DOT BELOW +1EC6 ; [.2007.0025.0008][.0000.0042.0002] # LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND DOT BELOW +012B ; [.2090.001C.0002] # LATIN SMALL LETTER I WITH MACRON +0069 0304 ; [.2090.001C.0002] # LATIN SMALL LETTER I WITH MACRON +012A ; [.2090.001C.0008] # LATIN CAPITAL LETTER I WITH MACRON +0049 0304 ; [.2090.001C.0008] # LATIN CAPITAL LETTER I WITH MACRON +00ED ; [.2090.001D.0002] # LATIN SMALL LETTER I WITH ACUTE +0069 0301 ; [.2090.001D.0002] # LATIN SMALL LETTER I WITH ACUTE +0069 0341 ; [.2090.001D.0002] # LATIN SMALL LETTER I WITH ACUTE +00CD ; [.2090.001D.0008] # LATIN CAPITAL LETTER I WITH ACUTE +0049 0301 ; [.2090.001D.0008] # LATIN CAPITAL LETTER I WITH ACUTE +0049 0341 ; [.2090.001D.0008] # LATIN CAPITAL LETTER I WITH ACUTE +01D0 ; [.2090.001E.0002] # LATIN SMALL LETTER I WITH CARON +0069 030C ; [.2090.001E.0002] # LATIN SMALL LETTER I WITH CARON +01CF ; [.2090.001E.0008] # LATIN CAPITAL LETTER I WITH CARON +0049 030C ; [.2090.001E.0008] # LATIN CAPITAL LETTER I WITH CARON +00EC ; [.2090.001F.0002] # LATIN SMALL LETTER I WITH GRAVE +0069 0300 ; [.2090.001F.0002] # LATIN SMALL LETTER I WITH GRAVE +0069 0340 ; [.2090.001F.0002] # LATIN SMALL LETTER I WITH GRAVE +00CC ; [.2090.001F.0008] # LATIN CAPITAL LETTER I WITH GRAVE +0049 0300 ; [.2090.001F.0008] # LATIN CAPITAL LETTER I WITH GRAVE +0049 0340 ; [.2090.001F.0008] # LATIN CAPITAL LETTER I WITH GRAVE +006D 0304 ; [.2109.001C.0002] # +004D 0304 ; [.2109.001C.0008] # +1E3F ; [.2109.001D.0002] # LATIN SMALL LETTER M WITH ACUTE +006D 0301 ; [.2109.001D.0002] # LATIN SMALL LETTER M WITH ACUTE +006D 0341 ; [.2109.001D.0002] # LATIN SMALL LETTER M WITH ACUTE +1E3E ; [.2109.001D.0008] # LATIN CAPITAL LETTER M WITH ACUTE +004D 0301 ; [.2109.001D.0008] # LATIN CAPITAL LETTER M WITH ACUTE +004D 0341 ; [.2109.001D.0008] # LATIN CAPITAL LETTER M WITH ACUTE +006D 030C ; [.2109.001E.0002] # +004D 030C ; [.2109.001E.0008] # +006D 0300 ; [.2109.001F.0002] # +006D 0340 ; [.2109.001F.0002] # +004D 0300 ; [.2109.001F.0008] # +004D 0340 ; [.2109.001F.0008] # +006E 0304 ; [.2118.001C.0002] # +004E 0304 ; [.2118.001C.0008] # +0144 ; [.2118.001D.0002] # LATIN SMALL LETTER N WITH ACUTE +006E 0301 ; [.2118.001D.0002] # LATIN SMALL LETTER N WITH ACUTE +006E 0341 ; [.2118.001D.0002] # LATIN SMALL LETTER N WITH ACUTE +0143 ; [.2118.001D.0008] # LATIN CAPITAL LETTER N WITH ACUTE +004E 0301 ; [.2118.001D.0008] # LATIN CAPITAL LETTER N WITH ACUTE +004E 0341 ; [.2118.001D.0008] # LATIN CAPITAL LETTER N WITH ACUTE +0148 ; [.2118.001E.0002] # LATIN SMALL LETTER N WITH CARON +006E 030C ; [.2118.001E.0002] # LATIN SMALL LETTER N WITH CARON +0147 ; [.2118.001E.0008] # LATIN CAPITAL LETTER N WITH CARON +004E 030C ; [.2118.001E.0008] # LATIN CAPITAL LETTER N WITH CARON +01F9 ; [.2118.001F.0002] # LATIN SMALL LETTER N WITH GRAVE +006E 0300 ; [.2118.001F.0002] # LATIN SMALL LETTER N WITH GRAVE +006E 0340 ; [.2118.001F.0002] # LATIN SMALL LETTER N WITH GRAVE +01F8 ; [.2118.001F.0008] # LATIN CAPITAL LETTER N WITH GRAVE +004E 0300 ; [.2118.001F.0008] # LATIN CAPITAL LETTER N WITH GRAVE +004E 0340 ; [.2118.001F.0008] # LATIN CAPITAL LETTER N WITH GRAVE +014D ; [.213C.001C.0002] # LATIN SMALL LETTER O WITH MACRON +006F 0304 ; [.213C.001C.0002] # LATIN SMALL LETTER O WITH MACRON +014C ; [.213C.001C.0008] # LATIN CAPITAL LETTER O WITH MACRON +004F 0304 ; [.213C.001C.0008] # LATIN CAPITAL LETTER O WITH MACRON +00F3 ; [.213C.001D.0002] # LATIN SMALL LETTER O WITH ACUTE +006F 0301 ; [.213C.001D.0002] # LATIN SMALL LETTER O WITH ACUTE +006F 0341 ; [.213C.001D.0002] # LATIN SMALL LETTER O WITH ACUTE +00D3 ; [.213C.001D.0008] # LATIN CAPITAL LETTER O WITH ACUTE +004F 0301 ; [.213C.001D.0008] # LATIN CAPITAL LETTER O WITH ACUTE +004F 0341 ; [.213C.001D.0008] # LATIN CAPITAL LETTER O WITH ACUTE +01D2 ; [.213C.001E.0002] # LATIN SMALL LETTER O WITH CARON +006F 030C ; [.213C.001E.0002] # LATIN SMALL LETTER O WITH CARON +01D1 ; [.213C.001E.0008] # LATIN CAPITAL LETTER O WITH CARON +004F 030C ; [.213C.001E.0008] # LATIN CAPITAL LETTER O WITH CARON +00F2 ; [.213C.001F.0002] # LATIN SMALL LETTER O WITH GRAVE +006F 0300 ; [.213C.001F.0002] # LATIN SMALL LETTER O WITH GRAVE +006F 0340 ; [.213C.001F.0002] # LATIN SMALL LETTER O WITH GRAVE +00D2 ; [.213C.001F.0008] # LATIN CAPITAL LETTER O WITH GRAVE +004F 0300 ; [.213C.001F.0008] # LATIN CAPITAL LETTER O WITH GRAVE +004F 0340 ; [.213C.001F.0008] # LATIN CAPITAL LETTER O WITH GRAVE +016B ; [.2217.001C.0002] # LATIN SMALL LETTER U WITH MACRON +0075 0304 ; [.2217.001C.0002] # LATIN SMALL LETTER U WITH MACRON +016A ; [.2217.001C.0008] # LATIN CAPITAL LETTER U WITH MACRON +0055 0304 ; [.2217.001C.0008] # LATIN CAPITAL LETTER U WITH MACRON +00FA ; [.2217.001D.0002] # LATIN SMALL LETTER U WITH ACUTE +0075 0301 ; [.2217.001D.0002] # LATIN SMALL LETTER U WITH ACUTE +0075 0341 ; [.2217.001D.0002] # LATIN SMALL LETTER U WITH ACUTE +00DA ; [.2217.001D.0008] # LATIN CAPITAL LETTER U WITH ACUTE +0055 0301 ; [.2217.001D.0008] # LATIN CAPITAL LETTER U WITH ACUTE +0055 0341 ; [.2217.001D.0008] # LATIN CAPITAL LETTER U WITH ACUTE +01D4 ; [.2217.001E.0002] # LATIN SMALL LETTER U WITH CARON +0075 030C ; [.2217.001E.0002] # LATIN SMALL LETTER U WITH CARON +01D3 ; [.2217.001E.0008] # LATIN CAPITAL LETTER U WITH CARON +0055 030C ; [.2217.001E.0008] # LATIN CAPITAL LETTER U WITH CARON +00F9 ; [.2217.001F.0002] # LATIN SMALL LETTER U WITH GRAVE +0075 0300 ; [.2217.001F.0002] # LATIN SMALL LETTER U WITH GRAVE +0075 0340 ; [.2217.001F.0002] # LATIN SMALL LETTER U WITH GRAVE +00D9 ; [.2217.001F.0008] # LATIN CAPITAL LETTER U WITH GRAVE +0055 0300 ; [.2217.001F.0008] # LATIN CAPITAL LETTER U WITH GRAVE +0055 0340 ; [.2217.001F.0008] # LATIN CAPITAL LETTER U WITH GRAVE +01D6 ; [.2217.0021.0002] # LATIN SMALL LETTER U WITH DIAERESIS AND MACRON +0075 0308 0304 ; [.2217.0021.0002] # LATIN SMALL LETTER U WITH DIAERESIS AND MACRON +01D5 ; [.2217.0021.0008] # LATIN CAPITAL LETTER U WITH DIAERESIS AND MACRON +0055 0308 0304 ; [.2217.0021.0008] # LATIN CAPITAL LETTER U WITH DIAERESIS AND MACRON +00FC 0304 ; [.2217.0021.0002] # +00DC 0304 ; [.2217.0021.0008] # +01D8 ; [.2217.0022.0002] # LATIN SMALL LETTER U WITH DIAERESIS AND ACUTE +0075 0308 0301 ; [.2217.0022.0002] # LATIN SMALL LETTER U WITH DIAERESIS AND ACUTE +0075 0308 0341 ; [.2217.0022.0002] # LATIN SMALL LETTER U WITH DIAERESIS AND ACUTE +01D7 ; [.2217.0022.0008] # LATIN CAPITAL LETTER U WITH DIAERESIS AND ACUTE +0055 0308 0301 ; [.2217.0022.0008] # LATIN CAPITAL LETTER U WITH DIAERESIS AND ACUTE +0055 0308 0341 ; [.2217.0022.0008] # LATIN CAPITAL LETTER U WITH DIAERESIS AND ACUTE +00FC 0301 ; [.2217.0022.0002] # +00FC 0341 ; [.2217.0022.0002] # +00DC 0301 ; [.2217.0022.0008] # +00DC 0341 ; [.2217.0022.0008] # +01DA ; [.2217.0023.0002] # LATIN SMALL LETTER U WITH DIAERESIS AND CARON +0075 0308 030C ; [.2217.0023.0002] # LATIN SMALL LETTER U WITH DIAERESIS AND CARON +01D9 ; [.2217.0023.0008] # LATIN CAPITAL LETTER U WITH DIAERESIS AND CARON +0055 0308 030C ; [.2217.0023.0008] # LATIN CAPITAL LETTER U WITH DIAERESIS AND CARON +00FC 030C ; [.2217.0023.0002] # +00DC 030C ; [.2217.0023.0008] # +01DC ; [.2217.0024.0002] # LATIN SMALL LETTER U WITH DIAERESIS AND GRAVE +0075 0308 0300 ; [.2217.0024.0002] # LATIN SMALL LETTER U WITH DIAERESIS AND GRAVE +0075 0308 0340 ; [.2217.0024.0002] # LATIN SMALL LETTER U WITH DIAERESIS AND GRAVE +01DB ; [.2217.0024.0008] # LATIN CAPITAL LETTER U WITH DIAERESIS AND GRAVE +0055 0308 0300 ; [.2217.0024.0008] # LATIN CAPITAL LETTER U WITH DIAERESIS AND GRAVE +0055 0308 0340 ; [.2217.0024.0008] # LATIN CAPITAL LETTER U WITH DIAERESIS AND GRAVE +00FC 0300 ; [.2217.0024.0002] # +00FC 0340 ; [.2217.0024.0002] # +00DC 0300 ; [.2217.0024.0008] # +00DC 0340 ; [.2217.0024.0008] # +00FC ; [.2217.0025.0002] # LATIN SMALL LETTER U WITH DIAERESIS +0075 0308 ; [.2217.0025.0002] # LATIN SMALL LETTER U WITH DIAERESIS +00DC ; [.2217.0025.0008] # LATIN CAPITAL LETTER U WITH DIAERESIS +0055 0308 ; [.2217.0025.0008] # LATIN CAPITAL LETTER U WITH DIAERESIS E2D8 ; [.8EAB.0020.0002] # E2D9 ; [.8EAC.0020.0002] # E2DA ; [.8EAD.0020.0002] # diff --git a/gnu/usr.bin/perl/cpan/Unicode-Collate/Collate/Locale/zh_pin.pl b/gnu/usr.bin/perl/cpan/Unicode-Collate/Collate/Locale/zh_pin.pl index 3ff8343c38c..13e21cce3bb 100644 --- a/gnu/usr.bin/perl/cpan/Unicode-Collate/Collate/Locale/zh_pin.pl +++ b/gnu/usr.bin/perl/cpan/Unicode-Collate/Collate/Locale/zh_pin.pl @@ -1,214 +1,214 @@ use Unicode::Collate::CJK::Pinyin; +{ - locale_version => 1.27, + locale_version => 1.31, overrideCJK => \&Unicode::Collate::CJK::Pinyin::weightPinyin, - entry => <<'ENTRY', # for DUCET v10.0.0 -0101 ; [.1CAD.001C.0002] # LATIN SMALL LETTER A WITH MACRON -0061 0304 ; [.1CAD.001C.0002] # LATIN SMALL LETTER A WITH MACRON -0100 ; [.1CAD.001C.0008] # LATIN CAPITAL LETTER A WITH MACRON -0041 0304 ; [.1CAD.001C.0008] # LATIN CAPITAL LETTER A WITH MACRON -00E1 ; [.1CAD.001D.0002] # LATIN SMALL LETTER A WITH ACUTE -0061 0301 ; [.1CAD.001D.0002] # LATIN SMALL LETTER A WITH ACUTE -0061 0341 ; [.1CAD.001D.0002] # LATIN SMALL LETTER A WITH ACUTE -00C1 ; [.1CAD.001D.0008] # LATIN CAPITAL LETTER A WITH ACUTE -0041 0301 ; [.1CAD.001D.0008] # LATIN CAPITAL LETTER A WITH ACUTE -0041 0341 ; [.1CAD.001D.0008] # LATIN CAPITAL LETTER A WITH ACUTE -01CE ; [.1CAD.001E.0002] # LATIN SMALL LETTER A WITH CARON -0061 030C ; [.1CAD.001E.0002] # LATIN SMALL LETTER A WITH CARON -01CD ; [.1CAD.001E.0008] # LATIN CAPITAL LETTER A WITH CARON -0041 030C ; [.1CAD.001E.0008] # LATIN CAPITAL LETTER A WITH CARON -00E0 ; [.1CAD.001F.0002] # LATIN SMALL LETTER A WITH GRAVE -0061 0300 ; [.1CAD.001F.0002] # LATIN SMALL LETTER A WITH GRAVE -0061 0340 ; [.1CAD.001F.0002] # LATIN SMALL LETTER A WITH GRAVE -00C0 ; [.1CAD.001F.0008] # LATIN CAPITAL LETTER A WITH GRAVE -0041 0300 ; [.1CAD.001F.0008] # LATIN CAPITAL LETTER A WITH GRAVE -0041 0340 ; [.1CAD.001F.0008] # LATIN CAPITAL LETTER A WITH GRAVE -0113 ; [.1D10.001C.0002] # LATIN SMALL LETTER E WITH MACRON -0065 0304 ; [.1D10.001C.0002] # LATIN SMALL LETTER E WITH MACRON -0112 ; [.1D10.001C.0008] # LATIN CAPITAL LETTER E WITH MACRON -0045 0304 ; [.1D10.001C.0008] # LATIN CAPITAL LETTER E WITH MACRON -00E9 ; [.1D10.001D.0002] # LATIN SMALL LETTER E WITH ACUTE -0065 0301 ; [.1D10.001D.0002] # LATIN SMALL LETTER E WITH ACUTE -0065 0341 ; [.1D10.001D.0002] # LATIN SMALL LETTER E WITH ACUTE -00C9 ; [.1D10.001D.0008] # LATIN CAPITAL LETTER E WITH ACUTE -0045 0301 ; [.1D10.001D.0008] # LATIN CAPITAL LETTER E WITH ACUTE -0045 0341 ; [.1D10.001D.0008] # LATIN CAPITAL LETTER E WITH ACUTE -011B ; [.1D10.001E.0002] # LATIN SMALL LETTER E WITH CARON -0065 030C ; [.1D10.001E.0002] # LATIN SMALL LETTER E WITH CARON -011A ; [.1D10.001E.0008] # LATIN CAPITAL LETTER E WITH CARON -0045 030C ; [.1D10.001E.0008] # LATIN CAPITAL LETTER E WITH CARON -00E8 ; [.1D10.001F.0002] # LATIN SMALL LETTER E WITH GRAVE -0065 0300 ; [.1D10.001F.0002] # LATIN SMALL LETTER E WITH GRAVE -0065 0340 ; [.1D10.001F.0002] # LATIN SMALL LETTER E WITH GRAVE -00C8 ; [.1D10.001F.0008] # LATIN CAPITAL LETTER E WITH GRAVE -0045 0300 ; [.1D10.001F.0008] # LATIN CAPITAL LETTER E WITH GRAVE -0045 0340 ; [.1D10.001F.0008] # LATIN CAPITAL LETTER E WITH GRAVE -00EA 0304 ; [.1D10.0021.0002] # -00CA 0304 ; [.1D10.0021.0008] # -0065 0302 0304 ; [.1D10.0021.0002] # -0045 0302 0304 ; [.1D10.0021.0008] # -1EBF ; [.1D10.0022.0002] # LATIN SMALL LETTER E WITH CIRCUMFLEX AND ACUTE -0065 0302 0301 ; [.1D10.0022.0002] # LATIN SMALL LETTER E WITH CIRCUMFLEX AND ACUTE -0065 0302 0341 ; [.1D10.0022.0002] # LATIN SMALL LETTER E WITH CIRCUMFLEX AND ACUTE -1EBE ; [.1D10.0022.0008] # LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND ACUTE -0045 0302 0301 ; [.1D10.0022.0008] # LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND ACUTE -0045 0302 0341 ; [.1D10.0022.0008] # LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND ACUTE -00EA 0301 ; [.1D10.0022.0002] # -00EA 0341 ; [.1D10.0022.0002] # -00CA 0301 ; [.1D10.0022.0008] # -00CA 0341 ; [.1D10.0022.0008] # -00EA 030C ; [.1D10.0023.0002] # -00CA 030C ; [.1D10.0023.0008] # -0065 0302 030C ; [.1D10.0023.0002] # -0045 0302 030C ; [.1D10.0023.0008] # -1EC1 ; [.1D10.0024.0002] # LATIN SMALL LETTER E WITH CIRCUMFLEX AND GRAVE -0065 0302 0300 ; [.1D10.0024.0002] # LATIN SMALL LETTER E WITH CIRCUMFLEX AND GRAVE -0065 0302 0340 ; [.1D10.0024.0002] # LATIN SMALL LETTER E WITH CIRCUMFLEX AND GRAVE -1EC0 ; [.1D10.0024.0008] # LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND GRAVE -0045 0302 0300 ; [.1D10.0024.0008] # LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND GRAVE -0045 0302 0340 ; [.1D10.0024.0008] # LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND GRAVE -00EA 0300 ; [.1D10.0024.0002] # -00EA 0340 ; [.1D10.0024.0002] # -00CA 0300 ; [.1D10.0024.0008] # -00CA 0340 ; [.1D10.0024.0008] # -00EA ; [.1D10.0025.0002] # LATIN SMALL LETTER E WITH CIRCUMFLEX -0065 0302 ; [.1D10.0025.0002] # LATIN SMALL LETTER E WITH CIRCUMFLEX -00CA ; [.1D10.0025.0008] # LATIN CAPITAL LETTER E WITH CIRCUMFLEX -0045 0302 ; [.1D10.0025.0008] # LATIN CAPITAL LETTER E WITH CIRCUMFLEX -1EC5 ; [.1D10.0025.0002][.0000.002D.0002] # LATIN SMALL LETTER E WITH CIRCUMFLEX AND TILDE -1EC4 ; [.1D10.0025.0008][.0000.002D.0002] # LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND TILDE -1EC3 ; [.1D10.0025.0002][.0000.003B.0002] # LATIN SMALL LETTER E WITH CIRCUMFLEX AND HOOK ABOVE -1EC2 ; [.1D10.0025.0008][.0000.003B.0002] # LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND HOOK ABOVE -1EC7 ; [.1D10.0025.0002][.0000.0042.0002] # LATIN SMALL LETTER E WITH CIRCUMFLEX AND DOT BELOW -1EC6 ; [.1D10.0025.0008][.0000.0042.0002] # LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND DOT BELOW -012B ; [.1D98.001C.0002] # LATIN SMALL LETTER I WITH MACRON -0069 0304 ; [.1D98.001C.0002] # LATIN SMALL LETTER I WITH MACRON -012A ; [.1D98.001C.0008] # LATIN CAPITAL LETTER I WITH MACRON -0049 0304 ; [.1D98.001C.0008] # LATIN CAPITAL LETTER I WITH MACRON -00ED ; [.1D98.001D.0002] # LATIN SMALL LETTER I WITH ACUTE -0069 0301 ; [.1D98.001D.0002] # LATIN SMALL LETTER I WITH ACUTE -0069 0341 ; [.1D98.001D.0002] # LATIN SMALL LETTER I WITH ACUTE -00CD ; [.1D98.001D.0008] # LATIN CAPITAL LETTER I WITH ACUTE -0049 0301 ; [.1D98.001D.0008] # LATIN CAPITAL LETTER I WITH ACUTE -0049 0341 ; [.1D98.001D.0008] # LATIN CAPITAL LETTER I WITH ACUTE -01D0 ; [.1D98.001E.0002] # LATIN SMALL LETTER I WITH CARON -0069 030C ; [.1D98.001E.0002] # LATIN SMALL LETTER I WITH CARON -01CF ; [.1D98.001E.0008] # LATIN CAPITAL LETTER I WITH CARON -0049 030C ; [.1D98.001E.0008] # LATIN CAPITAL LETTER I WITH CARON -00EC ; [.1D98.001F.0002] # LATIN SMALL LETTER I WITH GRAVE -0069 0300 ; [.1D98.001F.0002] # LATIN SMALL LETTER I WITH GRAVE -0069 0340 ; [.1D98.001F.0002] # LATIN SMALL LETTER I WITH GRAVE -00CC ; [.1D98.001F.0008] # LATIN CAPITAL LETTER I WITH GRAVE -0049 0300 ; [.1D98.001F.0008] # LATIN CAPITAL LETTER I WITH GRAVE -0049 0340 ; [.1D98.001F.0008] # LATIN CAPITAL LETTER I WITH GRAVE -006D 0304 ; [.1E10.001C.0002] # -004D 0304 ; [.1E10.001C.0008] # -1E3F ; [.1E10.001D.0002] # LATIN SMALL LETTER M WITH ACUTE -006D 0301 ; [.1E10.001D.0002] # LATIN SMALL LETTER M WITH ACUTE -006D 0341 ; [.1E10.001D.0002] # LATIN SMALL LETTER M WITH ACUTE -1E3E ; [.1E10.001D.0008] # LATIN CAPITAL LETTER M WITH ACUTE -004D 0301 ; [.1E10.001D.0008] # LATIN CAPITAL LETTER M WITH ACUTE -004D 0341 ; [.1E10.001D.0008] # LATIN CAPITAL LETTER M WITH ACUTE -006D 030C ; [.1E10.001E.0002] # -004D 030C ; [.1E10.001E.0008] # -006D 0300 ; [.1E10.001F.0002] # -006D 0340 ; [.1E10.001F.0002] # -004D 0300 ; [.1E10.001F.0008] # -004D 0340 ; [.1E10.001F.0008] # -006E 0304 ; [.1E1F.001C.0002] # -004E 0304 ; [.1E1F.001C.0008] # -0144 ; [.1E1F.001D.0002] # LATIN SMALL LETTER N WITH ACUTE -006E 0301 ; [.1E1F.001D.0002] # LATIN SMALL LETTER N WITH ACUTE -006E 0341 ; [.1E1F.001D.0002] # LATIN SMALL LETTER N WITH ACUTE -0143 ; [.1E1F.001D.0008] # LATIN CAPITAL LETTER N WITH ACUTE -004E 0301 ; [.1E1F.001D.0008] # LATIN CAPITAL LETTER N WITH ACUTE -004E 0341 ; [.1E1F.001D.0008] # LATIN CAPITAL LETTER N WITH ACUTE -0148 ; [.1E1F.001E.0002] # LATIN SMALL LETTER N WITH CARON -006E 030C ; [.1E1F.001E.0002] # LATIN SMALL LETTER N WITH CARON -0147 ; [.1E1F.001E.0008] # LATIN CAPITAL LETTER N WITH CARON -004E 030C ; [.1E1F.001E.0008] # LATIN CAPITAL LETTER N WITH CARON -01F9 ; [.1E1F.001F.0002] # LATIN SMALL LETTER N WITH GRAVE -006E 0300 ; [.1E1F.001F.0002] # LATIN SMALL LETTER N WITH GRAVE -006E 0340 ; [.1E1F.001F.0002] # LATIN SMALL LETTER N WITH GRAVE -01F8 ; [.1E1F.001F.0008] # LATIN CAPITAL LETTER N WITH GRAVE -004E 0300 ; [.1E1F.001F.0008] # LATIN CAPITAL LETTER N WITH GRAVE -004E 0340 ; [.1E1F.001F.0008] # LATIN CAPITAL LETTER N WITH GRAVE -014D ; [.1E43.001C.0002] # LATIN SMALL LETTER O WITH MACRON -006F 0304 ; [.1E43.001C.0002] # LATIN SMALL LETTER O WITH MACRON -014C ; [.1E43.001C.0008] # LATIN CAPITAL LETTER O WITH MACRON -004F 0304 ; [.1E43.001C.0008] # LATIN CAPITAL LETTER O WITH MACRON -00F3 ; [.1E43.001D.0002] # LATIN SMALL LETTER O WITH ACUTE -006F 0301 ; [.1E43.001D.0002] # LATIN SMALL LETTER O WITH ACUTE -006F 0341 ; [.1E43.001D.0002] # LATIN SMALL LETTER O WITH ACUTE -00D3 ; [.1E43.001D.0008] # LATIN CAPITAL LETTER O WITH ACUTE -004F 0301 ; [.1E43.001D.0008] # LATIN CAPITAL LETTER O WITH ACUTE -004F 0341 ; [.1E43.001D.0008] # LATIN CAPITAL LETTER O WITH ACUTE -01D2 ; [.1E43.001E.0002] # LATIN SMALL LETTER O WITH CARON -006F 030C ; [.1E43.001E.0002] # LATIN SMALL LETTER O WITH CARON -01D1 ; [.1E43.001E.0008] # LATIN CAPITAL LETTER O WITH CARON -004F 030C ; [.1E43.001E.0008] # LATIN CAPITAL LETTER O WITH CARON -00F2 ; [.1E43.001F.0002] # LATIN SMALL LETTER O WITH GRAVE -006F 0300 ; [.1E43.001F.0002] # LATIN SMALL LETTER O WITH GRAVE -006F 0340 ; [.1E43.001F.0002] # LATIN SMALL LETTER O WITH GRAVE -00D2 ; [.1E43.001F.0008] # LATIN CAPITAL LETTER O WITH GRAVE -004F 0300 ; [.1E43.001F.0008] # LATIN CAPITAL LETTER O WITH GRAVE -004F 0340 ; [.1E43.001F.0008] # LATIN CAPITAL LETTER O WITH GRAVE -016B ; [.1F1B.001C.0002] # LATIN SMALL LETTER U WITH MACRON -0075 0304 ; [.1F1B.001C.0002] # LATIN SMALL LETTER U WITH MACRON -016A ; [.1F1B.001C.0008] # LATIN CAPITAL LETTER U WITH MACRON -0055 0304 ; [.1F1B.001C.0008] # LATIN CAPITAL LETTER U WITH MACRON -00FA ; [.1F1B.001D.0002] # LATIN SMALL LETTER U WITH ACUTE -0075 0301 ; [.1F1B.001D.0002] # LATIN SMALL LETTER U WITH ACUTE -0075 0341 ; [.1F1B.001D.0002] # LATIN SMALL LETTER U WITH ACUTE -00DA ; [.1F1B.001D.0008] # LATIN CAPITAL LETTER U WITH ACUTE -0055 0301 ; [.1F1B.001D.0008] # LATIN CAPITAL LETTER U WITH ACUTE -0055 0341 ; [.1F1B.001D.0008] # LATIN CAPITAL LETTER U WITH ACUTE -01D4 ; [.1F1B.001E.0002] # LATIN SMALL LETTER U WITH CARON -0075 030C ; [.1F1B.001E.0002] # LATIN SMALL LETTER U WITH CARON -01D3 ; [.1F1B.001E.0008] # LATIN CAPITAL LETTER U WITH CARON -0055 030C ; [.1F1B.001E.0008] # LATIN CAPITAL LETTER U WITH CARON -00F9 ; [.1F1B.001F.0002] # LATIN SMALL LETTER U WITH GRAVE -0075 0300 ; [.1F1B.001F.0002] # LATIN SMALL LETTER U WITH GRAVE -0075 0340 ; [.1F1B.001F.0002] # LATIN SMALL LETTER U WITH GRAVE -00D9 ; [.1F1B.001F.0008] # LATIN CAPITAL LETTER U WITH GRAVE -0055 0300 ; [.1F1B.001F.0008] # LATIN CAPITAL LETTER U WITH GRAVE -0055 0340 ; [.1F1B.001F.0008] # LATIN CAPITAL LETTER U WITH GRAVE -01D6 ; [.1F1B.0021.0002] # LATIN SMALL LETTER U WITH DIAERESIS AND MACRON -0075 0308 0304 ; [.1F1B.0021.0002] # LATIN SMALL LETTER U WITH DIAERESIS AND MACRON -01D5 ; [.1F1B.0021.0008] # LATIN CAPITAL LETTER U WITH DIAERESIS AND MACRON -0055 0308 0304 ; [.1F1B.0021.0008] # LATIN CAPITAL LETTER U WITH DIAERESIS AND MACRON -00FC 0304 ; [.1F1B.0021.0002] # -00DC 0304 ; [.1F1B.0021.0008] # -01D8 ; [.1F1B.0022.0002] # LATIN SMALL LETTER U WITH DIAERESIS AND ACUTE -0075 0308 0301 ; [.1F1B.0022.0002] # LATIN SMALL LETTER U WITH DIAERESIS AND ACUTE -0075 0308 0341 ; [.1F1B.0022.0002] # LATIN SMALL LETTER U WITH DIAERESIS AND ACUTE -01D7 ; [.1F1B.0022.0008] # LATIN CAPITAL LETTER U WITH DIAERESIS AND ACUTE -0055 0308 0301 ; [.1F1B.0022.0008] # LATIN CAPITAL LETTER U WITH DIAERESIS AND ACUTE -0055 0308 0341 ; [.1F1B.0022.0008] # LATIN CAPITAL LETTER U WITH DIAERESIS AND ACUTE -00FC 0301 ; [.1F1B.0022.0002] # -00FC 0341 ; [.1F1B.0022.0002] # -00DC 0301 ; [.1F1B.0022.0008] # -00DC 0341 ; [.1F1B.0022.0008] # -01DA ; [.1F1B.0023.0002] # LATIN SMALL LETTER U WITH DIAERESIS AND CARON -0075 0308 030C ; [.1F1B.0023.0002] # LATIN SMALL LETTER U WITH DIAERESIS AND CARON -01D9 ; [.1F1B.0023.0008] # LATIN CAPITAL LETTER U WITH DIAERESIS AND CARON -0055 0308 030C ; [.1F1B.0023.0008] # LATIN CAPITAL LETTER U WITH DIAERESIS AND CARON -00FC 030C ; [.1F1B.0023.0002] # -00DC 030C ; [.1F1B.0023.0008] # -01DC ; [.1F1B.0024.0002] # LATIN SMALL LETTER U WITH DIAERESIS AND GRAVE -0075 0308 0300 ; [.1F1B.0024.0002] # LATIN SMALL LETTER U WITH DIAERESIS AND GRAVE -0075 0308 0340 ; [.1F1B.0024.0002] # LATIN SMALL LETTER U WITH DIAERESIS AND GRAVE -01DB ; [.1F1B.0024.0008] # LATIN CAPITAL LETTER U WITH DIAERESIS AND GRAVE -0055 0308 0300 ; [.1F1B.0024.0008] # LATIN CAPITAL LETTER U WITH DIAERESIS AND GRAVE -0055 0308 0340 ; [.1F1B.0024.0008] # LATIN CAPITAL LETTER U WITH DIAERESIS AND GRAVE -00FC 0300 ; [.1F1B.0024.0002] # -00FC 0340 ; [.1F1B.0024.0002] # -00DC 0300 ; [.1F1B.0024.0008] # -00DC 0340 ; [.1F1B.0024.0008] # -00FC ; [.1F1B.0025.0002] # LATIN SMALL LETTER U WITH DIAERESIS -0075 0308 ; [.1F1B.0025.0002] # LATIN SMALL LETTER U WITH DIAERESIS -00DC ; [.1F1B.0025.0008] # LATIN CAPITAL LETTER U WITH DIAERESIS -0055 0308 ; [.1F1B.0025.0008] # LATIN CAPITAL LETTER U WITH DIAERESIS + entry => <<'ENTRY', # for DUCET v13.0.0 +0101 ; [.1FA2.001C.0002] # LATIN SMALL LETTER A WITH MACRON +0061 0304 ; [.1FA2.001C.0002] # LATIN SMALL LETTER A WITH MACRON +0100 ; [.1FA2.001C.0008] # LATIN CAPITAL LETTER A WITH MACRON +0041 0304 ; [.1FA2.001C.0008] # LATIN CAPITAL LETTER A WITH MACRON +00E1 ; [.1FA2.001D.0002] # LATIN SMALL LETTER A WITH ACUTE +0061 0301 ; [.1FA2.001D.0002] # LATIN SMALL LETTER A WITH ACUTE +0061 0341 ; [.1FA2.001D.0002] # LATIN SMALL LETTER A WITH ACUTE +00C1 ; [.1FA2.001D.0008] # LATIN CAPITAL LETTER A WITH ACUTE +0041 0301 ; [.1FA2.001D.0008] # LATIN CAPITAL LETTER A WITH ACUTE +0041 0341 ; [.1FA2.001D.0008] # LATIN CAPITAL LETTER A WITH ACUTE +01CE ; [.1FA2.001E.0002] # LATIN SMALL LETTER A WITH CARON +0061 030C ; [.1FA2.001E.0002] # LATIN SMALL LETTER A WITH CARON +01CD ; [.1FA2.001E.0008] # LATIN CAPITAL LETTER A WITH CARON +0041 030C ; [.1FA2.001E.0008] # LATIN CAPITAL LETTER A WITH CARON +00E0 ; [.1FA2.001F.0002] # LATIN SMALL LETTER A WITH GRAVE +0061 0300 ; [.1FA2.001F.0002] # LATIN SMALL LETTER A WITH GRAVE +0061 0340 ; [.1FA2.001F.0002] # LATIN SMALL LETTER A WITH GRAVE +00C0 ; [.1FA2.001F.0008] # LATIN CAPITAL LETTER A WITH GRAVE +0041 0300 ; [.1FA2.001F.0008] # LATIN CAPITAL LETTER A WITH GRAVE +0041 0340 ; [.1FA2.001F.0008] # LATIN CAPITAL LETTER A WITH GRAVE +0113 ; [.2007.001C.0002] # LATIN SMALL LETTER E WITH MACRON +0065 0304 ; [.2007.001C.0002] # LATIN SMALL LETTER E WITH MACRON +0112 ; [.2007.001C.0008] # LATIN CAPITAL LETTER E WITH MACRON +0045 0304 ; [.2007.001C.0008] # LATIN CAPITAL LETTER E WITH MACRON +00E9 ; [.2007.001D.0002] # LATIN SMALL LETTER E WITH ACUTE +0065 0301 ; [.2007.001D.0002] # LATIN SMALL LETTER E WITH ACUTE +0065 0341 ; [.2007.001D.0002] # LATIN SMALL LETTER E WITH ACUTE +00C9 ; [.2007.001D.0008] # LATIN CAPITAL LETTER E WITH ACUTE +0045 0301 ; [.2007.001D.0008] # LATIN CAPITAL LETTER E WITH ACUTE +0045 0341 ; [.2007.001D.0008] # LATIN CAPITAL LETTER E WITH ACUTE +011B ; [.2007.001E.0002] # LATIN SMALL LETTER E WITH CARON +0065 030C ; [.2007.001E.0002] # LATIN SMALL LETTER E WITH CARON +011A ; [.2007.001E.0008] # LATIN CAPITAL LETTER E WITH CARON +0045 030C ; [.2007.001E.0008] # LATIN CAPITAL LETTER E WITH CARON +00E8 ; [.2007.001F.0002] # LATIN SMALL LETTER E WITH GRAVE +0065 0300 ; [.2007.001F.0002] # LATIN SMALL LETTER E WITH GRAVE +0065 0340 ; [.2007.001F.0002] # LATIN SMALL LETTER E WITH GRAVE +00C8 ; [.2007.001F.0008] # LATIN CAPITAL LETTER E WITH GRAVE +0045 0300 ; [.2007.001F.0008] # LATIN CAPITAL LETTER E WITH GRAVE +0045 0340 ; [.2007.001F.0008] # LATIN CAPITAL LETTER E WITH GRAVE +00EA 0304 ; [.2007.0021.0002] # +00CA 0304 ; [.2007.0021.0008] # +0065 0302 0304 ; [.2007.0021.0002] # +0045 0302 0304 ; [.2007.0021.0008] # +1EBF ; [.2007.0022.0002] # LATIN SMALL LETTER E WITH CIRCUMFLEX AND ACUTE +0065 0302 0301 ; [.2007.0022.0002] # LATIN SMALL LETTER E WITH CIRCUMFLEX AND ACUTE +0065 0302 0341 ; [.2007.0022.0002] # LATIN SMALL LETTER E WITH CIRCUMFLEX AND ACUTE +1EBE ; [.2007.0022.0008] # LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND ACUTE +0045 0302 0301 ; [.2007.0022.0008] # LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND ACUTE +0045 0302 0341 ; [.2007.0022.0008] # LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND ACUTE +00EA 0301 ; [.2007.0022.0002] # +00EA 0341 ; [.2007.0022.0002] # +00CA 0301 ; [.2007.0022.0008] # +00CA 0341 ; [.2007.0022.0008] # +00EA 030C ; [.2007.0023.0002] # +00CA 030C ; [.2007.0023.0008] # +0065 0302 030C ; [.2007.0023.0002] # +0045 0302 030C ; [.2007.0023.0008] # +1EC1 ; [.2007.0024.0002] # LATIN SMALL LETTER E WITH CIRCUMFLEX AND GRAVE +0065 0302 0300 ; [.2007.0024.0002] # LATIN SMALL LETTER E WITH CIRCUMFLEX AND GRAVE +0065 0302 0340 ; [.2007.0024.0002] # LATIN SMALL LETTER E WITH CIRCUMFLEX AND GRAVE +1EC0 ; [.2007.0024.0008] # LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND GRAVE +0045 0302 0300 ; [.2007.0024.0008] # LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND GRAVE +0045 0302 0340 ; [.2007.0024.0008] # LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND GRAVE +00EA 0300 ; [.2007.0024.0002] # +00EA 0340 ; [.2007.0024.0002] # +00CA 0300 ; [.2007.0024.0008] # +00CA 0340 ; [.2007.0024.0008] # +00EA ; [.2007.0025.0002] # LATIN SMALL LETTER E WITH CIRCUMFLEX +0065 0302 ; [.2007.0025.0002] # LATIN SMALL LETTER E WITH CIRCUMFLEX +00CA ; [.2007.0025.0008] # LATIN CAPITAL LETTER E WITH CIRCUMFLEX +0045 0302 ; [.2007.0025.0008] # LATIN CAPITAL LETTER E WITH CIRCUMFLEX +1EC5 ; [.2007.0025.0002][.0000.002D.0002] # LATIN SMALL LETTER E WITH CIRCUMFLEX AND TILDE +1EC4 ; [.2007.0025.0008][.0000.002D.0002] # LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND TILDE +1EC3 ; [.2007.0025.0002][.0000.003B.0002] # LATIN SMALL LETTER E WITH CIRCUMFLEX AND HOOK ABOVE +1EC2 ; [.2007.0025.0008][.0000.003B.0002] # LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND HOOK ABOVE +1EC7 ; [.2007.0025.0002][.0000.0042.0002] # LATIN SMALL LETTER E WITH CIRCUMFLEX AND DOT BELOW +1EC6 ; [.2007.0025.0008][.0000.0042.0002] # LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND DOT BELOW +012B ; [.2090.001C.0002] # LATIN SMALL LETTER I WITH MACRON +0069 0304 ; [.2090.001C.0002] # LATIN SMALL LETTER I WITH MACRON +012A ; [.2090.001C.0008] # LATIN CAPITAL LETTER I WITH MACRON +0049 0304 ; [.2090.001C.0008] # LATIN CAPITAL LETTER I WITH MACRON +00ED ; [.2090.001D.0002] # LATIN SMALL LETTER I WITH ACUTE +0069 0301 ; [.2090.001D.0002] # LATIN SMALL LETTER I WITH ACUTE +0069 0341 ; [.2090.001D.0002] # LATIN SMALL LETTER I WITH ACUTE +00CD ; [.2090.001D.0008] # LATIN CAPITAL LETTER I WITH ACUTE +0049 0301 ; [.2090.001D.0008] # LATIN CAPITAL LETTER I WITH ACUTE +0049 0341 ; [.2090.001D.0008] # LATIN CAPITAL LETTER I WITH ACUTE +01D0 ; [.2090.001E.0002] # LATIN SMALL LETTER I WITH CARON +0069 030C ; [.2090.001E.0002] # LATIN SMALL LETTER I WITH CARON +01CF ; [.2090.001E.0008] # LATIN CAPITAL LETTER I WITH CARON +0049 030C ; [.2090.001E.0008] # LATIN CAPITAL LETTER I WITH CARON +00EC ; [.2090.001F.0002] # LATIN SMALL LETTER I WITH GRAVE +0069 0300 ; [.2090.001F.0002] # LATIN SMALL LETTER I WITH GRAVE +0069 0340 ; [.2090.001F.0002] # LATIN SMALL LETTER I WITH GRAVE +00CC ; [.2090.001F.0008] # LATIN CAPITAL LETTER I WITH GRAVE +0049 0300 ; [.2090.001F.0008] # LATIN CAPITAL LETTER I WITH GRAVE +0049 0340 ; [.2090.001F.0008] # LATIN CAPITAL LETTER I WITH GRAVE +006D 0304 ; [.2109.001C.0002] # +004D 0304 ; [.2109.001C.0008] # +1E3F ; [.2109.001D.0002] # LATIN SMALL LETTER M WITH ACUTE +006D 0301 ; [.2109.001D.0002] # LATIN SMALL LETTER M WITH ACUTE +006D 0341 ; [.2109.001D.0002] # LATIN SMALL LETTER M WITH ACUTE +1E3E ; [.2109.001D.0008] # LATIN CAPITAL LETTER M WITH ACUTE +004D 0301 ; [.2109.001D.0008] # LATIN CAPITAL LETTER M WITH ACUTE +004D 0341 ; [.2109.001D.0008] # LATIN CAPITAL LETTER M WITH ACUTE +006D 030C ; [.2109.001E.0002] # +004D 030C ; [.2109.001E.0008] # +006D 0300 ; [.2109.001F.0002] # +006D 0340 ; [.2109.001F.0002] # +004D 0300 ; [.2109.001F.0008] # +004D 0340 ; [.2109.001F.0008] # +006E 0304 ; [.2118.001C.0002] # +004E 0304 ; [.2118.001C.0008] # +0144 ; [.2118.001D.0002] # LATIN SMALL LETTER N WITH ACUTE +006E 0301 ; [.2118.001D.0002] # LATIN SMALL LETTER N WITH ACUTE +006E 0341 ; [.2118.001D.0002] # LATIN SMALL LETTER N WITH ACUTE +0143 ; [.2118.001D.0008] # LATIN CAPITAL LETTER N WITH ACUTE +004E 0301 ; [.2118.001D.0008] # LATIN CAPITAL LETTER N WITH ACUTE +004E 0341 ; [.2118.001D.0008] # LATIN CAPITAL LETTER N WITH ACUTE +0148 ; [.2118.001E.0002] # LATIN SMALL LETTER N WITH CARON +006E 030C ; [.2118.001E.0002] # LATIN SMALL LETTER N WITH CARON +0147 ; [.2118.001E.0008] # LATIN CAPITAL LETTER N WITH CARON +004E 030C ; [.2118.001E.0008] # LATIN CAPITAL LETTER N WITH CARON +01F9 ; [.2118.001F.0002] # LATIN SMALL LETTER N WITH GRAVE +006E 0300 ; [.2118.001F.0002] # LATIN SMALL LETTER N WITH GRAVE +006E 0340 ; [.2118.001F.0002] # LATIN SMALL LETTER N WITH GRAVE +01F8 ; [.2118.001F.0008] # LATIN CAPITAL LETTER N WITH GRAVE +004E 0300 ; [.2118.001F.0008] # LATIN CAPITAL LETTER N WITH GRAVE +004E 0340 ; [.2118.001F.0008] # LATIN CAPITAL LETTER N WITH GRAVE +014D ; [.213C.001C.0002] # LATIN SMALL LETTER O WITH MACRON +006F 0304 ; [.213C.001C.0002] # LATIN SMALL LETTER O WITH MACRON +014C ; [.213C.001C.0008] # LATIN CAPITAL LETTER O WITH MACRON +004F 0304 ; [.213C.001C.0008] # LATIN CAPITAL LETTER O WITH MACRON +00F3 ; [.213C.001D.0002] # LATIN SMALL LETTER O WITH ACUTE +006F 0301 ; [.213C.001D.0002] # LATIN SMALL LETTER O WITH ACUTE +006F 0341 ; [.213C.001D.0002] # LATIN SMALL LETTER O WITH ACUTE +00D3 ; [.213C.001D.0008] # LATIN CAPITAL LETTER O WITH ACUTE +004F 0301 ; [.213C.001D.0008] # LATIN CAPITAL LETTER O WITH ACUTE +004F 0341 ; [.213C.001D.0008] # LATIN CAPITAL LETTER O WITH ACUTE +01D2 ; [.213C.001E.0002] # LATIN SMALL LETTER O WITH CARON +006F 030C ; [.213C.001E.0002] # LATIN SMALL LETTER O WITH CARON +01D1 ; [.213C.001E.0008] # LATIN CAPITAL LETTER O WITH CARON +004F 030C ; [.213C.001E.0008] # LATIN CAPITAL LETTER O WITH CARON +00F2 ; [.213C.001F.0002] # LATIN SMALL LETTER O WITH GRAVE +006F 0300 ; [.213C.001F.0002] # LATIN SMALL LETTER O WITH GRAVE +006F 0340 ; [.213C.001F.0002] # LATIN SMALL LETTER O WITH GRAVE +00D2 ; [.213C.001F.0008] # LATIN CAPITAL LETTER O WITH GRAVE +004F 0300 ; [.213C.001F.0008] # LATIN CAPITAL LETTER O WITH GRAVE +004F 0340 ; [.213C.001F.0008] # LATIN CAPITAL LETTER O WITH GRAVE +016B ; [.2217.001C.0002] # LATIN SMALL LETTER U WITH MACRON +0075 0304 ; [.2217.001C.0002] # LATIN SMALL LETTER U WITH MACRON +016A ; [.2217.001C.0008] # LATIN CAPITAL LETTER U WITH MACRON +0055 0304 ; [.2217.001C.0008] # LATIN CAPITAL LETTER U WITH MACRON +00FA ; [.2217.001D.0002] # LATIN SMALL LETTER U WITH ACUTE +0075 0301 ; [.2217.001D.0002] # LATIN SMALL LETTER U WITH ACUTE +0075 0341 ; [.2217.001D.0002] # LATIN SMALL LETTER U WITH ACUTE +00DA ; [.2217.001D.0008] # LATIN CAPITAL LETTER U WITH ACUTE +0055 0301 ; [.2217.001D.0008] # LATIN CAPITAL LETTER U WITH ACUTE +0055 0341 ; [.2217.001D.0008] # LATIN CAPITAL LETTER U WITH ACUTE +01D4 ; [.2217.001E.0002] # LATIN SMALL LETTER U WITH CARON +0075 030C ; [.2217.001E.0002] # LATIN SMALL LETTER U WITH CARON +01D3 ; [.2217.001E.0008] # LATIN CAPITAL LETTER U WITH CARON +0055 030C ; [.2217.001E.0008] # LATIN CAPITAL LETTER U WITH CARON +00F9 ; [.2217.001F.0002] # LATIN SMALL LETTER U WITH GRAVE +0075 0300 ; [.2217.001F.0002] # LATIN SMALL LETTER U WITH GRAVE +0075 0340 ; [.2217.001F.0002] # LATIN SMALL LETTER U WITH GRAVE +00D9 ; [.2217.001F.0008] # LATIN CAPITAL LETTER U WITH GRAVE +0055 0300 ; [.2217.001F.0008] # LATIN CAPITAL LETTER U WITH GRAVE +0055 0340 ; [.2217.001F.0008] # LATIN CAPITAL LETTER U WITH GRAVE +01D6 ; [.2217.0021.0002] # LATIN SMALL LETTER U WITH DIAERESIS AND MACRON +0075 0308 0304 ; [.2217.0021.0002] # LATIN SMALL LETTER U WITH DIAERESIS AND MACRON +01D5 ; [.2217.0021.0008] # LATIN CAPITAL LETTER U WITH DIAERESIS AND MACRON +0055 0308 0304 ; [.2217.0021.0008] # LATIN CAPITAL LETTER U WITH DIAERESIS AND MACRON +00FC 0304 ; [.2217.0021.0002] # +00DC 0304 ; [.2217.0021.0008] # +01D8 ; [.2217.0022.0002] # LATIN SMALL LETTER U WITH DIAERESIS AND ACUTE +0075 0308 0301 ; [.2217.0022.0002] # LATIN SMALL LETTER U WITH DIAERESIS AND ACUTE +0075 0308 0341 ; [.2217.0022.0002] # LATIN SMALL LETTER U WITH DIAERESIS AND ACUTE +01D7 ; [.2217.0022.0008] # LATIN CAPITAL LETTER U WITH DIAERESIS AND ACUTE +0055 0308 0301 ; [.2217.0022.0008] # LATIN CAPITAL LETTER U WITH DIAERESIS AND ACUTE +0055 0308 0341 ; [.2217.0022.0008] # LATIN CAPITAL LETTER U WITH DIAERESIS AND ACUTE +00FC 0301 ; [.2217.0022.0002] # +00FC 0341 ; [.2217.0022.0002] # +00DC 0301 ; [.2217.0022.0008] # +00DC 0341 ; [.2217.0022.0008] # +01DA ; [.2217.0023.0002] # LATIN SMALL LETTER U WITH DIAERESIS AND CARON +0075 0308 030C ; [.2217.0023.0002] # LATIN SMALL LETTER U WITH DIAERESIS AND CARON +01D9 ; [.2217.0023.0008] # LATIN CAPITAL LETTER U WITH DIAERESIS AND CARON +0055 0308 030C ; [.2217.0023.0008] # LATIN CAPITAL LETTER U WITH DIAERESIS AND CARON +00FC 030C ; [.2217.0023.0002] # +00DC 030C ; [.2217.0023.0008] # +01DC ; [.2217.0024.0002] # LATIN SMALL LETTER U WITH DIAERESIS AND GRAVE +0075 0308 0300 ; [.2217.0024.0002] # LATIN SMALL LETTER U WITH DIAERESIS AND GRAVE +0075 0308 0340 ; [.2217.0024.0002] # LATIN SMALL LETTER U WITH DIAERESIS AND GRAVE +01DB ; [.2217.0024.0008] # LATIN CAPITAL LETTER U WITH DIAERESIS AND GRAVE +0055 0308 0300 ; [.2217.0024.0008] # LATIN CAPITAL LETTER U WITH DIAERESIS AND GRAVE +0055 0308 0340 ; [.2217.0024.0008] # LATIN CAPITAL LETTER U WITH DIAERESIS AND GRAVE +00FC 0300 ; [.2217.0024.0002] # +00FC 0340 ; [.2217.0024.0002] # +00DC 0300 ; [.2217.0024.0008] # +00DC 0340 ; [.2217.0024.0008] # +00FC ; [.2217.0025.0002] # LATIN SMALL LETTER U WITH DIAERESIS +0075 0308 ; [.2217.0025.0002] # LATIN SMALL LETTER U WITH DIAERESIS +00DC ; [.2217.0025.0008] # LATIN CAPITAL LETTER U WITH DIAERESIS +0055 0308 ; [.2217.0025.0008] # LATIN CAPITAL LETTER U WITH DIAERESIS FDD0 0041 ; [.8000.0020.0002] # FDD0 0042 ; [.80C5.0020.0002] # FDD0 0043 ; [.8441.0020.0002] # @@ -233,119 +233,119 @@ FDD0 0057 ; [.BBD3.0020.0002] # FDD0 0058 ; [.BE4A.0020.0002] # FDD0 0059 ; [.C382.0020.0002] # FDD0 005A ; [.CB22.0020.0002] # -3220 ; [*0318.0020.0004][.C5CF.0020.0004][*0319.0020.0004] # PARENTHESIZED IDEOGRAPH ONE -3226 ; [*0318.0020.0004][.AE03.0020.0004][*0319.0020.0004] # PARENTHESIZED IDEOGRAPH SEVEN -3222 ; [*0318.0020.0004][.B35F.0020.0004][*0319.0020.0004] # PARENTHESIZED IDEOGRAPH THREE -3228 ; [*0318.0020.0004][.9C92.0020.0004][*0319.0020.0004] # PARENTHESIZED IDEOGRAPH NINE -3221 ; [*0318.0020.0004][.8E0E.0020.0004][*0319.0020.0004] # PARENTHESIZED IDEOGRAPH TWO -3224 ; [*0318.0020.0004][.BDF1.0020.0004][*0319.0020.0004] # PARENTHESIZED IDEOGRAPH FIVE -3239 ; [*0318.0020.0004][.89B6.0020.0004][*0319.0020.0004] # PARENTHESIZED IDEOGRAPH REPRESENT -323D ; [*0318.0020.0004][.AE82.0020.0004][*0319.0020.0004] # PARENTHESIZED IDEOGRAPH ENTERPRISE -3241 ; [*0318.0020.0004][.C1F9.0020.0004][*0319.0020.0004] # PARENTHESIZED IDEOGRAPH REST -3227 ; [*0318.0020.0004][.80C6.0020.0004][*0319.0020.0004] # PARENTHESIZED IDEOGRAPH EIGHT -3225 ; [*0318.0020.0004][.A49F.0020.0004][*0319.0020.0004] # PARENTHESIZED IDEOGRAPH SIX -3238 ; [*0318.0020.0004][.A132.0020.0004][*0319.0020.0004] # PARENTHESIZED IDEOGRAPH LABOR -3229 ; [*0318.0020.0004][.B57B.0020.0004][*0319.0020.0004] # PARENTHESIZED IDEOGRAPH TEN -323F ; [*0318.0020.0004][.C10A.0020.0004][*0319.0020.0004] # PARENTHESIZED IDEOGRAPH ALLIANCE -3234 ; [*0318.0020.0004][.A8EB.0020.0004][*0319.0020.0004] # PARENTHESIZED IDEOGRAPH NAME -323A ; [*0318.0020.0004][.9589.0020.0004][*0319.0020.0004] # PARENTHESIZED IDEOGRAPH CALL -3223 ; [*0318.0020.0004][.B715.0020.0004][*0319.0020.0004] # PARENTHESIZED IDEOGRAPH FOUR -322F ; [*0318.0020.0004][.BB2D.0020.0004][*0319.0020.0004] # PARENTHESIZED IDEOGRAPH EARTH -323B ; [*0318.0020.0004][.C304.0020.0004][*0319.0020.0004] # PARENTHESIZED IDEOGRAPH STUDY -3230 ; [*0318.0020.0004][.B272.0020.0004][*0319.0020.0004] # PARENTHESIZED IDEOGRAPH SUN -322A ; [*0318.0020.0004][.CA96.0020.0004][*0319.0020.0004] # PARENTHESIZED IDEOGRAPH MOON -3232 ; [*0318.0020.0004][.C8D2.0020.0004][*0319.0020.0004] # PARENTHESIZED IDEOGRAPH HAVE -322D ; [*0318.0020.0004][.A98A.0020.0004][*0319.0020.0004] # PARENTHESIZED IDEOGRAPH WOOD -3231 ; [*0318.0020.0004][.CF58.0020.0004][*0319.0020.0004] # PARENTHESIZED IDEOGRAPH STOCK -322C ; [*0318.0020.0004][.B6BA.0020.0004][*0319.0020.0004] # PARENTHESIZED IDEOGRAPH WATER -322B ; [*0318.0020.0004][.97BC.0020.0004][*0319.0020.0004] # PARENTHESIZED IDEOGRAPH FIRE -3235 ; [*0318.0020.0004][.B980.0020.0004][*0319.0020.0004] # PARENTHESIZED IDEOGRAPH SPECIAL -323C ; [*0318.0020.0004][.999B.0020.0004][*0319.0020.0004] # PARENTHESIZED IDEOGRAPH SUPERVISE -3233 ; [*0318.0020.0004][.B4AC.0020.0004][*0319.0020.0004] # PARENTHESIZED IDEOGRAPH SOCIETY -3237 ; [*0318.0020.0004][.CFAD.0020.0004][*0319.0020.0004] # PARENTHESIZED IDEOGRAPH CONGRATULATION -3240 ; [*0318.0020.0004][.98D6.0020.0004][*0319.0020.0004] # PARENTHESIZED IDEOGRAPH FESTIVAL -3242 ; [*0318.0020.0004][.D0D4.0020.0004][*0319.0020.0004] # PARENTHESIZED IDEOGRAPH SELF -3243 ; [*0318.0020.0004][.CE51.0020.0004][*0319.0020.0004] # PARENTHESIZED IDEOGRAPH REACH -3236 ; [*0318.0020.0004][.844F.0020.0004][*0319.0020.0004] # PARENTHESIZED IDEOGRAPH FINANCIAL -323E ; [*0318.0020.0004][.D0A3.0020.0004][*0319.0020.0004] # PARENTHESIZED IDEOGRAPH RESOURCE -322E ; [*0318.0020.0004][.9B96.0020.0004][*0319.0020.0004] # PARENTHESIZED IDEOGRAPH METAL -3358 ; [.1CA3.0020.0004][.8B60.0020.0004] # IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR ZERO -33E9 ; [.1CA4.0020.0004][.1CA3.0020.0004][.B272.0020.0004] # IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY TEN -32C9 ; [.1CA4.0020.0004][.1CA3.0020.0004][.CA96.0020.0004] # IDEOGRAPHIC TELEGRAPH SYMBOL FOR OCTOBER -3362 ; [.1CA4.0020.0004][.1CA3.0020.0004][.8B60.0020.0004] # IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR TEN -33EA ; [.1CA4.0020.0004][.1CA4.0020.0004][.B272.0020.0004] # IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY ELEVEN -32CA ; [.1CA4.0020.0004][.1CA4.0020.0004][.CA96.0020.0004] # IDEOGRAPHIC TELEGRAPH SYMBOL FOR NOVEMBER -3363 ; [.1CA4.0020.0004][.1CA4.0020.0004][.8B60.0020.0004] # IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR ELEVEN -33EB ; [.1CA4.0020.0004][.1CA5.0020.0004][.B272.0020.0004] # IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY TWELVE -32CB ; [.1CA4.0020.0004][.1CA5.0020.0004][.CA96.0020.0004] # IDEOGRAPHIC TELEGRAPH SYMBOL FOR DECEMBER -3364 ; [.1CA4.0020.0004][.1CA5.0020.0004][.8B60.0020.0004] # IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR TWELVE -33EC ; [.1CA4.0020.0004][.1CA6.0020.0004][.B272.0020.0004] # IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY THIRTEEN -3365 ; [.1CA4.0020.0004][.1CA6.0020.0004][.8B60.0020.0004] # IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR THIRTEEN -33ED ; [.1CA4.0020.0004][.1CA7.0020.0004][.B272.0020.0004] # IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY FOURTEEN -3366 ; [.1CA4.0020.0004][.1CA7.0020.0004][.8B60.0020.0004] # IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR FOURTEEN -33EE ; [.1CA4.0020.0004][.1CA8.0020.0004][.B272.0020.0004] # IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY FIFTEEN -3367 ; [.1CA4.0020.0004][.1CA8.0020.0004][.8B60.0020.0004] # IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR FIFTEEN -33EF ; [.1CA4.0020.0004][.1CA9.0020.0004][.B272.0020.0004] # IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY SIXTEEN -3368 ; [.1CA4.0020.0004][.1CA9.0020.0004][.8B60.0020.0004] # IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR SIXTEEN -33F0 ; [.1CA4.0020.0004][.1CAA.0020.0004][.B272.0020.0004] # IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY SEVENTEEN -3369 ; [.1CA4.0020.0004][.1CAA.0020.0004][.8B60.0020.0004] # IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR SEVENTEEN -33F1 ; [.1CA4.0020.0004][.1CAB.0020.0004][.B272.0020.0004] # IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY EIGHTEEN -336A ; [.1CA4.0020.0004][.1CAB.0020.0004][.8B60.0020.0004] # IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR EIGHTEEN -33F2 ; [.1CA4.0020.0004][.1CAC.0020.0004][.B272.0020.0004] # IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY NINETEEN -336B ; [.1CA4.0020.0004][.1CAC.0020.0004][.8B60.0020.0004] # IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR NINETEEN -33E0 ; [.1CA4.0020.0004][.B272.0020.0004] # IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY ONE -32C0 ; [.1CA4.0020.0004][.CA96.0020.0004] # IDEOGRAPHIC TELEGRAPH SYMBOL FOR JANUARY -3359 ; [.1CA4.0020.0004][.8B60.0020.0004] # IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR ONE -33F3 ; [.1CA5.0020.0004][.1CA3.0020.0004][.B272.0020.0004] # IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY TWENTY -336C ; [.1CA5.0020.0004][.1CA3.0020.0004][.8B60.0020.0004] # IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR TWENTY -33F4 ; [.1CA5.0020.0004][.1CA4.0020.0004][.B272.0020.0004] # IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY TWENTY-ONE -336D ; [.1CA5.0020.0004][.1CA4.0020.0004][.8B60.0020.0004] # IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR TWENTY-ONE -33F5 ; [.1CA5.0020.0004][.1CA5.0020.0004][.B272.0020.0004] # IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY TWENTY-TWO -336E ; [.1CA5.0020.0004][.1CA5.0020.0004][.8B60.0020.0004] # IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR TWENTY-TWO -33F6 ; [.1CA5.0020.0004][.1CA6.0020.0004][.B272.0020.0004] # IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY TWENTY-THREE -336F ; [.1CA5.0020.0004][.1CA6.0020.0004][.8B60.0020.0004] # IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR TWENTY-THREE -33F7 ; [.1CA5.0020.0004][.1CA7.0020.0004][.B272.0020.0004] # IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY TWENTY-FOUR -3370 ; [.1CA5.0020.0004][.1CA7.0020.0004][.8B60.0020.0004] # IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR TWENTY-FOUR -33F8 ; [.1CA5.0020.0004][.1CA8.0020.0004][.B272.0020.0004] # IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY TWENTY-FIVE -33F9 ; [.1CA5.0020.0004][.1CA9.0020.0004][.B272.0020.0004] # IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY TWENTY-SIX -33FA ; [.1CA5.0020.0004][.1CAA.0020.0004][.B272.0020.0004] # IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY TWENTY-SEVEN -33FB ; [.1CA5.0020.0004][.1CAB.0020.0004][.B272.0020.0004] # IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY TWENTY-EIGHT -33FC ; [.1CA5.0020.0004][.1CAC.0020.0004][.B272.0020.0004] # IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY TWENTY-NINE -33E1 ; [.1CA5.0020.0004][.B272.0020.0004] # IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY TWO -32C1 ; [.1CA5.0020.0004][.CA96.0020.0004] # IDEOGRAPHIC TELEGRAPH SYMBOL FOR FEBRUARY -335A ; [.1CA5.0020.0004][.8B60.0020.0004] # IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR TWO -33FD ; [.1CA6.0020.0004][.1CA3.0020.0004][.B272.0020.0004] # IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY THIRTY -33FE ; [.1CA6.0020.0004][.1CA4.0020.0004][.B272.0020.0004] # IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY THIRTY-ONE -33E2 ; [.1CA6.0020.0004][.B272.0020.0004] # IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY THREE -32C2 ; [.1CA6.0020.0004][.CA96.0020.0004] # IDEOGRAPHIC TELEGRAPH SYMBOL FOR MARCH -335B ; [.1CA6.0020.0004][.8B60.0020.0004] # IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR THREE -33E3 ; [.1CA7.0020.0004][.B272.0020.0004] # IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY FOUR -32C3 ; [.1CA7.0020.0004][.CA96.0020.0004] # IDEOGRAPHIC TELEGRAPH SYMBOL FOR APRIL -335C ; [.1CA7.0020.0004][.8B60.0020.0004] # IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR FOUR -33E4 ; [.1CA8.0020.0004][.B272.0020.0004] # IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY FIVE -32C4 ; [.1CA8.0020.0004][.CA96.0020.0004] # IDEOGRAPHIC TELEGRAPH SYMBOL FOR MAY -335D ; [.1CA8.0020.0004][.8B60.0020.0004] # IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR FIVE -33E5 ; [.1CA9.0020.0004][.B272.0020.0004] # IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY SIX -32C5 ; [.1CA9.0020.0004][.CA96.0020.0004] # IDEOGRAPHIC TELEGRAPH SYMBOL FOR JUNE -335E ; [.1CA9.0020.0004][.8B60.0020.0004] # IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR SIX -33E6 ; [.1CAA.0020.0004][.B272.0020.0004] # IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY SEVEN -32C6 ; [.1CAA.0020.0004][.CA96.0020.0004] # IDEOGRAPHIC TELEGRAPH SYMBOL FOR JULY -335F ; [.1CAA.0020.0004][.8B60.0020.0004] # IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR SEVEN -33E7 ; [.1CAB.0020.0004][.B272.0020.0004] # IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY EIGHT -32C7 ; [.1CAB.0020.0004][.CA96.0020.0004] # IDEOGRAPHIC TELEGRAPH SYMBOL FOR AUGUST -3360 ; [.1CAB.0020.0004][.8B60.0020.0004] # IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR EIGHT -33E8 ; [.1CAC.0020.0004][.B272.0020.0004] # IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY NINE -32C8 ; [.1CAC.0020.0004][.CA96.0020.0004] # IDEOGRAPHIC TELEGRAPH SYMBOL FOR SEPTEMBER -3361 ; [.1CAC.0020.0004][.8B60.0020.0004] # IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR NINE -1F241 ; [*037A.0020.0004][.B35F.0020.0004][*037B.0020.0004] # TORTOISE SHELL BRACKETED CJK UNIFIED IDEOGRAPH-4E09 -1F242 ; [*037A.0020.0004][.8E0E.0020.0004][*037B.0020.0004] # TORTOISE SHELL BRACKETED CJK UNIFIED IDEOGRAPH-4E8C -1F247 ; [*037A.0020.0004][.B548.0020.0004][*037B.0020.0004] # TORTOISE SHELL BRACKETED CJK UNIFIED IDEOGRAPH-52DD -1F243 ; [*037A.0020.0004][.8049.0020.0004][*037B.0020.0004] # TORTOISE SHELL BRACKETED CJK UNIFIED IDEOGRAPH-5B89 -1F245 ; [*037A.0020.0004][.89A6.0020.0004][*037B.0020.0004] # TORTOISE SHELL BRACKETED CJK UNIFIED IDEOGRAPH-6253 -1F248 ; [*037A.0020.0004][.811B.0020.0004][*037B.0020.0004] # TORTOISE SHELL BRACKETED CJK UNIFIED IDEOGRAPH-6557 -1F240 ; [*037A.0020.0004][.81FC.0020.0004][*037B.0020.0004] # TORTOISE SHELL BRACKETED CJK UNIFIED IDEOGRAPH-672C -1F244 ; [*037A.0020.0004][.8B60.0020.0004][*037B.0020.0004] # TORTOISE SHELL BRACKETED CJK UNIFIED IDEOGRAPH-70B9 -1F246 ; [*037A.0020.0004][.8A91.0020.0004][*037B.0020.0004] # TORTOISE SHELL BRACKETED CJK UNIFIED IDEOGRAPH-76D7 +3220 ; [*0328.0020.0004][.C5CF.0020.0004][*0329.0020.0004] # PARENTHESIZED IDEOGRAPH ONE +3226 ; [*0328.0020.0004][.AE03.0020.0004][*0329.0020.0004] # PARENTHESIZED IDEOGRAPH SEVEN +3222 ; [*0328.0020.0004][.B35F.0020.0004][*0329.0020.0004] # PARENTHESIZED IDEOGRAPH THREE +3228 ; [*0328.0020.0004][.9C92.0020.0004][*0329.0020.0004] # PARENTHESIZED IDEOGRAPH NINE +3221 ; [*0328.0020.0004][.8E0E.0020.0004][*0329.0020.0004] # PARENTHESIZED IDEOGRAPH TWO +3224 ; [*0328.0020.0004][.BDF1.0020.0004][*0329.0020.0004] # PARENTHESIZED IDEOGRAPH FIVE +3239 ; [*0328.0020.0004][.89B6.0020.0004][*0329.0020.0004] # PARENTHESIZED IDEOGRAPH REPRESENT +323D ; [*0328.0020.0004][.AE82.0020.0004][*0329.0020.0004] # PARENTHESIZED IDEOGRAPH ENTERPRISE +3241 ; [*0328.0020.0004][.C1F9.0020.0004][*0329.0020.0004] # PARENTHESIZED IDEOGRAPH REST +3227 ; [*0328.0020.0004][.80C6.0020.0004][*0329.0020.0004] # PARENTHESIZED IDEOGRAPH EIGHT +3225 ; [*0328.0020.0004][.A49F.0020.0004][*0329.0020.0004] # PARENTHESIZED IDEOGRAPH SIX +3238 ; [*0328.0020.0004][.A132.0020.0004][*0329.0020.0004] # PARENTHESIZED IDEOGRAPH LABOR +3229 ; [*0328.0020.0004][.B57B.0020.0004][*0329.0020.0004] # PARENTHESIZED IDEOGRAPH TEN +323F ; [*0328.0020.0004][.C10A.0020.0004][*0329.0020.0004] # PARENTHESIZED IDEOGRAPH ALLIANCE +3234 ; [*0328.0020.0004][.A8EB.0020.0004][*0329.0020.0004] # PARENTHESIZED IDEOGRAPH NAME +323A ; [*0328.0020.0004][.9589.0020.0004][*0329.0020.0004] # PARENTHESIZED IDEOGRAPH CALL +3223 ; [*0328.0020.0004][.B715.0020.0004][*0329.0020.0004] # PARENTHESIZED IDEOGRAPH FOUR +322F ; [*0328.0020.0004][.BB2D.0020.0004][*0329.0020.0004] # PARENTHESIZED IDEOGRAPH EARTH +323B ; [*0328.0020.0004][.C304.0020.0004][*0329.0020.0004] # PARENTHESIZED IDEOGRAPH STUDY +3230 ; [*0328.0020.0004][.B272.0020.0004][*0329.0020.0004] # PARENTHESIZED IDEOGRAPH SUN +322A ; [*0328.0020.0004][.CA96.0020.0004][*0329.0020.0004] # PARENTHESIZED IDEOGRAPH MOON +3232 ; [*0328.0020.0004][.C8D2.0020.0004][*0329.0020.0004] # PARENTHESIZED IDEOGRAPH HAVE +322D ; [*0328.0020.0004][.A98A.0020.0004][*0329.0020.0004] # PARENTHESIZED IDEOGRAPH WOOD +3231 ; [*0328.0020.0004][.CF58.0020.0004][*0329.0020.0004] # PARENTHESIZED IDEOGRAPH STOCK +322C ; [*0328.0020.0004][.B6BA.0020.0004][*0329.0020.0004] # PARENTHESIZED IDEOGRAPH WATER +322B ; [*0328.0020.0004][.97BC.0020.0004][*0329.0020.0004] # PARENTHESIZED IDEOGRAPH FIRE +3235 ; [*0328.0020.0004][.B980.0020.0004][*0329.0020.0004] # PARENTHESIZED IDEOGRAPH SPECIAL +323C ; [*0328.0020.0004][.999B.0020.0004][*0329.0020.0004] # PARENTHESIZED IDEOGRAPH SUPERVISE +3233 ; [*0328.0020.0004][.B4AC.0020.0004][*0329.0020.0004] # PARENTHESIZED IDEOGRAPH SOCIETY +3237 ; [*0328.0020.0004][.CFAD.0020.0004][*0329.0020.0004] # PARENTHESIZED IDEOGRAPH CONGRATULATION +3240 ; [*0328.0020.0004][.98D6.0020.0004][*0329.0020.0004] # PARENTHESIZED IDEOGRAPH FESTIVAL +3242 ; [*0328.0020.0004][.D0D4.0020.0004][*0329.0020.0004] # PARENTHESIZED IDEOGRAPH SELF +3243 ; [*0328.0020.0004][.CE51.0020.0004][*0329.0020.0004] # PARENTHESIZED IDEOGRAPH REACH +3236 ; [*0328.0020.0004][.844F.0020.0004][*0329.0020.0004] # PARENTHESIZED IDEOGRAPH FINANCIAL +323E ; [*0328.0020.0004][.D0A3.0020.0004][*0329.0020.0004] # PARENTHESIZED IDEOGRAPH RESOURCE +322E ; [*0328.0020.0004][.9B96.0020.0004][*0329.0020.0004] # PARENTHESIZED IDEOGRAPH METAL +3358 ; [.1F98.0020.0004][.8B60.0020.0004] # IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR ZERO +33E9 ; [.1F99.0020.0004][.1F98.0020.0004][.B272.0020.0004] # IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY TEN +32C9 ; [.1F99.0020.0004][.1F98.0020.0004][.CA96.0020.0004] # IDEOGRAPHIC TELEGRAPH SYMBOL FOR OCTOBER +3362 ; [.1F99.0020.0004][.1F98.0020.0004][.8B60.0020.0004] # IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR TEN +33EA ; [.1F99.0020.0004][.1F99.0020.0004][.B272.0020.0004] # IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY ELEVEN +32CA ; [.1F99.0020.0004][.1F99.0020.0004][.CA96.0020.0004] # IDEOGRAPHIC TELEGRAPH SYMBOL FOR NOVEMBER +3363 ; [.1F99.0020.0004][.1F99.0020.0004][.8B60.0020.0004] # IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR ELEVEN +33EB ; [.1F99.0020.0004][.1F9A.0020.0004][.B272.0020.0004] # IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY TWELVE +32CB ; [.1F99.0020.0004][.1F9A.0020.0004][.CA96.0020.0004] # IDEOGRAPHIC TELEGRAPH SYMBOL FOR DECEMBER +3364 ; [.1F99.0020.0004][.1F9A.0020.0004][.8B60.0020.0004] # IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR TWELVE +33EC ; [.1F99.0020.0004][.1F9B.0020.0004][.B272.0020.0004] # IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY THIRTEEN +3365 ; [.1F99.0020.0004][.1F9B.0020.0004][.8B60.0020.0004] # IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR THIRTEEN +33ED ; [.1F99.0020.0004][.1F9C.0020.0004][.B272.0020.0004] # IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY FOURTEEN +3366 ; [.1F99.0020.0004][.1F9C.0020.0004][.8B60.0020.0004] # IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR FOURTEEN +33EE ; [.1F99.0020.0004][.1F9D.0020.0004][.B272.0020.0004] # IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY FIFTEEN +3367 ; [.1F99.0020.0004][.1F9D.0020.0004][.8B60.0020.0004] # IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR FIFTEEN +33EF ; [.1F99.0020.0004][.1F9E.0020.0004][.B272.0020.0004] # IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY SIXTEEN +3368 ; [.1F99.0020.0004][.1F9E.0020.0004][.8B60.0020.0004] # IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR SIXTEEN +33F0 ; [.1F99.0020.0004][.1F9F.0020.0004][.B272.0020.0004] # IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY SEVENTEEN +3369 ; [.1F99.0020.0004][.1F9F.0020.0004][.8B60.0020.0004] # IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR SEVENTEEN +33F1 ; [.1F99.0020.0004][.1FA0.0020.0004][.B272.0020.0004] # IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY EIGHTEEN +336A ; [.1F99.0020.0004][.1FA0.0020.0004][.8B60.0020.0004] # IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR EIGHTEEN +33F2 ; [.1F99.0020.0004][.1FA1.0020.0004][.B272.0020.0004] # IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY NINETEEN +336B ; [.1F99.0020.0004][.1FA1.0020.0004][.8B60.0020.0004] # IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR NINETEEN +33E0 ; [.1F99.0020.0004][.B272.0020.0004] # IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY ONE +32C0 ; [.1F99.0020.0004][.CA96.0020.0004] # IDEOGRAPHIC TELEGRAPH SYMBOL FOR JANUARY +3359 ; [.1F99.0020.0004][.8B60.0020.0004] # IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR ONE +33F3 ; [.1F9A.0020.0004][.1F98.0020.0004][.B272.0020.0004] # IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY TWENTY +336C ; [.1F9A.0020.0004][.1F98.0020.0004][.8B60.0020.0004] # IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR TWENTY +33F4 ; [.1F9A.0020.0004][.1F99.0020.0004][.B272.0020.0004] # IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY TWENTY-ONE +336D ; [.1F9A.0020.0004][.1F99.0020.0004][.8B60.0020.0004] # IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR TWENTY-ONE +33F5 ; [.1F9A.0020.0004][.1F9A.0020.0004][.B272.0020.0004] # IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY TWENTY-TWO +336E ; [.1F9A.0020.0004][.1F9A.0020.0004][.8B60.0020.0004] # IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR TWENTY-TWO +33F6 ; [.1F9A.0020.0004][.1F9B.0020.0004][.B272.0020.0004] # IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY TWENTY-THREE +336F ; [.1F9A.0020.0004][.1F9B.0020.0004][.8B60.0020.0004] # IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR TWENTY-THREE +33F7 ; [.1F9A.0020.0004][.1F9C.0020.0004][.B272.0020.0004] # IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY TWENTY-FOUR +3370 ; [.1F9A.0020.0004][.1F9C.0020.0004][.8B60.0020.0004] # IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR TWENTY-FOUR +33F8 ; [.1F9A.0020.0004][.1F9D.0020.0004][.B272.0020.0004] # IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY TWENTY-FIVE +33F9 ; [.1F9A.0020.0004][.1F9E.0020.0004][.B272.0020.0004] # IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY TWENTY-SIX +33FA ; [.1F9A.0020.0004][.1F9F.0020.0004][.B272.0020.0004] # IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY TWENTY-SEVEN +33FB ; [.1F9A.0020.0004][.1FA0.0020.0004][.B272.0020.0004] # IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY TWENTY-EIGHT +33FC ; [.1F9A.0020.0004][.1FA1.0020.0004][.B272.0020.0004] # IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY TWENTY-NINE +33E1 ; [.1F9A.0020.0004][.B272.0020.0004] # IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY TWO +32C1 ; [.1F9A.0020.0004][.CA96.0020.0004] # IDEOGRAPHIC TELEGRAPH SYMBOL FOR FEBRUARY +335A ; [.1F9A.0020.0004][.8B60.0020.0004] # IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR TWO +33FD ; [.1F9B.0020.0004][.1F98.0020.0004][.B272.0020.0004] # IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY THIRTY +33FE ; [.1F9B.0020.0004][.1F99.0020.0004][.B272.0020.0004] # IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY THIRTY-ONE +33E2 ; [.1F9B.0020.0004][.B272.0020.0004] # IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY THREE +32C2 ; [.1F9B.0020.0004][.CA96.0020.0004] # IDEOGRAPHIC TELEGRAPH SYMBOL FOR MARCH +335B ; [.1F9B.0020.0004][.8B60.0020.0004] # IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR THREE +33E3 ; [.1F9C.0020.0004][.B272.0020.0004] # IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY FOUR +32C3 ; [.1F9C.0020.0004][.CA96.0020.0004] # IDEOGRAPHIC TELEGRAPH SYMBOL FOR APRIL +335C ; [.1F9C.0020.0004][.8B60.0020.0004] # IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR FOUR +33E4 ; [.1F9D.0020.0004][.B272.0020.0004] # IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY FIVE +32C4 ; [.1F9D.0020.0004][.CA96.0020.0004] # IDEOGRAPHIC TELEGRAPH SYMBOL FOR MAY +335D ; [.1F9D.0020.0004][.8B60.0020.0004] # IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR FIVE +33E5 ; [.1F9E.0020.0004][.B272.0020.0004] # IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY SIX +32C5 ; [.1F9E.0020.0004][.CA96.0020.0004] # IDEOGRAPHIC TELEGRAPH SYMBOL FOR JUNE +335E ; [.1F9E.0020.0004][.8B60.0020.0004] # IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR SIX +33E6 ; [.1F9F.0020.0004][.B272.0020.0004] # IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY SEVEN +32C6 ; [.1F9F.0020.0004][.CA96.0020.0004] # IDEOGRAPHIC TELEGRAPH SYMBOL FOR JULY +335F ; [.1F9F.0020.0004][.8B60.0020.0004] # IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR SEVEN +33E7 ; [.1FA0.0020.0004][.B272.0020.0004] # IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY EIGHT +32C7 ; [.1FA0.0020.0004][.CA96.0020.0004] # IDEOGRAPHIC TELEGRAPH SYMBOL FOR AUGUST +3360 ; [.1FA0.0020.0004][.8B60.0020.0004] # IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR EIGHT +33E8 ; [.1FA1.0020.0004][.B272.0020.0004] # IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY NINE +32C8 ; [.1FA1.0020.0004][.CA96.0020.0004] # IDEOGRAPHIC TELEGRAPH SYMBOL FOR SEPTEMBER +3361 ; [.1FA1.0020.0004][.8B60.0020.0004] # IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR NINE +1F241 ; [*038A.0020.0004][.B35F.0020.0004][*038B.0020.0004] # TORTOISE SHELL BRACKETED CJK UNIFIED IDEOGRAPH-4E09 +1F242 ; [*038A.0020.0004][.8E0E.0020.0004][*038B.0020.0004] # TORTOISE SHELL BRACKETED CJK UNIFIED IDEOGRAPH-4E8C +1F247 ; [*038A.0020.0004][.B548.0020.0004][*038B.0020.0004] # TORTOISE SHELL BRACKETED CJK UNIFIED IDEOGRAPH-52DD +1F243 ; [*038A.0020.0004][.8049.0020.0004][*038B.0020.0004] # TORTOISE SHELL BRACKETED CJK UNIFIED IDEOGRAPH-5B89 +1F245 ; [*038A.0020.0004][.89A6.0020.0004][*038B.0020.0004] # TORTOISE SHELL BRACKETED CJK UNIFIED IDEOGRAPH-6253 +1F248 ; [*038A.0020.0004][.811B.0020.0004][*038B.0020.0004] # TORTOISE SHELL BRACKETED CJK UNIFIED IDEOGRAPH-6557 +1F240 ; [*038A.0020.0004][.81FC.0020.0004][*038B.0020.0004] # TORTOISE SHELL BRACKETED CJK UNIFIED IDEOGRAPH-672C +1F244 ; [*038A.0020.0004][.8B60.0020.0004][*038B.0020.0004] # TORTOISE SHELL BRACKETED CJK UNIFIED IDEOGRAPH-70B9 +1F246 ; [*038A.0020.0004][.8A91.0020.0004][*038B.0020.0004] # TORTOISE SHELL BRACKETED CJK UNIFIED IDEOGRAPH-76D7 2F00 ; [.C5CF.0020.0004] # KANGXI RADICAL ONE 3192 ; [.C5CF.0020.0014] # IDEOGRAPHIC ANNOTATION ONE MARK 3280 ; [.C5CF.0020.0006] # CIRCLED IDEOGRAPH ONE diff --git a/gnu/usr.bin/perl/cpan/Unicode-Collate/Collate/Locale/zh_strk.pl b/gnu/usr.bin/perl/cpan/Unicode-Collate/Collate/Locale/zh_strk.pl index 16c1a744a86..7df2564e3c2 100644 --- a/gnu/usr.bin/perl/cpan/Unicode-Collate/Collate/Locale/zh_strk.pl +++ b/gnu/usr.bin/perl/cpan/Unicode-Collate/Collate/Locale/zh_strk.pl @@ -1,214 +1,214 @@ use Unicode::Collate::CJK::Stroke; +{ - locale_version => 1.27, + locale_version => 1.31, overrideCJK => \&Unicode::Collate::CJK::Stroke::weightStroke, - entry => <<'ENTRY', # for DUCET v10.0.0 -0101 ; [.1CAD.001C.0002] # LATIN SMALL LETTER A WITH MACRON -0061 0304 ; [.1CAD.001C.0002] # LATIN SMALL LETTER A WITH MACRON -0100 ; [.1CAD.001C.0008] # LATIN CAPITAL LETTER A WITH MACRON -0041 0304 ; [.1CAD.001C.0008] # LATIN CAPITAL LETTER A WITH MACRON -00E1 ; [.1CAD.001D.0002] # LATIN SMALL LETTER A WITH ACUTE -0061 0301 ; [.1CAD.001D.0002] # LATIN SMALL LETTER A WITH ACUTE -0061 0341 ; [.1CAD.001D.0002] # LATIN SMALL LETTER A WITH ACUTE -00C1 ; [.1CAD.001D.0008] # LATIN CAPITAL LETTER A WITH ACUTE -0041 0301 ; [.1CAD.001D.0008] # LATIN CAPITAL LETTER A WITH ACUTE -0041 0341 ; [.1CAD.001D.0008] # LATIN CAPITAL LETTER A WITH ACUTE -01CE ; [.1CAD.001E.0002] # LATIN SMALL LETTER A WITH CARON -0061 030C ; [.1CAD.001E.0002] # LATIN SMALL LETTER A WITH CARON -01CD ; [.1CAD.001E.0008] # LATIN CAPITAL LETTER A WITH CARON -0041 030C ; [.1CAD.001E.0008] # LATIN CAPITAL LETTER A WITH CARON -00E0 ; [.1CAD.001F.0002] # LATIN SMALL LETTER A WITH GRAVE -0061 0300 ; [.1CAD.001F.0002] # LATIN SMALL LETTER A WITH GRAVE -0061 0340 ; [.1CAD.001F.0002] # LATIN SMALL LETTER A WITH GRAVE -00C0 ; [.1CAD.001F.0008] # LATIN CAPITAL LETTER A WITH GRAVE -0041 0300 ; [.1CAD.001F.0008] # LATIN CAPITAL LETTER A WITH GRAVE -0041 0340 ; [.1CAD.001F.0008] # LATIN CAPITAL LETTER A WITH GRAVE -0113 ; [.1D10.001C.0002] # LATIN SMALL LETTER E WITH MACRON -0065 0304 ; [.1D10.001C.0002] # LATIN SMALL LETTER E WITH MACRON -0112 ; [.1D10.001C.0008] # LATIN CAPITAL LETTER E WITH MACRON -0045 0304 ; [.1D10.001C.0008] # LATIN CAPITAL LETTER E WITH MACRON -00E9 ; [.1D10.001D.0002] # LATIN SMALL LETTER E WITH ACUTE -0065 0301 ; [.1D10.001D.0002] # LATIN SMALL LETTER E WITH ACUTE -0065 0341 ; [.1D10.001D.0002] # LATIN SMALL LETTER E WITH ACUTE -00C9 ; [.1D10.001D.0008] # LATIN CAPITAL LETTER E WITH ACUTE -0045 0301 ; [.1D10.001D.0008] # LATIN CAPITAL LETTER E WITH ACUTE -0045 0341 ; [.1D10.001D.0008] # LATIN CAPITAL LETTER E WITH ACUTE -011B ; [.1D10.001E.0002] # LATIN SMALL LETTER E WITH CARON -0065 030C ; [.1D10.001E.0002] # LATIN SMALL LETTER E WITH CARON -011A ; [.1D10.001E.0008] # LATIN CAPITAL LETTER E WITH CARON -0045 030C ; [.1D10.001E.0008] # LATIN CAPITAL LETTER E WITH CARON -00E8 ; [.1D10.001F.0002] # LATIN SMALL LETTER E WITH GRAVE -0065 0300 ; [.1D10.001F.0002] # LATIN SMALL LETTER E WITH GRAVE -0065 0340 ; [.1D10.001F.0002] # LATIN SMALL LETTER E WITH GRAVE -00C8 ; [.1D10.001F.0008] # LATIN CAPITAL LETTER E WITH GRAVE -0045 0300 ; [.1D10.001F.0008] # LATIN CAPITAL LETTER E WITH GRAVE -0045 0340 ; [.1D10.001F.0008] # LATIN CAPITAL LETTER E WITH GRAVE -00EA 0304 ; [.1D10.0021.0002] # -00CA 0304 ; [.1D10.0021.0008] # -0065 0302 0304 ; [.1D10.0021.0002] # -0045 0302 0304 ; [.1D10.0021.0008] # -1EBF ; [.1D10.0022.0002] # LATIN SMALL LETTER E WITH CIRCUMFLEX AND ACUTE -0065 0302 0301 ; [.1D10.0022.0002] # LATIN SMALL LETTER E WITH CIRCUMFLEX AND ACUTE -0065 0302 0341 ; [.1D10.0022.0002] # LATIN SMALL LETTER E WITH CIRCUMFLEX AND ACUTE -1EBE ; [.1D10.0022.0008] # LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND ACUTE -0045 0302 0301 ; [.1D10.0022.0008] # LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND ACUTE -0045 0302 0341 ; [.1D10.0022.0008] # LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND ACUTE -00EA 0301 ; [.1D10.0022.0002] # -00EA 0341 ; [.1D10.0022.0002] # -00CA 0301 ; [.1D10.0022.0008] # -00CA 0341 ; [.1D10.0022.0008] # -00EA 030C ; [.1D10.0023.0002] # -00CA 030C ; [.1D10.0023.0008] # -0065 0302 030C ; [.1D10.0023.0002] # -0045 0302 030C ; [.1D10.0023.0008] # -1EC1 ; [.1D10.0024.0002] # LATIN SMALL LETTER E WITH CIRCUMFLEX AND GRAVE -0065 0302 0300 ; [.1D10.0024.0002] # LATIN SMALL LETTER E WITH CIRCUMFLEX AND GRAVE -0065 0302 0340 ; [.1D10.0024.0002] # LATIN SMALL LETTER E WITH CIRCUMFLEX AND GRAVE -1EC0 ; [.1D10.0024.0008] # LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND GRAVE -0045 0302 0300 ; [.1D10.0024.0008] # LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND GRAVE -0045 0302 0340 ; [.1D10.0024.0008] # LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND GRAVE -00EA 0300 ; [.1D10.0024.0002] # -00EA 0340 ; [.1D10.0024.0002] # -00CA 0300 ; [.1D10.0024.0008] # -00CA 0340 ; [.1D10.0024.0008] # -00EA ; [.1D10.0025.0002] # LATIN SMALL LETTER E WITH CIRCUMFLEX -0065 0302 ; [.1D10.0025.0002] # LATIN SMALL LETTER E WITH CIRCUMFLEX -00CA ; [.1D10.0025.0008] # LATIN CAPITAL LETTER E WITH CIRCUMFLEX -0045 0302 ; [.1D10.0025.0008] # LATIN CAPITAL LETTER E WITH CIRCUMFLEX -1EC5 ; [.1D10.0025.0002][.0000.002D.0002] # LATIN SMALL LETTER E WITH CIRCUMFLEX AND TILDE -1EC4 ; [.1D10.0025.0008][.0000.002D.0002] # LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND TILDE -1EC3 ; [.1D10.0025.0002][.0000.003B.0002] # LATIN SMALL LETTER E WITH CIRCUMFLEX AND HOOK ABOVE -1EC2 ; [.1D10.0025.0008][.0000.003B.0002] # LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND HOOK ABOVE -1EC7 ; [.1D10.0025.0002][.0000.0042.0002] # LATIN SMALL LETTER E WITH CIRCUMFLEX AND DOT BELOW -1EC6 ; [.1D10.0025.0008][.0000.0042.0002] # LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND DOT BELOW -012B ; [.1D98.001C.0002] # LATIN SMALL LETTER I WITH MACRON -0069 0304 ; [.1D98.001C.0002] # LATIN SMALL LETTER I WITH MACRON -012A ; [.1D98.001C.0008] # LATIN CAPITAL LETTER I WITH MACRON -0049 0304 ; [.1D98.001C.0008] # LATIN CAPITAL LETTER I WITH MACRON -00ED ; [.1D98.001D.0002] # LATIN SMALL LETTER I WITH ACUTE -0069 0301 ; [.1D98.001D.0002] # LATIN SMALL LETTER I WITH ACUTE -0069 0341 ; [.1D98.001D.0002] # LATIN SMALL LETTER I WITH ACUTE -00CD ; [.1D98.001D.0008] # LATIN CAPITAL LETTER I WITH ACUTE -0049 0301 ; [.1D98.001D.0008] # LATIN CAPITAL LETTER I WITH ACUTE -0049 0341 ; [.1D98.001D.0008] # LATIN CAPITAL LETTER I WITH ACUTE -01D0 ; [.1D98.001E.0002] # LATIN SMALL LETTER I WITH CARON -0069 030C ; [.1D98.001E.0002] # LATIN SMALL LETTER I WITH CARON -01CF ; [.1D98.001E.0008] # LATIN CAPITAL LETTER I WITH CARON -0049 030C ; [.1D98.001E.0008] # LATIN CAPITAL LETTER I WITH CARON -00EC ; [.1D98.001F.0002] # LATIN SMALL LETTER I WITH GRAVE -0069 0300 ; [.1D98.001F.0002] # LATIN SMALL LETTER I WITH GRAVE -0069 0340 ; [.1D98.001F.0002] # LATIN SMALL LETTER I WITH GRAVE -00CC ; [.1D98.001F.0008] # LATIN CAPITAL LETTER I WITH GRAVE -0049 0300 ; [.1D98.001F.0008] # LATIN CAPITAL LETTER I WITH GRAVE -0049 0340 ; [.1D98.001F.0008] # LATIN CAPITAL LETTER I WITH GRAVE -006D 0304 ; [.1E10.001C.0002] # -004D 0304 ; [.1E10.001C.0008] # -1E3F ; [.1E10.001D.0002] # LATIN SMALL LETTER M WITH ACUTE -006D 0301 ; [.1E10.001D.0002] # LATIN SMALL LETTER M WITH ACUTE -006D 0341 ; [.1E10.001D.0002] # LATIN SMALL LETTER M WITH ACUTE -1E3E ; [.1E10.001D.0008] # LATIN CAPITAL LETTER M WITH ACUTE -004D 0301 ; [.1E10.001D.0008] # LATIN CAPITAL LETTER M WITH ACUTE -004D 0341 ; [.1E10.001D.0008] # LATIN CAPITAL LETTER M WITH ACUTE -006D 030C ; [.1E10.001E.0002] # -004D 030C ; [.1E10.001E.0008] # -006D 0300 ; [.1E10.001F.0002] # -006D 0340 ; [.1E10.001F.0002] # -004D 0300 ; [.1E10.001F.0008] # -004D 0340 ; [.1E10.001F.0008] # -006E 0304 ; [.1E1F.001C.0002] # -004E 0304 ; [.1E1F.001C.0008] # -0144 ; [.1E1F.001D.0002] # LATIN SMALL LETTER N WITH ACUTE -006E 0301 ; [.1E1F.001D.0002] # LATIN SMALL LETTER N WITH ACUTE -006E 0341 ; [.1E1F.001D.0002] # LATIN SMALL LETTER N WITH ACUTE -0143 ; [.1E1F.001D.0008] # LATIN CAPITAL LETTER N WITH ACUTE -004E 0301 ; [.1E1F.001D.0008] # LATIN CAPITAL LETTER N WITH ACUTE -004E 0341 ; [.1E1F.001D.0008] # LATIN CAPITAL LETTER N WITH ACUTE -0148 ; [.1E1F.001E.0002] # LATIN SMALL LETTER N WITH CARON -006E 030C ; [.1E1F.001E.0002] # LATIN SMALL LETTER N WITH CARON -0147 ; [.1E1F.001E.0008] # LATIN CAPITAL LETTER N WITH CARON -004E 030C ; [.1E1F.001E.0008] # LATIN CAPITAL LETTER N WITH CARON -01F9 ; [.1E1F.001F.0002] # LATIN SMALL LETTER N WITH GRAVE -006E 0300 ; [.1E1F.001F.0002] # LATIN SMALL LETTER N WITH GRAVE -006E 0340 ; [.1E1F.001F.0002] # LATIN SMALL LETTER N WITH GRAVE -01F8 ; [.1E1F.001F.0008] # LATIN CAPITAL LETTER N WITH GRAVE -004E 0300 ; [.1E1F.001F.0008] # LATIN CAPITAL LETTER N WITH GRAVE -004E 0340 ; [.1E1F.001F.0008] # LATIN CAPITAL LETTER N WITH GRAVE -014D ; [.1E43.001C.0002] # LATIN SMALL LETTER O WITH MACRON -006F 0304 ; [.1E43.001C.0002] # LATIN SMALL LETTER O WITH MACRON -014C ; [.1E43.001C.0008] # LATIN CAPITAL LETTER O WITH MACRON -004F 0304 ; [.1E43.001C.0008] # LATIN CAPITAL LETTER O WITH MACRON -00F3 ; [.1E43.001D.0002] # LATIN SMALL LETTER O WITH ACUTE -006F 0301 ; [.1E43.001D.0002] # LATIN SMALL LETTER O WITH ACUTE -006F 0341 ; [.1E43.001D.0002] # LATIN SMALL LETTER O WITH ACUTE -00D3 ; [.1E43.001D.0008] # LATIN CAPITAL LETTER O WITH ACUTE -004F 0301 ; [.1E43.001D.0008] # LATIN CAPITAL LETTER O WITH ACUTE -004F 0341 ; [.1E43.001D.0008] # LATIN CAPITAL LETTER O WITH ACUTE -01D2 ; [.1E43.001E.0002] # LATIN SMALL LETTER O WITH CARON -006F 030C ; [.1E43.001E.0002] # LATIN SMALL LETTER O WITH CARON -01D1 ; [.1E43.001E.0008] # LATIN CAPITAL LETTER O WITH CARON -004F 030C ; [.1E43.001E.0008] # LATIN CAPITAL LETTER O WITH CARON -00F2 ; [.1E43.001F.0002] # LATIN SMALL LETTER O WITH GRAVE -006F 0300 ; [.1E43.001F.0002] # LATIN SMALL LETTER O WITH GRAVE -006F 0340 ; [.1E43.001F.0002] # LATIN SMALL LETTER O WITH GRAVE -00D2 ; [.1E43.001F.0008] # LATIN CAPITAL LETTER O WITH GRAVE -004F 0300 ; [.1E43.001F.0008] # LATIN CAPITAL LETTER O WITH GRAVE -004F 0340 ; [.1E43.001F.0008] # LATIN CAPITAL LETTER O WITH GRAVE -016B ; [.1F1B.001C.0002] # LATIN SMALL LETTER U WITH MACRON -0075 0304 ; [.1F1B.001C.0002] # LATIN SMALL LETTER U WITH MACRON -016A ; [.1F1B.001C.0008] # LATIN CAPITAL LETTER U WITH MACRON -0055 0304 ; [.1F1B.001C.0008] # LATIN CAPITAL LETTER U WITH MACRON -00FA ; [.1F1B.001D.0002] # LATIN SMALL LETTER U WITH ACUTE -0075 0301 ; [.1F1B.001D.0002] # LATIN SMALL LETTER U WITH ACUTE -0075 0341 ; [.1F1B.001D.0002] # LATIN SMALL LETTER U WITH ACUTE -00DA ; [.1F1B.001D.0008] # LATIN CAPITAL LETTER U WITH ACUTE -0055 0301 ; [.1F1B.001D.0008] # LATIN CAPITAL LETTER U WITH ACUTE -0055 0341 ; [.1F1B.001D.0008] # LATIN CAPITAL LETTER U WITH ACUTE -01D4 ; [.1F1B.001E.0002] # LATIN SMALL LETTER U WITH CARON -0075 030C ; [.1F1B.001E.0002] # LATIN SMALL LETTER U WITH CARON -01D3 ; [.1F1B.001E.0008] # LATIN CAPITAL LETTER U WITH CARON -0055 030C ; [.1F1B.001E.0008] # LATIN CAPITAL LETTER U WITH CARON -00F9 ; [.1F1B.001F.0002] # LATIN SMALL LETTER U WITH GRAVE -0075 0300 ; [.1F1B.001F.0002] # LATIN SMALL LETTER U WITH GRAVE -0075 0340 ; [.1F1B.001F.0002] # LATIN SMALL LETTER U WITH GRAVE -00D9 ; [.1F1B.001F.0008] # LATIN CAPITAL LETTER U WITH GRAVE -0055 0300 ; [.1F1B.001F.0008] # LATIN CAPITAL LETTER U WITH GRAVE -0055 0340 ; [.1F1B.001F.0008] # LATIN CAPITAL LETTER U WITH GRAVE -01D6 ; [.1F1B.0021.0002] # LATIN SMALL LETTER U WITH DIAERESIS AND MACRON -0075 0308 0304 ; [.1F1B.0021.0002] # LATIN SMALL LETTER U WITH DIAERESIS AND MACRON -01D5 ; [.1F1B.0021.0008] # LATIN CAPITAL LETTER U WITH DIAERESIS AND MACRON -0055 0308 0304 ; [.1F1B.0021.0008] # LATIN CAPITAL LETTER U WITH DIAERESIS AND MACRON -00FC 0304 ; [.1F1B.0021.0002] # -00DC 0304 ; [.1F1B.0021.0008] # -01D8 ; [.1F1B.0022.0002] # LATIN SMALL LETTER U WITH DIAERESIS AND ACUTE -0075 0308 0301 ; [.1F1B.0022.0002] # LATIN SMALL LETTER U WITH DIAERESIS AND ACUTE -0075 0308 0341 ; [.1F1B.0022.0002] # LATIN SMALL LETTER U WITH DIAERESIS AND ACUTE -01D7 ; [.1F1B.0022.0008] # LATIN CAPITAL LETTER U WITH DIAERESIS AND ACUTE -0055 0308 0301 ; [.1F1B.0022.0008] # LATIN CAPITAL LETTER U WITH DIAERESIS AND ACUTE -0055 0308 0341 ; [.1F1B.0022.0008] # LATIN CAPITAL LETTER U WITH DIAERESIS AND ACUTE -00FC 0301 ; [.1F1B.0022.0002] # -00FC 0341 ; [.1F1B.0022.0002] # -00DC 0301 ; [.1F1B.0022.0008] # -00DC 0341 ; [.1F1B.0022.0008] # -01DA ; [.1F1B.0023.0002] # LATIN SMALL LETTER U WITH DIAERESIS AND CARON -0075 0308 030C ; [.1F1B.0023.0002] # LATIN SMALL LETTER U WITH DIAERESIS AND CARON -01D9 ; [.1F1B.0023.0008] # LATIN CAPITAL LETTER U WITH DIAERESIS AND CARON -0055 0308 030C ; [.1F1B.0023.0008] # LATIN CAPITAL LETTER U WITH DIAERESIS AND CARON -00FC 030C ; [.1F1B.0023.0002] # -00DC 030C ; [.1F1B.0023.0008] # -01DC ; [.1F1B.0024.0002] # LATIN SMALL LETTER U WITH DIAERESIS AND GRAVE -0075 0308 0300 ; [.1F1B.0024.0002] # LATIN SMALL LETTER U WITH DIAERESIS AND GRAVE -0075 0308 0340 ; [.1F1B.0024.0002] # LATIN SMALL LETTER U WITH DIAERESIS AND GRAVE -01DB ; [.1F1B.0024.0008] # LATIN CAPITAL LETTER U WITH DIAERESIS AND GRAVE -0055 0308 0300 ; [.1F1B.0024.0008] # LATIN CAPITAL LETTER U WITH DIAERESIS AND GRAVE -0055 0308 0340 ; [.1F1B.0024.0008] # LATIN CAPITAL LETTER U WITH DIAERESIS AND GRAVE -00FC 0300 ; [.1F1B.0024.0002] # -00FC 0340 ; [.1F1B.0024.0002] # -00DC 0300 ; [.1F1B.0024.0008] # -00DC 0340 ; [.1F1B.0024.0008] # -00FC ; [.1F1B.0025.0002] # LATIN SMALL LETTER U WITH DIAERESIS -0075 0308 ; [.1F1B.0025.0002] # LATIN SMALL LETTER U WITH DIAERESIS -00DC ; [.1F1B.0025.0008] # LATIN CAPITAL LETTER U WITH DIAERESIS -0055 0308 ; [.1F1B.0025.0008] # LATIN CAPITAL LETTER U WITH DIAERESIS + entry => <<'ENTRY', # for DUCET v13.0.0 +0101 ; [.1FA2.001C.0002] # LATIN SMALL LETTER A WITH MACRON +0061 0304 ; [.1FA2.001C.0002] # LATIN SMALL LETTER A WITH MACRON +0100 ; [.1FA2.001C.0008] # LATIN CAPITAL LETTER A WITH MACRON +0041 0304 ; [.1FA2.001C.0008] # LATIN CAPITAL LETTER A WITH MACRON +00E1 ; [.1FA2.001D.0002] # LATIN SMALL LETTER A WITH ACUTE +0061 0301 ; [.1FA2.001D.0002] # LATIN SMALL LETTER A WITH ACUTE +0061 0341 ; [.1FA2.001D.0002] # LATIN SMALL LETTER A WITH ACUTE +00C1 ; [.1FA2.001D.0008] # LATIN CAPITAL LETTER A WITH ACUTE +0041 0301 ; [.1FA2.001D.0008] # LATIN CAPITAL LETTER A WITH ACUTE +0041 0341 ; [.1FA2.001D.0008] # LATIN CAPITAL LETTER A WITH ACUTE +01CE ; [.1FA2.001E.0002] # LATIN SMALL LETTER A WITH CARON +0061 030C ; [.1FA2.001E.0002] # LATIN SMALL LETTER A WITH CARON +01CD ; [.1FA2.001E.0008] # LATIN CAPITAL LETTER A WITH CARON +0041 030C ; [.1FA2.001E.0008] # LATIN CAPITAL LETTER A WITH CARON +00E0 ; [.1FA2.001F.0002] # LATIN SMALL LETTER A WITH GRAVE +0061 0300 ; [.1FA2.001F.0002] # LATIN SMALL LETTER A WITH GRAVE +0061 0340 ; [.1FA2.001F.0002] # LATIN SMALL LETTER A WITH GRAVE +00C0 ; [.1FA2.001F.0008] # LATIN CAPITAL LETTER A WITH GRAVE +0041 0300 ; [.1FA2.001F.0008] # LATIN CAPITAL LETTER A WITH GRAVE +0041 0340 ; [.1FA2.001F.0008] # LATIN CAPITAL LETTER A WITH GRAVE +0113 ; [.2007.001C.0002] # LATIN SMALL LETTER E WITH MACRON +0065 0304 ; [.2007.001C.0002] # LATIN SMALL LETTER E WITH MACRON +0112 ; [.2007.001C.0008] # LATIN CAPITAL LETTER E WITH MACRON +0045 0304 ; [.2007.001C.0008] # LATIN CAPITAL LETTER E WITH MACRON +00E9 ; [.2007.001D.0002] # LATIN SMALL LETTER E WITH ACUTE +0065 0301 ; [.2007.001D.0002] # LATIN SMALL LETTER E WITH ACUTE +0065 0341 ; [.2007.001D.0002] # LATIN SMALL LETTER E WITH ACUTE +00C9 ; [.2007.001D.0008] # LATIN CAPITAL LETTER E WITH ACUTE +0045 0301 ; [.2007.001D.0008] # LATIN CAPITAL LETTER E WITH ACUTE +0045 0341 ; [.2007.001D.0008] # LATIN CAPITAL LETTER E WITH ACUTE +011B ; [.2007.001E.0002] # LATIN SMALL LETTER E WITH CARON +0065 030C ; [.2007.001E.0002] # LATIN SMALL LETTER E WITH CARON +011A ; [.2007.001E.0008] # LATIN CAPITAL LETTER E WITH CARON +0045 030C ; [.2007.001E.0008] # LATIN CAPITAL LETTER E WITH CARON +00E8 ; [.2007.001F.0002] # LATIN SMALL LETTER E WITH GRAVE +0065 0300 ; [.2007.001F.0002] # LATIN SMALL LETTER E WITH GRAVE +0065 0340 ; [.2007.001F.0002] # LATIN SMALL LETTER E WITH GRAVE +00C8 ; [.2007.001F.0008] # LATIN CAPITAL LETTER E WITH GRAVE +0045 0300 ; [.2007.001F.0008] # LATIN CAPITAL LETTER E WITH GRAVE +0045 0340 ; [.2007.001F.0008] # LATIN CAPITAL LETTER E WITH GRAVE +00EA 0304 ; [.2007.0021.0002] # +00CA 0304 ; [.2007.0021.0008] # +0065 0302 0304 ; [.2007.0021.0002] # +0045 0302 0304 ; [.2007.0021.0008] # +1EBF ; [.2007.0022.0002] # LATIN SMALL LETTER E WITH CIRCUMFLEX AND ACUTE +0065 0302 0301 ; [.2007.0022.0002] # LATIN SMALL LETTER E WITH CIRCUMFLEX AND ACUTE +0065 0302 0341 ; [.2007.0022.0002] # LATIN SMALL LETTER E WITH CIRCUMFLEX AND ACUTE +1EBE ; [.2007.0022.0008] # LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND ACUTE +0045 0302 0301 ; [.2007.0022.0008] # LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND ACUTE +0045 0302 0341 ; [.2007.0022.0008] # LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND ACUTE +00EA 0301 ; [.2007.0022.0002] # +00EA 0341 ; [.2007.0022.0002] # +00CA 0301 ; [.2007.0022.0008] # +00CA 0341 ; [.2007.0022.0008] # +00EA 030C ; [.2007.0023.0002] # +00CA 030C ; [.2007.0023.0008] # +0065 0302 030C ; [.2007.0023.0002] # +0045 0302 030C ; [.2007.0023.0008] # +1EC1 ; [.2007.0024.0002] # LATIN SMALL LETTER E WITH CIRCUMFLEX AND GRAVE +0065 0302 0300 ; [.2007.0024.0002] # LATIN SMALL LETTER E WITH CIRCUMFLEX AND GRAVE +0065 0302 0340 ; [.2007.0024.0002] # LATIN SMALL LETTER E WITH CIRCUMFLEX AND GRAVE +1EC0 ; [.2007.0024.0008] # LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND GRAVE +0045 0302 0300 ; [.2007.0024.0008] # LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND GRAVE +0045 0302 0340 ; [.2007.0024.0008] # LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND GRAVE +00EA 0300 ; [.2007.0024.0002] # +00EA 0340 ; [.2007.0024.0002] # +00CA 0300 ; [.2007.0024.0008] # +00CA 0340 ; [.2007.0024.0008] # +00EA ; [.2007.0025.0002] # LATIN SMALL LETTER E WITH CIRCUMFLEX +0065 0302 ; [.2007.0025.0002] # LATIN SMALL LETTER E WITH CIRCUMFLEX +00CA ; [.2007.0025.0008] # LATIN CAPITAL LETTER E WITH CIRCUMFLEX +0045 0302 ; [.2007.0025.0008] # LATIN CAPITAL LETTER E WITH CIRCUMFLEX +1EC5 ; [.2007.0025.0002][.0000.002D.0002] # LATIN SMALL LETTER E WITH CIRCUMFLEX AND TILDE +1EC4 ; [.2007.0025.0008][.0000.002D.0002] # LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND TILDE +1EC3 ; [.2007.0025.0002][.0000.003B.0002] # LATIN SMALL LETTER E WITH CIRCUMFLEX AND HOOK ABOVE +1EC2 ; [.2007.0025.0008][.0000.003B.0002] # LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND HOOK ABOVE +1EC7 ; [.2007.0025.0002][.0000.0042.0002] # LATIN SMALL LETTER E WITH CIRCUMFLEX AND DOT BELOW +1EC6 ; [.2007.0025.0008][.0000.0042.0002] # LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND DOT BELOW +012B ; [.2090.001C.0002] # LATIN SMALL LETTER I WITH MACRON +0069 0304 ; [.2090.001C.0002] # LATIN SMALL LETTER I WITH MACRON +012A ; [.2090.001C.0008] # LATIN CAPITAL LETTER I WITH MACRON +0049 0304 ; [.2090.001C.0008] # LATIN CAPITAL LETTER I WITH MACRON +00ED ; [.2090.001D.0002] # LATIN SMALL LETTER I WITH ACUTE +0069 0301 ; [.2090.001D.0002] # LATIN SMALL LETTER I WITH ACUTE +0069 0341 ; [.2090.001D.0002] # LATIN SMALL LETTER I WITH ACUTE +00CD ; [.2090.001D.0008] # LATIN CAPITAL LETTER I WITH ACUTE +0049 0301 ; [.2090.001D.0008] # LATIN CAPITAL LETTER I WITH ACUTE +0049 0341 ; [.2090.001D.0008] # LATIN CAPITAL LETTER I WITH ACUTE +01D0 ; [.2090.001E.0002] # LATIN SMALL LETTER I WITH CARON +0069 030C ; [.2090.001E.0002] # LATIN SMALL LETTER I WITH CARON +01CF ; [.2090.001E.0008] # LATIN CAPITAL LETTER I WITH CARON +0049 030C ; [.2090.001E.0008] # LATIN CAPITAL LETTER I WITH CARON +00EC ; [.2090.001F.0002] # LATIN SMALL LETTER I WITH GRAVE +0069 0300 ; [.2090.001F.0002] # LATIN SMALL LETTER I WITH GRAVE +0069 0340 ; [.2090.001F.0002] # LATIN SMALL LETTER I WITH GRAVE +00CC ; [.2090.001F.0008] # LATIN CAPITAL LETTER I WITH GRAVE +0049 0300 ; [.2090.001F.0008] # LATIN CAPITAL LETTER I WITH GRAVE +0049 0340 ; [.2090.001F.0008] # LATIN CAPITAL LETTER I WITH GRAVE +006D 0304 ; [.2109.001C.0002] # +004D 0304 ; [.2109.001C.0008] # +1E3F ; [.2109.001D.0002] # LATIN SMALL LETTER M WITH ACUTE +006D 0301 ; [.2109.001D.0002] # LATIN SMALL LETTER M WITH ACUTE +006D 0341 ; [.2109.001D.0002] # LATIN SMALL LETTER M WITH ACUTE +1E3E ; [.2109.001D.0008] # LATIN CAPITAL LETTER M WITH ACUTE +004D 0301 ; [.2109.001D.0008] # LATIN CAPITAL LETTER M WITH ACUTE +004D 0341 ; [.2109.001D.0008] # LATIN CAPITAL LETTER M WITH ACUTE +006D 030C ; [.2109.001E.0002] # +004D 030C ; [.2109.001E.0008] # +006D 0300 ; [.2109.001F.0002] # +006D 0340 ; [.2109.001F.0002] # +004D 0300 ; [.2109.001F.0008] # +004D 0340 ; [.2109.001F.0008] # +006E 0304 ; [.2118.001C.0002] # +004E 0304 ; [.2118.001C.0008] # +0144 ; [.2118.001D.0002] # LATIN SMALL LETTER N WITH ACUTE +006E 0301 ; [.2118.001D.0002] # LATIN SMALL LETTER N WITH ACUTE +006E 0341 ; [.2118.001D.0002] # LATIN SMALL LETTER N WITH ACUTE +0143 ; [.2118.001D.0008] # LATIN CAPITAL LETTER N WITH ACUTE +004E 0301 ; [.2118.001D.0008] # LATIN CAPITAL LETTER N WITH ACUTE +004E 0341 ; [.2118.001D.0008] # LATIN CAPITAL LETTER N WITH ACUTE +0148 ; [.2118.001E.0002] # LATIN SMALL LETTER N WITH CARON +006E 030C ; [.2118.001E.0002] # LATIN SMALL LETTER N WITH CARON +0147 ; [.2118.001E.0008] # LATIN CAPITAL LETTER N WITH CARON +004E 030C ; [.2118.001E.0008] # LATIN CAPITAL LETTER N WITH CARON +01F9 ; [.2118.001F.0002] # LATIN SMALL LETTER N WITH GRAVE +006E 0300 ; [.2118.001F.0002] # LATIN SMALL LETTER N WITH GRAVE +006E 0340 ; [.2118.001F.0002] # LATIN SMALL LETTER N WITH GRAVE +01F8 ; [.2118.001F.0008] # LATIN CAPITAL LETTER N WITH GRAVE +004E 0300 ; [.2118.001F.0008] # LATIN CAPITAL LETTER N WITH GRAVE +004E 0340 ; [.2118.001F.0008] # LATIN CAPITAL LETTER N WITH GRAVE +014D ; [.213C.001C.0002] # LATIN SMALL LETTER O WITH MACRON +006F 0304 ; [.213C.001C.0002] # LATIN SMALL LETTER O WITH MACRON +014C ; [.213C.001C.0008] # LATIN CAPITAL LETTER O WITH MACRON +004F 0304 ; [.213C.001C.0008] # LATIN CAPITAL LETTER O WITH MACRON +00F3 ; [.213C.001D.0002] # LATIN SMALL LETTER O WITH ACUTE +006F 0301 ; [.213C.001D.0002] # LATIN SMALL LETTER O WITH ACUTE +006F 0341 ; [.213C.001D.0002] # LATIN SMALL LETTER O WITH ACUTE +00D3 ; [.213C.001D.0008] # LATIN CAPITAL LETTER O WITH ACUTE +004F 0301 ; [.213C.001D.0008] # LATIN CAPITAL LETTER O WITH ACUTE +004F 0341 ; [.213C.001D.0008] # LATIN CAPITAL LETTER O WITH ACUTE +01D2 ; [.213C.001E.0002] # LATIN SMALL LETTER O WITH CARON +006F 030C ; [.213C.001E.0002] # LATIN SMALL LETTER O WITH CARON +01D1 ; [.213C.001E.0008] # LATIN CAPITAL LETTER O WITH CARON +004F 030C ; [.213C.001E.0008] # LATIN CAPITAL LETTER O WITH CARON +00F2 ; [.213C.001F.0002] # LATIN SMALL LETTER O WITH GRAVE +006F 0300 ; [.213C.001F.0002] # LATIN SMALL LETTER O WITH GRAVE +006F 0340 ; [.213C.001F.0002] # LATIN SMALL LETTER O WITH GRAVE +00D2 ; [.213C.001F.0008] # LATIN CAPITAL LETTER O WITH GRAVE +004F 0300 ; [.213C.001F.0008] # LATIN CAPITAL LETTER O WITH GRAVE +004F 0340 ; [.213C.001F.0008] # LATIN CAPITAL LETTER O WITH GRAVE +016B ; [.2217.001C.0002] # LATIN SMALL LETTER U WITH MACRON +0075 0304 ; [.2217.001C.0002] # LATIN SMALL LETTER U WITH MACRON +016A ; [.2217.001C.0008] # LATIN CAPITAL LETTER U WITH MACRON +0055 0304 ; [.2217.001C.0008] # LATIN CAPITAL LETTER U WITH MACRON +00FA ; [.2217.001D.0002] # LATIN SMALL LETTER U WITH ACUTE +0075 0301 ; [.2217.001D.0002] # LATIN SMALL LETTER U WITH ACUTE +0075 0341 ; [.2217.001D.0002] # LATIN SMALL LETTER U WITH ACUTE +00DA ; [.2217.001D.0008] # LATIN CAPITAL LETTER U WITH ACUTE +0055 0301 ; [.2217.001D.0008] # LATIN CAPITAL LETTER U WITH ACUTE +0055 0341 ; [.2217.001D.0008] # LATIN CAPITAL LETTER U WITH ACUTE +01D4 ; [.2217.001E.0002] # LATIN SMALL LETTER U WITH CARON +0075 030C ; [.2217.001E.0002] # LATIN SMALL LETTER U WITH CARON +01D3 ; [.2217.001E.0008] # LATIN CAPITAL LETTER U WITH CARON +0055 030C ; [.2217.001E.0008] # LATIN CAPITAL LETTER U WITH CARON +00F9 ; [.2217.001F.0002] # LATIN SMALL LETTER U WITH GRAVE +0075 0300 ; [.2217.001F.0002] # LATIN SMALL LETTER U WITH GRAVE +0075 0340 ; [.2217.001F.0002] # LATIN SMALL LETTER U WITH GRAVE +00D9 ; [.2217.001F.0008] # LATIN CAPITAL LETTER U WITH GRAVE +0055 0300 ; [.2217.001F.0008] # LATIN CAPITAL LETTER U WITH GRAVE +0055 0340 ; [.2217.001F.0008] # LATIN CAPITAL LETTER U WITH GRAVE +01D6 ; [.2217.0021.0002] # LATIN SMALL LETTER U WITH DIAERESIS AND MACRON +0075 0308 0304 ; [.2217.0021.0002] # LATIN SMALL LETTER U WITH DIAERESIS AND MACRON +01D5 ; [.2217.0021.0008] # LATIN CAPITAL LETTER U WITH DIAERESIS AND MACRON +0055 0308 0304 ; [.2217.0021.0008] # LATIN CAPITAL LETTER U WITH DIAERESIS AND MACRON +00FC 0304 ; [.2217.0021.0002] # +00DC 0304 ; [.2217.0021.0008] # +01D8 ; [.2217.0022.0002] # LATIN SMALL LETTER U WITH DIAERESIS AND ACUTE +0075 0308 0301 ; [.2217.0022.0002] # LATIN SMALL LETTER U WITH DIAERESIS AND ACUTE +0075 0308 0341 ; [.2217.0022.0002] # LATIN SMALL LETTER U WITH DIAERESIS AND ACUTE +01D7 ; [.2217.0022.0008] # LATIN CAPITAL LETTER U WITH DIAERESIS AND ACUTE +0055 0308 0301 ; [.2217.0022.0008] # LATIN CAPITAL LETTER U WITH DIAERESIS AND ACUTE +0055 0308 0341 ; [.2217.0022.0008] # LATIN CAPITAL LETTER U WITH DIAERESIS AND ACUTE +00FC 0301 ; [.2217.0022.0002] # +00FC 0341 ; [.2217.0022.0002] # +00DC 0301 ; [.2217.0022.0008] # +00DC 0341 ; [.2217.0022.0008] # +01DA ; [.2217.0023.0002] # LATIN SMALL LETTER U WITH DIAERESIS AND CARON +0075 0308 030C ; [.2217.0023.0002] # LATIN SMALL LETTER U WITH DIAERESIS AND CARON +01D9 ; [.2217.0023.0008] # LATIN CAPITAL LETTER U WITH DIAERESIS AND CARON +0055 0308 030C ; [.2217.0023.0008] # LATIN CAPITAL LETTER U WITH DIAERESIS AND CARON +00FC 030C ; [.2217.0023.0002] # +00DC 030C ; [.2217.0023.0008] # +01DC ; [.2217.0024.0002] # LATIN SMALL LETTER U WITH DIAERESIS AND GRAVE +0075 0308 0300 ; [.2217.0024.0002] # LATIN SMALL LETTER U WITH DIAERESIS AND GRAVE +0075 0308 0340 ; [.2217.0024.0002] # LATIN SMALL LETTER U WITH DIAERESIS AND GRAVE +01DB ; [.2217.0024.0008] # LATIN CAPITAL LETTER U WITH DIAERESIS AND GRAVE +0055 0308 0300 ; [.2217.0024.0008] # LATIN CAPITAL LETTER U WITH DIAERESIS AND GRAVE +0055 0308 0340 ; [.2217.0024.0008] # LATIN CAPITAL LETTER U WITH DIAERESIS AND GRAVE +00FC 0300 ; [.2217.0024.0002] # +00FC 0340 ; [.2217.0024.0002] # +00DC 0300 ; [.2217.0024.0008] # +00DC 0340 ; [.2217.0024.0008] # +00FC ; [.2217.0025.0002] # LATIN SMALL LETTER U WITH DIAERESIS +0075 0308 ; [.2217.0025.0002] # LATIN SMALL LETTER U WITH DIAERESIS +00DC ; [.2217.0025.0008] # LATIN CAPITAL LETTER U WITH DIAERESIS +0055 0308 ; [.2217.0025.0008] # LATIN CAPITAL LETTER U WITH DIAERESIS FDD0 2801 ; [.8000.0020.0002] # 2E84 ; [.8007.0020.0002] # CJK RADICAL SECOND THREE 3006 ; [.8012.0020.0002] # IDEOGRAPHIC CLOSING MARK @@ -299,119 +299,119 @@ FDD0 2823 ; [.DC7C.0020.0002] # FDD0 2824 ; [.DC7E.0020.0002] # FDD0 2827 ; [.DC80.0020.0002] # FDD0 2830 ; [.DC82.0020.0002] # -3220 ; [*0318.0020.0004][.8001.0020.0004][*0319.0020.0004] # PARENTHESIZED IDEOGRAPH ONE -3226 ; [*0318.0020.0004][.801A.0020.0004][*0319.0020.0004] # PARENTHESIZED IDEOGRAPH SEVEN -3222 ; [*0318.0020.0004][.8054.0020.0004][*0319.0020.0004] # PARENTHESIZED IDEOGRAPH THREE -3228 ; [*0318.0020.0004][.8027.0020.0004][*0319.0020.0004] # PARENTHESIZED IDEOGRAPH NINE -3221 ; [*0318.0020.0004][.802A.0020.0004][*0319.0020.0004] # PARENTHESIZED IDEOGRAPH TWO -3224 ; [*0318.0020.0004][.80D7.0020.0004][*0319.0020.0004] # PARENTHESIZED IDEOGRAPH FIVE -3239 ; [*0318.0020.0004][.81C2.0020.0004][*0319.0020.0004] # PARENTHESIZED IDEOGRAPH REPRESENT -323D ; [*0318.0020.0004][.831C.0020.0004][*0319.0020.0004] # PARENTHESIZED IDEOGRAPH ENTERPRISE -3241 ; [*0318.0020.0004][.832C.0020.0004][*0319.0020.0004] # PARENTHESIZED IDEOGRAPH REST -3227 ; [*0318.0020.0004][.8030.0020.0004][*0319.0020.0004] # PARENTHESIZED IDEOGRAPH EIGHT -3225 ; [*0318.0020.0004][.80F5.0020.0004][*0319.0020.0004] # PARENTHESIZED IDEOGRAPH SIX -3238 ; [*0318.0020.0004][.85A8.0020.0004][*0319.0020.0004] # PARENTHESIZED IDEOGRAPH LABOR -3229 ; [*0318.0020.0004][.8041.0020.0004][*0319.0020.0004] # PARENTHESIZED IDEOGRAPH TEN -323F ; [*0318.0020.0004][.899D.0020.0004][*0319.0020.0004] # PARENTHESIZED IDEOGRAPH ALLIANCE -3234 ; [*0318.0020.0004][.839D.0020.0004][*0319.0020.0004] # PARENTHESIZED IDEOGRAPH NAME -323A ; [*0318.0020.0004][.89D5.0020.0004][*0319.0020.0004] # PARENTHESIZED IDEOGRAPH CALL -3223 ; [*0318.0020.0004][.822D.0020.0004][*0319.0020.0004] # PARENTHESIZED IDEOGRAPH FOUR -322F ; [*0318.0020.0004][.8081.0020.0004][*0319.0020.0004] # PARENTHESIZED IDEOGRAPH EARTH -323B ; [*0318.0020.0004][.8A8D.0020.0004][*0319.0020.0004] # PARENTHESIZED IDEOGRAPH STUDY -3230 ; [*0318.0020.0004][.815C.0020.0004][*0319.0020.0004] # PARENTHESIZED IDEOGRAPH SUN -322A ; [*0318.0020.0004][.815F.0020.0004][*0319.0020.0004] # PARENTHESIZED IDEOGRAPH MOON -3232 ; [*0318.0020.0004][.845A.0020.0004][*0319.0020.0004] # PARENTHESIZED IDEOGRAPH HAVE -322D ; [*0318.0020.0004][.8160.0020.0004][*0319.0020.0004] # PARENTHESIZED IDEOGRAPH WOOD -3231 ; [*0318.0020.0004][.979F.0020.0004][*0319.0020.0004] # PARENTHESIZED IDEOGRAPH STOCK -322C ; [*0318.0020.0004][.816D.0020.0004][*0319.0020.0004] # PARENTHESIZED IDEOGRAPH WATER -322B ; [*0318.0020.0004][.816E.0020.0004][*0319.0020.0004] # PARENTHESIZED IDEOGRAPH FIRE -3235 ; [*0318.0020.0004][.9895.0020.0004][*0319.0020.0004] # PARENTHESIZED IDEOGRAPH SPECIAL -323C ; [*0318.0020.0004][.B79A.0020.0004][*0319.0020.0004] # PARENTHESIZED IDEOGRAPH SUPERVISE -3233 ; [*0318.0020.0004][.8D2E.0020.0004][*0319.0020.0004] # PARENTHESIZED IDEOGRAPH SOCIETY -3237 ; [*0318.0020.0004][.9970.0020.0004][*0319.0020.0004] # PARENTHESIZED IDEOGRAPH CONGRATULATION -3240 ; [*0318.0020.0004][.A100.0020.0004][*0319.0020.0004] # PARENTHESIZED IDEOGRAPH FESTIVAL -3242 ; [*0318.0020.0004][.84D8.0020.0004][*0319.0020.0004] # PARENTHESIZED IDEOGRAPH SELF -3243 ; [*0318.0020.0004][.84D9.0020.0004][*0319.0020.0004] # PARENTHESIZED IDEOGRAPH REACH -3236 ; [*0318.0020.0004][.9B3B.0020.0004][*0319.0020.0004] # PARENTHESIZED IDEOGRAPH FINANCIAL -323E ; [*0318.0020.0004][.B2A5.0020.0004][*0319.0020.0004] # PARENTHESIZED IDEOGRAPH RESOURCE -322E ; [*0318.0020.0004][.8E33.0020.0004][*0319.0020.0004] # PARENTHESIZED IDEOGRAPH METAL -3358 ; [.1CA3.0020.0004][.9216.0020.0004] # IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR ZERO -33E9 ; [.1CA4.0020.0004][.1CA3.0020.0004][.815C.0020.0004] # IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY TEN -32C9 ; [.1CA4.0020.0004][.1CA3.0020.0004][.815F.0020.0004] # IDEOGRAPHIC TELEGRAPH SYMBOL FOR OCTOBER -3362 ; [.1CA4.0020.0004][.1CA3.0020.0004][.9216.0020.0004] # IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR TEN -33EA ; [.1CA4.0020.0004][.1CA4.0020.0004][.815C.0020.0004] # IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY ELEVEN -32CA ; [.1CA4.0020.0004][.1CA4.0020.0004][.815F.0020.0004] # IDEOGRAPHIC TELEGRAPH SYMBOL FOR NOVEMBER -3363 ; [.1CA4.0020.0004][.1CA4.0020.0004][.9216.0020.0004] # IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR ELEVEN -33EB ; [.1CA4.0020.0004][.1CA5.0020.0004][.815C.0020.0004] # IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY TWELVE -32CB ; [.1CA4.0020.0004][.1CA5.0020.0004][.815F.0020.0004] # IDEOGRAPHIC TELEGRAPH SYMBOL FOR DECEMBER -3364 ; [.1CA4.0020.0004][.1CA5.0020.0004][.9216.0020.0004] # IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR TWELVE -33EC ; [.1CA4.0020.0004][.1CA6.0020.0004][.815C.0020.0004] # IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY THIRTEEN -3365 ; [.1CA4.0020.0004][.1CA6.0020.0004][.9216.0020.0004] # IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR THIRTEEN -33ED ; [.1CA4.0020.0004][.1CA7.0020.0004][.815C.0020.0004] # IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY FOURTEEN -3366 ; [.1CA4.0020.0004][.1CA7.0020.0004][.9216.0020.0004] # IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR FOURTEEN -33EE ; [.1CA4.0020.0004][.1CA8.0020.0004][.815C.0020.0004] # IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY FIFTEEN -3367 ; [.1CA4.0020.0004][.1CA8.0020.0004][.9216.0020.0004] # IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR FIFTEEN -33EF ; [.1CA4.0020.0004][.1CA9.0020.0004][.815C.0020.0004] # IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY SIXTEEN -3368 ; [.1CA4.0020.0004][.1CA9.0020.0004][.9216.0020.0004] # IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR SIXTEEN -33F0 ; [.1CA4.0020.0004][.1CAA.0020.0004][.815C.0020.0004] # IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY SEVENTEEN -3369 ; [.1CA4.0020.0004][.1CAA.0020.0004][.9216.0020.0004] # IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR SEVENTEEN -33F1 ; [.1CA4.0020.0004][.1CAB.0020.0004][.815C.0020.0004] # IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY EIGHTEEN -336A ; [.1CA4.0020.0004][.1CAB.0020.0004][.9216.0020.0004] # IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR EIGHTEEN -33F2 ; [.1CA4.0020.0004][.1CAC.0020.0004][.815C.0020.0004] # IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY NINETEEN -336B ; [.1CA4.0020.0004][.1CAC.0020.0004][.9216.0020.0004] # IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR NINETEEN -33E0 ; [.1CA4.0020.0004][.815C.0020.0004] # IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY ONE -32C0 ; [.1CA4.0020.0004][.815F.0020.0004] # IDEOGRAPHIC TELEGRAPH SYMBOL FOR JANUARY -3359 ; [.1CA4.0020.0004][.9216.0020.0004] # IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR ONE -33F3 ; [.1CA5.0020.0004][.1CA3.0020.0004][.815C.0020.0004] # IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY TWENTY -336C ; [.1CA5.0020.0004][.1CA3.0020.0004][.9216.0020.0004] # IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR TWENTY -33F4 ; [.1CA5.0020.0004][.1CA4.0020.0004][.815C.0020.0004] # IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY TWENTY-ONE -336D ; [.1CA5.0020.0004][.1CA4.0020.0004][.9216.0020.0004] # IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR TWENTY-ONE -33F5 ; [.1CA5.0020.0004][.1CA5.0020.0004][.815C.0020.0004] # IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY TWENTY-TWO -336E ; [.1CA5.0020.0004][.1CA5.0020.0004][.9216.0020.0004] # IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR TWENTY-TWO -33F6 ; [.1CA5.0020.0004][.1CA6.0020.0004][.815C.0020.0004] # IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY TWENTY-THREE -336F ; [.1CA5.0020.0004][.1CA6.0020.0004][.9216.0020.0004] # IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR TWENTY-THREE -33F7 ; [.1CA5.0020.0004][.1CA7.0020.0004][.815C.0020.0004] # IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY TWENTY-FOUR -3370 ; [.1CA5.0020.0004][.1CA7.0020.0004][.9216.0020.0004] # IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR TWENTY-FOUR -33F8 ; [.1CA5.0020.0004][.1CA8.0020.0004][.815C.0020.0004] # IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY TWENTY-FIVE -33F9 ; [.1CA5.0020.0004][.1CA9.0020.0004][.815C.0020.0004] # IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY TWENTY-SIX -33FA ; [.1CA5.0020.0004][.1CAA.0020.0004][.815C.0020.0004] # IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY TWENTY-SEVEN -33FB ; [.1CA5.0020.0004][.1CAB.0020.0004][.815C.0020.0004] # IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY TWENTY-EIGHT -33FC ; [.1CA5.0020.0004][.1CAC.0020.0004][.815C.0020.0004] # IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY TWENTY-NINE -33E1 ; [.1CA5.0020.0004][.815C.0020.0004] # IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY TWO -32C1 ; [.1CA5.0020.0004][.815F.0020.0004] # IDEOGRAPHIC TELEGRAPH SYMBOL FOR FEBRUARY -335A ; [.1CA5.0020.0004][.9216.0020.0004] # IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR TWO -33FD ; [.1CA6.0020.0004][.1CA3.0020.0004][.815C.0020.0004] # IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY THIRTY -33FE ; [.1CA6.0020.0004][.1CA4.0020.0004][.815C.0020.0004] # IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY THIRTY-ONE -33E2 ; [.1CA6.0020.0004][.815C.0020.0004] # IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY THREE -32C2 ; [.1CA6.0020.0004][.815F.0020.0004] # IDEOGRAPHIC TELEGRAPH SYMBOL FOR MARCH -335B ; [.1CA6.0020.0004][.9216.0020.0004] # IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR THREE -33E3 ; [.1CA7.0020.0004][.815C.0020.0004] # IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY FOUR -32C3 ; [.1CA7.0020.0004][.815F.0020.0004] # IDEOGRAPHIC TELEGRAPH SYMBOL FOR APRIL -335C ; [.1CA7.0020.0004][.9216.0020.0004] # IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR FOUR -33E4 ; [.1CA8.0020.0004][.815C.0020.0004] # IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY FIVE -32C4 ; [.1CA8.0020.0004][.815F.0020.0004] # IDEOGRAPHIC TELEGRAPH SYMBOL FOR MAY -335D ; [.1CA8.0020.0004][.9216.0020.0004] # IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR FIVE -33E5 ; [.1CA9.0020.0004][.815C.0020.0004] # IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY SIX -32C5 ; [.1CA9.0020.0004][.815F.0020.0004] # IDEOGRAPHIC TELEGRAPH SYMBOL FOR JUNE -335E ; [.1CA9.0020.0004][.9216.0020.0004] # IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR SIX -33E6 ; [.1CAA.0020.0004][.815C.0020.0004] # IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY SEVEN -32C6 ; [.1CAA.0020.0004][.815F.0020.0004] # IDEOGRAPHIC TELEGRAPH SYMBOL FOR JULY -335F ; [.1CAA.0020.0004][.9216.0020.0004] # IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR SEVEN -33E7 ; [.1CAB.0020.0004][.815C.0020.0004] # IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY EIGHT -32C7 ; [.1CAB.0020.0004][.815F.0020.0004] # IDEOGRAPHIC TELEGRAPH SYMBOL FOR AUGUST -3360 ; [.1CAB.0020.0004][.9216.0020.0004] # IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR EIGHT -33E8 ; [.1CAC.0020.0004][.815C.0020.0004] # IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY NINE -32C8 ; [.1CAC.0020.0004][.815F.0020.0004] # IDEOGRAPHIC TELEGRAPH SYMBOL FOR SEPTEMBER -3361 ; [.1CAC.0020.0004][.9216.0020.0004] # IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR NINE -1F241 ; [*037A.0020.0004][.8054.0020.0004][*037B.0020.0004] # TORTOISE SHELL BRACKETED CJK UNIFIED IDEOGRAPH-4E09 -1F242 ; [*037A.0020.0004][.802A.0020.0004][*037B.0020.0004] # TORTOISE SHELL BRACKETED CJK UNIFIED IDEOGRAPH-4E8C -1F247 ; [*037A.0020.0004][.A465.0020.0004][*037B.0020.0004] # TORTOISE SHELL BRACKETED CJK UNIFIED IDEOGRAPH-52DD -1F243 ; [*037A.0020.0004][.83F0.0020.0004][*037B.0020.0004] # TORTOISE SHELL BRACKETED CJK UNIFIED IDEOGRAPH-5B89 -1F245 ; [*037A.0020.0004][.8277.0020.0004][*037B.0020.0004] # TORTOISE SHELL BRACKETED CJK UNIFIED IDEOGRAPH-6253 -1F248 ; [*037A.0020.0004][.9EDA.0020.0004][*037B.0020.0004] # TORTOISE SHELL BRACKETED CJK UNIFIED IDEOGRAPH-6557 -1F240 ; [*037A.0020.0004][.8283.0020.0004][*037B.0020.0004] # TORTOISE SHELL BRACKETED CJK UNIFIED IDEOGRAPH-672C -1F244 ; [*037A.0020.0004][.9216.0020.0004][*037B.0020.0004] # TORTOISE SHELL BRACKETED CJK UNIFIED IDEOGRAPH-70B9 -1F246 ; [*037A.0020.0004][.A0BD.0020.0004][*037B.0020.0004] # TORTOISE SHELL BRACKETED CJK UNIFIED IDEOGRAPH-76D7 +3220 ; [*0328.0020.0004][.8001.0020.0004][*0329.0020.0004] # PARENTHESIZED IDEOGRAPH ONE +3226 ; [*0328.0020.0004][.801A.0020.0004][*0329.0020.0004] # PARENTHESIZED IDEOGRAPH SEVEN +3222 ; [*0328.0020.0004][.8054.0020.0004][*0329.0020.0004] # PARENTHESIZED IDEOGRAPH THREE +3228 ; [*0328.0020.0004][.8027.0020.0004][*0329.0020.0004] # PARENTHESIZED IDEOGRAPH NINE +3221 ; [*0328.0020.0004][.802A.0020.0004][*0329.0020.0004] # PARENTHESIZED IDEOGRAPH TWO +3224 ; [*0328.0020.0004][.80D7.0020.0004][*0329.0020.0004] # PARENTHESIZED IDEOGRAPH FIVE +3239 ; [*0328.0020.0004][.81C2.0020.0004][*0329.0020.0004] # PARENTHESIZED IDEOGRAPH REPRESENT +323D ; [*0328.0020.0004][.831C.0020.0004][*0329.0020.0004] # PARENTHESIZED IDEOGRAPH ENTERPRISE +3241 ; [*0328.0020.0004][.832C.0020.0004][*0329.0020.0004] # PARENTHESIZED IDEOGRAPH REST +3227 ; [*0328.0020.0004][.8030.0020.0004][*0329.0020.0004] # PARENTHESIZED IDEOGRAPH EIGHT +3225 ; [*0328.0020.0004][.80F5.0020.0004][*0329.0020.0004] # PARENTHESIZED IDEOGRAPH SIX +3238 ; [*0328.0020.0004][.85A8.0020.0004][*0329.0020.0004] # PARENTHESIZED IDEOGRAPH LABOR +3229 ; [*0328.0020.0004][.8041.0020.0004][*0329.0020.0004] # PARENTHESIZED IDEOGRAPH TEN +323F ; [*0328.0020.0004][.899D.0020.0004][*0329.0020.0004] # PARENTHESIZED IDEOGRAPH ALLIANCE +3234 ; [*0328.0020.0004][.839D.0020.0004][*0329.0020.0004] # PARENTHESIZED IDEOGRAPH NAME +323A ; [*0328.0020.0004][.89D5.0020.0004][*0329.0020.0004] # PARENTHESIZED IDEOGRAPH CALL +3223 ; [*0328.0020.0004][.822D.0020.0004][*0329.0020.0004] # PARENTHESIZED IDEOGRAPH FOUR +322F ; [*0328.0020.0004][.8081.0020.0004][*0329.0020.0004] # PARENTHESIZED IDEOGRAPH EARTH +323B ; [*0328.0020.0004][.8A8D.0020.0004][*0329.0020.0004] # PARENTHESIZED IDEOGRAPH STUDY +3230 ; [*0328.0020.0004][.815C.0020.0004][*0329.0020.0004] # PARENTHESIZED IDEOGRAPH SUN +322A ; [*0328.0020.0004][.815F.0020.0004][*0329.0020.0004] # PARENTHESIZED IDEOGRAPH MOON +3232 ; [*0328.0020.0004][.845A.0020.0004][*0329.0020.0004] # PARENTHESIZED IDEOGRAPH HAVE +322D ; [*0328.0020.0004][.8160.0020.0004][*0329.0020.0004] # PARENTHESIZED IDEOGRAPH WOOD +3231 ; [*0328.0020.0004][.979F.0020.0004][*0329.0020.0004] # PARENTHESIZED IDEOGRAPH STOCK +322C ; [*0328.0020.0004][.816D.0020.0004][*0329.0020.0004] # PARENTHESIZED IDEOGRAPH WATER +322B ; [*0328.0020.0004][.816E.0020.0004][*0329.0020.0004] # PARENTHESIZED IDEOGRAPH FIRE +3235 ; [*0328.0020.0004][.9895.0020.0004][*0329.0020.0004] # PARENTHESIZED IDEOGRAPH SPECIAL +323C ; [*0328.0020.0004][.B79A.0020.0004][*0329.0020.0004] # PARENTHESIZED IDEOGRAPH SUPERVISE +3233 ; [*0328.0020.0004][.8D2E.0020.0004][*0329.0020.0004] # PARENTHESIZED IDEOGRAPH SOCIETY +3237 ; [*0328.0020.0004][.9970.0020.0004][*0329.0020.0004] # PARENTHESIZED IDEOGRAPH CONGRATULATION +3240 ; [*0328.0020.0004][.A100.0020.0004][*0329.0020.0004] # PARENTHESIZED IDEOGRAPH FESTIVAL +3242 ; [*0328.0020.0004][.84D8.0020.0004][*0329.0020.0004] # PARENTHESIZED IDEOGRAPH SELF +3243 ; [*0328.0020.0004][.84D9.0020.0004][*0329.0020.0004] # PARENTHESIZED IDEOGRAPH REACH +3236 ; [*0328.0020.0004][.9B3B.0020.0004][*0329.0020.0004] # PARENTHESIZED IDEOGRAPH FINANCIAL +323E ; [*0328.0020.0004][.B2A5.0020.0004][*0329.0020.0004] # PARENTHESIZED IDEOGRAPH RESOURCE +322E ; [*0328.0020.0004][.8E33.0020.0004][*0329.0020.0004] # PARENTHESIZED IDEOGRAPH METAL +3358 ; [.1F98.0020.0004][.9216.0020.0004] # IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR ZERO +33E9 ; [.1F99.0020.0004][.1F98.0020.0004][.815C.0020.0004] # IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY TEN +32C9 ; [.1F99.0020.0004][.1F98.0020.0004][.815F.0020.0004] # IDEOGRAPHIC TELEGRAPH SYMBOL FOR OCTOBER +3362 ; [.1F99.0020.0004][.1F98.0020.0004][.9216.0020.0004] # IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR TEN +33EA ; [.1F99.0020.0004][.1F99.0020.0004][.815C.0020.0004] # IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY ELEVEN +32CA ; [.1F99.0020.0004][.1F99.0020.0004][.815F.0020.0004] # IDEOGRAPHIC TELEGRAPH SYMBOL FOR NOVEMBER +3363 ; [.1F99.0020.0004][.1F99.0020.0004][.9216.0020.0004] # IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR ELEVEN +33EB ; [.1F99.0020.0004][.1F9A.0020.0004][.815C.0020.0004] # IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY TWELVE +32CB ; [.1F99.0020.0004][.1F9A.0020.0004][.815F.0020.0004] # IDEOGRAPHIC TELEGRAPH SYMBOL FOR DECEMBER +3364 ; [.1F99.0020.0004][.1F9A.0020.0004][.9216.0020.0004] # IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR TWELVE +33EC ; [.1F99.0020.0004][.1F9B.0020.0004][.815C.0020.0004] # IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY THIRTEEN +3365 ; [.1F99.0020.0004][.1F9B.0020.0004][.9216.0020.0004] # IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR THIRTEEN +33ED ; [.1F99.0020.0004][.1F9C.0020.0004][.815C.0020.0004] # IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY FOURTEEN +3366 ; [.1F99.0020.0004][.1F9C.0020.0004][.9216.0020.0004] # IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR FOURTEEN +33EE ; [.1F99.0020.0004][.1F9D.0020.0004][.815C.0020.0004] # IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY FIFTEEN +3367 ; [.1F99.0020.0004][.1F9D.0020.0004][.9216.0020.0004] # IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR FIFTEEN +33EF ; [.1F99.0020.0004][.1F9E.0020.0004][.815C.0020.0004] # IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY SIXTEEN +3368 ; [.1F99.0020.0004][.1F9E.0020.0004][.9216.0020.0004] # IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR SIXTEEN +33F0 ; [.1F99.0020.0004][.1F9F.0020.0004][.815C.0020.0004] # IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY SEVENTEEN +3369 ; [.1F99.0020.0004][.1F9F.0020.0004][.9216.0020.0004] # IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR SEVENTEEN +33F1 ; [.1F99.0020.0004][.1FA0.0020.0004][.815C.0020.0004] # IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY EIGHTEEN +336A ; [.1F99.0020.0004][.1FA0.0020.0004][.9216.0020.0004] # IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR EIGHTEEN +33F2 ; [.1F99.0020.0004][.1FA1.0020.0004][.815C.0020.0004] # IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY NINETEEN +336B ; [.1F99.0020.0004][.1FA1.0020.0004][.9216.0020.0004] # IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR NINETEEN +33E0 ; [.1F99.0020.0004][.815C.0020.0004] # IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY ONE +32C0 ; [.1F99.0020.0004][.815F.0020.0004] # IDEOGRAPHIC TELEGRAPH SYMBOL FOR JANUARY +3359 ; [.1F99.0020.0004][.9216.0020.0004] # IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR ONE +33F3 ; [.1F9A.0020.0004][.1F98.0020.0004][.815C.0020.0004] # IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY TWENTY +336C ; [.1F9A.0020.0004][.1F98.0020.0004][.9216.0020.0004] # IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR TWENTY +33F4 ; [.1F9A.0020.0004][.1F99.0020.0004][.815C.0020.0004] # IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY TWENTY-ONE +336D ; [.1F9A.0020.0004][.1F99.0020.0004][.9216.0020.0004] # IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR TWENTY-ONE +33F5 ; [.1F9A.0020.0004][.1F9A.0020.0004][.815C.0020.0004] # IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY TWENTY-TWO +336E ; [.1F9A.0020.0004][.1F9A.0020.0004][.9216.0020.0004] # IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR TWENTY-TWO +33F6 ; [.1F9A.0020.0004][.1F9B.0020.0004][.815C.0020.0004] # IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY TWENTY-THREE +336F ; [.1F9A.0020.0004][.1F9B.0020.0004][.9216.0020.0004] # IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR TWENTY-THREE +33F7 ; [.1F9A.0020.0004][.1F9C.0020.0004][.815C.0020.0004] # IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY TWENTY-FOUR +3370 ; [.1F9A.0020.0004][.1F9C.0020.0004][.9216.0020.0004] # IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR TWENTY-FOUR +33F8 ; [.1F9A.0020.0004][.1F9D.0020.0004][.815C.0020.0004] # IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY TWENTY-FIVE +33F9 ; [.1F9A.0020.0004][.1F9E.0020.0004][.815C.0020.0004] # IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY TWENTY-SIX +33FA ; [.1F9A.0020.0004][.1F9F.0020.0004][.815C.0020.0004] # IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY TWENTY-SEVEN +33FB ; [.1F9A.0020.0004][.1FA0.0020.0004][.815C.0020.0004] # IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY TWENTY-EIGHT +33FC ; [.1F9A.0020.0004][.1FA1.0020.0004][.815C.0020.0004] # IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY TWENTY-NINE +33E1 ; [.1F9A.0020.0004][.815C.0020.0004] # IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY TWO +32C1 ; [.1F9A.0020.0004][.815F.0020.0004] # IDEOGRAPHIC TELEGRAPH SYMBOL FOR FEBRUARY +335A ; [.1F9A.0020.0004][.9216.0020.0004] # IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR TWO +33FD ; [.1F9B.0020.0004][.1F98.0020.0004][.815C.0020.0004] # IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY THIRTY +33FE ; [.1F9B.0020.0004][.1F99.0020.0004][.815C.0020.0004] # IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY THIRTY-ONE +33E2 ; [.1F9B.0020.0004][.815C.0020.0004] # IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY THREE +32C2 ; [.1F9B.0020.0004][.815F.0020.0004] # IDEOGRAPHIC TELEGRAPH SYMBOL FOR MARCH +335B ; [.1F9B.0020.0004][.9216.0020.0004] # IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR THREE +33E3 ; [.1F9C.0020.0004][.815C.0020.0004] # IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY FOUR +32C3 ; [.1F9C.0020.0004][.815F.0020.0004] # IDEOGRAPHIC TELEGRAPH SYMBOL FOR APRIL +335C ; [.1F9C.0020.0004][.9216.0020.0004] # IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR FOUR +33E4 ; [.1F9D.0020.0004][.815C.0020.0004] # IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY FIVE +32C4 ; [.1F9D.0020.0004][.815F.0020.0004] # IDEOGRAPHIC TELEGRAPH SYMBOL FOR MAY +335D ; [.1F9D.0020.0004][.9216.0020.0004] # IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR FIVE +33E5 ; [.1F9E.0020.0004][.815C.0020.0004] # IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY SIX +32C5 ; [.1F9E.0020.0004][.815F.0020.0004] # IDEOGRAPHIC TELEGRAPH SYMBOL FOR JUNE +335E ; [.1F9E.0020.0004][.9216.0020.0004] # IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR SIX +33E6 ; [.1F9F.0020.0004][.815C.0020.0004] # IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY SEVEN +32C6 ; [.1F9F.0020.0004][.815F.0020.0004] # IDEOGRAPHIC TELEGRAPH SYMBOL FOR JULY +335F ; [.1F9F.0020.0004][.9216.0020.0004] # IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR SEVEN +33E7 ; [.1FA0.0020.0004][.815C.0020.0004] # IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY EIGHT +32C7 ; [.1FA0.0020.0004][.815F.0020.0004] # IDEOGRAPHIC TELEGRAPH SYMBOL FOR AUGUST +3360 ; [.1FA0.0020.0004][.9216.0020.0004] # IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR EIGHT +33E8 ; [.1FA1.0020.0004][.815C.0020.0004] # IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY NINE +32C8 ; [.1FA1.0020.0004][.815F.0020.0004] # IDEOGRAPHIC TELEGRAPH SYMBOL FOR SEPTEMBER +3361 ; [.1FA1.0020.0004][.9216.0020.0004] # IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR NINE +1F241 ; [*038A.0020.0004][.8054.0020.0004][*038B.0020.0004] # TORTOISE SHELL BRACKETED CJK UNIFIED IDEOGRAPH-4E09 +1F242 ; [*038A.0020.0004][.802A.0020.0004][*038B.0020.0004] # TORTOISE SHELL BRACKETED CJK UNIFIED IDEOGRAPH-4E8C +1F247 ; [*038A.0020.0004][.A465.0020.0004][*038B.0020.0004] # TORTOISE SHELL BRACKETED CJK UNIFIED IDEOGRAPH-52DD +1F243 ; [*038A.0020.0004][.83F0.0020.0004][*038B.0020.0004] # TORTOISE SHELL BRACKETED CJK UNIFIED IDEOGRAPH-5B89 +1F245 ; [*038A.0020.0004][.8277.0020.0004][*038B.0020.0004] # TORTOISE SHELL BRACKETED CJK UNIFIED IDEOGRAPH-6253 +1F248 ; [*038A.0020.0004][.9EDA.0020.0004][*038B.0020.0004] # TORTOISE SHELL BRACKETED CJK UNIFIED IDEOGRAPH-6557 +1F240 ; [*038A.0020.0004][.8283.0020.0004][*038B.0020.0004] # TORTOISE SHELL BRACKETED CJK UNIFIED IDEOGRAPH-672C +1F244 ; [*038A.0020.0004][.9216.0020.0004][*038B.0020.0004] # TORTOISE SHELL BRACKETED CJK UNIFIED IDEOGRAPH-70B9 +1F246 ; [*038A.0020.0004][.A0BD.0020.0004][*038B.0020.0004] # TORTOISE SHELL BRACKETED CJK UNIFIED IDEOGRAPH-76D7 2F00 ; [.8001.0020.0004] # KANGXI RADICAL ONE 3192 ; [.8001.0020.0014] # IDEOGRAPHIC ANNOTATION ONE MARK 3280 ; [.8001.0020.0006] # CIRCLED IDEOGRAPH ONE diff --git a/gnu/usr.bin/perl/cpan/Unicode-Collate/Collate/Locale/zh_zhu.pl b/gnu/usr.bin/perl/cpan/Unicode-Collate/Collate/Locale/zh_zhu.pl index 6a82f51e01b..c65cdaf7bae 100644 --- a/gnu/usr.bin/perl/cpan/Unicode-Collate/Collate/Locale/zh_zhu.pl +++ b/gnu/usr.bin/perl/cpan/Unicode-Collate/Collate/Locale/zh_zhu.pl @@ -1,8 +1,8 @@ use Unicode::Collate::CJK::Zhuyin; +{ - locale_version => 1.27, + locale_version => 1.31, overrideCJK => \&Unicode::Collate::CJK::Zhuyin::weightZhuyin, - entry => <<'ENTRY', # for DUCET v10.0.0 + entry => <<'ENTRY', # for DUCET v13.0.0 02C9 ; [.0000.0199.0002] # MODIFIER LETTER MACRON 02CA ; [.019A.0020.0002] # MODIFIER LETTER ACUTE ACCENT 02C7 ; [.019B.0020.0002] # CARON @@ -10,212 +10,212 @@ use Unicode::Collate::CJK::Zhuyin; 02D9 ; [.019D.0020.0002] # DOT ABOVE 02EA ; [.019E.0020.0002] # MODIFIER LETTER YIN DEPARTING TONE MARK 02EB ; [.019F.0020.0002] # MODIFIER LETTER YANG DEPARTING TONE MARK -0101 ; [.1CAD.001C.0002] # LATIN SMALL LETTER A WITH MACRON -0061 0304 ; [.1CAD.001C.0002] # LATIN SMALL LETTER A WITH MACRON -0100 ; [.1CAD.001C.0008] # LATIN CAPITAL LETTER A WITH MACRON -0041 0304 ; [.1CAD.001C.0008] # LATIN CAPITAL LETTER A WITH MACRON -00E1 ; [.1CAD.001D.0002] # LATIN SMALL LETTER A WITH ACUTE -0061 0301 ; [.1CAD.001D.0002] # LATIN SMALL LETTER A WITH ACUTE -0061 0341 ; [.1CAD.001D.0002] # LATIN SMALL LETTER A WITH ACUTE -00C1 ; [.1CAD.001D.0008] # LATIN CAPITAL LETTER A WITH ACUTE -0041 0301 ; [.1CAD.001D.0008] # LATIN CAPITAL LETTER A WITH ACUTE -0041 0341 ; [.1CAD.001D.0008] # LATIN CAPITAL LETTER A WITH ACUTE -01CE ; [.1CAD.001E.0002] # LATIN SMALL LETTER A WITH CARON -0061 030C ; [.1CAD.001E.0002] # LATIN SMALL LETTER A WITH CARON -01CD ; [.1CAD.001E.0008] # LATIN CAPITAL LETTER A WITH CARON -0041 030C ; [.1CAD.001E.0008] # LATIN CAPITAL LETTER A WITH CARON -00E0 ; [.1CAD.001F.0002] # LATIN SMALL LETTER A WITH GRAVE -0061 0300 ; [.1CAD.001F.0002] # LATIN SMALL LETTER A WITH GRAVE -0061 0340 ; [.1CAD.001F.0002] # LATIN SMALL LETTER A WITH GRAVE -00C0 ; [.1CAD.001F.0008] # LATIN CAPITAL LETTER A WITH GRAVE -0041 0300 ; [.1CAD.001F.0008] # LATIN CAPITAL LETTER A WITH GRAVE -0041 0340 ; [.1CAD.001F.0008] # LATIN CAPITAL LETTER A WITH GRAVE -0113 ; [.1D10.001C.0002] # LATIN SMALL LETTER E WITH MACRON -0065 0304 ; [.1D10.001C.0002] # LATIN SMALL LETTER E WITH MACRON -0112 ; [.1D10.001C.0008] # LATIN CAPITAL LETTER E WITH MACRON -0045 0304 ; [.1D10.001C.0008] # LATIN CAPITAL LETTER E WITH MACRON -00E9 ; [.1D10.001D.0002] # LATIN SMALL LETTER E WITH ACUTE -0065 0301 ; [.1D10.001D.0002] # LATIN SMALL LETTER E WITH ACUTE -0065 0341 ; [.1D10.001D.0002] # LATIN SMALL LETTER E WITH ACUTE -00C9 ; [.1D10.001D.0008] # LATIN CAPITAL LETTER E WITH ACUTE -0045 0301 ; [.1D10.001D.0008] # LATIN CAPITAL LETTER E WITH ACUTE -0045 0341 ; [.1D10.001D.0008] # LATIN CAPITAL LETTER E WITH ACUTE -011B ; [.1D10.001E.0002] # LATIN SMALL LETTER E WITH CARON -0065 030C ; [.1D10.001E.0002] # LATIN SMALL LETTER E WITH CARON -011A ; [.1D10.001E.0008] # LATIN CAPITAL LETTER E WITH CARON -0045 030C ; [.1D10.001E.0008] # LATIN CAPITAL LETTER E WITH CARON -00E8 ; [.1D10.001F.0002] # LATIN SMALL LETTER E WITH GRAVE -0065 0300 ; [.1D10.001F.0002] # LATIN SMALL LETTER E WITH GRAVE -0065 0340 ; [.1D10.001F.0002] # LATIN SMALL LETTER E WITH GRAVE -00C8 ; [.1D10.001F.0008] # LATIN CAPITAL LETTER E WITH GRAVE -0045 0300 ; [.1D10.001F.0008] # LATIN CAPITAL LETTER E WITH GRAVE -0045 0340 ; [.1D10.001F.0008] # LATIN CAPITAL LETTER E WITH GRAVE -00EA 0304 ; [.1D10.0021.0002] # -00CA 0304 ; [.1D10.0021.0008] # -0065 0302 0304 ; [.1D10.0021.0002] # -0045 0302 0304 ; [.1D10.0021.0008] # -1EBF ; [.1D10.0022.0002] # LATIN SMALL LETTER E WITH CIRCUMFLEX AND ACUTE -0065 0302 0301 ; [.1D10.0022.0002] # LATIN SMALL LETTER E WITH CIRCUMFLEX AND ACUTE -0065 0302 0341 ; [.1D10.0022.0002] # LATIN SMALL LETTER E WITH CIRCUMFLEX AND ACUTE -1EBE ; [.1D10.0022.0008] # LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND ACUTE -0045 0302 0301 ; [.1D10.0022.0008] # LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND ACUTE -0045 0302 0341 ; [.1D10.0022.0008] # LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND ACUTE -00EA 0301 ; [.1D10.0022.0002] # -00EA 0341 ; [.1D10.0022.0002] # -00CA 0301 ; [.1D10.0022.0008] # -00CA 0341 ; [.1D10.0022.0008] # -00EA 030C ; [.1D10.0023.0002] # -00CA 030C ; [.1D10.0023.0008] # -0065 0302 030C ; [.1D10.0023.0002] # -0045 0302 030C ; [.1D10.0023.0008] # -1EC1 ; [.1D10.0024.0002] # LATIN SMALL LETTER E WITH CIRCUMFLEX AND GRAVE -0065 0302 0300 ; [.1D10.0024.0002] # LATIN SMALL LETTER E WITH CIRCUMFLEX AND GRAVE -0065 0302 0340 ; [.1D10.0024.0002] # LATIN SMALL LETTER E WITH CIRCUMFLEX AND GRAVE -1EC0 ; [.1D10.0024.0008] # LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND GRAVE -0045 0302 0300 ; [.1D10.0024.0008] # LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND GRAVE -0045 0302 0340 ; [.1D10.0024.0008] # LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND GRAVE -00EA 0300 ; [.1D10.0024.0002] # -00EA 0340 ; [.1D10.0024.0002] # -00CA 0300 ; [.1D10.0024.0008] # -00CA 0340 ; [.1D10.0024.0008] # -00EA ; [.1D10.0025.0002] # LATIN SMALL LETTER E WITH CIRCUMFLEX -0065 0302 ; [.1D10.0025.0002] # LATIN SMALL LETTER E WITH CIRCUMFLEX -00CA ; [.1D10.0025.0008] # LATIN CAPITAL LETTER E WITH CIRCUMFLEX -0045 0302 ; [.1D10.0025.0008] # LATIN CAPITAL LETTER E WITH CIRCUMFLEX -1EC5 ; [.1D10.0025.0002][.0000.002D.0002] # LATIN SMALL LETTER E WITH CIRCUMFLEX AND TILDE -1EC4 ; [.1D10.0025.0008][.0000.002D.0002] # LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND TILDE -1EC3 ; [.1D10.0025.0002][.0000.003B.0002] # LATIN SMALL LETTER E WITH CIRCUMFLEX AND HOOK ABOVE -1EC2 ; [.1D10.0025.0008][.0000.003B.0002] # LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND HOOK ABOVE -1EC7 ; [.1D10.0025.0002][.0000.0042.0002] # LATIN SMALL LETTER E WITH CIRCUMFLEX AND DOT BELOW -1EC6 ; [.1D10.0025.0008][.0000.0042.0002] # LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND DOT BELOW -012B ; [.1D98.001C.0002] # LATIN SMALL LETTER I WITH MACRON -0069 0304 ; [.1D98.001C.0002] # LATIN SMALL LETTER I WITH MACRON -012A ; [.1D98.001C.0008] # LATIN CAPITAL LETTER I WITH MACRON -0049 0304 ; [.1D98.001C.0008] # LATIN CAPITAL LETTER I WITH MACRON -00ED ; [.1D98.001D.0002] # LATIN SMALL LETTER I WITH ACUTE -0069 0301 ; [.1D98.001D.0002] # LATIN SMALL LETTER I WITH ACUTE -0069 0341 ; [.1D98.001D.0002] # LATIN SMALL LETTER I WITH ACUTE -00CD ; [.1D98.001D.0008] # LATIN CAPITAL LETTER I WITH ACUTE -0049 0301 ; [.1D98.001D.0008] # LATIN CAPITAL LETTER I WITH ACUTE -0049 0341 ; [.1D98.001D.0008] # LATIN CAPITAL LETTER I WITH ACUTE -01D0 ; [.1D98.001E.0002] # LATIN SMALL LETTER I WITH CARON -0069 030C ; [.1D98.001E.0002] # LATIN SMALL LETTER I WITH CARON -01CF ; [.1D98.001E.0008] # LATIN CAPITAL LETTER I WITH CARON -0049 030C ; [.1D98.001E.0008] # LATIN CAPITAL LETTER I WITH CARON -00EC ; [.1D98.001F.0002] # LATIN SMALL LETTER I WITH GRAVE -0069 0300 ; [.1D98.001F.0002] # LATIN SMALL LETTER I WITH GRAVE -0069 0340 ; [.1D98.001F.0002] # LATIN SMALL LETTER I WITH GRAVE -00CC ; [.1D98.001F.0008] # LATIN CAPITAL LETTER I WITH GRAVE -0049 0300 ; [.1D98.001F.0008] # LATIN CAPITAL LETTER I WITH GRAVE -0049 0340 ; [.1D98.001F.0008] # LATIN CAPITAL LETTER I WITH GRAVE -006D 0304 ; [.1E10.001C.0002] # -004D 0304 ; [.1E10.001C.0008] # -1E3F ; [.1E10.001D.0002] # LATIN SMALL LETTER M WITH ACUTE -006D 0301 ; [.1E10.001D.0002] # LATIN SMALL LETTER M WITH ACUTE -006D 0341 ; [.1E10.001D.0002] # LATIN SMALL LETTER M WITH ACUTE -1E3E ; [.1E10.001D.0008] # LATIN CAPITAL LETTER M WITH ACUTE -004D 0301 ; [.1E10.001D.0008] # LATIN CAPITAL LETTER M WITH ACUTE -004D 0341 ; [.1E10.001D.0008] # LATIN CAPITAL LETTER M WITH ACUTE -006D 030C ; [.1E10.001E.0002] # -004D 030C ; [.1E10.001E.0008] # -006D 0300 ; [.1E10.001F.0002] # -006D 0340 ; [.1E10.001F.0002] # -004D 0300 ; [.1E10.001F.0008] # -004D 0340 ; [.1E10.001F.0008] # -006E 0304 ; [.1E1F.001C.0002] # -004E 0304 ; [.1E1F.001C.0008] # -0144 ; [.1E1F.001D.0002] # LATIN SMALL LETTER N WITH ACUTE -006E 0301 ; [.1E1F.001D.0002] # LATIN SMALL LETTER N WITH ACUTE -006E 0341 ; [.1E1F.001D.0002] # LATIN SMALL LETTER N WITH ACUTE -0143 ; [.1E1F.001D.0008] # LATIN CAPITAL LETTER N WITH ACUTE -004E 0301 ; [.1E1F.001D.0008] # LATIN CAPITAL LETTER N WITH ACUTE -004E 0341 ; [.1E1F.001D.0008] # LATIN CAPITAL LETTER N WITH ACUTE -0148 ; [.1E1F.001E.0002] # LATIN SMALL LETTER N WITH CARON -006E 030C ; [.1E1F.001E.0002] # LATIN SMALL LETTER N WITH CARON -0147 ; [.1E1F.001E.0008] # LATIN CAPITAL LETTER N WITH CARON -004E 030C ; [.1E1F.001E.0008] # LATIN CAPITAL LETTER N WITH CARON -01F9 ; [.1E1F.001F.0002] # LATIN SMALL LETTER N WITH GRAVE -006E 0300 ; [.1E1F.001F.0002] # LATIN SMALL LETTER N WITH GRAVE -006E 0340 ; [.1E1F.001F.0002] # LATIN SMALL LETTER N WITH GRAVE -01F8 ; [.1E1F.001F.0008] # LATIN CAPITAL LETTER N WITH GRAVE -004E 0300 ; [.1E1F.001F.0008] # LATIN CAPITAL LETTER N WITH GRAVE -004E 0340 ; [.1E1F.001F.0008] # LATIN CAPITAL LETTER N WITH GRAVE -014D ; [.1E43.001C.0002] # LATIN SMALL LETTER O WITH MACRON -006F 0304 ; [.1E43.001C.0002] # LATIN SMALL LETTER O WITH MACRON -014C ; [.1E43.001C.0008] # LATIN CAPITAL LETTER O WITH MACRON -004F 0304 ; [.1E43.001C.0008] # LATIN CAPITAL LETTER O WITH MACRON -00F3 ; [.1E43.001D.0002] # LATIN SMALL LETTER O WITH ACUTE -006F 0301 ; [.1E43.001D.0002] # LATIN SMALL LETTER O WITH ACUTE -006F 0341 ; [.1E43.001D.0002] # LATIN SMALL LETTER O WITH ACUTE -00D3 ; [.1E43.001D.0008] # LATIN CAPITAL LETTER O WITH ACUTE -004F 0301 ; [.1E43.001D.0008] # LATIN CAPITAL LETTER O WITH ACUTE -004F 0341 ; [.1E43.001D.0008] # LATIN CAPITAL LETTER O WITH ACUTE -01D2 ; [.1E43.001E.0002] # LATIN SMALL LETTER O WITH CARON -006F 030C ; [.1E43.001E.0002] # LATIN SMALL LETTER O WITH CARON -01D1 ; [.1E43.001E.0008] # LATIN CAPITAL LETTER O WITH CARON -004F 030C ; [.1E43.001E.0008] # LATIN CAPITAL LETTER O WITH CARON -00F2 ; [.1E43.001F.0002] # LATIN SMALL LETTER O WITH GRAVE -006F 0300 ; [.1E43.001F.0002] # LATIN SMALL LETTER O WITH GRAVE -006F 0340 ; [.1E43.001F.0002] # LATIN SMALL LETTER O WITH GRAVE -00D2 ; [.1E43.001F.0008] # LATIN CAPITAL LETTER O WITH GRAVE -004F 0300 ; [.1E43.001F.0008] # LATIN CAPITAL LETTER O WITH GRAVE -004F 0340 ; [.1E43.001F.0008] # LATIN CAPITAL LETTER O WITH GRAVE -016B ; [.1F1B.001C.0002] # LATIN SMALL LETTER U WITH MACRON -0075 0304 ; [.1F1B.001C.0002] # LATIN SMALL LETTER U WITH MACRON -016A ; [.1F1B.001C.0008] # LATIN CAPITAL LETTER U WITH MACRON -0055 0304 ; [.1F1B.001C.0008] # LATIN CAPITAL LETTER U WITH MACRON -00FA ; [.1F1B.001D.0002] # LATIN SMALL LETTER U WITH ACUTE -0075 0301 ; [.1F1B.001D.0002] # LATIN SMALL LETTER U WITH ACUTE -0075 0341 ; [.1F1B.001D.0002] # LATIN SMALL LETTER U WITH ACUTE -00DA ; [.1F1B.001D.0008] # LATIN CAPITAL LETTER U WITH ACUTE -0055 0301 ; [.1F1B.001D.0008] # LATIN CAPITAL LETTER U WITH ACUTE -0055 0341 ; [.1F1B.001D.0008] # LATIN CAPITAL LETTER U WITH ACUTE -01D4 ; [.1F1B.001E.0002] # LATIN SMALL LETTER U WITH CARON -0075 030C ; [.1F1B.001E.0002] # LATIN SMALL LETTER U WITH CARON -01D3 ; [.1F1B.001E.0008] # LATIN CAPITAL LETTER U WITH CARON -0055 030C ; [.1F1B.001E.0008] # LATIN CAPITAL LETTER U WITH CARON -00F9 ; [.1F1B.001F.0002] # LATIN SMALL LETTER U WITH GRAVE -0075 0300 ; [.1F1B.001F.0002] # LATIN SMALL LETTER U WITH GRAVE -0075 0340 ; [.1F1B.001F.0002] # LATIN SMALL LETTER U WITH GRAVE -00D9 ; [.1F1B.001F.0008] # LATIN CAPITAL LETTER U WITH GRAVE -0055 0300 ; [.1F1B.001F.0008] # LATIN CAPITAL LETTER U WITH GRAVE -0055 0340 ; [.1F1B.001F.0008] # LATIN CAPITAL LETTER U WITH GRAVE -01D6 ; [.1F1B.0021.0002] # LATIN SMALL LETTER U WITH DIAERESIS AND MACRON -0075 0308 0304 ; [.1F1B.0021.0002] # LATIN SMALL LETTER U WITH DIAERESIS AND MACRON -01D5 ; [.1F1B.0021.0008] # LATIN CAPITAL LETTER U WITH DIAERESIS AND MACRON -0055 0308 0304 ; [.1F1B.0021.0008] # LATIN CAPITAL LETTER U WITH DIAERESIS AND MACRON -00FC 0304 ; [.1F1B.0021.0002] # -00DC 0304 ; [.1F1B.0021.0008] # -01D8 ; [.1F1B.0022.0002] # LATIN SMALL LETTER U WITH DIAERESIS AND ACUTE -0075 0308 0301 ; [.1F1B.0022.0002] # LATIN SMALL LETTER U WITH DIAERESIS AND ACUTE -0075 0308 0341 ; [.1F1B.0022.0002] # LATIN SMALL LETTER U WITH DIAERESIS AND ACUTE -01D7 ; [.1F1B.0022.0008] # LATIN CAPITAL LETTER U WITH DIAERESIS AND ACUTE -0055 0308 0301 ; [.1F1B.0022.0008] # LATIN CAPITAL LETTER U WITH DIAERESIS AND ACUTE -0055 0308 0341 ; [.1F1B.0022.0008] # LATIN CAPITAL LETTER U WITH DIAERESIS AND ACUTE -00FC 0301 ; [.1F1B.0022.0002] # -00FC 0341 ; [.1F1B.0022.0002] # -00DC 0301 ; [.1F1B.0022.0008] # -00DC 0341 ; [.1F1B.0022.0008] # -01DA ; [.1F1B.0023.0002] # LATIN SMALL LETTER U WITH DIAERESIS AND CARON -0075 0308 030C ; [.1F1B.0023.0002] # LATIN SMALL LETTER U WITH DIAERESIS AND CARON -01D9 ; [.1F1B.0023.0008] # LATIN CAPITAL LETTER U WITH DIAERESIS AND CARON -0055 0308 030C ; [.1F1B.0023.0008] # LATIN CAPITAL LETTER U WITH DIAERESIS AND CARON -00FC 030C ; [.1F1B.0023.0002] # -00DC 030C ; [.1F1B.0023.0008] # -01DC ; [.1F1B.0024.0002] # LATIN SMALL LETTER U WITH DIAERESIS AND GRAVE -0075 0308 0300 ; [.1F1B.0024.0002] # LATIN SMALL LETTER U WITH DIAERESIS AND GRAVE -0075 0308 0340 ; [.1F1B.0024.0002] # LATIN SMALL LETTER U WITH DIAERESIS AND GRAVE -01DB ; [.1F1B.0024.0008] # LATIN CAPITAL LETTER U WITH DIAERESIS AND GRAVE -0055 0308 0300 ; [.1F1B.0024.0008] # LATIN CAPITAL LETTER U WITH DIAERESIS AND GRAVE -0055 0308 0340 ; [.1F1B.0024.0008] # LATIN CAPITAL LETTER U WITH DIAERESIS AND GRAVE -00FC 0300 ; [.1F1B.0024.0002] # -00FC 0340 ; [.1F1B.0024.0002] # -00DC 0300 ; [.1F1B.0024.0008] # -00DC 0340 ; [.1F1B.0024.0008] # -00FC ; [.1F1B.0025.0002] # LATIN SMALL LETTER U WITH DIAERESIS -0075 0308 ; [.1F1B.0025.0002] # LATIN SMALL LETTER U WITH DIAERESIS -00DC ; [.1F1B.0025.0008] # LATIN CAPITAL LETTER U WITH DIAERESIS -0055 0308 ; [.1F1B.0025.0008] # LATIN CAPITAL LETTER U WITH DIAERESIS +0101 ; [.1FA2.001C.0002] # LATIN SMALL LETTER A WITH MACRON +0061 0304 ; [.1FA2.001C.0002] # LATIN SMALL LETTER A WITH MACRON +0100 ; [.1FA2.001C.0008] # LATIN CAPITAL LETTER A WITH MACRON +0041 0304 ; [.1FA2.001C.0008] # LATIN CAPITAL LETTER A WITH MACRON +00E1 ; [.1FA2.001D.0002] # LATIN SMALL LETTER A WITH ACUTE +0061 0301 ; [.1FA2.001D.0002] # LATIN SMALL LETTER A WITH ACUTE +0061 0341 ; [.1FA2.001D.0002] # LATIN SMALL LETTER A WITH ACUTE +00C1 ; [.1FA2.001D.0008] # LATIN CAPITAL LETTER A WITH ACUTE +0041 0301 ; [.1FA2.001D.0008] # LATIN CAPITAL LETTER A WITH ACUTE +0041 0341 ; [.1FA2.001D.0008] # LATIN CAPITAL LETTER A WITH ACUTE +01CE ; [.1FA2.001E.0002] # LATIN SMALL LETTER A WITH CARON +0061 030C ; [.1FA2.001E.0002] # LATIN SMALL LETTER A WITH CARON +01CD ; [.1FA2.001E.0008] # LATIN CAPITAL LETTER A WITH CARON +0041 030C ; [.1FA2.001E.0008] # LATIN CAPITAL LETTER A WITH CARON +00E0 ; [.1FA2.001F.0002] # LATIN SMALL LETTER A WITH GRAVE +0061 0300 ; [.1FA2.001F.0002] # LATIN SMALL LETTER A WITH GRAVE +0061 0340 ; [.1FA2.001F.0002] # LATIN SMALL LETTER A WITH GRAVE +00C0 ; [.1FA2.001F.0008] # LATIN CAPITAL LETTER A WITH GRAVE +0041 0300 ; [.1FA2.001F.0008] # LATIN CAPITAL LETTER A WITH GRAVE +0041 0340 ; [.1FA2.001F.0008] # LATIN CAPITAL LETTER A WITH GRAVE +0113 ; [.2007.001C.0002] # LATIN SMALL LETTER E WITH MACRON +0065 0304 ; [.2007.001C.0002] # LATIN SMALL LETTER E WITH MACRON +0112 ; [.2007.001C.0008] # LATIN CAPITAL LETTER E WITH MACRON +0045 0304 ; [.2007.001C.0008] # LATIN CAPITAL LETTER E WITH MACRON +00E9 ; [.2007.001D.0002] # LATIN SMALL LETTER E WITH ACUTE +0065 0301 ; [.2007.001D.0002] # LATIN SMALL LETTER E WITH ACUTE +0065 0341 ; [.2007.001D.0002] # LATIN SMALL LETTER E WITH ACUTE +00C9 ; [.2007.001D.0008] # LATIN CAPITAL LETTER E WITH ACUTE +0045 0301 ; [.2007.001D.0008] # LATIN CAPITAL LETTER E WITH ACUTE +0045 0341 ; [.2007.001D.0008] # LATIN CAPITAL LETTER E WITH ACUTE +011B ; [.2007.001E.0002] # LATIN SMALL LETTER E WITH CARON +0065 030C ; [.2007.001E.0002] # LATIN SMALL LETTER E WITH CARON +011A ; [.2007.001E.0008] # LATIN CAPITAL LETTER E WITH CARON +0045 030C ; [.2007.001E.0008] # LATIN CAPITAL LETTER E WITH CARON +00E8 ; [.2007.001F.0002] # LATIN SMALL LETTER E WITH GRAVE +0065 0300 ; [.2007.001F.0002] # LATIN SMALL LETTER E WITH GRAVE +0065 0340 ; [.2007.001F.0002] # LATIN SMALL LETTER E WITH GRAVE +00C8 ; [.2007.001F.0008] # LATIN CAPITAL LETTER E WITH GRAVE +0045 0300 ; [.2007.001F.0008] # LATIN CAPITAL LETTER E WITH GRAVE +0045 0340 ; [.2007.001F.0008] # LATIN CAPITAL LETTER E WITH GRAVE +00EA 0304 ; [.2007.0021.0002] # +00CA 0304 ; [.2007.0021.0008] # +0065 0302 0304 ; [.2007.0021.0002] # +0045 0302 0304 ; [.2007.0021.0008] # +1EBF ; [.2007.0022.0002] # LATIN SMALL LETTER E WITH CIRCUMFLEX AND ACUTE +0065 0302 0301 ; [.2007.0022.0002] # LATIN SMALL LETTER E WITH CIRCUMFLEX AND ACUTE +0065 0302 0341 ; [.2007.0022.0002] # LATIN SMALL LETTER E WITH CIRCUMFLEX AND ACUTE +1EBE ; [.2007.0022.0008] # LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND ACUTE +0045 0302 0301 ; [.2007.0022.0008] # LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND ACUTE +0045 0302 0341 ; [.2007.0022.0008] # LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND ACUTE +00EA 0301 ; [.2007.0022.0002] # +00EA 0341 ; [.2007.0022.0002] # +00CA 0301 ; [.2007.0022.0008] # +00CA 0341 ; [.2007.0022.0008] # +00EA 030C ; [.2007.0023.0002] # +00CA 030C ; [.2007.0023.0008] # +0065 0302 030C ; [.2007.0023.0002] # +0045 0302 030C ; [.2007.0023.0008] # +1EC1 ; [.2007.0024.0002] # LATIN SMALL LETTER E WITH CIRCUMFLEX AND GRAVE +0065 0302 0300 ; [.2007.0024.0002] # LATIN SMALL LETTER E WITH CIRCUMFLEX AND GRAVE +0065 0302 0340 ; [.2007.0024.0002] # LATIN SMALL LETTER E WITH CIRCUMFLEX AND GRAVE +1EC0 ; [.2007.0024.0008] # LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND GRAVE +0045 0302 0300 ; [.2007.0024.0008] # LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND GRAVE +0045 0302 0340 ; [.2007.0024.0008] # LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND GRAVE +00EA 0300 ; [.2007.0024.0002] # +00EA 0340 ; [.2007.0024.0002] # +00CA 0300 ; [.2007.0024.0008] # +00CA 0340 ; [.2007.0024.0008] # +00EA ; [.2007.0025.0002] # LATIN SMALL LETTER E WITH CIRCUMFLEX +0065 0302 ; [.2007.0025.0002] # LATIN SMALL LETTER E WITH CIRCUMFLEX +00CA ; [.2007.0025.0008] # LATIN CAPITAL LETTER E WITH CIRCUMFLEX +0045 0302 ; [.2007.0025.0008] # LATIN CAPITAL LETTER E WITH CIRCUMFLEX +1EC5 ; [.2007.0025.0002][.0000.002D.0002] # LATIN SMALL LETTER E WITH CIRCUMFLEX AND TILDE +1EC4 ; [.2007.0025.0008][.0000.002D.0002] # LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND TILDE +1EC3 ; [.2007.0025.0002][.0000.003B.0002] # LATIN SMALL LETTER E WITH CIRCUMFLEX AND HOOK ABOVE +1EC2 ; [.2007.0025.0008][.0000.003B.0002] # LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND HOOK ABOVE +1EC7 ; [.2007.0025.0002][.0000.0042.0002] # LATIN SMALL LETTER E WITH CIRCUMFLEX AND DOT BELOW +1EC6 ; [.2007.0025.0008][.0000.0042.0002] # LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND DOT BELOW +012B ; [.2090.001C.0002] # LATIN SMALL LETTER I WITH MACRON +0069 0304 ; [.2090.001C.0002] # LATIN SMALL LETTER I WITH MACRON +012A ; [.2090.001C.0008] # LATIN CAPITAL LETTER I WITH MACRON +0049 0304 ; [.2090.001C.0008] # LATIN CAPITAL LETTER I WITH MACRON +00ED ; [.2090.001D.0002] # LATIN SMALL LETTER I WITH ACUTE +0069 0301 ; [.2090.001D.0002] # LATIN SMALL LETTER I WITH ACUTE +0069 0341 ; [.2090.001D.0002] # LATIN SMALL LETTER I WITH ACUTE +00CD ; [.2090.001D.0008] # LATIN CAPITAL LETTER I WITH ACUTE +0049 0301 ; [.2090.001D.0008] # LATIN CAPITAL LETTER I WITH ACUTE +0049 0341 ; [.2090.001D.0008] # LATIN CAPITAL LETTER I WITH ACUTE +01D0 ; [.2090.001E.0002] # LATIN SMALL LETTER I WITH CARON +0069 030C ; [.2090.001E.0002] # LATIN SMALL LETTER I WITH CARON +01CF ; [.2090.001E.0008] # LATIN CAPITAL LETTER I WITH CARON +0049 030C ; [.2090.001E.0008] # LATIN CAPITAL LETTER I WITH CARON +00EC ; [.2090.001F.0002] # LATIN SMALL LETTER I WITH GRAVE +0069 0300 ; [.2090.001F.0002] # LATIN SMALL LETTER I WITH GRAVE +0069 0340 ; [.2090.001F.0002] # LATIN SMALL LETTER I WITH GRAVE +00CC ; [.2090.001F.0008] # LATIN CAPITAL LETTER I WITH GRAVE +0049 0300 ; [.2090.001F.0008] # LATIN CAPITAL LETTER I WITH GRAVE +0049 0340 ; [.2090.001F.0008] # LATIN CAPITAL LETTER I WITH GRAVE +006D 0304 ; [.2109.001C.0002] # +004D 0304 ; [.2109.001C.0008] # +1E3F ; [.2109.001D.0002] # LATIN SMALL LETTER M WITH ACUTE +006D 0301 ; [.2109.001D.0002] # LATIN SMALL LETTER M WITH ACUTE +006D 0341 ; [.2109.001D.0002] # LATIN SMALL LETTER M WITH ACUTE +1E3E ; [.2109.001D.0008] # LATIN CAPITAL LETTER M WITH ACUTE +004D 0301 ; [.2109.001D.0008] # LATIN CAPITAL LETTER M WITH ACUTE +004D 0341 ; [.2109.001D.0008] # LATIN CAPITAL LETTER M WITH ACUTE +006D 030C ; [.2109.001E.0002] # +004D 030C ; [.2109.001E.0008] # +006D 0300 ; [.2109.001F.0002] # +006D 0340 ; [.2109.001F.0002] # +004D 0300 ; [.2109.001F.0008] # +004D 0340 ; [.2109.001F.0008] # +006E 0304 ; [.2118.001C.0002] # +004E 0304 ; [.2118.001C.0008] # +0144 ; [.2118.001D.0002] # LATIN SMALL LETTER N WITH ACUTE +006E 0301 ; [.2118.001D.0002] # LATIN SMALL LETTER N WITH ACUTE +006E 0341 ; [.2118.001D.0002] # LATIN SMALL LETTER N WITH ACUTE +0143 ; [.2118.001D.0008] # LATIN CAPITAL LETTER N WITH ACUTE +004E 0301 ; [.2118.001D.0008] # LATIN CAPITAL LETTER N WITH ACUTE +004E 0341 ; [.2118.001D.0008] # LATIN CAPITAL LETTER N WITH ACUTE +0148 ; [.2118.001E.0002] # LATIN SMALL LETTER N WITH CARON +006E 030C ; [.2118.001E.0002] # LATIN SMALL LETTER N WITH CARON +0147 ; [.2118.001E.0008] # LATIN CAPITAL LETTER N WITH CARON +004E 030C ; [.2118.001E.0008] # LATIN CAPITAL LETTER N WITH CARON +01F9 ; [.2118.001F.0002] # LATIN SMALL LETTER N WITH GRAVE +006E 0300 ; [.2118.001F.0002] # LATIN SMALL LETTER N WITH GRAVE +006E 0340 ; [.2118.001F.0002] # LATIN SMALL LETTER N WITH GRAVE +01F8 ; [.2118.001F.0008] # LATIN CAPITAL LETTER N WITH GRAVE +004E 0300 ; [.2118.001F.0008] # LATIN CAPITAL LETTER N WITH GRAVE +004E 0340 ; [.2118.001F.0008] # LATIN CAPITAL LETTER N WITH GRAVE +014D ; [.213C.001C.0002] # LATIN SMALL LETTER O WITH MACRON +006F 0304 ; [.213C.001C.0002] # LATIN SMALL LETTER O WITH MACRON +014C ; [.213C.001C.0008] # LATIN CAPITAL LETTER O WITH MACRON +004F 0304 ; [.213C.001C.0008] # LATIN CAPITAL LETTER O WITH MACRON +00F3 ; [.213C.001D.0002] # LATIN SMALL LETTER O WITH ACUTE +006F 0301 ; [.213C.001D.0002] # LATIN SMALL LETTER O WITH ACUTE +006F 0341 ; [.213C.001D.0002] # LATIN SMALL LETTER O WITH ACUTE +00D3 ; [.213C.001D.0008] # LATIN CAPITAL LETTER O WITH ACUTE +004F 0301 ; [.213C.001D.0008] # LATIN CAPITAL LETTER O WITH ACUTE +004F 0341 ; [.213C.001D.0008] # LATIN CAPITAL LETTER O WITH ACUTE +01D2 ; [.213C.001E.0002] # LATIN SMALL LETTER O WITH CARON +006F 030C ; [.213C.001E.0002] # LATIN SMALL LETTER O WITH CARON +01D1 ; [.213C.001E.0008] # LATIN CAPITAL LETTER O WITH CARON +004F 030C ; [.213C.001E.0008] # LATIN CAPITAL LETTER O WITH CARON +00F2 ; [.213C.001F.0002] # LATIN SMALL LETTER O WITH GRAVE +006F 0300 ; [.213C.001F.0002] # LATIN SMALL LETTER O WITH GRAVE +006F 0340 ; [.213C.001F.0002] # LATIN SMALL LETTER O WITH GRAVE +00D2 ; [.213C.001F.0008] # LATIN CAPITAL LETTER O WITH GRAVE +004F 0300 ; [.213C.001F.0008] # LATIN CAPITAL LETTER O WITH GRAVE +004F 0340 ; [.213C.001F.0008] # LATIN CAPITAL LETTER O WITH GRAVE +016B ; [.2217.001C.0002] # LATIN SMALL LETTER U WITH MACRON +0075 0304 ; [.2217.001C.0002] # LATIN SMALL LETTER U WITH MACRON +016A ; [.2217.001C.0008] # LATIN CAPITAL LETTER U WITH MACRON +0055 0304 ; [.2217.001C.0008] # LATIN CAPITAL LETTER U WITH MACRON +00FA ; [.2217.001D.0002] # LATIN SMALL LETTER U WITH ACUTE +0075 0301 ; [.2217.001D.0002] # LATIN SMALL LETTER U WITH ACUTE +0075 0341 ; [.2217.001D.0002] # LATIN SMALL LETTER U WITH ACUTE +00DA ; [.2217.001D.0008] # LATIN CAPITAL LETTER U WITH ACUTE +0055 0301 ; [.2217.001D.0008] # LATIN CAPITAL LETTER U WITH ACUTE +0055 0341 ; [.2217.001D.0008] # LATIN CAPITAL LETTER U WITH ACUTE +01D4 ; [.2217.001E.0002] # LATIN SMALL LETTER U WITH CARON +0075 030C ; [.2217.001E.0002] # LATIN SMALL LETTER U WITH CARON +01D3 ; [.2217.001E.0008] # LATIN CAPITAL LETTER U WITH CARON +0055 030C ; [.2217.001E.0008] # LATIN CAPITAL LETTER U WITH CARON +00F9 ; [.2217.001F.0002] # LATIN SMALL LETTER U WITH GRAVE +0075 0300 ; [.2217.001F.0002] # LATIN SMALL LETTER U WITH GRAVE +0075 0340 ; [.2217.001F.0002] # LATIN SMALL LETTER U WITH GRAVE +00D9 ; [.2217.001F.0008] # LATIN CAPITAL LETTER U WITH GRAVE +0055 0300 ; [.2217.001F.0008] # LATIN CAPITAL LETTER U WITH GRAVE +0055 0340 ; [.2217.001F.0008] # LATIN CAPITAL LETTER U WITH GRAVE +01D6 ; [.2217.0021.0002] # LATIN SMALL LETTER U WITH DIAERESIS AND MACRON +0075 0308 0304 ; [.2217.0021.0002] # LATIN SMALL LETTER U WITH DIAERESIS AND MACRON +01D5 ; [.2217.0021.0008] # LATIN CAPITAL LETTER U WITH DIAERESIS AND MACRON +0055 0308 0304 ; [.2217.0021.0008] # LATIN CAPITAL LETTER U WITH DIAERESIS AND MACRON +00FC 0304 ; [.2217.0021.0002] # +00DC 0304 ; [.2217.0021.0008] # +01D8 ; [.2217.0022.0002] # LATIN SMALL LETTER U WITH DIAERESIS AND ACUTE +0075 0308 0301 ; [.2217.0022.0002] # LATIN SMALL LETTER U WITH DIAERESIS AND ACUTE +0075 0308 0341 ; [.2217.0022.0002] # LATIN SMALL LETTER U WITH DIAERESIS AND ACUTE +01D7 ; [.2217.0022.0008] # LATIN CAPITAL LETTER U WITH DIAERESIS AND ACUTE +0055 0308 0301 ; [.2217.0022.0008] # LATIN CAPITAL LETTER U WITH DIAERESIS AND ACUTE +0055 0308 0341 ; [.2217.0022.0008] # LATIN CAPITAL LETTER U WITH DIAERESIS AND ACUTE +00FC 0301 ; [.2217.0022.0002] # +00FC 0341 ; [.2217.0022.0002] # +00DC 0301 ; [.2217.0022.0008] # +00DC 0341 ; [.2217.0022.0008] # +01DA ; [.2217.0023.0002] # LATIN SMALL LETTER U WITH DIAERESIS AND CARON +0075 0308 030C ; [.2217.0023.0002] # LATIN SMALL LETTER U WITH DIAERESIS AND CARON +01D9 ; [.2217.0023.0008] # LATIN CAPITAL LETTER U WITH DIAERESIS AND CARON +0055 0308 030C ; [.2217.0023.0008] # LATIN CAPITAL LETTER U WITH DIAERESIS AND CARON +00FC 030C ; [.2217.0023.0002] # +00DC 030C ; [.2217.0023.0008] # +01DC ; [.2217.0024.0002] # LATIN SMALL LETTER U WITH DIAERESIS AND GRAVE +0075 0308 0300 ; [.2217.0024.0002] # LATIN SMALL LETTER U WITH DIAERESIS AND GRAVE +0075 0308 0340 ; [.2217.0024.0002] # LATIN SMALL LETTER U WITH DIAERESIS AND GRAVE +01DB ; [.2217.0024.0008] # LATIN CAPITAL LETTER U WITH DIAERESIS AND GRAVE +0055 0308 0300 ; [.2217.0024.0008] # LATIN CAPITAL LETTER U WITH DIAERESIS AND GRAVE +0055 0308 0340 ; [.2217.0024.0008] # LATIN CAPITAL LETTER U WITH DIAERESIS AND GRAVE +00FC 0300 ; [.2217.0024.0002] # +00FC 0340 ; [.2217.0024.0002] # +00DC 0300 ; [.2217.0024.0008] # +00DC 0340 ; [.2217.0024.0008] # +00FC ; [.2217.0025.0002] # LATIN SMALL LETTER U WITH DIAERESIS +0075 0308 ; [.2217.0025.0002] # LATIN SMALL LETTER U WITH DIAERESIS +00DC ; [.2217.0025.0008] # LATIN CAPITAL LETTER U WITH DIAERESIS +0055 0308 ; [.2217.0025.0008] # LATIN CAPITAL LETTER U WITH DIAERESIS FDD0 3105 ; [.8000.0020.0002] # 2E8A ; [.80B5.0020.0002] # CJK RADICAL DIVINATION FDD0 3106 ; [.83B1.0020.0002] # @@ -276,119 +276,119 @@ FDD0 3128 ; [.D16F.0020.0002] # FDD0 3129 ; [.D403.0020.0002] # 2ED7 ; [.D47E.0020.0002] # CJK RADICAL RAIN 2E9D ; [.D53B.0020.0002] # CJK RADICAL MOON -3220 ; [*0318.0020.0004][.CBDC.0020.0004][*0319.0020.0004] # PARENTHESIZED IDEOGRAPH ONE -3226 ; [*0318.0020.0004][.AD39.0020.0004][*0319.0020.0004] # PARENTHESIZED IDEOGRAPH SEVEN -3222 ; [*0318.0020.0004][.C8DF.0020.0004][*0319.0020.0004] # PARENTHESIZED IDEOGRAPH THREE -3228 ; [*0318.0020.0004][.A95D.0020.0004][*0319.0020.0004] # PARENTHESIZED IDEOGRAPH NINE -3221 ; [*0318.0020.0004][.CBCD.0020.0004][*0319.0020.0004] # PARENTHESIZED IDEOGRAPH TWO -3224 ; [*0318.0020.0004][.D1A9.0020.0004][*0319.0020.0004] # PARENTHESIZED IDEOGRAPH FIVE -3239 ; [*0318.0020.0004][.8C57.0020.0004][*0319.0020.0004] # PARENTHESIZED IDEOGRAPH REPRESENT -323D ; [*0318.0020.0004][.ADC1.0020.0004][*0319.0020.0004] # PARENTHESIZED IDEOGRAPH ENTERPRISE -3241 ; [*0318.0020.0004][.B3A8.0020.0004][*0319.0020.0004] # PARENTHESIZED IDEOGRAPH REST -3227 ; [*0318.0020.0004][.8001.0020.0004][*0319.0020.0004] # PARENTHESIZED IDEOGRAPH EIGHT -3225 ; [*0318.0020.0004][.9953.0020.0004][*0319.0020.0004] # PARENTHESIZED IDEOGRAPH SIX -3238 ; [*0318.0020.0004][.969E.0020.0004][*0319.0020.0004] # PARENTHESIZED IDEOGRAPH LABOR -3229 ; [*0318.0020.0004][.BF85.0020.0004][*0319.0020.0004] # PARENTHESIZED IDEOGRAPH TEN -323F ; [*0318.0020.0004][.B2BC.0020.0004][*0319.0020.0004] # PARENTHESIZED IDEOGRAPH ALLIANCE -3234 ; [*0318.0020.0004][.892A.0020.0004][*0319.0020.0004] # PARENTHESIZED IDEOGRAPH NAME -323A ; [*0318.0020.0004][.A3B5.0020.0004][*0319.0020.0004] # PARENTHESIZED IDEOGRAPH CALL -3223 ; [*0318.0020.0004][.C82E.0020.0004][*0319.0020.0004] # PARENTHESIZED IDEOGRAPH FOUR -322F ; [*0318.0020.0004][.92EA.0020.0004][*0319.0020.0004] # PARENTHESIZED IDEOGRAPH EARTH -323B ; [*0318.0020.0004][.B5F0.0020.0004][*0319.0020.0004] # PARENTHESIZED IDEOGRAPH STUDY -3230 ; [*0318.0020.0004][.C2A4.0020.0004][*0319.0020.0004] # PARENTHESIZED IDEOGRAPH SUN -322A ; [*0318.0020.0004][.D53C.0020.0004][*0319.0020.0004] # PARENTHESIZED IDEOGRAPH MOON -3232 ; [*0318.0020.0004][.CEC7.0020.0004][*0319.0020.0004] # PARENTHESIZED IDEOGRAPH HAVE -322D ; [*0318.0020.0004][.895F.0020.0004][*0319.0020.0004] # PARENTHESIZED IDEOGRAPH WOOD -3231 ; [*0318.0020.0004][.BA36.0020.0004][*0319.0020.0004] # PARENTHESIZED IDEOGRAPH STOCK -322C ; [*0318.0020.0004][.C26E.0020.0004][*0319.0020.0004] # PARENTHESIZED IDEOGRAPH WATER -322B ; [*0318.0020.0004][.A48C.0020.0004][*0319.0020.0004] # PARENTHESIZED IDEOGRAPH FIRE -3235 ; [*0318.0020.0004][.9060.0020.0004][*0319.0020.0004] # PARENTHESIZED IDEOGRAPH SPECIAL -323C ; [*0318.0020.0004][.A9B3.0020.0004][*0319.0020.0004] # PARENTHESIZED IDEOGRAPH SUPERVISE -3233 ; [*0318.0020.0004][.C05E.0020.0004][*0319.0020.0004] # PARENTHESIZED IDEOGRAPH SOCIETY -3237 ; [*0318.0020.0004][.BA90.0020.0004][*0319.0020.0004] # PARENTHESIZED IDEOGRAPH CONGRATULATION -3240 ; [*0318.0020.0004][.A78C.0020.0004][*0319.0020.0004] # PARENTHESIZED IDEOGRAPH FESTIVAL -3242 ; [*0318.0020.0004][.C457.0020.0004][*0319.0020.0004] # PARENTHESIZED IDEOGRAPH SELF -3243 ; [*0318.0020.0004][.B766.0020.0004][*0319.0020.0004] # PARENTHESIZED IDEOGRAPH REACH -3236 ; [*0318.0020.0004][.C69F.0020.0004][*0319.0020.0004] # PARENTHESIZED IDEOGRAPH FINANCIAL -323E ; [*0318.0020.0004][.C421.0020.0004][*0319.0020.0004] # PARENTHESIZED IDEOGRAPH RESOURCE -322E ; [*0318.0020.0004][.AA72.0020.0004][*0319.0020.0004] # PARENTHESIZED IDEOGRAPH METAL -3358 ; [.1CA3.0020.0004][.8E99.0020.0004] # IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR ZERO -33E9 ; [.1CA4.0020.0004][.1CA3.0020.0004][.C2A4.0020.0004] # IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY TEN -32C9 ; [.1CA4.0020.0004][.1CA3.0020.0004][.D53C.0020.0004] # IDEOGRAPHIC TELEGRAPH SYMBOL FOR OCTOBER -3362 ; [.1CA4.0020.0004][.1CA3.0020.0004][.8E99.0020.0004] # IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR TEN -33EA ; [.1CA4.0020.0004][.1CA4.0020.0004][.C2A4.0020.0004] # IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY ELEVEN -32CA ; [.1CA4.0020.0004][.1CA4.0020.0004][.D53C.0020.0004] # IDEOGRAPHIC TELEGRAPH SYMBOL FOR NOVEMBER -3363 ; [.1CA4.0020.0004][.1CA4.0020.0004][.8E99.0020.0004] # IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR ELEVEN -33EB ; [.1CA4.0020.0004][.1CA5.0020.0004][.C2A4.0020.0004] # IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY TWELVE -32CB ; [.1CA4.0020.0004][.1CA5.0020.0004][.D53C.0020.0004] # IDEOGRAPHIC TELEGRAPH SYMBOL FOR DECEMBER -3364 ; [.1CA4.0020.0004][.1CA5.0020.0004][.8E99.0020.0004] # IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR TWELVE -33EC ; [.1CA4.0020.0004][.1CA6.0020.0004][.C2A4.0020.0004] # IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY THIRTEEN -3365 ; [.1CA4.0020.0004][.1CA6.0020.0004][.8E99.0020.0004] # IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR THIRTEEN -33ED ; [.1CA4.0020.0004][.1CA7.0020.0004][.C2A4.0020.0004] # IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY FOURTEEN -3366 ; [.1CA4.0020.0004][.1CA7.0020.0004][.8E99.0020.0004] # IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR FOURTEEN -33EE ; [.1CA4.0020.0004][.1CA8.0020.0004][.C2A4.0020.0004] # IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY FIFTEEN -3367 ; [.1CA4.0020.0004][.1CA8.0020.0004][.8E99.0020.0004] # IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR FIFTEEN -33EF ; [.1CA4.0020.0004][.1CA9.0020.0004][.C2A4.0020.0004] # IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY SIXTEEN -3368 ; [.1CA4.0020.0004][.1CA9.0020.0004][.8E99.0020.0004] # IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR SIXTEEN -33F0 ; [.1CA4.0020.0004][.1CAA.0020.0004][.C2A4.0020.0004] # IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY SEVENTEEN -3369 ; [.1CA4.0020.0004][.1CAA.0020.0004][.8E99.0020.0004] # IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR SEVENTEEN -33F1 ; [.1CA4.0020.0004][.1CAB.0020.0004][.C2A4.0020.0004] # IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY EIGHTEEN -336A ; [.1CA4.0020.0004][.1CAB.0020.0004][.8E99.0020.0004] # IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR EIGHTEEN -33F2 ; [.1CA4.0020.0004][.1CAC.0020.0004][.C2A4.0020.0004] # IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY NINETEEN -336B ; [.1CA4.0020.0004][.1CAC.0020.0004][.8E99.0020.0004] # IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR NINETEEN -33E0 ; [.1CA4.0020.0004][.C2A4.0020.0004] # IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY ONE -32C0 ; [.1CA4.0020.0004][.D53C.0020.0004] # IDEOGRAPHIC TELEGRAPH SYMBOL FOR JANUARY -3359 ; [.1CA4.0020.0004][.8E99.0020.0004] # IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR ONE -33F3 ; [.1CA5.0020.0004][.1CA3.0020.0004][.C2A4.0020.0004] # IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY TWENTY -336C ; [.1CA5.0020.0004][.1CA3.0020.0004][.8E99.0020.0004] # IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR TWENTY -33F4 ; [.1CA5.0020.0004][.1CA4.0020.0004][.C2A4.0020.0004] # IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY TWENTY-ONE -336D ; [.1CA5.0020.0004][.1CA4.0020.0004][.8E99.0020.0004] # IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR TWENTY-ONE -33F5 ; [.1CA5.0020.0004][.1CA5.0020.0004][.C2A4.0020.0004] # IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY TWENTY-TWO -336E ; [.1CA5.0020.0004][.1CA5.0020.0004][.8E99.0020.0004] # IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR TWENTY-TWO -33F6 ; [.1CA5.0020.0004][.1CA6.0020.0004][.C2A4.0020.0004] # IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY TWENTY-THREE -336F ; [.1CA5.0020.0004][.1CA6.0020.0004][.8E99.0020.0004] # IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR TWENTY-THREE -33F7 ; [.1CA5.0020.0004][.1CA7.0020.0004][.C2A4.0020.0004] # IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY TWENTY-FOUR -3370 ; [.1CA5.0020.0004][.1CA7.0020.0004][.8E99.0020.0004] # IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR TWENTY-FOUR -33F8 ; [.1CA5.0020.0004][.1CA8.0020.0004][.C2A4.0020.0004] # IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY TWENTY-FIVE -33F9 ; [.1CA5.0020.0004][.1CA9.0020.0004][.C2A4.0020.0004] # IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY TWENTY-SIX -33FA ; [.1CA5.0020.0004][.1CAA.0020.0004][.C2A4.0020.0004] # IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY TWENTY-SEVEN -33FB ; [.1CA5.0020.0004][.1CAB.0020.0004][.C2A4.0020.0004] # IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY TWENTY-EIGHT -33FC ; [.1CA5.0020.0004][.1CAC.0020.0004][.C2A4.0020.0004] # IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY TWENTY-NINE -33E1 ; [.1CA5.0020.0004][.C2A4.0020.0004] # IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY TWO -32C1 ; [.1CA5.0020.0004][.D53C.0020.0004] # IDEOGRAPHIC TELEGRAPH SYMBOL FOR FEBRUARY -335A ; [.1CA5.0020.0004][.8E99.0020.0004] # IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR TWO -33FD ; [.1CA6.0020.0004][.1CA3.0020.0004][.C2A4.0020.0004] # IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY THIRTY -33FE ; [.1CA6.0020.0004][.1CA4.0020.0004][.C2A4.0020.0004] # IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY THIRTY-ONE -33E2 ; [.1CA6.0020.0004][.C2A4.0020.0004] # IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY THREE -32C2 ; [.1CA6.0020.0004][.D53C.0020.0004] # IDEOGRAPHIC TELEGRAPH SYMBOL FOR MARCH -335B ; [.1CA6.0020.0004][.8E99.0020.0004] # IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR THREE -33E3 ; [.1CA7.0020.0004][.C2A4.0020.0004] # IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY FOUR -32C3 ; [.1CA7.0020.0004][.D53C.0020.0004] # IDEOGRAPHIC TELEGRAPH SYMBOL FOR APRIL -335C ; [.1CA7.0020.0004][.8E99.0020.0004] # IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR FOUR -33E4 ; [.1CA8.0020.0004][.C2A4.0020.0004] # IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY FIVE -32C4 ; [.1CA8.0020.0004][.D53C.0020.0004] # IDEOGRAPHIC TELEGRAPH SYMBOL FOR MAY -335D ; [.1CA8.0020.0004][.8E99.0020.0004] # IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR FIVE -33E5 ; [.1CA9.0020.0004][.C2A4.0020.0004] # IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY SIX -32C5 ; [.1CA9.0020.0004][.D53C.0020.0004] # IDEOGRAPHIC TELEGRAPH SYMBOL FOR JUNE -335E ; [.1CA9.0020.0004][.8E99.0020.0004] # IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR SIX -33E6 ; [.1CAA.0020.0004][.C2A4.0020.0004] # IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY SEVEN -32C6 ; [.1CAA.0020.0004][.D53C.0020.0004] # IDEOGRAPHIC TELEGRAPH SYMBOL FOR JULY -335F ; [.1CAA.0020.0004][.8E99.0020.0004] # IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR SEVEN -33E7 ; [.1CAB.0020.0004][.C2A4.0020.0004] # IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY EIGHT -32C7 ; [.1CAB.0020.0004][.D53C.0020.0004] # IDEOGRAPHIC TELEGRAPH SYMBOL FOR AUGUST -3360 ; [.1CAB.0020.0004][.8E99.0020.0004] # IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR EIGHT -33E8 ; [.1CAC.0020.0004][.C2A4.0020.0004] # IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY NINE -32C8 ; [.1CAC.0020.0004][.D53C.0020.0004] # IDEOGRAPHIC TELEGRAPH SYMBOL FOR SEPTEMBER -3361 ; [.1CAC.0020.0004][.8E99.0020.0004] # IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR NINE -1F241 ; [*037A.0020.0004][.C8DF.0020.0004][*037B.0020.0004] # TORTOISE SHELL BRACKETED CJK UNIFIED IDEOGRAPH-4E09 -1F242 ; [*037A.0020.0004][.CBCD.0020.0004][*037B.0020.0004] # TORTOISE SHELL BRACKETED CJK UNIFIED IDEOGRAPH-4E8C -1F247 ; [*037A.0020.0004][.C1CC.0020.0004][*037B.0020.0004] # TORTOISE SHELL BRACKETED CJK UNIFIED IDEOGRAPH-52DD -1F243 ; [*037A.0020.0004][.CB52.0020.0004][*037B.0020.0004] # TORTOISE SHELL BRACKETED CJK UNIFIED IDEOGRAPH-5B89 -1F245 ; [*037A.0020.0004][.8C38.0020.0004][*037B.0020.0004] # TORTOISE SHELL BRACKETED CJK UNIFIED IDEOGRAPH-6253 -1F248 ; [*037A.0020.0004][.80CD.0020.0004][*037B.0020.0004] # TORTOISE SHELL BRACKETED CJK UNIFIED IDEOGRAPH-6557 -1F240 ; [*037A.0020.0004][.819A.0020.0004][*037B.0020.0004] # TORTOISE SHELL BRACKETED CJK UNIFIED IDEOGRAPH-672C -1F244 ; [*037A.0020.0004][.8E99.0020.0004][*037B.0020.0004] # TORTOISE SHELL BRACKETED CJK UNIFIED IDEOGRAPH-70B9 -1F246 ; [*037A.0020.0004][.8CA9.0020.0004][*037B.0020.0004] # TORTOISE SHELL BRACKETED CJK UNIFIED IDEOGRAPH-76D7 +3220 ; [*0328.0020.0004][.CBDC.0020.0004][*0329.0020.0004] # PARENTHESIZED IDEOGRAPH ONE +3226 ; [*0328.0020.0004][.AD39.0020.0004][*0329.0020.0004] # PARENTHESIZED IDEOGRAPH SEVEN +3222 ; [*0328.0020.0004][.C8DF.0020.0004][*0329.0020.0004] # PARENTHESIZED IDEOGRAPH THREE +3228 ; [*0328.0020.0004][.A95D.0020.0004][*0329.0020.0004] # PARENTHESIZED IDEOGRAPH NINE +3221 ; [*0328.0020.0004][.CBCD.0020.0004][*0329.0020.0004] # PARENTHESIZED IDEOGRAPH TWO +3224 ; [*0328.0020.0004][.D1A9.0020.0004][*0329.0020.0004] # PARENTHESIZED IDEOGRAPH FIVE +3239 ; [*0328.0020.0004][.8C57.0020.0004][*0329.0020.0004] # PARENTHESIZED IDEOGRAPH REPRESENT +323D ; [*0328.0020.0004][.ADC1.0020.0004][*0329.0020.0004] # PARENTHESIZED IDEOGRAPH ENTERPRISE +3241 ; [*0328.0020.0004][.B3A8.0020.0004][*0329.0020.0004] # PARENTHESIZED IDEOGRAPH REST +3227 ; [*0328.0020.0004][.8001.0020.0004][*0329.0020.0004] # PARENTHESIZED IDEOGRAPH EIGHT +3225 ; [*0328.0020.0004][.9953.0020.0004][*0329.0020.0004] # PARENTHESIZED IDEOGRAPH SIX +3238 ; [*0328.0020.0004][.969E.0020.0004][*0329.0020.0004] # PARENTHESIZED IDEOGRAPH LABOR +3229 ; [*0328.0020.0004][.BF85.0020.0004][*0329.0020.0004] # PARENTHESIZED IDEOGRAPH TEN +323F ; [*0328.0020.0004][.B2BC.0020.0004][*0329.0020.0004] # PARENTHESIZED IDEOGRAPH ALLIANCE +3234 ; [*0328.0020.0004][.892A.0020.0004][*0329.0020.0004] # PARENTHESIZED IDEOGRAPH NAME +323A ; [*0328.0020.0004][.A3B5.0020.0004][*0329.0020.0004] # PARENTHESIZED IDEOGRAPH CALL +3223 ; [*0328.0020.0004][.C82E.0020.0004][*0329.0020.0004] # PARENTHESIZED IDEOGRAPH FOUR +322F ; [*0328.0020.0004][.92EA.0020.0004][*0329.0020.0004] # PARENTHESIZED IDEOGRAPH EARTH +323B ; [*0328.0020.0004][.B5F0.0020.0004][*0329.0020.0004] # PARENTHESIZED IDEOGRAPH STUDY +3230 ; [*0328.0020.0004][.C2A4.0020.0004][*0329.0020.0004] # PARENTHESIZED IDEOGRAPH SUN +322A ; [*0328.0020.0004][.D53C.0020.0004][*0329.0020.0004] # PARENTHESIZED IDEOGRAPH MOON +3232 ; [*0328.0020.0004][.CEC7.0020.0004][*0329.0020.0004] # PARENTHESIZED IDEOGRAPH HAVE +322D ; [*0328.0020.0004][.895F.0020.0004][*0329.0020.0004] # PARENTHESIZED IDEOGRAPH WOOD +3231 ; [*0328.0020.0004][.BA36.0020.0004][*0329.0020.0004] # PARENTHESIZED IDEOGRAPH STOCK +322C ; [*0328.0020.0004][.C26E.0020.0004][*0329.0020.0004] # PARENTHESIZED IDEOGRAPH WATER +322B ; [*0328.0020.0004][.A48C.0020.0004][*0329.0020.0004] # PARENTHESIZED IDEOGRAPH FIRE +3235 ; [*0328.0020.0004][.9060.0020.0004][*0329.0020.0004] # PARENTHESIZED IDEOGRAPH SPECIAL +323C ; [*0328.0020.0004][.A9B3.0020.0004][*0329.0020.0004] # PARENTHESIZED IDEOGRAPH SUPERVISE +3233 ; [*0328.0020.0004][.C05E.0020.0004][*0329.0020.0004] # PARENTHESIZED IDEOGRAPH SOCIETY +3237 ; [*0328.0020.0004][.BA90.0020.0004][*0329.0020.0004] # PARENTHESIZED IDEOGRAPH CONGRATULATION +3240 ; [*0328.0020.0004][.A78C.0020.0004][*0329.0020.0004] # PARENTHESIZED IDEOGRAPH FESTIVAL +3242 ; [*0328.0020.0004][.C457.0020.0004][*0329.0020.0004] # PARENTHESIZED IDEOGRAPH SELF +3243 ; [*0328.0020.0004][.B766.0020.0004][*0329.0020.0004] # PARENTHESIZED IDEOGRAPH REACH +3236 ; [*0328.0020.0004][.C69F.0020.0004][*0329.0020.0004] # PARENTHESIZED IDEOGRAPH FINANCIAL +323E ; [*0328.0020.0004][.C421.0020.0004][*0329.0020.0004] # PARENTHESIZED IDEOGRAPH RESOURCE +322E ; [*0328.0020.0004][.AA72.0020.0004][*0329.0020.0004] # PARENTHESIZED IDEOGRAPH METAL +3358 ; [.1F98.0020.0004][.8E99.0020.0004] # IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR ZERO +33E9 ; [.1F99.0020.0004][.1F98.0020.0004][.C2A4.0020.0004] # IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY TEN +32C9 ; [.1F99.0020.0004][.1F98.0020.0004][.D53C.0020.0004] # IDEOGRAPHIC TELEGRAPH SYMBOL FOR OCTOBER +3362 ; [.1F99.0020.0004][.1F98.0020.0004][.8E99.0020.0004] # IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR TEN +33EA ; [.1F99.0020.0004][.1F99.0020.0004][.C2A4.0020.0004] # IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY ELEVEN +32CA ; [.1F99.0020.0004][.1F99.0020.0004][.D53C.0020.0004] # IDEOGRAPHIC TELEGRAPH SYMBOL FOR NOVEMBER +3363 ; [.1F99.0020.0004][.1F99.0020.0004][.8E99.0020.0004] # IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR ELEVEN +33EB ; [.1F99.0020.0004][.1F9A.0020.0004][.C2A4.0020.0004] # IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY TWELVE +32CB ; [.1F99.0020.0004][.1F9A.0020.0004][.D53C.0020.0004] # IDEOGRAPHIC TELEGRAPH SYMBOL FOR DECEMBER +3364 ; [.1F99.0020.0004][.1F9A.0020.0004][.8E99.0020.0004] # IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR TWELVE +33EC ; [.1F99.0020.0004][.1F9B.0020.0004][.C2A4.0020.0004] # IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY THIRTEEN +3365 ; [.1F99.0020.0004][.1F9B.0020.0004][.8E99.0020.0004] # IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR THIRTEEN +33ED ; [.1F99.0020.0004][.1F9C.0020.0004][.C2A4.0020.0004] # IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY FOURTEEN +3366 ; [.1F99.0020.0004][.1F9C.0020.0004][.8E99.0020.0004] # IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR FOURTEEN +33EE ; [.1F99.0020.0004][.1F9D.0020.0004][.C2A4.0020.0004] # IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY FIFTEEN +3367 ; [.1F99.0020.0004][.1F9D.0020.0004][.8E99.0020.0004] # IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR FIFTEEN +33EF ; [.1F99.0020.0004][.1F9E.0020.0004][.C2A4.0020.0004] # IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY SIXTEEN +3368 ; [.1F99.0020.0004][.1F9E.0020.0004][.8E99.0020.0004] # IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR SIXTEEN +33F0 ; [.1F99.0020.0004][.1F9F.0020.0004][.C2A4.0020.0004] # IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY SEVENTEEN +3369 ; [.1F99.0020.0004][.1F9F.0020.0004][.8E99.0020.0004] # IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR SEVENTEEN +33F1 ; [.1F99.0020.0004][.1FA0.0020.0004][.C2A4.0020.0004] # IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY EIGHTEEN +336A ; [.1F99.0020.0004][.1FA0.0020.0004][.8E99.0020.0004] # IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR EIGHTEEN +33F2 ; [.1F99.0020.0004][.1FA1.0020.0004][.C2A4.0020.0004] # IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY NINETEEN +336B ; [.1F99.0020.0004][.1FA1.0020.0004][.8E99.0020.0004] # IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR NINETEEN +33E0 ; [.1F99.0020.0004][.C2A4.0020.0004] # IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY ONE +32C0 ; [.1F99.0020.0004][.D53C.0020.0004] # IDEOGRAPHIC TELEGRAPH SYMBOL FOR JANUARY +3359 ; [.1F99.0020.0004][.8E99.0020.0004] # IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR ONE +33F3 ; [.1F9A.0020.0004][.1F98.0020.0004][.C2A4.0020.0004] # IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY TWENTY +336C ; [.1F9A.0020.0004][.1F98.0020.0004][.8E99.0020.0004] # IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR TWENTY +33F4 ; [.1F9A.0020.0004][.1F99.0020.0004][.C2A4.0020.0004] # IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY TWENTY-ONE +336D ; [.1F9A.0020.0004][.1F99.0020.0004][.8E99.0020.0004] # IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR TWENTY-ONE +33F5 ; [.1F9A.0020.0004][.1F9A.0020.0004][.C2A4.0020.0004] # IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY TWENTY-TWO +336E ; [.1F9A.0020.0004][.1F9A.0020.0004][.8E99.0020.0004] # IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR TWENTY-TWO +33F6 ; [.1F9A.0020.0004][.1F9B.0020.0004][.C2A4.0020.0004] # IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY TWENTY-THREE +336F ; [.1F9A.0020.0004][.1F9B.0020.0004][.8E99.0020.0004] # IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR TWENTY-THREE +33F7 ; [.1F9A.0020.0004][.1F9C.0020.0004][.C2A4.0020.0004] # IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY TWENTY-FOUR +3370 ; [.1F9A.0020.0004][.1F9C.0020.0004][.8E99.0020.0004] # IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR TWENTY-FOUR +33F8 ; [.1F9A.0020.0004][.1F9D.0020.0004][.C2A4.0020.0004] # IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY TWENTY-FIVE +33F9 ; [.1F9A.0020.0004][.1F9E.0020.0004][.C2A4.0020.0004] # IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY TWENTY-SIX +33FA ; [.1F9A.0020.0004][.1F9F.0020.0004][.C2A4.0020.0004] # IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY TWENTY-SEVEN +33FB ; [.1F9A.0020.0004][.1FA0.0020.0004][.C2A4.0020.0004] # IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY TWENTY-EIGHT +33FC ; [.1F9A.0020.0004][.1FA1.0020.0004][.C2A4.0020.0004] # IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY TWENTY-NINE +33E1 ; [.1F9A.0020.0004][.C2A4.0020.0004] # IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY TWO +32C1 ; [.1F9A.0020.0004][.D53C.0020.0004] # IDEOGRAPHIC TELEGRAPH SYMBOL FOR FEBRUARY +335A ; [.1F9A.0020.0004][.8E99.0020.0004] # IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR TWO +33FD ; [.1F9B.0020.0004][.1F98.0020.0004][.C2A4.0020.0004] # IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY THIRTY +33FE ; [.1F9B.0020.0004][.1F99.0020.0004][.C2A4.0020.0004] # IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY THIRTY-ONE +33E2 ; [.1F9B.0020.0004][.C2A4.0020.0004] # IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY THREE +32C2 ; [.1F9B.0020.0004][.D53C.0020.0004] # IDEOGRAPHIC TELEGRAPH SYMBOL FOR MARCH +335B ; [.1F9B.0020.0004][.8E99.0020.0004] # IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR THREE +33E3 ; [.1F9C.0020.0004][.C2A4.0020.0004] # IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY FOUR +32C3 ; [.1F9C.0020.0004][.D53C.0020.0004] # IDEOGRAPHIC TELEGRAPH SYMBOL FOR APRIL +335C ; [.1F9C.0020.0004][.8E99.0020.0004] # IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR FOUR +33E4 ; [.1F9D.0020.0004][.C2A4.0020.0004] # IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY FIVE +32C4 ; [.1F9D.0020.0004][.D53C.0020.0004] # IDEOGRAPHIC TELEGRAPH SYMBOL FOR MAY +335D ; [.1F9D.0020.0004][.8E99.0020.0004] # IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR FIVE +33E5 ; [.1F9E.0020.0004][.C2A4.0020.0004] # IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY SIX +32C5 ; [.1F9E.0020.0004][.D53C.0020.0004] # IDEOGRAPHIC TELEGRAPH SYMBOL FOR JUNE +335E ; [.1F9E.0020.0004][.8E99.0020.0004] # IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR SIX +33E6 ; [.1F9F.0020.0004][.C2A4.0020.0004] # IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY SEVEN +32C6 ; [.1F9F.0020.0004][.D53C.0020.0004] # IDEOGRAPHIC TELEGRAPH SYMBOL FOR JULY +335F ; [.1F9F.0020.0004][.8E99.0020.0004] # IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR SEVEN +33E7 ; [.1FA0.0020.0004][.C2A4.0020.0004] # IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY EIGHT +32C7 ; [.1FA0.0020.0004][.D53C.0020.0004] # IDEOGRAPHIC TELEGRAPH SYMBOL FOR AUGUST +3360 ; [.1FA0.0020.0004][.8E99.0020.0004] # IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR EIGHT +33E8 ; [.1FA1.0020.0004][.C2A4.0020.0004] # IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY NINE +32C8 ; [.1FA1.0020.0004][.D53C.0020.0004] # IDEOGRAPHIC TELEGRAPH SYMBOL FOR SEPTEMBER +3361 ; [.1FA1.0020.0004][.8E99.0020.0004] # IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR NINE +1F241 ; [*038A.0020.0004][.C8DF.0020.0004][*038B.0020.0004] # TORTOISE SHELL BRACKETED CJK UNIFIED IDEOGRAPH-4E09 +1F242 ; [*038A.0020.0004][.CBCD.0020.0004][*038B.0020.0004] # TORTOISE SHELL BRACKETED CJK UNIFIED IDEOGRAPH-4E8C +1F247 ; [*038A.0020.0004][.C1CC.0020.0004][*038B.0020.0004] # TORTOISE SHELL BRACKETED CJK UNIFIED IDEOGRAPH-52DD +1F243 ; [*038A.0020.0004][.CB52.0020.0004][*038B.0020.0004] # TORTOISE SHELL BRACKETED CJK UNIFIED IDEOGRAPH-5B89 +1F245 ; [*038A.0020.0004][.8C38.0020.0004][*038B.0020.0004] # TORTOISE SHELL BRACKETED CJK UNIFIED IDEOGRAPH-6253 +1F248 ; [*038A.0020.0004][.80CD.0020.0004][*038B.0020.0004] # TORTOISE SHELL BRACKETED CJK UNIFIED IDEOGRAPH-6557 +1F240 ; [*038A.0020.0004][.819A.0020.0004][*038B.0020.0004] # TORTOISE SHELL BRACKETED CJK UNIFIED IDEOGRAPH-672C +1F244 ; [*038A.0020.0004][.8E99.0020.0004][*038B.0020.0004] # TORTOISE SHELL BRACKETED CJK UNIFIED IDEOGRAPH-70B9 +1F246 ; [*038A.0020.0004][.8CA9.0020.0004][*038B.0020.0004] # TORTOISE SHELL BRACKETED CJK UNIFIED IDEOGRAPH-76D7 2F00 ; [.CBDC.0020.0004] # KANGXI RADICAL ONE 3192 ; [.CBDC.0020.0014] # IDEOGRAPHIC ANNOTATION ONE MARK 3280 ; [.CBDC.0020.0006] # CIRCLED IDEOGRAPH ONE diff --git a/gnu/usr.bin/perl/cpan/Unicode-Collate/Collate/allkeys.txt b/gnu/usr.bin/perl/cpan/Unicode-Collate/Collate/allkeys.txt index 7cc05743c15..09ac7899ae6 100644 --- a/gnu/usr.bin/perl/cpan/Unicode-Collate/Collate/allkeys.txt +++ b/gnu/usr.bin/perl/cpan/Unicode-Collate/Collate/allkeys.txt @@ -1,6 +1,6 @@ -# allkeys-10.0.0.txt -# Date: 2017-04-26, 11:47:03 GMT [KW] -# Copyright 2017 Unicode, Inc. +# allkeys-13.0.0.txt +# Date: 2020-01-28, 17:07:29 GMT [KW] +# Copyright 2020 Unicode, Inc. # For terms of use, see http://www.unicode.org/terms_of_use.html # # This file defines the Default Unicode Collation Element Table @@ -9,17 +9,21 @@ # See UTS #10, Unicode Collation Algorithm, for more information. # # Diagnostic weight ranges -# Primary weight range: 0200..56DA (21723) -# Secondary weight range: 0020..0115 (246) -# Variant secondaries: 0111..0115 (5) +# Primary weight range: 0200..5C37 (23096) +# Secondary weight range: 0020..011C (253) +# Variant secondaries: 0118..011C (5) # Tertiary weight range: 0002..001F (30) # -@version 10.0.0 +@version 13.0.0 @implicitweights 17000..18AFF; FB00 # Tangut and Tangut Components +@implicitweights 18D00..18D8F; FB00 # Tangut Supplement + @implicitweights 1B170..1B2FF; FB01 # Nushu +@implicitweights 18B00..18CFF; FB02 # Khitan Small Script + 0000 ; [.0000.0000.0000] # NULL (in ISO 6429) 0001 ; [.0000.0000.0000] # START OF HEADING (in ISO 6429) 0002 ; [.0000.0000.0000] # START OF TEXT (in ISO 6429) @@ -81,8 +85,6 @@ 009F ; [.0000.0000.0000] # APPLICATION PROGRAM COMMAND (in ISO 6429) 00AD ; [.0000.0000.0000] # SOFT HYPHEN 061C ; [.0000.0000.0000] # ARABIC LETTER MARK -070F ; [.0000.0000.0000] # SYRIAC ABBREVIATION MARK -08E2 ; [.0000.0000.0000] # ARABIC DISPUTED END OF AYAH 180B ; [.0000.0000.0000] # MONGOLIAN FREE VARIATION SELECTOR ONE 180C ; [.0000.0000.0000] # MONGOLIAN FREE VARIATION SELECTOR TWO 180D ; [.0000.0000.0000] # MONGOLIAN FREE VARIATION SELECTOR THREE @@ -128,6 +130,15 @@ FEFF ; [.0000.0000.0000] # ZERO WIDTH NO-BREAK SPACE FFF9 ; [.0000.0000.0000] # INTERLINEAR ANNOTATION ANCHOR FFFA ; [.0000.0000.0000] # INTERLINEAR ANNOTATION SEPARATOR FFFB ; [.0000.0000.0000] # INTERLINEAR ANNOTATION TERMINATOR +13430 ; [.0000.0000.0000] # EGYPTIAN HIEROGLYPH VERTICAL JOINER +13431 ; [.0000.0000.0000] # EGYPTIAN HIEROGLYPH HORIZONTAL JOINER +13432 ; [.0000.0000.0000] # EGYPTIAN HIEROGLYPH INSERT AT TOP START +13433 ; [.0000.0000.0000] # EGYPTIAN HIEROGLYPH INSERT AT BOTTOM START +13434 ; [.0000.0000.0000] # EGYPTIAN HIEROGLYPH INSERT AT TOP END +13435 ; [.0000.0000.0000] # EGYPTIAN HIEROGLYPH INSERT AT BOTTOM END +13436 ; [.0000.0000.0000] # EGYPTIAN HIEROGLYPH OVERLAY MIDDLE +13437 ; [.0000.0000.0000] # EGYPTIAN HIEROGLYPH BEGIN SEGMENT +13438 ; [.0000.0000.0000] # EGYPTIAN HIEROGLYPH END SEGMENT 1BCA0 ; [.0000.0000.0000] # SHORTHAND FORMAT LETTER OVERLAP 1BCA1 ; [.0000.0000.0000] # SHORTHAND FORMAT CONTINUING OVERLAP 1BCA2 ; [.0000.0000.0000] # SHORTHAND FORMAT DOWN STEP @@ -483,135 +494,135 @@ E01EF ; [.0000.0000.0000] # VARIATION SELECTOR-256 000C ; [*0204.0020.0002] # FORM FEED (in ISO 6429) 000D ; [*0205.0020.0002] # CARRIAGE RETURN (in ISO 6429) 0020 ; [*0209.0020.0002] # SPACE -0021 ; [*0261.0020.0002] # EXCLAMATION MARK -0022 ; [*030D.0020.0002] # QUOTATION MARK -0023 ; [*0399.0020.0002] # NUMBER SIGN -0025 ; [*039A.0020.0002] # PERCENT SIGN -0026 ; [*0397.0020.0002] # AMPERSAND -0027 ; [*0306.0020.0002] # APOSTROPHE -0028 ; [*0318.0020.0002] # LEFT PARENTHESIS -0029 ; [*0319.0020.0002] # RIGHT PARENTHESIS -002A ; [*0390.0020.0002] # ASTERISK -002B ; [*062C.0020.0002] # PLUS SIGN -002C ; [*0222.0020.0002] # COMMA +0021 ; [*0267.0020.0002] # EXCLAMATION MARK +0022 ; [*031D.0020.0002] # QUOTATION MARK +0023 ; [*03AC.0020.0002] # NUMBER SIGN +0025 ; [*03AD.0020.0002] # PERCENT SIGN +0026 ; [*03A9.0020.0002] # AMPERSAND +0027 ; [*0316.0020.0002] # APOSTROPHE +0028 ; [*0328.0020.0002] # LEFT PARENTHESIS +0029 ; [*0329.0020.0002] # RIGHT PARENTHESIS +002A ; [*03A1.0020.0002] # ASTERISK +002B ; [*0666.0020.0002] # PLUS SIGN +002C ; [*0223.0020.0002] # COMMA 002D ; [*020D.0020.0002] # HYPHEN-MINUS -002E ; [*0278.0020.0002] # FULL STOP -002F ; [*0395.0020.0002] # SOLIDUS -003A ; [*023A.0020.0002] # COLON -003B ; [*0234.0020.0002] # SEMICOLON -003C ; [*0630.0020.0002] # LESS-THAN SIGN -003D ; [*0631.0020.0002] # EQUALS SIGN -003E ; [*0632.0020.0002] # GREATER-THAN SIGN -003F ; [*0267.0020.0002] # QUESTION MARK -0040 ; [*038F.0020.0002] # COMMERCIAL AT -005B ; [*031A.0020.0002] # LEFT SQUARE BRACKET -005C ; [*0396.0020.0002] # REVERSE SOLIDUS -005D ; [*031B.0020.0002] # RIGHT SQUARE BRACKET -005E ; [*049B.0020.0002] # CIRCUMFLEX ACCENT +002E ; [*027E.0020.0002] # FULL STOP +002F ; [*03A6.0020.0002] # SOLIDUS +003A ; [*0240.0020.0002] # COLON +003B ; [*023A.0020.0002] # SEMICOLON +003C ; [*066A.0020.0002] # LESS-THAN SIGN +003D ; [*066B.0020.0002] # EQUALS SIGN +003E ; [*066C.0020.0002] # GREATER-THAN SIGN +003F ; [*026D.0020.0002] # QUESTION MARK +0040 ; [*03A0.0020.0002] # COMMERCIAL AT +005B ; [*032A.0020.0002] # LEFT SQUARE BRACKET +005C ; [*03A7.0020.0002] # REVERSE SOLIDUS +005D ; [*032B.0020.0002] # RIGHT SQUARE BRACKET +005E ; [*04B7.0020.0002] # CIRCUMFLEX ACCENT 005F ; [*020B.0020.0002] # LOW LINE -0060 ; [*0498.0020.0002] # GRAVE ACCENT -007B ; [*031C.0020.0002] # LEFT CURLY BRACKET -007C ; [*0634.0020.0002] # VERTICAL LINE -007D ; [*031D.0020.0002] # RIGHT CURLY BRACKET -007E ; [*0636.0020.0002] # TILDE +0060 ; [*04B4.0020.0002] # GRAVE ACCENT +007B ; [*032C.0020.0002] # LEFT CURLY BRACKET +007C ; [*066E.0020.0002] # VERTICAL LINE +007D ; [*032D.0020.0002] # RIGHT CURLY BRACKET +007E ; [*0670.0020.0002] # TILDE 0085 ; [*0206.0020.0002] # NEXT LINE (in ISO 6429) 00A0 ; [*0209.0020.001B] # NO-BREAK SPACE -00A1 ; [*0262.0020.0002] # INVERTED EXCLAMATION MARK -00A6 ; [*0635.0020.0002] # BROKEN BAR -00A7 ; [*038A.0020.0002] # SECTION SIGN -00A8 ; [*049F.0020.0002] # DIAERESIS -00A9 ; [*059A.0020.0002] # COPYRIGHT SIGN -00AB ; [*0316.0020.0002] # LEFT-POINTING DOUBLE ANGLE QUOTATION MARK -00AC ; [*0633.0020.0002] # NOT SIGN -00AE ; [*059B.0020.0002] # REGISTERED SIGN -00AF ; [*049C.0020.0002] # MACRON -00B0 ; [*050C.0020.0002] # DEGREE SIGN -00B1 ; [*062D.0020.0002] # PLUS-MINUS SIGN -00B4 ; [*0499.0020.0002] # ACUTE ACCENT -00B6 ; [*038C.0020.0002] # PILCROW SIGN -00B7 ; [*028C.0020.0002] # MIDDLE DOT -00B8 ; [*04A2.0020.0002] # CEDILLA -00BB ; [*0317.0020.0002] # RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK -00BF ; [*0268.0020.0002] # INVERTED QUESTION MARK -00D7 ; [*062F.0020.0002] # MULTIPLICATION SIGN -00F7 ; [*062E.0020.0002] # DIVISION SIGN -02B9 ; [*04A9.0020.0002] # MODIFIER LETTER PRIME -02BA ; [*04AB.0020.0002] # MODIFIER LETTER DOUBLE PRIME -02C2 ; [*04AC.0020.0002] # MODIFIER LETTER LEFT ARROWHEAD -02C3 ; [*04AD.0020.0002] # MODIFIER LETTER RIGHT ARROWHEAD -02C4 ; [*04AE.0020.0002] # MODIFIER LETTER UP ARROWHEAD -02C5 ; [*04AF.0020.0002] # MODIFIER LETTER DOWN ARROWHEAD -02C6 ; [*04B0.0020.0002] # MODIFIER LETTER CIRCUMFLEX ACCENT -02C7 ; [*04B1.0020.0002] # CARON -02C8 ; [*04B2.0020.0002] # MODIFIER LETTER VERTICAL LINE -02C9 ; [*04B3.0020.0002] # MODIFIER LETTER MACRON -02CA ; [*04B4.0020.0002] # MODIFIER LETTER ACUTE ACCENT -02CB ; [*04B5.0020.0002] # MODIFIER LETTER GRAVE ACCENT -02CC ; [*04B6.0020.0002] # MODIFIER LETTER LOW VERTICAL LINE -02CD ; [*04B7.0020.0002] # MODIFIER LETTER LOW MACRON -02CE ; [*04B8.0020.0002] # MODIFIER LETTER LOW GRAVE ACCENT -02CF ; [*04B9.0020.0002] # MODIFIER LETTER LOW ACUTE ACCENT -02D2 ; [*04BA.0020.0002] # MODIFIER LETTER CENTRED RIGHT HALF RING -02D3 ; [*04BB.0020.0002] # MODIFIER LETTER CENTRED LEFT HALF RING -02D4 ; [*04BC.0020.0002] # MODIFIER LETTER UP TACK -02D5 ; [*04BD.0020.0002] # MODIFIER LETTER DOWN TACK -02D6 ; [*04BE.0020.0002] # MODIFIER LETTER PLUS SIGN -02D7 ; [*04BF.0020.0002] # MODIFIER LETTER MINUS SIGN -02D8 ; [*049D.0020.0002] # BREVE -02D9 ; [*049E.0020.0002] # DOT ABOVE -02DA ; [*04A0.0020.0002] # RING ABOVE -02DB ; [*04A3.0020.0002] # OGONEK -02DC ; [*049A.0020.0002] # SMALL TILDE -02DD ; [*04A1.0020.0002] # DOUBLE ACUTE ACCENT -02DE ; [*04C0.0020.0002] # MODIFIER LETTER RHOTIC HOOK -02DF ; [*04C1.0020.0002] # MODIFIER LETTER CROSS ACCENT -02E5 ; [*04C2.0020.0002] # MODIFIER LETTER EXTRA-HIGH TONE BAR -02E6 ; [*04C3.0020.0002] # MODIFIER LETTER HIGH TONE BAR -02E7 ; [*04C4.0020.0002] # MODIFIER LETTER MID TONE BAR -02E8 ; [*04C5.0020.0002] # MODIFIER LETTER LOW TONE BAR -02E9 ; [*04C6.0020.0002] # MODIFIER LETTER EXTRA-LOW TONE BAR -02EA ; [*04C7.0020.0002] # MODIFIER LETTER YIN DEPARTING TONE MARK -02EB ; [*04C8.0020.0002] # MODIFIER LETTER YANG DEPARTING TONE MARK -02EC ; [*04C9.0020.0002] # MODIFIER LETTER VOICING -02ED ; [*04CA.0020.0002] # MODIFIER LETTER UNASPIRATED -02EF ; [*04CB.0020.0002] # MODIFIER LETTER LOW DOWN ARROWHEAD -02F0 ; [*04CC.0020.0002] # MODIFIER LETTER LOW UP ARROWHEAD -02F1 ; [*04CD.0020.0002] # MODIFIER LETTER LOW LEFT ARROWHEAD -02F2 ; [*04CE.0020.0002] # MODIFIER LETTER LOW RIGHT ARROWHEAD -02F3 ; [*04CF.0020.0002] # MODIFIER LETTER LOW RING -02F4 ; [*04D0.0020.0002] # MODIFIER LETTER MIDDLE GRAVE ACCENT -02F5 ; [*04D1.0020.0002] # MODIFIER LETTER MIDDLE DOUBLE GRAVE ACCENT -02F6 ; [*04D2.0020.0002] # MODIFIER LETTER MIDDLE DOUBLE ACUTE ACCENT -02F7 ; [*04D3.0020.0002] # MODIFIER LETTER LOW TILDE -02F8 ; [*04D4.0020.0002] # MODIFIER LETTER RAISED COLON -02F9 ; [*04D5.0020.0002] # MODIFIER LETTER BEGIN HIGH TONE -02FA ; [*04D6.0020.0002] # MODIFIER LETTER END HIGH TONE -02FB ; [*04D7.0020.0002] # MODIFIER LETTER BEGIN LOW TONE -02FC ; [*04D8.0020.0002] # MODIFIER LETTER END LOW TONE -02FD ; [*04D9.0020.0002] # MODIFIER LETTER SHELF -02FE ; [*04DA.0020.0002] # MODIFIER LETTER OPEN SHELF -02FF ; [*04DB.0020.0002] # MODIFIER LETTER LOW LEFT ARROW +00A1 ; [*0268.0020.0002] # INVERTED EXCLAMATION MARK +00A6 ; [*066F.0020.0002] # BROKEN BAR +00A7 ; [*039A.0020.0002] # SECTION SIGN +00A8 ; [*04BB.0020.0002] # DIAERESIS +00A9 ; [*05D2.0020.0002] # COPYRIGHT SIGN +00AB ; [*0326.0020.0002] # LEFT-POINTING DOUBLE ANGLE QUOTATION MARK +00AC ; [*066D.0020.0002] # NOT SIGN +00AE ; [*05D4.0020.0002] # REGISTERED SIGN +00AF ; [*04B8.0020.0002] # MACRON +00B0 ; [*052A.0020.0002] # DEGREE SIGN +00B1 ; [*0667.0020.0002] # PLUS-MINUS SIGN +00B4 ; [*04B5.0020.0002] # ACUTE ACCENT +00B6 ; [*039C.0020.0002] # PILCROW SIGN +00B7 ; [*0293.0020.0002] # MIDDLE DOT +00B8 ; [*04BE.0020.0002] # CEDILLA +00BB ; [*0327.0020.0002] # RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK +00BF ; [*026E.0020.0002] # INVERTED QUESTION MARK +00D7 ; [*0669.0020.0002] # MULTIPLICATION SIGN +00F7 ; [*0668.0020.0002] # DIVISION SIGN +02B9 ; [*04C5.0020.0002] # MODIFIER LETTER PRIME +02BA ; [*04C7.0020.0002] # MODIFIER LETTER DOUBLE PRIME +02C2 ; [*04C8.0020.0002] # MODIFIER LETTER LEFT ARROWHEAD +02C3 ; [*04C9.0020.0002] # MODIFIER LETTER RIGHT ARROWHEAD +02C4 ; [*04CA.0020.0002] # MODIFIER LETTER UP ARROWHEAD +02C5 ; [*04CB.0020.0002] # MODIFIER LETTER DOWN ARROWHEAD +02C6 ; [*04CC.0020.0002] # MODIFIER LETTER CIRCUMFLEX ACCENT +02C7 ; [*04CD.0020.0002] # CARON +02C8 ; [*04CE.0020.0002] # MODIFIER LETTER VERTICAL LINE +02C9 ; [*04CF.0020.0002] # MODIFIER LETTER MACRON +02CA ; [*04D0.0020.0002] # MODIFIER LETTER ACUTE ACCENT +02CB ; [*04D1.0020.0002] # MODIFIER LETTER GRAVE ACCENT +02CC ; [*04D2.0020.0002] # MODIFIER LETTER LOW VERTICAL LINE +02CD ; [*04D3.0020.0002] # MODIFIER LETTER LOW MACRON +02CE ; [*04D4.0020.0002] # MODIFIER LETTER LOW GRAVE ACCENT +02CF ; [*04D5.0020.0002] # MODIFIER LETTER LOW ACUTE ACCENT +02D2 ; [*04D6.0020.0002] # MODIFIER LETTER CENTRED RIGHT HALF RING +02D3 ; [*04D7.0020.0002] # MODIFIER LETTER CENTRED LEFT HALF RING +02D4 ; [*04D8.0020.0002] # MODIFIER LETTER UP TACK +02D5 ; [*04D9.0020.0002] # MODIFIER LETTER DOWN TACK +02D6 ; [*04DC.0020.0002] # MODIFIER LETTER PLUS SIGN +02D7 ; [*04DD.0020.0002] # MODIFIER LETTER MINUS SIGN +02D8 ; [*04B9.0020.0002] # BREVE +02D9 ; [*04BA.0020.0002] # DOT ABOVE +02DA ; [*04BC.0020.0002] # RING ABOVE +02DB ; [*04BF.0020.0002] # OGONEK +02DC ; [*04B6.0020.0002] # SMALL TILDE +02DD ; [*04BD.0020.0002] # DOUBLE ACUTE ACCENT +02DE ; [*04DE.0020.0002] # MODIFIER LETTER RHOTIC HOOK +02DF ; [*04DF.0020.0002] # MODIFIER LETTER CROSS ACCENT +02E5 ; [*04E0.0020.0002] # MODIFIER LETTER EXTRA-HIGH TONE BAR +02E6 ; [*04E1.0020.0002] # MODIFIER LETTER HIGH TONE BAR +02E7 ; [*04E2.0020.0002] # MODIFIER LETTER MID TONE BAR +02E8 ; [*04E3.0020.0002] # MODIFIER LETTER LOW TONE BAR +02E9 ; [*04E4.0020.0002] # MODIFIER LETTER EXTRA-LOW TONE BAR +02EA ; [*04E5.0020.0002] # MODIFIER LETTER YIN DEPARTING TONE MARK +02EB ; [*04E6.0020.0002] # MODIFIER LETTER YANG DEPARTING TONE MARK +02EC ; [*04E7.0020.0002] # MODIFIER LETTER VOICING +02ED ; [*04E8.0020.0002] # MODIFIER LETTER UNASPIRATED +02EF ; [*04E9.0020.0002] # MODIFIER LETTER LOW DOWN ARROWHEAD +02F0 ; [*04EA.0020.0002] # MODIFIER LETTER LOW UP ARROWHEAD +02F1 ; [*04EB.0020.0002] # MODIFIER LETTER LOW LEFT ARROWHEAD +02F2 ; [*04EC.0020.0002] # MODIFIER LETTER LOW RIGHT ARROWHEAD +02F3 ; [*04ED.0020.0002] # MODIFIER LETTER LOW RING +02F4 ; [*04EE.0020.0002] # MODIFIER LETTER MIDDLE GRAVE ACCENT +02F5 ; [*04EF.0020.0002] # MODIFIER LETTER MIDDLE DOUBLE GRAVE ACCENT +02F6 ; [*04F0.0020.0002] # MODIFIER LETTER MIDDLE DOUBLE ACUTE ACCENT +02F7 ; [*04F1.0020.0002] # MODIFIER LETTER LOW TILDE +02F8 ; [*04F2.0020.0002] # MODIFIER LETTER RAISED COLON +02F9 ; [*04F3.0020.0002] # MODIFIER LETTER BEGIN HIGH TONE +02FA ; [*04F4.0020.0002] # MODIFIER LETTER END HIGH TONE +02FB ; [*04F5.0020.0002] # MODIFIER LETTER BEGIN LOW TONE +02FC ; [*04F6.0020.0002] # MODIFIER LETTER END LOW TONE +02FD ; [*04F7.0020.0002] # MODIFIER LETTER SHELF +02FE ; [*04F8.0020.0002] # MODIFIER LETTER OPEN SHELF +02FF ; [*04F9.0020.0002] # MODIFIER LETTER LOW LEFT ARROW 034F ; [.0000.0000.0000] # COMBINING GRAPHEME JOINER -0374 ; [*04A9.0020.0002] # GREEK NUMERAL SIGN -0375 ; [*04AA.0020.0002] # GREEK LOWER NUMERAL SIGN -037E ; [*0234.0020.0002] # GREEK QUESTION MARK -0384 ; [*0499.0020.0002] # GREEK TONOS -0385 ; [*049F.0020.0002][.0000.0024.0002] # GREEK DIALYTIKA TONOS -0387 ; [*028C.0020.0002] # GREEK ANO TELEIA -03F6 ; [*0627.0020.0002] # GREEK REVERSED LUNATE EPSILON SYMBOL -0482 ; [*050D.0020.0002] # CYRILLIC THOUSANDS SIGN +0374 ; [*04C5.0020.0002] # GREEK NUMERAL SIGN +0375 ; [*04C6.0020.0002] # GREEK LOWER NUMERAL SIGN +037E ; [*023A.0020.0002] # GREEK QUESTION MARK +0384 ; [*04B5.0020.0002] # GREEK TONOS +0385 ; [*04BB.0020.0002][.0000.0024.0002] # GREEK DIALYTIKA TONOS +0387 ; [*0293.0020.0002] # GREEK ANO TELEIA +03F6 ; [*0661.0020.0002] # GREEK REVERSED LUNATE EPSILON SYMBOL +0482 ; [*052B.0020.0002] # CYRILLIC THOUSANDS SIGN 0488 ; [.0000.0000.0000] # COMBINING CYRILLIC HUNDRED THOUSANDS SIGN 0489 ; [.0000.0000.0000] # COMBINING CYRILLIC MILLIONS SIGN -055A ; [*03D0.0020.0002] # ARMENIAN APOSTROPHE -055B ; [*03D1.0020.0002] # ARMENIAN EMPHASIS MARK -055C ; [*0263.0020.0002] # ARMENIAN EXCLAMATION MARK -055D ; [*0226.0020.0002] # ARMENIAN COMMA -055E ; [*026A.0020.0002] # ARMENIAN QUESTION MARK -055F ; [*03D2.0020.0002] # ARMENIAN ABBREVIATION MARK -0589 ; [*023B.0020.0002] # ARMENIAN FULL STOP +055A ; [*03E4.0020.0002] # ARMENIAN APOSTROPHE +055B ; [*03E5.0020.0002] # ARMENIAN EMPHASIS MARK +055C ; [*0269.0020.0002] # ARMENIAN EXCLAMATION MARK +055D ; [*022A.0020.0002] # ARMENIAN COMMA +055E ; [*0270.0020.0002] # ARMENIAN QUESTION MARK +055F ; [*03E6.0020.0002] # ARMENIAN ABBREVIATION MARK +0589 ; [*0241.0020.0002] # ARMENIAN FULL STOP 058A ; [*020E.0020.0002] # ARMENIAN HYPHEN -058D ; [*050E.0020.0002] # RIGHT-FACING ARMENIAN ETERNITY SIGN -058E ; [*050F.0020.0002] # LEFT-FACING ARMENIAN ETERNITY SIGN +058D ; [*052C.0020.0002] # RIGHT-FACING ARMENIAN ETERNITY SIGN +058E ; [*052D.0020.0002] # LEFT-FACING ARMENIAN ETERNITY SIGN 0591 ; [.0000.0000.0000] # HEBREW ACCENT ETNAHTA 0592 ; [.0000.0000.0000] # HEBREW ACCENT SEGOL 0593 ; [.0000.0000.0000] # HEBREW ACCENT SHALSHELET @@ -644,29 +655,29 @@ E01EF ; [.0000.0000.0000] # VARIATION SELECTOR-256 05AE ; [.0000.0000.0000] # HEBREW ACCENT ZINOR 05AF ; [.0000.0000.0000] # HEBREW MARK MASORA CIRCLE 05BD ; [.0000.0000.0000] # HEBREW POINT METEG -05BE ; [*03D3.0020.0002] # HEBREW PUNCTUATION MAQAF -05C0 ; [*03D4.0020.0002] # HEBREW PUNCTUATION PASEQ -05C3 ; [*03D5.0020.0002] # HEBREW PUNCTUATION SOF PASUQ +05BE ; [*03E7.0020.0002] # HEBREW PUNCTUATION MAQAF +05C0 ; [*03E8.0020.0002] # HEBREW PUNCTUATION PASEQ +05C3 ; [*03E9.0020.0002] # HEBREW PUNCTUATION SOF PASUQ 05C4 ; [.0000.0000.0000] # HEBREW MARK UPPER DOT 05C5 ; [.0000.0000.0000] # HEBREW MARK LOWER DOT -05C6 ; [*03D6.0020.0002] # HEBREW PUNCTUATION NUN HAFUKHA -05F3 ; [*03D7.0020.0002] # HEBREW PUNCTUATION GERESH -05F4 ; [*03D8.0020.0002] # HEBREW PUNCTUATION GERSHAYIM +05C6 ; [*03EA.0020.0002] # HEBREW PUNCTUATION NUN HAFUKHA +05F3 ; [*03EB.0020.0002] # HEBREW PUNCTUATION GERESH +05F4 ; [*03EC.0020.0002] # HEBREW PUNCTUATION GERSHAYIM 0600 ; [.0000.0000.0000] # ARABIC NUMBER SIGN 0601 ; [.0000.0000.0000] # ARABIC SIGN SANAH 0602 ; [.0000.0000.0000] # ARABIC FOOTNOTE MARKER 0603 ; [.0000.0000.0000] # ARABIC SIGN SAFHA 0604 ; [.0000.0000.0000] # ARABIC SIGN SAMVAT 0605 ; [.0000.0000.0000] # ARABIC NUMBER MARK ABOVE -0606 ; [*0643.0020.0002] # ARABIC-INDIC CUBE ROOT -0607 ; [*0645.0020.0002] # ARABIC-INDIC FOURTH ROOT -0608 ; [*0510.0020.0002] # ARABIC RAY -0609 ; [*039D.0020.0002] # ARABIC-INDIC PER MILLE SIGN -060A ; [*039F.0020.0002] # ARABIC-INDIC PER TEN THOUSAND SIGN -060C ; [*0227.0020.0002] # ARABIC COMMA -060D ; [*0228.0020.0002] # ARABIC DATE SEPARATOR -060E ; [*0513.0020.0002] # ARABIC POETIC VERSE SIGN -060F ; [*0514.0020.0002] # ARABIC SIGN MISRA +0606 ; [*067D.0020.0002] # ARABIC-INDIC CUBE ROOT +0607 ; [*067F.0020.0002] # ARABIC-INDIC FOURTH ROOT +0608 ; [*052E.0020.0002] # ARABIC RAY +0609 ; [*03B0.0020.0002] # ARABIC-INDIC PER MILLE SIGN +060A ; [*03B2.0020.0002] # ARABIC-INDIC PER TEN THOUSAND SIGN +060C ; [*022B.0020.0002] # ARABIC COMMA +060D ; [*022C.0020.0002] # ARABIC DATE SEPARATOR +060E ; [*0531.0020.0002] # ARABIC POETIC VERSE SIGN +060F ; [*0532.0020.0002] # ARABIC SIGN MISRA 0610 ; [.0000.0000.0000] # ARABIC SIGN SALLALLAHOU ALAYHE WASSALLAM 0611 ; [.0000.0000.0000] # ARABIC SIGN ALAYHE ASSALLAM 0612 ; [.0000.0000.0000] # ARABIC SIGN RAHMATULLAH ALAYHE @@ -678,15 +689,15 @@ E01EF ; [.0000.0000.0000] # VARIATION SELECTOR-256 0618 ; [.0000.0000.0000] # ARABIC SMALL FATHA 0619 ; [.0000.0000.0000] # ARABIC SMALL DAMMA 061A ; [.0000.0000.0000] # ARABIC SMALL KASRA -061B ; [*0235.0020.0002] # ARABIC SEMICOLON -061E ; [*023C.0020.0002] # ARABIC TRIPLE DOT PUNCTUATION MARK -061F ; [*026B.0020.0002] # ARABIC QUESTION MARK +061B ; [*023B.0020.0002] # ARABIC SEMICOLON +061E ; [*0242.0020.0002] # ARABIC TRIPLE DOT PUNCTUATION MARK +061F ; [*0271.0020.0002] # ARABIC QUESTION MARK 0640 ; [.0000.0000.0000] # ARABIC TATWEEL -066A ; [*039B.0020.0002] # ARABIC PERCENT SIGN -066B ; [*0229.0020.0002] # ARABIC DECIMAL SEPARATOR -066C ; [*022A.0020.0002] # ARABIC THOUSANDS SEPARATOR -066D ; [*0393.0020.0002] # ARABIC FIVE POINTED STAR -06D4 ; [*027A.0020.0002] # ARABIC FULL STOP +066A ; [*03AE.0020.0002] # ARABIC PERCENT SIGN +066B ; [*022D.0020.0002] # ARABIC DECIMAL SEPARATOR +066C ; [*022E.0020.0002] # ARABIC THOUSANDS SEPARATOR +066D ; [*03A4.0020.0002] # ARABIC FIVE POINTED STAR +06D4 ; [*0280.0020.0002] # ARABIC FULL STOP 06D6 ; [.0000.0000.0000] # ARABIC SMALL HIGH LIGATURE SAD WITH LAM WITH ALEF MAKSURA 06D7 ; [.0000.0000.0000] # ARABIC SMALL HIGH LIGATURE QAF WITH LAM WITH ALEF MAKSURA 06D8 ; [.0000.0000.0000] # ARABIC SMALL HIGH MEEM INITIAL FORM @@ -695,7 +706,7 @@ E01EF ; [.0000.0000.0000] # VARIATION SELECTOR-256 06DB ; [.0000.0000.0000] # ARABIC SMALL HIGH THREE DOTS 06DC ; [.0000.0000.0000] # ARABIC SMALL HIGH SEEN 06DD ; [.0000.0000.0000] # ARABIC END OF AYAH -06DE ; [*0515.0020.0002] # ARABIC START OF RUB EL HIZB +06DE ; [*0533.0020.0002] # ARABIC START OF RUB EL HIZB 06DF ; [.0000.0000.0000] # ARABIC SMALL HIGH ROUNDED ZERO 06E0 ; [.0000.0000.0000] # ARABIC SMALL HIGH UPRIGHT RECTANGULAR ZERO 06E1 ; [.0000.0000.0000] # ARABIC SMALL HIGH DOTLESS HEAD OF KHAH @@ -704,25 +715,26 @@ E01EF ; [.0000.0000.0000] # VARIATION SELECTOR-256 06E4 ; [.0000.0000.0000] # ARABIC SMALL HIGH MADDA 06E7 ; [.0000.0000.0000] # ARABIC SMALL HIGH YEH 06E8 ; [.0000.0000.0000] # ARABIC SMALL HIGH NOON -06E9 ; [*0516.0020.0002] # ARABIC PLACE OF SAJDAH +06E9 ; [*0534.0020.0002] # ARABIC PLACE OF SAJDAH 06EA ; [.0000.0000.0000] # ARABIC EMPTY CENTRE LOW STOP 06EB ; [.0000.0000.0000] # ARABIC EMPTY CENTRE HIGH STOP 06EC ; [.0000.0000.0000] # ARABIC ROUNDED HIGH STOP WITH FILLED CENTRE 06ED ; [.0000.0000.0000] # ARABIC SMALL LOW MEEM -0700 ; [*02C5.0020.0002] # SYRIAC END OF PARAGRAPH -0701 ; [*027B.0020.0002] # SYRIAC SUPRALINEAR FULL STOP -0702 ; [*027C.0020.0002] # SYRIAC SUBLINEAR FULL STOP -0703 ; [*023D.0020.0002] # SYRIAC SUPRALINEAR COLON -0704 ; [*023E.0020.0002] # SYRIAC SUBLINEAR COLON -0705 ; [*023F.0020.0002] # SYRIAC HORIZONTAL COLON -0706 ; [*0240.0020.0002] # SYRIAC COLON SKEWED LEFT -0707 ; [*0241.0020.0002] # SYRIAC COLON SKEWED RIGHT -0708 ; [*0242.0020.0002] # SYRIAC SUPRALINEAR COLON SKEWED LEFT -0709 ; [*026C.0020.0002] # SYRIAC SUBLINEAR COLON SKEWED RIGHT -070A ; [*03D9.0020.0002] # SYRIAC CONTRACTION -070B ; [*03DA.0020.0002] # SYRIAC HARKLEAN OBELUS -070C ; [*03DB.0020.0002] # SYRIAC HARKLEAN METOBELUS -070D ; [*03DC.0020.0002] # SYRIAC HARKLEAN ASTERISCUS +0700 ; [*02CD.0020.0002] # SYRIAC END OF PARAGRAPH +0701 ; [*0281.0020.0002] # SYRIAC SUPRALINEAR FULL STOP +0702 ; [*0282.0020.0002] # SYRIAC SUBLINEAR FULL STOP +0703 ; [*0243.0020.0002] # SYRIAC SUPRALINEAR COLON +0704 ; [*0244.0020.0002] # SYRIAC SUBLINEAR COLON +0705 ; [*0245.0020.0002] # SYRIAC HORIZONTAL COLON +0706 ; [*0246.0020.0002] # SYRIAC COLON SKEWED LEFT +0707 ; [*0247.0020.0002] # SYRIAC COLON SKEWED RIGHT +0708 ; [*0248.0020.0002] # SYRIAC SUPRALINEAR COLON SKEWED LEFT +0709 ; [*0272.0020.0002] # SYRIAC SUBLINEAR COLON SKEWED RIGHT +070A ; [*03ED.0020.0002] # SYRIAC CONTRACTION +070B ; [*03EE.0020.0002] # SYRIAC HARKLEAN OBELUS +070C ; [*03EF.0020.0002] # SYRIAC HARKLEAN METOBELUS +070D ; [*03F0.0020.0002] # SYRIAC HARKLEAN ASTERISCUS +070F ; [.0000.0000.0000] # SYRIAC ABBREVIATION MARK 0740 ; [.0000.0000.0000] # SYRIAC FEMININE DOT 0743 ; [.0000.0000.0000] # SYRIAC TWO VERTICAL DOTS ABOVE 0744 ; [.0000.0000.0000] # SYRIAC TWO VERTICAL DOTS BELOW @@ -730,27 +742,28 @@ E01EF ; [.0000.0000.0000] # VARIATION SELECTOR-256 0748 ; [.0000.0000.0000] # SYRIAC OBLIQUE LINE BELOW 0749 ; [.0000.0000.0000] # SYRIAC MUSIC 074A ; [.0000.0000.0000] # SYRIAC BARREKH -07F6 ; [*0528.0020.0002] # NKO SYMBOL OO DENNEN -07F7 ; [*02C6.0020.0002] # NKO SYMBOL GBAKURUNEN -07F8 ; [*022B.0020.0002] # NKO COMMA -07F9 ; [*0264.0020.0002] # NKO EXCLAMATION MARK +07F6 ; [*0546.0020.0002] # NKO SYMBOL OO DENNEN +07F7 ; [*02CE.0020.0002] # NKO SYMBOL GBAKURUNEN +07F8 ; [*022F.0020.0002] # NKO COMMA +07F9 ; [*026A.0020.0002] # NKO EXCLAMATION MARK 07FA ; [.0000.0000.0000] # NKO LAJANYALAN -0830 ; [*0243.0020.0002] # SAMARITAN PUNCTUATION NEQUDAA -0831 ; [*0244.0020.0002] # SAMARITAN PUNCTUATION AFSAAQ -0832 ; [*0245.0020.0002] # SAMARITAN PUNCTUATION ANGED -0833 ; [*0246.0020.0002] # SAMARITAN PUNCTUATION BAU -0834 ; [*0247.0020.0002] # SAMARITAN PUNCTUATION ATMAAU -0835 ; [*0248.0020.0002] # SAMARITAN PUNCTUATION SHIYYAALAA -0836 ; [*0249.0020.0002] # SAMARITAN ABBREVIATION MARK -0837 ; [*024A.0020.0002] # SAMARITAN PUNCTUATION MELODIC QITSA -0838 ; [*024B.0020.0002] # SAMARITAN PUNCTUATION ZIQAA -0839 ; [*024C.0020.0002] # SAMARITAN PUNCTUATION QITSA -083A ; [*024D.0020.0002] # SAMARITAN PUNCTUATION ZAEF -083B ; [*024E.0020.0002] # SAMARITAN PUNCTUATION TURU -083C ; [*024F.0020.0002] # SAMARITAN PUNCTUATION ARKAANU -083D ; [*0250.0020.0002] # SAMARITAN PUNCTUATION SOF MASHFAAT -083E ; [*0251.0020.0002] # SAMARITAN PUNCTUATION ANNAAU -085E ; [*03DD.0020.0002] # MANDAIC PUNCTUATION +0830 ; [*0249.0020.0002] # SAMARITAN PUNCTUATION NEQUDAA +0831 ; [*024A.0020.0002] # SAMARITAN PUNCTUATION AFSAAQ +0832 ; [*024B.0020.0002] # SAMARITAN PUNCTUATION ANGED +0833 ; [*024C.0020.0002] # SAMARITAN PUNCTUATION BAU +0834 ; [*024D.0020.0002] # SAMARITAN PUNCTUATION ATMAAU +0835 ; [*024E.0020.0002] # SAMARITAN PUNCTUATION SHIYYAALAA +0836 ; [*024F.0020.0002] # SAMARITAN ABBREVIATION MARK +0837 ; [*0250.0020.0002] # SAMARITAN PUNCTUATION MELODIC QITSA +0838 ; [*0251.0020.0002] # SAMARITAN PUNCTUATION ZIQAA +0839 ; [*0252.0020.0002] # SAMARITAN PUNCTUATION QITSA +083A ; [*0253.0020.0002] # SAMARITAN PUNCTUATION ZAEF +083B ; [*0254.0020.0002] # SAMARITAN PUNCTUATION TURU +083C ; [*0255.0020.0002] # SAMARITAN PUNCTUATION ARKAANU +083D ; [*0256.0020.0002] # SAMARITAN PUNCTUATION SOF MASHFAAT +083E ; [*0257.0020.0002] # SAMARITAN PUNCTUATION ANNAAU +085E ; [*03F1.0020.0002] # MANDAIC PUNCTUATION +08D3 ; [.0000.0000.0000] # ARABIC SMALL LOW WAW 08D4 ; [.0000.0000.0000] # ARABIC SMALL HIGH WORD AR-RUB 08D5 ; [.0000.0000.0000] # ARABIC SMALL HIGH SAD 08D6 ; [.0000.0000.0000] # ARABIC SMALL HIGH AIN @@ -765,6 +778,7 @@ E01EF ; [.0000.0000.0000] # VARIATION SELECTOR-256 08DF ; [.0000.0000.0000] # ARABIC SMALL HIGH WORD WAQFA 08E0 ; [.0000.0000.0000] # ARABIC SMALL HIGH FOOTNOTE MARKER 08E1 ; [.0000.0000.0000] # ARABIC SMALL HIGH SIGN SAFHA +08E2 ; [.0000.0000.0000] # ARABIC DISPUTED END OF AYAH 08EA ; [.0000.0000.0000] # ARABIC TONE ONE DOT ABOVE 08EB ; [.0000.0000.0000] # ARABIC TONE TWO DOTS ABOVE 08EC ; [.0000.0000.0000] # ARABIC TONE LOOP ABOVE @@ -774,271 +788,274 @@ E01EF ; [.0000.0000.0000] # VARIATION SELECTOR-256 08F3 ; [.0000.0000.0000] # ARABIC SMALL HIGH WAW 0951 ; [.0000.0000.0000] # DEVANAGARI STRESS SIGN UDATTA 0952 ; [.0000.0000.0000] # DEVANAGARI STRESS SIGN ANUDATTA -0964 ; [*028F.0020.0002] # DEVANAGARI DANDA -0965 ; [*0290.0020.0002] # DEVANAGARI DOUBLE DANDA -0970 ; [*03EC.0020.0002] # DEVANAGARI ABBREVIATION SIGN -09F4 ; [*1AFA.0020.0002] # BENGALI CURRENCY NUMERATOR ONE -09F5 ; [*1AFB.0020.0002] # BENGALI CURRENCY NUMERATOR TWO -09F6 ; [*1AFC.0020.0002] # BENGALI CURRENCY NUMERATOR THREE -09F7 ; [*1AFD.0020.0002] # BENGALI CURRENCY NUMERATOR FOUR -09F8 ; [*1AFE.0020.0002] # BENGALI CURRENCY NUMERATOR ONE LESS THAN THE DENOMINATOR -09F9 ; [*1AFF.0020.0002] # BENGALI CURRENCY DENOMINATOR SIXTEEN -09FA ; [*0529.0020.0002] # BENGALI ISSHAR -09FD ; [*03F1.0020.0002] # BENGALI ABBREVIATION SIGN -0AF0 ; [*03F2.0020.0002] # GUJARATI ABBREVIATION SIGN -0B70 ; [*052A.0020.0002] # ORIYA ISSHAR -0B72 ; [*1B00.0020.0002] # ORIYA FRACTION ONE QUARTER -0B73 ; [*1B01.0020.0002] # ORIYA FRACTION ONE HALF -0B74 ; [*1B02.0020.0002] # ORIYA FRACTION THREE QUARTERS -0B75 ; [*1B03.0020.0002] # ORIYA FRACTION ONE SIXTEENTH -0B76 ; [*1B04.0020.0002] # ORIYA FRACTION ONE EIGHTH -0B77 ; [*1B05.0020.0002] # ORIYA FRACTION THREE SIXTEENTHS -0BF0 ; [*1B0C.0020.0002] # TAMIL NUMBER TEN -0BF1 ; [*1B0D.0020.0002] # TAMIL NUMBER ONE HUNDRED -0BF2 ; [*1B0E.0020.0002] # TAMIL NUMBER ONE THOUSAND -0BF3 ; [*052B.0020.0002] # TAMIL DAY SIGN -0BF4 ; [*052C.0020.0002] # TAMIL MONTH SIGN -0BF5 ; [*052D.0020.0002] # TAMIL YEAR SIGN -0BF6 ; [*052E.0020.0002] # TAMIL DEBIT SIGN -0BF7 ; [*052F.0020.0002] # TAMIL CREDIT SIGN -0BF8 ; [*0530.0020.0002] # TAMIL AS ABOVE SIGN -0BFA ; [*0531.0020.0002] # TAMIL NUMBER SIGN -0C7F ; [*0532.0020.0002] # TELUGU SIGN TUUMU -0D4F ; [*0533.0020.0002] # MALAYALAM SIGN PARA -0D58 ; [*1B0F.0020.0002] # MALAYALAM FRACTION ONE ONE-HUNDRED-AND-SIXTIETH -0D59 ; [*1B10.0020.0002] # MALAYALAM FRACTION ONE FORTIETH -0D5A ; [*1B11.0020.0002] # MALAYALAM FRACTION THREE EIGHTIETHS -0D5B ; [*1B12.0020.0002] # MALAYALAM FRACTION ONE TWENTIETH -0D5C ; [*1B13.0020.0002] # MALAYALAM FRACTION ONE TENTH -0D5D ; [*1B14.0020.0002] # MALAYALAM FRACTION THREE TWENTIETHS -0D5E ; [*1B15.0020.0002] # MALAYALAM FRACTION ONE FIFTH -0D70 ; [*1B16.0020.0002] # MALAYALAM NUMBER TEN -0D71 ; [*1B17.0020.0002] # MALAYALAM NUMBER ONE HUNDRED -0D72 ; [*1B18.0020.0002] # MALAYALAM NUMBER ONE THOUSAND -0D73 ; [*1B19.0020.0002] # MALAYALAM FRACTION ONE QUARTER -0D74 ; [*1B1A.0020.0002] # MALAYALAM FRACTION ONE HALF -0D75 ; [*1B1B.0020.0002] # MALAYALAM FRACTION THREE QUARTERS -0D76 ; [*1B1C.0020.0002] # MALAYALAM FRACTION ONE SIXTEENTH -0D77 ; [*1B1D.0020.0002] # MALAYALAM FRACTION ONE EIGHTH -0D78 ; [*1B1E.0020.0002] # MALAYALAM FRACTION THREE SIXTEENTHS -0D79 ; [*0534.0020.0002] # MALAYALAM DATE MARK -0DF4 ; [*03F3.0020.0002] # SINHALA PUNCTUATION KUNDDALIYA -0E4F ; [*03F4.0020.0002] # THAI CHARACTER FONGMAN -0E5A ; [*03F5.0020.0002] # THAI CHARACTER ANGKHANKHU -0E5B ; [*03F6.0020.0002] # THAI CHARACTER KHOMUT -0F01 ; [*053C.0020.0002] # TIBETAN MARK GTER YIG MGO TRUNCATED A -0F02 ; [*053D.0020.0002] # TIBETAN MARK GTER YIG MGO -UM RNAM BCAD MA -0F03 ; [*053E.0020.0002] # TIBETAN MARK GTER YIG MGO -UM GTER TSHEG MA -0F04 ; [*03F9.0020.0002] # TIBETAN MARK INITIAL YIG MGO MDUN MA -0F05 ; [*03FA.0020.0002] # TIBETAN MARK CLOSING YIG MGO SGAB MA -0F06 ; [*03FB.0020.0002] # TIBETAN MARK CARET YIG MGO PHUR SHAD MA -0F07 ; [*03FC.0020.0002] # TIBETAN MARK YIG MGO TSHEG SHAD MA -0F08 ; [*03FD.0020.0002] # TIBETAN MARK SBRUL SHAD -0F09 ; [*03FE.0020.0002] # TIBETAN MARK BSKUR YIG MGO -0F0A ; [*03FF.0020.0002] # TIBETAN MARK BKA- SHOG YIG MGO -0F0B ; [*0402.0020.0002] # TIBETAN MARK INTERSYLLABIC TSHEG -0F0C ; [*0402.0020.001B] # TIBETAN MARK DELIMITER TSHEG BSTAR -0F0D ; [*0403.0020.0002] # TIBETAN MARK SHAD -0F0E ; [*0404.0020.0002] # TIBETAN MARK NYIS SHAD -0F0F ; [*0405.0020.0002] # TIBETAN MARK TSHEG SHAD -0F10 ; [*0406.0020.0002] # TIBETAN MARK NYIS TSHEG SHAD -0F11 ; [*0407.0020.0002] # TIBETAN MARK RIN CHEN SPUNGS SHAD -0F12 ; [*0408.0020.0002] # TIBETAN MARK RGYA GRAM SHAD -0F13 ; [*053F.0020.0002] # TIBETAN MARK CARET -DZUD RTAGS ME LONG CAN -0F14 ; [*0259.0020.0002] # TIBETAN MARK GTER TSHEG -0F15 ; [*0540.0020.0002] # TIBETAN LOGOTYPE SIGN CHAD RTAGS -0F16 ; [*0541.0020.0002] # TIBETAN LOGOTYPE SIGN LHAG RTAGS -0F17 ; [*0542.0020.0002] # TIBETAN ASTROLOGICAL SIGN SGRA GCAN -CHAR RTAGS +0964 ; [*0296.0020.0002] # DEVANAGARI DANDA +0965 ; [*0297.0020.0002] # DEVANAGARI DOUBLE DANDA +0970 ; [*0400.0020.0002] # DEVANAGARI ABBREVIATION SIGN +09F4 ; [*1D56.0020.0002] # BENGALI CURRENCY NUMERATOR ONE +09F5 ; [*1D57.0020.0002] # BENGALI CURRENCY NUMERATOR TWO +09F6 ; [*1D58.0020.0002] # BENGALI CURRENCY NUMERATOR THREE +09F7 ; [*1D59.0020.0002] # BENGALI CURRENCY NUMERATOR FOUR +09F8 ; [*1D5A.0020.0002] # BENGALI CURRENCY NUMERATOR ONE LESS THAN THE DENOMINATOR +09F9 ; [*1D5B.0020.0002] # BENGALI CURRENCY DENOMINATOR SIXTEEN +09FA ; [*0547.0020.0002] # BENGALI ISSHAR +09FD ; [*0405.0020.0002] # BENGALI ABBREVIATION SIGN +0A76 ; [*0406.0020.0002] # GURMUKHI ABBREVIATION SIGN +0AF0 ; [*0407.0020.0002] # GUJARATI ABBREVIATION SIGN +0B70 ; [*0548.0020.0002] # ORIYA ISSHAR +0B72 ; [*1D5C.0020.0002] # ORIYA FRACTION ONE QUARTER +0B73 ; [*1D5D.0020.0002] # ORIYA FRACTION ONE HALF +0B74 ; [*1D5E.0020.0002] # ORIYA FRACTION THREE QUARTERS +0B75 ; [*1D5F.0020.0002] # ORIYA FRACTION ONE SIXTEENTH +0B76 ; [*1D60.0020.0002] # ORIYA FRACTION ONE EIGHTH +0B77 ; [*1D61.0020.0002] # ORIYA FRACTION THREE SIXTEENTHS +0BF0 ; [*1D68.0020.0002] # TAMIL NUMBER TEN +0BF1 ; [*1D69.0020.0002] # TAMIL NUMBER ONE HUNDRED +0BF2 ; [*1D6A.0020.0002] # TAMIL NUMBER ONE THOUSAND +0BF3 ; [*0549.0020.0002] # TAMIL DAY SIGN +0BF4 ; [*054A.0020.0002] # TAMIL MONTH SIGN +0BF5 ; [*054B.0020.0002] # TAMIL YEAR SIGN +0BF6 ; [*054C.0020.0002] # TAMIL DEBIT SIGN +0BF7 ; [*054D.0020.0002] # TAMIL CREDIT SIGN +0BF8 ; [*054E.0020.0002] # TAMIL AS ABOVE SIGN +0BFA ; [*054F.0020.0002] # TAMIL NUMBER SIGN +0C77 ; [*0408.0020.0002] # TELUGU SIGN SIDDHAM +0C7F ; [*0569.0020.0002] # TELUGU SIGN TUUMU +0C84 ; [*0409.0020.0002] # KANNADA SIGN SIDDHAM +0D4F ; [*056A.0020.0002] # MALAYALAM SIGN PARA +0D58 ; [*1D80.0020.0002] # MALAYALAM FRACTION ONE ONE-HUNDRED-AND-SIXTIETH +0D59 ; [*1D81.0020.0002] # MALAYALAM FRACTION ONE FORTIETH +0D5A ; [*1D82.0020.0002] # MALAYALAM FRACTION THREE EIGHTIETHS +0D5B ; [*1D83.0020.0002] # MALAYALAM FRACTION ONE TWENTIETH +0D5C ; [*1D84.0020.0002] # MALAYALAM FRACTION ONE TENTH +0D5D ; [*1D85.0020.0002] # MALAYALAM FRACTION THREE TWENTIETHS +0D5E ; [*1D86.0020.0002] # MALAYALAM FRACTION ONE FIFTH +0D70 ; [*1D87.0020.0002] # MALAYALAM NUMBER TEN +0D71 ; [*1D88.0020.0002] # MALAYALAM NUMBER ONE HUNDRED +0D72 ; [*1D89.0020.0002] # MALAYALAM NUMBER ONE THOUSAND +0D73 ; [*1D8A.0020.0002] # MALAYALAM FRACTION ONE QUARTER +0D74 ; [*1D8B.0020.0002] # MALAYALAM FRACTION ONE HALF +0D75 ; [*1D8C.0020.0002] # MALAYALAM FRACTION THREE QUARTERS +0D76 ; [*1D8D.0020.0002] # MALAYALAM FRACTION ONE SIXTEENTH +0D77 ; [*1D8E.0020.0002] # MALAYALAM FRACTION ONE EIGHTH +0D78 ; [*1D8F.0020.0002] # MALAYALAM FRACTION THREE SIXTEENTHS +0D79 ; [*056B.0020.0002] # MALAYALAM DATE MARK +0DF4 ; [*040A.0020.0002] # SINHALA PUNCTUATION KUNDDALIYA +0E4F ; [*040B.0020.0002] # THAI CHARACTER FONGMAN +0E5A ; [*040C.0020.0002] # THAI CHARACTER ANGKHANKHU +0E5B ; [*040D.0020.0002] # THAI CHARACTER KHOMUT +0F01 ; [*0573.0020.0002] # TIBETAN MARK GTER YIG MGO TRUNCATED A +0F02 ; [*0574.0020.0002] # TIBETAN MARK GTER YIG MGO -UM RNAM BCAD MA +0F03 ; [*0575.0020.0002] # TIBETAN MARK GTER YIG MGO -UM GTER TSHEG MA +0F04 ; [*0410.0020.0002] # TIBETAN MARK INITIAL YIG MGO MDUN MA +0F05 ; [*0411.0020.0002] # TIBETAN MARK CLOSING YIG MGO SGAB MA +0F06 ; [*0412.0020.0002] # TIBETAN MARK CARET YIG MGO PHUR SHAD MA +0F07 ; [*0413.0020.0002] # TIBETAN MARK YIG MGO TSHEG SHAD MA +0F08 ; [*0414.0020.0002] # TIBETAN MARK SBRUL SHAD +0F09 ; [*0415.0020.0002] # TIBETAN MARK BSKUR YIG MGO +0F0A ; [*0416.0020.0002] # TIBETAN MARK BKA- SHOG YIG MGO +0F0B ; [*0419.0020.0002] # TIBETAN MARK INTERSYLLABIC TSHEG +0F0C ; [*0419.0020.001B] # TIBETAN MARK DELIMITER TSHEG BSTAR +0F0D ; [*041A.0020.0002] # TIBETAN MARK SHAD +0F0E ; [*041B.0020.0002] # TIBETAN MARK NYIS SHAD +0F0F ; [*041C.0020.0002] # TIBETAN MARK TSHEG SHAD +0F10 ; [*041D.0020.0002] # TIBETAN MARK NYIS TSHEG SHAD +0F11 ; [*041E.0020.0002] # TIBETAN MARK RIN CHEN SPUNGS SHAD +0F12 ; [*041F.0020.0002] # TIBETAN MARK RGYA GRAM SHAD +0F13 ; [*0576.0020.0002] # TIBETAN MARK CARET -DZUD RTAGS ME LONG CAN +0F14 ; [*025F.0020.0002] # TIBETAN MARK GTER TSHEG +0F15 ; [*0577.0020.0002] # TIBETAN LOGOTYPE SIGN CHAD RTAGS +0F16 ; [*0578.0020.0002] # TIBETAN LOGOTYPE SIGN LHAG RTAGS +0F17 ; [*0579.0020.0002] # TIBETAN ASTROLOGICAL SIGN SGRA GCAN -CHAR RTAGS 0F18 ; [.0000.0000.0000] # TIBETAN ASTROLOGICAL SIGN -KHYUD PA 0F19 ; [.0000.0000.0000] # TIBETAN ASTROLOGICAL SIGN SDONG TSHUGS -0F1A ; [*0543.0020.0002] # TIBETAN SIGN RDEL DKAR GCIG -0F1B ; [*0544.0020.0002] # TIBETAN SIGN RDEL DKAR GNYIS -0F1C ; [*0545.0020.0002] # TIBETAN SIGN RDEL DKAR GSUM -0F1D ; [*0546.0020.0002] # TIBETAN SIGN RDEL NAG GCIG -0F1E ; [*0547.0020.0002] # TIBETAN SIGN RDEL NAG GNYIS -0F1F ; [*0548.0020.0002] # TIBETAN SIGN RDEL DKAR RDEL NAG -0F34 ; [*0549.0020.0002] # TIBETAN MARK BSDUS RTAGS +0F1A ; [*057A.0020.0002] # TIBETAN SIGN RDEL DKAR GCIG +0F1B ; [*057B.0020.0002] # TIBETAN SIGN RDEL DKAR GNYIS +0F1C ; [*057C.0020.0002] # TIBETAN SIGN RDEL DKAR GSUM +0F1D ; [*057D.0020.0002] # TIBETAN SIGN RDEL NAG GCIG +0F1E ; [*057E.0020.0002] # TIBETAN SIGN RDEL NAG GNYIS +0F1F ; [*057F.0020.0002] # TIBETAN SIGN RDEL DKAR RDEL NAG +0F34 ; [*0580.0020.0002] # TIBETAN MARK BSDUS RTAGS 0F35 ; [.0000.0000.0000] # TIBETAN MARK NGAS BZUNG NYI ZLA -0F36 ; [*054A.0020.0002] # TIBETAN MARK CARET -DZUD RTAGS BZHI MIG CAN +0F36 ; [*0581.0020.0002] # TIBETAN MARK CARET -DZUD RTAGS BZHI MIG CAN 0F37 ; [.0000.0000.0000] # TIBETAN MARK NGAS BZUNG SGOR RTAGS -0F38 ; [*054B.0020.0002] # TIBETAN MARK CHE MGO -0F3A ; [*031E.0020.0002] # TIBETAN MARK GUG RTAGS GYON -0F3B ; [*031F.0020.0002] # TIBETAN MARK GUG RTAGS GYAS -0F3C ; [*0320.0020.0002] # TIBETAN MARK ANG KHANG GYON -0F3D ; [*0321.0020.0002] # TIBETAN MARK ANG KHANG GYAS +0F38 ; [*0582.0020.0002] # TIBETAN MARK CHE MGO +0F3A ; [*032E.0020.0002] # TIBETAN MARK GUG RTAGS GYON +0F3B ; [*032F.0020.0002] # TIBETAN MARK GUG RTAGS GYAS +0F3C ; [*0330.0020.0002] # TIBETAN MARK ANG KHANG GYON +0F3D ; [*0331.0020.0002] # TIBETAN MARK ANG KHANG GYAS 0F3E ; [.0000.0000.0000] # TIBETAN SIGN YAR TSHES 0F3F ; [.0000.0000.0000] # TIBETAN SIGN MAR TSHES 0F82 ; [.0000.0000.0000] # TIBETAN SIGN NYI ZLA NAA DA 0F83 ; [.0000.0000.0000] # TIBETAN SIGN SNA LDAN -0F85 ; [*0409.0020.0002] # TIBETAN MARK PALUTA +0F85 ; [*0420.0020.0002] # TIBETAN MARK PALUTA 0F86 ; [.0000.0000.0000] # TIBETAN SIGN LCI RTAGS 0F87 ; [.0000.0000.0000] # TIBETAN SIGN YANG RTAGS -0FBE ; [*054C.0020.0002] # TIBETAN KU RU KHA -0FBF ; [*054D.0020.0002] # TIBETAN KU RU KHA BZHI MIG CAN -0FC0 ; [*054E.0020.0002] # TIBETAN CANTILLATION SIGN HEAVY BEAT -0FC1 ; [*054F.0020.0002] # TIBETAN CANTILLATION SIGN LIGHT BEAT -0FC2 ; [*0550.0020.0002] # TIBETAN CANTILLATION SIGN CANG TE-U -0FC3 ; [*0551.0020.0002] # TIBETAN CANTILLATION SIGN SBUB -CHAL -0FC4 ; [*0552.0020.0002] # TIBETAN SYMBOL DRIL BU -0FC5 ; [*0553.0020.0002] # TIBETAN SYMBOL RDO RJE +0FBE ; [*0583.0020.0002] # TIBETAN KU RU KHA +0FBF ; [*0584.0020.0002] # TIBETAN KU RU KHA BZHI MIG CAN +0FC0 ; [*0585.0020.0002] # TIBETAN CANTILLATION SIGN HEAVY BEAT +0FC1 ; [*0586.0020.0002] # TIBETAN CANTILLATION SIGN LIGHT BEAT +0FC2 ; [*0587.0020.0002] # TIBETAN CANTILLATION SIGN CANG TE-U +0FC3 ; [*0588.0020.0002] # TIBETAN CANTILLATION SIGN SBUB -CHAL +0FC4 ; [*0589.0020.0002] # TIBETAN SYMBOL DRIL BU +0FC5 ; [*058A.0020.0002] # TIBETAN SYMBOL RDO RJE 0FC6 ; [.0000.0000.0000] # TIBETAN SYMBOL PADMA GDAN -0FC7 ; [*0554.0020.0002] # TIBETAN SYMBOL RDO RJE RGYA GRAM -0FC8 ; [*0555.0020.0002] # TIBETAN SYMBOL PHUR PA -0FC9 ; [*0556.0020.0002] # TIBETAN SYMBOL NOR BU -0FCA ; [*0557.0020.0002] # TIBETAN SYMBOL NOR BU NYIS -KHYIL -0FCB ; [*0558.0020.0002] # TIBETAN SYMBOL NOR BU GSUM -KHYIL -0FCC ; [*0559.0020.0002] # TIBETAN SYMBOL NOR BU BZHI -KHYIL -0FCE ; [*055A.0020.0002] # TIBETAN SIGN RDEL NAG RDEL DKAR -0FCF ; [*055B.0020.0002] # TIBETAN SIGN RDEL NAG GSUM -0FD0 ; [*0400.0020.0002] # TIBETAN MARK BSKA- SHOG GI MGO RGYAN -0FD1 ; [*0401.0020.0002] # TIBETAN MARK MNYAM YIG GI MGO RGYAN -0FD2 ; [*040A.0020.0002] # TIBETAN MARK NYIS TSHEG -0FD3 ; [*040B.0020.0002] # TIBETAN MARK INITIAL BRDA RNYING YIG MGO MDUN MA -0FD4 ; [*040C.0020.0002] # TIBETAN MARK CLOSING BRDA RNYING YIG MGO SGAB MA -0FD5 ; [*055C.0020.0002] # RIGHT-FACING SVASTI SIGN -0FD6 ; [*055D.0020.0002] # LEFT-FACING SVASTI SIGN -0FD7 ; [*055E.0020.0002] # RIGHT-FACING SVASTI SIGN WITH DOTS -0FD8 ; [*055F.0020.0002] # LEFT-FACING SVASTI SIGN WITH DOTS -0FD9 ; [*040D.0020.0002] # TIBETAN MARK LEADING MCHAN RTAGS -0FDA ; [*040E.0020.0002] # TIBETAN MARK TRAILING MCHAN RTAGS -104A ; [*029A.0020.0002] # MYANMAR SIGN LITTLE SECTION -104B ; [*029B.0020.0002] # MYANMAR SIGN SECTION -104C ; [*0424.0020.0002] # MYANMAR SYMBOL LOCATIVE -104D ; [*0425.0020.0002] # MYANMAR SYMBOL COMPLETED -104E ; [*0426.0020.0002] # MYANMAR SYMBOL AFOREMENTIONED -104F ; [*0427.0020.0002] # MYANMAR SYMBOL GENITIVE -109E ; [*0561.0020.0002] # MYANMAR SYMBOL SHAN ONE -109F ; [*0562.0020.0002] # MYANMAR SYMBOL SHAN EXCLAMATION -10FB ; [*02C7.0020.0002] # GEORGIAN PARAGRAPH SEPARATOR -1360 ; [*02C8.0020.0002] # ETHIOPIC SECTION MARK -1361 ; [*0252.0020.0002] # ETHIOPIC WORDSPACE -1362 ; [*027D.0020.0002] # ETHIOPIC FULL STOP -1363 ; [*0253.0020.0002] # ETHIOPIC COMMA -1364 ; [*0254.0020.0002] # ETHIOPIC SEMICOLON -1365 ; [*0255.0020.0002] # ETHIOPIC COLON -1366 ; [*0256.0020.0002] # ETHIOPIC PREFACE COLON -1367 ; [*026D.0020.0002] # ETHIOPIC QUESTION MARK -1368 ; [*02C9.0020.0002] # ETHIOPIC PARAGRAPH SEPARATOR -1372 ; [*1B1F.0020.0002] # ETHIOPIC NUMBER TEN -1373 ; [*1B20.0020.0002] # ETHIOPIC NUMBER TWENTY -1374 ; [*1B21.0020.0002] # ETHIOPIC NUMBER THIRTY -1375 ; [*1B22.0020.0002] # ETHIOPIC NUMBER FORTY -1376 ; [*1B23.0020.0002] # ETHIOPIC NUMBER FIFTY -1377 ; [*1B24.0020.0002] # ETHIOPIC NUMBER SIXTY -1378 ; [*1B25.0020.0002] # ETHIOPIC NUMBER SEVENTY -1379 ; [*1B26.0020.0002] # ETHIOPIC NUMBER EIGHTY -137A ; [*1B27.0020.0002] # ETHIOPIC NUMBER NINETY -137B ; [*1B28.0020.0002] # ETHIOPIC NUMBER HUNDRED -137C ; [*1B29.0020.0002] # ETHIOPIC NUMBER TEN THOUSAND -1390 ; [*04DC.0020.0002] # ETHIOPIC TONAL MARK YIZET -1391 ; [*04DD.0020.0002] # ETHIOPIC TONAL MARK DERET -1392 ; [*04DE.0020.0002] # ETHIOPIC TONAL MARK RIKRIK -1393 ; [*04DF.0020.0002] # ETHIOPIC TONAL MARK SHORT RIKRIK -1394 ; [*04E0.0020.0002] # ETHIOPIC TONAL MARK DIFAT -1395 ; [*04E1.0020.0002] # ETHIOPIC TONAL MARK KENAT -1396 ; [*04E2.0020.0002] # ETHIOPIC TONAL MARK CHIRET -1397 ; [*04E3.0020.0002] # ETHIOPIC TONAL MARK HIDET -1398 ; [*04E4.0020.0002] # ETHIOPIC TONAL MARK DERET-HIDET -1399 ; [*04E5.0020.0002] # ETHIOPIC TONAL MARK KURT +0FC7 ; [*058B.0020.0002] # TIBETAN SYMBOL RDO RJE RGYA GRAM +0FC8 ; [*058C.0020.0002] # TIBETAN SYMBOL PHUR PA +0FC9 ; [*058D.0020.0002] # TIBETAN SYMBOL NOR BU +0FCA ; [*058E.0020.0002] # TIBETAN SYMBOL NOR BU NYIS -KHYIL +0FCB ; [*058F.0020.0002] # TIBETAN SYMBOL NOR BU GSUM -KHYIL +0FCC ; [*0590.0020.0002] # TIBETAN SYMBOL NOR BU BZHI -KHYIL +0FCE ; [*0591.0020.0002] # TIBETAN SIGN RDEL NAG RDEL DKAR +0FCF ; [*0592.0020.0002] # TIBETAN SIGN RDEL NAG GSUM +0FD0 ; [*0417.0020.0002] # TIBETAN MARK BSKA- SHOG GI MGO RGYAN +0FD1 ; [*0418.0020.0002] # TIBETAN MARK MNYAM YIG GI MGO RGYAN +0FD2 ; [*0421.0020.0002] # TIBETAN MARK NYIS TSHEG +0FD3 ; [*0422.0020.0002] # TIBETAN MARK INITIAL BRDA RNYING YIG MGO MDUN MA +0FD4 ; [*0423.0020.0002] # TIBETAN MARK CLOSING BRDA RNYING YIG MGO SGAB MA +0FD5 ; [*0593.0020.0002] # RIGHT-FACING SVASTI SIGN +0FD6 ; [*0594.0020.0002] # LEFT-FACING SVASTI SIGN +0FD7 ; [*0595.0020.0002] # RIGHT-FACING SVASTI SIGN WITH DOTS +0FD8 ; [*0596.0020.0002] # LEFT-FACING SVASTI SIGN WITH DOTS +0FD9 ; [*0424.0020.0002] # TIBETAN MARK LEADING MCHAN RTAGS +0FDA ; [*0425.0020.0002] # TIBETAN MARK TRAILING MCHAN RTAGS +104A ; [*02A1.0020.0002] # MYANMAR SIGN LITTLE SECTION +104B ; [*02A2.0020.0002] # MYANMAR SIGN SECTION +104C ; [*043B.0020.0002] # MYANMAR SYMBOL LOCATIVE +104D ; [*043C.0020.0002] # MYANMAR SYMBOL COMPLETED +104E ; [*043D.0020.0002] # MYANMAR SYMBOL AFOREMENTIONED +104F ; [*043E.0020.0002] # MYANMAR SYMBOL GENITIVE +109E ; [*0599.0020.0002] # MYANMAR SYMBOL SHAN ONE +109F ; [*059A.0020.0002] # MYANMAR SYMBOL SHAN EXCLAMATION +10FB ; [*02CF.0020.0002] # GEORGIAN PARAGRAPH SEPARATOR +1360 ; [*02D0.0020.0002] # ETHIOPIC SECTION MARK +1361 ; [*0258.0020.0002] # ETHIOPIC WORDSPACE +1362 ; [*0283.0020.0002] # ETHIOPIC FULL STOP +1363 ; [*0259.0020.0002] # ETHIOPIC COMMA +1364 ; [*025A.0020.0002] # ETHIOPIC SEMICOLON +1365 ; [*025B.0020.0002] # ETHIOPIC COLON +1366 ; [*025C.0020.0002] # ETHIOPIC PREFACE COLON +1367 ; [*0273.0020.0002] # ETHIOPIC QUESTION MARK +1368 ; [*02D1.0020.0002] # ETHIOPIC PARAGRAPH SEPARATOR +1372 ; [*1D90.0020.0002] # ETHIOPIC NUMBER TEN +1373 ; [*1D91.0020.0002] # ETHIOPIC NUMBER TWENTY +1374 ; [*1D92.0020.0002] # ETHIOPIC NUMBER THIRTY +1375 ; [*1D93.0020.0002] # ETHIOPIC NUMBER FORTY +1376 ; [*1D94.0020.0002] # ETHIOPIC NUMBER FIFTY +1377 ; [*1D95.0020.0002] # ETHIOPIC NUMBER SIXTY +1378 ; [*1D96.0020.0002] # ETHIOPIC NUMBER SEVENTY +1379 ; [*1D97.0020.0002] # ETHIOPIC NUMBER EIGHTY +137A ; [*1D98.0020.0002] # ETHIOPIC NUMBER NINETY +137B ; [*1D99.0020.0002] # ETHIOPIC NUMBER HUNDRED +137C ; [*1D9A.0020.0002] # ETHIOPIC NUMBER TEN THOUSAND +1390 ; [*04FA.0020.0002] # ETHIOPIC TONAL MARK YIZET +1391 ; [*04FB.0020.0002] # ETHIOPIC TONAL MARK DERET +1392 ; [*04FC.0020.0002] # ETHIOPIC TONAL MARK RIKRIK +1393 ; [*04FD.0020.0002] # ETHIOPIC TONAL MARK SHORT RIKRIK +1394 ; [*04FE.0020.0002] # ETHIOPIC TONAL MARK DIFAT +1395 ; [*04FF.0020.0002] # ETHIOPIC TONAL MARK KENAT +1396 ; [*0500.0020.0002] # ETHIOPIC TONAL MARK CHIRET +1397 ; [*0501.0020.0002] # ETHIOPIC TONAL MARK HIDET +1398 ; [*0502.0020.0002] # ETHIOPIC TONAL MARK DERET-HIDET +1399 ; [*0503.0020.0002] # ETHIOPIC TONAL MARK KURT 1400 ; [*020F.0020.0002] # CANADIAN SYLLABICS HYPHEN -166D ; [*0434.0020.0002] # CANADIAN SYLLABICS CHI SIGN -166E ; [*0280.0020.0002] # CANADIAN SYLLABICS FULL STOP +166D ; [*0597.0020.0002] # CANADIAN SYLLABICS CHI SIGN +166E ; [*0286.0020.0002] # CANADIAN SYLLABICS FULL STOP 1680 ; [*0209.0020.0004] # OGHAM SPACE MARK -169B ; [*0322.0020.0002] # OGHAM FEATHER MARK -169C ; [*0323.0020.0002] # OGHAM REVERSED FEATHER MARK -16EB ; [*025D.0020.0002] # RUNIC SINGLE PUNCTUATION -16EC ; [*025E.0020.0002] # RUNIC MULTIPLE PUNCTUATION -16ED ; [*025F.0020.0002] # RUNIC CROSS PUNCTUATION -1735 ; [*0297.0020.0002] # PHILIPPINE SINGLE PUNCTUATION -1736 ; [*0298.0020.0002] # PHILIPPINE DOUBLE PUNCTUATION +169B ; [*0332.0020.0002] # OGHAM FEATHER MARK +169C ; [*0333.0020.0002] # OGHAM REVERSED FEATHER MARK +16EB ; [*0263.0020.0002] # RUNIC SINGLE PUNCTUATION +16EC ; [*0264.0020.0002] # RUNIC MULTIPLE PUNCTUATION +16ED ; [*0265.0020.0002] # RUNIC CROSS PUNCTUATION +1735 ; [*029E.0020.0002] # PHILIPPINE SINGLE PUNCTUATION +1736 ; [*029F.0020.0002] # PHILIPPINE DOUBLE PUNCTUATION 17B4 ; [.0000.0000.0000] # KHMER VOWEL INHERENT AQ 17B5 ; [.0000.0000.0000] # KHMER VOWEL INHERENT AA 17D3 ; [.0000.0000.0000] # KHMER SIGN BATHAMASAT -17D4 ; [*029C.0020.0002] # KHMER SIGN KHAN -17D5 ; [*029D.0020.0002] # KHMER SIGN BARIYOOSAN -17D6 ; [*025A.0020.0002] # KHMER SIGN CAMNUC PII KUUH -17D8 ; [*0428.0020.0002] # KHMER SIGN BEYYAL -17D9 ; [*0429.0020.0002] # KHMER SIGN PHNAEK MUAN -17DA ; [*042A.0020.0002] # KHMER SIGN KOOMUUT -1800 ; [*03DE.0020.0002] # MONGOLIAN BIRGA -1801 ; [*0279.0020.0002] # MONGOLIAN ELLIPSIS -1802 ; [*022C.0020.0002] # MONGOLIAN COMMA -1803 ; [*027E.0020.0002] # MONGOLIAN FULL STOP -1804 ; [*0257.0020.0002] # MONGOLIAN COLON -1805 ; [*0258.0020.0002] # MONGOLIAN FOUR DOTS +17D4 ; [*02A3.0020.0002] # KHMER SIGN KHAN +17D5 ; [*02A4.0020.0002] # KHMER SIGN BARIYOOSAN +17D6 ; [*0260.0020.0002] # KHMER SIGN CAMNUC PII KUUH +17D8 ; [*043F.0020.0002] # KHMER SIGN BEYYAL +17D9 ; [*0440.0020.0002] # KHMER SIGN PHNAEK MUAN +17DA ; [*0441.0020.0002] # KHMER SIGN KOOMUUT +1800 ; [*03F2.0020.0002] # MONGOLIAN BIRGA +1801 ; [*027F.0020.0002] # MONGOLIAN ELLIPSIS +1802 ; [*0230.0020.0002] # MONGOLIAN COMMA +1803 ; [*0284.0020.0002] # MONGOLIAN FULL STOP +1804 ; [*025D.0020.0002] # MONGOLIAN COLON +1805 ; [*025E.0020.0002] # MONGOLIAN FOUR DOTS 1806 ; [*0211.0020.0002] # MONGOLIAN TODO SOFT HYPHEN 1807 ; [*0212.0020.0002] # MONGOLIAN SIBE SYLLABLE BOUNDARY MARKER -1808 ; [*022D.0020.0002] # MONGOLIAN MANCHU COMMA -1809 ; [*027F.0020.0002] # MONGOLIAN MANCHU FULL STOP +1808 ; [*0231.0020.0002] # MONGOLIAN MANCHU COMMA +1809 ; [*0285.0020.0002] # MONGOLIAN MANCHU FULL STOP 180A ; [.0000.0000.0000] # MONGOLIAN NIRUGU -1940 ; [*0560.0020.0002] # LIMBU SIGN LOO -1944 ; [*0265.0020.0002] # LIMBU EXCLAMATION MARK -1945 ; [*026E.0020.0002] # LIMBU QUESTION MARK -19E0 ; [*0567.0020.0002] # KHMER SYMBOL PATHAMASAT -19E1 ; [*0568.0020.0002] # KHMER SYMBOL MUOY KOET -19E2 ; [*0569.0020.0002] # KHMER SYMBOL PII KOET -19E3 ; [*056A.0020.0002] # KHMER SYMBOL BEI KOET -19E4 ; [*056B.0020.0002] # KHMER SYMBOL BUON KOET -19E5 ; [*056C.0020.0002] # KHMER SYMBOL PRAM KOET -19E6 ; [*056D.0020.0002] # KHMER SYMBOL PRAM-MUOY KOET -19E7 ; [*056E.0020.0002] # KHMER SYMBOL PRAM-PII KOET -19E8 ; [*056F.0020.0002] # KHMER SYMBOL PRAM-BEI KOET -19E9 ; [*0570.0020.0002] # KHMER SYMBOL PRAM-BUON KOET -19EA ; [*0571.0020.0002] # KHMER SYMBOL DAP KOET -19EB ; [*0572.0020.0002] # KHMER SYMBOL DAP-MUOY KOET -19EC ; [*0573.0020.0002] # KHMER SYMBOL DAP-PII KOET -19ED ; [*0574.0020.0002] # KHMER SYMBOL DAP-BEI KOET -19EE ; [*0575.0020.0002] # KHMER SYMBOL DAP-BUON KOET -19EF ; [*0576.0020.0002] # KHMER SYMBOL DAP-PRAM KOET -19F0 ; [*0577.0020.0002] # KHMER SYMBOL TUTEYASAT -19F1 ; [*0578.0020.0002] # KHMER SYMBOL MUOY ROC -19F2 ; [*0579.0020.0002] # KHMER SYMBOL PII ROC -19F3 ; [*057A.0020.0002] # KHMER SYMBOL BEI ROC -19F4 ; [*057B.0020.0002] # KHMER SYMBOL BUON ROC -19F5 ; [*057C.0020.0002] # KHMER SYMBOL PRAM ROC -19F6 ; [*057D.0020.0002] # KHMER SYMBOL PRAM-MUOY ROC -19F7 ; [*057E.0020.0002] # KHMER SYMBOL PRAM-PII ROC -19F8 ; [*057F.0020.0002] # KHMER SYMBOL PRAM-BEI ROC -19F9 ; [*0580.0020.0002] # KHMER SYMBOL PRAM-BUON ROC -19FA ; [*0581.0020.0002] # KHMER SYMBOL DAP ROC -19FB ; [*0582.0020.0002] # KHMER SYMBOL DAP-MUOY ROC -19FC ; [*0583.0020.0002] # KHMER SYMBOL DAP-PII ROC -19FD ; [*0584.0020.0002] # KHMER SYMBOL DAP-BEI ROC -19FE ; [*0585.0020.0002] # KHMER SYMBOL DAP-BUON ROC -19FF ; [*0586.0020.0002] # KHMER SYMBOL DAP-PRAM ROC -1A1E ; [*02CA.0020.0002] # BUGINESE PALLAWA -1A1F ; [*02CB.0020.0002] # BUGINESE END OF SECTION +1940 ; [*0598.0020.0002] # LIMBU SIGN LOO +1944 ; [*026B.0020.0002] # LIMBU EXCLAMATION MARK +1945 ; [*0274.0020.0002] # LIMBU QUESTION MARK +19E0 ; [*059F.0020.0002] # KHMER SYMBOL PATHAMASAT +19E1 ; [*05A0.0020.0002] # KHMER SYMBOL MUOY KOET +19E2 ; [*05A1.0020.0002] # KHMER SYMBOL PII KOET +19E3 ; [*05A2.0020.0002] # KHMER SYMBOL BEI KOET +19E4 ; [*05A3.0020.0002] # KHMER SYMBOL BUON KOET +19E5 ; [*05A4.0020.0002] # KHMER SYMBOL PRAM KOET +19E6 ; [*05A5.0020.0002] # KHMER SYMBOL PRAM-MUOY KOET +19E7 ; [*05A6.0020.0002] # KHMER SYMBOL PRAM-PII KOET +19E8 ; [*05A7.0020.0002] # KHMER SYMBOL PRAM-BEI KOET +19E9 ; [*05A8.0020.0002] # KHMER SYMBOL PRAM-BUON KOET +19EA ; [*05A9.0020.0002] # KHMER SYMBOL DAP KOET +19EB ; [*05AA.0020.0002] # KHMER SYMBOL DAP-MUOY KOET +19EC ; [*05AB.0020.0002] # KHMER SYMBOL DAP-PII KOET +19ED ; [*05AC.0020.0002] # KHMER SYMBOL DAP-BEI KOET +19EE ; [*05AD.0020.0002] # KHMER SYMBOL DAP-BUON KOET +19EF ; [*05AE.0020.0002] # KHMER SYMBOL DAP-PRAM KOET +19F0 ; [*05AF.0020.0002] # KHMER SYMBOL TUTEYASAT +19F1 ; [*05B0.0020.0002] # KHMER SYMBOL MUOY ROC +19F2 ; [*05B1.0020.0002] # KHMER SYMBOL PII ROC +19F3 ; [*05B2.0020.0002] # KHMER SYMBOL BEI ROC +19F4 ; [*05B3.0020.0002] # KHMER SYMBOL BUON ROC +19F5 ; [*05B4.0020.0002] # KHMER SYMBOL PRAM ROC +19F6 ; [*05B5.0020.0002] # KHMER SYMBOL PRAM-MUOY ROC +19F7 ; [*05B6.0020.0002] # KHMER SYMBOL PRAM-PII ROC +19F8 ; [*05B7.0020.0002] # KHMER SYMBOL PRAM-BEI ROC +19F9 ; [*05B8.0020.0002] # KHMER SYMBOL PRAM-BUON ROC +19FA ; [*05B9.0020.0002] # KHMER SYMBOL DAP ROC +19FB ; [*05BA.0020.0002] # KHMER SYMBOL DAP-MUOY ROC +19FC ; [*05BB.0020.0002] # KHMER SYMBOL DAP-PII ROC +19FD ; [*05BC.0020.0002] # KHMER SYMBOL DAP-BEI ROC +19FE ; [*05BD.0020.0002] # KHMER SYMBOL DAP-BUON ROC +19FF ; [*05BE.0020.0002] # KHMER SYMBOL DAP-PRAM ROC +1A1E ; [*02D2.0020.0002] # BUGINESE PALLAWA +1A1F ; [*02D3.0020.0002] # BUGINESE END OF SECTION 1A7F ; [.0000.0000.0000] # TAI THAM COMBINING CRYPTOGRAMMIC DOT -1AA0 ; [*042B.0020.0002] # TAI THAM SIGN WIANG -1AA1 ; [*042C.0020.0002] # TAI THAM SIGN WIANGWAAK -1AA2 ; [*042D.0020.0002] # TAI THAM SIGN SAWAN -1AA3 ; [*042E.0020.0002] # TAI THAM SIGN KEOW -1AA4 ; [*042F.0020.0002] # TAI THAM SIGN HOY -1AA5 ; [*0430.0020.0002] # TAI THAM SIGN DOKMAI -1AA6 ; [*0431.0020.0002] # TAI THAM SIGN REVERSED ROTATED RANA -1AA8 ; [*029E.0020.0002] # TAI THAM SIGN KAAN -1AA9 ; [*029F.0020.0002] # TAI THAM SIGN KAANKUU -1AAA ; [*02A0.0020.0002] # TAI THAM SIGN SATKAAN -1AAB ; [*02A1.0020.0002] # TAI THAM SIGN SATKAANKUU -1AAC ; [*0432.0020.0002] # TAI THAM SIGN HANG -1AAD ; [*0433.0020.0002] # TAI THAM SIGN CAANG -1B5A ; [*02CC.0020.0002] # BALINESE PANTI -1B5B ; [*02CD.0020.0002] # BALINESE PAMADA -1B5C ; [*0281.0020.0002] # BALINESE WINDU -1B5D ; [*025B.0020.0002] # BALINESE CARIK PAMUNGKAH -1B5E ; [*02A2.0020.0002] # BALINESE CARIK SIKI -1B5F ; [*02A3.0020.0002] # BALINESE CARIK PAREREN +1AA0 ; [*0442.0020.0002] # TAI THAM SIGN WIANG +1AA1 ; [*0443.0020.0002] # TAI THAM SIGN WIANGWAAK +1AA2 ; [*0444.0020.0002] # TAI THAM SIGN SAWAN +1AA3 ; [*0445.0020.0002] # TAI THAM SIGN KEOW +1AA4 ; [*0446.0020.0002] # TAI THAM SIGN HOY +1AA5 ; [*0447.0020.0002] # TAI THAM SIGN DOKMAI +1AA6 ; [*0448.0020.0002] # TAI THAM SIGN REVERSED ROTATED RANA +1AA8 ; [*02A5.0020.0002] # TAI THAM SIGN KAAN +1AA9 ; [*02A6.0020.0002] # TAI THAM SIGN KAANKUU +1AAA ; [*02A7.0020.0002] # TAI THAM SIGN SATKAAN +1AAB ; [*02A8.0020.0002] # TAI THAM SIGN SATKAANKUU +1AAC ; [*0449.0020.0002] # TAI THAM SIGN HANG +1AAD ; [*044A.0020.0002] # TAI THAM SIGN CAANG +1B5A ; [*02D4.0020.0002] # BALINESE PANTI +1B5B ; [*02D5.0020.0002] # BALINESE PAMADA +1B5C ; [*0287.0020.0002] # BALINESE WINDU +1B5D ; [*0261.0020.0002] # BALINESE CARIK PAMUNGKAH +1B5E ; [*02A9.0020.0002] # BALINESE CARIK SIKI +1B5F ; [*02AA.0020.0002] # BALINESE CARIK PAREREN 1B60 ; [*0210.0020.0002] # BALINESE PAMENENG -1B61 ; [*0587.0020.0002] # BALINESE MUSICAL SYMBOL DONG -1B62 ; [*0588.0020.0002] # BALINESE MUSICAL SYMBOL DENG -1B63 ; [*0589.0020.0002] # BALINESE MUSICAL SYMBOL DUNG -1B64 ; [*058A.0020.0002] # BALINESE MUSICAL SYMBOL DANG -1B65 ; [*058B.0020.0002] # BALINESE MUSICAL SYMBOL DANG SURANG -1B66 ; [*058C.0020.0002] # BALINESE MUSICAL SYMBOL DING -1B67 ; [*058D.0020.0002] # BALINESE MUSICAL SYMBOL DAENG -1B68 ; [*058E.0020.0002] # BALINESE MUSICAL SYMBOL DEUNG -1B69 ; [*058F.0020.0002] # BALINESE MUSICAL SYMBOL DAING -1B6A ; [*0590.0020.0002] # BALINESE MUSICAL SYMBOL DANG GEDE +1B61 ; [*05BF.0020.0002] # BALINESE MUSICAL SYMBOL DONG +1B62 ; [*05C0.0020.0002] # BALINESE MUSICAL SYMBOL DENG +1B63 ; [*05C1.0020.0002] # BALINESE MUSICAL SYMBOL DUNG +1B64 ; [*05C2.0020.0002] # BALINESE MUSICAL SYMBOL DANG +1B65 ; [*05C3.0020.0002] # BALINESE MUSICAL SYMBOL DANG SURANG +1B66 ; [*05C4.0020.0002] # BALINESE MUSICAL SYMBOL DING +1B67 ; [*05C5.0020.0002] # BALINESE MUSICAL SYMBOL DAENG +1B68 ; [*05C6.0020.0002] # BALINESE MUSICAL SYMBOL DEUNG +1B69 ; [*05C7.0020.0002] # BALINESE MUSICAL SYMBOL DAING +1B6A ; [*05C8.0020.0002] # BALINESE MUSICAL SYMBOL DANG GEDE 1B6B ; [.0000.0000.0000] # BALINESE MUSICAL SYMBOL COMBINING TEGEH 1B6C ; [.0000.0000.0000] # BALINESE MUSICAL SYMBOL COMBINING ENDEP 1B6D ; [.0000.0000.0000] # BALINESE MUSICAL SYMBOL COMBINING KEMPUL @@ -1048,34 +1065,34 @@ E01EF ; [.0000.0000.0000] # VARIATION SELECTOR-256 1B71 ; [.0000.0000.0000] # BALINESE MUSICAL SYMBOL COMBINING KEMPLI WITH JEGOGAN 1B72 ; [.0000.0000.0000] # BALINESE MUSICAL SYMBOL COMBINING BENDE 1B73 ; [.0000.0000.0000] # BALINESE MUSICAL SYMBOL COMBINING GONG -1B74 ; [*0591.0020.0002] # BALINESE MUSICAL SYMBOL RIGHT-HAND OPEN DUG -1B75 ; [*0592.0020.0002] # BALINESE MUSICAL SYMBOL RIGHT-HAND OPEN DAG -1B76 ; [*0593.0020.0002] # BALINESE MUSICAL SYMBOL RIGHT-HAND CLOSED TUK -1B77 ; [*0594.0020.0002] # BALINESE MUSICAL SYMBOL RIGHT-HAND CLOSED TAK -1B78 ; [*0595.0020.0002] # BALINESE MUSICAL SYMBOL LEFT-HAND OPEN PANG -1B79 ; [*0596.0020.0002] # BALINESE MUSICAL SYMBOL LEFT-HAND OPEN PUNG -1B7A ; [*0597.0020.0002] # BALINESE MUSICAL SYMBOL LEFT-HAND CLOSED PLAK -1B7B ; [*0598.0020.0002] # BALINESE MUSICAL SYMBOL LEFT-HAND CLOSED PLUK -1B7C ; [*0599.0020.0002] # BALINESE MUSICAL SYMBOL LEFT-HAND OPEN PING -1BFC ; [*0440.0020.0002] # BATAK SYMBOL BINDU NA METEK -1BFD ; [*0441.0020.0002] # BATAK SYMBOL BINDU PINARBORAS -1BFE ; [*0442.0020.0002] # BATAK SYMBOL BINDU JUDUL -1BFF ; [*0443.0020.0002] # BATAK SYMBOL BINDU PANGOLAT -1C3B ; [*0293.0020.0002] # LEPCHA PUNCTUATION TA-ROL -1C3C ; [*0294.0020.0002] # LEPCHA PUNCTUATION NYET THYOOM TA-ROL -1C3D ; [*0421.0020.0002] # LEPCHA PUNCTUATION CER-WA -1C3E ; [*0422.0020.0002] # LEPCHA PUNCTUATION TSHOOK CER-WA -1C3F ; [*0423.0020.0002] # LEPCHA PUNCTUATION TSHOOK -1C7E ; [*02C3.0020.0002] # OL CHIKI PUNCTUATION MUCAAD -1C7F ; [*02C4.0020.0002] # OL CHIKI PUNCTUATION DOUBLE MUCAAD -1CC0 ; [*0435.0020.0002] # SUNDANESE PUNCTUATION BINDU SURYA -1CC1 ; [*0436.0020.0002] # SUNDANESE PUNCTUATION BINDU PANGLONG -1CC2 ; [*0437.0020.0002] # SUNDANESE PUNCTUATION BINDU PURNAMA -1CC3 ; [*0438.0020.0002] # SUNDANESE PUNCTUATION BINDU CAKRA -1CC4 ; [*0439.0020.0002] # SUNDANESE PUNCTUATION BINDU LEU SATANGA -1CC5 ; [*043A.0020.0002] # SUNDANESE PUNCTUATION BINDU KA SATANGA -1CC6 ; [*043B.0020.0002] # SUNDANESE PUNCTUATION BINDU DA SATANGA -1CC7 ; [*043C.0020.0002] # SUNDANESE PUNCTUATION BINDU BA SATANGA +1B74 ; [*05C9.0020.0002] # BALINESE MUSICAL SYMBOL RIGHT-HAND OPEN DUG +1B75 ; [*05CA.0020.0002] # BALINESE MUSICAL SYMBOL RIGHT-HAND OPEN DAG +1B76 ; [*05CB.0020.0002] # BALINESE MUSICAL SYMBOL RIGHT-HAND CLOSED TUK +1B77 ; [*05CC.0020.0002] # BALINESE MUSICAL SYMBOL RIGHT-HAND CLOSED TAK +1B78 ; [*05CD.0020.0002] # BALINESE MUSICAL SYMBOL LEFT-HAND OPEN PANG +1B79 ; [*05CE.0020.0002] # BALINESE MUSICAL SYMBOL LEFT-HAND OPEN PUNG +1B7A ; [*05CF.0020.0002] # BALINESE MUSICAL SYMBOL LEFT-HAND CLOSED PLAK +1B7B ; [*05D0.0020.0002] # BALINESE MUSICAL SYMBOL LEFT-HAND CLOSED PLUK +1B7C ; [*05D1.0020.0002] # BALINESE MUSICAL SYMBOL LEFT-HAND OPEN PING +1BFC ; [*0456.0020.0002] # BATAK SYMBOL BINDU NA METEK +1BFD ; [*0457.0020.0002] # BATAK SYMBOL BINDU PINARBORAS +1BFE ; [*0458.0020.0002] # BATAK SYMBOL BINDU JUDUL +1BFF ; [*0459.0020.0002] # BATAK SYMBOL BINDU PANGOLAT +1C3B ; [*029A.0020.0002] # LEPCHA PUNCTUATION TA-ROL +1C3C ; [*029B.0020.0002] # LEPCHA PUNCTUATION NYET THYOOM TA-ROL +1C3D ; [*0438.0020.0002] # LEPCHA PUNCTUATION CER-WA +1C3E ; [*0439.0020.0002] # LEPCHA PUNCTUATION TSHOOK CER-WA +1C3F ; [*043A.0020.0002] # LEPCHA PUNCTUATION TSHOOK +1C7E ; [*02CB.0020.0002] # OL CHIKI PUNCTUATION MUCAAD +1C7F ; [*02CC.0020.0002] # OL CHIKI PUNCTUATION DOUBLE MUCAAD +1CC0 ; [*044B.0020.0002] # SUNDANESE PUNCTUATION BINDU SURYA +1CC1 ; [*044C.0020.0002] # SUNDANESE PUNCTUATION BINDU PANGLONG +1CC2 ; [*044D.0020.0002] # SUNDANESE PUNCTUATION BINDU PURNAMA +1CC3 ; [*044E.0020.0002] # SUNDANESE PUNCTUATION BINDU CAKRA +1CC4 ; [*044F.0020.0002] # SUNDANESE PUNCTUATION BINDU LEU SATANGA +1CC5 ; [*0450.0020.0002] # SUNDANESE PUNCTUATION BINDU KA SATANGA +1CC6 ; [*0451.0020.0002] # SUNDANESE PUNCTUATION BINDU DA SATANGA +1CC7 ; [*0452.0020.0002] # SUNDANESE PUNCTUATION BINDU BA SATANGA 1CD0 ; [.0000.0000.0000] # VEDIC TONE KARSHANA 1CD1 ; [.0000.0000.0000] # VEDIC TONE SHARA 1CD2 ; [.0000.0000.0000] # VEDIC TONE PRENKHA @@ -1105,21 +1122,21 @@ E01EF ; [.0000.0000.0000] # VARIATION SELECTOR-256 1CF7 ; [.0000.0000.0000] # VEDIC SIGN ATIKRAMA 1CF8 ; [.0000.0000.0000] # VEDIC TONE RING ABOVE 1CF9 ; [.0000.0000.0000] # VEDIC TONE DOUBLE RING ABOVE -1FBD ; [*04A4.0020.0002] # GREEK KORONIS -1FBF ; [*04A4.0020.0002] # GREEK PSILI -1FC0 ; [*04A6.0020.0002] # GREEK PERISPOMENI -1FC1 ; [*049F.0020.0002][.0000.002A.0002] # GREEK DIALYTIKA AND PERISPOMENI -1FCD ; [*04A4.0020.0002][.0000.0025.0002] # GREEK PSILI AND VARIA -1FCE ; [*04A4.0020.0002][.0000.0024.0002] # GREEK PSILI AND OXIA -1FCF ; [*04A4.0020.0002][.0000.002A.0002] # GREEK PSILI AND PERISPOMENI -1FDD ; [*04A5.0020.0002][.0000.0025.0002] # GREEK DASIA AND VARIA -1FDE ; [*04A5.0020.0002][.0000.0024.0002] # GREEK DASIA AND OXIA -1FDF ; [*04A5.0020.0002][.0000.002A.0002] # GREEK DASIA AND PERISPOMENI -1FED ; [*049F.0020.0002][.0000.0025.0002] # GREEK DIALYTIKA AND VARIA -1FEE ; [*049F.0020.0002][.0000.0024.0002] # GREEK DIALYTIKA AND OXIA -1FEF ; [*0498.0020.0002] # GREEK VARIA -1FFD ; [*0499.0020.0002] # GREEK OXIA -1FFE ; [*04A5.0020.0002] # GREEK DASIA +1FBD ; [*04C0.0020.0002] # GREEK KORONIS +1FBF ; [*04C0.0020.0002] # GREEK PSILI +1FC0 ; [*04C2.0020.0002] # GREEK PERISPOMENI +1FC1 ; [*04BB.0020.0002][.0000.002A.0002] # GREEK DIALYTIKA AND PERISPOMENI +1FCD ; [*04C0.0020.0002][.0000.0025.0002] # GREEK PSILI AND VARIA +1FCE ; [*04C0.0020.0002][.0000.0024.0002] # GREEK PSILI AND OXIA +1FCF ; [*04C0.0020.0002][.0000.002A.0002] # GREEK PSILI AND PERISPOMENI +1FDD ; [*04C1.0020.0002][.0000.0025.0002] # GREEK DASIA AND VARIA +1FDE ; [*04C1.0020.0002][.0000.0024.0002] # GREEK DASIA AND OXIA +1FDF ; [*04C1.0020.0002][.0000.002A.0002] # GREEK DASIA AND PERISPOMENI +1FED ; [*04BB.0020.0002][.0000.0025.0002] # GREEK DIALYTIKA AND VARIA +1FEE ; [*04BB.0020.0002][.0000.0024.0002] # GREEK DIALYTIKA AND OXIA +1FEF ; [*04B4.0020.0002] # GREEK VARIA +1FFD ; [*04B5.0020.0002] # GREEK OXIA +1FFE ; [*04C1.0020.0002] # GREEK DASIA 2000 ; [*0209.0020.0004] # EN QUAD 2001 ; [*0209.0020.0004] # EM QUAD 2002 ; [*0209.0020.0004] # EN SPACE @@ -1137,2876 +1154,2931 @@ E01EF ; [.0000.0000.0000] # VARIATION SELECTOR-256 2013 ; [*0215.0020.0002] # EN DASH 2014 ; [*0216.0020.0002] # EM DASH 2015 ; [*0217.0020.0002] # HORIZONTAL BAR -2016 ; [*0384.0020.0002] # DOUBLE VERTICAL LINE +2016 ; [*0394.0020.0002] # DOUBLE VERTICAL LINE 2017 ; [*020C.0020.0002] # DOUBLE LOW LINE -2018 ; [*0307.0020.0002] # LEFT SINGLE QUOTATION MARK -2019 ; [*0308.0020.0002] # RIGHT SINGLE QUOTATION MARK -201A ; [*0309.0020.0002] # SINGLE LOW-9 QUOTATION MARK -201B ; [*030A.0020.0002] # SINGLE HIGH-REVERSED-9 QUOTATION MARK -201C ; [*030E.0020.0002] # LEFT DOUBLE QUOTATION MARK -201D ; [*030F.0020.0002] # RIGHT DOUBLE QUOTATION MARK -201E ; [*0310.0020.0002] # DOUBLE LOW-9 QUOTATION MARK -201F ; [*0311.0020.0002] # DOUBLE HIGH-REVERSED-9 QUOTATION MARK -2020 ; [*03A0.0020.0002] # DAGGER -2021 ; [*03A1.0020.0002] # DOUBLE DAGGER -2022 ; [*03A5.0020.0002] # BULLET -2023 ; [*03A6.0020.0002] # TRIANGULAR BULLET -2024 ; [*0278.0020.0004] # ONE DOT LEADER -2025 ; [*0278.0020.0004][*0278.0020.0004] # TWO DOT LEADER -2026 ; [*0278.0020.0004][*0278.0020.0004][*0278.0020.0004] # HORIZONTAL ELLIPSIS -2027 ; [*03A7.0020.0002] # HYPHENATION POINT +2018 ; [*0317.0020.0002] # LEFT SINGLE QUOTATION MARK +2019 ; [*0318.0020.0002] # RIGHT SINGLE QUOTATION MARK +201A ; [*0319.0020.0002] # SINGLE LOW-9 QUOTATION MARK +201B ; [*031A.0020.0002] # SINGLE HIGH-REVERSED-9 QUOTATION MARK +201C ; [*031E.0020.0002] # LEFT DOUBLE QUOTATION MARK +201D ; [*031F.0020.0002] # RIGHT DOUBLE QUOTATION MARK +201E ; [*0320.0020.0002] # DOUBLE LOW-9 QUOTATION MARK +201F ; [*0321.0020.0002] # DOUBLE HIGH-REVERSED-9 QUOTATION MARK +2020 ; [*03B3.0020.0002] # DAGGER +2021 ; [*03B4.0020.0002] # DOUBLE DAGGER +2022 ; [*03B9.0020.0002] # BULLET +2023 ; [*03BA.0020.0002] # TRIANGULAR BULLET +2024 ; [*027E.0020.0004] # ONE DOT LEADER +2025 ; [*027E.0020.0004][*027E.0020.0004] # TWO DOT LEADER +2026 ; [*027E.0020.0004][*027E.0020.0004][*027E.0020.0004] # HORIZONTAL ELLIPSIS +2027 ; [*03BB.0020.0002] # HYPHENATION POINT 2028 ; [*0207.0020.0002] # LINE SEPARATOR 2029 ; [*0208.0020.0002] # PARAGRAPH SEPARATOR 202F ; [*0209.0020.001B] # NARROW NO-BREAK SPACE -2030 ; [*039C.0020.0002] # PER MILLE SIGN -2031 ; [*039E.0020.0002] # PER TEN THOUSAND SIGN -2032 ; [*03AB.0020.0002] # PRIME -2033 ; [*03AB.0020.0004][*03AB.0020.0004] # DOUBLE PRIME -2034 ; [*03AB.0020.0004][*03AB.0020.0004][*03AB.0020.0004] # TRIPLE PRIME -2035 ; [*03AC.0020.0002] # REVERSED PRIME -2036 ; [*03AC.0020.0004][*03AC.0020.0004] # REVERSED DOUBLE PRIME -2037 ; [*03AC.0020.0004][*03AC.0020.0004][*03AC.0020.0004] # REVERSED TRIPLE PRIME -2038 ; [*03AF.0020.0002] # CARET -2039 ; [*030B.0020.0002] # SINGLE LEFT-POINTING ANGLE QUOTATION MARK -203A ; [*030C.0020.0002] # SINGLE RIGHT-POINTING ANGLE QUOTATION MARK -203B ; [*03B0.0020.0002] # REFERENCE MARK -203C ; [*0261.0020.0004][*0261.0020.0004] # DOUBLE EXCLAMATION MARK -203D ; [*0276.0020.0002] # INTERROBANG +2030 ; [*03AF.0020.0002] # PER MILLE SIGN +2031 ; [*03B1.0020.0002] # PER TEN THOUSAND SIGN +2032 ; [*03BF.0020.0002] # PRIME +2033 ; [*03BF.0020.0004][*03BF.0020.0004] # DOUBLE PRIME +2034 ; [*03BF.0020.0004][*03BF.0020.0004][*03BF.0020.0004] # TRIPLE PRIME +2035 ; [*03C0.0020.0002] # REVERSED PRIME +2036 ; [*03C0.0020.0004][*03C0.0020.0004] # REVERSED DOUBLE PRIME +2037 ; [*03C0.0020.0004][*03C0.0020.0004][*03C0.0020.0004] # REVERSED TRIPLE PRIME +2038 ; [*03C3.0020.0002] # CARET +2039 ; [*031B.0020.0002] # SINGLE LEFT-POINTING ANGLE QUOTATION MARK +203A ; [*031C.0020.0002] # SINGLE RIGHT-POINTING ANGLE QUOTATION MARK +203B ; [*03C4.0020.0002] # REFERENCE MARK +203C ; [*0267.0020.0004][*0267.0020.0004] # DOUBLE EXCLAMATION MARK +203D ; [*027C.0020.0002] # INTERROBANG 203E ; [*020A.0020.0002] # OVERLINE -203F ; [*03B1.0020.0002] # UNDERTIE -2040 ; [*03B3.0020.0002] # CHARACTER TIE -2041 ; [*03B5.0020.0002] # CARET INSERTION POINT -2042 ; [*03B6.0020.0002] # ASTERISM -2043 ; [*03A8.0020.0002] # HYPHEN BULLET -2044 ; [*063C.0020.0002] # FRACTION SLASH -2045 ; [*0324.0020.0002] # LEFT SQUARE BRACKET WITH QUILL -2046 ; [*0325.0020.0002] # RIGHT SQUARE BRACKET WITH QUILL -2047 ; [*0267.0020.0004][*0267.0020.0004] # DOUBLE QUESTION MARK -2048 ; [*0267.0020.0004][*0261.0020.0004] # QUESTION EXCLAMATION MARK -2049 ; [*0261.0020.0004][*0267.0020.0004] # EXCLAMATION QUESTION MARK -204A ; [*0398.0020.0002] # TIRONIAN SIGN ET -204B ; [*038D.0020.0002] # REVERSED PILCROW SIGN -204C ; [*03A9.0020.0002] # BLACK LEFTWARDS BULLET -204D ; [*03AA.0020.0002] # BLACK RIGHTWARDS BULLET -204E ; [*0391.0020.0002] # LOW ASTERISK -204F ; [*0236.0020.0002] # REVERSED SEMICOLON -2050 ; [*03B4.0020.0002] # CLOSE UP -2051 ; [*0392.0020.0002] # TWO ASTERISKS ALIGNED VERTICALLY -2052 ; [*0638.0020.0002] # COMMERCIAL MINUS SIGN +203F ; [*03C5.0020.0002] # UNDERTIE +2040 ; [*03C7.0020.0002] # CHARACTER TIE +2041 ; [*03C9.0020.0002] # CARET INSERTION POINT +2042 ; [*03CA.0020.0002] # ASTERISM +2043 ; [*03BC.0020.0002] # HYPHEN BULLET +2044 ; [*0676.0020.0002] # FRACTION SLASH +2045 ; [*0334.0020.0002] # LEFT SQUARE BRACKET WITH QUILL +2046 ; [*0335.0020.0002] # RIGHT SQUARE BRACKET WITH QUILL +2047 ; [*026D.0020.0004][*026D.0020.0004] # DOUBLE QUESTION MARK +2048 ; [*026D.0020.0004][*0267.0020.0004] # QUESTION EXCLAMATION MARK +2049 ; [*0267.0020.0004][*026D.0020.0004] # EXCLAMATION QUESTION MARK +204A ; [*03AA.0020.0002] # TIRONIAN SIGN ET +204B ; [*039D.0020.0002] # REVERSED PILCROW SIGN +204C ; [*03BD.0020.0002] # BLACK LEFTWARDS BULLET +204D ; [*03BE.0020.0002] # BLACK RIGHTWARDS BULLET +204E ; [*03A2.0020.0002] # LOW ASTERISK +204F ; [*023C.0020.0002] # REVERSED SEMICOLON +2050 ; [*03C8.0020.0002] # CLOSE UP +2051 ; [*03A3.0020.0002] # TWO ASTERISKS ALIGNED VERTICALLY +2052 ; [*0672.0020.0002] # COMMERCIAL MINUS SIGN 2053 ; [*021A.0020.0002] # SWUNG DASH -2054 ; [*03B2.0020.0002] # INVERTED UNDERTIE -2055 ; [*02E9.0020.0002] # FLOWER PUNCTUATION MARK -2056 ; [*02EA.0020.0002] # THREE DOT PUNCTUATION -2057 ; [*03AB.0020.0004][*03AB.0020.0004][*03AB.0020.0004][*03AB.0020.0004] # QUADRUPLE PRIME -2058 ; [*02EB.0020.0002] # FOUR DOT PUNCTUATION -2059 ; [*02EC.0020.0002] # FIVE DOT PUNCTUATION -205A ; [*02ED.0020.0002] # TWO DOT PUNCTUATION -205B ; [*02EE.0020.0002] # FOUR DOT MARK -205C ; [*02EF.0020.0002] # DOTTED CROSS -205D ; [*02F0.0020.0002] # TRICOLON -205E ; [*02F1.0020.0002] # VERTICAL FOUR DOTS +2054 ; [*03C6.0020.0002] # INVERTED UNDERTIE +2055 ; [*02F9.0020.0002] # FLOWER PUNCTUATION MARK +2056 ; [*02FA.0020.0002] # THREE DOT PUNCTUATION +2057 ; [*03BF.0020.0004][*03BF.0020.0004][*03BF.0020.0004][*03BF.0020.0004] # QUADRUPLE PRIME +2058 ; [*02FB.0020.0002] # FOUR DOT PUNCTUATION +2059 ; [*02FC.0020.0002] # FIVE DOT PUNCTUATION +205A ; [*02FD.0020.0002] # TWO DOT PUNCTUATION +205B ; [*02FE.0020.0002] # FOUR DOT MARK +205C ; [*02FF.0020.0002] # DOTTED CROSS +205D ; [*0300.0020.0002] # TRICOLON +205E ; [*0301.0020.0002] # VERTICAL FOUR DOTS 205F ; [*0209.0020.0004] # MEDIUM MATHEMATICAL SPACE 2061 ; [.0000.0000.0000] # FUNCTION APPLICATION 2062 ; [.0000.0000.0000] # INVISIBLE TIMES 2063 ; [.0000.0000.0000] # INVISIBLE SEPARATOR 2064 ; [.0000.0000.0000] # INVISIBLE PLUS -207A ; [*062C.0020.0014] # SUPERSCRIPT PLUS SIGN -207B ; [*0637.0020.0014] # SUPERSCRIPT MINUS -207C ; [*0631.0020.0014] # SUPERSCRIPT EQUALS SIGN -207D ; [*0318.0020.0014] # SUPERSCRIPT LEFT PARENTHESIS -207E ; [*0319.0020.0014] # SUPERSCRIPT RIGHT PARENTHESIS -208A ; [*062C.0020.0015] # SUBSCRIPT PLUS SIGN -208B ; [*0637.0020.0015] # SUBSCRIPT MINUS -208C ; [*0631.0020.0015] # SUBSCRIPT EQUALS SIGN -208D ; [*0318.0020.0015] # SUBSCRIPT LEFT PARENTHESIS -208E ; [*0319.0020.0015] # SUBSCRIPT RIGHT PARENTHESIS -2104 ; [*059C.0020.0002] # CENTRE LINE SYMBOL -2108 ; [*059D.0020.0002] # SCRUPLE -2114 ; [*059E.0020.0002] # L B BAR SYMBOL -2117 ; [*059F.0020.0002] # SOUND RECORDING COPYRIGHT -2118 ; [*05A0.0020.0002] # SCRIPT CAPITAL P -211E ; [*05A1.0020.0002] # PRESCRIPTION TAKE -211F ; [*05A2.0020.0002] # RESPONSE -2123 ; [*05A3.0020.0002] # VERSICLE -2125 ; [*05A4.0020.0002] # OUNCE SIGN -2127 ; [*05A5.0020.0002] # INVERTED OHM SIGN -2129 ; [*05A6.0020.0002] # TURNED GREEK SMALL LETTER IOTA -212E ; [*05A7.0020.0002] # ESTIMATED SYMBOL -213A ; [*05A8.0020.0002] # ROTATED CAPITAL Q -2140 ; [*062B.0020.0005] # DOUBLE-STRUCK N-ARY SUMMATION -2141 ; [*05A9.0020.0002] # TURNED SANS-SERIF CAPITAL G -2142 ; [*05AA.0020.0002] # TURNED SANS-SERIF CAPITAL L -2143 ; [*05AB.0020.0002] # REVERSED SANS-SERIF CAPITAL L -2144 ; [*05AC.0020.0002] # TURNED SANS-SERIF CAPITAL Y -214A ; [*05AD.0020.0002] # PROPERTY LINE -214B ; [*06C7.0020.0002] # TURNED AMPERSAND -214C ; [*05AE.0020.0002] # PER SIGN -214F ; [*05AF.0020.0002] # SYMBOL FOR SAMARITAN SOURCE -2180 ; [*1B2A.0020.0002] # ROMAN NUMERAL ONE THOUSAND C D -2181 ; [*1B2B.0020.0002] # ROMAN NUMERAL FIVE THOUSAND -2182 ; [*1B2C.0020.0002] # ROMAN NUMERAL TEN THOUSAND -2186 ; [*1B2D.0020.0002] # ROMAN NUMERAL FIFTY EARLY FORM -2187 ; [*1B2E.0020.0002] # ROMAN NUMERAL FIFTY THOUSAND -2188 ; [*1B2F.0020.0002] # ROMAN NUMERAL ONE HUNDRED THOUSAND -218A ; [*05B0.0020.0002] # TURNED DIGIT TWO -218B ; [*05B1.0020.0002] # TURNED DIGIT THREE -2190 ; [*05B2.0020.0002] # LEFTWARDS ARROW -2191 ; [*05B4.0020.0002] # UPWARDS ARROW -2192 ; [*05B3.0020.0002] # RIGHTWARDS ARROW -2193 ; [*05B5.0020.0002] # DOWNWARDS ARROW -2194 ; [*05B6.0020.0002] # LEFT RIGHT ARROW -2195 ; [*05B7.0020.0002] # UP DOWN ARROW -2196 ; [*05B8.0020.0002] # NORTH WEST ARROW -2197 ; [*05B9.0020.0002] # NORTH EAST ARROW -2198 ; [*05BA.0020.0002] # SOUTH EAST ARROW -2199 ; [*05BB.0020.0002] # SOUTH WEST ARROW -219A ; [*05B2.0020.0002][.0000.002F.0002] # LEFTWARDS ARROW WITH STROKE -219B ; [*05B3.0020.0002][.0000.002F.0002] # RIGHTWARDS ARROW WITH STROKE -219C ; [*05BC.0020.0002] # LEFTWARDS WAVE ARROW -219D ; [*05BD.0020.0002] # RIGHTWARDS WAVE ARROW -219E ; [*05BE.0020.0002] # LEFTWARDS TWO HEADED ARROW -219F ; [*05BF.0020.0002] # UPWARDS TWO HEADED ARROW -21A0 ; [*05C0.0020.0002] # RIGHTWARDS TWO HEADED ARROW -21A1 ; [*05C1.0020.0002] # DOWNWARDS TWO HEADED ARROW -21A2 ; [*05C2.0020.0002] # LEFTWARDS ARROW WITH TAIL -21A3 ; [*05C3.0020.0002] # RIGHTWARDS ARROW WITH TAIL -21A4 ; [*05C4.0020.0002] # LEFTWARDS ARROW FROM BAR -21A5 ; [*05C5.0020.0002] # UPWARDS ARROW FROM BAR -21A6 ; [*05C6.0020.0002] # RIGHTWARDS ARROW FROM BAR -21A7 ; [*05C7.0020.0002] # DOWNWARDS ARROW FROM BAR -21A8 ; [*05C8.0020.0002] # UP DOWN ARROW WITH BASE -21A9 ; [*05C9.0020.0002] # LEFTWARDS ARROW WITH HOOK -21AA ; [*05CA.0020.0002] # RIGHTWARDS ARROW WITH HOOK -21AB ; [*05CB.0020.0002] # LEFTWARDS ARROW WITH LOOP -21AC ; [*05CC.0020.0002] # RIGHTWARDS ARROW WITH LOOP -21AD ; [*05CD.0020.0002] # LEFT RIGHT WAVE ARROW -21AE ; [*05B6.0020.0002][.0000.002F.0002] # LEFT RIGHT ARROW WITH STROKE -21AF ; [*05CE.0020.0002] # DOWNWARDS ZIGZAG ARROW -21B0 ; [*05CF.0020.0002] # UPWARDS ARROW WITH TIP LEFTWARDS -21B1 ; [*05D0.0020.0002] # UPWARDS ARROW WITH TIP RIGHTWARDS -21B2 ; [*05D1.0020.0002] # DOWNWARDS ARROW WITH TIP LEFTWARDS -21B3 ; [*05D2.0020.0002] # DOWNWARDS ARROW WITH TIP RIGHTWARDS -21B4 ; [*05D3.0020.0002] # RIGHTWARDS ARROW WITH CORNER DOWNWARDS -21B5 ; [*05D4.0020.0002] # DOWNWARDS ARROW WITH CORNER LEFTWARDS -21B6 ; [*05D5.0020.0002] # ANTICLOCKWISE TOP SEMICIRCLE ARROW -21B7 ; [*05D6.0020.0002] # CLOCKWISE TOP SEMICIRCLE ARROW -21B8 ; [*05D7.0020.0002] # NORTH WEST ARROW TO LONG BAR -21B9 ; [*05D8.0020.0002] # LEFTWARDS ARROW TO BAR OVER RIGHTWARDS ARROW TO BAR -21BA ; [*05D9.0020.0002] # ANTICLOCKWISE OPEN CIRCLE ARROW -21BB ; [*05DA.0020.0002] # CLOCKWISE OPEN CIRCLE ARROW -21BC ; [*05DB.0020.0002] # LEFTWARDS HARPOON WITH BARB UPWARDS -21BD ; [*05DC.0020.0002] # LEFTWARDS HARPOON WITH BARB DOWNWARDS -21BE ; [*05DD.0020.0002] # UPWARDS HARPOON WITH BARB RIGHTWARDS -21BF ; [*05DE.0020.0002] # UPWARDS HARPOON WITH BARB LEFTWARDS -21C0 ; [*05DF.0020.0002] # RIGHTWARDS HARPOON WITH BARB UPWARDS -21C1 ; [*05E0.0020.0002] # RIGHTWARDS HARPOON WITH BARB DOWNWARDS -21C2 ; [*05E1.0020.0002] # DOWNWARDS HARPOON WITH BARB RIGHTWARDS -21C3 ; [*05E2.0020.0002] # DOWNWARDS HARPOON WITH BARB LEFTWARDS -21C4 ; [*05E3.0020.0002] # RIGHTWARDS ARROW OVER LEFTWARDS ARROW -21C5 ; [*05E4.0020.0002] # UPWARDS ARROW LEFTWARDS OF DOWNWARDS ARROW -21C6 ; [*05E5.0020.0002] # LEFTWARDS ARROW OVER RIGHTWARDS ARROW -21C7 ; [*05E6.0020.0002] # LEFTWARDS PAIRED ARROWS -21C8 ; [*05E7.0020.0002] # UPWARDS PAIRED ARROWS -21C9 ; [*05E8.0020.0002] # RIGHTWARDS PAIRED ARROWS -21CA ; [*05E9.0020.0002] # DOWNWARDS PAIRED ARROWS -21CB ; [*05EA.0020.0002] # LEFTWARDS HARPOON OVER RIGHTWARDS HARPOON -21CC ; [*05EB.0020.0002] # RIGHTWARDS HARPOON OVER LEFTWARDS HARPOON -21CD ; [*05EC.0020.0002][.0000.002F.0002] # LEFTWARDS DOUBLE ARROW WITH STROKE -21CE ; [*05F0.0020.0002][.0000.002F.0002] # LEFT RIGHT DOUBLE ARROW WITH STROKE -21CF ; [*05EE.0020.0002][.0000.002F.0002] # RIGHTWARDS DOUBLE ARROW WITH STROKE -21D0 ; [*05EC.0020.0002] # LEFTWARDS DOUBLE ARROW -21D1 ; [*05ED.0020.0002] # UPWARDS DOUBLE ARROW -21D2 ; [*05EE.0020.0002] # RIGHTWARDS DOUBLE ARROW -21D3 ; [*05EF.0020.0002] # DOWNWARDS DOUBLE ARROW -21D4 ; [*05F0.0020.0002] # LEFT RIGHT DOUBLE ARROW -21D5 ; [*05F1.0020.0002] # UP DOWN DOUBLE ARROW -21D6 ; [*05F2.0020.0002] # NORTH WEST DOUBLE ARROW -21D7 ; [*05F3.0020.0002] # NORTH EAST DOUBLE ARROW -21D8 ; [*05F4.0020.0002] # SOUTH EAST DOUBLE ARROW -21D9 ; [*05F5.0020.0002] # SOUTH WEST DOUBLE ARROW -21DA ; [*05F6.0020.0002] # LEFTWARDS TRIPLE ARROW -21DB ; [*05F7.0020.0002] # RIGHTWARDS TRIPLE ARROW -21DC ; [*05F8.0020.0002] # LEFTWARDS SQUIGGLE ARROW -21DD ; [*05F9.0020.0002] # RIGHTWARDS SQUIGGLE ARROW -21DE ; [*05FA.0020.0002] # UPWARDS ARROW WITH DOUBLE STROKE -21DF ; [*05FB.0020.0002] # DOWNWARDS ARROW WITH DOUBLE STROKE -21E0 ; [*05FC.0020.0002] # LEFTWARDS DASHED ARROW -21E1 ; [*05FD.0020.0002] # UPWARDS DASHED ARROW -21E2 ; [*05FE.0020.0002] # RIGHTWARDS DASHED ARROW -21E3 ; [*05FF.0020.0002] # DOWNWARDS DASHED ARROW -21E4 ; [*0600.0020.0002] # LEFTWARDS ARROW TO BAR -21E5 ; [*0601.0020.0002] # RIGHTWARDS ARROW TO BAR -21E6 ; [*0602.0020.0002] # LEFTWARDS WHITE ARROW -21E7 ; [*0603.0020.0002] # UPWARDS WHITE ARROW -21E8 ; [*0604.0020.0002] # RIGHTWARDS WHITE ARROW -21E9 ; [*0605.0020.0002] # DOWNWARDS WHITE ARROW -21EA ; [*0606.0020.0002] # UPWARDS WHITE ARROW FROM BAR -21EB ; [*0607.0020.0002] # UPWARDS WHITE ARROW ON PEDESTAL -21EC ; [*0608.0020.0002] # UPWARDS WHITE ARROW ON PEDESTAL WITH HORIZONTAL BAR -21ED ; [*0609.0020.0002] # UPWARDS WHITE ARROW ON PEDESTAL WITH VERTICAL BAR -21EE ; [*060A.0020.0002] # UPWARDS WHITE DOUBLE ARROW -21EF ; [*060B.0020.0002] # UPWARDS WHITE DOUBLE ARROW ON PEDESTAL -21F0 ; [*060C.0020.0002] # RIGHTWARDS WHITE ARROW FROM WALL -21F1 ; [*060D.0020.0002] # NORTH WEST ARROW TO CORNER -21F2 ; [*060E.0020.0002] # SOUTH EAST ARROW TO CORNER -21F3 ; [*060F.0020.0002] # UP DOWN WHITE ARROW -21F4 ; [*0610.0020.0002] # RIGHT ARROW WITH SMALL CIRCLE -21F5 ; [*0611.0020.0002] # DOWNWARDS ARROW LEFTWARDS OF UPWARDS ARROW -21F6 ; [*0612.0020.0002] # THREE RIGHTWARDS ARROWS -21F7 ; [*0613.0020.0002] # LEFTWARDS ARROW WITH VERTICAL STROKE -21F8 ; [*0614.0020.0002] # RIGHTWARDS ARROW WITH VERTICAL STROKE -21F9 ; [*0615.0020.0002] # LEFT RIGHT ARROW WITH VERTICAL STROKE -21FA ; [*0616.0020.0002] # LEFTWARDS ARROW WITH DOUBLE VERTICAL STROKE -21FB ; [*0617.0020.0002] # RIGHTWARDS ARROW WITH DOUBLE VERTICAL STROKE -21FC ; [*0618.0020.0002] # LEFT RIGHT ARROW WITH DOUBLE VERTICAL STROKE -21FD ; [*0619.0020.0002] # LEFTWARDS OPEN-HEADED ARROW -21FE ; [*061A.0020.0002] # RIGHTWARDS OPEN-HEADED ARROW -21FF ; [*061B.0020.0002] # LEFT RIGHT OPEN-HEADED ARROW -2200 ; [*061C.0020.0002] # FOR ALL -2201 ; [*061D.0020.0002] # COMPLEMENT -2202 ; [*061E.0020.0002] # PARTIAL DIFFERENTIAL -2203 ; [*061F.0020.0002] # THERE EXISTS -2204 ; [*061F.0020.0002][.0000.002F.0002] # THERE DOES NOT EXIST -2205 ; [*0620.0020.0002] # EMPTY SET -2206 ; [*0621.0020.0002] # INCREMENT -2207 ; [*0622.0020.0002] # NABLA -2208 ; [*0623.0020.0002] # ELEMENT OF -2209 ; [*0623.0020.0002][.0000.002F.0002] # NOT AN ELEMENT OF -220A ; [*0624.0020.0002] # SMALL ELEMENT OF -220B ; [*0625.0020.0002] # CONTAINS AS MEMBER -220C ; [*0625.0020.0002][.0000.002F.0002] # DOES NOT CONTAIN AS MEMBER -220D ; [*0626.0020.0002] # SMALL CONTAINS AS MEMBER -220E ; [*0628.0020.0002] # END OF PROOF -220F ; [*0629.0020.0002] # N-ARY PRODUCT -2210 ; [*062A.0020.0002] # N-ARY COPRODUCT -2211 ; [*062B.0020.0002] # N-ARY SUMMATION -2212 ; [*0637.0020.0002] # MINUS SIGN -2213 ; [*0639.0020.0002] # MINUS-OR-PLUS SIGN -2214 ; [*063A.0020.0002] # DOT PLUS -2215 ; [*063B.0020.0002] # DIVISION SLASH -2216 ; [*063D.0020.0002] # SET MINUS -2217 ; [*063E.0020.0002] # ASTERISK OPERATOR -2218 ; [*063F.0020.0002] # RING OPERATOR -2219 ; [*0640.0020.0002] # BULLET OPERATOR -221A ; [*0641.0020.0002] # SQUARE ROOT -221B ; [*0642.0020.0002] # CUBE ROOT -221C ; [*0644.0020.0002] # FOURTH ROOT -221D ; [*0646.0020.0002] # PROPORTIONAL TO -221E ; [*0647.0020.0002] # INFINITY -221F ; [*0648.0020.0002] # RIGHT ANGLE -2220 ; [*0649.0020.0002] # ANGLE -2221 ; [*064A.0020.0002] # MEASURED ANGLE -2222 ; [*064B.0020.0002] # SPHERICAL ANGLE -2223 ; [*064C.0020.0002] # DIVIDES -2224 ; [*064C.0020.0002][.0000.002F.0002] # DOES NOT DIVIDE -2225 ; [*064D.0020.0002] # PARALLEL TO -2226 ; [*064D.0020.0002][.0000.002F.0002] # NOT PARALLEL TO -2227 ; [*064E.0020.0002] # LOGICAL AND -2228 ; [*064F.0020.0002] # LOGICAL OR -2229 ; [*0650.0020.0002] # INTERSECTION -222A ; [*0651.0020.0002] # UNION -222B ; [*0652.0020.0002] # INTEGRAL -222C ; [*0652.0020.0004][*0652.0020.0004] # DOUBLE INTEGRAL -222D ; [*0652.0020.0004][*0652.0020.0004][*0652.0020.0004] # TRIPLE INTEGRAL -222E ; [*0653.0020.0002] # CONTOUR INTEGRAL -222F ; [*0653.0020.0004][*0653.0020.0004] # SURFACE INTEGRAL -2230 ; [*0653.0020.0004][*0653.0020.0004][*0653.0020.0004] # VOLUME INTEGRAL -2231 ; [*0654.0020.0002] # CLOCKWISE INTEGRAL -2232 ; [*0655.0020.0002] # CLOCKWISE CONTOUR INTEGRAL -2233 ; [*0656.0020.0002] # ANTICLOCKWISE CONTOUR INTEGRAL -2234 ; [*0657.0020.0002] # THEREFORE -2235 ; [*0658.0020.0002] # BECAUSE -2236 ; [*0659.0020.0002] # RATIO -2237 ; [*065A.0020.0002] # PROPORTION -2238 ; [*065B.0020.0002] # DOT MINUS -2239 ; [*065C.0020.0002] # EXCESS -223A ; [*065D.0020.0002] # GEOMETRIC PROPORTION -223B ; [*065E.0020.0002] # HOMOTHETIC -223C ; [*065F.0020.0002] # TILDE OPERATOR -223D ; [*0660.0020.0002] # REVERSED TILDE -223E ; [*0661.0020.0002] # INVERTED LAZY S -223F ; [*0662.0020.0002] # SINE WAVE -2240 ; [*0663.0020.0002] # WREATH PRODUCT -2241 ; [*065F.0020.0002][.0000.002F.0002] # NOT TILDE -2242 ; [*0664.0020.0002] # MINUS TILDE -2243 ; [*0665.0020.0002] # ASYMPTOTICALLY EQUAL TO -2244 ; [*0665.0020.0002][.0000.002F.0002] # NOT ASYMPTOTICALLY EQUAL TO -2245 ; [*0666.0020.0002] # APPROXIMATELY EQUAL TO -2246 ; [*0667.0020.0002] # APPROXIMATELY BUT NOT ACTUALLY EQUAL TO -2247 ; [*0666.0020.0002][.0000.002F.0002] # NEITHER APPROXIMATELY NOR ACTUALLY EQUAL TO -2248 ; [*0668.0020.0002] # ALMOST EQUAL TO -2249 ; [*0668.0020.0002][.0000.002F.0002] # NOT ALMOST EQUAL TO -224A ; [*0669.0020.0002] # ALMOST EQUAL OR EQUAL TO -224B ; [*066A.0020.0002] # TRIPLE TILDE -224C ; [*066B.0020.0002] # ALL EQUAL TO -224D ; [*066C.0020.0002] # EQUIVALENT TO -224E ; [*066D.0020.0002] # GEOMETRICALLY EQUIVALENT TO -224F ; [*066E.0020.0002] # DIFFERENCE BETWEEN -2250 ; [*066F.0020.0002] # APPROACHES THE LIMIT -2251 ; [*0670.0020.0002] # GEOMETRICALLY EQUAL TO -2252 ; [*0671.0020.0002] # APPROXIMATELY EQUAL TO OR THE IMAGE OF -2253 ; [*0672.0020.0002] # IMAGE OF OR APPROXIMATELY EQUAL TO -2254 ; [*0673.0020.0002] # COLON EQUALS -2255 ; [*0674.0020.0002] # EQUALS COLON -2256 ; [*0675.0020.0002] # RING IN EQUAL TO -2257 ; [*0676.0020.0002] # RING EQUAL TO -2258 ; [*0677.0020.0002] # CORRESPONDS TO -2259 ; [*0678.0020.0002] # ESTIMATES -225A ; [*0679.0020.0002] # EQUIANGULAR TO -225B ; [*067A.0020.0002] # STAR EQUALS -225C ; [*067B.0020.0002] # DELTA EQUAL TO -225D ; [*067C.0020.0002] # EQUAL TO BY DEFINITION -225E ; [*067D.0020.0002] # MEASURED BY -225F ; [*067E.0020.0002] # QUESTIONED EQUAL TO -2260 ; [*0631.0020.0002][.0000.002F.0002] # NOT EQUAL TO -2261 ; [*067F.0020.0002] # IDENTICAL TO -2262 ; [*067F.0020.0002][.0000.002F.0002] # NOT IDENTICAL TO -2263 ; [*0680.0020.0002] # STRICTLY EQUIVALENT TO -2264 ; [*0681.0020.0002] # LESS-THAN OR EQUAL TO -2265 ; [*0682.0020.0002] # GREATER-THAN OR EQUAL TO -2266 ; [*0683.0020.0002] # LESS-THAN OVER EQUAL TO -2267 ; [*0684.0020.0002] # GREATER-THAN OVER EQUAL TO -2268 ; [*0685.0020.0002] # LESS-THAN BUT NOT EQUAL TO -2269 ; [*0686.0020.0002] # GREATER-THAN BUT NOT EQUAL TO -226A ; [*0687.0020.0002] # MUCH LESS-THAN -226B ; [*0688.0020.0002] # MUCH GREATER-THAN -226C ; [*0689.0020.0002] # BETWEEN -226D ; [*066C.0020.0002][.0000.002F.0002] # NOT EQUIVALENT TO -226E ; [*0630.0020.0002][.0000.002F.0002] # NOT LESS-THAN -226F ; [*0632.0020.0002][.0000.002F.0002] # NOT GREATER-THAN -2270 ; [*0681.0020.0002][.0000.002F.0002] # NEITHER LESS-THAN NOR EQUAL TO -2271 ; [*0682.0020.0002][.0000.002F.0002] # NEITHER GREATER-THAN NOR EQUAL TO -2272 ; [*068A.0020.0002] # LESS-THAN OR EQUIVALENT TO -2273 ; [*068B.0020.0002] # GREATER-THAN OR EQUIVALENT TO -2274 ; [*068A.0020.0002][.0000.002F.0002] # NEITHER LESS-THAN NOR EQUIVALENT TO -2275 ; [*068B.0020.0002][.0000.002F.0002] # NEITHER GREATER-THAN NOR EQUIVALENT TO -2276 ; [*068C.0020.0002] # LESS-THAN OR GREATER-THAN -2277 ; [*068D.0020.0002] # GREATER-THAN OR LESS-THAN -2278 ; [*068C.0020.0002][.0000.002F.0002] # NEITHER LESS-THAN NOR GREATER-THAN -2279 ; [*068D.0020.0002][.0000.002F.0002] # NEITHER GREATER-THAN NOR LESS-THAN -227A ; [*068E.0020.0002] # PRECEDES -227B ; [*068F.0020.0002] # SUCCEEDS -227C ; [*0690.0020.0002] # PRECEDES OR EQUAL TO -227D ; [*0691.0020.0002] # SUCCEEDS OR EQUAL TO -227E ; [*0692.0020.0002] # PRECEDES OR EQUIVALENT TO -227F ; [*0693.0020.0002] # SUCCEEDS OR EQUIVALENT TO -2280 ; [*068E.0020.0002][.0000.002F.0002] # DOES NOT PRECEDE -2281 ; [*068F.0020.0002][.0000.002F.0002] # DOES NOT SUCCEED -2282 ; [*0694.0020.0002] # SUBSET OF -2283 ; [*0695.0020.0002] # SUPERSET OF -2284 ; [*0694.0020.0002][.0000.002F.0002] # NOT A SUBSET OF -2285 ; [*0695.0020.0002][.0000.002F.0002] # NOT A SUPERSET OF -2286 ; [*0696.0020.0002] # SUBSET OF OR EQUAL TO -2287 ; [*0697.0020.0002] # SUPERSET OF OR EQUAL TO -2288 ; [*0696.0020.0002][.0000.002F.0002] # NEITHER A SUBSET OF NOR EQUAL TO -2289 ; [*0697.0020.0002][.0000.002F.0002] # NEITHER A SUPERSET OF NOR EQUAL TO -228A ; [*0698.0020.0002] # SUBSET OF WITH NOT EQUAL TO -228B ; [*0699.0020.0002] # SUPERSET OF WITH NOT EQUAL TO -228C ; [*069A.0020.0002] # MULTISET -228D ; [*069B.0020.0002] # MULTISET MULTIPLICATION -228E ; [*069C.0020.0002] # MULTISET UNION -228F ; [*069D.0020.0002] # SQUARE IMAGE OF -2290 ; [*069E.0020.0002] # SQUARE ORIGINAL OF -2291 ; [*069F.0020.0002] # SQUARE IMAGE OF OR EQUAL TO -2292 ; [*06A0.0020.0002] # SQUARE ORIGINAL OF OR EQUAL TO -2293 ; [*06A1.0020.0002] # SQUARE CAP -2294 ; [*06A2.0020.0002] # SQUARE CUP -2295 ; [*06A3.0020.0002] # CIRCLED PLUS -2296 ; [*06A4.0020.0002] # CIRCLED MINUS -2297 ; [*06A5.0020.0002] # CIRCLED TIMES -2298 ; [*06A6.0020.0002] # CIRCLED DIVISION SLASH -2299 ; [*06A7.0020.0002] # CIRCLED DOT OPERATOR -229A ; [*06A8.0020.0002] # CIRCLED RING OPERATOR -229B ; [*06A9.0020.0002] # CIRCLED ASTERISK OPERATOR -229C ; [*06AA.0020.0002] # CIRCLED EQUALS -229D ; [*06AB.0020.0002] # CIRCLED DASH -229E ; [*06AC.0020.0002] # SQUARED PLUS -229F ; [*06AD.0020.0002] # SQUARED MINUS -22A0 ; [*06AE.0020.0002] # SQUARED TIMES -22A1 ; [*06AF.0020.0002] # SQUARED DOT OPERATOR -22A2 ; [*06B0.0020.0002] # RIGHT TACK -22A3 ; [*06B1.0020.0002] # LEFT TACK -22A4 ; [*06B2.0020.0002] # DOWN TACK -22A5 ; [*06B3.0020.0002] # UP TACK -22A6 ; [*06B4.0020.0002] # ASSERTION -22A7 ; [*06B5.0020.0002] # MODELS -22A8 ; [*06B6.0020.0002] # TRUE -22A9 ; [*06B7.0020.0002] # FORCES -22AA ; [*06B8.0020.0002] # TRIPLE VERTICAL BAR RIGHT TURNSTILE -22AB ; [*06B9.0020.0002] # DOUBLE VERTICAL BAR DOUBLE RIGHT TURNSTILE -22AC ; [*06B0.0020.0002][.0000.002F.0002] # DOES NOT PROVE -22AD ; [*06B6.0020.0002][.0000.002F.0002] # NOT TRUE -22AE ; [*06B7.0020.0002][.0000.002F.0002] # DOES NOT FORCE -22AF ; [*06B9.0020.0002][.0000.002F.0002] # NEGATED DOUBLE VERTICAL BAR DOUBLE RIGHT TURNSTILE -22B0 ; [*06BA.0020.0002] # PRECEDES UNDER RELATION -22B1 ; [*06BB.0020.0002] # SUCCEEDS UNDER RELATION -22B2 ; [*06BC.0020.0002] # NORMAL SUBGROUP OF -22B3 ; [*06BD.0020.0002] # CONTAINS AS NORMAL SUBGROUP -22B4 ; [*06BE.0020.0002] # NORMAL SUBGROUP OF OR EQUAL TO -22B5 ; [*06BF.0020.0002] # CONTAINS AS NORMAL SUBGROUP OR EQUAL TO -22B6 ; [*06C0.0020.0002] # ORIGINAL OF -22B7 ; [*06C1.0020.0002] # IMAGE OF -22B8 ; [*06C2.0020.0002] # MULTIMAP -22B9 ; [*06C3.0020.0002] # HERMITIAN CONJUGATE MATRIX -22BA ; [*06C4.0020.0002] # INTERCALATE -22BB ; [*06C5.0020.0002] # XOR -22BC ; [*06C6.0020.0002] # NAND -22BD ; [*06C8.0020.0002] # NOR -22BE ; [*06C9.0020.0002] # RIGHT ANGLE WITH ARC -22BF ; [*06CA.0020.0002] # RIGHT TRIANGLE -22C0 ; [*06CB.0020.0002] # N-ARY LOGICAL AND -22C1 ; [*06CC.0020.0002] # N-ARY LOGICAL OR -22C2 ; [*06CD.0020.0002] # N-ARY INTERSECTION -22C3 ; [*06CE.0020.0002] # N-ARY UNION -22C4 ; [*06CF.0020.0002] # DIAMOND OPERATOR -22C5 ; [*06D0.0020.0002] # DOT OPERATOR -22C6 ; [*06D1.0020.0002] # STAR OPERATOR -22C7 ; [*06D2.0020.0002] # DIVISION TIMES -22C8 ; [*06D3.0020.0002] # BOWTIE -22C9 ; [*06D4.0020.0002] # LEFT NORMAL FACTOR SEMIDIRECT PRODUCT -22CA ; [*06D5.0020.0002] # RIGHT NORMAL FACTOR SEMIDIRECT PRODUCT -22CB ; [*06D6.0020.0002] # LEFT SEMIDIRECT PRODUCT -22CC ; [*06D7.0020.0002] # RIGHT SEMIDIRECT PRODUCT -22CD ; [*06D8.0020.0002] # REVERSED TILDE EQUALS -22CE ; [*06D9.0020.0002] # CURLY LOGICAL OR -22CF ; [*06DA.0020.0002] # CURLY LOGICAL AND -22D0 ; [*06DB.0020.0002] # DOUBLE SUBSET -22D1 ; [*06DC.0020.0002] # DOUBLE SUPERSET -22D2 ; [*06DD.0020.0002] # DOUBLE INTERSECTION -22D3 ; [*06DE.0020.0002] # DOUBLE UNION -22D4 ; [*06DF.0020.0002] # PITCHFORK -22D5 ; [*06E0.0020.0002] # EQUAL AND PARALLEL TO -22D6 ; [*06E1.0020.0002] # LESS-THAN WITH DOT -22D7 ; [*06E2.0020.0002] # GREATER-THAN WITH DOT -22D8 ; [*06E3.0020.0002] # VERY MUCH LESS-THAN -22D9 ; [*06E4.0020.0002] # VERY MUCH GREATER-THAN -22DA ; [*06E5.0020.0002] # LESS-THAN EQUAL TO OR GREATER-THAN -22DB ; [*06E6.0020.0002] # GREATER-THAN EQUAL TO OR LESS-THAN -22DC ; [*06E7.0020.0002] # EQUAL TO OR LESS-THAN -22DD ; [*06E8.0020.0002] # EQUAL TO OR GREATER-THAN -22DE ; [*06E9.0020.0002] # EQUAL TO OR PRECEDES -22DF ; [*06EA.0020.0002] # EQUAL TO OR SUCCEEDS -22E0 ; [*0690.0020.0002][.0000.002F.0002] # DOES NOT PRECEDE OR EQUAL -22E1 ; [*0691.0020.0002][.0000.002F.0002] # DOES NOT SUCCEED OR EQUAL -22E2 ; [*069F.0020.0002][.0000.002F.0002] # NOT SQUARE IMAGE OF OR EQUAL TO -22E3 ; [*06A0.0020.0002][.0000.002F.0002] # NOT SQUARE ORIGINAL OF OR EQUAL TO -22E4 ; [*06EB.0020.0002] # SQUARE IMAGE OF OR NOT EQUAL TO -22E5 ; [*06EC.0020.0002] # SQUARE ORIGINAL OF OR NOT EQUAL TO -22E6 ; [*06ED.0020.0002] # LESS-THAN BUT NOT EQUIVALENT TO -22E7 ; [*06EE.0020.0002] # GREATER-THAN BUT NOT EQUIVALENT TO -22E8 ; [*06EF.0020.0002] # PRECEDES BUT NOT EQUIVALENT TO -22E9 ; [*06F0.0020.0002] # SUCCEEDS BUT NOT EQUIVALENT TO -22EA ; [*06BC.0020.0002][.0000.002F.0002] # NOT NORMAL SUBGROUP OF -22EB ; [*06BD.0020.0002][.0000.002F.0002] # DOES NOT CONTAIN AS NORMAL SUBGROUP -22EC ; [*06BE.0020.0002][.0000.002F.0002] # NOT NORMAL SUBGROUP OF OR EQUAL TO -22ED ; [*06BF.0020.0002][.0000.002F.0002] # DOES NOT CONTAIN AS NORMAL SUBGROUP OR EQUAL -22EE ; [*06F1.0020.0002] # VERTICAL ELLIPSIS -22EF ; [*06F2.0020.0002] # MIDLINE HORIZONTAL ELLIPSIS -22F0 ; [*06F3.0020.0002] # UP RIGHT DIAGONAL ELLIPSIS -22F1 ; [*06F4.0020.0002] # DOWN RIGHT DIAGONAL ELLIPSIS -22F2 ; [*06F5.0020.0002] # ELEMENT OF WITH LONG HORIZONTAL STROKE -22F3 ; [*06F6.0020.0002] # ELEMENT OF WITH VERTICAL BAR AT END OF HORIZONTAL STROKE -22F4 ; [*06F7.0020.0002] # SMALL ELEMENT OF WITH VERTICAL BAR AT END OF HORIZONTAL STROKE -22F5 ; [*06F8.0020.0002] # ELEMENT OF WITH DOT ABOVE -22F6 ; [*06F9.0020.0002] # ELEMENT OF WITH OVERBAR -22F7 ; [*06FA.0020.0002] # SMALL ELEMENT OF WITH OVERBAR -22F8 ; [*06FB.0020.0002] # ELEMENT OF WITH UNDERBAR -22F9 ; [*06FC.0020.0002] # ELEMENT OF WITH TWO HORIZONTAL STROKES -22FA ; [*06FD.0020.0002] # CONTAINS WITH LONG HORIZONTAL STROKE -22FB ; [*06FE.0020.0002] # CONTAINS WITH VERTICAL BAR AT END OF HORIZONTAL STROKE -22FC ; [*06FF.0020.0002] # SMALL CONTAINS WITH VERTICAL BAR AT END OF HORIZONTAL STROKE -22FD ; [*0700.0020.0002] # CONTAINS WITH OVERBAR -22FE ; [*0701.0020.0002] # SMALL CONTAINS WITH OVERBAR -22FF ; [*0702.0020.0002] # Z NOTATION BAG MEMBERSHIP -2300 ; [*0703.0020.0002] # DIAMETER SIGN -2301 ; [*0704.0020.0002] # ELECTRIC ARROW -2302 ; [*0705.0020.0002] # HOUSE -2303 ; [*0706.0020.0002] # UP ARROWHEAD -2304 ; [*0707.0020.0002] # DOWN ARROWHEAD -2305 ; [*0708.0020.0002] # PROJECTIVE -2306 ; [*0709.0020.0002] # PERSPECTIVE -2307 ; [*070A.0020.0002] # WAVY LINE -2308 ; [*0326.0020.0002] # LEFT CEILING -2309 ; [*0327.0020.0002] # RIGHT CEILING -230A ; [*0328.0020.0002] # LEFT FLOOR -230B ; [*0329.0020.0002] # RIGHT FLOOR -230C ; [*070B.0020.0002] # BOTTOM RIGHT CROP -230D ; [*070C.0020.0002] # BOTTOM LEFT CROP -230E ; [*070D.0020.0002] # TOP RIGHT CROP -230F ; [*070E.0020.0002] # TOP LEFT CROP -2310 ; [*070F.0020.0002] # REVERSED NOT SIGN -2311 ; [*0710.0020.0002] # SQUARE LOZENGE -2312 ; [*0711.0020.0002] # ARC -2313 ; [*0712.0020.0002] # SEGMENT -2314 ; [*0713.0020.0002] # SECTOR -2315 ; [*0714.0020.0002] # TELEPHONE RECORDER -2316 ; [*0715.0020.0002] # POSITION INDICATOR -2317 ; [*0716.0020.0002] # VIEWDATA SQUARE -2318 ; [*0717.0020.0002] # PLACE OF INTEREST SIGN -2319 ; [*0718.0020.0002] # TURNED NOT SIGN -231A ; [*0719.0020.0002] # WATCH -231B ; [*071A.0020.0002] # HOURGLASS -231C ; [*071B.0020.0002] # TOP LEFT CORNER -231D ; [*071C.0020.0002] # TOP RIGHT CORNER -231E ; [*071D.0020.0002] # BOTTOM LEFT CORNER -231F ; [*071E.0020.0002] # BOTTOM RIGHT CORNER -2320 ; [*071F.0020.0002] # TOP HALF INTEGRAL -2321 ; [*0720.0020.0002] # BOTTOM HALF INTEGRAL -2322 ; [*0721.0020.0002] # FROWN -2323 ; [*0722.0020.0002] # SMILE -2324 ; [*0723.0020.0002] # UP ARROWHEAD BETWEEN TWO HORIZONTAL BARS -2325 ; [*0724.0020.0002] # OPTION KEY -2326 ; [*0725.0020.0002] # ERASE TO THE RIGHT -2327 ; [*0726.0020.0002] # X IN A RECTANGLE BOX -2328 ; [*0727.0020.0002] # KEYBOARD -2329 ; [*0370.0020.0002] # LEFT-POINTING ANGLE BRACKET -232A ; [*0371.0020.0002] # RIGHT-POINTING ANGLE BRACKET -232B ; [*0728.0020.0002] # ERASE TO THE LEFT -232C ; [*0729.0020.0002] # BENZENE RING -232D ; [*072A.0020.0002] # CYLINDRICITY -232E ; [*072B.0020.0002] # ALL AROUND-PROFILE -232F ; [*072C.0020.0002] # SYMMETRY -2330 ; [*072D.0020.0002] # TOTAL RUNOUT -2331 ; [*072E.0020.0002] # DIMENSION ORIGIN -2332 ; [*072F.0020.0002] # CONICAL TAPER -2333 ; [*0730.0020.0002] # SLOPE -2334 ; [*0731.0020.0002] # COUNTERBORE -2335 ; [*0732.0020.0002] # COUNTERSINK -2336 ; [*0733.0020.0002] # APL FUNCTIONAL SYMBOL I-BEAM -2337 ; [*0734.0020.0002] # APL FUNCTIONAL SYMBOL SQUISH QUAD -2338 ; [*0735.0020.0002] # APL FUNCTIONAL SYMBOL QUAD EQUAL -2339 ; [*0736.0020.0002] # APL FUNCTIONAL SYMBOL QUAD DIVIDE -233A ; [*0737.0020.0002] # APL FUNCTIONAL SYMBOL QUAD DIAMOND -233B ; [*0738.0020.0002] # APL FUNCTIONAL SYMBOL QUAD JOT -233C ; [*0739.0020.0002] # APL FUNCTIONAL SYMBOL QUAD CIRCLE -233D ; [*073A.0020.0002] # APL FUNCTIONAL SYMBOL CIRCLE STILE -233E ; [*073B.0020.0002] # APL FUNCTIONAL SYMBOL CIRCLE JOT -233F ; [*073C.0020.0002] # APL FUNCTIONAL SYMBOL SLASH BAR -2340 ; [*073D.0020.0002] # APL FUNCTIONAL SYMBOL BACKSLASH BAR -2341 ; [*073E.0020.0002] # APL FUNCTIONAL SYMBOL QUAD SLASH -2342 ; [*073F.0020.0002] # APL FUNCTIONAL SYMBOL QUAD BACKSLASH -2343 ; [*0740.0020.0002] # APL FUNCTIONAL SYMBOL QUAD LESS-THAN -2344 ; [*0741.0020.0002] # APL FUNCTIONAL SYMBOL QUAD GREATER-THAN -2345 ; [*0742.0020.0002] # APL FUNCTIONAL SYMBOL LEFTWARDS VANE -2346 ; [*0743.0020.0002] # APL FUNCTIONAL SYMBOL RIGHTWARDS VANE -2347 ; [*0744.0020.0002] # APL FUNCTIONAL SYMBOL QUAD LEFTWARDS ARROW -2348 ; [*0745.0020.0002] # APL FUNCTIONAL SYMBOL QUAD RIGHTWARDS ARROW -2349 ; [*0746.0020.0002] # APL FUNCTIONAL SYMBOL CIRCLE BACKSLASH -234A ; [*0747.0020.0002] # APL FUNCTIONAL SYMBOL DOWN TACK UNDERBAR -234B ; [*0748.0020.0002] # APL FUNCTIONAL SYMBOL DELTA STILE -234C ; [*0749.0020.0002] # APL FUNCTIONAL SYMBOL QUAD DOWN CARET -234D ; [*074A.0020.0002] # APL FUNCTIONAL SYMBOL QUAD DELTA -234E ; [*074B.0020.0002] # APL FUNCTIONAL SYMBOL DOWN TACK JOT -234F ; [*074C.0020.0002] # APL FUNCTIONAL SYMBOL UPWARDS VANE -2350 ; [*074D.0020.0002] # APL FUNCTIONAL SYMBOL QUAD UPWARDS ARROW -2351 ; [*074E.0020.0002] # APL FUNCTIONAL SYMBOL UP TACK OVERBAR -2352 ; [*074F.0020.0002] # APL FUNCTIONAL SYMBOL DEL STILE -2353 ; [*0750.0020.0002] # APL FUNCTIONAL SYMBOL QUAD UP CARET -2354 ; [*0751.0020.0002] # APL FUNCTIONAL SYMBOL QUAD DEL -2355 ; [*0752.0020.0002] # APL FUNCTIONAL SYMBOL UP TACK JOT -2356 ; [*0753.0020.0002] # APL FUNCTIONAL SYMBOL DOWNWARDS VANE -2357 ; [*0754.0020.0002] # APL FUNCTIONAL SYMBOL QUAD DOWNWARDS ARROW -2358 ; [*0755.0020.0002] # APL FUNCTIONAL SYMBOL QUOTE UNDERBAR -2359 ; [*0756.0020.0002] # APL FUNCTIONAL SYMBOL DELTA UNDERBAR -235A ; [*0757.0020.0002] # APL FUNCTIONAL SYMBOL DIAMOND UNDERBAR -235B ; [*0758.0020.0002] # APL FUNCTIONAL SYMBOL JOT UNDERBAR -235C ; [*0759.0020.0002] # APL FUNCTIONAL SYMBOL CIRCLE UNDERBAR -235D ; [*075A.0020.0002] # APL FUNCTIONAL SYMBOL UP SHOE JOT -235E ; [*075B.0020.0002] # APL FUNCTIONAL SYMBOL QUOTE QUAD -235F ; [*075C.0020.0002] # APL FUNCTIONAL SYMBOL CIRCLE STAR -2360 ; [*075D.0020.0002] # APL FUNCTIONAL SYMBOL QUAD COLON -2361 ; [*075E.0020.0002] # APL FUNCTIONAL SYMBOL UP TACK DIAERESIS -2362 ; [*075F.0020.0002] # APL FUNCTIONAL SYMBOL DEL DIAERESIS -2363 ; [*0760.0020.0002] # APL FUNCTIONAL SYMBOL STAR DIAERESIS -2364 ; [*0761.0020.0002] # APL FUNCTIONAL SYMBOL JOT DIAERESIS -2365 ; [*0762.0020.0002] # APL FUNCTIONAL SYMBOL CIRCLE DIAERESIS -2366 ; [*0763.0020.0002] # APL FUNCTIONAL SYMBOL DOWN SHOE STILE -2367 ; [*0764.0020.0002] # APL FUNCTIONAL SYMBOL LEFT SHOE STILE -2368 ; [*0765.0020.0002] # APL FUNCTIONAL SYMBOL TILDE DIAERESIS -2369 ; [*0766.0020.0002] # APL FUNCTIONAL SYMBOL GREATER-THAN DIAERESIS -236A ; [*0767.0020.0002] # APL FUNCTIONAL SYMBOL COMMA BAR -236B ; [*0768.0020.0002] # APL FUNCTIONAL SYMBOL DEL TILDE -236C ; [*0769.0020.0002] # APL FUNCTIONAL SYMBOL ZILDE -236D ; [*076A.0020.0002] # APL FUNCTIONAL SYMBOL STILE TILDE -236E ; [*076B.0020.0002] # APL FUNCTIONAL SYMBOL SEMICOLON UNDERBAR -236F ; [*076C.0020.0002] # APL FUNCTIONAL SYMBOL QUAD NOT EQUAL -2370 ; [*076D.0020.0002] # APL FUNCTIONAL SYMBOL QUAD QUESTION -2371 ; [*076E.0020.0002] # APL FUNCTIONAL SYMBOL DOWN CARET TILDE -2372 ; [*076F.0020.0002] # APL FUNCTIONAL SYMBOL UP CARET TILDE -2373 ; [*0770.0020.0002] # APL FUNCTIONAL SYMBOL IOTA -2374 ; [*0771.0020.0002] # APL FUNCTIONAL SYMBOL RHO -2375 ; [*0772.0020.0002] # APL FUNCTIONAL SYMBOL OMEGA -2376 ; [*0773.0020.0002] # APL FUNCTIONAL SYMBOL ALPHA UNDERBAR -2377 ; [*0774.0020.0002] # APL FUNCTIONAL SYMBOL EPSILON UNDERBAR -2378 ; [*0775.0020.0002] # APL FUNCTIONAL SYMBOL IOTA UNDERBAR -2379 ; [*0776.0020.0002] # APL FUNCTIONAL SYMBOL OMEGA UNDERBAR -237A ; [*0777.0020.0002] # APL FUNCTIONAL SYMBOL ALPHA -237B ; [*0778.0020.0002] # NOT CHECK MARK -237C ; [*0779.0020.0002] # RIGHT ANGLE WITH DOWNWARDS ZIGZAG ARROW -237D ; [*077A.0020.0002] # SHOULDERED OPEN BOX -237E ; [*077B.0020.0002] # BELL SYMBOL -237F ; [*077C.0020.0002] # VERTICAL LINE WITH MIDDLE DOT -2380 ; [*077D.0020.0002] # INSERTION SYMBOL -2381 ; [*077E.0020.0002] # CONTINUOUS UNDERLINE SYMBOL -2382 ; [*077F.0020.0002] # DISCONTINUOUS UNDERLINE SYMBOL -2383 ; [*0780.0020.0002] # EMPHASIS SYMBOL -2384 ; [*0781.0020.0002] # COMPOSITION SYMBOL -2385 ; [*0782.0020.0002] # WHITE SQUARE WITH CENTRE VERTICAL LINE -2386 ; [*0783.0020.0002] # ENTER SYMBOL -2387 ; [*0784.0020.0002] # ALTERNATIVE KEY SYMBOL -2388 ; [*0785.0020.0002] # HELM SYMBOL -2389 ; [*0786.0020.0002] # CIRCLED HORIZONTAL BAR WITH NOTCH -238A ; [*0787.0020.0002] # CIRCLED TRIANGLE DOWN -238B ; [*0788.0020.0002] # BROKEN CIRCLE WITH NORTHWEST ARROW -238C ; [*0789.0020.0002] # UNDO SYMBOL -238D ; [*078A.0020.0002] # MONOSTABLE SYMBOL -238E ; [*078B.0020.0002] # HYSTERESIS SYMBOL -238F ; [*078C.0020.0002] # OPEN-CIRCUIT-OUTPUT H-TYPE SYMBOL -2390 ; [*078D.0020.0002] # OPEN-CIRCUIT-OUTPUT L-TYPE SYMBOL -2391 ; [*078E.0020.0002] # PASSIVE-PULL-DOWN-OUTPUT SYMBOL -2392 ; [*078F.0020.0002] # PASSIVE-PULL-UP-OUTPUT SYMBOL -2393 ; [*0790.0020.0002] # DIRECT CURRENT SYMBOL FORM TWO -2394 ; [*0791.0020.0002] # SOFTWARE-FUNCTION SYMBOL -2395 ; [*0792.0020.0002] # APL FUNCTIONAL SYMBOL QUAD -2396 ; [*0793.0020.0002] # DECIMAL SEPARATOR KEY SYMBOL -2397 ; [*0794.0020.0002] # PREVIOUS PAGE -2398 ; [*0795.0020.0002] # NEXT PAGE -2399 ; [*0796.0020.0002] # PRINT SCREEN SYMBOL -239A ; [*0797.0020.0002] # CLEAR SCREEN SYMBOL -239B ; [*0798.0020.0002] # LEFT PARENTHESIS UPPER HOOK -239C ; [*0799.0020.0002] # LEFT PARENTHESIS EXTENSION -239D ; [*079A.0020.0002] # LEFT PARENTHESIS LOWER HOOK -239E ; [*079B.0020.0002] # RIGHT PARENTHESIS UPPER HOOK -239F ; [*079C.0020.0002] # RIGHT PARENTHESIS EXTENSION -23A0 ; [*079D.0020.0002] # RIGHT PARENTHESIS LOWER HOOK -23A1 ; [*079E.0020.0002] # LEFT SQUARE BRACKET UPPER CORNER -23A2 ; [*079F.0020.0002] # LEFT SQUARE BRACKET EXTENSION -23A3 ; [*07A0.0020.0002] # LEFT SQUARE BRACKET LOWER CORNER -23A4 ; [*07A1.0020.0002] # RIGHT SQUARE BRACKET UPPER CORNER -23A5 ; [*07A2.0020.0002] # RIGHT SQUARE BRACKET EXTENSION -23A6 ; [*07A3.0020.0002] # RIGHT SQUARE BRACKET LOWER CORNER -23A7 ; [*07A4.0020.0002] # LEFT CURLY BRACKET UPPER HOOK -23A8 ; [*07A5.0020.0002] # LEFT CURLY BRACKET MIDDLE PIECE -23A9 ; [*07A6.0020.0002] # LEFT CURLY BRACKET LOWER HOOK -23AA ; [*07A7.0020.0002] # CURLY BRACKET EXTENSION -23AB ; [*07A8.0020.0002] # RIGHT CURLY BRACKET UPPER HOOK -23AC ; [*07A9.0020.0002] # RIGHT CURLY BRACKET MIDDLE PIECE -23AD ; [*07AA.0020.0002] # RIGHT CURLY BRACKET LOWER HOOK -23AE ; [*07AB.0020.0002] # INTEGRAL EXTENSION -23AF ; [*07AC.0020.0002] # HORIZONTAL LINE EXTENSION -23B0 ; [*07AD.0020.0002] # UPPER LEFT OR LOWER RIGHT CURLY BRACKET SECTION -23B1 ; [*07AE.0020.0002] # UPPER RIGHT OR LOWER LEFT CURLY BRACKET SECTION -23B2 ; [*07AF.0020.0002] # SUMMATION TOP -23B3 ; [*07B0.0020.0002] # SUMMATION BOTTOM -23B4 ; [*07B1.0020.0002] # TOP SQUARE BRACKET -23B5 ; [*07B2.0020.0002] # BOTTOM SQUARE BRACKET -23B6 ; [*07B3.0020.0002] # BOTTOM SQUARE BRACKET OVER TOP SQUARE BRACKET -23B7 ; [*07B4.0020.0002] # RADICAL SYMBOL BOTTOM -23B8 ; [*07B5.0020.0002] # LEFT VERTICAL BOX LINE -23B9 ; [*07B6.0020.0002] # RIGHT VERTICAL BOX LINE -23BA ; [*07B7.0020.0002] # HORIZONTAL SCAN LINE-1 -23BB ; [*07B8.0020.0002] # HORIZONTAL SCAN LINE-3 -23BC ; [*07B9.0020.0002] # HORIZONTAL SCAN LINE-7 -23BD ; [*07BA.0020.0002] # HORIZONTAL SCAN LINE-9 -23BE ; [*07BB.0020.0002] # DENTISTRY SYMBOL LIGHT VERTICAL AND TOP RIGHT -23BF ; [*07BC.0020.0002] # DENTISTRY SYMBOL LIGHT VERTICAL AND BOTTOM RIGHT -23C0 ; [*07BD.0020.0002] # DENTISTRY SYMBOL LIGHT VERTICAL WITH CIRCLE -23C1 ; [*07BE.0020.0002] # DENTISTRY SYMBOL LIGHT DOWN AND HORIZONTAL WITH CIRCLE -23C2 ; [*07BF.0020.0002] # DENTISTRY SYMBOL LIGHT UP AND HORIZONTAL WITH CIRCLE -23C3 ; [*07C0.0020.0002] # DENTISTRY SYMBOL LIGHT VERTICAL WITH TRIANGLE -23C4 ; [*07C1.0020.0002] # DENTISTRY SYMBOL LIGHT DOWN AND HORIZONTAL WITH TRIANGLE -23C5 ; [*07C2.0020.0002] # DENTISTRY SYMBOL LIGHT UP AND HORIZONTAL WITH TRIANGLE -23C6 ; [*07C3.0020.0002] # DENTISTRY SYMBOL LIGHT VERTICAL AND WAVE -23C7 ; [*07C4.0020.0002] # DENTISTRY SYMBOL LIGHT DOWN AND HORIZONTAL WITH WAVE -23C8 ; [*07C5.0020.0002] # DENTISTRY SYMBOL LIGHT UP AND HORIZONTAL WITH WAVE -23C9 ; [*07C6.0020.0002] # DENTISTRY SYMBOL LIGHT DOWN AND HORIZONTAL -23CA ; [*07C7.0020.0002] # DENTISTRY SYMBOL LIGHT UP AND HORIZONTAL -23CB ; [*07C8.0020.0002] # DENTISTRY SYMBOL LIGHT VERTICAL AND TOP LEFT -23CC ; [*07C9.0020.0002] # DENTISTRY SYMBOL LIGHT VERTICAL AND BOTTOM LEFT -23CD ; [*07CA.0020.0002] # SQUARE FOOT -23CE ; [*07CB.0020.0002] # RETURN SYMBOL -23CF ; [*07CC.0020.0002] # EJECT SYMBOL -23D0 ; [*07CD.0020.0002] # VERTICAL LINE EXTENSION -23D1 ; [*07CE.0020.0002] # METRICAL BREVE -23D2 ; [*07CF.0020.0002] # METRICAL LONG OVER SHORT -23D3 ; [*07D0.0020.0002] # METRICAL SHORT OVER LONG -23D4 ; [*07D1.0020.0002] # METRICAL LONG OVER TWO SHORTS -23D5 ; [*07D2.0020.0002] # METRICAL TWO SHORTS OVER LONG -23D6 ; [*07D3.0020.0002] # METRICAL TWO SHORTS JOINED -23D7 ; [*07D4.0020.0002] # METRICAL TRISEME -23D8 ; [*07D5.0020.0002] # METRICAL TETRASEME -23D9 ; [*07D6.0020.0002] # METRICAL PENTASEME -23DA ; [*07D7.0020.0002] # EARTH GROUND -23DB ; [*07D8.0020.0002] # FUSE -23DC ; [*07D9.0020.0002] # TOP PARENTHESIS -23DD ; [*07DA.0020.0002] # BOTTOM PARENTHESIS -23DE ; [*07DB.0020.0002] # TOP CURLY BRACKET -23DF ; [*07DC.0020.0002] # BOTTOM CURLY BRACKET -23E0 ; [*07DD.0020.0002] # TOP TORTOISE SHELL BRACKET -23E1 ; [*07DE.0020.0002] # BOTTOM TORTOISE SHELL BRACKET -23E2 ; [*07DF.0020.0002] # WHITE TRAPEZIUM -23E3 ; [*07E0.0020.0002] # BENZENE RING WITH CIRCLE -23E4 ; [*07E1.0020.0002] # STRAIGHTNESS -23E5 ; [*07E2.0020.0002] # FLATNESS -23E6 ; [*07E3.0020.0002] # AC CURRENT -23E7 ; [*07E4.0020.0002] # ELECTRICAL INTERSECTION -23E8 ; [*07E5.0020.0002] # DECIMAL EXPONENT SYMBOL -23E9 ; [*07E6.0020.0002] # BLACK RIGHT-POINTING DOUBLE TRIANGLE -23EA ; [*07E7.0020.0002] # BLACK LEFT-POINTING DOUBLE TRIANGLE -23EB ; [*07E8.0020.0002] # BLACK UP-POINTING DOUBLE TRIANGLE -23EC ; [*07E9.0020.0002] # BLACK DOWN-POINTING DOUBLE TRIANGLE -23ED ; [*07EA.0020.0002] # BLACK RIGHT-POINTING DOUBLE TRIANGLE WITH VERTICAL BAR -23EE ; [*07EB.0020.0002] # BLACK LEFT-POINTING DOUBLE TRIANGLE WITH VERTICAL BAR -23EF ; [*07EC.0020.0002] # BLACK RIGHT-POINTING TRIANGLE WITH DOUBLE VERTICAL BAR -23F0 ; [*07ED.0020.0002] # ALARM CLOCK -23F1 ; [*07EE.0020.0002] # STOPWATCH -23F2 ; [*07EF.0020.0002] # TIMER CLOCK -23F3 ; [*07F0.0020.0002] # HOURGLASS WITH FLOWING SAND -23F4 ; [*07F1.0020.0002] # BLACK MEDIUM LEFT-POINTING TRIANGLE -23F5 ; [*07F2.0020.0002] # BLACK MEDIUM RIGHT-POINTING TRIANGLE -23F6 ; [*07F3.0020.0002] # BLACK MEDIUM UP-POINTING TRIANGLE -23F7 ; [*07F4.0020.0002] # BLACK MEDIUM DOWN-POINTING TRIANGLE -23F8 ; [*07F5.0020.0002] # DOUBLE VERTICAL BAR -23F9 ; [*07F6.0020.0002] # BLACK SQUARE FOR STOP -23FA ; [*07F7.0020.0002] # BLACK CIRCLE FOR RECORD -23FB ; [*07F8.0020.0002] # POWER SYMBOL -23FC ; [*07F9.0020.0002] # POWER ON-OFF SYMBOL -23FD ; [*07FA.0020.0002] # POWER ON SYMBOL -23FE ; [*07FB.0020.0002] # POWER SLEEP SYMBOL -23FF ; [*07FC.0020.0002] # OBSERVER EYE SYMBOL -2400 ; [*07FD.0020.0002] # SYMBOL FOR NULL -2401 ; [*07FE.0020.0002] # SYMBOL FOR START OF HEADING -2402 ; [*07FF.0020.0002] # SYMBOL FOR START OF TEXT -2403 ; [*0800.0020.0002] # SYMBOL FOR END OF TEXT -2404 ; [*0801.0020.0002] # SYMBOL FOR END OF TRANSMISSION -2405 ; [*0802.0020.0002] # SYMBOL FOR ENQUIRY -2406 ; [*0803.0020.0002] # SYMBOL FOR ACKNOWLEDGE -2407 ; [*0804.0020.0002] # SYMBOL FOR BELL -2408 ; [*0805.0020.0002] # SYMBOL FOR BACKSPACE -2409 ; [*0806.0020.0002] # SYMBOL FOR HORIZONTAL TABULATION -240A ; [*0807.0020.0002] # SYMBOL FOR LINE FEED -240B ; [*0808.0020.0002] # SYMBOL FOR VERTICAL TABULATION -240C ; [*0809.0020.0002] # SYMBOL FOR FORM FEED -240D ; [*080A.0020.0002] # SYMBOL FOR CARRIAGE RETURN -240E ; [*080B.0020.0002] # SYMBOL FOR SHIFT OUT -240F ; [*080C.0020.0002] # SYMBOL FOR SHIFT IN -2410 ; [*080D.0020.0002] # SYMBOL FOR DATA LINK ESCAPE -2411 ; [*080E.0020.0002] # SYMBOL FOR DEVICE CONTROL ONE -2412 ; [*080F.0020.0002] # SYMBOL FOR DEVICE CONTROL TWO -2413 ; [*0810.0020.0002] # SYMBOL FOR DEVICE CONTROL THREE -2414 ; [*0811.0020.0002] # SYMBOL FOR DEVICE CONTROL FOUR -2415 ; [*0812.0020.0002] # SYMBOL FOR NEGATIVE ACKNOWLEDGE -2416 ; [*0813.0020.0002] # SYMBOL FOR SYNCHRONOUS IDLE -2417 ; [*0814.0020.0002] # SYMBOL FOR END OF TRANSMISSION BLOCK -2418 ; [*0815.0020.0002] # SYMBOL FOR CANCEL -2419 ; [*0816.0020.0002] # SYMBOL FOR END OF MEDIUM -241A ; [*0817.0020.0002] # SYMBOL FOR SUBSTITUTE -241B ; [*0818.0020.0002] # SYMBOL FOR ESCAPE -241C ; [*0819.0020.0002] # SYMBOL FOR FILE SEPARATOR -241D ; [*081A.0020.0002] # SYMBOL FOR GROUP SEPARATOR -241E ; [*081B.0020.0002] # SYMBOL FOR RECORD SEPARATOR -241F ; [*081C.0020.0002] # SYMBOL FOR UNIT SEPARATOR -2420 ; [*081D.0020.0002] # SYMBOL FOR SPACE -2421 ; [*081E.0020.0002] # SYMBOL FOR DELETE -2422 ; [*081F.0020.0002] # BLANK SYMBOL -2423 ; [*0820.0020.0002] # OPEN BOX -2424 ; [*0821.0020.0002] # SYMBOL FOR NEWLINE -2425 ; [*0822.0020.0002] # SYMBOL FOR DELETE FORM TWO -2426 ; [*0823.0020.0002] # SYMBOL FOR SUBSTITUTE FORM TWO -2440 ; [*0824.0020.0002] # OCR HOOK -2441 ; [*0825.0020.0002] # OCR CHAIR -2442 ; [*0826.0020.0002] # OCR FORK -2443 ; [*0827.0020.0002] # OCR INVERTED FORK -2444 ; [*0828.0020.0002] # OCR BELT BUCKLE -2445 ; [*0829.0020.0002] # OCR BOW TIE -2446 ; [*082A.0020.0002] # OCR BRANCH BANK IDENTIFICATION -2447 ; [*082B.0020.0002] # OCR AMOUNT OF CHECK -2448 ; [*082C.0020.0002] # OCR DASH -2449 ; [*082D.0020.0002] # OCR CUSTOMER ACCOUNT NUMBER -244A ; [*082E.0020.0002] # OCR DOUBLE BACKSLASH -2500 ; [*082F.0020.0002] # BOX DRAWINGS LIGHT HORIZONTAL -2501 ; [*0830.0020.0002] # BOX DRAWINGS HEAVY HORIZONTAL -2502 ; [*0831.0020.0002] # BOX DRAWINGS LIGHT VERTICAL -2503 ; [*0832.0020.0002] # BOX DRAWINGS HEAVY VERTICAL -2504 ; [*0833.0020.0002] # BOX DRAWINGS LIGHT TRIPLE DASH HORIZONTAL -2505 ; [*0834.0020.0002] # BOX DRAWINGS HEAVY TRIPLE DASH HORIZONTAL -2506 ; [*0835.0020.0002] # BOX DRAWINGS LIGHT TRIPLE DASH VERTICAL -2507 ; [*0836.0020.0002] # BOX DRAWINGS HEAVY TRIPLE DASH VERTICAL -2508 ; [*0837.0020.0002] # BOX DRAWINGS LIGHT QUADRUPLE DASH HORIZONTAL -2509 ; [*0838.0020.0002] # BOX DRAWINGS HEAVY QUADRUPLE DASH HORIZONTAL -250A ; [*0839.0020.0002] # BOX DRAWINGS LIGHT QUADRUPLE DASH VERTICAL -250B ; [*083A.0020.0002] # BOX DRAWINGS HEAVY QUADRUPLE DASH VERTICAL -250C ; [*083B.0020.0002] # BOX DRAWINGS LIGHT DOWN AND RIGHT -250D ; [*083C.0020.0002] # BOX DRAWINGS DOWN LIGHT AND RIGHT HEAVY -250E ; [*083D.0020.0002] # BOX DRAWINGS DOWN HEAVY AND RIGHT LIGHT -250F ; [*083E.0020.0002] # BOX DRAWINGS HEAVY DOWN AND RIGHT -2510 ; [*083F.0020.0002] # BOX DRAWINGS LIGHT DOWN AND LEFT -2511 ; [*0840.0020.0002] # BOX DRAWINGS DOWN LIGHT AND LEFT HEAVY -2512 ; [*0841.0020.0002] # BOX DRAWINGS DOWN HEAVY AND LEFT LIGHT -2513 ; [*0842.0020.0002] # BOX DRAWINGS HEAVY DOWN AND LEFT -2514 ; [*0843.0020.0002] # BOX DRAWINGS LIGHT UP AND RIGHT -2515 ; [*0844.0020.0002] # BOX DRAWINGS UP LIGHT AND RIGHT HEAVY -2516 ; [*0845.0020.0002] # BOX DRAWINGS UP HEAVY AND RIGHT LIGHT -2517 ; [*0846.0020.0002] # BOX DRAWINGS HEAVY UP AND RIGHT -2518 ; [*0847.0020.0002] # BOX DRAWINGS LIGHT UP AND LEFT -2519 ; [*0848.0020.0002] # BOX DRAWINGS UP LIGHT AND LEFT HEAVY -251A ; [*0849.0020.0002] # BOX DRAWINGS UP HEAVY AND LEFT LIGHT -251B ; [*084A.0020.0002] # BOX DRAWINGS HEAVY UP AND LEFT -251C ; [*084B.0020.0002] # BOX DRAWINGS LIGHT VERTICAL AND RIGHT -251D ; [*084C.0020.0002] # BOX DRAWINGS VERTICAL LIGHT AND RIGHT HEAVY -251E ; [*084D.0020.0002] # BOX DRAWINGS UP HEAVY AND RIGHT DOWN LIGHT -251F ; [*084E.0020.0002] # BOX DRAWINGS DOWN HEAVY AND RIGHT UP LIGHT -2520 ; [*084F.0020.0002] # BOX DRAWINGS VERTICAL HEAVY AND RIGHT LIGHT -2521 ; [*0850.0020.0002] # BOX DRAWINGS DOWN LIGHT AND RIGHT UP HEAVY -2522 ; [*0851.0020.0002] # BOX DRAWINGS UP LIGHT AND RIGHT DOWN HEAVY -2523 ; [*0852.0020.0002] # BOX DRAWINGS HEAVY VERTICAL AND RIGHT -2524 ; [*0853.0020.0002] # BOX DRAWINGS LIGHT VERTICAL AND LEFT -2525 ; [*0854.0020.0002] # BOX DRAWINGS VERTICAL LIGHT AND LEFT HEAVY -2526 ; [*0855.0020.0002] # BOX DRAWINGS UP HEAVY AND LEFT DOWN LIGHT -2527 ; [*0856.0020.0002] # BOX DRAWINGS DOWN HEAVY AND LEFT UP LIGHT -2528 ; [*0857.0020.0002] # BOX DRAWINGS VERTICAL HEAVY AND LEFT LIGHT -2529 ; [*0858.0020.0002] # BOX DRAWINGS DOWN LIGHT AND LEFT UP HEAVY -252A ; [*0859.0020.0002] # BOX DRAWINGS UP LIGHT AND LEFT DOWN HEAVY -252B ; [*085A.0020.0002] # BOX DRAWINGS HEAVY VERTICAL AND LEFT -252C ; [*085B.0020.0002] # BOX DRAWINGS LIGHT DOWN AND HORIZONTAL -252D ; [*085C.0020.0002] # BOX DRAWINGS LEFT HEAVY AND RIGHT DOWN LIGHT -252E ; [*085D.0020.0002] # BOX DRAWINGS RIGHT HEAVY AND LEFT DOWN LIGHT -252F ; [*085E.0020.0002] # BOX DRAWINGS DOWN LIGHT AND HORIZONTAL HEAVY -2530 ; [*085F.0020.0002] # BOX DRAWINGS DOWN HEAVY AND HORIZONTAL LIGHT -2531 ; [*0860.0020.0002] # BOX DRAWINGS RIGHT LIGHT AND LEFT DOWN HEAVY -2532 ; [*0861.0020.0002] # BOX DRAWINGS LEFT LIGHT AND RIGHT DOWN HEAVY -2533 ; [*0862.0020.0002] # BOX DRAWINGS HEAVY DOWN AND HORIZONTAL -2534 ; [*0863.0020.0002] # BOX DRAWINGS LIGHT UP AND HORIZONTAL -2535 ; [*0864.0020.0002] # BOX DRAWINGS LEFT HEAVY AND RIGHT UP LIGHT -2536 ; [*0865.0020.0002] # BOX DRAWINGS RIGHT HEAVY AND LEFT UP LIGHT -2537 ; [*0866.0020.0002] # BOX DRAWINGS UP LIGHT AND HORIZONTAL HEAVY -2538 ; [*0867.0020.0002] # BOX DRAWINGS UP HEAVY AND HORIZONTAL LIGHT -2539 ; [*0868.0020.0002] # BOX DRAWINGS RIGHT LIGHT AND LEFT UP HEAVY -253A ; [*0869.0020.0002] # BOX DRAWINGS LEFT LIGHT AND RIGHT UP HEAVY -253B ; [*086A.0020.0002] # BOX DRAWINGS HEAVY UP AND HORIZONTAL -253C ; [*086B.0020.0002] # BOX DRAWINGS LIGHT VERTICAL AND HORIZONTAL -253D ; [*086C.0020.0002] # BOX DRAWINGS LEFT HEAVY AND RIGHT VERTICAL LIGHT -253E ; [*086D.0020.0002] # BOX DRAWINGS RIGHT HEAVY AND LEFT VERTICAL LIGHT -253F ; [*086E.0020.0002] # BOX DRAWINGS VERTICAL LIGHT AND HORIZONTAL HEAVY -2540 ; [*086F.0020.0002] # BOX DRAWINGS UP HEAVY AND DOWN HORIZONTAL LIGHT -2541 ; [*0870.0020.0002] # BOX DRAWINGS DOWN HEAVY AND UP HORIZONTAL LIGHT -2542 ; [*0871.0020.0002] # BOX DRAWINGS VERTICAL HEAVY AND HORIZONTAL LIGHT -2543 ; [*0872.0020.0002] # BOX DRAWINGS LEFT UP HEAVY AND RIGHT DOWN LIGHT -2544 ; [*0873.0020.0002] # BOX DRAWINGS RIGHT UP HEAVY AND LEFT DOWN LIGHT -2545 ; [*0874.0020.0002] # BOX DRAWINGS LEFT DOWN HEAVY AND RIGHT UP LIGHT -2546 ; [*0875.0020.0002] # BOX DRAWINGS RIGHT DOWN HEAVY AND LEFT UP LIGHT -2547 ; [*0876.0020.0002] # BOX DRAWINGS DOWN LIGHT AND UP HORIZONTAL HEAVY -2548 ; [*0877.0020.0002] # BOX DRAWINGS UP LIGHT AND DOWN HORIZONTAL HEAVY -2549 ; [*0878.0020.0002] # BOX DRAWINGS RIGHT LIGHT AND LEFT VERTICAL HEAVY -254A ; [*0879.0020.0002] # BOX DRAWINGS LEFT LIGHT AND RIGHT VERTICAL HEAVY -254B ; [*087A.0020.0002] # BOX DRAWINGS HEAVY VERTICAL AND HORIZONTAL -254C ; [*087B.0020.0002] # BOX DRAWINGS LIGHT DOUBLE DASH HORIZONTAL -254D ; [*087C.0020.0002] # BOX DRAWINGS HEAVY DOUBLE DASH HORIZONTAL -254E ; [*087D.0020.0002] # BOX DRAWINGS LIGHT DOUBLE DASH VERTICAL -254F ; [*087E.0020.0002] # BOX DRAWINGS HEAVY DOUBLE DASH VERTICAL -2550 ; [*087F.0020.0002] # BOX DRAWINGS DOUBLE HORIZONTAL -2551 ; [*0880.0020.0002] # BOX DRAWINGS DOUBLE VERTICAL -2552 ; [*0881.0020.0002] # BOX DRAWINGS DOWN SINGLE AND RIGHT DOUBLE -2553 ; [*0882.0020.0002] # BOX DRAWINGS DOWN DOUBLE AND RIGHT SINGLE -2554 ; [*0883.0020.0002] # BOX DRAWINGS DOUBLE DOWN AND RIGHT -2555 ; [*0884.0020.0002] # BOX DRAWINGS DOWN SINGLE AND LEFT DOUBLE -2556 ; [*0885.0020.0002] # BOX DRAWINGS DOWN DOUBLE AND LEFT SINGLE -2557 ; [*0886.0020.0002] # BOX DRAWINGS DOUBLE DOWN AND LEFT -2558 ; [*0887.0020.0002] # BOX DRAWINGS UP SINGLE AND RIGHT DOUBLE -2559 ; [*0888.0020.0002] # BOX DRAWINGS UP DOUBLE AND RIGHT SINGLE -255A ; [*0889.0020.0002] # BOX DRAWINGS DOUBLE UP AND RIGHT -255B ; [*088A.0020.0002] # BOX DRAWINGS UP SINGLE AND LEFT DOUBLE -255C ; [*088B.0020.0002] # BOX DRAWINGS UP DOUBLE AND LEFT SINGLE -255D ; [*088C.0020.0002] # BOX DRAWINGS DOUBLE UP AND LEFT -255E ; [*088D.0020.0002] # BOX DRAWINGS VERTICAL SINGLE AND RIGHT DOUBLE -255F ; [*088E.0020.0002] # BOX DRAWINGS VERTICAL DOUBLE AND RIGHT SINGLE -2560 ; [*088F.0020.0002] # BOX DRAWINGS DOUBLE VERTICAL AND RIGHT -2561 ; [*0890.0020.0002] # BOX DRAWINGS VERTICAL SINGLE AND LEFT DOUBLE -2562 ; [*0891.0020.0002] # BOX DRAWINGS VERTICAL DOUBLE AND LEFT SINGLE -2563 ; [*0892.0020.0002] # BOX DRAWINGS DOUBLE VERTICAL AND LEFT -2564 ; [*0893.0020.0002] # BOX DRAWINGS DOWN SINGLE AND HORIZONTAL DOUBLE -2565 ; [*0894.0020.0002] # BOX DRAWINGS DOWN DOUBLE AND HORIZONTAL SINGLE -2566 ; [*0895.0020.0002] # BOX DRAWINGS DOUBLE DOWN AND HORIZONTAL -2567 ; [*0896.0020.0002] # BOX DRAWINGS UP SINGLE AND HORIZONTAL DOUBLE -2568 ; [*0897.0020.0002] # BOX DRAWINGS UP DOUBLE AND HORIZONTAL SINGLE -2569 ; [*0898.0020.0002] # BOX DRAWINGS DOUBLE UP AND HORIZONTAL -256A ; [*0899.0020.0002] # BOX DRAWINGS VERTICAL SINGLE AND HORIZONTAL DOUBLE -256B ; [*089A.0020.0002] # BOX DRAWINGS VERTICAL DOUBLE AND HORIZONTAL SINGLE -256C ; [*089B.0020.0002] # BOX DRAWINGS DOUBLE VERTICAL AND HORIZONTAL -256D ; [*089C.0020.0002] # BOX DRAWINGS LIGHT ARC DOWN AND RIGHT -256E ; [*089D.0020.0002] # BOX DRAWINGS LIGHT ARC DOWN AND LEFT -256F ; [*089E.0020.0002] # BOX DRAWINGS LIGHT ARC UP AND LEFT -2570 ; [*089F.0020.0002] # BOX DRAWINGS LIGHT ARC UP AND RIGHT -2571 ; [*08A0.0020.0002] # BOX DRAWINGS LIGHT DIAGONAL UPPER RIGHT TO LOWER LEFT -2572 ; [*08A1.0020.0002] # BOX DRAWINGS LIGHT DIAGONAL UPPER LEFT TO LOWER RIGHT -2573 ; [*08A2.0020.0002] # BOX DRAWINGS LIGHT DIAGONAL CROSS -2574 ; [*08A3.0020.0002] # BOX DRAWINGS LIGHT LEFT -2575 ; [*08A4.0020.0002] # BOX DRAWINGS LIGHT UP -2576 ; [*08A5.0020.0002] # BOX DRAWINGS LIGHT RIGHT -2577 ; [*08A6.0020.0002] # BOX DRAWINGS LIGHT DOWN -2578 ; [*08A7.0020.0002] # BOX DRAWINGS HEAVY LEFT -2579 ; [*08A8.0020.0002] # BOX DRAWINGS HEAVY UP -257A ; [*08A9.0020.0002] # BOX DRAWINGS HEAVY RIGHT -257B ; [*08AA.0020.0002] # BOX DRAWINGS HEAVY DOWN -257C ; [*08AB.0020.0002] # BOX DRAWINGS LIGHT LEFT AND HEAVY RIGHT -257D ; [*08AC.0020.0002] # BOX DRAWINGS LIGHT UP AND HEAVY DOWN -257E ; [*08AD.0020.0002] # BOX DRAWINGS HEAVY LEFT AND LIGHT RIGHT -257F ; [*08AE.0020.0002] # BOX DRAWINGS HEAVY UP AND LIGHT DOWN -2580 ; [*08AF.0020.0002] # UPPER HALF BLOCK -2581 ; [*08B0.0020.0002] # LOWER ONE EIGHTH BLOCK -2582 ; [*08B1.0020.0002] # LOWER ONE QUARTER BLOCK -2583 ; [*08B2.0020.0002] # LOWER THREE EIGHTHS BLOCK -2584 ; [*08B3.0020.0002] # LOWER HALF BLOCK -2585 ; [*08B4.0020.0002] # LOWER FIVE EIGHTHS BLOCK -2586 ; [*08B5.0020.0002] # LOWER THREE QUARTERS BLOCK -2587 ; [*08B6.0020.0002] # LOWER SEVEN EIGHTHS BLOCK -2588 ; [*08B7.0020.0002] # FULL BLOCK -2589 ; [*08B8.0020.0002] # LEFT SEVEN EIGHTHS BLOCK -258A ; [*08B9.0020.0002] # LEFT THREE QUARTERS BLOCK -258B ; [*08BA.0020.0002] # LEFT FIVE EIGHTHS BLOCK -258C ; [*08BB.0020.0002] # LEFT HALF BLOCK -258D ; [*08BC.0020.0002] # LEFT THREE EIGHTHS BLOCK -258E ; [*08BD.0020.0002] # LEFT ONE QUARTER BLOCK -258F ; [*08BE.0020.0002] # LEFT ONE EIGHTH BLOCK -2590 ; [*08BF.0020.0002] # RIGHT HALF BLOCK -2591 ; [*08C0.0020.0002] # LIGHT SHADE -2592 ; [*08C1.0020.0002] # MEDIUM SHADE -2593 ; [*08C2.0020.0002] # DARK SHADE -2594 ; [*08C3.0020.0002] # UPPER ONE EIGHTH BLOCK -2595 ; [*08C4.0020.0002] # RIGHT ONE EIGHTH BLOCK -2596 ; [*08C5.0020.0002] # QUADRANT LOWER LEFT -2597 ; [*08C6.0020.0002] # QUADRANT LOWER RIGHT -2598 ; [*08C7.0020.0002] # QUADRANT UPPER LEFT -2599 ; [*08C8.0020.0002] # QUADRANT UPPER LEFT AND LOWER LEFT AND LOWER RIGHT -259A ; [*08C9.0020.0002] # QUADRANT UPPER LEFT AND LOWER RIGHT -259B ; [*08CA.0020.0002] # QUADRANT UPPER LEFT AND UPPER RIGHT AND LOWER LEFT -259C ; [*08CB.0020.0002] # QUADRANT UPPER LEFT AND UPPER RIGHT AND LOWER RIGHT -259D ; [*08CC.0020.0002] # QUADRANT UPPER RIGHT -259E ; [*08CD.0020.0002] # QUADRANT UPPER RIGHT AND LOWER LEFT -259F ; [*08CE.0020.0002] # QUADRANT UPPER RIGHT AND LOWER LEFT AND LOWER RIGHT -25A0 ; [*08CF.0020.0002] # BLACK SQUARE -25A1 ; [*08D0.0020.0002] # WHITE SQUARE -25A2 ; [*08D1.0020.0002] # WHITE SQUARE WITH ROUNDED CORNERS -25A3 ; [*08D2.0020.0002] # WHITE SQUARE CONTAINING BLACK SMALL SQUARE -25A4 ; [*08D3.0020.0002] # SQUARE WITH HORIZONTAL FILL -25A5 ; [*08D4.0020.0002] # SQUARE WITH VERTICAL FILL -25A6 ; [*08D5.0020.0002] # SQUARE WITH ORTHOGONAL CROSSHATCH FILL -25A7 ; [*08D6.0020.0002] # SQUARE WITH UPPER LEFT TO LOWER RIGHT FILL -25A8 ; [*08D7.0020.0002] # SQUARE WITH UPPER RIGHT TO LOWER LEFT FILL -25A9 ; [*08D8.0020.0002] # SQUARE WITH DIAGONAL CROSSHATCH FILL -25AA ; [*08D9.0020.0002] # BLACK SMALL SQUARE -25AB ; [*08DA.0020.0002] # WHITE SMALL SQUARE -25AC ; [*08DB.0020.0002] # BLACK RECTANGLE -25AD ; [*08DC.0020.0002] # WHITE RECTANGLE -25AE ; [*08DD.0020.0002] # BLACK VERTICAL RECTANGLE -25AF ; [*08DE.0020.0002] # WHITE VERTICAL RECTANGLE -25B0 ; [*08DF.0020.0002] # BLACK PARALLELOGRAM -25B1 ; [*08E0.0020.0002] # WHITE PARALLELOGRAM -25B2 ; [*08E1.0020.0002] # BLACK UP-POINTING TRIANGLE -25B3 ; [*08E2.0020.0002] # WHITE UP-POINTING TRIANGLE -25B4 ; [*08E3.0020.0002] # BLACK UP-POINTING SMALL TRIANGLE -25B5 ; [*08E4.0020.0002] # WHITE UP-POINTING SMALL TRIANGLE -25B6 ; [*08E5.0020.0002] # BLACK RIGHT-POINTING TRIANGLE -25B7 ; [*08E6.0020.0002] # WHITE RIGHT-POINTING TRIANGLE -25B8 ; [*08E7.0020.0002] # BLACK RIGHT-POINTING SMALL TRIANGLE -25B9 ; [*08E8.0020.0002] # WHITE RIGHT-POINTING SMALL TRIANGLE -25BA ; [*08E9.0020.0002] # BLACK RIGHT-POINTING POINTER -25BB ; [*08EA.0020.0002] # WHITE RIGHT-POINTING POINTER -25BC ; [*08EB.0020.0002] # BLACK DOWN-POINTING TRIANGLE -25BD ; [*08EC.0020.0002] # WHITE DOWN-POINTING TRIANGLE -25BE ; [*08ED.0020.0002] # BLACK DOWN-POINTING SMALL TRIANGLE -25BF ; [*08EE.0020.0002] # WHITE DOWN-POINTING SMALL TRIANGLE -25C0 ; [*08EF.0020.0002] # BLACK LEFT-POINTING TRIANGLE -25C1 ; [*08F0.0020.0002] # WHITE LEFT-POINTING TRIANGLE -25C2 ; [*08F1.0020.0002] # BLACK LEFT-POINTING SMALL TRIANGLE -25C3 ; [*08F2.0020.0002] # WHITE LEFT-POINTING SMALL TRIANGLE -25C4 ; [*08F3.0020.0002] # BLACK LEFT-POINTING POINTER -25C5 ; [*08F4.0020.0002] # WHITE LEFT-POINTING POINTER -25C6 ; [*08F5.0020.0002] # BLACK DIAMOND -25C7 ; [*08F6.0020.0002] # WHITE DIAMOND -25C8 ; [*08F7.0020.0002] # WHITE DIAMOND CONTAINING BLACK SMALL DIAMOND -25C9 ; [*08F8.0020.0002] # FISHEYE -25CA ; [*08F9.0020.0002] # LOZENGE -25CB ; [*08FA.0020.0002] # WHITE CIRCLE -25CC ; [*08FB.0020.0002] # DOTTED CIRCLE -25CD ; [*08FC.0020.0002] # CIRCLE WITH VERTICAL FILL -25CE ; [*08FD.0020.0002] # BULLSEYE -25CF ; [*08FE.0020.0002] # BLACK CIRCLE -25D0 ; [*08FF.0020.0002] # CIRCLE WITH LEFT HALF BLACK -25D1 ; [*0900.0020.0002] # CIRCLE WITH RIGHT HALF BLACK -25D2 ; [*0901.0020.0002] # CIRCLE WITH LOWER HALF BLACK -25D3 ; [*0902.0020.0002] # CIRCLE WITH UPPER HALF BLACK -25D4 ; [*0903.0020.0002] # CIRCLE WITH UPPER RIGHT QUADRANT BLACK -25D5 ; [*0904.0020.0002] # CIRCLE WITH ALL BUT UPPER LEFT QUADRANT BLACK -25D6 ; [*0905.0020.0002] # LEFT HALF BLACK CIRCLE -25D7 ; [*0906.0020.0002] # RIGHT HALF BLACK CIRCLE -25D8 ; [*0907.0020.0002] # INVERSE BULLET -25D9 ; [*0908.0020.0002] # INVERSE WHITE CIRCLE -25DA ; [*0909.0020.0002] # UPPER HALF INVERSE WHITE CIRCLE -25DB ; [*090A.0020.0002] # LOWER HALF INVERSE WHITE CIRCLE -25DC ; [*090B.0020.0002] # UPPER LEFT QUADRANT CIRCULAR ARC -25DD ; [*090C.0020.0002] # UPPER RIGHT QUADRANT CIRCULAR ARC -25DE ; [*090D.0020.0002] # LOWER RIGHT QUADRANT CIRCULAR ARC -25DF ; [*090E.0020.0002] # LOWER LEFT QUADRANT CIRCULAR ARC -25E0 ; [*090F.0020.0002] # UPPER HALF CIRCLE -25E1 ; [*0910.0020.0002] # LOWER HALF CIRCLE -25E2 ; [*0911.0020.0002] # BLACK LOWER RIGHT TRIANGLE -25E3 ; [*0912.0020.0002] # BLACK LOWER LEFT TRIANGLE -25E4 ; [*0913.0020.0002] # BLACK UPPER LEFT TRIANGLE -25E5 ; [*0914.0020.0002] # BLACK UPPER RIGHT TRIANGLE -25E6 ; [*0915.0020.0002] # WHITE BULLET -25E7 ; [*0916.0020.0002] # SQUARE WITH LEFT HALF BLACK -25E8 ; [*0917.0020.0002] # SQUARE WITH RIGHT HALF BLACK -25E9 ; [*0918.0020.0002] # SQUARE WITH UPPER LEFT DIAGONAL HALF BLACK -25EA ; [*0919.0020.0002] # SQUARE WITH LOWER RIGHT DIAGONAL HALF BLACK -25EB ; [*091A.0020.0002] # WHITE SQUARE WITH VERTICAL BISECTING LINE -25EC ; [*091B.0020.0002] # WHITE UP-POINTING TRIANGLE WITH DOT -25ED ; [*091C.0020.0002] # UP-POINTING TRIANGLE WITH LEFT HALF BLACK -25EE ; [*091D.0020.0002] # UP-POINTING TRIANGLE WITH RIGHT HALF BLACK -25EF ; [*091E.0020.0002] # LARGE CIRCLE -25F0 ; [*091F.0020.0002] # WHITE SQUARE WITH UPPER LEFT QUADRANT -25F1 ; [*0920.0020.0002] # WHITE SQUARE WITH LOWER LEFT QUADRANT -25F2 ; [*0921.0020.0002] # WHITE SQUARE WITH LOWER RIGHT QUADRANT -25F3 ; [*0922.0020.0002] # WHITE SQUARE WITH UPPER RIGHT QUADRANT -25F4 ; [*0923.0020.0002] # WHITE CIRCLE WITH UPPER LEFT QUADRANT -25F5 ; [*0924.0020.0002] # WHITE CIRCLE WITH LOWER LEFT QUADRANT -25F6 ; [*0925.0020.0002] # WHITE CIRCLE WITH LOWER RIGHT QUADRANT -25F7 ; [*0926.0020.0002] # WHITE CIRCLE WITH UPPER RIGHT QUADRANT -25F8 ; [*0927.0020.0002] # UPPER LEFT TRIANGLE -25F9 ; [*0928.0020.0002] # UPPER RIGHT TRIANGLE -25FA ; [*0929.0020.0002] # LOWER LEFT TRIANGLE -25FB ; [*092A.0020.0002] # WHITE MEDIUM SQUARE -25FC ; [*092B.0020.0002] # BLACK MEDIUM SQUARE -25FD ; [*092C.0020.0002] # WHITE MEDIUM SMALL SQUARE -25FE ; [*092D.0020.0002] # BLACK MEDIUM SMALL SQUARE -25FF ; [*092E.0020.0002] # LOWER RIGHT TRIANGLE -2600 ; [*092F.0020.0002] # BLACK SUN WITH RAYS -2601 ; [*0930.0020.0002] # CLOUD -2602 ; [*0931.0020.0002] # UMBRELLA -2603 ; [*0932.0020.0002] # SNOWMAN -2604 ; [*0933.0020.0002] # COMET -2605 ; [*0934.0020.0002] # BLACK STAR -2606 ; [*0935.0020.0002] # WHITE STAR -2607 ; [*0936.0020.0002] # LIGHTNING -2608 ; [*0937.0020.0002] # THUNDERSTORM -2609 ; [*0938.0020.0002] # SUN -260A ; [*0939.0020.0002] # ASCENDING NODE -260B ; [*093A.0020.0002] # DESCENDING NODE -260C ; [*093B.0020.0002] # CONJUNCTION -260D ; [*093C.0020.0002] # OPPOSITION -260E ; [*093D.0020.0002] # BLACK TELEPHONE -260F ; [*093E.0020.0002] # WHITE TELEPHONE -2610 ; [*093F.0020.0002] # BALLOT BOX -2611 ; [*0940.0020.0002] # BALLOT BOX WITH CHECK -2612 ; [*0941.0020.0002] # BALLOT BOX WITH X -2613 ; [*0942.0020.0002] # SALTIRE -2614 ; [*0943.0020.0002] # UMBRELLA WITH RAIN DROPS -2615 ; [*0944.0020.0002] # HOT BEVERAGE -2616 ; [*0945.0020.0002] # WHITE SHOGI PIECE -2617 ; [*0946.0020.0002] # BLACK SHOGI PIECE -2618 ; [*0947.0020.0002] # SHAMROCK -2619 ; [*0948.0020.0002] # REVERSED ROTATED FLORAL HEART BULLET -261A ; [*0949.0020.0002] # BLACK LEFT POINTING INDEX -261B ; [*094A.0020.0002] # BLACK RIGHT POINTING INDEX -261C ; [*094B.0020.0002] # WHITE LEFT POINTING INDEX -261D ; [*094C.0020.0002] # WHITE UP POINTING INDEX -261E ; [*094D.0020.0002] # WHITE RIGHT POINTING INDEX -261F ; [*094E.0020.0002] # WHITE DOWN POINTING INDEX -2620 ; [*094F.0020.0002] # SKULL AND CROSSBONES -2621 ; [*0950.0020.0002] # CAUTION SIGN -2622 ; [*0951.0020.0002] # RADIOACTIVE SIGN -2623 ; [*0952.0020.0002] # BIOHAZARD SIGN -2624 ; [*0953.0020.0002] # CADUCEUS -2625 ; [*0954.0020.0002] # ANKH -2626 ; [*0955.0020.0002] # ORTHODOX CROSS -2627 ; [*0956.0020.0002] # CHI RHO -2628 ; [*0957.0020.0002] # CROSS OF LORRAINE -2629 ; [*0958.0020.0002] # CROSS OF JERUSALEM -262A ; [*0959.0020.0002] # STAR AND CRESCENT -262B ; [*095A.0020.0002] # FARSI SYMBOL -262C ; [*095B.0020.0002] # ADI SHAKTI -262D ; [*095C.0020.0002] # HAMMER AND SICKLE -262E ; [*095D.0020.0002] # PEACE SYMBOL -262F ; [*095E.0020.0002] # YIN YANG -2630 ; [*0EBA.0020.0002] # TRIGRAM FOR HEAVEN -2631 ; [*0EBB.0020.0002] # TRIGRAM FOR LAKE -2632 ; [*0EBC.0020.0002] # TRIGRAM FOR FIRE -2633 ; [*0EBD.0020.0002] # TRIGRAM FOR THUNDER -2634 ; [*0EBE.0020.0002] # TRIGRAM FOR WIND -2635 ; [*0EBF.0020.0002] # TRIGRAM FOR WATER -2636 ; [*0EC0.0020.0002] # TRIGRAM FOR MOUNTAIN -2637 ; [*0EC1.0020.0002] # TRIGRAM FOR EARTH -2638 ; [*095F.0020.0002] # WHEEL OF DHARMA -2639 ; [*0960.0020.0002] # WHITE FROWNING FACE -263A ; [*0961.0020.0002] # WHITE SMILING FACE -263B ; [*0962.0020.0002] # BLACK SMILING FACE -263C ; [*0963.0020.0002] # WHITE SUN WITH RAYS -263D ; [*0964.0020.0002] # FIRST QUARTER MOON -263E ; [*0965.0020.0002] # LAST QUARTER MOON -263F ; [*0966.0020.0002] # MERCURY -2640 ; [*0967.0020.0002] # FEMALE SIGN -2641 ; [*0968.0020.0002] # EARTH -2642 ; [*0969.0020.0002] # MALE SIGN -2643 ; [*096A.0020.0002] # JUPITER -2644 ; [*096B.0020.0002] # SATURN -2645 ; [*096C.0020.0002] # URANUS -2646 ; [*096D.0020.0002] # NEPTUNE -2647 ; [*096E.0020.0002] # PLUTO -2648 ; [*096F.0020.0002] # ARIES -2649 ; [*0970.0020.0002] # TAURUS -264A ; [*0971.0020.0002] # GEMINI -264B ; [*0972.0020.0002] # CANCER -264C ; [*0973.0020.0002] # LEO -264D ; [*0974.0020.0002] # VIRGO -264E ; [*0975.0020.0002] # LIBRA -264F ; [*0976.0020.0002] # SCORPIUS -2650 ; [*0977.0020.0002] # SAGITTARIUS -2651 ; [*0978.0020.0002] # CAPRICORN -2652 ; [*0979.0020.0002] # AQUARIUS -2653 ; [*097A.0020.0002] # PISCES -2654 ; [*097B.0020.0002] # WHITE CHESS KING -2655 ; [*097C.0020.0002] # WHITE CHESS QUEEN -2656 ; [*097D.0020.0002] # WHITE CHESS ROOK -2657 ; [*097E.0020.0002] # WHITE CHESS BISHOP -2658 ; [*097F.0020.0002] # WHITE CHESS KNIGHT -2659 ; [*0980.0020.0002] # WHITE CHESS PAWN -265A ; [*0981.0020.0002] # BLACK CHESS KING -265B ; [*0982.0020.0002] # BLACK CHESS QUEEN -265C ; [*0983.0020.0002] # BLACK CHESS ROOK -265D ; [*0984.0020.0002] # BLACK CHESS BISHOP -265E ; [*0985.0020.0002] # BLACK CHESS KNIGHT -265F ; [*0986.0020.0002] # BLACK CHESS PAWN -2660 ; [*0987.0020.0002] # BLACK SPADE SUIT -2661 ; [*0988.0020.0002] # WHITE HEART SUIT -2662 ; [*0989.0020.0002] # WHITE DIAMOND SUIT -2663 ; [*098A.0020.0002] # BLACK CLUB SUIT -2664 ; [*098B.0020.0002] # WHITE SPADE SUIT -2665 ; [*098C.0020.0002] # BLACK HEART SUIT -2666 ; [*098D.0020.0002] # BLACK DIAMOND SUIT -2667 ; [*098E.0020.0002] # WHITE CLUB SUIT -2668 ; [*098F.0020.0002] # HOT SPRINGS -2669 ; [*0990.0020.0002] # QUARTER NOTE -266A ; [*0991.0020.0002] # EIGHTH NOTE -266B ; [*0992.0020.0002] # BEAMED EIGHTH NOTES -266C ; [*0993.0020.0002] # BEAMED SIXTEENTH NOTES -266D ; [*110B.0020.0002] # MUSIC FLAT SIGN -266E ; [*110C.0020.0002] # MUSIC NATURAL SIGN -266F ; [*110D.0020.0002] # MUSIC SHARP SIGN -2670 ; [*0994.0020.0002] # WEST SYRIAC CROSS -2671 ; [*0995.0020.0002] # EAST SYRIAC CROSS -2672 ; [*0996.0020.0002] # UNIVERSAL RECYCLING SYMBOL -2673 ; [*0997.0020.0002] # RECYCLING SYMBOL FOR TYPE-1 PLASTICS -2674 ; [*0998.0020.0002] # RECYCLING SYMBOL FOR TYPE-2 PLASTICS -2675 ; [*0999.0020.0002] # RECYCLING SYMBOL FOR TYPE-3 PLASTICS -2676 ; [*099A.0020.0002] # RECYCLING SYMBOL FOR TYPE-4 PLASTICS -2677 ; [*099B.0020.0002] # RECYCLING SYMBOL FOR TYPE-5 PLASTICS -2678 ; [*099C.0020.0002] # RECYCLING SYMBOL FOR TYPE-6 PLASTICS -2679 ; [*099D.0020.0002] # RECYCLING SYMBOL FOR TYPE-7 PLASTICS -267A ; [*099E.0020.0002] # RECYCLING SYMBOL FOR GENERIC MATERIALS -267B ; [*099F.0020.0002] # BLACK UNIVERSAL RECYCLING SYMBOL -267C ; [*09A0.0020.0002] # RECYCLED PAPER SYMBOL -267D ; [*09A1.0020.0002] # PARTIALLY-RECYCLED PAPER SYMBOL -267E ; [*09A2.0020.0002] # PERMANENT PAPER SIGN -267F ; [*09A3.0020.0002] # WHEELCHAIR SYMBOL -2680 ; [*09A4.0020.0002] # DIE FACE-1 -2681 ; [*09A5.0020.0002] # DIE FACE-2 -2682 ; [*09A6.0020.0002] # DIE FACE-3 -2683 ; [*09A7.0020.0002] # DIE FACE-4 -2684 ; [*09A8.0020.0002] # DIE FACE-5 -2685 ; [*09A9.0020.0002] # DIE FACE-6 -2686 ; [*09AA.0020.0002] # WHITE CIRCLE WITH DOT RIGHT -2687 ; [*09AB.0020.0002] # WHITE CIRCLE WITH TWO DOTS -2688 ; [*09AC.0020.0002] # BLACK CIRCLE WITH WHITE DOT RIGHT -2689 ; [*09AD.0020.0002] # BLACK CIRCLE WITH TWO WHITE DOTS -268A ; [*0EB4.0020.0002] # MONOGRAM FOR YANG -268B ; [*0EB5.0020.0002] # MONOGRAM FOR YIN -268C ; [*0EB6.0020.0002] # DIGRAM FOR GREATER YANG -268D ; [*0EB7.0020.0002] # DIGRAM FOR LESSER YIN -268E ; [*0EB8.0020.0002] # DIGRAM FOR LESSER YANG -268F ; [*0EB9.0020.0002] # DIGRAM FOR GREATER YIN -2690 ; [*09AE.0020.0002] # WHITE FLAG -2691 ; [*09AF.0020.0002] # BLACK FLAG -2692 ; [*09B0.0020.0002] # HAMMER AND PICK -2693 ; [*09B1.0020.0002] # ANCHOR -2694 ; [*09B2.0020.0002] # CROSSED SWORDS -2695 ; [*09B3.0020.0002] # STAFF OF AESCULAPIUS -2696 ; [*09B4.0020.0002] # SCALES -2697 ; [*09B5.0020.0002] # ALEMBIC -2698 ; [*09B6.0020.0002] # FLOWER -2699 ; [*09B7.0020.0002] # GEAR -269A ; [*09B8.0020.0002] # STAFF OF HERMES -269B ; [*09B9.0020.0002] # ATOM SYMBOL -269C ; [*09BA.0020.0002] # FLEUR-DE-LIS -269D ; [*09BB.0020.0002] # OUTLINED WHITE STAR -269E ; [*09BC.0020.0002] # THREE LINES CONVERGING RIGHT -269F ; [*09BD.0020.0002] # THREE LINES CONVERGING LEFT -26A0 ; [*09BE.0020.0002] # WARNING SIGN -26A1 ; [*09BF.0020.0002] # HIGH VOLTAGE SIGN -26A2 ; [*09C0.0020.0002] # DOUBLED FEMALE SIGN -26A3 ; [*09C1.0020.0002] # DOUBLED MALE SIGN -26A4 ; [*09C2.0020.0002] # INTERLOCKED FEMALE AND MALE SIGN -26A5 ; [*09C3.0020.0002] # MALE AND FEMALE SIGN -26A6 ; [*09C4.0020.0002] # MALE WITH STROKE SIGN -26A7 ; [*09C5.0020.0002] # MALE WITH STROKE AND MALE AND FEMALE SIGN -26A8 ; [*09C6.0020.0002] # VERTICAL MALE WITH STROKE SIGN -26A9 ; [*09C7.0020.0002] # HORIZONTAL MALE WITH STROKE SIGN -26AA ; [*09C8.0020.0002] # MEDIUM WHITE CIRCLE -26AB ; [*09C9.0020.0002] # MEDIUM BLACK CIRCLE -26AC ; [*09CA.0020.0002] # MEDIUM SMALL WHITE CIRCLE -26AD ; [*09CB.0020.0002] # MARRIAGE SYMBOL -26AE ; [*09CC.0020.0002] # DIVORCE SYMBOL -26AF ; [*09CD.0020.0002] # UNMARRIED PARTNERSHIP SYMBOL -26B0 ; [*09CE.0020.0002] # COFFIN -26B1 ; [*09CF.0020.0002] # FUNERAL URN -26B2 ; [*09D0.0020.0002] # NEUTER -26B3 ; [*09D1.0020.0002] # CERES -26B4 ; [*09D2.0020.0002] # PALLAS -26B5 ; [*09D3.0020.0002] # JUNO -26B6 ; [*09D4.0020.0002] # VESTA -26B7 ; [*09D5.0020.0002] # CHIRON -26B8 ; [*09D6.0020.0002] # BLACK MOON LILITH -26B9 ; [*09D7.0020.0002] # SEXTILE -26BA ; [*09D8.0020.0002] # SEMISEXTILE -26BB ; [*09D9.0020.0002] # QUINCUNX -26BC ; [*09DA.0020.0002] # SESQUIQUADRATE -26BD ; [*09DB.0020.0002] # SOCCER BALL -26BE ; [*09DC.0020.0002] # BASEBALL -26BF ; [*09DD.0020.0002] # SQUARED KEY -26C0 ; [*09DE.0020.0002] # WHITE DRAUGHTS MAN -26C1 ; [*09DF.0020.0002] # WHITE DRAUGHTS KING -26C2 ; [*09E0.0020.0002] # BLACK DRAUGHTS MAN -26C3 ; [*09E1.0020.0002] # BLACK DRAUGHTS KING -26C4 ; [*09E2.0020.0002] # SNOWMAN WITHOUT SNOW -26C5 ; [*09E3.0020.0002] # SUN BEHIND CLOUD -26C6 ; [*09E4.0020.0002] # RAIN -26C7 ; [*09E5.0020.0002] # BLACK SNOWMAN -26C8 ; [*09E6.0020.0002] # THUNDER CLOUD AND RAIN -26C9 ; [*09E7.0020.0002] # TURNED WHITE SHOGI PIECE -26CA ; [*09E8.0020.0002] # TURNED BLACK SHOGI PIECE -26CB ; [*09E9.0020.0002] # WHITE DIAMOND IN SQUARE -26CC ; [*09EA.0020.0002] # CROSSING LANES -26CD ; [*09EB.0020.0002] # DISABLED CAR -26CE ; [*09EC.0020.0002] # OPHIUCHUS -26CF ; [*09ED.0020.0002] # PICK -26D0 ; [*09EE.0020.0002] # CAR SLIDING -26D1 ; [*09EF.0020.0002] # HELMET WITH WHITE CROSS -26D2 ; [*09F0.0020.0002] # CIRCLED CROSSING LANES -26D3 ; [*09F1.0020.0002] # CHAINS -26D4 ; [*09F2.0020.0002] # NO ENTRY -26D5 ; [*09F3.0020.0002] # ALTERNATE ONE-WAY LEFT WAY TRAFFIC -26D6 ; [*09F4.0020.0002] # BLACK TWO-WAY LEFT WAY TRAFFIC -26D7 ; [*09F5.0020.0002] # WHITE TWO-WAY LEFT WAY TRAFFIC -26D8 ; [*09F6.0020.0002] # BLACK LEFT LANE MERGE -26D9 ; [*09F7.0020.0002] # WHITE LEFT LANE MERGE -26DA ; [*09F8.0020.0002] # DRIVE SLOW SIGN -26DB ; [*09F9.0020.0002] # HEAVY WHITE DOWN-POINTING TRIANGLE -26DC ; [*09FA.0020.0002] # LEFT CLOSED ENTRY -26DD ; [*09FB.0020.0002] # SQUARED SALTIRE -26DE ; [*09FC.0020.0002] # FALLING DIAGONAL IN WHITE CIRCLE IN BLACK SQUARE -26DF ; [*09FD.0020.0002] # BLACK TRUCK -26E0 ; [*09FE.0020.0002] # RESTRICTED LEFT ENTRY-1 -26E1 ; [*09FF.0020.0002] # RESTRICTED LEFT ENTRY-2 -26E2 ; [*0A00.0020.0002] # ASTRONOMICAL SYMBOL FOR URANUS -26E3 ; [*0A01.0020.0002] # HEAVY CIRCLE WITH STROKE AND TWO DOTS ABOVE -26E4 ; [*0A02.0020.0002] # PENTAGRAM -26E5 ; [*0A03.0020.0002] # RIGHT-HANDED INTERLACED PENTAGRAM -26E6 ; [*0A04.0020.0002] # LEFT-HANDED INTERLACED PENTAGRAM -26E7 ; [*0A05.0020.0002] # INVERTED PENTAGRAM -26E8 ; [*0A06.0020.0002] # BLACK CROSS ON SHIELD -26E9 ; [*0A07.0020.0002] # SHINTO SHRINE -26EA ; [*0A08.0020.0002] # CHURCH -26EB ; [*0A09.0020.0002] # CASTLE -26EC ; [*0A0A.0020.0002] # HISTORIC SITE -26ED ; [*0A0B.0020.0002] # GEAR WITHOUT HUB -26EE ; [*0A0C.0020.0002] # GEAR WITH HANDLES -26EF ; [*0A0D.0020.0002] # MAP SYMBOL FOR LIGHTHOUSE -26F0 ; [*0A0E.0020.0002] # MOUNTAIN -26F1 ; [*0A0F.0020.0002] # UMBRELLA ON GROUND -26F2 ; [*0A10.0020.0002] # FOUNTAIN -26F3 ; [*0A11.0020.0002] # FLAG IN HOLE -26F4 ; [*0A12.0020.0002] # FERRY -26F5 ; [*0A13.0020.0002] # SAILBOAT -26F6 ; [*0A14.0020.0002] # SQUARE FOUR CORNERS -26F7 ; [*0A15.0020.0002] # SKIER -26F8 ; [*0A16.0020.0002] # ICE SKATE -26F9 ; [*0A17.0020.0002] # PERSON WITH BALL -26FA ; [*0A18.0020.0002] # TENT -26FB ; [*0A19.0020.0002] # JAPANESE BANK SYMBOL -26FC ; [*0A1A.0020.0002] # HEADSTONE GRAVEYARD SYMBOL -26FD ; [*0A1B.0020.0002] # FUEL PUMP -26FE ; [*0A1C.0020.0002] # CUP ON BLACK SQUARE -26FF ; [*0A1D.0020.0002] # WHITE FLAG WITH HORIZONTAL MIDDLE BLACK STRIPE -2700 ; [*0A38.0020.0002] # BLACK SAFETY SCISSORS -2701 ; [*0A39.0020.0002] # UPPER BLADE SCISSORS -2702 ; [*0A3A.0020.0002] # BLACK SCISSORS -2703 ; [*0A3B.0020.0002] # LOWER BLADE SCISSORS -2704 ; [*0A3C.0020.0002] # WHITE SCISSORS -2705 ; [*0A3D.0020.0002] # WHITE HEAVY CHECK MARK -2706 ; [*0A3E.0020.0002] # TELEPHONE LOCATION SIGN -2707 ; [*0A3F.0020.0002] # TAPE DRIVE -2708 ; [*0A40.0020.0002] # AIRPLANE -2709 ; [*0A41.0020.0002] # ENVELOPE -270A ; [*0A42.0020.0002] # RAISED FIST -270B ; [*0A43.0020.0002] # RAISED HAND -270C ; [*0A44.0020.0002] # VICTORY HAND -270D ; [*0A45.0020.0002] # WRITING HAND -270E ; [*0A46.0020.0002] # LOWER RIGHT PENCIL -270F ; [*0A47.0020.0002] # PENCIL -2710 ; [*0A48.0020.0002] # UPPER RIGHT PENCIL -2711 ; [*0A49.0020.0002] # WHITE NIB -2712 ; [*0A4A.0020.0002] # BLACK NIB -2713 ; [*0A4B.0020.0002] # CHECK MARK -2714 ; [*0A4C.0020.0002] # HEAVY CHECK MARK -2715 ; [*0A4D.0020.0002] # MULTIPLICATION X -2716 ; [*0A4E.0020.0002] # HEAVY MULTIPLICATION X -2717 ; [*0A4F.0020.0002] # BALLOT X -2718 ; [*0A50.0020.0002] # HEAVY BALLOT X -2719 ; [*0A51.0020.0002] # OUTLINED GREEK CROSS -271A ; [*0A52.0020.0002] # HEAVY GREEK CROSS -271B ; [*0A53.0020.0002] # OPEN CENTRE CROSS -271C ; [*0A54.0020.0002] # HEAVY OPEN CENTRE CROSS -271D ; [*0A55.0020.0002] # LATIN CROSS -271E ; [*0A56.0020.0002] # SHADOWED WHITE LATIN CROSS -271F ; [*0A57.0020.0002] # OUTLINED LATIN CROSS -2720 ; [*0A58.0020.0002] # MALTESE CROSS -2721 ; [*0A59.0020.0002] # STAR OF DAVID -2722 ; [*0A5A.0020.0002] # FOUR TEARDROP-SPOKED ASTERISK -2723 ; [*0A5B.0020.0002] # FOUR BALLOON-SPOKED ASTERISK -2724 ; [*0A5C.0020.0002] # HEAVY FOUR BALLOON-SPOKED ASTERISK -2725 ; [*0A5D.0020.0002] # FOUR CLUB-SPOKED ASTERISK -2726 ; [*0A5E.0020.0002] # BLACK FOUR POINTED STAR -2727 ; [*0A5F.0020.0002] # WHITE FOUR POINTED STAR -2728 ; [*0A60.0020.0002] # SPARKLES -2729 ; [*0A61.0020.0002] # STRESS OUTLINED WHITE STAR -272A ; [*0A62.0020.0002] # CIRCLED WHITE STAR -272B ; [*0A63.0020.0002] # OPEN CENTRE BLACK STAR -272C ; [*0A64.0020.0002] # BLACK CENTRE WHITE STAR -272D ; [*0A65.0020.0002] # OUTLINED BLACK STAR -272E ; [*0A66.0020.0002] # HEAVY OUTLINED BLACK STAR -272F ; [*0A67.0020.0002] # PINWHEEL STAR -2730 ; [*0A68.0020.0002] # SHADOWED WHITE STAR -2731 ; [*0A69.0020.0002] # HEAVY ASTERISK -2732 ; [*0A6A.0020.0002] # OPEN CENTRE ASTERISK -2733 ; [*0A6B.0020.0002] # EIGHT SPOKED ASTERISK -2734 ; [*0A6C.0020.0002] # EIGHT POINTED BLACK STAR -2735 ; [*0A6D.0020.0002] # EIGHT POINTED PINWHEEL STAR -2736 ; [*0A6E.0020.0002] # SIX POINTED BLACK STAR -2737 ; [*0A6F.0020.0002] # EIGHT POINTED RECTILINEAR BLACK STAR -2738 ; [*0A70.0020.0002] # HEAVY EIGHT POINTED RECTILINEAR BLACK STAR -2739 ; [*0A71.0020.0002] # TWELVE POINTED BLACK STAR -273A ; [*0A72.0020.0002] # SIXTEEN POINTED ASTERISK -273B ; [*0A73.0020.0002] # TEARDROP-SPOKED ASTERISK -273C ; [*0A74.0020.0002] # OPEN CENTRE TEARDROP-SPOKED ASTERISK -273D ; [*0A75.0020.0002] # HEAVY TEARDROP-SPOKED ASTERISK -273E ; [*0A76.0020.0002] # SIX PETALLED BLACK AND WHITE FLORETTE -273F ; [*0A77.0020.0002] # BLACK FLORETTE -2740 ; [*0A78.0020.0002] # WHITE FLORETTE -2741 ; [*0A79.0020.0002] # EIGHT PETALLED OUTLINED BLACK FLORETTE -2742 ; [*0A7A.0020.0002] # CIRCLED OPEN CENTRE EIGHT POINTED STAR -2743 ; [*0A7B.0020.0002] # HEAVY TEARDROP-SPOKED PINWHEEL ASTERISK -2744 ; [*0A7C.0020.0002] # SNOWFLAKE -2745 ; [*0A7D.0020.0002] # TIGHT TRIFOLIATE SNOWFLAKE -2746 ; [*0A7E.0020.0002] # HEAVY CHEVRON SNOWFLAKE -2747 ; [*0A7F.0020.0002] # SPARKLE -2748 ; [*0A80.0020.0002] # HEAVY SPARKLE -2749 ; [*0A81.0020.0002] # BALLOON-SPOKED ASTERISK -274A ; [*0A82.0020.0002] # EIGHT TEARDROP-SPOKED PROPELLER ASTERISK -274B ; [*0A83.0020.0002] # HEAVY EIGHT TEARDROP-SPOKED PROPELLER ASTERISK -274C ; [*0A84.0020.0002] # CROSS MARK -274D ; [*0A85.0020.0002] # SHADOWED WHITE CIRCLE -274E ; [*0A86.0020.0002] # NEGATIVE SQUARED CROSS MARK -274F ; [*0A87.0020.0002] # LOWER RIGHT DROP-SHADOWED WHITE SQUARE -2750 ; [*0A88.0020.0002] # UPPER RIGHT DROP-SHADOWED WHITE SQUARE -2751 ; [*0A89.0020.0002] # LOWER RIGHT SHADOWED WHITE SQUARE -2752 ; [*0A8A.0020.0002] # UPPER RIGHT SHADOWED WHITE SQUARE -2753 ; [*0A8B.0020.0002] # BLACK QUESTION MARK ORNAMENT -2754 ; [*0A8C.0020.0002] # WHITE QUESTION MARK ORNAMENT -2755 ; [*0A8D.0020.0002] # WHITE EXCLAMATION MARK ORNAMENT -2756 ; [*0A8E.0020.0002] # BLACK DIAMOND MINUS WHITE X -2757 ; [*0A8F.0020.0002] # HEAVY EXCLAMATION MARK SYMBOL -2758 ; [*0A90.0020.0002] # LIGHT VERTICAL BAR -2759 ; [*0A91.0020.0002] # MEDIUM VERTICAL BAR -275A ; [*0A92.0020.0002] # HEAVY VERTICAL BAR -275B ; [*0A93.0020.0002] # HEAVY SINGLE TURNED COMMA QUOTATION MARK ORNAMENT -275C ; [*0A94.0020.0002] # HEAVY SINGLE COMMA QUOTATION MARK ORNAMENT -275D ; [*0A95.0020.0002] # HEAVY DOUBLE TURNED COMMA QUOTATION MARK ORNAMENT -275E ; [*0A96.0020.0002] # HEAVY DOUBLE COMMA QUOTATION MARK ORNAMENT -275F ; [*0A97.0020.0002] # HEAVY LOW SINGLE COMMA QUOTATION MARK ORNAMENT -2760 ; [*0A98.0020.0002] # HEAVY LOW DOUBLE COMMA QUOTATION MARK ORNAMENT -2761 ; [*0A99.0020.0002] # CURVED STEM PARAGRAPH SIGN ORNAMENT -2762 ; [*0A9A.0020.0002] # HEAVY EXCLAMATION MARK ORNAMENT -2763 ; [*0A9B.0020.0002] # HEAVY HEART EXCLAMATION MARK ORNAMENT -2764 ; [*0A9C.0020.0002] # HEAVY BLACK HEART -2765 ; [*0A9D.0020.0002] # ROTATED HEAVY BLACK HEART BULLET -2766 ; [*0A9E.0020.0002] # FLORAL HEART -2767 ; [*0A9F.0020.0002] # ROTATED FLORAL HEART BULLET -2768 ; [*034E.0020.0002] # MEDIUM LEFT PARENTHESIS ORNAMENT -2769 ; [*034F.0020.0002] # MEDIUM RIGHT PARENTHESIS ORNAMENT -276A ; [*0350.0020.0002] # MEDIUM FLATTENED LEFT PARENTHESIS ORNAMENT -276B ; [*0351.0020.0002] # MEDIUM FLATTENED RIGHT PARENTHESIS ORNAMENT -276C ; [*0352.0020.0002] # MEDIUM LEFT-POINTING ANGLE BRACKET ORNAMENT -276D ; [*0353.0020.0002] # MEDIUM RIGHT-POINTING ANGLE BRACKET ORNAMENT -276E ; [*0354.0020.0002] # HEAVY LEFT-POINTING ANGLE QUOTATION MARK ORNAMENT -276F ; [*0355.0020.0002] # HEAVY RIGHT-POINTING ANGLE QUOTATION MARK ORNAMENT -2770 ; [*0356.0020.0002] # HEAVY LEFT-POINTING ANGLE BRACKET ORNAMENT -2771 ; [*0357.0020.0002] # HEAVY RIGHT-POINTING ANGLE BRACKET ORNAMENT -2772 ; [*0358.0020.0002] # LIGHT LEFT TORTOISE SHELL BRACKET ORNAMENT -2773 ; [*0359.0020.0002] # LIGHT RIGHT TORTOISE SHELL BRACKET ORNAMENT -2774 ; [*035A.0020.0002] # MEDIUM LEFT CURLY BRACKET ORNAMENT -2775 ; [*035B.0020.0002] # MEDIUM RIGHT CURLY BRACKET ORNAMENT -2794 ; [*0AA0.0020.0002] # HEAVY WIDE-HEADED RIGHTWARDS ARROW -2795 ; [*0AA1.0020.0002] # HEAVY PLUS SIGN -2796 ; [*0AA2.0020.0002] # HEAVY MINUS SIGN -2797 ; [*0AA3.0020.0002] # HEAVY DIVISION SIGN -2798 ; [*0AA4.0020.0002] # HEAVY SOUTH EAST ARROW -2799 ; [*0AA5.0020.0002] # HEAVY RIGHTWARDS ARROW -279A ; [*0AA6.0020.0002] # HEAVY NORTH EAST ARROW -279B ; [*0AA7.0020.0002] # DRAFTING POINT RIGHTWARDS ARROW -279C ; [*0AA8.0020.0002] # HEAVY ROUND-TIPPED RIGHTWARDS ARROW -279D ; [*0AA9.0020.0002] # TRIANGLE-HEADED RIGHTWARDS ARROW -279E ; [*0AAA.0020.0002] # HEAVY TRIANGLE-HEADED RIGHTWARDS ARROW -279F ; [*0AAB.0020.0002] # DASHED TRIANGLE-HEADED RIGHTWARDS ARROW -27A0 ; [*0AAC.0020.0002] # HEAVY DASHED TRIANGLE-HEADED RIGHTWARDS ARROW -27A1 ; [*0AAD.0020.0002] # BLACK RIGHTWARDS ARROW -27A2 ; [*0AAE.0020.0002] # THREE-D TOP-LIGHTED RIGHTWARDS ARROWHEAD -27A3 ; [*0AAF.0020.0002] # THREE-D BOTTOM-LIGHTED RIGHTWARDS ARROWHEAD -27A4 ; [*0AB0.0020.0002] # BLACK RIGHTWARDS ARROWHEAD -27A5 ; [*0AB1.0020.0002] # HEAVY BLACK CURVED DOWNWARDS AND RIGHTWARDS ARROW -27A6 ; [*0AB2.0020.0002] # HEAVY BLACK CURVED UPWARDS AND RIGHTWARDS ARROW -27A7 ; [*0AB3.0020.0002] # SQUAT BLACK RIGHTWARDS ARROW -27A8 ; [*0AB4.0020.0002] # HEAVY CONCAVE-POINTED BLACK RIGHTWARDS ARROW -27A9 ; [*0AB5.0020.0002] # RIGHT-SHADED WHITE RIGHTWARDS ARROW -27AA ; [*0AB6.0020.0002] # LEFT-SHADED WHITE RIGHTWARDS ARROW -27AB ; [*0AB7.0020.0002] # BACK-TILTED SHADOWED WHITE RIGHTWARDS ARROW -27AC ; [*0AB8.0020.0002] # FRONT-TILTED SHADOWED WHITE RIGHTWARDS ARROW -27AD ; [*0AB9.0020.0002] # HEAVY LOWER RIGHT-SHADOWED WHITE RIGHTWARDS ARROW -27AE ; [*0ABA.0020.0002] # HEAVY UPPER RIGHT-SHADOWED WHITE RIGHTWARDS ARROW -27AF ; [*0ABB.0020.0002] # NOTCHED LOWER RIGHT-SHADOWED WHITE RIGHTWARDS ARROW -27B0 ; [*0ABC.0020.0002] # CURLY LOOP -27B1 ; [*0ABD.0020.0002] # NOTCHED UPPER RIGHT-SHADOWED WHITE RIGHTWARDS ARROW -27B2 ; [*0ABE.0020.0002] # CIRCLED HEAVY WHITE RIGHTWARDS ARROW -27B3 ; [*0ABF.0020.0002] # WHITE-FEATHERED RIGHTWARDS ARROW -27B4 ; [*0AC0.0020.0002] # BLACK-FEATHERED SOUTH EAST ARROW -27B5 ; [*0AC1.0020.0002] # BLACK-FEATHERED RIGHTWARDS ARROW -27B6 ; [*0AC2.0020.0002] # BLACK-FEATHERED NORTH EAST ARROW -27B7 ; [*0AC3.0020.0002] # HEAVY BLACK-FEATHERED SOUTH EAST ARROW -27B8 ; [*0AC4.0020.0002] # HEAVY BLACK-FEATHERED RIGHTWARDS ARROW -27B9 ; [*0AC5.0020.0002] # HEAVY BLACK-FEATHERED NORTH EAST ARROW -27BA ; [*0AC6.0020.0002] # TEARDROP-BARBED RIGHTWARDS ARROW -27BB ; [*0AC7.0020.0002] # HEAVY TEARDROP-SHANKED RIGHTWARDS ARROW -27BC ; [*0AC8.0020.0002] # WEDGE-TAILED RIGHTWARDS ARROW -27BD ; [*0AC9.0020.0002] # HEAVY WEDGE-TAILED RIGHTWARDS ARROW -27BE ; [*0ACA.0020.0002] # OPEN-OUTLINED RIGHTWARDS ARROW -27BF ; [*0ACB.0020.0002] # DOUBLE CURLY LOOP -27C0 ; [*0ACC.0020.0002] # THREE DIMENSIONAL ANGLE -27C1 ; [*0ACD.0020.0002] # WHITE TRIANGLE CONTAINING SMALL WHITE TRIANGLE -27C2 ; [*0ACE.0020.0002] # PERPENDICULAR -27C3 ; [*0ACF.0020.0002] # OPEN SUBSET -27C4 ; [*0AD0.0020.0002] # OPEN SUPERSET -27C5 ; [*0342.0020.0002] # LEFT S-SHAPED BAG DELIMITER -27C6 ; [*0343.0020.0002] # RIGHT S-SHAPED BAG DELIMITER -27C7 ; [*0AD1.0020.0002] # OR WITH DOT INSIDE -27C8 ; [*0AD2.0020.0002] # REVERSE SOLIDUS PRECEDING SUBSET -27C9 ; [*0AD3.0020.0002] # SUPERSET PRECEDING SOLIDUS -27CA ; [*0AD4.0020.0002] # VERTICAL BAR WITH HORIZONTAL STROKE -27CB ; [*0AD5.0020.0002] # MATHEMATICAL RISING DIAGONAL -27CC ; [*0AD6.0020.0002] # LONG DIVISION -27CD ; [*0AD7.0020.0002] # MATHEMATICAL FALLING DIAGONAL -27CE ; [*0AD8.0020.0002] # SQUARED LOGICAL AND -27CF ; [*0AD9.0020.0002] # SQUARED LOGICAL OR -27D0 ; [*0ADA.0020.0002] # WHITE DIAMOND WITH CENTRED DOT -27D1 ; [*0ADB.0020.0002] # AND WITH DOT -27D2 ; [*0ADC.0020.0002] # ELEMENT OF OPENING UPWARDS -27D3 ; [*0ADD.0020.0002] # LOWER RIGHT CORNER WITH DOT -27D4 ; [*0ADE.0020.0002] # UPPER LEFT CORNER WITH DOT -27D5 ; [*0ADF.0020.0002] # LEFT OUTER JOIN -27D6 ; [*0AE0.0020.0002] # RIGHT OUTER JOIN -27D7 ; [*0AE1.0020.0002] # FULL OUTER JOIN -27D8 ; [*0AE2.0020.0002] # LARGE UP TACK -27D9 ; [*0AE3.0020.0002] # LARGE DOWN TACK -27DA ; [*0AE4.0020.0002] # LEFT AND RIGHT DOUBLE TURNSTILE -27DB ; [*0AE5.0020.0002] # LEFT AND RIGHT TACK -27DC ; [*0AE6.0020.0002] # LEFT MULTIMAP -27DD ; [*0AE7.0020.0002] # LONG RIGHT TACK -27DE ; [*0AE8.0020.0002] # LONG LEFT TACK -27DF ; [*0AE9.0020.0002] # UP TACK WITH CIRCLE ABOVE -27E0 ; [*0AEA.0020.0002] # LOZENGE DIVIDED BY HORIZONTAL RULE -27E1 ; [*0AEB.0020.0002] # WHITE CONCAVE-SIDED DIAMOND -27E2 ; [*0AEC.0020.0002] # WHITE CONCAVE-SIDED DIAMOND WITH LEFTWARDS TICK -27E3 ; [*0AED.0020.0002] # WHITE CONCAVE-SIDED DIAMOND WITH RIGHTWARDS TICK -27E4 ; [*0AEE.0020.0002] # WHITE SQUARE WITH LEFTWARDS TICK -27E5 ; [*0AEF.0020.0002] # WHITE SQUARE WITH RIGHTWARDS TICK -27E6 ; [*0344.0020.0002] # MATHEMATICAL LEFT WHITE SQUARE BRACKET -27E7 ; [*0345.0020.0002] # MATHEMATICAL RIGHT WHITE SQUARE BRACKET -27E8 ; [*0346.0020.0002] # MATHEMATICAL LEFT ANGLE BRACKET -27E9 ; [*0347.0020.0002] # MATHEMATICAL RIGHT ANGLE BRACKET -27EA ; [*0348.0020.0002] # MATHEMATICAL LEFT DOUBLE ANGLE BRACKET -27EB ; [*0349.0020.0002] # MATHEMATICAL RIGHT DOUBLE ANGLE BRACKET -27EC ; [*034A.0020.0002] # MATHEMATICAL LEFT WHITE TORTOISE SHELL BRACKET -27ED ; [*034B.0020.0002] # MATHEMATICAL RIGHT WHITE TORTOISE SHELL BRACKET -27EE ; [*034C.0020.0002] # MATHEMATICAL LEFT FLATTENED PARENTHESIS -27EF ; [*034D.0020.0002] # MATHEMATICAL RIGHT FLATTENED PARENTHESIS -27F0 ; [*0AF0.0020.0002] # UPWARDS QUADRUPLE ARROW -27F1 ; [*0AF1.0020.0002] # DOWNWARDS QUADRUPLE ARROW -27F2 ; [*0AF2.0020.0002] # ANTICLOCKWISE GAPPED CIRCLE ARROW -27F3 ; [*0AF3.0020.0002] # CLOCKWISE GAPPED CIRCLE ARROW -27F4 ; [*0AF4.0020.0002] # RIGHT ARROW WITH CIRCLED PLUS -27F5 ; [*0AF5.0020.0002] # LONG LEFTWARDS ARROW -27F6 ; [*0AF6.0020.0002] # LONG RIGHTWARDS ARROW -27F7 ; [*0AF7.0020.0002] # LONG LEFT RIGHT ARROW -27F8 ; [*0AF8.0020.0002] # LONG LEFTWARDS DOUBLE ARROW -27F9 ; [*0AF9.0020.0002] # LONG RIGHTWARDS DOUBLE ARROW -27FA ; [*0AFA.0020.0002] # LONG LEFT RIGHT DOUBLE ARROW -27FB ; [*0AFB.0020.0002] # LONG LEFTWARDS ARROW FROM BAR -27FC ; [*0AFC.0020.0002] # LONG RIGHTWARDS ARROW FROM BAR -27FD ; [*0AFD.0020.0002] # LONG LEFTWARDS DOUBLE ARROW FROM BAR -27FE ; [*0AFE.0020.0002] # LONG RIGHTWARDS DOUBLE ARROW FROM BAR -27FF ; [*0AFF.0020.0002] # LONG RIGHTWARDS SQUIGGLE ARROW -2800 ; [*0DB4.0020.0002] # BRAILLE PATTERN BLANK -2801 ; [*0DB5.0020.0002] # BRAILLE PATTERN DOTS-1 -2802 ; [*0DB6.0020.0002] # BRAILLE PATTERN DOTS-2 -2803 ; [*0DB7.0020.0002] # BRAILLE PATTERN DOTS-12 -2804 ; [*0DB8.0020.0002] # BRAILLE PATTERN DOTS-3 -2805 ; [*0DB9.0020.0002] # BRAILLE PATTERN DOTS-13 -2806 ; [*0DBA.0020.0002] # BRAILLE PATTERN DOTS-23 -2807 ; [*0DBB.0020.0002] # BRAILLE PATTERN DOTS-123 -2808 ; [*0DBC.0020.0002] # BRAILLE PATTERN DOTS-4 -2809 ; [*0DBD.0020.0002] # BRAILLE PATTERN DOTS-14 -280A ; [*0DBE.0020.0002] # BRAILLE PATTERN DOTS-24 -280B ; [*0DBF.0020.0002] # BRAILLE PATTERN DOTS-124 -280C ; [*0DC0.0020.0002] # BRAILLE PATTERN DOTS-34 -280D ; [*0DC1.0020.0002] # BRAILLE PATTERN DOTS-134 -280E ; [*0DC2.0020.0002] # BRAILLE PATTERN DOTS-234 -280F ; [*0DC3.0020.0002] # BRAILLE PATTERN DOTS-1234 -2810 ; [*0DC4.0020.0002] # BRAILLE PATTERN DOTS-5 -2811 ; [*0DC5.0020.0002] # BRAILLE PATTERN DOTS-15 -2812 ; [*0DC6.0020.0002] # BRAILLE PATTERN DOTS-25 -2813 ; [*0DC7.0020.0002] # BRAILLE PATTERN DOTS-125 -2814 ; [*0DC8.0020.0002] # BRAILLE PATTERN DOTS-35 -2815 ; [*0DC9.0020.0002] # BRAILLE PATTERN DOTS-135 -2816 ; [*0DCA.0020.0002] # BRAILLE PATTERN DOTS-235 -2817 ; [*0DCB.0020.0002] # BRAILLE PATTERN DOTS-1235 -2818 ; [*0DCC.0020.0002] # BRAILLE PATTERN DOTS-45 -2819 ; [*0DCD.0020.0002] # BRAILLE PATTERN DOTS-145 -281A ; [*0DCE.0020.0002] # BRAILLE PATTERN DOTS-245 -281B ; [*0DCF.0020.0002] # BRAILLE PATTERN DOTS-1245 -281C ; [*0DD0.0020.0002] # BRAILLE PATTERN DOTS-345 -281D ; [*0DD1.0020.0002] # BRAILLE PATTERN DOTS-1345 -281E ; [*0DD2.0020.0002] # BRAILLE PATTERN DOTS-2345 -281F ; [*0DD3.0020.0002] # BRAILLE PATTERN DOTS-12345 -2820 ; [*0DD4.0020.0002] # BRAILLE PATTERN DOTS-6 -2821 ; [*0DD5.0020.0002] # BRAILLE PATTERN DOTS-16 -2822 ; [*0DD6.0020.0002] # BRAILLE PATTERN DOTS-26 -2823 ; [*0DD7.0020.0002] # BRAILLE PATTERN DOTS-126 -2824 ; [*0DD8.0020.0002] # BRAILLE PATTERN DOTS-36 -2825 ; [*0DD9.0020.0002] # BRAILLE PATTERN DOTS-136 -2826 ; [*0DDA.0020.0002] # BRAILLE PATTERN DOTS-236 -2827 ; [*0DDB.0020.0002] # BRAILLE PATTERN DOTS-1236 -2828 ; [*0DDC.0020.0002] # BRAILLE PATTERN DOTS-46 -2829 ; [*0DDD.0020.0002] # BRAILLE PATTERN DOTS-146 -282A ; [*0DDE.0020.0002] # BRAILLE PATTERN DOTS-246 -282B ; [*0DDF.0020.0002] # BRAILLE PATTERN DOTS-1246 -282C ; [*0DE0.0020.0002] # BRAILLE PATTERN DOTS-346 -282D ; [*0DE1.0020.0002] # BRAILLE PATTERN DOTS-1346 -282E ; [*0DE2.0020.0002] # BRAILLE PATTERN DOTS-2346 -282F ; [*0DE3.0020.0002] # BRAILLE PATTERN DOTS-12346 -2830 ; [*0DE4.0020.0002] # BRAILLE PATTERN DOTS-56 -2831 ; [*0DE5.0020.0002] # BRAILLE PATTERN DOTS-156 -2832 ; [*0DE6.0020.0002] # BRAILLE PATTERN DOTS-256 -2833 ; [*0DE7.0020.0002] # BRAILLE PATTERN DOTS-1256 -2834 ; [*0DE8.0020.0002] # BRAILLE PATTERN DOTS-356 -2835 ; [*0DE9.0020.0002] # BRAILLE PATTERN DOTS-1356 -2836 ; [*0DEA.0020.0002] # BRAILLE PATTERN DOTS-2356 -2837 ; [*0DEB.0020.0002] # BRAILLE PATTERN DOTS-12356 -2838 ; [*0DEC.0020.0002] # BRAILLE PATTERN DOTS-456 -2839 ; [*0DED.0020.0002] # BRAILLE PATTERN DOTS-1456 -283A ; [*0DEE.0020.0002] # BRAILLE PATTERN DOTS-2456 -283B ; [*0DEF.0020.0002] # BRAILLE PATTERN DOTS-12456 -283C ; [*0DF0.0020.0002] # BRAILLE PATTERN DOTS-3456 -283D ; [*0DF1.0020.0002] # BRAILLE PATTERN DOTS-13456 -283E ; [*0DF2.0020.0002] # BRAILLE PATTERN DOTS-23456 -283F ; [*0DF3.0020.0002] # BRAILLE PATTERN DOTS-123456 -2840 ; [*0DF4.0020.0002] # BRAILLE PATTERN DOTS-7 -2841 ; [*0DF5.0020.0002] # BRAILLE PATTERN DOTS-17 -2842 ; [*0DF6.0020.0002] # BRAILLE PATTERN DOTS-27 -2843 ; [*0DF7.0020.0002] # BRAILLE PATTERN DOTS-127 -2844 ; [*0DF8.0020.0002] # BRAILLE PATTERN DOTS-37 -2845 ; [*0DF9.0020.0002] # BRAILLE PATTERN DOTS-137 -2846 ; [*0DFA.0020.0002] # BRAILLE PATTERN DOTS-237 -2847 ; [*0DFB.0020.0002] # BRAILLE PATTERN DOTS-1237 -2848 ; [*0DFC.0020.0002] # BRAILLE PATTERN DOTS-47 -2849 ; [*0DFD.0020.0002] # BRAILLE PATTERN DOTS-147 -284A ; [*0DFE.0020.0002] # BRAILLE PATTERN DOTS-247 -284B ; [*0DFF.0020.0002] # BRAILLE PATTERN DOTS-1247 -284C ; [*0E00.0020.0002] # BRAILLE PATTERN DOTS-347 -284D ; [*0E01.0020.0002] # BRAILLE PATTERN DOTS-1347 -284E ; [*0E02.0020.0002] # BRAILLE PATTERN DOTS-2347 -284F ; [*0E03.0020.0002] # BRAILLE PATTERN DOTS-12347 -2850 ; [*0E04.0020.0002] # BRAILLE PATTERN DOTS-57 -2851 ; [*0E05.0020.0002] # BRAILLE PATTERN DOTS-157 -2852 ; [*0E06.0020.0002] # BRAILLE PATTERN DOTS-257 -2853 ; [*0E07.0020.0002] # BRAILLE PATTERN DOTS-1257 -2854 ; [*0E08.0020.0002] # BRAILLE PATTERN DOTS-357 -2855 ; [*0E09.0020.0002] # BRAILLE PATTERN DOTS-1357 -2856 ; [*0E0A.0020.0002] # BRAILLE PATTERN DOTS-2357 -2857 ; [*0E0B.0020.0002] # BRAILLE PATTERN DOTS-12357 -2858 ; [*0E0C.0020.0002] # BRAILLE PATTERN DOTS-457 -2859 ; [*0E0D.0020.0002] # BRAILLE PATTERN DOTS-1457 -285A ; [*0E0E.0020.0002] # BRAILLE PATTERN DOTS-2457 -285B ; [*0E0F.0020.0002] # BRAILLE PATTERN DOTS-12457 -285C ; [*0E10.0020.0002] # BRAILLE PATTERN DOTS-3457 -285D ; [*0E11.0020.0002] # BRAILLE PATTERN DOTS-13457 -285E ; [*0E12.0020.0002] # BRAILLE PATTERN DOTS-23457 -285F ; [*0E13.0020.0002] # BRAILLE PATTERN DOTS-123457 -2860 ; [*0E14.0020.0002] # BRAILLE PATTERN DOTS-67 -2861 ; [*0E15.0020.0002] # BRAILLE PATTERN DOTS-167 -2862 ; [*0E16.0020.0002] # BRAILLE PATTERN DOTS-267 -2863 ; [*0E17.0020.0002] # BRAILLE PATTERN DOTS-1267 -2864 ; [*0E18.0020.0002] # BRAILLE PATTERN DOTS-367 -2865 ; [*0E19.0020.0002] # BRAILLE PATTERN DOTS-1367 -2866 ; [*0E1A.0020.0002] # BRAILLE PATTERN DOTS-2367 -2867 ; [*0E1B.0020.0002] # BRAILLE PATTERN DOTS-12367 -2868 ; [*0E1C.0020.0002] # BRAILLE PATTERN DOTS-467 -2869 ; [*0E1D.0020.0002] # BRAILLE PATTERN DOTS-1467 -286A ; [*0E1E.0020.0002] # BRAILLE PATTERN DOTS-2467 -286B ; [*0E1F.0020.0002] # BRAILLE PATTERN DOTS-12467 -286C ; [*0E20.0020.0002] # BRAILLE PATTERN DOTS-3467 -286D ; [*0E21.0020.0002] # BRAILLE PATTERN DOTS-13467 -286E ; [*0E22.0020.0002] # BRAILLE PATTERN DOTS-23467 -286F ; [*0E23.0020.0002] # BRAILLE PATTERN DOTS-123467 -2870 ; [*0E24.0020.0002] # BRAILLE PATTERN DOTS-567 -2871 ; [*0E25.0020.0002] # BRAILLE PATTERN DOTS-1567 -2872 ; [*0E26.0020.0002] # BRAILLE PATTERN DOTS-2567 -2873 ; [*0E27.0020.0002] # BRAILLE PATTERN DOTS-12567 -2874 ; [*0E28.0020.0002] # BRAILLE PATTERN DOTS-3567 -2875 ; [*0E29.0020.0002] # BRAILLE PATTERN DOTS-13567 -2876 ; [*0E2A.0020.0002] # BRAILLE PATTERN DOTS-23567 -2877 ; [*0E2B.0020.0002] # BRAILLE PATTERN DOTS-123567 -2878 ; [*0E2C.0020.0002] # BRAILLE PATTERN DOTS-4567 -2879 ; [*0E2D.0020.0002] # BRAILLE PATTERN DOTS-14567 -287A ; [*0E2E.0020.0002] # BRAILLE PATTERN DOTS-24567 -287B ; [*0E2F.0020.0002] # BRAILLE PATTERN DOTS-124567 -287C ; [*0E30.0020.0002] # BRAILLE PATTERN DOTS-34567 -287D ; [*0E31.0020.0002] # BRAILLE PATTERN DOTS-134567 -287E ; [*0E32.0020.0002] # BRAILLE PATTERN DOTS-234567 -287F ; [*0E33.0020.0002] # BRAILLE PATTERN DOTS-1234567 -2880 ; [*0E34.0020.0002] # BRAILLE PATTERN DOTS-8 -2881 ; [*0E35.0020.0002] # BRAILLE PATTERN DOTS-18 -2882 ; [*0E36.0020.0002] # BRAILLE PATTERN DOTS-28 -2883 ; [*0E37.0020.0002] # BRAILLE PATTERN DOTS-128 -2884 ; [*0E38.0020.0002] # BRAILLE PATTERN DOTS-38 -2885 ; [*0E39.0020.0002] # BRAILLE PATTERN DOTS-138 -2886 ; [*0E3A.0020.0002] # BRAILLE PATTERN DOTS-238 -2887 ; [*0E3B.0020.0002] # BRAILLE PATTERN DOTS-1238 -2888 ; [*0E3C.0020.0002] # BRAILLE PATTERN DOTS-48 -2889 ; [*0E3D.0020.0002] # BRAILLE PATTERN DOTS-148 -288A ; [*0E3E.0020.0002] # BRAILLE PATTERN DOTS-248 -288B ; [*0E3F.0020.0002] # BRAILLE PATTERN DOTS-1248 -288C ; [*0E40.0020.0002] # BRAILLE PATTERN DOTS-348 -288D ; [*0E41.0020.0002] # BRAILLE PATTERN DOTS-1348 -288E ; [*0E42.0020.0002] # BRAILLE PATTERN DOTS-2348 -288F ; [*0E43.0020.0002] # BRAILLE PATTERN DOTS-12348 -2890 ; [*0E44.0020.0002] # BRAILLE PATTERN DOTS-58 -2891 ; [*0E45.0020.0002] # BRAILLE PATTERN DOTS-158 -2892 ; [*0E46.0020.0002] # BRAILLE PATTERN DOTS-258 -2893 ; [*0E47.0020.0002] # BRAILLE PATTERN DOTS-1258 -2894 ; [*0E48.0020.0002] # BRAILLE PATTERN DOTS-358 -2895 ; [*0E49.0020.0002] # BRAILLE PATTERN DOTS-1358 -2896 ; [*0E4A.0020.0002] # BRAILLE PATTERN DOTS-2358 -2897 ; [*0E4B.0020.0002] # BRAILLE PATTERN DOTS-12358 -2898 ; [*0E4C.0020.0002] # BRAILLE PATTERN DOTS-458 -2899 ; [*0E4D.0020.0002] # BRAILLE PATTERN DOTS-1458 -289A ; [*0E4E.0020.0002] # BRAILLE PATTERN DOTS-2458 -289B ; [*0E4F.0020.0002] # BRAILLE PATTERN DOTS-12458 -289C ; [*0E50.0020.0002] # BRAILLE PATTERN DOTS-3458 -289D ; [*0E51.0020.0002] # BRAILLE PATTERN DOTS-13458 -289E ; [*0E52.0020.0002] # BRAILLE PATTERN DOTS-23458 -289F ; [*0E53.0020.0002] # BRAILLE PATTERN DOTS-123458 -28A0 ; [*0E54.0020.0002] # BRAILLE PATTERN DOTS-68 -28A1 ; [*0E55.0020.0002] # BRAILLE PATTERN DOTS-168 -28A2 ; [*0E56.0020.0002] # BRAILLE PATTERN DOTS-268 -28A3 ; [*0E57.0020.0002] # BRAILLE PATTERN DOTS-1268 -28A4 ; [*0E58.0020.0002] # BRAILLE PATTERN DOTS-368 -28A5 ; [*0E59.0020.0002] # BRAILLE PATTERN DOTS-1368 -28A6 ; [*0E5A.0020.0002] # BRAILLE PATTERN DOTS-2368 -28A7 ; [*0E5B.0020.0002] # BRAILLE PATTERN DOTS-12368 -28A8 ; [*0E5C.0020.0002] # BRAILLE PATTERN DOTS-468 -28A9 ; [*0E5D.0020.0002] # BRAILLE PATTERN DOTS-1468 -28AA ; [*0E5E.0020.0002] # BRAILLE PATTERN DOTS-2468 -28AB ; [*0E5F.0020.0002] # BRAILLE PATTERN DOTS-12468 -28AC ; [*0E60.0020.0002] # BRAILLE PATTERN DOTS-3468 -28AD ; [*0E61.0020.0002] # BRAILLE PATTERN DOTS-13468 -28AE ; [*0E62.0020.0002] # BRAILLE PATTERN DOTS-23468 -28AF ; [*0E63.0020.0002] # BRAILLE PATTERN DOTS-123468 -28B0 ; [*0E64.0020.0002] # BRAILLE PATTERN DOTS-568 -28B1 ; [*0E65.0020.0002] # BRAILLE PATTERN DOTS-1568 -28B2 ; [*0E66.0020.0002] # BRAILLE PATTERN DOTS-2568 -28B3 ; [*0E67.0020.0002] # BRAILLE PATTERN DOTS-12568 -28B4 ; [*0E68.0020.0002] # BRAILLE PATTERN DOTS-3568 -28B5 ; [*0E69.0020.0002] # BRAILLE PATTERN DOTS-13568 -28B6 ; [*0E6A.0020.0002] # BRAILLE PATTERN DOTS-23568 -28B7 ; [*0E6B.0020.0002] # BRAILLE PATTERN DOTS-123568 -28B8 ; [*0E6C.0020.0002] # BRAILLE PATTERN DOTS-4568 -28B9 ; [*0E6D.0020.0002] # BRAILLE PATTERN DOTS-14568 -28BA ; [*0E6E.0020.0002] # BRAILLE PATTERN DOTS-24568 -28BB ; [*0E6F.0020.0002] # BRAILLE PATTERN DOTS-124568 -28BC ; [*0E70.0020.0002] # BRAILLE PATTERN DOTS-34568 -28BD ; [*0E71.0020.0002] # BRAILLE PATTERN DOTS-134568 -28BE ; [*0E72.0020.0002] # BRAILLE PATTERN DOTS-234568 -28BF ; [*0E73.0020.0002] # BRAILLE PATTERN DOTS-1234568 -28C0 ; [*0E74.0020.0002] # BRAILLE PATTERN DOTS-78 -28C1 ; [*0E75.0020.0002] # BRAILLE PATTERN DOTS-178 -28C2 ; [*0E76.0020.0002] # BRAILLE PATTERN DOTS-278 -28C3 ; [*0E77.0020.0002] # BRAILLE PATTERN DOTS-1278 -28C4 ; [*0E78.0020.0002] # BRAILLE PATTERN DOTS-378 -28C5 ; [*0E79.0020.0002] # BRAILLE PATTERN DOTS-1378 -28C6 ; [*0E7A.0020.0002] # BRAILLE PATTERN DOTS-2378 -28C7 ; [*0E7B.0020.0002] # BRAILLE PATTERN DOTS-12378 -28C8 ; [*0E7C.0020.0002] # BRAILLE PATTERN DOTS-478 -28C9 ; [*0E7D.0020.0002] # BRAILLE PATTERN DOTS-1478 -28CA ; [*0E7E.0020.0002] # BRAILLE PATTERN DOTS-2478 -28CB ; [*0E7F.0020.0002] # BRAILLE PATTERN DOTS-12478 -28CC ; [*0E80.0020.0002] # BRAILLE PATTERN DOTS-3478 -28CD ; [*0E81.0020.0002] # BRAILLE PATTERN DOTS-13478 -28CE ; [*0E82.0020.0002] # BRAILLE PATTERN DOTS-23478 -28CF ; [*0E83.0020.0002] # BRAILLE PATTERN DOTS-123478 -28D0 ; [*0E84.0020.0002] # BRAILLE PATTERN DOTS-578 -28D1 ; [*0E85.0020.0002] # BRAILLE PATTERN DOTS-1578 -28D2 ; [*0E86.0020.0002] # BRAILLE PATTERN DOTS-2578 -28D3 ; [*0E87.0020.0002] # BRAILLE PATTERN DOTS-12578 -28D4 ; [*0E88.0020.0002] # BRAILLE PATTERN DOTS-3578 -28D5 ; [*0E89.0020.0002] # BRAILLE PATTERN DOTS-13578 -28D6 ; [*0E8A.0020.0002] # BRAILLE PATTERN DOTS-23578 -28D7 ; [*0E8B.0020.0002] # BRAILLE PATTERN DOTS-123578 -28D8 ; [*0E8C.0020.0002] # BRAILLE PATTERN DOTS-4578 -28D9 ; [*0E8D.0020.0002] # BRAILLE PATTERN DOTS-14578 -28DA ; [*0E8E.0020.0002] # BRAILLE PATTERN DOTS-24578 -28DB ; [*0E8F.0020.0002] # BRAILLE PATTERN DOTS-124578 -28DC ; [*0E90.0020.0002] # BRAILLE PATTERN DOTS-34578 -28DD ; [*0E91.0020.0002] # BRAILLE PATTERN DOTS-134578 -28DE ; [*0E92.0020.0002] # BRAILLE PATTERN DOTS-234578 -28DF ; [*0E93.0020.0002] # BRAILLE PATTERN DOTS-1234578 -28E0 ; [*0E94.0020.0002] # BRAILLE PATTERN DOTS-678 -28E1 ; [*0E95.0020.0002] # BRAILLE PATTERN DOTS-1678 -28E2 ; [*0E96.0020.0002] # BRAILLE PATTERN DOTS-2678 -28E3 ; [*0E97.0020.0002] # BRAILLE PATTERN DOTS-12678 -28E4 ; [*0E98.0020.0002] # BRAILLE PATTERN DOTS-3678 -28E5 ; [*0E99.0020.0002] # BRAILLE PATTERN DOTS-13678 -28E6 ; [*0E9A.0020.0002] # BRAILLE PATTERN DOTS-23678 -28E7 ; [*0E9B.0020.0002] # BRAILLE PATTERN DOTS-123678 -28E8 ; [*0E9C.0020.0002] # BRAILLE PATTERN DOTS-4678 -28E9 ; [*0E9D.0020.0002] # BRAILLE PATTERN DOTS-14678 -28EA ; [*0E9E.0020.0002] # BRAILLE PATTERN DOTS-24678 -28EB ; [*0E9F.0020.0002] # BRAILLE PATTERN DOTS-124678 -28EC ; [*0EA0.0020.0002] # BRAILLE PATTERN DOTS-34678 -28ED ; [*0EA1.0020.0002] # BRAILLE PATTERN DOTS-134678 -28EE ; [*0EA2.0020.0002] # BRAILLE PATTERN DOTS-234678 -28EF ; [*0EA3.0020.0002] # BRAILLE PATTERN DOTS-1234678 -28F0 ; [*0EA4.0020.0002] # BRAILLE PATTERN DOTS-5678 -28F1 ; [*0EA5.0020.0002] # BRAILLE PATTERN DOTS-15678 -28F2 ; [*0EA6.0020.0002] # BRAILLE PATTERN DOTS-25678 -28F3 ; [*0EA7.0020.0002] # BRAILLE PATTERN DOTS-125678 -28F4 ; [*0EA8.0020.0002] # BRAILLE PATTERN DOTS-35678 -28F5 ; [*0EA9.0020.0002] # BRAILLE PATTERN DOTS-135678 -28F6 ; [*0EAA.0020.0002] # BRAILLE PATTERN DOTS-235678 -28F7 ; [*0EAB.0020.0002] # BRAILLE PATTERN DOTS-1235678 -28F8 ; [*0EAC.0020.0002] # BRAILLE PATTERN DOTS-45678 -28F9 ; [*0EAD.0020.0002] # BRAILLE PATTERN DOTS-145678 -28FA ; [*0EAE.0020.0002] # BRAILLE PATTERN DOTS-245678 -28FB ; [*0EAF.0020.0002] # BRAILLE PATTERN DOTS-1245678 -28FC ; [*0EB0.0020.0002] # BRAILLE PATTERN DOTS-345678 -28FD ; [*0EB1.0020.0002] # BRAILLE PATTERN DOTS-1345678 -28FE ; [*0EB2.0020.0002] # BRAILLE PATTERN DOTS-2345678 -28FF ; [*0EB3.0020.0002] # BRAILLE PATTERN DOTS-12345678 -2900 ; [*0B00.0020.0002] # RIGHTWARDS TWO-HEADED ARROW WITH VERTICAL STROKE -2901 ; [*0B01.0020.0002] # RIGHTWARDS TWO-HEADED ARROW WITH DOUBLE VERTICAL STROKE -2902 ; [*0B02.0020.0002] # LEFTWARDS DOUBLE ARROW WITH VERTICAL STROKE -2903 ; [*0B03.0020.0002] # RIGHTWARDS DOUBLE ARROW WITH VERTICAL STROKE -2904 ; [*0B04.0020.0002] # LEFT RIGHT DOUBLE ARROW WITH VERTICAL STROKE -2905 ; [*0B05.0020.0002] # RIGHTWARDS TWO-HEADED ARROW FROM BAR -2906 ; [*0B06.0020.0002] # LEFTWARDS DOUBLE ARROW FROM BAR -2907 ; [*0B07.0020.0002] # RIGHTWARDS DOUBLE ARROW FROM BAR -2908 ; [*0B08.0020.0002] # DOWNWARDS ARROW WITH HORIZONTAL STROKE -2909 ; [*0B09.0020.0002] # UPWARDS ARROW WITH HORIZONTAL STROKE -290A ; [*0B0A.0020.0002] # UPWARDS TRIPLE ARROW -290B ; [*0B0B.0020.0002] # DOWNWARDS TRIPLE ARROW -290C ; [*0B0C.0020.0002] # LEFTWARDS DOUBLE DASH ARROW -290D ; [*0B0D.0020.0002] # RIGHTWARDS DOUBLE DASH ARROW -290E ; [*0B0E.0020.0002] # LEFTWARDS TRIPLE DASH ARROW -290F ; [*0B0F.0020.0002] # RIGHTWARDS TRIPLE DASH ARROW -2910 ; [*0B10.0020.0002] # RIGHTWARDS TWO-HEADED TRIPLE DASH ARROW -2911 ; [*0B11.0020.0002] # RIGHTWARDS ARROW WITH DOTTED STEM -2912 ; [*0B12.0020.0002] # UPWARDS ARROW TO BAR -2913 ; [*0B13.0020.0002] # DOWNWARDS ARROW TO BAR -2914 ; [*0B14.0020.0002] # RIGHTWARDS ARROW WITH TAIL WITH VERTICAL STROKE -2915 ; [*0B15.0020.0002] # RIGHTWARDS ARROW WITH TAIL WITH DOUBLE VERTICAL STROKE -2916 ; [*0B16.0020.0002] # RIGHTWARDS TWO-HEADED ARROW WITH TAIL -2917 ; [*0B17.0020.0002] # RIGHTWARDS TWO-HEADED ARROW WITH TAIL WITH VERTICAL STROKE -2918 ; [*0B18.0020.0002] # RIGHTWARDS TWO-HEADED ARROW WITH TAIL WITH DOUBLE VERTICAL STROKE -2919 ; [*0B19.0020.0002] # LEFTWARDS ARROW-TAIL -291A ; [*0B1A.0020.0002] # RIGHTWARDS ARROW-TAIL -291B ; [*0B1B.0020.0002] # LEFTWARDS DOUBLE ARROW-TAIL -291C ; [*0B1C.0020.0002] # RIGHTWARDS DOUBLE ARROW-TAIL -291D ; [*0B1D.0020.0002] # LEFTWARDS ARROW TO BLACK DIAMOND -291E ; [*0B1E.0020.0002] # RIGHTWARDS ARROW TO BLACK DIAMOND -291F ; [*0B1F.0020.0002] # LEFTWARDS ARROW FROM BAR TO BLACK DIAMOND -2920 ; [*0B20.0020.0002] # RIGHTWARDS ARROW FROM BAR TO BLACK DIAMOND -2921 ; [*0B21.0020.0002] # NORTH WEST AND SOUTH EAST ARROW -2922 ; [*0B22.0020.0002] # NORTH EAST AND SOUTH WEST ARROW -2923 ; [*0B23.0020.0002] # NORTH WEST ARROW WITH HOOK -2924 ; [*0B24.0020.0002] # NORTH EAST ARROW WITH HOOK -2925 ; [*0B25.0020.0002] # SOUTH EAST ARROW WITH HOOK -2926 ; [*0B26.0020.0002] # SOUTH WEST ARROW WITH HOOK -2927 ; [*0B27.0020.0002] # NORTH WEST ARROW AND NORTH EAST ARROW -2928 ; [*0B28.0020.0002] # NORTH EAST ARROW AND SOUTH EAST ARROW -2929 ; [*0B29.0020.0002] # SOUTH EAST ARROW AND SOUTH WEST ARROW -292A ; [*0B2A.0020.0002] # SOUTH WEST ARROW AND NORTH WEST ARROW -292B ; [*0B2B.0020.0002] # RISING DIAGONAL CROSSING FALLING DIAGONAL -292C ; [*0B2C.0020.0002] # FALLING DIAGONAL CROSSING RISING DIAGONAL -292D ; [*0B2D.0020.0002] # SOUTH EAST ARROW CROSSING NORTH EAST ARROW -292E ; [*0B2E.0020.0002] # NORTH EAST ARROW CROSSING SOUTH EAST ARROW -292F ; [*0B2F.0020.0002] # FALLING DIAGONAL CROSSING NORTH EAST ARROW -2930 ; [*0B30.0020.0002] # RISING DIAGONAL CROSSING SOUTH EAST ARROW -2931 ; [*0B31.0020.0002] # NORTH EAST ARROW CROSSING NORTH WEST ARROW -2932 ; [*0B32.0020.0002] # NORTH WEST ARROW CROSSING NORTH EAST ARROW -2933 ; [*0B33.0020.0002] # WAVE ARROW POINTING DIRECTLY RIGHT -2934 ; [*0B34.0020.0002] # ARROW POINTING RIGHTWARDS THEN CURVING UPWARDS -2935 ; [*0B35.0020.0002] # ARROW POINTING RIGHTWARDS THEN CURVING DOWNWARDS -2936 ; [*0B36.0020.0002] # ARROW POINTING DOWNWARDS THEN CURVING LEFTWARDS -2937 ; [*0B37.0020.0002] # ARROW POINTING DOWNWARDS THEN CURVING RIGHTWARDS -2938 ; [*0B38.0020.0002] # RIGHT-SIDE ARC CLOCKWISE ARROW -2939 ; [*0B39.0020.0002] # LEFT-SIDE ARC ANTICLOCKWISE ARROW -293A ; [*0B3A.0020.0002] # TOP ARC ANTICLOCKWISE ARROW -293B ; [*0B3B.0020.0002] # BOTTOM ARC ANTICLOCKWISE ARROW -293C ; [*0B3C.0020.0002] # TOP ARC CLOCKWISE ARROW WITH MINUS -293D ; [*0B3D.0020.0002] # TOP ARC ANTICLOCKWISE ARROW WITH PLUS -293E ; [*0B3E.0020.0002] # LOWER RIGHT SEMICIRCULAR CLOCKWISE ARROW -293F ; [*0B3F.0020.0002] # LOWER LEFT SEMICIRCULAR ANTICLOCKWISE ARROW -2940 ; [*0B40.0020.0002] # ANTICLOCKWISE CLOSED CIRCLE ARROW -2941 ; [*0B41.0020.0002] # CLOCKWISE CLOSED CIRCLE ARROW -2942 ; [*0B42.0020.0002] # RIGHTWARDS ARROW ABOVE SHORT LEFTWARDS ARROW -2943 ; [*0B43.0020.0002] # LEFTWARDS ARROW ABOVE SHORT RIGHTWARDS ARROW -2944 ; [*0B44.0020.0002] # SHORT RIGHTWARDS ARROW ABOVE LEFTWARDS ARROW -2945 ; [*0B45.0020.0002] # RIGHTWARDS ARROW WITH PLUS BELOW -2946 ; [*0B46.0020.0002] # LEFTWARDS ARROW WITH PLUS BELOW -2947 ; [*0B47.0020.0002] # RIGHTWARDS ARROW THROUGH X -2948 ; [*0B48.0020.0002] # LEFT RIGHT ARROW THROUGH SMALL CIRCLE -2949 ; [*0B49.0020.0002] # UPWARDS TWO-HEADED ARROW FROM SMALL CIRCLE -294A ; [*0B4A.0020.0002] # LEFT BARB UP RIGHT BARB DOWN HARPOON -294B ; [*0B4B.0020.0002] # LEFT BARB DOWN RIGHT BARB UP HARPOON -294C ; [*0B4C.0020.0002] # UP BARB RIGHT DOWN BARB LEFT HARPOON -294D ; [*0B4D.0020.0002] # UP BARB LEFT DOWN BARB RIGHT HARPOON -294E ; [*0B4E.0020.0002] # LEFT BARB UP RIGHT BARB UP HARPOON -294F ; [*0B4F.0020.0002] # UP BARB RIGHT DOWN BARB RIGHT HARPOON -2950 ; [*0B50.0020.0002] # LEFT BARB DOWN RIGHT BARB DOWN HARPOON -2951 ; [*0B51.0020.0002] # UP BARB LEFT DOWN BARB LEFT HARPOON -2952 ; [*0B52.0020.0002] # LEFTWARDS HARPOON WITH BARB UP TO BAR -2953 ; [*0B53.0020.0002] # RIGHTWARDS HARPOON WITH BARB UP TO BAR -2954 ; [*0B54.0020.0002] # UPWARDS HARPOON WITH BARB RIGHT TO BAR -2955 ; [*0B55.0020.0002] # DOWNWARDS HARPOON WITH BARB RIGHT TO BAR -2956 ; [*0B56.0020.0002] # LEFTWARDS HARPOON WITH BARB DOWN TO BAR -2957 ; [*0B57.0020.0002] # RIGHTWARDS HARPOON WITH BARB DOWN TO BAR -2958 ; [*0B58.0020.0002] # UPWARDS HARPOON WITH BARB LEFT TO BAR -2959 ; [*0B59.0020.0002] # DOWNWARDS HARPOON WITH BARB LEFT TO BAR -295A ; [*0B5A.0020.0002] # LEFTWARDS HARPOON WITH BARB UP FROM BAR -295B ; [*0B5B.0020.0002] # RIGHTWARDS HARPOON WITH BARB UP FROM BAR -295C ; [*0B5C.0020.0002] # UPWARDS HARPOON WITH BARB RIGHT FROM BAR -295D ; [*0B5D.0020.0002] # DOWNWARDS HARPOON WITH BARB RIGHT FROM BAR -295E ; [*0B5E.0020.0002] # LEFTWARDS HARPOON WITH BARB DOWN FROM BAR -295F ; [*0B5F.0020.0002] # RIGHTWARDS HARPOON WITH BARB DOWN FROM BAR -2960 ; [*0B60.0020.0002] # UPWARDS HARPOON WITH BARB LEFT FROM BAR -2961 ; [*0B61.0020.0002] # DOWNWARDS HARPOON WITH BARB LEFT FROM BAR -2962 ; [*0B62.0020.0002] # LEFTWARDS HARPOON WITH BARB UP ABOVE LEFTWARDS HARPOON WITH BARB DOWN -2963 ; [*0B63.0020.0002] # UPWARDS HARPOON WITH BARB LEFT BESIDE UPWARDS HARPOON WITH BARB RIGHT -2964 ; [*0B64.0020.0002] # RIGHTWARDS HARPOON WITH BARB UP ABOVE RIGHTWARDS HARPOON WITH BARB DOWN -2965 ; [*0B65.0020.0002] # DOWNWARDS HARPOON WITH BARB LEFT BESIDE DOWNWARDS HARPOON WITH BARB RIGHT -2966 ; [*0B66.0020.0002] # LEFTWARDS HARPOON WITH BARB UP ABOVE RIGHTWARDS HARPOON WITH BARB UP -2967 ; [*0B67.0020.0002] # LEFTWARDS HARPOON WITH BARB DOWN ABOVE RIGHTWARDS HARPOON WITH BARB DOWN -2968 ; [*0B68.0020.0002] # RIGHTWARDS HARPOON WITH BARB UP ABOVE LEFTWARDS HARPOON WITH BARB UP -2969 ; [*0B69.0020.0002] # RIGHTWARDS HARPOON WITH BARB DOWN ABOVE LEFTWARDS HARPOON WITH BARB DOWN -296A ; [*0B6A.0020.0002] # LEFTWARDS HARPOON WITH BARB UP ABOVE LONG DASH -296B ; [*0B6B.0020.0002] # LEFTWARDS HARPOON WITH BARB DOWN BELOW LONG DASH -296C ; [*0B6C.0020.0002] # RIGHTWARDS HARPOON WITH BARB UP ABOVE LONG DASH -296D ; [*0B6D.0020.0002] # RIGHTWARDS HARPOON WITH BARB DOWN BELOW LONG DASH -296E ; [*0B6E.0020.0002] # UPWARDS HARPOON WITH BARB LEFT BESIDE DOWNWARDS HARPOON WITH BARB RIGHT -296F ; [*0B6F.0020.0002] # DOWNWARDS HARPOON WITH BARB LEFT BESIDE UPWARDS HARPOON WITH BARB RIGHT -2970 ; [*0B70.0020.0002] # RIGHT DOUBLE ARROW WITH ROUNDED HEAD -2971 ; [*0B71.0020.0002] # EQUALS SIGN ABOVE RIGHTWARDS ARROW -2972 ; [*0B72.0020.0002] # TILDE OPERATOR ABOVE RIGHTWARDS ARROW -2973 ; [*0B73.0020.0002] # LEFTWARDS ARROW ABOVE TILDE OPERATOR -2974 ; [*0B74.0020.0002] # RIGHTWARDS ARROW ABOVE TILDE OPERATOR -2975 ; [*0B75.0020.0002] # RIGHTWARDS ARROW ABOVE ALMOST EQUAL TO -2976 ; [*0B76.0020.0002] # LESS-THAN ABOVE LEFTWARDS ARROW -2977 ; [*0B77.0020.0002] # LEFTWARDS ARROW THROUGH LESS-THAN -2978 ; [*0B78.0020.0002] # GREATER-THAN ABOVE RIGHTWARDS ARROW -2979 ; [*0B79.0020.0002] # SUBSET ABOVE RIGHTWARDS ARROW -297A ; [*0B7A.0020.0002] # LEFTWARDS ARROW THROUGH SUBSET -297B ; [*0B7B.0020.0002] # SUPERSET ABOVE LEFTWARDS ARROW -297C ; [*0B7C.0020.0002] # LEFT FISH TAIL -297D ; [*0B7D.0020.0002] # RIGHT FISH TAIL -297E ; [*0B7E.0020.0002] # UP FISH TAIL -297F ; [*0B7F.0020.0002] # DOWN FISH TAIL -2980 ; [*0B80.0020.0002] # TRIPLE VERTICAL BAR DELIMITER -2981 ; [*0B81.0020.0002] # Z NOTATION SPOT -2982 ; [*0B82.0020.0002] # Z NOTATION TYPE COLON -2983 ; [*032C.0020.0002] # LEFT WHITE CURLY BRACKET -2984 ; [*032D.0020.0002] # RIGHT WHITE CURLY BRACKET -2985 ; [*032E.0020.0002] # LEFT WHITE PARENTHESIS -2986 ; [*032F.0020.0002] # RIGHT WHITE PARENTHESIS -2987 ; [*0330.0020.0002] # Z NOTATION LEFT IMAGE BRACKET -2988 ; [*0331.0020.0002] # Z NOTATION RIGHT IMAGE BRACKET -2989 ; [*0332.0020.0002] # Z NOTATION LEFT BINDING BRACKET -298A ; [*0333.0020.0002] # Z NOTATION RIGHT BINDING BRACKET -298B ; [*0334.0020.0002] # LEFT SQUARE BRACKET WITH UNDERBAR -298C ; [*0335.0020.0002] # RIGHT SQUARE BRACKET WITH UNDERBAR -298D ; [*0336.0020.0002] # LEFT SQUARE BRACKET WITH TICK IN TOP CORNER -298E ; [*0337.0020.0002] # RIGHT SQUARE BRACKET WITH TICK IN BOTTOM CORNER -298F ; [*0338.0020.0002] # LEFT SQUARE BRACKET WITH TICK IN BOTTOM CORNER -2990 ; [*0339.0020.0002] # RIGHT SQUARE BRACKET WITH TICK IN TOP CORNER -2991 ; [*033A.0020.0002] # LEFT ANGLE BRACKET WITH DOT -2992 ; [*033B.0020.0002] # RIGHT ANGLE BRACKET WITH DOT -2993 ; [*033C.0020.0002] # LEFT ARC LESS-THAN BRACKET -2994 ; [*033D.0020.0002] # RIGHT ARC GREATER-THAN BRACKET -2995 ; [*033E.0020.0002] # DOUBLE LEFT ARC GREATER-THAN BRACKET -2996 ; [*033F.0020.0002] # DOUBLE RIGHT ARC LESS-THAN BRACKET -2997 ; [*0340.0020.0002] # LEFT BLACK TORTOISE SHELL BRACKET -2998 ; [*0341.0020.0002] # RIGHT BLACK TORTOISE SHELL BRACKET -2999 ; [*0B83.0020.0002] # DOTTED FENCE -299A ; [*0B84.0020.0002] # VERTICAL ZIGZAG LINE -299B ; [*0B85.0020.0002] # MEASURED ANGLE OPENING LEFT -299C ; [*0B86.0020.0002] # RIGHT ANGLE VARIANT WITH SQUARE -299D ; [*0B87.0020.0002] # MEASURED RIGHT ANGLE WITH DOT -299E ; [*0B88.0020.0002] # ANGLE WITH S INSIDE -299F ; [*0B89.0020.0002] # ACUTE ANGLE -29A0 ; [*0B8A.0020.0002] # SPHERICAL ANGLE OPENING LEFT -29A1 ; [*0B8B.0020.0002] # SPHERICAL ANGLE OPENING UP -29A2 ; [*0B8C.0020.0002] # TURNED ANGLE -29A3 ; [*0B8D.0020.0002] # REVERSED ANGLE -29A4 ; [*0B8E.0020.0002] # ANGLE WITH UNDERBAR -29A5 ; [*0B8F.0020.0002] # REVERSED ANGLE WITH UNDERBAR -29A6 ; [*0B90.0020.0002] # OBLIQUE ANGLE OPENING UP -29A7 ; [*0B91.0020.0002] # OBLIQUE ANGLE OPENING DOWN -29A8 ; [*0B92.0020.0002] # MEASURED ANGLE WITH OPEN ARM ENDING IN ARROW POINTING UP AND RIGHT -29A9 ; [*0B93.0020.0002] # MEASURED ANGLE WITH OPEN ARM ENDING IN ARROW POINTING UP AND LEFT -29AA ; [*0B94.0020.0002] # MEASURED ANGLE WITH OPEN ARM ENDING IN ARROW POINTING DOWN AND RIGHT -29AB ; [*0B95.0020.0002] # MEASURED ANGLE WITH OPEN ARM ENDING IN ARROW POINTING DOWN AND LEFT -29AC ; [*0B96.0020.0002] # MEASURED ANGLE WITH OPEN ARM ENDING IN ARROW POINTING RIGHT AND UP -29AD ; [*0B97.0020.0002] # MEASURED ANGLE WITH OPEN ARM ENDING IN ARROW POINTING LEFT AND UP -29AE ; [*0B98.0020.0002] # MEASURED ANGLE WITH OPEN ARM ENDING IN ARROW POINTING RIGHT AND DOWN -29AF ; [*0B99.0020.0002] # MEASURED ANGLE WITH OPEN ARM ENDING IN ARROW POINTING LEFT AND DOWN -29B0 ; [*0B9A.0020.0002] # REVERSED EMPTY SET -29B1 ; [*0B9B.0020.0002] # EMPTY SET WITH OVERBAR -29B2 ; [*0B9C.0020.0002] # EMPTY SET WITH SMALL CIRCLE ABOVE -29B3 ; [*0B9D.0020.0002] # EMPTY SET WITH RIGHT ARROW ABOVE -29B4 ; [*0B9E.0020.0002] # EMPTY SET WITH LEFT ARROW ABOVE -29B5 ; [*0B9F.0020.0002] # CIRCLE WITH HORIZONTAL BAR -29B6 ; [*0BA0.0020.0002] # CIRCLED VERTICAL BAR -29B7 ; [*0BA1.0020.0002] # CIRCLED PARALLEL -29B8 ; [*0BA2.0020.0002] # CIRCLED REVERSE SOLIDUS -29B9 ; [*0BA3.0020.0002] # CIRCLED PERPENDICULAR -29BA ; [*0BA4.0020.0002] # CIRCLE DIVIDED BY HORIZONTAL BAR AND TOP HALF DIVIDED BY VERTICAL BAR -29BB ; [*0BA5.0020.0002] # CIRCLE WITH SUPERIMPOSED X -29BC ; [*0BA6.0020.0002] # CIRCLED ANTICLOCKWISE-ROTATED DIVISION SIGN -29BD ; [*0BA7.0020.0002] # UP ARROW THROUGH CIRCLE -29BE ; [*0BA8.0020.0002] # CIRCLED WHITE BULLET -29BF ; [*0BA9.0020.0002] # CIRCLED BULLET -29C0 ; [*0BAA.0020.0002] # CIRCLED LESS-THAN -29C1 ; [*0BAB.0020.0002] # CIRCLED GREATER-THAN -29C2 ; [*0BAC.0020.0002] # CIRCLE WITH SMALL CIRCLE TO THE RIGHT -29C3 ; [*0BAD.0020.0002] # CIRCLE WITH TWO HORIZONTAL STROKES TO THE RIGHT -29C4 ; [*0BAE.0020.0002] # SQUARED RISING DIAGONAL SLASH -29C5 ; [*0BAF.0020.0002] # SQUARED FALLING DIAGONAL SLASH -29C6 ; [*0BB0.0020.0002] # SQUARED ASTERISK -29C7 ; [*0BB1.0020.0002] # SQUARED SMALL CIRCLE -29C8 ; [*0BB2.0020.0002] # SQUARED SQUARE -29C9 ; [*0BB3.0020.0002] # TWO JOINED SQUARES -29CA ; [*0BB4.0020.0002] # TRIANGLE WITH DOT ABOVE -29CB ; [*0BB5.0020.0002] # TRIANGLE WITH UNDERBAR -29CC ; [*0BB6.0020.0002] # S IN TRIANGLE -29CD ; [*0BB7.0020.0002] # TRIANGLE WITH SERIFS AT BOTTOM -29CE ; [*0BB8.0020.0002] # RIGHT TRIANGLE ABOVE LEFT TRIANGLE -29CF ; [*0BB9.0020.0002] # LEFT TRIANGLE BESIDE VERTICAL BAR -29D0 ; [*0BBA.0020.0002] # VERTICAL BAR BESIDE RIGHT TRIANGLE -29D1 ; [*0BBB.0020.0002] # BOWTIE WITH LEFT HALF BLACK -29D2 ; [*0BBC.0020.0002] # BOWTIE WITH RIGHT HALF BLACK -29D3 ; [*0BBD.0020.0002] # BLACK BOWTIE -29D4 ; [*0BBE.0020.0002] # TIMES WITH LEFT HALF BLACK -29D5 ; [*0BBF.0020.0002] # TIMES WITH RIGHT HALF BLACK -29D6 ; [*0BC0.0020.0002] # WHITE HOURGLASS -29D7 ; [*0BC1.0020.0002] # BLACK HOURGLASS -29D8 ; [*0386.0020.0002] # LEFT WIGGLY FENCE -29D9 ; [*0387.0020.0002] # RIGHT WIGGLY FENCE -29DA ; [*0388.0020.0002] # LEFT DOUBLE WIGGLY FENCE -29DB ; [*0389.0020.0002] # RIGHT DOUBLE WIGGLY FENCE -29DC ; [*0BC2.0020.0002] # INCOMPLETE INFINITY -29DD ; [*0BC3.0020.0002] # TIE OVER INFINITY -29DE ; [*0BC4.0020.0002] # INFINITY NEGATED WITH VERTICAL BAR -29DF ; [*0BC5.0020.0002] # DOUBLE-ENDED MULTIMAP -29E0 ; [*0BC6.0020.0002] # SQUARE WITH CONTOURED OUTLINE -29E1 ; [*0BC7.0020.0002] # INCREASES AS -29E2 ; [*0BC8.0020.0002] # SHUFFLE PRODUCT -29E3 ; [*0BC9.0020.0002] # EQUALS SIGN AND SLANTED PARALLEL -29E4 ; [*0BCA.0020.0002] # EQUALS SIGN AND SLANTED PARALLEL WITH TILDE ABOVE -29E5 ; [*0BCB.0020.0002] # IDENTICAL TO AND SLANTED PARALLEL -29E6 ; [*0BCC.0020.0002] # GLEICH STARK -29E7 ; [*0BCD.0020.0002] # THERMODYNAMIC -29E8 ; [*0BCE.0020.0002] # DOWN-POINTING TRIANGLE WITH LEFT HALF BLACK -29E9 ; [*0BCF.0020.0002] # DOWN-POINTING TRIANGLE WITH RIGHT HALF BLACK -29EA ; [*0BD0.0020.0002] # BLACK DIAMOND WITH DOWN ARROW -29EB ; [*0BD1.0020.0002] # BLACK LOZENGE -29EC ; [*0BD2.0020.0002] # WHITE CIRCLE WITH DOWN ARROW -29ED ; [*0BD3.0020.0002] # BLACK CIRCLE WITH DOWN ARROW -29EE ; [*0BD4.0020.0002] # ERROR-BARRED WHITE SQUARE -29EF ; [*0BD5.0020.0002] # ERROR-BARRED BLACK SQUARE -29F0 ; [*0BD6.0020.0002] # ERROR-BARRED WHITE DIAMOND -29F1 ; [*0BD7.0020.0002] # ERROR-BARRED BLACK DIAMOND -29F2 ; [*0BD8.0020.0002] # ERROR-BARRED WHITE CIRCLE -29F3 ; [*0BD9.0020.0002] # ERROR-BARRED BLACK CIRCLE -29F4 ; [*0BDA.0020.0002] # RULE-DELAYED -29F5 ; [*0BDB.0020.0002] # REVERSE SOLIDUS OPERATOR -29F6 ; [*0BDC.0020.0002] # SOLIDUS WITH OVERBAR -29F7 ; [*0BDD.0020.0002] # REVERSE SOLIDUS WITH HORIZONTAL STROKE -29F8 ; [*0BDE.0020.0002] # BIG SOLIDUS -29F9 ; [*0BDF.0020.0002] # BIG REVERSE SOLIDUS -29FA ; [*0BE0.0020.0002] # DOUBLE PLUS -29FB ; [*0BE1.0020.0002] # TRIPLE PLUS -29FC ; [*032A.0020.0002] # LEFT-POINTING CURVED ANGLE BRACKET -29FD ; [*032B.0020.0002] # RIGHT-POINTING CURVED ANGLE BRACKET -29FE ; [*0BE2.0020.0002] # TINY -29FF ; [*0BE3.0020.0002] # MINY -2A00 ; [*0BE4.0020.0002] # N-ARY CIRCLED DOT OPERATOR -2A01 ; [*0BE5.0020.0002] # N-ARY CIRCLED PLUS OPERATOR -2A02 ; [*0BE6.0020.0002] # N-ARY CIRCLED TIMES OPERATOR -2A03 ; [*0BE7.0020.0002] # N-ARY UNION OPERATOR WITH DOT -2A04 ; [*0BE8.0020.0002] # N-ARY UNION OPERATOR WITH PLUS -2A05 ; [*0BE9.0020.0002] # N-ARY SQUARE INTERSECTION OPERATOR -2A06 ; [*0BEA.0020.0002] # N-ARY SQUARE UNION OPERATOR -2A07 ; [*0BEB.0020.0002] # TWO LOGICAL AND OPERATOR -2A08 ; [*0BEC.0020.0002] # TWO LOGICAL OR OPERATOR -2A09 ; [*0BED.0020.0002] # N-ARY TIMES OPERATOR -2A0A ; [*0BEE.0020.0002] # MODULO TWO SUM -2A0B ; [*0BEF.0020.0002] # SUMMATION WITH INTEGRAL -2A0C ; [*0652.0020.0004][*0652.0020.0004][*0652.0020.0004][*0652.0020.0004] # QUADRUPLE INTEGRAL OPERATOR -2A0D ; [*0BF0.0020.0002] # FINITE PART INTEGRAL -2A0E ; [*0BF1.0020.0002] # INTEGRAL WITH DOUBLE STROKE -2A0F ; [*0BF2.0020.0002] # INTEGRAL AVERAGE WITH SLASH -2A10 ; [*0BF3.0020.0002] # CIRCULATION FUNCTION -2A11 ; [*0BF4.0020.0002] # ANTICLOCKWISE INTEGRATION -2A12 ; [*0BF5.0020.0002] # LINE INTEGRATION WITH RECTANGULAR PATH AROUND POLE -2A13 ; [*0BF6.0020.0002] # LINE INTEGRATION WITH SEMICIRCULAR PATH AROUND POLE -2A14 ; [*0BF7.0020.0002] # LINE INTEGRATION NOT INCLUDING THE POLE -2A15 ; [*0BF8.0020.0002] # INTEGRAL AROUND A POINT OPERATOR -2A16 ; [*0BF9.0020.0002] # QUATERNION INTEGRAL OPERATOR -2A17 ; [*0BFA.0020.0002] # INTEGRAL WITH LEFTWARDS ARROW WITH HOOK -2A18 ; [*0BFB.0020.0002] # INTEGRAL WITH TIMES SIGN -2A19 ; [*0BFC.0020.0002] # INTEGRAL WITH INTERSECTION -2A1A ; [*0BFD.0020.0002] # INTEGRAL WITH UNION -2A1B ; [*0BFE.0020.0002] # INTEGRAL WITH OVERBAR -2A1C ; [*0BFF.0020.0002] # INTEGRAL WITH UNDERBAR -2A1D ; [*0C00.0020.0002] # JOIN -2A1E ; [*0C01.0020.0002] # LARGE LEFT TRIANGLE OPERATOR -2A1F ; [*0C02.0020.0002] # Z NOTATION SCHEMA COMPOSITION -2A20 ; [*0C03.0020.0002] # Z NOTATION SCHEMA PIPING -2A21 ; [*0C04.0020.0002] # Z NOTATION SCHEMA PROJECTION -2A22 ; [*0C05.0020.0002] # PLUS SIGN WITH SMALL CIRCLE ABOVE -2A23 ; [*0C06.0020.0002] # PLUS SIGN WITH CIRCUMFLEX ACCENT ABOVE -2A24 ; [*0C07.0020.0002] # PLUS SIGN WITH TILDE ABOVE -2A25 ; [*0C08.0020.0002] # PLUS SIGN WITH DOT BELOW -2A26 ; [*0C09.0020.0002] # PLUS SIGN WITH TILDE BELOW -2A27 ; [*0C0A.0020.0002] # PLUS SIGN WITH SUBSCRIPT TWO -2A28 ; [*0C0B.0020.0002] # PLUS SIGN WITH BLACK TRIANGLE -2A29 ; [*0C0C.0020.0002] # MINUS SIGN WITH COMMA ABOVE -2A2A ; [*0C0D.0020.0002] # MINUS SIGN WITH DOT BELOW -2A2B ; [*0C0E.0020.0002] # MINUS SIGN WITH FALLING DOTS -2A2C ; [*0C0F.0020.0002] # MINUS SIGN WITH RISING DOTS -2A2D ; [*0C10.0020.0002] # PLUS SIGN IN LEFT HALF CIRCLE -2A2E ; [*0C11.0020.0002] # PLUS SIGN IN RIGHT HALF CIRCLE -2A2F ; [*0C12.0020.0002] # VECTOR OR CROSS PRODUCT -2A30 ; [*0C13.0020.0002] # MULTIPLICATION SIGN WITH DOT ABOVE -2A31 ; [*0C14.0020.0002] # MULTIPLICATION SIGN WITH UNDERBAR -2A32 ; [*0C15.0020.0002] # SEMIDIRECT PRODUCT WITH BOTTOM CLOSED -2A33 ; [*0C16.0020.0002] # SMASH PRODUCT -2A34 ; [*0C17.0020.0002] # MULTIPLICATION SIGN IN LEFT HALF CIRCLE -2A35 ; [*0C18.0020.0002] # MULTIPLICATION SIGN IN RIGHT HALF CIRCLE -2A36 ; [*0C19.0020.0002] # CIRCLED MULTIPLICATION SIGN WITH CIRCUMFLEX ACCENT -2A37 ; [*0C1A.0020.0002] # MULTIPLICATION SIGN IN DOUBLE CIRCLE -2A38 ; [*0C1B.0020.0002] # CIRCLED DIVISION SIGN -2A39 ; [*0C1C.0020.0002] # PLUS SIGN IN TRIANGLE -2A3A ; [*0C1D.0020.0002] # MINUS SIGN IN TRIANGLE -2A3B ; [*0C1E.0020.0002] # MULTIPLICATION SIGN IN TRIANGLE -2A3C ; [*0C1F.0020.0002] # INTERIOR PRODUCT -2A3D ; [*0C20.0020.0002] # RIGHTHAND INTERIOR PRODUCT -2A3E ; [*0C21.0020.0002] # Z NOTATION RELATIONAL COMPOSITION -2A3F ; [*0C22.0020.0002] # AMALGAMATION OR COPRODUCT -2A40 ; [*0C23.0020.0002] # INTERSECTION WITH DOT -2A41 ; [*0C24.0020.0002] # UNION WITH MINUS SIGN -2A42 ; [*0C25.0020.0002] # UNION WITH OVERBAR -2A43 ; [*0C26.0020.0002] # INTERSECTION WITH OVERBAR -2A44 ; [*0C27.0020.0002] # INTERSECTION WITH LOGICAL AND -2A45 ; [*0C28.0020.0002] # UNION WITH LOGICAL OR -2A46 ; [*0C29.0020.0002] # UNION ABOVE INTERSECTION -2A47 ; [*0C2A.0020.0002] # INTERSECTION ABOVE UNION -2A48 ; [*0C2B.0020.0002] # UNION ABOVE BAR ABOVE INTERSECTION -2A49 ; [*0C2C.0020.0002] # INTERSECTION ABOVE BAR ABOVE UNION -2A4A ; [*0C2D.0020.0002] # UNION BESIDE AND JOINED WITH UNION -2A4B ; [*0C2E.0020.0002] # INTERSECTION BESIDE AND JOINED WITH INTERSECTION -2A4C ; [*0C2F.0020.0002] # CLOSED UNION WITH SERIFS -2A4D ; [*0C30.0020.0002] # CLOSED INTERSECTION WITH SERIFS -2A4E ; [*0C31.0020.0002] # DOUBLE SQUARE INTERSECTION -2A4F ; [*0C32.0020.0002] # DOUBLE SQUARE UNION -2A50 ; [*0C33.0020.0002] # CLOSED UNION WITH SERIFS AND SMASH PRODUCT -2A51 ; [*0C34.0020.0002] # LOGICAL AND WITH DOT ABOVE -2A52 ; [*0C35.0020.0002] # LOGICAL OR WITH DOT ABOVE -2A53 ; [*0C36.0020.0002] # DOUBLE LOGICAL AND -2A54 ; [*0C37.0020.0002] # DOUBLE LOGICAL OR -2A55 ; [*0C38.0020.0002] # TWO INTERSECTING LOGICAL AND -2A56 ; [*0C39.0020.0002] # TWO INTERSECTING LOGICAL OR -2A57 ; [*0C3A.0020.0002] # SLOPING LARGE OR -2A58 ; [*0C3B.0020.0002] # SLOPING LARGE AND -2A59 ; [*0C3C.0020.0002] # LOGICAL OR OVERLAPPING LOGICAL AND -2A5A ; [*0C3D.0020.0002] # LOGICAL AND WITH MIDDLE STEM -2A5B ; [*0C3E.0020.0002] # LOGICAL OR WITH MIDDLE STEM -2A5C ; [*0C3F.0020.0002] # LOGICAL AND WITH HORIZONTAL DASH -2A5D ; [*0C40.0020.0002] # LOGICAL OR WITH HORIZONTAL DASH -2A5E ; [*0C41.0020.0002] # LOGICAL AND WITH DOUBLE OVERBAR -2A5F ; [*0C42.0020.0002] # LOGICAL AND WITH UNDERBAR -2A60 ; [*0C43.0020.0002] # LOGICAL AND WITH DOUBLE UNDERBAR -2A61 ; [*0C44.0020.0002] # SMALL VEE WITH UNDERBAR -2A62 ; [*0C45.0020.0002] # LOGICAL OR WITH DOUBLE OVERBAR -2A63 ; [*0C46.0020.0002] # LOGICAL OR WITH DOUBLE UNDERBAR -2A64 ; [*0C47.0020.0002] # Z NOTATION DOMAIN ANTIRESTRICTION -2A65 ; [*0C48.0020.0002] # Z NOTATION RANGE ANTIRESTRICTION -2A66 ; [*0C49.0020.0002] # EQUALS SIGN WITH DOT BELOW -2A67 ; [*0C4A.0020.0002] # IDENTICAL WITH DOT ABOVE -2A68 ; [*0C4B.0020.0002] # TRIPLE HORIZONTAL BAR WITH DOUBLE VERTICAL STROKE -2A69 ; [*0C4C.0020.0002] # TRIPLE HORIZONTAL BAR WITH TRIPLE VERTICAL STROKE -2A6A ; [*0C4D.0020.0002] # TILDE OPERATOR WITH DOT ABOVE -2A6B ; [*0C4E.0020.0002] # TILDE OPERATOR WITH RISING DOTS -2A6C ; [*0C4F.0020.0002] # SIMILAR MINUS SIMILAR -2A6D ; [*0C50.0020.0002] # CONGRUENT WITH DOT ABOVE -2A6E ; [*0C51.0020.0002] # EQUALS WITH ASTERISK -2A6F ; [*0C52.0020.0002] # ALMOST EQUAL TO WITH CIRCUMFLEX ACCENT -2A70 ; [*0C53.0020.0002] # APPROXIMATELY EQUAL OR EQUAL TO -2A71 ; [*0C54.0020.0002] # EQUALS SIGN ABOVE PLUS SIGN -2A72 ; [*0C55.0020.0002] # PLUS SIGN ABOVE EQUALS SIGN -2A73 ; [*0C56.0020.0002] # EQUALS SIGN ABOVE TILDE OPERATOR -2A74 ; [*023A.0020.0004][*023A.0020.0004][*0631.0020.0004] # DOUBLE COLON EQUAL -2A75 ; [*0631.0020.0004][*0631.0020.0004] # TWO CONSECUTIVE EQUALS SIGNS -2A76 ; [*0631.0020.0004][*0631.0020.0004][*0631.0020.0004] # THREE CONSECUTIVE EQUALS SIGNS -2A77 ; [*0C57.0020.0002] # EQUALS SIGN WITH TWO DOTS ABOVE AND TWO DOTS BELOW -2A78 ; [*0C58.0020.0002] # EQUIVALENT WITH FOUR DOTS ABOVE -2A79 ; [*0C59.0020.0002] # LESS-THAN WITH CIRCLE INSIDE -2A7A ; [*0C5A.0020.0002] # GREATER-THAN WITH CIRCLE INSIDE -2A7B ; [*0C5B.0020.0002] # LESS-THAN WITH QUESTION MARK ABOVE -2A7C ; [*0C5C.0020.0002] # GREATER-THAN WITH QUESTION MARK ABOVE -2A7D ; [*0C5D.0020.0002] # LESS-THAN OR SLANTED EQUAL TO -2A7E ; [*0C5E.0020.0002] # GREATER-THAN OR SLANTED EQUAL TO -2A7F ; [*0C5F.0020.0002] # LESS-THAN OR SLANTED EQUAL TO WITH DOT INSIDE -2A80 ; [*0C60.0020.0002] # GREATER-THAN OR SLANTED EQUAL TO WITH DOT INSIDE -2A81 ; [*0C61.0020.0002] # LESS-THAN OR SLANTED EQUAL TO WITH DOT ABOVE -2A82 ; [*0C62.0020.0002] # GREATER-THAN OR SLANTED EQUAL TO WITH DOT ABOVE -2A83 ; [*0C63.0020.0002] # LESS-THAN OR SLANTED EQUAL TO WITH DOT ABOVE RIGHT -2A84 ; [*0C64.0020.0002] # GREATER-THAN OR SLANTED EQUAL TO WITH DOT ABOVE LEFT -2A85 ; [*0C65.0020.0002] # LESS-THAN OR APPROXIMATE -2A86 ; [*0C66.0020.0002] # GREATER-THAN OR APPROXIMATE -2A87 ; [*0C67.0020.0002] # LESS-THAN AND SINGLE-LINE NOT EQUAL TO -2A88 ; [*0C68.0020.0002] # GREATER-THAN AND SINGLE-LINE NOT EQUAL TO -2A89 ; [*0C69.0020.0002] # LESS-THAN AND NOT APPROXIMATE -2A8A ; [*0C6A.0020.0002] # GREATER-THAN AND NOT APPROXIMATE -2A8B ; [*0C6B.0020.0002] # LESS-THAN ABOVE DOUBLE-LINE EQUAL ABOVE GREATER-THAN -2A8C ; [*0C6C.0020.0002] # GREATER-THAN ABOVE DOUBLE-LINE EQUAL ABOVE LESS-THAN -2A8D ; [*0C6D.0020.0002] # LESS-THAN ABOVE SIMILAR OR EQUAL -2A8E ; [*0C6E.0020.0002] # GREATER-THAN ABOVE SIMILAR OR EQUAL -2A8F ; [*0C6F.0020.0002] # LESS-THAN ABOVE SIMILAR ABOVE GREATER-THAN -2A90 ; [*0C70.0020.0002] # GREATER-THAN ABOVE SIMILAR ABOVE LESS-THAN -2A91 ; [*0C71.0020.0002] # LESS-THAN ABOVE GREATER-THAN ABOVE DOUBLE-LINE EQUAL -2A92 ; [*0C72.0020.0002] # GREATER-THAN ABOVE LESS-THAN ABOVE DOUBLE-LINE EQUAL -2A93 ; [*0C73.0020.0002] # LESS-THAN ABOVE SLANTED EQUAL ABOVE GREATER-THAN ABOVE SLANTED EQUAL -2A94 ; [*0C74.0020.0002] # GREATER-THAN ABOVE SLANTED EQUAL ABOVE LESS-THAN ABOVE SLANTED EQUAL -2A95 ; [*0C75.0020.0002] # SLANTED EQUAL TO OR LESS-THAN -2A96 ; [*0C76.0020.0002] # SLANTED EQUAL TO OR GREATER-THAN -2A97 ; [*0C77.0020.0002] # SLANTED EQUAL TO OR LESS-THAN WITH DOT INSIDE -2A98 ; [*0C78.0020.0002] # SLANTED EQUAL TO OR GREATER-THAN WITH DOT INSIDE -2A99 ; [*0C79.0020.0002] # DOUBLE-LINE EQUAL TO OR LESS-THAN -2A9A ; [*0C7A.0020.0002] # DOUBLE-LINE EQUAL TO OR GREATER-THAN -2A9B ; [*0C7B.0020.0002] # DOUBLE-LINE SLANTED EQUAL TO OR LESS-THAN -2A9C ; [*0C7C.0020.0002] # DOUBLE-LINE SLANTED EQUAL TO OR GREATER-THAN -2A9D ; [*0C7D.0020.0002] # SIMILAR OR LESS-THAN -2A9E ; [*0C7E.0020.0002] # SIMILAR OR GREATER-THAN -2A9F ; [*0C7F.0020.0002] # SIMILAR ABOVE LESS-THAN ABOVE EQUALS SIGN -2AA0 ; [*0C80.0020.0002] # SIMILAR ABOVE GREATER-THAN ABOVE EQUALS SIGN -2AA1 ; [*0C81.0020.0002] # DOUBLE NESTED LESS-THAN -2AA2 ; [*0C82.0020.0002] # DOUBLE NESTED GREATER-THAN -2AA3 ; [*0C83.0020.0002] # DOUBLE NESTED LESS-THAN WITH UNDERBAR -2AA4 ; [*0C84.0020.0002] # GREATER-THAN OVERLAPPING LESS-THAN -2AA5 ; [*0C85.0020.0002] # GREATER-THAN BESIDE LESS-THAN -2AA6 ; [*0C86.0020.0002] # LESS-THAN CLOSED BY CURVE -2AA7 ; [*0C87.0020.0002] # GREATER-THAN CLOSED BY CURVE -2AA8 ; [*0C88.0020.0002] # LESS-THAN CLOSED BY CURVE ABOVE SLANTED EQUAL -2AA9 ; [*0C89.0020.0002] # GREATER-THAN CLOSED BY CURVE ABOVE SLANTED EQUAL -2AAA ; [*0C8A.0020.0002] # SMALLER THAN -2AAB ; [*0C8B.0020.0002] # LARGER THAN -2AAC ; [*0C8C.0020.0002] # SMALLER THAN OR EQUAL TO -2AAD ; [*0C8D.0020.0002] # LARGER THAN OR EQUAL TO -2AAE ; [*0C8E.0020.0002] # EQUALS SIGN WITH BUMPY ABOVE -2AAF ; [*0C8F.0020.0002] # PRECEDES ABOVE SINGLE-LINE EQUALS SIGN -2AB0 ; [*0C90.0020.0002] # SUCCEEDS ABOVE SINGLE-LINE EQUALS SIGN -2AB1 ; [*0C91.0020.0002] # PRECEDES ABOVE SINGLE-LINE NOT EQUAL TO -2AB2 ; [*0C92.0020.0002] # SUCCEEDS ABOVE SINGLE-LINE NOT EQUAL TO -2AB3 ; [*0C93.0020.0002] # PRECEDES ABOVE EQUALS SIGN -2AB4 ; [*0C94.0020.0002] # SUCCEEDS ABOVE EQUALS SIGN -2AB5 ; [*0C95.0020.0002] # PRECEDES ABOVE NOT EQUAL TO -2AB6 ; [*0C96.0020.0002] # SUCCEEDS ABOVE NOT EQUAL TO -2AB7 ; [*0C97.0020.0002] # PRECEDES ABOVE ALMOST EQUAL TO -2AB8 ; [*0C98.0020.0002] # SUCCEEDS ABOVE ALMOST EQUAL TO -2AB9 ; [*0C99.0020.0002] # PRECEDES ABOVE NOT ALMOST EQUAL TO -2ABA ; [*0C9A.0020.0002] # SUCCEEDS ABOVE NOT ALMOST EQUAL TO -2ABB ; [*0C9B.0020.0002] # DOUBLE PRECEDES -2ABC ; [*0C9C.0020.0002] # DOUBLE SUCCEEDS -2ABD ; [*0C9D.0020.0002] # SUBSET WITH DOT -2ABE ; [*0C9E.0020.0002] # SUPERSET WITH DOT -2ABF ; [*0C9F.0020.0002] # SUBSET WITH PLUS SIGN BELOW -2AC0 ; [*0CA0.0020.0002] # SUPERSET WITH PLUS SIGN BELOW -2AC1 ; [*0CA1.0020.0002] # SUBSET WITH MULTIPLICATION SIGN BELOW -2AC2 ; [*0CA2.0020.0002] # SUPERSET WITH MULTIPLICATION SIGN BELOW -2AC3 ; [*0CA3.0020.0002] # SUBSET OF OR EQUAL TO WITH DOT ABOVE -2AC4 ; [*0CA4.0020.0002] # SUPERSET OF OR EQUAL TO WITH DOT ABOVE -2AC5 ; [*0CA5.0020.0002] # SUBSET OF ABOVE EQUALS SIGN -2AC6 ; [*0CA6.0020.0002] # SUPERSET OF ABOVE EQUALS SIGN -2AC7 ; [*0CA7.0020.0002] # SUBSET OF ABOVE TILDE OPERATOR -2AC8 ; [*0CA8.0020.0002] # SUPERSET OF ABOVE TILDE OPERATOR -2AC9 ; [*0CA9.0020.0002] # SUBSET OF ABOVE ALMOST EQUAL TO -2ACA ; [*0CAA.0020.0002] # SUPERSET OF ABOVE ALMOST EQUAL TO -2ACB ; [*0CAB.0020.0002] # SUBSET OF ABOVE NOT EQUAL TO -2ACC ; [*0CAC.0020.0002] # SUPERSET OF ABOVE NOT EQUAL TO -2ACD ; [*0CAD.0020.0002] # SQUARE LEFT OPEN BOX OPERATOR -2ACE ; [*0CAE.0020.0002] # SQUARE RIGHT OPEN BOX OPERATOR -2ACF ; [*0CAF.0020.0002] # CLOSED SUBSET -2AD0 ; [*0CB0.0020.0002] # CLOSED SUPERSET -2AD1 ; [*0CB1.0020.0002] # CLOSED SUBSET OR EQUAL TO -2AD2 ; [*0CB2.0020.0002] # CLOSED SUPERSET OR EQUAL TO -2AD3 ; [*0CB3.0020.0002] # SUBSET ABOVE SUPERSET -2AD4 ; [*0CB4.0020.0002] # SUPERSET ABOVE SUBSET -2AD5 ; [*0CB5.0020.0002] # SUBSET ABOVE SUBSET -2AD6 ; [*0CB6.0020.0002] # SUPERSET ABOVE SUPERSET -2AD7 ; [*0CB7.0020.0002] # SUPERSET BESIDE SUBSET -2AD8 ; [*0CB8.0020.0002] # SUPERSET BESIDE AND JOINED BY DASH WITH SUBSET -2AD9 ; [*0CB9.0020.0002] # ELEMENT OF OPENING DOWNWARDS -2ADA ; [*0CBA.0020.0002] # PITCHFORK WITH TEE TOP -2ADB ; [*0CBB.0020.0002] # TRANSVERSAL INTERSECTION -2ADC ; [*0CBC.0020.0002][.0000.002F.0002] # FORKING -2ADD ; [*0CBC.0020.0002] # NONFORKING -2ADE ; [*0CBD.0020.0002] # SHORT LEFT TACK -2ADF ; [*0CBE.0020.0002] # SHORT DOWN TACK -2AE0 ; [*0CBF.0020.0002] # SHORT UP TACK -2AE1 ; [*0CC0.0020.0002] # PERPENDICULAR WITH S -2AE2 ; [*0CC1.0020.0002] # VERTICAL BAR TRIPLE RIGHT TURNSTILE -2AE3 ; [*0CC2.0020.0002] # DOUBLE VERTICAL BAR LEFT TURNSTILE -2AE4 ; [*0CC3.0020.0002] # VERTICAL BAR DOUBLE LEFT TURNSTILE -2AE5 ; [*0CC4.0020.0002] # DOUBLE VERTICAL BAR DOUBLE LEFT TURNSTILE -2AE6 ; [*0CC5.0020.0002] # LONG DASH FROM LEFT MEMBER OF DOUBLE VERTICAL -2AE7 ; [*0CC6.0020.0002] # SHORT DOWN TACK WITH OVERBAR -2AE8 ; [*0CC7.0020.0002] # SHORT UP TACK WITH UNDERBAR -2AE9 ; [*0CC8.0020.0002] # SHORT UP TACK ABOVE SHORT DOWN TACK -2AEA ; [*0CC9.0020.0002] # DOUBLE DOWN TACK -2AEB ; [*0CCA.0020.0002] # DOUBLE UP TACK -2AEC ; [*0CCB.0020.0002] # DOUBLE STROKE NOT SIGN -2AED ; [*0CCC.0020.0002] # REVERSED DOUBLE STROKE NOT SIGN -2AEE ; [*0CCD.0020.0002] # DOES NOT DIVIDE WITH REVERSED NEGATION SLASH -2AEF ; [*0CCE.0020.0002] # VERTICAL LINE WITH CIRCLE ABOVE -2AF0 ; [*0CCF.0020.0002] # VERTICAL LINE WITH CIRCLE BELOW -2AF1 ; [*0CD0.0020.0002] # DOWN TACK WITH CIRCLE BELOW -2AF2 ; [*0CD1.0020.0002] # PARALLEL WITH HORIZONTAL STROKE -2AF3 ; [*0CD2.0020.0002] # PARALLEL WITH TILDE OPERATOR -2AF4 ; [*0CD3.0020.0002] # TRIPLE VERTICAL BAR BINARY RELATION -2AF5 ; [*0CD4.0020.0002] # TRIPLE VERTICAL BAR WITH HORIZONTAL STROKE -2AF6 ; [*0CD5.0020.0002] # TRIPLE COLON OPERATOR -2AF7 ; [*0CD6.0020.0002] # TRIPLE NESTED LESS-THAN -2AF8 ; [*0CD7.0020.0002] # TRIPLE NESTED GREATER-THAN -2AF9 ; [*0CD8.0020.0002] # DOUBLE-LINE SLANTED LESS-THAN OR EQUAL TO -2AFA ; [*0CD9.0020.0002] # DOUBLE-LINE SLANTED GREATER-THAN OR EQUAL TO -2AFB ; [*0CDA.0020.0002] # TRIPLE SOLIDUS BINARY RELATION -2AFC ; [*0CDB.0020.0002] # LARGE TRIPLE VERTICAL BAR OPERATOR -2AFD ; [*0CDC.0020.0002] # DOUBLE SOLIDUS OPERATOR -2AFE ; [*0CDD.0020.0002] # WHITE VERTICAL BAR -2AFF ; [*0CDE.0020.0002] # N-ARY WHITE VERTICAL BAR -2B00 ; [*0CDF.0020.0002] # NORTH EAST WHITE ARROW -2B01 ; [*0CE0.0020.0002] # NORTH WEST WHITE ARROW -2B02 ; [*0CE1.0020.0002] # SOUTH EAST WHITE ARROW -2B03 ; [*0CE2.0020.0002] # SOUTH WEST WHITE ARROW -2B04 ; [*0CE3.0020.0002] # LEFT RIGHT WHITE ARROW -2B05 ; [*0CE4.0020.0002] # LEFTWARDS BLACK ARROW -2B06 ; [*0CE5.0020.0002] # UPWARDS BLACK ARROW -2B07 ; [*0CE6.0020.0002] # DOWNWARDS BLACK ARROW -2B08 ; [*0CE7.0020.0002] # NORTH EAST BLACK ARROW -2B09 ; [*0CE8.0020.0002] # NORTH WEST BLACK ARROW -2B0A ; [*0CE9.0020.0002] # SOUTH EAST BLACK ARROW -2B0B ; [*0CEA.0020.0002] # SOUTH WEST BLACK ARROW -2B0C ; [*0CEB.0020.0002] # LEFT RIGHT BLACK ARROW -2B0D ; [*0CEC.0020.0002] # UP DOWN BLACK ARROW -2B0E ; [*0CED.0020.0002] # RIGHTWARDS ARROW WITH TIP DOWNWARDS -2B0F ; [*0CEE.0020.0002] # RIGHTWARDS ARROW WITH TIP UPWARDS -2B10 ; [*0CEF.0020.0002] # LEFTWARDS ARROW WITH TIP DOWNWARDS -2B11 ; [*0CF0.0020.0002] # LEFTWARDS ARROW WITH TIP UPWARDS -2B12 ; [*0CF1.0020.0002] # SQUARE WITH TOP HALF BLACK -2B13 ; [*0CF2.0020.0002] # SQUARE WITH BOTTOM HALF BLACK -2B14 ; [*0CF3.0020.0002] # SQUARE WITH UPPER RIGHT DIAGONAL HALF BLACK -2B15 ; [*0CF4.0020.0002] # SQUARE WITH LOWER LEFT DIAGONAL HALF BLACK -2B16 ; [*0CF5.0020.0002] # DIAMOND WITH LEFT HALF BLACK -2B17 ; [*0CF6.0020.0002] # DIAMOND WITH RIGHT HALF BLACK -2B18 ; [*0CF7.0020.0002] # DIAMOND WITH TOP HALF BLACK -2B19 ; [*0CF8.0020.0002] # DIAMOND WITH BOTTOM HALF BLACK -2B1A ; [*0CF9.0020.0002] # DOTTED SQUARE -2B1B ; [*0CFA.0020.0002] # BLACK LARGE SQUARE -2B1C ; [*0CFB.0020.0002] # WHITE LARGE SQUARE -2B1D ; [*0CFC.0020.0002] # BLACK VERY SMALL SQUARE -2B1E ; [*0CFD.0020.0002] # WHITE VERY SMALL SQUARE -2B1F ; [*0CFE.0020.0002] # BLACK PENTAGON -2B20 ; [*0CFF.0020.0002] # WHITE PENTAGON -2B21 ; [*0D00.0020.0002] # WHITE HEXAGON -2B22 ; [*0D01.0020.0002] # BLACK HEXAGON -2B23 ; [*0D02.0020.0002] # HORIZONTAL BLACK HEXAGON -2B24 ; [*0D03.0020.0002] # BLACK LARGE CIRCLE -2B25 ; [*0D04.0020.0002] # BLACK MEDIUM DIAMOND -2B26 ; [*0D05.0020.0002] # WHITE MEDIUM DIAMOND -2B27 ; [*0D06.0020.0002] # BLACK MEDIUM LOZENGE -2B28 ; [*0D07.0020.0002] # WHITE MEDIUM LOZENGE -2B29 ; [*0D08.0020.0002] # BLACK SMALL DIAMOND -2B2A ; [*0D09.0020.0002] # BLACK SMALL LOZENGE -2B2B ; [*0D0A.0020.0002] # WHITE SMALL LOZENGE -2B2C ; [*0D0B.0020.0002] # BLACK HORIZONTAL ELLIPSE -2B2D ; [*0D0C.0020.0002] # WHITE HORIZONTAL ELLIPSE -2B2E ; [*0D0D.0020.0002] # BLACK VERTICAL ELLIPSE -2B2F ; [*0D0E.0020.0002] # WHITE VERTICAL ELLIPSE -2B30 ; [*0D0F.0020.0002] # LEFT ARROW WITH SMALL CIRCLE -2B31 ; [*0D10.0020.0002] # THREE LEFTWARDS ARROWS -2B32 ; [*0D11.0020.0002] # LEFT ARROW WITH CIRCLED PLUS -2B33 ; [*0D12.0020.0002] # LONG LEFTWARDS SQUIGGLE ARROW -2B34 ; [*0D13.0020.0002] # LEFTWARDS TWO-HEADED ARROW WITH VERTICAL STROKE -2B35 ; [*0D14.0020.0002] # LEFTWARDS TWO-HEADED ARROW WITH DOUBLE VERTICAL STROKE -2B36 ; [*0D15.0020.0002] # LEFTWARDS TWO-HEADED ARROW FROM BAR -2B37 ; [*0D16.0020.0002] # LEFTWARDS TWO-HEADED TRIPLE DASH ARROW -2B38 ; [*0D17.0020.0002] # LEFTWARDS ARROW WITH DOTTED STEM -2B39 ; [*0D18.0020.0002] # LEFTWARDS ARROW WITH TAIL WITH VERTICAL STROKE -2B3A ; [*0D19.0020.0002] # LEFTWARDS ARROW WITH TAIL WITH DOUBLE VERTICAL STROKE -2B3B ; [*0D1A.0020.0002] # LEFTWARDS TWO-HEADED ARROW WITH TAIL -2B3C ; [*0D1B.0020.0002] # LEFTWARDS TWO-HEADED ARROW WITH TAIL WITH VERTICAL STROKE -2B3D ; [*0D1C.0020.0002] # LEFTWARDS TWO-HEADED ARROW WITH TAIL WITH DOUBLE VERTICAL STROKE -2B3E ; [*0D1D.0020.0002] # LEFTWARDS ARROW THROUGH X -2B3F ; [*0D1E.0020.0002] # WAVE ARROW POINTING DIRECTLY LEFT -2B40 ; [*0D1F.0020.0002] # EQUALS SIGN ABOVE LEFTWARDS ARROW -2B41 ; [*0D20.0020.0002] # REVERSE TILDE OPERATOR ABOVE LEFTWARDS ARROW -2B42 ; [*0D21.0020.0002] # LEFTWARDS ARROW ABOVE REVERSE ALMOST EQUAL TO -2B43 ; [*0D22.0020.0002] # RIGHTWARDS ARROW THROUGH GREATER-THAN -2B44 ; [*0D23.0020.0002] # RIGHTWARDS ARROW THROUGH SUPERSET -2B45 ; [*0D24.0020.0002] # LEFTWARDS QUADRUPLE ARROW -2B46 ; [*0D25.0020.0002] # RIGHTWARDS QUADRUPLE ARROW -2B47 ; [*0D26.0020.0002] # REVERSE TILDE OPERATOR ABOVE RIGHTWARDS ARROW -2B48 ; [*0D27.0020.0002] # RIGHTWARDS ARROW ABOVE REVERSE ALMOST EQUAL TO -2B49 ; [*0D28.0020.0002] # TILDE OPERATOR ABOVE LEFTWARDS ARROW -2B4A ; [*0D29.0020.0002] # LEFTWARDS ARROW ABOVE ALMOST EQUAL TO -2B4B ; [*0D2A.0020.0002] # LEFTWARDS ARROW ABOVE REVERSE TILDE OPERATOR -2B4C ; [*0D2B.0020.0002] # RIGHTWARDS ARROW ABOVE REVERSE TILDE OPERATOR -2B4D ; [*0D2C.0020.0002] # DOWNWARDS TRIANGLE-HEADED ZIGZAG ARROW -2B4E ; [*0D2D.0020.0002] # SHORT SLANTED NORTH ARROW -2B4F ; [*0D2E.0020.0002] # SHORT BACKSLANTED SOUTH ARROW -2B50 ; [*0D2F.0020.0002] # WHITE MEDIUM STAR -2B51 ; [*0D30.0020.0002] # BLACK SMALL STAR -2B52 ; [*0D31.0020.0002] # WHITE SMALL STAR -2B53 ; [*0D32.0020.0002] # BLACK RIGHT-POINTING PENTAGON -2B54 ; [*0D33.0020.0002] # WHITE RIGHT-POINTING PENTAGON -2B55 ; [*0D34.0020.0002] # HEAVY LARGE CIRCLE -2B56 ; [*0D35.0020.0002] # HEAVY OVAL WITH OVAL INSIDE -2B57 ; [*0D36.0020.0002] # HEAVY CIRCLE WITH CIRCLE INSIDE -2B58 ; [*0D37.0020.0002] # HEAVY CIRCLE -2B59 ; [*0D38.0020.0002] # HEAVY CIRCLED SALTIRE -2B5A ; [*0D39.0020.0002] # SLANTED NORTH ARROW WITH HOOKED HEAD -2B5B ; [*0D3A.0020.0002] # BACKSLANTED SOUTH ARROW WITH HOOKED TAIL -2B5C ; [*0D3B.0020.0002] # SLANTED NORTH ARROW WITH HORIZONTAL TAIL -2B5D ; [*0D3C.0020.0002] # BACKSLANTED SOUTH ARROW WITH HORIZONTAL TAIL -2B5E ; [*0D3D.0020.0002] # BENT ARROW POINTING DOWNWARDS THEN NORTH EAST -2B5F ; [*0D3E.0020.0002] # SHORT BENT ARROW POINTING DOWNWARDS THEN NORTH EAST -2B60 ; [*0D3F.0020.0002] # LEFTWARDS TRIANGLE-HEADED ARROW -2B61 ; [*0D40.0020.0002] # UPWARDS TRIANGLE-HEADED ARROW -2B62 ; [*0D41.0020.0002] # RIGHTWARDS TRIANGLE-HEADED ARROW -2B63 ; [*0D42.0020.0002] # DOWNWARDS TRIANGLE-HEADED ARROW -2B64 ; [*0D43.0020.0002] # LEFT RIGHT TRIANGLE-HEADED ARROW -2B65 ; [*0D44.0020.0002] # UP DOWN TRIANGLE-HEADED ARROW -2B66 ; [*0D45.0020.0002] # NORTH WEST TRIANGLE-HEADED ARROW -2B67 ; [*0D46.0020.0002] # NORTH EAST TRIANGLE-HEADED ARROW -2B68 ; [*0D47.0020.0002] # SOUTH EAST TRIANGLE-HEADED ARROW -2B69 ; [*0D48.0020.0002] # SOUTH WEST TRIANGLE-HEADED ARROW -2B6A ; [*0D49.0020.0002] # LEFTWARDS TRIANGLE-HEADED DASHED ARROW -2B6B ; [*0D4A.0020.0002] # UPWARDS TRIANGLE-HEADED DASHED ARROW -2B6C ; [*0D4B.0020.0002] # RIGHTWARDS TRIANGLE-HEADED DASHED ARROW -2B6D ; [*0D4C.0020.0002] # DOWNWARDS TRIANGLE-HEADED DASHED ARROW -2B6E ; [*0D4D.0020.0002] # CLOCKWISE TRIANGLE-HEADED OPEN CIRCLE ARROW -2B6F ; [*0D4E.0020.0002] # ANTICLOCKWISE TRIANGLE-HEADED OPEN CIRCLE ARROW -2B70 ; [*0D4F.0020.0002] # LEFTWARDS TRIANGLE-HEADED ARROW TO BAR -2B71 ; [*0D50.0020.0002] # UPWARDS TRIANGLE-HEADED ARROW TO BAR -2B72 ; [*0D51.0020.0002] # RIGHTWARDS TRIANGLE-HEADED ARROW TO BAR -2B73 ; [*0D52.0020.0002] # DOWNWARDS TRIANGLE-HEADED ARROW TO BAR -2B76 ; [*0D53.0020.0002] # NORTH WEST TRIANGLE-HEADED ARROW TO BAR -2B77 ; [*0D54.0020.0002] # NORTH EAST TRIANGLE-HEADED ARROW TO BAR -2B78 ; [*0D55.0020.0002] # SOUTH EAST TRIANGLE-HEADED ARROW TO BAR -2B79 ; [*0D56.0020.0002] # SOUTH WEST TRIANGLE-HEADED ARROW TO BAR -2B7A ; [*0D57.0020.0002] # LEFTWARDS TRIANGLE-HEADED ARROW WITH DOUBLE HORIZONTAL STROKE -2B7B ; [*0D58.0020.0002] # UPWARDS TRIANGLE-HEADED ARROW WITH DOUBLE HORIZONTAL STROKE -2B7C ; [*0D59.0020.0002] # RIGHTWARDS TRIANGLE-HEADED ARROW WITH DOUBLE HORIZONTAL STROKE -2B7D ; [*0D5A.0020.0002] # DOWNWARDS TRIANGLE-HEADED ARROW WITH DOUBLE HORIZONTAL STROKE -2B7E ; [*0D5B.0020.0002] # HORIZONTAL TAB KEY -2B7F ; [*0D5C.0020.0002] # VERTICAL TAB KEY -2B80 ; [*0D5D.0020.0002] # LEFTWARDS TRIANGLE-HEADED ARROW OVER RIGHTWARDS TRIANGLE-HEADED ARROW -2B81 ; [*0D5E.0020.0002] # UPWARDS TRIANGLE-HEADED ARROW LEFTWARDS OF DOWNWARDS TRIANGLE-HEADED ARROW -2B82 ; [*0D5F.0020.0002] # RIGHTWARDS TRIANGLE-HEADED ARROW OVER LEFTWARDS TRIANGLE-HEADED ARROW -2B83 ; [*0D60.0020.0002] # DOWNWARDS TRIANGLE-HEADED ARROW LEFTWARDS OF UPWARDS TRIANGLE-HEADED ARROW -2B84 ; [*0D61.0020.0002] # LEFTWARDS TRIANGLE-HEADED PAIRED ARROWS -2B85 ; [*0D62.0020.0002] # UPWARDS TRIANGLE-HEADED PAIRED ARROWS -2B86 ; [*0D63.0020.0002] # RIGHTWARDS TRIANGLE-HEADED PAIRED ARROWS -2B87 ; [*0D64.0020.0002] # DOWNWARDS TRIANGLE-HEADED PAIRED ARROWS -2B88 ; [*0D65.0020.0002] # LEFTWARDS BLACK CIRCLED WHITE ARROW -2B89 ; [*0D66.0020.0002] # UPWARDS BLACK CIRCLED WHITE ARROW -2B8A ; [*0D67.0020.0002] # RIGHTWARDS BLACK CIRCLED WHITE ARROW -2B8B ; [*0D68.0020.0002] # DOWNWARDS BLACK CIRCLED WHITE ARROW -2B8C ; [*0D69.0020.0002] # ANTICLOCKWISE TRIANGLE-HEADED RIGHT U-SHAPED ARROW -2B8D ; [*0D6A.0020.0002] # ANTICLOCKWISE TRIANGLE-HEADED BOTTOM U-SHAPED ARROW -2B8E ; [*0D6B.0020.0002] # ANTICLOCKWISE TRIANGLE-HEADED LEFT U-SHAPED ARROW -2B8F ; [*0D6C.0020.0002] # ANTICLOCKWISE TRIANGLE-HEADED TOP U-SHAPED ARROW -2B90 ; [*0D6D.0020.0002] # RETURN LEFT -2B91 ; [*0D6E.0020.0002] # RETURN RIGHT -2B92 ; [*0D6F.0020.0002] # NEWLINE LEFT -2B93 ; [*0D70.0020.0002] # NEWLINE RIGHT -2B94 ; [*0D71.0020.0002] # FOUR CORNER ARROWS CIRCLING ANTICLOCKWISE -2B95 ; [*0D72.0020.0002] # RIGHTWARDS BLACK ARROW -2B98 ; [*0D73.0020.0002] # THREE-D TOP-LIGHTED LEFTWARDS EQUILATERAL ARROWHEAD -2B99 ; [*0D74.0020.0002] # THREE-D RIGHT-LIGHTED UPWARDS EQUILATERAL ARROWHEAD -2B9A ; [*0D75.0020.0002] # THREE-D TOP-LIGHTED RIGHTWARDS EQUILATERAL ARROWHEAD -2B9B ; [*0D76.0020.0002] # THREE-D LEFT-LIGHTED DOWNWARDS EQUILATERAL ARROWHEAD -2B9C ; [*0D77.0020.0002] # BLACK LEFTWARDS EQUILATERAL ARROWHEAD -2B9D ; [*0D78.0020.0002] # BLACK UPWARDS EQUILATERAL ARROWHEAD -2B9E ; [*0D79.0020.0002] # BLACK RIGHTWARDS EQUILATERAL ARROWHEAD -2B9F ; [*0D7A.0020.0002] # BLACK DOWNWARDS EQUILATERAL ARROWHEAD -2BA0 ; [*0D7B.0020.0002] # DOWNWARDS TRIANGLE-HEADED ARROW WITH LONG TIP LEFTWARDS -2BA1 ; [*0D7C.0020.0002] # DOWNWARDS TRIANGLE-HEADED ARROW WITH LONG TIP RIGHTWARDS -2BA2 ; [*0D7D.0020.0002] # UPWARDS TRIANGLE-HEADED ARROW WITH LONG TIP LEFTWARDS -2BA3 ; [*0D7E.0020.0002] # UPWARDS TRIANGLE-HEADED ARROW WITH LONG TIP RIGHTWARDS -2BA4 ; [*0D7F.0020.0002] # LEFTWARDS TRIANGLE-HEADED ARROW WITH LONG TIP UPWARDS -2BA5 ; [*0D80.0020.0002] # RIGHTWARDS TRIANGLE-HEADED ARROW WITH LONG TIP UPWARDS -2BA6 ; [*0D81.0020.0002] # LEFTWARDS TRIANGLE-HEADED ARROW WITH LONG TIP DOWNWARDS -2BA7 ; [*0D82.0020.0002] # RIGHTWARDS TRIANGLE-HEADED ARROW WITH LONG TIP DOWNWARDS -2BA8 ; [*0D83.0020.0002] # BLACK CURVED DOWNWARDS AND LEFTWARDS ARROW -2BA9 ; [*0D84.0020.0002] # BLACK CURVED DOWNWARDS AND RIGHTWARDS ARROW -2BAA ; [*0D85.0020.0002] # BLACK CURVED UPWARDS AND LEFTWARDS ARROW -2BAB ; [*0D86.0020.0002] # BLACK CURVED UPWARDS AND RIGHTWARDS ARROW -2BAC ; [*0D87.0020.0002] # BLACK CURVED LEFTWARDS AND UPWARDS ARROW -2BAD ; [*0D88.0020.0002] # BLACK CURVED RIGHTWARDS AND UPWARDS ARROW -2BAE ; [*0D89.0020.0002] # BLACK CURVED LEFTWARDS AND DOWNWARDS ARROW -2BAF ; [*0D8A.0020.0002] # BLACK CURVED RIGHTWARDS AND DOWNWARDS ARROW -2BB0 ; [*0D8B.0020.0002] # RIBBON ARROW DOWN LEFT -2BB1 ; [*0D8C.0020.0002] # RIBBON ARROW DOWN RIGHT -2BB2 ; [*0D8D.0020.0002] # RIBBON ARROW UP LEFT -2BB3 ; [*0D8E.0020.0002] # RIBBON ARROW UP RIGHT -2BB4 ; [*0D8F.0020.0002] # RIBBON ARROW LEFT UP -2BB5 ; [*0D90.0020.0002] # RIBBON ARROW RIGHT UP -2BB6 ; [*0D91.0020.0002] # RIBBON ARROW LEFT DOWN -2BB7 ; [*0D92.0020.0002] # RIBBON ARROW RIGHT DOWN -2BB8 ; [*0D93.0020.0002] # UPWARDS WHITE ARROW FROM BAR WITH HORIZONTAL BAR -2BB9 ; [*0D94.0020.0002] # UP ARROWHEAD IN A RECTANGLE BOX -2BBD ; [*0D95.0020.0002] # BALLOT BOX WITH LIGHT X -2BBE ; [*0D96.0020.0002] # CIRCLED X -2BBF ; [*0D97.0020.0002] # CIRCLED BOLD X -2BC0 ; [*0D98.0020.0002] # BLACK SQUARE CENTRED -2BC1 ; [*0D99.0020.0002] # BLACK DIAMOND CENTRED -2BC2 ; [*0D9A.0020.0002] # TURNED BLACK PENTAGON -2BC3 ; [*0D9B.0020.0002] # HORIZONTAL BLACK OCTAGON -2BC4 ; [*0D9C.0020.0002] # BLACK OCTAGON -2BC5 ; [*0D9D.0020.0002] # BLACK MEDIUM UP-POINTING TRIANGLE CENTRED -2BC6 ; [*0D9E.0020.0002] # BLACK MEDIUM DOWN-POINTING TRIANGLE CENTRED -2BC7 ; [*0D9F.0020.0002] # BLACK MEDIUM LEFT-POINTING TRIANGLE CENTRED -2BC8 ; [*0DA0.0020.0002] # BLACK MEDIUM RIGHT-POINTING TRIANGLE CENTRED -2BCA ; [*0DA1.0020.0002] # TOP HALF BLACK CIRCLE -2BCB ; [*0DA2.0020.0002] # BOTTOM HALF BLACK CIRCLE -2BCC ; [*0DA3.0020.0002] # LIGHT FOUR POINTED BLACK CUSP -2BCD ; [*0DA4.0020.0002] # ROTATED LIGHT FOUR POINTED BLACK CUSP -2BCE ; [*0DA5.0020.0002] # WHITE FOUR POINTED CUSP -2BCF ; [*0DA6.0020.0002] # ROTATED WHITE FOUR POINTED CUSP -2BD0 ; [*0DA7.0020.0002] # SQUARE POSITION INDICATOR -2BD1 ; [*0DA8.0020.0002] # UNCERTAINTY SIGN -2BD2 ; [*0DA9.0020.0002] # GROUP MARK -2BEC ; [*0DAA.0020.0002] # LEFTWARDS TWO-HEADED ARROW WITH TRIANGLE ARROWHEADS -2BED ; [*0DAB.0020.0002] # UPWARDS TWO-HEADED ARROW WITH TRIANGLE ARROWHEADS -2BEE ; [*0DAC.0020.0002] # RIGHTWARDS TWO-HEADED ARROW WITH TRIANGLE ARROWHEADS -2BEF ; [*0DAD.0020.0002] # DOWNWARDS TWO-HEADED ARROW WITH TRIANGLE ARROWHEADS -2CE5 ; [*0DAE.0020.0002] # COPTIC SYMBOL MI RO -2CE6 ; [*0DAF.0020.0002] # COPTIC SYMBOL PI RO -2CE7 ; [*0DB0.0020.0002] # COPTIC SYMBOL STAUROS -2CE8 ; [*0DB1.0020.0002] # COPTIC SYMBOL TAU RO -2CE9 ; [*0DB2.0020.0002] # COPTIC SYMBOL KHI RO -2CEA ; [*0DB3.0020.0002] # COPTIC SYMBOL SHIMA SIMA -2CF9 ; [*0282.0020.0002] # COPTIC OLD NUBIAN FULL STOP -2CFA ; [*026F.0020.0002] # COPTIC OLD NUBIAN DIRECT QUESTION MARK -2CFB ; [*0270.0020.0002] # COPTIC OLD NUBIAN INDIRECT QUESTION MARK -2CFC ; [*02F7.0020.0002] # COPTIC OLD NUBIAN VERSE DIVIDER -2CFD ; [*1B46.0020.0002] # COPTIC FRACTION ONE HALF -2CFE ; [*0283.0020.0002] # COPTIC FULL STOP -2CFF ; [*02F8.0020.0002] # COPTIC MORPHOLOGICAL DIVIDER -2D70 ; [*043D.0020.0002] # TIFINAGH SEPARATOR MARK +207A ; [*0666.0020.0014] # SUPERSCRIPT PLUS SIGN +207B ; [*0671.0020.0014] # SUPERSCRIPT MINUS +207C ; [*066B.0020.0014] # SUPERSCRIPT EQUALS SIGN +207D ; [*0328.0020.0014] # SUPERSCRIPT LEFT PARENTHESIS +207E ; [*0329.0020.0014] # SUPERSCRIPT RIGHT PARENTHESIS +208A ; [*0666.0020.0015] # SUBSCRIPT PLUS SIGN +208B ; [*0671.0020.0015] # SUBSCRIPT MINUS +208C ; [*066B.0020.0015] # SUBSCRIPT EQUALS SIGN +208D ; [*0328.0020.0015] # SUBSCRIPT LEFT PARENTHESIS +208E ; [*0329.0020.0015] # SUBSCRIPT RIGHT PARENTHESIS +2104 ; [*05D6.0020.0002] # CENTRE LINE SYMBOL +2108 ; [*05D7.0020.0002] # SCRUPLE +2114 ; [*05D8.0020.0002] # L B BAR SYMBOL +2117 ; [*05D9.0020.0002] # SOUND RECORDING COPYRIGHT +2118 ; [*05DA.0020.0002] # SCRIPT CAPITAL P +211E ; [*05DB.0020.0002] # PRESCRIPTION TAKE +211F ; [*05DC.0020.0002] # RESPONSE +2123 ; [*05DD.0020.0002] # VERSICLE +2125 ; [*05DE.0020.0002] # OUNCE SIGN +2127 ; [*05DF.0020.0002] # INVERTED OHM SIGN +2129 ; [*05E0.0020.0002] # TURNED GREEK SMALL LETTER IOTA +212E ; [*05E1.0020.0002] # ESTIMATED SYMBOL +213A ; [*05E2.0020.0002] # ROTATED CAPITAL Q +2140 ; [*0665.0020.0005] # DOUBLE-STRUCK N-ARY SUMMATION +2141 ; [*05E3.0020.0002] # TURNED SANS-SERIF CAPITAL G +2142 ; [*05E4.0020.0002] # TURNED SANS-SERIF CAPITAL L +2143 ; [*05E5.0020.0002] # REVERSED SANS-SERIF CAPITAL L +2144 ; [*05E6.0020.0002] # TURNED SANS-SERIF CAPITAL Y +214A ; [*05E7.0020.0002] # PROPERTY LINE +214B ; [*0701.0020.0002] # TURNED AMPERSAND +214C ; [*05E8.0020.0002] # PER SIGN +214F ; [*05E9.0020.0002] # SYMBOL FOR SAMARITAN SOURCE +2180 ; [*1D9B.0020.0002] # ROMAN NUMERAL ONE THOUSAND C D +2181 ; [*1D9C.0020.0002] # ROMAN NUMERAL FIVE THOUSAND +2182 ; [*1D9D.0020.0002] # ROMAN NUMERAL TEN THOUSAND +2186 ; [*1D9E.0020.0002] # ROMAN NUMERAL FIFTY EARLY FORM +2187 ; [*1D9F.0020.0002] # ROMAN NUMERAL FIFTY THOUSAND +2188 ; [*1DA0.0020.0002] # ROMAN NUMERAL ONE HUNDRED THOUSAND +218A ; [*05EA.0020.0002] # TURNED DIGIT TWO +218B ; [*05EB.0020.0002] # TURNED DIGIT THREE +2190 ; [*05EC.0020.0002] # LEFTWARDS ARROW +2191 ; [*05EE.0020.0002] # UPWARDS ARROW +2192 ; [*05ED.0020.0002] # RIGHTWARDS ARROW +2193 ; [*05EF.0020.0002] # DOWNWARDS ARROW +2194 ; [*05F0.0020.0002] # LEFT RIGHT ARROW +2195 ; [*05F1.0020.0002] # UP DOWN ARROW +2196 ; [*05F2.0020.0002] # NORTH WEST ARROW +2197 ; [*05F3.0020.0002] # NORTH EAST ARROW +2198 ; [*05F4.0020.0002] # SOUTH EAST ARROW +2199 ; [*05F5.0020.0002] # SOUTH WEST ARROW +219A ; [*05EC.0020.0002][.0000.002F.0002] # LEFTWARDS ARROW WITH STROKE +219B ; [*05ED.0020.0002][.0000.002F.0002] # RIGHTWARDS ARROW WITH STROKE +219C ; [*05F6.0020.0002] # LEFTWARDS WAVE ARROW +219D ; [*05F7.0020.0002] # RIGHTWARDS WAVE ARROW +219E ; [*05F8.0020.0002] # LEFTWARDS TWO HEADED ARROW +219F ; [*05F9.0020.0002] # UPWARDS TWO HEADED ARROW +21A0 ; [*05FA.0020.0002] # RIGHTWARDS TWO HEADED ARROW +21A1 ; [*05FB.0020.0002] # DOWNWARDS TWO HEADED ARROW +21A2 ; [*05FC.0020.0002] # LEFTWARDS ARROW WITH TAIL +21A3 ; [*05FD.0020.0002] # RIGHTWARDS ARROW WITH TAIL +21A4 ; [*05FE.0020.0002] # LEFTWARDS ARROW FROM BAR +21A5 ; [*05FF.0020.0002] # UPWARDS ARROW FROM BAR +21A6 ; [*0600.0020.0002] # RIGHTWARDS ARROW FROM BAR +21A7 ; [*0601.0020.0002] # DOWNWARDS ARROW FROM BAR +21A8 ; [*0602.0020.0002] # UP DOWN ARROW WITH BASE +21A9 ; [*0603.0020.0002] # LEFTWARDS ARROW WITH HOOK +21AA ; [*0604.0020.0002] # RIGHTWARDS ARROW WITH HOOK +21AB ; [*0605.0020.0002] # LEFTWARDS ARROW WITH LOOP +21AC ; [*0606.0020.0002] # RIGHTWARDS ARROW WITH LOOP +21AD ; [*0607.0020.0002] # LEFT RIGHT WAVE ARROW +21AE ; [*05F0.0020.0002][.0000.002F.0002] # LEFT RIGHT ARROW WITH STROKE +21AF ; [*0608.0020.0002] # DOWNWARDS ZIGZAG ARROW +21B0 ; [*0609.0020.0002] # UPWARDS ARROW WITH TIP LEFTWARDS +21B1 ; [*060A.0020.0002] # UPWARDS ARROW WITH TIP RIGHTWARDS +21B2 ; [*060B.0020.0002] # DOWNWARDS ARROW WITH TIP LEFTWARDS +21B3 ; [*060C.0020.0002] # DOWNWARDS ARROW WITH TIP RIGHTWARDS +21B4 ; [*060D.0020.0002] # RIGHTWARDS ARROW WITH CORNER DOWNWARDS +21B5 ; [*060E.0020.0002] # DOWNWARDS ARROW WITH CORNER LEFTWARDS +21B6 ; [*060F.0020.0002] # ANTICLOCKWISE TOP SEMICIRCLE ARROW +21B7 ; [*0610.0020.0002] # CLOCKWISE TOP SEMICIRCLE ARROW +21B8 ; [*0611.0020.0002] # NORTH WEST ARROW TO LONG BAR +21B9 ; [*0612.0020.0002] # LEFTWARDS ARROW TO BAR OVER RIGHTWARDS ARROW TO BAR +21BA ; [*0613.0020.0002] # ANTICLOCKWISE OPEN CIRCLE ARROW +21BB ; [*0614.0020.0002] # CLOCKWISE OPEN CIRCLE ARROW +21BC ; [*0615.0020.0002] # LEFTWARDS HARPOON WITH BARB UPWARDS +21BD ; [*0616.0020.0002] # LEFTWARDS HARPOON WITH BARB DOWNWARDS +21BE ; [*0617.0020.0002] # UPWARDS HARPOON WITH BARB RIGHTWARDS +21BF ; [*0618.0020.0002] # UPWARDS HARPOON WITH BARB LEFTWARDS +21C0 ; [*0619.0020.0002] # RIGHTWARDS HARPOON WITH BARB UPWARDS +21C1 ; [*061A.0020.0002] # RIGHTWARDS HARPOON WITH BARB DOWNWARDS +21C2 ; [*061B.0020.0002] # DOWNWARDS HARPOON WITH BARB RIGHTWARDS +21C3 ; [*061C.0020.0002] # DOWNWARDS HARPOON WITH BARB LEFTWARDS +21C4 ; [*061D.0020.0002] # RIGHTWARDS ARROW OVER LEFTWARDS ARROW +21C5 ; [*061E.0020.0002] # UPWARDS ARROW LEFTWARDS OF DOWNWARDS ARROW +21C6 ; [*061F.0020.0002] # LEFTWARDS ARROW OVER RIGHTWARDS ARROW +21C7 ; [*0620.0020.0002] # LEFTWARDS PAIRED ARROWS +21C8 ; [*0621.0020.0002] # UPWARDS PAIRED ARROWS +21C9 ; [*0622.0020.0002] # RIGHTWARDS PAIRED ARROWS +21CA ; [*0623.0020.0002] # DOWNWARDS PAIRED ARROWS +21CB ; [*0624.0020.0002] # LEFTWARDS HARPOON OVER RIGHTWARDS HARPOON +21CC ; [*0625.0020.0002] # RIGHTWARDS HARPOON OVER LEFTWARDS HARPOON +21CD ; [*0626.0020.0002][.0000.002F.0002] # LEFTWARDS DOUBLE ARROW WITH STROKE +21CE ; [*062A.0020.0002][.0000.002F.0002] # LEFT RIGHT DOUBLE ARROW WITH STROKE +21CF ; [*0628.0020.0002][.0000.002F.0002] # RIGHTWARDS DOUBLE ARROW WITH STROKE +21D0 ; [*0626.0020.0002] # LEFTWARDS DOUBLE ARROW +21D1 ; [*0627.0020.0002] # UPWARDS DOUBLE ARROW +21D2 ; [*0628.0020.0002] # RIGHTWARDS DOUBLE ARROW +21D3 ; [*0629.0020.0002] # DOWNWARDS DOUBLE ARROW +21D4 ; [*062A.0020.0002] # LEFT RIGHT DOUBLE ARROW +21D5 ; [*062B.0020.0002] # UP DOWN DOUBLE ARROW +21D6 ; [*062C.0020.0002] # NORTH WEST DOUBLE ARROW +21D7 ; [*062D.0020.0002] # NORTH EAST DOUBLE ARROW +21D8 ; [*062E.0020.0002] # SOUTH EAST DOUBLE ARROW +21D9 ; [*062F.0020.0002] # SOUTH WEST DOUBLE ARROW +21DA ; [*0630.0020.0002] # LEFTWARDS TRIPLE ARROW +21DB ; [*0631.0020.0002] # RIGHTWARDS TRIPLE ARROW +21DC ; [*0632.0020.0002] # LEFTWARDS SQUIGGLE ARROW +21DD ; [*0633.0020.0002] # RIGHTWARDS SQUIGGLE ARROW +21DE ; [*0634.0020.0002] # UPWARDS ARROW WITH DOUBLE STROKE +21DF ; [*0635.0020.0002] # DOWNWARDS ARROW WITH DOUBLE STROKE +21E0 ; [*0636.0020.0002] # LEFTWARDS DASHED ARROW +21E1 ; [*0637.0020.0002] # UPWARDS DASHED ARROW +21E2 ; [*0638.0020.0002] # RIGHTWARDS DASHED ARROW +21E3 ; [*0639.0020.0002] # DOWNWARDS DASHED ARROW +21E4 ; [*063A.0020.0002] # LEFTWARDS ARROW TO BAR +21E5 ; [*063B.0020.0002] # RIGHTWARDS ARROW TO BAR +21E6 ; [*063C.0020.0002] # LEFTWARDS WHITE ARROW +21E7 ; [*063D.0020.0002] # UPWARDS WHITE ARROW +21E8 ; [*063E.0020.0002] # RIGHTWARDS WHITE ARROW +21E9 ; [*063F.0020.0002] # DOWNWARDS WHITE ARROW +21EA ; [*0640.0020.0002] # UPWARDS WHITE ARROW FROM BAR +21EB ; [*0641.0020.0002] # UPWARDS WHITE ARROW ON PEDESTAL +21EC ; [*0642.0020.0002] # UPWARDS WHITE ARROW ON PEDESTAL WITH HORIZONTAL BAR +21ED ; [*0643.0020.0002] # UPWARDS WHITE ARROW ON PEDESTAL WITH VERTICAL BAR +21EE ; [*0644.0020.0002] # UPWARDS WHITE DOUBLE ARROW +21EF ; [*0645.0020.0002] # UPWARDS WHITE DOUBLE ARROW ON PEDESTAL +21F0 ; [*0646.0020.0002] # RIGHTWARDS WHITE ARROW FROM WALL +21F1 ; [*0647.0020.0002] # NORTH WEST ARROW TO CORNER +21F2 ; [*0648.0020.0002] # SOUTH EAST ARROW TO CORNER +21F3 ; [*0649.0020.0002] # UP DOWN WHITE ARROW +21F4 ; [*064A.0020.0002] # RIGHT ARROW WITH SMALL CIRCLE +21F5 ; [*064B.0020.0002] # DOWNWARDS ARROW LEFTWARDS OF UPWARDS ARROW +21F6 ; [*064C.0020.0002] # THREE RIGHTWARDS ARROWS +21F7 ; [*064D.0020.0002] # LEFTWARDS ARROW WITH VERTICAL STROKE +21F8 ; [*064E.0020.0002] # RIGHTWARDS ARROW WITH VERTICAL STROKE +21F9 ; [*064F.0020.0002] # LEFT RIGHT ARROW WITH VERTICAL STROKE +21FA ; [*0650.0020.0002] # LEFTWARDS ARROW WITH DOUBLE VERTICAL STROKE +21FB ; [*0651.0020.0002] # RIGHTWARDS ARROW WITH DOUBLE VERTICAL STROKE +21FC ; [*0652.0020.0002] # LEFT RIGHT ARROW WITH DOUBLE VERTICAL STROKE +21FD ; [*0653.0020.0002] # LEFTWARDS OPEN-HEADED ARROW +21FE ; [*0654.0020.0002] # RIGHTWARDS OPEN-HEADED ARROW +21FF ; [*0655.0020.0002] # LEFT RIGHT OPEN-HEADED ARROW +2200 ; [*0656.0020.0002] # FOR ALL +2201 ; [*0657.0020.0002] # COMPLEMENT +2202 ; [*0658.0020.0002] # PARTIAL DIFFERENTIAL +2203 ; [*0659.0020.0002] # THERE EXISTS +2204 ; [*0659.0020.0002][.0000.002F.0002] # THERE DOES NOT EXIST +2205 ; [*065A.0020.0002] # EMPTY SET +2206 ; [*065B.0020.0002] # INCREMENT +2207 ; [*065C.0020.0002] # NABLA +2208 ; [*065D.0020.0002] # ELEMENT OF +2209 ; [*065D.0020.0002][.0000.002F.0002] # NOT AN ELEMENT OF +220A ; [*065E.0020.0002] # SMALL ELEMENT OF +220B ; [*065F.0020.0002] # CONTAINS AS MEMBER +220C ; [*065F.0020.0002][.0000.002F.0002] # DOES NOT CONTAIN AS MEMBER +220D ; [*0660.0020.0002] # SMALL CONTAINS AS MEMBER +220E ; [*0662.0020.0002] # END OF PROOF +220F ; [*0663.0020.0002] # N-ARY PRODUCT +2210 ; [*0664.0020.0002] # N-ARY COPRODUCT +2211 ; [*0665.0020.0002] # N-ARY SUMMATION +2212 ; [*0671.0020.0002] # MINUS SIGN +2213 ; [*0673.0020.0002] # MINUS-OR-PLUS SIGN +2214 ; [*0674.0020.0002] # DOT PLUS +2215 ; [*0675.0020.0002] # DIVISION SLASH +2216 ; [*0677.0020.0002] # SET MINUS +2217 ; [*0678.0020.0002] # ASTERISK OPERATOR +2218 ; [*0679.0020.0002] # RING OPERATOR +2219 ; [*067A.0020.0002] # BULLET OPERATOR +221A ; [*067B.0020.0002] # SQUARE ROOT +221B ; [*067C.0020.0002] # CUBE ROOT +221C ; [*067E.0020.0002] # FOURTH ROOT +221D ; [*0680.0020.0002] # PROPORTIONAL TO +221E ; [*0681.0020.0002] # INFINITY +221F ; [*0682.0020.0002] # RIGHT ANGLE +2220 ; [*0683.0020.0002] # ANGLE +2221 ; [*0684.0020.0002] # MEASURED ANGLE +2222 ; [*0685.0020.0002] # SPHERICAL ANGLE +2223 ; [*0686.0020.0002] # DIVIDES +2224 ; [*0686.0020.0002][.0000.002F.0002] # DOES NOT DIVIDE +2225 ; [*0687.0020.0002] # PARALLEL TO +2226 ; [*0687.0020.0002][.0000.002F.0002] # NOT PARALLEL TO +2227 ; [*0688.0020.0002] # LOGICAL AND +2228 ; [*0689.0020.0002] # LOGICAL OR +2229 ; [*068A.0020.0002] # INTERSECTION +222A ; [*068B.0020.0002] # UNION +222B ; [*068C.0020.0002] # INTEGRAL +222C ; [*068C.0020.0004][*068C.0020.0004] # DOUBLE INTEGRAL +222D ; [*068C.0020.0004][*068C.0020.0004][*068C.0020.0004] # TRIPLE INTEGRAL +222E ; [*068D.0020.0002] # CONTOUR INTEGRAL +222F ; [*068D.0020.0004][*068D.0020.0004] # SURFACE INTEGRAL +2230 ; [*068D.0020.0004][*068D.0020.0004][*068D.0020.0004] # VOLUME INTEGRAL +2231 ; [*068E.0020.0002] # CLOCKWISE INTEGRAL +2232 ; [*068F.0020.0002] # CLOCKWISE CONTOUR INTEGRAL +2233 ; [*0690.0020.0002] # ANTICLOCKWISE CONTOUR INTEGRAL +2234 ; [*0691.0020.0002] # THEREFORE +2235 ; [*0692.0020.0002] # BECAUSE +2236 ; [*0693.0020.0002] # RATIO +2237 ; [*0694.0020.0002] # PROPORTION +2238 ; [*0695.0020.0002] # DOT MINUS +2239 ; [*0696.0020.0002] # EXCESS +223A ; [*0697.0020.0002] # GEOMETRIC PROPORTION +223B ; [*0698.0020.0002] # HOMOTHETIC +223C ; [*0699.0020.0002] # TILDE OPERATOR +223D ; [*069A.0020.0002] # REVERSED TILDE +223E ; [*069B.0020.0002] # INVERTED LAZY S +223F ; [*069C.0020.0002] # SINE WAVE +2240 ; [*069D.0020.0002] # WREATH PRODUCT +2241 ; [*0699.0020.0002][.0000.002F.0002] # NOT TILDE +2242 ; [*069E.0020.0002] # MINUS TILDE +2243 ; [*069F.0020.0002] # ASYMPTOTICALLY EQUAL TO +2244 ; [*069F.0020.0002][.0000.002F.0002] # NOT ASYMPTOTICALLY EQUAL TO +2245 ; [*06A0.0020.0002] # APPROXIMATELY EQUAL TO +2246 ; [*06A1.0020.0002] # APPROXIMATELY BUT NOT ACTUALLY EQUAL TO +2247 ; [*06A0.0020.0002][.0000.002F.0002] # NEITHER APPROXIMATELY NOR ACTUALLY EQUAL TO +2248 ; [*06A2.0020.0002] # ALMOST EQUAL TO +2249 ; [*06A2.0020.0002][.0000.002F.0002] # NOT ALMOST EQUAL TO +224A ; [*06A3.0020.0002] # ALMOST EQUAL OR EQUAL TO +224B ; [*06A4.0020.0002] # TRIPLE TILDE +224C ; [*06A5.0020.0002] # ALL EQUAL TO +224D ; [*06A6.0020.0002] # EQUIVALENT TO +224E ; [*06A7.0020.0002] # GEOMETRICALLY EQUIVALENT TO +224F ; [*06A8.0020.0002] # DIFFERENCE BETWEEN +2250 ; [*06A9.0020.0002] # APPROACHES THE LIMIT +2251 ; [*06AA.0020.0002] # GEOMETRICALLY EQUAL TO +2252 ; [*06AB.0020.0002] # APPROXIMATELY EQUAL TO OR THE IMAGE OF +2253 ; [*06AC.0020.0002] # IMAGE OF OR APPROXIMATELY EQUAL TO +2254 ; [*06AD.0020.0002] # COLON EQUALS +2255 ; [*06AE.0020.0002] # EQUALS COLON +2256 ; [*06AF.0020.0002] # RING IN EQUAL TO +2257 ; [*06B0.0020.0002] # RING EQUAL TO +2258 ; [*06B1.0020.0002] # CORRESPONDS TO +2259 ; [*06B2.0020.0002] # ESTIMATES +225A ; [*06B3.0020.0002] # EQUIANGULAR TO +225B ; [*06B4.0020.0002] # STAR EQUALS +225C ; [*06B5.0020.0002] # DELTA EQUAL TO +225D ; [*06B6.0020.0002] # EQUAL TO BY DEFINITION +225E ; [*06B7.0020.0002] # MEASURED BY +225F ; [*06B8.0020.0002] # QUESTIONED EQUAL TO +2260 ; [*066B.0020.0002][.0000.002F.0002] # NOT EQUAL TO +2261 ; [*06B9.0020.0002] # IDENTICAL TO +2262 ; [*06B9.0020.0002][.0000.002F.0002] # NOT IDENTICAL TO +2263 ; [*06BA.0020.0002] # STRICTLY EQUIVALENT TO +2264 ; [*06BB.0020.0002] # LESS-THAN OR EQUAL TO +2265 ; [*06BC.0020.0002] # GREATER-THAN OR EQUAL TO +2266 ; [*06BD.0020.0002] # LESS-THAN OVER EQUAL TO +2267 ; [*06BE.0020.0002] # GREATER-THAN OVER EQUAL TO +2268 ; [*06BF.0020.0002] # LESS-THAN BUT NOT EQUAL TO +2269 ; [*06C0.0020.0002] # GREATER-THAN BUT NOT EQUAL TO +226A ; [*06C1.0020.0002] # MUCH LESS-THAN +226B ; [*06C2.0020.0002] # MUCH GREATER-THAN +226C ; [*06C3.0020.0002] # BETWEEN +226D ; [*06A6.0020.0002][.0000.002F.0002] # NOT EQUIVALENT TO +226E ; [*066A.0020.0002][.0000.002F.0002] # NOT LESS-THAN +226F ; [*066C.0020.0002][.0000.002F.0002] # NOT GREATER-THAN +2270 ; [*06BB.0020.0002][.0000.002F.0002] # NEITHER LESS-THAN NOR EQUAL TO +2271 ; [*06BC.0020.0002][.0000.002F.0002] # NEITHER GREATER-THAN NOR EQUAL TO +2272 ; [*06C4.0020.0002] # LESS-THAN OR EQUIVALENT TO +2273 ; [*06C5.0020.0002] # GREATER-THAN OR EQUIVALENT TO +2274 ; [*06C4.0020.0002][.0000.002F.0002] # NEITHER LESS-THAN NOR EQUIVALENT TO +2275 ; [*06C5.0020.0002][.0000.002F.0002] # NEITHER GREATER-THAN NOR EQUIVALENT TO +2276 ; [*06C6.0020.0002] # LESS-THAN OR GREATER-THAN +2277 ; [*06C7.0020.0002] # GREATER-THAN OR LESS-THAN +2278 ; [*06C6.0020.0002][.0000.002F.0002] # NEITHER LESS-THAN NOR GREATER-THAN +2279 ; [*06C7.0020.0002][.0000.002F.0002] # NEITHER GREATER-THAN NOR LESS-THAN +227A ; [*06C8.0020.0002] # PRECEDES +227B ; [*06C9.0020.0002] # SUCCEEDS +227C ; [*06CA.0020.0002] # PRECEDES OR EQUAL TO +227D ; [*06CB.0020.0002] # SUCCEEDS OR EQUAL TO +227E ; [*06CC.0020.0002] # PRECEDES OR EQUIVALENT TO +227F ; [*06CD.0020.0002] # SUCCEEDS OR EQUIVALENT TO +2280 ; [*06C8.0020.0002][.0000.002F.0002] # DOES NOT PRECEDE +2281 ; [*06C9.0020.0002][.0000.002F.0002] # DOES NOT SUCCEED +2282 ; [*06CE.0020.0002] # SUBSET OF +2283 ; [*06CF.0020.0002] # SUPERSET OF +2284 ; [*06CE.0020.0002][.0000.002F.0002] # NOT A SUBSET OF +2285 ; [*06CF.0020.0002][.0000.002F.0002] # NOT A SUPERSET OF +2286 ; [*06D0.0020.0002] # SUBSET OF OR EQUAL TO +2287 ; [*06D1.0020.0002] # SUPERSET OF OR EQUAL TO +2288 ; [*06D0.0020.0002][.0000.002F.0002] # NEITHER A SUBSET OF NOR EQUAL TO +2289 ; [*06D1.0020.0002][.0000.002F.0002] # NEITHER A SUPERSET OF NOR EQUAL TO +228A ; [*06D2.0020.0002] # SUBSET OF WITH NOT EQUAL TO +228B ; [*06D3.0020.0002] # SUPERSET OF WITH NOT EQUAL TO +228C ; [*06D4.0020.0002] # MULTISET +228D ; [*06D5.0020.0002] # MULTISET MULTIPLICATION +228E ; [*06D6.0020.0002] # MULTISET UNION +228F ; [*06D7.0020.0002] # SQUARE IMAGE OF +2290 ; [*06D8.0020.0002] # SQUARE ORIGINAL OF +2291 ; [*06D9.0020.0002] # SQUARE IMAGE OF OR EQUAL TO +2292 ; [*06DA.0020.0002] # SQUARE ORIGINAL OF OR EQUAL TO +2293 ; [*06DB.0020.0002] # SQUARE CAP +2294 ; [*06DC.0020.0002] # SQUARE CUP +2295 ; [*06DD.0020.0002] # CIRCLED PLUS +2296 ; [*06DE.0020.0002] # CIRCLED MINUS +2297 ; [*06DF.0020.0002] # CIRCLED TIMES +2298 ; [*06E0.0020.0002] # CIRCLED DIVISION SLASH +2299 ; [*06E1.0020.0002] # CIRCLED DOT OPERATOR +229A ; [*06E2.0020.0002] # CIRCLED RING OPERATOR +229B ; [*06E3.0020.0002] # CIRCLED ASTERISK OPERATOR +229C ; [*06E4.0020.0002] # CIRCLED EQUALS +229D ; [*06E5.0020.0002] # CIRCLED DASH +229E ; [*06E6.0020.0002] # SQUARED PLUS +229F ; [*06E7.0020.0002] # SQUARED MINUS +22A0 ; [*06E8.0020.0002] # SQUARED TIMES +22A1 ; [*06E9.0020.0002] # SQUARED DOT OPERATOR +22A2 ; [*06EA.0020.0002] # RIGHT TACK +22A3 ; [*06EB.0020.0002] # LEFT TACK +22A4 ; [*06EC.0020.0002] # DOWN TACK +22A5 ; [*06ED.0020.0002] # UP TACK +22A6 ; [*06EE.0020.0002] # ASSERTION +22A7 ; [*06EF.0020.0002] # MODELS +22A8 ; [*06F0.0020.0002] # TRUE +22A9 ; [*06F1.0020.0002] # FORCES +22AA ; [*06F2.0020.0002] # TRIPLE VERTICAL BAR RIGHT TURNSTILE +22AB ; [*06F3.0020.0002] # DOUBLE VERTICAL BAR DOUBLE RIGHT TURNSTILE +22AC ; [*06EA.0020.0002][.0000.002F.0002] # DOES NOT PROVE +22AD ; [*06F0.0020.0002][.0000.002F.0002] # NOT TRUE +22AE ; [*06F1.0020.0002][.0000.002F.0002] # DOES NOT FORCE +22AF ; [*06F3.0020.0002][.0000.002F.0002] # NEGATED DOUBLE VERTICAL BAR DOUBLE RIGHT TURNSTILE +22B0 ; [*06F4.0020.0002] # PRECEDES UNDER RELATION +22B1 ; [*06F5.0020.0002] # SUCCEEDS UNDER RELATION +22B2 ; [*06F6.0020.0002] # NORMAL SUBGROUP OF +22B3 ; [*06F7.0020.0002] # CONTAINS AS NORMAL SUBGROUP +22B4 ; [*06F8.0020.0002] # NORMAL SUBGROUP OF OR EQUAL TO +22B5 ; [*06F9.0020.0002] # CONTAINS AS NORMAL SUBGROUP OR EQUAL TO +22B6 ; [*06FA.0020.0002] # ORIGINAL OF +22B7 ; [*06FB.0020.0002] # IMAGE OF +22B8 ; [*06FC.0020.0002] # MULTIMAP +22B9 ; [*06FD.0020.0002] # HERMITIAN CONJUGATE MATRIX +22BA ; [*06FE.0020.0002] # INTERCALATE +22BB ; [*06FF.0020.0002] # XOR +22BC ; [*0700.0020.0002] # NAND +22BD ; [*0702.0020.0002] # NOR +22BE ; [*0703.0020.0002] # RIGHT ANGLE WITH ARC +22BF ; [*0704.0020.0002] # RIGHT TRIANGLE +22C0 ; [*0705.0020.0002] # N-ARY LOGICAL AND +22C1 ; [*0706.0020.0002] # N-ARY LOGICAL OR +22C2 ; [*0707.0020.0002] # N-ARY INTERSECTION +22C3 ; [*0708.0020.0002] # N-ARY UNION +22C4 ; [*0709.0020.0002] # DIAMOND OPERATOR +22C5 ; [*070A.0020.0002] # DOT OPERATOR +22C6 ; [*070B.0020.0002] # STAR OPERATOR +22C7 ; [*070C.0020.0002] # DIVISION TIMES +22C8 ; [*070D.0020.0002] # BOWTIE +22C9 ; [*070E.0020.0002] # LEFT NORMAL FACTOR SEMIDIRECT PRODUCT +22CA ; [*070F.0020.0002] # RIGHT NORMAL FACTOR SEMIDIRECT PRODUCT +22CB ; [*0710.0020.0002] # LEFT SEMIDIRECT PRODUCT +22CC ; [*0711.0020.0002] # RIGHT SEMIDIRECT PRODUCT +22CD ; [*0712.0020.0002] # REVERSED TILDE EQUALS +22CE ; [*0713.0020.0002] # CURLY LOGICAL OR +22CF ; [*0714.0020.0002] # CURLY LOGICAL AND +22D0 ; [*0715.0020.0002] # DOUBLE SUBSET +22D1 ; [*0716.0020.0002] # DOUBLE SUPERSET +22D2 ; [*0717.0020.0002] # DOUBLE INTERSECTION +22D3 ; [*0718.0020.0002] # DOUBLE UNION +22D4 ; [*0719.0020.0002] # PITCHFORK +22D5 ; [*071A.0020.0002] # EQUAL AND PARALLEL TO +22D6 ; [*071B.0020.0002] # LESS-THAN WITH DOT +22D7 ; [*071C.0020.0002] # GREATER-THAN WITH DOT +22D8 ; [*071D.0020.0002] # VERY MUCH LESS-THAN +22D9 ; [*071E.0020.0002] # VERY MUCH GREATER-THAN +22DA ; [*071F.0020.0002] # LESS-THAN EQUAL TO OR GREATER-THAN +22DB ; [*0720.0020.0002] # GREATER-THAN EQUAL TO OR LESS-THAN +22DC ; [*0721.0020.0002] # EQUAL TO OR LESS-THAN +22DD ; [*0722.0020.0002] # EQUAL TO OR GREATER-THAN +22DE ; [*0723.0020.0002] # EQUAL TO OR PRECEDES +22DF ; [*0724.0020.0002] # EQUAL TO OR SUCCEEDS +22E0 ; [*06CA.0020.0002][.0000.002F.0002] # DOES NOT PRECEDE OR EQUAL +22E1 ; [*06CB.0020.0002][.0000.002F.0002] # DOES NOT SUCCEED OR EQUAL +22E2 ; [*06D9.0020.0002][.0000.002F.0002] # NOT SQUARE IMAGE OF OR EQUAL TO +22E3 ; [*06DA.0020.0002][.0000.002F.0002] # NOT SQUARE ORIGINAL OF OR EQUAL TO +22E4 ; [*0725.0020.0002] # SQUARE IMAGE OF OR NOT EQUAL TO +22E5 ; [*0726.0020.0002] # SQUARE ORIGINAL OF OR NOT EQUAL TO +22E6 ; [*0727.0020.0002] # LESS-THAN BUT NOT EQUIVALENT TO +22E7 ; [*0728.0020.0002] # GREATER-THAN BUT NOT EQUIVALENT TO +22E8 ; [*0729.0020.0002] # PRECEDES BUT NOT EQUIVALENT TO +22E9 ; [*072A.0020.0002] # SUCCEEDS BUT NOT EQUIVALENT TO +22EA ; [*06F6.0020.0002][.0000.002F.0002] # NOT NORMAL SUBGROUP OF +22EB ; [*06F7.0020.0002][.0000.002F.0002] # DOES NOT CONTAIN AS NORMAL SUBGROUP +22EC ; [*06F8.0020.0002][.0000.002F.0002] # NOT NORMAL SUBGROUP OF OR EQUAL TO +22ED ; [*06F9.0020.0002][.0000.002F.0002] # DOES NOT CONTAIN AS NORMAL SUBGROUP OR EQUAL +22EE ; [*072B.0020.0002] # VERTICAL ELLIPSIS +22EF ; [*072C.0020.0002] # MIDLINE HORIZONTAL ELLIPSIS +22F0 ; [*072D.0020.0002] # UP RIGHT DIAGONAL ELLIPSIS +22F1 ; [*072E.0020.0002] # DOWN RIGHT DIAGONAL ELLIPSIS +22F2 ; [*072F.0020.0002] # ELEMENT OF WITH LONG HORIZONTAL STROKE +22F3 ; [*0730.0020.0002] # ELEMENT OF WITH VERTICAL BAR AT END OF HORIZONTAL STROKE +22F4 ; [*0731.0020.0002] # SMALL ELEMENT OF WITH VERTICAL BAR AT END OF HORIZONTAL STROKE +22F5 ; [*0732.0020.0002] # ELEMENT OF WITH DOT ABOVE +22F6 ; [*0733.0020.0002] # ELEMENT OF WITH OVERBAR +22F7 ; [*0734.0020.0002] # SMALL ELEMENT OF WITH OVERBAR +22F8 ; [*0735.0020.0002] # ELEMENT OF WITH UNDERBAR +22F9 ; [*0736.0020.0002] # ELEMENT OF WITH TWO HORIZONTAL STROKES +22FA ; [*0737.0020.0002] # CONTAINS WITH LONG HORIZONTAL STROKE +22FB ; [*0738.0020.0002] # CONTAINS WITH VERTICAL BAR AT END OF HORIZONTAL STROKE +22FC ; [*0739.0020.0002] # SMALL CONTAINS WITH VERTICAL BAR AT END OF HORIZONTAL STROKE +22FD ; [*073A.0020.0002] # CONTAINS WITH OVERBAR +22FE ; [*073B.0020.0002] # SMALL CONTAINS WITH OVERBAR +22FF ; [*073C.0020.0002] # Z NOTATION BAG MEMBERSHIP +2300 ; [*073D.0020.0002] # DIAMETER SIGN +2301 ; [*073E.0020.0002] # ELECTRIC ARROW +2302 ; [*073F.0020.0002] # HOUSE +2303 ; [*0740.0020.0002] # UP ARROWHEAD +2304 ; [*0741.0020.0002] # DOWN ARROWHEAD +2305 ; [*0742.0020.0002] # PROJECTIVE +2306 ; [*0743.0020.0002] # PERSPECTIVE +2307 ; [*0744.0020.0002] # WAVY LINE +2308 ; [*0336.0020.0002] # LEFT CEILING +2309 ; [*0337.0020.0002] # RIGHT CEILING +230A ; [*0338.0020.0002] # LEFT FLOOR +230B ; [*0339.0020.0002] # RIGHT FLOOR +230C ; [*0745.0020.0002] # BOTTOM RIGHT CROP +230D ; [*0746.0020.0002] # BOTTOM LEFT CROP +230E ; [*0747.0020.0002] # TOP RIGHT CROP +230F ; [*0748.0020.0002] # TOP LEFT CROP +2310 ; [*0749.0020.0002] # REVERSED NOT SIGN +2311 ; [*074A.0020.0002] # SQUARE LOZENGE +2312 ; [*074B.0020.0002] # ARC +2313 ; [*074C.0020.0002] # SEGMENT +2314 ; [*074D.0020.0002] # SECTOR +2315 ; [*074E.0020.0002] # TELEPHONE RECORDER +2316 ; [*074F.0020.0002] # POSITION INDICATOR +2317 ; [*0750.0020.0002] # VIEWDATA SQUARE +2318 ; [*0751.0020.0002] # PLACE OF INTEREST SIGN +2319 ; [*0752.0020.0002] # TURNED NOT SIGN +231A ; [*0753.0020.0002] # WATCH +231B ; [*0754.0020.0002] # HOURGLASS +231C ; [*0755.0020.0002] # TOP LEFT CORNER +231D ; [*0756.0020.0002] # TOP RIGHT CORNER +231E ; [*0757.0020.0002] # BOTTOM LEFT CORNER +231F ; [*0758.0020.0002] # BOTTOM RIGHT CORNER +2320 ; [*0759.0020.0002] # TOP HALF INTEGRAL +2321 ; [*075A.0020.0002] # BOTTOM HALF INTEGRAL +2322 ; [*075B.0020.0002] # FROWN +2323 ; [*075C.0020.0002] # SMILE +2324 ; [*075D.0020.0002] # UP ARROWHEAD BETWEEN TWO HORIZONTAL BARS +2325 ; [*075E.0020.0002] # OPTION KEY +2326 ; [*075F.0020.0002] # ERASE TO THE RIGHT +2327 ; [*0760.0020.0002] # X IN A RECTANGLE BOX +2328 ; [*0761.0020.0002] # KEYBOARD +2329 ; [*0380.0020.0002] # LEFT-POINTING ANGLE BRACKET +232A ; [*0381.0020.0002] # RIGHT-POINTING ANGLE BRACKET +232B ; [*0762.0020.0002] # ERASE TO THE LEFT +232C ; [*0763.0020.0002] # BENZENE RING +232D ; [*0764.0020.0002] # CYLINDRICITY +232E ; [*0765.0020.0002] # ALL AROUND-PROFILE +232F ; [*0766.0020.0002] # SYMMETRY +2330 ; [*0767.0020.0002] # TOTAL RUNOUT +2331 ; [*0768.0020.0002] # DIMENSION ORIGIN +2332 ; [*0769.0020.0002] # CONICAL TAPER +2333 ; [*076A.0020.0002] # SLOPE +2334 ; [*076B.0020.0002] # COUNTERBORE +2335 ; [*076C.0020.0002] # COUNTERSINK +2336 ; [*076D.0020.0002] # APL FUNCTIONAL SYMBOL I-BEAM +2337 ; [*076E.0020.0002] # APL FUNCTIONAL SYMBOL SQUISH QUAD +2338 ; [*076F.0020.0002] # APL FUNCTIONAL SYMBOL QUAD EQUAL +2339 ; [*0770.0020.0002] # APL FUNCTIONAL SYMBOL QUAD DIVIDE +233A ; [*0771.0020.0002] # APL FUNCTIONAL SYMBOL QUAD DIAMOND +233B ; [*0772.0020.0002] # APL FUNCTIONAL SYMBOL QUAD JOT +233C ; [*0773.0020.0002] # APL FUNCTIONAL SYMBOL QUAD CIRCLE +233D ; [*0774.0020.0002] # APL FUNCTIONAL SYMBOL CIRCLE STILE +233E ; [*0775.0020.0002] # APL FUNCTIONAL SYMBOL CIRCLE JOT +233F ; [*0776.0020.0002] # APL FUNCTIONAL SYMBOL SLASH BAR +2340 ; [*0777.0020.0002] # APL FUNCTIONAL SYMBOL BACKSLASH BAR +2341 ; [*0778.0020.0002] # APL FUNCTIONAL SYMBOL QUAD SLASH +2342 ; [*0779.0020.0002] # APL FUNCTIONAL SYMBOL QUAD BACKSLASH +2343 ; [*077A.0020.0002] # APL FUNCTIONAL SYMBOL QUAD LESS-THAN +2344 ; [*077B.0020.0002] # APL FUNCTIONAL SYMBOL QUAD GREATER-THAN +2345 ; [*077C.0020.0002] # APL FUNCTIONAL SYMBOL LEFTWARDS VANE +2346 ; [*077D.0020.0002] # APL FUNCTIONAL SYMBOL RIGHTWARDS VANE +2347 ; [*077E.0020.0002] # APL FUNCTIONAL SYMBOL QUAD LEFTWARDS ARROW +2348 ; [*077F.0020.0002] # APL FUNCTIONAL SYMBOL QUAD RIGHTWARDS ARROW +2349 ; [*0780.0020.0002] # APL FUNCTIONAL SYMBOL CIRCLE BACKSLASH +234A ; [*0781.0020.0002] # APL FUNCTIONAL SYMBOL DOWN TACK UNDERBAR +234B ; [*0782.0020.0002] # APL FUNCTIONAL SYMBOL DELTA STILE +234C ; [*0783.0020.0002] # APL FUNCTIONAL SYMBOL QUAD DOWN CARET +234D ; [*0784.0020.0002] # APL FUNCTIONAL SYMBOL QUAD DELTA +234E ; [*0785.0020.0002] # APL FUNCTIONAL SYMBOL DOWN TACK JOT +234F ; [*0786.0020.0002] # APL FUNCTIONAL SYMBOL UPWARDS VANE +2350 ; [*0787.0020.0002] # APL FUNCTIONAL SYMBOL QUAD UPWARDS ARROW +2351 ; [*0788.0020.0002] # APL FUNCTIONAL SYMBOL UP TACK OVERBAR +2352 ; [*0789.0020.0002] # APL FUNCTIONAL SYMBOL DEL STILE +2353 ; [*078A.0020.0002] # APL FUNCTIONAL SYMBOL QUAD UP CARET +2354 ; [*078B.0020.0002] # APL FUNCTIONAL SYMBOL QUAD DEL +2355 ; [*078C.0020.0002] # APL FUNCTIONAL SYMBOL UP TACK JOT +2356 ; [*078D.0020.0002] # APL FUNCTIONAL SYMBOL DOWNWARDS VANE +2357 ; [*078E.0020.0002] # APL FUNCTIONAL SYMBOL QUAD DOWNWARDS ARROW +2358 ; [*078F.0020.0002] # APL FUNCTIONAL SYMBOL QUOTE UNDERBAR +2359 ; [*0790.0020.0002] # APL FUNCTIONAL SYMBOL DELTA UNDERBAR +235A ; [*0791.0020.0002] # APL FUNCTIONAL SYMBOL DIAMOND UNDERBAR +235B ; [*0792.0020.0002] # APL FUNCTIONAL SYMBOL JOT UNDERBAR +235C ; [*0793.0020.0002] # APL FUNCTIONAL SYMBOL CIRCLE UNDERBAR +235D ; [*0794.0020.0002] # APL FUNCTIONAL SYMBOL UP SHOE JOT +235E ; [*0795.0020.0002] # APL FUNCTIONAL SYMBOL QUOTE QUAD +235F ; [*0796.0020.0002] # APL FUNCTIONAL SYMBOL CIRCLE STAR +2360 ; [*0797.0020.0002] # APL FUNCTIONAL SYMBOL QUAD COLON +2361 ; [*0798.0020.0002] # APL FUNCTIONAL SYMBOL UP TACK DIAERESIS +2362 ; [*0799.0020.0002] # APL FUNCTIONAL SYMBOL DEL DIAERESIS +2363 ; [*079A.0020.0002] # APL FUNCTIONAL SYMBOL STAR DIAERESIS +2364 ; [*079B.0020.0002] # APL FUNCTIONAL SYMBOL JOT DIAERESIS +2365 ; [*079C.0020.0002] # APL FUNCTIONAL SYMBOL CIRCLE DIAERESIS +2366 ; [*079D.0020.0002] # APL FUNCTIONAL SYMBOL DOWN SHOE STILE +2367 ; [*079E.0020.0002] # APL FUNCTIONAL SYMBOL LEFT SHOE STILE +2368 ; [*079F.0020.0002] # APL FUNCTIONAL SYMBOL TILDE DIAERESIS +2369 ; [*07A0.0020.0002] # APL FUNCTIONAL SYMBOL GREATER-THAN DIAERESIS +236A ; [*07A1.0020.0002] # APL FUNCTIONAL SYMBOL COMMA BAR +236B ; [*07A2.0020.0002] # APL FUNCTIONAL SYMBOL DEL TILDE +236C ; [*07A3.0020.0002] # APL FUNCTIONAL SYMBOL ZILDE +236D ; [*07A4.0020.0002] # APL FUNCTIONAL SYMBOL STILE TILDE +236E ; [*07A5.0020.0002] # APL FUNCTIONAL SYMBOL SEMICOLON UNDERBAR +236F ; [*07A6.0020.0002] # APL FUNCTIONAL SYMBOL QUAD NOT EQUAL +2370 ; [*07A7.0020.0002] # APL FUNCTIONAL SYMBOL QUAD QUESTION +2371 ; [*07A8.0020.0002] # APL FUNCTIONAL SYMBOL DOWN CARET TILDE +2372 ; [*07A9.0020.0002] # APL FUNCTIONAL SYMBOL UP CARET TILDE +2373 ; [*07AA.0020.0002] # APL FUNCTIONAL SYMBOL IOTA +2374 ; [*07AB.0020.0002] # APL FUNCTIONAL SYMBOL RHO +2375 ; [*07AC.0020.0002] # APL FUNCTIONAL SYMBOL OMEGA +2376 ; [*07AD.0020.0002] # APL FUNCTIONAL SYMBOL ALPHA UNDERBAR +2377 ; [*07AE.0020.0002] # APL FUNCTIONAL SYMBOL EPSILON UNDERBAR +2378 ; [*07AF.0020.0002] # APL FUNCTIONAL SYMBOL IOTA UNDERBAR +2379 ; [*07B0.0020.0002] # APL FUNCTIONAL SYMBOL OMEGA UNDERBAR +237A ; [*07B1.0020.0002] # APL FUNCTIONAL SYMBOL ALPHA +237B ; [*07B2.0020.0002] # NOT CHECK MARK +237C ; [*07B3.0020.0002] # RIGHT ANGLE WITH DOWNWARDS ZIGZAG ARROW +237D ; [*07B4.0020.0002] # SHOULDERED OPEN BOX +237E ; [*07B5.0020.0002] # BELL SYMBOL +237F ; [*07B6.0020.0002] # VERTICAL LINE WITH MIDDLE DOT +2380 ; [*07B7.0020.0002] # INSERTION SYMBOL +2381 ; [*07B8.0020.0002] # CONTINUOUS UNDERLINE SYMBOL +2382 ; [*07B9.0020.0002] # DISCONTINUOUS UNDERLINE SYMBOL +2383 ; [*07BA.0020.0002] # EMPHASIS SYMBOL +2384 ; [*07BB.0020.0002] # COMPOSITION SYMBOL +2385 ; [*07BC.0020.0002] # WHITE SQUARE WITH CENTRE VERTICAL LINE +2386 ; [*07BD.0020.0002] # ENTER SYMBOL +2387 ; [*07BE.0020.0002] # ALTERNATIVE KEY SYMBOL +2388 ; [*07BF.0020.0002] # HELM SYMBOL +2389 ; [*07C0.0020.0002] # CIRCLED HORIZONTAL BAR WITH NOTCH +238A ; [*07C1.0020.0002] # CIRCLED TRIANGLE DOWN +238B ; [*07C2.0020.0002] # BROKEN CIRCLE WITH NORTHWEST ARROW +238C ; [*07C3.0020.0002] # UNDO SYMBOL +238D ; [*07C4.0020.0002] # MONOSTABLE SYMBOL +238E ; [*07C5.0020.0002] # HYSTERESIS SYMBOL +238F ; [*07C6.0020.0002] # OPEN-CIRCUIT-OUTPUT H-TYPE SYMBOL +2390 ; [*07C7.0020.0002] # OPEN-CIRCUIT-OUTPUT L-TYPE SYMBOL +2391 ; [*07C8.0020.0002] # PASSIVE-PULL-DOWN-OUTPUT SYMBOL +2392 ; [*07C9.0020.0002] # PASSIVE-PULL-UP-OUTPUT SYMBOL +2393 ; [*07CA.0020.0002] # DIRECT CURRENT SYMBOL FORM TWO +2394 ; [*07CB.0020.0002] # SOFTWARE-FUNCTION SYMBOL +2395 ; [*07CC.0020.0002] # APL FUNCTIONAL SYMBOL QUAD +2396 ; [*07CD.0020.0002] # DECIMAL SEPARATOR KEY SYMBOL +2397 ; [*07CE.0020.0002] # PREVIOUS PAGE +2398 ; [*07CF.0020.0002] # NEXT PAGE +2399 ; [*07D0.0020.0002] # PRINT SCREEN SYMBOL +239A ; [*07D1.0020.0002] # CLEAR SCREEN SYMBOL +239B ; [*07D2.0020.0002] # LEFT PARENTHESIS UPPER HOOK +239C ; [*07D3.0020.0002] # LEFT PARENTHESIS EXTENSION +239D ; [*07D4.0020.0002] # LEFT PARENTHESIS LOWER HOOK +239E ; [*07D5.0020.0002] # RIGHT PARENTHESIS UPPER HOOK +239F ; [*07D6.0020.0002] # RIGHT PARENTHESIS EXTENSION +23A0 ; [*07D7.0020.0002] # RIGHT PARENTHESIS LOWER HOOK +23A1 ; [*07D8.0020.0002] # LEFT SQUARE BRACKET UPPER CORNER +23A2 ; [*07D9.0020.0002] # LEFT SQUARE BRACKET EXTENSION +23A3 ; [*07DA.0020.0002] # LEFT SQUARE BRACKET LOWER CORNER +23A4 ; [*07DB.0020.0002] # RIGHT SQUARE BRACKET UPPER CORNER +23A5 ; [*07DC.0020.0002] # RIGHT SQUARE BRACKET EXTENSION +23A6 ; [*07DD.0020.0002] # RIGHT SQUARE BRACKET LOWER CORNER +23A7 ; [*07DE.0020.0002] # LEFT CURLY BRACKET UPPER HOOK +23A8 ; [*07DF.0020.0002] # LEFT CURLY BRACKET MIDDLE PIECE +23A9 ; [*07E0.0020.0002] # LEFT CURLY BRACKET LOWER HOOK +23AA ; [*07E1.0020.0002] # CURLY BRACKET EXTENSION +23AB ; [*07E2.0020.0002] # RIGHT CURLY BRACKET UPPER HOOK +23AC ; [*07E3.0020.0002] # RIGHT CURLY BRACKET MIDDLE PIECE +23AD ; [*07E4.0020.0002] # RIGHT CURLY BRACKET LOWER HOOK +23AE ; [*07E5.0020.0002] # INTEGRAL EXTENSION +23AF ; [*07E6.0020.0002] # HORIZONTAL LINE EXTENSION +23B0 ; [*07E7.0020.0002] # UPPER LEFT OR LOWER RIGHT CURLY BRACKET SECTION +23B1 ; [*07E8.0020.0002] # UPPER RIGHT OR LOWER LEFT CURLY BRACKET SECTION +23B2 ; [*07E9.0020.0002] # SUMMATION TOP +23B3 ; [*07EA.0020.0002] # SUMMATION BOTTOM +23B4 ; [*07EB.0020.0002] # TOP SQUARE BRACKET +23B5 ; [*07EC.0020.0002] # BOTTOM SQUARE BRACKET +23B6 ; [*07ED.0020.0002] # BOTTOM SQUARE BRACKET OVER TOP SQUARE BRACKET +23B7 ; [*07EE.0020.0002] # RADICAL SYMBOL BOTTOM +23B8 ; [*07EF.0020.0002] # LEFT VERTICAL BOX LINE +23B9 ; [*07F0.0020.0002] # RIGHT VERTICAL BOX LINE +23BA ; [*07F1.0020.0002] # HORIZONTAL SCAN LINE-1 +23BB ; [*07F2.0020.0002] # HORIZONTAL SCAN LINE-3 +23BC ; [*07F3.0020.0002] # HORIZONTAL SCAN LINE-7 +23BD ; [*07F4.0020.0002] # HORIZONTAL SCAN LINE-9 +23BE ; [*07F5.0020.0002] # DENTISTRY SYMBOL LIGHT VERTICAL AND TOP RIGHT +23BF ; [*07F6.0020.0002] # DENTISTRY SYMBOL LIGHT VERTICAL AND BOTTOM RIGHT +23C0 ; [*07F7.0020.0002] # DENTISTRY SYMBOL LIGHT VERTICAL WITH CIRCLE +23C1 ; [*07F8.0020.0002] # DENTISTRY SYMBOL LIGHT DOWN AND HORIZONTAL WITH CIRCLE +23C2 ; [*07F9.0020.0002] # DENTISTRY SYMBOL LIGHT UP AND HORIZONTAL WITH CIRCLE +23C3 ; [*07FA.0020.0002] # DENTISTRY SYMBOL LIGHT VERTICAL WITH TRIANGLE +23C4 ; [*07FB.0020.0002] # DENTISTRY SYMBOL LIGHT DOWN AND HORIZONTAL WITH TRIANGLE +23C5 ; [*07FC.0020.0002] # DENTISTRY SYMBOL LIGHT UP AND HORIZONTAL WITH TRIANGLE +23C6 ; [*07FD.0020.0002] # DENTISTRY SYMBOL LIGHT VERTICAL AND WAVE +23C7 ; [*07FE.0020.0002] # DENTISTRY SYMBOL LIGHT DOWN AND HORIZONTAL WITH WAVE +23C8 ; [*07FF.0020.0002] # DENTISTRY SYMBOL LIGHT UP AND HORIZONTAL WITH WAVE +23C9 ; [*0800.0020.0002] # DENTISTRY SYMBOL LIGHT DOWN AND HORIZONTAL +23CA ; [*0801.0020.0002] # DENTISTRY SYMBOL LIGHT UP AND HORIZONTAL +23CB ; [*0802.0020.0002] # DENTISTRY SYMBOL LIGHT VERTICAL AND TOP LEFT +23CC ; [*0803.0020.0002] # DENTISTRY SYMBOL LIGHT VERTICAL AND BOTTOM LEFT +23CD ; [*0804.0020.0002] # SQUARE FOOT +23CE ; [*0805.0020.0002] # RETURN SYMBOL +23CF ; [*0806.0020.0002] # EJECT SYMBOL +23D0 ; [*0807.0020.0002] # VERTICAL LINE EXTENSION +23D1 ; [*0808.0020.0002] # METRICAL BREVE +23D2 ; [*0809.0020.0002] # METRICAL LONG OVER SHORT +23D3 ; [*080A.0020.0002] # METRICAL SHORT OVER LONG +23D4 ; [*080B.0020.0002] # METRICAL LONG OVER TWO SHORTS +23D5 ; [*080C.0020.0002] # METRICAL TWO SHORTS OVER LONG +23D6 ; [*080D.0020.0002] # METRICAL TWO SHORTS JOINED +23D7 ; [*080E.0020.0002] # METRICAL TRISEME +23D8 ; [*080F.0020.0002] # METRICAL TETRASEME +23D9 ; [*0810.0020.0002] # METRICAL PENTASEME +23DA ; [*0811.0020.0002] # EARTH GROUND +23DB ; [*0812.0020.0002] # FUSE +23DC ; [*0813.0020.0002] # TOP PARENTHESIS +23DD ; [*0814.0020.0002] # BOTTOM PARENTHESIS +23DE ; [*0815.0020.0002] # TOP CURLY BRACKET +23DF ; [*0816.0020.0002] # BOTTOM CURLY BRACKET +23E0 ; [*0817.0020.0002] # TOP TORTOISE SHELL BRACKET +23E1 ; [*0818.0020.0002] # BOTTOM TORTOISE SHELL BRACKET +23E2 ; [*0819.0020.0002] # WHITE TRAPEZIUM +23E3 ; [*081A.0020.0002] # BENZENE RING WITH CIRCLE +23E4 ; [*081B.0020.0002] # STRAIGHTNESS +23E5 ; [*081C.0020.0002] # FLATNESS +23E6 ; [*081D.0020.0002] # AC CURRENT +23E7 ; [*081E.0020.0002] # ELECTRICAL INTERSECTION +23E8 ; [*081F.0020.0002] # DECIMAL EXPONENT SYMBOL +23E9 ; [*0820.0020.0002] # BLACK RIGHT-POINTING DOUBLE TRIANGLE +23EA ; [*0821.0020.0002] # BLACK LEFT-POINTING DOUBLE TRIANGLE +23EB ; [*0822.0020.0002] # BLACK UP-POINTING DOUBLE TRIANGLE +23EC ; [*0823.0020.0002] # BLACK DOWN-POINTING DOUBLE TRIANGLE +23ED ; [*0824.0020.0002] # BLACK RIGHT-POINTING DOUBLE TRIANGLE WITH VERTICAL BAR +23EE ; [*0825.0020.0002] # BLACK LEFT-POINTING DOUBLE TRIANGLE WITH VERTICAL BAR +23EF ; [*0826.0020.0002] # BLACK RIGHT-POINTING TRIANGLE WITH DOUBLE VERTICAL BAR +23F0 ; [*0827.0020.0002] # ALARM CLOCK +23F1 ; [*0828.0020.0002] # STOPWATCH +23F2 ; [*0829.0020.0002] # TIMER CLOCK +23F3 ; [*082A.0020.0002] # HOURGLASS WITH FLOWING SAND +23F4 ; [*082B.0020.0002] # BLACK MEDIUM LEFT-POINTING TRIANGLE +23F5 ; [*082C.0020.0002] # BLACK MEDIUM RIGHT-POINTING TRIANGLE +23F6 ; [*082D.0020.0002] # BLACK MEDIUM UP-POINTING TRIANGLE +23F7 ; [*082E.0020.0002] # BLACK MEDIUM DOWN-POINTING TRIANGLE +23F8 ; [*082F.0020.0002] # DOUBLE VERTICAL BAR +23F9 ; [*0830.0020.0002] # BLACK SQUARE FOR STOP +23FA ; [*0831.0020.0002] # BLACK CIRCLE FOR RECORD +23FB ; [*0832.0020.0002] # POWER SYMBOL +23FC ; [*0833.0020.0002] # POWER ON-OFF SYMBOL +23FD ; [*0834.0020.0002] # POWER ON SYMBOL +23FE ; [*0835.0020.0002] # POWER SLEEP SYMBOL +23FF ; [*0836.0020.0002] # OBSERVER EYE SYMBOL +2400 ; [*0837.0020.0002] # SYMBOL FOR NULL +2401 ; [*0838.0020.0002] # SYMBOL FOR START OF HEADING +2402 ; [*0839.0020.0002] # SYMBOL FOR START OF TEXT +2403 ; [*083A.0020.0002] # SYMBOL FOR END OF TEXT +2404 ; [*083B.0020.0002] # SYMBOL FOR END OF TRANSMISSION +2405 ; [*083C.0020.0002] # SYMBOL FOR ENQUIRY +2406 ; [*083D.0020.0002] # SYMBOL FOR ACKNOWLEDGE +2407 ; [*083E.0020.0002] # SYMBOL FOR BELL +2408 ; [*083F.0020.0002] # SYMBOL FOR BACKSPACE +2409 ; [*0840.0020.0002] # SYMBOL FOR HORIZONTAL TABULATION +240A ; [*0841.0020.0002] # SYMBOL FOR LINE FEED +240B ; [*0842.0020.0002] # SYMBOL FOR VERTICAL TABULATION +240C ; [*0843.0020.0002] # SYMBOL FOR FORM FEED +240D ; [*0844.0020.0002] # SYMBOL FOR CARRIAGE RETURN +240E ; [*0845.0020.0002] # SYMBOL FOR SHIFT OUT +240F ; [*0846.0020.0002] # SYMBOL FOR SHIFT IN +2410 ; [*0847.0020.0002] # SYMBOL FOR DATA LINK ESCAPE +2411 ; [*0848.0020.0002] # SYMBOL FOR DEVICE CONTROL ONE +2412 ; [*0849.0020.0002] # SYMBOL FOR DEVICE CONTROL TWO +2413 ; [*084A.0020.0002] # SYMBOL FOR DEVICE CONTROL THREE +2414 ; [*084B.0020.0002] # SYMBOL FOR DEVICE CONTROL FOUR +2415 ; [*084C.0020.0002] # SYMBOL FOR NEGATIVE ACKNOWLEDGE +2416 ; [*084D.0020.0002] # SYMBOL FOR SYNCHRONOUS IDLE +2417 ; [*084E.0020.0002] # SYMBOL FOR END OF TRANSMISSION BLOCK +2418 ; [*084F.0020.0002] # SYMBOL FOR CANCEL +2419 ; [*0850.0020.0002] # SYMBOL FOR END OF MEDIUM +241A ; [*0851.0020.0002] # SYMBOL FOR SUBSTITUTE +241B ; [*0852.0020.0002] # SYMBOL FOR ESCAPE +241C ; [*0853.0020.0002] # SYMBOL FOR FILE SEPARATOR +241D ; [*0854.0020.0002] # SYMBOL FOR GROUP SEPARATOR +241E ; [*0855.0020.0002] # SYMBOL FOR RECORD SEPARATOR +241F ; [*0856.0020.0002] # SYMBOL FOR UNIT SEPARATOR +2420 ; [*0857.0020.0002] # SYMBOL FOR SPACE +2421 ; [*0858.0020.0002] # SYMBOL FOR DELETE +2422 ; [*0859.0020.0002] # BLANK SYMBOL +2423 ; [*085A.0020.0002] # OPEN BOX +2424 ; [*085B.0020.0002] # SYMBOL FOR NEWLINE +2425 ; [*085C.0020.0002] # SYMBOL FOR DELETE FORM TWO +2426 ; [*085D.0020.0002] # SYMBOL FOR SUBSTITUTE FORM TWO +2440 ; [*085E.0020.0002] # OCR HOOK +2441 ; [*085F.0020.0002] # OCR CHAIR +2442 ; [*0860.0020.0002] # OCR FORK +2443 ; [*0861.0020.0002] # OCR INVERTED FORK +2444 ; [*0862.0020.0002] # OCR BELT BUCKLE +2445 ; [*0863.0020.0002] # OCR BOW TIE +2446 ; [*0864.0020.0002] # OCR BRANCH BANK IDENTIFICATION +2447 ; [*0865.0020.0002] # OCR AMOUNT OF CHECK +2448 ; [*0866.0020.0002] # OCR DASH +2449 ; [*0867.0020.0002] # OCR CUSTOMER ACCOUNT NUMBER +244A ; [*0868.0020.0002] # OCR DOUBLE BACKSLASH +2500 ; [*0869.0020.0002] # BOX DRAWINGS LIGHT HORIZONTAL +2501 ; [*086A.0020.0002] # BOX DRAWINGS HEAVY HORIZONTAL +2502 ; [*086B.0020.0002] # BOX DRAWINGS LIGHT VERTICAL +2503 ; [*086C.0020.0002] # BOX DRAWINGS HEAVY VERTICAL +2504 ; [*086D.0020.0002] # BOX DRAWINGS LIGHT TRIPLE DASH HORIZONTAL +2505 ; [*086E.0020.0002] # BOX DRAWINGS HEAVY TRIPLE DASH HORIZONTAL +2506 ; [*086F.0020.0002] # BOX DRAWINGS LIGHT TRIPLE DASH VERTICAL +2507 ; [*0870.0020.0002] # BOX DRAWINGS HEAVY TRIPLE DASH VERTICAL +2508 ; [*0871.0020.0002] # BOX DRAWINGS LIGHT QUADRUPLE DASH HORIZONTAL +2509 ; [*0872.0020.0002] # BOX DRAWINGS HEAVY QUADRUPLE DASH HORIZONTAL +250A ; [*0873.0020.0002] # BOX DRAWINGS LIGHT QUADRUPLE DASH VERTICAL +250B ; [*0874.0020.0002] # BOX DRAWINGS HEAVY QUADRUPLE DASH VERTICAL +250C ; [*0875.0020.0002] # BOX DRAWINGS LIGHT DOWN AND RIGHT +250D ; [*0876.0020.0002] # BOX DRAWINGS DOWN LIGHT AND RIGHT HEAVY +250E ; [*0877.0020.0002] # BOX DRAWINGS DOWN HEAVY AND RIGHT LIGHT +250F ; [*0878.0020.0002] # BOX DRAWINGS HEAVY DOWN AND RIGHT +2510 ; [*0879.0020.0002] # BOX DRAWINGS LIGHT DOWN AND LEFT +2511 ; [*087A.0020.0002] # BOX DRAWINGS DOWN LIGHT AND LEFT HEAVY +2512 ; [*087B.0020.0002] # BOX DRAWINGS DOWN HEAVY AND LEFT LIGHT +2513 ; [*087C.0020.0002] # BOX DRAWINGS HEAVY DOWN AND LEFT +2514 ; [*087D.0020.0002] # BOX DRAWINGS LIGHT UP AND RIGHT +2515 ; [*087E.0020.0002] # BOX DRAWINGS UP LIGHT AND RIGHT HEAVY +2516 ; [*087F.0020.0002] # BOX DRAWINGS UP HEAVY AND RIGHT LIGHT +2517 ; [*0880.0020.0002] # BOX DRAWINGS HEAVY UP AND RIGHT +2518 ; [*0881.0020.0002] # BOX DRAWINGS LIGHT UP AND LEFT +2519 ; [*0882.0020.0002] # BOX DRAWINGS UP LIGHT AND LEFT HEAVY +251A ; [*0883.0020.0002] # BOX DRAWINGS UP HEAVY AND LEFT LIGHT +251B ; [*0884.0020.0002] # BOX DRAWINGS HEAVY UP AND LEFT +251C ; [*0885.0020.0002] # BOX DRAWINGS LIGHT VERTICAL AND RIGHT +251D ; [*0886.0020.0002] # BOX DRAWINGS VERTICAL LIGHT AND RIGHT HEAVY +251E ; [*0887.0020.0002] # BOX DRAWINGS UP HEAVY AND RIGHT DOWN LIGHT +251F ; [*0888.0020.0002] # BOX DRAWINGS DOWN HEAVY AND RIGHT UP LIGHT +2520 ; [*0889.0020.0002] # BOX DRAWINGS VERTICAL HEAVY AND RIGHT LIGHT +2521 ; [*088A.0020.0002] # BOX DRAWINGS DOWN LIGHT AND RIGHT UP HEAVY +2522 ; [*088B.0020.0002] # BOX DRAWINGS UP LIGHT AND RIGHT DOWN HEAVY +2523 ; [*088C.0020.0002] # BOX DRAWINGS HEAVY VERTICAL AND RIGHT +2524 ; [*088D.0020.0002] # BOX DRAWINGS LIGHT VERTICAL AND LEFT +2525 ; [*088E.0020.0002] # BOX DRAWINGS VERTICAL LIGHT AND LEFT HEAVY +2526 ; [*088F.0020.0002] # BOX DRAWINGS UP HEAVY AND LEFT DOWN LIGHT +2527 ; [*0890.0020.0002] # BOX DRAWINGS DOWN HEAVY AND LEFT UP LIGHT +2528 ; [*0891.0020.0002] # BOX DRAWINGS VERTICAL HEAVY AND LEFT LIGHT +2529 ; [*0892.0020.0002] # BOX DRAWINGS DOWN LIGHT AND LEFT UP HEAVY +252A ; [*0893.0020.0002] # BOX DRAWINGS UP LIGHT AND LEFT DOWN HEAVY +252B ; [*0894.0020.0002] # BOX DRAWINGS HEAVY VERTICAL AND LEFT +252C ; [*0895.0020.0002] # BOX DRAWINGS LIGHT DOWN AND HORIZONTAL +252D ; [*0896.0020.0002] # BOX DRAWINGS LEFT HEAVY AND RIGHT DOWN LIGHT +252E ; [*0897.0020.0002] # BOX DRAWINGS RIGHT HEAVY AND LEFT DOWN LIGHT +252F ; [*0898.0020.0002] # BOX DRAWINGS DOWN LIGHT AND HORIZONTAL HEAVY +2530 ; [*0899.0020.0002] # BOX DRAWINGS DOWN HEAVY AND HORIZONTAL LIGHT +2531 ; [*089A.0020.0002] # BOX DRAWINGS RIGHT LIGHT AND LEFT DOWN HEAVY +2532 ; [*089B.0020.0002] # BOX DRAWINGS LEFT LIGHT AND RIGHT DOWN HEAVY +2533 ; [*089C.0020.0002] # BOX DRAWINGS HEAVY DOWN AND HORIZONTAL +2534 ; [*089D.0020.0002] # BOX DRAWINGS LIGHT UP AND HORIZONTAL +2535 ; [*089E.0020.0002] # BOX DRAWINGS LEFT HEAVY AND RIGHT UP LIGHT +2536 ; [*089F.0020.0002] # BOX DRAWINGS RIGHT HEAVY AND LEFT UP LIGHT +2537 ; [*08A0.0020.0002] # BOX DRAWINGS UP LIGHT AND HORIZONTAL HEAVY +2538 ; [*08A1.0020.0002] # BOX DRAWINGS UP HEAVY AND HORIZONTAL LIGHT +2539 ; [*08A2.0020.0002] # BOX DRAWINGS RIGHT LIGHT AND LEFT UP HEAVY +253A ; [*08A3.0020.0002] # BOX DRAWINGS LEFT LIGHT AND RIGHT UP HEAVY +253B ; [*08A4.0020.0002] # BOX DRAWINGS HEAVY UP AND HORIZONTAL +253C ; [*08A5.0020.0002] # BOX DRAWINGS LIGHT VERTICAL AND HORIZONTAL +253D ; [*08A6.0020.0002] # BOX DRAWINGS LEFT HEAVY AND RIGHT VERTICAL LIGHT +253E ; [*08A7.0020.0002] # BOX DRAWINGS RIGHT HEAVY AND LEFT VERTICAL LIGHT +253F ; [*08A8.0020.0002] # BOX DRAWINGS VERTICAL LIGHT AND HORIZONTAL HEAVY +2540 ; [*08A9.0020.0002] # BOX DRAWINGS UP HEAVY AND DOWN HORIZONTAL LIGHT +2541 ; [*08AA.0020.0002] # BOX DRAWINGS DOWN HEAVY AND UP HORIZONTAL LIGHT +2542 ; [*08AB.0020.0002] # BOX DRAWINGS VERTICAL HEAVY AND HORIZONTAL LIGHT +2543 ; [*08AC.0020.0002] # BOX DRAWINGS LEFT UP HEAVY AND RIGHT DOWN LIGHT +2544 ; [*08AD.0020.0002] # BOX DRAWINGS RIGHT UP HEAVY AND LEFT DOWN LIGHT +2545 ; [*08AE.0020.0002] # BOX DRAWINGS LEFT DOWN HEAVY AND RIGHT UP LIGHT +2546 ; [*08AF.0020.0002] # BOX DRAWINGS RIGHT DOWN HEAVY AND LEFT UP LIGHT +2547 ; [*08B0.0020.0002] # BOX DRAWINGS DOWN LIGHT AND UP HORIZONTAL HEAVY +2548 ; [*08B1.0020.0002] # BOX DRAWINGS UP LIGHT AND DOWN HORIZONTAL HEAVY +2549 ; [*08B2.0020.0002] # BOX DRAWINGS RIGHT LIGHT AND LEFT VERTICAL HEAVY +254A ; [*08B3.0020.0002] # BOX DRAWINGS LEFT LIGHT AND RIGHT VERTICAL HEAVY +254B ; [*08B4.0020.0002] # BOX DRAWINGS HEAVY VERTICAL AND HORIZONTAL +254C ; [*08B5.0020.0002] # BOX DRAWINGS LIGHT DOUBLE DASH HORIZONTAL +254D ; [*08B6.0020.0002] # BOX DRAWINGS HEAVY DOUBLE DASH HORIZONTAL +254E ; [*08B7.0020.0002] # BOX DRAWINGS LIGHT DOUBLE DASH VERTICAL +254F ; [*08B8.0020.0002] # BOX DRAWINGS HEAVY DOUBLE DASH VERTICAL +2550 ; [*08B9.0020.0002] # BOX DRAWINGS DOUBLE HORIZONTAL +2551 ; [*08BA.0020.0002] # BOX DRAWINGS DOUBLE VERTICAL +2552 ; [*08BB.0020.0002] # BOX DRAWINGS DOWN SINGLE AND RIGHT DOUBLE +2553 ; [*08BC.0020.0002] # BOX DRAWINGS DOWN DOUBLE AND RIGHT SINGLE +2554 ; [*08BD.0020.0002] # BOX DRAWINGS DOUBLE DOWN AND RIGHT +2555 ; [*08BE.0020.0002] # BOX DRAWINGS DOWN SINGLE AND LEFT DOUBLE +2556 ; [*08BF.0020.0002] # BOX DRAWINGS DOWN DOUBLE AND LEFT SINGLE +2557 ; [*08C0.0020.0002] # BOX DRAWINGS DOUBLE DOWN AND LEFT +2558 ; [*08C1.0020.0002] # BOX DRAWINGS UP SINGLE AND RIGHT DOUBLE +2559 ; [*08C2.0020.0002] # BOX DRAWINGS UP DOUBLE AND RIGHT SINGLE +255A ; [*08C3.0020.0002] # BOX DRAWINGS DOUBLE UP AND RIGHT +255B ; [*08C4.0020.0002] # BOX DRAWINGS UP SINGLE AND LEFT DOUBLE +255C ; [*08C5.0020.0002] # BOX DRAWINGS UP DOUBLE AND LEFT SINGLE +255D ; [*08C6.0020.0002] # BOX DRAWINGS DOUBLE UP AND LEFT +255E ; [*08C7.0020.0002] # BOX DRAWINGS VERTICAL SINGLE AND RIGHT DOUBLE +255F ; [*08C8.0020.0002] # BOX DRAWINGS VERTICAL DOUBLE AND RIGHT SINGLE +2560 ; [*08C9.0020.0002] # BOX DRAWINGS DOUBLE VERTICAL AND RIGHT +2561 ; [*08CA.0020.0002] # BOX DRAWINGS VERTICAL SINGLE AND LEFT DOUBLE +2562 ; [*08CB.0020.0002] # BOX DRAWINGS VERTICAL DOUBLE AND LEFT SINGLE +2563 ; [*08CC.0020.0002] # BOX DRAWINGS DOUBLE VERTICAL AND LEFT +2564 ; [*08CD.0020.0002] # BOX DRAWINGS DOWN SINGLE AND HORIZONTAL DOUBLE +2565 ; [*08CE.0020.0002] # BOX DRAWINGS DOWN DOUBLE AND HORIZONTAL SINGLE +2566 ; [*08CF.0020.0002] # BOX DRAWINGS DOUBLE DOWN AND HORIZONTAL +2567 ; [*08D0.0020.0002] # BOX DRAWINGS UP SINGLE AND HORIZONTAL DOUBLE +2568 ; [*08D1.0020.0002] # BOX DRAWINGS UP DOUBLE AND HORIZONTAL SINGLE +2569 ; [*08D2.0020.0002] # BOX DRAWINGS DOUBLE UP AND HORIZONTAL +256A ; [*08D3.0020.0002] # BOX DRAWINGS VERTICAL SINGLE AND HORIZONTAL DOUBLE +256B ; [*08D4.0020.0002] # BOX DRAWINGS VERTICAL DOUBLE AND HORIZONTAL SINGLE +256C ; [*08D5.0020.0002] # BOX DRAWINGS DOUBLE VERTICAL AND HORIZONTAL +256D ; [*08D6.0020.0002] # BOX DRAWINGS LIGHT ARC DOWN AND RIGHT +256E ; [*08D7.0020.0002] # BOX DRAWINGS LIGHT ARC DOWN AND LEFT +256F ; [*08D8.0020.0002] # BOX DRAWINGS LIGHT ARC UP AND LEFT +2570 ; [*08D9.0020.0002] # BOX DRAWINGS LIGHT ARC UP AND RIGHT +2571 ; [*08DA.0020.0002] # BOX DRAWINGS LIGHT DIAGONAL UPPER RIGHT TO LOWER LEFT +2572 ; [*08DB.0020.0002] # BOX DRAWINGS LIGHT DIAGONAL UPPER LEFT TO LOWER RIGHT +2573 ; [*08DC.0020.0002] # BOX DRAWINGS LIGHT DIAGONAL CROSS +2574 ; [*08DD.0020.0002] # BOX DRAWINGS LIGHT LEFT +2575 ; [*08DE.0020.0002] # BOX DRAWINGS LIGHT UP +2576 ; [*08DF.0020.0002] # BOX DRAWINGS LIGHT RIGHT +2577 ; [*08E0.0020.0002] # BOX DRAWINGS LIGHT DOWN +2578 ; [*08E1.0020.0002] # BOX DRAWINGS HEAVY LEFT +2579 ; [*08E2.0020.0002] # BOX DRAWINGS HEAVY UP +257A ; [*08E3.0020.0002] # BOX DRAWINGS HEAVY RIGHT +257B ; [*08E4.0020.0002] # BOX DRAWINGS HEAVY DOWN +257C ; [*08E5.0020.0002] # BOX DRAWINGS LIGHT LEFT AND HEAVY RIGHT +257D ; [*08E6.0020.0002] # BOX DRAWINGS LIGHT UP AND HEAVY DOWN +257E ; [*08E7.0020.0002] # BOX DRAWINGS HEAVY LEFT AND LIGHT RIGHT +257F ; [*08E8.0020.0002] # BOX DRAWINGS HEAVY UP AND LIGHT DOWN +2580 ; [*08E9.0020.0002] # UPPER HALF BLOCK +2581 ; [*08EA.0020.0002] # LOWER ONE EIGHTH BLOCK +2582 ; [*08EB.0020.0002] # LOWER ONE QUARTER BLOCK +2583 ; [*08EC.0020.0002] # LOWER THREE EIGHTHS BLOCK +2584 ; [*08ED.0020.0002] # LOWER HALF BLOCK +2585 ; [*08EE.0020.0002] # LOWER FIVE EIGHTHS BLOCK +2586 ; [*08EF.0020.0002] # LOWER THREE QUARTERS BLOCK +2587 ; [*08F0.0020.0002] # LOWER SEVEN EIGHTHS BLOCK +2588 ; [*08F1.0020.0002] # FULL BLOCK +2589 ; [*08F2.0020.0002] # LEFT SEVEN EIGHTHS BLOCK +258A ; [*08F3.0020.0002] # LEFT THREE QUARTERS BLOCK +258B ; [*08F4.0020.0002] # LEFT FIVE EIGHTHS BLOCK +258C ; [*08F5.0020.0002] # LEFT HALF BLOCK +258D ; [*08F6.0020.0002] # LEFT THREE EIGHTHS BLOCK +258E ; [*08F7.0020.0002] # LEFT ONE QUARTER BLOCK +258F ; [*08F8.0020.0002] # LEFT ONE EIGHTH BLOCK +2590 ; [*08F9.0020.0002] # RIGHT HALF BLOCK +2591 ; [*08FA.0020.0002] # LIGHT SHADE +2592 ; [*08FB.0020.0002] # MEDIUM SHADE +2593 ; [*08FC.0020.0002] # DARK SHADE +2594 ; [*08FD.0020.0002] # UPPER ONE EIGHTH BLOCK +2595 ; [*08FE.0020.0002] # RIGHT ONE EIGHTH BLOCK +2596 ; [*08FF.0020.0002] # QUADRANT LOWER LEFT +2597 ; [*0900.0020.0002] # QUADRANT LOWER RIGHT +2598 ; [*0901.0020.0002] # QUADRANT UPPER LEFT +2599 ; [*0902.0020.0002] # QUADRANT UPPER LEFT AND LOWER LEFT AND LOWER RIGHT +259A ; [*0903.0020.0002] # QUADRANT UPPER LEFT AND LOWER RIGHT +259B ; [*0904.0020.0002] # QUADRANT UPPER LEFT AND UPPER RIGHT AND LOWER LEFT +259C ; [*0905.0020.0002] # QUADRANT UPPER LEFT AND UPPER RIGHT AND LOWER RIGHT +259D ; [*0906.0020.0002] # QUADRANT UPPER RIGHT +259E ; [*0907.0020.0002] # QUADRANT UPPER RIGHT AND LOWER LEFT +259F ; [*0908.0020.0002] # QUADRANT UPPER RIGHT AND LOWER LEFT AND LOWER RIGHT +25A0 ; [*0909.0020.0002] # BLACK SQUARE +25A1 ; [*090A.0020.0002] # WHITE SQUARE +25A2 ; [*090B.0020.0002] # WHITE SQUARE WITH ROUNDED CORNERS +25A3 ; [*090C.0020.0002] # WHITE SQUARE CONTAINING BLACK SMALL SQUARE +25A4 ; [*090D.0020.0002] # SQUARE WITH HORIZONTAL FILL +25A5 ; [*090E.0020.0002] # SQUARE WITH VERTICAL FILL +25A6 ; [*090F.0020.0002] # SQUARE WITH ORTHOGONAL CROSSHATCH FILL +25A7 ; [*0910.0020.0002] # SQUARE WITH UPPER LEFT TO LOWER RIGHT FILL +25A8 ; [*0911.0020.0002] # SQUARE WITH UPPER RIGHT TO LOWER LEFT FILL +25A9 ; [*0912.0020.0002] # SQUARE WITH DIAGONAL CROSSHATCH FILL +25AA ; [*0913.0020.0002] # BLACK SMALL SQUARE +25AB ; [*0914.0020.0002] # WHITE SMALL SQUARE +25AC ; [*0915.0020.0002] # BLACK RECTANGLE +25AD ; [*0916.0020.0002] # WHITE RECTANGLE +25AE ; [*0917.0020.0002] # BLACK VERTICAL RECTANGLE +25AF ; [*0918.0020.0002] # WHITE VERTICAL RECTANGLE +25B0 ; [*0919.0020.0002] # BLACK PARALLELOGRAM +25B1 ; [*091A.0020.0002] # WHITE PARALLELOGRAM +25B2 ; [*091B.0020.0002] # BLACK UP-POINTING TRIANGLE +25B3 ; [*091C.0020.0002] # WHITE UP-POINTING TRIANGLE +25B4 ; [*091D.0020.0002] # BLACK UP-POINTING SMALL TRIANGLE +25B5 ; [*091E.0020.0002] # WHITE UP-POINTING SMALL TRIANGLE +25B6 ; [*091F.0020.0002] # BLACK RIGHT-POINTING TRIANGLE +25B7 ; [*0920.0020.0002] # WHITE RIGHT-POINTING TRIANGLE +25B8 ; [*0921.0020.0002] # BLACK RIGHT-POINTING SMALL TRIANGLE +25B9 ; [*0922.0020.0002] # WHITE RIGHT-POINTING SMALL TRIANGLE +25BA ; [*0923.0020.0002] # BLACK RIGHT-POINTING POINTER +25BB ; [*0924.0020.0002] # WHITE RIGHT-POINTING POINTER +25BC ; [*0925.0020.0002] # BLACK DOWN-POINTING TRIANGLE +25BD ; [*0926.0020.0002] # WHITE DOWN-POINTING TRIANGLE +25BE ; [*0927.0020.0002] # BLACK DOWN-POINTING SMALL TRIANGLE +25BF ; [*0928.0020.0002] # WHITE DOWN-POINTING SMALL TRIANGLE +25C0 ; [*0929.0020.0002] # BLACK LEFT-POINTING TRIANGLE +25C1 ; [*092A.0020.0002] # WHITE LEFT-POINTING TRIANGLE +25C2 ; [*092B.0020.0002] # BLACK LEFT-POINTING SMALL TRIANGLE +25C3 ; [*092C.0020.0002] # WHITE LEFT-POINTING SMALL TRIANGLE +25C4 ; [*092D.0020.0002] # BLACK LEFT-POINTING POINTER +25C5 ; [*092E.0020.0002] # WHITE LEFT-POINTING POINTER +25C6 ; [*092F.0020.0002] # BLACK DIAMOND +25C7 ; [*0930.0020.0002] # WHITE DIAMOND +25C8 ; [*0931.0020.0002] # WHITE DIAMOND CONTAINING BLACK SMALL DIAMOND +25C9 ; [*0932.0020.0002] # FISHEYE +25CA ; [*0933.0020.0002] # LOZENGE +25CB ; [*0934.0020.0002] # WHITE CIRCLE +25CC ; [*0935.0020.0002] # DOTTED CIRCLE +25CD ; [*0936.0020.0002] # CIRCLE WITH VERTICAL FILL +25CE ; [*0937.0020.0002] # BULLSEYE +25CF ; [*0938.0020.0002] # BLACK CIRCLE +25D0 ; [*0939.0020.0002] # CIRCLE WITH LEFT HALF BLACK +25D1 ; [*093A.0020.0002] # CIRCLE WITH RIGHT HALF BLACK +25D2 ; [*093B.0020.0002] # CIRCLE WITH LOWER HALF BLACK +25D3 ; [*093C.0020.0002] # CIRCLE WITH UPPER HALF BLACK +25D4 ; [*093D.0020.0002] # CIRCLE WITH UPPER RIGHT QUADRANT BLACK +25D5 ; [*093E.0020.0002] # CIRCLE WITH ALL BUT UPPER LEFT QUADRANT BLACK +25D6 ; [*093F.0020.0002] # LEFT HALF BLACK CIRCLE +25D7 ; [*0940.0020.0002] # RIGHT HALF BLACK CIRCLE +25D8 ; [*0941.0020.0002] # INVERSE BULLET +25D9 ; [*0942.0020.0002] # INVERSE WHITE CIRCLE +25DA ; [*0943.0020.0002] # UPPER HALF INVERSE WHITE CIRCLE +25DB ; [*0944.0020.0002] # LOWER HALF INVERSE WHITE CIRCLE +25DC ; [*0945.0020.0002] # UPPER LEFT QUADRANT CIRCULAR ARC +25DD ; [*0946.0020.0002] # UPPER RIGHT QUADRANT CIRCULAR ARC +25DE ; [*0947.0020.0002] # LOWER RIGHT QUADRANT CIRCULAR ARC +25DF ; [*0948.0020.0002] # LOWER LEFT QUADRANT CIRCULAR ARC +25E0 ; [*0949.0020.0002] # UPPER HALF CIRCLE +25E1 ; [*094A.0020.0002] # LOWER HALF CIRCLE +25E2 ; [*094B.0020.0002] # BLACK LOWER RIGHT TRIANGLE +25E3 ; [*094C.0020.0002] # BLACK LOWER LEFT TRIANGLE +25E4 ; [*094D.0020.0002] # BLACK UPPER LEFT TRIANGLE +25E5 ; [*094E.0020.0002] # BLACK UPPER RIGHT TRIANGLE +25E6 ; [*094F.0020.0002] # WHITE BULLET +25E7 ; [*0950.0020.0002] # SQUARE WITH LEFT HALF BLACK +25E8 ; [*0951.0020.0002] # SQUARE WITH RIGHT HALF BLACK +25E9 ; [*0952.0020.0002] # SQUARE WITH UPPER LEFT DIAGONAL HALF BLACK +25EA ; [*0953.0020.0002] # SQUARE WITH LOWER RIGHT DIAGONAL HALF BLACK +25EB ; [*0954.0020.0002] # WHITE SQUARE WITH VERTICAL BISECTING LINE +25EC ; [*0955.0020.0002] # WHITE UP-POINTING TRIANGLE WITH DOT +25ED ; [*0956.0020.0002] # UP-POINTING TRIANGLE WITH LEFT HALF BLACK +25EE ; [*0957.0020.0002] # UP-POINTING TRIANGLE WITH RIGHT HALF BLACK +25EF ; [*0958.0020.0002] # LARGE CIRCLE +25F0 ; [*0959.0020.0002] # WHITE SQUARE WITH UPPER LEFT QUADRANT +25F1 ; [*095A.0020.0002] # WHITE SQUARE WITH LOWER LEFT QUADRANT +25F2 ; [*095B.0020.0002] # WHITE SQUARE WITH LOWER RIGHT QUADRANT +25F3 ; [*095C.0020.0002] # WHITE SQUARE WITH UPPER RIGHT QUADRANT +25F4 ; [*095D.0020.0002] # WHITE CIRCLE WITH UPPER LEFT QUADRANT +25F5 ; [*095E.0020.0002] # WHITE CIRCLE WITH LOWER LEFT QUADRANT +25F6 ; [*095F.0020.0002] # WHITE CIRCLE WITH LOWER RIGHT QUADRANT +25F7 ; [*0960.0020.0002] # WHITE CIRCLE WITH UPPER RIGHT QUADRANT +25F8 ; [*0961.0020.0002] # UPPER LEFT TRIANGLE +25F9 ; [*0962.0020.0002] # UPPER RIGHT TRIANGLE +25FA ; [*0963.0020.0002] # LOWER LEFT TRIANGLE +25FB ; [*0964.0020.0002] # WHITE MEDIUM SQUARE +25FC ; [*0965.0020.0002] # BLACK MEDIUM SQUARE +25FD ; [*0966.0020.0002] # WHITE MEDIUM SMALL SQUARE +25FE ; [*0967.0020.0002] # BLACK MEDIUM SMALL SQUARE +25FF ; [*0968.0020.0002] # LOWER RIGHT TRIANGLE +2600 ; [*0A33.0020.0002] # BLACK SUN WITH RAYS +2601 ; [*0A34.0020.0002] # CLOUD +2602 ; [*0A35.0020.0002] # UMBRELLA +2603 ; [*0A36.0020.0002] # SNOWMAN +2604 ; [*0A37.0020.0002] # COMET +2605 ; [*0A38.0020.0002] # BLACK STAR +2606 ; [*0A39.0020.0002] # WHITE STAR +2607 ; [*0A3A.0020.0002] # LIGHTNING +2608 ; [*0A3B.0020.0002] # THUNDERSTORM +2609 ; [*0A3C.0020.0002] # SUN +260A ; [*0A3D.0020.0002] # ASCENDING NODE +260B ; [*0A3E.0020.0002] # DESCENDING NODE +260C ; [*0A3F.0020.0002] # CONJUNCTION +260D ; [*0A40.0020.0002] # OPPOSITION +260E ; [*0A41.0020.0002] # BLACK TELEPHONE +260F ; [*0A42.0020.0002] # WHITE TELEPHONE +2610 ; [*0A43.0020.0002] # BALLOT BOX +2611 ; [*0A44.0020.0002] # BALLOT BOX WITH CHECK +2612 ; [*0A45.0020.0002] # BALLOT BOX WITH X +2613 ; [*0A46.0020.0002] # SALTIRE +2614 ; [*0A47.0020.0002] # UMBRELLA WITH RAIN DROPS +2615 ; [*0A48.0020.0002] # HOT BEVERAGE +2616 ; [*0A49.0020.0002] # WHITE SHOGI PIECE +2617 ; [*0A4A.0020.0002] # BLACK SHOGI PIECE +2618 ; [*0A4B.0020.0002] # SHAMROCK +2619 ; [*0A4C.0020.0002] # REVERSED ROTATED FLORAL HEART BULLET +261A ; [*0A4D.0020.0002] # BLACK LEFT POINTING INDEX +261B ; [*0A4E.0020.0002] # BLACK RIGHT POINTING INDEX +261C ; [*0A4F.0020.0002] # WHITE LEFT POINTING INDEX +261D ; [*0A50.0020.0002] # WHITE UP POINTING INDEX +261E ; [*0A51.0020.0002] # WHITE RIGHT POINTING INDEX +261F ; [*0A52.0020.0002] # WHITE DOWN POINTING INDEX +2620 ; [*0A53.0020.0002] # SKULL AND CROSSBONES +2621 ; [*0A54.0020.0002] # CAUTION SIGN +2622 ; [*0A55.0020.0002] # RADIOACTIVE SIGN +2623 ; [*0A56.0020.0002] # BIOHAZARD SIGN +2624 ; [*0A57.0020.0002] # CADUCEUS +2625 ; [*0A58.0020.0002] # ANKH +2626 ; [*0A59.0020.0002] # ORTHODOX CROSS +2627 ; [*0A5A.0020.0002] # CHI RHO +2628 ; [*0A5B.0020.0002] # CROSS OF LORRAINE +2629 ; [*0A5C.0020.0002] # CROSS OF JERUSALEM +262A ; [*0A5D.0020.0002] # STAR AND CRESCENT +262B ; [*0A5E.0020.0002] # FARSI SYMBOL +262C ; [*0A5F.0020.0002] # ADI SHAKTI +262D ; [*0A60.0020.0002] # HAMMER AND SICKLE +262E ; [*0A61.0020.0002] # PEACE SYMBOL +262F ; [*0A62.0020.0002] # YIN YANG +2630 ; [*0FEE.0020.0002] # TRIGRAM FOR HEAVEN +2631 ; [*0FEF.0020.0002] # TRIGRAM FOR LAKE +2632 ; [*0FF0.0020.0002] # TRIGRAM FOR FIRE +2633 ; [*0FF1.0020.0002] # TRIGRAM FOR THUNDER +2634 ; [*0FF2.0020.0002] # TRIGRAM FOR WIND +2635 ; [*0FF3.0020.0002] # TRIGRAM FOR WATER +2636 ; [*0FF4.0020.0002] # TRIGRAM FOR MOUNTAIN +2637 ; [*0FF5.0020.0002] # TRIGRAM FOR EARTH +2638 ; [*0A63.0020.0002] # WHEEL OF DHARMA +2639 ; [*0A64.0020.0002] # WHITE FROWNING FACE +263A ; [*0A65.0020.0002] # WHITE SMILING FACE +263B ; [*0A66.0020.0002] # BLACK SMILING FACE +263C ; [*0A67.0020.0002] # WHITE SUN WITH RAYS +263D ; [*0A68.0020.0002] # FIRST QUARTER MOON +263E ; [*0A69.0020.0002] # LAST QUARTER MOON +263F ; [*0A6A.0020.0002] # MERCURY +2640 ; [*0A6B.0020.0002] # FEMALE SIGN +2641 ; [*0A6C.0020.0002] # EARTH +2642 ; [*0A6D.0020.0002] # MALE SIGN +2643 ; [*0A6E.0020.0002] # JUPITER +2644 ; [*0A6F.0020.0002] # SATURN +2645 ; [*0A70.0020.0002] # URANUS +2646 ; [*0A71.0020.0002] # NEPTUNE +2647 ; [*0A72.0020.0002] # PLUTO +2648 ; [*0A73.0020.0002] # ARIES +2649 ; [*0A74.0020.0002] # TAURUS +264A ; [*0A75.0020.0002] # GEMINI +264B ; [*0A76.0020.0002] # CANCER +264C ; [*0A77.0020.0002] # LEO +264D ; [*0A78.0020.0002] # VIRGO +264E ; [*0A79.0020.0002] # LIBRA +264F ; [*0A7A.0020.0002] # SCORPIUS +2650 ; [*0A7B.0020.0002] # SAGITTARIUS +2651 ; [*0A7C.0020.0002] # CAPRICORN +2652 ; [*0A7D.0020.0002] # AQUARIUS +2653 ; [*0A7E.0020.0002] # PISCES +2654 ; [*0A7F.0020.0002] # WHITE CHESS KING +2655 ; [*0A80.0020.0002] # WHITE CHESS QUEEN +2656 ; [*0A81.0020.0002] # WHITE CHESS ROOK +2657 ; [*0A82.0020.0002] # WHITE CHESS BISHOP +2658 ; [*0A83.0020.0002] # WHITE CHESS KNIGHT +2659 ; [*0A84.0020.0002] # WHITE CHESS PAWN +265A ; [*0A85.0020.0002] # BLACK CHESS KING +265B ; [*0A86.0020.0002] # BLACK CHESS QUEEN +265C ; [*0A87.0020.0002] # BLACK CHESS ROOK +265D ; [*0A88.0020.0002] # BLACK CHESS BISHOP +265E ; [*0A89.0020.0002] # BLACK CHESS KNIGHT +265F ; [*0A8A.0020.0002] # BLACK CHESS PAWN +2660 ; [*0A8B.0020.0002] # BLACK SPADE SUIT +2661 ; [*0A8C.0020.0002] # WHITE HEART SUIT +2662 ; [*0A8D.0020.0002] # WHITE DIAMOND SUIT +2663 ; [*0A8E.0020.0002] # BLACK CLUB SUIT +2664 ; [*0A8F.0020.0002] # WHITE SPADE SUIT +2665 ; [*0A90.0020.0002] # BLACK HEART SUIT +2666 ; [*0A91.0020.0002] # BLACK DIAMOND SUIT +2667 ; [*0A92.0020.0002] # WHITE CLUB SUIT +2668 ; [*0A93.0020.0002] # HOT SPRINGS +2669 ; [*0A94.0020.0002] # QUARTER NOTE +266A ; [*0A95.0020.0002] # EIGHTH NOTE +266B ; [*0A96.0020.0002] # BEAMED EIGHTH NOTES +266C ; [*0A97.0020.0002] # BEAMED SIXTEENTH NOTES +266D ; [*1241.0020.0002] # MUSIC FLAT SIGN +266E ; [*1242.0020.0002] # MUSIC NATURAL SIGN +266F ; [*1243.0020.0002] # MUSIC SHARP SIGN +2670 ; [*0A98.0020.0002] # WEST SYRIAC CROSS +2671 ; [*0A99.0020.0002] # EAST SYRIAC CROSS +2672 ; [*0A9A.0020.0002] # UNIVERSAL RECYCLING SYMBOL +2673 ; [*0A9B.0020.0002] # RECYCLING SYMBOL FOR TYPE-1 PLASTICS +2674 ; [*0A9C.0020.0002] # RECYCLING SYMBOL FOR TYPE-2 PLASTICS +2675 ; [*0A9D.0020.0002] # RECYCLING SYMBOL FOR TYPE-3 PLASTICS +2676 ; [*0A9E.0020.0002] # RECYCLING SYMBOL FOR TYPE-4 PLASTICS +2677 ; [*0A9F.0020.0002] # RECYCLING SYMBOL FOR TYPE-5 PLASTICS +2678 ; [*0AA0.0020.0002] # RECYCLING SYMBOL FOR TYPE-6 PLASTICS +2679 ; [*0AA1.0020.0002] # RECYCLING SYMBOL FOR TYPE-7 PLASTICS +267A ; [*0AA2.0020.0002] # RECYCLING SYMBOL FOR GENERIC MATERIALS +267B ; [*0AA3.0020.0002] # BLACK UNIVERSAL RECYCLING SYMBOL +267C ; [*0AA4.0020.0002] # RECYCLED PAPER SYMBOL +267D ; [*0AA5.0020.0002] # PARTIALLY-RECYCLED PAPER SYMBOL +267E ; [*0AA6.0020.0002] # PERMANENT PAPER SIGN +267F ; [*0AA7.0020.0002] # WHEELCHAIR SYMBOL +2680 ; [*0AA8.0020.0002] # DIE FACE-1 +2681 ; [*0AA9.0020.0002] # DIE FACE-2 +2682 ; [*0AAA.0020.0002] # DIE FACE-3 +2683 ; [*0AAB.0020.0002] # DIE FACE-4 +2684 ; [*0AAC.0020.0002] # DIE FACE-5 +2685 ; [*0AAD.0020.0002] # DIE FACE-6 +2686 ; [*0AAE.0020.0002] # WHITE CIRCLE WITH DOT RIGHT +2687 ; [*0AAF.0020.0002] # WHITE CIRCLE WITH TWO DOTS +2688 ; [*0AB0.0020.0002] # BLACK CIRCLE WITH WHITE DOT RIGHT +2689 ; [*0AB1.0020.0002] # BLACK CIRCLE WITH TWO WHITE DOTS +268A ; [*0FE8.0020.0002] # MONOGRAM FOR YANG +268B ; [*0FE9.0020.0002] # MONOGRAM FOR YIN +268C ; [*0FEA.0020.0002] # DIGRAM FOR GREATER YANG +268D ; [*0FEB.0020.0002] # DIGRAM FOR LESSER YIN +268E ; [*0FEC.0020.0002] # DIGRAM FOR LESSER YANG +268F ; [*0FED.0020.0002] # DIGRAM FOR GREATER YIN +2690 ; [*0AB2.0020.0002] # WHITE FLAG +2691 ; [*0AB3.0020.0002] # BLACK FLAG +2692 ; [*0AB4.0020.0002] # HAMMER AND PICK +2693 ; [*0AB5.0020.0002] # ANCHOR +2694 ; [*0AB6.0020.0002] # CROSSED SWORDS +2695 ; [*0AB7.0020.0002] # STAFF OF AESCULAPIUS +2696 ; [*0AB8.0020.0002] # SCALES +2697 ; [*0AB9.0020.0002] # ALEMBIC +2698 ; [*0ABA.0020.0002] # FLOWER +2699 ; [*0ABB.0020.0002] # GEAR +269A ; [*0ABC.0020.0002] # STAFF OF HERMES +269B ; [*0ABD.0020.0002] # ATOM SYMBOL +269C ; [*0ABE.0020.0002] # FLEUR-DE-LIS +269D ; [*0ABF.0020.0002] # OUTLINED WHITE STAR +269E ; [*0AC0.0020.0002] # THREE LINES CONVERGING RIGHT +269F ; [*0AC1.0020.0002] # THREE LINES CONVERGING LEFT +26A0 ; [*0AC2.0020.0002] # WARNING SIGN +26A1 ; [*0AC3.0020.0002] # HIGH VOLTAGE SIGN +26A2 ; [*0AC4.0020.0002] # DOUBLED FEMALE SIGN +26A3 ; [*0AC5.0020.0002] # DOUBLED MALE SIGN +26A4 ; [*0AC6.0020.0002] # INTERLOCKED FEMALE AND MALE SIGN +26A5 ; [*0AC7.0020.0002] # MALE AND FEMALE SIGN +26A6 ; [*0AC8.0020.0002] # MALE WITH STROKE SIGN +26A7 ; [*0AC9.0020.0002] # MALE WITH STROKE AND MALE AND FEMALE SIGN +26A8 ; [*0ACA.0020.0002] # VERTICAL MALE WITH STROKE SIGN +26A9 ; [*0ACB.0020.0002] # HORIZONTAL MALE WITH STROKE SIGN +26AA ; [*0ACC.0020.0002] # MEDIUM WHITE CIRCLE +26AB ; [*0ACD.0020.0002] # MEDIUM BLACK CIRCLE +26AC ; [*0ACE.0020.0002] # MEDIUM SMALL WHITE CIRCLE +26AD ; [*0ACF.0020.0002] # MARRIAGE SYMBOL +26AE ; [*0AD0.0020.0002] # DIVORCE SYMBOL +26AF ; [*0AD1.0020.0002] # UNMARRIED PARTNERSHIP SYMBOL +26B0 ; [*0AD2.0020.0002] # COFFIN +26B1 ; [*0AD3.0020.0002] # FUNERAL URN +26B2 ; [*0AD4.0020.0002] # NEUTER +26B3 ; [*0AD5.0020.0002] # CERES +26B4 ; [*0AD6.0020.0002] # PALLAS +26B5 ; [*0AD7.0020.0002] # JUNO +26B6 ; [*0AD8.0020.0002] # VESTA +26B7 ; [*0AD9.0020.0002] # CHIRON +26B8 ; [*0ADA.0020.0002] # BLACK MOON LILITH +26B9 ; [*0ADB.0020.0002] # SEXTILE +26BA ; [*0ADC.0020.0002] # SEMISEXTILE +26BB ; [*0ADD.0020.0002] # QUINCUNX +26BC ; [*0ADE.0020.0002] # SESQUIQUADRATE +26BD ; [*0ADF.0020.0002] # SOCCER BALL +26BE ; [*0AE0.0020.0002] # BASEBALL +26BF ; [*0AE1.0020.0002] # SQUARED KEY +26C0 ; [*0AE2.0020.0002] # WHITE DRAUGHTS MAN +26C1 ; [*0AE3.0020.0002] # WHITE DRAUGHTS KING +26C2 ; [*0AE4.0020.0002] # BLACK DRAUGHTS MAN +26C3 ; [*0AE5.0020.0002] # BLACK DRAUGHTS KING +26C4 ; [*0AE6.0020.0002] # SNOWMAN WITHOUT SNOW +26C5 ; [*0AE7.0020.0002] # SUN BEHIND CLOUD +26C6 ; [*0AE8.0020.0002] # RAIN +26C7 ; [*0AE9.0020.0002] # BLACK SNOWMAN +26C8 ; [*0AEA.0020.0002] # THUNDER CLOUD AND RAIN +26C9 ; [*0AEB.0020.0002] # TURNED WHITE SHOGI PIECE +26CA ; [*0AEC.0020.0002] # TURNED BLACK SHOGI PIECE +26CB ; [*0AED.0020.0002] # WHITE DIAMOND IN SQUARE +26CC ; [*0AEE.0020.0002] # CROSSING LANES +26CD ; [*0AEF.0020.0002] # DISABLED CAR +26CE ; [*0AF0.0020.0002] # OPHIUCHUS +26CF ; [*0AF1.0020.0002] # PICK +26D0 ; [*0AF2.0020.0002] # CAR SLIDING +26D1 ; [*0AF3.0020.0002] # HELMET WITH WHITE CROSS +26D2 ; [*0AF4.0020.0002] # CIRCLED CROSSING LANES +26D3 ; [*0AF5.0020.0002] # CHAINS +26D4 ; [*0AF6.0020.0002] # NO ENTRY +26D5 ; [*0AF7.0020.0002] # ALTERNATE ONE-WAY LEFT WAY TRAFFIC +26D6 ; [*0AF8.0020.0002] # BLACK TWO-WAY LEFT WAY TRAFFIC +26D7 ; [*0AF9.0020.0002] # WHITE TWO-WAY LEFT WAY TRAFFIC +26D8 ; [*0AFA.0020.0002] # BLACK LEFT LANE MERGE +26D9 ; [*0AFB.0020.0002] # WHITE LEFT LANE MERGE +26DA ; [*0AFC.0020.0002] # DRIVE SLOW SIGN +26DB ; [*0AFD.0020.0002] # HEAVY WHITE DOWN-POINTING TRIANGLE +26DC ; [*0AFE.0020.0002] # LEFT CLOSED ENTRY +26DD ; [*0AFF.0020.0002] # SQUARED SALTIRE +26DE ; [*0B00.0020.0002] # FALLING DIAGONAL IN WHITE CIRCLE IN BLACK SQUARE +26DF ; [*0B01.0020.0002] # BLACK TRUCK +26E0 ; [*0B02.0020.0002] # RESTRICTED LEFT ENTRY-1 +26E1 ; [*0B03.0020.0002] # RESTRICTED LEFT ENTRY-2 +26E2 ; [*0B04.0020.0002] # ASTRONOMICAL SYMBOL FOR URANUS +26E3 ; [*0B05.0020.0002] # HEAVY CIRCLE WITH STROKE AND TWO DOTS ABOVE +26E4 ; [*0B06.0020.0002] # PENTAGRAM +26E5 ; [*0B07.0020.0002] # RIGHT-HANDED INTERLACED PENTAGRAM +26E6 ; [*0B08.0020.0002] # LEFT-HANDED INTERLACED PENTAGRAM +26E7 ; [*0B09.0020.0002] # INVERTED PENTAGRAM +26E8 ; [*0B0A.0020.0002] # BLACK CROSS ON SHIELD +26E9 ; [*0B0B.0020.0002] # SHINTO SHRINE +26EA ; [*0B0C.0020.0002] # CHURCH +26EB ; [*0B0D.0020.0002] # CASTLE +26EC ; [*0B0E.0020.0002] # HISTORIC SITE +26ED ; [*0B0F.0020.0002] # GEAR WITHOUT HUB +26EE ; [*0B10.0020.0002] # GEAR WITH HANDLES +26EF ; [*0B11.0020.0002] # MAP SYMBOL FOR LIGHTHOUSE +26F0 ; [*0B12.0020.0002] # MOUNTAIN +26F1 ; [*0B13.0020.0002] # UMBRELLA ON GROUND +26F2 ; [*0B14.0020.0002] # FOUNTAIN +26F3 ; [*0B15.0020.0002] # FLAG IN HOLE +26F4 ; [*0B16.0020.0002] # FERRY +26F5 ; [*0B17.0020.0002] # SAILBOAT +26F6 ; [*0B18.0020.0002] # SQUARE FOUR CORNERS +26F7 ; [*0B19.0020.0002] # SKIER +26F8 ; [*0B1A.0020.0002] # ICE SKATE +26F9 ; [*0B1B.0020.0002] # PERSON WITH BALL +26FA ; [*0B1C.0020.0002] # TENT +26FB ; [*0B1D.0020.0002] # JAPANESE BANK SYMBOL +26FC ; [*0B1E.0020.0002] # HEADSTONE GRAVEYARD SYMBOL +26FD ; [*0B1F.0020.0002] # FUEL PUMP +26FE ; [*0B20.0020.0002] # CUP ON BLACK SQUARE +26FF ; [*0B21.0020.0002] # WHITE FLAG WITH HORIZONTAL MIDDLE BLACK STRIPE +2700 ; [*0B3C.0020.0002] # BLACK SAFETY SCISSORS +2701 ; [*0B3D.0020.0002] # UPPER BLADE SCISSORS +2702 ; [*0B3E.0020.0002] # BLACK SCISSORS +2703 ; [*0B3F.0020.0002] # LOWER BLADE SCISSORS +2704 ; [*0B40.0020.0002] # WHITE SCISSORS +2705 ; [*0B41.0020.0002] # WHITE HEAVY CHECK MARK +2706 ; [*0B42.0020.0002] # TELEPHONE LOCATION SIGN +2707 ; [*0B43.0020.0002] # TAPE DRIVE +2708 ; [*0B44.0020.0002] # AIRPLANE +2709 ; [*0B45.0020.0002] # ENVELOPE +270A ; [*0B46.0020.0002] # RAISED FIST +270B ; [*0B47.0020.0002] # RAISED HAND +270C ; [*0B48.0020.0002] # VICTORY HAND +270D ; [*0B49.0020.0002] # WRITING HAND +270E ; [*0B4A.0020.0002] # LOWER RIGHT PENCIL +270F ; [*0B4B.0020.0002] # PENCIL +2710 ; [*0B4C.0020.0002] # UPPER RIGHT PENCIL +2711 ; [*0B4D.0020.0002] # WHITE NIB +2712 ; [*0B4E.0020.0002] # BLACK NIB +2713 ; [*0B4F.0020.0002] # CHECK MARK +2714 ; [*0B50.0020.0002] # HEAVY CHECK MARK +2715 ; [*0B51.0020.0002] # MULTIPLICATION X +2716 ; [*0B52.0020.0002] # HEAVY MULTIPLICATION X +2717 ; [*0B53.0020.0002] # BALLOT X +2718 ; [*0B54.0020.0002] # HEAVY BALLOT X +2719 ; [*0B55.0020.0002] # OUTLINED GREEK CROSS +271A ; [*0B56.0020.0002] # HEAVY GREEK CROSS +271B ; [*0B57.0020.0002] # OPEN CENTRE CROSS +271C ; [*0B58.0020.0002] # HEAVY OPEN CENTRE CROSS +271D ; [*0B59.0020.0002] # LATIN CROSS +271E ; [*0B5A.0020.0002] # SHADOWED WHITE LATIN CROSS +271F ; [*0B5B.0020.0002] # OUTLINED LATIN CROSS +2720 ; [*0B5C.0020.0002] # MALTESE CROSS +2721 ; [*0B5F.0020.0002] # STAR OF DAVID +2722 ; [*0B60.0020.0002] # FOUR TEARDROP-SPOKED ASTERISK +2723 ; [*0B61.0020.0002] # FOUR BALLOON-SPOKED ASTERISK +2724 ; [*0B62.0020.0002] # HEAVY FOUR BALLOON-SPOKED ASTERISK +2725 ; [*0B63.0020.0002] # FOUR CLUB-SPOKED ASTERISK +2726 ; [*0B64.0020.0002] # BLACK FOUR POINTED STAR +2727 ; [*0B65.0020.0002] # WHITE FOUR POINTED STAR +2728 ; [*0B66.0020.0002] # SPARKLES +2729 ; [*0B67.0020.0002] # STRESS OUTLINED WHITE STAR +272A ; [*0B68.0020.0002] # CIRCLED WHITE STAR +272B ; [*0B69.0020.0002] # OPEN CENTRE BLACK STAR +272C ; [*0B6A.0020.0002] # BLACK CENTRE WHITE STAR +272D ; [*0B6B.0020.0002] # OUTLINED BLACK STAR +272E ; [*0B6C.0020.0002] # HEAVY OUTLINED BLACK STAR +272F ; [*0B6D.0020.0002] # PINWHEEL STAR +2730 ; [*0B6E.0020.0002] # SHADOWED WHITE STAR +2731 ; [*0B6F.0020.0002] # HEAVY ASTERISK +2732 ; [*0B70.0020.0002] # OPEN CENTRE ASTERISK +2733 ; [*0B71.0020.0002] # EIGHT SPOKED ASTERISK +2734 ; [*0B72.0020.0002] # EIGHT POINTED BLACK STAR +2735 ; [*0B73.0020.0002] # EIGHT POINTED PINWHEEL STAR +2736 ; [*0B74.0020.0002] # SIX POINTED BLACK STAR +2737 ; [*0B75.0020.0002] # EIGHT POINTED RECTILINEAR BLACK STAR +2738 ; [*0B76.0020.0002] # HEAVY EIGHT POINTED RECTILINEAR BLACK STAR +2739 ; [*0B77.0020.0002] # TWELVE POINTED BLACK STAR +273A ; [*0B78.0020.0002] # SIXTEEN POINTED ASTERISK +273B ; [*0B79.0020.0002] # TEARDROP-SPOKED ASTERISK +273C ; [*0B7A.0020.0002] # OPEN CENTRE TEARDROP-SPOKED ASTERISK +273D ; [*0B7B.0020.0002] # HEAVY TEARDROP-SPOKED ASTERISK +273E ; [*0B7C.0020.0002] # SIX PETALLED BLACK AND WHITE FLORETTE +273F ; [*0B7D.0020.0002] # BLACK FLORETTE +2740 ; [*0B7E.0020.0002] # WHITE FLORETTE +2741 ; [*0B7F.0020.0002] # EIGHT PETALLED OUTLINED BLACK FLORETTE +2742 ; [*0B80.0020.0002] # CIRCLED OPEN CENTRE EIGHT POINTED STAR +2743 ; [*0B81.0020.0002] # HEAVY TEARDROP-SPOKED PINWHEEL ASTERISK +2744 ; [*0B82.0020.0002] # SNOWFLAKE +2745 ; [*0B83.0020.0002] # TIGHT TRIFOLIATE SNOWFLAKE +2746 ; [*0B84.0020.0002] # HEAVY CHEVRON SNOWFLAKE +2747 ; [*0B85.0020.0002] # SPARKLE +2748 ; [*0B86.0020.0002] # HEAVY SPARKLE +2749 ; [*0B87.0020.0002] # BALLOON-SPOKED ASTERISK +274A ; [*0B88.0020.0002] # EIGHT TEARDROP-SPOKED PROPELLER ASTERISK +274B ; [*0B89.0020.0002] # HEAVY EIGHT TEARDROP-SPOKED PROPELLER ASTERISK +274C ; [*0B8A.0020.0002] # CROSS MARK +274D ; [*0B8B.0020.0002] # SHADOWED WHITE CIRCLE +274E ; [*0B8C.0020.0002] # NEGATIVE SQUARED CROSS MARK +274F ; [*0B8D.0020.0002] # LOWER RIGHT DROP-SHADOWED WHITE SQUARE +2750 ; [*0B8E.0020.0002] # UPPER RIGHT DROP-SHADOWED WHITE SQUARE +2751 ; [*0B8F.0020.0002] # LOWER RIGHT SHADOWED WHITE SQUARE +2752 ; [*0B90.0020.0002] # UPPER RIGHT SHADOWED WHITE SQUARE +2753 ; [*0B91.0020.0002] # BLACK QUESTION MARK ORNAMENT +2754 ; [*0B92.0020.0002] # WHITE QUESTION MARK ORNAMENT +2755 ; [*0B93.0020.0002] # WHITE EXCLAMATION MARK ORNAMENT +2756 ; [*0B94.0020.0002] # BLACK DIAMOND MINUS WHITE X +2757 ; [*0B95.0020.0002] # HEAVY EXCLAMATION MARK SYMBOL +2758 ; [*0B96.0020.0002] # LIGHT VERTICAL BAR +2759 ; [*0B97.0020.0002] # MEDIUM VERTICAL BAR +275A ; [*0B98.0020.0002] # HEAVY VERTICAL BAR +275B ; [*0B99.0020.0002] # HEAVY SINGLE TURNED COMMA QUOTATION MARK ORNAMENT +275C ; [*0B9A.0020.0002] # HEAVY SINGLE COMMA QUOTATION MARK ORNAMENT +275D ; [*0B9B.0020.0002] # HEAVY DOUBLE TURNED COMMA QUOTATION MARK ORNAMENT +275E ; [*0B9C.0020.0002] # HEAVY DOUBLE COMMA QUOTATION MARK ORNAMENT +275F ; [*0B9D.0020.0002] # HEAVY LOW SINGLE COMMA QUOTATION MARK ORNAMENT +2760 ; [*0B9E.0020.0002] # HEAVY LOW DOUBLE COMMA QUOTATION MARK ORNAMENT +2761 ; [*0B9F.0020.0002] # CURVED STEM PARAGRAPH SIGN ORNAMENT +2762 ; [*0BA0.0020.0002] # HEAVY EXCLAMATION MARK ORNAMENT +2763 ; [*0BA1.0020.0002] # HEAVY HEART EXCLAMATION MARK ORNAMENT +2764 ; [*0BA2.0020.0002] # HEAVY BLACK HEART +2765 ; [*0BA3.0020.0002] # ROTATED HEAVY BLACK HEART BULLET +2766 ; [*0BA4.0020.0002] # FLORAL HEART +2767 ; [*0BA5.0020.0002] # ROTATED FLORAL HEART BULLET +2768 ; [*035E.0020.0002] # MEDIUM LEFT PARENTHESIS ORNAMENT +2769 ; [*035F.0020.0002] # MEDIUM RIGHT PARENTHESIS ORNAMENT +276A ; [*0360.0020.0002] # MEDIUM FLATTENED LEFT PARENTHESIS ORNAMENT +276B ; [*0361.0020.0002] # MEDIUM FLATTENED RIGHT PARENTHESIS ORNAMENT +276C ; [*0362.0020.0002] # MEDIUM LEFT-POINTING ANGLE BRACKET ORNAMENT +276D ; [*0363.0020.0002] # MEDIUM RIGHT-POINTING ANGLE BRACKET ORNAMENT +276E ; [*0364.0020.0002] # HEAVY LEFT-POINTING ANGLE QUOTATION MARK ORNAMENT +276F ; [*0365.0020.0002] # HEAVY RIGHT-POINTING ANGLE QUOTATION MARK ORNAMENT +2770 ; [*0366.0020.0002] # HEAVY LEFT-POINTING ANGLE BRACKET ORNAMENT +2771 ; [*0367.0020.0002] # HEAVY RIGHT-POINTING ANGLE BRACKET ORNAMENT +2772 ; [*0368.0020.0002] # LIGHT LEFT TORTOISE SHELL BRACKET ORNAMENT +2773 ; [*0369.0020.0002] # LIGHT RIGHT TORTOISE SHELL BRACKET ORNAMENT +2774 ; [*036A.0020.0002] # MEDIUM LEFT CURLY BRACKET ORNAMENT +2775 ; [*036B.0020.0002] # MEDIUM RIGHT CURLY BRACKET ORNAMENT +2794 ; [*0BA6.0020.0002] # HEAVY WIDE-HEADED RIGHTWARDS ARROW +2795 ; [*0BA7.0020.0002] # HEAVY PLUS SIGN +2796 ; [*0BA8.0020.0002] # HEAVY MINUS SIGN +2797 ; [*0BA9.0020.0002] # HEAVY DIVISION SIGN +2798 ; [*0BAA.0020.0002] # HEAVY SOUTH EAST ARROW +2799 ; [*0BAB.0020.0002] # HEAVY RIGHTWARDS ARROW +279A ; [*0BAC.0020.0002] # HEAVY NORTH EAST ARROW +279B ; [*0BAD.0020.0002] # DRAFTING POINT RIGHTWARDS ARROW +279C ; [*0BAE.0020.0002] # HEAVY ROUND-TIPPED RIGHTWARDS ARROW +279D ; [*0BAF.0020.0002] # TRIANGLE-HEADED RIGHTWARDS ARROW +279E ; [*0BB0.0020.0002] # HEAVY TRIANGLE-HEADED RIGHTWARDS ARROW +279F ; [*0BB1.0020.0002] # DASHED TRIANGLE-HEADED RIGHTWARDS ARROW +27A0 ; [*0BB2.0020.0002] # HEAVY DASHED TRIANGLE-HEADED RIGHTWARDS ARROW +27A1 ; [*0BB3.0020.0002] # BLACK RIGHTWARDS ARROW +27A2 ; [*0BB4.0020.0002] # THREE-D TOP-LIGHTED RIGHTWARDS ARROWHEAD +27A3 ; [*0BB5.0020.0002] # THREE-D BOTTOM-LIGHTED RIGHTWARDS ARROWHEAD +27A4 ; [*0BB6.0020.0002] # BLACK RIGHTWARDS ARROWHEAD +27A5 ; [*0BB7.0020.0002] # HEAVY BLACK CURVED DOWNWARDS AND RIGHTWARDS ARROW +27A6 ; [*0BB8.0020.0002] # HEAVY BLACK CURVED UPWARDS AND RIGHTWARDS ARROW +27A7 ; [*0BB9.0020.0002] # SQUAT BLACK RIGHTWARDS ARROW +27A8 ; [*0BBA.0020.0002] # HEAVY CONCAVE-POINTED BLACK RIGHTWARDS ARROW +27A9 ; [*0BBB.0020.0002] # RIGHT-SHADED WHITE RIGHTWARDS ARROW +27AA ; [*0BBC.0020.0002] # LEFT-SHADED WHITE RIGHTWARDS ARROW +27AB ; [*0BBD.0020.0002] # BACK-TILTED SHADOWED WHITE RIGHTWARDS ARROW +27AC ; [*0BBE.0020.0002] # FRONT-TILTED SHADOWED WHITE RIGHTWARDS ARROW +27AD ; [*0BBF.0020.0002] # HEAVY LOWER RIGHT-SHADOWED WHITE RIGHTWARDS ARROW +27AE ; [*0BC0.0020.0002] # HEAVY UPPER RIGHT-SHADOWED WHITE RIGHTWARDS ARROW +27AF ; [*0BC1.0020.0002] # NOTCHED LOWER RIGHT-SHADOWED WHITE RIGHTWARDS ARROW +27B0 ; [*0BC2.0020.0002] # CURLY LOOP +27B1 ; [*0BC3.0020.0002] # NOTCHED UPPER RIGHT-SHADOWED WHITE RIGHTWARDS ARROW +27B2 ; [*0BC4.0020.0002] # CIRCLED HEAVY WHITE RIGHTWARDS ARROW +27B3 ; [*0BC5.0020.0002] # WHITE-FEATHERED RIGHTWARDS ARROW +27B4 ; [*0BC6.0020.0002] # BLACK-FEATHERED SOUTH EAST ARROW +27B5 ; [*0BC7.0020.0002] # BLACK-FEATHERED RIGHTWARDS ARROW +27B6 ; [*0BC8.0020.0002] # BLACK-FEATHERED NORTH EAST ARROW +27B7 ; [*0BC9.0020.0002] # HEAVY BLACK-FEATHERED SOUTH EAST ARROW +27B8 ; [*0BCA.0020.0002] # HEAVY BLACK-FEATHERED RIGHTWARDS ARROW +27B9 ; [*0BCB.0020.0002] # HEAVY BLACK-FEATHERED NORTH EAST ARROW +27BA ; [*0BCC.0020.0002] # TEARDROP-BARBED RIGHTWARDS ARROW +27BB ; [*0BCD.0020.0002] # HEAVY TEARDROP-SHANKED RIGHTWARDS ARROW +27BC ; [*0BCE.0020.0002] # WEDGE-TAILED RIGHTWARDS ARROW +27BD ; [*0BCF.0020.0002] # HEAVY WEDGE-TAILED RIGHTWARDS ARROW +27BE ; [*0BD0.0020.0002] # OPEN-OUTLINED RIGHTWARDS ARROW +27BF ; [*0BD1.0020.0002] # DOUBLE CURLY LOOP +27C0 ; [*0BD2.0020.0002] # THREE DIMENSIONAL ANGLE +27C1 ; [*0BD3.0020.0002] # WHITE TRIANGLE CONTAINING SMALL WHITE TRIANGLE +27C2 ; [*0BD4.0020.0002] # PERPENDICULAR +27C3 ; [*0BD5.0020.0002] # OPEN SUBSET +27C4 ; [*0BD6.0020.0002] # OPEN SUPERSET +27C5 ; [*0352.0020.0002] # LEFT S-SHAPED BAG DELIMITER +27C6 ; [*0353.0020.0002] # RIGHT S-SHAPED BAG DELIMITER +27C7 ; [*0BD7.0020.0002] # OR WITH DOT INSIDE +27C8 ; [*0BD8.0020.0002] # REVERSE SOLIDUS PRECEDING SUBSET +27C9 ; [*0BD9.0020.0002] # SUPERSET PRECEDING SOLIDUS +27CA ; [*0BDA.0020.0002] # VERTICAL BAR WITH HORIZONTAL STROKE +27CB ; [*0BDB.0020.0002] # MATHEMATICAL RISING DIAGONAL +27CC ; [*0BDC.0020.0002] # LONG DIVISION +27CD ; [*0BDD.0020.0002] # MATHEMATICAL FALLING DIAGONAL +27CE ; [*0BDE.0020.0002] # SQUARED LOGICAL AND +27CF ; [*0BDF.0020.0002] # SQUARED LOGICAL OR +27D0 ; [*0BE0.0020.0002] # WHITE DIAMOND WITH CENTRED DOT +27D1 ; [*0BE1.0020.0002] # AND WITH DOT +27D2 ; [*0BE2.0020.0002] # ELEMENT OF OPENING UPWARDS +27D3 ; [*0BE3.0020.0002] # LOWER RIGHT CORNER WITH DOT +27D4 ; [*0BE4.0020.0002] # UPPER LEFT CORNER WITH DOT +27D5 ; [*0BE5.0020.0002] # LEFT OUTER JOIN +27D6 ; [*0BE6.0020.0002] # RIGHT OUTER JOIN +27D7 ; [*0BE7.0020.0002] # FULL OUTER JOIN +27D8 ; [*0BE8.0020.0002] # LARGE UP TACK +27D9 ; [*0BE9.0020.0002] # LARGE DOWN TACK +27DA ; [*0BEA.0020.0002] # LEFT AND RIGHT DOUBLE TURNSTILE +27DB ; [*0BEB.0020.0002] # LEFT AND RIGHT TACK +27DC ; [*0BEC.0020.0002] # LEFT MULTIMAP +27DD ; [*0BED.0020.0002] # LONG RIGHT TACK +27DE ; [*0BEE.0020.0002] # LONG LEFT TACK +27DF ; [*0BEF.0020.0002] # UP TACK WITH CIRCLE ABOVE +27E0 ; [*0BF0.0020.0002] # LOZENGE DIVIDED BY HORIZONTAL RULE +27E1 ; [*0BF1.0020.0002] # WHITE CONCAVE-SIDED DIAMOND +27E2 ; [*0BF2.0020.0002] # WHITE CONCAVE-SIDED DIAMOND WITH LEFTWARDS TICK +27E3 ; [*0BF3.0020.0002] # WHITE CONCAVE-SIDED DIAMOND WITH RIGHTWARDS TICK +27E4 ; [*0BF4.0020.0002] # WHITE SQUARE WITH LEFTWARDS TICK +27E5 ; [*0BF5.0020.0002] # WHITE SQUARE WITH RIGHTWARDS TICK +27E6 ; [*0354.0020.0002] # MATHEMATICAL LEFT WHITE SQUARE BRACKET +27E7 ; [*0355.0020.0002] # MATHEMATICAL RIGHT WHITE SQUARE BRACKET +27E8 ; [*0356.0020.0002] # MATHEMATICAL LEFT ANGLE BRACKET +27E9 ; [*0357.0020.0002] # MATHEMATICAL RIGHT ANGLE BRACKET +27EA ; [*0358.0020.0002] # MATHEMATICAL LEFT DOUBLE ANGLE BRACKET +27EB ; [*0359.0020.0002] # MATHEMATICAL RIGHT DOUBLE ANGLE BRACKET +27EC ; [*035A.0020.0002] # MATHEMATICAL LEFT WHITE TORTOISE SHELL BRACKET +27ED ; [*035B.0020.0002] # MATHEMATICAL RIGHT WHITE TORTOISE SHELL BRACKET +27EE ; [*035C.0020.0002] # MATHEMATICAL LEFT FLATTENED PARENTHESIS +27EF ; [*035D.0020.0002] # MATHEMATICAL RIGHT FLATTENED PARENTHESIS +27F0 ; [*0BF6.0020.0002] # UPWARDS QUADRUPLE ARROW +27F1 ; [*0BF7.0020.0002] # DOWNWARDS QUADRUPLE ARROW +27F2 ; [*0BF8.0020.0002] # ANTICLOCKWISE GAPPED CIRCLE ARROW +27F3 ; [*0BF9.0020.0002] # CLOCKWISE GAPPED CIRCLE ARROW +27F4 ; [*0BFA.0020.0002] # RIGHT ARROW WITH CIRCLED PLUS +27F5 ; [*0BFB.0020.0002] # LONG LEFTWARDS ARROW +27F6 ; [*0BFC.0020.0002] # LONG RIGHTWARDS ARROW +27F7 ; [*0BFD.0020.0002] # LONG LEFT RIGHT ARROW +27F8 ; [*0BFE.0020.0002] # LONG LEFTWARDS DOUBLE ARROW +27F9 ; [*0BFF.0020.0002] # LONG RIGHTWARDS DOUBLE ARROW +27FA ; [*0C00.0020.0002] # LONG LEFT RIGHT DOUBLE ARROW +27FB ; [*0C01.0020.0002] # LONG LEFTWARDS ARROW FROM BAR +27FC ; [*0C02.0020.0002] # LONG RIGHTWARDS ARROW FROM BAR +27FD ; [*0C03.0020.0002] # LONG LEFTWARDS DOUBLE ARROW FROM BAR +27FE ; [*0C04.0020.0002] # LONG RIGHTWARDS DOUBLE ARROW FROM BAR +27FF ; [*0C05.0020.0002] # LONG RIGHTWARDS SQUIGGLE ARROW +2800 ; [*0EE8.0020.0002] # BRAILLE PATTERN BLANK +2801 ; [*0EE9.0020.0002] # BRAILLE PATTERN DOTS-1 +2802 ; [*0EEA.0020.0002] # BRAILLE PATTERN DOTS-2 +2803 ; [*0EEB.0020.0002] # BRAILLE PATTERN DOTS-12 +2804 ; [*0EEC.0020.0002] # BRAILLE PATTERN DOTS-3 +2805 ; [*0EED.0020.0002] # BRAILLE PATTERN DOTS-13 +2806 ; [*0EEE.0020.0002] # BRAILLE PATTERN DOTS-23 +2807 ; [*0EEF.0020.0002] # BRAILLE PATTERN DOTS-123 +2808 ; [*0EF0.0020.0002] # BRAILLE PATTERN DOTS-4 +2809 ; [*0EF1.0020.0002] # BRAILLE PATTERN DOTS-14 +280A ; [*0EF2.0020.0002] # BRAILLE PATTERN DOTS-24 +280B ; [*0EF3.0020.0002] # BRAILLE PATTERN DOTS-124 +280C ; [*0EF4.0020.0002] # BRAILLE PATTERN DOTS-34 +280D ; [*0EF5.0020.0002] # BRAILLE PATTERN DOTS-134 +280E ; [*0EF6.0020.0002] # BRAILLE PATTERN DOTS-234 +280F ; [*0EF7.0020.0002] # BRAILLE PATTERN DOTS-1234 +2810 ; [*0EF8.0020.0002] # BRAILLE PATTERN DOTS-5 +2811 ; [*0EF9.0020.0002] # BRAILLE PATTERN DOTS-15 +2812 ; [*0EFA.0020.0002] # BRAILLE PATTERN DOTS-25 +2813 ; [*0EFB.0020.0002] # BRAILLE PATTERN DOTS-125 +2814 ; [*0EFC.0020.0002] # BRAILLE PATTERN DOTS-35 +2815 ; [*0EFD.0020.0002] # BRAILLE PATTERN DOTS-135 +2816 ; [*0EFE.0020.0002] # BRAILLE PATTERN DOTS-235 +2817 ; [*0EFF.0020.0002] # BRAILLE PATTERN DOTS-1235 +2818 ; [*0F00.0020.0002] # BRAILLE PATTERN DOTS-45 +2819 ; [*0F01.0020.0002] # BRAILLE PATTERN DOTS-145 +281A ; [*0F02.0020.0002] # BRAILLE PATTERN DOTS-245 +281B ; [*0F03.0020.0002] # BRAILLE PATTERN DOTS-1245 +281C ; [*0F04.0020.0002] # BRAILLE PATTERN DOTS-345 +281D ; [*0F05.0020.0002] # BRAILLE PATTERN DOTS-1345 +281E ; [*0F06.0020.0002] # BRAILLE PATTERN DOTS-2345 +281F ; [*0F07.0020.0002] # BRAILLE PATTERN DOTS-12345 +2820 ; [*0F08.0020.0002] # BRAILLE PATTERN DOTS-6 +2821 ; [*0F09.0020.0002] # BRAILLE PATTERN DOTS-16 +2822 ; [*0F0A.0020.0002] # BRAILLE PATTERN DOTS-26 +2823 ; [*0F0B.0020.0002] # BRAILLE PATTERN DOTS-126 +2824 ; [*0F0C.0020.0002] # BRAILLE PATTERN DOTS-36 +2825 ; [*0F0D.0020.0002] # BRAILLE PATTERN DOTS-136 +2826 ; [*0F0E.0020.0002] # BRAILLE PATTERN DOTS-236 +2827 ; [*0F0F.0020.0002] # BRAILLE PATTERN DOTS-1236 +2828 ; [*0F10.0020.0002] # BRAILLE PATTERN DOTS-46 +2829 ; [*0F11.0020.0002] # BRAILLE PATTERN DOTS-146 +282A ; [*0F12.0020.0002] # BRAILLE PATTERN DOTS-246 +282B ; [*0F13.0020.0002] # BRAILLE PATTERN DOTS-1246 +282C ; [*0F14.0020.0002] # BRAILLE PATTERN DOTS-346 +282D ; [*0F15.0020.0002] # BRAILLE PATTERN DOTS-1346 +282E ; [*0F16.0020.0002] # BRAILLE PATTERN DOTS-2346 +282F ; [*0F17.0020.0002] # BRAILLE PATTERN DOTS-12346 +2830 ; [*0F18.0020.0002] # BRAILLE PATTERN DOTS-56 +2831 ; [*0F19.0020.0002] # BRAILLE PATTERN DOTS-156 +2832 ; [*0F1A.0020.0002] # BRAILLE PATTERN DOTS-256 +2833 ; [*0F1B.0020.0002] # BRAILLE PATTERN DOTS-1256 +2834 ; [*0F1C.0020.0002] # BRAILLE PATTERN DOTS-356 +2835 ; [*0F1D.0020.0002] # BRAILLE PATTERN DOTS-1356 +2836 ; [*0F1E.0020.0002] # BRAILLE PATTERN DOTS-2356 +2837 ; [*0F1F.0020.0002] # BRAILLE PATTERN DOTS-12356 +2838 ; [*0F20.0020.0002] # BRAILLE PATTERN DOTS-456 +2839 ; [*0F21.0020.0002] # BRAILLE PATTERN DOTS-1456 +283A ; [*0F22.0020.0002] # BRAILLE PATTERN DOTS-2456 +283B ; [*0F23.0020.0002] # BRAILLE PATTERN DOTS-12456 +283C ; [*0F24.0020.0002] # BRAILLE PATTERN DOTS-3456 +283D ; [*0F25.0020.0002] # BRAILLE PATTERN DOTS-13456 +283E ; [*0F26.0020.0002] # BRAILLE PATTERN DOTS-23456 +283F ; [*0F27.0020.0002] # BRAILLE PATTERN DOTS-123456 +2840 ; [*0F28.0020.0002] # BRAILLE PATTERN DOTS-7 +2841 ; [*0F29.0020.0002] # BRAILLE PATTERN DOTS-17 +2842 ; [*0F2A.0020.0002] # BRAILLE PATTERN DOTS-27 +2843 ; [*0F2B.0020.0002] # BRAILLE PATTERN DOTS-127 +2844 ; [*0F2C.0020.0002] # BRAILLE PATTERN DOTS-37 +2845 ; [*0F2D.0020.0002] # BRAILLE PATTERN DOTS-137 +2846 ; [*0F2E.0020.0002] # BRAILLE PATTERN DOTS-237 +2847 ; [*0F2F.0020.0002] # BRAILLE PATTERN DOTS-1237 +2848 ; [*0F30.0020.0002] # BRAILLE PATTERN DOTS-47 +2849 ; [*0F31.0020.0002] # BRAILLE PATTERN DOTS-147 +284A ; [*0F32.0020.0002] # BRAILLE PATTERN DOTS-247 +284B ; [*0F33.0020.0002] # BRAILLE PATTERN DOTS-1247 +284C ; [*0F34.0020.0002] # BRAILLE PATTERN DOTS-347 +284D ; [*0F35.0020.0002] # BRAILLE PATTERN DOTS-1347 +284E ; [*0F36.0020.0002] # BRAILLE PATTERN DOTS-2347 +284F ; [*0F37.0020.0002] # BRAILLE PATTERN DOTS-12347 +2850 ; [*0F38.0020.0002] # BRAILLE PATTERN DOTS-57 +2851 ; [*0F39.0020.0002] # BRAILLE PATTERN DOTS-157 +2852 ; [*0F3A.0020.0002] # BRAILLE PATTERN DOTS-257 +2853 ; [*0F3B.0020.0002] # BRAILLE PATTERN DOTS-1257 +2854 ; [*0F3C.0020.0002] # BRAILLE PATTERN DOTS-357 +2855 ; [*0F3D.0020.0002] # BRAILLE PATTERN DOTS-1357 +2856 ; [*0F3E.0020.0002] # BRAILLE PATTERN DOTS-2357 +2857 ; [*0F3F.0020.0002] # BRAILLE PATTERN DOTS-12357 +2858 ; [*0F40.0020.0002] # BRAILLE PATTERN DOTS-457 +2859 ; [*0F41.0020.0002] # BRAILLE PATTERN DOTS-1457 +285A ; [*0F42.0020.0002] # BRAILLE PATTERN DOTS-2457 +285B ; [*0F43.0020.0002] # BRAILLE PATTERN DOTS-12457 +285C ; [*0F44.0020.0002] # BRAILLE PATTERN DOTS-3457 +285D ; [*0F45.0020.0002] # BRAILLE PATTERN DOTS-13457 +285E ; [*0F46.0020.0002] # BRAILLE PATTERN DOTS-23457 +285F ; [*0F47.0020.0002] # BRAILLE PATTERN DOTS-123457 +2860 ; [*0F48.0020.0002] # BRAILLE PATTERN DOTS-67 +2861 ; [*0F49.0020.0002] # BRAILLE PATTERN DOTS-167 +2862 ; [*0F4A.0020.0002] # BRAILLE PATTERN DOTS-267 +2863 ; [*0F4B.0020.0002] # BRAILLE PATTERN DOTS-1267 +2864 ; [*0F4C.0020.0002] # BRAILLE PATTERN DOTS-367 +2865 ; [*0F4D.0020.0002] # BRAILLE PATTERN DOTS-1367 +2866 ; [*0F4E.0020.0002] # BRAILLE PATTERN DOTS-2367 +2867 ; [*0F4F.0020.0002] # BRAILLE PATTERN DOTS-12367 +2868 ; [*0F50.0020.0002] # BRAILLE PATTERN DOTS-467 +2869 ; [*0F51.0020.0002] # BRAILLE PATTERN DOTS-1467 +286A ; [*0F52.0020.0002] # BRAILLE PATTERN DOTS-2467 +286B ; [*0F53.0020.0002] # BRAILLE PATTERN DOTS-12467 +286C ; [*0F54.0020.0002] # BRAILLE PATTERN DOTS-3467 +286D ; [*0F55.0020.0002] # BRAILLE PATTERN DOTS-13467 +286E ; [*0F56.0020.0002] # BRAILLE PATTERN DOTS-23467 +286F ; [*0F57.0020.0002] # BRAILLE PATTERN DOTS-123467 +2870 ; [*0F58.0020.0002] # BRAILLE PATTERN DOTS-567 +2871 ; [*0F59.0020.0002] # BRAILLE PATTERN DOTS-1567 +2872 ; [*0F5A.0020.0002] # BRAILLE PATTERN DOTS-2567 +2873 ; [*0F5B.0020.0002] # BRAILLE PATTERN DOTS-12567 +2874 ; [*0F5C.0020.0002] # BRAILLE PATTERN DOTS-3567 +2875 ; [*0F5D.0020.0002] # BRAILLE PATTERN DOTS-13567 +2876 ; [*0F5E.0020.0002] # BRAILLE PATTERN DOTS-23567 +2877 ; [*0F5F.0020.0002] # BRAILLE PATTERN DOTS-123567 +2878 ; [*0F60.0020.0002] # BRAILLE PATTERN DOTS-4567 +2879 ; [*0F61.0020.0002] # BRAILLE PATTERN DOTS-14567 +287A ; [*0F62.0020.0002] # BRAILLE PATTERN DOTS-24567 +287B ; [*0F63.0020.0002] # BRAILLE PATTERN DOTS-124567 +287C ; [*0F64.0020.0002] # BRAILLE PATTERN DOTS-34567 +287D ; [*0F65.0020.0002] # BRAILLE PATTERN DOTS-134567 +287E ; [*0F66.0020.0002] # BRAILLE PATTERN DOTS-234567 +287F ; [*0F67.0020.0002] # BRAILLE PATTERN DOTS-1234567 +2880 ; [*0F68.0020.0002] # BRAILLE PATTERN DOTS-8 +2881 ; [*0F69.0020.0002] # BRAILLE PATTERN DOTS-18 +2882 ; [*0F6A.0020.0002] # BRAILLE PATTERN DOTS-28 +2883 ; [*0F6B.0020.0002] # BRAILLE PATTERN DOTS-128 +2884 ; [*0F6C.0020.0002] # BRAILLE PATTERN DOTS-38 +2885 ; [*0F6D.0020.0002] # BRAILLE PATTERN DOTS-138 +2886 ; [*0F6E.0020.0002] # BRAILLE PATTERN DOTS-238 +2887 ; [*0F6F.0020.0002] # BRAILLE PATTERN DOTS-1238 +2888 ; [*0F70.0020.0002] # BRAILLE PATTERN DOTS-48 +2889 ; [*0F71.0020.0002] # BRAILLE PATTERN DOTS-148 +288A ; [*0F72.0020.0002] # BRAILLE PATTERN DOTS-248 +288B ; [*0F73.0020.0002] # BRAILLE PATTERN DOTS-1248 +288C ; [*0F74.0020.0002] # BRAILLE PATTERN DOTS-348 +288D ; [*0F75.0020.0002] # BRAILLE PATTERN DOTS-1348 +288E ; [*0F76.0020.0002] # BRAILLE PATTERN DOTS-2348 +288F ; [*0F77.0020.0002] # BRAILLE PATTERN DOTS-12348 +2890 ; [*0F78.0020.0002] # BRAILLE PATTERN DOTS-58 +2891 ; [*0F79.0020.0002] # BRAILLE PATTERN DOTS-158 +2892 ; [*0F7A.0020.0002] # BRAILLE PATTERN DOTS-258 +2893 ; [*0F7B.0020.0002] # BRAILLE PATTERN DOTS-1258 +2894 ; [*0F7C.0020.0002] # BRAILLE PATTERN DOTS-358 +2895 ; [*0F7D.0020.0002] # BRAILLE PATTERN DOTS-1358 +2896 ; [*0F7E.0020.0002] # BRAILLE PATTERN DOTS-2358 +2897 ; [*0F7F.0020.0002] # BRAILLE PATTERN DOTS-12358 +2898 ; [*0F80.0020.0002] # BRAILLE PATTERN DOTS-458 +2899 ; [*0F81.0020.0002] # BRAILLE PATTERN DOTS-1458 +289A ; [*0F82.0020.0002] # BRAILLE PATTERN DOTS-2458 +289B ; [*0F83.0020.0002] # BRAILLE PATTERN DOTS-12458 +289C ; [*0F84.0020.0002] # BRAILLE PATTERN DOTS-3458 +289D ; [*0F85.0020.0002] # BRAILLE PATTERN DOTS-13458 +289E ; [*0F86.0020.0002] # BRAILLE PATTERN DOTS-23458 +289F ; [*0F87.0020.0002] # BRAILLE PATTERN DOTS-123458 +28A0 ; [*0F88.0020.0002] # BRAILLE PATTERN DOTS-68 +28A1 ; [*0F89.0020.0002] # BRAILLE PATTERN DOTS-168 +28A2 ; [*0F8A.0020.0002] # BRAILLE PATTERN DOTS-268 +28A3 ; [*0F8B.0020.0002] # BRAILLE PATTERN DOTS-1268 +28A4 ; [*0F8C.0020.0002] # BRAILLE PATTERN DOTS-368 +28A5 ; [*0F8D.0020.0002] # BRAILLE PATTERN DOTS-1368 +28A6 ; [*0F8E.0020.0002] # BRAILLE PATTERN DOTS-2368 +28A7 ; [*0F8F.0020.0002] # BRAILLE PATTERN DOTS-12368 +28A8 ; [*0F90.0020.0002] # BRAILLE PATTERN DOTS-468 +28A9 ; [*0F91.0020.0002] # BRAILLE PATTERN DOTS-1468 +28AA ; [*0F92.0020.0002] # BRAILLE PATTERN DOTS-2468 +28AB ; [*0F93.0020.0002] # BRAILLE PATTERN DOTS-12468 +28AC ; [*0F94.0020.0002] # BRAILLE PATTERN DOTS-3468 +28AD ; [*0F95.0020.0002] # BRAILLE PATTERN DOTS-13468 +28AE ; [*0F96.0020.0002] # BRAILLE PATTERN DOTS-23468 +28AF ; [*0F97.0020.0002] # BRAILLE PATTERN DOTS-123468 +28B0 ; [*0F98.0020.0002] # BRAILLE PATTERN DOTS-568 +28B1 ; [*0F99.0020.0002] # BRAILLE PATTERN DOTS-1568 +28B2 ; [*0F9A.0020.0002] # BRAILLE PATTERN DOTS-2568 +28B3 ; [*0F9B.0020.0002] # BRAILLE PATTERN DOTS-12568 +28B4 ; [*0F9C.0020.0002] # BRAILLE PATTERN DOTS-3568 +28B5 ; [*0F9D.0020.0002] # BRAILLE PATTERN DOTS-13568 +28B6 ; [*0F9E.0020.0002] # BRAILLE PATTERN DOTS-23568 +28B7 ; [*0F9F.0020.0002] # BRAILLE PATTERN DOTS-123568 +28B8 ; [*0FA0.0020.0002] # BRAILLE PATTERN DOTS-4568 +28B9 ; [*0FA1.0020.0002] # BRAILLE PATTERN DOTS-14568 +28BA ; [*0FA2.0020.0002] # BRAILLE PATTERN DOTS-24568 +28BB ; [*0FA3.0020.0002] # BRAILLE PATTERN DOTS-124568 +28BC ; [*0FA4.0020.0002] # BRAILLE PATTERN DOTS-34568 +28BD ; [*0FA5.0020.0002] # BRAILLE PATTERN DOTS-134568 +28BE ; [*0FA6.0020.0002] # BRAILLE PATTERN DOTS-234568 +28BF ; [*0FA7.0020.0002] # BRAILLE PATTERN DOTS-1234568 +28C0 ; [*0FA8.0020.0002] # BRAILLE PATTERN DOTS-78 +28C1 ; [*0FA9.0020.0002] # BRAILLE PATTERN DOTS-178 +28C2 ; [*0FAA.0020.0002] # BRAILLE PATTERN DOTS-278 +28C3 ; [*0FAB.0020.0002] # BRAILLE PATTERN DOTS-1278 +28C4 ; [*0FAC.0020.0002] # BRAILLE PATTERN DOTS-378 +28C5 ; [*0FAD.0020.0002] # BRAILLE PATTERN DOTS-1378 +28C6 ; [*0FAE.0020.0002] # BRAILLE PATTERN DOTS-2378 +28C7 ; [*0FAF.0020.0002] # BRAILLE PATTERN DOTS-12378 +28C8 ; [*0FB0.0020.0002] # BRAILLE PATTERN DOTS-478 +28C9 ; [*0FB1.0020.0002] # BRAILLE PATTERN DOTS-1478 +28CA ; [*0FB2.0020.0002] # BRAILLE PATTERN DOTS-2478 +28CB ; [*0FB3.0020.0002] # BRAILLE PATTERN DOTS-12478 +28CC ; [*0FB4.0020.0002] # BRAILLE PATTERN DOTS-3478 +28CD ; [*0FB5.0020.0002] # BRAILLE PATTERN DOTS-13478 +28CE ; [*0FB6.0020.0002] # BRAILLE PATTERN DOTS-23478 +28CF ; [*0FB7.0020.0002] # BRAILLE PATTERN DOTS-123478 +28D0 ; [*0FB8.0020.0002] # BRAILLE PATTERN DOTS-578 +28D1 ; [*0FB9.0020.0002] # BRAILLE PATTERN DOTS-1578 +28D2 ; [*0FBA.0020.0002] # BRAILLE PATTERN DOTS-2578 +28D3 ; [*0FBB.0020.0002] # BRAILLE PATTERN DOTS-12578 +28D4 ; [*0FBC.0020.0002] # BRAILLE PATTERN DOTS-3578 +28D5 ; [*0FBD.0020.0002] # BRAILLE PATTERN DOTS-13578 +28D6 ; [*0FBE.0020.0002] # BRAILLE PATTERN DOTS-23578 +28D7 ; [*0FBF.0020.0002] # BRAILLE PATTERN DOTS-123578 +28D8 ; [*0FC0.0020.0002] # BRAILLE PATTERN DOTS-4578 +28D9 ; [*0FC1.0020.0002] # BRAILLE PATTERN DOTS-14578 +28DA ; [*0FC2.0020.0002] # BRAILLE PATTERN DOTS-24578 +28DB ; [*0FC3.0020.0002] # BRAILLE PATTERN DOTS-124578 +28DC ; [*0FC4.0020.0002] # BRAILLE PATTERN DOTS-34578 +28DD ; [*0FC5.0020.0002] # BRAILLE PATTERN DOTS-134578 +28DE ; [*0FC6.0020.0002] # BRAILLE PATTERN DOTS-234578 +28DF ; [*0FC7.0020.0002] # BRAILLE PATTERN DOTS-1234578 +28E0 ; [*0FC8.0020.0002] # BRAILLE PATTERN DOTS-678 +28E1 ; [*0FC9.0020.0002] # BRAILLE PATTERN DOTS-1678 +28E2 ; [*0FCA.0020.0002] # BRAILLE PATTERN DOTS-2678 +28E3 ; [*0FCB.0020.0002] # BRAILLE PATTERN DOTS-12678 +28E4 ; [*0FCC.0020.0002] # BRAILLE PATTERN DOTS-3678 +28E5 ; [*0FCD.0020.0002] # BRAILLE PATTERN DOTS-13678 +28E6 ; [*0FCE.0020.0002] # BRAILLE PATTERN DOTS-23678 +28E7 ; [*0FCF.0020.0002] # BRAILLE PATTERN DOTS-123678 +28E8 ; [*0FD0.0020.0002] # BRAILLE PATTERN DOTS-4678 +28E9 ; [*0FD1.0020.0002] # BRAILLE PATTERN DOTS-14678 +28EA ; [*0FD2.0020.0002] # BRAILLE PATTERN DOTS-24678 +28EB ; [*0FD3.0020.0002] # BRAILLE PATTERN DOTS-124678 +28EC ; [*0FD4.0020.0002] # BRAILLE PATTERN DOTS-34678 +28ED ; [*0FD5.0020.0002] # BRAILLE PATTERN DOTS-134678 +28EE ; [*0FD6.0020.0002] # BRAILLE PATTERN DOTS-234678 +28EF ; [*0FD7.0020.0002] # BRAILLE PATTERN DOTS-1234678 +28F0 ; [*0FD8.0020.0002] # BRAILLE PATTERN DOTS-5678 +28F1 ; [*0FD9.0020.0002] # BRAILLE PATTERN DOTS-15678 +28F2 ; [*0FDA.0020.0002] # BRAILLE PATTERN DOTS-25678 +28F3 ; [*0FDB.0020.0002] # BRAILLE PATTERN DOTS-125678 +28F4 ; [*0FDC.0020.0002] # BRAILLE PATTERN DOTS-35678 +28F5 ; [*0FDD.0020.0002] # BRAILLE PATTERN DOTS-135678 +28F6 ; [*0FDE.0020.0002] # BRAILLE PATTERN DOTS-235678 +28F7 ; [*0FDF.0020.0002] # BRAILLE PATTERN DOTS-1235678 +28F8 ; [*0FE0.0020.0002] # BRAILLE PATTERN DOTS-45678 +28F9 ; [*0FE1.0020.0002] # BRAILLE PATTERN DOTS-145678 +28FA ; [*0FE2.0020.0002] # BRAILLE PATTERN DOTS-245678 +28FB ; [*0FE3.0020.0002] # BRAILLE PATTERN DOTS-1245678 +28FC ; [*0FE4.0020.0002] # BRAILLE PATTERN DOTS-345678 +28FD ; [*0FE5.0020.0002] # BRAILLE PATTERN DOTS-1345678 +28FE ; [*0FE6.0020.0002] # BRAILLE PATTERN DOTS-2345678 +28FF ; [*0FE7.0020.0002] # BRAILLE PATTERN DOTS-12345678 +2900 ; [*0C06.0020.0002] # RIGHTWARDS TWO-HEADED ARROW WITH VERTICAL STROKE +2901 ; [*0C07.0020.0002] # RIGHTWARDS TWO-HEADED ARROW WITH DOUBLE VERTICAL STROKE +2902 ; [*0C08.0020.0002] # LEFTWARDS DOUBLE ARROW WITH VERTICAL STROKE +2903 ; [*0C09.0020.0002] # RIGHTWARDS DOUBLE ARROW WITH VERTICAL STROKE +2904 ; [*0C0A.0020.0002] # LEFT RIGHT DOUBLE ARROW WITH VERTICAL STROKE +2905 ; [*0C0B.0020.0002] # RIGHTWARDS TWO-HEADED ARROW FROM BAR +2906 ; [*0C0C.0020.0002] # LEFTWARDS DOUBLE ARROW FROM BAR +2907 ; [*0C0D.0020.0002] # RIGHTWARDS DOUBLE ARROW FROM BAR +2908 ; [*0C0E.0020.0002] # DOWNWARDS ARROW WITH HORIZONTAL STROKE +2909 ; [*0C0F.0020.0002] # UPWARDS ARROW WITH HORIZONTAL STROKE +290A ; [*0C10.0020.0002] # UPWARDS TRIPLE ARROW +290B ; [*0C11.0020.0002] # DOWNWARDS TRIPLE ARROW +290C ; [*0C12.0020.0002] # LEFTWARDS DOUBLE DASH ARROW +290D ; [*0C13.0020.0002] # RIGHTWARDS DOUBLE DASH ARROW +290E ; [*0C14.0020.0002] # LEFTWARDS TRIPLE DASH ARROW +290F ; [*0C15.0020.0002] # RIGHTWARDS TRIPLE DASH ARROW +2910 ; [*0C16.0020.0002] # RIGHTWARDS TWO-HEADED TRIPLE DASH ARROW +2911 ; [*0C17.0020.0002] # RIGHTWARDS ARROW WITH DOTTED STEM +2912 ; [*0C18.0020.0002] # UPWARDS ARROW TO BAR +2913 ; [*0C19.0020.0002] # DOWNWARDS ARROW TO BAR +2914 ; [*0C1A.0020.0002] # RIGHTWARDS ARROW WITH TAIL WITH VERTICAL STROKE +2915 ; [*0C1B.0020.0002] # RIGHTWARDS ARROW WITH TAIL WITH DOUBLE VERTICAL STROKE +2916 ; [*0C1C.0020.0002] # RIGHTWARDS TWO-HEADED ARROW WITH TAIL +2917 ; [*0C1D.0020.0002] # RIGHTWARDS TWO-HEADED ARROW WITH TAIL WITH VERTICAL STROKE +2918 ; [*0C1E.0020.0002] # RIGHTWARDS TWO-HEADED ARROW WITH TAIL WITH DOUBLE VERTICAL STROKE +2919 ; [*0C1F.0020.0002] # LEFTWARDS ARROW-TAIL +291A ; [*0C20.0020.0002] # RIGHTWARDS ARROW-TAIL +291B ; [*0C21.0020.0002] # LEFTWARDS DOUBLE ARROW-TAIL +291C ; [*0C22.0020.0002] # RIGHTWARDS DOUBLE ARROW-TAIL +291D ; [*0C23.0020.0002] # LEFTWARDS ARROW TO BLACK DIAMOND +291E ; [*0C24.0020.0002] # RIGHTWARDS ARROW TO BLACK DIAMOND +291F ; [*0C25.0020.0002] # LEFTWARDS ARROW FROM BAR TO BLACK DIAMOND +2920 ; [*0C26.0020.0002] # RIGHTWARDS ARROW FROM BAR TO BLACK DIAMOND +2921 ; [*0C27.0020.0002] # NORTH WEST AND SOUTH EAST ARROW +2922 ; [*0C28.0020.0002] # NORTH EAST AND SOUTH WEST ARROW +2923 ; [*0C29.0020.0002] # NORTH WEST ARROW WITH HOOK +2924 ; [*0C2A.0020.0002] # NORTH EAST ARROW WITH HOOK +2925 ; [*0C2B.0020.0002] # SOUTH EAST ARROW WITH HOOK +2926 ; [*0C2C.0020.0002] # SOUTH WEST ARROW WITH HOOK +2927 ; [*0C2D.0020.0002] # NORTH WEST ARROW AND NORTH EAST ARROW +2928 ; [*0C2E.0020.0002] # NORTH EAST ARROW AND SOUTH EAST ARROW +2929 ; [*0C2F.0020.0002] # SOUTH EAST ARROW AND SOUTH WEST ARROW +292A ; [*0C30.0020.0002] # SOUTH WEST ARROW AND NORTH WEST ARROW +292B ; [*0C31.0020.0002] # RISING DIAGONAL CROSSING FALLING DIAGONAL +292C ; [*0C32.0020.0002] # FALLING DIAGONAL CROSSING RISING DIAGONAL +292D ; [*0C33.0020.0002] # SOUTH EAST ARROW CROSSING NORTH EAST ARROW +292E ; [*0C34.0020.0002] # NORTH EAST ARROW CROSSING SOUTH EAST ARROW +292F ; [*0C35.0020.0002] # FALLING DIAGONAL CROSSING NORTH EAST ARROW +2930 ; [*0C36.0020.0002] # RISING DIAGONAL CROSSING SOUTH EAST ARROW +2931 ; [*0C37.0020.0002] # NORTH EAST ARROW CROSSING NORTH WEST ARROW +2932 ; [*0C38.0020.0002] # NORTH WEST ARROW CROSSING NORTH EAST ARROW +2933 ; [*0C39.0020.0002] # WAVE ARROW POINTING DIRECTLY RIGHT +2934 ; [*0C3A.0020.0002] # ARROW POINTING RIGHTWARDS THEN CURVING UPWARDS +2935 ; [*0C3B.0020.0002] # ARROW POINTING RIGHTWARDS THEN CURVING DOWNWARDS +2936 ; [*0C3C.0020.0002] # ARROW POINTING DOWNWARDS THEN CURVING LEFTWARDS +2937 ; [*0C3D.0020.0002] # ARROW POINTING DOWNWARDS THEN CURVING RIGHTWARDS +2938 ; [*0C3E.0020.0002] # RIGHT-SIDE ARC CLOCKWISE ARROW +2939 ; [*0C3F.0020.0002] # LEFT-SIDE ARC ANTICLOCKWISE ARROW +293A ; [*0C40.0020.0002] # TOP ARC ANTICLOCKWISE ARROW +293B ; [*0C41.0020.0002] # BOTTOM ARC ANTICLOCKWISE ARROW +293C ; [*0C42.0020.0002] # TOP ARC CLOCKWISE ARROW WITH MINUS +293D ; [*0C43.0020.0002] # TOP ARC ANTICLOCKWISE ARROW WITH PLUS +293E ; [*0C44.0020.0002] # LOWER RIGHT SEMICIRCULAR CLOCKWISE ARROW +293F ; [*0C45.0020.0002] # LOWER LEFT SEMICIRCULAR ANTICLOCKWISE ARROW +2940 ; [*0C46.0020.0002] # ANTICLOCKWISE CLOSED CIRCLE ARROW +2941 ; [*0C47.0020.0002] # CLOCKWISE CLOSED CIRCLE ARROW +2942 ; [*0C48.0020.0002] # RIGHTWARDS ARROW ABOVE SHORT LEFTWARDS ARROW +2943 ; [*0C49.0020.0002] # LEFTWARDS ARROW ABOVE SHORT RIGHTWARDS ARROW +2944 ; [*0C4A.0020.0002] # SHORT RIGHTWARDS ARROW ABOVE LEFTWARDS ARROW +2945 ; [*0C4B.0020.0002] # RIGHTWARDS ARROW WITH PLUS BELOW +2946 ; [*0C4C.0020.0002] # LEFTWARDS ARROW WITH PLUS BELOW +2947 ; [*0C4D.0020.0002] # RIGHTWARDS ARROW THROUGH X +2948 ; [*0C4E.0020.0002] # LEFT RIGHT ARROW THROUGH SMALL CIRCLE +2949 ; [*0C4F.0020.0002] # UPWARDS TWO-HEADED ARROW FROM SMALL CIRCLE +294A ; [*0C50.0020.0002] # LEFT BARB UP RIGHT BARB DOWN HARPOON +294B ; [*0C51.0020.0002] # LEFT BARB DOWN RIGHT BARB UP HARPOON +294C ; [*0C52.0020.0002] # UP BARB RIGHT DOWN BARB LEFT HARPOON +294D ; [*0C53.0020.0002] # UP BARB LEFT DOWN BARB RIGHT HARPOON +294E ; [*0C54.0020.0002] # LEFT BARB UP RIGHT BARB UP HARPOON +294F ; [*0C55.0020.0002] # UP BARB RIGHT DOWN BARB RIGHT HARPOON +2950 ; [*0C56.0020.0002] # LEFT BARB DOWN RIGHT BARB DOWN HARPOON +2951 ; [*0C57.0020.0002] # UP BARB LEFT DOWN BARB LEFT HARPOON +2952 ; [*0C58.0020.0002] # LEFTWARDS HARPOON WITH BARB UP TO BAR +2953 ; [*0C59.0020.0002] # RIGHTWARDS HARPOON WITH BARB UP TO BAR +2954 ; [*0C5A.0020.0002] # UPWARDS HARPOON WITH BARB RIGHT TO BAR +2955 ; [*0C5B.0020.0002] # DOWNWARDS HARPOON WITH BARB RIGHT TO BAR +2956 ; [*0C5C.0020.0002] # LEFTWARDS HARPOON WITH BARB DOWN TO BAR +2957 ; [*0C5D.0020.0002] # RIGHTWARDS HARPOON WITH BARB DOWN TO BAR +2958 ; [*0C5E.0020.0002] # UPWARDS HARPOON WITH BARB LEFT TO BAR +2959 ; [*0C5F.0020.0002] # DOWNWARDS HARPOON WITH BARB LEFT TO BAR +295A ; [*0C60.0020.0002] # LEFTWARDS HARPOON WITH BARB UP FROM BAR +295B ; [*0C61.0020.0002] # RIGHTWARDS HARPOON WITH BARB UP FROM BAR +295C ; [*0C62.0020.0002] # UPWARDS HARPOON WITH BARB RIGHT FROM BAR +295D ; [*0C63.0020.0002] # DOWNWARDS HARPOON WITH BARB RIGHT FROM BAR +295E ; [*0C64.0020.0002] # LEFTWARDS HARPOON WITH BARB DOWN FROM BAR +295F ; [*0C65.0020.0002] # RIGHTWARDS HARPOON WITH BARB DOWN FROM BAR +2960 ; [*0C66.0020.0002] # UPWARDS HARPOON WITH BARB LEFT FROM BAR +2961 ; [*0C67.0020.0002] # DOWNWARDS HARPOON WITH BARB LEFT FROM BAR +2962 ; [*0C68.0020.0002] # LEFTWARDS HARPOON WITH BARB UP ABOVE LEFTWARDS HARPOON WITH BARB DOWN +2963 ; [*0C69.0020.0002] # UPWARDS HARPOON WITH BARB LEFT BESIDE UPWARDS HARPOON WITH BARB RIGHT +2964 ; [*0C6A.0020.0002] # RIGHTWARDS HARPOON WITH BARB UP ABOVE RIGHTWARDS HARPOON WITH BARB DOWN +2965 ; [*0C6B.0020.0002] # DOWNWARDS HARPOON WITH BARB LEFT BESIDE DOWNWARDS HARPOON WITH BARB RIGHT +2966 ; [*0C6C.0020.0002] # LEFTWARDS HARPOON WITH BARB UP ABOVE RIGHTWARDS HARPOON WITH BARB UP +2967 ; [*0C6D.0020.0002] # LEFTWARDS HARPOON WITH BARB DOWN ABOVE RIGHTWARDS HARPOON WITH BARB DOWN +2968 ; [*0C6E.0020.0002] # RIGHTWARDS HARPOON WITH BARB UP ABOVE LEFTWARDS HARPOON WITH BARB UP +2969 ; [*0C6F.0020.0002] # RIGHTWARDS HARPOON WITH BARB DOWN ABOVE LEFTWARDS HARPOON WITH BARB DOWN +296A ; [*0C70.0020.0002] # LEFTWARDS HARPOON WITH BARB UP ABOVE LONG DASH +296B ; [*0C71.0020.0002] # LEFTWARDS HARPOON WITH BARB DOWN BELOW LONG DASH +296C ; [*0C72.0020.0002] # RIGHTWARDS HARPOON WITH BARB UP ABOVE LONG DASH +296D ; [*0C73.0020.0002] # RIGHTWARDS HARPOON WITH BARB DOWN BELOW LONG DASH +296E ; [*0C74.0020.0002] # UPWARDS HARPOON WITH BARB LEFT BESIDE DOWNWARDS HARPOON WITH BARB RIGHT +296F ; [*0C75.0020.0002] # DOWNWARDS HARPOON WITH BARB LEFT BESIDE UPWARDS HARPOON WITH BARB RIGHT +2970 ; [*0C76.0020.0002] # RIGHT DOUBLE ARROW WITH ROUNDED HEAD +2971 ; [*0C77.0020.0002] # EQUALS SIGN ABOVE RIGHTWARDS ARROW +2972 ; [*0C78.0020.0002] # TILDE OPERATOR ABOVE RIGHTWARDS ARROW +2973 ; [*0C79.0020.0002] # LEFTWARDS ARROW ABOVE TILDE OPERATOR +2974 ; [*0C7A.0020.0002] # RIGHTWARDS ARROW ABOVE TILDE OPERATOR +2975 ; [*0C7B.0020.0002] # RIGHTWARDS ARROW ABOVE ALMOST EQUAL TO +2976 ; [*0C7C.0020.0002] # LESS-THAN ABOVE LEFTWARDS ARROW +2977 ; [*0C7D.0020.0002] # LEFTWARDS ARROW THROUGH LESS-THAN +2978 ; [*0C7E.0020.0002] # GREATER-THAN ABOVE RIGHTWARDS ARROW +2979 ; [*0C7F.0020.0002] # SUBSET ABOVE RIGHTWARDS ARROW +297A ; [*0C80.0020.0002] # LEFTWARDS ARROW THROUGH SUBSET +297B ; [*0C81.0020.0002] # SUPERSET ABOVE LEFTWARDS ARROW +297C ; [*0C82.0020.0002] # LEFT FISH TAIL +297D ; [*0C83.0020.0002] # RIGHT FISH TAIL +297E ; [*0C84.0020.0002] # UP FISH TAIL +297F ; [*0C85.0020.0002] # DOWN FISH TAIL +2980 ; [*0C86.0020.0002] # TRIPLE VERTICAL BAR DELIMITER +2981 ; [*0C87.0020.0002] # Z NOTATION SPOT +2982 ; [*0C88.0020.0002] # Z NOTATION TYPE COLON +2983 ; [*033C.0020.0002] # LEFT WHITE CURLY BRACKET +2984 ; [*033D.0020.0002] # RIGHT WHITE CURLY BRACKET +2985 ; [*033E.0020.0002] # LEFT WHITE PARENTHESIS +2986 ; [*033F.0020.0002] # RIGHT WHITE PARENTHESIS +2987 ; [*0340.0020.0002] # Z NOTATION LEFT IMAGE BRACKET +2988 ; [*0341.0020.0002] # Z NOTATION RIGHT IMAGE BRACKET +2989 ; [*0342.0020.0002] # Z NOTATION LEFT BINDING BRACKET +298A ; [*0343.0020.0002] # Z NOTATION RIGHT BINDING BRACKET +298B ; [*0344.0020.0002] # LEFT SQUARE BRACKET WITH UNDERBAR +298C ; [*0345.0020.0002] # RIGHT SQUARE BRACKET WITH UNDERBAR +298D ; [*0346.0020.0002] # LEFT SQUARE BRACKET WITH TICK IN TOP CORNER +298E ; [*0347.0020.0002] # RIGHT SQUARE BRACKET WITH TICK IN BOTTOM CORNER +298F ; [*0348.0020.0002] # LEFT SQUARE BRACKET WITH TICK IN BOTTOM CORNER +2990 ; [*0349.0020.0002] # RIGHT SQUARE BRACKET WITH TICK IN TOP CORNER +2991 ; [*034A.0020.0002] # LEFT ANGLE BRACKET WITH DOT +2992 ; [*034B.0020.0002] # RIGHT ANGLE BRACKET WITH DOT +2993 ; [*034C.0020.0002] # LEFT ARC LESS-THAN BRACKET +2994 ; [*034D.0020.0002] # RIGHT ARC GREATER-THAN BRACKET +2995 ; [*034E.0020.0002] # DOUBLE LEFT ARC GREATER-THAN BRACKET +2996 ; [*034F.0020.0002] # DOUBLE RIGHT ARC LESS-THAN BRACKET +2997 ; [*0350.0020.0002] # LEFT BLACK TORTOISE SHELL BRACKET +2998 ; [*0351.0020.0002] # RIGHT BLACK TORTOISE SHELL BRACKET +2999 ; [*0C89.0020.0002] # DOTTED FENCE +299A ; [*0C8A.0020.0002] # VERTICAL ZIGZAG LINE +299B ; [*0C8B.0020.0002] # MEASURED ANGLE OPENING LEFT +299C ; [*0C8C.0020.0002] # RIGHT ANGLE VARIANT WITH SQUARE +299D ; [*0C8D.0020.0002] # MEASURED RIGHT ANGLE WITH DOT +299E ; [*0C8E.0020.0002] # ANGLE WITH S INSIDE +299F ; [*0C8F.0020.0002] # ACUTE ANGLE +29A0 ; [*0C90.0020.0002] # SPHERICAL ANGLE OPENING LEFT +29A1 ; [*0C91.0020.0002] # SPHERICAL ANGLE OPENING UP +29A2 ; [*0C92.0020.0002] # TURNED ANGLE +29A3 ; [*0C93.0020.0002] # REVERSED ANGLE +29A4 ; [*0C94.0020.0002] # ANGLE WITH UNDERBAR +29A5 ; [*0C95.0020.0002] # REVERSED ANGLE WITH UNDERBAR +29A6 ; [*0C96.0020.0002] # OBLIQUE ANGLE OPENING UP +29A7 ; [*0C97.0020.0002] # OBLIQUE ANGLE OPENING DOWN +29A8 ; [*0C98.0020.0002] # MEASURED ANGLE WITH OPEN ARM ENDING IN ARROW POINTING UP AND RIGHT +29A9 ; [*0C99.0020.0002] # MEASURED ANGLE WITH OPEN ARM ENDING IN ARROW POINTING UP AND LEFT +29AA ; [*0C9A.0020.0002] # MEASURED ANGLE WITH OPEN ARM ENDING IN ARROW POINTING DOWN AND RIGHT +29AB ; [*0C9B.0020.0002] # MEASURED ANGLE WITH OPEN ARM ENDING IN ARROW POINTING DOWN AND LEFT +29AC ; [*0C9C.0020.0002] # MEASURED ANGLE WITH OPEN ARM ENDING IN ARROW POINTING RIGHT AND UP +29AD ; [*0C9D.0020.0002] # MEASURED ANGLE WITH OPEN ARM ENDING IN ARROW POINTING LEFT AND UP +29AE ; [*0C9E.0020.0002] # MEASURED ANGLE WITH OPEN ARM ENDING IN ARROW POINTING RIGHT AND DOWN +29AF ; [*0C9F.0020.0002] # MEASURED ANGLE WITH OPEN ARM ENDING IN ARROW POINTING LEFT AND DOWN +29B0 ; [*0CA0.0020.0002] # REVERSED EMPTY SET +29B1 ; [*0CA1.0020.0002] # EMPTY SET WITH OVERBAR +29B2 ; [*0CA2.0020.0002] # EMPTY SET WITH SMALL CIRCLE ABOVE +29B3 ; [*0CA3.0020.0002] # EMPTY SET WITH RIGHT ARROW ABOVE +29B4 ; [*0CA4.0020.0002] # EMPTY SET WITH LEFT ARROW ABOVE +29B5 ; [*0CA5.0020.0002] # CIRCLE WITH HORIZONTAL BAR +29B6 ; [*0CA6.0020.0002] # CIRCLED VERTICAL BAR +29B7 ; [*0CA7.0020.0002] # CIRCLED PARALLEL +29B8 ; [*0CA8.0020.0002] # CIRCLED REVERSE SOLIDUS +29B9 ; [*0CA9.0020.0002] # CIRCLED PERPENDICULAR +29BA ; [*0CAA.0020.0002] # CIRCLE DIVIDED BY HORIZONTAL BAR AND TOP HALF DIVIDED BY VERTICAL BAR +29BB ; [*0CAB.0020.0002] # CIRCLE WITH SUPERIMPOSED X +29BC ; [*0CAC.0020.0002] # CIRCLED ANTICLOCKWISE-ROTATED DIVISION SIGN +29BD ; [*0CAD.0020.0002] # UP ARROW THROUGH CIRCLE +29BE ; [*0CAE.0020.0002] # CIRCLED WHITE BULLET +29BF ; [*0CAF.0020.0002] # CIRCLED BULLET +29C0 ; [*0CB0.0020.0002] # CIRCLED LESS-THAN +29C1 ; [*0CB1.0020.0002] # CIRCLED GREATER-THAN +29C2 ; [*0CB2.0020.0002] # CIRCLE WITH SMALL CIRCLE TO THE RIGHT +29C3 ; [*0CB3.0020.0002] # CIRCLE WITH TWO HORIZONTAL STROKES TO THE RIGHT +29C4 ; [*0CB4.0020.0002] # SQUARED RISING DIAGONAL SLASH +29C5 ; [*0CB5.0020.0002] # SQUARED FALLING DIAGONAL SLASH +29C6 ; [*0CB6.0020.0002] # SQUARED ASTERISK +29C7 ; [*0CB7.0020.0002] # SQUARED SMALL CIRCLE +29C8 ; [*0CB8.0020.0002] # SQUARED SQUARE +29C9 ; [*0CB9.0020.0002] # TWO JOINED SQUARES +29CA ; [*0CBA.0020.0002] # TRIANGLE WITH DOT ABOVE +29CB ; [*0CBB.0020.0002] # TRIANGLE WITH UNDERBAR +29CC ; [*0CBC.0020.0002] # S IN TRIANGLE +29CD ; [*0CBD.0020.0002] # TRIANGLE WITH SERIFS AT BOTTOM +29CE ; [*0CBE.0020.0002] # RIGHT TRIANGLE ABOVE LEFT TRIANGLE +29CF ; [*0CBF.0020.0002] # LEFT TRIANGLE BESIDE VERTICAL BAR +29D0 ; [*0CC0.0020.0002] # VERTICAL BAR BESIDE RIGHT TRIANGLE +29D1 ; [*0CC1.0020.0002] # BOWTIE WITH LEFT HALF BLACK +29D2 ; [*0CC2.0020.0002] # BOWTIE WITH RIGHT HALF BLACK +29D3 ; [*0CC3.0020.0002] # BLACK BOWTIE +29D4 ; [*0CC4.0020.0002] # TIMES WITH LEFT HALF BLACK +29D5 ; [*0CC5.0020.0002] # TIMES WITH RIGHT HALF BLACK +29D6 ; [*0CC6.0020.0002] # WHITE HOURGLASS +29D7 ; [*0CC7.0020.0002] # BLACK HOURGLASS +29D8 ; [*0396.0020.0002] # LEFT WIGGLY FENCE +29D9 ; [*0397.0020.0002] # RIGHT WIGGLY FENCE +29DA ; [*0398.0020.0002] # LEFT DOUBLE WIGGLY FENCE +29DB ; [*0399.0020.0002] # RIGHT DOUBLE WIGGLY FENCE +29DC ; [*0CC8.0020.0002] # INCOMPLETE INFINITY +29DD ; [*0CC9.0020.0002] # TIE OVER INFINITY +29DE ; [*0CCA.0020.0002] # INFINITY NEGATED WITH VERTICAL BAR +29DF ; [*0CCB.0020.0002] # DOUBLE-ENDED MULTIMAP +29E0 ; [*0CCC.0020.0002] # SQUARE WITH CONTOURED OUTLINE +29E1 ; [*0CCD.0020.0002] # INCREASES AS +29E2 ; [*0CCE.0020.0002] # SHUFFLE PRODUCT +29E3 ; [*0CCF.0020.0002] # EQUALS SIGN AND SLANTED PARALLEL +29E4 ; [*0CD0.0020.0002] # EQUALS SIGN AND SLANTED PARALLEL WITH TILDE ABOVE +29E5 ; [*0CD1.0020.0002] # IDENTICAL TO AND SLANTED PARALLEL +29E6 ; [*0CD2.0020.0002] # GLEICH STARK +29E7 ; [*0CD3.0020.0002] # THERMODYNAMIC +29E8 ; [*0CD4.0020.0002] # DOWN-POINTING TRIANGLE WITH LEFT HALF BLACK +29E9 ; [*0CD5.0020.0002] # DOWN-POINTING TRIANGLE WITH RIGHT HALF BLACK +29EA ; [*0CD6.0020.0002] # BLACK DIAMOND WITH DOWN ARROW +29EB ; [*0CD7.0020.0002] # BLACK LOZENGE +29EC ; [*0CD8.0020.0002] # WHITE CIRCLE WITH DOWN ARROW +29ED ; [*0CD9.0020.0002] # BLACK CIRCLE WITH DOWN ARROW +29EE ; [*0CDA.0020.0002] # ERROR-BARRED WHITE SQUARE +29EF ; [*0CDB.0020.0002] # ERROR-BARRED BLACK SQUARE +29F0 ; [*0CDC.0020.0002] # ERROR-BARRED WHITE DIAMOND +29F1 ; [*0CDD.0020.0002] # ERROR-BARRED BLACK DIAMOND +29F2 ; [*0CDE.0020.0002] # ERROR-BARRED WHITE CIRCLE +29F3 ; [*0CDF.0020.0002] # ERROR-BARRED BLACK CIRCLE +29F4 ; [*0CE0.0020.0002] # RULE-DELAYED +29F5 ; [*0CE1.0020.0002] # REVERSE SOLIDUS OPERATOR +29F6 ; [*0CE2.0020.0002] # SOLIDUS WITH OVERBAR +29F7 ; [*0CE3.0020.0002] # REVERSE SOLIDUS WITH HORIZONTAL STROKE +29F8 ; [*0CE4.0020.0002] # BIG SOLIDUS +29F9 ; [*0CE5.0020.0002] # BIG REVERSE SOLIDUS +29FA ; [*0CE6.0020.0002] # DOUBLE PLUS +29FB ; [*0CE7.0020.0002] # TRIPLE PLUS +29FC ; [*033A.0020.0002] # LEFT-POINTING CURVED ANGLE BRACKET +29FD ; [*033B.0020.0002] # RIGHT-POINTING CURVED ANGLE BRACKET +29FE ; [*0CE8.0020.0002] # TINY +29FF ; [*0CE9.0020.0002] # MINY +2A00 ; [*0CEA.0020.0002] # N-ARY CIRCLED DOT OPERATOR +2A01 ; [*0CEB.0020.0002] # N-ARY CIRCLED PLUS OPERATOR +2A02 ; [*0CEC.0020.0002] # N-ARY CIRCLED TIMES OPERATOR +2A03 ; [*0CED.0020.0002] # N-ARY UNION OPERATOR WITH DOT +2A04 ; [*0CEE.0020.0002] # N-ARY UNION OPERATOR WITH PLUS +2A05 ; [*0CEF.0020.0002] # N-ARY SQUARE INTERSECTION OPERATOR +2A06 ; [*0CF0.0020.0002] # N-ARY SQUARE UNION OPERATOR +2A07 ; [*0CF1.0020.0002] # TWO LOGICAL AND OPERATOR +2A08 ; [*0CF2.0020.0002] # TWO LOGICAL OR OPERATOR +2A09 ; [*0CF3.0020.0002] # N-ARY TIMES OPERATOR +2A0A ; [*0CF4.0020.0002] # MODULO TWO SUM +2A0B ; [*0CF5.0020.0002] # SUMMATION WITH INTEGRAL +2A0C ; [*068C.0020.0004][*068C.0020.0004][*068C.0020.0004][*068C.0020.0004] # QUADRUPLE INTEGRAL OPERATOR +2A0D ; [*0CF6.0020.0002] # FINITE PART INTEGRAL +2A0E ; [*0CF7.0020.0002] # INTEGRAL WITH DOUBLE STROKE +2A0F ; [*0CF8.0020.0002] # INTEGRAL AVERAGE WITH SLASH +2A10 ; [*0CF9.0020.0002] # CIRCULATION FUNCTION +2A11 ; [*0CFA.0020.0002] # ANTICLOCKWISE INTEGRATION +2A12 ; [*0CFB.0020.0002] # LINE INTEGRATION WITH RECTANGULAR PATH AROUND POLE +2A13 ; [*0CFC.0020.0002] # LINE INTEGRATION WITH SEMICIRCULAR PATH AROUND POLE +2A14 ; [*0CFD.0020.0002] # LINE INTEGRATION NOT INCLUDING THE POLE +2A15 ; [*0CFE.0020.0002] # INTEGRAL AROUND A POINT OPERATOR +2A16 ; [*0CFF.0020.0002] # QUATERNION INTEGRAL OPERATOR +2A17 ; [*0D00.0020.0002] # INTEGRAL WITH LEFTWARDS ARROW WITH HOOK +2A18 ; [*0D01.0020.0002] # INTEGRAL WITH TIMES SIGN +2A19 ; [*0D02.0020.0002] # INTEGRAL WITH INTERSECTION +2A1A ; [*0D03.0020.0002] # INTEGRAL WITH UNION +2A1B ; [*0D04.0020.0002] # INTEGRAL WITH OVERBAR +2A1C ; [*0D05.0020.0002] # INTEGRAL WITH UNDERBAR +2A1D ; [*0D06.0020.0002] # JOIN +2A1E ; [*0D07.0020.0002] # LARGE LEFT TRIANGLE OPERATOR +2A1F ; [*0D08.0020.0002] # Z NOTATION SCHEMA COMPOSITION +2A20 ; [*0D09.0020.0002] # Z NOTATION SCHEMA PIPING +2A21 ; [*0D0A.0020.0002] # Z NOTATION SCHEMA PROJECTION +2A22 ; [*0D0B.0020.0002] # PLUS SIGN WITH SMALL CIRCLE ABOVE +2A23 ; [*0D0C.0020.0002] # PLUS SIGN WITH CIRCUMFLEX ACCENT ABOVE +2A24 ; [*0D0D.0020.0002] # PLUS SIGN WITH TILDE ABOVE +2A25 ; [*0D0E.0020.0002] # PLUS SIGN WITH DOT BELOW +2A26 ; [*0D0F.0020.0002] # PLUS SIGN WITH TILDE BELOW +2A27 ; [*0D10.0020.0002] # PLUS SIGN WITH SUBSCRIPT TWO +2A28 ; [*0D11.0020.0002] # PLUS SIGN WITH BLACK TRIANGLE +2A29 ; [*0D12.0020.0002] # MINUS SIGN WITH COMMA ABOVE +2A2A ; [*0D13.0020.0002] # MINUS SIGN WITH DOT BELOW +2A2B ; [*0D14.0020.0002] # MINUS SIGN WITH FALLING DOTS +2A2C ; [*0D15.0020.0002] # MINUS SIGN WITH RISING DOTS +2A2D ; [*0D16.0020.0002] # PLUS SIGN IN LEFT HALF CIRCLE +2A2E ; [*0D17.0020.0002] # PLUS SIGN IN RIGHT HALF CIRCLE +2A2F ; [*0D18.0020.0002] # VECTOR OR CROSS PRODUCT +2A30 ; [*0D19.0020.0002] # MULTIPLICATION SIGN WITH DOT ABOVE +2A31 ; [*0D1A.0020.0002] # MULTIPLICATION SIGN WITH UNDERBAR +2A32 ; [*0D1B.0020.0002] # SEMIDIRECT PRODUCT WITH BOTTOM CLOSED +2A33 ; [*0D1C.0020.0002] # SMASH PRODUCT +2A34 ; [*0D1D.0020.0002] # MULTIPLICATION SIGN IN LEFT HALF CIRCLE +2A35 ; [*0D1E.0020.0002] # MULTIPLICATION SIGN IN RIGHT HALF CIRCLE +2A36 ; [*0D1F.0020.0002] # CIRCLED MULTIPLICATION SIGN WITH CIRCUMFLEX ACCENT +2A37 ; [*0D20.0020.0002] # MULTIPLICATION SIGN IN DOUBLE CIRCLE +2A38 ; [*0D21.0020.0002] # CIRCLED DIVISION SIGN +2A39 ; [*0D22.0020.0002] # PLUS SIGN IN TRIANGLE +2A3A ; [*0D23.0020.0002] # MINUS SIGN IN TRIANGLE +2A3B ; [*0D24.0020.0002] # MULTIPLICATION SIGN IN TRIANGLE +2A3C ; [*0D25.0020.0002] # INTERIOR PRODUCT +2A3D ; [*0D26.0020.0002] # RIGHTHAND INTERIOR PRODUCT +2A3E ; [*0D27.0020.0002] # Z NOTATION RELATIONAL COMPOSITION +2A3F ; [*0D28.0020.0002] # AMALGAMATION OR COPRODUCT +2A40 ; [*0D29.0020.0002] # INTERSECTION WITH DOT +2A41 ; [*0D2A.0020.0002] # UNION WITH MINUS SIGN +2A42 ; [*0D2B.0020.0002] # UNION WITH OVERBAR +2A43 ; [*0D2C.0020.0002] # INTERSECTION WITH OVERBAR +2A44 ; [*0D2D.0020.0002] # INTERSECTION WITH LOGICAL AND +2A45 ; [*0D2E.0020.0002] # UNION WITH LOGICAL OR +2A46 ; [*0D2F.0020.0002] # UNION ABOVE INTERSECTION +2A47 ; [*0D30.0020.0002] # INTERSECTION ABOVE UNION +2A48 ; [*0D31.0020.0002] # UNION ABOVE BAR ABOVE INTERSECTION +2A49 ; [*0D32.0020.0002] # INTERSECTION ABOVE BAR ABOVE UNION +2A4A ; [*0D33.0020.0002] # UNION BESIDE AND JOINED WITH UNION +2A4B ; [*0D34.0020.0002] # INTERSECTION BESIDE AND JOINED WITH INTERSECTION +2A4C ; [*0D35.0020.0002] # CLOSED UNION WITH SERIFS +2A4D ; [*0D36.0020.0002] # CLOSED INTERSECTION WITH SERIFS +2A4E ; [*0D37.0020.0002] # DOUBLE SQUARE INTERSECTION +2A4F ; [*0D38.0020.0002] # DOUBLE SQUARE UNION +2A50 ; [*0D39.0020.0002] # CLOSED UNION WITH SERIFS AND SMASH PRODUCT +2A51 ; [*0D3A.0020.0002] # LOGICAL AND WITH DOT ABOVE +2A52 ; [*0D3B.0020.0002] # LOGICAL OR WITH DOT ABOVE +2A53 ; [*0D3C.0020.0002] # DOUBLE LOGICAL AND +2A54 ; [*0D3D.0020.0002] # DOUBLE LOGICAL OR +2A55 ; [*0D3E.0020.0002] # TWO INTERSECTING LOGICAL AND +2A56 ; [*0D3F.0020.0002] # TWO INTERSECTING LOGICAL OR +2A57 ; [*0D40.0020.0002] # SLOPING LARGE OR +2A58 ; [*0D41.0020.0002] # SLOPING LARGE AND +2A59 ; [*0D42.0020.0002] # LOGICAL OR OVERLAPPING LOGICAL AND +2A5A ; [*0D43.0020.0002] # LOGICAL AND WITH MIDDLE STEM +2A5B ; [*0D44.0020.0002] # LOGICAL OR WITH MIDDLE STEM +2A5C ; [*0D45.0020.0002] # LOGICAL AND WITH HORIZONTAL DASH +2A5D ; [*0D46.0020.0002] # LOGICAL OR WITH HORIZONTAL DASH +2A5E ; [*0D47.0020.0002] # LOGICAL AND WITH DOUBLE OVERBAR +2A5F ; [*0D48.0020.0002] # LOGICAL AND WITH UNDERBAR +2A60 ; [*0D49.0020.0002] # LOGICAL AND WITH DOUBLE UNDERBAR +2A61 ; [*0D4A.0020.0002] # SMALL VEE WITH UNDERBAR +2A62 ; [*0D4B.0020.0002] # LOGICAL OR WITH DOUBLE OVERBAR +2A63 ; [*0D4C.0020.0002] # LOGICAL OR WITH DOUBLE UNDERBAR +2A64 ; [*0D4D.0020.0002] # Z NOTATION DOMAIN ANTIRESTRICTION +2A65 ; [*0D4E.0020.0002] # Z NOTATION RANGE ANTIRESTRICTION +2A66 ; [*0D4F.0020.0002] # EQUALS SIGN WITH DOT BELOW +2A67 ; [*0D50.0020.0002] # IDENTICAL WITH DOT ABOVE +2A68 ; [*0D51.0020.0002] # TRIPLE HORIZONTAL BAR WITH DOUBLE VERTICAL STROKE +2A69 ; [*0D52.0020.0002] # TRIPLE HORIZONTAL BAR WITH TRIPLE VERTICAL STROKE +2A6A ; [*0D53.0020.0002] # TILDE OPERATOR WITH DOT ABOVE +2A6B ; [*0D54.0020.0002] # TILDE OPERATOR WITH RISING DOTS +2A6C ; [*0D55.0020.0002] # SIMILAR MINUS SIMILAR +2A6D ; [*0D56.0020.0002] # CONGRUENT WITH DOT ABOVE +2A6E ; [*0D57.0020.0002] # EQUALS WITH ASTERISK +2A6F ; [*0D58.0020.0002] # ALMOST EQUAL TO WITH CIRCUMFLEX ACCENT +2A70 ; [*0D59.0020.0002] # APPROXIMATELY EQUAL OR EQUAL TO +2A71 ; [*0D5A.0020.0002] # EQUALS SIGN ABOVE PLUS SIGN +2A72 ; [*0D5B.0020.0002] # PLUS SIGN ABOVE EQUALS SIGN +2A73 ; [*0D5C.0020.0002] # EQUALS SIGN ABOVE TILDE OPERATOR +2A74 ; [*0240.0020.0004][*0240.0020.0004][*066B.0020.0004] # DOUBLE COLON EQUAL +2A75 ; [*066B.0020.0004][*066B.0020.0004] # TWO CONSECUTIVE EQUALS SIGNS +2A76 ; [*066B.0020.0004][*066B.0020.0004][*066B.0020.0004] # THREE CONSECUTIVE EQUALS SIGNS +2A77 ; [*0D5D.0020.0002] # EQUALS SIGN WITH TWO DOTS ABOVE AND TWO DOTS BELOW +2A78 ; [*0D5E.0020.0002] # EQUIVALENT WITH FOUR DOTS ABOVE +2A79 ; [*0D5F.0020.0002] # LESS-THAN WITH CIRCLE INSIDE +2A7A ; [*0D60.0020.0002] # GREATER-THAN WITH CIRCLE INSIDE +2A7B ; [*0D61.0020.0002] # LESS-THAN WITH QUESTION MARK ABOVE +2A7C ; [*0D62.0020.0002] # GREATER-THAN WITH QUESTION MARK ABOVE +2A7D ; [*0D63.0020.0002] # LESS-THAN OR SLANTED EQUAL TO +2A7E ; [*0D64.0020.0002] # GREATER-THAN OR SLANTED EQUAL TO +2A7F ; [*0D65.0020.0002] # LESS-THAN OR SLANTED EQUAL TO WITH DOT INSIDE +2A80 ; [*0D66.0020.0002] # GREATER-THAN OR SLANTED EQUAL TO WITH DOT INSIDE +2A81 ; [*0D67.0020.0002] # LESS-THAN OR SLANTED EQUAL TO WITH DOT ABOVE +2A82 ; [*0D68.0020.0002] # GREATER-THAN OR SLANTED EQUAL TO WITH DOT ABOVE +2A83 ; [*0D69.0020.0002] # LESS-THAN OR SLANTED EQUAL TO WITH DOT ABOVE RIGHT +2A84 ; [*0D6A.0020.0002] # GREATER-THAN OR SLANTED EQUAL TO WITH DOT ABOVE LEFT +2A85 ; [*0D6B.0020.0002] # LESS-THAN OR APPROXIMATE +2A86 ; [*0D6C.0020.0002] # GREATER-THAN OR APPROXIMATE +2A87 ; [*0D6D.0020.0002] # LESS-THAN AND SINGLE-LINE NOT EQUAL TO +2A88 ; [*0D6E.0020.0002] # GREATER-THAN AND SINGLE-LINE NOT EQUAL TO +2A89 ; [*0D6F.0020.0002] # LESS-THAN AND NOT APPROXIMATE +2A8A ; [*0D70.0020.0002] # GREATER-THAN AND NOT APPROXIMATE +2A8B ; [*0D71.0020.0002] # LESS-THAN ABOVE DOUBLE-LINE EQUAL ABOVE GREATER-THAN +2A8C ; [*0D72.0020.0002] # GREATER-THAN ABOVE DOUBLE-LINE EQUAL ABOVE LESS-THAN +2A8D ; [*0D73.0020.0002] # LESS-THAN ABOVE SIMILAR OR EQUAL +2A8E ; [*0D74.0020.0002] # GREATER-THAN ABOVE SIMILAR OR EQUAL +2A8F ; [*0D75.0020.0002] # LESS-THAN ABOVE SIMILAR ABOVE GREATER-THAN +2A90 ; [*0D76.0020.0002] # GREATER-THAN ABOVE SIMILAR ABOVE LESS-THAN +2A91 ; [*0D77.0020.0002] # LESS-THAN ABOVE GREATER-THAN ABOVE DOUBLE-LINE EQUAL +2A92 ; [*0D78.0020.0002] # GREATER-THAN ABOVE LESS-THAN ABOVE DOUBLE-LINE EQUAL +2A93 ; [*0D79.0020.0002] # LESS-THAN ABOVE SLANTED EQUAL ABOVE GREATER-THAN ABOVE SLANTED EQUAL +2A94 ; [*0D7A.0020.0002] # GREATER-THAN ABOVE SLANTED EQUAL ABOVE LESS-THAN ABOVE SLANTED EQUAL +2A95 ; [*0D7B.0020.0002] # SLANTED EQUAL TO OR LESS-THAN +2A96 ; [*0D7C.0020.0002] # SLANTED EQUAL TO OR GREATER-THAN +2A97 ; [*0D7D.0020.0002] # SLANTED EQUAL TO OR LESS-THAN WITH DOT INSIDE +2A98 ; [*0D7E.0020.0002] # SLANTED EQUAL TO OR GREATER-THAN WITH DOT INSIDE +2A99 ; [*0D7F.0020.0002] # DOUBLE-LINE EQUAL TO OR LESS-THAN +2A9A ; [*0D80.0020.0002] # DOUBLE-LINE EQUAL TO OR GREATER-THAN +2A9B ; [*0D81.0020.0002] # DOUBLE-LINE SLANTED EQUAL TO OR LESS-THAN +2A9C ; [*0D82.0020.0002] # DOUBLE-LINE SLANTED EQUAL TO OR GREATER-THAN +2A9D ; [*0D83.0020.0002] # SIMILAR OR LESS-THAN +2A9E ; [*0D84.0020.0002] # SIMILAR OR GREATER-THAN +2A9F ; [*0D85.0020.0002] # SIMILAR ABOVE LESS-THAN ABOVE EQUALS SIGN +2AA0 ; [*0D86.0020.0002] # SIMILAR ABOVE GREATER-THAN ABOVE EQUALS SIGN +2AA1 ; [*0D87.0020.0002] # DOUBLE NESTED LESS-THAN +2AA2 ; [*0D88.0020.0002] # DOUBLE NESTED GREATER-THAN +2AA3 ; [*0D89.0020.0002] # DOUBLE NESTED LESS-THAN WITH UNDERBAR +2AA4 ; [*0D8A.0020.0002] # GREATER-THAN OVERLAPPING LESS-THAN +2AA5 ; [*0D8B.0020.0002] # GREATER-THAN BESIDE LESS-THAN +2AA6 ; [*0D8C.0020.0002] # LESS-THAN CLOSED BY CURVE +2AA7 ; [*0D8D.0020.0002] # GREATER-THAN CLOSED BY CURVE +2AA8 ; [*0D8E.0020.0002] # LESS-THAN CLOSED BY CURVE ABOVE SLANTED EQUAL +2AA9 ; [*0D8F.0020.0002] # GREATER-THAN CLOSED BY CURVE ABOVE SLANTED EQUAL +2AAA ; [*0D90.0020.0002] # SMALLER THAN +2AAB ; [*0D91.0020.0002] # LARGER THAN +2AAC ; [*0D92.0020.0002] # SMALLER THAN OR EQUAL TO +2AAD ; [*0D93.0020.0002] # LARGER THAN OR EQUAL TO +2AAE ; [*0D94.0020.0002] # EQUALS SIGN WITH BUMPY ABOVE +2AAF ; [*0D95.0020.0002] # PRECEDES ABOVE SINGLE-LINE EQUALS SIGN +2AB0 ; [*0D96.0020.0002] # SUCCEEDS ABOVE SINGLE-LINE EQUALS SIGN +2AB1 ; [*0D97.0020.0002] # PRECEDES ABOVE SINGLE-LINE NOT EQUAL TO +2AB2 ; [*0D98.0020.0002] # SUCCEEDS ABOVE SINGLE-LINE NOT EQUAL TO +2AB3 ; [*0D99.0020.0002] # PRECEDES ABOVE EQUALS SIGN +2AB4 ; [*0D9A.0020.0002] # SUCCEEDS ABOVE EQUALS SIGN +2AB5 ; [*0D9B.0020.0002] # PRECEDES ABOVE NOT EQUAL TO +2AB6 ; [*0D9C.0020.0002] # SUCCEEDS ABOVE NOT EQUAL TO +2AB7 ; [*0D9D.0020.0002] # PRECEDES ABOVE ALMOST EQUAL TO +2AB8 ; [*0D9E.0020.0002] # SUCCEEDS ABOVE ALMOST EQUAL TO +2AB9 ; [*0D9F.0020.0002] # PRECEDES ABOVE NOT ALMOST EQUAL TO +2ABA ; [*0DA0.0020.0002] # SUCCEEDS ABOVE NOT ALMOST EQUAL TO +2ABB ; [*0DA1.0020.0002] # DOUBLE PRECEDES +2ABC ; [*0DA2.0020.0002] # DOUBLE SUCCEEDS +2ABD ; [*0DA3.0020.0002] # SUBSET WITH DOT +2ABE ; [*0DA4.0020.0002] # SUPERSET WITH DOT +2ABF ; [*0DA5.0020.0002] # SUBSET WITH PLUS SIGN BELOW +2AC0 ; [*0DA6.0020.0002] # SUPERSET WITH PLUS SIGN BELOW +2AC1 ; [*0DA7.0020.0002] # SUBSET WITH MULTIPLICATION SIGN BELOW +2AC2 ; [*0DA8.0020.0002] # SUPERSET WITH MULTIPLICATION SIGN BELOW +2AC3 ; [*0DA9.0020.0002] # SUBSET OF OR EQUAL TO WITH DOT ABOVE +2AC4 ; [*0DAA.0020.0002] # SUPERSET OF OR EQUAL TO WITH DOT ABOVE +2AC5 ; [*0DAB.0020.0002] # SUBSET OF ABOVE EQUALS SIGN +2AC6 ; [*0DAC.0020.0002] # SUPERSET OF ABOVE EQUALS SIGN +2AC7 ; [*0DAD.0020.0002] # SUBSET OF ABOVE TILDE OPERATOR +2AC8 ; [*0DAE.0020.0002] # SUPERSET OF ABOVE TILDE OPERATOR +2AC9 ; [*0DAF.0020.0002] # SUBSET OF ABOVE ALMOST EQUAL TO +2ACA ; [*0DB0.0020.0002] # SUPERSET OF ABOVE ALMOST EQUAL TO +2ACB ; [*0DB1.0020.0002] # SUBSET OF ABOVE NOT EQUAL TO +2ACC ; [*0DB2.0020.0002] # SUPERSET OF ABOVE NOT EQUAL TO +2ACD ; [*0DB3.0020.0002] # SQUARE LEFT OPEN BOX OPERATOR +2ACE ; [*0DB4.0020.0002] # SQUARE RIGHT OPEN BOX OPERATOR +2ACF ; [*0DB5.0020.0002] # CLOSED SUBSET +2AD0 ; [*0DB6.0020.0002] # CLOSED SUPERSET +2AD1 ; [*0DB7.0020.0002] # CLOSED SUBSET OR EQUAL TO +2AD2 ; [*0DB8.0020.0002] # CLOSED SUPERSET OR EQUAL TO +2AD3 ; [*0DB9.0020.0002] # SUBSET ABOVE SUPERSET +2AD4 ; [*0DBA.0020.0002] # SUPERSET ABOVE SUBSET +2AD5 ; [*0DBB.0020.0002] # SUBSET ABOVE SUBSET +2AD6 ; [*0DBC.0020.0002] # SUPERSET ABOVE SUPERSET +2AD7 ; [*0DBD.0020.0002] # SUPERSET BESIDE SUBSET +2AD8 ; [*0DBE.0020.0002] # SUPERSET BESIDE AND JOINED BY DASH WITH SUBSET +2AD9 ; [*0DBF.0020.0002] # ELEMENT OF OPENING DOWNWARDS +2ADA ; [*0DC0.0020.0002] # PITCHFORK WITH TEE TOP +2ADB ; [*0DC1.0020.0002] # TRANSVERSAL INTERSECTION +2ADC ; [*0DC2.0020.0002][.0000.002F.0002] # FORKING +2ADD ; [*0DC2.0020.0002] # NONFORKING +2ADE ; [*0DC3.0020.0002] # SHORT LEFT TACK +2ADF ; [*0DC4.0020.0002] # SHORT DOWN TACK +2AE0 ; [*0DC5.0020.0002] # SHORT UP TACK +2AE1 ; [*0DC6.0020.0002] # PERPENDICULAR WITH S +2AE2 ; [*0DC7.0020.0002] # VERTICAL BAR TRIPLE RIGHT TURNSTILE +2AE3 ; [*0DC8.0020.0002] # DOUBLE VERTICAL BAR LEFT TURNSTILE +2AE4 ; [*0DC9.0020.0002] # VERTICAL BAR DOUBLE LEFT TURNSTILE +2AE5 ; [*0DCA.0020.0002] # DOUBLE VERTICAL BAR DOUBLE LEFT TURNSTILE +2AE6 ; [*0DCB.0020.0002] # LONG DASH FROM LEFT MEMBER OF DOUBLE VERTICAL +2AE7 ; [*0DCC.0020.0002] # SHORT DOWN TACK WITH OVERBAR +2AE8 ; [*0DCD.0020.0002] # SHORT UP TACK WITH UNDERBAR +2AE9 ; [*0DCE.0020.0002] # SHORT UP TACK ABOVE SHORT DOWN TACK +2AEA ; [*0DCF.0020.0002] # DOUBLE DOWN TACK +2AEB ; [*0DD0.0020.0002] # DOUBLE UP TACK +2AEC ; [*0DD1.0020.0002] # DOUBLE STROKE NOT SIGN +2AED ; [*0DD2.0020.0002] # REVERSED DOUBLE STROKE NOT SIGN +2AEE ; [*0DD3.0020.0002] # DOES NOT DIVIDE WITH REVERSED NEGATION SLASH +2AEF ; [*0DD4.0020.0002] # VERTICAL LINE WITH CIRCLE ABOVE +2AF0 ; [*0DD5.0020.0002] # VERTICAL LINE WITH CIRCLE BELOW +2AF1 ; [*0DD6.0020.0002] # DOWN TACK WITH CIRCLE BELOW +2AF2 ; [*0DD7.0020.0002] # PARALLEL WITH HORIZONTAL STROKE +2AF3 ; [*0DD8.0020.0002] # PARALLEL WITH TILDE OPERATOR +2AF4 ; [*0DD9.0020.0002] # TRIPLE VERTICAL BAR BINARY RELATION +2AF5 ; [*0DDA.0020.0002] # TRIPLE VERTICAL BAR WITH HORIZONTAL STROKE +2AF6 ; [*0DDB.0020.0002] # TRIPLE COLON OPERATOR +2AF7 ; [*0DDC.0020.0002] # TRIPLE NESTED LESS-THAN +2AF8 ; [*0DDD.0020.0002] # TRIPLE NESTED GREATER-THAN +2AF9 ; [*0DDE.0020.0002] # DOUBLE-LINE SLANTED LESS-THAN OR EQUAL TO +2AFA ; [*0DDF.0020.0002] # DOUBLE-LINE SLANTED GREATER-THAN OR EQUAL TO +2AFB ; [*0DE0.0020.0002] # TRIPLE SOLIDUS BINARY RELATION +2AFC ; [*0DE1.0020.0002] # LARGE TRIPLE VERTICAL BAR OPERATOR +2AFD ; [*0DE2.0020.0002] # DOUBLE SOLIDUS OPERATOR +2AFE ; [*0DE3.0020.0002] # WHITE VERTICAL BAR +2AFF ; [*0DE4.0020.0002] # N-ARY WHITE VERTICAL BAR +2B00 ; [*0DE5.0020.0002] # NORTH EAST WHITE ARROW +2B01 ; [*0DE6.0020.0002] # NORTH WEST WHITE ARROW +2B02 ; [*0DE7.0020.0002] # SOUTH EAST WHITE ARROW +2B03 ; [*0DE8.0020.0002] # SOUTH WEST WHITE ARROW +2B04 ; [*0DE9.0020.0002] # LEFT RIGHT WHITE ARROW +2B05 ; [*0DEA.0020.0002] # LEFTWARDS BLACK ARROW +2B06 ; [*0DEB.0020.0002] # UPWARDS BLACK ARROW +2B07 ; [*0DEC.0020.0002] # DOWNWARDS BLACK ARROW +2B08 ; [*0DED.0020.0002] # NORTH EAST BLACK ARROW +2B09 ; [*0DEE.0020.0002] # NORTH WEST BLACK ARROW +2B0A ; [*0DEF.0020.0002] # SOUTH EAST BLACK ARROW +2B0B ; [*0DF0.0020.0002] # SOUTH WEST BLACK ARROW +2B0C ; [*0DF1.0020.0002] # LEFT RIGHT BLACK ARROW +2B0D ; [*0DF2.0020.0002] # UP DOWN BLACK ARROW +2B0E ; [*0DF3.0020.0002] # RIGHTWARDS ARROW WITH TIP DOWNWARDS +2B0F ; [*0DF4.0020.0002] # RIGHTWARDS ARROW WITH TIP UPWARDS +2B10 ; [*0DF5.0020.0002] # LEFTWARDS ARROW WITH TIP DOWNWARDS +2B11 ; [*0DF6.0020.0002] # LEFTWARDS ARROW WITH TIP UPWARDS +2B12 ; [*0DF7.0020.0002] # SQUARE WITH TOP HALF BLACK +2B13 ; [*0DF8.0020.0002] # SQUARE WITH BOTTOM HALF BLACK +2B14 ; [*0DF9.0020.0002] # SQUARE WITH UPPER RIGHT DIAGONAL HALF BLACK +2B15 ; [*0DFA.0020.0002] # SQUARE WITH LOWER LEFT DIAGONAL HALF BLACK +2B16 ; [*0DFB.0020.0002] # DIAMOND WITH LEFT HALF BLACK +2B17 ; [*0DFC.0020.0002] # DIAMOND WITH RIGHT HALF BLACK +2B18 ; [*0DFD.0020.0002] # DIAMOND WITH TOP HALF BLACK +2B19 ; [*0DFE.0020.0002] # DIAMOND WITH BOTTOM HALF BLACK +2B1A ; [*0DFF.0020.0002] # DOTTED SQUARE +2B1B ; [*0E00.0020.0002] # BLACK LARGE SQUARE +2B1C ; [*0E01.0020.0002] # WHITE LARGE SQUARE +2B1D ; [*0E02.0020.0002] # BLACK VERY SMALL SQUARE +2B1E ; [*0E03.0020.0002] # WHITE VERY SMALL SQUARE +2B1F ; [*0E04.0020.0002] # BLACK PENTAGON +2B20 ; [*0E05.0020.0002] # WHITE PENTAGON +2B21 ; [*0E06.0020.0002] # WHITE HEXAGON +2B22 ; [*0E07.0020.0002] # BLACK HEXAGON +2B23 ; [*0E08.0020.0002] # HORIZONTAL BLACK HEXAGON +2B24 ; [*0E09.0020.0002] # BLACK LARGE CIRCLE +2B25 ; [*0E0A.0020.0002] # BLACK MEDIUM DIAMOND +2B26 ; [*0E0B.0020.0002] # WHITE MEDIUM DIAMOND +2B27 ; [*0E0C.0020.0002] # BLACK MEDIUM LOZENGE +2B28 ; [*0E0D.0020.0002] # WHITE MEDIUM LOZENGE +2B29 ; [*0E0E.0020.0002] # BLACK SMALL DIAMOND +2B2A ; [*0E0F.0020.0002] # BLACK SMALL LOZENGE +2B2B ; [*0E10.0020.0002] # WHITE SMALL LOZENGE +2B2C ; [*0E11.0020.0002] # BLACK HORIZONTAL ELLIPSE +2B2D ; [*0E12.0020.0002] # WHITE HORIZONTAL ELLIPSE +2B2E ; [*0E13.0020.0002] # BLACK VERTICAL ELLIPSE +2B2F ; [*0E14.0020.0002] # WHITE VERTICAL ELLIPSE +2B30 ; [*0E15.0020.0002] # LEFT ARROW WITH SMALL CIRCLE +2B31 ; [*0E16.0020.0002] # THREE LEFTWARDS ARROWS +2B32 ; [*0E17.0020.0002] # LEFT ARROW WITH CIRCLED PLUS +2B33 ; [*0E18.0020.0002] # LONG LEFTWARDS SQUIGGLE ARROW +2B34 ; [*0E19.0020.0002] # LEFTWARDS TWO-HEADED ARROW WITH VERTICAL STROKE +2B35 ; [*0E1A.0020.0002] # LEFTWARDS TWO-HEADED ARROW WITH DOUBLE VERTICAL STROKE +2B36 ; [*0E1B.0020.0002] # LEFTWARDS TWO-HEADED ARROW FROM BAR +2B37 ; [*0E1C.0020.0002] # LEFTWARDS TWO-HEADED TRIPLE DASH ARROW +2B38 ; [*0E1D.0020.0002] # LEFTWARDS ARROW WITH DOTTED STEM +2B39 ; [*0E1E.0020.0002] # LEFTWARDS ARROW WITH TAIL WITH VERTICAL STROKE +2B3A ; [*0E1F.0020.0002] # LEFTWARDS ARROW WITH TAIL WITH DOUBLE VERTICAL STROKE +2B3B ; [*0E20.0020.0002] # LEFTWARDS TWO-HEADED ARROW WITH TAIL +2B3C ; [*0E21.0020.0002] # LEFTWARDS TWO-HEADED ARROW WITH TAIL WITH VERTICAL STROKE +2B3D ; [*0E22.0020.0002] # LEFTWARDS TWO-HEADED ARROW WITH TAIL WITH DOUBLE VERTICAL STROKE +2B3E ; [*0E23.0020.0002] # LEFTWARDS ARROW THROUGH X +2B3F ; [*0E24.0020.0002] # WAVE ARROW POINTING DIRECTLY LEFT +2B40 ; [*0E25.0020.0002] # EQUALS SIGN ABOVE LEFTWARDS ARROW +2B41 ; [*0E26.0020.0002] # REVERSE TILDE OPERATOR ABOVE LEFTWARDS ARROW +2B42 ; [*0E27.0020.0002] # LEFTWARDS ARROW ABOVE REVERSE ALMOST EQUAL TO +2B43 ; [*0E28.0020.0002] # RIGHTWARDS ARROW THROUGH GREATER-THAN +2B44 ; [*0E29.0020.0002] # RIGHTWARDS ARROW THROUGH SUPERSET +2B45 ; [*0E2A.0020.0002] # LEFTWARDS QUADRUPLE ARROW +2B46 ; [*0E2B.0020.0002] # RIGHTWARDS QUADRUPLE ARROW +2B47 ; [*0E2C.0020.0002] # REVERSE TILDE OPERATOR ABOVE RIGHTWARDS ARROW +2B48 ; [*0E2D.0020.0002] # RIGHTWARDS ARROW ABOVE REVERSE ALMOST EQUAL TO +2B49 ; [*0E2E.0020.0002] # TILDE OPERATOR ABOVE LEFTWARDS ARROW +2B4A ; [*0E2F.0020.0002] # LEFTWARDS ARROW ABOVE ALMOST EQUAL TO +2B4B ; [*0E30.0020.0002] # LEFTWARDS ARROW ABOVE REVERSE TILDE OPERATOR +2B4C ; [*0E31.0020.0002] # RIGHTWARDS ARROW ABOVE REVERSE TILDE OPERATOR +2B4D ; [*0E32.0020.0002] # DOWNWARDS TRIANGLE-HEADED ZIGZAG ARROW +2B4E ; [*0E33.0020.0002] # SHORT SLANTED NORTH ARROW +2B4F ; [*0E34.0020.0002] # SHORT BACKSLANTED SOUTH ARROW +2B50 ; [*0E35.0020.0002] # WHITE MEDIUM STAR +2B51 ; [*0E36.0020.0002] # BLACK SMALL STAR +2B52 ; [*0E37.0020.0002] # WHITE SMALL STAR +2B53 ; [*0E38.0020.0002] # BLACK RIGHT-POINTING PENTAGON +2B54 ; [*0E39.0020.0002] # WHITE RIGHT-POINTING PENTAGON +2B55 ; [*0E3A.0020.0002] # HEAVY LARGE CIRCLE +2B56 ; [*0E3B.0020.0002] # HEAVY OVAL WITH OVAL INSIDE +2B57 ; [*0E3C.0020.0002] # HEAVY CIRCLE WITH CIRCLE INSIDE +2B58 ; [*0E3D.0020.0002] # HEAVY CIRCLE +2B59 ; [*0E3E.0020.0002] # HEAVY CIRCLED SALTIRE +2B5A ; [*0E3F.0020.0002] # SLANTED NORTH ARROW WITH HOOKED HEAD +2B5B ; [*0E40.0020.0002] # BACKSLANTED SOUTH ARROW WITH HOOKED TAIL +2B5C ; [*0E41.0020.0002] # SLANTED NORTH ARROW WITH HORIZONTAL TAIL +2B5D ; [*0E42.0020.0002] # BACKSLANTED SOUTH ARROW WITH HORIZONTAL TAIL +2B5E ; [*0E43.0020.0002] # BENT ARROW POINTING DOWNWARDS THEN NORTH EAST +2B5F ; [*0E44.0020.0002] # SHORT BENT ARROW POINTING DOWNWARDS THEN NORTH EAST +2B60 ; [*0E45.0020.0002] # LEFTWARDS TRIANGLE-HEADED ARROW +2B61 ; [*0E46.0020.0002] # UPWARDS TRIANGLE-HEADED ARROW +2B62 ; [*0E47.0020.0002] # RIGHTWARDS TRIANGLE-HEADED ARROW +2B63 ; [*0E48.0020.0002] # DOWNWARDS TRIANGLE-HEADED ARROW +2B64 ; [*0E49.0020.0002] # LEFT RIGHT TRIANGLE-HEADED ARROW +2B65 ; [*0E4A.0020.0002] # UP DOWN TRIANGLE-HEADED ARROW +2B66 ; [*0E4B.0020.0002] # NORTH WEST TRIANGLE-HEADED ARROW +2B67 ; [*0E4C.0020.0002] # NORTH EAST TRIANGLE-HEADED ARROW +2B68 ; [*0E4D.0020.0002] # SOUTH EAST TRIANGLE-HEADED ARROW +2B69 ; [*0E4E.0020.0002] # SOUTH WEST TRIANGLE-HEADED ARROW +2B6A ; [*0E4F.0020.0002] # LEFTWARDS TRIANGLE-HEADED DASHED ARROW +2B6B ; [*0E50.0020.0002] # UPWARDS TRIANGLE-HEADED DASHED ARROW +2B6C ; [*0E51.0020.0002] # RIGHTWARDS TRIANGLE-HEADED DASHED ARROW +2B6D ; [*0E52.0020.0002] # DOWNWARDS TRIANGLE-HEADED DASHED ARROW +2B6E ; [*0E53.0020.0002] # CLOCKWISE TRIANGLE-HEADED OPEN CIRCLE ARROW +2B6F ; [*0E54.0020.0002] # ANTICLOCKWISE TRIANGLE-HEADED OPEN CIRCLE ARROW +2B70 ; [*0E55.0020.0002] # LEFTWARDS TRIANGLE-HEADED ARROW TO BAR +2B71 ; [*0E56.0020.0002] # UPWARDS TRIANGLE-HEADED ARROW TO BAR +2B72 ; [*0E57.0020.0002] # RIGHTWARDS TRIANGLE-HEADED ARROW TO BAR +2B73 ; [*0E58.0020.0002] # DOWNWARDS TRIANGLE-HEADED ARROW TO BAR +2B76 ; [*0E59.0020.0002] # NORTH WEST TRIANGLE-HEADED ARROW TO BAR +2B77 ; [*0E5A.0020.0002] # NORTH EAST TRIANGLE-HEADED ARROW TO BAR +2B78 ; [*0E5B.0020.0002] # SOUTH EAST TRIANGLE-HEADED ARROW TO BAR +2B79 ; [*0E5C.0020.0002] # SOUTH WEST TRIANGLE-HEADED ARROW TO BAR +2B7A ; [*0E5D.0020.0002] # LEFTWARDS TRIANGLE-HEADED ARROW WITH DOUBLE HORIZONTAL STROKE +2B7B ; [*0E5E.0020.0002] # UPWARDS TRIANGLE-HEADED ARROW WITH DOUBLE HORIZONTAL STROKE +2B7C ; [*0E5F.0020.0002] # RIGHTWARDS TRIANGLE-HEADED ARROW WITH DOUBLE HORIZONTAL STROKE +2B7D ; [*0E60.0020.0002] # DOWNWARDS TRIANGLE-HEADED ARROW WITH DOUBLE HORIZONTAL STROKE +2B7E ; [*0E61.0020.0002] # HORIZONTAL TAB KEY +2B7F ; [*0E62.0020.0002] # VERTICAL TAB KEY +2B80 ; [*0E63.0020.0002] # LEFTWARDS TRIANGLE-HEADED ARROW OVER RIGHTWARDS TRIANGLE-HEADED ARROW +2B81 ; [*0E64.0020.0002] # UPWARDS TRIANGLE-HEADED ARROW LEFTWARDS OF DOWNWARDS TRIANGLE-HEADED ARROW +2B82 ; [*0E65.0020.0002] # RIGHTWARDS TRIANGLE-HEADED ARROW OVER LEFTWARDS TRIANGLE-HEADED ARROW +2B83 ; [*0E66.0020.0002] # DOWNWARDS TRIANGLE-HEADED ARROW LEFTWARDS OF UPWARDS TRIANGLE-HEADED ARROW +2B84 ; [*0E67.0020.0002] # LEFTWARDS TRIANGLE-HEADED PAIRED ARROWS +2B85 ; [*0E68.0020.0002] # UPWARDS TRIANGLE-HEADED PAIRED ARROWS +2B86 ; [*0E69.0020.0002] # RIGHTWARDS TRIANGLE-HEADED PAIRED ARROWS +2B87 ; [*0E6A.0020.0002] # DOWNWARDS TRIANGLE-HEADED PAIRED ARROWS +2B88 ; [*0E6B.0020.0002] # LEFTWARDS BLACK CIRCLED WHITE ARROW +2B89 ; [*0E6C.0020.0002] # UPWARDS BLACK CIRCLED WHITE ARROW +2B8A ; [*0E6D.0020.0002] # RIGHTWARDS BLACK CIRCLED WHITE ARROW +2B8B ; [*0E6E.0020.0002] # DOWNWARDS BLACK CIRCLED WHITE ARROW +2B8C ; [*0E6F.0020.0002] # ANTICLOCKWISE TRIANGLE-HEADED RIGHT U-SHAPED ARROW +2B8D ; [*0E70.0020.0002] # ANTICLOCKWISE TRIANGLE-HEADED BOTTOM U-SHAPED ARROW +2B8E ; [*0E71.0020.0002] # ANTICLOCKWISE TRIANGLE-HEADED LEFT U-SHAPED ARROW +2B8F ; [*0E72.0020.0002] # ANTICLOCKWISE TRIANGLE-HEADED TOP U-SHAPED ARROW +2B90 ; [*0E73.0020.0002] # RETURN LEFT +2B91 ; [*0E74.0020.0002] # RETURN RIGHT +2B92 ; [*0E75.0020.0002] # NEWLINE LEFT +2B93 ; [*0E76.0020.0002] # NEWLINE RIGHT +2B94 ; [*0E77.0020.0002] # FOUR CORNER ARROWS CIRCLING ANTICLOCKWISE +2B95 ; [*0E78.0020.0002] # RIGHTWARDS BLACK ARROW +2B97 ; [*0E79.0020.0002] # SYMBOL FOR TYPE A ELECTRONICS +2B98 ; [*0E7A.0020.0002] # THREE-D TOP-LIGHTED LEFTWARDS EQUILATERAL ARROWHEAD +2B99 ; [*0E7B.0020.0002] # THREE-D RIGHT-LIGHTED UPWARDS EQUILATERAL ARROWHEAD +2B9A ; [*0E7C.0020.0002] # THREE-D TOP-LIGHTED RIGHTWARDS EQUILATERAL ARROWHEAD +2B9B ; [*0E7D.0020.0002] # THREE-D LEFT-LIGHTED DOWNWARDS EQUILATERAL ARROWHEAD +2B9C ; [*0E7E.0020.0002] # BLACK LEFTWARDS EQUILATERAL ARROWHEAD +2B9D ; [*0E7F.0020.0002] # BLACK UPWARDS EQUILATERAL ARROWHEAD +2B9E ; [*0E80.0020.0002] # BLACK RIGHTWARDS EQUILATERAL ARROWHEAD +2B9F ; [*0E81.0020.0002] # BLACK DOWNWARDS EQUILATERAL ARROWHEAD +2BA0 ; [*0E82.0020.0002] # DOWNWARDS TRIANGLE-HEADED ARROW WITH LONG TIP LEFTWARDS +2BA1 ; [*0E83.0020.0002] # DOWNWARDS TRIANGLE-HEADED ARROW WITH LONG TIP RIGHTWARDS +2BA2 ; [*0E84.0020.0002] # UPWARDS TRIANGLE-HEADED ARROW WITH LONG TIP LEFTWARDS +2BA3 ; [*0E85.0020.0002] # UPWARDS TRIANGLE-HEADED ARROW WITH LONG TIP RIGHTWARDS +2BA4 ; [*0E86.0020.0002] # LEFTWARDS TRIANGLE-HEADED ARROW WITH LONG TIP UPWARDS +2BA5 ; [*0E87.0020.0002] # RIGHTWARDS TRIANGLE-HEADED ARROW WITH LONG TIP UPWARDS +2BA6 ; [*0E88.0020.0002] # LEFTWARDS TRIANGLE-HEADED ARROW WITH LONG TIP DOWNWARDS +2BA7 ; [*0E89.0020.0002] # RIGHTWARDS TRIANGLE-HEADED ARROW WITH LONG TIP DOWNWARDS +2BA8 ; [*0E8A.0020.0002] # BLACK CURVED DOWNWARDS AND LEFTWARDS ARROW +2BA9 ; [*0E8B.0020.0002] # BLACK CURVED DOWNWARDS AND RIGHTWARDS ARROW +2BAA ; [*0E8C.0020.0002] # BLACK CURVED UPWARDS AND LEFTWARDS ARROW +2BAB ; [*0E8D.0020.0002] # BLACK CURVED UPWARDS AND RIGHTWARDS ARROW +2BAC ; [*0E8E.0020.0002] # BLACK CURVED LEFTWARDS AND UPWARDS ARROW +2BAD ; [*0E8F.0020.0002] # BLACK CURVED RIGHTWARDS AND UPWARDS ARROW +2BAE ; [*0E90.0020.0002] # BLACK CURVED LEFTWARDS AND DOWNWARDS ARROW +2BAF ; [*0E91.0020.0002] # BLACK CURVED RIGHTWARDS AND DOWNWARDS ARROW +2BB0 ; [*0E92.0020.0002] # RIBBON ARROW DOWN LEFT +2BB1 ; [*0E93.0020.0002] # RIBBON ARROW DOWN RIGHT +2BB2 ; [*0E94.0020.0002] # RIBBON ARROW UP LEFT +2BB3 ; [*0E95.0020.0002] # RIBBON ARROW UP RIGHT +2BB4 ; [*0E96.0020.0002] # RIBBON ARROW LEFT UP +2BB5 ; [*0E97.0020.0002] # RIBBON ARROW RIGHT UP +2BB6 ; [*0E98.0020.0002] # RIBBON ARROW LEFT DOWN +2BB7 ; [*0E99.0020.0002] # RIBBON ARROW RIGHT DOWN +2BB8 ; [*0E9A.0020.0002] # UPWARDS WHITE ARROW FROM BAR WITH HORIZONTAL BAR +2BB9 ; [*0E9B.0020.0002] # UP ARROWHEAD IN A RECTANGLE BOX +2BBA ; [*0E9C.0020.0002] # OVERLAPPING WHITE SQUARES +2BBB ; [*0E9D.0020.0002] # OVERLAPPING WHITE AND BLACK SQUARES +2BBC ; [*0E9E.0020.0002] # OVERLAPPING BLACK SQUARES +2BBD ; [*0E9F.0020.0002] # BALLOT BOX WITH LIGHT X +2BBE ; [*0EA0.0020.0002] # CIRCLED X +2BBF ; [*0EA1.0020.0002] # CIRCLED BOLD X +2BC0 ; [*0EA2.0020.0002] # BLACK SQUARE CENTRED +2BC1 ; [*0EA3.0020.0002] # BLACK DIAMOND CENTRED +2BC2 ; [*0EA4.0020.0002] # TURNED BLACK PENTAGON +2BC3 ; [*0EA5.0020.0002] # HORIZONTAL BLACK OCTAGON +2BC4 ; [*0EA6.0020.0002] # BLACK OCTAGON +2BC5 ; [*0EA7.0020.0002] # BLACK MEDIUM UP-POINTING TRIANGLE CENTRED +2BC6 ; [*0EA8.0020.0002] # BLACK MEDIUM DOWN-POINTING TRIANGLE CENTRED +2BC7 ; [*0EA9.0020.0002] # BLACK MEDIUM LEFT-POINTING TRIANGLE CENTRED +2BC8 ; [*0EAA.0020.0002] # BLACK MEDIUM RIGHT-POINTING TRIANGLE CENTRED +2BC9 ; [*0EAB.0020.0002] # NEPTUNE FORM TWO +2BCA ; [*0EAC.0020.0002] # TOP HALF BLACK CIRCLE +2BCB ; [*0EAD.0020.0002] # BOTTOM HALF BLACK CIRCLE +2BCC ; [*0EAE.0020.0002] # LIGHT FOUR POINTED BLACK CUSP +2BCD ; [*0EAF.0020.0002] # ROTATED LIGHT FOUR POINTED BLACK CUSP +2BCE ; [*0EB0.0020.0002] # WHITE FOUR POINTED CUSP +2BCF ; [*0EB1.0020.0002] # ROTATED WHITE FOUR POINTED CUSP +2BD0 ; [*0EB2.0020.0002] # SQUARE POSITION INDICATOR +2BD1 ; [*0EB3.0020.0002] # UNCERTAINTY SIGN +2BD2 ; [*0EB4.0020.0002] # GROUP MARK +2BD3 ; [*0EB5.0020.0002] # PLUTO FORM TWO +2BD4 ; [*0EB6.0020.0002] # PLUTO FORM THREE +2BD5 ; [*0EB7.0020.0002] # PLUTO FORM FOUR +2BD6 ; [*0EB8.0020.0002] # PLUTO FORM FIVE +2BD7 ; [*0EB9.0020.0002] # TRANSPLUTO +2BD8 ; [*0EBA.0020.0002] # PROSERPINA +2BD9 ; [*0EBB.0020.0002] # ASTRAEA +2BDA ; [*0EBC.0020.0002] # HYGIEA +2BDB ; [*0EBD.0020.0002] # PHOLUS +2BDC ; [*0EBE.0020.0002] # NESSUS +2BDD ; [*0EBF.0020.0002] # WHITE MOON SELENA +2BDE ; [*0EC0.0020.0002] # BLACK DIAMOND ON CROSS +2BDF ; [*0EC1.0020.0002] # TRUE LIGHT MOON ARTA +2BE0 ; [*0EC2.0020.0002] # CUPIDO +2BE1 ; [*0EC3.0020.0002] # HADES +2BE2 ; [*0EC4.0020.0002] # ZEUS +2BE3 ; [*0EC5.0020.0002] # KRONOS +2BE4 ; [*0EC6.0020.0002] # APOLLON +2BE5 ; [*0EC7.0020.0002] # ADMETOS +2BE6 ; [*0EC8.0020.0002] # VULCANUS +2BE7 ; [*0EC9.0020.0002] # POSEIDON +2BE8 ; [*0ECA.0020.0002] # LEFT HALF BLACK STAR +2BE9 ; [*0ECB.0020.0002] # RIGHT HALF BLACK STAR +2BEA ; [*0ECC.0020.0002] # STAR WITH LEFT HALF BLACK +2BEB ; [*0ECD.0020.0002] # STAR WITH RIGHT HALF BLACK +2BEC ; [*0ECE.0020.0002] # LEFTWARDS TWO-HEADED ARROW WITH TRIANGLE ARROWHEADS +2BED ; [*0ECF.0020.0002] # UPWARDS TWO-HEADED ARROW WITH TRIANGLE ARROWHEADS +2BEE ; [*0ED0.0020.0002] # RIGHTWARDS TWO-HEADED ARROW WITH TRIANGLE ARROWHEADS +2BEF ; [*0ED1.0020.0002] # DOWNWARDS TWO-HEADED ARROW WITH TRIANGLE ARROWHEADS +2BF0 ; [*0ED2.0020.0002] # ERIS FORM ONE +2BF1 ; [*0ED3.0020.0002] # ERIS FORM TWO +2BF2 ; [*0ED4.0020.0002] # SEDNA +2BF3 ; [*0ED5.0020.0002] # RUSSIAN ASTROLOGICAL SYMBOL VIGINTILE +2BF4 ; [*0ED6.0020.0002] # RUSSIAN ASTROLOGICAL SYMBOL NOVILE +2BF5 ; [*0ED7.0020.0002] # RUSSIAN ASTROLOGICAL SYMBOL QUINTILE +2BF6 ; [*0ED8.0020.0002] # RUSSIAN ASTROLOGICAL SYMBOL BINOVILE +2BF7 ; [*0ED9.0020.0002] # RUSSIAN ASTROLOGICAL SYMBOL SENTAGON +2BF8 ; [*0EDA.0020.0002] # RUSSIAN ASTROLOGICAL SYMBOL TREDECILE +2BF9 ; [*0EDB.0020.0002] # EQUALS SIGN WITH INFINITY BELOW +2BFA ; [*0EDC.0020.0002] # UNITED SYMBOL +2BFB ; [*0EDD.0020.0002] # SEPARATED SYMBOL +2BFC ; [*0EDE.0020.0002] # DOUBLED SYMBOL +2BFD ; [*0EDF.0020.0002] # PASSED SYMBOL +2BFE ; [*0EE0.0020.0002] # REVERSED RIGHT ANGLE +2BFF ; [*0EE1.0020.0002] # HELLSCHREIBER PAUSE SYMBOL +2CE5 ; [*0EE2.0020.0002] # COPTIC SYMBOL MI RO +2CE6 ; [*0EE3.0020.0002] # COPTIC SYMBOL PI RO +2CE7 ; [*0EE4.0020.0002] # COPTIC SYMBOL STAUROS +2CE8 ; [*0EE5.0020.0002] # COPTIC SYMBOL TAU RO +2CE9 ; [*0EE6.0020.0002] # COPTIC SYMBOL KHI RO +2CEA ; [*0EE7.0020.0002] # COPTIC SYMBOL SHIMA SIMA +2CF9 ; [*0288.0020.0002] # COPTIC OLD NUBIAN FULL STOP +2CFA ; [*0275.0020.0002] # COPTIC OLD NUBIAN DIRECT QUESTION MARK +2CFB ; [*0276.0020.0002] # COPTIC OLD NUBIAN INDIRECT QUESTION MARK +2CFC ; [*0307.0020.0002] # COPTIC OLD NUBIAN VERSE DIVIDER +2CFD ; [*1DB7.0020.0002] # COPTIC FRACTION ONE HALF +2CFE ; [*0289.0020.0002] # COPTIC FULL STOP +2CFF ; [*0308.0020.0002] # COPTIC MORPHOLOGICAL DIVIDER +2D70 ; [*0453.0020.0002] # TIFINAGH SEPARATOR MARK 2D7F ; [.0000.0000.0000] # TIFINAGH CONSONANT JOINER -2E00 ; [*03B7.0020.0002] # RIGHT ANGLE SUBSTITUTION MARKER -2E01 ; [*03B8.0020.0002] # RIGHT ANGLE DOTTED SUBSTITUTION MARKER -2E02 ; [*035C.0020.0002] # LEFT SUBSTITUTION BRACKET -2E03 ; [*035D.0020.0002] # RIGHT SUBSTITUTION BRACKET -2E04 ; [*035E.0020.0002] # LEFT DOTTED SUBSTITUTION BRACKET -2E05 ; [*035F.0020.0002] # RIGHT DOTTED SUBSTITUTION BRACKET -2E06 ; [*03B9.0020.0002] # RAISED INTERPOLATION MARKER -2E07 ; [*03BA.0020.0002] # RAISED DOTTED INTERPOLATION MARKER -2E08 ; [*03BB.0020.0002] # DOTTED TRANSPOSITION MARKER -2E09 ; [*0360.0020.0002] # LEFT TRANSPOSITION BRACKET -2E0A ; [*0361.0020.0002] # RIGHT TRANSPOSITION BRACKET -2E0B ; [*03BC.0020.0002] # RAISED SQUARE -2E0C ; [*0362.0020.0002] # LEFT RAISED OMISSION BRACKET -2E0D ; [*0363.0020.0002] # RIGHT RAISED OMISSION BRACKET -2E0E ; [*03BD.0020.0002] # EDITORIAL CORONIS -2E0F ; [*03BE.0020.0002] # PARAGRAPHOS -2E10 ; [*03BF.0020.0002] # FORKED PARAGRAPHOS -2E11 ; [*03C0.0020.0002] # REVERSED FORKED PARAGRAPHOS -2E12 ; [*03C1.0020.0002] # HYPODIASTOLE -2E13 ; [*03C2.0020.0002] # DOTTED OBELOS -2E14 ; [*03C3.0020.0002] # DOWNWARDS ANCORA -2E15 ; [*03C4.0020.0002] # UPWARDS ANCORA -2E16 ; [*03C5.0020.0002] # DOTTED RIGHT-POINTING ANGLE +2E00 ; [*03CB.0020.0002] # RIGHT ANGLE SUBSTITUTION MARKER +2E01 ; [*03CC.0020.0002] # RIGHT ANGLE DOTTED SUBSTITUTION MARKER +2E02 ; [*036C.0020.0002] # LEFT SUBSTITUTION BRACKET +2E03 ; [*036D.0020.0002] # RIGHT SUBSTITUTION BRACKET +2E04 ; [*036E.0020.0002] # LEFT DOTTED SUBSTITUTION BRACKET +2E05 ; [*036F.0020.0002] # RIGHT DOTTED SUBSTITUTION BRACKET +2E06 ; [*03CD.0020.0002] # RAISED INTERPOLATION MARKER +2E07 ; [*03CE.0020.0002] # RAISED DOTTED INTERPOLATION MARKER +2E08 ; [*03CF.0020.0002] # DOTTED TRANSPOSITION MARKER +2E09 ; [*0370.0020.0002] # LEFT TRANSPOSITION BRACKET +2E0A ; [*0371.0020.0002] # RIGHT TRANSPOSITION BRACKET +2E0B ; [*03D0.0020.0002] # RAISED SQUARE +2E0C ; [*0372.0020.0002] # LEFT RAISED OMISSION BRACKET +2E0D ; [*0373.0020.0002] # RIGHT RAISED OMISSION BRACKET +2E0E ; [*03D1.0020.0002] # EDITORIAL CORONIS +2E0F ; [*03D2.0020.0002] # PARAGRAPHOS +2E10 ; [*03D3.0020.0002] # FORKED PARAGRAPHOS +2E11 ; [*03D4.0020.0002] # REVERSED FORKED PARAGRAPHOS +2E12 ; [*03D5.0020.0002] # HYPODIASTOLE +2E13 ; [*03D6.0020.0002] # DOTTED OBELOS +2E14 ; [*03D7.0020.0002] # DOWNWARDS ANCORA +2E15 ; [*03D8.0020.0002] # UPWARDS ANCORA +2E16 ; [*03D9.0020.0002] # DOTTED RIGHT-POINTING ANGLE 2E17 ; [*021C.0020.0002] # DOUBLE OBLIQUE HYPHEN -2E18 ; [*0277.0020.0002] # INVERTED INTERROBANG -2E19 ; [*02F9.0020.0002] # PALM BRANCH -2E1A ; [*03C6.0020.0002] # HYPHEN WITH DIAERESIS -2E1B ; [*03C7.0020.0002] # TILDE WITH RING ABOVE -2E1C ; [*0364.0020.0002] # LEFT LOW PARAPHRASE BRACKET -2E1D ; [*0365.0020.0002] # RIGHT LOW PARAPHRASE BRACKET -2E1E ; [*03C8.0020.0002] # TILDE WITH DOT ABOVE -2E1F ; [*03C9.0020.0002] # TILDE WITH DOT BELOW -2E20 ; [*0366.0020.0002] # LEFT VERTICAL BAR WITH QUILL -2E21 ; [*0367.0020.0002] # RIGHT VERTICAL BAR WITH QUILL -2E22 ; [*0368.0020.0002] # TOP LEFT HALF BRACKET -2E23 ; [*0369.0020.0002] # TOP RIGHT HALF BRACKET -2E24 ; [*036A.0020.0002] # BOTTOM LEFT HALF BRACKET -2E25 ; [*036B.0020.0002] # BOTTOM RIGHT HALF BRACKET -2E26 ; [*036C.0020.0002] # LEFT SIDEWAYS U BRACKET -2E27 ; [*036D.0020.0002] # RIGHT SIDEWAYS U BRACKET -2E28 ; [*036E.0020.0002] # LEFT DOUBLE PARENTHESIS -2E29 ; [*036F.0020.0002] # RIGHT DOUBLE PARENTHESIS -2E2A ; [*02F2.0020.0002] # TWO DOTS OVER ONE DOT PUNCTUATION -2E2B ; [*02F3.0020.0002] # ONE DOT OVER TWO DOTS PUNCTUATION -2E2C ; [*02F4.0020.0002] # SQUARED FOUR DOT PUNCTUATION -2E2D ; [*02F5.0020.0002] # FIVE DOT MARK -2E2E ; [*0269.0020.0002] # REVERSED QUESTION MARK -2E30 ; [*0284.0020.0002] # RING POINT -2E31 ; [*028D.0020.0002] # WORD SEPARATOR MIDDLE DOT -2E32 ; [*0224.0020.0002] # TURNED COMMA -2E33 ; [*028E.0020.0002] # RAISED DOT -2E34 ; [*0223.0020.0002] # RAISED COMMA -2E35 ; [*0237.0020.0002] # TURNED SEMICOLON -2E36 ; [*03A2.0020.0002] # DAGGER WITH LEFT GUARD -2E37 ; [*03A3.0020.0002] # DAGGER WITH RIGHT GUARD -2E38 ; [*03A4.0020.0002] # TURNED DAGGER -2E39 ; [*038B.0020.0002] # TOP HALF SECTION SIGN +2E18 ; [*027D.0020.0002] # INVERTED INTERROBANG +2E19 ; [*0309.0020.0002] # PALM BRANCH +2E1A ; [*03DA.0020.0002] # HYPHEN WITH DIAERESIS +2E1B ; [*03DB.0020.0002] # TILDE WITH RING ABOVE +2E1C ; [*0374.0020.0002] # LEFT LOW PARAPHRASE BRACKET +2E1D ; [*0375.0020.0002] # RIGHT LOW PARAPHRASE BRACKET +2E1E ; [*03DC.0020.0002] # TILDE WITH DOT ABOVE +2E1F ; [*03DD.0020.0002] # TILDE WITH DOT BELOW +2E20 ; [*0376.0020.0002] # LEFT VERTICAL BAR WITH QUILL +2E21 ; [*0377.0020.0002] # RIGHT VERTICAL BAR WITH QUILL +2E22 ; [*0378.0020.0002] # TOP LEFT HALF BRACKET +2E23 ; [*0379.0020.0002] # TOP RIGHT HALF BRACKET +2E24 ; [*037A.0020.0002] # BOTTOM LEFT HALF BRACKET +2E25 ; [*037B.0020.0002] # BOTTOM RIGHT HALF BRACKET +2E26 ; [*037C.0020.0002] # LEFT SIDEWAYS U BRACKET +2E27 ; [*037D.0020.0002] # RIGHT SIDEWAYS U BRACKET +2E28 ; [*037E.0020.0002] # LEFT DOUBLE PARENTHESIS +2E29 ; [*037F.0020.0002] # RIGHT DOUBLE PARENTHESIS +2E2A ; [*0302.0020.0002] # TWO DOTS OVER ONE DOT PUNCTUATION +2E2B ; [*0303.0020.0002] # ONE DOT OVER TWO DOTS PUNCTUATION +2E2C ; [*0304.0020.0002] # SQUARED FOUR DOT PUNCTUATION +2E2D ; [*0305.0020.0002] # FIVE DOT MARK +2E2E ; [*026F.0020.0002] # REVERSED QUESTION MARK +2E30 ; [*028A.0020.0002] # RING POINT +2E31 ; [*0294.0020.0002] # WORD SEPARATOR MIDDLE DOT +2E32 ; [*0225.0020.0002] # TURNED COMMA +2E33 ; [*0295.0020.0002] # RAISED DOT +2E34 ; [*0224.0020.0002] # RAISED COMMA +2E35 ; [*023D.0020.0002] # TURNED SEMICOLON +2E36 ; [*03B5.0020.0002] # DAGGER WITH LEFT GUARD +2E37 ; [*03B6.0020.0002] # DAGGER WITH RIGHT GUARD +2E38 ; [*03B7.0020.0002] # TURNED DAGGER +2E39 ; [*039B.0020.0002] # TOP HALF SECTION SIGN 2E3A ; [*0218.0020.0002] # TWO-EM DASH 2E3B ; [*0219.0020.0002] # THREE-EM DASH -2E3C ; [*0285.0020.0002] # STENOGRAPHIC FULL STOP -2E3D ; [*02F6.0020.0002] # VERTICAL SIX DOTS -2E3E ; [*0385.0020.0002] # WIGGLY VERTICAL LINE -2E3F ; [*038E.0020.0002] # CAPITULUM +2E3C ; [*028B.0020.0002] # STENOGRAPHIC FULL STOP +2E3D ; [*0306.0020.0002] # VERTICAL SIX DOTS +2E3E ; [*0395.0020.0002] # WIGGLY VERTICAL LINE +2E3F ; [*039F.0020.0002] # CAPITULUM 2E40 ; [*021D.0020.0002] # DOUBLE HYPHEN -2E41 ; [*0225.0020.0002] # REVERSED COMMA -2E42 ; [*0312.0020.0002] # DOUBLE LOW-REVERSED-9 QUOTATION MARK +2E41 ; [*0226.0020.0002] # REVERSED COMMA +2E42 ; [*0322.0020.0002] # DOUBLE LOW-REVERSED-9 QUOTATION MARK 2E43 ; [*021B.0020.0002] # DASH WITH LEFT UPTURN -2E44 ; [*03CA.0020.0002] # DOUBLE SUSPENSION MARK -2E45 ; [*03CB.0020.0002] # INVERTED LOW KAVYKA -2E46 ; [*03CC.0020.0002] # INVERTED LOW KAVYKA WITH KAVYKA ABOVE -2E47 ; [*03CD.0020.0002] # LOW KAVYKA -2E48 ; [*03CE.0020.0002] # LOW KAVYKA WITH DOT -2E49 ; [*0239.0020.0002] # DOUBLE STACKED COMMA -2FF0 ; [*1ABF.0020.0002] # IDEOGRAPHIC DESCRIPTION CHARACTER LEFT TO RIGHT -2FF1 ; [*1AC0.0020.0002] # IDEOGRAPHIC DESCRIPTION CHARACTER ABOVE TO BELOW -2FF2 ; [*1AC1.0020.0002] # IDEOGRAPHIC DESCRIPTION CHARACTER LEFT TO MIDDLE AND RIGHT -2FF3 ; [*1AC2.0020.0002] # IDEOGRAPHIC DESCRIPTION CHARACTER ABOVE TO MIDDLE AND BELOW -2FF4 ; [*1AC3.0020.0002] # IDEOGRAPHIC DESCRIPTION CHARACTER FULL SURROUND -2FF5 ; [*1AC4.0020.0002] # IDEOGRAPHIC DESCRIPTION CHARACTER SURROUND FROM ABOVE -2FF6 ; [*1AC5.0020.0002] # IDEOGRAPHIC DESCRIPTION CHARACTER SURROUND FROM BELOW -2FF7 ; [*1AC6.0020.0002] # IDEOGRAPHIC DESCRIPTION CHARACTER SURROUND FROM LEFT -2FF8 ; [*1AC7.0020.0002] # IDEOGRAPHIC DESCRIPTION CHARACTER SURROUND FROM UPPER LEFT -2FF9 ; [*1AC8.0020.0002] # IDEOGRAPHIC DESCRIPTION CHARACTER SURROUND FROM UPPER RIGHT -2FFA ; [*1AC9.0020.0002] # IDEOGRAPHIC DESCRIPTION CHARACTER SURROUND FROM LOWER LEFT -2FFB ; [*1ACA.0020.0002] # IDEOGRAPHIC DESCRIPTION CHARACTER OVERLAID +2E44 ; [*03DE.0020.0002] # DOUBLE SUSPENSION MARK +2E45 ; [*03DF.0020.0002] # INVERTED LOW KAVYKA +2E46 ; [*03E0.0020.0002] # INVERTED LOW KAVYKA WITH KAVYKA ABOVE +2E47 ; [*03E1.0020.0002] # LOW KAVYKA +2E48 ; [*03E2.0020.0002] # LOW KAVYKA WITH DOT +2E49 ; [*023F.0020.0002] # DOUBLE STACKED COMMA +2E4A ; [*03A8.0020.0002] # DOTTED SOLIDUS +2E4B ; [*03B8.0020.0002] # TRIPLE DAGGER +2E4C ; [*0227.0020.0002] # MEDIEVAL COMMA +2E4D ; [*039E.0020.0002] # PARAGRAPHUS MARK +2E4E ; [*0228.0020.0002] # PUNCTUS ELEVATUS MARK +2E4F ; [*0229.0020.0002] # CORNISH VERSE DIVIDER +2E50 ; [*0B5D.0020.0002] # CROSS PATTY WITH RIGHT CROSSBAR +2E51 ; [*0B5E.0020.0002] # CROSS PATTY WITH LEFT CROSSBAR +2E52 ; [*03AB.0020.0002] # TIRONIAN SIGN CAPITAL ET +2FF0 ; [*1D1B.0020.0002] # IDEOGRAPHIC DESCRIPTION CHARACTER LEFT TO RIGHT +2FF1 ; [*1D1C.0020.0002] # IDEOGRAPHIC DESCRIPTION CHARACTER ABOVE TO BELOW +2FF2 ; [*1D1D.0020.0002] # IDEOGRAPHIC DESCRIPTION CHARACTER LEFT TO MIDDLE AND RIGHT +2FF3 ; [*1D1E.0020.0002] # IDEOGRAPHIC DESCRIPTION CHARACTER ABOVE TO MIDDLE AND BELOW +2FF4 ; [*1D1F.0020.0002] # IDEOGRAPHIC DESCRIPTION CHARACTER FULL SURROUND +2FF5 ; [*1D20.0020.0002] # IDEOGRAPHIC DESCRIPTION CHARACTER SURROUND FROM ABOVE +2FF6 ; [*1D21.0020.0002] # IDEOGRAPHIC DESCRIPTION CHARACTER SURROUND FROM BELOW +2FF7 ; [*1D22.0020.0002] # IDEOGRAPHIC DESCRIPTION CHARACTER SURROUND FROM LEFT +2FF8 ; [*1D23.0020.0002] # IDEOGRAPHIC DESCRIPTION CHARACTER SURROUND FROM UPPER LEFT +2FF9 ; [*1D24.0020.0002] # IDEOGRAPHIC DESCRIPTION CHARACTER SURROUND FROM UPPER RIGHT +2FFA ; [*1D25.0020.0002] # IDEOGRAPHIC DESCRIPTION CHARACTER SURROUND FROM LOWER LEFT +2FFB ; [*1D26.0020.0002] # IDEOGRAPHIC DESCRIPTION CHARACTER OVERLAID 3000 ; [*0209.0020.0003] # IDEOGRAPHIC SPACE -3001 ; [*0231.0020.0002] # IDEOGRAPHIC COMMA -3002 ; [*028B.0020.0002] # IDEOGRAPHIC FULL STOP -3003 ; [*03AD.0020.0002] # DITTO MARK -3004 ; [*1AEF.0020.0002] # JAPANESE INDUSTRIAL STANDARD SYMBOL -3008 ; [*0370.0020.0002] # LEFT ANGLE BRACKET -3009 ; [*0371.0020.0002] # RIGHT ANGLE BRACKET -300A ; [*0372.0020.0002] # LEFT DOUBLE ANGLE BRACKET -300B ; [*0373.0020.0002] # RIGHT DOUBLE ANGLE BRACKET -300C ; [*0374.0020.0002] # LEFT CORNER BRACKET -300D ; [*0375.0020.0002] # RIGHT CORNER BRACKET -300E ; [*0376.0020.0002] # LEFT WHITE CORNER BRACKET -300F ; [*0377.0020.0002] # RIGHT WHITE CORNER BRACKET -3010 ; [*0378.0020.0002] # LEFT BLACK LENTICULAR BRACKET -3011 ; [*0379.0020.0002] # RIGHT BLACK LENTICULAR BRACKET -3012 ; [*1AF0.0020.0002] # POSTAL MARK -3013 ; [*1AF1.0020.0002] # GETA MARK -3014 ; [*037A.0020.0002] # LEFT TORTOISE SHELL BRACKET -3015 ; [*037B.0020.0002] # RIGHT TORTOISE SHELL BRACKET -3016 ; [*037C.0020.0002] # LEFT WHITE LENTICULAR BRACKET -3017 ; [*037D.0020.0002] # RIGHT WHITE LENTICULAR BRACKET -3018 ; [*037E.0020.0002] # LEFT WHITE TORTOISE SHELL BRACKET -3019 ; [*037F.0020.0002] # RIGHT WHITE TORTOISE SHELL BRACKET -301A ; [*0380.0020.0002] # LEFT WHITE SQUARE BRACKET -301B ; [*0381.0020.0002] # RIGHT WHITE SQUARE BRACKET +3001 ; [*0236.0020.0002] # IDEOGRAPHIC COMMA +3002 ; [*0292.0020.0002] # IDEOGRAPHIC FULL STOP +3003 ; [*03C1.0020.0002] # DITTO MARK +3004 ; [*1D4B.0020.0002] # JAPANESE INDUSTRIAL STANDARD SYMBOL +3008 ; [*0380.0020.0002] # LEFT ANGLE BRACKET +3009 ; [*0381.0020.0002] # RIGHT ANGLE BRACKET +300A ; [*0382.0020.0002] # LEFT DOUBLE ANGLE BRACKET +300B ; [*0383.0020.0002] # RIGHT DOUBLE ANGLE BRACKET +300C ; [*0384.0020.0002] # LEFT CORNER BRACKET +300D ; [*0385.0020.0002] # RIGHT CORNER BRACKET +300E ; [*0386.0020.0002] # LEFT WHITE CORNER BRACKET +300F ; [*0387.0020.0002] # RIGHT WHITE CORNER BRACKET +3010 ; [*0388.0020.0002] # LEFT BLACK LENTICULAR BRACKET +3011 ; [*0389.0020.0002] # RIGHT BLACK LENTICULAR BRACKET +3012 ; [*1D4C.0020.0002] # POSTAL MARK +3013 ; [*1D4D.0020.0002] # GETA MARK +3014 ; [*038A.0020.0002] # LEFT TORTOISE SHELL BRACKET +3015 ; [*038B.0020.0002] # RIGHT TORTOISE SHELL BRACKET +3016 ; [*038C.0020.0002] # LEFT WHITE LENTICULAR BRACKET +3017 ; [*038D.0020.0002] # RIGHT WHITE LENTICULAR BRACKET +3018 ; [*038E.0020.0002] # LEFT WHITE TORTOISE SHELL BRACKET +3019 ; [*038F.0020.0002] # RIGHT WHITE TORTOISE SHELL BRACKET +301A ; [*0390.0020.0002] # LEFT WHITE SQUARE BRACKET +301B ; [*0391.0020.0002] # RIGHT WHITE SQUARE BRACKET 301C ; [*021E.0020.0002] # WAVE DASH -301D ; [*0313.0020.0002] # REVERSED DOUBLE PRIME QUOTATION MARK -301E ; [*0314.0020.0002] # DOUBLE PRIME QUOTATION MARK -301F ; [*0315.0020.0002] # LOW DOUBLE PRIME QUOTATION MARK -3020 ; [*1AF2.0020.0002] # POSTAL MARK FACE +301D ; [*0323.0020.0002] # REVERSED DOUBLE PRIME QUOTATION MARK +301E ; [*0324.0020.0002] # DOUBLE PRIME QUOTATION MARK +301F ; [*0325.0020.0002] # LOW DOUBLE PRIME QUOTATION MARK +3020 ; [*1D4E.0020.0002] # POSTAL MARK FACE 3030 ; [*021F.0020.0002] # WAVY DASH -3036 ; [*1AF0.0020.0004] # CIRCLED POSTAL MARK -3037 ; [*1AF3.0020.0002] # IDEOGRAPHIC TELEGRAPH LINE FEED SEPARATOR SYMBOL -303D ; [*03AE.0020.0002] # PART ALTERNATION MARK -303E ; [*1AF4.0020.0002] # IDEOGRAPHIC VARIATION INDICATOR -303F ; [*1AF5.0020.0002] # IDEOGRAPHIC HALF FILL SPACE -309B ; [*04A7.0020.0002] # KATAKANA-HIRAGANA VOICED SOUND MARK -309C ; [*04A8.0020.0002] # KATAKANA-HIRAGANA SEMI-VOICED SOUND MARK +3036 ; [*1D4C.0020.0004] # CIRCLED POSTAL MARK +3037 ; [*1D4F.0020.0002] # IDEOGRAPHIC TELEGRAPH LINE FEED SEPARATOR SYMBOL +303D ; [*03C2.0020.0002] # PART ALTERNATION MARK +303E ; [*1D50.0020.0002] # IDEOGRAPHIC VARIATION INDICATOR +303F ; [*1D51.0020.0002] # IDEOGRAPHIC HALF FILL SPACE +309B ; [*04C3.0020.0002] # KATAKANA-HIRAGANA VOICED SOUND MARK +309C ; [*04C4.0020.0002] # KATAKANA-HIRAGANA SEMI-VOICED SOUND MARK 30A0 ; [*0220.0020.0002] # KATAKANA-HIRAGANA DOUBLE HYPHEN 30FB ; [*0221.0020.0002] # KATAKANA MIDDLE DOT -3190 ; [*1AF6.0020.0002] # IDEOGRAPHIC ANNOTATION LINKING MARK -3191 ; [*1AF7.0020.0002] # IDEOGRAPHIC ANNOTATION REVERSE MARK -31C0 ; [*1ACB.0020.0002] # CJK STROKE T -31C1 ; [*1ACC.0020.0002] # CJK STROKE WG -31C2 ; [*1ACD.0020.0002] # CJK STROKE XG -31C3 ; [*1ACE.0020.0002] # CJK STROKE BXG -31C4 ; [*1ACF.0020.0002] # CJK STROKE SW -31C5 ; [*1AD0.0020.0002] # CJK STROKE HZZ -31C6 ; [*1AD1.0020.0002] # CJK STROKE HZG -31C7 ; [*1AD2.0020.0002] # CJK STROKE HP -31C8 ; [*1AD3.0020.0002] # CJK STROKE HZWG -31C9 ; [*1AD4.0020.0002] # CJK STROKE SZWG -31CA ; [*1AD5.0020.0002] # CJK STROKE HZT -31CB ; [*1AD6.0020.0002] # CJK STROKE HZZP -31CC ; [*1AD7.0020.0002] # CJK STROKE HPWG -31CD ; [*1AD8.0020.0002] # CJK STROKE HZW -31CE ; [*1AD9.0020.0002] # CJK STROKE HZZZ -31CF ; [*1ADA.0020.0002] # CJK STROKE N -31D0 ; [*1ADB.0020.0002] # CJK STROKE H -31D1 ; [*1ADC.0020.0002] # CJK STROKE S -31D2 ; [*1ADD.0020.0002] # CJK STROKE P -31D3 ; [*1ADE.0020.0002] # CJK STROKE SP -31D4 ; [*1ADF.0020.0002] # CJK STROKE D -31D5 ; [*1AE0.0020.0002] # CJK STROKE HZ -31D6 ; [*1AE1.0020.0002] # CJK STROKE HG -31D7 ; [*1AE2.0020.0002] # CJK STROKE SZ -31D8 ; [*1AE3.0020.0002] # CJK STROKE SWZ -31D9 ; [*1AE4.0020.0002] # CJK STROKE ST -31DA ; [*1AE5.0020.0002] # CJK STROKE SG -31DB ; [*1AE6.0020.0002] # CJK STROKE PD -31DC ; [*1AE7.0020.0002] # CJK STROKE PZ -31DD ; [*1AE8.0020.0002] # CJK STROKE TN -31DE ; [*1AE9.0020.0002] # CJK STROKE SZZ -31DF ; [*1AEA.0020.0002] # CJK STROKE SWG -31E0 ; [*1AEB.0020.0002] # CJK STROKE HXWG -31E1 ; [*1AEC.0020.0002] # CJK STROKE HZZZG -31E2 ; [*1AED.0020.0002] # CJK STROKE PG -31E3 ; [*1AEE.0020.0002] # CJK STROKE Q -327F ; [*1AF8.0020.0002] # KOREAN STANDARD SYMBOL -4DC0 ; [*0EC2.0020.0002] # HEXAGRAM FOR THE CREATIVE HEAVEN -4DC1 ; [*0EC3.0020.0002] # HEXAGRAM FOR THE RECEPTIVE EARTH -4DC2 ; [*0EC4.0020.0002] # HEXAGRAM FOR DIFFICULTY AT THE BEGINNING -4DC3 ; [*0EC5.0020.0002] # HEXAGRAM FOR YOUTHFUL FOLLY -4DC4 ; [*0EC6.0020.0002] # HEXAGRAM FOR WAITING -4DC5 ; [*0EC7.0020.0002] # HEXAGRAM FOR CONFLICT -4DC6 ; [*0EC8.0020.0002] # HEXAGRAM FOR THE ARMY -4DC7 ; [*0EC9.0020.0002] # HEXAGRAM FOR HOLDING TOGETHER -4DC8 ; [*0ECA.0020.0002] # HEXAGRAM FOR SMALL TAMING -4DC9 ; [*0ECB.0020.0002] # HEXAGRAM FOR TREADING -4DCA ; [*0ECC.0020.0002] # HEXAGRAM FOR PEACE -4DCB ; [*0ECD.0020.0002] # HEXAGRAM FOR STANDSTILL -4DCC ; [*0ECE.0020.0002] # HEXAGRAM FOR FELLOWSHIP -4DCD ; [*0ECF.0020.0002] # HEXAGRAM FOR GREAT POSSESSION -4DCE ; [*0ED0.0020.0002] # HEXAGRAM FOR MODESTY -4DCF ; [*0ED1.0020.0002] # HEXAGRAM FOR ENTHUSIASM -4DD0 ; [*0ED2.0020.0002] # HEXAGRAM FOR FOLLOWING -4DD1 ; [*0ED3.0020.0002] # HEXAGRAM FOR WORK ON THE DECAYED -4DD2 ; [*0ED4.0020.0002] # HEXAGRAM FOR APPROACH -4DD3 ; [*0ED5.0020.0002] # HEXAGRAM FOR CONTEMPLATION -4DD4 ; [*0ED6.0020.0002] # HEXAGRAM FOR BITING THROUGH -4DD5 ; [*0ED7.0020.0002] # HEXAGRAM FOR GRACE -4DD6 ; [*0ED8.0020.0002] # HEXAGRAM FOR SPLITTING APART -4DD7 ; [*0ED9.0020.0002] # HEXAGRAM FOR RETURN -4DD8 ; [*0EDA.0020.0002] # HEXAGRAM FOR INNOCENCE -4DD9 ; [*0EDB.0020.0002] # HEXAGRAM FOR GREAT TAMING -4DDA ; [*0EDC.0020.0002] # HEXAGRAM FOR MOUTH CORNERS -4DDB ; [*0EDD.0020.0002] # HEXAGRAM FOR GREAT PREPONDERANCE -4DDC ; [*0EDE.0020.0002] # HEXAGRAM FOR THE ABYSMAL WATER -4DDD ; [*0EDF.0020.0002] # HEXAGRAM FOR THE CLINGING FIRE -4DDE ; [*0EE0.0020.0002] # HEXAGRAM FOR INFLUENCE -4DDF ; [*0EE1.0020.0002] # HEXAGRAM FOR DURATION -4DE0 ; [*0EE2.0020.0002] # HEXAGRAM FOR RETREAT -4DE1 ; [*0EE3.0020.0002] # HEXAGRAM FOR GREAT POWER -4DE2 ; [*0EE4.0020.0002] # HEXAGRAM FOR PROGRESS -4DE3 ; [*0EE5.0020.0002] # HEXAGRAM FOR DARKENING OF THE LIGHT -4DE4 ; [*0EE6.0020.0002] # HEXAGRAM FOR THE FAMILY -4DE5 ; [*0EE7.0020.0002] # HEXAGRAM FOR OPPOSITION -4DE6 ; [*0EE8.0020.0002] # HEXAGRAM FOR OBSTRUCTION -4DE7 ; [*0EE9.0020.0002] # HEXAGRAM FOR DELIVERANCE -4DE8 ; [*0EEA.0020.0002] # HEXAGRAM FOR DECREASE -4DE9 ; [*0EEB.0020.0002] # HEXAGRAM FOR INCREASE -4DEA ; [*0EEC.0020.0002] # HEXAGRAM FOR BREAKTHROUGH -4DEB ; [*0EED.0020.0002] # HEXAGRAM FOR COMING TO MEET -4DEC ; [*0EEE.0020.0002] # HEXAGRAM FOR GATHERING TOGETHER -4DED ; [*0EEF.0020.0002] # HEXAGRAM FOR PUSHING UPWARD -4DEE ; [*0EF0.0020.0002] # HEXAGRAM FOR OPPRESSION -4DEF ; [*0EF1.0020.0002] # HEXAGRAM FOR THE WELL -4DF0 ; [*0EF2.0020.0002] # HEXAGRAM FOR REVOLUTION -4DF1 ; [*0EF3.0020.0002] # HEXAGRAM FOR THE CAULDRON -4DF2 ; [*0EF4.0020.0002] # HEXAGRAM FOR THE AROUSING THUNDER -4DF3 ; [*0EF5.0020.0002] # HEXAGRAM FOR THE KEEPING STILL MOUNTAIN -4DF4 ; [*0EF6.0020.0002] # HEXAGRAM FOR DEVELOPMENT -4DF5 ; [*0EF7.0020.0002] # HEXAGRAM FOR THE MARRYING MAIDEN -4DF6 ; [*0EF8.0020.0002] # HEXAGRAM FOR ABUNDANCE -4DF7 ; [*0EF9.0020.0002] # HEXAGRAM FOR THE WANDERER -4DF8 ; [*0EFA.0020.0002] # HEXAGRAM FOR THE GENTLE WIND -4DF9 ; [*0EFB.0020.0002] # HEXAGRAM FOR THE JOYOUS LAKE -4DFA ; [*0EFC.0020.0002] # HEXAGRAM FOR DISPERSION -4DFB ; [*0EFD.0020.0002] # HEXAGRAM FOR LIMITATION -4DFC ; [*0EFE.0020.0002] # HEXAGRAM FOR INNER TRUTH -4DFD ; [*0EFF.0020.0002] # HEXAGRAM FOR SMALL PREPONDERANCE -4DFE ; [*0F00.0020.0002] # HEXAGRAM FOR AFTER COMPLETION -4DFF ; [*0F01.0020.0002] # HEXAGRAM FOR BEFORE COMPLETION -A490 ; [*0F59.0020.0002] # YI RADICAL QOT -A491 ; [*0F5A.0020.0002] # YI RADICAL LI -A492 ; [*0F5B.0020.0002] # YI RADICAL KIT -A493 ; [*0F5C.0020.0002] # YI RADICAL NYIP -A494 ; [*0F5D.0020.0002] # YI RADICAL CYP -A495 ; [*0F5E.0020.0002] # YI RADICAL SSI -A496 ; [*0F5F.0020.0002] # YI RADICAL GGOP -A497 ; [*0F60.0020.0002] # YI RADICAL GEP -A498 ; [*0F61.0020.0002] # YI RADICAL MI -A499 ; [*0F62.0020.0002] # YI RADICAL HXIT -A49A ; [*0F63.0020.0002] # YI RADICAL LYR -A49B ; [*0F64.0020.0002] # YI RADICAL BBUT -A49C ; [*0F65.0020.0002] # YI RADICAL MOP -A49D ; [*0F66.0020.0002] # YI RADICAL YO -A49E ; [*0F67.0020.0002] # YI RADICAL PUT -A49F ; [*0F68.0020.0002] # YI RADICAL HXUO -A4A0 ; [*0F69.0020.0002] # YI RADICAL TAT -A4A1 ; [*0F6A.0020.0002] # YI RADICAL GA -A4A2 ; [*0F6B.0020.0002] # YI RADICAL ZUP -A4A3 ; [*0F6C.0020.0002] # YI RADICAL CYT -A4A4 ; [*0F6D.0020.0002] # YI RADICAL DDUR -A4A5 ; [*0F6E.0020.0002] # YI RADICAL BUR -A4A6 ; [*0F6F.0020.0002] # YI RADICAL GGUO -A4A7 ; [*0F70.0020.0002] # YI RADICAL NYOP -A4A8 ; [*0F71.0020.0002] # YI RADICAL TU -A4A9 ; [*0F72.0020.0002] # YI RADICAL OP -A4AA ; [*0F73.0020.0002] # YI RADICAL JJUT -A4AB ; [*0F74.0020.0002] # YI RADICAL ZOT -A4AC ; [*0F75.0020.0002] # YI RADICAL PYT -A4AD ; [*0F76.0020.0002] # YI RADICAL HMO -A4AE ; [*0F77.0020.0002] # YI RADICAL YIT -A4AF ; [*0F78.0020.0002] # YI RADICAL VUR -A4B0 ; [*0F79.0020.0002] # YI RADICAL SHY -A4B1 ; [*0F7A.0020.0002] # YI RADICAL VEP -A4B2 ; [*0F7B.0020.0002] # YI RADICAL ZA -A4B3 ; [*0F7C.0020.0002] # YI RADICAL JO -A4B4 ; [*0F7D.0020.0002] # YI RADICAL NZUP -A4B5 ; [*0F7E.0020.0002] # YI RADICAL JJY -A4B6 ; [*0F7F.0020.0002] # YI RADICAL GOT -A4B7 ; [*0F80.0020.0002] # YI RADICAL JJIE -A4B8 ; [*0F81.0020.0002] # YI RADICAL WO -A4B9 ; [*0F82.0020.0002] # YI RADICAL DU -A4BA ; [*0F83.0020.0002] # YI RADICAL SHUR -A4BB ; [*0F84.0020.0002] # YI RADICAL LIE -A4BC ; [*0F85.0020.0002] # YI RADICAL CY -A4BD ; [*0F86.0020.0002] # YI RADICAL CUOP -A4BE ; [*0F87.0020.0002] # YI RADICAL CIP -A4BF ; [*0F88.0020.0002] # YI RADICAL HXOP -A4C0 ; [*0F89.0020.0002] # YI RADICAL SHAT -A4C1 ; [*0F8A.0020.0002] # YI RADICAL ZUR -A4C2 ; [*0F8B.0020.0002] # YI RADICAL SHOP -A4C3 ; [*0F8C.0020.0002] # YI RADICAL CHE -A4C4 ; [*0F8D.0020.0002] # YI RADICAL ZZIET -A4C5 ; [*0F8E.0020.0002] # YI RADICAL NBIE -A4C6 ; [*0F8F.0020.0002] # YI RADICAL KE -A4FE ; [*022E.0020.0002] # LISU PUNCTUATION COMMA -A4FF ; [*0286.0020.0002] # LISU PUNCTUATION FULL STOP -A60D ; [*022F.0020.0002] # VAI COMMA -A60E ; [*0287.0020.0002] # VAI FULL STOP -A60F ; [*0271.0020.0002] # VAI QUESTION MARK +3190 ; [*1D52.0020.0002] # IDEOGRAPHIC ANNOTATION LINKING MARK +3191 ; [*1D53.0020.0002] # IDEOGRAPHIC ANNOTATION REVERSE MARK +31C0 ; [*1D27.0020.0002] # CJK STROKE T +31C1 ; [*1D28.0020.0002] # CJK STROKE WG +31C2 ; [*1D29.0020.0002] # CJK STROKE XG +31C3 ; [*1D2A.0020.0002] # CJK STROKE BXG +31C4 ; [*1D2B.0020.0002] # CJK STROKE SW +31C5 ; [*1D2C.0020.0002] # CJK STROKE HZZ +31C6 ; [*1D2D.0020.0002] # CJK STROKE HZG +31C7 ; [*1D2E.0020.0002] # CJK STROKE HP +31C8 ; [*1D2F.0020.0002] # CJK STROKE HZWG +31C9 ; [*1D30.0020.0002] # CJK STROKE SZWG +31CA ; [*1D31.0020.0002] # CJK STROKE HZT +31CB ; [*1D32.0020.0002] # CJK STROKE HZZP +31CC ; [*1D33.0020.0002] # CJK STROKE HPWG +31CD ; [*1D34.0020.0002] # CJK STROKE HZW +31CE ; [*1D35.0020.0002] # CJK STROKE HZZZ +31CF ; [*1D36.0020.0002] # CJK STROKE N +31D0 ; [*1D37.0020.0002] # CJK STROKE H +31D1 ; [*1D38.0020.0002] # CJK STROKE S +31D2 ; [*1D39.0020.0002] # CJK STROKE P +31D3 ; [*1D3A.0020.0002] # CJK STROKE SP +31D4 ; [*1D3B.0020.0002] # CJK STROKE D +31D5 ; [*1D3C.0020.0002] # CJK STROKE HZ +31D6 ; [*1D3D.0020.0002] # CJK STROKE HG +31D7 ; [*1D3E.0020.0002] # CJK STROKE SZ +31D8 ; [*1D3F.0020.0002] # CJK STROKE SWZ +31D9 ; [*1D40.0020.0002] # CJK STROKE ST +31DA ; [*1D41.0020.0002] # CJK STROKE SG +31DB ; [*1D42.0020.0002] # CJK STROKE PD +31DC ; [*1D43.0020.0002] # CJK STROKE PZ +31DD ; [*1D44.0020.0002] # CJK STROKE TN +31DE ; [*1D45.0020.0002] # CJK STROKE SZZ +31DF ; [*1D46.0020.0002] # CJK STROKE SWG +31E0 ; [*1D47.0020.0002] # CJK STROKE HXWG +31E1 ; [*1D48.0020.0002] # CJK STROKE HZZZG +31E2 ; [*1D49.0020.0002] # CJK STROKE PG +31E3 ; [*1D4A.0020.0002] # CJK STROKE Q +327F ; [*1D54.0020.0002] # KOREAN STANDARD SYMBOL +4DC0 ; [*0FF6.0020.0002] # HEXAGRAM FOR THE CREATIVE HEAVEN +4DC1 ; [*0FF7.0020.0002] # HEXAGRAM FOR THE RECEPTIVE EARTH +4DC2 ; [*0FF8.0020.0002] # HEXAGRAM FOR DIFFICULTY AT THE BEGINNING +4DC3 ; [*0FF9.0020.0002] # HEXAGRAM FOR YOUTHFUL FOLLY +4DC4 ; [*0FFA.0020.0002] # HEXAGRAM FOR WAITING +4DC5 ; [*0FFB.0020.0002] # HEXAGRAM FOR CONFLICT +4DC6 ; [*0FFC.0020.0002] # HEXAGRAM FOR THE ARMY +4DC7 ; [*0FFD.0020.0002] # HEXAGRAM FOR HOLDING TOGETHER +4DC8 ; [*0FFE.0020.0002] # HEXAGRAM FOR SMALL TAMING +4DC9 ; [*0FFF.0020.0002] # HEXAGRAM FOR TREADING +4DCA ; [*1000.0020.0002] # HEXAGRAM FOR PEACE +4DCB ; [*1001.0020.0002] # HEXAGRAM FOR STANDSTILL +4DCC ; [*1002.0020.0002] # HEXAGRAM FOR FELLOWSHIP +4DCD ; [*1003.0020.0002] # HEXAGRAM FOR GREAT POSSESSION +4DCE ; [*1004.0020.0002] # HEXAGRAM FOR MODESTY +4DCF ; [*1005.0020.0002] # HEXAGRAM FOR ENTHUSIASM +4DD0 ; [*1006.0020.0002] # HEXAGRAM FOR FOLLOWING +4DD1 ; [*1007.0020.0002] # HEXAGRAM FOR WORK ON THE DECAYED +4DD2 ; [*1008.0020.0002] # HEXAGRAM FOR APPROACH +4DD3 ; [*1009.0020.0002] # HEXAGRAM FOR CONTEMPLATION +4DD4 ; [*100A.0020.0002] # HEXAGRAM FOR BITING THROUGH +4DD5 ; [*100B.0020.0002] # HEXAGRAM FOR GRACE +4DD6 ; [*100C.0020.0002] # HEXAGRAM FOR SPLITTING APART +4DD7 ; [*100D.0020.0002] # HEXAGRAM FOR RETURN +4DD8 ; [*100E.0020.0002] # HEXAGRAM FOR INNOCENCE +4DD9 ; [*100F.0020.0002] # HEXAGRAM FOR GREAT TAMING +4DDA ; [*1010.0020.0002] # HEXAGRAM FOR MOUTH CORNERS +4DDB ; [*1011.0020.0002] # HEXAGRAM FOR GREAT PREPONDERANCE +4DDC ; [*1012.0020.0002] # HEXAGRAM FOR THE ABYSMAL WATER +4DDD ; [*1013.0020.0002] # HEXAGRAM FOR THE CLINGING FIRE +4DDE ; [*1014.0020.0002] # HEXAGRAM FOR INFLUENCE +4DDF ; [*1015.0020.0002] # HEXAGRAM FOR DURATION +4DE0 ; [*1016.0020.0002] # HEXAGRAM FOR RETREAT +4DE1 ; [*1017.0020.0002] # HEXAGRAM FOR GREAT POWER +4DE2 ; [*1018.0020.0002] # HEXAGRAM FOR PROGRESS +4DE3 ; [*1019.0020.0002] # HEXAGRAM FOR DARKENING OF THE LIGHT +4DE4 ; [*101A.0020.0002] # HEXAGRAM FOR THE FAMILY +4DE5 ; [*101B.0020.0002] # HEXAGRAM FOR OPPOSITION +4DE6 ; [*101C.0020.0002] # HEXAGRAM FOR OBSTRUCTION +4DE7 ; [*101D.0020.0002] # HEXAGRAM FOR DELIVERANCE +4DE8 ; [*101E.0020.0002] # HEXAGRAM FOR DECREASE +4DE9 ; [*101F.0020.0002] # HEXAGRAM FOR INCREASE +4DEA ; [*1020.0020.0002] # HEXAGRAM FOR BREAKTHROUGH +4DEB ; [*1021.0020.0002] # HEXAGRAM FOR COMING TO MEET +4DEC ; [*1022.0020.0002] # HEXAGRAM FOR GATHERING TOGETHER +4DED ; [*1023.0020.0002] # HEXAGRAM FOR PUSHING UPWARD +4DEE ; [*1024.0020.0002] # HEXAGRAM FOR OPPRESSION +4DEF ; [*1025.0020.0002] # HEXAGRAM FOR THE WELL +4DF0 ; [*1026.0020.0002] # HEXAGRAM FOR REVOLUTION +4DF1 ; [*1027.0020.0002] # HEXAGRAM FOR THE CAULDRON +4DF2 ; [*1028.0020.0002] # HEXAGRAM FOR THE AROUSING THUNDER +4DF3 ; [*1029.0020.0002] # HEXAGRAM FOR THE KEEPING STILL MOUNTAIN +4DF4 ; [*102A.0020.0002] # HEXAGRAM FOR DEVELOPMENT +4DF5 ; [*102B.0020.0002] # HEXAGRAM FOR THE MARRYING MAIDEN +4DF6 ; [*102C.0020.0002] # HEXAGRAM FOR ABUNDANCE +4DF7 ; [*102D.0020.0002] # HEXAGRAM FOR THE WANDERER +4DF8 ; [*102E.0020.0002] # HEXAGRAM FOR THE GENTLE WIND +4DF9 ; [*102F.0020.0002] # HEXAGRAM FOR THE JOYOUS LAKE +4DFA ; [*1030.0020.0002] # HEXAGRAM FOR DISPERSION +4DFB ; [*1031.0020.0002] # HEXAGRAM FOR LIMITATION +4DFC ; [*1032.0020.0002] # HEXAGRAM FOR INNER TRUTH +4DFD ; [*1033.0020.0002] # HEXAGRAM FOR SMALL PREPONDERANCE +4DFE ; [*1034.0020.0002] # HEXAGRAM FOR AFTER COMPLETION +4DFF ; [*1035.0020.0002] # HEXAGRAM FOR BEFORE COMPLETION +A490 ; [*108D.0020.0002] # YI RADICAL QOT +A491 ; [*108E.0020.0002] # YI RADICAL LI +A492 ; [*108F.0020.0002] # YI RADICAL KIT +A493 ; [*1090.0020.0002] # YI RADICAL NYIP +A494 ; [*1091.0020.0002] # YI RADICAL CYP +A495 ; [*1092.0020.0002] # YI RADICAL SSI +A496 ; [*1093.0020.0002] # YI RADICAL GGOP +A497 ; [*1094.0020.0002] # YI RADICAL GEP +A498 ; [*1095.0020.0002] # YI RADICAL MI +A499 ; [*1096.0020.0002] # YI RADICAL HXIT +A49A ; [*1097.0020.0002] # YI RADICAL LYR +A49B ; [*1098.0020.0002] # YI RADICAL BBUT +A49C ; [*1099.0020.0002] # YI RADICAL MOP +A49D ; [*109A.0020.0002] # YI RADICAL YO +A49E ; [*109B.0020.0002] # YI RADICAL PUT +A49F ; [*109C.0020.0002] # YI RADICAL HXUO +A4A0 ; [*109D.0020.0002] # YI RADICAL TAT +A4A1 ; [*109E.0020.0002] # YI RADICAL GA +A4A2 ; [*109F.0020.0002] # YI RADICAL ZUP +A4A3 ; [*10A0.0020.0002] # YI RADICAL CYT +A4A4 ; [*10A1.0020.0002] # YI RADICAL DDUR +A4A5 ; [*10A2.0020.0002] # YI RADICAL BUR +A4A6 ; [*10A3.0020.0002] # YI RADICAL GGUO +A4A7 ; [*10A4.0020.0002] # YI RADICAL NYOP +A4A8 ; [*10A5.0020.0002] # YI RADICAL TU +A4A9 ; [*10A6.0020.0002] # YI RADICAL OP +A4AA ; [*10A7.0020.0002] # YI RADICAL JJUT +A4AB ; [*10A8.0020.0002] # YI RADICAL ZOT +A4AC ; [*10A9.0020.0002] # YI RADICAL PYT +A4AD ; [*10AA.0020.0002] # YI RADICAL HMO +A4AE ; [*10AB.0020.0002] # YI RADICAL YIT +A4AF ; [*10AC.0020.0002] # YI RADICAL VUR +A4B0 ; [*10AD.0020.0002] # YI RADICAL SHY +A4B1 ; [*10AE.0020.0002] # YI RADICAL VEP +A4B2 ; [*10AF.0020.0002] # YI RADICAL ZA +A4B3 ; [*10B0.0020.0002] # YI RADICAL JO +A4B4 ; [*10B1.0020.0002] # YI RADICAL NZUP +A4B5 ; [*10B2.0020.0002] # YI RADICAL JJY +A4B6 ; [*10B3.0020.0002] # YI RADICAL GOT +A4B7 ; [*10B4.0020.0002] # YI RADICAL JJIE +A4B8 ; [*10B5.0020.0002] # YI RADICAL WO +A4B9 ; [*10B6.0020.0002] # YI RADICAL DU +A4BA ; [*10B7.0020.0002] # YI RADICAL SHUR +A4BB ; [*10B8.0020.0002] # YI RADICAL LIE +A4BC ; [*10B9.0020.0002] # YI RADICAL CY +A4BD ; [*10BA.0020.0002] # YI RADICAL CUOP +A4BE ; [*10BB.0020.0002] # YI RADICAL CIP +A4BF ; [*10BC.0020.0002] # YI RADICAL HXOP +A4C0 ; [*10BD.0020.0002] # YI RADICAL SHAT +A4C1 ; [*10BE.0020.0002] # YI RADICAL ZUR +A4C2 ; [*10BF.0020.0002] # YI RADICAL SHOP +A4C3 ; [*10C0.0020.0002] # YI RADICAL CHE +A4C4 ; [*10C1.0020.0002] # YI RADICAL ZZIET +A4C5 ; [*10C2.0020.0002] # YI RADICAL NBIE +A4C6 ; [*10C3.0020.0002] # YI RADICAL KE +A4FE ; [*0232.0020.0002] # LISU PUNCTUATION COMMA +A4FF ; [*028C.0020.0002] # LISU PUNCTUATION FULL STOP +A60D ; [*0233.0020.0002] # VAI COMMA +A60E ; [*028D.0020.0002] # VAI FULL STOP +A60F ; [*0277.0020.0002] # VAI QUESTION MARK A670 ; [.0000.0000.0000] # COMBINING CYRILLIC TEN MILLIONS SIGN A671 ; [.0000.0000.0000] # COMBINING CYRILLIC HUNDRED MILLIONS SIGN A672 ; [.0000.0000.0000] # COMBINING CYRILLIC THOUSAND MILLIONS SIGN -A673 ; [*0394.0020.0002] # SLAVONIC ASTERISK -A67E ; [*03CF.0020.0002] # CYRILLIC KAVYKA -A6F2 ; [*02D8.0020.0002] # BAMUM NJAEMLI -A6F3 ; [*0288.0020.0002] # BAMUM FULL STOP -A6F4 ; [*0260.0020.0002] # BAMUM COLON -A6F5 ; [*0230.0020.0002] # BAMUM COMMA -A6F6 ; [*0238.0020.0002] # BAMUM SEMICOLON -A6F7 ; [*0272.0020.0002] # BAMUM QUESTION MARK -A700 ; [*04E6.0020.0002] # MODIFIER LETTER CHINESE TONE YIN PING -A701 ; [*04E7.0020.0002] # MODIFIER LETTER CHINESE TONE YANG PING -A702 ; [*04E8.0020.0002] # MODIFIER LETTER CHINESE TONE YIN SHANG -A703 ; [*04E9.0020.0002] # MODIFIER LETTER CHINESE TONE YANG SHANG -A704 ; [*04EA.0020.0002] # MODIFIER LETTER CHINESE TONE YIN QU -A705 ; [*04EB.0020.0002] # MODIFIER LETTER CHINESE TONE YANG QU -A706 ; [*04EC.0020.0002] # MODIFIER LETTER CHINESE TONE YIN RU -A707 ; [*04ED.0020.0002] # MODIFIER LETTER CHINESE TONE YANG RU -A708 ; [*04EE.0020.0002] # MODIFIER LETTER EXTRA-HIGH DOTTED TONE BAR -A709 ; [*04EF.0020.0002] # MODIFIER LETTER HIGH DOTTED TONE BAR -A70A ; [*04F0.0020.0002] # MODIFIER LETTER MID DOTTED TONE BAR -A70B ; [*04F1.0020.0002] # MODIFIER LETTER LOW DOTTED TONE BAR -A70C ; [*04F2.0020.0002] # MODIFIER LETTER EXTRA-LOW DOTTED TONE BAR -A70D ; [*04F3.0020.0002] # MODIFIER LETTER EXTRA-HIGH DOTTED LEFT-STEM TONE BAR -A70E ; [*04F4.0020.0002] # MODIFIER LETTER HIGH DOTTED LEFT-STEM TONE BAR -A70F ; [*04F5.0020.0002] # MODIFIER LETTER MID DOTTED LEFT-STEM TONE BAR -A710 ; [*04F6.0020.0002] # MODIFIER LETTER LOW DOTTED LEFT-STEM TONE BAR -A711 ; [*04F7.0020.0002] # MODIFIER LETTER EXTRA-LOW DOTTED LEFT-STEM TONE BAR -A712 ; [*04F8.0020.0002] # MODIFIER LETTER EXTRA-HIGH LEFT-STEM TONE BAR -A713 ; [*04F9.0020.0002] # MODIFIER LETTER HIGH LEFT-STEM TONE BAR -A714 ; [*04FA.0020.0002] # MODIFIER LETTER MID LEFT-STEM TONE BAR -A715 ; [*04FB.0020.0002] # MODIFIER LETTER LOW LEFT-STEM TONE BAR -A716 ; [*04FC.0020.0002] # MODIFIER LETTER EXTRA-LOW LEFT-STEM TONE BAR -A717 ; [*04FD.0020.0002] # MODIFIER LETTER DOT VERTICAL BAR -A718 ; [*04FE.0020.0002] # MODIFIER LETTER DOT SLASH -A719 ; [*04FF.0020.0002] # MODIFIER LETTER DOT HORIZONTAL BAR -A71A ; [*0500.0020.0002] # MODIFIER LETTER LOWER RIGHT CORNER ANGLE -A71B ; [*0501.0020.0002] # MODIFIER LETTER RAISED UP ARROW -A71C ; [*0502.0020.0002] # MODIFIER LETTER RAISED DOWN ARROW -A71D ; [*0503.0020.0002] # MODIFIER LETTER RAISED EXCLAMATION MARK -A71E ; [*0504.0020.0002] # MODIFIER LETTER RAISED INVERTED EXCLAMATION MARK -A71F ; [*0505.0020.0002] # MODIFIER LETTER LOW INVERTED EXCLAMATION MARK -A720 ; [*0506.0020.0002] # MODIFIER LETTER STRESS AND HIGH TONE -A721 ; [*0507.0020.0002] # MODIFIER LETTER STRESS AND LOW TONE -A788 ; [*0508.0020.0002] # MODIFIER LETTER LOW CIRCUMFLEX ACCENT -A789 ; [*0509.0020.0002] # MODIFIER LETTER COLON -A78A ; [*050A.0020.0002] # MODIFIER LETTER SHORT EQUALS SIGN -A828 ; [*0535.0020.0002] # SYLOTI NAGRI POETRY MARK-1 -A829 ; [*0536.0020.0002] # SYLOTI NAGRI POETRY MARK-2 -A82A ; [*0537.0020.0002] # SYLOTI NAGRI POETRY MARK-3 -A82B ; [*0538.0020.0002] # SYLOTI NAGRI POETRY MARK-4 -A830 ; [*1B06.0020.0002] # NORTH INDIC FRACTION ONE QUARTER -A831 ; [*1B07.0020.0002] # NORTH INDIC FRACTION ONE HALF -A832 ; [*1B08.0020.0002] # NORTH INDIC FRACTION THREE QUARTERS -A833 ; [*1B09.0020.0002] # NORTH INDIC FRACTION ONE SIXTEENTH -A834 ; [*1B0A.0020.0002] # NORTH INDIC FRACTION ONE EIGHTH -A835 ; [*1B0B.0020.0002] # NORTH INDIC FRACTION THREE SIXTEENTHS -A836 ; [*0539.0020.0002] # NORTH INDIC QUARTER MARK -A837 ; [*053A.0020.0002] # NORTH INDIC PLACEHOLDER MARK -A839 ; [*053B.0020.0002] # NORTH INDIC QUANTITY MARK -A874 ; [*043E.0020.0002] # PHAGS-PA SINGLE HEAD MARK -A875 ; [*043F.0020.0002] # PHAGS-PA DOUBLE HEAD MARK -A876 ; [*0295.0020.0002] # PHAGS-PA MARK SHAD -A877 ; [*0296.0020.0002] # PHAGS-PA MARK DOUBLE SHAD -A8CE ; [*0291.0020.0002] # SAURASHTRA DANDA -A8CF ; [*0292.0020.0002] # SAURASHTRA DOUBLE DANDA +A673 ; [*03A5.0020.0002] # SLAVONIC ASTERISK +A67E ; [*03E3.0020.0002] # CYRILLIC KAVYKA +A6F2 ; [*02E0.0020.0002] # BAMUM NJAEMLI +A6F3 ; [*028E.0020.0002] # BAMUM FULL STOP +A6F4 ; [*0266.0020.0002] # BAMUM COLON +A6F5 ; [*0234.0020.0002] # BAMUM COMMA +A6F6 ; [*023E.0020.0002] # BAMUM SEMICOLON +A6F7 ; [*0278.0020.0002] # BAMUM QUESTION MARK +A700 ; [*0504.0020.0002] # MODIFIER LETTER CHINESE TONE YIN PING +A701 ; [*0505.0020.0002] # MODIFIER LETTER CHINESE TONE YANG PING +A702 ; [*0506.0020.0002] # MODIFIER LETTER CHINESE TONE YIN SHANG +A703 ; [*0507.0020.0002] # MODIFIER LETTER CHINESE TONE YANG SHANG +A704 ; [*0508.0020.0002] # MODIFIER LETTER CHINESE TONE YIN QU +A705 ; [*0509.0020.0002] # MODIFIER LETTER CHINESE TONE YANG QU +A706 ; [*050A.0020.0002] # MODIFIER LETTER CHINESE TONE YIN RU +A707 ; [*050B.0020.0002] # MODIFIER LETTER CHINESE TONE YANG RU +A708 ; [*050C.0020.0002] # MODIFIER LETTER EXTRA-HIGH DOTTED TONE BAR +A709 ; [*050D.0020.0002] # MODIFIER LETTER HIGH DOTTED TONE BAR +A70A ; [*050E.0020.0002] # MODIFIER LETTER MID DOTTED TONE BAR +A70B ; [*050F.0020.0002] # MODIFIER LETTER LOW DOTTED TONE BAR +A70C ; [*0510.0020.0002] # MODIFIER LETTER EXTRA-LOW DOTTED TONE BAR +A70D ; [*0511.0020.0002] # MODIFIER LETTER EXTRA-HIGH DOTTED LEFT-STEM TONE BAR +A70E ; [*0512.0020.0002] # MODIFIER LETTER HIGH DOTTED LEFT-STEM TONE BAR +A70F ; [*0513.0020.0002] # MODIFIER LETTER MID DOTTED LEFT-STEM TONE BAR +A710 ; [*0514.0020.0002] # MODIFIER LETTER LOW DOTTED LEFT-STEM TONE BAR +A711 ; [*0515.0020.0002] # MODIFIER LETTER EXTRA-LOW DOTTED LEFT-STEM TONE BAR +A712 ; [*0516.0020.0002] # MODIFIER LETTER EXTRA-HIGH LEFT-STEM TONE BAR +A713 ; [*0517.0020.0002] # MODIFIER LETTER HIGH LEFT-STEM TONE BAR +A714 ; [*0518.0020.0002] # MODIFIER LETTER MID LEFT-STEM TONE BAR +A715 ; [*0519.0020.0002] # MODIFIER LETTER LOW LEFT-STEM TONE BAR +A716 ; [*051A.0020.0002] # MODIFIER LETTER EXTRA-LOW LEFT-STEM TONE BAR +A717 ; [*051B.0020.0002] # MODIFIER LETTER DOT VERTICAL BAR +A718 ; [*051C.0020.0002] # MODIFIER LETTER DOT SLASH +A719 ; [*051D.0020.0002] # MODIFIER LETTER DOT HORIZONTAL BAR +A71A ; [*051E.0020.0002] # MODIFIER LETTER LOWER RIGHT CORNER ANGLE +A71B ; [*051F.0020.0002] # MODIFIER LETTER RAISED UP ARROW +A71C ; [*0520.0020.0002] # MODIFIER LETTER RAISED DOWN ARROW +A71D ; [*0521.0020.0002] # MODIFIER LETTER RAISED EXCLAMATION MARK +A71E ; [*0522.0020.0002] # MODIFIER LETTER RAISED INVERTED EXCLAMATION MARK +A71F ; [*0523.0020.0002] # MODIFIER LETTER LOW INVERTED EXCLAMATION MARK +A720 ; [*0524.0020.0002] # MODIFIER LETTER STRESS AND HIGH TONE +A721 ; [*0525.0020.0002] # MODIFIER LETTER STRESS AND LOW TONE +A788 ; [*0526.0020.0002] # MODIFIER LETTER LOW CIRCUMFLEX ACCENT +A789 ; [*0527.0020.0002] # MODIFIER LETTER COLON +A78A ; [*0528.0020.0002] # MODIFIER LETTER SHORT EQUALS SIGN +A828 ; [*056C.0020.0002] # SYLOTI NAGRI POETRY MARK-1 +A829 ; [*056D.0020.0002] # SYLOTI NAGRI POETRY MARK-2 +A82A ; [*056E.0020.0002] # SYLOTI NAGRI POETRY MARK-3 +A82B ; [*056F.0020.0002] # SYLOTI NAGRI POETRY MARK-4 +A830 ; [*1D62.0020.0002] # NORTH INDIC FRACTION ONE QUARTER +A831 ; [*1D63.0020.0002] # NORTH INDIC FRACTION ONE HALF +A832 ; [*1D64.0020.0002] # NORTH INDIC FRACTION THREE QUARTERS +A833 ; [*1D65.0020.0002] # NORTH INDIC FRACTION ONE SIXTEENTH +A834 ; [*1D66.0020.0002] # NORTH INDIC FRACTION ONE EIGHTH +A835 ; [*1D67.0020.0002] # NORTH INDIC FRACTION THREE SIXTEENTHS +A836 ; [*0570.0020.0002] # NORTH INDIC QUARTER MARK +A837 ; [*0571.0020.0002] # NORTH INDIC PLACEHOLDER MARK +A839 ; [*0572.0020.0002] # NORTH INDIC QUANTITY MARK +A874 ; [*0454.0020.0002] # PHAGS-PA SINGLE HEAD MARK +A875 ; [*0455.0020.0002] # PHAGS-PA DOUBLE HEAD MARK +A876 ; [*029C.0020.0002] # PHAGS-PA MARK SHAD +A877 ; [*029D.0020.0002] # PHAGS-PA MARK DOUBLE SHAD +A8CE ; [*0298.0020.0002] # SAURASHTRA DANDA +A8CF ; [*0299.0020.0002] # SAURASHTRA DOUBLE DANDA A8E0 ; [.0000.0000.0000] # COMBINING DEVANAGARI DIGIT ZERO A8E1 ; [.0000.0000.0000] # COMBINING DEVANAGARI DIGIT ONE A8E2 ; [.0000.0000.0000] # COMBINING DEVANAGARI DIGIT TWO @@ -4025,71 +4097,73 @@ A8EE ; [.0000.0000.0000] # COMBINING DEVANAGARI LETTER PA A8EF ; [.0000.0000.0000] # COMBINING DEVANAGARI LETTER RA A8F0 ; [.0000.0000.0000] # COMBINING DEVANAGARI LETTER VI A8F1 ; [.0000.0000.0000] # COMBINING DEVANAGARI SIGN AVAGRAHA -A8F8 ; [*03ED.0020.0002] # DEVANAGARI SIGN PUSHPIKA -A8F9 ; [*03EE.0020.0002] # DEVANAGARI GAP FILLER -A8FA ; [*03EF.0020.0002] # DEVANAGARI CARET -A8FC ; [*03F0.0020.0002] # DEVANAGARI SIGN SIDDHAM -A92E ; [*0444.0020.0002] # KAYAH LI SIGN CWI -A92F ; [*0299.0020.0002] # KAYAH LI SIGN SHYA -A95F ; [*02D9.0020.0002] # REJANG SECTION MARK -A9C1 ; [*02CE.0020.0002] # JAVANESE LEFT RERENGGAN -A9C2 ; [*02CF.0020.0002] # JAVANESE RIGHT RERENGGAN -A9C3 ; [*02D0.0020.0002] # JAVANESE PADA ANDAP -A9C4 ; [*02D1.0020.0002] # JAVANESE PADA MADYA -A9C5 ; [*02D2.0020.0002] # JAVANESE PADA LUHUR -A9C6 ; [*02D3.0020.0002] # JAVANESE PADA WINDU -A9C7 ; [*025C.0020.0002] # JAVANESE PADA PANGKAT -A9C8 ; [*02A4.0020.0002] # JAVANESE PADA LINGSA -A9C9 ; [*02A5.0020.0002] # JAVANESE PADA LUNGSI -A9CA ; [*02D4.0020.0002] # JAVANESE PADA ADEG -A9CB ; [*02D5.0020.0002] # JAVANESE PADA ADEG ADEG -A9CC ; [*02D6.0020.0002] # JAVANESE PADA PISELEH -A9CD ; [*02D7.0020.0002] # JAVANESE TURNED PADA PISELEH -A9DE ; [*0445.0020.0002] # JAVANESE PADA TIRTA TUMETES -A9DF ; [*0446.0020.0002] # JAVANESE PADA ISEN-ISEN -AA5C ; [*0447.0020.0002] # CHAM PUNCTUATION SPIRAL -AA5D ; [*02A6.0020.0002] # CHAM PUNCTUATION DANDA -AA5E ; [*02A7.0020.0002] # CHAM PUNCTUATION DOUBLE DANDA -AA5F ; [*02A8.0020.0002] # CHAM PUNCTUATION TRIPLE DANDA -AA77 ; [*0563.0020.0002] # MYANMAR SYMBOL AITON EXCLAMATION -AA78 ; [*0564.0020.0002] # MYANMAR SYMBOL AITON ONE -AA79 ; [*0565.0020.0002] # MYANMAR SYMBOL AITON TWO -AADE ; [*03F7.0020.0002] # TAI VIET SYMBOL HO HOI -AADF ; [*03F8.0020.0002] # TAI VIET SYMBOL KOI KOI -AAF0 ; [*02A9.0020.0002] # MEETEI MAYEK CHEIKHAN -AAF1 ; [*0273.0020.0002] # MEETEI MAYEK AHANG KHUDAM -AB5B ; [*050B.0020.0002] # MODIFIER BREVE WITH INVERTED BREVE -ABEB ; [*02AA.0020.0002] # MEETEI MAYEK CHEIKHEI -FB29 ; [*062C.0020.0005] # HEBREW LETTER ALTERNATIVE PLUS SIGN -FBB2 ; [*0518.0020.0002] # ARABIC SYMBOL DOT ABOVE -FBB3 ; [*0519.0020.0002] # ARABIC SYMBOL DOT BELOW -FBB4 ; [*051A.0020.0002] # ARABIC SYMBOL TWO DOTS ABOVE -FBB5 ; [*051B.0020.0002] # ARABIC SYMBOL TWO DOTS BELOW -FBB6 ; [*051C.0020.0002] # ARABIC SYMBOL THREE DOTS ABOVE -FBB7 ; [*051D.0020.0002] # ARABIC SYMBOL THREE DOTS BELOW -FBB8 ; [*051E.0020.0002] # ARABIC SYMBOL THREE DOTS POINTING DOWNWARDS ABOVE -FBB9 ; [*051F.0020.0002] # ARABIC SYMBOL THREE DOTS POINTING DOWNWARDS BELOW -FBBA ; [*0520.0020.0002] # ARABIC SYMBOL FOUR DOTS ABOVE -FBBB ; [*0521.0020.0002] # ARABIC SYMBOL FOUR DOTS BELOW -FBBC ; [*0522.0020.0002] # ARABIC SYMBOL DOUBLE VERTICAL BAR BELOW -FBBD ; [*0523.0020.0002] # ARABIC SYMBOL TWO DOTS VERTICALLY ABOVE -FBBE ; [*0524.0020.0002] # ARABIC SYMBOL TWO DOTS VERTICALLY BELOW -FBBF ; [*0525.0020.0002] # ARABIC SYMBOL RING -FBC0 ; [*0526.0020.0002] # ARABIC SYMBOL SMALL TAH ABOVE -FBC1 ; [*0527.0020.0002] # ARABIC SYMBOL SMALL TAH BELOW -FD3E ; [*0382.0020.0002] # ORNATE LEFT PARENTHESIS -FD3F ; [*0383.0020.0002] # ORNATE RIGHT PARENTHESIS -FDFD ; [*0517.0020.0002] # ARABIC LIGATURE BISMILLAH AR-RAHMAN AR-RAHEEM -FE10 ; [*0222.0020.0016] # PRESENTATION FORM FOR VERTICAL COMMA -FE11 ; [*0231.0020.0016] # PRESENTATION FORM FOR VERTICAL IDEOGRAPHIC COMMA -FE12 ; [*028B.0020.0016] # PRESENTATION FORM FOR VERTICAL IDEOGRAPHIC FULL STOP -FE13 ; [*023A.0020.0016] # PRESENTATION FORM FOR VERTICAL COLON -FE14 ; [*0234.0020.0016] # PRESENTATION FORM FOR VERTICAL SEMICOLON -FE15 ; [*0261.0020.0016] # PRESENTATION FORM FOR VERTICAL EXCLAMATION MARK -FE16 ; [*0267.0020.0016] # PRESENTATION FORM FOR VERTICAL QUESTION MARK -FE17 ; [*037C.0020.0016] # PRESENTATION FORM FOR VERTICAL LEFT WHITE LENTICULAR BRACKET -FE18 ; [*037D.0020.0016] # PRESENTATION FORM FOR VERTICAL RIGHT WHITE LENTICULAR BRAKCET -FE19 ; [*0278.0020.0016][*0278.0020.0016][*0278.0020.0016] # PRESENTATION FORM FOR VERTICAL HORIZONTAL ELLIPSIS +A8F8 ; [*0401.0020.0002] # DEVANAGARI SIGN PUSHPIKA +A8F9 ; [*0402.0020.0002] # DEVANAGARI GAP FILLER +A8FA ; [*0403.0020.0002] # DEVANAGARI CARET +A8FC ; [*0404.0020.0002] # DEVANAGARI SIGN SIDDHAM +A92E ; [*045A.0020.0002] # KAYAH LI SIGN CWI +A92F ; [*02A0.0020.0002] # KAYAH LI SIGN SHYA +A95F ; [*02E1.0020.0002] # REJANG SECTION MARK +A9C1 ; [*02D6.0020.0002] # JAVANESE LEFT RERENGGAN +A9C2 ; [*02D7.0020.0002] # JAVANESE RIGHT RERENGGAN +A9C3 ; [*02D8.0020.0002] # JAVANESE PADA ANDAP +A9C4 ; [*02D9.0020.0002] # JAVANESE PADA MADYA +A9C5 ; [*02DA.0020.0002] # JAVANESE PADA LUHUR +A9C6 ; [*02DB.0020.0002] # JAVANESE PADA WINDU +A9C7 ; [*0262.0020.0002] # JAVANESE PADA PANGKAT +A9C8 ; [*02AB.0020.0002] # JAVANESE PADA LINGSA +A9C9 ; [*02AC.0020.0002] # JAVANESE PADA LUNGSI +A9CA ; [*02DC.0020.0002] # JAVANESE PADA ADEG +A9CB ; [*02DD.0020.0002] # JAVANESE PADA ADEG ADEG +A9CC ; [*02DE.0020.0002] # JAVANESE PADA PISELEH +A9CD ; [*02DF.0020.0002] # JAVANESE TURNED PADA PISELEH +A9DE ; [*045B.0020.0002] # JAVANESE PADA TIRTA TUMETES +A9DF ; [*045C.0020.0002] # JAVANESE PADA ISEN-ISEN +AA5C ; [*045D.0020.0002] # CHAM PUNCTUATION SPIRAL +AA5D ; [*02AD.0020.0002] # CHAM PUNCTUATION DANDA +AA5E ; [*02AE.0020.0002] # CHAM PUNCTUATION DOUBLE DANDA +AA5F ; [*02AF.0020.0002] # CHAM PUNCTUATION TRIPLE DANDA +AA77 ; [*059B.0020.0002] # MYANMAR SYMBOL AITON EXCLAMATION +AA78 ; [*059C.0020.0002] # MYANMAR SYMBOL AITON ONE +AA79 ; [*059D.0020.0002] # MYANMAR SYMBOL AITON TWO +AADE ; [*040E.0020.0002] # TAI VIET SYMBOL HO HOI +AADF ; [*040F.0020.0002] # TAI VIET SYMBOL KOI KOI +AAF0 ; [*02B0.0020.0002] # MEETEI MAYEK CHEIKHAN +AAF1 ; [*0279.0020.0002] # MEETEI MAYEK AHANG KHUDAM +AB5B ; [*0529.0020.0002] # MODIFIER BREVE WITH INVERTED BREVE +AB6A ; [*04DA.0020.0002] # MODIFIER LETTER LEFT TACK +AB6B ; [*04DB.0020.0002] # MODIFIER LETTER RIGHT TACK +ABEB ; [*02B1.0020.0002] # MEETEI MAYEK CHEIKHEI +FB29 ; [*0666.0020.0005] # HEBREW LETTER ALTERNATIVE PLUS SIGN +FBB2 ; [*0536.0020.0002] # ARABIC SYMBOL DOT ABOVE +FBB3 ; [*0537.0020.0002] # ARABIC SYMBOL DOT BELOW +FBB4 ; [*0538.0020.0002] # ARABIC SYMBOL TWO DOTS ABOVE +FBB5 ; [*0539.0020.0002] # ARABIC SYMBOL TWO DOTS BELOW +FBB6 ; [*053A.0020.0002] # ARABIC SYMBOL THREE DOTS ABOVE +FBB7 ; [*053B.0020.0002] # ARABIC SYMBOL THREE DOTS BELOW +FBB8 ; [*053C.0020.0002] # ARABIC SYMBOL THREE DOTS POINTING DOWNWARDS ABOVE +FBB9 ; [*053D.0020.0002] # ARABIC SYMBOL THREE DOTS POINTING DOWNWARDS BELOW +FBBA ; [*053E.0020.0002] # ARABIC SYMBOL FOUR DOTS ABOVE +FBBB ; [*053F.0020.0002] # ARABIC SYMBOL FOUR DOTS BELOW +FBBC ; [*0540.0020.0002] # ARABIC SYMBOL DOUBLE VERTICAL BAR BELOW +FBBD ; [*0541.0020.0002] # ARABIC SYMBOL TWO DOTS VERTICALLY ABOVE +FBBE ; [*0542.0020.0002] # ARABIC SYMBOL TWO DOTS VERTICALLY BELOW +FBBF ; [*0543.0020.0002] # ARABIC SYMBOL RING +FBC0 ; [*0544.0020.0002] # ARABIC SYMBOL SMALL TAH ABOVE +FBC1 ; [*0545.0020.0002] # ARABIC SYMBOL SMALL TAH BELOW +FD3E ; [*0392.0020.0002] # ORNATE LEFT PARENTHESIS +FD3F ; [*0393.0020.0002] # ORNATE RIGHT PARENTHESIS +FDFD ; [*0535.0020.0002] # ARABIC LIGATURE BISMILLAH AR-RAHMAN AR-RAHEEM +FE10 ; [*0223.0020.0016] # PRESENTATION FORM FOR VERTICAL COMMA +FE11 ; [*0236.0020.0016] # PRESENTATION FORM FOR VERTICAL IDEOGRAPHIC COMMA +FE12 ; [*0292.0020.0016] # PRESENTATION FORM FOR VERTICAL IDEOGRAPHIC FULL STOP +FE13 ; [*0240.0020.0016] # PRESENTATION FORM FOR VERTICAL COLON +FE14 ; [*023A.0020.0016] # PRESENTATION FORM FOR VERTICAL SEMICOLON +FE15 ; [*0267.0020.0016] # PRESENTATION FORM FOR VERTICAL EXCLAMATION MARK +FE16 ; [*026D.0020.0016] # PRESENTATION FORM FOR VERTICAL QUESTION MARK +FE17 ; [*038C.0020.0016] # PRESENTATION FORM FOR VERTICAL LEFT WHITE LENTICULAR BRACKET +FE18 ; [*038D.0020.0016] # PRESENTATION FORM FOR VERTICAL RIGHT WHITE LENTICULAR BRAKCET +FE19 ; [*027E.0020.0016][*027E.0020.0016][*027E.0020.0016] # PRESENTATION FORM FOR VERTICAL HORIZONTAL ELLIPSIS FE21 ; [.0000.0000.0000] # COMBINING LIGATURE RIGHT HALF FE23 ; [.0000.0000.0000] # COMBINING DOUBLE TILDE RIGHT HALF FE24 ; [.0000.0000.0000] # COMBINING MACRON LEFT HALF @@ -4101,31 +4175,31 @@ FE2B ; [.0000.0000.0000] # COMBINING MACRON LEFT HALF BELOW FE2C ; [.0000.0000.0000] # COMBINING MACRON RIGHT HALF BELOW FE2D ; [.0000.0000.0000] # COMBINING CONJOINING MACRON BELOW FE2F ; [.0000.0000.0000] # COMBINING CYRILLIC TITLO RIGHT HALF -FE30 ; [*0278.0020.0016][*0278.0020.0016] # PRESENTATION FORM FOR VERTICAL TWO DOT LEADER +FE30 ; [*027E.0020.0016][*027E.0020.0016] # PRESENTATION FORM FOR VERTICAL TWO DOT LEADER FE31 ; [*0216.0020.0016] # PRESENTATION FORM FOR VERTICAL EM DASH FE32 ; [*0215.0020.0016] # PRESENTATION FORM FOR VERTICAL EN DASH FE33 ; [*020B.0020.0016] # PRESENTATION FORM FOR VERTICAL LOW LINE FE34 ; [*020B.0020.0016] # PRESENTATION FORM FOR VERTICAL WAVY LOW LINE -FE35 ; [*0318.0020.0016] # PRESENTATION FORM FOR VERTICAL LEFT PARENTHESIS -FE36 ; [*0319.0020.0016] # PRESENTATION FORM FOR VERTICAL RIGHT PARENTHESIS -FE37 ; [*031C.0020.0016] # PRESENTATION FORM FOR VERTICAL LEFT CURLY BRACKET -FE38 ; [*031D.0020.0016] # PRESENTATION FORM FOR VERTICAL RIGHT CURLY BRACKET -FE39 ; [*037A.0020.0016] # PRESENTATION FORM FOR VERTICAL LEFT TORTOISE SHELL BRACKET -FE3A ; [*037B.0020.0016] # PRESENTATION FORM FOR VERTICAL RIGHT TORTOISE SHELL BRACKET -FE3B ; [*0378.0020.0016] # PRESENTATION FORM FOR VERTICAL LEFT BLACK LENTICULAR BRACKET -FE3C ; [*0379.0020.0016] # PRESENTATION FORM FOR VERTICAL RIGHT BLACK LENTICULAR BRACKET -FE3D ; [*0372.0020.0016] # PRESENTATION FORM FOR VERTICAL LEFT DOUBLE ANGLE BRACKET -FE3E ; [*0373.0020.0016] # PRESENTATION FORM FOR VERTICAL RIGHT DOUBLE ANGLE BRACKET -FE3F ; [*0370.0020.0016] # PRESENTATION FORM FOR VERTICAL LEFT ANGLE BRACKET -FE40 ; [*0371.0020.0016] # PRESENTATION FORM FOR VERTICAL RIGHT ANGLE BRACKET -FE41 ; [*0374.0020.0016] # PRESENTATION FORM FOR VERTICAL LEFT CORNER BRACKET -FE42 ; [*0375.0020.0016] # PRESENTATION FORM FOR VERTICAL RIGHT CORNER BRACKET -FE43 ; [*0376.0020.0016] # PRESENTATION FORM FOR VERTICAL LEFT WHITE CORNER BRACKET -FE44 ; [*0377.0020.0016] # PRESENTATION FORM FOR VERTICAL RIGHT WHITE CORNER BRACKET -FE45 ; [*0232.0020.0002] # SESAME DOT -FE46 ; [*0233.0020.0002] # WHITE SESAME DOT -FE47 ; [*031A.0020.0016] # PRESENTATION FORM FOR VERTICAL LEFT SQUARE BRACKET -FE48 ; [*031B.0020.0016] # PRESENTATION FORM FOR VERTICAL RIGHT SQUARE BRACKET +FE35 ; [*0328.0020.0016] # PRESENTATION FORM FOR VERTICAL LEFT PARENTHESIS +FE36 ; [*0329.0020.0016] # PRESENTATION FORM FOR VERTICAL RIGHT PARENTHESIS +FE37 ; [*032C.0020.0016] # PRESENTATION FORM FOR VERTICAL LEFT CURLY BRACKET +FE38 ; [*032D.0020.0016] # PRESENTATION FORM FOR VERTICAL RIGHT CURLY BRACKET +FE39 ; [*038A.0020.0016] # PRESENTATION FORM FOR VERTICAL LEFT TORTOISE SHELL BRACKET +FE3A ; [*038B.0020.0016] # PRESENTATION FORM FOR VERTICAL RIGHT TORTOISE SHELL BRACKET +FE3B ; [*0388.0020.0016] # PRESENTATION FORM FOR VERTICAL LEFT BLACK LENTICULAR BRACKET +FE3C ; [*0389.0020.0016] # PRESENTATION FORM FOR VERTICAL RIGHT BLACK LENTICULAR BRACKET +FE3D ; [*0382.0020.0016] # PRESENTATION FORM FOR VERTICAL LEFT DOUBLE ANGLE BRACKET +FE3E ; [*0383.0020.0016] # PRESENTATION FORM FOR VERTICAL RIGHT DOUBLE ANGLE BRACKET +FE3F ; [*0380.0020.0016] # PRESENTATION FORM FOR VERTICAL LEFT ANGLE BRACKET +FE40 ; [*0381.0020.0016] # PRESENTATION FORM FOR VERTICAL RIGHT ANGLE BRACKET +FE41 ; [*0384.0020.0016] # PRESENTATION FORM FOR VERTICAL LEFT CORNER BRACKET +FE42 ; [*0385.0020.0016] # PRESENTATION FORM FOR VERTICAL RIGHT CORNER BRACKET +FE43 ; [*0386.0020.0016] # PRESENTATION FORM FOR VERTICAL LEFT WHITE CORNER BRACKET +FE44 ; [*0387.0020.0016] # PRESENTATION FORM FOR VERTICAL RIGHT WHITE CORNER BRACKET +FE45 ; [*0237.0020.0002] # SESAME DOT +FE46 ; [*0238.0020.0002] # WHITE SESAME DOT +FE47 ; [*032A.0020.0016] # PRESENTATION FORM FOR VERTICAL LEFT SQUARE BRACKET +FE48 ; [*032B.0020.0016] # PRESENTATION FORM FOR VERTICAL RIGHT SQUARE BRACKET FE49 ; [*020A.0020.0004] # DASHED OVERLINE FE4A ; [*020A.0020.0004] # CENTRELINE OVERLINE FE4B ; [*020A.0020.0004] # WAVY OVERLINE @@ -4133,489 +4207,508 @@ FE4C ; [*020A.0020.0004] # DOUBLE WAVY OVERLINE FE4D ; [*020B.0020.0004] # DASHED LOW LINE FE4E ; [*020B.0020.0004] # CENTRELINE LOW LINE FE4F ; [*020B.0020.0004] # WAVY LOW LINE -FE50 ; [*0222.0020.000F] # SMALL COMMA -FE51 ; [*0231.0020.000F] # SMALL IDEOGRAPHIC COMMA -FE52 ; [*0278.0020.000F] # SMALL FULL STOP -FE54 ; [*0234.0020.000F] # SMALL SEMICOLON -FE55 ; [*023A.0020.000F] # SMALL COLON -FE56 ; [*0267.0020.000F] # SMALL QUESTION MARK -FE57 ; [*0261.0020.000F] # SMALL EXCLAMATION MARK +FE50 ; [*0223.0020.000F] # SMALL COMMA +FE51 ; [*0236.0020.000F] # SMALL IDEOGRAPHIC COMMA +FE52 ; [*027E.0020.000F] # SMALL FULL STOP +FE54 ; [*023A.0020.000F] # SMALL SEMICOLON +FE55 ; [*0240.0020.000F] # SMALL COLON +FE56 ; [*026D.0020.000F] # SMALL QUESTION MARK +FE57 ; [*0267.0020.000F] # SMALL EXCLAMATION MARK FE58 ; [*0216.0020.000F] # SMALL EM DASH -FE59 ; [*0318.0020.000F] # SMALL LEFT PARENTHESIS -FE5A ; [*0319.0020.000F] # SMALL RIGHT PARENTHESIS -FE5B ; [*031C.0020.000F] # SMALL LEFT CURLY BRACKET -FE5C ; [*031D.0020.000F] # SMALL RIGHT CURLY BRACKET -FE5D ; [*037A.0020.000F] # SMALL LEFT TORTOISE SHELL BRACKET -FE5E ; [*037B.0020.000F] # SMALL RIGHT TORTOISE SHELL BRACKET -FE5F ; [*0399.0020.000F] # SMALL NUMBER SIGN -FE60 ; [*0397.0020.000F] # SMALL AMPERSAND -FE61 ; [*0390.0020.000F] # SMALL ASTERISK -FE62 ; [*062C.0020.000F] # SMALL PLUS SIGN +FE59 ; [*0328.0020.000F] # SMALL LEFT PARENTHESIS +FE5A ; [*0329.0020.000F] # SMALL RIGHT PARENTHESIS +FE5B ; [*032C.0020.000F] # SMALL LEFT CURLY BRACKET +FE5C ; [*032D.0020.000F] # SMALL RIGHT CURLY BRACKET +FE5D ; [*038A.0020.000F] # SMALL LEFT TORTOISE SHELL BRACKET +FE5E ; [*038B.0020.000F] # SMALL RIGHT TORTOISE SHELL BRACKET +FE5F ; [*03AC.0020.000F] # SMALL NUMBER SIGN +FE60 ; [*03A9.0020.000F] # SMALL AMPERSAND +FE61 ; [*03A1.0020.000F] # SMALL ASTERISK +FE62 ; [*0666.0020.000F] # SMALL PLUS SIGN FE63 ; [*020D.0020.000F] # SMALL HYPHEN-MINUS -FE64 ; [*0630.0020.000F] # SMALL LESS-THAN SIGN -FE65 ; [*0632.0020.000F] # SMALL GREATER-THAN SIGN -FE66 ; [*0631.0020.000F] # SMALL EQUALS SIGN -FE68 ; [*0396.0020.000F] # SMALL REVERSE SOLIDUS -FE6A ; [*039A.0020.000F] # SMALL PERCENT SIGN -FE6B ; [*038F.0020.000F] # SMALL COMMERCIAL AT +FE64 ; [*066A.0020.000F] # SMALL LESS-THAN SIGN +FE65 ; [*066C.0020.000F] # SMALL GREATER-THAN SIGN +FE66 ; [*066B.0020.000F] # SMALL EQUALS SIGN +FE68 ; [*03A7.0020.000F] # SMALL REVERSE SOLIDUS +FE6A ; [*03AD.0020.000F] # SMALL PERCENT SIGN +FE6B ; [*03A0.0020.000F] # SMALL COMMERCIAL AT FE73 ; [.0000.0000.0000] # ARABIC TAIL FRAGMENT -FF01 ; [*0261.0020.0003] # FULLWIDTH EXCLAMATION MARK -FF02 ; [*030D.0020.0003] # FULLWIDTH QUOTATION MARK -FF03 ; [*0399.0020.0003] # FULLWIDTH NUMBER SIGN -FF05 ; [*039A.0020.0003] # FULLWIDTH PERCENT SIGN -FF06 ; [*0397.0020.0003] # FULLWIDTH AMPERSAND -FF07 ; [*0306.0020.0003] # FULLWIDTH APOSTROPHE -FF08 ; [*0318.0020.0003] # FULLWIDTH LEFT PARENTHESIS -FF09 ; [*0319.0020.0003] # FULLWIDTH RIGHT PARENTHESIS -FF0A ; [*0390.0020.0003] # FULLWIDTH ASTERISK -FF0B ; [*062C.0020.0003] # FULLWIDTH PLUS SIGN -FF0C ; [*0222.0020.0003] # FULLWIDTH COMMA +FF01 ; [*0267.0020.0003] # FULLWIDTH EXCLAMATION MARK +FF02 ; [*031D.0020.0003] # FULLWIDTH QUOTATION MARK +FF03 ; [*03AC.0020.0003] # FULLWIDTH NUMBER SIGN +FF05 ; [*03AD.0020.0003] # FULLWIDTH PERCENT SIGN +FF06 ; [*03A9.0020.0003] # FULLWIDTH AMPERSAND +FF07 ; [*0316.0020.0003] # FULLWIDTH APOSTROPHE +FF08 ; [*0328.0020.0003] # FULLWIDTH LEFT PARENTHESIS +FF09 ; [*0329.0020.0003] # FULLWIDTH RIGHT PARENTHESIS +FF0A ; [*03A1.0020.0003] # FULLWIDTH ASTERISK +FF0B ; [*0666.0020.0003] # FULLWIDTH PLUS SIGN +FF0C ; [*0223.0020.0003] # FULLWIDTH COMMA FF0D ; [*020D.0020.0003] # FULLWIDTH HYPHEN-MINUS -FF0E ; [*0278.0020.0003] # FULLWIDTH FULL STOP -FF0F ; [*0395.0020.0003] # FULLWIDTH SOLIDUS -FF1A ; [*023A.0020.0003] # FULLWIDTH COLON -FF1B ; [*0234.0020.0003] # FULLWIDTH SEMICOLON -FF1C ; [*0630.0020.0003] # FULLWIDTH LESS-THAN SIGN -FF1D ; [*0631.0020.0003] # FULLWIDTH EQUALS SIGN -FF1E ; [*0632.0020.0003] # FULLWIDTH GREATER-THAN SIGN -FF1F ; [*0267.0020.0003] # FULLWIDTH QUESTION MARK -FF20 ; [*038F.0020.0003] # FULLWIDTH COMMERCIAL AT -FF3B ; [*031A.0020.0003] # FULLWIDTH LEFT SQUARE BRACKET -FF3C ; [*0396.0020.0003] # FULLWIDTH REVERSE SOLIDUS -FF3D ; [*031B.0020.0003] # FULLWIDTH RIGHT SQUARE BRACKET -FF3E ; [*049B.0020.0003] # FULLWIDTH CIRCUMFLEX ACCENT +FF0E ; [*027E.0020.0003] # FULLWIDTH FULL STOP +FF0F ; [*03A6.0020.0003] # FULLWIDTH SOLIDUS +FF1A ; [*0240.0020.0003] # FULLWIDTH COLON +FF1B ; [*023A.0020.0003] # FULLWIDTH SEMICOLON +FF1C ; [*066A.0020.0003] # FULLWIDTH LESS-THAN SIGN +FF1D ; [*066B.0020.0003] # FULLWIDTH EQUALS SIGN +FF1E ; [*066C.0020.0003] # FULLWIDTH GREATER-THAN SIGN +FF1F ; [*026D.0020.0003] # FULLWIDTH QUESTION MARK +FF20 ; [*03A0.0020.0003] # FULLWIDTH COMMERCIAL AT +FF3B ; [*032A.0020.0003] # FULLWIDTH LEFT SQUARE BRACKET +FF3C ; [*03A7.0020.0003] # FULLWIDTH REVERSE SOLIDUS +FF3D ; [*032B.0020.0003] # FULLWIDTH RIGHT SQUARE BRACKET +FF3E ; [*04B7.0020.0003] # FULLWIDTH CIRCUMFLEX ACCENT FF3F ; [*020B.0020.0003] # FULLWIDTH LOW LINE -FF40 ; [*0498.0020.0003] # FULLWIDTH GRAVE ACCENT -FF5B ; [*031C.0020.0003] # FULLWIDTH LEFT CURLY BRACKET -FF5C ; [*0634.0020.0003] # FULLWIDTH VERTICAL LINE -FF5D ; [*031D.0020.0003] # FULLWIDTH RIGHT CURLY BRACKET -FF5E ; [*0636.0020.0003] # FULLWIDTH TILDE -FF5F ; [*032E.0020.0003] # FULLWIDTH LEFT WHITE PARENTHESIS -FF60 ; [*032F.0020.0003] # FULLWIDTH RIGHT WHITE PARENTHESIS -FF61 ; [*028B.0020.0012] # HALFWIDTH IDEOGRAPHIC FULL STOP -FF62 ; [*0374.0020.0012] # HALFWIDTH LEFT CORNER BRACKET -FF63 ; [*0375.0020.0012] # HALFWIDTH RIGHT CORNER BRACKET -FF64 ; [*0231.0020.0012] # HALFWIDTH IDEOGRAPHIC COMMA +FF40 ; [*04B4.0020.0003] # FULLWIDTH GRAVE ACCENT +FF5B ; [*032C.0020.0003] # FULLWIDTH LEFT CURLY BRACKET +FF5C ; [*066E.0020.0003] # FULLWIDTH VERTICAL LINE +FF5D ; [*032D.0020.0003] # FULLWIDTH RIGHT CURLY BRACKET +FF5E ; [*0670.0020.0003] # FULLWIDTH TILDE +FF5F ; [*033E.0020.0003] # FULLWIDTH LEFT WHITE PARENTHESIS +FF60 ; [*033F.0020.0003] # FULLWIDTH RIGHT WHITE PARENTHESIS +FF61 ; [*0292.0020.0012] # HALFWIDTH IDEOGRAPHIC FULL STOP +FF62 ; [*0384.0020.0012] # HALFWIDTH LEFT CORNER BRACKET +FF63 ; [*0385.0020.0012] # HALFWIDTH RIGHT CORNER BRACKET +FF64 ; [*0236.0020.0012] # HALFWIDTH IDEOGRAPHIC COMMA FF65 ; [*0221.0020.0012] # HALFWIDTH KATAKANA MIDDLE DOT -FFE2 ; [*0633.0020.0003] # FULLWIDTH NOT SIGN -FFE3 ; [*049C.0020.0003] # FULLWIDTH MACRON -FFE4 ; [*0635.0020.0003] # FULLWIDTH BROKEN BAR -FFE8 ; [*0831.0020.0012] # HALFWIDTH FORMS LIGHT VERTICAL -FFE9 ; [*05B2.0020.0012] # HALFWIDTH LEFTWARDS ARROW -FFEA ; [*05B4.0020.0012] # HALFWIDTH UPWARDS ARROW -FFEB ; [*05B3.0020.0012] # HALFWIDTH RIGHTWARDS ARROW -FFEC ; [*05B5.0020.0012] # HALFWIDTH DOWNWARDS ARROW -FFED ; [*08CF.0020.0012] # HALFWIDTH BLACK SQUARE -FFEE ; [*08FA.0020.0012] # HALFWIDTH WHITE CIRCLE -FFFC ; [*1AF9.0020.0002] # OBJECT REPLACEMENT CHARACTER -10100 ; [*02FB.0020.0002] # AEGEAN WORD SEPARATOR LINE -10101 ; [*02FC.0020.0002] # AEGEAN WORD SEPARATOR DOT -10102 ; [*02FD.0020.0002] # AEGEAN CHECK MARK -10110 ; [*1B4D.0020.0002] # AEGEAN NUMBER TEN -10111 ; [*1B4E.0020.0002] # AEGEAN NUMBER TWENTY -10112 ; [*1B4F.0020.0002] # AEGEAN NUMBER THIRTY -10113 ; [*1B50.0020.0002] # AEGEAN NUMBER FORTY -10114 ; [*1B51.0020.0002] # AEGEAN NUMBER FIFTY -10115 ; [*1B52.0020.0002] # AEGEAN NUMBER SIXTY -10116 ; [*1B53.0020.0002] # AEGEAN NUMBER SEVENTY -10117 ; [*1B54.0020.0002] # AEGEAN NUMBER EIGHTY -10118 ; [*1B55.0020.0002] # AEGEAN NUMBER NINETY -10119 ; [*1B56.0020.0002] # AEGEAN NUMBER ONE HUNDRED -1011A ; [*1B57.0020.0002] # AEGEAN NUMBER TWO HUNDRED -1011B ; [*1B58.0020.0002] # AEGEAN NUMBER THREE HUNDRED -1011C ; [*1B59.0020.0002] # AEGEAN NUMBER FOUR HUNDRED -1011D ; [*1B5A.0020.0002] # AEGEAN NUMBER FIVE HUNDRED -1011E ; [*1B5B.0020.0002] # AEGEAN NUMBER SIX HUNDRED -1011F ; [*1B5C.0020.0002] # AEGEAN NUMBER SEVEN HUNDRED -10120 ; [*1B5D.0020.0002] # AEGEAN NUMBER EIGHT HUNDRED -10121 ; [*1B5E.0020.0002] # AEGEAN NUMBER NINE HUNDRED -10122 ; [*1B5F.0020.0002] # AEGEAN NUMBER ONE THOUSAND -10123 ; [*1B60.0020.0002] # AEGEAN NUMBER TWO THOUSAND -10124 ; [*1B61.0020.0002] # AEGEAN NUMBER THREE THOUSAND -10125 ; [*1B62.0020.0002] # AEGEAN NUMBER FOUR THOUSAND -10126 ; [*1B63.0020.0002] # AEGEAN NUMBER FIVE THOUSAND -10127 ; [*1B64.0020.0002] # AEGEAN NUMBER SIX THOUSAND -10128 ; [*1B65.0020.0002] # AEGEAN NUMBER SEVEN THOUSAND -10129 ; [*1B66.0020.0002] # AEGEAN NUMBER EIGHT THOUSAND -1012A ; [*1B67.0020.0002] # AEGEAN NUMBER NINE THOUSAND -1012B ; [*1B68.0020.0002] # AEGEAN NUMBER TEN THOUSAND -1012C ; [*1B69.0020.0002] # AEGEAN NUMBER TWENTY THOUSAND -1012D ; [*1B6A.0020.0002] # AEGEAN NUMBER THIRTY THOUSAND -1012E ; [*1B6B.0020.0002] # AEGEAN NUMBER FORTY THOUSAND -1012F ; [*1B6C.0020.0002] # AEGEAN NUMBER FIFTY THOUSAND -10130 ; [*1B6D.0020.0002] # AEGEAN NUMBER SIXTY THOUSAND -10131 ; [*1B6E.0020.0002] # AEGEAN NUMBER SEVENTY THOUSAND -10132 ; [*1B6F.0020.0002] # AEGEAN NUMBER EIGHTY THOUSAND -10133 ; [*1B70.0020.0002] # AEGEAN NUMBER NINETY THOUSAND -10137 ; [*0F90.0020.0002] # AEGEAN WEIGHT BASE UNIT -10138 ; [*0F91.0020.0002] # AEGEAN WEIGHT FIRST SUBUNIT -10139 ; [*0F92.0020.0002] # AEGEAN WEIGHT SECOND SUBUNIT -1013A ; [*0F93.0020.0002] # AEGEAN WEIGHT THIRD SUBUNIT -1013B ; [*0F94.0020.0002] # AEGEAN WEIGHT FOURTH SUBUNIT -1013C ; [*0F95.0020.0002] # AEGEAN DRY MEASURE FIRST SUBUNIT -1013D ; [*0F96.0020.0002] # AEGEAN LIQUID MEASURE FIRST SUBUNIT -1013E ; [*0F97.0020.0002] # AEGEAN MEASURE SECOND SUBUNIT -1013F ; [*0F98.0020.0002] # AEGEAN MEASURE THIRD SUBUNIT -10140 ; [*1B71.0020.0002] # GREEK ACROPHONIC ATTIC ONE QUARTER -10141 ; [*1B72.0020.0002] # GREEK ACROPHONIC ATTIC ONE HALF -10144 ; [*1B73.0020.0002] # GREEK ACROPHONIC ATTIC FIFTY -10145 ; [*1B74.0020.0002] # GREEK ACROPHONIC ATTIC FIVE HUNDRED -10146 ; [*1B75.0020.0002] # GREEK ACROPHONIC ATTIC FIVE THOUSAND -10147 ; [*1B76.0020.0002] # GREEK ACROPHONIC ATTIC FIFTY THOUSAND -10149 ; [*1B77.0020.0002] # GREEK ACROPHONIC ATTIC TEN TALENTS -1014A ; [*1B78.0020.0002] # GREEK ACROPHONIC ATTIC FIFTY TALENTS -1014B ; [*1B79.0020.0002] # GREEK ACROPHONIC ATTIC ONE HUNDRED TALENTS -1014C ; [*1B7A.0020.0002] # GREEK ACROPHONIC ATTIC FIVE HUNDRED TALENTS -1014D ; [*1B7B.0020.0002] # GREEK ACROPHONIC ATTIC ONE THOUSAND TALENTS -1014E ; [*1B7C.0020.0002] # GREEK ACROPHONIC ATTIC FIVE THOUSAND TALENTS -10150 ; [*1B7D.0020.0002] # GREEK ACROPHONIC ATTIC TEN STATERS -10151 ; [*1B7E.0020.0002] # GREEK ACROPHONIC ATTIC FIFTY STATERS -10152 ; [*1B7F.0020.0002] # GREEK ACROPHONIC ATTIC ONE HUNDRED STATERS -10153 ; [*1B80.0020.0002] # GREEK ACROPHONIC ATTIC FIVE HUNDRED STATERS -10154 ; [*1B81.0020.0002] # GREEK ACROPHONIC ATTIC ONE THOUSAND STATERS -10155 ; [*1B82.0020.0002] # GREEK ACROPHONIC ATTIC TEN THOUSAND STATERS -10156 ; [*1B83.0020.0002] # GREEK ACROPHONIC ATTIC FIFTY THOUSAND STATERS -10157 ; [*1B84.0020.0002] # GREEK ACROPHONIC ATTIC TEN MNAS -10160 ; [*1B85.0020.0002] # GREEK ACROPHONIC TROEZENIAN TEN -10161 ; [*1B86.0020.0002] # GREEK ACROPHONIC TROEZENIAN TEN ALTERNATE FORM -10162 ; [*1B87.0020.0002] # GREEK ACROPHONIC HERMIONIAN TEN -10163 ; [*1B88.0020.0002] # GREEK ACROPHONIC MESSENIAN TEN -10164 ; [*1B89.0020.0002] # GREEK ACROPHONIC THESPIAN TEN -10165 ; [*1B8A.0020.0002] # GREEK ACROPHONIC THESPIAN THIRTY -10166 ; [*1B8B.0020.0002] # GREEK ACROPHONIC TROEZENIAN FIFTY -10167 ; [*1B8C.0020.0002] # GREEK ACROPHONIC TROEZENIAN FIFTY ALTERNATE FORM -10168 ; [*1B8D.0020.0002] # GREEK ACROPHONIC HERMIONIAN FIFTY -10169 ; [*1B8E.0020.0002] # GREEK ACROPHONIC THESPIAN FIFTY -1016A ; [*1B8F.0020.0002] # GREEK ACROPHONIC THESPIAN ONE HUNDRED -1016B ; [*1B90.0020.0002] # GREEK ACROPHONIC THESPIAN THREE HUNDRED -1016C ; [*1B91.0020.0002] # GREEK ACROPHONIC EPIDAUREAN FIVE HUNDRED -1016D ; [*1B92.0020.0002] # GREEK ACROPHONIC TROEZENIAN FIVE HUNDRED -1016E ; [*1B93.0020.0002] # GREEK ACROPHONIC THESPIAN FIVE HUNDRED -1016F ; [*1B94.0020.0002] # GREEK ACROPHONIC CARYSTIAN FIVE HUNDRED -10170 ; [*1B95.0020.0002] # GREEK ACROPHONIC NAXIAN FIVE HUNDRED -10171 ; [*1B96.0020.0002] # GREEK ACROPHONIC THESPIAN ONE THOUSAND -10172 ; [*1B97.0020.0002] # GREEK ACROPHONIC THESPIAN FIVE THOUSAND -10174 ; [*1B98.0020.0002] # GREEK ACROPHONIC STRATIAN FIFTY MNAS -10175 ; [*1B99.0020.0002] # GREEK ONE HALF SIGN -10176 ; [*1B9A.0020.0002] # GREEK ONE HALF SIGN ALTERNATE FORM -10177 ; [*1B9B.0020.0002] # GREEK TWO THIRDS SIGN -10178 ; [*1B9C.0020.0002] # GREEK THREE QUARTERS SIGN -10179 ; [*0F99.0020.0002] # GREEK YEAR SIGN -1017A ; [*0F9A.0020.0002] # GREEK TALENT SIGN -1017B ; [*0F9B.0020.0002] # GREEK DRACHMA SIGN -1017C ; [*0F9C.0020.0002] # GREEK OBOL SIGN -1017D ; [*0F9D.0020.0002] # GREEK TWO OBOLS SIGN -1017E ; [*0F9E.0020.0002] # GREEK THREE OBOLS SIGN -1017F ; [*0F9F.0020.0002] # GREEK FOUR OBOLS SIGN -10180 ; [*0FA0.0020.0002] # GREEK FIVE OBOLS SIGN -10181 ; [*0FA1.0020.0002] # GREEK METRETES SIGN -10182 ; [*0FA2.0020.0002] # GREEK KYATHOS BASE SIGN -10183 ; [*0FA3.0020.0002] # GREEK LITRA SIGN -10184 ; [*0FA4.0020.0002] # GREEK OUNKIA SIGN -10185 ; [*0FA5.0020.0002] # GREEK XESTES SIGN -10186 ; [*0FA6.0020.0002] # GREEK ARTABE SIGN -10187 ; [*0FA7.0020.0002] # GREEK AROURA SIGN -10188 ; [*0FA8.0020.0002] # GREEK GRAMMA SIGN -10189 ; [*0FA9.0020.0002] # GREEK TRYBLION BASE SIGN -1018B ; [*1B9D.0020.0002] # GREEK ONE QUARTER SIGN -1018C ; [*0FAA.0020.0002] # GREEK SINUSOID SIGN -1018D ; [*0FAB.0020.0002] # GREEK INDICTION SIGN -1018E ; [*0FAC.0020.0002] # NOMISMA SIGN -10190 ; [*0FAD.0020.0002] # ROMAN SEXTANS SIGN -10191 ; [*0FAE.0020.0002] # ROMAN UNCIA SIGN -10192 ; [*0FAF.0020.0002] # ROMAN SEMUNCIA SIGN -10193 ; [*0FB0.0020.0002] # ROMAN SEXTULA SIGN -10194 ; [*0FB1.0020.0002] # ROMAN DIMIDIA SEXTULA SIGN -10195 ; [*0FB2.0020.0002] # ROMAN SILIQUA SIGN -10196 ; [*0FB3.0020.0002] # ROMAN DENARIUS SIGN -10197 ; [*0FB4.0020.0002] # ROMAN QUINARIUS SIGN -10198 ; [*0FB5.0020.0002] # ROMAN SESTERTIUS SIGN -10199 ; [*0FB6.0020.0002] # ROMAN DUPONDIUS SIGN -1019A ; [*0FB7.0020.0002] # ROMAN AS SIGN -1019B ; [*0FB8.0020.0002] # ROMAN CENTURIAL SIGN -101A0 ; [*0FB9.0020.0002] # GREEK SYMBOL TAU RHO -101D0 ; [*0FBA.0020.0002] # PHAISTOS DISC SIGN PEDESTRIAN -101D1 ; [*0FBB.0020.0002] # PHAISTOS DISC SIGN PLUMED HEAD -101D2 ; [*0FBC.0020.0002] # PHAISTOS DISC SIGN TATTOOED HEAD -101D3 ; [*0FBD.0020.0002] # PHAISTOS DISC SIGN CAPTIVE -101D4 ; [*0FBE.0020.0002] # PHAISTOS DISC SIGN CHILD -101D5 ; [*0FBF.0020.0002] # PHAISTOS DISC SIGN WOMAN -101D6 ; [*0FC0.0020.0002] # PHAISTOS DISC SIGN HELMET -101D7 ; [*0FC1.0020.0002] # PHAISTOS DISC SIGN GAUNTLET -101D8 ; [*0FC2.0020.0002] # PHAISTOS DISC SIGN TIARA -101D9 ; [*0FC3.0020.0002] # PHAISTOS DISC SIGN ARROW -101DA ; [*0FC4.0020.0002] # PHAISTOS DISC SIGN BOW -101DB ; [*0FC5.0020.0002] # PHAISTOS DISC SIGN SHIELD -101DC ; [*0FC6.0020.0002] # PHAISTOS DISC SIGN CLUB -101DD ; [*0FC7.0020.0002] # PHAISTOS DISC SIGN MANACLES -101DE ; [*0FC8.0020.0002] # PHAISTOS DISC SIGN MATTOCK -101DF ; [*0FC9.0020.0002] # PHAISTOS DISC SIGN SAW -101E0 ; [*0FCA.0020.0002] # PHAISTOS DISC SIGN LID -101E1 ; [*0FCB.0020.0002] # PHAISTOS DISC SIGN BOOMERANG -101E2 ; [*0FCC.0020.0002] # PHAISTOS DISC SIGN CARPENTRY PLANE -101E3 ; [*0FCD.0020.0002] # PHAISTOS DISC SIGN DOLIUM -101E4 ; [*0FCE.0020.0002] # PHAISTOS DISC SIGN COMB -101E5 ; [*0FCF.0020.0002] # PHAISTOS DISC SIGN SLING -101E6 ; [*0FD0.0020.0002] # PHAISTOS DISC SIGN COLUMN -101E7 ; [*0FD1.0020.0002] # PHAISTOS DISC SIGN BEEHIVE -101E8 ; [*0FD2.0020.0002] # PHAISTOS DISC SIGN SHIP -101E9 ; [*0FD3.0020.0002] # PHAISTOS DISC SIGN HORN -101EA ; [*0FD4.0020.0002] # PHAISTOS DISC SIGN HIDE -101EB ; [*0FD5.0020.0002] # PHAISTOS DISC SIGN BULLS LEG -101EC ; [*0FD6.0020.0002] # PHAISTOS DISC SIGN CAT -101ED ; [*0FD7.0020.0002] # PHAISTOS DISC SIGN RAM -101EE ; [*0FD8.0020.0002] # PHAISTOS DISC SIGN EAGLE -101EF ; [*0FD9.0020.0002] # PHAISTOS DISC SIGN DOVE -101F0 ; [*0FDA.0020.0002] # PHAISTOS DISC SIGN TUNNY -101F1 ; [*0FDB.0020.0002] # PHAISTOS DISC SIGN BEE -101F2 ; [*0FDC.0020.0002] # PHAISTOS DISC SIGN PLANE TREE -101F3 ; [*0FDD.0020.0002] # PHAISTOS DISC SIGN VINE -101F4 ; [*0FDE.0020.0002] # PHAISTOS DISC SIGN PAPYRUS -101F5 ; [*0FDF.0020.0002] # PHAISTOS DISC SIGN ROSETTE -101F6 ; [*0FE0.0020.0002] # PHAISTOS DISC SIGN LILY -101F7 ; [*0FE1.0020.0002] # PHAISTOS DISC SIGN OX BACK -101F8 ; [*0FE2.0020.0002] # PHAISTOS DISC SIGN FLUTE -101F9 ; [*0FE3.0020.0002] # PHAISTOS DISC SIGN GRATER -101FA ; [*0FE4.0020.0002] # PHAISTOS DISC SIGN STRAINER -101FB ; [*0FE5.0020.0002] # PHAISTOS DISC SIGN SMALL AXE -101FC ; [*0FE6.0020.0002] # PHAISTOS DISC SIGN WAVY BAND +FFE2 ; [*066D.0020.0003] # FULLWIDTH NOT SIGN +FFE3 ; [*04B8.0020.0003] # FULLWIDTH MACRON +FFE4 ; [*066F.0020.0003] # FULLWIDTH BROKEN BAR +FFE8 ; [*086B.0020.0012] # HALFWIDTH FORMS LIGHT VERTICAL +FFE9 ; [*05EC.0020.0012] # HALFWIDTH LEFTWARDS ARROW +FFEA ; [*05EE.0020.0012] # HALFWIDTH UPWARDS ARROW +FFEB ; [*05ED.0020.0012] # HALFWIDTH RIGHTWARDS ARROW +FFEC ; [*05EF.0020.0012] # HALFWIDTH DOWNWARDS ARROW +FFED ; [*0909.0020.0012] # HALFWIDTH BLACK SQUARE +FFEE ; [*0934.0020.0012] # HALFWIDTH WHITE CIRCLE +FFFC ; [*1D55.0020.0002] # OBJECT REPLACEMENT CHARACTER +10100 ; [*030B.0020.0002] # AEGEAN WORD SEPARATOR LINE +10101 ; [*030C.0020.0002] # AEGEAN WORD SEPARATOR DOT +10102 ; [*030D.0020.0002] # AEGEAN CHECK MARK +10110 ; [*1DBE.0020.0002] # AEGEAN NUMBER TEN +10111 ; [*1DBF.0020.0002] # AEGEAN NUMBER TWENTY +10112 ; [*1DC0.0020.0002] # AEGEAN NUMBER THIRTY +10113 ; [*1DC1.0020.0002] # AEGEAN NUMBER FORTY +10114 ; [*1DC2.0020.0002] # AEGEAN NUMBER FIFTY +10115 ; [*1DC3.0020.0002] # AEGEAN NUMBER SIXTY +10116 ; [*1DC4.0020.0002] # AEGEAN NUMBER SEVENTY +10117 ; [*1DC5.0020.0002] # AEGEAN NUMBER EIGHTY +10118 ; [*1DC6.0020.0002] # AEGEAN NUMBER NINETY +10119 ; [*1DC7.0020.0002] # AEGEAN NUMBER ONE HUNDRED +1011A ; [*1DC8.0020.0002] # AEGEAN NUMBER TWO HUNDRED +1011B ; [*1DC9.0020.0002] # AEGEAN NUMBER THREE HUNDRED +1011C ; [*1DCA.0020.0002] # AEGEAN NUMBER FOUR HUNDRED +1011D ; [*1DCB.0020.0002] # AEGEAN NUMBER FIVE HUNDRED +1011E ; [*1DCC.0020.0002] # AEGEAN NUMBER SIX HUNDRED +1011F ; [*1DCD.0020.0002] # AEGEAN NUMBER SEVEN HUNDRED +10120 ; [*1DCE.0020.0002] # AEGEAN NUMBER EIGHT HUNDRED +10121 ; [*1DCF.0020.0002] # AEGEAN NUMBER NINE HUNDRED +10122 ; [*1DD0.0020.0002] # AEGEAN NUMBER ONE THOUSAND +10123 ; [*1DD1.0020.0002] # AEGEAN NUMBER TWO THOUSAND +10124 ; [*1DD2.0020.0002] # AEGEAN NUMBER THREE THOUSAND +10125 ; [*1DD3.0020.0002] # AEGEAN NUMBER FOUR THOUSAND +10126 ; [*1DD4.0020.0002] # AEGEAN NUMBER FIVE THOUSAND +10127 ; [*1DD5.0020.0002] # AEGEAN NUMBER SIX THOUSAND +10128 ; [*1DD6.0020.0002] # AEGEAN NUMBER SEVEN THOUSAND +10129 ; [*1DD7.0020.0002] # AEGEAN NUMBER EIGHT THOUSAND +1012A ; [*1DD8.0020.0002] # AEGEAN NUMBER NINE THOUSAND +1012B ; [*1DD9.0020.0002] # AEGEAN NUMBER TEN THOUSAND +1012C ; [*1DDA.0020.0002] # AEGEAN NUMBER TWENTY THOUSAND +1012D ; [*1DDB.0020.0002] # AEGEAN NUMBER THIRTY THOUSAND +1012E ; [*1DDC.0020.0002] # AEGEAN NUMBER FORTY THOUSAND +1012F ; [*1DDD.0020.0002] # AEGEAN NUMBER FIFTY THOUSAND +10130 ; [*1DDE.0020.0002] # AEGEAN NUMBER SIXTY THOUSAND +10131 ; [*1DDF.0020.0002] # AEGEAN NUMBER SEVENTY THOUSAND +10132 ; [*1DE0.0020.0002] # AEGEAN NUMBER EIGHTY THOUSAND +10133 ; [*1DE1.0020.0002] # AEGEAN NUMBER NINETY THOUSAND +10137 ; [*10C4.0020.0002] # AEGEAN WEIGHT BASE UNIT +10138 ; [*10C5.0020.0002] # AEGEAN WEIGHT FIRST SUBUNIT +10139 ; [*10C6.0020.0002] # AEGEAN WEIGHT SECOND SUBUNIT +1013A ; [*10C7.0020.0002] # AEGEAN WEIGHT THIRD SUBUNIT +1013B ; [*10C8.0020.0002] # AEGEAN WEIGHT FOURTH SUBUNIT +1013C ; [*10C9.0020.0002] # AEGEAN DRY MEASURE FIRST SUBUNIT +1013D ; [*10CA.0020.0002] # AEGEAN LIQUID MEASURE FIRST SUBUNIT +1013E ; [*10CB.0020.0002] # AEGEAN MEASURE SECOND SUBUNIT +1013F ; [*10CC.0020.0002] # AEGEAN MEASURE THIRD SUBUNIT +10140 ; [*1DE2.0020.0002] # GREEK ACROPHONIC ATTIC ONE QUARTER +10141 ; [*1DE3.0020.0002] # GREEK ACROPHONIC ATTIC ONE HALF +10144 ; [*1DE4.0020.0002] # GREEK ACROPHONIC ATTIC FIFTY +10145 ; [*1DE5.0020.0002] # GREEK ACROPHONIC ATTIC FIVE HUNDRED +10146 ; [*1DE6.0020.0002] # GREEK ACROPHONIC ATTIC FIVE THOUSAND +10147 ; [*1DE7.0020.0002] # GREEK ACROPHONIC ATTIC FIFTY THOUSAND +10149 ; [*1DE8.0020.0002] # GREEK ACROPHONIC ATTIC TEN TALENTS +1014A ; [*1DE9.0020.0002] # GREEK ACROPHONIC ATTIC FIFTY TALENTS +1014B ; [*1DEA.0020.0002] # GREEK ACROPHONIC ATTIC ONE HUNDRED TALENTS +1014C ; [*1DEB.0020.0002] # GREEK ACROPHONIC ATTIC FIVE HUNDRED TALENTS +1014D ; [*1DEC.0020.0002] # GREEK ACROPHONIC ATTIC ONE THOUSAND TALENTS +1014E ; [*1DED.0020.0002] # GREEK ACROPHONIC ATTIC FIVE THOUSAND TALENTS +10150 ; [*1DEE.0020.0002] # GREEK ACROPHONIC ATTIC TEN STATERS +10151 ; [*1DEF.0020.0002] # GREEK ACROPHONIC ATTIC FIFTY STATERS +10152 ; [*1DF0.0020.0002] # GREEK ACROPHONIC ATTIC ONE HUNDRED STATERS +10153 ; [*1DF1.0020.0002] # GREEK ACROPHONIC ATTIC FIVE HUNDRED STATERS +10154 ; [*1DF2.0020.0002] # GREEK ACROPHONIC ATTIC ONE THOUSAND STATERS +10155 ; [*1DF3.0020.0002] # GREEK ACROPHONIC ATTIC TEN THOUSAND STATERS +10156 ; [*1DF4.0020.0002] # GREEK ACROPHONIC ATTIC FIFTY THOUSAND STATERS +10157 ; [*1DF5.0020.0002] # GREEK ACROPHONIC ATTIC TEN MNAS +10160 ; [*1DF6.0020.0002] # GREEK ACROPHONIC TROEZENIAN TEN +10161 ; [*1DF7.0020.0002] # GREEK ACROPHONIC TROEZENIAN TEN ALTERNATE FORM +10162 ; [*1DF8.0020.0002] # GREEK ACROPHONIC HERMIONIAN TEN +10163 ; [*1DF9.0020.0002] # GREEK ACROPHONIC MESSENIAN TEN +10164 ; [*1DFA.0020.0002] # GREEK ACROPHONIC THESPIAN TEN +10165 ; [*1DFB.0020.0002] # GREEK ACROPHONIC THESPIAN THIRTY +10166 ; [*1DFC.0020.0002] # GREEK ACROPHONIC TROEZENIAN FIFTY +10167 ; [*1DFD.0020.0002] # GREEK ACROPHONIC TROEZENIAN FIFTY ALTERNATE FORM +10168 ; [*1DFE.0020.0002] # GREEK ACROPHONIC HERMIONIAN FIFTY +10169 ; [*1DFF.0020.0002] # GREEK ACROPHONIC THESPIAN FIFTY +1016A ; [*1E00.0020.0002] # GREEK ACROPHONIC THESPIAN ONE HUNDRED +1016B ; [*1E01.0020.0002] # GREEK ACROPHONIC THESPIAN THREE HUNDRED +1016C ; [*1E02.0020.0002] # GREEK ACROPHONIC EPIDAUREAN FIVE HUNDRED +1016D ; [*1E03.0020.0002] # GREEK ACROPHONIC TROEZENIAN FIVE HUNDRED +1016E ; [*1E04.0020.0002] # GREEK ACROPHONIC THESPIAN FIVE HUNDRED +1016F ; [*1E05.0020.0002] # GREEK ACROPHONIC CARYSTIAN FIVE HUNDRED +10170 ; [*1E06.0020.0002] # GREEK ACROPHONIC NAXIAN FIVE HUNDRED +10171 ; [*1E07.0020.0002] # GREEK ACROPHONIC THESPIAN ONE THOUSAND +10172 ; [*1E08.0020.0002] # GREEK ACROPHONIC THESPIAN FIVE THOUSAND +10174 ; [*1E09.0020.0002] # GREEK ACROPHONIC STRATIAN FIFTY MNAS +10175 ; [*1E0A.0020.0002] # GREEK ONE HALF SIGN +10176 ; [*1E0B.0020.0002] # GREEK ONE HALF SIGN ALTERNATE FORM +10177 ; [*1E0C.0020.0002] # GREEK TWO THIRDS SIGN +10178 ; [*1E0D.0020.0002] # GREEK THREE QUARTERS SIGN +10179 ; [*10CD.0020.0002] # GREEK YEAR SIGN +1017A ; [*10CE.0020.0002] # GREEK TALENT SIGN +1017B ; [*10CF.0020.0002] # GREEK DRACHMA SIGN +1017C ; [*10D0.0020.0002] # GREEK OBOL SIGN +1017D ; [*10D1.0020.0002] # GREEK TWO OBOLS SIGN +1017E ; [*10D2.0020.0002] # GREEK THREE OBOLS SIGN +1017F ; [*10D3.0020.0002] # GREEK FOUR OBOLS SIGN +10180 ; [*10D4.0020.0002] # GREEK FIVE OBOLS SIGN +10181 ; [*10D5.0020.0002] # GREEK METRETES SIGN +10182 ; [*10D6.0020.0002] # GREEK KYATHOS BASE SIGN +10183 ; [*10D7.0020.0002] # GREEK LITRA SIGN +10184 ; [*10D8.0020.0002] # GREEK OUNKIA SIGN +10185 ; [*10D9.0020.0002] # GREEK XESTES SIGN +10186 ; [*10DA.0020.0002] # GREEK ARTABE SIGN +10187 ; [*10DB.0020.0002] # GREEK AROURA SIGN +10188 ; [*10DC.0020.0002] # GREEK GRAMMA SIGN +10189 ; [*10DD.0020.0002] # GREEK TRYBLION BASE SIGN +1018B ; [*1E0E.0020.0002] # GREEK ONE QUARTER SIGN +1018C ; [*10DE.0020.0002] # GREEK SINUSOID SIGN +1018D ; [*10DF.0020.0002] # GREEK INDICTION SIGN +1018E ; [*10E0.0020.0002] # NOMISMA SIGN +10190 ; [*10E1.0020.0002] # ROMAN SEXTANS SIGN +10191 ; [*10E2.0020.0002] # ROMAN UNCIA SIGN +10192 ; [*10E3.0020.0002] # ROMAN SEMUNCIA SIGN +10193 ; [*10E4.0020.0002] # ROMAN SEXTULA SIGN +10194 ; [*10E5.0020.0002] # ROMAN DIMIDIA SEXTULA SIGN +10195 ; [*10E6.0020.0002] # ROMAN SILIQUA SIGN +10196 ; [*10E7.0020.0002] # ROMAN DENARIUS SIGN +10197 ; [*10E8.0020.0002] # ROMAN QUINARIUS SIGN +10198 ; [*10E9.0020.0002] # ROMAN SESTERTIUS SIGN +10199 ; [*10EA.0020.0002] # ROMAN DUPONDIUS SIGN +1019A ; [*10EB.0020.0002] # ROMAN AS SIGN +1019B ; [*10EC.0020.0002] # ROMAN CENTURIAL SIGN +1019C ; [*10ED.0020.0002] # ASCIA SYMBOL +101A0 ; [*10EE.0020.0002] # GREEK SYMBOL TAU RHO +101D0 ; [*10EF.0020.0002] # PHAISTOS DISC SIGN PEDESTRIAN +101D1 ; [*10F0.0020.0002] # PHAISTOS DISC SIGN PLUMED HEAD +101D2 ; [*10F1.0020.0002] # PHAISTOS DISC SIGN TATTOOED HEAD +101D3 ; [*10F2.0020.0002] # PHAISTOS DISC SIGN CAPTIVE +101D4 ; [*10F3.0020.0002] # PHAISTOS DISC SIGN CHILD +101D5 ; [*10F4.0020.0002] # PHAISTOS DISC SIGN WOMAN +101D6 ; [*10F5.0020.0002] # PHAISTOS DISC SIGN HELMET +101D7 ; [*10F6.0020.0002] # PHAISTOS DISC SIGN GAUNTLET +101D8 ; [*10F7.0020.0002] # PHAISTOS DISC SIGN TIARA +101D9 ; [*10F8.0020.0002] # PHAISTOS DISC SIGN ARROW +101DA ; [*10F9.0020.0002] # PHAISTOS DISC SIGN BOW +101DB ; [*10FA.0020.0002] # PHAISTOS DISC SIGN SHIELD +101DC ; [*10FB.0020.0002] # PHAISTOS DISC SIGN CLUB +101DD ; [*10FC.0020.0002] # PHAISTOS DISC SIGN MANACLES +101DE ; [*10FD.0020.0002] # PHAISTOS DISC SIGN MATTOCK +101DF ; [*10FE.0020.0002] # PHAISTOS DISC SIGN SAW +101E0 ; [*10FF.0020.0002] # PHAISTOS DISC SIGN LID +101E1 ; [*1100.0020.0002] # PHAISTOS DISC SIGN BOOMERANG +101E2 ; [*1101.0020.0002] # PHAISTOS DISC SIGN CARPENTRY PLANE +101E3 ; [*1102.0020.0002] # PHAISTOS DISC SIGN DOLIUM +101E4 ; [*1103.0020.0002] # PHAISTOS DISC SIGN COMB +101E5 ; [*1104.0020.0002] # PHAISTOS DISC SIGN SLING +101E6 ; [*1105.0020.0002] # PHAISTOS DISC SIGN COLUMN +101E7 ; [*1106.0020.0002] # PHAISTOS DISC SIGN BEEHIVE +101E8 ; [*1107.0020.0002] # PHAISTOS DISC SIGN SHIP +101E9 ; [*1108.0020.0002] # PHAISTOS DISC SIGN HORN +101EA ; [*1109.0020.0002] # PHAISTOS DISC SIGN HIDE +101EB ; [*110A.0020.0002] # PHAISTOS DISC SIGN BULLS LEG +101EC ; [*110B.0020.0002] # PHAISTOS DISC SIGN CAT +101ED ; [*110C.0020.0002] # PHAISTOS DISC SIGN RAM +101EE ; [*110D.0020.0002] # PHAISTOS DISC SIGN EAGLE +101EF ; [*110E.0020.0002] # PHAISTOS DISC SIGN DOVE +101F0 ; [*110F.0020.0002] # PHAISTOS DISC SIGN TUNNY +101F1 ; [*1110.0020.0002] # PHAISTOS DISC SIGN BEE +101F2 ; [*1111.0020.0002] # PHAISTOS DISC SIGN PLANE TREE +101F3 ; [*1112.0020.0002] # PHAISTOS DISC SIGN VINE +101F4 ; [*1113.0020.0002] # PHAISTOS DISC SIGN PAPYRUS +101F5 ; [*1114.0020.0002] # PHAISTOS DISC SIGN ROSETTE +101F6 ; [*1115.0020.0002] # PHAISTOS DISC SIGN LILY +101F7 ; [*1116.0020.0002] # PHAISTOS DISC SIGN OX BACK +101F8 ; [*1117.0020.0002] # PHAISTOS DISC SIGN FLUTE +101F9 ; [*1118.0020.0002] # PHAISTOS DISC SIGN GRATER +101FA ; [*1119.0020.0002] # PHAISTOS DISC SIGN STRAINER +101FB ; [*111A.0020.0002] # PHAISTOS DISC SIGN SMALL AXE +101FC ; [*111B.0020.0002] # PHAISTOS DISC SIGN WAVY BAND 102E0 ; [.0000.0000.0000] # COPTIC EPACT THOUSANDS MARK -102EA ; [*1B9E.0020.0002] # COPTIC EPACT NUMBER TEN -102EB ; [*1B9F.0020.0002] # COPTIC EPACT NUMBER TWENTY -102EC ; [*1BA0.0020.0002] # COPTIC EPACT NUMBER THIRTY -102ED ; [*1BA1.0020.0002] # COPTIC EPACT NUMBER FORTY -102EE ; [*1BA2.0020.0002] # COPTIC EPACT NUMBER FIFTY -102EF ; [*1BA3.0020.0002] # COPTIC EPACT NUMBER SIXTY -102F0 ; [*1BA4.0020.0002] # COPTIC EPACT NUMBER SEVENTY -102F1 ; [*1BA5.0020.0002] # COPTIC EPACT NUMBER EIGHTY -102F2 ; [*1BA6.0020.0002] # COPTIC EPACT NUMBER NINETY -102F3 ; [*1BA7.0020.0002] # COPTIC EPACT NUMBER ONE HUNDRED -102F4 ; [*1BA8.0020.0002] # COPTIC EPACT NUMBER TWO HUNDRED -102F5 ; [*1BA9.0020.0002] # COPTIC EPACT NUMBER THREE HUNDRED -102F6 ; [*1BAA.0020.0002] # COPTIC EPACT NUMBER FOUR HUNDRED -102F7 ; [*1BAB.0020.0002] # COPTIC EPACT NUMBER FIVE HUNDRED -102F8 ; [*1BAC.0020.0002] # COPTIC EPACT NUMBER SIX HUNDRED -102F9 ; [*1BAD.0020.0002] # COPTIC EPACT NUMBER SEVEN HUNDRED -102FA ; [*1BAE.0020.0002] # COPTIC EPACT NUMBER EIGHT HUNDRED -102FB ; [*1BAF.0020.0002] # COPTIC EPACT NUMBER NINE HUNDRED -10322 ; [*1B47.0020.0002] # OLD ITALIC NUMERAL TEN -10323 ; [*1B48.0020.0002] # OLD ITALIC NUMERAL FIFTY -1039F ; [*02FE.0020.0002] # UGARITIC WORD DIVIDER -103D0 ; [*02FF.0020.0002] # OLD PERSIAN WORD DIVIDER -103D3 ; [*1BB0.0020.0002] # OLD PERSIAN NUMBER TEN -103D4 ; [*1BB1.0020.0002] # OLD PERSIAN NUMBER TWENTY -103D5 ; [*1BB2.0020.0002] # OLD PERSIAN NUMBER HUNDRED -1056F ; [*0448.0020.0002] # CAUCASIAN ALBANIAN CITATION MARK -10857 ; [*02DA.0020.0002] # IMPERIAL ARAMAIC SECTION SIGN -1085B ; [*1BC2.0020.0002] # IMPERIAL ARAMAIC NUMBER TEN -1085C ; [*1BC3.0020.0002] # IMPERIAL ARAMAIC NUMBER TWENTY -1085D ; [*1BC4.0020.0002] # IMPERIAL ARAMAIC NUMBER ONE HUNDRED -1085E ; [*1BC5.0020.0002] # IMPERIAL ARAMAIC NUMBER ONE THOUSAND -1085F ; [*1BC6.0020.0002] # IMPERIAL ARAMAIC NUMBER TEN THOUSAND -10877 ; [*0FE7.0020.0002] # PALMYRENE LEFT-POINTING FLEURON -10878 ; [*0FE8.0020.0002] # PALMYRENE RIGHT-POINTING FLEURON -1087E ; [*1BB3.0020.0002] # PALMYRENE NUMBER TEN -1087F ; [*1BB4.0020.0002] # PALMYRENE NUMBER TWENTY -108AD ; [*1BB5.0020.0002] # NABATAEAN NUMBER TEN -108AE ; [*1BB6.0020.0002] # NABATAEAN NUMBER TWENTY -108AF ; [*1BB7.0020.0002] # NABATAEAN NUMBER ONE HUNDRED -108FD ; [*1BB8.0020.0002] # HATRAN NUMBER TEN -108FE ; [*1BB9.0020.0002] # HATRAN NUMBER TWENTY -108FF ; [*1BBA.0020.0002] # HATRAN NUMBER ONE HUNDRED -10917 ; [*1BBF.0020.0002] # PHOENICIAN NUMBER TEN -10918 ; [*1BC0.0020.0002] # PHOENICIAN NUMBER TWENTY -10919 ; [*1BC1.0020.0002] # PHOENICIAN NUMBER ONE HUNDRED -1091F ; [*0300.0020.0002] # PHOENICIAN WORD SEPARATOR -1093F ; [*02FA.0020.0002] # LYDIAN TRIANGULAR MARK -109BC ; [*1C41.0020.0002] # MEROITIC CURSIVE FRACTION ELEVEN TWELFTHS -109BD ; [*1C36.0020.0002] # MEROITIC CURSIVE FRACTION ONE HALF -109C9 ; [*1C0B.0020.0002] # MEROITIC CURSIVE NUMBER TEN -109CA ; [*1C0C.0020.0002] # MEROITIC CURSIVE NUMBER TWENTY -109CB ; [*1C0D.0020.0002] # MEROITIC CURSIVE NUMBER THIRTY -109CC ; [*1C0E.0020.0002] # MEROITIC CURSIVE NUMBER FORTY -109CD ; [*1C0F.0020.0002] # MEROITIC CURSIVE NUMBER FIFTY -109CE ; [*1C10.0020.0002] # MEROITIC CURSIVE NUMBER SIXTY -109CF ; [*1C11.0020.0002] # MEROITIC CURSIVE NUMBER SEVENTY -109D2 ; [*1C12.0020.0002] # MEROITIC CURSIVE NUMBER ONE HUNDRED -109D3 ; [*1C13.0020.0002] # MEROITIC CURSIVE NUMBER TWO HUNDRED -109D4 ; [*1C14.0020.0002] # MEROITIC CURSIVE NUMBER THREE HUNDRED -109D5 ; [*1C15.0020.0002] # MEROITIC CURSIVE NUMBER FOUR HUNDRED -109D6 ; [*1C16.0020.0002] # MEROITIC CURSIVE NUMBER FIVE HUNDRED -109D7 ; [*1C17.0020.0002] # MEROITIC CURSIVE NUMBER SIX HUNDRED -109D8 ; [*1C18.0020.0002] # MEROITIC CURSIVE NUMBER SEVEN HUNDRED -109D9 ; [*1C19.0020.0002] # MEROITIC CURSIVE NUMBER EIGHT HUNDRED -109DA ; [*1C1A.0020.0002] # MEROITIC CURSIVE NUMBER NINE HUNDRED -109DB ; [*1C1B.0020.0002] # MEROITIC CURSIVE NUMBER ONE THOUSAND -109DC ; [*1C1C.0020.0002] # MEROITIC CURSIVE NUMBER TWO THOUSAND -109DD ; [*1C1D.0020.0002] # MEROITIC CURSIVE NUMBER THREE THOUSAND -109DE ; [*1C1E.0020.0002] # MEROITIC CURSIVE NUMBER FOUR THOUSAND -109DF ; [*1C1F.0020.0002] # MEROITIC CURSIVE NUMBER FIVE THOUSAND -109E0 ; [*1C20.0020.0002] # MEROITIC CURSIVE NUMBER SIX THOUSAND -109E1 ; [*1C21.0020.0002] # MEROITIC CURSIVE NUMBER SEVEN THOUSAND -109E2 ; [*1C22.0020.0002] # MEROITIC CURSIVE NUMBER EIGHT THOUSAND -109E3 ; [*1C23.0020.0002] # MEROITIC CURSIVE NUMBER NINE THOUSAND -109E4 ; [*1C24.0020.0002] # MEROITIC CURSIVE NUMBER TEN THOUSAND -109E5 ; [*1C25.0020.0002] # MEROITIC CURSIVE NUMBER TWENTY THOUSAND -109E6 ; [*1C26.0020.0002] # MEROITIC CURSIVE NUMBER THIRTY THOUSAND -109E7 ; [*1C27.0020.0002] # MEROITIC CURSIVE NUMBER FORTY THOUSAND -109E8 ; [*1C28.0020.0002] # MEROITIC CURSIVE NUMBER FIFTY THOUSAND -109E9 ; [*1C29.0020.0002] # MEROITIC CURSIVE NUMBER SIXTY THOUSAND -109EA ; [*1C2A.0020.0002] # MEROITIC CURSIVE NUMBER SEVENTY THOUSAND -109EB ; [*1C2B.0020.0002] # MEROITIC CURSIVE NUMBER EIGHTY THOUSAND -109EC ; [*1C2C.0020.0002] # MEROITIC CURSIVE NUMBER NINETY THOUSAND -109ED ; [*1C2D.0020.0002] # MEROITIC CURSIVE NUMBER ONE HUNDRED THOUSAND -109EE ; [*1C2E.0020.0002] # MEROITIC CURSIVE NUMBER TWO HUNDRED THOUSAND -109EF ; [*1C2F.0020.0002] # MEROITIC CURSIVE NUMBER THREE HUNDRED THOUSAND -109F0 ; [*1C30.0020.0002] # MEROITIC CURSIVE NUMBER FOUR HUNDRED THOUSAND -109F1 ; [*1C31.0020.0002] # MEROITIC CURSIVE NUMBER FIVE HUNDRED THOUSAND -109F2 ; [*1C32.0020.0002] # MEROITIC CURSIVE NUMBER SIX HUNDRED THOUSAND -109F3 ; [*1C33.0020.0002] # MEROITIC CURSIVE NUMBER SEVEN HUNDRED THOUSAND -109F4 ; [*1C34.0020.0002] # MEROITIC CURSIVE NUMBER EIGHT HUNDRED THOUSAND -109F5 ; [*1C35.0020.0002] # MEROITIC CURSIVE NUMBER NINE HUNDRED THOUSAND -109F6 ; [*1C37.0020.0002] # MEROITIC CURSIVE FRACTION ONE TWELFTH -109F7 ; [*1C38.0020.0002] # MEROITIC CURSIVE FRACTION TWO TWELFTHS -109F8 ; [*1C39.0020.0002] # MEROITIC CURSIVE FRACTION THREE TWELFTHS -109F9 ; [*1C3A.0020.0002] # MEROITIC CURSIVE FRACTION FOUR TWELFTHS -109FA ; [*1C3B.0020.0002] # MEROITIC CURSIVE FRACTION FIVE TWELFTHS -109FB ; [*1C3C.0020.0002] # MEROITIC CURSIVE FRACTION SIX TWELFTHS -109FC ; [*1C3D.0020.0002] # MEROITIC CURSIVE FRACTION SEVEN TWELFTHS -109FD ; [*1C3E.0020.0002] # MEROITIC CURSIVE FRACTION EIGHT TWELFTHS -109FE ; [*1C3F.0020.0002] # MEROITIC CURSIVE FRACTION NINE TWELFTHS -109FF ; [*1C40.0020.0002] # MEROITIC CURSIVE FRACTION TEN TWELFTHS -10A44 ; [*1BE2.0020.0002] # KHAROSHTHI NUMBER TEN -10A45 ; [*1BE3.0020.0002] # KHAROSHTHI NUMBER TWENTY -10A46 ; [*1BE4.0020.0002] # KHAROSHTHI NUMBER ONE HUNDRED -10A47 ; [*1BE5.0020.0002] # KHAROSHTHI NUMBER ONE THOUSAND -10A50 ; [*044E.0020.0002] # KHAROSHTHI PUNCTUATION DOT -10A51 ; [*044F.0020.0002] # KHAROSHTHI PUNCTUATION SMALL CIRCLE -10A52 ; [*0450.0020.0002] # KHAROSHTHI PUNCTUATION CIRCLE -10A53 ; [*0451.0020.0002] # KHAROSHTHI PUNCTUATION CRESCENT BAR -10A54 ; [*0452.0020.0002] # KHAROSHTHI PUNCTUATION MANGALAM -10A55 ; [*0453.0020.0002] # KHAROSHTHI PUNCTUATION LOTUS -10A56 ; [*02AB.0020.0002] # KHAROSHTHI PUNCTUATION DANDA -10A57 ; [*02AC.0020.0002] # KHAROSHTHI PUNCTUATION DOUBLE DANDA -10A58 ; [*0454.0020.0002] # KHAROSHTHI PUNCTUATION LINES -10A7E ; [*1BBB.0020.0002] # OLD SOUTH ARABIAN NUMBER FIFTY -10A7F ; [*1BBC.0020.0002] # OLD SOUTH ARABIAN NUMERIC INDICATOR -10A9E ; [*1BBD.0020.0002] # OLD NORTH ARABIAN NUMBER TEN -10A9F ; [*1BBE.0020.0002] # OLD NORTH ARABIAN NUMBER TWENTY -10AED ; [*1BC7.0020.0002] # MANICHAEAN NUMBER TEN -10AEE ; [*1BC8.0020.0002] # MANICHAEAN NUMBER TWENTY -10AEF ; [*1BC9.0020.0002] # MANICHAEAN NUMBER ONE HUNDRED -10AF0 ; [*0459.0020.0002] # MANICHAEAN PUNCTUATION STAR -10AF1 ; [*045A.0020.0002] # MANICHAEAN PUNCTUATION FLEURON -10AF2 ; [*045B.0020.0002] # MANICHAEAN PUNCTUATION DOUBLE DOT WITHIN DOT -10AF3 ; [*045C.0020.0002] # MANICHAEAN PUNCTUATION DOT WITHIN DOT -10AF4 ; [*045D.0020.0002] # MANICHAEAN PUNCTUATION DOT -10AF5 ; [*045E.0020.0002] # MANICHAEAN PUNCTUATION TWO DOTS -10AF6 ; [*045F.0020.0002] # MANICHAEAN PUNCTUATION LINE FILLER -10B39 ; [*0458.0020.0002] # AVESTAN ABBREVIATION MARK -10B3A ; [*02DB.0020.0002] # TINY TWO DOTS OVER ONE DOT PUNCTUATION -10B3B ; [*02DC.0020.0002] # SMALL TWO DOTS OVER ONE DOT PUNCTUATION -10B3C ; [*02DD.0020.0002] # LARGE TWO DOTS OVER ONE DOT PUNCTUATION -10B3D ; [*02DE.0020.0002] # LARGE ONE DOT OVER TWO DOTS PUNCTUATION -10B3E ; [*02DF.0020.0002] # LARGE TWO RINGS OVER ONE RING PUNCTUATION -10B3F ; [*02E0.0020.0002] # LARGE ONE RING OVER TWO RINGS PUNCTUATION -10B5C ; [*1BCA.0020.0002] # INSCRIPTIONAL PARTHIAN NUMBER TEN -10B5D ; [*1BCB.0020.0002] # INSCRIPTIONAL PARTHIAN NUMBER TWENTY -10B5E ; [*1BCC.0020.0002] # INSCRIPTIONAL PARTHIAN NUMBER ONE HUNDRED -10B5F ; [*1BCD.0020.0002] # INSCRIPTIONAL PARTHIAN NUMBER ONE THOUSAND -10B7C ; [*1BCE.0020.0002] # INSCRIPTIONAL PAHLAVI NUMBER TEN -10B7D ; [*1BCF.0020.0002] # INSCRIPTIONAL PAHLAVI NUMBER TWENTY -10B7E ; [*1BD0.0020.0002] # INSCRIPTIONAL PAHLAVI NUMBER ONE HUNDRED -10B7F ; [*1BD1.0020.0002] # INSCRIPTIONAL PAHLAVI NUMBER ONE THOUSAND -10B99 ; [*0460.0020.0002] # PSALTER PAHLAVI SECTION MARK -10B9A ; [*0461.0020.0002] # PSALTER PAHLAVI TURNED SECTION MARK -10B9B ; [*0462.0020.0002] # PSALTER PAHLAVI FOUR DOTS WITH CROSS -10B9C ; [*0463.0020.0002] # PSALTER PAHLAVI FOUR DOTS WITH DOT -10BAD ; [*1BD2.0020.0002] # PSALTER PAHLAVI NUMBER TEN -10BAE ; [*1BD3.0020.0002] # PSALTER PAHLAVI NUMBER TWENTY -10BAF ; [*1BD4.0020.0002] # PSALTER PAHLAVI NUMBER ONE HUNDRED -10CFC ; [*1B49.0020.0002] # OLD HUNGARIAN NUMBER TEN -10CFD ; [*1B4A.0020.0002] # OLD HUNGARIAN NUMBER FIFTY -10CFE ; [*1B4B.0020.0002] # OLD HUNGARIAN NUMBER ONE HUNDRED -10CFF ; [*1B4C.0020.0002] # OLD HUNGARIAN NUMBER ONE THOUSAND -10E69 ; [*1B30.0020.0002] # RUMI NUMBER TEN -10E6A ; [*1B31.0020.0002] # RUMI NUMBER TWENTY -10E6B ; [*1B32.0020.0002] # RUMI NUMBER THIRTY -10E6C ; [*1B33.0020.0002] # RUMI NUMBER FORTY -10E6D ; [*1B34.0020.0002] # RUMI NUMBER FIFTY -10E6E ; [*1B35.0020.0002] # RUMI NUMBER SIXTY -10E6F ; [*1B36.0020.0002] # RUMI NUMBER SEVENTY -10E70 ; [*1B37.0020.0002] # RUMI NUMBER EIGHTY -10E71 ; [*1B38.0020.0002] # RUMI NUMBER NINETY -10E72 ; [*1B39.0020.0002] # RUMI NUMBER ONE HUNDRED -10E73 ; [*1B3A.0020.0002] # RUMI NUMBER TWO HUNDRED -10E74 ; [*1B3B.0020.0002] # RUMI NUMBER THREE HUNDRED -10E75 ; [*1B3C.0020.0002] # RUMI NUMBER FOUR HUNDRED -10E76 ; [*1B3D.0020.0002] # RUMI NUMBER FIVE HUNDRED -10E77 ; [*1B3E.0020.0002] # RUMI NUMBER SIX HUNDRED -10E78 ; [*1B3F.0020.0002] # RUMI NUMBER SEVEN HUNDRED -10E79 ; [*1B40.0020.0002] # RUMI NUMBER EIGHT HUNDRED -10E7A ; [*1B41.0020.0002] # RUMI NUMBER NINE HUNDRED -10E7B ; [*1B42.0020.0002] # RUMI FRACTION ONE HALF -10E7C ; [*1B43.0020.0002] # RUMI FRACTION ONE QUARTER -10E7D ; [*1B44.0020.0002] # RUMI FRACTION ONE THIRD -10E7E ; [*1B45.0020.0002] # RUMI FRACTION TWO THIRDS -11047 ; [*02AD.0020.0002] # BRAHMI DANDA -11048 ; [*02AE.0020.0002] # BRAHMI DOUBLE DANDA -11049 ; [*0449.0020.0002] # BRAHMI PUNCTUATION DOT -1104A ; [*044A.0020.0002] # BRAHMI PUNCTUATION DOUBLE DOT -1104B ; [*044B.0020.0002] # BRAHMI PUNCTUATION LINE -1104C ; [*044C.0020.0002] # BRAHMI PUNCTUATION CRESCENT BAR -1104D ; [*044D.0020.0002] # BRAHMI PUNCTUATION LOTUS -1105B ; [*1BD7.0020.0002] # BRAHMI NUMBER TEN -1105C ; [*1BD8.0020.0002] # BRAHMI NUMBER TWENTY -1105D ; [*1BD9.0020.0002] # BRAHMI NUMBER THIRTY -1105E ; [*1BDA.0020.0002] # BRAHMI NUMBER FORTY -1105F ; [*1BDB.0020.0002] # BRAHMI NUMBER FIFTY -11060 ; [*1BDC.0020.0002] # BRAHMI NUMBER SIXTY -11061 ; [*1BDD.0020.0002] # BRAHMI NUMBER SEVENTY -11062 ; [*1BDE.0020.0002] # BRAHMI NUMBER EIGHTY -11063 ; [*1BDF.0020.0002] # BRAHMI NUMBER NINETY -11064 ; [*1BE0.0020.0002] # BRAHMI NUMBER ONE HUNDRED -11065 ; [*1BE1.0020.0002] # BRAHMI NUMBER ONE THOUSAND -110BB ; [*0464.0020.0002] # KAITHI ABBREVIATION SIGN -110BC ; [*0465.0020.0002] # KAITHI ENUMERATION SIGN +102EA ; [*1E0F.0020.0002] # COPTIC EPACT NUMBER TEN +102EB ; [*1E10.0020.0002] # COPTIC EPACT NUMBER TWENTY +102EC ; [*1E11.0020.0002] # COPTIC EPACT NUMBER THIRTY +102ED ; [*1E12.0020.0002] # COPTIC EPACT NUMBER FORTY +102EE ; [*1E13.0020.0002] # COPTIC EPACT NUMBER FIFTY +102EF ; [*1E14.0020.0002] # COPTIC EPACT NUMBER SIXTY +102F0 ; [*1E15.0020.0002] # COPTIC EPACT NUMBER SEVENTY +102F1 ; [*1E16.0020.0002] # COPTIC EPACT NUMBER EIGHTY +102F2 ; [*1E17.0020.0002] # COPTIC EPACT NUMBER NINETY +102F3 ; [*1E18.0020.0002] # COPTIC EPACT NUMBER ONE HUNDRED +102F4 ; [*1E19.0020.0002] # COPTIC EPACT NUMBER TWO HUNDRED +102F5 ; [*1E1A.0020.0002] # COPTIC EPACT NUMBER THREE HUNDRED +102F6 ; [*1E1B.0020.0002] # COPTIC EPACT NUMBER FOUR HUNDRED +102F7 ; [*1E1C.0020.0002] # COPTIC EPACT NUMBER FIVE HUNDRED +102F8 ; [*1E1D.0020.0002] # COPTIC EPACT NUMBER SIX HUNDRED +102F9 ; [*1E1E.0020.0002] # COPTIC EPACT NUMBER SEVEN HUNDRED +102FA ; [*1E1F.0020.0002] # COPTIC EPACT NUMBER EIGHT HUNDRED +102FB ; [*1E20.0020.0002] # COPTIC EPACT NUMBER NINE HUNDRED +10322 ; [*1DB8.0020.0002] # OLD ITALIC NUMERAL TEN +10323 ; [*1DB9.0020.0002] # OLD ITALIC NUMERAL FIFTY +1039F ; [*030E.0020.0002] # UGARITIC WORD DIVIDER +103D0 ; [*030F.0020.0002] # OLD PERSIAN WORD DIVIDER +103D3 ; [*1E21.0020.0002] # OLD PERSIAN NUMBER TEN +103D4 ; [*1E22.0020.0002] # OLD PERSIAN NUMBER TWENTY +103D5 ; [*1E23.0020.0002] # OLD PERSIAN NUMBER HUNDRED +1056F ; [*045E.0020.0002] # CAUCASIAN ALBANIAN CITATION MARK +10857 ; [*02E2.0020.0002] # IMPERIAL ARAMAIC SECTION SIGN +1085B ; [*1E33.0020.0002] # IMPERIAL ARAMAIC NUMBER TEN +1085C ; [*1E34.0020.0002] # IMPERIAL ARAMAIC NUMBER TWENTY +1085D ; [*1E35.0020.0002] # IMPERIAL ARAMAIC NUMBER ONE HUNDRED +1085E ; [*1E36.0020.0002] # IMPERIAL ARAMAIC NUMBER ONE THOUSAND +1085F ; [*1E37.0020.0002] # IMPERIAL ARAMAIC NUMBER TEN THOUSAND +10877 ; [*111C.0020.0002] # PALMYRENE LEFT-POINTING FLEURON +10878 ; [*111D.0020.0002] # PALMYRENE RIGHT-POINTING FLEURON +1087E ; [*1E24.0020.0002] # PALMYRENE NUMBER TEN +1087F ; [*1E25.0020.0002] # PALMYRENE NUMBER TWENTY +108AD ; [*1E26.0020.0002] # NABATAEAN NUMBER TEN +108AE ; [*1E27.0020.0002] # NABATAEAN NUMBER TWENTY +108AF ; [*1E28.0020.0002] # NABATAEAN NUMBER ONE HUNDRED +108FD ; [*1E29.0020.0002] # HATRAN NUMBER TEN +108FE ; [*1E2A.0020.0002] # HATRAN NUMBER TWENTY +108FF ; [*1E2B.0020.0002] # HATRAN NUMBER ONE HUNDRED +10917 ; [*1E30.0020.0002] # PHOENICIAN NUMBER TEN +10918 ; [*1E31.0020.0002] # PHOENICIAN NUMBER TWENTY +10919 ; [*1E32.0020.0002] # PHOENICIAN NUMBER ONE HUNDRED +1091F ; [*0310.0020.0002] # PHOENICIAN WORD SEPARATOR +1093F ; [*030A.0020.0002] # LYDIAN TRIANGULAR MARK +109BC ; [*1F2B.0020.0002] # MEROITIC CURSIVE FRACTION ELEVEN TWELFTHS +109BD ; [*1F20.0020.0002] # MEROITIC CURSIVE FRACTION ONE HALF +109C9 ; [*1EF5.0020.0002] # MEROITIC CURSIVE NUMBER TEN +109CA ; [*1EF6.0020.0002] # MEROITIC CURSIVE NUMBER TWENTY +109CB ; [*1EF7.0020.0002] # MEROITIC CURSIVE NUMBER THIRTY +109CC ; [*1EF8.0020.0002] # MEROITIC CURSIVE NUMBER FORTY +109CD ; [*1EF9.0020.0002] # MEROITIC CURSIVE NUMBER FIFTY +109CE ; [*1EFA.0020.0002] # MEROITIC CURSIVE NUMBER SIXTY +109CF ; [*1EFB.0020.0002] # MEROITIC CURSIVE NUMBER SEVENTY +109D2 ; [*1EFC.0020.0002] # MEROITIC CURSIVE NUMBER ONE HUNDRED +109D3 ; [*1EFD.0020.0002] # MEROITIC CURSIVE NUMBER TWO HUNDRED +109D4 ; [*1EFE.0020.0002] # MEROITIC CURSIVE NUMBER THREE HUNDRED +109D5 ; [*1EFF.0020.0002] # MEROITIC CURSIVE NUMBER FOUR HUNDRED +109D6 ; [*1F00.0020.0002] # MEROITIC CURSIVE NUMBER FIVE HUNDRED +109D7 ; [*1F01.0020.0002] # MEROITIC CURSIVE NUMBER SIX HUNDRED +109D8 ; [*1F02.0020.0002] # MEROITIC CURSIVE NUMBER SEVEN HUNDRED +109D9 ; [*1F03.0020.0002] # MEROITIC CURSIVE NUMBER EIGHT HUNDRED +109DA ; [*1F04.0020.0002] # MEROITIC CURSIVE NUMBER NINE HUNDRED +109DB ; [*1F05.0020.0002] # MEROITIC CURSIVE NUMBER ONE THOUSAND +109DC ; [*1F06.0020.0002] # MEROITIC CURSIVE NUMBER TWO THOUSAND +109DD ; [*1F07.0020.0002] # MEROITIC CURSIVE NUMBER THREE THOUSAND +109DE ; [*1F08.0020.0002] # MEROITIC CURSIVE NUMBER FOUR THOUSAND +109DF ; [*1F09.0020.0002] # MEROITIC CURSIVE NUMBER FIVE THOUSAND +109E0 ; [*1F0A.0020.0002] # MEROITIC CURSIVE NUMBER SIX THOUSAND +109E1 ; [*1F0B.0020.0002] # MEROITIC CURSIVE NUMBER SEVEN THOUSAND +109E2 ; [*1F0C.0020.0002] # MEROITIC CURSIVE NUMBER EIGHT THOUSAND +109E3 ; [*1F0D.0020.0002] # MEROITIC CURSIVE NUMBER NINE THOUSAND +109E4 ; [*1F0E.0020.0002] # MEROITIC CURSIVE NUMBER TEN THOUSAND +109E5 ; [*1F0F.0020.0002] # MEROITIC CURSIVE NUMBER TWENTY THOUSAND +109E6 ; [*1F10.0020.0002] # MEROITIC CURSIVE NUMBER THIRTY THOUSAND +109E7 ; [*1F11.0020.0002] # MEROITIC CURSIVE NUMBER FORTY THOUSAND +109E8 ; [*1F12.0020.0002] # MEROITIC CURSIVE NUMBER FIFTY THOUSAND +109E9 ; [*1F13.0020.0002] # MEROITIC CURSIVE NUMBER SIXTY THOUSAND +109EA ; [*1F14.0020.0002] # MEROITIC CURSIVE NUMBER SEVENTY THOUSAND +109EB ; [*1F15.0020.0002] # MEROITIC CURSIVE NUMBER EIGHTY THOUSAND +109EC ; [*1F16.0020.0002] # MEROITIC CURSIVE NUMBER NINETY THOUSAND +109ED ; [*1F17.0020.0002] # MEROITIC CURSIVE NUMBER ONE HUNDRED THOUSAND +109EE ; [*1F18.0020.0002] # MEROITIC CURSIVE NUMBER TWO HUNDRED THOUSAND +109EF ; [*1F19.0020.0002] # MEROITIC CURSIVE NUMBER THREE HUNDRED THOUSAND +109F0 ; [*1F1A.0020.0002] # MEROITIC CURSIVE NUMBER FOUR HUNDRED THOUSAND +109F1 ; [*1F1B.0020.0002] # MEROITIC CURSIVE NUMBER FIVE HUNDRED THOUSAND +109F2 ; [*1F1C.0020.0002] # MEROITIC CURSIVE NUMBER SIX HUNDRED THOUSAND +109F3 ; [*1F1D.0020.0002] # MEROITIC CURSIVE NUMBER SEVEN HUNDRED THOUSAND +109F4 ; [*1F1E.0020.0002] # MEROITIC CURSIVE NUMBER EIGHT HUNDRED THOUSAND +109F5 ; [*1F1F.0020.0002] # MEROITIC CURSIVE NUMBER NINE HUNDRED THOUSAND +109F6 ; [*1F21.0020.0002] # MEROITIC CURSIVE FRACTION ONE TWELFTH +109F7 ; [*1F22.0020.0002] # MEROITIC CURSIVE FRACTION TWO TWELFTHS +109F8 ; [*1F23.0020.0002] # MEROITIC CURSIVE FRACTION THREE TWELFTHS +109F9 ; [*1F24.0020.0002] # MEROITIC CURSIVE FRACTION FOUR TWELFTHS +109FA ; [*1F25.0020.0002] # MEROITIC CURSIVE FRACTION FIVE TWELFTHS +109FB ; [*1F26.0020.0002] # MEROITIC CURSIVE FRACTION SIX TWELFTHS +109FC ; [*1F27.0020.0002] # MEROITIC CURSIVE FRACTION SEVEN TWELFTHS +109FD ; [*1F28.0020.0002] # MEROITIC CURSIVE FRACTION EIGHT TWELFTHS +109FE ; [*1F29.0020.0002] # MEROITIC CURSIVE FRACTION NINE TWELFTHS +109FF ; [*1F2A.0020.0002] # MEROITIC CURSIVE FRACTION TEN TWELFTHS +10A44 ; [*1E5E.0020.0002] # KHAROSHTHI NUMBER TEN +10A45 ; [*1E5F.0020.0002] # KHAROSHTHI NUMBER TWENTY +10A46 ; [*1E60.0020.0002] # KHAROSHTHI NUMBER ONE HUNDRED +10A47 ; [*1E61.0020.0002] # KHAROSHTHI NUMBER ONE THOUSAND +10A48 ; [*1E62.0020.0002] # KHAROSHTHI FRACTION ONE HALF +10A50 ; [*0464.0020.0002] # KHAROSHTHI PUNCTUATION DOT +10A51 ; [*0465.0020.0002] # KHAROSHTHI PUNCTUATION SMALL CIRCLE +10A52 ; [*0466.0020.0002] # KHAROSHTHI PUNCTUATION CIRCLE +10A53 ; [*0467.0020.0002] # KHAROSHTHI PUNCTUATION CRESCENT BAR +10A54 ; [*0468.0020.0002] # KHAROSHTHI PUNCTUATION MANGALAM +10A55 ; [*0469.0020.0002] # KHAROSHTHI PUNCTUATION LOTUS +10A56 ; [*02B2.0020.0002] # KHAROSHTHI PUNCTUATION DANDA +10A57 ; [*02B3.0020.0002] # KHAROSHTHI PUNCTUATION DOUBLE DANDA +10A58 ; [*046A.0020.0002] # KHAROSHTHI PUNCTUATION LINES +10A7E ; [*1E2C.0020.0002] # OLD SOUTH ARABIAN NUMBER FIFTY +10A7F ; [*1E2D.0020.0002] # OLD SOUTH ARABIAN NUMERIC INDICATOR +10A9E ; [*1E2E.0020.0002] # OLD NORTH ARABIAN NUMBER TEN +10A9F ; [*1E2F.0020.0002] # OLD NORTH ARABIAN NUMBER TWENTY +10AED ; [*1E38.0020.0002] # MANICHAEAN NUMBER TEN +10AEE ; [*1E39.0020.0002] # MANICHAEAN NUMBER TWENTY +10AEF ; [*1E3A.0020.0002] # MANICHAEAN NUMBER ONE HUNDRED +10AF0 ; [*046F.0020.0002] # MANICHAEAN PUNCTUATION STAR +10AF1 ; [*0470.0020.0002] # MANICHAEAN PUNCTUATION FLEURON +10AF2 ; [*0471.0020.0002] # MANICHAEAN PUNCTUATION DOUBLE DOT WITHIN DOT +10AF3 ; [*0472.0020.0002] # MANICHAEAN PUNCTUATION DOT WITHIN DOT +10AF4 ; [*0473.0020.0002] # MANICHAEAN PUNCTUATION DOT +10AF5 ; [*0474.0020.0002] # MANICHAEAN PUNCTUATION TWO DOTS +10AF6 ; [*0475.0020.0002] # MANICHAEAN PUNCTUATION LINE FILLER +10B39 ; [*046E.0020.0002] # AVESTAN ABBREVIATION MARK +10B3A ; [*02E3.0020.0002] # TINY TWO DOTS OVER ONE DOT PUNCTUATION +10B3B ; [*02E4.0020.0002] # SMALL TWO DOTS OVER ONE DOT PUNCTUATION +10B3C ; [*02E5.0020.0002] # LARGE TWO DOTS OVER ONE DOT PUNCTUATION +10B3D ; [*02E6.0020.0002] # LARGE ONE DOT OVER TWO DOTS PUNCTUATION +10B3E ; [*02E7.0020.0002] # LARGE TWO RINGS OVER ONE RING PUNCTUATION +10B3F ; [*02E8.0020.0002] # LARGE ONE RING OVER TWO RINGS PUNCTUATION +10B5C ; [*1E3B.0020.0002] # INSCRIPTIONAL PARTHIAN NUMBER TEN +10B5D ; [*1E3C.0020.0002] # INSCRIPTIONAL PARTHIAN NUMBER TWENTY +10B5E ; [*1E3D.0020.0002] # INSCRIPTIONAL PARTHIAN NUMBER ONE HUNDRED +10B5F ; [*1E3E.0020.0002] # INSCRIPTIONAL PARTHIAN NUMBER ONE THOUSAND +10B7C ; [*1E3F.0020.0002] # INSCRIPTIONAL PAHLAVI NUMBER TEN +10B7D ; [*1E40.0020.0002] # INSCRIPTIONAL PAHLAVI NUMBER TWENTY +10B7E ; [*1E41.0020.0002] # INSCRIPTIONAL PAHLAVI NUMBER ONE HUNDRED +10B7F ; [*1E42.0020.0002] # INSCRIPTIONAL PAHLAVI NUMBER ONE THOUSAND +10B99 ; [*0476.0020.0002] # PSALTER PAHLAVI SECTION MARK +10B9A ; [*0477.0020.0002] # PSALTER PAHLAVI TURNED SECTION MARK +10B9B ; [*0478.0020.0002] # PSALTER PAHLAVI FOUR DOTS WITH CROSS +10B9C ; [*0479.0020.0002] # PSALTER PAHLAVI FOUR DOTS WITH DOT +10BAD ; [*1E43.0020.0002] # PSALTER PAHLAVI NUMBER TEN +10BAE ; [*1E44.0020.0002] # PSALTER PAHLAVI NUMBER TWENTY +10BAF ; [*1E45.0020.0002] # PSALTER PAHLAVI NUMBER ONE HUNDRED +10CFC ; [*1DBA.0020.0002] # OLD HUNGARIAN NUMBER TEN +10CFD ; [*1DBB.0020.0002] # OLD HUNGARIAN NUMBER FIFTY +10CFE ; [*1DBC.0020.0002] # OLD HUNGARIAN NUMBER ONE HUNDRED +10CFF ; [*1DBD.0020.0002] # OLD HUNGARIAN NUMBER ONE THOUSAND +10E69 ; [*1DA1.0020.0002] # RUMI NUMBER TEN +10E6A ; [*1DA2.0020.0002] # RUMI NUMBER TWENTY +10E6B ; [*1DA3.0020.0002] # RUMI NUMBER THIRTY +10E6C ; [*1DA4.0020.0002] # RUMI NUMBER FORTY +10E6D ; [*1DA5.0020.0002] # RUMI NUMBER FIFTY +10E6E ; [*1DA6.0020.0002] # RUMI NUMBER SIXTY +10E6F ; [*1DA7.0020.0002] # RUMI NUMBER SEVENTY +10E70 ; [*1DA8.0020.0002] # RUMI NUMBER EIGHTY +10E71 ; [*1DA9.0020.0002] # RUMI NUMBER NINETY +10E72 ; [*1DAA.0020.0002] # RUMI NUMBER ONE HUNDRED +10E73 ; [*1DAB.0020.0002] # RUMI NUMBER TWO HUNDRED +10E74 ; [*1DAC.0020.0002] # RUMI NUMBER THREE HUNDRED +10E75 ; [*1DAD.0020.0002] # RUMI NUMBER FOUR HUNDRED +10E76 ; [*1DAE.0020.0002] # RUMI NUMBER FIVE HUNDRED +10E77 ; [*1DAF.0020.0002] # RUMI NUMBER SIX HUNDRED +10E78 ; [*1DB0.0020.0002] # RUMI NUMBER SEVEN HUNDRED +10E79 ; [*1DB1.0020.0002] # RUMI NUMBER EIGHT HUNDRED +10E7A ; [*1DB2.0020.0002] # RUMI NUMBER NINE HUNDRED +10E7B ; [*1DB3.0020.0002] # RUMI FRACTION ONE HALF +10E7C ; [*1DB4.0020.0002] # RUMI FRACTION ONE QUARTER +10E7D ; [*1DB5.0020.0002] # RUMI FRACTION ONE THIRD +10E7E ; [*1DB6.0020.0002] # RUMI FRACTION TWO THIRDS +10EAD ; [*0222.0020.0002] # YEZIDI HYPHENATION MARK +10F22 ; [*1E46.0020.0002] # OLD SOGDIAN NUMBER TEN +10F23 ; [*1E47.0020.0002] # OLD SOGDIAN NUMBER TWENTY +10F24 ; [*1E48.0020.0002] # OLD SOGDIAN NUMBER THIRTY +10F25 ; [*1E49.0020.0002] # OLD SOGDIAN NUMBER ONE HUNDRED +10F26 ; [*1E4A.0020.0002] # OLD SOGDIAN FRACTION ONE HALF +10F52 ; [*1E4B.0020.0002] # SOGDIAN NUMBER TEN +10F53 ; [*1E4C.0020.0002] # SOGDIAN NUMBER TWENTY +10F54 ; [*1E4D.0020.0002] # SOGDIAN NUMBER ONE HUNDRED +10F55 ; [*02E9.0020.0002] # SOGDIAN PUNCTUATION TWO VERTICAL BARS +10F56 ; [*02EA.0020.0002] # SOGDIAN PUNCTUATION TWO VERTICAL BARS WITH DOTS +10F57 ; [*02EB.0020.0002] # SOGDIAN PUNCTUATION CIRCLE WITH DOT +10F58 ; [*02EC.0020.0002] # SOGDIAN PUNCTUATION TWO CIRCLES WITH DOTS +10F59 ; [*02ED.0020.0002] # SOGDIAN PUNCTUATION HALF CIRCLE WITH DOT +10FC9 ; [*1E4E.0020.0002] # CHORASMIAN NUMBER TEN +10FCA ; [*1E4F.0020.0002] # CHORASMIAN NUMBER TWENTY +10FCB ; [*1E50.0020.0002] # CHORASMIAN NUMBER ONE HUNDRED +11047 ; [*02B4.0020.0002] # BRAHMI DANDA +11048 ; [*02B5.0020.0002] # BRAHMI DOUBLE DANDA +11049 ; [*045F.0020.0002] # BRAHMI PUNCTUATION DOT +1104A ; [*0460.0020.0002] # BRAHMI PUNCTUATION DOUBLE DOT +1104B ; [*0461.0020.0002] # BRAHMI PUNCTUATION LINE +1104C ; [*0462.0020.0002] # BRAHMI PUNCTUATION CRESCENT BAR +1104D ; [*0463.0020.0002] # BRAHMI PUNCTUATION LOTUS +1105B ; [*1E53.0020.0002] # BRAHMI NUMBER TEN +1105C ; [*1E54.0020.0002] # BRAHMI NUMBER TWENTY +1105D ; [*1E55.0020.0002] # BRAHMI NUMBER THIRTY +1105E ; [*1E56.0020.0002] # BRAHMI NUMBER FORTY +1105F ; [*1E57.0020.0002] # BRAHMI NUMBER FIFTY +11060 ; [*1E58.0020.0002] # BRAHMI NUMBER SIXTY +11061 ; [*1E59.0020.0002] # BRAHMI NUMBER SEVENTY +11062 ; [*1E5A.0020.0002] # BRAHMI NUMBER EIGHTY +11063 ; [*1E5B.0020.0002] # BRAHMI NUMBER NINETY +11064 ; [*1E5C.0020.0002] # BRAHMI NUMBER ONE HUNDRED +11065 ; [*1E5D.0020.0002] # BRAHMI NUMBER ONE THOUSAND +110BB ; [*047A.0020.0002] # KAITHI ABBREVIATION SIGN +110BC ; [*047B.0020.0002] # KAITHI ENUMERATION SIGN 110BD ; [.0000.0000.0000] # KAITHI NUMBER SIGN -110BE ; [*02E1.0020.0002] # KAITHI SECTION MARK -110BF ; [*02E2.0020.0002] # KAITHI DOUBLE SECTION MARK -110C0 ; [*02AF.0020.0002] # KAITHI DANDA -110C1 ; [*02B0.0020.0002] # KAITHI DOUBLE DANDA -11140 ; [*02E3.0020.0002] # CHAKMA SECTION MARK -11141 ; [*02B1.0020.0002] # CHAKMA DANDA -11142 ; [*02B2.0020.0002] # CHAKMA DOUBLE DANDA -11143 ; [*0274.0020.0002] # CHAKMA QUESTION MARK -11174 ; [*0466.0020.0002] # MAHAJANI ABBREVIATION SIGN -11175 ; [*0467.0020.0002] # MAHAJANI SECTION MARK -111C5 ; [*02B3.0020.0002] # SHARADA DANDA -111C6 ; [*02B4.0020.0002] # SHARADA DOUBLE DANDA -111C7 ; [*0469.0020.0002] # SHARADA ABBREVIATION SIGN -111C8 ; [*02E4.0020.0002] # SHARADA SEPARATOR -111C9 ; [*046A.0020.0002] # SHARADA SANDHI MARK -111CD ; [*0468.0020.0002] # SHARADA SUTRA MARK -111DB ; [*046B.0020.0002] # SHARADA SIGN SIDDHAM -111DD ; [*046C.0020.0002] # SHARADA CONTINUATION SIGN -111DE ; [*02E5.0020.0002] # SHARADA SECTION MARK-1 -111DF ; [*02E6.0020.0002] # SHARADA SECTION MARK-2 -111EA ; [*1BF0.0020.0002] # SINHALA ARCHAIC NUMBER TEN -111EB ; [*1BF1.0020.0002] # SINHALA ARCHAIC NUMBER TWENTY -111EC ; [*1BF2.0020.0002] # SINHALA ARCHAIC NUMBER THIRTY -111ED ; [*1BF3.0020.0002] # SINHALA ARCHAIC NUMBER FORTY -111EE ; [*1BF4.0020.0002] # SINHALA ARCHAIC NUMBER FIFTY -111EF ; [*1BF5.0020.0002] # SINHALA ARCHAIC NUMBER SIXTY -111F0 ; [*1BF6.0020.0002] # SINHALA ARCHAIC NUMBER SEVENTY -111F1 ; [*1BF7.0020.0002] # SINHALA ARCHAIC NUMBER EIGHTY -111F2 ; [*1BF8.0020.0002] # SINHALA ARCHAIC NUMBER NINETY -111F3 ; [*1BF9.0020.0002] # SINHALA ARCHAIC NUMBER ONE HUNDRED -111F4 ; [*1BFA.0020.0002] # SINHALA ARCHAIC NUMBER ONE THOUSAND -11238 ; [*02B5.0020.0002] # KHOJKI DANDA -11239 ; [*02B6.0020.0002] # KHOJKI DOUBLE DANDA -1123A ; [*046D.0020.0002] # KHOJKI WORD SEPARATOR -1123B ; [*046E.0020.0002] # KHOJKI SECTION MARK -1123C ; [*046F.0020.0002] # KHOJKI DOUBLE SECTION MARK -1123D ; [*0470.0020.0002] # KHOJKI ABBREVIATION SIGN -112A9 ; [*02E7.0020.0002] # MULTANI SECTION MARK +110BE ; [*02EE.0020.0002] # KAITHI SECTION MARK +110BF ; [*02EF.0020.0002] # KAITHI DOUBLE SECTION MARK +110C0 ; [*02B6.0020.0002] # KAITHI DANDA +110C1 ; [*02B7.0020.0002] # KAITHI DOUBLE DANDA +110CD ; [.0000.0000.0000] # KAITHI NUMBER SIGN ABOVE +11140 ; [*02F0.0020.0002] # CHAKMA SECTION MARK +11141 ; [*02B8.0020.0002] # CHAKMA DANDA +11142 ; [*02B9.0020.0002] # CHAKMA DOUBLE DANDA +11143 ; [*027A.0020.0002] # CHAKMA QUESTION MARK +11174 ; [*047C.0020.0002] # MAHAJANI ABBREVIATION SIGN +11175 ; [*047D.0020.0002] # MAHAJANI SECTION MARK +111C5 ; [*02BA.0020.0002] # SHARADA DANDA +111C6 ; [*02BB.0020.0002] # SHARADA DOUBLE DANDA +111C7 ; [*047F.0020.0002] # SHARADA ABBREVIATION SIGN +111C8 ; [*02F1.0020.0002] # SHARADA SEPARATOR +111CD ; [*047E.0020.0002] # SHARADA SUTRA MARK +111DB ; [*0480.0020.0002] # SHARADA SIGN SIDDHAM +111DD ; [*0481.0020.0002] # SHARADA CONTINUATION SIGN +111DE ; [*02F2.0020.0002] # SHARADA SECTION MARK-1 +111DF ; [*02F3.0020.0002] # SHARADA SECTION MARK-2 +111EA ; [*1E6D.0020.0002] # SINHALA ARCHAIC NUMBER TEN +111EB ; [*1E6E.0020.0002] # SINHALA ARCHAIC NUMBER TWENTY +111EC ; [*1E6F.0020.0002] # SINHALA ARCHAIC NUMBER THIRTY +111ED ; [*1E70.0020.0002] # SINHALA ARCHAIC NUMBER FORTY +111EE ; [*1E71.0020.0002] # SINHALA ARCHAIC NUMBER FIFTY +111EF ; [*1E72.0020.0002] # SINHALA ARCHAIC NUMBER SIXTY +111F0 ; [*1E73.0020.0002] # SINHALA ARCHAIC NUMBER SEVENTY +111F1 ; [*1E74.0020.0002] # SINHALA ARCHAIC NUMBER EIGHTY +111F2 ; [*1E75.0020.0002] # SINHALA ARCHAIC NUMBER NINETY +111F3 ; [*1E76.0020.0002] # SINHALA ARCHAIC NUMBER ONE HUNDRED +111F4 ; [*1E77.0020.0002] # SINHALA ARCHAIC NUMBER ONE THOUSAND +11238 ; [*02BC.0020.0002] # KHOJKI DANDA +11239 ; [*02BD.0020.0002] # KHOJKI DOUBLE DANDA +1123A ; [*0482.0020.0002] # KHOJKI WORD SEPARATOR +1123B ; [*0483.0020.0002] # KHOJKI SECTION MARK +1123C ; [*0484.0020.0002] # KHOJKI DOUBLE SECTION MARK +1123D ; [*0485.0020.0002] # KHOJKI ABBREVIATION SIGN +112A9 ; [*02F4.0020.0002] # MULTANI SECTION MARK 11366 ; [.0000.0000.0000] # COMBINING GRANTHA DIGIT ZERO 11367 ; [.0000.0000.0000] # COMBINING GRANTHA DIGIT ONE 11368 ; [.0000.0000.0000] # COMBINING GRANTHA DIGIT TWO @@ -4628,499 +4721,570 @@ FFFC ; [*1AF9.0020.0002] # OBJECT REPLACEMENT CHARACTER 11372 ; [.0000.0000.0000] # COMBINING GRANTHA LETTER NA 11373 ; [.0000.0000.0000] # COMBINING GRANTHA LETTER VI 11374 ; [.0000.0000.0000] # COMBINING GRANTHA LETTER PA -1144B ; [*02B7.0020.0002] # NEWA DANDA -1144C ; [*02B8.0020.0002] # NEWA DOUBLE DANDA -1144D ; [*0471.0020.0002] # NEWA COMMA -1144E ; [*0472.0020.0002] # NEWA GAP FILLER -1144F ; [*0473.0020.0002] # NEWA ABBREVIATION SIGN -1145B ; [*0474.0020.0002] # NEWA PLACEHOLDER MARK -1145D ; [*0475.0020.0002] # NEWA INSERTION SIGN -114C6 ; [*0476.0020.0002] # TIRHUTA ABBREVIATION SIGN -115C1 ; [*0477.0020.0002] # SIDDHAM SIGN SIDDHAM -115C2 ; [*02B9.0020.0002] # SIDDHAM DANDA -115C3 ; [*02BA.0020.0002] # SIDDHAM DOUBLE DANDA -115C4 ; [*0478.0020.0002] # SIDDHAM SEPARATOR DOT -115C5 ; [*0479.0020.0002] # SIDDHAM SEPARATOR BAR -115C6 ; [*047A.0020.0002] # SIDDHAM REPETITION MARK-1 -115C7 ; [*047B.0020.0002] # SIDDHAM REPETITION MARK-2 -115C8 ; [*047C.0020.0002] # SIDDHAM REPETITION MARK-3 -115C9 ; [*047D.0020.0002] # SIDDHAM END OF TEXT MARK -115CA ; [*047E.0020.0002] # SIDDHAM SECTION MARK WITH TRIDENT AND U-SHAPED ORNAMENTS -115CB ; [*047F.0020.0002] # SIDDHAM SECTION MARK WITH TRIDENT AND DOTTED CRESCENTS -115CC ; [*0480.0020.0002] # SIDDHAM SECTION MARK WITH RAYS AND DOTTED CRESCENTS -115CD ; [*0481.0020.0002] # SIDDHAM SECTION MARK WITH RAYS AND DOTTED DOUBLE CRESCENTS -115CE ; [*0482.0020.0002] # SIDDHAM SECTION MARK WITH RAYS AND DOTTED TRIPLE CRESCENTS -115CF ; [*0483.0020.0002] # SIDDHAM SECTION MARK DOUBLE RING -115D0 ; [*0484.0020.0002] # SIDDHAM SECTION MARK DOUBLE RING WITH RAYS -115D1 ; [*0485.0020.0002] # SIDDHAM SECTION MARK WITH DOUBLE CRESCENTS -115D2 ; [*0486.0020.0002] # SIDDHAM SECTION MARK WITH TRIPLE CRESCENTS -115D3 ; [*0487.0020.0002] # SIDDHAM SECTION MARK WITH QUADRUPLE CRESCENTS -115D4 ; [*0488.0020.0002] # SIDDHAM SECTION MARK WITH SEPTUPLE CRESCENTS -115D5 ; [*0489.0020.0002] # SIDDHAM SECTION MARK WITH CIRCLES AND RAYS -115D6 ; [*048A.0020.0002] # SIDDHAM SECTION MARK WITH CIRCLES AND TWO ENCLOSURES -115D7 ; [*048B.0020.0002] # SIDDHAM SECTION MARK WITH CIRCLES AND FOUR ENCLOSURES -11641 ; [*02BB.0020.0002] # MODI DANDA -11642 ; [*02BC.0020.0002] # MODI DOUBLE DANDA -11643 ; [*048C.0020.0002] # MODI ABBREVIATION SIGN -11660 ; [*03DF.0020.0002] # MONGOLIAN BIRGA WITH ORNAMENT -11661 ; [*03E0.0020.0002] # MONGOLIAN ROTATED BIRGA -11662 ; [*03E1.0020.0002] # MONGOLIAN DOUBLE BIRGA WITH ORNAMENT -11663 ; [*03E2.0020.0002] # MONGOLIAN TRIPLE BIRGA WITH ORNAMENT -11664 ; [*03E3.0020.0002] # MONGOLIAN BIRGA WITH DOUBLE ORNAMENT -11665 ; [*03E4.0020.0002] # MONGOLIAN ROTATED BIRGA WITH ORNAMENT -11666 ; [*03E5.0020.0002] # MONGOLIAN ROTATED BIRGA WITH DOUBLE ORNAMENT -11667 ; [*03E6.0020.0002] # MONGOLIAN INVERTED BIRGA -11668 ; [*03E7.0020.0002] # MONGOLIAN INVERTED BIRGA WITH DOUBLE ORNAMENT -11669 ; [*03E8.0020.0002] # MONGOLIAN SWIRL BIRGA -1166A ; [*03E9.0020.0002] # MONGOLIAN SWIRL BIRGA WITH ORNAMENT -1166B ; [*03EA.0020.0002] # MONGOLIAN SWIRL BIRGA WITH DOUBLE ORNAMENT -1166C ; [*03EB.0020.0002] # MONGOLIAN TURNED SWIRL BIRGA WITH DOUBLE ORNAMENT -1173A ; [*1BD5.0020.0002] # AHOM NUMBER TEN -1173B ; [*1BD6.0020.0002] # AHOM NUMBER TWENTY -1173C ; [*02BD.0020.0002] # AHOM SIGN SMALL SECTION -1173D ; [*02BE.0020.0002] # AHOM SIGN SECTION -1173E ; [*02E8.0020.0002] # AHOM SIGN RULAI -1173F ; [*0566.0020.0002] # AHOM SYMBOL VI -118EA ; [*1BFB.0020.0002] # WARANG CITI NUMBER TEN -118EB ; [*1BFC.0020.0002] # WARANG CITI NUMBER TWENTY -118EC ; [*1BFD.0020.0002] # WARANG CITI NUMBER THIRTY -118ED ; [*1BFE.0020.0002] # WARANG CITI NUMBER FORTY -118EE ; [*1BFF.0020.0002] # WARANG CITI NUMBER FIFTY -118EF ; [*1C00.0020.0002] # WARANG CITI NUMBER SIXTY -118F0 ; [*1C01.0020.0002] # WARANG CITI NUMBER SEVENTY -118F1 ; [*1C02.0020.0002] # WARANG CITI NUMBER EIGHTY -118F2 ; [*1C03.0020.0002] # WARANG CITI NUMBER NINETY -11A3F ; [*040F.0020.0002] # ZANABAZAR SQUARE INITIAL HEAD MARK -11A40 ; [*0410.0020.0002] # ZANABAZAR SQUARE CLOSING HEAD MARK -11A41 ; [*0411.0020.0002] # ZANABAZAR SQUARE MARK TSHEG -11A42 ; [*0412.0020.0002] # ZANABAZAR SQUARE MARK SHAD -11A43 ; [*0413.0020.0002] # ZANABAZAR SQUARE MARK DOUBLE SHAD -11A44 ; [*0414.0020.0002] # ZANABAZAR SQUARE MARK LONG TSHEG -11A45 ; [*0415.0020.0002] # ZANABAZAR SQUARE INITIAL DOUBLE-LINED HEAD MARK -11A46 ; [*0416.0020.0002] # ZANABAZAR SQUARE CLOSING DOUBLE-LINED HEAD MARK -11A9A ; [*0417.0020.0002] # SOYOMBO MARK TSHEG -11A9B ; [*0418.0020.0002] # SOYOMBO MARK SHAD -11A9C ; [*0419.0020.0002] # SOYOMBO MARK DOUBLE SHAD -11A9E ; [*041A.0020.0002] # SOYOMBO HEAD MARK WITH MOON AND SUN AND TRIPLE FLAME -11A9F ; [*041B.0020.0002] # SOYOMBO HEAD MARK WITH MOON AND SUN AND FLAME -11AA0 ; [*041C.0020.0002] # SOYOMBO HEAD MARK WITH MOON AND SUN -11AA1 ; [*041D.0020.0002] # SOYOMBO TERMINAL MARK-1 -11AA2 ; [*041E.0020.0002] # SOYOMBO TERMINAL MARK-2 -11C41 ; [*02BF.0020.0002] # BHAIKSUKI DANDA -11C42 ; [*02C0.0020.0002] # BHAIKSUKI DOUBLE DANDA -11C43 ; [*0455.0020.0002] # BHAIKSUKI WORD SEPARATOR -11C44 ; [*0456.0020.0002] # BHAIKSUKI GAP FILLER-1 -11C45 ; [*0457.0020.0002] # BHAIKSUKI GAP FILLER-2 -11C63 ; [*1BE6.0020.0002] # BHAIKSUKI NUMBER TEN -11C64 ; [*1BE7.0020.0002] # BHAIKSUKI NUMBER TWENTY -11C65 ; [*1BE8.0020.0002] # BHAIKSUKI NUMBER THIRTY -11C66 ; [*1BE9.0020.0002] # BHAIKSUKI NUMBER FORTY -11C67 ; [*1BEA.0020.0002] # BHAIKSUKI NUMBER FIFTY -11C68 ; [*1BEB.0020.0002] # BHAIKSUKI NUMBER SIXTY -11C69 ; [*1BEC.0020.0002] # BHAIKSUKI NUMBER SEVENTY -11C6A ; [*1BED.0020.0002] # BHAIKSUKI NUMBER EIGHTY -11C6B ; [*1BEE.0020.0002] # BHAIKSUKI NUMBER NINETY -11C6C ; [*1BEF.0020.0002] # BHAIKSUKI HUNDREDS UNIT MARK -11C70 ; [*041F.0020.0002] # MARCHEN HEAD MARK -11C71 ; [*0420.0020.0002] # MARCHEN MARK SHAD -12432 ; [*1C42.0020.0002] # CUNEIFORM NUMERIC SIGN SHAR2 TIMES GAL PLUS DISH -12433 ; [*1C43.0020.0002] # CUNEIFORM NUMERIC SIGN SHAR2 TIMES GAL PLUS MIN -1245A ; [*1C44.0020.0002] # CUNEIFORM NUMERIC SIGN ONE THIRD DISH -1245B ; [*1C45.0020.0002] # CUNEIFORM NUMERIC SIGN TWO THIRDS DISH -1245C ; [*1C46.0020.0002] # CUNEIFORM NUMERIC SIGN FIVE SIXTHS DISH -1245D ; [*1C47.0020.0002] # CUNEIFORM NUMERIC SIGN ONE THIRD VARIANT FORM A -1245E ; [*1C48.0020.0002] # CUNEIFORM NUMERIC SIGN TWO THIRDS VARIANT FORM A -1245F ; [*1C49.0020.0002] # CUNEIFORM NUMERIC SIGN ONE EIGHTH ASH -12460 ; [*1C4A.0020.0002] # CUNEIFORM NUMERIC SIGN ONE QUARTER ASH -12461 ; [*1C4B.0020.0002] # CUNEIFORM NUMERIC SIGN OLD ASSYRIAN ONE SIXTH -12462 ; [*1C4C.0020.0002] # CUNEIFORM NUMERIC SIGN OLD ASSYRIAN ONE QUARTER -12463 ; [*1C4D.0020.0002] # CUNEIFORM NUMERIC SIGN ONE QUARTER GUR -12464 ; [*1C4E.0020.0002] # CUNEIFORM NUMERIC SIGN ONE HALF GUR -12465 ; [*1C4F.0020.0002] # CUNEIFORM NUMERIC SIGN ELAMITE ONE THIRD -12466 ; [*1C50.0020.0002] # CUNEIFORM NUMERIC SIGN ELAMITE TWO THIRDS -12467 ; [*1C51.0020.0002] # CUNEIFORM NUMERIC SIGN ELAMITE FORTY -12468 ; [*1C52.0020.0002] # CUNEIFORM NUMERIC SIGN ELAMITE FIFTY -12470 ; [*0301.0020.0002] # CUNEIFORM PUNCTUATION SIGN OLD ASSYRIAN WORD DIVIDER -12471 ; [*0302.0020.0002] # CUNEIFORM PUNCTUATION SIGN VERTICAL COLON -12472 ; [*0303.0020.0002] # CUNEIFORM PUNCTUATION SIGN DIAGONAL COLON -12473 ; [*0304.0020.0002] # CUNEIFORM PUNCTUATION SIGN DIAGONAL TRICOLON -12474 ; [*0305.0020.0002] # CUNEIFORM PUNCTUATION SIGN DIAGONAL QUADCOLON -16A6E ; [*02C1.0020.0002] # MRO DANDA -16A6F ; [*02C2.0020.0002] # MRO DOUBLE DANDA -16AF5 ; [*0289.0020.0002] # BASSA VAH FULL STOP -16B37 ; [*048D.0020.0002] # PAHAWH HMONG SIGN VOS THOM -16B38 ; [*048E.0020.0002] # PAHAWH HMONG SIGN VOS TSHAB CEEB -16B39 ; [*048F.0020.0002] # PAHAWH HMONG SIGN CIM CHEEM -16B3A ; [*0490.0020.0002] # PAHAWH HMONG SIGN VOS THIAB -16B3B ; [*0491.0020.0002] # PAHAWH HMONG SIGN VOS FEEM -16B3C ; [*0FE9.0020.0002] # PAHAWH HMONG SIGN XYEEM NTXIV -16B3D ; [*0FEA.0020.0002] # PAHAWH HMONG SIGN XYEEM RHO -16B3E ; [*0FEB.0020.0002] # PAHAWH HMONG SIGN XYEEM TOV -16B3F ; [*0FEC.0020.0002] # PAHAWH HMONG SIGN XYEEM FAIB -16B44 ; [*0492.0020.0002] # PAHAWH HMONG SIGN XAUS -16B45 ; [*0FED.0020.0002] # PAHAWH HMONG SIGN CIM TSOV ROG -16B5B ; [*1C04.0020.0002] # PAHAWH HMONG NUMBER TENS -16B5C ; [*1C05.0020.0002] # PAHAWH HMONG NUMBER HUNDREDS -16B5D ; [*1C06.0020.0002] # PAHAWH HMONG NUMBER TEN THOUSANDS -16B5E ; [*1C07.0020.0002] # PAHAWH HMONG NUMBER MILLIONS -16B5F ; [*1C08.0020.0002] # PAHAWH HMONG NUMBER HUNDRED MILLIONS -16B60 ; [*1C09.0020.0002] # PAHAWH HMONG NUMBER TEN BILLIONS -16B61 ; [*1C0A.0020.0002] # PAHAWH HMONG NUMBER TRILLIONS -1BC9C ; [*11DE.0020.0002] # DUPLOYAN SIGN O WITH CROSS -1BC9F ; [*028A.0020.0002] # DUPLOYAN PUNCTUATION CHINOOK FULL STOP -1D000 ; [*0FEE.0020.0002] # BYZANTINE MUSICAL SYMBOL PSILI -1D001 ; [*0FEF.0020.0002] # BYZANTINE MUSICAL SYMBOL DASEIA -1D002 ; [*0FF0.0020.0002] # BYZANTINE MUSICAL SYMBOL PERISPOMENI -1D003 ; [*0FF1.0020.0002] # BYZANTINE MUSICAL SYMBOL OXEIA EKFONITIKON -1D004 ; [*0FF2.0020.0002] # BYZANTINE MUSICAL SYMBOL OXEIA DIPLI -1D005 ; [*0FF3.0020.0002] # BYZANTINE MUSICAL SYMBOL VAREIA EKFONITIKON -1D006 ; [*0FF4.0020.0002] # BYZANTINE MUSICAL SYMBOL VAREIA DIPLI -1D007 ; [*0FF5.0020.0002] # BYZANTINE MUSICAL SYMBOL KATHISTI -1D008 ; [*0FF6.0020.0002] # BYZANTINE MUSICAL SYMBOL SYRMATIKI -1D009 ; [*0FF7.0020.0002] # BYZANTINE MUSICAL SYMBOL PARAKLITIKI -1D00A ; [*0FF8.0020.0002] # BYZANTINE MUSICAL SYMBOL YPOKRISIS -1D00B ; [*0FF9.0020.0002] # BYZANTINE MUSICAL SYMBOL YPOKRISIS DIPLI -1D00C ; [*0FFA.0020.0002] # BYZANTINE MUSICAL SYMBOL KREMASTI -1D00D ; [*0FFB.0020.0002] # BYZANTINE MUSICAL SYMBOL APESO EKFONITIKON -1D00E ; [*0FFC.0020.0002] # BYZANTINE MUSICAL SYMBOL EXO EKFONITIKON -1D00F ; [*0FFD.0020.0002] # BYZANTINE MUSICAL SYMBOL TELEIA -1D010 ; [*0FFE.0020.0002] # BYZANTINE MUSICAL SYMBOL KENTIMATA -1D011 ; [*0FFF.0020.0002] # BYZANTINE MUSICAL SYMBOL APOSTROFOS -1D012 ; [*1000.0020.0002] # BYZANTINE MUSICAL SYMBOL APOSTROFOS DIPLI -1D013 ; [*1001.0020.0002] # BYZANTINE MUSICAL SYMBOL SYNEVMA -1D014 ; [*1002.0020.0002] # BYZANTINE MUSICAL SYMBOL THITA -1D015 ; [*1003.0020.0002] # BYZANTINE MUSICAL SYMBOL OLIGON ARCHAION -1D016 ; [*1004.0020.0002] # BYZANTINE MUSICAL SYMBOL GORGON ARCHAION -1D017 ; [*1005.0020.0002] # BYZANTINE MUSICAL SYMBOL PSILON -1D018 ; [*1006.0020.0002] # BYZANTINE MUSICAL SYMBOL CHAMILON -1D019 ; [*1007.0020.0002] # BYZANTINE MUSICAL SYMBOL VATHY -1D01A ; [*1008.0020.0002] # BYZANTINE MUSICAL SYMBOL ISON ARCHAION -1D01B ; [*1009.0020.0002] # BYZANTINE MUSICAL SYMBOL KENTIMA ARCHAION -1D01C ; [*100A.0020.0002] # BYZANTINE MUSICAL SYMBOL KENTIMATA ARCHAION -1D01D ; [*100B.0020.0002] # BYZANTINE MUSICAL SYMBOL SAXIMATA -1D01E ; [*100C.0020.0002] # BYZANTINE MUSICAL SYMBOL PARICHON -1D01F ; [*100D.0020.0002] # BYZANTINE MUSICAL SYMBOL STAVROS APODEXIA -1D020 ; [*100E.0020.0002] # BYZANTINE MUSICAL SYMBOL OXEIAI ARCHAION -1D021 ; [*100F.0020.0002] # BYZANTINE MUSICAL SYMBOL VAREIAI ARCHAION -1D022 ; [*1010.0020.0002] # BYZANTINE MUSICAL SYMBOL APODERMA ARCHAION -1D023 ; [*1011.0020.0002] # BYZANTINE MUSICAL SYMBOL APOTHEMA -1D024 ; [*1012.0020.0002] # BYZANTINE MUSICAL SYMBOL KLASMA -1D025 ; [*1013.0020.0002] # BYZANTINE MUSICAL SYMBOL REVMA -1D026 ; [*1014.0020.0002] # BYZANTINE MUSICAL SYMBOL PIASMA ARCHAION -1D027 ; [*1015.0020.0002] # BYZANTINE MUSICAL SYMBOL TINAGMA -1D028 ; [*1016.0020.0002] # BYZANTINE MUSICAL SYMBOL ANATRICHISMA -1D029 ; [*1017.0020.0002] # BYZANTINE MUSICAL SYMBOL SEISMA -1D02A ; [*1018.0020.0002] # BYZANTINE MUSICAL SYMBOL SYNAGMA ARCHAION -1D02B ; [*1019.0020.0002] # BYZANTINE MUSICAL SYMBOL SYNAGMA META STAVROU -1D02C ; [*101A.0020.0002] # BYZANTINE MUSICAL SYMBOL OYRANISMA ARCHAION -1D02D ; [*101B.0020.0002] # BYZANTINE MUSICAL SYMBOL THEMA -1D02E ; [*101C.0020.0002] # BYZANTINE MUSICAL SYMBOL LEMOI -1D02F ; [*101D.0020.0002] # BYZANTINE MUSICAL SYMBOL DYO -1D030 ; [*101E.0020.0002] # BYZANTINE MUSICAL SYMBOL TRIA -1D031 ; [*101F.0020.0002] # BYZANTINE MUSICAL SYMBOL TESSERA -1D032 ; [*1020.0020.0002] # BYZANTINE MUSICAL SYMBOL KRATIMATA -1D033 ; [*1021.0020.0002] # BYZANTINE MUSICAL SYMBOL APESO EXO NEO -1D034 ; [*1022.0020.0002] # BYZANTINE MUSICAL SYMBOL FTHORA ARCHAION -1D035 ; [*1023.0020.0002] # BYZANTINE MUSICAL SYMBOL IMIFTHORA -1D036 ; [*1024.0020.0002] # BYZANTINE MUSICAL SYMBOL TROMIKON ARCHAION -1D037 ; [*1025.0020.0002] # BYZANTINE MUSICAL SYMBOL KATAVA TROMIKON -1D038 ; [*1026.0020.0002] # BYZANTINE MUSICAL SYMBOL PELASTON -1D039 ; [*1027.0020.0002] # BYZANTINE MUSICAL SYMBOL PSIFISTON -1D03A ; [*1028.0020.0002] # BYZANTINE MUSICAL SYMBOL KONTEVMA -1D03B ; [*1029.0020.0002] # BYZANTINE MUSICAL SYMBOL CHOREVMA ARCHAION -1D03C ; [*102A.0020.0002] # BYZANTINE MUSICAL SYMBOL RAPISMA -1D03D ; [*102B.0020.0002] # BYZANTINE MUSICAL SYMBOL PARAKALESMA ARCHAION -1D03E ; [*102C.0020.0002] # BYZANTINE MUSICAL SYMBOL PARAKLITIKI ARCHAION -1D03F ; [*102D.0020.0002] # BYZANTINE MUSICAL SYMBOL ICHADIN -1D040 ; [*102E.0020.0002] # BYZANTINE MUSICAL SYMBOL NANA -1D041 ; [*102F.0020.0002] # BYZANTINE MUSICAL SYMBOL PETASMA -1D042 ; [*1030.0020.0002] # BYZANTINE MUSICAL SYMBOL KONTEVMA ALLO -1D043 ; [*1031.0020.0002] # BYZANTINE MUSICAL SYMBOL TROMIKON ALLO -1D044 ; [*1032.0020.0002] # BYZANTINE MUSICAL SYMBOL STRAGGISMATA -1D045 ; [*1033.0020.0002] # BYZANTINE MUSICAL SYMBOL GRONTHISMATA -1D046 ; [*1034.0020.0002] # BYZANTINE MUSICAL SYMBOL ISON NEO -1D047 ; [*1035.0020.0002] # BYZANTINE MUSICAL SYMBOL OLIGON NEO -1D048 ; [*1036.0020.0002] # BYZANTINE MUSICAL SYMBOL OXEIA NEO -1D049 ; [*1037.0020.0002] # BYZANTINE MUSICAL SYMBOL PETASTI -1D04A ; [*1038.0020.0002] # BYZANTINE MUSICAL SYMBOL KOUFISMA -1D04B ; [*1039.0020.0002] # BYZANTINE MUSICAL SYMBOL PETASTOKOUFISMA -1D04C ; [*103A.0020.0002] # BYZANTINE MUSICAL SYMBOL KRATIMOKOUFISMA -1D04D ; [*103B.0020.0002] # BYZANTINE MUSICAL SYMBOL PELASTON NEO -1D04E ; [*103C.0020.0002] # BYZANTINE MUSICAL SYMBOL KENTIMATA NEO ANO -1D04F ; [*103D.0020.0002] # BYZANTINE MUSICAL SYMBOL KENTIMA NEO ANO -1D050 ; [*103E.0020.0002] # BYZANTINE MUSICAL SYMBOL YPSILI -1D051 ; [*103F.0020.0002] # BYZANTINE MUSICAL SYMBOL APOSTROFOS NEO -1D052 ; [*1040.0020.0002] # BYZANTINE MUSICAL SYMBOL APOSTROFOI SYNDESMOS NEO -1D053 ; [*1041.0020.0002] # BYZANTINE MUSICAL SYMBOL YPORROI -1D054 ; [*1042.0020.0002] # BYZANTINE MUSICAL SYMBOL KRATIMOYPORROON -1D055 ; [*1043.0020.0002] # BYZANTINE MUSICAL SYMBOL ELAFRON -1D056 ; [*1044.0020.0002] # BYZANTINE MUSICAL SYMBOL CHAMILI -1D057 ; [*1045.0020.0002] # BYZANTINE MUSICAL SYMBOL MIKRON ISON -1D058 ; [*1046.0020.0002] # BYZANTINE MUSICAL SYMBOL VAREIA NEO -1D059 ; [*1047.0020.0002] # BYZANTINE MUSICAL SYMBOL PIASMA NEO -1D05A ; [*1048.0020.0002] # BYZANTINE MUSICAL SYMBOL PSIFISTON NEO -1D05B ; [*1049.0020.0002] # BYZANTINE MUSICAL SYMBOL OMALON -1D05C ; [*104A.0020.0002] # BYZANTINE MUSICAL SYMBOL ANTIKENOMA -1D05D ; [*104B.0020.0002] # BYZANTINE MUSICAL SYMBOL LYGISMA -1D05E ; [*104C.0020.0002] # BYZANTINE MUSICAL SYMBOL PARAKLITIKI NEO -1D05F ; [*104D.0020.0002] # BYZANTINE MUSICAL SYMBOL PARAKALESMA NEO -1D060 ; [*104E.0020.0002] # BYZANTINE MUSICAL SYMBOL ETERON PARAKALESMA -1D061 ; [*104F.0020.0002] # BYZANTINE MUSICAL SYMBOL KYLISMA -1D062 ; [*1050.0020.0002] # BYZANTINE MUSICAL SYMBOL ANTIKENOKYLISMA -1D063 ; [*1051.0020.0002] # BYZANTINE MUSICAL SYMBOL TROMIKON NEO -1D064 ; [*1052.0020.0002] # BYZANTINE MUSICAL SYMBOL EKSTREPTON -1D065 ; [*1053.0020.0002] # BYZANTINE MUSICAL SYMBOL SYNAGMA NEO -1D066 ; [*1054.0020.0002] # BYZANTINE MUSICAL SYMBOL SYRMA -1D067 ; [*1055.0020.0002] # BYZANTINE MUSICAL SYMBOL CHOREVMA NEO -1D068 ; [*1056.0020.0002] # BYZANTINE MUSICAL SYMBOL EPEGERMA -1D069 ; [*1057.0020.0002] # BYZANTINE MUSICAL SYMBOL SEISMA NEO -1D06A ; [*1058.0020.0002] # BYZANTINE MUSICAL SYMBOL XIRON KLASMA -1D06B ; [*1059.0020.0002] # BYZANTINE MUSICAL SYMBOL TROMIKOPSIFISTON -1D06C ; [*105A.0020.0002] # BYZANTINE MUSICAL SYMBOL PSIFISTOLYGISMA -1D06D ; [*105B.0020.0002] # BYZANTINE MUSICAL SYMBOL TROMIKOLYGISMA -1D06E ; [*105C.0020.0002] # BYZANTINE MUSICAL SYMBOL TROMIKOPARAKALESMA -1D06F ; [*105D.0020.0002] # BYZANTINE MUSICAL SYMBOL PSIFISTOPARAKALESMA -1D070 ; [*105E.0020.0002] # BYZANTINE MUSICAL SYMBOL TROMIKOSYNAGMA -1D071 ; [*105F.0020.0002] # BYZANTINE MUSICAL SYMBOL PSIFISTOSYNAGMA -1D072 ; [*1060.0020.0002] # BYZANTINE MUSICAL SYMBOL GORGOSYNTHETON -1D073 ; [*1061.0020.0002] # BYZANTINE MUSICAL SYMBOL ARGOSYNTHETON -1D074 ; [*1062.0020.0002] # BYZANTINE MUSICAL SYMBOL ETERON ARGOSYNTHETON -1D075 ; [*1063.0020.0002] # BYZANTINE MUSICAL SYMBOL OYRANISMA NEO -1D076 ; [*1064.0020.0002] # BYZANTINE MUSICAL SYMBOL THEMATISMOS ESO -1D077 ; [*1065.0020.0002] # BYZANTINE MUSICAL SYMBOL THEMATISMOS EXO -1D078 ; [*1066.0020.0002] # BYZANTINE MUSICAL SYMBOL THEMA APLOUN -1D079 ; [*1067.0020.0002] # BYZANTINE MUSICAL SYMBOL THES KAI APOTHES -1D07A ; [*1068.0020.0002] # BYZANTINE MUSICAL SYMBOL KATAVASMA -1D07B ; [*1069.0020.0002] # BYZANTINE MUSICAL SYMBOL ENDOFONON -1D07C ; [*106A.0020.0002] # BYZANTINE MUSICAL SYMBOL YFEN KATO -1D07D ; [*106B.0020.0002] # BYZANTINE MUSICAL SYMBOL YFEN ANO -1D07E ; [*106C.0020.0002] # BYZANTINE MUSICAL SYMBOL STAVROS -1D07F ; [*106D.0020.0002] # BYZANTINE MUSICAL SYMBOL KLASMA ANO -1D080 ; [*106E.0020.0002] # BYZANTINE MUSICAL SYMBOL DIPLI ARCHAION -1D081 ; [*106F.0020.0002] # BYZANTINE MUSICAL SYMBOL KRATIMA ARCHAION -1D082 ; [*1070.0020.0002] # BYZANTINE MUSICAL SYMBOL KRATIMA ALLO -1D083 ; [*1071.0020.0002] # BYZANTINE MUSICAL SYMBOL KRATIMA NEO -1D084 ; [*1072.0020.0002] # BYZANTINE MUSICAL SYMBOL APODERMA NEO -1D085 ; [*1073.0020.0002] # BYZANTINE MUSICAL SYMBOL APLI -1D086 ; [*1074.0020.0002] # BYZANTINE MUSICAL SYMBOL DIPLI -1D087 ; [*1075.0020.0002] # BYZANTINE MUSICAL SYMBOL TRIPLI -1D088 ; [*1076.0020.0002] # BYZANTINE MUSICAL SYMBOL TETRAPLI -1D089 ; [*1077.0020.0002] # BYZANTINE MUSICAL SYMBOL KORONIS -1D08A ; [*1078.0020.0002] # BYZANTINE MUSICAL SYMBOL LEIMMA ENOS CHRONOU -1D08B ; [*1079.0020.0002] # BYZANTINE MUSICAL SYMBOL LEIMMA DYO CHRONON -1D08C ; [*107A.0020.0002] # BYZANTINE MUSICAL SYMBOL LEIMMA TRION CHRONON -1D08D ; [*107B.0020.0002] # BYZANTINE MUSICAL SYMBOL LEIMMA TESSARON CHRONON -1D08E ; [*107C.0020.0002] # BYZANTINE MUSICAL SYMBOL LEIMMA IMISEOS CHRONOU -1D08F ; [*107D.0020.0002] # BYZANTINE MUSICAL SYMBOL GORGON NEO ANO -1D090 ; [*107E.0020.0002] # BYZANTINE MUSICAL SYMBOL GORGON PARESTIGMENON ARISTERA -1D091 ; [*107F.0020.0002] # BYZANTINE MUSICAL SYMBOL GORGON PARESTIGMENON DEXIA -1D092 ; [*1080.0020.0002] # BYZANTINE MUSICAL SYMBOL DIGORGON -1D093 ; [*1081.0020.0002] # BYZANTINE MUSICAL SYMBOL DIGORGON PARESTIGMENON ARISTERA KATO -1D094 ; [*1082.0020.0002] # BYZANTINE MUSICAL SYMBOL DIGORGON PARESTIGMENON ARISTERA ANO -1D095 ; [*1083.0020.0002] # BYZANTINE MUSICAL SYMBOL DIGORGON PARESTIGMENON DEXIA -1D096 ; [*1084.0020.0002] # BYZANTINE MUSICAL SYMBOL TRIGORGON -1D097 ; [*1085.0020.0002] # BYZANTINE MUSICAL SYMBOL ARGON -1D098 ; [*1086.0020.0002] # BYZANTINE MUSICAL SYMBOL IMIDIARGON -1D099 ; [*1087.0020.0002] # BYZANTINE MUSICAL SYMBOL DIARGON -1D09A ; [*1088.0020.0002] # BYZANTINE MUSICAL SYMBOL AGOGI POLI ARGI -1D09B ; [*1089.0020.0002] # BYZANTINE MUSICAL SYMBOL AGOGI ARGOTERI -1D09C ; [*108A.0020.0002] # BYZANTINE MUSICAL SYMBOL AGOGI ARGI -1D09D ; [*108B.0020.0002] # BYZANTINE MUSICAL SYMBOL AGOGI METRIA -1D09E ; [*108C.0020.0002] # BYZANTINE MUSICAL SYMBOL AGOGI MESI -1D09F ; [*108D.0020.0002] # BYZANTINE MUSICAL SYMBOL AGOGI GORGI -1D0A0 ; [*108E.0020.0002] # BYZANTINE MUSICAL SYMBOL AGOGI GORGOTERI -1D0A1 ; [*108F.0020.0002] # BYZANTINE MUSICAL SYMBOL AGOGI POLI GORGI -1D0A2 ; [*1090.0020.0002] # BYZANTINE MUSICAL SYMBOL MARTYRIA PROTOS ICHOS -1D0A3 ; [*1091.0020.0002] # BYZANTINE MUSICAL SYMBOL MARTYRIA ALLI PROTOS ICHOS -1D0A4 ; [*1092.0020.0002] # BYZANTINE MUSICAL SYMBOL MARTYRIA DEYTEROS ICHOS -1D0A5 ; [*1093.0020.0002] # BYZANTINE MUSICAL SYMBOL MARTYRIA ALLI DEYTEROS ICHOS -1D0A6 ; [*1094.0020.0002] # BYZANTINE MUSICAL SYMBOL MARTYRIA TRITOS ICHOS -1D0A7 ; [*1095.0020.0002] # BYZANTINE MUSICAL SYMBOL MARTYRIA TRIFONIAS -1D0A8 ; [*1096.0020.0002] # BYZANTINE MUSICAL SYMBOL MARTYRIA TETARTOS ICHOS -1D0A9 ; [*1097.0020.0002] # BYZANTINE MUSICAL SYMBOL MARTYRIA TETARTOS LEGETOS ICHOS -1D0AA ; [*1098.0020.0002] # BYZANTINE MUSICAL SYMBOL MARTYRIA LEGETOS ICHOS -1D0AB ; [*1099.0020.0002] # BYZANTINE MUSICAL SYMBOL MARTYRIA PLAGIOS ICHOS -1D0AC ; [*109A.0020.0002] # BYZANTINE MUSICAL SYMBOL ISAKIA TELOUS ICHIMATOS -1D0AD ; [*109B.0020.0002] # BYZANTINE MUSICAL SYMBOL APOSTROFOI TELOUS ICHIMATOS -1D0AE ; [*109C.0020.0002] # BYZANTINE MUSICAL SYMBOL FANEROSIS TETRAFONIAS -1D0AF ; [*109D.0020.0002] # BYZANTINE MUSICAL SYMBOL FANEROSIS MONOFONIAS -1D0B0 ; [*109E.0020.0002] # BYZANTINE MUSICAL SYMBOL FANEROSIS DIFONIAS -1D0B1 ; [*109F.0020.0002] # BYZANTINE MUSICAL SYMBOL MARTYRIA VARYS ICHOS -1D0B2 ; [*10A0.0020.0002] # BYZANTINE MUSICAL SYMBOL MARTYRIA PROTOVARYS ICHOS -1D0B3 ; [*10A1.0020.0002] # BYZANTINE MUSICAL SYMBOL MARTYRIA PLAGIOS TETARTOS ICHOS -1D0B4 ; [*10A2.0020.0002] # BYZANTINE MUSICAL SYMBOL GORTHMIKON N APLOUN -1D0B5 ; [*10A3.0020.0002] # BYZANTINE MUSICAL SYMBOL GORTHMIKON N DIPLOUN -1D0B6 ; [*10A4.0020.0002] # BYZANTINE MUSICAL SYMBOL ENARXIS KAI FTHORA VOU -1D0B7 ; [*10A5.0020.0002] # BYZANTINE MUSICAL SYMBOL IMIFONON -1D0B8 ; [*10A6.0020.0002] # BYZANTINE MUSICAL SYMBOL IMIFTHORON -1D0B9 ; [*10A7.0020.0002] # BYZANTINE MUSICAL SYMBOL FTHORA ARCHAION DEYTEROU ICHOU -1D0BA ; [*10A8.0020.0002] # BYZANTINE MUSICAL SYMBOL FTHORA DIATONIKI PA -1D0BB ; [*10A9.0020.0002] # BYZANTINE MUSICAL SYMBOL FTHORA DIATONIKI NANA -1D0BC ; [*10AA.0020.0002] # BYZANTINE MUSICAL SYMBOL FTHORA NAOS ICHOS -1D0BD ; [*10AB.0020.0002] # BYZANTINE MUSICAL SYMBOL FTHORA DIATONIKI DI -1D0BE ; [*10AC.0020.0002] # BYZANTINE MUSICAL SYMBOL FTHORA SKLIRON DIATONON DI -1D0BF ; [*10AD.0020.0002] # BYZANTINE MUSICAL SYMBOL FTHORA DIATONIKI KE -1D0C0 ; [*10AE.0020.0002] # BYZANTINE MUSICAL SYMBOL FTHORA DIATONIKI ZO -1D0C1 ; [*10AF.0020.0002] # BYZANTINE MUSICAL SYMBOL FTHORA DIATONIKI NI KATO -1D0C2 ; [*10B0.0020.0002] # BYZANTINE MUSICAL SYMBOL FTHORA DIATONIKI NI ANO -1D0C3 ; [*10B1.0020.0002] # BYZANTINE MUSICAL SYMBOL FTHORA MALAKON CHROMA DIFONIAS -1D0C4 ; [*10B2.0020.0002] # BYZANTINE MUSICAL SYMBOL FTHORA MALAKON CHROMA MONOFONIAS -1D0C5 ; [*10B3.0020.0002] # BYZANTINE MUSICAL SYMBOL FHTORA SKLIRON CHROMA VASIS -1D0C6 ; [*10B4.0020.0002] # BYZANTINE MUSICAL SYMBOL FTHORA SKLIRON CHROMA SYNAFI -1D0C7 ; [*10B5.0020.0002] # BYZANTINE MUSICAL SYMBOL FTHORA NENANO -1D0C8 ; [*10B6.0020.0002] # BYZANTINE MUSICAL SYMBOL CHROA ZYGOS -1D0C9 ; [*10B7.0020.0002] # BYZANTINE MUSICAL SYMBOL CHROA KLITON -1D0CA ; [*10B8.0020.0002] # BYZANTINE MUSICAL SYMBOL CHROA SPATHI -1D0CB ; [*10B9.0020.0002] # BYZANTINE MUSICAL SYMBOL FTHORA I YFESIS TETARTIMORION -1D0CC ; [*10BA.0020.0002] # BYZANTINE MUSICAL SYMBOL FTHORA ENARMONIOS ANTIFONIA -1D0CD ; [*10BB.0020.0002] # BYZANTINE MUSICAL SYMBOL YFESIS TRITIMORION -1D0CE ; [*10BC.0020.0002] # BYZANTINE MUSICAL SYMBOL DIESIS TRITIMORION -1D0CF ; [*10BD.0020.0002] # BYZANTINE MUSICAL SYMBOL DIESIS TETARTIMORION -1D0D0 ; [*10BE.0020.0002] # BYZANTINE MUSICAL SYMBOL DIESIS APLI DYO DODEKATA -1D0D1 ; [*10BF.0020.0002] # BYZANTINE MUSICAL SYMBOL DIESIS MONOGRAMMOS TESSERA DODEKATA -1D0D2 ; [*10C0.0020.0002] # BYZANTINE MUSICAL SYMBOL DIESIS DIGRAMMOS EX DODEKATA -1D0D3 ; [*10C1.0020.0002] # BYZANTINE MUSICAL SYMBOL DIESIS TRIGRAMMOS OKTO DODEKATA -1D0D4 ; [*10C2.0020.0002] # BYZANTINE MUSICAL SYMBOL YFESIS APLI DYO DODEKATA -1D0D5 ; [*10C3.0020.0002] # BYZANTINE MUSICAL SYMBOL YFESIS MONOGRAMMOS TESSERA DODEKATA -1D0D6 ; [*10C4.0020.0002] # BYZANTINE MUSICAL SYMBOL YFESIS DIGRAMMOS EX DODEKATA -1D0D7 ; [*10C5.0020.0002] # BYZANTINE MUSICAL SYMBOL YFESIS TRIGRAMMOS OKTO DODEKATA -1D0D8 ; [*10C6.0020.0002] # BYZANTINE MUSICAL SYMBOL GENIKI DIESIS -1D0D9 ; [*10C7.0020.0002] # BYZANTINE MUSICAL SYMBOL GENIKI YFESIS -1D0DA ; [*10C8.0020.0002] # BYZANTINE MUSICAL SYMBOL DIASTOLI APLI MIKRI -1D0DB ; [*10C9.0020.0002] # BYZANTINE MUSICAL SYMBOL DIASTOLI APLI MEGALI -1D0DC ; [*10CA.0020.0002] # BYZANTINE MUSICAL SYMBOL DIASTOLI DIPLI -1D0DD ; [*10CB.0020.0002] # BYZANTINE MUSICAL SYMBOL DIASTOLI THESEOS -1D0DE ; [*10CC.0020.0002] # BYZANTINE MUSICAL SYMBOL SIMANSIS THESEOS -1D0DF ; [*10CD.0020.0002] # BYZANTINE MUSICAL SYMBOL SIMANSIS THESEOS DISIMOU -1D0E0 ; [*10CE.0020.0002] # BYZANTINE MUSICAL SYMBOL SIMANSIS THESEOS TRISIMOU -1D0E1 ; [*10CF.0020.0002] # BYZANTINE MUSICAL SYMBOL SIMANSIS THESEOS TETRASIMOU -1D0E2 ; [*10D0.0020.0002] # BYZANTINE MUSICAL SYMBOL SIMANSIS ARSEOS -1D0E3 ; [*10D1.0020.0002] # BYZANTINE MUSICAL SYMBOL SIMANSIS ARSEOS DISIMOU -1D0E4 ; [*10D2.0020.0002] # BYZANTINE MUSICAL SYMBOL SIMANSIS ARSEOS TRISIMOU -1D0E5 ; [*10D3.0020.0002] # BYZANTINE MUSICAL SYMBOL SIMANSIS ARSEOS TETRASIMOU -1D0E6 ; [*10D4.0020.0002] # BYZANTINE MUSICAL SYMBOL DIGRAMMA GG -1D0E7 ; [*10D5.0020.0002] # BYZANTINE MUSICAL SYMBOL DIFTOGGOS OU -1D0E8 ; [*10D6.0020.0002] # BYZANTINE MUSICAL SYMBOL STIGMA -1D0E9 ; [*10D7.0020.0002] # BYZANTINE MUSICAL SYMBOL ARKTIKO PA -1D0EA ; [*10D8.0020.0002] # BYZANTINE MUSICAL SYMBOL ARKTIKO VOU -1D0EB ; [*10D9.0020.0002] # BYZANTINE MUSICAL SYMBOL ARKTIKO GA -1D0EC ; [*10DA.0020.0002] # BYZANTINE MUSICAL SYMBOL ARKTIKO DI -1D0ED ; [*10DB.0020.0002] # BYZANTINE MUSICAL SYMBOL ARKTIKO KE -1D0EE ; [*10DC.0020.0002] # BYZANTINE MUSICAL SYMBOL ARKTIKO ZO -1D0EF ; [*10DD.0020.0002] # BYZANTINE MUSICAL SYMBOL ARKTIKO NI -1D0F0 ; [*10DE.0020.0002] # BYZANTINE MUSICAL SYMBOL KENTIMATA NEO MESO -1D0F1 ; [*10DF.0020.0002] # BYZANTINE MUSICAL SYMBOL KENTIMA NEO MESO -1D0F2 ; [*10E0.0020.0002] # BYZANTINE MUSICAL SYMBOL KENTIMATA NEO KATO -1D0F3 ; [*10E1.0020.0002] # BYZANTINE MUSICAL SYMBOL KENTIMA NEO KATO -1D0F4 ; [*10E2.0020.0002] # BYZANTINE MUSICAL SYMBOL KLASMA KATO -1D0F5 ; [*10E3.0020.0002] # BYZANTINE MUSICAL SYMBOL GORGON NEO KATO -1D100 ; [*10E4.0020.0002] # MUSICAL SYMBOL SINGLE BARLINE -1D101 ; [*10E5.0020.0002] # MUSICAL SYMBOL DOUBLE BARLINE -1D102 ; [*10E6.0020.0002] # MUSICAL SYMBOL FINAL BARLINE -1D103 ; [*10E7.0020.0002] # MUSICAL SYMBOL REVERSE FINAL BARLINE -1D104 ; [*10E8.0020.0002] # MUSICAL SYMBOL DASHED BARLINE -1D105 ; [*10E9.0020.0002] # MUSICAL SYMBOL SHORT BARLINE -1D106 ; [*10EA.0020.0002] # MUSICAL SYMBOL LEFT REPEAT SIGN -1D107 ; [*10EB.0020.0002] # MUSICAL SYMBOL RIGHT REPEAT SIGN -1D108 ; [*10EC.0020.0002] # MUSICAL SYMBOL REPEAT DOTS -1D109 ; [*10ED.0020.0002] # MUSICAL SYMBOL DAL SEGNO -1D10A ; [*10EE.0020.0002] # MUSICAL SYMBOL DA CAPO -1D10B ; [*10EF.0020.0002] # MUSICAL SYMBOL SEGNO -1D10C ; [*10F0.0020.0002] # MUSICAL SYMBOL CODA -1D10D ; [*10F1.0020.0002] # MUSICAL SYMBOL REPEATED FIGURE-1 -1D10E ; [*10F2.0020.0002] # MUSICAL SYMBOL REPEATED FIGURE-2 -1D10F ; [*10F3.0020.0002] # MUSICAL SYMBOL REPEATED FIGURE-3 -1D110 ; [*10F4.0020.0002] # MUSICAL SYMBOL FERMATA -1D111 ; [*10F5.0020.0002] # MUSICAL SYMBOL FERMATA BELOW -1D112 ; [*10F6.0020.0002] # MUSICAL SYMBOL BREATH MARK -1D113 ; [*10F7.0020.0002] # MUSICAL SYMBOL CAESURA -1D114 ; [*10F8.0020.0002] # MUSICAL SYMBOL BRACE -1D115 ; [*10F9.0020.0002] # MUSICAL SYMBOL BRACKET -1D116 ; [*10FA.0020.0002] # MUSICAL SYMBOL ONE-LINE STAFF -1D117 ; [*10FB.0020.0002] # MUSICAL SYMBOL TWO-LINE STAFF -1D118 ; [*10FC.0020.0002] # MUSICAL SYMBOL THREE-LINE STAFF -1D119 ; [*10FD.0020.0002] # MUSICAL SYMBOL FOUR-LINE STAFF -1D11A ; [*10FE.0020.0002] # MUSICAL SYMBOL FIVE-LINE STAFF -1D11B ; [*10FF.0020.0002] # MUSICAL SYMBOL SIX-LINE STAFF -1D11C ; [*1100.0020.0002] # MUSICAL SYMBOL SIX-STRING FRETBOARD -1D11D ; [*1101.0020.0002] # MUSICAL SYMBOL FOUR-STRING FRETBOARD -1D11E ; [*1102.0020.0002] # MUSICAL SYMBOL G CLEF -1D11F ; [*1103.0020.0002] # MUSICAL SYMBOL G CLEF OTTAVA ALTA -1D120 ; [*1104.0020.0002] # MUSICAL SYMBOL G CLEF OTTAVA BASSA -1D121 ; [*1105.0020.0002] # MUSICAL SYMBOL C CLEF -1D122 ; [*1106.0020.0002] # MUSICAL SYMBOL F CLEF -1D123 ; [*1107.0020.0002] # MUSICAL SYMBOL F CLEF OTTAVA ALTA -1D124 ; [*1108.0020.0002] # MUSICAL SYMBOL F CLEF OTTAVA BASSA -1D125 ; [*1109.0020.0002] # MUSICAL SYMBOL DRUM CLEF-1 -1D126 ; [*110A.0020.0002] # MUSICAL SYMBOL DRUM CLEF-2 -1D129 ; [*111E.0020.0002] # MUSICAL SYMBOL MULTIPLE MEASURE REST -1D12A ; [*110E.0020.0002] # MUSICAL SYMBOL DOUBLE SHARP -1D12B ; [*110F.0020.0002] # MUSICAL SYMBOL DOUBLE FLAT -1D12C ; [*1110.0020.0002] # MUSICAL SYMBOL FLAT UP -1D12D ; [*1111.0020.0002] # MUSICAL SYMBOL FLAT DOWN -1D12E ; [*1112.0020.0002] # MUSICAL SYMBOL NATURAL UP -1D12F ; [*1113.0020.0002] # MUSICAL SYMBOL NATURAL DOWN -1D130 ; [*1114.0020.0002] # MUSICAL SYMBOL SHARP UP -1D131 ; [*1115.0020.0002] # MUSICAL SYMBOL SHARP DOWN -1D132 ; [*1116.0020.0002] # MUSICAL SYMBOL QUARTER TONE SHARP -1D133 ; [*1117.0020.0002] # MUSICAL SYMBOL QUARTER TONE FLAT -1D134 ; [*1118.0020.0002] # MUSICAL SYMBOL COMMON TIME -1D135 ; [*1119.0020.0002] # MUSICAL SYMBOL CUT TIME -1D136 ; [*111A.0020.0002] # MUSICAL SYMBOL OTTAVA ALTA -1D137 ; [*111B.0020.0002] # MUSICAL SYMBOL OTTAVA BASSA -1D138 ; [*111C.0020.0002] # MUSICAL SYMBOL QUINDICESIMA ALTA -1D139 ; [*111D.0020.0002] # MUSICAL SYMBOL QUINDICESIMA BASSA -1D13A ; [*111F.0020.0002] # MUSICAL SYMBOL MULTI REST -1D13B ; [*1120.0020.0002] # MUSICAL SYMBOL WHOLE REST -1D13C ; [*1121.0020.0002] # MUSICAL SYMBOL HALF REST -1D13D ; [*1122.0020.0002] # MUSICAL SYMBOL QUARTER REST -1D13E ; [*1123.0020.0002] # MUSICAL SYMBOL EIGHTH REST -1D13F ; [*1124.0020.0002] # MUSICAL SYMBOL SIXTEENTH REST -1D140 ; [*1125.0020.0002] # MUSICAL SYMBOL THIRTY-SECOND REST -1D141 ; [*1126.0020.0002] # MUSICAL SYMBOL SIXTY-FOURTH REST -1D142 ; [*1127.0020.0002] # MUSICAL SYMBOL ONE HUNDRED TWENTY-EIGHTH REST -1D143 ; [*1128.0020.0002] # MUSICAL SYMBOL X NOTEHEAD -1D144 ; [*1129.0020.0002] # MUSICAL SYMBOL PLUS NOTEHEAD -1D145 ; [*112A.0020.0002] # MUSICAL SYMBOL CIRCLE X NOTEHEAD -1D146 ; [*112B.0020.0002] # MUSICAL SYMBOL SQUARE NOTEHEAD WHITE -1D147 ; [*112C.0020.0002] # MUSICAL SYMBOL SQUARE NOTEHEAD BLACK -1D148 ; [*112D.0020.0002] # MUSICAL SYMBOL TRIANGLE NOTEHEAD UP WHITE -1D149 ; [*112E.0020.0002] # MUSICAL SYMBOL TRIANGLE NOTEHEAD UP BLACK -1D14A ; [*112F.0020.0002] # MUSICAL SYMBOL TRIANGLE NOTEHEAD LEFT WHITE -1D14B ; [*1130.0020.0002] # MUSICAL SYMBOL TRIANGLE NOTEHEAD LEFT BLACK -1D14C ; [*1131.0020.0002] # MUSICAL SYMBOL TRIANGLE NOTEHEAD RIGHT WHITE -1D14D ; [*1132.0020.0002] # MUSICAL SYMBOL TRIANGLE NOTEHEAD RIGHT BLACK -1D14E ; [*1133.0020.0002] # MUSICAL SYMBOL TRIANGLE NOTEHEAD DOWN WHITE -1D14F ; [*1134.0020.0002] # MUSICAL SYMBOL TRIANGLE NOTEHEAD DOWN BLACK -1D150 ; [*1135.0020.0002] # MUSICAL SYMBOL TRIANGLE NOTEHEAD UP RIGHT WHITE -1D151 ; [*1136.0020.0002] # MUSICAL SYMBOL TRIANGLE NOTEHEAD UP RIGHT BLACK -1D152 ; [*1137.0020.0002] # MUSICAL SYMBOL MOON NOTEHEAD WHITE -1D153 ; [*1138.0020.0002] # MUSICAL SYMBOL MOON NOTEHEAD BLACK -1D154 ; [*1139.0020.0002] # MUSICAL SYMBOL TRIANGLE-ROUND NOTEHEAD DOWN WHITE -1D155 ; [*113A.0020.0002] # MUSICAL SYMBOL TRIANGLE-ROUND NOTEHEAD DOWN BLACK -1D156 ; [*113B.0020.0002] # MUSICAL SYMBOL PARENTHESIS NOTEHEAD -1D157 ; [*113C.0020.0002] # MUSICAL SYMBOL VOID NOTEHEAD -1D158 ; [*113D.0020.0002] # MUSICAL SYMBOL NOTEHEAD BLACK -1D159 ; [*113E.0020.0002] # MUSICAL SYMBOL NULL NOTEHEAD -1D15A ; [*113F.0020.0002] # MUSICAL SYMBOL CLUSTER NOTEHEAD WHITE -1D15B ; [*1140.0020.0002] # MUSICAL SYMBOL CLUSTER NOTEHEAD BLACK -1D15C ; [*1141.0020.0002] # MUSICAL SYMBOL BREVE -1D15D ; [*1142.0020.0002] # MUSICAL SYMBOL WHOLE NOTE -1D15E ; [*113C.0020.0002][.0000.0000.0000] # MUSICAL SYMBOL HALF NOTE -1D15F ; [*113D.0020.0002][.0000.0000.0000] # MUSICAL SYMBOL QUARTER NOTE -1D160 ; [*113D.0020.0002][.0000.0000.0000][.0000.0000.0000] # MUSICAL SYMBOL EIGHTH NOTE -1D161 ; [*113D.0020.0002][.0000.0000.0000][.0000.0000.0000] # MUSICAL SYMBOL SIXTEENTH NOTE -1D162 ; [*113D.0020.0002][.0000.0000.0000][.0000.0000.0000] # MUSICAL SYMBOL THIRTY-SECOND NOTE -1D163 ; [*113D.0020.0002][.0000.0000.0000][.0000.0000.0000] # MUSICAL SYMBOL SIXTY-FOURTH NOTE -1D164 ; [*113D.0020.0002][.0000.0000.0000][.0000.0000.0000] # MUSICAL SYMBOL ONE HUNDRED TWENTY-EIGHTH NOTE +1144B ; [*02BE.0020.0002] # NEWA DANDA +1144C ; [*02BF.0020.0002] # NEWA DOUBLE DANDA +1144D ; [*0486.0020.0002] # NEWA COMMA +1144E ; [*0488.0020.0002] # NEWA GAP FILLER +1144F ; [*0489.0020.0002] # NEWA ABBREVIATION SIGN +1145A ; [*0487.0020.0002] # NEWA DOUBLE COMMA +1145B ; [*048A.0020.0002] # NEWA PLACEHOLDER MARK +1145D ; [*048B.0020.0002] # NEWA INSERTION SIGN +114C6 ; [*048C.0020.0002] # TIRHUTA ABBREVIATION SIGN +115C1 ; [*048D.0020.0002] # SIDDHAM SIGN SIDDHAM +115C2 ; [*02C0.0020.0002] # SIDDHAM DANDA +115C3 ; [*02C1.0020.0002] # SIDDHAM DOUBLE DANDA +115C4 ; [*048E.0020.0002] # SIDDHAM SEPARATOR DOT +115C5 ; [*048F.0020.0002] # SIDDHAM SEPARATOR BAR +115C6 ; [*0490.0020.0002] # SIDDHAM REPETITION MARK-1 +115C7 ; [*0491.0020.0002] # SIDDHAM REPETITION MARK-2 +115C8 ; [*0492.0020.0002] # SIDDHAM REPETITION MARK-3 +115C9 ; [*0493.0020.0002] # SIDDHAM END OF TEXT MARK +115CA ; [*0494.0020.0002] # SIDDHAM SECTION MARK WITH TRIDENT AND U-SHAPED ORNAMENTS +115CB ; [*0495.0020.0002] # SIDDHAM SECTION MARK WITH TRIDENT AND DOTTED CRESCENTS +115CC ; [*0496.0020.0002] # SIDDHAM SECTION MARK WITH RAYS AND DOTTED CRESCENTS +115CD ; [*0497.0020.0002] # SIDDHAM SECTION MARK WITH RAYS AND DOTTED DOUBLE CRESCENTS +115CE ; [*0498.0020.0002] # SIDDHAM SECTION MARK WITH RAYS AND DOTTED TRIPLE CRESCENTS +115CF ; [*0499.0020.0002] # SIDDHAM SECTION MARK DOUBLE RING +115D0 ; [*049A.0020.0002] # SIDDHAM SECTION MARK DOUBLE RING WITH RAYS +115D1 ; [*049B.0020.0002] # SIDDHAM SECTION MARK WITH DOUBLE CRESCENTS +115D2 ; [*049C.0020.0002] # SIDDHAM SECTION MARK WITH TRIPLE CRESCENTS +115D3 ; [*049D.0020.0002] # SIDDHAM SECTION MARK WITH QUADRUPLE CRESCENTS +115D4 ; [*049E.0020.0002] # SIDDHAM SECTION MARK WITH SEPTUPLE CRESCENTS +115D5 ; [*049F.0020.0002] # SIDDHAM SECTION MARK WITH CIRCLES AND RAYS +115D6 ; [*04A0.0020.0002] # SIDDHAM SECTION MARK WITH CIRCLES AND TWO ENCLOSURES +115D7 ; [*04A1.0020.0002] # SIDDHAM SECTION MARK WITH CIRCLES AND FOUR ENCLOSURES +11641 ; [*02C2.0020.0002] # MODI DANDA +11642 ; [*02C3.0020.0002] # MODI DOUBLE DANDA +11643 ; [*04A2.0020.0002] # MODI ABBREVIATION SIGN +11660 ; [*03F3.0020.0002] # MONGOLIAN BIRGA WITH ORNAMENT +11661 ; [*03F4.0020.0002] # MONGOLIAN ROTATED BIRGA +11662 ; [*03F5.0020.0002] # MONGOLIAN DOUBLE BIRGA WITH ORNAMENT +11663 ; [*03F6.0020.0002] # MONGOLIAN TRIPLE BIRGA WITH ORNAMENT +11664 ; [*03F7.0020.0002] # MONGOLIAN BIRGA WITH DOUBLE ORNAMENT +11665 ; [*03F8.0020.0002] # MONGOLIAN ROTATED BIRGA WITH ORNAMENT +11666 ; [*03F9.0020.0002] # MONGOLIAN ROTATED BIRGA WITH DOUBLE ORNAMENT +11667 ; [*03FA.0020.0002] # MONGOLIAN INVERTED BIRGA +11668 ; [*03FB.0020.0002] # MONGOLIAN INVERTED BIRGA WITH DOUBLE ORNAMENT +11669 ; [*03FC.0020.0002] # MONGOLIAN SWIRL BIRGA +1166A ; [*03FD.0020.0002] # MONGOLIAN SWIRL BIRGA WITH ORNAMENT +1166B ; [*03FE.0020.0002] # MONGOLIAN SWIRL BIRGA WITH DOUBLE ORNAMENT +1166C ; [*03FF.0020.0002] # MONGOLIAN TURNED SWIRL BIRGA WITH DOUBLE ORNAMENT +1173A ; [*1E51.0020.0002] # AHOM NUMBER TEN +1173B ; [*1E52.0020.0002] # AHOM NUMBER TWENTY +1173C ; [*02C4.0020.0002] # AHOM SIGN SMALL SECTION +1173D ; [*02C5.0020.0002] # AHOM SIGN SECTION +1173E ; [*02F5.0020.0002] # AHOM SIGN RULAI +1173F ; [*059E.0020.0002] # AHOM SYMBOL VI +1183B ; [*04A3.0020.0002] # DOGRA ABBREVIATION SIGN +118EA ; [*1E78.0020.0002] # WARANG CITI NUMBER TEN +118EB ; [*1E79.0020.0002] # WARANG CITI NUMBER TWENTY +118EC ; [*1E7A.0020.0002] # WARANG CITI NUMBER THIRTY +118ED ; [*1E7B.0020.0002] # WARANG CITI NUMBER FORTY +118EE ; [*1E7C.0020.0002] # WARANG CITI NUMBER FIFTY +118EF ; [*1E7D.0020.0002] # WARANG CITI NUMBER SIXTY +118F0 ; [*1E7E.0020.0002] # WARANG CITI NUMBER SEVENTY +118F1 ; [*1E7F.0020.0002] # WARANG CITI NUMBER EIGHTY +118F2 ; [*1E80.0020.0002] # WARANG CITI NUMBER NINETY +11944 ; [*02C6.0020.0002] # DIVES AKURU DOUBLE DANDA +11945 ; [*04A4.0020.0002] # DIVES AKURU GAP FILLER +11946 ; [*02F6.0020.0002] # DIVES AKURU END OF TEXT MARK +119E2 ; [*04A5.0020.0002] # NANDINAGARI SIGN SIDDHAM +11A3F ; [*0426.0020.0002] # ZANABAZAR SQUARE INITIAL HEAD MARK +11A40 ; [*0427.0020.0002] # ZANABAZAR SQUARE CLOSING HEAD MARK +11A41 ; [*0428.0020.0002] # ZANABAZAR SQUARE MARK TSHEG +11A42 ; [*0429.0020.0002] # ZANABAZAR SQUARE MARK SHAD +11A43 ; [*042A.0020.0002] # ZANABAZAR SQUARE MARK DOUBLE SHAD +11A44 ; [*042B.0020.0002] # ZANABAZAR SQUARE MARK LONG TSHEG +11A45 ; [*042C.0020.0002] # ZANABAZAR SQUARE INITIAL DOUBLE-LINED HEAD MARK +11A46 ; [*042D.0020.0002] # ZANABAZAR SQUARE CLOSING DOUBLE-LINED HEAD MARK +11A9A ; [*042E.0020.0002] # SOYOMBO MARK TSHEG +11A9B ; [*042F.0020.0002] # SOYOMBO MARK SHAD +11A9C ; [*0430.0020.0002] # SOYOMBO MARK DOUBLE SHAD +11A9E ; [*0431.0020.0002] # SOYOMBO HEAD MARK WITH MOON AND SUN AND TRIPLE FLAME +11A9F ; [*0432.0020.0002] # SOYOMBO HEAD MARK WITH MOON AND SUN AND FLAME +11AA0 ; [*0433.0020.0002] # SOYOMBO HEAD MARK WITH MOON AND SUN +11AA1 ; [*0434.0020.0002] # SOYOMBO TERMINAL MARK-1 +11AA2 ; [*0435.0020.0002] # SOYOMBO TERMINAL MARK-2 +11C41 ; [*02C7.0020.0002] # BHAIKSUKI DANDA +11C42 ; [*02C8.0020.0002] # BHAIKSUKI DOUBLE DANDA +11C43 ; [*046B.0020.0002] # BHAIKSUKI WORD SEPARATOR +11C44 ; [*046C.0020.0002] # BHAIKSUKI GAP FILLER-1 +11C45 ; [*046D.0020.0002] # BHAIKSUKI GAP FILLER-2 +11C63 ; [*1E63.0020.0002] # BHAIKSUKI NUMBER TEN +11C64 ; [*1E64.0020.0002] # BHAIKSUKI NUMBER TWENTY +11C65 ; [*1E65.0020.0002] # BHAIKSUKI NUMBER THIRTY +11C66 ; [*1E66.0020.0002] # BHAIKSUKI NUMBER FORTY +11C67 ; [*1E67.0020.0002] # BHAIKSUKI NUMBER FIFTY +11C68 ; [*1E68.0020.0002] # BHAIKSUKI NUMBER SIXTY +11C69 ; [*1E69.0020.0002] # BHAIKSUKI NUMBER SEVENTY +11C6A ; [*1E6A.0020.0002] # BHAIKSUKI NUMBER EIGHTY +11C6B ; [*1E6B.0020.0002] # BHAIKSUKI NUMBER NINETY +11C6C ; [*1E6C.0020.0002] # BHAIKSUKI HUNDREDS UNIT MARK +11C70 ; [*0436.0020.0002] # MARCHEN HEAD MARK +11C71 ; [*0437.0020.0002] # MARCHEN MARK SHAD +11EF7 ; [*02F7.0020.0002] # MAKASAR PASSIMBANG +11EF8 ; [*02F8.0020.0002] # MAKASAR END OF SECTION +11FC0 ; [*1D6B.0020.0002] # TAMIL FRACTION ONE THREE-HUNDRED-AND-TWENTIETH +11FC1 ; [*1D6C.0020.0002] # TAMIL FRACTION ONE ONE-HUNDRED-AND-SIXTIETH +11FC2 ; [*1D6D.0020.0002] # TAMIL FRACTION ONE EIGHTIETH +11FC3 ; [*1D6E.0020.0002] # TAMIL FRACTION ONE SIXTY-FOURTH +11FC4 ; [*1D6F.0020.0002] # TAMIL FRACTION ONE FORTIETH +11FC5 ; [*1D70.0020.0002] # TAMIL FRACTION ONE THIRTY-SECOND +11FC6 ; [*1D71.0020.0002] # TAMIL FRACTION THREE EIGHTIETHS +11FC7 ; [*1D72.0020.0002] # TAMIL FRACTION THREE SIXTY-FOURTHS +11FC8 ; [*1D73.0020.0002] # TAMIL FRACTION ONE TWENTIETH +11FC9 ; [*1D74.0020.0002] # TAMIL FRACTION ONE SIXTEENTH-1 +11FCA ; [*1D75.0020.0002] # TAMIL FRACTION ONE SIXTEENTH-2 +11FCB ; [*1D76.0020.0002] # TAMIL FRACTION ONE TENTH +11FCC ; [*1D77.0020.0002] # TAMIL FRACTION ONE EIGHTH +11FCD ; [*1D78.0020.0002] # TAMIL FRACTION THREE TWENTIETHS +11FCE ; [*1D79.0020.0002] # TAMIL FRACTION THREE SIXTEENTHS +11FCF ; [*1D7A.0020.0002] # TAMIL FRACTION ONE FIFTH +11FD0 ; [*1D7B.0020.0002] # TAMIL FRACTION ONE QUARTER +11FD1 ; [*1D7C.0020.0002] # TAMIL FRACTION ONE HALF-1 +11FD2 ; [*1D7D.0020.0002] # TAMIL FRACTION ONE HALF-2 +11FD3 ; [*1D7E.0020.0002] # TAMIL FRACTION THREE QUARTERS +11FD4 ; [*1D7F.0020.0002] # TAMIL FRACTION DOWNSCALING FACTOR KIIZH +11FD5 ; [*0550.0020.0002] # TAMIL SIGN NEL +11FD6 ; [*0551.0020.0002] # TAMIL SIGN CEVITU +11FD7 ; [*0552.0020.0002] # TAMIL SIGN AAZHAAKKU +11FD8 ; [*0553.0020.0002] # TAMIL SIGN UZHAKKU +11FD9 ; [*0554.0020.0002] # TAMIL SIGN MUUVUZHAKKU +11FDA ; [*0555.0020.0002] # TAMIL SIGN KURUNI +11FDB ; [*0556.0020.0002] # TAMIL SIGN PATHAKKU +11FDC ; [*0557.0020.0002] # TAMIL SIGN MUKKURUNI +11FE1 ; [*0558.0020.0002] # TAMIL SIGN PAARAM +11FE2 ; [*0559.0020.0002] # TAMIL SIGN KUZHI +11FE3 ; [*055A.0020.0002] # TAMIL SIGN VELI +11FE4 ; [*055B.0020.0002] # TAMIL WET CULTIVATION SIGN +11FE5 ; [*055C.0020.0002] # TAMIL DRY CULTIVATION SIGN +11FE6 ; [*055D.0020.0002] # TAMIL LAND SIGN +11FE7 ; [*055E.0020.0002] # TAMIL SALT PAN SIGN +11FE8 ; [*055F.0020.0002] # TAMIL TRADITIONAL CREDIT SIGN +11FE9 ; [*0560.0020.0002] # TAMIL TRADITIONAL NUMBER SIGN +11FEA ; [*0561.0020.0002] # TAMIL CURRENT SIGN +11FEB ; [*0562.0020.0002] # TAMIL AND ODD SIGN +11FEC ; [*0563.0020.0002] # TAMIL SPENT SIGN +11FED ; [*0564.0020.0002] # TAMIL TOTAL SIGN +11FEE ; [*0565.0020.0002] # TAMIL IN POSSESSION SIGN +11FEF ; [*0566.0020.0002] # TAMIL STARTING FROM SIGN +11FF0 ; [*0567.0020.0002] # TAMIL SIGN MUTHALIYA +11FF1 ; [*0568.0020.0002] # TAMIL SIGN VAKAIYARAA +11FFF ; [*04A6.0020.0002] # TAMIL PUNCTUATION END OF TEXT +12432 ; [*1F2C.0020.0002] # CUNEIFORM NUMERIC SIGN SHAR2 TIMES GAL PLUS DISH +12433 ; [*1F2D.0020.0002] # CUNEIFORM NUMERIC SIGN SHAR2 TIMES GAL PLUS MIN +1245A ; [*1F2E.0020.0002] # CUNEIFORM NUMERIC SIGN ONE THIRD DISH +1245B ; [*1F2F.0020.0002] # CUNEIFORM NUMERIC SIGN TWO THIRDS DISH +1245C ; [*1F30.0020.0002] # CUNEIFORM NUMERIC SIGN FIVE SIXTHS DISH +1245D ; [*1F31.0020.0002] # CUNEIFORM NUMERIC SIGN ONE THIRD VARIANT FORM A +1245E ; [*1F32.0020.0002] # CUNEIFORM NUMERIC SIGN TWO THIRDS VARIANT FORM A +1245F ; [*1F33.0020.0002] # CUNEIFORM NUMERIC SIGN ONE EIGHTH ASH +12460 ; [*1F34.0020.0002] # CUNEIFORM NUMERIC SIGN ONE QUARTER ASH +12461 ; [*1F35.0020.0002] # CUNEIFORM NUMERIC SIGN OLD ASSYRIAN ONE SIXTH +12462 ; [*1F36.0020.0002] # CUNEIFORM NUMERIC SIGN OLD ASSYRIAN ONE QUARTER +12463 ; [*1F37.0020.0002] # CUNEIFORM NUMERIC SIGN ONE QUARTER GUR +12464 ; [*1F38.0020.0002] # CUNEIFORM NUMERIC SIGN ONE HALF GUR +12465 ; [*1F39.0020.0002] # CUNEIFORM NUMERIC SIGN ELAMITE ONE THIRD +12466 ; [*1F3A.0020.0002] # CUNEIFORM NUMERIC SIGN ELAMITE TWO THIRDS +12467 ; [*1F3B.0020.0002] # CUNEIFORM NUMERIC SIGN ELAMITE FORTY +12468 ; [*1F3C.0020.0002] # CUNEIFORM NUMERIC SIGN ELAMITE FIFTY +12470 ; [*0311.0020.0002] # CUNEIFORM PUNCTUATION SIGN OLD ASSYRIAN WORD DIVIDER +12471 ; [*0312.0020.0002] # CUNEIFORM PUNCTUATION SIGN VERTICAL COLON +12472 ; [*0313.0020.0002] # CUNEIFORM PUNCTUATION SIGN DIAGONAL COLON +12473 ; [*0314.0020.0002] # CUNEIFORM PUNCTUATION SIGN DIAGONAL TRICOLON +12474 ; [*0315.0020.0002] # CUNEIFORM PUNCTUATION SIGN DIAGONAL QUADCOLON +16A6E ; [*02C9.0020.0002] # MRO DANDA +16A6F ; [*02CA.0020.0002] # MRO DOUBLE DANDA +16AF5 ; [*028F.0020.0002] # BASSA VAH FULL STOP +16B37 ; [*04A7.0020.0002] # PAHAWH HMONG SIGN VOS THOM +16B38 ; [*04A8.0020.0002] # PAHAWH HMONG SIGN VOS TSHAB CEEB +16B39 ; [*04A9.0020.0002] # PAHAWH HMONG SIGN CIM CHEEM +16B3A ; [*04AA.0020.0002] # PAHAWH HMONG SIGN VOS THIAB +16B3B ; [*04AB.0020.0002] # PAHAWH HMONG SIGN VOS FEEM +16B3C ; [*111E.0020.0002] # PAHAWH HMONG SIGN XYEEM NTXIV +16B3D ; [*111F.0020.0002] # PAHAWH HMONG SIGN XYEEM RHO +16B3E ; [*1120.0020.0002] # PAHAWH HMONG SIGN XYEEM TOV +16B3F ; [*1121.0020.0002] # PAHAWH HMONG SIGN XYEEM FAIB +16B44 ; [*04AC.0020.0002] # PAHAWH HMONG SIGN XAUS +16B45 ; [*1122.0020.0002] # PAHAWH HMONG SIGN CIM TSOV ROG +16B5B ; [*1E81.0020.0002] # PAHAWH HMONG NUMBER TENS +16B5C ; [*1E82.0020.0002] # PAHAWH HMONG NUMBER HUNDREDS +16B5D ; [*1E83.0020.0002] # PAHAWH HMONG NUMBER TEN THOUSANDS +16B5E ; [*1E84.0020.0002] # PAHAWH HMONG NUMBER MILLIONS +16B5F ; [*1E85.0020.0002] # PAHAWH HMONG NUMBER HUNDRED MILLIONS +16B60 ; [*1E86.0020.0002] # PAHAWH HMONG NUMBER TEN BILLIONS +16B61 ; [*1E87.0020.0002] # PAHAWH HMONG NUMBER TRILLIONS +16E8A ; [*1E88.0020.0002] # MEDEFAIDRIN NUMBER TEN +16E8B ; [*1E89.0020.0002] # MEDEFAIDRIN NUMBER ELEVEN +16E8C ; [*1E8A.0020.0002] # MEDEFAIDRIN NUMBER TWELVE +16E8D ; [*1E8B.0020.0002] # MEDEFAIDRIN NUMBER THIRTEEN +16E8E ; [*1E8C.0020.0002] # MEDEFAIDRIN NUMBER FOURTEEN +16E8F ; [*1E8D.0020.0002] # MEDEFAIDRIN NUMBER FIFTEEN +16E90 ; [*1E8E.0020.0002] # MEDEFAIDRIN NUMBER SIXTEEN +16E91 ; [*1E8F.0020.0002] # MEDEFAIDRIN NUMBER SEVENTEEN +16E92 ; [*1E90.0020.0002] # MEDEFAIDRIN NUMBER EIGHTEEN +16E93 ; [*1E91.0020.0002] # MEDEFAIDRIN NUMBER NINETEEN +16E97 ; [*0235.0020.0002] # MEDEFAIDRIN COMMA +16E98 ; [*0290.0020.0002] # MEDEFAIDRIN FULL STOP +16E99 ; [*04AD.0020.0002] # MEDEFAIDRIN SYMBOL AIVA +16E9A ; [*04AE.0020.0002] # MEDEFAIDRIN EXCLAMATION OH +16FE2 ; [*0239.0020.0002] # OLD CHINESE HOOK MARK +16FE4 ; [.0000.0000.0000] # KHITAN SMALL SCRIPT FILLER +1BC9C ; [*1314.0020.0002] # DUPLOYAN SIGN O WITH CROSS +1BC9F ; [*0291.0020.0002] # DUPLOYAN PUNCTUATION CHINOOK FULL STOP +1D000 ; [*1124.0020.0002] # BYZANTINE MUSICAL SYMBOL PSILI +1D001 ; [*1125.0020.0002] # BYZANTINE MUSICAL SYMBOL DASEIA +1D002 ; [*1126.0020.0002] # BYZANTINE MUSICAL SYMBOL PERISPOMENI +1D003 ; [*1127.0020.0002] # BYZANTINE MUSICAL SYMBOL OXEIA EKFONITIKON +1D004 ; [*1128.0020.0002] # BYZANTINE MUSICAL SYMBOL OXEIA DIPLI +1D005 ; [*1129.0020.0002] # BYZANTINE MUSICAL SYMBOL VAREIA EKFONITIKON +1D006 ; [*112A.0020.0002] # BYZANTINE MUSICAL SYMBOL VAREIA DIPLI +1D007 ; [*112B.0020.0002] # BYZANTINE MUSICAL SYMBOL KATHISTI +1D008 ; [*112C.0020.0002] # BYZANTINE MUSICAL SYMBOL SYRMATIKI +1D009 ; [*112D.0020.0002] # BYZANTINE MUSICAL SYMBOL PARAKLITIKI +1D00A ; [*112E.0020.0002] # BYZANTINE MUSICAL SYMBOL YPOKRISIS +1D00B ; [*112F.0020.0002] # BYZANTINE MUSICAL SYMBOL YPOKRISIS DIPLI +1D00C ; [*1130.0020.0002] # BYZANTINE MUSICAL SYMBOL KREMASTI +1D00D ; [*1131.0020.0002] # BYZANTINE MUSICAL SYMBOL APESO EKFONITIKON +1D00E ; [*1132.0020.0002] # BYZANTINE MUSICAL SYMBOL EXO EKFONITIKON +1D00F ; [*1133.0020.0002] # BYZANTINE MUSICAL SYMBOL TELEIA +1D010 ; [*1134.0020.0002] # BYZANTINE MUSICAL SYMBOL KENTIMATA +1D011 ; [*1135.0020.0002] # BYZANTINE MUSICAL SYMBOL APOSTROFOS +1D012 ; [*1136.0020.0002] # BYZANTINE MUSICAL SYMBOL APOSTROFOS DIPLI +1D013 ; [*1137.0020.0002] # BYZANTINE MUSICAL SYMBOL SYNEVMA +1D014 ; [*1138.0020.0002] # BYZANTINE MUSICAL SYMBOL THITA +1D015 ; [*1139.0020.0002] # BYZANTINE MUSICAL SYMBOL OLIGON ARCHAION +1D016 ; [*113A.0020.0002] # BYZANTINE MUSICAL SYMBOL GORGON ARCHAION +1D017 ; [*113B.0020.0002] # BYZANTINE MUSICAL SYMBOL PSILON +1D018 ; [*113C.0020.0002] # BYZANTINE MUSICAL SYMBOL CHAMILON +1D019 ; [*113D.0020.0002] # BYZANTINE MUSICAL SYMBOL VATHY +1D01A ; [*113E.0020.0002] # BYZANTINE MUSICAL SYMBOL ISON ARCHAION +1D01B ; [*113F.0020.0002] # BYZANTINE MUSICAL SYMBOL KENTIMA ARCHAION +1D01C ; [*1140.0020.0002] # BYZANTINE MUSICAL SYMBOL KENTIMATA ARCHAION +1D01D ; [*1141.0020.0002] # BYZANTINE MUSICAL SYMBOL SAXIMATA +1D01E ; [*1142.0020.0002] # BYZANTINE MUSICAL SYMBOL PARICHON +1D01F ; [*1143.0020.0002] # BYZANTINE MUSICAL SYMBOL STAVROS APODEXIA +1D020 ; [*1144.0020.0002] # BYZANTINE MUSICAL SYMBOL OXEIAI ARCHAION +1D021 ; [*1145.0020.0002] # BYZANTINE MUSICAL SYMBOL VAREIAI ARCHAION +1D022 ; [*1146.0020.0002] # BYZANTINE MUSICAL SYMBOL APODERMA ARCHAION +1D023 ; [*1147.0020.0002] # BYZANTINE MUSICAL SYMBOL APOTHEMA +1D024 ; [*1148.0020.0002] # BYZANTINE MUSICAL SYMBOL KLASMA +1D025 ; [*1149.0020.0002] # BYZANTINE MUSICAL SYMBOL REVMA +1D026 ; [*114A.0020.0002] # BYZANTINE MUSICAL SYMBOL PIASMA ARCHAION +1D027 ; [*114B.0020.0002] # BYZANTINE MUSICAL SYMBOL TINAGMA +1D028 ; [*114C.0020.0002] # BYZANTINE MUSICAL SYMBOL ANATRICHISMA +1D029 ; [*114D.0020.0002] # BYZANTINE MUSICAL SYMBOL SEISMA +1D02A ; [*114E.0020.0002] # BYZANTINE MUSICAL SYMBOL SYNAGMA ARCHAION +1D02B ; [*114F.0020.0002] # BYZANTINE MUSICAL SYMBOL SYNAGMA META STAVROU +1D02C ; [*1150.0020.0002] # BYZANTINE MUSICAL SYMBOL OYRANISMA ARCHAION +1D02D ; [*1151.0020.0002] # BYZANTINE MUSICAL SYMBOL THEMA +1D02E ; [*1152.0020.0002] # BYZANTINE MUSICAL SYMBOL LEMOI +1D02F ; [*1153.0020.0002] # BYZANTINE MUSICAL SYMBOL DYO +1D030 ; [*1154.0020.0002] # BYZANTINE MUSICAL SYMBOL TRIA +1D031 ; [*1155.0020.0002] # BYZANTINE MUSICAL SYMBOL TESSERA +1D032 ; [*1156.0020.0002] # BYZANTINE MUSICAL SYMBOL KRATIMATA +1D033 ; [*1157.0020.0002] # BYZANTINE MUSICAL SYMBOL APESO EXO NEO +1D034 ; [*1158.0020.0002] # BYZANTINE MUSICAL SYMBOL FTHORA ARCHAION +1D035 ; [*1159.0020.0002] # BYZANTINE MUSICAL SYMBOL IMIFTHORA +1D036 ; [*115A.0020.0002] # BYZANTINE MUSICAL SYMBOL TROMIKON ARCHAION +1D037 ; [*115B.0020.0002] # BYZANTINE MUSICAL SYMBOL KATAVA TROMIKON +1D038 ; [*115C.0020.0002] # BYZANTINE MUSICAL SYMBOL PELASTON +1D039 ; [*115D.0020.0002] # BYZANTINE MUSICAL SYMBOL PSIFISTON +1D03A ; [*115E.0020.0002] # BYZANTINE MUSICAL SYMBOL KONTEVMA +1D03B ; [*115F.0020.0002] # BYZANTINE MUSICAL SYMBOL CHOREVMA ARCHAION +1D03C ; [*1160.0020.0002] # BYZANTINE MUSICAL SYMBOL RAPISMA +1D03D ; [*1161.0020.0002] # BYZANTINE MUSICAL SYMBOL PARAKALESMA ARCHAION +1D03E ; [*1162.0020.0002] # BYZANTINE MUSICAL SYMBOL PARAKLITIKI ARCHAION +1D03F ; [*1163.0020.0002] # BYZANTINE MUSICAL SYMBOL ICHADIN +1D040 ; [*1164.0020.0002] # BYZANTINE MUSICAL SYMBOL NANA +1D041 ; [*1165.0020.0002] # BYZANTINE MUSICAL SYMBOL PETASMA +1D042 ; [*1166.0020.0002] # BYZANTINE MUSICAL SYMBOL KONTEVMA ALLO +1D043 ; [*1167.0020.0002] # BYZANTINE MUSICAL SYMBOL TROMIKON ALLO +1D044 ; [*1168.0020.0002] # BYZANTINE MUSICAL SYMBOL STRAGGISMATA +1D045 ; [*1169.0020.0002] # BYZANTINE MUSICAL SYMBOL GRONTHISMATA +1D046 ; [*116A.0020.0002] # BYZANTINE MUSICAL SYMBOL ISON NEO +1D047 ; [*116B.0020.0002] # BYZANTINE MUSICAL SYMBOL OLIGON NEO +1D048 ; [*116C.0020.0002] # BYZANTINE MUSICAL SYMBOL OXEIA NEO +1D049 ; [*116D.0020.0002] # BYZANTINE MUSICAL SYMBOL PETASTI +1D04A ; [*116E.0020.0002] # BYZANTINE MUSICAL SYMBOL KOUFISMA +1D04B ; [*116F.0020.0002] # BYZANTINE MUSICAL SYMBOL PETASTOKOUFISMA +1D04C ; [*1170.0020.0002] # BYZANTINE MUSICAL SYMBOL KRATIMOKOUFISMA +1D04D ; [*1171.0020.0002] # BYZANTINE MUSICAL SYMBOL PELASTON NEO +1D04E ; [*1172.0020.0002] # BYZANTINE MUSICAL SYMBOL KENTIMATA NEO ANO +1D04F ; [*1173.0020.0002] # BYZANTINE MUSICAL SYMBOL KENTIMA NEO ANO +1D050 ; [*1174.0020.0002] # BYZANTINE MUSICAL SYMBOL YPSILI +1D051 ; [*1175.0020.0002] # BYZANTINE MUSICAL SYMBOL APOSTROFOS NEO +1D052 ; [*1176.0020.0002] # BYZANTINE MUSICAL SYMBOL APOSTROFOI SYNDESMOS NEO +1D053 ; [*1177.0020.0002] # BYZANTINE MUSICAL SYMBOL YPORROI +1D054 ; [*1178.0020.0002] # BYZANTINE MUSICAL SYMBOL KRATIMOYPORROON +1D055 ; [*1179.0020.0002] # BYZANTINE MUSICAL SYMBOL ELAFRON +1D056 ; [*117A.0020.0002] # BYZANTINE MUSICAL SYMBOL CHAMILI +1D057 ; [*117B.0020.0002] # BYZANTINE MUSICAL SYMBOL MIKRON ISON +1D058 ; [*117C.0020.0002] # BYZANTINE MUSICAL SYMBOL VAREIA NEO +1D059 ; [*117D.0020.0002] # BYZANTINE MUSICAL SYMBOL PIASMA NEO +1D05A ; [*117E.0020.0002] # BYZANTINE MUSICAL SYMBOL PSIFISTON NEO +1D05B ; [*117F.0020.0002] # BYZANTINE MUSICAL SYMBOL OMALON +1D05C ; [*1180.0020.0002] # BYZANTINE MUSICAL SYMBOL ANTIKENOMA +1D05D ; [*1181.0020.0002] # BYZANTINE MUSICAL SYMBOL LYGISMA +1D05E ; [*1182.0020.0002] # BYZANTINE MUSICAL SYMBOL PARAKLITIKI NEO +1D05F ; [*1183.0020.0002] # BYZANTINE MUSICAL SYMBOL PARAKALESMA NEO +1D060 ; [*1184.0020.0002] # BYZANTINE MUSICAL SYMBOL ETERON PARAKALESMA +1D061 ; [*1185.0020.0002] # BYZANTINE MUSICAL SYMBOL KYLISMA +1D062 ; [*1186.0020.0002] # BYZANTINE MUSICAL SYMBOL ANTIKENOKYLISMA +1D063 ; [*1187.0020.0002] # BYZANTINE MUSICAL SYMBOL TROMIKON NEO +1D064 ; [*1188.0020.0002] # BYZANTINE MUSICAL SYMBOL EKSTREPTON +1D065 ; [*1189.0020.0002] # BYZANTINE MUSICAL SYMBOL SYNAGMA NEO +1D066 ; [*118A.0020.0002] # BYZANTINE MUSICAL SYMBOL SYRMA +1D067 ; [*118B.0020.0002] # BYZANTINE MUSICAL SYMBOL CHOREVMA NEO +1D068 ; [*118C.0020.0002] # BYZANTINE MUSICAL SYMBOL EPEGERMA +1D069 ; [*118D.0020.0002] # BYZANTINE MUSICAL SYMBOL SEISMA NEO +1D06A ; [*118E.0020.0002] # BYZANTINE MUSICAL SYMBOL XIRON KLASMA +1D06B ; [*118F.0020.0002] # BYZANTINE MUSICAL SYMBOL TROMIKOPSIFISTON +1D06C ; [*1190.0020.0002] # BYZANTINE MUSICAL SYMBOL PSIFISTOLYGISMA +1D06D ; [*1191.0020.0002] # BYZANTINE MUSICAL SYMBOL TROMIKOLYGISMA +1D06E ; [*1192.0020.0002] # BYZANTINE MUSICAL SYMBOL TROMIKOPARAKALESMA +1D06F ; [*1193.0020.0002] # BYZANTINE MUSICAL SYMBOL PSIFISTOPARAKALESMA +1D070 ; [*1194.0020.0002] # BYZANTINE MUSICAL SYMBOL TROMIKOSYNAGMA +1D071 ; [*1195.0020.0002] # BYZANTINE MUSICAL SYMBOL PSIFISTOSYNAGMA +1D072 ; [*1196.0020.0002] # BYZANTINE MUSICAL SYMBOL GORGOSYNTHETON +1D073 ; [*1197.0020.0002] # BYZANTINE MUSICAL SYMBOL ARGOSYNTHETON +1D074 ; [*1198.0020.0002] # BYZANTINE MUSICAL SYMBOL ETERON ARGOSYNTHETON +1D075 ; [*1199.0020.0002] # BYZANTINE MUSICAL SYMBOL OYRANISMA NEO +1D076 ; [*119A.0020.0002] # BYZANTINE MUSICAL SYMBOL THEMATISMOS ESO +1D077 ; [*119B.0020.0002] # BYZANTINE MUSICAL SYMBOL THEMATISMOS EXO +1D078 ; [*119C.0020.0002] # BYZANTINE MUSICAL SYMBOL THEMA APLOUN +1D079 ; [*119D.0020.0002] # BYZANTINE MUSICAL SYMBOL THES KAI APOTHES +1D07A ; [*119E.0020.0002] # BYZANTINE MUSICAL SYMBOL KATAVASMA +1D07B ; [*119F.0020.0002] # BYZANTINE MUSICAL SYMBOL ENDOFONON +1D07C ; [*11A0.0020.0002] # BYZANTINE MUSICAL SYMBOL YFEN KATO +1D07D ; [*11A1.0020.0002] # BYZANTINE MUSICAL SYMBOL YFEN ANO +1D07E ; [*11A2.0020.0002] # BYZANTINE MUSICAL SYMBOL STAVROS +1D07F ; [*11A3.0020.0002] # BYZANTINE MUSICAL SYMBOL KLASMA ANO +1D080 ; [*11A4.0020.0002] # BYZANTINE MUSICAL SYMBOL DIPLI ARCHAION +1D081 ; [*11A5.0020.0002] # BYZANTINE MUSICAL SYMBOL KRATIMA ARCHAION +1D082 ; [*11A6.0020.0002] # BYZANTINE MUSICAL SYMBOL KRATIMA ALLO +1D083 ; [*11A7.0020.0002] # BYZANTINE MUSICAL SYMBOL KRATIMA NEO +1D084 ; [*11A8.0020.0002] # BYZANTINE MUSICAL SYMBOL APODERMA NEO +1D085 ; [*11A9.0020.0002] # BYZANTINE MUSICAL SYMBOL APLI +1D086 ; [*11AA.0020.0002] # BYZANTINE MUSICAL SYMBOL DIPLI +1D087 ; [*11AB.0020.0002] # BYZANTINE MUSICAL SYMBOL TRIPLI +1D088 ; [*11AC.0020.0002] # BYZANTINE MUSICAL SYMBOL TETRAPLI +1D089 ; [*11AD.0020.0002] # BYZANTINE MUSICAL SYMBOL KORONIS +1D08A ; [*11AE.0020.0002] # BYZANTINE MUSICAL SYMBOL LEIMMA ENOS CHRONOU +1D08B ; [*11AF.0020.0002] # BYZANTINE MUSICAL SYMBOL LEIMMA DYO CHRONON +1D08C ; [*11B0.0020.0002] # BYZANTINE MUSICAL SYMBOL LEIMMA TRION CHRONON +1D08D ; [*11B1.0020.0002] # BYZANTINE MUSICAL SYMBOL LEIMMA TESSARON CHRONON +1D08E ; [*11B2.0020.0002] # BYZANTINE MUSICAL SYMBOL LEIMMA IMISEOS CHRONOU +1D08F ; [*11B3.0020.0002] # BYZANTINE MUSICAL SYMBOL GORGON NEO ANO +1D090 ; [*11B4.0020.0002] # BYZANTINE MUSICAL SYMBOL GORGON PARESTIGMENON ARISTERA +1D091 ; [*11B5.0020.0002] # BYZANTINE MUSICAL SYMBOL GORGON PARESTIGMENON DEXIA +1D092 ; [*11B6.0020.0002] # BYZANTINE MUSICAL SYMBOL DIGORGON +1D093 ; [*11B7.0020.0002] # BYZANTINE MUSICAL SYMBOL DIGORGON PARESTIGMENON ARISTERA KATO +1D094 ; [*11B8.0020.0002] # BYZANTINE MUSICAL SYMBOL DIGORGON PARESTIGMENON ARISTERA ANO +1D095 ; [*11B9.0020.0002] # BYZANTINE MUSICAL SYMBOL DIGORGON PARESTIGMENON DEXIA +1D096 ; [*11BA.0020.0002] # BYZANTINE MUSICAL SYMBOL TRIGORGON +1D097 ; [*11BB.0020.0002] # BYZANTINE MUSICAL SYMBOL ARGON +1D098 ; [*11BC.0020.0002] # BYZANTINE MUSICAL SYMBOL IMIDIARGON +1D099 ; [*11BD.0020.0002] # BYZANTINE MUSICAL SYMBOL DIARGON +1D09A ; [*11BE.0020.0002] # BYZANTINE MUSICAL SYMBOL AGOGI POLI ARGI +1D09B ; [*11BF.0020.0002] # BYZANTINE MUSICAL SYMBOL AGOGI ARGOTERI +1D09C ; [*11C0.0020.0002] # BYZANTINE MUSICAL SYMBOL AGOGI ARGI +1D09D ; [*11C1.0020.0002] # BYZANTINE MUSICAL SYMBOL AGOGI METRIA +1D09E ; [*11C2.0020.0002] # BYZANTINE MUSICAL SYMBOL AGOGI MESI +1D09F ; [*11C3.0020.0002] # BYZANTINE MUSICAL SYMBOL AGOGI GORGI +1D0A0 ; [*11C4.0020.0002] # BYZANTINE MUSICAL SYMBOL AGOGI GORGOTERI +1D0A1 ; [*11C5.0020.0002] # BYZANTINE MUSICAL SYMBOL AGOGI POLI GORGI +1D0A2 ; [*11C6.0020.0002] # BYZANTINE MUSICAL SYMBOL MARTYRIA PROTOS ICHOS +1D0A3 ; [*11C7.0020.0002] # BYZANTINE MUSICAL SYMBOL MARTYRIA ALLI PROTOS ICHOS +1D0A4 ; [*11C8.0020.0002] # BYZANTINE MUSICAL SYMBOL MARTYRIA DEYTEROS ICHOS +1D0A5 ; [*11C9.0020.0002] # BYZANTINE MUSICAL SYMBOL MARTYRIA ALLI DEYTEROS ICHOS +1D0A6 ; [*11CA.0020.0002] # BYZANTINE MUSICAL SYMBOL MARTYRIA TRITOS ICHOS +1D0A7 ; [*11CB.0020.0002] # BYZANTINE MUSICAL SYMBOL MARTYRIA TRIFONIAS +1D0A8 ; [*11CC.0020.0002] # BYZANTINE MUSICAL SYMBOL MARTYRIA TETARTOS ICHOS +1D0A9 ; [*11CD.0020.0002] # BYZANTINE MUSICAL SYMBOL MARTYRIA TETARTOS LEGETOS ICHOS +1D0AA ; [*11CE.0020.0002] # BYZANTINE MUSICAL SYMBOL MARTYRIA LEGETOS ICHOS +1D0AB ; [*11CF.0020.0002] # BYZANTINE MUSICAL SYMBOL MARTYRIA PLAGIOS ICHOS +1D0AC ; [*11D0.0020.0002] # BYZANTINE MUSICAL SYMBOL ISAKIA TELOUS ICHIMATOS +1D0AD ; [*11D1.0020.0002] # BYZANTINE MUSICAL SYMBOL APOSTROFOI TELOUS ICHIMATOS +1D0AE ; [*11D2.0020.0002] # BYZANTINE MUSICAL SYMBOL FANEROSIS TETRAFONIAS +1D0AF ; [*11D3.0020.0002] # BYZANTINE MUSICAL SYMBOL FANEROSIS MONOFONIAS +1D0B0 ; [*11D4.0020.0002] # BYZANTINE MUSICAL SYMBOL FANEROSIS DIFONIAS +1D0B1 ; [*11D5.0020.0002] # BYZANTINE MUSICAL SYMBOL MARTYRIA VARYS ICHOS +1D0B2 ; [*11D6.0020.0002] # BYZANTINE MUSICAL SYMBOL MARTYRIA PROTOVARYS ICHOS +1D0B3 ; [*11D7.0020.0002] # BYZANTINE MUSICAL SYMBOL MARTYRIA PLAGIOS TETARTOS ICHOS +1D0B4 ; [*11D8.0020.0002] # BYZANTINE MUSICAL SYMBOL GORTHMIKON N APLOUN +1D0B5 ; [*11D9.0020.0002] # BYZANTINE MUSICAL SYMBOL GORTHMIKON N DIPLOUN +1D0B6 ; [*11DA.0020.0002] # BYZANTINE MUSICAL SYMBOL ENARXIS KAI FTHORA VOU +1D0B7 ; [*11DB.0020.0002] # BYZANTINE MUSICAL SYMBOL IMIFONON +1D0B8 ; [*11DC.0020.0002] # BYZANTINE MUSICAL SYMBOL IMIFTHORON +1D0B9 ; [*11DD.0020.0002] # BYZANTINE MUSICAL SYMBOL FTHORA ARCHAION DEYTEROU ICHOU +1D0BA ; [*11DE.0020.0002] # BYZANTINE MUSICAL SYMBOL FTHORA DIATONIKI PA +1D0BB ; [*11DF.0020.0002] # BYZANTINE MUSICAL SYMBOL FTHORA DIATONIKI NANA +1D0BC ; [*11E0.0020.0002] # BYZANTINE MUSICAL SYMBOL FTHORA NAOS ICHOS +1D0BD ; [*11E1.0020.0002] # BYZANTINE MUSICAL SYMBOL FTHORA DIATONIKI DI +1D0BE ; [*11E2.0020.0002] # BYZANTINE MUSICAL SYMBOL FTHORA SKLIRON DIATONON DI +1D0BF ; [*11E3.0020.0002] # BYZANTINE MUSICAL SYMBOL FTHORA DIATONIKI KE +1D0C0 ; [*11E4.0020.0002] # BYZANTINE MUSICAL SYMBOL FTHORA DIATONIKI ZO +1D0C1 ; [*11E5.0020.0002] # BYZANTINE MUSICAL SYMBOL FTHORA DIATONIKI NI KATO +1D0C2 ; [*11E6.0020.0002] # BYZANTINE MUSICAL SYMBOL FTHORA DIATONIKI NI ANO +1D0C3 ; [*11E7.0020.0002] # BYZANTINE MUSICAL SYMBOL FTHORA MALAKON CHROMA DIFONIAS +1D0C4 ; [*11E8.0020.0002] # BYZANTINE MUSICAL SYMBOL FTHORA MALAKON CHROMA MONOFONIAS +1D0C5 ; [*11E9.0020.0002] # BYZANTINE MUSICAL SYMBOL FHTORA SKLIRON CHROMA VASIS +1D0C6 ; [*11EA.0020.0002] # BYZANTINE MUSICAL SYMBOL FTHORA SKLIRON CHROMA SYNAFI +1D0C7 ; [*11EB.0020.0002] # BYZANTINE MUSICAL SYMBOL FTHORA NENANO +1D0C8 ; [*11EC.0020.0002] # BYZANTINE MUSICAL SYMBOL CHROA ZYGOS +1D0C9 ; [*11ED.0020.0002] # BYZANTINE MUSICAL SYMBOL CHROA KLITON +1D0CA ; [*11EE.0020.0002] # BYZANTINE MUSICAL SYMBOL CHROA SPATHI +1D0CB ; [*11EF.0020.0002] # BYZANTINE MUSICAL SYMBOL FTHORA I YFESIS TETARTIMORION +1D0CC ; [*11F0.0020.0002] # BYZANTINE MUSICAL SYMBOL FTHORA ENARMONIOS ANTIFONIA +1D0CD ; [*11F1.0020.0002] # BYZANTINE MUSICAL SYMBOL YFESIS TRITIMORION +1D0CE ; [*11F2.0020.0002] # BYZANTINE MUSICAL SYMBOL DIESIS TRITIMORION +1D0CF ; [*11F3.0020.0002] # BYZANTINE MUSICAL SYMBOL DIESIS TETARTIMORION +1D0D0 ; [*11F4.0020.0002] # BYZANTINE MUSICAL SYMBOL DIESIS APLI DYO DODEKATA +1D0D1 ; [*11F5.0020.0002] # BYZANTINE MUSICAL SYMBOL DIESIS MONOGRAMMOS TESSERA DODEKATA +1D0D2 ; [*11F6.0020.0002] # BYZANTINE MUSICAL SYMBOL DIESIS DIGRAMMOS EX DODEKATA +1D0D3 ; [*11F7.0020.0002] # BYZANTINE MUSICAL SYMBOL DIESIS TRIGRAMMOS OKTO DODEKATA +1D0D4 ; [*11F8.0020.0002] # BYZANTINE MUSICAL SYMBOL YFESIS APLI DYO DODEKATA +1D0D5 ; [*11F9.0020.0002] # BYZANTINE MUSICAL SYMBOL YFESIS MONOGRAMMOS TESSERA DODEKATA +1D0D6 ; [*11FA.0020.0002] # BYZANTINE MUSICAL SYMBOL YFESIS DIGRAMMOS EX DODEKATA +1D0D7 ; [*11FB.0020.0002] # BYZANTINE MUSICAL SYMBOL YFESIS TRIGRAMMOS OKTO DODEKATA +1D0D8 ; [*11FC.0020.0002] # BYZANTINE MUSICAL SYMBOL GENIKI DIESIS +1D0D9 ; [*11FD.0020.0002] # BYZANTINE MUSICAL SYMBOL GENIKI YFESIS +1D0DA ; [*11FE.0020.0002] # BYZANTINE MUSICAL SYMBOL DIASTOLI APLI MIKRI +1D0DB ; [*11FF.0020.0002] # BYZANTINE MUSICAL SYMBOL DIASTOLI APLI MEGALI +1D0DC ; [*1200.0020.0002] # BYZANTINE MUSICAL SYMBOL DIASTOLI DIPLI +1D0DD ; [*1201.0020.0002] # BYZANTINE MUSICAL SYMBOL DIASTOLI THESEOS +1D0DE ; [*1202.0020.0002] # BYZANTINE MUSICAL SYMBOL SIMANSIS THESEOS +1D0DF ; [*1203.0020.0002] # BYZANTINE MUSICAL SYMBOL SIMANSIS THESEOS DISIMOU +1D0E0 ; [*1204.0020.0002] # BYZANTINE MUSICAL SYMBOL SIMANSIS THESEOS TRISIMOU +1D0E1 ; [*1205.0020.0002] # BYZANTINE MUSICAL SYMBOL SIMANSIS THESEOS TETRASIMOU +1D0E2 ; [*1206.0020.0002] # BYZANTINE MUSICAL SYMBOL SIMANSIS ARSEOS +1D0E3 ; [*1207.0020.0002] # BYZANTINE MUSICAL SYMBOL SIMANSIS ARSEOS DISIMOU +1D0E4 ; [*1208.0020.0002] # BYZANTINE MUSICAL SYMBOL SIMANSIS ARSEOS TRISIMOU +1D0E5 ; [*1209.0020.0002] # BYZANTINE MUSICAL SYMBOL SIMANSIS ARSEOS TETRASIMOU +1D0E6 ; [*120A.0020.0002] # BYZANTINE MUSICAL SYMBOL DIGRAMMA GG +1D0E7 ; [*120B.0020.0002] # BYZANTINE MUSICAL SYMBOL DIFTOGGOS OU +1D0E8 ; [*120C.0020.0002] # BYZANTINE MUSICAL SYMBOL STIGMA +1D0E9 ; [*120D.0020.0002] # BYZANTINE MUSICAL SYMBOL ARKTIKO PA +1D0EA ; [*120E.0020.0002] # BYZANTINE MUSICAL SYMBOL ARKTIKO VOU +1D0EB ; [*120F.0020.0002] # BYZANTINE MUSICAL SYMBOL ARKTIKO GA +1D0EC ; [*1210.0020.0002] # BYZANTINE MUSICAL SYMBOL ARKTIKO DI +1D0ED ; [*1211.0020.0002] # BYZANTINE MUSICAL SYMBOL ARKTIKO KE +1D0EE ; [*1212.0020.0002] # BYZANTINE MUSICAL SYMBOL ARKTIKO ZO +1D0EF ; [*1213.0020.0002] # BYZANTINE MUSICAL SYMBOL ARKTIKO NI +1D0F0 ; [*1214.0020.0002] # BYZANTINE MUSICAL SYMBOL KENTIMATA NEO MESO +1D0F1 ; [*1215.0020.0002] # BYZANTINE MUSICAL SYMBOL KENTIMA NEO MESO +1D0F2 ; [*1216.0020.0002] # BYZANTINE MUSICAL SYMBOL KENTIMATA NEO KATO +1D0F3 ; [*1217.0020.0002] # BYZANTINE MUSICAL SYMBOL KENTIMA NEO KATO +1D0F4 ; [*1218.0020.0002] # BYZANTINE MUSICAL SYMBOL KLASMA KATO +1D0F5 ; [*1219.0020.0002] # BYZANTINE MUSICAL SYMBOL GORGON NEO KATO +1D100 ; [*121A.0020.0002] # MUSICAL SYMBOL SINGLE BARLINE +1D101 ; [*121B.0020.0002] # MUSICAL SYMBOL DOUBLE BARLINE +1D102 ; [*121C.0020.0002] # MUSICAL SYMBOL FINAL BARLINE +1D103 ; [*121D.0020.0002] # MUSICAL SYMBOL REVERSE FINAL BARLINE +1D104 ; [*121E.0020.0002] # MUSICAL SYMBOL DASHED BARLINE +1D105 ; [*121F.0020.0002] # MUSICAL SYMBOL SHORT BARLINE +1D106 ; [*1220.0020.0002] # MUSICAL SYMBOL LEFT REPEAT SIGN +1D107 ; [*1221.0020.0002] # MUSICAL SYMBOL RIGHT REPEAT SIGN +1D108 ; [*1222.0020.0002] # MUSICAL SYMBOL REPEAT DOTS +1D109 ; [*1223.0020.0002] # MUSICAL SYMBOL DAL SEGNO +1D10A ; [*1224.0020.0002] # MUSICAL SYMBOL DA CAPO +1D10B ; [*1225.0020.0002] # MUSICAL SYMBOL SEGNO +1D10C ; [*1226.0020.0002] # MUSICAL SYMBOL CODA +1D10D ; [*1227.0020.0002] # MUSICAL SYMBOL REPEATED FIGURE-1 +1D10E ; [*1228.0020.0002] # MUSICAL SYMBOL REPEATED FIGURE-2 +1D10F ; [*1229.0020.0002] # MUSICAL SYMBOL REPEATED FIGURE-3 +1D110 ; [*122A.0020.0002] # MUSICAL SYMBOL FERMATA +1D111 ; [*122B.0020.0002] # MUSICAL SYMBOL FERMATA BELOW +1D112 ; [*122C.0020.0002] # MUSICAL SYMBOL BREATH MARK +1D113 ; [*122D.0020.0002] # MUSICAL SYMBOL CAESURA +1D114 ; [*122E.0020.0002] # MUSICAL SYMBOL BRACE +1D115 ; [*122F.0020.0002] # MUSICAL SYMBOL BRACKET +1D116 ; [*1230.0020.0002] # MUSICAL SYMBOL ONE-LINE STAFF +1D117 ; [*1231.0020.0002] # MUSICAL SYMBOL TWO-LINE STAFF +1D118 ; [*1232.0020.0002] # MUSICAL SYMBOL THREE-LINE STAFF +1D119 ; [*1233.0020.0002] # MUSICAL SYMBOL FOUR-LINE STAFF +1D11A ; [*1234.0020.0002] # MUSICAL SYMBOL FIVE-LINE STAFF +1D11B ; [*1235.0020.0002] # MUSICAL SYMBOL SIX-LINE STAFF +1D11C ; [*1236.0020.0002] # MUSICAL SYMBOL SIX-STRING FRETBOARD +1D11D ; [*1237.0020.0002] # MUSICAL SYMBOL FOUR-STRING FRETBOARD +1D11E ; [*1238.0020.0002] # MUSICAL SYMBOL G CLEF +1D11F ; [*1239.0020.0002] # MUSICAL SYMBOL G CLEF OTTAVA ALTA +1D120 ; [*123A.0020.0002] # MUSICAL SYMBOL G CLEF OTTAVA BASSA +1D121 ; [*123B.0020.0002] # MUSICAL SYMBOL C CLEF +1D122 ; [*123C.0020.0002] # MUSICAL SYMBOL F CLEF +1D123 ; [*123D.0020.0002] # MUSICAL SYMBOL F CLEF OTTAVA ALTA +1D124 ; [*123E.0020.0002] # MUSICAL SYMBOL F CLEF OTTAVA BASSA +1D125 ; [*123F.0020.0002] # MUSICAL SYMBOL DRUM CLEF-1 +1D126 ; [*1240.0020.0002] # MUSICAL SYMBOL DRUM CLEF-2 +1D129 ; [*1254.0020.0002] # MUSICAL SYMBOL MULTIPLE MEASURE REST +1D12A ; [*1244.0020.0002] # MUSICAL SYMBOL DOUBLE SHARP +1D12B ; [*1245.0020.0002] # MUSICAL SYMBOL DOUBLE FLAT +1D12C ; [*1246.0020.0002] # MUSICAL SYMBOL FLAT UP +1D12D ; [*1247.0020.0002] # MUSICAL SYMBOL FLAT DOWN +1D12E ; [*1248.0020.0002] # MUSICAL SYMBOL NATURAL UP +1D12F ; [*1249.0020.0002] # MUSICAL SYMBOL NATURAL DOWN +1D130 ; [*124A.0020.0002] # MUSICAL SYMBOL SHARP UP +1D131 ; [*124B.0020.0002] # MUSICAL SYMBOL SHARP DOWN +1D132 ; [*124C.0020.0002] # MUSICAL SYMBOL QUARTER TONE SHARP +1D133 ; [*124D.0020.0002] # MUSICAL SYMBOL QUARTER TONE FLAT +1D134 ; [*124E.0020.0002] # MUSICAL SYMBOL COMMON TIME +1D135 ; [*124F.0020.0002] # MUSICAL SYMBOL CUT TIME +1D136 ; [*1250.0020.0002] # MUSICAL SYMBOL OTTAVA ALTA +1D137 ; [*1251.0020.0002] # MUSICAL SYMBOL OTTAVA BASSA +1D138 ; [*1252.0020.0002] # MUSICAL SYMBOL QUINDICESIMA ALTA +1D139 ; [*1253.0020.0002] # MUSICAL SYMBOL QUINDICESIMA BASSA +1D13A ; [*1255.0020.0002] # MUSICAL SYMBOL MULTI REST +1D13B ; [*1256.0020.0002] # MUSICAL SYMBOL WHOLE REST +1D13C ; [*1257.0020.0002] # MUSICAL SYMBOL HALF REST +1D13D ; [*1258.0020.0002] # MUSICAL SYMBOL QUARTER REST +1D13E ; [*1259.0020.0002] # MUSICAL SYMBOL EIGHTH REST +1D13F ; [*125A.0020.0002] # MUSICAL SYMBOL SIXTEENTH REST +1D140 ; [*125B.0020.0002] # MUSICAL SYMBOL THIRTY-SECOND REST +1D141 ; [*125C.0020.0002] # MUSICAL SYMBOL SIXTY-FOURTH REST +1D142 ; [*125D.0020.0002] # MUSICAL SYMBOL ONE HUNDRED TWENTY-EIGHTH REST +1D143 ; [*125E.0020.0002] # MUSICAL SYMBOL X NOTEHEAD +1D144 ; [*125F.0020.0002] # MUSICAL SYMBOL PLUS NOTEHEAD +1D145 ; [*1260.0020.0002] # MUSICAL SYMBOL CIRCLE X NOTEHEAD +1D146 ; [*1261.0020.0002] # MUSICAL SYMBOL SQUARE NOTEHEAD WHITE +1D147 ; [*1262.0020.0002] # MUSICAL SYMBOL SQUARE NOTEHEAD BLACK +1D148 ; [*1263.0020.0002] # MUSICAL SYMBOL TRIANGLE NOTEHEAD UP WHITE +1D149 ; [*1264.0020.0002] # MUSICAL SYMBOL TRIANGLE NOTEHEAD UP BLACK +1D14A ; [*1265.0020.0002] # MUSICAL SYMBOL TRIANGLE NOTEHEAD LEFT WHITE +1D14B ; [*1266.0020.0002] # MUSICAL SYMBOL TRIANGLE NOTEHEAD LEFT BLACK +1D14C ; [*1267.0020.0002] # MUSICAL SYMBOL TRIANGLE NOTEHEAD RIGHT WHITE +1D14D ; [*1268.0020.0002] # MUSICAL SYMBOL TRIANGLE NOTEHEAD RIGHT BLACK +1D14E ; [*1269.0020.0002] # MUSICAL SYMBOL TRIANGLE NOTEHEAD DOWN WHITE +1D14F ; [*126A.0020.0002] # MUSICAL SYMBOL TRIANGLE NOTEHEAD DOWN BLACK +1D150 ; [*126B.0020.0002] # MUSICAL SYMBOL TRIANGLE NOTEHEAD UP RIGHT WHITE +1D151 ; [*126C.0020.0002] # MUSICAL SYMBOL TRIANGLE NOTEHEAD UP RIGHT BLACK +1D152 ; [*126D.0020.0002] # MUSICAL SYMBOL MOON NOTEHEAD WHITE +1D153 ; [*126E.0020.0002] # MUSICAL SYMBOL MOON NOTEHEAD BLACK +1D154 ; [*126F.0020.0002] # MUSICAL SYMBOL TRIANGLE-ROUND NOTEHEAD DOWN WHITE +1D155 ; [*1270.0020.0002] # MUSICAL SYMBOL TRIANGLE-ROUND NOTEHEAD DOWN BLACK +1D156 ; [*1271.0020.0002] # MUSICAL SYMBOL PARENTHESIS NOTEHEAD +1D157 ; [*1272.0020.0002] # MUSICAL SYMBOL VOID NOTEHEAD +1D158 ; [*1273.0020.0002] # MUSICAL SYMBOL NOTEHEAD BLACK +1D159 ; [*1274.0020.0002] # MUSICAL SYMBOL NULL NOTEHEAD +1D15A ; [*1275.0020.0002] # MUSICAL SYMBOL CLUSTER NOTEHEAD WHITE +1D15B ; [*1276.0020.0002] # MUSICAL SYMBOL CLUSTER NOTEHEAD BLACK +1D15C ; [*1277.0020.0002] # MUSICAL SYMBOL BREVE +1D15D ; [*1278.0020.0002] # MUSICAL SYMBOL WHOLE NOTE +1D15E ; [*1272.0020.0002][.0000.0000.0000] # MUSICAL SYMBOL HALF NOTE +1D15F ; [*1273.0020.0002][.0000.0000.0000] # MUSICAL SYMBOL QUARTER NOTE +1D160 ; [*1273.0020.0002][.0000.0000.0000][.0000.0000.0000] # MUSICAL SYMBOL EIGHTH NOTE +1D161 ; [*1273.0020.0002][.0000.0000.0000][.0000.0000.0000] # MUSICAL SYMBOL SIXTEENTH NOTE +1D162 ; [*1273.0020.0002][.0000.0000.0000][.0000.0000.0000] # MUSICAL SYMBOL THIRTY-SECOND NOTE +1D163 ; [*1273.0020.0002][.0000.0000.0000][.0000.0000.0000] # MUSICAL SYMBOL SIXTY-FOURTH NOTE +1D164 ; [*1273.0020.0002][.0000.0000.0000][.0000.0000.0000] # MUSICAL SYMBOL ONE HUNDRED TWENTY-EIGHTH NOTE 1D165 ; [.0000.0000.0000] # MUSICAL SYMBOL COMBINING STEM 1D166 ; [.0000.0000.0000] # MUSICAL SYMBOL COMBINING SPRECHGESANG STEM 1D167 ; [.0000.0000.0000] # MUSICAL SYMBOL COMBINING TREMOLO-1 1D168 ; [.0000.0000.0000] # MUSICAL SYMBOL COMBINING TREMOLO-2 1D169 ; [.0000.0000.0000] # MUSICAL SYMBOL COMBINING TREMOLO-3 -1D16A ; [*1143.0020.0002] # MUSICAL SYMBOL FINGERED TREMOLO-1 -1D16B ; [*1144.0020.0002] # MUSICAL SYMBOL FINGERED TREMOLO-2 -1D16C ; [*1145.0020.0002] # MUSICAL SYMBOL FINGERED TREMOLO-3 +1D16A ; [*1279.0020.0002] # MUSICAL SYMBOL FINGERED TREMOLO-1 +1D16B ; [*127A.0020.0002] # MUSICAL SYMBOL FINGERED TREMOLO-2 +1D16C ; [*127B.0020.0002] # MUSICAL SYMBOL FINGERED TREMOLO-3 1D16D ; [.0000.0000.0000] # MUSICAL SYMBOL COMBINING AUGMENTATION DOT 1D16E ; [.0000.0000.0000] # MUSICAL SYMBOL COMBINING FLAG-1 1D16F ; [.0000.0000.0000] # MUSICAL SYMBOL COMBINING FLAG-2 @@ -5135,8 +5299,8 @@ FFFC ; [*1AF9.0020.0002] # OBJECT REPLACEMENT CHARACTER 1D180 ; [.0000.0000.0000] # MUSICAL SYMBOL COMBINING MARCATO-STACCATO 1D181 ; [.0000.0000.0000] # MUSICAL SYMBOL COMBINING ACCENT-STACCATO 1D182 ; [.0000.0000.0000] # MUSICAL SYMBOL COMBINING LOURE -1D183 ; [*1146.0020.0002] # MUSICAL SYMBOL ARPEGGIATO UP -1D184 ; [*1147.0020.0002] # MUSICAL SYMBOL ARPEGGIATO DOWN +1D183 ; [*127C.0020.0002] # MUSICAL SYMBOL ARPEGGIATO UP +1D184 ; [*127D.0020.0002] # MUSICAL SYMBOL ARPEGGIATO DOWN 1D185 ; [.0000.0000.0000] # MUSICAL SYMBOL COMBINING DOIT 1D186 ; [.0000.0000.0000] # MUSICAL SYMBOL COMBINING RIP 1D187 ; [.0000.0000.0000] # MUSICAL SYMBOL COMBINING FLIP @@ -5144,787 +5308,797 @@ FFFC ; [*1AF9.0020.0002] # OBJECT REPLACEMENT CHARACTER 1D189 ; [.0000.0000.0000] # MUSICAL SYMBOL COMBINING BEND 1D18A ; [.0000.0000.0000] # MUSICAL SYMBOL COMBINING DOUBLE TONGUE 1D18B ; [.0000.0000.0000] # MUSICAL SYMBOL COMBINING TRIPLE TONGUE -1D18C ; [*1148.0020.0002] # MUSICAL SYMBOL RINFORZANDO -1D18D ; [*1149.0020.0002] # MUSICAL SYMBOL SUBITO -1D18E ; [*114A.0020.0002] # MUSICAL SYMBOL Z -1D18F ; [*114B.0020.0002] # MUSICAL SYMBOL PIANO -1D190 ; [*114C.0020.0002] # MUSICAL SYMBOL MEZZO -1D191 ; [*114D.0020.0002] # MUSICAL SYMBOL FORTE -1D192 ; [*114E.0020.0002] # MUSICAL SYMBOL CRESCENDO -1D193 ; [*114F.0020.0002] # MUSICAL SYMBOL DECRESCENDO -1D194 ; [*1150.0020.0002] # MUSICAL SYMBOL GRACE NOTE SLASH -1D195 ; [*1151.0020.0002] # MUSICAL SYMBOL GRACE NOTE NO SLASH -1D196 ; [*1152.0020.0002] # MUSICAL SYMBOL TR -1D197 ; [*1153.0020.0002] # MUSICAL SYMBOL TURN -1D198 ; [*1154.0020.0002] # MUSICAL SYMBOL INVERTED TURN -1D199 ; [*1155.0020.0002] # MUSICAL SYMBOL TURN SLASH -1D19A ; [*1156.0020.0002] # MUSICAL SYMBOL TURN UP -1D19B ; [*1157.0020.0002] # MUSICAL SYMBOL ORNAMENT STROKE-1 -1D19C ; [*1158.0020.0002] # MUSICAL SYMBOL ORNAMENT STROKE-2 -1D19D ; [*1159.0020.0002] # MUSICAL SYMBOL ORNAMENT STROKE-3 -1D19E ; [*115A.0020.0002] # MUSICAL SYMBOL ORNAMENT STROKE-4 -1D19F ; [*115B.0020.0002] # MUSICAL SYMBOL ORNAMENT STROKE-5 -1D1A0 ; [*115C.0020.0002] # MUSICAL SYMBOL ORNAMENT STROKE-6 -1D1A1 ; [*115D.0020.0002] # MUSICAL SYMBOL ORNAMENT STROKE-7 -1D1A2 ; [*115E.0020.0002] # MUSICAL SYMBOL ORNAMENT STROKE-8 -1D1A3 ; [*115F.0020.0002] # MUSICAL SYMBOL ORNAMENT STROKE-9 -1D1A4 ; [*1160.0020.0002] # MUSICAL SYMBOL ORNAMENT STROKE-10 -1D1A5 ; [*1161.0020.0002] # MUSICAL SYMBOL ORNAMENT STROKE-11 -1D1A6 ; [*1162.0020.0002] # MUSICAL SYMBOL HAUPTSTIMME -1D1A7 ; [*1163.0020.0002] # MUSICAL SYMBOL NEBENSTIMME -1D1A8 ; [*1164.0020.0002] # MUSICAL SYMBOL END OF STIMME -1D1A9 ; [*1165.0020.0002] # MUSICAL SYMBOL DEGREE SLASH +1D18C ; [*127E.0020.0002] # MUSICAL SYMBOL RINFORZANDO +1D18D ; [*127F.0020.0002] # MUSICAL SYMBOL SUBITO +1D18E ; [*1280.0020.0002] # MUSICAL SYMBOL Z +1D18F ; [*1281.0020.0002] # MUSICAL SYMBOL PIANO +1D190 ; [*1282.0020.0002] # MUSICAL SYMBOL MEZZO +1D191 ; [*1283.0020.0002] # MUSICAL SYMBOL FORTE +1D192 ; [*1284.0020.0002] # MUSICAL SYMBOL CRESCENDO +1D193 ; [*1285.0020.0002] # MUSICAL SYMBOL DECRESCENDO +1D194 ; [*1286.0020.0002] # MUSICAL SYMBOL GRACE NOTE SLASH +1D195 ; [*1287.0020.0002] # MUSICAL SYMBOL GRACE NOTE NO SLASH +1D196 ; [*1288.0020.0002] # MUSICAL SYMBOL TR +1D197 ; [*1289.0020.0002] # MUSICAL SYMBOL TURN +1D198 ; [*128A.0020.0002] # MUSICAL SYMBOL INVERTED TURN +1D199 ; [*128B.0020.0002] # MUSICAL SYMBOL TURN SLASH +1D19A ; [*128C.0020.0002] # MUSICAL SYMBOL TURN UP +1D19B ; [*128D.0020.0002] # MUSICAL SYMBOL ORNAMENT STROKE-1 +1D19C ; [*128E.0020.0002] # MUSICAL SYMBOL ORNAMENT STROKE-2 +1D19D ; [*128F.0020.0002] # MUSICAL SYMBOL ORNAMENT STROKE-3 +1D19E ; [*1290.0020.0002] # MUSICAL SYMBOL ORNAMENT STROKE-4 +1D19F ; [*1291.0020.0002] # MUSICAL SYMBOL ORNAMENT STROKE-5 +1D1A0 ; [*1292.0020.0002] # MUSICAL SYMBOL ORNAMENT STROKE-6 +1D1A1 ; [*1293.0020.0002] # MUSICAL SYMBOL ORNAMENT STROKE-7 +1D1A2 ; [*1294.0020.0002] # MUSICAL SYMBOL ORNAMENT STROKE-8 +1D1A3 ; [*1295.0020.0002] # MUSICAL SYMBOL ORNAMENT STROKE-9 +1D1A4 ; [*1296.0020.0002] # MUSICAL SYMBOL ORNAMENT STROKE-10 +1D1A5 ; [*1297.0020.0002] # MUSICAL SYMBOL ORNAMENT STROKE-11 +1D1A6 ; [*1298.0020.0002] # MUSICAL SYMBOL HAUPTSTIMME +1D1A7 ; [*1299.0020.0002] # MUSICAL SYMBOL NEBENSTIMME +1D1A8 ; [*129A.0020.0002] # MUSICAL SYMBOL END OF STIMME +1D1A9 ; [*129B.0020.0002] # MUSICAL SYMBOL DEGREE SLASH 1D1AA ; [.0000.0000.0000] # MUSICAL SYMBOL COMBINING DOWN BOW 1D1AB ; [.0000.0000.0000] # MUSICAL SYMBOL COMBINING UP BOW 1D1AC ; [.0000.0000.0000] # MUSICAL SYMBOL COMBINING HARMONIC 1D1AD ; [.0000.0000.0000] # MUSICAL SYMBOL COMBINING SNAP PIZZICATO -1D1AE ; [*1166.0020.0002] # MUSICAL SYMBOL PEDAL MARK -1D1AF ; [*1167.0020.0002] # MUSICAL SYMBOL PEDAL UP MARK -1D1B0 ; [*1168.0020.0002] # MUSICAL SYMBOL HALF PEDAL MARK -1D1B1 ; [*1169.0020.0002] # MUSICAL SYMBOL GLISSANDO UP -1D1B2 ; [*116A.0020.0002] # MUSICAL SYMBOL GLISSANDO DOWN -1D1B3 ; [*116B.0020.0002] # MUSICAL SYMBOL WITH FINGERNAILS -1D1B4 ; [*116C.0020.0002] # MUSICAL SYMBOL DAMP -1D1B5 ; [*116D.0020.0002] # MUSICAL SYMBOL DAMP ALL -1D1B6 ; [*116E.0020.0002] # MUSICAL SYMBOL MAXIMA -1D1B7 ; [*116F.0020.0002] # MUSICAL SYMBOL LONGA -1D1B8 ; [*1170.0020.0002] # MUSICAL SYMBOL BREVIS -1D1B9 ; [*1171.0020.0002] # MUSICAL SYMBOL SEMIBREVIS WHITE -1D1BA ; [*1172.0020.0002] # MUSICAL SYMBOL SEMIBREVIS BLACK -1D1BB ; [*1171.0020.0002][.0000.0000.0000] # MUSICAL SYMBOL MINIMA -1D1BC ; [*1172.0020.0002][.0000.0000.0000] # MUSICAL SYMBOL MINIMA BLACK -1D1BD ; [*1171.0020.0002][.0000.0000.0000][.0000.0000.0000] # MUSICAL SYMBOL SEMIMINIMA WHITE -1D1BE ; [*1172.0020.0002][.0000.0000.0000][.0000.0000.0000] # MUSICAL SYMBOL SEMIMINIMA BLACK -1D1BF ; [*1171.0020.0002][.0000.0000.0000][.0000.0000.0000] # MUSICAL SYMBOL FUSA WHITE -1D1C0 ; [*1172.0020.0002][.0000.0000.0000][.0000.0000.0000] # MUSICAL SYMBOL FUSA BLACK -1D1C1 ; [*1173.0020.0002] # MUSICAL SYMBOL LONGA PERFECTA REST -1D1C2 ; [*1174.0020.0002] # MUSICAL SYMBOL LONGA IMPERFECTA REST -1D1C3 ; [*1175.0020.0002] # MUSICAL SYMBOL BREVIS REST -1D1C4 ; [*1176.0020.0002] # MUSICAL SYMBOL SEMIBREVIS REST -1D1C5 ; [*1177.0020.0002] # MUSICAL SYMBOL MINIMA REST -1D1C6 ; [*1178.0020.0002] # MUSICAL SYMBOL SEMIMINIMA REST -1D1C7 ; [*1179.0020.0002] # MUSICAL SYMBOL TEMPUS PERFECTUM CUM PROLATIONE PERFECTA -1D1C8 ; [*117A.0020.0002] # MUSICAL SYMBOL TEMPUS PERFECTUM CUM PROLATIONE IMPERFECTA -1D1C9 ; [*117B.0020.0002] # MUSICAL SYMBOL TEMPUS PERFECTUM CUM PROLATIONE PERFECTA DIMINUTION-1 -1D1CA ; [*117C.0020.0002] # MUSICAL SYMBOL TEMPUS IMPERFECTUM CUM PROLATIONE PERFECTA -1D1CB ; [*117D.0020.0002] # MUSICAL SYMBOL TEMPUS IMPERFECTUM CUM PROLATIONE IMPERFECTA -1D1CC ; [*117E.0020.0002] # MUSICAL SYMBOL TEMPUS IMPERFECTUM CUM PROLATIONE IMPERFECTA DIMINUTION-1 -1D1CD ; [*117F.0020.0002] # MUSICAL SYMBOL TEMPUS IMPERFECTUM CUM PROLATIONE IMPERFECTA DIMINUTION-2 -1D1CE ; [*1180.0020.0002] # MUSICAL SYMBOL TEMPUS IMPERFECTUM CUM PROLATIONE IMPERFECTA DIMINUTION-3 -1D1CF ; [*1181.0020.0002] # MUSICAL SYMBOL CROIX -1D1D0 ; [*1182.0020.0002] # MUSICAL SYMBOL GREGORIAN C CLEF -1D1D1 ; [*1183.0020.0002] # MUSICAL SYMBOL GREGORIAN F CLEF -1D1D2 ; [*1184.0020.0002] # MUSICAL SYMBOL SQUARE B -1D1D3 ; [*1185.0020.0002] # MUSICAL SYMBOL VIRGA -1D1D4 ; [*1186.0020.0002] # MUSICAL SYMBOL PODATUS -1D1D5 ; [*1187.0020.0002] # MUSICAL SYMBOL CLIVIS -1D1D6 ; [*1188.0020.0002] # MUSICAL SYMBOL SCANDICUS -1D1D7 ; [*1189.0020.0002] # MUSICAL SYMBOL CLIMACUS -1D1D8 ; [*118A.0020.0002] # MUSICAL SYMBOL TORCULUS -1D1D9 ; [*118B.0020.0002] # MUSICAL SYMBOL PORRECTUS -1D1DA ; [*118C.0020.0002] # MUSICAL SYMBOL PORRECTUS FLEXUS -1D1DB ; [*118D.0020.0002] # MUSICAL SYMBOL SCANDICUS FLEXUS -1D1DC ; [*118E.0020.0002] # MUSICAL SYMBOL TORCULUS RESUPINUS -1D1DD ; [*118F.0020.0002] # MUSICAL SYMBOL PES SUBPUNCTIS -1D1DE ; [*1190.0020.0002] # MUSICAL SYMBOL KIEVAN C CLEF -1D1DF ; [*1191.0020.0002] # MUSICAL SYMBOL KIEVAN END OF PIECE -1D1E0 ; [*1192.0020.0002] # MUSICAL SYMBOL KIEVAN FINAL NOTE -1D1E1 ; [*1193.0020.0002] # MUSICAL SYMBOL KIEVAN RECITATIVE MARK -1D1E2 ; [*1194.0020.0002] # MUSICAL SYMBOL KIEVAN WHOLE NOTE -1D1E3 ; [*1195.0020.0002] # MUSICAL SYMBOL KIEVAN HALF NOTE -1D1E4 ; [*1196.0020.0002] # MUSICAL SYMBOL KIEVAN QUARTER NOTE STEM DOWN -1D1E5 ; [*1197.0020.0002] # MUSICAL SYMBOL KIEVAN QUARTER NOTE STEM UP -1D1E6 ; [*1198.0020.0002] # MUSICAL SYMBOL KIEVAN EIGHTH NOTE STEM DOWN -1D1E7 ; [*1199.0020.0002] # MUSICAL SYMBOL KIEVAN EIGHTH NOTE STEM UP -1D1E8 ; [*119A.0020.0002] # MUSICAL SYMBOL KIEVAN FLAT SIGN -1D200 ; [*119B.0020.0002] # GREEK VOCAL NOTATION SYMBOL-1 -1D201 ; [*119C.0020.0002] # GREEK VOCAL NOTATION SYMBOL-2 -1D202 ; [*119D.0020.0002] # GREEK VOCAL NOTATION SYMBOL-3 -1D203 ; [*119E.0020.0002] # GREEK VOCAL NOTATION SYMBOL-4 -1D204 ; [*119F.0020.0002] # GREEK VOCAL NOTATION SYMBOL-5 -1D205 ; [*11A0.0020.0002] # GREEK VOCAL NOTATION SYMBOL-6 -1D206 ; [*11A1.0020.0002] # GREEK VOCAL NOTATION SYMBOL-7 -1D207 ; [*11A2.0020.0002] # GREEK VOCAL NOTATION SYMBOL-8 -1D208 ; [*11A3.0020.0002] # GREEK VOCAL NOTATION SYMBOL-9 -1D209 ; [*11A4.0020.0002] # GREEK VOCAL NOTATION SYMBOL-10 -1D20A ; [*11A5.0020.0002] # GREEK VOCAL NOTATION SYMBOL-11 -1D20B ; [*11A6.0020.0002] # GREEK VOCAL NOTATION SYMBOL-12 -1D20C ; [*11A7.0020.0002] # GREEK VOCAL NOTATION SYMBOL-13 -1D20D ; [*11A8.0020.0002] # GREEK VOCAL NOTATION SYMBOL-14 -1D20E ; [*11A9.0020.0002] # GREEK VOCAL NOTATION SYMBOL-15 -1D20F ; [*11AA.0020.0002] # GREEK VOCAL NOTATION SYMBOL-16 -1D210 ; [*11AB.0020.0002] # GREEK VOCAL NOTATION SYMBOL-17 -1D211 ; [*11AC.0020.0002] # GREEK VOCAL NOTATION SYMBOL-18 -1D212 ; [*11AD.0020.0002] # GREEK VOCAL NOTATION SYMBOL-19 -1D213 ; [*11AE.0020.0002] # GREEK VOCAL NOTATION SYMBOL-20 -1D214 ; [*11AF.0020.0002] # GREEK VOCAL NOTATION SYMBOL-21 -1D215 ; [*11B0.0020.0002] # GREEK VOCAL NOTATION SYMBOL-22 -1D216 ; [*11B1.0020.0002] # GREEK VOCAL NOTATION SYMBOL-23 -1D217 ; [*11B2.0020.0002] # GREEK VOCAL NOTATION SYMBOL-24 -1D218 ; [*11B3.0020.0002] # GREEK VOCAL NOTATION SYMBOL-50 -1D219 ; [*11B4.0020.0002] # GREEK VOCAL NOTATION SYMBOL-51 -1D21A ; [*11B5.0020.0002] # GREEK VOCAL NOTATION SYMBOL-52 -1D21B ; [*11B6.0020.0002] # GREEK VOCAL NOTATION SYMBOL-53 -1D21C ; [*11B7.0020.0002] # GREEK VOCAL NOTATION SYMBOL-54 -1D21D ; [*11B8.0020.0002] # GREEK INSTRUMENTAL NOTATION SYMBOL-1 -1D21E ; [*11B9.0020.0002] # GREEK INSTRUMENTAL NOTATION SYMBOL-2 -1D21F ; [*11BA.0020.0002] # GREEK INSTRUMENTAL NOTATION SYMBOL-4 -1D220 ; [*11BB.0020.0002] # GREEK INSTRUMENTAL NOTATION SYMBOL-5 -1D221 ; [*11BC.0020.0002] # GREEK INSTRUMENTAL NOTATION SYMBOL-7 -1D222 ; [*11BD.0020.0002] # GREEK INSTRUMENTAL NOTATION SYMBOL-8 -1D223 ; [*11BE.0020.0002] # GREEK INSTRUMENTAL NOTATION SYMBOL-11 -1D224 ; [*11BF.0020.0002] # GREEK INSTRUMENTAL NOTATION SYMBOL-12 -1D225 ; [*11C0.0020.0002] # GREEK INSTRUMENTAL NOTATION SYMBOL-13 -1D226 ; [*11C1.0020.0002] # GREEK INSTRUMENTAL NOTATION SYMBOL-14 -1D227 ; [*11C2.0020.0002] # GREEK INSTRUMENTAL NOTATION SYMBOL-17 -1D228 ; [*11C3.0020.0002] # GREEK INSTRUMENTAL NOTATION SYMBOL-18 -1D229 ; [*11C4.0020.0002] # GREEK INSTRUMENTAL NOTATION SYMBOL-19 -1D22A ; [*11C5.0020.0002] # GREEK INSTRUMENTAL NOTATION SYMBOL-23 -1D22B ; [*11C6.0020.0002] # GREEK INSTRUMENTAL NOTATION SYMBOL-24 -1D22C ; [*11C7.0020.0002] # GREEK INSTRUMENTAL NOTATION SYMBOL-25 -1D22D ; [*11C8.0020.0002] # GREEK INSTRUMENTAL NOTATION SYMBOL-26 -1D22E ; [*11C9.0020.0002] # GREEK INSTRUMENTAL NOTATION SYMBOL-27 -1D22F ; [*11CA.0020.0002] # GREEK INSTRUMENTAL NOTATION SYMBOL-29 -1D230 ; [*11CB.0020.0002] # GREEK INSTRUMENTAL NOTATION SYMBOL-30 -1D231 ; [*11CC.0020.0002] # GREEK INSTRUMENTAL NOTATION SYMBOL-32 -1D232 ; [*11CD.0020.0002] # GREEK INSTRUMENTAL NOTATION SYMBOL-36 -1D233 ; [*11CE.0020.0002] # GREEK INSTRUMENTAL NOTATION SYMBOL-37 -1D234 ; [*11CF.0020.0002] # GREEK INSTRUMENTAL NOTATION SYMBOL-38 -1D235 ; [*11D0.0020.0002] # GREEK INSTRUMENTAL NOTATION SYMBOL-39 -1D236 ; [*11D1.0020.0002] # GREEK INSTRUMENTAL NOTATION SYMBOL-40 -1D237 ; [*11D2.0020.0002] # GREEK INSTRUMENTAL NOTATION SYMBOL-42 -1D238 ; [*11D3.0020.0002] # GREEK INSTRUMENTAL NOTATION SYMBOL-43 -1D239 ; [*11D4.0020.0002] # GREEK INSTRUMENTAL NOTATION SYMBOL-45 -1D23A ; [*11D5.0020.0002] # GREEK INSTRUMENTAL NOTATION SYMBOL-47 -1D23B ; [*11D6.0020.0002] # GREEK INSTRUMENTAL NOTATION SYMBOL-48 -1D23C ; [*11D7.0020.0002] # GREEK INSTRUMENTAL NOTATION SYMBOL-49 -1D23D ; [*11D8.0020.0002] # GREEK INSTRUMENTAL NOTATION SYMBOL-50 -1D23E ; [*11D9.0020.0002] # GREEK INSTRUMENTAL NOTATION SYMBOL-51 -1D23F ; [*11DA.0020.0002] # GREEK INSTRUMENTAL NOTATION SYMBOL-52 -1D240 ; [*11DB.0020.0002] # GREEK INSTRUMENTAL NOTATION SYMBOL-53 -1D241 ; [*11DC.0020.0002] # GREEK INSTRUMENTAL NOTATION SYMBOL-54 +1D1AE ; [*129C.0020.0002] # MUSICAL SYMBOL PEDAL MARK +1D1AF ; [*129D.0020.0002] # MUSICAL SYMBOL PEDAL UP MARK +1D1B0 ; [*129E.0020.0002] # MUSICAL SYMBOL HALF PEDAL MARK +1D1B1 ; [*129F.0020.0002] # MUSICAL SYMBOL GLISSANDO UP +1D1B2 ; [*12A0.0020.0002] # MUSICAL SYMBOL GLISSANDO DOWN +1D1B3 ; [*12A1.0020.0002] # MUSICAL SYMBOL WITH FINGERNAILS +1D1B4 ; [*12A2.0020.0002] # MUSICAL SYMBOL DAMP +1D1B5 ; [*12A3.0020.0002] # MUSICAL SYMBOL DAMP ALL +1D1B6 ; [*12A4.0020.0002] # MUSICAL SYMBOL MAXIMA +1D1B7 ; [*12A5.0020.0002] # MUSICAL SYMBOL LONGA +1D1B8 ; [*12A6.0020.0002] # MUSICAL SYMBOL BREVIS +1D1B9 ; [*12A7.0020.0002] # MUSICAL SYMBOL SEMIBREVIS WHITE +1D1BA ; [*12A8.0020.0002] # MUSICAL SYMBOL SEMIBREVIS BLACK +1D1BB ; [*12A7.0020.0002][.0000.0000.0000] # MUSICAL SYMBOL MINIMA +1D1BC ; [*12A8.0020.0002][.0000.0000.0000] # MUSICAL SYMBOL MINIMA BLACK +1D1BD ; [*12A7.0020.0002][.0000.0000.0000][.0000.0000.0000] # MUSICAL SYMBOL SEMIMINIMA WHITE +1D1BE ; [*12A8.0020.0002][.0000.0000.0000][.0000.0000.0000] # MUSICAL SYMBOL SEMIMINIMA BLACK +1D1BF ; [*12A7.0020.0002][.0000.0000.0000][.0000.0000.0000] # MUSICAL SYMBOL FUSA WHITE +1D1C0 ; [*12A8.0020.0002][.0000.0000.0000][.0000.0000.0000] # MUSICAL SYMBOL FUSA BLACK +1D1C1 ; [*12A9.0020.0002] # MUSICAL SYMBOL LONGA PERFECTA REST +1D1C2 ; [*12AA.0020.0002] # MUSICAL SYMBOL LONGA IMPERFECTA REST +1D1C3 ; [*12AB.0020.0002] # MUSICAL SYMBOL BREVIS REST +1D1C4 ; [*12AC.0020.0002] # MUSICAL SYMBOL SEMIBREVIS REST +1D1C5 ; [*12AD.0020.0002] # MUSICAL SYMBOL MINIMA REST +1D1C6 ; [*12AE.0020.0002] # MUSICAL SYMBOL SEMIMINIMA REST +1D1C7 ; [*12AF.0020.0002] # MUSICAL SYMBOL TEMPUS PERFECTUM CUM PROLATIONE PERFECTA +1D1C8 ; [*12B0.0020.0002] # MUSICAL SYMBOL TEMPUS PERFECTUM CUM PROLATIONE IMPERFECTA +1D1C9 ; [*12B1.0020.0002] # MUSICAL SYMBOL TEMPUS PERFECTUM CUM PROLATIONE PERFECTA DIMINUTION-1 +1D1CA ; [*12B2.0020.0002] # MUSICAL SYMBOL TEMPUS IMPERFECTUM CUM PROLATIONE PERFECTA +1D1CB ; [*12B3.0020.0002] # MUSICAL SYMBOL TEMPUS IMPERFECTUM CUM PROLATIONE IMPERFECTA +1D1CC ; [*12B4.0020.0002] # MUSICAL SYMBOL TEMPUS IMPERFECTUM CUM PROLATIONE IMPERFECTA DIMINUTION-1 +1D1CD ; [*12B5.0020.0002] # MUSICAL SYMBOL TEMPUS IMPERFECTUM CUM PROLATIONE IMPERFECTA DIMINUTION-2 +1D1CE ; [*12B6.0020.0002] # MUSICAL SYMBOL TEMPUS IMPERFECTUM CUM PROLATIONE IMPERFECTA DIMINUTION-3 +1D1CF ; [*12B7.0020.0002] # MUSICAL SYMBOL CROIX +1D1D0 ; [*12B8.0020.0002] # MUSICAL SYMBOL GREGORIAN C CLEF +1D1D1 ; [*12B9.0020.0002] # MUSICAL SYMBOL GREGORIAN F CLEF +1D1D2 ; [*12BA.0020.0002] # MUSICAL SYMBOL SQUARE B +1D1D3 ; [*12BB.0020.0002] # MUSICAL SYMBOL VIRGA +1D1D4 ; [*12BC.0020.0002] # MUSICAL SYMBOL PODATUS +1D1D5 ; [*12BD.0020.0002] # MUSICAL SYMBOL CLIVIS +1D1D6 ; [*12BE.0020.0002] # MUSICAL SYMBOL SCANDICUS +1D1D7 ; [*12BF.0020.0002] # MUSICAL SYMBOL CLIMACUS +1D1D8 ; [*12C0.0020.0002] # MUSICAL SYMBOL TORCULUS +1D1D9 ; [*12C1.0020.0002] # MUSICAL SYMBOL PORRECTUS +1D1DA ; [*12C2.0020.0002] # MUSICAL SYMBOL PORRECTUS FLEXUS +1D1DB ; [*12C3.0020.0002] # MUSICAL SYMBOL SCANDICUS FLEXUS +1D1DC ; [*12C4.0020.0002] # MUSICAL SYMBOL TORCULUS RESUPINUS +1D1DD ; [*12C5.0020.0002] # MUSICAL SYMBOL PES SUBPUNCTIS +1D1DE ; [*12C6.0020.0002] # MUSICAL SYMBOL KIEVAN C CLEF +1D1DF ; [*12C7.0020.0002] # MUSICAL SYMBOL KIEVAN END OF PIECE +1D1E0 ; [*12C8.0020.0002] # MUSICAL SYMBOL KIEVAN FINAL NOTE +1D1E1 ; [*12C9.0020.0002] # MUSICAL SYMBOL KIEVAN RECITATIVE MARK +1D1E2 ; [*12CA.0020.0002] # MUSICAL SYMBOL KIEVAN WHOLE NOTE +1D1E3 ; [*12CB.0020.0002] # MUSICAL SYMBOL KIEVAN HALF NOTE +1D1E4 ; [*12CC.0020.0002] # MUSICAL SYMBOL KIEVAN QUARTER NOTE STEM DOWN +1D1E5 ; [*12CD.0020.0002] # MUSICAL SYMBOL KIEVAN QUARTER NOTE STEM UP +1D1E6 ; [*12CE.0020.0002] # MUSICAL SYMBOL KIEVAN EIGHTH NOTE STEM DOWN +1D1E7 ; [*12CF.0020.0002] # MUSICAL SYMBOL KIEVAN EIGHTH NOTE STEM UP +1D1E8 ; [*12D0.0020.0002] # MUSICAL SYMBOL KIEVAN FLAT SIGN +1D200 ; [*12D1.0020.0002] # GREEK VOCAL NOTATION SYMBOL-1 +1D201 ; [*12D2.0020.0002] # GREEK VOCAL NOTATION SYMBOL-2 +1D202 ; [*12D3.0020.0002] # GREEK VOCAL NOTATION SYMBOL-3 +1D203 ; [*12D4.0020.0002] # GREEK VOCAL NOTATION SYMBOL-4 +1D204 ; [*12D5.0020.0002] # GREEK VOCAL NOTATION SYMBOL-5 +1D205 ; [*12D6.0020.0002] # GREEK VOCAL NOTATION SYMBOL-6 +1D206 ; [*12D7.0020.0002] # GREEK VOCAL NOTATION SYMBOL-7 +1D207 ; [*12D8.0020.0002] # GREEK VOCAL NOTATION SYMBOL-8 +1D208 ; [*12D9.0020.0002] # GREEK VOCAL NOTATION SYMBOL-9 +1D209 ; [*12DA.0020.0002] # GREEK VOCAL NOTATION SYMBOL-10 +1D20A ; [*12DB.0020.0002] # GREEK VOCAL NOTATION SYMBOL-11 +1D20B ; [*12DC.0020.0002] # GREEK VOCAL NOTATION SYMBOL-12 +1D20C ; [*12DD.0020.0002] # GREEK VOCAL NOTATION SYMBOL-13 +1D20D ; [*12DE.0020.0002] # GREEK VOCAL NOTATION SYMBOL-14 +1D20E ; [*12DF.0020.0002] # GREEK VOCAL NOTATION SYMBOL-15 +1D20F ; [*12E0.0020.0002] # GREEK VOCAL NOTATION SYMBOL-16 +1D210 ; [*12E1.0020.0002] # GREEK VOCAL NOTATION SYMBOL-17 +1D211 ; [*12E2.0020.0002] # GREEK VOCAL NOTATION SYMBOL-18 +1D212 ; [*12E3.0020.0002] # GREEK VOCAL NOTATION SYMBOL-19 +1D213 ; [*12E4.0020.0002] # GREEK VOCAL NOTATION SYMBOL-20 +1D214 ; [*12E5.0020.0002] # GREEK VOCAL NOTATION SYMBOL-21 +1D215 ; [*12E6.0020.0002] # GREEK VOCAL NOTATION SYMBOL-22 +1D216 ; [*12E7.0020.0002] # GREEK VOCAL NOTATION SYMBOL-23 +1D217 ; [*12E8.0020.0002] # GREEK VOCAL NOTATION SYMBOL-24 +1D218 ; [*12E9.0020.0002] # GREEK VOCAL NOTATION SYMBOL-50 +1D219 ; [*12EA.0020.0002] # GREEK VOCAL NOTATION SYMBOL-51 +1D21A ; [*12EB.0020.0002] # GREEK VOCAL NOTATION SYMBOL-52 +1D21B ; [*12EC.0020.0002] # GREEK VOCAL NOTATION SYMBOL-53 +1D21C ; [*12ED.0020.0002] # GREEK VOCAL NOTATION SYMBOL-54 +1D21D ; [*12EE.0020.0002] # GREEK INSTRUMENTAL NOTATION SYMBOL-1 +1D21E ; [*12EF.0020.0002] # GREEK INSTRUMENTAL NOTATION SYMBOL-2 +1D21F ; [*12F0.0020.0002] # GREEK INSTRUMENTAL NOTATION SYMBOL-4 +1D220 ; [*12F1.0020.0002] # GREEK INSTRUMENTAL NOTATION SYMBOL-5 +1D221 ; [*12F2.0020.0002] # GREEK INSTRUMENTAL NOTATION SYMBOL-7 +1D222 ; [*12F3.0020.0002] # GREEK INSTRUMENTAL NOTATION SYMBOL-8 +1D223 ; [*12F4.0020.0002] # GREEK INSTRUMENTAL NOTATION SYMBOL-11 +1D224 ; [*12F5.0020.0002] # GREEK INSTRUMENTAL NOTATION SYMBOL-12 +1D225 ; [*12F6.0020.0002] # GREEK INSTRUMENTAL NOTATION SYMBOL-13 +1D226 ; [*12F7.0020.0002] # GREEK INSTRUMENTAL NOTATION SYMBOL-14 +1D227 ; [*12F8.0020.0002] # GREEK INSTRUMENTAL NOTATION SYMBOL-17 +1D228 ; [*12F9.0020.0002] # GREEK INSTRUMENTAL NOTATION SYMBOL-18 +1D229 ; [*12FA.0020.0002] # GREEK INSTRUMENTAL NOTATION SYMBOL-19 +1D22A ; [*12FB.0020.0002] # GREEK INSTRUMENTAL NOTATION SYMBOL-23 +1D22B ; [*12FC.0020.0002] # GREEK INSTRUMENTAL NOTATION SYMBOL-24 +1D22C ; [*12FD.0020.0002] # GREEK INSTRUMENTAL NOTATION SYMBOL-25 +1D22D ; [*12FE.0020.0002] # GREEK INSTRUMENTAL NOTATION SYMBOL-26 +1D22E ; [*12FF.0020.0002] # GREEK INSTRUMENTAL NOTATION SYMBOL-27 +1D22F ; [*1300.0020.0002] # GREEK INSTRUMENTAL NOTATION SYMBOL-29 +1D230 ; [*1301.0020.0002] # GREEK INSTRUMENTAL NOTATION SYMBOL-30 +1D231 ; [*1302.0020.0002] # GREEK INSTRUMENTAL NOTATION SYMBOL-32 +1D232 ; [*1303.0020.0002] # GREEK INSTRUMENTAL NOTATION SYMBOL-36 +1D233 ; [*1304.0020.0002] # GREEK INSTRUMENTAL NOTATION SYMBOL-37 +1D234 ; [*1305.0020.0002] # GREEK INSTRUMENTAL NOTATION SYMBOL-38 +1D235 ; [*1306.0020.0002] # GREEK INSTRUMENTAL NOTATION SYMBOL-39 +1D236 ; [*1307.0020.0002] # GREEK INSTRUMENTAL NOTATION SYMBOL-40 +1D237 ; [*1308.0020.0002] # GREEK INSTRUMENTAL NOTATION SYMBOL-42 +1D238 ; [*1309.0020.0002] # GREEK INSTRUMENTAL NOTATION SYMBOL-43 +1D239 ; [*130A.0020.0002] # GREEK INSTRUMENTAL NOTATION SYMBOL-45 +1D23A ; [*130B.0020.0002] # GREEK INSTRUMENTAL NOTATION SYMBOL-47 +1D23B ; [*130C.0020.0002] # GREEK INSTRUMENTAL NOTATION SYMBOL-48 +1D23C ; [*130D.0020.0002] # GREEK INSTRUMENTAL NOTATION SYMBOL-49 +1D23D ; [*130E.0020.0002] # GREEK INSTRUMENTAL NOTATION SYMBOL-50 +1D23E ; [*130F.0020.0002] # GREEK INSTRUMENTAL NOTATION SYMBOL-51 +1D23F ; [*1310.0020.0002] # GREEK INSTRUMENTAL NOTATION SYMBOL-52 +1D240 ; [*1311.0020.0002] # GREEK INSTRUMENTAL NOTATION SYMBOL-53 +1D241 ; [*1312.0020.0002] # GREEK INSTRUMENTAL NOTATION SYMBOL-54 1D242 ; [.0000.0000.0000] # COMBINING GREEK MUSICAL TRISEME 1D243 ; [.0000.0000.0000] # COMBINING GREEK MUSICAL TETRASEME 1D244 ; [.0000.0000.0000] # COMBINING GREEK MUSICAL PENTASEME -1D245 ; [*11DD.0020.0002] # GREEK MUSICAL LEIMMA -1D300 ; [*0F02.0020.0002] # MONOGRAM FOR EARTH -1D301 ; [*0F03.0020.0002] # DIGRAM FOR HEAVENLY EARTH -1D302 ; [*0F04.0020.0002] # DIGRAM FOR HUMAN EARTH -1D303 ; [*0F05.0020.0002] # DIGRAM FOR EARTHLY HEAVEN -1D304 ; [*0F06.0020.0002] # DIGRAM FOR EARTHLY HUMAN -1D305 ; [*0F07.0020.0002] # DIGRAM FOR EARTH -1D306 ; [*0F08.0020.0002] # TETRAGRAM FOR CENTRE -1D307 ; [*0F09.0020.0002] # TETRAGRAM FOR FULL CIRCLE -1D308 ; [*0F0A.0020.0002] # TETRAGRAM FOR MIRED -1D309 ; [*0F0B.0020.0002] # TETRAGRAM FOR BARRIER -1D30A ; [*0F0C.0020.0002] # TETRAGRAM FOR KEEPING SMALL -1D30B ; [*0F0D.0020.0002] # TETRAGRAM FOR CONTRARIETY -1D30C ; [*0F0E.0020.0002] # TETRAGRAM FOR ASCENT -1D30D ; [*0F0F.0020.0002] # TETRAGRAM FOR OPPOSITION -1D30E ; [*0F10.0020.0002] # TETRAGRAM FOR BRANCHING OUT -1D30F ; [*0F11.0020.0002] # TETRAGRAM FOR DEFECTIVENESS OR DISTORTION -1D310 ; [*0F12.0020.0002] # TETRAGRAM FOR DIVERGENCE -1D311 ; [*0F13.0020.0002] # TETRAGRAM FOR YOUTHFULNESS -1D312 ; [*0F14.0020.0002] # TETRAGRAM FOR INCREASE -1D313 ; [*0F15.0020.0002] # TETRAGRAM FOR PENETRATION -1D314 ; [*0F16.0020.0002] # TETRAGRAM FOR REACH -1D315 ; [*0F17.0020.0002] # TETRAGRAM FOR CONTACT -1D316 ; [*0F18.0020.0002] # TETRAGRAM FOR HOLDING BACK -1D317 ; [*0F19.0020.0002] # TETRAGRAM FOR WAITING -1D318 ; [*0F1A.0020.0002] # TETRAGRAM FOR FOLLOWING -1D319 ; [*0F1B.0020.0002] # TETRAGRAM FOR ADVANCE -1D31A ; [*0F1C.0020.0002] # TETRAGRAM FOR RELEASE -1D31B ; [*0F1D.0020.0002] # TETRAGRAM FOR RESISTANCE -1D31C ; [*0F1E.0020.0002] # TETRAGRAM FOR EASE -1D31D ; [*0F1F.0020.0002] # TETRAGRAM FOR JOY -1D31E ; [*0F20.0020.0002] # TETRAGRAM FOR CONTENTION -1D31F ; [*0F21.0020.0002] # TETRAGRAM FOR ENDEAVOUR -1D320 ; [*0F22.0020.0002] # TETRAGRAM FOR DUTIES -1D321 ; [*0F23.0020.0002] # TETRAGRAM FOR CHANGE -1D322 ; [*0F24.0020.0002] # TETRAGRAM FOR DECISIVENESS -1D323 ; [*0F25.0020.0002] # TETRAGRAM FOR BOLD RESOLUTION -1D324 ; [*0F26.0020.0002] # TETRAGRAM FOR PACKING -1D325 ; [*0F27.0020.0002] # TETRAGRAM FOR LEGION -1D326 ; [*0F28.0020.0002] # TETRAGRAM FOR CLOSENESS -1D327 ; [*0F29.0020.0002] # TETRAGRAM FOR KINSHIP -1D328 ; [*0F2A.0020.0002] # TETRAGRAM FOR GATHERING -1D329 ; [*0F2B.0020.0002] # TETRAGRAM FOR STRENGTH -1D32A ; [*0F2C.0020.0002] # TETRAGRAM FOR PURITY -1D32B ; [*0F2D.0020.0002] # TETRAGRAM FOR FULLNESS -1D32C ; [*0F2E.0020.0002] # TETRAGRAM FOR RESIDENCE -1D32D ; [*0F2F.0020.0002] # TETRAGRAM FOR LAW OR MODEL -1D32E ; [*0F30.0020.0002] # TETRAGRAM FOR RESPONSE -1D32F ; [*0F31.0020.0002] # TETRAGRAM FOR GOING TO MEET -1D330 ; [*0F32.0020.0002] # TETRAGRAM FOR ENCOUNTERS -1D331 ; [*0F33.0020.0002] # TETRAGRAM FOR STOVE -1D332 ; [*0F34.0020.0002] # TETRAGRAM FOR GREATNESS -1D333 ; [*0F35.0020.0002] # TETRAGRAM FOR ENLARGEMENT -1D334 ; [*0F36.0020.0002] # TETRAGRAM FOR PATTERN -1D335 ; [*0F37.0020.0002] # TETRAGRAM FOR RITUAL -1D336 ; [*0F38.0020.0002] # TETRAGRAM FOR FLIGHT -1D337 ; [*0F39.0020.0002] # TETRAGRAM FOR VASTNESS OR WASTING -1D338 ; [*0F3A.0020.0002] # TETRAGRAM FOR CONSTANCY -1D339 ; [*0F3B.0020.0002] # TETRAGRAM FOR MEASURE -1D33A ; [*0F3C.0020.0002] # TETRAGRAM FOR ETERNITY -1D33B ; [*0F3D.0020.0002] # TETRAGRAM FOR UNITY -1D33C ; [*0F3E.0020.0002] # TETRAGRAM FOR DIMINISHMENT -1D33D ; [*0F3F.0020.0002] # TETRAGRAM FOR CLOSED MOUTH -1D33E ; [*0F40.0020.0002] # TETRAGRAM FOR GUARDEDNESS -1D33F ; [*0F41.0020.0002] # TETRAGRAM FOR GATHERING IN -1D340 ; [*0F42.0020.0002] # TETRAGRAM FOR MASSING -1D341 ; [*0F43.0020.0002] # TETRAGRAM FOR ACCUMULATION -1D342 ; [*0F44.0020.0002] # TETRAGRAM FOR EMBELLISHMENT -1D343 ; [*0F45.0020.0002] # TETRAGRAM FOR DOUBT -1D344 ; [*0F46.0020.0002] # TETRAGRAM FOR WATCH -1D345 ; [*0F47.0020.0002] # TETRAGRAM FOR SINKING -1D346 ; [*0F48.0020.0002] # TETRAGRAM FOR INNER -1D347 ; [*0F49.0020.0002] # TETRAGRAM FOR DEPARTURE -1D348 ; [*0F4A.0020.0002] # TETRAGRAM FOR DARKENING -1D349 ; [*0F4B.0020.0002] # TETRAGRAM FOR DIMMING -1D34A ; [*0F4C.0020.0002] # TETRAGRAM FOR EXHAUSTION -1D34B ; [*0F4D.0020.0002] # TETRAGRAM FOR SEVERANCE -1D34C ; [*0F4E.0020.0002] # TETRAGRAM FOR STOPPAGE -1D34D ; [*0F4F.0020.0002] # TETRAGRAM FOR HARDNESS -1D34E ; [*0F50.0020.0002] # TETRAGRAM FOR COMPLETION -1D34F ; [*0F51.0020.0002] # TETRAGRAM FOR CLOSURE -1D350 ; [*0F52.0020.0002] # TETRAGRAM FOR FAILURE -1D351 ; [*0F53.0020.0002] # TETRAGRAM FOR AGGRAVATION -1D352 ; [*0F54.0020.0002] # TETRAGRAM FOR COMPLIANCE -1D353 ; [*0F55.0020.0002] # TETRAGRAM FOR ON THE VERGE -1D354 ; [*0F56.0020.0002] # TETRAGRAM FOR DIFFICULTIES -1D355 ; [*0F57.0020.0002] # TETRAGRAM FOR LABOURING -1D356 ; [*0F58.0020.0002] # TETRAGRAM FOR FOSTERING -1D369 ; [*1C53.0020.0002] # COUNTING ROD TENS DIGIT ONE -1D36A ; [*1C54.0020.0002] # COUNTING ROD TENS DIGIT TWO -1D36B ; [*1C55.0020.0002] # COUNTING ROD TENS DIGIT THREE -1D36C ; [*1C56.0020.0002] # COUNTING ROD TENS DIGIT FOUR -1D36D ; [*1C57.0020.0002] # COUNTING ROD TENS DIGIT FIVE -1D36E ; [*1C58.0020.0002] # COUNTING ROD TENS DIGIT SIX -1D36F ; [*1C59.0020.0002] # COUNTING ROD TENS DIGIT SEVEN -1D370 ; [*1C5A.0020.0002] # COUNTING ROD TENS DIGIT EIGHT -1D371 ; [*1C5B.0020.0002] # COUNTING ROD TENS DIGIT NINE -1D6C1 ; [*0622.0020.0005] # MATHEMATICAL BOLD NABLA -1D6DB ; [*061E.0020.0005] # MATHEMATICAL BOLD PARTIAL DIFFERENTIAL -1D6FB ; [*0622.0020.0005] # MATHEMATICAL ITALIC NABLA -1D715 ; [*061E.0020.0005] # MATHEMATICAL ITALIC PARTIAL DIFFERENTIAL -1D735 ; [*0622.0020.0005] # MATHEMATICAL BOLD ITALIC NABLA -1D74F ; [*061E.0020.0005] # MATHEMATICAL BOLD ITALIC PARTIAL DIFFERENTIAL -1D76F ; [*0622.0020.0005] # MATHEMATICAL SANS-SERIF BOLD NABLA -1D789 ; [*061E.0020.0005] # MATHEMATICAL SANS-SERIF BOLD PARTIAL DIFFERENTIAL -1D7A9 ; [*0622.0020.0005] # MATHEMATICAL SANS-SERIF BOLD ITALIC NABLA -1D7C3 ; [*061E.0020.0005] # MATHEMATICAL SANS-SERIF BOLD ITALIC PARTIAL DIFFERENTIAL -1D800 ; [*18A3.0020.0002] # SIGNWRITING HAND-FIST INDEX -1D801 ; [*18A4.0020.0002] # SIGNWRITING HAND-CIRCLE INDEX -1D802 ; [*18A5.0020.0002] # SIGNWRITING HAND-CUP INDEX -1D803 ; [*18A6.0020.0002] # SIGNWRITING HAND-OVAL INDEX -1D804 ; [*18A7.0020.0002] # SIGNWRITING HAND-HINGE INDEX -1D805 ; [*18A8.0020.0002] # SIGNWRITING HAND-ANGLE INDEX -1D806 ; [*18A9.0020.0002] # SIGNWRITING HAND-FIST INDEX BENT -1D807 ; [*18AA.0020.0002] # SIGNWRITING HAND-CIRCLE INDEX BENT -1D808 ; [*18AB.0020.0002] # SIGNWRITING HAND-FIST THUMB UNDER INDEX BENT -1D809 ; [*18AC.0020.0002] # SIGNWRITING HAND-FIST INDEX RAISED KNUCKLE -1D80A ; [*18AD.0020.0002] # SIGNWRITING HAND-FIST INDEX CUPPED -1D80B ; [*18AE.0020.0002] # SIGNWRITING HAND-FIST INDEX HINGED -1D80C ; [*18AF.0020.0002] # SIGNWRITING HAND-FIST INDEX HINGED LOW -1D80D ; [*18B0.0020.0002] # SIGNWRITING HAND-CIRCLE INDEX HINGE -1D80E ; [*18B1.0020.0002] # SIGNWRITING HAND-FIST INDEX MIDDLE -1D80F ; [*18B2.0020.0002] # SIGNWRITING HAND-CIRCLE INDEX MIDDLE -1D810 ; [*18B3.0020.0002] # SIGNWRITING HAND-FIST INDEX MIDDLE BENT -1D811 ; [*18B4.0020.0002] # SIGNWRITING HAND-FIST INDEX MIDDLE RAISED KNUCKLES -1D812 ; [*18B5.0020.0002] # SIGNWRITING HAND-FIST INDEX MIDDLE HINGED -1D813 ; [*18B6.0020.0002] # SIGNWRITING HAND-FIST INDEX UP MIDDLE HINGED -1D814 ; [*18B7.0020.0002] # SIGNWRITING HAND-FIST INDEX HINGED MIDDLE UP -1D815 ; [*18B8.0020.0002] # SIGNWRITING HAND-FIST INDEX MIDDLE CONJOINED -1D816 ; [*18B9.0020.0002] # SIGNWRITING HAND-FIST INDEX MIDDLE CONJOINED INDEX BENT -1D817 ; [*18BA.0020.0002] # SIGNWRITING HAND-FIST INDEX MIDDLE CONJOINED MIDDLE BENT -1D818 ; [*18BB.0020.0002] # SIGNWRITING HAND-FIST INDEX MIDDLE CONJOINED CUPPED -1D819 ; [*18BC.0020.0002] # SIGNWRITING HAND-FIST INDEX MIDDLE CONJOINED HINGED -1D81A ; [*18BD.0020.0002] # SIGNWRITING HAND-FIST INDEX MIDDLE CROSSED -1D81B ; [*18BE.0020.0002] # SIGNWRITING HAND-CIRCLE INDEX MIDDLE CROSSED -1D81C ; [*18BF.0020.0002] # SIGNWRITING HAND-FIST MIDDLE BENT OVER INDEX -1D81D ; [*18C0.0020.0002] # SIGNWRITING HAND-FIST INDEX BENT OVER MIDDLE -1D81E ; [*18C1.0020.0002] # SIGNWRITING HAND-FIST INDEX MIDDLE THUMB -1D81F ; [*18C2.0020.0002] # SIGNWRITING HAND-CIRCLE INDEX MIDDLE THUMB -1D820 ; [*18C3.0020.0002] # SIGNWRITING HAND-FIST INDEX MIDDLE STRAIGHT THUMB BENT -1D821 ; [*18C4.0020.0002] # SIGNWRITING HAND-FIST INDEX MIDDLE BENT THUMB STRAIGHT -1D822 ; [*18C5.0020.0002] # SIGNWRITING HAND-FIST INDEX MIDDLE THUMB BENT -1D823 ; [*18C6.0020.0002] # SIGNWRITING HAND-FIST INDEX MIDDLE HINGED SPREAD THUMB SIDE -1D824 ; [*18C7.0020.0002] # SIGNWRITING HAND-FIST INDEX UP MIDDLE HINGED THUMB SIDE -1D825 ; [*18C8.0020.0002] # SIGNWRITING HAND-FIST INDEX UP MIDDLE HINGED THUMB CONJOINED -1D826 ; [*18C9.0020.0002] # SIGNWRITING HAND-FIST INDEX HINGED MIDDLE UP THUMB SIDE -1D827 ; [*18CA.0020.0002] # SIGNWRITING HAND-FIST INDEX MIDDLE UP SPREAD THUMB FORWARD -1D828 ; [*18CB.0020.0002] # SIGNWRITING HAND-FIST INDEX MIDDLE THUMB CUPPED -1D829 ; [*18CC.0020.0002] # SIGNWRITING HAND-FIST INDEX MIDDLE THUMB CIRCLED -1D82A ; [*18CD.0020.0002] # SIGNWRITING HAND-FIST INDEX MIDDLE THUMB HOOKED -1D82B ; [*18CE.0020.0002] # SIGNWRITING HAND-FIST INDEX MIDDLE THUMB HINGED -1D82C ; [*18CF.0020.0002] # SIGNWRITING HAND-FIST THUMB BETWEEN INDEX MIDDLE STRAIGHT -1D82D ; [*18D0.0020.0002] # SIGNWRITING HAND-FIST INDEX MIDDLE CONJOINED THUMB SIDE -1D82E ; [*18D1.0020.0002] # SIGNWRITING HAND-FIST INDEX MIDDLE CONJOINED THUMB SIDE CONJOINED -1D82F ; [*18D2.0020.0002] # SIGNWRITING HAND-FIST INDEX MIDDLE CONJOINED THUMB SIDE BENT -1D830 ; [*18D3.0020.0002] # SIGNWRITING HAND-FIST MIDDLE THUMB HOOKED INDEX UP -1D831 ; [*18D4.0020.0002] # SIGNWRITING HAND-FIST INDEX THUMB HOOKED MIDDLE UP -1D832 ; [*18D5.0020.0002] # SIGNWRITING HAND-FIST INDEX MIDDLE CONJOINED HINGED THUMB SIDE -1D833 ; [*18D6.0020.0002] # SIGNWRITING HAND-FIST INDEX MIDDLE CROSSED THUMB SIDE -1D834 ; [*18D7.0020.0002] # SIGNWRITING HAND-FIST INDEX MIDDLE CONJOINED THUMB FORWARD -1D835 ; [*18D8.0020.0002] # SIGNWRITING HAND-FIST INDEX MIDDLE CONJOINED CUPPED THUMB FORWARD -1D836 ; [*18D9.0020.0002] # SIGNWRITING HAND-FIST MIDDLE THUMB CUPPED INDEX UP -1D837 ; [*18DA.0020.0002] # SIGNWRITING HAND-FIST INDEX THUMB CUPPED MIDDLE UP -1D838 ; [*18DB.0020.0002] # SIGNWRITING HAND-FIST MIDDLE THUMB CIRCLED INDEX UP -1D839 ; [*18DC.0020.0002] # SIGNWRITING HAND-FIST MIDDLE THUMB CIRCLED INDEX HINGED -1D83A ; [*18DD.0020.0002] # SIGNWRITING HAND-FIST INDEX THUMB ANGLED OUT MIDDLE UP -1D83B ; [*18DE.0020.0002] # SIGNWRITING HAND-FIST INDEX THUMB ANGLED IN MIDDLE UP -1D83C ; [*18DF.0020.0002] # SIGNWRITING HAND-FIST INDEX THUMB CIRCLED MIDDLE UP -1D83D ; [*18E0.0020.0002] # SIGNWRITING HAND-FIST INDEX MIDDLE THUMB CONJOINED HINGED -1D83E ; [*18E1.0020.0002] # SIGNWRITING HAND-FIST INDEX MIDDLE THUMB ANGLED OUT -1D83F ; [*18E2.0020.0002] # SIGNWRITING HAND-FIST INDEX MIDDLE THUMB ANGLED -1D840 ; [*18E3.0020.0002] # SIGNWRITING HAND-FIST MIDDLE THUMB ANGLED OUT INDEX UP -1D841 ; [*18E4.0020.0002] # SIGNWRITING HAND-FIST MIDDLE THUMB ANGLED OUT INDEX CROSSED -1D842 ; [*18E5.0020.0002] # SIGNWRITING HAND-FIST MIDDLE THUMB ANGLED INDEX UP -1D843 ; [*18E6.0020.0002] # SIGNWRITING HAND-FIST INDEX THUMB HOOKED MIDDLE HINGED -1D844 ; [*18E7.0020.0002] # SIGNWRITING HAND-FLAT FOUR FINGERS -1D845 ; [*18E8.0020.0002] # SIGNWRITING HAND-FLAT FOUR FINGERS BENT -1D846 ; [*18E9.0020.0002] # SIGNWRITING HAND-FLAT FOUR FINGERS HINGED -1D847 ; [*18EA.0020.0002] # SIGNWRITING HAND-FLAT FOUR FINGERS CONJOINED -1D848 ; [*18EB.0020.0002] # SIGNWRITING HAND-FLAT FOUR FINGERS CONJOINED SPLIT -1D849 ; [*18EC.0020.0002] # SIGNWRITING HAND-CLAW FOUR FINGERS CONJOINED -1D84A ; [*18ED.0020.0002] # SIGNWRITING HAND-FIST FOUR FINGERS CONJOINED BENT -1D84B ; [*18EE.0020.0002] # SIGNWRITING HAND-HINGE FOUR FINGERS CONJOINED -1D84C ; [*18EF.0020.0002] # SIGNWRITING HAND-FLAT FIVE FINGERS SPREAD -1D84D ; [*18F0.0020.0002] # SIGNWRITING HAND-FLAT HEEL FIVE FINGERS SPREAD -1D84E ; [*18F1.0020.0002] # SIGNWRITING HAND-FLAT FIVE FINGERS SPREAD FOUR BENT -1D84F ; [*18F2.0020.0002] # SIGNWRITING HAND-FLAT HEEL FIVE FINGERS SPREAD FOUR BENT -1D850 ; [*18F3.0020.0002] # SIGNWRITING HAND-FLAT FIVE FINGERS SPREAD BENT -1D851 ; [*18F4.0020.0002] # SIGNWRITING HAND-FLAT HEEL FIVE FINGERS SPREAD BENT -1D852 ; [*18F5.0020.0002] # SIGNWRITING HAND-FLAT FIVE FINGERS SPREAD THUMB FORWARD -1D853 ; [*18F6.0020.0002] # SIGNWRITING HAND-CUP FIVE FINGERS SPREAD -1D854 ; [*18F7.0020.0002] # SIGNWRITING HAND-CUP FIVE FINGERS SPREAD OPEN -1D855 ; [*18F8.0020.0002] # SIGNWRITING HAND-HINGE FIVE FINGERS SPREAD OPEN -1D856 ; [*18F9.0020.0002] # SIGNWRITING HAND-OVAL FIVE FINGERS SPREAD -1D857 ; [*18FA.0020.0002] # SIGNWRITING HAND-FLAT FIVE FINGERS SPREAD HINGED -1D858 ; [*18FB.0020.0002] # SIGNWRITING HAND-FLAT FIVE FINGERS SPREAD HINGED THUMB SIDE -1D859 ; [*18FC.0020.0002] # SIGNWRITING HAND-FLAT FIVE FINGERS SPREAD HINGED NO THUMB -1D85A ; [*18FD.0020.0002] # SIGNWRITING HAND-FLAT -1D85B ; [*18FE.0020.0002] # SIGNWRITING HAND-FLAT BETWEEN PALM FACINGS -1D85C ; [*18FF.0020.0002] # SIGNWRITING HAND-FLAT HEEL -1D85D ; [*1900.0020.0002] # SIGNWRITING HAND-FLAT THUMB SIDE -1D85E ; [*1901.0020.0002] # SIGNWRITING HAND-FLAT HEEL THUMB SIDE -1D85F ; [*1902.0020.0002] # SIGNWRITING HAND-FLAT THUMB BENT -1D860 ; [*1903.0020.0002] # SIGNWRITING HAND-FLAT THUMB FORWARD -1D861 ; [*1904.0020.0002] # SIGNWRITING HAND-FLAT SPLIT INDEX THUMB SIDE -1D862 ; [*1905.0020.0002] # SIGNWRITING HAND-FLAT SPLIT CENTRE -1D863 ; [*1906.0020.0002] # SIGNWRITING HAND-FLAT SPLIT CENTRE THUMB SIDE -1D864 ; [*1907.0020.0002] # SIGNWRITING HAND-FLAT SPLIT CENTRE THUMB SIDE BENT -1D865 ; [*1908.0020.0002] # SIGNWRITING HAND-FLAT SPLIT LITTLE -1D866 ; [*1909.0020.0002] # SIGNWRITING HAND-CLAW -1D867 ; [*190A.0020.0002] # SIGNWRITING HAND-CLAW THUMB SIDE -1D868 ; [*190B.0020.0002] # SIGNWRITING HAND-CLAW NO THUMB -1D869 ; [*190C.0020.0002] # SIGNWRITING HAND-CLAW THUMB FORWARD -1D86A ; [*190D.0020.0002] # SIGNWRITING HAND-HOOK CURLICUE -1D86B ; [*190E.0020.0002] # SIGNWRITING HAND-HOOK -1D86C ; [*190F.0020.0002] # SIGNWRITING HAND-CUP OPEN -1D86D ; [*1910.0020.0002] # SIGNWRITING HAND-CUP -1D86E ; [*1911.0020.0002] # SIGNWRITING HAND-CUP OPEN THUMB SIDE -1D86F ; [*1912.0020.0002] # SIGNWRITING HAND-CUP THUMB SIDE -1D870 ; [*1913.0020.0002] # SIGNWRITING HAND-CUP OPEN NO THUMB -1D871 ; [*1914.0020.0002] # SIGNWRITING HAND-CUP NO THUMB -1D872 ; [*1915.0020.0002] # SIGNWRITING HAND-CUP OPEN THUMB FORWARD -1D873 ; [*1916.0020.0002] # SIGNWRITING HAND-CUP THUMB FORWARD -1D874 ; [*1917.0020.0002] # SIGNWRITING HAND-CURLICUE OPEN -1D875 ; [*1918.0020.0002] # SIGNWRITING HAND-CURLICUE -1D876 ; [*1919.0020.0002] # SIGNWRITING HAND-CIRCLE -1D877 ; [*191A.0020.0002] # SIGNWRITING HAND-OVAL -1D878 ; [*191B.0020.0002] # SIGNWRITING HAND-OVAL THUMB SIDE -1D879 ; [*191C.0020.0002] # SIGNWRITING HAND-OVAL NO THUMB -1D87A ; [*191D.0020.0002] # SIGNWRITING HAND-OVAL THUMB FORWARD -1D87B ; [*191E.0020.0002] # SIGNWRITING HAND-HINGE OPEN -1D87C ; [*191F.0020.0002] # SIGNWRITING HAND-HINGE OPEN THUMB FORWARD -1D87D ; [*1920.0020.0002] # SIGNWRITING HAND-HINGE -1D87E ; [*1921.0020.0002] # SIGNWRITING HAND-HINGE SMALL -1D87F ; [*1922.0020.0002] # SIGNWRITING HAND-HINGE OPEN THUMB SIDE -1D880 ; [*1923.0020.0002] # SIGNWRITING HAND-HINGE THUMB SIDE -1D881 ; [*1924.0020.0002] # SIGNWRITING HAND-HINGE OPEN NO THUMB -1D882 ; [*1925.0020.0002] # SIGNWRITING HAND-HINGE NO THUMB -1D883 ; [*1926.0020.0002] # SIGNWRITING HAND-HINGE THUMB SIDE TOUCHING INDEX -1D884 ; [*1927.0020.0002] # SIGNWRITING HAND-HINGE THUMB BETWEEN MIDDLE RING -1D885 ; [*1928.0020.0002] # SIGNWRITING HAND-ANGLE -1D886 ; [*1929.0020.0002] # SIGNWRITING HAND-FIST INDEX MIDDLE RING -1D887 ; [*192A.0020.0002] # SIGNWRITING HAND-CIRCLE INDEX MIDDLE RING -1D888 ; [*192B.0020.0002] # SIGNWRITING HAND-HINGE INDEX MIDDLE RING -1D889 ; [*192C.0020.0002] # SIGNWRITING HAND-ANGLE INDEX MIDDLE RING -1D88A ; [*192D.0020.0002] # SIGNWRITING HAND-HINGE LITTLE -1D88B ; [*192E.0020.0002] # SIGNWRITING HAND-FIST INDEX MIDDLE RING BENT -1D88C ; [*192F.0020.0002] # SIGNWRITING HAND-FIST INDEX MIDDLE RING CONJOINED -1D88D ; [*1930.0020.0002] # SIGNWRITING HAND-HINGE INDEX MIDDLE RING CONJOINED -1D88E ; [*1931.0020.0002] # SIGNWRITING HAND-FIST LITTLE DOWN -1D88F ; [*1932.0020.0002] # SIGNWRITING HAND-FIST LITTLE DOWN RIPPLE STRAIGHT -1D890 ; [*1933.0020.0002] # SIGNWRITING HAND-FIST LITTLE DOWN RIPPLE CURVED -1D891 ; [*1934.0020.0002] # SIGNWRITING HAND-FIST LITTLE DOWN OTHERS CIRCLED -1D892 ; [*1935.0020.0002] # SIGNWRITING HAND-FIST LITTLE UP -1D893 ; [*1936.0020.0002] # SIGNWRITING HAND-FIST THUMB UNDER LITTLE UP -1D894 ; [*1937.0020.0002] # SIGNWRITING HAND-CIRCLE LITTLE UP -1D895 ; [*1938.0020.0002] # SIGNWRITING HAND-OVAL LITTLE UP -1D896 ; [*1939.0020.0002] # SIGNWRITING HAND-ANGLE LITTLE UP -1D897 ; [*193A.0020.0002] # SIGNWRITING HAND-FIST LITTLE RAISED KNUCKLE -1D898 ; [*193B.0020.0002] # SIGNWRITING HAND-FIST LITTLE BENT -1D899 ; [*193C.0020.0002] # SIGNWRITING HAND-FIST LITTLE TOUCHES THUMB -1D89A ; [*193D.0020.0002] # SIGNWRITING HAND-FIST LITTLE THUMB -1D89B ; [*193E.0020.0002] # SIGNWRITING HAND-HINGE LITTLE THUMB -1D89C ; [*193F.0020.0002] # SIGNWRITING HAND-FIST LITTLE INDEX THUMB -1D89D ; [*1940.0020.0002] # SIGNWRITING HAND-HINGE LITTLE INDEX THUMB -1D89E ; [*1941.0020.0002] # SIGNWRITING HAND-ANGLE LITTLE INDEX THUMB INDEX THUMB OUT -1D89F ; [*1942.0020.0002] # SIGNWRITING HAND-ANGLE LITTLE INDEX THUMB INDEX THUMB -1D8A0 ; [*1943.0020.0002] # SIGNWRITING HAND-FIST LITTLE INDEX -1D8A1 ; [*1944.0020.0002] # SIGNWRITING HAND-CIRCLE LITTLE INDEX -1D8A2 ; [*1945.0020.0002] # SIGNWRITING HAND-HINGE LITTLE INDEX -1D8A3 ; [*1946.0020.0002] # SIGNWRITING HAND-ANGLE LITTLE INDEX -1D8A4 ; [*1947.0020.0002] # SIGNWRITING HAND-FIST INDEX MIDDLE LITTLE -1D8A5 ; [*1948.0020.0002] # SIGNWRITING HAND-CIRCLE INDEX MIDDLE LITTLE -1D8A6 ; [*1949.0020.0002] # SIGNWRITING HAND-HINGE INDEX MIDDLE LITTLE -1D8A7 ; [*194A.0020.0002] # SIGNWRITING HAND-HINGE RING -1D8A8 ; [*194B.0020.0002] # SIGNWRITING HAND-ANGLE INDEX MIDDLE LITTLE -1D8A9 ; [*194C.0020.0002] # SIGNWRITING HAND-FIST INDEX MIDDLE CROSS LITTLE -1D8AA ; [*194D.0020.0002] # SIGNWRITING HAND-CIRCLE INDEX MIDDLE CROSS LITTLE -1D8AB ; [*194E.0020.0002] # SIGNWRITING HAND-FIST RING DOWN -1D8AC ; [*194F.0020.0002] # SIGNWRITING HAND-HINGE RING DOWN INDEX THUMB HOOK MIDDLE -1D8AD ; [*1950.0020.0002] # SIGNWRITING HAND-ANGLE RING DOWN MIDDLE THUMB INDEX CROSS -1D8AE ; [*1951.0020.0002] # SIGNWRITING HAND-FIST RING UP -1D8AF ; [*1952.0020.0002] # SIGNWRITING HAND-FIST RING RAISED KNUCKLE -1D8B0 ; [*1953.0020.0002] # SIGNWRITING HAND-FIST RING LITTLE -1D8B1 ; [*1954.0020.0002] # SIGNWRITING HAND-CIRCLE RING LITTLE -1D8B2 ; [*1955.0020.0002] # SIGNWRITING HAND-OVAL RING LITTLE -1D8B3 ; [*1956.0020.0002] # SIGNWRITING HAND-ANGLE RING LITTLE -1D8B4 ; [*1957.0020.0002] # SIGNWRITING HAND-FIST RING MIDDLE -1D8B5 ; [*1958.0020.0002] # SIGNWRITING HAND-FIST RING MIDDLE CONJOINED -1D8B6 ; [*1959.0020.0002] # SIGNWRITING HAND-FIST RING MIDDLE RAISED KNUCKLES -1D8B7 ; [*195A.0020.0002] # SIGNWRITING HAND-FIST RING INDEX -1D8B8 ; [*195B.0020.0002] # SIGNWRITING HAND-FIST RING THUMB -1D8B9 ; [*195C.0020.0002] # SIGNWRITING HAND-HOOK RING THUMB -1D8BA ; [*195D.0020.0002] # SIGNWRITING HAND-FIST INDEX RING LITTLE -1D8BB ; [*195E.0020.0002] # SIGNWRITING HAND-CIRCLE INDEX RING LITTLE -1D8BC ; [*195F.0020.0002] # SIGNWRITING HAND-CURLICUE INDEX RING LITTLE ON -1D8BD ; [*1960.0020.0002] # SIGNWRITING HAND-HOOK INDEX RING LITTLE OUT -1D8BE ; [*1961.0020.0002] # SIGNWRITING HAND-HOOK INDEX RING LITTLE IN -1D8BF ; [*1962.0020.0002] # SIGNWRITING HAND-HOOK INDEX RING LITTLE UNDER -1D8C0 ; [*1963.0020.0002] # SIGNWRITING HAND-CUP INDEX RING LITTLE -1D8C1 ; [*1964.0020.0002] # SIGNWRITING HAND-HINGE INDEX RING LITTLE -1D8C2 ; [*1965.0020.0002] # SIGNWRITING HAND-ANGLE INDEX RING LITTLE OUT -1D8C3 ; [*1966.0020.0002] # SIGNWRITING HAND-ANGLE INDEX RING LITTLE -1D8C4 ; [*1967.0020.0002] # SIGNWRITING HAND-FIST MIDDLE DOWN -1D8C5 ; [*1968.0020.0002] # SIGNWRITING HAND-HINGE MIDDLE -1D8C6 ; [*1969.0020.0002] # SIGNWRITING HAND-FIST MIDDLE UP -1D8C7 ; [*196A.0020.0002] # SIGNWRITING HAND-CIRCLE MIDDLE UP -1D8C8 ; [*196B.0020.0002] # SIGNWRITING HAND-FIST MIDDLE RAISED KNUCKLE -1D8C9 ; [*196C.0020.0002] # SIGNWRITING HAND-FIST MIDDLE UP THUMB SIDE -1D8CA ; [*196D.0020.0002] # SIGNWRITING HAND-HOOK MIDDLE THUMB -1D8CB ; [*196E.0020.0002] # SIGNWRITING HAND-FIST MIDDLE THUMB LITTLE -1D8CC ; [*196F.0020.0002] # SIGNWRITING HAND-FIST MIDDLE LITTLE -1D8CD ; [*1970.0020.0002] # SIGNWRITING HAND-FIST MIDDLE RING LITTLE -1D8CE ; [*1971.0020.0002] # SIGNWRITING HAND-CIRCLE MIDDLE RING LITTLE -1D8CF ; [*1972.0020.0002] # SIGNWRITING HAND-CURLICUE MIDDLE RING LITTLE ON -1D8D0 ; [*1973.0020.0002] # SIGNWRITING HAND-CUP MIDDLE RING LITTLE -1D8D1 ; [*1974.0020.0002] # SIGNWRITING HAND-HINGE MIDDLE RING LITTLE -1D8D2 ; [*1975.0020.0002] # SIGNWRITING HAND-ANGLE MIDDLE RING LITTLE OUT -1D8D3 ; [*1976.0020.0002] # SIGNWRITING HAND-ANGLE MIDDLE RING LITTLE IN -1D8D4 ; [*1977.0020.0002] # SIGNWRITING HAND-ANGLE MIDDLE RING LITTLE -1D8D5 ; [*1978.0020.0002] # SIGNWRITING HAND-CIRCLE MIDDLE RING LITTLE BENT -1D8D6 ; [*1979.0020.0002] # SIGNWRITING HAND-CLAW MIDDLE RING LITTLE CONJOINED -1D8D7 ; [*197A.0020.0002] # SIGNWRITING HAND-CLAW MIDDLE RING LITTLE CONJOINED SIDE -1D8D8 ; [*197B.0020.0002] # SIGNWRITING HAND-HOOK MIDDLE RING LITTLE CONJOINED OUT -1D8D9 ; [*197C.0020.0002] # SIGNWRITING HAND-HOOK MIDDLE RING LITTLE CONJOINED IN -1D8DA ; [*197D.0020.0002] # SIGNWRITING HAND-HOOK MIDDLE RING LITTLE CONJOINED -1D8DB ; [*197E.0020.0002] # SIGNWRITING HAND-HINGE INDEX HINGED -1D8DC ; [*197F.0020.0002] # SIGNWRITING HAND-FIST INDEX THUMB SIDE -1D8DD ; [*1980.0020.0002] # SIGNWRITING HAND-HINGE INDEX THUMB SIDE -1D8DE ; [*1981.0020.0002] # SIGNWRITING HAND-FIST INDEX THUMB SIDE THUMB DIAGONAL -1D8DF ; [*1982.0020.0002] # SIGNWRITING HAND-FIST INDEX THUMB SIDE THUMB CONJOINED -1D8E0 ; [*1983.0020.0002] # SIGNWRITING HAND-FIST INDEX THUMB SIDE THUMB BENT -1D8E1 ; [*1984.0020.0002] # SIGNWRITING HAND-FIST INDEX THUMB SIDE INDEX BENT -1D8E2 ; [*1985.0020.0002] # SIGNWRITING HAND-FIST INDEX THUMB SIDE BOTH BENT -1D8E3 ; [*1986.0020.0002] # SIGNWRITING HAND-FIST INDEX THUMB SIDE INDEX HINGE -1D8E4 ; [*1987.0020.0002] # SIGNWRITING HAND-FIST INDEX THUMB FORWARD INDEX STRAIGHT -1D8E5 ; [*1988.0020.0002] # SIGNWRITING HAND-FIST INDEX THUMB FORWARD INDEX BENT -1D8E6 ; [*1989.0020.0002] # SIGNWRITING HAND-FIST INDEX THUMB HOOK -1D8E7 ; [*198A.0020.0002] # SIGNWRITING HAND-FIST INDEX THUMB CURLICUE -1D8E8 ; [*198B.0020.0002] # SIGNWRITING HAND-FIST INDEX THUMB CURVE THUMB INSIDE -1D8E9 ; [*198C.0020.0002] # SIGNWRITING HAND-CLAW INDEX THUMB CURVE THUMB INSIDE -1D8EA ; [*198D.0020.0002] # SIGNWRITING HAND-FIST INDEX THUMB CURVE THUMB UNDER -1D8EB ; [*198E.0020.0002] # SIGNWRITING HAND-FIST INDEX THUMB CIRCLE -1D8EC ; [*198F.0020.0002] # SIGNWRITING HAND-CUP INDEX THUMB -1D8ED ; [*1990.0020.0002] # SIGNWRITING HAND-CUP INDEX THUMB OPEN -1D8EE ; [*1991.0020.0002] # SIGNWRITING HAND-HINGE INDEX THUMB OPEN -1D8EF ; [*1992.0020.0002] # SIGNWRITING HAND-HINGE INDEX THUMB LARGE -1D8F0 ; [*1993.0020.0002] # SIGNWRITING HAND-HINGE INDEX THUMB -1D8F1 ; [*1994.0020.0002] # SIGNWRITING HAND-HINGE INDEX THUMB SMALL -1D8F2 ; [*1995.0020.0002] # SIGNWRITING HAND-ANGLE INDEX THUMB OUT -1D8F3 ; [*1996.0020.0002] # SIGNWRITING HAND-ANGLE INDEX THUMB IN -1D8F4 ; [*1997.0020.0002] # SIGNWRITING HAND-ANGLE INDEX THUMB -1D8F5 ; [*1998.0020.0002] # SIGNWRITING HAND-FIST THUMB -1D8F6 ; [*1999.0020.0002] # SIGNWRITING HAND-FIST THUMB HEEL -1D8F7 ; [*199A.0020.0002] # SIGNWRITING HAND-FIST THUMB SIDE DIAGONAL -1D8F8 ; [*199B.0020.0002] # SIGNWRITING HAND-FIST THUMB SIDE CONJOINED -1D8F9 ; [*199C.0020.0002] # SIGNWRITING HAND-FIST THUMB SIDE BENT -1D8FA ; [*199D.0020.0002] # SIGNWRITING HAND-FIST THUMB FORWARD -1D8FB ; [*199E.0020.0002] # SIGNWRITING HAND-FIST THUMB BETWEEN INDEX MIDDLE -1D8FC ; [*199F.0020.0002] # SIGNWRITING HAND-FIST THUMB BETWEEN MIDDLE RING -1D8FD ; [*19A0.0020.0002] # SIGNWRITING HAND-FIST THUMB BETWEEN RING LITTLE -1D8FE ; [*19A1.0020.0002] # SIGNWRITING HAND-FIST THUMB UNDER TWO FINGERS -1D8FF ; [*19A2.0020.0002] # SIGNWRITING HAND-FIST THUMB OVER TWO FINGERS -1D900 ; [*19A3.0020.0002] # SIGNWRITING HAND-FIST THUMB UNDER THREE FINGERS -1D901 ; [*19A4.0020.0002] # SIGNWRITING HAND-FIST THUMB UNDER FOUR FINGERS -1D902 ; [*19A5.0020.0002] # SIGNWRITING HAND-FIST THUMB OVER FOUR RAISED KNUCKLES -1D903 ; [*19A6.0020.0002] # SIGNWRITING HAND-FIST -1D904 ; [*19A7.0020.0002] # SIGNWRITING HAND-FIST HEEL -1D905 ; [*19A8.0020.0002] # SIGNWRITING TOUCH SINGLE -1D906 ; [*19A9.0020.0002] # SIGNWRITING TOUCH MULTIPLE -1D907 ; [*19AA.0020.0002] # SIGNWRITING TOUCH BETWEEN -1D908 ; [*19AB.0020.0002] # SIGNWRITING GRASP SINGLE -1D909 ; [*19AC.0020.0002] # SIGNWRITING GRASP MULTIPLE -1D90A ; [*19AD.0020.0002] # SIGNWRITING GRASP BETWEEN -1D90B ; [*19AE.0020.0002] # SIGNWRITING STRIKE SINGLE -1D90C ; [*19AF.0020.0002] # SIGNWRITING STRIKE MULTIPLE -1D90D ; [*19B0.0020.0002] # SIGNWRITING STRIKE BETWEEN -1D90E ; [*19B1.0020.0002] # SIGNWRITING BRUSH SINGLE -1D90F ; [*19B2.0020.0002] # SIGNWRITING BRUSH MULTIPLE -1D910 ; [*19B3.0020.0002] # SIGNWRITING BRUSH BETWEEN -1D911 ; [*19B4.0020.0002] # SIGNWRITING RUB SINGLE -1D912 ; [*19B5.0020.0002] # SIGNWRITING RUB MULTIPLE -1D913 ; [*19B6.0020.0002] # SIGNWRITING RUB BETWEEN -1D914 ; [*19B7.0020.0002] # SIGNWRITING SURFACE SYMBOLS -1D915 ; [*19B8.0020.0002] # SIGNWRITING SURFACE BETWEEN -1D916 ; [*19B9.0020.0002] # SIGNWRITING SQUEEZE LARGE SINGLE -1D917 ; [*19BA.0020.0002] # SIGNWRITING SQUEEZE SMALL SINGLE -1D918 ; [*19BB.0020.0002] # SIGNWRITING SQUEEZE LARGE MULTIPLE -1D919 ; [*19BC.0020.0002] # SIGNWRITING SQUEEZE SMALL MULTIPLE -1D91A ; [*19BD.0020.0002] # SIGNWRITING SQUEEZE SEQUENTIAL -1D91B ; [*19BE.0020.0002] # SIGNWRITING FLICK LARGE SINGLE -1D91C ; [*19BF.0020.0002] # SIGNWRITING FLICK SMALL SINGLE -1D91D ; [*19C0.0020.0002] # SIGNWRITING FLICK LARGE MULTIPLE -1D91E ; [*19C1.0020.0002] # SIGNWRITING FLICK SMALL MULTIPLE -1D91F ; [*19C2.0020.0002] # SIGNWRITING FLICK SEQUENTIAL -1D920 ; [*19C3.0020.0002] # SIGNWRITING SQUEEZE FLICK ALTERNATING -1D921 ; [*19C4.0020.0002] # SIGNWRITING MOVEMENT-HINGE UP DOWN LARGE -1D922 ; [*19C5.0020.0002] # SIGNWRITING MOVEMENT-HINGE UP DOWN SMALL -1D923 ; [*19C6.0020.0002] # SIGNWRITING MOVEMENT-HINGE UP SEQUENTIAL -1D924 ; [*19C7.0020.0002] # SIGNWRITING MOVEMENT-HINGE DOWN SEQUENTIAL -1D925 ; [*19C8.0020.0002] # SIGNWRITING MOVEMENT-HINGE UP DOWN ALTERNATING LARGE -1D926 ; [*19C9.0020.0002] # SIGNWRITING MOVEMENT-HINGE UP DOWN ALTERNATING SMALL -1D927 ; [*19CA.0020.0002] # SIGNWRITING MOVEMENT-HINGE SIDE TO SIDE SCISSORS -1D928 ; [*19CB.0020.0002] # SIGNWRITING MOVEMENT-WALLPLANE FINGER CONTACT -1D929 ; [*19CC.0020.0002] # SIGNWRITING MOVEMENT-FLOORPLANE FINGER CONTACT -1D92A ; [*19CD.0020.0002] # SIGNWRITING MOVEMENT-WALLPLANE SINGLE STRAIGHT SMALL -1D92B ; [*19CE.0020.0002] # SIGNWRITING MOVEMENT-WALLPLANE SINGLE STRAIGHT MEDIUM -1D92C ; [*19CF.0020.0002] # SIGNWRITING MOVEMENT-WALLPLANE SINGLE STRAIGHT LARGE -1D92D ; [*19D0.0020.0002] # SIGNWRITING MOVEMENT-WALLPLANE SINGLE STRAIGHT LARGEST -1D92E ; [*19D1.0020.0002] # SIGNWRITING MOVEMENT-WALLPLANE SINGLE WRIST FLEX -1D92F ; [*19D2.0020.0002] # SIGNWRITING MOVEMENT-WALLPLANE DOUBLE STRAIGHT -1D930 ; [*19D3.0020.0002] # SIGNWRITING MOVEMENT-WALLPLANE DOUBLE WRIST FLEX -1D931 ; [*19D4.0020.0002] # SIGNWRITING MOVEMENT-WALLPLANE DOUBLE ALTERNATING -1D932 ; [*19D5.0020.0002] # SIGNWRITING MOVEMENT-WALLPLANE DOUBLE ALTERNATING WRIST FLEX -1D933 ; [*19D6.0020.0002] # SIGNWRITING MOVEMENT-WALLPLANE CROSS -1D934 ; [*19D7.0020.0002] # SIGNWRITING MOVEMENT-WALLPLANE TRIPLE STRAIGHT MOVEMENT -1D935 ; [*19D8.0020.0002] # SIGNWRITING MOVEMENT-WALLPLANE TRIPLE WRIST FLEX -1D936 ; [*19D9.0020.0002] # SIGNWRITING MOVEMENT-WALLPLANE TRIPLE ALTERNATING -1D937 ; [*19DA.0020.0002] # SIGNWRITING MOVEMENT-WALLPLANE TRIPLE ALTERNATING WRIST FLEX -1D938 ; [*19DB.0020.0002] # SIGNWRITING MOVEMENT-WALLPLANE BEND SMALL -1D939 ; [*19DC.0020.0002] # SIGNWRITING MOVEMENT-WALLPLANE BEND MEDIUM -1D93A ; [*19DD.0020.0002] # SIGNWRITING MOVEMENT-WALLPLANE BEND LARGE -1D93B ; [*19DE.0020.0002] # SIGNWRITING MOVEMENT-WALLPLANE CORNER SMALL -1D93C ; [*19DF.0020.0002] # SIGNWRITING MOVEMENT-WALLPLANE CORNER MEDIUM -1D93D ; [*19E0.0020.0002] # SIGNWRITING MOVEMENT-WALLPLANE CORNER LARGE -1D93E ; [*19E1.0020.0002] # SIGNWRITING MOVEMENT-WALLPLANE CORNER ROTATION -1D93F ; [*19E2.0020.0002] # SIGNWRITING MOVEMENT-WALLPLANE CHECK SMALL -1D940 ; [*19E3.0020.0002] # SIGNWRITING MOVEMENT-WALLPLANE CHECK MEDIUM -1D941 ; [*19E4.0020.0002] # SIGNWRITING MOVEMENT-WALLPLANE CHECK LARGE -1D942 ; [*19E5.0020.0002] # SIGNWRITING MOVEMENT-WALLPLANE BOX SMALL -1D943 ; [*19E6.0020.0002] # SIGNWRITING MOVEMENT-WALLPLANE BOX MEDIUM -1D944 ; [*19E7.0020.0002] # SIGNWRITING MOVEMENT-WALLPLANE BOX LARGE -1D945 ; [*19E8.0020.0002] # SIGNWRITING MOVEMENT-WALLPLANE ZIGZAG SMALL -1D946 ; [*19E9.0020.0002] # SIGNWRITING MOVEMENT-WALLPLANE ZIGZAG MEDIUM -1D947 ; [*19EA.0020.0002] # SIGNWRITING MOVEMENT-WALLPLANE ZIGZAG LARGE -1D948 ; [*19EB.0020.0002] # SIGNWRITING MOVEMENT-WALLPLANE PEAKS SMALL -1D949 ; [*19EC.0020.0002] # SIGNWRITING MOVEMENT-WALLPLANE PEAKS MEDIUM -1D94A ; [*19ED.0020.0002] # SIGNWRITING MOVEMENT-WALLPLANE PEAKS LARGE -1D94B ; [*19EE.0020.0002] # SIGNWRITING TRAVEL-WALLPLANE ROTATION-WALLPLANE SINGLE -1D94C ; [*19EF.0020.0002] # SIGNWRITING TRAVEL-WALLPLANE ROTATION-WALLPLANE DOUBLE -1D94D ; [*19F0.0020.0002] # SIGNWRITING TRAVEL-WALLPLANE ROTATION-WALLPLANE ALTERNATING -1D94E ; [*19F1.0020.0002] # SIGNWRITING TRAVEL-WALLPLANE ROTATION-FLOORPLANE SINGLE -1D94F ; [*19F2.0020.0002] # SIGNWRITING TRAVEL-WALLPLANE ROTATION-FLOORPLANE DOUBLE -1D950 ; [*19F3.0020.0002] # SIGNWRITING TRAVEL-WALLPLANE ROTATION-FLOORPLANE ALTERNATING -1D951 ; [*19F4.0020.0002] # SIGNWRITING TRAVEL-WALLPLANE SHAKING -1D952 ; [*19F5.0020.0002] # SIGNWRITING TRAVEL-WALLPLANE ARM SPIRAL SINGLE -1D953 ; [*19F6.0020.0002] # SIGNWRITING TRAVEL-WALLPLANE ARM SPIRAL DOUBLE -1D954 ; [*19F7.0020.0002] # SIGNWRITING TRAVEL-WALLPLANE ARM SPIRAL TRIPLE -1D955 ; [*19F8.0020.0002] # SIGNWRITING MOVEMENT-DIAGONAL AWAY SMALL -1D956 ; [*19F9.0020.0002] # SIGNWRITING MOVEMENT-DIAGONAL AWAY MEDIUM -1D957 ; [*19FA.0020.0002] # SIGNWRITING MOVEMENT-DIAGONAL AWAY LARGE -1D958 ; [*19FB.0020.0002] # SIGNWRITING MOVEMENT-DIAGONAL AWAY LARGEST -1D959 ; [*19FC.0020.0002] # SIGNWRITING MOVEMENT-DIAGONAL TOWARDS SMALL -1D95A ; [*19FD.0020.0002] # SIGNWRITING MOVEMENT-DIAGONAL TOWARDS MEDIUM -1D95B ; [*19FE.0020.0002] # SIGNWRITING MOVEMENT-DIAGONAL TOWARDS LARGE -1D95C ; [*19FF.0020.0002] # SIGNWRITING MOVEMENT-DIAGONAL TOWARDS LARGEST -1D95D ; [*1A00.0020.0002] # SIGNWRITING MOVEMENT-DIAGONAL BETWEEN AWAY SMALL -1D95E ; [*1A01.0020.0002] # SIGNWRITING MOVEMENT-DIAGONAL BETWEEN AWAY MEDIUM -1D95F ; [*1A02.0020.0002] # SIGNWRITING MOVEMENT-DIAGONAL BETWEEN AWAY LARGE -1D960 ; [*1A03.0020.0002] # SIGNWRITING MOVEMENT-DIAGONAL BETWEEN AWAY LARGEST -1D961 ; [*1A04.0020.0002] # SIGNWRITING MOVEMENT-DIAGONAL BETWEEN TOWARDS SMALL -1D962 ; [*1A05.0020.0002] # SIGNWRITING MOVEMENT-DIAGONAL BETWEEN TOWARDS MEDIUM -1D963 ; [*1A06.0020.0002] # SIGNWRITING MOVEMENT-DIAGONAL BETWEEN TOWARDS LARGE -1D964 ; [*1A07.0020.0002] # SIGNWRITING MOVEMENT-DIAGONAL BETWEEN TOWARDS LARGEST -1D965 ; [*1A08.0020.0002] # SIGNWRITING MOVEMENT-FLOORPLANE SINGLE STRAIGHT SMALL -1D966 ; [*1A09.0020.0002] # SIGNWRITING MOVEMENT-FLOORPLANE SINGLE STRAIGHT MEDIUM -1D967 ; [*1A0A.0020.0002] # SIGNWRITING MOVEMENT-FLOORPLANE SINGLE STRAIGHT LARGE -1D968 ; [*1A0B.0020.0002] # SIGNWRITING MOVEMENT-FLOORPLANE SINGLE STRAIGHT LARGEST -1D969 ; [*1A0C.0020.0002] # SIGNWRITING MOVEMENT-FLOORPLANE SINGLE WRIST FLEX -1D96A ; [*1A0D.0020.0002] # SIGNWRITING MOVEMENT-FLOORPLANE DOUBLE STRAIGHT -1D96B ; [*1A0E.0020.0002] # SIGNWRITING MOVEMENT-FLOORPLANE DOUBLE WRIST FLEX -1D96C ; [*1A0F.0020.0002] # SIGNWRITING MOVEMENT-FLOORPLANE DOUBLE ALTERNATING -1D96D ; [*1A10.0020.0002] # SIGNWRITING MOVEMENT-FLOORPLANE DOUBLE ALTERNATING WRIST FLEX -1D96E ; [*1A11.0020.0002] # SIGNWRITING MOVEMENT-FLOORPLANE CROSS -1D96F ; [*1A12.0020.0002] # SIGNWRITING MOVEMENT-FLOORPLANE TRIPLE STRAIGHT MOVEMENT -1D970 ; [*1A13.0020.0002] # SIGNWRITING MOVEMENT-FLOORPLANE TRIPLE WRIST FLEX -1D971 ; [*1A14.0020.0002] # SIGNWRITING MOVEMENT-FLOORPLANE TRIPLE ALTERNATING MOVEMENT -1D972 ; [*1A15.0020.0002] # SIGNWRITING MOVEMENT-FLOORPLANE TRIPLE ALTERNATING WRIST FLEX -1D973 ; [*1A16.0020.0002] # SIGNWRITING MOVEMENT-FLOORPLANE BEND -1D974 ; [*1A17.0020.0002] # SIGNWRITING MOVEMENT-FLOORPLANE CORNER SMALL -1D975 ; [*1A18.0020.0002] # SIGNWRITING MOVEMENT-FLOORPLANE CORNER MEDIUM -1D976 ; [*1A19.0020.0002] # SIGNWRITING MOVEMENT-FLOORPLANE CORNER LARGE -1D977 ; [*1A1A.0020.0002] # SIGNWRITING MOVEMENT-FLOORPLANE CHECK -1D978 ; [*1A1B.0020.0002] # SIGNWRITING MOVEMENT-FLOORPLANE BOX SMALL -1D979 ; [*1A1C.0020.0002] # SIGNWRITING MOVEMENT-FLOORPLANE BOX MEDIUM -1D97A ; [*1A1D.0020.0002] # SIGNWRITING MOVEMENT-FLOORPLANE BOX LARGE -1D97B ; [*1A1E.0020.0002] # SIGNWRITING MOVEMENT-FLOORPLANE ZIGZAG SMALL -1D97C ; [*1A1F.0020.0002] # SIGNWRITING MOVEMENT-FLOORPLANE ZIGZAG MEDIUM -1D97D ; [*1A20.0020.0002] # SIGNWRITING MOVEMENT-FLOORPLANE ZIGZAG LARGE -1D97E ; [*1A21.0020.0002] # SIGNWRITING MOVEMENT-FLOORPLANE PEAKS SMALL -1D97F ; [*1A22.0020.0002] # SIGNWRITING MOVEMENT-FLOORPLANE PEAKS MEDIUM -1D980 ; [*1A23.0020.0002] # SIGNWRITING MOVEMENT-FLOORPLANE PEAKS LARGE -1D981 ; [*1A24.0020.0002] # SIGNWRITING TRAVEL-FLOORPLANE ROTATION-FLOORPLANE SINGLE -1D982 ; [*1A25.0020.0002] # SIGNWRITING TRAVEL-FLOORPLANE ROTATION-FLOORPLANE DOUBLE -1D983 ; [*1A26.0020.0002] # SIGNWRITING TRAVEL-FLOORPLANE ROTATION-FLOORPLANE ALTERNATING -1D984 ; [*1A27.0020.0002] # SIGNWRITING TRAVEL-FLOORPLANE ROTATION-WALLPLANE SINGLE -1D985 ; [*1A28.0020.0002] # SIGNWRITING TRAVEL-FLOORPLANE ROTATION-WALLPLANE DOUBLE -1D986 ; [*1A29.0020.0002] # SIGNWRITING TRAVEL-FLOORPLANE ROTATION-WALLPLANE ALTERNATING -1D987 ; [*1A2A.0020.0002] # SIGNWRITING TRAVEL-FLOORPLANE SHAKING -1D988 ; [*1A2B.0020.0002] # SIGNWRITING MOVEMENT-WALLPLANE CURVE QUARTER SMALL -1D989 ; [*1A2C.0020.0002] # SIGNWRITING MOVEMENT-WALLPLANE CURVE QUARTER MEDIUM -1D98A ; [*1A2D.0020.0002] # SIGNWRITING MOVEMENT-WALLPLANE CURVE QUARTER LARGE -1D98B ; [*1A2E.0020.0002] # SIGNWRITING MOVEMENT-WALLPLANE CURVE QUARTER LARGEST -1D98C ; [*1A2F.0020.0002] # SIGNWRITING MOVEMENT-WALLPLANE CURVE HALF-CIRCLE SMALL -1D98D ; [*1A30.0020.0002] # SIGNWRITING MOVEMENT-WALLPLANE CURVE HALF-CIRCLE MEDIUM -1D98E ; [*1A31.0020.0002] # SIGNWRITING MOVEMENT-WALLPLANE CURVE HALF-CIRCLE LARGE -1D98F ; [*1A32.0020.0002] # SIGNWRITING MOVEMENT-WALLPLANE CURVE HALF-CIRCLE LARGEST -1D990 ; [*1A33.0020.0002] # SIGNWRITING MOVEMENT-WALLPLANE CURVE THREE-QUARTER CIRCLE SMALL -1D991 ; [*1A34.0020.0002] # SIGNWRITING MOVEMENT-WALLPLANE CURVE THREE-QUARTER CIRCLE MEDIUM -1D992 ; [*1A35.0020.0002] # SIGNWRITING MOVEMENT-WALLPLANE HUMP SMALL -1D993 ; [*1A36.0020.0002] # SIGNWRITING MOVEMENT-WALLPLANE HUMP MEDIUM -1D994 ; [*1A37.0020.0002] # SIGNWRITING MOVEMENT-WALLPLANE HUMP LARGE -1D995 ; [*1A38.0020.0002] # SIGNWRITING MOVEMENT-WALLPLANE LOOP SMALL -1D996 ; [*1A39.0020.0002] # SIGNWRITING MOVEMENT-WALLPLANE LOOP MEDIUM -1D997 ; [*1A3A.0020.0002] # SIGNWRITING MOVEMENT-WALLPLANE LOOP LARGE -1D998 ; [*1A3B.0020.0002] # SIGNWRITING MOVEMENT-WALLPLANE LOOP SMALL DOUBLE -1D999 ; [*1A3C.0020.0002] # SIGNWRITING MOVEMENT-WALLPLANE WAVE CURVE DOUBLE SMALL -1D99A ; [*1A3D.0020.0002] # SIGNWRITING MOVEMENT-WALLPLANE WAVE CURVE DOUBLE MEDIUM -1D99B ; [*1A3E.0020.0002] # SIGNWRITING MOVEMENT-WALLPLANE WAVE CURVE DOUBLE LARGE -1D99C ; [*1A3F.0020.0002] # SIGNWRITING MOVEMENT-WALLPLANE WAVE CURVE TRIPLE SMALL -1D99D ; [*1A40.0020.0002] # SIGNWRITING MOVEMENT-WALLPLANE WAVE CURVE TRIPLE MEDIUM -1D99E ; [*1A41.0020.0002] # SIGNWRITING MOVEMENT-WALLPLANE WAVE CURVE TRIPLE LARGE -1D99F ; [*1A42.0020.0002] # SIGNWRITING MOVEMENT-WALLPLANE CURVE THEN STRAIGHT -1D9A0 ; [*1A43.0020.0002] # SIGNWRITING MOVEMENT-WALLPLANE CURVED CROSS SMALL -1D9A1 ; [*1A44.0020.0002] # SIGNWRITING MOVEMENT-WALLPLANE CURVED CROSS MEDIUM -1D9A2 ; [*1A45.0020.0002] # SIGNWRITING ROTATION-WALLPLANE SINGLE -1D9A3 ; [*1A46.0020.0002] # SIGNWRITING ROTATION-WALLPLANE DOUBLE -1D9A4 ; [*1A47.0020.0002] # SIGNWRITING ROTATION-WALLPLANE ALTERNATE -1D9A5 ; [*1A48.0020.0002] # SIGNWRITING MOVEMENT-WALLPLANE SHAKING -1D9A6 ; [*1A49.0020.0002] # SIGNWRITING MOVEMENT-WALLPLANE CURVE HITTING FRONT WALL -1D9A7 ; [*1A4A.0020.0002] # SIGNWRITING MOVEMENT-WALLPLANE HUMP HITTING FRONT WALL -1D9A8 ; [*1A4B.0020.0002] # SIGNWRITING MOVEMENT-WALLPLANE LOOP HITTING FRONT WALL -1D9A9 ; [*1A4C.0020.0002] # SIGNWRITING MOVEMENT-WALLPLANE WAVE HITTING FRONT WALL -1D9AA ; [*1A4D.0020.0002] # SIGNWRITING ROTATION-WALLPLANE SINGLE HITTING FRONT WALL -1D9AB ; [*1A4E.0020.0002] # SIGNWRITING ROTATION-WALLPLANE DOUBLE HITTING FRONT WALL -1D9AC ; [*1A4F.0020.0002] # SIGNWRITING ROTATION-WALLPLANE ALTERNATING HITTING FRONT WALL -1D9AD ; [*1A50.0020.0002] # SIGNWRITING MOVEMENT-WALLPLANE CURVE HITTING CHEST -1D9AE ; [*1A51.0020.0002] # SIGNWRITING MOVEMENT-WALLPLANE HUMP HITTING CHEST -1D9AF ; [*1A52.0020.0002] # SIGNWRITING MOVEMENT-WALLPLANE LOOP HITTING CHEST -1D9B0 ; [*1A53.0020.0002] # SIGNWRITING MOVEMENT-WALLPLANE WAVE HITTING CHEST -1D9B1 ; [*1A54.0020.0002] # SIGNWRITING ROTATION-WALLPLANE SINGLE HITTING CHEST -1D9B2 ; [*1A55.0020.0002] # SIGNWRITING ROTATION-WALLPLANE DOUBLE HITTING CHEST -1D9B3 ; [*1A56.0020.0002] # SIGNWRITING ROTATION-WALLPLANE ALTERNATING HITTING CHEST -1D9B4 ; [*1A57.0020.0002] # SIGNWRITING MOVEMENT-WALLPLANE WAVE DIAGONAL PATH SMALL -1D9B5 ; [*1A58.0020.0002] # SIGNWRITING MOVEMENT-WALLPLANE WAVE DIAGONAL PATH MEDIUM -1D9B6 ; [*1A59.0020.0002] # SIGNWRITING MOVEMENT-WALLPLANE WAVE DIAGONAL PATH LARGE -1D9B7 ; [*1A5A.0020.0002] # SIGNWRITING MOVEMENT-FLOORPLANE CURVE HITTING CEILING SMALL -1D9B8 ; [*1A5B.0020.0002] # SIGNWRITING MOVEMENT-FLOORPLANE CURVE HITTING CEILING LARGE -1D9B9 ; [*1A5C.0020.0002] # SIGNWRITING MOVEMENT-FLOORPLANE HUMP HITTING CEILING SMALL DOUBLE -1D9BA ; [*1A5D.0020.0002] # SIGNWRITING MOVEMENT-FLOORPLANE HUMP HITTING CEILING LARGE DOUBLE -1D9BB ; [*1A5E.0020.0002] # SIGNWRITING MOVEMENT-FLOORPLANE HUMP HITTING CEILING SMALL TRIPLE -1D9BC ; [*1A5F.0020.0002] # SIGNWRITING MOVEMENT-FLOORPLANE HUMP HITTING CEILING LARGE TRIPLE -1D9BD ; [*1A60.0020.0002] # SIGNWRITING MOVEMENT-FLOORPLANE LOOP HITTING CEILING SMALL SINGLE -1D9BE ; [*1A61.0020.0002] # SIGNWRITING MOVEMENT-FLOORPLANE LOOP HITTING CEILING LARGE SINGLE -1D9BF ; [*1A62.0020.0002] # SIGNWRITING MOVEMENT-FLOORPLANE LOOP HITTING CEILING SMALL DOUBLE -1D9C0 ; [*1A63.0020.0002] # SIGNWRITING MOVEMENT-FLOORPLANE LOOP HITTING CEILING LARGE DOUBLE -1D9C1 ; [*1A64.0020.0002] # SIGNWRITING MOVEMENT-FLOORPLANE WAVE HITTING CEILING SMALL -1D9C2 ; [*1A65.0020.0002] # SIGNWRITING MOVEMENT-FLOORPLANE WAVE HITTING CEILING LARGE -1D9C3 ; [*1A66.0020.0002] # SIGNWRITING ROTATION-FLOORPLANE SINGLE HITTING CEILING -1D9C4 ; [*1A67.0020.0002] # SIGNWRITING ROTATION-FLOORPLANE DOUBLE HITTING CEILING -1D9C5 ; [*1A68.0020.0002] # SIGNWRITING ROTATION-FLOORPLANE ALTERNATING HITTING CEILING -1D9C6 ; [*1A69.0020.0002] # SIGNWRITING MOVEMENT-FLOORPLANE CURVE HITTING FLOOR SMALL -1D9C7 ; [*1A6A.0020.0002] # SIGNWRITING MOVEMENT-FLOORPLANE CURVE HITTING FLOOR LARGE -1D9C8 ; [*1A6B.0020.0002] # SIGNWRITING MOVEMENT-FLOORPLANE HUMP HITTING FLOOR SMALL DOUBLE -1D9C9 ; [*1A6C.0020.0002] # SIGNWRITING MOVEMENT-FLOORPLANE HUMP HITTING FLOOR LARGE DOUBLE -1D9CA ; [*1A6D.0020.0002] # SIGNWRITING MOVEMENT-FLOORPLANE HUMP HITTING FLOOR TRIPLE SMALL TRIPLE -1D9CB ; [*1A6E.0020.0002] # SIGNWRITING MOVEMENT-FLOORPLANE HUMP HITTING FLOOR TRIPLE LARGE TRIPLE -1D9CC ; [*1A6F.0020.0002] # SIGNWRITING MOVEMENT-FLOORPLANE LOOP HITTING FLOOR SMALL SINGLE -1D9CD ; [*1A70.0020.0002] # SIGNWRITING MOVEMENT-FLOORPLANE LOOP HITTING FLOOR LARGE SINGLE -1D9CE ; [*1A71.0020.0002] # SIGNWRITING MOVEMENT-FLOORPLANE LOOP HITTING FLOOR SMALL DOUBLE -1D9CF ; [*1A72.0020.0002] # SIGNWRITING MOVEMENT-FLOORPLANE LOOP HITTING FLOOR LARGE DOUBLE -1D9D0 ; [*1A73.0020.0002] # SIGNWRITING MOVEMENT-FLOORPLANE WAVE HITTING FLOOR SMALL -1D9D1 ; [*1A74.0020.0002] # SIGNWRITING MOVEMENT-FLOORPLANE WAVE HITTING FLOOR LARGE -1D9D2 ; [*1A75.0020.0002] # SIGNWRITING ROTATION-FLOORPLANE SINGLE HITTING FLOOR -1D9D3 ; [*1A76.0020.0002] # SIGNWRITING ROTATION-FLOORPLANE DOUBLE HITTING FLOOR -1D9D4 ; [*1A77.0020.0002] # SIGNWRITING ROTATION-FLOORPLANE ALTERNATING HITTING FLOOR -1D9D5 ; [*1A78.0020.0002] # SIGNWRITING MOVEMENT-FLOORPLANE CURVE SMALL -1D9D6 ; [*1A79.0020.0002] # SIGNWRITING MOVEMENT-FLOORPLANE CURVE MEDIUM -1D9D7 ; [*1A7A.0020.0002] # SIGNWRITING MOVEMENT-FLOORPLANE CURVE LARGE -1D9D8 ; [*1A7B.0020.0002] # SIGNWRITING MOVEMENT-FLOORPLANE CURVE LARGEST -1D9D9 ; [*1A7C.0020.0002] # SIGNWRITING MOVEMENT-FLOORPLANE CURVE COMBINED -1D9DA ; [*1A7D.0020.0002] # SIGNWRITING MOVEMENT-FLOORPLANE HUMP SMALL -1D9DB ; [*1A7E.0020.0002] # SIGNWRITING MOVEMENT-FLOORPLANE LOOP SMALL -1D9DC ; [*1A7F.0020.0002] # SIGNWRITING MOVEMENT-FLOORPLANE WAVE SNAKE -1D9DD ; [*1A80.0020.0002] # SIGNWRITING MOVEMENT-FLOORPLANE WAVE SMALL -1D9DE ; [*1A81.0020.0002] # SIGNWRITING MOVEMENT-FLOORPLANE WAVE LARGE -1D9DF ; [*1A82.0020.0002] # SIGNWRITING ROTATION-FLOORPLANE SINGLE -1D9E0 ; [*1A83.0020.0002] # SIGNWRITING ROTATION-FLOORPLANE DOUBLE -1D9E1 ; [*1A84.0020.0002] # SIGNWRITING ROTATION-FLOORPLANE ALTERNATING -1D9E2 ; [*1A85.0020.0002] # SIGNWRITING MOVEMENT-FLOORPLANE SHAKING PARALLEL -1D9E3 ; [*1A86.0020.0002] # SIGNWRITING MOVEMENT-WALLPLANE ARM CIRCLE SMALL SINGLE -1D9E4 ; [*1A87.0020.0002] # SIGNWRITING MOVEMENT-WALLPLANE ARM CIRCLE MEDIUM SINGLE -1D9E5 ; [*1A88.0020.0002] # SIGNWRITING MOVEMENT-WALLPLANE ARM CIRCLE SMALL DOUBLE -1D9E6 ; [*1A89.0020.0002] # SIGNWRITING MOVEMENT-WALLPLANE ARM CIRCLE MEDIUM DOUBLE -1D9E7 ; [*1A8A.0020.0002] # SIGNWRITING MOVEMENT-FLOORPLANE ARM CIRCLE HITTING WALL SMALL SINGLE -1D9E8 ; [*1A8B.0020.0002] # SIGNWRITING MOVEMENT-FLOORPLANE ARM CIRCLE HITTING WALL MEDIUM SINGLE -1D9E9 ; [*1A8C.0020.0002] # SIGNWRITING MOVEMENT-FLOORPLANE ARM CIRCLE HITTING WALL LARGE SINGLE -1D9EA ; [*1A8D.0020.0002] # SIGNWRITING MOVEMENT-FLOORPLANE ARM CIRCLE HITTING WALL SMALL DOUBLE -1D9EB ; [*1A8E.0020.0002] # SIGNWRITING MOVEMENT-FLOORPLANE ARM CIRCLE HITTING WALL MEDIUM DOUBLE -1D9EC ; [*1A8F.0020.0002] # SIGNWRITING MOVEMENT-FLOORPLANE ARM CIRCLE HITTING WALL LARGE DOUBLE -1D9ED ; [*1A90.0020.0002] # SIGNWRITING MOVEMENT-WALLPLANE WRIST CIRCLE FRONT SINGLE -1D9EE ; [*1A91.0020.0002] # SIGNWRITING MOVEMENT-WALLPLANE WRIST CIRCLE FRONT DOUBLE -1D9EF ; [*1A92.0020.0002] # SIGNWRITING MOVEMENT-FLOORPLANE WRIST CIRCLE HITTING WALL SINGLE -1D9F0 ; [*1A93.0020.0002] # SIGNWRITING MOVEMENT-FLOORPLANE WRIST CIRCLE HITTING WALL DOUBLE -1D9F1 ; [*1A94.0020.0002] # SIGNWRITING MOVEMENT-WALLPLANE FINGER CIRCLES SINGLE -1D9F2 ; [*1A95.0020.0002] # SIGNWRITING MOVEMENT-WALLPLANE FINGER CIRCLES DOUBLE -1D9F3 ; [*1A96.0020.0002] # SIGNWRITING MOVEMENT-FLOORPLANE FINGER CIRCLES HITTING WALL SINGLE -1D9F4 ; [*1A97.0020.0002] # SIGNWRITING MOVEMENT-FLOORPLANE FINGER CIRCLES HITTING WALL DOUBLE -1D9F5 ; [*1A98.0020.0002] # SIGNWRITING DYNAMIC ARROWHEAD SMALL -1D9F6 ; [*1A99.0020.0002] # SIGNWRITING DYNAMIC ARROWHEAD LARGE -1D9F7 ; [*1A9A.0020.0002] # SIGNWRITING DYNAMIC FAST -1D9F8 ; [*1A9B.0020.0002] # SIGNWRITING DYNAMIC SLOW -1D9F9 ; [*1A9C.0020.0002] # SIGNWRITING DYNAMIC TENSE -1D9FA ; [*1A9D.0020.0002] # SIGNWRITING DYNAMIC RELAXED -1D9FB ; [*1A9E.0020.0002] # SIGNWRITING DYNAMIC SIMULTANEOUS -1D9FC ; [*1A9F.0020.0002] # SIGNWRITING DYNAMIC SIMULTANEOUS ALTERNATING -1D9FD ; [*1AA0.0020.0002] # SIGNWRITING DYNAMIC EVERY OTHER TIME -1D9FE ; [*1AA1.0020.0002] # SIGNWRITING DYNAMIC GRADUAL -1D9FF ; [*1AA2.0020.0002] # SIGNWRITING HEAD +1D245 ; [*1313.0020.0002] # GREEK MUSICAL LEIMMA +1D2EA ; [*1E92.0020.0002] # MAYAN NUMERAL TEN +1D2EB ; [*1E93.0020.0002] # MAYAN NUMERAL ELEVEN +1D2EC ; [*1E94.0020.0002] # MAYAN NUMERAL TWELVE +1D2ED ; [*1E95.0020.0002] # MAYAN NUMERAL THIRTEEN +1D2EE ; [*1E96.0020.0002] # MAYAN NUMERAL FOURTEEN +1D2EF ; [*1E97.0020.0002] # MAYAN NUMERAL FIFTEEN +1D2F0 ; [*1E98.0020.0002] # MAYAN NUMERAL SIXTEEN +1D2F1 ; [*1E99.0020.0002] # MAYAN NUMERAL SEVENTEEN +1D2F2 ; [*1E9A.0020.0002] # MAYAN NUMERAL EIGHTEEN +1D2F3 ; [*1E9B.0020.0002] # MAYAN NUMERAL NINETEEN +1D300 ; [*1036.0020.0002] # MONOGRAM FOR EARTH +1D301 ; [*1037.0020.0002] # DIGRAM FOR HEAVENLY EARTH +1D302 ; [*1038.0020.0002] # DIGRAM FOR HUMAN EARTH +1D303 ; [*1039.0020.0002] # DIGRAM FOR EARTHLY HEAVEN +1D304 ; [*103A.0020.0002] # DIGRAM FOR EARTHLY HUMAN +1D305 ; [*103B.0020.0002] # DIGRAM FOR EARTH +1D306 ; [*103C.0020.0002] # TETRAGRAM FOR CENTRE +1D307 ; [*103D.0020.0002] # TETRAGRAM FOR FULL CIRCLE +1D308 ; [*103E.0020.0002] # TETRAGRAM FOR MIRED +1D309 ; [*103F.0020.0002] # TETRAGRAM FOR BARRIER +1D30A ; [*1040.0020.0002] # TETRAGRAM FOR KEEPING SMALL +1D30B ; [*1041.0020.0002] # TETRAGRAM FOR CONTRARIETY +1D30C ; [*1042.0020.0002] # TETRAGRAM FOR ASCENT +1D30D ; [*1043.0020.0002] # TETRAGRAM FOR OPPOSITION +1D30E ; [*1044.0020.0002] # TETRAGRAM FOR BRANCHING OUT +1D30F ; [*1045.0020.0002] # TETRAGRAM FOR DEFECTIVENESS OR DISTORTION +1D310 ; [*1046.0020.0002] # TETRAGRAM FOR DIVERGENCE +1D311 ; [*1047.0020.0002] # TETRAGRAM FOR YOUTHFULNESS +1D312 ; [*1048.0020.0002] # TETRAGRAM FOR INCREASE +1D313 ; [*1049.0020.0002] # TETRAGRAM FOR PENETRATION +1D314 ; [*104A.0020.0002] # TETRAGRAM FOR REACH +1D315 ; [*104B.0020.0002] # TETRAGRAM FOR CONTACT +1D316 ; [*104C.0020.0002] # TETRAGRAM FOR HOLDING BACK +1D317 ; [*104D.0020.0002] # TETRAGRAM FOR WAITING +1D318 ; [*104E.0020.0002] # TETRAGRAM FOR FOLLOWING +1D319 ; [*104F.0020.0002] # TETRAGRAM FOR ADVANCE +1D31A ; [*1050.0020.0002] # TETRAGRAM FOR RELEASE +1D31B ; [*1051.0020.0002] # TETRAGRAM FOR RESISTANCE +1D31C ; [*1052.0020.0002] # TETRAGRAM FOR EASE +1D31D ; [*1053.0020.0002] # TETRAGRAM FOR JOY +1D31E ; [*1054.0020.0002] # TETRAGRAM FOR CONTENTION +1D31F ; [*1055.0020.0002] # TETRAGRAM FOR ENDEAVOUR +1D320 ; [*1056.0020.0002] # TETRAGRAM FOR DUTIES +1D321 ; [*1057.0020.0002] # TETRAGRAM FOR CHANGE +1D322 ; [*1058.0020.0002] # TETRAGRAM FOR DECISIVENESS +1D323 ; [*1059.0020.0002] # TETRAGRAM FOR BOLD RESOLUTION +1D324 ; [*105A.0020.0002] # TETRAGRAM FOR PACKING +1D325 ; [*105B.0020.0002] # TETRAGRAM FOR LEGION +1D326 ; [*105C.0020.0002] # TETRAGRAM FOR CLOSENESS +1D327 ; [*105D.0020.0002] # TETRAGRAM FOR KINSHIP +1D328 ; [*105E.0020.0002] # TETRAGRAM FOR GATHERING +1D329 ; [*105F.0020.0002] # TETRAGRAM FOR STRENGTH +1D32A ; [*1060.0020.0002] # TETRAGRAM FOR PURITY +1D32B ; [*1061.0020.0002] # TETRAGRAM FOR FULLNESS +1D32C ; [*1062.0020.0002] # TETRAGRAM FOR RESIDENCE +1D32D ; [*1063.0020.0002] # TETRAGRAM FOR LAW OR MODEL +1D32E ; [*1064.0020.0002] # TETRAGRAM FOR RESPONSE +1D32F ; [*1065.0020.0002] # TETRAGRAM FOR GOING TO MEET +1D330 ; [*1066.0020.0002] # TETRAGRAM FOR ENCOUNTERS +1D331 ; [*1067.0020.0002] # TETRAGRAM FOR STOVE +1D332 ; [*1068.0020.0002] # TETRAGRAM FOR GREATNESS +1D333 ; [*1069.0020.0002] # TETRAGRAM FOR ENLARGEMENT +1D334 ; [*106A.0020.0002] # TETRAGRAM FOR PATTERN +1D335 ; [*106B.0020.0002] # TETRAGRAM FOR RITUAL +1D336 ; [*106C.0020.0002] # TETRAGRAM FOR FLIGHT +1D337 ; [*106D.0020.0002] # TETRAGRAM FOR VASTNESS OR WASTING +1D338 ; [*106E.0020.0002] # TETRAGRAM FOR CONSTANCY +1D339 ; [*106F.0020.0002] # TETRAGRAM FOR MEASURE +1D33A ; [*1070.0020.0002] # TETRAGRAM FOR ETERNITY +1D33B ; [*1071.0020.0002] # TETRAGRAM FOR UNITY +1D33C ; [*1072.0020.0002] # TETRAGRAM FOR DIMINISHMENT +1D33D ; [*1073.0020.0002] # TETRAGRAM FOR CLOSED MOUTH +1D33E ; [*1074.0020.0002] # TETRAGRAM FOR GUARDEDNESS +1D33F ; [*1075.0020.0002] # TETRAGRAM FOR GATHERING IN +1D340 ; [*1076.0020.0002] # TETRAGRAM FOR MASSING +1D341 ; [*1077.0020.0002] # TETRAGRAM FOR ACCUMULATION +1D342 ; [*1078.0020.0002] # TETRAGRAM FOR EMBELLISHMENT +1D343 ; [*1079.0020.0002] # TETRAGRAM FOR DOUBT +1D344 ; [*107A.0020.0002] # TETRAGRAM FOR WATCH +1D345 ; [*107B.0020.0002] # TETRAGRAM FOR SINKING +1D346 ; [*107C.0020.0002] # TETRAGRAM FOR INNER +1D347 ; [*107D.0020.0002] # TETRAGRAM FOR DEPARTURE +1D348 ; [*107E.0020.0002] # TETRAGRAM FOR DARKENING +1D349 ; [*107F.0020.0002] # TETRAGRAM FOR DIMMING +1D34A ; [*1080.0020.0002] # TETRAGRAM FOR EXHAUSTION +1D34B ; [*1081.0020.0002] # TETRAGRAM FOR SEVERANCE +1D34C ; [*1082.0020.0002] # TETRAGRAM FOR STOPPAGE +1D34D ; [*1083.0020.0002] # TETRAGRAM FOR HARDNESS +1D34E ; [*1084.0020.0002] # TETRAGRAM FOR COMPLETION +1D34F ; [*1085.0020.0002] # TETRAGRAM FOR CLOSURE +1D350 ; [*1086.0020.0002] # TETRAGRAM FOR FAILURE +1D351 ; [*1087.0020.0002] # TETRAGRAM FOR AGGRAVATION +1D352 ; [*1088.0020.0002] # TETRAGRAM FOR COMPLIANCE +1D353 ; [*1089.0020.0002] # TETRAGRAM FOR ON THE VERGE +1D354 ; [*108A.0020.0002] # TETRAGRAM FOR DIFFICULTIES +1D355 ; [*108B.0020.0002] # TETRAGRAM FOR LABOURING +1D356 ; [*108C.0020.0002] # TETRAGRAM FOR FOSTERING +1D369 ; [*1F3D.0020.0002] # COUNTING ROD TENS DIGIT ONE +1D36A ; [*1F3E.0020.0002] # COUNTING ROD TENS DIGIT TWO +1D36B ; [*1F3F.0020.0002] # COUNTING ROD TENS DIGIT THREE +1D36C ; [*1F40.0020.0002] # COUNTING ROD TENS DIGIT FOUR +1D36D ; [*1F41.0020.0002] # COUNTING ROD TENS DIGIT FIVE +1D36E ; [*1F42.0020.0002] # COUNTING ROD TENS DIGIT SIX +1D36F ; [*1F43.0020.0002] # COUNTING ROD TENS DIGIT SEVEN +1D370 ; [*1F44.0020.0002] # COUNTING ROD TENS DIGIT EIGHT +1D371 ; [*1F45.0020.0002] # COUNTING ROD TENS DIGIT NINE +1D6C1 ; [*065C.0020.0005] # MATHEMATICAL BOLD NABLA +1D6DB ; [*0658.0020.0005] # MATHEMATICAL BOLD PARTIAL DIFFERENTIAL +1D6FB ; [*065C.0020.0005] # MATHEMATICAL ITALIC NABLA +1D715 ; [*0658.0020.0005] # MATHEMATICAL ITALIC PARTIAL DIFFERENTIAL +1D735 ; [*065C.0020.0005] # MATHEMATICAL BOLD ITALIC NABLA +1D74F ; [*0658.0020.0005] # MATHEMATICAL BOLD ITALIC PARTIAL DIFFERENTIAL +1D76F ; [*065C.0020.0005] # MATHEMATICAL SANS-SERIF BOLD NABLA +1D789 ; [*0658.0020.0005] # MATHEMATICAL SANS-SERIF BOLD PARTIAL DIFFERENTIAL +1D7A9 ; [*065C.0020.0005] # MATHEMATICAL SANS-SERIF BOLD ITALIC NABLA +1D7C3 ; [*0658.0020.0005] # MATHEMATICAL SANS-SERIF BOLD ITALIC PARTIAL DIFFERENTIAL +1D800 ; [*1AFF.0020.0002] # SIGNWRITING HAND-FIST INDEX +1D801 ; [*1B00.0020.0002] # SIGNWRITING HAND-CIRCLE INDEX +1D802 ; [*1B01.0020.0002] # SIGNWRITING HAND-CUP INDEX +1D803 ; [*1B02.0020.0002] # SIGNWRITING HAND-OVAL INDEX +1D804 ; [*1B03.0020.0002] # SIGNWRITING HAND-HINGE INDEX +1D805 ; [*1B04.0020.0002] # SIGNWRITING HAND-ANGLE INDEX +1D806 ; [*1B05.0020.0002] # SIGNWRITING HAND-FIST INDEX BENT +1D807 ; [*1B06.0020.0002] # SIGNWRITING HAND-CIRCLE INDEX BENT +1D808 ; [*1B07.0020.0002] # SIGNWRITING HAND-FIST THUMB UNDER INDEX BENT +1D809 ; [*1B08.0020.0002] # SIGNWRITING HAND-FIST INDEX RAISED KNUCKLE +1D80A ; [*1B09.0020.0002] # SIGNWRITING HAND-FIST INDEX CUPPED +1D80B ; [*1B0A.0020.0002] # SIGNWRITING HAND-FIST INDEX HINGED +1D80C ; [*1B0B.0020.0002] # SIGNWRITING HAND-FIST INDEX HINGED LOW +1D80D ; [*1B0C.0020.0002] # SIGNWRITING HAND-CIRCLE INDEX HINGE +1D80E ; [*1B0D.0020.0002] # SIGNWRITING HAND-FIST INDEX MIDDLE +1D80F ; [*1B0E.0020.0002] # SIGNWRITING HAND-CIRCLE INDEX MIDDLE +1D810 ; [*1B0F.0020.0002] # SIGNWRITING HAND-FIST INDEX MIDDLE BENT +1D811 ; [*1B10.0020.0002] # SIGNWRITING HAND-FIST INDEX MIDDLE RAISED KNUCKLES +1D812 ; [*1B11.0020.0002] # SIGNWRITING HAND-FIST INDEX MIDDLE HINGED +1D813 ; [*1B12.0020.0002] # SIGNWRITING HAND-FIST INDEX UP MIDDLE HINGED +1D814 ; [*1B13.0020.0002] # SIGNWRITING HAND-FIST INDEX HINGED MIDDLE UP +1D815 ; [*1B14.0020.0002] # SIGNWRITING HAND-FIST INDEX MIDDLE CONJOINED +1D816 ; [*1B15.0020.0002] # SIGNWRITING HAND-FIST INDEX MIDDLE CONJOINED INDEX BENT +1D817 ; [*1B16.0020.0002] # SIGNWRITING HAND-FIST INDEX MIDDLE CONJOINED MIDDLE BENT +1D818 ; [*1B17.0020.0002] # SIGNWRITING HAND-FIST INDEX MIDDLE CONJOINED CUPPED +1D819 ; [*1B18.0020.0002] # SIGNWRITING HAND-FIST INDEX MIDDLE CONJOINED HINGED +1D81A ; [*1B19.0020.0002] # SIGNWRITING HAND-FIST INDEX MIDDLE CROSSED +1D81B ; [*1B1A.0020.0002] # SIGNWRITING HAND-CIRCLE INDEX MIDDLE CROSSED +1D81C ; [*1B1B.0020.0002] # SIGNWRITING HAND-FIST MIDDLE BENT OVER INDEX +1D81D ; [*1B1C.0020.0002] # SIGNWRITING HAND-FIST INDEX BENT OVER MIDDLE +1D81E ; [*1B1D.0020.0002] # SIGNWRITING HAND-FIST INDEX MIDDLE THUMB +1D81F ; [*1B1E.0020.0002] # SIGNWRITING HAND-CIRCLE INDEX MIDDLE THUMB +1D820 ; [*1B1F.0020.0002] # SIGNWRITING HAND-FIST INDEX MIDDLE STRAIGHT THUMB BENT +1D821 ; [*1B20.0020.0002] # SIGNWRITING HAND-FIST INDEX MIDDLE BENT THUMB STRAIGHT +1D822 ; [*1B21.0020.0002] # SIGNWRITING HAND-FIST INDEX MIDDLE THUMB BENT +1D823 ; [*1B22.0020.0002] # SIGNWRITING HAND-FIST INDEX MIDDLE HINGED SPREAD THUMB SIDE +1D824 ; [*1B23.0020.0002] # SIGNWRITING HAND-FIST INDEX UP MIDDLE HINGED THUMB SIDE +1D825 ; [*1B24.0020.0002] # SIGNWRITING HAND-FIST INDEX UP MIDDLE HINGED THUMB CONJOINED +1D826 ; [*1B25.0020.0002] # SIGNWRITING HAND-FIST INDEX HINGED MIDDLE UP THUMB SIDE +1D827 ; [*1B26.0020.0002] # SIGNWRITING HAND-FIST INDEX MIDDLE UP SPREAD THUMB FORWARD +1D828 ; [*1B27.0020.0002] # SIGNWRITING HAND-FIST INDEX MIDDLE THUMB CUPPED +1D829 ; [*1B28.0020.0002] # SIGNWRITING HAND-FIST INDEX MIDDLE THUMB CIRCLED +1D82A ; [*1B29.0020.0002] # SIGNWRITING HAND-FIST INDEX MIDDLE THUMB HOOKED +1D82B ; [*1B2A.0020.0002] # SIGNWRITING HAND-FIST INDEX MIDDLE THUMB HINGED +1D82C ; [*1B2B.0020.0002] # SIGNWRITING HAND-FIST THUMB BETWEEN INDEX MIDDLE STRAIGHT +1D82D ; [*1B2C.0020.0002] # SIGNWRITING HAND-FIST INDEX MIDDLE CONJOINED THUMB SIDE +1D82E ; [*1B2D.0020.0002] # SIGNWRITING HAND-FIST INDEX MIDDLE CONJOINED THUMB SIDE CONJOINED +1D82F ; [*1B2E.0020.0002] # SIGNWRITING HAND-FIST INDEX MIDDLE CONJOINED THUMB SIDE BENT +1D830 ; [*1B2F.0020.0002] # SIGNWRITING HAND-FIST MIDDLE THUMB HOOKED INDEX UP +1D831 ; [*1B30.0020.0002] # SIGNWRITING HAND-FIST INDEX THUMB HOOKED MIDDLE UP +1D832 ; [*1B31.0020.0002] # SIGNWRITING HAND-FIST INDEX MIDDLE CONJOINED HINGED THUMB SIDE +1D833 ; [*1B32.0020.0002] # SIGNWRITING HAND-FIST INDEX MIDDLE CROSSED THUMB SIDE +1D834 ; [*1B33.0020.0002] # SIGNWRITING HAND-FIST INDEX MIDDLE CONJOINED THUMB FORWARD +1D835 ; [*1B34.0020.0002] # SIGNWRITING HAND-FIST INDEX MIDDLE CONJOINED CUPPED THUMB FORWARD +1D836 ; [*1B35.0020.0002] # SIGNWRITING HAND-FIST MIDDLE THUMB CUPPED INDEX UP +1D837 ; [*1B36.0020.0002] # SIGNWRITING HAND-FIST INDEX THUMB CUPPED MIDDLE UP +1D838 ; [*1B37.0020.0002] # SIGNWRITING HAND-FIST MIDDLE THUMB CIRCLED INDEX UP +1D839 ; [*1B38.0020.0002] # SIGNWRITING HAND-FIST MIDDLE THUMB CIRCLED INDEX HINGED +1D83A ; [*1B39.0020.0002] # SIGNWRITING HAND-FIST INDEX THUMB ANGLED OUT MIDDLE UP +1D83B ; [*1B3A.0020.0002] # SIGNWRITING HAND-FIST INDEX THUMB ANGLED IN MIDDLE UP +1D83C ; [*1B3B.0020.0002] # SIGNWRITING HAND-FIST INDEX THUMB CIRCLED MIDDLE UP +1D83D ; [*1B3C.0020.0002] # SIGNWRITING HAND-FIST INDEX MIDDLE THUMB CONJOINED HINGED +1D83E ; [*1B3D.0020.0002] # SIGNWRITING HAND-FIST INDEX MIDDLE THUMB ANGLED OUT +1D83F ; [*1B3E.0020.0002] # SIGNWRITING HAND-FIST INDEX MIDDLE THUMB ANGLED +1D840 ; [*1B3F.0020.0002] # SIGNWRITING HAND-FIST MIDDLE THUMB ANGLED OUT INDEX UP +1D841 ; [*1B40.0020.0002] # SIGNWRITING HAND-FIST MIDDLE THUMB ANGLED OUT INDEX CROSSED +1D842 ; [*1B41.0020.0002] # SIGNWRITING HAND-FIST MIDDLE THUMB ANGLED INDEX UP +1D843 ; [*1B42.0020.0002] # SIGNWRITING HAND-FIST INDEX THUMB HOOKED MIDDLE HINGED +1D844 ; [*1B43.0020.0002] # SIGNWRITING HAND-FLAT FOUR FINGERS +1D845 ; [*1B44.0020.0002] # SIGNWRITING HAND-FLAT FOUR FINGERS BENT +1D846 ; [*1B45.0020.0002] # SIGNWRITING HAND-FLAT FOUR FINGERS HINGED +1D847 ; [*1B46.0020.0002] # SIGNWRITING HAND-FLAT FOUR FINGERS CONJOINED +1D848 ; [*1B47.0020.0002] # SIGNWRITING HAND-FLAT FOUR FINGERS CONJOINED SPLIT +1D849 ; [*1B48.0020.0002] # SIGNWRITING HAND-CLAW FOUR FINGERS CONJOINED +1D84A ; [*1B49.0020.0002] # SIGNWRITING HAND-FIST FOUR FINGERS CONJOINED BENT +1D84B ; [*1B4A.0020.0002] # SIGNWRITING HAND-HINGE FOUR FINGERS CONJOINED +1D84C ; [*1B4B.0020.0002] # SIGNWRITING HAND-FLAT FIVE FINGERS SPREAD +1D84D ; [*1B4C.0020.0002] # SIGNWRITING HAND-FLAT HEEL FIVE FINGERS SPREAD +1D84E ; [*1B4D.0020.0002] # SIGNWRITING HAND-FLAT FIVE FINGERS SPREAD FOUR BENT +1D84F ; [*1B4E.0020.0002] # SIGNWRITING HAND-FLAT HEEL FIVE FINGERS SPREAD FOUR BENT +1D850 ; [*1B4F.0020.0002] # SIGNWRITING HAND-FLAT FIVE FINGERS SPREAD BENT +1D851 ; [*1B50.0020.0002] # SIGNWRITING HAND-FLAT HEEL FIVE FINGERS SPREAD BENT +1D852 ; [*1B51.0020.0002] # SIGNWRITING HAND-FLAT FIVE FINGERS SPREAD THUMB FORWARD +1D853 ; [*1B52.0020.0002] # SIGNWRITING HAND-CUP FIVE FINGERS SPREAD +1D854 ; [*1B53.0020.0002] # SIGNWRITING HAND-CUP FIVE FINGERS SPREAD OPEN +1D855 ; [*1B54.0020.0002] # SIGNWRITING HAND-HINGE FIVE FINGERS SPREAD OPEN +1D856 ; [*1B55.0020.0002] # SIGNWRITING HAND-OVAL FIVE FINGERS SPREAD +1D857 ; [*1B56.0020.0002] # SIGNWRITING HAND-FLAT FIVE FINGERS SPREAD HINGED +1D858 ; [*1B57.0020.0002] # SIGNWRITING HAND-FLAT FIVE FINGERS SPREAD HINGED THUMB SIDE +1D859 ; [*1B58.0020.0002] # SIGNWRITING HAND-FLAT FIVE FINGERS SPREAD HINGED NO THUMB +1D85A ; [*1B59.0020.0002] # SIGNWRITING HAND-FLAT +1D85B ; [*1B5A.0020.0002] # SIGNWRITING HAND-FLAT BETWEEN PALM FACINGS +1D85C ; [*1B5B.0020.0002] # SIGNWRITING HAND-FLAT HEEL +1D85D ; [*1B5C.0020.0002] # SIGNWRITING HAND-FLAT THUMB SIDE +1D85E ; [*1B5D.0020.0002] # SIGNWRITING HAND-FLAT HEEL THUMB SIDE +1D85F ; [*1B5E.0020.0002] # SIGNWRITING HAND-FLAT THUMB BENT +1D860 ; [*1B5F.0020.0002] # SIGNWRITING HAND-FLAT THUMB FORWARD +1D861 ; [*1B60.0020.0002] # SIGNWRITING HAND-FLAT SPLIT INDEX THUMB SIDE +1D862 ; [*1B61.0020.0002] # SIGNWRITING HAND-FLAT SPLIT CENTRE +1D863 ; [*1B62.0020.0002] # SIGNWRITING HAND-FLAT SPLIT CENTRE THUMB SIDE +1D864 ; [*1B63.0020.0002] # SIGNWRITING HAND-FLAT SPLIT CENTRE THUMB SIDE BENT +1D865 ; [*1B64.0020.0002] # SIGNWRITING HAND-FLAT SPLIT LITTLE +1D866 ; [*1B65.0020.0002] # SIGNWRITING HAND-CLAW +1D867 ; [*1B66.0020.0002] # SIGNWRITING HAND-CLAW THUMB SIDE +1D868 ; [*1B67.0020.0002] # SIGNWRITING HAND-CLAW NO THUMB +1D869 ; [*1B68.0020.0002] # SIGNWRITING HAND-CLAW THUMB FORWARD +1D86A ; [*1B69.0020.0002] # SIGNWRITING HAND-HOOK CURLICUE +1D86B ; [*1B6A.0020.0002] # SIGNWRITING HAND-HOOK +1D86C ; [*1B6B.0020.0002] # SIGNWRITING HAND-CUP OPEN +1D86D ; [*1B6C.0020.0002] # SIGNWRITING HAND-CUP +1D86E ; [*1B6D.0020.0002] # SIGNWRITING HAND-CUP OPEN THUMB SIDE +1D86F ; [*1B6E.0020.0002] # SIGNWRITING HAND-CUP THUMB SIDE +1D870 ; [*1B6F.0020.0002] # SIGNWRITING HAND-CUP OPEN NO THUMB +1D871 ; [*1B70.0020.0002] # SIGNWRITING HAND-CUP NO THUMB +1D872 ; [*1B71.0020.0002] # SIGNWRITING HAND-CUP OPEN THUMB FORWARD +1D873 ; [*1B72.0020.0002] # SIGNWRITING HAND-CUP THUMB FORWARD +1D874 ; [*1B73.0020.0002] # SIGNWRITING HAND-CURLICUE OPEN +1D875 ; [*1B74.0020.0002] # SIGNWRITING HAND-CURLICUE +1D876 ; [*1B75.0020.0002] # SIGNWRITING HAND-CIRCLE +1D877 ; [*1B76.0020.0002] # SIGNWRITING HAND-OVAL +1D878 ; [*1B77.0020.0002] # SIGNWRITING HAND-OVAL THUMB SIDE +1D879 ; [*1B78.0020.0002] # SIGNWRITING HAND-OVAL NO THUMB +1D87A ; [*1B79.0020.0002] # SIGNWRITING HAND-OVAL THUMB FORWARD +1D87B ; [*1B7A.0020.0002] # SIGNWRITING HAND-HINGE OPEN +1D87C ; [*1B7B.0020.0002] # SIGNWRITING HAND-HINGE OPEN THUMB FORWARD +1D87D ; [*1B7C.0020.0002] # SIGNWRITING HAND-HINGE +1D87E ; [*1B7D.0020.0002] # SIGNWRITING HAND-HINGE SMALL +1D87F ; [*1B7E.0020.0002] # SIGNWRITING HAND-HINGE OPEN THUMB SIDE +1D880 ; [*1B7F.0020.0002] # SIGNWRITING HAND-HINGE THUMB SIDE +1D881 ; [*1B80.0020.0002] # SIGNWRITING HAND-HINGE OPEN NO THUMB +1D882 ; [*1B81.0020.0002] # SIGNWRITING HAND-HINGE NO THUMB +1D883 ; [*1B82.0020.0002] # SIGNWRITING HAND-HINGE THUMB SIDE TOUCHING INDEX +1D884 ; [*1B83.0020.0002] # SIGNWRITING HAND-HINGE THUMB BETWEEN MIDDLE RING +1D885 ; [*1B84.0020.0002] # SIGNWRITING HAND-ANGLE +1D886 ; [*1B85.0020.0002] # SIGNWRITING HAND-FIST INDEX MIDDLE RING +1D887 ; [*1B86.0020.0002] # SIGNWRITING HAND-CIRCLE INDEX MIDDLE RING +1D888 ; [*1B87.0020.0002] # SIGNWRITING HAND-HINGE INDEX MIDDLE RING +1D889 ; [*1B88.0020.0002] # SIGNWRITING HAND-ANGLE INDEX MIDDLE RING +1D88A ; [*1B89.0020.0002] # SIGNWRITING HAND-HINGE LITTLE +1D88B ; [*1B8A.0020.0002] # SIGNWRITING HAND-FIST INDEX MIDDLE RING BENT +1D88C ; [*1B8B.0020.0002] # SIGNWRITING HAND-FIST INDEX MIDDLE RING CONJOINED +1D88D ; [*1B8C.0020.0002] # SIGNWRITING HAND-HINGE INDEX MIDDLE RING CONJOINED +1D88E ; [*1B8D.0020.0002] # SIGNWRITING HAND-FIST LITTLE DOWN +1D88F ; [*1B8E.0020.0002] # SIGNWRITING HAND-FIST LITTLE DOWN RIPPLE STRAIGHT +1D890 ; [*1B8F.0020.0002] # SIGNWRITING HAND-FIST LITTLE DOWN RIPPLE CURVED +1D891 ; [*1B90.0020.0002] # SIGNWRITING HAND-FIST LITTLE DOWN OTHERS CIRCLED +1D892 ; [*1B91.0020.0002] # SIGNWRITING HAND-FIST LITTLE UP +1D893 ; [*1B92.0020.0002] # SIGNWRITING HAND-FIST THUMB UNDER LITTLE UP +1D894 ; [*1B93.0020.0002] # SIGNWRITING HAND-CIRCLE LITTLE UP +1D895 ; [*1B94.0020.0002] # SIGNWRITING HAND-OVAL LITTLE UP +1D896 ; [*1B95.0020.0002] # SIGNWRITING HAND-ANGLE LITTLE UP +1D897 ; [*1B96.0020.0002] # SIGNWRITING HAND-FIST LITTLE RAISED KNUCKLE +1D898 ; [*1B97.0020.0002] # SIGNWRITING HAND-FIST LITTLE BENT +1D899 ; [*1B98.0020.0002] # SIGNWRITING HAND-FIST LITTLE TOUCHES THUMB +1D89A ; [*1B99.0020.0002] # SIGNWRITING HAND-FIST LITTLE THUMB +1D89B ; [*1B9A.0020.0002] # SIGNWRITING HAND-HINGE LITTLE THUMB +1D89C ; [*1B9B.0020.0002] # SIGNWRITING HAND-FIST LITTLE INDEX THUMB +1D89D ; [*1B9C.0020.0002] # SIGNWRITING HAND-HINGE LITTLE INDEX THUMB +1D89E ; [*1B9D.0020.0002] # SIGNWRITING HAND-ANGLE LITTLE INDEX THUMB INDEX THUMB OUT +1D89F ; [*1B9E.0020.0002] # SIGNWRITING HAND-ANGLE LITTLE INDEX THUMB INDEX THUMB +1D8A0 ; [*1B9F.0020.0002] # SIGNWRITING HAND-FIST LITTLE INDEX +1D8A1 ; [*1BA0.0020.0002] # SIGNWRITING HAND-CIRCLE LITTLE INDEX +1D8A2 ; [*1BA1.0020.0002] # SIGNWRITING HAND-HINGE LITTLE INDEX +1D8A3 ; [*1BA2.0020.0002] # SIGNWRITING HAND-ANGLE LITTLE INDEX +1D8A4 ; [*1BA3.0020.0002] # SIGNWRITING HAND-FIST INDEX MIDDLE LITTLE +1D8A5 ; [*1BA4.0020.0002] # SIGNWRITING HAND-CIRCLE INDEX MIDDLE LITTLE +1D8A6 ; [*1BA5.0020.0002] # SIGNWRITING HAND-HINGE INDEX MIDDLE LITTLE +1D8A7 ; [*1BA6.0020.0002] # SIGNWRITING HAND-HINGE RING +1D8A8 ; [*1BA7.0020.0002] # SIGNWRITING HAND-ANGLE INDEX MIDDLE LITTLE +1D8A9 ; [*1BA8.0020.0002] # SIGNWRITING HAND-FIST INDEX MIDDLE CROSS LITTLE +1D8AA ; [*1BA9.0020.0002] # SIGNWRITING HAND-CIRCLE INDEX MIDDLE CROSS LITTLE +1D8AB ; [*1BAA.0020.0002] # SIGNWRITING HAND-FIST RING DOWN +1D8AC ; [*1BAB.0020.0002] # SIGNWRITING HAND-HINGE RING DOWN INDEX THUMB HOOK MIDDLE +1D8AD ; [*1BAC.0020.0002] # SIGNWRITING HAND-ANGLE RING DOWN MIDDLE THUMB INDEX CROSS +1D8AE ; [*1BAD.0020.0002] # SIGNWRITING HAND-FIST RING UP +1D8AF ; [*1BAE.0020.0002] # SIGNWRITING HAND-FIST RING RAISED KNUCKLE +1D8B0 ; [*1BAF.0020.0002] # SIGNWRITING HAND-FIST RING LITTLE +1D8B1 ; [*1BB0.0020.0002] # SIGNWRITING HAND-CIRCLE RING LITTLE +1D8B2 ; [*1BB1.0020.0002] # SIGNWRITING HAND-OVAL RING LITTLE +1D8B3 ; [*1BB2.0020.0002] # SIGNWRITING HAND-ANGLE RING LITTLE +1D8B4 ; [*1BB3.0020.0002] # SIGNWRITING HAND-FIST RING MIDDLE +1D8B5 ; [*1BB4.0020.0002] # SIGNWRITING HAND-FIST RING MIDDLE CONJOINED +1D8B6 ; [*1BB5.0020.0002] # SIGNWRITING HAND-FIST RING MIDDLE RAISED KNUCKLES +1D8B7 ; [*1BB6.0020.0002] # SIGNWRITING HAND-FIST RING INDEX +1D8B8 ; [*1BB7.0020.0002] # SIGNWRITING HAND-FIST RING THUMB +1D8B9 ; [*1BB8.0020.0002] # SIGNWRITING HAND-HOOK RING THUMB +1D8BA ; [*1BB9.0020.0002] # SIGNWRITING HAND-FIST INDEX RING LITTLE +1D8BB ; [*1BBA.0020.0002] # SIGNWRITING HAND-CIRCLE INDEX RING LITTLE +1D8BC ; [*1BBB.0020.0002] # SIGNWRITING HAND-CURLICUE INDEX RING LITTLE ON +1D8BD ; [*1BBC.0020.0002] # SIGNWRITING HAND-HOOK INDEX RING LITTLE OUT +1D8BE ; [*1BBD.0020.0002] # SIGNWRITING HAND-HOOK INDEX RING LITTLE IN +1D8BF ; [*1BBE.0020.0002] # SIGNWRITING HAND-HOOK INDEX RING LITTLE UNDER +1D8C0 ; [*1BBF.0020.0002] # SIGNWRITING HAND-CUP INDEX RING LITTLE +1D8C1 ; [*1BC0.0020.0002] # SIGNWRITING HAND-HINGE INDEX RING LITTLE +1D8C2 ; [*1BC1.0020.0002] # SIGNWRITING HAND-ANGLE INDEX RING LITTLE OUT +1D8C3 ; [*1BC2.0020.0002] # SIGNWRITING HAND-ANGLE INDEX RING LITTLE +1D8C4 ; [*1BC3.0020.0002] # SIGNWRITING HAND-FIST MIDDLE DOWN +1D8C5 ; [*1BC4.0020.0002] # SIGNWRITING HAND-HINGE MIDDLE +1D8C6 ; [*1BC5.0020.0002] # SIGNWRITING HAND-FIST MIDDLE UP +1D8C7 ; [*1BC6.0020.0002] # SIGNWRITING HAND-CIRCLE MIDDLE UP +1D8C8 ; [*1BC7.0020.0002] # SIGNWRITING HAND-FIST MIDDLE RAISED KNUCKLE +1D8C9 ; [*1BC8.0020.0002] # SIGNWRITING HAND-FIST MIDDLE UP THUMB SIDE +1D8CA ; [*1BC9.0020.0002] # SIGNWRITING HAND-HOOK MIDDLE THUMB +1D8CB ; [*1BCA.0020.0002] # SIGNWRITING HAND-FIST MIDDLE THUMB LITTLE +1D8CC ; [*1BCB.0020.0002] # SIGNWRITING HAND-FIST MIDDLE LITTLE +1D8CD ; [*1BCC.0020.0002] # SIGNWRITING HAND-FIST MIDDLE RING LITTLE +1D8CE ; [*1BCD.0020.0002] # SIGNWRITING HAND-CIRCLE MIDDLE RING LITTLE +1D8CF ; [*1BCE.0020.0002] # SIGNWRITING HAND-CURLICUE MIDDLE RING LITTLE ON +1D8D0 ; [*1BCF.0020.0002] # SIGNWRITING HAND-CUP MIDDLE RING LITTLE +1D8D1 ; [*1BD0.0020.0002] # SIGNWRITING HAND-HINGE MIDDLE RING LITTLE +1D8D2 ; [*1BD1.0020.0002] # SIGNWRITING HAND-ANGLE MIDDLE RING LITTLE OUT +1D8D3 ; [*1BD2.0020.0002] # SIGNWRITING HAND-ANGLE MIDDLE RING LITTLE IN +1D8D4 ; [*1BD3.0020.0002] # SIGNWRITING HAND-ANGLE MIDDLE RING LITTLE +1D8D5 ; [*1BD4.0020.0002] # SIGNWRITING HAND-CIRCLE MIDDLE RING LITTLE BENT +1D8D6 ; [*1BD5.0020.0002] # SIGNWRITING HAND-CLAW MIDDLE RING LITTLE CONJOINED +1D8D7 ; [*1BD6.0020.0002] # SIGNWRITING HAND-CLAW MIDDLE RING LITTLE CONJOINED SIDE +1D8D8 ; [*1BD7.0020.0002] # SIGNWRITING HAND-HOOK MIDDLE RING LITTLE CONJOINED OUT +1D8D9 ; [*1BD8.0020.0002] # SIGNWRITING HAND-HOOK MIDDLE RING LITTLE CONJOINED IN +1D8DA ; [*1BD9.0020.0002] # SIGNWRITING HAND-HOOK MIDDLE RING LITTLE CONJOINED +1D8DB ; [*1BDA.0020.0002] # SIGNWRITING HAND-HINGE INDEX HINGED +1D8DC ; [*1BDB.0020.0002] # SIGNWRITING HAND-FIST INDEX THUMB SIDE +1D8DD ; [*1BDC.0020.0002] # SIGNWRITING HAND-HINGE INDEX THUMB SIDE +1D8DE ; [*1BDD.0020.0002] # SIGNWRITING HAND-FIST INDEX THUMB SIDE THUMB DIAGONAL +1D8DF ; [*1BDE.0020.0002] # SIGNWRITING HAND-FIST INDEX THUMB SIDE THUMB CONJOINED +1D8E0 ; [*1BDF.0020.0002] # SIGNWRITING HAND-FIST INDEX THUMB SIDE THUMB BENT +1D8E1 ; [*1BE0.0020.0002] # SIGNWRITING HAND-FIST INDEX THUMB SIDE INDEX BENT +1D8E2 ; [*1BE1.0020.0002] # SIGNWRITING HAND-FIST INDEX THUMB SIDE BOTH BENT +1D8E3 ; [*1BE2.0020.0002] # SIGNWRITING HAND-FIST INDEX THUMB SIDE INDEX HINGE +1D8E4 ; [*1BE3.0020.0002] # SIGNWRITING HAND-FIST INDEX THUMB FORWARD INDEX STRAIGHT +1D8E5 ; [*1BE4.0020.0002] # SIGNWRITING HAND-FIST INDEX THUMB FORWARD INDEX BENT +1D8E6 ; [*1BE5.0020.0002] # SIGNWRITING HAND-FIST INDEX THUMB HOOK +1D8E7 ; [*1BE6.0020.0002] # SIGNWRITING HAND-FIST INDEX THUMB CURLICUE +1D8E8 ; [*1BE7.0020.0002] # SIGNWRITING HAND-FIST INDEX THUMB CURVE THUMB INSIDE +1D8E9 ; [*1BE8.0020.0002] # SIGNWRITING HAND-CLAW INDEX THUMB CURVE THUMB INSIDE +1D8EA ; [*1BE9.0020.0002] # SIGNWRITING HAND-FIST INDEX THUMB CURVE THUMB UNDER +1D8EB ; [*1BEA.0020.0002] # SIGNWRITING HAND-FIST INDEX THUMB CIRCLE +1D8EC ; [*1BEB.0020.0002] # SIGNWRITING HAND-CUP INDEX THUMB +1D8ED ; [*1BEC.0020.0002] # SIGNWRITING HAND-CUP INDEX THUMB OPEN +1D8EE ; [*1BED.0020.0002] # SIGNWRITING HAND-HINGE INDEX THUMB OPEN +1D8EF ; [*1BEE.0020.0002] # SIGNWRITING HAND-HINGE INDEX THUMB LARGE +1D8F0 ; [*1BEF.0020.0002] # SIGNWRITING HAND-HINGE INDEX THUMB +1D8F1 ; [*1BF0.0020.0002] # SIGNWRITING HAND-HINGE INDEX THUMB SMALL +1D8F2 ; [*1BF1.0020.0002] # SIGNWRITING HAND-ANGLE INDEX THUMB OUT +1D8F3 ; [*1BF2.0020.0002] # SIGNWRITING HAND-ANGLE INDEX THUMB IN +1D8F4 ; [*1BF3.0020.0002] # SIGNWRITING HAND-ANGLE INDEX THUMB +1D8F5 ; [*1BF4.0020.0002] # SIGNWRITING HAND-FIST THUMB +1D8F6 ; [*1BF5.0020.0002] # SIGNWRITING HAND-FIST THUMB HEEL +1D8F7 ; [*1BF6.0020.0002] # SIGNWRITING HAND-FIST THUMB SIDE DIAGONAL +1D8F8 ; [*1BF7.0020.0002] # SIGNWRITING HAND-FIST THUMB SIDE CONJOINED +1D8F9 ; [*1BF8.0020.0002] # SIGNWRITING HAND-FIST THUMB SIDE BENT +1D8FA ; [*1BF9.0020.0002] # SIGNWRITING HAND-FIST THUMB FORWARD +1D8FB ; [*1BFA.0020.0002] # SIGNWRITING HAND-FIST THUMB BETWEEN INDEX MIDDLE +1D8FC ; [*1BFB.0020.0002] # SIGNWRITING HAND-FIST THUMB BETWEEN MIDDLE RING +1D8FD ; [*1BFC.0020.0002] # SIGNWRITING HAND-FIST THUMB BETWEEN RING LITTLE +1D8FE ; [*1BFD.0020.0002] # SIGNWRITING HAND-FIST THUMB UNDER TWO FINGERS +1D8FF ; [*1BFE.0020.0002] # SIGNWRITING HAND-FIST THUMB OVER TWO FINGERS +1D900 ; [*1BFF.0020.0002] # SIGNWRITING HAND-FIST THUMB UNDER THREE FINGERS +1D901 ; [*1C00.0020.0002] # SIGNWRITING HAND-FIST THUMB UNDER FOUR FINGERS +1D902 ; [*1C01.0020.0002] # SIGNWRITING HAND-FIST THUMB OVER FOUR RAISED KNUCKLES +1D903 ; [*1C02.0020.0002] # SIGNWRITING HAND-FIST +1D904 ; [*1C03.0020.0002] # SIGNWRITING HAND-FIST HEEL +1D905 ; [*1C04.0020.0002] # SIGNWRITING TOUCH SINGLE +1D906 ; [*1C05.0020.0002] # SIGNWRITING TOUCH MULTIPLE +1D907 ; [*1C06.0020.0002] # SIGNWRITING TOUCH BETWEEN +1D908 ; [*1C07.0020.0002] # SIGNWRITING GRASP SINGLE +1D909 ; [*1C08.0020.0002] # SIGNWRITING GRASP MULTIPLE +1D90A ; [*1C09.0020.0002] # SIGNWRITING GRASP BETWEEN +1D90B ; [*1C0A.0020.0002] # SIGNWRITING STRIKE SINGLE +1D90C ; [*1C0B.0020.0002] # SIGNWRITING STRIKE MULTIPLE +1D90D ; [*1C0C.0020.0002] # SIGNWRITING STRIKE BETWEEN +1D90E ; [*1C0D.0020.0002] # SIGNWRITING BRUSH SINGLE +1D90F ; [*1C0E.0020.0002] # SIGNWRITING BRUSH MULTIPLE +1D910 ; [*1C0F.0020.0002] # SIGNWRITING BRUSH BETWEEN +1D911 ; [*1C10.0020.0002] # SIGNWRITING RUB SINGLE +1D912 ; [*1C11.0020.0002] # SIGNWRITING RUB MULTIPLE +1D913 ; [*1C12.0020.0002] # SIGNWRITING RUB BETWEEN +1D914 ; [*1C13.0020.0002] # SIGNWRITING SURFACE SYMBOLS +1D915 ; [*1C14.0020.0002] # SIGNWRITING SURFACE BETWEEN +1D916 ; [*1C15.0020.0002] # SIGNWRITING SQUEEZE LARGE SINGLE +1D917 ; [*1C16.0020.0002] # SIGNWRITING SQUEEZE SMALL SINGLE +1D918 ; [*1C17.0020.0002] # SIGNWRITING SQUEEZE LARGE MULTIPLE +1D919 ; [*1C18.0020.0002] # SIGNWRITING SQUEEZE SMALL MULTIPLE +1D91A ; [*1C19.0020.0002] # SIGNWRITING SQUEEZE SEQUENTIAL +1D91B ; [*1C1A.0020.0002] # SIGNWRITING FLICK LARGE SINGLE +1D91C ; [*1C1B.0020.0002] # SIGNWRITING FLICK SMALL SINGLE +1D91D ; [*1C1C.0020.0002] # SIGNWRITING FLICK LARGE MULTIPLE +1D91E ; [*1C1D.0020.0002] # SIGNWRITING FLICK SMALL MULTIPLE +1D91F ; [*1C1E.0020.0002] # SIGNWRITING FLICK SEQUENTIAL +1D920 ; [*1C1F.0020.0002] # SIGNWRITING SQUEEZE FLICK ALTERNATING +1D921 ; [*1C20.0020.0002] # SIGNWRITING MOVEMENT-HINGE UP DOWN LARGE +1D922 ; [*1C21.0020.0002] # SIGNWRITING MOVEMENT-HINGE UP DOWN SMALL +1D923 ; [*1C22.0020.0002] # SIGNWRITING MOVEMENT-HINGE UP SEQUENTIAL +1D924 ; [*1C23.0020.0002] # SIGNWRITING MOVEMENT-HINGE DOWN SEQUENTIAL +1D925 ; [*1C24.0020.0002] # SIGNWRITING MOVEMENT-HINGE UP DOWN ALTERNATING LARGE +1D926 ; [*1C25.0020.0002] # SIGNWRITING MOVEMENT-HINGE UP DOWN ALTERNATING SMALL +1D927 ; [*1C26.0020.0002] # SIGNWRITING MOVEMENT-HINGE SIDE TO SIDE SCISSORS +1D928 ; [*1C27.0020.0002] # SIGNWRITING MOVEMENT-WALLPLANE FINGER CONTACT +1D929 ; [*1C28.0020.0002] # SIGNWRITING MOVEMENT-FLOORPLANE FINGER CONTACT +1D92A ; [*1C29.0020.0002] # SIGNWRITING MOVEMENT-WALLPLANE SINGLE STRAIGHT SMALL +1D92B ; [*1C2A.0020.0002] # SIGNWRITING MOVEMENT-WALLPLANE SINGLE STRAIGHT MEDIUM +1D92C ; [*1C2B.0020.0002] # SIGNWRITING MOVEMENT-WALLPLANE SINGLE STRAIGHT LARGE +1D92D ; [*1C2C.0020.0002] # SIGNWRITING MOVEMENT-WALLPLANE SINGLE STRAIGHT LARGEST +1D92E ; [*1C2D.0020.0002] # SIGNWRITING MOVEMENT-WALLPLANE SINGLE WRIST FLEX +1D92F ; [*1C2E.0020.0002] # SIGNWRITING MOVEMENT-WALLPLANE DOUBLE STRAIGHT +1D930 ; [*1C2F.0020.0002] # SIGNWRITING MOVEMENT-WALLPLANE DOUBLE WRIST FLEX +1D931 ; [*1C30.0020.0002] # SIGNWRITING MOVEMENT-WALLPLANE DOUBLE ALTERNATING +1D932 ; [*1C31.0020.0002] # SIGNWRITING MOVEMENT-WALLPLANE DOUBLE ALTERNATING WRIST FLEX +1D933 ; [*1C32.0020.0002] # SIGNWRITING MOVEMENT-WALLPLANE CROSS +1D934 ; [*1C33.0020.0002] # SIGNWRITING MOVEMENT-WALLPLANE TRIPLE STRAIGHT MOVEMENT +1D935 ; [*1C34.0020.0002] # SIGNWRITING MOVEMENT-WALLPLANE TRIPLE WRIST FLEX +1D936 ; [*1C35.0020.0002] # SIGNWRITING MOVEMENT-WALLPLANE TRIPLE ALTERNATING +1D937 ; [*1C36.0020.0002] # SIGNWRITING MOVEMENT-WALLPLANE TRIPLE ALTERNATING WRIST FLEX +1D938 ; [*1C37.0020.0002] # SIGNWRITING MOVEMENT-WALLPLANE BEND SMALL +1D939 ; [*1C38.0020.0002] # SIGNWRITING MOVEMENT-WALLPLANE BEND MEDIUM +1D93A ; [*1C39.0020.0002] # SIGNWRITING MOVEMENT-WALLPLANE BEND LARGE +1D93B ; [*1C3A.0020.0002] # SIGNWRITING MOVEMENT-WALLPLANE CORNER SMALL +1D93C ; [*1C3B.0020.0002] # SIGNWRITING MOVEMENT-WALLPLANE CORNER MEDIUM +1D93D ; [*1C3C.0020.0002] # SIGNWRITING MOVEMENT-WALLPLANE CORNER LARGE +1D93E ; [*1C3D.0020.0002] # SIGNWRITING MOVEMENT-WALLPLANE CORNER ROTATION +1D93F ; [*1C3E.0020.0002] # SIGNWRITING MOVEMENT-WALLPLANE CHECK SMALL +1D940 ; [*1C3F.0020.0002] # SIGNWRITING MOVEMENT-WALLPLANE CHECK MEDIUM +1D941 ; [*1C40.0020.0002] # SIGNWRITING MOVEMENT-WALLPLANE CHECK LARGE +1D942 ; [*1C41.0020.0002] # SIGNWRITING MOVEMENT-WALLPLANE BOX SMALL +1D943 ; [*1C42.0020.0002] # SIGNWRITING MOVEMENT-WALLPLANE BOX MEDIUM +1D944 ; [*1C43.0020.0002] # SIGNWRITING MOVEMENT-WALLPLANE BOX LARGE +1D945 ; [*1C44.0020.0002] # SIGNWRITING MOVEMENT-WALLPLANE ZIGZAG SMALL +1D946 ; [*1C45.0020.0002] # SIGNWRITING MOVEMENT-WALLPLANE ZIGZAG MEDIUM +1D947 ; [*1C46.0020.0002] # SIGNWRITING MOVEMENT-WALLPLANE ZIGZAG LARGE +1D948 ; [*1C47.0020.0002] # SIGNWRITING MOVEMENT-WALLPLANE PEAKS SMALL +1D949 ; [*1C48.0020.0002] # SIGNWRITING MOVEMENT-WALLPLANE PEAKS MEDIUM +1D94A ; [*1C49.0020.0002] # SIGNWRITING MOVEMENT-WALLPLANE PEAKS LARGE +1D94B ; [*1C4A.0020.0002] # SIGNWRITING TRAVEL-WALLPLANE ROTATION-WALLPLANE SINGLE +1D94C ; [*1C4B.0020.0002] # SIGNWRITING TRAVEL-WALLPLANE ROTATION-WALLPLANE DOUBLE +1D94D ; [*1C4C.0020.0002] # SIGNWRITING TRAVEL-WALLPLANE ROTATION-WALLPLANE ALTERNATING +1D94E ; [*1C4D.0020.0002] # SIGNWRITING TRAVEL-WALLPLANE ROTATION-FLOORPLANE SINGLE +1D94F ; [*1C4E.0020.0002] # SIGNWRITING TRAVEL-WALLPLANE ROTATION-FLOORPLANE DOUBLE +1D950 ; [*1C4F.0020.0002] # SIGNWRITING TRAVEL-WALLPLANE ROTATION-FLOORPLANE ALTERNATING +1D951 ; [*1C50.0020.0002] # SIGNWRITING TRAVEL-WALLPLANE SHAKING +1D952 ; [*1C51.0020.0002] # SIGNWRITING TRAVEL-WALLPLANE ARM SPIRAL SINGLE +1D953 ; [*1C52.0020.0002] # SIGNWRITING TRAVEL-WALLPLANE ARM SPIRAL DOUBLE +1D954 ; [*1C53.0020.0002] # SIGNWRITING TRAVEL-WALLPLANE ARM SPIRAL TRIPLE +1D955 ; [*1C54.0020.0002] # SIGNWRITING MOVEMENT-DIAGONAL AWAY SMALL +1D956 ; [*1C55.0020.0002] # SIGNWRITING MOVEMENT-DIAGONAL AWAY MEDIUM +1D957 ; [*1C56.0020.0002] # SIGNWRITING MOVEMENT-DIAGONAL AWAY LARGE +1D958 ; [*1C57.0020.0002] # SIGNWRITING MOVEMENT-DIAGONAL AWAY LARGEST +1D959 ; [*1C58.0020.0002] # SIGNWRITING MOVEMENT-DIAGONAL TOWARDS SMALL +1D95A ; [*1C59.0020.0002] # SIGNWRITING MOVEMENT-DIAGONAL TOWARDS MEDIUM +1D95B ; [*1C5A.0020.0002] # SIGNWRITING MOVEMENT-DIAGONAL TOWARDS LARGE +1D95C ; [*1C5B.0020.0002] # SIGNWRITING MOVEMENT-DIAGONAL TOWARDS LARGEST +1D95D ; [*1C5C.0020.0002] # SIGNWRITING MOVEMENT-DIAGONAL BETWEEN AWAY SMALL +1D95E ; [*1C5D.0020.0002] # SIGNWRITING MOVEMENT-DIAGONAL BETWEEN AWAY MEDIUM +1D95F ; [*1C5E.0020.0002] # SIGNWRITING MOVEMENT-DIAGONAL BETWEEN AWAY LARGE +1D960 ; [*1C5F.0020.0002] # SIGNWRITING MOVEMENT-DIAGONAL BETWEEN AWAY LARGEST +1D961 ; [*1C60.0020.0002] # SIGNWRITING MOVEMENT-DIAGONAL BETWEEN TOWARDS SMALL +1D962 ; [*1C61.0020.0002] # SIGNWRITING MOVEMENT-DIAGONAL BETWEEN TOWARDS MEDIUM +1D963 ; [*1C62.0020.0002] # SIGNWRITING MOVEMENT-DIAGONAL BETWEEN TOWARDS LARGE +1D964 ; [*1C63.0020.0002] # SIGNWRITING MOVEMENT-DIAGONAL BETWEEN TOWARDS LARGEST +1D965 ; [*1C64.0020.0002] # SIGNWRITING MOVEMENT-FLOORPLANE SINGLE STRAIGHT SMALL +1D966 ; [*1C65.0020.0002] # SIGNWRITING MOVEMENT-FLOORPLANE SINGLE STRAIGHT MEDIUM +1D967 ; [*1C66.0020.0002] # SIGNWRITING MOVEMENT-FLOORPLANE SINGLE STRAIGHT LARGE +1D968 ; [*1C67.0020.0002] # SIGNWRITING MOVEMENT-FLOORPLANE SINGLE STRAIGHT LARGEST +1D969 ; [*1C68.0020.0002] # SIGNWRITING MOVEMENT-FLOORPLANE SINGLE WRIST FLEX +1D96A ; [*1C69.0020.0002] # SIGNWRITING MOVEMENT-FLOORPLANE DOUBLE STRAIGHT +1D96B ; [*1C6A.0020.0002] # SIGNWRITING MOVEMENT-FLOORPLANE DOUBLE WRIST FLEX +1D96C ; [*1C6B.0020.0002] # SIGNWRITING MOVEMENT-FLOORPLANE DOUBLE ALTERNATING +1D96D ; [*1C6C.0020.0002] # SIGNWRITING MOVEMENT-FLOORPLANE DOUBLE ALTERNATING WRIST FLEX +1D96E ; [*1C6D.0020.0002] # SIGNWRITING MOVEMENT-FLOORPLANE CROSS +1D96F ; [*1C6E.0020.0002] # SIGNWRITING MOVEMENT-FLOORPLANE TRIPLE STRAIGHT MOVEMENT +1D970 ; [*1C6F.0020.0002] # SIGNWRITING MOVEMENT-FLOORPLANE TRIPLE WRIST FLEX +1D971 ; [*1C70.0020.0002] # SIGNWRITING MOVEMENT-FLOORPLANE TRIPLE ALTERNATING MOVEMENT +1D972 ; [*1C71.0020.0002] # SIGNWRITING MOVEMENT-FLOORPLANE TRIPLE ALTERNATING WRIST FLEX +1D973 ; [*1C72.0020.0002] # SIGNWRITING MOVEMENT-FLOORPLANE BEND +1D974 ; [*1C73.0020.0002] # SIGNWRITING MOVEMENT-FLOORPLANE CORNER SMALL +1D975 ; [*1C74.0020.0002] # SIGNWRITING MOVEMENT-FLOORPLANE CORNER MEDIUM +1D976 ; [*1C75.0020.0002] # SIGNWRITING MOVEMENT-FLOORPLANE CORNER LARGE +1D977 ; [*1C76.0020.0002] # SIGNWRITING MOVEMENT-FLOORPLANE CHECK +1D978 ; [*1C77.0020.0002] # SIGNWRITING MOVEMENT-FLOORPLANE BOX SMALL +1D979 ; [*1C78.0020.0002] # SIGNWRITING MOVEMENT-FLOORPLANE BOX MEDIUM +1D97A ; [*1C79.0020.0002] # SIGNWRITING MOVEMENT-FLOORPLANE BOX LARGE +1D97B ; [*1C7A.0020.0002] # SIGNWRITING MOVEMENT-FLOORPLANE ZIGZAG SMALL +1D97C ; [*1C7B.0020.0002] # SIGNWRITING MOVEMENT-FLOORPLANE ZIGZAG MEDIUM +1D97D ; [*1C7C.0020.0002] # SIGNWRITING MOVEMENT-FLOORPLANE ZIGZAG LARGE +1D97E ; [*1C7D.0020.0002] # SIGNWRITING MOVEMENT-FLOORPLANE PEAKS SMALL +1D97F ; [*1C7E.0020.0002] # SIGNWRITING MOVEMENT-FLOORPLANE PEAKS MEDIUM +1D980 ; [*1C7F.0020.0002] # SIGNWRITING MOVEMENT-FLOORPLANE PEAKS LARGE +1D981 ; [*1C80.0020.0002] # SIGNWRITING TRAVEL-FLOORPLANE ROTATION-FLOORPLANE SINGLE +1D982 ; [*1C81.0020.0002] # SIGNWRITING TRAVEL-FLOORPLANE ROTATION-FLOORPLANE DOUBLE +1D983 ; [*1C82.0020.0002] # SIGNWRITING TRAVEL-FLOORPLANE ROTATION-FLOORPLANE ALTERNATING +1D984 ; [*1C83.0020.0002] # SIGNWRITING TRAVEL-FLOORPLANE ROTATION-WALLPLANE SINGLE +1D985 ; [*1C84.0020.0002] # SIGNWRITING TRAVEL-FLOORPLANE ROTATION-WALLPLANE DOUBLE +1D986 ; [*1C85.0020.0002] # SIGNWRITING TRAVEL-FLOORPLANE ROTATION-WALLPLANE ALTERNATING +1D987 ; [*1C86.0020.0002] # SIGNWRITING TRAVEL-FLOORPLANE SHAKING +1D988 ; [*1C87.0020.0002] # SIGNWRITING MOVEMENT-WALLPLANE CURVE QUARTER SMALL +1D989 ; [*1C88.0020.0002] # SIGNWRITING MOVEMENT-WALLPLANE CURVE QUARTER MEDIUM +1D98A ; [*1C89.0020.0002] # SIGNWRITING MOVEMENT-WALLPLANE CURVE QUARTER LARGE +1D98B ; [*1C8A.0020.0002] # SIGNWRITING MOVEMENT-WALLPLANE CURVE QUARTER LARGEST +1D98C ; [*1C8B.0020.0002] # SIGNWRITING MOVEMENT-WALLPLANE CURVE HALF-CIRCLE SMALL +1D98D ; [*1C8C.0020.0002] # SIGNWRITING MOVEMENT-WALLPLANE CURVE HALF-CIRCLE MEDIUM +1D98E ; [*1C8D.0020.0002] # SIGNWRITING MOVEMENT-WALLPLANE CURVE HALF-CIRCLE LARGE +1D98F ; [*1C8E.0020.0002] # SIGNWRITING MOVEMENT-WALLPLANE CURVE HALF-CIRCLE LARGEST +1D990 ; [*1C8F.0020.0002] # SIGNWRITING MOVEMENT-WALLPLANE CURVE THREE-QUARTER CIRCLE SMALL +1D991 ; [*1C90.0020.0002] # SIGNWRITING MOVEMENT-WALLPLANE CURVE THREE-QUARTER CIRCLE MEDIUM +1D992 ; [*1C91.0020.0002] # SIGNWRITING MOVEMENT-WALLPLANE HUMP SMALL +1D993 ; [*1C92.0020.0002] # SIGNWRITING MOVEMENT-WALLPLANE HUMP MEDIUM +1D994 ; [*1C93.0020.0002] # SIGNWRITING MOVEMENT-WALLPLANE HUMP LARGE +1D995 ; [*1C94.0020.0002] # SIGNWRITING MOVEMENT-WALLPLANE LOOP SMALL +1D996 ; [*1C95.0020.0002] # SIGNWRITING MOVEMENT-WALLPLANE LOOP MEDIUM +1D997 ; [*1C96.0020.0002] # SIGNWRITING MOVEMENT-WALLPLANE LOOP LARGE +1D998 ; [*1C97.0020.0002] # SIGNWRITING MOVEMENT-WALLPLANE LOOP SMALL DOUBLE +1D999 ; [*1C98.0020.0002] # SIGNWRITING MOVEMENT-WALLPLANE WAVE CURVE DOUBLE SMALL +1D99A ; [*1C99.0020.0002] # SIGNWRITING MOVEMENT-WALLPLANE WAVE CURVE DOUBLE MEDIUM +1D99B ; [*1C9A.0020.0002] # SIGNWRITING MOVEMENT-WALLPLANE WAVE CURVE DOUBLE LARGE +1D99C ; [*1C9B.0020.0002] # SIGNWRITING MOVEMENT-WALLPLANE WAVE CURVE TRIPLE SMALL +1D99D ; [*1C9C.0020.0002] # SIGNWRITING MOVEMENT-WALLPLANE WAVE CURVE TRIPLE MEDIUM +1D99E ; [*1C9D.0020.0002] # SIGNWRITING MOVEMENT-WALLPLANE WAVE CURVE TRIPLE LARGE +1D99F ; [*1C9E.0020.0002] # SIGNWRITING MOVEMENT-WALLPLANE CURVE THEN STRAIGHT +1D9A0 ; [*1C9F.0020.0002] # SIGNWRITING MOVEMENT-WALLPLANE CURVED CROSS SMALL +1D9A1 ; [*1CA0.0020.0002] # SIGNWRITING MOVEMENT-WALLPLANE CURVED CROSS MEDIUM +1D9A2 ; [*1CA1.0020.0002] # SIGNWRITING ROTATION-WALLPLANE SINGLE +1D9A3 ; [*1CA2.0020.0002] # SIGNWRITING ROTATION-WALLPLANE DOUBLE +1D9A4 ; [*1CA3.0020.0002] # SIGNWRITING ROTATION-WALLPLANE ALTERNATE +1D9A5 ; [*1CA4.0020.0002] # SIGNWRITING MOVEMENT-WALLPLANE SHAKING +1D9A6 ; [*1CA5.0020.0002] # SIGNWRITING MOVEMENT-WALLPLANE CURVE HITTING FRONT WALL +1D9A7 ; [*1CA6.0020.0002] # SIGNWRITING MOVEMENT-WALLPLANE HUMP HITTING FRONT WALL +1D9A8 ; [*1CA7.0020.0002] # SIGNWRITING MOVEMENT-WALLPLANE LOOP HITTING FRONT WALL +1D9A9 ; [*1CA8.0020.0002] # SIGNWRITING MOVEMENT-WALLPLANE WAVE HITTING FRONT WALL +1D9AA ; [*1CA9.0020.0002] # SIGNWRITING ROTATION-WALLPLANE SINGLE HITTING FRONT WALL +1D9AB ; [*1CAA.0020.0002] # SIGNWRITING ROTATION-WALLPLANE DOUBLE HITTING FRONT WALL +1D9AC ; [*1CAB.0020.0002] # SIGNWRITING ROTATION-WALLPLANE ALTERNATING HITTING FRONT WALL +1D9AD ; [*1CAC.0020.0002] # SIGNWRITING MOVEMENT-WALLPLANE CURVE HITTING CHEST +1D9AE ; [*1CAD.0020.0002] # SIGNWRITING MOVEMENT-WALLPLANE HUMP HITTING CHEST +1D9AF ; [*1CAE.0020.0002] # SIGNWRITING MOVEMENT-WALLPLANE LOOP HITTING CHEST +1D9B0 ; [*1CAF.0020.0002] # SIGNWRITING MOVEMENT-WALLPLANE WAVE HITTING CHEST +1D9B1 ; [*1CB0.0020.0002] # SIGNWRITING ROTATION-WALLPLANE SINGLE HITTING CHEST +1D9B2 ; [*1CB1.0020.0002] # SIGNWRITING ROTATION-WALLPLANE DOUBLE HITTING CHEST +1D9B3 ; [*1CB2.0020.0002] # SIGNWRITING ROTATION-WALLPLANE ALTERNATING HITTING CHEST +1D9B4 ; [*1CB3.0020.0002] # SIGNWRITING MOVEMENT-WALLPLANE WAVE DIAGONAL PATH SMALL +1D9B5 ; [*1CB4.0020.0002] # SIGNWRITING MOVEMENT-WALLPLANE WAVE DIAGONAL PATH MEDIUM +1D9B6 ; [*1CB5.0020.0002] # SIGNWRITING MOVEMENT-WALLPLANE WAVE DIAGONAL PATH LARGE +1D9B7 ; [*1CB6.0020.0002] # SIGNWRITING MOVEMENT-FLOORPLANE CURVE HITTING CEILING SMALL +1D9B8 ; [*1CB7.0020.0002] # SIGNWRITING MOVEMENT-FLOORPLANE CURVE HITTING CEILING LARGE +1D9B9 ; [*1CB8.0020.0002] # SIGNWRITING MOVEMENT-FLOORPLANE HUMP HITTING CEILING SMALL DOUBLE +1D9BA ; [*1CB9.0020.0002] # SIGNWRITING MOVEMENT-FLOORPLANE HUMP HITTING CEILING LARGE DOUBLE +1D9BB ; [*1CBA.0020.0002] # SIGNWRITING MOVEMENT-FLOORPLANE HUMP HITTING CEILING SMALL TRIPLE +1D9BC ; [*1CBB.0020.0002] # SIGNWRITING MOVEMENT-FLOORPLANE HUMP HITTING CEILING LARGE TRIPLE +1D9BD ; [*1CBC.0020.0002] # SIGNWRITING MOVEMENT-FLOORPLANE LOOP HITTING CEILING SMALL SINGLE +1D9BE ; [*1CBD.0020.0002] # SIGNWRITING MOVEMENT-FLOORPLANE LOOP HITTING CEILING LARGE SINGLE +1D9BF ; [*1CBE.0020.0002] # SIGNWRITING MOVEMENT-FLOORPLANE LOOP HITTING CEILING SMALL DOUBLE +1D9C0 ; [*1CBF.0020.0002] # SIGNWRITING MOVEMENT-FLOORPLANE LOOP HITTING CEILING LARGE DOUBLE +1D9C1 ; [*1CC0.0020.0002] # SIGNWRITING MOVEMENT-FLOORPLANE WAVE HITTING CEILING SMALL +1D9C2 ; [*1CC1.0020.0002] # SIGNWRITING MOVEMENT-FLOORPLANE WAVE HITTING CEILING LARGE +1D9C3 ; [*1CC2.0020.0002] # SIGNWRITING ROTATION-FLOORPLANE SINGLE HITTING CEILING +1D9C4 ; [*1CC3.0020.0002] # SIGNWRITING ROTATION-FLOORPLANE DOUBLE HITTING CEILING +1D9C5 ; [*1CC4.0020.0002] # SIGNWRITING ROTATION-FLOORPLANE ALTERNATING HITTING CEILING +1D9C6 ; [*1CC5.0020.0002] # SIGNWRITING MOVEMENT-FLOORPLANE CURVE HITTING FLOOR SMALL +1D9C7 ; [*1CC6.0020.0002] # SIGNWRITING MOVEMENT-FLOORPLANE CURVE HITTING FLOOR LARGE +1D9C8 ; [*1CC7.0020.0002] # SIGNWRITING MOVEMENT-FLOORPLANE HUMP HITTING FLOOR SMALL DOUBLE +1D9C9 ; [*1CC8.0020.0002] # SIGNWRITING MOVEMENT-FLOORPLANE HUMP HITTING FLOOR LARGE DOUBLE +1D9CA ; [*1CC9.0020.0002] # SIGNWRITING MOVEMENT-FLOORPLANE HUMP HITTING FLOOR TRIPLE SMALL TRIPLE +1D9CB ; [*1CCA.0020.0002] # SIGNWRITING MOVEMENT-FLOORPLANE HUMP HITTING FLOOR TRIPLE LARGE TRIPLE +1D9CC ; [*1CCB.0020.0002] # SIGNWRITING MOVEMENT-FLOORPLANE LOOP HITTING FLOOR SMALL SINGLE +1D9CD ; [*1CCC.0020.0002] # SIGNWRITING MOVEMENT-FLOORPLANE LOOP HITTING FLOOR LARGE SINGLE +1D9CE ; [*1CCD.0020.0002] # SIGNWRITING MOVEMENT-FLOORPLANE LOOP HITTING FLOOR SMALL DOUBLE +1D9CF ; [*1CCE.0020.0002] # SIGNWRITING MOVEMENT-FLOORPLANE LOOP HITTING FLOOR LARGE DOUBLE +1D9D0 ; [*1CCF.0020.0002] # SIGNWRITING MOVEMENT-FLOORPLANE WAVE HITTING FLOOR SMALL +1D9D1 ; [*1CD0.0020.0002] # SIGNWRITING MOVEMENT-FLOORPLANE WAVE HITTING FLOOR LARGE +1D9D2 ; [*1CD1.0020.0002] # SIGNWRITING ROTATION-FLOORPLANE SINGLE HITTING FLOOR +1D9D3 ; [*1CD2.0020.0002] # SIGNWRITING ROTATION-FLOORPLANE DOUBLE HITTING FLOOR +1D9D4 ; [*1CD3.0020.0002] # SIGNWRITING ROTATION-FLOORPLANE ALTERNATING HITTING FLOOR +1D9D5 ; [*1CD4.0020.0002] # SIGNWRITING MOVEMENT-FLOORPLANE CURVE SMALL +1D9D6 ; [*1CD5.0020.0002] # SIGNWRITING MOVEMENT-FLOORPLANE CURVE MEDIUM +1D9D7 ; [*1CD6.0020.0002] # SIGNWRITING MOVEMENT-FLOORPLANE CURVE LARGE +1D9D8 ; [*1CD7.0020.0002] # SIGNWRITING MOVEMENT-FLOORPLANE CURVE LARGEST +1D9D9 ; [*1CD8.0020.0002] # SIGNWRITING MOVEMENT-FLOORPLANE CURVE COMBINED +1D9DA ; [*1CD9.0020.0002] # SIGNWRITING MOVEMENT-FLOORPLANE HUMP SMALL +1D9DB ; [*1CDA.0020.0002] # SIGNWRITING MOVEMENT-FLOORPLANE LOOP SMALL +1D9DC ; [*1CDB.0020.0002] # SIGNWRITING MOVEMENT-FLOORPLANE WAVE SNAKE +1D9DD ; [*1CDC.0020.0002] # SIGNWRITING MOVEMENT-FLOORPLANE WAVE SMALL +1D9DE ; [*1CDD.0020.0002] # SIGNWRITING MOVEMENT-FLOORPLANE WAVE LARGE +1D9DF ; [*1CDE.0020.0002] # SIGNWRITING ROTATION-FLOORPLANE SINGLE +1D9E0 ; [*1CDF.0020.0002] # SIGNWRITING ROTATION-FLOORPLANE DOUBLE +1D9E1 ; [*1CE0.0020.0002] # SIGNWRITING ROTATION-FLOORPLANE ALTERNATING +1D9E2 ; [*1CE1.0020.0002] # SIGNWRITING MOVEMENT-FLOORPLANE SHAKING PARALLEL +1D9E3 ; [*1CE2.0020.0002] # SIGNWRITING MOVEMENT-WALLPLANE ARM CIRCLE SMALL SINGLE +1D9E4 ; [*1CE3.0020.0002] # SIGNWRITING MOVEMENT-WALLPLANE ARM CIRCLE MEDIUM SINGLE +1D9E5 ; [*1CE4.0020.0002] # SIGNWRITING MOVEMENT-WALLPLANE ARM CIRCLE SMALL DOUBLE +1D9E6 ; [*1CE5.0020.0002] # SIGNWRITING MOVEMENT-WALLPLANE ARM CIRCLE MEDIUM DOUBLE +1D9E7 ; [*1CE6.0020.0002] # SIGNWRITING MOVEMENT-FLOORPLANE ARM CIRCLE HITTING WALL SMALL SINGLE +1D9E8 ; [*1CE7.0020.0002] # SIGNWRITING MOVEMENT-FLOORPLANE ARM CIRCLE HITTING WALL MEDIUM SINGLE +1D9E9 ; [*1CE8.0020.0002] # SIGNWRITING MOVEMENT-FLOORPLANE ARM CIRCLE HITTING WALL LARGE SINGLE +1D9EA ; [*1CE9.0020.0002] # SIGNWRITING MOVEMENT-FLOORPLANE ARM CIRCLE HITTING WALL SMALL DOUBLE +1D9EB ; [*1CEA.0020.0002] # SIGNWRITING MOVEMENT-FLOORPLANE ARM CIRCLE HITTING WALL MEDIUM DOUBLE +1D9EC ; [*1CEB.0020.0002] # SIGNWRITING MOVEMENT-FLOORPLANE ARM CIRCLE HITTING WALL LARGE DOUBLE +1D9ED ; [*1CEC.0020.0002] # SIGNWRITING MOVEMENT-WALLPLANE WRIST CIRCLE FRONT SINGLE +1D9EE ; [*1CED.0020.0002] # SIGNWRITING MOVEMENT-WALLPLANE WRIST CIRCLE FRONT DOUBLE +1D9EF ; [*1CEE.0020.0002] # SIGNWRITING MOVEMENT-FLOORPLANE WRIST CIRCLE HITTING WALL SINGLE +1D9F0 ; [*1CEF.0020.0002] # SIGNWRITING MOVEMENT-FLOORPLANE WRIST CIRCLE HITTING WALL DOUBLE +1D9F1 ; [*1CF0.0020.0002] # SIGNWRITING MOVEMENT-WALLPLANE FINGER CIRCLES SINGLE +1D9F2 ; [*1CF1.0020.0002] # SIGNWRITING MOVEMENT-WALLPLANE FINGER CIRCLES DOUBLE +1D9F3 ; [*1CF2.0020.0002] # SIGNWRITING MOVEMENT-FLOORPLANE FINGER CIRCLES HITTING WALL SINGLE +1D9F4 ; [*1CF3.0020.0002] # SIGNWRITING MOVEMENT-FLOORPLANE FINGER CIRCLES HITTING WALL DOUBLE +1D9F5 ; [*1CF4.0020.0002] # SIGNWRITING DYNAMIC ARROWHEAD SMALL +1D9F6 ; [*1CF5.0020.0002] # SIGNWRITING DYNAMIC ARROWHEAD LARGE +1D9F7 ; [*1CF6.0020.0002] # SIGNWRITING DYNAMIC FAST +1D9F8 ; [*1CF7.0020.0002] # SIGNWRITING DYNAMIC SLOW +1D9F9 ; [*1CF8.0020.0002] # SIGNWRITING DYNAMIC TENSE +1D9FA ; [*1CF9.0020.0002] # SIGNWRITING DYNAMIC RELAXED +1D9FB ; [*1CFA.0020.0002] # SIGNWRITING DYNAMIC SIMULTANEOUS +1D9FC ; [*1CFB.0020.0002] # SIGNWRITING DYNAMIC SIMULTANEOUS ALTERNATING +1D9FD ; [*1CFC.0020.0002] # SIGNWRITING DYNAMIC EVERY OTHER TIME +1D9FE ; [*1CFD.0020.0002] # SIGNWRITING DYNAMIC GRADUAL +1D9FF ; [*1CFE.0020.0002] # SIGNWRITING HEAD 1DA00 ; [.0000.0000.0000] # SIGNWRITING HEAD RIM 1DA01 ; [.0000.0000.0000] # SIGNWRITING HEAD MOVEMENT-WALLPLANE STRAIGHT 1DA02 ; [.0000.0000.0000] # SIGNWRITING HEAD MOVEMENT-WALLPLANE TILT @@ -5980,10 +6154,10 @@ FFFC ; [*1AF9.0020.0002] # OBJECT REPLACEMENT CHARACTER 1DA34 ; [.0000.0000.0000] # SIGNWRITING NOSE WIGGLES 1DA35 ; [.0000.0000.0000] # SIGNWRITING AIR BLOWING OUT 1DA36 ; [.0000.0000.0000] # SIGNWRITING AIR SUCKING IN -1DA37 ; [*1AA3.0020.0002] # SIGNWRITING AIR BLOW SMALL ROTATIONS -1DA38 ; [*1AA4.0020.0002] # SIGNWRITING AIR SUCK SMALL ROTATIONS -1DA39 ; [*1AA5.0020.0002] # SIGNWRITING BREATH INHALE -1DA3A ; [*1AA6.0020.0002] # SIGNWRITING BREATH EXHALE +1DA37 ; [*1CFF.0020.0002] # SIGNWRITING AIR BLOW SMALL ROTATIONS +1DA38 ; [*1D00.0020.0002] # SIGNWRITING AIR SUCK SMALL ROTATIONS +1DA39 ; [*1D01.0020.0002] # SIGNWRITING BREATH INHALE +1DA3A ; [*1D02.0020.0002] # SIGNWRITING BREATH EXHALE 1DA3B ; [.0000.0000.0000] # SIGNWRITING MOUTH CLOSED NEUTRAL 1DA3C ; [.0000.0000.0000] # SIGNWRITING MOUTH CLOSED FORWARD 1DA3D ; [.0000.0000.0000] # SIGNWRITING MOUTH CLOSED CONTACT @@ -6034,37 +6208,37 @@ FFFC ; [*1AF9.0020.0002] # OBJECT REPLACEMENT CHARACTER 1DA6A ; [.0000.0000.0000] # SIGNWRITING NECK 1DA6B ; [.0000.0000.0000] # SIGNWRITING HAIR 1DA6C ; [.0000.0000.0000] # SIGNWRITING EXCITEMENT -1DA6D ; [*1AA7.0020.0002] # SIGNWRITING SHOULDER HIP SPINE -1DA6E ; [*1AA8.0020.0002] # SIGNWRITING SHOULDER HIP POSITIONS -1DA6F ; [*1AA9.0020.0002] # SIGNWRITING WALLPLANE SHOULDER HIP MOVE -1DA70 ; [*1AAA.0020.0002] # SIGNWRITING FLOORPLANE SHOULDER HIP MOVE -1DA71 ; [*1AAB.0020.0002] # SIGNWRITING SHOULDER TILTING FROM WAIST -1DA72 ; [*1AAC.0020.0002] # SIGNWRITING TORSO-WALLPLANE STRAIGHT STRETCH -1DA73 ; [*1AAD.0020.0002] # SIGNWRITING TORSO-WALLPLANE CURVED BEND -1DA74 ; [*1AAE.0020.0002] # SIGNWRITING TORSO-FLOORPLANE TWISTING +1DA6D ; [*1D03.0020.0002] # SIGNWRITING SHOULDER HIP SPINE +1DA6E ; [*1D04.0020.0002] # SIGNWRITING SHOULDER HIP POSITIONS +1DA6F ; [*1D05.0020.0002] # SIGNWRITING WALLPLANE SHOULDER HIP MOVE +1DA70 ; [*1D06.0020.0002] # SIGNWRITING FLOORPLANE SHOULDER HIP MOVE +1DA71 ; [*1D07.0020.0002] # SIGNWRITING SHOULDER TILTING FROM WAIST +1DA72 ; [*1D08.0020.0002] # SIGNWRITING TORSO-WALLPLANE STRAIGHT STRETCH +1DA73 ; [*1D09.0020.0002] # SIGNWRITING TORSO-WALLPLANE CURVED BEND +1DA74 ; [*1D0A.0020.0002] # SIGNWRITING TORSO-FLOORPLANE TWISTING 1DA75 ; [.0000.0000.0000] # SIGNWRITING UPPER BODY TILTING FROM HIP JOINTS -1DA76 ; [*1AAF.0020.0002] # SIGNWRITING LIMB COMBINATION -1DA77 ; [*1AB0.0020.0002] # SIGNWRITING LIMB LENGTH-1 -1DA78 ; [*1AB1.0020.0002] # SIGNWRITING LIMB LENGTH-2 -1DA79 ; [*1AB2.0020.0002] # SIGNWRITING LIMB LENGTH-3 -1DA7A ; [*1AB3.0020.0002] # SIGNWRITING LIMB LENGTH-4 -1DA7B ; [*1AB4.0020.0002] # SIGNWRITING LIMB LENGTH-5 -1DA7C ; [*1AB5.0020.0002] # SIGNWRITING LIMB LENGTH-6 -1DA7D ; [*1AB6.0020.0002] # SIGNWRITING LIMB LENGTH-7 -1DA7E ; [*1AB7.0020.0002] # SIGNWRITING FINGER -1DA7F ; [*1AB8.0020.0002] # SIGNWRITING LOCATION-WALLPLANE SPACE -1DA80 ; [*1AB9.0020.0002] # SIGNWRITING LOCATION-FLOORPLANE SPACE -1DA81 ; [*1ABA.0020.0002] # SIGNWRITING LOCATION HEIGHT -1DA82 ; [*1ABB.0020.0002] # SIGNWRITING LOCATION WIDTH -1DA83 ; [*1ABC.0020.0002] # SIGNWRITING LOCATION DEPTH +1DA76 ; [*1D0B.0020.0002] # SIGNWRITING LIMB COMBINATION +1DA77 ; [*1D0C.0020.0002] # SIGNWRITING LIMB LENGTH-1 +1DA78 ; [*1D0D.0020.0002] # SIGNWRITING LIMB LENGTH-2 +1DA79 ; [*1D0E.0020.0002] # SIGNWRITING LIMB LENGTH-3 +1DA7A ; [*1D0F.0020.0002] # SIGNWRITING LIMB LENGTH-4 +1DA7B ; [*1D10.0020.0002] # SIGNWRITING LIMB LENGTH-5 +1DA7C ; [*1D11.0020.0002] # SIGNWRITING LIMB LENGTH-6 +1DA7D ; [*1D12.0020.0002] # SIGNWRITING LIMB LENGTH-7 +1DA7E ; [*1D13.0020.0002] # SIGNWRITING FINGER +1DA7F ; [*1D14.0020.0002] # SIGNWRITING LOCATION-WALLPLANE SPACE +1DA80 ; [*1D15.0020.0002] # SIGNWRITING LOCATION-FLOORPLANE SPACE +1DA81 ; [*1D16.0020.0002] # SIGNWRITING LOCATION HEIGHT +1DA82 ; [*1D17.0020.0002] # SIGNWRITING LOCATION WIDTH +1DA83 ; [*1D18.0020.0002] # SIGNWRITING LOCATION DEPTH 1DA84 ; [.0000.0000.0000] # SIGNWRITING LOCATION HEAD NECK -1DA85 ; [*1ABD.0020.0002] # SIGNWRITING LOCATION TORSO -1DA86 ; [*1ABE.0020.0002] # SIGNWRITING LOCATION LIMBS DIGITS -1DA87 ; [*0493.0020.0002] # SIGNWRITING COMMA -1DA88 ; [*0494.0020.0002] # SIGNWRITING FULL STOP -1DA89 ; [*0495.0020.0002] # SIGNWRITING SEMICOLON -1DA8A ; [*0496.0020.0002] # SIGNWRITING COLON -1DA8B ; [*0497.0020.0002] # SIGNWRITING PARENTHESIS +1DA85 ; [*1D19.0020.0002] # SIGNWRITING LOCATION TORSO +1DA86 ; [*1D1A.0020.0002] # SIGNWRITING LOCATION LIMBS DIGITS +1DA87 ; [*04AF.0020.0002] # SIGNWRITING COMMA +1DA88 ; [*04B0.0020.0002] # SIGNWRITING FULL STOP +1DA89 ; [*04B1.0020.0002] # SIGNWRITING SEMICOLON +1DA8A ; [*04B2.0020.0002] # SIGNWRITING COLON +1DA8B ; [*04B3.0020.0002] # SIGNWRITING PARENTHESIS 1DA9B ; [.0000.0000.0000] # SIGNWRITING FILL MODIFIER-2 1DA9C ; [.0000.0000.0000] # SIGNWRITING FILL MODIFIER-3 1DA9D ; [.0000.0000.0000] # SIGNWRITING FILL MODIFIER-4 @@ -6085,6 +6259,7 @@ FFFC ; [*1AF9.0020.0002] # OBJECT REPLACEMENT CHARACTER 1DAAD ; [.0000.0000.0000] # SIGNWRITING ROTATION MODIFIER-14 1DAAE ; [.0000.0000.0000] # SIGNWRITING ROTATION MODIFIER-15 1DAAF ; [.0000.0000.0000] # SIGNWRITING ROTATION MODIFIER-16 +1E14F ; [*1123.0020.0002] # NYIAKENG PUACHUE HMONG CIRCLED CA 1E8D0 ; [.0000.0000.0000] # MENDE KIKAKUI COMBINING NUMBER TEENS 1E8D1 ; [.0000.0000.0000] # MENDE KIKAKUI COMBINING NUMBER TENS 1E8D2 ; [.0000.0000.0000] # MENDE KIKAKUI COMBINING NUMBER HUNDREDS @@ -6092,1768 +6267,2355 @@ FFFC ; [*1AF9.0020.0002] # OBJECT REPLACEMENT CHARACTER 1E8D4 ; [.0000.0000.0000] # MENDE KIKAKUI COMBINING NUMBER TEN THOUSANDS 1E8D5 ; [.0000.0000.0000] # MENDE KIKAKUI COMBINING NUMBER HUNDRED THOUSANDS 1E8D6 ; [.0000.0000.0000] # MENDE KIKAKUI COMBINING NUMBER MILLIONS -1E95E ; [*0266.0020.0002] # ADLAM INITIAL EXCLAMATION MARK -1E95F ; [*0275.0020.0002] # ADLAM INITIAL QUESTION MARK -1EEF0 ; [*0511.0020.0002] # ARABIC MATHEMATICAL OPERATOR MEEM WITH HAH WITH TATWEEL -1EEF1 ; [*0512.0020.0002] # ARABIC MATHEMATICAL OPERATOR HAH WITH DAL -1F000 ; [*11DF.0020.0002] # MAHJONG TILE EAST WIND -1F001 ; [*11E0.0020.0002] # MAHJONG TILE SOUTH WIND -1F002 ; [*11E1.0020.0002] # MAHJONG TILE WEST WIND -1F003 ; [*11E2.0020.0002] # MAHJONG TILE NORTH WIND -1F004 ; [*11E3.0020.0002] # MAHJONG TILE RED DRAGON -1F005 ; [*11E4.0020.0002] # MAHJONG TILE GREEN DRAGON -1F006 ; [*11E5.0020.0002] # MAHJONG TILE WHITE DRAGON -1F007 ; [*11E6.0020.0002] # MAHJONG TILE ONE OF CHARACTERS -1F008 ; [*11E7.0020.0002] # MAHJONG TILE TWO OF CHARACTERS -1F009 ; [*11E8.0020.0002] # MAHJONG TILE THREE OF CHARACTERS -1F00A ; [*11E9.0020.0002] # MAHJONG TILE FOUR OF CHARACTERS -1F00B ; [*11EA.0020.0002] # MAHJONG TILE FIVE OF CHARACTERS -1F00C ; [*11EB.0020.0002] # MAHJONG TILE SIX OF CHARACTERS -1F00D ; [*11EC.0020.0002] # MAHJONG TILE SEVEN OF CHARACTERS -1F00E ; [*11ED.0020.0002] # MAHJONG TILE EIGHT OF CHARACTERS -1F00F ; [*11EE.0020.0002] # MAHJONG TILE NINE OF CHARACTERS -1F010 ; [*11EF.0020.0002] # MAHJONG TILE ONE OF BAMBOOS -1F011 ; [*11F0.0020.0002] # MAHJONG TILE TWO OF BAMBOOS -1F012 ; [*11F1.0020.0002] # MAHJONG TILE THREE OF BAMBOOS -1F013 ; [*11F2.0020.0002] # MAHJONG TILE FOUR OF BAMBOOS -1F014 ; [*11F3.0020.0002] # MAHJONG TILE FIVE OF BAMBOOS -1F015 ; [*11F4.0020.0002] # MAHJONG TILE SIX OF BAMBOOS -1F016 ; [*11F5.0020.0002] # MAHJONG TILE SEVEN OF BAMBOOS -1F017 ; [*11F6.0020.0002] # MAHJONG TILE EIGHT OF BAMBOOS -1F018 ; [*11F7.0020.0002] # MAHJONG TILE NINE OF BAMBOOS -1F019 ; [*11F8.0020.0002] # MAHJONG TILE ONE OF CIRCLES -1F01A ; [*11F9.0020.0002] # MAHJONG TILE TWO OF CIRCLES -1F01B ; [*11FA.0020.0002] # MAHJONG TILE THREE OF CIRCLES -1F01C ; [*11FB.0020.0002] # MAHJONG TILE FOUR OF CIRCLES -1F01D ; [*11FC.0020.0002] # MAHJONG TILE FIVE OF CIRCLES -1F01E ; [*11FD.0020.0002] # MAHJONG TILE SIX OF CIRCLES -1F01F ; [*11FE.0020.0002] # MAHJONG TILE SEVEN OF CIRCLES -1F020 ; [*11FF.0020.0002] # MAHJONG TILE EIGHT OF CIRCLES -1F021 ; [*1200.0020.0002] # MAHJONG TILE NINE OF CIRCLES -1F022 ; [*1201.0020.0002] # MAHJONG TILE PLUM -1F023 ; [*1202.0020.0002] # MAHJONG TILE ORCHID -1F024 ; [*1203.0020.0002] # MAHJONG TILE BAMBOO -1F025 ; [*1204.0020.0002] # MAHJONG TILE CHRYSANTHEMUM -1F026 ; [*1205.0020.0002] # MAHJONG TILE SPRING -1F027 ; [*1206.0020.0002] # MAHJONG TILE SUMMER -1F028 ; [*1207.0020.0002] # MAHJONG TILE AUTUMN -1F029 ; [*1208.0020.0002] # MAHJONG TILE WINTER -1F02A ; [*1209.0020.0002] # MAHJONG TILE JOKER -1F02B ; [*120A.0020.0002] # MAHJONG TILE BACK -1F030 ; [*120B.0020.0002] # DOMINO TILE HORIZONTAL BACK -1F031 ; [*120C.0020.0002] # DOMINO TILE HORIZONTAL-00-00 -1F032 ; [*120D.0020.0002] # DOMINO TILE HORIZONTAL-00-01 -1F033 ; [*120E.0020.0002] # DOMINO TILE HORIZONTAL-00-02 -1F034 ; [*120F.0020.0002] # DOMINO TILE HORIZONTAL-00-03 -1F035 ; [*1210.0020.0002] # DOMINO TILE HORIZONTAL-00-04 -1F036 ; [*1211.0020.0002] # DOMINO TILE HORIZONTAL-00-05 -1F037 ; [*1212.0020.0002] # DOMINO TILE HORIZONTAL-00-06 -1F038 ; [*1213.0020.0002] # DOMINO TILE HORIZONTAL-01-00 -1F039 ; [*1214.0020.0002] # DOMINO TILE HORIZONTAL-01-01 -1F03A ; [*1215.0020.0002] # DOMINO TILE HORIZONTAL-01-02 -1F03B ; [*1216.0020.0002] # DOMINO TILE HORIZONTAL-01-03 -1F03C ; [*1217.0020.0002] # DOMINO TILE HORIZONTAL-01-04 -1F03D ; [*1218.0020.0002] # DOMINO TILE HORIZONTAL-01-05 -1F03E ; [*1219.0020.0002] # DOMINO TILE HORIZONTAL-01-06 -1F03F ; [*121A.0020.0002] # DOMINO TILE HORIZONTAL-02-00 -1F040 ; [*121B.0020.0002] # DOMINO TILE HORIZONTAL-02-01 -1F041 ; [*121C.0020.0002] # DOMINO TILE HORIZONTAL-02-02 -1F042 ; [*121D.0020.0002] # DOMINO TILE HORIZONTAL-02-03 -1F043 ; [*121E.0020.0002] # DOMINO TILE HORIZONTAL-02-04 -1F044 ; [*121F.0020.0002] # DOMINO TILE HORIZONTAL-02-05 -1F045 ; [*1220.0020.0002] # DOMINO TILE HORIZONTAL-02-06 -1F046 ; [*1221.0020.0002] # DOMINO TILE HORIZONTAL-03-00 -1F047 ; [*1222.0020.0002] # DOMINO TILE HORIZONTAL-03-01 -1F048 ; [*1223.0020.0002] # DOMINO TILE HORIZONTAL-03-02 -1F049 ; [*1224.0020.0002] # DOMINO TILE HORIZONTAL-03-03 -1F04A ; [*1225.0020.0002] # DOMINO TILE HORIZONTAL-03-04 -1F04B ; [*1226.0020.0002] # DOMINO TILE HORIZONTAL-03-05 -1F04C ; [*1227.0020.0002] # DOMINO TILE HORIZONTAL-03-06 -1F04D ; [*1228.0020.0002] # DOMINO TILE HORIZONTAL-04-00 -1F04E ; [*1229.0020.0002] # DOMINO TILE HORIZONTAL-04-01 -1F04F ; [*122A.0020.0002] # DOMINO TILE HORIZONTAL-04-02 -1F050 ; [*122B.0020.0002] # DOMINO TILE HORIZONTAL-04-03 -1F051 ; [*122C.0020.0002] # DOMINO TILE HORIZONTAL-04-04 -1F052 ; [*122D.0020.0002] # DOMINO TILE HORIZONTAL-04-05 -1F053 ; [*122E.0020.0002] # DOMINO TILE HORIZONTAL-04-06 -1F054 ; [*122F.0020.0002] # DOMINO TILE HORIZONTAL-05-00 -1F055 ; [*1230.0020.0002] # DOMINO TILE HORIZONTAL-05-01 -1F056 ; [*1231.0020.0002] # DOMINO TILE HORIZONTAL-05-02 -1F057 ; [*1232.0020.0002] # DOMINO TILE HORIZONTAL-05-03 -1F058 ; [*1233.0020.0002] # DOMINO TILE HORIZONTAL-05-04 -1F059 ; [*1234.0020.0002] # DOMINO TILE HORIZONTAL-05-05 -1F05A ; [*1235.0020.0002] # DOMINO TILE HORIZONTAL-05-06 -1F05B ; [*1236.0020.0002] # DOMINO TILE HORIZONTAL-06-00 -1F05C ; [*1237.0020.0002] # DOMINO TILE HORIZONTAL-06-01 -1F05D ; [*1238.0020.0002] # DOMINO TILE HORIZONTAL-06-02 -1F05E ; [*1239.0020.0002] # DOMINO TILE HORIZONTAL-06-03 -1F05F ; [*123A.0020.0002] # DOMINO TILE HORIZONTAL-06-04 -1F060 ; [*123B.0020.0002] # DOMINO TILE HORIZONTAL-06-05 -1F061 ; [*123C.0020.0002] # DOMINO TILE HORIZONTAL-06-06 -1F062 ; [*123D.0020.0002] # DOMINO TILE VERTICAL BACK -1F063 ; [*123E.0020.0002] # DOMINO TILE VERTICAL-00-00 -1F064 ; [*123F.0020.0002] # DOMINO TILE VERTICAL-00-01 -1F065 ; [*1240.0020.0002] # DOMINO TILE VERTICAL-00-02 -1F066 ; [*1241.0020.0002] # DOMINO TILE VERTICAL-00-03 -1F067 ; [*1242.0020.0002] # DOMINO TILE VERTICAL-00-04 -1F068 ; [*1243.0020.0002] # DOMINO TILE VERTICAL-00-05 -1F069 ; [*1244.0020.0002] # DOMINO TILE VERTICAL-00-06 -1F06A ; [*1245.0020.0002] # DOMINO TILE VERTICAL-01-00 -1F06B ; [*1246.0020.0002] # DOMINO TILE VERTICAL-01-01 -1F06C ; [*1247.0020.0002] # DOMINO TILE VERTICAL-01-02 -1F06D ; [*1248.0020.0002] # DOMINO TILE VERTICAL-01-03 -1F06E ; [*1249.0020.0002] # DOMINO TILE VERTICAL-01-04 -1F06F ; [*124A.0020.0002] # DOMINO TILE VERTICAL-01-05 -1F070 ; [*124B.0020.0002] # DOMINO TILE VERTICAL-01-06 -1F071 ; [*124C.0020.0002] # DOMINO TILE VERTICAL-02-00 -1F072 ; [*124D.0020.0002] # DOMINO TILE VERTICAL-02-01 -1F073 ; [*124E.0020.0002] # DOMINO TILE VERTICAL-02-02 -1F074 ; [*124F.0020.0002] # DOMINO TILE VERTICAL-02-03 -1F075 ; [*1250.0020.0002] # DOMINO TILE VERTICAL-02-04 -1F076 ; [*1251.0020.0002] # DOMINO TILE VERTICAL-02-05 -1F077 ; [*1252.0020.0002] # DOMINO TILE VERTICAL-02-06 -1F078 ; [*1253.0020.0002] # DOMINO TILE VERTICAL-03-00 -1F079 ; [*1254.0020.0002] # DOMINO TILE VERTICAL-03-01 -1F07A ; [*1255.0020.0002] # DOMINO TILE VERTICAL-03-02 -1F07B ; [*1256.0020.0002] # DOMINO TILE VERTICAL-03-03 -1F07C ; [*1257.0020.0002] # DOMINO TILE VERTICAL-03-04 -1F07D ; [*1258.0020.0002] # DOMINO TILE VERTICAL-03-05 -1F07E ; [*1259.0020.0002] # DOMINO TILE VERTICAL-03-06 -1F07F ; [*125A.0020.0002] # DOMINO TILE VERTICAL-04-00 -1F080 ; [*125B.0020.0002] # DOMINO TILE VERTICAL-04-01 -1F081 ; [*125C.0020.0002] # DOMINO TILE VERTICAL-04-02 -1F082 ; [*125D.0020.0002] # DOMINO TILE VERTICAL-04-03 -1F083 ; [*125E.0020.0002] # DOMINO TILE VERTICAL-04-04 -1F084 ; [*125F.0020.0002] # DOMINO TILE VERTICAL-04-05 -1F085 ; [*1260.0020.0002] # DOMINO TILE VERTICAL-04-06 -1F086 ; [*1261.0020.0002] # DOMINO TILE VERTICAL-05-00 -1F087 ; [*1262.0020.0002] # DOMINO TILE VERTICAL-05-01 -1F088 ; [*1263.0020.0002] # DOMINO TILE VERTICAL-05-02 -1F089 ; [*1264.0020.0002] # DOMINO TILE VERTICAL-05-03 -1F08A ; [*1265.0020.0002] # DOMINO TILE VERTICAL-05-04 -1F08B ; [*1266.0020.0002] # DOMINO TILE VERTICAL-05-05 -1F08C ; [*1267.0020.0002] # DOMINO TILE VERTICAL-05-06 -1F08D ; [*1268.0020.0002] # DOMINO TILE VERTICAL-06-00 -1F08E ; [*1269.0020.0002] # DOMINO TILE VERTICAL-06-01 -1F08F ; [*126A.0020.0002] # DOMINO TILE VERTICAL-06-02 -1F090 ; [*126B.0020.0002] # DOMINO TILE VERTICAL-06-03 -1F091 ; [*126C.0020.0002] # DOMINO TILE VERTICAL-06-04 -1F092 ; [*126D.0020.0002] # DOMINO TILE VERTICAL-06-05 -1F093 ; [*126E.0020.0002] # DOMINO TILE VERTICAL-06-06 -1F0A0 ; [*126F.0020.0002] # PLAYING CARD BACK -1F0A1 ; [*1270.0020.0002] # PLAYING CARD ACE OF SPADES -1F0A2 ; [*1271.0020.0002] # PLAYING CARD TWO OF SPADES -1F0A3 ; [*1272.0020.0002] # PLAYING CARD THREE OF SPADES -1F0A4 ; [*1273.0020.0002] # PLAYING CARD FOUR OF SPADES -1F0A5 ; [*1274.0020.0002] # PLAYING CARD FIVE OF SPADES -1F0A6 ; [*1275.0020.0002] # PLAYING CARD SIX OF SPADES -1F0A7 ; [*1276.0020.0002] # PLAYING CARD SEVEN OF SPADES -1F0A8 ; [*1277.0020.0002] # PLAYING CARD EIGHT OF SPADES -1F0A9 ; [*1278.0020.0002] # PLAYING CARD NINE OF SPADES -1F0AA ; [*1279.0020.0002] # PLAYING CARD TEN OF SPADES -1F0AB ; [*127A.0020.0002] # PLAYING CARD JACK OF SPADES -1F0AC ; [*127B.0020.0002] # PLAYING CARD KNIGHT OF SPADES -1F0AD ; [*127C.0020.0002] # PLAYING CARD QUEEN OF SPADES -1F0AE ; [*127D.0020.0002] # PLAYING CARD KING OF SPADES -1F0B1 ; [*127E.0020.0002] # PLAYING CARD ACE OF HEARTS -1F0B2 ; [*127F.0020.0002] # PLAYING CARD TWO OF HEARTS -1F0B3 ; [*1280.0020.0002] # PLAYING CARD THREE OF HEARTS -1F0B4 ; [*1281.0020.0002] # PLAYING CARD FOUR OF HEARTS -1F0B5 ; [*1282.0020.0002] # PLAYING CARD FIVE OF HEARTS -1F0B6 ; [*1283.0020.0002] # PLAYING CARD SIX OF HEARTS -1F0B7 ; [*1284.0020.0002] # PLAYING CARD SEVEN OF HEARTS -1F0B8 ; [*1285.0020.0002] # PLAYING CARD EIGHT OF HEARTS -1F0B9 ; [*1286.0020.0002] # PLAYING CARD NINE OF HEARTS -1F0BA ; [*1287.0020.0002] # PLAYING CARD TEN OF HEARTS -1F0BB ; [*1288.0020.0002] # PLAYING CARD JACK OF HEARTS -1F0BC ; [*1289.0020.0002] # PLAYING CARD KNIGHT OF HEARTS -1F0BD ; [*128A.0020.0002] # PLAYING CARD QUEEN OF HEARTS -1F0BE ; [*128B.0020.0002] # PLAYING CARD KING OF HEARTS -1F0BF ; [*128C.0020.0002] # PLAYING CARD RED JOKER -1F0C1 ; [*128D.0020.0002] # PLAYING CARD ACE OF DIAMONDS -1F0C2 ; [*128E.0020.0002] # PLAYING CARD TWO OF DIAMONDS -1F0C3 ; [*128F.0020.0002] # PLAYING CARD THREE OF DIAMONDS -1F0C4 ; [*1290.0020.0002] # PLAYING CARD FOUR OF DIAMONDS -1F0C5 ; [*1291.0020.0002] # PLAYING CARD FIVE OF DIAMONDS -1F0C6 ; [*1292.0020.0002] # PLAYING CARD SIX OF DIAMONDS -1F0C7 ; [*1293.0020.0002] # PLAYING CARD SEVEN OF DIAMONDS -1F0C8 ; [*1294.0020.0002] # PLAYING CARD EIGHT OF DIAMONDS -1F0C9 ; [*1295.0020.0002] # PLAYING CARD NINE OF DIAMONDS -1F0CA ; [*1296.0020.0002] # PLAYING CARD TEN OF DIAMONDS -1F0CB ; [*1297.0020.0002] # PLAYING CARD JACK OF DIAMONDS -1F0CC ; [*1298.0020.0002] # PLAYING CARD KNIGHT OF DIAMONDS -1F0CD ; [*1299.0020.0002] # PLAYING CARD QUEEN OF DIAMONDS -1F0CE ; [*129A.0020.0002] # PLAYING CARD KING OF DIAMONDS -1F0CF ; [*129B.0020.0002] # PLAYING CARD BLACK JOKER -1F0D1 ; [*129C.0020.0002] # PLAYING CARD ACE OF CLUBS -1F0D2 ; [*129D.0020.0002] # PLAYING CARD TWO OF CLUBS -1F0D3 ; [*129E.0020.0002] # PLAYING CARD THREE OF CLUBS -1F0D4 ; [*129F.0020.0002] # PLAYING CARD FOUR OF CLUBS -1F0D5 ; [*12A0.0020.0002] # PLAYING CARD FIVE OF CLUBS -1F0D6 ; [*12A1.0020.0002] # PLAYING CARD SIX OF CLUBS -1F0D7 ; [*12A2.0020.0002] # PLAYING CARD SEVEN OF CLUBS -1F0D8 ; [*12A3.0020.0002] # PLAYING CARD EIGHT OF CLUBS -1F0D9 ; [*12A4.0020.0002] # PLAYING CARD NINE OF CLUBS -1F0DA ; [*12A5.0020.0002] # PLAYING CARD TEN OF CLUBS -1F0DB ; [*12A6.0020.0002] # PLAYING CARD JACK OF CLUBS -1F0DC ; [*12A7.0020.0002] # PLAYING CARD KNIGHT OF CLUBS -1F0DD ; [*12A8.0020.0002] # PLAYING CARD QUEEN OF CLUBS -1F0DE ; [*12A9.0020.0002] # PLAYING CARD KING OF CLUBS -1F0DF ; [*12AA.0020.0002] # PLAYING CARD WHITE JOKER -1F0E0 ; [*12AB.0020.0002] # PLAYING CARD FOOL -1F0E1 ; [*12AC.0020.0002] # PLAYING CARD TRUMP-1 -1F0E2 ; [*12AD.0020.0002] # PLAYING CARD TRUMP-2 -1F0E3 ; [*12AE.0020.0002] # PLAYING CARD TRUMP-3 -1F0E4 ; [*12AF.0020.0002] # PLAYING CARD TRUMP-4 -1F0E5 ; [*12B0.0020.0002] # PLAYING CARD TRUMP-5 -1F0E6 ; [*12B1.0020.0002] # PLAYING CARD TRUMP-6 -1F0E7 ; [*12B2.0020.0002] # PLAYING CARD TRUMP-7 -1F0E8 ; [*12B3.0020.0002] # PLAYING CARD TRUMP-8 -1F0E9 ; [*12B4.0020.0002] # PLAYING CARD TRUMP-9 -1F0EA ; [*12B5.0020.0002] # PLAYING CARD TRUMP-10 -1F0EB ; [*12B6.0020.0002] # PLAYING CARD TRUMP-11 -1F0EC ; [*12B7.0020.0002] # PLAYING CARD TRUMP-12 -1F0ED ; [*12B8.0020.0002] # PLAYING CARD TRUMP-13 -1F0EE ; [*12B9.0020.0002] # PLAYING CARD TRUMP-14 -1F0EF ; [*12BA.0020.0002] # PLAYING CARD TRUMP-15 -1F0F0 ; [*12BB.0020.0002] # PLAYING CARD TRUMP-16 -1F0F1 ; [*12BC.0020.0002] # PLAYING CARD TRUMP-17 -1F0F2 ; [*12BD.0020.0002] # PLAYING CARD TRUMP-18 -1F0F3 ; [*12BE.0020.0002] # PLAYING CARD TRUMP-19 -1F0F4 ; [*12BF.0020.0002] # PLAYING CARD TRUMP-20 -1F0F5 ; [*12C0.0020.0002] # PLAYING CARD TRUMP-21 -1F1E6 ; [*0A1E.0020.0002] # REGIONAL INDICATOR SYMBOL LETTER A -1F1E7 ; [*0A1F.0020.0002] # REGIONAL INDICATOR SYMBOL LETTER B -1F1E8 ; [*0A20.0020.0002] # REGIONAL INDICATOR SYMBOL LETTER C -1F1E9 ; [*0A21.0020.0002] # REGIONAL INDICATOR SYMBOL LETTER D -1F1EA ; [*0A22.0020.0002] # REGIONAL INDICATOR SYMBOL LETTER E -1F1EB ; [*0A23.0020.0002] # REGIONAL INDICATOR SYMBOL LETTER F -1F1EC ; [*0A24.0020.0002] # REGIONAL INDICATOR SYMBOL LETTER G -1F1ED ; [*0A25.0020.0002] # REGIONAL INDICATOR SYMBOL LETTER H -1F1EE ; [*0A26.0020.0002] # REGIONAL INDICATOR SYMBOL LETTER I -1F1EF ; [*0A27.0020.0002] # REGIONAL INDICATOR SYMBOL LETTER J -1F1F0 ; [*0A28.0020.0002] # REGIONAL INDICATOR SYMBOL LETTER K -1F1F1 ; [*0A29.0020.0002] # REGIONAL INDICATOR SYMBOL LETTER L -1F1F2 ; [*0A2A.0020.0002] # REGIONAL INDICATOR SYMBOL LETTER M -1F1F3 ; [*0A2B.0020.0002] # REGIONAL INDICATOR SYMBOL LETTER N -1F1F4 ; [*0A2C.0020.0002] # REGIONAL INDICATOR SYMBOL LETTER O -1F1F5 ; [*0A2D.0020.0002] # REGIONAL INDICATOR SYMBOL LETTER P -1F1F6 ; [*0A2E.0020.0002] # REGIONAL INDICATOR SYMBOL LETTER Q -1F1F7 ; [*0A2F.0020.0002] # REGIONAL INDICATOR SYMBOL LETTER R -1F1F8 ; [*0A30.0020.0002] # REGIONAL INDICATOR SYMBOL LETTER S -1F1F9 ; [*0A31.0020.0002] # REGIONAL INDICATOR SYMBOL LETTER T -1F1FA ; [*0A32.0020.0002] # REGIONAL INDICATOR SYMBOL LETTER U -1F1FB ; [*0A33.0020.0002] # REGIONAL INDICATOR SYMBOL LETTER V -1F1FC ; [*0A34.0020.0002] # REGIONAL INDICATOR SYMBOL LETTER W -1F1FD ; [*0A35.0020.0002] # REGIONAL INDICATOR SYMBOL LETTER X -1F1FE ; [*0A36.0020.0002] # REGIONAL INDICATOR SYMBOL LETTER Y -1F1FF ; [*0A37.0020.0002] # REGIONAL INDICATOR SYMBOL LETTER Z -1F260 ; [*12C1.0020.0002] # ROUNDED SYMBOL FOR FU -1F261 ; [*12C2.0020.0002] # ROUNDED SYMBOL FOR LU -1F262 ; [*12C3.0020.0002] # ROUNDED SYMBOL FOR SHOU -1F263 ; [*12C4.0020.0002] # ROUNDED SYMBOL FOR XI -1F264 ; [*12C5.0020.0002] # ROUNDED SYMBOL FOR SHUANGXI -1F265 ; [*12C6.0020.0002] # ROUNDED SYMBOL FOR CAI -1F300 ; [*12C7.0020.0002] # CYCLONE -1F301 ; [*12C8.0020.0002] # FOGGY -1F302 ; [*12C9.0020.0002] # CLOSED UMBRELLA -1F303 ; [*12CA.0020.0002] # NIGHT WITH STARS -1F304 ; [*12CB.0020.0002] # SUNRISE OVER MOUNTAINS -1F305 ; [*12CC.0020.0002] # SUNRISE -1F306 ; [*12CD.0020.0002] # CITYSCAPE AT DUSK -1F307 ; [*12CE.0020.0002] # SUNSET OVER BUILDINGS -1F308 ; [*12CF.0020.0002] # RAINBOW -1F309 ; [*12D0.0020.0002] # BRIDGE AT NIGHT -1F30A ; [*12D1.0020.0002] # WATER WAVE -1F30B ; [*12D2.0020.0002] # VOLCANO -1F30C ; [*12D3.0020.0002] # MILKY WAY -1F30D ; [*12D4.0020.0002] # EARTH GLOBE EUROPE-AFRICA -1F30E ; [*12D5.0020.0002] # EARTH GLOBE AMERICAS -1F30F ; [*12D6.0020.0002] # EARTH GLOBE ASIA-AUSTRALIA -1F310 ; [*12D7.0020.0002] # GLOBE WITH MERIDIANS -1F311 ; [*12D8.0020.0002] # NEW MOON SYMBOL -1F312 ; [*12D9.0020.0002] # WAXING CRESCENT MOON SYMBOL -1F313 ; [*12DA.0020.0002] # FIRST QUARTER MOON SYMBOL -1F314 ; [*12DB.0020.0002] # WAXING GIBBOUS MOON SYMBOL -1F315 ; [*12DC.0020.0002] # FULL MOON SYMBOL -1F316 ; [*12DD.0020.0002] # WANING GIBBOUS MOON SYMBOL -1F317 ; [*12DE.0020.0002] # LAST QUARTER MOON SYMBOL -1F318 ; [*12DF.0020.0002] # WANING CRESCENT MOON SYMBOL -1F319 ; [*12E0.0020.0002] # CRESCENT MOON -1F31A ; [*12E1.0020.0002] # NEW MOON WITH FACE -1F31B ; [*12E2.0020.0002] # FIRST QUARTER MOON WITH FACE -1F31C ; [*12E3.0020.0002] # LAST QUARTER MOON WITH FACE -1F31D ; [*12E4.0020.0002] # FULL MOON WITH FACE -1F31E ; [*12E5.0020.0002] # SUN WITH FACE -1F31F ; [*12E6.0020.0002] # GLOWING STAR -1F320 ; [*12E7.0020.0002] # SHOOTING STAR -1F321 ; [*12E8.0020.0002] # THERMOMETER -1F322 ; [*12E9.0020.0002] # BLACK DROPLET -1F323 ; [*12EA.0020.0002] # WHITE SUN -1F324 ; [*12EB.0020.0002] # WHITE SUN WITH SMALL CLOUD -1F325 ; [*12EC.0020.0002] # WHITE SUN BEHIND CLOUD -1F326 ; [*12ED.0020.0002] # WHITE SUN BEHIND CLOUD WITH RAIN -1F327 ; [*12EE.0020.0002] # CLOUD WITH RAIN -1F328 ; [*12EF.0020.0002] # CLOUD WITH SNOW -1F329 ; [*12F0.0020.0002] # CLOUD WITH LIGHTNING -1F32A ; [*12F1.0020.0002] # CLOUD WITH TORNADO -1F32B ; [*12F2.0020.0002] # FOG -1F32C ; [*12F3.0020.0002] # WIND BLOWING FACE -1F32D ; [*12F4.0020.0002] # HOT DOG -1F32E ; [*12F5.0020.0002] # TACO -1F32F ; [*12F6.0020.0002] # BURRITO -1F330 ; [*12F7.0020.0002] # CHESTNUT -1F331 ; [*12F8.0020.0002] # SEEDLING -1F332 ; [*12F9.0020.0002] # EVERGREEN TREE -1F333 ; [*12FA.0020.0002] # DECIDUOUS TREE -1F334 ; [*12FB.0020.0002] # PALM TREE -1F335 ; [*12FC.0020.0002] # CACTUS -1F336 ; [*12FD.0020.0002] # HOT PEPPER -1F337 ; [*12FE.0020.0002] # TULIP -1F338 ; [*12FF.0020.0002] # CHERRY BLOSSOM -1F339 ; [*1300.0020.0002] # ROSE -1F33A ; [*1301.0020.0002] # HIBISCUS -1F33B ; [*1302.0020.0002] # SUNFLOWER -1F33C ; [*1303.0020.0002] # BLOSSOM -1F33D ; [*1304.0020.0002] # EAR OF MAIZE -1F33E ; [*1305.0020.0002] # EAR OF RICE -1F33F ; [*1306.0020.0002] # HERB -1F340 ; [*1307.0020.0002] # FOUR LEAF CLOVER -1F341 ; [*1308.0020.0002] # MAPLE LEAF -1F342 ; [*1309.0020.0002] # FALLEN LEAF -1F343 ; [*130A.0020.0002] # LEAF FLUTTERING IN WIND -1F344 ; [*130B.0020.0002] # MUSHROOM -1F345 ; [*130C.0020.0002] # TOMATO -1F346 ; [*130D.0020.0002] # AUBERGINE -1F347 ; [*130E.0020.0002] # GRAPES -1F348 ; [*130F.0020.0002] # MELON -1F349 ; [*1310.0020.0002] # WATERMELON -1F34A ; [*1311.0020.0002] # TANGERINE -1F34B ; [*1312.0020.0002] # LEMON -1F34C ; [*1313.0020.0002] # BANANA -1F34D ; [*1314.0020.0002] # PINEAPPLE -1F34E ; [*1315.0020.0002] # RED APPLE -1F34F ; [*1316.0020.0002] # GREEN APPLE -1F350 ; [*1317.0020.0002] # PEAR -1F351 ; [*1318.0020.0002] # PEACH -1F352 ; [*1319.0020.0002] # CHERRIES -1F353 ; [*131A.0020.0002] # STRAWBERRY -1F354 ; [*131B.0020.0002] # HAMBURGER -1F355 ; [*131C.0020.0002] # SLICE OF PIZZA -1F356 ; [*131D.0020.0002] # MEAT ON BONE -1F357 ; [*131E.0020.0002] # POULTRY LEG -1F358 ; [*131F.0020.0002] # RICE CRACKER -1F359 ; [*1320.0020.0002] # RICE BALL -1F35A ; [*1321.0020.0002] # COOKED RICE -1F35B ; [*1322.0020.0002] # CURRY AND RICE -1F35C ; [*1323.0020.0002] # STEAMING BOWL -1F35D ; [*1324.0020.0002] # SPAGHETTI -1F35E ; [*1325.0020.0002] # BREAD -1F35F ; [*1326.0020.0002] # FRENCH FRIES -1F360 ; [*1327.0020.0002] # ROASTED SWEET POTATO -1F361 ; [*1328.0020.0002] # DANGO -1F362 ; [*1329.0020.0002] # ODEN -1F363 ; [*132A.0020.0002] # SUSHI -1F364 ; [*132B.0020.0002] # FRIED SHRIMP -1F365 ; [*132C.0020.0002] # FISH CAKE WITH SWIRL DESIGN -1F366 ; [*132D.0020.0002] # SOFT ICE CREAM -1F367 ; [*132E.0020.0002] # SHAVED ICE -1F368 ; [*132F.0020.0002] # ICE CREAM -1F369 ; [*1330.0020.0002] # DOUGHNUT -1F36A ; [*1331.0020.0002] # COOKIE -1F36B ; [*1332.0020.0002] # CHOCOLATE BAR -1F36C ; [*1333.0020.0002] # CANDY -1F36D ; [*1334.0020.0002] # LOLLIPOP -1F36E ; [*1335.0020.0002] # CUSTARD -1F36F ; [*1336.0020.0002] # HONEY POT -1F370 ; [*1337.0020.0002] # SHORTCAKE -1F371 ; [*1338.0020.0002] # BENTO BOX -1F372 ; [*1339.0020.0002] # POT OF FOOD -1F373 ; [*133A.0020.0002] # COOKING -1F374 ; [*133B.0020.0002] # FORK AND KNIFE -1F375 ; [*133C.0020.0002] # TEACUP WITHOUT HANDLE -1F376 ; [*133D.0020.0002] # SAKE BOTTLE AND CUP -1F377 ; [*133E.0020.0002] # WINE GLASS -1F378 ; [*133F.0020.0002] # COCKTAIL GLASS -1F379 ; [*1340.0020.0002] # TROPICAL DRINK -1F37A ; [*1341.0020.0002] # BEER MUG -1F37B ; [*1342.0020.0002] # CLINKING BEER MUGS -1F37C ; [*1343.0020.0002] # BABY BOTTLE -1F37D ; [*1344.0020.0002] # FORK AND KNIFE WITH PLATE -1F37E ; [*1345.0020.0002] # BOTTLE WITH POPPING CORK -1F37F ; [*1346.0020.0002] # POPCORN -1F380 ; [*1347.0020.0002] # RIBBON -1F381 ; [*1348.0020.0002] # WRAPPED PRESENT -1F382 ; [*1349.0020.0002] # BIRTHDAY CAKE -1F383 ; [*134A.0020.0002] # JACK-O-LANTERN -1F384 ; [*134B.0020.0002] # CHRISTMAS TREE -1F385 ; [*134C.0020.0002] # FATHER CHRISTMAS -1F386 ; [*134D.0020.0002] # FIREWORKS -1F387 ; [*134E.0020.0002] # FIREWORK SPARKLER -1F388 ; [*134F.0020.0002] # BALLOON -1F389 ; [*1350.0020.0002] # PARTY POPPER -1F38A ; [*1351.0020.0002] # CONFETTI BALL -1F38B ; [*1352.0020.0002] # TANABATA TREE -1F38C ; [*1353.0020.0002] # CROSSED FLAGS -1F38D ; [*1354.0020.0002] # PINE DECORATION -1F38E ; [*1355.0020.0002] # JAPANESE DOLLS -1F38F ; [*1356.0020.0002] # CARP STREAMER -1F390 ; [*1357.0020.0002] # WIND CHIME -1F391 ; [*1358.0020.0002] # MOON VIEWING CEREMONY -1F392 ; [*1359.0020.0002] # SCHOOL SATCHEL -1F393 ; [*135A.0020.0002] # GRADUATION CAP -1F394 ; [*135B.0020.0002] # HEART WITH TIP ON THE LEFT -1F395 ; [*135C.0020.0002] # BOUQUET OF FLOWERS -1F396 ; [*135D.0020.0002] # MILITARY MEDAL -1F397 ; [*135E.0020.0002] # REMINDER RIBBON -1F398 ; [*135F.0020.0002] # MUSICAL KEYBOARD WITH JACKS -1F399 ; [*1360.0020.0002] # STUDIO MICROPHONE -1F39A ; [*1361.0020.0002] # LEVEL SLIDER -1F39B ; [*1362.0020.0002] # CONTROL KNOBS -1F39C ; [*1363.0020.0002] # BEAMED ASCENDING MUSICAL NOTES -1F39D ; [*1364.0020.0002] # BEAMED DESCENDING MUSICAL NOTES -1F39E ; [*1365.0020.0002] # FILM FRAMES -1F39F ; [*1366.0020.0002] # ADMISSION TICKETS -1F3A0 ; [*1367.0020.0002] # CAROUSEL HORSE -1F3A1 ; [*1368.0020.0002] # FERRIS WHEEL -1F3A2 ; [*1369.0020.0002] # ROLLER COASTER -1F3A3 ; [*136A.0020.0002] # FISHING POLE AND FISH -1F3A4 ; [*136B.0020.0002] # MICROPHONE -1F3A5 ; [*136C.0020.0002] # MOVIE CAMERA -1F3A6 ; [*136D.0020.0002] # CINEMA -1F3A7 ; [*136E.0020.0002] # HEADPHONE -1F3A8 ; [*136F.0020.0002] # ARTIST PALETTE -1F3A9 ; [*1370.0020.0002] # TOP HAT -1F3AA ; [*1371.0020.0002] # CIRCUS TENT -1F3AB ; [*1372.0020.0002] # TICKET -1F3AC ; [*1373.0020.0002] # CLAPPER BOARD -1F3AD ; [*1374.0020.0002] # PERFORMING ARTS -1F3AE ; [*1375.0020.0002] # VIDEO GAME -1F3AF ; [*1376.0020.0002] # DIRECT HIT -1F3B0 ; [*1377.0020.0002] # SLOT MACHINE -1F3B1 ; [*1378.0020.0002] # BILLIARDS -1F3B2 ; [*1379.0020.0002] # GAME DIE -1F3B3 ; [*137A.0020.0002] # BOWLING -1F3B4 ; [*137B.0020.0002] # FLOWER PLAYING CARDS -1F3B5 ; [*137C.0020.0002] # MUSICAL NOTE -1F3B6 ; [*137D.0020.0002] # MULTIPLE MUSICAL NOTES -1F3B7 ; [*137E.0020.0002] # SAXOPHONE -1F3B8 ; [*137F.0020.0002] # GUITAR -1F3B9 ; [*1380.0020.0002] # MUSICAL KEYBOARD -1F3BA ; [*1381.0020.0002] # TRUMPET -1F3BB ; [*1382.0020.0002] # VIOLIN -1F3BC ; [*1383.0020.0002] # MUSICAL SCORE -1F3BD ; [*1384.0020.0002] # RUNNING SHIRT WITH SASH -1F3BE ; [*1385.0020.0002] # TENNIS RACQUET AND BALL -1F3BF ; [*1386.0020.0002] # SKI AND SKI BOOT -1F3C0 ; [*1387.0020.0002] # BASKETBALL AND HOOP -1F3C1 ; [*1388.0020.0002] # CHEQUERED FLAG -1F3C2 ; [*1389.0020.0002] # SNOWBOARDER -1F3C3 ; [*138A.0020.0002] # RUNNER -1F3C4 ; [*138B.0020.0002] # SURFER -1F3C5 ; [*138C.0020.0002] # SPORTS MEDAL -1F3C6 ; [*138D.0020.0002] # TROPHY -1F3C7 ; [*138E.0020.0002] # HORSE RACING -1F3C8 ; [*138F.0020.0002] # AMERICAN FOOTBALL -1F3C9 ; [*1390.0020.0002] # RUGBY FOOTBALL -1F3CA ; [*1391.0020.0002] # SWIMMER -1F3CB ; [*1392.0020.0002] # WEIGHT LIFTER -1F3CC ; [*1393.0020.0002] # GOLFER -1F3CD ; [*1394.0020.0002] # RACING MOTORCYCLE -1F3CE ; [*1395.0020.0002] # RACING CAR -1F3CF ; [*1396.0020.0002] # CRICKET BAT AND BALL -1F3D0 ; [*1397.0020.0002] # VOLLEYBALL -1F3D1 ; [*1398.0020.0002] # FIELD HOCKEY STICK AND BALL -1F3D2 ; [*1399.0020.0002] # ICE HOCKEY STICK AND PUCK -1F3D3 ; [*139A.0020.0002] # TABLE TENNIS PADDLE AND BALL -1F3D4 ; [*139B.0020.0002] # SNOW CAPPED MOUNTAIN -1F3D5 ; [*139C.0020.0002] # CAMPING -1F3D6 ; [*139D.0020.0002] # BEACH WITH UMBRELLA -1F3D7 ; [*139E.0020.0002] # BUILDING CONSTRUCTION -1F3D8 ; [*139F.0020.0002] # HOUSE BUILDINGS -1F3D9 ; [*13A0.0020.0002] # CITYSCAPE -1F3DA ; [*13A1.0020.0002] # DERELICT HOUSE BUILDING -1F3DB ; [*13A2.0020.0002] # CLASSICAL BUILDING -1F3DC ; [*13A3.0020.0002] # DESERT -1F3DD ; [*13A4.0020.0002] # DESERT ISLAND -1F3DE ; [*13A5.0020.0002] # NATIONAL PARK -1F3DF ; [*13A6.0020.0002] # STADIUM -1F3E0 ; [*13A7.0020.0002] # HOUSE BUILDING -1F3E1 ; [*13A8.0020.0002] # HOUSE WITH GARDEN -1F3E2 ; [*13A9.0020.0002] # OFFICE BUILDING -1F3E3 ; [*13AA.0020.0002] # JAPANESE POST OFFICE -1F3E4 ; [*13AB.0020.0002] # EUROPEAN POST OFFICE -1F3E5 ; [*13AC.0020.0002] # HOSPITAL -1F3E6 ; [*13AD.0020.0002] # BANK -1F3E7 ; [*13AE.0020.0002] # AUTOMATED TELLER MACHINE -1F3E8 ; [*13AF.0020.0002] # HOTEL -1F3E9 ; [*13B0.0020.0002] # LOVE HOTEL -1F3EA ; [*13B1.0020.0002] # CONVENIENCE STORE -1F3EB ; [*13B2.0020.0002] # SCHOOL -1F3EC ; [*13B3.0020.0002] # DEPARTMENT STORE -1F3ED ; [*13B4.0020.0002] # FACTORY -1F3EE ; [*13B5.0020.0002] # IZAKAYA LANTERN -1F3EF ; [*13B6.0020.0002] # JAPANESE CASTLE -1F3F0 ; [*13B7.0020.0002] # EUROPEAN CASTLE -1F3F1 ; [*13B8.0020.0002] # WHITE PENNANT -1F3F2 ; [*13B9.0020.0002] # BLACK PENNANT -1F3F3 ; [*13BA.0020.0002] # WAVING WHITE FLAG -1F3F4 ; [*13BB.0020.0002] # WAVING BLACK FLAG -1F3F5 ; [*13BC.0020.0002] # ROSETTE -1F3F6 ; [*13BD.0020.0002] # BLACK ROSETTE -1F3F7 ; [*13BE.0020.0002] # LABEL -1F3F8 ; [*13BF.0020.0002] # BADMINTON RACQUET AND SHUTTLECOCK -1F3F9 ; [*13C0.0020.0002] # BOW AND ARROW -1F3FA ; [*13C1.0020.0002] # AMPHORA -1F3FB ; [*13C2.0020.0002] # EMOJI MODIFIER FITZPATRICK TYPE-1-2 -1F3FC ; [*13C3.0020.0002] # EMOJI MODIFIER FITZPATRICK TYPE-3 -1F3FD ; [*13C4.0020.0002] # EMOJI MODIFIER FITZPATRICK TYPE-4 -1F3FE ; [*13C5.0020.0002] # EMOJI MODIFIER FITZPATRICK TYPE-5 -1F3FF ; [*13C6.0020.0002] # EMOJI MODIFIER FITZPATRICK TYPE-6 -1F400 ; [*13C7.0020.0002] # RAT -1F401 ; [*13C8.0020.0002] # MOUSE -1F402 ; [*13C9.0020.0002] # OX -1F403 ; [*13CA.0020.0002] # WATER BUFFALO -1F404 ; [*13CB.0020.0002] # COW -1F405 ; [*13CC.0020.0002] # TIGER -1F406 ; [*13CD.0020.0002] # LEOPARD -1F407 ; [*13CE.0020.0002] # RABBIT -1F408 ; [*13CF.0020.0002] # CAT -1F409 ; [*13D0.0020.0002] # DRAGON -1F40A ; [*13D1.0020.0002] # CROCODILE -1F40B ; [*13D2.0020.0002] # WHALE -1F40C ; [*13D3.0020.0002] # SNAIL -1F40D ; [*13D4.0020.0002] # SNAKE -1F40E ; [*13D5.0020.0002] # HORSE -1F40F ; [*13D6.0020.0002] # RAM -1F410 ; [*13D7.0020.0002] # GOAT -1F411 ; [*13D8.0020.0002] # SHEEP -1F412 ; [*13D9.0020.0002] # MONKEY -1F413 ; [*13DA.0020.0002] # ROOSTER -1F414 ; [*13DB.0020.0002] # CHICKEN -1F415 ; [*13DC.0020.0002] # DOG -1F416 ; [*13DD.0020.0002] # PIG -1F417 ; [*13DE.0020.0002] # BOAR -1F418 ; [*13DF.0020.0002] # ELEPHANT -1F419 ; [*13E0.0020.0002] # OCTOPUS -1F41A ; [*13E1.0020.0002] # SPIRAL SHELL -1F41B ; [*13E2.0020.0002] # BUG -1F41C ; [*13E3.0020.0002] # ANT -1F41D ; [*13E4.0020.0002] # HONEYBEE -1F41E ; [*13E5.0020.0002] # LADY BEETLE -1F41F ; [*13E6.0020.0002] # FISH -1F420 ; [*13E7.0020.0002] # TROPICAL FISH -1F421 ; [*13E8.0020.0002] # BLOWFISH -1F422 ; [*13E9.0020.0002] # TURTLE -1F423 ; [*13EA.0020.0002] # HATCHING CHICK -1F424 ; [*13EB.0020.0002] # BABY CHICK -1F425 ; [*13EC.0020.0002] # FRONT-FACING BABY CHICK -1F426 ; [*13ED.0020.0002] # BIRD -1F427 ; [*13EE.0020.0002] # PENGUIN -1F428 ; [*13EF.0020.0002] # KOALA -1F429 ; [*13F0.0020.0002] # POODLE -1F42A ; [*13F1.0020.0002] # DROMEDARY CAMEL -1F42B ; [*13F2.0020.0002] # BACTRIAN CAMEL -1F42C ; [*13F3.0020.0002] # DOLPHIN -1F42D ; [*13F4.0020.0002] # MOUSE FACE -1F42E ; [*13F5.0020.0002] # COW FACE -1F42F ; [*13F6.0020.0002] # TIGER FACE -1F430 ; [*13F7.0020.0002] # RABBIT FACE -1F431 ; [*13F8.0020.0002] # CAT FACE -1F432 ; [*13F9.0020.0002] # DRAGON FACE -1F433 ; [*13FA.0020.0002] # SPOUTING WHALE -1F434 ; [*13FB.0020.0002] # HORSE FACE -1F435 ; [*13FC.0020.0002] # MONKEY FACE -1F436 ; [*13FD.0020.0002] # DOG FACE -1F437 ; [*13FE.0020.0002] # PIG FACE -1F438 ; [*13FF.0020.0002] # FROG FACE -1F439 ; [*1400.0020.0002] # HAMSTER FACE -1F43A ; [*1401.0020.0002] # WOLF FACE -1F43B ; [*1402.0020.0002] # BEAR FACE -1F43C ; [*1403.0020.0002] # PANDA FACE -1F43D ; [*1404.0020.0002] # PIG NOSE -1F43E ; [*1405.0020.0002] # PAW PRINTS -1F43F ; [*1406.0020.0002] # CHIPMUNK -1F440 ; [*1407.0020.0002] # EYES -1F441 ; [*1408.0020.0002] # EYE -1F442 ; [*1409.0020.0002] # EAR -1F443 ; [*140A.0020.0002] # NOSE -1F444 ; [*140B.0020.0002] # MOUTH -1F445 ; [*140C.0020.0002] # TONGUE -1F446 ; [*140D.0020.0002] # WHITE UP POINTING BACKHAND INDEX -1F447 ; [*140E.0020.0002] # WHITE DOWN POINTING BACKHAND INDEX -1F448 ; [*140F.0020.0002] # WHITE LEFT POINTING BACKHAND INDEX -1F449 ; [*1410.0020.0002] # WHITE RIGHT POINTING BACKHAND INDEX -1F44A ; [*1411.0020.0002] # FISTED HAND SIGN -1F44B ; [*1412.0020.0002] # WAVING HAND SIGN -1F44C ; [*1413.0020.0002] # OK HAND SIGN -1F44D ; [*1414.0020.0002] # THUMBS UP SIGN -1F44E ; [*1415.0020.0002] # THUMBS DOWN SIGN -1F44F ; [*1416.0020.0002] # CLAPPING HANDS SIGN -1F450 ; [*1417.0020.0002] # OPEN HANDS SIGN -1F451 ; [*1418.0020.0002] # CROWN -1F452 ; [*1419.0020.0002] # WOMANS HAT -1F453 ; [*141A.0020.0002] # EYEGLASSES -1F454 ; [*141B.0020.0002] # NECKTIE -1F455 ; [*141C.0020.0002] # T-SHIRT -1F456 ; [*141D.0020.0002] # JEANS -1F457 ; [*141E.0020.0002] # DRESS -1F458 ; [*141F.0020.0002] # KIMONO -1F459 ; [*1420.0020.0002] # BIKINI -1F45A ; [*1421.0020.0002] # WOMANS CLOTHES -1F45B ; [*1422.0020.0002] # PURSE -1F45C ; [*1423.0020.0002] # HANDBAG -1F45D ; [*1424.0020.0002] # POUCH -1F45E ; [*1425.0020.0002] # MANS SHOE -1F45F ; [*1426.0020.0002] # ATHLETIC SHOE -1F460 ; [*1427.0020.0002] # HIGH-HEELED SHOE -1F461 ; [*1428.0020.0002] # WOMANS SANDAL -1F462 ; [*1429.0020.0002] # WOMANS BOOTS -1F463 ; [*142A.0020.0002] # FOOTPRINTS -1F464 ; [*142B.0020.0002] # BUST IN SILHOUETTE -1F465 ; [*142C.0020.0002] # BUSTS IN SILHOUETTE -1F466 ; [*142D.0020.0002] # BOY -1F467 ; [*142E.0020.0002] # GIRL -1F468 ; [*142F.0020.0002] # MAN -1F469 ; [*1430.0020.0002] # WOMAN -1F46A ; [*1431.0020.0002] # FAMILY -1F46B ; [*1432.0020.0002] # MAN AND WOMAN HOLDING HANDS -1F46C ; [*1433.0020.0002] # TWO MEN HOLDING HANDS -1F46D ; [*1434.0020.0002] # TWO WOMEN HOLDING HANDS -1F46E ; [*1435.0020.0002] # POLICE OFFICER -1F46F ; [*1436.0020.0002] # WOMAN WITH BUNNY EARS -1F470 ; [*1437.0020.0002] # BRIDE WITH VEIL -1F471 ; [*1438.0020.0002] # PERSON WITH BLOND HAIR -1F472 ; [*1439.0020.0002] # MAN WITH GUA PI MAO -1F473 ; [*143A.0020.0002] # MAN WITH TURBAN -1F474 ; [*143B.0020.0002] # OLDER MAN -1F475 ; [*143C.0020.0002] # OLDER WOMAN -1F476 ; [*143D.0020.0002] # BABY -1F477 ; [*143E.0020.0002] # CONSTRUCTION WORKER -1F478 ; [*143F.0020.0002] # PRINCESS -1F479 ; [*1440.0020.0002] # JAPANESE OGRE -1F47A ; [*1441.0020.0002] # JAPANESE GOBLIN -1F47B ; [*1442.0020.0002] # GHOST -1F47C ; [*1443.0020.0002] # BABY ANGEL -1F47D ; [*1444.0020.0002] # EXTRATERRESTRIAL ALIEN -1F47E ; [*1445.0020.0002] # ALIEN MONSTER -1F47F ; [*1446.0020.0002] # IMP -1F480 ; [*1447.0020.0002] # SKULL -1F481 ; [*1448.0020.0002] # INFORMATION DESK PERSON -1F482 ; [*1449.0020.0002] # GUARDSMAN -1F483 ; [*144A.0020.0002] # DANCER -1F484 ; [*144B.0020.0002] # LIPSTICK -1F485 ; [*144C.0020.0002] # NAIL POLISH -1F486 ; [*144D.0020.0002] # FACE MASSAGE -1F487 ; [*144E.0020.0002] # HAIRCUT -1F488 ; [*144F.0020.0002] # BARBER POLE -1F489 ; [*1450.0020.0002] # SYRINGE -1F48A ; [*1451.0020.0002] # PILL -1F48B ; [*1452.0020.0002] # KISS MARK -1F48C ; [*1453.0020.0002] # LOVE LETTER -1F48D ; [*1454.0020.0002] # RING -1F48E ; [*1455.0020.0002] # GEM STONE -1F48F ; [*1456.0020.0002] # KISS -1F490 ; [*1457.0020.0002] # BOUQUET -1F491 ; [*1458.0020.0002] # COUPLE WITH HEART -1F492 ; [*1459.0020.0002] # WEDDING -1F493 ; [*145A.0020.0002] # BEATING HEART -1F494 ; [*145B.0020.0002] # BROKEN HEART -1F495 ; [*145C.0020.0002] # TWO HEARTS -1F496 ; [*145D.0020.0002] # SPARKLING HEART -1F497 ; [*145E.0020.0002] # GROWING HEART -1F498 ; [*145F.0020.0002] # HEART WITH ARROW -1F499 ; [*1460.0020.0002] # BLUE HEART -1F49A ; [*1461.0020.0002] # GREEN HEART -1F49B ; [*1462.0020.0002] # YELLOW HEART -1F49C ; [*1463.0020.0002] # PURPLE HEART -1F49D ; [*1464.0020.0002] # HEART WITH RIBBON -1F49E ; [*1465.0020.0002] # REVOLVING HEARTS -1F49F ; [*1466.0020.0002] # HEART DECORATION -1F4A0 ; [*1467.0020.0002] # DIAMOND SHAPE WITH A DOT INSIDE -1F4A1 ; [*1468.0020.0002] # ELECTRIC LIGHT BULB -1F4A2 ; [*1469.0020.0002] # ANGER SYMBOL -1F4A3 ; [*146A.0020.0002] # BOMB -1F4A4 ; [*146B.0020.0002] # SLEEPING SYMBOL -1F4A5 ; [*146C.0020.0002] # COLLISION SYMBOL -1F4A6 ; [*146D.0020.0002] # SPLASHING SWEAT SYMBOL -1F4A7 ; [*146E.0020.0002] # DROPLET -1F4A8 ; [*146F.0020.0002] # DASH SYMBOL -1F4A9 ; [*1470.0020.0002] # PILE OF POO -1F4AA ; [*1471.0020.0002] # FLEXED BICEPS -1F4AB ; [*1472.0020.0002] # DIZZY SYMBOL -1F4AC ; [*1473.0020.0002] # SPEECH BALLOON -1F4AD ; [*1474.0020.0002] # THOUGHT BALLOON -1F4AE ; [*1475.0020.0002] # WHITE FLOWER -1F4AF ; [*1476.0020.0002] # HUNDRED POINTS SYMBOL -1F4B0 ; [*1477.0020.0002] # MONEY BAG -1F4B1 ; [*1478.0020.0002] # CURRENCY EXCHANGE -1F4B2 ; [*1479.0020.0002] # HEAVY DOLLAR SIGN -1F4B3 ; [*147A.0020.0002] # CREDIT CARD -1F4B4 ; [*147B.0020.0002] # BANKNOTE WITH YEN SIGN -1F4B5 ; [*147C.0020.0002] # BANKNOTE WITH DOLLAR SIGN -1F4B6 ; [*147D.0020.0002] # BANKNOTE WITH EURO SIGN -1F4B7 ; [*147E.0020.0002] # BANKNOTE WITH POUND SIGN -1F4B8 ; [*147F.0020.0002] # MONEY WITH WINGS -1F4B9 ; [*1480.0020.0002] # CHART WITH UPWARDS TREND AND YEN SIGN -1F4BA ; [*1481.0020.0002] # SEAT -1F4BB ; [*1482.0020.0002] # PERSONAL COMPUTER -1F4BC ; [*1483.0020.0002] # BRIEFCASE -1F4BD ; [*1484.0020.0002] # MINIDISC -1F4BE ; [*1485.0020.0002] # FLOPPY DISK -1F4BF ; [*1486.0020.0002] # OPTICAL DISC -1F4C0 ; [*1487.0020.0002] # DVD -1F4C1 ; [*1488.0020.0002] # FILE FOLDER -1F4C2 ; [*1489.0020.0002] # OPEN FILE FOLDER -1F4C3 ; [*148A.0020.0002] # PAGE WITH CURL -1F4C4 ; [*148B.0020.0002] # PAGE FACING UP -1F4C5 ; [*148C.0020.0002] # CALENDAR -1F4C6 ; [*148D.0020.0002] # TEAR-OFF CALENDAR -1F4C7 ; [*148E.0020.0002] # CARD INDEX -1F4C8 ; [*148F.0020.0002] # CHART WITH UPWARDS TREND -1F4C9 ; [*1490.0020.0002] # CHART WITH DOWNWARDS TREND -1F4CA ; [*1491.0020.0002] # BAR CHART -1F4CB ; [*1492.0020.0002] # CLIPBOARD -1F4CC ; [*1493.0020.0002] # PUSHPIN -1F4CD ; [*1494.0020.0002] # ROUND PUSHPIN -1F4CE ; [*1495.0020.0002] # PAPERCLIP -1F4CF ; [*1496.0020.0002] # STRAIGHT RULER -1F4D0 ; [*1497.0020.0002] # TRIANGULAR RULER -1F4D1 ; [*1498.0020.0002] # BOOKMARK TABS -1F4D2 ; [*1499.0020.0002] # LEDGER -1F4D3 ; [*149A.0020.0002] # NOTEBOOK -1F4D4 ; [*149B.0020.0002] # NOTEBOOK WITH DECORATIVE COVER -1F4D5 ; [*149C.0020.0002] # CLOSED BOOK -1F4D6 ; [*149D.0020.0002] # OPEN BOOK -1F4D7 ; [*149E.0020.0002] # GREEN BOOK -1F4D8 ; [*149F.0020.0002] # BLUE BOOK -1F4D9 ; [*14A0.0020.0002] # ORANGE BOOK -1F4DA ; [*14A1.0020.0002] # BOOKS -1F4DB ; [*14A2.0020.0002] # NAME BADGE -1F4DC ; [*14A3.0020.0002] # SCROLL -1F4DD ; [*14A4.0020.0002] # MEMO -1F4DE ; [*14A5.0020.0002] # TELEPHONE RECEIVER -1F4DF ; [*14A6.0020.0002] # PAGER -1F4E0 ; [*14A7.0020.0002] # FAX MACHINE -1F4E1 ; [*14A8.0020.0002] # SATELLITE ANTENNA -1F4E2 ; [*14A9.0020.0002] # PUBLIC ADDRESS LOUDSPEAKER -1F4E3 ; [*14AA.0020.0002] # CHEERING MEGAPHONE -1F4E4 ; [*14AB.0020.0002] # OUTBOX TRAY -1F4E5 ; [*14AC.0020.0002] # INBOX TRAY -1F4E6 ; [*14AD.0020.0002] # PACKAGE -1F4E7 ; [*14AE.0020.0002] # E-MAIL SYMBOL -1F4E8 ; [*14AF.0020.0002] # INCOMING ENVELOPE -1F4E9 ; [*14B0.0020.0002] # ENVELOPE WITH DOWNWARDS ARROW ABOVE -1F4EA ; [*14B1.0020.0002] # CLOSED MAILBOX WITH LOWERED FLAG -1F4EB ; [*14B2.0020.0002] # CLOSED MAILBOX WITH RAISED FLAG -1F4EC ; [*14B3.0020.0002] # OPEN MAILBOX WITH RAISED FLAG -1F4ED ; [*14B4.0020.0002] # OPEN MAILBOX WITH LOWERED FLAG -1F4EE ; [*14B5.0020.0002] # POSTBOX -1F4EF ; [*14B6.0020.0002] # POSTAL HORN -1F4F0 ; [*14B7.0020.0002] # NEWSPAPER -1F4F1 ; [*14B8.0020.0002] # MOBILE PHONE -1F4F2 ; [*14B9.0020.0002] # MOBILE PHONE WITH RIGHTWARDS ARROW AT LEFT -1F4F3 ; [*14BA.0020.0002] # VIBRATION MODE -1F4F4 ; [*14BB.0020.0002] # MOBILE PHONE OFF -1F4F5 ; [*14BC.0020.0002] # NO MOBILE PHONES -1F4F6 ; [*14BD.0020.0002] # ANTENNA WITH BARS -1F4F7 ; [*14BE.0020.0002] # CAMERA -1F4F8 ; [*14BF.0020.0002] # CAMERA WITH FLASH -1F4F9 ; [*14C0.0020.0002] # VIDEO CAMERA -1F4FA ; [*14C1.0020.0002] # TELEVISION -1F4FB ; [*14C2.0020.0002] # RADIO -1F4FC ; [*14C3.0020.0002] # VIDEOCASSETTE -1F4FD ; [*14C4.0020.0002] # FILM PROJECTOR -1F4FE ; [*14C5.0020.0002] # PORTABLE STEREO -1F4FF ; [*14C6.0020.0002] # PRAYER BEADS -1F500 ; [*14C7.0020.0002] # TWISTED RIGHTWARDS ARROWS -1F501 ; [*14C8.0020.0002] # CLOCKWISE RIGHTWARDS AND LEFTWARDS OPEN CIRCLE ARROWS -1F502 ; [*14C9.0020.0002] # CLOCKWISE RIGHTWARDS AND LEFTWARDS OPEN CIRCLE ARROWS WITH CIRCLED ONE OVERLAY -1F503 ; [*14CA.0020.0002] # CLOCKWISE DOWNWARDS AND UPWARDS OPEN CIRCLE ARROWS -1F504 ; [*14CB.0020.0002] # ANTICLOCKWISE DOWNWARDS AND UPWARDS OPEN CIRCLE ARROWS -1F505 ; [*14CC.0020.0002] # LOW BRIGHTNESS SYMBOL -1F506 ; [*14CD.0020.0002] # HIGH BRIGHTNESS SYMBOL -1F507 ; [*14CE.0020.0002] # SPEAKER WITH CANCELLATION STROKE -1F508 ; [*14CF.0020.0002] # SPEAKER -1F509 ; [*14D0.0020.0002] # SPEAKER WITH ONE SOUND WAVE -1F50A ; [*14D1.0020.0002] # SPEAKER WITH THREE SOUND WAVES -1F50B ; [*14D2.0020.0002] # BATTERY -1F50C ; [*14D3.0020.0002] # ELECTRIC PLUG -1F50D ; [*14D4.0020.0002] # LEFT-POINTING MAGNIFYING GLASS -1F50E ; [*14D5.0020.0002] # RIGHT-POINTING MAGNIFYING GLASS -1F50F ; [*14D6.0020.0002] # LOCK WITH INK PEN -1F510 ; [*14D7.0020.0002] # CLOSED LOCK WITH KEY -1F511 ; [*14D8.0020.0002] # KEY -1F512 ; [*14D9.0020.0002] # LOCK -1F513 ; [*14DA.0020.0002] # OPEN LOCK -1F514 ; [*14DB.0020.0002] # BELL -1F515 ; [*14DC.0020.0002] # BELL WITH CANCELLATION STROKE -1F516 ; [*14DD.0020.0002] # BOOKMARK -1F517 ; [*14DE.0020.0002] # LINK SYMBOL -1F518 ; [*14DF.0020.0002] # RADIO BUTTON -1F519 ; [*14E0.0020.0002] # BACK WITH LEFTWARDS ARROW ABOVE -1F51A ; [*14E1.0020.0002] # END WITH LEFTWARDS ARROW ABOVE -1F51B ; [*14E2.0020.0002] # ON WITH EXCLAMATION MARK WITH LEFT RIGHT ARROW ABOVE -1F51C ; [*14E3.0020.0002] # SOON WITH RIGHTWARDS ARROW ABOVE -1F51D ; [*14E4.0020.0002] # TOP WITH UPWARDS ARROW ABOVE -1F51E ; [*14E5.0020.0002] # NO ONE UNDER EIGHTEEN SYMBOL -1F51F ; [*14E6.0020.0002] # KEYCAP TEN -1F520 ; [*14E7.0020.0002] # INPUT SYMBOL FOR LATIN CAPITAL LETTERS -1F521 ; [*14E8.0020.0002] # INPUT SYMBOL FOR LATIN SMALL LETTERS -1F522 ; [*14E9.0020.0002] # INPUT SYMBOL FOR NUMBERS -1F523 ; [*14EA.0020.0002] # INPUT SYMBOL FOR SYMBOLS -1F524 ; [*14EB.0020.0002] # INPUT SYMBOL FOR LATIN LETTERS -1F525 ; [*14EC.0020.0002] # FIRE -1F526 ; [*14ED.0020.0002] # ELECTRIC TORCH -1F527 ; [*14EE.0020.0002] # WRENCH -1F528 ; [*14EF.0020.0002] # HAMMER -1F529 ; [*14F0.0020.0002] # NUT AND BOLT -1F52A ; [*14F1.0020.0002] # HOCHO -1F52B ; [*14F2.0020.0002] # PISTOL -1F52C ; [*14F3.0020.0002] # MICROSCOPE -1F52D ; [*14F4.0020.0002] # TELESCOPE -1F52E ; [*14F5.0020.0002] # CRYSTAL BALL -1F52F ; [*14F6.0020.0002] # SIX POINTED STAR WITH MIDDLE DOT -1F530 ; [*14F7.0020.0002] # JAPANESE SYMBOL FOR BEGINNER -1F531 ; [*14F8.0020.0002] # TRIDENT EMBLEM -1F532 ; [*14F9.0020.0002] # BLACK SQUARE BUTTON -1F533 ; [*14FA.0020.0002] # WHITE SQUARE BUTTON -1F534 ; [*14FB.0020.0002] # LARGE RED CIRCLE -1F535 ; [*14FC.0020.0002] # LARGE BLUE CIRCLE -1F536 ; [*14FD.0020.0002] # LARGE ORANGE DIAMOND -1F537 ; [*14FE.0020.0002] # LARGE BLUE DIAMOND -1F538 ; [*14FF.0020.0002] # SMALL ORANGE DIAMOND -1F539 ; [*1500.0020.0002] # SMALL BLUE DIAMOND -1F53A ; [*1501.0020.0002] # UP-POINTING RED TRIANGLE -1F53B ; [*1502.0020.0002] # DOWN-POINTING RED TRIANGLE -1F53C ; [*1503.0020.0002] # UP-POINTING SMALL RED TRIANGLE -1F53D ; [*1504.0020.0002] # DOWN-POINTING SMALL RED TRIANGLE -1F53E ; [*1505.0020.0002] # LOWER RIGHT SHADOWED WHITE CIRCLE -1F53F ; [*1506.0020.0002] # UPPER RIGHT SHADOWED WHITE CIRCLE -1F540 ; [*1507.0020.0002] # CIRCLED CROSS POMMEE -1F541 ; [*1508.0020.0002] # CROSS POMMEE WITH HALF-CIRCLE BELOW -1F542 ; [*1509.0020.0002] # CROSS POMMEE -1F543 ; [*150A.0020.0002] # NOTCHED LEFT SEMICIRCLE WITH THREE DOTS -1F544 ; [*150B.0020.0002] # NOTCHED RIGHT SEMICIRCLE WITH THREE DOTS -1F545 ; [*150C.0020.0002] # SYMBOL FOR MARKS CHAPTER -1F546 ; [*150D.0020.0002] # WHITE LATIN CROSS -1F547 ; [*150E.0020.0002] # HEAVY LATIN CROSS -1F548 ; [*150F.0020.0002] # CELTIC CROSS -1F549 ; [*1510.0020.0002] # OM SYMBOL -1F54A ; [*1511.0020.0002] # DOVE OF PEACE -1F54B ; [*1512.0020.0002] # KAABA -1F54C ; [*1513.0020.0002] # MOSQUE -1F54D ; [*1514.0020.0002] # SYNAGOGUE -1F54E ; [*1515.0020.0002] # MENORAH WITH NINE BRANCHES -1F54F ; [*1516.0020.0002] # BOWL OF HYGIEIA -1F550 ; [*1517.0020.0002] # CLOCK FACE ONE OCLOCK -1F551 ; [*1518.0020.0002] # CLOCK FACE TWO OCLOCK -1F552 ; [*1519.0020.0002] # CLOCK FACE THREE OCLOCK -1F553 ; [*151A.0020.0002] # CLOCK FACE FOUR OCLOCK -1F554 ; [*151B.0020.0002] # CLOCK FACE FIVE OCLOCK -1F555 ; [*151C.0020.0002] # CLOCK FACE SIX OCLOCK -1F556 ; [*151D.0020.0002] # CLOCK FACE SEVEN OCLOCK -1F557 ; [*151E.0020.0002] # CLOCK FACE EIGHT OCLOCK -1F558 ; [*151F.0020.0002] # CLOCK FACE NINE OCLOCK -1F559 ; [*1520.0020.0002] # CLOCK FACE TEN OCLOCK -1F55A ; [*1521.0020.0002] # CLOCK FACE ELEVEN OCLOCK -1F55B ; [*1522.0020.0002] # CLOCK FACE TWELVE OCLOCK -1F55C ; [*1523.0020.0002] # CLOCK FACE ONE-THIRTY -1F55D ; [*1524.0020.0002] # CLOCK FACE TWO-THIRTY -1F55E ; [*1525.0020.0002] # CLOCK FACE THREE-THIRTY -1F55F ; [*1526.0020.0002] # CLOCK FACE FOUR-THIRTY -1F560 ; [*1527.0020.0002] # CLOCK FACE FIVE-THIRTY -1F561 ; [*1528.0020.0002] # CLOCK FACE SIX-THIRTY -1F562 ; [*1529.0020.0002] # CLOCK FACE SEVEN-THIRTY -1F563 ; [*152A.0020.0002] # CLOCK FACE EIGHT-THIRTY -1F564 ; [*152B.0020.0002] # CLOCK FACE NINE-THIRTY -1F565 ; [*152C.0020.0002] # CLOCK FACE TEN-THIRTY -1F566 ; [*152D.0020.0002] # CLOCK FACE ELEVEN-THIRTY -1F567 ; [*152E.0020.0002] # CLOCK FACE TWELVE-THIRTY -1F568 ; [*152F.0020.0002] # RIGHT SPEAKER -1F569 ; [*1530.0020.0002] # RIGHT SPEAKER WITH ONE SOUND WAVE -1F56A ; [*1531.0020.0002] # RIGHT SPEAKER WITH THREE SOUND WAVES -1F56B ; [*1532.0020.0002] # BULLHORN -1F56C ; [*1533.0020.0002] # BULLHORN WITH SOUND WAVES -1F56D ; [*1534.0020.0002] # RINGING BELL -1F56E ; [*1535.0020.0002] # BOOK -1F56F ; [*1536.0020.0002] # CANDLE -1F570 ; [*1537.0020.0002] # MANTELPIECE CLOCK -1F571 ; [*1538.0020.0002] # BLACK SKULL AND CROSSBONES -1F572 ; [*1539.0020.0002] # NO PIRACY -1F573 ; [*153A.0020.0002] # HOLE -1F574 ; [*153B.0020.0002] # MAN IN BUSINESS SUIT LEVITATING -1F575 ; [*153C.0020.0002] # SLEUTH OR SPY -1F576 ; [*153D.0020.0002] # DARK SUNGLASSES -1F577 ; [*153E.0020.0002] # SPIDER -1F578 ; [*153F.0020.0002] # SPIDER WEB -1F579 ; [*1540.0020.0002] # JOYSTICK -1F57A ; [*1541.0020.0002] # MAN DANCING -1F57B ; [*1542.0020.0002] # LEFT HAND TELEPHONE RECEIVER -1F57C ; [*1543.0020.0002] # TELEPHONE RECEIVER WITH PAGE -1F57D ; [*1544.0020.0002] # RIGHT HAND TELEPHONE RECEIVER -1F57E ; [*1545.0020.0002] # WHITE TOUCHTONE TELEPHONE -1F57F ; [*1546.0020.0002] # BLACK TOUCHTONE TELEPHONE -1F580 ; [*1547.0020.0002] # TELEPHONE ON TOP OF MODEM -1F581 ; [*1548.0020.0002] # CLAMSHELL MOBILE PHONE -1F582 ; [*1549.0020.0002] # BACK OF ENVELOPE -1F583 ; [*154A.0020.0002] # STAMPED ENVELOPE -1F584 ; [*154B.0020.0002] # ENVELOPE WITH LIGHTNING -1F585 ; [*154C.0020.0002] # FLYING ENVELOPE -1F586 ; [*154D.0020.0002] # PEN OVER STAMPED ENVELOPE -1F587 ; [*154E.0020.0002] # LINKED PAPERCLIPS -1F588 ; [*154F.0020.0002] # BLACK PUSHPIN -1F589 ; [*1550.0020.0002] # LOWER LEFT PENCIL -1F58A ; [*1551.0020.0002] # LOWER LEFT BALLPOINT PEN -1F58B ; [*1552.0020.0002] # LOWER LEFT FOUNTAIN PEN -1F58C ; [*1553.0020.0002] # LOWER LEFT PAINTBRUSH -1F58D ; [*1554.0020.0002] # LOWER LEFT CRAYON -1F58E ; [*1555.0020.0002] # LEFT WRITING HAND -1F58F ; [*1556.0020.0002] # TURNED OK HAND SIGN -1F590 ; [*1557.0020.0002] # RAISED HAND WITH FINGERS SPLAYED -1F591 ; [*1558.0020.0002] # REVERSED RAISED HAND WITH FINGERS SPLAYED -1F592 ; [*1559.0020.0002] # REVERSED THUMBS UP SIGN -1F593 ; [*155A.0020.0002] # REVERSED THUMBS DOWN SIGN -1F594 ; [*155B.0020.0002] # REVERSED VICTORY HAND -1F595 ; [*155C.0020.0002] # REVERSED HAND WITH MIDDLE FINGER EXTENDED -1F596 ; [*155D.0020.0002] # RAISED HAND WITH PART BETWEEN MIDDLE AND RING FINGERS -1F597 ; [*155E.0020.0002] # WHITE DOWN POINTING LEFT HAND INDEX -1F598 ; [*155F.0020.0002] # SIDEWAYS WHITE LEFT POINTING INDEX -1F599 ; [*1560.0020.0002] # SIDEWAYS WHITE RIGHT POINTING INDEX -1F59A ; [*1561.0020.0002] # SIDEWAYS BLACK LEFT POINTING INDEX -1F59B ; [*1562.0020.0002] # SIDEWAYS BLACK RIGHT POINTING INDEX -1F59C ; [*1563.0020.0002] # BLACK LEFT POINTING BACKHAND INDEX -1F59D ; [*1564.0020.0002] # BLACK RIGHT POINTING BACKHAND INDEX -1F59E ; [*1565.0020.0002] # SIDEWAYS WHITE UP POINTING INDEX -1F59F ; [*1566.0020.0002] # SIDEWAYS WHITE DOWN POINTING INDEX -1F5A0 ; [*1567.0020.0002] # SIDEWAYS BLACK UP POINTING INDEX -1F5A1 ; [*1568.0020.0002] # SIDEWAYS BLACK DOWN POINTING INDEX -1F5A2 ; [*1569.0020.0002] # BLACK UP POINTING BACKHAND INDEX -1F5A3 ; [*156A.0020.0002] # BLACK DOWN POINTING BACKHAND INDEX -1F5A4 ; [*156B.0020.0002] # BLACK HEART -1F5A5 ; [*156C.0020.0002] # DESKTOP COMPUTER -1F5A6 ; [*156D.0020.0002] # KEYBOARD AND MOUSE -1F5A7 ; [*156E.0020.0002] # THREE NETWORKED COMPUTERS -1F5A8 ; [*156F.0020.0002] # PRINTER -1F5A9 ; [*1570.0020.0002] # POCKET CALCULATOR -1F5AA ; [*1571.0020.0002] # BLACK HARD SHELL FLOPPY DISK -1F5AB ; [*1572.0020.0002] # WHITE HARD SHELL FLOPPY DISK -1F5AC ; [*1573.0020.0002] # SOFT SHELL FLOPPY DISK -1F5AD ; [*1574.0020.0002] # TAPE CARTRIDGE -1F5AE ; [*1575.0020.0002] # WIRED KEYBOARD -1F5AF ; [*1576.0020.0002] # ONE BUTTON MOUSE -1F5B0 ; [*1577.0020.0002] # TWO BUTTON MOUSE -1F5B1 ; [*1578.0020.0002] # THREE BUTTON MOUSE -1F5B2 ; [*1579.0020.0002] # TRACKBALL -1F5B3 ; [*157A.0020.0002] # OLD PERSONAL COMPUTER -1F5B4 ; [*157B.0020.0002] # HARD DISK -1F5B5 ; [*157C.0020.0002] # SCREEN -1F5B6 ; [*157D.0020.0002] # PRINTER ICON -1F5B7 ; [*157E.0020.0002] # FAX ICON -1F5B8 ; [*157F.0020.0002] # OPTICAL DISC ICON -1F5B9 ; [*1580.0020.0002] # DOCUMENT WITH TEXT -1F5BA ; [*1581.0020.0002] # DOCUMENT WITH TEXT AND PICTURE -1F5BB ; [*1582.0020.0002] # DOCUMENT WITH PICTURE -1F5BC ; [*1583.0020.0002] # FRAME WITH PICTURE -1F5BD ; [*1584.0020.0002] # FRAME WITH TILES -1F5BE ; [*1585.0020.0002] # FRAME WITH AN X -1F5BF ; [*1586.0020.0002] # BLACK FOLDER -1F5C0 ; [*1587.0020.0002] # FOLDER -1F5C1 ; [*1588.0020.0002] # OPEN FOLDER -1F5C2 ; [*1589.0020.0002] # CARD INDEX DIVIDERS -1F5C3 ; [*158A.0020.0002] # CARD FILE BOX -1F5C4 ; [*158B.0020.0002] # FILE CABINET -1F5C5 ; [*158C.0020.0002] # EMPTY NOTE -1F5C6 ; [*158D.0020.0002] # EMPTY NOTE PAGE -1F5C7 ; [*158E.0020.0002] # EMPTY NOTE PAD -1F5C8 ; [*158F.0020.0002] # NOTE -1F5C9 ; [*1590.0020.0002] # NOTE PAGE -1F5CA ; [*1591.0020.0002] # NOTE PAD -1F5CB ; [*1592.0020.0002] # EMPTY DOCUMENT -1F5CC ; [*1593.0020.0002] # EMPTY PAGE -1F5CD ; [*1594.0020.0002] # EMPTY PAGES -1F5CE ; [*1595.0020.0002] # DOCUMENT -1F5CF ; [*1596.0020.0002] # PAGE -1F5D0 ; [*1597.0020.0002] # PAGES -1F5D1 ; [*1598.0020.0002] # WASTEBASKET -1F5D2 ; [*1599.0020.0002] # SPIRAL NOTE PAD -1F5D3 ; [*159A.0020.0002] # SPIRAL CALENDAR PAD -1F5D4 ; [*159B.0020.0002] # DESKTOP WINDOW -1F5D5 ; [*159C.0020.0002] # MINIMIZE -1F5D6 ; [*159D.0020.0002] # MAXIMIZE -1F5D7 ; [*159E.0020.0002] # OVERLAP -1F5D8 ; [*159F.0020.0002] # CLOCKWISE RIGHT AND LEFT SEMICIRCLE ARROWS -1F5D9 ; [*15A0.0020.0002] # CANCELLATION X -1F5DA ; [*15A1.0020.0002] # INCREASE FONT SIZE SYMBOL -1F5DB ; [*15A2.0020.0002] # DECREASE FONT SIZE SYMBOL -1F5DC ; [*15A3.0020.0002] # COMPRESSION -1F5DD ; [*15A4.0020.0002] # OLD KEY -1F5DE ; [*15A5.0020.0002] # ROLLED-UP NEWSPAPER -1F5DF ; [*15A6.0020.0002] # PAGE WITH CIRCLED TEXT -1F5E0 ; [*15A7.0020.0002] # STOCK CHART -1F5E1 ; [*15A8.0020.0002] # DAGGER KNIFE -1F5E2 ; [*15A9.0020.0002] # LIPS -1F5E3 ; [*15AA.0020.0002] # SPEAKING HEAD IN SILHOUETTE -1F5E4 ; [*15AB.0020.0002] # THREE RAYS ABOVE -1F5E5 ; [*15AC.0020.0002] # THREE RAYS BELOW -1F5E6 ; [*15AD.0020.0002] # THREE RAYS LEFT -1F5E7 ; [*15AE.0020.0002] # THREE RAYS RIGHT -1F5E8 ; [*15AF.0020.0002] # LEFT SPEECH BUBBLE -1F5E9 ; [*15B0.0020.0002] # RIGHT SPEECH BUBBLE -1F5EA ; [*15B1.0020.0002] # TWO SPEECH BUBBLES -1F5EB ; [*15B2.0020.0002] # THREE SPEECH BUBBLES -1F5EC ; [*15B3.0020.0002] # LEFT THOUGHT BUBBLE -1F5ED ; [*15B4.0020.0002] # RIGHT THOUGHT BUBBLE -1F5EE ; [*15B5.0020.0002] # LEFT ANGER BUBBLE -1F5EF ; [*15B6.0020.0002] # RIGHT ANGER BUBBLE -1F5F0 ; [*15B7.0020.0002] # MOOD BUBBLE -1F5F1 ; [*15B8.0020.0002] # LIGHTNING MOOD BUBBLE -1F5F2 ; [*15B9.0020.0002] # LIGHTNING MOOD -1F5F3 ; [*15BA.0020.0002] # BALLOT BOX WITH BALLOT -1F5F4 ; [*15BB.0020.0002] # BALLOT SCRIPT X -1F5F5 ; [*15BC.0020.0002] # BALLOT BOX WITH SCRIPT X -1F5F6 ; [*15BD.0020.0002] # BALLOT BOLD SCRIPT X -1F5F7 ; [*15BE.0020.0002] # BALLOT BOX WITH BOLD SCRIPT X -1F5F8 ; [*15BF.0020.0002] # LIGHT CHECK MARK -1F5F9 ; [*15C0.0020.0002] # BALLOT BOX WITH BOLD CHECK -1F5FA ; [*15C1.0020.0002] # WORLD MAP -1F5FB ; [*15C2.0020.0002] # MOUNT FUJI -1F5FC ; [*15C3.0020.0002] # TOKYO TOWER -1F5FD ; [*15C4.0020.0002] # STATUE OF LIBERTY -1F5FE ; [*15C5.0020.0002] # SILHOUETTE OF JAPAN -1F5FF ; [*15C6.0020.0002] # MOYAI -1F600 ; [*165B.0020.0002] # GRINNING FACE -1F601 ; [*165C.0020.0002] # GRINNING FACE WITH SMILING EYES -1F602 ; [*165D.0020.0002] # FACE WITH TEARS OF JOY -1F603 ; [*165E.0020.0002] # SMILING FACE WITH OPEN MOUTH -1F604 ; [*165F.0020.0002] # SMILING FACE WITH OPEN MOUTH AND SMILING EYES -1F605 ; [*1660.0020.0002] # SMILING FACE WITH OPEN MOUTH AND COLD SWEAT -1F606 ; [*1661.0020.0002] # SMILING FACE WITH OPEN MOUTH AND TIGHTLY-CLOSED EYES -1F607 ; [*1662.0020.0002] # SMILING FACE WITH HALO -1F608 ; [*1663.0020.0002] # SMILING FACE WITH HORNS -1F609 ; [*1664.0020.0002] # WINKING FACE -1F60A ; [*1665.0020.0002] # SMILING FACE WITH SMILING EYES -1F60B ; [*1666.0020.0002] # FACE SAVOURING DELICIOUS FOOD -1F60C ; [*1667.0020.0002] # RELIEVED FACE -1F60D ; [*1668.0020.0002] # SMILING FACE WITH HEART-SHAPED EYES -1F60E ; [*1669.0020.0002] # SMILING FACE WITH SUNGLASSES -1F60F ; [*166A.0020.0002] # SMIRKING FACE -1F610 ; [*166B.0020.0002] # NEUTRAL FACE -1F611 ; [*166C.0020.0002] # EXPRESSIONLESS FACE -1F612 ; [*166D.0020.0002] # UNAMUSED FACE -1F613 ; [*166E.0020.0002] # FACE WITH COLD SWEAT -1F614 ; [*166F.0020.0002] # PENSIVE FACE -1F615 ; [*1670.0020.0002] # CONFUSED FACE -1F616 ; [*1671.0020.0002] # CONFOUNDED FACE -1F617 ; [*1672.0020.0002] # KISSING FACE -1F618 ; [*1673.0020.0002] # FACE THROWING A KISS -1F619 ; [*1674.0020.0002] # KISSING FACE WITH SMILING EYES -1F61A ; [*1675.0020.0002] # KISSING FACE WITH CLOSED EYES -1F61B ; [*1676.0020.0002] # FACE WITH STUCK-OUT TONGUE -1F61C ; [*1677.0020.0002] # FACE WITH STUCK-OUT TONGUE AND WINKING EYE -1F61D ; [*1678.0020.0002] # FACE WITH STUCK-OUT TONGUE AND TIGHTLY-CLOSED EYES -1F61E ; [*1679.0020.0002] # DISAPPOINTED FACE -1F61F ; [*167A.0020.0002] # WORRIED FACE -1F620 ; [*167B.0020.0002] # ANGRY FACE -1F621 ; [*167C.0020.0002] # POUTING FACE -1F622 ; [*167D.0020.0002] # CRYING FACE -1F623 ; [*167E.0020.0002] # PERSEVERING FACE -1F624 ; [*167F.0020.0002] # FACE WITH LOOK OF TRIUMPH -1F625 ; [*1680.0020.0002] # DISAPPOINTED BUT RELIEVED FACE -1F626 ; [*1681.0020.0002] # FROWNING FACE WITH OPEN MOUTH -1F627 ; [*1682.0020.0002] # ANGUISHED FACE -1F628 ; [*1683.0020.0002] # FEARFUL FACE -1F629 ; [*1684.0020.0002] # WEARY FACE -1F62A ; [*1685.0020.0002] # SLEEPY FACE -1F62B ; [*1686.0020.0002] # TIRED FACE -1F62C ; [*1687.0020.0002] # GRIMACING FACE -1F62D ; [*1688.0020.0002] # LOUDLY CRYING FACE -1F62E ; [*1689.0020.0002] # FACE WITH OPEN MOUTH -1F62F ; [*168A.0020.0002] # HUSHED FACE -1F630 ; [*168B.0020.0002] # FACE WITH OPEN MOUTH AND COLD SWEAT -1F631 ; [*168C.0020.0002] # FACE SCREAMING IN FEAR -1F632 ; [*168D.0020.0002] # ASTONISHED FACE -1F633 ; [*168E.0020.0002] # FLUSHED FACE -1F634 ; [*168F.0020.0002] # SLEEPING FACE -1F635 ; [*1690.0020.0002] # DIZZY FACE -1F636 ; [*1691.0020.0002] # FACE WITHOUT MOUTH -1F637 ; [*1692.0020.0002] # FACE WITH MEDICAL MASK -1F638 ; [*1693.0020.0002] # GRINNING CAT FACE WITH SMILING EYES -1F639 ; [*1694.0020.0002] # CAT FACE WITH TEARS OF JOY -1F63A ; [*1695.0020.0002] # SMILING CAT FACE WITH OPEN MOUTH -1F63B ; [*1696.0020.0002] # SMILING CAT FACE WITH HEART-SHAPED EYES -1F63C ; [*1697.0020.0002] # CAT FACE WITH WRY SMILE -1F63D ; [*1698.0020.0002] # KISSING CAT FACE WITH CLOSED EYES -1F63E ; [*1699.0020.0002] # POUTING CAT FACE -1F63F ; [*169A.0020.0002] # CRYING CAT FACE -1F640 ; [*169B.0020.0002] # WEARY CAT FACE -1F641 ; [*169C.0020.0002] # SLIGHTLY FROWNING FACE -1F642 ; [*169D.0020.0002] # SLIGHTLY SMILING FACE -1F643 ; [*169E.0020.0002] # UPSIDE-DOWN FACE -1F644 ; [*169F.0020.0002] # FACE WITH ROLLING EYES -1F645 ; [*16A0.0020.0002] # FACE WITH NO GOOD GESTURE -1F646 ; [*16A1.0020.0002] # FACE WITH OK GESTURE -1F647 ; [*16A2.0020.0002] # PERSON BOWING DEEPLY -1F648 ; [*16A3.0020.0002] # SEE-NO-EVIL MONKEY -1F649 ; [*16A4.0020.0002] # HEAR-NO-EVIL MONKEY -1F64A ; [*16A5.0020.0002] # SPEAK-NO-EVIL MONKEY -1F64B ; [*16A6.0020.0002] # HAPPY PERSON RAISING ONE HAND -1F64C ; [*16A7.0020.0002] # PERSON RAISING BOTH HANDS IN CELEBRATION -1F64D ; [*16A8.0020.0002] # PERSON FROWNING -1F64E ; [*16A9.0020.0002] # PERSON WITH POUTING FACE -1F64F ; [*16AA.0020.0002] # PERSON WITH FOLDED HANDS -1F650 ; [*16AB.0020.0002] # NORTH WEST POINTING LEAF -1F651 ; [*16AC.0020.0002] # SOUTH WEST POINTING LEAF -1F652 ; [*16AD.0020.0002] # NORTH EAST POINTING LEAF -1F653 ; [*16AE.0020.0002] # SOUTH EAST POINTING LEAF -1F654 ; [*16AF.0020.0002] # TURNED NORTH WEST POINTING LEAF -1F655 ; [*16B0.0020.0002] # TURNED SOUTH WEST POINTING LEAF -1F656 ; [*16B1.0020.0002] # TURNED NORTH EAST POINTING LEAF -1F657 ; [*16B2.0020.0002] # TURNED SOUTH EAST POINTING LEAF -1F658 ; [*16B3.0020.0002] # NORTH WEST POINTING VINE LEAF -1F659 ; [*16B4.0020.0002] # SOUTH WEST POINTING VINE LEAF -1F65A ; [*16B5.0020.0002] # NORTH EAST POINTING VINE LEAF -1F65B ; [*16B6.0020.0002] # SOUTH EAST POINTING VINE LEAF -1F65C ; [*16B7.0020.0002] # HEAVY NORTH WEST POINTING VINE LEAF -1F65D ; [*16B8.0020.0002] # HEAVY SOUTH WEST POINTING VINE LEAF -1F65E ; [*16B9.0020.0002] # HEAVY NORTH EAST POINTING VINE LEAF -1F65F ; [*16BA.0020.0002] # HEAVY SOUTH EAST POINTING VINE LEAF -1F660 ; [*16BB.0020.0002] # NORTH WEST POINTING BUD -1F661 ; [*16BC.0020.0002] # SOUTH WEST POINTING BUD -1F662 ; [*16BD.0020.0002] # NORTH EAST POINTING BUD -1F663 ; [*16BE.0020.0002] # SOUTH EAST POINTING BUD -1F664 ; [*16BF.0020.0002] # HEAVY NORTH WEST POINTING BUD -1F665 ; [*16C0.0020.0002] # HEAVY SOUTH WEST POINTING BUD -1F666 ; [*16C1.0020.0002] # HEAVY NORTH EAST POINTING BUD -1F667 ; [*16C2.0020.0002] # HEAVY SOUTH EAST POINTING BUD -1F668 ; [*16C3.0020.0002] # HOLLOW QUILT SQUARE ORNAMENT -1F669 ; [*16C4.0020.0002] # HOLLOW QUILT SQUARE ORNAMENT IN BLACK SQUARE -1F66A ; [*16C5.0020.0002] # SOLID QUILT SQUARE ORNAMENT -1F66B ; [*16C6.0020.0002] # SOLID QUILT SQUARE ORNAMENT IN BLACK SQUARE -1F66C ; [*16C7.0020.0002] # LEFTWARDS ROCKET -1F66D ; [*16C8.0020.0002] # UPWARDS ROCKET -1F66E ; [*16C9.0020.0002] # RIGHTWARDS ROCKET -1F66F ; [*16CA.0020.0002] # DOWNWARDS ROCKET -1F670 ; [*16CB.0020.0002] # SCRIPT LIGATURE ET ORNAMENT -1F671 ; [*16CC.0020.0002] # HEAVY SCRIPT LIGATURE ET ORNAMENT -1F672 ; [*16CD.0020.0002] # LIGATURE OPEN ET ORNAMENT -1F673 ; [*16CE.0020.0002] # HEAVY LIGATURE OPEN ET ORNAMENT -1F674 ; [*16CF.0020.0002] # HEAVY AMPERSAND ORNAMENT -1F675 ; [*16D0.0020.0002] # SWASH AMPERSAND ORNAMENT -1F676 ; [*16D1.0020.0002] # SANS-SERIF HEAVY DOUBLE TURNED COMMA QUOTATION MARK ORNAMENT -1F677 ; [*16D2.0020.0002] # SANS-SERIF HEAVY DOUBLE COMMA QUOTATION MARK ORNAMENT -1F678 ; [*16D3.0020.0002] # SANS-SERIF HEAVY LOW DOUBLE COMMA QUOTATION MARK ORNAMENT -1F679 ; [*16D4.0020.0002] # HEAVY INTERROBANG ORNAMENT -1F67A ; [*16D5.0020.0002] # SANS-SERIF INTERROBANG ORNAMENT -1F67B ; [*16D6.0020.0002] # HEAVY SANS-SERIF INTERROBANG ORNAMENT -1F67C ; [*16D7.0020.0002] # VERY HEAVY SOLIDUS -1F67D ; [*16D8.0020.0002] # VERY HEAVY REVERSE SOLIDUS -1F67E ; [*16D9.0020.0002] # CHECKER BOARD -1F67F ; [*16DA.0020.0002] # REVERSE CHECKER BOARD -1F680 ; [*16DB.0020.0002] # ROCKET -1F681 ; [*16DC.0020.0002] # HELICOPTER -1F682 ; [*16DD.0020.0002] # STEAM LOCOMOTIVE -1F683 ; [*16DE.0020.0002] # RAILWAY CAR -1F684 ; [*16DF.0020.0002] # HIGH-SPEED TRAIN -1F685 ; [*16E0.0020.0002] # HIGH-SPEED TRAIN WITH BULLET NOSE -1F686 ; [*16E1.0020.0002] # TRAIN -1F687 ; [*16E2.0020.0002] # METRO -1F688 ; [*16E3.0020.0002] # LIGHT RAIL -1F689 ; [*16E4.0020.0002] # STATION -1F68A ; [*16E5.0020.0002] # TRAM -1F68B ; [*16E6.0020.0002] # TRAM CAR -1F68C ; [*16E7.0020.0002] # BUS -1F68D ; [*16E8.0020.0002] # ONCOMING BUS -1F68E ; [*16E9.0020.0002] # TROLLEYBUS -1F68F ; [*16EA.0020.0002] # BUS STOP -1F690 ; [*16EB.0020.0002] # MINIBUS -1F691 ; [*16EC.0020.0002] # AMBULANCE -1F692 ; [*16ED.0020.0002] # FIRE ENGINE -1F693 ; [*16EE.0020.0002] # POLICE CAR -1F694 ; [*16EF.0020.0002] # ONCOMING POLICE CAR -1F695 ; [*16F0.0020.0002] # TAXI -1F696 ; [*16F1.0020.0002] # ONCOMING TAXI -1F697 ; [*16F2.0020.0002] # AUTOMOBILE -1F698 ; [*16F3.0020.0002] # ONCOMING AUTOMOBILE -1F699 ; [*16F4.0020.0002] # RECREATIONAL VEHICLE -1F69A ; [*16F5.0020.0002] # DELIVERY TRUCK -1F69B ; [*16F6.0020.0002] # ARTICULATED LORRY -1F69C ; [*16F7.0020.0002] # TRACTOR -1F69D ; [*16F8.0020.0002] # MONORAIL -1F69E ; [*16F9.0020.0002] # MOUNTAIN RAILWAY -1F69F ; [*16FA.0020.0002] # SUSPENSION RAILWAY -1F6A0 ; [*16FB.0020.0002] # MOUNTAIN CABLEWAY -1F6A1 ; [*16FC.0020.0002] # AERIAL TRAMWAY -1F6A2 ; [*16FD.0020.0002] # SHIP -1F6A3 ; [*16FE.0020.0002] # ROWBOAT -1F6A4 ; [*16FF.0020.0002] # SPEEDBOAT -1F6A5 ; [*1700.0020.0002] # HORIZONTAL TRAFFIC LIGHT -1F6A6 ; [*1701.0020.0002] # VERTICAL TRAFFIC LIGHT -1F6A7 ; [*1702.0020.0002] # CONSTRUCTION SIGN -1F6A8 ; [*1703.0020.0002] # POLICE CARS REVOLVING LIGHT -1F6A9 ; [*1704.0020.0002] # TRIANGULAR FLAG ON POST -1F6AA ; [*1705.0020.0002] # DOOR -1F6AB ; [*1706.0020.0002] # NO ENTRY SIGN -1F6AC ; [*1707.0020.0002] # SMOKING SYMBOL -1F6AD ; [*1708.0020.0002] # NO SMOKING SYMBOL -1F6AE ; [*1709.0020.0002] # PUT LITTER IN ITS PLACE SYMBOL -1F6AF ; [*170A.0020.0002] # DO NOT LITTER SYMBOL -1F6B0 ; [*170B.0020.0002] # POTABLE WATER SYMBOL -1F6B1 ; [*170C.0020.0002] # NON-POTABLE WATER SYMBOL -1F6B2 ; [*170D.0020.0002] # BICYCLE -1F6B3 ; [*170E.0020.0002] # NO BICYCLES -1F6B4 ; [*170F.0020.0002] # BICYCLIST -1F6B5 ; [*1710.0020.0002] # MOUNTAIN BICYCLIST -1F6B6 ; [*1711.0020.0002] # PEDESTRIAN -1F6B7 ; [*1712.0020.0002] # NO PEDESTRIANS -1F6B8 ; [*1713.0020.0002] # CHILDREN CROSSING -1F6B9 ; [*1714.0020.0002] # MENS SYMBOL -1F6BA ; [*1715.0020.0002] # WOMENS SYMBOL -1F6BB ; [*1716.0020.0002] # RESTROOM -1F6BC ; [*1717.0020.0002] # BABY SYMBOL -1F6BD ; [*1718.0020.0002] # TOILET -1F6BE ; [*1719.0020.0002] # WATER CLOSET -1F6BF ; [*171A.0020.0002] # SHOWER -1F6C0 ; [*171B.0020.0002] # BATH -1F6C1 ; [*171C.0020.0002] # BATHTUB -1F6C2 ; [*171D.0020.0002] # PASSPORT CONTROL -1F6C3 ; [*171E.0020.0002] # CUSTOMS -1F6C4 ; [*171F.0020.0002] # BAGGAGE CLAIM -1F6C5 ; [*1720.0020.0002] # LEFT LUGGAGE -1F6C6 ; [*1721.0020.0002] # TRIANGLE WITH ROUNDED CORNERS -1F6C7 ; [*1722.0020.0002] # PROHIBITED SIGN -1F6C8 ; [*1723.0020.0002] # CIRCLED INFORMATION SOURCE -1F6C9 ; [*1724.0020.0002] # BOYS SYMBOL -1F6CA ; [*1725.0020.0002] # GIRLS SYMBOL -1F6CB ; [*1726.0020.0002] # COUCH AND LAMP -1F6CC ; [*1727.0020.0002] # SLEEPING ACCOMMODATION -1F6CD ; [*1728.0020.0002] # SHOPPING BAGS -1F6CE ; [*1729.0020.0002] # BELLHOP BELL -1F6CF ; [*172A.0020.0002] # BED -1F6D0 ; [*172B.0020.0002] # PLACE OF WORSHIP -1F6D1 ; [*172C.0020.0002] # OCTAGONAL SIGN -1F6D2 ; [*172D.0020.0002] # SHOPPING TROLLEY -1F6D3 ; [*172E.0020.0002] # STUPA -1F6D4 ; [*172F.0020.0002] # PAGODA -1F6E0 ; [*1730.0020.0002] # HAMMER AND WRENCH -1F6E1 ; [*1731.0020.0002] # SHIELD -1F6E2 ; [*1732.0020.0002] # OIL DRUM -1F6E3 ; [*1733.0020.0002] # MOTORWAY -1F6E4 ; [*1734.0020.0002] # RAILWAY TRACK -1F6E5 ; [*1735.0020.0002] # MOTOR BOAT -1F6E6 ; [*1736.0020.0002] # UP-POINTING MILITARY AIRPLANE -1F6E7 ; [*1737.0020.0002] # UP-POINTING AIRPLANE -1F6E8 ; [*1738.0020.0002] # UP-POINTING SMALL AIRPLANE -1F6E9 ; [*1739.0020.0002] # SMALL AIRPLANE -1F6EA ; [*173A.0020.0002] # NORTHEAST-POINTING AIRPLANE -1F6EB ; [*173B.0020.0002] # AIRPLANE DEPARTURE -1F6EC ; [*173C.0020.0002] # AIRPLANE ARRIVING -1F6F0 ; [*173D.0020.0002] # SATELLITE -1F6F1 ; [*173E.0020.0002] # ONCOMING FIRE ENGINE -1F6F2 ; [*173F.0020.0002] # DIESEL LOCOMOTIVE -1F6F3 ; [*1740.0020.0002] # PASSENGER SHIP -1F6F4 ; [*1741.0020.0002] # SCOOTER -1F6F5 ; [*1742.0020.0002] # MOTOR SCOOTER -1F6F6 ; [*1743.0020.0002] # CANOE -1F6F7 ; [*1744.0020.0002] # SLED -1F6F8 ; [*1745.0020.0002] # FLYING SAUCER -1F700 ; [*1746.0020.0002] # ALCHEMICAL SYMBOL FOR QUINTESSENCE -1F701 ; [*1747.0020.0002] # ALCHEMICAL SYMBOL FOR AIR -1F702 ; [*1748.0020.0002] # ALCHEMICAL SYMBOL FOR FIRE -1F703 ; [*1749.0020.0002] # ALCHEMICAL SYMBOL FOR EARTH -1F704 ; [*174A.0020.0002] # ALCHEMICAL SYMBOL FOR WATER -1F705 ; [*174B.0020.0002] # ALCHEMICAL SYMBOL FOR AQUAFORTIS -1F706 ; [*174C.0020.0002] # ALCHEMICAL SYMBOL FOR AQUA REGIA -1F707 ; [*174D.0020.0002] # ALCHEMICAL SYMBOL FOR AQUA REGIA-2 -1F708 ; [*174E.0020.0002] # ALCHEMICAL SYMBOL FOR AQUA VITAE -1F709 ; [*174F.0020.0002] # ALCHEMICAL SYMBOL FOR AQUA VITAE-2 -1F70A ; [*1750.0020.0002] # ALCHEMICAL SYMBOL FOR VINEGAR -1F70B ; [*1751.0020.0002] # ALCHEMICAL SYMBOL FOR VINEGAR-2 -1F70C ; [*1752.0020.0002] # ALCHEMICAL SYMBOL FOR VINEGAR-3 -1F70D ; [*1753.0020.0002] # ALCHEMICAL SYMBOL FOR SULFUR -1F70E ; [*1754.0020.0002] # ALCHEMICAL SYMBOL FOR PHILOSOPHERS SULFUR -1F70F ; [*1755.0020.0002] # ALCHEMICAL SYMBOL FOR BLACK SULFUR -1F710 ; [*1756.0020.0002] # ALCHEMICAL SYMBOL FOR MERCURY SUBLIMATE -1F711 ; [*1757.0020.0002] # ALCHEMICAL SYMBOL FOR MERCURY SUBLIMATE-2 -1F712 ; [*1758.0020.0002] # ALCHEMICAL SYMBOL FOR MERCURY SUBLIMATE-3 -1F713 ; [*1759.0020.0002] # ALCHEMICAL SYMBOL FOR CINNABAR -1F714 ; [*175A.0020.0002] # ALCHEMICAL SYMBOL FOR SALT -1F715 ; [*175B.0020.0002] # ALCHEMICAL SYMBOL FOR NITRE -1F716 ; [*175C.0020.0002] # ALCHEMICAL SYMBOL FOR VITRIOL -1F717 ; [*175D.0020.0002] # ALCHEMICAL SYMBOL FOR VITRIOL-2 -1F718 ; [*175E.0020.0002] # ALCHEMICAL SYMBOL FOR ROCK SALT -1F719 ; [*175F.0020.0002] # ALCHEMICAL SYMBOL FOR ROCK SALT-2 -1F71A ; [*1760.0020.0002] # ALCHEMICAL SYMBOL FOR GOLD -1F71B ; [*1761.0020.0002] # ALCHEMICAL SYMBOL FOR SILVER -1F71C ; [*1762.0020.0002] # ALCHEMICAL SYMBOL FOR IRON ORE -1F71D ; [*1763.0020.0002] # ALCHEMICAL SYMBOL FOR IRON ORE-2 -1F71E ; [*1764.0020.0002] # ALCHEMICAL SYMBOL FOR CROCUS OF IRON -1F71F ; [*1765.0020.0002] # ALCHEMICAL SYMBOL FOR REGULUS OF IRON -1F720 ; [*1766.0020.0002] # ALCHEMICAL SYMBOL FOR COPPER ORE -1F721 ; [*1767.0020.0002] # ALCHEMICAL SYMBOL FOR IRON-COPPER ORE -1F722 ; [*1768.0020.0002] # ALCHEMICAL SYMBOL FOR SUBLIMATE OF COPPER -1F723 ; [*1769.0020.0002] # ALCHEMICAL SYMBOL FOR CROCUS OF COPPER -1F724 ; [*176A.0020.0002] # ALCHEMICAL SYMBOL FOR CROCUS OF COPPER-2 -1F725 ; [*176B.0020.0002] # ALCHEMICAL SYMBOL FOR COPPER ANTIMONIATE -1F726 ; [*176C.0020.0002] # ALCHEMICAL SYMBOL FOR SALT OF COPPER ANTIMONIATE -1F727 ; [*176D.0020.0002] # ALCHEMICAL SYMBOL FOR SUBLIMATE OF SALT OF COPPER -1F728 ; [*176E.0020.0002] # ALCHEMICAL SYMBOL FOR VERDIGRIS -1F729 ; [*176F.0020.0002] # ALCHEMICAL SYMBOL FOR TIN ORE -1F72A ; [*1770.0020.0002] # ALCHEMICAL SYMBOL FOR LEAD ORE -1F72B ; [*1771.0020.0002] # ALCHEMICAL SYMBOL FOR ANTIMONY ORE -1F72C ; [*1772.0020.0002] # ALCHEMICAL SYMBOL FOR SUBLIMATE OF ANTIMONY -1F72D ; [*1773.0020.0002] # ALCHEMICAL SYMBOL FOR SALT OF ANTIMONY -1F72E ; [*1774.0020.0002] # ALCHEMICAL SYMBOL FOR SUBLIMATE OF SALT OF ANTIMONY -1F72F ; [*1775.0020.0002] # ALCHEMICAL SYMBOL FOR VINEGAR OF ANTIMONY -1F730 ; [*1776.0020.0002] # ALCHEMICAL SYMBOL FOR REGULUS OF ANTIMONY -1F731 ; [*1777.0020.0002] # ALCHEMICAL SYMBOL FOR REGULUS OF ANTIMONY-2 -1F732 ; [*1778.0020.0002] # ALCHEMICAL SYMBOL FOR REGULUS -1F733 ; [*1779.0020.0002] # ALCHEMICAL SYMBOL FOR REGULUS-2 -1F734 ; [*177A.0020.0002] # ALCHEMICAL SYMBOL FOR REGULUS-3 -1F735 ; [*177B.0020.0002] # ALCHEMICAL SYMBOL FOR REGULUS-4 -1F736 ; [*177C.0020.0002] # ALCHEMICAL SYMBOL FOR ALKALI -1F737 ; [*177D.0020.0002] # ALCHEMICAL SYMBOL FOR ALKALI-2 -1F738 ; [*177E.0020.0002] # ALCHEMICAL SYMBOL FOR MARCASITE -1F739 ; [*177F.0020.0002] # ALCHEMICAL SYMBOL FOR SAL-AMMONIAC -1F73A ; [*1780.0020.0002] # ALCHEMICAL SYMBOL FOR ARSENIC -1F73B ; [*1781.0020.0002] # ALCHEMICAL SYMBOL FOR REALGAR -1F73C ; [*1782.0020.0002] # ALCHEMICAL SYMBOL FOR REALGAR-2 -1F73D ; [*1783.0020.0002] # ALCHEMICAL SYMBOL FOR AURIPIGMENT -1F73E ; [*1784.0020.0002] # ALCHEMICAL SYMBOL FOR BISMUTH ORE -1F73F ; [*1785.0020.0002] # ALCHEMICAL SYMBOL FOR TARTAR -1F740 ; [*1786.0020.0002] # ALCHEMICAL SYMBOL FOR TARTAR-2 -1F741 ; [*1787.0020.0002] # ALCHEMICAL SYMBOL FOR QUICK LIME -1F742 ; [*1788.0020.0002] # ALCHEMICAL SYMBOL FOR BORAX -1F743 ; [*1789.0020.0002] # ALCHEMICAL SYMBOL FOR BORAX-2 -1F744 ; [*178A.0020.0002] # ALCHEMICAL SYMBOL FOR BORAX-3 -1F745 ; [*178B.0020.0002] # ALCHEMICAL SYMBOL FOR ALUM -1F746 ; [*178C.0020.0002] # ALCHEMICAL SYMBOL FOR OIL -1F747 ; [*178D.0020.0002] # ALCHEMICAL SYMBOL FOR SPIRIT -1F748 ; [*178E.0020.0002] # ALCHEMICAL SYMBOL FOR TINCTURE -1F749 ; [*178F.0020.0002] # ALCHEMICAL SYMBOL FOR GUM -1F74A ; [*1790.0020.0002] # ALCHEMICAL SYMBOL FOR WAX -1F74B ; [*1791.0020.0002] # ALCHEMICAL SYMBOL FOR POWDER -1F74C ; [*1792.0020.0002] # ALCHEMICAL SYMBOL FOR CALX -1F74D ; [*1793.0020.0002] # ALCHEMICAL SYMBOL FOR TUTTY -1F74E ; [*1794.0020.0002] # ALCHEMICAL SYMBOL FOR CAPUT MORTUUM -1F74F ; [*1795.0020.0002] # ALCHEMICAL SYMBOL FOR SCEPTER OF JOVE -1F750 ; [*1796.0020.0002] # ALCHEMICAL SYMBOL FOR CADUCEUS -1F751 ; [*1797.0020.0002] # ALCHEMICAL SYMBOL FOR TRIDENT -1F752 ; [*1798.0020.0002] # ALCHEMICAL SYMBOL FOR STARRED TRIDENT -1F753 ; [*1799.0020.0002] # ALCHEMICAL SYMBOL FOR LODESTONE -1F754 ; [*179A.0020.0002] # ALCHEMICAL SYMBOL FOR SOAP -1F755 ; [*179B.0020.0002] # ALCHEMICAL SYMBOL FOR URINE -1F756 ; [*179C.0020.0002] # ALCHEMICAL SYMBOL FOR HORSE DUNG -1F757 ; [*179D.0020.0002] # ALCHEMICAL SYMBOL FOR ASHES -1F758 ; [*179E.0020.0002] # ALCHEMICAL SYMBOL FOR POT ASHES -1F759 ; [*179F.0020.0002] # ALCHEMICAL SYMBOL FOR BRICK -1F75A ; [*17A0.0020.0002] # ALCHEMICAL SYMBOL FOR POWDERED BRICK -1F75B ; [*17A1.0020.0002] # ALCHEMICAL SYMBOL FOR AMALGAM -1F75C ; [*17A2.0020.0002] # ALCHEMICAL SYMBOL FOR STRATUM SUPER STRATUM -1F75D ; [*17A3.0020.0002] # ALCHEMICAL SYMBOL FOR STRATUM SUPER STRATUM-2 -1F75E ; [*17A4.0020.0002] # ALCHEMICAL SYMBOL FOR SUBLIMATION -1F75F ; [*17A5.0020.0002] # ALCHEMICAL SYMBOL FOR PRECIPITATE -1F760 ; [*17A6.0020.0002] # ALCHEMICAL SYMBOL FOR DISTILL -1F761 ; [*17A7.0020.0002] # ALCHEMICAL SYMBOL FOR DISSOLVE -1F762 ; [*17A8.0020.0002] # ALCHEMICAL SYMBOL FOR DISSOLVE-2 -1F763 ; [*17A9.0020.0002] # ALCHEMICAL SYMBOL FOR PURIFY -1F764 ; [*17AA.0020.0002] # ALCHEMICAL SYMBOL FOR PUTREFACTION -1F765 ; [*17AB.0020.0002] # ALCHEMICAL SYMBOL FOR CRUCIBLE -1F766 ; [*17AC.0020.0002] # ALCHEMICAL SYMBOL FOR CRUCIBLE-2 -1F767 ; [*17AD.0020.0002] # ALCHEMICAL SYMBOL FOR CRUCIBLE-3 -1F768 ; [*17AE.0020.0002] # ALCHEMICAL SYMBOL FOR CRUCIBLE-4 -1F769 ; [*17AF.0020.0002] # ALCHEMICAL SYMBOL FOR CRUCIBLE-5 -1F76A ; [*17B0.0020.0002] # ALCHEMICAL SYMBOL FOR ALEMBIC -1F76B ; [*17B1.0020.0002] # ALCHEMICAL SYMBOL FOR BATH OF MARY -1F76C ; [*17B2.0020.0002] # ALCHEMICAL SYMBOL FOR BATH OF VAPOURS -1F76D ; [*17B3.0020.0002] # ALCHEMICAL SYMBOL FOR RETORT -1F76E ; [*17B4.0020.0002] # ALCHEMICAL SYMBOL FOR HOUR -1F76F ; [*17B5.0020.0002] # ALCHEMICAL SYMBOL FOR NIGHT -1F770 ; [*17B6.0020.0002] # ALCHEMICAL SYMBOL FOR DAY-NIGHT -1F771 ; [*17B7.0020.0002] # ALCHEMICAL SYMBOL FOR MONTH -1F772 ; [*17B8.0020.0002] # ALCHEMICAL SYMBOL FOR HALF DRAM -1F773 ; [*17B9.0020.0002] # ALCHEMICAL SYMBOL FOR HALF OUNCE -1F780 ; [*17BA.0020.0002] # BLACK LEFT-POINTING ISOSCELES RIGHT TRIANGLE -1F781 ; [*17BB.0020.0002] # BLACK UP-POINTING ISOSCELES RIGHT TRIANGLE -1F782 ; [*17BC.0020.0002] # BLACK RIGHT-POINTING ISOSCELES RIGHT TRIANGLE -1F783 ; [*17BD.0020.0002] # BLACK DOWN-POINTING ISOSCELES RIGHT TRIANGLE -1F784 ; [*17BE.0020.0002] # BLACK SLIGHTLY SMALL CIRCLE -1F785 ; [*17BF.0020.0002] # MEDIUM BOLD WHITE CIRCLE -1F786 ; [*17C0.0020.0002] # BOLD WHITE CIRCLE -1F787 ; [*17C1.0020.0002] # HEAVY WHITE CIRCLE -1F788 ; [*17C2.0020.0002] # VERY HEAVY WHITE CIRCLE -1F789 ; [*17C3.0020.0002] # EXTREMELY HEAVY WHITE CIRCLE -1F78A ; [*17C4.0020.0002] # WHITE CIRCLE CONTAINING BLACK SMALL CIRCLE -1F78B ; [*17C5.0020.0002] # ROUND TARGET -1F78C ; [*17C6.0020.0002] # BLACK TINY SQUARE -1F78D ; [*17C7.0020.0002] # BLACK SLIGHTLY SMALL SQUARE -1F78E ; [*17C8.0020.0002] # LIGHT WHITE SQUARE -1F78F ; [*17C9.0020.0002] # MEDIUM WHITE SQUARE -1F790 ; [*17CA.0020.0002] # BOLD WHITE SQUARE -1F791 ; [*17CB.0020.0002] # HEAVY WHITE SQUARE -1F792 ; [*17CC.0020.0002] # VERY HEAVY WHITE SQUARE -1F793 ; [*17CD.0020.0002] # EXTREMELY HEAVY WHITE SQUARE -1F794 ; [*17CE.0020.0002] # WHITE SQUARE CONTAINING BLACK VERY SMALL SQUARE -1F795 ; [*17CF.0020.0002] # WHITE SQUARE CONTAINING BLACK MEDIUM SQUARE -1F796 ; [*17D0.0020.0002] # SQUARE TARGET -1F797 ; [*17D1.0020.0002] # BLACK TINY DIAMOND -1F798 ; [*17D2.0020.0002] # BLACK VERY SMALL DIAMOND -1F799 ; [*17D3.0020.0002] # BLACK MEDIUM SMALL DIAMOND -1F79A ; [*17D4.0020.0002] # WHITE DIAMOND CONTAINING BLACK VERY SMALL DIAMOND -1F79B ; [*17D5.0020.0002] # WHITE DIAMOND CONTAINING BLACK MEDIUM DIAMOND -1F79C ; [*17D6.0020.0002] # DIAMOND TARGET -1F79D ; [*17D7.0020.0002] # BLACK TINY LOZENGE -1F79E ; [*17D8.0020.0002] # BLACK VERY SMALL LOZENGE -1F79F ; [*17D9.0020.0002] # BLACK MEDIUM SMALL LOZENGE -1F7A0 ; [*17DA.0020.0002] # WHITE LOZENGE CONTAINING BLACK SMALL LOZENGE -1F7A1 ; [*17DB.0020.0002] # THIN GREEK CROSS -1F7A2 ; [*17DC.0020.0002] # LIGHT GREEK CROSS -1F7A3 ; [*17DD.0020.0002] # MEDIUM GREEK CROSS -1F7A4 ; [*17DE.0020.0002] # BOLD GREEK CROSS -1F7A5 ; [*17DF.0020.0002] # VERY BOLD GREEK CROSS -1F7A6 ; [*17E0.0020.0002] # VERY HEAVY GREEK CROSS -1F7A7 ; [*17E1.0020.0002] # EXTREMELY HEAVY GREEK CROSS -1F7A8 ; [*17E2.0020.0002] # THIN SALTIRE -1F7A9 ; [*17E3.0020.0002] # LIGHT SALTIRE -1F7AA ; [*17E4.0020.0002] # MEDIUM SALTIRE -1F7AB ; [*17E5.0020.0002] # BOLD SALTIRE -1F7AC ; [*17E6.0020.0002] # HEAVY SALTIRE -1F7AD ; [*17E7.0020.0002] # VERY HEAVY SALTIRE -1F7AE ; [*17E8.0020.0002] # EXTREMELY HEAVY SALTIRE -1F7AF ; [*17E9.0020.0002] # LIGHT FIVE SPOKED ASTERISK -1F7B0 ; [*17EA.0020.0002] # MEDIUM FIVE SPOKED ASTERISK -1F7B1 ; [*17EB.0020.0002] # BOLD FIVE SPOKED ASTERISK -1F7B2 ; [*17EC.0020.0002] # HEAVY FIVE SPOKED ASTERISK -1F7B3 ; [*17ED.0020.0002] # VERY HEAVY FIVE SPOKED ASTERISK -1F7B4 ; [*17EE.0020.0002] # EXTREMELY HEAVY FIVE SPOKED ASTERISK -1F7B5 ; [*17EF.0020.0002] # LIGHT SIX SPOKED ASTERISK -1F7B6 ; [*17F0.0020.0002] # MEDIUM SIX SPOKED ASTERISK -1F7B7 ; [*17F1.0020.0002] # BOLD SIX SPOKED ASTERISK -1F7B8 ; [*17F2.0020.0002] # HEAVY SIX SPOKED ASTERISK -1F7B9 ; [*17F3.0020.0002] # VERY HEAVY SIX SPOKED ASTERISK -1F7BA ; [*17F4.0020.0002] # EXTREMELY HEAVY SIX SPOKED ASTERISK -1F7BB ; [*17F5.0020.0002] # LIGHT EIGHT SPOKED ASTERISK -1F7BC ; [*17F6.0020.0002] # MEDIUM EIGHT SPOKED ASTERISK -1F7BD ; [*17F7.0020.0002] # BOLD EIGHT SPOKED ASTERISK -1F7BE ; [*17F8.0020.0002] # HEAVY EIGHT SPOKED ASTERISK -1F7BF ; [*17F9.0020.0002] # VERY HEAVY EIGHT SPOKED ASTERISK -1F7C0 ; [*17FA.0020.0002] # LIGHT THREE POINTED BLACK STAR -1F7C1 ; [*17FB.0020.0002] # MEDIUM THREE POINTED BLACK STAR -1F7C2 ; [*17FC.0020.0002] # THREE POINTED BLACK STAR -1F7C3 ; [*17FD.0020.0002] # MEDIUM THREE POINTED PINWHEEL STAR -1F7C4 ; [*17FE.0020.0002] # LIGHT FOUR POINTED BLACK STAR -1F7C5 ; [*17FF.0020.0002] # MEDIUM FOUR POINTED BLACK STAR -1F7C6 ; [*1800.0020.0002] # FOUR POINTED BLACK STAR -1F7C7 ; [*1801.0020.0002] # MEDIUM FOUR POINTED PINWHEEL STAR -1F7C8 ; [*1802.0020.0002] # REVERSE LIGHT FOUR POINTED PINWHEEL STAR -1F7C9 ; [*1803.0020.0002] # LIGHT FIVE POINTED BLACK STAR -1F7CA ; [*1804.0020.0002] # HEAVY FIVE POINTED BLACK STAR -1F7CB ; [*1805.0020.0002] # MEDIUM SIX POINTED BLACK STAR -1F7CC ; [*1806.0020.0002] # HEAVY SIX POINTED BLACK STAR -1F7CD ; [*1807.0020.0002] # SIX POINTED PINWHEEL STAR -1F7CE ; [*1808.0020.0002] # MEDIUM EIGHT POINTED BLACK STAR -1F7CF ; [*1809.0020.0002] # HEAVY EIGHT POINTED BLACK STAR -1F7D0 ; [*180A.0020.0002] # VERY HEAVY EIGHT POINTED BLACK STAR -1F7D1 ; [*180B.0020.0002] # HEAVY EIGHT POINTED PINWHEEL STAR -1F7D2 ; [*180C.0020.0002] # LIGHT TWELVE POINTED BLACK STAR -1F7D3 ; [*180D.0020.0002] # HEAVY TWELVE POINTED BLACK STAR -1F7D4 ; [*180E.0020.0002] # HEAVY TWELVE POINTED PINWHEEL STAR -1F800 ; [*180F.0020.0002] # LEFTWARDS ARROW WITH SMALL TRIANGLE ARROWHEAD -1F801 ; [*1810.0020.0002] # UPWARDS ARROW WITH SMALL TRIANGLE ARROWHEAD -1F802 ; [*1811.0020.0002] # RIGHTWARDS ARROW WITH SMALL TRIANGLE ARROWHEAD -1F803 ; [*1812.0020.0002] # DOWNWARDS ARROW WITH SMALL TRIANGLE ARROWHEAD -1F804 ; [*1813.0020.0002] # LEFTWARDS ARROW WITH MEDIUM TRIANGLE ARROWHEAD -1F805 ; [*1814.0020.0002] # UPWARDS ARROW WITH MEDIUM TRIANGLE ARROWHEAD -1F806 ; [*1815.0020.0002] # RIGHTWARDS ARROW WITH MEDIUM TRIANGLE ARROWHEAD -1F807 ; [*1816.0020.0002] # DOWNWARDS ARROW WITH MEDIUM TRIANGLE ARROWHEAD -1F808 ; [*1817.0020.0002] # LEFTWARDS ARROW WITH LARGE TRIANGLE ARROWHEAD -1F809 ; [*1818.0020.0002] # UPWARDS ARROW WITH LARGE TRIANGLE ARROWHEAD -1F80A ; [*1819.0020.0002] # RIGHTWARDS ARROW WITH LARGE TRIANGLE ARROWHEAD -1F80B ; [*181A.0020.0002] # DOWNWARDS ARROW WITH LARGE TRIANGLE ARROWHEAD -1F810 ; [*181B.0020.0002] # LEFTWARDS ARROW WITH SMALL EQUILATERAL ARROWHEAD -1F811 ; [*181C.0020.0002] # UPWARDS ARROW WITH SMALL EQUILATERAL ARROWHEAD -1F812 ; [*181D.0020.0002] # RIGHTWARDS ARROW WITH SMALL EQUILATERAL ARROWHEAD -1F813 ; [*181E.0020.0002] # DOWNWARDS ARROW WITH SMALL EQUILATERAL ARROWHEAD -1F814 ; [*181F.0020.0002] # LEFTWARDS ARROW WITH EQUILATERAL ARROWHEAD -1F815 ; [*1820.0020.0002] # UPWARDS ARROW WITH EQUILATERAL ARROWHEAD -1F816 ; [*1821.0020.0002] # RIGHTWARDS ARROW WITH EQUILATERAL ARROWHEAD -1F817 ; [*1822.0020.0002] # DOWNWARDS ARROW WITH EQUILATERAL ARROWHEAD -1F818 ; [*1823.0020.0002] # HEAVY LEFTWARDS ARROW WITH EQUILATERAL ARROWHEAD -1F819 ; [*1824.0020.0002] # HEAVY UPWARDS ARROW WITH EQUILATERAL ARROWHEAD -1F81A ; [*1825.0020.0002] # HEAVY RIGHTWARDS ARROW WITH EQUILATERAL ARROWHEAD -1F81B ; [*1826.0020.0002] # HEAVY DOWNWARDS ARROW WITH EQUILATERAL ARROWHEAD -1F81C ; [*1827.0020.0002] # HEAVY LEFTWARDS ARROW WITH LARGE EQUILATERAL ARROWHEAD -1F81D ; [*1828.0020.0002] # HEAVY UPWARDS ARROW WITH LARGE EQUILATERAL ARROWHEAD -1F81E ; [*1829.0020.0002] # HEAVY RIGHTWARDS ARROW WITH LARGE EQUILATERAL ARROWHEAD -1F81F ; [*182A.0020.0002] # HEAVY DOWNWARDS ARROW WITH LARGE EQUILATERAL ARROWHEAD -1F820 ; [*182B.0020.0002] # LEFTWARDS TRIANGLE-HEADED ARROW WITH NARROW SHAFT -1F821 ; [*182C.0020.0002] # UPWARDS TRIANGLE-HEADED ARROW WITH NARROW SHAFT -1F822 ; [*182D.0020.0002] # RIGHTWARDS TRIANGLE-HEADED ARROW WITH NARROW SHAFT -1F823 ; [*182E.0020.0002] # DOWNWARDS TRIANGLE-HEADED ARROW WITH NARROW SHAFT -1F824 ; [*182F.0020.0002] # LEFTWARDS TRIANGLE-HEADED ARROW WITH MEDIUM SHAFT -1F825 ; [*1830.0020.0002] # UPWARDS TRIANGLE-HEADED ARROW WITH MEDIUM SHAFT -1F826 ; [*1831.0020.0002] # RIGHTWARDS TRIANGLE-HEADED ARROW WITH MEDIUM SHAFT -1F827 ; [*1832.0020.0002] # DOWNWARDS TRIANGLE-HEADED ARROW WITH MEDIUM SHAFT -1F828 ; [*1833.0020.0002] # LEFTWARDS TRIANGLE-HEADED ARROW WITH BOLD SHAFT -1F829 ; [*1834.0020.0002] # UPWARDS TRIANGLE-HEADED ARROW WITH BOLD SHAFT -1F82A ; [*1835.0020.0002] # RIGHTWARDS TRIANGLE-HEADED ARROW WITH BOLD SHAFT -1F82B ; [*1836.0020.0002] # DOWNWARDS TRIANGLE-HEADED ARROW WITH BOLD SHAFT -1F82C ; [*1837.0020.0002] # LEFTWARDS TRIANGLE-HEADED ARROW WITH HEAVY SHAFT -1F82D ; [*1838.0020.0002] # UPWARDS TRIANGLE-HEADED ARROW WITH HEAVY SHAFT -1F82E ; [*1839.0020.0002] # RIGHTWARDS TRIANGLE-HEADED ARROW WITH HEAVY SHAFT -1F82F ; [*183A.0020.0002] # DOWNWARDS TRIANGLE-HEADED ARROW WITH HEAVY SHAFT -1F830 ; [*183B.0020.0002] # LEFTWARDS TRIANGLE-HEADED ARROW WITH VERY HEAVY SHAFT -1F831 ; [*183C.0020.0002] # UPWARDS TRIANGLE-HEADED ARROW WITH VERY HEAVY SHAFT -1F832 ; [*183D.0020.0002] # RIGHTWARDS TRIANGLE-HEADED ARROW WITH VERY HEAVY SHAFT -1F833 ; [*183E.0020.0002] # DOWNWARDS TRIANGLE-HEADED ARROW WITH VERY HEAVY SHAFT -1F834 ; [*183F.0020.0002] # LEFTWARDS FINGER-POST ARROW -1F835 ; [*1840.0020.0002] # UPWARDS FINGER-POST ARROW -1F836 ; [*1841.0020.0002] # RIGHTWARDS FINGER-POST ARROW -1F837 ; [*1842.0020.0002] # DOWNWARDS FINGER-POST ARROW -1F838 ; [*1843.0020.0002] # LEFTWARDS SQUARED ARROW -1F839 ; [*1844.0020.0002] # UPWARDS SQUARED ARROW -1F83A ; [*1845.0020.0002] # RIGHTWARDS SQUARED ARROW -1F83B ; [*1846.0020.0002] # DOWNWARDS SQUARED ARROW -1F83C ; [*1847.0020.0002] # LEFTWARDS COMPRESSED ARROW -1F83D ; [*1848.0020.0002] # UPWARDS COMPRESSED ARROW -1F83E ; [*1849.0020.0002] # RIGHTWARDS COMPRESSED ARROW -1F83F ; [*184A.0020.0002] # DOWNWARDS COMPRESSED ARROW -1F840 ; [*184B.0020.0002] # LEFTWARDS HEAVY COMPRESSED ARROW -1F841 ; [*184C.0020.0002] # UPWARDS HEAVY COMPRESSED ARROW -1F842 ; [*184D.0020.0002] # RIGHTWARDS HEAVY COMPRESSED ARROW -1F843 ; [*184E.0020.0002] # DOWNWARDS HEAVY COMPRESSED ARROW -1F844 ; [*184F.0020.0002] # LEFTWARDS HEAVY ARROW -1F845 ; [*1850.0020.0002] # UPWARDS HEAVY ARROW -1F846 ; [*1851.0020.0002] # RIGHTWARDS HEAVY ARROW -1F847 ; [*1852.0020.0002] # DOWNWARDS HEAVY ARROW -1F850 ; [*1853.0020.0002] # LEFTWARDS SANS-SERIF ARROW -1F851 ; [*1854.0020.0002] # UPWARDS SANS-SERIF ARROW -1F852 ; [*1855.0020.0002] # RIGHTWARDS SANS-SERIF ARROW -1F853 ; [*1856.0020.0002] # DOWNWARDS SANS-SERIF ARROW -1F854 ; [*1857.0020.0002] # NORTH WEST SANS-SERIF ARROW -1F855 ; [*1858.0020.0002] # NORTH EAST SANS-SERIF ARROW -1F856 ; [*1859.0020.0002] # SOUTH EAST SANS-SERIF ARROW -1F857 ; [*185A.0020.0002] # SOUTH WEST SANS-SERIF ARROW -1F858 ; [*185B.0020.0002] # LEFT RIGHT SANS-SERIF ARROW -1F859 ; [*185C.0020.0002] # UP DOWN SANS-SERIF ARROW -1F860 ; [*185D.0020.0002] # WIDE-HEADED LEFTWARDS LIGHT BARB ARROW -1F861 ; [*185E.0020.0002] # WIDE-HEADED UPWARDS LIGHT BARB ARROW -1F862 ; [*185F.0020.0002] # WIDE-HEADED RIGHTWARDS LIGHT BARB ARROW -1F863 ; [*1860.0020.0002] # WIDE-HEADED DOWNWARDS LIGHT BARB ARROW -1F864 ; [*1861.0020.0002] # WIDE-HEADED NORTH WEST LIGHT BARB ARROW -1F865 ; [*1862.0020.0002] # WIDE-HEADED NORTH EAST LIGHT BARB ARROW -1F866 ; [*1863.0020.0002] # WIDE-HEADED SOUTH EAST LIGHT BARB ARROW -1F867 ; [*1864.0020.0002] # WIDE-HEADED SOUTH WEST LIGHT BARB ARROW -1F868 ; [*1865.0020.0002] # WIDE-HEADED LEFTWARDS BARB ARROW -1F869 ; [*1866.0020.0002] # WIDE-HEADED UPWARDS BARB ARROW -1F86A ; [*1867.0020.0002] # WIDE-HEADED RIGHTWARDS BARB ARROW -1F86B ; [*1868.0020.0002] # WIDE-HEADED DOWNWARDS BARB ARROW -1F86C ; [*1869.0020.0002] # WIDE-HEADED NORTH WEST BARB ARROW -1F86D ; [*186A.0020.0002] # WIDE-HEADED NORTH EAST BARB ARROW -1F86E ; [*186B.0020.0002] # WIDE-HEADED SOUTH EAST BARB ARROW -1F86F ; [*186C.0020.0002] # WIDE-HEADED SOUTH WEST BARB ARROW -1F870 ; [*186D.0020.0002] # WIDE-HEADED LEFTWARDS MEDIUM BARB ARROW -1F871 ; [*186E.0020.0002] # WIDE-HEADED UPWARDS MEDIUM BARB ARROW -1F872 ; [*186F.0020.0002] # WIDE-HEADED RIGHTWARDS MEDIUM BARB ARROW -1F873 ; [*1870.0020.0002] # WIDE-HEADED DOWNWARDS MEDIUM BARB ARROW -1F874 ; [*1871.0020.0002] # WIDE-HEADED NORTH WEST MEDIUM BARB ARROW -1F875 ; [*1872.0020.0002] # WIDE-HEADED NORTH EAST MEDIUM BARB ARROW -1F876 ; [*1873.0020.0002] # WIDE-HEADED SOUTH EAST MEDIUM BARB ARROW -1F877 ; [*1874.0020.0002] # WIDE-HEADED SOUTH WEST MEDIUM BARB ARROW -1F878 ; [*1875.0020.0002] # WIDE-HEADED LEFTWARDS HEAVY BARB ARROW -1F879 ; [*1876.0020.0002] # WIDE-HEADED UPWARDS HEAVY BARB ARROW -1F87A ; [*1877.0020.0002] # WIDE-HEADED RIGHTWARDS HEAVY BARB ARROW -1F87B ; [*1878.0020.0002] # WIDE-HEADED DOWNWARDS HEAVY BARB ARROW -1F87C ; [*1879.0020.0002] # WIDE-HEADED NORTH WEST HEAVY BARB ARROW -1F87D ; [*187A.0020.0002] # WIDE-HEADED NORTH EAST HEAVY BARB ARROW -1F87E ; [*187B.0020.0002] # WIDE-HEADED SOUTH EAST HEAVY BARB ARROW -1F87F ; [*187C.0020.0002] # WIDE-HEADED SOUTH WEST HEAVY BARB ARROW -1F880 ; [*187D.0020.0002] # WIDE-HEADED LEFTWARDS VERY HEAVY BARB ARROW -1F881 ; [*187E.0020.0002] # WIDE-HEADED UPWARDS VERY HEAVY BARB ARROW -1F882 ; [*187F.0020.0002] # WIDE-HEADED RIGHTWARDS VERY HEAVY BARB ARROW -1F883 ; [*1880.0020.0002] # WIDE-HEADED DOWNWARDS VERY HEAVY BARB ARROW -1F884 ; [*1881.0020.0002] # WIDE-HEADED NORTH WEST VERY HEAVY BARB ARROW -1F885 ; [*1882.0020.0002] # WIDE-HEADED NORTH EAST VERY HEAVY BARB ARROW -1F886 ; [*1883.0020.0002] # WIDE-HEADED SOUTH EAST VERY HEAVY BARB ARROW -1F887 ; [*1884.0020.0002] # WIDE-HEADED SOUTH WEST VERY HEAVY BARB ARROW -1F890 ; [*1885.0020.0002] # LEFTWARDS TRIANGLE ARROWHEAD -1F891 ; [*1886.0020.0002] # UPWARDS TRIANGLE ARROWHEAD -1F892 ; [*1887.0020.0002] # RIGHTWARDS TRIANGLE ARROWHEAD -1F893 ; [*1888.0020.0002] # DOWNWARDS TRIANGLE ARROWHEAD -1F894 ; [*1889.0020.0002] # LEFTWARDS WHITE ARROW WITHIN TRIANGLE ARROWHEAD -1F895 ; [*188A.0020.0002] # UPWARDS WHITE ARROW WITHIN TRIANGLE ARROWHEAD -1F896 ; [*188B.0020.0002] # RIGHTWARDS WHITE ARROW WITHIN TRIANGLE ARROWHEAD -1F897 ; [*188C.0020.0002] # DOWNWARDS WHITE ARROW WITHIN TRIANGLE ARROWHEAD -1F898 ; [*188D.0020.0002] # LEFTWARDS ARROW WITH NOTCHED TAIL -1F899 ; [*188E.0020.0002] # UPWARDS ARROW WITH NOTCHED TAIL -1F89A ; [*188F.0020.0002] # RIGHTWARDS ARROW WITH NOTCHED TAIL -1F89B ; [*1890.0020.0002] # DOWNWARDS ARROW WITH NOTCHED TAIL -1F89C ; [*1891.0020.0002] # HEAVY ARROW SHAFT WIDTH ONE -1F89D ; [*1892.0020.0002] # HEAVY ARROW SHAFT WIDTH TWO THIRDS -1F89E ; [*1893.0020.0002] # HEAVY ARROW SHAFT WIDTH ONE HALF -1F89F ; [*1894.0020.0002] # HEAVY ARROW SHAFT WIDTH ONE THIRD -1F8A0 ; [*1895.0020.0002] # LEFTWARDS BOTTOM-SHADED WHITE ARROW -1F8A1 ; [*1896.0020.0002] # RIGHTWARDS BOTTOM SHADED WHITE ARROW -1F8A2 ; [*1897.0020.0002] # LEFTWARDS TOP SHADED WHITE ARROW -1F8A3 ; [*1898.0020.0002] # RIGHTWARDS TOP SHADED WHITE ARROW -1F8A4 ; [*1899.0020.0002] # LEFTWARDS LEFT-SHADED WHITE ARROW -1F8A5 ; [*189A.0020.0002] # RIGHTWARDS RIGHT-SHADED WHITE ARROW -1F8A6 ; [*189B.0020.0002] # LEFTWARDS RIGHT-SHADED WHITE ARROW -1F8A7 ; [*189C.0020.0002] # RIGHTWARDS LEFT-SHADED WHITE ARROW -1F8A8 ; [*189D.0020.0002] # LEFTWARDS BACK-TILTED SHADOWED WHITE ARROW -1F8A9 ; [*189E.0020.0002] # RIGHTWARDS BACK-TILTED SHADOWED WHITE ARROW -1F8AA ; [*189F.0020.0002] # LEFTWARDS FRONT-TILTED SHADOWED WHITE ARROW -1F8AB ; [*18A0.0020.0002] # RIGHTWARDS FRONT-TILTED SHADOWED WHITE ARROW -1F8AC ; [*18A1.0020.0002] # WHITE ARROW SHAFT WIDTH ONE -1F8AD ; [*18A2.0020.0002] # WHITE ARROW SHAFT WIDTH TWO THIRDS -1F900 ; [*15C7.0020.0002] # CIRCLED CROSS FORMEE WITH FOUR DOTS -1F901 ; [*15C8.0020.0002] # CIRCLED CROSS FORMEE WITH TWO DOTS -1F902 ; [*15C9.0020.0002] # CIRCLED CROSS FORMEE -1F903 ; [*15CA.0020.0002] # LEFT HALF CIRCLE WITH FOUR DOTS -1F904 ; [*15CB.0020.0002] # LEFT HALF CIRCLE WITH THREE DOTS -1F905 ; [*15CC.0020.0002] # LEFT HALF CIRCLE WITH TWO DOTS -1F906 ; [*15CD.0020.0002] # LEFT HALF CIRCLE WITH DOT -1F907 ; [*15CE.0020.0002] # LEFT HALF CIRCLE -1F908 ; [*15CF.0020.0002] # DOWNWARD FACING HOOK -1F909 ; [*15D0.0020.0002] # DOWNWARD FACING NOTCHED HOOK -1F90A ; [*15D1.0020.0002] # DOWNWARD FACING HOOK WITH DOT -1F90B ; [*15D2.0020.0002] # DOWNWARD FACING NOTCHED HOOK WITH DOT -1F910 ; [*15D3.0020.0002] # ZIPPER-MOUTH FACE -1F911 ; [*15D4.0020.0002] # MONEY-MOUTH FACE -1F912 ; [*15D5.0020.0002] # FACE WITH THERMOMETER -1F913 ; [*15D6.0020.0002] # NERD FACE -1F914 ; [*15D7.0020.0002] # THINKING FACE -1F915 ; [*15D8.0020.0002] # FACE WITH HEAD-BANDAGE -1F916 ; [*15D9.0020.0002] # ROBOT FACE -1F917 ; [*15DA.0020.0002] # HUGGING FACE -1F918 ; [*15DB.0020.0002] # SIGN OF THE HORNS -1F919 ; [*15DC.0020.0002] # CALL ME HAND -1F91A ; [*15DD.0020.0002] # RAISED BACK OF HAND -1F91B ; [*15DE.0020.0002] # LEFT-FACING FIST -1F91C ; [*15DF.0020.0002] # RIGHT-FACING FIST -1F91D ; [*15E0.0020.0002] # HANDSHAKE -1F91E ; [*15E1.0020.0002] # HAND WITH INDEX AND MIDDLE FINGERS CROSSED -1F91F ; [*15E2.0020.0002] # I LOVE YOU HAND SIGN -1F920 ; [*15E3.0020.0002] # FACE WITH COWBOY HAT -1F921 ; [*15E4.0020.0002] # CLOWN FACE -1F922 ; [*15E5.0020.0002] # NAUSEATED FACE -1F923 ; [*15E6.0020.0002] # ROLLING ON THE FLOOR LAUGHING -1F924 ; [*15E7.0020.0002] # DROOLING FACE -1F925 ; [*15E8.0020.0002] # LYING FACE -1F926 ; [*15E9.0020.0002] # FACE PALM -1F927 ; [*15EA.0020.0002] # SNEEZING FACE -1F928 ; [*15EB.0020.0002] # FACE WITH ONE EYEBROW RAISED -1F929 ; [*15EC.0020.0002] # GRINNING FACE WITH STAR EYES -1F92A ; [*15ED.0020.0002] # GRINNING FACE WITH ONE LARGE AND ONE SMALL EYE -1F92B ; [*15EE.0020.0002] # FACE WITH FINGER COVERING CLOSED LIPS -1F92C ; [*15EF.0020.0002] # SERIOUS FACE WITH SYMBOLS COVERING MOUTH -1F92D ; [*15F0.0020.0002] # SMILING FACE WITH SMILING EYES AND HAND COVERING MOUTH -1F92E ; [*15F1.0020.0002] # FACE WITH OPEN MOUTH VOMITING -1F92F ; [*15F2.0020.0002] # SHOCKED FACE WITH EXPLODING HEAD -1F930 ; [*15F3.0020.0002] # PREGNANT WOMAN -1F931 ; [*15F4.0020.0002] # BREAST-FEEDING -1F932 ; [*15F5.0020.0002] # PALMS UP TOGETHER -1F933 ; [*15F6.0020.0002] # SELFIE -1F934 ; [*15F7.0020.0002] # PRINCE -1F935 ; [*15F8.0020.0002] # MAN IN TUXEDO -1F936 ; [*15F9.0020.0002] # MOTHER CHRISTMAS -1F937 ; [*15FA.0020.0002] # SHRUG -1F938 ; [*15FB.0020.0002] # PERSON DOING CARTWHEEL -1F939 ; [*15FC.0020.0002] # JUGGLING -1F93A ; [*15FD.0020.0002] # FENCER -1F93B ; [*15FE.0020.0002] # MODERN PENTATHLON -1F93C ; [*15FF.0020.0002] # WRESTLERS -1F93D ; [*1600.0020.0002] # WATER POLO -1F93E ; [*1601.0020.0002] # HANDBALL -1F940 ; [*1602.0020.0002] # WILTED FLOWER -1F941 ; [*1603.0020.0002] # DRUM WITH DRUMSTICKS -1F942 ; [*1604.0020.0002] # CLINKING GLASSES -1F943 ; [*1605.0020.0002] # TUMBLER GLASS -1F944 ; [*1606.0020.0002] # SPOON -1F945 ; [*1607.0020.0002] # GOAL NET -1F946 ; [*1608.0020.0002] # RIFLE -1F947 ; [*1609.0020.0002] # FIRST PLACE MEDAL -1F948 ; [*160A.0020.0002] # SECOND PLACE MEDAL -1F949 ; [*160B.0020.0002] # THIRD PLACE MEDAL -1F94A ; [*160C.0020.0002] # BOXING GLOVE -1F94B ; [*160D.0020.0002] # MARTIAL ARTS UNIFORM -1F94C ; [*160E.0020.0002] # CURLING STONE -1F950 ; [*160F.0020.0002] # CROISSANT -1F951 ; [*1610.0020.0002] # AVOCADO -1F952 ; [*1611.0020.0002] # CUCUMBER -1F953 ; [*1612.0020.0002] # BACON -1F954 ; [*1613.0020.0002] # POTATO -1F955 ; [*1614.0020.0002] # CARROT -1F956 ; [*1615.0020.0002] # BAGUETTE BREAD -1F957 ; [*1616.0020.0002] # GREEN SALAD -1F958 ; [*1617.0020.0002] # SHALLOW PAN OF FOOD -1F959 ; [*1618.0020.0002] # STUFFED FLATBREAD -1F95A ; [*1619.0020.0002] # EGG -1F95B ; [*161A.0020.0002] # GLASS OF MILK -1F95C ; [*161B.0020.0002] # PEANUTS -1F95D ; [*161C.0020.0002] # KIWIFRUIT -1F95E ; [*161D.0020.0002] # PANCAKES -1F95F ; [*161E.0020.0002] # DUMPLING -1F960 ; [*161F.0020.0002] # FORTUNE COOKIE -1F961 ; [*1620.0020.0002] # TAKEOUT BOX -1F962 ; [*1621.0020.0002] # CHOPSTICKS -1F963 ; [*1622.0020.0002] # BOWL WITH SPOON -1F964 ; [*1623.0020.0002] # CUP WITH STRAW -1F965 ; [*1624.0020.0002] # COCONUT -1F966 ; [*1625.0020.0002] # BROCCOLI -1F967 ; [*1626.0020.0002] # PIE -1F968 ; [*1627.0020.0002] # PRETZEL -1F969 ; [*1628.0020.0002] # CUT OF MEAT -1F96A ; [*1629.0020.0002] # SANDWICH -1F96B ; [*162A.0020.0002] # CANNED FOOD -1F980 ; [*162B.0020.0002] # CRAB -1F981 ; [*162C.0020.0002] # LION FACE -1F982 ; [*162D.0020.0002] # SCORPION -1F983 ; [*162E.0020.0002] # TURKEY -1F984 ; [*162F.0020.0002] # UNICORN FACE -1F985 ; [*1630.0020.0002] # EAGLE -1F986 ; [*1631.0020.0002] # DUCK -1F987 ; [*1632.0020.0002] # BAT -1F988 ; [*1633.0020.0002] # SHARK -1F989 ; [*1634.0020.0002] # OWL -1F98A ; [*1635.0020.0002] # FOX FACE -1F98B ; [*1636.0020.0002] # BUTTERFLY -1F98C ; [*1637.0020.0002] # DEER -1F98D ; [*1638.0020.0002] # GORILLA -1F98E ; [*1639.0020.0002] # LIZARD -1F98F ; [*163A.0020.0002] # RHINOCEROS -1F990 ; [*163B.0020.0002] # SHRIMP -1F991 ; [*163C.0020.0002] # SQUID -1F992 ; [*163D.0020.0002] # GIRAFFE FACE -1F993 ; [*163E.0020.0002] # ZEBRA FACE -1F994 ; [*163F.0020.0002] # HEDGEHOG -1F995 ; [*1640.0020.0002] # SAUROPOD -1F996 ; [*1641.0020.0002] # T-REX -1F997 ; [*1642.0020.0002] # CRICKET -1F9C0 ; [*1643.0020.0002] # CHEESE WEDGE -1F9D0 ; [*1644.0020.0002] # FACE WITH MONOCLE -1F9D1 ; [*1645.0020.0002] # ADULT -1F9D2 ; [*1646.0020.0002] # CHILD -1F9D3 ; [*1647.0020.0002] # OLDER ADULT -1F9D4 ; [*1648.0020.0002] # BEARDED PERSON -1F9D5 ; [*1649.0020.0002] # PERSON WITH HEADSCARF -1F9D6 ; [*164A.0020.0002] # PERSON IN STEAMY ROOM -1F9D7 ; [*164B.0020.0002] # PERSON CLIMBING -1F9D8 ; [*164C.0020.0002] # PERSON IN LOTUS POSITION -1F9D9 ; [*164D.0020.0002] # MAGE -1F9DA ; [*164E.0020.0002] # FAIRY -1F9DB ; [*164F.0020.0002] # VAMPIRE -1F9DC ; [*1650.0020.0002] # MERPERSON -1F9DD ; [*1651.0020.0002] # ELF -1F9DE ; [*1652.0020.0002] # GENIE -1F9DF ; [*1653.0020.0002] # ZOMBIE -1F9E0 ; [*1654.0020.0002] # BRAIN -1F9E1 ; [*1655.0020.0002] # ORANGE HEART -1F9E2 ; [*1656.0020.0002] # BILLED CAP -1F9E3 ; [*1657.0020.0002] # SCARF -1F9E4 ; [*1658.0020.0002] # GLOVES -1F9E5 ; [*1659.0020.0002] # COAT -1F9E6 ; [*165A.0020.0002] # SOCKS +1E95E ; [*026C.0020.0002] # ADLAM INITIAL EXCLAMATION MARK +1E95F ; [*027B.0020.0002] # ADLAM INITIAL QUESTION MARK +1EC7A ; [*1E9C.0020.0002] # INDIC SIYAQ NUMBER TEN +1EC7B ; [*1E9D.0020.0002] # INDIC SIYAQ NUMBER TWENTY +1EC7C ; [*1E9E.0020.0002] # INDIC SIYAQ NUMBER THIRTY +1EC7D ; [*1E9F.0020.0002] # INDIC SIYAQ NUMBER FORTY +1EC7E ; [*1EA0.0020.0002] # INDIC SIYAQ NUMBER FIFTY +1EC7F ; [*1EA1.0020.0002] # INDIC SIYAQ NUMBER SIXTY +1EC80 ; [*1EA2.0020.0002] # INDIC SIYAQ NUMBER SEVENTY +1EC81 ; [*1EA3.0020.0002] # INDIC SIYAQ NUMBER EIGHTY +1EC82 ; [*1EA4.0020.0002] # INDIC SIYAQ NUMBER NINETY +1EC83 ; [*1EA5.0020.0002] # INDIC SIYAQ NUMBER ONE HUNDRED +1EC84 ; [*1EA6.0020.0002] # INDIC SIYAQ NUMBER TWO HUNDRED +1EC85 ; [*1EA7.0020.0002] # INDIC SIYAQ NUMBER THREE HUNDRED +1EC86 ; [*1EA8.0020.0002] # INDIC SIYAQ NUMBER FOUR HUNDRED +1EC87 ; [*1EA9.0020.0002] # INDIC SIYAQ NUMBER FIVE HUNDRED +1EC88 ; [*1EAA.0020.0002] # INDIC SIYAQ NUMBER SIX HUNDRED +1EC89 ; [*1EAB.0020.0002] # INDIC SIYAQ NUMBER SEVEN HUNDRED +1EC8A ; [*1EAC.0020.0002] # INDIC SIYAQ NUMBER EIGHT HUNDRED +1EC8B ; [*1EAD.0020.0002] # INDIC SIYAQ NUMBER NINE HUNDRED +1EC8C ; [*1EAE.0020.0002] # INDIC SIYAQ NUMBER ONE THOUSAND +1EC8D ; [*1EAF.0020.0002] # INDIC SIYAQ NUMBER TWO THOUSAND +1EC8E ; [*1EB0.0020.0002] # INDIC SIYAQ NUMBER THREE THOUSAND +1EC8F ; [*1EB1.0020.0002] # INDIC SIYAQ NUMBER FOUR THOUSAND +1EC90 ; [*1EB2.0020.0002] # INDIC SIYAQ NUMBER FIVE THOUSAND +1EC91 ; [*1EB3.0020.0002] # INDIC SIYAQ NUMBER SIX THOUSAND +1EC92 ; [*1EB4.0020.0002] # INDIC SIYAQ NUMBER SEVEN THOUSAND +1EC93 ; [*1EB5.0020.0002] # INDIC SIYAQ NUMBER EIGHT THOUSAND +1EC94 ; [*1EB6.0020.0002] # INDIC SIYAQ NUMBER NINE THOUSAND +1EC95 ; [*1EB7.0020.0002] # INDIC SIYAQ NUMBER TEN THOUSAND +1EC96 ; [*1EB8.0020.0002] # INDIC SIYAQ NUMBER TWENTY THOUSAND +1EC97 ; [*1EB9.0020.0002] # INDIC SIYAQ NUMBER THIRTY THOUSAND +1EC98 ; [*1EBA.0020.0002] # INDIC SIYAQ NUMBER FORTY THOUSAND +1EC99 ; [*1EBB.0020.0002] # INDIC SIYAQ NUMBER FIFTY THOUSAND +1EC9A ; [*1EBC.0020.0002] # INDIC SIYAQ NUMBER SIXTY THOUSAND +1EC9B ; [*1EBD.0020.0002] # INDIC SIYAQ NUMBER SEVENTY THOUSAND +1EC9C ; [*1EBE.0020.0002] # INDIC SIYAQ NUMBER EIGHTY THOUSAND +1EC9D ; [*1EBF.0020.0002] # INDIC SIYAQ NUMBER NINETY THOUSAND +1EC9E ; [*1EC0.0020.0002] # INDIC SIYAQ NUMBER LAKH +1EC9F ; [*1EC1.0020.0002] # INDIC SIYAQ NUMBER LAKHAN +1ECA0 ; [*1EC2.0020.0002] # INDIC SIYAQ LAKH MARK +1ECA1 ; [*1EC3.0020.0002] # INDIC SIYAQ NUMBER KAROR +1ECA2 ; [*1EC4.0020.0002] # INDIC SIYAQ NUMBER KARORAN +1ECAC ; [*1315.0020.0002] # INDIC SIYAQ PLACEHOLDER +1ECAD ; [*1EC5.0020.0002] # INDIC SIYAQ FRACTION ONE QUARTER +1ECAE ; [*1EC6.0020.0002] # INDIC SIYAQ FRACTION ONE HALF +1ECAF ; [*1EC7.0020.0002] # INDIC SIYAQ FRACTION THREE QUARTERS +1ECB3 ; [*1EC8.0020.0002] # INDIC SIYAQ NUMBER ALTERNATE TEN THOUSAND +1ECB4 ; [*1EC9.0020.0002] # INDIC SIYAQ ALTERNATE LAKH MARK +1ED0A ; [*1ECA.0020.0002] # OTTOMAN SIYAQ NUMBER TEN +1ED0B ; [*1ECB.0020.0002] # OTTOMAN SIYAQ NUMBER TWENTY +1ED0C ; [*1ECC.0020.0002] # OTTOMAN SIYAQ NUMBER THIRTY +1ED0D ; [*1ECD.0020.0002] # OTTOMAN SIYAQ NUMBER FORTY +1ED0E ; [*1ECE.0020.0002] # OTTOMAN SIYAQ NUMBER FIFTY +1ED0F ; [*1ECF.0020.0002] # OTTOMAN SIYAQ NUMBER SIXTY +1ED10 ; [*1ED0.0020.0002] # OTTOMAN SIYAQ NUMBER SEVENTY +1ED11 ; [*1ED1.0020.0002] # OTTOMAN SIYAQ NUMBER EIGHTY +1ED12 ; [*1ED2.0020.0002] # OTTOMAN SIYAQ NUMBER NINETY +1ED13 ; [*1ED3.0020.0002] # OTTOMAN SIYAQ NUMBER ONE HUNDRED +1ED14 ; [*1ED4.0020.0002] # OTTOMAN SIYAQ NUMBER TWO HUNDRED +1ED15 ; [*1ED5.0020.0002] # OTTOMAN SIYAQ NUMBER THREE HUNDRED +1ED16 ; [*1ED6.0020.0002] # OTTOMAN SIYAQ NUMBER FOUR HUNDRED +1ED17 ; [*1ED7.0020.0002] # OTTOMAN SIYAQ NUMBER FIVE HUNDRED +1ED18 ; [*1ED8.0020.0002] # OTTOMAN SIYAQ NUMBER SIX HUNDRED +1ED19 ; [*1ED9.0020.0002] # OTTOMAN SIYAQ NUMBER SEVEN HUNDRED +1ED1A ; [*1EDA.0020.0002] # OTTOMAN SIYAQ NUMBER EIGHT HUNDRED +1ED1B ; [*1EDB.0020.0002] # OTTOMAN SIYAQ NUMBER NINE HUNDRED +1ED1C ; [*1EDC.0020.0002] # OTTOMAN SIYAQ NUMBER ONE THOUSAND +1ED1D ; [*1EDD.0020.0002] # OTTOMAN SIYAQ NUMBER TWO THOUSAND +1ED1E ; [*1EDE.0020.0002] # OTTOMAN SIYAQ NUMBER THREE THOUSAND +1ED1F ; [*1EDF.0020.0002] # OTTOMAN SIYAQ NUMBER FOUR THOUSAND +1ED20 ; [*1EE0.0020.0002] # OTTOMAN SIYAQ NUMBER FIVE THOUSAND +1ED21 ; [*1EE1.0020.0002] # OTTOMAN SIYAQ NUMBER SIX THOUSAND +1ED22 ; [*1EE2.0020.0002] # OTTOMAN SIYAQ NUMBER SEVEN THOUSAND +1ED23 ; [*1EE3.0020.0002] # OTTOMAN SIYAQ NUMBER EIGHT THOUSAND +1ED24 ; [*1EE4.0020.0002] # OTTOMAN SIYAQ NUMBER NINE THOUSAND +1ED25 ; [*1EE5.0020.0002] # OTTOMAN SIYAQ NUMBER TEN THOUSAND +1ED26 ; [*1EE6.0020.0002] # OTTOMAN SIYAQ NUMBER TWENTY THOUSAND +1ED27 ; [*1EE7.0020.0002] # OTTOMAN SIYAQ NUMBER THIRTY THOUSAND +1ED28 ; [*1EE8.0020.0002] # OTTOMAN SIYAQ NUMBER FORTY THOUSAND +1ED29 ; [*1EE9.0020.0002] # OTTOMAN SIYAQ NUMBER FIFTY THOUSAND +1ED2A ; [*1EEA.0020.0002] # OTTOMAN SIYAQ NUMBER SIXTY THOUSAND +1ED2B ; [*1EEB.0020.0002] # OTTOMAN SIYAQ NUMBER SEVENTY THOUSAND +1ED2C ; [*1EEC.0020.0002] # OTTOMAN SIYAQ NUMBER EIGHTY THOUSAND +1ED2D ; [*1EED.0020.0002] # OTTOMAN SIYAQ NUMBER NINETY THOUSAND +1ED2E ; [*1316.0020.0002] # OTTOMAN SIYAQ MARRATAN +1ED37 ; [*1EEE.0020.0002] # OTTOMAN SIYAQ ALTERNATE NUMBER TEN +1ED38 ; [*1EEF.0020.0002] # OTTOMAN SIYAQ ALTERNATE NUMBER FOUR HUNDRED +1ED39 ; [*1EF0.0020.0002] # OTTOMAN SIYAQ ALTERNATE NUMBER SIX HUNDRED +1ED3A ; [*1EF1.0020.0002] # OTTOMAN SIYAQ ALTERNATE NUMBER TWO THOUSAND +1ED3B ; [*1EF2.0020.0002] # OTTOMAN SIYAQ ALTERNATE NUMBER TEN THOUSAND +1ED3C ; [*1EF3.0020.0002] # OTTOMAN SIYAQ FRACTION ONE HALF +1ED3D ; [*1EF4.0020.0002] # OTTOMAN SIYAQ FRACTION ONE SIXTH +1EEF0 ; [*052F.0020.0002] # ARABIC MATHEMATICAL OPERATOR MEEM WITH HAH WITH TATWEEL +1EEF1 ; [*0530.0020.0002] # ARABIC MATHEMATICAL OPERATOR HAH WITH DAL +1F000 ; [*1317.0020.0002] # MAHJONG TILE EAST WIND +1F001 ; [*1318.0020.0002] # MAHJONG TILE SOUTH WIND +1F002 ; [*1319.0020.0002] # MAHJONG TILE WEST WIND +1F003 ; [*131A.0020.0002] # MAHJONG TILE NORTH WIND +1F004 ; [*131B.0020.0002] # MAHJONG TILE RED DRAGON +1F005 ; [*131C.0020.0002] # MAHJONG TILE GREEN DRAGON +1F006 ; [*131D.0020.0002] # MAHJONG TILE WHITE DRAGON +1F007 ; [*131E.0020.0002] # MAHJONG TILE ONE OF CHARACTERS +1F008 ; [*131F.0020.0002] # MAHJONG TILE TWO OF CHARACTERS +1F009 ; [*1320.0020.0002] # MAHJONG TILE THREE OF CHARACTERS +1F00A ; [*1321.0020.0002] # MAHJONG TILE FOUR OF CHARACTERS +1F00B ; [*1322.0020.0002] # MAHJONG TILE FIVE OF CHARACTERS +1F00C ; [*1323.0020.0002] # MAHJONG TILE SIX OF CHARACTERS +1F00D ; [*1324.0020.0002] # MAHJONG TILE SEVEN OF CHARACTERS +1F00E ; [*1325.0020.0002] # MAHJONG TILE EIGHT OF CHARACTERS +1F00F ; [*1326.0020.0002] # MAHJONG TILE NINE OF CHARACTERS +1F010 ; [*1327.0020.0002] # MAHJONG TILE ONE OF BAMBOOS +1F011 ; [*1328.0020.0002] # MAHJONG TILE TWO OF BAMBOOS +1F012 ; [*1329.0020.0002] # MAHJONG TILE THREE OF BAMBOOS +1F013 ; [*132A.0020.0002] # MAHJONG TILE FOUR OF BAMBOOS +1F014 ; [*132B.0020.0002] # MAHJONG TILE FIVE OF BAMBOOS +1F015 ; [*132C.0020.0002] # MAHJONG TILE SIX OF BAMBOOS +1F016 ; [*132D.0020.0002] # MAHJONG TILE SEVEN OF BAMBOOS +1F017 ; [*132E.0020.0002] # MAHJONG TILE EIGHT OF BAMBOOS +1F018 ; [*132F.0020.0002] # MAHJONG TILE NINE OF BAMBOOS +1F019 ; [*1330.0020.0002] # MAHJONG TILE ONE OF CIRCLES +1F01A ; [*1331.0020.0002] # MAHJONG TILE TWO OF CIRCLES +1F01B ; [*1332.0020.0002] # MAHJONG TILE THREE OF CIRCLES +1F01C ; [*1333.0020.0002] # MAHJONG TILE FOUR OF CIRCLES +1F01D ; [*1334.0020.0002] # MAHJONG TILE FIVE OF CIRCLES +1F01E ; [*1335.0020.0002] # MAHJONG TILE SIX OF CIRCLES +1F01F ; [*1336.0020.0002] # MAHJONG TILE SEVEN OF CIRCLES +1F020 ; [*1337.0020.0002] # MAHJONG TILE EIGHT OF CIRCLES +1F021 ; [*1338.0020.0002] # MAHJONG TILE NINE OF CIRCLES +1F022 ; [*1339.0020.0002] # MAHJONG TILE PLUM +1F023 ; [*133A.0020.0002] # MAHJONG TILE ORCHID +1F024 ; [*133B.0020.0002] # MAHJONG TILE BAMBOO +1F025 ; [*133C.0020.0002] # MAHJONG TILE CHRYSANTHEMUM +1F026 ; [*133D.0020.0002] # MAHJONG TILE SPRING +1F027 ; [*133E.0020.0002] # MAHJONG TILE SUMMER +1F028 ; [*133F.0020.0002] # MAHJONG TILE AUTUMN +1F029 ; [*1340.0020.0002] # MAHJONG TILE WINTER +1F02A ; [*1341.0020.0002] # MAHJONG TILE JOKER +1F02B ; [*1342.0020.0002] # MAHJONG TILE BACK +1F030 ; [*1343.0020.0002] # DOMINO TILE HORIZONTAL BACK +1F031 ; [*1344.0020.0002] # DOMINO TILE HORIZONTAL-00-00 +1F032 ; [*1345.0020.0002] # DOMINO TILE HORIZONTAL-00-01 +1F033 ; [*1346.0020.0002] # DOMINO TILE HORIZONTAL-00-02 +1F034 ; [*1347.0020.0002] # DOMINO TILE HORIZONTAL-00-03 +1F035 ; [*1348.0020.0002] # DOMINO TILE HORIZONTAL-00-04 +1F036 ; [*1349.0020.0002] # DOMINO TILE HORIZONTAL-00-05 +1F037 ; [*134A.0020.0002] # DOMINO TILE HORIZONTAL-00-06 +1F038 ; [*134B.0020.0002] # DOMINO TILE HORIZONTAL-01-00 +1F039 ; [*134C.0020.0002] # DOMINO TILE HORIZONTAL-01-01 +1F03A ; [*134D.0020.0002] # DOMINO TILE HORIZONTAL-01-02 +1F03B ; [*134E.0020.0002] # DOMINO TILE HORIZONTAL-01-03 +1F03C ; [*134F.0020.0002] # DOMINO TILE HORIZONTAL-01-04 +1F03D ; [*1350.0020.0002] # DOMINO TILE HORIZONTAL-01-05 +1F03E ; [*1351.0020.0002] # DOMINO TILE HORIZONTAL-01-06 +1F03F ; [*1352.0020.0002] # DOMINO TILE HORIZONTAL-02-00 +1F040 ; [*1353.0020.0002] # DOMINO TILE HORIZONTAL-02-01 +1F041 ; [*1354.0020.0002] # DOMINO TILE HORIZONTAL-02-02 +1F042 ; [*1355.0020.0002] # DOMINO TILE HORIZONTAL-02-03 +1F043 ; [*1356.0020.0002] # DOMINO TILE HORIZONTAL-02-04 +1F044 ; [*1357.0020.0002] # DOMINO TILE HORIZONTAL-02-05 +1F045 ; [*1358.0020.0002] # DOMINO TILE HORIZONTAL-02-06 +1F046 ; [*1359.0020.0002] # DOMINO TILE HORIZONTAL-03-00 +1F047 ; [*135A.0020.0002] # DOMINO TILE HORIZONTAL-03-01 +1F048 ; [*135B.0020.0002] # DOMINO TILE HORIZONTAL-03-02 +1F049 ; [*135C.0020.0002] # DOMINO TILE HORIZONTAL-03-03 +1F04A ; [*135D.0020.0002] # DOMINO TILE HORIZONTAL-03-04 +1F04B ; [*135E.0020.0002] # DOMINO TILE HORIZONTAL-03-05 +1F04C ; [*135F.0020.0002] # DOMINO TILE HORIZONTAL-03-06 +1F04D ; [*1360.0020.0002] # DOMINO TILE HORIZONTAL-04-00 +1F04E ; [*1361.0020.0002] # DOMINO TILE HORIZONTAL-04-01 +1F04F ; [*1362.0020.0002] # DOMINO TILE HORIZONTAL-04-02 +1F050 ; [*1363.0020.0002] # DOMINO TILE HORIZONTAL-04-03 +1F051 ; [*1364.0020.0002] # DOMINO TILE HORIZONTAL-04-04 +1F052 ; [*1365.0020.0002] # DOMINO TILE HORIZONTAL-04-05 +1F053 ; [*1366.0020.0002] # DOMINO TILE HORIZONTAL-04-06 +1F054 ; [*1367.0020.0002] # DOMINO TILE HORIZONTAL-05-00 +1F055 ; [*1368.0020.0002] # DOMINO TILE HORIZONTAL-05-01 +1F056 ; [*1369.0020.0002] # DOMINO TILE HORIZONTAL-05-02 +1F057 ; [*136A.0020.0002] # DOMINO TILE HORIZONTAL-05-03 +1F058 ; [*136B.0020.0002] # DOMINO TILE HORIZONTAL-05-04 +1F059 ; [*136C.0020.0002] # DOMINO TILE HORIZONTAL-05-05 +1F05A ; [*136D.0020.0002] # DOMINO TILE HORIZONTAL-05-06 +1F05B ; [*136E.0020.0002] # DOMINO TILE HORIZONTAL-06-00 +1F05C ; [*136F.0020.0002] # DOMINO TILE HORIZONTAL-06-01 +1F05D ; [*1370.0020.0002] # DOMINO TILE HORIZONTAL-06-02 +1F05E ; [*1371.0020.0002] # DOMINO TILE HORIZONTAL-06-03 +1F05F ; [*1372.0020.0002] # DOMINO TILE HORIZONTAL-06-04 +1F060 ; [*1373.0020.0002] # DOMINO TILE HORIZONTAL-06-05 +1F061 ; [*1374.0020.0002] # DOMINO TILE HORIZONTAL-06-06 +1F062 ; [*1375.0020.0002] # DOMINO TILE VERTICAL BACK +1F063 ; [*1376.0020.0002] # DOMINO TILE VERTICAL-00-00 +1F064 ; [*1377.0020.0002] # DOMINO TILE VERTICAL-00-01 +1F065 ; [*1378.0020.0002] # DOMINO TILE VERTICAL-00-02 +1F066 ; [*1379.0020.0002] # DOMINO TILE VERTICAL-00-03 +1F067 ; [*137A.0020.0002] # DOMINO TILE VERTICAL-00-04 +1F068 ; [*137B.0020.0002] # DOMINO TILE VERTICAL-00-05 +1F069 ; [*137C.0020.0002] # DOMINO TILE VERTICAL-00-06 +1F06A ; [*137D.0020.0002] # DOMINO TILE VERTICAL-01-00 +1F06B ; [*137E.0020.0002] # DOMINO TILE VERTICAL-01-01 +1F06C ; [*137F.0020.0002] # DOMINO TILE VERTICAL-01-02 +1F06D ; [*1380.0020.0002] # DOMINO TILE VERTICAL-01-03 +1F06E ; [*1381.0020.0002] # DOMINO TILE VERTICAL-01-04 +1F06F ; [*1382.0020.0002] # DOMINO TILE VERTICAL-01-05 +1F070 ; [*1383.0020.0002] # DOMINO TILE VERTICAL-01-06 +1F071 ; [*1384.0020.0002] # DOMINO TILE VERTICAL-02-00 +1F072 ; [*1385.0020.0002] # DOMINO TILE VERTICAL-02-01 +1F073 ; [*1386.0020.0002] # DOMINO TILE VERTICAL-02-02 +1F074 ; [*1387.0020.0002] # DOMINO TILE VERTICAL-02-03 +1F075 ; [*1388.0020.0002] # DOMINO TILE VERTICAL-02-04 +1F076 ; [*1389.0020.0002] # DOMINO TILE VERTICAL-02-05 +1F077 ; [*138A.0020.0002] # DOMINO TILE VERTICAL-02-06 +1F078 ; [*138B.0020.0002] # DOMINO TILE VERTICAL-03-00 +1F079 ; [*138C.0020.0002] # DOMINO TILE VERTICAL-03-01 +1F07A ; [*138D.0020.0002] # DOMINO TILE VERTICAL-03-02 +1F07B ; [*138E.0020.0002] # DOMINO TILE VERTICAL-03-03 +1F07C ; [*138F.0020.0002] # DOMINO TILE VERTICAL-03-04 +1F07D ; [*1390.0020.0002] # DOMINO TILE VERTICAL-03-05 +1F07E ; [*1391.0020.0002] # DOMINO TILE VERTICAL-03-06 +1F07F ; [*1392.0020.0002] # DOMINO TILE VERTICAL-04-00 +1F080 ; [*1393.0020.0002] # DOMINO TILE VERTICAL-04-01 +1F081 ; [*1394.0020.0002] # DOMINO TILE VERTICAL-04-02 +1F082 ; [*1395.0020.0002] # DOMINO TILE VERTICAL-04-03 +1F083 ; [*1396.0020.0002] # DOMINO TILE VERTICAL-04-04 +1F084 ; [*1397.0020.0002] # DOMINO TILE VERTICAL-04-05 +1F085 ; [*1398.0020.0002] # DOMINO TILE VERTICAL-04-06 +1F086 ; [*1399.0020.0002] # DOMINO TILE VERTICAL-05-00 +1F087 ; [*139A.0020.0002] # DOMINO TILE VERTICAL-05-01 +1F088 ; [*139B.0020.0002] # DOMINO TILE VERTICAL-05-02 +1F089 ; [*139C.0020.0002] # DOMINO TILE VERTICAL-05-03 +1F08A ; [*139D.0020.0002] # DOMINO TILE VERTICAL-05-04 +1F08B ; [*139E.0020.0002] # DOMINO TILE VERTICAL-05-05 +1F08C ; [*139F.0020.0002] # DOMINO TILE VERTICAL-05-06 +1F08D ; [*13A0.0020.0002] # DOMINO TILE VERTICAL-06-00 +1F08E ; [*13A1.0020.0002] # DOMINO TILE VERTICAL-06-01 +1F08F ; [*13A2.0020.0002] # DOMINO TILE VERTICAL-06-02 +1F090 ; [*13A3.0020.0002] # DOMINO TILE VERTICAL-06-03 +1F091 ; [*13A4.0020.0002] # DOMINO TILE VERTICAL-06-04 +1F092 ; [*13A5.0020.0002] # DOMINO TILE VERTICAL-06-05 +1F093 ; [*13A6.0020.0002] # DOMINO TILE VERTICAL-06-06 +1F0A0 ; [*13A7.0020.0002] # PLAYING CARD BACK +1F0A1 ; [*13A8.0020.0002] # PLAYING CARD ACE OF SPADES +1F0A2 ; [*13A9.0020.0002] # PLAYING CARD TWO OF SPADES +1F0A3 ; [*13AA.0020.0002] # PLAYING CARD THREE OF SPADES +1F0A4 ; [*13AB.0020.0002] # PLAYING CARD FOUR OF SPADES +1F0A5 ; [*13AC.0020.0002] # PLAYING CARD FIVE OF SPADES +1F0A6 ; [*13AD.0020.0002] # PLAYING CARD SIX OF SPADES +1F0A7 ; [*13AE.0020.0002] # PLAYING CARD SEVEN OF SPADES +1F0A8 ; [*13AF.0020.0002] # PLAYING CARD EIGHT OF SPADES +1F0A9 ; [*13B0.0020.0002] # PLAYING CARD NINE OF SPADES +1F0AA ; [*13B1.0020.0002] # PLAYING CARD TEN OF SPADES +1F0AB ; [*13B2.0020.0002] # PLAYING CARD JACK OF SPADES +1F0AC ; [*13B3.0020.0002] # PLAYING CARD KNIGHT OF SPADES +1F0AD ; [*13B4.0020.0002] # PLAYING CARD QUEEN OF SPADES +1F0AE ; [*13B5.0020.0002] # PLAYING CARD KING OF SPADES +1F0B1 ; [*13B6.0020.0002] # PLAYING CARD ACE OF HEARTS +1F0B2 ; [*13B7.0020.0002] # PLAYING CARD TWO OF HEARTS +1F0B3 ; [*13B8.0020.0002] # PLAYING CARD THREE OF HEARTS +1F0B4 ; [*13B9.0020.0002] # PLAYING CARD FOUR OF HEARTS +1F0B5 ; [*13BA.0020.0002] # PLAYING CARD FIVE OF HEARTS +1F0B6 ; [*13BB.0020.0002] # PLAYING CARD SIX OF HEARTS +1F0B7 ; [*13BC.0020.0002] # PLAYING CARD SEVEN OF HEARTS +1F0B8 ; [*13BD.0020.0002] # PLAYING CARD EIGHT OF HEARTS +1F0B9 ; [*13BE.0020.0002] # PLAYING CARD NINE OF HEARTS +1F0BA ; [*13BF.0020.0002] # PLAYING CARD TEN OF HEARTS +1F0BB ; [*13C0.0020.0002] # PLAYING CARD JACK OF HEARTS +1F0BC ; [*13C1.0020.0002] # PLAYING CARD KNIGHT OF HEARTS +1F0BD ; [*13C2.0020.0002] # PLAYING CARD QUEEN OF HEARTS +1F0BE ; [*13C3.0020.0002] # PLAYING CARD KING OF HEARTS +1F0BF ; [*13C4.0020.0002] # PLAYING CARD RED JOKER +1F0C1 ; [*13C5.0020.0002] # PLAYING CARD ACE OF DIAMONDS +1F0C2 ; [*13C6.0020.0002] # PLAYING CARD TWO OF DIAMONDS +1F0C3 ; [*13C7.0020.0002] # PLAYING CARD THREE OF DIAMONDS +1F0C4 ; [*13C8.0020.0002] # PLAYING CARD FOUR OF DIAMONDS +1F0C5 ; [*13C9.0020.0002] # PLAYING CARD FIVE OF DIAMONDS +1F0C6 ; [*13CA.0020.0002] # PLAYING CARD SIX OF DIAMONDS +1F0C7 ; [*13CB.0020.0002] # PLAYING CARD SEVEN OF DIAMONDS +1F0C8 ; [*13CC.0020.0002] # PLAYING CARD EIGHT OF DIAMONDS +1F0C9 ; [*13CD.0020.0002] # PLAYING CARD NINE OF DIAMONDS +1F0CA ; [*13CE.0020.0002] # PLAYING CARD TEN OF DIAMONDS +1F0CB ; [*13CF.0020.0002] # PLAYING CARD JACK OF DIAMONDS +1F0CC ; [*13D0.0020.0002] # PLAYING CARD KNIGHT OF DIAMONDS +1F0CD ; [*13D1.0020.0002] # PLAYING CARD QUEEN OF DIAMONDS +1F0CE ; [*13D2.0020.0002] # PLAYING CARD KING OF DIAMONDS +1F0CF ; [*13D3.0020.0002] # PLAYING CARD BLACK JOKER +1F0D1 ; [*13D4.0020.0002] # PLAYING CARD ACE OF CLUBS +1F0D2 ; [*13D5.0020.0002] # PLAYING CARD TWO OF CLUBS +1F0D3 ; [*13D6.0020.0002] # PLAYING CARD THREE OF CLUBS +1F0D4 ; [*13D7.0020.0002] # PLAYING CARD FOUR OF CLUBS +1F0D5 ; [*13D8.0020.0002] # PLAYING CARD FIVE OF CLUBS +1F0D6 ; [*13D9.0020.0002] # PLAYING CARD SIX OF CLUBS +1F0D7 ; [*13DA.0020.0002] # PLAYING CARD SEVEN OF CLUBS +1F0D8 ; [*13DB.0020.0002] # PLAYING CARD EIGHT OF CLUBS +1F0D9 ; [*13DC.0020.0002] # PLAYING CARD NINE OF CLUBS +1F0DA ; [*13DD.0020.0002] # PLAYING CARD TEN OF CLUBS +1F0DB ; [*13DE.0020.0002] # PLAYING CARD JACK OF CLUBS +1F0DC ; [*13DF.0020.0002] # PLAYING CARD KNIGHT OF CLUBS +1F0DD ; [*13E0.0020.0002] # PLAYING CARD QUEEN OF CLUBS +1F0DE ; [*13E1.0020.0002] # PLAYING CARD KING OF CLUBS +1F0DF ; [*13E2.0020.0002] # PLAYING CARD WHITE JOKER +1F0E0 ; [*13E3.0020.0002] # PLAYING CARD FOOL +1F0E1 ; [*13E4.0020.0002] # PLAYING CARD TRUMP-1 +1F0E2 ; [*13E5.0020.0002] # PLAYING CARD TRUMP-2 +1F0E3 ; [*13E6.0020.0002] # PLAYING CARD TRUMP-3 +1F0E4 ; [*13E7.0020.0002] # PLAYING CARD TRUMP-4 +1F0E5 ; [*13E8.0020.0002] # PLAYING CARD TRUMP-5 +1F0E6 ; [*13E9.0020.0002] # PLAYING CARD TRUMP-6 +1F0E7 ; [*13EA.0020.0002] # PLAYING CARD TRUMP-7 +1F0E8 ; [*13EB.0020.0002] # PLAYING CARD TRUMP-8 +1F0E9 ; [*13EC.0020.0002] # PLAYING CARD TRUMP-9 +1F0EA ; [*13ED.0020.0002] # PLAYING CARD TRUMP-10 +1F0EB ; [*13EE.0020.0002] # PLAYING CARD TRUMP-11 +1F0EC ; [*13EF.0020.0002] # PLAYING CARD TRUMP-12 +1F0ED ; [*13F0.0020.0002] # PLAYING CARD TRUMP-13 +1F0EE ; [*13F1.0020.0002] # PLAYING CARD TRUMP-14 +1F0EF ; [*13F2.0020.0002] # PLAYING CARD TRUMP-15 +1F0F0 ; [*13F3.0020.0002] # PLAYING CARD TRUMP-16 +1F0F1 ; [*13F4.0020.0002] # PLAYING CARD TRUMP-17 +1F0F2 ; [*13F5.0020.0002] # PLAYING CARD TRUMP-18 +1F0F3 ; [*13F6.0020.0002] # PLAYING CARD TRUMP-19 +1F0F4 ; [*13F7.0020.0002] # PLAYING CARD TRUMP-20 +1F0F5 ; [*13F8.0020.0002] # PLAYING CARD TRUMP-21 +1F10D ; [*145B.0020.0002] # CIRCLED ZERO WITH SLASH +1F10E ; [*145C.0020.0002] # CIRCLED ANTICLOCKWISE ARROW +1F10F ; [*145D.0020.0002] # CIRCLED DOLLAR SIGN WITH OVERLAID BACKSLASH +1F12F ; [*05D3.0020.0002] # COPYLEFT SYMBOL +1F16D ; [*145E.0020.0002] # CIRCLED CC +1F16E ; [*145F.0020.0002] # CIRCLED C WITH OVERLAID BACKSLASH +1F16F ; [*1460.0020.0002] # CIRCLED HUMAN FIGURE +1F1AD ; [*05D5.0020.0002] # MASK WORK SYMBOL +1F1E6 ; [*0B22.0020.0002] # REGIONAL INDICATOR SYMBOL LETTER A +1F1E7 ; [*0B23.0020.0002] # REGIONAL INDICATOR SYMBOL LETTER B +1F1E8 ; [*0B24.0020.0002] # REGIONAL INDICATOR SYMBOL LETTER C +1F1E9 ; [*0B25.0020.0002] # REGIONAL INDICATOR SYMBOL LETTER D +1F1EA ; [*0B26.0020.0002] # REGIONAL INDICATOR SYMBOL LETTER E +1F1EB ; [*0B27.0020.0002] # REGIONAL INDICATOR SYMBOL LETTER F +1F1EC ; [*0B28.0020.0002] # REGIONAL INDICATOR SYMBOL LETTER G +1F1ED ; [*0B29.0020.0002] # REGIONAL INDICATOR SYMBOL LETTER H +1F1EE ; [*0B2A.0020.0002] # REGIONAL INDICATOR SYMBOL LETTER I +1F1EF ; [*0B2B.0020.0002] # REGIONAL INDICATOR SYMBOL LETTER J +1F1F0 ; [*0B2C.0020.0002] # REGIONAL INDICATOR SYMBOL LETTER K +1F1F1 ; [*0B2D.0020.0002] # REGIONAL INDICATOR SYMBOL LETTER L +1F1F2 ; [*0B2E.0020.0002] # REGIONAL INDICATOR SYMBOL LETTER M +1F1F3 ; [*0B2F.0020.0002] # REGIONAL INDICATOR SYMBOL LETTER N +1F1F4 ; [*0B30.0020.0002] # REGIONAL INDICATOR SYMBOL LETTER O +1F1F5 ; [*0B31.0020.0002] # REGIONAL INDICATOR SYMBOL LETTER P +1F1F6 ; [*0B32.0020.0002] # REGIONAL INDICATOR SYMBOL LETTER Q +1F1F7 ; [*0B33.0020.0002] # REGIONAL INDICATOR SYMBOL LETTER R +1F1F8 ; [*0B34.0020.0002] # REGIONAL INDICATOR SYMBOL LETTER S +1F1F9 ; [*0B35.0020.0002] # REGIONAL INDICATOR SYMBOL LETTER T +1F1FA ; [*0B36.0020.0002] # REGIONAL INDICATOR SYMBOL LETTER U +1F1FB ; [*0B37.0020.0002] # REGIONAL INDICATOR SYMBOL LETTER V +1F1FC ; [*0B38.0020.0002] # REGIONAL INDICATOR SYMBOL LETTER W +1F1FD ; [*0B39.0020.0002] # REGIONAL INDICATOR SYMBOL LETTER X +1F1FE ; [*0B3A.0020.0002] # REGIONAL INDICATOR SYMBOL LETTER Y +1F1FF ; [*0B3B.0020.0002] # REGIONAL INDICATOR SYMBOL LETTER Z +1F260 ; [*1461.0020.0002] # ROUNDED SYMBOL FOR FU +1F261 ; [*1462.0020.0002] # ROUNDED SYMBOL FOR LU +1F262 ; [*1463.0020.0002] # ROUNDED SYMBOL FOR SHOU +1F263 ; [*1464.0020.0002] # ROUNDED SYMBOL FOR XI +1F264 ; [*1465.0020.0002] # ROUNDED SYMBOL FOR SHUANGXI +1F265 ; [*1466.0020.0002] # ROUNDED SYMBOL FOR CAI +1F300 ; [*1467.0020.0002] # CYCLONE +1F301 ; [*1468.0020.0002] # FOGGY +1F302 ; [*1469.0020.0002] # CLOSED UMBRELLA +1F303 ; [*146A.0020.0002] # NIGHT WITH STARS +1F304 ; [*146B.0020.0002] # SUNRISE OVER MOUNTAINS +1F305 ; [*146C.0020.0002] # SUNRISE +1F306 ; [*146D.0020.0002] # CITYSCAPE AT DUSK +1F307 ; [*146E.0020.0002] # SUNSET OVER BUILDINGS +1F308 ; [*146F.0020.0002] # RAINBOW +1F309 ; [*1470.0020.0002] # BRIDGE AT NIGHT +1F30A ; [*1471.0020.0002] # WATER WAVE +1F30B ; [*1472.0020.0002] # VOLCANO +1F30C ; [*1473.0020.0002] # MILKY WAY +1F30D ; [*1474.0020.0002] # EARTH GLOBE EUROPE-AFRICA +1F30E ; [*1475.0020.0002] # EARTH GLOBE AMERICAS +1F30F ; [*1476.0020.0002] # EARTH GLOBE ASIA-AUSTRALIA +1F310 ; [*1477.0020.0002] # GLOBE WITH MERIDIANS +1F311 ; [*1478.0020.0002] # NEW MOON SYMBOL +1F312 ; [*1479.0020.0002] # WAXING CRESCENT MOON SYMBOL +1F313 ; [*147A.0020.0002] # FIRST QUARTER MOON SYMBOL +1F314 ; [*147B.0020.0002] # WAXING GIBBOUS MOON SYMBOL +1F315 ; [*147C.0020.0002] # FULL MOON SYMBOL +1F316 ; [*147D.0020.0002] # WANING GIBBOUS MOON SYMBOL +1F317 ; [*147E.0020.0002] # LAST QUARTER MOON SYMBOL +1F318 ; [*147F.0020.0002] # WANING CRESCENT MOON SYMBOL +1F319 ; [*1480.0020.0002] # CRESCENT MOON +1F31A ; [*1481.0020.0002] # NEW MOON WITH FACE +1F31B ; [*1482.0020.0002] # FIRST QUARTER MOON WITH FACE +1F31C ; [*1483.0020.0002] # LAST QUARTER MOON WITH FACE +1F31D ; [*1484.0020.0002] # FULL MOON WITH FACE +1F31E ; [*1485.0020.0002] # SUN WITH FACE +1F31F ; [*1486.0020.0002] # GLOWING STAR +1F320 ; [*1487.0020.0002] # SHOOTING STAR +1F321 ; [*1488.0020.0002] # THERMOMETER +1F322 ; [*1489.0020.0002] # BLACK DROPLET +1F323 ; [*148A.0020.0002] # WHITE SUN +1F324 ; [*148B.0020.0002] # WHITE SUN WITH SMALL CLOUD +1F325 ; [*148C.0020.0002] # WHITE SUN BEHIND CLOUD +1F326 ; [*148D.0020.0002] # WHITE SUN BEHIND CLOUD WITH RAIN +1F327 ; [*148E.0020.0002] # CLOUD WITH RAIN +1F328 ; [*148F.0020.0002] # CLOUD WITH SNOW +1F329 ; [*1490.0020.0002] # CLOUD WITH LIGHTNING +1F32A ; [*1491.0020.0002] # CLOUD WITH TORNADO +1F32B ; [*1492.0020.0002] # FOG +1F32C ; [*1493.0020.0002] # WIND BLOWING FACE +1F32D ; [*1494.0020.0002] # HOT DOG +1F32E ; [*1495.0020.0002] # TACO +1F32F ; [*1496.0020.0002] # BURRITO +1F330 ; [*1497.0020.0002] # CHESTNUT +1F331 ; [*1498.0020.0002] # SEEDLING +1F332 ; [*1499.0020.0002] # EVERGREEN TREE +1F333 ; [*149A.0020.0002] # DECIDUOUS TREE +1F334 ; [*149B.0020.0002] # PALM TREE +1F335 ; [*149C.0020.0002] # CACTUS +1F336 ; [*149D.0020.0002] # HOT PEPPER +1F337 ; [*149E.0020.0002] # TULIP +1F338 ; [*149F.0020.0002] # CHERRY BLOSSOM +1F339 ; [*14A0.0020.0002] # ROSE +1F33A ; [*14A1.0020.0002] # HIBISCUS +1F33B ; [*14A2.0020.0002] # SUNFLOWER +1F33C ; [*14A3.0020.0002] # BLOSSOM +1F33D ; [*14A4.0020.0002] # EAR OF MAIZE +1F33E ; [*14A5.0020.0002] # EAR OF RICE +1F33F ; [*14A6.0020.0002] # HERB +1F340 ; [*14A7.0020.0002] # FOUR LEAF CLOVER +1F341 ; [*14A8.0020.0002] # MAPLE LEAF +1F342 ; [*14A9.0020.0002] # FALLEN LEAF +1F343 ; [*14AA.0020.0002] # LEAF FLUTTERING IN WIND +1F344 ; [*14AB.0020.0002] # MUSHROOM +1F345 ; [*14AC.0020.0002] # TOMATO +1F346 ; [*14AD.0020.0002] # AUBERGINE +1F347 ; [*14AE.0020.0002] # GRAPES +1F348 ; [*14AF.0020.0002] # MELON +1F349 ; [*14B0.0020.0002] # WATERMELON +1F34A ; [*14B1.0020.0002] # TANGERINE +1F34B ; [*14B2.0020.0002] # LEMON +1F34C ; [*14B3.0020.0002] # BANANA +1F34D ; [*14B4.0020.0002] # PINEAPPLE +1F34E ; [*14B5.0020.0002] # RED APPLE +1F34F ; [*14B6.0020.0002] # GREEN APPLE +1F350 ; [*14B7.0020.0002] # PEAR +1F351 ; [*14B8.0020.0002] # PEACH +1F352 ; [*14B9.0020.0002] # CHERRIES +1F353 ; [*14BA.0020.0002] # STRAWBERRY +1F354 ; [*14BB.0020.0002] # HAMBURGER +1F355 ; [*14BC.0020.0002] # SLICE OF PIZZA +1F356 ; [*14BD.0020.0002] # MEAT ON BONE +1F357 ; [*14BE.0020.0002] # POULTRY LEG +1F358 ; [*14BF.0020.0002] # RICE CRACKER +1F359 ; [*14C0.0020.0002] # RICE BALL +1F35A ; [*14C1.0020.0002] # COOKED RICE +1F35B ; [*14C2.0020.0002] # CURRY AND RICE +1F35C ; [*14C3.0020.0002] # STEAMING BOWL +1F35D ; [*14C4.0020.0002] # SPAGHETTI +1F35E ; [*14C5.0020.0002] # BREAD +1F35F ; [*14C6.0020.0002] # FRENCH FRIES +1F360 ; [*14C7.0020.0002] # ROASTED SWEET POTATO +1F361 ; [*14C8.0020.0002] # DANGO +1F362 ; [*14C9.0020.0002] # ODEN +1F363 ; [*14CA.0020.0002] # SUSHI +1F364 ; [*14CB.0020.0002] # FRIED SHRIMP +1F365 ; [*14CC.0020.0002] # FISH CAKE WITH SWIRL DESIGN +1F366 ; [*14CD.0020.0002] # SOFT ICE CREAM +1F367 ; [*14CE.0020.0002] # SHAVED ICE +1F368 ; [*14CF.0020.0002] # ICE CREAM +1F369 ; [*14D0.0020.0002] # DOUGHNUT +1F36A ; [*14D1.0020.0002] # COOKIE +1F36B ; [*14D2.0020.0002] # CHOCOLATE BAR +1F36C ; [*14D3.0020.0002] # CANDY +1F36D ; [*14D4.0020.0002] # LOLLIPOP +1F36E ; [*14D5.0020.0002] # CUSTARD +1F36F ; [*14D6.0020.0002] # HONEY POT +1F370 ; [*14D7.0020.0002] # SHORTCAKE +1F371 ; [*14D8.0020.0002] # BENTO BOX +1F372 ; [*14D9.0020.0002] # POT OF FOOD +1F373 ; [*14DA.0020.0002] # COOKING +1F374 ; [*14DB.0020.0002] # FORK AND KNIFE +1F375 ; [*14DC.0020.0002] # TEACUP WITHOUT HANDLE +1F376 ; [*14DD.0020.0002] # SAKE BOTTLE AND CUP +1F377 ; [*14DE.0020.0002] # WINE GLASS +1F378 ; [*14DF.0020.0002] # COCKTAIL GLASS +1F379 ; [*14E0.0020.0002] # TROPICAL DRINK +1F37A ; [*14E1.0020.0002] # BEER MUG +1F37B ; [*14E2.0020.0002] # CLINKING BEER MUGS +1F37C ; [*14E3.0020.0002] # BABY BOTTLE +1F37D ; [*14E4.0020.0002] # FORK AND KNIFE WITH PLATE +1F37E ; [*14E5.0020.0002] # BOTTLE WITH POPPING CORK +1F37F ; [*14E6.0020.0002] # POPCORN +1F380 ; [*14E7.0020.0002] # RIBBON +1F381 ; [*14E8.0020.0002] # WRAPPED PRESENT +1F382 ; [*14E9.0020.0002] # BIRTHDAY CAKE +1F383 ; [*14EA.0020.0002] # JACK-O-LANTERN +1F384 ; [*14EB.0020.0002] # CHRISTMAS TREE +1F385 ; [*14EC.0020.0002] # FATHER CHRISTMAS +1F386 ; [*14ED.0020.0002] # FIREWORKS +1F387 ; [*14EE.0020.0002] # FIREWORK SPARKLER +1F388 ; [*14EF.0020.0002] # BALLOON +1F389 ; [*14F0.0020.0002] # PARTY POPPER +1F38A ; [*14F1.0020.0002] # CONFETTI BALL +1F38B ; [*14F2.0020.0002] # TANABATA TREE +1F38C ; [*14F3.0020.0002] # CROSSED FLAGS +1F38D ; [*14F4.0020.0002] # PINE DECORATION +1F38E ; [*14F5.0020.0002] # JAPANESE DOLLS +1F38F ; [*14F6.0020.0002] # CARP STREAMER +1F390 ; [*14F7.0020.0002] # WIND CHIME +1F391 ; [*14F8.0020.0002] # MOON VIEWING CEREMONY +1F392 ; [*14F9.0020.0002] # SCHOOL SATCHEL +1F393 ; [*14FA.0020.0002] # GRADUATION CAP +1F394 ; [*14FB.0020.0002] # HEART WITH TIP ON THE LEFT +1F395 ; [*14FC.0020.0002] # BOUQUET OF FLOWERS +1F396 ; [*14FD.0020.0002] # MILITARY MEDAL +1F397 ; [*14FE.0020.0002] # REMINDER RIBBON +1F398 ; [*14FF.0020.0002] # MUSICAL KEYBOARD WITH JACKS +1F399 ; [*1500.0020.0002] # STUDIO MICROPHONE +1F39A ; [*1501.0020.0002] # LEVEL SLIDER +1F39B ; [*1502.0020.0002] # CONTROL KNOBS +1F39C ; [*1503.0020.0002] # BEAMED ASCENDING MUSICAL NOTES +1F39D ; [*1504.0020.0002] # BEAMED DESCENDING MUSICAL NOTES +1F39E ; [*1505.0020.0002] # FILM FRAMES +1F39F ; [*1506.0020.0002] # ADMISSION TICKETS +1F3A0 ; [*1507.0020.0002] # CAROUSEL HORSE +1F3A1 ; [*1508.0020.0002] # FERRIS WHEEL +1F3A2 ; [*1509.0020.0002] # ROLLER COASTER +1F3A3 ; [*150A.0020.0002] # FISHING POLE AND FISH +1F3A4 ; [*150B.0020.0002] # MICROPHONE +1F3A5 ; [*150C.0020.0002] # MOVIE CAMERA +1F3A6 ; [*150D.0020.0002] # CINEMA +1F3A7 ; [*150E.0020.0002] # HEADPHONE +1F3A8 ; [*150F.0020.0002] # ARTIST PALETTE +1F3A9 ; [*1510.0020.0002] # TOP HAT +1F3AA ; [*1511.0020.0002] # CIRCUS TENT +1F3AB ; [*1512.0020.0002] # TICKET +1F3AC ; [*1513.0020.0002] # CLAPPER BOARD +1F3AD ; [*1514.0020.0002] # PERFORMING ARTS +1F3AE ; [*1515.0020.0002] # VIDEO GAME +1F3AF ; [*1516.0020.0002] # DIRECT HIT +1F3B0 ; [*1517.0020.0002] # SLOT MACHINE +1F3B1 ; [*1518.0020.0002] # BILLIARDS +1F3B2 ; [*1519.0020.0002] # GAME DIE +1F3B3 ; [*151A.0020.0002] # BOWLING +1F3B4 ; [*151B.0020.0002] # FLOWER PLAYING CARDS +1F3B5 ; [*151C.0020.0002] # MUSICAL NOTE +1F3B6 ; [*151D.0020.0002] # MULTIPLE MUSICAL NOTES +1F3B7 ; [*151E.0020.0002] # SAXOPHONE +1F3B8 ; [*151F.0020.0002] # GUITAR +1F3B9 ; [*1520.0020.0002] # MUSICAL KEYBOARD +1F3BA ; [*1521.0020.0002] # TRUMPET +1F3BB ; [*1522.0020.0002] # VIOLIN +1F3BC ; [*1523.0020.0002] # MUSICAL SCORE +1F3BD ; [*1524.0020.0002] # RUNNING SHIRT WITH SASH +1F3BE ; [*1525.0020.0002] # TENNIS RACQUET AND BALL +1F3BF ; [*1526.0020.0002] # SKI AND SKI BOOT +1F3C0 ; [*1527.0020.0002] # BASKETBALL AND HOOP +1F3C1 ; [*1528.0020.0002] # CHEQUERED FLAG +1F3C2 ; [*1529.0020.0002] # SNOWBOARDER +1F3C3 ; [*152A.0020.0002] # RUNNER +1F3C4 ; [*152B.0020.0002] # SURFER +1F3C5 ; [*152C.0020.0002] # SPORTS MEDAL +1F3C6 ; [*152D.0020.0002] # TROPHY +1F3C7 ; [*152E.0020.0002] # HORSE RACING +1F3C8 ; [*152F.0020.0002] # AMERICAN FOOTBALL +1F3C9 ; [*1530.0020.0002] # RUGBY FOOTBALL +1F3CA ; [*1531.0020.0002] # SWIMMER +1F3CB ; [*1532.0020.0002] # WEIGHT LIFTER +1F3CC ; [*1533.0020.0002] # GOLFER +1F3CD ; [*1534.0020.0002] # RACING MOTORCYCLE +1F3CE ; [*1535.0020.0002] # RACING CAR +1F3CF ; [*1536.0020.0002] # CRICKET BAT AND BALL +1F3D0 ; [*1537.0020.0002] # VOLLEYBALL +1F3D1 ; [*1538.0020.0002] # FIELD HOCKEY STICK AND BALL +1F3D2 ; [*1539.0020.0002] # ICE HOCKEY STICK AND PUCK +1F3D3 ; [*153A.0020.0002] # TABLE TENNIS PADDLE AND BALL +1F3D4 ; [*153B.0020.0002] # SNOW CAPPED MOUNTAIN +1F3D5 ; [*153C.0020.0002] # CAMPING +1F3D6 ; [*153D.0020.0002] # BEACH WITH UMBRELLA +1F3D7 ; [*153E.0020.0002] # BUILDING CONSTRUCTION +1F3D8 ; [*153F.0020.0002] # HOUSE BUILDINGS +1F3D9 ; [*1540.0020.0002] # CITYSCAPE +1F3DA ; [*1541.0020.0002] # DERELICT HOUSE BUILDING +1F3DB ; [*1542.0020.0002] # CLASSICAL BUILDING +1F3DC ; [*1543.0020.0002] # DESERT +1F3DD ; [*1544.0020.0002] # DESERT ISLAND +1F3DE ; [*1545.0020.0002] # NATIONAL PARK +1F3DF ; [*1546.0020.0002] # STADIUM +1F3E0 ; [*1547.0020.0002] # HOUSE BUILDING +1F3E1 ; [*1548.0020.0002] # HOUSE WITH GARDEN +1F3E2 ; [*1549.0020.0002] # OFFICE BUILDING +1F3E3 ; [*154A.0020.0002] # JAPANESE POST OFFICE +1F3E4 ; [*154B.0020.0002] # EUROPEAN POST OFFICE +1F3E5 ; [*154C.0020.0002] # HOSPITAL +1F3E6 ; [*154D.0020.0002] # BANK +1F3E7 ; [*154E.0020.0002] # AUTOMATED TELLER MACHINE +1F3E8 ; [*154F.0020.0002] # HOTEL +1F3E9 ; [*1550.0020.0002] # LOVE HOTEL +1F3EA ; [*1551.0020.0002] # CONVENIENCE STORE +1F3EB ; [*1552.0020.0002] # SCHOOL +1F3EC ; [*1553.0020.0002] # DEPARTMENT STORE +1F3ED ; [*1554.0020.0002] # FACTORY +1F3EE ; [*1555.0020.0002] # IZAKAYA LANTERN +1F3EF ; [*1556.0020.0002] # JAPANESE CASTLE +1F3F0 ; [*1557.0020.0002] # EUROPEAN CASTLE +1F3F1 ; [*1558.0020.0002] # WHITE PENNANT +1F3F2 ; [*1559.0020.0002] # BLACK PENNANT +1F3F3 ; [*155A.0020.0002] # WAVING WHITE FLAG +1F3F4 ; [*155B.0020.0002] # WAVING BLACK FLAG +1F3F5 ; [*155C.0020.0002] # ROSETTE +1F3F6 ; [*155D.0020.0002] # BLACK ROSETTE +1F3F7 ; [*155E.0020.0002] # LABEL +1F3F8 ; [*155F.0020.0002] # BADMINTON RACQUET AND SHUTTLECOCK +1F3F9 ; [*1560.0020.0002] # BOW AND ARROW +1F3FA ; [*1561.0020.0002] # AMPHORA +1F3FB ; [*1562.0020.0002] # EMOJI MODIFIER FITZPATRICK TYPE-1-2 +1F3FC ; [*1563.0020.0002] # EMOJI MODIFIER FITZPATRICK TYPE-3 +1F3FD ; [*1564.0020.0002] # EMOJI MODIFIER FITZPATRICK TYPE-4 +1F3FE ; [*1565.0020.0002] # EMOJI MODIFIER FITZPATRICK TYPE-5 +1F3FF ; [*1566.0020.0002] # EMOJI MODIFIER FITZPATRICK TYPE-6 +1F400 ; [*1567.0020.0002] # RAT +1F401 ; [*1568.0020.0002] # MOUSE +1F402 ; [*1569.0020.0002] # OX +1F403 ; [*156A.0020.0002] # WATER BUFFALO +1F404 ; [*156B.0020.0002] # COW +1F405 ; [*156C.0020.0002] # TIGER +1F406 ; [*156D.0020.0002] # LEOPARD +1F407 ; [*156E.0020.0002] # RABBIT +1F408 ; [*156F.0020.0002] # CAT +1F409 ; [*1570.0020.0002] # DRAGON +1F40A ; [*1571.0020.0002] # CROCODILE +1F40B ; [*1572.0020.0002] # WHALE +1F40C ; [*1573.0020.0002] # SNAIL +1F40D ; [*1574.0020.0002] # SNAKE +1F40E ; [*1575.0020.0002] # HORSE +1F40F ; [*1576.0020.0002] # RAM +1F410 ; [*1577.0020.0002] # GOAT +1F411 ; [*1578.0020.0002] # SHEEP +1F412 ; [*1579.0020.0002] # MONKEY +1F413 ; [*157A.0020.0002] # ROOSTER +1F414 ; [*157B.0020.0002] # CHICKEN +1F415 ; [*157C.0020.0002] # DOG +1F416 ; [*157D.0020.0002] # PIG +1F417 ; [*157E.0020.0002] # BOAR +1F418 ; [*157F.0020.0002] # ELEPHANT +1F419 ; [*1580.0020.0002] # OCTOPUS +1F41A ; [*1581.0020.0002] # SPIRAL SHELL +1F41B ; [*1582.0020.0002] # BUG +1F41C ; [*1583.0020.0002] # ANT +1F41D ; [*1584.0020.0002] # HONEYBEE +1F41E ; [*1585.0020.0002] # LADY BEETLE +1F41F ; [*1586.0020.0002] # FISH +1F420 ; [*1587.0020.0002] # TROPICAL FISH +1F421 ; [*1588.0020.0002] # BLOWFISH +1F422 ; [*1589.0020.0002] # TURTLE +1F423 ; [*158A.0020.0002] # HATCHING CHICK +1F424 ; [*158B.0020.0002] # BABY CHICK +1F425 ; [*158C.0020.0002] # FRONT-FACING BABY CHICK +1F426 ; [*158D.0020.0002] # BIRD +1F427 ; [*158E.0020.0002] # PENGUIN +1F428 ; [*158F.0020.0002] # KOALA +1F429 ; [*1590.0020.0002] # POODLE +1F42A ; [*1591.0020.0002] # DROMEDARY CAMEL +1F42B ; [*1592.0020.0002] # BACTRIAN CAMEL +1F42C ; [*1593.0020.0002] # DOLPHIN +1F42D ; [*1594.0020.0002] # MOUSE FACE +1F42E ; [*1595.0020.0002] # COW FACE +1F42F ; [*1596.0020.0002] # TIGER FACE +1F430 ; [*1597.0020.0002] # RABBIT FACE +1F431 ; [*1598.0020.0002] # CAT FACE +1F432 ; [*1599.0020.0002] # DRAGON FACE +1F433 ; [*159A.0020.0002] # SPOUTING WHALE +1F434 ; [*159B.0020.0002] # HORSE FACE +1F435 ; [*159C.0020.0002] # MONKEY FACE +1F436 ; [*159D.0020.0002] # DOG FACE +1F437 ; [*159E.0020.0002] # PIG FACE +1F438 ; [*159F.0020.0002] # FROG FACE +1F439 ; [*15A0.0020.0002] # HAMSTER FACE +1F43A ; [*15A1.0020.0002] # WOLF FACE +1F43B ; [*15A2.0020.0002] # BEAR FACE +1F43C ; [*15A3.0020.0002] # PANDA FACE +1F43D ; [*15A4.0020.0002] # PIG NOSE +1F43E ; [*15A5.0020.0002] # PAW PRINTS +1F43F ; [*15A6.0020.0002] # CHIPMUNK +1F440 ; [*15A7.0020.0002] # EYES +1F441 ; [*15A8.0020.0002] # EYE +1F442 ; [*15A9.0020.0002] # EAR +1F443 ; [*15AA.0020.0002] # NOSE +1F444 ; [*15AB.0020.0002] # MOUTH +1F445 ; [*15AC.0020.0002] # TONGUE +1F446 ; [*15AD.0020.0002] # WHITE UP POINTING BACKHAND INDEX +1F447 ; [*15AE.0020.0002] # WHITE DOWN POINTING BACKHAND INDEX +1F448 ; [*15AF.0020.0002] # WHITE LEFT POINTING BACKHAND INDEX +1F449 ; [*15B0.0020.0002] # WHITE RIGHT POINTING BACKHAND INDEX +1F44A ; [*15B1.0020.0002] # FISTED HAND SIGN +1F44B ; [*15B2.0020.0002] # WAVING HAND SIGN +1F44C ; [*15B3.0020.0002] # OK HAND SIGN +1F44D ; [*15B4.0020.0002] # THUMBS UP SIGN +1F44E ; [*15B5.0020.0002] # THUMBS DOWN SIGN +1F44F ; [*15B6.0020.0002] # CLAPPING HANDS SIGN +1F450 ; [*15B7.0020.0002] # OPEN HANDS SIGN +1F451 ; [*15B8.0020.0002] # CROWN +1F452 ; [*15B9.0020.0002] # WOMANS HAT +1F453 ; [*15BA.0020.0002] # EYEGLASSES +1F454 ; [*15BB.0020.0002] # NECKTIE +1F455 ; [*15BC.0020.0002] # T-SHIRT +1F456 ; [*15BD.0020.0002] # JEANS +1F457 ; [*15BE.0020.0002] # DRESS +1F458 ; [*15BF.0020.0002] # KIMONO +1F459 ; [*15C0.0020.0002] # BIKINI +1F45A ; [*15C1.0020.0002] # WOMANS CLOTHES +1F45B ; [*15C2.0020.0002] # PURSE +1F45C ; [*15C3.0020.0002] # HANDBAG +1F45D ; [*15C4.0020.0002] # POUCH +1F45E ; [*15C5.0020.0002] # MANS SHOE +1F45F ; [*15C6.0020.0002] # ATHLETIC SHOE +1F460 ; [*15C7.0020.0002] # HIGH-HEELED SHOE +1F461 ; [*15C8.0020.0002] # WOMANS SANDAL +1F462 ; [*15C9.0020.0002] # WOMANS BOOTS +1F463 ; [*15CA.0020.0002] # FOOTPRINTS +1F464 ; [*15CB.0020.0002] # BUST IN SILHOUETTE +1F465 ; [*15CC.0020.0002] # BUSTS IN SILHOUETTE +1F466 ; [*15CD.0020.0002] # BOY +1F467 ; [*15CE.0020.0002] # GIRL +1F468 ; [*15CF.0020.0002] # MAN +1F469 ; [*15D0.0020.0002] # WOMAN +1F46A ; [*15D1.0020.0002] # FAMILY +1F46B ; [*15D2.0020.0002] # MAN AND WOMAN HOLDING HANDS +1F46C ; [*15D3.0020.0002] # TWO MEN HOLDING HANDS +1F46D ; [*15D4.0020.0002] # TWO WOMEN HOLDING HANDS +1F46E ; [*15D5.0020.0002] # POLICE OFFICER +1F46F ; [*15D6.0020.0002] # WOMAN WITH BUNNY EARS +1F470 ; [*15D7.0020.0002] # BRIDE WITH VEIL +1F471 ; [*15D8.0020.0002] # PERSON WITH BLOND HAIR +1F472 ; [*15D9.0020.0002] # MAN WITH GUA PI MAO +1F473 ; [*15DA.0020.0002] # MAN WITH TURBAN +1F474 ; [*15DB.0020.0002] # OLDER MAN +1F475 ; [*15DC.0020.0002] # OLDER WOMAN +1F476 ; [*15DD.0020.0002] # BABY +1F477 ; [*15DE.0020.0002] # CONSTRUCTION WORKER +1F478 ; [*15DF.0020.0002] # PRINCESS +1F479 ; [*15E0.0020.0002] # JAPANESE OGRE +1F47A ; [*15E1.0020.0002] # JAPANESE GOBLIN +1F47B ; [*15E2.0020.0002] # GHOST +1F47C ; [*15E3.0020.0002] # BABY ANGEL +1F47D ; [*15E4.0020.0002] # EXTRATERRESTRIAL ALIEN +1F47E ; [*15E5.0020.0002] # ALIEN MONSTER +1F47F ; [*15E6.0020.0002] # IMP +1F480 ; [*15E7.0020.0002] # SKULL +1F481 ; [*15E8.0020.0002] # INFORMATION DESK PERSON +1F482 ; [*15E9.0020.0002] # GUARDSMAN +1F483 ; [*15EA.0020.0002] # DANCER +1F484 ; [*15EB.0020.0002] # LIPSTICK +1F485 ; [*15EC.0020.0002] # NAIL POLISH +1F486 ; [*15ED.0020.0002] # FACE MASSAGE +1F487 ; [*15EE.0020.0002] # HAIRCUT +1F488 ; [*15EF.0020.0002] # BARBER POLE +1F489 ; [*15F0.0020.0002] # SYRINGE +1F48A ; [*15F1.0020.0002] # PILL +1F48B ; [*15F2.0020.0002] # KISS MARK +1F48C ; [*15F3.0020.0002] # LOVE LETTER +1F48D ; [*15F4.0020.0002] # RING +1F48E ; [*15F5.0020.0002] # GEM STONE +1F48F ; [*15F6.0020.0002] # KISS +1F490 ; [*15F7.0020.0002] # BOUQUET +1F491 ; [*15F8.0020.0002] # COUPLE WITH HEART +1F492 ; [*15F9.0020.0002] # WEDDING +1F493 ; [*15FA.0020.0002] # BEATING HEART +1F494 ; [*15FB.0020.0002] # BROKEN HEART +1F495 ; [*15FC.0020.0002] # TWO HEARTS +1F496 ; [*15FD.0020.0002] # SPARKLING HEART +1F497 ; [*15FE.0020.0002] # GROWING HEART +1F498 ; [*15FF.0020.0002] # HEART WITH ARROW +1F499 ; [*1600.0020.0002] # BLUE HEART +1F49A ; [*1601.0020.0002] # GREEN HEART +1F49B ; [*1602.0020.0002] # YELLOW HEART +1F49C ; [*1603.0020.0002] # PURPLE HEART +1F49D ; [*1604.0020.0002] # HEART WITH RIBBON +1F49E ; [*1605.0020.0002] # REVOLVING HEARTS +1F49F ; [*1606.0020.0002] # HEART DECORATION +1F4A0 ; [*1607.0020.0002] # DIAMOND SHAPE WITH A DOT INSIDE +1F4A1 ; [*1608.0020.0002] # ELECTRIC LIGHT BULB +1F4A2 ; [*1609.0020.0002] # ANGER SYMBOL +1F4A3 ; [*160A.0020.0002] # BOMB +1F4A4 ; [*160B.0020.0002] # SLEEPING SYMBOL +1F4A5 ; [*160C.0020.0002] # COLLISION SYMBOL +1F4A6 ; [*160D.0020.0002] # SPLASHING SWEAT SYMBOL +1F4A7 ; [*160E.0020.0002] # DROPLET +1F4A8 ; [*160F.0020.0002] # DASH SYMBOL +1F4A9 ; [*1610.0020.0002] # PILE OF POO +1F4AA ; [*1611.0020.0002] # FLEXED BICEPS +1F4AB ; [*1612.0020.0002] # DIZZY SYMBOL +1F4AC ; [*1613.0020.0002] # SPEECH BALLOON +1F4AD ; [*1614.0020.0002] # THOUGHT BALLOON +1F4AE ; [*1615.0020.0002] # WHITE FLOWER +1F4AF ; [*1616.0020.0002] # HUNDRED POINTS SYMBOL +1F4B0 ; [*1617.0020.0002] # MONEY BAG +1F4B1 ; [*1618.0020.0002] # CURRENCY EXCHANGE +1F4B2 ; [*1619.0020.0002] # HEAVY DOLLAR SIGN +1F4B3 ; [*161A.0020.0002] # CREDIT CARD +1F4B4 ; [*161B.0020.0002] # BANKNOTE WITH YEN SIGN +1F4B5 ; [*161C.0020.0002] # BANKNOTE WITH DOLLAR SIGN +1F4B6 ; [*161D.0020.0002] # BANKNOTE WITH EURO SIGN +1F4B7 ; [*161E.0020.0002] # BANKNOTE WITH POUND SIGN +1F4B8 ; [*161F.0020.0002] # MONEY WITH WINGS +1F4B9 ; [*1620.0020.0002] # CHART WITH UPWARDS TREND AND YEN SIGN +1F4BA ; [*1621.0020.0002] # SEAT +1F4BB ; [*1622.0020.0002] # PERSONAL COMPUTER +1F4BC ; [*1623.0020.0002] # BRIEFCASE +1F4BD ; [*1624.0020.0002] # MINIDISC +1F4BE ; [*1625.0020.0002] # FLOPPY DISK +1F4BF ; [*1626.0020.0002] # OPTICAL DISC +1F4C0 ; [*1627.0020.0002] # DVD +1F4C1 ; [*1628.0020.0002] # FILE FOLDER +1F4C2 ; [*1629.0020.0002] # OPEN FILE FOLDER +1F4C3 ; [*162A.0020.0002] # PAGE WITH CURL +1F4C4 ; [*162B.0020.0002] # PAGE FACING UP +1F4C5 ; [*162C.0020.0002] # CALENDAR +1F4C6 ; [*162D.0020.0002] # TEAR-OFF CALENDAR +1F4C7 ; [*162E.0020.0002] # CARD INDEX +1F4C8 ; [*162F.0020.0002] # CHART WITH UPWARDS TREND +1F4C9 ; [*1630.0020.0002] # CHART WITH DOWNWARDS TREND +1F4CA ; [*1631.0020.0002] # BAR CHART +1F4CB ; [*1632.0020.0002] # CLIPBOARD +1F4CC ; [*1633.0020.0002] # PUSHPIN +1F4CD ; [*1634.0020.0002] # ROUND PUSHPIN +1F4CE ; [*1635.0020.0002] # PAPERCLIP +1F4CF ; [*1636.0020.0002] # STRAIGHT RULER +1F4D0 ; [*1637.0020.0002] # TRIANGULAR RULER +1F4D1 ; [*1638.0020.0002] # BOOKMARK TABS +1F4D2 ; [*1639.0020.0002] # LEDGER +1F4D3 ; [*163A.0020.0002] # NOTEBOOK +1F4D4 ; [*163B.0020.0002] # NOTEBOOK WITH DECORATIVE COVER +1F4D5 ; [*163C.0020.0002] # CLOSED BOOK +1F4D6 ; [*163D.0020.0002] # OPEN BOOK +1F4D7 ; [*163E.0020.0002] # GREEN BOOK +1F4D8 ; [*163F.0020.0002] # BLUE BOOK +1F4D9 ; [*1640.0020.0002] # ORANGE BOOK +1F4DA ; [*1641.0020.0002] # BOOKS +1F4DB ; [*1642.0020.0002] # NAME BADGE +1F4DC ; [*1643.0020.0002] # SCROLL +1F4DD ; [*1644.0020.0002] # MEMO +1F4DE ; [*1645.0020.0002] # TELEPHONE RECEIVER +1F4DF ; [*1646.0020.0002] # PAGER +1F4E0 ; [*1647.0020.0002] # FAX MACHINE +1F4E1 ; [*1648.0020.0002] # SATELLITE ANTENNA +1F4E2 ; [*1649.0020.0002] # PUBLIC ADDRESS LOUDSPEAKER +1F4E3 ; [*164A.0020.0002] # CHEERING MEGAPHONE +1F4E4 ; [*164B.0020.0002] # OUTBOX TRAY +1F4E5 ; [*164C.0020.0002] # INBOX TRAY +1F4E6 ; [*164D.0020.0002] # PACKAGE +1F4E7 ; [*164E.0020.0002] # E-MAIL SYMBOL +1F4E8 ; [*164F.0020.0002] # INCOMING ENVELOPE +1F4E9 ; [*1650.0020.0002] # ENVELOPE WITH DOWNWARDS ARROW ABOVE +1F4EA ; [*1651.0020.0002] # CLOSED MAILBOX WITH LOWERED FLAG +1F4EB ; [*1652.0020.0002] # CLOSED MAILBOX WITH RAISED FLAG +1F4EC ; [*1653.0020.0002] # OPEN MAILBOX WITH RAISED FLAG +1F4ED ; [*1654.0020.0002] # OPEN MAILBOX WITH LOWERED FLAG +1F4EE ; [*1655.0020.0002] # POSTBOX +1F4EF ; [*1656.0020.0002] # POSTAL HORN +1F4F0 ; [*1657.0020.0002] # NEWSPAPER +1F4F1 ; [*1658.0020.0002] # MOBILE PHONE +1F4F2 ; [*1659.0020.0002] # MOBILE PHONE WITH RIGHTWARDS ARROW AT LEFT +1F4F3 ; [*165A.0020.0002] # VIBRATION MODE +1F4F4 ; [*165B.0020.0002] # MOBILE PHONE OFF +1F4F5 ; [*165C.0020.0002] # NO MOBILE PHONES +1F4F6 ; [*165D.0020.0002] # ANTENNA WITH BARS +1F4F7 ; [*165E.0020.0002] # CAMERA +1F4F8 ; [*165F.0020.0002] # CAMERA WITH FLASH +1F4F9 ; [*1660.0020.0002] # VIDEO CAMERA +1F4FA ; [*1661.0020.0002] # TELEVISION +1F4FB ; [*1662.0020.0002] # RADIO +1F4FC ; [*1663.0020.0002] # VIDEOCASSETTE +1F4FD ; [*1664.0020.0002] # FILM PROJECTOR +1F4FE ; [*1665.0020.0002] # PORTABLE STEREO +1F4FF ; [*1666.0020.0002] # PRAYER BEADS +1F500 ; [*1667.0020.0002] # TWISTED RIGHTWARDS ARROWS +1F501 ; [*1668.0020.0002] # CLOCKWISE RIGHTWARDS AND LEFTWARDS OPEN CIRCLE ARROWS +1F502 ; [*1669.0020.0002] # CLOCKWISE RIGHTWARDS AND LEFTWARDS OPEN CIRCLE ARROWS WITH CIRCLED ONE OVERLAY +1F503 ; [*166A.0020.0002] # CLOCKWISE DOWNWARDS AND UPWARDS OPEN CIRCLE ARROWS +1F504 ; [*166B.0020.0002] # ANTICLOCKWISE DOWNWARDS AND UPWARDS OPEN CIRCLE ARROWS +1F505 ; [*166C.0020.0002] # LOW BRIGHTNESS SYMBOL +1F506 ; [*166D.0020.0002] # HIGH BRIGHTNESS SYMBOL +1F507 ; [*166E.0020.0002] # SPEAKER WITH CANCELLATION STROKE +1F508 ; [*166F.0020.0002] # SPEAKER +1F509 ; [*1670.0020.0002] # SPEAKER WITH ONE SOUND WAVE +1F50A ; [*1671.0020.0002] # SPEAKER WITH THREE SOUND WAVES +1F50B ; [*1672.0020.0002] # BATTERY +1F50C ; [*1673.0020.0002] # ELECTRIC PLUG +1F50D ; [*1674.0020.0002] # LEFT-POINTING MAGNIFYING GLASS +1F50E ; [*1675.0020.0002] # RIGHT-POINTING MAGNIFYING GLASS +1F50F ; [*1676.0020.0002] # LOCK WITH INK PEN +1F510 ; [*1677.0020.0002] # CLOSED LOCK WITH KEY +1F511 ; [*1678.0020.0002] # KEY +1F512 ; [*1679.0020.0002] # LOCK +1F513 ; [*167A.0020.0002] # OPEN LOCK +1F514 ; [*167B.0020.0002] # BELL +1F515 ; [*167C.0020.0002] # BELL WITH CANCELLATION STROKE +1F516 ; [*167D.0020.0002] # BOOKMARK +1F517 ; [*167E.0020.0002] # LINK SYMBOL +1F518 ; [*167F.0020.0002] # RADIO BUTTON +1F519 ; [*1680.0020.0002] # BACK WITH LEFTWARDS ARROW ABOVE +1F51A ; [*1681.0020.0002] # END WITH LEFTWARDS ARROW ABOVE +1F51B ; [*1682.0020.0002] # ON WITH EXCLAMATION MARK WITH LEFT RIGHT ARROW ABOVE +1F51C ; [*1683.0020.0002] # SOON WITH RIGHTWARDS ARROW ABOVE +1F51D ; [*1684.0020.0002] # TOP WITH UPWARDS ARROW ABOVE +1F51E ; [*1685.0020.0002] # NO ONE UNDER EIGHTEEN SYMBOL +1F51F ; [*1686.0020.0002] # KEYCAP TEN +1F520 ; [*1687.0020.0002] # INPUT SYMBOL FOR LATIN CAPITAL LETTERS +1F521 ; [*1688.0020.0002] # INPUT SYMBOL FOR LATIN SMALL LETTERS +1F522 ; [*1689.0020.0002] # INPUT SYMBOL FOR NUMBERS +1F523 ; [*168A.0020.0002] # INPUT SYMBOL FOR SYMBOLS +1F524 ; [*168B.0020.0002] # INPUT SYMBOL FOR LATIN LETTERS +1F525 ; [*168C.0020.0002] # FIRE +1F526 ; [*168D.0020.0002] # ELECTRIC TORCH +1F527 ; [*168E.0020.0002] # WRENCH +1F528 ; [*168F.0020.0002] # HAMMER +1F529 ; [*1690.0020.0002] # NUT AND BOLT +1F52A ; [*1691.0020.0002] # HOCHO +1F52B ; [*1692.0020.0002] # PISTOL +1F52C ; [*1693.0020.0002] # MICROSCOPE +1F52D ; [*1694.0020.0002] # TELESCOPE +1F52E ; [*1695.0020.0002] # CRYSTAL BALL +1F52F ; [*1696.0020.0002] # SIX POINTED STAR WITH MIDDLE DOT +1F530 ; [*1697.0020.0002] # JAPANESE SYMBOL FOR BEGINNER +1F531 ; [*1698.0020.0002] # TRIDENT EMBLEM +1F532 ; [*1699.0020.0002] # BLACK SQUARE BUTTON +1F533 ; [*169A.0020.0002] # WHITE SQUARE BUTTON +1F534 ; [*169B.0020.0002] # LARGE RED CIRCLE +1F535 ; [*169C.0020.0002] # LARGE BLUE CIRCLE +1F536 ; [*169D.0020.0002] # LARGE ORANGE DIAMOND +1F537 ; [*169E.0020.0002] # LARGE BLUE DIAMOND +1F538 ; [*169F.0020.0002] # SMALL ORANGE DIAMOND +1F539 ; [*16A0.0020.0002] # SMALL BLUE DIAMOND +1F53A ; [*16A1.0020.0002] # UP-POINTING RED TRIANGLE +1F53B ; [*16A2.0020.0002] # DOWN-POINTING RED TRIANGLE +1F53C ; [*16A3.0020.0002] # UP-POINTING SMALL RED TRIANGLE +1F53D ; [*16A4.0020.0002] # DOWN-POINTING SMALL RED TRIANGLE +1F53E ; [*16A5.0020.0002] # LOWER RIGHT SHADOWED WHITE CIRCLE +1F53F ; [*16A6.0020.0002] # UPPER RIGHT SHADOWED WHITE CIRCLE +1F540 ; [*16A7.0020.0002] # CIRCLED CROSS POMMEE +1F541 ; [*16A8.0020.0002] # CROSS POMMEE WITH HALF-CIRCLE BELOW +1F542 ; [*16A9.0020.0002] # CROSS POMMEE +1F543 ; [*16AA.0020.0002] # NOTCHED LEFT SEMICIRCLE WITH THREE DOTS +1F544 ; [*16AB.0020.0002] # NOTCHED RIGHT SEMICIRCLE WITH THREE DOTS +1F545 ; [*16AC.0020.0002] # SYMBOL FOR MARKS CHAPTER +1F546 ; [*16AD.0020.0002] # WHITE LATIN CROSS +1F547 ; [*16AE.0020.0002] # HEAVY LATIN CROSS +1F548 ; [*16AF.0020.0002] # CELTIC CROSS +1F549 ; [*16B0.0020.0002] # OM SYMBOL +1F54A ; [*16B1.0020.0002] # DOVE OF PEACE +1F54B ; [*16B2.0020.0002] # KAABA +1F54C ; [*16B3.0020.0002] # MOSQUE +1F54D ; [*16B4.0020.0002] # SYNAGOGUE +1F54E ; [*16B5.0020.0002] # MENORAH WITH NINE BRANCHES +1F54F ; [*16B6.0020.0002] # BOWL OF HYGIEIA +1F550 ; [*16B7.0020.0002] # CLOCK FACE ONE OCLOCK +1F551 ; [*16B8.0020.0002] # CLOCK FACE TWO OCLOCK +1F552 ; [*16B9.0020.0002] # CLOCK FACE THREE OCLOCK +1F553 ; [*16BA.0020.0002] # CLOCK FACE FOUR OCLOCK +1F554 ; [*16BB.0020.0002] # CLOCK FACE FIVE OCLOCK +1F555 ; [*16BC.0020.0002] # CLOCK FACE SIX OCLOCK +1F556 ; [*16BD.0020.0002] # CLOCK FACE SEVEN OCLOCK +1F557 ; [*16BE.0020.0002] # CLOCK FACE EIGHT OCLOCK +1F558 ; [*16BF.0020.0002] # CLOCK FACE NINE OCLOCK +1F559 ; [*16C0.0020.0002] # CLOCK FACE TEN OCLOCK +1F55A ; [*16C1.0020.0002] # CLOCK FACE ELEVEN OCLOCK +1F55B ; [*16C2.0020.0002] # CLOCK FACE TWELVE OCLOCK +1F55C ; [*16C3.0020.0002] # CLOCK FACE ONE-THIRTY +1F55D ; [*16C4.0020.0002] # CLOCK FACE TWO-THIRTY +1F55E ; [*16C5.0020.0002] # CLOCK FACE THREE-THIRTY +1F55F ; [*16C6.0020.0002] # CLOCK FACE FOUR-THIRTY +1F560 ; [*16C7.0020.0002] # CLOCK FACE FIVE-THIRTY +1F561 ; [*16C8.0020.0002] # CLOCK FACE SIX-THIRTY +1F562 ; [*16C9.0020.0002] # CLOCK FACE SEVEN-THIRTY +1F563 ; [*16CA.0020.0002] # CLOCK FACE EIGHT-THIRTY +1F564 ; [*16CB.0020.0002] # CLOCK FACE NINE-THIRTY +1F565 ; [*16CC.0020.0002] # CLOCK FACE TEN-THIRTY +1F566 ; [*16CD.0020.0002] # CLOCK FACE ELEVEN-THIRTY +1F567 ; [*16CE.0020.0002] # CLOCK FACE TWELVE-THIRTY +1F568 ; [*16CF.0020.0002] # RIGHT SPEAKER +1F569 ; [*16D0.0020.0002] # RIGHT SPEAKER WITH ONE SOUND WAVE +1F56A ; [*16D1.0020.0002] # RIGHT SPEAKER WITH THREE SOUND WAVES +1F56B ; [*16D2.0020.0002] # BULLHORN +1F56C ; [*16D3.0020.0002] # BULLHORN WITH SOUND WAVES +1F56D ; [*16D4.0020.0002] # RINGING BELL +1F56E ; [*16D5.0020.0002] # BOOK +1F56F ; [*16D6.0020.0002] # CANDLE +1F570 ; [*16D7.0020.0002] # MANTELPIECE CLOCK +1F571 ; [*16D8.0020.0002] # BLACK SKULL AND CROSSBONES +1F572 ; [*16D9.0020.0002] # NO PIRACY +1F573 ; [*16DA.0020.0002] # HOLE +1F574 ; [*16DB.0020.0002] # MAN IN BUSINESS SUIT LEVITATING +1F575 ; [*16DC.0020.0002] # SLEUTH OR SPY +1F576 ; [*16DD.0020.0002] # DARK SUNGLASSES +1F577 ; [*16DE.0020.0002] # SPIDER +1F578 ; [*16DF.0020.0002] # SPIDER WEB +1F579 ; [*16E0.0020.0002] # JOYSTICK +1F57A ; [*16E1.0020.0002] # MAN DANCING +1F57B ; [*16E2.0020.0002] # LEFT HAND TELEPHONE RECEIVER +1F57C ; [*16E3.0020.0002] # TELEPHONE RECEIVER WITH PAGE +1F57D ; [*16E4.0020.0002] # RIGHT HAND TELEPHONE RECEIVER +1F57E ; [*16E5.0020.0002] # WHITE TOUCHTONE TELEPHONE +1F57F ; [*16E6.0020.0002] # BLACK TOUCHTONE TELEPHONE +1F580 ; [*16E7.0020.0002] # TELEPHONE ON TOP OF MODEM +1F581 ; [*16E8.0020.0002] # CLAMSHELL MOBILE PHONE +1F582 ; [*16E9.0020.0002] # BACK OF ENVELOPE +1F583 ; [*16EA.0020.0002] # STAMPED ENVELOPE +1F584 ; [*16EB.0020.0002] # ENVELOPE WITH LIGHTNING +1F585 ; [*16EC.0020.0002] # FLYING ENVELOPE +1F586 ; [*16ED.0020.0002] # PEN OVER STAMPED ENVELOPE +1F587 ; [*16EE.0020.0002] # LINKED PAPERCLIPS +1F588 ; [*16EF.0020.0002] # BLACK PUSHPIN +1F589 ; [*16F0.0020.0002] # LOWER LEFT PENCIL +1F58A ; [*16F1.0020.0002] # LOWER LEFT BALLPOINT PEN +1F58B ; [*16F2.0020.0002] # LOWER LEFT FOUNTAIN PEN +1F58C ; [*16F3.0020.0002] # LOWER LEFT PAINTBRUSH +1F58D ; [*16F4.0020.0002] # LOWER LEFT CRAYON +1F58E ; [*16F5.0020.0002] # LEFT WRITING HAND +1F58F ; [*16F6.0020.0002] # TURNED OK HAND SIGN +1F590 ; [*16F7.0020.0002] # RAISED HAND WITH FINGERS SPLAYED +1F591 ; [*16F8.0020.0002] # REVERSED RAISED HAND WITH FINGERS SPLAYED +1F592 ; [*16F9.0020.0002] # REVERSED THUMBS UP SIGN +1F593 ; [*16FA.0020.0002] # REVERSED THUMBS DOWN SIGN +1F594 ; [*16FB.0020.0002] # REVERSED VICTORY HAND +1F595 ; [*16FC.0020.0002] # REVERSED HAND WITH MIDDLE FINGER EXTENDED +1F596 ; [*16FD.0020.0002] # RAISED HAND WITH PART BETWEEN MIDDLE AND RING FINGERS +1F597 ; [*16FE.0020.0002] # WHITE DOWN POINTING LEFT HAND INDEX +1F598 ; [*16FF.0020.0002] # SIDEWAYS WHITE LEFT POINTING INDEX +1F599 ; [*1700.0020.0002] # SIDEWAYS WHITE RIGHT POINTING INDEX +1F59A ; [*1701.0020.0002] # SIDEWAYS BLACK LEFT POINTING INDEX +1F59B ; [*1702.0020.0002] # SIDEWAYS BLACK RIGHT POINTING INDEX +1F59C ; [*1703.0020.0002] # BLACK LEFT POINTING BACKHAND INDEX +1F59D ; [*1704.0020.0002] # BLACK RIGHT POINTING BACKHAND INDEX +1F59E ; [*1705.0020.0002] # SIDEWAYS WHITE UP POINTING INDEX +1F59F ; [*1706.0020.0002] # SIDEWAYS WHITE DOWN POINTING INDEX +1F5A0 ; [*1707.0020.0002] # SIDEWAYS BLACK UP POINTING INDEX +1F5A1 ; [*1708.0020.0002] # SIDEWAYS BLACK DOWN POINTING INDEX +1F5A2 ; [*1709.0020.0002] # BLACK UP POINTING BACKHAND INDEX +1F5A3 ; [*170A.0020.0002] # BLACK DOWN POINTING BACKHAND INDEX +1F5A4 ; [*170B.0020.0002] # BLACK HEART +1F5A5 ; [*170C.0020.0002] # DESKTOP COMPUTER +1F5A6 ; [*170D.0020.0002] # KEYBOARD AND MOUSE +1F5A7 ; [*170E.0020.0002] # THREE NETWORKED COMPUTERS +1F5A8 ; [*170F.0020.0002] # PRINTER +1F5A9 ; [*1710.0020.0002] # POCKET CALCULATOR +1F5AA ; [*1711.0020.0002] # BLACK HARD SHELL FLOPPY DISK +1F5AB ; [*1712.0020.0002] # WHITE HARD SHELL FLOPPY DISK +1F5AC ; [*1713.0020.0002] # SOFT SHELL FLOPPY DISK +1F5AD ; [*1714.0020.0002] # TAPE CARTRIDGE +1F5AE ; [*1715.0020.0002] # WIRED KEYBOARD +1F5AF ; [*1716.0020.0002] # ONE BUTTON MOUSE +1F5B0 ; [*1717.0020.0002] # TWO BUTTON MOUSE +1F5B1 ; [*1718.0020.0002] # THREE BUTTON MOUSE +1F5B2 ; [*1719.0020.0002] # TRACKBALL +1F5B3 ; [*171A.0020.0002] # OLD PERSONAL COMPUTER +1F5B4 ; [*171B.0020.0002] # HARD DISK +1F5B5 ; [*171C.0020.0002] # SCREEN +1F5B6 ; [*171D.0020.0002] # PRINTER ICON +1F5B7 ; [*171E.0020.0002] # FAX ICON +1F5B8 ; [*171F.0020.0002] # OPTICAL DISC ICON +1F5B9 ; [*1720.0020.0002] # DOCUMENT WITH TEXT +1F5BA ; [*1721.0020.0002] # DOCUMENT WITH TEXT AND PICTURE +1F5BB ; [*1722.0020.0002] # DOCUMENT WITH PICTURE +1F5BC ; [*1723.0020.0002] # FRAME WITH PICTURE +1F5BD ; [*1724.0020.0002] # FRAME WITH TILES +1F5BE ; [*1725.0020.0002] # FRAME WITH AN X +1F5BF ; [*1726.0020.0002] # BLACK FOLDER +1F5C0 ; [*1727.0020.0002] # FOLDER +1F5C1 ; [*1728.0020.0002] # OPEN FOLDER +1F5C2 ; [*1729.0020.0002] # CARD INDEX DIVIDERS +1F5C3 ; [*172A.0020.0002] # CARD FILE BOX +1F5C4 ; [*172B.0020.0002] # FILE CABINET +1F5C5 ; [*172C.0020.0002] # EMPTY NOTE +1F5C6 ; [*172D.0020.0002] # EMPTY NOTE PAGE +1F5C7 ; [*172E.0020.0002] # EMPTY NOTE PAD +1F5C8 ; [*172F.0020.0002] # NOTE +1F5C9 ; [*1730.0020.0002] # NOTE PAGE +1F5CA ; [*1731.0020.0002] # NOTE PAD +1F5CB ; [*1732.0020.0002] # EMPTY DOCUMENT +1F5CC ; [*1733.0020.0002] # EMPTY PAGE +1F5CD ; [*1734.0020.0002] # EMPTY PAGES +1F5CE ; [*1735.0020.0002] # DOCUMENT +1F5CF ; [*1736.0020.0002] # PAGE +1F5D0 ; [*1737.0020.0002] # PAGES +1F5D1 ; [*1738.0020.0002] # WASTEBASKET +1F5D2 ; [*1739.0020.0002] # SPIRAL NOTE PAD +1F5D3 ; [*173A.0020.0002] # SPIRAL CALENDAR PAD +1F5D4 ; [*173B.0020.0002] # DESKTOP WINDOW +1F5D5 ; [*173C.0020.0002] # MINIMIZE +1F5D6 ; [*173D.0020.0002] # MAXIMIZE +1F5D7 ; [*173E.0020.0002] # OVERLAP +1F5D8 ; [*173F.0020.0002] # CLOCKWISE RIGHT AND LEFT SEMICIRCLE ARROWS +1F5D9 ; [*1740.0020.0002] # CANCELLATION X +1F5DA ; [*1741.0020.0002] # INCREASE FONT SIZE SYMBOL +1F5DB ; [*1742.0020.0002] # DECREASE FONT SIZE SYMBOL +1F5DC ; [*1743.0020.0002] # COMPRESSION +1F5DD ; [*1744.0020.0002] # OLD KEY +1F5DE ; [*1745.0020.0002] # ROLLED-UP NEWSPAPER +1F5DF ; [*1746.0020.0002] # PAGE WITH CIRCLED TEXT +1F5E0 ; [*1747.0020.0002] # STOCK CHART +1F5E1 ; [*1748.0020.0002] # DAGGER KNIFE +1F5E2 ; [*1749.0020.0002] # LIPS +1F5E3 ; [*174A.0020.0002] # SPEAKING HEAD IN SILHOUETTE +1F5E4 ; [*174B.0020.0002] # THREE RAYS ABOVE +1F5E5 ; [*174C.0020.0002] # THREE RAYS BELOW +1F5E6 ; [*174D.0020.0002] # THREE RAYS LEFT +1F5E7 ; [*174E.0020.0002] # THREE RAYS RIGHT +1F5E8 ; [*174F.0020.0002] # LEFT SPEECH BUBBLE +1F5E9 ; [*1750.0020.0002] # RIGHT SPEECH BUBBLE +1F5EA ; [*1751.0020.0002] # TWO SPEECH BUBBLES +1F5EB ; [*1752.0020.0002] # THREE SPEECH BUBBLES +1F5EC ; [*1753.0020.0002] # LEFT THOUGHT BUBBLE +1F5ED ; [*1754.0020.0002] # RIGHT THOUGHT BUBBLE +1F5EE ; [*1755.0020.0002] # LEFT ANGER BUBBLE +1F5EF ; [*1756.0020.0002] # RIGHT ANGER BUBBLE +1F5F0 ; [*1757.0020.0002] # MOOD BUBBLE +1F5F1 ; [*1758.0020.0002] # LIGHTNING MOOD BUBBLE +1F5F2 ; [*1759.0020.0002] # LIGHTNING MOOD +1F5F3 ; [*175A.0020.0002] # BALLOT BOX WITH BALLOT +1F5F4 ; [*175B.0020.0002] # BALLOT SCRIPT X +1F5F5 ; [*175C.0020.0002] # BALLOT BOX WITH SCRIPT X +1F5F6 ; [*175D.0020.0002] # BALLOT BOLD SCRIPT X +1F5F7 ; [*175E.0020.0002] # BALLOT BOX WITH BOLD SCRIPT X +1F5F8 ; [*175F.0020.0002] # LIGHT CHECK MARK +1F5F9 ; [*1760.0020.0002] # BALLOT BOX WITH BOLD CHECK +1F5FA ; [*1761.0020.0002] # WORLD MAP +1F5FB ; [*1762.0020.0002] # MOUNT FUJI +1F5FC ; [*1763.0020.0002] # TOKYO TOWER +1F5FD ; [*1764.0020.0002] # STATUE OF LIBERTY +1F5FE ; [*1765.0020.0002] # SILHOUETTE OF JAPAN +1F5FF ; [*1766.0020.0002] # MOYAI +1F600 ; [*189E.0020.0002] # GRINNING FACE +1F601 ; [*189F.0020.0002] # GRINNING FACE WITH SMILING EYES +1F602 ; [*18A0.0020.0002] # FACE WITH TEARS OF JOY +1F603 ; [*18A1.0020.0002] # SMILING FACE WITH OPEN MOUTH +1F604 ; [*18A2.0020.0002] # SMILING FACE WITH OPEN MOUTH AND SMILING EYES +1F605 ; [*18A3.0020.0002] # SMILING FACE WITH OPEN MOUTH AND COLD SWEAT +1F606 ; [*18A4.0020.0002] # SMILING FACE WITH OPEN MOUTH AND TIGHTLY-CLOSED EYES +1F607 ; [*18A5.0020.0002] # SMILING FACE WITH HALO +1F608 ; [*18A6.0020.0002] # SMILING FACE WITH HORNS +1F609 ; [*18A7.0020.0002] # WINKING FACE +1F60A ; [*18A8.0020.0002] # SMILING FACE WITH SMILING EYES +1F60B ; [*18A9.0020.0002] # FACE SAVOURING DELICIOUS FOOD +1F60C ; [*18AA.0020.0002] # RELIEVED FACE +1F60D ; [*18AB.0020.0002] # SMILING FACE WITH HEART-SHAPED EYES +1F60E ; [*18AC.0020.0002] # SMILING FACE WITH SUNGLASSES +1F60F ; [*18AD.0020.0002] # SMIRKING FACE +1F610 ; [*18AE.0020.0002] # NEUTRAL FACE +1F611 ; [*18AF.0020.0002] # EXPRESSIONLESS FACE +1F612 ; [*18B0.0020.0002] # UNAMUSED FACE +1F613 ; [*18B1.0020.0002] # FACE WITH COLD SWEAT +1F614 ; [*18B2.0020.0002] # PENSIVE FACE +1F615 ; [*18B3.0020.0002] # CONFUSED FACE +1F616 ; [*18B4.0020.0002] # CONFOUNDED FACE +1F617 ; [*18B5.0020.0002] # KISSING FACE +1F618 ; [*18B6.0020.0002] # FACE THROWING A KISS +1F619 ; [*18B7.0020.0002] # KISSING FACE WITH SMILING EYES +1F61A ; [*18B8.0020.0002] # KISSING FACE WITH CLOSED EYES +1F61B ; [*18B9.0020.0002] # FACE WITH STUCK-OUT TONGUE +1F61C ; [*18BA.0020.0002] # FACE WITH STUCK-OUT TONGUE AND WINKING EYE +1F61D ; [*18BB.0020.0002] # FACE WITH STUCK-OUT TONGUE AND TIGHTLY-CLOSED EYES +1F61E ; [*18BC.0020.0002] # DISAPPOINTED FACE +1F61F ; [*18BD.0020.0002] # WORRIED FACE +1F620 ; [*18BE.0020.0002] # ANGRY FACE +1F621 ; [*18BF.0020.0002] # POUTING FACE +1F622 ; [*18C0.0020.0002] # CRYING FACE +1F623 ; [*18C1.0020.0002] # PERSEVERING FACE +1F624 ; [*18C2.0020.0002] # FACE WITH LOOK OF TRIUMPH +1F625 ; [*18C3.0020.0002] # DISAPPOINTED BUT RELIEVED FACE +1F626 ; [*18C4.0020.0002] # FROWNING FACE WITH OPEN MOUTH +1F627 ; [*18C5.0020.0002] # ANGUISHED FACE +1F628 ; [*18C6.0020.0002] # FEARFUL FACE +1F629 ; [*18C7.0020.0002] # WEARY FACE +1F62A ; [*18C8.0020.0002] # SLEEPY FACE +1F62B ; [*18C9.0020.0002] # TIRED FACE +1F62C ; [*18CA.0020.0002] # GRIMACING FACE +1F62D ; [*18CB.0020.0002] # LOUDLY CRYING FACE +1F62E ; [*18CC.0020.0002] # FACE WITH OPEN MOUTH +1F62F ; [*18CD.0020.0002] # HUSHED FACE +1F630 ; [*18CE.0020.0002] # FACE WITH OPEN MOUTH AND COLD SWEAT +1F631 ; [*18CF.0020.0002] # FACE SCREAMING IN FEAR +1F632 ; [*18D0.0020.0002] # ASTONISHED FACE +1F633 ; [*18D1.0020.0002] # FLUSHED FACE +1F634 ; [*18D2.0020.0002] # SLEEPING FACE +1F635 ; [*18D3.0020.0002] # DIZZY FACE +1F636 ; [*18D4.0020.0002] # FACE WITHOUT MOUTH +1F637 ; [*18D5.0020.0002] # FACE WITH MEDICAL MASK +1F638 ; [*18D6.0020.0002] # GRINNING CAT FACE WITH SMILING EYES +1F639 ; [*18D7.0020.0002] # CAT FACE WITH TEARS OF JOY +1F63A ; [*18D8.0020.0002] # SMILING CAT FACE WITH OPEN MOUTH +1F63B ; [*18D9.0020.0002] # SMILING CAT FACE WITH HEART-SHAPED EYES +1F63C ; [*18DA.0020.0002] # CAT FACE WITH WRY SMILE +1F63D ; [*18DB.0020.0002] # KISSING CAT FACE WITH CLOSED EYES +1F63E ; [*18DC.0020.0002] # POUTING CAT FACE +1F63F ; [*18DD.0020.0002] # CRYING CAT FACE +1F640 ; [*18DE.0020.0002] # WEARY CAT FACE +1F641 ; [*18DF.0020.0002] # SLIGHTLY FROWNING FACE +1F642 ; [*18E0.0020.0002] # SLIGHTLY SMILING FACE +1F643 ; [*18E1.0020.0002] # UPSIDE-DOWN FACE +1F644 ; [*18E2.0020.0002] # FACE WITH ROLLING EYES +1F645 ; [*18E3.0020.0002] # FACE WITH NO GOOD GESTURE +1F646 ; [*18E4.0020.0002] # FACE WITH OK GESTURE +1F647 ; [*18E5.0020.0002] # PERSON BOWING DEEPLY +1F648 ; [*18E6.0020.0002] # SEE-NO-EVIL MONKEY +1F649 ; [*18E7.0020.0002] # HEAR-NO-EVIL MONKEY +1F64A ; [*18E8.0020.0002] # SPEAK-NO-EVIL MONKEY +1F64B ; [*18E9.0020.0002] # HAPPY PERSON RAISING ONE HAND +1F64C ; [*18EA.0020.0002] # PERSON RAISING BOTH HANDS IN CELEBRATION +1F64D ; [*18EB.0020.0002] # PERSON FROWNING +1F64E ; [*18EC.0020.0002] # PERSON WITH POUTING FACE +1F64F ; [*18ED.0020.0002] # PERSON WITH FOLDED HANDS +1F650 ; [*18EE.0020.0002] # NORTH WEST POINTING LEAF +1F651 ; [*18EF.0020.0002] # SOUTH WEST POINTING LEAF +1F652 ; [*18F0.0020.0002] # NORTH EAST POINTING LEAF +1F653 ; [*18F1.0020.0002] # SOUTH EAST POINTING LEAF +1F654 ; [*18F2.0020.0002] # TURNED NORTH WEST POINTING LEAF +1F655 ; [*18F3.0020.0002] # TURNED SOUTH WEST POINTING LEAF +1F656 ; [*18F4.0020.0002] # TURNED NORTH EAST POINTING LEAF +1F657 ; [*18F5.0020.0002] # TURNED SOUTH EAST POINTING LEAF +1F658 ; [*18F6.0020.0002] # NORTH WEST POINTING VINE LEAF +1F659 ; [*18F7.0020.0002] # SOUTH WEST POINTING VINE LEAF +1F65A ; [*18F8.0020.0002] # NORTH EAST POINTING VINE LEAF +1F65B ; [*18F9.0020.0002] # SOUTH EAST POINTING VINE LEAF +1F65C ; [*18FA.0020.0002] # HEAVY NORTH WEST POINTING VINE LEAF +1F65D ; [*18FB.0020.0002] # HEAVY SOUTH WEST POINTING VINE LEAF +1F65E ; [*18FC.0020.0002] # HEAVY NORTH EAST POINTING VINE LEAF +1F65F ; [*18FD.0020.0002] # HEAVY SOUTH EAST POINTING VINE LEAF +1F660 ; [*18FE.0020.0002] # NORTH WEST POINTING BUD +1F661 ; [*18FF.0020.0002] # SOUTH WEST POINTING BUD +1F662 ; [*1900.0020.0002] # NORTH EAST POINTING BUD +1F663 ; [*1901.0020.0002] # SOUTH EAST POINTING BUD +1F664 ; [*1902.0020.0002] # HEAVY NORTH WEST POINTING BUD +1F665 ; [*1903.0020.0002] # HEAVY SOUTH WEST POINTING BUD +1F666 ; [*1904.0020.0002] # HEAVY NORTH EAST POINTING BUD +1F667 ; [*1905.0020.0002] # HEAVY SOUTH EAST POINTING BUD +1F668 ; [*1906.0020.0002] # HOLLOW QUILT SQUARE ORNAMENT +1F669 ; [*1907.0020.0002] # HOLLOW QUILT SQUARE ORNAMENT IN BLACK SQUARE +1F66A ; [*1908.0020.0002] # SOLID QUILT SQUARE ORNAMENT +1F66B ; [*1909.0020.0002] # SOLID QUILT SQUARE ORNAMENT IN BLACK SQUARE +1F66C ; [*190A.0020.0002] # LEFTWARDS ROCKET +1F66D ; [*190B.0020.0002] # UPWARDS ROCKET +1F66E ; [*190C.0020.0002] # RIGHTWARDS ROCKET +1F66F ; [*190D.0020.0002] # DOWNWARDS ROCKET +1F670 ; [*190E.0020.0002] # SCRIPT LIGATURE ET ORNAMENT +1F671 ; [*190F.0020.0002] # HEAVY SCRIPT LIGATURE ET ORNAMENT +1F672 ; [*1910.0020.0002] # LIGATURE OPEN ET ORNAMENT +1F673 ; [*1911.0020.0002] # HEAVY LIGATURE OPEN ET ORNAMENT +1F674 ; [*1912.0020.0002] # HEAVY AMPERSAND ORNAMENT +1F675 ; [*1913.0020.0002] # SWASH AMPERSAND ORNAMENT +1F676 ; [*1914.0020.0002] # SANS-SERIF HEAVY DOUBLE TURNED COMMA QUOTATION MARK ORNAMENT +1F677 ; [*1915.0020.0002] # SANS-SERIF HEAVY DOUBLE COMMA QUOTATION MARK ORNAMENT +1F678 ; [*1916.0020.0002] # SANS-SERIF HEAVY LOW DOUBLE COMMA QUOTATION MARK ORNAMENT +1F679 ; [*1917.0020.0002] # HEAVY INTERROBANG ORNAMENT +1F67A ; [*1918.0020.0002] # SANS-SERIF INTERROBANG ORNAMENT +1F67B ; [*1919.0020.0002] # HEAVY SANS-SERIF INTERROBANG ORNAMENT +1F67C ; [*191A.0020.0002] # VERY HEAVY SOLIDUS +1F67D ; [*191B.0020.0002] # VERY HEAVY REVERSE SOLIDUS +1F67E ; [*191C.0020.0002] # CHECKER BOARD +1F67F ; [*191D.0020.0002] # REVERSE CHECKER BOARD +1F680 ; [*191E.0020.0002] # ROCKET +1F681 ; [*191F.0020.0002] # HELICOPTER +1F682 ; [*1920.0020.0002] # STEAM LOCOMOTIVE +1F683 ; [*1921.0020.0002] # RAILWAY CAR +1F684 ; [*1922.0020.0002] # HIGH-SPEED TRAIN +1F685 ; [*1923.0020.0002] # HIGH-SPEED TRAIN WITH BULLET NOSE +1F686 ; [*1924.0020.0002] # TRAIN +1F687 ; [*1925.0020.0002] # METRO +1F688 ; [*1926.0020.0002] # LIGHT RAIL +1F689 ; [*1927.0020.0002] # STATION +1F68A ; [*1928.0020.0002] # TRAM +1F68B ; [*1929.0020.0002] # TRAM CAR +1F68C ; [*192A.0020.0002] # BUS +1F68D ; [*192B.0020.0002] # ONCOMING BUS +1F68E ; [*192C.0020.0002] # TROLLEYBUS +1F68F ; [*192D.0020.0002] # BUS STOP +1F690 ; [*192E.0020.0002] # MINIBUS +1F691 ; [*192F.0020.0002] # AMBULANCE +1F692 ; [*1930.0020.0002] # FIRE ENGINE +1F693 ; [*1931.0020.0002] # POLICE CAR +1F694 ; [*1932.0020.0002] # ONCOMING POLICE CAR +1F695 ; [*1933.0020.0002] # TAXI +1F696 ; [*1934.0020.0002] # ONCOMING TAXI +1F697 ; [*1935.0020.0002] # AUTOMOBILE +1F698 ; [*1936.0020.0002] # ONCOMING AUTOMOBILE +1F699 ; [*1937.0020.0002] # RECREATIONAL VEHICLE +1F69A ; [*1938.0020.0002] # DELIVERY TRUCK +1F69B ; [*1939.0020.0002] # ARTICULATED LORRY +1F69C ; [*193A.0020.0002] # TRACTOR +1F69D ; [*193B.0020.0002] # MONORAIL +1F69E ; [*193C.0020.0002] # MOUNTAIN RAILWAY +1F69F ; [*193D.0020.0002] # SUSPENSION RAILWAY +1F6A0 ; [*193E.0020.0002] # MOUNTAIN CABLEWAY +1F6A1 ; [*193F.0020.0002] # AERIAL TRAMWAY +1F6A2 ; [*1940.0020.0002] # SHIP +1F6A3 ; [*1941.0020.0002] # ROWBOAT +1F6A4 ; [*1942.0020.0002] # SPEEDBOAT +1F6A5 ; [*1943.0020.0002] # HORIZONTAL TRAFFIC LIGHT +1F6A6 ; [*1944.0020.0002] # VERTICAL TRAFFIC LIGHT +1F6A7 ; [*1945.0020.0002] # CONSTRUCTION SIGN +1F6A8 ; [*1946.0020.0002] # POLICE CARS REVOLVING LIGHT +1F6A9 ; [*1947.0020.0002] # TRIANGULAR FLAG ON POST +1F6AA ; [*1948.0020.0002] # DOOR +1F6AB ; [*1949.0020.0002] # NO ENTRY SIGN +1F6AC ; [*194A.0020.0002] # SMOKING SYMBOL +1F6AD ; [*194B.0020.0002] # NO SMOKING SYMBOL +1F6AE ; [*194C.0020.0002] # PUT LITTER IN ITS PLACE SYMBOL +1F6AF ; [*194D.0020.0002] # DO NOT LITTER SYMBOL +1F6B0 ; [*194E.0020.0002] # POTABLE WATER SYMBOL +1F6B1 ; [*194F.0020.0002] # NON-POTABLE WATER SYMBOL +1F6B2 ; [*1950.0020.0002] # BICYCLE +1F6B3 ; [*1951.0020.0002] # NO BICYCLES +1F6B4 ; [*1952.0020.0002] # BICYCLIST +1F6B5 ; [*1953.0020.0002] # MOUNTAIN BICYCLIST +1F6B6 ; [*1954.0020.0002] # PEDESTRIAN +1F6B7 ; [*1955.0020.0002] # NO PEDESTRIANS +1F6B8 ; [*1956.0020.0002] # CHILDREN CROSSING +1F6B9 ; [*1957.0020.0002] # MENS SYMBOL +1F6BA ; [*1958.0020.0002] # WOMENS SYMBOL +1F6BB ; [*1959.0020.0002] # RESTROOM +1F6BC ; [*195A.0020.0002] # BABY SYMBOL +1F6BD ; [*195B.0020.0002] # TOILET +1F6BE ; [*195C.0020.0002] # WATER CLOSET +1F6BF ; [*195D.0020.0002] # SHOWER +1F6C0 ; [*195E.0020.0002] # BATH +1F6C1 ; [*195F.0020.0002] # BATHTUB +1F6C2 ; [*1960.0020.0002] # PASSPORT CONTROL +1F6C3 ; [*1961.0020.0002] # CUSTOMS +1F6C4 ; [*1962.0020.0002] # BAGGAGE CLAIM +1F6C5 ; [*1963.0020.0002] # LEFT LUGGAGE +1F6C6 ; [*1964.0020.0002] # TRIANGLE WITH ROUNDED CORNERS +1F6C7 ; [*1965.0020.0002] # PROHIBITED SIGN +1F6C8 ; [*1966.0020.0002] # CIRCLED INFORMATION SOURCE +1F6C9 ; [*1967.0020.0002] # BOYS SYMBOL +1F6CA ; [*1968.0020.0002] # GIRLS SYMBOL +1F6CB ; [*1969.0020.0002] # COUCH AND LAMP +1F6CC ; [*196A.0020.0002] # SLEEPING ACCOMMODATION +1F6CD ; [*196B.0020.0002] # SHOPPING BAGS +1F6CE ; [*196C.0020.0002] # BELLHOP BELL +1F6CF ; [*196D.0020.0002] # BED +1F6D0 ; [*196E.0020.0002] # PLACE OF WORSHIP +1F6D1 ; [*196F.0020.0002] # OCTAGONAL SIGN +1F6D2 ; [*1970.0020.0002] # SHOPPING TROLLEY +1F6D3 ; [*1971.0020.0002] # STUPA +1F6D4 ; [*1972.0020.0002] # PAGODA +1F6D5 ; [*1973.0020.0002] # HINDU TEMPLE +1F6D6 ; [*1974.0020.0002] # HUT +1F6D7 ; [*1975.0020.0002] # ELEVATOR +1F6E0 ; [*1976.0020.0002] # HAMMER AND WRENCH +1F6E1 ; [*1977.0020.0002] # SHIELD +1F6E2 ; [*1978.0020.0002] # OIL DRUM +1F6E3 ; [*1979.0020.0002] # MOTORWAY +1F6E4 ; [*197A.0020.0002] # RAILWAY TRACK +1F6E5 ; [*197B.0020.0002] # MOTOR BOAT +1F6E6 ; [*197C.0020.0002] # UP-POINTING MILITARY AIRPLANE +1F6E7 ; [*197D.0020.0002] # UP-POINTING AIRPLANE +1F6E8 ; [*197E.0020.0002] # UP-POINTING SMALL AIRPLANE +1F6E9 ; [*197F.0020.0002] # SMALL AIRPLANE +1F6EA ; [*1980.0020.0002] # NORTHEAST-POINTING AIRPLANE +1F6EB ; [*1981.0020.0002] # AIRPLANE DEPARTURE +1F6EC ; [*1982.0020.0002] # AIRPLANE ARRIVING +1F6F0 ; [*1983.0020.0002] # SATELLITE +1F6F1 ; [*1984.0020.0002] # ONCOMING FIRE ENGINE +1F6F2 ; [*1985.0020.0002] # DIESEL LOCOMOTIVE +1F6F3 ; [*1986.0020.0002] # PASSENGER SHIP +1F6F4 ; [*1987.0020.0002] # SCOOTER +1F6F5 ; [*1988.0020.0002] # MOTOR SCOOTER +1F6F6 ; [*1989.0020.0002] # CANOE +1F6F7 ; [*198A.0020.0002] # SLED +1F6F8 ; [*198B.0020.0002] # FLYING SAUCER +1F6F9 ; [*198C.0020.0002] # SKATEBOARD +1F6FA ; [*198D.0020.0002] # AUTO RICKSHAW +1F6FB ; [*198E.0020.0002] # PICKUP TRUCK +1F6FC ; [*198F.0020.0002] # ROLLER SKATE +1F700 ; [*1990.0020.0002] # ALCHEMICAL SYMBOL FOR QUINTESSENCE +1F701 ; [*1991.0020.0002] # ALCHEMICAL SYMBOL FOR AIR +1F702 ; [*1992.0020.0002] # ALCHEMICAL SYMBOL FOR FIRE +1F703 ; [*1993.0020.0002] # ALCHEMICAL SYMBOL FOR EARTH +1F704 ; [*1994.0020.0002] # ALCHEMICAL SYMBOL FOR WATER +1F705 ; [*1995.0020.0002] # ALCHEMICAL SYMBOL FOR AQUAFORTIS +1F706 ; [*1996.0020.0002] # ALCHEMICAL SYMBOL FOR AQUA REGIA +1F707 ; [*1997.0020.0002] # ALCHEMICAL SYMBOL FOR AQUA REGIA-2 +1F708 ; [*1998.0020.0002] # ALCHEMICAL SYMBOL FOR AQUA VITAE +1F709 ; [*1999.0020.0002] # ALCHEMICAL SYMBOL FOR AQUA VITAE-2 +1F70A ; [*199A.0020.0002] # ALCHEMICAL SYMBOL FOR VINEGAR +1F70B ; [*199B.0020.0002] # ALCHEMICAL SYMBOL FOR VINEGAR-2 +1F70C ; [*199C.0020.0002] # ALCHEMICAL SYMBOL FOR VINEGAR-3 +1F70D ; [*199D.0020.0002] # ALCHEMICAL SYMBOL FOR SULFUR +1F70E ; [*199E.0020.0002] # ALCHEMICAL SYMBOL FOR PHILOSOPHERS SULFUR +1F70F ; [*199F.0020.0002] # ALCHEMICAL SYMBOL FOR BLACK SULFUR +1F710 ; [*19A0.0020.0002] # ALCHEMICAL SYMBOL FOR MERCURY SUBLIMATE +1F711 ; [*19A1.0020.0002] # ALCHEMICAL SYMBOL FOR MERCURY SUBLIMATE-2 +1F712 ; [*19A2.0020.0002] # ALCHEMICAL SYMBOL FOR MERCURY SUBLIMATE-3 +1F713 ; [*19A3.0020.0002] # ALCHEMICAL SYMBOL FOR CINNABAR +1F714 ; [*19A4.0020.0002] # ALCHEMICAL SYMBOL FOR SALT +1F715 ; [*19A5.0020.0002] # ALCHEMICAL SYMBOL FOR NITRE +1F716 ; [*19A6.0020.0002] # ALCHEMICAL SYMBOL FOR VITRIOL +1F717 ; [*19A7.0020.0002] # ALCHEMICAL SYMBOL FOR VITRIOL-2 +1F718 ; [*19A8.0020.0002] # ALCHEMICAL SYMBOL FOR ROCK SALT +1F719 ; [*19A9.0020.0002] # ALCHEMICAL SYMBOL FOR ROCK SALT-2 +1F71A ; [*19AA.0020.0002] # ALCHEMICAL SYMBOL FOR GOLD +1F71B ; [*19AB.0020.0002] # ALCHEMICAL SYMBOL FOR SILVER +1F71C ; [*19AC.0020.0002] # ALCHEMICAL SYMBOL FOR IRON ORE +1F71D ; [*19AD.0020.0002] # ALCHEMICAL SYMBOL FOR IRON ORE-2 +1F71E ; [*19AE.0020.0002] # ALCHEMICAL SYMBOL FOR CROCUS OF IRON +1F71F ; [*19AF.0020.0002] # ALCHEMICAL SYMBOL FOR REGULUS OF IRON +1F720 ; [*19B0.0020.0002] # ALCHEMICAL SYMBOL FOR COPPER ORE +1F721 ; [*19B1.0020.0002] # ALCHEMICAL SYMBOL FOR IRON-COPPER ORE +1F722 ; [*19B2.0020.0002] # ALCHEMICAL SYMBOL FOR SUBLIMATE OF COPPER +1F723 ; [*19B3.0020.0002] # ALCHEMICAL SYMBOL FOR CROCUS OF COPPER +1F724 ; [*19B4.0020.0002] # ALCHEMICAL SYMBOL FOR CROCUS OF COPPER-2 +1F725 ; [*19B5.0020.0002] # ALCHEMICAL SYMBOL FOR COPPER ANTIMONIATE +1F726 ; [*19B6.0020.0002] # ALCHEMICAL SYMBOL FOR SALT OF COPPER ANTIMONIATE +1F727 ; [*19B7.0020.0002] # ALCHEMICAL SYMBOL FOR SUBLIMATE OF SALT OF COPPER +1F728 ; [*19B8.0020.0002] # ALCHEMICAL SYMBOL FOR VERDIGRIS +1F729 ; [*19B9.0020.0002] # ALCHEMICAL SYMBOL FOR TIN ORE +1F72A ; [*19BA.0020.0002] # ALCHEMICAL SYMBOL FOR LEAD ORE +1F72B ; [*19BB.0020.0002] # ALCHEMICAL SYMBOL FOR ANTIMONY ORE +1F72C ; [*19BC.0020.0002] # ALCHEMICAL SYMBOL FOR SUBLIMATE OF ANTIMONY +1F72D ; [*19BD.0020.0002] # ALCHEMICAL SYMBOL FOR SALT OF ANTIMONY +1F72E ; [*19BE.0020.0002] # ALCHEMICAL SYMBOL FOR SUBLIMATE OF SALT OF ANTIMONY +1F72F ; [*19BF.0020.0002] # ALCHEMICAL SYMBOL FOR VINEGAR OF ANTIMONY +1F730 ; [*19C0.0020.0002] # ALCHEMICAL SYMBOL FOR REGULUS OF ANTIMONY +1F731 ; [*19C1.0020.0002] # ALCHEMICAL SYMBOL FOR REGULUS OF ANTIMONY-2 +1F732 ; [*19C2.0020.0002] # ALCHEMICAL SYMBOL FOR REGULUS +1F733 ; [*19C3.0020.0002] # ALCHEMICAL SYMBOL FOR REGULUS-2 +1F734 ; [*19C4.0020.0002] # ALCHEMICAL SYMBOL FOR REGULUS-3 +1F735 ; [*19C5.0020.0002] # ALCHEMICAL SYMBOL FOR REGULUS-4 +1F736 ; [*19C6.0020.0002] # ALCHEMICAL SYMBOL FOR ALKALI +1F737 ; [*19C7.0020.0002] # ALCHEMICAL SYMBOL FOR ALKALI-2 +1F738 ; [*19C8.0020.0002] # ALCHEMICAL SYMBOL FOR MARCASITE +1F739 ; [*19C9.0020.0002] # ALCHEMICAL SYMBOL FOR SAL-AMMONIAC +1F73A ; [*19CA.0020.0002] # ALCHEMICAL SYMBOL FOR ARSENIC +1F73B ; [*19CB.0020.0002] # ALCHEMICAL SYMBOL FOR REALGAR +1F73C ; [*19CC.0020.0002] # ALCHEMICAL SYMBOL FOR REALGAR-2 +1F73D ; [*19CD.0020.0002] # ALCHEMICAL SYMBOL FOR AURIPIGMENT +1F73E ; [*19CE.0020.0002] # ALCHEMICAL SYMBOL FOR BISMUTH ORE +1F73F ; [*19CF.0020.0002] # ALCHEMICAL SYMBOL FOR TARTAR +1F740 ; [*19D0.0020.0002] # ALCHEMICAL SYMBOL FOR TARTAR-2 +1F741 ; [*19D1.0020.0002] # ALCHEMICAL SYMBOL FOR QUICK LIME +1F742 ; [*19D2.0020.0002] # ALCHEMICAL SYMBOL FOR BORAX +1F743 ; [*19D3.0020.0002] # ALCHEMICAL SYMBOL FOR BORAX-2 +1F744 ; [*19D4.0020.0002] # ALCHEMICAL SYMBOL FOR BORAX-3 +1F745 ; [*19D5.0020.0002] # ALCHEMICAL SYMBOL FOR ALUM +1F746 ; [*19D6.0020.0002] # ALCHEMICAL SYMBOL FOR OIL +1F747 ; [*19D7.0020.0002] # ALCHEMICAL SYMBOL FOR SPIRIT +1F748 ; [*19D8.0020.0002] # ALCHEMICAL SYMBOL FOR TINCTURE +1F749 ; [*19D9.0020.0002] # ALCHEMICAL SYMBOL FOR GUM +1F74A ; [*19DA.0020.0002] # ALCHEMICAL SYMBOL FOR WAX +1F74B ; [*19DB.0020.0002] # ALCHEMICAL SYMBOL FOR POWDER +1F74C ; [*19DC.0020.0002] # ALCHEMICAL SYMBOL FOR CALX +1F74D ; [*19DD.0020.0002] # ALCHEMICAL SYMBOL FOR TUTTY +1F74E ; [*19DE.0020.0002] # ALCHEMICAL SYMBOL FOR CAPUT MORTUUM +1F74F ; [*19DF.0020.0002] # ALCHEMICAL SYMBOL FOR SCEPTER OF JOVE +1F750 ; [*19E0.0020.0002] # ALCHEMICAL SYMBOL FOR CADUCEUS +1F751 ; [*19E1.0020.0002] # ALCHEMICAL SYMBOL FOR TRIDENT +1F752 ; [*19E2.0020.0002] # ALCHEMICAL SYMBOL FOR STARRED TRIDENT +1F753 ; [*19E3.0020.0002] # ALCHEMICAL SYMBOL FOR LODESTONE +1F754 ; [*19E4.0020.0002] # ALCHEMICAL SYMBOL FOR SOAP +1F755 ; [*19E5.0020.0002] # ALCHEMICAL SYMBOL FOR URINE +1F756 ; [*19E6.0020.0002] # ALCHEMICAL SYMBOL FOR HORSE DUNG +1F757 ; [*19E7.0020.0002] # ALCHEMICAL SYMBOL FOR ASHES +1F758 ; [*19E8.0020.0002] # ALCHEMICAL SYMBOL FOR POT ASHES +1F759 ; [*19E9.0020.0002] # ALCHEMICAL SYMBOL FOR BRICK +1F75A ; [*19EA.0020.0002] # ALCHEMICAL SYMBOL FOR POWDERED BRICK +1F75B ; [*19EB.0020.0002] # ALCHEMICAL SYMBOL FOR AMALGAM +1F75C ; [*19EC.0020.0002] # ALCHEMICAL SYMBOL FOR STRATUM SUPER STRATUM +1F75D ; [*19ED.0020.0002] # ALCHEMICAL SYMBOL FOR STRATUM SUPER STRATUM-2 +1F75E ; [*19EE.0020.0002] # ALCHEMICAL SYMBOL FOR SUBLIMATION +1F75F ; [*19EF.0020.0002] # ALCHEMICAL SYMBOL FOR PRECIPITATE +1F760 ; [*19F0.0020.0002] # ALCHEMICAL SYMBOL FOR DISTILL +1F761 ; [*19F1.0020.0002] # ALCHEMICAL SYMBOL FOR DISSOLVE +1F762 ; [*19F2.0020.0002] # ALCHEMICAL SYMBOL FOR DISSOLVE-2 +1F763 ; [*19F3.0020.0002] # ALCHEMICAL SYMBOL FOR PURIFY +1F764 ; [*19F4.0020.0002] # ALCHEMICAL SYMBOL FOR PUTREFACTION +1F765 ; [*19F5.0020.0002] # ALCHEMICAL SYMBOL FOR CRUCIBLE +1F766 ; [*19F6.0020.0002] # ALCHEMICAL SYMBOL FOR CRUCIBLE-2 +1F767 ; [*19F7.0020.0002] # ALCHEMICAL SYMBOL FOR CRUCIBLE-3 +1F768 ; [*19F8.0020.0002] # ALCHEMICAL SYMBOL FOR CRUCIBLE-4 +1F769 ; [*19F9.0020.0002] # ALCHEMICAL SYMBOL FOR CRUCIBLE-5 +1F76A ; [*19FA.0020.0002] # ALCHEMICAL SYMBOL FOR ALEMBIC +1F76B ; [*19FB.0020.0002] # ALCHEMICAL SYMBOL FOR BATH OF MARY +1F76C ; [*19FC.0020.0002] # ALCHEMICAL SYMBOL FOR BATH OF VAPOURS +1F76D ; [*19FD.0020.0002] # ALCHEMICAL SYMBOL FOR RETORT +1F76E ; [*19FE.0020.0002] # ALCHEMICAL SYMBOL FOR HOUR +1F76F ; [*19FF.0020.0002] # ALCHEMICAL SYMBOL FOR NIGHT +1F770 ; [*1A00.0020.0002] # ALCHEMICAL SYMBOL FOR DAY-NIGHT +1F771 ; [*1A01.0020.0002] # ALCHEMICAL SYMBOL FOR MONTH +1F772 ; [*1A02.0020.0002] # ALCHEMICAL SYMBOL FOR HALF DRAM +1F773 ; [*1A03.0020.0002] # ALCHEMICAL SYMBOL FOR HALF OUNCE +1F780 ; [*1A04.0020.0002] # BLACK LEFT-POINTING ISOSCELES RIGHT TRIANGLE +1F781 ; [*1A05.0020.0002] # BLACK UP-POINTING ISOSCELES RIGHT TRIANGLE +1F782 ; [*1A06.0020.0002] # BLACK RIGHT-POINTING ISOSCELES RIGHT TRIANGLE +1F783 ; [*1A07.0020.0002] # BLACK DOWN-POINTING ISOSCELES RIGHT TRIANGLE +1F784 ; [*1A08.0020.0002] # BLACK SLIGHTLY SMALL CIRCLE +1F785 ; [*1A09.0020.0002] # MEDIUM BOLD WHITE CIRCLE +1F786 ; [*1A0A.0020.0002] # BOLD WHITE CIRCLE +1F787 ; [*1A0B.0020.0002] # HEAVY WHITE CIRCLE +1F788 ; [*1A0C.0020.0002] # VERY HEAVY WHITE CIRCLE +1F789 ; [*1A0D.0020.0002] # EXTREMELY HEAVY WHITE CIRCLE +1F78A ; [*1A0E.0020.0002] # WHITE CIRCLE CONTAINING BLACK SMALL CIRCLE +1F78B ; [*1A0F.0020.0002] # ROUND TARGET +1F78C ; [*1A10.0020.0002] # BLACK TINY SQUARE +1F78D ; [*1A11.0020.0002] # BLACK SLIGHTLY SMALL SQUARE +1F78E ; [*1A12.0020.0002] # LIGHT WHITE SQUARE +1F78F ; [*1A13.0020.0002] # MEDIUM WHITE SQUARE +1F790 ; [*1A14.0020.0002] # BOLD WHITE SQUARE +1F791 ; [*1A15.0020.0002] # HEAVY WHITE SQUARE +1F792 ; [*1A16.0020.0002] # VERY HEAVY WHITE SQUARE +1F793 ; [*1A17.0020.0002] # EXTREMELY HEAVY WHITE SQUARE +1F794 ; [*1A18.0020.0002] # WHITE SQUARE CONTAINING BLACK VERY SMALL SQUARE +1F795 ; [*1A19.0020.0002] # WHITE SQUARE CONTAINING BLACK MEDIUM SQUARE +1F796 ; [*1A1A.0020.0002] # SQUARE TARGET +1F797 ; [*1A1B.0020.0002] # BLACK TINY DIAMOND +1F798 ; [*1A1C.0020.0002] # BLACK VERY SMALL DIAMOND +1F799 ; [*1A1D.0020.0002] # BLACK MEDIUM SMALL DIAMOND +1F79A ; [*1A1E.0020.0002] # WHITE DIAMOND CONTAINING BLACK VERY SMALL DIAMOND +1F79B ; [*1A1F.0020.0002] # WHITE DIAMOND CONTAINING BLACK MEDIUM DIAMOND +1F79C ; [*1A20.0020.0002] # DIAMOND TARGET +1F79D ; [*1A21.0020.0002] # BLACK TINY LOZENGE +1F79E ; [*1A22.0020.0002] # BLACK VERY SMALL LOZENGE +1F79F ; [*1A23.0020.0002] # BLACK MEDIUM SMALL LOZENGE +1F7A0 ; [*1A24.0020.0002] # WHITE LOZENGE CONTAINING BLACK SMALL LOZENGE +1F7A1 ; [*1A25.0020.0002] # THIN GREEK CROSS +1F7A2 ; [*1A26.0020.0002] # LIGHT GREEK CROSS +1F7A3 ; [*1A27.0020.0002] # MEDIUM GREEK CROSS +1F7A4 ; [*1A28.0020.0002] # BOLD GREEK CROSS +1F7A5 ; [*1A29.0020.0002] # VERY BOLD GREEK CROSS +1F7A6 ; [*1A2A.0020.0002] # VERY HEAVY GREEK CROSS +1F7A7 ; [*1A2B.0020.0002] # EXTREMELY HEAVY GREEK CROSS +1F7A8 ; [*1A2C.0020.0002] # THIN SALTIRE +1F7A9 ; [*1A2D.0020.0002] # LIGHT SALTIRE +1F7AA ; [*1A2E.0020.0002] # MEDIUM SALTIRE +1F7AB ; [*1A2F.0020.0002] # BOLD SALTIRE +1F7AC ; [*1A30.0020.0002] # HEAVY SALTIRE +1F7AD ; [*1A31.0020.0002] # VERY HEAVY SALTIRE +1F7AE ; [*1A32.0020.0002] # EXTREMELY HEAVY SALTIRE +1F7AF ; [*1A33.0020.0002] # LIGHT FIVE SPOKED ASTERISK +1F7B0 ; [*1A34.0020.0002] # MEDIUM FIVE SPOKED ASTERISK +1F7B1 ; [*1A35.0020.0002] # BOLD FIVE SPOKED ASTERISK +1F7B2 ; [*1A36.0020.0002] # HEAVY FIVE SPOKED ASTERISK +1F7B3 ; [*1A37.0020.0002] # VERY HEAVY FIVE SPOKED ASTERISK +1F7B4 ; [*1A38.0020.0002] # EXTREMELY HEAVY FIVE SPOKED ASTERISK +1F7B5 ; [*1A39.0020.0002] # LIGHT SIX SPOKED ASTERISK +1F7B6 ; [*1A3A.0020.0002] # MEDIUM SIX SPOKED ASTERISK +1F7B7 ; [*1A3B.0020.0002] # BOLD SIX SPOKED ASTERISK +1F7B8 ; [*1A3C.0020.0002] # HEAVY SIX SPOKED ASTERISK +1F7B9 ; [*1A3D.0020.0002] # VERY HEAVY SIX SPOKED ASTERISK +1F7BA ; [*1A3E.0020.0002] # EXTREMELY HEAVY SIX SPOKED ASTERISK +1F7BB ; [*1A3F.0020.0002] # LIGHT EIGHT SPOKED ASTERISK +1F7BC ; [*1A40.0020.0002] # MEDIUM EIGHT SPOKED ASTERISK +1F7BD ; [*1A41.0020.0002] # BOLD EIGHT SPOKED ASTERISK +1F7BE ; [*1A42.0020.0002] # HEAVY EIGHT SPOKED ASTERISK +1F7BF ; [*1A43.0020.0002] # VERY HEAVY EIGHT SPOKED ASTERISK +1F7C0 ; [*1A44.0020.0002] # LIGHT THREE POINTED BLACK STAR +1F7C1 ; [*1A45.0020.0002] # MEDIUM THREE POINTED BLACK STAR +1F7C2 ; [*1A46.0020.0002] # THREE POINTED BLACK STAR +1F7C3 ; [*1A47.0020.0002] # MEDIUM THREE POINTED PINWHEEL STAR +1F7C4 ; [*1A48.0020.0002] # LIGHT FOUR POINTED BLACK STAR +1F7C5 ; [*1A49.0020.0002] # MEDIUM FOUR POINTED BLACK STAR +1F7C6 ; [*1A4A.0020.0002] # FOUR POINTED BLACK STAR +1F7C7 ; [*1A4B.0020.0002] # MEDIUM FOUR POINTED PINWHEEL STAR +1F7C8 ; [*1A4C.0020.0002] # REVERSE LIGHT FOUR POINTED PINWHEEL STAR +1F7C9 ; [*1A4D.0020.0002] # LIGHT FIVE POINTED BLACK STAR +1F7CA ; [*1A4E.0020.0002] # HEAVY FIVE POINTED BLACK STAR +1F7CB ; [*1A4F.0020.0002] # MEDIUM SIX POINTED BLACK STAR +1F7CC ; [*1A50.0020.0002] # HEAVY SIX POINTED BLACK STAR +1F7CD ; [*1A51.0020.0002] # SIX POINTED PINWHEEL STAR +1F7CE ; [*1A52.0020.0002] # MEDIUM EIGHT POINTED BLACK STAR +1F7CF ; [*1A53.0020.0002] # HEAVY EIGHT POINTED BLACK STAR +1F7D0 ; [*1A54.0020.0002] # VERY HEAVY EIGHT POINTED BLACK STAR +1F7D1 ; [*1A55.0020.0002] # HEAVY EIGHT POINTED PINWHEEL STAR +1F7D2 ; [*1A56.0020.0002] # LIGHT TWELVE POINTED BLACK STAR +1F7D3 ; [*1A57.0020.0002] # HEAVY TWELVE POINTED BLACK STAR +1F7D4 ; [*1A58.0020.0002] # HEAVY TWELVE POINTED PINWHEEL STAR +1F7D5 ; [*1A59.0020.0002] # CIRCLED TRIANGLE +1F7D6 ; [*1A5A.0020.0002] # NEGATIVE CIRCLED TRIANGLE +1F7D7 ; [*1A5B.0020.0002] # CIRCLED SQUARE +1F7D8 ; [*1A5C.0020.0002] # NEGATIVE CIRCLED SQUARE +1F7E0 ; [*1A5D.0020.0002] # LARGE ORANGE CIRCLE +1F7E1 ; [*1A5E.0020.0002] # LARGE YELLOW CIRCLE +1F7E2 ; [*1A5F.0020.0002] # LARGE GREEN CIRCLE +1F7E3 ; [*1A60.0020.0002] # LARGE PURPLE CIRCLE +1F7E4 ; [*1A61.0020.0002] # LARGE BROWN CIRCLE +1F7E5 ; [*1A62.0020.0002] # LARGE RED SQUARE +1F7E6 ; [*1A63.0020.0002] # LARGE BLUE SQUARE +1F7E7 ; [*1A64.0020.0002] # LARGE ORANGE SQUARE +1F7E8 ; [*1A65.0020.0002] # LARGE YELLOW SQUARE +1F7E9 ; [*1A66.0020.0002] # LARGE GREEN SQUARE +1F7EA ; [*1A67.0020.0002] # LARGE PURPLE SQUARE +1F7EB ; [*1A68.0020.0002] # LARGE BROWN SQUARE +1F800 ; [*1A69.0020.0002] # LEFTWARDS ARROW WITH SMALL TRIANGLE ARROWHEAD +1F801 ; [*1A6A.0020.0002] # UPWARDS ARROW WITH SMALL TRIANGLE ARROWHEAD +1F802 ; [*1A6B.0020.0002] # RIGHTWARDS ARROW WITH SMALL TRIANGLE ARROWHEAD +1F803 ; [*1A6C.0020.0002] # DOWNWARDS ARROW WITH SMALL TRIANGLE ARROWHEAD +1F804 ; [*1A6D.0020.0002] # LEFTWARDS ARROW WITH MEDIUM TRIANGLE ARROWHEAD +1F805 ; [*1A6E.0020.0002] # UPWARDS ARROW WITH MEDIUM TRIANGLE ARROWHEAD +1F806 ; [*1A6F.0020.0002] # RIGHTWARDS ARROW WITH MEDIUM TRIANGLE ARROWHEAD +1F807 ; [*1A70.0020.0002] # DOWNWARDS ARROW WITH MEDIUM TRIANGLE ARROWHEAD +1F808 ; [*1A71.0020.0002] # LEFTWARDS ARROW WITH LARGE TRIANGLE ARROWHEAD +1F809 ; [*1A72.0020.0002] # UPWARDS ARROW WITH LARGE TRIANGLE ARROWHEAD +1F80A ; [*1A73.0020.0002] # RIGHTWARDS ARROW WITH LARGE TRIANGLE ARROWHEAD +1F80B ; [*1A74.0020.0002] # DOWNWARDS ARROW WITH LARGE TRIANGLE ARROWHEAD +1F810 ; [*1A75.0020.0002] # LEFTWARDS ARROW WITH SMALL EQUILATERAL ARROWHEAD +1F811 ; [*1A76.0020.0002] # UPWARDS ARROW WITH SMALL EQUILATERAL ARROWHEAD +1F812 ; [*1A77.0020.0002] # RIGHTWARDS ARROW WITH SMALL EQUILATERAL ARROWHEAD +1F813 ; [*1A78.0020.0002] # DOWNWARDS ARROW WITH SMALL EQUILATERAL ARROWHEAD +1F814 ; [*1A79.0020.0002] # LEFTWARDS ARROW WITH EQUILATERAL ARROWHEAD +1F815 ; [*1A7A.0020.0002] # UPWARDS ARROW WITH EQUILATERAL ARROWHEAD +1F816 ; [*1A7B.0020.0002] # RIGHTWARDS ARROW WITH EQUILATERAL ARROWHEAD +1F817 ; [*1A7C.0020.0002] # DOWNWARDS ARROW WITH EQUILATERAL ARROWHEAD +1F818 ; [*1A7D.0020.0002] # HEAVY LEFTWARDS ARROW WITH EQUILATERAL ARROWHEAD +1F819 ; [*1A7E.0020.0002] # HEAVY UPWARDS ARROW WITH EQUILATERAL ARROWHEAD +1F81A ; [*1A7F.0020.0002] # HEAVY RIGHTWARDS ARROW WITH EQUILATERAL ARROWHEAD +1F81B ; [*1A80.0020.0002] # HEAVY DOWNWARDS ARROW WITH EQUILATERAL ARROWHEAD +1F81C ; [*1A81.0020.0002] # HEAVY LEFTWARDS ARROW WITH LARGE EQUILATERAL ARROWHEAD +1F81D ; [*1A82.0020.0002] # HEAVY UPWARDS ARROW WITH LARGE EQUILATERAL ARROWHEAD +1F81E ; [*1A83.0020.0002] # HEAVY RIGHTWARDS ARROW WITH LARGE EQUILATERAL ARROWHEAD +1F81F ; [*1A84.0020.0002] # HEAVY DOWNWARDS ARROW WITH LARGE EQUILATERAL ARROWHEAD +1F820 ; [*1A85.0020.0002] # LEFTWARDS TRIANGLE-HEADED ARROW WITH NARROW SHAFT +1F821 ; [*1A86.0020.0002] # UPWARDS TRIANGLE-HEADED ARROW WITH NARROW SHAFT +1F822 ; [*1A87.0020.0002] # RIGHTWARDS TRIANGLE-HEADED ARROW WITH NARROW SHAFT +1F823 ; [*1A88.0020.0002] # DOWNWARDS TRIANGLE-HEADED ARROW WITH NARROW SHAFT +1F824 ; [*1A89.0020.0002] # LEFTWARDS TRIANGLE-HEADED ARROW WITH MEDIUM SHAFT +1F825 ; [*1A8A.0020.0002] # UPWARDS TRIANGLE-HEADED ARROW WITH MEDIUM SHAFT +1F826 ; [*1A8B.0020.0002] # RIGHTWARDS TRIANGLE-HEADED ARROW WITH MEDIUM SHAFT +1F827 ; [*1A8C.0020.0002] # DOWNWARDS TRIANGLE-HEADED ARROW WITH MEDIUM SHAFT +1F828 ; [*1A8D.0020.0002] # LEFTWARDS TRIANGLE-HEADED ARROW WITH BOLD SHAFT +1F829 ; [*1A8E.0020.0002] # UPWARDS TRIANGLE-HEADED ARROW WITH BOLD SHAFT +1F82A ; [*1A8F.0020.0002] # RIGHTWARDS TRIANGLE-HEADED ARROW WITH BOLD SHAFT +1F82B ; [*1A90.0020.0002] # DOWNWARDS TRIANGLE-HEADED ARROW WITH BOLD SHAFT +1F82C ; [*1A91.0020.0002] # LEFTWARDS TRIANGLE-HEADED ARROW WITH HEAVY SHAFT +1F82D ; [*1A92.0020.0002] # UPWARDS TRIANGLE-HEADED ARROW WITH HEAVY SHAFT +1F82E ; [*1A93.0020.0002] # RIGHTWARDS TRIANGLE-HEADED ARROW WITH HEAVY SHAFT +1F82F ; [*1A94.0020.0002] # DOWNWARDS TRIANGLE-HEADED ARROW WITH HEAVY SHAFT +1F830 ; [*1A95.0020.0002] # LEFTWARDS TRIANGLE-HEADED ARROW WITH VERY HEAVY SHAFT +1F831 ; [*1A96.0020.0002] # UPWARDS TRIANGLE-HEADED ARROW WITH VERY HEAVY SHAFT +1F832 ; [*1A97.0020.0002] # RIGHTWARDS TRIANGLE-HEADED ARROW WITH VERY HEAVY SHAFT +1F833 ; [*1A98.0020.0002] # DOWNWARDS TRIANGLE-HEADED ARROW WITH VERY HEAVY SHAFT +1F834 ; [*1A99.0020.0002] # LEFTWARDS FINGER-POST ARROW +1F835 ; [*1A9A.0020.0002] # UPWARDS FINGER-POST ARROW +1F836 ; [*1A9B.0020.0002] # RIGHTWARDS FINGER-POST ARROW +1F837 ; [*1A9C.0020.0002] # DOWNWARDS FINGER-POST ARROW +1F838 ; [*1A9D.0020.0002] # LEFTWARDS SQUARED ARROW +1F839 ; [*1A9E.0020.0002] # UPWARDS SQUARED ARROW +1F83A ; [*1A9F.0020.0002] # RIGHTWARDS SQUARED ARROW +1F83B ; [*1AA0.0020.0002] # DOWNWARDS SQUARED ARROW +1F83C ; [*1AA1.0020.0002] # LEFTWARDS COMPRESSED ARROW +1F83D ; [*1AA2.0020.0002] # UPWARDS COMPRESSED ARROW +1F83E ; [*1AA3.0020.0002] # RIGHTWARDS COMPRESSED ARROW +1F83F ; [*1AA4.0020.0002] # DOWNWARDS COMPRESSED ARROW +1F840 ; [*1AA5.0020.0002] # LEFTWARDS HEAVY COMPRESSED ARROW +1F841 ; [*1AA6.0020.0002] # UPWARDS HEAVY COMPRESSED ARROW +1F842 ; [*1AA7.0020.0002] # RIGHTWARDS HEAVY COMPRESSED ARROW +1F843 ; [*1AA8.0020.0002] # DOWNWARDS HEAVY COMPRESSED ARROW +1F844 ; [*1AA9.0020.0002] # LEFTWARDS HEAVY ARROW +1F845 ; [*1AAA.0020.0002] # UPWARDS HEAVY ARROW +1F846 ; [*1AAB.0020.0002] # RIGHTWARDS HEAVY ARROW +1F847 ; [*1AAC.0020.0002] # DOWNWARDS HEAVY ARROW +1F850 ; [*1AAD.0020.0002] # LEFTWARDS SANS-SERIF ARROW +1F851 ; [*1AAE.0020.0002] # UPWARDS SANS-SERIF ARROW +1F852 ; [*1AAF.0020.0002] # RIGHTWARDS SANS-SERIF ARROW +1F853 ; [*1AB0.0020.0002] # DOWNWARDS SANS-SERIF ARROW +1F854 ; [*1AB1.0020.0002] # NORTH WEST SANS-SERIF ARROW +1F855 ; [*1AB2.0020.0002] # NORTH EAST SANS-SERIF ARROW +1F856 ; [*1AB3.0020.0002] # SOUTH EAST SANS-SERIF ARROW +1F857 ; [*1AB4.0020.0002] # SOUTH WEST SANS-SERIF ARROW +1F858 ; [*1AB5.0020.0002] # LEFT RIGHT SANS-SERIF ARROW +1F859 ; [*1AB6.0020.0002] # UP DOWN SANS-SERIF ARROW +1F860 ; [*1AB7.0020.0002] # WIDE-HEADED LEFTWARDS LIGHT BARB ARROW +1F861 ; [*1AB8.0020.0002] # WIDE-HEADED UPWARDS LIGHT BARB ARROW +1F862 ; [*1AB9.0020.0002] # WIDE-HEADED RIGHTWARDS LIGHT BARB ARROW +1F863 ; [*1ABA.0020.0002] # WIDE-HEADED DOWNWARDS LIGHT BARB ARROW +1F864 ; [*1ABB.0020.0002] # WIDE-HEADED NORTH WEST LIGHT BARB ARROW +1F865 ; [*1ABC.0020.0002] # WIDE-HEADED NORTH EAST LIGHT BARB ARROW +1F866 ; [*1ABD.0020.0002] # WIDE-HEADED SOUTH EAST LIGHT BARB ARROW +1F867 ; [*1ABE.0020.0002] # WIDE-HEADED SOUTH WEST LIGHT BARB ARROW +1F868 ; [*1ABF.0020.0002] # WIDE-HEADED LEFTWARDS BARB ARROW +1F869 ; [*1AC0.0020.0002] # WIDE-HEADED UPWARDS BARB ARROW +1F86A ; [*1AC1.0020.0002] # WIDE-HEADED RIGHTWARDS BARB ARROW +1F86B ; [*1AC2.0020.0002] # WIDE-HEADED DOWNWARDS BARB ARROW +1F86C ; [*1AC3.0020.0002] # WIDE-HEADED NORTH WEST BARB ARROW +1F86D ; [*1AC4.0020.0002] # WIDE-HEADED NORTH EAST BARB ARROW +1F86E ; [*1AC5.0020.0002] # WIDE-HEADED SOUTH EAST BARB ARROW +1F86F ; [*1AC6.0020.0002] # WIDE-HEADED SOUTH WEST BARB ARROW +1F870 ; [*1AC7.0020.0002] # WIDE-HEADED LEFTWARDS MEDIUM BARB ARROW +1F871 ; [*1AC8.0020.0002] # WIDE-HEADED UPWARDS MEDIUM BARB ARROW +1F872 ; [*1AC9.0020.0002] # WIDE-HEADED RIGHTWARDS MEDIUM BARB ARROW +1F873 ; [*1ACA.0020.0002] # WIDE-HEADED DOWNWARDS MEDIUM BARB ARROW +1F874 ; [*1ACB.0020.0002] # WIDE-HEADED NORTH WEST MEDIUM BARB ARROW +1F875 ; [*1ACC.0020.0002] # WIDE-HEADED NORTH EAST MEDIUM BARB ARROW +1F876 ; [*1ACD.0020.0002] # WIDE-HEADED SOUTH EAST MEDIUM BARB ARROW +1F877 ; [*1ACE.0020.0002] # WIDE-HEADED SOUTH WEST MEDIUM BARB ARROW +1F878 ; [*1ACF.0020.0002] # WIDE-HEADED LEFTWARDS HEAVY BARB ARROW +1F879 ; [*1AD0.0020.0002] # WIDE-HEADED UPWARDS HEAVY BARB ARROW +1F87A ; [*1AD1.0020.0002] # WIDE-HEADED RIGHTWARDS HEAVY BARB ARROW +1F87B ; [*1AD2.0020.0002] # WIDE-HEADED DOWNWARDS HEAVY BARB ARROW +1F87C ; [*1AD3.0020.0002] # WIDE-HEADED NORTH WEST HEAVY BARB ARROW +1F87D ; [*1AD4.0020.0002] # WIDE-HEADED NORTH EAST HEAVY BARB ARROW +1F87E ; [*1AD5.0020.0002] # WIDE-HEADED SOUTH EAST HEAVY BARB ARROW +1F87F ; [*1AD6.0020.0002] # WIDE-HEADED SOUTH WEST HEAVY BARB ARROW +1F880 ; [*1AD7.0020.0002] # WIDE-HEADED LEFTWARDS VERY HEAVY BARB ARROW +1F881 ; [*1AD8.0020.0002] # WIDE-HEADED UPWARDS VERY HEAVY BARB ARROW +1F882 ; [*1AD9.0020.0002] # WIDE-HEADED RIGHTWARDS VERY HEAVY BARB ARROW +1F883 ; [*1ADA.0020.0002] # WIDE-HEADED DOWNWARDS VERY HEAVY BARB ARROW +1F884 ; [*1ADB.0020.0002] # WIDE-HEADED NORTH WEST VERY HEAVY BARB ARROW +1F885 ; [*1ADC.0020.0002] # WIDE-HEADED NORTH EAST VERY HEAVY BARB ARROW +1F886 ; [*1ADD.0020.0002] # WIDE-HEADED SOUTH EAST VERY HEAVY BARB ARROW +1F887 ; [*1ADE.0020.0002] # WIDE-HEADED SOUTH WEST VERY HEAVY BARB ARROW +1F890 ; [*1ADF.0020.0002] # LEFTWARDS TRIANGLE ARROWHEAD +1F891 ; [*1AE0.0020.0002] # UPWARDS TRIANGLE ARROWHEAD +1F892 ; [*1AE1.0020.0002] # RIGHTWARDS TRIANGLE ARROWHEAD +1F893 ; [*1AE2.0020.0002] # DOWNWARDS TRIANGLE ARROWHEAD +1F894 ; [*1AE3.0020.0002] # LEFTWARDS WHITE ARROW WITHIN TRIANGLE ARROWHEAD +1F895 ; [*1AE4.0020.0002] # UPWARDS WHITE ARROW WITHIN TRIANGLE ARROWHEAD +1F896 ; [*1AE5.0020.0002] # RIGHTWARDS WHITE ARROW WITHIN TRIANGLE ARROWHEAD +1F897 ; [*1AE6.0020.0002] # DOWNWARDS WHITE ARROW WITHIN TRIANGLE ARROWHEAD +1F898 ; [*1AE7.0020.0002] # LEFTWARDS ARROW WITH NOTCHED TAIL +1F899 ; [*1AE8.0020.0002] # UPWARDS ARROW WITH NOTCHED TAIL +1F89A ; [*1AE9.0020.0002] # RIGHTWARDS ARROW WITH NOTCHED TAIL +1F89B ; [*1AEA.0020.0002] # DOWNWARDS ARROW WITH NOTCHED TAIL +1F89C ; [*1AEB.0020.0002] # HEAVY ARROW SHAFT WIDTH ONE +1F89D ; [*1AEC.0020.0002] # HEAVY ARROW SHAFT WIDTH TWO THIRDS +1F89E ; [*1AED.0020.0002] # HEAVY ARROW SHAFT WIDTH ONE HALF +1F89F ; [*1AEE.0020.0002] # HEAVY ARROW SHAFT WIDTH ONE THIRD +1F8A0 ; [*1AEF.0020.0002] # LEFTWARDS BOTTOM-SHADED WHITE ARROW +1F8A1 ; [*1AF0.0020.0002] # RIGHTWARDS BOTTOM SHADED WHITE ARROW +1F8A2 ; [*1AF1.0020.0002] # LEFTWARDS TOP SHADED WHITE ARROW +1F8A3 ; [*1AF2.0020.0002] # RIGHTWARDS TOP SHADED WHITE ARROW +1F8A4 ; [*1AF3.0020.0002] # LEFTWARDS LEFT-SHADED WHITE ARROW +1F8A5 ; [*1AF4.0020.0002] # RIGHTWARDS RIGHT-SHADED WHITE ARROW +1F8A6 ; [*1AF5.0020.0002] # LEFTWARDS RIGHT-SHADED WHITE ARROW +1F8A7 ; [*1AF6.0020.0002] # RIGHTWARDS LEFT-SHADED WHITE ARROW +1F8A8 ; [*1AF7.0020.0002] # LEFTWARDS BACK-TILTED SHADOWED WHITE ARROW +1F8A9 ; [*1AF8.0020.0002] # RIGHTWARDS BACK-TILTED SHADOWED WHITE ARROW +1F8AA ; [*1AF9.0020.0002] # LEFTWARDS FRONT-TILTED SHADOWED WHITE ARROW +1F8AB ; [*1AFA.0020.0002] # RIGHTWARDS FRONT-TILTED SHADOWED WHITE ARROW +1F8AC ; [*1AFB.0020.0002] # WHITE ARROW SHAFT WIDTH ONE +1F8AD ; [*1AFC.0020.0002] # WHITE ARROW SHAFT WIDTH TWO THIRDS +1F8B0 ; [*1AFD.0020.0002] # ARROW POINTING UPWARDS THEN NORTH WEST +1F8B1 ; [*1AFE.0020.0002] # ARROW POINTING RIGHTWARDS THEN CURVING SOUTH WEST +1F900 ; [*1767.0020.0002] # CIRCLED CROSS FORMEE WITH FOUR DOTS +1F901 ; [*1768.0020.0002] # CIRCLED CROSS FORMEE WITH TWO DOTS +1F902 ; [*1769.0020.0002] # CIRCLED CROSS FORMEE +1F903 ; [*176A.0020.0002] # LEFT HALF CIRCLE WITH FOUR DOTS +1F904 ; [*176B.0020.0002] # LEFT HALF CIRCLE WITH THREE DOTS +1F905 ; [*176C.0020.0002] # LEFT HALF CIRCLE WITH TWO DOTS +1F906 ; [*176D.0020.0002] # LEFT HALF CIRCLE WITH DOT +1F907 ; [*176E.0020.0002] # LEFT HALF CIRCLE +1F908 ; [*176F.0020.0002] # DOWNWARD FACING HOOK +1F909 ; [*1770.0020.0002] # DOWNWARD FACING NOTCHED HOOK +1F90A ; [*1771.0020.0002] # DOWNWARD FACING HOOK WITH DOT +1F90B ; [*1772.0020.0002] # DOWNWARD FACING NOTCHED HOOK WITH DOT +1F90C ; [*1773.0020.0002] # PINCHED FINGERS +1F90D ; [*1774.0020.0002] # WHITE HEART +1F90E ; [*1775.0020.0002] # BROWN HEART +1F90F ; [*1776.0020.0002] # PINCHING HAND +1F910 ; [*1777.0020.0002] # ZIPPER-MOUTH FACE +1F911 ; [*1778.0020.0002] # MONEY-MOUTH FACE +1F912 ; [*1779.0020.0002] # FACE WITH THERMOMETER +1F913 ; [*177A.0020.0002] # NERD FACE +1F914 ; [*177B.0020.0002] # THINKING FACE +1F915 ; [*177C.0020.0002] # FACE WITH HEAD-BANDAGE +1F916 ; [*177D.0020.0002] # ROBOT FACE +1F917 ; [*177E.0020.0002] # HUGGING FACE +1F918 ; [*177F.0020.0002] # SIGN OF THE HORNS +1F919 ; [*1780.0020.0002] # CALL ME HAND +1F91A ; [*1781.0020.0002] # RAISED BACK OF HAND +1F91B ; [*1782.0020.0002] # LEFT-FACING FIST +1F91C ; [*1783.0020.0002] # RIGHT-FACING FIST +1F91D ; [*1784.0020.0002] # HANDSHAKE +1F91E ; [*1785.0020.0002] # HAND WITH INDEX AND MIDDLE FINGERS CROSSED +1F91F ; [*1786.0020.0002] # I LOVE YOU HAND SIGN +1F920 ; [*1787.0020.0002] # FACE WITH COWBOY HAT +1F921 ; [*1788.0020.0002] # CLOWN FACE +1F922 ; [*1789.0020.0002] # NAUSEATED FACE +1F923 ; [*178A.0020.0002] # ROLLING ON THE FLOOR LAUGHING +1F924 ; [*178B.0020.0002] # DROOLING FACE +1F925 ; [*178C.0020.0002] # LYING FACE +1F926 ; [*178D.0020.0002] # FACE PALM +1F927 ; [*178E.0020.0002] # SNEEZING FACE +1F928 ; [*178F.0020.0002] # FACE WITH ONE EYEBROW RAISED +1F929 ; [*1790.0020.0002] # GRINNING FACE WITH STAR EYES +1F92A ; [*1791.0020.0002] # GRINNING FACE WITH ONE LARGE AND ONE SMALL EYE +1F92B ; [*1792.0020.0002] # FACE WITH FINGER COVERING CLOSED LIPS +1F92C ; [*1793.0020.0002] # SERIOUS FACE WITH SYMBOLS COVERING MOUTH +1F92D ; [*1794.0020.0002] # SMILING FACE WITH SMILING EYES AND HAND COVERING MOUTH +1F92E ; [*1795.0020.0002] # FACE WITH OPEN MOUTH VOMITING +1F92F ; [*1796.0020.0002] # SHOCKED FACE WITH EXPLODING HEAD +1F930 ; [*1797.0020.0002] # PREGNANT WOMAN +1F931 ; [*1798.0020.0002] # BREAST-FEEDING +1F932 ; [*1799.0020.0002] # PALMS UP TOGETHER +1F933 ; [*179A.0020.0002] # SELFIE +1F934 ; [*179B.0020.0002] # PRINCE +1F935 ; [*179C.0020.0002] # MAN IN TUXEDO +1F936 ; [*179D.0020.0002] # MOTHER CHRISTMAS +1F937 ; [*179E.0020.0002] # SHRUG +1F938 ; [*179F.0020.0002] # PERSON DOING CARTWHEEL +1F939 ; [*17A0.0020.0002] # JUGGLING +1F93A ; [*17A1.0020.0002] # FENCER +1F93B ; [*17A2.0020.0002] # MODERN PENTATHLON +1F93C ; [*17A3.0020.0002] # WRESTLERS +1F93D ; [*17A4.0020.0002] # WATER POLO +1F93E ; [*17A5.0020.0002] # HANDBALL +1F93F ; [*17A6.0020.0002] # DIVING MASK +1F940 ; [*17A7.0020.0002] # WILTED FLOWER +1F941 ; [*17A8.0020.0002] # DRUM WITH DRUMSTICKS +1F942 ; [*17A9.0020.0002] # CLINKING GLASSES +1F943 ; [*17AA.0020.0002] # TUMBLER GLASS +1F944 ; [*17AB.0020.0002] # SPOON +1F945 ; [*17AC.0020.0002] # GOAL NET +1F946 ; [*17AD.0020.0002] # RIFLE +1F947 ; [*17AE.0020.0002] # FIRST PLACE MEDAL +1F948 ; [*17AF.0020.0002] # SECOND PLACE MEDAL +1F949 ; [*17B0.0020.0002] # THIRD PLACE MEDAL +1F94A ; [*17B1.0020.0002] # BOXING GLOVE +1F94B ; [*17B2.0020.0002] # MARTIAL ARTS UNIFORM +1F94C ; [*17B3.0020.0002] # CURLING STONE +1F94D ; [*17B4.0020.0002] # LACROSSE STICK AND BALL +1F94E ; [*17B5.0020.0002] # SOFTBALL +1F94F ; [*17B6.0020.0002] # FLYING DISC +1F950 ; [*17B7.0020.0002] # CROISSANT +1F951 ; [*17B8.0020.0002] # AVOCADO +1F952 ; [*17B9.0020.0002] # CUCUMBER +1F953 ; [*17BA.0020.0002] # BACON +1F954 ; [*17BB.0020.0002] # POTATO +1F955 ; [*17BC.0020.0002] # CARROT +1F956 ; [*17BD.0020.0002] # BAGUETTE BREAD +1F957 ; [*17BE.0020.0002] # GREEN SALAD +1F958 ; [*17BF.0020.0002] # SHALLOW PAN OF FOOD +1F959 ; [*17C0.0020.0002] # STUFFED FLATBREAD +1F95A ; [*17C1.0020.0002] # EGG +1F95B ; [*17C2.0020.0002] # GLASS OF MILK +1F95C ; [*17C3.0020.0002] # PEANUTS +1F95D ; [*17C4.0020.0002] # KIWIFRUIT +1F95E ; [*17C5.0020.0002] # PANCAKES +1F95F ; [*17C6.0020.0002] # DUMPLING +1F960 ; [*17C7.0020.0002] # FORTUNE COOKIE +1F961 ; [*17C8.0020.0002] # TAKEOUT BOX +1F962 ; [*17C9.0020.0002] # CHOPSTICKS +1F963 ; [*17CA.0020.0002] # BOWL WITH SPOON +1F964 ; [*17CB.0020.0002] # CUP WITH STRAW +1F965 ; [*17CC.0020.0002] # COCONUT +1F966 ; [*17CD.0020.0002] # BROCCOLI +1F967 ; [*17CE.0020.0002] # PIE +1F968 ; [*17CF.0020.0002] # PRETZEL +1F969 ; [*17D0.0020.0002] # CUT OF MEAT +1F96A ; [*17D1.0020.0002] # SANDWICH +1F96B ; [*17D2.0020.0002] # CANNED FOOD +1F96C ; [*17D3.0020.0002] # LEAFY GREEN +1F96D ; [*17D4.0020.0002] # MANGO +1F96E ; [*17D5.0020.0002] # MOON CAKE +1F96F ; [*17D6.0020.0002] # BAGEL +1F970 ; [*17D7.0020.0002] # SMILING FACE WITH SMILING EYES AND THREE HEARTS +1F971 ; [*17D8.0020.0002] # YAWNING FACE +1F972 ; [*17D9.0020.0002] # SMILING FACE WITH TEAR +1F973 ; [*17DA.0020.0002] # FACE WITH PARTY HORN AND PARTY HAT +1F974 ; [*17DB.0020.0002] # FACE WITH UNEVEN EYES AND WAVY MOUTH +1F975 ; [*17DC.0020.0002] # OVERHEATED FACE +1F976 ; [*17DD.0020.0002] # FREEZING FACE +1F977 ; [*17DE.0020.0002] # NINJA +1F978 ; [*17DF.0020.0002] # DISGUISED FACE +1F97A ; [*17E0.0020.0002] # FACE WITH PLEADING EYES +1F97B ; [*17E1.0020.0002] # SARI +1F97C ; [*17E2.0020.0002] # LAB COAT +1F97D ; [*17E3.0020.0002] # GOGGLES +1F97E ; [*17E4.0020.0002] # HIKING BOOT +1F97F ; [*17E5.0020.0002] # FLAT SHOE +1F980 ; [*17E6.0020.0002] # CRAB +1F981 ; [*17E7.0020.0002] # LION FACE +1F982 ; [*17E8.0020.0002] # SCORPION +1F983 ; [*17E9.0020.0002] # TURKEY +1F984 ; [*17EA.0020.0002] # UNICORN FACE +1F985 ; [*17EB.0020.0002] # EAGLE +1F986 ; [*17EC.0020.0002] # DUCK +1F987 ; [*17ED.0020.0002] # BAT +1F988 ; [*17EE.0020.0002] # SHARK +1F989 ; [*17EF.0020.0002] # OWL +1F98A ; [*17F0.0020.0002] # FOX FACE +1F98B ; [*17F1.0020.0002] # BUTTERFLY +1F98C ; [*17F2.0020.0002] # DEER +1F98D ; [*17F3.0020.0002] # GORILLA +1F98E ; [*17F4.0020.0002] # LIZARD +1F98F ; [*17F5.0020.0002] # RHINOCEROS +1F990 ; [*17F6.0020.0002] # SHRIMP +1F991 ; [*17F7.0020.0002] # SQUID +1F992 ; [*17F8.0020.0002] # GIRAFFE FACE +1F993 ; [*17F9.0020.0002] # ZEBRA FACE +1F994 ; [*17FA.0020.0002] # HEDGEHOG +1F995 ; [*17FB.0020.0002] # SAUROPOD +1F996 ; [*17FC.0020.0002] # T-REX +1F997 ; [*17FD.0020.0002] # CRICKET +1F998 ; [*17FE.0020.0002] # KANGAROO +1F999 ; [*17FF.0020.0002] # LLAMA +1F99A ; [*1800.0020.0002] # PEACOCK +1F99B ; [*1801.0020.0002] # HIPPOPOTAMUS +1F99C ; [*1802.0020.0002] # PARROT +1F99D ; [*1803.0020.0002] # RACCOON +1F99E ; [*1804.0020.0002] # LOBSTER +1F99F ; [*1805.0020.0002] # MOSQUITO +1F9A0 ; [*1806.0020.0002] # MICROBE +1F9A1 ; [*1807.0020.0002] # BADGER +1F9A2 ; [*1808.0020.0002] # SWAN +1F9A3 ; [*1809.0020.0002] # MAMMOTH +1F9A4 ; [*180A.0020.0002] # DODO +1F9A5 ; [*180B.0020.0002] # SLOTH +1F9A6 ; [*180C.0020.0002] # OTTER +1F9A7 ; [*180D.0020.0002] # ORANGUTAN +1F9A8 ; [*180E.0020.0002] # SKUNK +1F9A9 ; [*180F.0020.0002] # FLAMINGO +1F9AA ; [*1810.0020.0002] # OYSTER +1F9AB ; [*1811.0020.0002] # BEAVER +1F9AC ; [*1812.0020.0002] # BISON +1F9AD ; [*1813.0020.0002] # SEAL +1F9AE ; [*1814.0020.0002] # GUIDE DOG +1F9AF ; [*1815.0020.0002] # PROBING CANE +1F9B0 ; [*1816.0020.0002] # EMOJI COMPONENT RED HAIR +1F9B1 ; [*1817.0020.0002] # EMOJI COMPONENT CURLY HAIR +1F9B2 ; [*1818.0020.0002] # EMOJI COMPONENT BALD +1F9B3 ; [*1819.0020.0002] # EMOJI COMPONENT WHITE HAIR +1F9B4 ; [*181A.0020.0002] # BONE +1F9B5 ; [*181B.0020.0002] # LEG +1F9B6 ; [*181C.0020.0002] # FOOT +1F9B7 ; [*181D.0020.0002] # TOOTH +1F9B8 ; [*181E.0020.0002] # SUPERHERO +1F9B9 ; [*181F.0020.0002] # SUPERVILLAIN +1F9BA ; [*1820.0020.0002] # SAFETY VEST +1F9BB ; [*1821.0020.0002] # EAR WITH HEARING AID +1F9BC ; [*1822.0020.0002] # MOTORIZED WHEELCHAIR +1F9BD ; [*1823.0020.0002] # MANUAL WHEELCHAIR +1F9BE ; [*1824.0020.0002] # MECHANICAL ARM +1F9BF ; [*1825.0020.0002] # MECHANICAL LEG +1F9C0 ; [*1826.0020.0002] # CHEESE WEDGE +1F9C1 ; [*1827.0020.0002] # CUPCAKE +1F9C2 ; [*1828.0020.0002] # SALT SHAKER +1F9C3 ; [*1829.0020.0002] # BEVERAGE BOX +1F9C4 ; [*182A.0020.0002] # GARLIC +1F9C5 ; [*182B.0020.0002] # ONION +1F9C6 ; [*182C.0020.0002] # FALAFEL +1F9C7 ; [*182D.0020.0002] # WAFFLE +1F9C8 ; [*182E.0020.0002] # BUTTER +1F9C9 ; [*182F.0020.0002] # MATE DRINK +1F9CA ; [*1830.0020.0002] # ICE CUBE +1F9CB ; [*1831.0020.0002] # BUBBLE TEA +1F9CD ; [*1832.0020.0002] # STANDING PERSON +1F9CE ; [*1833.0020.0002] # KNEELING PERSON +1F9CF ; [*1834.0020.0002] # DEAF PERSON +1F9D0 ; [*1835.0020.0002] # FACE WITH MONOCLE +1F9D1 ; [*1836.0020.0002] # ADULT +1F9D2 ; [*1837.0020.0002] # CHILD +1F9D3 ; [*1838.0020.0002] # OLDER ADULT +1F9D4 ; [*1839.0020.0002] # BEARDED PERSON +1F9D5 ; [*183A.0020.0002] # PERSON WITH HEADSCARF +1F9D6 ; [*183B.0020.0002] # PERSON IN STEAMY ROOM +1F9D7 ; [*183C.0020.0002] # PERSON CLIMBING +1F9D8 ; [*183D.0020.0002] # PERSON IN LOTUS POSITION +1F9D9 ; [*183E.0020.0002] # MAGE +1F9DA ; [*183F.0020.0002] # FAIRY +1F9DB ; [*1840.0020.0002] # VAMPIRE +1F9DC ; [*1841.0020.0002] # MERPERSON +1F9DD ; [*1842.0020.0002] # ELF +1F9DE ; [*1843.0020.0002] # GENIE +1F9DF ; [*1844.0020.0002] # ZOMBIE +1F9E0 ; [*1845.0020.0002] # BRAIN +1F9E1 ; [*1846.0020.0002] # ORANGE HEART +1F9E2 ; [*1847.0020.0002] # BILLED CAP +1F9E3 ; [*1848.0020.0002] # SCARF +1F9E4 ; [*1849.0020.0002] # GLOVES +1F9E5 ; [*184A.0020.0002] # COAT +1F9E6 ; [*184B.0020.0002] # SOCKS +1F9E7 ; [*184C.0020.0002] # RED GIFT ENVELOPE +1F9E8 ; [*184D.0020.0002] # FIRECRACKER +1F9E9 ; [*184E.0020.0002] # JIGSAW PUZZLE PIECE +1F9EA ; [*184F.0020.0002] # TEST TUBE +1F9EB ; [*1850.0020.0002] # PETRI DISH +1F9EC ; [*1851.0020.0002] # DNA DOUBLE HELIX +1F9ED ; [*1852.0020.0002] # COMPASS +1F9EE ; [*1853.0020.0002] # ABACUS +1F9EF ; [*1854.0020.0002] # FIRE EXTINGUISHER +1F9F0 ; [*1855.0020.0002] # TOOLBOX +1F9F1 ; [*1856.0020.0002] # BRICK +1F9F2 ; [*1857.0020.0002] # MAGNET +1F9F3 ; [*1858.0020.0002] # LUGGAGE +1F9F4 ; [*1859.0020.0002] # LOTION BOTTLE +1F9F5 ; [*185A.0020.0002] # SPOOL OF THREAD +1F9F6 ; [*185B.0020.0002] # BALL OF YARN +1F9F7 ; [*185C.0020.0002] # SAFETY PIN +1F9F8 ; [*185D.0020.0002] # TEDDY BEAR +1F9F9 ; [*185E.0020.0002] # BROOM +1F9FA ; [*185F.0020.0002] # BASKET +1F9FB ; [*1860.0020.0002] # ROLL OF PAPER +1F9FC ; [*1861.0020.0002] # BAR OF SOAP +1F9FD ; [*1862.0020.0002] # SPONGE +1F9FE ; [*1863.0020.0002] # RECEIPT +1F9FF ; [*1864.0020.0002] # NAZAR AMULET +1FA00 ; [*13F9.0020.0002] # NEUTRAL CHESS KING +1FA01 ; [*13FA.0020.0002] # NEUTRAL CHESS QUEEN +1FA02 ; [*13FB.0020.0002] # NEUTRAL CHESS ROOK +1FA03 ; [*13FC.0020.0002] # NEUTRAL CHESS BISHOP +1FA04 ; [*13FD.0020.0002] # NEUTRAL CHESS KNIGHT +1FA05 ; [*13FE.0020.0002] # NEUTRAL CHESS PAWN +1FA06 ; [*13FF.0020.0002] # WHITE CHESS KNIGHT ROTATED FORTY-FIVE DEGREES +1FA07 ; [*1400.0020.0002] # BLACK CHESS KNIGHT ROTATED FORTY-FIVE DEGREES +1FA08 ; [*1401.0020.0002] # NEUTRAL CHESS KNIGHT ROTATED FORTY-FIVE DEGREES +1FA09 ; [*1402.0020.0002] # WHITE CHESS KING ROTATED NINETY DEGREES +1FA0A ; [*1403.0020.0002] # WHITE CHESS QUEEN ROTATED NINETY DEGREES +1FA0B ; [*1404.0020.0002] # WHITE CHESS ROOK ROTATED NINETY DEGREES +1FA0C ; [*1405.0020.0002] # WHITE CHESS BISHOP ROTATED NINETY DEGREES +1FA0D ; [*1406.0020.0002] # WHITE CHESS KNIGHT ROTATED NINETY DEGREES +1FA0E ; [*1407.0020.0002] # WHITE CHESS PAWN ROTATED NINETY DEGREES +1FA0F ; [*1408.0020.0002] # BLACK CHESS KING ROTATED NINETY DEGREES +1FA10 ; [*1409.0020.0002] # BLACK CHESS QUEEN ROTATED NINETY DEGREES +1FA11 ; [*140A.0020.0002] # BLACK CHESS ROOK ROTATED NINETY DEGREES +1FA12 ; [*140B.0020.0002] # BLACK CHESS BISHOP ROTATED NINETY DEGREES +1FA13 ; [*140C.0020.0002] # BLACK CHESS KNIGHT ROTATED NINETY DEGREES +1FA14 ; [*140D.0020.0002] # BLACK CHESS PAWN ROTATED NINETY DEGREES +1FA15 ; [*140E.0020.0002] # NEUTRAL CHESS KING ROTATED NINETY DEGREES +1FA16 ; [*140F.0020.0002] # NEUTRAL CHESS QUEEN ROTATED NINETY DEGREES +1FA17 ; [*1410.0020.0002] # NEUTRAL CHESS ROOK ROTATED NINETY DEGREES +1FA18 ; [*1411.0020.0002] # NEUTRAL CHESS BISHOP ROTATED NINETY DEGREES +1FA19 ; [*1412.0020.0002] # NEUTRAL CHESS KNIGHT ROTATED NINETY DEGREES +1FA1A ; [*1413.0020.0002] # NEUTRAL CHESS PAWN ROTATED NINETY DEGREES +1FA1B ; [*1414.0020.0002] # WHITE CHESS KNIGHT ROTATED ONE HUNDRED THIRTY-FIVE DEGREES +1FA1C ; [*1415.0020.0002] # BLACK CHESS KNIGHT ROTATED ONE HUNDRED THIRTY-FIVE DEGREES +1FA1D ; [*1416.0020.0002] # NEUTRAL CHESS KNIGHT ROTATED ONE HUNDRED THIRTY-FIVE DEGREES +1FA1E ; [*1417.0020.0002] # WHITE CHESS TURNED KING +1FA1F ; [*1418.0020.0002] # WHITE CHESS TURNED QUEEN +1FA20 ; [*1419.0020.0002] # WHITE CHESS TURNED ROOK +1FA21 ; [*141A.0020.0002] # WHITE CHESS TURNED BISHOP +1FA22 ; [*141B.0020.0002] # WHITE CHESS TURNED KNIGHT +1FA23 ; [*141C.0020.0002] # WHITE CHESS TURNED PAWN +1FA24 ; [*141D.0020.0002] # BLACK CHESS TURNED KING +1FA25 ; [*141E.0020.0002] # BLACK CHESS TURNED QUEEN +1FA26 ; [*141F.0020.0002] # BLACK CHESS TURNED ROOK +1FA27 ; [*1420.0020.0002] # BLACK CHESS TURNED BISHOP +1FA28 ; [*1421.0020.0002] # BLACK CHESS TURNED KNIGHT +1FA29 ; [*1422.0020.0002] # BLACK CHESS TURNED PAWN +1FA2A ; [*1423.0020.0002] # NEUTRAL CHESS TURNED KING +1FA2B ; [*1424.0020.0002] # NEUTRAL CHESS TURNED QUEEN +1FA2C ; [*1425.0020.0002] # NEUTRAL CHESS TURNED ROOK +1FA2D ; [*1426.0020.0002] # NEUTRAL CHESS TURNED BISHOP +1FA2E ; [*1427.0020.0002] # NEUTRAL CHESS TURNED KNIGHT +1FA2F ; [*1428.0020.0002] # NEUTRAL CHESS TURNED PAWN +1FA30 ; [*1429.0020.0002] # WHITE CHESS KNIGHT ROTATED TWO HUNDRED TWENTY-FIVE DEGREES +1FA31 ; [*142A.0020.0002] # BLACK CHESS KNIGHT ROTATED TWO HUNDRED TWENTY-FIVE DEGREES +1FA32 ; [*142B.0020.0002] # NEUTRAL CHESS KNIGHT ROTATED TWO HUNDRED TWENTY-FIVE DEGREES +1FA33 ; [*142C.0020.0002] # WHITE CHESS KING ROTATED TWO HUNDRED SEVENTY DEGREES +1FA34 ; [*142D.0020.0002] # WHITE CHESS QUEEN ROTATED TWO HUNDRED SEVENTY DEGREES +1FA35 ; [*142E.0020.0002] # WHITE CHESS ROOK ROTATED TWO HUNDRED SEVENTY DEGREES +1FA36 ; [*142F.0020.0002] # WHITE CHESS BISHOP ROTATED TWO HUNDRED SEVENTY DEGREES +1FA37 ; [*1430.0020.0002] # WHITE CHESS KNIGHT ROTATED TWO HUNDRED SEVENTY DEGREES +1FA38 ; [*1431.0020.0002] # WHITE CHESS PAWN ROTATED TWO HUNDRED SEVENTY DEGREES +1FA39 ; [*1432.0020.0002] # BLACK CHESS KING ROTATED TWO HUNDRED SEVENTY DEGREES +1FA3A ; [*1433.0020.0002] # BLACK CHESS QUEEN ROTATED TWO HUNDRED SEVENTY DEGREES +1FA3B ; [*1434.0020.0002] # BLACK CHESS ROOK ROTATED TWO HUNDRED SEVENTY DEGREES +1FA3C ; [*1435.0020.0002] # BLACK CHESS BISHOP ROTATED TWO HUNDRED SEVENTY DEGREES +1FA3D ; [*1436.0020.0002] # BLACK CHESS KNIGHT ROTATED TWO HUNDRED SEVENTY DEGREES +1FA3E ; [*1437.0020.0002] # BLACK CHESS PAWN ROTATED TWO HUNDRED SEVENTY DEGREES +1FA3F ; [*1438.0020.0002] # NEUTRAL CHESS KING ROTATED TWO HUNDRED SEVENTY DEGREES +1FA40 ; [*1439.0020.0002] # NEUTRAL CHESS QUEEN ROTATED TWO HUNDRED SEVENTY DEGREES +1FA41 ; [*143A.0020.0002] # NEUTRAL CHESS ROOK ROTATED TWO HUNDRED SEVENTY DEGREES +1FA42 ; [*143B.0020.0002] # NEUTRAL CHESS BISHOP ROTATED TWO HUNDRED SEVENTY DEGREES +1FA43 ; [*143C.0020.0002] # NEUTRAL CHESS KNIGHT ROTATED TWO HUNDRED SEVENTY DEGREES +1FA44 ; [*143D.0020.0002] # NEUTRAL CHESS PAWN ROTATED TWO HUNDRED SEVENTY DEGREES +1FA45 ; [*143E.0020.0002] # WHITE CHESS KNIGHT ROTATED THREE HUNDRED FIFTEEN DEGREES +1FA46 ; [*143F.0020.0002] # BLACK CHESS KNIGHT ROTATED THREE HUNDRED FIFTEEN DEGREES +1FA47 ; [*1440.0020.0002] # NEUTRAL CHESS KNIGHT ROTATED THREE HUNDRED FIFTEEN DEGREES +1FA48 ; [*1441.0020.0002] # WHITE CHESS EQUIHOPPER +1FA49 ; [*1442.0020.0002] # BLACK CHESS EQUIHOPPER +1FA4A ; [*1443.0020.0002] # NEUTRAL CHESS EQUIHOPPER +1FA4B ; [*1444.0020.0002] # WHITE CHESS EQUIHOPPER ROTATED NINETY DEGREES +1FA4C ; [*1445.0020.0002] # BLACK CHESS EQUIHOPPER ROTATED NINETY DEGREES +1FA4D ; [*1446.0020.0002] # NEUTRAL CHESS EQUIHOPPER ROTATED NINETY DEGREES +1FA4E ; [*1447.0020.0002] # WHITE CHESS KNIGHT-QUEEN +1FA4F ; [*1448.0020.0002] # WHITE CHESS KNIGHT-ROOK +1FA50 ; [*1449.0020.0002] # WHITE CHESS KNIGHT-BISHOP +1FA51 ; [*144A.0020.0002] # BLACK CHESS KNIGHT-QUEEN +1FA52 ; [*144B.0020.0002] # BLACK CHESS KNIGHT-ROOK +1FA53 ; [*144C.0020.0002] # BLACK CHESS KNIGHT-BISHOP +1FA60 ; [*144D.0020.0002] # XIANGQI RED GENERAL +1FA61 ; [*144E.0020.0002] # XIANGQI RED MANDARIN +1FA62 ; [*144F.0020.0002] # XIANGQI RED ELEPHANT +1FA63 ; [*1450.0020.0002] # XIANGQI RED HORSE +1FA64 ; [*1451.0020.0002] # XIANGQI RED CHARIOT +1FA65 ; [*1452.0020.0002] # XIANGQI RED CANNON +1FA66 ; [*1453.0020.0002] # XIANGQI RED SOLDIER +1FA67 ; [*1454.0020.0002] # XIANGQI BLACK GENERAL +1FA68 ; [*1455.0020.0002] # XIANGQI BLACK MANDARIN +1FA69 ; [*1456.0020.0002] # XIANGQI BLACK ELEPHANT +1FA6A ; [*1457.0020.0002] # XIANGQI BLACK HORSE +1FA6B ; [*1458.0020.0002] # XIANGQI BLACK CHARIOT +1FA6C ; [*1459.0020.0002] # XIANGQI BLACK CANNON +1FA6D ; [*145A.0020.0002] # XIANGQI BLACK SOLDIER +1FA70 ; [*1865.0020.0002] # BALLET SHOES +1FA71 ; [*1866.0020.0002] # ONE-PIECE SWIMSUIT +1FA72 ; [*1867.0020.0002] # BRIEFS +1FA73 ; [*1868.0020.0002] # SHORTS +1FA74 ; [*1869.0020.0002] # THONG SANDAL +1FA78 ; [*186A.0020.0002] # DROP OF BLOOD +1FA79 ; [*186B.0020.0002] # ADHESIVE BANDAGE +1FA7A ; [*186C.0020.0002] # STETHOSCOPE +1FA80 ; [*186D.0020.0002] # YO-YO +1FA81 ; [*186E.0020.0002] # KITE +1FA82 ; [*186F.0020.0002] # PARACHUTE +1FA83 ; [*1870.0020.0002] # BOOMERANG +1FA84 ; [*1871.0020.0002] # MAGIC WAND +1FA85 ; [*1872.0020.0002] # PINATA +1FA86 ; [*1873.0020.0002] # NESTING DOLLS +1FA90 ; [*1874.0020.0002] # RINGED PLANET +1FA91 ; [*1875.0020.0002] # CHAIR +1FA92 ; [*1876.0020.0002] # RAZOR +1FA93 ; [*1877.0020.0002] # AXE +1FA94 ; [*1878.0020.0002] # DIYA LAMP +1FA95 ; [*1879.0020.0002] # BANJO +1FA96 ; [*187A.0020.0002] # MILITARY HELMET +1FA97 ; [*187B.0020.0002] # ACCORDION +1FA98 ; [*187C.0020.0002] # LONG DRUM +1FA99 ; [*187D.0020.0002] # COIN +1FA9A ; [*187E.0020.0002] # CARPENTRY SAW +1FA9B ; [*187F.0020.0002] # SCREWDRIVER +1FA9C ; [*1880.0020.0002] # LADDER +1FA9D ; [*1881.0020.0002] # HOOK +1FA9E ; [*1882.0020.0002] # MIRROR +1FA9F ; [*1883.0020.0002] # WINDOW +1FAA0 ; [*1884.0020.0002] # PLUNGER +1FAA1 ; [*1885.0020.0002] # SEWING NEEDLE +1FAA2 ; [*1886.0020.0002] # KNOT +1FAA3 ; [*1887.0020.0002] # BUCKET +1FAA4 ; [*1888.0020.0002] # MOUSE TRAP +1FAA5 ; [*1889.0020.0002] # TOOTHBRUSH +1FAA6 ; [*188A.0020.0002] # HEADSTONE +1FAA7 ; [*188B.0020.0002] # PLACARD +1FAA8 ; [*188C.0020.0002] # ROCK +1FAB0 ; [*188D.0020.0002] # FLY +1FAB1 ; [*188E.0020.0002] # WORM +1FAB2 ; [*188F.0020.0002] # BEETLE +1FAB3 ; [*1890.0020.0002] # COCKROACH +1FAB4 ; [*1891.0020.0002] # POTTED PLANT +1FAB5 ; [*1892.0020.0002] # WOOD +1FAB6 ; [*1893.0020.0002] # FEATHER +1FAC0 ; [*1894.0020.0002] # ANATOMICAL HEART +1FAC1 ; [*1895.0020.0002] # LUNGS +1FAC2 ; [*1896.0020.0002] # PEOPLE HUGGING +1FAD0 ; [*1897.0020.0002] # BLUEBERRIES +1FAD1 ; [*1898.0020.0002] # BELL PEPPER +1FAD2 ; [*1899.0020.0002] # OLIVE +1FAD3 ; [*189A.0020.0002] # FLATBREAD +1FAD4 ; [*189B.0020.0002] # TAMALE +1FAD5 ; [*189C.0020.0002] # FONDUE +1FAD6 ; [*189D.0020.0002] # TEAPOT +1FB00 ; [*0969.0020.0002] # BLOCK SEXTANT-1 +1FB01 ; [*096A.0020.0002] # BLOCK SEXTANT-2 +1FB02 ; [*096B.0020.0002] # BLOCK SEXTANT-12 +1FB03 ; [*096C.0020.0002] # BLOCK SEXTANT-3 +1FB04 ; [*096D.0020.0002] # BLOCK SEXTANT-13 +1FB05 ; [*096E.0020.0002] # BLOCK SEXTANT-23 +1FB06 ; [*096F.0020.0002] # BLOCK SEXTANT-123 +1FB07 ; [*0970.0020.0002] # BLOCK SEXTANT-4 +1FB08 ; [*0971.0020.0002] # BLOCK SEXTANT-14 +1FB09 ; [*0972.0020.0002] # BLOCK SEXTANT-24 +1FB0A ; [*0973.0020.0002] # BLOCK SEXTANT-124 +1FB0B ; [*0974.0020.0002] # BLOCK SEXTANT-34 +1FB0C ; [*0975.0020.0002] # BLOCK SEXTANT-134 +1FB0D ; [*0976.0020.0002] # BLOCK SEXTANT-234 +1FB0E ; [*0977.0020.0002] # BLOCK SEXTANT-1234 +1FB0F ; [*0978.0020.0002] # BLOCK SEXTANT-5 +1FB10 ; [*0979.0020.0002] # BLOCK SEXTANT-15 +1FB11 ; [*097A.0020.0002] # BLOCK SEXTANT-25 +1FB12 ; [*097B.0020.0002] # BLOCK SEXTANT-125 +1FB13 ; [*097C.0020.0002] # BLOCK SEXTANT-35 +1FB14 ; [*097D.0020.0002] # BLOCK SEXTANT-235 +1FB15 ; [*097E.0020.0002] # BLOCK SEXTANT-1235 +1FB16 ; [*097F.0020.0002] # BLOCK SEXTANT-45 +1FB17 ; [*0980.0020.0002] # BLOCK SEXTANT-145 +1FB18 ; [*0981.0020.0002] # BLOCK SEXTANT-245 +1FB19 ; [*0982.0020.0002] # BLOCK SEXTANT-1245 +1FB1A ; [*0983.0020.0002] # BLOCK SEXTANT-345 +1FB1B ; [*0984.0020.0002] # BLOCK SEXTANT-1345 +1FB1C ; [*0985.0020.0002] # BLOCK SEXTANT-2345 +1FB1D ; [*0986.0020.0002] # BLOCK SEXTANT-12345 +1FB1E ; [*0987.0020.0002] # BLOCK SEXTANT-6 +1FB1F ; [*0988.0020.0002] # BLOCK SEXTANT-16 +1FB20 ; [*0989.0020.0002] # BLOCK SEXTANT-26 +1FB21 ; [*098A.0020.0002] # BLOCK SEXTANT-126 +1FB22 ; [*098B.0020.0002] # BLOCK SEXTANT-36 +1FB23 ; [*098C.0020.0002] # BLOCK SEXTANT-136 +1FB24 ; [*098D.0020.0002] # BLOCK SEXTANT-236 +1FB25 ; [*098E.0020.0002] # BLOCK SEXTANT-1236 +1FB26 ; [*098F.0020.0002] # BLOCK SEXTANT-46 +1FB27 ; [*0990.0020.0002] # BLOCK SEXTANT-146 +1FB28 ; [*0991.0020.0002] # BLOCK SEXTANT-1246 +1FB29 ; [*0992.0020.0002] # BLOCK SEXTANT-346 +1FB2A ; [*0993.0020.0002] # BLOCK SEXTANT-1346 +1FB2B ; [*0994.0020.0002] # BLOCK SEXTANT-2346 +1FB2C ; [*0995.0020.0002] # BLOCK SEXTANT-12346 +1FB2D ; [*0996.0020.0002] # BLOCK SEXTANT-56 +1FB2E ; [*0997.0020.0002] # BLOCK SEXTANT-156 +1FB2F ; [*0998.0020.0002] # BLOCK SEXTANT-256 +1FB30 ; [*0999.0020.0002] # BLOCK SEXTANT-1256 +1FB31 ; [*099A.0020.0002] # BLOCK SEXTANT-356 +1FB32 ; [*099B.0020.0002] # BLOCK SEXTANT-1356 +1FB33 ; [*099C.0020.0002] # BLOCK SEXTANT-2356 +1FB34 ; [*099D.0020.0002] # BLOCK SEXTANT-12356 +1FB35 ; [*099E.0020.0002] # BLOCK SEXTANT-456 +1FB36 ; [*099F.0020.0002] # BLOCK SEXTANT-1456 +1FB37 ; [*09A0.0020.0002] # BLOCK SEXTANT-2456 +1FB38 ; [*09A1.0020.0002] # BLOCK SEXTANT-12456 +1FB39 ; [*09A2.0020.0002] # BLOCK SEXTANT-3456 +1FB3A ; [*09A3.0020.0002] # BLOCK SEXTANT-13456 +1FB3B ; [*09A4.0020.0002] # BLOCK SEXTANT-23456 +1FB3C ; [*09A5.0020.0002] # LOWER LEFT BLOCK DIAGONAL LOWER MIDDLE LEFT TO LOWER CENTRE +1FB3D ; [*09A6.0020.0002] # LOWER LEFT BLOCK DIAGONAL LOWER MIDDLE LEFT TO LOWER RIGHT +1FB3E ; [*09A7.0020.0002] # LOWER LEFT BLOCK DIAGONAL UPPER MIDDLE LEFT TO LOWER CENTRE +1FB3F ; [*09A8.0020.0002] # LOWER LEFT BLOCK DIAGONAL UPPER MIDDLE LEFT TO LOWER RIGHT +1FB40 ; [*09A9.0020.0002] # LOWER LEFT BLOCK DIAGONAL UPPER LEFT TO LOWER CENTRE +1FB41 ; [*09AA.0020.0002] # LOWER RIGHT BLOCK DIAGONAL UPPER MIDDLE LEFT TO UPPER CENTRE +1FB42 ; [*09AB.0020.0002] # LOWER RIGHT BLOCK DIAGONAL UPPER MIDDLE LEFT TO UPPER RIGHT +1FB43 ; [*09AC.0020.0002] # LOWER RIGHT BLOCK DIAGONAL LOWER MIDDLE LEFT TO UPPER CENTRE +1FB44 ; [*09AD.0020.0002] # LOWER RIGHT BLOCK DIAGONAL LOWER MIDDLE LEFT TO UPPER RIGHT +1FB45 ; [*09AE.0020.0002] # LOWER RIGHT BLOCK DIAGONAL LOWER LEFT TO UPPER CENTRE +1FB46 ; [*09AF.0020.0002] # LOWER RIGHT BLOCK DIAGONAL LOWER MIDDLE LEFT TO UPPER MIDDLE RIGHT +1FB47 ; [*09B0.0020.0002] # LOWER RIGHT BLOCK DIAGONAL LOWER CENTRE TO LOWER MIDDLE RIGHT +1FB48 ; [*09B1.0020.0002] # LOWER RIGHT BLOCK DIAGONAL LOWER LEFT TO LOWER MIDDLE RIGHT +1FB49 ; [*09B2.0020.0002] # LOWER RIGHT BLOCK DIAGONAL LOWER CENTRE TO UPPER MIDDLE RIGHT +1FB4A ; [*09B3.0020.0002] # LOWER RIGHT BLOCK DIAGONAL LOWER LEFT TO UPPER MIDDLE RIGHT +1FB4B ; [*09B4.0020.0002] # LOWER RIGHT BLOCK DIAGONAL LOWER CENTRE TO UPPER RIGHT +1FB4C ; [*09B5.0020.0002] # LOWER LEFT BLOCK DIAGONAL UPPER CENTRE TO UPPER MIDDLE RIGHT +1FB4D ; [*09B6.0020.0002] # LOWER LEFT BLOCK DIAGONAL UPPER LEFT TO UPPER MIDDLE RIGHT +1FB4E ; [*09B7.0020.0002] # LOWER LEFT BLOCK DIAGONAL UPPER CENTRE TO LOWER MIDDLE RIGHT +1FB4F ; [*09B8.0020.0002] # LOWER LEFT BLOCK DIAGONAL UPPER LEFT TO LOWER MIDDLE RIGHT +1FB50 ; [*09B9.0020.0002] # LOWER LEFT BLOCK DIAGONAL UPPER CENTRE TO LOWER RIGHT +1FB51 ; [*09BA.0020.0002] # LOWER LEFT BLOCK DIAGONAL UPPER MIDDLE LEFT TO LOWER MIDDLE RIGHT +1FB52 ; [*09BB.0020.0002] # UPPER RIGHT BLOCK DIAGONAL LOWER MIDDLE LEFT TO LOWER CENTRE +1FB53 ; [*09BC.0020.0002] # UPPER RIGHT BLOCK DIAGONAL LOWER MIDDLE LEFT TO LOWER RIGHT +1FB54 ; [*09BD.0020.0002] # UPPER RIGHT BLOCK DIAGONAL UPPER MIDDLE LEFT TO LOWER CENTRE +1FB55 ; [*09BE.0020.0002] # UPPER RIGHT BLOCK DIAGONAL UPPER MIDDLE LEFT TO LOWER RIGHT +1FB56 ; [*09BF.0020.0002] # UPPER RIGHT BLOCK DIAGONAL UPPER LEFT TO LOWER CENTRE +1FB57 ; [*09C0.0020.0002] # UPPER LEFT BLOCK DIAGONAL UPPER MIDDLE LEFT TO UPPER CENTRE +1FB58 ; [*09C1.0020.0002] # UPPER LEFT BLOCK DIAGONAL UPPER MIDDLE LEFT TO UPPER RIGHT +1FB59 ; [*09C2.0020.0002] # UPPER LEFT BLOCK DIAGONAL LOWER MIDDLE LEFT TO UPPER CENTRE +1FB5A ; [*09C3.0020.0002] # UPPER LEFT BLOCK DIAGONAL LOWER MIDDLE LEFT TO UPPER RIGHT +1FB5B ; [*09C4.0020.0002] # UPPER LEFT BLOCK DIAGONAL LOWER LEFT TO UPPER CENTRE +1FB5C ; [*09C5.0020.0002] # UPPER LEFT BLOCK DIAGONAL LOWER MIDDLE LEFT TO UPPER MIDDLE RIGHT +1FB5D ; [*09C6.0020.0002] # UPPER LEFT BLOCK DIAGONAL LOWER CENTRE TO LOWER MIDDLE RIGHT +1FB5E ; [*09C7.0020.0002] # UPPER LEFT BLOCK DIAGONAL LOWER LEFT TO LOWER MIDDLE RIGHT +1FB5F ; [*09C8.0020.0002] # UPPER LEFT BLOCK DIAGONAL LOWER CENTRE TO UPPER MIDDLE RIGHT +1FB60 ; [*09C9.0020.0002] # UPPER LEFT BLOCK DIAGONAL LOWER LEFT TO UPPER MIDDLE RIGHT +1FB61 ; [*09CA.0020.0002] # UPPER LEFT BLOCK DIAGONAL LOWER CENTRE TO UPPER RIGHT +1FB62 ; [*09CB.0020.0002] # UPPER RIGHT BLOCK DIAGONAL UPPER CENTRE TO UPPER MIDDLE RIGHT +1FB63 ; [*09CC.0020.0002] # UPPER RIGHT BLOCK DIAGONAL UPPER LEFT TO UPPER MIDDLE RIGHT +1FB64 ; [*09CD.0020.0002] # UPPER RIGHT BLOCK DIAGONAL UPPER CENTRE TO LOWER MIDDLE RIGHT +1FB65 ; [*09CE.0020.0002] # UPPER RIGHT BLOCK DIAGONAL UPPER LEFT TO LOWER MIDDLE RIGHT +1FB66 ; [*09CF.0020.0002] # UPPER RIGHT BLOCK DIAGONAL UPPER CENTRE TO LOWER RIGHT +1FB67 ; [*09D0.0020.0002] # UPPER RIGHT BLOCK DIAGONAL UPPER MIDDLE LEFT TO LOWER MIDDLE RIGHT +1FB68 ; [*09D1.0020.0002] # UPPER AND RIGHT AND LOWER TRIANGULAR THREE QUARTERS BLOCK +1FB69 ; [*09D2.0020.0002] # LEFT AND LOWER AND RIGHT TRIANGULAR THREE QUARTERS BLOCK +1FB6A ; [*09D3.0020.0002] # UPPER AND LEFT AND LOWER TRIANGULAR THREE QUARTERS BLOCK +1FB6B ; [*09D4.0020.0002] # LEFT AND UPPER AND RIGHT TRIANGULAR THREE QUARTERS BLOCK +1FB6C ; [*09D5.0020.0002] # LEFT TRIANGULAR ONE QUARTER BLOCK +1FB6D ; [*09D6.0020.0002] # UPPER TRIANGULAR ONE QUARTER BLOCK +1FB6E ; [*09D7.0020.0002] # RIGHT TRIANGULAR ONE QUARTER BLOCK +1FB6F ; [*09D8.0020.0002] # LOWER TRIANGULAR ONE QUARTER BLOCK +1FB70 ; [*09D9.0020.0002] # VERTICAL ONE EIGHTH BLOCK-2 +1FB71 ; [*09DA.0020.0002] # VERTICAL ONE EIGHTH BLOCK-3 +1FB72 ; [*09DB.0020.0002] # VERTICAL ONE EIGHTH BLOCK-4 +1FB73 ; [*09DC.0020.0002] # VERTICAL ONE EIGHTH BLOCK-5 +1FB74 ; [*09DD.0020.0002] # VERTICAL ONE EIGHTH BLOCK-6 +1FB75 ; [*09DE.0020.0002] # VERTICAL ONE EIGHTH BLOCK-7 +1FB76 ; [*09DF.0020.0002] # HORIZONTAL ONE EIGHTH BLOCK-2 +1FB77 ; [*09E0.0020.0002] # HORIZONTAL ONE EIGHTH BLOCK-3 +1FB78 ; [*09E1.0020.0002] # HORIZONTAL ONE EIGHTH BLOCK-4 +1FB79 ; [*09E2.0020.0002] # HORIZONTAL ONE EIGHTH BLOCK-5 +1FB7A ; [*09E3.0020.0002] # HORIZONTAL ONE EIGHTH BLOCK-6 +1FB7B ; [*09E4.0020.0002] # HORIZONTAL ONE EIGHTH BLOCK-7 +1FB7C ; [*09E5.0020.0002] # LEFT AND LOWER ONE EIGHTH BLOCK +1FB7D ; [*09E6.0020.0002] # LEFT AND UPPER ONE EIGHTH BLOCK +1FB7E ; [*09E7.0020.0002] # RIGHT AND UPPER ONE EIGHTH BLOCK +1FB7F ; [*09E8.0020.0002] # RIGHT AND LOWER ONE EIGHTH BLOCK +1FB80 ; [*09E9.0020.0002] # UPPER AND LOWER ONE EIGHTH BLOCK +1FB81 ; [*09EA.0020.0002] # HORIZONTAL ONE EIGHTH BLOCK-1358 +1FB82 ; [*09EB.0020.0002] # UPPER ONE QUARTER BLOCK +1FB83 ; [*09EC.0020.0002] # UPPER THREE EIGHTHS BLOCK +1FB84 ; [*09ED.0020.0002] # UPPER FIVE EIGHTHS BLOCK +1FB85 ; [*09EE.0020.0002] # UPPER THREE QUARTERS BLOCK +1FB86 ; [*09EF.0020.0002] # UPPER SEVEN EIGHTHS BLOCK +1FB87 ; [*09F0.0020.0002] # RIGHT ONE QUARTER BLOCK +1FB88 ; [*09F1.0020.0002] # RIGHT THREE EIGHTHS BLOCK +1FB89 ; [*09F2.0020.0002] # RIGHT FIVE EIGHTHS BLOCK +1FB8A ; [*09F3.0020.0002] # RIGHT THREE QUARTERS BLOCK +1FB8B ; [*09F4.0020.0002] # RIGHT SEVEN EIGHTHS BLOCK +1FB8C ; [*09F5.0020.0002] # LEFT HALF MEDIUM SHADE +1FB8D ; [*09F6.0020.0002] # RIGHT HALF MEDIUM SHADE +1FB8E ; [*09F7.0020.0002] # UPPER HALF MEDIUM SHADE +1FB8F ; [*09F8.0020.0002] # LOWER HALF MEDIUM SHADE +1FB90 ; [*09F9.0020.0002] # INVERSE MEDIUM SHADE +1FB91 ; [*09FA.0020.0002] # UPPER HALF BLOCK AND LOWER HALF INVERSE MEDIUM SHADE +1FB92 ; [*09FB.0020.0002] # UPPER HALF INVERSE MEDIUM SHADE AND LOWER HALF BLOCK +1FB94 ; [*09FC.0020.0002] # LEFT HALF INVERSE MEDIUM SHADE AND RIGHT HALF BLOCK +1FB95 ; [*09FD.0020.0002] # CHECKER BOARD FILL +1FB96 ; [*09FE.0020.0002] # INVERSE CHECKER BOARD FILL +1FB97 ; [*09FF.0020.0002] # HEAVY HORIZONTAL FILL +1FB98 ; [*0A00.0020.0002] # UPPER LEFT TO LOWER RIGHT FILL +1FB99 ; [*0A01.0020.0002] # UPPER RIGHT TO LOWER LEFT FILL +1FB9A ; [*0A02.0020.0002] # UPPER AND LOWER TRIANGULAR HALF BLOCK +1FB9B ; [*0A03.0020.0002] # LEFT AND RIGHT TRIANGULAR HALF BLOCK +1FB9C ; [*0A04.0020.0002] # UPPER LEFT TRIANGULAR MEDIUM SHADE +1FB9D ; [*0A05.0020.0002] # UPPER RIGHT TRIANGULAR MEDIUM SHADE +1FB9E ; [*0A06.0020.0002] # LOWER RIGHT TRIANGULAR MEDIUM SHADE +1FB9F ; [*0A07.0020.0002] # LOWER LEFT TRIANGULAR MEDIUM SHADE +1FBA0 ; [*0A08.0020.0002] # BOX DRAWINGS LIGHT DIAGONAL UPPER CENTRE TO MIDDLE LEFT +1FBA1 ; [*0A09.0020.0002] # BOX DRAWINGS LIGHT DIAGONAL UPPER CENTRE TO MIDDLE RIGHT +1FBA2 ; [*0A0A.0020.0002] # BOX DRAWINGS LIGHT DIAGONAL MIDDLE LEFT TO LOWER CENTRE +1FBA3 ; [*0A0B.0020.0002] # BOX DRAWINGS LIGHT DIAGONAL MIDDLE RIGHT TO LOWER CENTRE +1FBA4 ; [*0A0C.0020.0002] # BOX DRAWINGS LIGHT DIAGONAL UPPER CENTRE TO MIDDLE LEFT TO LOWER CENTRE +1FBA5 ; [*0A0D.0020.0002] # BOX DRAWINGS LIGHT DIAGONAL UPPER CENTRE TO MIDDLE RIGHT TO LOWER CENTRE +1FBA6 ; [*0A0E.0020.0002] # BOX DRAWINGS LIGHT DIAGONAL MIDDLE LEFT TO LOWER CENTRE TO MIDDLE RIGHT +1FBA7 ; [*0A0F.0020.0002] # BOX DRAWINGS LIGHT DIAGONAL MIDDLE LEFT TO UPPER CENTRE TO MIDDLE RIGHT +1FBA8 ; [*0A10.0020.0002] # BOX DRAWINGS LIGHT DIAGONAL UPPER CENTRE TO MIDDLE LEFT AND MIDDLE RIGHT TO LOWER CENTRE +1FBA9 ; [*0A11.0020.0002] # BOX DRAWINGS LIGHT DIAGONAL UPPER CENTRE TO MIDDLE RIGHT AND MIDDLE LEFT TO LOWER CENTRE +1FBAA ; [*0A12.0020.0002] # BOX DRAWINGS LIGHT DIAGONAL UPPER CENTRE TO MIDDLE RIGHT TO LOWER CENTRE TO MIDDLE LEFT +1FBAB ; [*0A13.0020.0002] # BOX DRAWINGS LIGHT DIAGONAL UPPER CENTRE TO MIDDLE LEFT TO LOWER CENTRE TO MIDDLE RIGHT +1FBAC ; [*0A14.0020.0002] # BOX DRAWINGS LIGHT DIAGONAL MIDDLE LEFT TO UPPER CENTRE TO MIDDLE RIGHT TO LOWER CENTRE +1FBAD ; [*0A15.0020.0002] # BOX DRAWINGS LIGHT DIAGONAL MIDDLE RIGHT TO UPPER CENTRE TO MIDDLE LEFT TO LOWER CENTRE +1FBAE ; [*0A16.0020.0002] # BOX DRAWINGS LIGHT DIAGONAL DIAMOND +1FBAF ; [*0A17.0020.0002] # BOX DRAWINGS LIGHT HORIZONTAL WITH VERTICAL STROKE +1FBB0 ; [*0A18.0020.0002] # ARROWHEAD-SHAPED POINTER +1FBB1 ; [*0A19.0020.0002] # INVERSE CHECK MARK +1FBB2 ; [*0A1A.0020.0002] # LEFT HALF RUNNING MAN +1FBB3 ; [*0A1B.0020.0002] # RIGHT HALF RUNNING MAN +1FBB4 ; [*0A1C.0020.0002] # INVERSE DOWNWARDS ARROW WITH TIP LEFTWARDS +1FBB5 ; [*0A1D.0020.0002] # LEFTWARDS ARROW AND UPPER AND LOWER ONE EIGHTH BLOCK +1FBB6 ; [*0A1E.0020.0002] # RIGHTWARDS ARROW AND UPPER AND LOWER ONE EIGHTH BLOCK +1FBB7 ; [*0A1F.0020.0002] # DOWNWARDS ARROW AND RIGHT ONE EIGHTH BLOCK +1FBB8 ; [*0A20.0020.0002] # UPWARDS ARROW AND RIGHT ONE EIGHTH BLOCK +1FBB9 ; [*0A21.0020.0002] # LEFT HALF FOLDER +1FBBA ; [*0A22.0020.0002] # RIGHT HALF FOLDER +1FBBB ; [*0A23.0020.0002] # VOIDED GREEK CROSS +1FBBC ; [*0A24.0020.0002] # RIGHT OPEN SQUARED DOT +1FBBD ; [*0A25.0020.0002] # NEGATIVE DIAGONAL CROSS +1FBBE ; [*0A26.0020.0002] # NEGATIVE DIAGONAL MIDDLE RIGHT TO LOWER CENTRE +1FBBF ; [*0A27.0020.0002] # NEGATIVE DIAGONAL DIAMOND +1FBC0 ; [*0A28.0020.0002] # WHITE HEAVY SALTIRE WITH ROUNDED CORNERS +1FBC1 ; [*0A29.0020.0002] # LEFT THIRD WHITE RIGHT POINTING INDEX +1FBC2 ; [*0A2A.0020.0002] # MIDDLE THIRD WHITE RIGHT POINTING INDEX +1FBC3 ; [*0A2B.0020.0002] # RIGHT THIRD WHITE RIGHT POINTING INDEX +1FBC4 ; [*0A2C.0020.0002] # NEGATIVE SQUARED QUESTION MARK +1FBC5 ; [*0A2D.0020.0002] # STICK FIGURE +1FBC6 ; [*0A2E.0020.0002] # STICK FIGURE WITH ARMS RAISED +1FBC7 ; [*0A2F.0020.0002] # STICK FIGURE LEANING LEFT +1FBC8 ; [*0A30.0020.0002] # STICK FIGURE LEANING RIGHT +1FBC9 ; [*0A31.0020.0002] # STICK FIGURE WITH DRESS +1FBCA ; [*0A32.0020.0002] # WHITE UP-POINTING CHEVRON 0332 ; [.0000.0021.0002] # COMBINING LOW LINE 0313 ; [.0000.0022.0002] # COMBINING COMMA ABOVE 0343 ; [.0000.0022.0002] # COMBINING GREEK KORONIS @@ -7905,6 +8667,7 @@ FFFC ; [*1AF9.0020.0002] # OBJECT REPLACEMENT CHARACTER 0487 ; [.0000.0033.0002] # COMBINING CYRILLIC POKRYTIE 0741 ; [.0000.0033.0002] # SYRIAC QUSHSHAYA 0745 ; [.0000.0033.0002] # SYRIAC THREE DOTS ABOVE +0B55 ; [.0000.0033.0002] # ORIYA SIGN OVERLINE 17CB ; [.0000.0033.0002] # KHMER SIGN BANTOC 17CC ; [.0000.0033.0002] # KHMER SIGN ROBAT 17CD ; [.0000.0033.0002] # KHMER SIGN TOANDAKHIAT @@ -7945,6 +8708,14 @@ FFFC ; [*1AF9.0020.0002] # OBJECT REPLACEMENT CHARACTER A67C ; [.0000.0033.0002] # COMBINING CYRILLIC KAVYKA A67D ; [.0000.0033.0002] # COMBINING CYRILLIC PAYEROK 10AE5 ; [.0000.0033.0002] # MANICHAEAN ABBREVIATION MARK ABOVE +10D24 ; [.0000.0033.0002] # HANIFI ROHINGYA SIGN HARBAHAY +10D25 ; [.0000.0033.0002] # HANIFI ROHINGYA SIGN TAHALA +10D26 ; [.0000.0033.0002] # HANIFI ROHINGYA SIGN TANA +10D27 ; [.0000.0033.0002] # HANIFI ROHINGYA SIGN TASSI +10F48 ; [.0000.0033.0002] # SOGDIAN COMBINING DOT ABOVE +10F49 ; [.0000.0033.0002] # SOGDIAN COMBINING TWO DOTS ABOVE +10F4A ; [.0000.0033.0002] # SOGDIAN COMBINING CURVE ABOVE +10F4C ; [.0000.0033.0002] # SOGDIAN COMBINING HOOK ABOVE 1BC9D ; [.0000.0033.0002] # DUPLOYAN THICK LETTER SELECTOR 0316 ; [.0000.0034.0002] # COMBINING GRAVE ACCENT BELOW 0317 ; [.0000.0034.0002] # COMBINING ACUTE ACCENT BELOW @@ -7980,6 +8751,7 @@ A67D ; [.0000.0033.0002] # COMBINING CYRILLIC PAYEROK 0362 ; [.0000.0034.0002] # COMBINING DOUBLE RIGHTWARDS ARROW BELOW 0742 ; [.0000.0034.0002] # SYRIAC RUKKAKHA 0746 ; [.0000.0034.0002] # SYRIAC THREE DOTS BELOW +07FD ; [.0000.0034.0002] # NKO DANTAYALAN 0859 ; [.0000.0034.0002] # MANDAIC AFFRICATION MARK 085A ; [.0000.0034.0002] # MANDAIC VOCALIZATION MARK 085B ; [.0000.0034.0002] # MANDAIC GEMINATION MARK @@ -8004,6 +8776,13 @@ A67D ; [.0000.0033.0002] # COMBINING CYRILLIC PAYEROK FE27 ; [.0000.0034.0002] # COMBINING LIGATURE LEFT HALF BELOW 10A0D ; [.0000.0034.0002] # KHAROSHTHI SIGN DOUBLE RING BELOW 10AE6 ; [.0000.0034.0002] # MANICHAEAN ABBREVIATION MARK BELOW +10F46 ; [.0000.0034.0002] # SOGDIAN COMBINING DOT BELOW +10F47 ; [.0000.0034.0002] # SOGDIAN COMBINING TWO DOTS BELOW +10F4B ; [.0000.0034.0002] # SOGDIAN COMBINING CURVE BELOW +10F4D ; [.0000.0034.0002] # SOGDIAN COMBINING HOOK BELOW +10F4E ; [.0000.0034.0002] # SOGDIAN COMBINING LONG HOOK BELOW +10F4F ; [.0000.0034.0002] # SOGDIAN COMBINING RESH BELOW +10F50 ; [.0000.0034.0002] # SOGDIAN COMBINING STROKE BELOW 0336 ; [.0000.0035.0002] # COMBINING LONG STROKE OVERLAY 0337 ; [.0000.0035.0002] # COMBINING SHORT SOLIDUS OVERLAY 20D8 ; [.0000.0035.0002] # COMBINING RING OVERLAY @@ -8142,7 +8921,9 @@ FE7F ; [.0000.0081.0018] # ARABIC SUKUN MEDIAL FORM FE7E ; [.0000.0081.001A] # ARABIC SUKUN ISOLATED FORM 0653 ; [.0000.0082.0002] # ARABIC MADDAH ABOVE 0AFC ; [.0000.0082.0002] # GUJARATI SIGN MADDAH +10EAC ; [.0000.0082.0002] # YEZIDI COMBINING MADDA MARK 0654 ; [.0000.0083.0002] # ARABIC HAMZA ABOVE +10EAB ; [.0000.0083.0002] # YEZIDI COMBINING HAMZA MARK 0655 ; [.0000.0084.0002] # ARABIC HAMZA BELOW 065F ; [.0000.0085.0002] # ARABIC WAVY HAMZA BELOW 0656 ; [.0000.0086.0002] # ARABIC SUBSCRIPT ALEF @@ -8225,11 +9006,14 @@ A9B3 ; [.0000.00C2.0002] # JAVANESE SIGN CECAK TELU 111CA ; [.0000.00C2.0002] # SHARADA SIGN NUKTA 11236 ; [.0000.00C2.0002] # KHOJKI SIGN NUKTA 112E9 ; [.0000.00C2.0002] # KHUDAWADI SIGN NUKTA +1133B ; [.0000.00C2.0002] # COMBINING BINDU BELOW 1133C ; [.0000.00C2.0002] # GRANTHA SIGN NUKTA 11446 ; [.0000.00C2.0002] # NEWA SIGN NUKTA 114C3 ; [.0000.00C2.0002] # TIRHUTA SIGN NUKTA 115C0 ; [.0000.00C2.0002] # SIDDHAM SIGN NUKTA 116B7 ; [.0000.00C2.0002] # TAKRI SIGN NUKTA +1183A ; [.0000.00C2.0002] # DOGRA SIGN NUKTA +11943 ; [.0000.00C2.0002] # DIVES AKURU SIGN NUKTA 11A33 ; [.0000.00C2.0002] # ZANABAZAR SQUARE FINAL CONSONANT MARK 11D42 ; [.0000.00C2.0002] # MASARAM GONDI SIGN NUKTA 0900 ; [.0000.00C3.0002] # DEVANAGARI SIGN INVERTED CANDRABINDU @@ -8242,6 +9026,7 @@ A9B3 ; [.0000.00C2.0002] # JAVANESE SIGN CECAK TELU 0C01 ; [.0000.00C3.0002] # TELUGU SIGN CANDRABINDU 0C81 ; [.0000.00C3.0002] # KANNADA SIGN CANDRABINDU 0D01 ; [.0000.00C3.0002] # MALAYALAM SIGN CANDRABINDU +0D81 ; [.0000.00C3.0002] # SINHALA SIGN CANDRABINDU 1B00 ; [.0000.00C3.0002] # BALINESE SIGN ULU RICEM 1B01 ; [.0000.00C3.0002] # BALINESE SIGN ULU CANDRA A8C5 ; [.0000.00C3.0002] # SAURASHTRA SIGN CANDRABINDU @@ -8250,11 +9035,13 @@ A980 ; [.0000.00C3.0002] # JAVANESE SIGN PANYANGGA 11080 ; [.0000.00C3.0002] # KAITHI SIGN CANDRABINDU 11100 ; [.0000.00C3.0002] # CHAKMA SIGN CANDRABINDU 11180 ; [.0000.00C3.0002] # SHARADA SIGN CANDRABINDU +111CF ; [.0000.00C3.0002] # SHARADA SIGN INVERTED CANDRABINDU 11301 ; [.0000.00C3.0002] # GRANTHA SIGN CANDRABINDU 11443 ; [.0000.00C3.0002] # NEWA SIGN CANDRABINDU 114BF ; [.0000.00C3.0002] # TIRHUTA SIGN CANDRABINDU 115BC ; [.0000.00C3.0002] # SIDDHAM SIGN CANDRABINDU 11640 ; [.0000.00C3.0002] # MODI SIGN ARDHACANDRA +1193C ; [.0000.00C3.0002] # DIVES AKURU SIGN CANDRABINDU 11A35 ; [.0000.00C3.0002] # ZANABAZAR SQUARE SIGN CANDRABINDU 11A36 ; [.0000.00C3.0002] # ZANABAZAR SQUARE SIGN CANDRABINDU WITH ORNAMENT 11A37 ; [.0000.00C3.0002] # ZANABAZAR SQUARE SIGN CANDRA WITH ORNAMENT @@ -8268,6 +9055,7 @@ A980 ; [.0000.00C3.0002] # JAVANESE SIGN PANYANGGA 0B02 ; [.0000.00C4.0002] # ORIYA SIGN ANUSVARA 0B82 ; [.0000.00C4.0002] # TAMIL SIGN ANUSVARA 0C02 ; [.0000.00C4.0002] # TELUGU SIGN ANUSVARA +0C04 ; [.0000.00C4.0002] # TELUGU SIGN COMBINING ANUSVARA ABOVE 0C82 ; [.0000.00C4.0002] # KANNADA SIGN ANUSVARA 0D00 ; [.0000.00C4.0002] # MALAYALAM SIGN COMBINING ANUSVARA ABOVE 0D02 ; [.0000.00C4.0002] # MALAYALAM SIGN ANUSVARA @@ -8296,11 +9084,15 @@ A981 ; [.0000.00C4.0002] # JAVANESE SIGN CECAK 115BD ; [.0000.00C4.0002] # SIDDHAM SIGN ANUSVARA 1163D ; [.0000.00C4.0002] # MODI SIGN ANUSVARA 116AB ; [.0000.00C4.0002] # TAKRI SIGN ANUSVARA +11837 ; [.0000.00C4.0002] # DOGRA SIGN ANUSVARA +1193B ; [.0000.00C4.0002] # DIVES AKURU SIGN ANUSVARA +119DE ; [.0000.00C4.0002] # NANDINAGARI SIGN ANUSVARA 11A38 ; [.0000.00C4.0002] # ZANABAZAR SQUARE SIGN ANUSVARA 11A96 ; [.0000.00C4.0002] # SOYOMBO SIGN ANUSVARA 11C3D ; [.0000.00C4.0002] # BHAIKSUKI SIGN ANUSVARA 11CB5 ; [.0000.00C4.0002] # MARCHEN SIGN ANUSVARA 11D40 ; [.0000.00C4.0002] # MASARAM GONDI SIGN ANUSVARA +11D95 ; [.0000.00C4.0002] # GUNJALA GONDI SIGN ANUSVARA 0903 ; [.0000.00C5.0002] # DEVANAGARI SIGN VISARGA 0983 ; [.0000.00C5.0002] # BENGALI SIGN VISARGA 0A03 ; [.0000.00C5.0002] # GURMUKHI SIGN VISARGA @@ -8330,21502 +9122,22476 @@ A983 ; [.0000.00C5.0002] # JAVANESE SIGN WIGNYAN 115BE ; [.0000.00C5.0002] # SIDDHAM SIGN VISARGA 1163E ; [.0000.00C5.0002] # MODI SIGN VISARGA 116AC ; [.0000.00C5.0002] # TAKRI SIGN VISARGA +11838 ; [.0000.00C5.0002] # DOGRA SIGN VISARGA +119DF ; [.0000.00C5.0002] # NANDINAGARI SIGN VISARGA 11A39 ; [.0000.00C5.0002] # ZANABAZAR SQUARE SIGN VISARGA 11A97 ; [.0000.00C5.0002] # SOYOMBO SIGN VISARGA 11C3E ; [.0000.00C5.0002] # BHAIKSUKI SIGN VISARGA 11D41 ; [.0000.00C5.0002] # MASARAM GONDI SIGN VISARGA -0A70 ; [.0000.00C6.0002] # GURMUKHI TIPPI -0A71 ; [.0000.00C7.0002] # GURMUKHI ADDAK -1B03 ; [.0000.00C8.0002] # BALINESE SIGN SURANG -A982 ; [.0000.00C9.0002] # JAVANESE SIGN LAYAR -1B81 ; [.0000.00CA.0002] # SUNDANESE SIGN PANGLAYAR -ABEC ; [.0000.00CB.0002] # MEETEI MAYEK LUM IYEK -10A38 ; [.0000.00CC.0002] # KHAROSHTHI SIGN BAR ABOVE -10A39 ; [.0000.00CD.0002] # KHAROSHTHI SIGN CAUDA -10A3A ; [.0000.00CE.0002] # KHAROSHTHI SIGN DOT BELOW -111CB ; [.0000.00CF.0002] # SHARADA VOWEL MODIFIER MARK -111CC ; [.0000.00D0.0002] # SHARADA EXTRA SHORT VOWEL MARK -11A98 ; [.0000.00D1.0002] # SOYOMBO GEMINATION MARK -0E4E ; [.0000.00D2.0002] # THAI CHARACTER YAMAKKAN -0E47 ; [.0000.00D3.0002] # THAI CHARACTER MAITAIKHU -0E48 ; [.0000.00D4.0002] # THAI CHARACTER MAI EK -0E49 ; [.0000.00D5.0002] # THAI CHARACTER MAI THO -0E4A ; [.0000.00D6.0002] # THAI CHARACTER MAI TRI -0E4B ; [.0000.00D7.0002] # THAI CHARACTER MAI CHATTAWA -0E4C ; [.0000.00D8.0002] # THAI CHARACTER THANTHAKHAT -0E4D ; [.0000.00D9.0002] # THAI CHARACTER NIKHAHIT -0EC8 ; [.0000.00DA.0002] # LAO TONE MAI EK -0EC9 ; [.0000.00DB.0002] # LAO TONE MAI THO -0ECA ; [.0000.00DC.0002] # LAO TONE MAI TI -0ECB ; [.0000.00DD.0002] # LAO TONE MAI CATAWA -0ECC ; [.0000.00DE.0002] # LAO CANCELLATION MARK -0ECD ; [.0000.00DF.0002] # LAO NIGGAHITA -AABF ; [.0000.00E0.0002] # TAI VIET TONE MAI EK -AAC1 ; [.0000.00E1.0002] # TAI VIET TONE MAI THO -0F39 ; [.0000.00E2.0002] # TIBETAN MARK TSA -PHRU -A92B ; [.0000.00E3.0002] # KAYAH LI TONE PLOPHU -A92C ; [.0000.00E4.0002] # KAYAH LI TONE CALYA -A92D ; [.0000.00E5.0002] # KAYAH LI TONE CALYA PLOPHU -1037 ; [.0000.00E6.0002] # MYANMAR SIGN DOT BELOW -17C8 ; [.0000.00E7.0002] # KHMER SIGN YUUKALEAPINTU -17C9 ; [.0000.00E8.0002] # KHMER SIGN MUUSIKATOAN -17CA ; [.0000.00E9.0002] # KHMER SIGN TRIISAP -1A75 ; [.0000.00EA.0002] # TAI THAM SIGN TONE-1 -1A76 ; [.0000.00EB.0002] # TAI THAM SIGN TONE-2 -1A77 ; [.0000.00EC.0002] # TAI THAM SIGN KHUEN TONE-3 -1A78 ; [.0000.00ED.0002] # TAI THAM SIGN KHUEN TONE-4 -1A79 ; [.0000.00EE.0002] # TAI THAM SIGN KHUEN TONE-5 -1A7A ; [.0000.00EF.0002] # TAI THAM SIGN RA HAAM -1A7B ; [.0000.00F0.0002] # TAI THAM SIGN MAI SAM -1A7C ; [.0000.00F1.0002] # TAI THAM SIGN KHUEN-LUE KARAN -1939 ; [.0000.00F2.0002] # LIMBU SIGN MUKPHRENG -193A ; [.0000.00F3.0002] # LIMBU SIGN KEMPHRENG -193B ; [.0000.00F4.0002] # LIMBU SIGN SA-I -16B30 ; [.0000.00F5.0002] # PAHAWH HMONG MARK CIM TUB -16B31 ; [.0000.00F6.0002] # PAHAWH HMONG MARK CIM SO -16B32 ; [.0000.00F7.0002] # PAHAWH HMONG MARK CIM KES -16B33 ; [.0000.00F8.0002] # PAHAWH HMONG MARK CIM KHAV -16B34 ; [.0000.00F9.0002] # PAHAWH HMONG MARK CIM SUAM -16B35 ; [.0000.00FA.0002] # PAHAWH HMONG MARK CIM HOM -16B36 ; [.0000.00FB.0002] # PAHAWH HMONG MARK CIM TAUM -302A ; [.0000.00FC.0002] # IDEOGRAPHIC LEVEL TONE MARK -302B ; [.0000.00FD.0002] # IDEOGRAPHIC RISING TONE MARK -302C ; [.0000.00FE.0002] # IDEOGRAPHIC DEPARTING TONE MARK -302D ; [.0000.00FF.0002] # IDEOGRAPHIC ENTERING TONE MARK -302E ; [.0000.0100.0002] # HANGUL SINGLE DOT TONE MARK -302F ; [.0000.0101.0002] # HANGUL DOUBLE DOT TONE MARK -20D0 ; [.0000.0102.0002] # COMBINING LEFT HARPOON ABOVE -20D1 ; [.0000.0103.0002] # COMBINING RIGHT HARPOON ABOVE -20D2 ; [.0000.0104.0002] # COMBINING LONG VERTICAL LINE OVERLAY -20D3 ; [.0000.0104.0002] # COMBINING SHORT VERTICAL LINE OVERLAY -20D4 ; [.0000.0105.0002] # COMBINING ANTICLOCKWISE ARROW ABOVE -20D5 ; [.0000.0106.0002] # COMBINING CLOCKWISE ARROW ABOVE -20D6 ; [.0000.0107.0002] # COMBINING LEFT ARROW ABOVE -20D7 ; [.0000.0108.0002] # COMBINING RIGHT ARROW ABOVE -20DB ; [.0000.0109.0002] # COMBINING THREE DOTS ABOVE -20DC ; [.0000.010A.0002] # COMBINING FOUR DOTS ABOVE -20E1 ; [.0000.010B.0002] # COMBINING LEFT RIGHT ARROW ABOVE -20E6 ; [.0000.010C.0002] # COMBINING DOUBLE VERTICAL STROKE OVERLAY -20E7 ; [.0000.010D.0002] # COMBINING ANNUITY SYMBOL -20E8 ; [.0000.010E.0002] # COMBINING TRIPLE UNDERDOT -20E9 ; [.0000.010F.0002] # COMBINING WIDE BRIDGE ABOVE -101FD ; [.0000.0110.0002] # PHAISTOS DISC SIGN COMBINING OBLIQUE STROKE -02D0 ; [.1C5C.0020.0002] # MODIFIER LETTER TRIANGULAR COLON -02D1 ; [.1C5D.0020.0002] # MODIFIER LETTER HALF TRIANGULAR COLON -0971 ; [.1C5E.0020.0002] # DEVANAGARI SIGN HIGH SPACING DOT -0E46 ; [.1C5F.0020.0002] # THAI CHARACTER MAIYAMOK -0EC6 ; [.1C60.0020.0002] # LAO KO LA -17D7 ; [.1C61.0020.0002] # KHMER SIGN LEK TOO -1AA7 ; [.1C62.0020.0002] # TAI THAM SIGN MAI YAMOK -A9CF ; [.1C63.0020.0002] # JAVANESE PANGRANGKEP -A9E6 ; [.1C64.0020.0002] # MYANMAR MODIFIER LETTER SHAN REDUPLICATION -AA70 ; [.1C65.0020.0002] # MYANMAR MODIFIER LETTER KHAMTI REDUPLICATION -AADD ; [.1C66.0020.0002] # TAI VIET SYMBOL SAM -AAF3 ; [.1C67.0020.0002] # MEETEI MAYEK SYLLABLE REPETITION MARK -AAF4 ; [.1C68.0020.0002] # MEETEI MAYEK WORD REPETITION MARK -16B42 ; [.1C69.0020.0002] # PAHAWH HMONG SIGN VOS NRUA -16B43 ; [.1C6A.0020.0002] # PAHAWH HMONG SIGN IB YAM -3005 ; [.1C6B.0020.0002] # IDEOGRAPHIC ITERATION MARK -303B ; [.1C6C.0020.0002] # VERTICAL IDEOGRAPHIC ITERATION MARK -16FE0 ; [.1C6D.0020.0002] # TANGUT ITERATION MARK -16FE1 ; [.1C6E.0020.0002] # NUSHU ITERATION MARK -3031 ; [.1C6F.0020.0002] # VERTICAL KANA REPEAT MARK -3032 ; [.1C6F.0020.0002][.0000.0037.0002] # VERTICAL KANA REPEAT WITH VOICED SOUND MARK -3033 ; [.1C70.0020.0002] # VERTICAL KANA REPEAT MARK UPPER HALF -3034 ; [.1C70.0020.0002][.0000.0037.0002] # VERTICAL KANA REPEAT WITH VOICED SOUND MARK UPPER HALF -3035 ; [.1C71.0020.0002] # VERTICAL KANA REPEAT MARK LOWER HALF -309D ; [.1C72.0020.0002] # HIRAGANA ITERATION MARK -309E ; [.1C72.0020.0002][.0000.0037.0002] # HIRAGANA VOICED ITERATION MARK -30FC ; [.1C73.0020.0002] # KATAKANA-HIRAGANA PROLONGED SOUND MARK -FF70 ; [.1C73.0020.0012] # HALFWIDTH KATAKANA-HIRAGANA PROLONGED SOUND MARK -30FD ; [.1C74.0020.0002] # KATAKANA ITERATION MARK -30FE ; [.1C74.0020.0002][.0000.0037.0002] # KATAKANA VOICED ITERATION MARK -00A4 ; [.1C75.0020.0002] # CURRENCY SIGN -00A2 ; [.1C76.0020.0002] # CENT SIGN -FFE0 ; [.1C76.0020.0003] # FULLWIDTH CENT SIGN -0024 ; [.1C77.0020.0002] # DOLLAR SIGN -FF04 ; [.1C77.0020.0003] # FULLWIDTH DOLLAR SIGN -FE69 ; [.1C77.0020.000F] # SMALL DOLLAR SIGN -00A3 ; [.1C78.0020.0002] # POUND SIGN -FFE1 ; [.1C78.0020.0003] # FULLWIDTH POUND SIGN -00A5 ; [.1C79.0020.0002] # YEN SIGN -FFE5 ; [.1C79.0020.0003] # FULLWIDTH YEN SIGN -058F ; [.1C7A.0020.0002] # ARMENIAN DRAM SIGN -060B ; [.1C7B.0020.0002] # AFGHANI SIGN -09F2 ; [.1C7C.0020.0002] # BENGALI RUPEE MARK -09F3 ; [.1C7D.0020.0002] # BENGALI RUPEE SIGN -09FB ; [.1C7E.0020.0002] # BENGALI GANDA MARK -0AF1 ; [.1C7F.0020.0002] # GUJARATI RUPEE SIGN -A838 ; [.1C80.0020.0002] # NORTH INDIC RUPEE MARK -0BF9 ; [.1C81.0020.0002] # TAMIL RUPEE SIGN -0E3F ; [.1C82.0020.0002] # THAI CURRENCY SYMBOL BAHT -17DB ; [.1C83.0020.0002] # KHMER CURRENCY SYMBOL RIEL -20A0 ; [.1C84.0020.0002] # EURO-CURRENCY SIGN -20A1 ; [.1C85.0020.0002] # COLON SIGN -20A2 ; [.1C86.0020.0002] # CRUZEIRO SIGN -20A3 ; [.1C87.0020.0002] # FRENCH FRANC SIGN -20A4 ; [.1C88.0020.0002] # LIRA SIGN -20A5 ; [.1C89.0020.0002] # MILL SIGN -20A6 ; [.1C8A.0020.0002] # NAIRA SIGN -20A7 ; [.1C8B.0020.0002] # PESETA SIGN -20A9 ; [.1C8C.0020.0002] # WON SIGN -FFE6 ; [.1C8C.0020.0003] # FULLWIDTH WON SIGN -20AA ; [.1C8D.0020.0002] # NEW SHEQEL SIGN -20AB ; [.1C8E.0020.0002] # DONG SIGN -20AC ; [.1C8F.0020.0002] # EURO SIGN -20AD ; [.1C90.0020.0002] # KIP SIGN -20AE ; [.1C91.0020.0002] # TUGRIK SIGN -20AF ; [.1C92.0020.0002] # DRACHMA SIGN -20B0 ; [.1C93.0020.0002] # GERMAN PENNY SIGN -20B1 ; [.1C94.0020.0002] # PESO SIGN -20B2 ; [.1C95.0020.0002] # GUARANI SIGN -20B3 ; [.1C96.0020.0002] # AUSTRAL SIGN -20B4 ; [.1C97.0020.0002] # HRYVNIA SIGN -20B5 ; [.1C98.0020.0002] # CEDI SIGN -20B6 ; [.1C99.0020.0002] # LIVRE TOURNOIS SIGN -20B7 ; [.1C9A.0020.0002] # SPESMILO SIGN -20B8 ; [.1C9B.0020.0002] # TENGE SIGN -20B9 ; [.1C9C.0020.0002] # INDIAN RUPEE SIGN -20BA ; [.1C9D.0020.0002] # TURKISH LIRA SIGN -20BB ; [.1C9E.0020.0002] # NORDIC MARK SIGN -20BC ; [.1C9F.0020.0002] # MANAT SIGN -20BD ; [.1CA0.0020.0002] # RUBLE SIGN -20BE ; [.1CA1.0020.0002] # LARI SIGN -20BF ; [.1CA2.0020.0002] # BITCOIN SIGN -0030 ; [.1CA3.0020.0002] # DIGIT ZERO -0660 ; [.1CA3.0020.0002] # ARABIC-INDIC DIGIT ZERO -06F0 ; [.1CA3.0020.0002] # EXTENDED ARABIC-INDIC DIGIT ZERO -07C0 ; [.1CA3.0020.0002] # NKO DIGIT ZERO -0966 ; [.1CA3.0020.0002] # DEVANAGARI DIGIT ZERO -09E6 ; [.1CA3.0020.0002] # BENGALI DIGIT ZERO -0A66 ; [.1CA3.0020.0002] # GURMUKHI DIGIT ZERO -0AE6 ; [.1CA3.0020.0002] # GUJARATI DIGIT ZERO -0B66 ; [.1CA3.0020.0002] # ORIYA DIGIT ZERO -0BE6 ; [.1CA3.0020.0002] # TAMIL DIGIT ZERO -0C66 ; [.1CA3.0020.0002] # TELUGU DIGIT ZERO -0C78 ; [.1CA3.0020.0002] # TELUGU FRACTION DIGIT ZERO FOR ODD POWERS OF FOUR -0CE6 ; [.1CA3.0020.0002] # KANNADA DIGIT ZERO -0D66 ; [.1CA3.0020.0002] # MALAYALAM DIGIT ZERO -0DE6 ; [.1CA3.0020.0002] # SINHALA LITH DIGIT ZERO -0E50 ; [.1CA3.0020.0002] # THAI DIGIT ZERO -0ED0 ; [.1CA3.0020.0002] # LAO DIGIT ZERO -0F20 ; [.1CA3.0020.0002] # TIBETAN DIGIT ZERO -1040 ; [.1CA3.0020.0002] # MYANMAR DIGIT ZERO -1090 ; [.1CA3.0020.0002] # MYANMAR SHAN DIGIT ZERO -17E0 ; [.1CA3.0020.0002] # KHMER DIGIT ZERO -17F0 ; [.1CA3.0020.0002] # KHMER SYMBOL LEK ATTAK SON -1810 ; [.1CA3.0020.0002] # MONGOLIAN DIGIT ZERO -1946 ; [.1CA3.0020.0002] # LIMBU DIGIT ZERO -19D0 ; [.1CA3.0020.0002] # NEW TAI LUE DIGIT ZERO -1A80 ; [.1CA3.0020.0002] # TAI THAM HORA DIGIT ZERO -1A90 ; [.1CA3.0020.0002] # TAI THAM THAM DIGIT ZERO -1B50 ; [.1CA3.0020.0002] # BALINESE DIGIT ZERO -1BB0 ; [.1CA3.0020.0002] # SUNDANESE DIGIT ZERO -1C40 ; [.1CA3.0020.0002] # LEPCHA DIGIT ZERO -1C50 ; [.1CA3.0020.0002] # OL CHIKI DIGIT ZERO -3007 ; [.1CA3.0020.0002] # IDEOGRAPHIC NUMBER ZERO -A620 ; [.1CA3.0020.0002] # VAI DIGIT ZERO -A8D0 ; [.1CA3.0020.0002] # SAURASHTRA DIGIT ZERO -A900 ; [.1CA3.0020.0002] # KAYAH LI DIGIT ZERO -A9D0 ; [.1CA3.0020.0002] # JAVANESE DIGIT ZERO -A9F0 ; [.1CA3.0020.0002] # MYANMAR TAI LAING DIGIT ZERO -AA50 ; [.1CA3.0020.0002] # CHAM DIGIT ZERO -ABF0 ; [.1CA3.0020.0002] # MEETEI MAYEK DIGIT ZERO -1018A ; [.1CA3.0020.0002] # GREEK ZERO SIGN -104A0 ; [.1CA3.0020.0002] # OSMANYA DIGIT ZERO -11066 ; [.1CA3.0020.0002] # BRAHMI DIGIT ZERO -110F0 ; [.1CA3.0020.0002] # SORA SOMPENG DIGIT ZERO -11136 ; [.1CA3.0020.0002] # CHAKMA DIGIT ZERO -111D0 ; [.1CA3.0020.0002] # SHARADA DIGIT ZERO -112F0 ; [.1CA3.0020.0002] # KHUDAWADI DIGIT ZERO -11450 ; [.1CA3.0020.0002] # NEWA DIGIT ZERO -114D0 ; [.1CA3.0020.0002] # TIRHUTA DIGIT ZERO -11650 ; [.1CA3.0020.0002] # MODI DIGIT ZERO -116C0 ; [.1CA3.0020.0002] # TAKRI DIGIT ZERO -11730 ; [.1CA3.0020.0002] # AHOM DIGIT ZERO -118E0 ; [.1CA3.0020.0002] # WARANG CITI DIGIT ZERO -11C50 ; [.1CA3.0020.0002] # BHAIKSUKI DIGIT ZERO -11D50 ; [.1CA3.0020.0002] # MASARAM GONDI DIGIT ZERO -16A60 ; [.1CA3.0020.0002] # MRO DIGIT ZERO -16B50 ; [.1CA3.0020.0002] # PAHAWH HMONG DIGIT ZERO -1E950 ; [.1CA3.0020.0002] # ADLAM DIGIT ZERO -FF10 ; [.1CA3.0020.0003] # FULLWIDTH DIGIT ZERO -0F33 ; [.1CA3.0020.0004] # TIBETAN DIGIT HALF ZERO -1F100 ; [.1CA3.0020.0004][*0278.0020.0004] # DIGIT ZERO FULL STOP -1F101 ; [.1CA3.0020.0004][*0222.0020.0004] # DIGIT ZERO COMMA -1D7CE ; [.1CA3.0020.0005] # MATHEMATICAL BOLD DIGIT ZERO -1D7D8 ; [.1CA3.0020.0005] # MATHEMATICAL DOUBLE-STRUCK DIGIT ZERO -1D7E2 ; [.1CA3.0020.0005] # MATHEMATICAL SANS-SERIF DIGIT ZERO -1D7EC ; [.1CA3.0020.0005] # MATHEMATICAL SANS-SERIF BOLD DIGIT ZERO -1D7F6 ; [.1CA3.0020.0005] # MATHEMATICAL MONOSPACE DIGIT ZERO -24EA ; [.1CA3.0020.0006] # CIRCLED DIGIT ZERO -24FF ; [.1CA3.0020.0006] # NEGATIVE CIRCLED DIGIT ZERO -1F10B ; [.1CA3.0020.0006] # DINGBAT CIRCLED SANS-SERIF DIGIT ZERO -1F10C ; [.1CA3.0020.0006] # DINGBAT NEGATIVE CIRCLED SANS-SERIF DIGIT ZERO -2070 ; [.1CA3.0020.0014] # SUPERSCRIPT ZERO -2080 ; [.1CA3.0020.0015] # SUBSCRIPT ZERO -2189 ; [.1CA3.0020.001E][*063C.0020.001E][.1CA6.0020.001E] # VULGAR FRACTION ZERO THIRDS -3358 ; [.1CA3.0020.0004][.FB40.0020.0004][.F0B9.0000.0000] # IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR ZERO -0031 ; [.1CA4.0020.0002] # DIGIT ONE -0661 ; [.1CA4.0020.0002] # ARABIC-INDIC DIGIT ONE -06F1 ; [.1CA4.0020.0002] # EXTENDED ARABIC-INDIC DIGIT ONE -07C1 ; [.1CA4.0020.0002] # NKO DIGIT ONE -0967 ; [.1CA4.0020.0002] # DEVANAGARI DIGIT ONE -09E7 ; [.1CA4.0020.0002] # BENGALI DIGIT ONE -0A67 ; [.1CA4.0020.0002] # GURMUKHI DIGIT ONE -0AE7 ; [.1CA4.0020.0002] # GUJARATI DIGIT ONE -0B67 ; [.1CA4.0020.0002] # ORIYA DIGIT ONE -0BE7 ; [.1CA4.0020.0002] # TAMIL DIGIT ONE -0C67 ; [.1CA4.0020.0002] # TELUGU DIGIT ONE -0C79 ; [.1CA4.0020.0002] # TELUGU FRACTION DIGIT ONE FOR ODD POWERS OF FOUR -0C7C ; [.1CA4.0020.0002] # TELUGU FRACTION DIGIT ONE FOR EVEN POWERS OF FOUR -0CE7 ; [.1CA4.0020.0002] # KANNADA DIGIT ONE -0D67 ; [.1CA4.0020.0002] # MALAYALAM DIGIT ONE -0DE7 ; [.1CA4.0020.0002] # SINHALA LITH DIGIT ONE -0E51 ; [.1CA4.0020.0002] # THAI DIGIT ONE -0ED1 ; [.1CA4.0020.0002] # LAO DIGIT ONE -0F21 ; [.1CA4.0020.0002] # TIBETAN DIGIT ONE -1041 ; [.1CA4.0020.0002] # MYANMAR DIGIT ONE -1091 ; [.1CA4.0020.0002] # MYANMAR SHAN DIGIT ONE -1369 ; [.1CA4.0020.0002] # ETHIOPIC DIGIT ONE -17E1 ; [.1CA4.0020.0002] # KHMER DIGIT ONE -17F1 ; [.1CA4.0020.0002] # KHMER SYMBOL LEK ATTAK MUOY -1811 ; [.1CA4.0020.0002] # MONGOLIAN DIGIT ONE -1947 ; [.1CA4.0020.0002] # LIMBU DIGIT ONE -19D1 ; [.1CA4.0020.0002] # NEW TAI LUE DIGIT ONE -19DA ; [.1CA4.0020.0002] # NEW TAI LUE THAM DIGIT ONE -1A81 ; [.1CA4.0020.0002] # TAI THAM HORA DIGIT ONE -1A91 ; [.1CA4.0020.0002] # TAI THAM THAM DIGIT ONE -1B51 ; [.1CA4.0020.0002] # BALINESE DIGIT ONE -1BB1 ; [.1CA4.0020.0002] # SUNDANESE DIGIT ONE -1C41 ; [.1CA4.0020.0002] # LEPCHA DIGIT ONE -1C51 ; [.1CA4.0020.0002] # OL CHIKI DIGIT ONE -3021 ; [.1CA4.0020.0002] # HANGZHOU NUMERAL ONE -A621 ; [.1CA4.0020.0002] # VAI DIGIT ONE -A8D1 ; [.1CA4.0020.0002] # SAURASHTRA DIGIT ONE -A901 ; [.1CA4.0020.0002] # KAYAH LI DIGIT ONE -A9D1 ; [.1CA4.0020.0002] # JAVANESE DIGIT ONE -A9F1 ; [.1CA4.0020.0002] # MYANMAR TAI LAING DIGIT ONE -AA51 ; [.1CA4.0020.0002] # CHAM DIGIT ONE -ABF1 ; [.1CA4.0020.0002] # MEETEI MAYEK DIGIT ONE -10107 ; [.1CA4.0020.0002] # AEGEAN NUMBER ONE -10142 ; [.1CA4.0020.0002] # GREEK ACROPHONIC ATTIC ONE DRACHMA -10158 ; [.1CA4.0020.0002] # GREEK ACROPHONIC HERAEUM ONE PLETHRON -10159 ; [.1CA4.0020.0002] # GREEK ACROPHONIC THESPIAN ONE -1015A ; [.1CA4.0020.0002] # GREEK ACROPHONIC HERMIONIAN ONE -102E1 ; [.1CA4.0020.0002] # COPTIC EPACT DIGIT ONE -10320 ; [.1CA4.0020.0002] # OLD ITALIC NUMERAL ONE -103D1 ; [.1CA4.0020.0002] # OLD PERSIAN NUMBER ONE -104A1 ; [.1CA4.0020.0002] # OSMANYA DIGIT ONE -10858 ; [.1CA4.0020.0002] # IMPERIAL ARAMAIC NUMBER ONE -10879 ; [.1CA4.0020.0002] # PALMYRENE NUMBER ONE -108A7 ; [.1CA4.0020.0002] # NABATAEAN NUMBER ONE -108FB ; [.1CA4.0020.0002] # HATRAN NUMBER ONE -10916 ; [.1CA4.0020.0002] # PHOENICIAN NUMBER ONE -109C0 ; [.1CA4.0020.0002] # MEROITIC CURSIVE NUMBER ONE -10A40 ; [.1CA4.0020.0002] # KHAROSHTHI DIGIT ONE -10A7D ; [.1CA4.0020.0002] # OLD SOUTH ARABIAN NUMBER ONE -10A9D ; [.1CA4.0020.0002] # OLD NORTH ARABIAN NUMBER ONE -10AEB ; [.1CA4.0020.0002] # MANICHAEAN NUMBER ONE -10B58 ; [.1CA4.0020.0002] # INSCRIPTIONAL PARTHIAN NUMBER ONE -10B78 ; [.1CA4.0020.0002] # INSCRIPTIONAL PAHLAVI NUMBER ONE -10BA9 ; [.1CA4.0020.0002] # PSALTER PAHLAVI NUMBER ONE -10CFA ; [.1CA4.0020.0002] # OLD HUNGARIAN NUMBER ONE -10E60 ; [.1CA4.0020.0002] # RUMI DIGIT ONE -11052 ; [.1CA4.0020.0002] # BRAHMI NUMBER ONE -11067 ; [.1CA4.0020.0002] # BRAHMI DIGIT ONE -110F1 ; [.1CA4.0020.0002] # SORA SOMPENG DIGIT ONE -11137 ; [.1CA4.0020.0002] # CHAKMA DIGIT ONE -111D1 ; [.1CA4.0020.0002] # SHARADA DIGIT ONE -111E1 ; [.1CA4.0020.0002] # SINHALA ARCHAIC DIGIT ONE -112F1 ; [.1CA4.0020.0002] # KHUDAWADI DIGIT ONE -11451 ; [.1CA4.0020.0002] # NEWA DIGIT ONE -114D1 ; [.1CA4.0020.0002] # TIRHUTA DIGIT ONE -11651 ; [.1CA4.0020.0002] # MODI DIGIT ONE -116C1 ; [.1CA4.0020.0002] # TAKRI DIGIT ONE -11731 ; [.1CA4.0020.0002] # AHOM DIGIT ONE -118E1 ; [.1CA4.0020.0002] # WARANG CITI DIGIT ONE -11C51 ; [.1CA4.0020.0002] # BHAIKSUKI DIGIT ONE -11C5A ; [.1CA4.0020.0002] # BHAIKSUKI NUMBER ONE -11D51 ; [.1CA4.0020.0002] # MASARAM GONDI DIGIT ONE -12415 ; [.1CA4.0020.0002] # CUNEIFORM NUMERIC SIGN ONE GESH2 -1241E ; [.1CA4.0020.0002] # CUNEIFORM NUMERIC SIGN ONE GESHU -1242C ; [.1CA4.0020.0002] # CUNEIFORM NUMERIC SIGN ONE SHARU -12434 ; [.1CA4.0020.0002] # CUNEIFORM NUMERIC SIGN ONE BURU -1244F ; [.1CA4.0020.0002] # CUNEIFORM NUMERIC SIGN ONE BAN2 -12458 ; [.1CA4.0020.0002] # CUNEIFORM NUMERIC SIGN ONE ESHE3 -16A61 ; [.1CA4.0020.0002] # MRO DIGIT ONE -16B51 ; [.1CA4.0020.0002] # PAHAWH HMONG DIGIT ONE -1D360 ; [.1CA4.0020.0002] # COUNTING ROD UNIT DIGIT ONE -1E8C7 ; [.1CA4.0020.0002] # MENDE KIKAKUI DIGIT ONE -1E951 ; [.1CA4.0020.0002] # ADLAM DIGIT ONE -FF11 ; [.1CA4.0020.0003] # FULLWIDTH DIGIT ONE -0F2A ; [.1CA4.0020.0004] # TIBETAN DIGIT HALF ONE -2474 ; [*0318.0020.0004][.1CA4.0020.0004][*0319.0020.0004] # PARENTHESIZED DIGIT ONE -2488 ; [.1CA4.0020.0004][*0278.0020.0004] # DIGIT ONE FULL STOP -1F102 ; [.1CA4.0020.0004][*0222.0020.0004] # DIGIT ONE COMMA -1D7CF ; [.1CA4.0020.0005] # MATHEMATICAL BOLD DIGIT ONE -1D7D9 ; [.1CA4.0020.0005] # MATHEMATICAL DOUBLE-STRUCK DIGIT ONE -1D7E3 ; [.1CA4.0020.0005] # MATHEMATICAL SANS-SERIF DIGIT ONE -1D7ED ; [.1CA4.0020.0005] # MATHEMATICAL SANS-SERIF BOLD DIGIT ONE -1D7F7 ; [.1CA4.0020.0005] # MATHEMATICAL MONOSPACE DIGIT ONE -2460 ; [.1CA4.0020.0006] # CIRCLED DIGIT ONE -24F5 ; [.1CA4.0020.0006] # DOUBLE CIRCLED DIGIT ONE -2776 ; [.1CA4.0020.0006] # DINGBAT NEGATIVE CIRCLED DIGIT ONE -2780 ; [.1CA4.0020.0006] # DINGBAT CIRCLED SANS-SERIF DIGIT ONE -278A ; [.1CA4.0020.0006] # DINGBAT NEGATIVE CIRCLED SANS-SERIF DIGIT ONE -00B9 ; [.1CA4.0020.0014] # SUPERSCRIPT ONE -2081 ; [.1CA4.0020.0015] # SUBSCRIPT ONE -215F ; [.1CA4.0020.001E][*063C.0020.001E] # FRACTION NUMERATOR ONE -247D ; [*0318.0020.0004][.1CA4.0020.0004][.1CA3.0020.0004][*0319.0020.0004] # PARENTHESIZED NUMBER TEN -2491 ; [.1CA4.0020.0004][.1CA3.0020.0004][*0278.0020.0004] # NUMBER TEN FULL STOP -2469 ; [.1CA4.0020.0006][.1CA3.0020.0006] # CIRCLED NUMBER TEN -24FE ; [.1CA4.0020.0006][.1CA3.0020.0006] # DOUBLE CIRCLED NUMBER TEN -277F ; [.1CA4.0020.0006][.1CA3.0020.0006] # DINGBAT NEGATIVE CIRCLED NUMBER TEN -2789 ; [.1CA4.0020.0006][.1CA3.0020.0006] # DINGBAT CIRCLED SANS-SERIF NUMBER TEN -2793 ; [.1CA4.0020.0006][.1CA3.0020.0006] # DINGBAT NEGATIVE CIRCLED SANS-SERIF NUMBER TEN -3248 ; [.1CA4.0020.0006][.1CA3.0020.0006] # CIRCLED NUMBER TEN ON BLACK SQUARE -33E9 ; [.1CA4.0020.0004][.1CA3.0020.0004][.FB40.0020.0004][.E5E5.0000.0000] # IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY TEN -32C9 ; [.1CA4.0020.0004][.1CA3.0020.0004][.FB40.0020.0004][.E708.0000.0000] # IDEOGRAPHIC TELEGRAPH SYMBOL FOR OCTOBER -3362 ; [.1CA4.0020.0004][.1CA3.0020.0004][.FB40.0020.0004][.F0B9.0000.0000] # IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR TEN -247E ; [*0318.0020.0004][.1CA4.0020.0004][.1CA4.0020.0004][*0319.0020.0004] # PARENTHESIZED NUMBER ELEVEN -2492 ; [.1CA4.0020.0004][.1CA4.0020.0004][*0278.0020.0004] # NUMBER ELEVEN FULL STOP -246A ; [.1CA4.0020.0006][.1CA4.0020.0006] # CIRCLED NUMBER ELEVEN -24EB ; [.1CA4.0020.0006][.1CA4.0020.0006] # NEGATIVE CIRCLED NUMBER ELEVEN -2152 ; [.1CA4.0020.001E][*063C.0020.001E][.1CA4.0020.001E][.1CA3.0020.001E] # VULGAR FRACTION ONE TENTH -33EA ; [.1CA4.0020.0004][.1CA4.0020.0004][.FB40.0020.0004][.E5E5.0000.0000] # IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY ELEVEN -32CA ; [.1CA4.0020.0004][.1CA4.0020.0004][.FB40.0020.0004][.E708.0000.0000] # IDEOGRAPHIC TELEGRAPH SYMBOL FOR NOVEMBER -3363 ; [.1CA4.0020.0004][.1CA4.0020.0004][.FB40.0020.0004][.F0B9.0000.0000] # IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR ELEVEN -247F ; [*0318.0020.0004][.1CA4.0020.0004][.1CA5.0020.0004][*0319.0020.0004] # PARENTHESIZED NUMBER TWELVE -2493 ; [.1CA4.0020.0004][.1CA5.0020.0004][*0278.0020.0004] # NUMBER TWELVE FULL STOP -246B ; [.1CA4.0020.0006][.1CA5.0020.0006] # CIRCLED NUMBER TWELVE -24EC ; [.1CA4.0020.0006][.1CA5.0020.0006] # NEGATIVE CIRCLED NUMBER TWELVE -00BD ; [.1CA4.0020.001E][*063C.0020.001E][.1CA5.0020.001E] # VULGAR FRACTION ONE HALF -1F1A4 ; [.1CA4.0020.001C][.1CA5.0020.001C][.1CA3.0020.001C][.1E72.0020.001D] # SQUARED ONE HUNDRED TWENTY P -33EB ; [.1CA4.0020.0004][.1CA5.0020.0004][.FB40.0020.0004][.E5E5.0000.0000] # IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY TWELVE -32CB ; [.1CA4.0020.0004][.1CA5.0020.0004][.FB40.0020.0004][.E708.0000.0000] # IDEOGRAPHIC TELEGRAPH SYMBOL FOR DECEMBER -3364 ; [.1CA4.0020.0004][.1CA5.0020.0004][.FB40.0020.0004][.F0B9.0000.0000] # IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR TWELVE -2480 ; [*0318.0020.0004][.1CA4.0020.0004][.1CA6.0020.0004][*0319.0020.0004] # PARENTHESIZED NUMBER THIRTEEN -2494 ; [.1CA4.0020.0004][.1CA6.0020.0004][*0278.0020.0004] # NUMBER THIRTEEN FULL STOP -246C ; [.1CA4.0020.0006][.1CA6.0020.0006] # CIRCLED NUMBER THIRTEEN -24ED ; [.1CA4.0020.0006][.1CA6.0020.0006] # NEGATIVE CIRCLED NUMBER THIRTEEN -2153 ; [.1CA4.0020.001E][*063C.0020.001E][.1CA6.0020.001E] # VULGAR FRACTION ONE THIRD -33EC ; [.1CA4.0020.0004][.1CA6.0020.0004][.FB40.0020.0004][.E5E5.0000.0000] # IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY THIRTEEN -3365 ; [.1CA4.0020.0004][.1CA6.0020.0004][.FB40.0020.0004][.F0B9.0000.0000] # IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR THIRTEEN -2481 ; [*0318.0020.0004][.1CA4.0020.0004][.1CA7.0020.0004][*0319.0020.0004] # PARENTHESIZED NUMBER FOURTEEN -2495 ; [.1CA4.0020.0004][.1CA7.0020.0004][*0278.0020.0004] # NUMBER FOURTEEN FULL STOP -246D ; [.1CA4.0020.0006][.1CA7.0020.0006] # CIRCLED NUMBER FOURTEEN -24EE ; [.1CA4.0020.0006][.1CA7.0020.0006] # NEGATIVE CIRCLED NUMBER FOURTEEN -00BC ; [.1CA4.0020.001E][*063C.0020.001E][.1CA7.0020.001E] # VULGAR FRACTION ONE QUARTER -33ED ; [.1CA4.0020.0004][.1CA7.0020.0004][.FB40.0020.0004][.E5E5.0000.0000] # IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY FOURTEEN -3366 ; [.1CA4.0020.0004][.1CA7.0020.0004][.FB40.0020.0004][.F0B9.0000.0000] # IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR FOURTEEN -2482 ; [*0318.0020.0004][.1CA4.0020.0004][.1CA8.0020.0004][*0319.0020.0004] # PARENTHESIZED NUMBER FIFTEEN -2496 ; [.1CA4.0020.0004][.1CA8.0020.0004][*0278.0020.0004] # NUMBER FIFTEEN FULL STOP -246E ; [.1CA4.0020.0006][.1CA8.0020.0006] # CIRCLED NUMBER FIFTEEN -24EF ; [.1CA4.0020.0006][.1CA8.0020.0006] # NEGATIVE CIRCLED NUMBER FIFTEEN -2155 ; [.1CA4.0020.001E][*063C.0020.001E][.1CA8.0020.001E] # VULGAR FRACTION ONE FIFTH -33EE ; [.1CA4.0020.0004][.1CA8.0020.0004][.FB40.0020.0004][.E5E5.0000.0000] # IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY FIFTEEN -3367 ; [.1CA4.0020.0004][.1CA8.0020.0004][.FB40.0020.0004][.F0B9.0000.0000] # IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR FIFTEEN -2483 ; [*0318.0020.0004][.1CA4.0020.0004][.1CA9.0020.0004][*0319.0020.0004] # PARENTHESIZED NUMBER SIXTEEN -2497 ; [.1CA4.0020.0004][.1CA9.0020.0004][*0278.0020.0004] # NUMBER SIXTEEN FULL STOP -246F ; [.1CA4.0020.0006][.1CA9.0020.0006] # CIRCLED NUMBER SIXTEEN -24F0 ; [.1CA4.0020.0006][.1CA9.0020.0006] # NEGATIVE CIRCLED NUMBER SIXTEEN -2159 ; [.1CA4.0020.001E][*063C.0020.001E][.1CA9.0020.001E] # VULGAR FRACTION ONE SIXTH -33EF ; [.1CA4.0020.0004][.1CA9.0020.0004][.FB40.0020.0004][.E5E5.0000.0000] # IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY SIXTEEN -3368 ; [.1CA4.0020.0004][.1CA9.0020.0004][.FB40.0020.0004][.F0B9.0000.0000] # IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR SIXTEEN -2484 ; [*0318.0020.0004][.1CA4.0020.0004][.1CAA.0020.0004][*0319.0020.0004] # PARENTHESIZED NUMBER SEVENTEEN -2498 ; [.1CA4.0020.0004][.1CAA.0020.0004][*0278.0020.0004] # NUMBER SEVENTEEN FULL STOP -2470 ; [.1CA4.0020.0006][.1CAA.0020.0006] # CIRCLED NUMBER SEVENTEEN -24F1 ; [.1CA4.0020.0006][.1CAA.0020.0006] # NEGATIVE CIRCLED NUMBER SEVENTEEN -2150 ; [.1CA4.0020.001E][*063C.0020.001E][.1CAA.0020.001E] # VULGAR FRACTION ONE SEVENTH -33F0 ; [.1CA4.0020.0004][.1CAA.0020.0004][.FB40.0020.0004][.E5E5.0000.0000] # IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY SEVENTEEN -3369 ; [.1CA4.0020.0004][.1CAA.0020.0004][.FB40.0020.0004][.F0B9.0000.0000] # IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR SEVENTEEN -2485 ; [*0318.0020.0004][.1CA4.0020.0004][.1CAB.0020.0004][*0319.0020.0004] # PARENTHESIZED NUMBER EIGHTEEN -2499 ; [.1CA4.0020.0004][.1CAB.0020.0004][*0278.0020.0004] # NUMBER EIGHTEEN FULL STOP -2471 ; [.1CA4.0020.0006][.1CAB.0020.0006] # CIRCLED NUMBER EIGHTEEN -24F2 ; [.1CA4.0020.0006][.1CAB.0020.0006] # NEGATIVE CIRCLED NUMBER EIGHTEEN -215B ; [.1CA4.0020.001E][*063C.0020.001E][.1CAB.0020.001E] # VULGAR FRACTION ONE EIGHTH -33F1 ; [.1CA4.0020.0004][.1CAB.0020.0004][.FB40.0020.0004][.E5E5.0000.0000] # IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY EIGHTEEN -336A ; [.1CA4.0020.0004][.1CAB.0020.0004][.FB40.0020.0004][.F0B9.0000.0000] # IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR EIGHTEEN -2486 ; [*0318.0020.0004][.1CA4.0020.0004][.1CAC.0020.0004][*0319.0020.0004] # PARENTHESIZED NUMBER NINETEEN -249A ; [.1CA4.0020.0004][.1CAC.0020.0004][*0278.0020.0004] # NUMBER NINETEEN FULL STOP -2472 ; [.1CA4.0020.0006][.1CAC.0020.0006] # CIRCLED NUMBER NINETEEN -24F3 ; [.1CA4.0020.0006][.1CAC.0020.0006] # NEGATIVE CIRCLED NUMBER NINETEEN -2151 ; [.1CA4.0020.001E][*063C.0020.001E][.1CAC.0020.001E] # VULGAR FRACTION ONE NINTH -33F2 ; [.1CA4.0020.0004][.1CAC.0020.0004][.FB40.0020.0004][.E5E5.0000.0000] # IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY NINETEEN -336B ; [.1CA4.0020.0004][.1CAC.0020.0004][.FB40.0020.0004][.F0B9.0000.0000] # IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR NINETEEN -33E0 ; [.1CA4.0020.0004][.FB40.0020.0004][.E5E5.0000.0000] # IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY ONE -32C0 ; [.1CA4.0020.0004][.FB40.0020.0004][.E708.0000.0000] # IDEOGRAPHIC TELEGRAPH SYMBOL FOR JANUARY -3359 ; [.1CA4.0020.0004][.FB40.0020.0004][.F0B9.0000.0000] # IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR ONE -0032 ; [.1CA5.0020.0002] # DIGIT TWO -0662 ; [.1CA5.0020.0002] # ARABIC-INDIC DIGIT TWO -06F2 ; [.1CA5.0020.0002] # EXTENDED ARABIC-INDIC DIGIT TWO -07C2 ; [.1CA5.0020.0002] # NKO DIGIT TWO -0968 ; [.1CA5.0020.0002] # DEVANAGARI DIGIT TWO -09E8 ; [.1CA5.0020.0002] # BENGALI DIGIT TWO -0A68 ; [.1CA5.0020.0002] # GURMUKHI DIGIT TWO -0AE8 ; [.1CA5.0020.0002] # GUJARATI DIGIT TWO -0B68 ; [.1CA5.0020.0002] # ORIYA DIGIT TWO -0BE8 ; [.1CA5.0020.0002] # TAMIL DIGIT TWO -0C68 ; [.1CA5.0020.0002] # TELUGU DIGIT TWO -0C7A ; [.1CA5.0020.0002] # TELUGU FRACTION DIGIT TWO FOR ODD POWERS OF FOUR -0C7D ; [.1CA5.0020.0002] # TELUGU FRACTION DIGIT TWO FOR EVEN POWERS OF FOUR -0CE8 ; [.1CA5.0020.0002] # KANNADA DIGIT TWO -0D68 ; [.1CA5.0020.0002] # MALAYALAM DIGIT TWO -0DE8 ; [.1CA5.0020.0002] # SINHALA LITH DIGIT TWO -0E52 ; [.1CA5.0020.0002] # THAI DIGIT TWO -0ED2 ; [.1CA5.0020.0002] # LAO DIGIT TWO -0F22 ; [.1CA5.0020.0002] # TIBETAN DIGIT TWO -1042 ; [.1CA5.0020.0002] # MYANMAR DIGIT TWO -1092 ; [.1CA5.0020.0002] # MYANMAR SHAN DIGIT TWO -136A ; [.1CA5.0020.0002] # ETHIOPIC DIGIT TWO -17E2 ; [.1CA5.0020.0002] # KHMER DIGIT TWO -17F2 ; [.1CA5.0020.0002] # KHMER SYMBOL LEK ATTAK PII -1812 ; [.1CA5.0020.0002] # MONGOLIAN DIGIT TWO -1948 ; [.1CA5.0020.0002] # LIMBU DIGIT TWO -19D2 ; [.1CA5.0020.0002] # NEW TAI LUE DIGIT TWO -1A82 ; [.1CA5.0020.0002] # TAI THAM HORA DIGIT TWO -1A92 ; [.1CA5.0020.0002] # TAI THAM THAM DIGIT TWO -1B52 ; [.1CA5.0020.0002] # BALINESE DIGIT TWO -1BB2 ; [.1CA5.0020.0002] # SUNDANESE DIGIT TWO -1C42 ; [.1CA5.0020.0002] # LEPCHA DIGIT TWO -1C52 ; [.1CA5.0020.0002] # OL CHIKI DIGIT TWO -3022 ; [.1CA5.0020.0002] # HANGZHOU NUMERAL TWO -A622 ; [.1CA5.0020.0002] # VAI DIGIT TWO -A8D2 ; [.1CA5.0020.0002] # SAURASHTRA DIGIT TWO -A902 ; [.1CA5.0020.0002] # KAYAH LI DIGIT TWO -A9D2 ; [.1CA5.0020.0002] # JAVANESE DIGIT TWO -A9F2 ; [.1CA5.0020.0002] # MYANMAR TAI LAING DIGIT TWO -AA52 ; [.1CA5.0020.0002] # CHAM DIGIT TWO -ABF2 ; [.1CA5.0020.0002] # MEETEI MAYEK DIGIT TWO -10108 ; [.1CA5.0020.0002] # AEGEAN NUMBER TWO -1015B ; [.1CA5.0020.0002] # GREEK ACROPHONIC EPIDAUREAN TWO -1015C ; [.1CA5.0020.0002] # GREEK ACROPHONIC THESPIAN TWO -1015D ; [.1CA5.0020.0002] # GREEK ACROPHONIC CYRENAIC TWO DRACHMAS -1015E ; [.1CA5.0020.0002] # GREEK ACROPHONIC EPIDAUREAN TWO DRACHMAS -102E2 ; [.1CA5.0020.0002] # COPTIC EPACT DIGIT TWO -103D2 ; [.1CA5.0020.0002] # OLD PERSIAN NUMBER TWO -104A2 ; [.1CA5.0020.0002] # OSMANYA DIGIT TWO -10859 ; [.1CA5.0020.0002] # IMPERIAL ARAMAIC NUMBER TWO -1087A ; [.1CA5.0020.0002] # PALMYRENE NUMBER TWO -108A8 ; [.1CA5.0020.0002] # NABATAEAN NUMBER TWO -1091A ; [.1CA5.0020.0002] # PHOENICIAN NUMBER TWO -109C1 ; [.1CA5.0020.0002] # MEROITIC CURSIVE NUMBER TWO -10A41 ; [.1CA5.0020.0002] # KHAROSHTHI DIGIT TWO -10B59 ; [.1CA5.0020.0002] # INSCRIPTIONAL PARTHIAN NUMBER TWO -10B79 ; [.1CA5.0020.0002] # INSCRIPTIONAL PAHLAVI NUMBER TWO -10BAA ; [.1CA5.0020.0002] # PSALTER PAHLAVI NUMBER TWO -10E61 ; [.1CA5.0020.0002] # RUMI DIGIT TWO -11053 ; [.1CA5.0020.0002] # BRAHMI NUMBER TWO -11068 ; [.1CA5.0020.0002] # BRAHMI DIGIT TWO -110F2 ; [.1CA5.0020.0002] # SORA SOMPENG DIGIT TWO -11138 ; [.1CA5.0020.0002] # CHAKMA DIGIT TWO -111D2 ; [.1CA5.0020.0002] # SHARADA DIGIT TWO -111E2 ; [.1CA5.0020.0002] # SINHALA ARCHAIC DIGIT TWO -112F2 ; [.1CA5.0020.0002] # KHUDAWADI DIGIT TWO -11452 ; [.1CA5.0020.0002] # NEWA DIGIT TWO -114D2 ; [.1CA5.0020.0002] # TIRHUTA DIGIT TWO -11652 ; [.1CA5.0020.0002] # MODI DIGIT TWO -116C2 ; [.1CA5.0020.0002] # TAKRI DIGIT TWO -11732 ; [.1CA5.0020.0002] # AHOM DIGIT TWO -118E2 ; [.1CA5.0020.0002] # WARANG CITI DIGIT TWO -11C52 ; [.1CA5.0020.0002] # BHAIKSUKI DIGIT TWO -11C5B ; [.1CA5.0020.0002] # BHAIKSUKI NUMBER TWO -11D52 ; [.1CA5.0020.0002] # MASARAM GONDI DIGIT TWO -12400 ; [.1CA5.0020.0002] # CUNEIFORM NUMERIC SIGN TWO ASH -12416 ; [.1CA5.0020.0002] # CUNEIFORM NUMERIC SIGN TWO GESH2 -1241F ; [.1CA5.0020.0002] # CUNEIFORM NUMERIC SIGN TWO GESHU -12423 ; [.1CA5.0020.0002] # CUNEIFORM NUMERIC SIGN TWO SHAR2 -1242D ; [.1CA5.0020.0002] # CUNEIFORM NUMERIC SIGN TWO SHARU -12435 ; [.1CA5.0020.0002] # CUNEIFORM NUMERIC SIGN TWO BURU -1244A ; [.1CA5.0020.0002] # CUNEIFORM NUMERIC SIGN TWO ASH TENU -12450 ; [.1CA5.0020.0002] # CUNEIFORM NUMERIC SIGN TWO BAN2 -12456 ; [.1CA5.0020.0002] # CUNEIFORM NUMERIC SIGN NIGIDAMIN -12459 ; [.1CA5.0020.0002] # CUNEIFORM NUMERIC SIGN TWO ESHE3 -16A62 ; [.1CA5.0020.0002] # MRO DIGIT TWO -16B52 ; [.1CA5.0020.0002] # PAHAWH HMONG DIGIT TWO -1D361 ; [.1CA5.0020.0002] # COUNTING ROD UNIT DIGIT TWO -1E8C8 ; [.1CA5.0020.0002] # MENDE KIKAKUI DIGIT TWO -1E952 ; [.1CA5.0020.0002] # ADLAM DIGIT TWO -FF12 ; [.1CA5.0020.0003] # FULLWIDTH DIGIT TWO -0F2B ; [.1CA5.0020.0004] # TIBETAN DIGIT HALF TWO -2475 ; [*0318.0020.0004][.1CA5.0020.0004][*0319.0020.0004] # PARENTHESIZED DIGIT TWO -2489 ; [.1CA5.0020.0004][*0278.0020.0004] # DIGIT TWO FULL STOP -1F103 ; [.1CA5.0020.0004][*0222.0020.0004] # DIGIT TWO COMMA -1D7D0 ; [.1CA5.0020.0005] # MATHEMATICAL BOLD DIGIT TWO -1D7DA ; [.1CA5.0020.0005] # MATHEMATICAL DOUBLE-STRUCK DIGIT TWO -1D7E4 ; [.1CA5.0020.0005] # MATHEMATICAL SANS-SERIF DIGIT TWO -1D7EE ; [.1CA5.0020.0005] # MATHEMATICAL SANS-SERIF BOLD DIGIT TWO -1D7F8 ; [.1CA5.0020.0005] # MATHEMATICAL MONOSPACE DIGIT TWO -2461 ; [.1CA5.0020.0006] # CIRCLED DIGIT TWO -24F6 ; [.1CA5.0020.0006] # DOUBLE CIRCLED DIGIT TWO -2777 ; [.1CA5.0020.0006] # DINGBAT NEGATIVE CIRCLED DIGIT TWO -2781 ; [.1CA5.0020.0006] # DINGBAT CIRCLED SANS-SERIF DIGIT TWO -278B ; [.1CA5.0020.0006] # DINGBAT NEGATIVE CIRCLED SANS-SERIF DIGIT TWO -00B2 ; [.1CA5.0020.0014] # SUPERSCRIPT TWO -2082 ; [.1CA5.0020.0015] # SUBSCRIPT TWO -2487 ; [*0318.0020.0004][.1CA5.0020.0004][.1CA3.0020.0004][*0319.0020.0004] # PARENTHESIZED NUMBER TWENTY -249B ; [.1CA5.0020.0004][.1CA3.0020.0004][*0278.0020.0004] # NUMBER TWENTY FULL STOP -2473 ; [.1CA5.0020.0006][.1CA3.0020.0006] # CIRCLED NUMBER TWENTY -24F4 ; [.1CA5.0020.0006][.1CA3.0020.0006] # NEGATIVE CIRCLED NUMBER TWENTY -3249 ; [.1CA5.0020.0006][.1CA3.0020.0006] # CIRCLED NUMBER TWENTY ON BLACK SQUARE -33F3 ; [.1CA5.0020.0004][.1CA3.0020.0004][.FB40.0020.0004][.E5E5.0000.0000] # IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY TWENTY -336C ; [.1CA5.0020.0004][.1CA3.0020.0004][.FB40.0020.0004][.F0B9.0000.0000] # IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR TWENTY -3251 ; [.1CA5.0020.0006][.1CA4.0020.0006] # CIRCLED NUMBER TWENTY ONE -33F4 ; [.1CA5.0020.0004][.1CA4.0020.0004][.FB40.0020.0004][.E5E5.0000.0000] # IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY TWENTY-ONE -336D ; [.1CA5.0020.0004][.1CA4.0020.0004][.FB40.0020.0004][.F0B9.0000.0000] # IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR TWENTY-ONE -3252 ; [.1CA5.0020.0006][.1CA5.0020.0006] # CIRCLED NUMBER TWENTY TWO -1F1A2 ; [.1CA5.0020.001C][.1CA5.0020.001C][*0278.0020.001C][.1CA5.0020.001C] # SQUARED TWENTY-TWO POINT TWO -33F5 ; [.1CA5.0020.0004][.1CA5.0020.0004][.FB40.0020.0004][.E5E5.0000.0000] # IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY TWENTY-TWO -336E ; [.1CA5.0020.0004][.1CA5.0020.0004][.FB40.0020.0004][.F0B9.0000.0000] # IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR TWENTY-TWO -3253 ; [.1CA5.0020.0006][.1CA6.0020.0006] # CIRCLED NUMBER TWENTY THREE -2154 ; [.1CA5.0020.001E][*063C.0020.001E][.1CA6.0020.001E] # VULGAR FRACTION TWO THIRDS -33F6 ; [.1CA5.0020.0004][.1CA6.0020.0004][.FB40.0020.0004][.E5E5.0000.0000] # IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY TWENTY-THREE -336F ; [.1CA5.0020.0004][.1CA6.0020.0004][.FB40.0020.0004][.F0B9.0000.0000] # IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR TWENTY-THREE -3254 ; [.1CA5.0020.0006][.1CA7.0020.0006] # CIRCLED NUMBER TWENTY FOUR -33F7 ; [.1CA5.0020.0004][.1CA7.0020.0004][.FB40.0020.0004][.E5E5.0000.0000] # IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY TWENTY-FOUR -3370 ; [.1CA5.0020.0004][.1CA7.0020.0004][.FB40.0020.0004][.F0B9.0000.0000] # IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR TWENTY-FOUR -3255 ; [.1CA5.0020.0006][.1CA8.0020.0006] # CIRCLED NUMBER TWENTY FIVE -2156 ; [.1CA5.0020.001E][*063C.0020.001E][.1CA8.0020.001E] # VULGAR FRACTION TWO FIFTHS -33F8 ; [.1CA5.0020.0004][.1CA8.0020.0004][.FB40.0020.0004][.E5E5.0000.0000] # IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY TWENTY-FIVE -3256 ; [.1CA5.0020.0006][.1CA9.0020.0006] # CIRCLED NUMBER TWENTY SIX -33F9 ; [.1CA5.0020.0004][.1CA9.0020.0004][.FB40.0020.0004][.E5E5.0000.0000] # IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY TWENTY-SIX -3257 ; [.1CA5.0020.0006][.1CAA.0020.0006] # CIRCLED NUMBER TWENTY SEVEN -33FA ; [.1CA5.0020.0004][.1CAA.0020.0004][.FB40.0020.0004][.E5E5.0000.0000] # IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY TWENTY-SEVEN -3258 ; [.1CA5.0020.0006][.1CAB.0020.0006] # CIRCLED NUMBER TWENTY EIGHT -33FB ; [.1CA5.0020.0004][.1CAB.0020.0004][.FB40.0020.0004][.E5E5.0000.0000] # IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY TWENTY-EIGHT -3259 ; [.1CA5.0020.0006][.1CAC.0020.0006] # CIRCLED NUMBER TWENTY NINE -33FC ; [.1CA5.0020.0004][.1CAC.0020.0004][.FB40.0020.0004][.E5E5.0000.0000] # IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY TWENTY-NINE -1F19D ; [.1CA5.0020.001C][.1DCB.0020.001D] # SQUARED TWO K -1F19C ; [.1CA5.0020.001C][.1E1F.0020.001C][.1CF5.0020.001C][*0209.0020.001C][.1ED7.0020.001D][.1CE0.0020.001C][.1E99.0020.001C] # SQUARED SECOND SCREEN -33E1 ; [.1CA5.0020.0004][.FB40.0020.0004][.E5E5.0000.0000] # IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY TWO -32C1 ; [.1CA5.0020.0004][.FB40.0020.0004][.E708.0000.0000] # IDEOGRAPHIC TELEGRAPH SYMBOL FOR FEBRUARY -335A ; [.1CA5.0020.0004][.FB40.0020.0004][.F0B9.0000.0000] # IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR TWO -0033 ; [.1CA6.0020.0002] # DIGIT THREE -0663 ; [.1CA6.0020.0002] # ARABIC-INDIC DIGIT THREE -06F3 ; [.1CA6.0020.0002] # EXTENDED ARABIC-INDIC DIGIT THREE -07C3 ; [.1CA6.0020.0002] # NKO DIGIT THREE -0969 ; [.1CA6.0020.0002] # DEVANAGARI DIGIT THREE -09E9 ; [.1CA6.0020.0002] # BENGALI DIGIT THREE -0A69 ; [.1CA6.0020.0002] # GURMUKHI DIGIT THREE -0AE9 ; [.1CA6.0020.0002] # GUJARATI DIGIT THREE -0B69 ; [.1CA6.0020.0002] # ORIYA DIGIT THREE -0BE9 ; [.1CA6.0020.0002] # TAMIL DIGIT THREE -0C69 ; [.1CA6.0020.0002] # TELUGU DIGIT THREE -0C7B ; [.1CA6.0020.0002] # TELUGU FRACTION DIGIT THREE FOR ODD POWERS OF FOUR -0C7E ; [.1CA6.0020.0002] # TELUGU FRACTION DIGIT THREE FOR EVEN POWERS OF FOUR -0CE9 ; [.1CA6.0020.0002] # KANNADA DIGIT THREE -0D69 ; [.1CA6.0020.0002] # MALAYALAM DIGIT THREE -0DE9 ; [.1CA6.0020.0002] # SINHALA LITH DIGIT THREE -0E53 ; [.1CA6.0020.0002] # THAI DIGIT THREE -0ED3 ; [.1CA6.0020.0002] # LAO DIGIT THREE -0F23 ; [.1CA6.0020.0002] # TIBETAN DIGIT THREE -1043 ; [.1CA6.0020.0002] # MYANMAR DIGIT THREE -1093 ; [.1CA6.0020.0002] # MYANMAR SHAN DIGIT THREE -136B ; [.1CA6.0020.0002] # ETHIOPIC DIGIT THREE -17E3 ; [.1CA6.0020.0002] # KHMER DIGIT THREE -17F3 ; [.1CA6.0020.0002] # KHMER SYMBOL LEK ATTAK BEI -1813 ; [.1CA6.0020.0002] # MONGOLIAN DIGIT THREE -1949 ; [.1CA6.0020.0002] # LIMBU DIGIT THREE -19D3 ; [.1CA6.0020.0002] # NEW TAI LUE DIGIT THREE -1A83 ; [.1CA6.0020.0002] # TAI THAM HORA DIGIT THREE -1A93 ; [.1CA6.0020.0002] # TAI THAM THAM DIGIT THREE -1B53 ; [.1CA6.0020.0002] # BALINESE DIGIT THREE -1BB3 ; [.1CA6.0020.0002] # SUNDANESE DIGIT THREE -1C43 ; [.1CA6.0020.0002] # LEPCHA DIGIT THREE -1C53 ; [.1CA6.0020.0002] # OL CHIKI DIGIT THREE -3023 ; [.1CA6.0020.0002] # HANGZHOU NUMERAL THREE -A623 ; [.1CA6.0020.0002] # VAI DIGIT THREE -A8D3 ; [.1CA6.0020.0002] # SAURASHTRA DIGIT THREE -A903 ; [.1CA6.0020.0002] # KAYAH LI DIGIT THREE -A9D3 ; [.1CA6.0020.0002] # JAVANESE DIGIT THREE -A9F3 ; [.1CA6.0020.0002] # MYANMAR TAI LAING DIGIT THREE -AA53 ; [.1CA6.0020.0002] # CHAM DIGIT THREE -ABF3 ; [.1CA6.0020.0002] # MEETEI MAYEK DIGIT THREE -10109 ; [.1CA6.0020.0002] # AEGEAN NUMBER THREE -102E3 ; [.1CA6.0020.0002] # COPTIC EPACT DIGIT THREE -104A3 ; [.1CA6.0020.0002] # OSMANYA DIGIT THREE -1085A ; [.1CA6.0020.0002] # IMPERIAL ARAMAIC NUMBER THREE -1087B ; [.1CA6.0020.0002] # PALMYRENE NUMBER THREE -108A9 ; [.1CA6.0020.0002] # NABATAEAN NUMBER THREE -1091B ; [.1CA6.0020.0002] # PHOENICIAN NUMBER THREE -109C2 ; [.1CA6.0020.0002] # MEROITIC CURSIVE NUMBER THREE -10A42 ; [.1CA6.0020.0002] # KHAROSHTHI DIGIT THREE -10B5A ; [.1CA6.0020.0002] # INSCRIPTIONAL PARTHIAN NUMBER THREE -10B7A ; [.1CA6.0020.0002] # INSCRIPTIONAL PAHLAVI NUMBER THREE -10BAB ; [.1CA6.0020.0002] # PSALTER PAHLAVI NUMBER THREE -10E62 ; [.1CA6.0020.0002] # RUMI DIGIT THREE -11054 ; [.1CA6.0020.0002] # BRAHMI NUMBER THREE -11069 ; [.1CA6.0020.0002] # BRAHMI DIGIT THREE -110F3 ; [.1CA6.0020.0002] # SORA SOMPENG DIGIT THREE -11139 ; [.1CA6.0020.0002] # CHAKMA DIGIT THREE -111D3 ; [.1CA6.0020.0002] # SHARADA DIGIT THREE -111E3 ; [.1CA6.0020.0002] # SINHALA ARCHAIC DIGIT THREE -112F3 ; [.1CA6.0020.0002] # KHUDAWADI DIGIT THREE -11453 ; [.1CA6.0020.0002] # NEWA DIGIT THREE -114D3 ; [.1CA6.0020.0002] # TIRHUTA DIGIT THREE -11653 ; [.1CA6.0020.0002] # MODI DIGIT THREE -116C3 ; [.1CA6.0020.0002] # TAKRI DIGIT THREE -11733 ; [.1CA6.0020.0002] # AHOM DIGIT THREE -118E3 ; [.1CA6.0020.0002] # WARANG CITI DIGIT THREE -11C53 ; [.1CA6.0020.0002] # BHAIKSUKI DIGIT THREE -11C5C ; [.1CA6.0020.0002] # BHAIKSUKI NUMBER THREE -11D53 ; [.1CA6.0020.0002] # MASARAM GONDI DIGIT THREE -12401 ; [.1CA6.0020.0002] # CUNEIFORM NUMERIC SIGN THREE ASH -12408 ; [.1CA6.0020.0002] # CUNEIFORM NUMERIC SIGN THREE DISH -12417 ; [.1CA6.0020.0002] # CUNEIFORM NUMERIC SIGN THREE GESH2 -12420 ; [.1CA6.0020.0002] # CUNEIFORM NUMERIC SIGN THREE GESHU -12424 ; [.1CA6.0020.0002] # CUNEIFORM NUMERIC SIGN THREE SHAR2 -12425 ; [.1CA6.0020.0002] # CUNEIFORM NUMERIC SIGN THREE SHAR2 VARIANT FORM -1242E ; [.1CA6.0020.0002] # CUNEIFORM NUMERIC SIGN THREE SHARU -1242F ; [.1CA6.0020.0002] # CUNEIFORM NUMERIC SIGN THREE SHARU VARIANT FORM -12436 ; [.1CA6.0020.0002] # CUNEIFORM NUMERIC SIGN THREE BURU -12437 ; [.1CA6.0020.0002] # CUNEIFORM NUMERIC SIGN THREE BURU VARIANT FORM -1243A ; [.1CA6.0020.0002] # CUNEIFORM NUMERIC SIGN THREE VARIANT FORM ESH16 -1243B ; [.1CA6.0020.0002] # CUNEIFORM NUMERIC SIGN THREE VARIANT FORM ESH21 -1244B ; [.1CA6.0020.0002] # CUNEIFORM NUMERIC SIGN THREE ASH TENU -12451 ; [.1CA6.0020.0002] # CUNEIFORM NUMERIC SIGN THREE BAN2 -12457 ; [.1CA6.0020.0002] # CUNEIFORM NUMERIC SIGN NIGIDAESH -16A63 ; [.1CA6.0020.0002] # MRO DIGIT THREE -16B53 ; [.1CA6.0020.0002] # PAHAWH HMONG DIGIT THREE -1D362 ; [.1CA6.0020.0002] # COUNTING ROD UNIT DIGIT THREE -1E8C9 ; [.1CA6.0020.0002] # MENDE KIKAKUI DIGIT THREE -1E953 ; [.1CA6.0020.0002] # ADLAM DIGIT THREE -FF13 ; [.1CA6.0020.0003] # FULLWIDTH DIGIT THREE -0F2C ; [.1CA6.0020.0004] # TIBETAN DIGIT HALF THREE -2476 ; [*0318.0020.0004][.1CA6.0020.0004][*0319.0020.0004] # PARENTHESIZED DIGIT THREE -248A ; [.1CA6.0020.0004][*0278.0020.0004] # DIGIT THREE FULL STOP -1F104 ; [.1CA6.0020.0004][*0222.0020.0004] # DIGIT THREE COMMA -1D7D1 ; [.1CA6.0020.0005] # MATHEMATICAL BOLD DIGIT THREE -1D7DB ; [.1CA6.0020.0005] # MATHEMATICAL DOUBLE-STRUCK DIGIT THREE -1D7E5 ; [.1CA6.0020.0005] # MATHEMATICAL SANS-SERIF DIGIT THREE -1D7EF ; [.1CA6.0020.0005] # MATHEMATICAL SANS-SERIF BOLD DIGIT THREE -1D7F9 ; [.1CA6.0020.0005] # MATHEMATICAL MONOSPACE DIGIT THREE -2462 ; [.1CA6.0020.0006] # CIRCLED DIGIT THREE -24F7 ; [.1CA6.0020.0006] # DOUBLE CIRCLED DIGIT THREE -2778 ; [.1CA6.0020.0006] # DINGBAT NEGATIVE CIRCLED DIGIT THREE -2782 ; [.1CA6.0020.0006] # DINGBAT CIRCLED SANS-SERIF DIGIT THREE -278C ; [.1CA6.0020.0006] # DINGBAT NEGATIVE CIRCLED SANS-SERIF DIGIT THREE -00B3 ; [.1CA6.0020.0014] # SUPERSCRIPT THREE -2083 ; [.1CA6.0020.0015] # SUBSCRIPT THREE -324A ; [.1CA6.0020.0006][.1CA3.0020.0006] # CIRCLED NUMBER THIRTY ON BLACK SQUARE -325A ; [.1CA6.0020.0006][.1CA3.0020.0006] # CIRCLED NUMBER THIRTY -33FD ; [.1CA6.0020.0004][.1CA3.0020.0004][.FB40.0020.0004][.E5E5.0000.0000] # IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY THIRTY -325B ; [.1CA6.0020.0006][.1CA4.0020.0006] # CIRCLED NUMBER THIRTY ONE -33FE ; [.1CA6.0020.0004][.1CA4.0020.0004][.FB40.0020.0004][.E5E5.0000.0000] # IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY THIRTY-ONE -325C ; [.1CA6.0020.0006][.1CA5.0020.0006] # CIRCLED NUMBER THIRTY TWO -325D ; [.1CA6.0020.0006][.1CA6.0020.0006] # CIRCLED NUMBER THIRTY THREE -325E ; [.1CA6.0020.0006][.1CA7.0020.0006] # CIRCLED NUMBER THIRTY FOUR -00BE ; [.1CA6.0020.001E][*063C.0020.001E][.1CA7.0020.001E] # VULGAR FRACTION THREE QUARTERS -325F ; [.1CA6.0020.0006][.1CA8.0020.0006] # CIRCLED NUMBER THIRTY FIVE -2157 ; [.1CA6.0020.001E][*063C.0020.001E][.1CA8.0020.001E] # VULGAR FRACTION THREE FIFTHS -32B1 ; [.1CA6.0020.0006][.1CA9.0020.0006] # CIRCLED NUMBER THIRTY SIX -32B2 ; [.1CA6.0020.0006][.1CAA.0020.0006] # CIRCLED NUMBER THIRTY SEVEN -32B3 ; [.1CA6.0020.0006][.1CAB.0020.0006] # CIRCLED NUMBER THIRTY EIGHT -215C ; [.1CA6.0020.001E][*063C.0020.001E][.1CAB.0020.001E] # VULGAR FRACTION THREE EIGHTHS -32B4 ; [.1CA6.0020.0006][.1CAC.0020.0006] # CIRCLED NUMBER THIRTY NINE -1F19B ; [.1CA6.0020.001C][.1CF5.0020.001D] # SQUARED THREE D -33E2 ; [.1CA6.0020.0004][.FB40.0020.0004][.E5E5.0000.0000] # IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY THREE -32C2 ; [.1CA6.0020.0004][.FB40.0020.0004][.E708.0000.0000] # IDEOGRAPHIC TELEGRAPH SYMBOL FOR MARCH -335B ; [.1CA6.0020.0004][.FB40.0020.0004][.F0B9.0000.0000] # IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR THREE -0034 ; [.1CA7.0020.0002] # DIGIT FOUR -0664 ; [.1CA7.0020.0002] # ARABIC-INDIC DIGIT FOUR -06F4 ; [.1CA7.0020.0002] # EXTENDED ARABIC-INDIC DIGIT FOUR -07C4 ; [.1CA7.0020.0002] # NKO DIGIT FOUR -096A ; [.1CA7.0020.0002] # DEVANAGARI DIGIT FOUR -09EA ; [.1CA7.0020.0002] # BENGALI DIGIT FOUR -0A6A ; [.1CA7.0020.0002] # GURMUKHI DIGIT FOUR -0AEA ; [.1CA7.0020.0002] # GUJARATI DIGIT FOUR -0B6A ; [.1CA7.0020.0002] # ORIYA DIGIT FOUR -0BEA ; [.1CA7.0020.0002] # TAMIL DIGIT FOUR -0C6A ; [.1CA7.0020.0002] # TELUGU DIGIT FOUR -0CEA ; [.1CA7.0020.0002] # KANNADA DIGIT FOUR -0D6A ; [.1CA7.0020.0002] # MALAYALAM DIGIT FOUR -0DEA ; [.1CA7.0020.0002] # SINHALA LITH DIGIT FOUR -0E54 ; [.1CA7.0020.0002] # THAI DIGIT FOUR -0ED4 ; [.1CA7.0020.0002] # LAO DIGIT FOUR -0F24 ; [.1CA7.0020.0002] # TIBETAN DIGIT FOUR -1044 ; [.1CA7.0020.0002] # MYANMAR DIGIT FOUR -1094 ; [.1CA7.0020.0002] # MYANMAR SHAN DIGIT FOUR -136C ; [.1CA7.0020.0002] # ETHIOPIC DIGIT FOUR -17E4 ; [.1CA7.0020.0002] # KHMER DIGIT FOUR -17F4 ; [.1CA7.0020.0002] # KHMER SYMBOL LEK ATTAK BUON -1814 ; [.1CA7.0020.0002] # MONGOLIAN DIGIT FOUR -194A ; [.1CA7.0020.0002] # LIMBU DIGIT FOUR -19D4 ; [.1CA7.0020.0002] # NEW TAI LUE DIGIT FOUR -1A84 ; [.1CA7.0020.0002] # TAI THAM HORA DIGIT FOUR -1A94 ; [.1CA7.0020.0002] # TAI THAM THAM DIGIT FOUR -1B54 ; [.1CA7.0020.0002] # BALINESE DIGIT FOUR -1BB4 ; [.1CA7.0020.0002] # SUNDANESE DIGIT FOUR -1C44 ; [.1CA7.0020.0002] # LEPCHA DIGIT FOUR -1C54 ; [.1CA7.0020.0002] # OL CHIKI DIGIT FOUR -3024 ; [.1CA7.0020.0002] # HANGZHOU NUMERAL FOUR -A624 ; [.1CA7.0020.0002] # VAI DIGIT FOUR -A8D4 ; [.1CA7.0020.0002] # SAURASHTRA DIGIT FOUR -A904 ; [.1CA7.0020.0002] # KAYAH LI DIGIT FOUR -A9D4 ; [.1CA7.0020.0002] # JAVANESE DIGIT FOUR -A9F4 ; [.1CA7.0020.0002] # MYANMAR TAI LAING DIGIT FOUR -AA54 ; [.1CA7.0020.0002] # CHAM DIGIT FOUR -ABF4 ; [.1CA7.0020.0002] # MEETEI MAYEK DIGIT FOUR -1010A ; [.1CA7.0020.0002] # AEGEAN NUMBER FOUR -102E4 ; [.1CA7.0020.0002] # COPTIC EPACT DIGIT FOUR -104A4 ; [.1CA7.0020.0002] # OSMANYA DIGIT FOUR -1087C ; [.1CA7.0020.0002] # PALMYRENE NUMBER FOUR -108AA ; [.1CA7.0020.0002] # NABATAEAN NUMBER FOUR -108AB ; [.1CA7.0020.0002] # NABATAEAN CRUCIFORM NUMBER FOUR -109C3 ; [.1CA7.0020.0002] # MEROITIC CURSIVE NUMBER FOUR -10A43 ; [.1CA7.0020.0002] # KHAROSHTHI DIGIT FOUR -10B5B ; [.1CA7.0020.0002] # INSCRIPTIONAL PARTHIAN NUMBER FOUR -10B7B ; [.1CA7.0020.0002] # INSCRIPTIONAL PAHLAVI NUMBER FOUR -10BAC ; [.1CA7.0020.0002] # PSALTER PAHLAVI NUMBER FOUR -10E63 ; [.1CA7.0020.0002] # RUMI DIGIT FOUR -11055 ; [.1CA7.0020.0002] # BRAHMI NUMBER FOUR -1106A ; [.1CA7.0020.0002] # BRAHMI DIGIT FOUR -110F4 ; [.1CA7.0020.0002] # SORA SOMPENG DIGIT FOUR -1113A ; [.1CA7.0020.0002] # CHAKMA DIGIT FOUR -111D4 ; [.1CA7.0020.0002] # SHARADA DIGIT FOUR -111E4 ; [.1CA7.0020.0002] # SINHALA ARCHAIC DIGIT FOUR -112F4 ; [.1CA7.0020.0002] # KHUDAWADI DIGIT FOUR -11454 ; [.1CA7.0020.0002] # NEWA DIGIT FOUR -114D4 ; [.1CA7.0020.0002] # TIRHUTA DIGIT FOUR -11654 ; [.1CA7.0020.0002] # MODI DIGIT FOUR -116C4 ; [.1CA7.0020.0002] # TAKRI DIGIT FOUR -11734 ; [.1CA7.0020.0002] # AHOM DIGIT FOUR -118E4 ; [.1CA7.0020.0002] # WARANG CITI DIGIT FOUR -11C54 ; [.1CA7.0020.0002] # BHAIKSUKI DIGIT FOUR -11C5D ; [.1CA7.0020.0002] # BHAIKSUKI NUMBER FOUR -11D54 ; [.1CA7.0020.0002] # MASARAM GONDI DIGIT FOUR -12402 ; [.1CA7.0020.0002] # CUNEIFORM NUMERIC SIGN FOUR ASH -12409 ; [.1CA7.0020.0002] # CUNEIFORM NUMERIC SIGN FOUR DISH -1240F ; [.1CA7.0020.0002] # CUNEIFORM NUMERIC SIGN FOUR U -12418 ; [.1CA7.0020.0002] # CUNEIFORM NUMERIC SIGN FOUR GESH2 -12421 ; [.1CA7.0020.0002] # CUNEIFORM NUMERIC SIGN FOUR GESHU -12426 ; [.1CA7.0020.0002] # CUNEIFORM NUMERIC SIGN FOUR SHAR2 -12430 ; [.1CA7.0020.0002] # CUNEIFORM NUMERIC SIGN FOUR SHARU -12438 ; [.1CA7.0020.0002] # CUNEIFORM NUMERIC SIGN FOUR BURU -1243C ; [.1CA7.0020.0002] # CUNEIFORM NUMERIC SIGN FOUR VARIANT FORM LIMMU -1243D ; [.1CA7.0020.0002] # CUNEIFORM NUMERIC SIGN FOUR VARIANT FORM LIMMU4 -1243E ; [.1CA7.0020.0002] # CUNEIFORM NUMERIC SIGN FOUR VARIANT FORM LIMMU A -1243F ; [.1CA7.0020.0002] # CUNEIFORM NUMERIC SIGN FOUR VARIANT FORM LIMMU B -1244C ; [.1CA7.0020.0002] # CUNEIFORM NUMERIC SIGN FOUR ASH TENU -12452 ; [.1CA7.0020.0002] # CUNEIFORM NUMERIC SIGN FOUR BAN2 -12453 ; [.1CA7.0020.0002] # CUNEIFORM NUMERIC SIGN FOUR BAN2 VARIANT FORM -12469 ; [.1CA7.0020.0002] # CUNEIFORM NUMERIC SIGN FOUR U VARIANT FORM -16A64 ; [.1CA7.0020.0002] # MRO DIGIT FOUR -16B54 ; [.1CA7.0020.0002] # PAHAWH HMONG DIGIT FOUR -1D363 ; [.1CA7.0020.0002] # COUNTING ROD UNIT DIGIT FOUR -1E8CA ; [.1CA7.0020.0002] # MENDE KIKAKUI DIGIT FOUR -1E954 ; [.1CA7.0020.0002] # ADLAM DIGIT FOUR -FF14 ; [.1CA7.0020.0003] # FULLWIDTH DIGIT FOUR -0F2D ; [.1CA7.0020.0004] # TIBETAN DIGIT HALF FOUR -2477 ; [*0318.0020.0004][.1CA7.0020.0004][*0319.0020.0004] # PARENTHESIZED DIGIT FOUR -248B ; [.1CA7.0020.0004][*0278.0020.0004] # DIGIT FOUR FULL STOP -1F105 ; [.1CA7.0020.0004][*0222.0020.0004] # DIGIT FOUR COMMA -1D7D2 ; [.1CA7.0020.0005] # MATHEMATICAL BOLD DIGIT FOUR -1D7DC ; [.1CA7.0020.0005] # MATHEMATICAL DOUBLE-STRUCK DIGIT FOUR -1D7E6 ; [.1CA7.0020.0005] # MATHEMATICAL SANS-SERIF DIGIT FOUR -1D7F0 ; [.1CA7.0020.0005] # MATHEMATICAL SANS-SERIF BOLD DIGIT FOUR -1D7FA ; [.1CA7.0020.0005] # MATHEMATICAL MONOSPACE DIGIT FOUR -2463 ; [.1CA7.0020.0006] # CIRCLED DIGIT FOUR -24F8 ; [.1CA7.0020.0006] # DOUBLE CIRCLED DIGIT FOUR -2779 ; [.1CA7.0020.0006] # DINGBAT NEGATIVE CIRCLED DIGIT FOUR -2783 ; [.1CA7.0020.0006] # DINGBAT CIRCLED SANS-SERIF DIGIT FOUR -278D ; [.1CA7.0020.0006] # DINGBAT NEGATIVE CIRCLED SANS-SERIF DIGIT FOUR -2074 ; [.1CA7.0020.0014] # SUPERSCRIPT FOUR -2084 ; [.1CA7.0020.0015] # SUBSCRIPT FOUR -324B ; [.1CA7.0020.0006][.1CA3.0020.0006] # CIRCLED NUMBER FORTY ON BLACK SQUARE -32B5 ; [.1CA7.0020.0006][.1CA3.0020.0006] # CIRCLED NUMBER FORTY -32B6 ; [.1CA7.0020.0006][.1CA4.0020.0006] # CIRCLED NUMBER FORTY ONE -32B7 ; [.1CA7.0020.0006][.1CA5.0020.0006] # CIRCLED NUMBER FORTY TWO -32B8 ; [.1CA7.0020.0006][.1CA6.0020.0006] # CIRCLED NUMBER FORTY THREE -32B9 ; [.1CA7.0020.0006][.1CA7.0020.0006] # CIRCLED NUMBER FORTY FOUR -32BA ; [.1CA7.0020.0006][.1CA8.0020.0006] # CIRCLED NUMBER FORTY FIVE -2158 ; [.1CA7.0020.001E][*063C.0020.001E][.1CA8.0020.001E] # VULGAR FRACTION FOUR FIFTHS -32BB ; [.1CA7.0020.0006][.1CA9.0020.0006] # CIRCLED NUMBER FORTY SIX -32BC ; [.1CA7.0020.0006][.1CAA.0020.0006] # CIRCLED NUMBER FORTY SEVEN -32BD ; [.1CA7.0020.0006][.1CAB.0020.0006] # CIRCLED NUMBER FORTY EIGHT -32BE ; [.1CA7.0020.0006][.1CAC.0020.0006] # CIRCLED NUMBER FORTY NINE -1F19E ; [.1CA7.0020.001C][.1DCB.0020.001D] # SQUARED FOUR K -33E3 ; [.1CA7.0020.0004][.FB40.0020.0004][.E5E5.0000.0000] # IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY FOUR -32C3 ; [.1CA7.0020.0004][.FB40.0020.0004][.E708.0000.0000] # IDEOGRAPHIC TELEGRAPH SYMBOL FOR APRIL -335C ; [.1CA7.0020.0004][.FB40.0020.0004][.F0B9.0000.0000] # IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR FOUR -0035 ; [.1CA8.0020.0002] # DIGIT FIVE -0665 ; [.1CA8.0020.0002] # ARABIC-INDIC DIGIT FIVE -06F5 ; [.1CA8.0020.0002] # EXTENDED ARABIC-INDIC DIGIT FIVE -07C5 ; [.1CA8.0020.0002] # NKO DIGIT FIVE -096B ; [.1CA8.0020.0002] # DEVANAGARI DIGIT FIVE -09EB ; [.1CA8.0020.0002] # BENGALI DIGIT FIVE -0A6B ; [.1CA8.0020.0002] # GURMUKHI DIGIT FIVE -0AEB ; [.1CA8.0020.0002] # GUJARATI DIGIT FIVE -0B6B ; [.1CA8.0020.0002] # ORIYA DIGIT FIVE -0BEB ; [.1CA8.0020.0002] # TAMIL DIGIT FIVE -0C6B ; [.1CA8.0020.0002] # TELUGU DIGIT FIVE -0CEB ; [.1CA8.0020.0002] # KANNADA DIGIT FIVE -0D6B ; [.1CA8.0020.0002] # MALAYALAM DIGIT FIVE -0DEB ; [.1CA8.0020.0002] # SINHALA LITH DIGIT FIVE -0E55 ; [.1CA8.0020.0002] # THAI DIGIT FIVE -0ED5 ; [.1CA8.0020.0002] # LAO DIGIT FIVE -0F25 ; [.1CA8.0020.0002] # TIBETAN DIGIT FIVE -1045 ; [.1CA8.0020.0002] # MYANMAR DIGIT FIVE -1095 ; [.1CA8.0020.0002] # MYANMAR SHAN DIGIT FIVE -136D ; [.1CA8.0020.0002] # ETHIOPIC DIGIT FIVE -17E5 ; [.1CA8.0020.0002] # KHMER DIGIT FIVE -17F5 ; [.1CA8.0020.0002] # KHMER SYMBOL LEK ATTAK PRAM -1815 ; [.1CA8.0020.0002] # MONGOLIAN DIGIT FIVE -194B ; [.1CA8.0020.0002] # LIMBU DIGIT FIVE -19D5 ; [.1CA8.0020.0002] # NEW TAI LUE DIGIT FIVE -1A85 ; [.1CA8.0020.0002] # TAI THAM HORA DIGIT FIVE -1A95 ; [.1CA8.0020.0002] # TAI THAM THAM DIGIT FIVE -1B55 ; [.1CA8.0020.0002] # BALINESE DIGIT FIVE -1BB5 ; [.1CA8.0020.0002] # SUNDANESE DIGIT FIVE -1C45 ; [.1CA8.0020.0002] # LEPCHA DIGIT FIVE -1C55 ; [.1CA8.0020.0002] # OL CHIKI DIGIT FIVE -3025 ; [.1CA8.0020.0002] # HANGZHOU NUMERAL FIVE -A625 ; [.1CA8.0020.0002] # VAI DIGIT FIVE -A8D5 ; [.1CA8.0020.0002] # SAURASHTRA DIGIT FIVE -A905 ; [.1CA8.0020.0002] # KAYAH LI DIGIT FIVE -A9D5 ; [.1CA8.0020.0002] # JAVANESE DIGIT FIVE -A9F5 ; [.1CA8.0020.0002] # MYANMAR TAI LAING DIGIT FIVE -AA55 ; [.1CA8.0020.0002] # CHAM DIGIT FIVE -ABF5 ; [.1CA8.0020.0002] # MEETEI MAYEK DIGIT FIVE -1010B ; [.1CA8.0020.0002] # AEGEAN NUMBER FIVE -10143 ; [.1CA8.0020.0002] # GREEK ACROPHONIC ATTIC FIVE -10148 ; [.1CA8.0020.0002] # GREEK ACROPHONIC ATTIC FIVE TALENTS -1014F ; [.1CA8.0020.0002] # GREEK ACROPHONIC ATTIC FIVE STATERS -1015F ; [.1CA8.0020.0002] # GREEK ACROPHONIC TROEZENIAN FIVE -10173 ; [.1CA8.0020.0002] # GREEK ACROPHONIC DELPHIC FIVE MNAS -102E5 ; [.1CA8.0020.0002] # COPTIC EPACT DIGIT FIVE -10321 ; [.1CA8.0020.0002] # OLD ITALIC NUMERAL FIVE -104A5 ; [.1CA8.0020.0002] # OSMANYA DIGIT FIVE -1087D ; [.1CA8.0020.0002] # PALMYRENE NUMBER FIVE -108AC ; [.1CA8.0020.0002] # NABATAEAN NUMBER FIVE -108FC ; [.1CA8.0020.0002] # HATRAN NUMBER FIVE -109C4 ; [.1CA8.0020.0002] # MEROITIC CURSIVE NUMBER FIVE -10AEC ; [.1CA8.0020.0002] # MANICHAEAN NUMBER FIVE -10CFB ; [.1CA8.0020.0002] # OLD HUNGARIAN NUMBER FIVE -10E64 ; [.1CA8.0020.0002] # RUMI DIGIT FIVE -11056 ; [.1CA8.0020.0002] # BRAHMI NUMBER FIVE -1106B ; [.1CA8.0020.0002] # BRAHMI DIGIT FIVE -110F5 ; [.1CA8.0020.0002] # SORA SOMPENG DIGIT FIVE -1113B ; [.1CA8.0020.0002] # CHAKMA DIGIT FIVE -111D5 ; [.1CA8.0020.0002] # SHARADA DIGIT FIVE -111E5 ; [.1CA8.0020.0002] # SINHALA ARCHAIC DIGIT FIVE -112F5 ; [.1CA8.0020.0002] # KHUDAWADI DIGIT FIVE -11455 ; [.1CA8.0020.0002] # NEWA DIGIT FIVE -114D5 ; [.1CA8.0020.0002] # TIRHUTA DIGIT FIVE -11655 ; [.1CA8.0020.0002] # MODI DIGIT FIVE -116C5 ; [.1CA8.0020.0002] # TAKRI DIGIT FIVE -11735 ; [.1CA8.0020.0002] # AHOM DIGIT FIVE -118E5 ; [.1CA8.0020.0002] # WARANG CITI DIGIT FIVE -11C55 ; [.1CA8.0020.0002] # BHAIKSUKI DIGIT FIVE -11C5E ; [.1CA8.0020.0002] # BHAIKSUKI NUMBER FIVE -11D55 ; [.1CA8.0020.0002] # MASARAM GONDI DIGIT FIVE -12403 ; [.1CA8.0020.0002] # CUNEIFORM NUMERIC SIGN FIVE ASH -1240A ; [.1CA8.0020.0002] # CUNEIFORM NUMERIC SIGN FIVE DISH -12410 ; [.1CA8.0020.0002] # CUNEIFORM NUMERIC SIGN FIVE U -12419 ; [.1CA8.0020.0002] # CUNEIFORM NUMERIC SIGN FIVE GESH2 -12422 ; [.1CA8.0020.0002] # CUNEIFORM NUMERIC SIGN FIVE GESHU -12427 ; [.1CA8.0020.0002] # CUNEIFORM NUMERIC SIGN FIVE SHAR2 -12431 ; [.1CA8.0020.0002] # CUNEIFORM NUMERIC SIGN FIVE SHARU -12439 ; [.1CA8.0020.0002] # CUNEIFORM NUMERIC SIGN FIVE BURU -1244D ; [.1CA8.0020.0002] # CUNEIFORM NUMERIC SIGN FIVE ASH TENU -12454 ; [.1CA8.0020.0002] # CUNEIFORM NUMERIC SIGN FIVE BAN2 -12455 ; [.1CA8.0020.0002] # CUNEIFORM NUMERIC SIGN FIVE BAN2 VARIANT FORM -1246A ; [.1CA8.0020.0002] # CUNEIFORM NUMERIC SIGN FIVE U VARIANT FORM -16A65 ; [.1CA8.0020.0002] # MRO DIGIT FIVE -16B55 ; [.1CA8.0020.0002] # PAHAWH HMONG DIGIT FIVE -1D364 ; [.1CA8.0020.0002] # COUNTING ROD UNIT DIGIT FIVE -1E8CB ; [.1CA8.0020.0002] # MENDE KIKAKUI DIGIT FIVE -1E955 ; [.1CA8.0020.0002] # ADLAM DIGIT FIVE -FF15 ; [.1CA8.0020.0003] # FULLWIDTH DIGIT FIVE -0F2E ; [.1CA8.0020.0004] # TIBETAN DIGIT HALF FIVE -2478 ; [*0318.0020.0004][.1CA8.0020.0004][*0319.0020.0004] # PARENTHESIZED DIGIT FIVE -248C ; [.1CA8.0020.0004][*0278.0020.0004] # DIGIT FIVE FULL STOP -1F106 ; [.1CA8.0020.0004][*0222.0020.0004] # DIGIT FIVE COMMA -1D7D3 ; [.1CA8.0020.0005] # MATHEMATICAL BOLD DIGIT FIVE -1D7DD ; [.1CA8.0020.0005] # MATHEMATICAL DOUBLE-STRUCK DIGIT FIVE -1D7E7 ; [.1CA8.0020.0005] # MATHEMATICAL SANS-SERIF DIGIT FIVE -1D7F1 ; [.1CA8.0020.0005] # MATHEMATICAL SANS-SERIF BOLD DIGIT FIVE -1D7FB ; [.1CA8.0020.0005] # MATHEMATICAL MONOSPACE DIGIT FIVE -2464 ; [.1CA8.0020.0006] # CIRCLED DIGIT FIVE -24F9 ; [.1CA8.0020.0006] # DOUBLE CIRCLED DIGIT FIVE -277A ; [.1CA8.0020.0006] # DINGBAT NEGATIVE CIRCLED DIGIT FIVE -2784 ; [.1CA8.0020.0006] # DINGBAT CIRCLED SANS-SERIF DIGIT FIVE -278E ; [.1CA8.0020.0006] # DINGBAT NEGATIVE CIRCLED SANS-SERIF DIGIT FIVE -2075 ; [.1CA8.0020.0014] # SUPERSCRIPT FIVE -2085 ; [.1CA8.0020.0015] # SUBSCRIPT FIVE -324C ; [.1CA8.0020.0006][.1CA3.0020.0006] # CIRCLED NUMBER FIFTY ON BLACK SQUARE -32BF ; [.1CA8.0020.0006][.1CA3.0020.0006] # CIRCLED NUMBER FIFTY -1F1A0 ; [.1CA8.0020.001C][*0278.0020.001C][.1CA4.0020.001C] # SQUARED FIVE POINT ONE -215A ; [.1CA8.0020.001E][*063C.0020.001E][.1CA9.0020.001E] # VULGAR FRACTION FIVE SIXTHS -215D ; [.1CA8.0020.001E][*063C.0020.001E][.1CAB.0020.001E] # VULGAR FRACTION FIVE EIGHTHS -33E4 ; [.1CA8.0020.0004][.FB40.0020.0004][.E5E5.0000.0000] # IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY FIVE -32C4 ; [.1CA8.0020.0004][.FB40.0020.0004][.E708.0000.0000] # IDEOGRAPHIC TELEGRAPH SYMBOL FOR MAY -335D ; [.1CA8.0020.0004][.FB40.0020.0004][.F0B9.0000.0000] # IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR FIVE -0036 ; [.1CA9.0020.0002] # DIGIT SIX -0666 ; [.1CA9.0020.0002] # ARABIC-INDIC DIGIT SIX -06F6 ; [.1CA9.0020.0002] # EXTENDED ARABIC-INDIC DIGIT SIX -07C6 ; [.1CA9.0020.0002] # NKO DIGIT SIX -096C ; [.1CA9.0020.0002] # DEVANAGARI DIGIT SIX -09EC ; [.1CA9.0020.0002] # BENGALI DIGIT SIX -0A6C ; [.1CA9.0020.0002] # GURMUKHI DIGIT SIX -0AEC ; [.1CA9.0020.0002] # GUJARATI DIGIT SIX -0B6C ; [.1CA9.0020.0002] # ORIYA DIGIT SIX -0BEC ; [.1CA9.0020.0002] # TAMIL DIGIT SIX -0C6C ; [.1CA9.0020.0002] # TELUGU DIGIT SIX -0CEC ; [.1CA9.0020.0002] # KANNADA DIGIT SIX -0D6C ; [.1CA9.0020.0002] # MALAYALAM DIGIT SIX -0DEC ; [.1CA9.0020.0002] # SINHALA LITH DIGIT SIX -0E56 ; [.1CA9.0020.0002] # THAI DIGIT SIX -0ED6 ; [.1CA9.0020.0002] # LAO DIGIT SIX -0F26 ; [.1CA9.0020.0002] # TIBETAN DIGIT SIX -1046 ; [.1CA9.0020.0002] # MYANMAR DIGIT SIX -1096 ; [.1CA9.0020.0002] # MYANMAR SHAN DIGIT SIX -136E ; [.1CA9.0020.0002] # ETHIOPIC DIGIT SIX -17E6 ; [.1CA9.0020.0002] # KHMER DIGIT SIX -17F6 ; [.1CA9.0020.0002] # KHMER SYMBOL LEK ATTAK PRAM-MUOY -1816 ; [.1CA9.0020.0002] # MONGOLIAN DIGIT SIX -194C ; [.1CA9.0020.0002] # LIMBU DIGIT SIX -19D6 ; [.1CA9.0020.0002] # NEW TAI LUE DIGIT SIX -1A86 ; [.1CA9.0020.0002] # TAI THAM HORA DIGIT SIX -1A96 ; [.1CA9.0020.0002] # TAI THAM THAM DIGIT SIX -1B56 ; [.1CA9.0020.0002] # BALINESE DIGIT SIX -1BB6 ; [.1CA9.0020.0002] # SUNDANESE DIGIT SIX -1C46 ; [.1CA9.0020.0002] # LEPCHA DIGIT SIX -1C56 ; [.1CA9.0020.0002] # OL CHIKI DIGIT SIX -2185 ; [.1CA9.0020.0002] # ROMAN NUMERAL SIX LATE FORM -3026 ; [.1CA9.0020.0002] # HANGZHOU NUMERAL SIX -A626 ; [.1CA9.0020.0002] # VAI DIGIT SIX -A8D6 ; [.1CA9.0020.0002] # SAURASHTRA DIGIT SIX -A906 ; [.1CA9.0020.0002] # KAYAH LI DIGIT SIX -A9D6 ; [.1CA9.0020.0002] # JAVANESE DIGIT SIX -A9F6 ; [.1CA9.0020.0002] # MYANMAR TAI LAING DIGIT SIX -AA56 ; [.1CA9.0020.0002] # CHAM DIGIT SIX -ABF6 ; [.1CA9.0020.0002] # MEETEI MAYEK DIGIT SIX -1010C ; [.1CA9.0020.0002] # AEGEAN NUMBER SIX -102E6 ; [.1CA9.0020.0002] # COPTIC EPACT DIGIT SIX -104A6 ; [.1CA9.0020.0002] # OSMANYA DIGIT SIX -109C5 ; [.1CA9.0020.0002] # MEROITIC CURSIVE NUMBER SIX -10E65 ; [.1CA9.0020.0002] # RUMI DIGIT SIX -11057 ; [.1CA9.0020.0002] # BRAHMI NUMBER SIX -1106C ; [.1CA9.0020.0002] # BRAHMI DIGIT SIX -110F6 ; [.1CA9.0020.0002] # SORA SOMPENG DIGIT SIX -1113C ; [.1CA9.0020.0002] # CHAKMA DIGIT SIX -111D6 ; [.1CA9.0020.0002] # SHARADA DIGIT SIX -111E6 ; [.1CA9.0020.0002] # SINHALA ARCHAIC DIGIT SIX -112F6 ; [.1CA9.0020.0002] # KHUDAWADI DIGIT SIX -11456 ; [.1CA9.0020.0002] # NEWA DIGIT SIX -114D6 ; [.1CA9.0020.0002] # TIRHUTA DIGIT SIX -11656 ; [.1CA9.0020.0002] # MODI DIGIT SIX -116C6 ; [.1CA9.0020.0002] # TAKRI DIGIT SIX -11736 ; [.1CA9.0020.0002] # AHOM DIGIT SIX -118E6 ; [.1CA9.0020.0002] # WARANG CITI DIGIT SIX -11C56 ; [.1CA9.0020.0002] # BHAIKSUKI DIGIT SIX -11C5F ; [.1CA9.0020.0002] # BHAIKSUKI NUMBER SIX -11D56 ; [.1CA9.0020.0002] # MASARAM GONDI DIGIT SIX -12404 ; [.1CA9.0020.0002] # CUNEIFORM NUMERIC SIGN SIX ASH -1240B ; [.1CA9.0020.0002] # CUNEIFORM NUMERIC SIGN SIX DISH -12411 ; [.1CA9.0020.0002] # CUNEIFORM NUMERIC SIGN SIX U -1241A ; [.1CA9.0020.0002] # CUNEIFORM NUMERIC SIGN SIX GESH2 -12428 ; [.1CA9.0020.0002] # CUNEIFORM NUMERIC SIGN SIX SHAR2 -12440 ; [.1CA9.0020.0002] # CUNEIFORM NUMERIC SIGN SIX VARIANT FORM ASH9 -1244E ; [.1CA9.0020.0002] # CUNEIFORM NUMERIC SIGN SIX ASH TENU -1246B ; [.1CA9.0020.0002] # CUNEIFORM NUMERIC SIGN SIX U VARIANT FORM -16A66 ; [.1CA9.0020.0002] # MRO DIGIT SIX -16B56 ; [.1CA9.0020.0002] # PAHAWH HMONG DIGIT SIX -1D365 ; [.1CA9.0020.0002] # COUNTING ROD UNIT DIGIT SIX -1E8CC ; [.1CA9.0020.0002] # MENDE KIKAKUI DIGIT SIX -1E956 ; [.1CA9.0020.0002] # ADLAM DIGIT SIX -FF16 ; [.1CA9.0020.0003] # FULLWIDTH DIGIT SIX -0F2F ; [.1CA9.0020.0004] # TIBETAN DIGIT HALF SIX -2479 ; [*0318.0020.0004][.1CA9.0020.0004][*0319.0020.0004] # PARENTHESIZED DIGIT SIX -248D ; [.1CA9.0020.0004][*0278.0020.0004] # DIGIT SIX FULL STOP -1F107 ; [.1CA9.0020.0004][*0222.0020.0004] # DIGIT SIX COMMA -1D7D4 ; [.1CA9.0020.0005] # MATHEMATICAL BOLD DIGIT SIX -1D7DE ; [.1CA9.0020.0005] # MATHEMATICAL DOUBLE-STRUCK DIGIT SIX -1D7E8 ; [.1CA9.0020.0005] # MATHEMATICAL SANS-SERIF DIGIT SIX -1D7F2 ; [.1CA9.0020.0005] # MATHEMATICAL SANS-SERIF BOLD DIGIT SIX -1D7FC ; [.1CA9.0020.0005] # MATHEMATICAL MONOSPACE DIGIT SIX -2465 ; [.1CA9.0020.0006] # CIRCLED DIGIT SIX -24FA ; [.1CA9.0020.0006] # DOUBLE CIRCLED DIGIT SIX -277B ; [.1CA9.0020.0006] # DINGBAT NEGATIVE CIRCLED DIGIT SIX -2785 ; [.1CA9.0020.0006] # DINGBAT CIRCLED SANS-SERIF DIGIT SIX -278F ; [.1CA9.0020.0006] # DINGBAT NEGATIVE CIRCLED SANS-SERIF DIGIT SIX -2076 ; [.1CA9.0020.0014] # SUPERSCRIPT SIX -2086 ; [.1CA9.0020.0015] # SUBSCRIPT SIX -324D ; [.1CA9.0020.0006][.1CA3.0020.0006] # CIRCLED NUMBER SIXTY ON BLACK SQUARE -1F1A3 ; [.1CA9.0020.001C][.1CA3.0020.001C][.1E72.0020.001D] # SQUARED SIXTY P -33E5 ; [.1CA9.0020.0004][.FB40.0020.0004][.E5E5.0000.0000] # IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY SIX -32C5 ; [.1CA9.0020.0004][.FB40.0020.0004][.E708.0000.0000] # IDEOGRAPHIC TELEGRAPH SYMBOL FOR JUNE -335E ; [.1CA9.0020.0004][.FB40.0020.0004][.F0B9.0000.0000] # IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR SIX -0037 ; [.1CAA.0020.0002] # DIGIT SEVEN -0667 ; [.1CAA.0020.0002] # ARABIC-INDIC DIGIT SEVEN -06F7 ; [.1CAA.0020.0002] # EXTENDED ARABIC-INDIC DIGIT SEVEN -07C7 ; [.1CAA.0020.0002] # NKO DIGIT SEVEN -096D ; [.1CAA.0020.0002] # DEVANAGARI DIGIT SEVEN -09ED ; [.1CAA.0020.0002] # BENGALI DIGIT SEVEN -0A6D ; [.1CAA.0020.0002] # GURMUKHI DIGIT SEVEN -0AED ; [.1CAA.0020.0002] # GUJARATI DIGIT SEVEN -0B6D ; [.1CAA.0020.0002] # ORIYA DIGIT SEVEN -0BED ; [.1CAA.0020.0002] # TAMIL DIGIT SEVEN -0C6D ; [.1CAA.0020.0002] # TELUGU DIGIT SEVEN -0CED ; [.1CAA.0020.0002] # KANNADA DIGIT SEVEN -0D6D ; [.1CAA.0020.0002] # MALAYALAM DIGIT SEVEN -0DED ; [.1CAA.0020.0002] # SINHALA LITH DIGIT SEVEN -0E57 ; [.1CAA.0020.0002] # THAI DIGIT SEVEN -0ED7 ; [.1CAA.0020.0002] # LAO DIGIT SEVEN -0F27 ; [.1CAA.0020.0002] # TIBETAN DIGIT SEVEN -1047 ; [.1CAA.0020.0002] # MYANMAR DIGIT SEVEN -1097 ; [.1CAA.0020.0002] # MYANMAR SHAN DIGIT SEVEN -136F ; [.1CAA.0020.0002] # ETHIOPIC DIGIT SEVEN -17E7 ; [.1CAA.0020.0002] # KHMER DIGIT SEVEN -17F7 ; [.1CAA.0020.0002] # KHMER SYMBOL LEK ATTAK PRAM-PII -1817 ; [.1CAA.0020.0002] # MONGOLIAN DIGIT SEVEN -194D ; [.1CAA.0020.0002] # LIMBU DIGIT SEVEN -19D7 ; [.1CAA.0020.0002] # NEW TAI LUE DIGIT SEVEN -1A87 ; [.1CAA.0020.0002] # TAI THAM HORA DIGIT SEVEN -1A97 ; [.1CAA.0020.0002] # TAI THAM THAM DIGIT SEVEN -1B57 ; [.1CAA.0020.0002] # BALINESE DIGIT SEVEN -1BB7 ; [.1CAA.0020.0002] # SUNDANESE DIGIT SEVEN -1C47 ; [.1CAA.0020.0002] # LEPCHA DIGIT SEVEN -1C57 ; [.1CAA.0020.0002] # OL CHIKI DIGIT SEVEN -3027 ; [.1CAA.0020.0002] # HANGZHOU NUMERAL SEVEN -A627 ; [.1CAA.0020.0002] # VAI DIGIT SEVEN -A8D7 ; [.1CAA.0020.0002] # SAURASHTRA DIGIT SEVEN -A907 ; [.1CAA.0020.0002] # KAYAH LI DIGIT SEVEN -A9D7 ; [.1CAA.0020.0002] # JAVANESE DIGIT SEVEN -A9F7 ; [.1CAA.0020.0002] # MYANMAR TAI LAING DIGIT SEVEN -AA57 ; [.1CAA.0020.0002] # CHAM DIGIT SEVEN -ABF7 ; [.1CAA.0020.0002] # MEETEI MAYEK DIGIT SEVEN -1010D ; [.1CAA.0020.0002] # AEGEAN NUMBER SEVEN -102E7 ; [.1CAA.0020.0002] # COPTIC EPACT DIGIT SEVEN -104A7 ; [.1CAA.0020.0002] # OSMANYA DIGIT SEVEN -109C6 ; [.1CAA.0020.0002] # MEROITIC CURSIVE NUMBER SEVEN -10E66 ; [.1CAA.0020.0002] # RUMI DIGIT SEVEN -11058 ; [.1CAA.0020.0002] # BRAHMI NUMBER SEVEN -1106D ; [.1CAA.0020.0002] # BRAHMI DIGIT SEVEN -110F7 ; [.1CAA.0020.0002] # SORA SOMPENG DIGIT SEVEN -1113D ; [.1CAA.0020.0002] # CHAKMA DIGIT SEVEN -111D7 ; [.1CAA.0020.0002] # SHARADA DIGIT SEVEN -111E7 ; [.1CAA.0020.0002] # SINHALA ARCHAIC DIGIT SEVEN -112F7 ; [.1CAA.0020.0002] # KHUDAWADI DIGIT SEVEN -11457 ; [.1CAA.0020.0002] # NEWA DIGIT SEVEN -114D7 ; [.1CAA.0020.0002] # TIRHUTA DIGIT SEVEN -11657 ; [.1CAA.0020.0002] # MODI DIGIT SEVEN -116C7 ; [.1CAA.0020.0002] # TAKRI DIGIT SEVEN -11737 ; [.1CAA.0020.0002] # AHOM DIGIT SEVEN -118E7 ; [.1CAA.0020.0002] # WARANG CITI DIGIT SEVEN -11C57 ; [.1CAA.0020.0002] # BHAIKSUKI DIGIT SEVEN -11C60 ; [.1CAA.0020.0002] # BHAIKSUKI NUMBER SEVEN -11D57 ; [.1CAA.0020.0002] # MASARAM GONDI DIGIT SEVEN -12405 ; [.1CAA.0020.0002] # CUNEIFORM NUMERIC SIGN SEVEN ASH -1240C ; [.1CAA.0020.0002] # CUNEIFORM NUMERIC SIGN SEVEN DISH -12412 ; [.1CAA.0020.0002] # CUNEIFORM NUMERIC SIGN SEVEN U -1241B ; [.1CAA.0020.0002] # CUNEIFORM NUMERIC SIGN SEVEN GESH2 -12429 ; [.1CAA.0020.0002] # CUNEIFORM NUMERIC SIGN SEVEN SHAR2 -12441 ; [.1CAA.0020.0002] # CUNEIFORM NUMERIC SIGN SEVEN VARIANT FORM IMIN3 -12442 ; [.1CAA.0020.0002] # CUNEIFORM NUMERIC SIGN SEVEN VARIANT FORM IMIN A -12443 ; [.1CAA.0020.0002] # CUNEIFORM NUMERIC SIGN SEVEN VARIANT FORM IMIN B -1246C ; [.1CAA.0020.0002] # CUNEIFORM NUMERIC SIGN SEVEN U VARIANT FORM -16A67 ; [.1CAA.0020.0002] # MRO DIGIT SEVEN -16B57 ; [.1CAA.0020.0002] # PAHAWH HMONG DIGIT SEVEN -1D366 ; [.1CAA.0020.0002] # COUNTING ROD UNIT DIGIT SEVEN -1E8CD ; [.1CAA.0020.0002] # MENDE KIKAKUI DIGIT SEVEN -1E957 ; [.1CAA.0020.0002] # ADLAM DIGIT SEVEN -FF17 ; [.1CAA.0020.0003] # FULLWIDTH DIGIT SEVEN -0F30 ; [.1CAA.0020.0004] # TIBETAN DIGIT HALF SEVEN -247A ; [*0318.0020.0004][.1CAA.0020.0004][*0319.0020.0004] # PARENTHESIZED DIGIT SEVEN -248E ; [.1CAA.0020.0004][*0278.0020.0004] # DIGIT SEVEN FULL STOP -1F108 ; [.1CAA.0020.0004][*0222.0020.0004] # DIGIT SEVEN COMMA -1D7D5 ; [.1CAA.0020.0005] # MATHEMATICAL BOLD DIGIT SEVEN -1D7DF ; [.1CAA.0020.0005] # MATHEMATICAL DOUBLE-STRUCK DIGIT SEVEN -1D7E9 ; [.1CAA.0020.0005] # MATHEMATICAL SANS-SERIF DIGIT SEVEN -1D7F3 ; [.1CAA.0020.0005] # MATHEMATICAL SANS-SERIF BOLD DIGIT SEVEN -1D7FD ; [.1CAA.0020.0005] # MATHEMATICAL MONOSPACE DIGIT SEVEN -2466 ; [.1CAA.0020.0006] # CIRCLED DIGIT SEVEN -24FB ; [.1CAA.0020.0006] # DOUBLE CIRCLED DIGIT SEVEN -277C ; [.1CAA.0020.0006] # DINGBAT NEGATIVE CIRCLED DIGIT SEVEN -2786 ; [.1CAA.0020.0006] # DINGBAT CIRCLED SANS-SERIF DIGIT SEVEN -2790 ; [.1CAA.0020.0006] # DINGBAT NEGATIVE CIRCLED SANS-SERIF DIGIT SEVEN -2077 ; [.1CAA.0020.0014] # SUPERSCRIPT SEVEN -2087 ; [.1CAA.0020.0015] # SUBSCRIPT SEVEN -324E ; [.1CAA.0020.0006][.1CA3.0020.0006] # CIRCLED NUMBER SEVENTY ON BLACK SQUARE -1F1A1 ; [.1CAA.0020.001C][*0278.0020.001C][.1CA4.0020.001C] # SQUARED SEVEN POINT ONE -215E ; [.1CAA.0020.001E][*063C.0020.001E][.1CAB.0020.001E] # VULGAR FRACTION SEVEN EIGHTHS -33E6 ; [.1CAA.0020.0004][.FB40.0020.0004][.E5E5.0000.0000] # IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY SEVEN -32C6 ; [.1CAA.0020.0004][.FB40.0020.0004][.E708.0000.0000] # IDEOGRAPHIC TELEGRAPH SYMBOL FOR JULY -335F ; [.1CAA.0020.0004][.FB40.0020.0004][.F0B9.0000.0000] # IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR SEVEN -0038 ; [.1CAB.0020.0002] # DIGIT EIGHT -0668 ; [.1CAB.0020.0002] # ARABIC-INDIC DIGIT EIGHT -06F8 ; [.1CAB.0020.0002] # EXTENDED ARABIC-INDIC DIGIT EIGHT -07C8 ; [.1CAB.0020.0002] # NKO DIGIT EIGHT -096E ; [.1CAB.0020.0002] # DEVANAGARI DIGIT EIGHT -09EE ; [.1CAB.0020.0002] # BENGALI DIGIT EIGHT -0A6E ; [.1CAB.0020.0002] # GURMUKHI DIGIT EIGHT -0AEE ; [.1CAB.0020.0002] # GUJARATI DIGIT EIGHT -0B6E ; [.1CAB.0020.0002] # ORIYA DIGIT EIGHT -0BEE ; [.1CAB.0020.0002] # TAMIL DIGIT EIGHT -0C6E ; [.1CAB.0020.0002] # TELUGU DIGIT EIGHT -0CEE ; [.1CAB.0020.0002] # KANNADA DIGIT EIGHT -0D6E ; [.1CAB.0020.0002] # MALAYALAM DIGIT EIGHT -0DEE ; [.1CAB.0020.0002] # SINHALA LITH DIGIT EIGHT -0E58 ; [.1CAB.0020.0002] # THAI DIGIT EIGHT -0ED8 ; [.1CAB.0020.0002] # LAO DIGIT EIGHT -0F28 ; [.1CAB.0020.0002] # TIBETAN DIGIT EIGHT -1048 ; [.1CAB.0020.0002] # MYANMAR DIGIT EIGHT -1098 ; [.1CAB.0020.0002] # MYANMAR SHAN DIGIT EIGHT -1370 ; [.1CAB.0020.0002] # ETHIOPIC DIGIT EIGHT -17E8 ; [.1CAB.0020.0002] # KHMER DIGIT EIGHT -17F8 ; [.1CAB.0020.0002] # KHMER SYMBOL LEK ATTAK PRAM-BEI -1818 ; [.1CAB.0020.0002] # MONGOLIAN DIGIT EIGHT -194E ; [.1CAB.0020.0002] # LIMBU DIGIT EIGHT -19D8 ; [.1CAB.0020.0002] # NEW TAI LUE DIGIT EIGHT -1A88 ; [.1CAB.0020.0002] # TAI THAM HORA DIGIT EIGHT -1A98 ; [.1CAB.0020.0002] # TAI THAM THAM DIGIT EIGHT -1B58 ; [.1CAB.0020.0002] # BALINESE DIGIT EIGHT -1BB8 ; [.1CAB.0020.0002] # SUNDANESE DIGIT EIGHT -1C48 ; [.1CAB.0020.0002] # LEPCHA DIGIT EIGHT -1C58 ; [.1CAB.0020.0002] # OL CHIKI DIGIT EIGHT -3028 ; [.1CAB.0020.0002] # HANGZHOU NUMERAL EIGHT -A628 ; [.1CAB.0020.0002] # VAI DIGIT EIGHT -A8D8 ; [.1CAB.0020.0002] # SAURASHTRA DIGIT EIGHT -A908 ; [.1CAB.0020.0002] # KAYAH LI DIGIT EIGHT -A9D8 ; [.1CAB.0020.0002] # JAVANESE DIGIT EIGHT -A9F8 ; [.1CAB.0020.0002] # MYANMAR TAI LAING DIGIT EIGHT -AA58 ; [.1CAB.0020.0002] # CHAM DIGIT EIGHT -ABF8 ; [.1CAB.0020.0002] # MEETEI MAYEK DIGIT EIGHT -1010E ; [.1CAB.0020.0002] # AEGEAN NUMBER EIGHT -102E8 ; [.1CAB.0020.0002] # COPTIC EPACT DIGIT EIGHT -104A8 ; [.1CAB.0020.0002] # OSMANYA DIGIT EIGHT -109C7 ; [.1CAB.0020.0002] # MEROITIC CURSIVE NUMBER EIGHT -10E67 ; [.1CAB.0020.0002] # RUMI DIGIT EIGHT -11059 ; [.1CAB.0020.0002] # BRAHMI NUMBER EIGHT -1106E ; [.1CAB.0020.0002] # BRAHMI DIGIT EIGHT -110F8 ; [.1CAB.0020.0002] # SORA SOMPENG DIGIT EIGHT -1113E ; [.1CAB.0020.0002] # CHAKMA DIGIT EIGHT -111D8 ; [.1CAB.0020.0002] # SHARADA DIGIT EIGHT -111E8 ; [.1CAB.0020.0002] # SINHALA ARCHAIC DIGIT EIGHT -112F8 ; [.1CAB.0020.0002] # KHUDAWADI DIGIT EIGHT -11458 ; [.1CAB.0020.0002] # NEWA DIGIT EIGHT -114D8 ; [.1CAB.0020.0002] # TIRHUTA DIGIT EIGHT -11658 ; [.1CAB.0020.0002] # MODI DIGIT EIGHT -116C8 ; [.1CAB.0020.0002] # TAKRI DIGIT EIGHT -11738 ; [.1CAB.0020.0002] # AHOM DIGIT EIGHT -118E8 ; [.1CAB.0020.0002] # WARANG CITI DIGIT EIGHT -11C58 ; [.1CAB.0020.0002] # BHAIKSUKI DIGIT EIGHT -11C61 ; [.1CAB.0020.0002] # BHAIKSUKI NUMBER EIGHT -11D58 ; [.1CAB.0020.0002] # MASARAM GONDI DIGIT EIGHT -12406 ; [.1CAB.0020.0002] # CUNEIFORM NUMERIC SIGN EIGHT ASH -1240D ; [.1CAB.0020.0002] # CUNEIFORM NUMERIC SIGN EIGHT DISH -12413 ; [.1CAB.0020.0002] # CUNEIFORM NUMERIC SIGN EIGHT U -1241C ; [.1CAB.0020.0002] # CUNEIFORM NUMERIC SIGN EIGHT GESH2 -1242A ; [.1CAB.0020.0002] # CUNEIFORM NUMERIC SIGN EIGHT SHAR2 -12444 ; [.1CAB.0020.0002] # CUNEIFORM NUMERIC SIGN EIGHT VARIANT FORM USSU -12445 ; [.1CAB.0020.0002] # CUNEIFORM NUMERIC SIGN EIGHT VARIANT FORM USSU3 -1246D ; [.1CAB.0020.0002] # CUNEIFORM NUMERIC SIGN EIGHT U VARIANT FORM -16A68 ; [.1CAB.0020.0002] # MRO DIGIT EIGHT -16B58 ; [.1CAB.0020.0002] # PAHAWH HMONG DIGIT EIGHT -1D367 ; [.1CAB.0020.0002] # COUNTING ROD UNIT DIGIT EIGHT -1E8CE ; [.1CAB.0020.0002] # MENDE KIKAKUI DIGIT EIGHT -1E958 ; [.1CAB.0020.0002] # ADLAM DIGIT EIGHT -FF18 ; [.1CAB.0020.0003] # FULLWIDTH DIGIT EIGHT -0F31 ; [.1CAB.0020.0004] # TIBETAN DIGIT HALF EIGHT -247B ; [*0318.0020.0004][.1CAB.0020.0004][*0319.0020.0004] # PARENTHESIZED DIGIT EIGHT -248F ; [.1CAB.0020.0004][*0278.0020.0004] # DIGIT EIGHT FULL STOP -1F109 ; [.1CAB.0020.0004][*0222.0020.0004] # DIGIT EIGHT COMMA -1D7D6 ; [.1CAB.0020.0005] # MATHEMATICAL BOLD DIGIT EIGHT -1D7E0 ; [.1CAB.0020.0005] # MATHEMATICAL DOUBLE-STRUCK DIGIT EIGHT -1D7EA ; [.1CAB.0020.0005] # MATHEMATICAL SANS-SERIF DIGIT EIGHT -1D7F4 ; [.1CAB.0020.0005] # MATHEMATICAL SANS-SERIF BOLD DIGIT EIGHT -1D7FE ; [.1CAB.0020.0005] # MATHEMATICAL MONOSPACE DIGIT EIGHT -2467 ; [.1CAB.0020.0006] # CIRCLED DIGIT EIGHT -24FC ; [.1CAB.0020.0006] # DOUBLE CIRCLED DIGIT EIGHT -277D ; [.1CAB.0020.0006] # DINGBAT NEGATIVE CIRCLED DIGIT EIGHT -2787 ; [.1CAB.0020.0006] # DINGBAT CIRCLED SANS-SERIF DIGIT EIGHT -2791 ; [.1CAB.0020.0006] # DINGBAT NEGATIVE CIRCLED SANS-SERIF DIGIT EIGHT -2078 ; [.1CAB.0020.0014] # SUPERSCRIPT EIGHT -2088 ; [.1CAB.0020.0015] # SUBSCRIPT EIGHT -324F ; [.1CAB.0020.0006][.1CA3.0020.0006] # CIRCLED NUMBER EIGHTY ON BLACK SQUARE -1F19F ; [.1CAB.0020.001C][.1DCB.0020.001D] # SQUARED EIGHT K -33E7 ; [.1CAB.0020.0004][.FB40.0020.0004][.E5E5.0000.0000] # IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY EIGHT -32C7 ; [.1CAB.0020.0004][.FB40.0020.0004][.E708.0000.0000] # IDEOGRAPHIC TELEGRAPH SYMBOL FOR AUGUST -3360 ; [.1CAB.0020.0004][.FB40.0020.0004][.F0B9.0000.0000] # IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR EIGHT -0039 ; [.1CAC.0020.0002] # DIGIT NINE -0669 ; [.1CAC.0020.0002] # ARABIC-INDIC DIGIT NINE -06F9 ; [.1CAC.0020.0002] # EXTENDED ARABIC-INDIC DIGIT NINE -07C9 ; [.1CAC.0020.0002] # NKO DIGIT NINE -096F ; [.1CAC.0020.0002] # DEVANAGARI DIGIT NINE -09EF ; [.1CAC.0020.0002] # BENGALI DIGIT NINE -0A6F ; [.1CAC.0020.0002] # GURMUKHI DIGIT NINE -0AEF ; [.1CAC.0020.0002] # GUJARATI DIGIT NINE -0B6F ; [.1CAC.0020.0002] # ORIYA DIGIT NINE -0BEF ; [.1CAC.0020.0002] # TAMIL DIGIT NINE -0C6F ; [.1CAC.0020.0002] # TELUGU DIGIT NINE -0CEF ; [.1CAC.0020.0002] # KANNADA DIGIT NINE -0D6F ; [.1CAC.0020.0002] # MALAYALAM DIGIT NINE -0DEF ; [.1CAC.0020.0002] # SINHALA LITH DIGIT NINE -0E59 ; [.1CAC.0020.0002] # THAI DIGIT NINE -0ED9 ; [.1CAC.0020.0002] # LAO DIGIT NINE -0F29 ; [.1CAC.0020.0002] # TIBETAN DIGIT NINE -1049 ; [.1CAC.0020.0002] # MYANMAR DIGIT NINE -1099 ; [.1CAC.0020.0002] # MYANMAR SHAN DIGIT NINE -1371 ; [.1CAC.0020.0002] # ETHIOPIC DIGIT NINE -17E9 ; [.1CAC.0020.0002] # KHMER DIGIT NINE -17F9 ; [.1CAC.0020.0002] # KHMER SYMBOL LEK ATTAK PRAM-BUON -1819 ; [.1CAC.0020.0002] # MONGOLIAN DIGIT NINE -194F ; [.1CAC.0020.0002] # LIMBU DIGIT NINE -19D9 ; [.1CAC.0020.0002] # NEW TAI LUE DIGIT NINE -1A89 ; [.1CAC.0020.0002] # TAI THAM HORA DIGIT NINE -1A99 ; [.1CAC.0020.0002] # TAI THAM THAM DIGIT NINE -1B59 ; [.1CAC.0020.0002] # BALINESE DIGIT NINE -1BB9 ; [.1CAC.0020.0002] # SUNDANESE DIGIT NINE -1C49 ; [.1CAC.0020.0002] # LEPCHA DIGIT NINE -1C59 ; [.1CAC.0020.0002] # OL CHIKI DIGIT NINE -3029 ; [.1CAC.0020.0002] # HANGZHOU NUMERAL NINE -A629 ; [.1CAC.0020.0002] # VAI DIGIT NINE -A8D9 ; [.1CAC.0020.0002] # SAURASHTRA DIGIT NINE -A909 ; [.1CAC.0020.0002] # KAYAH LI DIGIT NINE -A9D9 ; [.1CAC.0020.0002] # JAVANESE DIGIT NINE -A9F9 ; [.1CAC.0020.0002] # MYANMAR TAI LAING DIGIT NINE -AA59 ; [.1CAC.0020.0002] # CHAM DIGIT NINE -ABF9 ; [.1CAC.0020.0002] # MEETEI MAYEK DIGIT NINE -1010F ; [.1CAC.0020.0002] # AEGEAN NUMBER NINE -102E9 ; [.1CAC.0020.0002] # COPTIC EPACT DIGIT NINE -104A9 ; [.1CAC.0020.0002] # OSMANYA DIGIT NINE -109C8 ; [.1CAC.0020.0002] # MEROITIC CURSIVE NUMBER NINE -10E68 ; [.1CAC.0020.0002] # RUMI DIGIT NINE -1105A ; [.1CAC.0020.0002] # BRAHMI NUMBER NINE -1106F ; [.1CAC.0020.0002] # BRAHMI DIGIT NINE -110F9 ; [.1CAC.0020.0002] # SORA SOMPENG DIGIT NINE -1113F ; [.1CAC.0020.0002] # CHAKMA DIGIT NINE -111D9 ; [.1CAC.0020.0002] # SHARADA DIGIT NINE -111E9 ; [.1CAC.0020.0002] # SINHALA ARCHAIC DIGIT NINE -112F9 ; [.1CAC.0020.0002] # KHUDAWADI DIGIT NINE -11459 ; [.1CAC.0020.0002] # NEWA DIGIT NINE -114D9 ; [.1CAC.0020.0002] # TIRHUTA DIGIT NINE -11659 ; [.1CAC.0020.0002] # MODI DIGIT NINE -116C9 ; [.1CAC.0020.0002] # TAKRI DIGIT NINE -11739 ; [.1CAC.0020.0002] # AHOM DIGIT NINE -118E9 ; [.1CAC.0020.0002] # WARANG CITI DIGIT NINE -11C59 ; [.1CAC.0020.0002] # BHAIKSUKI DIGIT NINE -11C62 ; [.1CAC.0020.0002] # BHAIKSUKI NUMBER NINE -11D59 ; [.1CAC.0020.0002] # MASARAM GONDI DIGIT NINE -12407 ; [.1CAC.0020.0002] # CUNEIFORM NUMERIC SIGN NINE ASH -1240E ; [.1CAC.0020.0002] # CUNEIFORM NUMERIC SIGN NINE DISH -12414 ; [.1CAC.0020.0002] # CUNEIFORM NUMERIC SIGN NINE U -1241D ; [.1CAC.0020.0002] # CUNEIFORM NUMERIC SIGN NINE GESH2 -1242B ; [.1CAC.0020.0002] # CUNEIFORM NUMERIC SIGN NINE SHAR2 -12446 ; [.1CAC.0020.0002] # CUNEIFORM NUMERIC SIGN NINE VARIANT FORM ILIMMU -12447 ; [.1CAC.0020.0002] # CUNEIFORM NUMERIC SIGN NINE VARIANT FORM ILIMMU3 -12448 ; [.1CAC.0020.0002] # CUNEIFORM NUMERIC SIGN NINE VARIANT FORM ILIMMU4 -12449 ; [.1CAC.0020.0002] # CUNEIFORM NUMERIC SIGN NINE VARIANT FORM ILIMMU A -1246E ; [.1CAC.0020.0002] # CUNEIFORM NUMERIC SIGN NINE U VARIANT FORM -16A69 ; [.1CAC.0020.0002] # MRO DIGIT NINE -16B59 ; [.1CAC.0020.0002] # PAHAWH HMONG DIGIT NINE -1D368 ; [.1CAC.0020.0002] # COUNTING ROD UNIT DIGIT NINE -1E8CF ; [.1CAC.0020.0002] # MENDE KIKAKUI DIGIT NINE -1E959 ; [.1CAC.0020.0002] # ADLAM DIGIT NINE -FF19 ; [.1CAC.0020.0003] # FULLWIDTH DIGIT NINE -0F32 ; [.1CAC.0020.0004] # TIBETAN DIGIT HALF NINE -247C ; [*0318.0020.0004][.1CAC.0020.0004][*0319.0020.0004] # PARENTHESIZED DIGIT NINE -2490 ; [.1CAC.0020.0004][*0278.0020.0004] # DIGIT NINE FULL STOP -1F10A ; [.1CAC.0020.0004][*0222.0020.0004] # DIGIT NINE COMMA -1D7D7 ; [.1CAC.0020.0005] # MATHEMATICAL BOLD DIGIT NINE -1D7E1 ; [.1CAC.0020.0005] # MATHEMATICAL DOUBLE-STRUCK DIGIT NINE -1D7EB ; [.1CAC.0020.0005] # MATHEMATICAL SANS-SERIF DIGIT NINE -1D7F5 ; [.1CAC.0020.0005] # MATHEMATICAL SANS-SERIF BOLD DIGIT NINE -1D7FF ; [.1CAC.0020.0005] # MATHEMATICAL MONOSPACE DIGIT NINE -2468 ; [.1CAC.0020.0006] # CIRCLED DIGIT NINE -24FD ; [.1CAC.0020.0006] # DOUBLE CIRCLED DIGIT NINE -277E ; [.1CAC.0020.0006] # DINGBAT NEGATIVE CIRCLED DIGIT NINE -2788 ; [.1CAC.0020.0006] # DINGBAT CIRCLED SANS-SERIF DIGIT NINE -2792 ; [.1CAC.0020.0006] # DINGBAT NEGATIVE CIRCLED SANS-SERIF DIGIT NINE -2079 ; [.1CAC.0020.0014] # SUPERSCRIPT NINE -2089 ; [.1CAC.0020.0015] # SUBSCRIPT NINE -33E8 ; [.1CAC.0020.0004][.FB40.0020.0004][.E5E5.0000.0000] # IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY NINE -32C8 ; [.1CAC.0020.0004][.FB40.0020.0004][.E708.0000.0000] # IDEOGRAPHIC TELEGRAPH SYMBOL FOR SEPTEMBER -3361 ; [.1CAC.0020.0004][.FB40.0020.0004][.F0B9.0000.0000] # IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR NINE -0061 ; [.1CAD.0020.0002] # LATIN SMALL LETTER A -FF41 ; [.1CAD.0020.0003] # FULLWIDTH LATIN SMALL LETTER A -0363 ; [.1CAD.0020.0004] # COMBINING LATIN SMALL LETTER A -249C ; [*0318.0020.0004][.1CAD.0020.0004][*0319.0020.0004] # PARENTHESIZED LATIN SMALL LETTER A -1D41A ; [.1CAD.0020.0005] # MATHEMATICAL BOLD SMALL A -1D44E ; [.1CAD.0020.0005] # MATHEMATICAL ITALIC SMALL A -1D482 ; [.1CAD.0020.0005] # MATHEMATICAL BOLD ITALIC SMALL A -1D4B6 ; [.1CAD.0020.0005] # MATHEMATICAL SCRIPT SMALL A -1D4EA ; [.1CAD.0020.0005] # MATHEMATICAL BOLD SCRIPT SMALL A -1D51E ; [.1CAD.0020.0005] # MATHEMATICAL FRAKTUR SMALL A -1D552 ; [.1CAD.0020.0005] # MATHEMATICAL DOUBLE-STRUCK SMALL A -1D586 ; [.1CAD.0020.0005] # MATHEMATICAL BOLD FRAKTUR SMALL A -1D5BA ; [.1CAD.0020.0005] # MATHEMATICAL SANS-SERIF SMALL A -1D5EE ; [.1CAD.0020.0005] # MATHEMATICAL SANS-SERIF BOLD SMALL A -1D622 ; [.1CAD.0020.0005] # MATHEMATICAL SANS-SERIF ITALIC SMALL A -1D656 ; [.1CAD.0020.0005] # MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL A -1D68A ; [.1CAD.0020.0005] # MATHEMATICAL MONOSPACE SMALL A -24D0 ; [.1CAD.0020.0006] # CIRCLED LATIN SMALL LETTER A -0041 ; [.1CAD.0020.0008] # LATIN CAPITAL LETTER A -FF21 ; [.1CAD.0020.0009] # FULLWIDTH LATIN CAPITAL LETTER A -1F110 ; [*0318.0020.0004][.1CAD.0020.000A][*0319.0020.0004] # PARENTHESIZED LATIN CAPITAL LETTER A -1D400 ; [.1CAD.0020.000B] # MATHEMATICAL BOLD CAPITAL A -1D434 ; [.1CAD.0020.000B] # MATHEMATICAL ITALIC CAPITAL A -1D468 ; [.1CAD.0020.000B] # MATHEMATICAL BOLD ITALIC CAPITAL A -1D49C ; [.1CAD.0020.000B] # MATHEMATICAL SCRIPT CAPITAL A -1D4D0 ; [.1CAD.0020.000B] # MATHEMATICAL BOLD SCRIPT CAPITAL A -1D504 ; [.1CAD.0020.000B] # MATHEMATICAL FRAKTUR CAPITAL A -1D538 ; [.1CAD.0020.000B] # MATHEMATICAL DOUBLE-STRUCK CAPITAL A -1D56C ; [.1CAD.0020.000B] # MATHEMATICAL BOLD FRAKTUR CAPITAL A -1D5A0 ; [.1CAD.0020.000B] # MATHEMATICAL SANS-SERIF CAPITAL A -1D5D4 ; [.1CAD.0020.000B] # MATHEMATICAL SANS-SERIF BOLD CAPITAL A -1D608 ; [.1CAD.0020.000B] # MATHEMATICAL SANS-SERIF ITALIC CAPITAL A -1D63C ; [.1CAD.0020.000B] # MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL A -1D670 ; [.1CAD.0020.000B] # MATHEMATICAL MONOSPACE CAPITAL A -24B6 ; [.1CAD.0020.000C] # CIRCLED LATIN CAPITAL LETTER A -1F150 ; [.1CAD.0020.000C] # NEGATIVE CIRCLED LATIN CAPITAL LETTER A -00AA ; [.1CAD.0020.0014] # FEMININE ORDINAL INDICATOR -1D43 ; [.1CAD.0020.0014] # MODIFIER LETTER SMALL A -2090 ; [.1CAD.0020.0015] # LATIN SUBSCRIPT SMALL LETTER A -1D2C ; [.1CAD.0020.001D] # MODIFIER LETTER CAPITAL A -1F130 ; [.1CAD.0020.001D] # SQUARED LATIN CAPITAL LETTER A -1F170 ; [.1CAD.0020.001D] # NEGATIVE SQUARED LATIN CAPITAL LETTER A -00E1 ; [.1CAD.0020.0002][.0000.0024.0002] # LATIN SMALL LETTER A WITH ACUTE -00C1 ; [.1CAD.0020.0008][.0000.0024.0002] # LATIN CAPITAL LETTER A WITH ACUTE -00E0 ; [.1CAD.0020.0002][.0000.0025.0002] # LATIN SMALL LETTER A WITH GRAVE -00C0 ; [.1CAD.0020.0008][.0000.0025.0002] # LATIN CAPITAL LETTER A WITH GRAVE -0103 ; [.1CAD.0020.0002][.0000.0026.0002] # LATIN SMALL LETTER A WITH BREVE -0102 ; [.1CAD.0020.0008][.0000.0026.0002] # LATIN CAPITAL LETTER A WITH BREVE -1EAF ; [.1CAD.0020.0002][.0000.0026.0002][.0000.0024.0002] # LATIN SMALL LETTER A WITH BREVE AND ACUTE -1EAE ; [.1CAD.0020.0008][.0000.0026.0002][.0000.0024.0002] # LATIN CAPITAL LETTER A WITH BREVE AND ACUTE -1EB1 ; [.1CAD.0020.0002][.0000.0026.0002][.0000.0025.0002] # LATIN SMALL LETTER A WITH BREVE AND GRAVE -1EB0 ; [.1CAD.0020.0008][.0000.0026.0002][.0000.0025.0002] # LATIN CAPITAL LETTER A WITH BREVE AND GRAVE -1EB5 ; [.1CAD.0020.0002][.0000.0026.0002][.0000.002D.0002] # LATIN SMALL LETTER A WITH BREVE AND TILDE -1EB4 ; [.1CAD.0020.0008][.0000.0026.0002][.0000.002D.0002] # LATIN CAPITAL LETTER A WITH BREVE AND TILDE -1EB3 ; [.1CAD.0020.0002][.0000.0026.0002][.0000.003B.0002] # LATIN SMALL LETTER A WITH BREVE AND HOOK ABOVE -1EB2 ; [.1CAD.0020.0008][.0000.0026.0002][.0000.003B.0002] # LATIN CAPITAL LETTER A WITH BREVE AND HOOK ABOVE -00E2 ; [.1CAD.0020.0002][.0000.0027.0002] # LATIN SMALL LETTER A WITH CIRCUMFLEX -00C2 ; [.1CAD.0020.0008][.0000.0027.0002] # LATIN CAPITAL LETTER A WITH CIRCUMFLEX -1EA5 ; [.1CAD.0020.0002][.0000.0027.0002][.0000.0024.0002] # LATIN SMALL LETTER A WITH CIRCUMFLEX AND ACUTE -1EA4 ; [.1CAD.0020.0008][.0000.0027.0002][.0000.0024.0002] # LATIN CAPITAL LETTER A WITH CIRCUMFLEX AND ACUTE -1EA7 ; [.1CAD.0020.0002][.0000.0027.0002][.0000.0025.0002] # LATIN SMALL LETTER A WITH CIRCUMFLEX AND GRAVE -1EA6 ; [.1CAD.0020.0008][.0000.0027.0002][.0000.0025.0002] # LATIN CAPITAL LETTER A WITH CIRCUMFLEX AND GRAVE -1EAB ; [.1CAD.0020.0002][.0000.0027.0002][.0000.002D.0002] # LATIN SMALL LETTER A WITH CIRCUMFLEX AND TILDE -1EAA ; [.1CAD.0020.0008][.0000.0027.0002][.0000.002D.0002] # LATIN CAPITAL LETTER A WITH CIRCUMFLEX AND TILDE -1EA9 ; [.1CAD.0020.0002][.0000.0027.0002][.0000.003B.0002] # LATIN SMALL LETTER A WITH CIRCUMFLEX AND HOOK ABOVE -1EA8 ; [.1CAD.0020.0008][.0000.0027.0002][.0000.003B.0002] # LATIN CAPITAL LETTER A WITH CIRCUMFLEX AND HOOK ABOVE -01CE ; [.1CAD.0020.0002][.0000.0028.0002] # LATIN SMALL LETTER A WITH CARON -01CD ; [.1CAD.0020.0008][.0000.0028.0002] # LATIN CAPITAL LETTER A WITH CARON -00E5 ; [.1CAD.0020.0002][.0000.0029.0002] # LATIN SMALL LETTER A WITH RING ABOVE -00C5 ; [.1CAD.0020.0008][.0000.0029.0002] # LATIN CAPITAL LETTER A WITH RING ABOVE -212B ; [.1CAD.0020.0008][.0000.0029.0002] # ANGSTROM SIGN -01FB ; [.1CAD.0020.0002][.0000.0029.0002][.0000.0024.0002] # LATIN SMALL LETTER A WITH RING ABOVE AND ACUTE -01FA ; [.1CAD.0020.0008][.0000.0029.0002][.0000.0024.0002] # LATIN CAPITAL LETTER A WITH RING ABOVE AND ACUTE -00E4 ; [.1CAD.0020.0002][.0000.002B.0002] # LATIN SMALL LETTER A WITH DIAERESIS -1DF2 ; [.1CAD.0020.0004][.0000.002B.0004] # COMBINING LATIN SMALL LETTER A WITH DIAERESIS -A79B ; [.1CAD.0020.0004][.0000.002B.0004] # LATIN SMALL LETTER VOLAPUK AE -00C4 ; [.1CAD.0020.0008][.0000.002B.0002] # LATIN CAPITAL LETTER A WITH DIAERESIS -A79A ; [.1CAD.0020.000A][.0000.002B.0004] # LATIN CAPITAL LETTER VOLAPUK AE -01DF ; [.1CAD.0020.0002][.0000.002B.0002][.0000.0032.0002] # LATIN SMALL LETTER A WITH DIAERESIS AND MACRON -01DE ; [.1CAD.0020.0008][.0000.002B.0002][.0000.0032.0002] # LATIN CAPITAL LETTER A WITH DIAERESIS AND MACRON -00E3 ; [.1CAD.0020.0002][.0000.002D.0002] # LATIN SMALL LETTER A WITH TILDE -00C3 ; [.1CAD.0020.0008][.0000.002D.0002] # LATIN CAPITAL LETTER A WITH TILDE -0227 ; [.1CAD.0020.0002][.0000.002E.0002] # LATIN SMALL LETTER A WITH DOT ABOVE -0226 ; [.1CAD.0020.0008][.0000.002E.0002] # LATIN CAPITAL LETTER A WITH DOT ABOVE -01E1 ; [.1CAD.0020.0002][.0000.002E.0002][.0000.0032.0002] # LATIN SMALL LETTER A WITH DOT ABOVE AND MACRON -01E0 ; [.1CAD.0020.0008][.0000.002E.0002][.0000.0032.0002] # LATIN CAPITAL LETTER A WITH DOT ABOVE AND MACRON -0105 ; [.1CAD.0020.0002][.0000.0031.0002] # LATIN SMALL LETTER A WITH OGONEK -0104 ; [.1CAD.0020.0008][.0000.0031.0002] # LATIN CAPITAL LETTER A WITH OGONEK -0101 ; [.1CAD.0020.0002][.0000.0032.0002] # LATIN SMALL LETTER A WITH MACRON -0100 ; [.1CAD.0020.0008][.0000.0032.0002] # LATIN CAPITAL LETTER A WITH MACRON -1EA3 ; [.1CAD.0020.0002][.0000.003B.0002] # LATIN SMALL LETTER A WITH HOOK ABOVE -1EA2 ; [.1CAD.0020.0008][.0000.003B.0002] # LATIN CAPITAL LETTER A WITH HOOK ABOVE -0201 ; [.1CAD.0020.0002][.0000.003C.0002] # LATIN SMALL LETTER A WITH DOUBLE GRAVE -0200 ; [.1CAD.0020.0008][.0000.003C.0002] # LATIN CAPITAL LETTER A WITH DOUBLE GRAVE -0203 ; [.1CAD.0020.0002][.0000.003E.0002] # LATIN SMALL LETTER A WITH INVERTED BREVE -0202 ; [.1CAD.0020.0008][.0000.003E.0002] # LATIN CAPITAL LETTER A WITH INVERTED BREVE -1EA1 ; [.1CAD.0020.0002][.0000.0042.0002] # LATIN SMALL LETTER A WITH DOT BELOW -1EA0 ; [.1CAD.0020.0008][.0000.0042.0002] # LATIN CAPITAL LETTER A WITH DOT BELOW -1EB7 ; [.1CAD.0020.0002][.0000.0042.0002][.0000.0026.0002] # LATIN SMALL LETTER A WITH BREVE AND DOT BELOW -1EB6 ; [.1CAD.0020.0008][.0000.0042.0002][.0000.0026.0002] # LATIN CAPITAL LETTER A WITH BREVE AND DOT BELOW -1EAD ; [.1CAD.0020.0002][.0000.0042.0002][.0000.0027.0002] # LATIN SMALL LETTER A WITH CIRCUMFLEX AND DOT BELOW -1EAC ; [.1CAD.0020.0008][.0000.0042.0002][.0000.0027.0002] # LATIN CAPITAL LETTER A WITH CIRCUMFLEX AND DOT BELOW -1E01 ; [.1CAD.0020.0002][.0000.0044.0002] # LATIN SMALL LETTER A WITH RING BELOW -1E00 ; [.1CAD.0020.0008][.0000.0044.0002] # LATIN CAPITAL LETTER A WITH RING BELOW -1DD3 ; [.1CAD.0020.0004][.0000.0111.0004] # COMBINING LATIN SMALL LETTER FLATTENED OPEN A ABOVE -A733 ; [.1CAD.0020.0004][.1CAD.0020.0004] # LATIN SMALL LETTER AA -A732 ; [.1CAD.0020.000A][.1CAD.0020.000A] # LATIN CAPITAL LETTER AA -1F18E ; [.1CAD.0020.001D][.1CC6.0020.001D] # NEGATIVE SQUARED AB -2100 ; [.1CAD.0020.0004][*0395.0020.0004][.1CE0.0020.0004] # ACCOUNT OF -00E6 ; [.1CAD.0020.0004][.0000.0111.0004][.1D10.0020.0004] # LATIN SMALL LETTER AE -1DD4 ; [.1CAD.0020.0004][.0000.0111.0004][.1D10.0020.0004] # COMBINING LATIN SMALL LETTER AE -00C6 ; [.1CAD.0020.000A][.0000.0111.0004][.1D10.0020.000A] # LATIN CAPITAL LETTER AE -1D2D ; [.1CAD.0020.0014][.0000.0111.0014][.1D10.0020.0014] # MODIFIER LETTER CAPITAL AE -01FD ; [.1CAD.0020.0004][.0000.0111.0004][.1D10.0020.0004][.0000.0024.0002] # LATIN SMALL LETTER AE WITH ACUTE -01FC ; [.1CAD.0020.000A][.0000.0111.0004][.1D10.0020.000A][.0000.0024.0002] # LATIN CAPITAL LETTER AE WITH ACUTE -01E3 ; [.1CAD.0020.0004][.0000.0111.0004][.1D10.0020.0004][.0000.0032.0002] # LATIN SMALL LETTER AE WITH MACRON -01E2 ; [.1CAD.0020.000A][.0000.0111.0004][.1D10.0020.000A][.0000.0032.0002] # LATIN CAPITAL LETTER AE WITH MACRON -33C2 ; [.1CAD.0020.001C][*0278.0020.001C][.1E10.0020.001C][*0278.0020.001C] # SQUARE AM -33DF ; [.1CAD.0020.001D][*063B.0020.001C][.1E10.0020.001C] # SQUARE A OVER M -1DD5 ; [.1CAD.0020.0004][.1E43.0020.0004] # COMBINING LATIN SMALL LETTER AO -A735 ; [.1CAD.0020.0004][.1E43.0020.0004] # LATIN SMALL LETTER AO -A734 ; [.1CAD.0020.000A][.1E43.0020.000A] # LATIN CAPITAL LETTER AO -2101 ; [.1CAD.0020.0004][*0395.0020.0004][.1ED7.0020.0004] # ADDRESSED TO THE SUBJECT -214D ; [.1CAD.0020.000A][*0395.0020.0004][.1ED7.0020.000A] # AKTIESELSKAB -A737 ; [.1CAD.0020.0004][.1F1B.0020.0004] # LATIN SMALL LETTER AU -A736 ; [.1CAD.0020.000A][.1F1B.0020.000A] # LATIN CAPITAL LETTER AU -3373 ; [.1CAD.0020.001D][.1F1B.0020.001D] # SQUARE AU -1DD6 ; [.1CAD.0020.0004][.1F49.0020.0004] # COMBINING LATIN SMALL LETTER AV -A739 ; [.1CAD.0020.0004][.1F49.0020.0004] # LATIN SMALL LETTER AV -A738 ; [.1CAD.0020.000A][.1F49.0020.000A] # LATIN CAPITAL LETTER AV -A73B ; [.1CAD.0020.0004][.0000.0111.0004][.1F49.0020.0004] # LATIN SMALL LETTER AV WITH HORIZONTAL BAR -A73A ; [.1CAD.0020.000A][.0000.0111.0004][.1F49.0020.000A] # LATIN CAPITAL LETTER AV WITH HORIZONTAL BAR -A73D ; [.1CAD.0020.0004][.1F71.0020.0004] # LATIN SMALL LETTER AY -A73C ; [.1CAD.0020.000A][.1F71.0020.000A] # LATIN CAPITAL LETTER AY -1E9A ; [.1CAD.0020.0004][.1FE6.0020.0004] # LATIN SMALL LETTER A WITH RIGHT HALF RING -1D00 ; [.1CB1.0020.0002] # LATIN LETTER SMALL CAPITAL A -2C65 ; [.1CB2.0020.0002] # LATIN SMALL LETTER A WITH STROKE -023A ; [.1CB2.0020.0008] # LATIN CAPITAL LETTER A WITH STROKE -1D8F ; [.1CB3.0020.0002] # LATIN SMALL LETTER A WITH RETROFLEX HOOK -1D01 ; [.1CB4.0020.0002] # LATIN LETTER SMALL CAPITAL AE -1D02 ; [.1CB5.0020.0002] # LATIN SMALL LETTER TURNED AE -1D46 ; [.1CB5.0020.0014] # MODIFIER LETTER SMALL TURNED AE -AB31 ; [.1CB6.0020.0002] # LATIN SMALL LETTER A REVERSED-SCHWA -0250 ; [.1CB7.0020.0002] # LATIN SMALL LETTER TURNED A -2C6F ; [.1CB7.0020.0008] # LATIN CAPITAL LETTER TURNED A -1D44 ; [.1CB7.0020.0014] # MODIFIER LETTER SMALL TURNED A -0251 ; [.1CBB.0020.0002] # LATIN SMALL LETTER ALPHA -1DE7 ; [.1CBB.0020.0004] # COMBINING LATIN SMALL LETTER ALPHA -2C6D ; [.1CBB.0020.0008] # LATIN CAPITAL LETTER ALPHA -1D45 ; [.1CBB.0020.0014] # MODIFIER LETTER SMALL ALPHA -AB30 ; [.1CBF.0020.0002] # LATIN SMALL LETTER BARRED ALPHA -1D90 ; [.1CC0.0020.0002] # LATIN SMALL LETTER ALPHA WITH RETROFLEX HOOK -0252 ; [.1CC1.0020.0002] # LATIN SMALL LETTER TURNED ALPHA -2C70 ; [.1CC1.0020.0008] # LATIN CAPITAL LETTER TURNED ALPHA -1D9B ; [.1CC1.0020.0014] # MODIFIER LETTER SMALL TURNED ALPHA -AB64 ; [.1CC5.0020.0002] # LATIN SMALL LETTER INVERTED ALPHA -0062 ; [.1CC6.0020.0002] # LATIN SMALL LETTER B -FF42 ; [.1CC6.0020.0003] # FULLWIDTH LATIN SMALL LETTER B -1DE8 ; [.1CC6.0020.0004] # COMBINING LATIN SMALL LETTER B -249D ; [*0318.0020.0004][.1CC6.0020.0004][*0319.0020.0004] # PARENTHESIZED LATIN SMALL LETTER B -1D41B ; [.1CC6.0020.0005] # MATHEMATICAL BOLD SMALL B -1D44F ; [.1CC6.0020.0005] # MATHEMATICAL ITALIC SMALL B -1D483 ; [.1CC6.0020.0005] # MATHEMATICAL BOLD ITALIC SMALL B -1D4B7 ; [.1CC6.0020.0005] # MATHEMATICAL SCRIPT SMALL B -1D4EB ; [.1CC6.0020.0005] # MATHEMATICAL BOLD SCRIPT SMALL B -1D51F ; [.1CC6.0020.0005] # MATHEMATICAL FRAKTUR SMALL B -1D553 ; [.1CC6.0020.0005] # MATHEMATICAL DOUBLE-STRUCK SMALL B -1D587 ; [.1CC6.0020.0005] # MATHEMATICAL BOLD FRAKTUR SMALL B -1D5BB ; [.1CC6.0020.0005] # MATHEMATICAL SANS-SERIF SMALL B -1D5EF ; [.1CC6.0020.0005] # MATHEMATICAL SANS-SERIF BOLD SMALL B -1D623 ; [.1CC6.0020.0005] # MATHEMATICAL SANS-SERIF ITALIC SMALL B -1D657 ; [.1CC6.0020.0005] # MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL B -1D68B ; [.1CC6.0020.0005] # MATHEMATICAL MONOSPACE SMALL B -24D1 ; [.1CC6.0020.0006] # CIRCLED LATIN SMALL LETTER B -0042 ; [.1CC6.0020.0008] # LATIN CAPITAL LETTER B -FF22 ; [.1CC6.0020.0009] # FULLWIDTH LATIN CAPITAL LETTER B -1F111 ; [*0318.0020.0004][.1CC6.0020.000A][*0319.0020.0004] # PARENTHESIZED LATIN CAPITAL LETTER B -212C ; [.1CC6.0020.000B] # SCRIPT CAPITAL B -1D401 ; [.1CC6.0020.000B] # MATHEMATICAL BOLD CAPITAL B -1D435 ; [.1CC6.0020.000B] # MATHEMATICAL ITALIC CAPITAL B -1D469 ; [.1CC6.0020.000B] # MATHEMATICAL BOLD ITALIC CAPITAL B -1D4D1 ; [.1CC6.0020.000B] # MATHEMATICAL BOLD SCRIPT CAPITAL B -1D505 ; [.1CC6.0020.000B] # MATHEMATICAL FRAKTUR CAPITAL B -1D539 ; [.1CC6.0020.000B] # MATHEMATICAL DOUBLE-STRUCK CAPITAL B -1D56D ; [.1CC6.0020.000B] # MATHEMATICAL BOLD FRAKTUR CAPITAL B -1D5A1 ; [.1CC6.0020.000B] # MATHEMATICAL SANS-SERIF CAPITAL B -1D5D5 ; [.1CC6.0020.000B] # MATHEMATICAL SANS-SERIF BOLD CAPITAL B -1D609 ; [.1CC6.0020.000B] # MATHEMATICAL SANS-SERIF ITALIC CAPITAL B -1D63D ; [.1CC6.0020.000B] # MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL B -1D671 ; [.1CC6.0020.000B] # MATHEMATICAL MONOSPACE CAPITAL B -24B7 ; [.1CC6.0020.000C] # CIRCLED LATIN CAPITAL LETTER B -1F151 ; [.1CC6.0020.000C] # NEGATIVE CIRCLED LATIN CAPITAL LETTER B -1D47 ; [.1CC6.0020.0014] # MODIFIER LETTER SMALL B -1D2E ; [.1CC6.0020.001D] # MODIFIER LETTER CAPITAL B -1F131 ; [.1CC6.0020.001D] # SQUARED LATIN CAPITAL LETTER B -1F171 ; [.1CC6.0020.001D] # NEGATIVE SQUARED LATIN CAPITAL LETTER B -1E03 ; [.1CC6.0020.0002][.0000.002E.0002] # LATIN SMALL LETTER B WITH DOT ABOVE -1E02 ; [.1CC6.0020.0008][.0000.002E.0002] # LATIN CAPITAL LETTER B WITH DOT ABOVE -1E05 ; [.1CC6.0020.0002][.0000.0042.0002] # LATIN SMALL LETTER B WITH DOT BELOW -1E04 ; [.1CC6.0020.0008][.0000.0042.0002] # LATIN CAPITAL LETTER B WITH DOT BELOW -1E07 ; [.1CC6.0020.0002][.0000.0049.0002] # LATIN SMALL LETTER B WITH LINE BELOW -1E06 ; [.1CC6.0020.0008][.0000.0049.0002] # LATIN CAPITAL LETTER B WITH LINE BELOW -3374 ; [.1CC6.0020.001C][.1CAD.0020.001C][.1E99.0020.001C] # SQUARE BAR -33C3 ; [.1CC6.0020.001D][.1E87.0020.001C] # SQUARE BQ -0299 ; [.1CCA.0020.0002] # LATIN LETTER SMALL CAPITAL B -0180 ; [.1CCE.0020.0002] # LATIN SMALL LETTER B WITH STROKE -0243 ; [.1CCE.0020.0008] # LATIN CAPITAL LETTER B WITH STROKE -1D2F ; [.1CD2.0020.0002] # MODIFIER LETTER CAPITAL BARRED B -1D03 ; [.1CD3.0020.0002] # LATIN LETTER SMALL CAPITAL BARRED B -1D6C ; [.1CD4.0020.0002] # LATIN SMALL LETTER B WITH MIDDLE TILDE -A797 ; [.1CD5.0020.0002] # LATIN SMALL LETTER B WITH FLOURISH -A796 ; [.1CD5.0020.0008] # LATIN CAPITAL LETTER B WITH FLOURISH -1D80 ; [.1CD6.0020.0002] # LATIN SMALL LETTER B WITH PALATAL HOOK -0253 ; [.1CD7.0020.0002] # LATIN SMALL LETTER B WITH HOOK -0181 ; [.1CD7.0020.0008] # LATIN CAPITAL LETTER B WITH HOOK -0183 ; [.1CDB.0020.0002] # LATIN SMALL LETTER B WITH TOPBAR -0182 ; [.1CDB.0020.0008] # LATIN CAPITAL LETTER B WITH TOPBAR -A7B5 ; [.1CDF.0020.0002] # LATIN SMALL LETTER BETA -1DE9 ; [.1CDF.0020.0004] # COMBINING LATIN SMALL LETTER BETA -A7B4 ; [.1CDF.0020.0008] # LATIN CAPITAL LETTER BETA -0063 ; [.1CE0.0020.0002] # LATIN SMALL LETTER C -FF43 ; [.1CE0.0020.0003] # FULLWIDTH LATIN SMALL LETTER C -0368 ; [.1CE0.0020.0004] # COMBINING LATIN SMALL LETTER C -217D ; [.1CE0.0020.0004] # SMALL ROMAN NUMERAL ONE HUNDRED -249E ; [*0318.0020.0004][.1CE0.0020.0004][*0319.0020.0004] # PARENTHESIZED LATIN SMALL LETTER C -1D41C ; [.1CE0.0020.0005] # MATHEMATICAL BOLD SMALL C -1D450 ; [.1CE0.0020.0005] # MATHEMATICAL ITALIC SMALL C -1D484 ; [.1CE0.0020.0005] # MATHEMATICAL BOLD ITALIC SMALL C -1D4B8 ; [.1CE0.0020.0005] # MATHEMATICAL SCRIPT SMALL C -1D4EC ; [.1CE0.0020.0005] # MATHEMATICAL BOLD SCRIPT SMALL C -1D520 ; [.1CE0.0020.0005] # MATHEMATICAL FRAKTUR SMALL C -1D554 ; [.1CE0.0020.0005] # MATHEMATICAL DOUBLE-STRUCK SMALL C -1D588 ; [.1CE0.0020.0005] # MATHEMATICAL BOLD FRAKTUR SMALL C -1D5BC ; [.1CE0.0020.0005] # MATHEMATICAL SANS-SERIF SMALL C -1D5F0 ; [.1CE0.0020.0005] # MATHEMATICAL SANS-SERIF BOLD SMALL C -1D624 ; [.1CE0.0020.0005] # MATHEMATICAL SANS-SERIF ITALIC SMALL C -1D658 ; [.1CE0.0020.0005] # MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL C -1D68C ; [.1CE0.0020.0005] # MATHEMATICAL MONOSPACE SMALL C -24D2 ; [.1CE0.0020.0006] # CIRCLED LATIN SMALL LETTER C -0043 ; [.1CE0.0020.0008] # LATIN CAPITAL LETTER C -FF23 ; [.1CE0.0020.0009] # FULLWIDTH LATIN CAPITAL LETTER C -2103 ; [*050C.0020.0004][.1CE0.0020.000A] # DEGREE CELSIUS -216D ; [.1CE0.0020.000A] # ROMAN NUMERAL ONE HUNDRED -1F112 ; [*0318.0020.0004][.1CE0.0020.000A][*0319.0020.0004] # PARENTHESIZED LATIN CAPITAL LETTER C -2102 ; [.1CE0.0020.000B] # DOUBLE-STRUCK CAPITAL C -212D ; [.1CE0.0020.000B] # BLACK-LETTER CAPITAL C -1D402 ; [.1CE0.0020.000B] # MATHEMATICAL BOLD CAPITAL C -1D436 ; [.1CE0.0020.000B] # MATHEMATICAL ITALIC CAPITAL C -1D46A ; [.1CE0.0020.000B] # MATHEMATICAL BOLD ITALIC CAPITAL C -1D49E ; [.1CE0.0020.000B] # MATHEMATICAL SCRIPT CAPITAL C -1D4D2 ; [.1CE0.0020.000B] # MATHEMATICAL BOLD SCRIPT CAPITAL C -1D56E ; [.1CE0.0020.000B] # MATHEMATICAL BOLD FRAKTUR CAPITAL C -1D5A2 ; [.1CE0.0020.000B] # MATHEMATICAL SANS-SERIF CAPITAL C -1D5D6 ; [.1CE0.0020.000B] # MATHEMATICAL SANS-SERIF BOLD CAPITAL C -1D60A ; [.1CE0.0020.000B] # MATHEMATICAL SANS-SERIF ITALIC CAPITAL C -1D63E ; [.1CE0.0020.000B] # MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL C -1D672 ; [.1CE0.0020.000B] # MATHEMATICAL MONOSPACE CAPITAL C -24B8 ; [.1CE0.0020.000C] # CIRCLED LATIN CAPITAL LETTER C -1F12B ; [.1CE0.0020.000C] # CIRCLED ITALIC LATIN CAPITAL LETTER C -1F152 ; [.1CE0.0020.000C] # NEGATIVE CIRCLED LATIN CAPITAL LETTER C -1D9C ; [.1CE0.0020.0014] # MODIFIER LETTER SMALL C -1F132 ; [.1CE0.0020.001D] # SQUARED LATIN CAPITAL LETTER C -1F172 ; [.1CE0.0020.001D] # NEGATIVE SQUARED LATIN CAPITAL LETTER C -0107 ; [.1CE0.0020.0002][.0000.0024.0002] # LATIN SMALL LETTER C WITH ACUTE -0106 ; [.1CE0.0020.0008][.0000.0024.0002] # LATIN CAPITAL LETTER C WITH ACUTE -0109 ; [.1CE0.0020.0002][.0000.0027.0002] # LATIN SMALL LETTER C WITH CIRCUMFLEX -0108 ; [.1CE0.0020.0008][.0000.0027.0002] # LATIN CAPITAL LETTER C WITH CIRCUMFLEX -010D ; [.1CE0.0020.0002][.0000.0028.0002] # LATIN SMALL LETTER C WITH CARON -010C ; [.1CE0.0020.0008][.0000.0028.0002] # LATIN CAPITAL LETTER C WITH CARON -010B ; [.1CE0.0020.0002][.0000.002E.0002] # LATIN SMALL LETTER C WITH DOT ABOVE -010A ; [.1CE0.0020.0008][.0000.002E.0002] # LATIN CAPITAL LETTER C WITH DOT ABOVE -00E7 ; [.1CE0.0020.0002][.0000.0030.0002] # LATIN SMALL LETTER C WITH CEDILLA -1DD7 ; [.1CE0.0020.0004][.0000.0030.0004] # COMBINING LATIN SMALL LETTER C CEDILLA -00C7 ; [.1CE0.0020.0008][.0000.0030.0002] # LATIN CAPITAL LETTER C WITH CEDILLA -1E09 ; [.1CE0.0020.0002][.0000.0030.0002][.0000.0024.0002] # LATIN SMALL LETTER C WITH CEDILLA AND ACUTE -1E08 ; [.1CE0.0020.0008][.0000.0030.0002][.0000.0024.0002] # LATIN CAPITAL LETTER C WITH CEDILLA AND ACUTE -3388 ; [.1CE0.0020.001C][.1CAD.0020.001C][.1DDD.0020.001C] # SQUARE CAL -33C4 ; [.1CE0.0020.001C][.1CE0.0020.001C] # SQUARE CC -1F12D ; [.1CE0.0020.000C][.1CF5.0020.000C] # CIRCLED CD -33C5 ; [.1CE0.0020.001C][.1CF5.0020.001C] # SQUARE CD -33C6 ; [.1CE0.0020.001D][*063B.0020.001C][.1DCB.0020.001C][.1D5A.0020.001C] # SQUARE C OVER KG -1F191 ; [.1CE0.0020.001D][.1DDD.0020.001D] # SQUARED CL -339D ; [.1CE0.0020.001C][.1E10.0020.001C] # SQUARE CM -33A0 ; [.1CE0.0020.001C][.1E10.0020.001C][.1CA5.0020.001C] # SQUARE CM SQUARED -33A4 ; [.1CE0.0020.001C][.1E10.0020.001C][.1CA6.0020.001C] # SQUARE CM CUBED -2105 ; [.1CE0.0020.0004][*0395.0020.0004][.1E43.0020.0004] # CARE OF -33C7 ; [.1CE0.0020.001D][.1E43.0020.001C][*0278.0020.001C] # SQUARE CO -1F192 ; [.1CE0.0020.001D][.1E43.0020.001D][.1E43.0020.001D][.1DDD.0020.001D] # SQUARED COOL -2106 ; [.1CE0.0020.0004][*0395.0020.0004][.1F1B.0020.0004] # CADA UNA -1D04 ; [.1CE4.0020.0002] # LATIN LETTER SMALL CAPITAL C -023C ; [.1CE5.0020.0002] # LATIN SMALL LETTER C WITH STROKE -023B ; [.1CE5.0020.0008] # LATIN CAPITAL LETTER C WITH STROKE -A793 ; [.1CE9.0020.0002] # LATIN SMALL LETTER C WITH BAR -A792 ; [.1CE9.0020.0008] # LATIN CAPITAL LETTER C WITH BAR -A794 ; [.1CEA.0020.0002] # LATIN SMALL LETTER C WITH PALATAL HOOK -0188 ; [.1CEB.0020.0002] # LATIN SMALL LETTER C WITH HOOK -0187 ; [.1CEB.0020.0008] # LATIN CAPITAL LETTER C WITH HOOK -0255 ; [.1CEF.0020.0002] # LATIN SMALL LETTER C WITH CURL -1D9D ; [.1CEF.0020.0014] # MODIFIER LETTER SMALL C WITH CURL -2184 ; [.1CF3.0020.0002] # LATIN SMALL LETTER REVERSED C -2183 ; [.1CF3.0020.0008] # ROMAN NUMERAL REVERSED ONE HUNDRED -A73F ; [.1CF4.0020.0002] # LATIN SMALL LETTER REVERSED C WITH DOT -A73E ; [.1CF4.0020.0008] # LATIN CAPITAL LETTER REVERSED C WITH DOT -0064 ; [.1CF5.0020.0002] # LATIN SMALL LETTER D -FF44 ; [.1CF5.0020.0003] # FULLWIDTH LATIN SMALL LETTER D -0369 ; [.1CF5.0020.0004] # COMBINING LATIN SMALL LETTER D -217E ; [.1CF5.0020.0004] # SMALL ROMAN NUMERAL FIVE HUNDRED -249F ; [*0318.0020.0004][.1CF5.0020.0004][*0319.0020.0004] # PARENTHESIZED LATIN SMALL LETTER D -2146 ; [.1CF5.0020.0005] # DOUBLE-STRUCK ITALIC SMALL D -1D41D ; [.1CF5.0020.0005] # MATHEMATICAL BOLD SMALL D -1D451 ; [.1CF5.0020.0005] # MATHEMATICAL ITALIC SMALL D -1D485 ; [.1CF5.0020.0005] # MATHEMATICAL BOLD ITALIC SMALL D -1D4B9 ; [.1CF5.0020.0005] # MATHEMATICAL SCRIPT SMALL D -1D4ED ; [.1CF5.0020.0005] # MATHEMATICAL BOLD SCRIPT SMALL D -1D521 ; [.1CF5.0020.0005] # MATHEMATICAL FRAKTUR SMALL D -1D555 ; [.1CF5.0020.0005] # MATHEMATICAL DOUBLE-STRUCK SMALL D -1D589 ; [.1CF5.0020.0005] # MATHEMATICAL BOLD FRAKTUR SMALL D -1D5BD ; [.1CF5.0020.0005] # MATHEMATICAL SANS-SERIF SMALL D -1D5F1 ; [.1CF5.0020.0005] # MATHEMATICAL SANS-SERIF BOLD SMALL D -1D625 ; [.1CF5.0020.0005] # MATHEMATICAL SANS-SERIF ITALIC SMALL D -1D659 ; [.1CF5.0020.0005] # MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL D -1D68D ; [.1CF5.0020.0005] # MATHEMATICAL MONOSPACE SMALL D -24D3 ; [.1CF5.0020.0006] # CIRCLED LATIN SMALL LETTER D -0044 ; [.1CF5.0020.0008] # LATIN CAPITAL LETTER D -FF24 ; [.1CF5.0020.0009] # FULLWIDTH LATIN CAPITAL LETTER D -216E ; [.1CF5.0020.000A] # ROMAN NUMERAL FIVE HUNDRED -1F113 ; [*0318.0020.0004][.1CF5.0020.000A][*0319.0020.0004] # PARENTHESIZED LATIN CAPITAL LETTER D -2145 ; [.1CF5.0020.000B] # DOUBLE-STRUCK ITALIC CAPITAL D -1D403 ; [.1CF5.0020.000B] # MATHEMATICAL BOLD CAPITAL D -1D437 ; [.1CF5.0020.000B] # MATHEMATICAL ITALIC CAPITAL D -1D46B ; [.1CF5.0020.000B] # MATHEMATICAL BOLD ITALIC CAPITAL D -1D49F ; [.1CF5.0020.000B] # MATHEMATICAL SCRIPT CAPITAL D -1D4D3 ; [.1CF5.0020.000B] # MATHEMATICAL BOLD SCRIPT CAPITAL D -1D507 ; [.1CF5.0020.000B] # MATHEMATICAL FRAKTUR CAPITAL D -1D53B ; [.1CF5.0020.000B] # MATHEMATICAL DOUBLE-STRUCK CAPITAL D -1D56F ; [.1CF5.0020.000B] # MATHEMATICAL BOLD FRAKTUR CAPITAL D -1D5A3 ; [.1CF5.0020.000B] # MATHEMATICAL SANS-SERIF CAPITAL D -1D5D7 ; [.1CF5.0020.000B] # MATHEMATICAL SANS-SERIF BOLD CAPITAL D -1D60B ; [.1CF5.0020.000B] # MATHEMATICAL SANS-SERIF ITALIC CAPITAL D -1D63F ; [.1CF5.0020.000B] # MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL D -1D673 ; [.1CF5.0020.000B] # MATHEMATICAL MONOSPACE CAPITAL D -24B9 ; [.1CF5.0020.000C] # CIRCLED LATIN CAPITAL LETTER D -1F153 ; [.1CF5.0020.000C] # NEGATIVE CIRCLED LATIN CAPITAL LETTER D -1D48 ; [.1CF5.0020.0014] # MODIFIER LETTER SMALL D -1F1A5 ; [.1CF5.0020.001C] # SQUARED LATIN SMALL LETTER D -1D30 ; [.1CF5.0020.001D] # MODIFIER LETTER CAPITAL D -1F133 ; [.1CF5.0020.001D] # SQUARED LATIN CAPITAL LETTER D -1F173 ; [.1CF5.0020.001D] # NEGATIVE SQUARED LATIN CAPITAL LETTER D -010F ; [.1CF5.0020.0002][.0000.0028.0002] # LATIN SMALL LETTER D WITH CARON -010E ; [.1CF5.0020.0008][.0000.0028.0002] # LATIN CAPITAL LETTER D WITH CARON -1E0B ; [.1CF5.0020.0002][.0000.002E.0002] # LATIN SMALL LETTER D WITH DOT ABOVE -1E0A ; [.1CF5.0020.0008][.0000.002E.0002] # LATIN CAPITAL LETTER D WITH DOT ABOVE -1E11 ; [.1CF5.0020.0002][.0000.0030.0002] # LATIN SMALL LETTER D WITH CEDILLA -1E10 ; [.1CF5.0020.0008][.0000.0030.0002] # LATIN CAPITAL LETTER D WITH CEDILLA -0111 ; [.1CF5.0020.0002][.0000.0039.0002] # LATIN SMALL LETTER D WITH STROKE -0110 ; [.1CF5.0020.0008][.0000.0039.0002] # LATIN CAPITAL LETTER D WITH STROKE -1E0D ; [.1CF5.0020.0002][.0000.0042.0002] # LATIN SMALL LETTER D WITH DOT BELOW -1E0C ; [.1CF5.0020.0008][.0000.0042.0002] # LATIN CAPITAL LETTER D WITH DOT BELOW -1E13 ; [.1CF5.0020.0002][.0000.0046.0002] # LATIN SMALL LETTER D WITH CIRCUMFLEX BELOW -1E12 ; [.1CF5.0020.0008][.0000.0046.0002] # LATIN CAPITAL LETTER D WITH CIRCUMFLEX BELOW -1E0F ; [.1CF5.0020.0002][.0000.0049.0002] # LATIN SMALL LETTER D WITH LINE BELOW -1E0E ; [.1CF5.0020.0008][.0000.0049.0002] # LATIN CAPITAL LETTER D WITH LINE BELOW -00F0 ; [.1CF5.0020.0004][.0000.0111.0004] # LATIN SMALL LETTER ETH -1DD9 ; [.1CF5.0020.0004][.0000.0111.0004] # COMBINING LATIN SMALL LETTER ETH -00D0 ; [.1CF5.0020.000A][.0000.0111.0004] # LATIN CAPITAL LETTER ETH -1D9E ; [.1CF5.0020.0014][.0000.0111.0014] # MODIFIER LETTER SMALL ETH -1DD8 ; [.1CF5.0020.0004][.0000.0112.0004] # COMBINING LATIN SMALL LETTER INSULAR D -A77A ; [.1CF5.0020.0004][.0000.0112.0004] # LATIN SMALL LETTER INSULAR D -A779 ; [.1CF5.0020.000A][.0000.0112.0004] # LATIN CAPITAL LETTER INSULAR D -3372 ; [.1CF5.0020.001C][.1CAD.0020.001C] # SQUARE DA -0238 ; [.1CF5.0020.0004][.1CC6.0020.0004] # LATIN SMALL LETTER DB DIGRAPH -33C8 ; [.1CF5.0020.001C][.1CC6.0020.001D] # SQUARE DB -1F190 ; [.1CF5.0020.001D][.1DB2.0020.001D] # SQUARE DJ -3397 ; [.1CF5.0020.001C][.1DDD.0020.001C] # SQUARE DL -3377 ; [.1CF5.0020.001C][.1E10.0020.001C] # SQUARE DM -3378 ; [.1CF5.0020.001C][.1E10.0020.001C][.1CA5.0020.001C] # SQUARE DM SQUARED -3379 ; [.1CF5.0020.001C][.1E10.0020.001C][.1CA6.0020.001C] # SQUARE DM CUBED -01F3 ; [.1CF5.0020.0004][.1F87.0020.0004] # LATIN SMALL LETTER DZ -02A3 ; [.1CF5.0020.0004][.1F87.0020.0004] # LATIN SMALL LETTER DZ DIGRAPH -01F2 ; [.1CF5.0020.000A][.1F87.0020.0004] # LATIN CAPITAL LETTER D WITH SMALL LETTER Z -01F1 ; [.1CF5.0020.000A][.1F87.0020.000A] # LATIN CAPITAL LETTER DZ -01C6 ; [.1CF5.0020.0004][.1F87.0020.0004][.0000.0028.0004] # LATIN SMALL LETTER DZ WITH CARON -01C5 ; [.1CF5.0020.000A][.1F87.0020.0004][.0000.0028.0004] # LATIN CAPITAL LETTER D WITH SMALL LETTER Z WITH CARON -01C4 ; [.1CF5.0020.000A][.1F87.0020.000A][.0000.0028.0004] # LATIN CAPITAL LETTER DZ WITH CARON -02A5 ; [.1CF5.0020.0004][.1F9A.0020.0004] # LATIN SMALL LETTER DZ DIGRAPH WITH CURL -02A4 ; [.1CF5.0020.0004][.1FA4.0020.0004] # LATIN SMALL LETTER DEZH DIGRAPH -1D05 ; [.1CF9.0020.0002] # LATIN LETTER SMALL CAPITAL D -1D06 ; [.1CFA.0020.0002] # LATIN LETTER SMALL CAPITAL ETH -1D6D ; [.1CFB.0020.0002] # LATIN SMALL LETTER D WITH MIDDLE TILDE -1D81 ; [.1CFC.0020.0002] # LATIN SMALL LETTER D WITH PALATAL HOOK -0256 ; [.1CFD.0020.0002] # LATIN SMALL LETTER D WITH TAIL -0189 ; [.1CFD.0020.0008] # LATIN CAPITAL LETTER AFRICAN D -0257 ; [.1D01.0020.0002] # LATIN SMALL LETTER D WITH HOOK -018A ; [.1D01.0020.0008] # LATIN CAPITAL LETTER D WITH HOOK -1D91 ; [.1D05.0020.0002] # LATIN SMALL LETTER D WITH HOOK AND TAIL -018C ; [.1D06.0020.0002] # LATIN SMALL LETTER D WITH TOPBAR -018B ; [.1D06.0020.0008] # LATIN CAPITAL LETTER D WITH TOPBAR -0221 ; [.1D0A.0020.0002] # LATIN SMALL LETTER D WITH CURL -A771 ; [.1D0E.0020.0002] # LATIN SMALL LETTER DUM -1E9F ; [.1D0F.0020.0002] # LATIN SMALL LETTER DELTA -0065 ; [.1D10.0020.0002] # LATIN SMALL LETTER E -FF45 ; [.1D10.0020.0003] # FULLWIDTH LATIN SMALL LETTER E -0364 ; [.1D10.0020.0004] # COMBINING LATIN SMALL LETTER E -24A0 ; [*0318.0020.0004][.1D10.0020.0004][*0319.0020.0004] # PARENTHESIZED LATIN SMALL LETTER E -212F ; [.1D10.0020.0005] # SCRIPT SMALL E -2147 ; [.1D10.0020.0005] # DOUBLE-STRUCK ITALIC SMALL E -1D41E ; [.1D10.0020.0005] # MATHEMATICAL BOLD SMALL E -1D452 ; [.1D10.0020.0005] # MATHEMATICAL ITALIC SMALL E -1D486 ; [.1D10.0020.0005] # MATHEMATICAL BOLD ITALIC SMALL E -1D4EE ; [.1D10.0020.0005] # MATHEMATICAL BOLD SCRIPT SMALL E -1D522 ; [.1D10.0020.0005] # MATHEMATICAL FRAKTUR SMALL E -1D556 ; [.1D10.0020.0005] # MATHEMATICAL DOUBLE-STRUCK SMALL E -1D58A ; [.1D10.0020.0005] # MATHEMATICAL BOLD FRAKTUR SMALL E -1D5BE ; [.1D10.0020.0005] # MATHEMATICAL SANS-SERIF SMALL E -1D5F2 ; [.1D10.0020.0005] # MATHEMATICAL SANS-SERIF BOLD SMALL E -1D626 ; [.1D10.0020.0005] # MATHEMATICAL SANS-SERIF ITALIC SMALL E -1D65A ; [.1D10.0020.0005] # MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL E -1D68E ; [.1D10.0020.0005] # MATHEMATICAL MONOSPACE SMALL E -24D4 ; [.1D10.0020.0006] # CIRCLED LATIN SMALL LETTER E -0045 ; [.1D10.0020.0008] # LATIN CAPITAL LETTER E -FF25 ; [.1D10.0020.0009] # FULLWIDTH LATIN CAPITAL LETTER E -1F114 ; [*0318.0020.0004][.1D10.0020.000A][*0319.0020.0004] # PARENTHESIZED LATIN CAPITAL LETTER E -2130 ; [.1D10.0020.000B] # SCRIPT CAPITAL E -1D404 ; [.1D10.0020.000B] # MATHEMATICAL BOLD CAPITAL E -1D438 ; [.1D10.0020.000B] # MATHEMATICAL ITALIC CAPITAL E -1D46C ; [.1D10.0020.000B] # MATHEMATICAL BOLD ITALIC CAPITAL E -1D4D4 ; [.1D10.0020.000B] # MATHEMATICAL BOLD SCRIPT CAPITAL E -1D508 ; [.1D10.0020.000B] # MATHEMATICAL FRAKTUR CAPITAL E -1D53C ; [.1D10.0020.000B] # MATHEMATICAL DOUBLE-STRUCK CAPITAL E -1D570 ; [.1D10.0020.000B] # MATHEMATICAL BOLD FRAKTUR CAPITAL E -1D5A4 ; [.1D10.0020.000B] # MATHEMATICAL SANS-SERIF CAPITAL E -1D5D8 ; [.1D10.0020.000B] # MATHEMATICAL SANS-SERIF BOLD CAPITAL E -1D60C ; [.1D10.0020.000B] # MATHEMATICAL SANS-SERIF ITALIC CAPITAL E -1D640 ; [.1D10.0020.000B] # MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL E -1D674 ; [.1D10.0020.000B] # MATHEMATICAL MONOSPACE CAPITAL E -24BA ; [.1D10.0020.000C] # CIRCLED LATIN CAPITAL LETTER E -1F154 ; [.1D10.0020.000C] # NEGATIVE CIRCLED LATIN CAPITAL LETTER E -1D49 ; [.1D10.0020.0014] # MODIFIER LETTER SMALL E -2091 ; [.1D10.0020.0015] # LATIN SUBSCRIPT SMALL LETTER E -1D31 ; [.1D10.0020.001D] # MODIFIER LETTER CAPITAL E -1F134 ; [.1D10.0020.001D] # SQUARED LATIN CAPITAL LETTER E -1F174 ; [.1D10.0020.001D] # NEGATIVE SQUARED LATIN CAPITAL LETTER E -00E9 ; [.1D10.0020.0002][.0000.0024.0002] # LATIN SMALL LETTER E WITH ACUTE -00C9 ; [.1D10.0020.0008][.0000.0024.0002] # LATIN CAPITAL LETTER E WITH ACUTE -00E8 ; [.1D10.0020.0002][.0000.0025.0002] # LATIN SMALL LETTER E WITH GRAVE -00C8 ; [.1D10.0020.0008][.0000.0025.0002] # LATIN CAPITAL LETTER E WITH GRAVE -0115 ; [.1D10.0020.0002][.0000.0026.0002] # LATIN SMALL LETTER E WITH BREVE -0114 ; [.1D10.0020.0008][.0000.0026.0002] # LATIN CAPITAL LETTER E WITH BREVE -00EA ; [.1D10.0020.0002][.0000.0027.0002] # LATIN SMALL LETTER E WITH CIRCUMFLEX -00CA ; [.1D10.0020.0008][.0000.0027.0002] # LATIN CAPITAL LETTER E WITH CIRCUMFLEX -1EBF ; [.1D10.0020.0002][.0000.0027.0002][.0000.0024.0002] # LATIN SMALL LETTER E WITH CIRCUMFLEX AND ACUTE -1EBE ; [.1D10.0020.0008][.0000.0027.0002][.0000.0024.0002] # LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND ACUTE -1EC1 ; [.1D10.0020.0002][.0000.0027.0002][.0000.0025.0002] # LATIN SMALL LETTER E WITH CIRCUMFLEX AND GRAVE -1EC0 ; [.1D10.0020.0008][.0000.0027.0002][.0000.0025.0002] # LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND GRAVE -1EC5 ; [.1D10.0020.0002][.0000.0027.0002][.0000.002D.0002] # LATIN SMALL LETTER E WITH CIRCUMFLEX AND TILDE -1EC4 ; [.1D10.0020.0008][.0000.0027.0002][.0000.002D.0002] # LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND TILDE -1EC3 ; [.1D10.0020.0002][.0000.0027.0002][.0000.003B.0002] # LATIN SMALL LETTER E WITH CIRCUMFLEX AND HOOK ABOVE -1EC2 ; [.1D10.0020.0008][.0000.0027.0002][.0000.003B.0002] # LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND HOOK ABOVE -011B ; [.1D10.0020.0002][.0000.0028.0002] # LATIN SMALL LETTER E WITH CARON -011A ; [.1D10.0020.0008][.0000.0028.0002] # LATIN CAPITAL LETTER E WITH CARON -00EB ; [.1D10.0020.0002][.0000.002B.0002] # LATIN SMALL LETTER E WITH DIAERESIS -00CB ; [.1D10.0020.0008][.0000.002B.0002] # LATIN CAPITAL LETTER E WITH DIAERESIS -1EBD ; [.1D10.0020.0002][.0000.002D.0002] # LATIN SMALL LETTER E WITH TILDE -1EBC ; [.1D10.0020.0008][.0000.002D.0002] # LATIN CAPITAL LETTER E WITH TILDE -0117 ; [.1D10.0020.0002][.0000.002E.0002] # LATIN SMALL LETTER E WITH DOT ABOVE -0116 ; [.1D10.0020.0008][.0000.002E.0002] # LATIN CAPITAL LETTER E WITH DOT ABOVE -0229 ; [.1D10.0020.0002][.0000.0030.0002] # LATIN SMALL LETTER E WITH CEDILLA -0228 ; [.1D10.0020.0008][.0000.0030.0002] # LATIN CAPITAL LETTER E WITH CEDILLA -1E1D ; [.1D10.0020.0002][.0000.0030.0002][.0000.0026.0002] # LATIN SMALL LETTER E WITH CEDILLA AND BREVE -1E1C ; [.1D10.0020.0008][.0000.0030.0002][.0000.0026.0002] # LATIN CAPITAL LETTER E WITH CEDILLA AND BREVE -0119 ; [.1D10.0020.0002][.0000.0031.0002] # LATIN SMALL LETTER E WITH OGONEK -0118 ; [.1D10.0020.0008][.0000.0031.0002] # LATIN CAPITAL LETTER E WITH OGONEK -0113 ; [.1D10.0020.0002][.0000.0032.0002] # LATIN SMALL LETTER E WITH MACRON -0112 ; [.1D10.0020.0008][.0000.0032.0002] # LATIN CAPITAL LETTER E WITH MACRON -1E17 ; [.1D10.0020.0002][.0000.0032.0002][.0000.0024.0002] # LATIN SMALL LETTER E WITH MACRON AND ACUTE -1E16 ; [.1D10.0020.0008][.0000.0032.0002][.0000.0024.0002] # LATIN CAPITAL LETTER E WITH MACRON AND ACUTE -1E15 ; [.1D10.0020.0002][.0000.0032.0002][.0000.0025.0002] # LATIN SMALL LETTER E WITH MACRON AND GRAVE -1E14 ; [.1D10.0020.0008][.0000.0032.0002][.0000.0025.0002] # LATIN CAPITAL LETTER E WITH MACRON AND GRAVE -1EBB ; [.1D10.0020.0002][.0000.003B.0002] # LATIN SMALL LETTER E WITH HOOK ABOVE -1EBA ; [.1D10.0020.0008][.0000.003B.0002] # LATIN CAPITAL LETTER E WITH HOOK ABOVE -0205 ; [.1D10.0020.0002][.0000.003C.0002] # LATIN SMALL LETTER E WITH DOUBLE GRAVE -0204 ; [.1D10.0020.0008][.0000.003C.0002] # LATIN CAPITAL LETTER E WITH DOUBLE GRAVE -0207 ; [.1D10.0020.0002][.0000.003E.0002] # LATIN SMALL LETTER E WITH INVERTED BREVE -0206 ; [.1D10.0020.0008][.0000.003E.0002] # LATIN CAPITAL LETTER E WITH INVERTED BREVE -1EB9 ; [.1D10.0020.0002][.0000.0042.0002] # LATIN SMALL LETTER E WITH DOT BELOW -1EB8 ; [.1D10.0020.0008][.0000.0042.0002] # LATIN CAPITAL LETTER E WITH DOT BELOW -1EC7 ; [.1D10.0020.0002][.0000.0042.0002][.0000.0027.0002] # LATIN SMALL LETTER E WITH CIRCUMFLEX AND DOT BELOW -1EC6 ; [.1D10.0020.0008][.0000.0042.0002][.0000.0027.0002] # LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND DOT BELOW -1E19 ; [.1D10.0020.0002][.0000.0046.0002] # LATIN SMALL LETTER E WITH CIRCUMFLEX BELOW -1E18 ; [.1D10.0020.0008][.0000.0046.0002] # LATIN CAPITAL LETTER E WITH CIRCUMFLEX BELOW -1E1B ; [.1D10.0020.0002][.0000.0048.0002] # LATIN SMALL LETTER E WITH TILDE BELOW -1E1A ; [.1D10.0020.0008][.0000.0048.0002] # LATIN CAPITAL LETTER E WITH TILDE BELOW -32CD ; [.1D10.0020.001C][.1E99.0020.001C][.1D5A.0020.001C] # SQUARE ERG -32CE ; [.1D10.0020.001C][.1F49.0020.001D] # SQUARE EV -1D07 ; [.1D14.0020.0002] # LATIN LETTER SMALL CAPITAL E -AB32 ; [.1D15.0020.0002] # LATIN SMALL LETTER BLACKLETTER E -AB33 ; [.1D16.0020.0002] # LATIN SMALL LETTER BARRED E -0247 ; [.1D17.0020.0002] # LATIN SMALL LETTER E WITH STROKE -0246 ; [.1D17.0020.0008] # LATIN CAPITAL LETTER E WITH STROKE -1D92 ; [.1D1B.0020.0002] # LATIN SMALL LETTER E WITH RETROFLEX HOOK -AB34 ; [.1D1C.0020.0002] # LATIN SMALL LETTER E WITH FLOURISH -2C78 ; [.1D1D.0020.0002] # LATIN SMALL LETTER E WITH NOTCH -01DD ; [.1D1E.0020.0002] # LATIN SMALL LETTER TURNED E -018E ; [.1D1E.0020.0008] # LATIN CAPITAL LETTER REVERSED E -1D32 ; [.1D1E.0020.001D] # MODIFIER LETTER CAPITAL REVERSED E -2C7B ; [.1D22.0020.0002] # LATIN LETTER SMALL CAPITAL TURNED E -0259 ; [.1D23.0020.0002] # LATIN SMALL LETTER SCHWA -1DEA ; [.1D23.0020.0004] # COMBINING LATIN SMALL LETTER SCHWA -018F ; [.1D23.0020.0008] # LATIN CAPITAL LETTER SCHWA -1D4A ; [.1D23.0020.0014] # MODIFIER LETTER SMALL SCHWA -2094 ; [.1D23.0020.0015] # LATIN SUBSCRIPT SMALL LETTER SCHWA -1D95 ; [.1D27.0020.0002] # LATIN SMALL LETTER SCHWA WITH RETROFLEX HOOK -025B ; [.1D28.0020.0002] # LATIN SMALL LETTER OPEN E -0190 ; [.1D28.0020.0008] # LATIN CAPITAL LETTER OPEN E -2107 ; [.1D28.0020.000A] # EULER CONSTANT -1D4B ; [.1D28.0020.0014] # MODIFIER LETTER SMALL OPEN E -1D93 ; [.1D2C.0020.0002] # LATIN SMALL LETTER OPEN E WITH RETROFLEX HOOK -0258 ; [.1D2D.0020.0002] # LATIN SMALL LETTER REVERSED E -025A ; [.1D31.0020.0002] # LATIN SMALL LETTER SCHWA WITH HOOK -025C ; [.1D35.0020.0002] # LATIN SMALL LETTER REVERSED OPEN E -A7AB ; [.1D35.0020.0008] # LATIN CAPITAL LETTER REVERSED OPEN E -1D9F ; [.1D35.0020.0014] # MODIFIER LETTER SMALL REVERSED OPEN E -1D94 ; [.1D39.0020.0002] # LATIN SMALL LETTER REVERSED OPEN E WITH RETROFLEX HOOK -1D08 ; [.1D3A.0020.0002] # LATIN SMALL LETTER TURNED OPEN E -1D4C ; [.1D3A.0020.0014] # MODIFIER LETTER SMALL TURNED OPEN E -025D ; [.1D3B.0020.0002] # LATIN SMALL LETTER REVERSED OPEN E WITH HOOK -025E ; [.1D3F.0020.0002] # LATIN SMALL LETTER CLOSED REVERSED OPEN E -029A ; [.1D43.0020.0002] # LATIN SMALL LETTER CLOSED OPEN E -0264 ; [.1D47.0020.0002] # LATIN SMALL LETTER RAMS HORN -0066 ; [.1D4B.0020.0002] # LATIN SMALL LETTER F -FF46 ; [.1D4B.0020.0003] # FULLWIDTH LATIN SMALL LETTER F -1DEB ; [.1D4B.0020.0004] # COMBINING LATIN SMALL LETTER F -24A1 ; [*0318.0020.0004][.1D4B.0020.0004][*0319.0020.0004] # PARENTHESIZED LATIN SMALL LETTER F -1D41F ; [.1D4B.0020.0005] # MATHEMATICAL BOLD SMALL F -1D453 ; [.1D4B.0020.0005] # MATHEMATICAL ITALIC SMALL F -1D487 ; [.1D4B.0020.0005] # MATHEMATICAL BOLD ITALIC SMALL F -1D4BB ; [.1D4B.0020.0005] # MATHEMATICAL SCRIPT SMALL F -1D4EF ; [.1D4B.0020.0005] # MATHEMATICAL BOLD SCRIPT SMALL F -1D523 ; [.1D4B.0020.0005] # MATHEMATICAL FRAKTUR SMALL F -1D557 ; [.1D4B.0020.0005] # MATHEMATICAL DOUBLE-STRUCK SMALL F -1D58B ; [.1D4B.0020.0005] # MATHEMATICAL BOLD FRAKTUR SMALL F -1D5BF ; [.1D4B.0020.0005] # MATHEMATICAL SANS-SERIF SMALL F -1D5F3 ; [.1D4B.0020.0005] # MATHEMATICAL SANS-SERIF BOLD SMALL F -1D627 ; [.1D4B.0020.0005] # MATHEMATICAL SANS-SERIF ITALIC SMALL F -1D65B ; [.1D4B.0020.0005] # MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL F -1D68F ; [.1D4B.0020.0005] # MATHEMATICAL MONOSPACE SMALL F -24D5 ; [.1D4B.0020.0006] # CIRCLED LATIN SMALL LETTER F -0046 ; [.1D4B.0020.0008] # LATIN CAPITAL LETTER F -FF26 ; [.1D4B.0020.0009] # FULLWIDTH LATIN CAPITAL LETTER F -2109 ; [*050C.0020.0004][.1D4B.0020.000A] # DEGREE FAHRENHEIT -1F115 ; [*0318.0020.0004][.1D4B.0020.000A][*0319.0020.0004] # PARENTHESIZED LATIN CAPITAL LETTER F -2131 ; [.1D4B.0020.000B] # SCRIPT CAPITAL F -1D405 ; [.1D4B.0020.000B] # MATHEMATICAL BOLD CAPITAL F -1D439 ; [.1D4B.0020.000B] # MATHEMATICAL ITALIC CAPITAL F -1D46D ; [.1D4B.0020.000B] # MATHEMATICAL BOLD ITALIC CAPITAL F -1D4D5 ; [.1D4B.0020.000B] # MATHEMATICAL BOLD SCRIPT CAPITAL F -1D509 ; [.1D4B.0020.000B] # MATHEMATICAL FRAKTUR CAPITAL F -1D53D ; [.1D4B.0020.000B] # MATHEMATICAL DOUBLE-STRUCK CAPITAL F -1D571 ; [.1D4B.0020.000B] # MATHEMATICAL BOLD FRAKTUR CAPITAL F -1D5A5 ; [.1D4B.0020.000B] # MATHEMATICAL SANS-SERIF CAPITAL F -1D5D9 ; [.1D4B.0020.000B] # MATHEMATICAL SANS-SERIF BOLD CAPITAL F -1D60D ; [.1D4B.0020.000B] # MATHEMATICAL SANS-SERIF ITALIC CAPITAL F -1D641 ; [.1D4B.0020.000B] # MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL F -1D675 ; [.1D4B.0020.000B] # MATHEMATICAL MONOSPACE CAPITAL F -24BB ; [.1D4B.0020.000C] # CIRCLED LATIN CAPITAL LETTER F -1F155 ; [.1D4B.0020.000C] # NEGATIVE CIRCLED LATIN CAPITAL LETTER F -1DA0 ; [.1D4B.0020.0014] # MODIFIER LETTER SMALL F -1F135 ; [.1D4B.0020.001D] # SQUARED LATIN CAPITAL LETTER F -1F175 ; [.1D4B.0020.001D] # NEGATIVE SQUARED LATIN CAPITAL LETTER F -1E1F ; [.1D4B.0020.0002][.0000.002E.0002] # LATIN SMALL LETTER F WITH DOT ABOVE -1E1E ; [.1D4B.0020.0008][.0000.002E.0002] # LATIN CAPITAL LETTER F WITH DOT ABOVE -A77C ; [.1D4B.0020.0004][.0000.0112.0004] # LATIN SMALL LETTER INSULAR F -A77B ; [.1D4B.0020.000A][.0000.0112.0004] # LATIN CAPITAL LETTER INSULAR F -213B ; [.1D4B.0020.000A][.1CAD.0020.000A][.1F65.0020.000A] # FACSIMILE SIGN -FB00 ; [.1D4B.0020.0004][.1D4B.0020.0004] # LATIN SMALL LIGATURE FF -FB03 ; [.1D4B.0020.0004][.1D4B.0020.0004][.1D98.0020.0004] # LATIN SMALL LIGATURE FFI -FB04 ; [.1D4B.0020.0004][.1D4B.0020.0004][.1DDD.0020.0004] # LATIN SMALL LIGATURE FFL -FB01 ; [.1D4B.0020.0004][.1D98.0020.0004] # LATIN SMALL LIGATURE FI -FB02 ; [.1D4B.0020.0004][.1DDD.0020.0004] # LATIN SMALL LIGATURE FL -3399 ; [.1D4B.0020.001C][.1E10.0020.001C] # SQUARE FM -02A9 ; [.1D4B.0020.0004][.1E3E.0020.0004] # LATIN SMALL LETTER FENG DIGRAPH -1F193 ; [.1D4B.0020.001D][.1E99.0020.001D][.1D10.0020.001D][.1D10.0020.001D] # SQUARED FREE -A730 ; [.1D4F.0020.0002] # LATIN LETTER SMALL CAPITAL F -AB35 ; [.1D50.0020.0002] # LATIN SMALL LETTER LENIS F -A799 ; [.1D51.0020.0002] # LATIN SMALL LETTER F WITH STROKE -A798 ; [.1D51.0020.0008] # LATIN CAPITAL LETTER F WITH STROKE -1D6E ; [.1D52.0020.0002] # LATIN SMALL LETTER F WITH MIDDLE TILDE -1D82 ; [.1D53.0020.0002] # LATIN SMALL LETTER F WITH PALATAL HOOK -0192 ; [.1D54.0020.0002] # LATIN SMALL LETTER F WITH HOOK -0191 ; [.1D54.0020.0008] # LATIN CAPITAL LETTER F WITH HOOK -214E ; [.1D58.0020.0002] # TURNED SMALL F -2132 ; [.1D58.0020.0008] # TURNED CAPITAL F -A7FB ; [.1D59.0020.0002] # LATIN EPIGRAPHIC LETTER REVERSED F -0067 ; [.1D5A.0020.0002] # LATIN SMALL LETTER G -FF47 ; [.1D5A.0020.0003] # FULLWIDTH LATIN SMALL LETTER G -1DDA ; [.1D5A.0020.0004] # COMBINING LATIN SMALL LETTER G -24A2 ; [*0318.0020.0004][.1D5A.0020.0004][*0319.0020.0004] # PARENTHESIZED LATIN SMALL LETTER G -210A ; [.1D5A.0020.0005] # SCRIPT SMALL G -1D420 ; [.1D5A.0020.0005] # MATHEMATICAL BOLD SMALL G -1D454 ; [.1D5A.0020.0005] # MATHEMATICAL ITALIC SMALL G -1D488 ; [.1D5A.0020.0005] # MATHEMATICAL BOLD ITALIC SMALL G -1D4F0 ; [.1D5A.0020.0005] # MATHEMATICAL BOLD SCRIPT SMALL G -1D524 ; [.1D5A.0020.0005] # MATHEMATICAL FRAKTUR SMALL G -1D558 ; [.1D5A.0020.0005] # MATHEMATICAL DOUBLE-STRUCK SMALL G -1D58C ; [.1D5A.0020.0005] # MATHEMATICAL BOLD FRAKTUR SMALL G -1D5C0 ; [.1D5A.0020.0005] # MATHEMATICAL SANS-SERIF SMALL G -1D5F4 ; [.1D5A.0020.0005] # MATHEMATICAL SANS-SERIF BOLD SMALL G -1D628 ; [.1D5A.0020.0005] # MATHEMATICAL SANS-SERIF ITALIC SMALL G -1D65C ; [.1D5A.0020.0005] # MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL G -1D690 ; [.1D5A.0020.0005] # MATHEMATICAL MONOSPACE SMALL G -24D6 ; [.1D5A.0020.0006] # CIRCLED LATIN SMALL LETTER G -0047 ; [.1D5A.0020.0008] # LATIN CAPITAL LETTER G -FF27 ; [.1D5A.0020.0009] # FULLWIDTH LATIN CAPITAL LETTER G -1F116 ; [*0318.0020.0004][.1D5A.0020.000A][*0319.0020.0004] # PARENTHESIZED LATIN CAPITAL LETTER G -1D406 ; [.1D5A.0020.000B] # MATHEMATICAL BOLD CAPITAL G -1D43A ; [.1D5A.0020.000B] # MATHEMATICAL ITALIC CAPITAL G -1D46E ; [.1D5A.0020.000B] # MATHEMATICAL BOLD ITALIC CAPITAL G -1D4A2 ; [.1D5A.0020.000B] # MATHEMATICAL SCRIPT CAPITAL G -1D4D6 ; [.1D5A.0020.000B] # MATHEMATICAL BOLD SCRIPT CAPITAL G -1D50A ; [.1D5A.0020.000B] # MATHEMATICAL FRAKTUR CAPITAL G -1D53E ; [.1D5A.0020.000B] # MATHEMATICAL DOUBLE-STRUCK CAPITAL G -1D572 ; [.1D5A.0020.000B] # MATHEMATICAL BOLD FRAKTUR CAPITAL G -1D5A6 ; [.1D5A.0020.000B] # MATHEMATICAL SANS-SERIF CAPITAL G -1D5DA ; [.1D5A.0020.000B] # MATHEMATICAL SANS-SERIF BOLD CAPITAL G -1D60E ; [.1D5A.0020.000B] # MATHEMATICAL SANS-SERIF ITALIC CAPITAL G -1D642 ; [.1D5A.0020.000B] # MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL G -1D676 ; [.1D5A.0020.000B] # MATHEMATICAL MONOSPACE CAPITAL G -24BC ; [.1D5A.0020.000C] # CIRCLED LATIN CAPITAL LETTER G -1F156 ; [.1D5A.0020.000C] # NEGATIVE CIRCLED LATIN CAPITAL LETTER G -1D4D ; [.1D5A.0020.0014] # MODIFIER LETTER SMALL G -1D33 ; [.1D5A.0020.001D] # MODIFIER LETTER CAPITAL G -1F136 ; [.1D5A.0020.001D] # SQUARED LATIN CAPITAL LETTER G -1F176 ; [.1D5A.0020.001D] # NEGATIVE SQUARED LATIN CAPITAL LETTER G -01F5 ; [.1D5A.0020.0002][.0000.0024.0002] # LATIN SMALL LETTER G WITH ACUTE -01F4 ; [.1D5A.0020.0008][.0000.0024.0002] # LATIN CAPITAL LETTER G WITH ACUTE -011F ; [.1D5A.0020.0002][.0000.0026.0002] # LATIN SMALL LETTER G WITH BREVE -011E ; [.1D5A.0020.0008][.0000.0026.0002] # LATIN CAPITAL LETTER G WITH BREVE -011D ; [.1D5A.0020.0002][.0000.0027.0002] # LATIN SMALL LETTER G WITH CIRCUMFLEX -011C ; [.1D5A.0020.0008][.0000.0027.0002] # LATIN CAPITAL LETTER G WITH CIRCUMFLEX -01E7 ; [.1D5A.0020.0002][.0000.0028.0002] # LATIN SMALL LETTER G WITH CARON -01E6 ; [.1D5A.0020.0008][.0000.0028.0002] # LATIN CAPITAL LETTER G WITH CARON -0121 ; [.1D5A.0020.0002][.0000.002E.0002] # LATIN SMALL LETTER G WITH DOT ABOVE -0120 ; [.1D5A.0020.0008][.0000.002E.0002] # LATIN CAPITAL LETTER G WITH DOT ABOVE -0123 ; [.1D5A.0020.0002][.0000.0030.0002] # LATIN SMALL LETTER G WITH CEDILLA -0122 ; [.1D5A.0020.0008][.0000.0030.0002] # LATIN CAPITAL LETTER G WITH CEDILLA -1E21 ; [.1D5A.0020.0002][.0000.0032.0002] # LATIN SMALL LETTER G WITH MACRON -1E20 ; [.1D5A.0020.0008][.0000.0032.0002] # LATIN CAPITAL LETTER G WITH MACRON -A7A1 ; [.1D5A.0020.0004][.0000.0035.0004] # LATIN SMALL LETTER G WITH OBLIQUE STROKE -A7A0 ; [.1D5A.0020.000A][.0000.0035.0004] # LATIN CAPITAL LETTER G WITH OBLIQUE STROKE -1D79 ; [.1D5A.0020.0004][.0000.0112.0004] # LATIN SMALL LETTER INSULAR G -A77D ; [.1D5A.0020.000A][.0000.0112.0004] # LATIN CAPITAL LETTER INSULAR G -33FF ; [.1D5A.0020.001C][.1CAD.0020.001C][.1DDD.0020.001C] # SQUARE GAL -3387 ; [.1D5A.0020.001D][.1CC6.0020.001D] # SQUARE GB -3393 ; [.1D5A.0020.001D][.1D7E.0020.001D][.1F87.0020.001C] # SQUARE GHZ -33AC ; [.1D5A.0020.001D][.1E72.0020.001D][.1CAD.0020.001C] # SQUARE GPA -33C9 ; [.1D5A.0020.001D][.1F71.0020.001C] # SQUARE GY -0261 ; [.1D5E.0020.0002] # LATIN SMALL LETTER SCRIPT G -A7AC ; [.1D5E.0020.0008] # LATIN CAPITAL LETTER SCRIPT G -1DA2 ; [.1D5E.0020.0014] # MODIFIER LETTER SMALL SCRIPT G -AB36 ; [.1D62.0020.0002] # LATIN SMALL LETTER SCRIPT G WITH CROSSED-TAIL -0262 ; [.1D63.0020.0002] # LATIN LETTER SMALL CAPITAL G -1DDB ; [.1D63.0020.0004] # COMBINING LATIN LETTER SMALL CAPITAL G -01E5 ; [.1D67.0020.0002] # LATIN SMALL LETTER G WITH STROKE -01E4 ; [.1D67.0020.0008] # LATIN CAPITAL LETTER G WITH STROKE -1D83 ; [.1D6B.0020.0002] # LATIN SMALL LETTER G WITH PALATAL HOOK -0260 ; [.1D6C.0020.0002] # LATIN SMALL LETTER G WITH HOOK -0193 ; [.1D6C.0020.0008] # LATIN CAPITAL LETTER G WITH HOOK -029B ; [.1D70.0020.0002] # LATIN LETTER SMALL CAPITAL G WITH HOOK -1D77 ; [.1D74.0020.0002] # LATIN SMALL LETTER TURNED G -A77F ; [.1D75.0020.0002] # LATIN SMALL LETTER TURNED INSULAR G -A77E ; [.1D75.0020.0008] # LATIN CAPITAL LETTER TURNED INSULAR G -0263 ; [.1D76.0020.0002] # LATIN SMALL LETTER GAMMA -0194 ; [.1D76.0020.0008] # LATIN CAPITAL LETTER GAMMA -02E0 ; [.1D76.0020.0014] # MODIFIER LETTER SMALL GAMMA -01A3 ; [.1D7A.0020.0002] # LATIN SMALL LETTER OI -01A2 ; [.1D7A.0020.0008] # LATIN CAPITAL LETTER OI -0068 ; [.1D7E.0020.0002] # LATIN SMALL LETTER H -FF48 ; [.1D7E.0020.0003] # FULLWIDTH LATIN SMALL LETTER H -036A ; [.1D7E.0020.0004] # COMBINING LATIN SMALL LETTER H -24A3 ; [*0318.0020.0004][.1D7E.0020.0004][*0319.0020.0004] # PARENTHESIZED LATIN SMALL LETTER H -210E ; [.1D7E.0020.0005] # PLANCK CONSTANT -1D421 ; [.1D7E.0020.0005] # MATHEMATICAL BOLD SMALL H -1D489 ; [.1D7E.0020.0005] # MATHEMATICAL BOLD ITALIC SMALL H -1D4BD ; [.1D7E.0020.0005] # MATHEMATICAL SCRIPT SMALL H -1D4F1 ; [.1D7E.0020.0005] # MATHEMATICAL BOLD SCRIPT SMALL H -1D525 ; [.1D7E.0020.0005] # MATHEMATICAL FRAKTUR SMALL H -1D559 ; [.1D7E.0020.0005] # MATHEMATICAL DOUBLE-STRUCK SMALL H -1D58D ; [.1D7E.0020.0005] # MATHEMATICAL BOLD FRAKTUR SMALL H -1D5C1 ; [.1D7E.0020.0005] # MATHEMATICAL SANS-SERIF SMALL H -1D5F5 ; [.1D7E.0020.0005] # MATHEMATICAL SANS-SERIF BOLD SMALL H -1D629 ; [.1D7E.0020.0005] # MATHEMATICAL SANS-SERIF ITALIC SMALL H -1D65D ; [.1D7E.0020.0005] # MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL H -1D691 ; [.1D7E.0020.0005] # MATHEMATICAL MONOSPACE SMALL H -24D7 ; [.1D7E.0020.0006] # CIRCLED LATIN SMALL LETTER H -0048 ; [.1D7E.0020.0008] # LATIN CAPITAL LETTER H -FF28 ; [.1D7E.0020.0009] # FULLWIDTH LATIN CAPITAL LETTER H -1F117 ; [*0318.0020.0004][.1D7E.0020.000A][*0319.0020.0004] # PARENTHESIZED LATIN CAPITAL LETTER H -210B ; [.1D7E.0020.000B] # SCRIPT CAPITAL H -210C ; [.1D7E.0020.000B] # BLACK-LETTER CAPITAL H -210D ; [.1D7E.0020.000B] # DOUBLE-STRUCK CAPITAL H -1D407 ; [.1D7E.0020.000B] # MATHEMATICAL BOLD CAPITAL H -1D43B ; [.1D7E.0020.000B] # MATHEMATICAL ITALIC CAPITAL H -1D46F ; [.1D7E.0020.000B] # MATHEMATICAL BOLD ITALIC CAPITAL H -1D4D7 ; [.1D7E.0020.000B] # MATHEMATICAL BOLD SCRIPT CAPITAL H -1D573 ; [.1D7E.0020.000B] # MATHEMATICAL BOLD FRAKTUR CAPITAL H -1D5A7 ; [.1D7E.0020.000B] # MATHEMATICAL SANS-SERIF CAPITAL H -1D5DB ; [.1D7E.0020.000B] # MATHEMATICAL SANS-SERIF BOLD CAPITAL H -1D60F ; [.1D7E.0020.000B] # MATHEMATICAL SANS-SERIF ITALIC CAPITAL H -1D643 ; [.1D7E.0020.000B] # MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL H -1D677 ; [.1D7E.0020.000B] # MATHEMATICAL MONOSPACE CAPITAL H -24BD ; [.1D7E.0020.000C] # CIRCLED LATIN CAPITAL LETTER H -1F157 ; [.1D7E.0020.000C] # NEGATIVE CIRCLED LATIN CAPITAL LETTER H -02B0 ; [.1D7E.0020.0014] # MODIFIER LETTER SMALL H -2095 ; [.1D7E.0020.0015] # LATIN SUBSCRIPT SMALL LETTER H -1D34 ; [.1D7E.0020.001D] # MODIFIER LETTER CAPITAL H -1F137 ; [.1D7E.0020.001D] # SQUARED LATIN CAPITAL LETTER H -1F177 ; [.1D7E.0020.001D] # NEGATIVE SQUARED LATIN CAPITAL LETTER H -0125 ; [.1D7E.0020.0002][.0000.0027.0002] # LATIN SMALL LETTER H WITH CIRCUMFLEX -0124 ; [.1D7E.0020.0008][.0000.0027.0002] # LATIN CAPITAL LETTER H WITH CIRCUMFLEX -021F ; [.1D7E.0020.0002][.0000.0028.0002] # LATIN SMALL LETTER H WITH CARON -021E ; [.1D7E.0020.0008][.0000.0028.0002] # LATIN CAPITAL LETTER H WITH CARON -1E27 ; [.1D7E.0020.0002][.0000.002B.0002] # LATIN SMALL LETTER H WITH DIAERESIS -1E26 ; [.1D7E.0020.0008][.0000.002B.0002] # LATIN CAPITAL LETTER H WITH DIAERESIS -1E23 ; [.1D7E.0020.0002][.0000.002E.0002] # LATIN SMALL LETTER H WITH DOT ABOVE -1E22 ; [.1D7E.0020.0008][.0000.002E.0002] # LATIN CAPITAL LETTER H WITH DOT ABOVE -1E29 ; [.1D7E.0020.0002][.0000.0030.0002] # LATIN SMALL LETTER H WITH CEDILLA -1E28 ; [.1D7E.0020.0008][.0000.0030.0002] # LATIN CAPITAL LETTER H WITH CEDILLA -0127 ; [.1D7E.0020.0002][.0000.0039.0002] # LATIN SMALL LETTER H WITH STROKE -210F ; [.1D7E.0020.0002][.0000.0039.0002] # PLANCK CONSTANT OVER TWO PI -0126 ; [.1D7E.0020.0008][.0000.0039.0002] # LATIN CAPITAL LETTER H WITH STROKE -A7F8 ; [.1D7E.0020.0014][.0000.0039.0014] # MODIFIER LETTER CAPITAL H WITH STROKE -1E25 ; [.1D7E.0020.0002][.0000.0042.0002] # LATIN SMALL LETTER H WITH DOT BELOW -1E24 ; [.1D7E.0020.0008][.0000.0042.0002] # LATIN CAPITAL LETTER H WITH DOT BELOW -1E2B ; [.1D7E.0020.0002][.0000.0047.0002] # LATIN SMALL LETTER H WITH BREVE BELOW -1E2A ; [.1D7E.0020.0008][.0000.0047.0002] # LATIN CAPITAL LETTER H WITH BREVE BELOW -1E96 ; [.1D7E.0020.0002][.0000.0049.0002] # LATIN SMALL LETTER H WITH LINE BELOW -33CA ; [.1D7E.0020.001C][.1CAD.0020.001C] # SQUARE HA -1F1A6 ; [.1D7E.0020.001D][.1CE0.0020.001C] # SQUARED HC -1F1A7 ; [.1D7E.0020.001D][.1CF5.0020.001C][.1E99.0020.001D] # SQUARED HDR -32CC ; [.1D7E.0020.001D][.1D5A.0020.001C] # SQUARE HG -1F1A8 ; [.1D7E.0020.001D][.1D98.0020.001C][*0209.0020.001C][.1E99.0020.001D][.1D10.0020.001C][.1ED7.0020.001C] # SQUARED HI-RES -33CB ; [.1D7E.0020.001D][.1E72.0020.001D] # SQUARE HP -3371 ; [.1D7E.0020.001C][.1E72.0020.001D][.1CAD.0020.001C] # SQUARE HPA -1F14A ; [.1D7E.0020.001D][.1F49.0020.001D] # SQUARED HV -3390 ; [.1D7E.0020.001D][.1F87.0020.001C] # SQUARE HZ -029C ; [.1D82.0020.0002] # LATIN LETTER SMALL CAPITAL H -0195 ; [.1D86.0020.0002] # LATIN SMALL LETTER HV -01F6 ; [.1D86.0020.0008] # LATIN CAPITAL LETTER HWAIR -A795 ; [.1D8A.0020.0002] # LATIN SMALL LETTER H WITH PALATAL HOOK -0266 ; [.1D8B.0020.0002] # LATIN SMALL LETTER H WITH HOOK -A7AA ; [.1D8B.0020.0008] # LATIN CAPITAL LETTER H WITH HOOK -02B1 ; [.1D8B.0020.0014] # MODIFIER LETTER SMALL H WITH HOOK -2C68 ; [.1D8F.0020.0002] # LATIN SMALL LETTER H WITH DESCENDER -2C67 ; [.1D8F.0020.0008] # LATIN CAPITAL LETTER H WITH DESCENDER -2C76 ; [.1D90.0020.0002] # LATIN SMALL LETTER HALF H -2C75 ; [.1D90.0020.0008] # LATIN CAPITAL LETTER HALF H -A727 ; [.1D91.0020.0002] # LATIN SMALL LETTER HENG -A726 ; [.1D91.0020.0008] # LATIN CAPITAL LETTER HENG -AB5C ; [.1D91.0020.0014] # MODIFIER LETTER SMALL HENG -0267 ; [.1D92.0020.0002] # LATIN SMALL LETTER HENG WITH HOOK -02BB ; [.1D96.0020.0002] # MODIFIER LETTER TURNED COMMA -02BD ; [.1D97.0020.0002] # MODIFIER LETTER REVERSED COMMA -0069 ; [.1D98.0020.0002] # LATIN SMALL LETTER I -FF49 ; [.1D98.0020.0003] # FULLWIDTH LATIN SMALL LETTER I -0365 ; [.1D98.0020.0004] # COMBINING LATIN SMALL LETTER I -2170 ; [.1D98.0020.0004] # SMALL ROMAN NUMERAL ONE -24A4 ; [*0318.0020.0004][.1D98.0020.0004][*0319.0020.0004] # PARENTHESIZED LATIN SMALL LETTER I -2139 ; [.1D98.0020.0005] # INFORMATION SOURCE -2148 ; [.1D98.0020.0005] # DOUBLE-STRUCK ITALIC SMALL I -1D422 ; [.1D98.0020.0005] # MATHEMATICAL BOLD SMALL I -1D456 ; [.1D98.0020.0005] # MATHEMATICAL ITALIC SMALL I -1D48A ; [.1D98.0020.0005] # MATHEMATICAL BOLD ITALIC SMALL I -1D4BE ; [.1D98.0020.0005] # MATHEMATICAL SCRIPT SMALL I -1D4F2 ; [.1D98.0020.0005] # MATHEMATICAL BOLD SCRIPT SMALL I -1D526 ; [.1D98.0020.0005] # MATHEMATICAL FRAKTUR SMALL I -1D55A ; [.1D98.0020.0005] # MATHEMATICAL DOUBLE-STRUCK SMALL I -1D58E ; [.1D98.0020.0005] # MATHEMATICAL BOLD FRAKTUR SMALL I -1D5C2 ; [.1D98.0020.0005] # MATHEMATICAL SANS-SERIF SMALL I -1D5F6 ; [.1D98.0020.0005] # MATHEMATICAL SANS-SERIF BOLD SMALL I -1D62A ; [.1D98.0020.0005] # MATHEMATICAL SANS-SERIF ITALIC SMALL I -1D65E ; [.1D98.0020.0005] # MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL I -1D692 ; [.1D98.0020.0005] # MATHEMATICAL MONOSPACE SMALL I -24D8 ; [.1D98.0020.0006] # CIRCLED LATIN SMALL LETTER I -0049 ; [.1D98.0020.0008] # LATIN CAPITAL LETTER I -FF29 ; [.1D98.0020.0009] # FULLWIDTH LATIN CAPITAL LETTER I -2160 ; [.1D98.0020.000A] # ROMAN NUMERAL ONE -1F118 ; [*0318.0020.0004][.1D98.0020.000A][*0319.0020.0004] # PARENTHESIZED LATIN CAPITAL LETTER I -2110 ; [.1D98.0020.000B] # SCRIPT CAPITAL I -2111 ; [.1D98.0020.000B] # BLACK-LETTER CAPITAL I -1D408 ; [.1D98.0020.000B] # MATHEMATICAL BOLD CAPITAL I -1D43C ; [.1D98.0020.000B] # MATHEMATICAL ITALIC CAPITAL I -1D470 ; [.1D98.0020.000B] # MATHEMATICAL BOLD ITALIC CAPITAL I -1D4D8 ; [.1D98.0020.000B] # MATHEMATICAL BOLD SCRIPT CAPITAL I -1D540 ; [.1D98.0020.000B] # MATHEMATICAL DOUBLE-STRUCK CAPITAL I -1D574 ; [.1D98.0020.000B] # MATHEMATICAL BOLD FRAKTUR CAPITAL I -1D5A8 ; [.1D98.0020.000B] # MATHEMATICAL SANS-SERIF CAPITAL I -1D5DC ; [.1D98.0020.000B] # MATHEMATICAL SANS-SERIF BOLD CAPITAL I -1D610 ; [.1D98.0020.000B] # MATHEMATICAL SANS-SERIF ITALIC CAPITAL I -1D644 ; [.1D98.0020.000B] # MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL I -1D678 ; [.1D98.0020.000B] # MATHEMATICAL MONOSPACE CAPITAL I -24BE ; [.1D98.0020.000C] # CIRCLED LATIN CAPITAL LETTER I -1F158 ; [.1D98.0020.000C] # NEGATIVE CIRCLED LATIN CAPITAL LETTER I -2071 ; [.1D98.0020.0014] # SUPERSCRIPT LATIN SMALL LETTER I -1D62 ; [.1D98.0020.0015] # LATIN SUBSCRIPT SMALL LETTER I -1D35 ; [.1D98.0020.001D] # MODIFIER LETTER CAPITAL I -1F138 ; [.1D98.0020.001D] # SQUARED LATIN CAPITAL LETTER I -1F178 ; [.1D98.0020.001D] # NEGATIVE SQUARED LATIN CAPITAL LETTER I -00ED ; [.1D98.0020.0002][.0000.0024.0002] # LATIN SMALL LETTER I WITH ACUTE -00CD ; [.1D98.0020.0008][.0000.0024.0002] # LATIN CAPITAL LETTER I WITH ACUTE -00EC ; [.1D98.0020.0002][.0000.0025.0002] # LATIN SMALL LETTER I WITH GRAVE -00CC ; [.1D98.0020.0008][.0000.0025.0002] # LATIN CAPITAL LETTER I WITH GRAVE -012D ; [.1D98.0020.0002][.0000.0026.0002] # LATIN SMALL LETTER I WITH BREVE -012C ; [.1D98.0020.0008][.0000.0026.0002] # LATIN CAPITAL LETTER I WITH BREVE -00EE ; [.1D98.0020.0002][.0000.0027.0002] # LATIN SMALL LETTER I WITH CIRCUMFLEX -00CE ; [.1D98.0020.0008][.0000.0027.0002] # LATIN CAPITAL LETTER I WITH CIRCUMFLEX -01D0 ; [.1D98.0020.0002][.0000.0028.0002] # LATIN SMALL LETTER I WITH CARON -01CF ; [.1D98.0020.0008][.0000.0028.0002] # LATIN CAPITAL LETTER I WITH CARON -00EF ; [.1D98.0020.0002][.0000.002B.0002] # LATIN SMALL LETTER I WITH DIAERESIS -00CF ; [.1D98.0020.0008][.0000.002B.0002] # LATIN CAPITAL LETTER I WITH DIAERESIS -1E2F ; [.1D98.0020.0002][.0000.002B.0002][.0000.0024.0002] # LATIN SMALL LETTER I WITH DIAERESIS AND ACUTE -1E2E ; [.1D98.0020.0008][.0000.002B.0002][.0000.0024.0002] # LATIN CAPITAL LETTER I WITH DIAERESIS AND ACUTE -0129 ; [.1D98.0020.0002][.0000.002D.0002] # LATIN SMALL LETTER I WITH TILDE -0128 ; [.1D98.0020.0008][.0000.002D.0002] # LATIN CAPITAL LETTER I WITH TILDE -0130 ; [.1D98.0020.0008][.0000.002E.0002] # LATIN CAPITAL LETTER I WITH DOT ABOVE -012F ; [.1D98.0020.0002][.0000.0031.0002] # LATIN SMALL LETTER I WITH OGONEK -012E ; [.1D98.0020.0008][.0000.0031.0002] # LATIN CAPITAL LETTER I WITH OGONEK -012B ; [.1D98.0020.0002][.0000.0032.0002] # LATIN SMALL LETTER I WITH MACRON -012A ; [.1D98.0020.0008][.0000.0032.0002] # LATIN CAPITAL LETTER I WITH MACRON -1EC9 ; [.1D98.0020.0002][.0000.003B.0002] # LATIN SMALL LETTER I WITH HOOK ABOVE -1EC8 ; [.1D98.0020.0008][.0000.003B.0002] # LATIN CAPITAL LETTER I WITH HOOK ABOVE -0209 ; [.1D98.0020.0002][.0000.003C.0002] # LATIN SMALL LETTER I WITH DOUBLE GRAVE -0208 ; [.1D98.0020.0008][.0000.003C.0002] # LATIN CAPITAL LETTER I WITH DOUBLE GRAVE -020B ; [.1D98.0020.0002][.0000.003E.0002] # LATIN SMALL LETTER I WITH INVERTED BREVE -020A ; [.1D98.0020.0008][.0000.003E.0002] # LATIN CAPITAL LETTER I WITH INVERTED BREVE -1ECB ; [.1D98.0020.0002][.0000.0042.0002] # LATIN SMALL LETTER I WITH DOT BELOW -1ECA ; [.1D98.0020.0008][.0000.0042.0002] # LATIN CAPITAL LETTER I WITH DOT BELOW -1E2D ; [.1D98.0020.0002][.0000.0048.0002] # LATIN SMALL LETTER I WITH TILDE BELOW -1E2C ; [.1D98.0020.0008][.0000.0048.0002] # LATIN CAPITAL LETTER I WITH TILDE BELOW -1F18B ; [.1D98.0020.001D][.1CE0.0020.001D] # NEGATIVE SQUARED IC -1F194 ; [.1D98.0020.001D][.1CF5.0020.001D] # SQUARED ID -2171 ; [.1D98.0020.0004][.1D98.0020.0004] # SMALL ROMAN NUMERAL TWO -2161 ; [.1D98.0020.000A][.1D98.0020.000A] # ROMAN NUMERAL TWO -2172 ; [.1D98.0020.0004][.1D98.0020.0004][.1D98.0020.0004] # SMALL ROMAN NUMERAL THREE -2162 ; [.1D98.0020.000A][.1D98.0020.000A][.1D98.0020.000A] # ROMAN NUMERAL THREE -0133 ; [.1D98.0020.0004][.1DB2.0020.0004] # LATIN SMALL LIGATURE IJ -0132 ; [.1D98.0020.000A][.1DB2.0020.000A] # LATIN CAPITAL LIGATURE IJ -33CC ; [.1D98.0020.001C][.1E1F.0020.001C] # SQUARE IN -337A ; [.1D98.0020.001D][.1F1B.0020.001D] # SQUARE IU -2173 ; [.1D98.0020.0004][.1F49.0020.0004] # SMALL ROMAN NUMERAL FOUR -2163 ; [.1D98.0020.000A][.1F49.0020.000A] # ROMAN NUMERAL FOUR -2178 ; [.1D98.0020.0004][.1F65.0020.0004] # SMALL ROMAN NUMERAL NINE -2168 ; [.1D98.0020.000A][.1F65.0020.000A] # ROMAN NUMERAL NINE -0131 ; [.1D9C.0020.0002] # LATIN SMALL LETTER DOTLESS I -1D6A4 ; [.1D9C.0020.0005] # MATHEMATICAL ITALIC SMALL DOTLESS I -026A ; [.1DA0.0020.0002] # LATIN LETTER SMALL CAPITAL I -A7AE ; [.1DA0.0020.0008] # LATIN CAPITAL LETTER SMALL CAPITAL I -1DA6 ; [.1DA0.0020.0014] # MODIFIER LETTER SMALL CAPITAL I -A7FE ; [.1DA4.0020.0002] # LATIN EPIGRAPHIC LETTER I LONGA -A7F7 ; [.1DA5.0020.0002] # LATIN EPIGRAPHIC LETTER SIDEWAYS I -1D09 ; [.1DA6.0020.0002] # LATIN SMALL LETTER TURNED I -1D4E ; [.1DA6.0020.0014] # MODIFIER LETTER SMALL TURNED I -0268 ; [.1DA7.0020.0002] # LATIN SMALL LETTER I WITH STROKE -0197 ; [.1DA7.0020.0008] # LATIN CAPITAL LETTER I WITH STROKE -1DA4 ; [.1DA7.0020.0014] # MODIFIER LETTER SMALL I WITH STROKE -1D7B ; [.1DAB.0020.0002] # LATIN SMALL CAPITAL LETTER I WITH STROKE -1DA7 ; [.1DAB.0020.0014] # MODIFIER LETTER SMALL CAPITAL I WITH STROKE -1D96 ; [.1DAC.0020.0002] # LATIN SMALL LETTER I WITH RETROFLEX HOOK -0269 ; [.1DAD.0020.0002] # LATIN SMALL LETTER IOTA -0196 ; [.1DAD.0020.0008] # LATIN CAPITAL LETTER IOTA -1DA5 ; [.1DAD.0020.0014] # MODIFIER LETTER SMALL IOTA -1D7C ; [.1DB1.0020.0002] # LATIN SMALL LETTER IOTA WITH STROKE -006A ; [.1DB2.0020.0002] # LATIN SMALL LETTER J -FF4A ; [.1DB2.0020.0003] # FULLWIDTH LATIN SMALL LETTER J -24A5 ; [*0318.0020.0004][.1DB2.0020.0004][*0319.0020.0004] # PARENTHESIZED LATIN SMALL LETTER J -2149 ; [.1DB2.0020.0005] # DOUBLE-STRUCK ITALIC SMALL J -1D423 ; [.1DB2.0020.0005] # MATHEMATICAL BOLD SMALL J -1D457 ; [.1DB2.0020.0005] # MATHEMATICAL ITALIC SMALL J -1D48B ; [.1DB2.0020.0005] # MATHEMATICAL BOLD ITALIC SMALL J -1D4BF ; [.1DB2.0020.0005] # MATHEMATICAL SCRIPT SMALL J -1D4F3 ; [.1DB2.0020.0005] # MATHEMATICAL BOLD SCRIPT SMALL J -1D527 ; [.1DB2.0020.0005] # MATHEMATICAL FRAKTUR SMALL J -1D55B ; [.1DB2.0020.0005] # MATHEMATICAL DOUBLE-STRUCK SMALL J -1D58F ; [.1DB2.0020.0005] # MATHEMATICAL BOLD FRAKTUR SMALL J -1D5C3 ; [.1DB2.0020.0005] # MATHEMATICAL SANS-SERIF SMALL J -1D5F7 ; [.1DB2.0020.0005] # MATHEMATICAL SANS-SERIF BOLD SMALL J -1D62B ; [.1DB2.0020.0005] # MATHEMATICAL SANS-SERIF ITALIC SMALL J -1D65F ; [.1DB2.0020.0005] # MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL J -1D693 ; [.1DB2.0020.0005] # MATHEMATICAL MONOSPACE SMALL J -24D9 ; [.1DB2.0020.0006] # CIRCLED LATIN SMALL LETTER J -004A ; [.1DB2.0020.0008] # LATIN CAPITAL LETTER J -FF2A ; [.1DB2.0020.0009] # FULLWIDTH LATIN CAPITAL LETTER J -1F119 ; [*0318.0020.0004][.1DB2.0020.000A][*0319.0020.0004] # PARENTHESIZED LATIN CAPITAL LETTER J -1D409 ; [.1DB2.0020.000B] # MATHEMATICAL BOLD CAPITAL J -1D43D ; [.1DB2.0020.000B] # MATHEMATICAL ITALIC CAPITAL J -1D471 ; [.1DB2.0020.000B] # MATHEMATICAL BOLD ITALIC CAPITAL J -1D4A5 ; [.1DB2.0020.000B] # MATHEMATICAL SCRIPT CAPITAL J -1D4D9 ; [.1DB2.0020.000B] # MATHEMATICAL BOLD SCRIPT CAPITAL J -1D50D ; [.1DB2.0020.000B] # MATHEMATICAL FRAKTUR CAPITAL J -1D541 ; [.1DB2.0020.000B] # MATHEMATICAL DOUBLE-STRUCK CAPITAL J -1D575 ; [.1DB2.0020.000B] # MATHEMATICAL BOLD FRAKTUR CAPITAL J -1D5A9 ; [.1DB2.0020.000B] # MATHEMATICAL SANS-SERIF CAPITAL J -1D5DD ; [.1DB2.0020.000B] # MATHEMATICAL SANS-SERIF BOLD CAPITAL J -1D611 ; [.1DB2.0020.000B] # MATHEMATICAL SANS-SERIF ITALIC CAPITAL J -1D645 ; [.1DB2.0020.000B] # MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL J -1D679 ; [.1DB2.0020.000B] # MATHEMATICAL MONOSPACE CAPITAL J -24BF ; [.1DB2.0020.000C] # CIRCLED LATIN CAPITAL LETTER J -1F159 ; [.1DB2.0020.000C] # NEGATIVE CIRCLED LATIN CAPITAL LETTER J -02B2 ; [.1DB2.0020.0014] # MODIFIER LETTER SMALL J -2C7C ; [.1DB2.0020.0015] # LATIN SUBSCRIPT SMALL LETTER J -1D36 ; [.1DB2.0020.001D] # MODIFIER LETTER CAPITAL J -1F139 ; [.1DB2.0020.001D] # SQUARED LATIN CAPITAL LETTER J -1F179 ; [.1DB2.0020.001D] # NEGATIVE SQUARED LATIN CAPITAL LETTER J -0135 ; [.1DB2.0020.0002][.0000.0027.0002] # LATIN SMALL LETTER J WITH CIRCUMFLEX -0134 ; [.1DB2.0020.0008][.0000.0027.0002] # LATIN CAPITAL LETTER J WITH CIRCUMFLEX -01F0 ; [.1DB2.0020.0002][.0000.0028.0002] # LATIN SMALL LETTER J WITH CARON -0237 ; [.1DB6.0020.0002] # LATIN SMALL LETTER DOTLESS J -1D6A5 ; [.1DB6.0020.0005] # MATHEMATICAL ITALIC SMALL DOTLESS J -1D0A ; [.1DBA.0020.0002] # LATIN LETTER SMALL CAPITAL J -0249 ; [.1DBB.0020.0002] # LATIN SMALL LETTER J WITH STROKE -0248 ; [.1DBB.0020.0008] # LATIN CAPITAL LETTER J WITH STROKE -029D ; [.1DBF.0020.0002] # LATIN SMALL LETTER J WITH CROSSED-TAIL -A7B2 ; [.1DBF.0020.0008] # LATIN CAPITAL LETTER J WITH CROSSED-TAIL -1DA8 ; [.1DBF.0020.0014] # MODIFIER LETTER SMALL J WITH CROSSED-TAIL -025F ; [.1DC3.0020.0002] # LATIN SMALL LETTER DOTLESS J WITH STROKE -1DA1 ; [.1DC3.0020.0014] # MODIFIER LETTER SMALL DOTLESS J WITH STROKE -0284 ; [.1DC7.0020.0002] # LATIN SMALL LETTER DOTLESS J WITH STROKE AND HOOK -006B ; [.1DCB.0020.0002] # LATIN SMALL LETTER K -FF4B ; [.1DCB.0020.0003] # FULLWIDTH LATIN SMALL LETTER K -1DDC ; [.1DCB.0020.0004] # COMBINING LATIN SMALL LETTER K -24A6 ; [*0318.0020.0004][.1DCB.0020.0004][*0319.0020.0004] # PARENTHESIZED LATIN SMALL LETTER K -1D424 ; [.1DCB.0020.0005] # MATHEMATICAL BOLD SMALL K -1D458 ; [.1DCB.0020.0005] # MATHEMATICAL ITALIC SMALL K -1D48C ; [.1DCB.0020.0005] # MATHEMATICAL BOLD ITALIC SMALL K -1D4C0 ; [.1DCB.0020.0005] # MATHEMATICAL SCRIPT SMALL K -1D4F4 ; [.1DCB.0020.0005] # MATHEMATICAL BOLD SCRIPT SMALL K -1D528 ; [.1DCB.0020.0005] # MATHEMATICAL FRAKTUR SMALL K -1D55C ; [.1DCB.0020.0005] # MATHEMATICAL DOUBLE-STRUCK SMALL K -1D590 ; [.1DCB.0020.0005] # MATHEMATICAL BOLD FRAKTUR SMALL K -1D5C4 ; [.1DCB.0020.0005] # MATHEMATICAL SANS-SERIF SMALL K -1D5F8 ; [.1DCB.0020.0005] # MATHEMATICAL SANS-SERIF BOLD SMALL K -1D62C ; [.1DCB.0020.0005] # MATHEMATICAL SANS-SERIF ITALIC SMALL K -1D660 ; [.1DCB.0020.0005] # MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL K -1D694 ; [.1DCB.0020.0005] # MATHEMATICAL MONOSPACE SMALL K -24DA ; [.1DCB.0020.0006] # CIRCLED LATIN SMALL LETTER K -004B ; [.1DCB.0020.0008] # LATIN CAPITAL LETTER K -212A ; [.1DCB.0020.0008] # KELVIN SIGN -FF2B ; [.1DCB.0020.0009] # FULLWIDTH LATIN CAPITAL LETTER K -1F11A ; [*0318.0020.0004][.1DCB.0020.000A][*0319.0020.0004] # PARENTHESIZED LATIN CAPITAL LETTER K -1D40A ; [.1DCB.0020.000B] # MATHEMATICAL BOLD CAPITAL K -1D43E ; [.1DCB.0020.000B] # MATHEMATICAL ITALIC CAPITAL K -1D472 ; [.1DCB.0020.000B] # MATHEMATICAL BOLD ITALIC CAPITAL K -1D4A6 ; [.1DCB.0020.000B] # MATHEMATICAL SCRIPT CAPITAL K -1D4DA ; [.1DCB.0020.000B] # MATHEMATICAL BOLD SCRIPT CAPITAL K -1D50E ; [.1DCB.0020.000B] # MATHEMATICAL FRAKTUR CAPITAL K -1D542 ; [.1DCB.0020.000B] # MATHEMATICAL DOUBLE-STRUCK CAPITAL K -1D576 ; [.1DCB.0020.000B] # MATHEMATICAL BOLD FRAKTUR CAPITAL K -1D5AA ; [.1DCB.0020.000B] # MATHEMATICAL SANS-SERIF CAPITAL K -1D5DE ; [.1DCB.0020.000B] # MATHEMATICAL SANS-SERIF BOLD CAPITAL K -1D612 ; [.1DCB.0020.000B] # MATHEMATICAL SANS-SERIF ITALIC CAPITAL K -1D646 ; [.1DCB.0020.000B] # MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL K -1D67A ; [.1DCB.0020.000B] # MATHEMATICAL MONOSPACE CAPITAL K -24C0 ; [.1DCB.0020.000C] # CIRCLED LATIN CAPITAL LETTER K -1F15A ; [.1DCB.0020.000C] # NEGATIVE CIRCLED LATIN CAPITAL LETTER K -1D4F ; [.1DCB.0020.0014] # MODIFIER LETTER SMALL K -2096 ; [.1DCB.0020.0015] # LATIN SUBSCRIPT SMALL LETTER K -1D37 ; [.1DCB.0020.001D] # MODIFIER LETTER CAPITAL K -1F13A ; [.1DCB.0020.001D] # SQUARED LATIN CAPITAL LETTER K -1F17A ; [.1DCB.0020.001D] # NEGATIVE SQUARED LATIN CAPITAL LETTER K -1E31 ; [.1DCB.0020.0002][.0000.0024.0002] # LATIN SMALL LETTER K WITH ACUTE -1E30 ; [.1DCB.0020.0008][.0000.0024.0002] # LATIN CAPITAL LETTER K WITH ACUTE -01E9 ; [.1DCB.0020.0002][.0000.0028.0002] # LATIN SMALL LETTER K WITH CARON -01E8 ; [.1DCB.0020.0008][.0000.0028.0002] # LATIN CAPITAL LETTER K WITH CARON -0137 ; [.1DCB.0020.0002][.0000.0030.0002] # LATIN SMALL LETTER K WITH CEDILLA -0136 ; [.1DCB.0020.0008][.0000.0030.0002] # LATIN CAPITAL LETTER K WITH CEDILLA -A7A3 ; [.1DCB.0020.0004][.0000.0035.0004] # LATIN SMALL LETTER K WITH OBLIQUE STROKE -A7A2 ; [.1DCB.0020.000A][.0000.0035.0004] # LATIN CAPITAL LETTER K WITH OBLIQUE STROKE -1E33 ; [.1DCB.0020.0002][.0000.0042.0002] # LATIN SMALL LETTER K WITH DOT BELOW -1E32 ; [.1DCB.0020.0008][.0000.0042.0002] # LATIN CAPITAL LETTER K WITH DOT BELOW -1E35 ; [.1DCB.0020.0002][.0000.0049.0002] # LATIN SMALL LETTER K WITH LINE BELOW -1E34 ; [.1DCB.0020.0008][.0000.0049.0002] # LATIN CAPITAL LETTER K WITH LINE BELOW -3384 ; [.1DCB.0020.001C][.1CAD.0020.001D] # SQUARE KA -3385 ; [.1DCB.0020.001D][.1CC6.0020.001D] # SQUARE KB -3389 ; [.1DCB.0020.001C][.1CE0.0020.001C][.1CAD.0020.001C][.1DDD.0020.001C] # SQUARE KCAL -338F ; [.1DCB.0020.001C][.1D5A.0020.001C] # SQUARE KG -3391 ; [.1DCB.0020.001C][.1D7E.0020.001D][.1F87.0020.001C] # SQUARE KHZ -33CD ; [.1DCB.0020.001D][.1DCB.0020.001D] # SQUARE KK -3398 ; [.1DCB.0020.001C][.1DDD.0020.001C] # SQUARE KL -339E ; [.1DCB.0020.001C][.1E10.0020.001C] # SQUARE KM -33CE ; [.1DCB.0020.001D][.1E10.0020.001D] # SQUARE KM CAPITAL -33A2 ; [.1DCB.0020.001C][.1E10.0020.001C][.1CA5.0020.001C] # SQUARE KM SQUARED -33A6 ; [.1DCB.0020.001C][.1E10.0020.001C][.1CA6.0020.001C] # SQUARE KM CUBED -33AA ; [.1DCB.0020.001C][.1E72.0020.001D][.1CAD.0020.001C] # SQUARE KPA -33CF ; [.1DCB.0020.001C][.1EFB.0020.001C] # SQUARE KT -33B8 ; [.1DCB.0020.001C][.1F49.0020.001D] # SQUARE KV -33BE ; [.1DCB.0020.001C][.1F5B.0020.001D] # SQUARE KW -33C0 ; [.1DCB.0020.001C][.2047.0020.001D] # SQUARE K OHM -1D0B ; [.1DCF.0020.0002] # LATIN LETTER SMALL CAPITAL K -1D84 ; [.1DD0.0020.0002] # LATIN SMALL LETTER K WITH PALATAL HOOK -0199 ; [.1DD1.0020.0002] # LATIN SMALL LETTER K WITH HOOK -0198 ; [.1DD1.0020.0008] # LATIN CAPITAL LETTER K WITH HOOK -2C6A ; [.1DD5.0020.0002] # LATIN SMALL LETTER K WITH DESCENDER -2C69 ; [.1DD5.0020.0008] # LATIN CAPITAL LETTER K WITH DESCENDER -A741 ; [.1DD6.0020.0002] # LATIN SMALL LETTER K WITH STROKE -A740 ; [.1DD6.0020.0008] # LATIN CAPITAL LETTER K WITH STROKE -A743 ; [.1DD7.0020.0002] # LATIN SMALL LETTER K WITH DIAGONAL STROKE -A742 ; [.1DD7.0020.0008] # LATIN CAPITAL LETTER K WITH DIAGONAL STROKE -A745 ; [.1DD8.0020.0002] # LATIN SMALL LETTER K WITH STROKE AND DIAGONAL STROKE -A744 ; [.1DD8.0020.0008] # LATIN CAPITAL LETTER K WITH STROKE AND DIAGONAL STROKE -029E ; [.1DD9.0020.0002] # LATIN SMALL LETTER TURNED K -A7B0 ; [.1DD9.0020.0008] # LATIN CAPITAL LETTER TURNED K -006C ; [.1DDD.0020.0002] # LATIN SMALL LETTER L -FF4C ; [.1DDD.0020.0003] # FULLWIDTH LATIN SMALL LETTER L -1DDD ; [.1DDD.0020.0004] # COMBINING LATIN SMALL LETTER L -217C ; [.1DDD.0020.0004] # SMALL ROMAN NUMERAL FIFTY -24A7 ; [*0318.0020.0004][.1DDD.0020.0004][*0319.0020.0004] # PARENTHESIZED LATIN SMALL LETTER L -2113 ; [.1DDD.0020.0005] # SCRIPT SMALL L -1D425 ; [.1DDD.0020.0005] # MATHEMATICAL BOLD SMALL L -1D459 ; [.1DDD.0020.0005] # MATHEMATICAL ITALIC SMALL L -1D48D ; [.1DDD.0020.0005] # MATHEMATICAL BOLD ITALIC SMALL L -1D4C1 ; [.1DDD.0020.0005] # MATHEMATICAL SCRIPT SMALL L -1D4F5 ; [.1DDD.0020.0005] # MATHEMATICAL BOLD SCRIPT SMALL L -1D529 ; [.1DDD.0020.0005] # MATHEMATICAL FRAKTUR SMALL L -1D55D ; [.1DDD.0020.0005] # MATHEMATICAL DOUBLE-STRUCK SMALL L -1D591 ; [.1DDD.0020.0005] # MATHEMATICAL BOLD FRAKTUR SMALL L -1D5C5 ; [.1DDD.0020.0005] # MATHEMATICAL SANS-SERIF SMALL L -1D5F9 ; [.1DDD.0020.0005] # MATHEMATICAL SANS-SERIF BOLD SMALL L -1D62D ; [.1DDD.0020.0005] # MATHEMATICAL SANS-SERIF ITALIC SMALL L -1D661 ; [.1DDD.0020.0005] # MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL L -1D695 ; [.1DDD.0020.0005] # MATHEMATICAL MONOSPACE SMALL L -24DB ; [.1DDD.0020.0006] # CIRCLED LATIN SMALL LETTER L -004C ; [.1DDD.0020.0008] # LATIN CAPITAL LETTER L -FF2C ; [.1DDD.0020.0009] # FULLWIDTH LATIN CAPITAL LETTER L -216C ; [.1DDD.0020.000A] # ROMAN NUMERAL FIFTY -1F11B ; [*0318.0020.0004][.1DDD.0020.000A][*0319.0020.0004] # PARENTHESIZED LATIN CAPITAL LETTER L -2112 ; [.1DDD.0020.000B] # SCRIPT CAPITAL L -1D40B ; [.1DDD.0020.000B] # MATHEMATICAL BOLD CAPITAL L -1D43F ; [.1DDD.0020.000B] # MATHEMATICAL ITALIC CAPITAL L -1D473 ; [.1DDD.0020.000B] # MATHEMATICAL BOLD ITALIC CAPITAL L -1D4DB ; [.1DDD.0020.000B] # MATHEMATICAL BOLD SCRIPT CAPITAL L -1D50F ; [.1DDD.0020.000B] # MATHEMATICAL FRAKTUR CAPITAL L -1D543 ; [.1DDD.0020.000B] # MATHEMATICAL DOUBLE-STRUCK CAPITAL L -1D577 ; [.1DDD.0020.000B] # MATHEMATICAL BOLD FRAKTUR CAPITAL L -1D5AB ; [.1DDD.0020.000B] # MATHEMATICAL SANS-SERIF CAPITAL L -1D5DF ; [.1DDD.0020.000B] # MATHEMATICAL SANS-SERIF BOLD CAPITAL L -1D613 ; [.1DDD.0020.000B] # MATHEMATICAL SANS-SERIF ITALIC CAPITAL L -1D647 ; [.1DDD.0020.000B] # MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL L -1D67B ; [.1DDD.0020.000B] # MATHEMATICAL MONOSPACE CAPITAL L -24C1 ; [.1DDD.0020.000C] # CIRCLED LATIN CAPITAL LETTER L -1F15B ; [.1DDD.0020.000C] # NEGATIVE CIRCLED LATIN CAPITAL LETTER L -02E1 ; [.1DDD.0020.0014] # MODIFIER LETTER SMALL L -2097 ; [.1DDD.0020.0015] # LATIN SUBSCRIPT SMALL LETTER L -1D38 ; [.1DDD.0020.001D] # MODIFIER LETTER CAPITAL L -1F13B ; [.1DDD.0020.001D] # SQUARED LATIN CAPITAL LETTER L -1F17B ; [.1DDD.0020.001D] # NEGATIVE SQUARED LATIN CAPITAL LETTER L -013A ; [.1DDD.0020.0002][.0000.0024.0002] # LATIN SMALL LETTER L WITH ACUTE -0139 ; [.1DDD.0020.0008][.0000.0024.0002] # LATIN CAPITAL LETTER L WITH ACUTE -013E ; [.1DDD.0020.0002][.0000.0028.0002] # LATIN SMALL LETTER L WITH CARON -013D ; [.1DDD.0020.0008][.0000.0028.0002] # LATIN CAPITAL LETTER L WITH CARON -013C ; [.1DDD.0020.0002][.0000.0030.0002] # LATIN SMALL LETTER L WITH CEDILLA -013B ; [.1DDD.0020.0008][.0000.0030.0002] # LATIN CAPITAL LETTER L WITH CEDILLA -0142 ; [.1DDD.0020.0002][.0000.0039.0002] # LATIN SMALL LETTER L WITH STROKE -0141 ; [.1DDD.0020.0008][.0000.0039.0002] # LATIN CAPITAL LETTER L WITH STROKE -1E37 ; [.1DDD.0020.0002][.0000.0042.0002] # LATIN SMALL LETTER L WITH DOT BELOW -1E36 ; [.1DDD.0020.0008][.0000.0042.0002] # LATIN CAPITAL LETTER L WITH DOT BELOW -1E39 ; [.1DDD.0020.0002][.0000.0042.0002][.0000.0032.0002] # LATIN SMALL LETTER L WITH DOT BELOW AND MACRON -1E38 ; [.1DDD.0020.0008][.0000.0042.0002][.0000.0032.0002] # LATIN CAPITAL LETTER L WITH DOT BELOW AND MACRON -1E3D ; [.1DDD.0020.0002][.0000.0046.0002] # LATIN SMALL LETTER L WITH CIRCUMFLEX BELOW -1E3C ; [.1DDD.0020.0008][.0000.0046.0002] # LATIN CAPITAL LETTER L WITH CIRCUMFLEX BELOW -1E3B ; [.1DDD.0020.0002][.0000.0049.0002] # LATIN SMALL LETTER L WITH LINE BELOW -1E3A ; [.1DDD.0020.0008][.0000.0049.0002] # LATIN CAPITAL LETTER L WITH LINE BELOW -0140 ; [.1DDD.0020.0002][.0000.0111.0002] # LATIN SMALL LETTER L WITH MIDDLE DOT -006C 00B7 ; [.1DDD.0020.0002][.0000.0111.0002] # LATIN SMALL LETTER L WITH MIDDLE DOT -006C 0387 ; [.1DDD.0020.0002][.0000.0111.0002] # LATIN SMALL LETTER L WITH MIDDLE DOT -013F ; [.1DDD.0020.0008][.0000.0111.0002] # LATIN CAPITAL LETTER L WITH MIDDLE DOT -004C 00B7 ; [.1DDD.0020.0008][.0000.0111.0002] # LATIN CAPITAL LETTER L WITH MIDDLE DOT -004C 0387 ; [.1DDD.0020.0008][.0000.0111.0002] # LATIN CAPITAL LETTER L WITH MIDDLE DOT -01C9 ; [.1DDD.0020.0004][.1DB2.0020.0004] # LATIN SMALL LETTER LJ -01C8 ; [.1DDD.0020.000A][.1DB2.0020.0004] # LATIN CAPITAL LETTER L WITH SMALL LETTER J -01C7 ; [.1DDD.0020.000A][.1DB2.0020.000A] # LATIN CAPITAL LETTER LJ -1EFB ; [.1DDD.0020.0004][.1DDD.0020.0004] # LATIN SMALL LETTER MIDDLE-WELSH LL -1EFA ; [.1DDD.0020.000A][.1DDD.0020.000A] # LATIN CAPITAL LETTER MIDDLE-WELSH LL -33D0 ; [.1DDD.0020.001C][.1E10.0020.001C] # SQUARE LM -33D1 ; [.1DDD.0020.001C][.1E1F.0020.001C] # SQUARE LN -33D2 ; [.1DDD.0020.001C][.1E43.0020.001C][.1D5A.0020.001C] # SQUARE LOG -1F1A9 ; [.1DDD.0020.001D][.1E43.0020.001C][.1ED7.0020.001C][.1ED7.0020.001C][.1DDD.0020.001C][.1D10.0020.001C][.1ED7.0020.001C][.1ED7.0020.001C] # SQUARED LOSSLESS -02AA ; [.1DDD.0020.0004][.1ED7.0020.0004] # LATIN SMALL LETTER LS DIGRAPH -32CF ; [.1DDD.0020.001D][.1EFB.0020.001D][.1CF5.0020.001D] # LIMITED LIABILITY SIGN -33D3 ; [.1DDD.0020.001C][.1F65.0020.001C] # SQUARE LX -02AB ; [.1DDD.0020.0004][.1F87.0020.0004] # LATIN SMALL LETTER LZ DIGRAPH -029F ; [.1DE1.0020.0002] # LATIN LETTER SMALL CAPITAL L -1DDE ; [.1DE1.0020.0004] # COMBINING LATIN LETTER SMALL CAPITAL L -1DAB ; [.1DE1.0020.0014] # MODIFIER LETTER SMALL CAPITAL L -A747 ; [.1DE5.0020.0002] # LATIN SMALL LETTER BROKEN L -A746 ; [.1DE5.0020.0008] # LATIN CAPITAL LETTER BROKEN L -1D0C ; [.1DE6.0020.0002] # LATIN LETTER SMALL CAPITAL L WITH STROKE -A749 ; [.1DE7.0020.0002] # LATIN SMALL LETTER L WITH HIGH STROKE -A748 ; [.1DE7.0020.0008] # LATIN CAPITAL LETTER L WITH HIGH STROKE -019A ; [.1DE8.0020.0002] # LATIN SMALL LETTER L WITH BAR -023D ; [.1DE8.0020.0008] # LATIN CAPITAL LETTER L WITH BAR -2C61 ; [.1DEC.0020.0002] # LATIN SMALL LETTER L WITH DOUBLE BAR -2C60 ; [.1DEC.0020.0008] # LATIN CAPITAL LETTER L WITH DOUBLE BAR -026B ; [.1DED.0020.0002] # LATIN SMALL LETTER L WITH MIDDLE TILDE -2C62 ; [.1DED.0020.0008] # LATIN CAPITAL LETTER L WITH MIDDLE TILDE -AB5E ; [.1DED.0020.0014] # MODIFIER LETTER SMALL L WITH MIDDLE TILDE -AB38 ; [.1DF1.0020.0002] # LATIN SMALL LETTER L WITH DOUBLE MIDDLE TILDE -1DEC ; [.1DF1.0020.0004] # COMBINING LATIN SMALL LETTER L WITH DOUBLE MIDDLE TILDE -AB39 ; [.1DF2.0020.0002] # LATIN SMALL LETTER L WITH MIDDLE RING -026C ; [.1DF3.0020.0002] # LATIN SMALL LETTER L WITH BELT -A7AD ; [.1DF3.0020.0008] # LATIN CAPITAL LETTER L WITH BELT -AB37 ; [.1DF7.0020.0002] # LATIN SMALL LETTER L WITH INVERTED LAZY S -AB5D ; [.1DF7.0020.0014] # MODIFIER LETTER SMALL L WITH INVERTED LAZY S -1D85 ; [.1DF8.0020.0002] # LATIN SMALL LETTER L WITH PALATAL HOOK -1DAA ; [.1DF8.0020.0014] # MODIFIER LETTER SMALL L WITH PALATAL HOOK -026D ; [.1DF9.0020.0002] # LATIN SMALL LETTER L WITH RETROFLEX HOOK -1DA9 ; [.1DF9.0020.0014] # MODIFIER LETTER SMALL L WITH RETROFLEX HOOK -A78E ; [.1DFD.0020.0002] # LATIN SMALL LETTER L WITH RETROFLEX HOOK AND BELT -0234 ; [.1DFE.0020.0002] # LATIN SMALL LETTER L WITH CURL -A772 ; [.1E02.0020.0002] # LATIN SMALL LETTER LUM -026E ; [.1E03.0020.0002] # LATIN SMALL LETTER LEZH -A781 ; [.1E07.0020.0002] # LATIN SMALL LETTER TURNED L -A780 ; [.1E07.0020.0008] # LATIN CAPITAL LETTER TURNED L -019B ; [.1E08.0020.0002] # LATIN SMALL LETTER LAMBDA WITH STROKE -028E ; [.1E0C.0020.0002] # LATIN SMALL LETTER TURNED Y -006D ; [.1E10.0020.0002] # LATIN SMALL LETTER M -FF4D ; [.1E10.0020.0003] # FULLWIDTH LATIN SMALL LETTER M -036B ; [.1E10.0020.0004] # COMBINING LATIN SMALL LETTER M -217F ; [.1E10.0020.0004] # SMALL ROMAN NUMERAL ONE THOUSAND -24A8 ; [*0318.0020.0004][.1E10.0020.0004][*0319.0020.0004] # PARENTHESIZED LATIN SMALL LETTER M -1D426 ; [.1E10.0020.0005] # MATHEMATICAL BOLD SMALL M -1D45A ; [.1E10.0020.0005] # MATHEMATICAL ITALIC SMALL M -1D48E ; [.1E10.0020.0005] # MATHEMATICAL BOLD ITALIC SMALL M -1D4C2 ; [.1E10.0020.0005] # MATHEMATICAL SCRIPT SMALL M -1D4F6 ; [.1E10.0020.0005] # MATHEMATICAL BOLD SCRIPT SMALL M -1D52A ; [.1E10.0020.0005] # MATHEMATICAL FRAKTUR SMALL M -1D55E ; [.1E10.0020.0005] # MATHEMATICAL DOUBLE-STRUCK SMALL M -1D592 ; [.1E10.0020.0005] # MATHEMATICAL BOLD FRAKTUR SMALL M -1D5C6 ; [.1E10.0020.0005] # MATHEMATICAL SANS-SERIF SMALL M -1D5FA ; [.1E10.0020.0005] # MATHEMATICAL SANS-SERIF BOLD SMALL M -1D62E ; [.1E10.0020.0005] # MATHEMATICAL SANS-SERIF ITALIC SMALL M -1D662 ; [.1E10.0020.0005] # MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL M -1D696 ; [.1E10.0020.0005] # MATHEMATICAL MONOSPACE SMALL M -24DC ; [.1E10.0020.0006] # CIRCLED LATIN SMALL LETTER M -004D ; [.1E10.0020.0008] # LATIN CAPITAL LETTER M -FF2D ; [.1E10.0020.0009] # FULLWIDTH LATIN CAPITAL LETTER M -216F ; [.1E10.0020.000A] # ROMAN NUMERAL ONE THOUSAND -1F11C ; [*0318.0020.0004][.1E10.0020.000A][*0319.0020.0004] # PARENTHESIZED LATIN CAPITAL LETTER M -2133 ; [.1E10.0020.000B] # SCRIPT CAPITAL M -1D40C ; [.1E10.0020.000B] # MATHEMATICAL BOLD CAPITAL M -1D440 ; [.1E10.0020.000B] # MATHEMATICAL ITALIC CAPITAL M -1D474 ; [.1E10.0020.000B] # MATHEMATICAL BOLD ITALIC CAPITAL M -1D4DC ; [.1E10.0020.000B] # MATHEMATICAL BOLD SCRIPT CAPITAL M -1D510 ; [.1E10.0020.000B] # MATHEMATICAL FRAKTUR CAPITAL M -1D544 ; [.1E10.0020.000B] # MATHEMATICAL DOUBLE-STRUCK CAPITAL M -1D578 ; [.1E10.0020.000B] # MATHEMATICAL BOLD FRAKTUR CAPITAL M -1D5AC ; [.1E10.0020.000B] # MATHEMATICAL SANS-SERIF CAPITAL M -1D5E0 ; [.1E10.0020.000B] # MATHEMATICAL SANS-SERIF BOLD CAPITAL M -1D614 ; [.1E10.0020.000B] # MATHEMATICAL SANS-SERIF ITALIC CAPITAL M -1D648 ; [.1E10.0020.000B] # MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL M -1D67C ; [.1E10.0020.000B] # MATHEMATICAL MONOSPACE CAPITAL M -24C2 ; [.1E10.0020.000C] # CIRCLED LATIN CAPITAL LETTER M -1F15C ; [.1E10.0020.000C] # NEGATIVE CIRCLED LATIN CAPITAL LETTER M -1D50 ; [.1E10.0020.0014] # MODIFIER LETTER SMALL M -2098 ; [.1E10.0020.0015] # LATIN SUBSCRIPT SMALL LETTER M -1D39 ; [.1E10.0020.001D] # MODIFIER LETTER CAPITAL M -1F13C ; [.1E10.0020.001D] # SQUARED LATIN CAPITAL LETTER M -1F17C ; [.1E10.0020.001D] # NEGATIVE SQUARED LATIN CAPITAL LETTER M -1E3F ; [.1E10.0020.0002][.0000.0024.0002] # LATIN SMALL LETTER M WITH ACUTE -1E3E ; [.1E10.0020.0008][.0000.0024.0002] # LATIN CAPITAL LETTER M WITH ACUTE -1E41 ; [.1E10.0020.0002][.0000.002E.0002] # LATIN SMALL LETTER M WITH DOT ABOVE -1E40 ; [.1E10.0020.0008][.0000.002E.0002] # LATIN CAPITAL LETTER M WITH DOT ABOVE -1E43 ; [.1E10.0020.0002][.0000.0042.0002] # LATIN SMALL LETTER M WITH DOT BELOW -1E42 ; [.1E10.0020.0008][.0000.0042.0002] # LATIN CAPITAL LETTER M WITH DOT BELOW -33A1 ; [.1E10.0020.001C][.1CA5.0020.001C] # SQUARE M SQUARED -33A5 ; [.1E10.0020.001C][.1CA6.0020.001C] # SQUARE M CUBED -3383 ; [.1E10.0020.001C][.1CAD.0020.001D] # SQUARE MA -33D4 ; [.1E10.0020.001C][.1CC6.0020.001C] # SQUARE MB SMALL -3386 ; [.1E10.0020.001D][.1CC6.0020.001D] # SQUARE MB -1F16A ; [.1E10.0020.0014][.1CE0.0020.0014] # RAISED MC SIGN -1F16B ; [.1E10.0020.0014][.1CF5.0020.0014] # RAISED MD SIGN -338E ; [.1E10.0020.001C][.1D5A.0020.001C] # SQUARE MG -3392 ; [.1E10.0020.001D][.1D7E.0020.001D][.1F87.0020.001C] # SQUARE MHZ -33D5 ; [.1E10.0020.001C][.1D98.0020.001C][.1DDD.0020.001C] # SQUARE MIL -3396 ; [.1E10.0020.001C][.1DDD.0020.001C] # SQUARE ML -339C ; [.1E10.0020.001C][.1E10.0020.001C] # SQUARE MM -339F ; [.1E10.0020.001C][.1E10.0020.001C][.1CA5.0020.001C] # SQUARE MM SQUARED -33A3 ; [.1E10.0020.001C][.1E10.0020.001C][.1CA6.0020.001C] # SQUARE MM CUBED -33D6 ; [.1E10.0020.001C][.1E43.0020.001C][.1DDD.0020.001C] # SQUARE MOL -33AB ; [.1E10.0020.001D][.1E72.0020.001D][.1CAD.0020.001C] # SQUARE MPA -33A7 ; [.1E10.0020.001C][*063B.0020.001C][.1ED7.0020.001C] # SQUARE M OVER S -33B3 ; [.1E10.0020.001C][.1ED7.0020.001C] # SQUARE MS -33A8 ; [.1E10.0020.001C][*063B.0020.001C][.1ED7.0020.001C][.1CA5.0020.001C] # SQUARE M OVER S SQUARED -33B7 ; [.1E10.0020.001C][.1F49.0020.001D] # SQUARE MV -33B9 ; [.1E10.0020.001D][.1F49.0020.001D] # SQUARE MV MEGA -1F14B ; [.1E10.0020.001D][.1F49.0020.001D] # SQUARED MV -33BD ; [.1E10.0020.001C][.1F5B.0020.001D] # SQUARE MW -33BF ; [.1E10.0020.001D][.1F5B.0020.001D] # SQUARE MW MEGA -33C1 ; [.1E10.0020.001D][.2047.0020.001D] # SQUARE M OHM -1D0D ; [.1E14.0020.0002] # LATIN LETTER SMALL CAPITAL M -1DDF ; [.1E14.0020.0004] # COMBINING LATIN LETTER SMALL CAPITAL M -1D6F ; [.1E15.0020.0002] # LATIN SMALL LETTER M WITH MIDDLE TILDE -1D86 ; [.1E16.0020.0002] # LATIN SMALL LETTER M WITH PALATAL HOOK -0271 ; [.1E17.0020.0002] # LATIN SMALL LETTER M WITH HOOK -2C6E ; [.1E17.0020.0008] # LATIN CAPITAL LETTER M WITH HOOK -1DAC ; [.1E17.0020.0014] # MODIFIER LETTER SMALL M WITH HOOK -AB3A ; [.1E1B.0020.0002] # LATIN SMALL LETTER M WITH CROSSED-TAIL -A7FD ; [.1E1C.0020.0002] # LATIN EPIGRAPHIC LETTER INVERTED M -A7FF ; [.1E1D.0020.0002] # LATIN EPIGRAPHIC LETTER ARCHAIC M -A773 ; [.1E1E.0020.0002] # LATIN SMALL LETTER MUM -006E ; [.1E1F.0020.0002] # LATIN SMALL LETTER N -FF4E ; [.1E1F.0020.0003] # FULLWIDTH LATIN SMALL LETTER N -1DE0 ; [.1E1F.0020.0004] # COMBINING LATIN SMALL LETTER N -24A9 ; [*0318.0020.0004][.1E1F.0020.0004][*0319.0020.0004] # PARENTHESIZED LATIN SMALL LETTER N -1D427 ; [.1E1F.0020.0005] # MATHEMATICAL BOLD SMALL N -1D45B ; [.1E1F.0020.0005] # MATHEMATICAL ITALIC SMALL N -1D48F ; [.1E1F.0020.0005] # MATHEMATICAL BOLD ITALIC SMALL N -1D4C3 ; [.1E1F.0020.0005] # MATHEMATICAL SCRIPT SMALL N -1D4F7 ; [.1E1F.0020.0005] # MATHEMATICAL BOLD SCRIPT SMALL N -1D52B ; [.1E1F.0020.0005] # MATHEMATICAL FRAKTUR SMALL N -1D55F ; [.1E1F.0020.0005] # MATHEMATICAL DOUBLE-STRUCK SMALL N -1D593 ; [.1E1F.0020.0005] # MATHEMATICAL BOLD FRAKTUR SMALL N -1D5C7 ; [.1E1F.0020.0005] # MATHEMATICAL SANS-SERIF SMALL N -1D5FB ; [.1E1F.0020.0005] # MATHEMATICAL SANS-SERIF BOLD SMALL N -1D62F ; [.1E1F.0020.0005] # MATHEMATICAL SANS-SERIF ITALIC SMALL N -1D663 ; [.1E1F.0020.0005] # MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL N -1D697 ; [.1E1F.0020.0005] # MATHEMATICAL MONOSPACE SMALL N -24DD ; [.1E1F.0020.0006] # CIRCLED LATIN SMALL LETTER N -004E ; [.1E1F.0020.0008] # LATIN CAPITAL LETTER N -FF2E ; [.1E1F.0020.0009] # FULLWIDTH LATIN CAPITAL LETTER N -1F11D ; [*0318.0020.0004][.1E1F.0020.000A][*0319.0020.0004] # PARENTHESIZED LATIN CAPITAL LETTER N -2115 ; [.1E1F.0020.000B] # DOUBLE-STRUCK CAPITAL N -1D40D ; [.1E1F.0020.000B] # MATHEMATICAL BOLD CAPITAL N -1D441 ; [.1E1F.0020.000B] # MATHEMATICAL ITALIC CAPITAL N -1D475 ; [.1E1F.0020.000B] # MATHEMATICAL BOLD ITALIC CAPITAL N -1D4A9 ; [.1E1F.0020.000B] # MATHEMATICAL SCRIPT CAPITAL N -1D4DD ; [.1E1F.0020.000B] # MATHEMATICAL BOLD SCRIPT CAPITAL N -1D511 ; [.1E1F.0020.000B] # MATHEMATICAL FRAKTUR CAPITAL N -1D579 ; [.1E1F.0020.000B] # MATHEMATICAL BOLD FRAKTUR CAPITAL N -1D5AD ; [.1E1F.0020.000B] # MATHEMATICAL SANS-SERIF CAPITAL N -1D5E1 ; [.1E1F.0020.000B] # MATHEMATICAL SANS-SERIF BOLD CAPITAL N -1D615 ; [.1E1F.0020.000B] # MATHEMATICAL SANS-SERIF ITALIC CAPITAL N -1D649 ; [.1E1F.0020.000B] # MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL N -1D67D ; [.1E1F.0020.000B] # MATHEMATICAL MONOSPACE CAPITAL N -24C3 ; [.1E1F.0020.000C] # CIRCLED LATIN CAPITAL LETTER N -1F15D ; [.1E1F.0020.000C] # NEGATIVE CIRCLED LATIN CAPITAL LETTER N -207F ; [.1E1F.0020.0014] # SUPERSCRIPT LATIN SMALL LETTER N -2099 ; [.1E1F.0020.0015] # LATIN SUBSCRIPT SMALL LETTER N -1D3A ; [.1E1F.0020.001D] # MODIFIER LETTER CAPITAL N -1F13D ; [.1E1F.0020.001D] # SQUARED LATIN CAPITAL LETTER N -1F17D ; [.1E1F.0020.001D] # NEGATIVE SQUARED LATIN CAPITAL LETTER N -0144 ; [.1E1F.0020.0002][.0000.0024.0002] # LATIN SMALL LETTER N WITH ACUTE -0143 ; [.1E1F.0020.0008][.0000.0024.0002] # LATIN CAPITAL LETTER N WITH ACUTE -01F9 ; [.1E1F.0020.0002][.0000.0025.0002] # LATIN SMALL LETTER N WITH GRAVE -01F8 ; [.1E1F.0020.0008][.0000.0025.0002] # LATIN CAPITAL LETTER N WITH GRAVE -0148 ; [.1E1F.0020.0002][.0000.0028.0002] # LATIN SMALL LETTER N WITH CARON -0147 ; [.1E1F.0020.0008][.0000.0028.0002] # LATIN CAPITAL LETTER N WITH CARON -00F1 ; [.1E1F.0020.0002][.0000.002D.0002] # LATIN SMALL LETTER N WITH TILDE -00D1 ; [.1E1F.0020.0008][.0000.002D.0002] # LATIN CAPITAL LETTER N WITH TILDE -1E45 ; [.1E1F.0020.0002][.0000.002E.0002] # LATIN SMALL LETTER N WITH DOT ABOVE -1E44 ; [.1E1F.0020.0008][.0000.002E.0002] # LATIN CAPITAL LETTER N WITH DOT ABOVE -0146 ; [.1E1F.0020.0002][.0000.0030.0002] # LATIN SMALL LETTER N WITH CEDILLA -0145 ; [.1E1F.0020.0008][.0000.0030.0002] # LATIN CAPITAL LETTER N WITH CEDILLA -A7A5 ; [.1E1F.0020.0004][.0000.0035.0004] # LATIN SMALL LETTER N WITH OBLIQUE STROKE -A7A4 ; [.1E1F.0020.000A][.0000.0035.0004] # LATIN CAPITAL LETTER N WITH OBLIQUE STROKE -1E47 ; [.1E1F.0020.0002][.0000.0042.0002] # LATIN SMALL LETTER N WITH DOT BELOW -1E46 ; [.1E1F.0020.0008][.0000.0042.0002] # LATIN CAPITAL LETTER N WITH DOT BELOW -1E4B ; [.1E1F.0020.0002][.0000.0046.0002] # LATIN SMALL LETTER N WITH CIRCUMFLEX BELOW -1E4A ; [.1E1F.0020.0008][.0000.0046.0002] # LATIN CAPITAL LETTER N WITH CIRCUMFLEX BELOW -1E49 ; [.1E1F.0020.0002][.0000.0049.0002] # LATIN SMALL LETTER N WITH LINE BELOW -1E48 ; [.1E1F.0020.0008][.0000.0049.0002] # LATIN CAPITAL LETTER N WITH LINE BELOW -3381 ; [.1E1F.0020.001C][.1CAD.0020.001D] # SQUARE NA -1F195 ; [.1E1F.0020.001D][.1D10.0020.001D][.1F5B.0020.001D] # SQUARED NEW -338B ; [.1E1F.0020.001C][.1D4B.0020.001D] # SQUARE NF -1F196 ; [.1E1F.0020.001D][.1D5A.0020.001D] # SQUARED NG -01CC ; [.1E1F.0020.0004][.1DB2.0020.0004] # LATIN SMALL LETTER NJ -01CB ; [.1E1F.0020.000A][.1DB2.0020.0004] # LATIN CAPITAL LETTER N WITH SMALL LETTER J -01CA ; [.1E1F.0020.000A][.1DB2.0020.000A] # LATIN CAPITAL LETTER NJ -339A ; [.1E1F.0020.001C][.1E10.0020.001C] # SQUARE NM -2116 ; [.1E1F.0020.000A][.1E43.0020.0004] # NUMERO SIGN -33B1 ; [.1E1F.0020.001C][.1ED7.0020.001C] # SQUARE NS -33B5 ; [.1E1F.0020.001C][.1F49.0020.001D] # SQUARE NV -33BB ; [.1E1F.0020.001C][.1F5B.0020.001D] # SQUARE NW -0274 ; [.1E23.0020.0002] # LATIN LETTER SMALL CAPITAL N -1DE1 ; [.1E23.0020.0004] # COMBINING LATIN LETTER SMALL CAPITAL N -1DB0 ; [.1E23.0020.0014] # MODIFIER LETTER SMALL CAPITAL N -1D3B ; [.1E27.0020.0002] # MODIFIER LETTER CAPITAL REVERSED N -1D0E ; [.1E28.0020.0002] # LATIN LETTER SMALL CAPITAL REVERSED N -1D70 ; [.1E29.0020.0002] # LATIN SMALL LETTER N WITH MIDDLE TILDE -0272 ; [.1E2A.0020.0002] # LATIN SMALL LETTER N WITH LEFT HOOK -019D ; [.1E2A.0020.0008] # LATIN CAPITAL LETTER N WITH LEFT HOOK -1DAE ; [.1E2A.0020.0014] # MODIFIER LETTER SMALL N WITH LEFT HOOK -019E ; [.1E2E.0020.0002] # LATIN SMALL LETTER N WITH LONG RIGHT LEG -0220 ; [.1E2E.0020.0008] # LATIN CAPITAL LETTER N WITH LONG RIGHT LEG -A791 ; [.1E32.0020.0002] # LATIN SMALL LETTER N WITH DESCENDER -A790 ; [.1E32.0020.0008] # LATIN CAPITAL LETTER N WITH DESCENDER -1D87 ; [.1E33.0020.0002] # LATIN SMALL LETTER N WITH PALATAL HOOK -0273 ; [.1E34.0020.0002] # LATIN SMALL LETTER N WITH RETROFLEX HOOK -1DAF ; [.1E34.0020.0014] # MODIFIER LETTER SMALL N WITH RETROFLEX HOOK -0235 ; [.1E38.0020.0002] # LATIN SMALL LETTER N WITH CURL -AB3B ; [.1E3C.0020.0002] # LATIN SMALL LETTER N WITH CROSSED-TAIL -A774 ; [.1E3D.0020.0002] # LATIN SMALL LETTER NUM -014B ; [.1E3E.0020.0002] # LATIN SMALL LETTER ENG -014A ; [.1E3E.0020.0008] # LATIN CAPITAL LETTER ENG -1D51 ; [.1E3E.0020.0014] # MODIFIER LETTER SMALL ENG -AB3C ; [.1E42.0020.0002] # LATIN SMALL LETTER ENG WITH CROSSED-TAIL -006F ; [.1E43.0020.0002] # LATIN SMALL LETTER O -FF4F ; [.1E43.0020.0003] # FULLWIDTH LATIN SMALL LETTER O -0366 ; [.1E43.0020.0004] # COMBINING LATIN SMALL LETTER O -24AA ; [*0318.0020.0004][.1E43.0020.0004][*0319.0020.0004] # PARENTHESIZED LATIN SMALL LETTER O -2134 ; [.1E43.0020.0005] # SCRIPT SMALL O -1D428 ; [.1E43.0020.0005] # MATHEMATICAL BOLD SMALL O -1D45C ; [.1E43.0020.0005] # MATHEMATICAL ITALIC SMALL O -1D490 ; [.1E43.0020.0005] # MATHEMATICAL BOLD ITALIC SMALL O -1D4F8 ; [.1E43.0020.0005] # MATHEMATICAL BOLD SCRIPT SMALL O -1D52C ; [.1E43.0020.0005] # MATHEMATICAL FRAKTUR SMALL O -1D560 ; [.1E43.0020.0005] # MATHEMATICAL DOUBLE-STRUCK SMALL O -1D594 ; [.1E43.0020.0005] # MATHEMATICAL BOLD FRAKTUR SMALL O -1D5C8 ; [.1E43.0020.0005] # MATHEMATICAL SANS-SERIF SMALL O -1D5FC ; [.1E43.0020.0005] # MATHEMATICAL SANS-SERIF BOLD SMALL O -1D630 ; [.1E43.0020.0005] # MATHEMATICAL SANS-SERIF ITALIC SMALL O -1D664 ; [.1E43.0020.0005] # MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL O -1D698 ; [.1E43.0020.0005] # MATHEMATICAL MONOSPACE SMALL O -24DE ; [.1E43.0020.0006] # CIRCLED LATIN SMALL LETTER O -004F ; [.1E43.0020.0008] # LATIN CAPITAL LETTER O -FF2F ; [.1E43.0020.0009] # FULLWIDTH LATIN CAPITAL LETTER O -1F11E ; [*0318.0020.0004][.1E43.0020.000A][*0319.0020.0004] # PARENTHESIZED LATIN CAPITAL LETTER O -1D40E ; [.1E43.0020.000B] # MATHEMATICAL BOLD CAPITAL O -1D442 ; [.1E43.0020.000B] # MATHEMATICAL ITALIC CAPITAL O -1D476 ; [.1E43.0020.000B] # MATHEMATICAL BOLD ITALIC CAPITAL O -1D4AA ; [.1E43.0020.000B] # MATHEMATICAL SCRIPT CAPITAL O -1D4DE ; [.1E43.0020.000B] # MATHEMATICAL BOLD SCRIPT CAPITAL O -1D512 ; [.1E43.0020.000B] # MATHEMATICAL FRAKTUR CAPITAL O -1D546 ; [.1E43.0020.000B] # MATHEMATICAL DOUBLE-STRUCK CAPITAL O -1D57A ; [.1E43.0020.000B] # MATHEMATICAL BOLD FRAKTUR CAPITAL O -1D5AE ; [.1E43.0020.000B] # MATHEMATICAL SANS-SERIF CAPITAL O -1D5E2 ; [.1E43.0020.000B] # MATHEMATICAL SANS-SERIF BOLD CAPITAL O -1D616 ; [.1E43.0020.000B] # MATHEMATICAL SANS-SERIF ITALIC CAPITAL O -1D64A ; [.1E43.0020.000B] # MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL O -1D67E ; [.1E43.0020.000B] # MATHEMATICAL MONOSPACE CAPITAL O -24C4 ; [.1E43.0020.000C] # CIRCLED LATIN CAPITAL LETTER O -1F15E ; [.1E43.0020.000C] # NEGATIVE CIRCLED LATIN CAPITAL LETTER O -00BA ; [.1E43.0020.0014] # MASCULINE ORDINAL INDICATOR -1D52 ; [.1E43.0020.0014] # MODIFIER LETTER SMALL O -2092 ; [.1E43.0020.0015] # LATIN SUBSCRIPT SMALL LETTER O -1D3C ; [.1E43.0020.001D] # MODIFIER LETTER CAPITAL O -1F13E ; [.1E43.0020.001D] # SQUARED LATIN CAPITAL LETTER O -1F17E ; [.1E43.0020.001D] # NEGATIVE SQUARED LATIN CAPITAL LETTER O -00F3 ; [.1E43.0020.0002][.0000.0024.0002] # LATIN SMALL LETTER O WITH ACUTE -00D3 ; [.1E43.0020.0008][.0000.0024.0002] # LATIN CAPITAL LETTER O WITH ACUTE -00F2 ; [.1E43.0020.0002][.0000.0025.0002] # LATIN SMALL LETTER O WITH GRAVE -00D2 ; [.1E43.0020.0008][.0000.0025.0002] # LATIN CAPITAL LETTER O WITH GRAVE -014F ; [.1E43.0020.0002][.0000.0026.0002] # LATIN SMALL LETTER O WITH BREVE -014E ; [.1E43.0020.0008][.0000.0026.0002] # LATIN CAPITAL LETTER O WITH BREVE -00F4 ; [.1E43.0020.0002][.0000.0027.0002] # LATIN SMALL LETTER O WITH CIRCUMFLEX -00D4 ; [.1E43.0020.0008][.0000.0027.0002] # LATIN CAPITAL LETTER O WITH CIRCUMFLEX -1ED1 ; [.1E43.0020.0002][.0000.0027.0002][.0000.0024.0002] # LATIN SMALL LETTER O WITH CIRCUMFLEX AND ACUTE -1ED0 ; [.1E43.0020.0008][.0000.0027.0002][.0000.0024.0002] # LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND ACUTE -1ED3 ; [.1E43.0020.0002][.0000.0027.0002][.0000.0025.0002] # LATIN SMALL LETTER O WITH CIRCUMFLEX AND GRAVE -1ED2 ; [.1E43.0020.0008][.0000.0027.0002][.0000.0025.0002] # LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND GRAVE -1ED7 ; [.1E43.0020.0002][.0000.0027.0002][.0000.002D.0002] # LATIN SMALL LETTER O WITH CIRCUMFLEX AND TILDE -1ED6 ; [.1E43.0020.0008][.0000.0027.0002][.0000.002D.0002] # LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND TILDE -1ED5 ; [.1E43.0020.0002][.0000.0027.0002][.0000.003B.0002] # LATIN SMALL LETTER O WITH CIRCUMFLEX AND HOOK ABOVE -1ED4 ; [.1E43.0020.0008][.0000.0027.0002][.0000.003B.0002] # LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND HOOK ABOVE -01D2 ; [.1E43.0020.0002][.0000.0028.0002] # LATIN SMALL LETTER O WITH CARON -01D1 ; [.1E43.0020.0008][.0000.0028.0002] # LATIN CAPITAL LETTER O WITH CARON -00F6 ; [.1E43.0020.0002][.0000.002B.0002] # LATIN SMALL LETTER O WITH DIAERESIS -1DF3 ; [.1E43.0020.0004][.0000.002B.0004] # COMBINING LATIN SMALL LETTER O WITH DIAERESIS -A79D ; [.1E43.0020.0004][.0000.002B.0004] # LATIN SMALL LETTER VOLAPUK OE -00D6 ; [.1E43.0020.0008][.0000.002B.0002] # LATIN CAPITAL LETTER O WITH DIAERESIS -A79C ; [.1E43.0020.000A][.0000.002B.0004] # LATIN CAPITAL LETTER VOLAPUK OE -022B ; [.1E43.0020.0002][.0000.002B.0002][.0000.0032.0002] # LATIN SMALL LETTER O WITH DIAERESIS AND MACRON -022A ; [.1E43.0020.0008][.0000.002B.0002][.0000.0032.0002] # LATIN CAPITAL LETTER O WITH DIAERESIS AND MACRON -0151 ; [.1E43.0020.0002][.0000.002C.0002] # LATIN SMALL LETTER O WITH DOUBLE ACUTE -0150 ; [.1E43.0020.0008][.0000.002C.0002] # LATIN CAPITAL LETTER O WITH DOUBLE ACUTE -00F5 ; [.1E43.0020.0002][.0000.002D.0002] # LATIN SMALL LETTER O WITH TILDE -00D5 ; [.1E43.0020.0008][.0000.002D.0002] # LATIN CAPITAL LETTER O WITH TILDE -1E4D ; [.1E43.0020.0002][.0000.002D.0002][.0000.0024.0002] # LATIN SMALL LETTER O WITH TILDE AND ACUTE -1E4C ; [.1E43.0020.0008][.0000.002D.0002][.0000.0024.0002] # LATIN CAPITAL LETTER O WITH TILDE AND ACUTE -1E4F ; [.1E43.0020.0002][.0000.002D.0002][.0000.002B.0002] # LATIN SMALL LETTER O WITH TILDE AND DIAERESIS -1E4E ; [.1E43.0020.0008][.0000.002D.0002][.0000.002B.0002] # LATIN CAPITAL LETTER O WITH TILDE AND DIAERESIS -022D ; [.1E43.0020.0002][.0000.002D.0002][.0000.0032.0002] # LATIN SMALL LETTER O WITH TILDE AND MACRON -022C ; [.1E43.0020.0008][.0000.002D.0002][.0000.0032.0002] # LATIN CAPITAL LETTER O WITH TILDE AND MACRON -022F ; [.1E43.0020.0002][.0000.002E.0002] # LATIN SMALL LETTER O WITH DOT ABOVE -022E ; [.1E43.0020.0008][.0000.002E.0002] # LATIN CAPITAL LETTER O WITH DOT ABOVE -0231 ; [.1E43.0020.0002][.0000.002E.0002][.0000.0032.0002] # LATIN SMALL LETTER O WITH DOT ABOVE AND MACRON -0230 ; [.1E43.0020.0008][.0000.002E.0002][.0000.0032.0002] # LATIN CAPITAL LETTER O WITH DOT ABOVE AND MACRON -00F8 ; [.1E43.0020.0002][.0000.002F.0002] # LATIN SMALL LETTER O WITH STROKE -00D8 ; [.1E43.0020.0008][.0000.002F.0002] # LATIN CAPITAL LETTER O WITH STROKE -01FF ; [.1E43.0020.0002][.0000.002F.0002][.0000.0024.0002] # LATIN SMALL LETTER O WITH STROKE AND ACUTE -01FE ; [.1E43.0020.0008][.0000.002F.0002][.0000.0024.0002] # LATIN CAPITAL LETTER O WITH STROKE AND ACUTE -01EB ; [.1E43.0020.0002][.0000.0031.0002] # LATIN SMALL LETTER O WITH OGONEK -01EA ; [.1E43.0020.0008][.0000.0031.0002] # LATIN CAPITAL LETTER O WITH OGONEK -01ED ; [.1E43.0020.0002][.0000.0031.0002][.0000.0032.0002] # LATIN SMALL LETTER O WITH OGONEK AND MACRON -01EC ; [.1E43.0020.0008][.0000.0031.0002][.0000.0032.0002] # LATIN CAPITAL LETTER O WITH OGONEK AND MACRON -014D ; [.1E43.0020.0002][.0000.0032.0002] # LATIN SMALL LETTER O WITH MACRON -014C ; [.1E43.0020.0008][.0000.0032.0002] # LATIN CAPITAL LETTER O WITH MACRON -1E53 ; [.1E43.0020.0002][.0000.0032.0002][.0000.0024.0002] # LATIN SMALL LETTER O WITH MACRON AND ACUTE -1E52 ; [.1E43.0020.0008][.0000.0032.0002][.0000.0024.0002] # LATIN CAPITAL LETTER O WITH MACRON AND ACUTE -1E51 ; [.1E43.0020.0002][.0000.0032.0002][.0000.0025.0002] # LATIN SMALL LETTER O WITH MACRON AND GRAVE -1E50 ; [.1E43.0020.0008][.0000.0032.0002][.0000.0025.0002] # LATIN CAPITAL LETTER O WITH MACRON AND GRAVE -1DED ; [.1E43.0020.0004][.0000.0034.0004] # COMBINING LATIN SMALL LETTER O WITH LIGHT CENTRALIZATION STROKE -1ECF ; [.1E43.0020.0002][.0000.003B.0002] # LATIN SMALL LETTER O WITH HOOK ABOVE -1ECE ; [.1E43.0020.0008][.0000.003B.0002] # LATIN CAPITAL LETTER O WITH HOOK ABOVE -020D ; [.1E43.0020.0002][.0000.003C.0002] # LATIN SMALL LETTER O WITH DOUBLE GRAVE -020C ; [.1E43.0020.0008][.0000.003C.0002] # LATIN CAPITAL LETTER O WITH DOUBLE GRAVE -020F ; [.1E43.0020.0002][.0000.003E.0002] # LATIN SMALL LETTER O WITH INVERTED BREVE -020E ; [.1E43.0020.0008][.0000.003E.0002] # LATIN CAPITAL LETTER O WITH INVERTED BREVE -01A1 ; [.1E43.0020.0002][.0000.003F.0002] # LATIN SMALL LETTER O WITH HORN -01A0 ; [.1E43.0020.0008][.0000.003F.0002] # LATIN CAPITAL LETTER O WITH HORN -1EDB ; [.1E43.0020.0002][.0000.003F.0002][.0000.0024.0002] # LATIN SMALL LETTER O WITH HORN AND ACUTE -1EDA ; [.1E43.0020.0008][.0000.003F.0002][.0000.0024.0002] # LATIN CAPITAL LETTER O WITH HORN AND ACUTE -1EDD ; [.1E43.0020.0002][.0000.003F.0002][.0000.0025.0002] # LATIN SMALL LETTER O WITH HORN AND GRAVE -1EDC ; [.1E43.0020.0008][.0000.003F.0002][.0000.0025.0002] # LATIN CAPITAL LETTER O WITH HORN AND GRAVE -1EE1 ; [.1E43.0020.0002][.0000.003F.0002][.0000.002D.0002] # LATIN SMALL LETTER O WITH HORN AND TILDE -1EE0 ; [.1E43.0020.0008][.0000.003F.0002][.0000.002D.0002] # LATIN CAPITAL LETTER O WITH HORN AND TILDE -1EDF ; [.1E43.0020.0002][.0000.003F.0002][.0000.003B.0002] # LATIN SMALL LETTER O WITH HORN AND HOOK ABOVE -1EDE ; [.1E43.0020.0008][.0000.003F.0002][.0000.003B.0002] # LATIN CAPITAL LETTER O WITH HORN AND HOOK ABOVE -1EE3 ; [.1E43.0020.0002][.0000.003F.0002][.0000.0042.0002] # LATIN SMALL LETTER O WITH HORN AND DOT BELOW -1EE2 ; [.1E43.0020.0008][.0000.003F.0002][.0000.0042.0002] # LATIN CAPITAL LETTER O WITH HORN AND DOT BELOW -1ECD ; [.1E43.0020.0002][.0000.0042.0002] # LATIN SMALL LETTER O WITH DOT BELOW -1ECC ; [.1E43.0020.0008][.0000.0042.0002] # LATIN CAPITAL LETTER O WITH DOT BELOW -1ED9 ; [.1E43.0020.0002][.0000.0042.0002][.0000.0027.0002] # LATIN SMALL LETTER O WITH CIRCUMFLEX AND DOT BELOW -1ED8 ; [.1E43.0020.0008][.0000.0042.0002][.0000.0027.0002] # LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND DOT BELOW -0153 ; [.1E43.0020.0004][.0000.0111.0004][.1D10.0020.0004] # LATIN SMALL LIGATURE OE -0152 ; [.1E43.0020.000A][.0000.0111.0004][.1D10.0020.000A] # LATIN CAPITAL LIGATURE OE -A7F9 ; [.1E43.0020.0014][.0000.0111.0014][.1D10.0020.0014] # MODIFIER LETTER SMALL LIGATURE OE -1F197 ; [.1E43.0020.001D][.1DCB.0020.001D] # SQUARED OK -A74F ; [.1E43.0020.0004][.1E43.0020.0004] # LATIN SMALL LETTER OO -A74E ; [.1E43.0020.000A][.1E43.0020.000A] # LATIN CAPITAL LETTER OO -3375 ; [.1E43.0020.001C][.1F49.0020.001D] # SQUARE OV -1D0F ; [.1E47.0020.0002] # LATIN LETTER SMALL CAPITAL O -1D11 ; [.1E48.0020.0002] # LATIN SMALL LETTER SIDEWAYS O -AB3D ; [.1E49.0020.0002] # LATIN SMALL LETTER BLACKLETTER O -0276 ; [.1E4A.0020.0002] # LATIN LETTER SMALL CAPITAL OE -1D14 ; [.1E4E.0020.0002] # LATIN SMALL LETTER TURNED OE -AB41 ; [.1E4F.0020.0002] # LATIN SMALL LETTER TURNED OE WITH STROKE -AB42 ; [.1E50.0020.0002] # LATIN SMALL LETTER TURNED OE WITH HORIZONTAL STROKE -AB40 ; [.1E51.0020.0002] # LATIN SMALL LETTER INVERTED OE -AB43 ; [.1E52.0020.0002] # LATIN SMALL LETTER TURNED O OPEN-O -AB44 ; [.1E53.0020.0002] # LATIN SMALL LETTER TURNED O OPEN-O WITH STROKE -1D13 ; [.1E54.0020.0002] # LATIN SMALL LETTER SIDEWAYS O WITH STROKE -AB3E ; [.1E55.0020.0002] # LATIN SMALL LETTER BLACKLETTER O WITH STROKE -0254 ; [.1E56.0020.0002] # LATIN SMALL LETTER OPEN O -0186 ; [.1E56.0020.0008] # LATIN CAPITAL LETTER OPEN O -1D53 ; [.1E56.0020.0014] # MODIFIER LETTER SMALL OPEN O -1D10 ; [.1E5A.0020.0002] # LATIN LETTER SMALL CAPITAL OPEN O -1D12 ; [.1E5B.0020.0002] # LATIN SMALL LETTER SIDEWAYS OPEN O -AB3F ; [.1E5C.0020.0002] # LATIN SMALL LETTER OPEN O WITH STROKE -1D97 ; [.1E5D.0020.0002] # LATIN SMALL LETTER OPEN O WITH RETROFLEX HOOK -AB62 ; [.1E5E.0020.0002] # LATIN SMALL LETTER OPEN OE -A74D ; [.1E5F.0020.0002] # LATIN SMALL LETTER O WITH LOOP -A74C ; [.1E5F.0020.0008] # LATIN CAPITAL LETTER O WITH LOOP -1D16 ; [.1E60.0020.0002] # LATIN SMALL LETTER TOP HALF O -1D54 ; [.1E60.0020.0014] # MODIFIER LETTER SMALL TOP HALF O -1D17 ; [.1E61.0020.0002] # LATIN SMALL LETTER BOTTOM HALF O -1D55 ; [.1E61.0020.0014] # MODIFIER LETTER SMALL BOTTOM HALF O -2C7A ; [.1E62.0020.0002] # LATIN SMALL LETTER O WITH LOW RING INSIDE -0275 ; [.1E63.0020.0002] # LATIN SMALL LETTER BARRED O -019F ; [.1E63.0020.0008] # LATIN CAPITAL LETTER O WITH MIDDLE TILDE -1DB1 ; [.1E63.0020.0014] # MODIFIER LETTER SMALL BARRED O -A74B ; [.1E67.0020.0002] # LATIN SMALL LETTER O WITH LONG STROKE OVERLAY -A74A ; [.1E67.0020.0008] # LATIN CAPITAL LETTER O WITH LONG STROKE OVERLAY -0277 ; [.1E68.0020.0002] # LATIN SMALL LETTER CLOSED OMEGA -A7B7 ; [.1E6C.0020.0002] # LATIN SMALL LETTER OMEGA -A7B6 ; [.1E6C.0020.0008] # LATIN CAPITAL LETTER OMEGA -0223 ; [.1E6D.0020.0002] # LATIN SMALL LETTER OU -0222 ; [.1E6D.0020.0008] # LATIN CAPITAL LETTER OU -1D3D ; [.1E6D.0020.001D] # MODIFIER LETTER CAPITAL OU -1D15 ; [.1E71.0020.0002] # LATIN LETTER SMALL CAPITAL OU -0070 ; [.1E72.0020.0002] # LATIN SMALL LETTER P -FF50 ; [.1E72.0020.0003] # FULLWIDTH LATIN SMALL LETTER P -1DEE ; [.1E72.0020.0004] # COMBINING LATIN SMALL LETTER P -24AB ; [*0318.0020.0004][.1E72.0020.0004][*0319.0020.0004] # PARENTHESIZED LATIN SMALL LETTER P -1D429 ; [.1E72.0020.0005] # MATHEMATICAL BOLD SMALL P -1D45D ; [.1E72.0020.0005] # MATHEMATICAL ITALIC SMALL P -1D491 ; [.1E72.0020.0005] # MATHEMATICAL BOLD ITALIC SMALL P -1D4C5 ; [.1E72.0020.0005] # MATHEMATICAL SCRIPT SMALL P -1D4F9 ; [.1E72.0020.0005] # MATHEMATICAL BOLD SCRIPT SMALL P -1D52D ; [.1E72.0020.0005] # MATHEMATICAL FRAKTUR SMALL P -1D561 ; [.1E72.0020.0005] # MATHEMATICAL DOUBLE-STRUCK SMALL P -1D595 ; [.1E72.0020.0005] # MATHEMATICAL BOLD FRAKTUR SMALL P -1D5C9 ; [.1E72.0020.0005] # MATHEMATICAL SANS-SERIF SMALL P -1D5FD ; [.1E72.0020.0005] # MATHEMATICAL SANS-SERIF BOLD SMALL P -1D631 ; [.1E72.0020.0005] # MATHEMATICAL SANS-SERIF ITALIC SMALL P -1D665 ; [.1E72.0020.0005] # MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL P -1D699 ; [.1E72.0020.0005] # MATHEMATICAL MONOSPACE SMALL P -24DF ; [.1E72.0020.0006] # CIRCLED LATIN SMALL LETTER P -0050 ; [.1E72.0020.0008] # LATIN CAPITAL LETTER P -FF30 ; [.1E72.0020.0009] # FULLWIDTH LATIN CAPITAL LETTER P -1F11F ; [*0318.0020.0004][.1E72.0020.000A][*0319.0020.0004] # PARENTHESIZED LATIN CAPITAL LETTER P -2119 ; [.1E72.0020.000B] # DOUBLE-STRUCK CAPITAL P -1D40F ; [.1E72.0020.000B] # MATHEMATICAL BOLD CAPITAL P -1D443 ; [.1E72.0020.000B] # MATHEMATICAL ITALIC CAPITAL P -1D477 ; [.1E72.0020.000B] # MATHEMATICAL BOLD ITALIC CAPITAL P -1D4AB ; [.1E72.0020.000B] # MATHEMATICAL SCRIPT CAPITAL P -1D4DF ; [.1E72.0020.000B] # MATHEMATICAL BOLD SCRIPT CAPITAL P -1D513 ; [.1E72.0020.000B] # MATHEMATICAL FRAKTUR CAPITAL P -1D57B ; [.1E72.0020.000B] # MATHEMATICAL BOLD FRAKTUR CAPITAL P -1D5AF ; [.1E72.0020.000B] # MATHEMATICAL SANS-SERIF CAPITAL P -1D5E3 ; [.1E72.0020.000B] # MATHEMATICAL SANS-SERIF BOLD CAPITAL P -1D617 ; [.1E72.0020.000B] # MATHEMATICAL SANS-SERIF ITALIC CAPITAL P -1D64B ; [.1E72.0020.000B] # MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL P -1D67F ; [.1E72.0020.000B] # MATHEMATICAL MONOSPACE CAPITAL P -24C5 ; [.1E72.0020.000C] # CIRCLED LATIN CAPITAL LETTER P -1F15F ; [.1E72.0020.000C] # NEGATIVE CIRCLED LATIN CAPITAL LETTER P -1D56 ; [.1E72.0020.0014] # MODIFIER LETTER SMALL P -209A ; [.1E72.0020.0015] # LATIN SUBSCRIPT SMALL LETTER P -1D3E ; [.1E72.0020.001D] # MODIFIER LETTER CAPITAL P -1F13F ; [.1E72.0020.001D] # SQUARED LATIN CAPITAL LETTER P -1F17F ; [.1E72.0020.001D] # NEGATIVE SQUARED LATIN CAPITAL LETTER P -1F18A ; [.1E72.0020.001D] # CROSSED NEGATIVE SQUARED LATIN CAPITAL LETTER P -1E55 ; [.1E72.0020.0002][.0000.0024.0002] # LATIN SMALL LETTER P WITH ACUTE -1E54 ; [.1E72.0020.0008][.0000.0024.0002] # LATIN CAPITAL LETTER P WITH ACUTE -1E57 ; [.1E72.0020.0002][.0000.002E.0002] # LATIN SMALL LETTER P WITH DOT ABOVE -1E56 ; [.1E72.0020.0008][.0000.002E.0002] # LATIN CAPITAL LETTER P WITH DOT ABOVE -3380 ; [.1E72.0020.001C][.1CAD.0020.001D] # SQUARE PA AMPS -33A9 ; [.1E72.0020.001D][.1CAD.0020.001C] # SQUARE PA -1F18C ; [.1E72.0020.001D][.1CAD.0020.001D] # NEGATIVE SQUARED PA -3376 ; [.1E72.0020.001C][.1CE0.0020.001C] # SQUARE PC -338A ; [.1E72.0020.001C][.1D4B.0020.001D] # SQUARE PF -33D7 ; [.1E72.0020.001D][.1D7E.0020.001D] # SQUARE PH -33D8 ; [.1E72.0020.001C][*0278.0020.001C][.1E10.0020.001C][*0278.0020.001C] # SQUARE PM -33D9 ; [.1E72.0020.001D][.1E72.0020.001D][.1E10.0020.001D] # SQUARE PPM -1F14E ; [.1E72.0020.001D][.1E72.0020.001D][.1F49.0020.001D] # SQUARED PPV -33DA ; [.1E72.0020.001D][.1E99.0020.001D] # SQUARE PR -33B0 ; [.1E72.0020.001C][.1ED7.0020.001C] # SQUARE PS -3250 ; [.1E72.0020.001D][.1EFB.0020.001D][.1D10.0020.001D] # PARTNERSHIP SIGN -33B4 ; [.1E72.0020.001C][.1F49.0020.001D] # SQUARE PV -33BA ; [.1E72.0020.001C][.1F5B.0020.001D] # SQUARE PW -1D18 ; [.1E76.0020.0002] # LATIN LETTER SMALL CAPITAL P -1D7D ; [.1E77.0020.0002] # LATIN SMALL LETTER P WITH STROKE -2C63 ; [.1E77.0020.0008] # LATIN CAPITAL LETTER P WITH STROKE -A751 ; [.1E78.0020.0002] # LATIN SMALL LETTER P WITH STROKE THROUGH DESCENDER -A750 ; [.1E78.0020.0008] # LATIN CAPITAL LETTER P WITH STROKE THROUGH DESCENDER -1D71 ; [.1E79.0020.0002] # LATIN SMALL LETTER P WITH MIDDLE TILDE -1D88 ; [.1E7A.0020.0002] # LATIN SMALL LETTER P WITH PALATAL HOOK -01A5 ; [.1E7B.0020.0002] # LATIN SMALL LETTER P WITH HOOK -01A4 ; [.1E7B.0020.0008] # LATIN CAPITAL LETTER P WITH HOOK -A753 ; [.1E7F.0020.0002] # LATIN SMALL LETTER P WITH FLOURISH -A752 ; [.1E7F.0020.0008] # LATIN CAPITAL LETTER P WITH FLOURISH -A755 ; [.1E80.0020.0002] # LATIN SMALL LETTER P WITH SQUIRREL TAIL -A754 ; [.1E80.0020.0008] # LATIN CAPITAL LETTER P WITH SQUIRREL TAIL -A7FC ; [.1E81.0020.0002] # LATIN EPIGRAPHIC LETTER REVERSED P -0278 ; [.1E82.0020.0002] # LATIN SMALL LETTER PHI -1DB2 ; [.1E82.0020.0014] # MODIFIER LETTER SMALL PHI -2C77 ; [.1E86.0020.0002] # LATIN SMALL LETTER TAILLESS PHI -0071 ; [.1E87.0020.0002] # LATIN SMALL LETTER Q -FF51 ; [.1E87.0020.0003] # FULLWIDTH LATIN SMALL LETTER Q -24AC ; [*0318.0020.0004][.1E87.0020.0004][*0319.0020.0004] # PARENTHESIZED LATIN SMALL LETTER Q -1D42A ; [.1E87.0020.0005] # MATHEMATICAL BOLD SMALL Q -1D45E ; [.1E87.0020.0005] # MATHEMATICAL ITALIC SMALL Q -1D492 ; [.1E87.0020.0005] # MATHEMATICAL BOLD ITALIC SMALL Q -1D4C6 ; [.1E87.0020.0005] # MATHEMATICAL SCRIPT SMALL Q -1D4FA ; [.1E87.0020.0005] # MATHEMATICAL BOLD SCRIPT SMALL Q -1D52E ; [.1E87.0020.0005] # MATHEMATICAL FRAKTUR SMALL Q -1D562 ; [.1E87.0020.0005] # MATHEMATICAL DOUBLE-STRUCK SMALL Q -1D596 ; [.1E87.0020.0005] # MATHEMATICAL BOLD FRAKTUR SMALL Q -1D5CA ; [.1E87.0020.0005] # MATHEMATICAL SANS-SERIF SMALL Q -1D5FE ; [.1E87.0020.0005] # MATHEMATICAL SANS-SERIF BOLD SMALL Q -1D632 ; [.1E87.0020.0005] # MATHEMATICAL SANS-SERIF ITALIC SMALL Q -1D666 ; [.1E87.0020.0005] # MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL Q -1D69A ; [.1E87.0020.0005] # MATHEMATICAL MONOSPACE SMALL Q -24E0 ; [.1E87.0020.0006] # CIRCLED LATIN SMALL LETTER Q -0051 ; [.1E87.0020.0008] # LATIN CAPITAL LETTER Q -FF31 ; [.1E87.0020.0009] # FULLWIDTH LATIN CAPITAL LETTER Q -1F120 ; [*0318.0020.0004][.1E87.0020.000A][*0319.0020.0004] # PARENTHESIZED LATIN CAPITAL LETTER Q -211A ; [.1E87.0020.000B] # DOUBLE-STRUCK CAPITAL Q -1D410 ; [.1E87.0020.000B] # MATHEMATICAL BOLD CAPITAL Q -1D444 ; [.1E87.0020.000B] # MATHEMATICAL ITALIC CAPITAL Q -1D478 ; [.1E87.0020.000B] # MATHEMATICAL BOLD ITALIC CAPITAL Q -1D4AC ; [.1E87.0020.000B] # MATHEMATICAL SCRIPT CAPITAL Q -1D4E0 ; [.1E87.0020.000B] # MATHEMATICAL BOLD SCRIPT CAPITAL Q -1D514 ; [.1E87.0020.000B] # MATHEMATICAL FRAKTUR CAPITAL Q -1D57C ; [.1E87.0020.000B] # MATHEMATICAL BOLD FRAKTUR CAPITAL Q -1D5B0 ; [.1E87.0020.000B] # MATHEMATICAL SANS-SERIF CAPITAL Q -1D5E4 ; [.1E87.0020.000B] # MATHEMATICAL SANS-SERIF BOLD CAPITAL Q -1D618 ; [.1E87.0020.000B] # MATHEMATICAL SANS-SERIF ITALIC CAPITAL Q -1D64C ; [.1E87.0020.000B] # MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL Q -1D680 ; [.1E87.0020.000B] # MATHEMATICAL MONOSPACE CAPITAL Q -24C6 ; [.1E87.0020.000C] # CIRCLED LATIN CAPITAL LETTER Q -1F160 ; [.1E87.0020.000C] # NEGATIVE CIRCLED LATIN CAPITAL LETTER Q -1F140 ; [.1E87.0020.001D] # SQUARED LATIN CAPITAL LETTER Q -1F180 ; [.1E87.0020.001D] # NEGATIVE SQUARED LATIN CAPITAL LETTER Q -0239 ; [.1E87.0020.0004][.1E72.0020.0004] # LATIN SMALL LETTER QP DIGRAPH -A757 ; [.1E8B.0020.0002] # LATIN SMALL LETTER Q WITH STROKE THROUGH DESCENDER -A756 ; [.1E8B.0020.0008] # LATIN CAPITAL LETTER Q WITH STROKE THROUGH DESCENDER -A759 ; [.1E8C.0020.0002] # LATIN SMALL LETTER Q WITH DIAGONAL STROKE -A758 ; [.1E8C.0020.0008] # LATIN CAPITAL LETTER Q WITH DIAGONAL STROKE -02A0 ; [.1E8D.0020.0002] # LATIN SMALL LETTER Q WITH HOOK -024B ; [.1E91.0020.0002] # LATIN SMALL LETTER Q WITH HOOK TAIL -024A ; [.1E91.0020.0008] # LATIN CAPITAL LETTER SMALL Q WITH HOOK TAIL -0138 ; [.1E95.0020.0002] # LATIN SMALL LETTER KRA -0072 ; [.1E99.0020.0002] # LATIN SMALL LETTER R -FF52 ; [.1E99.0020.0003] # FULLWIDTH LATIN SMALL LETTER R -036C ; [.1E99.0020.0004] # COMBINING LATIN SMALL LETTER R -1DCA ; [.1E99.0020.0004] # COMBINING LATIN SMALL LETTER R BELOW -24AD ; [*0318.0020.0004][.1E99.0020.0004][*0319.0020.0004] # PARENTHESIZED LATIN SMALL LETTER R -1D42B ; [.1E99.0020.0005] # MATHEMATICAL BOLD SMALL R -1D45F ; [.1E99.0020.0005] # MATHEMATICAL ITALIC SMALL R -1D493 ; [.1E99.0020.0005] # MATHEMATICAL BOLD ITALIC SMALL R -1D4C7 ; [.1E99.0020.0005] # MATHEMATICAL SCRIPT SMALL R -1D4FB ; [.1E99.0020.0005] # MATHEMATICAL BOLD SCRIPT SMALL R -1D52F ; [.1E99.0020.0005] # MATHEMATICAL FRAKTUR SMALL R -1D563 ; [.1E99.0020.0005] # MATHEMATICAL DOUBLE-STRUCK SMALL R -1D597 ; [.1E99.0020.0005] # MATHEMATICAL BOLD FRAKTUR SMALL R -1D5CB ; [.1E99.0020.0005] # MATHEMATICAL SANS-SERIF SMALL R -1D5FF ; [.1E99.0020.0005] # MATHEMATICAL SANS-SERIF BOLD SMALL R -1D633 ; [.1E99.0020.0005] # MATHEMATICAL SANS-SERIF ITALIC SMALL R -1D667 ; [.1E99.0020.0005] # MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL R -1D69B ; [.1E99.0020.0005] # MATHEMATICAL MONOSPACE SMALL R -24E1 ; [.1E99.0020.0006] # CIRCLED LATIN SMALL LETTER R -0052 ; [.1E99.0020.0008] # LATIN CAPITAL LETTER R -FF32 ; [.1E99.0020.0009] # FULLWIDTH LATIN CAPITAL LETTER R -1F121 ; [*0318.0020.0004][.1E99.0020.000A][*0319.0020.0004] # PARENTHESIZED LATIN CAPITAL LETTER R -211B ; [.1E99.0020.000B] # SCRIPT CAPITAL R -211C ; [.1E99.0020.000B] # BLACK-LETTER CAPITAL R -211D ; [.1E99.0020.000B] # DOUBLE-STRUCK CAPITAL R -1D411 ; [.1E99.0020.000B] # MATHEMATICAL BOLD CAPITAL R -1D445 ; [.1E99.0020.000B] # MATHEMATICAL ITALIC CAPITAL R -1D479 ; [.1E99.0020.000B] # MATHEMATICAL BOLD ITALIC CAPITAL R -1D4E1 ; [.1E99.0020.000B] # MATHEMATICAL BOLD SCRIPT CAPITAL R -1D57D ; [.1E99.0020.000B] # MATHEMATICAL BOLD FRAKTUR CAPITAL R -1D5B1 ; [.1E99.0020.000B] # MATHEMATICAL SANS-SERIF CAPITAL R -1D5E5 ; [.1E99.0020.000B] # MATHEMATICAL SANS-SERIF BOLD CAPITAL R -1D619 ; [.1E99.0020.000B] # MATHEMATICAL SANS-SERIF ITALIC CAPITAL R -1D64D ; [.1E99.0020.000B] # MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL R -1D681 ; [.1E99.0020.000B] # MATHEMATICAL MONOSPACE CAPITAL R -24C7 ; [.1E99.0020.000C] # CIRCLED LATIN CAPITAL LETTER R -1F12C ; [.1E99.0020.000C] # CIRCLED ITALIC LATIN CAPITAL LETTER R -1F161 ; [.1E99.0020.000C] # NEGATIVE CIRCLED LATIN CAPITAL LETTER R -02B3 ; [.1E99.0020.0014] # MODIFIER LETTER SMALL R -1D63 ; [.1E99.0020.0015] # LATIN SUBSCRIPT SMALL LETTER R -1D3F ; [.1E99.0020.001D] # MODIFIER LETTER CAPITAL R -1F141 ; [.1E99.0020.001D] # SQUARED LATIN CAPITAL LETTER R -1F181 ; [.1E99.0020.001D] # NEGATIVE SQUARED LATIN CAPITAL LETTER R -0155 ; [.1E99.0020.0002][.0000.0024.0002] # LATIN SMALL LETTER R WITH ACUTE -0154 ; [.1E99.0020.0008][.0000.0024.0002] # LATIN CAPITAL LETTER R WITH ACUTE -0159 ; [.1E99.0020.0002][.0000.0028.0002] # LATIN SMALL LETTER R WITH CARON -0158 ; [.1E99.0020.0008][.0000.0028.0002] # LATIN CAPITAL LETTER R WITH CARON -1E59 ; [.1E99.0020.0002][.0000.002E.0002] # LATIN SMALL LETTER R WITH DOT ABOVE -1E58 ; [.1E99.0020.0008][.0000.002E.0002] # LATIN CAPITAL LETTER R WITH DOT ABOVE -0157 ; [.1E99.0020.0002][.0000.0030.0002] # LATIN SMALL LETTER R WITH CEDILLA -0156 ; [.1E99.0020.0008][.0000.0030.0002] # LATIN CAPITAL LETTER R WITH CEDILLA -A7A7 ; [.1E99.0020.0004][.0000.0035.0004] # LATIN SMALL LETTER R WITH OBLIQUE STROKE -A7A6 ; [.1E99.0020.000A][.0000.0035.0004] # LATIN CAPITAL LETTER R WITH OBLIQUE STROKE -0211 ; [.1E99.0020.0002][.0000.003C.0002] # LATIN SMALL LETTER R WITH DOUBLE GRAVE -0210 ; [.1E99.0020.0008][.0000.003C.0002] # LATIN CAPITAL LETTER R WITH DOUBLE GRAVE -0213 ; [.1E99.0020.0002][.0000.003E.0002] # LATIN SMALL LETTER R WITH INVERTED BREVE -0212 ; [.1E99.0020.0008][.0000.003E.0002] # LATIN CAPITAL LETTER R WITH INVERTED BREVE -1E5B ; [.1E99.0020.0002][.0000.0042.0002] # LATIN SMALL LETTER R WITH DOT BELOW -1E5A ; [.1E99.0020.0008][.0000.0042.0002] # LATIN CAPITAL LETTER R WITH DOT BELOW -1E5D ; [.1E99.0020.0002][.0000.0042.0002][.0000.0032.0002] # LATIN SMALL LETTER R WITH DOT BELOW AND MACRON -1E5C ; [.1E99.0020.0008][.0000.0042.0002][.0000.0032.0002] # LATIN CAPITAL LETTER R WITH DOT BELOW AND MACRON -1E5F ; [.1E99.0020.0002][.0000.0049.0002] # LATIN SMALL LETTER R WITH LINE BELOW -1E5E ; [.1E99.0020.0008][.0000.0049.0002] # LATIN CAPITAL LETTER R WITH LINE BELOW -A783 ; [.1E99.0020.0004][.0000.0112.0004] # LATIN SMALL LETTER INSULAR R -A782 ; [.1E99.0020.000A][.0000.0112.0004] # LATIN CAPITAL LETTER INSULAR R -33AD ; [.1E99.0020.001C][.1CAD.0020.001C][.1CF5.0020.001C] # SQUARE RAD -33AE ; [.1E99.0020.001C][.1CAD.0020.001C][.1CF5.0020.001C][*063B.0020.001C][.1ED7.0020.001C] # SQUARE RAD OVER S -33AF ; [.1E99.0020.001C][.1CAD.0020.001C][.1CF5.0020.001C][*063B.0020.001C][.1ED7.0020.001C][.1CA5.0020.001C] # SQUARE RAD OVER S SQUARED -20A8 ; [.1E99.0020.000A][.1ED7.0020.0004] # RUPEE SIGN -AB45 ; [.1E9D.0020.0002] # LATIN SMALL LETTER STIRRUP R -0280 ; [.1E9E.0020.0002] # LATIN LETTER SMALL CAPITAL R -1DE2 ; [.1E9E.0020.0004] # COMBINING LATIN LETTER SMALL CAPITAL R -01A6 ; [.1E9E.0020.0008] # LATIN LETTER YR -AB46 ; [.1EA2.0020.0002] # LATIN LETTER SMALL CAPITAL R WITH RIGHT LEG -A75B ; [.1EA3.0020.0002] # LATIN SMALL LETTER R ROTUNDA -1DE3 ; [.1EA3.0020.0004] # COMBINING LATIN SMALL LETTER R ROTUNDA -A75A ; [.1EA3.0020.0008] # LATIN CAPITAL LETTER R ROTUNDA -1D19 ; [.1EA4.0020.0002] # LATIN LETTER SMALL CAPITAL REVERSED R -024D ; [.1EA5.0020.0002] # LATIN SMALL LETTER R WITH STROKE -024C ; [.1EA5.0020.0008] # LATIN CAPITAL LETTER R WITH STROKE -1D72 ; [.1EA9.0020.0002] # LATIN SMALL LETTER R WITH MIDDLE TILDE -0279 ; [.1EAA.0020.0002] # LATIN SMALL LETTER TURNED R -02B4 ; [.1EAA.0020.0014] # MODIFIER LETTER SMALL TURNED R -1D1A ; [.1EAE.0020.0002] # LATIN LETTER SMALL CAPITAL TURNED R -027A ; [.1EAF.0020.0002] # LATIN SMALL LETTER TURNED R WITH LONG LEG -1D89 ; [.1EB3.0020.0002] # LATIN SMALL LETTER R WITH PALATAL HOOK -027B ; [.1EB4.0020.0002] # LATIN SMALL LETTER TURNED R WITH HOOK -02B5 ; [.1EB4.0020.0014] # MODIFIER LETTER SMALL TURNED R WITH HOOK -2C79 ; [.1EB8.0020.0002] # LATIN SMALL LETTER TURNED R WITH TAIL -027C ; [.1EB9.0020.0002] # LATIN SMALL LETTER R WITH LONG LEG -027D ; [.1EBD.0020.0002] # LATIN SMALL LETTER R WITH TAIL -2C64 ; [.1EBD.0020.0008] # LATIN CAPITAL LETTER R WITH TAIL -AB49 ; [.1EC1.0020.0002] # LATIN SMALL LETTER R WITH CROSSED-TAIL -027E ; [.1EC2.0020.0002] # LATIN SMALL LETTER R WITH FISHHOOK -1D73 ; [.1EC6.0020.0002] # LATIN SMALL LETTER R WITH FISHHOOK AND MIDDLE TILDE -027F ; [.1EC7.0020.0002] # LATIN SMALL LETTER REVERSED R WITH FISHHOOK -AB47 ; [.1ECB.0020.0002] # LATIN SMALL LETTER R WITHOUT HANDLE -AB48 ; [.1ECC.0020.0002] # LATIN SMALL LETTER DOUBLE R -AB4A ; [.1ECD.0020.0002] # LATIN SMALL LETTER DOUBLE R WITH CROSSED-TAIL -AB4B ; [.1ECE.0020.0002] # LATIN SMALL LETTER SCRIPT R -AB4C ; [.1ECF.0020.0002] # LATIN SMALL LETTER SCRIPT R WITH RING -0281 ; [.1ED0.0020.0002] # LATIN LETTER SMALL CAPITAL INVERTED R -02B6 ; [.1ED0.0020.0014] # MODIFIER LETTER SMALL CAPITAL INVERTED R -A775 ; [.1ED4.0020.0002] # LATIN SMALL LETTER RUM -A776 ; [.1ED5.0020.0002] # LATIN LETTER SMALL CAPITAL RUM -A75D ; [.1ED6.0020.0002] # LATIN SMALL LETTER RUM ROTUNDA -A75C ; [.1ED6.0020.0008] # LATIN CAPITAL LETTER RUM ROTUNDA -0073 ; [.1ED7.0020.0002] # LATIN SMALL LETTER S -FF53 ; [.1ED7.0020.0003] # FULLWIDTH LATIN SMALL LETTER S -1DE4 ; [.1ED7.0020.0004] # COMBINING LATIN SMALL LETTER S -24AE ; [*0318.0020.0004][.1ED7.0020.0004][*0319.0020.0004] # PARENTHESIZED LATIN SMALL LETTER S -1D42C ; [.1ED7.0020.0005] # MATHEMATICAL BOLD SMALL S -1D460 ; [.1ED7.0020.0005] # MATHEMATICAL ITALIC SMALL S -1D494 ; [.1ED7.0020.0005] # MATHEMATICAL BOLD ITALIC SMALL S -1D4C8 ; [.1ED7.0020.0005] # MATHEMATICAL SCRIPT SMALL S -1D4FC ; [.1ED7.0020.0005] # MATHEMATICAL BOLD SCRIPT SMALL S -1D530 ; [.1ED7.0020.0005] # MATHEMATICAL FRAKTUR SMALL S -1D564 ; [.1ED7.0020.0005] # MATHEMATICAL DOUBLE-STRUCK SMALL S -1D598 ; [.1ED7.0020.0005] # MATHEMATICAL BOLD FRAKTUR SMALL S -1D5CC ; [.1ED7.0020.0005] # MATHEMATICAL SANS-SERIF SMALL S -1D600 ; [.1ED7.0020.0005] # MATHEMATICAL SANS-SERIF BOLD SMALL S -1D634 ; [.1ED7.0020.0005] # MATHEMATICAL SANS-SERIF ITALIC SMALL S -1D668 ; [.1ED7.0020.0005] # MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL S -1D69C ; [.1ED7.0020.0005] # MATHEMATICAL MONOSPACE SMALL S -24E2 ; [.1ED7.0020.0006] # CIRCLED LATIN SMALL LETTER S -0053 ; [.1ED7.0020.0008] # LATIN CAPITAL LETTER S -FF33 ; [.1ED7.0020.0009] # FULLWIDTH LATIN CAPITAL LETTER S -1F122 ; [*0318.0020.0004][.1ED7.0020.000A][*0319.0020.0004] # PARENTHESIZED LATIN CAPITAL LETTER S -1F12A ; [*037A.0020.0004][.1ED7.0020.000A][*037B.0020.0004] # TORTOISE SHELL BRACKETED LATIN CAPITAL LETTER S -1D412 ; [.1ED7.0020.000B] # MATHEMATICAL BOLD CAPITAL S -1D446 ; [.1ED7.0020.000B] # MATHEMATICAL ITALIC CAPITAL S -1D47A ; [.1ED7.0020.000B] # MATHEMATICAL BOLD ITALIC CAPITAL S -1D4AE ; [.1ED7.0020.000B] # MATHEMATICAL SCRIPT CAPITAL S -1D4E2 ; [.1ED7.0020.000B] # MATHEMATICAL BOLD SCRIPT CAPITAL S -1D516 ; [.1ED7.0020.000B] # MATHEMATICAL FRAKTUR CAPITAL S -1D54A ; [.1ED7.0020.000B] # MATHEMATICAL DOUBLE-STRUCK CAPITAL S -1D57E ; [.1ED7.0020.000B] # MATHEMATICAL BOLD FRAKTUR CAPITAL S -1D5B2 ; [.1ED7.0020.000B] # MATHEMATICAL SANS-SERIF CAPITAL S -1D5E6 ; [.1ED7.0020.000B] # MATHEMATICAL SANS-SERIF BOLD CAPITAL S -1D61A ; [.1ED7.0020.000B] # MATHEMATICAL SANS-SERIF ITALIC CAPITAL S -1D64E ; [.1ED7.0020.000B] # MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL S -1D682 ; [.1ED7.0020.000B] # MATHEMATICAL MONOSPACE CAPITAL S -24C8 ; [.1ED7.0020.000C] # CIRCLED LATIN CAPITAL LETTER S -1F162 ; [.1ED7.0020.000C] # NEGATIVE CIRCLED LATIN CAPITAL LETTER S -02E2 ; [.1ED7.0020.0014] # MODIFIER LETTER SMALL S -209B ; [.1ED7.0020.0015] # LATIN SUBSCRIPT SMALL LETTER S -1F142 ; [.1ED7.0020.001D] # SQUARED LATIN CAPITAL LETTER S -1F182 ; [.1ED7.0020.001D] # NEGATIVE SQUARED LATIN CAPITAL LETTER S -015B ; [.1ED7.0020.0002][.0000.0024.0002] # LATIN SMALL LETTER S WITH ACUTE -015A ; [.1ED7.0020.0008][.0000.0024.0002] # LATIN CAPITAL LETTER S WITH ACUTE -1E65 ; [.1ED7.0020.0002][.0000.0024.0002][.0000.002E.0002] # LATIN SMALL LETTER S WITH ACUTE AND DOT ABOVE -1E64 ; [.1ED7.0020.0008][.0000.0024.0002][.0000.002E.0002] # LATIN CAPITAL LETTER S WITH ACUTE AND DOT ABOVE -015D ; [.1ED7.0020.0002][.0000.0027.0002] # LATIN SMALL LETTER S WITH CIRCUMFLEX -015C ; [.1ED7.0020.0008][.0000.0027.0002] # LATIN CAPITAL LETTER S WITH CIRCUMFLEX -0161 ; [.1ED7.0020.0002][.0000.0028.0002] # LATIN SMALL LETTER S WITH CARON -0160 ; [.1ED7.0020.0008][.0000.0028.0002] # LATIN CAPITAL LETTER S WITH CARON -1E67 ; [.1ED7.0020.0002][.0000.0028.0002][.0000.002E.0002] # LATIN SMALL LETTER S WITH CARON AND DOT ABOVE -1E66 ; [.1ED7.0020.0008][.0000.0028.0002][.0000.002E.0002] # LATIN CAPITAL LETTER S WITH CARON AND DOT ABOVE -1E61 ; [.1ED7.0020.0002][.0000.002E.0002] # LATIN SMALL LETTER S WITH DOT ABOVE -1E60 ; [.1ED7.0020.0008][.0000.002E.0002] # LATIN CAPITAL LETTER S WITH DOT ABOVE -015F ; [.1ED7.0020.0002][.0000.0030.0002] # LATIN SMALL LETTER S WITH CEDILLA -015E ; [.1ED7.0020.0008][.0000.0030.0002] # LATIN CAPITAL LETTER S WITH CEDILLA -A7A9 ; [.1ED7.0020.0004][.0000.0035.0004] # LATIN SMALL LETTER S WITH OBLIQUE STROKE -A7A8 ; [.1ED7.0020.000A][.0000.0035.0004] # LATIN CAPITAL LETTER S WITH OBLIQUE STROKE -1E63 ; [.1ED7.0020.0002][.0000.0042.0002] # LATIN SMALL LETTER S WITH DOT BELOW -1E62 ; [.1ED7.0020.0008][.0000.0042.0002] # LATIN CAPITAL LETTER S WITH DOT BELOW -1E69 ; [.1ED7.0020.0002][.0000.0042.0002][.0000.002E.0002] # LATIN SMALL LETTER S WITH DOT BELOW AND DOT ABOVE -1E68 ; [.1ED7.0020.0008][.0000.0042.0002][.0000.002E.0002] # LATIN CAPITAL LETTER S WITH DOT BELOW AND DOT ABOVE -0219 ; [.1ED7.0020.0002][.0000.0045.0002] # LATIN SMALL LETTER S WITH COMMA BELOW -0218 ; [.1ED7.0020.0008][.0000.0045.0002] # LATIN CAPITAL LETTER S WITH COMMA BELOW -017F ; [.1ED7.0020.0004][.0000.0112.0004] # LATIN SMALL LETTER LONG S -1DE5 ; [.1ED7.0020.0004][.0000.0112.0004] # COMBINING LATIN SMALL LETTER LONG S -A785 ; [.1ED7.0020.0004][.0000.0112.0004] # LATIN SMALL LETTER INSULAR S -A784 ; [.1ED7.0020.000A][.0000.0112.0004] # LATIN CAPITAL LETTER INSULAR S -1E9B ; [.1ED7.0020.0004][.0000.0112.0004][.0000.002E.0002] # LATIN SMALL LETTER LONG S WITH DOT ABOVE -1F18D ; [.1ED7.0020.001D][.1CAD.0020.001D] # NEGATIVE SQUARED SA -1F14C ; [.1ED7.0020.001D][.1CF5.0020.001D] # SQUARED SD -1F1AA ; [.1ED7.0020.001D][.1D7E.0020.001D][.1F49.0020.001D] # SQUARED SHV -2120 ; [.1ED7.0020.0014][.1E10.0020.0014] # SERVICE MARK -1F198 ; [.1ED7.0020.001D][.1E43.0020.001D][.1ED7.0020.001D] # SQUARED SOS -33DB ; [.1ED7.0020.001C][.1E99.0020.001C] # SQUARE SR -1F14D ; [.1ED7.0020.001D][.1ED7.0020.001D] # SQUARED SS -00DF ; [.1ED7.0020.0004][.0000.0111.0004][.1ED7.0020.0004] # LATIN SMALL LETTER SHARP S -1E9E ; [.1ED7.0020.000A][.0000.0111.0004][.1ED7.0020.000A] # LATIN CAPITAL LETTER SHARP S -FB06 ; [.1ED7.0020.0004][.1EFB.0020.0004] # LATIN SMALL LIGATURE ST -FB05 ; [.1ED7.0020.0004][.0000.0112.0004][.1EFB.0020.0004] # LATIN SMALL LIGATURE LONG S T -33DC ; [.1ED7.0020.001D][.1F49.0020.001C] # SQUARE SV -A731 ; [.1EDB.0020.0002] # LATIN LETTER SMALL CAPITAL S -1D74 ; [.1EDC.0020.0002] # LATIN SMALL LETTER S WITH MIDDLE TILDE -1D8A ; [.1EDD.0020.0002] # LATIN SMALL LETTER S WITH PALATAL HOOK -0282 ; [.1EDE.0020.0002] # LATIN SMALL LETTER S WITH HOOK -1DB3 ; [.1EDE.0020.0014] # MODIFIER LETTER SMALL S WITH HOOK -023F ; [.1EE2.0020.0002] # LATIN SMALL LETTER S WITH SWASH TAIL -2C7E ; [.1EE2.0020.0008] # LATIN CAPITAL LETTER S WITH SWASH TAIL -1E9C ; [.1EE6.0020.0002] # LATIN SMALL LETTER LONG S WITH DIAGONAL STROKE -1E9D ; [.1EE7.0020.0002] # LATIN SMALL LETTER LONG S WITH HIGH STROKE -0283 ; [.1EE8.0020.0002] # LATIN SMALL LETTER ESH -1DEF ; [.1EE8.0020.0004] # COMBINING LATIN SMALL LETTER ESH -01A9 ; [.1EE8.0020.0008] # LATIN CAPITAL LETTER ESH -1DB4 ; [.1EE8.0020.0014] # MODIFIER LETTER SMALL ESH -AB4D ; [.1EEC.0020.0002] # LATIN SMALL LETTER BASELINE ESH -1D8B ; [.1EED.0020.0002] # LATIN SMALL LETTER ESH WITH PALATAL HOOK -01AA ; [.1EEE.0020.0002] # LATIN LETTER REVERSED ESH LOOP -0285 ; [.1EF2.0020.0002] # LATIN SMALL LETTER SQUAT REVERSED ESH -1D98 ; [.1EF6.0020.0002] # LATIN SMALL LETTER ESH WITH RETROFLEX HOOK -0286 ; [.1EF7.0020.0002] # LATIN SMALL LETTER ESH WITH CURL -0074 ; [.1EFB.0020.0002] # LATIN SMALL LETTER T -FF54 ; [.1EFB.0020.0003] # FULLWIDTH LATIN SMALL LETTER T -036D ; [.1EFB.0020.0004] # COMBINING LATIN SMALL LETTER T -24AF ; [*0318.0020.0004][.1EFB.0020.0004][*0319.0020.0004] # PARENTHESIZED LATIN SMALL LETTER T -1D42D ; [.1EFB.0020.0005] # MATHEMATICAL BOLD SMALL T -1D461 ; [.1EFB.0020.0005] # MATHEMATICAL ITALIC SMALL T -1D495 ; [.1EFB.0020.0005] # MATHEMATICAL BOLD ITALIC SMALL T -1D4C9 ; [.1EFB.0020.0005] # MATHEMATICAL SCRIPT SMALL T -1D4FD ; [.1EFB.0020.0005] # MATHEMATICAL BOLD SCRIPT SMALL T -1D531 ; [.1EFB.0020.0005] # MATHEMATICAL FRAKTUR SMALL T -1D565 ; [.1EFB.0020.0005] # MATHEMATICAL DOUBLE-STRUCK SMALL T -1D599 ; [.1EFB.0020.0005] # MATHEMATICAL BOLD FRAKTUR SMALL T -1D5CD ; [.1EFB.0020.0005] # MATHEMATICAL SANS-SERIF SMALL T -1D601 ; [.1EFB.0020.0005] # MATHEMATICAL SANS-SERIF BOLD SMALL T -1D635 ; [.1EFB.0020.0005] # MATHEMATICAL SANS-SERIF ITALIC SMALL T -1D669 ; [.1EFB.0020.0005] # MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL T -1D69D ; [.1EFB.0020.0005] # MATHEMATICAL MONOSPACE SMALL T -24E3 ; [.1EFB.0020.0006] # CIRCLED LATIN SMALL LETTER T -0054 ; [.1EFB.0020.0008] # LATIN CAPITAL LETTER T -FF34 ; [.1EFB.0020.0009] # FULLWIDTH LATIN CAPITAL LETTER T -1F123 ; [*0318.0020.0004][.1EFB.0020.000A][*0319.0020.0004] # PARENTHESIZED LATIN CAPITAL LETTER T -1D413 ; [.1EFB.0020.000B] # MATHEMATICAL BOLD CAPITAL T -1D447 ; [.1EFB.0020.000B] # MATHEMATICAL ITALIC CAPITAL T -1D47B ; [.1EFB.0020.000B] # MATHEMATICAL BOLD ITALIC CAPITAL T -1D4AF ; [.1EFB.0020.000B] # MATHEMATICAL SCRIPT CAPITAL T -1D4E3 ; [.1EFB.0020.000B] # MATHEMATICAL BOLD SCRIPT CAPITAL T -1D517 ; [.1EFB.0020.000B] # MATHEMATICAL FRAKTUR CAPITAL T -1D54B ; [.1EFB.0020.000B] # MATHEMATICAL DOUBLE-STRUCK CAPITAL T -1D57F ; [.1EFB.0020.000B] # MATHEMATICAL BOLD FRAKTUR CAPITAL T -1D5B3 ; [.1EFB.0020.000B] # MATHEMATICAL SANS-SERIF CAPITAL T -1D5E7 ; [.1EFB.0020.000B] # MATHEMATICAL SANS-SERIF BOLD CAPITAL T -1D61B ; [.1EFB.0020.000B] # MATHEMATICAL SANS-SERIF ITALIC CAPITAL T -1D64F ; [.1EFB.0020.000B] # MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL T -1D683 ; [.1EFB.0020.000B] # MATHEMATICAL MONOSPACE CAPITAL T -24C9 ; [.1EFB.0020.000C] # CIRCLED LATIN CAPITAL LETTER T -1F163 ; [.1EFB.0020.000C] # NEGATIVE CIRCLED LATIN CAPITAL LETTER T -1D57 ; [.1EFB.0020.0014] # MODIFIER LETTER SMALL T -209C ; [.1EFB.0020.0015] # LATIN SUBSCRIPT SMALL LETTER T -1D40 ; [.1EFB.0020.001D] # MODIFIER LETTER CAPITAL T -1F143 ; [.1EFB.0020.001D] # SQUARED LATIN CAPITAL LETTER T -1F183 ; [.1EFB.0020.001D] # NEGATIVE SQUARED LATIN CAPITAL LETTER T -0165 ; [.1EFB.0020.0002][.0000.0028.0002] # LATIN SMALL LETTER T WITH CARON -0164 ; [.1EFB.0020.0008][.0000.0028.0002] # LATIN CAPITAL LETTER T WITH CARON -1E97 ; [.1EFB.0020.0002][.0000.002B.0002] # LATIN SMALL LETTER T WITH DIAERESIS -1E6B ; [.1EFB.0020.0002][.0000.002E.0002] # LATIN SMALL LETTER T WITH DOT ABOVE -1E6A ; [.1EFB.0020.0008][.0000.002E.0002] # LATIN CAPITAL LETTER T WITH DOT ABOVE -0163 ; [.1EFB.0020.0002][.0000.0030.0002] # LATIN SMALL LETTER T WITH CEDILLA -0162 ; [.1EFB.0020.0008][.0000.0030.0002] # LATIN CAPITAL LETTER T WITH CEDILLA -1E6D ; [.1EFB.0020.0002][.0000.0042.0002] # LATIN SMALL LETTER T WITH DOT BELOW -1E6C ; [.1EFB.0020.0008][.0000.0042.0002] # LATIN CAPITAL LETTER T WITH DOT BELOW -021B ; [.1EFB.0020.0002][.0000.0045.0002] # LATIN SMALL LETTER T WITH COMMA BELOW -021A ; [.1EFB.0020.0008][.0000.0045.0002] # LATIN CAPITAL LETTER T WITH COMMA BELOW -1E71 ; [.1EFB.0020.0002][.0000.0046.0002] # LATIN SMALL LETTER T WITH CIRCUMFLEX BELOW -1E70 ; [.1EFB.0020.0008][.0000.0046.0002] # LATIN CAPITAL LETTER T WITH CIRCUMFLEX BELOW -1E6F ; [.1EFB.0020.0002][.0000.0049.0002] # LATIN SMALL LETTER T WITH LINE BELOW -1E6E ; [.1EFB.0020.0008][.0000.0049.0002] # LATIN CAPITAL LETTER T WITH LINE BELOW -A787 ; [.1EFB.0020.0004][.0000.0112.0004] # LATIN SMALL LETTER INSULAR T -A786 ; [.1EFB.0020.000A][.0000.0112.0004] # LATIN CAPITAL LETTER INSULAR T -02A8 ; [.1EFB.0020.0004][.1CEF.0020.0004] # LATIN SMALL LETTER TC DIGRAPH WITH CURL -2121 ; [.1EFB.0020.000A][.1D10.0020.000A][.1DDD.0020.000A] # TELEPHONE SIGN -1D7A ; [.1EFB.0020.0004][.0000.0111.0004][.1D7E.0020.0004] # LATIN SMALL LETTER TH WITH STRIKETHROUGH -3394 ; [.1EFB.0020.001D][.1D7E.0020.001D][.1F87.0020.001C] # SQUARE THZ -2122 ; [.1EFB.0020.0014][.1E10.0020.0014] # TRADE MARK SIGN -01BE ; [.1EFB.0020.0004][.1ED7.0020.0004] # LATIN LETTER INVERTED GLOTTAL STOP WITH STROKE -02A6 ; [.1EFB.0020.0004][.1ED7.0020.0004] # LATIN SMALL LETTER TS DIGRAPH -02A7 ; [.1EFB.0020.0004][.1EE8.0020.0004] # LATIN SMALL LETTER TESH DIGRAPH -A729 ; [.1EFB.0020.0004][.1F87.0020.0004] # LATIN SMALL LETTER TZ -A728 ; [.1EFB.0020.000A][.1F87.0020.0004] # LATIN CAPITAL LETTER TZ -1D1B ; [.1EFF.0020.0002] # LATIN LETTER SMALL CAPITAL T -0167 ; [.1F00.0020.0002] # LATIN SMALL LETTER T WITH STROKE -0166 ; [.1F00.0020.0008] # LATIN CAPITAL LETTER T WITH STROKE -2C66 ; [.1F04.0020.0002] # LATIN SMALL LETTER T WITH DIAGONAL STROKE -023E ; [.1F04.0020.0008] # LATIN CAPITAL LETTER T WITH DIAGONAL STROKE -1D75 ; [.1F05.0020.0002] # LATIN SMALL LETTER T WITH MIDDLE TILDE -01AB ; [.1F06.0020.0002] # LATIN SMALL LETTER T WITH PALATAL HOOK -1DB5 ; [.1F06.0020.0014] # MODIFIER LETTER SMALL T WITH PALATAL HOOK -01AD ; [.1F0A.0020.0002] # LATIN SMALL LETTER T WITH HOOK -01AC ; [.1F0A.0020.0008] # LATIN CAPITAL LETTER T WITH HOOK -0288 ; [.1F0E.0020.0002] # LATIN SMALL LETTER T WITH RETROFLEX HOOK -01AE ; [.1F0E.0020.0008] # LATIN CAPITAL LETTER T WITH RETROFLEX HOOK -0236 ; [.1F12.0020.0002] # LATIN SMALL LETTER T WITH CURL -A777 ; [.1F16.0020.0002] # LATIN SMALL LETTER TUM -0287 ; [.1F17.0020.0002] # LATIN SMALL LETTER TURNED T -A7B1 ; [.1F17.0020.0008] # LATIN CAPITAL LETTER TURNED T -0075 ; [.1F1B.0020.0002] # LATIN SMALL LETTER U -FF55 ; [.1F1B.0020.0003] # FULLWIDTH LATIN SMALL LETTER U -0367 ; [.1F1B.0020.0004] # COMBINING LATIN SMALL LETTER U -24B0 ; [*0318.0020.0004][.1F1B.0020.0004][*0319.0020.0004] # PARENTHESIZED LATIN SMALL LETTER U -1D42E ; [.1F1B.0020.0005] # MATHEMATICAL BOLD SMALL U -1D462 ; [.1F1B.0020.0005] # MATHEMATICAL ITALIC SMALL U -1D496 ; [.1F1B.0020.0005] # MATHEMATICAL BOLD ITALIC SMALL U -1D4CA ; [.1F1B.0020.0005] # MATHEMATICAL SCRIPT SMALL U -1D4FE ; [.1F1B.0020.0005] # MATHEMATICAL BOLD SCRIPT SMALL U -1D532 ; [.1F1B.0020.0005] # MATHEMATICAL FRAKTUR SMALL U -1D566 ; [.1F1B.0020.0005] # MATHEMATICAL DOUBLE-STRUCK SMALL U -1D59A ; [.1F1B.0020.0005] # MATHEMATICAL BOLD FRAKTUR SMALL U -1D5CE ; [.1F1B.0020.0005] # MATHEMATICAL SANS-SERIF SMALL U -1D602 ; [.1F1B.0020.0005] # MATHEMATICAL SANS-SERIF BOLD SMALL U -1D636 ; [.1F1B.0020.0005] # MATHEMATICAL SANS-SERIF ITALIC SMALL U -1D66A ; [.1F1B.0020.0005] # MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL U -1D69E ; [.1F1B.0020.0005] # MATHEMATICAL MONOSPACE SMALL U -24E4 ; [.1F1B.0020.0006] # CIRCLED LATIN SMALL LETTER U -0055 ; [.1F1B.0020.0008] # LATIN CAPITAL LETTER U -FF35 ; [.1F1B.0020.0009] # FULLWIDTH LATIN CAPITAL LETTER U -1F124 ; [*0318.0020.0004][.1F1B.0020.000A][*0319.0020.0004] # PARENTHESIZED LATIN CAPITAL LETTER U -1D414 ; [.1F1B.0020.000B] # MATHEMATICAL BOLD CAPITAL U -1D448 ; [.1F1B.0020.000B] # MATHEMATICAL ITALIC CAPITAL U -1D47C ; [.1F1B.0020.000B] # MATHEMATICAL BOLD ITALIC CAPITAL U -1D4B0 ; [.1F1B.0020.000B] # MATHEMATICAL SCRIPT CAPITAL U -1D4E4 ; [.1F1B.0020.000B] # MATHEMATICAL BOLD SCRIPT CAPITAL U -1D518 ; [.1F1B.0020.000B] # MATHEMATICAL FRAKTUR CAPITAL U -1D54C ; [.1F1B.0020.000B] # MATHEMATICAL DOUBLE-STRUCK CAPITAL U -1D580 ; [.1F1B.0020.000B] # MATHEMATICAL BOLD FRAKTUR CAPITAL U -1D5B4 ; [.1F1B.0020.000B] # MATHEMATICAL SANS-SERIF CAPITAL U -1D5E8 ; [.1F1B.0020.000B] # MATHEMATICAL SANS-SERIF BOLD CAPITAL U -1D61C ; [.1F1B.0020.000B] # MATHEMATICAL SANS-SERIF ITALIC CAPITAL U -1D650 ; [.1F1B.0020.000B] # MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL U -1D684 ; [.1F1B.0020.000B] # MATHEMATICAL MONOSPACE CAPITAL U -24CA ; [.1F1B.0020.000C] # CIRCLED LATIN CAPITAL LETTER U -1F164 ; [.1F1B.0020.000C] # NEGATIVE CIRCLED LATIN CAPITAL LETTER U -1D58 ; [.1F1B.0020.0014] # MODIFIER LETTER SMALL U -1D64 ; [.1F1B.0020.0015] # LATIN SUBSCRIPT SMALL LETTER U -1D41 ; [.1F1B.0020.001D] # MODIFIER LETTER CAPITAL U -1F144 ; [.1F1B.0020.001D] # SQUARED LATIN CAPITAL LETTER U -1F184 ; [.1F1B.0020.001D] # NEGATIVE SQUARED LATIN CAPITAL LETTER U -00FA ; [.1F1B.0020.0002][.0000.0024.0002] # LATIN SMALL LETTER U WITH ACUTE -00DA ; [.1F1B.0020.0008][.0000.0024.0002] # LATIN CAPITAL LETTER U WITH ACUTE -00F9 ; [.1F1B.0020.0002][.0000.0025.0002] # LATIN SMALL LETTER U WITH GRAVE -00D9 ; [.1F1B.0020.0008][.0000.0025.0002] # LATIN CAPITAL LETTER U WITH GRAVE -016D ; [.1F1B.0020.0002][.0000.0026.0002] # LATIN SMALL LETTER U WITH BREVE -016C ; [.1F1B.0020.0008][.0000.0026.0002] # LATIN CAPITAL LETTER U WITH BREVE -00FB ; [.1F1B.0020.0002][.0000.0027.0002] # LATIN SMALL LETTER U WITH CIRCUMFLEX -00DB ; [.1F1B.0020.0008][.0000.0027.0002] # LATIN CAPITAL LETTER U WITH CIRCUMFLEX -01D4 ; [.1F1B.0020.0002][.0000.0028.0002] # LATIN SMALL LETTER U WITH CARON -01D3 ; [.1F1B.0020.0008][.0000.0028.0002] # LATIN CAPITAL LETTER U WITH CARON -016F ; [.1F1B.0020.0002][.0000.0029.0002] # LATIN SMALL LETTER U WITH RING ABOVE -016E ; [.1F1B.0020.0008][.0000.0029.0002] # LATIN CAPITAL LETTER U WITH RING ABOVE -00FC ; [.1F1B.0020.0002][.0000.002B.0002] # LATIN SMALL LETTER U WITH DIAERESIS -1DF4 ; [.1F1B.0020.0004][.0000.002B.0004] # COMBINING LATIN SMALL LETTER U WITH DIAERESIS -A79F ; [.1F1B.0020.0004][.0000.002B.0004] # LATIN SMALL LETTER VOLAPUK UE -00DC ; [.1F1B.0020.0008][.0000.002B.0002] # LATIN CAPITAL LETTER U WITH DIAERESIS -A79E ; [.1F1B.0020.000A][.0000.002B.0004] # LATIN CAPITAL LETTER VOLAPUK UE -01D8 ; [.1F1B.0020.0002][.0000.002B.0002][.0000.0024.0002] # LATIN SMALL LETTER U WITH DIAERESIS AND ACUTE -01D7 ; [.1F1B.0020.0008][.0000.002B.0002][.0000.0024.0002] # LATIN CAPITAL LETTER U WITH DIAERESIS AND ACUTE -01DC ; [.1F1B.0020.0002][.0000.002B.0002][.0000.0025.0002] # LATIN SMALL LETTER U WITH DIAERESIS AND GRAVE -01DB ; [.1F1B.0020.0008][.0000.002B.0002][.0000.0025.0002] # LATIN CAPITAL LETTER U WITH DIAERESIS AND GRAVE -01DA ; [.1F1B.0020.0002][.0000.002B.0002][.0000.0028.0002] # LATIN SMALL LETTER U WITH DIAERESIS AND CARON -01D9 ; [.1F1B.0020.0008][.0000.002B.0002][.0000.0028.0002] # LATIN CAPITAL LETTER U WITH DIAERESIS AND CARON -01D6 ; [.1F1B.0020.0002][.0000.002B.0002][.0000.0032.0002] # LATIN SMALL LETTER U WITH DIAERESIS AND MACRON -01D5 ; [.1F1B.0020.0008][.0000.002B.0002][.0000.0032.0002] # LATIN CAPITAL LETTER U WITH DIAERESIS AND MACRON -0171 ; [.1F1B.0020.0002][.0000.002C.0002] # LATIN SMALL LETTER U WITH DOUBLE ACUTE -0170 ; [.1F1B.0020.0008][.0000.002C.0002] # LATIN CAPITAL LETTER U WITH DOUBLE ACUTE -0169 ; [.1F1B.0020.0002][.0000.002D.0002] # LATIN SMALL LETTER U WITH TILDE -0168 ; [.1F1B.0020.0008][.0000.002D.0002] # LATIN CAPITAL LETTER U WITH TILDE -1E79 ; [.1F1B.0020.0002][.0000.002D.0002][.0000.0024.0002] # LATIN SMALL LETTER U WITH TILDE AND ACUTE -1E78 ; [.1F1B.0020.0008][.0000.002D.0002][.0000.0024.0002] # LATIN CAPITAL LETTER U WITH TILDE AND ACUTE -0173 ; [.1F1B.0020.0002][.0000.0031.0002] # LATIN SMALL LETTER U WITH OGONEK -0172 ; [.1F1B.0020.0008][.0000.0031.0002] # LATIN CAPITAL LETTER U WITH OGONEK -016B ; [.1F1B.0020.0002][.0000.0032.0002] # LATIN SMALL LETTER U WITH MACRON -016A ; [.1F1B.0020.0008][.0000.0032.0002] # LATIN CAPITAL LETTER U WITH MACRON -1E7B ; [.1F1B.0020.0002][.0000.0032.0002][.0000.002B.0002] # LATIN SMALL LETTER U WITH MACRON AND DIAERESIS -1E7A ; [.1F1B.0020.0008][.0000.0032.0002][.0000.002B.0002] # LATIN CAPITAL LETTER U WITH MACRON AND DIAERESIS -1DF0 ; [.1F1B.0020.0004][.0000.0034.0004] # COMBINING LATIN SMALL LETTER U WITH LIGHT CENTRALIZATION STROKE -1EE7 ; [.1F1B.0020.0002][.0000.003B.0002] # LATIN SMALL LETTER U WITH HOOK ABOVE -1EE6 ; [.1F1B.0020.0008][.0000.003B.0002] # LATIN CAPITAL LETTER U WITH HOOK ABOVE -0215 ; [.1F1B.0020.0002][.0000.003C.0002] # LATIN SMALL LETTER U WITH DOUBLE GRAVE -0214 ; [.1F1B.0020.0008][.0000.003C.0002] # LATIN CAPITAL LETTER U WITH DOUBLE GRAVE -0217 ; [.1F1B.0020.0002][.0000.003E.0002] # LATIN SMALL LETTER U WITH INVERTED BREVE -0216 ; [.1F1B.0020.0008][.0000.003E.0002] # LATIN CAPITAL LETTER U WITH INVERTED BREVE -01B0 ; [.1F1B.0020.0002][.0000.003F.0002] # LATIN SMALL LETTER U WITH HORN -01AF ; [.1F1B.0020.0008][.0000.003F.0002] # LATIN CAPITAL LETTER U WITH HORN -1EE9 ; [.1F1B.0020.0002][.0000.003F.0002][.0000.0024.0002] # LATIN SMALL LETTER U WITH HORN AND ACUTE -1EE8 ; [.1F1B.0020.0008][.0000.003F.0002][.0000.0024.0002] # LATIN CAPITAL LETTER U WITH HORN AND ACUTE -1EEB ; [.1F1B.0020.0002][.0000.003F.0002][.0000.0025.0002] # LATIN SMALL LETTER U WITH HORN AND GRAVE -1EEA ; [.1F1B.0020.0008][.0000.003F.0002][.0000.0025.0002] # LATIN CAPITAL LETTER U WITH HORN AND GRAVE -1EEF ; [.1F1B.0020.0002][.0000.003F.0002][.0000.002D.0002] # LATIN SMALL LETTER U WITH HORN AND TILDE -1EEE ; [.1F1B.0020.0008][.0000.003F.0002][.0000.002D.0002] # LATIN CAPITAL LETTER U WITH HORN AND TILDE -1EED ; [.1F1B.0020.0002][.0000.003F.0002][.0000.003B.0002] # LATIN SMALL LETTER U WITH HORN AND HOOK ABOVE -1EEC ; [.1F1B.0020.0008][.0000.003F.0002][.0000.003B.0002] # LATIN CAPITAL LETTER U WITH HORN AND HOOK ABOVE -1EF1 ; [.1F1B.0020.0002][.0000.003F.0002][.0000.0042.0002] # LATIN SMALL LETTER U WITH HORN AND DOT BELOW -1EF0 ; [.1F1B.0020.0008][.0000.003F.0002][.0000.0042.0002] # LATIN CAPITAL LETTER U WITH HORN AND DOT BELOW -1EE5 ; [.1F1B.0020.0002][.0000.0042.0002] # LATIN SMALL LETTER U WITH DOT BELOW -1EE4 ; [.1F1B.0020.0008][.0000.0042.0002] # LATIN CAPITAL LETTER U WITH DOT BELOW -1E73 ; [.1F1B.0020.0002][.0000.0043.0002] # LATIN SMALL LETTER U WITH DIAERESIS BELOW -1E72 ; [.1F1B.0020.0008][.0000.0043.0002] # LATIN CAPITAL LETTER U WITH DIAERESIS BELOW -1E77 ; [.1F1B.0020.0002][.0000.0046.0002] # LATIN SMALL LETTER U WITH CIRCUMFLEX BELOW -1E76 ; [.1F1B.0020.0008][.0000.0046.0002] # LATIN CAPITAL LETTER U WITH CIRCUMFLEX BELOW -1E75 ; [.1F1B.0020.0002][.0000.0048.0002] # LATIN SMALL LETTER U WITH TILDE BELOW -1E74 ; [.1F1B.0020.0008][.0000.0048.0002] # LATIN CAPITAL LETTER U WITH TILDE BELOW -1F1AB ; [.1F1B.0020.001D][.1D7E.0020.001D][.1CF5.0020.001D] # SQUARED UHD -1F199 ; [.1F1B.0020.001D][.1E72.0020.001D][*0261.0020.001C] # SQUARED UP WITH EXCLAMATION MARK -1D1C ; [.1F1F.0020.0002] # LATIN LETTER SMALL CAPITAL U -1DB8 ; [.1F1F.0020.0014] # MODIFIER LETTER SMALL CAPITAL U -AB4E ; [.1F20.0020.0002] # LATIN SMALL LETTER U WITH SHORT RIGHT LEG -1D1D ; [.1F21.0020.0002] # LATIN SMALL LETTER SIDEWAYS U -1D59 ; [.1F21.0020.0014] # MODIFIER LETTER SMALL SIDEWAYS U -1D1E ; [.1F22.0020.0002] # LATIN SMALL LETTER SIDEWAYS DIAERESIZED U -1D6B ; [.1F23.0020.0002] # LATIN SMALL LETTER UE -AB50 ; [.1F24.0020.0002] # LATIN SMALL LETTER UI -AB51 ; [.1F25.0020.0002] # LATIN SMALL LETTER TURNED UI -0289 ; [.1F26.0020.0002] # LATIN SMALL LETTER U BAR -0244 ; [.1F26.0020.0008] # LATIN CAPITAL LETTER U BAR -1DB6 ; [.1F26.0020.0014] # MODIFIER LETTER SMALL U BAR -AB4F ; [.1F2A.0020.0002] # LATIN SMALL LETTER U BAR WITH SHORT RIGHT LEG -1D7E ; [.1F2B.0020.0002] # LATIN SMALL CAPITAL LETTER U WITH STROKE -1D99 ; [.1F2C.0020.0002] # LATIN SMALL LETTER U WITH RETROFLEX HOOK -AB52 ; [.1F2D.0020.0002] # LATIN SMALL LETTER U WITH LEFT HOOK -AB5F ; [.1F2D.0020.0014] # MODIFIER LETTER SMALL U WITH LEFT HOOK -0265 ; [.1F2E.0020.0002] # LATIN SMALL LETTER TURNED H -A78D ; [.1F2E.0020.0008] # LATIN CAPITAL LETTER TURNED H -1DA3 ; [.1F2E.0020.0014] # MODIFIER LETTER SMALL TURNED H -02AE ; [.1F32.0020.0002] # LATIN SMALL LETTER TURNED H WITH FISHHOOK -02AF ; [.1F36.0020.0002] # LATIN SMALL LETTER TURNED H WITH FISHHOOK AND TAIL -026F ; [.1F3A.0020.0002] # LATIN SMALL LETTER TURNED M -019C ; [.1F3A.0020.0008] # LATIN CAPITAL LETTER TURNED M -1D5A ; [.1F3A.0020.0014] # MODIFIER LETTER SMALL TURNED M -A7FA ; [.1F3E.0020.0002] # LATIN LETTER SMALL CAPITAL TURNED M -1D1F ; [.1F3F.0020.0002] # LATIN SMALL LETTER SIDEWAYS TURNED M -0270 ; [.1F40.0020.0002] # LATIN SMALL LETTER TURNED M WITH LONG LEG -1DAD ; [.1F40.0020.0014] # MODIFIER LETTER SMALL TURNED M WITH LONG LEG -028A ; [.1F44.0020.0002] # LATIN SMALL LETTER UPSILON -01B1 ; [.1F44.0020.0008] # LATIN CAPITAL LETTER UPSILON -1DB7 ; [.1F44.0020.0014] # MODIFIER LETTER SMALL UPSILON -1D7F ; [.1F48.0020.0002] # LATIN SMALL LETTER UPSILON WITH STROKE -0076 ; [.1F49.0020.0002] # LATIN SMALL LETTER V -FF56 ; [.1F49.0020.0003] # FULLWIDTH LATIN SMALL LETTER V -036E ; [.1F49.0020.0004] # COMBINING LATIN SMALL LETTER V -2174 ; [.1F49.0020.0004] # SMALL ROMAN NUMERAL FIVE -24B1 ; [*0318.0020.0004][.1F49.0020.0004][*0319.0020.0004] # PARENTHESIZED LATIN SMALL LETTER V -1D42F ; [.1F49.0020.0005] # MATHEMATICAL BOLD SMALL V -1D463 ; [.1F49.0020.0005] # MATHEMATICAL ITALIC SMALL V -1D497 ; [.1F49.0020.0005] # MATHEMATICAL BOLD ITALIC SMALL V -1D4CB ; [.1F49.0020.0005] # MATHEMATICAL SCRIPT SMALL V -1D4FF ; [.1F49.0020.0005] # MATHEMATICAL BOLD SCRIPT SMALL V -1D533 ; [.1F49.0020.0005] # MATHEMATICAL FRAKTUR SMALL V -1D567 ; [.1F49.0020.0005] # MATHEMATICAL DOUBLE-STRUCK SMALL V -1D59B ; [.1F49.0020.0005] # MATHEMATICAL BOLD FRAKTUR SMALL V -1D5CF ; [.1F49.0020.0005] # MATHEMATICAL SANS-SERIF SMALL V -1D603 ; [.1F49.0020.0005] # MATHEMATICAL SANS-SERIF BOLD SMALL V -1D637 ; [.1F49.0020.0005] # MATHEMATICAL SANS-SERIF ITALIC SMALL V -1D66B ; [.1F49.0020.0005] # MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL V -1D69F ; [.1F49.0020.0005] # MATHEMATICAL MONOSPACE SMALL V -24E5 ; [.1F49.0020.0006] # CIRCLED LATIN SMALL LETTER V -0056 ; [.1F49.0020.0008] # LATIN CAPITAL LETTER V -FF36 ; [.1F49.0020.0009] # FULLWIDTH LATIN CAPITAL LETTER V -2164 ; [.1F49.0020.000A] # ROMAN NUMERAL FIVE -1F125 ; [*0318.0020.0004][.1F49.0020.000A][*0319.0020.0004] # PARENTHESIZED LATIN CAPITAL LETTER V -1D415 ; [.1F49.0020.000B] # MATHEMATICAL BOLD CAPITAL V -1D449 ; [.1F49.0020.000B] # MATHEMATICAL ITALIC CAPITAL V -1D47D ; [.1F49.0020.000B] # MATHEMATICAL BOLD ITALIC CAPITAL V -1D4B1 ; [.1F49.0020.000B] # MATHEMATICAL SCRIPT CAPITAL V -1D4E5 ; [.1F49.0020.000B] # MATHEMATICAL BOLD SCRIPT CAPITAL V -1D519 ; [.1F49.0020.000B] # MATHEMATICAL FRAKTUR CAPITAL V -1D54D ; [.1F49.0020.000B] # MATHEMATICAL DOUBLE-STRUCK CAPITAL V -1D581 ; [.1F49.0020.000B] # MATHEMATICAL BOLD FRAKTUR CAPITAL V -1D5B5 ; [.1F49.0020.000B] # MATHEMATICAL SANS-SERIF CAPITAL V -1D5E9 ; [.1F49.0020.000B] # MATHEMATICAL SANS-SERIF BOLD CAPITAL V -1D61D ; [.1F49.0020.000B] # MATHEMATICAL SANS-SERIF ITALIC CAPITAL V -1D651 ; [.1F49.0020.000B] # MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL V -1D685 ; [.1F49.0020.000B] # MATHEMATICAL MONOSPACE CAPITAL V -24CB ; [.1F49.0020.000C] # CIRCLED LATIN CAPITAL LETTER V -1F165 ; [.1F49.0020.000C] # NEGATIVE CIRCLED LATIN CAPITAL LETTER V -1D5B ; [.1F49.0020.0014] # MODIFIER LETTER SMALL V -1D65 ; [.1F49.0020.0015] # LATIN SUBSCRIPT SMALL LETTER V -2C7D ; [.1F49.0020.001D] # MODIFIER LETTER CAPITAL V -1F145 ; [.1F49.0020.001D] # SQUARED LATIN CAPITAL LETTER V -1F185 ; [.1F49.0020.001D] # NEGATIVE SQUARED LATIN CAPITAL LETTER V -1E7D ; [.1F49.0020.0002][.0000.002D.0002] # LATIN SMALL LETTER V WITH TILDE -1E7C ; [.1F49.0020.0008][.0000.002D.0002] # LATIN CAPITAL LETTER V WITH TILDE -1E7F ; [.1F49.0020.0002][.0000.0042.0002] # LATIN SMALL LETTER V WITH DOT BELOW -1E7E ; [.1F49.0020.0008][.0000.0042.0002] # LATIN CAPITAL LETTER V WITH DOT BELOW -2175 ; [.1F49.0020.0004][.1D98.0020.0004] # SMALL ROMAN NUMERAL SIX -2165 ; [.1F49.0020.000A][.1D98.0020.000A] # ROMAN NUMERAL SIX -2176 ; [.1F49.0020.0004][.1D98.0020.0004][.1D98.0020.0004] # SMALL ROMAN NUMERAL SEVEN -2166 ; [.1F49.0020.000A][.1D98.0020.000A][.1D98.0020.000A] # ROMAN NUMERAL SEVEN -2177 ; [.1F49.0020.0004][.1D98.0020.0004][.1D98.0020.0004][.1D98.0020.0004] # SMALL ROMAN NUMERAL EIGHT -2167 ; [.1F49.0020.000A][.1D98.0020.000A][.1D98.0020.000A][.1D98.0020.000A] # ROMAN NUMERAL EIGHT -33DE ; [.1F49.0020.001D][*063B.0020.001C][.1E10.0020.001C] # SQUARE V OVER M -1F1AC ; [.1F49.0020.001D][.1E43.0020.001D][.1CF5.0020.001D] # SQUARED VOD -1F19A ; [.1F49.0020.001D][.1ED7.0020.001D] # SQUARED VS -A761 ; [.1F49.0020.0004][.1F71.0020.0004] # LATIN SMALL LETTER VY -A760 ; [.1F49.0020.000A][.1F71.0020.000A] # LATIN CAPITAL LETTER VY -1D20 ; [.1F4D.0020.0002] # LATIN LETTER SMALL CAPITAL V -A75F ; [.1F4E.0020.0002] # LATIN SMALL LETTER V WITH DIAGONAL STROKE -A75E ; [.1F4E.0020.0008] # LATIN CAPITAL LETTER V WITH DIAGONAL STROKE -1D8C ; [.1F4F.0020.0002] # LATIN SMALL LETTER V WITH PALATAL HOOK -028B ; [.1F50.0020.0002] # LATIN SMALL LETTER V WITH HOOK -01B2 ; [.1F50.0020.0008] # LATIN CAPITAL LETTER V WITH HOOK -1DB9 ; [.1F50.0020.0014] # MODIFIER LETTER SMALL V WITH HOOK -2C71 ; [.1F54.0020.0002] # LATIN SMALL LETTER V WITH RIGHT HOOK -2C74 ; [.1F55.0020.0002] # LATIN SMALL LETTER V WITH CURL -1EFD ; [.1F56.0020.0002] # LATIN SMALL LETTER MIDDLE-WELSH V -1EFC ; [.1F56.0020.0008] # LATIN CAPITAL LETTER MIDDLE-WELSH V -028C ; [.1F57.0020.0002] # LATIN SMALL LETTER TURNED V -0245 ; [.1F57.0020.0008] # LATIN CAPITAL LETTER TURNED V -1DBA ; [.1F57.0020.0014] # MODIFIER LETTER SMALL TURNED V -0077 ; [.1F5B.0020.0002] # LATIN SMALL LETTER W -FF57 ; [.1F5B.0020.0003] # FULLWIDTH LATIN SMALL LETTER W -1DF1 ; [.1F5B.0020.0004] # COMBINING LATIN SMALL LETTER W -24B2 ; [*0318.0020.0004][.1F5B.0020.0004][*0319.0020.0004] # PARENTHESIZED LATIN SMALL LETTER W -1D430 ; [.1F5B.0020.0005] # MATHEMATICAL BOLD SMALL W -1D464 ; [.1F5B.0020.0005] # MATHEMATICAL ITALIC SMALL W -1D498 ; [.1F5B.0020.0005] # MATHEMATICAL BOLD ITALIC SMALL W -1D4CC ; [.1F5B.0020.0005] # MATHEMATICAL SCRIPT SMALL W -1D500 ; [.1F5B.0020.0005] # MATHEMATICAL BOLD SCRIPT SMALL W -1D534 ; [.1F5B.0020.0005] # MATHEMATICAL FRAKTUR SMALL W -1D568 ; [.1F5B.0020.0005] # MATHEMATICAL DOUBLE-STRUCK SMALL W -1D59C ; [.1F5B.0020.0005] # MATHEMATICAL BOLD FRAKTUR SMALL W -1D5D0 ; [.1F5B.0020.0005] # MATHEMATICAL SANS-SERIF SMALL W -1D604 ; [.1F5B.0020.0005] # MATHEMATICAL SANS-SERIF BOLD SMALL W -1D638 ; [.1F5B.0020.0005] # MATHEMATICAL SANS-SERIF ITALIC SMALL W -1D66C ; [.1F5B.0020.0005] # MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL W -1D6A0 ; [.1F5B.0020.0005] # MATHEMATICAL MONOSPACE SMALL W -24E6 ; [.1F5B.0020.0006] # CIRCLED LATIN SMALL LETTER W -0057 ; [.1F5B.0020.0008] # LATIN CAPITAL LETTER W -FF37 ; [.1F5B.0020.0009] # FULLWIDTH LATIN CAPITAL LETTER W -1F126 ; [*0318.0020.0004][.1F5B.0020.000A][*0319.0020.0004] # PARENTHESIZED LATIN CAPITAL LETTER W -1D416 ; [.1F5B.0020.000B] # MATHEMATICAL BOLD CAPITAL W -1D44A ; [.1F5B.0020.000B] # MATHEMATICAL ITALIC CAPITAL W -1D47E ; [.1F5B.0020.000B] # MATHEMATICAL BOLD ITALIC CAPITAL W -1D4B2 ; [.1F5B.0020.000B] # MATHEMATICAL SCRIPT CAPITAL W -1D4E6 ; [.1F5B.0020.000B] # MATHEMATICAL BOLD SCRIPT CAPITAL W -1D51A ; [.1F5B.0020.000B] # MATHEMATICAL FRAKTUR CAPITAL W -1D54E ; [.1F5B.0020.000B] # MATHEMATICAL DOUBLE-STRUCK CAPITAL W -1D582 ; [.1F5B.0020.000B] # MATHEMATICAL BOLD FRAKTUR CAPITAL W -1D5B6 ; [.1F5B.0020.000B] # MATHEMATICAL SANS-SERIF CAPITAL W -1D5EA ; [.1F5B.0020.000B] # MATHEMATICAL SANS-SERIF BOLD CAPITAL W -1D61E ; [.1F5B.0020.000B] # MATHEMATICAL SANS-SERIF ITALIC CAPITAL W -1D652 ; [.1F5B.0020.000B] # MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL W -1D686 ; [.1F5B.0020.000B] # MATHEMATICAL MONOSPACE CAPITAL W -24CC ; [.1F5B.0020.000C] # CIRCLED LATIN CAPITAL LETTER W -1F166 ; [.1F5B.0020.000C] # NEGATIVE CIRCLED LATIN CAPITAL LETTER W -02B7 ; [.1F5B.0020.0014] # MODIFIER LETTER SMALL W -1D42 ; [.1F5B.0020.001D] # MODIFIER LETTER CAPITAL W -1F146 ; [.1F5B.0020.001D] # SQUARED LATIN CAPITAL LETTER W -1F186 ; [.1F5B.0020.001D] # NEGATIVE SQUARED LATIN CAPITAL LETTER W -1E83 ; [.1F5B.0020.0002][.0000.0024.0002] # LATIN SMALL LETTER W WITH ACUTE -1E82 ; [.1F5B.0020.0008][.0000.0024.0002] # LATIN CAPITAL LETTER W WITH ACUTE -1E81 ; [.1F5B.0020.0002][.0000.0025.0002] # LATIN SMALL LETTER W WITH GRAVE -1E80 ; [.1F5B.0020.0008][.0000.0025.0002] # LATIN CAPITAL LETTER W WITH GRAVE -0175 ; [.1F5B.0020.0002][.0000.0027.0002] # LATIN SMALL LETTER W WITH CIRCUMFLEX -0174 ; [.1F5B.0020.0008][.0000.0027.0002] # LATIN CAPITAL LETTER W WITH CIRCUMFLEX -1E98 ; [.1F5B.0020.0002][.0000.0029.0002] # LATIN SMALL LETTER W WITH RING ABOVE -1E85 ; [.1F5B.0020.0002][.0000.002B.0002] # LATIN SMALL LETTER W WITH DIAERESIS -1E84 ; [.1F5B.0020.0008][.0000.002B.0002] # LATIN CAPITAL LETTER W WITH DIAERESIS -1E87 ; [.1F5B.0020.0002][.0000.002E.0002] # LATIN SMALL LETTER W WITH DOT ABOVE -1E86 ; [.1F5B.0020.0008][.0000.002E.0002] # LATIN CAPITAL LETTER W WITH DOT ABOVE -1E89 ; [.1F5B.0020.0002][.0000.0042.0002] # LATIN SMALL LETTER W WITH DOT BELOW -1E88 ; [.1F5B.0020.0008][.0000.0042.0002] # LATIN CAPITAL LETTER W WITH DOT BELOW -33DD ; [.1F5B.0020.001D][.1CC6.0020.001C] # SQUARE WB -1F14F ; [.1F5B.0020.001D][.1CE0.0020.001D] # SQUARED WC -1F18F ; [.1F5B.0020.001D][.1CE0.0020.001D] # NEGATIVE SQUARED WC -1F12E ; [.1F5B.0020.000C][.1F87.0020.000C] # CIRCLED WZ -1D21 ; [.1F5F.0020.0002] # LATIN LETTER SMALL CAPITAL W -2C73 ; [.1F60.0020.0002] # LATIN SMALL LETTER W WITH HOOK -2C72 ; [.1F60.0020.0008] # LATIN CAPITAL LETTER W WITH HOOK -028D ; [.1F61.0020.0002] # LATIN SMALL LETTER TURNED W -0078 ; [.1F65.0020.0002] # LATIN SMALL LETTER X -FF58 ; [.1F65.0020.0003] # FULLWIDTH LATIN SMALL LETTER X -036F ; [.1F65.0020.0004] # COMBINING LATIN SMALL LETTER X -2179 ; [.1F65.0020.0004] # SMALL ROMAN NUMERAL TEN -24B3 ; [*0318.0020.0004][.1F65.0020.0004][*0319.0020.0004] # PARENTHESIZED LATIN SMALL LETTER X -1D431 ; [.1F65.0020.0005] # MATHEMATICAL BOLD SMALL X -1D465 ; [.1F65.0020.0005] # MATHEMATICAL ITALIC SMALL X -1D499 ; [.1F65.0020.0005] # MATHEMATICAL BOLD ITALIC SMALL X -1D4CD ; [.1F65.0020.0005] # MATHEMATICAL SCRIPT SMALL X -1D501 ; [.1F65.0020.0005] # MATHEMATICAL BOLD SCRIPT SMALL X -1D535 ; [.1F65.0020.0005] # MATHEMATICAL FRAKTUR SMALL X -1D569 ; [.1F65.0020.0005] # MATHEMATICAL DOUBLE-STRUCK SMALL X -1D59D ; [.1F65.0020.0005] # MATHEMATICAL BOLD FRAKTUR SMALL X -1D5D1 ; [.1F65.0020.0005] # MATHEMATICAL SANS-SERIF SMALL X -1D605 ; [.1F65.0020.0005] # MATHEMATICAL SANS-SERIF BOLD SMALL X -1D639 ; [.1F65.0020.0005] # MATHEMATICAL SANS-SERIF ITALIC SMALL X -1D66D ; [.1F65.0020.0005] # MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL X -1D6A1 ; [.1F65.0020.0005] # MATHEMATICAL MONOSPACE SMALL X -24E7 ; [.1F65.0020.0006] # CIRCLED LATIN SMALL LETTER X -0058 ; [.1F65.0020.0008] # LATIN CAPITAL LETTER X -FF38 ; [.1F65.0020.0009] # FULLWIDTH LATIN CAPITAL LETTER X -2169 ; [.1F65.0020.000A] # ROMAN NUMERAL TEN -1F127 ; [*0318.0020.0004][.1F65.0020.000A][*0319.0020.0004] # PARENTHESIZED LATIN CAPITAL LETTER X -1D417 ; [.1F65.0020.000B] # MATHEMATICAL BOLD CAPITAL X -1D44B ; [.1F65.0020.000B] # MATHEMATICAL ITALIC CAPITAL X -1D47F ; [.1F65.0020.000B] # MATHEMATICAL BOLD ITALIC CAPITAL X -1D4B3 ; [.1F65.0020.000B] # MATHEMATICAL SCRIPT CAPITAL X -1D4E7 ; [.1F65.0020.000B] # MATHEMATICAL BOLD SCRIPT CAPITAL X -1D51B ; [.1F65.0020.000B] # MATHEMATICAL FRAKTUR CAPITAL X -1D54F ; [.1F65.0020.000B] # MATHEMATICAL DOUBLE-STRUCK CAPITAL X -1D583 ; [.1F65.0020.000B] # MATHEMATICAL BOLD FRAKTUR CAPITAL X -1D5B7 ; [.1F65.0020.000B] # MATHEMATICAL SANS-SERIF CAPITAL X -1D5EB ; [.1F65.0020.000B] # MATHEMATICAL SANS-SERIF BOLD CAPITAL X -1D61F ; [.1F65.0020.000B] # MATHEMATICAL SANS-SERIF ITALIC CAPITAL X -1D653 ; [.1F65.0020.000B] # MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL X -1D687 ; [.1F65.0020.000B] # MATHEMATICAL MONOSPACE CAPITAL X -24CD ; [.1F65.0020.000C] # CIRCLED LATIN CAPITAL LETTER X -1F167 ; [.1F65.0020.000C] # NEGATIVE CIRCLED LATIN CAPITAL LETTER X -02E3 ; [.1F65.0020.0014] # MODIFIER LETTER SMALL X -2093 ; [.1F65.0020.0015] # LATIN SUBSCRIPT SMALL LETTER X -1F147 ; [.1F65.0020.001D] # SQUARED LATIN CAPITAL LETTER X -1F187 ; [.1F65.0020.001D] # NEGATIVE SQUARED LATIN CAPITAL LETTER X -1E8D ; [.1F65.0020.0002][.0000.002B.0002] # LATIN SMALL LETTER X WITH DIAERESIS -1E8C ; [.1F65.0020.0008][.0000.002B.0002] # LATIN CAPITAL LETTER X WITH DIAERESIS -1E8B ; [.1F65.0020.0002][.0000.002E.0002] # LATIN SMALL LETTER X WITH DOT ABOVE -1E8A ; [.1F65.0020.0008][.0000.002E.0002] # LATIN CAPITAL LETTER X WITH DOT ABOVE -217A ; [.1F65.0020.0004][.1D98.0020.0004] # SMALL ROMAN NUMERAL ELEVEN -216A ; [.1F65.0020.000A][.1D98.0020.000A] # ROMAN NUMERAL ELEVEN -217B ; [.1F65.0020.0004][.1D98.0020.0004][.1D98.0020.0004] # SMALL ROMAN NUMERAL TWELVE -216B ; [.1F65.0020.000A][.1D98.0020.000A][.1D98.0020.000A] # ROMAN NUMERAL TWELVE -1D8D ; [.1F69.0020.0002] # LATIN SMALL LETTER X WITH PALATAL HOOK -AB56 ; [.1F6A.0020.0002] # LATIN SMALL LETTER X WITH LOW RIGHT RING -AB57 ; [.1F6B.0020.0002] # LATIN SMALL LETTER X WITH LONG LEFT LEG -AB58 ; [.1F6C.0020.0002] # LATIN SMALL LETTER X WITH LONG LEFT LEG AND LOW RIGHT RING -AB59 ; [.1F6D.0020.0002] # LATIN SMALL LETTER X WITH LONG LEFT LEG WITH SERIF -AB53 ; [.1F6E.0020.0002] # LATIN SMALL LETTER CHI -A7B3 ; [.1F6E.0020.0008] # LATIN CAPITAL LETTER CHI -AB54 ; [.1F6F.0020.0002] # LATIN SMALL LETTER CHI WITH LOW RIGHT RING -AB55 ; [.1F70.0020.0002] # LATIN SMALL LETTER CHI WITH LOW LEFT SERIF -0079 ; [.1F71.0020.0002] # LATIN SMALL LETTER Y -FF59 ; [.1F71.0020.0003] # FULLWIDTH LATIN SMALL LETTER Y -24B4 ; [*0318.0020.0004][.1F71.0020.0004][*0319.0020.0004] # PARENTHESIZED LATIN SMALL LETTER Y -1D432 ; [.1F71.0020.0005] # MATHEMATICAL BOLD SMALL Y -1D466 ; [.1F71.0020.0005] # MATHEMATICAL ITALIC SMALL Y -1D49A ; [.1F71.0020.0005] # MATHEMATICAL BOLD ITALIC SMALL Y -1D4CE ; [.1F71.0020.0005] # MATHEMATICAL SCRIPT SMALL Y -1D502 ; [.1F71.0020.0005] # MATHEMATICAL BOLD SCRIPT SMALL Y -1D536 ; [.1F71.0020.0005] # MATHEMATICAL FRAKTUR SMALL Y -1D56A ; [.1F71.0020.0005] # MATHEMATICAL DOUBLE-STRUCK SMALL Y -1D59E ; [.1F71.0020.0005] # MATHEMATICAL BOLD FRAKTUR SMALL Y -1D5D2 ; [.1F71.0020.0005] # MATHEMATICAL SANS-SERIF SMALL Y -1D606 ; [.1F71.0020.0005] # MATHEMATICAL SANS-SERIF BOLD SMALL Y -1D63A ; [.1F71.0020.0005] # MATHEMATICAL SANS-SERIF ITALIC SMALL Y -1D66E ; [.1F71.0020.0005] # MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL Y -1D6A2 ; [.1F71.0020.0005] # MATHEMATICAL MONOSPACE SMALL Y -24E8 ; [.1F71.0020.0006] # CIRCLED LATIN SMALL LETTER Y -0059 ; [.1F71.0020.0008] # LATIN CAPITAL LETTER Y -FF39 ; [.1F71.0020.0009] # FULLWIDTH LATIN CAPITAL LETTER Y -1F128 ; [*0318.0020.0004][.1F71.0020.000A][*0319.0020.0004] # PARENTHESIZED LATIN CAPITAL LETTER Y -1D418 ; [.1F71.0020.000B] # MATHEMATICAL BOLD CAPITAL Y -1D44C ; [.1F71.0020.000B] # MATHEMATICAL ITALIC CAPITAL Y -1D480 ; [.1F71.0020.000B] # MATHEMATICAL BOLD ITALIC CAPITAL Y -1D4B4 ; [.1F71.0020.000B] # MATHEMATICAL SCRIPT CAPITAL Y -1D4E8 ; [.1F71.0020.000B] # MATHEMATICAL BOLD SCRIPT CAPITAL Y -1D51C ; [.1F71.0020.000B] # MATHEMATICAL FRAKTUR CAPITAL Y -1D550 ; [.1F71.0020.000B] # MATHEMATICAL DOUBLE-STRUCK CAPITAL Y -1D584 ; [.1F71.0020.000B] # MATHEMATICAL BOLD FRAKTUR CAPITAL Y -1D5B8 ; [.1F71.0020.000B] # MATHEMATICAL SANS-SERIF CAPITAL Y -1D5EC ; [.1F71.0020.000B] # MATHEMATICAL SANS-SERIF BOLD CAPITAL Y -1D620 ; [.1F71.0020.000B] # MATHEMATICAL SANS-SERIF ITALIC CAPITAL Y -1D654 ; [.1F71.0020.000B] # MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL Y -1D688 ; [.1F71.0020.000B] # MATHEMATICAL MONOSPACE CAPITAL Y -24CE ; [.1F71.0020.000C] # CIRCLED LATIN CAPITAL LETTER Y -1F168 ; [.1F71.0020.000C] # NEGATIVE CIRCLED LATIN CAPITAL LETTER Y -02B8 ; [.1F71.0020.0014] # MODIFIER LETTER SMALL Y -1F148 ; [.1F71.0020.001D] # SQUARED LATIN CAPITAL LETTER Y -1F188 ; [.1F71.0020.001D] # NEGATIVE SQUARED LATIN CAPITAL LETTER Y -00FD ; [.1F71.0020.0002][.0000.0024.0002] # LATIN SMALL LETTER Y WITH ACUTE -00DD ; [.1F71.0020.0008][.0000.0024.0002] # LATIN CAPITAL LETTER Y WITH ACUTE -1EF3 ; [.1F71.0020.0002][.0000.0025.0002] # LATIN SMALL LETTER Y WITH GRAVE -1EF2 ; [.1F71.0020.0008][.0000.0025.0002] # LATIN CAPITAL LETTER Y WITH GRAVE -0177 ; [.1F71.0020.0002][.0000.0027.0002] # LATIN SMALL LETTER Y WITH CIRCUMFLEX -0176 ; [.1F71.0020.0008][.0000.0027.0002] # LATIN CAPITAL LETTER Y WITH CIRCUMFLEX -1E99 ; [.1F71.0020.0002][.0000.0029.0002] # LATIN SMALL LETTER Y WITH RING ABOVE -00FF ; [.1F71.0020.0002][.0000.002B.0002] # LATIN SMALL LETTER Y WITH DIAERESIS -0178 ; [.1F71.0020.0008][.0000.002B.0002] # LATIN CAPITAL LETTER Y WITH DIAERESIS -1EF9 ; [.1F71.0020.0002][.0000.002D.0002] # LATIN SMALL LETTER Y WITH TILDE -1EF8 ; [.1F71.0020.0008][.0000.002D.0002] # LATIN CAPITAL LETTER Y WITH TILDE -1E8F ; [.1F71.0020.0002][.0000.002E.0002] # LATIN SMALL LETTER Y WITH DOT ABOVE -1E8E ; [.1F71.0020.0008][.0000.002E.0002] # LATIN CAPITAL LETTER Y WITH DOT ABOVE -0233 ; [.1F71.0020.0002][.0000.0032.0002] # LATIN SMALL LETTER Y WITH MACRON -0232 ; [.1F71.0020.0008][.0000.0032.0002] # LATIN CAPITAL LETTER Y WITH MACRON -1EF7 ; [.1F71.0020.0002][.0000.003B.0002] # LATIN SMALL LETTER Y WITH HOOK ABOVE -1EF6 ; [.1F71.0020.0008][.0000.003B.0002] # LATIN CAPITAL LETTER Y WITH HOOK ABOVE -1EF5 ; [.1F71.0020.0002][.0000.0042.0002] # LATIN SMALL LETTER Y WITH DOT BELOW -1EF4 ; [.1F71.0020.0008][.0000.0042.0002] # LATIN CAPITAL LETTER Y WITH DOT BELOW -028F ; [.1F75.0020.0002] # LATIN LETTER SMALL CAPITAL Y -024F ; [.1F79.0020.0002] # LATIN SMALL LETTER Y WITH STROKE -024E ; [.1F79.0020.0008] # LATIN CAPITAL LETTER Y WITH STROKE -01B4 ; [.1F7D.0020.0002] # LATIN SMALL LETTER Y WITH HOOK -01B3 ; [.1F7D.0020.0008] # LATIN CAPITAL LETTER Y WITH HOOK -1EFF ; [.1F81.0020.0002] # LATIN SMALL LETTER Y WITH LOOP -1EFE ; [.1F81.0020.0008] # LATIN CAPITAL LETTER Y WITH LOOP -AB5A ; [.1F82.0020.0002] # LATIN SMALL LETTER Y WITH SHORT RIGHT LEG -021D ; [.1F83.0020.0002] # LATIN SMALL LETTER YOGH -021C ; [.1F83.0020.0008] # LATIN CAPITAL LETTER YOGH -007A ; [.1F87.0020.0002] # LATIN SMALL LETTER Z -FF5A ; [.1F87.0020.0003] # FULLWIDTH LATIN SMALL LETTER Z -1DE6 ; [.1F87.0020.0004] # COMBINING LATIN SMALL LETTER Z -24B5 ; [*0318.0020.0004][.1F87.0020.0004][*0319.0020.0004] # PARENTHESIZED LATIN SMALL LETTER Z -1D433 ; [.1F87.0020.0005] # MATHEMATICAL BOLD SMALL Z -1D467 ; [.1F87.0020.0005] # MATHEMATICAL ITALIC SMALL Z -1D49B ; [.1F87.0020.0005] # MATHEMATICAL BOLD ITALIC SMALL Z -1D4CF ; [.1F87.0020.0005] # MATHEMATICAL SCRIPT SMALL Z -1D503 ; [.1F87.0020.0005] # MATHEMATICAL BOLD SCRIPT SMALL Z -1D537 ; [.1F87.0020.0005] # MATHEMATICAL FRAKTUR SMALL Z -1D56B ; [.1F87.0020.0005] # MATHEMATICAL DOUBLE-STRUCK SMALL Z -1D59F ; [.1F87.0020.0005] # MATHEMATICAL BOLD FRAKTUR SMALL Z -1D5D3 ; [.1F87.0020.0005] # MATHEMATICAL SANS-SERIF SMALL Z -1D607 ; [.1F87.0020.0005] # MATHEMATICAL SANS-SERIF BOLD SMALL Z -1D63B ; [.1F87.0020.0005] # MATHEMATICAL SANS-SERIF ITALIC SMALL Z -1D66F ; [.1F87.0020.0005] # MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL Z -1D6A3 ; [.1F87.0020.0005] # MATHEMATICAL MONOSPACE SMALL Z -24E9 ; [.1F87.0020.0006] # CIRCLED LATIN SMALL LETTER Z -005A ; [.1F87.0020.0008] # LATIN CAPITAL LETTER Z -FF3A ; [.1F87.0020.0009] # FULLWIDTH LATIN CAPITAL LETTER Z -1F129 ; [*0318.0020.0004][.1F87.0020.000A][*0319.0020.0004] # PARENTHESIZED LATIN CAPITAL LETTER Z -2124 ; [.1F87.0020.000B] # DOUBLE-STRUCK CAPITAL Z -2128 ; [.1F87.0020.000B] # BLACK-LETTER CAPITAL Z -1D419 ; [.1F87.0020.000B] # MATHEMATICAL BOLD CAPITAL Z -1D44D ; [.1F87.0020.000B] # MATHEMATICAL ITALIC CAPITAL Z -1D481 ; [.1F87.0020.000B] # MATHEMATICAL BOLD ITALIC CAPITAL Z -1D4B5 ; [.1F87.0020.000B] # MATHEMATICAL SCRIPT CAPITAL Z -1D4E9 ; [.1F87.0020.000B] # MATHEMATICAL BOLD SCRIPT CAPITAL Z -1D585 ; [.1F87.0020.000B] # MATHEMATICAL BOLD FRAKTUR CAPITAL Z -1D5B9 ; [.1F87.0020.000B] # MATHEMATICAL SANS-SERIF CAPITAL Z -1D5ED ; [.1F87.0020.000B] # MATHEMATICAL SANS-SERIF BOLD CAPITAL Z -1D621 ; [.1F87.0020.000B] # MATHEMATICAL SANS-SERIF ITALIC CAPITAL Z -1D655 ; [.1F87.0020.000B] # MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL Z -1D689 ; [.1F87.0020.000B] # MATHEMATICAL MONOSPACE CAPITAL Z -24CF ; [.1F87.0020.000C] # CIRCLED LATIN CAPITAL LETTER Z -1F169 ; [.1F87.0020.000C] # NEGATIVE CIRCLED LATIN CAPITAL LETTER Z -1DBB ; [.1F87.0020.0014] # MODIFIER LETTER SMALL Z -1F149 ; [.1F87.0020.001D] # SQUARED LATIN CAPITAL LETTER Z -1F189 ; [.1F87.0020.001D] # NEGATIVE SQUARED LATIN CAPITAL LETTER Z -017A ; [.1F87.0020.0002][.0000.0024.0002] # LATIN SMALL LETTER Z WITH ACUTE -0179 ; [.1F87.0020.0008][.0000.0024.0002] # LATIN CAPITAL LETTER Z WITH ACUTE -1E91 ; [.1F87.0020.0002][.0000.0027.0002] # LATIN SMALL LETTER Z WITH CIRCUMFLEX -1E90 ; [.1F87.0020.0008][.0000.0027.0002] # LATIN CAPITAL LETTER Z WITH CIRCUMFLEX -017E ; [.1F87.0020.0002][.0000.0028.0002] # LATIN SMALL LETTER Z WITH CARON -017D ; [.1F87.0020.0008][.0000.0028.0002] # LATIN CAPITAL LETTER Z WITH CARON -017C ; [.1F87.0020.0002][.0000.002E.0002] # LATIN SMALL LETTER Z WITH DOT ABOVE -017B ; [.1F87.0020.0008][.0000.002E.0002] # LATIN CAPITAL LETTER Z WITH DOT ABOVE -1E93 ; [.1F87.0020.0002][.0000.0042.0002] # LATIN SMALL LETTER Z WITH DOT BELOW -1E92 ; [.1F87.0020.0008][.0000.0042.0002] # LATIN CAPITAL LETTER Z WITH DOT BELOW -1E95 ; [.1F87.0020.0002][.0000.0049.0002] # LATIN SMALL LETTER Z WITH LINE BELOW -1E94 ; [.1F87.0020.0008][.0000.0049.0002] # LATIN CAPITAL LETTER Z WITH LINE BELOW -018D ; [.1F87.0020.0004][.1F5B.0020.0004] # LATIN SMALL LETTER TURNED DELTA -1D22 ; [.1F8B.0020.0002] # LATIN LETTER SMALL CAPITAL Z -01B6 ; [.1F8C.0020.0002] # LATIN SMALL LETTER Z WITH STROKE -01B5 ; [.1F8C.0020.0008] # LATIN CAPITAL LETTER Z WITH STROKE -1D76 ; [.1F90.0020.0002] # LATIN SMALL LETTER Z WITH MIDDLE TILDE -1D8E ; [.1F91.0020.0002] # LATIN SMALL LETTER Z WITH PALATAL HOOK -0225 ; [.1F92.0020.0002] # LATIN SMALL LETTER Z WITH HOOK -0224 ; [.1F92.0020.0008] # LATIN CAPITAL LETTER Z WITH HOOK -0290 ; [.1F96.0020.0002] # LATIN SMALL LETTER Z WITH RETROFLEX HOOK -1DBC ; [.1F96.0020.0014] # MODIFIER LETTER SMALL Z WITH RETROFLEX HOOK -0291 ; [.1F9A.0020.0002] # LATIN SMALL LETTER Z WITH CURL -1DBD ; [.1F9A.0020.0014] # MODIFIER LETTER SMALL Z WITH CURL -0240 ; [.1F9E.0020.0002] # LATIN SMALL LETTER Z WITH SWASH TAIL -2C7F ; [.1F9E.0020.0008] # LATIN CAPITAL LETTER Z WITH SWASH TAIL -2C6C ; [.1FA2.0020.0002] # LATIN SMALL LETTER Z WITH DESCENDER -2C6B ; [.1FA2.0020.0008] # LATIN CAPITAL LETTER Z WITH DESCENDER -A763 ; [.1FA3.0020.0002] # LATIN SMALL LETTER VISIGOTHIC Z -A762 ; [.1FA3.0020.0008] # LATIN CAPITAL LETTER VISIGOTHIC Z -0292 ; [.1FA4.0020.0002] # LATIN SMALL LETTER EZH -01B7 ; [.1FA4.0020.0008] # LATIN CAPITAL LETTER EZH -1DBE ; [.1FA4.0020.0014] # MODIFIER LETTER SMALL EZH -01EF ; [.1FA4.0020.0002][.0000.0028.0002] # LATIN SMALL LETTER EZH WITH CARON -01EE ; [.1FA4.0020.0008][.0000.0028.0002] # LATIN CAPITAL LETTER EZH WITH CARON -1D23 ; [.1FA8.0020.0002] # LATIN LETTER SMALL CAPITAL EZH -01B9 ; [.1FA9.0020.0002] # LATIN SMALL LETTER EZH REVERSED -01B8 ; [.1FA9.0020.0008] # LATIN CAPITAL LETTER EZH REVERSED -1D9A ; [.1FAD.0020.0002] # LATIN SMALL LETTER EZH WITH RETROFLEX HOOK -01BA ; [.1FAE.0020.0002] # LATIN SMALL LETTER EZH WITH TAIL -0293 ; [.1FB2.0020.0002] # LATIN SMALL LETTER EZH WITH CURL -00FE ; [.1FB6.0020.0002] # LATIN SMALL LETTER THORN -00DE ; [.1FB6.0020.0008] # LATIN CAPITAL LETTER THORN -A765 ; [.1FBA.0020.0002] # LATIN SMALL LETTER THORN WITH STROKE -A764 ; [.1FBA.0020.0008] # LATIN CAPITAL LETTER THORN WITH STROKE -A767 ; [.1FBB.0020.0002] # LATIN SMALL LETTER THORN WITH STROKE THROUGH DESCENDER -A766 ; [.1FBB.0020.0008] # LATIN CAPITAL LETTER THORN WITH STROKE THROUGH DESCENDER -01BF ; [.1FBC.0020.0002] # LATIN LETTER WYNN -01F7 ; [.1FBC.0020.0008] # LATIN CAPITAL LETTER WYNN -A769 ; [.1FC0.0020.0002] # LATIN SMALL LETTER VEND -A768 ; [.1FC0.0020.0008] # LATIN CAPITAL LETTER VEND -AB60 ; [.1FC1.0020.0002] # LATIN SMALL LETTER SAKHA YAT -AB61 ; [.1FC2.0020.0002] # LATIN SMALL LETTER IOTIFIED E -AB63 ; [.1FC3.0020.0002] # LATIN SMALL LETTER UO -A76B ; [.1FC4.0020.0002] # LATIN SMALL LETTER ET -A76A ; [.1FC4.0020.0008] # LATIN CAPITAL LETTER ET -A76D ; [.1FC5.0020.0002] # LATIN SMALL LETTER IS -A76C ; [.1FC5.0020.0008] # LATIN CAPITAL LETTER IS -A76F ; [.1FC6.0020.0002] # LATIN SMALL LETTER CON -1DD2 ; [.1FC6.0020.0004] # COMBINING US ABOVE -A76E ; [.1FC6.0020.0008] # LATIN CAPITAL LETTER CON -A770 ; [.1FC6.0020.0014] # MODIFIER LETTER US -A778 ; [.1FC7.0020.0002] # LATIN SMALL LETTER UM -01BB ; [.1FC8.0020.0002] # LATIN LETTER TWO WITH STROKE -A72B ; [.1FCC.0020.0002] # LATIN SMALL LETTER TRESILLO -A72A ; [.1FCC.0020.0008] # LATIN CAPITAL LETTER TRESILLO -A72D ; [.1FCD.0020.0002] # LATIN SMALL LETTER CUATRILLO -A72C ; [.1FCD.0020.0008] # LATIN CAPITAL LETTER CUATRILLO -A72F ; [.1FCE.0020.0002] # LATIN SMALL LETTER CUATRILLO WITH COMMA -A72E ; [.1FCE.0020.0008] # LATIN CAPITAL LETTER CUATRILLO WITH COMMA -01A8 ; [.1FCF.0020.0002] # LATIN SMALL LETTER TONE TWO -01A7 ; [.1FCF.0020.0008] # LATIN CAPITAL LETTER TONE TWO -01BD ; [.1FD3.0020.0002] # LATIN SMALL LETTER TONE FIVE -01BC ; [.1FD3.0020.0008] # LATIN CAPITAL LETTER TONE FIVE -0185 ; [.1FD7.0020.0002] # LATIN SMALL LETTER TONE SIX -0184 ; [.1FD7.0020.0008] # LATIN CAPITAL LETTER TONE SIX -0294 ; [.1FDB.0020.0002] # LATIN LETTER GLOTTAL STOP -0242 ; [.1FDF.0020.0002] # LATIN SMALL LETTER GLOTTAL STOP -0241 ; [.1FDF.0020.0008] # LATIN CAPITAL LETTER GLOTTAL STOP -02C0 ; [.1FE3.0020.0002] # MODIFIER LETTER GLOTTAL STOP -02BC ; [.1FE4.0020.0002] # MODIFIER LETTER APOSTROPHE -0149 ; [.1FE4.0020.0004][.1E1F.0020.0004] # LATIN SMALL LETTER N PRECEDED BY APOSTROPHE -02EE ; [.1FE5.0020.0002] # MODIFIER LETTER DOUBLE APOSTROPHE -02BE ; [.1FE6.0020.0002] # MODIFIER LETTER RIGHT HALF RING -A723 ; [.1FE7.0020.0002] # LATIN SMALL LETTER EGYPTOLOGICAL ALEF -A722 ; [.1FE7.0020.0008] # LATIN CAPITAL LETTER EGYPTOLOGICAL ALEF -A78C ; [.1FE8.0020.0002] # LATIN SMALL LETTER SALTILLO -A78B ; [.1FE8.0020.0008] # LATIN CAPITAL LETTER SALTILLO -A78F ; [.1FE9.0020.0002] # LATIN LETTER SINOLOGICAL DOT -0295 ; [.1FEA.0020.0002] # LATIN LETTER PHARYNGEAL VOICED FRICATIVE -02E4 ; [.1FEA.0020.0014] # MODIFIER LETTER SMALL REVERSED GLOTTAL STOP -02BF ; [.1FEE.0020.0002] # MODIFIER LETTER LEFT HALF RING -02C1 ; [.1FEF.0020.0002] # MODIFIER LETTER REVERSED GLOTTAL STOP -1D24 ; [.1FF0.0020.0002] # LATIN LETTER VOICED LARYNGEAL SPIRANT -1D25 ; [.1FF1.0020.0002] # LATIN LETTER AIN -1D5C ; [.1FF1.0020.0014] # MODIFIER LETTER SMALL AIN -A725 ; [.1FF2.0020.0002] # LATIN SMALL LETTER EGYPTOLOGICAL AIN -A724 ; [.1FF2.0020.0008] # LATIN CAPITAL LETTER EGYPTOLOGICAL AIN -02A1 ; [.1FF3.0020.0002] # LATIN LETTER GLOTTAL STOP WITH STROKE -02A2 ; [.1FF7.0020.0002] # LATIN LETTER REVERSED GLOTTAL STOP WITH STROKE -0296 ; [.1FFB.0020.0002] # LATIN LETTER INVERTED GLOTTAL STOP -01C0 ; [.1FFF.0020.0002] # LATIN LETTER DENTAL CLICK -01C1 ; [.2003.0020.0002] # LATIN LETTER LATERAL CLICK -01C2 ; [.2007.0020.0002] # LATIN LETTER ALVEOLAR CLICK -01C3 ; [.200B.0020.0002] # LATIN LETTER RETROFLEX CLICK -0297 ; [.200F.0020.0002] # LATIN LETTER STRETCHED C -0298 ; [.2013.0020.0002] # LATIN LETTER BILABIAL CLICK -02AC ; [.2017.0020.0002] # LATIN LETTER BILABIAL PERCUSSIVE -02AD ; [.201B.0020.0002] # LATIN LETTER BIDENTAL PERCUSSIVE -03B1 ; [.201F.0020.0002] # GREEK SMALL LETTER ALPHA -1D6C2 ; [.201F.0020.0005] # MATHEMATICAL BOLD SMALL ALPHA -1D6FC ; [.201F.0020.0005] # MATHEMATICAL ITALIC SMALL ALPHA -1D736 ; [.201F.0020.0005] # MATHEMATICAL BOLD ITALIC SMALL ALPHA -1D770 ; [.201F.0020.0005] # MATHEMATICAL SANS-SERIF BOLD SMALL ALPHA -1D7AA ; [.201F.0020.0005] # MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL ALPHA -0391 ; [.201F.0020.0008] # GREEK CAPITAL LETTER ALPHA -1D6A8 ; [.201F.0020.000B] # MATHEMATICAL BOLD CAPITAL ALPHA -1D6E2 ; [.201F.0020.000B] # MATHEMATICAL ITALIC CAPITAL ALPHA -1D71C ; [.201F.0020.000B] # MATHEMATICAL BOLD ITALIC CAPITAL ALPHA -1D756 ; [.201F.0020.000B] # MATHEMATICAL SANS-SERIF BOLD CAPITAL ALPHA -1D790 ; [.201F.0020.000B] # MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL ALPHA -1F00 ; [.201F.0020.0002][.0000.0022.0002] # GREEK SMALL LETTER ALPHA WITH PSILI -1F08 ; [.201F.0020.0008][.0000.0022.0002] # GREEK CAPITAL LETTER ALPHA WITH PSILI -1F04 ; [.201F.0020.0002][.0000.0022.0002][.0000.0024.0002] # GREEK SMALL LETTER ALPHA WITH PSILI AND OXIA -1F0C ; [.201F.0020.0008][.0000.0022.0002][.0000.0024.0002] # GREEK CAPITAL LETTER ALPHA WITH PSILI AND OXIA -1F84 ; [.201F.0020.0002][.0000.0022.0002][.0000.0024.0002][.0000.004C.0002] # GREEK SMALL LETTER ALPHA WITH PSILI AND OXIA AND YPOGEGRAMMENI -1F8C ; [.201F.0020.0008][.0000.0022.0002][.0000.0024.0002][.0000.004C.0002] # GREEK CAPITAL LETTER ALPHA WITH PSILI AND OXIA AND PROSGEGRAMMENI -1F02 ; [.201F.0020.0002][.0000.0022.0002][.0000.0025.0002] # GREEK SMALL LETTER ALPHA WITH PSILI AND VARIA -1F0A ; [.201F.0020.0008][.0000.0022.0002][.0000.0025.0002] # GREEK CAPITAL LETTER ALPHA WITH PSILI AND VARIA -1F82 ; [.201F.0020.0002][.0000.0022.0002][.0000.0025.0002][.0000.004C.0002] # GREEK SMALL LETTER ALPHA WITH PSILI AND VARIA AND YPOGEGRAMMENI -1F8A ; [.201F.0020.0008][.0000.0022.0002][.0000.0025.0002][.0000.004C.0002] # GREEK CAPITAL LETTER ALPHA WITH PSILI AND VARIA AND PROSGEGRAMMENI -1F06 ; [.201F.0020.0002][.0000.0022.0002][.0000.002A.0002] # GREEK SMALL LETTER ALPHA WITH PSILI AND PERISPOMENI -1F0E ; [.201F.0020.0008][.0000.0022.0002][.0000.002A.0002] # GREEK CAPITAL LETTER ALPHA WITH PSILI AND PERISPOMENI -1F86 ; [.201F.0020.0002][.0000.0022.0002][.0000.002A.0002][.0000.004C.0002] # GREEK SMALL LETTER ALPHA WITH PSILI AND PERISPOMENI AND YPOGEGRAMMENI -1F8E ; [.201F.0020.0008][.0000.0022.0002][.0000.002A.0002][.0000.004C.0002] # GREEK CAPITAL LETTER ALPHA WITH PSILI AND PERISPOMENI AND PROSGEGRAMMENI -1F80 ; [.201F.0020.0002][.0000.0022.0002][.0000.004C.0002] # GREEK SMALL LETTER ALPHA WITH PSILI AND YPOGEGRAMMENI -1F88 ; [.201F.0020.0008][.0000.0022.0002][.0000.004C.0002] # GREEK CAPITAL LETTER ALPHA WITH PSILI AND PROSGEGRAMMENI -1F01 ; [.201F.0020.0002][.0000.0023.0002] # GREEK SMALL LETTER ALPHA WITH DASIA -1F09 ; [.201F.0020.0008][.0000.0023.0002] # GREEK CAPITAL LETTER ALPHA WITH DASIA -1F05 ; [.201F.0020.0002][.0000.0023.0002][.0000.0024.0002] # GREEK SMALL LETTER ALPHA WITH DASIA AND OXIA -1F0D ; [.201F.0020.0008][.0000.0023.0002][.0000.0024.0002] # GREEK CAPITAL LETTER ALPHA WITH DASIA AND OXIA -1F85 ; [.201F.0020.0002][.0000.0023.0002][.0000.0024.0002][.0000.004C.0002] # GREEK SMALL LETTER ALPHA WITH DASIA AND OXIA AND YPOGEGRAMMENI -1F8D ; [.201F.0020.0008][.0000.0023.0002][.0000.0024.0002][.0000.004C.0002] # GREEK CAPITAL LETTER ALPHA WITH DASIA AND OXIA AND PROSGEGRAMMENI -1F03 ; [.201F.0020.0002][.0000.0023.0002][.0000.0025.0002] # GREEK SMALL LETTER ALPHA WITH DASIA AND VARIA -1F0B ; [.201F.0020.0008][.0000.0023.0002][.0000.0025.0002] # GREEK CAPITAL LETTER ALPHA WITH DASIA AND VARIA -1F83 ; [.201F.0020.0002][.0000.0023.0002][.0000.0025.0002][.0000.004C.0002] # GREEK SMALL LETTER ALPHA WITH DASIA AND VARIA AND YPOGEGRAMMENI -1F8B ; [.201F.0020.0008][.0000.0023.0002][.0000.0025.0002][.0000.004C.0002] # GREEK CAPITAL LETTER ALPHA WITH DASIA AND VARIA AND PROSGEGRAMMENI -1F07 ; [.201F.0020.0002][.0000.0023.0002][.0000.002A.0002] # GREEK SMALL LETTER ALPHA WITH DASIA AND PERISPOMENI -1F0F ; [.201F.0020.0008][.0000.0023.0002][.0000.002A.0002] # GREEK CAPITAL LETTER ALPHA WITH DASIA AND PERISPOMENI -1F87 ; [.201F.0020.0002][.0000.0023.0002][.0000.002A.0002][.0000.004C.0002] # GREEK SMALL LETTER ALPHA WITH DASIA AND PERISPOMENI AND YPOGEGRAMMENI -1F8F ; [.201F.0020.0008][.0000.0023.0002][.0000.002A.0002][.0000.004C.0002] # GREEK CAPITAL LETTER ALPHA WITH DASIA AND PERISPOMENI AND PROSGEGRAMMENI -1F81 ; [.201F.0020.0002][.0000.0023.0002][.0000.004C.0002] # GREEK SMALL LETTER ALPHA WITH DASIA AND YPOGEGRAMMENI -1F89 ; [.201F.0020.0008][.0000.0023.0002][.0000.004C.0002] # GREEK CAPITAL LETTER ALPHA WITH DASIA AND PROSGEGRAMMENI -03AC ; [.201F.0020.0002][.0000.0024.0002] # GREEK SMALL LETTER ALPHA WITH TONOS -1F71 ; [.201F.0020.0002][.0000.0024.0002] # GREEK SMALL LETTER ALPHA WITH OXIA -0386 ; [.201F.0020.0008][.0000.0024.0002] # GREEK CAPITAL LETTER ALPHA WITH TONOS -1FBB ; [.201F.0020.0008][.0000.0024.0002] # GREEK CAPITAL LETTER ALPHA WITH OXIA -1FB4 ; [.201F.0020.0002][.0000.0024.0002][.0000.004C.0002] # GREEK SMALL LETTER ALPHA WITH OXIA AND YPOGEGRAMMENI -1F70 ; [.201F.0020.0002][.0000.0025.0002] # GREEK SMALL LETTER ALPHA WITH VARIA -1FBA ; [.201F.0020.0008][.0000.0025.0002] # GREEK CAPITAL LETTER ALPHA WITH VARIA -1FB2 ; [.201F.0020.0002][.0000.0025.0002][.0000.004C.0002] # GREEK SMALL LETTER ALPHA WITH VARIA AND YPOGEGRAMMENI -1FB0 ; [.201F.0020.0002][.0000.0026.0002] # GREEK SMALL LETTER ALPHA WITH VRACHY -1FB8 ; [.201F.0020.0008][.0000.0026.0002] # GREEK CAPITAL LETTER ALPHA WITH VRACHY -1FB6 ; [.201F.0020.0002][.0000.002A.0002] # GREEK SMALL LETTER ALPHA WITH PERISPOMENI -1FB7 ; [.201F.0020.0002][.0000.002A.0002][.0000.004C.0002] # GREEK SMALL LETTER ALPHA WITH PERISPOMENI AND YPOGEGRAMMENI -1FB1 ; [.201F.0020.0002][.0000.0032.0002] # GREEK SMALL LETTER ALPHA WITH MACRON -1FB9 ; [.201F.0020.0008][.0000.0032.0002] # GREEK CAPITAL LETTER ALPHA WITH MACRON -1FB3 ; [.201F.0020.0002][.0000.004C.0002] # GREEK SMALL LETTER ALPHA WITH YPOGEGRAMMENI -1FBC ; [.201F.0020.0008][.0000.004C.0002] # GREEK CAPITAL LETTER ALPHA WITH PROSGEGRAMMENI -03B2 ; [.2020.0020.0002] # GREEK SMALL LETTER BETA -03D0 ; [.2020.0020.0004] # GREEK BETA SYMBOL -1D6C3 ; [.2020.0020.0005] # MATHEMATICAL BOLD SMALL BETA -1D6FD ; [.2020.0020.0005] # MATHEMATICAL ITALIC SMALL BETA -1D737 ; [.2020.0020.0005] # MATHEMATICAL BOLD ITALIC SMALL BETA -1D771 ; [.2020.0020.0005] # MATHEMATICAL SANS-SERIF BOLD SMALL BETA -1D7AB ; [.2020.0020.0005] # MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL BETA -0392 ; [.2020.0020.0008] # GREEK CAPITAL LETTER BETA -1D6A9 ; [.2020.0020.000B] # MATHEMATICAL BOLD CAPITAL BETA -1D6E3 ; [.2020.0020.000B] # MATHEMATICAL ITALIC CAPITAL BETA -1D71D ; [.2020.0020.000B] # MATHEMATICAL BOLD ITALIC CAPITAL BETA -1D757 ; [.2020.0020.000B] # MATHEMATICAL SANS-SERIF BOLD CAPITAL BETA -1D791 ; [.2020.0020.000B] # MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL BETA -1D5D ; [.2020.0020.0014] # MODIFIER LETTER SMALL BETA -1D66 ; [.2020.0020.0015] # GREEK SUBSCRIPT SMALL LETTER BETA -03B3 ; [.2021.0020.0002] # GREEK SMALL LETTER GAMMA -213D ; [.2021.0020.0005] # DOUBLE-STRUCK SMALL GAMMA -1D6C4 ; [.2021.0020.0005] # MATHEMATICAL BOLD SMALL GAMMA -1D6FE ; [.2021.0020.0005] # MATHEMATICAL ITALIC SMALL GAMMA -1D738 ; [.2021.0020.0005] # MATHEMATICAL BOLD ITALIC SMALL GAMMA -1D772 ; [.2021.0020.0005] # MATHEMATICAL SANS-SERIF BOLD SMALL GAMMA -1D7AC ; [.2021.0020.0005] # MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL GAMMA -0393 ; [.2021.0020.0008] # GREEK CAPITAL LETTER GAMMA -213E ; [.2021.0020.000B] # DOUBLE-STRUCK CAPITAL GAMMA -1D6AA ; [.2021.0020.000B] # MATHEMATICAL BOLD CAPITAL GAMMA -1D6E4 ; [.2021.0020.000B] # MATHEMATICAL ITALIC CAPITAL GAMMA -1D71E ; [.2021.0020.000B] # MATHEMATICAL BOLD ITALIC CAPITAL GAMMA -1D758 ; [.2021.0020.000B] # MATHEMATICAL SANS-SERIF BOLD CAPITAL GAMMA -1D792 ; [.2021.0020.000B] # MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL GAMMA -1D5E ; [.2021.0020.0014] # MODIFIER LETTER SMALL GREEK GAMMA -1D67 ; [.2021.0020.0015] # GREEK SUBSCRIPT SMALL LETTER GAMMA -1D26 ; [.2022.0020.0002] # GREEK LETTER SMALL CAPITAL GAMMA -03B4 ; [.2023.0020.0002] # GREEK SMALL LETTER DELTA -1D6C5 ; [.2023.0020.0005] # MATHEMATICAL BOLD SMALL DELTA -1D6FF ; [.2023.0020.0005] # MATHEMATICAL ITALIC SMALL DELTA -1D739 ; [.2023.0020.0005] # MATHEMATICAL BOLD ITALIC SMALL DELTA -1D773 ; [.2023.0020.0005] # MATHEMATICAL SANS-SERIF BOLD SMALL DELTA -1D7AD ; [.2023.0020.0005] # MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL DELTA -0394 ; [.2023.0020.0008] # GREEK CAPITAL LETTER DELTA -1D6AB ; [.2023.0020.000B] # MATHEMATICAL BOLD CAPITAL DELTA -1D6E5 ; [.2023.0020.000B] # MATHEMATICAL ITALIC CAPITAL DELTA -1D71F ; [.2023.0020.000B] # MATHEMATICAL BOLD ITALIC CAPITAL DELTA -1D759 ; [.2023.0020.000B] # MATHEMATICAL SANS-SERIF BOLD CAPITAL DELTA -1D793 ; [.2023.0020.000B] # MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL DELTA -1D5F ; [.2023.0020.0014] # MODIFIER LETTER SMALL DELTA -03B5 ; [.2024.0020.0002] # GREEK SMALL LETTER EPSILON -03F5 ; [.2024.0020.0004] # GREEK LUNATE EPSILON SYMBOL -1D6C6 ; [.2024.0020.0005] # MATHEMATICAL BOLD SMALL EPSILON -1D6DC ; [.2024.0020.0005] # MATHEMATICAL BOLD EPSILON SYMBOL -1D700 ; [.2024.0020.0005] # MATHEMATICAL ITALIC SMALL EPSILON -1D716 ; [.2024.0020.0005] # MATHEMATICAL ITALIC EPSILON SYMBOL -1D73A ; [.2024.0020.0005] # MATHEMATICAL BOLD ITALIC SMALL EPSILON -1D750 ; [.2024.0020.0005] # MATHEMATICAL BOLD ITALIC EPSILON SYMBOL -1D774 ; [.2024.0020.0005] # MATHEMATICAL SANS-SERIF BOLD SMALL EPSILON -1D78A ; [.2024.0020.0005] # MATHEMATICAL SANS-SERIF BOLD EPSILON SYMBOL -1D7AE ; [.2024.0020.0005] # MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL EPSILON -1D7C4 ; [.2024.0020.0005] # MATHEMATICAL SANS-SERIF BOLD ITALIC EPSILON SYMBOL -0395 ; [.2024.0020.0008] # GREEK CAPITAL LETTER EPSILON -1D6AC ; [.2024.0020.000B] # MATHEMATICAL BOLD CAPITAL EPSILON -1D6E6 ; [.2024.0020.000B] # MATHEMATICAL ITALIC CAPITAL EPSILON -1D720 ; [.2024.0020.000B] # MATHEMATICAL BOLD ITALIC CAPITAL EPSILON -1D75A ; [.2024.0020.000B] # MATHEMATICAL SANS-SERIF BOLD CAPITAL EPSILON -1D794 ; [.2024.0020.000B] # MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL EPSILON -1F10 ; [.2024.0020.0002][.0000.0022.0002] # GREEK SMALL LETTER EPSILON WITH PSILI -1F18 ; [.2024.0020.0008][.0000.0022.0002] # GREEK CAPITAL LETTER EPSILON WITH PSILI -1F14 ; [.2024.0020.0002][.0000.0022.0002][.0000.0024.0002] # GREEK SMALL LETTER EPSILON WITH PSILI AND OXIA -1F1C ; [.2024.0020.0008][.0000.0022.0002][.0000.0024.0002] # GREEK CAPITAL LETTER EPSILON WITH PSILI AND OXIA -1F12 ; [.2024.0020.0002][.0000.0022.0002][.0000.0025.0002] # GREEK SMALL LETTER EPSILON WITH PSILI AND VARIA -1F1A ; [.2024.0020.0008][.0000.0022.0002][.0000.0025.0002] # GREEK CAPITAL LETTER EPSILON WITH PSILI AND VARIA -1F11 ; [.2024.0020.0002][.0000.0023.0002] # GREEK SMALL LETTER EPSILON WITH DASIA -1F19 ; [.2024.0020.0008][.0000.0023.0002] # GREEK CAPITAL LETTER EPSILON WITH DASIA -1F15 ; [.2024.0020.0002][.0000.0023.0002][.0000.0024.0002] # GREEK SMALL LETTER EPSILON WITH DASIA AND OXIA -1F1D ; [.2024.0020.0008][.0000.0023.0002][.0000.0024.0002] # GREEK CAPITAL LETTER EPSILON WITH DASIA AND OXIA -1F13 ; [.2024.0020.0002][.0000.0023.0002][.0000.0025.0002] # GREEK SMALL LETTER EPSILON WITH DASIA AND VARIA -1F1B ; [.2024.0020.0008][.0000.0023.0002][.0000.0025.0002] # GREEK CAPITAL LETTER EPSILON WITH DASIA AND VARIA -03AD ; [.2024.0020.0002][.0000.0024.0002] # GREEK SMALL LETTER EPSILON WITH TONOS -1F73 ; [.2024.0020.0002][.0000.0024.0002] # GREEK SMALL LETTER EPSILON WITH OXIA -0388 ; [.2024.0020.0008][.0000.0024.0002] # GREEK CAPITAL LETTER EPSILON WITH TONOS -1FC9 ; [.2024.0020.0008][.0000.0024.0002] # GREEK CAPITAL LETTER EPSILON WITH OXIA -1F72 ; [.2024.0020.0002][.0000.0025.0002] # GREEK SMALL LETTER EPSILON WITH VARIA -1FC8 ; [.2024.0020.0008][.0000.0025.0002] # GREEK CAPITAL LETTER EPSILON WITH VARIA -03DD ; [.2025.0020.0002] # GREEK SMALL LETTER DIGAMMA -1D7CB ; [.2025.0020.0005] # MATHEMATICAL BOLD SMALL DIGAMMA -03DC ; [.2025.0020.0008] # GREEK LETTER DIGAMMA -1D7CA ; [.2025.0020.000B] # MATHEMATICAL BOLD CAPITAL DIGAMMA -0377 ; [.2026.0020.0002] # GREEK SMALL LETTER PAMPHYLIAN DIGAMMA -0376 ; [.2026.0020.0008] # GREEK CAPITAL LETTER PAMPHYLIAN DIGAMMA -03DB ; [.2027.0020.0002] # GREEK SMALL LETTER STIGMA -03DA ; [.2027.0020.0008] # GREEK LETTER STIGMA -03B6 ; [.2028.0020.0002] # GREEK SMALL LETTER ZETA -1D6C7 ; [.2028.0020.0005] # MATHEMATICAL BOLD SMALL ZETA -1D701 ; [.2028.0020.0005] # MATHEMATICAL ITALIC SMALL ZETA -1D73B ; [.2028.0020.0005] # MATHEMATICAL BOLD ITALIC SMALL ZETA -1D775 ; [.2028.0020.0005] # MATHEMATICAL SANS-SERIF BOLD SMALL ZETA -1D7AF ; [.2028.0020.0005] # MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL ZETA -0396 ; [.2028.0020.0008] # GREEK CAPITAL LETTER ZETA -1D6AD ; [.2028.0020.000B] # MATHEMATICAL BOLD CAPITAL ZETA -1D6E7 ; [.2028.0020.000B] # MATHEMATICAL ITALIC CAPITAL ZETA -1D721 ; [.2028.0020.000B] # MATHEMATICAL BOLD ITALIC CAPITAL ZETA -1D75B ; [.2028.0020.000B] # MATHEMATICAL SANS-SERIF BOLD CAPITAL ZETA -1D795 ; [.2028.0020.000B] # MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL ZETA -0371 ; [.2029.0020.0002] # GREEK SMALL LETTER HETA -0370 ; [.2029.0020.0008] # GREEK CAPITAL LETTER HETA -03B7 ; [.202A.0020.0002] # GREEK SMALL LETTER ETA -1D6C8 ; [.202A.0020.0005] # MATHEMATICAL BOLD SMALL ETA -1D702 ; [.202A.0020.0005] # MATHEMATICAL ITALIC SMALL ETA -1D73C ; [.202A.0020.0005] # MATHEMATICAL BOLD ITALIC SMALL ETA -1D776 ; [.202A.0020.0005] # MATHEMATICAL SANS-SERIF BOLD SMALL ETA -1D7B0 ; [.202A.0020.0005] # MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL ETA -0397 ; [.202A.0020.0008] # GREEK CAPITAL LETTER ETA -1D6AE ; [.202A.0020.000B] # MATHEMATICAL BOLD CAPITAL ETA -1D6E8 ; [.202A.0020.000B] # MATHEMATICAL ITALIC CAPITAL ETA -1D722 ; [.202A.0020.000B] # MATHEMATICAL BOLD ITALIC CAPITAL ETA -1D75C ; [.202A.0020.000B] # MATHEMATICAL SANS-SERIF BOLD CAPITAL ETA -1D796 ; [.202A.0020.000B] # MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL ETA -1F20 ; [.202A.0020.0002][.0000.0022.0002] # GREEK SMALL LETTER ETA WITH PSILI -1F28 ; [.202A.0020.0008][.0000.0022.0002] # GREEK CAPITAL LETTER ETA WITH PSILI -1F24 ; [.202A.0020.0002][.0000.0022.0002][.0000.0024.0002] # GREEK SMALL LETTER ETA WITH PSILI AND OXIA -1F2C ; [.202A.0020.0008][.0000.0022.0002][.0000.0024.0002] # GREEK CAPITAL LETTER ETA WITH PSILI AND OXIA -1F94 ; [.202A.0020.0002][.0000.0022.0002][.0000.0024.0002][.0000.004C.0002] # GREEK SMALL LETTER ETA WITH PSILI AND OXIA AND YPOGEGRAMMENI -1F9C ; [.202A.0020.0008][.0000.0022.0002][.0000.0024.0002][.0000.004C.0002] # GREEK CAPITAL LETTER ETA WITH PSILI AND OXIA AND PROSGEGRAMMENI -1F22 ; [.202A.0020.0002][.0000.0022.0002][.0000.0025.0002] # GREEK SMALL LETTER ETA WITH PSILI AND VARIA -1F2A ; [.202A.0020.0008][.0000.0022.0002][.0000.0025.0002] # GREEK CAPITAL LETTER ETA WITH PSILI AND VARIA -1F92 ; [.202A.0020.0002][.0000.0022.0002][.0000.0025.0002][.0000.004C.0002] # GREEK SMALL LETTER ETA WITH PSILI AND VARIA AND YPOGEGRAMMENI -1F9A ; [.202A.0020.0008][.0000.0022.0002][.0000.0025.0002][.0000.004C.0002] # GREEK CAPITAL LETTER ETA WITH PSILI AND VARIA AND PROSGEGRAMMENI -1F26 ; [.202A.0020.0002][.0000.0022.0002][.0000.002A.0002] # GREEK SMALL LETTER ETA WITH PSILI AND PERISPOMENI -1F2E ; [.202A.0020.0008][.0000.0022.0002][.0000.002A.0002] # GREEK CAPITAL LETTER ETA WITH PSILI AND PERISPOMENI -1F96 ; [.202A.0020.0002][.0000.0022.0002][.0000.002A.0002][.0000.004C.0002] # GREEK SMALL LETTER ETA WITH PSILI AND PERISPOMENI AND YPOGEGRAMMENI -1F9E ; [.202A.0020.0008][.0000.0022.0002][.0000.002A.0002][.0000.004C.0002] # GREEK CAPITAL LETTER ETA WITH PSILI AND PERISPOMENI AND PROSGEGRAMMENI -1F90 ; [.202A.0020.0002][.0000.0022.0002][.0000.004C.0002] # GREEK SMALL LETTER ETA WITH PSILI AND YPOGEGRAMMENI -1F98 ; [.202A.0020.0008][.0000.0022.0002][.0000.004C.0002] # GREEK CAPITAL LETTER ETA WITH PSILI AND PROSGEGRAMMENI -1F21 ; [.202A.0020.0002][.0000.0023.0002] # GREEK SMALL LETTER ETA WITH DASIA -1F29 ; [.202A.0020.0008][.0000.0023.0002] # GREEK CAPITAL LETTER ETA WITH DASIA -1F25 ; [.202A.0020.0002][.0000.0023.0002][.0000.0024.0002] # GREEK SMALL LETTER ETA WITH DASIA AND OXIA -1F2D ; [.202A.0020.0008][.0000.0023.0002][.0000.0024.0002] # GREEK CAPITAL LETTER ETA WITH DASIA AND OXIA -1F95 ; [.202A.0020.0002][.0000.0023.0002][.0000.0024.0002][.0000.004C.0002] # GREEK SMALL LETTER ETA WITH DASIA AND OXIA AND YPOGEGRAMMENI -1F9D ; [.202A.0020.0008][.0000.0023.0002][.0000.0024.0002][.0000.004C.0002] # GREEK CAPITAL LETTER ETA WITH DASIA AND OXIA AND PROSGEGRAMMENI -1F23 ; [.202A.0020.0002][.0000.0023.0002][.0000.0025.0002] # GREEK SMALL LETTER ETA WITH DASIA AND VARIA -1F2B ; [.202A.0020.0008][.0000.0023.0002][.0000.0025.0002] # GREEK CAPITAL LETTER ETA WITH DASIA AND VARIA -1F93 ; [.202A.0020.0002][.0000.0023.0002][.0000.0025.0002][.0000.004C.0002] # GREEK SMALL LETTER ETA WITH DASIA AND VARIA AND YPOGEGRAMMENI -1F9B ; [.202A.0020.0008][.0000.0023.0002][.0000.0025.0002][.0000.004C.0002] # GREEK CAPITAL LETTER ETA WITH DASIA AND VARIA AND PROSGEGRAMMENI -1F27 ; [.202A.0020.0002][.0000.0023.0002][.0000.002A.0002] # GREEK SMALL LETTER ETA WITH DASIA AND PERISPOMENI -1F2F ; [.202A.0020.0008][.0000.0023.0002][.0000.002A.0002] # GREEK CAPITAL LETTER ETA WITH DASIA AND PERISPOMENI -1F97 ; [.202A.0020.0002][.0000.0023.0002][.0000.002A.0002][.0000.004C.0002] # GREEK SMALL LETTER ETA WITH DASIA AND PERISPOMENI AND YPOGEGRAMMENI -1F9F ; [.202A.0020.0008][.0000.0023.0002][.0000.002A.0002][.0000.004C.0002] # GREEK CAPITAL LETTER ETA WITH DASIA AND PERISPOMENI AND PROSGEGRAMMENI -1F91 ; [.202A.0020.0002][.0000.0023.0002][.0000.004C.0002] # GREEK SMALL LETTER ETA WITH DASIA AND YPOGEGRAMMENI -1F99 ; [.202A.0020.0008][.0000.0023.0002][.0000.004C.0002] # GREEK CAPITAL LETTER ETA WITH DASIA AND PROSGEGRAMMENI -03AE ; [.202A.0020.0002][.0000.0024.0002] # GREEK SMALL LETTER ETA WITH TONOS -1F75 ; [.202A.0020.0002][.0000.0024.0002] # GREEK SMALL LETTER ETA WITH OXIA -0389 ; [.202A.0020.0008][.0000.0024.0002] # GREEK CAPITAL LETTER ETA WITH TONOS -1FCB ; [.202A.0020.0008][.0000.0024.0002] # GREEK CAPITAL LETTER ETA WITH OXIA -1FC4 ; [.202A.0020.0002][.0000.0024.0002][.0000.004C.0002] # GREEK SMALL LETTER ETA WITH OXIA AND YPOGEGRAMMENI -1F74 ; [.202A.0020.0002][.0000.0025.0002] # GREEK SMALL LETTER ETA WITH VARIA -1FCA ; [.202A.0020.0008][.0000.0025.0002] # GREEK CAPITAL LETTER ETA WITH VARIA -1FC2 ; [.202A.0020.0002][.0000.0025.0002][.0000.004C.0002] # GREEK SMALL LETTER ETA WITH VARIA AND YPOGEGRAMMENI -1FC6 ; [.202A.0020.0002][.0000.002A.0002] # GREEK SMALL LETTER ETA WITH PERISPOMENI -1FC7 ; [.202A.0020.0002][.0000.002A.0002][.0000.004C.0002] # GREEK SMALL LETTER ETA WITH PERISPOMENI AND YPOGEGRAMMENI -1FC3 ; [.202A.0020.0002][.0000.004C.0002] # GREEK SMALL LETTER ETA WITH YPOGEGRAMMENI -1FCC ; [.202A.0020.0008][.0000.004C.0002] # GREEK CAPITAL LETTER ETA WITH PROSGEGRAMMENI -03B8 ; [.202B.0020.0002] # GREEK SMALL LETTER THETA -03D1 ; [.202B.0020.0004] # GREEK THETA SYMBOL -1D6C9 ; [.202B.0020.0005] # MATHEMATICAL BOLD SMALL THETA -1D6DD ; [.202B.0020.0005] # MATHEMATICAL BOLD THETA SYMBOL -1D703 ; [.202B.0020.0005] # MATHEMATICAL ITALIC SMALL THETA -1D717 ; [.202B.0020.0005] # MATHEMATICAL ITALIC THETA SYMBOL -1D73D ; [.202B.0020.0005] # MATHEMATICAL BOLD ITALIC SMALL THETA -1D751 ; [.202B.0020.0005] # MATHEMATICAL BOLD ITALIC THETA SYMBOL -1D777 ; [.202B.0020.0005] # MATHEMATICAL SANS-SERIF BOLD SMALL THETA -1D78B ; [.202B.0020.0005] # MATHEMATICAL SANS-SERIF BOLD THETA SYMBOL -1D7B1 ; [.202B.0020.0005] # MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL THETA -1D7C5 ; [.202B.0020.0005] # MATHEMATICAL SANS-SERIF BOLD ITALIC THETA SYMBOL -0398 ; [.202B.0020.0008] # GREEK CAPITAL LETTER THETA -03F4 ; [.202B.0020.000A] # GREEK CAPITAL THETA SYMBOL -1D6AF ; [.202B.0020.000B] # MATHEMATICAL BOLD CAPITAL THETA -1D6B9 ; [.202B.0020.000B] # MATHEMATICAL BOLD CAPITAL THETA SYMBOL -1D6E9 ; [.202B.0020.000B] # MATHEMATICAL ITALIC CAPITAL THETA -1D6F3 ; [.202B.0020.000B] # MATHEMATICAL ITALIC CAPITAL THETA SYMBOL -1D723 ; [.202B.0020.000B] # MATHEMATICAL BOLD ITALIC CAPITAL THETA -1D72D ; [.202B.0020.000B] # MATHEMATICAL BOLD ITALIC CAPITAL THETA SYMBOL -1D75D ; [.202B.0020.000B] # MATHEMATICAL SANS-SERIF BOLD CAPITAL THETA -1D767 ; [.202B.0020.000B] # MATHEMATICAL SANS-SERIF BOLD CAPITAL THETA SYMBOL -1D797 ; [.202B.0020.000B] # MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL THETA -1D7A1 ; [.202B.0020.000B] # MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL THETA SYMBOL -1DBF ; [.202B.0020.0014] # MODIFIER LETTER SMALL THETA -03B9 ; [.202C.0020.0002] # GREEK SMALL LETTER IOTA -1FBE ; [.202C.0020.0002] # GREEK PROSGEGRAMMENI -037A ; [.202C.0020.0004] # GREEK YPOGEGRAMMENI -1D6CA ; [.202C.0020.0005] # MATHEMATICAL BOLD SMALL IOTA -1D704 ; [.202C.0020.0005] # MATHEMATICAL ITALIC SMALL IOTA -1D73E ; [.202C.0020.0005] # MATHEMATICAL BOLD ITALIC SMALL IOTA -1D778 ; [.202C.0020.0005] # MATHEMATICAL SANS-SERIF BOLD SMALL IOTA -1D7B2 ; [.202C.0020.0005] # MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL IOTA -0399 ; [.202C.0020.0008] # GREEK CAPITAL LETTER IOTA -1D6B0 ; [.202C.0020.000B] # MATHEMATICAL BOLD CAPITAL IOTA -1D6EA ; [.202C.0020.000B] # MATHEMATICAL ITALIC CAPITAL IOTA -1D724 ; [.202C.0020.000B] # MATHEMATICAL BOLD ITALIC CAPITAL IOTA -1D75E ; [.202C.0020.000B] # MATHEMATICAL SANS-SERIF BOLD CAPITAL IOTA -1D798 ; [.202C.0020.000B] # MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL IOTA -1F30 ; [.202C.0020.0002][.0000.0022.0002] # GREEK SMALL LETTER IOTA WITH PSILI -1F38 ; [.202C.0020.0008][.0000.0022.0002] # GREEK CAPITAL LETTER IOTA WITH PSILI -1F34 ; [.202C.0020.0002][.0000.0022.0002][.0000.0024.0002] # GREEK SMALL LETTER IOTA WITH PSILI AND OXIA -1F3C ; [.202C.0020.0008][.0000.0022.0002][.0000.0024.0002] # GREEK CAPITAL LETTER IOTA WITH PSILI AND OXIA -1F32 ; [.202C.0020.0002][.0000.0022.0002][.0000.0025.0002] # GREEK SMALL LETTER IOTA WITH PSILI AND VARIA -1F3A ; [.202C.0020.0008][.0000.0022.0002][.0000.0025.0002] # GREEK CAPITAL LETTER IOTA WITH PSILI AND VARIA -1F36 ; [.202C.0020.0002][.0000.0022.0002][.0000.002A.0002] # GREEK SMALL LETTER IOTA WITH PSILI AND PERISPOMENI -1F3E ; [.202C.0020.0008][.0000.0022.0002][.0000.002A.0002] # GREEK CAPITAL LETTER IOTA WITH PSILI AND PERISPOMENI -1F31 ; [.202C.0020.0002][.0000.0023.0002] # GREEK SMALL LETTER IOTA WITH DASIA -1F39 ; [.202C.0020.0008][.0000.0023.0002] # GREEK CAPITAL LETTER IOTA WITH DASIA -1F35 ; [.202C.0020.0002][.0000.0023.0002][.0000.0024.0002] # GREEK SMALL LETTER IOTA WITH DASIA AND OXIA -1F3D ; [.202C.0020.0008][.0000.0023.0002][.0000.0024.0002] # GREEK CAPITAL LETTER IOTA WITH DASIA AND OXIA -1F33 ; [.202C.0020.0002][.0000.0023.0002][.0000.0025.0002] # GREEK SMALL LETTER IOTA WITH DASIA AND VARIA -1F3B ; [.202C.0020.0008][.0000.0023.0002][.0000.0025.0002] # GREEK CAPITAL LETTER IOTA WITH DASIA AND VARIA -1F37 ; [.202C.0020.0002][.0000.0023.0002][.0000.002A.0002] # GREEK SMALL LETTER IOTA WITH DASIA AND PERISPOMENI -1F3F ; [.202C.0020.0008][.0000.0023.0002][.0000.002A.0002] # GREEK CAPITAL LETTER IOTA WITH DASIA AND PERISPOMENI -03AF ; [.202C.0020.0002][.0000.0024.0002] # GREEK SMALL LETTER IOTA WITH TONOS -1F77 ; [.202C.0020.0002][.0000.0024.0002] # GREEK SMALL LETTER IOTA WITH OXIA -038A ; [.202C.0020.0008][.0000.0024.0002] # GREEK CAPITAL LETTER IOTA WITH TONOS -1FDB ; [.202C.0020.0008][.0000.0024.0002] # GREEK CAPITAL LETTER IOTA WITH OXIA -1F76 ; [.202C.0020.0002][.0000.0025.0002] # GREEK SMALL LETTER IOTA WITH VARIA -1FDA ; [.202C.0020.0008][.0000.0025.0002] # GREEK CAPITAL LETTER IOTA WITH VARIA -1FD0 ; [.202C.0020.0002][.0000.0026.0002] # GREEK SMALL LETTER IOTA WITH VRACHY -1FD8 ; [.202C.0020.0008][.0000.0026.0002] # GREEK CAPITAL LETTER IOTA WITH VRACHY -1FD6 ; [.202C.0020.0002][.0000.002A.0002] # GREEK SMALL LETTER IOTA WITH PERISPOMENI -03CA ; [.202C.0020.0002][.0000.002B.0002] # GREEK SMALL LETTER IOTA WITH DIALYTIKA -03AA ; [.202C.0020.0008][.0000.002B.0002] # GREEK CAPITAL LETTER IOTA WITH DIALYTIKA -0390 ; [.202C.0020.0002][.0000.002B.0002][.0000.0024.0002] # GREEK SMALL LETTER IOTA WITH DIALYTIKA AND TONOS -1FD3 ; [.202C.0020.0002][.0000.002B.0002][.0000.0024.0002] # GREEK SMALL LETTER IOTA WITH DIALYTIKA AND OXIA -1FD2 ; [.202C.0020.0002][.0000.002B.0002][.0000.0025.0002] # GREEK SMALL LETTER IOTA WITH DIALYTIKA AND VARIA -1FD7 ; [.202C.0020.0002][.0000.002B.0002][.0000.002A.0002] # GREEK SMALL LETTER IOTA WITH DIALYTIKA AND PERISPOMENI -1FD1 ; [.202C.0020.0002][.0000.0032.0002] # GREEK SMALL LETTER IOTA WITH MACRON -1FD9 ; [.202C.0020.0008][.0000.0032.0002] # GREEK CAPITAL LETTER IOTA WITH MACRON -03F3 ; [.202D.0020.0002] # GREEK LETTER YOT -037F ; [.202D.0020.0008] # GREEK CAPITAL LETTER YOT -03BA ; [.202E.0020.0002] # GREEK SMALL LETTER KAPPA -03F0 ; [.202E.0020.0004] # GREEK KAPPA SYMBOL -1D6CB ; [.202E.0020.0005] # MATHEMATICAL BOLD SMALL KAPPA -1D6DE ; [.202E.0020.0005] # MATHEMATICAL BOLD KAPPA SYMBOL -1D705 ; [.202E.0020.0005] # MATHEMATICAL ITALIC SMALL KAPPA -1D718 ; [.202E.0020.0005] # MATHEMATICAL ITALIC KAPPA SYMBOL -1D73F ; [.202E.0020.0005] # MATHEMATICAL BOLD ITALIC SMALL KAPPA -1D752 ; [.202E.0020.0005] # MATHEMATICAL BOLD ITALIC KAPPA SYMBOL -1D779 ; [.202E.0020.0005] # MATHEMATICAL SANS-SERIF BOLD SMALL KAPPA -1D78C ; [.202E.0020.0005] # MATHEMATICAL SANS-SERIF BOLD KAPPA SYMBOL -1D7B3 ; [.202E.0020.0005] # MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL KAPPA -1D7C6 ; [.202E.0020.0005] # MATHEMATICAL SANS-SERIF BOLD ITALIC KAPPA SYMBOL -039A ; [.202E.0020.0008] # GREEK CAPITAL LETTER KAPPA -1D6B1 ; [.202E.0020.000B] # MATHEMATICAL BOLD CAPITAL KAPPA -1D6EB ; [.202E.0020.000B] # MATHEMATICAL ITALIC CAPITAL KAPPA -1D725 ; [.202E.0020.000B] # MATHEMATICAL BOLD ITALIC CAPITAL KAPPA -1D75F ; [.202E.0020.000B] # MATHEMATICAL SANS-SERIF BOLD CAPITAL KAPPA -1D799 ; [.202E.0020.000B] # MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL KAPPA -03D7 ; [.202E.0020.0004][.201F.0020.0004][.202C.0020.0004] # GREEK KAI SYMBOL -03CF ; [.202E.0020.000A][.201F.0020.0004][.202C.0020.0004] # GREEK CAPITAL KAI SYMBOL -03BB ; [.202F.0020.0002] # GREEK SMALL LETTER LAMDA -1D6CC ; [.202F.0020.0005] # MATHEMATICAL BOLD SMALL LAMDA -1D706 ; [.202F.0020.0005] # MATHEMATICAL ITALIC SMALL LAMDA -1D740 ; [.202F.0020.0005] # MATHEMATICAL BOLD ITALIC SMALL LAMDA -1D77A ; [.202F.0020.0005] # MATHEMATICAL SANS-SERIF BOLD SMALL LAMDA -1D7B4 ; [.202F.0020.0005] # MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL LAMDA -039B ; [.202F.0020.0008] # GREEK CAPITAL LETTER LAMDA -1D6B2 ; [.202F.0020.000B] # MATHEMATICAL BOLD CAPITAL LAMDA -1D6EC ; [.202F.0020.000B] # MATHEMATICAL ITALIC CAPITAL LAMDA -1D726 ; [.202F.0020.000B] # MATHEMATICAL BOLD ITALIC CAPITAL LAMDA -1D760 ; [.202F.0020.000B] # MATHEMATICAL SANS-SERIF BOLD CAPITAL LAMDA -1D79A ; [.202F.0020.000B] # MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL LAMDA -1D27 ; [.2030.0020.0002] # GREEK LETTER SMALL CAPITAL LAMDA -03BC ; [.2031.0020.0002] # GREEK SMALL LETTER MU -00B5 ; [.2031.0020.0004] # MICRO SIGN -1D6CD ; [.2031.0020.0005] # MATHEMATICAL BOLD SMALL MU -1D707 ; [.2031.0020.0005] # MATHEMATICAL ITALIC SMALL MU -1D741 ; [.2031.0020.0005] # MATHEMATICAL BOLD ITALIC SMALL MU -1D77B ; [.2031.0020.0005] # MATHEMATICAL SANS-SERIF BOLD SMALL MU -1D7B5 ; [.2031.0020.0005] # MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL MU -039C ; [.2031.0020.0008] # GREEK CAPITAL LETTER MU -1D6B3 ; [.2031.0020.000B] # MATHEMATICAL BOLD CAPITAL MU -1D6ED ; [.2031.0020.000B] # MATHEMATICAL ITALIC CAPITAL MU -1D727 ; [.2031.0020.000B] # MATHEMATICAL BOLD ITALIC CAPITAL MU -1D761 ; [.2031.0020.000B] # MATHEMATICAL SANS-SERIF BOLD CAPITAL MU -1D79B ; [.2031.0020.000B] # MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL MU -3382 ; [.2031.0020.001C][.1CAD.0020.001D] # SQUARE MU A -338C ; [.2031.0020.001C][.1D4B.0020.001D] # SQUARE MU F -338D ; [.2031.0020.001C][.1D5A.0020.001C] # SQUARE MU G -3395 ; [.2031.0020.001C][.1DDD.0020.001C] # SQUARE MU L -339B ; [.2031.0020.001C][.1E10.0020.001C] # SQUARE MU M -33B2 ; [.2031.0020.001C][.1ED7.0020.001C] # SQUARE MU S -33B6 ; [.2031.0020.001C][.1F49.0020.001D] # SQUARE MU V -33BC ; [.2031.0020.001C][.1F5B.0020.001D] # SQUARE MU W -03BD ; [.2032.0020.0002] # GREEK SMALL LETTER NU -1D6CE ; [.2032.0020.0005] # MATHEMATICAL BOLD SMALL NU -1D708 ; [.2032.0020.0005] # MATHEMATICAL ITALIC SMALL NU -1D742 ; [.2032.0020.0005] # MATHEMATICAL BOLD ITALIC SMALL NU -1D77C ; [.2032.0020.0005] # MATHEMATICAL SANS-SERIF BOLD SMALL NU -1D7B6 ; [.2032.0020.0005] # MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL NU -039D ; [.2032.0020.0008] # GREEK CAPITAL LETTER NU -1D6B4 ; [.2032.0020.000B] # MATHEMATICAL BOLD CAPITAL NU -1D6EE ; [.2032.0020.000B] # MATHEMATICAL ITALIC CAPITAL NU -1D728 ; [.2032.0020.000B] # MATHEMATICAL BOLD ITALIC CAPITAL NU -1D762 ; [.2032.0020.000B] # MATHEMATICAL SANS-SERIF BOLD CAPITAL NU -1D79C ; [.2032.0020.000B] # MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL NU -03BE ; [.2033.0020.0002] # GREEK SMALL LETTER XI -1D6CF ; [.2033.0020.0005] # MATHEMATICAL BOLD SMALL XI -1D709 ; [.2033.0020.0005] # MATHEMATICAL ITALIC SMALL XI -1D743 ; [.2033.0020.0005] # MATHEMATICAL BOLD ITALIC SMALL XI -1D77D ; [.2033.0020.0005] # MATHEMATICAL SANS-SERIF BOLD SMALL XI -1D7B7 ; [.2033.0020.0005] # MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL XI -039E ; [.2033.0020.0008] # GREEK CAPITAL LETTER XI -1D6B5 ; [.2033.0020.000B] # MATHEMATICAL BOLD CAPITAL XI -1D6EF ; [.2033.0020.000B] # MATHEMATICAL ITALIC CAPITAL XI -1D729 ; [.2033.0020.000B] # MATHEMATICAL BOLD ITALIC CAPITAL XI -1D763 ; [.2033.0020.000B] # MATHEMATICAL SANS-SERIF BOLD CAPITAL XI -1D79D ; [.2033.0020.000B] # MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL XI -03BF ; [.2034.0020.0002] # GREEK SMALL LETTER OMICRON -1D6D0 ; [.2034.0020.0005] # MATHEMATICAL BOLD SMALL OMICRON -1D70A ; [.2034.0020.0005] # MATHEMATICAL ITALIC SMALL OMICRON -1D744 ; [.2034.0020.0005] # MATHEMATICAL BOLD ITALIC SMALL OMICRON -1D77E ; [.2034.0020.0005] # MATHEMATICAL SANS-SERIF BOLD SMALL OMICRON -1D7B8 ; [.2034.0020.0005] # MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL OMICRON -039F ; [.2034.0020.0008] # GREEK CAPITAL LETTER OMICRON -1D6B6 ; [.2034.0020.000B] # MATHEMATICAL BOLD CAPITAL OMICRON -1D6F0 ; [.2034.0020.000B] # MATHEMATICAL ITALIC CAPITAL OMICRON -1D72A ; [.2034.0020.000B] # MATHEMATICAL BOLD ITALIC CAPITAL OMICRON -1D764 ; [.2034.0020.000B] # MATHEMATICAL SANS-SERIF BOLD CAPITAL OMICRON -1D79E ; [.2034.0020.000B] # MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL OMICRON -1F40 ; [.2034.0020.0002][.0000.0022.0002] # GREEK SMALL LETTER OMICRON WITH PSILI -1F48 ; [.2034.0020.0008][.0000.0022.0002] # GREEK CAPITAL LETTER OMICRON WITH PSILI -1F44 ; [.2034.0020.0002][.0000.0022.0002][.0000.0024.0002] # GREEK SMALL LETTER OMICRON WITH PSILI AND OXIA -1F4C ; [.2034.0020.0008][.0000.0022.0002][.0000.0024.0002] # GREEK CAPITAL LETTER OMICRON WITH PSILI AND OXIA -1F42 ; [.2034.0020.0002][.0000.0022.0002][.0000.0025.0002] # GREEK SMALL LETTER OMICRON WITH PSILI AND VARIA -1F4A ; [.2034.0020.0008][.0000.0022.0002][.0000.0025.0002] # GREEK CAPITAL LETTER OMICRON WITH PSILI AND VARIA -1F41 ; [.2034.0020.0002][.0000.0023.0002] # GREEK SMALL LETTER OMICRON WITH DASIA -1F49 ; [.2034.0020.0008][.0000.0023.0002] # GREEK CAPITAL LETTER OMICRON WITH DASIA -1F45 ; [.2034.0020.0002][.0000.0023.0002][.0000.0024.0002] # GREEK SMALL LETTER OMICRON WITH DASIA AND OXIA -1F4D ; [.2034.0020.0008][.0000.0023.0002][.0000.0024.0002] # GREEK CAPITAL LETTER OMICRON WITH DASIA AND OXIA -1F43 ; [.2034.0020.0002][.0000.0023.0002][.0000.0025.0002] # GREEK SMALL LETTER OMICRON WITH DASIA AND VARIA -1F4B ; [.2034.0020.0008][.0000.0023.0002][.0000.0025.0002] # GREEK CAPITAL LETTER OMICRON WITH DASIA AND VARIA -03CC ; [.2034.0020.0002][.0000.0024.0002] # GREEK SMALL LETTER OMICRON WITH TONOS -1F79 ; [.2034.0020.0002][.0000.0024.0002] # GREEK SMALL LETTER OMICRON WITH OXIA -038C ; [.2034.0020.0008][.0000.0024.0002] # GREEK CAPITAL LETTER OMICRON WITH TONOS -1FF9 ; [.2034.0020.0008][.0000.0024.0002] # GREEK CAPITAL LETTER OMICRON WITH OXIA -1F78 ; [.2034.0020.0002][.0000.0025.0002] # GREEK SMALL LETTER OMICRON WITH VARIA -1FF8 ; [.2034.0020.0008][.0000.0025.0002] # GREEK CAPITAL LETTER OMICRON WITH VARIA -03C0 ; [.2035.0020.0002] # GREEK SMALL LETTER PI -03D6 ; [.2035.0020.0004] # GREEK PI SYMBOL -213C ; [.2035.0020.0005] # DOUBLE-STRUCK SMALL PI -1D6D1 ; [.2035.0020.0005] # MATHEMATICAL BOLD SMALL PI -1D6E1 ; [.2035.0020.0005] # MATHEMATICAL BOLD PI SYMBOL -1D70B ; [.2035.0020.0005] # MATHEMATICAL ITALIC SMALL PI -1D71B ; [.2035.0020.0005] # MATHEMATICAL ITALIC PI SYMBOL -1D745 ; [.2035.0020.0005] # MATHEMATICAL BOLD ITALIC SMALL PI -1D755 ; [.2035.0020.0005] # MATHEMATICAL BOLD ITALIC PI SYMBOL -1D77F ; [.2035.0020.0005] # MATHEMATICAL SANS-SERIF BOLD SMALL PI -1D78F ; [.2035.0020.0005] # MATHEMATICAL SANS-SERIF BOLD PI SYMBOL -1D7B9 ; [.2035.0020.0005] # MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL PI -1D7C9 ; [.2035.0020.0005] # MATHEMATICAL SANS-SERIF BOLD ITALIC PI SYMBOL -03A0 ; [.2035.0020.0008] # GREEK CAPITAL LETTER PI -213F ; [.2035.0020.000B] # DOUBLE-STRUCK CAPITAL PI -1D6B7 ; [.2035.0020.000B] # MATHEMATICAL BOLD CAPITAL PI -1D6F1 ; [.2035.0020.000B] # MATHEMATICAL ITALIC CAPITAL PI -1D72B ; [.2035.0020.000B] # MATHEMATICAL BOLD ITALIC CAPITAL PI -1D765 ; [.2035.0020.000B] # MATHEMATICAL SANS-SERIF BOLD CAPITAL PI -1D79F ; [.2035.0020.000B] # MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL PI -1D28 ; [.2036.0020.0002] # GREEK LETTER SMALL CAPITAL PI -03FB ; [.2037.0020.0002] # GREEK SMALL LETTER SAN -03FA ; [.2037.0020.0008] # GREEK CAPITAL LETTER SAN -03DF ; [.2038.0020.0002] # GREEK SMALL LETTER KOPPA -03DE ; [.2038.0020.0008] # GREEK LETTER KOPPA -03D9 ; [.2039.0020.0002] # GREEK SMALL LETTER ARCHAIC KOPPA -03D8 ; [.2039.0020.0008] # GREEK LETTER ARCHAIC KOPPA -03C1 ; [.203A.0020.0002] # GREEK SMALL LETTER RHO -03F1 ; [.203A.0020.0004] # GREEK RHO SYMBOL -1D6D2 ; [.203A.0020.0005] # MATHEMATICAL BOLD SMALL RHO -1D6E0 ; [.203A.0020.0005] # MATHEMATICAL BOLD RHO SYMBOL -1D70C ; [.203A.0020.0005] # MATHEMATICAL ITALIC SMALL RHO -1D71A ; [.203A.0020.0005] # MATHEMATICAL ITALIC RHO SYMBOL -1D746 ; [.203A.0020.0005] # MATHEMATICAL BOLD ITALIC SMALL RHO -1D754 ; [.203A.0020.0005] # MATHEMATICAL BOLD ITALIC RHO SYMBOL -1D780 ; [.203A.0020.0005] # MATHEMATICAL SANS-SERIF BOLD SMALL RHO -1D78E ; [.203A.0020.0005] # MATHEMATICAL SANS-SERIF BOLD RHO SYMBOL -1D7BA ; [.203A.0020.0005] # MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL RHO -1D7C8 ; [.203A.0020.0005] # MATHEMATICAL SANS-SERIF BOLD ITALIC RHO SYMBOL -03A1 ; [.203A.0020.0008] # GREEK CAPITAL LETTER RHO -1D6B8 ; [.203A.0020.000B] # MATHEMATICAL BOLD CAPITAL RHO -1D6F2 ; [.203A.0020.000B] # MATHEMATICAL ITALIC CAPITAL RHO -1D72C ; [.203A.0020.000B] # MATHEMATICAL BOLD ITALIC CAPITAL RHO -1D766 ; [.203A.0020.000B] # MATHEMATICAL SANS-SERIF BOLD CAPITAL RHO -1D7A0 ; [.203A.0020.000B] # MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL RHO -1D68 ; [.203A.0020.0015] # GREEK SUBSCRIPT SMALL LETTER RHO -1FE4 ; [.203A.0020.0002][.0000.0022.0002] # GREEK SMALL LETTER RHO WITH PSILI -1FE5 ; [.203A.0020.0002][.0000.0023.0002] # GREEK SMALL LETTER RHO WITH DASIA -1FEC ; [.203A.0020.0008][.0000.0023.0002] # GREEK CAPITAL LETTER RHO WITH DASIA -1D29 ; [.203B.0020.0002] # GREEK LETTER SMALL CAPITAL RHO -03FC ; [.203C.0020.0002] # GREEK RHO WITH STROKE SYMBOL -03C3 ; [.203D.0020.0002] # GREEK SMALL LETTER SIGMA -03F2 ; [.203D.0020.0004] # GREEK LUNATE SIGMA SYMBOL -1D6D3 ; [.203D.0020.0005] # MATHEMATICAL BOLD SMALL FINAL SIGMA -1D6D4 ; [.203D.0020.0005] # MATHEMATICAL BOLD SMALL SIGMA -1D70D ; [.203D.0020.0005] # MATHEMATICAL ITALIC SMALL FINAL SIGMA -1D70E ; [.203D.0020.0005] # MATHEMATICAL ITALIC SMALL SIGMA -1D747 ; [.203D.0020.0005] # MATHEMATICAL BOLD ITALIC SMALL FINAL SIGMA -1D748 ; [.203D.0020.0005] # MATHEMATICAL BOLD ITALIC SMALL SIGMA -1D781 ; [.203D.0020.0005] # MATHEMATICAL SANS-SERIF BOLD SMALL FINAL SIGMA -1D782 ; [.203D.0020.0005] # MATHEMATICAL SANS-SERIF BOLD SMALL SIGMA -1D7BB ; [.203D.0020.0005] # MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL FINAL SIGMA -1D7BC ; [.203D.0020.0005] # MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL SIGMA -03A3 ; [.203D.0020.0008] # GREEK CAPITAL LETTER SIGMA -03F9 ; [.203D.0020.000A] # GREEK CAPITAL LUNATE SIGMA SYMBOL -1D6BA ; [.203D.0020.000B] # MATHEMATICAL BOLD CAPITAL SIGMA -1D6F4 ; [.203D.0020.000B] # MATHEMATICAL ITALIC CAPITAL SIGMA -1D72E ; [.203D.0020.000B] # MATHEMATICAL BOLD ITALIC CAPITAL SIGMA -1D768 ; [.203D.0020.000B] # MATHEMATICAL SANS-SERIF BOLD CAPITAL SIGMA -1D7A2 ; [.203D.0020.000B] # MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL SIGMA -03C2 ; [.203D.0020.0019] # GREEK SMALL LETTER FINAL SIGMA -037C ; [.203E.0020.0002] # GREEK SMALL DOTTED LUNATE SIGMA SYMBOL -03FE ; [.203E.0020.0008] # GREEK CAPITAL DOTTED LUNATE SIGMA SYMBOL -037B ; [.203F.0020.0002] # GREEK SMALL REVERSED LUNATE SIGMA SYMBOL -03FD ; [.203F.0020.0008] # GREEK CAPITAL REVERSED LUNATE SIGMA SYMBOL -037D ; [.2040.0020.0002] # GREEK SMALL REVERSED DOTTED LUNATE SIGMA SYMBOL -03FF ; [.2040.0020.0008] # GREEK CAPITAL REVERSED DOTTED LUNATE SIGMA SYMBOL -03C4 ; [.2041.0020.0002] # GREEK SMALL LETTER TAU -1D6D5 ; [.2041.0020.0005] # MATHEMATICAL BOLD SMALL TAU -1D70F ; [.2041.0020.0005] # MATHEMATICAL ITALIC SMALL TAU -1D749 ; [.2041.0020.0005] # MATHEMATICAL BOLD ITALIC SMALL TAU -1D783 ; [.2041.0020.0005] # MATHEMATICAL SANS-SERIF BOLD SMALL TAU -1D7BD ; [.2041.0020.0005] # MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL TAU -03A4 ; [.2041.0020.0008] # GREEK CAPITAL LETTER TAU -1D6BB ; [.2041.0020.000B] # MATHEMATICAL BOLD CAPITAL TAU -1D6F5 ; [.2041.0020.000B] # MATHEMATICAL ITALIC CAPITAL TAU -1D72F ; [.2041.0020.000B] # MATHEMATICAL BOLD ITALIC CAPITAL TAU -1D769 ; [.2041.0020.000B] # MATHEMATICAL SANS-SERIF BOLD CAPITAL TAU -1D7A3 ; [.2041.0020.000B] # MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL TAU -03C5 ; [.2042.0020.0002] # GREEK SMALL LETTER UPSILON -1D6D6 ; [.2042.0020.0005] # MATHEMATICAL BOLD SMALL UPSILON -1D710 ; [.2042.0020.0005] # MATHEMATICAL ITALIC SMALL UPSILON -1D74A ; [.2042.0020.0005] # MATHEMATICAL BOLD ITALIC SMALL UPSILON -1D784 ; [.2042.0020.0005] # MATHEMATICAL SANS-SERIF BOLD SMALL UPSILON -1D7BE ; [.2042.0020.0005] # MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL UPSILON -03A5 ; [.2042.0020.0008] # GREEK CAPITAL LETTER UPSILON -03D2 ; [.2042.0020.000A] # GREEK UPSILON WITH HOOK SYMBOL -1D6BC ; [.2042.0020.000B] # MATHEMATICAL BOLD CAPITAL UPSILON -1D6F6 ; [.2042.0020.000B] # MATHEMATICAL ITALIC CAPITAL UPSILON -1D730 ; [.2042.0020.000B] # MATHEMATICAL BOLD ITALIC CAPITAL UPSILON -1D76A ; [.2042.0020.000B] # MATHEMATICAL SANS-SERIF BOLD CAPITAL UPSILON -1D7A4 ; [.2042.0020.000B] # MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL UPSILON -1F50 ; [.2042.0020.0002][.0000.0022.0002] # GREEK SMALL LETTER UPSILON WITH PSILI -1F54 ; [.2042.0020.0002][.0000.0022.0002][.0000.0024.0002] # GREEK SMALL LETTER UPSILON WITH PSILI AND OXIA -1F52 ; [.2042.0020.0002][.0000.0022.0002][.0000.0025.0002] # GREEK SMALL LETTER UPSILON WITH PSILI AND VARIA -1F56 ; [.2042.0020.0002][.0000.0022.0002][.0000.002A.0002] # GREEK SMALL LETTER UPSILON WITH PSILI AND PERISPOMENI -1F51 ; [.2042.0020.0002][.0000.0023.0002] # GREEK SMALL LETTER UPSILON WITH DASIA -1F59 ; [.2042.0020.0008][.0000.0023.0002] # GREEK CAPITAL LETTER UPSILON WITH DASIA -1F55 ; [.2042.0020.0002][.0000.0023.0002][.0000.0024.0002] # GREEK SMALL LETTER UPSILON WITH DASIA AND OXIA -1F5D ; [.2042.0020.0008][.0000.0023.0002][.0000.0024.0002] # GREEK CAPITAL LETTER UPSILON WITH DASIA AND OXIA -1F53 ; [.2042.0020.0002][.0000.0023.0002][.0000.0025.0002] # GREEK SMALL LETTER UPSILON WITH DASIA AND VARIA -1F5B ; [.2042.0020.0008][.0000.0023.0002][.0000.0025.0002] # GREEK CAPITAL LETTER UPSILON WITH DASIA AND VARIA -1F57 ; [.2042.0020.0002][.0000.0023.0002][.0000.002A.0002] # GREEK SMALL LETTER UPSILON WITH DASIA AND PERISPOMENI -1F5F ; [.2042.0020.0008][.0000.0023.0002][.0000.002A.0002] # GREEK CAPITAL LETTER UPSILON WITH DASIA AND PERISPOMENI -03CD ; [.2042.0020.0002][.0000.0024.0002] # GREEK SMALL LETTER UPSILON WITH TONOS -1F7B ; [.2042.0020.0002][.0000.0024.0002] # GREEK SMALL LETTER UPSILON WITH OXIA -038E ; [.2042.0020.0008][.0000.0024.0002] # GREEK CAPITAL LETTER UPSILON WITH TONOS -1FEB ; [.2042.0020.0008][.0000.0024.0002] # GREEK CAPITAL LETTER UPSILON WITH OXIA -03D3 ; [.2042.0020.000A][.0000.0024.0002] # GREEK UPSILON WITH ACUTE AND HOOK SYMBOL -1F7A ; [.2042.0020.0002][.0000.0025.0002] # GREEK SMALL LETTER UPSILON WITH VARIA -1FEA ; [.2042.0020.0008][.0000.0025.0002] # GREEK CAPITAL LETTER UPSILON WITH VARIA -1FE0 ; [.2042.0020.0002][.0000.0026.0002] # GREEK SMALL LETTER UPSILON WITH VRACHY -1FE8 ; [.2042.0020.0008][.0000.0026.0002] # GREEK CAPITAL LETTER UPSILON WITH VRACHY -1FE6 ; [.2042.0020.0002][.0000.002A.0002] # GREEK SMALL LETTER UPSILON WITH PERISPOMENI -03CB ; [.2042.0020.0002][.0000.002B.0002] # GREEK SMALL LETTER UPSILON WITH DIALYTIKA -03AB ; [.2042.0020.0008][.0000.002B.0002] # GREEK CAPITAL LETTER UPSILON WITH DIALYTIKA -03D4 ; [.2042.0020.000A][.0000.002B.0002] # GREEK UPSILON WITH DIAERESIS AND HOOK SYMBOL -03B0 ; [.2042.0020.0002][.0000.002B.0002][.0000.0024.0002] # GREEK SMALL LETTER UPSILON WITH DIALYTIKA AND TONOS -1FE3 ; [.2042.0020.0002][.0000.002B.0002][.0000.0024.0002] # GREEK SMALL LETTER UPSILON WITH DIALYTIKA AND OXIA -1FE2 ; [.2042.0020.0002][.0000.002B.0002][.0000.0025.0002] # GREEK SMALL LETTER UPSILON WITH DIALYTIKA AND VARIA -1FE7 ; [.2042.0020.0002][.0000.002B.0002][.0000.002A.0002] # GREEK SMALL LETTER UPSILON WITH DIALYTIKA AND PERISPOMENI -1FE1 ; [.2042.0020.0002][.0000.0032.0002] # GREEK SMALL LETTER UPSILON WITH MACRON -1FE9 ; [.2042.0020.0008][.0000.0032.0002] # GREEK CAPITAL LETTER UPSILON WITH MACRON -03C6 ; [.2043.0020.0002] # GREEK SMALL LETTER PHI -03D5 ; [.2043.0020.0004] # GREEK PHI SYMBOL -1D6D7 ; [.2043.0020.0005] # MATHEMATICAL BOLD SMALL PHI -1D6DF ; [.2043.0020.0005] # MATHEMATICAL BOLD PHI SYMBOL -1D711 ; [.2043.0020.0005] # MATHEMATICAL ITALIC SMALL PHI -1D719 ; [.2043.0020.0005] # MATHEMATICAL ITALIC PHI SYMBOL -1D74B ; [.2043.0020.0005] # MATHEMATICAL BOLD ITALIC SMALL PHI -1D753 ; [.2043.0020.0005] # MATHEMATICAL BOLD ITALIC PHI SYMBOL -1D785 ; [.2043.0020.0005] # MATHEMATICAL SANS-SERIF BOLD SMALL PHI -1D78D ; [.2043.0020.0005] # MATHEMATICAL SANS-SERIF BOLD PHI SYMBOL -1D7BF ; [.2043.0020.0005] # MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL PHI -1D7C7 ; [.2043.0020.0005] # MATHEMATICAL SANS-SERIF BOLD ITALIC PHI SYMBOL -03A6 ; [.2043.0020.0008] # GREEK CAPITAL LETTER PHI -1D6BD ; [.2043.0020.000B] # MATHEMATICAL BOLD CAPITAL PHI -1D6F7 ; [.2043.0020.000B] # MATHEMATICAL ITALIC CAPITAL PHI -1D731 ; [.2043.0020.000B] # MATHEMATICAL BOLD ITALIC CAPITAL PHI -1D76B ; [.2043.0020.000B] # MATHEMATICAL SANS-SERIF BOLD CAPITAL PHI -1D7A5 ; [.2043.0020.000B] # MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL PHI -1D60 ; [.2043.0020.0014] # MODIFIER LETTER SMALL GREEK PHI -1D69 ; [.2043.0020.0015] # GREEK SUBSCRIPT SMALL LETTER PHI -03C7 ; [.2044.0020.0002] # GREEK SMALL LETTER CHI -1D6D8 ; [.2044.0020.0005] # MATHEMATICAL BOLD SMALL CHI -1D712 ; [.2044.0020.0005] # MATHEMATICAL ITALIC SMALL CHI -1D74C ; [.2044.0020.0005] # MATHEMATICAL BOLD ITALIC SMALL CHI -1D786 ; [.2044.0020.0005] # MATHEMATICAL SANS-SERIF BOLD SMALL CHI -1D7C0 ; [.2044.0020.0005] # MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL CHI -03A7 ; [.2044.0020.0008] # GREEK CAPITAL LETTER CHI -1D6BE ; [.2044.0020.000B] # MATHEMATICAL BOLD CAPITAL CHI -1D6F8 ; [.2044.0020.000B] # MATHEMATICAL ITALIC CAPITAL CHI -1D732 ; [.2044.0020.000B] # MATHEMATICAL BOLD ITALIC CAPITAL CHI -1D76C ; [.2044.0020.000B] # MATHEMATICAL SANS-SERIF BOLD CAPITAL CHI -1D7A6 ; [.2044.0020.000B] # MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL CHI -1D61 ; [.2044.0020.0014] # MODIFIER LETTER SMALL CHI -1D6A ; [.2044.0020.0015] # GREEK SUBSCRIPT SMALL LETTER CHI -03C8 ; [.2045.0020.0002] # GREEK SMALL LETTER PSI -1D6D9 ; [.2045.0020.0005] # MATHEMATICAL BOLD SMALL PSI -1D713 ; [.2045.0020.0005] # MATHEMATICAL ITALIC SMALL PSI -1D74D ; [.2045.0020.0005] # MATHEMATICAL BOLD ITALIC SMALL PSI -1D787 ; [.2045.0020.0005] # MATHEMATICAL SANS-SERIF BOLD SMALL PSI -1D7C1 ; [.2045.0020.0005] # MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL PSI -03A8 ; [.2045.0020.0008] # GREEK CAPITAL LETTER PSI -1D6BF ; [.2045.0020.000B] # MATHEMATICAL BOLD CAPITAL PSI -1D6F9 ; [.2045.0020.000B] # MATHEMATICAL ITALIC CAPITAL PSI -1D733 ; [.2045.0020.000B] # MATHEMATICAL BOLD ITALIC CAPITAL PSI -1D76D ; [.2045.0020.000B] # MATHEMATICAL SANS-SERIF BOLD CAPITAL PSI -1D7A7 ; [.2045.0020.000B] # MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL PSI -1D2A ; [.2046.0020.0002] # GREEK LETTER SMALL CAPITAL PSI -03C9 ; [.2047.0020.0002] # GREEK SMALL LETTER OMEGA -1D6DA ; [.2047.0020.0005] # MATHEMATICAL BOLD SMALL OMEGA -1D714 ; [.2047.0020.0005] # MATHEMATICAL ITALIC SMALL OMEGA -1D74E ; [.2047.0020.0005] # MATHEMATICAL BOLD ITALIC SMALL OMEGA -1D788 ; [.2047.0020.0005] # MATHEMATICAL SANS-SERIF BOLD SMALL OMEGA -1D7C2 ; [.2047.0020.0005] # MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL OMEGA -03A9 ; [.2047.0020.0008] # GREEK CAPITAL LETTER OMEGA -2126 ; [.2047.0020.0008] # OHM SIGN -1D6C0 ; [.2047.0020.000B] # MATHEMATICAL BOLD CAPITAL OMEGA -1D6FA ; [.2047.0020.000B] # MATHEMATICAL ITALIC CAPITAL OMEGA -1D734 ; [.2047.0020.000B] # MATHEMATICAL BOLD ITALIC CAPITAL OMEGA -1D76E ; [.2047.0020.000B] # MATHEMATICAL SANS-SERIF BOLD CAPITAL OMEGA -1D7A8 ; [.2047.0020.000B] # MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL OMEGA -1F60 ; [.2047.0020.0002][.0000.0022.0002] # GREEK SMALL LETTER OMEGA WITH PSILI -1F68 ; [.2047.0020.0008][.0000.0022.0002] # GREEK CAPITAL LETTER OMEGA WITH PSILI -1F64 ; [.2047.0020.0002][.0000.0022.0002][.0000.0024.0002] # GREEK SMALL LETTER OMEGA WITH PSILI AND OXIA -1F6C ; [.2047.0020.0008][.0000.0022.0002][.0000.0024.0002] # GREEK CAPITAL LETTER OMEGA WITH PSILI AND OXIA -1FA4 ; [.2047.0020.0002][.0000.0022.0002][.0000.0024.0002][.0000.004C.0002] # GREEK SMALL LETTER OMEGA WITH PSILI AND OXIA AND YPOGEGRAMMENI -1FAC ; [.2047.0020.0008][.0000.0022.0002][.0000.0024.0002][.0000.004C.0002] # GREEK CAPITAL LETTER OMEGA WITH PSILI AND OXIA AND PROSGEGRAMMENI -1F62 ; [.2047.0020.0002][.0000.0022.0002][.0000.0025.0002] # GREEK SMALL LETTER OMEGA WITH PSILI AND VARIA -1F6A ; [.2047.0020.0008][.0000.0022.0002][.0000.0025.0002] # GREEK CAPITAL LETTER OMEGA WITH PSILI AND VARIA -1FA2 ; [.2047.0020.0002][.0000.0022.0002][.0000.0025.0002][.0000.004C.0002] # GREEK SMALL LETTER OMEGA WITH PSILI AND VARIA AND YPOGEGRAMMENI -1FAA ; [.2047.0020.0008][.0000.0022.0002][.0000.0025.0002][.0000.004C.0002] # GREEK CAPITAL LETTER OMEGA WITH PSILI AND VARIA AND PROSGEGRAMMENI -1F66 ; [.2047.0020.0002][.0000.0022.0002][.0000.002A.0002] # GREEK SMALL LETTER OMEGA WITH PSILI AND PERISPOMENI -1F6E ; [.2047.0020.0008][.0000.0022.0002][.0000.002A.0002] # GREEK CAPITAL LETTER OMEGA WITH PSILI AND PERISPOMENI -1FA6 ; [.2047.0020.0002][.0000.0022.0002][.0000.002A.0002][.0000.004C.0002] # GREEK SMALL LETTER OMEGA WITH PSILI AND PERISPOMENI AND YPOGEGRAMMENI -1FAE ; [.2047.0020.0008][.0000.0022.0002][.0000.002A.0002][.0000.004C.0002] # GREEK CAPITAL LETTER OMEGA WITH PSILI AND PERISPOMENI AND PROSGEGRAMMENI -1FA0 ; [.2047.0020.0002][.0000.0022.0002][.0000.004C.0002] # GREEK SMALL LETTER OMEGA WITH PSILI AND YPOGEGRAMMENI -1FA8 ; [.2047.0020.0008][.0000.0022.0002][.0000.004C.0002] # GREEK CAPITAL LETTER OMEGA WITH PSILI AND PROSGEGRAMMENI -1F61 ; [.2047.0020.0002][.0000.0023.0002] # GREEK SMALL LETTER OMEGA WITH DASIA -1F69 ; [.2047.0020.0008][.0000.0023.0002] # GREEK CAPITAL LETTER OMEGA WITH DASIA -1F65 ; [.2047.0020.0002][.0000.0023.0002][.0000.0024.0002] # GREEK SMALL LETTER OMEGA WITH DASIA AND OXIA -1F6D ; [.2047.0020.0008][.0000.0023.0002][.0000.0024.0002] # GREEK CAPITAL LETTER OMEGA WITH DASIA AND OXIA -1FA5 ; [.2047.0020.0002][.0000.0023.0002][.0000.0024.0002][.0000.004C.0002] # GREEK SMALL LETTER OMEGA WITH DASIA AND OXIA AND YPOGEGRAMMENI -1FAD ; [.2047.0020.0008][.0000.0023.0002][.0000.0024.0002][.0000.004C.0002] # GREEK CAPITAL LETTER OMEGA WITH DASIA AND OXIA AND PROSGEGRAMMENI -1F63 ; [.2047.0020.0002][.0000.0023.0002][.0000.0025.0002] # GREEK SMALL LETTER OMEGA WITH DASIA AND VARIA -1F6B ; [.2047.0020.0008][.0000.0023.0002][.0000.0025.0002] # GREEK CAPITAL LETTER OMEGA WITH DASIA AND VARIA -1FA3 ; [.2047.0020.0002][.0000.0023.0002][.0000.0025.0002][.0000.004C.0002] # GREEK SMALL LETTER OMEGA WITH DASIA AND VARIA AND YPOGEGRAMMENI -1FAB ; [.2047.0020.0008][.0000.0023.0002][.0000.0025.0002][.0000.004C.0002] # GREEK CAPITAL LETTER OMEGA WITH DASIA AND VARIA AND PROSGEGRAMMENI -1F67 ; [.2047.0020.0002][.0000.0023.0002][.0000.002A.0002] # GREEK SMALL LETTER OMEGA WITH DASIA AND PERISPOMENI -1F6F ; [.2047.0020.0008][.0000.0023.0002][.0000.002A.0002] # GREEK CAPITAL LETTER OMEGA WITH DASIA AND PERISPOMENI -1FA7 ; [.2047.0020.0002][.0000.0023.0002][.0000.002A.0002][.0000.004C.0002] # GREEK SMALL LETTER OMEGA WITH DASIA AND PERISPOMENI AND YPOGEGRAMMENI -1FAF ; [.2047.0020.0008][.0000.0023.0002][.0000.002A.0002][.0000.004C.0002] # GREEK CAPITAL LETTER OMEGA WITH DASIA AND PERISPOMENI AND PROSGEGRAMMENI -1FA1 ; [.2047.0020.0002][.0000.0023.0002][.0000.004C.0002] # GREEK SMALL LETTER OMEGA WITH DASIA AND YPOGEGRAMMENI -1FA9 ; [.2047.0020.0008][.0000.0023.0002][.0000.004C.0002] # GREEK CAPITAL LETTER OMEGA WITH DASIA AND PROSGEGRAMMENI -03CE ; [.2047.0020.0002][.0000.0024.0002] # GREEK SMALL LETTER OMEGA WITH TONOS -1F7D ; [.2047.0020.0002][.0000.0024.0002] # GREEK SMALL LETTER OMEGA WITH OXIA -038F ; [.2047.0020.0008][.0000.0024.0002] # GREEK CAPITAL LETTER OMEGA WITH TONOS -1FFB ; [.2047.0020.0008][.0000.0024.0002] # GREEK CAPITAL LETTER OMEGA WITH OXIA -1FF4 ; [.2047.0020.0002][.0000.0024.0002][.0000.004C.0002] # GREEK SMALL LETTER OMEGA WITH OXIA AND YPOGEGRAMMENI -1F7C ; [.2047.0020.0002][.0000.0025.0002] # GREEK SMALL LETTER OMEGA WITH VARIA -1FFA ; [.2047.0020.0008][.0000.0025.0002] # GREEK CAPITAL LETTER OMEGA WITH VARIA -1FF2 ; [.2047.0020.0002][.0000.0025.0002][.0000.004C.0002] # GREEK SMALL LETTER OMEGA WITH VARIA AND YPOGEGRAMMENI -1FF6 ; [.2047.0020.0002][.0000.002A.0002] # GREEK SMALL LETTER OMEGA WITH PERISPOMENI -1FF7 ; [.2047.0020.0002][.0000.002A.0002][.0000.004C.0002] # GREEK SMALL LETTER OMEGA WITH PERISPOMENI AND YPOGEGRAMMENI -1FF3 ; [.2047.0020.0002][.0000.004C.0002] # GREEK SMALL LETTER OMEGA WITH YPOGEGRAMMENI -1FFC ; [.2047.0020.0008][.0000.004C.0002] # GREEK CAPITAL LETTER OMEGA WITH PROSGEGRAMMENI -AB65 ; [.2048.0020.0002] # GREEK LETTER SMALL CAPITAL OMEGA -03E1 ; [.2049.0020.0002] # GREEK SMALL LETTER SAMPI -03E0 ; [.2049.0020.0008] # GREEK LETTER SAMPI -0373 ; [.204A.0020.0002] # GREEK SMALL LETTER ARCHAIC SAMPI -0372 ; [.204A.0020.0008] # GREEK CAPITAL LETTER ARCHAIC SAMPI -03F8 ; [.204B.0020.0002] # GREEK SMALL LETTER SHO -03F7 ; [.204B.0020.0008] # GREEK CAPITAL LETTER SHO -2C81 ; [.204C.0020.0002] # COPTIC SMALL LETTER ALFA -2C80 ; [.204C.0020.0008] # COPTIC CAPITAL LETTER ALFA -2C83 ; [.204D.0020.0002] # COPTIC SMALL LETTER VIDA -2C82 ; [.204D.0020.0008] # COPTIC CAPITAL LETTER VIDA -2C85 ; [.204E.0020.0002] # COPTIC SMALL LETTER GAMMA -2C84 ; [.204E.0020.0008] # COPTIC CAPITAL LETTER GAMMA -2C87 ; [.204F.0020.0002] # COPTIC SMALL LETTER DALDA -2C86 ; [.204F.0020.0008] # COPTIC CAPITAL LETTER DALDA -2C89 ; [.2050.0020.0002] # COPTIC SMALL LETTER EIE -2C88 ; [.2050.0020.0008] # COPTIC CAPITAL LETTER EIE -2CB7 ; [.2051.0020.0002] # COPTIC SMALL LETTER CRYPTOGRAMMIC EIE -2CB6 ; [.2051.0020.0008] # COPTIC CAPITAL LETTER CRYPTOGRAMMIC EIE -2C8B ; [.2052.0020.0002] # COPTIC SMALL LETTER SOU -2C8A ; [.2052.0020.0008] # COPTIC CAPITAL LETTER SOU -2C8D ; [.2053.0020.0002] # COPTIC SMALL LETTER ZATA -2C8C ; [.2053.0020.0008] # COPTIC CAPITAL LETTER ZATA -2C8F ; [.2054.0020.0002] # COPTIC SMALL LETTER HATE -2C8E ; [.2054.0020.0008] # COPTIC CAPITAL LETTER HATE -2C91 ; [.2055.0020.0002] # COPTIC SMALL LETTER THETHE -2C90 ; [.2055.0020.0008] # COPTIC CAPITAL LETTER THETHE -2C93 ; [.2056.0020.0002] # COPTIC SMALL LETTER IAUDA -2C92 ; [.2056.0020.0008] # COPTIC CAPITAL LETTER IAUDA -2C95 ; [.2057.0020.0002] # COPTIC SMALL LETTER KAPA -2C94 ; [.2057.0020.0008] # COPTIC CAPITAL LETTER KAPA -2CE4 ; [.2057.0020.0004][.204C.0020.0004][.2056.0020.0004] # COPTIC SYMBOL KAI -2CB9 ; [.2058.0020.0002] # COPTIC SMALL LETTER DIALECT-P KAPA -2CB8 ; [.2058.0020.0008] # COPTIC CAPITAL LETTER DIALECT-P KAPA -2C97 ; [.2059.0020.0002] # COPTIC SMALL LETTER LAULA -2C96 ; [.2059.0020.0008] # COPTIC CAPITAL LETTER LAULA -2C99 ; [.205A.0020.0002] # COPTIC SMALL LETTER MI -2C98 ; [.205A.0020.0008] # COPTIC CAPITAL LETTER MI -2C9B ; [.205B.0020.0002] # COPTIC SMALL LETTER NI -2C9A ; [.205B.0020.0008] # COPTIC CAPITAL LETTER NI -2CBB ; [.205C.0020.0002] # COPTIC SMALL LETTER DIALECT-P NI -2CBA ; [.205C.0020.0008] # COPTIC CAPITAL LETTER DIALECT-P NI -2CBD ; [.205D.0020.0002] # COPTIC SMALL LETTER CRYPTOGRAMMIC NI -2CBC ; [.205D.0020.0008] # COPTIC CAPITAL LETTER CRYPTOGRAMMIC NI -2C9D ; [.205E.0020.0002] # COPTIC SMALL LETTER KSI -2C9C ; [.205E.0020.0008] # COPTIC CAPITAL LETTER KSI -2C9F ; [.205F.0020.0002] # COPTIC SMALL LETTER O -2C9E ; [.205F.0020.0008] # COPTIC CAPITAL LETTER O -2CA1 ; [.2060.0020.0002] # COPTIC SMALL LETTER PI -2CA0 ; [.2060.0020.0008] # COPTIC CAPITAL LETTER PI -2CA3 ; [.2061.0020.0002] # COPTIC SMALL LETTER RO -2CA2 ; [.2061.0020.0008] # COPTIC CAPITAL LETTER RO -2CA5 ; [.2062.0020.0002] # COPTIC SMALL LETTER SIMA -2CA4 ; [.2062.0020.0008] # COPTIC CAPITAL LETTER SIMA -2CA7 ; [.2063.0020.0002] # COPTIC SMALL LETTER TAU -2CA6 ; [.2063.0020.0008] # COPTIC CAPITAL LETTER TAU -2CA9 ; [.2064.0020.0002] # COPTIC SMALL LETTER UA -2CA8 ; [.2064.0020.0008] # COPTIC CAPITAL LETTER UA -2CAB ; [.2065.0020.0002] # COPTIC SMALL LETTER FI -2CAA ; [.2065.0020.0008] # COPTIC CAPITAL LETTER FI -2CAD ; [.2066.0020.0002] # COPTIC SMALL LETTER KHI -2CAC ; [.2066.0020.0008] # COPTIC CAPITAL LETTER KHI -2CAF ; [.2067.0020.0002] # COPTIC SMALL LETTER PSI -2CAE ; [.2067.0020.0008] # COPTIC CAPITAL LETTER PSI -2CB1 ; [.2068.0020.0002] # COPTIC SMALL LETTER OOU -2CB0 ; [.2068.0020.0008] # COPTIC CAPITAL LETTER OOU -2CBF ; [.2069.0020.0002] # COPTIC SMALL LETTER OLD COPTIC OOU -2CBE ; [.2069.0020.0008] # COPTIC CAPITAL LETTER OLD COPTIC OOU -2CC1 ; [.206A.0020.0002] # COPTIC SMALL LETTER SAMPI -2CC0 ; [.206A.0020.0008] # COPTIC CAPITAL LETTER SAMPI -03E3 ; [.206B.0020.0002] # COPTIC SMALL LETTER SHEI -03E2 ; [.206B.0020.0008] # COPTIC CAPITAL LETTER SHEI -2CEC ; [.206C.0020.0002] # COPTIC SMALL LETTER CRYPTOGRAMMIC SHEI -2CEB ; [.206C.0020.0008] # COPTIC CAPITAL LETTER CRYPTOGRAMMIC SHEI -2CC3 ; [.206D.0020.0002] # COPTIC SMALL LETTER CROSSED SHEI -2CC2 ; [.206D.0020.0008] # COPTIC CAPITAL LETTER CROSSED SHEI -2CC5 ; [.206E.0020.0002] # COPTIC SMALL LETTER OLD COPTIC SHEI -2CC4 ; [.206E.0020.0008] # COPTIC CAPITAL LETTER OLD COPTIC SHEI -2CC7 ; [.206F.0020.0002] # COPTIC SMALL LETTER OLD COPTIC ESH -2CC6 ; [.206F.0020.0008] # COPTIC CAPITAL LETTER OLD COPTIC ESH -03E5 ; [.2070.0020.0002] # COPTIC SMALL LETTER FEI -03E4 ; [.2070.0020.0008] # COPTIC CAPITAL LETTER FEI -03E7 ; [.2071.0020.0002] # COPTIC SMALL LETTER KHEI -03E6 ; [.2071.0020.0008] # COPTIC CAPITAL LETTER KHEI -2CF3 ; [.2072.0020.0002] # COPTIC SMALL LETTER BOHAIRIC KHEI -2CF2 ; [.2072.0020.0008] # COPTIC CAPITAL LETTER BOHAIRIC KHEI -2CC9 ; [.2073.0020.0002] # COPTIC SMALL LETTER AKHMIMIC KHEI -2CC8 ; [.2073.0020.0008] # COPTIC CAPITAL LETTER AKHMIMIC KHEI -03E9 ; [.2074.0020.0002] # COPTIC SMALL LETTER HORI -03E8 ; [.2074.0020.0008] # COPTIC CAPITAL LETTER HORI -2CCB ; [.2075.0020.0002] # COPTIC SMALL LETTER DIALECT-P HORI -2CCA ; [.2075.0020.0008] # COPTIC CAPITAL LETTER DIALECT-P HORI -2CCD ; [.2076.0020.0002] # COPTIC SMALL LETTER OLD COPTIC HORI -2CCC ; [.2076.0020.0008] # COPTIC CAPITAL LETTER OLD COPTIC HORI -2CCF ; [.2077.0020.0002] # COPTIC SMALL LETTER OLD COPTIC HA -2CCE ; [.2077.0020.0008] # COPTIC CAPITAL LETTER OLD COPTIC HA -2CD1 ; [.2078.0020.0002] # COPTIC SMALL LETTER L-SHAPED HA -2CD0 ; [.2078.0020.0008] # COPTIC CAPITAL LETTER L-SHAPED HA -2CD3 ; [.2079.0020.0002] # COPTIC SMALL LETTER OLD COPTIC HEI -2CD2 ; [.2079.0020.0008] # COPTIC CAPITAL LETTER OLD COPTIC HEI -2CD5 ; [.207A.0020.0002] # COPTIC SMALL LETTER OLD COPTIC HAT -2CD4 ; [.207A.0020.0008] # COPTIC CAPITAL LETTER OLD COPTIC HAT -03EB ; [.207B.0020.0002] # COPTIC SMALL LETTER GANGIA -03EA ; [.207B.0020.0008] # COPTIC CAPITAL LETTER GANGIA -2CEE ; [.207C.0020.0002] # COPTIC SMALL LETTER CRYPTOGRAMMIC GANGIA -2CED ; [.207C.0020.0008] # COPTIC CAPITAL LETTER CRYPTOGRAMMIC GANGIA -2CD7 ; [.207D.0020.0002] # COPTIC SMALL LETTER OLD COPTIC GANGIA -2CD6 ; [.207D.0020.0008] # COPTIC CAPITAL LETTER OLD COPTIC GANGIA -03ED ; [.207E.0020.0002] # COPTIC SMALL LETTER SHIMA -03EC ; [.207E.0020.0008] # COPTIC CAPITAL LETTER SHIMA -2CD9 ; [.207F.0020.0002] # COPTIC SMALL LETTER OLD COPTIC DJA -2CD8 ; [.207F.0020.0008] # COPTIC CAPITAL LETTER OLD COPTIC DJA -2CDB ; [.2080.0020.0002] # COPTIC SMALL LETTER OLD COPTIC SHIMA -2CDA ; [.2080.0020.0008] # COPTIC CAPITAL LETTER OLD COPTIC SHIMA -2CDD ; [.2081.0020.0002] # COPTIC SMALL LETTER OLD NUBIAN SHIMA -2CDC ; [.2081.0020.0008] # COPTIC CAPITAL LETTER OLD NUBIAN SHIMA -03EF ; [.2082.0020.0002] # COPTIC SMALL LETTER DEI -03EE ; [.2082.0020.0008] # COPTIC CAPITAL LETTER DEI -2CB3 ; [.2083.0020.0002] # COPTIC SMALL LETTER DIALECT-P ALEF -2CB2 ; [.2083.0020.0008] # COPTIC CAPITAL LETTER DIALECT-P ALEF -2CB5 ; [.2084.0020.0002] # COPTIC SMALL LETTER OLD COPTIC AIN -2CB4 ; [.2084.0020.0008] # COPTIC CAPITAL LETTER OLD COPTIC AIN -2CDF ; [.2085.0020.0002] # COPTIC SMALL LETTER OLD NUBIAN NGI -2CDE ; [.2085.0020.0008] # COPTIC CAPITAL LETTER OLD NUBIAN NGI -2CE1 ; [.2086.0020.0002] # COPTIC SMALL LETTER OLD NUBIAN NYI -2CE0 ; [.2086.0020.0008] # COPTIC CAPITAL LETTER OLD NUBIAN NYI -2CE3 ; [.2087.0020.0002] # COPTIC SMALL LETTER OLD NUBIAN WAU -2CE2 ; [.2087.0020.0008] # COPTIC CAPITAL LETTER OLD NUBIAN WAU -0430 ; [.2088.0020.0002] # CYRILLIC SMALL LETTER A -2DF6 ; [.2088.0020.0004] # COMBINING CYRILLIC LETTER A -0410 ; [.2088.0020.0008] # CYRILLIC CAPITAL LETTER A -04D1 ; [.2088.0020.0002][.0000.0026.0002] # CYRILLIC SMALL LETTER A WITH BREVE -04D0 ; [.2088.0020.0008][.0000.0026.0002] # CYRILLIC CAPITAL LETTER A WITH BREVE -04D3 ; [.2088.0020.0002][.0000.002B.0002] # CYRILLIC SMALL LETTER A WITH DIAERESIS -04D2 ; [.2088.0020.0008][.0000.002B.0002] # CYRILLIC CAPITAL LETTER A WITH DIAERESIS -04D9 ; [.208C.0020.0002] # CYRILLIC SMALL LETTER SCHWA -04D8 ; [.208C.0020.0008] # CYRILLIC CAPITAL LETTER SCHWA -04DB ; [.208C.0020.0002][.0000.002B.0002] # CYRILLIC SMALL LETTER SCHWA WITH DIAERESIS -04DA ; [.208C.0020.0008][.0000.002B.0002] # CYRILLIC CAPITAL LETTER SCHWA WITH DIAERESIS -04D5 ; [.2090.0020.0002] # CYRILLIC SMALL LIGATURE A IE -04D4 ; [.2090.0020.0008] # CYRILLIC CAPITAL LIGATURE A IE -0431 ; [.2094.0020.0002] # CYRILLIC SMALL LETTER BE -2DE0 ; [.2094.0020.0004] # COMBINING CYRILLIC LETTER BE -0411 ; [.2094.0020.0008] # CYRILLIC CAPITAL LETTER BE -0432 ; [.2098.0020.0002] # CYRILLIC SMALL LETTER VE -1C80 ; [.2098.0020.0004] # CYRILLIC SMALL LETTER ROUNDED VE -2DE1 ; [.2098.0020.0004] # COMBINING CYRILLIC LETTER VE -0412 ; [.2098.0020.0008] # CYRILLIC CAPITAL LETTER VE -0433 ; [.209C.0020.0002] # CYRILLIC SMALL LETTER GHE -2DE2 ; [.209C.0020.0004] # COMBINING CYRILLIC LETTER GHE -0413 ; [.209C.0020.0008] # CYRILLIC CAPITAL LETTER GHE -0453 ; [.209C.0020.0002][.0000.0024.0002] # CYRILLIC SMALL LETTER GJE -0403 ; [.209C.0020.0008][.0000.0024.0002] # CYRILLIC CAPITAL LETTER GJE -0491 ; [.209C.0020.0004][.0000.0112.0004] # CYRILLIC SMALL LETTER GHE WITH UPTURN -0490 ; [.209C.0020.000A][.0000.0112.0004] # CYRILLIC CAPITAL LETTER GHE WITH UPTURN -0493 ; [.20A0.0020.0002] # CYRILLIC SMALL LETTER GHE WITH STROKE -0492 ; [.20A0.0020.0008] # CYRILLIC CAPITAL LETTER GHE WITH STROKE -04FB ; [.20A4.0020.0002] # CYRILLIC SMALL LETTER GHE WITH STROKE AND HOOK -04FA ; [.20A4.0020.0008] # CYRILLIC CAPITAL LETTER GHE WITH STROKE AND HOOK -0495 ; [.20A8.0020.0002] # CYRILLIC SMALL LETTER GHE WITH MIDDLE HOOK -0494 ; [.20A8.0020.0008] # CYRILLIC CAPITAL LETTER GHE WITH MIDDLE HOOK -04F7 ; [.20AC.0020.0002] # CYRILLIC SMALL LETTER GHE WITH DESCENDER -04F6 ; [.20AC.0020.0008] # CYRILLIC CAPITAL LETTER GHE WITH DESCENDER -0434 ; [.20B0.0020.0002] # CYRILLIC SMALL LETTER DE -1C81 ; [.20B0.0020.0004] # CYRILLIC SMALL LETTER LONG-LEGGED DE -2DE3 ; [.20B0.0020.0004] # COMBINING CYRILLIC LETTER DE -0414 ; [.20B0.0020.0008] # CYRILLIC CAPITAL LETTER DE -0501 ; [.20B4.0020.0002] # CYRILLIC SMALL LETTER KOMI DE -0500 ; [.20B4.0020.0008] # CYRILLIC CAPITAL LETTER KOMI DE -A681 ; [.20B5.0020.0002] # CYRILLIC SMALL LETTER DWE -A680 ; [.20B5.0020.0008] # CYRILLIC CAPITAL LETTER DWE -0452 ; [.20B6.0020.0002] # CYRILLIC SMALL LETTER DJE -0402 ; [.20B6.0020.0008] # CYRILLIC CAPITAL LETTER DJE -A663 ; [.20BA.0020.0002] # CYRILLIC SMALL LETTER SOFT DE -A662 ; [.20BA.0020.0008] # CYRILLIC CAPITAL LETTER SOFT DE -0503 ; [.20BB.0020.0002] # CYRILLIC SMALL LETTER KOMI DJE -0502 ; [.20BB.0020.0008] # CYRILLIC CAPITAL LETTER KOMI DJE -0499 ; [.20BC.0020.0002] # CYRILLIC SMALL LETTER ZE WITH DESCENDER -0498 ; [.20BC.0020.0008] # CYRILLIC CAPITAL LETTER ZE WITH DESCENDER -0435 ; [.20C0.0020.0002] # CYRILLIC SMALL LETTER IE -2DF7 ; [.20C0.0020.0004] # COMBINING CYRILLIC LETTER IE -0415 ; [.20C0.0020.0008] # CYRILLIC CAPITAL LETTER IE -0450 ; [.20C0.0020.0002][.0000.0025.0002] # CYRILLIC SMALL LETTER IE WITH GRAVE -0400 ; [.20C0.0020.0008][.0000.0025.0002] # CYRILLIC CAPITAL LETTER IE WITH GRAVE -04D7 ; [.20C0.0020.0002][.0000.0026.0002] # CYRILLIC SMALL LETTER IE WITH BREVE -04D6 ; [.20C0.0020.0008][.0000.0026.0002] # CYRILLIC CAPITAL LETTER IE WITH BREVE -0451 ; [.20C0.0020.0002][.0000.002B.0002] # CYRILLIC SMALL LETTER IO -0401 ; [.20C0.0020.0008][.0000.002B.0002] # CYRILLIC CAPITAL LETTER IO -0454 ; [.20C4.0020.0002] # CYRILLIC SMALL LETTER UKRAINIAN IE -A674 ; [.20C4.0020.0004] # COMBINING CYRILLIC LETTER UKRAINIAN IE -0404 ; [.20C4.0020.0008] # CYRILLIC CAPITAL LETTER UKRAINIAN IE -0436 ; [.20C8.0020.0002] # CYRILLIC SMALL LETTER ZHE -2DE4 ; [.20C8.0020.0004] # COMBINING CYRILLIC LETTER ZHE -0416 ; [.20C8.0020.0008] # CYRILLIC CAPITAL LETTER ZHE -04C2 ; [.20C8.0020.0002][.0000.0026.0002] # CYRILLIC SMALL LETTER ZHE WITH BREVE -04C1 ; [.20C8.0020.0008][.0000.0026.0002] # CYRILLIC CAPITAL LETTER ZHE WITH BREVE -04DD ; [.20C8.0020.0002][.0000.002B.0002] # CYRILLIC SMALL LETTER ZHE WITH DIAERESIS -04DC ; [.20C8.0020.0008][.0000.002B.0002] # CYRILLIC CAPITAL LETTER ZHE WITH DIAERESIS -052B ; [.20CC.0020.0002] # CYRILLIC SMALL LETTER DZZHE -052A ; [.20CC.0020.0008] # CYRILLIC CAPITAL LETTER DZZHE -A685 ; [.20CD.0020.0002] # CYRILLIC SMALL LETTER ZHWE -A684 ; [.20CD.0020.0008] # CYRILLIC CAPITAL LETTER ZHWE -0497 ; [.20CE.0020.0002] # CYRILLIC SMALL LETTER ZHE WITH DESCENDER -0496 ; [.20CE.0020.0008] # CYRILLIC CAPITAL LETTER ZHE WITH DESCENDER -0437 ; [.20D2.0020.0002] # CYRILLIC SMALL LETTER ZE -2DE5 ; [.20D2.0020.0004] # COMBINING CYRILLIC LETTER ZE -0417 ; [.20D2.0020.0008] # CYRILLIC CAPITAL LETTER ZE -04DF ; [.20D2.0020.0002][.0000.002B.0002] # CYRILLIC SMALL LETTER ZE WITH DIAERESIS -04DE ; [.20D2.0020.0008][.0000.002B.0002] # CYRILLIC CAPITAL LETTER ZE WITH DIAERESIS -A641 ; [.20D6.0020.0002] # CYRILLIC SMALL LETTER ZEMLYA -A640 ; [.20D6.0020.0008] # CYRILLIC CAPITAL LETTER ZEMLYA -0505 ; [.20D7.0020.0002] # CYRILLIC SMALL LETTER KOMI ZJE -0504 ; [.20D7.0020.0008] # CYRILLIC CAPITAL LETTER KOMI ZJE -0511 ; [.20D8.0020.0002] # CYRILLIC SMALL LETTER REVERSED ZE -0510 ; [.20D8.0020.0008] # CYRILLIC CAPITAL LETTER REVERSED ZE -A643 ; [.20D9.0020.0002] # CYRILLIC SMALL LETTER DZELO -A642 ; [.20D9.0020.0008] # CYRILLIC CAPITAL LETTER DZELO -0455 ; [.20DA.0020.0002] # CYRILLIC SMALL LETTER DZE -0405 ; [.20DA.0020.0008] # CYRILLIC CAPITAL LETTER DZE -A645 ; [.20DE.0020.0002] # CYRILLIC SMALL LETTER REVERSED DZE -A644 ; [.20DE.0020.0008] # CYRILLIC CAPITAL LETTER REVERSED DZE -04E1 ; [.20DF.0020.0002] # CYRILLIC SMALL LETTER ABKHASIAN DZE -04E0 ; [.20DF.0020.0008] # CYRILLIC CAPITAL LETTER ABKHASIAN DZE -A689 ; [.20E3.0020.0002] # CYRILLIC SMALL LETTER DZZE -A688 ; [.20E3.0020.0008] # CYRILLIC CAPITAL LETTER DZZE -0507 ; [.20E4.0020.0002] # CYRILLIC SMALL LETTER KOMI DZJE -0506 ; [.20E4.0020.0008] # CYRILLIC CAPITAL LETTER KOMI DZJE -A683 ; [.20E5.0020.0002] # CYRILLIC SMALL LETTER DZWE -A682 ; [.20E5.0020.0008] # CYRILLIC CAPITAL LETTER DZWE -0438 ; [.20E6.0020.0002] # CYRILLIC SMALL LETTER I -A675 ; [.20E6.0020.0004] # COMBINING CYRILLIC LETTER I -0418 ; [.20E6.0020.0008] # CYRILLIC CAPITAL LETTER I -045D ; [.20E6.0020.0002][.0000.0025.0002] # CYRILLIC SMALL LETTER I WITH GRAVE -040D ; [.20E6.0020.0008][.0000.0025.0002] # CYRILLIC CAPITAL LETTER I WITH GRAVE -04E5 ; [.20E6.0020.0002][.0000.002B.0002] # CYRILLIC SMALL LETTER I WITH DIAERESIS -04E4 ; [.20E6.0020.0008][.0000.002B.0002] # CYRILLIC CAPITAL LETTER I WITH DIAERESIS -04E3 ; [.20E6.0020.0002][.0000.0032.0002] # CYRILLIC SMALL LETTER I WITH MACRON -04E2 ; [.20E6.0020.0008][.0000.0032.0002] # CYRILLIC CAPITAL LETTER I WITH MACRON -048B ; [.20EA.0020.0002] # CYRILLIC SMALL LETTER SHORT I WITH TAIL -048A ; [.20EA.0020.0008] # CYRILLIC CAPITAL LETTER SHORT I WITH TAIL -0456 ; [.20EE.0020.0002] # CYRILLIC SMALL LETTER BYELORUSSIAN-UKRAINIAN I -0406 ; [.20EE.0020.0008] # CYRILLIC CAPITAL LETTER BYELORUSSIAN-UKRAINIAN I -0457 ; [.20EE.0020.0002][.0000.002B.0002] # CYRILLIC SMALL LETTER YI -A676 ; [.20EE.0020.0004][.0000.002B.0004] # COMBINING CYRILLIC LETTER YI -0407 ; [.20EE.0020.0008][.0000.002B.0002] # CYRILLIC CAPITAL LETTER YI -A647 ; [.20F2.0020.0002] # CYRILLIC SMALL LETTER IOTA -A646 ; [.20F2.0020.0008] # CYRILLIC CAPITAL LETTER IOTA -0439 ; [.20F3.0020.0002] # CYRILLIC SMALL LETTER SHORT I -0438 0306 ; [.20F3.0020.0002] # CYRILLIC SMALL LETTER SHORT I -0419 ; [.20F3.0020.0008] # CYRILLIC CAPITAL LETTER SHORT I -0418 0306 ; [.20F3.0020.0008] # CYRILLIC CAPITAL LETTER SHORT I -0458 ; [.20F7.0020.0002] # CYRILLIC SMALL LETTER JE -0408 ; [.20F7.0020.0008] # CYRILLIC CAPITAL LETTER JE -A649 ; [.20FB.0020.0002] # CYRILLIC SMALL LETTER DJERV -2DF8 ; [.20FB.0020.0004] # COMBINING CYRILLIC LETTER DJERV -A648 ; [.20FB.0020.0008] # CYRILLIC CAPITAL LETTER DJERV -043A ; [.20FC.0020.0002] # CYRILLIC SMALL LETTER KA -2DE6 ; [.20FC.0020.0004] # COMBINING CYRILLIC LETTER KA -041A ; [.20FC.0020.0008] # CYRILLIC CAPITAL LETTER KA -045C ; [.20FC.0020.0002][.0000.0024.0002] # CYRILLIC SMALL LETTER KJE -040C ; [.20FC.0020.0008][.0000.0024.0002] # CYRILLIC CAPITAL LETTER KJE -049B ; [.2100.0020.0002] # CYRILLIC SMALL LETTER KA WITH DESCENDER -049A ; [.2100.0020.0008] # CYRILLIC CAPITAL LETTER KA WITH DESCENDER -04C4 ; [.2104.0020.0002] # CYRILLIC SMALL LETTER KA WITH HOOK -04C3 ; [.2104.0020.0008] # CYRILLIC CAPITAL LETTER KA WITH HOOK -04A1 ; [.2108.0020.0002] # CYRILLIC SMALL LETTER BASHKIR KA -04A0 ; [.2108.0020.0008] # CYRILLIC CAPITAL LETTER BASHKIR KA -049F ; [.210C.0020.0002] # CYRILLIC SMALL LETTER KA WITH STROKE -049E ; [.210C.0020.0008] # CYRILLIC CAPITAL LETTER KA WITH STROKE -049D ; [.2110.0020.0002] # CYRILLIC SMALL LETTER KA WITH VERTICAL STROKE -049C ; [.2110.0020.0008] # CYRILLIC CAPITAL LETTER KA WITH VERTICAL STROKE -051F ; [.2114.0020.0002] # CYRILLIC SMALL LETTER ALEUT KA -051E ; [.2114.0020.0008] # CYRILLIC CAPITAL LETTER ALEUT KA -051B ; [.2115.0020.0002] # CYRILLIC SMALL LETTER QA -051A ; [.2115.0020.0008] # CYRILLIC CAPITAL LETTER QA -043B ; [.2116.0020.0002] # CYRILLIC SMALL LETTER EL -2DE7 ; [.2116.0020.0004] # COMBINING CYRILLIC LETTER EL -041B ; [.2116.0020.0008] # CYRILLIC CAPITAL LETTER EL -1D2B ; [.211A.0020.0002] # CYRILLIC LETTER SMALL CAPITAL EL -04C6 ; [.211B.0020.0002] # CYRILLIC SMALL LETTER EL WITH TAIL -04C5 ; [.211B.0020.0008] # CYRILLIC CAPITAL LETTER EL WITH TAIL -052F ; [.211F.0020.0002] # CYRILLIC SMALL LETTER EL WITH DESCENDER -052E ; [.211F.0020.0008] # CYRILLIC CAPITAL LETTER EL WITH DESCENDER -0513 ; [.2120.0020.0002] # CYRILLIC SMALL LETTER EL WITH HOOK -0512 ; [.2120.0020.0008] # CYRILLIC CAPITAL LETTER EL WITH HOOK -0521 ; [.2121.0020.0002] # CYRILLIC SMALL LETTER EL WITH MIDDLE HOOK -0520 ; [.2121.0020.0008] # CYRILLIC CAPITAL LETTER EL WITH MIDDLE HOOK -0459 ; [.2122.0020.0002] # CYRILLIC SMALL LETTER LJE -0409 ; [.2122.0020.0008] # CYRILLIC CAPITAL LETTER LJE -A665 ; [.2126.0020.0002] # CYRILLIC SMALL LETTER SOFT EL -A664 ; [.2126.0020.0008] # CYRILLIC CAPITAL LETTER SOFT EL -0509 ; [.2127.0020.0002] # CYRILLIC SMALL LETTER KOMI LJE -0508 ; [.2127.0020.0008] # CYRILLIC CAPITAL LETTER KOMI LJE -0515 ; [.2128.0020.0002] # CYRILLIC SMALL LETTER LHA -0514 ; [.2128.0020.0008] # CYRILLIC CAPITAL LETTER LHA -043C ; [.2129.0020.0002] # CYRILLIC SMALL LETTER EM -2DE8 ; [.2129.0020.0004] # COMBINING CYRILLIC LETTER EM -041C ; [.2129.0020.0008] # CYRILLIC CAPITAL LETTER EM -04CE ; [.212D.0020.0002] # CYRILLIC SMALL LETTER EM WITH TAIL -04CD ; [.212D.0020.0008] # CYRILLIC CAPITAL LETTER EM WITH TAIL -A667 ; [.2131.0020.0002] # CYRILLIC SMALL LETTER SOFT EM -A666 ; [.2131.0020.0008] # CYRILLIC CAPITAL LETTER SOFT EM -043D ; [.2132.0020.0002] # CYRILLIC SMALL LETTER EN -2DE9 ; [.2132.0020.0004] # COMBINING CYRILLIC LETTER EN -041D ; [.2132.0020.0008] # CYRILLIC CAPITAL LETTER EN -1D78 ; [.2132.0020.0014] # MODIFIER LETTER CYRILLIC EN -0529 ; [.2136.0020.0002] # CYRILLIC SMALL LETTER EN WITH LEFT HOOK -0528 ; [.2136.0020.0008] # CYRILLIC CAPITAL LETTER EN WITH LEFT HOOK -04CA ; [.2137.0020.0002] # CYRILLIC SMALL LETTER EN WITH TAIL -04C9 ; [.2137.0020.0008] # CYRILLIC CAPITAL LETTER EN WITH TAIL -04A3 ; [.213B.0020.0002] # CYRILLIC SMALL LETTER EN WITH DESCENDER -04A2 ; [.213B.0020.0008] # CYRILLIC CAPITAL LETTER EN WITH DESCENDER -04C8 ; [.213F.0020.0002] # CYRILLIC SMALL LETTER EN WITH HOOK -04C7 ; [.213F.0020.0008] # CYRILLIC CAPITAL LETTER EN WITH HOOK -0523 ; [.2143.0020.0002] # CYRILLIC SMALL LETTER EN WITH MIDDLE HOOK -0522 ; [.2143.0020.0008] # CYRILLIC CAPITAL LETTER EN WITH MIDDLE HOOK -04A5 ; [.2144.0020.0002] # CYRILLIC SMALL LIGATURE EN GHE -04A4 ; [.2144.0020.0008] # CYRILLIC CAPITAL LIGATURE EN GHE -045A ; [.2148.0020.0002] # CYRILLIC SMALL LETTER NJE -040A ; [.2148.0020.0008] # CYRILLIC CAPITAL LETTER NJE -050B ; [.214C.0020.0002] # CYRILLIC SMALL LETTER KOMI NJE -050A ; [.214C.0020.0008] # CYRILLIC CAPITAL LETTER KOMI NJE -043E ; [.214D.0020.0002] # CYRILLIC SMALL LETTER O -1C82 ; [.214D.0020.0004] # CYRILLIC SMALL LETTER NARROW O -2DEA ; [.214D.0020.0004] # COMBINING CYRILLIC LETTER O -A669 ; [.214D.0020.0004] # CYRILLIC SMALL LETTER MONOCULAR O -A66B ; [.214D.0020.0004] # CYRILLIC SMALL LETTER BINOCULAR O -A66D ; [.214D.0020.0004] # CYRILLIC SMALL LETTER DOUBLE MONOCULAR O -A66E ; [.214D.0020.0004] # CYRILLIC LETTER MULTIOCULAR O -A699 ; [.214D.0020.0004] # CYRILLIC SMALL LETTER DOUBLE O -A69B ; [.214D.0020.0004] # CYRILLIC SMALL LETTER CROSSED O -041E ; [.214D.0020.0008] # CYRILLIC CAPITAL LETTER O -A668 ; [.214D.0020.000A] # CYRILLIC CAPITAL LETTER MONOCULAR O -A66A ; [.214D.0020.000A] # CYRILLIC CAPITAL LETTER BINOCULAR O -A66C ; [.214D.0020.000A] # CYRILLIC CAPITAL LETTER DOUBLE MONOCULAR O -A698 ; [.214D.0020.000A] # CYRILLIC CAPITAL LETTER DOUBLE O -A69A ; [.214D.0020.000A] # CYRILLIC CAPITAL LETTER CROSSED O -04E7 ; [.214D.0020.0002][.0000.002B.0002] # CYRILLIC SMALL LETTER O WITH DIAERESIS -04E6 ; [.214D.0020.0008][.0000.002B.0002] # CYRILLIC CAPITAL LETTER O WITH DIAERESIS -04E9 ; [.2151.0020.0002] # CYRILLIC SMALL LETTER BARRED O -04E8 ; [.2151.0020.0008] # CYRILLIC CAPITAL LETTER BARRED O -04EB ; [.2151.0020.0002][.0000.002B.0002] # CYRILLIC SMALL LETTER BARRED O WITH DIAERESIS -04EA ; [.2151.0020.0008][.0000.002B.0002] # CYRILLIC CAPITAL LETTER BARRED O WITH DIAERESIS -043F ; [.2155.0020.0002] # CYRILLIC SMALL LETTER PE -2DEB ; [.2155.0020.0004] # COMBINING CYRILLIC LETTER PE -041F ; [.2155.0020.0008] # CYRILLIC CAPITAL LETTER PE -0525 ; [.2159.0020.0002] # CYRILLIC SMALL LETTER PE WITH DESCENDER -0524 ; [.2159.0020.0008] # CYRILLIC CAPITAL LETTER PE WITH DESCENDER -04A7 ; [.215A.0020.0002] # CYRILLIC SMALL LETTER PE WITH MIDDLE HOOK -04A6 ; [.215A.0020.0008] # CYRILLIC CAPITAL LETTER PE WITH MIDDLE HOOK -0481 ; [.215E.0020.0002] # CYRILLIC SMALL LETTER KOPPA -0480 ; [.215E.0020.0008] # CYRILLIC CAPITAL LETTER KOPPA -0440 ; [.2162.0020.0002] # CYRILLIC SMALL LETTER ER -2DEC ; [.2162.0020.0004] # COMBINING CYRILLIC LETTER ER -0420 ; [.2162.0020.0008] # CYRILLIC CAPITAL LETTER ER -048F ; [.2166.0020.0002] # CYRILLIC SMALL LETTER ER WITH TICK -048E ; [.2166.0020.0008] # CYRILLIC CAPITAL LETTER ER WITH TICK -0517 ; [.216A.0020.0002] # CYRILLIC SMALL LETTER RHA -0516 ; [.216A.0020.0008] # CYRILLIC CAPITAL LETTER RHA -0441 ; [.216B.0020.0002] # CYRILLIC SMALL LETTER ES -1C83 ; [.216B.0020.0004] # CYRILLIC SMALL LETTER WIDE ES -2DED ; [.216B.0020.0004] # COMBINING CYRILLIC LETTER ES -0421 ; [.216B.0020.0008] # CYRILLIC CAPITAL LETTER ES -2DF5 ; [.216B.0020.0004][.2174.0020.0004] # COMBINING CYRILLIC LETTER ES-TE -050D ; [.216F.0020.0002] # CYRILLIC SMALL LETTER KOMI SJE -050C ; [.216F.0020.0008] # CYRILLIC CAPITAL LETTER KOMI SJE -04AB ; [.2170.0020.0002] # CYRILLIC SMALL LETTER ES WITH DESCENDER -04AA ; [.2170.0020.0008] # CYRILLIC CAPITAL LETTER ES WITH DESCENDER -0442 ; [.2174.0020.0002] # CYRILLIC SMALL LETTER TE -1C84 ; [.2174.0020.0004] # CYRILLIC SMALL LETTER TALL TE -1C85 ; [.2174.0020.0004] # CYRILLIC SMALL LETTER THREE-LEGGED TE -2DEE ; [.2174.0020.0004] # COMBINING CYRILLIC LETTER TE -0422 ; [.2174.0020.0008] # CYRILLIC CAPITAL LETTER TE -A68D ; [.2178.0020.0002] # CYRILLIC SMALL LETTER TWE -A68C ; [.2178.0020.0008] # CYRILLIC CAPITAL LETTER TWE -050F ; [.2179.0020.0002] # CYRILLIC SMALL LETTER KOMI TJE -050E ; [.2179.0020.0008] # CYRILLIC CAPITAL LETTER KOMI TJE -04AD ; [.217A.0020.0002] # CYRILLIC SMALL LETTER TE WITH DESCENDER -04AC ; [.217A.0020.0008] # CYRILLIC CAPITAL LETTER TE WITH DESCENDER -A68B ; [.217E.0020.0002] # CYRILLIC SMALL LETTER TE WITH MIDDLE HOOK -A68A ; [.217E.0020.0008] # CYRILLIC CAPITAL LETTER TE WITH MIDDLE HOOK -045B ; [.217F.0020.0002] # CYRILLIC SMALL LETTER TSHE -040B ; [.217F.0020.0008] # CYRILLIC CAPITAL LETTER TSHE -0443 ; [.2183.0020.0002] # CYRILLIC SMALL LETTER U -A677 ; [.2183.0020.0004] # COMBINING CYRILLIC LETTER U -0423 ; [.2183.0020.0008] # CYRILLIC CAPITAL LETTER U -045E ; [.2183.0020.0002][.0000.0026.0002] # CYRILLIC SMALL LETTER SHORT U -040E ; [.2183.0020.0008][.0000.0026.0002] # CYRILLIC CAPITAL LETTER SHORT U -04F1 ; [.2183.0020.0002][.0000.002B.0002] # CYRILLIC SMALL LETTER U WITH DIAERESIS -04F0 ; [.2183.0020.0008][.0000.002B.0002] # CYRILLIC CAPITAL LETTER U WITH DIAERESIS -04F3 ; [.2183.0020.0002][.0000.002C.0002] # CYRILLIC SMALL LETTER U WITH DOUBLE ACUTE -04F2 ; [.2183.0020.0008][.0000.002C.0002] # CYRILLIC CAPITAL LETTER U WITH DOUBLE ACUTE -04EF ; [.2183.0020.0002][.0000.0032.0002] # CYRILLIC SMALL LETTER U WITH MACRON -04EE ; [.2183.0020.0008][.0000.0032.0002] # CYRILLIC CAPITAL LETTER U WITH MACRON -04AF ; [.2187.0020.0002] # CYRILLIC SMALL LETTER STRAIGHT U -04AE ; [.2187.0020.0008] # CYRILLIC CAPITAL LETTER STRAIGHT U -04B1 ; [.218B.0020.0002] # CYRILLIC SMALL LETTER STRAIGHT U WITH STROKE -04B0 ; [.218B.0020.0008] # CYRILLIC CAPITAL LETTER STRAIGHT U WITH STROKE -A64B ; [.218F.0020.0002] # CYRILLIC SMALL LETTER MONOGRAPH UK -1C88 ; [.218F.0020.0004] # CYRILLIC SMALL LETTER UNBLENDED UK -2DF9 ; [.218F.0020.0004] # COMBINING CYRILLIC LETTER MONOGRAPH UK -A64A ; [.218F.0020.0008] # CYRILLIC CAPITAL LETTER MONOGRAPH UK -0479 ; [.2190.0020.0002] # CYRILLIC SMALL LETTER UK -0478 ; [.2190.0020.0008] # CYRILLIC CAPITAL LETTER UK -0444 ; [.2194.0020.0002] # CYRILLIC SMALL LETTER EF -A69E ; [.2194.0020.0004] # COMBINING CYRILLIC LETTER EF -0424 ; [.2194.0020.0008] # CYRILLIC CAPITAL LETTER EF -0445 ; [.2198.0020.0002] # CYRILLIC SMALL LETTER HA -2DEF ; [.2198.0020.0004] # COMBINING CYRILLIC LETTER HA -0425 ; [.2198.0020.0008] # CYRILLIC CAPITAL LETTER HA -04FD ; [.219C.0020.0002] # CYRILLIC SMALL LETTER HA WITH HOOK -04FC ; [.219C.0020.0008] # CYRILLIC CAPITAL LETTER HA WITH HOOK -04FF ; [.21A0.0020.0002] # CYRILLIC SMALL LETTER HA WITH STROKE -04FE ; [.21A0.0020.0008] # CYRILLIC CAPITAL LETTER HA WITH STROKE -04B3 ; [.21A4.0020.0002] # CYRILLIC SMALL LETTER HA WITH DESCENDER -04B2 ; [.21A4.0020.0008] # CYRILLIC CAPITAL LETTER HA WITH DESCENDER -04BB ; [.21A8.0020.0002] # CYRILLIC SMALL LETTER SHHA -04BA ; [.21A8.0020.0008] # CYRILLIC CAPITAL LETTER SHHA -0527 ; [.21AC.0020.0002] # CYRILLIC SMALL LETTER SHHA WITH DESCENDER -0526 ; [.21AC.0020.0008] # CYRILLIC CAPITAL LETTER SHHA WITH DESCENDER -A695 ; [.21AD.0020.0002] # CYRILLIC SMALL LETTER HWE -A694 ; [.21AD.0020.0008] # CYRILLIC CAPITAL LETTER HWE -0461 ; [.21AE.0020.0002] # CYRILLIC SMALL LETTER OMEGA -A67B ; [.21AE.0020.0004] # COMBINING CYRILLIC LETTER OMEGA -0460 ; [.21AE.0020.0008] # CYRILLIC CAPITAL LETTER OMEGA -047F ; [.21B2.0020.0002] # CYRILLIC SMALL LETTER OT -047E ; [.21B2.0020.0008] # CYRILLIC CAPITAL LETTER OT -A64D ; [.21B6.0020.0002] # CYRILLIC SMALL LETTER BROAD OMEGA -A64C ; [.21B6.0020.0008] # CYRILLIC CAPITAL LETTER BROAD OMEGA -047D ; [.21B7.0020.0002] # CYRILLIC SMALL LETTER OMEGA WITH TITLO -047C ; [.21B7.0020.0008] # CYRILLIC CAPITAL LETTER OMEGA WITH TITLO -047B ; [.21BB.0020.0002] # CYRILLIC SMALL LETTER ROUND OMEGA -047A ; [.21BB.0020.0008] # CYRILLIC CAPITAL LETTER ROUND OMEGA -0446 ; [.21BF.0020.0002] # CYRILLIC SMALL LETTER TSE -2DF0 ; [.21BF.0020.0004] # COMBINING CYRILLIC LETTER TSE -0426 ; [.21BF.0020.0008] # CYRILLIC CAPITAL LETTER TSE -A661 ; [.21C3.0020.0002] # CYRILLIC SMALL LETTER REVERSED TSE -A660 ; [.21C3.0020.0008] # CYRILLIC CAPITAL LETTER REVERSED TSE -A68F ; [.21C4.0020.0002] # CYRILLIC SMALL LETTER TSWE -A68E ; [.21C4.0020.0008] # CYRILLIC CAPITAL LETTER TSWE -04B5 ; [.21C5.0020.0002] # CYRILLIC SMALL LIGATURE TE TSE -04B4 ; [.21C5.0020.0008] # CYRILLIC CAPITAL LIGATURE TE TSE -A691 ; [.21C9.0020.0002] # CYRILLIC SMALL LETTER TSSE -A690 ; [.21C9.0020.0008] # CYRILLIC CAPITAL LETTER TSSE -0447 ; [.21CA.0020.0002] # CYRILLIC SMALL LETTER CHE -2DF1 ; [.21CA.0020.0004] # COMBINING CYRILLIC LETTER CHE -0427 ; [.21CA.0020.0008] # CYRILLIC CAPITAL LETTER CHE -04F5 ; [.21CA.0020.0002][.0000.002B.0002] # CYRILLIC SMALL LETTER CHE WITH DIAERESIS -04F4 ; [.21CA.0020.0008][.0000.002B.0002] # CYRILLIC CAPITAL LETTER CHE WITH DIAERESIS -052D ; [.21CE.0020.0002] # CYRILLIC SMALL LETTER DCHE -052C ; [.21CE.0020.0008] # CYRILLIC CAPITAL LETTER DCHE -A693 ; [.21CF.0020.0002] # CYRILLIC SMALL LETTER TCHE -A692 ; [.21CF.0020.0008] # CYRILLIC CAPITAL LETTER TCHE -04B7 ; [.21D0.0020.0002] # CYRILLIC SMALL LETTER CHE WITH DESCENDER -04B6 ; [.21D0.0020.0008] # CYRILLIC CAPITAL LETTER CHE WITH DESCENDER -04CC ; [.21D4.0020.0002] # CYRILLIC SMALL LETTER KHAKASSIAN CHE -04CB ; [.21D4.0020.0008] # CYRILLIC CAPITAL LETTER KHAKASSIAN CHE -04B9 ; [.21D8.0020.0002] # CYRILLIC SMALL LETTER CHE WITH VERTICAL STROKE -04B8 ; [.21D8.0020.0008] # CYRILLIC CAPITAL LETTER CHE WITH VERTICAL STROKE -A687 ; [.21DC.0020.0002] # CYRILLIC SMALL LETTER CCHE -A686 ; [.21DC.0020.0008] # CYRILLIC CAPITAL LETTER CCHE -04BD ; [.21DD.0020.0002] # CYRILLIC SMALL LETTER ABKHASIAN CHE -04BC ; [.21DD.0020.0008] # CYRILLIC CAPITAL LETTER ABKHASIAN CHE -04BF ; [.21E1.0020.0002] # CYRILLIC SMALL LETTER ABKHASIAN CHE WITH DESCENDER -04BE ; [.21E1.0020.0008] # CYRILLIC CAPITAL LETTER ABKHASIAN CHE WITH DESCENDER -045F ; [.21E5.0020.0002] # CYRILLIC SMALL LETTER DZHE -040F ; [.21E5.0020.0008] # CYRILLIC CAPITAL LETTER DZHE -0448 ; [.21E9.0020.0002] # CYRILLIC SMALL LETTER SHA -2DF2 ; [.21E9.0020.0004] # COMBINING CYRILLIC LETTER SHA -0428 ; [.21E9.0020.0008] # CYRILLIC CAPITAL LETTER SHA -A697 ; [.21ED.0020.0002] # CYRILLIC SMALL LETTER SHWE -A696 ; [.21ED.0020.0008] # CYRILLIC CAPITAL LETTER SHWE -0449 ; [.21EE.0020.0002] # CYRILLIC SMALL LETTER SHCHA -2DF3 ; [.21EE.0020.0004] # COMBINING CYRILLIC LETTER SHCHA -0429 ; [.21EE.0020.0008] # CYRILLIC CAPITAL LETTER SHCHA -A64F ; [.21F2.0020.0002] # CYRILLIC SMALL LETTER NEUTRAL YER -A64E ; [.21F2.0020.0008] # CYRILLIC CAPITAL LETTER NEUTRAL YER -2E2F ; [.21F3.0020.0002] # VERTICAL TILDE -A67F ; [.21F4.0020.0002] # CYRILLIC PAYEROK -044A ; [.21F5.0020.0002] # CYRILLIC SMALL LETTER HARD SIGN -1C86 ; [.21F5.0020.0004] # CYRILLIC SMALL LETTER TALL HARD SIGN -A678 ; [.21F5.0020.0004] # COMBINING CYRILLIC LETTER HARD SIGN -042A ; [.21F5.0020.0008] # CYRILLIC CAPITAL LETTER HARD SIGN -A69C ; [.21F5.0020.0014] # MODIFIER LETTER CYRILLIC HARD SIGN -A651 ; [.21F9.0020.0002] # CYRILLIC SMALL LETTER YERU WITH BACK YER -A650 ; [.21F9.0020.0008] # CYRILLIC CAPITAL LETTER YERU WITH BACK YER -044B ; [.21FA.0020.0002] # CYRILLIC SMALL LETTER YERU -A679 ; [.21FA.0020.0004] # COMBINING CYRILLIC LETTER YERU -042B ; [.21FA.0020.0008] # CYRILLIC CAPITAL LETTER YERU -04F9 ; [.21FA.0020.0002][.0000.002B.0002] # CYRILLIC SMALL LETTER YERU WITH DIAERESIS -04F8 ; [.21FA.0020.0008][.0000.002B.0002] # CYRILLIC CAPITAL LETTER YERU WITH DIAERESIS -044C ; [.21FE.0020.0002] # CYRILLIC SMALL LETTER SOFT SIGN -A67A ; [.21FE.0020.0004] # COMBINING CYRILLIC LETTER SOFT SIGN -042C ; [.21FE.0020.0008] # CYRILLIC CAPITAL LETTER SOFT SIGN -A69D ; [.21FE.0020.0014] # MODIFIER LETTER CYRILLIC SOFT SIGN -048D ; [.2202.0020.0002] # CYRILLIC SMALL LETTER SEMISOFT SIGN -048C ; [.2202.0020.0008] # CYRILLIC CAPITAL LETTER SEMISOFT SIGN -0463 ; [.2206.0020.0002] # CYRILLIC SMALL LETTER YAT -1C87 ; [.2206.0020.0004] # CYRILLIC SMALL LETTER TALL YAT -2DFA ; [.2206.0020.0004] # COMBINING CYRILLIC LETTER YAT -0462 ; [.2206.0020.0008] # CYRILLIC CAPITAL LETTER YAT -A653 ; [.220A.0020.0002] # CYRILLIC SMALL LETTER IOTIFIED YAT -A652 ; [.220A.0020.0008] # CYRILLIC CAPITAL LETTER IOTIFIED YAT -044D ; [.220B.0020.0002] # CYRILLIC SMALL LETTER E -042D ; [.220B.0020.0008] # CYRILLIC CAPITAL LETTER E -04ED ; [.220B.0020.0002][.0000.002B.0002] # CYRILLIC SMALL LETTER E WITH DIAERESIS -04EC ; [.220B.0020.0008][.0000.002B.0002] # CYRILLIC CAPITAL LETTER E WITH DIAERESIS -044E ; [.220F.0020.0002] # CYRILLIC SMALL LETTER YU -2DFB ; [.220F.0020.0004] # COMBINING CYRILLIC LETTER YU -042E ; [.220F.0020.0008] # CYRILLIC CAPITAL LETTER YU -A655 ; [.2213.0020.0002] # CYRILLIC SMALL LETTER REVERSED YU -A654 ; [.2213.0020.0008] # CYRILLIC CAPITAL LETTER REVERSED YU -A657 ; [.2214.0020.0002] # CYRILLIC SMALL LETTER IOTIFIED A -2DFC ; [.2214.0020.0004] # COMBINING CYRILLIC LETTER IOTIFIED A -A656 ; [.2214.0020.0008] # CYRILLIC CAPITAL LETTER IOTIFIED A -044F ; [.2215.0020.0002] # CYRILLIC SMALL LETTER YA -042F ; [.2215.0020.0008] # CYRILLIC CAPITAL LETTER YA -0519 ; [.2219.0020.0002] # CYRILLIC SMALL LETTER YAE -0518 ; [.2219.0020.0008] # CYRILLIC CAPITAL LETTER YAE -0465 ; [.221A.0020.0002] # CYRILLIC SMALL LETTER IOTIFIED E -A69F ; [.221A.0020.0004] # COMBINING CYRILLIC LETTER IOTIFIED E -0464 ; [.221A.0020.0008] # CYRILLIC CAPITAL LETTER IOTIFIED E -0467 ; [.221E.0020.0002] # CYRILLIC SMALL LETTER LITTLE YUS -2DFD ; [.221E.0020.0004] # COMBINING CYRILLIC LETTER LITTLE YUS -0466 ; [.221E.0020.0008] # CYRILLIC CAPITAL LETTER LITTLE YUS -A659 ; [.2222.0020.0002] # CYRILLIC SMALL LETTER CLOSED LITTLE YUS -A658 ; [.2222.0020.0008] # CYRILLIC CAPITAL LETTER CLOSED LITTLE YUS -046B ; [.2223.0020.0002] # CYRILLIC SMALL LETTER BIG YUS -2DFE ; [.2223.0020.0004] # COMBINING CYRILLIC LETTER BIG YUS -046A ; [.2223.0020.0008] # CYRILLIC CAPITAL LETTER BIG YUS -A65B ; [.2227.0020.0002] # CYRILLIC SMALL LETTER BLENDED YUS -A65A ; [.2227.0020.0008] # CYRILLIC CAPITAL LETTER BLENDED YUS -0469 ; [.2228.0020.0002] # CYRILLIC SMALL LETTER IOTIFIED LITTLE YUS -0468 ; [.2228.0020.0008] # CYRILLIC CAPITAL LETTER IOTIFIED LITTLE YUS -A65D ; [.222C.0020.0002] # CYRILLIC SMALL LETTER IOTIFIED CLOSED LITTLE YUS -A65C ; [.222C.0020.0008] # CYRILLIC CAPITAL LETTER IOTIFIED CLOSED LITTLE YUS -046D ; [.222D.0020.0002] # CYRILLIC SMALL LETTER IOTIFIED BIG YUS -2DFF ; [.222D.0020.0004] # COMBINING CYRILLIC LETTER IOTIFIED BIG YUS -046C ; [.222D.0020.0008] # CYRILLIC CAPITAL LETTER IOTIFIED BIG YUS -046F ; [.2231.0020.0002] # CYRILLIC SMALL LETTER KSI -046E ; [.2231.0020.0008] # CYRILLIC CAPITAL LETTER KSI -0471 ; [.2235.0020.0002] # CYRILLIC SMALL LETTER PSI -0470 ; [.2235.0020.0008] # CYRILLIC CAPITAL LETTER PSI -0473 ; [.2239.0020.0002] # CYRILLIC SMALL LETTER FITA -2DF4 ; [.2239.0020.0004] # COMBINING CYRILLIC LETTER FITA -0472 ; [.2239.0020.0008] # CYRILLIC CAPITAL LETTER FITA -0475 ; [.223D.0020.0002] # CYRILLIC SMALL LETTER IZHITSA -0474 ; [.223D.0020.0008] # CYRILLIC CAPITAL LETTER IZHITSA -0477 ; [.223D.0020.0002][.0000.003C.0002] # CYRILLIC SMALL LETTER IZHITSA WITH DOUBLE GRAVE ACCENT -0476 ; [.223D.0020.0008][.0000.003C.0002] # CYRILLIC CAPITAL LETTER IZHITSA WITH DOUBLE GRAVE ACCENT -A65F ; [.2241.0020.0002] # CYRILLIC SMALL LETTER YN -A65E ; [.2241.0020.0008] # CYRILLIC CAPITAL LETTER YN -04A9 ; [.2242.0020.0002] # CYRILLIC SMALL LETTER ABKHASIAN HA -04A8 ; [.2242.0020.0008] # CYRILLIC CAPITAL LETTER ABKHASIAN HA -051D ; [.2246.0020.0002] # CYRILLIC SMALL LETTER WE -051C ; [.2246.0020.0008] # CYRILLIC CAPITAL LETTER WE -04CF ; [.2247.0020.0002] # CYRILLIC SMALL LETTER PALOCHKA -04C0 ; [.2247.0020.0008] # CYRILLIC LETTER PALOCHKA -2C30 ; [.224B.0020.0002] # GLAGOLITIC SMALL LETTER AZU -1E000 ; [.224B.0020.0004] # COMBINING GLAGOLITIC LETTER AZU -2C00 ; [.224B.0020.0008] # GLAGOLITIC CAPITAL LETTER AZU -2C31 ; [.224C.0020.0002] # GLAGOLITIC SMALL LETTER BUKY -1E001 ; [.224C.0020.0004] # COMBINING GLAGOLITIC LETTER BUKY -2C01 ; [.224C.0020.0008] # GLAGOLITIC CAPITAL LETTER BUKY -2C32 ; [.224D.0020.0002] # GLAGOLITIC SMALL LETTER VEDE -1E002 ; [.224D.0020.0004] # COMBINING GLAGOLITIC LETTER VEDE -2C02 ; [.224D.0020.0008] # GLAGOLITIC CAPITAL LETTER VEDE -2C33 ; [.224E.0020.0002] # GLAGOLITIC SMALL LETTER GLAGOLI -1E003 ; [.224E.0020.0004] # COMBINING GLAGOLITIC LETTER GLAGOLI -2C03 ; [.224E.0020.0008] # GLAGOLITIC CAPITAL LETTER GLAGOLI -2C34 ; [.224F.0020.0002] # GLAGOLITIC SMALL LETTER DOBRO -1E004 ; [.224F.0020.0004] # COMBINING GLAGOLITIC LETTER DOBRO -2C04 ; [.224F.0020.0008] # GLAGOLITIC CAPITAL LETTER DOBRO -2C35 ; [.2250.0020.0002] # GLAGOLITIC SMALL LETTER YESTU -1E005 ; [.2250.0020.0004] # COMBINING GLAGOLITIC LETTER YESTU -2C05 ; [.2250.0020.0008] # GLAGOLITIC CAPITAL LETTER YESTU -2C36 ; [.2251.0020.0002] # GLAGOLITIC SMALL LETTER ZHIVETE -1E006 ; [.2251.0020.0004] # COMBINING GLAGOLITIC LETTER ZHIVETE -2C06 ; [.2251.0020.0008] # GLAGOLITIC CAPITAL LETTER ZHIVETE -2C37 ; [.2252.0020.0002] # GLAGOLITIC SMALL LETTER DZELO -2C07 ; [.2252.0020.0008] # GLAGOLITIC CAPITAL LETTER DZELO -2C38 ; [.2253.0020.0002] # GLAGOLITIC SMALL LETTER ZEMLJA -1E008 ; [.2253.0020.0004] # COMBINING GLAGOLITIC LETTER ZEMLJA -2C08 ; [.2253.0020.0008] # GLAGOLITIC CAPITAL LETTER ZEMLJA -2C39 ; [.2254.0020.0002] # GLAGOLITIC SMALL LETTER IZHE -1E009 ; [.2254.0020.0004] # COMBINING GLAGOLITIC LETTER IZHE -2C09 ; [.2254.0020.0008] # GLAGOLITIC CAPITAL LETTER IZHE -2C3A ; [.2255.0020.0002] # GLAGOLITIC SMALL LETTER INITIAL IZHE -1E00A ; [.2255.0020.0004] # COMBINING GLAGOLITIC LETTER INITIAL IZHE -2C0A ; [.2255.0020.0008] # GLAGOLITIC CAPITAL LETTER INITIAL IZHE -2C3B ; [.2256.0020.0002] # GLAGOLITIC SMALL LETTER I -1E00B ; [.2256.0020.0004] # COMBINING GLAGOLITIC LETTER I -2C0B ; [.2256.0020.0008] # GLAGOLITIC CAPITAL LETTER I -2C3C ; [.2257.0020.0002] # GLAGOLITIC SMALL LETTER DJERVI -1E00C ; [.2257.0020.0004] # COMBINING GLAGOLITIC LETTER DJERVI -2C0C ; [.2257.0020.0008] # GLAGOLITIC CAPITAL LETTER DJERVI -2C3D ; [.2258.0020.0002] # GLAGOLITIC SMALL LETTER KAKO -1E00D ; [.2258.0020.0004] # COMBINING GLAGOLITIC LETTER KAKO -2C0D ; [.2258.0020.0008] # GLAGOLITIC CAPITAL LETTER KAKO -2C3E ; [.2259.0020.0002] # GLAGOLITIC SMALL LETTER LJUDIJE -1E00E ; [.2259.0020.0004] # COMBINING GLAGOLITIC LETTER LJUDIJE -2C0E ; [.2259.0020.0008] # GLAGOLITIC CAPITAL LETTER LJUDIJE -2C3F ; [.225A.0020.0002] # GLAGOLITIC SMALL LETTER MYSLITE -1E00F ; [.225A.0020.0004] # COMBINING GLAGOLITIC LETTER MYSLITE -2C0F ; [.225A.0020.0008] # GLAGOLITIC CAPITAL LETTER MYSLITE -2C40 ; [.225B.0020.0002] # GLAGOLITIC SMALL LETTER NASHI -1E010 ; [.225B.0020.0004] # COMBINING GLAGOLITIC LETTER NASHI -2C10 ; [.225B.0020.0008] # GLAGOLITIC CAPITAL LETTER NASHI -2C41 ; [.225C.0020.0002] # GLAGOLITIC SMALL LETTER ONU -1E011 ; [.225C.0020.0004] # COMBINING GLAGOLITIC LETTER ONU -2C11 ; [.225C.0020.0008] # GLAGOLITIC CAPITAL LETTER ONU -2C42 ; [.225D.0020.0002] # GLAGOLITIC SMALL LETTER POKOJI -1E012 ; [.225D.0020.0004] # COMBINING GLAGOLITIC LETTER POKOJI -2C12 ; [.225D.0020.0008] # GLAGOLITIC CAPITAL LETTER POKOJI -2C43 ; [.225E.0020.0002] # GLAGOLITIC SMALL LETTER RITSI -1E013 ; [.225E.0020.0004] # COMBINING GLAGOLITIC LETTER RITSI -2C13 ; [.225E.0020.0008] # GLAGOLITIC CAPITAL LETTER RITSI -2C44 ; [.225F.0020.0002] # GLAGOLITIC SMALL LETTER SLOVO -1E014 ; [.225F.0020.0004] # COMBINING GLAGOLITIC LETTER SLOVO -2C14 ; [.225F.0020.0008] # GLAGOLITIC CAPITAL LETTER SLOVO -2C45 ; [.2260.0020.0002] # GLAGOLITIC SMALL LETTER TVRIDO -1E015 ; [.2260.0020.0004] # COMBINING GLAGOLITIC LETTER TVRIDO -2C15 ; [.2260.0020.0008] # GLAGOLITIC CAPITAL LETTER TVRIDO -2C46 ; [.2261.0020.0002] # GLAGOLITIC SMALL LETTER UKU -1E016 ; [.2261.0020.0004] # COMBINING GLAGOLITIC LETTER UKU -2C16 ; [.2261.0020.0008] # GLAGOLITIC CAPITAL LETTER UKU -2C47 ; [.2262.0020.0002] # GLAGOLITIC SMALL LETTER FRITU -1E017 ; [.2262.0020.0004] # COMBINING GLAGOLITIC LETTER FRITU -2C17 ; [.2262.0020.0008] # GLAGOLITIC CAPITAL LETTER FRITU -2C48 ; [.2263.0020.0002] # GLAGOLITIC SMALL LETTER HERU -1E018 ; [.2263.0020.0004] # COMBINING GLAGOLITIC LETTER HERU -2C18 ; [.2263.0020.0008] # GLAGOLITIC CAPITAL LETTER HERU -2C49 ; [.2264.0020.0002] # GLAGOLITIC SMALL LETTER OTU -2C19 ; [.2264.0020.0008] # GLAGOLITIC CAPITAL LETTER OTU -2C4A ; [.2265.0020.0002] # GLAGOLITIC SMALL LETTER PE -2C1A ; [.2265.0020.0008] # GLAGOLITIC CAPITAL LETTER PE -2C4B ; [.2266.0020.0002] # GLAGOLITIC SMALL LETTER SHTA -1E01B ; [.2266.0020.0004] # COMBINING GLAGOLITIC LETTER SHTA -2C1B ; [.2266.0020.0008] # GLAGOLITIC CAPITAL LETTER SHTA -2C4C ; [.2267.0020.0002] # GLAGOLITIC SMALL LETTER TSI -1E01C ; [.2267.0020.0004] # COMBINING GLAGOLITIC LETTER TSI -2C1C ; [.2267.0020.0008] # GLAGOLITIC CAPITAL LETTER TSI -2C4D ; [.2268.0020.0002] # GLAGOLITIC SMALL LETTER CHRIVI -1E01D ; [.2268.0020.0004] # COMBINING GLAGOLITIC LETTER CHRIVI -2C1D ; [.2268.0020.0008] # GLAGOLITIC CAPITAL LETTER CHRIVI -2C4E ; [.2269.0020.0002] # GLAGOLITIC SMALL LETTER SHA -1E01E ; [.2269.0020.0004] # COMBINING GLAGOLITIC LETTER SHA -2C1E ; [.2269.0020.0008] # GLAGOLITIC CAPITAL LETTER SHA -2C4F ; [.226A.0020.0002] # GLAGOLITIC SMALL LETTER YERU -1E01F ; [.226A.0020.0004] # COMBINING GLAGOLITIC LETTER YERU -2C1F ; [.226A.0020.0008] # GLAGOLITIC CAPITAL LETTER YERU -2C50 ; [.226B.0020.0002] # GLAGOLITIC SMALL LETTER YERI -1E020 ; [.226B.0020.0004] # COMBINING GLAGOLITIC LETTER YERI -2C20 ; [.226B.0020.0008] # GLAGOLITIC CAPITAL LETTER YERI -2C51 ; [.226C.0020.0002] # GLAGOLITIC SMALL LETTER YATI -1E021 ; [.226C.0020.0004] # COMBINING GLAGOLITIC LETTER YATI -2C21 ; [.226C.0020.0008] # GLAGOLITIC CAPITAL LETTER YATI -2C52 ; [.226D.0020.0002] # GLAGOLITIC SMALL LETTER SPIDERY HA -2C22 ; [.226D.0020.0008] # GLAGOLITIC CAPITAL LETTER SPIDERY HA -2C53 ; [.226E.0020.0002] # GLAGOLITIC SMALL LETTER YU -1E023 ; [.226E.0020.0004] # COMBINING GLAGOLITIC LETTER YU -2C23 ; [.226E.0020.0008] # GLAGOLITIC CAPITAL LETTER YU -2C54 ; [.226F.0020.0002] # GLAGOLITIC SMALL LETTER SMALL YUS -1E024 ; [.226F.0020.0004] # COMBINING GLAGOLITIC LETTER SMALL YUS -2C24 ; [.226F.0020.0008] # GLAGOLITIC CAPITAL LETTER SMALL YUS -2C55 ; [.2270.0020.0002] # GLAGOLITIC SMALL LETTER SMALL YUS WITH TAIL -2C25 ; [.2270.0020.0008] # GLAGOLITIC CAPITAL LETTER SMALL YUS WITH TAIL -2C56 ; [.2271.0020.0002] # GLAGOLITIC SMALL LETTER YO -1E026 ; [.2271.0020.0004] # COMBINING GLAGOLITIC LETTER YO -2C26 ; [.2271.0020.0008] # GLAGOLITIC CAPITAL LETTER YO -2C57 ; [.2272.0020.0002] # GLAGOLITIC SMALL LETTER IOTATED SMALL YUS -1E027 ; [.2272.0020.0004] # COMBINING GLAGOLITIC LETTER IOTATED SMALL YUS -2C27 ; [.2272.0020.0008] # GLAGOLITIC CAPITAL LETTER IOTATED SMALL YUS -2C58 ; [.2273.0020.0002] # GLAGOLITIC SMALL LETTER BIG YUS -1E028 ; [.2273.0020.0004] # COMBINING GLAGOLITIC LETTER BIG YUS -2C28 ; [.2273.0020.0008] # GLAGOLITIC CAPITAL LETTER BIG YUS -2C59 ; [.2274.0020.0002] # GLAGOLITIC SMALL LETTER IOTATED BIG YUS -1E029 ; [.2274.0020.0004] # COMBINING GLAGOLITIC LETTER IOTATED BIG YUS -2C29 ; [.2274.0020.0008] # GLAGOLITIC CAPITAL LETTER IOTATED BIG YUS -2C5A ; [.2275.0020.0002] # GLAGOLITIC SMALL LETTER FITA -1E02A ; [.2275.0020.0004] # COMBINING GLAGOLITIC LETTER FITA -2C2A ; [.2275.0020.0008] # GLAGOLITIC CAPITAL LETTER FITA -2C5B ; [.2276.0020.0002] # GLAGOLITIC SMALL LETTER IZHITSA -2C2B ; [.2276.0020.0008] # GLAGOLITIC CAPITAL LETTER IZHITSA -2C5C ; [.2277.0020.0002] # GLAGOLITIC SMALL LETTER SHTAPIC -2C2C ; [.2277.0020.0008] # GLAGOLITIC CAPITAL LETTER SHTAPIC -2C5D ; [.2278.0020.0002] # GLAGOLITIC SMALL LETTER TROKUTASTI A -2C2D ; [.2278.0020.0008] # GLAGOLITIC CAPITAL LETTER TROKUTASTI A -2C5E ; [.2279.0020.0002] # GLAGOLITIC SMALL LETTER LATINATE MYSLITE -2C2E ; [.2279.0020.0008] # GLAGOLITIC CAPITAL LETTER LATINATE MYSLITE -10350 ; [.227A.0020.0002] # OLD PERMIC LETTER AN -10376 ; [.227A.0020.0004] # COMBINING OLD PERMIC LETTER AN -10351 ; [.227B.0020.0002] # OLD PERMIC LETTER BUR -10352 ; [.227C.0020.0002] # OLD PERMIC LETTER GAI -10353 ; [.227D.0020.0002] # OLD PERMIC LETTER DOI -10377 ; [.227D.0020.0004] # COMBINING OLD PERMIC LETTER DOI -10354 ; [.227E.0020.0002] # OLD PERMIC LETTER E -10355 ; [.227F.0020.0002] # OLD PERMIC LETTER ZHOI -10356 ; [.2280.0020.0002] # OLD PERMIC LETTER DZHOI -10357 ; [.2281.0020.0002] # OLD PERMIC LETTER ZATA -10378 ; [.2281.0020.0004] # COMBINING OLD PERMIC LETTER ZATA -10358 ; [.2282.0020.0002] # OLD PERMIC LETTER DZITA -10359 ; [.2283.0020.0002] # OLD PERMIC LETTER I -1035A ; [.2284.0020.0002] # OLD PERMIC LETTER KOKE -1035B ; [.2285.0020.0002] # OLD PERMIC LETTER LEI -1035C ; [.2286.0020.0002] # OLD PERMIC LETTER MENOE -1035D ; [.2287.0020.0002] # OLD PERMIC LETTER NENOE -10379 ; [.2287.0020.0004] # COMBINING OLD PERMIC LETTER NENOE -1035E ; [.2288.0020.0002] # OLD PERMIC LETTER VOOI -1035F ; [.2289.0020.0002] # OLD PERMIC LETTER PEEI -10360 ; [.228A.0020.0002] # OLD PERMIC LETTER REI -10361 ; [.228B.0020.0002] # OLD PERMIC LETTER SII -1037A ; [.228B.0020.0004] # COMBINING OLD PERMIC LETTER SII -10362 ; [.228C.0020.0002] # OLD PERMIC LETTER TAI -10363 ; [.228D.0020.0002] # OLD PERMIC LETTER U -10364 ; [.228E.0020.0002] # OLD PERMIC LETTER CHERY -10365 ; [.228F.0020.0002] # OLD PERMIC LETTER SHOOI -10366 ; [.2290.0020.0002] # OLD PERMIC LETTER SHCHOOI -10367 ; [.2291.0020.0002] # OLD PERMIC LETTER YRY -10368 ; [.2292.0020.0002] # OLD PERMIC LETTER YERU -10369 ; [.2293.0020.0002] # OLD PERMIC LETTER O -1036A ; [.2294.0020.0002] # OLD PERMIC LETTER OO -1036B ; [.2295.0020.0002] # OLD PERMIC LETTER EF -1036C ; [.2296.0020.0002] # OLD PERMIC LETTER HA -1036D ; [.2297.0020.0002] # OLD PERMIC LETTER TSIU -1036E ; [.2298.0020.0002] # OLD PERMIC LETTER VER -1036F ; [.2299.0020.0002] # OLD PERMIC LETTER YER -10370 ; [.229A.0020.0002] # OLD PERMIC LETTER YERI -10371 ; [.229B.0020.0002] # OLD PERMIC LETTER YAT -10372 ; [.229C.0020.0002] # OLD PERMIC LETTER IE -10373 ; [.229D.0020.0002] # OLD PERMIC LETTER YU -10374 ; [.229E.0020.0002] # OLD PERMIC LETTER YA -10375 ; [.229F.0020.0002] # OLD PERMIC LETTER IA -10D0 ; [.22A0.0020.0002] # GEORGIAN LETTER AN -2D00 ; [.22A1.0020.0002] # GEORGIAN SMALL LETTER AN -10A0 ; [.22A1.0020.0008] # GEORGIAN CAPITAL LETTER AN -10D1 ; [.22A2.0020.0002] # GEORGIAN LETTER BAN -2D01 ; [.22A3.0020.0002] # GEORGIAN SMALL LETTER BAN -10A1 ; [.22A3.0020.0008] # GEORGIAN CAPITAL LETTER BAN -10D2 ; [.22A4.0020.0002] # GEORGIAN LETTER GAN -2D02 ; [.22A5.0020.0002] # GEORGIAN SMALL LETTER GAN -10A2 ; [.22A5.0020.0008] # GEORGIAN CAPITAL LETTER GAN -10D3 ; [.22A6.0020.0002] # GEORGIAN LETTER DON -2D03 ; [.22A7.0020.0002] # GEORGIAN SMALL LETTER DON -10A3 ; [.22A7.0020.0008] # GEORGIAN CAPITAL LETTER DON -10D4 ; [.22A8.0020.0002] # GEORGIAN LETTER EN -2D04 ; [.22A9.0020.0002] # GEORGIAN SMALL LETTER EN -10A4 ; [.22A9.0020.0008] # GEORGIAN CAPITAL LETTER EN -10D5 ; [.22AA.0020.0002] # GEORGIAN LETTER VIN -2D05 ; [.22AB.0020.0002] # GEORGIAN SMALL LETTER VIN -10A5 ; [.22AB.0020.0008] # GEORGIAN CAPITAL LETTER VIN -10D6 ; [.22AC.0020.0002] # GEORGIAN LETTER ZEN -2D06 ; [.22AD.0020.0002] # GEORGIAN SMALL LETTER ZEN -10A6 ; [.22AD.0020.0008] # GEORGIAN CAPITAL LETTER ZEN -10F1 ; [.22AE.0020.0002] # GEORGIAN LETTER HE -2D21 ; [.22AF.0020.0002] # GEORGIAN SMALL LETTER HE -10C1 ; [.22AF.0020.0008] # GEORGIAN CAPITAL LETTER HE -10D7 ; [.22B0.0020.0002] # GEORGIAN LETTER TAN -2D07 ; [.22B1.0020.0002] # GEORGIAN SMALL LETTER TAN -10A7 ; [.22B1.0020.0008] # GEORGIAN CAPITAL LETTER TAN -10D8 ; [.22B2.0020.0002] # GEORGIAN LETTER IN -2D08 ; [.22B3.0020.0002] # GEORGIAN SMALL LETTER IN -10A8 ; [.22B3.0020.0008] # GEORGIAN CAPITAL LETTER IN -10D9 ; [.22B4.0020.0002] # GEORGIAN LETTER KAN -2D09 ; [.22B5.0020.0002] # GEORGIAN SMALL LETTER KAN -10A9 ; [.22B5.0020.0008] # GEORGIAN CAPITAL LETTER KAN -10DA ; [.22B6.0020.0002] # GEORGIAN LETTER LAS -2D0A ; [.22B7.0020.0002] # GEORGIAN SMALL LETTER LAS -10AA ; [.22B7.0020.0008] # GEORGIAN CAPITAL LETTER LAS -10DB ; [.22B8.0020.0002] # GEORGIAN LETTER MAN -2D0B ; [.22B9.0020.0002] # GEORGIAN SMALL LETTER MAN -10AB ; [.22B9.0020.0008] # GEORGIAN CAPITAL LETTER MAN -10DC ; [.22BA.0020.0002] # GEORGIAN LETTER NAR -10FC ; [.22BA.0020.0014] # MODIFIER LETTER GEORGIAN NAR -2D0C ; [.22BB.0020.0002] # GEORGIAN SMALL LETTER NAR -10AC ; [.22BB.0020.0008] # GEORGIAN CAPITAL LETTER NAR -10F2 ; [.22BC.0020.0002] # GEORGIAN LETTER HIE -2D22 ; [.22BD.0020.0002] # GEORGIAN SMALL LETTER HIE -10C2 ; [.22BD.0020.0008] # GEORGIAN CAPITAL LETTER HIE -10DD ; [.22BE.0020.0002] # GEORGIAN LETTER ON -2D0D ; [.22BF.0020.0002] # GEORGIAN SMALL LETTER ON -10AD ; [.22BF.0020.0008] # GEORGIAN CAPITAL LETTER ON -10DE ; [.22C0.0020.0002] # GEORGIAN LETTER PAR -2D0E ; [.22C1.0020.0002] # GEORGIAN SMALL LETTER PAR -10AE ; [.22C1.0020.0008] # GEORGIAN CAPITAL LETTER PAR -10DF ; [.22C2.0020.0002] # GEORGIAN LETTER ZHAR -2D0F ; [.22C3.0020.0002] # GEORGIAN SMALL LETTER ZHAR -10AF ; [.22C3.0020.0008] # GEORGIAN CAPITAL LETTER ZHAR -10E0 ; [.22C4.0020.0002] # GEORGIAN LETTER RAE -2D10 ; [.22C5.0020.0002] # GEORGIAN SMALL LETTER RAE -10B0 ; [.22C5.0020.0008] # GEORGIAN CAPITAL LETTER RAE -10E1 ; [.22C6.0020.0002] # GEORGIAN LETTER SAN -2D11 ; [.22C7.0020.0002] # GEORGIAN SMALL LETTER SAN -10B1 ; [.22C7.0020.0008] # GEORGIAN CAPITAL LETTER SAN -10E2 ; [.22C8.0020.0002] # GEORGIAN LETTER TAR -2D12 ; [.22C9.0020.0002] # GEORGIAN SMALL LETTER TAR -10B2 ; [.22C9.0020.0008] # GEORGIAN CAPITAL LETTER TAR -10F3 ; [.22CA.0020.0002] # GEORGIAN LETTER WE -2D23 ; [.22CB.0020.0002] # GEORGIAN SMALL LETTER WE -10C3 ; [.22CB.0020.0008] # GEORGIAN CAPITAL LETTER WE -10E3 ; [.22CC.0020.0002] # GEORGIAN LETTER UN -2D13 ; [.22CD.0020.0002] # GEORGIAN SMALL LETTER UN -10B3 ; [.22CD.0020.0008] # GEORGIAN CAPITAL LETTER UN -10E4 ; [.22CE.0020.0002] # GEORGIAN LETTER PHAR -2D14 ; [.22CF.0020.0002] # GEORGIAN SMALL LETTER PHAR -10B4 ; [.22CF.0020.0008] # GEORGIAN CAPITAL LETTER PHAR -10E5 ; [.22D0.0020.0002] # GEORGIAN LETTER KHAR -2D15 ; [.22D1.0020.0002] # GEORGIAN SMALL LETTER KHAR -10B5 ; [.22D1.0020.0008] # GEORGIAN CAPITAL LETTER KHAR -10E6 ; [.22D2.0020.0002] # GEORGIAN LETTER GHAN -2D16 ; [.22D3.0020.0002] # GEORGIAN SMALL LETTER GHAN -10B6 ; [.22D3.0020.0008] # GEORGIAN CAPITAL LETTER GHAN -10E7 ; [.22D4.0020.0002] # GEORGIAN LETTER QAR -2D17 ; [.22D5.0020.0002] # GEORGIAN SMALL LETTER QAR -10B7 ; [.22D5.0020.0008] # GEORGIAN CAPITAL LETTER QAR -10E8 ; [.22D6.0020.0002] # GEORGIAN LETTER SHIN -2D18 ; [.22D7.0020.0002] # GEORGIAN SMALL LETTER SHIN -10B8 ; [.22D7.0020.0008] # GEORGIAN CAPITAL LETTER SHIN -10E9 ; [.22D8.0020.0002] # GEORGIAN LETTER CHIN -2D19 ; [.22D9.0020.0002] # GEORGIAN SMALL LETTER CHIN -10B9 ; [.22D9.0020.0008] # GEORGIAN CAPITAL LETTER CHIN -10EA ; [.22DA.0020.0002] # GEORGIAN LETTER CAN -2D1A ; [.22DB.0020.0002] # GEORGIAN SMALL LETTER CAN -10BA ; [.22DB.0020.0008] # GEORGIAN CAPITAL LETTER CAN -10EB ; [.22DC.0020.0002] # GEORGIAN LETTER JIL -2D1B ; [.22DD.0020.0002] # GEORGIAN SMALL LETTER JIL -10BB ; [.22DD.0020.0008] # GEORGIAN CAPITAL LETTER JIL -10EC ; [.22DE.0020.0002] # GEORGIAN LETTER CIL -2D1C ; [.22DF.0020.0002] # GEORGIAN SMALL LETTER CIL -10BC ; [.22DF.0020.0008] # GEORGIAN CAPITAL LETTER CIL -10ED ; [.22E0.0020.0002] # GEORGIAN LETTER CHAR -2D1D ; [.22E1.0020.0002] # GEORGIAN SMALL LETTER CHAR -10BD ; [.22E1.0020.0008] # GEORGIAN CAPITAL LETTER CHAR -10EE ; [.22E2.0020.0002] # GEORGIAN LETTER XAN -2D1E ; [.22E3.0020.0002] # GEORGIAN SMALL LETTER XAN -10BE ; [.22E3.0020.0008] # GEORGIAN CAPITAL LETTER XAN -10F4 ; [.22E4.0020.0002] # GEORGIAN LETTER HAR -2D24 ; [.22E5.0020.0002] # GEORGIAN SMALL LETTER HAR -10C4 ; [.22E5.0020.0008] # GEORGIAN CAPITAL LETTER HAR -10EF ; [.22E6.0020.0002] # GEORGIAN LETTER JHAN -2D1F ; [.22E7.0020.0002] # GEORGIAN SMALL LETTER JHAN -10BF ; [.22E7.0020.0008] # GEORGIAN CAPITAL LETTER JHAN -10F0 ; [.22E8.0020.0002] # GEORGIAN LETTER HAE -2D20 ; [.22E9.0020.0002] # GEORGIAN SMALL LETTER HAE -10C0 ; [.22E9.0020.0008] # GEORGIAN CAPITAL LETTER HAE -10F5 ; [.22EA.0020.0002] # GEORGIAN LETTER HOE -2D25 ; [.22EB.0020.0002] # GEORGIAN SMALL LETTER HOE -10C5 ; [.22EB.0020.0008] # GEORGIAN CAPITAL LETTER HOE -10F6 ; [.22EC.0020.0002] # GEORGIAN LETTER FI -10F7 ; [.22ED.0020.0002] # GEORGIAN LETTER YN -2D27 ; [.22EE.0020.0002] # GEORGIAN SMALL LETTER YN -10C7 ; [.22EE.0020.0008] # GEORGIAN CAPITAL LETTER YN -10F8 ; [.22EF.0020.0002] # GEORGIAN LETTER ELIFI -10F9 ; [.22F0.0020.0002] # GEORGIAN LETTER TURNED GAN -10FA ; [.22F1.0020.0002] # GEORGIAN LETTER AIN -10FD ; [.22F2.0020.0002] # GEORGIAN LETTER AEN -2D2D ; [.22F3.0020.0002] # GEORGIAN SMALL LETTER AEN -10CD ; [.22F3.0020.0008] # GEORGIAN CAPITAL LETTER AEN -10FE ; [.22F4.0020.0002] # GEORGIAN LETTER HARD SIGN -10FF ; [.22F5.0020.0002] # GEORGIAN LETTER LABIAL SIGN -0561 ; [.22F6.0020.0002] # ARMENIAN SMALL LETTER AYB -0531 ; [.22F6.0020.0008] # ARMENIAN CAPITAL LETTER AYB -0562 ; [.22F7.0020.0002] # ARMENIAN SMALL LETTER BEN -0532 ; [.22F7.0020.0008] # ARMENIAN CAPITAL LETTER BEN -0563 ; [.22F8.0020.0002] # ARMENIAN SMALL LETTER GIM -0533 ; [.22F8.0020.0008] # ARMENIAN CAPITAL LETTER GIM -0564 ; [.22F9.0020.0002] # ARMENIAN SMALL LETTER DA -0534 ; [.22F9.0020.0008] # ARMENIAN CAPITAL LETTER DA -0565 ; [.22FA.0020.0002] # ARMENIAN SMALL LETTER ECH -0535 ; [.22FA.0020.0008] # ARMENIAN CAPITAL LETTER ECH -0587 ; [.22FA.0020.0004][.2317.0020.0004] # ARMENIAN SMALL LIGATURE ECH YIWN -0566 ; [.22FB.0020.0002] # ARMENIAN SMALL LETTER ZA -0536 ; [.22FB.0020.0008] # ARMENIAN CAPITAL LETTER ZA -0567 ; [.22FC.0020.0002] # ARMENIAN SMALL LETTER EH -0537 ; [.22FC.0020.0008] # ARMENIAN CAPITAL LETTER EH -0568 ; [.22FD.0020.0002] # ARMENIAN SMALL LETTER ET -0538 ; [.22FD.0020.0008] # ARMENIAN CAPITAL LETTER ET -0569 ; [.22FE.0020.0002] # ARMENIAN SMALL LETTER TO -0539 ; [.22FE.0020.0008] # ARMENIAN CAPITAL LETTER TO -056A ; [.22FF.0020.0002] # ARMENIAN SMALL LETTER ZHE -053A ; [.22FF.0020.0008] # ARMENIAN CAPITAL LETTER ZHE -056B ; [.2300.0020.0002] # ARMENIAN SMALL LETTER INI -053B ; [.2300.0020.0008] # ARMENIAN CAPITAL LETTER INI -056C ; [.2301.0020.0002] # ARMENIAN SMALL LETTER LIWN -053C ; [.2301.0020.0008] # ARMENIAN CAPITAL LETTER LIWN -056D ; [.2302.0020.0002] # ARMENIAN SMALL LETTER XEH -053D ; [.2302.0020.0008] # ARMENIAN CAPITAL LETTER XEH -056E ; [.2303.0020.0002] # ARMENIAN SMALL LETTER CA -053E ; [.2303.0020.0008] # ARMENIAN CAPITAL LETTER CA -056F ; [.2304.0020.0002] # ARMENIAN SMALL LETTER KEN -053F ; [.2304.0020.0008] # ARMENIAN CAPITAL LETTER KEN -0570 ; [.2305.0020.0002] # ARMENIAN SMALL LETTER HO -0540 ; [.2305.0020.0008] # ARMENIAN CAPITAL LETTER HO -0571 ; [.2306.0020.0002] # ARMENIAN SMALL LETTER JA -0541 ; [.2306.0020.0008] # ARMENIAN CAPITAL LETTER JA -0572 ; [.2307.0020.0002] # ARMENIAN SMALL LETTER GHAD -0542 ; [.2307.0020.0008] # ARMENIAN CAPITAL LETTER GHAD -0573 ; [.2308.0020.0002] # ARMENIAN SMALL LETTER CHEH -0543 ; [.2308.0020.0008] # ARMENIAN CAPITAL LETTER CHEH -0574 ; [.2309.0020.0002] # ARMENIAN SMALL LETTER MEN -0544 ; [.2309.0020.0008] # ARMENIAN CAPITAL LETTER MEN -FB14 ; [.2309.0020.0004][.22FA.0020.0004] # ARMENIAN SMALL LIGATURE MEN ECH -FB15 ; [.2309.0020.0004][.2300.0020.0004] # ARMENIAN SMALL LIGATURE MEN INI -FB17 ; [.2309.0020.0004][.2302.0020.0004] # ARMENIAN SMALL LIGATURE MEN XEH -FB13 ; [.2309.0020.0004][.230B.0020.0004] # ARMENIAN SMALL LIGATURE MEN NOW -0575 ; [.230A.0020.0002] # ARMENIAN SMALL LETTER YI -0545 ; [.230A.0020.0008] # ARMENIAN CAPITAL LETTER YI -0576 ; [.230B.0020.0002] # ARMENIAN SMALL LETTER NOW -0546 ; [.230B.0020.0008] # ARMENIAN CAPITAL LETTER NOW -0577 ; [.230C.0020.0002] # ARMENIAN SMALL LETTER SHA -0547 ; [.230C.0020.0008] # ARMENIAN CAPITAL LETTER SHA -0578 ; [.230D.0020.0002] # ARMENIAN SMALL LETTER VO -0548 ; [.230D.0020.0008] # ARMENIAN CAPITAL LETTER VO -0579 ; [.230E.0020.0002] # ARMENIAN SMALL LETTER CHA -0549 ; [.230E.0020.0008] # ARMENIAN CAPITAL LETTER CHA -057A ; [.230F.0020.0002] # ARMENIAN SMALL LETTER PEH -054A ; [.230F.0020.0008] # ARMENIAN CAPITAL LETTER PEH -057B ; [.2310.0020.0002] # ARMENIAN SMALL LETTER JHEH -054B ; [.2310.0020.0008] # ARMENIAN CAPITAL LETTER JHEH -057C ; [.2311.0020.0002] # ARMENIAN SMALL LETTER RA -054C ; [.2311.0020.0008] # ARMENIAN CAPITAL LETTER RA -057D ; [.2312.0020.0002] # ARMENIAN SMALL LETTER SEH -054D ; [.2312.0020.0008] # ARMENIAN CAPITAL LETTER SEH -057E ; [.2313.0020.0002] # ARMENIAN SMALL LETTER VEW -054E ; [.2313.0020.0008] # ARMENIAN CAPITAL LETTER VEW -FB16 ; [.2313.0020.0004][.230B.0020.0004] # ARMENIAN SMALL LIGATURE VEW NOW -057F ; [.2314.0020.0002] # ARMENIAN SMALL LETTER TIWN -054F ; [.2314.0020.0008] # ARMENIAN CAPITAL LETTER TIWN -0580 ; [.2315.0020.0002] # ARMENIAN SMALL LETTER REH -0550 ; [.2315.0020.0008] # ARMENIAN CAPITAL LETTER REH -0581 ; [.2316.0020.0002] # ARMENIAN SMALL LETTER CO -0551 ; [.2316.0020.0008] # ARMENIAN CAPITAL LETTER CO -0582 ; [.2317.0020.0002] # ARMENIAN SMALL LETTER YIWN -0552 ; [.2317.0020.0008] # ARMENIAN CAPITAL LETTER YIWN -0583 ; [.2318.0020.0002] # ARMENIAN SMALL LETTER PIWR -0553 ; [.2318.0020.0008] # ARMENIAN CAPITAL LETTER PIWR -0584 ; [.2319.0020.0002] # ARMENIAN SMALL LETTER KEH -0554 ; [.2319.0020.0008] # ARMENIAN CAPITAL LETTER KEH -0585 ; [.231A.0020.0002] # ARMENIAN SMALL LETTER OH -0555 ; [.231A.0020.0008] # ARMENIAN CAPITAL LETTER OH -0586 ; [.231B.0020.0002] # ARMENIAN SMALL LETTER FEH -0556 ; [.231B.0020.0008] # ARMENIAN CAPITAL LETTER FEH -0559 ; [.231C.0020.0002] # ARMENIAN MODIFIER LETTER LEFT HALF RING -05D0 ; [.231D.0020.0002] # HEBREW LETTER ALEF -2135 ; [.231D.0020.0004] # ALEF SYMBOL -FB21 ; [.231D.0020.0005] # HEBREW LETTER WIDE ALEF -FB2E ; [.231D.0020.0002][.0000.0059.0002] # HEBREW LETTER ALEF WITH PATAH -FB2F ; [.231D.0020.0002][.0000.005A.0002] # HEBREW LETTER ALEF WITH QAMATS -FB30 ; [.231D.0020.0002][.0000.005F.0002] # HEBREW LETTER ALEF WITH MAPIQ -FB4F ; [.231D.0020.0004][.2328.0020.0004] # HEBREW LIGATURE ALEF LAMED -05D1 ; [.231E.0020.0002] # HEBREW LETTER BET -2136 ; [.231E.0020.0004] # BET SYMBOL -FB31 ; [.231E.0020.0002][.0000.005F.0002] # HEBREW LETTER BET WITH DAGESH -FB4C ; [.231E.0020.0002][.0000.0060.0002] # HEBREW LETTER BET WITH RAFE -05D2 ; [.231F.0020.0002] # HEBREW LETTER GIMEL -2137 ; [.231F.0020.0004] # GIMEL SYMBOL -FB32 ; [.231F.0020.0002][.0000.005F.0002] # HEBREW LETTER GIMEL WITH DAGESH -05D3 ; [.2320.0020.0002] # HEBREW LETTER DALET -2138 ; [.2320.0020.0004] # DALET SYMBOL -FB22 ; [.2320.0020.0005] # HEBREW LETTER WIDE DALET -FB33 ; [.2320.0020.0002][.0000.005F.0002] # HEBREW LETTER DALET WITH DAGESH -05D4 ; [.2321.0020.0002] # HEBREW LETTER HE -FB23 ; [.2321.0020.0005] # HEBREW LETTER WIDE HE -FB34 ; [.2321.0020.0002][.0000.005F.0002] # HEBREW LETTER HE WITH MAPIQ -05D5 ; [.2322.0020.0002] # HEBREW LETTER VAV -FB4B ; [.2322.0020.0002][.0000.005B.0002] # HEBREW LETTER VAV WITH HOLAM -FB35 ; [.2322.0020.0002][.0000.005F.0002] # HEBREW LETTER VAV WITH DAGESH -05F0 ; [.2322.0020.0004][.2322.0020.0004] # HEBREW LIGATURE YIDDISH DOUBLE VAV -05F1 ; [.2322.0020.0004][.2326.0020.0004] # HEBREW LIGATURE YIDDISH VAV YOD -05D6 ; [.2323.0020.0002] # HEBREW LETTER ZAYIN -FB36 ; [.2323.0020.0002][.0000.005F.0002] # HEBREW LETTER ZAYIN WITH DAGESH -05D7 ; [.2324.0020.0002] # HEBREW LETTER HET -05D8 ; [.2325.0020.0002] # HEBREW LETTER TET -FB38 ; [.2325.0020.0002][.0000.005F.0002] # HEBREW LETTER TET WITH DAGESH -05D9 ; [.2326.0020.0002] # HEBREW LETTER YOD -FB1D ; [.2326.0020.0002][.0000.0056.0002] # HEBREW LETTER YOD WITH HIRIQ -FB39 ; [.2326.0020.0002][.0000.005F.0002] # HEBREW LETTER YOD WITH DAGESH -05F2 ; [.2326.0020.0004][.2326.0020.0004] # HEBREW LIGATURE YIDDISH DOUBLE YOD -FB1F ; [.2326.0020.0004][.2326.0020.0004][.0000.0059.0002] # HEBREW LIGATURE YIDDISH YOD YOD PATAH -05DB ; [.2327.0020.0002] # HEBREW LETTER KAF -FB24 ; [.2327.0020.0005] # HEBREW LETTER WIDE KAF -05DA ; [.2327.0020.0019] # HEBREW LETTER FINAL KAF -FB3B ; [.2327.0020.0002][.0000.005F.0002] # HEBREW LETTER KAF WITH DAGESH -FB3A ; [.2327.0020.0019][.0000.005F.0002] # HEBREW LETTER FINAL KAF WITH DAGESH -FB4D ; [.2327.0020.0002][.0000.0060.0002] # HEBREW LETTER KAF WITH RAFE -05DC ; [.2328.0020.0002] # HEBREW LETTER LAMED -FB25 ; [.2328.0020.0005] # HEBREW LETTER WIDE LAMED -FB3C ; [.2328.0020.0002][.0000.005F.0002] # HEBREW LETTER LAMED WITH DAGESH -05DE ; [.2329.0020.0002] # HEBREW LETTER MEM -FB26 ; [.2329.0020.0005] # HEBREW LETTER WIDE FINAL MEM -05DD ; [.2329.0020.0019] # HEBREW LETTER FINAL MEM -FB3E ; [.2329.0020.0002][.0000.005F.0002] # HEBREW LETTER MEM WITH DAGESH -05E0 ; [.232A.0020.0002] # HEBREW LETTER NUN -05DF ; [.232A.0020.0019] # HEBREW LETTER FINAL NUN -FB40 ; [.232A.0020.0002][.0000.005F.0002] # HEBREW LETTER NUN WITH DAGESH -05E1 ; [.232B.0020.0002] # HEBREW LETTER SAMEKH -FB41 ; [.232B.0020.0002][.0000.005F.0002] # HEBREW LETTER SAMEKH WITH DAGESH -05E2 ; [.232C.0020.0002] # HEBREW LETTER AYIN -FB20 ; [.232C.0020.0005] # HEBREW LETTER ALTERNATIVE AYIN -05E4 ; [.232D.0020.0002] # HEBREW LETTER PE -05E3 ; [.232D.0020.0019] # HEBREW LETTER FINAL PE -FB44 ; [.232D.0020.0002][.0000.005F.0002] # HEBREW LETTER PE WITH DAGESH -FB43 ; [.232D.0020.0019][.0000.005F.0002] # HEBREW LETTER FINAL PE WITH DAGESH -FB4E ; [.232D.0020.0002][.0000.0060.0002] # HEBREW LETTER PE WITH RAFE -05E6 ; [.232E.0020.0002] # HEBREW LETTER TSADI -05E5 ; [.232E.0020.0019] # HEBREW LETTER FINAL TSADI -FB46 ; [.232E.0020.0002][.0000.005F.0002] # HEBREW LETTER TSADI WITH DAGESH -05E7 ; [.232F.0020.0002] # HEBREW LETTER QOF -FB47 ; [.232F.0020.0002][.0000.005F.0002] # HEBREW LETTER QOF WITH DAGESH -05E8 ; [.2330.0020.0002] # HEBREW LETTER RESH -FB27 ; [.2330.0020.0005] # HEBREW LETTER WIDE RESH -FB48 ; [.2330.0020.0002][.0000.005F.0002] # HEBREW LETTER RESH WITH DAGESH -05E9 ; [.2331.0020.0002] # HEBREW LETTER SHIN -FB2B ; [.2331.0020.0002][.0000.005D.0002] # HEBREW LETTER SHIN WITH SIN DOT -FB2A ; [.2331.0020.0002][.0000.005E.0002] # HEBREW LETTER SHIN WITH SHIN DOT -FB49 ; [.2331.0020.0002][.0000.005F.0002] # HEBREW LETTER SHIN WITH DAGESH -FB2D ; [.2331.0020.0002][.0000.005F.0002][.0000.005D.0002] # HEBREW LETTER SHIN WITH DAGESH AND SIN DOT -FB2C ; [.2331.0020.0002][.0000.005F.0002][.0000.005E.0002] # HEBREW LETTER SHIN WITH DAGESH AND SHIN DOT -05EA ; [.2332.0020.0002] # HEBREW LETTER TAV -FB28 ; [.2332.0020.0005] # HEBREW LETTER WIDE TAV -FB4A ; [.2332.0020.0002][.0000.005F.0002] # HEBREW LETTER TAV WITH DAGESH -10900 ; [.2333.0020.0002] # PHOENICIAN LETTER ALF -10901 ; [.2334.0020.0002] # PHOENICIAN LETTER BET -10902 ; [.2335.0020.0002] # PHOENICIAN LETTER GAML -10903 ; [.2336.0020.0002] # PHOENICIAN LETTER DELT -10904 ; [.2337.0020.0002] # PHOENICIAN LETTER HE -10905 ; [.2338.0020.0002] # PHOENICIAN LETTER WAU -10906 ; [.2339.0020.0002] # PHOENICIAN LETTER ZAI -10907 ; [.233A.0020.0002] # PHOENICIAN LETTER HET -10908 ; [.233B.0020.0002] # PHOENICIAN LETTER TET -10909 ; [.233C.0020.0002] # PHOENICIAN LETTER YOD -1090A ; [.233D.0020.0002] # PHOENICIAN LETTER KAF -1090B ; [.233E.0020.0002] # PHOENICIAN LETTER LAMD -1090C ; [.233F.0020.0002] # PHOENICIAN LETTER MEM -1090D ; [.2340.0020.0002] # PHOENICIAN LETTER NUN -1090E ; [.2341.0020.0002] # PHOENICIAN LETTER SEMK -1090F ; [.2342.0020.0002] # PHOENICIAN LETTER AIN -10910 ; [.2343.0020.0002] # PHOENICIAN LETTER PE -10911 ; [.2344.0020.0002] # PHOENICIAN LETTER SADE -10912 ; [.2345.0020.0002] # PHOENICIAN LETTER QOF -10913 ; [.2346.0020.0002] # PHOENICIAN LETTER ROSH -10914 ; [.2347.0020.0002] # PHOENICIAN LETTER SHIN -10915 ; [.2348.0020.0002] # PHOENICIAN LETTER TAU -0800 ; [.2349.0020.0002] # SAMARITAN LETTER ALAF -0801 ; [.234A.0020.0002] # SAMARITAN LETTER BIT -0802 ; [.234B.0020.0002] # SAMARITAN LETTER GAMAN -0803 ; [.234C.0020.0002] # SAMARITAN LETTER DALAT -0804 ; [.234D.0020.0002] # SAMARITAN LETTER IY -0805 ; [.234E.0020.0002] # SAMARITAN LETTER BAA -0806 ; [.234F.0020.0002] # SAMARITAN LETTER ZEN -0807 ; [.2350.0020.0002] # SAMARITAN LETTER IT -0808 ; [.2351.0020.0002] # SAMARITAN LETTER TIT -0809 ; [.2352.0020.0002] # SAMARITAN LETTER YUT -080A ; [.2353.0020.0002] # SAMARITAN LETTER KAAF -080B ; [.2354.0020.0002] # SAMARITAN LETTER LABAT -080C ; [.2355.0020.0002] # SAMARITAN LETTER MIM -080D ; [.2356.0020.0002] # SAMARITAN LETTER NUN -080E ; [.2357.0020.0002] # SAMARITAN LETTER SINGAAT -080F ; [.2358.0020.0002] # SAMARITAN LETTER IN -0810 ; [.2359.0020.0002] # SAMARITAN LETTER FI -0811 ; [.235A.0020.0002] # SAMARITAN LETTER TSAADIY -0812 ; [.235B.0020.0002] # SAMARITAN LETTER QUF -0813 ; [.235C.0020.0002] # SAMARITAN LETTER RISH -0814 ; [.235D.0020.0002] # SAMARITAN LETTER SHAN -0815 ; [.235E.0020.0002] # SAMARITAN LETTER TAAF -0816 ; [.235F.0020.0002] # SAMARITAN MARK IN -0817 ; [.2360.0020.0002] # SAMARITAN MARK IN-ALAF -081A ; [.2361.0020.0002] # SAMARITAN MODIFIER LETTER EPENTHETIC YUT -081B ; [.2362.0020.0002] # SAMARITAN MARK EPENTHETIC YUT -0621 ; [.2363.0020.0002] # ARABIC LETTER HAMZA -0674 ; [.2363.0020.0004] # ARABIC LETTER HIGH HAMZA -FE80 ; [.2363.0020.001A] # ARABIC LETTER HAMZA ISOLATED FORM -06FD ; [.2363.0020.0004][.0000.0112.0004] # ARABIC SIGN SINDHI AMPERSAND -0622 ; [.2364.0020.0002] # ARABIC LETTER ALEF WITH MADDA ABOVE -0627 0653 ; [.2364.0020.0002] # ARABIC LETTER ALEF WITH MADDA ABOVE -FE82 ; [.2364.0020.0019] # ARABIC LETTER ALEF WITH MADDA ABOVE FINAL FORM -FE81 ; [.2364.0020.001A] # ARABIC LETTER ALEF WITH MADDA ABOVE ISOLATED FORM -0623 ; [.2365.0020.0002] # ARABIC LETTER ALEF WITH HAMZA ABOVE -0627 0654 ; [.2365.0020.0002] # ARABIC LETTER ALEF WITH HAMZA ABOVE -FE84 ; [.2365.0020.0019] # ARABIC LETTER ALEF WITH HAMZA ABOVE FINAL FORM -FE83 ; [.2365.0020.001A] # ARABIC LETTER ALEF WITH HAMZA ABOVE ISOLATED FORM -0672 ; [.2366.0020.0002] # ARABIC LETTER ALEF WITH WAVY HAMZA ABOVE -0671 ; [.2367.0020.0002] # ARABIC LETTER ALEF WASLA -FB51 ; [.2367.0020.0019] # ARABIC LETTER ALEF WASLA FINAL FORM -FB50 ; [.2367.0020.001A] # ARABIC LETTER ALEF WASLA ISOLATED FORM -0624 ; [.2368.0020.0002] # ARABIC LETTER WAW WITH HAMZA ABOVE -0648 0654 ; [.2368.0020.0002] # ARABIC LETTER WAW WITH HAMZA ABOVE -FE86 ; [.2368.0020.0019] # ARABIC LETTER WAW WITH HAMZA ABOVE FINAL FORM -FE85 ; [.2368.0020.001A] # ARABIC LETTER WAW WITH HAMZA ABOVE ISOLATED FORM -0625 ; [.2369.0020.0002] # ARABIC LETTER ALEF WITH HAMZA BELOW -0627 0655 ; [.2369.0020.0002] # ARABIC LETTER ALEF WITH HAMZA BELOW -FE88 ; [.2369.0020.0019] # ARABIC LETTER ALEF WITH HAMZA BELOW FINAL FORM -FE87 ; [.2369.0020.001A] # ARABIC LETTER ALEF WITH HAMZA BELOW ISOLATED FORM -0673 ; [.236A.0020.0002] # ARABIC LETTER ALEF WITH WAVY HAMZA BELOW -0773 ; [.236B.0020.0002] # ARABIC LETTER ALEF WITH EXTENDED ARABIC-INDIC DIGIT TWO ABOVE -0774 ; [.236C.0020.0002] # ARABIC LETTER ALEF WITH EXTENDED ARABIC-INDIC DIGIT THREE ABOVE -0626 ; [.236D.0020.0002] # ARABIC LETTER YEH WITH HAMZA ABOVE -064A 0654 ; [.236D.0020.0002] # ARABIC LETTER YEH WITH HAMZA ABOVE -FE8B ; [.236D.0020.0017] # ARABIC LETTER YEH WITH HAMZA ABOVE INITIAL FORM -FE8C ; [.236D.0020.0018] # ARABIC LETTER YEH WITH HAMZA ABOVE MEDIAL FORM -FE8A ; [.236D.0020.0019] # ARABIC LETTER YEH WITH HAMZA ABOVE FINAL FORM -FE89 ; [.236D.0020.001A] # ARABIC LETTER YEH WITH HAMZA ABOVE ISOLATED FORM -FBEB ; [.236D.0020.0019][.2371.0020.0019] # ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH ALEF FINAL FORM -FBEA ; [.236D.0020.001A][.2371.0020.001A] # ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH ALEF ISOLATED FORM -FC97 ; [.236D.0020.0017][.238B.0020.0017] # ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH JEEM INITIAL FORM -FC00 ; [.236D.0020.001A][.238B.0020.001A] # ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH JEEM ISOLATED FORM -FC98 ; [.236D.0020.0017][.2392.0020.0017] # ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH HAH INITIAL FORM -FC01 ; [.236D.0020.001A][.2392.0020.001A] # ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH HAH ISOLATED FORM -FC99 ; [.236D.0020.0017][.2393.0020.0017] # ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH KHAH INITIAL FORM -FC64 ; [.236D.0020.0019][.23AC.0020.0019] # ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH REH FINAL FORM -FC65 ; [.236D.0020.0019][.23AD.0020.0019] # ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH ZAIN FINAL FORM -FC9A ; [.236D.0020.0017][.2409.0020.0017] # ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH MEEM INITIAL FORM -FCDF ; [.236D.0020.0018][.2409.0020.0018] # ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH MEEM MEDIAL FORM -FC66 ; [.236D.0020.0019][.2409.0020.0019] # ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH MEEM FINAL FORM -FC02 ; [.236D.0020.001A][.2409.0020.001A] # ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH MEEM ISOLATED FORM -FC67 ; [.236D.0020.0019][.240D.0020.0019] # ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH NOON FINAL FORM -FC9B ; [.236D.0020.0017][.2417.0020.0017] # ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH HEH INITIAL FORM -FCE0 ; [.236D.0020.0018][.2417.0020.0018] # ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH HEH MEDIAL FORM -FBED ; [.236D.0020.0019][.241C.0020.0019] # ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH AE FINAL FORM -FBEC ; [.236D.0020.001A][.241C.0020.001A] # ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH AE ISOLATED FORM -FBEF ; [.236D.0020.0019][.241D.0020.0019] # ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH WAW FINAL FORM -FBEE ; [.236D.0020.001A][.241D.0020.001A] # ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH WAW ISOLATED FORM -FBF3 ; [.236D.0020.0019][.2420.0020.0019] # ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH OE FINAL FORM -FBF2 ; [.236D.0020.001A][.2420.0020.001A] # ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH OE ISOLATED FORM -FBF1 ; [.236D.0020.0019][.2421.0020.0019] # ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH U FINAL FORM -FBF0 ; [.236D.0020.001A][.2421.0020.001A] # ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH U ISOLATED FORM -FBF5 ; [.236D.0020.0019][.2422.0020.0019] # ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH YU FINAL FORM -FBF4 ; [.236D.0020.001A][.2422.0020.001A] # ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH YU ISOLATED FORM -FBFB ; [.236D.0020.0017][.242B.0020.0017] # ARABIC LIGATURE UIGHUR KIRGHIZ YEH WITH HAMZA ABOVE WITH ALEF MAKSURA INITIAL FORM -FBFA ; [.236D.0020.0019][.242B.0020.0019] # ARABIC LIGATURE UIGHUR KIRGHIZ YEH WITH HAMZA ABOVE WITH ALEF MAKSURA FINAL FORM -FC68 ; [.236D.0020.0019][.242B.0020.0019] # ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH ALEF MAKSURA FINAL FORM -FBF9 ; [.236D.0020.001A][.242B.0020.001A] # ARABIC LIGATURE UIGHUR KIRGHIZ YEH WITH HAMZA ABOVE WITH ALEF MAKSURA ISOLATED FORM -FC03 ; [.236D.0020.001A][.242B.0020.001A] # ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH ALEF MAKSURA ISOLATED FORM -FC69 ; [.236D.0020.0019][.242C.0020.0019] # ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH YEH FINAL FORM -FC04 ; [.236D.0020.001A][.242C.0020.001A] # ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH YEH ISOLATED FORM -FBF8 ; [.236D.0020.0017][.2430.0020.0017] # ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH E INITIAL FORM -FBF7 ; [.236D.0020.0019][.2430.0020.0019] # ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH E FINAL FORM -FBF6 ; [.236D.0020.001A][.2430.0020.001A] # ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH E ISOLATED FORM -08A8 ; [.236E.0020.0002] # ARABIC LETTER YEH WITH TWO DOTS BELOW AND HAMZA ABOVE -08A9 ; [.236F.0020.0002] # ARABIC LETTER YEH WITH TWO DOTS BELOW AND DOT ABOVE -08AC ; [.2370.0020.0002] # ARABIC LETTER ROHINGYA YEH -0627 ; [.2371.0020.0002] # ARABIC LETTER ALEF -08AD ; [.2371.0020.0004] # ARABIC LETTER LOW ALEF -1EE00 ; [.2371.0020.0005] # ARABIC MATHEMATICAL ALEF -1EE80 ; [.2371.0020.0005] # ARABIC MATHEMATICAL LOOPED ALEF -FE8E ; [.2371.0020.0019] # ARABIC LETTER ALEF FINAL FORM -FE8D ; [.2371.0020.001A] # ARABIC LETTER ALEF ISOLATED FORM -FD3C ; [.2371.0020.0019][.0000.006D.0019] # ARABIC LIGATURE ALEF WITH FATHATAN FINAL FORM -FD3D ; [.2371.0020.001A][.0000.006D.001A] # ARABIC LIGATURE ALEF WITH FATHATAN ISOLATED FORM -0675 ; [.2371.0020.0004][.2363.0020.0004] # ARABIC LETTER HIGH HAMZA ALEF -FDF3 ; [.2371.0020.001A][.23ED.0020.001A][.2373.0020.001A][.23AC.0020.001A] # ARABIC LIGATURE AKBAR ISOLATED FORM -FDF2 ; [.2371.0020.001A][.2402.0020.001A][.2402.0020.001A][.2417.0020.001A] # ARABIC LIGATURE ALLAH ISOLATED FORM -066E ; [.2372.0020.0002] # ARABIC LETTER DOTLESS BEH -1EE1C ; [.2372.0020.0005] # ARABIC MATHEMATICAL DOTLESS BEH -1EE7C ; [.2372.0020.0005] # ARABIC MATHEMATICAL STRETCHED DOTLESS BEH -0628 ; [.2373.0020.0002] # ARABIC LETTER BEH -1EE01 ; [.2373.0020.0005] # ARABIC MATHEMATICAL BEH -1EE21 ; [.2373.0020.0005] # ARABIC MATHEMATICAL INITIAL BEH -1EE61 ; [.2373.0020.0005] # ARABIC MATHEMATICAL STRETCHED BEH -1EE81 ; [.2373.0020.0005] # ARABIC MATHEMATICAL LOOPED BEH -1EEA1 ; [.2373.0020.0005] # ARABIC MATHEMATICAL DOUBLE-STRUCK BEH -FE91 ; [.2373.0020.0017] # ARABIC LETTER BEH INITIAL FORM -FE92 ; [.2373.0020.0018] # ARABIC LETTER BEH MEDIAL FORM -FE90 ; [.2373.0020.0019] # ARABIC LETTER BEH FINAL FORM -FE8F ; [.2373.0020.001A] # ARABIC LETTER BEH ISOLATED FORM -FC9C ; [.2373.0020.0017][.238B.0020.0017] # ARABIC LIGATURE BEH WITH JEEM INITIAL FORM -FC05 ; [.2373.0020.001A][.238B.0020.001A] # ARABIC LIGATURE BEH WITH JEEM ISOLATED FORM -FC9D ; [.2373.0020.0017][.2392.0020.0017] # ARABIC LIGATURE BEH WITH HAH INITIAL FORM -FC06 ; [.2373.0020.001A][.2392.0020.001A] # ARABIC LIGATURE BEH WITH HAH ISOLATED FORM -FDC2 ; [.2373.0020.0019][.2392.0020.0019][.242C.0020.0019] # ARABIC LIGATURE BEH WITH HAH WITH YEH FINAL FORM -FC9E ; [.2373.0020.0017][.2393.0020.0017] # ARABIC LIGATURE BEH WITH KHAH INITIAL FORM -FC07 ; [.2373.0020.001A][.2393.0020.001A] # ARABIC LIGATURE BEH WITH KHAH ISOLATED FORM -FD9E ; [.2373.0020.0019][.2393.0020.0019][.242C.0020.0019] # ARABIC LIGATURE BEH WITH KHAH WITH YEH FINAL FORM -FC6A ; [.2373.0020.0019][.23AC.0020.0019] # ARABIC LIGATURE BEH WITH REH FINAL FORM -FC6B ; [.2373.0020.0019][.23AD.0020.0019] # ARABIC LIGATURE BEH WITH ZAIN FINAL FORM -FC9F ; [.2373.0020.0017][.2409.0020.0017] # ARABIC LIGATURE BEH WITH MEEM INITIAL FORM -FCE1 ; [.2373.0020.0018][.2409.0020.0018] # ARABIC LIGATURE BEH WITH MEEM MEDIAL FORM -FC6C ; [.2373.0020.0019][.2409.0020.0019] # ARABIC LIGATURE BEH WITH MEEM FINAL FORM -FC08 ; [.2373.0020.001A][.2409.0020.001A] # ARABIC LIGATURE BEH WITH MEEM ISOLATED FORM -FC6D ; [.2373.0020.0019][.240D.0020.0019] # ARABIC LIGATURE BEH WITH NOON FINAL FORM -FCA0 ; [.2373.0020.0017][.2417.0020.0017] # ARABIC LIGATURE BEH WITH HEH INITIAL FORM -FCE2 ; [.2373.0020.0018][.2417.0020.0018] # ARABIC LIGATURE BEH WITH HEH MEDIAL FORM -FC6E ; [.2373.0020.0019][.242B.0020.0019] # ARABIC LIGATURE BEH WITH ALEF MAKSURA FINAL FORM -FC09 ; [.2373.0020.001A][.242B.0020.001A] # ARABIC LIGATURE BEH WITH ALEF MAKSURA ISOLATED FORM -FC6F ; [.2373.0020.0019][.242C.0020.0019] # ARABIC LIGATURE BEH WITH YEH FINAL FORM -FC0A ; [.2373.0020.001A][.242C.0020.001A] # ARABIC LIGATURE BEH WITH YEH ISOLATED FORM -067B ; [.2374.0020.0002] # ARABIC LETTER BEEH -FB54 ; [.2374.0020.0017] # ARABIC LETTER BEEH INITIAL FORM -FB55 ; [.2374.0020.0018] # ARABIC LETTER BEEH MEDIAL FORM -FB53 ; [.2374.0020.0019] # ARABIC LETTER BEEH FINAL FORM -FB52 ; [.2374.0020.001A] # ARABIC LETTER BEEH ISOLATED FORM -067E ; [.2375.0020.0002] # ARABIC LETTER PEH -FB58 ; [.2375.0020.0017] # ARABIC LETTER PEH INITIAL FORM -FB59 ; [.2375.0020.0018] # ARABIC LETTER PEH MEDIAL FORM -FB57 ; [.2375.0020.0019] # ARABIC LETTER PEH FINAL FORM -FB56 ; [.2375.0020.001A] # ARABIC LETTER PEH ISOLATED FORM -0680 ; [.2376.0020.0002] # ARABIC LETTER BEHEH -FB5C ; [.2376.0020.0017] # ARABIC LETTER BEHEH INITIAL FORM -FB5D ; [.2376.0020.0018] # ARABIC LETTER BEHEH MEDIAL FORM -FB5B ; [.2376.0020.0019] # ARABIC LETTER BEHEH FINAL FORM -FB5A ; [.2376.0020.001A] # ARABIC LETTER BEHEH ISOLATED FORM -0750 ; [.2377.0020.0002] # ARABIC LETTER BEH WITH THREE DOTS HORIZONTALLY BELOW -0751 ; [.2378.0020.0002] # ARABIC LETTER BEH WITH DOT BELOW AND THREE DOTS ABOVE -0752 ; [.2379.0020.0002] # ARABIC LETTER BEH WITH THREE DOTS POINTING UPWARDS BELOW -0753 ; [.237A.0020.0002] # ARABIC LETTER BEH WITH THREE DOTS POINTING UPWARDS BELOW AND TWO DOTS ABOVE -0754 ; [.237B.0020.0002] # ARABIC LETTER BEH WITH TWO DOTS BELOW AND DOT ABOVE -0755 ; [.237C.0020.0002] # ARABIC LETTER BEH WITH INVERTED SMALL V BELOW -08A0 ; [.237D.0020.0002] # ARABIC LETTER BEH WITH SMALL V BELOW -0756 ; [.237E.0020.0002] # ARABIC LETTER BEH WITH SMALL V -08A1 ; [.237F.0020.0002] # ARABIC LETTER BEH WITH HAMZA ABOVE -08B6 ; [.2380.0020.0002] # ARABIC LETTER BEH WITH SMALL MEEM ABOVE -08B7 ; [.2381.0020.0002] # ARABIC LETTER PEH WITH SMALL MEEM ABOVE -0629 ; [.2382.0020.0002] # ARABIC LETTER TEH MARBUTA -FE94 ; [.2382.0020.0019] # ARABIC LETTER TEH MARBUTA FINAL FORM -FE93 ; [.2382.0020.001A] # ARABIC LETTER TEH MARBUTA ISOLATED FORM -062A ; [.2383.0020.0002] # ARABIC LETTER TEH -1EE15 ; [.2383.0020.0005] # ARABIC MATHEMATICAL TEH -1EE35 ; [.2383.0020.0005] # ARABIC MATHEMATICAL INITIAL TEH -1EE75 ; [.2383.0020.0005] # ARABIC MATHEMATICAL STRETCHED TEH -1EE95 ; [.2383.0020.0005] # ARABIC MATHEMATICAL LOOPED TEH -1EEB5 ; [.2383.0020.0005] # ARABIC MATHEMATICAL DOUBLE-STRUCK TEH -FE97 ; [.2383.0020.0017] # ARABIC LETTER TEH INITIAL FORM -FE98 ; [.2383.0020.0018] # ARABIC LETTER TEH MEDIAL FORM -FE96 ; [.2383.0020.0019] # ARABIC LETTER TEH FINAL FORM -FE95 ; [.2383.0020.001A] # ARABIC LETTER TEH ISOLATED FORM -FCA1 ; [.2383.0020.0017][.238B.0020.0017] # ARABIC LIGATURE TEH WITH JEEM INITIAL FORM -FC0B ; [.2383.0020.001A][.238B.0020.001A] # ARABIC LIGATURE TEH WITH JEEM ISOLATED FORM -FD50 ; [.2383.0020.0017][.238B.0020.0017][.2409.0020.0017] # ARABIC LIGATURE TEH WITH JEEM WITH MEEM INITIAL FORM -FDA0 ; [.2383.0020.0019][.238B.0020.0019][.242B.0020.0019] # ARABIC LIGATURE TEH WITH JEEM WITH ALEF MAKSURA FINAL FORM -FD9F ; [.2383.0020.0019][.238B.0020.0019][.242C.0020.0019] # ARABIC LIGATURE TEH WITH JEEM WITH YEH FINAL FORM -FCA2 ; [.2383.0020.0017][.2392.0020.0017] # ARABIC LIGATURE TEH WITH HAH INITIAL FORM -FC0C ; [.2383.0020.001A][.2392.0020.001A] # ARABIC LIGATURE TEH WITH HAH ISOLATED FORM -FD52 ; [.2383.0020.0017][.2392.0020.0017][.238B.0020.0017] # ARABIC LIGATURE TEH WITH HAH WITH JEEM INITIAL FORM -FD51 ; [.2383.0020.0019][.2392.0020.0019][.238B.0020.0019] # ARABIC LIGATURE TEH WITH HAH WITH JEEM FINAL FORM -FD53 ; [.2383.0020.0017][.2392.0020.0017][.2409.0020.0017] # ARABIC LIGATURE TEH WITH HAH WITH MEEM INITIAL FORM -FCA3 ; [.2383.0020.0017][.2393.0020.0017] # ARABIC LIGATURE TEH WITH KHAH INITIAL FORM -FC0D ; [.2383.0020.001A][.2393.0020.001A] # ARABIC LIGATURE TEH WITH KHAH ISOLATED FORM -FD54 ; [.2383.0020.0017][.2393.0020.0017][.2409.0020.0017] # ARABIC LIGATURE TEH WITH KHAH WITH MEEM INITIAL FORM -FDA2 ; [.2383.0020.0019][.2393.0020.0019][.242B.0020.0019] # ARABIC LIGATURE TEH WITH KHAH WITH ALEF MAKSURA FINAL FORM -FDA1 ; [.2383.0020.0019][.2393.0020.0019][.242C.0020.0019] # ARABIC LIGATURE TEH WITH KHAH WITH YEH FINAL FORM -FC70 ; [.2383.0020.0019][.23AC.0020.0019] # ARABIC LIGATURE TEH WITH REH FINAL FORM -FC71 ; [.2383.0020.0019][.23AD.0020.0019] # ARABIC LIGATURE TEH WITH ZAIN FINAL FORM -FCA4 ; [.2383.0020.0017][.2409.0020.0017] # ARABIC LIGATURE TEH WITH MEEM INITIAL FORM -FCE3 ; [.2383.0020.0018][.2409.0020.0018] # ARABIC LIGATURE TEH WITH MEEM MEDIAL FORM -FC72 ; [.2383.0020.0019][.2409.0020.0019] # ARABIC LIGATURE TEH WITH MEEM FINAL FORM -FC0E ; [.2383.0020.001A][.2409.0020.001A] # ARABIC LIGATURE TEH WITH MEEM ISOLATED FORM -FD55 ; [.2383.0020.0017][.2409.0020.0017][.238B.0020.0017] # ARABIC LIGATURE TEH WITH MEEM WITH JEEM INITIAL FORM -FD56 ; [.2383.0020.0017][.2409.0020.0017][.2392.0020.0017] # ARABIC LIGATURE TEH WITH MEEM WITH HAH INITIAL FORM -FD57 ; [.2383.0020.0017][.2409.0020.0017][.2393.0020.0017] # ARABIC LIGATURE TEH WITH MEEM WITH KHAH INITIAL FORM -FDA4 ; [.2383.0020.0019][.2409.0020.0019][.242B.0020.0019] # ARABIC LIGATURE TEH WITH MEEM WITH ALEF MAKSURA FINAL FORM -FDA3 ; [.2383.0020.0019][.2409.0020.0019][.242C.0020.0019] # ARABIC LIGATURE TEH WITH MEEM WITH YEH FINAL FORM -FC73 ; [.2383.0020.0019][.240D.0020.0019] # ARABIC LIGATURE TEH WITH NOON FINAL FORM -FCA5 ; [.2383.0020.0017][.2417.0020.0017] # ARABIC LIGATURE TEH WITH HEH INITIAL FORM -FCE4 ; [.2383.0020.0018][.2417.0020.0018] # ARABIC LIGATURE TEH WITH HEH MEDIAL FORM -FC74 ; [.2383.0020.0019][.242B.0020.0019] # ARABIC LIGATURE TEH WITH ALEF MAKSURA FINAL FORM -FC0F ; [.2383.0020.001A][.242B.0020.001A] # ARABIC LIGATURE TEH WITH ALEF MAKSURA ISOLATED FORM -FC75 ; [.2383.0020.0019][.242C.0020.0019] # ARABIC LIGATURE TEH WITH YEH FINAL FORM -FC10 ; [.2383.0020.001A][.242C.0020.001A] # ARABIC LIGATURE TEH WITH YEH ISOLATED FORM -062B ; [.2384.0020.0002] # ARABIC LETTER THEH -1EE16 ; [.2384.0020.0005] # ARABIC MATHEMATICAL THEH -1EE36 ; [.2384.0020.0005] # ARABIC MATHEMATICAL INITIAL THEH -1EE76 ; [.2384.0020.0005] # ARABIC MATHEMATICAL STRETCHED THEH -1EE96 ; [.2384.0020.0005] # ARABIC MATHEMATICAL LOOPED THEH -1EEB6 ; [.2384.0020.0005] # ARABIC MATHEMATICAL DOUBLE-STRUCK THEH -FE9B ; [.2384.0020.0017] # ARABIC LETTER THEH INITIAL FORM -FE9C ; [.2384.0020.0018] # ARABIC LETTER THEH MEDIAL FORM -FE9A ; [.2384.0020.0019] # ARABIC LETTER THEH FINAL FORM -FE99 ; [.2384.0020.001A] # ARABIC LETTER THEH ISOLATED FORM -FC11 ; [.2384.0020.001A][.238B.0020.001A] # ARABIC LIGATURE THEH WITH JEEM ISOLATED FORM -FC76 ; [.2384.0020.0019][.23AC.0020.0019] # ARABIC LIGATURE THEH WITH REH FINAL FORM -FC77 ; [.2384.0020.0019][.23AD.0020.0019] # ARABIC LIGATURE THEH WITH ZAIN FINAL FORM -FCA6 ; [.2384.0020.0017][.2409.0020.0017] # ARABIC LIGATURE THEH WITH MEEM INITIAL FORM -FCE5 ; [.2384.0020.0018][.2409.0020.0018] # ARABIC LIGATURE THEH WITH MEEM MEDIAL FORM -FC78 ; [.2384.0020.0019][.2409.0020.0019] # ARABIC LIGATURE THEH WITH MEEM FINAL FORM -FC12 ; [.2384.0020.001A][.2409.0020.001A] # ARABIC LIGATURE THEH WITH MEEM ISOLATED FORM -FC79 ; [.2384.0020.0019][.240D.0020.0019] # ARABIC LIGATURE THEH WITH NOON FINAL FORM -FCE6 ; [.2384.0020.0018][.2417.0020.0018] # ARABIC LIGATURE THEH WITH HEH MEDIAL FORM -FC7A ; [.2384.0020.0019][.242B.0020.0019] # ARABIC LIGATURE THEH WITH ALEF MAKSURA FINAL FORM -FC13 ; [.2384.0020.001A][.242B.0020.001A] # ARABIC LIGATURE THEH WITH ALEF MAKSURA ISOLATED FORM -FC7B ; [.2384.0020.0019][.242C.0020.0019] # ARABIC LIGATURE THEH WITH YEH FINAL FORM -FC14 ; [.2384.0020.001A][.242C.0020.001A] # ARABIC LIGATURE THEH WITH YEH ISOLATED FORM -0679 ; [.2385.0020.0002] # ARABIC LETTER TTEH -FB68 ; [.2385.0020.0017] # ARABIC LETTER TTEH INITIAL FORM -FB69 ; [.2385.0020.0018] # ARABIC LETTER TTEH MEDIAL FORM -FB67 ; [.2385.0020.0019] # ARABIC LETTER TTEH FINAL FORM -FB66 ; [.2385.0020.001A] # ARABIC LETTER TTEH ISOLATED FORM -067A ; [.2386.0020.0002] # ARABIC LETTER TTEHEH -FB60 ; [.2386.0020.0017] # ARABIC LETTER TTEHEH INITIAL FORM -FB61 ; [.2386.0020.0018] # ARABIC LETTER TTEHEH MEDIAL FORM -FB5F ; [.2386.0020.0019] # ARABIC LETTER TTEHEH FINAL FORM -FB5E ; [.2386.0020.001A] # ARABIC LETTER TTEHEH ISOLATED FORM -067C ; [.2387.0020.0002] # ARABIC LETTER TEH WITH RING -067D ; [.2388.0020.0002] # ARABIC LETTER TEH WITH THREE DOTS ABOVE DOWNWARDS -067F ; [.2389.0020.0002] # ARABIC LETTER TEHEH -FB64 ; [.2389.0020.0017] # ARABIC LETTER TEHEH INITIAL FORM -FB65 ; [.2389.0020.0018] # ARABIC LETTER TEHEH MEDIAL FORM -FB63 ; [.2389.0020.0019] # ARABIC LETTER TEHEH FINAL FORM -FB62 ; [.2389.0020.001A] # ARABIC LETTER TEHEH ISOLATED FORM -08B8 ; [.238A.0020.0002] # ARABIC LETTER TEH WITH SMALL TEH ABOVE -062C ; [.238B.0020.0002] # ARABIC LETTER JEEM -1EE02 ; [.238B.0020.0005] # ARABIC MATHEMATICAL JEEM -1EE22 ; [.238B.0020.0005] # ARABIC MATHEMATICAL INITIAL JEEM -1EE42 ; [.238B.0020.0005] # ARABIC MATHEMATICAL TAILED JEEM -1EE62 ; [.238B.0020.0005] # ARABIC MATHEMATICAL STRETCHED JEEM -1EE82 ; [.238B.0020.0005] # ARABIC MATHEMATICAL LOOPED JEEM -1EEA2 ; [.238B.0020.0005] # ARABIC MATHEMATICAL DOUBLE-STRUCK JEEM -FE9F ; [.238B.0020.0017] # ARABIC LETTER JEEM INITIAL FORM -FEA0 ; [.238B.0020.0018] # ARABIC LETTER JEEM MEDIAL FORM -FE9E ; [.238B.0020.0019] # ARABIC LETTER JEEM FINAL FORM -FE9D ; [.238B.0020.001A] # ARABIC LETTER JEEM ISOLATED FORM -FCA7 ; [.238B.0020.0017][.2392.0020.0017] # ARABIC LIGATURE JEEM WITH HAH INITIAL FORM -FC15 ; [.238B.0020.001A][.2392.0020.001A] # ARABIC LIGATURE JEEM WITH HAH ISOLATED FORM -FDA6 ; [.238B.0020.0019][.2392.0020.0019][.242B.0020.0019] # ARABIC LIGATURE JEEM WITH HAH WITH ALEF MAKSURA FINAL FORM -FDBE ; [.238B.0020.0019][.2392.0020.0019][.242C.0020.0019] # ARABIC LIGATURE JEEM WITH HAH WITH YEH FINAL FORM -FDFB ; [.238B.0020.001A][.2402.0020.001A][*0209.0020.001A][.238B.0020.001A][.2402.0020.001A][.2371.0020.001A][.2402.0020.001A][.2417.0020.001A] # ARABIC LIGATURE JALLAJALALOUHOU -FCA8 ; [.238B.0020.0017][.2409.0020.0017] # ARABIC LIGATURE JEEM WITH MEEM INITIAL FORM -FC16 ; [.238B.0020.001A][.2409.0020.001A] # ARABIC LIGATURE JEEM WITH MEEM ISOLATED FORM -FD59 ; [.238B.0020.0017][.2409.0020.0017][.2392.0020.0017] # ARABIC LIGATURE JEEM WITH MEEM WITH HAH INITIAL FORM -FD58 ; [.238B.0020.0019][.2409.0020.0019][.2392.0020.0019] # ARABIC LIGATURE JEEM WITH MEEM WITH HAH FINAL FORM -FDA7 ; [.238B.0020.0019][.2409.0020.0019][.242B.0020.0019] # ARABIC LIGATURE JEEM WITH MEEM WITH ALEF MAKSURA FINAL FORM -FDA5 ; [.238B.0020.0019][.2409.0020.0019][.242C.0020.0019] # ARABIC LIGATURE JEEM WITH MEEM WITH YEH FINAL FORM -FD1D ; [.238B.0020.0019][.242B.0020.0019] # ARABIC LIGATURE JEEM WITH ALEF MAKSURA FINAL FORM -FD01 ; [.238B.0020.001A][.242B.0020.001A] # ARABIC LIGATURE JEEM WITH ALEF MAKSURA ISOLATED FORM -FD1E ; [.238B.0020.0019][.242C.0020.0019] # ARABIC LIGATURE JEEM WITH YEH FINAL FORM -FD02 ; [.238B.0020.001A][.242C.0020.001A] # ARABIC LIGATURE JEEM WITH YEH ISOLATED FORM -0683 ; [.238C.0020.0002] # ARABIC LETTER NYEH -FB78 ; [.238C.0020.0017] # ARABIC LETTER NYEH INITIAL FORM -FB79 ; [.238C.0020.0018] # ARABIC LETTER NYEH MEDIAL FORM -FB77 ; [.238C.0020.0019] # ARABIC LETTER NYEH FINAL FORM -FB76 ; [.238C.0020.001A] # ARABIC LETTER NYEH ISOLATED FORM -0684 ; [.238D.0020.0002] # ARABIC LETTER DYEH -FB74 ; [.238D.0020.0017] # ARABIC LETTER DYEH INITIAL FORM -FB75 ; [.238D.0020.0018] # ARABIC LETTER DYEH MEDIAL FORM -FB73 ; [.238D.0020.0019] # ARABIC LETTER DYEH FINAL FORM -FB72 ; [.238D.0020.001A] # ARABIC LETTER DYEH ISOLATED FORM -0686 ; [.238E.0020.0002] # ARABIC LETTER TCHEH -FB7C ; [.238E.0020.0017] # ARABIC LETTER TCHEH INITIAL FORM -FB7D ; [.238E.0020.0018] # ARABIC LETTER TCHEH MEDIAL FORM -FB7B ; [.238E.0020.0019] # ARABIC LETTER TCHEH FINAL FORM -FB7A ; [.238E.0020.001A] # ARABIC LETTER TCHEH ISOLATED FORM -06BF ; [.238F.0020.0002] # ARABIC LETTER TCHEH WITH DOT ABOVE -0687 ; [.2390.0020.0002] # ARABIC LETTER TCHEHEH -FB80 ; [.2390.0020.0017] # ARABIC LETTER TCHEHEH INITIAL FORM -FB81 ; [.2390.0020.0018] # ARABIC LETTER TCHEHEH MEDIAL FORM -FB7F ; [.2390.0020.0019] # ARABIC LETTER TCHEHEH FINAL FORM -FB7E ; [.2390.0020.001A] # ARABIC LETTER TCHEHEH ISOLATED FORM -08A2 ; [.2391.0020.0002] # ARABIC LETTER JEEM WITH TWO DOTS ABOVE -062D ; [.2392.0020.0002] # ARABIC LETTER HAH -1EE07 ; [.2392.0020.0005] # ARABIC MATHEMATICAL HAH -1EE27 ; [.2392.0020.0005] # ARABIC MATHEMATICAL INITIAL HAH -1EE47 ; [.2392.0020.0005] # ARABIC MATHEMATICAL TAILED HAH -1EE67 ; [.2392.0020.0005] # ARABIC MATHEMATICAL STRETCHED HAH -1EE87 ; [.2392.0020.0005] # ARABIC MATHEMATICAL LOOPED HAH -1EEA7 ; [.2392.0020.0005] # ARABIC MATHEMATICAL DOUBLE-STRUCK HAH -FEA3 ; [.2392.0020.0017] # ARABIC LETTER HAH INITIAL FORM -FEA4 ; [.2392.0020.0018] # ARABIC LETTER HAH MEDIAL FORM -FEA2 ; [.2392.0020.0019] # ARABIC LETTER HAH FINAL FORM -FEA1 ; [.2392.0020.001A] # ARABIC LETTER HAH ISOLATED FORM -FCA9 ; [.2392.0020.0017][.238B.0020.0017] # ARABIC LIGATURE HAH WITH JEEM INITIAL FORM -FC17 ; [.2392.0020.001A][.238B.0020.001A] # ARABIC LIGATURE HAH WITH JEEM ISOLATED FORM -FDBF ; [.2392.0020.0019][.238B.0020.0019][.242C.0020.0019] # ARABIC LIGATURE HAH WITH JEEM WITH YEH FINAL FORM -FCAA ; [.2392.0020.0017][.2409.0020.0017] # ARABIC LIGATURE HAH WITH MEEM INITIAL FORM -FC18 ; [.2392.0020.001A][.2409.0020.001A] # ARABIC LIGATURE HAH WITH MEEM ISOLATED FORM -FD5B ; [.2392.0020.0019][.2409.0020.0019][.242B.0020.0019] # ARABIC LIGATURE HAH WITH MEEM WITH ALEF MAKSURA FINAL FORM -FD5A ; [.2392.0020.0019][.2409.0020.0019][.242C.0020.0019] # ARABIC LIGATURE HAH WITH MEEM WITH YEH FINAL FORM -FD1B ; [.2392.0020.0019][.242B.0020.0019] # ARABIC LIGATURE HAH WITH ALEF MAKSURA FINAL FORM -FCFF ; [.2392.0020.001A][.242B.0020.001A] # ARABIC LIGATURE HAH WITH ALEF MAKSURA ISOLATED FORM -FD1C ; [.2392.0020.0019][.242C.0020.0019] # ARABIC LIGATURE HAH WITH YEH FINAL FORM -FD00 ; [.2392.0020.001A][.242C.0020.001A] # ARABIC LIGATURE HAH WITH YEH ISOLATED FORM -062E ; [.2393.0020.0002] # ARABIC LETTER KHAH -1EE17 ; [.2393.0020.0005] # ARABIC MATHEMATICAL KHAH -1EE37 ; [.2393.0020.0005] # ARABIC MATHEMATICAL INITIAL KHAH -1EE57 ; [.2393.0020.0005] # ARABIC MATHEMATICAL TAILED KHAH -1EE77 ; [.2393.0020.0005] # ARABIC MATHEMATICAL STRETCHED KHAH -1EE97 ; [.2393.0020.0005] # ARABIC MATHEMATICAL LOOPED KHAH -1EEB7 ; [.2393.0020.0005] # ARABIC MATHEMATICAL DOUBLE-STRUCK KHAH -FEA7 ; [.2393.0020.0017] # ARABIC LETTER KHAH INITIAL FORM -FEA8 ; [.2393.0020.0018] # ARABIC LETTER KHAH MEDIAL FORM -FEA6 ; [.2393.0020.0019] # ARABIC LETTER KHAH FINAL FORM -FEA5 ; [.2393.0020.001A] # ARABIC LETTER KHAH ISOLATED FORM -FCAB ; [.2393.0020.0017][.238B.0020.0017] # ARABIC LIGATURE KHAH WITH JEEM INITIAL FORM -FC19 ; [.2393.0020.001A][.238B.0020.001A] # ARABIC LIGATURE KHAH WITH JEEM ISOLATED FORM -FC1A ; [.2393.0020.001A][.2392.0020.001A] # ARABIC LIGATURE KHAH WITH HAH ISOLATED FORM -FCAC ; [.2393.0020.0017][.2409.0020.0017] # ARABIC LIGATURE KHAH WITH MEEM INITIAL FORM -FC1B ; [.2393.0020.001A][.2409.0020.001A] # ARABIC LIGATURE KHAH WITH MEEM ISOLATED FORM -FD1F ; [.2393.0020.0019][.242B.0020.0019] # ARABIC LIGATURE KHAH WITH ALEF MAKSURA FINAL FORM -FD03 ; [.2393.0020.001A][.242B.0020.001A] # ARABIC LIGATURE KHAH WITH ALEF MAKSURA ISOLATED FORM -FD20 ; [.2393.0020.0019][.242C.0020.0019] # ARABIC LIGATURE KHAH WITH YEH FINAL FORM -FD04 ; [.2393.0020.001A][.242C.0020.001A] # ARABIC LIGATURE KHAH WITH YEH ISOLATED FORM -0681 ; [.2394.0020.0002] # ARABIC LETTER HAH WITH HAMZA ABOVE -0682 ; [.2395.0020.0002] # ARABIC LETTER HAH WITH TWO DOTS VERTICAL ABOVE -0685 ; [.2396.0020.0002] # ARABIC LETTER HAH WITH THREE DOTS ABOVE -0757 ; [.2397.0020.0002] # ARABIC LETTER HAH WITH TWO DOTS ABOVE -0758 ; [.2398.0020.0002] # ARABIC LETTER HAH WITH THREE DOTS POINTING UPWARDS BELOW -076E ; [.2399.0020.0002] # ARABIC LETTER HAH WITH SMALL ARABIC LETTER TAH BELOW -076F ; [.239A.0020.0002] # ARABIC LETTER HAH WITH SMALL ARABIC LETTER TAH AND TWO DOTS -0772 ; [.239B.0020.0002] # ARABIC LETTER HAH WITH SMALL ARABIC LETTER TAH ABOVE -077C ; [.239C.0020.0002] # ARABIC LETTER HAH WITH EXTENDED ARABIC-INDIC DIGIT FOUR BELOW -062F ; [.239D.0020.0002] # ARABIC LETTER DAL -1EE03 ; [.239D.0020.0005] # ARABIC MATHEMATICAL DAL -1EE83 ; [.239D.0020.0005] # ARABIC MATHEMATICAL LOOPED DAL -1EEA3 ; [.239D.0020.0005] # ARABIC MATHEMATICAL DOUBLE-STRUCK DAL -FEAA ; [.239D.0020.0019] # ARABIC LETTER DAL FINAL FORM -FEA9 ; [.239D.0020.001A] # ARABIC LETTER DAL ISOLATED FORM -0630 ; [.239E.0020.0002] # ARABIC LETTER THAL -1EE18 ; [.239E.0020.0005] # ARABIC MATHEMATICAL THAL -1EE98 ; [.239E.0020.0005] # ARABIC MATHEMATICAL LOOPED THAL -1EEB8 ; [.239E.0020.0005] # ARABIC MATHEMATICAL DOUBLE-STRUCK THAL -FEAC ; [.239E.0020.0019] # ARABIC LETTER THAL FINAL FORM -FEAB ; [.239E.0020.001A] # ARABIC LETTER THAL ISOLATED FORM -FC5B ; [.239E.0020.001A][.0000.0098.001A] # ARABIC LIGATURE THAL WITH SUPERSCRIPT ALEF ISOLATED FORM -0688 ; [.239F.0020.0002] # ARABIC LETTER DDAL -FB89 ; [.239F.0020.0019] # ARABIC LETTER DDAL FINAL FORM -FB88 ; [.239F.0020.001A] # ARABIC LETTER DDAL ISOLATED FORM -0689 ; [.23A0.0020.0002] # ARABIC LETTER DAL WITH RING -068A ; [.23A1.0020.0002] # ARABIC LETTER DAL WITH DOT BELOW -068B ; [.23A2.0020.0002] # ARABIC LETTER DAL WITH DOT BELOW AND SMALL TAH -068C ; [.23A3.0020.0002] # ARABIC LETTER DAHAL -FB85 ; [.23A3.0020.0019] # ARABIC LETTER DAHAL FINAL FORM -FB84 ; [.23A3.0020.001A] # ARABIC LETTER DAHAL ISOLATED FORM -068D ; [.23A4.0020.0002] # ARABIC LETTER DDAHAL -FB83 ; [.23A4.0020.0019] # ARABIC LETTER DDAHAL FINAL FORM -FB82 ; [.23A4.0020.001A] # ARABIC LETTER DDAHAL ISOLATED FORM -08AE ; [.23A5.0020.0002] # ARABIC LETTER DAL WITH THREE DOTS BELOW -068E ; [.23A6.0020.0002] # ARABIC LETTER DUL -FB87 ; [.23A6.0020.0019] # ARABIC LETTER DUL FINAL FORM -FB86 ; [.23A6.0020.001A] # ARABIC LETTER DUL ISOLATED FORM -068F ; [.23A7.0020.0002] # ARABIC LETTER DAL WITH THREE DOTS ABOVE DOWNWARDS -0690 ; [.23A8.0020.0002] # ARABIC LETTER DAL WITH FOUR DOTS ABOVE -06EE ; [.23A9.0020.0002] # ARABIC LETTER DAL WITH INVERTED V -0759 ; [.23AA.0020.0002] # ARABIC LETTER DAL WITH TWO DOTS VERTICALLY BELOW AND SMALL TAH -075A ; [.23AB.0020.0002] # ARABIC LETTER DAL WITH INVERTED SMALL V BELOW -0631 ; [.23AC.0020.0002] # ARABIC LETTER REH -1EE13 ; [.23AC.0020.0005] # ARABIC MATHEMATICAL REH -1EE93 ; [.23AC.0020.0005] # ARABIC MATHEMATICAL LOOPED REH -1EEB3 ; [.23AC.0020.0005] # ARABIC MATHEMATICAL DOUBLE-STRUCK REH -FEAE ; [.23AC.0020.0019] # ARABIC LETTER REH FINAL FORM -FEAD ; [.23AC.0020.001A] # ARABIC LETTER REH ISOLATED FORM -FC5C ; [.23AC.0020.001A][.0000.0098.001A] # ARABIC LIGATURE REH WITH SUPERSCRIPT ALEF ISOLATED FORM -FDF6 ; [.23AC.0020.001A][.23BF.0020.001A][.241D.0020.001A][.2402.0020.001A] # ARABIC LIGATURE RASOUL ISOLATED FORM -FDFC ; [.23AC.0020.001A][.242D.0020.001A][.2371.0020.001A][.2402.0020.001A] # RIAL SIGN -0632 ; [.23AD.0020.0002] # ARABIC LETTER ZAIN -1EE06 ; [.23AD.0020.0005] # ARABIC MATHEMATICAL ZAIN -1EE86 ; [.23AD.0020.0005] # ARABIC MATHEMATICAL LOOPED ZAIN -1EEA6 ; [.23AD.0020.0005] # ARABIC MATHEMATICAL DOUBLE-STRUCK ZAIN -FEB0 ; [.23AD.0020.0019] # ARABIC LETTER ZAIN FINAL FORM -FEAF ; [.23AD.0020.001A] # ARABIC LETTER ZAIN ISOLATED FORM -0691 ; [.23AE.0020.0002] # ARABIC LETTER RREH -FB8D ; [.23AE.0020.0019] # ARABIC LETTER RREH FINAL FORM -FB8C ; [.23AE.0020.001A] # ARABIC LETTER RREH ISOLATED FORM -0692 ; [.23AF.0020.0002] # ARABIC LETTER REH WITH SMALL V -0693 ; [.23B0.0020.0002] # ARABIC LETTER REH WITH RING -0694 ; [.23B1.0020.0002] # ARABIC LETTER REH WITH DOT BELOW -0695 ; [.23B2.0020.0002] # ARABIC LETTER REH WITH SMALL V BELOW -0696 ; [.23B3.0020.0002] # ARABIC LETTER REH WITH DOT BELOW AND DOT ABOVE -0697 ; [.23B4.0020.0002] # ARABIC LETTER REH WITH TWO DOTS ABOVE -0698 ; [.23B5.0020.0002] # ARABIC LETTER JEH -FB8B ; [.23B5.0020.0019] # ARABIC LETTER JEH FINAL FORM -FB8A ; [.23B5.0020.001A] # ARABIC LETTER JEH ISOLATED FORM -0699 ; [.23B6.0020.0002] # ARABIC LETTER REH WITH FOUR DOTS ABOVE -06EF ; [.23B7.0020.0002] # ARABIC LETTER REH WITH INVERTED V -075B ; [.23B8.0020.0002] # ARABIC LETTER REH WITH STROKE -076B ; [.23B9.0020.0002] # ARABIC LETTER REH WITH TWO DOTS VERTICALLY ABOVE -076C ; [.23BA.0020.0002] # ARABIC LETTER REH WITH HAMZA ABOVE -0771 ; [.23BB.0020.0002] # ARABIC LETTER REH WITH SMALL ARABIC LETTER TAH AND TWO DOTS -08AA ; [.23BC.0020.0002] # ARABIC LETTER REH WITH LOOP -08B2 ; [.23BD.0020.0002] # ARABIC LETTER ZAIN WITH INVERTED V ABOVE -08B9 ; [.23BE.0020.0002] # ARABIC LETTER REH WITH SMALL NOON ABOVE -0633 ; [.23BF.0020.0002] # ARABIC LETTER SEEN -1EE0E ; [.23BF.0020.0005] # ARABIC MATHEMATICAL SEEN -1EE2E ; [.23BF.0020.0005] # ARABIC MATHEMATICAL INITIAL SEEN -1EE4E ; [.23BF.0020.0005] # ARABIC MATHEMATICAL TAILED SEEN -1EE6E ; [.23BF.0020.0005] # ARABIC MATHEMATICAL STRETCHED SEEN -1EE8E ; [.23BF.0020.0005] # ARABIC MATHEMATICAL LOOPED SEEN -1EEAE ; [.23BF.0020.0005] # ARABIC MATHEMATICAL DOUBLE-STRUCK SEEN -FEB3 ; [.23BF.0020.0017] # ARABIC LETTER SEEN INITIAL FORM -FEB4 ; [.23BF.0020.0018] # ARABIC LETTER SEEN MEDIAL FORM -FEB2 ; [.23BF.0020.0019] # ARABIC LETTER SEEN FINAL FORM -FEB1 ; [.23BF.0020.001A] # ARABIC LETTER SEEN ISOLATED FORM -FCAD ; [.23BF.0020.0017][.238B.0020.0017] # ARABIC LIGATURE SEEN WITH JEEM INITIAL FORM -FD34 ; [.23BF.0020.0018][.238B.0020.0018] # ARABIC LIGATURE SEEN WITH JEEM MEDIAL FORM -FC1C ; [.23BF.0020.001A][.238B.0020.001A] # ARABIC LIGATURE SEEN WITH JEEM ISOLATED FORM -FD5D ; [.23BF.0020.0017][.238B.0020.0017][.2392.0020.0017] # ARABIC LIGATURE SEEN WITH JEEM WITH HAH INITIAL FORM -FD5E ; [.23BF.0020.0019][.238B.0020.0019][.242B.0020.0019] # ARABIC LIGATURE SEEN WITH JEEM WITH ALEF MAKSURA FINAL FORM -FCAE ; [.23BF.0020.0017][.2392.0020.0017] # ARABIC LIGATURE SEEN WITH HAH INITIAL FORM -FD35 ; [.23BF.0020.0018][.2392.0020.0018] # ARABIC LIGATURE SEEN WITH HAH MEDIAL FORM -FC1D ; [.23BF.0020.001A][.2392.0020.001A] # ARABIC LIGATURE SEEN WITH HAH ISOLATED FORM -FD5C ; [.23BF.0020.0017][.2392.0020.0017][.238B.0020.0017] # ARABIC LIGATURE SEEN WITH HAH WITH JEEM INITIAL FORM -FCAF ; [.23BF.0020.0017][.2393.0020.0017] # ARABIC LIGATURE SEEN WITH KHAH INITIAL FORM -FD36 ; [.23BF.0020.0018][.2393.0020.0018] # ARABIC LIGATURE SEEN WITH KHAH MEDIAL FORM -FC1E ; [.23BF.0020.001A][.2393.0020.001A] # ARABIC LIGATURE SEEN WITH KHAH ISOLATED FORM -FDA8 ; [.23BF.0020.0019][.2393.0020.0019][.242B.0020.0019] # ARABIC LIGATURE SEEN WITH KHAH WITH ALEF MAKSURA FINAL FORM -FDC6 ; [.23BF.0020.0019][.2393.0020.0019][.242C.0020.0019] # ARABIC LIGATURE SEEN WITH KHAH WITH YEH FINAL FORM -FD2A ; [.23BF.0020.0019][.23AC.0020.0019] # ARABIC LIGATURE SEEN WITH REH FINAL FORM -FD0E ; [.23BF.0020.001A][.23AC.0020.001A] # ARABIC LIGATURE SEEN WITH REH ISOLATED FORM -FCB0 ; [.23BF.0020.0017][.2409.0020.0017] # ARABIC LIGATURE SEEN WITH MEEM INITIAL FORM -FCE7 ; [.23BF.0020.0018][.2409.0020.0018] # ARABIC LIGATURE SEEN WITH MEEM MEDIAL FORM -FC1F ; [.23BF.0020.001A][.2409.0020.001A] # ARABIC LIGATURE SEEN WITH MEEM ISOLATED FORM -FD61 ; [.23BF.0020.0017][.2409.0020.0017][.238B.0020.0017] # ARABIC LIGATURE SEEN WITH MEEM WITH JEEM INITIAL FORM -FD60 ; [.23BF.0020.0017][.2409.0020.0017][.2392.0020.0017] # ARABIC LIGATURE SEEN WITH MEEM WITH HAH INITIAL FORM -FD5F ; [.23BF.0020.0019][.2409.0020.0019][.2392.0020.0019] # ARABIC LIGATURE SEEN WITH MEEM WITH HAH FINAL FORM -FD63 ; [.23BF.0020.0017][.2409.0020.0017][.2409.0020.0017] # ARABIC LIGATURE SEEN WITH MEEM WITH MEEM INITIAL FORM -FD62 ; [.23BF.0020.0019][.2409.0020.0019][.2409.0020.0019] # ARABIC LIGATURE SEEN WITH MEEM WITH MEEM FINAL FORM -FD31 ; [.23BF.0020.0017][.2417.0020.0017] # ARABIC LIGATURE SEEN WITH HEH INITIAL FORM -FCE8 ; [.23BF.0020.0018][.2417.0020.0018] # ARABIC LIGATURE SEEN WITH HEH MEDIAL FORM -FD17 ; [.23BF.0020.0019][.242B.0020.0019] # ARABIC LIGATURE SEEN WITH ALEF MAKSURA FINAL FORM -FCFB ; [.23BF.0020.001A][.242B.0020.001A] # ARABIC LIGATURE SEEN WITH ALEF MAKSURA ISOLATED FORM -FD18 ; [.23BF.0020.0019][.242C.0020.0019] # ARABIC LIGATURE SEEN WITH YEH FINAL FORM -FCFC ; [.23BF.0020.001A][.242C.0020.001A] # ARABIC LIGATURE SEEN WITH YEH ISOLATED FORM -0634 ; [.23C0.0020.0002] # ARABIC LETTER SHEEN -1EE14 ; [.23C0.0020.0005] # ARABIC MATHEMATICAL SHEEN -1EE34 ; [.23C0.0020.0005] # ARABIC MATHEMATICAL INITIAL SHEEN -1EE54 ; [.23C0.0020.0005] # ARABIC MATHEMATICAL TAILED SHEEN -1EE74 ; [.23C0.0020.0005] # ARABIC MATHEMATICAL STRETCHED SHEEN -1EE94 ; [.23C0.0020.0005] # ARABIC MATHEMATICAL LOOPED SHEEN -1EEB4 ; [.23C0.0020.0005] # ARABIC MATHEMATICAL DOUBLE-STRUCK SHEEN -FEB7 ; [.23C0.0020.0017] # ARABIC LETTER SHEEN INITIAL FORM -FEB8 ; [.23C0.0020.0018] # ARABIC LETTER SHEEN MEDIAL FORM -FEB6 ; [.23C0.0020.0019] # ARABIC LETTER SHEEN FINAL FORM -FEB5 ; [.23C0.0020.001A] # ARABIC LETTER SHEEN ISOLATED FORM -FD2D ; [.23C0.0020.0017][.238B.0020.0017] # ARABIC LIGATURE SHEEN WITH JEEM INITIAL FORM -FD37 ; [.23C0.0020.0018][.238B.0020.0018] # ARABIC LIGATURE SHEEN WITH JEEM MEDIAL FORM -FD25 ; [.23C0.0020.0019][.238B.0020.0019] # ARABIC LIGATURE SHEEN WITH JEEM FINAL FORM -FD09 ; [.23C0.0020.001A][.238B.0020.001A] # ARABIC LIGATURE SHEEN WITH JEEM ISOLATED FORM -FD69 ; [.23C0.0020.0019][.238B.0020.0019][.242C.0020.0019] # ARABIC LIGATURE SHEEN WITH JEEM WITH YEH FINAL FORM -FD2E ; [.23C0.0020.0017][.2392.0020.0017] # ARABIC LIGATURE SHEEN WITH HAH INITIAL FORM -FD38 ; [.23C0.0020.0018][.2392.0020.0018] # ARABIC LIGATURE SHEEN WITH HAH MEDIAL FORM -FD26 ; [.23C0.0020.0019][.2392.0020.0019] # ARABIC LIGATURE SHEEN WITH HAH FINAL FORM -FD0A ; [.23C0.0020.001A][.2392.0020.001A] # ARABIC LIGATURE SHEEN WITH HAH ISOLATED FORM -FD68 ; [.23C0.0020.0017][.2392.0020.0017][.2409.0020.0017] # ARABIC LIGATURE SHEEN WITH HAH WITH MEEM INITIAL FORM -FD67 ; [.23C0.0020.0019][.2392.0020.0019][.2409.0020.0019] # ARABIC LIGATURE SHEEN WITH HAH WITH MEEM FINAL FORM -FDAA ; [.23C0.0020.0019][.2392.0020.0019][.242C.0020.0019] # ARABIC LIGATURE SHEEN WITH HAH WITH YEH FINAL FORM -FD2F ; [.23C0.0020.0017][.2393.0020.0017] # ARABIC LIGATURE SHEEN WITH KHAH INITIAL FORM -FD39 ; [.23C0.0020.0018][.2393.0020.0018] # ARABIC LIGATURE SHEEN WITH KHAH MEDIAL FORM -FD27 ; [.23C0.0020.0019][.2393.0020.0019] # ARABIC LIGATURE SHEEN WITH KHAH FINAL FORM -FD0B ; [.23C0.0020.001A][.2393.0020.001A] # ARABIC LIGATURE SHEEN WITH KHAH ISOLATED FORM -FD29 ; [.23C0.0020.0019][.23AC.0020.0019] # ARABIC LIGATURE SHEEN WITH REH FINAL FORM -FD0D ; [.23C0.0020.001A][.23AC.0020.001A] # ARABIC LIGATURE SHEEN WITH REH ISOLATED FORM -FD30 ; [.23C0.0020.0017][.2409.0020.0017] # ARABIC LIGATURE SHEEN WITH MEEM INITIAL FORM -FCE9 ; [.23C0.0020.0018][.2409.0020.0018] # ARABIC LIGATURE SHEEN WITH MEEM MEDIAL FORM -FD28 ; [.23C0.0020.0019][.2409.0020.0019] # ARABIC LIGATURE SHEEN WITH MEEM FINAL FORM -FD0C ; [.23C0.0020.001A][.2409.0020.001A] # ARABIC LIGATURE SHEEN WITH MEEM ISOLATED FORM -FD6B ; [.23C0.0020.0017][.2409.0020.0017][.2393.0020.0017] # ARABIC LIGATURE SHEEN WITH MEEM WITH KHAH INITIAL FORM -FD6A ; [.23C0.0020.0019][.2409.0020.0019][.2393.0020.0019] # ARABIC LIGATURE SHEEN WITH MEEM WITH KHAH FINAL FORM -FD6D ; [.23C0.0020.0017][.2409.0020.0017][.2409.0020.0017] # ARABIC LIGATURE SHEEN WITH MEEM WITH MEEM INITIAL FORM -FD6C ; [.23C0.0020.0019][.2409.0020.0019][.2409.0020.0019] # ARABIC LIGATURE SHEEN WITH MEEM WITH MEEM FINAL FORM -FD32 ; [.23C0.0020.0017][.2417.0020.0017] # ARABIC LIGATURE SHEEN WITH HEH INITIAL FORM -FCEA ; [.23C0.0020.0018][.2417.0020.0018] # ARABIC LIGATURE SHEEN WITH HEH MEDIAL FORM -FD19 ; [.23C0.0020.0019][.242B.0020.0019] # ARABIC LIGATURE SHEEN WITH ALEF MAKSURA FINAL FORM -FCFD ; [.23C0.0020.001A][.242B.0020.001A] # ARABIC LIGATURE SHEEN WITH ALEF MAKSURA ISOLATED FORM -FD1A ; [.23C0.0020.0019][.242C.0020.0019] # ARABIC LIGATURE SHEEN WITH YEH FINAL FORM -FCFE ; [.23C0.0020.001A][.242C.0020.001A] # ARABIC LIGATURE SHEEN WITH YEH ISOLATED FORM -069A ; [.23C1.0020.0002] # ARABIC LETTER SEEN WITH DOT BELOW AND DOT ABOVE -069B ; [.23C2.0020.0002] # ARABIC LETTER SEEN WITH THREE DOTS BELOW -069C ; [.23C3.0020.0002] # ARABIC LETTER SEEN WITH THREE DOTS BELOW AND THREE DOTS ABOVE -06FA ; [.23C4.0020.0002] # ARABIC LETTER SHEEN WITH DOT BELOW -075C ; [.23C5.0020.0002] # ARABIC LETTER SEEN WITH FOUR DOTS ABOVE -076D ; [.23C6.0020.0002] # ARABIC LETTER SEEN WITH TWO DOTS VERTICALLY ABOVE -0770 ; [.23C7.0020.0002] # ARABIC LETTER SEEN WITH SMALL ARABIC LETTER TAH AND TWO DOTS -077D ; [.23C8.0020.0002] # ARABIC LETTER SEEN WITH EXTENDED ARABIC-INDIC DIGIT FOUR ABOVE -077E ; [.23C9.0020.0002] # ARABIC LETTER SEEN WITH INVERTED V -0635 ; [.23CA.0020.0002] # ARABIC LETTER SAD -1EE11 ; [.23CA.0020.0005] # ARABIC MATHEMATICAL SAD -1EE31 ; [.23CA.0020.0005] # ARABIC MATHEMATICAL INITIAL SAD -1EE51 ; [.23CA.0020.0005] # ARABIC MATHEMATICAL TAILED SAD -1EE71 ; [.23CA.0020.0005] # ARABIC MATHEMATICAL STRETCHED SAD -1EE91 ; [.23CA.0020.0005] # ARABIC MATHEMATICAL LOOPED SAD -1EEB1 ; [.23CA.0020.0005] # ARABIC MATHEMATICAL DOUBLE-STRUCK SAD -FEBB ; [.23CA.0020.0017] # ARABIC LETTER SAD INITIAL FORM -FEBC ; [.23CA.0020.0018] # ARABIC LETTER SAD MEDIAL FORM -FEBA ; [.23CA.0020.0019] # ARABIC LETTER SAD FINAL FORM -FEB9 ; [.23CA.0020.001A] # ARABIC LETTER SAD ISOLATED FORM -FCB1 ; [.23CA.0020.0017][.2392.0020.0017] # ARABIC LIGATURE SAD WITH HAH INITIAL FORM -FC20 ; [.23CA.0020.001A][.2392.0020.001A] # ARABIC LIGATURE SAD WITH HAH ISOLATED FORM -FD65 ; [.23CA.0020.0017][.2392.0020.0017][.2392.0020.0017] # ARABIC LIGATURE SAD WITH HAH WITH HAH INITIAL FORM -FD64 ; [.23CA.0020.0019][.2392.0020.0019][.2392.0020.0019] # ARABIC LIGATURE SAD WITH HAH WITH HAH FINAL FORM -FDA9 ; [.23CA.0020.0019][.2392.0020.0019][.242C.0020.0019] # ARABIC LIGATURE SAD WITH HAH WITH YEH FINAL FORM -FCB2 ; [.23CA.0020.0017][.2393.0020.0017] # ARABIC LIGATURE SAD WITH KHAH INITIAL FORM -FD2B ; [.23CA.0020.0019][.23AC.0020.0019] # ARABIC LIGATURE SAD WITH REH FINAL FORM -FD0F ; [.23CA.0020.001A][.23AC.0020.001A] # ARABIC LIGATURE SAD WITH REH ISOLATED FORM -FDF5 ; [.23CA.0020.001A][.2402.0020.001A][.23D4.0020.001A][.2409.0020.001A] # ARABIC LIGATURE SALAM ISOLATED FORM -FDF9 ; [.23CA.0020.001A][.2402.0020.001A][.242B.0020.001A] # ARABIC LIGATURE SALLA ISOLATED FORM -FDFA ; [.23CA.0020.001A][.2402.0020.001A][.242B.0020.001A][*0209.0020.001A][.2371.0020.001A][.2402.0020.001A][.2402.0020.001A][.2417.0020.001A][*0209.0020.001A][.23D4.0020.001A][.2402.0020.001A][.242C.0020.001A][.2417.0020.001A][*0209.0020.001A][.241D.0020.001A][.23BF.0020.001A][.2402.0020.001A][.2409.0020.001A] # ARABIC LIGATURE SALLALLAHOU ALAYHE WASALLAM -FDF0 ; [.23CA.0020.001A][.2402.0020.001A][.243A.0020.001A] # ARABIC LIGATURE SALLA USED AS KORANIC STOP SIGN ISOLATED FORM -FCB3 ; [.23CA.0020.0017][.2409.0020.0017] # ARABIC LIGATURE SAD WITH MEEM INITIAL FORM -FC21 ; [.23CA.0020.001A][.2409.0020.001A] # ARABIC LIGATURE SAD WITH MEEM ISOLATED FORM -FDC5 ; [.23CA.0020.0017][.2409.0020.0017][.2409.0020.0017] # ARABIC LIGATURE SAD WITH MEEM WITH MEEM INITIAL FORM -FD66 ; [.23CA.0020.0019][.2409.0020.0019][.2409.0020.0019] # ARABIC LIGATURE SAD WITH MEEM WITH MEEM FINAL FORM -FD21 ; [.23CA.0020.0019][.242B.0020.0019] # ARABIC LIGATURE SAD WITH ALEF MAKSURA FINAL FORM -FD05 ; [.23CA.0020.001A][.242B.0020.001A] # ARABIC LIGATURE SAD WITH ALEF MAKSURA ISOLATED FORM -FD22 ; [.23CA.0020.0019][.242C.0020.0019] # ARABIC LIGATURE SAD WITH YEH FINAL FORM -FD06 ; [.23CA.0020.001A][.242C.0020.001A] # ARABIC LIGATURE SAD WITH YEH ISOLATED FORM -0636 ; [.23CB.0020.0002] # ARABIC LETTER DAD -1EE19 ; [.23CB.0020.0005] # ARABIC MATHEMATICAL DAD -1EE39 ; [.23CB.0020.0005] # ARABIC MATHEMATICAL INITIAL DAD -1EE59 ; [.23CB.0020.0005] # ARABIC MATHEMATICAL TAILED DAD -1EE79 ; [.23CB.0020.0005] # ARABIC MATHEMATICAL STRETCHED DAD -1EE99 ; [.23CB.0020.0005] # ARABIC MATHEMATICAL LOOPED DAD -1EEB9 ; [.23CB.0020.0005] # ARABIC MATHEMATICAL DOUBLE-STRUCK DAD -FEBF ; [.23CB.0020.0017] # ARABIC LETTER DAD INITIAL FORM -FEC0 ; [.23CB.0020.0018] # ARABIC LETTER DAD MEDIAL FORM -FEBE ; [.23CB.0020.0019] # ARABIC LETTER DAD FINAL FORM -FEBD ; [.23CB.0020.001A] # ARABIC LETTER DAD ISOLATED FORM -FCB4 ; [.23CB.0020.0017][.238B.0020.0017] # ARABIC LIGATURE DAD WITH JEEM INITIAL FORM -FC22 ; [.23CB.0020.001A][.238B.0020.001A] # ARABIC LIGATURE DAD WITH JEEM ISOLATED FORM -FCB5 ; [.23CB.0020.0017][.2392.0020.0017] # ARABIC LIGATURE DAD WITH HAH INITIAL FORM -FC23 ; [.23CB.0020.001A][.2392.0020.001A] # ARABIC LIGATURE DAD WITH HAH ISOLATED FORM -FD6E ; [.23CB.0020.0019][.2392.0020.0019][.242B.0020.0019] # ARABIC LIGATURE DAD WITH HAH WITH ALEF MAKSURA FINAL FORM -FDAB ; [.23CB.0020.0019][.2392.0020.0019][.242C.0020.0019] # ARABIC LIGATURE DAD WITH HAH WITH YEH FINAL FORM -FCB6 ; [.23CB.0020.0017][.2393.0020.0017] # ARABIC LIGATURE DAD WITH KHAH INITIAL FORM -FC24 ; [.23CB.0020.001A][.2393.0020.001A] # ARABIC LIGATURE DAD WITH KHAH ISOLATED FORM -FD70 ; [.23CB.0020.0017][.2393.0020.0017][.2409.0020.0017] # ARABIC LIGATURE DAD WITH KHAH WITH MEEM INITIAL FORM -FD6F ; [.23CB.0020.0019][.2393.0020.0019][.2409.0020.0019] # ARABIC LIGATURE DAD WITH KHAH WITH MEEM FINAL FORM -FD2C ; [.23CB.0020.0019][.23AC.0020.0019] # ARABIC LIGATURE DAD WITH REH FINAL FORM -FD10 ; [.23CB.0020.001A][.23AC.0020.001A] # ARABIC LIGATURE DAD WITH REH ISOLATED FORM -FCB7 ; [.23CB.0020.0017][.2409.0020.0017] # ARABIC LIGATURE DAD WITH MEEM INITIAL FORM -FC25 ; [.23CB.0020.001A][.2409.0020.001A] # ARABIC LIGATURE DAD WITH MEEM ISOLATED FORM -FD23 ; [.23CB.0020.0019][.242B.0020.0019] # ARABIC LIGATURE DAD WITH ALEF MAKSURA FINAL FORM -FD07 ; [.23CB.0020.001A][.242B.0020.001A] # ARABIC LIGATURE DAD WITH ALEF MAKSURA ISOLATED FORM -FD24 ; [.23CB.0020.0019][.242C.0020.0019] # ARABIC LIGATURE DAD WITH YEH FINAL FORM -FD08 ; [.23CB.0020.001A][.242C.0020.001A] # ARABIC LIGATURE DAD WITH YEH ISOLATED FORM -069D ; [.23CC.0020.0002] # ARABIC LETTER SAD WITH TWO DOTS BELOW -08AF ; [.23CD.0020.0002] # ARABIC LETTER SAD WITH THREE DOTS BELOW -069E ; [.23CE.0020.0002] # ARABIC LETTER SAD WITH THREE DOTS ABOVE -06FB ; [.23CF.0020.0002] # ARABIC LETTER DAD WITH DOT BELOW -0637 ; [.23D0.0020.0002] # ARABIC LETTER TAH -1EE08 ; [.23D0.0020.0005] # ARABIC MATHEMATICAL TAH -1EE68 ; [.23D0.0020.0005] # ARABIC MATHEMATICAL STRETCHED TAH -1EE88 ; [.23D0.0020.0005] # ARABIC MATHEMATICAL LOOPED TAH -1EEA8 ; [.23D0.0020.0005] # ARABIC MATHEMATICAL DOUBLE-STRUCK TAH -FEC3 ; [.23D0.0020.0017] # ARABIC LETTER TAH INITIAL FORM -FEC4 ; [.23D0.0020.0018] # ARABIC LETTER TAH MEDIAL FORM -FEC2 ; [.23D0.0020.0019] # ARABIC LETTER TAH FINAL FORM -FEC1 ; [.23D0.0020.001A] # ARABIC LETTER TAH ISOLATED FORM -FCB8 ; [.23D0.0020.0017][.2392.0020.0017] # ARABIC LIGATURE TAH WITH HAH INITIAL FORM -FC26 ; [.23D0.0020.001A][.2392.0020.001A] # ARABIC LIGATURE TAH WITH HAH ISOLATED FORM -FD33 ; [.23D0.0020.0017][.2409.0020.0017] # ARABIC LIGATURE TAH WITH MEEM INITIAL FORM -FD3A ; [.23D0.0020.0018][.2409.0020.0018] # ARABIC LIGATURE TAH WITH MEEM MEDIAL FORM -FC27 ; [.23D0.0020.001A][.2409.0020.001A] # ARABIC LIGATURE TAH WITH MEEM ISOLATED FORM -FD72 ; [.23D0.0020.0017][.2409.0020.0017][.2392.0020.0017] # ARABIC LIGATURE TAH WITH MEEM WITH HAH INITIAL FORM -FD71 ; [.23D0.0020.0019][.2409.0020.0019][.2392.0020.0019] # ARABIC LIGATURE TAH WITH MEEM WITH HAH FINAL FORM -FD73 ; [.23D0.0020.0017][.2409.0020.0017][.2409.0020.0017] # ARABIC LIGATURE TAH WITH MEEM WITH MEEM INITIAL FORM -FD74 ; [.23D0.0020.0019][.2409.0020.0019][.242C.0020.0019] # ARABIC LIGATURE TAH WITH MEEM WITH YEH FINAL FORM -FD11 ; [.23D0.0020.0019][.242B.0020.0019] # ARABIC LIGATURE TAH WITH ALEF MAKSURA FINAL FORM -FCF5 ; [.23D0.0020.001A][.242B.0020.001A] # ARABIC LIGATURE TAH WITH ALEF MAKSURA ISOLATED FORM -FD12 ; [.23D0.0020.0019][.242C.0020.0019] # ARABIC LIGATURE TAH WITH YEH FINAL FORM -FCF6 ; [.23D0.0020.001A][.242C.0020.001A] # ARABIC LIGATURE TAH WITH YEH ISOLATED FORM -0638 ; [.23D1.0020.0002] # ARABIC LETTER ZAH -1EE1A ; [.23D1.0020.0005] # ARABIC MATHEMATICAL ZAH -1EE7A ; [.23D1.0020.0005] # ARABIC MATHEMATICAL STRETCHED ZAH -1EE9A ; [.23D1.0020.0005] # ARABIC MATHEMATICAL LOOPED ZAH -1EEBA ; [.23D1.0020.0005] # ARABIC MATHEMATICAL DOUBLE-STRUCK ZAH -FEC7 ; [.23D1.0020.0017] # ARABIC LETTER ZAH INITIAL FORM -FEC8 ; [.23D1.0020.0018] # ARABIC LETTER ZAH MEDIAL FORM -FEC6 ; [.23D1.0020.0019] # ARABIC LETTER ZAH FINAL FORM -FEC5 ; [.23D1.0020.001A] # ARABIC LETTER ZAH ISOLATED FORM -FCB9 ; [.23D1.0020.0017][.2409.0020.0017] # ARABIC LIGATURE ZAH WITH MEEM INITIAL FORM -FD3B ; [.23D1.0020.0018][.2409.0020.0018] # ARABIC LIGATURE ZAH WITH MEEM MEDIAL FORM -FC28 ; [.23D1.0020.001A][.2409.0020.001A] # ARABIC LIGATURE ZAH WITH MEEM ISOLATED FORM -069F ; [.23D2.0020.0002] # ARABIC LETTER TAH WITH THREE DOTS ABOVE -08A3 ; [.23D3.0020.0002] # ARABIC LETTER TAH WITH TWO DOTS ABOVE -0639 ; [.23D4.0020.0002] # ARABIC LETTER AIN -1EE0F ; [.23D4.0020.0005] # ARABIC MATHEMATICAL AIN -1EE2F ; [.23D4.0020.0005] # ARABIC MATHEMATICAL INITIAL AIN -1EE4F ; [.23D4.0020.0005] # ARABIC MATHEMATICAL TAILED AIN -1EE6F ; [.23D4.0020.0005] # ARABIC MATHEMATICAL STRETCHED AIN -1EE8F ; [.23D4.0020.0005] # ARABIC MATHEMATICAL LOOPED AIN -1EEAF ; [.23D4.0020.0005] # ARABIC MATHEMATICAL DOUBLE-STRUCK AIN -FECB ; [.23D4.0020.0017] # ARABIC LETTER AIN INITIAL FORM -FECC ; [.23D4.0020.0018] # ARABIC LETTER AIN MEDIAL FORM -FECA ; [.23D4.0020.0019] # ARABIC LETTER AIN FINAL FORM -FEC9 ; [.23D4.0020.001A] # ARABIC LETTER AIN ISOLATED FORM -FCBA ; [.23D4.0020.0017][.238B.0020.0017] # ARABIC LIGATURE AIN WITH JEEM INITIAL FORM -FC29 ; [.23D4.0020.001A][.238B.0020.001A] # ARABIC LIGATURE AIN WITH JEEM ISOLATED FORM -FDC4 ; [.23D4.0020.0017][.238B.0020.0017][.2409.0020.0017] # ARABIC LIGATURE AIN WITH JEEM WITH MEEM INITIAL FORM -FD75 ; [.23D4.0020.0019][.238B.0020.0019][.2409.0020.0019] # ARABIC LIGATURE AIN WITH JEEM WITH MEEM FINAL FORM -FDF7 ; [.23D4.0020.001A][.2402.0020.001A][.242C.0020.001A][.2417.0020.001A] # ARABIC LIGATURE ALAYHE ISOLATED FORM -FCBB ; [.23D4.0020.0017][.2409.0020.0017] # ARABIC LIGATURE AIN WITH MEEM INITIAL FORM -FC2A ; [.23D4.0020.001A][.2409.0020.001A] # ARABIC LIGATURE AIN WITH MEEM ISOLATED FORM -FD77 ; [.23D4.0020.0017][.2409.0020.0017][.2409.0020.0017] # ARABIC LIGATURE AIN WITH MEEM WITH MEEM INITIAL FORM -FD76 ; [.23D4.0020.0019][.2409.0020.0019][.2409.0020.0019] # ARABIC LIGATURE AIN WITH MEEM WITH MEEM FINAL FORM -FD78 ; [.23D4.0020.0019][.2409.0020.0019][.242B.0020.0019] # ARABIC LIGATURE AIN WITH MEEM WITH ALEF MAKSURA FINAL FORM -FDB6 ; [.23D4.0020.0019][.2409.0020.0019][.242C.0020.0019] # ARABIC LIGATURE AIN WITH MEEM WITH YEH FINAL FORM -FD13 ; [.23D4.0020.0019][.242B.0020.0019] # ARABIC LIGATURE AIN WITH ALEF MAKSURA FINAL FORM -FCF7 ; [.23D4.0020.001A][.242B.0020.001A] # ARABIC LIGATURE AIN WITH ALEF MAKSURA ISOLATED FORM -FD14 ; [.23D4.0020.0019][.242C.0020.0019] # ARABIC LIGATURE AIN WITH YEH FINAL FORM -FCF8 ; [.23D4.0020.001A][.242C.0020.001A] # ARABIC LIGATURE AIN WITH YEH ISOLATED FORM -063A ; [.23D5.0020.0002] # ARABIC LETTER GHAIN -1EE1B ; [.23D5.0020.0005] # ARABIC MATHEMATICAL GHAIN -1EE3B ; [.23D5.0020.0005] # ARABIC MATHEMATICAL INITIAL GHAIN -1EE5B ; [.23D5.0020.0005] # ARABIC MATHEMATICAL TAILED GHAIN -1EE7B ; [.23D5.0020.0005] # ARABIC MATHEMATICAL STRETCHED GHAIN -1EE9B ; [.23D5.0020.0005] # ARABIC MATHEMATICAL LOOPED GHAIN -1EEBB ; [.23D5.0020.0005] # ARABIC MATHEMATICAL DOUBLE-STRUCK GHAIN -FECF ; [.23D5.0020.0017] # ARABIC LETTER GHAIN INITIAL FORM -FED0 ; [.23D5.0020.0018] # ARABIC LETTER GHAIN MEDIAL FORM -FECE ; [.23D5.0020.0019] # ARABIC LETTER GHAIN FINAL FORM -FECD ; [.23D5.0020.001A] # ARABIC LETTER GHAIN ISOLATED FORM -FCBC ; [.23D5.0020.0017][.238B.0020.0017] # ARABIC LIGATURE GHAIN WITH JEEM INITIAL FORM -FC2B ; [.23D5.0020.001A][.238B.0020.001A] # ARABIC LIGATURE GHAIN WITH JEEM ISOLATED FORM -FCBD ; [.23D5.0020.0017][.2409.0020.0017] # ARABIC LIGATURE GHAIN WITH MEEM INITIAL FORM -FC2C ; [.23D5.0020.001A][.2409.0020.001A] # ARABIC LIGATURE GHAIN WITH MEEM ISOLATED FORM -FD79 ; [.23D5.0020.0019][.2409.0020.0019][.2409.0020.0019] # ARABIC LIGATURE GHAIN WITH MEEM WITH MEEM FINAL FORM -FD7B ; [.23D5.0020.0019][.2409.0020.0019][.242B.0020.0019] # ARABIC LIGATURE GHAIN WITH MEEM WITH ALEF MAKSURA FINAL FORM -FD7A ; [.23D5.0020.0019][.2409.0020.0019][.242C.0020.0019] # ARABIC LIGATURE GHAIN WITH MEEM WITH YEH FINAL FORM -FD15 ; [.23D5.0020.0019][.242B.0020.0019] # ARABIC LIGATURE GHAIN WITH ALEF MAKSURA FINAL FORM -FCF9 ; [.23D5.0020.001A][.242B.0020.001A] # ARABIC LIGATURE GHAIN WITH ALEF MAKSURA ISOLATED FORM -FD16 ; [.23D5.0020.0019][.242C.0020.0019] # ARABIC LIGATURE GHAIN WITH YEH FINAL FORM -FCFA ; [.23D5.0020.001A][.242C.0020.001A] # ARABIC LIGATURE GHAIN WITH YEH ISOLATED FORM -06A0 ; [.23D6.0020.0002] # ARABIC LETTER AIN WITH THREE DOTS ABOVE -06FC ; [.23D7.0020.0002] # ARABIC LETTER GHAIN WITH DOT BELOW -075D ; [.23D8.0020.0002] # ARABIC LETTER AIN WITH TWO DOTS ABOVE -075E ; [.23D9.0020.0002] # ARABIC LETTER AIN WITH THREE DOTS POINTING DOWNWARDS ABOVE -075F ; [.23DA.0020.0002] # ARABIC LETTER AIN WITH TWO DOTS VERTICALLY ABOVE -08B3 ; [.23DB.0020.0002] # ARABIC LETTER AIN WITH THREE DOTS BELOW -0641 ; [.23DC.0020.0002] # ARABIC LETTER FEH -1EE10 ; [.23DC.0020.0005] # ARABIC MATHEMATICAL FEH -1EE30 ; [.23DC.0020.0005] # ARABIC MATHEMATICAL INITIAL FEH -1EE70 ; [.23DC.0020.0005] # ARABIC MATHEMATICAL STRETCHED FEH -1EE90 ; [.23DC.0020.0005] # ARABIC MATHEMATICAL LOOPED FEH -1EEB0 ; [.23DC.0020.0005] # ARABIC MATHEMATICAL DOUBLE-STRUCK FEH -FED3 ; [.23DC.0020.0017] # ARABIC LETTER FEH INITIAL FORM -FED4 ; [.23DC.0020.0018] # ARABIC LETTER FEH MEDIAL FORM -FED2 ; [.23DC.0020.0019] # ARABIC LETTER FEH FINAL FORM -FED1 ; [.23DC.0020.001A] # ARABIC LETTER FEH ISOLATED FORM -FCBE ; [.23DC.0020.0017][.238B.0020.0017] # ARABIC LIGATURE FEH WITH JEEM INITIAL FORM -FC2D ; [.23DC.0020.001A][.238B.0020.001A] # ARABIC LIGATURE FEH WITH JEEM ISOLATED FORM -FCBF ; [.23DC.0020.0017][.2392.0020.0017] # ARABIC LIGATURE FEH WITH HAH INITIAL FORM -FC2E ; [.23DC.0020.001A][.2392.0020.001A] # ARABIC LIGATURE FEH WITH HAH ISOLATED FORM -FCC0 ; [.23DC.0020.0017][.2393.0020.0017] # ARABIC LIGATURE FEH WITH KHAH INITIAL FORM -FC2F ; [.23DC.0020.001A][.2393.0020.001A] # ARABIC LIGATURE FEH WITH KHAH ISOLATED FORM -FD7D ; [.23DC.0020.0017][.2393.0020.0017][.2409.0020.0017] # ARABIC LIGATURE FEH WITH KHAH WITH MEEM INITIAL FORM -FD7C ; [.23DC.0020.0019][.2393.0020.0019][.2409.0020.0019] # ARABIC LIGATURE FEH WITH KHAH WITH MEEM FINAL FORM -FCC1 ; [.23DC.0020.0017][.2409.0020.0017] # ARABIC LIGATURE FEH WITH MEEM INITIAL FORM -FC30 ; [.23DC.0020.001A][.2409.0020.001A] # ARABIC LIGATURE FEH WITH MEEM ISOLATED FORM -FDC1 ; [.23DC.0020.0019][.2409.0020.0019][.242C.0020.0019] # ARABIC LIGATURE FEH WITH MEEM WITH YEH FINAL FORM -FC7C ; [.23DC.0020.0019][.242B.0020.0019] # ARABIC LIGATURE FEH WITH ALEF MAKSURA FINAL FORM -FC31 ; [.23DC.0020.001A][.242B.0020.001A] # ARABIC LIGATURE FEH WITH ALEF MAKSURA ISOLATED FORM -FC7D ; [.23DC.0020.0019][.242C.0020.0019] # ARABIC LIGATURE FEH WITH YEH FINAL FORM -FC32 ; [.23DC.0020.001A][.242C.0020.001A] # ARABIC LIGATURE FEH WITH YEH ISOLATED FORM -06A1 ; [.23DD.0020.0002] # ARABIC LETTER DOTLESS FEH -1EE1E ; [.23DD.0020.0005] # ARABIC MATHEMATICAL DOTLESS FEH -1EE7E ; [.23DD.0020.0005] # ARABIC MATHEMATICAL STRETCHED DOTLESS FEH -06A2 ; [.23DE.0020.0002] # ARABIC LETTER FEH WITH DOT MOVED BELOW -08BB ; [.23DF.0020.0002] # ARABIC LETTER AFRICAN FEH -06A3 ; [.23E0.0020.0002] # ARABIC LETTER FEH WITH DOT BELOW -06A4 ; [.23E1.0020.0002] # ARABIC LETTER VEH -FB6C ; [.23E1.0020.0017] # ARABIC LETTER VEH INITIAL FORM -FB6D ; [.23E1.0020.0018] # ARABIC LETTER VEH MEDIAL FORM -FB6B ; [.23E1.0020.0019] # ARABIC LETTER VEH FINAL FORM -FB6A ; [.23E1.0020.001A] # ARABIC LETTER VEH ISOLATED FORM -08A4 ; [.23E2.0020.0002] # ARABIC LETTER FEH WITH DOT BELOW AND THREE DOTS ABOVE -06A5 ; [.23E3.0020.0002] # ARABIC LETTER FEH WITH THREE DOTS BELOW -06A6 ; [.23E4.0020.0002] # ARABIC LETTER PEHEH -FB70 ; [.23E4.0020.0017] # ARABIC LETTER PEHEH INITIAL FORM -FB71 ; [.23E4.0020.0018] # ARABIC LETTER PEHEH MEDIAL FORM -FB6F ; [.23E4.0020.0019] # ARABIC LETTER PEHEH FINAL FORM -FB6E ; [.23E4.0020.001A] # ARABIC LETTER PEHEH ISOLATED FORM -0760 ; [.23E5.0020.0002] # ARABIC LETTER FEH WITH TWO DOTS BELOW -0761 ; [.23E6.0020.0002] # ARABIC LETTER FEH WITH THREE DOTS POINTING UPWARDS BELOW -066F ; [.23E7.0020.0002] # ARABIC LETTER DOTLESS QAF -1EE1F ; [.23E7.0020.0005] # ARABIC MATHEMATICAL DOTLESS QAF -1EE5F ; [.23E7.0020.0005] # ARABIC MATHEMATICAL TAILED DOTLESS QAF -0642 ; [.23E8.0020.0002] # ARABIC LETTER QAF -1EE12 ; [.23E8.0020.0005] # ARABIC MATHEMATICAL QAF -1EE32 ; [.23E8.0020.0005] # ARABIC MATHEMATICAL INITIAL QAF -1EE52 ; [.23E8.0020.0005] # ARABIC MATHEMATICAL TAILED QAF -1EE72 ; [.23E8.0020.0005] # ARABIC MATHEMATICAL STRETCHED QAF -1EE92 ; [.23E8.0020.0005] # ARABIC MATHEMATICAL LOOPED QAF -1EEB2 ; [.23E8.0020.0005] # ARABIC MATHEMATICAL DOUBLE-STRUCK QAF -FED7 ; [.23E8.0020.0017] # ARABIC LETTER QAF INITIAL FORM -FED8 ; [.23E8.0020.0018] # ARABIC LETTER QAF MEDIAL FORM -FED6 ; [.23E8.0020.0019] # ARABIC LETTER QAF FINAL FORM -FED5 ; [.23E8.0020.001A] # ARABIC LETTER QAF ISOLATED FORM -FCC2 ; [.23E8.0020.0017][.2392.0020.0017] # ARABIC LIGATURE QAF WITH HAH INITIAL FORM -FC33 ; [.23E8.0020.001A][.2392.0020.001A] # ARABIC LIGATURE QAF WITH HAH ISOLATED FORM -FDF1 ; [.23E8.0020.001A][.2402.0020.001A][.243A.0020.001A] # ARABIC LIGATURE QALA USED AS KORANIC STOP SIGN ISOLATED FORM -FCC3 ; [.23E8.0020.0017][.2409.0020.0017] # ARABIC LIGATURE QAF WITH MEEM INITIAL FORM -FC34 ; [.23E8.0020.001A][.2409.0020.001A] # ARABIC LIGATURE QAF WITH MEEM ISOLATED FORM -FDB4 ; [.23E8.0020.0017][.2409.0020.0017][.2392.0020.0017] # ARABIC LIGATURE QAF WITH MEEM WITH HAH INITIAL FORM -FD7E ; [.23E8.0020.0019][.2409.0020.0019][.2392.0020.0019] # ARABIC LIGATURE QAF WITH MEEM WITH HAH FINAL FORM -FD7F ; [.23E8.0020.0019][.2409.0020.0019][.2409.0020.0019] # ARABIC LIGATURE QAF WITH MEEM WITH MEEM FINAL FORM -FDB2 ; [.23E8.0020.0019][.2409.0020.0019][.242C.0020.0019] # ARABIC LIGATURE QAF WITH MEEM WITH YEH FINAL FORM -FC7E ; [.23E8.0020.0019][.242B.0020.0019] # ARABIC LIGATURE QAF WITH ALEF MAKSURA FINAL FORM -FC35 ; [.23E8.0020.001A][.242B.0020.001A] # ARABIC LIGATURE QAF WITH ALEF MAKSURA ISOLATED FORM -FC7F ; [.23E8.0020.0019][.242C.0020.0019] # ARABIC LIGATURE QAF WITH YEH FINAL FORM -FC36 ; [.23E8.0020.001A][.242C.0020.001A] # ARABIC LIGATURE QAF WITH YEH ISOLATED FORM -06A7 ; [.23E9.0020.0002] # ARABIC LETTER QAF WITH DOT ABOVE -08BC ; [.23EA.0020.0002] # ARABIC LETTER AFRICAN QAF -06A8 ; [.23EB.0020.0002] # ARABIC LETTER QAF WITH THREE DOTS ABOVE -08A5 ; [.23EC.0020.0002] # ARABIC LETTER QAF WITH DOT BELOW -0643 ; [.23ED.0020.0002] # ARABIC LETTER KAF -1EE0A ; [.23ED.0020.0005] # ARABIC MATHEMATICAL KAF -1EE2A ; [.23ED.0020.0005] # ARABIC MATHEMATICAL INITIAL KAF -1EE6A ; [.23ED.0020.0005] # ARABIC MATHEMATICAL STRETCHED KAF -FEDB ; [.23ED.0020.0017] # ARABIC LETTER KAF INITIAL FORM -FEDC ; [.23ED.0020.0018] # ARABIC LETTER KAF MEDIAL FORM -FEDA ; [.23ED.0020.0019] # ARABIC LETTER KAF FINAL FORM -FED9 ; [.23ED.0020.001A] # ARABIC LETTER KAF ISOLATED FORM -FC80 ; [.23ED.0020.0019][.2371.0020.0019] # ARABIC LIGATURE KAF WITH ALEF FINAL FORM -FC37 ; [.23ED.0020.001A][.2371.0020.001A] # ARABIC LIGATURE KAF WITH ALEF ISOLATED FORM -FCC4 ; [.23ED.0020.0017][.238B.0020.0017] # ARABIC LIGATURE KAF WITH JEEM INITIAL FORM -FC38 ; [.23ED.0020.001A][.238B.0020.001A] # ARABIC LIGATURE KAF WITH JEEM ISOLATED FORM -FCC5 ; [.23ED.0020.0017][.2392.0020.0017] # ARABIC LIGATURE KAF WITH HAH INITIAL FORM -FC39 ; [.23ED.0020.001A][.2392.0020.001A] # ARABIC LIGATURE KAF WITH HAH ISOLATED FORM -FCC6 ; [.23ED.0020.0017][.2393.0020.0017] # ARABIC LIGATURE KAF WITH KHAH INITIAL FORM -FC3A ; [.23ED.0020.001A][.2393.0020.001A] # ARABIC LIGATURE KAF WITH KHAH ISOLATED FORM -FCC7 ; [.23ED.0020.0017][.2402.0020.0017] # ARABIC LIGATURE KAF WITH LAM INITIAL FORM -FCEB ; [.23ED.0020.0018][.2402.0020.0018] # ARABIC LIGATURE KAF WITH LAM MEDIAL FORM -FC81 ; [.23ED.0020.0019][.2402.0020.0019] # ARABIC LIGATURE KAF WITH LAM FINAL FORM -FC3B ; [.23ED.0020.001A][.2402.0020.001A] # ARABIC LIGATURE KAF WITH LAM ISOLATED FORM -FCC8 ; [.23ED.0020.0017][.2409.0020.0017] # ARABIC LIGATURE KAF WITH MEEM INITIAL FORM -FCEC ; [.23ED.0020.0018][.2409.0020.0018] # ARABIC LIGATURE KAF WITH MEEM MEDIAL FORM -FC82 ; [.23ED.0020.0019][.2409.0020.0019] # ARABIC LIGATURE KAF WITH MEEM FINAL FORM -FC3C ; [.23ED.0020.001A][.2409.0020.001A] # ARABIC LIGATURE KAF WITH MEEM ISOLATED FORM -FDC3 ; [.23ED.0020.0017][.2409.0020.0017][.2409.0020.0017] # ARABIC LIGATURE KAF WITH MEEM WITH MEEM INITIAL FORM -FDBB ; [.23ED.0020.0019][.2409.0020.0019][.2409.0020.0019] # ARABIC LIGATURE KAF WITH MEEM WITH MEEM FINAL FORM -FDB7 ; [.23ED.0020.0019][.2409.0020.0019][.242C.0020.0019] # ARABIC LIGATURE KAF WITH MEEM WITH YEH FINAL FORM -FC83 ; [.23ED.0020.0019][.242B.0020.0019] # ARABIC LIGATURE KAF WITH ALEF MAKSURA FINAL FORM -FC3D ; [.23ED.0020.001A][.242B.0020.001A] # ARABIC LIGATURE KAF WITH ALEF MAKSURA ISOLATED FORM -FC84 ; [.23ED.0020.0019][.242C.0020.0019] # ARABIC LIGATURE KAF WITH YEH FINAL FORM -FC3E ; [.23ED.0020.001A][.242C.0020.001A] # ARABIC LIGATURE KAF WITH YEH ISOLATED FORM -06A9 ; [.23EE.0020.0002] # ARABIC LETTER KEHEH -FB90 ; [.23EE.0020.0017] # ARABIC LETTER KEHEH INITIAL FORM -FB91 ; [.23EE.0020.0018] # ARABIC LETTER KEHEH MEDIAL FORM -FB8F ; [.23EE.0020.0019] # ARABIC LETTER KEHEH FINAL FORM -FB8E ; [.23EE.0020.001A] # ARABIC LETTER KEHEH ISOLATED FORM -06AA ; [.23EF.0020.0002] # ARABIC LETTER SWASH KAF -06AB ; [.23F0.0020.0002] # ARABIC LETTER KAF WITH RING -06AC ; [.23F1.0020.0002] # ARABIC LETTER KAF WITH DOT ABOVE -077F ; [.23F2.0020.0002] # ARABIC LETTER KAF WITH TWO DOTS ABOVE -06AD ; [.23F3.0020.0002] # ARABIC LETTER NG -FBD5 ; [.23F3.0020.0017] # ARABIC LETTER NG INITIAL FORM -FBD6 ; [.23F3.0020.0018] # ARABIC LETTER NG MEDIAL FORM -FBD4 ; [.23F3.0020.0019] # ARABIC LETTER NG FINAL FORM -FBD3 ; [.23F3.0020.001A] # ARABIC LETTER NG ISOLATED FORM -06AE ; [.23F4.0020.0002] # ARABIC LETTER KAF WITH THREE DOTS BELOW -08B4 ; [.23F5.0020.0002] # ARABIC LETTER KAF WITH DOT BELOW -06AF ; [.23F6.0020.0002] # ARABIC LETTER GAF -FB94 ; [.23F6.0020.0017] # ARABIC LETTER GAF INITIAL FORM -FB95 ; [.23F6.0020.0018] # ARABIC LETTER GAF MEDIAL FORM -FB93 ; [.23F6.0020.0019] # ARABIC LETTER GAF FINAL FORM -FB92 ; [.23F6.0020.001A] # ARABIC LETTER GAF ISOLATED FORM -08B0 ; [.23F7.0020.0002] # ARABIC LETTER GAF WITH INVERTED STROKE -06B0 ; [.23F8.0020.0002] # ARABIC LETTER GAF WITH RING -06B1 ; [.23F9.0020.0002] # ARABIC LETTER NGOEH -FB9C ; [.23F9.0020.0017] # ARABIC LETTER NGOEH INITIAL FORM -FB9D ; [.23F9.0020.0018] # ARABIC LETTER NGOEH MEDIAL FORM -FB9B ; [.23F9.0020.0019] # ARABIC LETTER NGOEH FINAL FORM -FB9A ; [.23F9.0020.001A] # ARABIC LETTER NGOEH ISOLATED FORM -06B2 ; [.23FA.0020.0002] # ARABIC LETTER GAF WITH TWO DOTS BELOW -06B3 ; [.23FB.0020.0002] # ARABIC LETTER GUEH -FB98 ; [.23FB.0020.0017] # ARABIC LETTER GUEH INITIAL FORM -FB99 ; [.23FB.0020.0018] # ARABIC LETTER GUEH MEDIAL FORM -FB97 ; [.23FB.0020.0019] # ARABIC LETTER GUEH FINAL FORM -FB96 ; [.23FB.0020.001A] # ARABIC LETTER GUEH ISOLATED FORM -06B4 ; [.23FC.0020.0002] # ARABIC LETTER GAF WITH THREE DOTS ABOVE -0762 ; [.23FD.0020.0002] # ARABIC LETTER KEHEH WITH DOT ABOVE -063B ; [.23FE.0020.0002] # ARABIC LETTER KEHEH WITH TWO DOTS ABOVE -063C ; [.23FF.0020.0002] # ARABIC LETTER KEHEH WITH THREE DOTS BELOW -0763 ; [.2400.0020.0002] # ARABIC LETTER KEHEH WITH THREE DOTS ABOVE -0764 ; [.2401.0020.0002] # ARABIC LETTER KEHEH WITH THREE DOTS POINTING UPWARDS BELOW -0644 ; [.2402.0020.0002] # ARABIC LETTER LAM -1EE0B ; [.2402.0020.0005] # ARABIC MATHEMATICAL LAM -1EE2B ; [.2402.0020.0005] # ARABIC MATHEMATICAL INITIAL LAM -1EE4B ; [.2402.0020.0005] # ARABIC MATHEMATICAL TAILED LAM -1EE8B ; [.2402.0020.0005] # ARABIC MATHEMATICAL LOOPED LAM -1EEAB ; [.2402.0020.0005] # ARABIC MATHEMATICAL DOUBLE-STRUCK LAM -FEDF ; [.2402.0020.0017] # ARABIC LETTER LAM INITIAL FORM -FEE0 ; [.2402.0020.0018] # ARABIC LETTER LAM MEDIAL FORM -FEDE ; [.2402.0020.0019] # ARABIC LETTER LAM FINAL FORM -FEDD ; [.2402.0020.001A] # ARABIC LETTER LAM ISOLATED FORM -FEF6 ; [.2402.0020.0019][.2364.0020.0019] # ARABIC LIGATURE LAM WITH ALEF WITH MADDA ABOVE FINAL FORM -FEF5 ; [.2402.0020.001A][.2364.0020.001A] # ARABIC LIGATURE LAM WITH ALEF WITH MADDA ABOVE ISOLATED FORM -FEF8 ; [.2402.0020.0019][.2365.0020.0019] # ARABIC LIGATURE LAM WITH ALEF WITH HAMZA ABOVE FINAL FORM -FEF7 ; [.2402.0020.001A][.2365.0020.001A] # ARABIC LIGATURE LAM WITH ALEF WITH HAMZA ABOVE ISOLATED FORM -FEFA ; [.2402.0020.0019][.2369.0020.0019] # ARABIC LIGATURE LAM WITH ALEF WITH HAMZA BELOW FINAL FORM -FEF9 ; [.2402.0020.001A][.2369.0020.001A] # ARABIC LIGATURE LAM WITH ALEF WITH HAMZA BELOW ISOLATED FORM -FEFC ; [.2402.0020.0019][.2371.0020.0019] # ARABIC LIGATURE LAM WITH ALEF FINAL FORM -FEFB ; [.2402.0020.001A][.2371.0020.001A] # ARABIC LIGATURE LAM WITH ALEF ISOLATED FORM -FCC9 ; [.2402.0020.0017][.238B.0020.0017] # ARABIC LIGATURE LAM WITH JEEM INITIAL FORM -FC3F ; [.2402.0020.001A][.238B.0020.001A] # ARABIC LIGATURE LAM WITH JEEM ISOLATED FORM -FD83 ; [.2402.0020.0017][.238B.0020.0017][.238B.0020.0017] # ARABIC LIGATURE LAM WITH JEEM WITH JEEM INITIAL FORM -FD84 ; [.2402.0020.0019][.238B.0020.0019][.238B.0020.0019] # ARABIC LIGATURE LAM WITH JEEM WITH JEEM FINAL FORM -FDBA ; [.2402.0020.0017][.238B.0020.0017][.2409.0020.0017] # ARABIC LIGATURE LAM WITH JEEM WITH MEEM INITIAL FORM -FDBC ; [.2402.0020.0019][.238B.0020.0019][.2409.0020.0019] # ARABIC LIGATURE LAM WITH JEEM WITH MEEM FINAL FORM -FDAC ; [.2402.0020.0019][.238B.0020.0019][.242C.0020.0019] # ARABIC LIGATURE LAM WITH JEEM WITH YEH FINAL FORM -FCCA ; [.2402.0020.0017][.2392.0020.0017] # ARABIC LIGATURE LAM WITH HAH INITIAL FORM -FC40 ; [.2402.0020.001A][.2392.0020.001A] # ARABIC LIGATURE LAM WITH HAH ISOLATED FORM -FDB5 ; [.2402.0020.0017][.2392.0020.0017][.2409.0020.0017] # ARABIC LIGATURE LAM WITH HAH WITH MEEM INITIAL FORM -FD80 ; [.2402.0020.0019][.2392.0020.0019][.2409.0020.0019] # ARABIC LIGATURE LAM WITH HAH WITH MEEM FINAL FORM -FD82 ; [.2402.0020.0019][.2392.0020.0019][.242B.0020.0019] # ARABIC LIGATURE LAM WITH HAH WITH ALEF MAKSURA FINAL FORM -FD81 ; [.2402.0020.0019][.2392.0020.0019][.242C.0020.0019] # ARABIC LIGATURE LAM WITH HAH WITH YEH FINAL FORM -FCCB ; [.2402.0020.0017][.2393.0020.0017] # ARABIC LIGATURE LAM WITH KHAH INITIAL FORM -FC41 ; [.2402.0020.001A][.2393.0020.001A] # ARABIC LIGATURE LAM WITH KHAH ISOLATED FORM -FD86 ; [.2402.0020.0017][.2393.0020.0017][.2409.0020.0017] # ARABIC LIGATURE LAM WITH KHAH WITH MEEM INITIAL FORM -FD85 ; [.2402.0020.0019][.2393.0020.0019][.2409.0020.0019] # ARABIC LIGATURE LAM WITH KHAH WITH MEEM FINAL FORM -FCCC ; [.2402.0020.0017][.2409.0020.0017] # ARABIC LIGATURE LAM WITH MEEM INITIAL FORM -FCED ; [.2402.0020.0018][.2409.0020.0018] # ARABIC LIGATURE LAM WITH MEEM MEDIAL FORM -FC85 ; [.2402.0020.0019][.2409.0020.0019] # ARABIC LIGATURE LAM WITH MEEM FINAL FORM -FC42 ; [.2402.0020.001A][.2409.0020.001A] # ARABIC LIGATURE LAM WITH MEEM ISOLATED FORM -FD88 ; [.2402.0020.0017][.2409.0020.0017][.2392.0020.0017] # ARABIC LIGATURE LAM WITH MEEM WITH HAH INITIAL FORM -FD87 ; [.2402.0020.0019][.2409.0020.0019][.2392.0020.0019] # ARABIC LIGATURE LAM WITH MEEM WITH HAH FINAL FORM -FDAD ; [.2402.0020.0019][.2409.0020.0019][.242C.0020.0019] # ARABIC LIGATURE LAM WITH MEEM WITH YEH FINAL FORM -FCCD ; [.2402.0020.0017][.2417.0020.0017] # ARABIC LIGATURE LAM WITH HEH INITIAL FORM -FC86 ; [.2402.0020.0019][.242B.0020.0019] # ARABIC LIGATURE LAM WITH ALEF MAKSURA FINAL FORM -FC43 ; [.2402.0020.001A][.242B.0020.001A] # ARABIC LIGATURE LAM WITH ALEF MAKSURA ISOLATED FORM -FC87 ; [.2402.0020.0019][.242C.0020.0019] # ARABIC LIGATURE LAM WITH YEH FINAL FORM -FC44 ; [.2402.0020.001A][.242C.0020.001A] # ARABIC LIGATURE LAM WITH YEH ISOLATED FORM -06B5 ; [.2403.0020.0002] # ARABIC LETTER LAM WITH SMALL V -06B6 ; [.2404.0020.0002] # ARABIC LETTER LAM WITH DOT ABOVE -06B7 ; [.2405.0020.0002] # ARABIC LETTER LAM WITH THREE DOTS ABOVE -06B8 ; [.2406.0020.0002] # ARABIC LETTER LAM WITH THREE DOTS BELOW -076A ; [.2407.0020.0002] # ARABIC LETTER LAM WITH BAR -08A6 ; [.2408.0020.0002] # ARABIC LETTER LAM WITH DOUBLE BAR -0645 ; [.2409.0020.0002] # ARABIC LETTER MEEM -1EE0C ; [.2409.0020.0005] # ARABIC MATHEMATICAL MEEM -1EE2C ; [.2409.0020.0005] # ARABIC MATHEMATICAL INITIAL MEEM -1EE6C ; [.2409.0020.0005] # ARABIC MATHEMATICAL STRETCHED MEEM -1EE8C ; [.2409.0020.0005] # ARABIC MATHEMATICAL LOOPED MEEM -1EEAC ; [.2409.0020.0005] # ARABIC MATHEMATICAL DOUBLE-STRUCK MEEM -FEE3 ; [.2409.0020.0017] # ARABIC LETTER MEEM INITIAL FORM -FEE4 ; [.2409.0020.0018] # ARABIC LETTER MEEM MEDIAL FORM -FEE2 ; [.2409.0020.0019] # ARABIC LETTER MEEM FINAL FORM -FEE1 ; [.2409.0020.001A] # ARABIC LETTER MEEM ISOLATED FORM -06FE ; [.2409.0020.0004][.0000.0112.0004] # ARABIC SIGN SINDHI POSTPOSITION MEN -FC88 ; [.2409.0020.0019][.2371.0020.0019] # ARABIC LIGATURE MEEM WITH ALEF FINAL FORM -FCCE ; [.2409.0020.0017][.238B.0020.0017] # ARABIC LIGATURE MEEM WITH JEEM INITIAL FORM -FC45 ; [.2409.0020.001A][.238B.0020.001A] # ARABIC LIGATURE MEEM WITH JEEM ISOLATED FORM -FD8C ; [.2409.0020.0017][.238B.0020.0017][.2392.0020.0017] # ARABIC LIGATURE MEEM WITH JEEM WITH HAH INITIAL FORM -FD92 ; [.2409.0020.0017][.238B.0020.0017][.2393.0020.0017] # ARABIC LIGATURE MEEM WITH JEEM WITH KHAH INITIAL FORM -FD8D ; [.2409.0020.0017][.238B.0020.0017][.2409.0020.0017] # ARABIC LIGATURE MEEM WITH JEEM WITH MEEM INITIAL FORM -FDC0 ; [.2409.0020.0019][.238B.0020.0019][.242C.0020.0019] # ARABIC LIGATURE MEEM WITH JEEM WITH YEH FINAL FORM -FCCF ; [.2409.0020.0017][.2392.0020.0017] # ARABIC LIGATURE MEEM WITH HAH INITIAL FORM -FC46 ; [.2409.0020.001A][.2392.0020.001A] # ARABIC LIGATURE MEEM WITH HAH ISOLATED FORM -FD89 ; [.2409.0020.0017][.2392.0020.0017][.238B.0020.0017] # ARABIC LIGATURE MEEM WITH HAH WITH JEEM INITIAL FORM -FD8A ; [.2409.0020.0017][.2392.0020.0017][.2409.0020.0017] # ARABIC LIGATURE MEEM WITH HAH WITH MEEM INITIAL FORM -FDF4 ; [.2409.0020.001A][.2392.0020.001A][.2409.0020.001A][.239D.0020.001A] # ARABIC LIGATURE MOHAMMAD ISOLATED FORM -FD8B ; [.2409.0020.0019][.2392.0020.0019][.242C.0020.0019] # ARABIC LIGATURE MEEM WITH HAH WITH YEH FINAL FORM -FCD0 ; [.2409.0020.0017][.2393.0020.0017] # ARABIC LIGATURE MEEM WITH KHAH INITIAL FORM -FC47 ; [.2409.0020.001A][.2393.0020.001A] # ARABIC LIGATURE MEEM WITH KHAH ISOLATED FORM -FD8E ; [.2409.0020.0017][.2393.0020.0017][.238B.0020.0017] # ARABIC LIGATURE MEEM WITH KHAH WITH JEEM INITIAL FORM -FD8F ; [.2409.0020.0017][.2393.0020.0017][.2409.0020.0017] # ARABIC LIGATURE MEEM WITH KHAH WITH MEEM INITIAL FORM -FDB9 ; [.2409.0020.0019][.2393.0020.0019][.242C.0020.0019] # ARABIC LIGATURE MEEM WITH KHAH WITH YEH FINAL FORM -FCD1 ; [.2409.0020.0017][.2409.0020.0017] # ARABIC LIGATURE MEEM WITH MEEM INITIAL FORM -FC89 ; [.2409.0020.0019][.2409.0020.0019] # ARABIC LIGATURE MEEM WITH MEEM FINAL FORM -FC48 ; [.2409.0020.001A][.2409.0020.001A] # ARABIC LIGATURE MEEM WITH MEEM ISOLATED FORM -FDB1 ; [.2409.0020.0019][.2409.0020.0019][.242C.0020.0019] # ARABIC LIGATURE MEEM WITH MEEM WITH YEH FINAL FORM -FC49 ; [.2409.0020.001A][.242B.0020.001A] # ARABIC LIGATURE MEEM WITH ALEF MAKSURA ISOLATED FORM -FC4A ; [.2409.0020.001A][.242C.0020.001A] # ARABIC LIGATURE MEEM WITH YEH ISOLATED FORM -0765 ; [.240A.0020.0002] # ARABIC LETTER MEEM WITH DOT ABOVE -0766 ; [.240B.0020.0002] # ARABIC LETTER MEEM WITH DOT BELOW -08A7 ; [.240C.0020.0002] # ARABIC LETTER MEEM WITH THREE DOTS ABOVE -0646 ; [.240D.0020.0002] # ARABIC LETTER NOON -1EE0D ; [.240D.0020.0005] # ARABIC MATHEMATICAL NOON -1EE2D ; [.240D.0020.0005] # ARABIC MATHEMATICAL INITIAL NOON -1EE4D ; [.240D.0020.0005] # ARABIC MATHEMATICAL TAILED NOON -1EE6D ; [.240D.0020.0005] # ARABIC MATHEMATICAL STRETCHED NOON -1EE8D ; [.240D.0020.0005] # ARABIC MATHEMATICAL LOOPED NOON -1EEAD ; [.240D.0020.0005] # ARABIC MATHEMATICAL DOUBLE-STRUCK NOON -FEE7 ; [.240D.0020.0017] # ARABIC LETTER NOON INITIAL FORM -FEE8 ; [.240D.0020.0018] # ARABIC LETTER NOON MEDIAL FORM -FEE6 ; [.240D.0020.0019] # ARABIC LETTER NOON FINAL FORM -FEE5 ; [.240D.0020.001A] # ARABIC LETTER NOON ISOLATED FORM -FCD2 ; [.240D.0020.0017][.238B.0020.0017] # ARABIC LIGATURE NOON WITH JEEM INITIAL FORM -FC4B ; [.240D.0020.001A][.238B.0020.001A] # ARABIC LIGATURE NOON WITH JEEM ISOLATED FORM -FDB8 ; [.240D.0020.0017][.238B.0020.0017][.2392.0020.0017] # ARABIC LIGATURE NOON WITH JEEM WITH HAH INITIAL FORM -FDBD ; [.240D.0020.0019][.238B.0020.0019][.2392.0020.0019] # ARABIC LIGATURE NOON WITH JEEM WITH HAH FINAL FORM -FD98 ; [.240D.0020.0017][.238B.0020.0017][.2409.0020.0017] # ARABIC LIGATURE NOON WITH JEEM WITH MEEM INITIAL FORM -FD97 ; [.240D.0020.0019][.238B.0020.0019][.2409.0020.0019] # ARABIC LIGATURE NOON WITH JEEM WITH MEEM FINAL FORM -FD99 ; [.240D.0020.0019][.238B.0020.0019][.242B.0020.0019] # ARABIC LIGATURE NOON WITH JEEM WITH ALEF MAKSURA FINAL FORM -FDC7 ; [.240D.0020.0019][.238B.0020.0019][.242C.0020.0019] # ARABIC LIGATURE NOON WITH JEEM WITH YEH FINAL FORM -FCD3 ; [.240D.0020.0017][.2392.0020.0017] # ARABIC LIGATURE NOON WITH HAH INITIAL FORM -FC4C ; [.240D.0020.001A][.2392.0020.001A] # ARABIC LIGATURE NOON WITH HAH ISOLATED FORM -FD95 ; [.240D.0020.0017][.2392.0020.0017][.2409.0020.0017] # ARABIC LIGATURE NOON WITH HAH WITH MEEM INITIAL FORM -FD96 ; [.240D.0020.0019][.2392.0020.0019][.242B.0020.0019] # ARABIC LIGATURE NOON WITH HAH WITH ALEF MAKSURA FINAL FORM -FDB3 ; [.240D.0020.0019][.2392.0020.0019][.242C.0020.0019] # ARABIC LIGATURE NOON WITH HAH WITH YEH FINAL FORM -FCD4 ; [.240D.0020.0017][.2393.0020.0017] # ARABIC LIGATURE NOON WITH KHAH INITIAL FORM -FC4D ; [.240D.0020.001A][.2393.0020.001A] # ARABIC LIGATURE NOON WITH KHAH ISOLATED FORM -FC8A ; [.240D.0020.0019][.23AC.0020.0019] # ARABIC LIGATURE NOON WITH REH FINAL FORM -FC8B ; [.240D.0020.0019][.23AD.0020.0019] # ARABIC LIGATURE NOON WITH ZAIN FINAL FORM -FCD5 ; [.240D.0020.0017][.2409.0020.0017] # ARABIC LIGATURE NOON WITH MEEM INITIAL FORM -FCEE ; [.240D.0020.0018][.2409.0020.0018] # ARABIC LIGATURE NOON WITH MEEM MEDIAL FORM -FC8C ; [.240D.0020.0019][.2409.0020.0019] # ARABIC LIGATURE NOON WITH MEEM FINAL FORM -FC4E ; [.240D.0020.001A][.2409.0020.001A] # ARABIC LIGATURE NOON WITH MEEM ISOLATED FORM -FD9B ; [.240D.0020.0019][.2409.0020.0019][.242B.0020.0019] # ARABIC LIGATURE NOON WITH MEEM WITH ALEF MAKSURA FINAL FORM -FD9A ; [.240D.0020.0019][.2409.0020.0019][.242C.0020.0019] # ARABIC LIGATURE NOON WITH MEEM WITH YEH FINAL FORM -FC8D ; [.240D.0020.0019][.240D.0020.0019] # ARABIC LIGATURE NOON WITH NOON FINAL FORM -FCD6 ; [.240D.0020.0017][.2417.0020.0017] # ARABIC LIGATURE NOON WITH HEH INITIAL FORM -FCEF ; [.240D.0020.0018][.2417.0020.0018] # ARABIC LIGATURE NOON WITH HEH MEDIAL FORM -FC8E ; [.240D.0020.0019][.242B.0020.0019] # ARABIC LIGATURE NOON WITH ALEF MAKSURA FINAL FORM -FC4F ; [.240D.0020.001A][.242B.0020.001A] # ARABIC LIGATURE NOON WITH ALEF MAKSURA ISOLATED FORM -FC8F ; [.240D.0020.0019][.242C.0020.0019] # ARABIC LIGATURE NOON WITH YEH FINAL FORM -FC50 ; [.240D.0020.001A][.242C.0020.001A] # ARABIC LIGATURE NOON WITH YEH ISOLATED FORM -06BA ; [.240E.0020.0002] # ARABIC LETTER NOON GHUNNA -1EE1D ; [.240E.0020.0005] # ARABIC MATHEMATICAL DOTLESS NOON -1EE5D ; [.240E.0020.0005] # ARABIC MATHEMATICAL TAILED DOTLESS NOON -FB9F ; [.240E.0020.0019] # ARABIC LETTER NOON GHUNNA FINAL FORM -FB9E ; [.240E.0020.001A] # ARABIC LETTER NOON GHUNNA ISOLATED FORM -08BD ; [.240F.0020.0002] # ARABIC LETTER AFRICAN NOON -06BB ; [.2410.0020.0002] # ARABIC LETTER RNOON -FBA2 ; [.2410.0020.0017] # ARABIC LETTER RNOON INITIAL FORM -FBA3 ; [.2410.0020.0018] # ARABIC LETTER RNOON MEDIAL FORM -FBA1 ; [.2410.0020.0019] # ARABIC LETTER RNOON FINAL FORM -FBA0 ; [.2410.0020.001A] # ARABIC LETTER RNOON ISOLATED FORM -06BC ; [.2411.0020.0002] # ARABIC LETTER NOON WITH RING -06BD ; [.2412.0020.0002] # ARABIC LETTER NOON WITH THREE DOTS ABOVE -06B9 ; [.2413.0020.0002] # ARABIC LETTER NOON WITH DOT BELOW -0767 ; [.2414.0020.0002] # ARABIC LETTER NOON WITH TWO DOTS BELOW -0768 ; [.2415.0020.0002] # ARABIC LETTER NOON WITH SMALL TAH -0769 ; [.2416.0020.0002] # ARABIC LETTER NOON WITH SMALL V -0647 ; [.2417.0020.0002] # ARABIC LETTER HEH -1EE24 ; [.2417.0020.0005] # ARABIC MATHEMATICAL INITIAL HEH -1EE64 ; [.2417.0020.0005] # ARABIC MATHEMATICAL STRETCHED HEH -1EE84 ; [.2417.0020.0005] # ARABIC MATHEMATICAL LOOPED HEH -FEEB ; [.2417.0020.0017] # ARABIC LETTER HEH INITIAL FORM -FEEC ; [.2417.0020.0018] # ARABIC LETTER HEH MEDIAL FORM -FEEA ; [.2417.0020.0019] # ARABIC LETTER HEH FINAL FORM -FEE9 ; [.2417.0020.001A] # ARABIC LETTER HEH ISOLATED FORM -FCD9 ; [.2417.0020.0017][.0000.0098.0017] # ARABIC LIGATURE HEH WITH SUPERSCRIPT ALEF INITIAL FORM -FCD7 ; [.2417.0020.0017][.238B.0020.0017] # ARABIC LIGATURE HEH WITH JEEM INITIAL FORM -FC51 ; [.2417.0020.001A][.238B.0020.001A] # ARABIC LIGATURE HEH WITH JEEM ISOLATED FORM -FCD8 ; [.2417.0020.0017][.2409.0020.0017] # ARABIC LIGATURE HEH WITH MEEM INITIAL FORM -FC52 ; [.2417.0020.001A][.2409.0020.001A] # ARABIC LIGATURE HEH WITH MEEM ISOLATED FORM -FD93 ; [.2417.0020.0017][.2409.0020.0017][.238B.0020.0017] # ARABIC LIGATURE HEH WITH MEEM WITH JEEM INITIAL FORM -FD94 ; [.2417.0020.0017][.2409.0020.0017][.2409.0020.0017] # ARABIC LIGATURE HEH WITH MEEM WITH MEEM INITIAL FORM -FC53 ; [.2417.0020.001A][.242B.0020.001A] # ARABIC LIGATURE HEH WITH ALEF MAKSURA ISOLATED FORM -FC54 ; [.2417.0020.001A][.242C.0020.001A] # ARABIC LIGATURE HEH WITH YEH ISOLATED FORM -06BE ; [.2418.0020.0002] # ARABIC LETTER HEH DOACHASHMEE -FBAC ; [.2418.0020.0017] # ARABIC LETTER HEH DOACHASHMEE INITIAL FORM -FBAD ; [.2418.0020.0018] # ARABIC LETTER HEH DOACHASHMEE MEDIAL FORM -FBAB ; [.2418.0020.0019] # ARABIC LETTER HEH DOACHASHMEE FINAL FORM -FBAA ; [.2418.0020.001A] # ARABIC LETTER HEH DOACHASHMEE ISOLATED FORM -06C1 ; [.2419.0020.0002] # ARABIC LETTER HEH GOAL -FBA8 ; [.2419.0020.0017] # ARABIC LETTER HEH GOAL INITIAL FORM -FBA9 ; [.2419.0020.0018] # ARABIC LETTER HEH GOAL MEDIAL FORM -FBA7 ; [.2419.0020.0019] # ARABIC LETTER HEH GOAL FINAL FORM -FBA6 ; [.2419.0020.001A] # ARABIC LETTER HEH GOAL ISOLATED FORM -06C2 ; [.2419.0020.0002][.0000.0083.0002] # ARABIC LETTER HEH GOAL WITH HAMZA ABOVE -06C3 ; [.241A.0020.0002] # ARABIC LETTER TEH MARBUTA GOAL -06FF ; [.241B.0020.0002] # ARABIC LETTER HEH WITH INVERTED V -06D5 ; [.241C.0020.0002] # ARABIC LETTER AE -06C0 ; [.241C.0020.0002][.0000.0083.0002] # ARABIC LETTER HEH WITH YEH ABOVE -FBA5 ; [.241C.0020.0019][.0000.0083.0019] # ARABIC LETTER HEH WITH YEH ABOVE FINAL FORM -FBA4 ; [.241C.0020.001A][.0000.0083.001A] # ARABIC LETTER HEH WITH YEH ABOVE ISOLATED FORM -0648 ; [.241D.0020.0002] # ARABIC LETTER WAW -06E5 ; [.241D.0020.0004] # ARABIC SMALL WAW -1EE05 ; [.241D.0020.0005] # ARABIC MATHEMATICAL WAW -1EE85 ; [.241D.0020.0005] # ARABIC MATHEMATICAL LOOPED WAW -1EEA5 ; [.241D.0020.0005] # ARABIC MATHEMATICAL DOUBLE-STRUCK WAW -FEEE ; [.241D.0020.0019] # ARABIC LETTER WAW FINAL FORM -FEED ; [.241D.0020.001A] # ARABIC LETTER WAW ISOLATED FORM -0676 ; [.241D.0020.0004][.2363.0020.0004] # ARABIC LETTER HIGH HAMZA WAW -FDF8 ; [.241D.0020.001A][.23BF.0020.001A][.2402.0020.001A][.2409.0020.001A] # ARABIC LIGATURE WASALLAM ISOLATED FORM -06C4 ; [.241E.0020.0002] # ARABIC LETTER WAW WITH RING -06C5 ; [.241F.0020.0002] # ARABIC LETTER KIRGHIZ OE -FBE1 ; [.241F.0020.0019] # ARABIC LETTER KIRGHIZ OE FINAL FORM -FBE0 ; [.241F.0020.001A] # ARABIC LETTER KIRGHIZ OE ISOLATED FORM -06C6 ; [.2420.0020.0002] # ARABIC LETTER OE -FBDA ; [.2420.0020.0019] # ARABIC LETTER OE FINAL FORM -FBD9 ; [.2420.0020.001A] # ARABIC LETTER OE ISOLATED FORM -06C7 ; [.2421.0020.0002] # ARABIC LETTER U -FBD8 ; [.2421.0020.0019] # ARABIC LETTER U FINAL FORM -FBD7 ; [.2421.0020.001A] # ARABIC LETTER U ISOLATED FORM -0677 ; [.2421.0020.0004][.2363.0020.0004] # ARABIC LETTER U WITH HAMZA ABOVE -FBDD ; [.2421.0020.001A][.2363.0020.001A] # ARABIC LETTER U WITH HAMZA ABOVE ISOLATED FORM -06C8 ; [.2422.0020.0002] # ARABIC LETTER YU -FBDC ; [.2422.0020.0019] # ARABIC LETTER YU FINAL FORM -FBDB ; [.2422.0020.001A] # ARABIC LETTER YU ISOLATED FORM -06C9 ; [.2423.0020.0002] # ARABIC LETTER KIRGHIZ YU -FBE3 ; [.2423.0020.0019] # ARABIC LETTER KIRGHIZ YU FINAL FORM -FBE2 ; [.2423.0020.001A] # ARABIC LETTER KIRGHIZ YU ISOLATED FORM -06CA ; [.2424.0020.0002] # ARABIC LETTER WAW WITH TWO DOTS ABOVE -06CB ; [.2425.0020.0002] # ARABIC LETTER VE -FBDF ; [.2425.0020.0019] # ARABIC LETTER VE FINAL FORM -FBDE ; [.2425.0020.001A] # ARABIC LETTER VE ISOLATED FORM -08B1 ; [.2426.0020.0002] # ARABIC LETTER STRAIGHT WAW -06CF ; [.2427.0020.0002] # ARABIC LETTER WAW WITH DOT ABOVE -0778 ; [.2428.0020.0002] # ARABIC LETTER WAW WITH EXTENDED ARABIC-INDIC DIGIT TWO ABOVE -0779 ; [.2429.0020.0002] # ARABIC LETTER WAW WITH EXTENDED ARABIC-INDIC DIGIT THREE ABOVE -08AB ; [.242A.0020.0002] # ARABIC LETTER WAW WITH DOT WITHIN -0649 ; [.242B.0020.0002] # ARABIC LETTER ALEF MAKSURA -FBE8 ; [.242B.0020.0017] # ARABIC LETTER UIGHUR KAZAKH KIRGHIZ ALEF MAKSURA INITIAL FORM -FBE9 ; [.242B.0020.0018] # ARABIC LETTER UIGHUR KAZAKH KIRGHIZ ALEF MAKSURA MEDIAL FORM -FEF0 ; [.242B.0020.0019] # ARABIC LETTER ALEF MAKSURA FINAL FORM -FEEF ; [.242B.0020.001A] # ARABIC LETTER ALEF MAKSURA ISOLATED FORM -FC90 ; [.242B.0020.0019][.0000.0098.0019] # ARABIC LIGATURE ALEF MAKSURA WITH SUPERSCRIPT ALEF FINAL FORM -FC5D ; [.242B.0020.001A][.0000.0098.001A] # ARABIC LIGATURE ALEF MAKSURA WITH SUPERSCRIPT ALEF ISOLATED FORM -064A ; [.242C.0020.0002] # ARABIC LETTER YEH -06E6 ; [.242C.0020.0004] # ARABIC SMALL YEH -1EE09 ; [.242C.0020.0005] # ARABIC MATHEMATICAL YEH -1EE29 ; [.242C.0020.0005] # ARABIC MATHEMATICAL INITIAL YEH -1EE49 ; [.242C.0020.0005] # ARABIC MATHEMATICAL TAILED YEH -1EE69 ; [.242C.0020.0005] # ARABIC MATHEMATICAL STRETCHED YEH -1EE89 ; [.242C.0020.0005] # ARABIC MATHEMATICAL LOOPED YEH -1EEA9 ; [.242C.0020.0005] # ARABIC MATHEMATICAL DOUBLE-STRUCK YEH -FEF3 ; [.242C.0020.0017] # ARABIC LETTER YEH INITIAL FORM -FEF4 ; [.242C.0020.0018] # ARABIC LETTER YEH MEDIAL FORM -FEF2 ; [.242C.0020.0019] # ARABIC LETTER YEH FINAL FORM -FEF1 ; [.242C.0020.001A] # ARABIC LETTER YEH ISOLATED FORM -0678 ; [.242C.0020.0004][.2363.0020.0004] # ARABIC LETTER HIGH HAMZA YEH -FCDA ; [.242C.0020.0017][.238B.0020.0017] # ARABIC LIGATURE YEH WITH JEEM INITIAL FORM -FC55 ; [.242C.0020.001A][.238B.0020.001A] # ARABIC LIGATURE YEH WITH JEEM ISOLATED FORM -FDAF ; [.242C.0020.0019][.238B.0020.0019][.242C.0020.0019] # ARABIC LIGATURE YEH WITH JEEM WITH YEH FINAL FORM -FCDB ; [.242C.0020.0017][.2392.0020.0017] # ARABIC LIGATURE YEH WITH HAH INITIAL FORM -FC56 ; [.242C.0020.001A][.2392.0020.001A] # ARABIC LIGATURE YEH WITH HAH ISOLATED FORM -FDAE ; [.242C.0020.0019][.2392.0020.0019][.242C.0020.0019] # ARABIC LIGATURE YEH WITH HAH WITH YEH FINAL FORM -FCDC ; [.242C.0020.0017][.2393.0020.0017] # ARABIC LIGATURE YEH WITH KHAH INITIAL FORM -FC57 ; [.242C.0020.001A][.2393.0020.001A] # ARABIC LIGATURE YEH WITH KHAH ISOLATED FORM -FC91 ; [.242C.0020.0019][.23AC.0020.0019] # ARABIC LIGATURE YEH WITH REH FINAL FORM -FC92 ; [.242C.0020.0019][.23AD.0020.0019] # ARABIC LIGATURE YEH WITH ZAIN FINAL FORM -FCDD ; [.242C.0020.0017][.2409.0020.0017] # ARABIC LIGATURE YEH WITH MEEM INITIAL FORM -FCF0 ; [.242C.0020.0018][.2409.0020.0018] # ARABIC LIGATURE YEH WITH MEEM MEDIAL FORM -FC93 ; [.242C.0020.0019][.2409.0020.0019] # ARABIC LIGATURE YEH WITH MEEM FINAL FORM -FC58 ; [.242C.0020.001A][.2409.0020.001A] # ARABIC LIGATURE YEH WITH MEEM ISOLATED FORM -FD9D ; [.242C.0020.0017][.2409.0020.0017][.2409.0020.0017] # ARABIC LIGATURE YEH WITH MEEM WITH MEEM INITIAL FORM -FD9C ; [.242C.0020.0019][.2409.0020.0019][.2409.0020.0019] # ARABIC LIGATURE YEH WITH MEEM WITH MEEM FINAL FORM -FDB0 ; [.242C.0020.0019][.2409.0020.0019][.242C.0020.0019] # ARABIC LIGATURE YEH WITH MEEM WITH YEH FINAL FORM -FC94 ; [.242C.0020.0019][.240D.0020.0019] # ARABIC LIGATURE YEH WITH NOON FINAL FORM -FCDE ; [.242C.0020.0017][.2417.0020.0017] # ARABIC LIGATURE YEH WITH HEH INITIAL FORM -FCF1 ; [.242C.0020.0018][.2417.0020.0018] # ARABIC LIGATURE YEH WITH HEH MEDIAL FORM -FC95 ; [.242C.0020.0019][.242B.0020.0019] # ARABIC LIGATURE YEH WITH ALEF MAKSURA FINAL FORM -FC59 ; [.242C.0020.001A][.242B.0020.001A] # ARABIC LIGATURE YEH WITH ALEF MAKSURA ISOLATED FORM -FC96 ; [.242C.0020.0019][.242C.0020.0019] # ARABIC LIGATURE YEH WITH YEH FINAL FORM -FC5A ; [.242C.0020.001A][.242C.0020.001A] # ARABIC LIGATURE YEH WITH YEH ISOLATED FORM -06CC ; [.242D.0020.0002] # ARABIC LETTER FARSI YEH -FBFE ; [.242D.0020.0017] # ARABIC LETTER FARSI YEH INITIAL FORM -FBFF ; [.242D.0020.0018] # ARABIC LETTER FARSI YEH MEDIAL FORM -FBFD ; [.242D.0020.0019] # ARABIC LETTER FARSI YEH FINAL FORM -FBFC ; [.242D.0020.001A] # ARABIC LETTER FARSI YEH ISOLATED FORM -06CD ; [.242E.0020.0002] # ARABIC LETTER YEH WITH TAIL -06CE ; [.242F.0020.0002] # ARABIC LETTER YEH WITH SMALL V -06D0 ; [.2430.0020.0002] # ARABIC LETTER E -FBE6 ; [.2430.0020.0017] # ARABIC LETTER E INITIAL FORM -FBE7 ; [.2430.0020.0018] # ARABIC LETTER E MEDIAL FORM -FBE5 ; [.2430.0020.0019] # ARABIC LETTER E FINAL FORM -FBE4 ; [.2430.0020.001A] # ARABIC LETTER E ISOLATED FORM -06D1 ; [.2431.0020.0002] # ARABIC LETTER YEH WITH THREE DOTS BELOW -063D ; [.2432.0020.0002] # ARABIC LETTER FARSI YEH WITH INVERTED V -063E ; [.2433.0020.0002] # ARABIC LETTER FARSI YEH WITH TWO DOTS ABOVE -063F ; [.2434.0020.0002] # ARABIC LETTER FARSI YEH WITH THREE DOTS ABOVE -0620 ; [.2435.0020.0002] # ARABIC LETTER KASHMIRI YEH -0775 ; [.2436.0020.0002] # ARABIC LETTER FARSI YEH WITH EXTENDED ARABIC-INDIC DIGIT TWO ABOVE -0776 ; [.2437.0020.0002] # ARABIC LETTER FARSI YEH WITH EXTENDED ARABIC-INDIC DIGIT THREE ABOVE -0777 ; [.2438.0020.0002] # ARABIC LETTER FARSI YEH WITH EXTENDED ARABIC-INDIC DIGIT FOUR BELOW -08BA ; [.2439.0020.0002] # ARABIC LETTER YEH WITH TWO DOTS BELOW AND SMALL NOON ABOVE -06D2 ; [.243A.0020.0002] # ARABIC LETTER YEH BARREE -FBAF ; [.243A.0020.0019] # ARABIC LETTER YEH BARREE FINAL FORM -FBAE ; [.243A.0020.001A] # ARABIC LETTER YEH BARREE ISOLATED FORM -06D3 ; [.243A.0020.0002][.0000.0083.0002] # ARABIC LETTER YEH BARREE WITH HAMZA ABOVE -FBB1 ; [.243A.0020.0019][.0000.0083.0019] # ARABIC LETTER YEH BARREE WITH HAMZA ABOVE FINAL FORM -FBB0 ; [.243A.0020.001A][.0000.0083.001A] # ARABIC LETTER YEH BARREE WITH HAMZA ABOVE ISOLATED FORM -077A ; [.243B.0020.0002] # ARABIC LETTER YEH BARREE WITH EXTENDED ARABIC-INDIC DIGIT TWO ABOVE -077B ; [.243C.0020.0002] # ARABIC LETTER YEH BARREE WITH EXTENDED ARABIC-INDIC DIGIT THREE ABOVE -0710 ; [.243D.0020.0002] # SYRIAC LETTER ALAPH -0712 ; [.243E.0020.0002] # SYRIAC LETTER BETH -072D ; [.243E.0020.0004][.0000.0113.0004] # SYRIAC LETTER PERSIAN BHETH -0713 ; [.243F.0020.0002] # SYRIAC LETTER GAMAL -0714 ; [.243F.0020.0004][.0000.0112.0004] # SYRIAC LETTER GAMAL GARSHUNI -072E ; [.243F.0020.0004][.0000.0113.0004] # SYRIAC LETTER PERSIAN GHAMAL -0716 ; [.2440.0020.0002] # SYRIAC LETTER DOTLESS DALATH RISH -0715 ; [.2441.0020.0002] # SYRIAC LETTER DALATH -072F ; [.2441.0020.0004][.0000.0113.0004] # SYRIAC LETTER PERSIAN DHALATH -0717 ; [.2442.0020.0002] # SYRIAC LETTER HE -0718 ; [.2443.0020.0002] # SYRIAC LETTER WAW -0719 ; [.2444.0020.0002] # SYRIAC LETTER ZAIN -074D ; [.2445.0020.0002] # SYRIAC LETTER SOGDIAN ZHAIN -071A ; [.2446.0020.0002] # SYRIAC LETTER HETH -071B ; [.2447.0020.0002] # SYRIAC LETTER TETH -071C ; [.2447.0020.0004][.0000.0112.0004] # SYRIAC LETTER TETH GARSHUNI -071D ; [.2448.0020.0002] # SYRIAC LETTER YUDH -071E ; [.2449.0020.0002] # SYRIAC LETTER YUDH HE -071F ; [.244A.0020.0002] # SYRIAC LETTER KAPH -074E ; [.244B.0020.0002] # SYRIAC LETTER SOGDIAN KHAPH -0720 ; [.244C.0020.0002] # SYRIAC LETTER LAMADH -0721 ; [.244D.0020.0002] # SYRIAC LETTER MIM -0722 ; [.244E.0020.0002] # SYRIAC LETTER NUN -0723 ; [.244F.0020.0002] # SYRIAC LETTER SEMKATH -0724 ; [.244F.0020.0019] # SYRIAC LETTER FINAL SEMKATH -0725 ; [.2450.0020.0002] # SYRIAC LETTER E -0726 ; [.2451.0020.0002] # SYRIAC LETTER PE -0727 ; [.2451.0020.0004][.0000.0112.0004] # SYRIAC LETTER REVERSED PE -074F ; [.2452.0020.0002] # SYRIAC LETTER SOGDIAN FE -0728 ; [.2453.0020.0002] # SYRIAC LETTER SADHE -0729 ; [.2454.0020.0002] # SYRIAC LETTER QAPH -072A ; [.2455.0020.0002] # SYRIAC LETTER RISH -072B ; [.2456.0020.0002] # SYRIAC LETTER SHIN -072C ; [.2457.0020.0002] # SYRIAC LETTER TAW -0860 ; [.2458.0020.0002] # SYRIAC LETTER MALAYALAM NGA -0861 ; [.2459.0020.0002] # SYRIAC LETTER MALAYALAM JA -0862 ; [.245A.0020.0002] # SYRIAC LETTER MALAYALAM NYA -0863 ; [.245B.0020.0002] # SYRIAC LETTER MALAYALAM TTA -0864 ; [.245C.0020.0002] # SYRIAC LETTER MALAYALAM NNA -0865 ; [.245D.0020.0002] # SYRIAC LETTER MALAYALAM NNNA -0866 ; [.245E.0020.0002] # SYRIAC LETTER MALAYALAM BHA -0867 ; [.245F.0020.0002] # SYRIAC LETTER MALAYALAM RA -0868 ; [.2460.0020.0002] # SYRIAC LETTER MALAYALAM LLA -0869 ; [.2461.0020.0002] # SYRIAC LETTER MALAYALAM LLLA -086A ; [.2462.0020.0002] # SYRIAC LETTER MALAYALAM SSA -0840 ; [.2463.0020.0002] # MANDAIC LETTER HALQA -0841 ; [.2464.0020.0002] # MANDAIC LETTER AB -0842 ; [.2465.0020.0002] # MANDAIC LETTER AG -0843 ; [.2466.0020.0002] # MANDAIC LETTER AD -0844 ; [.2467.0020.0002] # MANDAIC LETTER AH -0845 ; [.2468.0020.0002] # MANDAIC LETTER USHENNA -0846 ; [.2469.0020.0002] # MANDAIC LETTER AZ -0847 ; [.246A.0020.0002] # MANDAIC LETTER IT -0848 ; [.246B.0020.0002] # MANDAIC LETTER ATT -0849 ; [.246C.0020.0002] # MANDAIC LETTER AKSA -084A ; [.246D.0020.0002] # MANDAIC LETTER AK -084B ; [.246E.0020.0002] # MANDAIC LETTER AL -084C ; [.246F.0020.0002] # MANDAIC LETTER AM -084D ; [.2470.0020.0002] # MANDAIC LETTER AN -084E ; [.2471.0020.0002] # MANDAIC LETTER AS -084F ; [.2472.0020.0002] # MANDAIC LETTER IN -0850 ; [.2473.0020.0002] # MANDAIC LETTER AP -0851 ; [.2474.0020.0002] # MANDAIC LETTER ASZ -0852 ; [.2475.0020.0002] # MANDAIC LETTER AQ -0853 ; [.2476.0020.0002] # MANDAIC LETTER AR -0854 ; [.2477.0020.0002] # MANDAIC LETTER ASH -0855 ; [.2478.0020.0002] # MANDAIC LETTER AT -0856 ; [.2479.0020.0002] # MANDAIC LETTER DUSHENNA -0857 ; [.247A.0020.0002] # MANDAIC LETTER KAD -0858 ; [.247B.0020.0002] # MANDAIC LETTER AIN -0780 ; [.247C.0020.0002] # THAANA LETTER HAA -0799 ; [.247D.0020.0002] # THAANA LETTER HHAA -079A ; [.247E.0020.0002] # THAANA LETTER KHAA -0781 ; [.247F.0020.0002] # THAANA LETTER SHAVIYANI -0782 ; [.2480.0020.0002] # THAANA LETTER NOONU -0783 ; [.2481.0020.0002] # THAANA LETTER RAA -079C ; [.2482.0020.0002] # THAANA LETTER ZAA -0784 ; [.2483.0020.0002] # THAANA LETTER BAA -0785 ; [.2484.0020.0002] # THAANA LETTER LHAVIYANI -0786 ; [.2485.0020.0002] # THAANA LETTER KAAFU -0787 ; [.2486.0020.0002] # THAANA LETTER ALIFU -07A2 ; [.2487.0020.0002] # THAANA LETTER AINU -07A3 ; [.2488.0020.0002] # THAANA LETTER GHAINU -0788 ; [.2489.0020.0002] # THAANA LETTER VAAVU -07A5 ; [.248A.0020.0002] # THAANA LETTER WAAVU -0789 ; [.248B.0020.0002] # THAANA LETTER MEEMU -078A ; [.248C.0020.0002] # THAANA LETTER FAAFU -078B ; [.248D.0020.0002] # THAANA LETTER DHAALU -079B ; [.248E.0020.0002] # THAANA LETTER THAALU -078C ; [.248F.0020.0002] # THAANA LETTER THAA -0798 ; [.2490.0020.0002] # THAANA LETTER TTAA -07A0 ; [.2491.0020.0002] # THAANA LETTER TO -07A1 ; [.2492.0020.0002] # THAANA LETTER ZO -078D ; [.2493.0020.0002] # THAANA LETTER LAAMU -078E ; [.2494.0020.0002] # THAANA LETTER GAAFU -07A4 ; [.2495.0020.0002] # THAANA LETTER QAAFU -078F ; [.2496.0020.0002] # THAANA LETTER GNAVIYANI -0790 ; [.2497.0020.0002] # THAANA LETTER SEENU -079D ; [.2498.0020.0002] # THAANA LETTER SHEENU -079E ; [.2499.0020.0002] # THAANA LETTER SAADHU -079F ; [.249A.0020.0002] # THAANA LETTER DAADHU -0791 ; [.249B.0020.0002] # THAANA LETTER DAVIYANI -0792 ; [.249C.0020.0002] # THAANA LETTER ZAVIYANI -0793 ; [.249D.0020.0002] # THAANA LETTER TAVIYANI -0794 ; [.249E.0020.0002] # THAANA LETTER YAA -0795 ; [.249F.0020.0002] # THAANA LETTER PAVIYANI -0796 ; [.24A0.0020.0002] # THAANA LETTER JAVIYANI -0797 ; [.24A1.0020.0002] # THAANA LETTER CHAVIYANI -07B1 ; [.24A2.0020.0002] # THAANA LETTER NAA -07A6 ; [.24A3.0020.0002] # THAANA ABAFILI -07A7 ; [.24A4.0020.0002] # THAANA AABAAFILI -07A8 ; [.24A5.0020.0002] # THAANA IBIFILI -07A9 ; [.24A6.0020.0002] # THAANA EEBEEFILI -07AA ; [.24A7.0020.0002] # THAANA UBUFILI -07AB ; [.24A8.0020.0002] # THAANA OOBOOFILI -07AC ; [.24A9.0020.0002] # THAANA EBEFILI -07AD ; [.24AA.0020.0002] # THAANA EYBEYFILI -07AE ; [.24AB.0020.0002] # THAANA OBOFILI -07AF ; [.24AC.0020.0002] # THAANA OABOAFILI -07B0 ; [.24AD.0020.0002] # THAANA SUKUN -07CA ; [.24AE.0020.0002] # NKO LETTER A -07CB ; [.24AF.0020.0002] # NKO LETTER EE -07CC ; [.24B0.0020.0002] # NKO LETTER I -07CD ; [.24B1.0020.0002] # NKO LETTER E -07CE ; [.24B2.0020.0002] # NKO LETTER U -07CF ; [.24B3.0020.0002] # NKO LETTER OO -07D0 ; [.24B4.0020.0002] # NKO LETTER O -07D1 ; [.24B5.0020.0002] # NKO LETTER DAGBASINNA -07D2 ; [.24B6.0020.0002] # NKO LETTER N -07D3 ; [.24B7.0020.0002] # NKO LETTER BA -07D4 ; [.24B8.0020.0002] # NKO LETTER PA -07D5 ; [.24B9.0020.0002] # NKO LETTER TA -07D6 ; [.24BA.0020.0002] # NKO LETTER JA -07E8 ; [.24BA.0020.0004][.0000.0111.0004] # NKO LETTER JONA JA -07D7 ; [.24BB.0020.0002] # NKO LETTER CHA -07E9 ; [.24BB.0020.0004][.0000.0111.0004] # NKO LETTER JONA CHA -07D8 ; [.24BC.0020.0002] # NKO LETTER DA -07D9 ; [.24BD.0020.0002] # NKO LETTER RA -07EA ; [.24BD.0020.0004][.0000.0111.0004] # NKO LETTER JONA RA -07DA ; [.24BE.0020.0002] # NKO LETTER RRA -07DB ; [.24BF.0020.0002] # NKO LETTER SA -07DC ; [.24C0.0020.0002] # NKO LETTER GBA -07DD ; [.24C1.0020.0002] # NKO LETTER FA -07DE ; [.24C2.0020.0002] # NKO LETTER KA -07DF ; [.24C3.0020.0002] # NKO LETTER LA -07E0 ; [.24C4.0020.0002] # NKO LETTER NA WOLOSO -07E1 ; [.24C5.0020.0002] # NKO LETTER MA -07E2 ; [.24C6.0020.0002] # NKO LETTER NYA -07E3 ; [.24C7.0020.0002] # NKO LETTER NA -07E4 ; [.24C8.0020.0002] # NKO LETTER HA -07E5 ; [.24C9.0020.0002] # NKO LETTER WA -07E6 ; [.24CA.0020.0002] # NKO LETTER YA -07E7 ; [.24CB.0020.0002] # NKO LETTER NYA WOLOSO -07F4 ; [.24CC.0020.0002] # NKO HIGH TONE APOSTROPHE -07F5 ; [.24CD.0020.0002] # NKO LOW TONE APOSTROPHE -2D30 ; [.24CE.0020.0002] # TIFINAGH LETTER YA -2D31 ; [.24CF.0020.0002] # TIFINAGH LETTER YAB -2D32 ; [.24D0.0020.0002] # TIFINAGH LETTER YABH -2D33 ; [.24D1.0020.0002] # TIFINAGH LETTER YAG -2D34 ; [.24D2.0020.0002] # TIFINAGH LETTER YAGHH -2D35 ; [.24D3.0020.0002] # TIFINAGH LETTER BERBER ACADEMY YAJ -2D36 ; [.24D4.0020.0002] # TIFINAGH LETTER YAJ -2D37 ; [.24D5.0020.0002] # TIFINAGH LETTER YAD -2D38 ; [.24D6.0020.0002] # TIFINAGH LETTER YADH -2D39 ; [.24D7.0020.0002] # TIFINAGH LETTER YADD -2D3A ; [.24D8.0020.0002] # TIFINAGH LETTER YADDH -2D3B ; [.24D9.0020.0002] # TIFINAGH LETTER YEY -2D66 ; [.24DA.0020.0002] # TIFINAGH LETTER YE -2D3C ; [.24DB.0020.0002] # TIFINAGH LETTER YAF -2D3D ; [.24DC.0020.0002] # TIFINAGH LETTER YAK -2D3E ; [.24DD.0020.0002] # TIFINAGH LETTER TUAREG YAK -2D3F ; [.24DE.0020.0002] # TIFINAGH LETTER YAKHH -2D40 ; [.24DF.0020.0002] # TIFINAGH LETTER YAH -2D41 ; [.24E0.0020.0002] # TIFINAGH LETTER BERBER ACADEMY YAH -2D42 ; [.24E1.0020.0002] # TIFINAGH LETTER TUAREG YAH -2D43 ; [.24E2.0020.0002] # TIFINAGH LETTER YAHH -2D44 ; [.24E3.0020.0002] # TIFINAGH LETTER YAA -2D45 ; [.24E4.0020.0002] # TIFINAGH LETTER YAKH -2D46 ; [.24E5.0020.0002] # TIFINAGH LETTER TUAREG YAKH -2D47 ; [.24E6.0020.0002] # TIFINAGH LETTER YAQ -2D48 ; [.24E7.0020.0002] # TIFINAGH LETTER TUAREG YAQ -2D49 ; [.24E8.0020.0002] # TIFINAGH LETTER YI -2D4A ; [.24E9.0020.0002] # TIFINAGH LETTER YAZH -2D4B ; [.24EA.0020.0002] # TIFINAGH LETTER AHAGGAR YAZH -2D4C ; [.24EB.0020.0002] # TIFINAGH LETTER TUAREG YAZH -2D4D ; [.24EC.0020.0002] # TIFINAGH LETTER YAL -2D4E ; [.24ED.0020.0002] # TIFINAGH LETTER YAM -2D4F ; [.24EE.0020.0002] # TIFINAGH LETTER YAN -2D50 ; [.24EF.0020.0002] # TIFINAGH LETTER TUAREG YAGN -2D51 ; [.24F0.0020.0002] # TIFINAGH LETTER TUAREG YANG -2D52 ; [.24F1.0020.0002] # TIFINAGH LETTER YAP -2D53 ; [.24F2.0020.0002] # TIFINAGH LETTER YU -2D67 ; [.24F3.0020.0002] # TIFINAGH LETTER YO -2D54 ; [.24F4.0020.0002] # TIFINAGH LETTER YAR -2D55 ; [.24F5.0020.0002] # TIFINAGH LETTER YARR -2D56 ; [.24F6.0020.0002] # TIFINAGH LETTER YAGH -2D57 ; [.24F7.0020.0002] # TIFINAGH LETTER TUAREG YAGH -2D58 ; [.24F8.0020.0002] # TIFINAGH LETTER AYER YAGH -2D59 ; [.24F9.0020.0002] # TIFINAGH LETTER YAS -2D5A ; [.24FA.0020.0002] # TIFINAGH LETTER YASS -2D5B ; [.24FB.0020.0002] # TIFINAGH LETTER YASH -2D5C ; [.24FC.0020.0002] # TIFINAGH LETTER YAT -2D5D ; [.24FD.0020.0002] # TIFINAGH LETTER YATH -2D5E ; [.24FE.0020.0002] # TIFINAGH LETTER YACH -2D5F ; [.24FF.0020.0002] # TIFINAGH LETTER YATT -2D60 ; [.2500.0020.0002] # TIFINAGH LETTER YAV -2D61 ; [.2501.0020.0002] # TIFINAGH LETTER YAW -2D62 ; [.2502.0020.0002] # TIFINAGH LETTER YAY -2D63 ; [.2503.0020.0002] # TIFINAGH LETTER YAZ -2D64 ; [.2504.0020.0002] # TIFINAGH LETTER TAWELLEMET YAZ -2D65 ; [.2505.0020.0002] # TIFINAGH LETTER YAZZ -2D6F ; [.2506.0020.0002] # TIFINAGH MODIFIER LETTER LABIALIZATION MARK -1200 ; [.2507.0020.0002] # ETHIOPIC SYLLABLE HA -1201 ; [.2508.0020.0002] # ETHIOPIC SYLLABLE HU -1202 ; [.2509.0020.0002] # ETHIOPIC SYLLABLE HI -1203 ; [.250A.0020.0002] # ETHIOPIC SYLLABLE HAA -1204 ; [.250B.0020.0002] # ETHIOPIC SYLLABLE HEE -1205 ; [.250C.0020.0002] # ETHIOPIC SYLLABLE HE -1206 ; [.250D.0020.0002] # ETHIOPIC SYLLABLE HO -1207 ; [.250E.0020.0002] # ETHIOPIC SYLLABLE HOA -1208 ; [.250F.0020.0002] # ETHIOPIC SYLLABLE LA -1209 ; [.2510.0020.0002] # ETHIOPIC SYLLABLE LU -120A ; [.2511.0020.0002] # ETHIOPIC SYLLABLE LI -120B ; [.2512.0020.0002] # ETHIOPIC SYLLABLE LAA -120C ; [.2513.0020.0002] # ETHIOPIC SYLLABLE LEE -120D ; [.2514.0020.0002] # ETHIOPIC SYLLABLE LE -120E ; [.2515.0020.0002] # ETHIOPIC SYLLABLE LO -120F ; [.2516.0020.0002] # ETHIOPIC SYLLABLE LWA -2D80 ; [.2517.0020.0002] # ETHIOPIC SYLLABLE LOA -1210 ; [.2518.0020.0002] # ETHIOPIC SYLLABLE HHA -1211 ; [.2519.0020.0002] # ETHIOPIC SYLLABLE HHU -1212 ; [.251A.0020.0002] # ETHIOPIC SYLLABLE HHI -1213 ; [.251B.0020.0002] # ETHIOPIC SYLLABLE HHAA -1214 ; [.251C.0020.0002] # ETHIOPIC SYLLABLE HHEE -1215 ; [.251D.0020.0002] # ETHIOPIC SYLLABLE HHE -1216 ; [.251E.0020.0002] # ETHIOPIC SYLLABLE HHO -1217 ; [.251F.0020.0002] # ETHIOPIC SYLLABLE HHWA -1218 ; [.2520.0020.0002] # ETHIOPIC SYLLABLE MA -1219 ; [.2521.0020.0002] # ETHIOPIC SYLLABLE MU -121A ; [.2522.0020.0002] # ETHIOPIC SYLLABLE MI -121B ; [.2523.0020.0002] # ETHIOPIC SYLLABLE MAA -121C ; [.2524.0020.0002] # ETHIOPIC SYLLABLE MEE -121D ; [.2525.0020.0002] # ETHIOPIC SYLLABLE ME -121E ; [.2526.0020.0002] # ETHIOPIC SYLLABLE MO -121F ; [.2527.0020.0002] # ETHIOPIC SYLLABLE MWA -1380 ; [.2528.0020.0002] # ETHIOPIC SYLLABLE SEBATBEIT MWA -1381 ; [.2529.0020.0002] # ETHIOPIC SYLLABLE MWI -1382 ; [.252A.0020.0002] # ETHIOPIC SYLLABLE MWEE -1383 ; [.252B.0020.0002] # ETHIOPIC SYLLABLE MWE -2D81 ; [.252C.0020.0002] # ETHIOPIC SYLLABLE MOA -1220 ; [.252D.0020.0002] # ETHIOPIC SYLLABLE SZA -1221 ; [.252E.0020.0002] # ETHIOPIC SYLLABLE SZU -1222 ; [.252F.0020.0002] # ETHIOPIC SYLLABLE SZI -1223 ; [.2530.0020.0002] # ETHIOPIC SYLLABLE SZAA -1224 ; [.2531.0020.0002] # ETHIOPIC SYLLABLE SZEE -1225 ; [.2532.0020.0002] # ETHIOPIC SYLLABLE SZE -1226 ; [.2533.0020.0002] # ETHIOPIC SYLLABLE SZO -1227 ; [.2534.0020.0002] # ETHIOPIC SYLLABLE SZWA -1228 ; [.2535.0020.0002] # ETHIOPIC SYLLABLE RA -1229 ; [.2536.0020.0002] # ETHIOPIC SYLLABLE RU -122A ; [.2537.0020.0002] # ETHIOPIC SYLLABLE RI -122B ; [.2538.0020.0002] # ETHIOPIC SYLLABLE RAA -122C ; [.2539.0020.0002] # ETHIOPIC SYLLABLE REE -122D ; [.253A.0020.0002] # ETHIOPIC SYLLABLE RE -122E ; [.253B.0020.0002] # ETHIOPIC SYLLABLE RO -122F ; [.253C.0020.0002] # ETHIOPIC SYLLABLE RWA -2D82 ; [.253D.0020.0002] # ETHIOPIC SYLLABLE ROA -1230 ; [.253E.0020.0002] # ETHIOPIC SYLLABLE SA -1231 ; [.253F.0020.0002] # ETHIOPIC SYLLABLE SU -1232 ; [.2540.0020.0002] # ETHIOPIC SYLLABLE SI -1233 ; [.2541.0020.0002] # ETHIOPIC SYLLABLE SAA -1234 ; [.2542.0020.0002] # ETHIOPIC SYLLABLE SEE -1235 ; [.2543.0020.0002] # ETHIOPIC SYLLABLE SE -1236 ; [.2544.0020.0002] # ETHIOPIC SYLLABLE SO -1237 ; [.2545.0020.0002] # ETHIOPIC SYLLABLE SWA -2D83 ; [.2546.0020.0002] # ETHIOPIC SYLLABLE SOA -AB01 ; [.2547.0020.0002] # ETHIOPIC SYLLABLE TTHU -AB02 ; [.2548.0020.0002] # ETHIOPIC SYLLABLE TTHI -AB03 ; [.2549.0020.0002] # ETHIOPIC SYLLABLE TTHAA -AB04 ; [.254A.0020.0002] # ETHIOPIC SYLLABLE TTHEE -AB05 ; [.254B.0020.0002] # ETHIOPIC SYLLABLE TTHE -AB06 ; [.254C.0020.0002] # ETHIOPIC SYLLABLE TTHO -1238 ; [.254D.0020.0002] # ETHIOPIC SYLLABLE SHA -1239 ; [.254E.0020.0002] # ETHIOPIC SYLLABLE SHU -123A ; [.254F.0020.0002] # ETHIOPIC SYLLABLE SHI -123B ; [.2550.0020.0002] # ETHIOPIC SYLLABLE SHAA -123C ; [.2551.0020.0002] # ETHIOPIC SYLLABLE SHEE -123D ; [.2552.0020.0002] # ETHIOPIC SYLLABLE SHE -123E ; [.2553.0020.0002] # ETHIOPIC SYLLABLE SHO -123F ; [.2554.0020.0002] # ETHIOPIC SYLLABLE SHWA -2D84 ; [.2555.0020.0002] # ETHIOPIC SYLLABLE SHOA -1240 ; [.2556.0020.0002] # ETHIOPIC SYLLABLE QA -1241 ; [.2557.0020.0002] # ETHIOPIC SYLLABLE QU -1242 ; [.2558.0020.0002] # ETHIOPIC SYLLABLE QI -1243 ; [.2559.0020.0002] # ETHIOPIC SYLLABLE QAA -1244 ; [.255A.0020.0002] # ETHIOPIC SYLLABLE QEE -1245 ; [.255B.0020.0002] # ETHIOPIC SYLLABLE QE -1246 ; [.255C.0020.0002] # ETHIOPIC SYLLABLE QO -1247 ; [.255D.0020.0002] # ETHIOPIC SYLLABLE QOA -1248 ; [.255E.0020.0002] # ETHIOPIC SYLLABLE QWA -124A ; [.255F.0020.0002] # ETHIOPIC SYLLABLE QWI -124B ; [.2560.0020.0002] # ETHIOPIC SYLLABLE QWAA -124C ; [.2561.0020.0002] # ETHIOPIC SYLLABLE QWEE -124D ; [.2562.0020.0002] # ETHIOPIC SYLLABLE QWE -1250 ; [.2563.0020.0002] # ETHIOPIC SYLLABLE QHA -1251 ; [.2564.0020.0002] # ETHIOPIC SYLLABLE QHU -1252 ; [.2565.0020.0002] # ETHIOPIC SYLLABLE QHI -1253 ; [.2566.0020.0002] # ETHIOPIC SYLLABLE QHAA -1254 ; [.2567.0020.0002] # ETHIOPIC SYLLABLE QHEE -1255 ; [.2568.0020.0002] # ETHIOPIC SYLLABLE QHE -1256 ; [.2569.0020.0002] # ETHIOPIC SYLLABLE QHO -1258 ; [.256A.0020.0002] # ETHIOPIC SYLLABLE QHWA -125A ; [.256B.0020.0002] # ETHIOPIC SYLLABLE QHWI -125B ; [.256C.0020.0002] # ETHIOPIC SYLLABLE QHWAA -125C ; [.256D.0020.0002] # ETHIOPIC SYLLABLE QHWEE -125D ; [.256E.0020.0002] # ETHIOPIC SYLLABLE QHWE -1260 ; [.256F.0020.0002] # ETHIOPIC SYLLABLE BA -1261 ; [.2570.0020.0002] # ETHIOPIC SYLLABLE BU -1262 ; [.2571.0020.0002] # ETHIOPIC SYLLABLE BI -1263 ; [.2572.0020.0002] # ETHIOPIC SYLLABLE BAA -1264 ; [.2573.0020.0002] # ETHIOPIC SYLLABLE BEE -1265 ; [.2574.0020.0002] # ETHIOPIC SYLLABLE BE -1266 ; [.2575.0020.0002] # ETHIOPIC SYLLABLE BO -1267 ; [.2576.0020.0002] # ETHIOPIC SYLLABLE BWA -1384 ; [.2577.0020.0002] # ETHIOPIC SYLLABLE SEBATBEIT BWA -1385 ; [.2578.0020.0002] # ETHIOPIC SYLLABLE BWI -1386 ; [.2579.0020.0002] # ETHIOPIC SYLLABLE BWEE -1387 ; [.257A.0020.0002] # ETHIOPIC SYLLABLE BWE -2D85 ; [.257B.0020.0002] # ETHIOPIC SYLLABLE BOA -1268 ; [.257C.0020.0002] # ETHIOPIC SYLLABLE VA -1269 ; [.257D.0020.0002] # ETHIOPIC SYLLABLE VU -126A ; [.257E.0020.0002] # ETHIOPIC SYLLABLE VI -126B ; [.257F.0020.0002] # ETHIOPIC SYLLABLE VAA -126C ; [.2580.0020.0002] # ETHIOPIC SYLLABLE VEE -126D ; [.2581.0020.0002] # ETHIOPIC SYLLABLE VE -126E ; [.2582.0020.0002] # ETHIOPIC SYLLABLE VO -126F ; [.2583.0020.0002] # ETHIOPIC SYLLABLE VWA -1270 ; [.2584.0020.0002] # ETHIOPIC SYLLABLE TA -1271 ; [.2585.0020.0002] # ETHIOPIC SYLLABLE TU -1272 ; [.2586.0020.0002] # ETHIOPIC SYLLABLE TI -1273 ; [.2587.0020.0002] # ETHIOPIC SYLLABLE TAA -1274 ; [.2588.0020.0002] # ETHIOPIC SYLLABLE TEE -1275 ; [.2589.0020.0002] # ETHIOPIC SYLLABLE TE -1276 ; [.258A.0020.0002] # ETHIOPIC SYLLABLE TO -1277 ; [.258B.0020.0002] # ETHIOPIC SYLLABLE TWA -2D86 ; [.258C.0020.0002] # ETHIOPIC SYLLABLE TOA -1278 ; [.258D.0020.0002] # ETHIOPIC SYLLABLE CA -1279 ; [.258E.0020.0002] # ETHIOPIC SYLLABLE CU -127A ; [.258F.0020.0002] # ETHIOPIC SYLLABLE CI -127B ; [.2590.0020.0002] # ETHIOPIC SYLLABLE CAA -127C ; [.2591.0020.0002] # ETHIOPIC SYLLABLE CEE -127D ; [.2592.0020.0002] # ETHIOPIC SYLLABLE CE -127E ; [.2593.0020.0002] # ETHIOPIC SYLLABLE CO -127F ; [.2594.0020.0002] # ETHIOPIC SYLLABLE CWA -2D87 ; [.2595.0020.0002] # ETHIOPIC SYLLABLE COA -1280 ; [.2596.0020.0002] # ETHIOPIC SYLLABLE XA -1281 ; [.2597.0020.0002] # ETHIOPIC SYLLABLE XU -1282 ; [.2598.0020.0002] # ETHIOPIC SYLLABLE XI -1283 ; [.2599.0020.0002] # ETHIOPIC SYLLABLE XAA -1284 ; [.259A.0020.0002] # ETHIOPIC SYLLABLE XEE -1285 ; [.259B.0020.0002] # ETHIOPIC SYLLABLE XE -1286 ; [.259C.0020.0002] # ETHIOPIC SYLLABLE XO -1287 ; [.259D.0020.0002] # ETHIOPIC SYLLABLE XOA -1288 ; [.259E.0020.0002] # ETHIOPIC SYLLABLE XWA -128A ; [.259F.0020.0002] # ETHIOPIC SYLLABLE XWI -128B ; [.25A0.0020.0002] # ETHIOPIC SYLLABLE XWAA -128C ; [.25A1.0020.0002] # ETHIOPIC SYLLABLE XWEE -128D ; [.25A2.0020.0002] # ETHIOPIC SYLLABLE XWE -1290 ; [.25A3.0020.0002] # ETHIOPIC SYLLABLE NA -1291 ; [.25A4.0020.0002] # ETHIOPIC SYLLABLE NU -1292 ; [.25A5.0020.0002] # ETHIOPIC SYLLABLE NI -1293 ; [.25A6.0020.0002] # ETHIOPIC SYLLABLE NAA -1294 ; [.25A7.0020.0002] # ETHIOPIC SYLLABLE NEE -1295 ; [.25A8.0020.0002] # ETHIOPIC SYLLABLE NE -1296 ; [.25A9.0020.0002] # ETHIOPIC SYLLABLE NO -1297 ; [.25AA.0020.0002] # ETHIOPIC SYLLABLE NWA -2D88 ; [.25AB.0020.0002] # ETHIOPIC SYLLABLE NOA -1298 ; [.25AC.0020.0002] # ETHIOPIC SYLLABLE NYA -1299 ; [.25AD.0020.0002] # ETHIOPIC SYLLABLE NYU -129A ; [.25AE.0020.0002] # ETHIOPIC SYLLABLE NYI -129B ; [.25AF.0020.0002] # ETHIOPIC SYLLABLE NYAA -129C ; [.25B0.0020.0002] # ETHIOPIC SYLLABLE NYEE -129D ; [.25B1.0020.0002] # ETHIOPIC SYLLABLE NYE -129E ; [.25B2.0020.0002] # ETHIOPIC SYLLABLE NYO -129F ; [.25B3.0020.0002] # ETHIOPIC SYLLABLE NYWA -2D89 ; [.25B4.0020.0002] # ETHIOPIC SYLLABLE NYOA -12A0 ; [.25B5.0020.0002] # ETHIOPIC SYLLABLE GLOTTAL A -12A1 ; [.25B6.0020.0002] # ETHIOPIC SYLLABLE GLOTTAL U -12A2 ; [.25B7.0020.0002] # ETHIOPIC SYLLABLE GLOTTAL I -12A3 ; [.25B8.0020.0002] # ETHIOPIC SYLLABLE GLOTTAL AA -12A4 ; [.25B9.0020.0002] # ETHIOPIC SYLLABLE GLOTTAL EE -12A5 ; [.25BA.0020.0002] # ETHIOPIC SYLLABLE GLOTTAL E -12A6 ; [.25BB.0020.0002] # ETHIOPIC SYLLABLE GLOTTAL O -12A7 ; [.25BC.0020.0002] # ETHIOPIC SYLLABLE GLOTTAL WA -2D8A ; [.25BD.0020.0002] # ETHIOPIC SYLLABLE GLOTTAL OA -12A8 ; [.25BE.0020.0002] # ETHIOPIC SYLLABLE KA -12A9 ; [.25BF.0020.0002] # ETHIOPIC SYLLABLE KU -12AA ; [.25C0.0020.0002] # ETHIOPIC SYLLABLE KI -12AB ; [.25C1.0020.0002] # ETHIOPIC SYLLABLE KAA -12AC ; [.25C2.0020.0002] # ETHIOPIC SYLLABLE KEE -12AD ; [.25C3.0020.0002] # ETHIOPIC SYLLABLE KE -12AE ; [.25C4.0020.0002] # ETHIOPIC SYLLABLE KO -12AF ; [.25C5.0020.0002] # ETHIOPIC SYLLABLE KOA -12B0 ; [.25C6.0020.0002] # ETHIOPIC SYLLABLE KWA -12B2 ; [.25C7.0020.0002] # ETHIOPIC SYLLABLE KWI -12B3 ; [.25C8.0020.0002] # ETHIOPIC SYLLABLE KWAA -12B4 ; [.25C9.0020.0002] # ETHIOPIC SYLLABLE KWEE -12B5 ; [.25CA.0020.0002] # ETHIOPIC SYLLABLE KWE -12B8 ; [.25CB.0020.0002] # ETHIOPIC SYLLABLE KXA -12B9 ; [.25CC.0020.0002] # ETHIOPIC SYLLABLE KXU -12BA ; [.25CD.0020.0002] # ETHIOPIC SYLLABLE KXI -12BB ; [.25CE.0020.0002] # ETHIOPIC SYLLABLE KXAA -12BC ; [.25CF.0020.0002] # ETHIOPIC SYLLABLE KXEE -12BD ; [.25D0.0020.0002] # ETHIOPIC SYLLABLE KXE -12BE ; [.25D1.0020.0002] # ETHIOPIC SYLLABLE KXO -12C0 ; [.25D2.0020.0002] # ETHIOPIC SYLLABLE KXWA -12C2 ; [.25D3.0020.0002] # ETHIOPIC SYLLABLE KXWI -12C3 ; [.25D4.0020.0002] # ETHIOPIC SYLLABLE KXWAA -12C4 ; [.25D5.0020.0002] # ETHIOPIC SYLLABLE KXWEE -12C5 ; [.25D6.0020.0002] # ETHIOPIC SYLLABLE KXWE -12C8 ; [.25D7.0020.0002] # ETHIOPIC SYLLABLE WA -12C9 ; [.25D8.0020.0002] # ETHIOPIC SYLLABLE WU -12CA ; [.25D9.0020.0002] # ETHIOPIC SYLLABLE WI -12CB ; [.25DA.0020.0002] # ETHIOPIC SYLLABLE WAA -12CC ; [.25DB.0020.0002] # ETHIOPIC SYLLABLE WEE -12CD ; [.25DC.0020.0002] # ETHIOPIC SYLLABLE WE -12CE ; [.25DD.0020.0002] # ETHIOPIC SYLLABLE WO -12CF ; [.25DE.0020.0002] # ETHIOPIC SYLLABLE WOA -12D0 ; [.25DF.0020.0002] # ETHIOPIC SYLLABLE PHARYNGEAL A -12D1 ; [.25E0.0020.0002] # ETHIOPIC SYLLABLE PHARYNGEAL U -12D2 ; [.25E1.0020.0002] # ETHIOPIC SYLLABLE PHARYNGEAL I -12D3 ; [.25E2.0020.0002] # ETHIOPIC SYLLABLE PHARYNGEAL AA -12D4 ; [.25E3.0020.0002] # ETHIOPIC SYLLABLE PHARYNGEAL EE -12D5 ; [.25E4.0020.0002] # ETHIOPIC SYLLABLE PHARYNGEAL E -12D6 ; [.25E5.0020.0002] # ETHIOPIC SYLLABLE PHARYNGEAL O -12D8 ; [.25E6.0020.0002] # ETHIOPIC SYLLABLE ZA -12D9 ; [.25E7.0020.0002] # ETHIOPIC SYLLABLE ZU -12DA ; [.25E8.0020.0002] # ETHIOPIC SYLLABLE ZI -12DB ; [.25E9.0020.0002] # ETHIOPIC SYLLABLE ZAA -12DC ; [.25EA.0020.0002] # ETHIOPIC SYLLABLE ZEE -12DD ; [.25EB.0020.0002] # ETHIOPIC SYLLABLE ZE -12DE ; [.25EC.0020.0002] # ETHIOPIC SYLLABLE ZO -12DF ; [.25ED.0020.0002] # ETHIOPIC SYLLABLE ZWA -2D8B ; [.25EE.0020.0002] # ETHIOPIC SYLLABLE ZOA -AB11 ; [.25EF.0020.0002] # ETHIOPIC SYLLABLE DZU -AB12 ; [.25F0.0020.0002] # ETHIOPIC SYLLABLE DZI -AB13 ; [.25F1.0020.0002] # ETHIOPIC SYLLABLE DZAA -AB14 ; [.25F2.0020.0002] # ETHIOPIC SYLLABLE DZEE -AB15 ; [.25F3.0020.0002] # ETHIOPIC SYLLABLE DZE -AB16 ; [.25F4.0020.0002] # ETHIOPIC SYLLABLE DZO -12E0 ; [.25F5.0020.0002] # ETHIOPIC SYLLABLE ZHA -12E1 ; [.25F6.0020.0002] # ETHIOPIC SYLLABLE ZHU -12E2 ; [.25F7.0020.0002] # ETHIOPIC SYLLABLE ZHI -12E3 ; [.25F8.0020.0002] # ETHIOPIC SYLLABLE ZHAA -12E4 ; [.25F9.0020.0002] # ETHIOPIC SYLLABLE ZHEE -12E5 ; [.25FA.0020.0002] # ETHIOPIC SYLLABLE ZHE -12E6 ; [.25FB.0020.0002] # ETHIOPIC SYLLABLE ZHO -12E7 ; [.25FC.0020.0002] # ETHIOPIC SYLLABLE ZHWA -12E8 ; [.25FD.0020.0002] # ETHIOPIC SYLLABLE YA -12E9 ; [.25FE.0020.0002] # ETHIOPIC SYLLABLE YU -12EA ; [.25FF.0020.0002] # ETHIOPIC SYLLABLE YI -12EB ; [.2600.0020.0002] # ETHIOPIC SYLLABLE YAA -12EC ; [.2601.0020.0002] # ETHIOPIC SYLLABLE YEE -12ED ; [.2602.0020.0002] # ETHIOPIC SYLLABLE YE -12EE ; [.2603.0020.0002] # ETHIOPIC SYLLABLE YO -12EF ; [.2604.0020.0002] # ETHIOPIC SYLLABLE YOA -12F0 ; [.2605.0020.0002] # ETHIOPIC SYLLABLE DA -12F1 ; [.2606.0020.0002] # ETHIOPIC SYLLABLE DU -12F2 ; [.2607.0020.0002] # ETHIOPIC SYLLABLE DI -12F3 ; [.2608.0020.0002] # ETHIOPIC SYLLABLE DAA -12F4 ; [.2609.0020.0002] # ETHIOPIC SYLLABLE DEE -12F5 ; [.260A.0020.0002] # ETHIOPIC SYLLABLE DE -12F6 ; [.260B.0020.0002] # ETHIOPIC SYLLABLE DO -12F7 ; [.260C.0020.0002] # ETHIOPIC SYLLABLE DWA -2D8C ; [.260D.0020.0002] # ETHIOPIC SYLLABLE DOA -AB09 ; [.260E.0020.0002] # ETHIOPIC SYLLABLE DDHU -AB0A ; [.260F.0020.0002] # ETHIOPIC SYLLABLE DDHI -AB0B ; [.2610.0020.0002] # ETHIOPIC SYLLABLE DDHAA -AB0C ; [.2611.0020.0002] # ETHIOPIC SYLLABLE DDHEE -AB0D ; [.2612.0020.0002] # ETHIOPIC SYLLABLE DDHE -AB0E ; [.2613.0020.0002] # ETHIOPIC SYLLABLE DDHO -12F8 ; [.2614.0020.0002] # ETHIOPIC SYLLABLE DDA -12F9 ; [.2615.0020.0002] # ETHIOPIC SYLLABLE DDU -12FA ; [.2616.0020.0002] # ETHIOPIC SYLLABLE DDI -12FB ; [.2617.0020.0002] # ETHIOPIC SYLLABLE DDAA -12FC ; [.2618.0020.0002] # ETHIOPIC SYLLABLE DDEE -12FD ; [.2619.0020.0002] # ETHIOPIC SYLLABLE DDE -12FE ; [.261A.0020.0002] # ETHIOPIC SYLLABLE DDO -12FF ; [.261B.0020.0002] # ETHIOPIC SYLLABLE DDWA -2D8D ; [.261C.0020.0002] # ETHIOPIC SYLLABLE DDOA -1300 ; [.261D.0020.0002] # ETHIOPIC SYLLABLE JA -1301 ; [.261E.0020.0002] # ETHIOPIC SYLLABLE JU -1302 ; [.261F.0020.0002] # ETHIOPIC SYLLABLE JI -1303 ; [.2620.0020.0002] # ETHIOPIC SYLLABLE JAA -1304 ; [.2621.0020.0002] # ETHIOPIC SYLLABLE JEE -1305 ; [.2622.0020.0002] # ETHIOPIC SYLLABLE JE -1306 ; [.2623.0020.0002] # ETHIOPIC SYLLABLE JO -1307 ; [.2624.0020.0002] # ETHIOPIC SYLLABLE JWA -2D8E ; [.2625.0020.0002] # ETHIOPIC SYLLABLE JOA -1308 ; [.2626.0020.0002] # ETHIOPIC SYLLABLE GA -1309 ; [.2627.0020.0002] # ETHIOPIC SYLLABLE GU -130A ; [.2628.0020.0002] # ETHIOPIC SYLLABLE GI -130B ; [.2629.0020.0002] # ETHIOPIC SYLLABLE GAA -130C ; [.262A.0020.0002] # ETHIOPIC SYLLABLE GEE -130D ; [.262B.0020.0002] # ETHIOPIC SYLLABLE GE -130E ; [.262C.0020.0002] # ETHIOPIC SYLLABLE GO -130F ; [.262D.0020.0002] # ETHIOPIC SYLLABLE GOA -1310 ; [.262E.0020.0002] # ETHIOPIC SYLLABLE GWA -1312 ; [.262F.0020.0002] # ETHIOPIC SYLLABLE GWI -1313 ; [.2630.0020.0002] # ETHIOPIC SYLLABLE GWAA -1314 ; [.2631.0020.0002] # ETHIOPIC SYLLABLE GWEE -1315 ; [.2632.0020.0002] # ETHIOPIC SYLLABLE GWE -1318 ; [.2633.0020.0002] # ETHIOPIC SYLLABLE GGA -1319 ; [.2634.0020.0002] # ETHIOPIC SYLLABLE GGU -131A ; [.2635.0020.0002] # ETHIOPIC SYLLABLE GGI -131B ; [.2636.0020.0002] # ETHIOPIC SYLLABLE GGAA -131C ; [.2637.0020.0002] # ETHIOPIC SYLLABLE GGEE -131D ; [.2638.0020.0002] # ETHIOPIC SYLLABLE GGE -131E ; [.2639.0020.0002] # ETHIOPIC SYLLABLE GGO -131F ; [.263A.0020.0002] # ETHIOPIC SYLLABLE GGWAA -2D93 ; [.263B.0020.0002] # ETHIOPIC SYLLABLE GGWA -2D94 ; [.263C.0020.0002] # ETHIOPIC SYLLABLE GGWI -2D95 ; [.263D.0020.0002] # ETHIOPIC SYLLABLE GGWEE -2D96 ; [.263E.0020.0002] # ETHIOPIC SYLLABLE GGWE -1320 ; [.263F.0020.0002] # ETHIOPIC SYLLABLE THA -1321 ; [.2640.0020.0002] # ETHIOPIC SYLLABLE THU -1322 ; [.2641.0020.0002] # ETHIOPIC SYLLABLE THI -1323 ; [.2642.0020.0002] # ETHIOPIC SYLLABLE THAA -1324 ; [.2643.0020.0002] # ETHIOPIC SYLLABLE THEE -1325 ; [.2644.0020.0002] # ETHIOPIC SYLLABLE THE -1326 ; [.2645.0020.0002] # ETHIOPIC SYLLABLE THO -1327 ; [.2646.0020.0002] # ETHIOPIC SYLLABLE THWA -2D8F ; [.2647.0020.0002] # ETHIOPIC SYLLABLE THOA -1328 ; [.2648.0020.0002] # ETHIOPIC SYLLABLE CHA -1329 ; [.2649.0020.0002] # ETHIOPIC SYLLABLE CHU -132A ; [.264A.0020.0002] # ETHIOPIC SYLLABLE CHI -132B ; [.264B.0020.0002] # ETHIOPIC SYLLABLE CHAA -132C ; [.264C.0020.0002] # ETHIOPIC SYLLABLE CHEE -132D ; [.264D.0020.0002] # ETHIOPIC SYLLABLE CHE -132E ; [.264E.0020.0002] # ETHIOPIC SYLLABLE CHO -132F ; [.264F.0020.0002] # ETHIOPIC SYLLABLE CHWA -2D90 ; [.2650.0020.0002] # ETHIOPIC SYLLABLE CHOA -AB20 ; [.2651.0020.0002] # ETHIOPIC SYLLABLE CCHHA -AB21 ; [.2652.0020.0002] # ETHIOPIC SYLLABLE CCHHU -AB22 ; [.2653.0020.0002] # ETHIOPIC SYLLABLE CCHHI -AB23 ; [.2654.0020.0002] # ETHIOPIC SYLLABLE CCHHAA -AB24 ; [.2655.0020.0002] # ETHIOPIC SYLLABLE CCHHEE -AB25 ; [.2656.0020.0002] # ETHIOPIC SYLLABLE CCHHE -AB26 ; [.2657.0020.0002] # ETHIOPIC SYLLABLE CCHHO -1330 ; [.2658.0020.0002] # ETHIOPIC SYLLABLE PHA -1331 ; [.2659.0020.0002] # ETHIOPIC SYLLABLE PHU -1332 ; [.265A.0020.0002] # ETHIOPIC SYLLABLE PHI -1333 ; [.265B.0020.0002] # ETHIOPIC SYLLABLE PHAA -1334 ; [.265C.0020.0002] # ETHIOPIC SYLLABLE PHEE -1335 ; [.265D.0020.0002] # ETHIOPIC SYLLABLE PHE -1336 ; [.265E.0020.0002] # ETHIOPIC SYLLABLE PHO -1337 ; [.265F.0020.0002] # ETHIOPIC SYLLABLE PHWA -2D91 ; [.2660.0020.0002] # ETHIOPIC SYLLABLE PHOA -1338 ; [.2661.0020.0002] # ETHIOPIC SYLLABLE TSA -1339 ; [.2662.0020.0002] # ETHIOPIC SYLLABLE TSU -133A ; [.2663.0020.0002] # ETHIOPIC SYLLABLE TSI -133B ; [.2664.0020.0002] # ETHIOPIC SYLLABLE TSAA -133C ; [.2665.0020.0002] # ETHIOPIC SYLLABLE TSEE -133D ; [.2666.0020.0002] # ETHIOPIC SYLLABLE TSE -133E ; [.2667.0020.0002] # ETHIOPIC SYLLABLE TSO -133F ; [.2668.0020.0002] # ETHIOPIC SYLLABLE TSWA -AB28 ; [.2669.0020.0002] # ETHIOPIC SYLLABLE BBA -AB29 ; [.266A.0020.0002] # ETHIOPIC SYLLABLE BBU -AB2A ; [.266B.0020.0002] # ETHIOPIC SYLLABLE BBI -AB2B ; [.266C.0020.0002] # ETHIOPIC SYLLABLE BBAA -AB2C ; [.266D.0020.0002] # ETHIOPIC SYLLABLE BBEE -AB2D ; [.266E.0020.0002] # ETHIOPIC SYLLABLE BBE -AB2E ; [.266F.0020.0002] # ETHIOPIC SYLLABLE BBO -1340 ; [.2670.0020.0002] # ETHIOPIC SYLLABLE TZA -1341 ; [.2671.0020.0002] # ETHIOPIC SYLLABLE TZU -1342 ; [.2672.0020.0002] # ETHIOPIC SYLLABLE TZI -1343 ; [.2673.0020.0002] # ETHIOPIC SYLLABLE TZAA -1344 ; [.2674.0020.0002] # ETHIOPIC SYLLABLE TZEE -1345 ; [.2675.0020.0002] # ETHIOPIC SYLLABLE TZE -1346 ; [.2676.0020.0002] # ETHIOPIC SYLLABLE TZO -1347 ; [.2677.0020.0002] # ETHIOPIC SYLLABLE TZOA -1348 ; [.2678.0020.0002] # ETHIOPIC SYLLABLE FA -1349 ; [.2679.0020.0002] # ETHIOPIC SYLLABLE FU -134A ; [.267A.0020.0002] # ETHIOPIC SYLLABLE FI -134B ; [.267B.0020.0002] # ETHIOPIC SYLLABLE FAA -134C ; [.267C.0020.0002] # ETHIOPIC SYLLABLE FEE -134D ; [.267D.0020.0002] # ETHIOPIC SYLLABLE FE -134E ; [.267E.0020.0002] # ETHIOPIC SYLLABLE FO -134F ; [.267F.0020.0002] # ETHIOPIC SYLLABLE FWA -1388 ; [.2680.0020.0002] # ETHIOPIC SYLLABLE SEBATBEIT FWA -1389 ; [.2681.0020.0002] # ETHIOPIC SYLLABLE FWI -138A ; [.2682.0020.0002] # ETHIOPIC SYLLABLE FWEE -138B ; [.2683.0020.0002] # ETHIOPIC SYLLABLE FWE -1350 ; [.2684.0020.0002] # ETHIOPIC SYLLABLE PA -1351 ; [.2685.0020.0002] # ETHIOPIC SYLLABLE PU -1352 ; [.2686.0020.0002] # ETHIOPIC SYLLABLE PI -1353 ; [.2687.0020.0002] # ETHIOPIC SYLLABLE PAA -1354 ; [.2688.0020.0002] # ETHIOPIC SYLLABLE PEE -1355 ; [.2689.0020.0002] # ETHIOPIC SYLLABLE PE -1356 ; [.268A.0020.0002] # ETHIOPIC SYLLABLE PO -1357 ; [.268B.0020.0002] # ETHIOPIC SYLLABLE PWA -138C ; [.268C.0020.0002] # ETHIOPIC SYLLABLE SEBATBEIT PWA -138D ; [.268D.0020.0002] # ETHIOPIC SYLLABLE PWI -138E ; [.268E.0020.0002] # ETHIOPIC SYLLABLE PWEE -138F ; [.268F.0020.0002] # ETHIOPIC SYLLABLE PWE -2D92 ; [.2690.0020.0002] # ETHIOPIC SYLLABLE POA -1358 ; [.2691.0020.0002] # ETHIOPIC SYLLABLE RYA -1359 ; [.2692.0020.0002] # ETHIOPIC SYLLABLE MYA -135A ; [.2693.0020.0002] # ETHIOPIC SYLLABLE FYA -2DA0 ; [.2694.0020.0002] # ETHIOPIC SYLLABLE SSA -2DA1 ; [.2695.0020.0002] # ETHIOPIC SYLLABLE SSU -2DA2 ; [.2696.0020.0002] # ETHIOPIC SYLLABLE SSI -2DA3 ; [.2697.0020.0002] # ETHIOPIC SYLLABLE SSAA -2DA4 ; [.2698.0020.0002] # ETHIOPIC SYLLABLE SSEE -2DA5 ; [.2699.0020.0002] # ETHIOPIC SYLLABLE SSE -2DA6 ; [.269A.0020.0002] # ETHIOPIC SYLLABLE SSO -2DA8 ; [.269B.0020.0002] # ETHIOPIC SYLLABLE CCA -2DA9 ; [.269C.0020.0002] # ETHIOPIC SYLLABLE CCU -2DAA ; [.269D.0020.0002] # ETHIOPIC SYLLABLE CCI -2DAB ; [.269E.0020.0002] # ETHIOPIC SYLLABLE CCAA -2DAC ; [.269F.0020.0002] # ETHIOPIC SYLLABLE CCEE -2DAD ; [.26A0.0020.0002] # ETHIOPIC SYLLABLE CCE -2DAE ; [.26A1.0020.0002] # ETHIOPIC SYLLABLE CCO -2DB0 ; [.26A2.0020.0002] # ETHIOPIC SYLLABLE ZZA -2DB1 ; [.26A3.0020.0002] # ETHIOPIC SYLLABLE ZZU -2DB2 ; [.26A4.0020.0002] # ETHIOPIC SYLLABLE ZZI -2DB3 ; [.26A5.0020.0002] # ETHIOPIC SYLLABLE ZZAA -2DB4 ; [.26A6.0020.0002] # ETHIOPIC SYLLABLE ZZEE -2DB5 ; [.26A7.0020.0002] # ETHIOPIC SYLLABLE ZZE -2DB6 ; [.26A8.0020.0002] # ETHIOPIC SYLLABLE ZZO -2DB8 ; [.26A9.0020.0002] # ETHIOPIC SYLLABLE CCHA -2DB9 ; [.26AA.0020.0002] # ETHIOPIC SYLLABLE CCHU -2DBA ; [.26AB.0020.0002] # ETHIOPIC SYLLABLE CCHI -2DBB ; [.26AC.0020.0002] # ETHIOPIC SYLLABLE CCHAA -2DBC ; [.26AD.0020.0002] # ETHIOPIC SYLLABLE CCHEE -2DBD ; [.26AE.0020.0002] # ETHIOPIC SYLLABLE CCHE -2DBE ; [.26AF.0020.0002] # ETHIOPIC SYLLABLE CCHO -2DC0 ; [.26B0.0020.0002] # ETHIOPIC SYLLABLE QYA -2DC1 ; [.26B1.0020.0002] # ETHIOPIC SYLLABLE QYU -2DC2 ; [.26B2.0020.0002] # ETHIOPIC SYLLABLE QYI -2DC3 ; [.26B3.0020.0002] # ETHIOPIC SYLLABLE QYAA -2DC4 ; [.26B4.0020.0002] # ETHIOPIC SYLLABLE QYEE -2DC5 ; [.26B5.0020.0002] # ETHIOPIC SYLLABLE QYE -2DC6 ; [.26B6.0020.0002] # ETHIOPIC SYLLABLE QYO -2DC8 ; [.26B7.0020.0002] # ETHIOPIC SYLLABLE KYA -2DC9 ; [.26B8.0020.0002] # ETHIOPIC SYLLABLE KYU -2DCA ; [.26B9.0020.0002] # ETHIOPIC SYLLABLE KYI -2DCB ; [.26BA.0020.0002] # ETHIOPIC SYLLABLE KYAA -2DCC ; [.26BB.0020.0002] # ETHIOPIC SYLLABLE KYEE -2DCD ; [.26BC.0020.0002] # ETHIOPIC SYLLABLE KYE -2DCE ; [.26BD.0020.0002] # ETHIOPIC SYLLABLE KYO -2DD0 ; [.26BE.0020.0002] # ETHIOPIC SYLLABLE XYA -2DD1 ; [.26BF.0020.0002] # ETHIOPIC SYLLABLE XYU -2DD2 ; [.26C0.0020.0002] # ETHIOPIC SYLLABLE XYI -2DD3 ; [.26C1.0020.0002] # ETHIOPIC SYLLABLE XYAA -2DD4 ; [.26C2.0020.0002] # ETHIOPIC SYLLABLE XYEE -2DD5 ; [.26C3.0020.0002] # ETHIOPIC SYLLABLE XYE -2DD6 ; [.26C4.0020.0002] # ETHIOPIC SYLLABLE XYO -2DD8 ; [.26C5.0020.0002] # ETHIOPIC SYLLABLE GYA -2DD9 ; [.26C6.0020.0002] # ETHIOPIC SYLLABLE GYU -2DDA ; [.26C7.0020.0002] # ETHIOPIC SYLLABLE GYI -2DDB ; [.26C8.0020.0002] # ETHIOPIC SYLLABLE GYAA -2DDC ; [.26C9.0020.0002] # ETHIOPIC SYLLABLE GYEE -2DDD ; [.26CA.0020.0002] # ETHIOPIC SYLLABLE GYE -2DDE ; [.26CB.0020.0002] # ETHIOPIC SYLLABLE GYO -0950 ; [.26CC.0020.0002] # DEVANAGARI OM -A8FD ; [.26CD.0020.0002] # DEVANAGARI JAIN OM -0972 ; [.26CE.0020.0002] # DEVANAGARI LETTER CANDRA A -0904 ; [.26CF.0020.0002] # DEVANAGARI LETTER SHORT A -0905 ; [.26D0.0020.0002] # DEVANAGARI LETTER A -0906 ; [.26D1.0020.0002] # DEVANAGARI LETTER AA -0973 ; [.26D2.0020.0002] # DEVANAGARI LETTER OE -0974 ; [.26D3.0020.0002] # DEVANAGARI LETTER OOE -0975 ; [.26D4.0020.0002] # DEVANAGARI LETTER AW -0976 ; [.26D5.0020.0002] # DEVANAGARI LETTER UE -0977 ; [.26D6.0020.0002] # DEVANAGARI LETTER UUE -0907 ; [.26D7.0020.0002] # DEVANAGARI LETTER I -0908 ; [.26D8.0020.0002] # DEVANAGARI LETTER II -0909 ; [.26D9.0020.0002] # DEVANAGARI LETTER U -090A ; [.26DA.0020.0002] # DEVANAGARI LETTER UU -090B ; [.26DB.0020.0002] # DEVANAGARI LETTER VOCALIC R -0960 ; [.26DC.0020.0002] # DEVANAGARI LETTER VOCALIC RR -090C ; [.26DD.0020.0002] # DEVANAGARI LETTER VOCALIC L -0961 ; [.26DE.0020.0002] # DEVANAGARI LETTER VOCALIC LL -090D ; [.26DF.0020.0002] # DEVANAGARI LETTER CANDRA E -090E ; [.26E0.0020.0002] # DEVANAGARI LETTER SHORT E -090F ; [.26E1.0020.0002] # DEVANAGARI LETTER E -0910 ; [.26E2.0020.0002] # DEVANAGARI LETTER AI -0911 ; [.26E3.0020.0002] # DEVANAGARI LETTER CANDRA O -0912 ; [.26E4.0020.0002] # DEVANAGARI LETTER SHORT O -0913 ; [.26E5.0020.0002] # DEVANAGARI LETTER O -0914 ; [.26E6.0020.0002] # DEVANAGARI LETTER AU -0915 ; [.26E7.0020.0002] # DEVANAGARI LETTER KA -0958 ; [.26E7.0020.0002][.0000.00C2.0002] # DEVANAGARI LETTER QA -0916 ; [.26E8.0020.0002] # DEVANAGARI LETTER KHA -0959 ; [.26E8.0020.0002][.0000.00C2.0002] # DEVANAGARI LETTER KHHA -0917 ; [.26E9.0020.0002] # DEVANAGARI LETTER GA -095A ; [.26E9.0020.0002][.0000.00C2.0002] # DEVANAGARI LETTER GHHA -097B ; [.26EA.0020.0002] # DEVANAGARI LETTER GGA -0918 ; [.26EB.0020.0002] # DEVANAGARI LETTER GHA -0919 ; [.26EC.0020.0002] # DEVANAGARI LETTER NGA -091A ; [.26ED.0020.0002] # DEVANAGARI LETTER CA -091B ; [.26EE.0020.0002] # DEVANAGARI LETTER CHA -091C ; [.26EF.0020.0002] # DEVANAGARI LETTER JA -095B ; [.26EF.0020.0002][.0000.00C2.0002] # DEVANAGARI LETTER ZA -0979 ; [.26F0.0020.0002] # DEVANAGARI LETTER ZHA -097C ; [.26F1.0020.0002] # DEVANAGARI LETTER JJA -091D ; [.26F2.0020.0002] # DEVANAGARI LETTER JHA -091E ; [.26F3.0020.0002] # DEVANAGARI LETTER NYA -091F ; [.26F4.0020.0002] # DEVANAGARI LETTER TTA -0920 ; [.26F5.0020.0002] # DEVANAGARI LETTER TTHA -0978 ; [.26F6.0020.0002] # DEVANAGARI LETTER MARWARI DDA -0921 ; [.26F7.0020.0002] # DEVANAGARI LETTER DDA -095C ; [.26F7.0020.0002][.0000.00C2.0002] # DEVANAGARI LETTER DDDHA -097E ; [.26F8.0020.0002] # DEVANAGARI LETTER DDDA -0922 ; [.26F9.0020.0002] # DEVANAGARI LETTER DDHA -095D ; [.26F9.0020.0002][.0000.00C2.0002] # DEVANAGARI LETTER RHA -0923 ; [.26FA.0020.0002] # DEVANAGARI LETTER NNA -0924 ; [.26FB.0020.0002] # DEVANAGARI LETTER TA -0925 ; [.26FC.0020.0002] # DEVANAGARI LETTER THA -0926 ; [.26FD.0020.0002] # DEVANAGARI LETTER DA -0927 ; [.26FE.0020.0002] # DEVANAGARI LETTER DHA -0928 ; [.26FF.0020.0002] # DEVANAGARI LETTER NA -0929 ; [.26FF.0020.0002][.0000.00C2.0002] # DEVANAGARI LETTER NNNA -092A ; [.2700.0020.0002] # DEVANAGARI LETTER PA -092B ; [.2701.0020.0002] # DEVANAGARI LETTER PHA -095E ; [.2701.0020.0002][.0000.00C2.0002] # DEVANAGARI LETTER FA -092C ; [.2702.0020.0002] # DEVANAGARI LETTER BA -097F ; [.2703.0020.0002] # DEVANAGARI LETTER BBA -092D ; [.2704.0020.0002] # DEVANAGARI LETTER BHA -092E ; [.2705.0020.0002] # DEVANAGARI LETTER MA -092F ; [.2706.0020.0002] # DEVANAGARI LETTER YA -095F ; [.2706.0020.0002][.0000.00C2.0002] # DEVANAGARI LETTER YYA -097A ; [.2707.0020.0002] # DEVANAGARI LETTER HEAVY YA -0930 ; [.2708.0020.0002] # DEVANAGARI LETTER RA -0931 ; [.2708.0020.0002][.0000.00C2.0002] # DEVANAGARI LETTER RRA -0932 ; [.2709.0020.0002] # DEVANAGARI LETTER LA -0933 ; [.270A.0020.0002] # DEVANAGARI LETTER LLA -0934 ; [.270A.0020.0002][.0000.00C2.0002] # DEVANAGARI LETTER LLLA -0935 ; [.270B.0020.0002] # DEVANAGARI LETTER VA -0936 ; [.270C.0020.0002] # DEVANAGARI LETTER SHA -0937 ; [.270D.0020.0002] # DEVANAGARI LETTER SSA -0938 ; [.270E.0020.0002] # DEVANAGARI LETTER SA -0939 ; [.270F.0020.0002] # DEVANAGARI LETTER HA -093D ; [.2710.0020.0002] # DEVANAGARI SIGN AVAGRAHA -097D ; [.2711.0020.0002] # DEVANAGARI LETTER GLOTTAL STOP -1CE9 ; [.2712.0020.0002] # VEDIC SIGN ANUSVARA ANTARGOMUKHA -1CEA ; [.2712.0020.0004] # VEDIC SIGN ANUSVARA BAHIRGOMUKHA -1CEB ; [.2712.0020.0004] # VEDIC SIGN ANUSVARA VAMAGOMUKHA -1CEC ; [.2712.0020.0004] # VEDIC SIGN ANUSVARA VAMAGOMUKHA WITH TAIL -1CEE ; [.2712.0020.0004] # VEDIC SIGN HEXIFORM LONG ANUSVARA -1CEF ; [.2712.0020.0004] # VEDIC SIGN LONG ANUSVARA -1CF0 ; [.2712.0020.0004] # VEDIC SIGN RTHANG LONG ANUSVARA -1CF1 ; [.2712.0020.0004] # VEDIC SIGN ANUSVARA UBHAYATO MUKHA -1CF5 ; [.2713.0020.0002] # VEDIC SIGN JIHVAMULIYA -1CF6 ; [.2714.0020.0002] # VEDIC SIGN UPADHMANIYA -A8F2 ; [.2715.0020.0002] # DEVANAGARI SIGN SPACING CANDRABINDU -A8F3 ; [.2715.0020.0004] # DEVANAGARI SIGN CANDRABINDU VIRAMA -A8F4 ; [.2715.0020.0004] # DEVANAGARI SIGN DOUBLE CANDRABINDU VIRAMA -A8F5 ; [.2715.0020.0004] # DEVANAGARI SIGN CANDRABINDU TWO -A8F6 ; [.2715.0020.0004] # DEVANAGARI SIGN CANDRABINDU THREE -A8F7 ; [.2715.0020.0004] # DEVANAGARI SIGN CANDRABINDU AVAGRAHA -A8FB ; [.2716.0020.0002] # DEVANAGARI HEADSTROKE -093E ; [.2717.0020.0002] # DEVANAGARI VOWEL SIGN AA -093A ; [.2718.0020.0002] # DEVANAGARI VOWEL SIGN OE -093B ; [.2719.0020.0002] # DEVANAGARI VOWEL SIGN OOE -094F ; [.271A.0020.0002] # DEVANAGARI VOWEL SIGN AW -0956 ; [.271B.0020.0002] # DEVANAGARI VOWEL SIGN UE -0957 ; [.271C.0020.0002] # DEVANAGARI VOWEL SIGN UUE -093F ; [.271D.0020.0002] # DEVANAGARI VOWEL SIGN I -0940 ; [.271E.0020.0002] # DEVANAGARI VOWEL SIGN II -0941 ; [.271F.0020.0002] # DEVANAGARI VOWEL SIGN U -0942 ; [.2720.0020.0002] # DEVANAGARI VOWEL SIGN UU -0943 ; [.2721.0020.0002] # DEVANAGARI VOWEL SIGN VOCALIC R -0944 ; [.2722.0020.0002] # DEVANAGARI VOWEL SIGN VOCALIC RR -0962 ; [.2723.0020.0002] # DEVANAGARI VOWEL SIGN VOCALIC L -0963 ; [.2724.0020.0002] # DEVANAGARI VOWEL SIGN VOCALIC LL -0945 ; [.2725.0020.0002] # DEVANAGARI VOWEL SIGN CANDRA E -0955 ; [.2726.0020.0002] # DEVANAGARI VOWEL SIGN CANDRA LONG E -0946 ; [.2727.0020.0002] # DEVANAGARI VOWEL SIGN SHORT E -0947 ; [.2728.0020.0002] # DEVANAGARI VOWEL SIGN E -094E ; [.2729.0020.0002] # DEVANAGARI VOWEL SIGN PRISHTHAMATRA E -0948 ; [.272A.0020.0002] # DEVANAGARI VOWEL SIGN AI -0949 ; [.272B.0020.0002] # DEVANAGARI VOWEL SIGN CANDRA O -094A ; [.272C.0020.0002] # DEVANAGARI VOWEL SIGN SHORT O -094B ; [.272D.0020.0002] # DEVANAGARI VOWEL SIGN O -094C ; [.272E.0020.0002] # DEVANAGARI VOWEL SIGN AU -094D ; [.272F.0020.0002] # DEVANAGARI SIGN VIRAMA -0980 ; [.2730.0020.0002] # BENGALI ANJI -0985 ; [.2731.0020.0002] # BENGALI LETTER A -0986 ; [.2732.0020.0002] # BENGALI LETTER AA -0987 ; [.2733.0020.0002] # BENGALI LETTER I -0988 ; [.2734.0020.0002] # BENGALI LETTER II -0989 ; [.2735.0020.0002] # BENGALI LETTER U -098A ; [.2736.0020.0002] # BENGALI LETTER UU -098B ; [.2737.0020.0002] # BENGALI LETTER VOCALIC R -09E0 ; [.2738.0020.0002] # BENGALI LETTER VOCALIC RR -098C ; [.2739.0020.0002] # BENGALI LETTER VOCALIC L -09E1 ; [.273A.0020.0002] # BENGALI LETTER VOCALIC LL -098F ; [.273B.0020.0002] # BENGALI LETTER E -0990 ; [.273C.0020.0002] # BENGALI LETTER AI -0993 ; [.273D.0020.0002] # BENGALI LETTER O -0994 ; [.273E.0020.0002] # BENGALI LETTER AU -0995 ; [.273F.0020.0002] # BENGALI LETTER KA -0996 ; [.2740.0020.0002] # BENGALI LETTER KHA -0997 ; [.2741.0020.0002] # BENGALI LETTER GA -0998 ; [.2742.0020.0002] # BENGALI LETTER GHA -0999 ; [.2743.0020.0002] # BENGALI LETTER NGA -099A ; [.2744.0020.0002] # BENGALI LETTER CA -099B ; [.2745.0020.0002] # BENGALI LETTER CHA -099C ; [.2746.0020.0002] # BENGALI LETTER JA -099D ; [.2747.0020.0002] # BENGALI LETTER JHA -099E ; [.2748.0020.0002] # BENGALI LETTER NYA -099F ; [.2749.0020.0002] # BENGALI LETTER TTA -09A0 ; [.274A.0020.0002] # BENGALI LETTER TTHA -09A1 ; [.274B.0020.0002] # BENGALI LETTER DDA -09DC ; [.274B.0020.0002][.0000.00C2.0002] # BENGALI LETTER RRA -09A2 ; [.274C.0020.0002] # BENGALI LETTER DDHA -09DD ; [.274C.0020.0002][.0000.00C2.0002] # BENGALI LETTER RHA -09A3 ; [.274D.0020.0002] # BENGALI LETTER NNA -09A4 ; [.274E.0020.0002] # BENGALI LETTER TA -09CE ; [.274E.0020.0004][.276F.0020.0004] # BENGALI LETTER KHANDA TA -09A5 ; [.274F.0020.0002] # BENGALI LETTER THA -09A6 ; [.2750.0020.0002] # BENGALI LETTER DA -09A7 ; [.2751.0020.0002] # BENGALI LETTER DHA -09A8 ; [.2752.0020.0002] # BENGALI LETTER NA -09AA ; [.2753.0020.0002] # BENGALI LETTER PA -09AB ; [.2754.0020.0002] # BENGALI LETTER PHA -09AC ; [.2755.0020.0002] # BENGALI LETTER BA -09AD ; [.2756.0020.0002] # BENGALI LETTER BHA -09AE ; [.2757.0020.0002] # BENGALI LETTER MA -09AF ; [.2758.0020.0002] # BENGALI LETTER YA -09DF ; [.2758.0020.0002][.0000.00C2.0002] # BENGALI LETTER YYA -09B0 ; [.2759.0020.0002] # BENGALI LETTER RA -09F0 ; [.275A.0020.0002] # BENGALI LETTER RA WITH MIDDLE DIAGONAL -09B2 ; [.275B.0020.0002] # BENGALI LETTER LA -09F1 ; [.275C.0020.0002] # BENGALI LETTER RA WITH LOWER DIAGONAL -09B6 ; [.275D.0020.0002] # BENGALI LETTER SHA -09B7 ; [.275E.0020.0002] # BENGALI LETTER SSA -09B8 ; [.275F.0020.0002] # BENGALI LETTER SA -09B9 ; [.2760.0020.0002] # BENGALI LETTER HA -09BD ; [.2761.0020.0002] # BENGALI SIGN AVAGRAHA -09BE ; [.2762.0020.0002] # BENGALI VOWEL SIGN AA -09BF ; [.2763.0020.0002] # BENGALI VOWEL SIGN I -09C0 ; [.2764.0020.0002] # BENGALI VOWEL SIGN II -09C1 ; [.2765.0020.0002] # BENGALI VOWEL SIGN U -09C2 ; [.2766.0020.0002] # BENGALI VOWEL SIGN UU -09C3 ; [.2767.0020.0002] # BENGALI VOWEL SIGN VOCALIC R -09C4 ; [.2768.0020.0002] # BENGALI VOWEL SIGN VOCALIC RR -09E2 ; [.2769.0020.0002] # BENGALI VOWEL SIGN VOCALIC L -09E3 ; [.276A.0020.0002] # BENGALI VOWEL SIGN VOCALIC LL -09C7 ; [.276B.0020.0002] # BENGALI VOWEL SIGN E -09C8 ; [.276C.0020.0002] # BENGALI VOWEL SIGN AI -09CB ; [.276D.0020.0002] # BENGALI VOWEL SIGN O -09C7 09BE ; [.276D.0020.0002] # BENGALI VOWEL SIGN O -09CC ; [.276E.0020.0002] # BENGALI VOWEL SIGN AU -09C7 09D7 ; [.276E.0020.0002] # BENGALI VOWEL SIGN AU -09CD ; [.276F.0020.0002] # BENGALI SIGN VIRAMA -09D7 ; [.2770.0020.0002] # BENGALI AU LENGTH MARK -09FC ; [.2771.0020.0002] # BENGALI LETTER VEDIC ANUSVARA -0A74 ; [.2772.0020.0002] # GURMUKHI EK ONKAR -0A73 ; [.2773.0020.0002] # GURMUKHI URA -0A09 ; [.2774.0020.0002] # GURMUKHI LETTER U -0A0A ; [.2775.0020.0002] # GURMUKHI LETTER UU -0A13 ; [.2776.0020.0002] # GURMUKHI LETTER OO -0A05 ; [.2777.0020.0002] # GURMUKHI LETTER A -0A06 ; [.2778.0020.0002] # GURMUKHI LETTER AA -0A10 ; [.2779.0020.0002] # GURMUKHI LETTER AI -0A14 ; [.277A.0020.0002] # GURMUKHI LETTER AU -0A72 ; [.277B.0020.0002] # GURMUKHI IRI -0A07 ; [.277C.0020.0002] # GURMUKHI LETTER I -0A08 ; [.277D.0020.0002] # GURMUKHI LETTER II -0A0F ; [.277E.0020.0002] # GURMUKHI LETTER EE -0A38 ; [.277F.0020.0002] # GURMUKHI LETTER SA -0A36 ; [.277F.0020.0002][.0000.00C2.0002] # GURMUKHI LETTER SHA -0A39 ; [.2780.0020.0002] # GURMUKHI LETTER HA -0A51 ; [.2781.0020.0002] # GURMUKHI SIGN UDAAT -0A15 ; [.2782.0020.0002] # GURMUKHI LETTER KA -0A16 ; [.2783.0020.0002] # GURMUKHI LETTER KHA -0A59 ; [.2783.0020.0002][.0000.00C2.0002] # GURMUKHI LETTER KHHA -0A17 ; [.2784.0020.0002] # GURMUKHI LETTER GA -0A5A ; [.2784.0020.0002][.0000.00C2.0002] # GURMUKHI LETTER GHHA -0A18 ; [.2785.0020.0002] # GURMUKHI LETTER GHA -0A19 ; [.2786.0020.0002] # GURMUKHI LETTER NGA -0A1A ; [.2787.0020.0002] # GURMUKHI LETTER CA -0A1B ; [.2788.0020.0002] # GURMUKHI LETTER CHA -0A1C ; [.2789.0020.0002] # GURMUKHI LETTER JA -0A5B ; [.2789.0020.0002][.0000.00C2.0002] # GURMUKHI LETTER ZA -0A1D ; [.278A.0020.0002] # GURMUKHI LETTER JHA -0A1E ; [.278B.0020.0002] # GURMUKHI LETTER NYA -0A1F ; [.278C.0020.0002] # GURMUKHI LETTER TTA -0A20 ; [.278D.0020.0002] # GURMUKHI LETTER TTHA -0A21 ; [.278E.0020.0002] # GURMUKHI LETTER DDA -0A22 ; [.278F.0020.0002] # GURMUKHI LETTER DDHA -0A23 ; [.2790.0020.0002] # GURMUKHI LETTER NNA -0A24 ; [.2791.0020.0002] # GURMUKHI LETTER TA -0A25 ; [.2792.0020.0002] # GURMUKHI LETTER THA -0A26 ; [.2793.0020.0002] # GURMUKHI LETTER DA -0A27 ; [.2794.0020.0002] # GURMUKHI LETTER DHA -0A28 ; [.2795.0020.0002] # GURMUKHI LETTER NA -0A2A ; [.2796.0020.0002] # GURMUKHI LETTER PA -0A2B ; [.2797.0020.0002] # GURMUKHI LETTER PHA -0A5E ; [.2797.0020.0002][.0000.00C2.0002] # GURMUKHI LETTER FA -0A2C ; [.2798.0020.0002] # GURMUKHI LETTER BA -0A2D ; [.2799.0020.0002] # GURMUKHI LETTER BHA -0A2E ; [.279A.0020.0002] # GURMUKHI LETTER MA -0A2F ; [.279B.0020.0002] # GURMUKHI LETTER YA -0A75 ; [.279C.0020.0002] # GURMUKHI SIGN YAKASH -0A30 ; [.279D.0020.0002] # GURMUKHI LETTER RA -0A32 ; [.279E.0020.0002] # GURMUKHI LETTER LA -0A33 ; [.279E.0020.0002][.0000.00C2.0002] # GURMUKHI LETTER LLA -0A35 ; [.279F.0020.0002] # GURMUKHI LETTER VA -0A5C ; [.27A0.0020.0002] # GURMUKHI LETTER RRA -0A3E ; [.27A1.0020.0002] # GURMUKHI VOWEL SIGN AA -0A3F ; [.27A2.0020.0002] # GURMUKHI VOWEL SIGN I -0A40 ; [.27A3.0020.0002] # GURMUKHI VOWEL SIGN II -0A41 ; [.27A4.0020.0002] # GURMUKHI VOWEL SIGN U -0A42 ; [.27A5.0020.0002] # GURMUKHI VOWEL SIGN UU -0A47 ; [.27A6.0020.0002] # GURMUKHI VOWEL SIGN EE -0A48 ; [.27A7.0020.0002] # GURMUKHI VOWEL SIGN AI -0A4B ; [.27A8.0020.0002] # GURMUKHI VOWEL SIGN OO -0A4C ; [.27A9.0020.0002] # GURMUKHI VOWEL SIGN AU -0A4D ; [.27AA.0020.0002] # GURMUKHI SIGN VIRAMA -0AD0 ; [.27AB.0020.0002] # GUJARATI OM -0A85 ; [.27AC.0020.0002] # GUJARATI LETTER A -0A86 ; [.27AD.0020.0002] # GUJARATI LETTER AA -0A87 ; [.27AE.0020.0002] # GUJARATI LETTER I -0A88 ; [.27AF.0020.0002] # GUJARATI LETTER II -0A89 ; [.27B0.0020.0002] # GUJARATI LETTER U -0A8A ; [.27B1.0020.0002] # GUJARATI LETTER UU -0A8B ; [.27B2.0020.0002] # GUJARATI LETTER VOCALIC R -0AE0 ; [.27B3.0020.0002] # GUJARATI LETTER VOCALIC RR -0A8C ; [.27B4.0020.0002] # GUJARATI LETTER VOCALIC L -0AE1 ; [.27B5.0020.0002] # GUJARATI LETTER VOCALIC LL -0A8D ; [.27B6.0020.0002] # GUJARATI VOWEL CANDRA E -0A8F ; [.27B7.0020.0002] # GUJARATI LETTER E -0A90 ; [.27B8.0020.0002] # GUJARATI LETTER AI -0A91 ; [.27B9.0020.0002] # GUJARATI VOWEL CANDRA O -0A93 ; [.27BA.0020.0002] # GUJARATI LETTER O -0A94 ; [.27BB.0020.0002] # GUJARATI LETTER AU -0A95 ; [.27BC.0020.0002] # GUJARATI LETTER KA -0A96 ; [.27BD.0020.0002] # GUJARATI LETTER KHA -0A97 ; [.27BE.0020.0002] # GUJARATI LETTER GA -0A98 ; [.27BF.0020.0002] # GUJARATI LETTER GHA -0A99 ; [.27C0.0020.0002] # GUJARATI LETTER NGA -0A9A ; [.27C1.0020.0002] # GUJARATI LETTER CA -0A9B ; [.27C2.0020.0002] # GUJARATI LETTER CHA -0A9C ; [.27C3.0020.0002] # GUJARATI LETTER JA -0AF9 ; [.27C4.0020.0002] # GUJARATI LETTER ZHA -0A9D ; [.27C5.0020.0002] # GUJARATI LETTER JHA -0A9E ; [.27C6.0020.0002] # GUJARATI LETTER NYA -0A9F ; [.27C7.0020.0002] # GUJARATI LETTER TTA -0AA0 ; [.27C8.0020.0002] # GUJARATI LETTER TTHA -0AA1 ; [.27C9.0020.0002] # GUJARATI LETTER DDA -0AA2 ; [.27CA.0020.0002] # GUJARATI LETTER DDHA -0AA3 ; [.27CB.0020.0002] # GUJARATI LETTER NNA -0AA4 ; [.27CC.0020.0002] # GUJARATI LETTER TA -0AA5 ; [.27CD.0020.0002] # GUJARATI LETTER THA -0AA6 ; [.27CE.0020.0002] # GUJARATI LETTER DA -0AA7 ; [.27CF.0020.0002] # GUJARATI LETTER DHA -0AA8 ; [.27D0.0020.0002] # GUJARATI LETTER NA -0AAA ; [.27D1.0020.0002] # GUJARATI LETTER PA -0AAB ; [.27D2.0020.0002] # GUJARATI LETTER PHA -0AAC ; [.27D3.0020.0002] # GUJARATI LETTER BA -0AAD ; [.27D4.0020.0002] # GUJARATI LETTER BHA -0AAE ; [.27D5.0020.0002] # GUJARATI LETTER MA -0AAF ; [.27D6.0020.0002] # GUJARATI LETTER YA -0AB0 ; [.27D7.0020.0002] # GUJARATI LETTER RA -0AB2 ; [.27D8.0020.0002] # GUJARATI LETTER LA -0AB5 ; [.27D9.0020.0002] # GUJARATI LETTER VA -0AB6 ; [.27DA.0020.0002] # GUJARATI LETTER SHA -0AB7 ; [.27DB.0020.0002] # GUJARATI LETTER SSA -0AB8 ; [.27DC.0020.0002] # GUJARATI LETTER SA -0AB9 ; [.27DD.0020.0002] # GUJARATI LETTER HA -0AB3 ; [.27DE.0020.0002] # GUJARATI LETTER LLA -0ABD ; [.27DF.0020.0002] # GUJARATI SIGN AVAGRAHA -0ABE ; [.27E0.0020.0002] # GUJARATI VOWEL SIGN AA -0ABF ; [.27E1.0020.0002] # GUJARATI VOWEL SIGN I -0AC0 ; [.27E2.0020.0002] # GUJARATI VOWEL SIGN II -0AC1 ; [.27E3.0020.0002] # GUJARATI VOWEL SIGN U -0AC2 ; [.27E4.0020.0002] # GUJARATI VOWEL SIGN UU -0AC3 ; [.27E5.0020.0002] # GUJARATI VOWEL SIGN VOCALIC R -0AC4 ; [.27E6.0020.0002] # GUJARATI VOWEL SIGN VOCALIC RR -0AE2 ; [.27E7.0020.0002] # GUJARATI VOWEL SIGN VOCALIC L -0AE3 ; [.27E8.0020.0002] # GUJARATI VOWEL SIGN VOCALIC LL -0AC5 ; [.27E9.0020.0002] # GUJARATI VOWEL SIGN CANDRA E -0AC7 ; [.27EA.0020.0002] # GUJARATI VOWEL SIGN E -0AC8 ; [.27EB.0020.0002] # GUJARATI VOWEL SIGN AI -0AC9 ; [.27EC.0020.0002] # GUJARATI VOWEL SIGN CANDRA O -0ACB ; [.27ED.0020.0002] # GUJARATI VOWEL SIGN O -0ACC ; [.27EE.0020.0002] # GUJARATI VOWEL SIGN AU -0ACD ; [.27EF.0020.0002] # GUJARATI SIGN VIRAMA -0B05 ; [.27F0.0020.0002] # ORIYA LETTER A -0B06 ; [.27F1.0020.0002] # ORIYA LETTER AA -0B07 ; [.27F2.0020.0002] # ORIYA LETTER I -0B08 ; [.27F3.0020.0002] # ORIYA LETTER II -0B09 ; [.27F4.0020.0002] # ORIYA LETTER U -0B0A ; [.27F5.0020.0002] # ORIYA LETTER UU -0B0B ; [.27F6.0020.0002] # ORIYA LETTER VOCALIC R -0B60 ; [.27F7.0020.0002] # ORIYA LETTER VOCALIC RR -0B0C ; [.27F8.0020.0002] # ORIYA LETTER VOCALIC L -0B61 ; [.27F9.0020.0002] # ORIYA LETTER VOCALIC LL -0B0F ; [.27FA.0020.0002] # ORIYA LETTER E -0B10 ; [.27FB.0020.0002] # ORIYA LETTER AI -0B13 ; [.27FC.0020.0002] # ORIYA LETTER O -0B14 ; [.27FD.0020.0002] # ORIYA LETTER AU -0B15 ; [.27FE.0020.0002] # ORIYA LETTER KA -0B16 ; [.27FF.0020.0002] # ORIYA LETTER KHA -0B17 ; [.2800.0020.0002] # ORIYA LETTER GA -0B18 ; [.2801.0020.0002] # ORIYA LETTER GHA -0B19 ; [.2802.0020.0002] # ORIYA LETTER NGA -0B1A ; [.2803.0020.0002] # ORIYA LETTER CA -0B1B ; [.2804.0020.0002] # ORIYA LETTER CHA -0B1C ; [.2805.0020.0002] # ORIYA LETTER JA -0B1D ; [.2806.0020.0002] # ORIYA LETTER JHA -0B1E ; [.2807.0020.0002] # ORIYA LETTER NYA -0B1F ; [.2808.0020.0002] # ORIYA LETTER TTA -0B20 ; [.2809.0020.0002] # ORIYA LETTER TTHA -0B21 ; [.280A.0020.0002] # ORIYA LETTER DDA -0B5C ; [.280A.0020.0002][.0000.00C2.0002] # ORIYA LETTER RRA -0B22 ; [.280B.0020.0002] # ORIYA LETTER DDHA -0B5D ; [.280B.0020.0002][.0000.00C2.0002] # ORIYA LETTER RHA -0B23 ; [.280C.0020.0002] # ORIYA LETTER NNA -0B24 ; [.280D.0020.0002] # ORIYA LETTER TA -0B25 ; [.280E.0020.0002] # ORIYA LETTER THA -0B26 ; [.280F.0020.0002] # ORIYA LETTER DA -0B27 ; [.2810.0020.0002] # ORIYA LETTER DHA -0B28 ; [.2811.0020.0002] # ORIYA LETTER NA -0B2A ; [.2812.0020.0002] # ORIYA LETTER PA -0B2B ; [.2813.0020.0002] # ORIYA LETTER PHA -0B2C ; [.2814.0020.0002] # ORIYA LETTER BA -0B2D ; [.2815.0020.0002] # ORIYA LETTER BHA -0B2E ; [.2816.0020.0002] # ORIYA LETTER MA -0B2F ; [.2817.0020.0002] # ORIYA LETTER YA -0B5F ; [.2818.0020.0002] # ORIYA LETTER YYA -0B30 ; [.2819.0020.0002] # ORIYA LETTER RA -0B32 ; [.281A.0020.0002] # ORIYA LETTER LA -0B33 ; [.281B.0020.0002] # ORIYA LETTER LLA -0B35 ; [.281C.0020.0002] # ORIYA LETTER VA -0B71 ; [.281D.0020.0002] # ORIYA LETTER WA -0B36 ; [.281E.0020.0002] # ORIYA LETTER SHA -0B37 ; [.281F.0020.0002] # ORIYA LETTER SSA -0B38 ; [.2820.0020.0002] # ORIYA LETTER SA -0B39 ; [.2821.0020.0002] # ORIYA LETTER HA -0B3D ; [.2822.0020.0002] # ORIYA SIGN AVAGRAHA -0B3E ; [.2823.0020.0002] # ORIYA VOWEL SIGN AA -0B3F ; [.2824.0020.0002] # ORIYA VOWEL SIGN I -0B40 ; [.2825.0020.0002] # ORIYA VOWEL SIGN II -0B41 ; [.2826.0020.0002] # ORIYA VOWEL SIGN U -0B42 ; [.2827.0020.0002] # ORIYA VOWEL SIGN UU -0B43 ; [.2828.0020.0002] # ORIYA VOWEL SIGN VOCALIC R -0B44 ; [.2829.0020.0002] # ORIYA VOWEL SIGN VOCALIC RR -0B62 ; [.282A.0020.0002] # ORIYA VOWEL SIGN VOCALIC L -0B63 ; [.282B.0020.0002] # ORIYA VOWEL SIGN VOCALIC LL -0B47 ; [.282C.0020.0002] # ORIYA VOWEL SIGN E -0B48 ; [.282D.0020.0002] # ORIYA VOWEL SIGN AI -0B47 0B56 ; [.282D.0020.0002] # ORIYA VOWEL SIGN AI -0B4B ; [.282E.0020.0002] # ORIYA VOWEL SIGN O -0B47 0B3E ; [.282E.0020.0002] # ORIYA VOWEL SIGN O -0B4C ; [.282F.0020.0002] # ORIYA VOWEL SIGN AU -0B47 0B57 ; [.282F.0020.0002] # ORIYA VOWEL SIGN AU -0B4D ; [.2830.0020.0002] # ORIYA SIGN VIRAMA -0B56 ; [.2831.0020.0002] # ORIYA AI LENGTH MARK -0B57 ; [.2832.0020.0002] # ORIYA AU LENGTH MARK -0BD0 ; [.2833.0020.0002] # TAMIL OM -0B85 ; [.2834.0020.0002] # TAMIL LETTER A -0B86 ; [.2835.0020.0002] # TAMIL LETTER AA -0B87 ; [.2836.0020.0002] # TAMIL LETTER I -0B88 ; [.2837.0020.0002] # TAMIL LETTER II -0B89 ; [.2838.0020.0002] # TAMIL LETTER U -0B8A ; [.2839.0020.0002] # TAMIL LETTER UU -0B8E ; [.283A.0020.0002] # TAMIL LETTER E -0B8F ; [.283B.0020.0002] # TAMIL LETTER EE -0B90 ; [.283C.0020.0002] # TAMIL LETTER AI -0B92 ; [.283D.0020.0002] # TAMIL LETTER O -0B93 ; [.283E.0020.0002] # TAMIL LETTER OO -0B94 ; [.283F.0020.0002] # TAMIL LETTER AU -0B92 0BD7 ; [.283F.0020.0002] # TAMIL LETTER AU -0B83 ; [.2840.0020.0002] # TAMIL SIGN VISARGA -0B95 ; [.2841.0020.0002] # TAMIL LETTER KA -0B99 ; [.2842.0020.0002] # TAMIL LETTER NGA -0B9A ; [.2843.0020.0002] # TAMIL LETTER CA -0B9E ; [.2844.0020.0002] # TAMIL LETTER NYA -0B9F ; [.2845.0020.0002] # TAMIL LETTER TTA -0BA3 ; [.2846.0020.0002] # TAMIL LETTER NNA -0BA4 ; [.2847.0020.0002] # TAMIL LETTER TA -0BA8 ; [.2848.0020.0002] # TAMIL LETTER NA -0BAA ; [.2849.0020.0002] # TAMIL LETTER PA -0BAE ; [.284A.0020.0002] # TAMIL LETTER MA -0BAF ; [.284B.0020.0002] # TAMIL LETTER YA -0BB0 ; [.284C.0020.0002] # TAMIL LETTER RA -0BB2 ; [.284D.0020.0002] # TAMIL LETTER LA -0BB5 ; [.284E.0020.0002] # TAMIL LETTER VA -0BB4 ; [.284F.0020.0002] # TAMIL LETTER LLLA -0BB3 ; [.2850.0020.0002] # TAMIL LETTER LLA -0BB1 ; [.2851.0020.0002] # TAMIL LETTER RRA -0BA9 ; [.2852.0020.0002] # TAMIL LETTER NNNA -0B9C ; [.2853.0020.0002] # TAMIL LETTER JA -0BB6 ; [.2854.0020.0002] # TAMIL LETTER SHA -0BB7 ; [.2855.0020.0002] # TAMIL LETTER SSA -0BB8 ; [.2856.0020.0002] # TAMIL LETTER SA -0BB9 ; [.2857.0020.0002] # TAMIL LETTER HA -0BBE ; [.2858.0020.0002] # TAMIL VOWEL SIGN AA -0BBF ; [.2859.0020.0002] # TAMIL VOWEL SIGN I -0BC0 ; [.285A.0020.0002] # TAMIL VOWEL SIGN II -0BC1 ; [.285B.0020.0002] # TAMIL VOWEL SIGN U -0BC2 ; [.285C.0020.0002] # TAMIL VOWEL SIGN UU -0BC6 ; [.285D.0020.0002] # TAMIL VOWEL SIGN E -0BC7 ; [.285E.0020.0002] # TAMIL VOWEL SIGN EE -0BC8 ; [.285F.0020.0002] # TAMIL VOWEL SIGN AI -0BCA ; [.2860.0020.0002] # TAMIL VOWEL SIGN O -0BC6 0BBE ; [.2860.0020.0002] # TAMIL VOWEL SIGN O -0BCB ; [.2861.0020.0002] # TAMIL VOWEL SIGN OO -0BC7 0BBE ; [.2861.0020.0002] # TAMIL VOWEL SIGN OO -0BCC ; [.2862.0020.0002] # TAMIL VOWEL SIGN AU -0BC6 0BD7 ; [.2862.0020.0002] # TAMIL VOWEL SIGN AU -0BCD ; [.2863.0020.0002] # TAMIL SIGN VIRAMA -0BD7 ; [.2864.0020.0002] # TAMIL AU LENGTH MARK -0C05 ; [.2865.0020.0002] # TELUGU LETTER A -0C06 ; [.2866.0020.0002] # TELUGU LETTER AA -0C07 ; [.2867.0020.0002] # TELUGU LETTER I -0C08 ; [.2868.0020.0002] # TELUGU LETTER II -0C09 ; [.2869.0020.0002] # TELUGU LETTER U -0C0A ; [.286A.0020.0002] # TELUGU LETTER UU -0C0B ; [.286B.0020.0002] # TELUGU LETTER VOCALIC R -0C60 ; [.286C.0020.0002] # TELUGU LETTER VOCALIC RR -0C0C ; [.286D.0020.0002] # TELUGU LETTER VOCALIC L -0C61 ; [.286E.0020.0002] # TELUGU LETTER VOCALIC LL -0C0E ; [.286F.0020.0002] # TELUGU LETTER E -0C0F ; [.2870.0020.0002] # TELUGU LETTER EE -0C10 ; [.2871.0020.0002] # TELUGU LETTER AI -0C12 ; [.2872.0020.0002] # TELUGU LETTER O -0C13 ; [.2873.0020.0002] # TELUGU LETTER OO -0C14 ; [.2874.0020.0002] # TELUGU LETTER AU -0C15 ; [.2875.0020.0002] # TELUGU LETTER KA -0C16 ; [.2876.0020.0002] # TELUGU LETTER KHA -0C17 ; [.2877.0020.0002] # TELUGU LETTER GA -0C18 ; [.2878.0020.0002] # TELUGU LETTER GHA -0C19 ; [.2879.0020.0002] # TELUGU LETTER NGA -0C1A ; [.287A.0020.0002] # TELUGU LETTER CA -0C58 ; [.287B.0020.0002] # TELUGU LETTER TSA -0C1B ; [.287C.0020.0002] # TELUGU LETTER CHA -0C1C ; [.287D.0020.0002] # TELUGU LETTER JA -0C59 ; [.287E.0020.0002] # TELUGU LETTER DZA -0C1D ; [.287F.0020.0002] # TELUGU LETTER JHA -0C1E ; [.2880.0020.0002] # TELUGU LETTER NYA -0C1F ; [.2881.0020.0002] # TELUGU LETTER TTA -0C20 ; [.2882.0020.0002] # TELUGU LETTER TTHA -0C21 ; [.2883.0020.0002] # TELUGU LETTER DDA -0C22 ; [.2884.0020.0002] # TELUGU LETTER DDHA -0C23 ; [.2885.0020.0002] # TELUGU LETTER NNA -0C24 ; [.2886.0020.0002] # TELUGU LETTER TA -0C25 ; [.2887.0020.0002] # TELUGU LETTER THA -0C26 ; [.2888.0020.0002] # TELUGU LETTER DA -0C27 ; [.2889.0020.0002] # TELUGU LETTER DHA -0C28 ; [.288A.0020.0002] # TELUGU LETTER NA -0C2A ; [.288B.0020.0002] # TELUGU LETTER PA -0C2B ; [.288C.0020.0002] # TELUGU LETTER PHA -0C2C ; [.288D.0020.0002] # TELUGU LETTER BA -0C2D ; [.288E.0020.0002] # TELUGU LETTER BHA -0C2E ; [.288F.0020.0002] # TELUGU LETTER MA -0C2F ; [.2890.0020.0002] # TELUGU LETTER YA -0C30 ; [.2891.0020.0002] # TELUGU LETTER RA -0C31 ; [.2892.0020.0002] # TELUGU LETTER RRA -0C32 ; [.2893.0020.0002] # TELUGU LETTER LA -0C35 ; [.2894.0020.0002] # TELUGU LETTER VA -0C36 ; [.2895.0020.0002] # TELUGU LETTER SHA -0C37 ; [.2896.0020.0002] # TELUGU LETTER SSA -0C38 ; [.2897.0020.0002] # TELUGU LETTER SA -0C39 ; [.2898.0020.0002] # TELUGU LETTER HA -0C33 ; [.2899.0020.0002] # TELUGU LETTER LLA -0C34 ; [.289A.0020.0002] # TELUGU LETTER LLLA -0C5A ; [.289B.0020.0002] # TELUGU LETTER RRRA -0C3D ; [.289C.0020.0002] # TELUGU SIGN AVAGRAHA -0C3E ; [.289D.0020.0002] # TELUGU VOWEL SIGN AA -0C3F ; [.289E.0020.0002] # TELUGU VOWEL SIGN I -0C40 ; [.289F.0020.0002] # TELUGU VOWEL SIGN II -0C41 ; [.28A0.0020.0002] # TELUGU VOWEL SIGN U -0C42 ; [.28A1.0020.0002] # TELUGU VOWEL SIGN UU -0C43 ; [.28A2.0020.0002] # TELUGU VOWEL SIGN VOCALIC R -0C44 ; [.28A3.0020.0002] # TELUGU VOWEL SIGN VOCALIC RR -0C62 ; [.28A4.0020.0002] # TELUGU VOWEL SIGN VOCALIC L -0C63 ; [.28A5.0020.0002] # TELUGU VOWEL SIGN VOCALIC LL -0C46 ; [.28A6.0020.0002] # TELUGU VOWEL SIGN E -0C47 ; [.28A7.0020.0002] # TELUGU VOWEL SIGN EE -0C48 ; [.28A8.0020.0002] # TELUGU VOWEL SIGN AI -0C46 0C56 ; [.28A8.0020.0002] # TELUGU VOWEL SIGN AI -0C4A ; [.28A9.0020.0002] # TELUGU VOWEL SIGN O -0C4B ; [.28AA.0020.0002] # TELUGU VOWEL SIGN OO -0C4C ; [.28AB.0020.0002] # TELUGU VOWEL SIGN AU -0C4D ; [.28AC.0020.0002] # TELUGU SIGN VIRAMA -0C55 ; [.28AD.0020.0002] # TELUGU LENGTH MARK -0C56 ; [.28AE.0020.0002] # TELUGU AI LENGTH MARK -0C85 ; [.28AF.0020.0002] # KANNADA LETTER A -0C86 ; [.28B0.0020.0002] # KANNADA LETTER AA -0C87 ; [.28B1.0020.0002] # KANNADA LETTER I -0C88 ; [.28B2.0020.0002] # KANNADA LETTER II -0C89 ; [.28B3.0020.0002] # KANNADA LETTER U -0C8A ; [.28B4.0020.0002] # KANNADA LETTER UU -0C8B ; [.28B5.0020.0002] # KANNADA LETTER VOCALIC R -0CE0 ; [.28B6.0020.0002] # KANNADA LETTER VOCALIC RR -0C8C ; [.28B7.0020.0002] # KANNADA LETTER VOCALIC L -0CE1 ; [.28B8.0020.0002] # KANNADA LETTER VOCALIC LL -0C8E ; [.28B9.0020.0002] # KANNADA LETTER E -0C8F ; [.28BA.0020.0002] # KANNADA LETTER EE -0C90 ; [.28BB.0020.0002] # KANNADA LETTER AI -0C92 ; [.28BC.0020.0002] # KANNADA LETTER O -0C93 ; [.28BD.0020.0002] # KANNADA LETTER OO -0C94 ; [.28BE.0020.0002] # KANNADA LETTER AU -0C95 ; [.28BF.0020.0002] # KANNADA LETTER KA -0C96 ; [.28C0.0020.0002] # KANNADA LETTER KHA -0C97 ; [.28C1.0020.0002] # KANNADA LETTER GA -0C98 ; [.28C2.0020.0002] # KANNADA LETTER GHA -0C99 ; [.28C3.0020.0002] # KANNADA LETTER NGA -0C9A ; [.28C4.0020.0002] # KANNADA LETTER CA -0C9B ; [.28C5.0020.0002] # KANNADA LETTER CHA -0C9C ; [.28C6.0020.0002] # KANNADA LETTER JA -0C9D ; [.28C7.0020.0002] # KANNADA LETTER JHA -0C9E ; [.28C8.0020.0002] # KANNADA LETTER NYA -0C9F ; [.28C9.0020.0002] # KANNADA LETTER TTA -0CA0 ; [.28CA.0020.0002] # KANNADA LETTER TTHA -0CA1 ; [.28CB.0020.0002] # KANNADA LETTER DDA -0CA2 ; [.28CC.0020.0002] # KANNADA LETTER DDHA -0CA3 ; [.28CD.0020.0002] # KANNADA LETTER NNA -0CA4 ; [.28CE.0020.0002] # KANNADA LETTER TA -0CA5 ; [.28CF.0020.0002] # KANNADA LETTER THA -0CA6 ; [.28D0.0020.0002] # KANNADA LETTER DA -0CA7 ; [.28D1.0020.0002] # KANNADA LETTER DHA -0CA8 ; [.28D2.0020.0002] # KANNADA LETTER NA -0CAA ; [.28D3.0020.0002] # KANNADA LETTER PA -0CAB ; [.28D4.0020.0002] # KANNADA LETTER PHA -0CAC ; [.28D5.0020.0002] # KANNADA LETTER BA -0CAD ; [.28D6.0020.0002] # KANNADA LETTER BHA -0CAE ; [.28D7.0020.0002] # KANNADA LETTER MA -0CAF ; [.28D8.0020.0002] # KANNADA LETTER YA -0CB0 ; [.28D9.0020.0002] # KANNADA LETTER RA -0CB1 ; [.28DA.0020.0002] # KANNADA LETTER RRA -0CB2 ; [.28DB.0020.0002] # KANNADA LETTER LA -0CB5 ; [.28DC.0020.0002] # KANNADA LETTER VA -0CB6 ; [.28DD.0020.0002] # KANNADA LETTER SHA -0CB7 ; [.28DE.0020.0002] # KANNADA LETTER SSA -0CB8 ; [.28DF.0020.0002] # KANNADA LETTER SA -0CB9 ; [.28E0.0020.0002] # KANNADA LETTER HA -0CB3 ; [.28E1.0020.0002] # KANNADA LETTER LLA -0CDE ; [.28E2.0020.0002] # KANNADA LETTER FA -0CBD ; [.28E3.0020.0002] # KANNADA SIGN AVAGRAHA -0CF1 ; [.28E4.0020.0002] # KANNADA SIGN JIHVAMULIYA -0CF2 ; [.28E5.0020.0002] # KANNADA SIGN UPADHMANIYA -0C80 ; [.28E6.0020.0002] # KANNADA SIGN SPACING CANDRABINDU -0CBE ; [.28E7.0020.0002] # KANNADA VOWEL SIGN AA -0CBF ; [.28E8.0020.0002] # KANNADA VOWEL SIGN I -0CC0 ; [.28E9.0020.0002] # KANNADA VOWEL SIGN II -0CBF 0CD5 ; [.28E9.0020.0002] # KANNADA VOWEL SIGN II -0CC1 ; [.28EA.0020.0002] # KANNADA VOWEL SIGN U -0CC2 ; [.28EB.0020.0002] # KANNADA VOWEL SIGN UU -0CC3 ; [.28EC.0020.0002] # KANNADA VOWEL SIGN VOCALIC R -0CC4 ; [.28ED.0020.0002] # KANNADA VOWEL SIGN VOCALIC RR -0CE2 ; [.28EE.0020.0002] # KANNADA VOWEL SIGN VOCALIC L -0CE3 ; [.28EF.0020.0002] # KANNADA VOWEL SIGN VOCALIC LL -0CC6 ; [.28F0.0020.0002] # KANNADA VOWEL SIGN E -0CC7 ; [.28F1.0020.0002] # KANNADA VOWEL SIGN EE -0CC6 0CD5 ; [.28F1.0020.0002] # KANNADA VOWEL SIGN EE -0CC8 ; [.28F2.0020.0002] # KANNADA VOWEL SIGN AI -0CC6 0CD6 ; [.28F2.0020.0002] # KANNADA VOWEL SIGN AI -0CCA ; [.28F3.0020.0002] # KANNADA VOWEL SIGN O -0CC6 0CC2 ; [.28F3.0020.0002] # KANNADA VOWEL SIGN O -0CCB ; [.28F4.0020.0002] # KANNADA VOWEL SIGN OO -0CC6 0CC2 0CD5 ; [.28F4.0020.0002] # KANNADA VOWEL SIGN OO -0CCA 0CD5 ; [.28F4.0020.0002] # KANNADA VOWEL SIGN OO -0CCC ; [.28F5.0020.0002] # KANNADA VOWEL SIGN AU -0CCD ; [.28F6.0020.0002] # KANNADA SIGN VIRAMA -0CD5 ; [.28F7.0020.0002] # KANNADA LENGTH MARK -0CD6 ; [.28F8.0020.0002] # KANNADA AI LENGTH MARK -0D05 ; [.28F9.0020.0002] # MALAYALAM LETTER A -0D06 ; [.28FA.0020.0002] # MALAYALAM LETTER AA -0D07 ; [.28FB.0020.0002] # MALAYALAM LETTER I -0D08 ; [.28FC.0020.0002] # MALAYALAM LETTER II -0D5F ; [.28FD.0020.0002] # MALAYALAM LETTER ARCHAIC II -0D09 ; [.28FE.0020.0002] # MALAYALAM LETTER U -0D0A ; [.28FF.0020.0002] # MALAYALAM LETTER UU -0D0B ; [.2900.0020.0002] # MALAYALAM LETTER VOCALIC R -0D60 ; [.2901.0020.0002] # MALAYALAM LETTER VOCALIC RR -0D0C ; [.2902.0020.0002] # MALAYALAM LETTER VOCALIC L -0D61 ; [.2903.0020.0002] # MALAYALAM LETTER VOCALIC LL -0D0E ; [.2904.0020.0002] # MALAYALAM LETTER E -0D0F ; [.2905.0020.0002] # MALAYALAM LETTER EE -0D10 ; [.2906.0020.0002] # MALAYALAM LETTER AI -0D12 ; [.2907.0020.0002] # MALAYALAM LETTER O -0D13 ; [.2908.0020.0002] # MALAYALAM LETTER OO -0D14 ; [.2909.0020.0002] # MALAYALAM LETTER AU -0D15 ; [.290A.0020.0002] # MALAYALAM LETTER KA -0D7F ; [.290A.0020.0004][.2941.0020.0004] # MALAYALAM LETTER CHILLU K -0D16 ; [.290B.0020.0002] # MALAYALAM LETTER KHA -0D17 ; [.290C.0020.0002] # MALAYALAM LETTER GA -0D18 ; [.290D.0020.0002] # MALAYALAM LETTER GHA -0D19 ; [.290E.0020.0002] # MALAYALAM LETTER NGA -0D1A ; [.290F.0020.0002] # MALAYALAM LETTER CA -0D1B ; [.2910.0020.0002] # MALAYALAM LETTER CHA -0D1C ; [.2911.0020.0002] # MALAYALAM LETTER JA -0D1D ; [.2912.0020.0002] # MALAYALAM LETTER JHA -0D1E ; [.2913.0020.0002] # MALAYALAM LETTER NYA -0D1F ; [.2914.0020.0002] # MALAYALAM LETTER TTA -0D20 ; [.2915.0020.0002] # MALAYALAM LETTER TTHA -0D21 ; [.2916.0020.0002] # MALAYALAM LETTER DDA -0D22 ; [.2917.0020.0002] # MALAYALAM LETTER DDHA -0D23 ; [.2918.0020.0002] # MALAYALAM LETTER NNA -0D7A ; [.2918.0020.0004][.2941.0020.0004] # MALAYALAM LETTER CHILLU NN -0D24 ; [.2919.0020.0002] # MALAYALAM LETTER TA -0D25 ; [.291A.0020.0002] # MALAYALAM LETTER THA -0D26 ; [.291B.0020.0002] # MALAYALAM LETTER DA -0D27 ; [.291C.0020.0002] # MALAYALAM LETTER DHA -0D28 ; [.291D.0020.0002] # MALAYALAM LETTER NA -0D7B ; [.291D.0020.0004][.2941.0020.0004] # MALAYALAM LETTER CHILLU N -0D29 ; [.291E.0020.0002] # MALAYALAM LETTER NNNA -0D2A ; [.291F.0020.0002] # MALAYALAM LETTER PA -0D2B ; [.2920.0020.0002] # MALAYALAM LETTER PHA -0D2C ; [.2921.0020.0002] # MALAYALAM LETTER BA -0D2D ; [.2922.0020.0002] # MALAYALAM LETTER BHA -0D2E ; [.2923.0020.0002] # MALAYALAM LETTER MA -0D54 ; [.2923.0020.0004][.2941.0020.0004] # MALAYALAM LETTER CHILLU M -0D2F ; [.2924.0020.0002] # MALAYALAM LETTER YA -0D55 ; [.2924.0020.0004][.2941.0020.0004] # MALAYALAM LETTER CHILLU Y -0D30 ; [.2925.0020.0002] # MALAYALAM LETTER RA -0D4E ; [.2925.0020.0004][.2941.0020.0004] # MALAYALAM LETTER DOT REPH -0D7C ; [.2925.0020.0004][.2941.0020.0004] # MALAYALAM LETTER CHILLU RR -0D32 ; [.2926.0020.0002] # MALAYALAM LETTER LA -0D7D ; [.2926.0020.0004][.2941.0020.0004] # MALAYALAM LETTER CHILLU L -0D35 ; [.2927.0020.0002] # MALAYALAM LETTER VA -0D36 ; [.2928.0020.0002] # MALAYALAM LETTER SHA -0D37 ; [.2929.0020.0002] # MALAYALAM LETTER SSA -0D38 ; [.292A.0020.0002] # MALAYALAM LETTER SA -0D39 ; [.292B.0020.0002] # MALAYALAM LETTER HA -0D33 ; [.292C.0020.0002] # MALAYALAM LETTER LLA -0D7E ; [.292C.0020.0004][.2941.0020.0004] # MALAYALAM LETTER CHILLU LL -0D34 ; [.292D.0020.0002] # MALAYALAM LETTER LLLA -0D56 ; [.292D.0020.0004][.2941.0020.0004] # MALAYALAM LETTER CHILLU LLL -0D31 ; [.292E.0020.0002] # MALAYALAM LETTER RRA -0D3A ; [.292F.0020.0002] # MALAYALAM LETTER TTTA -0D3D ; [.2930.0020.0002] # MALAYALAM SIGN AVAGRAHA -0D3E ; [.2931.0020.0002] # MALAYALAM VOWEL SIGN AA -0D3F ; [.2932.0020.0002] # MALAYALAM VOWEL SIGN I -0D40 ; [.2933.0020.0002] # MALAYALAM VOWEL SIGN II -0D41 ; [.2934.0020.0002] # MALAYALAM VOWEL SIGN U -0D42 ; [.2935.0020.0002] # MALAYALAM VOWEL SIGN UU -0D43 ; [.2936.0020.0002] # MALAYALAM VOWEL SIGN VOCALIC R -0D44 ; [.2937.0020.0002] # MALAYALAM VOWEL SIGN VOCALIC RR -0D62 ; [.2938.0020.0002] # MALAYALAM VOWEL SIGN VOCALIC L -0D63 ; [.2939.0020.0002] # MALAYALAM VOWEL SIGN VOCALIC LL -0D46 ; [.293A.0020.0002] # MALAYALAM VOWEL SIGN E -0D47 ; [.293B.0020.0002] # MALAYALAM VOWEL SIGN EE -0D48 ; [.293C.0020.0002] # MALAYALAM VOWEL SIGN AI -0D4A ; [.293D.0020.0002] # MALAYALAM VOWEL SIGN O -0D46 0D3E ; [.293D.0020.0002] # MALAYALAM VOWEL SIGN O -0D4B ; [.293E.0020.0002] # MALAYALAM VOWEL SIGN OO -0D47 0D3E ; [.293E.0020.0002] # MALAYALAM VOWEL SIGN OO -0D4C ; [.293F.0020.0002] # MALAYALAM VOWEL SIGN AU -0D46 0D57 ; [.293F.0020.0002] # MALAYALAM VOWEL SIGN AU -0D57 ; [.2940.0020.0002] # MALAYALAM AU LENGTH MARK -0D4D ; [.2941.0020.0002] # MALAYALAM SIGN VIRAMA -0D3B ; [.2941.0020.0004] # MALAYALAM SIGN VERTICAL BAR VIRAMA -0D3C ; [.2941.0020.0004] # MALAYALAM SIGN CIRCULAR VIRAMA -0D85 ; [.2942.0020.0002] # SINHALA LETTER AYANNA -0D86 ; [.2943.0020.0002] # SINHALA LETTER AAYANNA -0D87 ; [.2944.0020.0002] # SINHALA LETTER AEYANNA -0D88 ; [.2945.0020.0002] # SINHALA LETTER AEEYANNA -0D89 ; [.2946.0020.0002] # SINHALA LETTER IYANNA -0D8A ; [.2947.0020.0002] # SINHALA LETTER IIYANNA -0D8B ; [.2948.0020.0002] # SINHALA LETTER UYANNA -0D8C ; [.2949.0020.0002] # SINHALA LETTER UUYANNA -0D8D ; [.294A.0020.0002] # SINHALA LETTER IRUYANNA -0D8E ; [.294B.0020.0002] # SINHALA LETTER IRUUYANNA -0D8F ; [.294C.0020.0002] # SINHALA LETTER ILUYANNA -0D90 ; [.294D.0020.0002] # SINHALA LETTER ILUUYANNA -0D91 ; [.294E.0020.0002] # SINHALA LETTER EYANNA -0D92 ; [.294F.0020.0002] # SINHALA LETTER EEYANNA -0D93 ; [.2950.0020.0002] # SINHALA LETTER AIYANNA -0D94 ; [.2951.0020.0002] # SINHALA LETTER OYANNA -0D95 ; [.2952.0020.0002] # SINHALA LETTER OOYANNA -0D96 ; [.2953.0020.0002] # SINHALA LETTER AUYANNA -0D9A ; [.2954.0020.0002] # SINHALA LETTER ALPAPRAANA KAYANNA -0D9B ; [.2955.0020.0002] # SINHALA LETTER MAHAAPRAANA KAYANNA -0D9C ; [.2956.0020.0002] # SINHALA LETTER ALPAPRAANA GAYANNA -0D9D ; [.2957.0020.0002] # SINHALA LETTER MAHAAPRAANA GAYANNA -0D9E ; [.2958.0020.0002] # SINHALA LETTER KANTAJA NAASIKYAYA -0D9F ; [.2959.0020.0002] # SINHALA LETTER SANYAKA GAYANNA -0DA0 ; [.295A.0020.0002] # SINHALA LETTER ALPAPRAANA CAYANNA -0DA1 ; [.295B.0020.0002] # SINHALA LETTER MAHAAPRAANA CAYANNA -0DA2 ; [.295C.0020.0002] # SINHALA LETTER ALPAPRAANA JAYANNA -0DA3 ; [.295D.0020.0002] # SINHALA LETTER MAHAAPRAANA JAYANNA -0DA4 ; [.295E.0020.0002] # SINHALA LETTER TAALUJA NAASIKYAYA -0DA5 ; [.295F.0020.0002] # SINHALA LETTER TAALUJA SANYOOGA NAAKSIKYAYA -0DA6 ; [.2960.0020.0002] # SINHALA LETTER SANYAKA JAYANNA -0DA7 ; [.2961.0020.0002] # SINHALA LETTER ALPAPRAANA TTAYANNA -0DA8 ; [.2962.0020.0002] # SINHALA LETTER MAHAAPRAANA TTAYANNA -0DA9 ; [.2963.0020.0002] # SINHALA LETTER ALPAPRAANA DDAYANNA -0DAA ; [.2964.0020.0002] # SINHALA LETTER MAHAAPRAANA DDAYANNA -0DAB ; [.2965.0020.0002] # SINHALA LETTER MUURDHAJA NAYANNA -0DAC ; [.2966.0020.0002] # SINHALA LETTER SANYAKA DDAYANNA -0DAD ; [.2967.0020.0002] # SINHALA LETTER ALPAPRAANA TAYANNA -0DAE ; [.2968.0020.0002] # SINHALA LETTER MAHAAPRAANA TAYANNA -0DAF ; [.2969.0020.0002] # SINHALA LETTER ALPAPRAANA DAYANNA -0DB0 ; [.296A.0020.0002] # SINHALA LETTER MAHAAPRAANA DAYANNA -0DB1 ; [.296B.0020.0002] # SINHALA LETTER DANTAJA NAYANNA -0DB3 ; [.296C.0020.0002] # SINHALA LETTER SANYAKA DAYANNA -0DB4 ; [.296D.0020.0002] # SINHALA LETTER ALPAPRAANA PAYANNA -0DB5 ; [.296E.0020.0002] # SINHALA LETTER MAHAAPRAANA PAYANNA -0DB6 ; [.296F.0020.0002] # SINHALA LETTER ALPAPRAANA BAYANNA -0DB7 ; [.2970.0020.0002] # SINHALA LETTER MAHAAPRAANA BAYANNA -0DB8 ; [.2971.0020.0002] # SINHALA LETTER MAYANNA -0DB9 ; [.2972.0020.0002] # SINHALA LETTER AMBA BAYANNA -0DBA ; [.2973.0020.0002] # SINHALA LETTER YAYANNA -0DBB ; [.2974.0020.0002] # SINHALA LETTER RAYANNA -0DBD ; [.2975.0020.0002] # SINHALA LETTER DANTAJA LAYANNA -0DC0 ; [.2976.0020.0002] # SINHALA LETTER VAYANNA -0DC1 ; [.2977.0020.0002] # SINHALA LETTER TAALUJA SAYANNA -0DC2 ; [.2978.0020.0002] # SINHALA LETTER MUURDHAJA SAYANNA -0DC3 ; [.2979.0020.0002] # SINHALA LETTER DANTAJA SAYANNA -0DC4 ; [.297A.0020.0002] # SINHALA LETTER HAYANNA -0DC5 ; [.297B.0020.0002] # SINHALA LETTER MUURDHAJA LAYANNA -0DC6 ; [.297C.0020.0002] # SINHALA LETTER FAYANNA -0DCF ; [.297D.0020.0002] # SINHALA VOWEL SIGN AELA-PILLA -0DD0 ; [.297E.0020.0002] # SINHALA VOWEL SIGN KETTI AEDA-PILLA -0DD1 ; [.297F.0020.0002] # SINHALA VOWEL SIGN DIGA AEDA-PILLA -0DD2 ; [.2980.0020.0002] # SINHALA VOWEL SIGN KETTI IS-PILLA -0DD3 ; [.2981.0020.0002] # SINHALA VOWEL SIGN DIGA IS-PILLA -0DD4 ; [.2982.0020.0002] # SINHALA VOWEL SIGN KETTI PAA-PILLA -0DD6 ; [.2983.0020.0002] # SINHALA VOWEL SIGN DIGA PAA-PILLA -0DD8 ; [.2984.0020.0002] # SINHALA VOWEL SIGN GAETTA-PILLA -0DF2 ; [.2985.0020.0002] # SINHALA VOWEL SIGN DIGA GAETTA-PILLA -0DDF ; [.2986.0020.0002] # SINHALA VOWEL SIGN GAYANUKITTA -0DF3 ; [.2987.0020.0002] # SINHALA VOWEL SIGN DIGA GAYANUKITTA -0DD9 ; [.2988.0020.0002] # SINHALA VOWEL SIGN KOMBUVA -0DDA ; [.2989.0020.0002] # SINHALA VOWEL SIGN DIGA KOMBUVA -0DD9 0DCA ; [.2989.0020.0002] # SINHALA VOWEL SIGN DIGA KOMBUVA -0DDB ; [.298A.0020.0002] # SINHALA VOWEL SIGN KOMBU DEKA -0DDC ; [.298B.0020.0002] # SINHALA VOWEL SIGN KOMBUVA HAA AELA-PILLA -0DD9 0DCF ; [.298B.0020.0002] # SINHALA VOWEL SIGN KOMBUVA HAA AELA-PILLA -0DDD ; [.298C.0020.0002] # SINHALA VOWEL SIGN KOMBUVA HAA DIGA AELA-PILLA -0DD9 0DCF 0DCA ; [.298C.0020.0002] # SINHALA VOWEL SIGN KOMBUVA HAA DIGA AELA-PILLA -0DDC 0DCA ; [.298C.0020.0002] # SINHALA VOWEL SIGN KOMBUVA HAA DIGA AELA-PILLA -0DDE ; [.298D.0020.0002] # SINHALA VOWEL SIGN KOMBUVA HAA GAYANUKITTA -0DD9 0DDF ; [.298D.0020.0002] # SINHALA VOWEL SIGN KOMBUVA HAA GAYANUKITTA -0DCA ; [.298E.0020.0002] # SINHALA SIGN AL-LAKUNA -AAF2 ; [.298F.0020.0002] # MEETEI MAYEK ANJI -ABC0 ; [.2990.0020.0002] # MEETEI MAYEK LETTER KOK -ABC1 ; [.2991.0020.0002] # MEETEI MAYEK LETTER SAM -ABC2 ; [.2992.0020.0002] # MEETEI MAYEK LETTER LAI -ABC3 ; [.2993.0020.0002] # MEETEI MAYEK LETTER MIT -ABC4 ; [.2994.0020.0002] # MEETEI MAYEK LETTER PA -ABC5 ; [.2995.0020.0002] # MEETEI MAYEK LETTER NA -ABC6 ; [.2996.0020.0002] # MEETEI MAYEK LETTER CHIL -ABC7 ; [.2997.0020.0002] # MEETEI MAYEK LETTER TIL -ABC8 ; [.2998.0020.0002] # MEETEI MAYEK LETTER KHOU -ABC9 ; [.2999.0020.0002] # MEETEI MAYEK LETTER NGOU -ABCA ; [.299A.0020.0002] # MEETEI MAYEK LETTER THOU -ABCB ; [.299B.0020.0002] # MEETEI MAYEK LETTER WAI -ABCC ; [.299C.0020.0002] # MEETEI MAYEK LETTER YANG -ABCD ; [.299D.0020.0002] # MEETEI MAYEK LETTER HUK -ABCE ; [.299E.0020.0002] # MEETEI MAYEK LETTER UN -ABCF ; [.299F.0020.0002] # MEETEI MAYEK LETTER I -ABD0 ; [.29A0.0020.0002] # MEETEI MAYEK LETTER PHAM -ABD1 ; [.29A1.0020.0002] # MEETEI MAYEK LETTER ATIYA -ABD2 ; [.29A2.0020.0002] # MEETEI MAYEK LETTER GOK -ABD3 ; [.29A3.0020.0002] # MEETEI MAYEK LETTER JHAM -ABD4 ; [.29A4.0020.0002] # MEETEI MAYEK LETTER RAI -ABD5 ; [.29A5.0020.0002] # MEETEI MAYEK LETTER BA -ABD6 ; [.29A6.0020.0002] # MEETEI MAYEK LETTER JIL -ABD7 ; [.29A7.0020.0002] # MEETEI MAYEK LETTER DIL -ABD8 ; [.29A8.0020.0002] # MEETEI MAYEK LETTER GHOU -ABD9 ; [.29A9.0020.0002] # MEETEI MAYEK LETTER DHOU -ABDA ; [.29AA.0020.0002] # MEETEI MAYEK LETTER BHAM -AAE0 ; [.29AB.0020.0002] # MEETEI MAYEK LETTER E -AAE1 ; [.29AC.0020.0002] # MEETEI MAYEK LETTER O -AAE2 ; [.29AD.0020.0002] # MEETEI MAYEK LETTER CHA -AAE3 ; [.29AE.0020.0002] # MEETEI MAYEK LETTER NYA -AAE4 ; [.29AF.0020.0002] # MEETEI MAYEK LETTER TTA -AAE5 ; [.29B0.0020.0002] # MEETEI MAYEK LETTER TTHA -AAE6 ; [.29B1.0020.0002] # MEETEI MAYEK LETTER DDA -AAE7 ; [.29B2.0020.0002] # MEETEI MAYEK LETTER DDHA -AAE8 ; [.29B3.0020.0002] # MEETEI MAYEK LETTER NNA -AAE9 ; [.29B4.0020.0002] # MEETEI MAYEK LETTER SHA -AAEA ; [.29B5.0020.0002] # MEETEI MAYEK LETTER SSA -ABE3 ; [.29B6.0020.0002] # MEETEI MAYEK VOWEL SIGN ONAP -ABE4 ; [.29B7.0020.0002] # MEETEI MAYEK VOWEL SIGN INAP -ABE5 ; [.29B8.0020.0002] # MEETEI MAYEK VOWEL SIGN ANAP -ABE6 ; [.29B9.0020.0002] # MEETEI MAYEK VOWEL SIGN YENAP -ABE7 ; [.29BA.0020.0002] # MEETEI MAYEK VOWEL SIGN SOUNAP -ABE8 ; [.29BB.0020.0002] # MEETEI MAYEK VOWEL SIGN UNAP -ABE9 ; [.29BC.0020.0002] # MEETEI MAYEK VOWEL SIGN CHEINAP -ABEA ; [.29BD.0020.0002] # MEETEI MAYEK VOWEL SIGN NUNG -AAEB ; [.29BE.0020.0002] # MEETEI MAYEK VOWEL SIGN II -AAEC ; [.29BF.0020.0002] # MEETEI MAYEK VOWEL SIGN UU -AAED ; [.29C0.0020.0002] # MEETEI MAYEK VOWEL SIGN AAI -AAEE ; [.29C1.0020.0002] # MEETEI MAYEK VOWEL SIGN AU -AAEF ; [.29C2.0020.0002] # MEETEI MAYEK VOWEL SIGN AAU -AAF5 ; [.29C3.0020.0002] # MEETEI MAYEK VOWEL SIGN VISARGA -ABDB ; [.29C4.0020.0002] # MEETEI MAYEK LETTER KOK LONSUM -ABDC ; [.29C5.0020.0002] # MEETEI MAYEK LETTER LAI LONSUM -ABDD ; [.29C6.0020.0002] # MEETEI MAYEK LETTER MIT LONSUM -ABDE ; [.29C7.0020.0002] # MEETEI MAYEK LETTER PA LONSUM -ABDF ; [.29C8.0020.0002] # MEETEI MAYEK LETTER NA LONSUM -ABE0 ; [.29C9.0020.0002] # MEETEI MAYEK LETTER TIL LONSUM -ABE1 ; [.29CA.0020.0002] # MEETEI MAYEK LETTER NGOU LONSUM -ABE2 ; [.29CB.0020.0002] # MEETEI MAYEK LETTER I LONSUM -ABED ; [.29CC.0020.0002] # MEETEI MAYEK APUN IYEK -AAF6 ; [.29CD.0020.0002] # MEETEI MAYEK VIRAMA -A800 ; [.29CE.0020.0002] # SYLOTI NAGRI LETTER A -A801 ; [.29CF.0020.0002] # SYLOTI NAGRI LETTER I -A802 ; [.29D0.0020.0002] # SYLOTI NAGRI SIGN DVISVARA -A803 ; [.29D1.0020.0002] # SYLOTI NAGRI LETTER U -A804 ; [.29D2.0020.0002] # SYLOTI NAGRI LETTER E -A805 ; [.29D3.0020.0002] # SYLOTI NAGRI LETTER O -A806 ; [.29D4.0020.0002] # SYLOTI NAGRI SIGN HASANTA -A807 ; [.29D5.0020.0002] # SYLOTI NAGRI LETTER KO -A808 ; [.29D6.0020.0002] # SYLOTI NAGRI LETTER KHO -A809 ; [.29D7.0020.0002] # SYLOTI NAGRI LETTER GO -A80A ; [.29D8.0020.0002] # SYLOTI NAGRI LETTER GHO -A80C ; [.29D9.0020.0002] # SYLOTI NAGRI LETTER CO -A80D ; [.29DA.0020.0002] # SYLOTI NAGRI LETTER CHO -A80E ; [.29DB.0020.0002] # SYLOTI NAGRI LETTER JO -A80F ; [.29DC.0020.0002] # SYLOTI NAGRI LETTER JHO -A810 ; [.29DD.0020.0002] # SYLOTI NAGRI LETTER TTO -A811 ; [.29DE.0020.0002] # SYLOTI NAGRI LETTER TTHO -A812 ; [.29DF.0020.0002] # SYLOTI NAGRI LETTER DDO -A813 ; [.29E0.0020.0002] # SYLOTI NAGRI LETTER DDHO -A814 ; [.29E1.0020.0002] # SYLOTI NAGRI LETTER TO -A815 ; [.29E2.0020.0002] # SYLOTI NAGRI LETTER THO -A816 ; [.29E3.0020.0002] # SYLOTI NAGRI LETTER DO -A817 ; [.29E4.0020.0002] # SYLOTI NAGRI LETTER DHO -A818 ; [.29E5.0020.0002] # SYLOTI NAGRI LETTER NO -A819 ; [.29E6.0020.0002] # SYLOTI NAGRI LETTER PO -A81A ; [.29E7.0020.0002] # SYLOTI NAGRI LETTER PHO -A81B ; [.29E8.0020.0002] # SYLOTI NAGRI LETTER BO -A81C ; [.29E9.0020.0002] # SYLOTI NAGRI LETTER BHO -A81D ; [.29EA.0020.0002] # SYLOTI NAGRI LETTER MO -A81E ; [.29EB.0020.0002] # SYLOTI NAGRI LETTER RO -A81F ; [.29EC.0020.0002] # SYLOTI NAGRI LETTER LO -A820 ; [.29ED.0020.0002] # SYLOTI NAGRI LETTER RRO -A821 ; [.29EE.0020.0002] # SYLOTI NAGRI LETTER SO -A822 ; [.29EF.0020.0002] # SYLOTI NAGRI LETTER HO -A823 ; [.29F0.0020.0002] # SYLOTI NAGRI VOWEL SIGN A -A824 ; [.29F1.0020.0002] # SYLOTI NAGRI VOWEL SIGN I -A825 ; [.29F2.0020.0002] # SYLOTI NAGRI VOWEL SIGN U -A826 ; [.29F3.0020.0002] # SYLOTI NAGRI VOWEL SIGN E -A827 ; [.29F4.0020.0002] # SYLOTI NAGRI VOWEL SIGN OO -A882 ; [.29F5.0020.0002] # SAURASHTRA LETTER A -A883 ; [.29F6.0020.0002] # SAURASHTRA LETTER AA -A884 ; [.29F7.0020.0002] # SAURASHTRA LETTER I -A885 ; [.29F8.0020.0002] # SAURASHTRA LETTER II -A886 ; [.29F9.0020.0002] # SAURASHTRA LETTER U -A887 ; [.29FA.0020.0002] # SAURASHTRA LETTER UU -A888 ; [.29FB.0020.0002] # SAURASHTRA LETTER VOCALIC R -A889 ; [.29FC.0020.0002] # SAURASHTRA LETTER VOCALIC RR -A88A ; [.29FD.0020.0002] # SAURASHTRA LETTER VOCALIC L -A88B ; [.29FE.0020.0002] # SAURASHTRA LETTER VOCALIC LL -A88C ; [.29FF.0020.0002] # SAURASHTRA LETTER E -A88D ; [.2A00.0020.0002] # SAURASHTRA LETTER EE -A88E ; [.2A01.0020.0002] # SAURASHTRA LETTER AI -A88F ; [.2A02.0020.0002] # SAURASHTRA LETTER O -A890 ; [.2A03.0020.0002] # SAURASHTRA LETTER OO -A891 ; [.2A04.0020.0002] # SAURASHTRA LETTER AU -A892 ; [.2A05.0020.0002] # SAURASHTRA LETTER KA -A893 ; [.2A06.0020.0002] # SAURASHTRA LETTER KHA -A894 ; [.2A07.0020.0002] # SAURASHTRA LETTER GA -A895 ; [.2A08.0020.0002] # SAURASHTRA LETTER GHA -A896 ; [.2A09.0020.0002] # SAURASHTRA LETTER NGA -A897 ; [.2A0A.0020.0002] # SAURASHTRA LETTER CA -A898 ; [.2A0B.0020.0002] # SAURASHTRA LETTER CHA -A899 ; [.2A0C.0020.0002] # SAURASHTRA LETTER JA -A89A ; [.2A0D.0020.0002] # SAURASHTRA LETTER JHA -A89B ; [.2A0E.0020.0002] # SAURASHTRA LETTER NYA -A89C ; [.2A0F.0020.0002] # SAURASHTRA LETTER TTA -A89D ; [.2A10.0020.0002] # SAURASHTRA LETTER TTHA -A89E ; [.2A11.0020.0002] # SAURASHTRA LETTER DDA -A89F ; [.2A12.0020.0002] # SAURASHTRA LETTER DDHA -A8A0 ; [.2A13.0020.0002] # SAURASHTRA LETTER NNA -A8A1 ; [.2A14.0020.0002] # SAURASHTRA LETTER TA -A8A2 ; [.2A15.0020.0002] # SAURASHTRA LETTER THA -A8A3 ; [.2A16.0020.0002] # SAURASHTRA LETTER DA -A8A4 ; [.2A17.0020.0002] # SAURASHTRA LETTER DHA -A8A5 ; [.2A18.0020.0002] # SAURASHTRA LETTER NA -A8A6 ; [.2A19.0020.0002] # SAURASHTRA LETTER PA -A8A7 ; [.2A1A.0020.0002] # SAURASHTRA LETTER PHA -A8A8 ; [.2A1B.0020.0002] # SAURASHTRA LETTER BA -A8A9 ; [.2A1C.0020.0002] # SAURASHTRA LETTER BHA -A8AA ; [.2A1D.0020.0002] # SAURASHTRA LETTER MA -A8AB ; [.2A1E.0020.0002] # SAURASHTRA LETTER YA -A8AC ; [.2A1F.0020.0002] # SAURASHTRA LETTER RA -A8AD ; [.2A20.0020.0002] # SAURASHTRA LETTER LA -A8AE ; [.2A21.0020.0002] # SAURASHTRA LETTER VA -A8AF ; [.2A22.0020.0002] # SAURASHTRA LETTER SHA -A8B0 ; [.2A23.0020.0002] # SAURASHTRA LETTER SSA -A8B1 ; [.2A24.0020.0002] # SAURASHTRA LETTER SA -A8B2 ; [.2A25.0020.0002] # SAURASHTRA LETTER HA -A8B3 ; [.2A26.0020.0002] # SAURASHTRA LETTER LLA -A8B4 ; [.2A27.0020.0002] # SAURASHTRA CONSONANT SIGN HAARU -A8B5 ; [.2A28.0020.0002] # SAURASHTRA VOWEL SIGN AA -A8B6 ; [.2A29.0020.0002] # SAURASHTRA VOWEL SIGN I -A8B7 ; [.2A2A.0020.0002] # SAURASHTRA VOWEL SIGN II -A8B8 ; [.2A2B.0020.0002] # SAURASHTRA VOWEL SIGN U -A8B9 ; [.2A2C.0020.0002] # SAURASHTRA VOWEL SIGN UU -A8BA ; [.2A2D.0020.0002] # SAURASHTRA VOWEL SIGN VOCALIC R -A8BB ; [.2A2E.0020.0002] # SAURASHTRA VOWEL SIGN VOCALIC RR -A8BC ; [.2A2F.0020.0002] # SAURASHTRA VOWEL SIGN VOCALIC L -A8BD ; [.2A30.0020.0002] # SAURASHTRA VOWEL SIGN VOCALIC LL -A8BE ; [.2A31.0020.0002] # SAURASHTRA VOWEL SIGN E -A8BF ; [.2A32.0020.0002] # SAURASHTRA VOWEL SIGN EE -A8C0 ; [.2A33.0020.0002] # SAURASHTRA VOWEL SIGN AI -A8C1 ; [.2A34.0020.0002] # SAURASHTRA VOWEL SIGN O -A8C2 ; [.2A35.0020.0002] # SAURASHTRA VOWEL SIGN OO -A8C3 ; [.2A36.0020.0002] # SAURASHTRA VOWEL SIGN AU -A8C4 ; [.2A37.0020.0002] # SAURASHTRA SIGN VIRAMA -11083 ; [.2A38.0020.0002] # KAITHI LETTER A -11084 ; [.2A39.0020.0002] # KAITHI LETTER AA -11085 ; [.2A3A.0020.0002] # KAITHI LETTER I -11086 ; [.2A3B.0020.0002] # KAITHI LETTER II -11087 ; [.2A3C.0020.0002] # KAITHI LETTER U -11088 ; [.2A3D.0020.0002] # KAITHI LETTER UU -11089 ; [.2A3E.0020.0002] # KAITHI LETTER E -1108A ; [.2A3F.0020.0002] # KAITHI LETTER AI -1108B ; [.2A40.0020.0002] # KAITHI LETTER O -1108C ; [.2A41.0020.0002] # KAITHI LETTER AU -1108D ; [.2A42.0020.0002] # KAITHI LETTER KA -1108E ; [.2A43.0020.0002] # KAITHI LETTER KHA -1108F ; [.2A44.0020.0002] # KAITHI LETTER GA -11090 ; [.2A45.0020.0002] # KAITHI LETTER GHA -11091 ; [.2A46.0020.0002] # KAITHI LETTER NGA -11092 ; [.2A47.0020.0002] # KAITHI LETTER CA -11093 ; [.2A48.0020.0002] # KAITHI LETTER CHA -11094 ; [.2A49.0020.0002] # KAITHI LETTER JA -11095 ; [.2A4A.0020.0002] # KAITHI LETTER JHA -11096 ; [.2A4B.0020.0002] # KAITHI LETTER NYA -11097 ; [.2A4C.0020.0002] # KAITHI LETTER TTA -11098 ; [.2A4D.0020.0002] # KAITHI LETTER TTHA -11099 ; [.2A4E.0020.0002] # KAITHI LETTER DDA -1109A ; [.2A4E.0020.0002][.0000.00C2.0002] # KAITHI LETTER DDDHA -1109B ; [.2A4F.0020.0002] # KAITHI LETTER DDHA -1109C ; [.2A4F.0020.0002][.0000.00C2.0002] # KAITHI LETTER RHA -1109D ; [.2A50.0020.0002] # KAITHI LETTER NNA -1109E ; [.2A51.0020.0002] # KAITHI LETTER TA -1109F ; [.2A52.0020.0002] # KAITHI LETTER THA -110A0 ; [.2A53.0020.0002] # KAITHI LETTER DA -110A1 ; [.2A54.0020.0002] # KAITHI LETTER DHA -110A2 ; [.2A55.0020.0002] # KAITHI LETTER NA -110A3 ; [.2A56.0020.0002] # KAITHI LETTER PA -110A4 ; [.2A57.0020.0002] # KAITHI LETTER PHA -110A5 ; [.2A58.0020.0002] # KAITHI LETTER BA -110AB ; [.2A58.0020.0002][.0000.00C2.0002] # KAITHI LETTER VA -110A6 ; [.2A59.0020.0002] # KAITHI LETTER BHA -110A7 ; [.2A5A.0020.0002] # KAITHI LETTER MA -110A8 ; [.2A5B.0020.0002] # KAITHI LETTER YA -110A9 ; [.2A5C.0020.0002] # KAITHI LETTER RA -110AA ; [.2A5D.0020.0002] # KAITHI LETTER LA -110AC ; [.2A5E.0020.0002] # KAITHI LETTER SHA -110AD ; [.2A5F.0020.0002] # KAITHI LETTER SSA -110AE ; [.2A60.0020.0002] # KAITHI LETTER SA -110AF ; [.2A61.0020.0002] # KAITHI LETTER HA -110B0 ; [.2A62.0020.0002] # KAITHI VOWEL SIGN AA -110B1 ; [.2A63.0020.0002] # KAITHI VOWEL SIGN I -110B2 ; [.2A64.0020.0002] # KAITHI VOWEL SIGN II -110B3 ; [.2A65.0020.0002] # KAITHI VOWEL SIGN U -110B4 ; [.2A66.0020.0002] # KAITHI VOWEL SIGN UU -110B5 ; [.2A67.0020.0002] # KAITHI VOWEL SIGN E -110B6 ; [.2A68.0020.0002] # KAITHI VOWEL SIGN AI -110B7 ; [.2A69.0020.0002] # KAITHI VOWEL SIGN O -110B8 ; [.2A6A.0020.0002] # KAITHI VOWEL SIGN AU -110B9 ; [.2A6B.0020.0002] # KAITHI SIGN VIRAMA -11150 ; [.2A6C.0020.0002] # MAHAJANI LETTER A -11151 ; [.2A6D.0020.0002] # MAHAJANI LETTER I -11152 ; [.2A6E.0020.0002] # MAHAJANI LETTER U -11153 ; [.2A6F.0020.0002] # MAHAJANI LETTER E -11154 ; [.2A70.0020.0002] # MAHAJANI LETTER O -11155 ; [.2A71.0020.0002] # MAHAJANI LETTER KA -11156 ; [.2A72.0020.0002] # MAHAJANI LETTER KHA -11157 ; [.2A73.0020.0002] # MAHAJANI LETTER GA -11158 ; [.2A74.0020.0002] # MAHAJANI LETTER GHA -11159 ; [.2A75.0020.0002] # MAHAJANI LETTER CA -1115A ; [.2A76.0020.0002] # MAHAJANI LETTER CHA -1115B ; [.2A77.0020.0002] # MAHAJANI LETTER JA -1115C ; [.2A78.0020.0002] # MAHAJANI LETTER JHA -1115D ; [.2A79.0020.0002] # MAHAJANI LETTER NYA -1115E ; [.2A7A.0020.0002] # MAHAJANI LETTER TTA -1115F ; [.2A7B.0020.0002] # MAHAJANI LETTER TTHA -11160 ; [.2A7C.0020.0002] # MAHAJANI LETTER DDA -11161 ; [.2A7D.0020.0002] # MAHAJANI LETTER DDHA -11162 ; [.2A7E.0020.0002] # MAHAJANI LETTER NNA -11163 ; [.2A7F.0020.0002] # MAHAJANI LETTER TA -11164 ; [.2A80.0020.0002] # MAHAJANI LETTER THA -11165 ; [.2A81.0020.0002] # MAHAJANI LETTER DA -11166 ; [.2A82.0020.0002] # MAHAJANI LETTER DHA -11167 ; [.2A83.0020.0002] # MAHAJANI LETTER NA -11168 ; [.2A84.0020.0002] # MAHAJANI LETTER PA -11169 ; [.2A85.0020.0002] # MAHAJANI LETTER PHA -1116A ; [.2A86.0020.0002] # MAHAJANI LETTER BA -1116B ; [.2A87.0020.0002] # MAHAJANI LETTER BHA -1116C ; [.2A88.0020.0002] # MAHAJANI LETTER MA -1116D ; [.2A89.0020.0002] # MAHAJANI LETTER RA -1116E ; [.2A8A.0020.0002] # MAHAJANI LETTER LA -1116F ; [.2A8B.0020.0002] # MAHAJANI LETTER VA -11176 ; [.2A8C.0020.0002] # MAHAJANI LIGATURE SHRI -11170 ; [.2A8D.0020.0002] # MAHAJANI LETTER SA -11171 ; [.2A8E.0020.0002] # MAHAJANI LETTER HA -11172 ; [.2A8F.0020.0002] # MAHAJANI LETTER RRA -111C4 ; [.2A90.0020.0002] # SHARADA OM -111DA ; [.2A91.0020.0002] # SHARADA EKAM -11183 ; [.2A92.0020.0002] # SHARADA LETTER A -11184 ; [.2A93.0020.0002] # SHARADA LETTER AA -11185 ; [.2A94.0020.0002] # SHARADA LETTER I -11186 ; [.2A95.0020.0002] # SHARADA LETTER II -11187 ; [.2A96.0020.0002] # SHARADA LETTER U -11188 ; [.2A97.0020.0002] # SHARADA LETTER UU -11189 ; [.2A98.0020.0002] # SHARADA LETTER VOCALIC R -1118A ; [.2A99.0020.0002] # SHARADA LETTER VOCALIC RR -1118B ; [.2A9A.0020.0002] # SHARADA LETTER VOCALIC L -1118C ; [.2A9B.0020.0002] # SHARADA LETTER VOCALIC LL -1118D ; [.2A9C.0020.0002] # SHARADA LETTER E -1118E ; [.2A9D.0020.0002] # SHARADA LETTER AI -1118F ; [.2A9E.0020.0002] # SHARADA LETTER O -11190 ; [.2A9F.0020.0002] # SHARADA LETTER AU -11191 ; [.2AA0.0020.0002] # SHARADA LETTER KA -11192 ; [.2AA1.0020.0002] # SHARADA LETTER KHA -11193 ; [.2AA2.0020.0002] # SHARADA LETTER GA -11194 ; [.2AA3.0020.0002] # SHARADA LETTER GHA -11195 ; [.2AA4.0020.0002] # SHARADA LETTER NGA -11196 ; [.2AA5.0020.0002] # SHARADA LETTER CA -11197 ; [.2AA6.0020.0002] # SHARADA LETTER CHA -11198 ; [.2AA7.0020.0002] # SHARADA LETTER JA -11199 ; [.2AA8.0020.0002] # SHARADA LETTER JHA -1119A ; [.2AA9.0020.0002] # SHARADA LETTER NYA -1119B ; [.2AAA.0020.0002] # SHARADA LETTER TTA -1119C ; [.2AAB.0020.0002] # SHARADA LETTER TTHA -1119D ; [.2AAC.0020.0002] # SHARADA LETTER DDA -1119E ; [.2AAD.0020.0002] # SHARADA LETTER DDHA -1119F ; [.2AAE.0020.0002] # SHARADA LETTER NNA -111A0 ; [.2AAF.0020.0002] # SHARADA LETTER TA -111A1 ; [.2AB0.0020.0002] # SHARADA LETTER THA -111A2 ; [.2AB1.0020.0002] # SHARADA LETTER DA -111A3 ; [.2AB2.0020.0002] # SHARADA LETTER DHA -111A4 ; [.2AB3.0020.0002] # SHARADA LETTER NA -111A5 ; [.2AB4.0020.0002] # SHARADA LETTER PA -111A6 ; [.2AB5.0020.0002] # SHARADA LETTER PHA -111A7 ; [.2AB6.0020.0002] # SHARADA LETTER BA -111A8 ; [.2AB7.0020.0002] # SHARADA LETTER BHA -111A9 ; [.2AB8.0020.0002] # SHARADA LETTER MA -111AA ; [.2AB9.0020.0002] # SHARADA LETTER YA -111AB ; [.2ABA.0020.0002] # SHARADA LETTER RA -111AC ; [.2ABB.0020.0002] # SHARADA LETTER LA -111AD ; [.2ABC.0020.0002] # SHARADA LETTER LLA -111AE ; [.2ABD.0020.0002] # SHARADA LETTER VA -111AF ; [.2ABE.0020.0002] # SHARADA LETTER SHA -111B0 ; [.2ABF.0020.0002] # SHARADA LETTER SSA -111B1 ; [.2AC0.0020.0002] # SHARADA LETTER SA -111B2 ; [.2AC1.0020.0002] # SHARADA LETTER HA -111C1 ; [.2AC2.0020.0002] # SHARADA SIGN AVAGRAHA -111C2 ; [.2AC3.0020.0002] # SHARADA SIGN JIHVAMULIYA -111C3 ; [.2AC4.0020.0002] # SHARADA SIGN UPADHMANIYA -111DC ; [.2AC5.0020.0002] # SHARADA HEADSTROKE -111B3 ; [.2AC6.0020.0002] # SHARADA VOWEL SIGN AA -111B4 ; [.2AC7.0020.0002] # SHARADA VOWEL SIGN I -111B5 ; [.2AC8.0020.0002] # SHARADA VOWEL SIGN II -111B6 ; [.2AC9.0020.0002] # SHARADA VOWEL SIGN U -111B7 ; [.2ACA.0020.0002] # SHARADA VOWEL SIGN UU -111B8 ; [.2ACB.0020.0002] # SHARADA VOWEL SIGN VOCALIC R -111B9 ; [.2ACC.0020.0002] # SHARADA VOWEL SIGN VOCALIC RR -111BA ; [.2ACD.0020.0002] # SHARADA VOWEL SIGN VOCALIC L -111BB ; [.2ACE.0020.0002] # SHARADA VOWEL SIGN VOCALIC LL -111BC ; [.2ACF.0020.0002] # SHARADA VOWEL SIGN E -111BD ; [.2AD0.0020.0002] # SHARADA VOWEL SIGN AI -111BE ; [.2AD1.0020.0002] # SHARADA VOWEL SIGN O -111BF ; [.2AD2.0020.0002] # SHARADA VOWEL SIGN AU -111C0 ; [.2AD3.0020.0002] # SHARADA SIGN VIRAMA -11200 ; [.2AD4.0020.0002] # KHOJKI LETTER A -11201 ; [.2AD5.0020.0002] # KHOJKI LETTER AA -11202 ; [.2AD6.0020.0002] # KHOJKI LETTER I -11203 ; [.2AD7.0020.0002] # KHOJKI LETTER U -11204 ; [.2AD8.0020.0002] # KHOJKI LETTER E -11205 ; [.2AD9.0020.0002] # KHOJKI LETTER AI -11206 ; [.2ADA.0020.0002] # KHOJKI LETTER O -11207 ; [.2ADB.0020.0002] # KHOJKI LETTER AU -11208 ; [.2ADC.0020.0002] # KHOJKI LETTER KA -11209 ; [.2ADD.0020.0002] # KHOJKI LETTER KHA -1120A ; [.2ADE.0020.0002] # KHOJKI LETTER GA -1120B ; [.2ADF.0020.0002] # KHOJKI LETTER GGA -1120C ; [.2AE0.0020.0002] # KHOJKI LETTER GHA -1120D ; [.2AE1.0020.0002] # KHOJKI LETTER NGA -1120E ; [.2AE2.0020.0002] # KHOJKI LETTER CA -1120F ; [.2AE3.0020.0002] # KHOJKI LETTER CHA -11210 ; [.2AE4.0020.0002] # KHOJKI LETTER JA -11211 ; [.2AE5.0020.0002] # KHOJKI LETTER JJA -11213 ; [.2AE6.0020.0002] # KHOJKI LETTER NYA -11214 ; [.2AE7.0020.0002] # KHOJKI LETTER TTA -11215 ; [.2AE8.0020.0002] # KHOJKI LETTER TTHA -11216 ; [.2AE9.0020.0002] # KHOJKI LETTER DDA -11217 ; [.2AEA.0020.0002] # KHOJKI LETTER DDHA -11218 ; [.2AEB.0020.0002] # KHOJKI LETTER NNA -11219 ; [.2AEC.0020.0002] # KHOJKI LETTER TA -1121A ; [.2AED.0020.0002] # KHOJKI LETTER THA -1121B ; [.2AEE.0020.0002] # KHOJKI LETTER DA -1121C ; [.2AEF.0020.0002] # KHOJKI LETTER DDDA -1121D ; [.2AF0.0020.0002] # KHOJKI LETTER DHA -1121E ; [.2AF1.0020.0002] # KHOJKI LETTER NA -1121F ; [.2AF2.0020.0002] # KHOJKI LETTER PA -11220 ; [.2AF3.0020.0002] # KHOJKI LETTER PHA -11221 ; [.2AF4.0020.0002] # KHOJKI LETTER BA -11222 ; [.2AF5.0020.0002] # KHOJKI LETTER BBA -11223 ; [.2AF6.0020.0002] # KHOJKI LETTER BHA -11224 ; [.2AF7.0020.0002] # KHOJKI LETTER MA -11225 ; [.2AF8.0020.0002] # KHOJKI LETTER YA -11226 ; [.2AF9.0020.0002] # KHOJKI LETTER RA -11227 ; [.2AFA.0020.0002] # KHOJKI LETTER LA -11228 ; [.2AFB.0020.0002] # KHOJKI LETTER VA -11229 ; [.2AFC.0020.0002] # KHOJKI LETTER SA -1122A ; [.2AFD.0020.0002] # KHOJKI LETTER HA -1122B ; [.2AFE.0020.0002] # KHOJKI LETTER LLA -1122C ; [.2AFF.0020.0002] # KHOJKI VOWEL SIGN AA -1122D ; [.2B00.0020.0002] # KHOJKI VOWEL SIGN I -1122E ; [.2B01.0020.0002] # KHOJKI VOWEL SIGN II -1122F ; [.2B02.0020.0002] # KHOJKI VOWEL SIGN U -11230 ; [.2B03.0020.0002] # KHOJKI VOWEL SIGN E -11231 ; [.2B04.0020.0002] # KHOJKI VOWEL SIGN AI -11232 ; [.2B05.0020.0002] # KHOJKI VOWEL SIGN O -11233 ; [.2B06.0020.0002] # KHOJKI VOWEL SIGN AU -11235 ; [.2B07.0020.0002] # KHOJKI SIGN VIRAMA -112B0 ; [.2B08.0020.0002] # KHUDAWADI LETTER A -112B1 ; [.2B09.0020.0002] # KHUDAWADI LETTER AA -112B2 ; [.2B0A.0020.0002] # KHUDAWADI LETTER I -112B3 ; [.2B0B.0020.0002] # KHUDAWADI LETTER II -112B4 ; [.2B0C.0020.0002] # KHUDAWADI LETTER U -112B5 ; [.2B0D.0020.0002] # KHUDAWADI LETTER UU -112B6 ; [.2B0E.0020.0002] # KHUDAWADI LETTER E -112B7 ; [.2B0F.0020.0002] # KHUDAWADI LETTER AI -112B8 ; [.2B10.0020.0002] # KHUDAWADI LETTER O -112B9 ; [.2B11.0020.0002] # KHUDAWADI LETTER AU -112BA ; [.2B12.0020.0002] # KHUDAWADI LETTER KA -112BB ; [.2B13.0020.0002] # KHUDAWADI LETTER KHA -112BC ; [.2B14.0020.0002] # KHUDAWADI LETTER GA -112BD ; [.2B15.0020.0002] # KHUDAWADI LETTER GGA -112BE ; [.2B16.0020.0002] # KHUDAWADI LETTER GHA -112BF ; [.2B17.0020.0002] # KHUDAWADI LETTER NGA -112C0 ; [.2B18.0020.0002] # KHUDAWADI LETTER CA -112C1 ; [.2B19.0020.0002] # KHUDAWADI LETTER CHA -112C2 ; [.2B1A.0020.0002] # KHUDAWADI LETTER JA -112C3 ; [.2B1B.0020.0002] # KHUDAWADI LETTER JJA -112C4 ; [.2B1C.0020.0002] # KHUDAWADI LETTER JHA -112C5 ; [.2B1D.0020.0002] # KHUDAWADI LETTER NYA -112C6 ; [.2B1E.0020.0002] # KHUDAWADI LETTER TTA -112C7 ; [.2B1F.0020.0002] # KHUDAWADI LETTER TTHA -112C8 ; [.2B20.0020.0002] # KHUDAWADI LETTER DDA -112C9 ; [.2B21.0020.0002] # KHUDAWADI LETTER DDDA -112CA ; [.2B22.0020.0002] # KHUDAWADI LETTER RRA -112CB ; [.2B23.0020.0002] # KHUDAWADI LETTER DDHA -112CC ; [.2B24.0020.0002] # KHUDAWADI LETTER NNA -112CD ; [.2B25.0020.0002] # KHUDAWADI LETTER TA -112CE ; [.2B26.0020.0002] # KHUDAWADI LETTER THA -112CF ; [.2B27.0020.0002] # KHUDAWADI LETTER DA -112D0 ; [.2B28.0020.0002] # KHUDAWADI LETTER DHA -112D1 ; [.2B29.0020.0002] # KHUDAWADI LETTER NA -112D2 ; [.2B2A.0020.0002] # KHUDAWADI LETTER PA -112D3 ; [.2B2B.0020.0002] # KHUDAWADI LETTER PHA -112D4 ; [.2B2C.0020.0002] # KHUDAWADI LETTER BA -112D5 ; [.2B2D.0020.0002] # KHUDAWADI LETTER BBA -112D6 ; [.2B2E.0020.0002] # KHUDAWADI LETTER BHA -112D7 ; [.2B2F.0020.0002] # KHUDAWADI LETTER MA -112D8 ; [.2B30.0020.0002] # KHUDAWADI LETTER YA -112D9 ; [.2B31.0020.0002] # KHUDAWADI LETTER RA -112DA ; [.2B32.0020.0002] # KHUDAWADI LETTER LA -112DB ; [.2B33.0020.0002] # KHUDAWADI LETTER VA -112DC ; [.2B34.0020.0002] # KHUDAWADI LETTER SHA -112DD ; [.2B35.0020.0002] # KHUDAWADI LETTER SA -112DE ; [.2B36.0020.0002] # KHUDAWADI LETTER HA -112E0 ; [.2B37.0020.0002] # KHUDAWADI VOWEL SIGN AA -112E1 ; [.2B38.0020.0002] # KHUDAWADI VOWEL SIGN I -112E2 ; [.2B39.0020.0002] # KHUDAWADI VOWEL SIGN II -112E3 ; [.2B3A.0020.0002] # KHUDAWADI VOWEL SIGN U -112E4 ; [.2B3B.0020.0002] # KHUDAWADI VOWEL SIGN UU -112E5 ; [.2B3C.0020.0002] # KHUDAWADI VOWEL SIGN E -112E6 ; [.2B3D.0020.0002] # KHUDAWADI VOWEL SIGN AI -112E7 ; [.2B3E.0020.0002] # KHUDAWADI VOWEL SIGN O -112E8 ; [.2B3F.0020.0002] # KHUDAWADI VOWEL SIGN AU -112EA ; [.2B40.0020.0002] # KHUDAWADI SIGN VIRAMA -11280 ; [.2B41.0020.0002] # MULTANI LETTER A -11281 ; [.2B42.0020.0002] # MULTANI LETTER I -11282 ; [.2B43.0020.0002] # MULTANI LETTER U -11283 ; [.2B44.0020.0002] # MULTANI LETTER E -112A5 ; [.2B45.0020.0002] # MULTANI LETTER SA -112A6 ; [.2B46.0020.0002] # MULTANI LETTER HA -11284 ; [.2B47.0020.0002] # MULTANI LETTER KA -11285 ; [.2B48.0020.0002] # MULTANI LETTER KHA -11286 ; [.2B49.0020.0002] # MULTANI LETTER GA -11288 ; [.2B4A.0020.0002] # MULTANI LETTER GHA -1128A ; [.2B4B.0020.0002] # MULTANI LETTER CA -1128B ; [.2B4C.0020.0002] # MULTANI LETTER CHA -1128C ; [.2B4D.0020.0002] # MULTANI LETTER JA -1128D ; [.2B4E.0020.0002] # MULTANI LETTER JJA -1128F ; [.2B4F.0020.0002] # MULTANI LETTER NYA -11290 ; [.2B50.0020.0002] # MULTANI LETTER TTA -11291 ; [.2B51.0020.0002] # MULTANI LETTER TTHA -11292 ; [.2B52.0020.0002] # MULTANI LETTER DDA -11293 ; [.2B53.0020.0002] # MULTANI LETTER DDDA -11294 ; [.2B54.0020.0002] # MULTANI LETTER DDHA -11295 ; [.2B55.0020.0002] # MULTANI LETTER NNA -11296 ; [.2B56.0020.0002] # MULTANI LETTER TA -11297 ; [.2B57.0020.0002] # MULTANI LETTER THA -11298 ; [.2B58.0020.0002] # MULTANI LETTER DA -11299 ; [.2B59.0020.0002] # MULTANI LETTER DHA -1129A ; [.2B5A.0020.0002] # MULTANI LETTER NA -1129B ; [.2B5B.0020.0002] # MULTANI LETTER PA -1129C ; [.2B5C.0020.0002] # MULTANI LETTER PHA -1129D ; [.2B5D.0020.0002] # MULTANI LETTER BA -1129F ; [.2B5E.0020.0002] # MULTANI LETTER BHA -112A0 ; [.2B5F.0020.0002] # MULTANI LETTER MA -112A1 ; [.2B60.0020.0002] # MULTANI LETTER YA -112A2 ; [.2B61.0020.0002] # MULTANI LETTER RA -112A3 ; [.2B62.0020.0002] # MULTANI LETTER LA -112A4 ; [.2B63.0020.0002] # MULTANI LETTER VA -112A7 ; [.2B64.0020.0002] # MULTANI LETTER RRA -112A8 ; [.2B65.0020.0002] # MULTANI LETTER RHA -11350 ; [.2B66.0020.0002] # GRANTHA OM -11305 ; [.2B67.0020.0002] # GRANTHA LETTER A -11306 ; [.2B68.0020.0002] # GRANTHA LETTER AA -11307 ; [.2B69.0020.0002] # GRANTHA LETTER I -11308 ; [.2B6A.0020.0002] # GRANTHA LETTER II -11309 ; [.2B6B.0020.0002] # GRANTHA LETTER U -1130A ; [.2B6C.0020.0002] # GRANTHA LETTER UU -1130B ; [.2B6D.0020.0002] # GRANTHA LETTER VOCALIC R -11360 ; [.2B6E.0020.0002] # GRANTHA LETTER VOCALIC RR -1130C ; [.2B6F.0020.0002] # GRANTHA LETTER VOCALIC L -11361 ; [.2B70.0020.0002] # GRANTHA LETTER VOCALIC LL -1130F ; [.2B71.0020.0002] # GRANTHA LETTER EE -11310 ; [.2B72.0020.0002] # GRANTHA LETTER AI -11313 ; [.2B73.0020.0002] # GRANTHA LETTER OO -11314 ; [.2B74.0020.0002] # GRANTHA LETTER AU -11315 ; [.2B75.0020.0002] # GRANTHA LETTER KA -11316 ; [.2B76.0020.0002] # GRANTHA LETTER KHA -11317 ; [.2B77.0020.0002] # GRANTHA LETTER GA -11318 ; [.2B78.0020.0002] # GRANTHA LETTER GHA -11319 ; [.2B79.0020.0002] # GRANTHA LETTER NGA -1131A ; [.2B7A.0020.0002] # GRANTHA LETTER CA -1131B ; [.2B7B.0020.0002] # GRANTHA LETTER CHA -1131C ; [.2B7C.0020.0002] # GRANTHA LETTER JA -1131D ; [.2B7D.0020.0002] # GRANTHA LETTER JHA -1131E ; [.2B7E.0020.0002] # GRANTHA LETTER NYA -1131F ; [.2B7F.0020.0002] # GRANTHA LETTER TTA -11320 ; [.2B80.0020.0002] # GRANTHA LETTER TTHA -11321 ; [.2B81.0020.0002] # GRANTHA LETTER DDA -11322 ; [.2B82.0020.0002] # GRANTHA LETTER DDHA -11323 ; [.2B83.0020.0002] # GRANTHA LETTER NNA -11324 ; [.2B84.0020.0002] # GRANTHA LETTER TA -11325 ; [.2B85.0020.0002] # GRANTHA LETTER THA -11326 ; [.2B86.0020.0002] # GRANTHA LETTER DA -11327 ; [.2B87.0020.0002] # GRANTHA LETTER DHA -11328 ; [.2B88.0020.0002] # GRANTHA LETTER NA -1132A ; [.2B89.0020.0002] # GRANTHA LETTER PA -1132B ; [.2B8A.0020.0002] # GRANTHA LETTER PHA -1132C ; [.2B8B.0020.0002] # GRANTHA LETTER BA -1132D ; [.2B8C.0020.0002] # GRANTHA LETTER BHA -1132E ; [.2B8D.0020.0002] # GRANTHA LETTER MA -1132F ; [.2B8E.0020.0002] # GRANTHA LETTER YA -11330 ; [.2B8F.0020.0002] # GRANTHA LETTER RA -11332 ; [.2B90.0020.0002] # GRANTHA LETTER LA -11333 ; [.2B91.0020.0002] # GRANTHA LETTER LLA -11335 ; [.2B92.0020.0002] # GRANTHA LETTER VA -11336 ; [.2B93.0020.0002] # GRANTHA LETTER SHA -11337 ; [.2B94.0020.0002] # GRANTHA LETTER SSA -11338 ; [.2B95.0020.0002] # GRANTHA LETTER SA -11339 ; [.2B96.0020.0002] # GRANTHA LETTER HA -1133D ; [.2B97.0020.0002] # GRANTHA SIGN AVAGRAHA -1135E ; [.2B98.0020.0002] # GRANTHA LETTER VEDIC ANUSVARA -1135F ; [.2B99.0020.0002] # GRANTHA LETTER VEDIC DOUBLE ANUSVARA -1133E ; [.2B9A.0020.0002] # GRANTHA VOWEL SIGN AA -1133F ; [.2B9B.0020.0002] # GRANTHA VOWEL SIGN I -11340 ; [.2B9C.0020.0002] # GRANTHA VOWEL SIGN II -11341 ; [.2B9D.0020.0002] # GRANTHA VOWEL SIGN U -11342 ; [.2B9E.0020.0002] # GRANTHA VOWEL SIGN UU -11343 ; [.2B9F.0020.0002] # GRANTHA VOWEL SIGN VOCALIC R -11344 ; [.2BA0.0020.0002] # GRANTHA VOWEL SIGN VOCALIC RR -11362 ; [.2BA1.0020.0002] # GRANTHA VOWEL SIGN VOCALIC L -11363 ; [.2BA2.0020.0002] # GRANTHA VOWEL SIGN VOCALIC LL -11347 ; [.2BA3.0020.0002] # GRANTHA VOWEL SIGN EE -11348 ; [.2BA4.0020.0002] # GRANTHA VOWEL SIGN AI -1134B ; [.2BA5.0020.0002] # GRANTHA VOWEL SIGN OO -11347 1133E ; [.2BA5.0020.0002] # GRANTHA VOWEL SIGN OO -1134C ; [.2BA6.0020.0002] # GRANTHA VOWEL SIGN AU -11347 11357 ; [.2BA6.0020.0002] # GRANTHA VOWEL SIGN AU -1134D ; [.2BA7.0020.0002] # GRANTHA SIGN VIRAMA -11357 ; [.2BA8.0020.0002] # GRANTHA AU LENGTH MARK -1135D ; [.2BA9.0020.0002] # GRANTHA SIGN PLUTA -11449 ; [.2BAA.0020.0002] # NEWA OM -1144A ; [.2BAB.0020.0002] # NEWA SIDDHI -11400 ; [.2BAC.0020.0002] # NEWA LETTER A -11401 ; [.2BAD.0020.0002] # NEWA LETTER AA -11402 ; [.2BAE.0020.0002] # NEWA LETTER I -11403 ; [.2BAF.0020.0002] # NEWA LETTER II -11404 ; [.2BB0.0020.0002] # NEWA LETTER U -11405 ; [.2BB1.0020.0002] # NEWA LETTER UU -11406 ; [.2BB2.0020.0002] # NEWA LETTER VOCALIC R -11407 ; [.2BB3.0020.0002] # NEWA LETTER VOCALIC RR -11408 ; [.2BB4.0020.0002] # NEWA LETTER VOCALIC L -11409 ; [.2BB5.0020.0002] # NEWA LETTER VOCALIC LL -1140A ; [.2BB6.0020.0002] # NEWA LETTER E -1140B ; [.2BB7.0020.0002] # NEWA LETTER AI -1140C ; [.2BB8.0020.0002] # NEWA LETTER O -1140D ; [.2BB9.0020.0002] # NEWA LETTER AU -1140E ; [.2BBA.0020.0002] # NEWA LETTER KA -1140F ; [.2BBB.0020.0002] # NEWA LETTER KHA -11410 ; [.2BBC.0020.0002] # NEWA LETTER GA -11411 ; [.2BBD.0020.0002] # NEWA LETTER GHA -11412 ; [.2BBE.0020.0002] # NEWA LETTER NGA -11413 ; [.2BBF.0020.0002] # NEWA LETTER NGHA -11414 ; [.2BC0.0020.0002] # NEWA LETTER CA -11415 ; [.2BC1.0020.0002] # NEWA LETTER CHA -11416 ; [.2BC2.0020.0002] # NEWA LETTER JA -11417 ; [.2BC3.0020.0002] # NEWA LETTER JHA -11418 ; [.2BC4.0020.0002] # NEWA LETTER NYA -11419 ; [.2BC5.0020.0002] # NEWA LETTER NYHA -1141A ; [.2BC6.0020.0002] # NEWA LETTER TTA -1141B ; [.2BC7.0020.0002] # NEWA LETTER TTHA -1141C ; [.2BC8.0020.0002] # NEWA LETTER DDA -1141D ; [.2BC9.0020.0002] # NEWA LETTER DDHA -1141E ; [.2BCA.0020.0002] # NEWA LETTER NNA -1141F ; [.2BCB.0020.0002] # NEWA LETTER TA -11420 ; [.2BCC.0020.0002] # NEWA LETTER THA -11421 ; [.2BCD.0020.0002] # NEWA LETTER DA -11422 ; [.2BCE.0020.0002] # NEWA LETTER DHA -11423 ; [.2BCF.0020.0002] # NEWA LETTER NA -11424 ; [.2BD0.0020.0002] # NEWA LETTER NHA -11425 ; [.2BD1.0020.0002] # NEWA LETTER PA -11426 ; [.2BD2.0020.0002] # NEWA LETTER PHA -11427 ; [.2BD3.0020.0002] # NEWA LETTER BA -11428 ; [.2BD4.0020.0002] # NEWA LETTER BHA -11429 ; [.2BD5.0020.0002] # NEWA LETTER MA -1142A ; [.2BD6.0020.0002] # NEWA LETTER MHA -1142B ; [.2BD7.0020.0002] # NEWA LETTER YA -1142C ; [.2BD8.0020.0002] # NEWA LETTER RA -1142D ; [.2BD9.0020.0002] # NEWA LETTER RHA -1142E ; [.2BDA.0020.0002] # NEWA LETTER LA -1142F ; [.2BDB.0020.0002] # NEWA LETTER LHA -11430 ; [.2BDC.0020.0002] # NEWA LETTER WA -11431 ; [.2BDD.0020.0002] # NEWA LETTER SHA -11432 ; [.2BDE.0020.0002] # NEWA LETTER SSA -11433 ; [.2BDF.0020.0002] # NEWA LETTER SA -11434 ; [.2BE0.0020.0002] # NEWA LETTER HA -11447 ; [.2BE1.0020.0002] # NEWA SIGN AVAGRAHA -11448 ; [.2BE2.0020.0002] # NEWA SIGN FINAL ANUSVARA -11435 ; [.2BE3.0020.0002] # NEWA VOWEL SIGN AA -11436 ; [.2BE4.0020.0002] # NEWA VOWEL SIGN I -11437 ; [.2BE5.0020.0002] # NEWA VOWEL SIGN II -11438 ; [.2BE6.0020.0002] # NEWA VOWEL SIGN U -11439 ; [.2BE7.0020.0002] # NEWA VOWEL SIGN UU -1143A ; [.2BE8.0020.0002] # NEWA VOWEL SIGN VOCALIC R -1143B ; [.2BE9.0020.0002] # NEWA VOWEL SIGN VOCALIC RR -1143C ; [.2BEA.0020.0002] # NEWA VOWEL SIGN VOCALIC L -1143D ; [.2BEB.0020.0002] # NEWA VOWEL SIGN VOCALIC LL -1143E ; [.2BEC.0020.0002] # NEWA VOWEL SIGN E -1143F ; [.2BED.0020.0002] # NEWA VOWEL SIGN AI -11440 ; [.2BEE.0020.0002] # NEWA VOWEL SIGN O -11441 ; [.2BEF.0020.0002] # NEWA VOWEL SIGN AU -11442 ; [.2BF0.0020.0002] # NEWA SIGN VIRAMA -114C7 ; [.2BF1.0020.0002] # TIRHUTA OM -11480 ; [.2BF2.0020.0002] # TIRHUTA ANJI -11481 ; [.2BF3.0020.0002] # TIRHUTA LETTER A -11482 ; [.2BF4.0020.0002] # TIRHUTA LETTER AA -11483 ; [.2BF5.0020.0002] # TIRHUTA LETTER I -11484 ; [.2BF6.0020.0002] # TIRHUTA LETTER II -11485 ; [.2BF7.0020.0002] # TIRHUTA LETTER U -11486 ; [.2BF8.0020.0002] # TIRHUTA LETTER UU -11487 ; [.2BF9.0020.0002] # TIRHUTA LETTER VOCALIC R -11488 ; [.2BFA.0020.0002] # TIRHUTA LETTER VOCALIC RR -11489 ; [.2BFB.0020.0002] # TIRHUTA LETTER VOCALIC L -1148A ; [.2BFC.0020.0002] # TIRHUTA LETTER VOCALIC LL -1148B ; [.2BFD.0020.0002] # TIRHUTA LETTER E -1148C ; [.2BFE.0020.0002] # TIRHUTA LETTER AI -1148D ; [.2BFF.0020.0002] # TIRHUTA LETTER O -1148E ; [.2C00.0020.0002] # TIRHUTA LETTER AU -1148F ; [.2C01.0020.0002] # TIRHUTA LETTER KA -11490 ; [.2C02.0020.0002] # TIRHUTA LETTER KHA -11491 ; [.2C03.0020.0002] # TIRHUTA LETTER GA -11492 ; [.2C04.0020.0002] # TIRHUTA LETTER GHA -11493 ; [.2C05.0020.0002] # TIRHUTA LETTER NGA -11494 ; [.2C06.0020.0002] # TIRHUTA LETTER CA -11495 ; [.2C07.0020.0002] # TIRHUTA LETTER CHA -11496 ; [.2C08.0020.0002] # TIRHUTA LETTER JA -11497 ; [.2C09.0020.0002] # TIRHUTA LETTER JHA -11498 ; [.2C0A.0020.0002] # TIRHUTA LETTER NYA -11499 ; [.2C0B.0020.0002] # TIRHUTA LETTER TTA -1149A ; [.2C0C.0020.0002] # TIRHUTA LETTER TTHA -1149B ; [.2C0D.0020.0002] # TIRHUTA LETTER DDA -1149C ; [.2C0E.0020.0002] # TIRHUTA LETTER DDHA -1149D ; [.2C0F.0020.0002] # TIRHUTA LETTER NNA -1149E ; [.2C10.0020.0002] # TIRHUTA LETTER TA -1149F ; [.2C11.0020.0002] # TIRHUTA LETTER THA -114A0 ; [.2C12.0020.0002] # TIRHUTA LETTER DA -114A1 ; [.2C13.0020.0002] # TIRHUTA LETTER DHA -114A2 ; [.2C14.0020.0002] # TIRHUTA LETTER NA -114A3 ; [.2C15.0020.0002] # TIRHUTA LETTER PA -114A4 ; [.2C16.0020.0002] # TIRHUTA LETTER PHA -114A5 ; [.2C17.0020.0002] # TIRHUTA LETTER BA -114A6 ; [.2C18.0020.0002] # TIRHUTA LETTER BHA -114A7 ; [.2C19.0020.0002] # TIRHUTA LETTER MA -114A8 ; [.2C1A.0020.0002] # TIRHUTA LETTER YA -114A9 ; [.2C1B.0020.0002] # TIRHUTA LETTER RA -114AA ; [.2C1C.0020.0002] # TIRHUTA LETTER LA -114AB ; [.2C1D.0020.0002] # TIRHUTA LETTER VA -114AC ; [.2C1E.0020.0002] # TIRHUTA LETTER SHA -114AD ; [.2C1F.0020.0002] # TIRHUTA LETTER SSA -114AE ; [.2C20.0020.0002] # TIRHUTA LETTER SA -114AF ; [.2C21.0020.0002] # TIRHUTA LETTER HA -114C4 ; [.2C22.0020.0002] # TIRHUTA SIGN AVAGRAHA -114C5 ; [.2C23.0020.0002] # TIRHUTA GVANG -114B0 ; [.2C24.0020.0002] # TIRHUTA VOWEL SIGN AA -114B1 ; [.2C25.0020.0002] # TIRHUTA VOWEL SIGN I -114B2 ; [.2C26.0020.0002] # TIRHUTA VOWEL SIGN II -114B3 ; [.2C27.0020.0002] # TIRHUTA VOWEL SIGN U -114B4 ; [.2C28.0020.0002] # TIRHUTA VOWEL SIGN UU -114B5 ; [.2C29.0020.0002] # TIRHUTA VOWEL SIGN VOCALIC R -114B6 ; [.2C2A.0020.0002] # TIRHUTA VOWEL SIGN VOCALIC RR -114B7 ; [.2C2B.0020.0002] # TIRHUTA VOWEL SIGN VOCALIC L -114B8 ; [.2C2C.0020.0002] # TIRHUTA VOWEL SIGN VOCALIC LL -114B9 ; [.2C2D.0020.0002] # TIRHUTA VOWEL SIGN E -114BA ; [.2C2E.0020.0002] # TIRHUTA VOWEL SIGN SHORT E -114BB ; [.2C2F.0020.0002] # TIRHUTA VOWEL SIGN AI -114B9 114BA ; [.2C2F.0020.0002] # TIRHUTA VOWEL SIGN AI -114BC ; [.2C30.0020.0002] # TIRHUTA VOWEL SIGN O -114B9 114B0 ; [.2C30.0020.0002] # TIRHUTA VOWEL SIGN O -114BD ; [.2C31.0020.0002] # TIRHUTA VOWEL SIGN SHORT O -114BE ; [.2C32.0020.0002] # TIRHUTA VOWEL SIGN AU -114B9 114BD ; [.2C32.0020.0002] # TIRHUTA VOWEL SIGN AU -114C2 ; [.2C33.0020.0002] # TIRHUTA SIGN VIRAMA -11580 ; [.2C34.0020.0002] # SIDDHAM LETTER A -11581 ; [.2C35.0020.0002] # SIDDHAM LETTER AA -11582 ; [.2C36.0020.0002] # SIDDHAM LETTER I -115D8 ; [.2C36.0020.0004][.0000.0111.0004] # SIDDHAM LETTER THREE-CIRCLE ALTERNATE I -115D9 ; [.2C36.0020.0004][.0000.0112.0004] # SIDDHAM LETTER TWO-CIRCLE ALTERNATE I -11583 ; [.2C37.0020.0002] # SIDDHAM LETTER II -115DA ; [.2C37.0020.0004][.0000.0111.0004] # SIDDHAM LETTER TWO-CIRCLE ALTERNATE II -11584 ; [.2C38.0020.0002] # SIDDHAM LETTER U -115DB ; [.2C38.0020.0004][.0000.0111.0004] # SIDDHAM LETTER ALTERNATE U -11585 ; [.2C39.0020.0002] # SIDDHAM LETTER UU -11586 ; [.2C3A.0020.0002] # SIDDHAM LETTER VOCALIC R -11587 ; [.2C3B.0020.0002] # SIDDHAM LETTER VOCALIC RR -11588 ; [.2C3C.0020.0002] # SIDDHAM LETTER VOCALIC L -11589 ; [.2C3D.0020.0002] # SIDDHAM LETTER VOCALIC LL -1158A ; [.2C3E.0020.0002] # SIDDHAM LETTER E -1158B ; [.2C3F.0020.0002] # SIDDHAM LETTER AI -1158C ; [.2C40.0020.0002] # SIDDHAM LETTER O -1158D ; [.2C41.0020.0002] # SIDDHAM LETTER AU -1158E ; [.2C42.0020.0002] # SIDDHAM LETTER KA -1158F ; [.2C43.0020.0002] # SIDDHAM LETTER KHA -11590 ; [.2C44.0020.0002] # SIDDHAM LETTER GA -11591 ; [.2C45.0020.0002] # SIDDHAM LETTER GHA -11592 ; [.2C46.0020.0002] # SIDDHAM LETTER NGA -11593 ; [.2C47.0020.0002] # SIDDHAM LETTER CA -11594 ; [.2C48.0020.0002] # SIDDHAM LETTER CHA -11595 ; [.2C49.0020.0002] # SIDDHAM LETTER JA -11596 ; [.2C4A.0020.0002] # SIDDHAM LETTER JHA -11597 ; [.2C4B.0020.0002] # SIDDHAM LETTER NYA -11598 ; [.2C4C.0020.0002] # SIDDHAM LETTER TTA -11599 ; [.2C4D.0020.0002] # SIDDHAM LETTER TTHA -1159A ; [.2C4E.0020.0002] # SIDDHAM LETTER DDA -1159B ; [.2C4F.0020.0002] # SIDDHAM LETTER DDHA -1159C ; [.2C50.0020.0002] # SIDDHAM LETTER NNA -1159D ; [.2C51.0020.0002] # SIDDHAM LETTER TA -1159E ; [.2C52.0020.0002] # SIDDHAM LETTER THA -1159F ; [.2C53.0020.0002] # SIDDHAM LETTER DA -115A0 ; [.2C54.0020.0002] # SIDDHAM LETTER DHA -115A1 ; [.2C55.0020.0002] # SIDDHAM LETTER NA -115A2 ; [.2C56.0020.0002] # SIDDHAM LETTER PA -115A3 ; [.2C57.0020.0002] # SIDDHAM LETTER PHA -115A4 ; [.2C58.0020.0002] # SIDDHAM LETTER BA -115A5 ; [.2C59.0020.0002] # SIDDHAM LETTER BHA -115A6 ; [.2C5A.0020.0002] # SIDDHAM LETTER MA -115A7 ; [.2C5B.0020.0002] # SIDDHAM LETTER YA -115A8 ; [.2C5C.0020.0002] # SIDDHAM LETTER RA -115A9 ; [.2C5D.0020.0002] # SIDDHAM LETTER LA -115AA ; [.2C5E.0020.0002] # SIDDHAM LETTER VA -115AB ; [.2C5F.0020.0002] # SIDDHAM LETTER SHA -115AC ; [.2C60.0020.0002] # SIDDHAM LETTER SSA -115AD ; [.2C61.0020.0002] # SIDDHAM LETTER SA -115AE ; [.2C62.0020.0002] # SIDDHAM LETTER HA -115AF ; [.2C63.0020.0002] # SIDDHAM VOWEL SIGN AA -115B0 ; [.2C64.0020.0002] # SIDDHAM VOWEL SIGN I -115B1 ; [.2C65.0020.0002] # SIDDHAM VOWEL SIGN II -115B2 ; [.2C66.0020.0002] # SIDDHAM VOWEL SIGN U -115DC ; [.2C66.0020.0004][.0000.0111.0004] # SIDDHAM VOWEL SIGN ALTERNATE U -115B3 ; [.2C67.0020.0002] # SIDDHAM VOWEL SIGN UU -115DD ; [.2C67.0020.0004][.0000.0111.0004] # SIDDHAM VOWEL SIGN ALTERNATE UU -115B4 ; [.2C68.0020.0002] # SIDDHAM VOWEL SIGN VOCALIC R -115B5 ; [.2C69.0020.0002] # SIDDHAM VOWEL SIGN VOCALIC RR -115B8 ; [.2C6A.0020.0002] # SIDDHAM VOWEL SIGN E -115B9 ; [.2C6B.0020.0002] # SIDDHAM VOWEL SIGN AI -115BA ; [.2C6C.0020.0002] # SIDDHAM VOWEL SIGN O -115B8 115AF ; [.2C6C.0020.0002] # SIDDHAM VOWEL SIGN O -115BB ; [.2C6D.0020.0002] # SIDDHAM VOWEL SIGN AU -115B9 115AF ; [.2C6D.0020.0002] # SIDDHAM VOWEL SIGN AU -115BF ; [.2C6E.0020.0002] # SIDDHAM SIGN VIRAMA -11600 ; [.2C6F.0020.0002] # MODI LETTER A -11601 ; [.2C70.0020.0002] # MODI LETTER AA -11602 ; [.2C71.0020.0002] # MODI LETTER I -11603 ; [.2C72.0020.0002] # MODI LETTER II -11604 ; [.2C73.0020.0002] # MODI LETTER U -11605 ; [.2C74.0020.0002] # MODI LETTER UU -11606 ; [.2C75.0020.0002] # MODI LETTER VOCALIC R -11607 ; [.2C76.0020.0002] # MODI LETTER VOCALIC RR -11608 ; [.2C77.0020.0002] # MODI LETTER VOCALIC L -11609 ; [.2C78.0020.0002] # MODI LETTER VOCALIC LL -1160A ; [.2C79.0020.0002] # MODI LETTER E -1160B ; [.2C7A.0020.0002] # MODI LETTER AI -1160C ; [.2C7B.0020.0002] # MODI LETTER O -1160D ; [.2C7C.0020.0002] # MODI LETTER AU -1160E ; [.2C7D.0020.0002] # MODI LETTER KA -1160F ; [.2C7E.0020.0002] # MODI LETTER KHA -11610 ; [.2C7F.0020.0002] # MODI LETTER GA -11611 ; [.2C80.0020.0002] # MODI LETTER GHA -11612 ; [.2C81.0020.0002] # MODI LETTER NGA -11613 ; [.2C82.0020.0002] # MODI LETTER CA -11614 ; [.2C83.0020.0002] # MODI LETTER CHA -11615 ; [.2C84.0020.0002] # MODI LETTER JA -11616 ; [.2C85.0020.0002] # MODI LETTER JHA -11617 ; [.2C86.0020.0002] # MODI LETTER NYA -11618 ; [.2C87.0020.0002] # MODI LETTER TTA -11619 ; [.2C88.0020.0002] # MODI LETTER TTHA -1161A ; [.2C89.0020.0002] # MODI LETTER DDA -1161B ; [.2C8A.0020.0002] # MODI LETTER DDHA -1161C ; [.2C8B.0020.0002] # MODI LETTER NNA -1161D ; [.2C8C.0020.0002] # MODI LETTER TA -1161E ; [.2C8D.0020.0002] # MODI LETTER THA -1161F ; [.2C8E.0020.0002] # MODI LETTER DA -11620 ; [.2C8F.0020.0002] # MODI LETTER DHA -11621 ; [.2C90.0020.0002] # MODI LETTER NA -11622 ; [.2C91.0020.0002] # MODI LETTER PA -11623 ; [.2C92.0020.0002] # MODI LETTER PHA -11624 ; [.2C93.0020.0002] # MODI LETTER BA -11625 ; [.2C94.0020.0002] # MODI LETTER BHA -11626 ; [.2C95.0020.0002] # MODI LETTER MA -11627 ; [.2C96.0020.0002] # MODI LETTER YA -11628 ; [.2C97.0020.0002] # MODI LETTER RA -11629 ; [.2C98.0020.0002] # MODI LETTER LA -1162A ; [.2C99.0020.0002] # MODI LETTER VA -1162B ; [.2C9A.0020.0002] # MODI LETTER SHA -1162C ; [.2C9B.0020.0002] # MODI LETTER SSA -1162D ; [.2C9C.0020.0002] # MODI LETTER SA -1162E ; [.2C9D.0020.0002] # MODI LETTER HA -1162F ; [.2C9E.0020.0002] # MODI LETTER LLA -11630 ; [.2C9F.0020.0002] # MODI VOWEL SIGN AA -11631 ; [.2CA0.0020.0002] # MODI VOWEL SIGN I -11632 ; [.2CA1.0020.0002] # MODI VOWEL SIGN II -11633 ; [.2CA2.0020.0002] # MODI VOWEL SIGN U -11634 ; [.2CA3.0020.0002] # MODI VOWEL SIGN UU -11635 ; [.2CA4.0020.0002] # MODI VOWEL SIGN VOCALIC R -11636 ; [.2CA5.0020.0002] # MODI VOWEL SIGN VOCALIC RR -11637 ; [.2CA6.0020.0002] # MODI VOWEL SIGN VOCALIC L -11638 ; [.2CA7.0020.0002] # MODI VOWEL SIGN VOCALIC LL -11639 ; [.2CA8.0020.0002] # MODI VOWEL SIGN E -1163A ; [.2CA9.0020.0002] # MODI VOWEL SIGN AI -1163B ; [.2CAA.0020.0002] # MODI VOWEL SIGN O -1163C ; [.2CAB.0020.0002] # MODI VOWEL SIGN AU -1163F ; [.2CAC.0020.0002] # MODI SIGN VIRAMA -11644 ; [.2CAD.0020.0002] # MODI SIGN HUVA -11680 ; [.2CAE.0020.0002] # TAKRI LETTER A -11681 ; [.2CAF.0020.0002] # TAKRI LETTER AA -11682 ; [.2CB0.0020.0002] # TAKRI LETTER I -11683 ; [.2CB1.0020.0002] # TAKRI LETTER II -11684 ; [.2CB2.0020.0002] # TAKRI LETTER U -11685 ; [.2CB3.0020.0002] # TAKRI LETTER UU -11686 ; [.2CB4.0020.0002] # TAKRI LETTER E -11687 ; [.2CB5.0020.0002] # TAKRI LETTER AI -11688 ; [.2CB6.0020.0002] # TAKRI LETTER O -11689 ; [.2CB7.0020.0002] # TAKRI LETTER AU -116A8 ; [.2CB8.0020.0002] # TAKRI LETTER SA -116A7 ; [.2CB9.0020.0002] # TAKRI LETTER SHA -116A9 ; [.2CBA.0020.0002] # TAKRI LETTER HA -1168A ; [.2CBB.0020.0002] # TAKRI LETTER KA -1168B ; [.2CBC.0020.0002] # TAKRI LETTER KHA -1168C ; [.2CBD.0020.0002] # TAKRI LETTER GA -1168D ; [.2CBE.0020.0002] # TAKRI LETTER GHA -1168E ; [.2CBF.0020.0002] # TAKRI LETTER NGA -1168F ; [.2CC0.0020.0002] # TAKRI LETTER CA -11690 ; [.2CC1.0020.0002] # TAKRI LETTER CHA -11691 ; [.2CC2.0020.0002] # TAKRI LETTER JA -11692 ; [.2CC3.0020.0002] # TAKRI LETTER JHA -11693 ; [.2CC4.0020.0002] # TAKRI LETTER NYA -11694 ; [.2CC5.0020.0002] # TAKRI LETTER TTA -11695 ; [.2CC6.0020.0002] # TAKRI LETTER TTHA -11696 ; [.2CC7.0020.0002] # TAKRI LETTER DDA -11697 ; [.2CC8.0020.0002] # TAKRI LETTER DDHA -11698 ; [.2CC9.0020.0002] # TAKRI LETTER NNA -11699 ; [.2CCA.0020.0002] # TAKRI LETTER TA -1169A ; [.2CCB.0020.0002] # TAKRI LETTER THA -1169B ; [.2CCC.0020.0002] # TAKRI LETTER DA -1169C ; [.2CCD.0020.0002] # TAKRI LETTER DHA -1169D ; [.2CCE.0020.0002] # TAKRI LETTER NA -1169E ; [.2CCF.0020.0002] # TAKRI LETTER PA -1169F ; [.2CD0.0020.0002] # TAKRI LETTER PHA -116A0 ; [.2CD1.0020.0002] # TAKRI LETTER BA -116A1 ; [.2CD2.0020.0002] # TAKRI LETTER BHA -116A2 ; [.2CD3.0020.0002] # TAKRI LETTER MA -116A3 ; [.2CD4.0020.0002] # TAKRI LETTER YA -116A4 ; [.2CD5.0020.0002] # TAKRI LETTER RA -116A5 ; [.2CD6.0020.0002] # TAKRI LETTER LA -116A6 ; [.2CD7.0020.0002] # TAKRI LETTER VA -116AA ; [.2CD8.0020.0002] # TAKRI LETTER RRA -116AD ; [.2CD9.0020.0002] # TAKRI VOWEL SIGN AA -116AE ; [.2CDA.0020.0002] # TAKRI VOWEL SIGN I -116AF ; [.2CDB.0020.0002] # TAKRI VOWEL SIGN II -116B0 ; [.2CDC.0020.0002] # TAKRI VOWEL SIGN U -116B1 ; [.2CDD.0020.0002] # TAKRI VOWEL SIGN UU -116B2 ; [.2CDE.0020.0002] # TAKRI VOWEL SIGN E -116B3 ; [.2CDF.0020.0002] # TAKRI VOWEL SIGN AI -116B4 ; [.2CE0.0020.0002] # TAKRI VOWEL SIGN O -116B5 ; [.2CE1.0020.0002] # TAKRI VOWEL SIGN AU -116B6 ; [.2CE2.0020.0002] # TAKRI SIGN VIRAMA -11700 ; [.2CE3.0020.0002] # AHOM LETTER KA -11701 ; [.2CE4.0020.0002] # AHOM LETTER KHA -11702 ; [.2CE5.0020.0002] # AHOM LETTER NGA -11703 ; [.2CE6.0020.0002] # AHOM LETTER NA -11704 ; [.2CE7.0020.0002] # AHOM LETTER TA -11705 ; [.2CE7.0020.0004][.0000.0111.0004] # AHOM LETTER ALTERNATE TA -11706 ; [.2CE8.0020.0002] # AHOM LETTER PA -11707 ; [.2CE9.0020.0002] # AHOM LETTER PHA -11708 ; [.2CEA.0020.0002] # AHOM LETTER BA -11709 ; [.2CEB.0020.0002] # AHOM LETTER MA -1170A ; [.2CEC.0020.0002] # AHOM LETTER JA -1170B ; [.2CED.0020.0002] # AHOM LETTER CHA -1170C ; [.2CEE.0020.0002] # AHOM LETTER THA -1170D ; [.2CEF.0020.0002] # AHOM LETTER RA -1170E ; [.2CF0.0020.0002] # AHOM LETTER LA -1170F ; [.2CF1.0020.0002] # AHOM LETTER SA -11710 ; [.2CF2.0020.0002] # AHOM LETTER NYA -11711 ; [.2CF3.0020.0002] # AHOM LETTER HA -11712 ; [.2CF4.0020.0002] # AHOM LETTER A -11713 ; [.2CF5.0020.0002] # AHOM LETTER DA -11714 ; [.2CF6.0020.0002] # AHOM LETTER DHA -11715 ; [.2CF7.0020.0002] # AHOM LETTER GA -11716 ; [.2CF7.0020.0004][.0000.0111.0004] # AHOM LETTER ALTERNATE GA -11717 ; [.2CF8.0020.0002] # AHOM LETTER GHA -11718 ; [.2CF9.0020.0002] # AHOM LETTER BHA -11719 ; [.2CFA.0020.0002] # AHOM LETTER JHA -11720 ; [.2CFB.0020.0002] # AHOM VOWEL SIGN A -11721 ; [.2CFC.0020.0002] # AHOM VOWEL SIGN AA -11722 ; [.2CFD.0020.0002] # AHOM VOWEL SIGN I -11723 ; [.2CFE.0020.0002] # AHOM VOWEL SIGN II -11724 ; [.2CFF.0020.0002] # AHOM VOWEL SIGN U -11725 ; [.2D00.0020.0002] # AHOM VOWEL SIGN UU -11726 ; [.2D01.0020.0002] # AHOM VOWEL SIGN E -11727 ; [.2D02.0020.0002] # AHOM VOWEL SIGN AW -11728 ; [.2D03.0020.0002] # AHOM VOWEL SIGN O -11729 ; [.2D04.0020.0002] # AHOM VOWEL SIGN AI -1172A ; [.2D05.0020.0002] # AHOM VOWEL SIGN AM -1172B ; [.2D06.0020.0002] # AHOM SIGN KILLER -1171D ; [.2D07.0020.0002] # AHOM CONSONANT SIGN MEDIAL LA -1171E ; [.2D08.0020.0002] # AHOM CONSONANT SIGN MEDIAL RA -1171F ; [.2D09.0020.0002] # AHOM CONSONANT SIGN MEDIAL LIGATING RA -11D00 ; [.2D0A.0020.0002] # MASARAM GONDI LETTER A -11D01 ; [.2D0B.0020.0002] # MASARAM GONDI LETTER AA -11D02 ; [.2D0C.0020.0002] # MASARAM GONDI LETTER I -11D03 ; [.2D0D.0020.0002] # MASARAM GONDI LETTER II -11D04 ; [.2D0E.0020.0002] # MASARAM GONDI LETTER U -11D05 ; [.2D0F.0020.0002] # MASARAM GONDI LETTER UU -11D06 ; [.2D10.0020.0002] # MASARAM GONDI LETTER E -11D08 ; [.2D11.0020.0002] # MASARAM GONDI LETTER AI -11D09 ; [.2D12.0020.0002] # MASARAM GONDI LETTER O -11D0B ; [.2D13.0020.0002] # MASARAM GONDI LETTER AU -11D0C ; [.2D14.0020.0002] # MASARAM GONDI LETTER KA -11D0D ; [.2D15.0020.0002] # MASARAM GONDI LETTER KHA -11D0E ; [.2D16.0020.0002] # MASARAM GONDI LETTER GA -11D0F ; [.2D17.0020.0002] # MASARAM GONDI LETTER GHA -11D10 ; [.2D18.0020.0002] # MASARAM GONDI LETTER NGA -11D11 ; [.2D19.0020.0002] # MASARAM GONDI LETTER CA -11D12 ; [.2D1A.0020.0002] # MASARAM GONDI LETTER CHA -11D13 ; [.2D1B.0020.0002] # MASARAM GONDI LETTER JA -11D14 ; [.2D1C.0020.0002] # MASARAM GONDI LETTER JHA -11D15 ; [.2D1D.0020.0002] # MASARAM GONDI LETTER NYA -11D16 ; [.2D1E.0020.0002] # MASARAM GONDI LETTER TTA -11D17 ; [.2D1F.0020.0002] # MASARAM GONDI LETTER TTHA -11D18 ; [.2D20.0020.0002] # MASARAM GONDI LETTER DDA -11D19 ; [.2D21.0020.0002] # MASARAM GONDI LETTER DDHA -11D1A ; [.2D22.0020.0002] # MASARAM GONDI LETTER NNA -11D1B ; [.2D23.0020.0002] # MASARAM GONDI LETTER TA -11D1C ; [.2D24.0020.0002] # MASARAM GONDI LETTER THA -11D1D ; [.2D25.0020.0002] # MASARAM GONDI LETTER DA -11D1E ; [.2D26.0020.0002] # MASARAM GONDI LETTER DHA -11D1F ; [.2D27.0020.0002] # MASARAM GONDI LETTER NA -11D20 ; [.2D28.0020.0002] # MASARAM GONDI LETTER PA -11D21 ; [.2D29.0020.0002] # MASARAM GONDI LETTER PHA -11D22 ; [.2D2A.0020.0002] # MASARAM GONDI LETTER BA -11D23 ; [.2D2B.0020.0002] # MASARAM GONDI LETTER BHA -11D24 ; [.2D2C.0020.0002] # MASARAM GONDI LETTER MA -11D25 ; [.2D2D.0020.0002] # MASARAM GONDI LETTER YA -11D26 ; [.2D2E.0020.0002] # MASARAM GONDI LETTER RA -11D46 ; [.2D2E.0020.0017] # MASARAM GONDI REPHA -11D47 ; [.2D2E.0020.0019] # MASARAM GONDI RA-KARA -11D27 ; [.2D2F.0020.0002] # MASARAM GONDI LETTER LA -11D28 ; [.2D30.0020.0002] # MASARAM GONDI LETTER VA -11D29 ; [.2D31.0020.0002] # MASARAM GONDI LETTER SHA -11D2A ; [.2D32.0020.0002] # MASARAM GONDI LETTER SSA -11D2B ; [.2D33.0020.0002] # MASARAM GONDI LETTER SA -11D2C ; [.2D34.0020.0002] # MASARAM GONDI LETTER HA -11D2D ; [.2D35.0020.0002] # MASARAM GONDI LETTER LLA -11D2E ; [.2D36.0020.0002] # MASARAM GONDI LETTER KSSA -11D2F ; [.2D37.0020.0002] # MASARAM GONDI LETTER JNYA -11D30 ; [.2D38.0020.0002] # MASARAM GONDI LETTER TRA -11D31 ; [.2D39.0020.0002] # MASARAM GONDI VOWEL SIGN AA -11D32 ; [.2D3A.0020.0002] # MASARAM GONDI VOWEL SIGN I -11D33 ; [.2D3B.0020.0002] # MASARAM GONDI VOWEL SIGN II -11D34 ; [.2D3C.0020.0002] # MASARAM GONDI VOWEL SIGN U -11D35 ; [.2D3D.0020.0002] # MASARAM GONDI VOWEL SIGN UU -11D36 ; [.2D3E.0020.0002] # MASARAM GONDI VOWEL SIGN VOCALIC R -11D3A ; [.2D3F.0020.0002] # MASARAM GONDI VOWEL SIGN E -11D3C ; [.2D40.0020.0002] # MASARAM GONDI VOWEL SIGN AI -11D3D ; [.2D41.0020.0002] # MASARAM GONDI VOWEL SIGN O -11D3F ; [.2D42.0020.0002] # MASARAM GONDI VOWEL SIGN AU -11D44 ; [.2D43.0020.0002] # MASARAM GONDI SIGN HALANTA -11D45 ; [.2D44.0020.0002] # MASARAM GONDI VIRAMA -1B83 ; [.2D45.0020.0002] # SUNDANESE LETTER A -1BBA ; [.2D45.0020.0004] # SUNDANESE AVAGRAHA -1B84 ; [.2D46.0020.0002] # SUNDANESE LETTER I -1B85 ; [.2D47.0020.0002] # SUNDANESE LETTER U -1B86 ; [.2D48.0020.0002] # SUNDANESE LETTER AE -1B87 ; [.2D49.0020.0002] # SUNDANESE LETTER O -1B88 ; [.2D4A.0020.0002] # SUNDANESE LETTER E -1B89 ; [.2D4B.0020.0002] # SUNDANESE LETTER EU -1B8A ; [.2D4C.0020.0002] # SUNDANESE LETTER KA -1BBE ; [.2D4C.0020.0019] # SUNDANESE LETTER FINAL K -1BAE ; [.2D4D.0020.0002] # SUNDANESE LETTER KHA -1B8B ; [.2D4E.0020.0002] # SUNDANESE LETTER QA -1B8C ; [.2D4F.0020.0002] # SUNDANESE LETTER GA -1B8D ; [.2D50.0020.0002] # SUNDANESE LETTER NGA -1B8E ; [.2D51.0020.0002] # SUNDANESE LETTER CA -1B8F ; [.2D52.0020.0002] # SUNDANESE LETTER JA -1B90 ; [.2D53.0020.0002] # SUNDANESE LETTER ZA -1B91 ; [.2D54.0020.0002] # SUNDANESE LETTER NYA -1B92 ; [.2D55.0020.0002] # SUNDANESE LETTER TA -1B93 ; [.2D56.0020.0002] # SUNDANESE LETTER DA -1B94 ; [.2D57.0020.0002] # SUNDANESE LETTER NA -1B95 ; [.2D58.0020.0002] # SUNDANESE LETTER PA -1B96 ; [.2D59.0020.0002] # SUNDANESE LETTER FA -1B97 ; [.2D5A.0020.0002] # SUNDANESE LETTER VA -1B98 ; [.2D5B.0020.0002] # SUNDANESE LETTER BA -1BBD ; [.2D5C.0020.0002] # SUNDANESE LETTER BHA -1B99 ; [.2D5D.0020.0002] # SUNDANESE LETTER MA -1BBF ; [.2D5D.0020.0019] # SUNDANESE LETTER FINAL M -1BAC ; [.2D5E.0020.0002] # SUNDANESE CONSONANT SIGN PASANGAN MA -1B9A ; [.2D5F.0020.0002] # SUNDANESE LETTER YA -1BA1 ; [.2D60.0020.0002] # SUNDANESE CONSONANT SIGN PAMINGKAL -1B9B ; [.2D61.0020.0002] # SUNDANESE LETTER RA -1BA2 ; [.2D62.0020.0002] # SUNDANESE CONSONANT SIGN PANYAKRA -1BBB ; [.2D63.0020.0002] # SUNDANESE LETTER REU -1B9C ; [.2D64.0020.0002] # SUNDANESE LETTER LA -1BA3 ; [.2D65.0020.0002] # SUNDANESE CONSONANT SIGN PANYIKU -1BBC ; [.2D66.0020.0002] # SUNDANESE LETTER LEU -1B9D ; [.2D67.0020.0002] # SUNDANESE LETTER WA -1BAD ; [.2D68.0020.0002] # SUNDANESE CONSONANT SIGN PASANGAN WA -1B9E ; [.2D69.0020.0002] # SUNDANESE LETTER SA -1B9F ; [.2D6A.0020.0002] # SUNDANESE LETTER XA -1BAF ; [.2D6B.0020.0002] # SUNDANESE LETTER SYA -1BA0 ; [.2D6C.0020.0002] # SUNDANESE LETTER HA -1BA4 ; [.2D6D.0020.0002] # SUNDANESE VOWEL SIGN PANGHULU -1BA5 ; [.2D6E.0020.0002] # SUNDANESE VOWEL SIGN PANYUKU -1BA6 ; [.2D6F.0020.0002] # SUNDANESE VOWEL SIGN PANAELAENG -1BA7 ; [.2D70.0020.0002] # SUNDANESE VOWEL SIGN PANOLONG -1BA8 ; [.2D71.0020.0002] # SUNDANESE VOWEL SIGN PAMEPET -1BA9 ; [.2D72.0020.0002] # SUNDANESE VOWEL SIGN PANEULEUNG -1BAA ; [.2D73.0020.0002] # SUNDANESE SIGN PAMAAEH -1BAB ; [.2D74.0020.0002] # SUNDANESE SIGN VIRAMA -11005 ; [.2D75.0020.0002] # BRAHMI LETTER A -11006 ; [.2D76.0020.0002] # BRAHMI LETTER AA -11007 ; [.2D77.0020.0002] # BRAHMI LETTER I -11008 ; [.2D78.0020.0002] # BRAHMI LETTER II -11009 ; [.2D79.0020.0002] # BRAHMI LETTER U -1100A ; [.2D7A.0020.0002] # BRAHMI LETTER UU -1100B ; [.2D7B.0020.0002] # BRAHMI LETTER VOCALIC R -1100C ; [.2D7C.0020.0002] # BRAHMI LETTER VOCALIC RR -1100D ; [.2D7D.0020.0002] # BRAHMI LETTER VOCALIC L -1100E ; [.2D7E.0020.0002] # BRAHMI LETTER VOCALIC LL -1100F ; [.2D7F.0020.0002] # BRAHMI LETTER E -11010 ; [.2D80.0020.0002] # BRAHMI LETTER AI -11011 ; [.2D81.0020.0002] # BRAHMI LETTER O -11012 ; [.2D82.0020.0002] # BRAHMI LETTER AU -11013 ; [.2D83.0020.0002] # BRAHMI LETTER KA -11014 ; [.2D84.0020.0002] # BRAHMI LETTER KHA -11015 ; [.2D85.0020.0002] # BRAHMI LETTER GA -11016 ; [.2D86.0020.0002] # BRAHMI LETTER GHA -11017 ; [.2D87.0020.0002] # BRAHMI LETTER NGA -11018 ; [.2D88.0020.0002] # BRAHMI LETTER CA -11019 ; [.2D89.0020.0002] # BRAHMI LETTER CHA -1101A ; [.2D8A.0020.0002] # BRAHMI LETTER JA -1101B ; [.2D8B.0020.0002] # BRAHMI LETTER JHA -1101C ; [.2D8C.0020.0002] # BRAHMI LETTER NYA -1101D ; [.2D8D.0020.0002] # BRAHMI LETTER TTA -1101E ; [.2D8E.0020.0002] # BRAHMI LETTER TTHA -1101F ; [.2D8F.0020.0002] # BRAHMI LETTER DDA -11020 ; [.2D90.0020.0002] # BRAHMI LETTER DDHA -11021 ; [.2D91.0020.0002] # BRAHMI LETTER NNA -11022 ; [.2D92.0020.0002] # BRAHMI LETTER TA -11023 ; [.2D93.0020.0002] # BRAHMI LETTER THA -11024 ; [.2D94.0020.0002] # BRAHMI LETTER DA -11025 ; [.2D95.0020.0002] # BRAHMI LETTER DHA -11026 ; [.2D96.0020.0002] # BRAHMI LETTER NA -11027 ; [.2D97.0020.0002] # BRAHMI LETTER PA -11028 ; [.2D98.0020.0002] # BRAHMI LETTER PHA -11029 ; [.2D99.0020.0002] # BRAHMI LETTER BA -1102A ; [.2D9A.0020.0002] # BRAHMI LETTER BHA -1102B ; [.2D9B.0020.0002] # BRAHMI LETTER MA -1102C ; [.2D9C.0020.0002] # BRAHMI LETTER YA -1102D ; [.2D9D.0020.0002] # BRAHMI LETTER RA -1102E ; [.2D9E.0020.0002] # BRAHMI LETTER LA -1102F ; [.2D9F.0020.0002] # BRAHMI LETTER VA -11030 ; [.2DA0.0020.0002] # BRAHMI LETTER SHA -11031 ; [.2DA1.0020.0002] # BRAHMI LETTER SSA -11032 ; [.2DA2.0020.0002] # BRAHMI LETTER SA -11033 ; [.2DA3.0020.0002] # BRAHMI LETTER HA -11003 ; [.2DA4.0020.0002] # BRAHMI SIGN JIHVAMULIYA -11004 ; [.2DA5.0020.0002] # BRAHMI SIGN UPADHMANIYA -11034 ; [.2DA6.0020.0002] # BRAHMI LETTER LLA -11035 ; [.2DA7.0020.0002] # BRAHMI LETTER OLD TAMIL LLLA -11036 ; [.2DA8.0020.0002] # BRAHMI LETTER OLD TAMIL RRA -11037 ; [.2DA9.0020.0002] # BRAHMI LETTER OLD TAMIL NNNA -11038 ; [.2DAA.0020.0002] # BRAHMI VOWEL SIGN AA -11039 ; [.2DAB.0020.0002] # BRAHMI VOWEL SIGN BHATTIPROLU AA -1103A ; [.2DAC.0020.0002] # BRAHMI VOWEL SIGN I -1103B ; [.2DAD.0020.0002] # BRAHMI VOWEL SIGN II -1103C ; [.2DAE.0020.0002] # BRAHMI VOWEL SIGN U -1103D ; [.2DAF.0020.0002] # BRAHMI VOWEL SIGN UU -1103E ; [.2DB0.0020.0002] # BRAHMI VOWEL SIGN VOCALIC R -1103F ; [.2DB1.0020.0002] # BRAHMI VOWEL SIGN VOCALIC RR -11040 ; [.2DB2.0020.0002] # BRAHMI VOWEL SIGN VOCALIC L -11041 ; [.2DB3.0020.0002] # BRAHMI VOWEL SIGN VOCALIC LL -11042 ; [.2DB4.0020.0002] # BRAHMI VOWEL SIGN E -11043 ; [.2DB5.0020.0002] # BRAHMI VOWEL SIGN AI -11044 ; [.2DB6.0020.0002] # BRAHMI VOWEL SIGN O -11045 ; [.2DB7.0020.0002] # BRAHMI VOWEL SIGN AU -11046 ; [.2DB8.0020.0002] # BRAHMI VIRAMA -1107F ; [.2DB9.0020.0002] # BRAHMI NUMBER JOINER -10A00 ; [.2DBA.0020.0002] # KHAROSHTHI LETTER A -10A01 ; [.2DBB.0020.0002] # KHAROSHTHI VOWEL SIGN I -10A02 ; [.2DBC.0020.0002] # KHAROSHTHI VOWEL SIGN U -10A03 ; [.2DBD.0020.0002] # KHAROSHTHI VOWEL SIGN VOCALIC R -10A05 ; [.2DBE.0020.0002] # KHAROSHTHI VOWEL SIGN E -10A06 ; [.2DBF.0020.0002] # KHAROSHTHI VOWEL SIGN O -10A0C ; [.2DC0.0020.0002] # KHAROSHTHI VOWEL LENGTH MARK -10A10 ; [.2DC1.0020.0002] # KHAROSHTHI LETTER KA -10A11 ; [.2DC2.0020.0002] # KHAROSHTHI LETTER KHA -10A12 ; [.2DC3.0020.0002] # KHAROSHTHI LETTER GA -10A13 ; [.2DC4.0020.0002] # KHAROSHTHI LETTER GHA -10A15 ; [.2DC5.0020.0002] # KHAROSHTHI LETTER CA -10A16 ; [.2DC6.0020.0002] # KHAROSHTHI LETTER CHA -10A17 ; [.2DC7.0020.0002] # KHAROSHTHI LETTER JA -10A19 ; [.2DC8.0020.0002] # KHAROSHTHI LETTER NYA -10A1A ; [.2DC9.0020.0002] # KHAROSHTHI LETTER TTA -10A1B ; [.2DCA.0020.0002] # KHAROSHTHI LETTER TTHA -10A1C ; [.2DCB.0020.0002] # KHAROSHTHI LETTER DDA -10A1D ; [.2DCC.0020.0002] # KHAROSHTHI LETTER DDHA -10A1E ; [.2DCD.0020.0002] # KHAROSHTHI LETTER NNA -10A1F ; [.2DCE.0020.0002] # KHAROSHTHI LETTER TA -10A20 ; [.2DCF.0020.0002] # KHAROSHTHI LETTER THA -10A21 ; [.2DD0.0020.0002] # KHAROSHTHI LETTER DA -10A22 ; [.2DD1.0020.0002] # KHAROSHTHI LETTER DHA -10A23 ; [.2DD2.0020.0002] # KHAROSHTHI LETTER NA -10A24 ; [.2DD3.0020.0002] # KHAROSHTHI LETTER PA -10A25 ; [.2DD4.0020.0002] # KHAROSHTHI LETTER PHA -10A26 ; [.2DD5.0020.0002] # KHAROSHTHI LETTER BA -10A27 ; [.2DD6.0020.0002] # KHAROSHTHI LETTER BHA -10A28 ; [.2DD7.0020.0002] # KHAROSHTHI LETTER MA -10A29 ; [.2DD8.0020.0002] # KHAROSHTHI LETTER YA -10A2A ; [.2DD9.0020.0002] # KHAROSHTHI LETTER RA -10A2B ; [.2DDA.0020.0002] # KHAROSHTHI LETTER LA -10A2C ; [.2DDB.0020.0002] # KHAROSHTHI LETTER VA -10A2D ; [.2DDC.0020.0002] # KHAROSHTHI LETTER SHA -10A2E ; [.2DDD.0020.0002] # KHAROSHTHI LETTER SSA -10A2F ; [.2DDE.0020.0002] # KHAROSHTHI LETTER SA -10A30 ; [.2DDF.0020.0002] # KHAROSHTHI LETTER ZA -10A31 ; [.2DE0.0020.0002] # KHAROSHTHI LETTER HA -10A32 ; [.2DE1.0020.0002] # KHAROSHTHI LETTER KKA -10A33 ; [.2DE2.0020.0002] # KHAROSHTHI LETTER TTTHA -10A3F ; [.2DE3.0020.0002] # KHAROSHTHI VIRAMA -11C00 ; [.2DE4.0020.0002] # BHAIKSUKI LETTER A -11C01 ; [.2DE5.0020.0002] # BHAIKSUKI LETTER AA -11C02 ; [.2DE6.0020.0002] # BHAIKSUKI LETTER I -11C03 ; [.2DE7.0020.0002] # BHAIKSUKI LETTER II -11C04 ; [.2DE8.0020.0002] # BHAIKSUKI LETTER U -11C05 ; [.2DE9.0020.0002] # BHAIKSUKI LETTER UU -11C06 ; [.2DEA.0020.0002] # BHAIKSUKI LETTER VOCALIC R -11C07 ; [.2DEB.0020.0002] # BHAIKSUKI LETTER VOCALIC RR -11C08 ; [.2DEC.0020.0002] # BHAIKSUKI LETTER VOCALIC L -11C0A ; [.2DED.0020.0002] # BHAIKSUKI LETTER E -11C0B ; [.2DEE.0020.0002] # BHAIKSUKI LETTER AI -11C0C ; [.2DEF.0020.0002] # BHAIKSUKI LETTER O -11C0D ; [.2DF0.0020.0002] # BHAIKSUKI LETTER AU -11C0E ; [.2DF1.0020.0002] # BHAIKSUKI LETTER KA -11C0F ; [.2DF2.0020.0002] # BHAIKSUKI LETTER KHA -11C10 ; [.2DF3.0020.0002] # BHAIKSUKI LETTER GA -11C11 ; [.2DF4.0020.0002] # BHAIKSUKI LETTER GHA -11C12 ; [.2DF5.0020.0002] # BHAIKSUKI LETTER NGA -11C13 ; [.2DF6.0020.0002] # BHAIKSUKI LETTER CA -11C14 ; [.2DF7.0020.0002] # BHAIKSUKI LETTER CHA -11C15 ; [.2DF8.0020.0002] # BHAIKSUKI LETTER JA -11C16 ; [.2DF9.0020.0002] # BHAIKSUKI LETTER JHA -11C17 ; [.2DFA.0020.0002] # BHAIKSUKI LETTER NYA -11C18 ; [.2DFB.0020.0002] # BHAIKSUKI LETTER TTA -11C19 ; [.2DFC.0020.0002] # BHAIKSUKI LETTER TTHA -11C1A ; [.2DFD.0020.0002] # BHAIKSUKI LETTER DDA -11C1B ; [.2DFE.0020.0002] # BHAIKSUKI LETTER DDHA -11C1C ; [.2DFF.0020.0002] # BHAIKSUKI LETTER NNA -11C1D ; [.2E00.0020.0002] # BHAIKSUKI LETTER TA -11C1E ; [.2E01.0020.0002] # BHAIKSUKI LETTER THA -11C1F ; [.2E02.0020.0002] # BHAIKSUKI LETTER DA -11C20 ; [.2E03.0020.0002] # BHAIKSUKI LETTER DHA -11C21 ; [.2E04.0020.0002] # BHAIKSUKI LETTER NA -11C22 ; [.2E05.0020.0002] # BHAIKSUKI LETTER PA -11C23 ; [.2E06.0020.0002] # BHAIKSUKI LETTER PHA -11C24 ; [.2E07.0020.0002] # BHAIKSUKI LETTER BA -11C25 ; [.2E08.0020.0002] # BHAIKSUKI LETTER BHA -11C26 ; [.2E09.0020.0002] # BHAIKSUKI LETTER MA -11C27 ; [.2E0A.0020.0002] # BHAIKSUKI LETTER YA -11C28 ; [.2E0B.0020.0002] # BHAIKSUKI LETTER RA -11C29 ; [.2E0C.0020.0002] # BHAIKSUKI LETTER LA -11C2A ; [.2E0D.0020.0002] # BHAIKSUKI LETTER VA -11C2B ; [.2E0E.0020.0002] # BHAIKSUKI LETTER SHA -11C2C ; [.2E0F.0020.0002] # BHAIKSUKI LETTER SSA -11C2D ; [.2E10.0020.0002] # BHAIKSUKI LETTER SA -11C2E ; [.2E11.0020.0002] # BHAIKSUKI LETTER HA -11C40 ; [.2E12.0020.0002] # BHAIKSUKI SIGN AVAGRAHA -11C2F ; [.2E13.0020.0002] # BHAIKSUKI VOWEL SIGN AA -11C30 ; [.2E14.0020.0002] # BHAIKSUKI VOWEL SIGN I -11C31 ; [.2E15.0020.0002] # BHAIKSUKI VOWEL SIGN II -11C32 ; [.2E16.0020.0002] # BHAIKSUKI VOWEL SIGN U -11C33 ; [.2E17.0020.0002] # BHAIKSUKI VOWEL SIGN UU -11C34 ; [.2E18.0020.0002] # BHAIKSUKI VOWEL SIGN VOCALIC R -11C35 ; [.2E19.0020.0002] # BHAIKSUKI VOWEL SIGN VOCALIC RR -11C36 ; [.2E1A.0020.0002] # BHAIKSUKI VOWEL SIGN VOCALIC L -11C38 ; [.2E1B.0020.0002] # BHAIKSUKI VOWEL SIGN E -11C39 ; [.2E1C.0020.0002] # BHAIKSUKI VOWEL SIGN AI -11C3A ; [.2E1D.0020.0002] # BHAIKSUKI VOWEL SIGN O -11C3B ; [.2E1E.0020.0002] # BHAIKSUKI VOWEL SIGN AU -11C3F ; [.2E1F.0020.0002] # BHAIKSUKI SIGN VIRAMA -0E01 ; [.2E20.0020.0002] # THAI CHARACTER KO KAI -0E40 0E01 ; [.2E20.0020.0002][.2E5A.0020.0002] # -0E41 0E01 ; [.2E20.0020.0002][.2E5B.0020.0002] # -0E42 0E01 ; [.2E20.0020.0002][.2E5C.0020.0002] # -0E43 0E01 ; [.2E20.0020.0002][.2E5D.0020.0002] # -0E44 0E01 ; [.2E20.0020.0002][.2E5E.0020.0002] # -0E02 ; [.2E21.0020.0002] # THAI CHARACTER KHO KHAI -0E40 0E02 ; [.2E21.0020.0002][.2E5A.0020.0002] # -0E41 0E02 ; [.2E21.0020.0002][.2E5B.0020.0002] # -0E42 0E02 ; [.2E21.0020.0002][.2E5C.0020.0002] # -0E43 0E02 ; [.2E21.0020.0002][.2E5D.0020.0002] # -0E44 0E02 ; [.2E21.0020.0002][.2E5E.0020.0002] # -0E03 ; [.2E22.0020.0002] # THAI CHARACTER KHO KHUAT -0E40 0E03 ; [.2E22.0020.0002][.2E5A.0020.0002] # -0E41 0E03 ; [.2E22.0020.0002][.2E5B.0020.0002] # -0E42 0E03 ; [.2E22.0020.0002][.2E5C.0020.0002] # -0E43 0E03 ; [.2E22.0020.0002][.2E5D.0020.0002] # -0E44 0E03 ; [.2E22.0020.0002][.2E5E.0020.0002] # -0E04 ; [.2E23.0020.0002] # THAI CHARACTER KHO KHWAI -0E40 0E04 ; [.2E23.0020.0002][.2E5A.0020.0002] # -0E41 0E04 ; [.2E23.0020.0002][.2E5B.0020.0002] # -0E42 0E04 ; [.2E23.0020.0002][.2E5C.0020.0002] # -0E43 0E04 ; [.2E23.0020.0002][.2E5D.0020.0002] # -0E44 0E04 ; [.2E23.0020.0002][.2E5E.0020.0002] # -0E05 ; [.2E24.0020.0002] # THAI CHARACTER KHO KHON -0E40 0E05 ; [.2E24.0020.0002][.2E5A.0020.0002] # -0E41 0E05 ; [.2E24.0020.0002][.2E5B.0020.0002] # -0E42 0E05 ; [.2E24.0020.0002][.2E5C.0020.0002] # -0E43 0E05 ; [.2E24.0020.0002][.2E5D.0020.0002] # -0E44 0E05 ; [.2E24.0020.0002][.2E5E.0020.0002] # -0E06 ; [.2E25.0020.0002] # THAI CHARACTER KHO RAKHANG -0E40 0E06 ; [.2E25.0020.0002][.2E5A.0020.0002] # -0E41 0E06 ; [.2E25.0020.0002][.2E5B.0020.0002] # -0E42 0E06 ; [.2E25.0020.0002][.2E5C.0020.0002] # -0E43 0E06 ; [.2E25.0020.0002][.2E5D.0020.0002] # -0E44 0E06 ; [.2E25.0020.0002][.2E5E.0020.0002] # -0E07 ; [.2E26.0020.0002] # THAI CHARACTER NGO NGU -0E40 0E07 ; [.2E26.0020.0002][.2E5A.0020.0002] # -0E41 0E07 ; [.2E26.0020.0002][.2E5B.0020.0002] # -0E42 0E07 ; [.2E26.0020.0002][.2E5C.0020.0002] # -0E43 0E07 ; [.2E26.0020.0002][.2E5D.0020.0002] # -0E44 0E07 ; [.2E26.0020.0002][.2E5E.0020.0002] # -0E08 ; [.2E27.0020.0002] # THAI CHARACTER CHO CHAN -0E40 0E08 ; [.2E27.0020.0002][.2E5A.0020.0002] # -0E41 0E08 ; [.2E27.0020.0002][.2E5B.0020.0002] # -0E42 0E08 ; [.2E27.0020.0002][.2E5C.0020.0002] # -0E43 0E08 ; [.2E27.0020.0002][.2E5D.0020.0002] # -0E44 0E08 ; [.2E27.0020.0002][.2E5E.0020.0002] # -0E09 ; [.2E28.0020.0002] # THAI CHARACTER CHO CHING -0E40 0E09 ; [.2E28.0020.0002][.2E5A.0020.0002] # -0E41 0E09 ; [.2E28.0020.0002][.2E5B.0020.0002] # -0E42 0E09 ; [.2E28.0020.0002][.2E5C.0020.0002] # -0E43 0E09 ; [.2E28.0020.0002][.2E5D.0020.0002] # -0E44 0E09 ; [.2E28.0020.0002][.2E5E.0020.0002] # -0E0A ; [.2E29.0020.0002] # THAI CHARACTER CHO CHANG -0E40 0E0A ; [.2E29.0020.0002][.2E5A.0020.0002] # -0E41 0E0A ; [.2E29.0020.0002][.2E5B.0020.0002] # -0E42 0E0A ; [.2E29.0020.0002][.2E5C.0020.0002] # -0E43 0E0A ; [.2E29.0020.0002][.2E5D.0020.0002] # -0E44 0E0A ; [.2E29.0020.0002][.2E5E.0020.0002] # -0E0B ; [.2E2A.0020.0002] # THAI CHARACTER SO SO -0E40 0E0B ; [.2E2A.0020.0002][.2E5A.0020.0002] # -0E41 0E0B ; [.2E2A.0020.0002][.2E5B.0020.0002] # -0E42 0E0B ; [.2E2A.0020.0002][.2E5C.0020.0002] # -0E43 0E0B ; [.2E2A.0020.0002][.2E5D.0020.0002] # -0E44 0E0B ; [.2E2A.0020.0002][.2E5E.0020.0002] # -0E0C ; [.2E2B.0020.0002] # THAI CHARACTER CHO CHOE -0E40 0E0C ; [.2E2B.0020.0002][.2E5A.0020.0002] # -0E41 0E0C ; [.2E2B.0020.0002][.2E5B.0020.0002] # -0E42 0E0C ; [.2E2B.0020.0002][.2E5C.0020.0002] # -0E43 0E0C ; [.2E2B.0020.0002][.2E5D.0020.0002] # -0E44 0E0C ; [.2E2B.0020.0002][.2E5E.0020.0002] # -0E0D ; [.2E2C.0020.0002] # THAI CHARACTER YO YING -0E40 0E0D ; [.2E2C.0020.0002][.2E5A.0020.0002] # -0E41 0E0D ; [.2E2C.0020.0002][.2E5B.0020.0002] # -0E42 0E0D ; [.2E2C.0020.0002][.2E5C.0020.0002] # -0E43 0E0D ; [.2E2C.0020.0002][.2E5D.0020.0002] # -0E44 0E0D ; [.2E2C.0020.0002][.2E5E.0020.0002] # -0E0E ; [.2E2D.0020.0002] # THAI CHARACTER DO CHADA -0E40 0E0E ; [.2E2D.0020.0002][.2E5A.0020.0002] # -0E41 0E0E ; [.2E2D.0020.0002][.2E5B.0020.0002] # -0E42 0E0E ; [.2E2D.0020.0002][.2E5C.0020.0002] # -0E43 0E0E ; [.2E2D.0020.0002][.2E5D.0020.0002] # -0E44 0E0E ; [.2E2D.0020.0002][.2E5E.0020.0002] # -0E0F ; [.2E2E.0020.0002] # THAI CHARACTER TO PATAK -0E40 0E0F ; [.2E2E.0020.0002][.2E5A.0020.0002] # -0E41 0E0F ; [.2E2E.0020.0002][.2E5B.0020.0002] # -0E42 0E0F ; [.2E2E.0020.0002][.2E5C.0020.0002] # -0E43 0E0F ; [.2E2E.0020.0002][.2E5D.0020.0002] # -0E44 0E0F ; [.2E2E.0020.0002][.2E5E.0020.0002] # -0E10 ; [.2E2F.0020.0002] # THAI CHARACTER THO THAN -0E40 0E10 ; [.2E2F.0020.0002][.2E5A.0020.0002] # -0E41 0E10 ; [.2E2F.0020.0002][.2E5B.0020.0002] # -0E42 0E10 ; [.2E2F.0020.0002][.2E5C.0020.0002] # -0E43 0E10 ; [.2E2F.0020.0002][.2E5D.0020.0002] # -0E44 0E10 ; [.2E2F.0020.0002][.2E5E.0020.0002] # -0E11 ; [.2E30.0020.0002] # THAI CHARACTER THO NANGMONTHO -0E40 0E11 ; [.2E30.0020.0002][.2E5A.0020.0002] # -0E41 0E11 ; [.2E30.0020.0002][.2E5B.0020.0002] # -0E42 0E11 ; [.2E30.0020.0002][.2E5C.0020.0002] # -0E43 0E11 ; [.2E30.0020.0002][.2E5D.0020.0002] # -0E44 0E11 ; [.2E30.0020.0002][.2E5E.0020.0002] # -0E12 ; [.2E31.0020.0002] # THAI CHARACTER THO PHUTHAO -0E40 0E12 ; [.2E31.0020.0002][.2E5A.0020.0002] # -0E41 0E12 ; [.2E31.0020.0002][.2E5B.0020.0002] # -0E42 0E12 ; [.2E31.0020.0002][.2E5C.0020.0002] # -0E43 0E12 ; [.2E31.0020.0002][.2E5D.0020.0002] # -0E44 0E12 ; [.2E31.0020.0002][.2E5E.0020.0002] # -0E13 ; [.2E32.0020.0002] # THAI CHARACTER NO NEN -0E40 0E13 ; [.2E32.0020.0002][.2E5A.0020.0002] # -0E41 0E13 ; [.2E32.0020.0002][.2E5B.0020.0002] # -0E42 0E13 ; [.2E32.0020.0002][.2E5C.0020.0002] # -0E43 0E13 ; [.2E32.0020.0002][.2E5D.0020.0002] # -0E44 0E13 ; [.2E32.0020.0002][.2E5E.0020.0002] # -0E14 ; [.2E33.0020.0002] # THAI CHARACTER DO DEK -0E40 0E14 ; [.2E33.0020.0002][.2E5A.0020.0002] # -0E41 0E14 ; [.2E33.0020.0002][.2E5B.0020.0002] # -0E42 0E14 ; [.2E33.0020.0002][.2E5C.0020.0002] # -0E43 0E14 ; [.2E33.0020.0002][.2E5D.0020.0002] # -0E44 0E14 ; [.2E33.0020.0002][.2E5E.0020.0002] # -0E15 ; [.2E34.0020.0002] # THAI CHARACTER TO TAO -0E40 0E15 ; [.2E34.0020.0002][.2E5A.0020.0002] # -0E41 0E15 ; [.2E34.0020.0002][.2E5B.0020.0002] # -0E42 0E15 ; [.2E34.0020.0002][.2E5C.0020.0002] # -0E43 0E15 ; [.2E34.0020.0002][.2E5D.0020.0002] # -0E44 0E15 ; [.2E34.0020.0002][.2E5E.0020.0002] # -0E16 ; [.2E35.0020.0002] # THAI CHARACTER THO THUNG -0E40 0E16 ; [.2E35.0020.0002][.2E5A.0020.0002] # -0E41 0E16 ; [.2E35.0020.0002][.2E5B.0020.0002] # -0E42 0E16 ; [.2E35.0020.0002][.2E5C.0020.0002] # -0E43 0E16 ; [.2E35.0020.0002][.2E5D.0020.0002] # -0E44 0E16 ; [.2E35.0020.0002][.2E5E.0020.0002] # -0E17 ; [.2E36.0020.0002] # THAI CHARACTER THO THAHAN -0E40 0E17 ; [.2E36.0020.0002][.2E5A.0020.0002] # -0E41 0E17 ; [.2E36.0020.0002][.2E5B.0020.0002] # -0E42 0E17 ; [.2E36.0020.0002][.2E5C.0020.0002] # -0E43 0E17 ; [.2E36.0020.0002][.2E5D.0020.0002] # -0E44 0E17 ; [.2E36.0020.0002][.2E5E.0020.0002] # -0E18 ; [.2E37.0020.0002] # THAI CHARACTER THO THONG -0E40 0E18 ; [.2E37.0020.0002][.2E5A.0020.0002] # -0E41 0E18 ; [.2E37.0020.0002][.2E5B.0020.0002] # -0E42 0E18 ; [.2E37.0020.0002][.2E5C.0020.0002] # -0E43 0E18 ; [.2E37.0020.0002][.2E5D.0020.0002] # -0E44 0E18 ; [.2E37.0020.0002][.2E5E.0020.0002] # -0E19 ; [.2E38.0020.0002] # THAI CHARACTER NO NU -0E40 0E19 ; [.2E38.0020.0002][.2E5A.0020.0002] # -0E41 0E19 ; [.2E38.0020.0002][.2E5B.0020.0002] # -0E42 0E19 ; [.2E38.0020.0002][.2E5C.0020.0002] # -0E43 0E19 ; [.2E38.0020.0002][.2E5D.0020.0002] # -0E44 0E19 ; [.2E38.0020.0002][.2E5E.0020.0002] # -0E1A ; [.2E39.0020.0002] # THAI CHARACTER BO BAIMAI -0E40 0E1A ; [.2E39.0020.0002][.2E5A.0020.0002] # -0E41 0E1A ; [.2E39.0020.0002][.2E5B.0020.0002] # -0E42 0E1A ; [.2E39.0020.0002][.2E5C.0020.0002] # -0E43 0E1A ; [.2E39.0020.0002][.2E5D.0020.0002] # -0E44 0E1A ; [.2E39.0020.0002][.2E5E.0020.0002] # -0E1B ; [.2E3A.0020.0002] # THAI CHARACTER PO PLA -0E40 0E1B ; [.2E3A.0020.0002][.2E5A.0020.0002] # -0E41 0E1B ; [.2E3A.0020.0002][.2E5B.0020.0002] # -0E42 0E1B ; [.2E3A.0020.0002][.2E5C.0020.0002] # -0E43 0E1B ; [.2E3A.0020.0002][.2E5D.0020.0002] # -0E44 0E1B ; [.2E3A.0020.0002][.2E5E.0020.0002] # -0E1C ; [.2E3B.0020.0002] # THAI CHARACTER PHO PHUNG -0E40 0E1C ; [.2E3B.0020.0002][.2E5A.0020.0002] # -0E41 0E1C ; [.2E3B.0020.0002][.2E5B.0020.0002] # -0E42 0E1C ; [.2E3B.0020.0002][.2E5C.0020.0002] # -0E43 0E1C ; [.2E3B.0020.0002][.2E5D.0020.0002] # -0E44 0E1C ; [.2E3B.0020.0002][.2E5E.0020.0002] # -0E1D ; [.2E3C.0020.0002] # THAI CHARACTER FO FA -0E40 0E1D ; [.2E3C.0020.0002][.2E5A.0020.0002] # -0E41 0E1D ; [.2E3C.0020.0002][.2E5B.0020.0002] # -0E42 0E1D ; [.2E3C.0020.0002][.2E5C.0020.0002] # -0E43 0E1D ; [.2E3C.0020.0002][.2E5D.0020.0002] # -0E44 0E1D ; [.2E3C.0020.0002][.2E5E.0020.0002] # -0E1E ; [.2E3D.0020.0002] # THAI CHARACTER PHO PHAN -0E40 0E1E ; [.2E3D.0020.0002][.2E5A.0020.0002] # -0E41 0E1E ; [.2E3D.0020.0002][.2E5B.0020.0002] # -0E42 0E1E ; [.2E3D.0020.0002][.2E5C.0020.0002] # -0E43 0E1E ; [.2E3D.0020.0002][.2E5D.0020.0002] # -0E44 0E1E ; [.2E3D.0020.0002][.2E5E.0020.0002] # -0E1F ; [.2E3E.0020.0002] # THAI CHARACTER FO FAN -0E40 0E1F ; [.2E3E.0020.0002][.2E5A.0020.0002] # -0E41 0E1F ; [.2E3E.0020.0002][.2E5B.0020.0002] # -0E42 0E1F ; [.2E3E.0020.0002][.2E5C.0020.0002] # -0E43 0E1F ; [.2E3E.0020.0002][.2E5D.0020.0002] # -0E44 0E1F ; [.2E3E.0020.0002][.2E5E.0020.0002] # -0E20 ; [.2E3F.0020.0002] # THAI CHARACTER PHO SAMPHAO -0E40 0E20 ; [.2E3F.0020.0002][.2E5A.0020.0002] # -0E41 0E20 ; [.2E3F.0020.0002][.2E5B.0020.0002] # -0E42 0E20 ; [.2E3F.0020.0002][.2E5C.0020.0002] # -0E43 0E20 ; [.2E3F.0020.0002][.2E5D.0020.0002] # -0E44 0E20 ; [.2E3F.0020.0002][.2E5E.0020.0002] # -0E21 ; [.2E40.0020.0002] # THAI CHARACTER MO MA -0E40 0E21 ; [.2E40.0020.0002][.2E5A.0020.0002] # -0E41 0E21 ; [.2E40.0020.0002][.2E5B.0020.0002] # -0E42 0E21 ; [.2E40.0020.0002][.2E5C.0020.0002] # -0E43 0E21 ; [.2E40.0020.0002][.2E5D.0020.0002] # -0E44 0E21 ; [.2E40.0020.0002][.2E5E.0020.0002] # -0E22 ; [.2E41.0020.0002] # THAI CHARACTER YO YAK -0E40 0E22 ; [.2E41.0020.0002][.2E5A.0020.0002] # -0E41 0E22 ; [.2E41.0020.0002][.2E5B.0020.0002] # -0E42 0E22 ; [.2E41.0020.0002][.2E5C.0020.0002] # -0E43 0E22 ; [.2E41.0020.0002][.2E5D.0020.0002] # -0E44 0E22 ; [.2E41.0020.0002][.2E5E.0020.0002] # -0E23 ; [.2E42.0020.0002] # THAI CHARACTER RO RUA -0E40 0E23 ; [.2E42.0020.0002][.2E5A.0020.0002] # -0E41 0E23 ; [.2E42.0020.0002][.2E5B.0020.0002] # -0E42 0E23 ; [.2E42.0020.0002][.2E5C.0020.0002] # -0E43 0E23 ; [.2E42.0020.0002][.2E5D.0020.0002] # -0E44 0E23 ; [.2E42.0020.0002][.2E5E.0020.0002] # -0E24 ; [.2E43.0020.0002] # THAI CHARACTER RU -0E40 0E24 ; [.2E43.0020.0002][.2E5A.0020.0002] # -0E41 0E24 ; [.2E43.0020.0002][.2E5B.0020.0002] # -0E42 0E24 ; [.2E43.0020.0002][.2E5C.0020.0002] # -0E43 0E24 ; [.2E43.0020.0002][.2E5D.0020.0002] # -0E44 0E24 ; [.2E43.0020.0002][.2E5E.0020.0002] # -0E25 ; [.2E44.0020.0002] # THAI CHARACTER LO LING -0E40 0E25 ; [.2E44.0020.0002][.2E5A.0020.0002] # -0E41 0E25 ; [.2E44.0020.0002][.2E5B.0020.0002] # -0E42 0E25 ; [.2E44.0020.0002][.2E5C.0020.0002] # -0E43 0E25 ; [.2E44.0020.0002][.2E5D.0020.0002] # -0E44 0E25 ; [.2E44.0020.0002][.2E5E.0020.0002] # -0E26 ; [.2E45.0020.0002] # THAI CHARACTER LU -0E40 0E26 ; [.2E45.0020.0002][.2E5A.0020.0002] # -0E41 0E26 ; [.2E45.0020.0002][.2E5B.0020.0002] # -0E42 0E26 ; [.2E45.0020.0002][.2E5C.0020.0002] # -0E43 0E26 ; [.2E45.0020.0002][.2E5D.0020.0002] # -0E44 0E26 ; [.2E45.0020.0002][.2E5E.0020.0002] # -0E27 ; [.2E46.0020.0002] # THAI CHARACTER WO WAEN -0E40 0E27 ; [.2E46.0020.0002][.2E5A.0020.0002] # -0E41 0E27 ; [.2E46.0020.0002][.2E5B.0020.0002] # -0E42 0E27 ; [.2E46.0020.0002][.2E5C.0020.0002] # -0E43 0E27 ; [.2E46.0020.0002][.2E5D.0020.0002] # -0E44 0E27 ; [.2E46.0020.0002][.2E5E.0020.0002] # -0E28 ; [.2E47.0020.0002] # THAI CHARACTER SO SALA -0E40 0E28 ; [.2E47.0020.0002][.2E5A.0020.0002] # -0E41 0E28 ; [.2E47.0020.0002][.2E5B.0020.0002] # -0E42 0E28 ; [.2E47.0020.0002][.2E5C.0020.0002] # -0E43 0E28 ; [.2E47.0020.0002][.2E5D.0020.0002] # -0E44 0E28 ; [.2E47.0020.0002][.2E5E.0020.0002] # -0E29 ; [.2E48.0020.0002] # THAI CHARACTER SO RUSI -0E40 0E29 ; [.2E48.0020.0002][.2E5A.0020.0002] # -0E41 0E29 ; [.2E48.0020.0002][.2E5B.0020.0002] # -0E42 0E29 ; [.2E48.0020.0002][.2E5C.0020.0002] # -0E43 0E29 ; [.2E48.0020.0002][.2E5D.0020.0002] # -0E44 0E29 ; [.2E48.0020.0002][.2E5E.0020.0002] # -0E2A ; [.2E49.0020.0002] # THAI CHARACTER SO SUA -0E40 0E2A ; [.2E49.0020.0002][.2E5A.0020.0002] # -0E41 0E2A ; [.2E49.0020.0002][.2E5B.0020.0002] # -0E42 0E2A ; [.2E49.0020.0002][.2E5C.0020.0002] # -0E43 0E2A ; [.2E49.0020.0002][.2E5D.0020.0002] # -0E44 0E2A ; [.2E49.0020.0002][.2E5E.0020.0002] # -0E2B ; [.2E4A.0020.0002] # THAI CHARACTER HO HIP -0E40 0E2B ; [.2E4A.0020.0002][.2E5A.0020.0002] # -0E41 0E2B ; [.2E4A.0020.0002][.2E5B.0020.0002] # -0E42 0E2B ; [.2E4A.0020.0002][.2E5C.0020.0002] # -0E43 0E2B ; [.2E4A.0020.0002][.2E5D.0020.0002] # -0E44 0E2B ; [.2E4A.0020.0002][.2E5E.0020.0002] # -0E2C ; [.2E4B.0020.0002] # THAI CHARACTER LO CHULA -0E40 0E2C ; [.2E4B.0020.0002][.2E5A.0020.0002] # -0E41 0E2C ; [.2E4B.0020.0002][.2E5B.0020.0002] # -0E42 0E2C ; [.2E4B.0020.0002][.2E5C.0020.0002] # -0E43 0E2C ; [.2E4B.0020.0002][.2E5D.0020.0002] # -0E44 0E2C ; [.2E4B.0020.0002][.2E5E.0020.0002] # -0E2D ; [.2E4C.0020.0002] # THAI CHARACTER O ANG -0E40 0E2D ; [.2E4C.0020.0002][.2E5A.0020.0002] # -0E41 0E2D ; [.2E4C.0020.0002][.2E5B.0020.0002] # -0E42 0E2D ; [.2E4C.0020.0002][.2E5C.0020.0002] # -0E43 0E2D ; [.2E4C.0020.0002][.2E5D.0020.0002] # -0E44 0E2D ; [.2E4C.0020.0002][.2E5E.0020.0002] # -0E2E ; [.2E4D.0020.0002] # THAI CHARACTER HO NOKHUK -0E40 0E2E ; [.2E4D.0020.0002][.2E5A.0020.0002] # -0E41 0E2E ; [.2E4D.0020.0002][.2E5B.0020.0002] # -0E42 0E2E ; [.2E4D.0020.0002][.2E5C.0020.0002] # -0E43 0E2E ; [.2E4D.0020.0002][.2E5D.0020.0002] # -0E44 0E2E ; [.2E4D.0020.0002][.2E5E.0020.0002] # -0E2F ; [.2E4E.0020.0002] # THAI CHARACTER PAIYANNOI -0E30 ; [.2E4F.0020.0002] # THAI CHARACTER SARA A -0E31 ; [.2E50.0020.0002] # THAI CHARACTER MAI HAN-AKAT -0E32 ; [.2E51.0020.0002] # THAI CHARACTER SARA AA -0E33 ; [.2E52.0020.0002] # THAI CHARACTER SARA AM -0E4D 0E32 ; [.2E52.0020.0002] # THAI CHARACTER SARA AM -0E34 ; [.2E53.0020.0002] # THAI CHARACTER SARA I -0E35 ; [.2E54.0020.0002] # THAI CHARACTER SARA II -0E36 ; [.2E55.0020.0002] # THAI CHARACTER SARA UE -0E37 ; [.2E56.0020.0002] # THAI CHARACTER SARA UEE -0E38 ; [.2E57.0020.0002] # THAI CHARACTER SARA U -0E39 ; [.2E58.0020.0002] # THAI CHARACTER SARA UU -0E3A ; [.2E59.0020.0002] # THAI CHARACTER PHINTHU -0E40 ; [.2E5A.0020.0002] # THAI CHARACTER SARA E -0E41 ; [.2E5B.0020.0002] # THAI CHARACTER SARA AE -0E42 ; [.2E5C.0020.0002] # THAI CHARACTER SARA O -0E43 ; [.2E5D.0020.0002] # THAI CHARACTER SARA AI MAIMUAN -0E44 ; [.2E5E.0020.0002] # THAI CHARACTER SARA AI MAIMALAI -0E45 ; [.2E5F.0020.0002] # THAI CHARACTER LAKKHANGYAO -0EDE ; [.2E60.0020.0002] # LAO LETTER KHMU GO -0EC0 0EDE ; [.2E60.0020.0002][.2E8B.0020.0002] # -0EC1 0EDE ; [.2E60.0020.0002][.2E8C.0020.0002] # -0EC2 0EDE ; [.2E60.0020.0002][.2E8D.0020.0002] # -0EC3 0EDE ; [.2E60.0020.0002][.2E8E.0020.0002] # -0EC4 0EDE ; [.2E60.0020.0002][.2E8F.0020.0002] # -0E81 ; [.2E61.0020.0002] # LAO LETTER KO -0EC0 0E81 ; [.2E61.0020.0002][.2E8B.0020.0002] # -0EC1 0E81 ; [.2E61.0020.0002][.2E8C.0020.0002] # -0EC2 0E81 ; [.2E61.0020.0002][.2E8D.0020.0002] # -0EC3 0E81 ; [.2E61.0020.0002][.2E8E.0020.0002] # -0EC4 0E81 ; [.2E61.0020.0002][.2E8F.0020.0002] # -0E82 ; [.2E62.0020.0002] # LAO LETTER KHO SUNG -0EC0 0E82 ; [.2E62.0020.0002][.2E8B.0020.0002] # -0EC1 0E82 ; [.2E62.0020.0002][.2E8C.0020.0002] # -0EC2 0E82 ; [.2E62.0020.0002][.2E8D.0020.0002] # -0EC3 0E82 ; [.2E62.0020.0002][.2E8E.0020.0002] # -0EC4 0E82 ; [.2E62.0020.0002][.2E8F.0020.0002] # -0E84 ; [.2E63.0020.0002] # LAO LETTER KHO TAM -0EC0 0E84 ; [.2E63.0020.0002][.2E8B.0020.0002] # -0EC1 0E84 ; [.2E63.0020.0002][.2E8C.0020.0002] # -0EC2 0E84 ; [.2E63.0020.0002][.2E8D.0020.0002] # -0EC3 0E84 ; [.2E63.0020.0002][.2E8E.0020.0002] # -0EC4 0E84 ; [.2E63.0020.0002][.2E8F.0020.0002] # -0E87 ; [.2E64.0020.0002] # LAO LETTER NGO -0EC0 0E87 ; [.2E64.0020.0002][.2E8B.0020.0002] # -0EC1 0E87 ; [.2E64.0020.0002][.2E8C.0020.0002] # -0EC2 0E87 ; [.2E64.0020.0002][.2E8D.0020.0002] # -0EC3 0E87 ; [.2E64.0020.0002][.2E8E.0020.0002] # -0EC4 0E87 ; [.2E64.0020.0002][.2E8F.0020.0002] # -0E88 ; [.2E65.0020.0002] # LAO LETTER CO -0EC0 0E88 ; [.2E65.0020.0002][.2E8B.0020.0002] # -0EC1 0E88 ; [.2E65.0020.0002][.2E8C.0020.0002] # -0EC2 0E88 ; [.2E65.0020.0002][.2E8D.0020.0002] # -0EC3 0E88 ; [.2E65.0020.0002][.2E8E.0020.0002] # -0EC4 0E88 ; [.2E65.0020.0002][.2E8F.0020.0002] # -0EAA ; [.2E66.0020.0002] # LAO LETTER SO SUNG -0EC0 0EAA ; [.2E66.0020.0002][.2E8B.0020.0002] # -0EC1 0EAA ; [.2E66.0020.0002][.2E8C.0020.0002] # -0EC2 0EAA ; [.2E66.0020.0002][.2E8D.0020.0002] # -0EC3 0EAA ; [.2E66.0020.0002][.2E8E.0020.0002] # -0EC4 0EAA ; [.2E66.0020.0002][.2E8F.0020.0002] # -0E8A ; [.2E67.0020.0002] # LAO LETTER SO TAM -0EC0 0E8A ; [.2E67.0020.0002][.2E8B.0020.0002] # -0EC1 0E8A ; [.2E67.0020.0002][.2E8C.0020.0002] # -0EC2 0E8A ; [.2E67.0020.0002][.2E8D.0020.0002] # -0EC3 0E8A ; [.2E67.0020.0002][.2E8E.0020.0002] # -0EC4 0E8A ; [.2E67.0020.0002][.2E8F.0020.0002] # -0EDF ; [.2E68.0020.0002] # LAO LETTER KHMU NYO -0EC0 0EDF ; [.2E68.0020.0002][.2E8B.0020.0002] # -0EC1 0EDF ; [.2E68.0020.0002][.2E8C.0020.0002] # -0EC2 0EDF ; [.2E68.0020.0002][.2E8D.0020.0002] # -0EC3 0EDF ; [.2E68.0020.0002][.2E8E.0020.0002] # -0EC4 0EDF ; [.2E68.0020.0002][.2E8F.0020.0002] # -0E8D ; [.2E69.0020.0002] # LAO LETTER NYO -0EC0 0E8D ; [.2E69.0020.0002][.2E8B.0020.0002] # -0EC1 0E8D ; [.2E69.0020.0002][.2E8C.0020.0002] # -0EC2 0E8D ; [.2E69.0020.0002][.2E8D.0020.0002] # -0EC3 0E8D ; [.2E69.0020.0002][.2E8E.0020.0002] # -0EC4 0E8D ; [.2E69.0020.0002][.2E8F.0020.0002] # -0E94 ; [.2E6A.0020.0002] # LAO LETTER DO -0EC0 0E94 ; [.2E6A.0020.0002][.2E8B.0020.0002] # -0EC1 0E94 ; [.2E6A.0020.0002][.2E8C.0020.0002] # -0EC2 0E94 ; [.2E6A.0020.0002][.2E8D.0020.0002] # -0EC3 0E94 ; [.2E6A.0020.0002][.2E8E.0020.0002] # -0EC4 0E94 ; [.2E6A.0020.0002][.2E8F.0020.0002] # -0E95 ; [.2E6B.0020.0002] # LAO LETTER TO -0EC0 0E95 ; [.2E6B.0020.0002][.2E8B.0020.0002] # -0EC1 0E95 ; [.2E6B.0020.0002][.2E8C.0020.0002] # -0EC2 0E95 ; [.2E6B.0020.0002][.2E8D.0020.0002] # -0EC3 0E95 ; [.2E6B.0020.0002][.2E8E.0020.0002] # -0EC4 0E95 ; [.2E6B.0020.0002][.2E8F.0020.0002] # -0E96 ; [.2E6C.0020.0002] # LAO LETTER THO SUNG -0EC0 0E96 ; [.2E6C.0020.0002][.2E8B.0020.0002] # -0EC1 0E96 ; [.2E6C.0020.0002][.2E8C.0020.0002] # -0EC2 0E96 ; [.2E6C.0020.0002][.2E8D.0020.0002] # -0EC3 0E96 ; [.2E6C.0020.0002][.2E8E.0020.0002] # -0EC4 0E96 ; [.2E6C.0020.0002][.2E8F.0020.0002] # -0E97 ; [.2E6D.0020.0002] # LAO LETTER THO TAM -0EC0 0E97 ; [.2E6D.0020.0002][.2E8B.0020.0002] # -0EC1 0E97 ; [.2E6D.0020.0002][.2E8C.0020.0002] # -0EC2 0E97 ; [.2E6D.0020.0002][.2E8D.0020.0002] # -0EC3 0E97 ; [.2E6D.0020.0002][.2E8E.0020.0002] # -0EC4 0E97 ; [.2E6D.0020.0002][.2E8F.0020.0002] # -0E99 ; [.2E6E.0020.0002] # LAO LETTER NO -0EC0 0E99 ; [.2E6E.0020.0002][.2E8B.0020.0002] # -0EC1 0E99 ; [.2E6E.0020.0002][.2E8C.0020.0002] # -0EC2 0E99 ; [.2E6E.0020.0002][.2E8D.0020.0002] # -0EC3 0E99 ; [.2E6E.0020.0002][.2E8E.0020.0002] # -0EC4 0E99 ; [.2E6E.0020.0002][.2E8F.0020.0002] # -0E9A ; [.2E6F.0020.0002] # LAO LETTER BO -0EC0 0E9A ; [.2E6F.0020.0002][.2E8B.0020.0002] # -0EC1 0E9A ; [.2E6F.0020.0002][.2E8C.0020.0002] # -0EC2 0E9A ; [.2E6F.0020.0002][.2E8D.0020.0002] # -0EC3 0E9A ; [.2E6F.0020.0002][.2E8E.0020.0002] # -0EC4 0E9A ; [.2E6F.0020.0002][.2E8F.0020.0002] # -0E9B ; [.2E70.0020.0002] # LAO LETTER PO -0EC0 0E9B ; [.2E70.0020.0002][.2E8B.0020.0002] # -0EC1 0E9B ; [.2E70.0020.0002][.2E8C.0020.0002] # -0EC2 0E9B ; [.2E70.0020.0002][.2E8D.0020.0002] # -0EC3 0E9B ; [.2E70.0020.0002][.2E8E.0020.0002] # -0EC4 0E9B ; [.2E70.0020.0002][.2E8F.0020.0002] # -0E9C ; [.2E71.0020.0002] # LAO LETTER PHO SUNG -0EC0 0E9C ; [.2E71.0020.0002][.2E8B.0020.0002] # -0EC1 0E9C ; [.2E71.0020.0002][.2E8C.0020.0002] # -0EC2 0E9C ; [.2E71.0020.0002][.2E8D.0020.0002] # -0EC3 0E9C ; [.2E71.0020.0002][.2E8E.0020.0002] # -0EC4 0E9C ; [.2E71.0020.0002][.2E8F.0020.0002] # -0E9D ; [.2E72.0020.0002] # LAO LETTER FO TAM -0EC0 0E9D ; [.2E72.0020.0002][.2E8B.0020.0002] # -0EC1 0E9D ; [.2E72.0020.0002][.2E8C.0020.0002] # -0EC2 0E9D ; [.2E72.0020.0002][.2E8D.0020.0002] # -0EC3 0E9D ; [.2E72.0020.0002][.2E8E.0020.0002] # -0EC4 0E9D ; [.2E72.0020.0002][.2E8F.0020.0002] # -0E9E ; [.2E73.0020.0002] # LAO LETTER PHO TAM -0EC0 0E9E ; [.2E73.0020.0002][.2E8B.0020.0002] # -0EC1 0E9E ; [.2E73.0020.0002][.2E8C.0020.0002] # -0EC2 0E9E ; [.2E73.0020.0002][.2E8D.0020.0002] # -0EC3 0E9E ; [.2E73.0020.0002][.2E8E.0020.0002] # -0EC4 0E9E ; [.2E73.0020.0002][.2E8F.0020.0002] # -0E9F ; [.2E74.0020.0002] # LAO LETTER FO SUNG -0EC0 0E9F ; [.2E74.0020.0002][.2E8B.0020.0002] # -0EC1 0E9F ; [.2E74.0020.0002][.2E8C.0020.0002] # -0EC2 0E9F ; [.2E74.0020.0002][.2E8D.0020.0002] # -0EC3 0E9F ; [.2E74.0020.0002][.2E8E.0020.0002] # -0EC4 0E9F ; [.2E74.0020.0002][.2E8F.0020.0002] # -0EA1 ; [.2E75.0020.0002] # LAO LETTER MO -0EC0 0EA1 ; [.2E75.0020.0002][.2E8B.0020.0002] # -0EC1 0EA1 ; [.2E75.0020.0002][.2E8C.0020.0002] # -0EC2 0EA1 ; [.2E75.0020.0002][.2E8D.0020.0002] # -0EC3 0EA1 ; [.2E75.0020.0002][.2E8E.0020.0002] # -0EC4 0EA1 ; [.2E75.0020.0002][.2E8F.0020.0002] # -0EA2 ; [.2E76.0020.0002] # LAO LETTER YO -0EC0 0EA2 ; [.2E76.0020.0002][.2E8B.0020.0002] # -0EC1 0EA2 ; [.2E76.0020.0002][.2E8C.0020.0002] # -0EC2 0EA2 ; [.2E76.0020.0002][.2E8D.0020.0002] # -0EC3 0EA2 ; [.2E76.0020.0002][.2E8E.0020.0002] # -0EC4 0EA2 ; [.2E76.0020.0002][.2E8F.0020.0002] # -0EA3 ; [.2E77.0020.0002] # LAO LETTER LO LING -0EC0 0EA3 ; [.2E77.0020.0002][.2E8B.0020.0002] # -0EC1 0EA3 ; [.2E77.0020.0002][.2E8C.0020.0002] # -0EC2 0EA3 ; [.2E77.0020.0002][.2E8D.0020.0002] # -0EC3 0EA3 ; [.2E77.0020.0002][.2E8E.0020.0002] # -0EC4 0EA3 ; [.2E77.0020.0002][.2E8F.0020.0002] # -0EA5 ; [.2E78.0020.0002] # LAO LETTER LO LOOT -0EC0 0EA5 ; [.2E78.0020.0002][.2E8B.0020.0002] # -0EC1 0EA5 ; [.2E78.0020.0002][.2E8C.0020.0002] # -0EC2 0EA5 ; [.2E78.0020.0002][.2E8D.0020.0002] # -0EC3 0EA5 ; [.2E78.0020.0002][.2E8E.0020.0002] # -0EC4 0EA5 ; [.2E78.0020.0002][.2E8F.0020.0002] # -0EA7 ; [.2E79.0020.0002] # LAO LETTER WO -0EC0 0EA7 ; [.2E79.0020.0002][.2E8B.0020.0002] # -0EC1 0EA7 ; [.2E79.0020.0002][.2E8C.0020.0002] # -0EC2 0EA7 ; [.2E79.0020.0002][.2E8D.0020.0002] # -0EC3 0EA7 ; [.2E79.0020.0002][.2E8E.0020.0002] # -0EC4 0EA7 ; [.2E79.0020.0002][.2E8F.0020.0002] # -0EAB ; [.2E7A.0020.0002] # LAO LETTER HO SUNG -0EDC ; [.2E7A.0020.0004][.2E6E.0020.0004] # LAO HO NO -0EC0 0EDC ; [.2E7A.0020.0004][.2E6E.0020.0004][.2E8B.0020.0002] # -0EC1 0EDC ; [.2E7A.0020.0004][.2E6E.0020.0004][.2E8C.0020.0002] # -0EC2 0EDC ; [.2E7A.0020.0004][.2E6E.0020.0004][.2E8D.0020.0002] # -0EC3 0EDC ; [.2E7A.0020.0004][.2E6E.0020.0004][.2E8E.0020.0002] # -0EC4 0EDC ; [.2E7A.0020.0004][.2E6E.0020.0004][.2E8F.0020.0002] # -0EDD ; [.2E7A.0020.0004][.2E75.0020.0004] # LAO HO MO -0EC0 0EDD ; [.2E7A.0020.0004][.2E75.0020.0004][.2E8B.0020.0002] # -0EC1 0EDD ; [.2E7A.0020.0004][.2E75.0020.0004][.2E8C.0020.0002] # -0EC2 0EDD ; [.2E7A.0020.0004][.2E75.0020.0004][.2E8D.0020.0002] # -0EC3 0EDD ; [.2E7A.0020.0004][.2E75.0020.0004][.2E8E.0020.0002] # -0EC4 0EDD ; [.2E7A.0020.0004][.2E75.0020.0004][.2E8F.0020.0002] # -0EC0 0EAB ; [.2E7A.0020.0002][.2E8B.0020.0002] # -0EC1 0EAB ; [.2E7A.0020.0002][.2E8C.0020.0002] # -0EC2 0EAB ; [.2E7A.0020.0002][.2E8D.0020.0002] # -0EC3 0EAB ; [.2E7A.0020.0002][.2E8E.0020.0002] # -0EC4 0EAB ; [.2E7A.0020.0002][.2E8F.0020.0002] # -0EAD ; [.2E7B.0020.0002] # LAO LETTER O -0EC0 0EAD ; [.2E7B.0020.0002][.2E8B.0020.0002] # -0EC1 0EAD ; [.2E7B.0020.0002][.2E8C.0020.0002] # -0EC2 0EAD ; [.2E7B.0020.0002][.2E8D.0020.0002] # -0EC3 0EAD ; [.2E7B.0020.0002][.2E8E.0020.0002] # -0EC4 0EAD ; [.2E7B.0020.0002][.2E8F.0020.0002] # -0EAE ; [.2E7C.0020.0002] # LAO LETTER HO TAM -0EC0 0EAE ; [.2E7C.0020.0002][.2E8B.0020.0002] # -0EC1 0EAE ; [.2E7C.0020.0002][.2E8C.0020.0002] # -0EC2 0EAE ; [.2E7C.0020.0002][.2E8D.0020.0002] # -0EC3 0EAE ; [.2E7C.0020.0002][.2E8E.0020.0002] # -0EC4 0EAE ; [.2E7C.0020.0002][.2E8F.0020.0002] # -0EAF ; [.2E7D.0020.0002] # LAO ELLIPSIS -0EB0 ; [.2E7E.0020.0002] # LAO VOWEL SIGN A -0EB1 ; [.2E7F.0020.0002] # LAO VOWEL SIGN MAI KAN -0EB2 ; [.2E80.0020.0002] # LAO VOWEL SIGN AA -0EB3 ; [.2E81.0020.0002] # LAO VOWEL SIGN AM -0ECD 0EB2 ; [.2E81.0020.0002] # LAO VOWEL SIGN AM -0EB4 ; [.2E82.0020.0002] # LAO VOWEL SIGN I -0EB5 ; [.2E83.0020.0002] # LAO VOWEL SIGN II -0EB6 ; [.2E84.0020.0002] # LAO VOWEL SIGN Y -0EB7 ; [.2E85.0020.0002] # LAO VOWEL SIGN YY -0EB8 ; [.2E86.0020.0002] # LAO VOWEL SIGN U -0EB9 ; [.2E87.0020.0002] # LAO VOWEL SIGN UU -0EBB ; [.2E88.0020.0002] # LAO VOWEL SIGN MAI KON -0EBC ; [.2E89.0020.0002] # LAO SEMIVOWEL SIGN LO -0EBD ; [.2E8A.0020.0002] # LAO SEMIVOWEL SIGN NYO -0EC0 ; [.2E8B.0020.0002] # LAO VOWEL SIGN E -0EC1 ; [.2E8C.0020.0002] # LAO VOWEL SIGN EI -0EC2 ; [.2E8D.0020.0002] # LAO VOWEL SIGN O -0EC3 ; [.2E8E.0020.0002] # LAO VOWEL SIGN AY -0EC4 ; [.2E8F.0020.0002] # LAO VOWEL SIGN AI -AA80 ; [.2E90.0020.0002] # TAI VIET LETTER LOW KO -AAB5 AA80 ; [.2E90.0020.0002][.2EC5.0020.0002] # -AAB6 AA80 ; [.2E90.0020.0002][.2EC6.0020.0002] # -AAB9 AA80 ; [.2E90.0020.0002][.2EC9.0020.0002] # -AABB AA80 ; [.2E90.0020.0002][.2ECB.0020.0002] # -AABC AA80 ; [.2E90.0020.0002][.2ECC.0020.0002] # -AA81 ; [.2E91.0020.0002] # TAI VIET LETTER HIGH KO -AAB5 AA81 ; [.2E91.0020.0002][.2EC5.0020.0002] # -AAB6 AA81 ; [.2E91.0020.0002][.2EC6.0020.0002] # -AAB9 AA81 ; [.2E91.0020.0002][.2EC9.0020.0002] # -AABB AA81 ; [.2E91.0020.0002][.2ECB.0020.0002] # -AABC AA81 ; [.2E91.0020.0002][.2ECC.0020.0002] # -AA82 ; [.2E92.0020.0002] # TAI VIET LETTER LOW KHO -AAB5 AA82 ; [.2E92.0020.0002][.2EC5.0020.0002] # -AAB6 AA82 ; [.2E92.0020.0002][.2EC6.0020.0002] # -AAB9 AA82 ; [.2E92.0020.0002][.2EC9.0020.0002] # -AABB AA82 ; [.2E92.0020.0002][.2ECB.0020.0002] # -AABC AA82 ; [.2E92.0020.0002][.2ECC.0020.0002] # -AA83 ; [.2E93.0020.0002] # TAI VIET LETTER HIGH KHO -AAB5 AA83 ; [.2E93.0020.0002][.2EC5.0020.0002] # -AAB6 AA83 ; [.2E93.0020.0002][.2EC6.0020.0002] # -AAB9 AA83 ; [.2E93.0020.0002][.2EC9.0020.0002] # -AABB AA83 ; [.2E93.0020.0002][.2ECB.0020.0002] # -AABC AA83 ; [.2E93.0020.0002][.2ECC.0020.0002] # -AA84 ; [.2E94.0020.0002] # TAI VIET LETTER LOW KHHO -AAB5 AA84 ; [.2E94.0020.0002][.2EC5.0020.0002] # -AAB6 AA84 ; [.2E94.0020.0002][.2EC6.0020.0002] # -AAB9 AA84 ; [.2E94.0020.0002][.2EC9.0020.0002] # -AABB AA84 ; [.2E94.0020.0002][.2ECB.0020.0002] # -AABC AA84 ; [.2E94.0020.0002][.2ECC.0020.0002] # -AA85 ; [.2E95.0020.0002] # TAI VIET LETTER HIGH KHHO -AAB5 AA85 ; [.2E95.0020.0002][.2EC5.0020.0002] # -AAB6 AA85 ; [.2E95.0020.0002][.2EC6.0020.0002] # -AAB9 AA85 ; [.2E95.0020.0002][.2EC9.0020.0002] # -AABB AA85 ; [.2E95.0020.0002][.2ECB.0020.0002] # -AABC AA85 ; [.2E95.0020.0002][.2ECC.0020.0002] # -AA86 ; [.2E96.0020.0002] # TAI VIET LETTER LOW GO -AAB5 AA86 ; [.2E96.0020.0002][.2EC5.0020.0002] # -AAB6 AA86 ; [.2E96.0020.0002][.2EC6.0020.0002] # -AAB9 AA86 ; [.2E96.0020.0002][.2EC9.0020.0002] # -AABB AA86 ; [.2E96.0020.0002][.2ECB.0020.0002] # -AABC AA86 ; [.2E96.0020.0002][.2ECC.0020.0002] # -AA87 ; [.2E97.0020.0002] # TAI VIET LETTER HIGH GO -AAB5 AA87 ; [.2E97.0020.0002][.2EC5.0020.0002] # -AAB6 AA87 ; [.2E97.0020.0002][.2EC6.0020.0002] # -AAB9 AA87 ; [.2E97.0020.0002][.2EC9.0020.0002] # -AABB AA87 ; [.2E97.0020.0002][.2ECB.0020.0002] # -AABC AA87 ; [.2E97.0020.0002][.2ECC.0020.0002] # -AA88 ; [.2E98.0020.0002] # TAI VIET LETTER LOW NGO -AAB5 AA88 ; [.2E98.0020.0002][.2EC5.0020.0002] # -AAB6 AA88 ; [.2E98.0020.0002][.2EC6.0020.0002] # -AAB9 AA88 ; [.2E98.0020.0002][.2EC9.0020.0002] # -AABB AA88 ; [.2E98.0020.0002][.2ECB.0020.0002] # -AABC AA88 ; [.2E98.0020.0002][.2ECC.0020.0002] # -AA89 ; [.2E99.0020.0002] # TAI VIET LETTER HIGH NGO -AAB5 AA89 ; [.2E99.0020.0002][.2EC5.0020.0002] # -AAB6 AA89 ; [.2E99.0020.0002][.2EC6.0020.0002] # -AAB9 AA89 ; [.2E99.0020.0002][.2EC9.0020.0002] # -AABB AA89 ; [.2E99.0020.0002][.2ECB.0020.0002] # -AABC AA89 ; [.2E99.0020.0002][.2ECC.0020.0002] # -AA8A ; [.2E9A.0020.0002] # TAI VIET LETTER LOW CO -AAB5 AA8A ; [.2E9A.0020.0002][.2EC5.0020.0002] # -AAB6 AA8A ; [.2E9A.0020.0002][.2EC6.0020.0002] # -AAB9 AA8A ; [.2E9A.0020.0002][.2EC9.0020.0002] # -AABB AA8A ; [.2E9A.0020.0002][.2ECB.0020.0002] # -AABC AA8A ; [.2E9A.0020.0002][.2ECC.0020.0002] # -AA8B ; [.2E9B.0020.0002] # TAI VIET LETTER HIGH CO -AAB5 AA8B ; [.2E9B.0020.0002][.2EC5.0020.0002] # -AAB6 AA8B ; [.2E9B.0020.0002][.2EC6.0020.0002] # -AAB9 AA8B ; [.2E9B.0020.0002][.2EC9.0020.0002] # -AABB AA8B ; [.2E9B.0020.0002][.2ECB.0020.0002] # -AABC AA8B ; [.2E9B.0020.0002][.2ECC.0020.0002] # -AA8C ; [.2E9C.0020.0002] # TAI VIET LETTER LOW CHO -AAB5 AA8C ; [.2E9C.0020.0002][.2EC5.0020.0002] # -AAB6 AA8C ; [.2E9C.0020.0002][.2EC6.0020.0002] # -AAB9 AA8C ; [.2E9C.0020.0002][.2EC9.0020.0002] # -AABB AA8C ; [.2E9C.0020.0002][.2ECB.0020.0002] # -AABC AA8C ; [.2E9C.0020.0002][.2ECC.0020.0002] # -AA8D ; [.2E9D.0020.0002] # TAI VIET LETTER HIGH CHO -AAB5 AA8D ; [.2E9D.0020.0002][.2EC5.0020.0002] # -AAB6 AA8D ; [.2E9D.0020.0002][.2EC6.0020.0002] # -AAB9 AA8D ; [.2E9D.0020.0002][.2EC9.0020.0002] # -AABB AA8D ; [.2E9D.0020.0002][.2ECB.0020.0002] # -AABC AA8D ; [.2E9D.0020.0002][.2ECC.0020.0002] # -AA8E ; [.2E9E.0020.0002] # TAI VIET LETTER LOW SO -AAB5 AA8E ; [.2E9E.0020.0002][.2EC5.0020.0002] # -AAB6 AA8E ; [.2E9E.0020.0002][.2EC6.0020.0002] # -AAB9 AA8E ; [.2E9E.0020.0002][.2EC9.0020.0002] # -AABB AA8E ; [.2E9E.0020.0002][.2ECB.0020.0002] # -AABC AA8E ; [.2E9E.0020.0002][.2ECC.0020.0002] # -AA8F ; [.2E9F.0020.0002] # TAI VIET LETTER HIGH SO -AAB5 AA8F ; [.2E9F.0020.0002][.2EC5.0020.0002] # -AAB6 AA8F ; [.2E9F.0020.0002][.2EC6.0020.0002] # -AAB9 AA8F ; [.2E9F.0020.0002][.2EC9.0020.0002] # -AABB AA8F ; [.2E9F.0020.0002][.2ECB.0020.0002] # -AABC AA8F ; [.2E9F.0020.0002][.2ECC.0020.0002] # -AA90 ; [.2EA0.0020.0002] # TAI VIET LETTER LOW NYO -AAB5 AA90 ; [.2EA0.0020.0002][.2EC5.0020.0002] # -AAB6 AA90 ; [.2EA0.0020.0002][.2EC6.0020.0002] # -AAB9 AA90 ; [.2EA0.0020.0002][.2EC9.0020.0002] # -AABB AA90 ; [.2EA0.0020.0002][.2ECB.0020.0002] # -AABC AA90 ; [.2EA0.0020.0002][.2ECC.0020.0002] # -AA91 ; [.2EA1.0020.0002] # TAI VIET LETTER HIGH NYO -AAB5 AA91 ; [.2EA1.0020.0002][.2EC5.0020.0002] # -AAB6 AA91 ; [.2EA1.0020.0002][.2EC6.0020.0002] # -AAB9 AA91 ; [.2EA1.0020.0002][.2EC9.0020.0002] # -AABB AA91 ; [.2EA1.0020.0002][.2ECB.0020.0002] # -AABC AA91 ; [.2EA1.0020.0002][.2ECC.0020.0002] # -AA92 ; [.2EA2.0020.0002] # TAI VIET LETTER LOW DO -AAB5 AA92 ; [.2EA2.0020.0002][.2EC5.0020.0002] # -AAB6 AA92 ; [.2EA2.0020.0002][.2EC6.0020.0002] # -AAB9 AA92 ; [.2EA2.0020.0002][.2EC9.0020.0002] # -AABB AA92 ; [.2EA2.0020.0002][.2ECB.0020.0002] # -AABC AA92 ; [.2EA2.0020.0002][.2ECC.0020.0002] # -AA93 ; [.2EA3.0020.0002] # TAI VIET LETTER HIGH DO -AAB5 AA93 ; [.2EA3.0020.0002][.2EC5.0020.0002] # -AAB6 AA93 ; [.2EA3.0020.0002][.2EC6.0020.0002] # -AAB9 AA93 ; [.2EA3.0020.0002][.2EC9.0020.0002] # -AABB AA93 ; [.2EA3.0020.0002][.2ECB.0020.0002] # -AABC AA93 ; [.2EA3.0020.0002][.2ECC.0020.0002] # -AA94 ; [.2EA4.0020.0002] # TAI VIET LETTER LOW TO -AAB5 AA94 ; [.2EA4.0020.0002][.2EC5.0020.0002] # -AAB6 AA94 ; [.2EA4.0020.0002][.2EC6.0020.0002] # -AAB9 AA94 ; [.2EA4.0020.0002][.2EC9.0020.0002] # -AABB AA94 ; [.2EA4.0020.0002][.2ECB.0020.0002] # -AABC AA94 ; [.2EA4.0020.0002][.2ECC.0020.0002] # -AA95 ; [.2EA5.0020.0002] # TAI VIET LETTER HIGH TO -AAB5 AA95 ; [.2EA5.0020.0002][.2EC5.0020.0002] # -AAB6 AA95 ; [.2EA5.0020.0002][.2EC6.0020.0002] # -AAB9 AA95 ; [.2EA5.0020.0002][.2EC9.0020.0002] # -AABB AA95 ; [.2EA5.0020.0002][.2ECB.0020.0002] # -AABC AA95 ; [.2EA5.0020.0002][.2ECC.0020.0002] # -AA96 ; [.2EA6.0020.0002] # TAI VIET LETTER LOW THO -AAB5 AA96 ; [.2EA6.0020.0002][.2EC5.0020.0002] # -AAB6 AA96 ; [.2EA6.0020.0002][.2EC6.0020.0002] # -AAB9 AA96 ; [.2EA6.0020.0002][.2EC9.0020.0002] # -AABB AA96 ; [.2EA6.0020.0002][.2ECB.0020.0002] # -AABC AA96 ; [.2EA6.0020.0002][.2ECC.0020.0002] # -AA97 ; [.2EA7.0020.0002] # TAI VIET LETTER HIGH THO -AAB5 AA97 ; [.2EA7.0020.0002][.2EC5.0020.0002] # -AAB6 AA97 ; [.2EA7.0020.0002][.2EC6.0020.0002] # -AAB9 AA97 ; [.2EA7.0020.0002][.2EC9.0020.0002] # -AABB AA97 ; [.2EA7.0020.0002][.2ECB.0020.0002] # -AABC AA97 ; [.2EA7.0020.0002][.2ECC.0020.0002] # -AA98 ; [.2EA8.0020.0002] # TAI VIET LETTER LOW NO -AAB5 AA98 ; [.2EA8.0020.0002][.2EC5.0020.0002] # -AAB6 AA98 ; [.2EA8.0020.0002][.2EC6.0020.0002] # -AAB9 AA98 ; [.2EA8.0020.0002][.2EC9.0020.0002] # -AABB AA98 ; [.2EA8.0020.0002][.2ECB.0020.0002] # -AABC AA98 ; [.2EA8.0020.0002][.2ECC.0020.0002] # -AA99 ; [.2EA9.0020.0002] # TAI VIET LETTER HIGH NO -AAB5 AA99 ; [.2EA9.0020.0002][.2EC5.0020.0002] # -AAB6 AA99 ; [.2EA9.0020.0002][.2EC6.0020.0002] # -AAB9 AA99 ; [.2EA9.0020.0002][.2EC9.0020.0002] # -AABB AA99 ; [.2EA9.0020.0002][.2ECB.0020.0002] # -AABC AA99 ; [.2EA9.0020.0002][.2ECC.0020.0002] # -AA9A ; [.2EAA.0020.0002] # TAI VIET LETTER LOW BO -AAB5 AA9A ; [.2EAA.0020.0002][.2EC5.0020.0002] # -AAB6 AA9A ; [.2EAA.0020.0002][.2EC6.0020.0002] # -AAB9 AA9A ; [.2EAA.0020.0002][.2EC9.0020.0002] # -AABB AA9A ; [.2EAA.0020.0002][.2ECB.0020.0002] # -AABC AA9A ; [.2EAA.0020.0002][.2ECC.0020.0002] # -AA9B ; [.2EAB.0020.0002] # TAI VIET LETTER HIGH BO -AAB5 AA9B ; [.2EAB.0020.0002][.2EC5.0020.0002] # -AAB6 AA9B ; [.2EAB.0020.0002][.2EC6.0020.0002] # -AAB9 AA9B ; [.2EAB.0020.0002][.2EC9.0020.0002] # -AABB AA9B ; [.2EAB.0020.0002][.2ECB.0020.0002] # -AABC AA9B ; [.2EAB.0020.0002][.2ECC.0020.0002] # -AA9C ; [.2EAC.0020.0002] # TAI VIET LETTER LOW PO -AAB5 AA9C ; [.2EAC.0020.0002][.2EC5.0020.0002] # -AAB6 AA9C ; [.2EAC.0020.0002][.2EC6.0020.0002] # -AAB9 AA9C ; [.2EAC.0020.0002][.2EC9.0020.0002] # -AABB AA9C ; [.2EAC.0020.0002][.2ECB.0020.0002] # -AABC AA9C ; [.2EAC.0020.0002][.2ECC.0020.0002] # -AA9D ; [.2EAD.0020.0002] # TAI VIET LETTER HIGH PO -AAB5 AA9D ; [.2EAD.0020.0002][.2EC5.0020.0002] # -AAB6 AA9D ; [.2EAD.0020.0002][.2EC6.0020.0002] # -AAB9 AA9D ; [.2EAD.0020.0002][.2EC9.0020.0002] # -AABB AA9D ; [.2EAD.0020.0002][.2ECB.0020.0002] # -AABC AA9D ; [.2EAD.0020.0002][.2ECC.0020.0002] # -AA9E ; [.2EAE.0020.0002] # TAI VIET LETTER LOW PHO -AAB5 AA9E ; [.2EAE.0020.0002][.2EC5.0020.0002] # -AAB6 AA9E ; [.2EAE.0020.0002][.2EC6.0020.0002] # -AAB9 AA9E ; [.2EAE.0020.0002][.2EC9.0020.0002] # -AABB AA9E ; [.2EAE.0020.0002][.2ECB.0020.0002] # -AABC AA9E ; [.2EAE.0020.0002][.2ECC.0020.0002] # -AA9F ; [.2EAF.0020.0002] # TAI VIET LETTER HIGH PHO -AAB5 AA9F ; [.2EAF.0020.0002][.2EC5.0020.0002] # -AAB6 AA9F ; [.2EAF.0020.0002][.2EC6.0020.0002] # -AAB9 AA9F ; [.2EAF.0020.0002][.2EC9.0020.0002] # -AABB AA9F ; [.2EAF.0020.0002][.2ECB.0020.0002] # -AABC AA9F ; [.2EAF.0020.0002][.2ECC.0020.0002] # -AAA0 ; [.2EB0.0020.0002] # TAI VIET LETTER LOW FO -AAB5 AAA0 ; [.2EB0.0020.0002][.2EC5.0020.0002] # -AAB6 AAA0 ; [.2EB0.0020.0002][.2EC6.0020.0002] # -AAB9 AAA0 ; [.2EB0.0020.0002][.2EC9.0020.0002] # -AABB AAA0 ; [.2EB0.0020.0002][.2ECB.0020.0002] # -AABC AAA0 ; [.2EB0.0020.0002][.2ECC.0020.0002] # -AAA1 ; [.2EB1.0020.0002] # TAI VIET LETTER HIGH FO -AAB5 AAA1 ; [.2EB1.0020.0002][.2EC5.0020.0002] # -AAB6 AAA1 ; [.2EB1.0020.0002][.2EC6.0020.0002] # -AAB9 AAA1 ; [.2EB1.0020.0002][.2EC9.0020.0002] # -AABB AAA1 ; [.2EB1.0020.0002][.2ECB.0020.0002] # -AABC AAA1 ; [.2EB1.0020.0002][.2ECC.0020.0002] # -AAA2 ; [.2EB2.0020.0002] # TAI VIET LETTER LOW MO -AAB5 AAA2 ; [.2EB2.0020.0002][.2EC5.0020.0002] # -AAB6 AAA2 ; [.2EB2.0020.0002][.2EC6.0020.0002] # -AAB9 AAA2 ; [.2EB2.0020.0002][.2EC9.0020.0002] # -AABB AAA2 ; [.2EB2.0020.0002][.2ECB.0020.0002] # -AABC AAA2 ; [.2EB2.0020.0002][.2ECC.0020.0002] # -AAA3 ; [.2EB3.0020.0002] # TAI VIET LETTER HIGH MO -AAB5 AAA3 ; [.2EB3.0020.0002][.2EC5.0020.0002] # -AAB6 AAA3 ; [.2EB3.0020.0002][.2EC6.0020.0002] # -AAB9 AAA3 ; [.2EB3.0020.0002][.2EC9.0020.0002] # -AABB AAA3 ; [.2EB3.0020.0002][.2ECB.0020.0002] # -AABC AAA3 ; [.2EB3.0020.0002][.2ECC.0020.0002] # -AAA4 ; [.2EB4.0020.0002] # TAI VIET LETTER LOW YO -AAB5 AAA4 ; [.2EB4.0020.0002][.2EC5.0020.0002] # -AAB6 AAA4 ; [.2EB4.0020.0002][.2EC6.0020.0002] # -AAB9 AAA4 ; [.2EB4.0020.0002][.2EC9.0020.0002] # -AABB AAA4 ; [.2EB4.0020.0002][.2ECB.0020.0002] # -AABC AAA4 ; [.2EB4.0020.0002][.2ECC.0020.0002] # -AAA5 ; [.2EB5.0020.0002] # TAI VIET LETTER HIGH YO -AAB5 AAA5 ; [.2EB5.0020.0002][.2EC5.0020.0002] # -AAB6 AAA5 ; [.2EB5.0020.0002][.2EC6.0020.0002] # -AAB9 AAA5 ; [.2EB5.0020.0002][.2EC9.0020.0002] # -AABB AAA5 ; [.2EB5.0020.0002][.2ECB.0020.0002] # -AABC AAA5 ; [.2EB5.0020.0002][.2ECC.0020.0002] # -AAA6 ; [.2EB6.0020.0002] # TAI VIET LETTER LOW RO -AAB5 AAA6 ; [.2EB6.0020.0002][.2EC5.0020.0002] # -AAB6 AAA6 ; [.2EB6.0020.0002][.2EC6.0020.0002] # -AAB9 AAA6 ; [.2EB6.0020.0002][.2EC9.0020.0002] # -AABB AAA6 ; [.2EB6.0020.0002][.2ECB.0020.0002] # -AABC AAA6 ; [.2EB6.0020.0002][.2ECC.0020.0002] # -AAA7 ; [.2EB7.0020.0002] # TAI VIET LETTER HIGH RO -AAB5 AAA7 ; [.2EB7.0020.0002][.2EC5.0020.0002] # -AAB6 AAA7 ; [.2EB7.0020.0002][.2EC6.0020.0002] # -AAB9 AAA7 ; [.2EB7.0020.0002][.2EC9.0020.0002] # -AABB AAA7 ; [.2EB7.0020.0002][.2ECB.0020.0002] # -AABC AAA7 ; [.2EB7.0020.0002][.2ECC.0020.0002] # -AAA8 ; [.2EB8.0020.0002] # TAI VIET LETTER LOW LO -AAB5 AAA8 ; [.2EB8.0020.0002][.2EC5.0020.0002] # -AAB6 AAA8 ; [.2EB8.0020.0002][.2EC6.0020.0002] # -AAB9 AAA8 ; [.2EB8.0020.0002][.2EC9.0020.0002] # -AABB AAA8 ; [.2EB8.0020.0002][.2ECB.0020.0002] # -AABC AAA8 ; [.2EB8.0020.0002][.2ECC.0020.0002] # -AAA9 ; [.2EB9.0020.0002] # TAI VIET LETTER HIGH LO -AAB5 AAA9 ; [.2EB9.0020.0002][.2EC5.0020.0002] # -AAB6 AAA9 ; [.2EB9.0020.0002][.2EC6.0020.0002] # -AAB9 AAA9 ; [.2EB9.0020.0002][.2EC9.0020.0002] # -AABB AAA9 ; [.2EB9.0020.0002][.2ECB.0020.0002] # -AABC AAA9 ; [.2EB9.0020.0002][.2ECC.0020.0002] # -AAAA ; [.2EBA.0020.0002] # TAI VIET LETTER LOW VO -AAB5 AAAA ; [.2EBA.0020.0002][.2EC5.0020.0002] # -AAB6 AAAA ; [.2EBA.0020.0002][.2EC6.0020.0002] # -AAB9 AAAA ; [.2EBA.0020.0002][.2EC9.0020.0002] # -AABB AAAA ; [.2EBA.0020.0002][.2ECB.0020.0002] # -AABC AAAA ; [.2EBA.0020.0002][.2ECC.0020.0002] # -AAAB ; [.2EBB.0020.0002] # TAI VIET LETTER HIGH VO -AAB5 AAAB ; [.2EBB.0020.0002][.2EC5.0020.0002] # -AAB6 AAAB ; [.2EBB.0020.0002][.2EC6.0020.0002] # -AAB9 AAAB ; [.2EBB.0020.0002][.2EC9.0020.0002] # -AABB AAAB ; [.2EBB.0020.0002][.2ECB.0020.0002] # -AABC AAAB ; [.2EBB.0020.0002][.2ECC.0020.0002] # -AAAC ; [.2EBC.0020.0002] # TAI VIET LETTER LOW HO -AAB5 AAAC ; [.2EBC.0020.0002][.2EC5.0020.0002] # -AAB6 AAAC ; [.2EBC.0020.0002][.2EC6.0020.0002] # -AAB9 AAAC ; [.2EBC.0020.0002][.2EC9.0020.0002] # -AABB AAAC ; [.2EBC.0020.0002][.2ECB.0020.0002] # -AABC AAAC ; [.2EBC.0020.0002][.2ECC.0020.0002] # -AAAD ; [.2EBD.0020.0002] # TAI VIET LETTER HIGH HO -AAB5 AAAD ; [.2EBD.0020.0002][.2EC5.0020.0002] # -AAB6 AAAD ; [.2EBD.0020.0002][.2EC6.0020.0002] # -AAB9 AAAD ; [.2EBD.0020.0002][.2EC9.0020.0002] # -AABB AAAD ; [.2EBD.0020.0002][.2ECB.0020.0002] # -AABC AAAD ; [.2EBD.0020.0002][.2ECC.0020.0002] # -AAAE ; [.2EBE.0020.0002] # TAI VIET LETTER LOW O -AAB5 AAAE ; [.2EBE.0020.0002][.2EC5.0020.0002] # -AAB6 AAAE ; [.2EBE.0020.0002][.2EC6.0020.0002] # -AAB9 AAAE ; [.2EBE.0020.0002][.2EC9.0020.0002] # -AABB AAAE ; [.2EBE.0020.0002][.2ECB.0020.0002] # -AABC AAAE ; [.2EBE.0020.0002][.2ECC.0020.0002] # -AAAF ; [.2EBF.0020.0002] # TAI VIET LETTER HIGH O -AAB5 AAAF ; [.2EBF.0020.0002][.2EC5.0020.0002] # -AAB6 AAAF ; [.2EBF.0020.0002][.2EC6.0020.0002] # -AAB9 AAAF ; [.2EBF.0020.0002][.2EC9.0020.0002] # -AABB AAAF ; [.2EBF.0020.0002][.2ECB.0020.0002] # -AABC AAAF ; [.2EBF.0020.0002][.2ECC.0020.0002] # -AAB0 ; [.2EC0.0020.0002] # TAI VIET MAI KANG -AAB1 ; [.2EC1.0020.0002] # TAI VIET VOWEL AA -AAB2 ; [.2EC2.0020.0002] # TAI VIET VOWEL I -AAB3 ; [.2EC3.0020.0002] # TAI VIET VOWEL UE -AAB4 ; [.2EC4.0020.0002] # TAI VIET VOWEL U -AAB5 ; [.2EC5.0020.0002] # TAI VIET VOWEL E -AAB6 ; [.2EC6.0020.0002] # TAI VIET VOWEL O -AAB7 ; [.2EC7.0020.0002] # TAI VIET MAI KHIT -AAB8 ; [.2EC8.0020.0002] # TAI VIET VOWEL IA -AAB9 ; [.2EC9.0020.0002] # TAI VIET VOWEL UEA -AABA ; [.2ECA.0020.0002] # TAI VIET VOWEL UA -AABB ; [.2ECB.0020.0002] # TAI VIET VOWEL AUE -AABC ; [.2ECC.0020.0002] # TAI VIET VOWEL AY -AABD ; [.2ECD.0020.0002] # TAI VIET VOWEL AN -AABE ; [.2ECE.0020.0002] # TAI VIET VOWEL AM -AAC0 ; [.2ECF.0020.0002] # TAI VIET TONE MAI NUENG -AAC2 ; [.2ED0.0020.0002] # TAI VIET TONE MAI SONG -AADB ; [.2ED1.0020.0002] # TAI VIET SYMBOL KON -AADC ; [.2ED2.0020.0002] # TAI VIET SYMBOL NUENG -0F40 ; [.2ED3.0020.0002] # TIBETAN LETTER KA -0F69 ; [.2ED3.0020.0002][.2F14.0020.0002] # TIBETAN LETTER KSSA -0F90 ; [.2ED4.0020.0002] # TIBETAN SUBJOINED LETTER KA -0FB9 ; [.2ED4.0020.0002][.2F14.0020.0002] # TIBETAN SUBJOINED LETTER KSSA -0F6B ; [.2ED5.0020.0002] # TIBETAN LETTER KKA -0F41 ; [.2ED6.0020.0002] # TIBETAN LETTER KHA -0F91 ; [.2ED7.0020.0002] # TIBETAN SUBJOINED LETTER KHA -0F42 ; [.2ED8.0020.0002] # TIBETAN LETTER GA -0F43 ; [.2ED8.0020.0002][.2F18.0020.0002] # TIBETAN LETTER GHA -0F92 ; [.2ED9.0020.0002] # TIBETAN SUBJOINED LETTER GA -0F93 ; [.2ED9.0020.0002][.2F18.0020.0002] # TIBETAN SUBJOINED LETTER GHA -0F44 ; [.2EDA.0020.0002] # TIBETAN LETTER NGA -0F94 ; [.2EDB.0020.0002] # TIBETAN SUBJOINED LETTER NGA -0F45 ; [.2EDC.0020.0002] # TIBETAN LETTER CA -0F95 ; [.2EDD.0020.0002] # TIBETAN SUBJOINED LETTER CA -0F46 ; [.2EDE.0020.0002] # TIBETAN LETTER CHA -0F96 ; [.2EDF.0020.0002] # TIBETAN SUBJOINED LETTER CHA -0F47 ; [.2EE0.0020.0002] # TIBETAN LETTER JA -0F97 ; [.2EE1.0020.0002] # TIBETAN SUBJOINED LETTER JA -0F49 ; [.2EE2.0020.0002] # TIBETAN LETTER NYA -0F99 ; [.2EE3.0020.0002] # TIBETAN SUBJOINED LETTER NYA -0F4A ; [.2EE4.0020.0002] # TIBETAN LETTER TTA -0F9A ; [.2EE5.0020.0002] # TIBETAN SUBJOINED LETTER TTA -0F4B ; [.2EE6.0020.0002] # TIBETAN LETTER TTHA -0F9B ; [.2EE7.0020.0002] # TIBETAN SUBJOINED LETTER TTHA -0F4C ; [.2EE8.0020.0002] # TIBETAN LETTER DDA -0F4D ; [.2EE8.0020.0002][.2F18.0020.0002] # TIBETAN LETTER DDHA -0F9C ; [.2EE9.0020.0002] # TIBETAN SUBJOINED LETTER DDA -0F9D ; [.2EE9.0020.0002][.2F18.0020.0002] # TIBETAN SUBJOINED LETTER DDHA -0F4E ; [.2EEA.0020.0002] # TIBETAN LETTER NNA -0F9E ; [.2EEB.0020.0002] # TIBETAN SUBJOINED LETTER NNA -0F4F ; [.2EEC.0020.0002] # TIBETAN LETTER TA -0F9F ; [.2EED.0020.0002] # TIBETAN SUBJOINED LETTER TA -0F50 ; [.2EEE.0020.0002] # TIBETAN LETTER THA -0FA0 ; [.2EEF.0020.0002] # TIBETAN SUBJOINED LETTER THA -0F51 ; [.2EF0.0020.0002] # TIBETAN LETTER DA -0F52 ; [.2EF0.0020.0002][.2F18.0020.0002] # TIBETAN LETTER DHA -0FA1 ; [.2EF1.0020.0002] # TIBETAN SUBJOINED LETTER DA -0FA2 ; [.2EF1.0020.0002][.2F18.0020.0002] # TIBETAN SUBJOINED LETTER DHA -0F53 ; [.2EF2.0020.0002] # TIBETAN LETTER NA -0FA3 ; [.2EF3.0020.0002] # TIBETAN SUBJOINED LETTER NA -0F54 ; [.2EF4.0020.0002] # TIBETAN LETTER PA -0FA4 ; [.2EF5.0020.0002] # TIBETAN SUBJOINED LETTER PA -0F55 ; [.2EF6.0020.0002] # TIBETAN LETTER PHA -0FA5 ; [.2EF7.0020.0002] # TIBETAN SUBJOINED LETTER PHA -0F56 ; [.2EF8.0020.0002] # TIBETAN LETTER BA -0F57 ; [.2EF8.0020.0002][.2F18.0020.0002] # TIBETAN LETTER BHA -0FA6 ; [.2EF9.0020.0002] # TIBETAN SUBJOINED LETTER BA -0FA7 ; [.2EF9.0020.0002][.2F18.0020.0002] # TIBETAN SUBJOINED LETTER BHA -0F58 ; [.2EFA.0020.0002] # TIBETAN LETTER MA -0FA8 ; [.2EFB.0020.0002] # TIBETAN SUBJOINED LETTER MA -0F59 ; [.2EFC.0020.0002] # TIBETAN LETTER TSA -0FA9 ; [.2EFD.0020.0002] # TIBETAN SUBJOINED LETTER TSA -0F5A ; [.2EFE.0020.0002] # TIBETAN LETTER TSHA -0FAA ; [.2EFF.0020.0002] # TIBETAN SUBJOINED LETTER TSHA -0F5B ; [.2F00.0020.0002] # TIBETAN LETTER DZA -0F5C ; [.2F00.0020.0002][.2F18.0020.0002] # TIBETAN LETTER DZHA -0FAB ; [.2F01.0020.0002] # TIBETAN SUBJOINED LETTER DZA -0FAC ; [.2F01.0020.0002][.2F18.0020.0002] # TIBETAN SUBJOINED LETTER DZHA -0F5D ; [.2F02.0020.0002] # TIBETAN LETTER WA -0FAD ; [.2F03.0020.0002] # TIBETAN SUBJOINED LETTER WA -0FBA ; [.2F03.0020.0004][.0000.0112.0004] # TIBETAN SUBJOINED LETTER FIXED-FORM WA -0F5E ; [.2F04.0020.0002] # TIBETAN LETTER ZHA -0FAE ; [.2F05.0020.0002] # TIBETAN SUBJOINED LETTER ZHA -0F5F ; [.2F06.0020.0002] # TIBETAN LETTER ZA -0FAF ; [.2F07.0020.0002] # TIBETAN SUBJOINED LETTER ZA -0F60 ; [.2F08.0020.0002] # TIBETAN LETTER -A -0FB0 ; [.2F09.0020.0002] # TIBETAN SUBJOINED LETTER -A -0F61 ; [.2F0A.0020.0002] # TIBETAN LETTER YA -0FB1 ; [.2F0B.0020.0002] # TIBETAN SUBJOINED LETTER YA -0FBB ; [.2F0B.0020.0004][.0000.0112.0004] # TIBETAN SUBJOINED LETTER FIXED-FORM YA -0F62 ; [.2F0C.0020.0002] # TIBETAN LETTER RA -0F6A ; [.2F0C.0020.0004][.0000.0112.0004] # TIBETAN LETTER FIXED-FORM RA -0FB2 ; [.2F0D.0020.0002] # TIBETAN SUBJOINED LETTER RA -0FBC ; [.2F0D.0020.0004][.0000.0112.0004] # TIBETAN SUBJOINED LETTER FIXED-FORM RA -0F6C ; [.2F0E.0020.0002] # TIBETAN LETTER RRA -0F63 ; [.2F0F.0020.0002] # TIBETAN LETTER LA -0FB3 ; [.2F10.0020.0002] # TIBETAN SUBJOINED LETTER LA -0F64 ; [.2F11.0020.0002] # TIBETAN LETTER SHA -0FB4 ; [.2F12.0020.0002] # TIBETAN SUBJOINED LETTER SHA -0F65 ; [.2F13.0020.0002] # TIBETAN LETTER SSA -0FB5 ; [.2F14.0020.0002] # TIBETAN SUBJOINED LETTER SSA -0F66 ; [.2F15.0020.0002] # TIBETAN LETTER SA -0FB6 ; [.2F16.0020.0002] # TIBETAN SUBJOINED LETTER SA -0F67 ; [.2F17.0020.0002] # TIBETAN LETTER HA -0FB7 ; [.2F18.0020.0002] # TIBETAN SUBJOINED LETTER HA -0F68 ; [.2F19.0020.0002] # TIBETAN LETTER A -0F00 ; [.2F19.0020.0004][.2F30.0020.0004][.0000.00C4.0004] # TIBETAN SYLLABLE OM -0FB8 ; [.2F1A.0020.0002] # TIBETAN SUBJOINED LETTER A -0F88 ; [.2F1B.0020.0002] # TIBETAN SIGN LCE TSA CAN -0F8D ; [.2F1C.0020.0002] # TIBETAN SUBJOINED SIGN LCE TSA CAN -0F89 ; [.2F1D.0020.0002] # TIBETAN SIGN MCHU CAN -0F8E ; [.2F1E.0020.0002] # TIBETAN SUBJOINED SIGN MCHU CAN -0F8C ; [.2F1F.0020.0002] # TIBETAN SIGN INVERTED MCHU CAN -0F8F ; [.2F20.0020.0002] # TIBETAN SUBJOINED SIGN INVERTED MCHU CAN -0F8A ; [.2F21.0020.0002] # TIBETAN SIGN GRU CAN RGYINGS -0F8B ; [.2F22.0020.0002] # TIBETAN SIGN GRU MED RGYINGS -0F71 ; [.2F23.0020.0002] # TIBETAN VOWEL SIGN AA -0F72 ; [.2F24.0020.0002] # TIBETAN VOWEL SIGN I -0F73 ; [.2F25.0020.0002] # TIBETAN VOWEL SIGN II -0F71 0F72 ; [.2F25.0020.0002] # TIBETAN VOWEL SIGN II -0F80 ; [.2F26.0020.0002] # TIBETAN VOWEL SIGN REVERSED I -0F81 ; [.2F27.0020.0002] # TIBETAN VOWEL SIGN REVERSED II -0F71 0F80 ; [.2F27.0020.0002] # TIBETAN VOWEL SIGN REVERSED II -0F74 ; [.2F28.0020.0002] # TIBETAN VOWEL SIGN U -0F75 ; [.2F29.0020.0002] # TIBETAN VOWEL SIGN UU -0F71 0F74 ; [.2F29.0020.0002] # TIBETAN VOWEL SIGN UU -0F76 ; [.2F2A.0020.0002] # TIBETAN VOWEL SIGN VOCALIC R -0FB2 0F80 ; [.2F2A.0020.0002] # TIBETAN VOWEL SIGN VOCALIC R -0F77 ; [.2F2B.0020.0002] # TIBETAN VOWEL SIGN VOCALIC RR -0FB2 0F71 0F80 ; [.2F2B.0020.0002] # TIBETAN VOWEL SIGN VOCALIC RR -0FB2 0F81 ; [.2F2B.0020.0002] # TIBETAN VOWEL SIGN VOCALIC RR -0F78 ; [.2F2C.0020.0002] # TIBETAN VOWEL SIGN VOCALIC L -0FB3 0F80 ; [.2F2C.0020.0002] # TIBETAN VOWEL SIGN VOCALIC L -0F79 ; [.2F2D.0020.0002] # TIBETAN VOWEL SIGN VOCALIC LL -0FB3 0F71 0F80 ; [.2F2D.0020.0002] # TIBETAN VOWEL SIGN VOCALIC LL -0FB3 0F81 ; [.2F2D.0020.0002] # TIBETAN VOWEL SIGN VOCALIC LL -0F7A ; [.2F2E.0020.0002] # TIBETAN VOWEL SIGN E -0F7B ; [.2F2F.0020.0002] # TIBETAN VOWEL SIGN EE -0F7C ; [.2F30.0020.0002] # TIBETAN VOWEL SIGN O -0F7D ; [.2F31.0020.0002] # TIBETAN VOWEL SIGN OO -0F84 ; [.2F32.0020.0002] # TIBETAN MARK HALANTA -11A0B ; [.2F33.0020.0002] # ZANABAZAR SQUARE LETTER KA -11A32 ; [.2F34.0020.0002] # ZANABAZAR SQUARE LETTER KSSA -11A0C ; [.2F35.0020.0002] # ZANABAZAR SQUARE LETTER KHA -11A0D ; [.2F36.0020.0002] # ZANABAZAR SQUARE LETTER GA -11A0E ; [.2F37.0020.0002] # ZANABAZAR SQUARE LETTER GHA -11A0F ; [.2F38.0020.0002] # ZANABAZAR SQUARE LETTER NGA -11A10 ; [.2F39.0020.0002] # ZANABAZAR SQUARE LETTER CA -11A11 ; [.2F3A.0020.0002] # ZANABAZAR SQUARE LETTER CHA -11A12 ; [.2F3B.0020.0002] # ZANABAZAR SQUARE LETTER JA -11A13 ; [.2F3C.0020.0002] # ZANABAZAR SQUARE LETTER NYA -11A14 ; [.2F3D.0020.0002] # ZANABAZAR SQUARE LETTER TTA -11A15 ; [.2F3E.0020.0002] # ZANABAZAR SQUARE LETTER TTHA -11A16 ; [.2F3F.0020.0002] # ZANABAZAR SQUARE LETTER DDA -11A17 ; [.2F40.0020.0002] # ZANABAZAR SQUARE LETTER DDHA -11A18 ; [.2F41.0020.0002] # ZANABAZAR SQUARE LETTER NNA -11A19 ; [.2F42.0020.0002] # ZANABAZAR SQUARE LETTER TA -11A1A ; [.2F43.0020.0002] # ZANABAZAR SQUARE LETTER THA -11A1B ; [.2F44.0020.0002] # ZANABAZAR SQUARE LETTER DA -11A1C ; [.2F45.0020.0002] # ZANABAZAR SQUARE LETTER DHA -11A1D ; [.2F46.0020.0002] # ZANABAZAR SQUARE LETTER NA -11A1E ; [.2F47.0020.0002] # ZANABAZAR SQUARE LETTER PA -11A1F ; [.2F48.0020.0002] # ZANABAZAR SQUARE LETTER PHA -11A20 ; [.2F49.0020.0002] # ZANABAZAR SQUARE LETTER BA -11A21 ; [.2F4A.0020.0002] # ZANABAZAR SQUARE LETTER BHA -11A22 ; [.2F4B.0020.0002] # ZANABAZAR SQUARE LETTER MA -11A23 ; [.2F4C.0020.0002] # ZANABAZAR SQUARE LETTER TSA -11A24 ; [.2F4D.0020.0002] # ZANABAZAR SQUARE LETTER TSHA -11A25 ; [.2F4E.0020.0002] # ZANABAZAR SQUARE LETTER DZA -11A26 ; [.2F4F.0020.0002] # ZANABAZAR SQUARE LETTER DZHA -11A27 ; [.2F50.0020.0002] # ZANABAZAR SQUARE LETTER ZHA -11A28 ; [.2F51.0020.0002] # ZANABAZAR SQUARE LETTER ZA -11A29 ; [.2F52.0020.0002] # ZANABAZAR SQUARE LETTER -A -11A2A ; [.2F53.0020.0002] # ZANABAZAR SQUARE LETTER YA -11A3B ; [.2F53.0020.0019] # ZANABAZAR SQUARE CLUSTER-FINAL LETTER YA -11A2B ; [.2F54.0020.0002] # ZANABAZAR SQUARE LETTER RA -11A3A ; [.2F54.0020.0017] # ZANABAZAR SQUARE CLUSTER-INITIAL LETTER RA -11A3C ; [.2F54.0020.0019] # ZANABAZAR SQUARE CLUSTER-FINAL LETTER RA -11A2C ; [.2F55.0020.0002] # ZANABAZAR SQUARE LETTER LA -11A3D ; [.2F55.0020.0019] # ZANABAZAR SQUARE CLUSTER-FINAL LETTER LA -11A2D ; [.2F56.0020.0002] # ZANABAZAR SQUARE LETTER VA -11A3E ; [.2F56.0020.0019] # ZANABAZAR SQUARE CLUSTER-FINAL LETTER VA -11A2E ; [.2F57.0020.0002] # ZANABAZAR SQUARE LETTER SHA -11A2F ; [.2F58.0020.0002] # ZANABAZAR SQUARE LETTER SSA -11A30 ; [.2F59.0020.0002] # ZANABAZAR SQUARE LETTER SA -11A31 ; [.2F5A.0020.0002] # ZANABAZAR SQUARE LETTER HA -11A00 ; [.2F5B.0020.0002] # ZANABAZAR SQUARE LETTER A -11A01 ; [.2F5C.0020.0002] # ZANABAZAR SQUARE VOWEL SIGN I -11A02 ; [.2F5D.0020.0002] # ZANABAZAR SQUARE VOWEL SIGN UE -11A03 ; [.2F5E.0020.0002] # ZANABAZAR SQUARE VOWEL SIGN U -11A04 ; [.2F5F.0020.0002] # ZANABAZAR SQUARE VOWEL SIGN E -11A05 ; [.2F60.0020.0002] # ZANABAZAR SQUARE VOWEL SIGN OE -11A06 ; [.2F61.0020.0002] # ZANABAZAR SQUARE VOWEL SIGN O -11A07 ; [.2F62.0020.0002] # ZANABAZAR SQUARE VOWEL SIGN AI -11A08 ; [.2F63.0020.0002] # ZANABAZAR SQUARE VOWEL SIGN AU -11A09 ; [.2F64.0020.0002] # ZANABAZAR SQUARE VOWEL SIGN REVERSED I -11A0A ; [.2F65.0020.0002] # ZANABAZAR SQUARE VOWEL LENGTH MARK -11A34 ; [.2F66.0020.0002] # ZANABAZAR SQUARE SIGN VIRAMA -11A47 ; [.2F67.0020.0002] # ZANABAZAR SQUARE SUBJOINER -11A50 ; [.2F68.0020.0002] # SOYOMBO LETTER A -11A51 ; [.2F69.0020.0002] # SOYOMBO VOWEL SIGN I -11A52 ; [.2F6A.0020.0002] # SOYOMBO VOWEL SIGN UE -11A53 ; [.2F6B.0020.0002] # SOYOMBO VOWEL SIGN U -11A59 ; [.2F6C.0020.0002] # SOYOMBO VOWEL SIGN VOCALIC R -11A5A ; [.2F6D.0020.0002] # SOYOMBO VOWEL SIGN VOCALIC L -11A54 ; [.2F6E.0020.0002] # SOYOMBO VOWEL SIGN E -11A56 ; [.2F6F.0020.0002] # SOYOMBO VOWEL SIGN OE -11A55 ; [.2F70.0020.0002] # SOYOMBO VOWEL SIGN O -11A57 ; [.2F71.0020.0002] # SOYOMBO VOWEL SIGN AI -11A58 ; [.2F72.0020.0002] # SOYOMBO VOWEL SIGN AU -11A5B ; [.2F73.0020.0002] # SOYOMBO VOWEL LENGTH MARK -11A5C ; [.2F74.0020.0002] # SOYOMBO LETTER KA -11A8A ; [.2F74.0020.0019] # SOYOMBO FINAL CONSONANT SIGN G -11A83 ; [.2F75.0020.0002] # SOYOMBO LETTER KSSA -11A5D ; [.2F76.0020.0002] # SOYOMBO LETTER KHA -11A8B ; [.2F76.0020.0019] # SOYOMBO FINAL CONSONANT SIGN K -11A5E ; [.2F77.0020.0002] # SOYOMBO LETTER GA -11A5F ; [.2F78.0020.0002] # SOYOMBO LETTER GHA -11A60 ; [.2F79.0020.0002] # SOYOMBO LETTER NGA -11A8C ; [.2F79.0020.0019] # SOYOMBO FINAL CONSONANT SIGN NG -11A61 ; [.2F7A.0020.0002] # SOYOMBO LETTER CA -11A62 ; [.2F7B.0020.0002] # SOYOMBO LETTER CHA -11A63 ; [.2F7C.0020.0002] # SOYOMBO LETTER JA -11A64 ; [.2F7D.0020.0002] # SOYOMBO LETTER JHA -11A65 ; [.2F7E.0020.0002] # SOYOMBO LETTER NYA -11A66 ; [.2F7F.0020.0002] # SOYOMBO LETTER TTA -11A67 ; [.2F80.0020.0002] # SOYOMBO LETTER TTHA -11A68 ; [.2F81.0020.0002] # SOYOMBO LETTER DDA -11A69 ; [.2F82.0020.0002] # SOYOMBO LETTER DDHA -11A6A ; [.2F83.0020.0002] # SOYOMBO LETTER NNA -11A6B ; [.2F84.0020.0002] # SOYOMBO LETTER TA -11A8D ; [.2F84.0020.0019] # SOYOMBO FINAL CONSONANT SIGN D -11A6C ; [.2F85.0020.0002] # SOYOMBO LETTER THA -11A6D ; [.2F86.0020.0002] # SOYOMBO LETTER DA -11A6E ; [.2F87.0020.0002] # SOYOMBO LETTER DHA -11A6F ; [.2F88.0020.0002] # SOYOMBO LETTER NA -11A8E ; [.2F88.0020.0019] # SOYOMBO FINAL CONSONANT SIGN N -11A70 ; [.2F89.0020.0002] # SOYOMBO LETTER PA -11A8F ; [.2F89.0020.0019] # SOYOMBO FINAL CONSONANT SIGN B -11A71 ; [.2F8A.0020.0002] # SOYOMBO LETTER PHA -11A72 ; [.2F8B.0020.0002] # SOYOMBO LETTER BA -11A73 ; [.2F8C.0020.0002] # SOYOMBO LETTER BHA -11A74 ; [.2F8D.0020.0002] # SOYOMBO LETTER MA -11A90 ; [.2F8D.0020.0019] # SOYOMBO FINAL CONSONANT SIGN M -11A75 ; [.2F8E.0020.0002] # SOYOMBO LETTER TSA -11A76 ; [.2F8F.0020.0002] # SOYOMBO LETTER TSHA -11A77 ; [.2F90.0020.0002] # SOYOMBO LETTER DZA -11A78 ; [.2F91.0020.0002] # SOYOMBO LETTER ZHA -11A79 ; [.2F92.0020.0002] # SOYOMBO LETTER ZA -11A7A ; [.2F93.0020.0002] # SOYOMBO LETTER -A -11A95 ; [.2F93.0020.0019] # SOYOMBO FINAL CONSONANT SIGN -A -11A7B ; [.2F94.0020.0002] # SOYOMBO LETTER YA -11A7C ; [.2F95.0020.0002] # SOYOMBO LETTER RA -11A86 ; [.2F95.0020.0017] # SOYOMBO CLUSTER-INITIAL LETTER RA -11A91 ; [.2F95.0020.0019] # SOYOMBO FINAL CONSONANT SIGN R -11A7D ; [.2F96.0020.0002] # SOYOMBO LETTER LA -11A87 ; [.2F96.0020.0017] # SOYOMBO CLUSTER-INITIAL LETTER LA -11A92 ; [.2F96.0020.0019] # SOYOMBO FINAL CONSONANT SIGN L -11A7E ; [.2F97.0020.0002] # SOYOMBO LETTER VA -11A7F ; [.2F98.0020.0002] # SOYOMBO LETTER SHA -11A88 ; [.2F98.0020.0017] # SOYOMBO CLUSTER-INITIAL LETTER SHA -11A93 ; [.2F98.0020.0019] # SOYOMBO FINAL CONSONANT SIGN SH -11A80 ; [.2F99.0020.0002] # SOYOMBO LETTER SSA -11A81 ; [.2F9A.0020.0002] # SOYOMBO LETTER SA -11A89 ; [.2F9A.0020.0017] # SOYOMBO CLUSTER-INITIAL LETTER SA -11A94 ; [.2F9A.0020.0019] # SOYOMBO FINAL CONSONANT SIGN S -11A82 ; [.2F9B.0020.0002] # SOYOMBO LETTER HA -11A99 ; [.2F9C.0020.0002] # SOYOMBO SUBJOINER -11C72 ; [.2F9D.0020.0002] # MARCHEN LETTER KA -11C92 ; [.2F9E.0020.0002] # MARCHEN SUBJOINED LETTER KA -11C73 ; [.2F9F.0020.0002] # MARCHEN LETTER KHA -11C93 ; [.2FA0.0020.0002] # MARCHEN SUBJOINED LETTER KHA -11C74 ; [.2FA1.0020.0002] # MARCHEN LETTER GA -11C94 ; [.2FA2.0020.0002] # MARCHEN SUBJOINED LETTER GA -11C75 ; [.2FA3.0020.0002] # MARCHEN LETTER NGA -11C95 ; [.2FA4.0020.0002] # MARCHEN SUBJOINED LETTER NGA -11C76 ; [.2FA5.0020.0002] # MARCHEN LETTER CA -11C96 ; [.2FA6.0020.0002] # MARCHEN SUBJOINED LETTER CA -11C77 ; [.2FA7.0020.0002] # MARCHEN LETTER CHA -11C97 ; [.2FA8.0020.0002] # MARCHEN SUBJOINED LETTER CHA -11C78 ; [.2FA9.0020.0002] # MARCHEN LETTER JA -11C98 ; [.2FAA.0020.0002] # MARCHEN SUBJOINED LETTER JA -11C79 ; [.2FAB.0020.0002] # MARCHEN LETTER NYA -11C99 ; [.2FAC.0020.0002] # MARCHEN SUBJOINED LETTER NYA -11C7A ; [.2FAD.0020.0002] # MARCHEN LETTER TA -11C9A ; [.2FAE.0020.0002] # MARCHEN SUBJOINED LETTER TA -11C7B ; [.2FAF.0020.0002] # MARCHEN LETTER THA -11C9B ; [.2FB0.0020.0002] # MARCHEN SUBJOINED LETTER THA -11C7C ; [.2FB1.0020.0002] # MARCHEN LETTER DA -11C9C ; [.2FB2.0020.0002] # MARCHEN SUBJOINED LETTER DA -11C7D ; [.2FB3.0020.0002] # MARCHEN LETTER NA -11C9D ; [.2FB4.0020.0002] # MARCHEN SUBJOINED LETTER NA -11C7E ; [.2FB5.0020.0002] # MARCHEN LETTER PA -11C9E ; [.2FB6.0020.0002] # MARCHEN SUBJOINED LETTER PA -11C7F ; [.2FB7.0020.0002] # MARCHEN LETTER PHA -11C9F ; [.2FB8.0020.0002] # MARCHEN SUBJOINED LETTER PHA -11C80 ; [.2FB9.0020.0002] # MARCHEN LETTER BA -11CA0 ; [.2FBA.0020.0002] # MARCHEN SUBJOINED LETTER BA -11C81 ; [.2FBB.0020.0002] # MARCHEN LETTER MA -11CA1 ; [.2FBC.0020.0002] # MARCHEN SUBJOINED LETTER MA -11C82 ; [.2FBD.0020.0002] # MARCHEN LETTER TSA -11CA2 ; [.2FBE.0020.0002] # MARCHEN SUBJOINED LETTER TSA -11C83 ; [.2FBF.0020.0002] # MARCHEN LETTER TSHA -11CA3 ; [.2FC0.0020.0002] # MARCHEN SUBJOINED LETTER TSHA -11C84 ; [.2FC1.0020.0002] # MARCHEN LETTER DZA -11CA4 ; [.2FC2.0020.0002] # MARCHEN SUBJOINED LETTER DZA -11C85 ; [.2FC3.0020.0002] # MARCHEN LETTER WA -11CA5 ; [.2FC4.0020.0002] # MARCHEN SUBJOINED LETTER WA -11C86 ; [.2FC5.0020.0002] # MARCHEN LETTER ZHA -11CA6 ; [.2FC6.0020.0002] # MARCHEN SUBJOINED LETTER ZHA -11C87 ; [.2FC7.0020.0002] # MARCHEN LETTER ZA -11CA7 ; [.2FC8.0020.0002] # MARCHEN SUBJOINED LETTER ZA -11C88 ; [.2FC9.0020.0002] # MARCHEN LETTER -A -11C89 ; [.2FCA.0020.0002] # MARCHEN LETTER YA -11CA9 ; [.2FCB.0020.0002] # MARCHEN SUBJOINED LETTER YA -11C8A ; [.2FCC.0020.0002] # MARCHEN LETTER RA -11CAA ; [.2FCD.0020.0002] # MARCHEN SUBJOINED LETTER RA -11C8B ; [.2FCE.0020.0002] # MARCHEN LETTER LA -11CAB ; [.2FCF.0020.0002] # MARCHEN SUBJOINED LETTER LA -11C8C ; [.2FD0.0020.0002] # MARCHEN LETTER SHA -11CAC ; [.2FD1.0020.0002] # MARCHEN SUBJOINED LETTER SHA -11C8D ; [.2FD2.0020.0002] # MARCHEN LETTER SA -11CAD ; [.2FD3.0020.0002] # MARCHEN SUBJOINED LETTER SA -11C8E ; [.2FD4.0020.0002] # MARCHEN LETTER HA -11CAE ; [.2FD5.0020.0002] # MARCHEN SUBJOINED LETTER HA -11C8F ; [.2FD6.0020.0002] # MARCHEN LETTER A -11CAF ; [.2FD7.0020.0002] # MARCHEN SUBJOINED LETTER A -11CB0 ; [.2FD8.0020.0002] # MARCHEN VOWEL SIGN AA -11CB1 ; [.2FD9.0020.0002] # MARCHEN VOWEL SIGN I -11CB2 ; [.2FDA.0020.0002] # MARCHEN VOWEL SIGN U -11CB3 ; [.2FDB.0020.0002] # MARCHEN VOWEL SIGN E -11CB4 ; [.2FDC.0020.0002] # MARCHEN VOWEL SIGN O -1C00 ; [.2FDD.0020.0002] # LEPCHA LETTER KA -1C01 ; [.2FDE.0020.0002] # LEPCHA LETTER KLA -1C02 ; [.2FDF.0020.0002] # LEPCHA LETTER KHA -1C03 ; [.2FE0.0020.0002] # LEPCHA LETTER GA -1C04 ; [.2FE1.0020.0002] # LEPCHA LETTER GLA -1C05 ; [.2FE2.0020.0002] # LEPCHA LETTER NGA -1C06 ; [.2FE3.0020.0002] # LEPCHA LETTER CA -1C07 ; [.2FE4.0020.0002] # LEPCHA LETTER CHA -1C08 ; [.2FE5.0020.0002] # LEPCHA LETTER JA -1C09 ; [.2FE6.0020.0002] # LEPCHA LETTER NYA -1C4D ; [.2FE7.0020.0002] # LEPCHA LETTER TTA -1C4E ; [.2FE8.0020.0002] # LEPCHA LETTER TTHA -1C4F ; [.2FE9.0020.0002] # LEPCHA LETTER DDA -1C0A ; [.2FEA.0020.0002] # LEPCHA LETTER TA -1C0B ; [.2FEB.0020.0002] # LEPCHA LETTER THA -1C0C ; [.2FEC.0020.0002] # LEPCHA LETTER DA -1C0D ; [.2FED.0020.0002] # LEPCHA LETTER NA -1C0E ; [.2FEE.0020.0002] # LEPCHA LETTER PA -1C0F ; [.2FEF.0020.0002] # LEPCHA LETTER PLA -1C10 ; [.2FF0.0020.0002] # LEPCHA LETTER PHA -1C11 ; [.2FF1.0020.0002] # LEPCHA LETTER FA -1C12 ; [.2FF2.0020.0002] # LEPCHA LETTER FLA -1C13 ; [.2FF3.0020.0002] # LEPCHA LETTER BA -1C14 ; [.2FF4.0020.0002] # LEPCHA LETTER BLA -1C15 ; [.2FF5.0020.0002] # LEPCHA LETTER MA -1C16 ; [.2FF6.0020.0002] # LEPCHA LETTER MLA -1C17 ; [.2FF7.0020.0002] # LEPCHA LETTER TSA -1C18 ; [.2FF8.0020.0002] # LEPCHA LETTER TSHA -1C19 ; [.2FF9.0020.0002] # LEPCHA LETTER DZA -1C1A ; [.2FFA.0020.0002] # LEPCHA LETTER YA -1C24 ; [.2FFB.0020.0002] # LEPCHA SUBJOINED LETTER YA -1C1B ; [.2FFC.0020.0002] # LEPCHA LETTER RA -1C25 ; [.2FFD.0020.0002] # LEPCHA SUBJOINED LETTER RA -1C1C ; [.2FFE.0020.0002] # LEPCHA LETTER LA -1C1D ; [.2FFF.0020.0002] # LEPCHA LETTER HA -1C1E ; [.3000.0020.0002] # LEPCHA LETTER HLA -1C1F ; [.3001.0020.0002] # LEPCHA LETTER VA -1C20 ; [.3002.0020.0002] # LEPCHA LETTER SA -1C21 ; [.3003.0020.0002] # LEPCHA LETTER SHA -1C22 ; [.3004.0020.0002] # LEPCHA LETTER WA -1C23 ; [.3005.0020.0002] # LEPCHA LETTER A -1C36 ; [.3006.0020.0002] # LEPCHA SIGN RAN -1C26 ; [.3007.0020.0002] # LEPCHA VOWEL SIGN AA -1C27 ; [.3008.0020.0002] # LEPCHA VOWEL SIGN I -1C28 ; [.3009.0020.0002] # LEPCHA VOWEL SIGN O -1C29 ; [.300A.0020.0002] # LEPCHA VOWEL SIGN OO -1C2A ; [.300B.0020.0002] # LEPCHA VOWEL SIGN U -1C2B ; [.300C.0020.0002] # LEPCHA VOWEL SIGN UU -1C2C ; [.300D.0020.0002] # LEPCHA VOWEL SIGN E -1C2D ; [.300E.0020.0002] # LEPCHA CONSONANT SIGN K -1C2E ; [.300F.0020.0002] # LEPCHA CONSONANT SIGN M -1C2F ; [.3010.0020.0002] # LEPCHA CONSONANT SIGN L -1C30 ; [.3011.0020.0002] # LEPCHA CONSONANT SIGN N -1C31 ; [.3012.0020.0002] # LEPCHA CONSONANT SIGN P -1C32 ; [.3013.0020.0002] # LEPCHA CONSONANT SIGN R -1C33 ; [.3014.0020.0002] # LEPCHA CONSONANT SIGN T -1C34 ; [.3015.0020.0002] # LEPCHA CONSONANT SIGN NYIN-DO -1C35 ; [.3016.0020.0002] # LEPCHA CONSONANT SIGN KANG -A840 ; [.3017.0020.0002] # PHAGS-PA LETTER KA -A841 ; [.3018.0020.0002] # PHAGS-PA LETTER KHA -A842 ; [.3019.0020.0002] # PHAGS-PA LETTER GA -A843 ; [.301A.0020.0002] # PHAGS-PA LETTER NGA -A844 ; [.301B.0020.0002] # PHAGS-PA LETTER CA -A845 ; [.301C.0020.0002] # PHAGS-PA LETTER CHA -A846 ; [.301D.0020.0002] # PHAGS-PA LETTER JA -A847 ; [.301E.0020.0002] # PHAGS-PA LETTER NYA -A869 ; [.301F.0020.0002] # PHAGS-PA LETTER TTA -A86A ; [.3020.0020.0002] # PHAGS-PA LETTER TTHA -A86B ; [.3021.0020.0002] # PHAGS-PA LETTER DDA -A86C ; [.3022.0020.0002] # PHAGS-PA LETTER NNA -A848 ; [.3023.0020.0002] # PHAGS-PA LETTER TA -A849 ; [.3024.0020.0002] # PHAGS-PA LETTER THA -A84A ; [.3025.0020.0002] # PHAGS-PA LETTER DA -A84B ; [.3026.0020.0002] # PHAGS-PA LETTER NA -A84C ; [.3027.0020.0002] # PHAGS-PA LETTER PA -A84D ; [.3028.0020.0002] # PHAGS-PA LETTER PHA -A84E ; [.3029.0020.0002] # PHAGS-PA LETTER BA -A84F ; [.302A.0020.0002] # PHAGS-PA LETTER MA -A850 ; [.302B.0020.0002] # PHAGS-PA LETTER TSA -A851 ; [.302C.0020.0002] # PHAGS-PA LETTER TSHA -A852 ; [.302D.0020.0002] # PHAGS-PA LETTER DZA -A853 ; [.302E.0020.0002] # PHAGS-PA LETTER WA -A867 ; [.302F.0020.0002] # PHAGS-PA SUBJOINED LETTER WA -A854 ; [.3030.0020.0002] # PHAGS-PA LETTER ZHA -A855 ; [.3031.0020.0002] # PHAGS-PA LETTER ZA -A856 ; [.3032.0020.0002] # PHAGS-PA LETTER SMALL A -A857 ; [.3033.0020.0002] # PHAGS-PA LETTER YA -A868 ; [.3034.0020.0002] # PHAGS-PA SUBJOINED LETTER YA -A86D ; [.3035.0020.0002] # PHAGS-PA LETTER ALTERNATE YA -A858 ; [.3036.0020.0002] # PHAGS-PA LETTER RA -A871 ; [.3037.0020.0002] # PHAGS-PA SUBJOINED LETTER RA -A872 ; [.3038.0020.0002] # PHAGS-PA SUPERFIXED LETTER RA -A859 ; [.3039.0020.0002] # PHAGS-PA LETTER LA -A85A ; [.303A.0020.0002] # PHAGS-PA LETTER SHA -A86E ; [.303B.0020.0002] # PHAGS-PA LETTER VOICELESS SHA -A85B ; [.303C.0020.0002] # PHAGS-PA LETTER SA -A85C ; [.303D.0020.0002] # PHAGS-PA LETTER HA -A86F ; [.303E.0020.0002] # PHAGS-PA LETTER VOICED HA -A870 ; [.303F.0020.0002] # PHAGS-PA LETTER ASPIRATED FA -A85D ; [.3040.0020.0002] # PHAGS-PA LETTER A -A862 ; [.3041.0020.0002] # PHAGS-PA LETTER QA -A863 ; [.3042.0020.0002] # PHAGS-PA LETTER XA -A864 ; [.3043.0020.0002] # PHAGS-PA LETTER FA -A865 ; [.3044.0020.0002] # PHAGS-PA LETTER GGA -A85E ; [.3045.0020.0002] # PHAGS-PA LETTER I -A85F ; [.3046.0020.0002] # PHAGS-PA LETTER U -A860 ; [.3047.0020.0002] # PHAGS-PA LETTER E -A861 ; [.3048.0020.0002] # PHAGS-PA LETTER O -A866 ; [.3049.0020.0002] # PHAGS-PA LETTER EE -A873 ; [.304A.0020.0002] # PHAGS-PA LETTER CANDRABINDU -1900 ; [.304B.0020.0002] # LIMBU VOWEL-CARRIER LETTER -1901 ; [.304C.0020.0002] # LIMBU LETTER KA -1902 ; [.304D.0020.0002] # LIMBU LETTER KHA -1903 ; [.304E.0020.0002] # LIMBU LETTER GA -1904 ; [.304F.0020.0002] # LIMBU LETTER GHA -1905 ; [.3050.0020.0002] # LIMBU LETTER NGA -1906 ; [.3051.0020.0002] # LIMBU LETTER CA -1907 ; [.3052.0020.0002] # LIMBU LETTER CHA -1908 ; [.3053.0020.0002] # LIMBU LETTER JA -191D ; [.3053.0020.0004][.3071.0020.0004] # LIMBU LETTER GYAN -1909 ; [.3054.0020.0002] # LIMBU LETTER JHA -190A ; [.3055.0020.0002] # LIMBU LETTER YAN -190B ; [.3056.0020.0002] # LIMBU LETTER TA -191E ; [.3056.0020.0004][.3072.0020.0004] # LIMBU LETTER TRA -190C ; [.3057.0020.0002] # LIMBU LETTER THA -190D ; [.3058.0020.0002] # LIMBU LETTER DA -190E ; [.3059.0020.0002] # LIMBU LETTER DHA -190F ; [.305A.0020.0002] # LIMBU LETTER NA -1910 ; [.305B.0020.0002] # LIMBU LETTER PA -1911 ; [.305C.0020.0002] # LIMBU LETTER PHA -1912 ; [.305D.0020.0002] # LIMBU LETTER BA -1913 ; [.305E.0020.0002] # LIMBU LETTER BHA -1914 ; [.305F.0020.0002] # LIMBU LETTER MA -1915 ; [.3060.0020.0002] # LIMBU LETTER YA -1916 ; [.3061.0020.0002] # LIMBU LETTER RA -1917 ; [.3062.0020.0002] # LIMBU LETTER LA -1918 ; [.3063.0020.0002] # LIMBU LETTER WA -1919 ; [.3064.0020.0002] # LIMBU LETTER SHA -191A ; [.3065.0020.0002] # LIMBU LETTER SSA -191B ; [.3066.0020.0002] # LIMBU LETTER SA -191C ; [.3067.0020.0002] # LIMBU LETTER HA -1920 ; [.3068.0020.0002] # LIMBU VOWEL SIGN A -1921 ; [.3069.0020.0002] # LIMBU VOWEL SIGN I -1922 ; [.306A.0020.0002] # LIMBU VOWEL SIGN U -1923 ; [.306B.0020.0002] # LIMBU VOWEL SIGN EE -1924 ; [.306C.0020.0002] # LIMBU VOWEL SIGN AI -1925 ; [.306D.0020.0002] # LIMBU VOWEL SIGN OO -1926 ; [.306E.0020.0002] # LIMBU VOWEL SIGN AU -1927 ; [.306F.0020.0002] # LIMBU VOWEL SIGN E -1928 ; [.3070.0020.0002] # LIMBU VOWEL SIGN O -1929 ; [.3071.0020.0002] # LIMBU SUBJOINED LETTER YA -192A ; [.3072.0020.0002] # LIMBU SUBJOINED LETTER RA -192B ; [.3073.0020.0002] # LIMBU SUBJOINED LETTER WA -1930 ; [.3074.0020.0002] # LIMBU SMALL LETTER KA -1931 ; [.3075.0020.0002] # LIMBU SMALL LETTER NGA -1932 ; [.3076.0020.0002] # LIMBU SMALL LETTER ANUSVARA -1933 ; [.3077.0020.0002] # LIMBU SMALL LETTER TA -1934 ; [.3078.0020.0002] # LIMBU SMALL LETTER NA -1935 ; [.3079.0020.0002] # LIMBU SMALL LETTER PA -1936 ; [.307A.0020.0002] # LIMBU SMALL LETTER MA -1937 ; [.307B.0020.0002] # LIMBU SMALL LETTER RA -1938 ; [.307C.0020.0002] # LIMBU SMALL LETTER LA -1700 ; [.307D.0020.0002] # TAGALOG LETTER A -1701 ; [.307E.0020.0002] # TAGALOG LETTER I -1702 ; [.307F.0020.0002] # TAGALOG LETTER U -1703 ; [.3080.0020.0002] # TAGALOG LETTER KA -1704 ; [.3081.0020.0002] # TAGALOG LETTER GA -1705 ; [.3082.0020.0002] # TAGALOG LETTER NGA -1706 ; [.3083.0020.0002] # TAGALOG LETTER TA -1707 ; [.3084.0020.0002] # TAGALOG LETTER DA -1708 ; [.3085.0020.0002] # TAGALOG LETTER NA -1709 ; [.3086.0020.0002] # TAGALOG LETTER PA -170A ; [.3087.0020.0002] # TAGALOG LETTER BA -170B ; [.3088.0020.0002] # TAGALOG LETTER MA -170C ; [.3089.0020.0002] # TAGALOG LETTER YA -170E ; [.308A.0020.0002] # TAGALOG LETTER LA -170F ; [.308B.0020.0002] # TAGALOG LETTER WA -1710 ; [.308C.0020.0002] # TAGALOG LETTER SA -1711 ; [.308D.0020.0002] # TAGALOG LETTER HA -1712 ; [.308E.0020.0002] # TAGALOG VOWEL SIGN I -1713 ; [.308F.0020.0002] # TAGALOG VOWEL SIGN U -1714 ; [.3090.0020.0002] # TAGALOG SIGN VIRAMA -1720 ; [.3091.0020.0002] # HANUNOO LETTER A -1721 ; [.3092.0020.0002] # HANUNOO LETTER I -1722 ; [.3093.0020.0002] # HANUNOO LETTER U -1723 ; [.3094.0020.0002] # HANUNOO LETTER KA -1724 ; [.3095.0020.0002] # HANUNOO LETTER GA -1725 ; [.3096.0020.0002] # HANUNOO LETTER NGA -1726 ; [.3097.0020.0002] # HANUNOO LETTER TA -1727 ; [.3098.0020.0002] # HANUNOO LETTER DA -1728 ; [.3099.0020.0002] # HANUNOO LETTER NA -1729 ; [.309A.0020.0002] # HANUNOO LETTER PA -172A ; [.309B.0020.0002] # HANUNOO LETTER BA -172B ; [.309C.0020.0002] # HANUNOO LETTER MA -172C ; [.309D.0020.0002] # HANUNOO LETTER YA -172D ; [.309E.0020.0002] # HANUNOO LETTER RA -172E ; [.309F.0020.0002] # HANUNOO LETTER LA -172F ; [.30A0.0020.0002] # HANUNOO LETTER WA -1730 ; [.30A1.0020.0002] # HANUNOO LETTER SA -1731 ; [.30A2.0020.0002] # HANUNOO LETTER HA -1732 ; [.30A3.0020.0002] # HANUNOO VOWEL SIGN I -1733 ; [.30A4.0020.0002] # HANUNOO VOWEL SIGN U -1734 ; [.30A5.0020.0002] # HANUNOO SIGN PAMUDPOD -1740 ; [.30A6.0020.0002] # BUHID LETTER A -1741 ; [.30A7.0020.0002] # BUHID LETTER I -1742 ; [.30A8.0020.0002] # BUHID LETTER U -1743 ; [.30A9.0020.0002] # BUHID LETTER KA -1744 ; [.30AA.0020.0002] # BUHID LETTER GA -1745 ; [.30AB.0020.0002] # BUHID LETTER NGA -1746 ; [.30AC.0020.0002] # BUHID LETTER TA -1747 ; [.30AD.0020.0002] # BUHID LETTER DA -1748 ; [.30AE.0020.0002] # BUHID LETTER NA -1749 ; [.30AF.0020.0002] # BUHID LETTER PA -174A ; [.30B0.0020.0002] # BUHID LETTER BA -174B ; [.30B1.0020.0002] # BUHID LETTER MA -174C ; [.30B2.0020.0002] # BUHID LETTER YA -174D ; [.30B3.0020.0002] # BUHID LETTER RA -174E ; [.30B4.0020.0002] # BUHID LETTER LA -174F ; [.30B5.0020.0002] # BUHID LETTER WA -1750 ; [.30B6.0020.0002] # BUHID LETTER SA -1751 ; [.30B7.0020.0002] # BUHID LETTER HA -1752 ; [.30B8.0020.0002] # BUHID VOWEL SIGN I -1753 ; [.30B9.0020.0002] # BUHID VOWEL SIGN U -1760 ; [.30BA.0020.0002] # TAGBANWA LETTER A -1761 ; [.30BB.0020.0002] # TAGBANWA LETTER I -1762 ; [.30BC.0020.0002] # TAGBANWA LETTER U -1763 ; [.30BD.0020.0002] # TAGBANWA LETTER KA -1764 ; [.30BE.0020.0002] # TAGBANWA LETTER GA -1765 ; [.30BF.0020.0002] # TAGBANWA LETTER NGA -1766 ; [.30C0.0020.0002] # TAGBANWA LETTER TA -1767 ; [.30C1.0020.0002] # TAGBANWA LETTER DA -1768 ; [.30C2.0020.0002] # TAGBANWA LETTER NA -1769 ; [.30C3.0020.0002] # TAGBANWA LETTER PA -176A ; [.30C4.0020.0002] # TAGBANWA LETTER BA -176B ; [.30C5.0020.0002] # TAGBANWA LETTER MA -176C ; [.30C6.0020.0002] # TAGBANWA LETTER YA -176E ; [.30C7.0020.0002] # TAGBANWA LETTER LA -176F ; [.30C8.0020.0002] # TAGBANWA LETTER WA -1770 ; [.30C9.0020.0002] # TAGBANWA LETTER SA -1772 ; [.30CA.0020.0002] # TAGBANWA VOWEL SIGN I -1773 ; [.30CB.0020.0002] # TAGBANWA VOWEL SIGN U -1A00 ; [.30CC.0020.0002] # BUGINESE LETTER KA -1A01 ; [.30CD.0020.0002] # BUGINESE LETTER GA -1A02 ; [.30CE.0020.0002] # BUGINESE LETTER NGA -1A03 ; [.30CF.0020.0002] # BUGINESE LETTER NGKA -1A04 ; [.30D0.0020.0002] # BUGINESE LETTER PA -1A05 ; [.30D1.0020.0002] # BUGINESE LETTER BA -1A06 ; [.30D2.0020.0002] # BUGINESE LETTER MA -1A07 ; [.30D3.0020.0002] # BUGINESE LETTER MPA -1A08 ; [.30D4.0020.0002] # BUGINESE LETTER TA -1A09 ; [.30D5.0020.0002] # BUGINESE LETTER DA -1A0A ; [.30D6.0020.0002] # BUGINESE LETTER NA -1A0B ; [.30D7.0020.0002] # BUGINESE LETTER NRA -1A0C ; [.30D8.0020.0002] # BUGINESE LETTER CA -1A0D ; [.30D9.0020.0002] # BUGINESE LETTER JA -1A0E ; [.30DA.0020.0002] # BUGINESE LETTER NYA -1A0F ; [.30DB.0020.0002] # BUGINESE LETTER NYCA -1A10 ; [.30DC.0020.0002] # BUGINESE LETTER YA -1A11 ; [.30DD.0020.0002] # BUGINESE LETTER RA -1A12 ; [.30DE.0020.0002] # BUGINESE LETTER LA -1A13 ; [.30DF.0020.0002] # BUGINESE LETTER VA -1A14 ; [.30E0.0020.0002] # BUGINESE LETTER SA -1A15 ; [.30E1.0020.0002] # BUGINESE LETTER A -1A16 ; [.30E2.0020.0002] # BUGINESE LETTER HA -1A17 ; [.30E3.0020.0002] # BUGINESE VOWEL SIGN I -1A18 ; [.30E4.0020.0002] # BUGINESE VOWEL SIGN U -1A19 ; [.30E5.0020.0002] # BUGINESE VOWEL SIGN E -1A1A ; [.30E6.0020.0002] # BUGINESE VOWEL SIGN O -1A1B ; [.30E7.0020.0002] # BUGINESE VOWEL SIGN AE -1BC0 ; [.30E8.0020.0002] # BATAK LETTER A -1BC1 ; [.30E8.0020.0004] # BATAK LETTER SIMALUNGUN A -1BC2 ; [.30E9.0020.0002] # BATAK LETTER HA -1BC3 ; [.30E9.0020.0004] # BATAK LETTER SIMALUNGUN HA -1BC4 ; [.30E9.0020.0004] # BATAK LETTER MANDAILING HA -1BC5 ; [.30EA.0020.0002] # BATAK LETTER BA -1BC6 ; [.30EA.0020.0004] # BATAK LETTER KARO BA -1BC7 ; [.30EB.0020.0002] # BATAK LETTER PA -1BC8 ; [.30EB.0020.0004] # BATAK LETTER SIMALUNGUN PA -1BC9 ; [.30EC.0020.0002] # BATAK LETTER NA -1BCA ; [.30EC.0020.0004] # BATAK LETTER MANDAILING NA -1BCB ; [.30ED.0020.0002] # BATAK LETTER WA -1BCC ; [.30ED.0020.0004] # BATAK LETTER SIMALUNGUN WA -1BCD ; [.30ED.0020.0004] # BATAK LETTER PAKPAK WA -1BCE ; [.30EE.0020.0002] # BATAK LETTER GA -1BCF ; [.30EE.0020.0004] # BATAK LETTER SIMALUNGUN GA -1BD0 ; [.30EF.0020.0002] # BATAK LETTER JA -1BD1 ; [.30F0.0020.0002] # BATAK LETTER DA -1BD2 ; [.30F1.0020.0002] # BATAK LETTER RA -1BD3 ; [.30F1.0020.0004] # BATAK LETTER SIMALUNGUN RA -1BD4 ; [.30F2.0020.0002] # BATAK LETTER MA -1BD5 ; [.30F2.0020.0004] # BATAK LETTER SIMALUNGUN MA -1BD6 ; [.30F3.0020.0002] # BATAK LETTER SOUTHERN TA -1BD7 ; [.30F3.0020.0004] # BATAK LETTER NORTHERN TA -1BD8 ; [.30F4.0020.0002] # BATAK LETTER SA -1BD9 ; [.30F4.0020.0004] # BATAK LETTER SIMALUNGUN SA -1BDA ; [.30F4.0020.0004] # BATAK LETTER MANDAILING SA -1BDB ; [.30F5.0020.0002] # BATAK LETTER YA -1BDC ; [.30F5.0020.0004] # BATAK LETTER SIMALUNGUN YA -1BDD ; [.30F6.0020.0002] # BATAK LETTER NGA -1BDE ; [.30F7.0020.0002] # BATAK LETTER LA -1BDF ; [.30F7.0020.0004] # BATAK LETTER SIMALUNGUN LA -1BE0 ; [.30F8.0020.0002] # BATAK LETTER NYA -1BE1 ; [.30F9.0020.0002] # BATAK LETTER CA -1BE2 ; [.30FA.0020.0002] # BATAK LETTER NDA -1BE3 ; [.30FB.0020.0002] # BATAK LETTER MBA -1BE4 ; [.30FC.0020.0002] # BATAK LETTER I -1BE5 ; [.30FD.0020.0002] # BATAK LETTER U -1BE7 ; [.30FE.0020.0002] # BATAK VOWEL SIGN E -1BE8 ; [.30FE.0020.0004] # BATAK VOWEL SIGN PAKPAK E -1BE9 ; [.30FF.0020.0002] # BATAK VOWEL SIGN EE -1BEA ; [.3100.0020.0002] # BATAK VOWEL SIGN I -1BEB ; [.3100.0020.0004] # BATAK VOWEL SIGN KARO I -1BEC ; [.3101.0020.0002] # BATAK VOWEL SIGN O -1BED ; [.3101.0020.0004] # BATAK VOWEL SIGN KARO O -1BEE ; [.3102.0020.0002] # BATAK VOWEL SIGN U -1BEF ; [.3102.0020.0004] # BATAK VOWEL SIGN U FOR SIMALUNGUN SA -1BF0 ; [.3103.0020.0002] # BATAK CONSONANT SIGN NG -1BF1 ; [.3104.0020.0002] # BATAK CONSONANT SIGN H -1BF2 ; [.3105.0020.0002] # BATAK PANGOLAT -1BF3 ; [.3106.0020.0002] # BATAK PANONGONAN -A930 ; [.3107.0020.0002] # REJANG LETTER KA -A931 ; [.3108.0020.0002] # REJANG LETTER GA -A932 ; [.3109.0020.0002] # REJANG LETTER NGA -A933 ; [.310A.0020.0002] # REJANG LETTER TA -A934 ; [.310B.0020.0002] # REJANG LETTER DA -A935 ; [.310C.0020.0002] # REJANG LETTER NA -A936 ; [.310D.0020.0002] # REJANG LETTER PA -A937 ; [.310E.0020.0002] # REJANG LETTER BA -A938 ; [.310F.0020.0002] # REJANG LETTER MA -A939 ; [.3110.0020.0002] # REJANG LETTER CA -A93A ; [.3111.0020.0002] # REJANG LETTER JA -A93B ; [.3112.0020.0002] # REJANG LETTER NYA -A93C ; [.3113.0020.0002] # REJANG LETTER SA -A93D ; [.3114.0020.0002] # REJANG LETTER RA -A93E ; [.3115.0020.0002] # REJANG LETTER LA -A93F ; [.3116.0020.0002] # REJANG LETTER YA -A940 ; [.3117.0020.0002] # REJANG LETTER WA -A941 ; [.3118.0020.0002] # REJANG LETTER HA -A942 ; [.3119.0020.0002] # REJANG LETTER MBA -A943 ; [.311A.0020.0002] # REJANG LETTER NGGA -A944 ; [.311B.0020.0002] # REJANG LETTER NDA -A945 ; [.311C.0020.0002] # REJANG LETTER NYJA -A946 ; [.311D.0020.0002] # REJANG LETTER A -A947 ; [.311E.0020.0002] # REJANG VOWEL SIGN I -A948 ; [.311F.0020.0002] # REJANG VOWEL SIGN U -A949 ; [.3120.0020.0002] # REJANG VOWEL SIGN E -A94A ; [.3121.0020.0002] # REJANG VOWEL SIGN AI -A94B ; [.3122.0020.0002] # REJANG VOWEL SIGN O -A94C ; [.3123.0020.0002] # REJANG VOWEL SIGN AU -A94D ; [.3124.0020.0002] # REJANG VOWEL SIGN EU -A94E ; [.3125.0020.0002] # REJANG VOWEL SIGN EA -A94F ; [.3126.0020.0002] # REJANG CONSONANT SIGN NG -A950 ; [.3127.0020.0002] # REJANG CONSONANT SIGN N -A951 ; [.3128.0020.0002] # REJANG CONSONANT SIGN R -A952 ; [.3129.0020.0002] # REJANG CONSONANT SIGN H -A953 ; [.312A.0020.0002] # REJANG VIRAMA -A90A ; [.312B.0020.0002] # KAYAH LI LETTER KA -A90B ; [.312C.0020.0002] # KAYAH LI LETTER KHA -A90C ; [.312D.0020.0002] # KAYAH LI LETTER GA -A90D ; [.312E.0020.0002] # KAYAH LI LETTER NGA -A90E ; [.312F.0020.0002] # KAYAH LI LETTER SA -A90F ; [.3130.0020.0002] # KAYAH LI LETTER SHA -A910 ; [.3131.0020.0002] # KAYAH LI LETTER ZA -A911 ; [.3132.0020.0002] # KAYAH LI LETTER NYA -A912 ; [.3133.0020.0002] # KAYAH LI LETTER TA -A913 ; [.3134.0020.0002] # KAYAH LI LETTER HTA -A914 ; [.3135.0020.0002] # KAYAH LI LETTER NA -A915 ; [.3136.0020.0002] # KAYAH LI LETTER PA -A916 ; [.3137.0020.0002] # KAYAH LI LETTER PHA -A917 ; [.3138.0020.0002] # KAYAH LI LETTER MA -A918 ; [.3139.0020.0002] # KAYAH LI LETTER DA -A919 ; [.313A.0020.0002] # KAYAH LI LETTER BA -A91A ; [.313B.0020.0002] # KAYAH LI LETTER RA -A91B ; [.313C.0020.0002] # KAYAH LI LETTER YA -A91C ; [.313D.0020.0002] # KAYAH LI LETTER LA -A91D ; [.313E.0020.0002] # KAYAH LI LETTER WA -A91E ; [.313F.0020.0002] # KAYAH LI LETTER THA -A91F ; [.3140.0020.0002] # KAYAH LI LETTER HA -A920 ; [.3141.0020.0002] # KAYAH LI LETTER VA -A921 ; [.3142.0020.0002] # KAYAH LI LETTER CA -A922 ; [.3143.0020.0002] # KAYAH LI LETTER A -A923 ; [.3144.0020.0002] # KAYAH LI LETTER OE -A924 ; [.3145.0020.0002] # KAYAH LI LETTER I -A925 ; [.3146.0020.0002] # KAYAH LI LETTER OO -A926 ; [.3147.0020.0002] # KAYAH LI VOWEL UE -A927 ; [.3148.0020.0002] # KAYAH LI VOWEL E -A928 ; [.3149.0020.0002] # KAYAH LI VOWEL U -A929 ; [.314A.0020.0002] # KAYAH LI VOWEL EE -A92A ; [.314B.0020.0002] # KAYAH LI VOWEL O -1000 ; [.314C.0020.0002] # MYANMAR LETTER KA -1075 ; [.314D.0020.0002] # MYANMAR LETTER SHAN KA -1001 ; [.314E.0020.0002] # MYANMAR LETTER KHA -1076 ; [.314F.0020.0002] # MYANMAR LETTER SHAN KHA -1002 ; [.3150.0020.0002] # MYANMAR LETTER GA -1077 ; [.3151.0020.0002] # MYANMAR LETTER SHAN GA -AA60 ; [.3152.0020.0002] # MYANMAR LETTER KHAMTI GA -A9E9 ; [.3153.0020.0002] # MYANMAR LETTER TAI LAING GA -1003 ; [.3154.0020.0002] # MYANMAR LETTER GHA -A9E0 ; [.3155.0020.0002] # MYANMAR LETTER SHAN GHA -A9EA ; [.3156.0020.0002] # MYANMAR LETTER TAI LAING GHA -1004 ; [.3157.0020.0002] # MYANMAR LETTER NGA -105A ; [.3158.0020.0002] # MYANMAR LETTER MON NGA -1005 ; [.3159.0020.0002] # MYANMAR LETTER CA -1078 ; [.315A.0020.0002] # MYANMAR LETTER SHAN CA -AA61 ; [.315B.0020.0002] # MYANMAR LETTER KHAMTI CA -1006 ; [.315C.0020.0002] # MYANMAR LETTER CHA -A9E1 ; [.315D.0020.0002] # MYANMAR LETTER SHAN CHA -AA62 ; [.315E.0020.0002] # MYANMAR LETTER KHAMTI CHA -AA7E ; [.315F.0020.0002] # MYANMAR LETTER SHWE PALAUNG CHA -1007 ; [.3160.0020.0002] # MYANMAR LETTER JA -AA63 ; [.3161.0020.0002] # MYANMAR LETTER KHAMTI JA -A9EB ; [.3162.0020.0002] # MYANMAR LETTER TAI LAING JA -1079 ; [.3163.0020.0002] # MYANMAR LETTER SHAN ZA -AA72 ; [.3164.0020.0002] # MYANMAR LETTER KHAMTI ZA -1008 ; [.3165.0020.0002] # MYANMAR LETTER JHA -105B ; [.3166.0020.0002] # MYANMAR LETTER MON JHA -A9E2 ; [.3167.0020.0002] # MYANMAR LETTER SHAN JHA -AA64 ; [.3168.0020.0002] # MYANMAR LETTER KHAMTI JHA -A9EC ; [.3169.0020.0002] # MYANMAR LETTER TAI LAING JHA -1061 ; [.316A.0020.0002] # MYANMAR LETTER SGAW KAREN SHA -AA7F ; [.316B.0020.0002] # MYANMAR LETTER SHWE PALAUNG SHA -1009 ; [.316C.0020.0002] # MYANMAR LETTER NYA -107A ; [.316D.0020.0002] # MYANMAR LETTER SHAN NYA -AA65 ; [.316E.0020.0002] # MYANMAR LETTER KHAMTI NYA -A9E7 ; [.316F.0020.0002] # MYANMAR LETTER TAI LAING NYA -100A ; [.3170.0020.0002] # MYANMAR LETTER NNYA -100B ; [.3171.0020.0002] # MYANMAR LETTER TTA -AA66 ; [.3172.0020.0002] # MYANMAR LETTER KHAMTI TTA -100C ; [.3173.0020.0002] # MYANMAR LETTER TTHA -AA67 ; [.3174.0020.0002] # MYANMAR LETTER KHAMTI TTHA -100D ; [.3175.0020.0002] # MYANMAR LETTER DDA -AA68 ; [.3176.0020.0002] # MYANMAR LETTER KHAMTI DDA -A9ED ; [.3177.0020.0002] # MYANMAR LETTER TAI LAING DDA -100E ; [.3178.0020.0002] # MYANMAR LETTER DDHA -AA69 ; [.3179.0020.0002] # MYANMAR LETTER KHAMTI DDHA -A9EE ; [.317A.0020.0002] # MYANMAR LETTER TAI LAING DDHA -100F ; [.317B.0020.0002] # MYANMAR LETTER NNA -106E ; [.317C.0020.0002] # MYANMAR LETTER EASTERN PWO KAREN NNA -A9E3 ; [.317D.0020.0002] # MYANMAR LETTER SHAN NNA -A9EF ; [.317E.0020.0002] # MYANMAR LETTER TAI LAING NNA -1010 ; [.317F.0020.0002] # MYANMAR LETTER TA -1011 ; [.3180.0020.0002] # MYANMAR LETTER THA -1012 ; [.3181.0020.0002] # MYANMAR LETTER DA -107B ; [.3182.0020.0002] # MYANMAR LETTER SHAN DA -A9FB ; [.3183.0020.0002] # MYANMAR LETTER TAI LAING DA -1013 ; [.3184.0020.0002] # MYANMAR LETTER DHA -AA6A ; [.3185.0020.0002] # MYANMAR LETTER KHAMTI DHA -A9FC ; [.3186.0020.0002] # MYANMAR LETTER TAI LAING DHA -1014 ; [.3187.0020.0002] # MYANMAR LETTER NA -107C ; [.3188.0020.0002] # MYANMAR LETTER SHAN NA -AA6B ; [.3189.0020.0002] # MYANMAR LETTER KHAMTI NA -105E ; [.318A.0020.0002] # MYANMAR CONSONANT SIGN MON MEDIAL NA -1015 ; [.318B.0020.0002] # MYANMAR LETTER PA -1016 ; [.318C.0020.0002] # MYANMAR LETTER PHA -107D ; [.318D.0020.0002] # MYANMAR LETTER SHAN PHA -107E ; [.318E.0020.0002] # MYANMAR LETTER SHAN FA -AA6F ; [.318F.0020.0002] # MYANMAR LETTER KHAMTI FA -108E ; [.3190.0020.0002] # MYANMAR LETTER RUMAI PALAUNG FA -A9E8 ; [.3191.0020.0002] # MYANMAR LETTER TAI LAING FA -1017 ; [.3192.0020.0002] # MYANMAR LETTER BA -107F ; [.3193.0020.0002] # MYANMAR LETTER SHAN BA -A9FD ; [.3194.0020.0002] # MYANMAR LETTER TAI LAING BA -1018 ; [.3195.0020.0002] # MYANMAR LETTER BHA -A9E4 ; [.3196.0020.0002] # MYANMAR LETTER SHAN BHA -A9FE ; [.3197.0020.0002] # MYANMAR LETTER TAI LAING BHA -1019 ; [.3198.0020.0002] # MYANMAR LETTER MA -105F ; [.3199.0020.0002] # MYANMAR CONSONANT SIGN MON MEDIAL MA -101A ; [.319A.0020.0002] # MYANMAR LETTER YA -103B ; [.319B.0020.0002] # MYANMAR CONSONANT SIGN MEDIAL YA -101B ; [.319C.0020.0002] # MYANMAR LETTER RA -AA73 ; [.319D.0020.0002] # MYANMAR LETTER KHAMTI RA -AA7A ; [.319E.0020.0002] # MYANMAR LETTER AITON RA -103C ; [.319F.0020.0002] # MYANMAR CONSONANT SIGN MEDIAL RA -101C ; [.31A0.0020.0002] # MYANMAR LETTER LA -1060 ; [.31A1.0020.0002] # MYANMAR CONSONANT SIGN MON MEDIAL LA -101D ; [.31A2.0020.0002] # MYANMAR LETTER WA -103D ; [.31A3.0020.0002] # MYANMAR CONSONANT SIGN MEDIAL WA -1082 ; [.31A4.0020.0002] # MYANMAR CONSONANT SIGN SHAN MEDIAL WA -1080 ; [.31A5.0020.0002] # MYANMAR LETTER SHAN THA -1050 ; [.31A6.0020.0002] # MYANMAR LETTER SHA -1051 ; [.31A7.0020.0002] # MYANMAR LETTER SSA -1065 ; [.31A8.0020.0002] # MYANMAR LETTER WESTERN PWO KAREN THA -101E ; [.31A9.0020.0002] # MYANMAR LETTER SA -103F ; [.31A9.0020.0004][.31E2.0020.0004][.31A9.0020.0004] # MYANMAR LETTER GREAT SA -AA6C ; [.31AA.0020.0002] # MYANMAR LETTER KHAMTI SA -101F ; [.31AB.0020.0002] # MYANMAR LETTER HA -1081 ; [.31AC.0020.0002] # MYANMAR LETTER SHAN HA -AA6D ; [.31AD.0020.0002] # MYANMAR LETTER KHAMTI HA -103E ; [.31AE.0020.0002] # MYANMAR CONSONANT SIGN MEDIAL HA -AA6E ; [.31AF.0020.0002] # MYANMAR LETTER KHAMTI HHA -AA71 ; [.31B0.0020.0002] # MYANMAR LETTER KHAMTI XA -1020 ; [.31B1.0020.0002] # MYANMAR LETTER LLA -A9FA ; [.31B2.0020.0002] # MYANMAR LETTER TAI LAING LLA -105C ; [.31B3.0020.0002] # MYANMAR LETTER MON BBA -105D ; [.31B4.0020.0002] # MYANMAR LETTER MON BBE -106F ; [.31B5.0020.0002] # MYANMAR LETTER EASTERN PWO KAREN YWA -1070 ; [.31B6.0020.0002] # MYANMAR LETTER EASTERN PWO KAREN GHWA -1066 ; [.31B7.0020.0002] # MYANMAR LETTER WESTERN PWO KAREN PWA -1021 ; [.31B8.0020.0002] # MYANMAR LETTER A -1022 ; [.31B9.0020.0002] # MYANMAR LETTER SHAN A -1023 ; [.31BA.0020.0002] # MYANMAR LETTER I -1024 ; [.31BB.0020.0002] # MYANMAR LETTER II -1025 ; [.31BC.0020.0002] # MYANMAR LETTER U -1026 ; [.31BD.0020.0002] # MYANMAR LETTER UU -1025 102E ; [.31BD.0020.0002] # MYANMAR LETTER UU -1052 ; [.31BE.0020.0002] # MYANMAR LETTER VOCALIC R -1053 ; [.31BF.0020.0002] # MYANMAR LETTER VOCALIC RR -1054 ; [.31C0.0020.0002] # MYANMAR LETTER VOCALIC L -1055 ; [.31C1.0020.0002] # MYANMAR LETTER VOCALIC LL -1027 ; [.31C2.0020.0002] # MYANMAR LETTER E -1028 ; [.31C3.0020.0002] # MYANMAR LETTER MON E -1029 ; [.31C4.0020.0002] # MYANMAR LETTER O -102A ; [.31C5.0020.0002] # MYANMAR LETTER AU -102C ; [.31C6.0020.0002] # MYANMAR VOWEL SIGN AA -102B ; [.31C6.0020.0004] # MYANMAR VOWEL SIGN TALL AA -1083 ; [.31C7.0020.0002] # MYANMAR VOWEL SIGN SHAN AA -1072 ; [.31C8.0020.0002] # MYANMAR VOWEL SIGN KAYAH OE -109C ; [.31C9.0020.0002] # MYANMAR VOWEL SIGN AITON A -102D ; [.31CA.0020.0002] # MYANMAR VOWEL SIGN I -1071 ; [.31CB.0020.0002] # MYANMAR VOWEL SIGN GEBA KAREN I -102E ; [.31CC.0020.0002] # MYANMAR VOWEL SIGN II -1033 ; [.31CD.0020.0002] # MYANMAR VOWEL SIGN MON II -102F ; [.31CE.0020.0002] # MYANMAR VOWEL SIGN U -1073 ; [.31CF.0020.0002] # MYANMAR VOWEL SIGN KAYAH U -1074 ; [.31D0.0020.0002] # MYANMAR VOWEL SIGN KAYAH EE -1030 ; [.31D1.0020.0002] # MYANMAR VOWEL SIGN UU -1056 ; [.31D2.0020.0002] # MYANMAR VOWEL SIGN VOCALIC R -1057 ; [.31D3.0020.0002] # MYANMAR VOWEL SIGN VOCALIC RR -1058 ; [.31D4.0020.0002] # MYANMAR VOWEL SIGN VOCALIC L -1059 ; [.31D5.0020.0002] # MYANMAR VOWEL SIGN VOCALIC LL -1031 ; [.31D6.0020.0002] # MYANMAR VOWEL SIGN E -1084 ; [.31D7.0020.0002] # MYANMAR VOWEL SIGN SHAN E -1035 ; [.31D8.0020.0002] # MYANMAR VOWEL SIGN E ABOVE -1085 ; [.31D9.0020.0002] # MYANMAR VOWEL SIGN SHAN E ABOVE -1032 ; [.31DA.0020.0002] # MYANMAR VOWEL SIGN AI -109D ; [.31DB.0020.0002] # MYANMAR VOWEL SIGN AITON AI -1034 ; [.31DC.0020.0002] # MYANMAR VOWEL SIGN MON O -1062 ; [.31DD.0020.0002] # MYANMAR VOWEL SIGN SGAW KAREN EU -1067 ; [.31DE.0020.0002] # MYANMAR VOWEL SIGN WESTERN PWO KAREN EU -1068 ; [.31DF.0020.0002] # MYANMAR VOWEL SIGN WESTERN PWO KAREN UE -A9E5 ; [.31E0.0020.0002] # MYANMAR SIGN SHAN SAW -1086 ; [.31E1.0020.0002] # MYANMAR VOWEL SIGN SHAN FINAL Y -1039 ; [.31E2.0020.0002] # MYANMAR SIGN VIRAMA -103A ; [.31E3.0020.0002] # MYANMAR SIGN ASAT -1063 ; [.31E4.0020.0002] # MYANMAR TONE MARK SGAW KAREN HATHI -1064 ; [.31E5.0020.0002] # MYANMAR TONE MARK SGAW KAREN KE PHO -1069 ; [.31E6.0020.0002] # MYANMAR SIGN WESTERN PWO KAREN TONE-1 -106A ; [.31E7.0020.0002] # MYANMAR SIGN WESTERN PWO KAREN TONE-2 -106B ; [.31E8.0020.0002] # MYANMAR SIGN WESTERN PWO KAREN TONE-3 -106C ; [.31E9.0020.0002] # MYANMAR SIGN WESTERN PWO KAREN TONE-4 -106D ; [.31EA.0020.0002] # MYANMAR SIGN WESTERN PWO KAREN TONE-5 -1087 ; [.31EB.0020.0002] # MYANMAR SIGN SHAN TONE-2 -108B ; [.31EC.0020.0002] # MYANMAR SIGN SHAN COUNCIL TONE-2 -1088 ; [.31ED.0020.0002] # MYANMAR SIGN SHAN TONE-3 -108C ; [.31EE.0020.0002] # MYANMAR SIGN SHAN COUNCIL TONE-3 -108D ; [.31EF.0020.0002] # MYANMAR SIGN SHAN COUNCIL EMPHATIC TONE -1089 ; [.31F0.0020.0002] # MYANMAR SIGN SHAN TONE-5 -108A ; [.31F1.0020.0002] # MYANMAR SIGN SHAN TONE-6 -108F ; [.31F2.0020.0002] # MYANMAR SIGN RUMAI PALAUNG TONE-5 -109A ; [.31F3.0020.0002] # MYANMAR SIGN KHAMTI TONE-1 -109B ; [.31F4.0020.0002] # MYANMAR SIGN KHAMTI TONE-3 -AA7B ; [.31F5.0020.0002] # MYANMAR SIGN PAO KAREN TONE -AA7C ; [.31F6.0020.0002] # MYANMAR SIGN TAI LAING TONE-2 -AA7D ; [.31F7.0020.0002] # MYANMAR SIGN TAI LAING TONE-5 -AA74 ; [.31F8.0020.0002] # MYANMAR LOGOGRAM KHAMTI OAY -AA75 ; [.31F9.0020.0002] # MYANMAR LOGOGRAM KHAMTI QN -AA76 ; [.31FA.0020.0002] # MYANMAR LOGOGRAM KHAMTI HM -11103 ; [.31FB.0020.0002] # CHAKMA LETTER AA -11104 ; [.31FC.0020.0002] # CHAKMA LETTER I -11105 ; [.31FD.0020.0002] # CHAKMA LETTER U -11106 ; [.31FE.0020.0002] # CHAKMA LETTER E -11107 ; [.31FF.0020.0002] # CHAKMA LETTER KAA -11108 ; [.3200.0020.0002] # CHAKMA LETTER KHAA -11109 ; [.3201.0020.0002] # CHAKMA LETTER GAA -1110A ; [.3202.0020.0002] # CHAKMA LETTER GHAA -1110B ; [.3203.0020.0002] # CHAKMA LETTER NGAA -1110C ; [.3204.0020.0002] # CHAKMA LETTER CAA -1110D ; [.3205.0020.0002] # CHAKMA LETTER CHAA -1110E ; [.3206.0020.0002] # CHAKMA LETTER JAA -1110F ; [.3207.0020.0002] # CHAKMA LETTER JHAA -11110 ; [.3208.0020.0002] # CHAKMA LETTER NYAA -11111 ; [.3209.0020.0002] # CHAKMA LETTER TTAA -11112 ; [.320A.0020.0002] # CHAKMA LETTER TTHAA -11113 ; [.320B.0020.0002] # CHAKMA LETTER DDAA -11114 ; [.320C.0020.0002] # CHAKMA LETTER DDHAA -11115 ; [.320D.0020.0002] # CHAKMA LETTER NNAA -11116 ; [.320E.0020.0002] # CHAKMA LETTER TAA -11117 ; [.320F.0020.0002] # CHAKMA LETTER THAA -11118 ; [.3210.0020.0002] # CHAKMA LETTER DAA -11119 ; [.3211.0020.0002] # CHAKMA LETTER DHAA -1111A ; [.3212.0020.0002] # CHAKMA LETTER NAA -1111B ; [.3213.0020.0002] # CHAKMA LETTER PAA -1111C ; [.3214.0020.0002] # CHAKMA LETTER PHAA -1111D ; [.3215.0020.0002] # CHAKMA LETTER BAA -1111E ; [.3216.0020.0002] # CHAKMA LETTER BHAA -1111F ; [.3217.0020.0002] # CHAKMA LETTER MAA -11120 ; [.3218.0020.0002] # CHAKMA LETTER YYAA -11121 ; [.3219.0020.0002] # CHAKMA LETTER YAA -11122 ; [.321A.0020.0002] # CHAKMA LETTER RAA -11123 ; [.321B.0020.0002] # CHAKMA LETTER LAA -11124 ; [.321C.0020.0002] # CHAKMA LETTER WAA -11125 ; [.321D.0020.0002] # CHAKMA LETTER SAA -11126 ; [.321E.0020.0002] # CHAKMA LETTER HAA -11127 ; [.321F.0020.0002] # CHAKMA VOWEL SIGN A -11128 ; [.3220.0020.0002] # CHAKMA VOWEL SIGN I -11129 ; [.3221.0020.0002] # CHAKMA VOWEL SIGN II -1112A ; [.3222.0020.0002] # CHAKMA VOWEL SIGN U -1112B ; [.3223.0020.0002] # CHAKMA VOWEL SIGN UU -1112C ; [.3224.0020.0002] # CHAKMA VOWEL SIGN E -1112D ; [.3225.0020.0002] # CHAKMA VOWEL SIGN AI -1112E ; [.3226.0020.0002] # CHAKMA VOWEL SIGN O -11131 11127 ; [.3226.0020.0002] # CHAKMA VOWEL SIGN O -1112F ; [.3227.0020.0002] # CHAKMA VOWEL SIGN AU -11132 11127 ; [.3227.0020.0002] # CHAKMA VOWEL SIGN AU -11130 ; [.3228.0020.0002] # CHAKMA VOWEL SIGN OI -11131 ; [.3229.0020.0002] # CHAKMA O MARK -11132 ; [.322A.0020.0002] # CHAKMA AU MARK -11133 ; [.322B.0020.0002] # CHAKMA VIRAMA -11134 ; [.322C.0020.0002] # CHAKMA MAAYYAA -1780 ; [.322D.0020.0002] # KHMER LETTER KA -1781 ; [.322E.0020.0002] # KHMER LETTER KHA -1782 ; [.322F.0020.0002] # KHMER LETTER KO -1783 ; [.3230.0020.0002] # KHMER LETTER KHO -1784 ; [.3231.0020.0002] # KHMER LETTER NGO -1785 ; [.3232.0020.0002] # KHMER LETTER CA -1786 ; [.3233.0020.0002] # KHMER LETTER CHA -1787 ; [.3234.0020.0002] # KHMER LETTER CO -1788 ; [.3235.0020.0002] # KHMER LETTER CHO -1789 ; [.3236.0020.0002] # KHMER LETTER NYO -178A ; [.3237.0020.0002] # KHMER LETTER DA -178B ; [.3238.0020.0002] # KHMER LETTER TTHA -178C ; [.3239.0020.0002] # KHMER LETTER DO -178D ; [.323A.0020.0002] # KHMER LETTER TTHO -178E ; [.323B.0020.0002] # KHMER LETTER NNO -178F ; [.323C.0020.0002] # KHMER LETTER TA -1790 ; [.323D.0020.0002] # KHMER LETTER THA -1791 ; [.323E.0020.0002] # KHMER LETTER TO -1792 ; [.323F.0020.0002] # KHMER LETTER THO -1793 ; [.3240.0020.0002] # KHMER LETTER NO -1794 ; [.3241.0020.0002] # KHMER LETTER BA -1795 ; [.3242.0020.0002] # KHMER LETTER PHA -1796 ; [.3243.0020.0002] # KHMER LETTER PO -1797 ; [.3244.0020.0002] # KHMER LETTER PHO -1798 ; [.3245.0020.0002] # KHMER LETTER MO -1799 ; [.3246.0020.0002] # KHMER LETTER YO -179A ; [.3247.0020.0002] # KHMER LETTER RO -179B ; [.3248.0020.0002] # KHMER LETTER LO -179C ; [.3249.0020.0002] # KHMER LETTER VO -179D ; [.324A.0020.0002] # KHMER LETTER SHA -179E ; [.324B.0020.0002] # KHMER LETTER SSO -179F ; [.324C.0020.0002] # KHMER LETTER SA -17A0 ; [.324D.0020.0002] # KHMER LETTER HA -17A1 ; [.324E.0020.0002] # KHMER LETTER LA -17A2 ; [.324F.0020.0002] # KHMER LETTER QA -17DC ; [.3250.0020.0002] # KHMER SIGN AVAKRAHASANYA -17A3 ; [.3251.0020.0002] # KHMER INDEPENDENT VOWEL QAQ -17A4 ; [.3252.0020.0002] # KHMER INDEPENDENT VOWEL QAA -17A5 ; [.3253.0020.0002] # KHMER INDEPENDENT VOWEL QI -17A6 ; [.3254.0020.0002] # KHMER INDEPENDENT VOWEL QII -17A7 ; [.3255.0020.0002] # KHMER INDEPENDENT VOWEL QU -17A8 ; [.3256.0020.0002] # KHMER INDEPENDENT VOWEL QUK -17A9 ; [.3257.0020.0002] # KHMER INDEPENDENT VOWEL QUU -17AA ; [.3258.0020.0002] # KHMER INDEPENDENT VOWEL QUUV -17AB ; [.3259.0020.0002] # KHMER INDEPENDENT VOWEL RY -17AC ; [.325A.0020.0002] # KHMER INDEPENDENT VOWEL RYY -17AD ; [.325B.0020.0002] # KHMER INDEPENDENT VOWEL LY -17AE ; [.325C.0020.0002] # KHMER INDEPENDENT VOWEL LYY -17AF ; [.325D.0020.0002] # KHMER INDEPENDENT VOWEL QE -17B0 ; [.325E.0020.0002] # KHMER INDEPENDENT VOWEL QAI -17B1 ; [.325F.0020.0002] # KHMER INDEPENDENT VOWEL QOO TYPE ONE -17B2 ; [.3260.0020.0002] # KHMER INDEPENDENT VOWEL QOO TYPE TWO -17B3 ; [.3261.0020.0002] # KHMER INDEPENDENT VOWEL QAU -17B6 ; [.3262.0020.0002] # KHMER VOWEL SIGN AA -17B7 ; [.3263.0020.0002] # KHMER VOWEL SIGN I -17B8 ; [.3264.0020.0002] # KHMER VOWEL SIGN II -17B9 ; [.3265.0020.0002] # KHMER VOWEL SIGN Y -17BA ; [.3266.0020.0002] # KHMER VOWEL SIGN YY -17BB ; [.3267.0020.0002] # KHMER VOWEL SIGN U -17BC ; [.3268.0020.0002] # KHMER VOWEL SIGN UU -17BD ; [.3269.0020.0002] # KHMER VOWEL SIGN UA -17BE ; [.326A.0020.0002] # KHMER VOWEL SIGN OE -17BF ; [.326B.0020.0002] # KHMER VOWEL SIGN YA -17C0 ; [.326C.0020.0002] # KHMER VOWEL SIGN IE -17C1 ; [.326D.0020.0002] # KHMER VOWEL SIGN E -17C2 ; [.326E.0020.0002] # KHMER VOWEL SIGN AE -17C3 ; [.326F.0020.0002] # KHMER VOWEL SIGN AI -17C4 ; [.3270.0020.0002] # KHMER VOWEL SIGN OO -17C5 ; [.3271.0020.0002] # KHMER VOWEL SIGN AU -17D2 ; [.3272.0020.0002] # KHMER SIGN COENG -1950 ; [.3273.0020.0002] # TAI LE LETTER KA -1951 ; [.3274.0020.0002] # TAI LE LETTER XA -1952 ; [.3275.0020.0002] # TAI LE LETTER NGA -1953 ; [.3276.0020.0002] # TAI LE LETTER TSA -1954 ; [.3277.0020.0002] # TAI LE LETTER SA -1955 ; [.3278.0020.0002] # TAI LE LETTER YA -1956 ; [.3279.0020.0002] # TAI LE LETTER TA -1957 ; [.327A.0020.0002] # TAI LE LETTER THA -1958 ; [.327B.0020.0002] # TAI LE LETTER LA -1959 ; [.327C.0020.0002] # TAI LE LETTER PA -195A ; [.327D.0020.0002] # TAI LE LETTER PHA -195B ; [.327E.0020.0002] # TAI LE LETTER MA -195C ; [.327F.0020.0002] # TAI LE LETTER FA -195D ; [.3280.0020.0002] # TAI LE LETTER VA -195E ; [.3281.0020.0002] # TAI LE LETTER HA -195F ; [.3282.0020.0002] # TAI LE LETTER QA -1960 ; [.3283.0020.0002] # TAI LE LETTER KHA -1961 ; [.3284.0020.0002] # TAI LE LETTER TSHA -1962 ; [.3285.0020.0002] # TAI LE LETTER NA -1963 ; [.3286.0020.0002] # TAI LE LETTER A -1964 ; [.3287.0020.0002] # TAI LE LETTER I -1965 ; [.3288.0020.0002] # TAI LE LETTER EE -1966 ; [.3289.0020.0002] # TAI LE LETTER EH -1967 ; [.328A.0020.0002] # TAI LE LETTER U -1968 ; [.328B.0020.0002] # TAI LE LETTER OO -1969 ; [.328C.0020.0002] # TAI LE LETTER O -196A ; [.328D.0020.0002] # TAI LE LETTER UE -196B ; [.328E.0020.0002] # TAI LE LETTER E -196C ; [.328F.0020.0002] # TAI LE LETTER AUE -196D ; [.3290.0020.0002] # TAI LE LETTER AI -1970 ; [.3291.0020.0002] # TAI LE LETTER TONE-2 -1971 ; [.3292.0020.0002] # TAI LE LETTER TONE-3 -1972 ; [.3293.0020.0002] # TAI LE LETTER TONE-4 -1973 ; [.3294.0020.0002] # TAI LE LETTER TONE-5 -1974 ; [.3295.0020.0002] # TAI LE LETTER TONE-6 -1980 ; [.3296.0020.0002] # NEW TAI LUE LETTER HIGH QA -19B5 1980 ; [.3296.0020.0002][.32C7.0020.0002] # -19B6 1980 ; [.3296.0020.0002][.32C8.0020.0002] # -19B7 1980 ; [.3296.0020.0002][.32C9.0020.0002] # -19BA 1980 ; [.3296.0020.0002][.32CC.0020.0002] # -1981 ; [.3297.0020.0002] # NEW TAI LUE LETTER LOW QA -19B5 1981 ; [.3297.0020.0002][.32C7.0020.0002] # -19B6 1981 ; [.3297.0020.0002][.32C8.0020.0002] # -19B7 1981 ; [.3297.0020.0002][.32C9.0020.0002] # -19BA 1981 ; [.3297.0020.0002][.32CC.0020.0002] # -1982 ; [.3298.0020.0002] # NEW TAI LUE LETTER HIGH KA -19B5 1982 ; [.3298.0020.0002][.32C7.0020.0002] # -19B6 1982 ; [.3298.0020.0002][.32C8.0020.0002] # -19B7 1982 ; [.3298.0020.0002][.32C9.0020.0002] # -19BA 1982 ; [.3298.0020.0002][.32CC.0020.0002] # -1983 ; [.3299.0020.0002] # NEW TAI LUE LETTER HIGH XA -19B5 1983 ; [.3299.0020.0002][.32C7.0020.0002] # -19B6 1983 ; [.3299.0020.0002][.32C8.0020.0002] # -19B7 1983 ; [.3299.0020.0002][.32C9.0020.0002] # -19BA 1983 ; [.3299.0020.0002][.32CC.0020.0002] # -1984 ; [.329A.0020.0002] # NEW TAI LUE LETTER HIGH NGA -19B5 1984 ; [.329A.0020.0002][.32C7.0020.0002] # -19B6 1984 ; [.329A.0020.0002][.32C8.0020.0002] # -19B7 1984 ; [.329A.0020.0002][.32C9.0020.0002] # -19BA 1984 ; [.329A.0020.0002][.32CC.0020.0002] # -1985 ; [.329B.0020.0002] # NEW TAI LUE LETTER LOW KA -19B5 1985 ; [.329B.0020.0002][.32C7.0020.0002] # -19B6 1985 ; [.329B.0020.0002][.32C8.0020.0002] # -19B7 1985 ; [.329B.0020.0002][.32C9.0020.0002] # -19BA 1985 ; [.329B.0020.0002][.32CC.0020.0002] # -1986 ; [.329C.0020.0002] # NEW TAI LUE LETTER LOW XA -19B5 1986 ; [.329C.0020.0002][.32C7.0020.0002] # -19B6 1986 ; [.329C.0020.0002][.32C8.0020.0002] # -19B7 1986 ; [.329C.0020.0002][.32C9.0020.0002] # -19BA 1986 ; [.329C.0020.0002][.32CC.0020.0002] # -1987 ; [.329D.0020.0002] # NEW TAI LUE LETTER LOW NGA -19B5 1987 ; [.329D.0020.0002][.32C7.0020.0002] # -19B6 1987 ; [.329D.0020.0002][.32C8.0020.0002] # -19B7 1987 ; [.329D.0020.0002][.32C9.0020.0002] # -19BA 1987 ; [.329D.0020.0002][.32CC.0020.0002] # -1988 ; [.329E.0020.0002] # NEW TAI LUE LETTER HIGH TSA -19B5 1988 ; [.329E.0020.0002][.32C7.0020.0002] # -19B6 1988 ; [.329E.0020.0002][.32C8.0020.0002] # -19B7 1988 ; [.329E.0020.0002][.32C9.0020.0002] # -19BA 1988 ; [.329E.0020.0002][.32CC.0020.0002] # -1989 ; [.329F.0020.0002] # NEW TAI LUE LETTER HIGH SA -19B5 1989 ; [.329F.0020.0002][.32C7.0020.0002] # -19B6 1989 ; [.329F.0020.0002][.32C8.0020.0002] # -19B7 1989 ; [.329F.0020.0002][.32C9.0020.0002] # -19BA 1989 ; [.329F.0020.0002][.32CC.0020.0002] # -198A ; [.32A0.0020.0002] # NEW TAI LUE LETTER HIGH YA -19B5 198A ; [.32A0.0020.0002][.32C7.0020.0002] # -19B6 198A ; [.32A0.0020.0002][.32C8.0020.0002] # -19B7 198A ; [.32A0.0020.0002][.32C9.0020.0002] # -19BA 198A ; [.32A0.0020.0002][.32CC.0020.0002] # -198B ; [.32A1.0020.0002] # NEW TAI LUE LETTER LOW TSA -19B5 198B ; [.32A1.0020.0002][.32C7.0020.0002] # -19B6 198B ; [.32A1.0020.0002][.32C8.0020.0002] # -19B7 198B ; [.32A1.0020.0002][.32C9.0020.0002] # -19BA 198B ; [.32A1.0020.0002][.32CC.0020.0002] # -198C ; [.32A2.0020.0002] # NEW TAI LUE LETTER LOW SA -19B5 198C ; [.32A2.0020.0002][.32C7.0020.0002] # -19B6 198C ; [.32A2.0020.0002][.32C8.0020.0002] # -19B7 198C ; [.32A2.0020.0002][.32C9.0020.0002] # -19BA 198C ; [.32A2.0020.0002][.32CC.0020.0002] # -198D ; [.32A3.0020.0002] # NEW TAI LUE LETTER LOW YA -19B5 198D ; [.32A3.0020.0002][.32C7.0020.0002] # -19B6 198D ; [.32A3.0020.0002][.32C8.0020.0002] # -19B7 198D ; [.32A3.0020.0002][.32C9.0020.0002] # -19BA 198D ; [.32A3.0020.0002][.32CC.0020.0002] # -198E ; [.32A4.0020.0002] # NEW TAI LUE LETTER HIGH TA -19B5 198E ; [.32A4.0020.0002][.32C7.0020.0002] # -19B6 198E ; [.32A4.0020.0002][.32C8.0020.0002] # -19B7 198E ; [.32A4.0020.0002][.32C9.0020.0002] # -19BA 198E ; [.32A4.0020.0002][.32CC.0020.0002] # -198F ; [.32A5.0020.0002] # NEW TAI LUE LETTER HIGH THA -19B5 198F ; [.32A5.0020.0002][.32C7.0020.0002] # -19B6 198F ; [.32A5.0020.0002][.32C8.0020.0002] # -19B7 198F ; [.32A5.0020.0002][.32C9.0020.0002] # -19BA 198F ; [.32A5.0020.0002][.32CC.0020.0002] # -1990 ; [.32A6.0020.0002] # NEW TAI LUE LETTER HIGH NA -19B5 1990 ; [.32A6.0020.0002][.32C7.0020.0002] # -19B6 1990 ; [.32A6.0020.0002][.32C8.0020.0002] # -19B7 1990 ; [.32A6.0020.0002][.32C9.0020.0002] # -19BA 1990 ; [.32A6.0020.0002][.32CC.0020.0002] # -1991 ; [.32A7.0020.0002] # NEW TAI LUE LETTER LOW TA -19B5 1991 ; [.32A7.0020.0002][.32C7.0020.0002] # -19B6 1991 ; [.32A7.0020.0002][.32C8.0020.0002] # -19B7 1991 ; [.32A7.0020.0002][.32C9.0020.0002] # -19BA 1991 ; [.32A7.0020.0002][.32CC.0020.0002] # -1992 ; [.32A8.0020.0002] # NEW TAI LUE LETTER LOW THA -19B5 1992 ; [.32A8.0020.0002][.32C7.0020.0002] # -19B6 1992 ; [.32A8.0020.0002][.32C8.0020.0002] # -19B7 1992 ; [.32A8.0020.0002][.32C9.0020.0002] # -19BA 1992 ; [.32A8.0020.0002][.32CC.0020.0002] # -1993 ; [.32A9.0020.0002] # NEW TAI LUE LETTER LOW NA -19B5 1993 ; [.32A9.0020.0002][.32C7.0020.0002] # -19B6 1993 ; [.32A9.0020.0002][.32C8.0020.0002] # -19B7 1993 ; [.32A9.0020.0002][.32C9.0020.0002] # -19BA 1993 ; [.32A9.0020.0002][.32CC.0020.0002] # -1994 ; [.32AA.0020.0002] # NEW TAI LUE LETTER HIGH PA -19B5 1994 ; [.32AA.0020.0002][.32C7.0020.0002] # -19B6 1994 ; [.32AA.0020.0002][.32C8.0020.0002] # -19B7 1994 ; [.32AA.0020.0002][.32C9.0020.0002] # -19BA 1994 ; [.32AA.0020.0002][.32CC.0020.0002] # -1995 ; [.32AB.0020.0002] # NEW TAI LUE LETTER HIGH PHA -19B5 1995 ; [.32AB.0020.0002][.32C7.0020.0002] # -19B6 1995 ; [.32AB.0020.0002][.32C8.0020.0002] # -19B7 1995 ; [.32AB.0020.0002][.32C9.0020.0002] # -19BA 1995 ; [.32AB.0020.0002][.32CC.0020.0002] # -1996 ; [.32AC.0020.0002] # NEW TAI LUE LETTER HIGH MA -19B5 1996 ; [.32AC.0020.0002][.32C7.0020.0002] # -19B6 1996 ; [.32AC.0020.0002][.32C8.0020.0002] # -19B7 1996 ; [.32AC.0020.0002][.32C9.0020.0002] # -19BA 1996 ; [.32AC.0020.0002][.32CC.0020.0002] # -1997 ; [.32AD.0020.0002] # NEW TAI LUE LETTER LOW PA -19B5 1997 ; [.32AD.0020.0002][.32C7.0020.0002] # -19B6 1997 ; [.32AD.0020.0002][.32C8.0020.0002] # -19B7 1997 ; [.32AD.0020.0002][.32C9.0020.0002] # -19BA 1997 ; [.32AD.0020.0002][.32CC.0020.0002] # -1998 ; [.32AE.0020.0002] # NEW TAI LUE LETTER LOW PHA -19B5 1998 ; [.32AE.0020.0002][.32C7.0020.0002] # -19B6 1998 ; [.32AE.0020.0002][.32C8.0020.0002] # -19B7 1998 ; [.32AE.0020.0002][.32C9.0020.0002] # -19BA 1998 ; [.32AE.0020.0002][.32CC.0020.0002] # -1999 ; [.32AF.0020.0002] # NEW TAI LUE LETTER LOW MA -19B5 1999 ; [.32AF.0020.0002][.32C7.0020.0002] # -19B6 1999 ; [.32AF.0020.0002][.32C8.0020.0002] # -19B7 1999 ; [.32AF.0020.0002][.32C9.0020.0002] # -19BA 1999 ; [.32AF.0020.0002][.32CC.0020.0002] # -199A ; [.32B0.0020.0002] # NEW TAI LUE LETTER HIGH FA -19B5 199A ; [.32B0.0020.0002][.32C7.0020.0002] # -19B6 199A ; [.32B0.0020.0002][.32C8.0020.0002] # -19B7 199A ; [.32B0.0020.0002][.32C9.0020.0002] # -19BA 199A ; [.32B0.0020.0002][.32CC.0020.0002] # -199B ; [.32B1.0020.0002] # NEW TAI LUE LETTER HIGH VA -19B5 199B ; [.32B1.0020.0002][.32C7.0020.0002] # -19B6 199B ; [.32B1.0020.0002][.32C8.0020.0002] # -19B7 199B ; [.32B1.0020.0002][.32C9.0020.0002] # -19BA 199B ; [.32B1.0020.0002][.32CC.0020.0002] # -199C ; [.32B2.0020.0002] # NEW TAI LUE LETTER HIGH LA -19B5 199C ; [.32B2.0020.0002][.32C7.0020.0002] # -19B6 199C ; [.32B2.0020.0002][.32C8.0020.0002] # -19DE ; [.32B2.0020.0004][.32C8.0020.0004] # NEW TAI LUE SIGN LAE -19DF ; [.32B2.0020.0004][.32C8.0020.0004][.32D3.0020.0004] # NEW TAI LUE SIGN LAEV -19B7 199C ; [.32B2.0020.0002][.32C9.0020.0002] # -19BA 199C ; [.32B2.0020.0002][.32CC.0020.0002] # -199D ; [.32B3.0020.0002] # NEW TAI LUE LETTER LOW FA -19B5 199D ; [.32B3.0020.0002][.32C7.0020.0002] # -19B6 199D ; [.32B3.0020.0002][.32C8.0020.0002] # -19B7 199D ; [.32B3.0020.0002][.32C9.0020.0002] # -19BA 199D ; [.32B3.0020.0002][.32CC.0020.0002] # -199E ; [.32B4.0020.0002] # NEW TAI LUE LETTER LOW VA -19B5 199E ; [.32B4.0020.0002][.32C7.0020.0002] # -19B6 199E ; [.32B4.0020.0002][.32C8.0020.0002] # -19B7 199E ; [.32B4.0020.0002][.32C9.0020.0002] # -19BA 199E ; [.32B4.0020.0002][.32CC.0020.0002] # -199F ; [.32B5.0020.0002] # NEW TAI LUE LETTER LOW LA -19B5 199F ; [.32B5.0020.0002][.32C7.0020.0002] # -19B6 199F ; [.32B5.0020.0002][.32C8.0020.0002] # -19B7 199F ; [.32B5.0020.0002][.32C9.0020.0002] # -19BA 199F ; [.32B5.0020.0002][.32CC.0020.0002] # -19A0 ; [.32B6.0020.0002] # NEW TAI LUE LETTER HIGH HA -19B5 19A0 ; [.32B6.0020.0002][.32C7.0020.0002] # -19B6 19A0 ; [.32B6.0020.0002][.32C8.0020.0002] # -19B7 19A0 ; [.32B6.0020.0002][.32C9.0020.0002] # -19BA 19A0 ; [.32B6.0020.0002][.32CC.0020.0002] # -19A1 ; [.32B7.0020.0002] # NEW TAI LUE LETTER HIGH DA -19B5 19A1 ; [.32B7.0020.0002][.32C7.0020.0002] # -19B6 19A1 ; [.32B7.0020.0002][.32C8.0020.0002] # -19B7 19A1 ; [.32B7.0020.0002][.32C9.0020.0002] # -19BA 19A1 ; [.32B7.0020.0002][.32CC.0020.0002] # -19A2 ; [.32B8.0020.0002] # NEW TAI LUE LETTER HIGH BA -19B5 19A2 ; [.32B8.0020.0002][.32C7.0020.0002] # -19B6 19A2 ; [.32B8.0020.0002][.32C8.0020.0002] # -19B7 19A2 ; [.32B8.0020.0002][.32C9.0020.0002] # -19BA 19A2 ; [.32B8.0020.0002][.32CC.0020.0002] # -19A3 ; [.32B9.0020.0002] # NEW TAI LUE LETTER LOW HA -19B5 19A3 ; [.32B9.0020.0002][.32C7.0020.0002] # -19B6 19A3 ; [.32B9.0020.0002][.32C8.0020.0002] # -19B7 19A3 ; [.32B9.0020.0002][.32C9.0020.0002] # -19BA 19A3 ; [.32B9.0020.0002][.32CC.0020.0002] # -19A4 ; [.32BA.0020.0002] # NEW TAI LUE LETTER LOW DA -19B5 19A4 ; [.32BA.0020.0002][.32C7.0020.0002] # -19B6 19A4 ; [.32BA.0020.0002][.32C8.0020.0002] # -19B7 19A4 ; [.32BA.0020.0002][.32C9.0020.0002] # -19BA 19A4 ; [.32BA.0020.0002][.32CC.0020.0002] # -19A5 ; [.32BB.0020.0002] # NEW TAI LUE LETTER LOW BA -19B5 19A5 ; [.32BB.0020.0002][.32C7.0020.0002] # -19B6 19A5 ; [.32BB.0020.0002][.32C8.0020.0002] # -19B7 19A5 ; [.32BB.0020.0002][.32C9.0020.0002] # -19BA 19A5 ; [.32BB.0020.0002][.32CC.0020.0002] # -19A6 ; [.32BC.0020.0002] # NEW TAI LUE LETTER HIGH KVA -19B5 19A6 ; [.32BC.0020.0002][.32C7.0020.0002] # -19B6 19A6 ; [.32BC.0020.0002][.32C8.0020.0002] # -19B7 19A6 ; [.32BC.0020.0002][.32C9.0020.0002] # -19BA 19A6 ; [.32BC.0020.0002][.32CC.0020.0002] # -19A7 ; [.32BD.0020.0002] # NEW TAI LUE LETTER HIGH XVA -19B5 19A7 ; [.32BD.0020.0002][.32C7.0020.0002] # -19B6 19A7 ; [.32BD.0020.0002][.32C8.0020.0002] # -19B7 19A7 ; [.32BD.0020.0002][.32C9.0020.0002] # -19BA 19A7 ; [.32BD.0020.0002][.32CC.0020.0002] # -19A8 ; [.32BE.0020.0002] # NEW TAI LUE LETTER LOW KVA -19B5 19A8 ; [.32BE.0020.0002][.32C7.0020.0002] # -19B6 19A8 ; [.32BE.0020.0002][.32C8.0020.0002] # -19B7 19A8 ; [.32BE.0020.0002][.32C9.0020.0002] # -19BA 19A8 ; [.32BE.0020.0002][.32CC.0020.0002] # -19A9 ; [.32BF.0020.0002] # NEW TAI LUE LETTER LOW XVA -19B5 19A9 ; [.32BF.0020.0002][.32C7.0020.0002] # -19B6 19A9 ; [.32BF.0020.0002][.32C8.0020.0002] # -19B7 19A9 ; [.32BF.0020.0002][.32C9.0020.0002] # -19BA 19A9 ; [.32BF.0020.0002][.32CC.0020.0002] # -19AA ; [.32C0.0020.0002] # NEW TAI LUE LETTER HIGH SUA -19B5 19AA ; [.32C0.0020.0002][.32C7.0020.0002] # -19B6 19AA ; [.32C0.0020.0002][.32C8.0020.0002] # -19B7 19AA ; [.32C0.0020.0002][.32C9.0020.0002] # -19BA 19AA ; [.32C0.0020.0002][.32CC.0020.0002] # -19AB ; [.32C1.0020.0002] # NEW TAI LUE LETTER LOW SUA -19B5 19AB ; [.32C1.0020.0002][.32C7.0020.0002] # -19B6 19AB ; [.32C1.0020.0002][.32C8.0020.0002] # -19B7 19AB ; [.32C1.0020.0002][.32C9.0020.0002] # -19BA 19AB ; [.32C1.0020.0002][.32CC.0020.0002] # -19B0 ; [.32C2.0020.0002] # NEW TAI LUE VOWEL SIGN VOWEL SHORTENER -19B1 ; [.32C3.0020.0002] # NEW TAI LUE VOWEL SIGN AA -19B2 ; [.32C4.0020.0002] # NEW TAI LUE VOWEL SIGN II -19B3 ; [.32C5.0020.0002] # NEW TAI LUE VOWEL SIGN U -19B4 ; [.32C6.0020.0002] # NEW TAI LUE VOWEL SIGN UU -19B5 ; [.32C7.0020.0002] # NEW TAI LUE VOWEL SIGN E -19B6 ; [.32C8.0020.0002] # NEW TAI LUE VOWEL SIGN AE -19B7 ; [.32C9.0020.0002] # NEW TAI LUE VOWEL SIGN O -19B8 ; [.32CA.0020.0002] # NEW TAI LUE VOWEL SIGN OA -19B9 ; [.32CB.0020.0002] # NEW TAI LUE VOWEL SIGN UE -19BA ; [.32CC.0020.0002] # NEW TAI LUE VOWEL SIGN AY -19BB ; [.32CD.0020.0002] # NEW TAI LUE VOWEL SIGN AAY -19BC ; [.32CE.0020.0002] # NEW TAI LUE VOWEL SIGN UY -19BD ; [.32CF.0020.0002] # NEW TAI LUE VOWEL SIGN OY -19BE ; [.32D0.0020.0002] # NEW TAI LUE VOWEL SIGN OAY -19BF ; [.32D1.0020.0002] # NEW TAI LUE VOWEL SIGN UEY -19C0 ; [.32D2.0020.0002] # NEW TAI LUE VOWEL SIGN IY -19C1 ; [.32D3.0020.0002] # NEW TAI LUE LETTER FINAL V -19C2 ; [.32D4.0020.0002] # NEW TAI LUE LETTER FINAL NG -19C3 ; [.32D5.0020.0002] # NEW TAI LUE LETTER FINAL N -19C4 ; [.32D6.0020.0002] # NEW TAI LUE LETTER FINAL M -19C5 ; [.32D7.0020.0002] # NEW TAI LUE LETTER FINAL K -19C6 ; [.32D8.0020.0002] # NEW TAI LUE LETTER FINAL D -19C7 ; [.32D9.0020.0002] # NEW TAI LUE LETTER FINAL B -19C8 ; [.32DA.0020.0002] # NEW TAI LUE TONE MARK-1 -19C9 ; [.32DB.0020.0002] # NEW TAI LUE TONE MARK-2 -1A20 ; [.32DC.0020.0002] # TAI THAM LETTER HIGH KA -1A21 ; [.32DD.0020.0002] # TAI THAM LETTER HIGH KHA -1A22 ; [.32DE.0020.0002] # TAI THAM LETTER HIGH KXA -1A23 ; [.32DF.0020.0002] # TAI THAM LETTER LOW KA -1A24 ; [.32E0.0020.0002] # TAI THAM LETTER LOW KXA -1A25 ; [.32E1.0020.0002] # TAI THAM LETTER LOW KHA -1A26 ; [.32E2.0020.0002] # TAI THAM LETTER NGA -1A58 ; [.32E2.0020.0004] # TAI THAM SIGN MAI KANG LAI -1A59 ; [.32E2.0020.0004] # TAI THAM CONSONANT SIGN FINAL NGA -1A27 ; [.32E3.0020.0002] # TAI THAM LETTER HIGH CA -1A28 ; [.32E4.0020.0002] # TAI THAM LETTER HIGH CHA -1A29 ; [.32E5.0020.0002] # TAI THAM LETTER LOW CA -1A2A ; [.32E6.0020.0002] # TAI THAM LETTER LOW SA -1A2B ; [.32E7.0020.0002] # TAI THAM LETTER LOW CHA -1A2C ; [.32E8.0020.0002] # TAI THAM LETTER NYA -1A2D ; [.32E9.0020.0002] # TAI THAM LETTER RATA -1A2E ; [.32EA.0020.0002] # TAI THAM LETTER HIGH RATHA -1A2F ; [.32EB.0020.0002] # TAI THAM LETTER DA -1A30 ; [.32EC.0020.0002] # TAI THAM LETTER LOW RATHA -1A31 ; [.32ED.0020.0002] # TAI THAM LETTER RANA -1A32 ; [.32EE.0020.0002] # TAI THAM LETTER HIGH TA -1A33 ; [.32EF.0020.0002] # TAI THAM LETTER HIGH THA -1A34 ; [.32F0.0020.0002] # TAI THAM LETTER LOW TA -1A35 ; [.32F1.0020.0002] # TAI THAM LETTER LOW THA -1A36 ; [.32F2.0020.0002] # TAI THAM LETTER NA -1A37 ; [.32F3.0020.0002] # TAI THAM LETTER BA -1A38 ; [.32F4.0020.0002] # TAI THAM LETTER HIGH PA -1A39 ; [.32F5.0020.0002] # TAI THAM LETTER HIGH PHA -1A3A ; [.32F6.0020.0002] # TAI THAM LETTER HIGH FA -1A3B ; [.32F7.0020.0002] # TAI THAM LETTER LOW PA -1A5A ; [.32F7.0020.0004] # TAI THAM CONSONANT SIGN LOW PA -1A5B ; [.32F7.0020.0004] # TAI THAM CONSONANT SIGN HIGH RATHA OR LOW PA -1A3C ; [.32F8.0020.0002] # TAI THAM LETTER LOW FA -1A3D ; [.32F9.0020.0002] # TAI THAM LETTER LOW PHA -1A3E ; [.32FA.0020.0002] # TAI THAM LETTER MA -1A3F ; [.32FB.0020.0002] # TAI THAM LETTER LOW YA -1A40 ; [.32FC.0020.0002] # TAI THAM LETTER HIGH YA -1A41 ; [.32FD.0020.0002] # TAI THAM LETTER RA -1A42 ; [.32FE.0020.0002] # TAI THAM LETTER RUE -1A43 ; [.32FF.0020.0002] # TAI THAM LETTER LA -1A44 ; [.3300.0020.0002] # TAI THAM LETTER LUE -1A45 ; [.3301.0020.0002] # TAI THAM LETTER WA -1A46 ; [.3302.0020.0002] # TAI THAM LETTER HIGH SHA -1A54 ; [.3302.0020.0004][.3328.0020.0004][.3302.0020.0004] # TAI THAM LETTER GREAT SA -1A47 ; [.3303.0020.0002] # TAI THAM LETTER HIGH SSA -1A48 ; [.3304.0020.0002] # TAI THAM LETTER HIGH SA -1A49 ; [.3305.0020.0002] # TAI THAM LETTER HIGH HA -1A4A ; [.3306.0020.0002] # TAI THAM LETTER LLA -1A4B ; [.3307.0020.0002] # TAI THAM LETTER A -1A4C ; [.3308.0020.0002] # TAI THAM LETTER LOW HA -1A53 ; [.3309.0020.0002] # TAI THAM LETTER LAE -1A6B ; [.330A.0020.0002] # TAI THAM VOWEL SIGN O -1A55 ; [.330B.0020.0002] # TAI THAM CONSONANT SIGN MEDIAL RA -1A56 ; [.330C.0020.0002] # TAI THAM CONSONANT SIGN MEDIAL LA -1A57 ; [.330D.0020.0002] # TAI THAM CONSONANT SIGN LA TANG LAI -1A5C ; [.330E.0020.0002] # TAI THAM CONSONANT SIGN MA -1A5D ; [.330F.0020.0002] # TAI THAM CONSONANT SIGN BA -1A5E ; [.3310.0020.0002] # TAI THAM CONSONANT SIGN SA -1A4D ; [.3311.0020.0002] # TAI THAM LETTER I -1A4E ; [.3312.0020.0002] # TAI THAM LETTER II -1A4F ; [.3313.0020.0002] # TAI THAM LETTER U -1A50 ; [.3314.0020.0002] # TAI THAM LETTER UU -1A51 ; [.3315.0020.0002] # TAI THAM LETTER EE -1A52 ; [.3316.0020.0002] # TAI THAM LETTER OO -1A61 ; [.3317.0020.0002] # TAI THAM VOWEL SIGN A -1A6C ; [.3318.0020.0002] # TAI THAM VOWEL SIGN OA BELOW -1A62 ; [.3319.0020.0002] # TAI THAM VOWEL SIGN MAI SAT -1A63 ; [.331A.0020.0002] # TAI THAM VOWEL SIGN AA -1A64 ; [.331A.0020.0004] # TAI THAM VOWEL SIGN TALL AA -1A65 ; [.331B.0020.0002] # TAI THAM VOWEL SIGN I -1A66 ; [.331C.0020.0002] # TAI THAM VOWEL SIGN II -1A67 ; [.331D.0020.0002] # TAI THAM VOWEL SIGN UE -1A68 ; [.331E.0020.0002] # TAI THAM VOWEL SIGN UUE -1A69 ; [.331F.0020.0002] # TAI THAM VOWEL SIGN U -1A6A ; [.3320.0020.0002] # TAI THAM VOWEL SIGN UU -1A6E ; [.3321.0020.0002] # TAI THAM VOWEL SIGN E -1A6F ; [.3322.0020.0002] # TAI THAM VOWEL SIGN AE -1A73 ; [.3323.0020.0002] # TAI THAM VOWEL SIGN OA ABOVE -1A70 ; [.3324.0020.0002] # TAI THAM VOWEL SIGN OO -1A71 ; [.3325.0020.0002] # TAI THAM VOWEL SIGN AI -1A72 ; [.3326.0020.0002] # TAI THAM VOWEL SIGN THAM AI -1A6D ; [.3327.0020.0002] # TAI THAM VOWEL SIGN OY -1A60 ; [.3328.0020.0002] # TAI THAM SIGN SAKOT -AA00 ; [.3329.0020.0002] # CHAM LETTER A -AA01 ; [.332A.0020.0002] # CHAM LETTER I -AA02 ; [.332B.0020.0002] # CHAM LETTER U -AA03 ; [.332C.0020.0002] # CHAM LETTER E -AA04 ; [.332D.0020.0002] # CHAM LETTER AI -AA05 ; [.332E.0020.0002] # CHAM LETTER O -AA06 ; [.332F.0020.0002] # CHAM LETTER KA -AA07 ; [.3330.0020.0002] # CHAM LETTER KHA -AA08 ; [.3331.0020.0002] # CHAM LETTER GA -AA09 ; [.3332.0020.0002] # CHAM LETTER GHA -AA0A ; [.3333.0020.0002] # CHAM LETTER NGUE -AA0B ; [.3334.0020.0002] # CHAM LETTER NGA -AA0C ; [.3335.0020.0002] # CHAM LETTER CHA -AA0D ; [.3336.0020.0002] # CHAM LETTER CHHA -AA0E ; [.3337.0020.0002] # CHAM LETTER JA -AA0F ; [.3338.0020.0002] # CHAM LETTER JHA -AA10 ; [.3339.0020.0002] # CHAM LETTER NHUE -AA11 ; [.333A.0020.0002] # CHAM LETTER NHA -AA12 ; [.333B.0020.0002] # CHAM LETTER NHJA -AA13 ; [.333C.0020.0002] # CHAM LETTER TA -AA14 ; [.333D.0020.0002] # CHAM LETTER THA -AA15 ; [.333E.0020.0002] # CHAM LETTER DA -AA16 ; [.333F.0020.0002] # CHAM LETTER DHA -AA17 ; [.3340.0020.0002] # CHAM LETTER NUE -AA18 ; [.3341.0020.0002] # CHAM LETTER NA -AA19 ; [.3342.0020.0002] # CHAM LETTER DDA -AA1A ; [.3343.0020.0002] # CHAM LETTER PA -AA1B ; [.3344.0020.0002] # CHAM LETTER PPA -AA1C ; [.3345.0020.0002] # CHAM LETTER PHA -AA1D ; [.3346.0020.0002] # CHAM LETTER BA -AA1E ; [.3347.0020.0002] # CHAM LETTER BHA -AA1F ; [.3348.0020.0002] # CHAM LETTER MUE -AA20 ; [.3349.0020.0002] # CHAM LETTER MA -AA21 ; [.334A.0020.0002] # CHAM LETTER BBA -AA22 ; [.334B.0020.0002] # CHAM LETTER YA -AA23 ; [.334C.0020.0002] # CHAM LETTER RA -AA24 ; [.334D.0020.0002] # CHAM LETTER LA -AA25 ; [.334E.0020.0002] # CHAM LETTER VA -AA26 ; [.334F.0020.0002] # CHAM LETTER SSA -AA27 ; [.3350.0020.0002] # CHAM LETTER SA -AA28 ; [.3351.0020.0002] # CHAM LETTER HA -AA33 ; [.3352.0020.0002] # CHAM CONSONANT SIGN YA -AA34 ; [.3353.0020.0002] # CHAM CONSONANT SIGN RA -AA35 ; [.3354.0020.0002] # CHAM CONSONANT SIGN LA -AA36 ; [.3355.0020.0002] # CHAM CONSONANT SIGN WA -AA29 ; [.3356.0020.0002] # CHAM VOWEL SIGN AA -AA2A ; [.3357.0020.0002] # CHAM VOWEL SIGN I -AA2B ; [.3358.0020.0002] # CHAM VOWEL SIGN II -AA2C ; [.3359.0020.0002] # CHAM VOWEL SIGN EI -AA2D ; [.335A.0020.0002] # CHAM VOWEL SIGN U -AA2E ; [.335B.0020.0002] # CHAM VOWEL SIGN OE -AA2F ; [.335C.0020.0002] # CHAM VOWEL SIGN O -AA30 ; [.335D.0020.0002] # CHAM VOWEL SIGN AI -AA31 ; [.335E.0020.0002] # CHAM VOWEL SIGN AU -AA32 ; [.335F.0020.0002] # CHAM VOWEL SIGN UE -AA40 ; [.3360.0020.0002] # CHAM LETTER FINAL K -AA41 ; [.3361.0020.0002] # CHAM LETTER FINAL G -AA42 ; [.3362.0020.0002] # CHAM LETTER FINAL NG -AA43 ; [.3363.0020.0002] # CHAM CONSONANT SIGN FINAL NG -AA44 ; [.3364.0020.0002] # CHAM LETTER FINAL CH -AA45 ; [.3365.0020.0002] # CHAM LETTER FINAL T -AA46 ; [.3366.0020.0002] # CHAM LETTER FINAL N -AA47 ; [.3367.0020.0002] # CHAM LETTER FINAL P -AA48 ; [.3368.0020.0002] # CHAM LETTER FINAL Y -AA49 ; [.3369.0020.0002] # CHAM LETTER FINAL R -AA4A ; [.336A.0020.0002] # CHAM LETTER FINAL L -AA4B ; [.336B.0020.0002] # CHAM LETTER FINAL SS -AA4C ; [.336C.0020.0002] # CHAM CONSONANT SIGN FINAL M -AA4D ; [.336D.0020.0002] # CHAM CONSONANT SIGN FINAL H -1B05 ; [.336E.0020.0002] # BALINESE LETTER AKARA -1B06 ; [.336F.0020.0002] # BALINESE LETTER AKARA TEDUNG -1B05 1B35 ; [.336F.0020.0002] # BALINESE LETTER AKARA TEDUNG -1B07 ; [.3370.0020.0002] # BALINESE LETTER IKARA -1B08 ; [.3371.0020.0002] # BALINESE LETTER IKARA TEDUNG -1B07 1B35 ; [.3371.0020.0002] # BALINESE LETTER IKARA TEDUNG -1B09 ; [.3372.0020.0002] # BALINESE LETTER UKARA -1B0A ; [.3373.0020.0002] # BALINESE LETTER UKARA TEDUNG -1B09 1B35 ; [.3373.0020.0002] # BALINESE LETTER UKARA TEDUNG -1B0B ; [.3374.0020.0002] # BALINESE LETTER RA REPA -1B0C ; [.3375.0020.0002] # BALINESE LETTER RA REPA TEDUNG -1B0B 1B35 ; [.3375.0020.0002] # BALINESE LETTER RA REPA TEDUNG -1B0D ; [.3376.0020.0002] # BALINESE LETTER LA LENGA -1B0E ; [.3377.0020.0002] # BALINESE LETTER LA LENGA TEDUNG -1B0D 1B35 ; [.3377.0020.0002] # BALINESE LETTER LA LENGA TEDUNG -1B0F ; [.3378.0020.0002] # BALINESE LETTER EKARA -1B10 ; [.3379.0020.0002] # BALINESE LETTER AIKARA -1B11 ; [.337A.0020.0002] # BALINESE LETTER OKARA -1B12 ; [.337B.0020.0002] # BALINESE LETTER OKARA TEDUNG -1B11 1B35 ; [.337B.0020.0002] # BALINESE LETTER OKARA TEDUNG -1B13 ; [.337C.0020.0002] # BALINESE LETTER KA -1B45 ; [.337D.0020.0002] # BALINESE LETTER KAF SASAK -1B46 ; [.337E.0020.0002] # BALINESE LETTER KHOT SASAK -1B14 ; [.337F.0020.0002] # BALINESE LETTER KA MAHAPRANA -1B15 ; [.3380.0020.0002] # BALINESE LETTER GA -1B16 ; [.3381.0020.0002] # BALINESE LETTER GA GORA -1B17 ; [.3382.0020.0002] # BALINESE LETTER NGA -1B18 ; [.3383.0020.0002] # BALINESE LETTER CA -1B19 ; [.3384.0020.0002] # BALINESE LETTER CA LACA -1B1A ; [.3385.0020.0002] # BALINESE LETTER JA -1B1B ; [.3386.0020.0002] # BALINESE LETTER JA JERA -1B1C ; [.3387.0020.0002] # BALINESE LETTER NYA -1B1D ; [.3388.0020.0002] # BALINESE LETTER TA LATIK -1B1E ; [.3389.0020.0002] # BALINESE LETTER TA MURDA MAHAPRANA -1B1F ; [.338A.0020.0002] # BALINESE LETTER DA MURDA ALPAPRANA -1B20 ; [.338B.0020.0002] # BALINESE LETTER DA MURDA MAHAPRANA -1B21 ; [.338C.0020.0002] # BALINESE LETTER NA RAMBAT -1B22 ; [.338D.0020.0002] # BALINESE LETTER TA -1B47 ; [.338E.0020.0002] # BALINESE LETTER TZIR SASAK -1B23 ; [.338F.0020.0002] # BALINESE LETTER TA TAWA -1B24 ; [.3390.0020.0002] # BALINESE LETTER DA -1B25 ; [.3391.0020.0002] # BALINESE LETTER DA MADU -1B26 ; [.3392.0020.0002] # BALINESE LETTER NA -1B27 ; [.3393.0020.0002] # BALINESE LETTER PA -1B48 ; [.3394.0020.0002] # BALINESE LETTER EF SASAK -1B28 ; [.3395.0020.0002] # BALINESE LETTER PA KAPAL -1B29 ; [.3396.0020.0002] # BALINESE LETTER BA -1B2A ; [.3397.0020.0002] # BALINESE LETTER BA KEMBANG -1B2B ; [.3398.0020.0002] # BALINESE LETTER MA -1B2C ; [.3399.0020.0002] # BALINESE LETTER YA -1B2D ; [.339A.0020.0002] # BALINESE LETTER RA -1B2E ; [.339B.0020.0002] # BALINESE LETTER LA -1B2F ; [.339C.0020.0002] # BALINESE LETTER WA -1B49 ; [.339D.0020.0002] # BALINESE LETTER VE SASAK -1B30 ; [.339E.0020.0002] # BALINESE LETTER SA SAGA -1B31 ; [.339F.0020.0002] # BALINESE LETTER SA SAPA -1B32 ; [.33A0.0020.0002] # BALINESE LETTER SA -1B4A ; [.33A1.0020.0002] # BALINESE LETTER ZAL SASAK -1B4B ; [.33A2.0020.0002] # BALINESE LETTER ASYURA SASAK -1B33 ; [.33A3.0020.0002] # BALINESE LETTER HA -1B35 ; [.33A4.0020.0002] # BALINESE VOWEL SIGN TEDUNG -1B36 ; [.33A5.0020.0002] # BALINESE VOWEL SIGN ULU -1B37 ; [.33A6.0020.0002] # BALINESE VOWEL SIGN ULU SARI -1B38 ; [.33A7.0020.0002] # BALINESE VOWEL SIGN SUKU -1B39 ; [.33A8.0020.0002] # BALINESE VOWEL SIGN SUKU ILUT -1B3A ; [.33A9.0020.0002] # BALINESE VOWEL SIGN RA REPA -1B3B ; [.33AA.0020.0002] # BALINESE VOWEL SIGN RA REPA TEDUNG -1B3A 1B35 ; [.33AA.0020.0002] # BALINESE VOWEL SIGN RA REPA TEDUNG -1B3C ; [.33AB.0020.0002] # BALINESE VOWEL SIGN LA LENGA -1B3D ; [.33AC.0020.0002] # BALINESE VOWEL SIGN LA LENGA TEDUNG -1B3C 1B35 ; [.33AC.0020.0002] # BALINESE VOWEL SIGN LA LENGA TEDUNG -1B3E ; [.33AD.0020.0002] # BALINESE VOWEL SIGN TALING -1B3F ; [.33AE.0020.0002] # BALINESE VOWEL SIGN TALING REPA -1B40 ; [.33AF.0020.0002] # BALINESE VOWEL SIGN TALING TEDUNG -1B3E 1B35 ; [.33AF.0020.0002] # BALINESE VOWEL SIGN TALING TEDUNG -1B41 ; [.33B0.0020.0002] # BALINESE VOWEL SIGN TALING REPA TEDUNG -1B3F 1B35 ; [.33B0.0020.0002] # BALINESE VOWEL SIGN TALING REPA TEDUNG -1B42 ; [.33B1.0020.0002] # BALINESE VOWEL SIGN PEPET -1B43 ; [.33B2.0020.0002] # BALINESE VOWEL SIGN PEPET TEDUNG -1B42 1B35 ; [.33B2.0020.0002] # BALINESE VOWEL SIGN PEPET TEDUNG -1B44 ; [.33B3.0020.0002] # BALINESE ADEG ADEG -A984 ; [.33B4.0020.0002] # JAVANESE LETTER A -A985 ; [.33B5.0020.0002] # JAVANESE LETTER I KAWI -A986 ; [.33B6.0020.0002] # JAVANESE LETTER I -A987 ; [.33B7.0020.0002] # JAVANESE LETTER II -A988 ; [.33B8.0020.0002] # JAVANESE LETTER U -A989 ; [.33B9.0020.0002] # JAVANESE LETTER PA CEREK -A98A ; [.33BA.0020.0002] # JAVANESE LETTER NGA LELET -A98B ; [.33BB.0020.0002] # JAVANESE LETTER NGA LELET RASWADI -A98C ; [.33BC.0020.0002] # JAVANESE LETTER E -A98D ; [.33BD.0020.0002] # JAVANESE LETTER AI -A98E ; [.33BE.0020.0002] # JAVANESE LETTER O -A98F ; [.33BF.0020.0002] # JAVANESE LETTER KA -A990 ; [.33C0.0020.0002] # JAVANESE LETTER KA SASAK -A991 ; [.33C1.0020.0002] # JAVANESE LETTER KA MURDA -A992 ; [.33C2.0020.0002] # JAVANESE LETTER GA -A993 ; [.33C3.0020.0002] # JAVANESE LETTER GA MURDA -A994 ; [.33C4.0020.0002] # JAVANESE LETTER NGA -A995 ; [.33C5.0020.0002] # JAVANESE LETTER CA -A996 ; [.33C6.0020.0002] # JAVANESE LETTER CA MURDA -A997 ; [.33C7.0020.0002] # JAVANESE LETTER JA -A998 ; [.33C8.0020.0002] # JAVANESE LETTER NYA MURDA -A999 ; [.33C9.0020.0002] # JAVANESE LETTER JA MAHAPRANA -A99A ; [.33CA.0020.0002] # JAVANESE LETTER NYA -A99B ; [.33CB.0020.0002] # JAVANESE LETTER TTA -A99C ; [.33CC.0020.0002] # JAVANESE LETTER TTA MAHAPRANA -A99D ; [.33CD.0020.0002] # JAVANESE LETTER DDA -A99E ; [.33CE.0020.0002] # JAVANESE LETTER DDA MAHAPRANA -A99F ; [.33CF.0020.0002] # JAVANESE LETTER NA MURDA -A9A0 ; [.33D0.0020.0002] # JAVANESE LETTER TA -A9A1 ; [.33D1.0020.0002] # JAVANESE LETTER TA MURDA -A9A2 ; [.33D2.0020.0002] # JAVANESE LETTER DA -A9A3 ; [.33D3.0020.0002] # JAVANESE LETTER DA MAHAPRANA -A9A4 ; [.33D4.0020.0002] # JAVANESE LETTER NA -A9A5 ; [.33D5.0020.0002] # JAVANESE LETTER PA -A9A6 ; [.33D6.0020.0002] # JAVANESE LETTER PA MURDA -A9A7 ; [.33D7.0020.0002] # JAVANESE LETTER BA -A9A8 ; [.33D8.0020.0002] # JAVANESE LETTER BA MURDA -A9A9 ; [.33D9.0020.0002] # JAVANESE LETTER MA -A9AA ; [.33DA.0020.0002] # JAVANESE LETTER YA -A9BE ; [.33DB.0020.0002] # JAVANESE CONSONANT SIGN PENGKAL -A9AB ; [.33DC.0020.0002] # JAVANESE LETTER RA -A9AC ; [.33DC.0020.0004] # JAVANESE LETTER RA AGUNG -A9BF ; [.33DD.0020.0002] # JAVANESE CONSONANT SIGN CAKRA -A9AD ; [.33DE.0020.0002] # JAVANESE LETTER LA -A9AE ; [.33DF.0020.0002] # JAVANESE LETTER WA -A9AF ; [.33E0.0020.0002] # JAVANESE LETTER SA MURDA -A9B0 ; [.33E1.0020.0002] # JAVANESE LETTER SA MAHAPRANA -A9B1 ; [.33E2.0020.0002] # JAVANESE LETTER SA -A9B2 ; [.33E3.0020.0002] # JAVANESE LETTER HA -A9B4 ; [.33E4.0020.0002] # JAVANESE VOWEL SIGN TARUNG -A9BC ; [.33E5.0020.0002] # JAVANESE VOWEL SIGN PEPET -A9B6 ; [.33E6.0020.0002] # JAVANESE VOWEL SIGN WULU -A9B7 ; [.33E7.0020.0002] # JAVANESE VOWEL SIGN WULU MELIK -A9B8 ; [.33E8.0020.0002] # JAVANESE VOWEL SIGN SUKU -A9B9 ; [.33E9.0020.0002] # JAVANESE VOWEL SIGN SUKU MENDUT -A9BD ; [.33EA.0020.0002] # JAVANESE CONSONANT SIGN KERET -A9BA ; [.33EB.0020.0002] # JAVANESE VOWEL SIGN TALING -A9BB ; [.33EC.0020.0002] # JAVANESE VOWEL SIGN DIRGA MURE -A9B5 ; [.33ED.0020.0002] # JAVANESE VOWEL SIGN TOLONG -A9C0 ; [.33EE.0020.0002] # JAVANESE PANGKON -1880 ; [.33EF.0020.0002] # MONGOLIAN LETTER ALI GALI ANUSVARA ONE -1881 ; [.33F0.0020.0002] # MONGOLIAN LETTER ALI GALI VISARGA ONE -1882 ; [.33F1.0020.0002] # MONGOLIAN LETTER ALI GALI DAMARU -1883 ; [.33F2.0020.0002] # MONGOLIAN LETTER ALI GALI UBADAMA -1884 ; [.33F3.0020.0002] # MONGOLIAN LETTER ALI GALI INVERTED UBADAMA -1885 ; [.33F4.0020.0002] # MONGOLIAN LETTER ALI GALI BALUDA -1886 ; [.33F5.0020.0002] # MONGOLIAN LETTER ALI GALI THREE BALUDA -1843 ; [.33F6.0020.0002] # MONGOLIAN LETTER TODO LONG VOWEL SIGN -1820 ; [.33F7.0020.0002] # MONGOLIAN LETTER A -1887 ; [.33F8.0020.0002] # MONGOLIAN LETTER ALI GALI A -1821 ; [.33F9.0020.0002] # MONGOLIAN LETTER E -1844 ; [.33FA.0020.0002] # MONGOLIAN LETTER TODO E -185D ; [.33FB.0020.0002] # MONGOLIAN LETTER SIBE E -1822 ; [.33FC.0020.0002] # MONGOLIAN LETTER I -1845 ; [.33FD.0020.0002] # MONGOLIAN LETTER TODO I -185E ; [.33FE.0020.0002] # MONGOLIAN LETTER SIBE I -1873 ; [.33FF.0020.0002] # MONGOLIAN LETTER MANCHU I -1888 ; [.3400.0020.0002] # MONGOLIAN LETTER ALI GALI I -185F ; [.3401.0020.0002] # MONGOLIAN LETTER SIBE IY -1823 ; [.3402.0020.0002] # MONGOLIAN LETTER O -1846 ; [.3403.0020.0002] # MONGOLIAN LETTER TODO O -1824 ; [.3404.0020.0002] # MONGOLIAN LETTER U -1847 ; [.3405.0020.0002] # MONGOLIAN LETTER TODO U -1861 ; [.3406.0020.0002] # MONGOLIAN LETTER SIBE U -1825 ; [.3407.0020.0002] # MONGOLIAN LETTER OE -1848 ; [.3408.0020.0002] # MONGOLIAN LETTER TODO OE -1826 ; [.3409.0020.0002] # MONGOLIAN LETTER UE -1849 ; [.340A.0020.0002] # MONGOLIAN LETTER TODO UE -1860 ; [.340B.0020.0002] # MONGOLIAN LETTER SIBE UE -1827 ; [.340C.0020.0002] # MONGOLIAN LETTER EE -1828 ; [.340D.0020.0002] # MONGOLIAN LETTER NA -1829 ; [.340E.0020.0002] # MONGOLIAN LETTER ANG -184A ; [.340F.0020.0002] # MONGOLIAN LETTER TODO ANG -1862 ; [.3410.0020.0002] # MONGOLIAN LETTER SIBE ANG -188A ; [.3411.0020.0002] # MONGOLIAN LETTER ALI GALI NGA -189B ; [.3412.0020.0002] # MONGOLIAN LETTER MANCHU ALI GALI NGA -182A ; [.3413.0020.0002] # MONGOLIAN LETTER BA -184B ; [.3414.0020.0002] # MONGOLIAN LETTER TODO BA -182B ; [.3415.0020.0002] # MONGOLIAN LETTER PA -184C ; [.3416.0020.0002] # MONGOLIAN LETTER TODO PA -1866 ; [.3417.0020.0002] # MONGOLIAN LETTER SIBE PA -182C ; [.3418.0020.0002] # MONGOLIAN LETTER QA -184D ; [.3419.0020.0002] # MONGOLIAN LETTER TODO QA -182D ; [.341A.0020.0002] # MONGOLIAN LETTER GA -184E ; [.341B.0020.0002] # MONGOLIAN LETTER TODO GA -1864 ; [.341C.0020.0002] # MONGOLIAN LETTER SIBE GA -189A ; [.341D.0020.0002] # MONGOLIAN LETTER MANCHU ALI GALI GHA -1865 ; [.341E.0020.0002] # MONGOLIAN LETTER SIBE HA -182E ; [.341F.0020.0002] # MONGOLIAN LETTER MA -184F ; [.3420.0020.0002] # MONGOLIAN LETTER TODO MA -182F ; [.3421.0020.0002] # MONGOLIAN LETTER LA -1830 ; [.3422.0020.0002] # MONGOLIAN LETTER SA -1831 ; [.3423.0020.0002] # MONGOLIAN LETTER SHA -1867 ; [.3424.0020.0002] # MONGOLIAN LETTER SIBE SHA -189C ; [.3425.0020.0002] # MONGOLIAN LETTER MANCHU ALI GALI CA -189D ; [.3426.0020.0002] # MONGOLIAN LETTER MANCHU ALI GALI JHA -18A2 ; [.3427.0020.0002] # MONGOLIAN LETTER MANCHU ALI GALI SSA -18A4 ; [.3428.0020.0002] # MONGOLIAN LETTER MANCHU ALI GALI ZHA -18A5 ; [.3429.0020.0002] # MONGOLIAN LETTER MANCHU ALI GALI ZA -1832 ; [.342A.0020.0002] # MONGOLIAN LETTER TA -1850 ; [.342B.0020.0002] # MONGOLIAN LETTER TODO TA -1868 ; [.342C.0020.0002] # MONGOLIAN LETTER SIBE TA -1833 ; [.342D.0020.0002] # MONGOLIAN LETTER DA -1851 ; [.342E.0020.0002] # MONGOLIAN LETTER TODO DA -1869 ; [.342F.0020.0002] # MONGOLIAN LETTER SIBE DA -1834 ; [.3430.0020.0002] # MONGOLIAN LETTER CHA -1852 ; [.3431.0020.0002] # MONGOLIAN LETTER TODO CHA -1871 ; [.3432.0020.0002] # MONGOLIAN LETTER SIBE CHA -185C ; [.3433.0020.0002] # MONGOLIAN LETTER TODO DZA -188B ; [.3434.0020.0002] # MONGOLIAN LETTER ALI GALI CA -1835 ; [.3435.0020.0002] # MONGOLIAN LETTER JA -1853 ; [.3436.0020.0002] # MONGOLIAN LETTER TODO JA -186A ; [.3437.0020.0002] # MONGOLIAN LETTER SIBE JA -1877 ; [.3438.0020.0002] # MONGOLIAN LETTER MANCHU ZHA -1836 ; [.3439.0020.0002] # MONGOLIAN LETTER YA -1855 ; [.343A.0020.0002] # MONGOLIAN LETTER TODO YA -1872 ; [.343B.0020.0002] # MONGOLIAN LETTER SIBE ZHA -1837 ; [.343C.0020.0002] # MONGOLIAN LETTER RA -1875 ; [.343D.0020.0002] # MONGOLIAN LETTER MANCHU RA -1838 ; [.343E.0020.0002] # MONGOLIAN LETTER WA -1856 ; [.343F.0020.0002] # MONGOLIAN LETTER TODO WA -1839 ; [.3440.0020.0002] # MONGOLIAN LETTER FA -186B ; [.3441.0020.0002] # MONGOLIAN LETTER SIBE FA -1876 ; [.3442.0020.0002] # MONGOLIAN LETTER MANCHU FA -183A ; [.3443.0020.0002] # MONGOLIAN LETTER KA -1857 ; [.3444.0020.0002] # MONGOLIAN LETTER TODO KA -1863 ; [.3445.0020.0002] # MONGOLIAN LETTER SIBE KA -1874 ; [.3446.0020.0002] # MONGOLIAN LETTER MANCHU KA -1889 ; [.3447.0020.0002] # MONGOLIAN LETTER ALI GALI KA -183B ; [.3448.0020.0002] # MONGOLIAN LETTER KHA -183C ; [.3449.0020.0002] # MONGOLIAN LETTER TSA -1854 ; [.344A.0020.0002] # MONGOLIAN LETTER TODO TSA -186E ; [.344B.0020.0002] # MONGOLIAN LETTER SIBE TSA -183D ; [.344C.0020.0002] # MONGOLIAN LETTER ZA -186F ; [.344D.0020.0002] # MONGOLIAN LETTER SIBE ZA -1858 ; [.344E.0020.0002] # MONGOLIAN LETTER TODO GAA -186C ; [.344F.0020.0002] # MONGOLIAN LETTER SIBE GAA -183E ; [.3450.0020.0002] # MONGOLIAN LETTER HAA -1859 ; [.3451.0020.0002] # MONGOLIAN LETTER TODO HAA -186D ; [.3452.0020.0002] # MONGOLIAN LETTER SIBE HAA -183F ; [.3453.0020.0002] # MONGOLIAN LETTER ZRA -1840 ; [.3454.0020.0002] # MONGOLIAN LETTER LHA -1841 ; [.3455.0020.0002] # MONGOLIAN LETTER ZHI -1842 ; [.3456.0020.0002] # MONGOLIAN LETTER CHI -185A ; [.3457.0020.0002] # MONGOLIAN LETTER TODO JIA -185B ; [.3458.0020.0002] # MONGOLIAN LETTER TODO NIA -1870 ; [.3459.0020.0002] # MONGOLIAN LETTER SIBE RAA -188C ; [.345A.0020.0002] # MONGOLIAN LETTER ALI GALI TTA -189E ; [.345B.0020.0002] # MONGOLIAN LETTER MANCHU ALI GALI TTA -188D ; [.345C.0020.0002] # MONGOLIAN LETTER ALI GALI TTHA -188E ; [.345D.0020.0002] # MONGOLIAN LETTER ALI GALI DDA -189F ; [.345E.0020.0002] # MONGOLIAN LETTER MANCHU ALI GALI DDHA -188F ; [.345F.0020.0002] # MONGOLIAN LETTER ALI GALI NNA -1890 ; [.3460.0020.0002] # MONGOLIAN LETTER ALI GALI TA -1898 ; [.3461.0020.0002] # MONGOLIAN LETTER TODO ALI GALI TA -18A0 ; [.3462.0020.0002] # MONGOLIAN LETTER MANCHU ALI GALI TA -1891 ; [.3463.0020.0002] # MONGOLIAN LETTER ALI GALI DA -18A1 ; [.3464.0020.0002] # MONGOLIAN LETTER MANCHU ALI GALI DHA -1892 ; [.3465.0020.0002] # MONGOLIAN LETTER ALI GALI PA -1893 ; [.3466.0020.0002] # MONGOLIAN LETTER ALI GALI PHA -18A8 ; [.3467.0020.0002] # MONGOLIAN LETTER MANCHU ALI GALI BHA -1894 ; [.3468.0020.0002] # MONGOLIAN LETTER ALI GALI SSA -18A3 ; [.3469.0020.0002] # MONGOLIAN LETTER MANCHU ALI GALI CYA -1895 ; [.346A.0020.0002] # MONGOLIAN LETTER ALI GALI ZHA -1899 ; [.346B.0020.0002] # MONGOLIAN LETTER TODO ALI GALI ZHA -1896 ; [.346C.0020.0002] # MONGOLIAN LETTER ALI GALI ZA -1897 ; [.346D.0020.0002] # MONGOLIAN LETTER ALI GALI AH -18A6 ; [.346E.0020.0002] # MONGOLIAN LETTER ALI GALI HALF U -18A7 ; [.346F.0020.0002] # MONGOLIAN LETTER ALI GALI HALF YA -18AA ; [.3470.0020.0002] # MONGOLIAN LETTER MANCHU ALI GALI LHA -18A9 ; [.3471.0020.0002] # MONGOLIAN LETTER ALI GALI DAGALGA -1C5A ; [.3472.0020.0002] # OL CHIKI LETTER LA -1C5B ; [.3473.0020.0002] # OL CHIKI LETTER AT -1C5C ; [.3474.0020.0002] # OL CHIKI LETTER AG -1C5D ; [.3475.0020.0002] # OL CHIKI LETTER ANG -1C5E ; [.3476.0020.0002] # OL CHIKI LETTER AL -1C5F ; [.3477.0020.0002] # OL CHIKI LETTER LAA -1C60 ; [.3478.0020.0002] # OL CHIKI LETTER AAK -1C61 ; [.3479.0020.0002] # OL CHIKI LETTER AAJ -1C62 ; [.347A.0020.0002] # OL CHIKI LETTER AAM -1C63 ; [.347B.0020.0002] # OL CHIKI LETTER AAW -1C64 ; [.347C.0020.0002] # OL CHIKI LETTER LI -1C65 ; [.347D.0020.0002] # OL CHIKI LETTER IS -1C66 ; [.347E.0020.0002] # OL CHIKI LETTER IH -1C67 ; [.347F.0020.0002] # OL CHIKI LETTER INY -1C68 ; [.3480.0020.0002] # OL CHIKI LETTER IR -1C69 ; [.3481.0020.0002] # OL CHIKI LETTER LU -1C6A ; [.3482.0020.0002] # OL CHIKI LETTER UC -1C6B ; [.3483.0020.0002] # OL CHIKI LETTER UD -1C6C ; [.3484.0020.0002] # OL CHIKI LETTER UNN -1C6D ; [.3485.0020.0002] # OL CHIKI LETTER UY -1C6E ; [.3486.0020.0002] # OL CHIKI LETTER LE -1C6F ; [.3487.0020.0002] # OL CHIKI LETTER EP -1C70 ; [.3488.0020.0002] # OL CHIKI LETTER EDD -1C71 ; [.3489.0020.0002] # OL CHIKI LETTER EN -1C72 ; [.348A.0020.0002] # OL CHIKI LETTER ERR -1C73 ; [.348B.0020.0002] # OL CHIKI LETTER LO -1C74 ; [.348C.0020.0002] # OL CHIKI LETTER OTT -1C75 ; [.348D.0020.0002] # OL CHIKI LETTER OB -1C76 ; [.348E.0020.0002] # OL CHIKI LETTER OV -1C77 ; [.348F.0020.0002] # OL CHIKI LETTER OH -1C78 ; [.3490.0020.0002] # OL CHIKI MU TTUDDAG -1C79 ; [.3491.0020.0002] # OL CHIKI GAAHLAA TTUDDAAG -1C7A ; [.3492.0020.0002] # OL CHIKI MU-GAAHLAA TTUDDAAG -1C7B ; [.3493.0020.0002] # OL CHIKI RELAA -1C7C ; [.3494.0020.0002] # OL CHIKI PHAARKAA -1C7D ; [.3495.0020.0002] # OL CHIKI AHAD -AB70 ; [.3496.0020.0002] # CHEROKEE SMALL LETTER A -13A0 ; [.3496.0020.0008] # CHEROKEE LETTER A -AB71 ; [.3497.0020.0002] # CHEROKEE SMALL LETTER E -13A1 ; [.3497.0020.0008] # CHEROKEE LETTER E -AB72 ; [.3498.0020.0002] # CHEROKEE SMALL LETTER I -13A2 ; [.3498.0020.0008] # CHEROKEE LETTER I -AB73 ; [.3499.0020.0002] # CHEROKEE SMALL LETTER O -13A3 ; [.3499.0020.0008] # CHEROKEE LETTER O -AB74 ; [.349A.0020.0002] # CHEROKEE SMALL LETTER U -13A4 ; [.349A.0020.0008] # CHEROKEE LETTER U -AB75 ; [.349B.0020.0002] # CHEROKEE SMALL LETTER V -13A5 ; [.349B.0020.0008] # CHEROKEE LETTER V -AB76 ; [.349C.0020.0002] # CHEROKEE SMALL LETTER GA -13A6 ; [.349C.0020.0008] # CHEROKEE LETTER GA -AB77 ; [.349D.0020.0002] # CHEROKEE SMALL LETTER KA -13A7 ; [.349D.0020.0008] # CHEROKEE LETTER KA -AB78 ; [.349E.0020.0002] # CHEROKEE SMALL LETTER GE -13A8 ; [.349E.0020.0008] # CHEROKEE LETTER GE -AB79 ; [.349F.0020.0002] # CHEROKEE SMALL LETTER GI -13A9 ; [.349F.0020.0008] # CHEROKEE LETTER GI -AB7A ; [.34A0.0020.0002] # CHEROKEE SMALL LETTER GO -13AA ; [.34A0.0020.0008] # CHEROKEE LETTER GO -AB7B ; [.34A1.0020.0002] # CHEROKEE SMALL LETTER GU -13AB ; [.34A1.0020.0008] # CHEROKEE LETTER GU -AB7C ; [.34A2.0020.0002] # CHEROKEE SMALL LETTER GV -13AC ; [.34A2.0020.0008] # CHEROKEE LETTER GV -AB7D ; [.34A3.0020.0002] # CHEROKEE SMALL LETTER HA -13AD ; [.34A3.0020.0008] # CHEROKEE LETTER HA -AB7E ; [.34A4.0020.0002] # CHEROKEE SMALL LETTER HE -13AE ; [.34A4.0020.0008] # CHEROKEE LETTER HE -AB7F ; [.34A5.0020.0002] # CHEROKEE SMALL LETTER HI -13AF ; [.34A5.0020.0008] # CHEROKEE LETTER HI -AB80 ; [.34A6.0020.0002] # CHEROKEE SMALL LETTER HO -13B0 ; [.34A6.0020.0008] # CHEROKEE LETTER HO -AB81 ; [.34A7.0020.0002] # CHEROKEE SMALL LETTER HU -13B1 ; [.34A7.0020.0008] # CHEROKEE LETTER HU -AB82 ; [.34A8.0020.0002] # CHEROKEE SMALL LETTER HV -13B2 ; [.34A8.0020.0008] # CHEROKEE LETTER HV -AB83 ; [.34A9.0020.0002] # CHEROKEE SMALL LETTER LA -13B3 ; [.34A9.0020.0008] # CHEROKEE LETTER LA -AB84 ; [.34AA.0020.0002] # CHEROKEE SMALL LETTER LE -13B4 ; [.34AA.0020.0008] # CHEROKEE LETTER LE -AB85 ; [.34AB.0020.0002] # CHEROKEE SMALL LETTER LI -13B5 ; [.34AB.0020.0008] # CHEROKEE LETTER LI -AB86 ; [.34AC.0020.0002] # CHEROKEE SMALL LETTER LO -13B6 ; [.34AC.0020.0008] # CHEROKEE LETTER LO -AB87 ; [.34AD.0020.0002] # CHEROKEE SMALL LETTER LU -13B7 ; [.34AD.0020.0008] # CHEROKEE LETTER LU -AB88 ; [.34AE.0020.0002] # CHEROKEE SMALL LETTER LV -13B8 ; [.34AE.0020.0008] # CHEROKEE LETTER LV -AB89 ; [.34AF.0020.0002] # CHEROKEE SMALL LETTER MA -13B9 ; [.34AF.0020.0008] # CHEROKEE LETTER MA -AB8A ; [.34B0.0020.0002] # CHEROKEE SMALL LETTER ME -13BA ; [.34B0.0020.0008] # CHEROKEE LETTER ME -AB8B ; [.34B1.0020.0002] # CHEROKEE SMALL LETTER MI -13BB ; [.34B1.0020.0008] # CHEROKEE LETTER MI -AB8C ; [.34B2.0020.0002] # CHEROKEE SMALL LETTER MO -13BC ; [.34B2.0020.0008] # CHEROKEE LETTER MO -AB8D ; [.34B3.0020.0002] # CHEROKEE SMALL LETTER MU -13BD ; [.34B3.0020.0008] # CHEROKEE LETTER MU -AB8E ; [.34B4.0020.0002] # CHEROKEE SMALL LETTER NA -13BE ; [.34B4.0020.0008] # CHEROKEE LETTER NA -AB8F ; [.34B5.0020.0002] # CHEROKEE SMALL LETTER HNA -13BF ; [.34B5.0020.0008] # CHEROKEE LETTER HNA -AB90 ; [.34B6.0020.0002] # CHEROKEE SMALL LETTER NAH -13C0 ; [.34B6.0020.0008] # CHEROKEE LETTER NAH -AB91 ; [.34B7.0020.0002] # CHEROKEE SMALL LETTER NE -13C1 ; [.34B7.0020.0008] # CHEROKEE LETTER NE -AB92 ; [.34B8.0020.0002] # CHEROKEE SMALL LETTER NI -13C2 ; [.34B8.0020.0008] # CHEROKEE LETTER NI -AB93 ; [.34B9.0020.0002] # CHEROKEE SMALL LETTER NO -13C3 ; [.34B9.0020.0008] # CHEROKEE LETTER NO -AB94 ; [.34BA.0020.0002] # CHEROKEE SMALL LETTER NU -13C4 ; [.34BA.0020.0008] # CHEROKEE LETTER NU -AB95 ; [.34BB.0020.0002] # CHEROKEE SMALL LETTER NV -13C5 ; [.34BB.0020.0008] # CHEROKEE LETTER NV -AB96 ; [.34BC.0020.0002] # CHEROKEE SMALL LETTER QUA -13C6 ; [.34BC.0020.0008] # CHEROKEE LETTER QUA -AB97 ; [.34BD.0020.0002] # CHEROKEE SMALL LETTER QUE -13C7 ; [.34BD.0020.0008] # CHEROKEE LETTER QUE -AB98 ; [.34BE.0020.0002] # CHEROKEE SMALL LETTER QUI -13C8 ; [.34BE.0020.0008] # CHEROKEE LETTER QUI -AB99 ; [.34BF.0020.0002] # CHEROKEE SMALL LETTER QUO -13C9 ; [.34BF.0020.0008] # CHEROKEE LETTER QUO -AB9A ; [.34C0.0020.0002] # CHEROKEE SMALL LETTER QUU -13CA ; [.34C0.0020.0008] # CHEROKEE LETTER QUU -AB9B ; [.34C1.0020.0002] # CHEROKEE SMALL LETTER QUV -13CB ; [.34C1.0020.0008] # CHEROKEE LETTER QUV -AB9C ; [.34C2.0020.0002] # CHEROKEE SMALL LETTER SA -13CC ; [.34C2.0020.0008] # CHEROKEE LETTER SA -AB9D ; [.34C3.0020.0002] # CHEROKEE SMALL LETTER S -13CD ; [.34C3.0020.0008] # CHEROKEE LETTER S -AB9E ; [.34C4.0020.0002] # CHEROKEE SMALL LETTER SE -13CE ; [.34C4.0020.0008] # CHEROKEE LETTER SE -AB9F ; [.34C5.0020.0002] # CHEROKEE SMALL LETTER SI -13CF ; [.34C5.0020.0008] # CHEROKEE LETTER SI -ABA0 ; [.34C6.0020.0002] # CHEROKEE SMALL LETTER SO -13D0 ; [.34C6.0020.0008] # CHEROKEE LETTER SO -ABA1 ; [.34C7.0020.0002] # CHEROKEE SMALL LETTER SU -13D1 ; [.34C7.0020.0008] # CHEROKEE LETTER SU -ABA2 ; [.34C8.0020.0002] # CHEROKEE SMALL LETTER SV -13D2 ; [.34C8.0020.0008] # CHEROKEE LETTER SV -ABA3 ; [.34C9.0020.0002] # CHEROKEE SMALL LETTER DA -13D3 ; [.34C9.0020.0008] # CHEROKEE LETTER DA -ABA4 ; [.34CA.0020.0002] # CHEROKEE SMALL LETTER TA -13D4 ; [.34CA.0020.0008] # CHEROKEE LETTER TA -ABA5 ; [.34CB.0020.0002] # CHEROKEE SMALL LETTER DE -13D5 ; [.34CB.0020.0008] # CHEROKEE LETTER DE -ABA6 ; [.34CC.0020.0002] # CHEROKEE SMALL LETTER TE -13D6 ; [.34CC.0020.0008] # CHEROKEE LETTER TE -ABA7 ; [.34CD.0020.0002] # CHEROKEE SMALL LETTER DI -13D7 ; [.34CD.0020.0008] # CHEROKEE LETTER DI -ABA8 ; [.34CE.0020.0002] # CHEROKEE SMALL LETTER TI -13D8 ; [.34CE.0020.0008] # CHEROKEE LETTER TI -ABA9 ; [.34CF.0020.0002] # CHEROKEE SMALL LETTER DO -13D9 ; [.34CF.0020.0008] # CHEROKEE LETTER DO -ABAA ; [.34D0.0020.0002] # CHEROKEE SMALL LETTER DU -13DA ; [.34D0.0020.0008] # CHEROKEE LETTER DU -ABAB ; [.34D1.0020.0002] # CHEROKEE SMALL LETTER DV -13DB ; [.34D1.0020.0008] # CHEROKEE LETTER DV -ABAC ; [.34D2.0020.0002] # CHEROKEE SMALL LETTER DLA -13DC ; [.34D2.0020.0008] # CHEROKEE LETTER DLA -ABAD ; [.34D3.0020.0002] # CHEROKEE SMALL LETTER TLA -13DD ; [.34D3.0020.0008] # CHEROKEE LETTER TLA -ABAE ; [.34D4.0020.0002] # CHEROKEE SMALL LETTER TLE -13DE ; [.34D4.0020.0008] # CHEROKEE LETTER TLE -ABAF ; [.34D5.0020.0002] # CHEROKEE SMALL LETTER TLI -13DF ; [.34D5.0020.0008] # CHEROKEE LETTER TLI -ABB0 ; [.34D6.0020.0002] # CHEROKEE SMALL LETTER TLO -13E0 ; [.34D6.0020.0008] # CHEROKEE LETTER TLO -ABB1 ; [.34D7.0020.0002] # CHEROKEE SMALL LETTER TLU -13E1 ; [.34D7.0020.0008] # CHEROKEE LETTER TLU -ABB2 ; [.34D8.0020.0002] # CHEROKEE SMALL LETTER TLV -13E2 ; [.34D8.0020.0008] # CHEROKEE LETTER TLV -ABB3 ; [.34D9.0020.0002] # CHEROKEE SMALL LETTER TSA -13E3 ; [.34D9.0020.0008] # CHEROKEE LETTER TSA -ABB4 ; [.34DA.0020.0002] # CHEROKEE SMALL LETTER TSE -13E4 ; [.34DA.0020.0008] # CHEROKEE LETTER TSE -ABB5 ; [.34DB.0020.0002] # CHEROKEE SMALL LETTER TSI -13E5 ; [.34DB.0020.0008] # CHEROKEE LETTER TSI -ABB6 ; [.34DC.0020.0002] # CHEROKEE SMALL LETTER TSO -13E6 ; [.34DC.0020.0008] # CHEROKEE LETTER TSO -ABB7 ; [.34DD.0020.0002] # CHEROKEE SMALL LETTER TSU -13E7 ; [.34DD.0020.0008] # CHEROKEE LETTER TSU -ABB8 ; [.34DE.0020.0002] # CHEROKEE SMALL LETTER TSV -13E8 ; [.34DE.0020.0008] # CHEROKEE LETTER TSV -ABB9 ; [.34DF.0020.0002] # CHEROKEE SMALL LETTER WA -13E9 ; [.34DF.0020.0008] # CHEROKEE LETTER WA -ABBA ; [.34E0.0020.0002] # CHEROKEE SMALL LETTER WE -13EA ; [.34E0.0020.0008] # CHEROKEE LETTER WE -ABBB ; [.34E1.0020.0002] # CHEROKEE SMALL LETTER WI -13EB ; [.34E1.0020.0008] # CHEROKEE LETTER WI -ABBC ; [.34E2.0020.0002] # CHEROKEE SMALL LETTER WO -13EC ; [.34E2.0020.0008] # CHEROKEE LETTER WO -ABBD ; [.34E3.0020.0002] # CHEROKEE SMALL LETTER WU -13ED ; [.34E3.0020.0008] # CHEROKEE LETTER WU -ABBE ; [.34E4.0020.0002] # CHEROKEE SMALL LETTER WV -13EE ; [.34E4.0020.0008] # CHEROKEE LETTER WV -ABBF ; [.34E5.0020.0002] # CHEROKEE SMALL LETTER YA -13EF ; [.34E5.0020.0008] # CHEROKEE LETTER YA -13F8 ; [.34E6.0020.0002] # CHEROKEE SMALL LETTER YE -13F0 ; [.34E6.0020.0008] # CHEROKEE LETTER YE -13F9 ; [.34E7.0020.0002] # CHEROKEE SMALL LETTER YI -13F1 ; [.34E7.0020.0008] # CHEROKEE LETTER YI -13FA ; [.34E8.0020.0002] # CHEROKEE SMALL LETTER YO -13F2 ; [.34E8.0020.0008] # CHEROKEE LETTER YO -13FB ; [.34E9.0020.0002] # CHEROKEE SMALL LETTER YU -13F3 ; [.34E9.0020.0008] # CHEROKEE LETTER YU -13FC ; [.34EA.0020.0002] # CHEROKEE SMALL LETTER YV -13F4 ; [.34EA.0020.0008] # CHEROKEE LETTER YV -13FD ; [.34EB.0020.0002] # CHEROKEE SMALL LETTER MV -13F5 ; [.34EB.0020.0008] # CHEROKEE LETTER MV -104D8 ; [.34EC.0020.0002] # OSAGE SMALL LETTER A -104B0 ; [.34EC.0020.0008] # OSAGE CAPITAL LETTER A -104D9 ; [.34ED.0020.0002] # OSAGE SMALL LETTER AI -104B1 ; [.34ED.0020.0008] # OSAGE CAPITAL LETTER AI -104DA ; [.34EE.0020.0002] # OSAGE SMALL LETTER AIN -104B2 ; [.34EE.0020.0008] # OSAGE CAPITAL LETTER AIN -104DB ; [.34EF.0020.0002] # OSAGE SMALL LETTER AH -104B3 ; [.34EF.0020.0008] # OSAGE CAPITAL LETTER AH -104DC ; [.34F0.0020.0002] # OSAGE SMALL LETTER BRA -104B4 ; [.34F0.0020.0008] # OSAGE CAPITAL LETTER BRA -104DD ; [.34F1.0020.0002] # OSAGE SMALL LETTER CHA -104B5 ; [.34F1.0020.0008] # OSAGE CAPITAL LETTER CHA -104DE ; [.34F2.0020.0002] # OSAGE SMALL LETTER EHCHA -104B6 ; [.34F2.0020.0008] # OSAGE CAPITAL LETTER EHCHA -104DF ; [.34F3.0020.0002] # OSAGE SMALL LETTER E -104B7 ; [.34F3.0020.0008] # OSAGE CAPITAL LETTER E -104E0 ; [.34F4.0020.0002] # OSAGE SMALL LETTER EIN -104B8 ; [.34F4.0020.0008] # OSAGE CAPITAL LETTER EIN -104E1 ; [.34F5.0020.0002] # OSAGE SMALL LETTER HA -104B9 ; [.34F5.0020.0008] # OSAGE CAPITAL LETTER HA -104E2 ; [.34F6.0020.0002] # OSAGE SMALL LETTER HYA -104BA ; [.34F6.0020.0008] # OSAGE CAPITAL LETTER HYA -104E3 ; [.34F7.0020.0002] # OSAGE SMALL LETTER I -104BB ; [.34F7.0020.0008] # OSAGE CAPITAL LETTER I -104E4 ; [.34F8.0020.0002] # OSAGE SMALL LETTER KA -104BC ; [.34F8.0020.0008] # OSAGE CAPITAL LETTER KA -104E5 ; [.34F9.0020.0002] # OSAGE SMALL LETTER EHKA -104BD ; [.34F9.0020.0008] # OSAGE CAPITAL LETTER EHKA -104E6 ; [.34FA.0020.0002] # OSAGE SMALL LETTER KYA -104BE ; [.34FA.0020.0008] # OSAGE CAPITAL LETTER KYA -104E7 ; [.34FB.0020.0002] # OSAGE SMALL LETTER LA -104BF ; [.34FB.0020.0008] # OSAGE CAPITAL LETTER LA -104E8 ; [.34FC.0020.0002] # OSAGE SMALL LETTER MA -104C0 ; [.34FC.0020.0008] # OSAGE CAPITAL LETTER MA -104E9 ; [.34FD.0020.0002] # OSAGE SMALL LETTER NA -104C1 ; [.34FD.0020.0008] # OSAGE CAPITAL LETTER NA -104EA ; [.34FE.0020.0002] # OSAGE SMALL LETTER O -104C2 ; [.34FE.0020.0008] # OSAGE CAPITAL LETTER O -104EB ; [.34FF.0020.0002] # OSAGE SMALL LETTER OIN -104C3 ; [.34FF.0020.0008] # OSAGE CAPITAL LETTER OIN -104EC ; [.3500.0020.0002] # OSAGE SMALL LETTER PA -104C4 ; [.3500.0020.0008] # OSAGE CAPITAL LETTER PA -104ED ; [.3501.0020.0002] # OSAGE SMALL LETTER EHPA -104C5 ; [.3501.0020.0008] # OSAGE CAPITAL LETTER EHPA -104EE ; [.3502.0020.0002] # OSAGE SMALL LETTER SA -104C6 ; [.3502.0020.0008] # OSAGE CAPITAL LETTER SA -104EF ; [.3503.0020.0002] # OSAGE SMALL LETTER SHA -104C7 ; [.3503.0020.0008] # OSAGE CAPITAL LETTER SHA -104F0 ; [.3504.0020.0002] # OSAGE SMALL LETTER TA -104C8 ; [.3504.0020.0008] # OSAGE CAPITAL LETTER TA -104F1 ; [.3505.0020.0002] # OSAGE SMALL LETTER EHTA -104C9 ; [.3505.0020.0008] # OSAGE CAPITAL LETTER EHTA -104F2 ; [.3506.0020.0002] # OSAGE SMALL LETTER TSA -104CA ; [.3506.0020.0008] # OSAGE CAPITAL LETTER TSA -104F3 ; [.3507.0020.0002] # OSAGE SMALL LETTER EHTSA -104CB ; [.3507.0020.0008] # OSAGE CAPITAL LETTER EHTSA -104F4 ; [.3508.0020.0002] # OSAGE SMALL LETTER TSHA -104CC ; [.3508.0020.0008] # OSAGE CAPITAL LETTER TSHA -104F5 ; [.3509.0020.0002] # OSAGE SMALL LETTER DHA -104CD ; [.3509.0020.0008] # OSAGE CAPITAL LETTER DHA -104F6 ; [.350A.0020.0002] # OSAGE SMALL LETTER U -104CE ; [.350A.0020.0008] # OSAGE CAPITAL LETTER U -104F7 ; [.350B.0020.0002] # OSAGE SMALL LETTER WA -104CF ; [.350B.0020.0008] # OSAGE CAPITAL LETTER WA -104F8 ; [.350C.0020.0002] # OSAGE SMALL LETTER KHA -104D0 ; [.350C.0020.0008] # OSAGE CAPITAL LETTER KHA -104F9 ; [.350D.0020.0002] # OSAGE SMALL LETTER GHA -104D1 ; [.350D.0020.0008] # OSAGE CAPITAL LETTER GHA -104FA ; [.350E.0020.0002] # OSAGE SMALL LETTER ZA -104D2 ; [.350E.0020.0008] # OSAGE CAPITAL LETTER ZA -104FB ; [.350F.0020.0002] # OSAGE SMALL LETTER ZHA -104D3 ; [.350F.0020.0008] # OSAGE CAPITAL LETTER ZHA -1401 ; [.3510.0020.0002] # CANADIAN SYLLABICS E -1402 ; [.3511.0020.0002] # CANADIAN SYLLABICS AAI -1403 ; [.3512.0020.0002] # CANADIAN SYLLABICS I -1404 ; [.3513.0020.0002] # CANADIAN SYLLABICS II -1405 ; [.3514.0020.0002] # CANADIAN SYLLABICS O -1406 ; [.3515.0020.0002] # CANADIAN SYLLABICS OO -1407 ; [.3516.0020.0002] # CANADIAN SYLLABICS Y-CREE OO -1408 ; [.3517.0020.0002] # CANADIAN SYLLABICS CARRIER EE -1409 ; [.3518.0020.0002] # CANADIAN SYLLABICS CARRIER I -140A ; [.3519.0020.0002] # CANADIAN SYLLABICS A -140B ; [.351A.0020.0002] # CANADIAN SYLLABICS AA -140C ; [.351B.0020.0002] # CANADIAN SYLLABICS WE -140D ; [.351C.0020.0002] # CANADIAN SYLLABICS WEST-CREE WE -140E ; [.351D.0020.0002] # CANADIAN SYLLABICS WI -140F ; [.351E.0020.0002] # CANADIAN SYLLABICS WEST-CREE WI -1410 ; [.351F.0020.0002] # CANADIAN SYLLABICS WII -1411 ; [.3520.0020.0002] # CANADIAN SYLLABICS WEST-CREE WII -1412 ; [.3521.0020.0002] # CANADIAN SYLLABICS WO -1413 ; [.3522.0020.0002] # CANADIAN SYLLABICS WEST-CREE WO -1414 ; [.3523.0020.0002] # CANADIAN SYLLABICS WOO -1415 ; [.3524.0020.0002] # CANADIAN SYLLABICS WEST-CREE WOO -1416 ; [.3525.0020.0002] # CANADIAN SYLLABICS NASKAPI WOO -1417 ; [.3526.0020.0002] # CANADIAN SYLLABICS WA -1418 ; [.3527.0020.0002] # CANADIAN SYLLABICS WEST-CREE WA -1419 ; [.3528.0020.0002] # CANADIAN SYLLABICS WAA -141A ; [.3529.0020.0002] # CANADIAN SYLLABICS WEST-CREE WAA -141B ; [.352A.0020.0002] # CANADIAN SYLLABICS NASKAPI WAA -141C ; [.352B.0020.0002] # CANADIAN SYLLABICS AI -141D ; [.352C.0020.0002] # CANADIAN SYLLABICS Y-CREE W -141E ; [.352D.0020.0002] # CANADIAN SYLLABICS GLOTTAL STOP -141F ; [.352E.0020.0002] # CANADIAN SYLLABICS FINAL ACUTE -1420 ; [.352F.0020.0002] # CANADIAN SYLLABICS FINAL GRAVE -1421 ; [.3530.0020.0002] # CANADIAN SYLLABICS FINAL BOTTOM HALF RING -1422 ; [.3531.0020.0002] # CANADIAN SYLLABICS FINAL TOP HALF RING -1423 ; [.3532.0020.0002] # CANADIAN SYLLABICS FINAL RIGHT HALF RING -1424 ; [.3533.0020.0002] # CANADIAN SYLLABICS FINAL RING -1425 ; [.3534.0020.0002] # CANADIAN SYLLABICS FINAL DOUBLE ACUTE -1426 ; [.3535.0020.0002] # CANADIAN SYLLABICS FINAL DOUBLE SHORT VERTICAL STROKES -1427 ; [.3536.0020.0002] # CANADIAN SYLLABICS FINAL MIDDLE DOT -1428 ; [.3537.0020.0002] # CANADIAN SYLLABICS FINAL SHORT HORIZONTAL STROKE -1429 ; [.3538.0020.0002] # CANADIAN SYLLABICS FINAL PLUS -142A ; [.3539.0020.0002] # CANADIAN SYLLABICS FINAL DOWN TACK -142B ; [.353A.0020.0002] # CANADIAN SYLLABICS EN -142C ; [.353B.0020.0002] # CANADIAN SYLLABICS IN -142D ; [.353C.0020.0002] # CANADIAN SYLLABICS ON -142E ; [.353D.0020.0002] # CANADIAN SYLLABICS AN -142F ; [.353E.0020.0002] # CANADIAN SYLLABICS PE -1430 ; [.353F.0020.0002] # CANADIAN SYLLABICS PAAI -1431 ; [.3540.0020.0002] # CANADIAN SYLLABICS PI -1432 ; [.3541.0020.0002] # CANADIAN SYLLABICS PII -1433 ; [.3542.0020.0002] # CANADIAN SYLLABICS PO -1434 ; [.3543.0020.0002] # CANADIAN SYLLABICS POO -1435 ; [.3544.0020.0002] # CANADIAN SYLLABICS Y-CREE POO -1436 ; [.3545.0020.0002] # CANADIAN SYLLABICS CARRIER HEE -1437 ; [.3546.0020.0002] # CANADIAN SYLLABICS CARRIER HI -1438 ; [.3547.0020.0002] # CANADIAN SYLLABICS PA -1439 ; [.3548.0020.0002] # CANADIAN SYLLABICS PAA -143A ; [.3549.0020.0002] # CANADIAN SYLLABICS PWE -143B ; [.354A.0020.0002] # CANADIAN SYLLABICS WEST-CREE PWE -143C ; [.354B.0020.0002] # CANADIAN SYLLABICS PWI -143D ; [.354C.0020.0002] # CANADIAN SYLLABICS WEST-CREE PWI -143E ; [.354D.0020.0002] # CANADIAN SYLLABICS PWII -143F ; [.354E.0020.0002] # CANADIAN SYLLABICS WEST-CREE PWII -1440 ; [.354F.0020.0002] # CANADIAN SYLLABICS PWO -1441 ; [.3550.0020.0002] # CANADIAN SYLLABICS WEST-CREE PWO -1442 ; [.3551.0020.0002] # CANADIAN SYLLABICS PWOO -1443 ; [.3552.0020.0002] # CANADIAN SYLLABICS WEST-CREE PWOO -1444 ; [.3553.0020.0002] # CANADIAN SYLLABICS PWA -1445 ; [.3554.0020.0002] # CANADIAN SYLLABICS WEST-CREE PWA -1446 ; [.3555.0020.0002] # CANADIAN SYLLABICS PWAA -1447 ; [.3556.0020.0002] # CANADIAN SYLLABICS WEST-CREE PWAA -1448 ; [.3557.0020.0002] # CANADIAN SYLLABICS Y-CREE PWAA -1449 ; [.3558.0020.0002] # CANADIAN SYLLABICS P -144A ; [.3559.0020.0002] # CANADIAN SYLLABICS WEST-CREE P -144B ; [.355A.0020.0002] # CANADIAN SYLLABICS CARRIER H -144C ; [.355B.0020.0002] # CANADIAN SYLLABICS TE -144D ; [.355C.0020.0002] # CANADIAN SYLLABICS TAAI -144E ; [.355D.0020.0002] # CANADIAN SYLLABICS TI -144F ; [.355E.0020.0002] # CANADIAN SYLLABICS TII -1450 ; [.355F.0020.0002] # CANADIAN SYLLABICS TO -1451 ; [.3560.0020.0002] # CANADIAN SYLLABICS TOO -1452 ; [.3561.0020.0002] # CANADIAN SYLLABICS Y-CREE TOO -1453 ; [.3562.0020.0002] # CANADIAN SYLLABICS CARRIER DEE -1454 ; [.3563.0020.0002] # CANADIAN SYLLABICS CARRIER DI -1455 ; [.3564.0020.0002] # CANADIAN SYLLABICS TA -1456 ; [.3565.0020.0002] # CANADIAN SYLLABICS TAA -1457 ; [.3566.0020.0002] # CANADIAN SYLLABICS TWE -1458 ; [.3567.0020.0002] # CANADIAN SYLLABICS WEST-CREE TWE -1459 ; [.3568.0020.0002] # CANADIAN SYLLABICS TWI -145A ; [.3569.0020.0002] # CANADIAN SYLLABICS WEST-CREE TWI -145B ; [.356A.0020.0002] # CANADIAN SYLLABICS TWII -145C ; [.356B.0020.0002] # CANADIAN SYLLABICS WEST-CREE TWII -145D ; [.356C.0020.0002] # CANADIAN SYLLABICS TWO -145E ; [.356D.0020.0002] # CANADIAN SYLLABICS WEST-CREE TWO -145F ; [.356E.0020.0002] # CANADIAN SYLLABICS TWOO -1460 ; [.356F.0020.0002] # CANADIAN SYLLABICS WEST-CREE TWOO -1461 ; [.3570.0020.0002] # CANADIAN SYLLABICS TWA -1462 ; [.3571.0020.0002] # CANADIAN SYLLABICS WEST-CREE TWA -1463 ; [.3572.0020.0002] # CANADIAN SYLLABICS TWAA -1464 ; [.3573.0020.0002] # CANADIAN SYLLABICS WEST-CREE TWAA -1465 ; [.3574.0020.0002] # CANADIAN SYLLABICS NASKAPI TWAA -1466 ; [.3575.0020.0002] # CANADIAN SYLLABICS T -1467 ; [.3576.0020.0002] # CANADIAN SYLLABICS TTE -1468 ; [.3577.0020.0002] # CANADIAN SYLLABICS TTI -1469 ; [.3578.0020.0002] # CANADIAN SYLLABICS TTO -146A ; [.3579.0020.0002] # CANADIAN SYLLABICS TTA -146B ; [.357A.0020.0002] # CANADIAN SYLLABICS KE -146C ; [.357B.0020.0002] # CANADIAN SYLLABICS KAAI -146D ; [.357C.0020.0002] # CANADIAN SYLLABICS KI -146E ; [.357D.0020.0002] # CANADIAN SYLLABICS KII -146F ; [.357E.0020.0002] # CANADIAN SYLLABICS KO -1470 ; [.357F.0020.0002] # CANADIAN SYLLABICS KOO -1471 ; [.3580.0020.0002] # CANADIAN SYLLABICS Y-CREE KOO -1472 ; [.3581.0020.0002] # CANADIAN SYLLABICS KA -1473 ; [.3582.0020.0002] # CANADIAN SYLLABICS KAA -1474 ; [.3583.0020.0002] # CANADIAN SYLLABICS KWE -1475 ; [.3584.0020.0002] # CANADIAN SYLLABICS WEST-CREE KWE -1476 ; [.3585.0020.0002] # CANADIAN SYLLABICS KWI -1477 ; [.3586.0020.0002] # CANADIAN SYLLABICS WEST-CREE KWI -1478 ; [.3587.0020.0002] # CANADIAN SYLLABICS KWII -1479 ; [.3588.0020.0002] # CANADIAN SYLLABICS WEST-CREE KWII -147A ; [.3589.0020.0002] # CANADIAN SYLLABICS KWO -147B ; [.358A.0020.0002] # CANADIAN SYLLABICS WEST-CREE KWO -147C ; [.358B.0020.0002] # CANADIAN SYLLABICS KWOO -147D ; [.358C.0020.0002] # CANADIAN SYLLABICS WEST-CREE KWOO -147E ; [.358D.0020.0002] # CANADIAN SYLLABICS KWA -147F ; [.358E.0020.0002] # CANADIAN SYLLABICS WEST-CREE KWA -1480 ; [.358F.0020.0002] # CANADIAN SYLLABICS KWAA -1481 ; [.3590.0020.0002] # CANADIAN SYLLABICS WEST-CREE KWAA -1482 ; [.3591.0020.0002] # CANADIAN SYLLABICS NASKAPI KWAA -1483 ; [.3592.0020.0002] # CANADIAN SYLLABICS K -1484 ; [.3593.0020.0002] # CANADIAN SYLLABICS KW -1485 ; [.3594.0020.0002] # CANADIAN SYLLABICS SOUTH-SLAVEY KEH -1486 ; [.3595.0020.0002] # CANADIAN SYLLABICS SOUTH-SLAVEY KIH -1487 ; [.3596.0020.0002] # CANADIAN SYLLABICS SOUTH-SLAVEY KOH -1488 ; [.3597.0020.0002] # CANADIAN SYLLABICS SOUTH-SLAVEY KAH -1489 ; [.3598.0020.0002] # CANADIAN SYLLABICS CE -148A ; [.3599.0020.0002] # CANADIAN SYLLABICS CAAI -148B ; [.359A.0020.0002] # CANADIAN SYLLABICS CI -148C ; [.359B.0020.0002] # CANADIAN SYLLABICS CII -148D ; [.359C.0020.0002] # CANADIAN SYLLABICS CO -148E ; [.359D.0020.0002] # CANADIAN SYLLABICS COO -148F ; [.359E.0020.0002] # CANADIAN SYLLABICS Y-CREE COO -1490 ; [.359F.0020.0002] # CANADIAN SYLLABICS CA -1491 ; [.35A0.0020.0002] # CANADIAN SYLLABICS CAA -1492 ; [.35A1.0020.0002] # CANADIAN SYLLABICS CWE -1493 ; [.35A2.0020.0002] # CANADIAN SYLLABICS WEST-CREE CWE -1494 ; [.35A3.0020.0002] # CANADIAN SYLLABICS CWI -1495 ; [.35A4.0020.0002] # CANADIAN SYLLABICS WEST-CREE CWI -1496 ; [.35A5.0020.0002] # CANADIAN SYLLABICS CWII -1497 ; [.35A6.0020.0002] # CANADIAN SYLLABICS WEST-CREE CWII -1498 ; [.35A7.0020.0002] # CANADIAN SYLLABICS CWO -1499 ; [.35A8.0020.0002] # CANADIAN SYLLABICS WEST-CREE CWO -149A ; [.35A9.0020.0002] # CANADIAN SYLLABICS CWOO -149B ; [.35AA.0020.0002] # CANADIAN SYLLABICS WEST-CREE CWOO -149C ; [.35AB.0020.0002] # CANADIAN SYLLABICS CWA -149D ; [.35AC.0020.0002] # CANADIAN SYLLABICS WEST-CREE CWA -149E ; [.35AD.0020.0002] # CANADIAN SYLLABICS CWAA -149F ; [.35AE.0020.0002] # CANADIAN SYLLABICS WEST-CREE CWAA -14A0 ; [.35AF.0020.0002] # CANADIAN SYLLABICS NASKAPI CWAA -14A1 ; [.35B0.0020.0002] # CANADIAN SYLLABICS C -14A2 ; [.35B1.0020.0002] # CANADIAN SYLLABICS SAYISI TH -14A3 ; [.35B2.0020.0002] # CANADIAN SYLLABICS ME -14A4 ; [.35B3.0020.0002] # CANADIAN SYLLABICS MAAI -14A5 ; [.35B4.0020.0002] # CANADIAN SYLLABICS MI -14A6 ; [.35B5.0020.0002] # CANADIAN SYLLABICS MII -14A7 ; [.35B6.0020.0002] # CANADIAN SYLLABICS MO -14A8 ; [.35B7.0020.0002] # CANADIAN SYLLABICS MOO -14A9 ; [.35B8.0020.0002] # CANADIAN SYLLABICS Y-CREE MOO -14AA ; [.35B9.0020.0002] # CANADIAN SYLLABICS MA -14AB ; [.35BA.0020.0002] # CANADIAN SYLLABICS MAA -14AC ; [.35BB.0020.0002] # CANADIAN SYLLABICS MWE -14AD ; [.35BC.0020.0002] # CANADIAN SYLLABICS WEST-CREE MWE -14AE ; [.35BD.0020.0002] # CANADIAN SYLLABICS MWI -14AF ; [.35BE.0020.0002] # CANADIAN SYLLABICS WEST-CREE MWI -14B0 ; [.35BF.0020.0002] # CANADIAN SYLLABICS MWII -14B1 ; [.35C0.0020.0002] # CANADIAN SYLLABICS WEST-CREE MWII -14B2 ; [.35C1.0020.0002] # CANADIAN SYLLABICS MWO -14B3 ; [.35C2.0020.0002] # CANADIAN SYLLABICS WEST-CREE MWO -14B4 ; [.35C3.0020.0002] # CANADIAN SYLLABICS MWOO -14B5 ; [.35C4.0020.0002] # CANADIAN SYLLABICS WEST-CREE MWOO -14B6 ; [.35C5.0020.0002] # CANADIAN SYLLABICS MWA -14B7 ; [.35C6.0020.0002] # CANADIAN SYLLABICS WEST-CREE MWA -14B8 ; [.35C7.0020.0002] # CANADIAN SYLLABICS MWAA -14B9 ; [.35C8.0020.0002] # CANADIAN SYLLABICS WEST-CREE MWAA -14BA ; [.35C9.0020.0002] # CANADIAN SYLLABICS NASKAPI MWAA -14BB ; [.35CA.0020.0002] # CANADIAN SYLLABICS M -14BC ; [.35CB.0020.0002] # CANADIAN SYLLABICS WEST-CREE M -14BD ; [.35CC.0020.0002] # CANADIAN SYLLABICS MH -14BE ; [.35CD.0020.0002] # CANADIAN SYLLABICS ATHAPASCAN M -14BF ; [.35CE.0020.0002] # CANADIAN SYLLABICS SAYISI M -14C0 ; [.35CF.0020.0002] # CANADIAN SYLLABICS NE -14C1 ; [.35D0.0020.0002] # CANADIAN SYLLABICS NAAI -14C2 ; [.35D1.0020.0002] # CANADIAN SYLLABICS NI -14C3 ; [.35D2.0020.0002] # CANADIAN SYLLABICS NII -14C4 ; [.35D3.0020.0002] # CANADIAN SYLLABICS NO -14C5 ; [.35D4.0020.0002] # CANADIAN SYLLABICS NOO -14C6 ; [.35D5.0020.0002] # CANADIAN SYLLABICS Y-CREE NOO -14C7 ; [.35D6.0020.0002] # CANADIAN SYLLABICS NA -14C8 ; [.35D7.0020.0002] # CANADIAN SYLLABICS NAA -14C9 ; [.35D8.0020.0002] # CANADIAN SYLLABICS NWE -14CA ; [.35D9.0020.0002] # CANADIAN SYLLABICS WEST-CREE NWE -14CB ; [.35DA.0020.0002] # CANADIAN SYLLABICS NWA -14CC ; [.35DB.0020.0002] # CANADIAN SYLLABICS WEST-CREE NWA -14CD ; [.35DC.0020.0002] # CANADIAN SYLLABICS NWAA -14CE ; [.35DD.0020.0002] # CANADIAN SYLLABICS WEST-CREE NWAA -14CF ; [.35DE.0020.0002] # CANADIAN SYLLABICS NASKAPI NWAA -14D0 ; [.35DF.0020.0002] # CANADIAN SYLLABICS N -14D1 ; [.35E0.0020.0002] # CANADIAN SYLLABICS CARRIER NG -14D2 ; [.35E1.0020.0002] # CANADIAN SYLLABICS NH -14D3 ; [.35E2.0020.0002] # CANADIAN SYLLABICS LE -14D4 ; [.35E3.0020.0002] # CANADIAN SYLLABICS LAAI -14D5 ; [.35E4.0020.0002] # CANADIAN SYLLABICS LI -14D6 ; [.35E5.0020.0002] # CANADIAN SYLLABICS LII -14D7 ; [.35E6.0020.0002] # CANADIAN SYLLABICS LO -14D8 ; [.35E7.0020.0002] # CANADIAN SYLLABICS LOO -14D9 ; [.35E8.0020.0002] # CANADIAN SYLLABICS Y-CREE LOO -14DA ; [.35E9.0020.0002] # CANADIAN SYLLABICS LA -14DB ; [.35EA.0020.0002] # CANADIAN SYLLABICS LAA -14DC ; [.35EB.0020.0002] # CANADIAN SYLLABICS LWE -14DD ; [.35EC.0020.0002] # CANADIAN SYLLABICS WEST-CREE LWE -14DE ; [.35ED.0020.0002] # CANADIAN SYLLABICS LWI -14DF ; [.35EE.0020.0002] # CANADIAN SYLLABICS WEST-CREE LWI -14E0 ; [.35EF.0020.0002] # CANADIAN SYLLABICS LWII -14E1 ; [.35F0.0020.0002] # CANADIAN SYLLABICS WEST-CREE LWII -14E2 ; [.35F1.0020.0002] # CANADIAN SYLLABICS LWO -14E3 ; [.35F2.0020.0002] # CANADIAN SYLLABICS WEST-CREE LWO -14E4 ; [.35F3.0020.0002] # CANADIAN SYLLABICS LWOO -14E5 ; [.35F4.0020.0002] # CANADIAN SYLLABICS WEST-CREE LWOO -14E6 ; [.35F5.0020.0002] # CANADIAN SYLLABICS LWA -14E7 ; [.35F6.0020.0002] # CANADIAN SYLLABICS WEST-CREE LWA -14E8 ; [.35F7.0020.0002] # CANADIAN SYLLABICS LWAA -14E9 ; [.35F8.0020.0002] # CANADIAN SYLLABICS WEST-CREE LWAA -14EA ; [.35F9.0020.0002] # CANADIAN SYLLABICS L -14EB ; [.35FA.0020.0002] # CANADIAN SYLLABICS WEST-CREE L -14EC ; [.35FB.0020.0002] # CANADIAN SYLLABICS MEDIAL L -14ED ; [.35FC.0020.0002] # CANADIAN SYLLABICS SE -14EE ; [.35FD.0020.0002] # CANADIAN SYLLABICS SAAI -14EF ; [.35FE.0020.0002] # CANADIAN SYLLABICS SI -14F0 ; [.35FF.0020.0002] # CANADIAN SYLLABICS SII -14F1 ; [.3600.0020.0002] # CANADIAN SYLLABICS SO -14F2 ; [.3601.0020.0002] # CANADIAN SYLLABICS SOO -14F3 ; [.3602.0020.0002] # CANADIAN SYLLABICS Y-CREE SOO -14F4 ; [.3603.0020.0002] # CANADIAN SYLLABICS SA -14F5 ; [.3604.0020.0002] # CANADIAN SYLLABICS SAA -14F6 ; [.3605.0020.0002] # CANADIAN SYLLABICS SWE -14F7 ; [.3606.0020.0002] # CANADIAN SYLLABICS WEST-CREE SWE -14F8 ; [.3607.0020.0002] # CANADIAN SYLLABICS SWI -14F9 ; [.3608.0020.0002] # CANADIAN SYLLABICS WEST-CREE SWI -14FA ; [.3609.0020.0002] # CANADIAN SYLLABICS SWII -14FB ; [.360A.0020.0002] # CANADIAN SYLLABICS WEST-CREE SWII -14FC ; [.360B.0020.0002] # CANADIAN SYLLABICS SWO -14FD ; [.360C.0020.0002] # CANADIAN SYLLABICS WEST-CREE SWO -14FE ; [.360D.0020.0002] # CANADIAN SYLLABICS SWOO -14FF ; [.360E.0020.0002] # CANADIAN SYLLABICS WEST-CREE SWOO -1500 ; [.360F.0020.0002] # CANADIAN SYLLABICS SWA -1501 ; [.3610.0020.0002] # CANADIAN SYLLABICS WEST-CREE SWA -1502 ; [.3611.0020.0002] # CANADIAN SYLLABICS SWAA -1503 ; [.3612.0020.0002] # CANADIAN SYLLABICS WEST-CREE SWAA -1504 ; [.3613.0020.0002] # CANADIAN SYLLABICS NASKAPI SWAA -1505 ; [.3614.0020.0002] # CANADIAN SYLLABICS S -1506 ; [.3615.0020.0002] # CANADIAN SYLLABICS ATHAPASCAN S -1507 ; [.3616.0020.0002] # CANADIAN SYLLABICS SW -1508 ; [.3617.0020.0002] # CANADIAN SYLLABICS BLACKFOOT S -1509 ; [.3618.0020.0002] # CANADIAN SYLLABICS MOOSE-CREE SK -150A ; [.3619.0020.0002] # CANADIAN SYLLABICS NASKAPI SKW -150B ; [.361A.0020.0002] # CANADIAN SYLLABICS NASKAPI S-W -150C ; [.361B.0020.0002] # CANADIAN SYLLABICS NASKAPI SPWA -150D ; [.361C.0020.0002] # CANADIAN SYLLABICS NASKAPI STWA -150E ; [.361D.0020.0002] # CANADIAN SYLLABICS NASKAPI SKWA -150F ; [.361E.0020.0002] # CANADIAN SYLLABICS NASKAPI SCWA -1510 ; [.361F.0020.0002] # CANADIAN SYLLABICS SHE -1511 ; [.3620.0020.0002] # CANADIAN SYLLABICS SHI -1512 ; [.3621.0020.0002] # CANADIAN SYLLABICS SHII -1513 ; [.3622.0020.0002] # CANADIAN SYLLABICS SHO -1514 ; [.3623.0020.0002] # CANADIAN SYLLABICS SHOO -1515 ; [.3624.0020.0002] # CANADIAN SYLLABICS SHA -1516 ; [.3625.0020.0002] # CANADIAN SYLLABICS SHAA -1517 ; [.3626.0020.0002] # CANADIAN SYLLABICS SHWE -1518 ; [.3627.0020.0002] # CANADIAN SYLLABICS WEST-CREE SHWE -1519 ; [.3628.0020.0002] # CANADIAN SYLLABICS SHWI -151A ; [.3629.0020.0002] # CANADIAN SYLLABICS WEST-CREE SHWI -151B ; [.362A.0020.0002] # CANADIAN SYLLABICS SHWII -151C ; [.362B.0020.0002] # CANADIAN SYLLABICS WEST-CREE SHWII -151D ; [.362C.0020.0002] # CANADIAN SYLLABICS SHWO -151E ; [.362D.0020.0002] # CANADIAN SYLLABICS WEST-CREE SHWO -151F ; [.362E.0020.0002] # CANADIAN SYLLABICS SHWOO -1520 ; [.362F.0020.0002] # CANADIAN SYLLABICS WEST-CREE SHWOO -1521 ; [.3630.0020.0002] # CANADIAN SYLLABICS SHWA -1522 ; [.3631.0020.0002] # CANADIAN SYLLABICS WEST-CREE SHWA -1523 ; [.3632.0020.0002] # CANADIAN SYLLABICS SHWAA -1524 ; [.3633.0020.0002] # CANADIAN SYLLABICS WEST-CREE SHWAA -1525 ; [.3634.0020.0002] # CANADIAN SYLLABICS SH -1526 ; [.3635.0020.0002] # CANADIAN SYLLABICS YE -1527 ; [.3636.0020.0002] # CANADIAN SYLLABICS YAAI -1528 ; [.3637.0020.0002] # CANADIAN SYLLABICS YI -1529 ; [.3638.0020.0002] # CANADIAN SYLLABICS YII -152A ; [.3639.0020.0002] # CANADIAN SYLLABICS YO -152B ; [.363A.0020.0002] # CANADIAN SYLLABICS YOO -152C ; [.363B.0020.0002] # CANADIAN SYLLABICS Y-CREE YOO -152D ; [.363C.0020.0002] # CANADIAN SYLLABICS YA -152E ; [.363D.0020.0002] # CANADIAN SYLLABICS YAA -152F ; [.363E.0020.0002] # CANADIAN SYLLABICS YWE -1530 ; [.363F.0020.0002] # CANADIAN SYLLABICS WEST-CREE YWE -1531 ; [.3640.0020.0002] # CANADIAN SYLLABICS YWI -1532 ; [.3641.0020.0002] # CANADIAN SYLLABICS WEST-CREE YWI -1533 ; [.3642.0020.0002] # CANADIAN SYLLABICS YWII -1534 ; [.3643.0020.0002] # CANADIAN SYLLABICS WEST-CREE YWII -1535 ; [.3644.0020.0002] # CANADIAN SYLLABICS YWO -1536 ; [.3645.0020.0002] # CANADIAN SYLLABICS WEST-CREE YWO -1537 ; [.3646.0020.0002] # CANADIAN SYLLABICS YWOO -1538 ; [.3647.0020.0002] # CANADIAN SYLLABICS WEST-CREE YWOO -1539 ; [.3648.0020.0002] # CANADIAN SYLLABICS YWA -153A ; [.3649.0020.0002] # CANADIAN SYLLABICS WEST-CREE YWA -153B ; [.364A.0020.0002] # CANADIAN SYLLABICS YWAA -153C ; [.364B.0020.0002] # CANADIAN SYLLABICS WEST-CREE YWAA -153D ; [.364C.0020.0002] # CANADIAN SYLLABICS NASKAPI YWAA -153E ; [.364D.0020.0002] # CANADIAN SYLLABICS Y -153F ; [.364E.0020.0002] # CANADIAN SYLLABICS BIBLE-CREE Y -1540 ; [.364F.0020.0002] # CANADIAN SYLLABICS WEST-CREE Y -1541 ; [.3650.0020.0002] # CANADIAN SYLLABICS SAYISI YI -1542 ; [.3651.0020.0002] # CANADIAN SYLLABICS RE -1543 ; [.3652.0020.0002] # CANADIAN SYLLABICS R-CREE RE -1544 ; [.3653.0020.0002] # CANADIAN SYLLABICS WEST-CREE LE -1545 ; [.3654.0020.0002] # CANADIAN SYLLABICS RAAI -1546 ; [.3655.0020.0002] # CANADIAN SYLLABICS RI -1547 ; [.3656.0020.0002] # CANADIAN SYLLABICS RII -1548 ; [.3657.0020.0002] # CANADIAN SYLLABICS RO -1549 ; [.3658.0020.0002] # CANADIAN SYLLABICS ROO -154A ; [.3659.0020.0002] # CANADIAN SYLLABICS WEST-CREE LO -154B ; [.365A.0020.0002] # CANADIAN SYLLABICS RA -154C ; [.365B.0020.0002] # CANADIAN SYLLABICS RAA -154D ; [.365C.0020.0002] # CANADIAN SYLLABICS WEST-CREE LA -154E ; [.365D.0020.0002] # CANADIAN SYLLABICS RWAA -154F ; [.365E.0020.0002] # CANADIAN SYLLABICS WEST-CREE RWAA -1550 ; [.365F.0020.0002] # CANADIAN SYLLABICS R -1551 ; [.3660.0020.0002] # CANADIAN SYLLABICS WEST-CREE R -1552 ; [.3661.0020.0002] # CANADIAN SYLLABICS MEDIAL R -1553 ; [.3662.0020.0002] # CANADIAN SYLLABICS FE -1554 ; [.3663.0020.0002] # CANADIAN SYLLABICS FAAI -1555 ; [.3664.0020.0002] # CANADIAN SYLLABICS FI -1556 ; [.3665.0020.0002] # CANADIAN SYLLABICS FII -1557 ; [.3666.0020.0002] # CANADIAN SYLLABICS FO -1558 ; [.3667.0020.0002] # CANADIAN SYLLABICS FOO -1559 ; [.3668.0020.0002] # CANADIAN SYLLABICS FA -155A ; [.3669.0020.0002] # CANADIAN SYLLABICS FAA -155B ; [.366A.0020.0002] # CANADIAN SYLLABICS FWAA -155C ; [.366B.0020.0002] # CANADIAN SYLLABICS WEST-CREE FWAA -155D ; [.366C.0020.0002] # CANADIAN SYLLABICS F -155E ; [.366D.0020.0002] # CANADIAN SYLLABICS THE -155F ; [.366E.0020.0002] # CANADIAN SYLLABICS N-CREE THE -1560 ; [.366F.0020.0002] # CANADIAN SYLLABICS THI -1561 ; [.3670.0020.0002] # CANADIAN SYLLABICS N-CREE THI -1562 ; [.3671.0020.0002] # CANADIAN SYLLABICS THII -1563 ; [.3672.0020.0002] # CANADIAN SYLLABICS N-CREE THII -1564 ; [.3673.0020.0002] # CANADIAN SYLLABICS THO -1565 ; [.3674.0020.0002] # CANADIAN SYLLABICS THOO -1566 ; [.3675.0020.0002] # CANADIAN SYLLABICS THA -1567 ; [.3676.0020.0002] # CANADIAN SYLLABICS THAA -1568 ; [.3677.0020.0002] # CANADIAN SYLLABICS THWAA -1569 ; [.3678.0020.0002] # CANADIAN SYLLABICS WEST-CREE THWAA -156A ; [.3679.0020.0002] # CANADIAN SYLLABICS TH -156B ; [.367A.0020.0002] # CANADIAN SYLLABICS TTHE -156C ; [.367B.0020.0002] # CANADIAN SYLLABICS TTHI -156D ; [.367C.0020.0002] # CANADIAN SYLLABICS TTHO -156E ; [.367D.0020.0002] # CANADIAN SYLLABICS TTHA -156F ; [.367E.0020.0002] # CANADIAN SYLLABICS TTH -1570 ; [.367F.0020.0002] # CANADIAN SYLLABICS TYE -1571 ; [.3680.0020.0002] # CANADIAN SYLLABICS TYI -1572 ; [.3681.0020.0002] # CANADIAN SYLLABICS TYO -1573 ; [.3682.0020.0002] # CANADIAN SYLLABICS TYA -1574 ; [.3683.0020.0002] # CANADIAN SYLLABICS NUNAVIK HE -1575 ; [.3684.0020.0002] # CANADIAN SYLLABICS NUNAVIK HI -1576 ; [.3685.0020.0002] # CANADIAN SYLLABICS NUNAVIK HII -1577 ; [.3686.0020.0002] # CANADIAN SYLLABICS NUNAVIK HO -1578 ; [.3687.0020.0002] # CANADIAN SYLLABICS NUNAVIK HOO -1579 ; [.3688.0020.0002] # CANADIAN SYLLABICS NUNAVIK HA -157A ; [.3689.0020.0002] # CANADIAN SYLLABICS NUNAVIK HAA -157B ; [.368A.0020.0002] # CANADIAN SYLLABICS NUNAVIK H -157D ; [.368B.0020.0002] # CANADIAN SYLLABICS HK -166F ; [.368C.0020.0002] # CANADIAN SYLLABICS QAI -157E ; [.368D.0020.0002] # CANADIAN SYLLABICS QAAI -157F ; [.368E.0020.0002] # CANADIAN SYLLABICS QI -1580 ; [.368F.0020.0002] # CANADIAN SYLLABICS QII -1581 ; [.3690.0020.0002] # CANADIAN SYLLABICS QO -1582 ; [.3691.0020.0002] # CANADIAN SYLLABICS QOO -1583 ; [.3692.0020.0002] # CANADIAN SYLLABICS QA -1584 ; [.3693.0020.0002] # CANADIAN SYLLABICS QAA -1585 ; [.3694.0020.0002] # CANADIAN SYLLABICS Q -1586 ; [.3695.0020.0002] # CANADIAN SYLLABICS TLHE -1587 ; [.3696.0020.0002] # CANADIAN SYLLABICS TLHI -1588 ; [.3697.0020.0002] # CANADIAN SYLLABICS TLHO -1589 ; [.3698.0020.0002] # CANADIAN SYLLABICS TLHA -158A ; [.3699.0020.0002] # CANADIAN SYLLABICS WEST-CREE RE -158B ; [.369A.0020.0002] # CANADIAN SYLLABICS WEST-CREE RI -158C ; [.369B.0020.0002] # CANADIAN SYLLABICS WEST-CREE RO -158D ; [.369C.0020.0002] # CANADIAN SYLLABICS WEST-CREE RA -1670 ; [.369D.0020.0002] # CANADIAN SYLLABICS NGAI -158E ; [.369E.0020.0002] # CANADIAN SYLLABICS NGAAI -158F ; [.369F.0020.0002] # CANADIAN SYLLABICS NGI -1590 ; [.36A0.0020.0002] # CANADIAN SYLLABICS NGII -1591 ; [.36A1.0020.0002] # CANADIAN SYLLABICS NGO -1592 ; [.36A2.0020.0002] # CANADIAN SYLLABICS NGOO -1593 ; [.36A3.0020.0002] # CANADIAN SYLLABICS NGA -1594 ; [.36A4.0020.0002] # CANADIAN SYLLABICS NGAA -1595 ; [.36A5.0020.0002] # CANADIAN SYLLABICS NG -1671 ; [.36A6.0020.0002] # CANADIAN SYLLABICS NNGI -1672 ; [.36A7.0020.0002] # CANADIAN SYLLABICS NNGII -1673 ; [.36A8.0020.0002] # CANADIAN SYLLABICS NNGO -1674 ; [.36A9.0020.0002] # CANADIAN SYLLABICS NNGOO -1675 ; [.36AA.0020.0002] # CANADIAN SYLLABICS NNGA -1676 ; [.36AB.0020.0002] # CANADIAN SYLLABICS NNGAA -1596 ; [.36AC.0020.0002] # CANADIAN SYLLABICS NNG -1597 ; [.36AD.0020.0002] # CANADIAN SYLLABICS SAYISI SHE -1598 ; [.36AE.0020.0002] # CANADIAN SYLLABICS SAYISI SHI -1599 ; [.36AF.0020.0002] # CANADIAN SYLLABICS SAYISI SHO -159A ; [.36B0.0020.0002] # CANADIAN SYLLABICS SAYISI SHA -159B ; [.36B1.0020.0002] # CANADIAN SYLLABICS WOODS-CREE THE -159C ; [.36B2.0020.0002] # CANADIAN SYLLABICS WOODS-CREE THI -159D ; [.36B3.0020.0002] # CANADIAN SYLLABICS WOODS-CREE THO -159E ; [.36B4.0020.0002] # CANADIAN SYLLABICS WOODS-CREE THA -159F ; [.36B5.0020.0002] # CANADIAN SYLLABICS WOODS-CREE TH -15A0 ; [.36B6.0020.0002] # CANADIAN SYLLABICS LHI -15A1 ; [.36B7.0020.0002] # CANADIAN SYLLABICS LHII -15A2 ; [.36B8.0020.0002] # CANADIAN SYLLABICS LHO -15A3 ; [.36B9.0020.0002] # CANADIAN SYLLABICS LHOO -15A4 ; [.36BA.0020.0002] # CANADIAN SYLLABICS LHA -15A5 ; [.36BB.0020.0002] # CANADIAN SYLLABICS LHAA -15A6 ; [.36BC.0020.0002] # CANADIAN SYLLABICS LH -157C ; [.36BD.0020.0002] # CANADIAN SYLLABICS NUNAVUT H -15A7 ; [.36BE.0020.0002] # CANADIAN SYLLABICS TH-CREE THE -15A8 ; [.36BF.0020.0002] # CANADIAN SYLLABICS TH-CREE THI -15A9 ; [.36C0.0020.0002] # CANADIAN SYLLABICS TH-CREE THII -15AA ; [.36C1.0020.0002] # CANADIAN SYLLABICS TH-CREE THO -15AB ; [.36C2.0020.0002] # CANADIAN SYLLABICS TH-CREE THOO -15AC ; [.36C3.0020.0002] # CANADIAN SYLLABICS TH-CREE THA -15AD ; [.36C4.0020.0002] # CANADIAN SYLLABICS TH-CREE THAA -15AE ; [.36C5.0020.0002] # CANADIAN SYLLABICS TH-CREE TH -15AF ; [.36C6.0020.0002] # CANADIAN SYLLABICS AIVILIK B -15B0 ; [.36C7.0020.0002] # CANADIAN SYLLABICS BLACKFOOT E -15B1 ; [.36C8.0020.0002] # CANADIAN SYLLABICS BLACKFOOT I -15B2 ; [.36C9.0020.0002] # CANADIAN SYLLABICS BLACKFOOT O -15B3 ; [.36CA.0020.0002] # CANADIAN SYLLABICS BLACKFOOT A -15B4 ; [.36CB.0020.0002] # CANADIAN SYLLABICS BLACKFOOT WE -15B5 ; [.36CC.0020.0002] # CANADIAN SYLLABICS BLACKFOOT WI -15B6 ; [.36CD.0020.0002] # CANADIAN SYLLABICS BLACKFOOT WO -15B7 ; [.36CE.0020.0002] # CANADIAN SYLLABICS BLACKFOOT WA -15B8 ; [.36CF.0020.0002] # CANADIAN SYLLABICS BLACKFOOT NE -15B9 ; [.36D0.0020.0002] # CANADIAN SYLLABICS BLACKFOOT NI -15BA ; [.36D1.0020.0002] # CANADIAN SYLLABICS BLACKFOOT NO -15BB ; [.36D2.0020.0002] # CANADIAN SYLLABICS BLACKFOOT NA -15BC ; [.36D3.0020.0002] # CANADIAN SYLLABICS BLACKFOOT KE -15BD ; [.36D4.0020.0002] # CANADIAN SYLLABICS BLACKFOOT KI -15BE ; [.36D5.0020.0002] # CANADIAN SYLLABICS BLACKFOOT KO -15BF ; [.36D6.0020.0002] # CANADIAN SYLLABICS BLACKFOOT KA -15C0 ; [.36D7.0020.0002] # CANADIAN SYLLABICS SAYISI HE -15C1 ; [.36D8.0020.0002] # CANADIAN SYLLABICS SAYISI HI -15C2 ; [.36D9.0020.0002] # CANADIAN SYLLABICS SAYISI HO -15C3 ; [.36DA.0020.0002] # CANADIAN SYLLABICS SAYISI HA -15C4 ; [.36DB.0020.0002] # CANADIAN SYLLABICS CARRIER GHU -15C5 ; [.36DC.0020.0002] # CANADIAN SYLLABICS CARRIER GHO -15C6 ; [.36DD.0020.0002] # CANADIAN SYLLABICS CARRIER GHE -15C7 ; [.36DE.0020.0002] # CANADIAN SYLLABICS CARRIER GHEE -15C8 ; [.36DF.0020.0002] # CANADIAN SYLLABICS CARRIER GHI -15C9 ; [.36E0.0020.0002] # CANADIAN SYLLABICS CARRIER GHA -15CA ; [.36E1.0020.0002] # CANADIAN SYLLABICS CARRIER RU -15CB ; [.36E2.0020.0002] # CANADIAN SYLLABICS CARRIER RO -15CC ; [.36E3.0020.0002] # CANADIAN SYLLABICS CARRIER RE -15CD ; [.36E4.0020.0002] # CANADIAN SYLLABICS CARRIER REE -15CE ; [.36E5.0020.0002] # CANADIAN SYLLABICS CARRIER RI -15CF ; [.36E6.0020.0002] # CANADIAN SYLLABICS CARRIER RA -15D0 ; [.36E7.0020.0002] # CANADIAN SYLLABICS CARRIER WU -15D1 ; [.36E8.0020.0002] # CANADIAN SYLLABICS CARRIER WO -15D2 ; [.36E9.0020.0002] # CANADIAN SYLLABICS CARRIER WE -15D3 ; [.36EA.0020.0002] # CANADIAN SYLLABICS CARRIER WEE -15D4 ; [.36EB.0020.0002] # CANADIAN SYLLABICS CARRIER WI -15D5 ; [.36EC.0020.0002] # CANADIAN SYLLABICS CARRIER WA -15D6 ; [.36ED.0020.0002] # CANADIAN SYLLABICS CARRIER HWU -15D7 ; [.36EE.0020.0002] # CANADIAN SYLLABICS CARRIER HWO -15D8 ; [.36EF.0020.0002] # CANADIAN SYLLABICS CARRIER HWE -15D9 ; [.36F0.0020.0002] # CANADIAN SYLLABICS CARRIER HWEE -15DA ; [.36F1.0020.0002] # CANADIAN SYLLABICS CARRIER HWI -15DB ; [.36F2.0020.0002] # CANADIAN SYLLABICS CARRIER HWA -15DC ; [.36F3.0020.0002] # CANADIAN SYLLABICS CARRIER THU -15DD ; [.36F4.0020.0002] # CANADIAN SYLLABICS CARRIER THO -15DE ; [.36F5.0020.0002] # CANADIAN SYLLABICS CARRIER THE -15DF ; [.36F6.0020.0002] # CANADIAN SYLLABICS CARRIER THEE -15E0 ; [.36F7.0020.0002] # CANADIAN SYLLABICS CARRIER THI -15E1 ; [.36F8.0020.0002] # CANADIAN SYLLABICS CARRIER THA -15E2 ; [.36F9.0020.0002] # CANADIAN SYLLABICS CARRIER TTU -15E3 ; [.36FA.0020.0002] # CANADIAN SYLLABICS CARRIER TTO -15E4 ; [.36FB.0020.0002] # CANADIAN SYLLABICS CARRIER TTE -15E5 ; [.36FC.0020.0002] # CANADIAN SYLLABICS CARRIER TTEE -15E6 ; [.36FD.0020.0002] # CANADIAN SYLLABICS CARRIER TTI -15E7 ; [.36FE.0020.0002] # CANADIAN SYLLABICS CARRIER TTA -15E8 ; [.36FF.0020.0002] # CANADIAN SYLLABICS CARRIER PU -15E9 ; [.3700.0020.0002] # CANADIAN SYLLABICS CARRIER PO -15EA ; [.3701.0020.0002] # CANADIAN SYLLABICS CARRIER PE -15EB ; [.3702.0020.0002] # CANADIAN SYLLABICS CARRIER PEE -15EC ; [.3703.0020.0002] # CANADIAN SYLLABICS CARRIER PI -15ED ; [.3704.0020.0002] # CANADIAN SYLLABICS CARRIER PA -15EE ; [.3705.0020.0002] # CANADIAN SYLLABICS CARRIER P -15EF ; [.3706.0020.0002] # CANADIAN SYLLABICS CARRIER GU -15F0 ; [.3707.0020.0002] # CANADIAN SYLLABICS CARRIER GO -15F1 ; [.3708.0020.0002] # CANADIAN SYLLABICS CARRIER GE -15F2 ; [.3709.0020.0002] # CANADIAN SYLLABICS CARRIER GEE -15F3 ; [.370A.0020.0002] # CANADIAN SYLLABICS CARRIER GI -15F4 ; [.370B.0020.0002] # CANADIAN SYLLABICS CARRIER GA -15F5 ; [.370C.0020.0002] # CANADIAN SYLLABICS CARRIER KHU -15F6 ; [.370D.0020.0002] # CANADIAN SYLLABICS CARRIER KHO -15F7 ; [.370E.0020.0002] # CANADIAN SYLLABICS CARRIER KHE -15F8 ; [.370F.0020.0002] # CANADIAN SYLLABICS CARRIER KHEE -15F9 ; [.3710.0020.0002] # CANADIAN SYLLABICS CARRIER KHI -15FA ; [.3711.0020.0002] # CANADIAN SYLLABICS CARRIER KHA -15FB ; [.3712.0020.0002] # CANADIAN SYLLABICS CARRIER KKU -15FC ; [.3713.0020.0002] # CANADIAN SYLLABICS CARRIER KKO -15FD ; [.3714.0020.0002] # CANADIAN SYLLABICS CARRIER KKE -15FE ; [.3715.0020.0002] # CANADIAN SYLLABICS CARRIER KKEE -15FF ; [.3716.0020.0002] # CANADIAN SYLLABICS CARRIER KKI -1600 ; [.3717.0020.0002] # CANADIAN SYLLABICS CARRIER KKA -1601 ; [.3718.0020.0002] # CANADIAN SYLLABICS CARRIER KK -1602 ; [.3719.0020.0002] # CANADIAN SYLLABICS CARRIER NU -1603 ; [.371A.0020.0002] # CANADIAN SYLLABICS CARRIER NO -1604 ; [.371B.0020.0002] # CANADIAN SYLLABICS CARRIER NE -1605 ; [.371C.0020.0002] # CANADIAN SYLLABICS CARRIER NEE -1606 ; [.371D.0020.0002] # CANADIAN SYLLABICS CARRIER NI -1607 ; [.371E.0020.0002] # CANADIAN SYLLABICS CARRIER NA -1608 ; [.371F.0020.0002] # CANADIAN SYLLABICS CARRIER MU -1609 ; [.3720.0020.0002] # CANADIAN SYLLABICS CARRIER MO -160A ; [.3721.0020.0002] # CANADIAN SYLLABICS CARRIER ME -160B ; [.3722.0020.0002] # CANADIAN SYLLABICS CARRIER MEE -160C ; [.3723.0020.0002] # CANADIAN SYLLABICS CARRIER MI -160D ; [.3724.0020.0002] # CANADIAN SYLLABICS CARRIER MA -160E ; [.3725.0020.0002] # CANADIAN SYLLABICS CARRIER YU -160F ; [.3726.0020.0002] # CANADIAN SYLLABICS CARRIER YO -1610 ; [.3727.0020.0002] # CANADIAN SYLLABICS CARRIER YE -1611 ; [.3728.0020.0002] # CANADIAN SYLLABICS CARRIER YEE -1612 ; [.3729.0020.0002] # CANADIAN SYLLABICS CARRIER YI -1613 ; [.372A.0020.0002] # CANADIAN SYLLABICS CARRIER YA -1614 ; [.372B.0020.0002] # CANADIAN SYLLABICS CARRIER JU -1615 ; [.372C.0020.0002] # CANADIAN SYLLABICS SAYISI JU -1616 ; [.372D.0020.0002] # CANADIAN SYLLABICS CARRIER JO -1617 ; [.372E.0020.0002] # CANADIAN SYLLABICS CARRIER JE -1618 ; [.372F.0020.0002] # CANADIAN SYLLABICS CARRIER JEE -1619 ; [.3730.0020.0002] # CANADIAN SYLLABICS CARRIER JI -161A ; [.3731.0020.0002] # CANADIAN SYLLABICS SAYISI JI -161B ; [.3732.0020.0002] # CANADIAN SYLLABICS CARRIER JA -161C ; [.3733.0020.0002] # CANADIAN SYLLABICS CARRIER JJU -161D ; [.3734.0020.0002] # CANADIAN SYLLABICS CARRIER JJO -161E ; [.3735.0020.0002] # CANADIAN SYLLABICS CARRIER JJE -161F ; [.3736.0020.0002] # CANADIAN SYLLABICS CARRIER JJEE -1620 ; [.3737.0020.0002] # CANADIAN SYLLABICS CARRIER JJI -1621 ; [.3738.0020.0002] # CANADIAN SYLLABICS CARRIER JJA -1622 ; [.3739.0020.0002] # CANADIAN SYLLABICS CARRIER LU -1623 ; [.373A.0020.0002] # CANADIAN SYLLABICS CARRIER LO -1624 ; [.373B.0020.0002] # CANADIAN SYLLABICS CARRIER LE -1625 ; [.373C.0020.0002] # CANADIAN SYLLABICS CARRIER LEE -1626 ; [.373D.0020.0002] # CANADIAN SYLLABICS CARRIER LI -1627 ; [.373E.0020.0002] # CANADIAN SYLLABICS CARRIER LA -1628 ; [.373F.0020.0002] # CANADIAN SYLLABICS CARRIER DLU -1629 ; [.3740.0020.0002] # CANADIAN SYLLABICS CARRIER DLO -162A ; [.3741.0020.0002] # CANADIAN SYLLABICS CARRIER DLE -162B ; [.3742.0020.0002] # CANADIAN SYLLABICS CARRIER DLEE -162C ; [.3743.0020.0002] # CANADIAN SYLLABICS CARRIER DLI -162D ; [.3744.0020.0002] # CANADIAN SYLLABICS CARRIER DLA -162E ; [.3745.0020.0002] # CANADIAN SYLLABICS CARRIER LHU -162F ; [.3746.0020.0002] # CANADIAN SYLLABICS CARRIER LHO -1630 ; [.3747.0020.0002] # CANADIAN SYLLABICS CARRIER LHE -1631 ; [.3748.0020.0002] # CANADIAN SYLLABICS CARRIER LHEE -1632 ; [.3749.0020.0002] # CANADIAN SYLLABICS CARRIER LHI -1633 ; [.374A.0020.0002] # CANADIAN SYLLABICS CARRIER LHA -1634 ; [.374B.0020.0002] # CANADIAN SYLLABICS CARRIER TLHU -1635 ; [.374C.0020.0002] # CANADIAN SYLLABICS CARRIER TLHO -1636 ; [.374D.0020.0002] # CANADIAN SYLLABICS CARRIER TLHE -1637 ; [.374E.0020.0002] # CANADIAN SYLLABICS CARRIER TLHEE -1638 ; [.374F.0020.0002] # CANADIAN SYLLABICS CARRIER TLHI -1639 ; [.3750.0020.0002] # CANADIAN SYLLABICS CARRIER TLHA -163A ; [.3751.0020.0002] # CANADIAN SYLLABICS CARRIER TLU -163B ; [.3752.0020.0002] # CANADIAN SYLLABICS CARRIER TLO -163C ; [.3753.0020.0002] # CANADIAN SYLLABICS CARRIER TLE -163D ; [.3754.0020.0002] # CANADIAN SYLLABICS CARRIER TLEE -163E ; [.3755.0020.0002] # CANADIAN SYLLABICS CARRIER TLI -163F ; [.3756.0020.0002] # CANADIAN SYLLABICS CARRIER TLA -1640 ; [.3757.0020.0002] # CANADIAN SYLLABICS CARRIER ZU -1641 ; [.3758.0020.0002] # CANADIAN SYLLABICS CARRIER ZO -1642 ; [.3759.0020.0002] # CANADIAN SYLLABICS CARRIER ZE -1643 ; [.375A.0020.0002] # CANADIAN SYLLABICS CARRIER ZEE -1644 ; [.375B.0020.0002] # CANADIAN SYLLABICS CARRIER ZI -1645 ; [.375C.0020.0002] # CANADIAN SYLLABICS CARRIER ZA -1646 ; [.375D.0020.0002] # CANADIAN SYLLABICS CARRIER Z -1647 ; [.375E.0020.0002] # CANADIAN SYLLABICS CARRIER INITIAL Z -1648 ; [.375F.0020.0002] # CANADIAN SYLLABICS CARRIER DZU -1649 ; [.3760.0020.0002] # CANADIAN SYLLABICS CARRIER DZO -164A ; [.3761.0020.0002] # CANADIAN SYLLABICS CARRIER DZE -164B ; [.3762.0020.0002] # CANADIAN SYLLABICS CARRIER DZEE -164C ; [.3763.0020.0002] # CANADIAN SYLLABICS CARRIER DZI -164D ; [.3764.0020.0002] # CANADIAN SYLLABICS CARRIER DZA -164E ; [.3765.0020.0002] # CANADIAN SYLLABICS CARRIER SU -164F ; [.3766.0020.0002] # CANADIAN SYLLABICS CARRIER SO -1650 ; [.3767.0020.0002] # CANADIAN SYLLABICS CARRIER SE -1651 ; [.3768.0020.0002] # CANADIAN SYLLABICS CARRIER SEE -1652 ; [.3769.0020.0002] # CANADIAN SYLLABICS CARRIER SI -1653 ; [.376A.0020.0002] # CANADIAN SYLLABICS CARRIER SA -1654 ; [.376B.0020.0002] # CANADIAN SYLLABICS CARRIER SHU -1655 ; [.376C.0020.0002] # CANADIAN SYLLABICS CARRIER SHO -1656 ; [.376D.0020.0002] # CANADIAN SYLLABICS CARRIER SHE -1657 ; [.376E.0020.0002] # CANADIAN SYLLABICS CARRIER SHEE -1658 ; [.376F.0020.0002] # CANADIAN SYLLABICS CARRIER SHI -1659 ; [.3770.0020.0002] # CANADIAN SYLLABICS CARRIER SHA -165A ; [.3771.0020.0002] # CANADIAN SYLLABICS CARRIER SH -165B ; [.3772.0020.0002] # CANADIAN SYLLABICS CARRIER TSU -165C ; [.3773.0020.0002] # CANADIAN SYLLABICS CARRIER TSO -165D ; [.3774.0020.0002] # CANADIAN SYLLABICS CARRIER TSE -165E ; [.3775.0020.0002] # CANADIAN SYLLABICS CARRIER TSEE -165F ; [.3776.0020.0002] # CANADIAN SYLLABICS CARRIER TSI -1660 ; [.3777.0020.0002] # CANADIAN SYLLABICS CARRIER TSA -1661 ; [.3778.0020.0002] # CANADIAN SYLLABICS CARRIER CHU -1662 ; [.3779.0020.0002] # CANADIAN SYLLABICS CARRIER CHO -1663 ; [.377A.0020.0002] # CANADIAN SYLLABICS CARRIER CHE -1664 ; [.377B.0020.0002] # CANADIAN SYLLABICS CARRIER CHEE -1665 ; [.377C.0020.0002] # CANADIAN SYLLABICS CARRIER CHI -1666 ; [.377D.0020.0002] # CANADIAN SYLLABICS CARRIER CHA -1667 ; [.377E.0020.0002] # CANADIAN SYLLABICS CARRIER TTSU -1668 ; [.377F.0020.0002] # CANADIAN SYLLABICS CARRIER TTSO -1669 ; [.3780.0020.0002] # CANADIAN SYLLABICS CARRIER TTSE -166A ; [.3781.0020.0002] # CANADIAN SYLLABICS CARRIER TTSEE -166B ; [.3782.0020.0002] # CANADIAN SYLLABICS CARRIER TTSI -166C ; [.3783.0020.0002] # CANADIAN SYLLABICS CARRIER TTSA -1677 ; [.3784.0020.0002] # CANADIAN SYLLABICS WOODS-CREE THWEE -1678 ; [.3785.0020.0002] # CANADIAN SYLLABICS WOODS-CREE THWI -1679 ; [.3786.0020.0002] # CANADIAN SYLLABICS WOODS-CREE THWII -167A ; [.3787.0020.0002] # CANADIAN SYLLABICS WOODS-CREE THWO -167B ; [.3788.0020.0002] # CANADIAN SYLLABICS WOODS-CREE THWOO -167C ; [.3789.0020.0002] # CANADIAN SYLLABICS WOODS-CREE THWA -167D ; [.378A.0020.0002] # CANADIAN SYLLABICS WOODS-CREE THWAA -167E ; [.378B.0020.0002] # CANADIAN SYLLABICS WOODS-CREE FINAL TH -167F ; [.378C.0020.0002] # CANADIAN SYLLABICS BLACKFOOT W -18B0 ; [.378D.0020.0002] # CANADIAN SYLLABICS OY -18B1 ; [.378E.0020.0002] # CANADIAN SYLLABICS AY -18B2 ; [.378F.0020.0002] # CANADIAN SYLLABICS AAY -18B3 ; [.3790.0020.0002] # CANADIAN SYLLABICS WAY -18B4 ; [.3791.0020.0002] # CANADIAN SYLLABICS POY -18B5 ; [.3792.0020.0002] # CANADIAN SYLLABICS PAY -18B6 ; [.3793.0020.0002] # CANADIAN SYLLABICS PWOY -18B7 ; [.3794.0020.0002] # CANADIAN SYLLABICS TAY -18B8 ; [.3795.0020.0002] # CANADIAN SYLLABICS KAY -18B9 ; [.3796.0020.0002] # CANADIAN SYLLABICS KWAY -18BA ; [.3797.0020.0002] # CANADIAN SYLLABICS MAY -18BB ; [.3798.0020.0002] # CANADIAN SYLLABICS NOY -18BC ; [.3799.0020.0002] # CANADIAN SYLLABICS NAY -18BD ; [.379A.0020.0002] # CANADIAN SYLLABICS LAY -18BE ; [.379B.0020.0002] # CANADIAN SYLLABICS SOY -18BF ; [.379C.0020.0002] # CANADIAN SYLLABICS SAY -18C0 ; [.379D.0020.0002] # CANADIAN SYLLABICS SHOY -18C1 ; [.379E.0020.0002] # CANADIAN SYLLABICS SHAY -18C2 ; [.379F.0020.0002] # CANADIAN SYLLABICS SHWOY -18C3 ; [.37A0.0020.0002] # CANADIAN SYLLABICS YOY -18C4 ; [.37A1.0020.0002] # CANADIAN SYLLABICS YAY -18C5 ; [.37A2.0020.0002] # CANADIAN SYLLABICS RAY -18C6 ; [.37A3.0020.0002] # CANADIAN SYLLABICS NWI -18C7 ; [.37A4.0020.0002] # CANADIAN SYLLABICS OJIBWAY NWI -18C8 ; [.37A5.0020.0002] # CANADIAN SYLLABICS NWII -18C9 ; [.37A6.0020.0002] # CANADIAN SYLLABICS OJIBWAY NWII -18CA ; [.37A7.0020.0002] # CANADIAN SYLLABICS NWO -18CB ; [.37A8.0020.0002] # CANADIAN SYLLABICS OJIBWAY NWO -18CC ; [.37A9.0020.0002] # CANADIAN SYLLABICS NWOO -18CD ; [.37AA.0020.0002] # CANADIAN SYLLABICS OJIBWAY NWOO -18CE ; [.37AB.0020.0002] # CANADIAN SYLLABICS RWEE -18CF ; [.37AC.0020.0002] # CANADIAN SYLLABICS RWI -18D0 ; [.37AD.0020.0002] # CANADIAN SYLLABICS RWII -18D1 ; [.37AE.0020.0002] # CANADIAN SYLLABICS RWO -18D2 ; [.37AF.0020.0002] # CANADIAN SYLLABICS RWOO -18D3 ; [.37B0.0020.0002] # CANADIAN SYLLABICS RWA -18D4 ; [.37B1.0020.0002] # CANADIAN SYLLABICS OJIBWAY P -18D5 ; [.37B2.0020.0002] # CANADIAN SYLLABICS OJIBWAY T -18D6 ; [.37B3.0020.0002] # CANADIAN SYLLABICS OJIBWAY K -18D7 ; [.37B4.0020.0002] # CANADIAN SYLLABICS OJIBWAY C -18D8 ; [.37B5.0020.0002] # CANADIAN SYLLABICS OJIBWAY M -18D9 ; [.37B6.0020.0002] # CANADIAN SYLLABICS OJIBWAY N -18DA ; [.37B7.0020.0002] # CANADIAN SYLLABICS OJIBWAY S -18DB ; [.37B8.0020.0002] # CANADIAN SYLLABICS OJIBWAY SH -18DC ; [.37B9.0020.0002] # CANADIAN SYLLABICS EASTERN W -18DD ; [.37BA.0020.0002] # CANADIAN SYLLABICS WESTERN W -18DE ; [.37BB.0020.0002] # CANADIAN SYLLABICS FINAL SMALL RING -18DF ; [.37BC.0020.0002] # CANADIAN SYLLABICS FINAL RAISED DOT -18E0 ; [.37BD.0020.0002] # CANADIAN SYLLABICS R-CREE RWE -18E1 ; [.37BE.0020.0002] # CANADIAN SYLLABICS WEST-CREE LOO -18E2 ; [.37BF.0020.0002] # CANADIAN SYLLABICS WEST-CREE LAA -18E3 ; [.37C0.0020.0002] # CANADIAN SYLLABICS THWE -18E4 ; [.37C1.0020.0002] # CANADIAN SYLLABICS THWA -18E5 ; [.37C2.0020.0002] # CANADIAN SYLLABICS TTHWE -18E6 ; [.37C3.0020.0002] # CANADIAN SYLLABICS TTHOO -18E7 ; [.37C4.0020.0002] # CANADIAN SYLLABICS TTHAA -18E8 ; [.37C5.0020.0002] # CANADIAN SYLLABICS TLHWE -18E9 ; [.37C6.0020.0002] # CANADIAN SYLLABICS TLHOO -18EA ; [.37C7.0020.0002] # CANADIAN SYLLABICS SAYISI SHWE -18EB ; [.37C8.0020.0002] # CANADIAN SYLLABICS SAYISI SHOO -18EC ; [.37C9.0020.0002] # CANADIAN SYLLABICS SAYISI HOO -18ED ; [.37CA.0020.0002] # CANADIAN SYLLABICS CARRIER GWU -18EE ; [.37CB.0020.0002] # CANADIAN SYLLABICS CARRIER DENE GEE -18EF ; [.37CC.0020.0002] # CANADIAN SYLLABICS CARRIER GAA -18F0 ; [.37CD.0020.0002] # CANADIAN SYLLABICS CARRIER GWA -18F1 ; [.37CE.0020.0002] # CANADIAN SYLLABICS SAYISI JUU -18F2 ; [.37CF.0020.0002] # CANADIAN SYLLABICS CARRIER JWA -18F3 ; [.37D0.0020.0002] # CANADIAN SYLLABICS BEAVER DENE L -18F4 ; [.37D1.0020.0002] # CANADIAN SYLLABICS BEAVER DENE R -18F5 ; [.37D2.0020.0002] # CANADIAN SYLLABICS CARRIER DENTAL S -1681 ; [.37D3.0020.0002] # OGHAM LETTER BEITH -1682 ; [.37D4.0020.0002] # OGHAM LETTER LUIS -1683 ; [.37D5.0020.0002] # OGHAM LETTER FEARN -1684 ; [.37D6.0020.0002] # OGHAM LETTER SAIL -1685 ; [.37D7.0020.0002] # OGHAM LETTER NION -1686 ; [.37D8.0020.0002] # OGHAM LETTER UATH -1687 ; [.37D9.0020.0002] # OGHAM LETTER DAIR -1688 ; [.37DA.0020.0002] # OGHAM LETTER TINNE -1689 ; [.37DB.0020.0002] # OGHAM LETTER COLL -168A ; [.37DC.0020.0002] # OGHAM LETTER CEIRT -168B ; [.37DD.0020.0002] # OGHAM LETTER MUIN -168C ; [.37DE.0020.0002] # OGHAM LETTER GORT -168D ; [.37DF.0020.0002] # OGHAM LETTER NGEADAL -168E ; [.37E0.0020.0002] # OGHAM LETTER STRAIF -168F ; [.37E1.0020.0002] # OGHAM LETTER RUIS -1690 ; [.37E2.0020.0002] # OGHAM LETTER AILM -1691 ; [.37E3.0020.0002] # OGHAM LETTER ONN -1692 ; [.37E4.0020.0002] # OGHAM LETTER UR -1693 ; [.37E5.0020.0002] # OGHAM LETTER EADHADH -1694 ; [.37E6.0020.0002] # OGHAM LETTER IODHADH -1695 ; [.37E7.0020.0002] # OGHAM LETTER EABHADH -1696 ; [.37E8.0020.0002] # OGHAM LETTER OR -1697 ; [.37E9.0020.0002] # OGHAM LETTER UILLEANN -1698 ; [.37EA.0020.0002] # OGHAM LETTER IFIN -1699 ; [.37EB.0020.0002] # OGHAM LETTER EAMHANCHOLL -169A ; [.37EC.0020.0002] # OGHAM LETTER PEITH -16A0 ; [.37ED.0020.0002] # RUNIC LETTER FEHU FEOH FE F -16A1 ; [.37ED.0020.0004][.0000.0111.0004] # RUNIC LETTER V -16A2 ; [.37EE.0020.0002] # RUNIC LETTER URUZ UR U -16A4 ; [.37EE.0020.0004][.0000.0111.0004] # RUNIC LETTER Y -16A5 ; [.37EE.0020.0004][.0000.0112.0004] # RUNIC LETTER W -16A6 ; [.37EF.0020.0002] # RUNIC LETTER THURISAZ THURS THORN -16A7 ; [.37EF.0020.0004][.0000.0111.0004] # RUNIC LETTER ETH -16F0 ; [.37EF.0020.0004][.37EF.0020.0004] # RUNIC BELGTHOR SYMBOL -16A8 ; [.37F0.0020.0002] # RUNIC LETTER ANSUZ A -16A9 ; [.37F0.0020.0004][.0000.0111.0004] # RUNIC LETTER OS O -16AC ; [.37F0.0020.0004][.0000.0112.0004] # RUNIC LETTER LONG-BRANCH-OSS O -16AD ; [.37F0.0020.0004][.0000.0113.0004] # RUNIC LETTER SHORT-TWIG-OSS O -16AE ; [.37F0.0020.0004][.0000.0114.0004] # RUNIC LETTER O -16F4 ; [.37F1.0020.0002] # RUNIC LETTER FRANKS CASKET OS -16AF ; [.37F2.0020.0002] # RUNIC LETTER OE -16B0 ; [.37F3.0020.0002] # RUNIC LETTER ON -16B1 ; [.37F4.0020.0002] # RUNIC LETTER RAIDO RAD REID R -16B2 ; [.37F5.0020.0002] # RUNIC LETTER KAUNA -16B3 ; [.37F5.0020.0004][.0000.0111.0004] # RUNIC LETTER CEN -16B4 ; [.37F5.0020.0004][.0000.0112.0004] # RUNIC LETTER KAUN K -16B5 ; [.37F5.0020.0004][.0000.0113.0004] # RUNIC LETTER G -16B6 ; [.37F5.0020.0004][.0000.0114.0004] # RUNIC LETTER ENG -16F1 ; [.37F6.0020.0002] # RUNIC LETTER K -16B7 ; [.37F7.0020.0002] # RUNIC LETTER GEBO GYFU G -16B9 ; [.37F8.0020.0002] # RUNIC LETTER WUNJO WYNN W -16E9 ; [.37F8.0020.0004][.0000.0111.0004] # RUNIC LETTER Q -16BA ; [.37F9.0020.0002] # RUNIC LETTER HAGLAZ H -16BB ; [.37F9.0020.0004][.0000.0111.0004] # RUNIC LETTER HAEGL H -16BC ; [.37F9.0020.0004][.0000.0112.0004] # RUNIC LETTER LONG-BRANCH-HAGALL H -16BD ; [.37F9.0020.0004][.0000.0113.0004] # RUNIC LETTER SHORT-TWIG-HAGALL H -16BE ; [.37FA.0020.0002] # RUNIC LETTER NAUDIZ NYD NAUD N -16BF ; [.37FA.0020.0004][.0000.0111.0004] # RUNIC LETTER SHORT-TWIG-NAUD N -16C0 ; [.37FA.0020.0004][.0000.0112.0004] # RUNIC LETTER DOTTED-N -16C1 ; [.37FB.0020.0002] # RUNIC LETTER ISAZ IS ISS I -16C2 ; [.37FB.0020.0004][.0000.0111.0004] # RUNIC LETTER E -16F5 ; [.37FC.0020.0002] # RUNIC LETTER FRANKS CASKET IS -16C3 ; [.37FD.0020.0002] # RUNIC LETTER JERAN J -16C4 ; [.37FD.0020.0004][.0000.0111.0004] # RUNIC LETTER GER -16C5 ; [.37FE.0020.0002] # RUNIC LETTER LONG-BRANCH-AR AE -16C6 ; [.37FE.0020.0004][.0000.0111.0004] # RUNIC LETTER SHORT-TWIG-AR A -16EE ; [.37FE.0020.0004][.3809.0020.0004] # RUNIC ARLAUG SYMBOL -16C7 ; [.37FF.0020.0002] # RUNIC LETTER IWAZ EOH -16C8 ; [.3800.0020.0002] # RUNIC LETTER PERTHO PEORTH P -16D5 ; [.3800.0020.0004][.0000.0111.0004] # RUNIC LETTER OPEN-P -16C9 ; [.3801.0020.0002] # RUNIC LETTER ALGIZ EOLHX -16CA ; [.3802.0020.0002] # RUNIC LETTER SOWILO S -16CB ; [.3802.0020.0004][.0000.0111.0004] # RUNIC LETTER SIGEL LONG-BRANCH-SOL S -16EA ; [.3802.0020.0004][.0000.0112.0004] # RUNIC LETTER X -16CC ; [.3802.0020.0004][.0000.0113.0004] # RUNIC LETTER SHORT-TWIG-SOL S -16CD ; [.3802.0020.0004][.0000.0114.0004] # RUNIC LETTER C -16CE ; [.3802.0020.0004][.0000.0115.0004] # RUNIC LETTER Z -16F2 ; [.3803.0020.0002] # RUNIC LETTER SH -16CF ; [.3804.0020.0002] # RUNIC LETTER TIWAZ TIR TYR T -16D0 ; [.3804.0020.0004][.0000.0111.0004] # RUNIC LETTER SHORT-TWIG-TYR T -16D1 ; [.3804.0020.0004][.0000.0112.0004] # RUNIC LETTER D -16D2 ; [.3805.0020.0002] # RUNIC LETTER BERKANAN BEORC BJARKAN B -16D3 ; [.3805.0020.0004][.0000.0111.0004] # RUNIC LETTER SHORT-TWIG-BJARKAN B -16D4 ; [.3805.0020.0004][.0000.0112.0004] # RUNIC LETTER DOTTED-P -16D6 ; [.3806.0020.0002] # RUNIC LETTER EHWAZ EH E -16F6 ; [.3807.0020.0002] # RUNIC LETTER FRANKS CASKET EH -16D7 ; [.3808.0020.0002] # RUNIC LETTER MANNAZ MAN M -16D8 ; [.3808.0020.0004][.0000.0111.0004] # RUNIC LETTER LONG-BRANCH-MADR M -16D9 ; [.3808.0020.0004][.0000.0112.0004] # RUNIC LETTER SHORT-TWIG-MADR M -16EF ; [.3808.0020.0004][.0000.0111.0004][.3808.0020.0004][.0000.0111.0004] # RUNIC TVIMADUR SYMBOL -16DA ; [.3809.0020.0002] # RUNIC LETTER LAUKAZ LAGU LOGR L -16DB ; [.3809.0020.0004][.0000.0111.0004] # RUNIC LETTER DOTTED-L -16DC ; [.380A.0020.0002] # RUNIC LETTER INGWAZ -16DD ; [.380A.0020.0004][.0000.0111.0004] # RUNIC LETTER ING -16DE ; [.380B.0020.0002] # RUNIC LETTER DAGAZ DAEG D -16DF ; [.380C.0020.0002] # RUNIC LETTER OTHALAN ETHEL O -16F3 ; [.380D.0020.0002] # RUNIC LETTER OO -16AA ; [.380E.0020.0002] # RUNIC LETTER AC A -16F7 ; [.380F.0020.0002] # RUNIC LETTER FRANKS CASKET AC -16AB ; [.3810.0020.0002] # RUNIC LETTER AESC -16F8 ; [.3811.0020.0002] # RUNIC LETTER FRANKS CASKET AESC -16A3 ; [.3812.0020.0002] # RUNIC LETTER YR -16E0 ; [.3813.0020.0002] # RUNIC LETTER EAR -16E3 ; [.3814.0020.0002] # RUNIC LETTER CALC -16B8 ; [.3815.0020.0002] # RUNIC LETTER GAR -16E4 ; [.3816.0020.0002] # RUNIC LETTER CEALC -16E1 ; [.3817.0020.0002] # RUNIC LETTER IOR -16E2 ; [.3818.0020.0002] # RUNIC LETTER CWEORTH -16E5 ; [.3819.0020.0002] # RUNIC LETTER STAN -16E6 ; [.381A.0020.0002] # RUNIC LETTER LONG-BRANCH-YR -16E7 ; [.381A.0020.0004][.0000.0111.0004] # RUNIC LETTER SHORT-TWIG-YR -16E8 ; [.381A.0020.0004][.0000.0112.0004] # RUNIC LETTER ICELANDIC-YR -10CC0 ; [.381B.0020.0002] # OLD HUNGARIAN SMALL LETTER A -10C80 ; [.381B.0020.0008] # OLD HUNGARIAN CAPITAL LETTER A -10CC1 ; [.381B.0020.0004][.0000.0111.0004] # OLD HUNGARIAN SMALL LETTER AA -10C81 ; [.381B.0020.000A][.0000.0111.0004] # OLD HUNGARIAN CAPITAL LETTER AA -10CC2 ; [.381C.0020.0002] # OLD HUNGARIAN SMALL LETTER EB -10C82 ; [.381C.0020.0008] # OLD HUNGARIAN CAPITAL LETTER EB -10CC3 ; [.381D.0020.0002] # OLD HUNGARIAN SMALL LETTER AMB -10C83 ; [.381D.0020.0008] # OLD HUNGARIAN CAPITAL LETTER AMB -10CC4 ; [.381E.0020.0002] # OLD HUNGARIAN SMALL LETTER EC -10C84 ; [.381E.0020.0008] # OLD HUNGARIAN CAPITAL LETTER EC -10CC5 ; [.381F.0020.0002] # OLD HUNGARIAN SMALL LETTER ENC -10C85 ; [.381F.0020.0008] # OLD HUNGARIAN CAPITAL LETTER ENC -10CC6 ; [.3820.0020.0002] # OLD HUNGARIAN SMALL LETTER ECS -10C86 ; [.3820.0020.0008] # OLD HUNGARIAN CAPITAL LETTER ECS -10CC7 ; [.3821.0020.0002] # OLD HUNGARIAN SMALL LETTER ED -10C87 ; [.3821.0020.0008] # OLD HUNGARIAN CAPITAL LETTER ED -10CC8 ; [.3822.0020.0002] # OLD HUNGARIAN SMALL LETTER AND -10C88 ; [.3822.0020.0008] # OLD HUNGARIAN CAPITAL LETTER AND -10CC9 ; [.3823.0020.0002] # OLD HUNGARIAN SMALL LETTER E -10C89 ; [.3823.0020.0008] # OLD HUNGARIAN CAPITAL LETTER E -10CCA ; [.3823.0020.0004][.0000.0111.0004] # OLD HUNGARIAN SMALL LETTER CLOSE E -10C8A ; [.3823.0020.000A][.0000.0111.0004] # OLD HUNGARIAN CAPITAL LETTER CLOSE E -10CCB ; [.3823.0020.0004][.0000.0112.0004] # OLD HUNGARIAN SMALL LETTER EE -10C8B ; [.3823.0020.000A][.0000.0112.0004] # OLD HUNGARIAN CAPITAL LETTER EE -10CCC ; [.3824.0020.0002] # OLD HUNGARIAN SMALL LETTER EF -10C8C ; [.3824.0020.0008] # OLD HUNGARIAN CAPITAL LETTER EF -10CCD ; [.3825.0020.0002] # OLD HUNGARIAN SMALL LETTER EG -10C8D ; [.3825.0020.0008] # OLD HUNGARIAN CAPITAL LETTER EG -10CCE ; [.3826.0020.0002] # OLD HUNGARIAN SMALL LETTER EGY -10C8E ; [.3826.0020.0008] # OLD HUNGARIAN CAPITAL LETTER EGY -10CCF ; [.3827.0020.0002] # OLD HUNGARIAN SMALL LETTER EH -10C8F ; [.3827.0020.0008] # OLD HUNGARIAN CAPITAL LETTER EH -10CD0 ; [.3828.0020.0002] # OLD HUNGARIAN SMALL LETTER I -10C90 ; [.3828.0020.0008] # OLD HUNGARIAN CAPITAL LETTER I -10CD1 ; [.3828.0020.0004][.0000.0111.0004] # OLD HUNGARIAN SMALL LETTER II -10C91 ; [.3828.0020.000A][.0000.0111.0004] # OLD HUNGARIAN CAPITAL LETTER II -10CD2 ; [.3829.0020.0002] # OLD HUNGARIAN SMALL LETTER EJ -10C92 ; [.3829.0020.0008] # OLD HUNGARIAN CAPITAL LETTER EJ -10CD3 ; [.382A.0020.0002] # OLD HUNGARIAN SMALL LETTER EK -10C93 ; [.382A.0020.0008] # OLD HUNGARIAN CAPITAL LETTER EK -10CD4 ; [.382B.0020.0002] # OLD HUNGARIAN SMALL LETTER AK -10C94 ; [.382B.0020.0008] # OLD HUNGARIAN CAPITAL LETTER AK -10CD5 ; [.382C.0020.0002] # OLD HUNGARIAN SMALL LETTER UNK -10C95 ; [.382C.0020.0008] # OLD HUNGARIAN CAPITAL LETTER UNK -10CD6 ; [.382D.0020.0002] # OLD HUNGARIAN SMALL LETTER EL -10C96 ; [.382D.0020.0008] # OLD HUNGARIAN CAPITAL LETTER EL -10CD7 ; [.382E.0020.0002] # OLD HUNGARIAN SMALL LETTER ELY -10C97 ; [.382E.0020.0008] # OLD HUNGARIAN CAPITAL LETTER ELY -10CD8 ; [.382F.0020.0002] # OLD HUNGARIAN SMALL LETTER EM -10C98 ; [.382F.0020.0008] # OLD HUNGARIAN CAPITAL LETTER EM -10CD9 ; [.3830.0020.0002] # OLD HUNGARIAN SMALL LETTER EN -10C99 ; [.3830.0020.0008] # OLD HUNGARIAN CAPITAL LETTER EN -10CDA ; [.3831.0020.0002] # OLD HUNGARIAN SMALL LETTER ENY -10C9A ; [.3831.0020.0008] # OLD HUNGARIAN CAPITAL LETTER ENY -10CDB ; [.3832.0020.0002] # OLD HUNGARIAN SMALL LETTER O -10C9B ; [.3832.0020.0008] # OLD HUNGARIAN CAPITAL LETTER O -10CDC ; [.3832.0020.0004][.0000.0111.0004] # OLD HUNGARIAN SMALL LETTER OO -10C9C ; [.3832.0020.000A][.0000.0111.0004] # OLD HUNGARIAN CAPITAL LETTER OO -10CDD ; [.3833.0020.0002] # OLD HUNGARIAN SMALL LETTER NIKOLSBURG OE -10C9D ; [.3833.0020.0008] # OLD HUNGARIAN CAPITAL LETTER NIKOLSBURG OE -10CDE ; [.3833.0020.0004][.0000.0111.0004] # OLD HUNGARIAN SMALL LETTER RUDIMENTA OE -10C9E ; [.3833.0020.000A][.0000.0111.0004] # OLD HUNGARIAN CAPITAL LETTER RUDIMENTA OE -10CDF ; [.3833.0020.0004][.0000.0112.0004] # OLD HUNGARIAN SMALL LETTER OEE -10C9F ; [.3833.0020.000A][.0000.0112.0004] # OLD HUNGARIAN CAPITAL LETTER OEE -10CE0 ; [.3834.0020.0002] # OLD HUNGARIAN SMALL LETTER EP -10CA0 ; [.3834.0020.0008] # OLD HUNGARIAN CAPITAL LETTER EP -10CE1 ; [.3835.0020.0002] # OLD HUNGARIAN SMALL LETTER EMP -10CA1 ; [.3835.0020.0008] # OLD HUNGARIAN CAPITAL LETTER EMP -10CE2 ; [.3836.0020.0002] # OLD HUNGARIAN SMALL LETTER ER -10CA2 ; [.3836.0020.0008] # OLD HUNGARIAN CAPITAL LETTER ER -10CE3 ; [.3836.0020.0004][.0000.0111.0004] # OLD HUNGARIAN SMALL LETTER SHORT ER -10CA3 ; [.3836.0020.000A][.0000.0111.0004] # OLD HUNGARIAN CAPITAL LETTER SHORT ER -10CE4 ; [.3837.0020.0002] # OLD HUNGARIAN SMALL LETTER ES -10CA4 ; [.3837.0020.0008] # OLD HUNGARIAN CAPITAL LETTER ES -10CE5 ; [.3838.0020.0002] # OLD HUNGARIAN SMALL LETTER ESZ -10CA5 ; [.3838.0020.0008] # OLD HUNGARIAN CAPITAL LETTER ESZ -10CE6 ; [.3839.0020.0002] # OLD HUNGARIAN SMALL LETTER ET -10CA6 ; [.3839.0020.0008] # OLD HUNGARIAN CAPITAL LETTER ET -10CE7 ; [.383A.0020.0002] # OLD HUNGARIAN SMALL LETTER ENT -10CA7 ; [.383A.0020.0008] # OLD HUNGARIAN CAPITAL LETTER ENT -10CE8 ; [.383B.0020.0002] # OLD HUNGARIAN SMALL LETTER ETY -10CA8 ; [.383B.0020.0008] # OLD HUNGARIAN CAPITAL LETTER ETY -10CE9 ; [.383C.0020.0002] # OLD HUNGARIAN SMALL LETTER ECH -10CA9 ; [.383C.0020.0008] # OLD HUNGARIAN CAPITAL LETTER ECH -10CEA ; [.383D.0020.0002] # OLD HUNGARIAN SMALL LETTER U -10CAA ; [.383D.0020.0008] # OLD HUNGARIAN CAPITAL LETTER U -10CEB ; [.383D.0020.0004][.0000.0111.0004] # OLD HUNGARIAN SMALL LETTER UU -10CAB ; [.383D.0020.000A][.0000.0111.0004] # OLD HUNGARIAN CAPITAL LETTER UU -10CEC ; [.383E.0020.0002] # OLD HUNGARIAN SMALL LETTER NIKOLSBURG UE -10CAC ; [.383E.0020.0008] # OLD HUNGARIAN CAPITAL LETTER NIKOLSBURG UE -10CED ; [.383E.0020.0004][.0000.0111.0004] # OLD HUNGARIAN SMALL LETTER RUDIMENTA UE -10CAD ; [.383E.0020.000A][.0000.0111.0004] # OLD HUNGARIAN CAPITAL LETTER RUDIMENTA UE -10CEE ; [.383F.0020.0002] # OLD HUNGARIAN SMALL LETTER EV -10CAE ; [.383F.0020.0008] # OLD HUNGARIAN CAPITAL LETTER EV -10CEF ; [.3840.0020.0002] # OLD HUNGARIAN SMALL LETTER EZ -10CAF ; [.3840.0020.0008] # OLD HUNGARIAN CAPITAL LETTER EZ -10CF0 ; [.3841.0020.0002] # OLD HUNGARIAN SMALL LETTER EZS -10CB0 ; [.3841.0020.0008] # OLD HUNGARIAN CAPITAL LETTER EZS -10CF1 ; [.3842.0020.0002] # OLD HUNGARIAN SMALL LETTER ENT-SHAPED SIGN -10CB1 ; [.3842.0020.0008] # OLD HUNGARIAN CAPITAL LETTER ENT-SHAPED SIGN -10CF2 ; [.3843.0020.0002] # OLD HUNGARIAN SMALL LETTER US -10CB2 ; [.3843.0020.0008] # OLD HUNGARIAN CAPITAL LETTER US -10C00 ; [.3844.0020.0002] # OLD TURKIC LETTER ORKHON A -10C01 ; [.3844.0020.0004][.0000.0111.0004] # OLD TURKIC LETTER YENISEI A -10C02 ; [.3845.0020.0002] # OLD TURKIC LETTER YENISEI AE -10C03 ; [.3846.0020.0002] # OLD TURKIC LETTER ORKHON I -10C04 ; [.3846.0020.0004][.0000.0111.0004] # OLD TURKIC LETTER YENISEI I -10C05 ; [.3847.0020.0002] # OLD TURKIC LETTER YENISEI E -10C06 ; [.3848.0020.0002] # OLD TURKIC LETTER ORKHON O -10C07 ; [.3849.0020.0002] # OLD TURKIC LETTER ORKHON OE -10C08 ; [.3849.0020.0004][.0000.0111.0004] # OLD TURKIC LETTER YENISEI OE -10C09 ; [.384A.0020.0002] # OLD TURKIC LETTER ORKHON AB -10C0A ; [.384A.0020.0004][.0000.0111.0004] # OLD TURKIC LETTER YENISEI AB -10C0B ; [.384B.0020.0002] # OLD TURKIC LETTER ORKHON AEB -10C0C ; [.384B.0020.0004][.0000.0111.0004] # OLD TURKIC LETTER YENISEI AEB -10C0D ; [.384C.0020.0002] # OLD TURKIC LETTER ORKHON AG -10C0E ; [.384C.0020.0004][.0000.0111.0004] # OLD TURKIC LETTER YENISEI AG -10C0F ; [.384D.0020.0002] # OLD TURKIC LETTER ORKHON AEG -10C10 ; [.384D.0020.0004][.0000.0111.0004] # OLD TURKIC LETTER YENISEI AEG -10C11 ; [.384E.0020.0002] # OLD TURKIC LETTER ORKHON AD -10C12 ; [.384E.0020.0004][.0000.0111.0004] # OLD TURKIC LETTER YENISEI AD -10C13 ; [.384F.0020.0002] # OLD TURKIC LETTER ORKHON AED -10C14 ; [.3850.0020.0002] # OLD TURKIC LETTER ORKHON EZ -10C15 ; [.3850.0020.0004][.0000.0111.0004] # OLD TURKIC LETTER YENISEI EZ -10C16 ; [.3851.0020.0002] # OLD TURKIC LETTER ORKHON AY -10C17 ; [.3851.0020.0004][.0000.0111.0004] # OLD TURKIC LETTER YENISEI AY -10C18 ; [.3852.0020.0002] # OLD TURKIC LETTER ORKHON AEY -10C19 ; [.3852.0020.0004][.0000.0111.0004] # OLD TURKIC LETTER YENISEI AEY -10C1A ; [.3853.0020.0002] # OLD TURKIC LETTER ORKHON AEK -10C1B ; [.3853.0020.0004][.0000.0111.0004] # OLD TURKIC LETTER YENISEI AEK -10C1C ; [.3854.0020.0002] # OLD TURKIC LETTER ORKHON OEK -10C1D ; [.3854.0020.0004][.0000.0111.0004] # OLD TURKIC LETTER YENISEI OEK -10C1E ; [.3855.0020.0002] # OLD TURKIC LETTER ORKHON AL -10C1F ; [.3855.0020.0004][.0000.0111.0004] # OLD TURKIC LETTER YENISEI AL -10C20 ; [.3856.0020.0002] # OLD TURKIC LETTER ORKHON AEL -10C21 ; [.3857.0020.0002] # OLD TURKIC LETTER ORKHON ELT -10C22 ; [.3858.0020.0002] # OLD TURKIC LETTER ORKHON EM -10C23 ; [.3859.0020.0002] # OLD TURKIC LETTER ORKHON AN -10C24 ; [.385A.0020.0002] # OLD TURKIC LETTER ORKHON AEN -10C25 ; [.385A.0020.0004][.0000.0111.0004] # OLD TURKIC LETTER YENISEI AEN -10C26 ; [.385B.0020.0002] # OLD TURKIC LETTER ORKHON ENT -10C27 ; [.385B.0020.0004][.0000.0111.0004] # OLD TURKIC LETTER YENISEI ENT -10C28 ; [.385C.0020.0002] # OLD TURKIC LETTER ORKHON ENC -10C29 ; [.385C.0020.0004][.0000.0111.0004] # OLD TURKIC LETTER YENISEI ENC -10C2A ; [.385D.0020.0002] # OLD TURKIC LETTER ORKHON ENY -10C2B ; [.385D.0020.0004][.0000.0111.0004] # OLD TURKIC LETTER YENISEI ENY -10C2C ; [.385E.0020.0002] # OLD TURKIC LETTER YENISEI ANG -10C2D ; [.385F.0020.0002] # OLD TURKIC LETTER ORKHON ENG -10C2E ; [.385F.0020.0004][.0000.0111.0004] # OLD TURKIC LETTER YENISEI AENG -10C2F ; [.3860.0020.0002] # OLD TURKIC LETTER ORKHON EP -10C30 ; [.3861.0020.0002] # OLD TURKIC LETTER ORKHON OP -10C31 ; [.3862.0020.0002] # OLD TURKIC LETTER ORKHON IC -10C32 ; [.3863.0020.0002] # OLD TURKIC LETTER ORKHON EC -10C33 ; [.3863.0020.0004][.0000.0111.0004] # OLD TURKIC LETTER YENISEI EC -10C34 ; [.3864.0020.0002] # OLD TURKIC LETTER ORKHON AQ -10C35 ; [.3864.0020.0004][.0000.0111.0004] # OLD TURKIC LETTER YENISEI AQ -10C36 ; [.3865.0020.0002] # OLD TURKIC LETTER ORKHON IQ -10C37 ; [.3865.0020.0004][.0000.0111.0004] # OLD TURKIC LETTER YENISEI IQ -10C38 ; [.3866.0020.0002] # OLD TURKIC LETTER ORKHON OQ -10C39 ; [.3866.0020.0004][.0000.0111.0004] # OLD TURKIC LETTER YENISEI OQ -10C3A ; [.3867.0020.0002] # OLD TURKIC LETTER ORKHON AR -10C3B ; [.3867.0020.0004][.0000.0111.0004] # OLD TURKIC LETTER YENISEI AR -10C3C ; [.3868.0020.0002] # OLD TURKIC LETTER ORKHON AER -10C3D ; [.3869.0020.0002] # OLD TURKIC LETTER ORKHON AS -10C3E ; [.386A.0020.0002] # OLD TURKIC LETTER ORKHON AES -10C3F ; [.386B.0020.0002] # OLD TURKIC LETTER ORKHON ASH -10C40 ; [.386B.0020.0004][.0000.0111.0004] # OLD TURKIC LETTER YENISEI ASH -10C41 ; [.386C.0020.0002] # OLD TURKIC LETTER ORKHON ESH -10C42 ; [.386C.0020.0004][.0000.0111.0004] # OLD TURKIC LETTER YENISEI ESH -10C43 ; [.386D.0020.0002] # OLD TURKIC LETTER ORKHON AT -10C44 ; [.386D.0020.0004][.0000.0111.0004] # OLD TURKIC LETTER YENISEI AT -10C45 ; [.386E.0020.0002] # OLD TURKIC LETTER ORKHON AET -10C46 ; [.386E.0020.0004][.0000.0111.0004] # OLD TURKIC LETTER YENISEI AET -10C47 ; [.386F.0020.0002] # OLD TURKIC LETTER ORKHON OT -10C48 ; [.3870.0020.0002] # OLD TURKIC LETTER ORKHON BASH -A500 ; [.3871.0020.0002] # VAI SYLLABLE EE -A501 ; [.3872.0020.0002] # VAI SYLLABLE EEN -A502 ; [.3873.0020.0002] # VAI SYLLABLE HEE -A503 ; [.3874.0020.0002] # VAI SYLLABLE WEE -A504 ; [.3875.0020.0002] # VAI SYLLABLE WEEN -A505 ; [.3876.0020.0002] # VAI SYLLABLE PEE -A506 ; [.3877.0020.0002] # VAI SYLLABLE BHEE -A507 ; [.3878.0020.0002] # VAI SYLLABLE BEE -A508 ; [.3879.0020.0002] # VAI SYLLABLE MBEE -A509 ; [.387A.0020.0002] # VAI SYLLABLE KPEE -A50A ; [.387B.0020.0002] # VAI SYLLABLE MGBEE -A50B ; [.387C.0020.0002] # VAI SYLLABLE GBEE -A50C ; [.387D.0020.0002] # VAI SYLLABLE FEE -A613 ; [.387D.0020.0004][.397C.0020.0004] # VAI SYMBOL FEENG -A50D ; [.387E.0020.0002] # VAI SYLLABLE VEE -A50E ; [.387F.0020.0002] # VAI SYLLABLE TEE -A50F ; [.3880.0020.0002] # VAI SYLLABLE THEE -A510 ; [.3881.0020.0002] # VAI SYLLABLE DHEE -A511 ; [.3882.0020.0002] # VAI SYLLABLE DHHEE -A512 ; [.3883.0020.0002] # VAI SYLLABLE LEE -A513 ; [.3884.0020.0002] # VAI SYLLABLE REE -A514 ; [.3885.0020.0002] # VAI SYLLABLE DEE -A515 ; [.3886.0020.0002] # VAI SYLLABLE NDEE -A516 ; [.3887.0020.0002] # VAI SYLLABLE SEE -A517 ; [.3888.0020.0002] # VAI SYLLABLE SHEE -A518 ; [.3889.0020.0002] # VAI SYLLABLE ZEE -A519 ; [.388A.0020.0002] # VAI SYLLABLE ZHEE -A51A ; [.388B.0020.0002] # VAI SYLLABLE CEE -A51B ; [.388C.0020.0002] # VAI SYLLABLE JEE -A51C ; [.388D.0020.0002] # VAI SYLLABLE NJEE -A51D ; [.388E.0020.0002] # VAI SYLLABLE YEE -A51E ; [.388F.0020.0002] # VAI SYLLABLE KEE -A614 ; [.388F.0020.0004][.397C.0020.0004] # VAI SYMBOL KEENG -A51F ; [.3890.0020.0002] # VAI SYLLABLE NGGEE -A520 ; [.3891.0020.0002] # VAI SYLLABLE GEE -A521 ; [.3892.0020.0002] # VAI SYLLABLE MEE -A522 ; [.3893.0020.0002] # VAI SYLLABLE NEE -A523 ; [.3894.0020.0002] # VAI SYLLABLE NYEE -A524 ; [.3895.0020.0002] # VAI SYLLABLE I -A525 ; [.3896.0020.0002] # VAI SYLLABLE IN -A526 ; [.3897.0020.0002] # VAI SYLLABLE HI -A527 ; [.3898.0020.0002] # VAI SYLLABLE HIN -A528 ; [.3899.0020.0002] # VAI SYLLABLE WI -A529 ; [.389A.0020.0002] # VAI SYLLABLE WIN -A52A ; [.389B.0020.0002] # VAI SYLLABLE PI -A52B ; [.389C.0020.0002] # VAI SYLLABLE BHI -A52C ; [.389D.0020.0002] # VAI SYLLABLE BI -A52D ; [.389E.0020.0002] # VAI SYLLABLE MBI -A52E ; [.389F.0020.0002] # VAI SYLLABLE KPI -A52F ; [.38A0.0020.0002] # VAI SYLLABLE MGBI -A530 ; [.38A1.0020.0002] # VAI SYLLABLE GBI -A531 ; [.38A2.0020.0002] # VAI SYLLABLE FI -A532 ; [.38A3.0020.0002] # VAI SYLLABLE VI -A533 ; [.38A4.0020.0002] # VAI SYLLABLE TI -A615 ; [.38A4.0020.0004][.397C.0020.0004] # VAI SYMBOL TING -A534 ; [.38A5.0020.0002] # VAI SYLLABLE THI -A535 ; [.38A6.0020.0002] # VAI SYLLABLE DHI -A536 ; [.38A7.0020.0002] # VAI SYLLABLE DHHI -A537 ; [.38A8.0020.0002] # VAI SYLLABLE LI -A538 ; [.38A9.0020.0002] # VAI SYLLABLE RI -A539 ; [.38AA.0020.0002] # VAI SYLLABLE DI -A53A ; [.38AB.0020.0002] # VAI SYLLABLE NDI -A53B ; [.38AC.0020.0002] # VAI SYLLABLE SI -A53C ; [.38AD.0020.0002] # VAI SYLLABLE SHI -A53D ; [.38AE.0020.0002] # VAI SYLLABLE ZI -A53E ; [.38AF.0020.0002] # VAI SYLLABLE ZHI -A53F ; [.38B0.0020.0002] # VAI SYLLABLE CI -A540 ; [.38B1.0020.0002] # VAI SYLLABLE JI -A541 ; [.38B2.0020.0002] # VAI SYLLABLE NJI -A542 ; [.38B3.0020.0002] # VAI SYLLABLE YI -A543 ; [.38B4.0020.0002] # VAI SYLLABLE KI -A544 ; [.38B5.0020.0002] # VAI SYLLABLE NGGI -A545 ; [.38B6.0020.0002] # VAI SYLLABLE GI -A546 ; [.38B7.0020.0002] # VAI SYLLABLE MI -A547 ; [.38B8.0020.0002] # VAI SYLLABLE NI -A616 ; [.38B8.0020.0004][.397D.0020.0004] # VAI SYMBOL NII -A548 ; [.38B9.0020.0002] # VAI SYLLABLE NYI -A549 ; [.38BA.0020.0002] # VAI SYLLABLE A -A54A ; [.38BB.0020.0002] # VAI SYLLABLE AN -A54B ; [.38BC.0020.0002] # VAI SYLLABLE NGAN -A54C ; [.38BD.0020.0002] # VAI SYLLABLE HA -A54D ; [.38BE.0020.0002] # VAI SYLLABLE HAN -A54E ; [.38BF.0020.0002] # VAI SYLLABLE WA -A54F ; [.38C0.0020.0002] # VAI SYLLABLE WAN -A550 ; [.38C1.0020.0002] # VAI SYLLABLE PA -A551 ; [.38C2.0020.0002] # VAI SYLLABLE BHA -A552 ; [.38C3.0020.0002] # VAI SYLLABLE BA -A617 ; [.38C3.0020.0004][.397C.0020.0004] # VAI SYMBOL BANG -A553 ; [.38C4.0020.0002] # VAI SYLLABLE MBA -A554 ; [.38C5.0020.0002] # VAI SYLLABLE KPA -A555 ; [.38C6.0020.0002] # VAI SYLLABLE KPAN -A556 ; [.38C7.0020.0002] # VAI SYLLABLE MGBA -A557 ; [.38C8.0020.0002] # VAI SYLLABLE GBA -A558 ; [.38C9.0020.0002] # VAI SYLLABLE FA -A610 ; [.38C9.0020.0004] # VAI SYLLABLE NDOLE FA -A618 ; [.38C9.0020.0004][.397D.0020.0004] # VAI SYMBOL FAA -A559 ; [.38CA.0020.0002] # VAI SYLLABLE VA -A55A ; [.38CB.0020.0002] # VAI SYLLABLE TA -A619 ; [.38CB.0020.0004][.397D.0020.0004] # VAI SYMBOL TAA -A55B ; [.38CC.0020.0002] # VAI SYLLABLE THA -A55C ; [.38CD.0020.0002] # VAI SYLLABLE DHA -A55D ; [.38CE.0020.0002] # VAI SYLLABLE DHHA -A55E ; [.38CF.0020.0002] # VAI SYLLABLE LA -A55F ; [.38D0.0020.0002] # VAI SYLLABLE RA -A560 ; [.38D1.0020.0002] # VAI SYLLABLE DA -A61A ; [.38D1.0020.0004][.397C.0020.0004] # VAI SYMBOL DANG -A561 ; [.38D2.0020.0002] # VAI SYLLABLE NDA -A562 ; [.38D3.0020.0002] # VAI SYLLABLE SA -A563 ; [.38D4.0020.0002] # VAI SYLLABLE SHA -A564 ; [.38D5.0020.0002] # VAI SYLLABLE ZA -A565 ; [.38D6.0020.0002] # VAI SYLLABLE ZHA -A566 ; [.38D7.0020.0002] # VAI SYLLABLE CA -A567 ; [.38D8.0020.0002] # VAI SYLLABLE JA -A568 ; [.38D9.0020.0002] # VAI SYLLABLE NJA -A569 ; [.38DA.0020.0002] # VAI SYLLABLE YA -A56A ; [.38DB.0020.0002] # VAI SYLLABLE KA -A611 ; [.38DB.0020.0004] # VAI SYLLABLE NDOLE KA -A56B ; [.38DC.0020.0002] # VAI SYLLABLE KAN -A56C ; [.38DD.0020.0002] # VAI SYLLABLE NGGA -A56D ; [.38DE.0020.0002] # VAI SYLLABLE GA -A56E ; [.38DF.0020.0002] # VAI SYLLABLE MA -A62A ; [.38DF.0020.0004] # VAI SYLLABLE NDOLE MA -A56F ; [.38E0.0020.0002] # VAI SYLLABLE NA -A570 ; [.38E1.0020.0002] # VAI SYLLABLE NYA -A571 ; [.38E2.0020.0002] # VAI SYLLABLE OO -A572 ; [.38E3.0020.0002] # VAI SYLLABLE OON -A573 ; [.38E4.0020.0002] # VAI SYLLABLE HOO -A574 ; [.38E5.0020.0002] # VAI SYLLABLE WOO -A575 ; [.38E6.0020.0002] # VAI SYLLABLE WOON -A576 ; [.38E7.0020.0002] # VAI SYLLABLE POO -A577 ; [.38E8.0020.0002] # VAI SYLLABLE BHOO -A578 ; [.38E9.0020.0002] # VAI SYLLABLE BOO -A579 ; [.38EA.0020.0002] # VAI SYLLABLE MBOO -A57A ; [.38EB.0020.0002] # VAI SYLLABLE KPOO -A57B ; [.38EC.0020.0002] # VAI SYLLABLE MGBOO -A57C ; [.38ED.0020.0002] # VAI SYLLABLE GBOO -A57D ; [.38EE.0020.0002] # VAI SYLLABLE FOO -A57E ; [.38EF.0020.0002] # VAI SYLLABLE VOO -A57F ; [.38F0.0020.0002] # VAI SYLLABLE TOO -A580 ; [.38F1.0020.0002] # VAI SYLLABLE THOO -A581 ; [.38F2.0020.0002] # VAI SYLLABLE DHOO -A582 ; [.38F3.0020.0002] # VAI SYLLABLE DHHOO -A583 ; [.38F4.0020.0002] # VAI SYLLABLE LOO -A584 ; [.38F5.0020.0002] # VAI SYLLABLE ROO -A585 ; [.38F6.0020.0002] # VAI SYLLABLE DOO -A61B ; [.38F6.0020.0004][.397C.0020.0004] # VAI SYMBOL DOONG -A586 ; [.38F7.0020.0002] # VAI SYLLABLE NDOO -A587 ; [.38F8.0020.0002] # VAI SYLLABLE SOO -A612 ; [.38F8.0020.0004] # VAI SYLLABLE NDOLE SOO -A588 ; [.38F9.0020.0002] # VAI SYLLABLE SHOO -A589 ; [.38FA.0020.0002] # VAI SYLLABLE ZOO -A58A ; [.38FB.0020.0002] # VAI SYLLABLE ZHOO -A58B ; [.38FC.0020.0002] # VAI SYLLABLE COO -A58C ; [.38FD.0020.0002] # VAI SYLLABLE JOO -A58D ; [.38FE.0020.0002] # VAI SYLLABLE NJOO -A58E ; [.38FF.0020.0002] # VAI SYLLABLE YOO -A58F ; [.3900.0020.0002] # VAI SYLLABLE KOO -A590 ; [.3901.0020.0002] # VAI SYLLABLE NGGOO -A591 ; [.3902.0020.0002] # VAI SYLLABLE GOO -A592 ; [.3903.0020.0002] # VAI SYLLABLE MOO -A593 ; [.3904.0020.0002] # VAI SYLLABLE NOO -A594 ; [.3905.0020.0002] # VAI SYLLABLE NYOO -A595 ; [.3906.0020.0002] # VAI SYLLABLE U -A596 ; [.3907.0020.0002] # VAI SYLLABLE UN -A597 ; [.3908.0020.0002] # VAI SYLLABLE HU -A598 ; [.3909.0020.0002] # VAI SYLLABLE HUN -A599 ; [.390A.0020.0002] # VAI SYLLABLE WU -A59A ; [.390B.0020.0002] # VAI SYLLABLE WUN -A59B ; [.390C.0020.0002] # VAI SYLLABLE PU -A59C ; [.390D.0020.0002] # VAI SYLLABLE BHU -A59D ; [.390E.0020.0002] # VAI SYLLABLE BU -A59E ; [.390F.0020.0002] # VAI SYLLABLE MBU -A59F ; [.3910.0020.0002] # VAI SYLLABLE KPU -A5A0 ; [.3911.0020.0002] # VAI SYLLABLE MGBU -A5A1 ; [.3912.0020.0002] # VAI SYLLABLE GBU -A5A2 ; [.3913.0020.0002] # VAI SYLLABLE FU -A5A3 ; [.3914.0020.0002] # VAI SYLLABLE VU -A5A4 ; [.3915.0020.0002] # VAI SYLLABLE TU -A5A5 ; [.3916.0020.0002] # VAI SYLLABLE THU -A5A6 ; [.3917.0020.0002] # VAI SYLLABLE DHU -A5A7 ; [.3918.0020.0002] # VAI SYLLABLE DHHU -A5A8 ; [.3919.0020.0002] # VAI SYLLABLE LU -A5A9 ; [.391A.0020.0002] # VAI SYLLABLE RU -A5AA ; [.391B.0020.0002] # VAI SYLLABLE DU -A5AB ; [.391C.0020.0002] # VAI SYLLABLE NDU -A5AC ; [.391D.0020.0002] # VAI SYLLABLE SU -A5AD ; [.391E.0020.0002] # VAI SYLLABLE SHU -A5AE ; [.391F.0020.0002] # VAI SYLLABLE ZU -A5AF ; [.3920.0020.0002] # VAI SYLLABLE ZHU -A5B0 ; [.3921.0020.0002] # VAI SYLLABLE CU -A5B1 ; [.3922.0020.0002] # VAI SYLLABLE JU -A5B2 ; [.3923.0020.0002] # VAI SYLLABLE NJU -A5B3 ; [.3924.0020.0002] # VAI SYLLABLE YU -A5B4 ; [.3925.0020.0002] # VAI SYLLABLE KU -A61C ; [.3925.0020.0004][.397C.0020.0004] # VAI SYMBOL KUNG -A5B5 ; [.3926.0020.0002] # VAI SYLLABLE NGGU -A5B6 ; [.3927.0020.0002] # VAI SYLLABLE GU -A5B7 ; [.3928.0020.0002] # VAI SYLLABLE MU -A5B8 ; [.3929.0020.0002] # VAI SYLLABLE NU -A5B9 ; [.392A.0020.0002] # VAI SYLLABLE NYU -A5BA ; [.392B.0020.0002] # VAI SYLLABLE O -A5BB ; [.392C.0020.0002] # VAI SYLLABLE ON -A5BC ; [.392D.0020.0002] # VAI SYLLABLE NGON -A5BD ; [.392E.0020.0002] # VAI SYLLABLE HO -A5BE ; [.392F.0020.0002] # VAI SYLLABLE HON -A5BF ; [.3930.0020.0002] # VAI SYLLABLE WO -A5C0 ; [.3931.0020.0002] # VAI SYLLABLE WON -A5C1 ; [.3932.0020.0002] # VAI SYLLABLE PO -A5C2 ; [.3933.0020.0002] # VAI SYLLABLE BHO -A5C3 ; [.3934.0020.0002] # VAI SYLLABLE BO -A5C4 ; [.3935.0020.0002] # VAI SYLLABLE MBO -A5C5 ; [.3936.0020.0002] # VAI SYLLABLE KPO -A5C6 ; [.3937.0020.0002] # VAI SYLLABLE MGBO -A5C7 ; [.3938.0020.0002] # VAI SYLLABLE GBO -A5C8 ; [.3939.0020.0002] # VAI SYLLABLE GBON -A5C9 ; [.393A.0020.0002] # VAI SYLLABLE FO -A5CA ; [.393B.0020.0002] # VAI SYLLABLE VO -A5CB ; [.393C.0020.0002] # VAI SYLLABLE TO -A61D ; [.393C.0020.0004][.397C.0020.0004] # VAI SYMBOL TONG -A5CC ; [.393D.0020.0002] # VAI SYLLABLE THO -A5CD ; [.393E.0020.0002] # VAI SYLLABLE DHO -A5CE ; [.393F.0020.0002] # VAI SYLLABLE DHHO -A5CF ; [.3940.0020.0002] # VAI SYLLABLE LO -A5D0 ; [.3941.0020.0002] # VAI SYLLABLE RO -A5D1 ; [.3942.0020.0002] # VAI SYLLABLE DO -A62B ; [.3942.0020.0004] # VAI SYLLABLE NDOLE DO -A61E ; [.3942.0020.0004][.397D.0020.0004] # VAI SYMBOL DO-O -A5D2 ; [.3943.0020.0002] # VAI SYLLABLE NDO -A5D3 ; [.3944.0020.0002] # VAI SYLLABLE SO -A5D4 ; [.3945.0020.0002] # VAI SYLLABLE SHO -A5D5 ; [.3946.0020.0002] # VAI SYLLABLE ZO -A5D6 ; [.3947.0020.0002] # VAI SYLLABLE ZHO -A5D7 ; [.3948.0020.0002] # VAI SYLLABLE CO -A5D8 ; [.3949.0020.0002] # VAI SYLLABLE JO -A61F ; [.3949.0020.0004][.397C.0020.0004] # VAI SYMBOL JONG -A5D9 ; [.394A.0020.0002] # VAI SYLLABLE NJO -A5DA ; [.394B.0020.0002] # VAI SYLLABLE YO -A5DB ; [.394C.0020.0002] # VAI SYLLABLE KO -A5DC ; [.394D.0020.0002] # VAI SYLLABLE NGGO -A5DD ; [.394E.0020.0002] # VAI SYLLABLE GO -A5DE ; [.394F.0020.0002] # VAI SYLLABLE MO -A5DF ; [.3950.0020.0002] # VAI SYLLABLE NO -A5E0 ; [.3951.0020.0002] # VAI SYLLABLE NYO -A5E1 ; [.3952.0020.0002] # VAI SYLLABLE E -A5E2 ; [.3953.0020.0002] # VAI SYLLABLE EN -A5E3 ; [.3954.0020.0002] # VAI SYLLABLE NGEN -A5E4 ; [.3955.0020.0002] # VAI SYLLABLE HE -A5E5 ; [.3956.0020.0002] # VAI SYLLABLE HEN -A5E6 ; [.3957.0020.0002] # VAI SYLLABLE WE -A5E7 ; [.3958.0020.0002] # VAI SYLLABLE WEN -A5E8 ; [.3959.0020.0002] # VAI SYLLABLE PE -A5E9 ; [.395A.0020.0002] # VAI SYLLABLE BHE -A5EA ; [.395B.0020.0002] # VAI SYLLABLE BE -A5EB ; [.395C.0020.0002] # VAI SYLLABLE MBE -A5EC ; [.395D.0020.0002] # VAI SYLLABLE KPE -A5ED ; [.395E.0020.0002] # VAI SYLLABLE KPEN -A5EE ; [.395F.0020.0002] # VAI SYLLABLE MGBE -A5EF ; [.3960.0020.0002] # VAI SYLLABLE GBE -A5F0 ; [.3961.0020.0002] # VAI SYLLABLE GBEN -A5F1 ; [.3962.0020.0002] # VAI SYLLABLE FE -A5F2 ; [.3963.0020.0002] # VAI SYLLABLE VE -A5F3 ; [.3964.0020.0002] # VAI SYLLABLE TE -A5F4 ; [.3965.0020.0002] # VAI SYLLABLE THE -A5F5 ; [.3966.0020.0002] # VAI SYLLABLE DHE -A5F6 ; [.3967.0020.0002] # VAI SYLLABLE DHHE -A5F7 ; [.3968.0020.0002] # VAI SYLLABLE LE -A5F8 ; [.3969.0020.0002] # VAI SYLLABLE RE -A5F9 ; [.396A.0020.0002] # VAI SYLLABLE DE -A5FA ; [.396B.0020.0002] # VAI SYLLABLE NDE -A5FB ; [.396C.0020.0002] # VAI SYLLABLE SE -A5FC ; [.396D.0020.0002] # VAI SYLLABLE SHE -A5FD ; [.396E.0020.0002] # VAI SYLLABLE ZE -A5FE ; [.396F.0020.0002] # VAI SYLLABLE ZHE -A5FF ; [.3970.0020.0002] # VAI SYLLABLE CE -A600 ; [.3971.0020.0002] # VAI SYLLABLE JE -A601 ; [.3972.0020.0002] # VAI SYLLABLE NJE -A602 ; [.3973.0020.0002] # VAI SYLLABLE YE -A603 ; [.3974.0020.0002] # VAI SYLLABLE KE -A604 ; [.3975.0020.0002] # VAI SYLLABLE NGGE -A605 ; [.3976.0020.0002] # VAI SYLLABLE NGGEN -A606 ; [.3977.0020.0002] # VAI SYLLABLE GE -A607 ; [.3978.0020.0002] # VAI SYLLABLE GEN -A608 ; [.3979.0020.0002] # VAI SYLLABLE ME -A609 ; [.397A.0020.0002] # VAI SYLLABLE NE -A60A ; [.397B.0020.0002] # VAI SYLLABLE NYE -A60B ; [.397C.0020.0002] # VAI SYLLABLE NG -A60C ; [.397D.0020.0002] # VAI SYLLABLE LENGTHENER -A6A0 ; [.397E.0020.0002] # BAMUM LETTER A -A6A1 ; [.397F.0020.0002] # BAMUM LETTER KA -A6A2 ; [.3980.0020.0002] # BAMUM LETTER U -A6A3 ; [.3981.0020.0002] # BAMUM LETTER KU -A6A4 ; [.3982.0020.0002] # BAMUM LETTER EE -A6A5 ; [.3983.0020.0002] # BAMUM LETTER REE -A6A6 ; [.3984.0020.0002] # BAMUM LETTER TAE -A6A7 ; [.3985.0020.0002] # BAMUM LETTER O -A6A8 ; [.3986.0020.0002] # BAMUM LETTER NYI -A6A9 ; [.3987.0020.0002] # BAMUM LETTER I -A6AA ; [.3988.0020.0002] # BAMUM LETTER LA -A6AB ; [.3989.0020.0002] # BAMUM LETTER PA -A6AC ; [.398A.0020.0002] # BAMUM LETTER RII -A6AD ; [.398B.0020.0002] # BAMUM LETTER RIEE -A6AE ; [.398C.0020.0002] # BAMUM LETTER LEEEE -A6AF ; [.398D.0020.0002] # BAMUM LETTER MEEEE -A6B0 ; [.398E.0020.0002] # BAMUM LETTER TAA -A6B1 ; [.398F.0020.0002] # BAMUM LETTER NDAA -A6B2 ; [.3990.0020.0002] # BAMUM LETTER NJAEM -A6B3 ; [.3991.0020.0002] # BAMUM LETTER M -A6B4 ; [.3992.0020.0002] # BAMUM LETTER SUU -A6B5 ; [.3993.0020.0002] # BAMUM LETTER MU -A6B6 ; [.3994.0020.0002] # BAMUM LETTER SHII -A6B7 ; [.3995.0020.0002] # BAMUM LETTER SI -A6B8 ; [.3996.0020.0002] # BAMUM LETTER SHEUX -A6B9 ; [.3997.0020.0002] # BAMUM LETTER SEUX -A6BA ; [.3998.0020.0002] # BAMUM LETTER KYEE -A6BB ; [.3999.0020.0002] # BAMUM LETTER KET -A6BC ; [.399A.0020.0002] # BAMUM LETTER NUAE -A6BD ; [.399B.0020.0002] # BAMUM LETTER NU -A6BE ; [.399C.0020.0002] # BAMUM LETTER NJUAE -A6BF ; [.399D.0020.0002] # BAMUM LETTER YOQ -A6C0 ; [.399E.0020.0002] # BAMUM LETTER SHU -A6C1 ; [.399F.0020.0002] # BAMUM LETTER YUQ -A6C2 ; [.39A0.0020.0002] # BAMUM LETTER YA -A6C3 ; [.39A1.0020.0002] # BAMUM LETTER NSHA -A6C4 ; [.39A2.0020.0002] # BAMUM LETTER KEUX -A6C5 ; [.39A3.0020.0002] # BAMUM LETTER PEUX -A6C6 ; [.39A4.0020.0002] # BAMUM LETTER NJEE -A6C7 ; [.39A5.0020.0002] # BAMUM LETTER NTEE -A6C8 ; [.39A6.0020.0002] # BAMUM LETTER PUE -A6C9 ; [.39A7.0020.0002] # BAMUM LETTER WUE -A6CA ; [.39A8.0020.0002] # BAMUM LETTER PEE -A6CB ; [.39A9.0020.0002] # BAMUM LETTER FEE -A6CC ; [.39AA.0020.0002] # BAMUM LETTER RU -A6CD ; [.39AB.0020.0002] # BAMUM LETTER LU -A6CE ; [.39AC.0020.0002] # BAMUM LETTER MI -A6CF ; [.39AD.0020.0002] # BAMUM LETTER NI -A6D0 ; [.39AE.0020.0002] # BAMUM LETTER REUX -A6D1 ; [.39AF.0020.0002] # BAMUM LETTER RAE -A6D2 ; [.39B0.0020.0002] # BAMUM LETTER KEN -A6D3 ; [.39B1.0020.0002] # BAMUM LETTER NGKWAEN -A6D4 ; [.39B2.0020.0002] # BAMUM LETTER NGGA -A6D5 ; [.39B3.0020.0002] # BAMUM LETTER NGA -A6D6 ; [.39B4.0020.0002] # BAMUM LETTER SHO -A6D7 ; [.39B5.0020.0002] # BAMUM LETTER PUAE -A6D8 ; [.39B6.0020.0002] # BAMUM LETTER FU -A6D9 ; [.39B7.0020.0002] # BAMUM LETTER FOM -A6DA ; [.39B8.0020.0002] # BAMUM LETTER WA -A6DB ; [.39B9.0020.0002] # BAMUM LETTER NA -A6DC ; [.39BA.0020.0002] # BAMUM LETTER LI -A6DD ; [.39BB.0020.0002] # BAMUM LETTER PI -A6DE ; [.39BC.0020.0002] # BAMUM LETTER LOQ -A6DF ; [.39BD.0020.0002] # BAMUM LETTER KO -A6E0 ; [.39BE.0020.0002] # BAMUM LETTER MBEN -A6E1 ; [.39BF.0020.0002] # BAMUM LETTER REN -A6E2 ; [.39C0.0020.0002] # BAMUM LETTER MEN -A6E3 ; [.39C1.0020.0002] # BAMUM LETTER MA -A6E4 ; [.39C2.0020.0002] # BAMUM LETTER TI -A6E5 ; [.39C3.0020.0002] # BAMUM LETTER KI -A6E6 ; [.39C4.0020.0002] # BAMUM LETTER MO -A6E7 ; [.39C5.0020.0002] # BAMUM LETTER MBAA -A6E8 ; [.39C6.0020.0002] # BAMUM LETTER TET -A6E9 ; [.39C7.0020.0002] # BAMUM LETTER KPA -A6EA ; [.39C8.0020.0002] # BAMUM LETTER TEN -A6EB ; [.39C9.0020.0002] # BAMUM LETTER NTUU -A6EC ; [.39CA.0020.0002] # BAMUM LETTER SAMBA -A6ED ; [.39CB.0020.0002] # BAMUM LETTER FAAMAE -A6EE ; [.39CC.0020.0002] # BAMUM LETTER KOVUU -A6EF ; [.39CD.0020.0002] # BAMUM LETTER KOGHOM -16800 ; [.39CE.0020.0002] # BAMUM LETTER PHASE-A NGKUE MFON -16801 ; [.39CF.0020.0002] # BAMUM LETTER PHASE-A GBIEE FON -16802 ; [.39D0.0020.0002] # BAMUM LETTER PHASE-A PON MFON PIPAEMGBIEE -16803 ; [.39D1.0020.0002] # BAMUM LETTER PHASE-A PON MFON PIPAEMBA -16804 ; [.39D2.0020.0002] # BAMUM LETTER PHASE-A NAA MFON -16805 ; [.39D3.0020.0002] # BAMUM LETTER PHASE-A SHUENSHUET -16806 ; [.39D4.0020.0002] # BAMUM LETTER PHASE-A TITA MFON -16807 ; [.39D5.0020.0002] # BAMUM LETTER PHASE-A NZA MFON -16808 ; [.39D6.0020.0002] # BAMUM LETTER PHASE-A SHINDA PA NJI -16809 ; [.39D7.0020.0002] # BAMUM LETTER PHASE-A PON PA NJI PIPAEMGBIEE -1680A ; [.39D8.0020.0002] # BAMUM LETTER PHASE-A PON PA NJI PIPAEMBA -1680B ; [.39D9.0020.0002] # BAMUM LETTER PHASE-A MAEMBGBIEE -1680C ; [.39DA.0020.0002] # BAMUM LETTER PHASE-A TU MAEMBA -1680D ; [.39DB.0020.0002] # BAMUM LETTER PHASE-A NGANGU -1680E ; [.39DC.0020.0002] # BAMUM LETTER PHASE-A MAEMVEUX -1680F ; [.39DD.0020.0002] # BAMUM LETTER PHASE-A MANSUAE -16810 ; [.39DE.0020.0002] # BAMUM LETTER PHASE-A MVEUAENGAM -16811 ; [.39DF.0020.0002] # BAMUM LETTER PHASE-A SEUNYAM -16812 ; [.39E0.0020.0002] # BAMUM LETTER PHASE-A NTOQPEN -16813 ; [.39E1.0020.0002] # BAMUM LETTER PHASE-A KEUKEUTNDA -16814 ; [.39E2.0020.0002] # BAMUM LETTER PHASE-A NKINDI -16815 ; [.39E3.0020.0002] # BAMUM LETTER PHASE-A SUU -16816 ; [.39E4.0020.0002] # BAMUM LETTER PHASE-A NGKUENZEUM -16817 ; [.39E5.0020.0002] # BAMUM LETTER PHASE-A LAPAQ -16818 ; [.39E6.0020.0002] # BAMUM LETTER PHASE-A LET KUT -16819 ; [.39E7.0020.0002] # BAMUM LETTER PHASE-A NTAP MFAA -1681A ; [.39E8.0020.0002] # BAMUM LETTER PHASE-A MAEKEUP -1681B ; [.39E9.0020.0002] # BAMUM LETTER PHASE-A PASHAE -1681C ; [.39EA.0020.0002] # BAMUM LETTER PHASE-A GHEUAERAE -1681D ; [.39EB.0020.0002] # BAMUM LETTER PHASE-A PAMSHAE -1681E ; [.39EC.0020.0002] # BAMUM LETTER PHASE-A MON NGGEUAET -1681F ; [.39ED.0020.0002] # BAMUM LETTER PHASE-A NZUN MEUT -16820 ; [.39EE.0020.0002] # BAMUM LETTER PHASE-A U YUQ NAE -16821 ; [.39EF.0020.0002] # BAMUM LETTER PHASE-A GHEUAEGHEUAE -16822 ; [.39F0.0020.0002] # BAMUM LETTER PHASE-A NTAP NTAA -16823 ; [.39F1.0020.0002] # BAMUM LETTER PHASE-A SISA -16824 ; [.39F2.0020.0002] # BAMUM LETTER PHASE-A MGBASA -16825 ; [.39F3.0020.0002] # BAMUM LETTER PHASE-A MEUNJOMNDEUQ -16826 ; [.39F4.0020.0002] # BAMUM LETTER PHASE-A MOOMPUQ -16827 ; [.39F5.0020.0002] # BAMUM LETTER PHASE-A KAFA -16828 ; [.39F6.0020.0002] # BAMUM LETTER PHASE-A PA LEERAEWA -16829 ; [.39F7.0020.0002] # BAMUM LETTER PHASE-A NDA LEERAEWA -1682A ; [.39F8.0020.0002] # BAMUM LETTER PHASE-A PET -1682B ; [.39F9.0020.0002] # BAMUM LETTER PHASE-A MAEMKPEN -1682C ; [.39FA.0020.0002] # BAMUM LETTER PHASE-A NIKA -1682D ; [.39FB.0020.0002] # BAMUM LETTER PHASE-A PUP -1682E ; [.39FC.0020.0002] # BAMUM LETTER PHASE-A TUAEP -1682F ; [.39FD.0020.0002] # BAMUM LETTER PHASE-A LUAEP -16830 ; [.39FE.0020.0002] # BAMUM LETTER PHASE-A SONJAM -16831 ; [.39FF.0020.0002] # BAMUM LETTER PHASE-A TEUTEUWEN -16832 ; [.3A00.0020.0002] # BAMUM LETTER PHASE-A MAENYI -16833 ; [.3A01.0020.0002] # BAMUM LETTER PHASE-A KET -16834 ; [.3A02.0020.0002] # BAMUM LETTER PHASE-A NDAANGGEUAET -16835 ; [.3A03.0020.0002] # BAMUM LETTER PHASE-A KUOQ -16836 ; [.3A04.0020.0002] # BAMUM LETTER PHASE-A MOOMEUT -16837 ; [.3A05.0020.0002] # BAMUM LETTER PHASE-A SHUM -16838 ; [.3A06.0020.0002] # BAMUM LETTER PHASE-A LOMMAE -16839 ; [.3A07.0020.0002] # BAMUM LETTER PHASE-A FIRI -1683A ; [.3A08.0020.0002] # BAMUM LETTER PHASE-A ROM -1683B ; [.3A09.0020.0002] # BAMUM LETTER PHASE-A KPOQ -1683C ; [.3A0A.0020.0002] # BAMUM LETTER PHASE-A SOQ -1683D ; [.3A0B.0020.0002] # BAMUM LETTER PHASE-A MAP PIEET -1683E ; [.3A0C.0020.0002] # BAMUM LETTER PHASE-A SHIRAE -1683F ; [.3A0D.0020.0002] # BAMUM LETTER PHASE-A NTAP -16840 ; [.3A0E.0020.0002] # BAMUM LETTER PHASE-A SHOQ NSHUT YUM -16841 ; [.3A0F.0020.0002] # BAMUM LETTER PHASE-A NYIT MONGKEUAEQ -16842 ; [.3A10.0020.0002] # BAMUM LETTER PHASE-A PAARAE -16843 ; [.3A11.0020.0002] # BAMUM LETTER PHASE-A NKAARAE -16844 ; [.3A12.0020.0002] # BAMUM LETTER PHASE-A UNKNOWN -16845 ; [.3A13.0020.0002] # BAMUM LETTER PHASE-A NGGEN -16846 ; [.3A14.0020.0002] # BAMUM LETTER PHASE-A MAESI -16847 ; [.3A15.0020.0002] # BAMUM LETTER PHASE-A NJAM -16848 ; [.3A16.0020.0002] # BAMUM LETTER PHASE-A MBANYI -16849 ; [.3A17.0020.0002] # BAMUM LETTER PHASE-A NYET -1684A ; [.3A18.0020.0002] # BAMUM LETTER PHASE-A TEUAEN -1684B ; [.3A19.0020.0002] # BAMUM LETTER PHASE-A SOT -1684C ; [.3A1A.0020.0002] # BAMUM LETTER PHASE-A PAAM -1684D ; [.3A1B.0020.0002] # BAMUM LETTER PHASE-A NSHIEE -1684E ; [.3A1C.0020.0002] # BAMUM LETTER PHASE-A MAEM -1684F ; [.3A1D.0020.0002] # BAMUM LETTER PHASE-A NYI -16850 ; [.3A1E.0020.0002] # BAMUM LETTER PHASE-A KAQ -16851 ; [.3A1F.0020.0002] # BAMUM LETTER PHASE-A NSHA -16852 ; [.3A20.0020.0002] # BAMUM LETTER PHASE-A VEE -16853 ; [.3A21.0020.0002] # BAMUM LETTER PHASE-A LU -16854 ; [.3A22.0020.0002] # BAMUM LETTER PHASE-A NEN -16855 ; [.3A23.0020.0002] # BAMUM LETTER PHASE-A NAQ -16856 ; [.3A24.0020.0002] # BAMUM LETTER PHASE-A MBAQ -16857 ; [.3A25.0020.0002] # BAMUM LETTER PHASE-B NSHUET -16858 ; [.3A26.0020.0002] # BAMUM LETTER PHASE-B TU MAEMGBIEE -16859 ; [.3A27.0020.0002] # BAMUM LETTER PHASE-B SIEE -1685A ; [.3A28.0020.0002] # BAMUM LETTER PHASE-B SET TU -1685B ; [.3A29.0020.0002] # BAMUM LETTER PHASE-B LOM NTEUM -1685C ; [.3A2A.0020.0002] # BAMUM LETTER PHASE-B MBA MAELEE -1685D ; [.3A2B.0020.0002] # BAMUM LETTER PHASE-B KIEEM -1685E ; [.3A2C.0020.0002] # BAMUM LETTER PHASE-B YEURAE -1685F ; [.3A2D.0020.0002] # BAMUM LETTER PHASE-B MBAARAE -16860 ; [.3A2E.0020.0002] # BAMUM LETTER PHASE-B KAM -16861 ; [.3A2F.0020.0002] # BAMUM LETTER PHASE-B PEESHI -16862 ; [.3A30.0020.0002] # BAMUM LETTER PHASE-B YAFU LEERAEWA -16863 ; [.3A31.0020.0002] # BAMUM LETTER PHASE-B LAM NSHUT NYAM -16864 ; [.3A32.0020.0002] # BAMUM LETTER PHASE-B NTIEE SHEUOQ -16865 ; [.3A33.0020.0002] # BAMUM LETTER PHASE-B NDU NJAA -16866 ; [.3A34.0020.0002] # BAMUM LETTER PHASE-B GHEUGHEUAEM -16867 ; [.3A35.0020.0002] # BAMUM LETTER PHASE-B PIT -16868 ; [.3A36.0020.0002] # BAMUM LETTER PHASE-B TU NSIEE -16869 ; [.3A37.0020.0002] # BAMUM LETTER PHASE-B SHET NJAQ -1686A ; [.3A38.0020.0002] # BAMUM LETTER PHASE-B SHEUAEQTU -1686B ; [.3A39.0020.0002] # BAMUM LETTER PHASE-B MFON TEUAEQ -1686C ; [.3A3A.0020.0002] # BAMUM LETTER PHASE-B MBIT MBAAKET -1686D ; [.3A3B.0020.0002] # BAMUM LETTER PHASE-B NYI NTEUM -1686E ; [.3A3C.0020.0002] # BAMUM LETTER PHASE-B KEUPUQ -1686F ; [.3A3D.0020.0002] # BAMUM LETTER PHASE-B GHEUGHEN -16870 ; [.3A3E.0020.0002] # BAMUM LETTER PHASE-B KEUYEUX -16871 ; [.3A3F.0020.0002] # BAMUM LETTER PHASE-B LAANAE -16872 ; [.3A40.0020.0002] # BAMUM LETTER PHASE-B PARUM -16873 ; [.3A41.0020.0002] # BAMUM LETTER PHASE-B VEUM -16874 ; [.3A42.0020.0002] # BAMUM LETTER PHASE-B NGKINDI MVOP -16875 ; [.3A43.0020.0002] # BAMUM LETTER PHASE-B NGGEU MBU -16876 ; [.3A44.0020.0002] # BAMUM LETTER PHASE-B WUAET -16877 ; [.3A45.0020.0002] # BAMUM LETTER PHASE-B SAKEUAE -16878 ; [.3A46.0020.0002] # BAMUM LETTER PHASE-B TAAM -16879 ; [.3A47.0020.0002] # BAMUM LETTER PHASE-B MEUQ -1687A ; [.3A48.0020.0002] # BAMUM LETTER PHASE-B NGGUOQ -1687B ; [.3A49.0020.0002] # BAMUM LETTER PHASE-B NGGUOQ LARGE -1687C ; [.3A4A.0020.0002] # BAMUM LETTER PHASE-B MFIYAQ -1687D ; [.3A4B.0020.0002] # BAMUM LETTER PHASE-B SUE -1687E ; [.3A4C.0020.0002] # BAMUM LETTER PHASE-B MBEURI -1687F ; [.3A4D.0020.0002] # BAMUM LETTER PHASE-B MONTIEEN -16880 ; [.3A4E.0020.0002] # BAMUM LETTER PHASE-B NYAEMAE -16881 ; [.3A4F.0020.0002] # BAMUM LETTER PHASE-B PUNGAAM -16882 ; [.3A50.0020.0002] # BAMUM LETTER PHASE-B MEUT NGGEET -16883 ; [.3A51.0020.0002] # BAMUM LETTER PHASE-B FEUX -16884 ; [.3A52.0020.0002] # BAMUM LETTER PHASE-B MBUOQ -16885 ; [.3A53.0020.0002] # BAMUM LETTER PHASE-B FEE -16886 ; [.3A54.0020.0002] # BAMUM LETTER PHASE-B KEUAEM -16887 ; [.3A55.0020.0002] # BAMUM LETTER PHASE-B MA NJEUAENA -16888 ; [.3A56.0020.0002] # BAMUM LETTER PHASE-B MA NJUQA -16889 ; [.3A57.0020.0002] # BAMUM LETTER PHASE-B LET -1688A ; [.3A58.0020.0002] # BAMUM LETTER PHASE-B NGGAAM -1688B ; [.3A59.0020.0002] # BAMUM LETTER PHASE-B NSEN -1688C ; [.3A5A.0020.0002] # BAMUM LETTER PHASE-B MA -1688D ; [.3A5B.0020.0002] # BAMUM LETTER PHASE-B KIQ -1688E ; [.3A5C.0020.0002] # BAMUM LETTER PHASE-B NGOM -1688F ; [.3A5D.0020.0002] # BAMUM LETTER PHASE-C NGKUE MAEMBA -16890 ; [.3A5E.0020.0002] # BAMUM LETTER PHASE-C NZA -16891 ; [.3A5F.0020.0002] # BAMUM LETTER PHASE-C YUM -16892 ; [.3A60.0020.0002] # BAMUM LETTER PHASE-C WANGKUOQ -16893 ; [.3A61.0020.0002] # BAMUM LETTER PHASE-C NGGEN -16894 ; [.3A62.0020.0002] # BAMUM LETTER PHASE-C NDEUAEREE -16895 ; [.3A63.0020.0002] # BAMUM LETTER PHASE-C NGKAQ -16896 ; [.3A64.0020.0002] # BAMUM LETTER PHASE-C GHARAE -16897 ; [.3A65.0020.0002] # BAMUM LETTER PHASE-C MBEEKEET -16898 ; [.3A66.0020.0002] # BAMUM LETTER PHASE-C GBAYI -16899 ; [.3A67.0020.0002] # BAMUM LETTER PHASE-C NYIR MKPARAQ MEUN -1689A ; [.3A68.0020.0002] # BAMUM LETTER PHASE-C NTU MBIT -1689B ; [.3A69.0020.0002] # BAMUM LETTER PHASE-C MBEUM -1689C ; [.3A6A.0020.0002] # BAMUM LETTER PHASE-C PIRIEEN -1689D ; [.3A6B.0020.0002] # BAMUM LETTER PHASE-C NDOMBU -1689E ; [.3A6C.0020.0002] # BAMUM LETTER PHASE-C MBAA CABBAGE-TREE -1689F ; [.3A6D.0020.0002] # BAMUM LETTER PHASE-C KEUSHEUAEP -168A0 ; [.3A6E.0020.0002] # BAMUM LETTER PHASE-C GHAP -168A1 ; [.3A6F.0020.0002] # BAMUM LETTER PHASE-C KEUKAQ -168A2 ; [.3A70.0020.0002] # BAMUM LETTER PHASE-C YU MUOMAE -168A3 ; [.3A71.0020.0002] # BAMUM LETTER PHASE-C NZEUM -168A4 ; [.3A72.0020.0002] # BAMUM LETTER PHASE-C MBUE -168A5 ; [.3A73.0020.0002] # BAMUM LETTER PHASE-C NSEUAEN -168A6 ; [.3A74.0020.0002] # BAMUM LETTER PHASE-C MBIT -168A7 ; [.3A75.0020.0002] # BAMUM LETTER PHASE-C YEUQ -168A8 ; [.3A76.0020.0002] # BAMUM LETTER PHASE-C KPARAQ -168A9 ; [.3A77.0020.0002] # BAMUM LETTER PHASE-C KAA -168AA ; [.3A78.0020.0002] # BAMUM LETTER PHASE-C SEUX -168AB ; [.3A79.0020.0002] # BAMUM LETTER PHASE-C NDIDA -168AC ; [.3A7A.0020.0002] # BAMUM LETTER PHASE-C TAASHAE -168AD ; [.3A7B.0020.0002] # BAMUM LETTER PHASE-C NJUEQ -168AE ; [.3A7C.0020.0002] # BAMUM LETTER PHASE-C TITA YUE -168AF ; [.3A7D.0020.0002] # BAMUM LETTER PHASE-C SUAET -168B0 ; [.3A7E.0020.0002] # BAMUM LETTER PHASE-C NGGUAEN NYAM -168B1 ; [.3A7F.0020.0002] # BAMUM LETTER PHASE-C VEUX -168B2 ; [.3A80.0020.0002] # BAMUM LETTER PHASE-C NANSANAQ -168B3 ; [.3A81.0020.0002] # BAMUM LETTER PHASE-C MA KEUAERI -168B4 ; [.3A82.0020.0002] # BAMUM LETTER PHASE-C NTAA -168B5 ; [.3A83.0020.0002] # BAMUM LETTER PHASE-C NGGUON -168B6 ; [.3A84.0020.0002] # BAMUM LETTER PHASE-C LAP -168B7 ; [.3A85.0020.0002] # BAMUM LETTER PHASE-C MBIRIEEN -168B8 ; [.3A86.0020.0002] # BAMUM LETTER PHASE-C MGBASAQ -168B9 ; [.3A87.0020.0002] # BAMUM LETTER PHASE-C NTEUNGBA -168BA ; [.3A88.0020.0002] # BAMUM LETTER PHASE-C TEUTEUX -168BB ; [.3A89.0020.0002] # BAMUM LETTER PHASE-C NGGUM -168BC ; [.3A8A.0020.0002] # BAMUM LETTER PHASE-C FUE -168BD ; [.3A8B.0020.0002] # BAMUM LETTER PHASE-C NDEUT -168BE ; [.3A8C.0020.0002] # BAMUM LETTER PHASE-C NSA -168BF ; [.3A8D.0020.0002] # BAMUM LETTER PHASE-C NSHAQ -168C0 ; [.3A8E.0020.0002] # BAMUM LETTER PHASE-C BUNG -168C1 ; [.3A8F.0020.0002] # BAMUM LETTER PHASE-C VEUAEPEN -168C2 ; [.3A90.0020.0002] # BAMUM LETTER PHASE-C MBERAE -168C3 ; [.3A91.0020.0002] # BAMUM LETTER PHASE-C RU -168C4 ; [.3A92.0020.0002] # BAMUM LETTER PHASE-C NJAEM -168C5 ; [.3A93.0020.0002] # BAMUM LETTER PHASE-C LAM -168C6 ; [.3A94.0020.0002] # BAMUM LETTER PHASE-C TITUAEP -168C7 ; [.3A95.0020.0002] # BAMUM LETTER PHASE-C NSUOT NGOM -168C8 ; [.3A96.0020.0002] # BAMUM LETTER PHASE-C NJEEEE -168C9 ; [.3A97.0020.0002] # BAMUM LETTER PHASE-C KET -168CA ; [.3A98.0020.0002] # BAMUM LETTER PHASE-C NGGU -168CB ; [.3A99.0020.0002] # BAMUM LETTER PHASE-C MAESI -168CC ; [.3A9A.0020.0002] # BAMUM LETTER PHASE-C MBUAEM -168CD ; [.3A9B.0020.0002] # BAMUM LETTER PHASE-C LU -168CE ; [.3A9C.0020.0002] # BAMUM LETTER PHASE-C KUT -168CF ; [.3A9D.0020.0002] # BAMUM LETTER PHASE-C NJAM -168D0 ; [.3A9E.0020.0002] # BAMUM LETTER PHASE-C NGOM -168D1 ; [.3A9F.0020.0002] # BAMUM LETTER PHASE-C WUP -168D2 ; [.3AA0.0020.0002] # BAMUM LETTER PHASE-C NGGUEET -168D3 ; [.3AA1.0020.0002] # BAMUM LETTER PHASE-C NSOM -168D4 ; [.3AA2.0020.0002] # BAMUM LETTER PHASE-C NTEN -168D5 ; [.3AA3.0020.0002] # BAMUM LETTER PHASE-C KUOP NKAARAE -168D6 ; [.3AA4.0020.0002] # BAMUM LETTER PHASE-C NSUN -168D7 ; [.3AA5.0020.0002] # BAMUM LETTER PHASE-C NDAM -168D8 ; [.3AA6.0020.0002] # BAMUM LETTER PHASE-C MA NSIEE -168D9 ; [.3AA7.0020.0002] # BAMUM LETTER PHASE-C YAA -168DA ; [.3AA8.0020.0002] # BAMUM LETTER PHASE-C NDAP -168DB ; [.3AA9.0020.0002] # BAMUM LETTER PHASE-C SHUEQ -168DC ; [.3AAA.0020.0002] # BAMUM LETTER PHASE-C SETFON -168DD ; [.3AAB.0020.0002] # BAMUM LETTER PHASE-C MBI -168DE ; [.3AAC.0020.0002] # BAMUM LETTER PHASE-C MAEMBA -168DF ; [.3AAD.0020.0002] # BAMUM LETTER PHASE-C MBANYI -168E0 ; [.3AAE.0020.0002] # BAMUM LETTER PHASE-C KEUSEUX -168E1 ; [.3AAF.0020.0002] # BAMUM LETTER PHASE-C MBEUX -168E2 ; [.3AB0.0020.0002] # BAMUM LETTER PHASE-C KEUM -168E3 ; [.3AB1.0020.0002] # BAMUM LETTER PHASE-C MBAA PICKET -168E4 ; [.3AB2.0020.0002] # BAMUM LETTER PHASE-C YUWOQ -168E5 ; [.3AB3.0020.0002] # BAMUM LETTER PHASE-C NJEUX -168E6 ; [.3AB4.0020.0002] # BAMUM LETTER PHASE-C MIEE -168E7 ; [.3AB5.0020.0002] # BAMUM LETTER PHASE-C MUAE -168E8 ; [.3AB6.0020.0002] # BAMUM LETTER PHASE-C SHIQ -168E9 ; [.3AB7.0020.0002] # BAMUM LETTER PHASE-C KEN LAW -168EA ; [.3AB8.0020.0002] # BAMUM LETTER PHASE-C KEN FATIGUE -168EB ; [.3AB9.0020.0002] # BAMUM LETTER PHASE-C NGAQ -168EC ; [.3ABA.0020.0002] # BAMUM LETTER PHASE-C NAQ -168ED ; [.3ABB.0020.0002] # BAMUM LETTER PHASE-C LIQ -168EE ; [.3ABC.0020.0002] # BAMUM LETTER PHASE-C PIN -168EF ; [.3ABD.0020.0002] # BAMUM LETTER PHASE-C PEN -168F0 ; [.3ABE.0020.0002] # BAMUM LETTER PHASE-C TET -168F1 ; [.3ABF.0020.0002] # BAMUM LETTER PHASE-D MBUO -168F2 ; [.3AC0.0020.0002] # BAMUM LETTER PHASE-D WAP -168F3 ; [.3AC1.0020.0002] # BAMUM LETTER PHASE-D NJI -168F4 ; [.3AC2.0020.0002] # BAMUM LETTER PHASE-D MFON -168F5 ; [.3AC3.0020.0002] # BAMUM LETTER PHASE-D NJIEE -168F6 ; [.3AC4.0020.0002] # BAMUM LETTER PHASE-D LIEE -168F7 ; [.3AC5.0020.0002] # BAMUM LETTER PHASE-D NJEUT -168F8 ; [.3AC6.0020.0002] # BAMUM LETTER PHASE-D NSHEE -168F9 ; [.3AC7.0020.0002] # BAMUM LETTER PHASE-D NGGAAMAE -168FA ; [.3AC8.0020.0002] # BAMUM LETTER PHASE-D NYAM -168FB ; [.3AC9.0020.0002] # BAMUM LETTER PHASE-D WUAEN -168FC ; [.3ACA.0020.0002] # BAMUM LETTER PHASE-D NGKUN -168FD ; [.3ACB.0020.0002] # BAMUM LETTER PHASE-D SHEE -168FE ; [.3ACC.0020.0002] # BAMUM LETTER PHASE-D NGKAP -168FF ; [.3ACD.0020.0002] # BAMUM LETTER PHASE-D KEUAETMEUN -16900 ; [.3ACE.0020.0002] # BAMUM LETTER PHASE-D TEUT -16901 ; [.3ACF.0020.0002] # BAMUM LETTER PHASE-D SHEUAE -16902 ; [.3AD0.0020.0002] # BAMUM LETTER PHASE-D NJAP -16903 ; [.3AD1.0020.0002] # BAMUM LETTER PHASE-D SUE -16904 ; [.3AD2.0020.0002] # BAMUM LETTER PHASE-D KET -16905 ; [.3AD3.0020.0002] # BAMUM LETTER PHASE-D YAEMMAE -16906 ; [.3AD4.0020.0002] # BAMUM LETTER PHASE-D KUOM -16907 ; [.3AD5.0020.0002] # BAMUM LETTER PHASE-D SAP -16908 ; [.3AD6.0020.0002] # BAMUM LETTER PHASE-D MFEUT -16909 ; [.3AD7.0020.0002] # BAMUM LETTER PHASE-D NDEUX -1690A ; [.3AD8.0020.0002] # BAMUM LETTER PHASE-D MALEERI -1690B ; [.3AD9.0020.0002] # BAMUM LETTER PHASE-D MEUT -1690C ; [.3ADA.0020.0002] # BAMUM LETTER PHASE-D SEUAEQ -1690D ; [.3ADB.0020.0002] # BAMUM LETTER PHASE-D YEN -1690E ; [.3ADC.0020.0002] # BAMUM LETTER PHASE-D NJEUAEM -1690F ; [.3ADD.0020.0002] # BAMUM LETTER PHASE-D KEUOT MBUAE -16910 ; [.3ADE.0020.0002] # BAMUM LETTER PHASE-D NGKEURI -16911 ; [.3ADF.0020.0002] # BAMUM LETTER PHASE-D TU -16912 ; [.3AE0.0020.0002] # BAMUM LETTER PHASE-D GHAA -16913 ; [.3AE1.0020.0002] # BAMUM LETTER PHASE-D NGKYEE -16914 ; [.3AE2.0020.0002] # BAMUM LETTER PHASE-D FEUFEUAET -16915 ; [.3AE3.0020.0002] # BAMUM LETTER PHASE-D NDEE -16916 ; [.3AE4.0020.0002] # BAMUM LETTER PHASE-D MGBOFUM -16917 ; [.3AE5.0020.0002] # BAMUM LETTER PHASE-D LEUAEP -16918 ; [.3AE6.0020.0002] # BAMUM LETTER PHASE-D NDON -16919 ; [.3AE7.0020.0002] # BAMUM LETTER PHASE-D MONI -1691A ; [.3AE8.0020.0002] # BAMUM LETTER PHASE-D MGBEUN -1691B ; [.3AE9.0020.0002] # BAMUM LETTER PHASE-D PUUT -1691C ; [.3AEA.0020.0002] # BAMUM LETTER PHASE-D MGBIEE -1691D ; [.3AEB.0020.0002] # BAMUM LETTER PHASE-D MFO -1691E ; [.3AEC.0020.0002] # BAMUM LETTER PHASE-D LUM -1691F ; [.3AED.0020.0002] # BAMUM LETTER PHASE-D NSIEEP -16920 ; [.3AEE.0020.0002] # BAMUM LETTER PHASE-D MBAA -16921 ; [.3AEF.0020.0002] # BAMUM LETTER PHASE-D KWAET -16922 ; [.3AF0.0020.0002] # BAMUM LETTER PHASE-D NYET -16923 ; [.3AF1.0020.0002] # BAMUM LETTER PHASE-D TEUAEN -16924 ; [.3AF2.0020.0002] # BAMUM LETTER PHASE-D SOT -16925 ; [.3AF3.0020.0002] # BAMUM LETTER PHASE-D YUWOQ -16926 ; [.3AF4.0020.0002] # BAMUM LETTER PHASE-D KEUM -16927 ; [.3AF5.0020.0002] # BAMUM LETTER PHASE-D RAEM -16928 ; [.3AF6.0020.0002] # BAMUM LETTER PHASE-D TEEEE -16929 ; [.3AF7.0020.0002] # BAMUM LETTER PHASE-D NGKEUAEQ -1692A ; [.3AF8.0020.0002] # BAMUM LETTER PHASE-D MFEUAE -1692B ; [.3AF9.0020.0002] # BAMUM LETTER PHASE-D NSIEET -1692C ; [.3AFA.0020.0002] # BAMUM LETTER PHASE-D KEUP -1692D ; [.3AFB.0020.0002] # BAMUM LETTER PHASE-D PIP -1692E ; [.3AFC.0020.0002] # BAMUM LETTER PHASE-D PEUTAE -1692F ; [.3AFD.0020.0002] # BAMUM LETTER PHASE-D NYUE -16930 ; [.3AFE.0020.0002] # BAMUM LETTER PHASE-D LET -16931 ; [.3AFF.0020.0002] # BAMUM LETTER PHASE-D NGGAAM -16932 ; [.3B00.0020.0002] # BAMUM LETTER PHASE-D MFIEE -16933 ; [.3B01.0020.0002] # BAMUM LETTER PHASE-D NGGWAEN -16934 ; [.3B02.0020.0002] # BAMUM LETTER PHASE-D YUOM -16935 ; [.3B03.0020.0002] # BAMUM LETTER PHASE-D PAP -16936 ; [.3B04.0020.0002] # BAMUM LETTER PHASE-D YUOP -16937 ; [.3B05.0020.0002] # BAMUM LETTER PHASE-D NDAM -16938 ; [.3B06.0020.0002] # BAMUM LETTER PHASE-D NTEUM -16939 ; [.3B07.0020.0002] # BAMUM LETTER PHASE-D SUAE -1693A ; [.3B08.0020.0002] # BAMUM LETTER PHASE-D KUN -1693B ; [.3B09.0020.0002] # BAMUM LETTER PHASE-D NGGEUX -1693C ; [.3B0A.0020.0002] # BAMUM LETTER PHASE-D NGKIEE -1693D ; [.3B0B.0020.0002] # BAMUM LETTER PHASE-D TUOT -1693E ; [.3B0C.0020.0002] # BAMUM LETTER PHASE-D MEUN -1693F ; [.3B0D.0020.0002] # BAMUM LETTER PHASE-D KUQ -16940 ; [.3B0E.0020.0002] # BAMUM LETTER PHASE-D NSUM -16941 ; [.3B0F.0020.0002] # BAMUM LETTER PHASE-D TEUN -16942 ; [.3B10.0020.0002] # BAMUM LETTER PHASE-D MAENJET -16943 ; [.3B11.0020.0002] # BAMUM LETTER PHASE-D NGGAP -16944 ; [.3B12.0020.0002] # BAMUM LETTER PHASE-D LEUM -16945 ; [.3B13.0020.0002] # BAMUM LETTER PHASE-D NGGUOM -16946 ; [.3B14.0020.0002] # BAMUM LETTER PHASE-D NSHUT -16947 ; [.3B15.0020.0002] # BAMUM LETTER PHASE-D NJUEQ -16948 ; [.3B16.0020.0002] # BAMUM LETTER PHASE-D GHEUAE -16949 ; [.3B17.0020.0002] # BAMUM LETTER PHASE-D KU -1694A ; [.3B18.0020.0002] # BAMUM LETTER PHASE-D REN OLD -1694B ; [.3B19.0020.0002] # BAMUM LETTER PHASE-D TAE -1694C ; [.3B1A.0020.0002] # BAMUM LETTER PHASE-D TOQ -1694D ; [.3B1B.0020.0002] # BAMUM LETTER PHASE-D NYI -1694E ; [.3B1C.0020.0002] # BAMUM LETTER PHASE-D RII -1694F ; [.3B1D.0020.0002] # BAMUM LETTER PHASE-D LEEEE -16950 ; [.3B1E.0020.0002] # BAMUM LETTER PHASE-D MEEEE -16951 ; [.3B1F.0020.0002] # BAMUM LETTER PHASE-D M -16952 ; [.3B20.0020.0002] # BAMUM LETTER PHASE-D SUU -16953 ; [.3B21.0020.0002] # BAMUM LETTER PHASE-D MU -16954 ; [.3B22.0020.0002] # BAMUM LETTER PHASE-D SHII -16955 ; [.3B23.0020.0002] # BAMUM LETTER PHASE-D SHEUX -16956 ; [.3B24.0020.0002] # BAMUM LETTER PHASE-D KYEE -16957 ; [.3B25.0020.0002] # BAMUM LETTER PHASE-D NU -16958 ; [.3B26.0020.0002] # BAMUM LETTER PHASE-D SHU -16959 ; [.3B27.0020.0002] # BAMUM LETTER PHASE-D NTEE -1695A ; [.3B28.0020.0002] # BAMUM LETTER PHASE-D PEE -1695B ; [.3B29.0020.0002] # BAMUM LETTER PHASE-D NI -1695C ; [.3B2A.0020.0002] # BAMUM LETTER PHASE-D SHOQ -1695D ; [.3B2B.0020.0002] # BAMUM LETTER PHASE-D PUQ -1695E ; [.3B2C.0020.0002] # BAMUM LETTER PHASE-D MVOP -1695F ; [.3B2D.0020.0002] # BAMUM LETTER PHASE-D LOQ -16960 ; [.3B2E.0020.0002] # BAMUM LETTER PHASE-D REN MUCH -16961 ; [.3B2F.0020.0002] # BAMUM LETTER PHASE-D TI -16962 ; [.3B30.0020.0002] # BAMUM LETTER PHASE-D NTUU -16963 ; [.3B31.0020.0002] # BAMUM LETTER PHASE-D MBAA SEVEN -16964 ; [.3B32.0020.0002] # BAMUM LETTER PHASE-D SAQ -16965 ; [.3B33.0020.0002] # BAMUM LETTER PHASE-D FAA -16966 ; [.3B34.0020.0002] # BAMUM LETTER PHASE-E NDAP -16967 ; [.3B35.0020.0002] # BAMUM LETTER PHASE-E TOON -16968 ; [.3B36.0020.0002] # BAMUM LETTER PHASE-E MBEUM -16969 ; [.3B37.0020.0002] # BAMUM LETTER PHASE-E LAP -1696A ; [.3B38.0020.0002] # BAMUM LETTER PHASE-E VOM -1696B ; [.3B39.0020.0002] # BAMUM LETTER PHASE-E LOON -1696C ; [.3B3A.0020.0002] # BAMUM LETTER PHASE-E PAA -1696D ; [.3B3B.0020.0002] # BAMUM LETTER PHASE-E SOM -1696E ; [.3B3C.0020.0002] # BAMUM LETTER PHASE-E RAQ -1696F ; [.3B3D.0020.0002] # BAMUM LETTER PHASE-E NSHUOP -16970 ; [.3B3E.0020.0002] # BAMUM LETTER PHASE-E NDUN -16971 ; [.3B3F.0020.0002] # BAMUM LETTER PHASE-E PUAE -16972 ; [.3B40.0020.0002] # BAMUM LETTER PHASE-E TAM -16973 ; [.3B41.0020.0002] # BAMUM LETTER PHASE-E NGKA -16974 ; [.3B42.0020.0002] # BAMUM LETTER PHASE-E KPEUX -16975 ; [.3B43.0020.0002] # BAMUM LETTER PHASE-E WUO -16976 ; [.3B44.0020.0002] # BAMUM LETTER PHASE-E SEE -16977 ; [.3B45.0020.0002] # BAMUM LETTER PHASE-E NGGEUAET -16978 ; [.3B46.0020.0002] # BAMUM LETTER PHASE-E PAAM -16979 ; [.3B47.0020.0002] # BAMUM LETTER PHASE-E TOO -1697A ; [.3B48.0020.0002] # BAMUM LETTER PHASE-E KUOP -1697B ; [.3B49.0020.0002] # BAMUM LETTER PHASE-E LOM -1697C ; [.3B4A.0020.0002] # BAMUM LETTER PHASE-E NSHIEE -1697D ; [.3B4B.0020.0002] # BAMUM LETTER PHASE-E NGOP -1697E ; [.3B4C.0020.0002] # BAMUM LETTER PHASE-E MAEM -1697F ; [.3B4D.0020.0002] # BAMUM LETTER PHASE-E NGKEUX -16980 ; [.3B4E.0020.0002] # BAMUM LETTER PHASE-E NGOQ -16981 ; [.3B4F.0020.0002] # BAMUM LETTER PHASE-E NSHUE -16982 ; [.3B50.0020.0002] # BAMUM LETTER PHASE-E RIMGBA -16983 ; [.3B51.0020.0002] # BAMUM LETTER PHASE-E NJEUX -16984 ; [.3B52.0020.0002] # BAMUM LETTER PHASE-E PEEM -16985 ; [.3B53.0020.0002] # BAMUM LETTER PHASE-E SAA -16986 ; [.3B54.0020.0002] # BAMUM LETTER PHASE-E NGGURAE -16987 ; [.3B55.0020.0002] # BAMUM LETTER PHASE-E MGBA -16988 ; [.3B56.0020.0002] # BAMUM LETTER PHASE-E GHEUX -16989 ; [.3B57.0020.0002] # BAMUM LETTER PHASE-E NGKEUAEM -1698A ; [.3B58.0020.0002] # BAMUM LETTER PHASE-E NJAEMLI -1698B ; [.3B59.0020.0002] # BAMUM LETTER PHASE-E MAP -1698C ; [.3B5A.0020.0002] # BAMUM LETTER PHASE-E LOOT -1698D ; [.3B5B.0020.0002] # BAMUM LETTER PHASE-E NGGEEEE -1698E ; [.3B5C.0020.0002] # BAMUM LETTER PHASE-E NDIQ -1698F ; [.3B5D.0020.0002] # BAMUM LETTER PHASE-E TAEN NTEUM -16990 ; [.3B5E.0020.0002] # BAMUM LETTER PHASE-E SET -16991 ; [.3B5F.0020.0002] # BAMUM LETTER PHASE-E PUM -16992 ; [.3B60.0020.0002] # BAMUM LETTER PHASE-E NDAA SOFTNESS -16993 ; [.3B61.0020.0002] # BAMUM LETTER PHASE-E NGGUAESHAE NYAM -16994 ; [.3B62.0020.0002] # BAMUM LETTER PHASE-E YIEE -16995 ; [.3B63.0020.0002] # BAMUM LETTER PHASE-E GHEUN -16996 ; [.3B64.0020.0002] # BAMUM LETTER PHASE-E TUAE -16997 ; [.3B65.0020.0002] # BAMUM LETTER PHASE-E YEUAE -16998 ; [.3B66.0020.0002] # BAMUM LETTER PHASE-E PO -16999 ; [.3B67.0020.0002] # BAMUM LETTER PHASE-E TUMAE -1699A ; [.3B68.0020.0002] # BAMUM LETTER PHASE-E KEUAE -1699B ; [.3B69.0020.0002] # BAMUM LETTER PHASE-E SUAEN -1699C ; [.3B6A.0020.0002] # BAMUM LETTER PHASE-E TEUAEQ -1699D ; [.3B6B.0020.0002] # BAMUM LETTER PHASE-E VEUAE -1699E ; [.3B6C.0020.0002] # BAMUM LETTER PHASE-E WEUX -1699F ; [.3B6D.0020.0002] # BAMUM LETTER PHASE-E LAAM -169A0 ; [.3B6E.0020.0002] # BAMUM LETTER PHASE-E PU -169A1 ; [.3B6F.0020.0002] # BAMUM LETTER PHASE-E TAAQ -169A2 ; [.3B70.0020.0002] # BAMUM LETTER PHASE-E GHAAMAE -169A3 ; [.3B71.0020.0002] # BAMUM LETTER PHASE-E NGEUREUT -169A4 ; [.3B72.0020.0002] # BAMUM LETTER PHASE-E SHEUAEQ -169A5 ; [.3B73.0020.0002] # BAMUM LETTER PHASE-E MGBEN -169A6 ; [.3B74.0020.0002] # BAMUM LETTER PHASE-E MBEE -169A7 ; [.3B75.0020.0002] # BAMUM LETTER PHASE-E NZAQ -169A8 ; [.3B76.0020.0002] # BAMUM LETTER PHASE-E NKOM -169A9 ; [.3B77.0020.0002] # BAMUM LETTER PHASE-E GBET -169AA ; [.3B78.0020.0002] # BAMUM LETTER PHASE-E TUM -169AB ; [.3B79.0020.0002] # BAMUM LETTER PHASE-E KUET -169AC ; [.3B7A.0020.0002] # BAMUM LETTER PHASE-E YAP -169AD ; [.3B7B.0020.0002] # BAMUM LETTER PHASE-E NYI CLEAVER -169AE ; [.3B7C.0020.0002] # BAMUM LETTER PHASE-E YIT -169AF ; [.3B7D.0020.0002] # BAMUM LETTER PHASE-E MFEUQ -169B0 ; [.3B7E.0020.0002] # BAMUM LETTER PHASE-E NDIAQ -169B1 ; [.3B7F.0020.0002] # BAMUM LETTER PHASE-E PIEEQ -169B2 ; [.3B80.0020.0002] # BAMUM LETTER PHASE-E YUEQ -169B3 ; [.3B81.0020.0002] # BAMUM LETTER PHASE-E LEUAEM -169B4 ; [.3B82.0020.0002] # BAMUM LETTER PHASE-E FUE -169B5 ; [.3B83.0020.0002] # BAMUM LETTER PHASE-E GBEUX -169B6 ; [.3B84.0020.0002] # BAMUM LETTER PHASE-E NGKUP -169B7 ; [.3B85.0020.0002] # BAMUM LETTER PHASE-E KET -169B8 ; [.3B86.0020.0002] # BAMUM LETTER PHASE-E MAE -169B9 ; [.3B87.0020.0002] # BAMUM LETTER PHASE-E NGKAAMI -169BA ; [.3B88.0020.0002] # BAMUM LETTER PHASE-E GHET -169BB ; [.3B89.0020.0002] # BAMUM LETTER PHASE-E FA -169BC ; [.3B8A.0020.0002] # BAMUM LETTER PHASE-E NTUM -169BD ; [.3B8B.0020.0002] # BAMUM LETTER PHASE-E PEUT -169BE ; [.3B8C.0020.0002] # BAMUM LETTER PHASE-E YEUM -169BF ; [.3B8D.0020.0002] # BAMUM LETTER PHASE-E NGGEUAE -169C0 ; [.3B8E.0020.0002] # BAMUM LETTER PHASE-E NYI BETWEEN -169C1 ; [.3B8F.0020.0002] # BAMUM LETTER PHASE-E NZUQ -169C2 ; [.3B90.0020.0002] # BAMUM LETTER PHASE-E POON -169C3 ; [.3B91.0020.0002] # BAMUM LETTER PHASE-E MIEE -169C4 ; [.3B92.0020.0002] # BAMUM LETTER PHASE-E FUET -169C5 ; [.3B93.0020.0002] # BAMUM LETTER PHASE-E NAE -169C6 ; [.3B94.0020.0002] # BAMUM LETTER PHASE-E MUAE -169C7 ; [.3B95.0020.0002] # BAMUM LETTER PHASE-E GHEUAE -169C8 ; [.3B96.0020.0002] # BAMUM LETTER PHASE-E FU I -169C9 ; [.3B97.0020.0002] # BAMUM LETTER PHASE-E MVI -169CA ; [.3B98.0020.0002] # BAMUM LETTER PHASE-E PUAQ -169CB ; [.3B99.0020.0002] # BAMUM LETTER PHASE-E NGKUM -169CC ; [.3B9A.0020.0002] # BAMUM LETTER PHASE-E KUT -169CD ; [.3B9B.0020.0002] # BAMUM LETTER PHASE-E PIET -169CE ; [.3B9C.0020.0002] # BAMUM LETTER PHASE-E NTAP -169CF ; [.3B9D.0020.0002] # BAMUM LETTER PHASE-E YEUAET -169D0 ; [.3B9E.0020.0002] # BAMUM LETTER PHASE-E NGGUP -169D1 ; [.3B9F.0020.0002] # BAMUM LETTER PHASE-E PA PEOPLE -169D2 ; [.3BA0.0020.0002] # BAMUM LETTER PHASE-E FU CALL -169D3 ; [.3BA1.0020.0002] # BAMUM LETTER PHASE-E FOM -169D4 ; [.3BA2.0020.0002] # BAMUM LETTER PHASE-E NJEE -169D5 ; [.3BA3.0020.0002] # BAMUM LETTER PHASE-E A -169D6 ; [.3BA4.0020.0002] # BAMUM LETTER PHASE-E TOQ -169D7 ; [.3BA5.0020.0002] # BAMUM LETTER PHASE-E O -169D8 ; [.3BA6.0020.0002] # BAMUM LETTER PHASE-E I -169D9 ; [.3BA7.0020.0002] # BAMUM LETTER PHASE-E LAQ -169DA ; [.3BA8.0020.0002] # BAMUM LETTER PHASE-E PA PLURAL -169DB ; [.3BA9.0020.0002] # BAMUM LETTER PHASE-E TAA -169DC ; [.3BAA.0020.0002] # BAMUM LETTER PHASE-E TAQ -169DD ; [.3BAB.0020.0002] # BAMUM LETTER PHASE-E NDAA MY HOUSE -169DE ; [.3BAC.0020.0002] # BAMUM LETTER PHASE-E SHIQ -169DF ; [.3BAD.0020.0002] # BAMUM LETTER PHASE-E YEUX -169E0 ; [.3BAE.0020.0002] # BAMUM LETTER PHASE-E NGUAE -169E1 ; [.3BAF.0020.0002] # BAMUM LETTER PHASE-E YUAEN -169E2 ; [.3BB0.0020.0002] # BAMUM LETTER PHASE-E YOQ SWIMMING -169E3 ; [.3BB1.0020.0002] # BAMUM LETTER PHASE-E YOQ COVER -169E4 ; [.3BB2.0020.0002] # BAMUM LETTER PHASE-E YUQ -169E5 ; [.3BB3.0020.0002] # BAMUM LETTER PHASE-E YUN -169E6 ; [.3BB4.0020.0002] # BAMUM LETTER PHASE-E KEUX -169E7 ; [.3BB5.0020.0002] # BAMUM LETTER PHASE-E PEUX -169E8 ; [.3BB6.0020.0002] # BAMUM LETTER PHASE-E NJEE EPOCH -169E9 ; [.3BB7.0020.0002] # BAMUM LETTER PHASE-E PUE -169EA ; [.3BB8.0020.0002] # BAMUM LETTER PHASE-E WUE -169EB ; [.3BB9.0020.0002] # BAMUM LETTER PHASE-E FEE -169EC ; [.3BBA.0020.0002] # BAMUM LETTER PHASE-E VEE -169ED ; [.3BBB.0020.0002] # BAMUM LETTER PHASE-E LU -169EE ; [.3BBC.0020.0002] # BAMUM LETTER PHASE-E MI -169EF ; [.3BBD.0020.0002] # BAMUM LETTER PHASE-E REUX -169F0 ; [.3BBE.0020.0002] # BAMUM LETTER PHASE-E RAE -169F1 ; [.3BBF.0020.0002] # BAMUM LETTER PHASE-E NGUAET -169F2 ; [.3BC0.0020.0002] # BAMUM LETTER PHASE-E NGA -169F3 ; [.3BC1.0020.0002] # BAMUM LETTER PHASE-E SHO -169F4 ; [.3BC2.0020.0002] # BAMUM LETTER PHASE-E SHOQ -169F5 ; [.3BC3.0020.0002] # BAMUM LETTER PHASE-E FU REMEDY -169F6 ; [.3BC4.0020.0002] # BAMUM LETTER PHASE-E NA -169F7 ; [.3BC5.0020.0002] # BAMUM LETTER PHASE-E PI -169F8 ; [.3BC6.0020.0002] # BAMUM LETTER PHASE-E LOQ -169F9 ; [.3BC7.0020.0002] # BAMUM LETTER PHASE-E KO -169FA ; [.3BC8.0020.0002] # BAMUM LETTER PHASE-E MEN -169FB ; [.3BC9.0020.0002] # BAMUM LETTER PHASE-E MA -169FC ; [.3BCA.0020.0002] # BAMUM LETTER PHASE-E MAQ -169FD ; [.3BCB.0020.0002] # BAMUM LETTER PHASE-E TEU -169FE ; [.3BCC.0020.0002] # BAMUM LETTER PHASE-E KI -169FF ; [.3BCD.0020.0002] # BAMUM LETTER PHASE-E MON -16A00 ; [.3BCE.0020.0002] # BAMUM LETTER PHASE-E TEN -16A01 ; [.3BCF.0020.0002] # BAMUM LETTER PHASE-E FAQ -16A02 ; [.3BD0.0020.0002] # BAMUM LETTER PHASE-E GHOM -16A03 ; [.3BD1.0020.0002] # BAMUM LETTER PHASE-F KA -16A04 ; [.3BD2.0020.0002] # BAMUM LETTER PHASE-F U -16A05 ; [.3BD3.0020.0002] # BAMUM LETTER PHASE-F KU -16A06 ; [.3BD4.0020.0002] # BAMUM LETTER PHASE-F EE -16A07 ; [.3BD5.0020.0002] # BAMUM LETTER PHASE-F REE -16A08 ; [.3BD6.0020.0002] # BAMUM LETTER PHASE-F TAE -16A09 ; [.3BD7.0020.0002] # BAMUM LETTER PHASE-F NYI -16A0A ; [.3BD8.0020.0002] # BAMUM LETTER PHASE-F LA -16A0B ; [.3BD9.0020.0002] # BAMUM LETTER PHASE-F RII -16A0C ; [.3BDA.0020.0002] # BAMUM LETTER PHASE-F RIEE -16A0D ; [.3BDB.0020.0002] # BAMUM LETTER PHASE-F MEEEE -16A0E ; [.3BDC.0020.0002] # BAMUM LETTER PHASE-F TAA -16A0F ; [.3BDD.0020.0002] # BAMUM LETTER PHASE-F NDAA -16A10 ; [.3BDE.0020.0002] # BAMUM LETTER PHASE-F NJAEM -16A11 ; [.3BDF.0020.0002] # BAMUM LETTER PHASE-F M -16A12 ; [.3BE0.0020.0002] # BAMUM LETTER PHASE-F SUU -16A13 ; [.3BE1.0020.0002] # BAMUM LETTER PHASE-F SHII -16A14 ; [.3BE2.0020.0002] # BAMUM LETTER PHASE-F SI -16A15 ; [.3BE3.0020.0002] # BAMUM LETTER PHASE-F SEUX -16A16 ; [.3BE4.0020.0002] # BAMUM LETTER PHASE-F KYEE -16A17 ; [.3BE5.0020.0002] # BAMUM LETTER PHASE-F KET -16A18 ; [.3BE6.0020.0002] # BAMUM LETTER PHASE-F NUAE -16A19 ; [.3BE7.0020.0002] # BAMUM LETTER PHASE-F NU -16A1A ; [.3BE8.0020.0002] # BAMUM LETTER PHASE-F NJUAE -16A1B ; [.3BE9.0020.0002] # BAMUM LETTER PHASE-F YOQ -16A1C ; [.3BEA.0020.0002] # BAMUM LETTER PHASE-F SHU -16A1D ; [.3BEB.0020.0002] # BAMUM LETTER PHASE-F YA -16A1E ; [.3BEC.0020.0002] # BAMUM LETTER PHASE-F NSHA -16A1F ; [.3BED.0020.0002] # BAMUM LETTER PHASE-F PEUX -16A20 ; [.3BEE.0020.0002] # BAMUM LETTER PHASE-F NTEE -16A21 ; [.3BEF.0020.0002] # BAMUM LETTER PHASE-F WUE -16A22 ; [.3BF0.0020.0002] # BAMUM LETTER PHASE-F PEE -16A23 ; [.3BF1.0020.0002] # BAMUM LETTER PHASE-F RU -16A24 ; [.3BF2.0020.0002] # BAMUM LETTER PHASE-F NI -16A25 ; [.3BF3.0020.0002] # BAMUM LETTER PHASE-F REUX -16A26 ; [.3BF4.0020.0002] # BAMUM LETTER PHASE-F KEN -16A27 ; [.3BF5.0020.0002] # BAMUM LETTER PHASE-F NGKWAEN -16A28 ; [.3BF6.0020.0002] # BAMUM LETTER PHASE-F NGGA -16A29 ; [.3BF7.0020.0002] # BAMUM LETTER PHASE-F SHO -16A2A ; [.3BF8.0020.0002] # BAMUM LETTER PHASE-F PUAE -16A2B ; [.3BF9.0020.0002] # BAMUM LETTER PHASE-F FOM -16A2C ; [.3BFA.0020.0002] # BAMUM LETTER PHASE-F WA -16A2D ; [.3BFB.0020.0002] # BAMUM LETTER PHASE-F LI -16A2E ; [.3BFC.0020.0002] # BAMUM LETTER PHASE-F LOQ -16A2F ; [.3BFD.0020.0002] # BAMUM LETTER PHASE-F KO -16A30 ; [.3BFE.0020.0002] # BAMUM LETTER PHASE-F MBEN -16A31 ; [.3BFF.0020.0002] # BAMUM LETTER PHASE-F REN -16A32 ; [.3C00.0020.0002] # BAMUM LETTER PHASE-F MA -16A33 ; [.3C01.0020.0002] # BAMUM LETTER PHASE-F MO -16A34 ; [.3C02.0020.0002] # BAMUM LETTER PHASE-F MBAA -16A35 ; [.3C03.0020.0002] # BAMUM LETTER PHASE-F TET -16A36 ; [.3C04.0020.0002] # BAMUM LETTER PHASE-F KPA -16A37 ; [.3C05.0020.0002] # BAMUM LETTER PHASE-F SAMBA -16A38 ; [.3C06.0020.0002] # BAMUM LETTER PHASE-F VUEQ -16AD0 ; [.3C07.0020.0002] # BASSA VAH LETTER ENNI -16AD1 ; [.3C08.0020.0002] # BASSA VAH LETTER KA -16AD2 ; [.3C09.0020.0002] # BASSA VAH LETTER SE -16AD3 ; [.3C0A.0020.0002] # BASSA VAH LETTER FA -16AD4 ; [.3C0B.0020.0002] # BASSA VAH LETTER MBE -16AD5 ; [.3C0C.0020.0002] # BASSA VAH LETTER YIE -16AD6 ; [.3C0D.0020.0002] # BASSA VAH LETTER GAH -16AD7 ; [.3C0E.0020.0002] # BASSA VAH LETTER DHII -16AD8 ; [.3C0F.0020.0002] # BASSA VAH LETTER KPAH -16AD9 ; [.3C10.0020.0002] # BASSA VAH LETTER JO -16ADA ; [.3C11.0020.0002] # BASSA VAH LETTER HWAH -16ADB ; [.3C12.0020.0002] # BASSA VAH LETTER WA -16ADC ; [.3C13.0020.0002] # BASSA VAH LETTER ZO -16ADD ; [.3C14.0020.0002] # BASSA VAH LETTER GBU -16ADE ; [.3C15.0020.0002] # BASSA VAH LETTER DO -16ADF ; [.3C16.0020.0002] # BASSA VAH LETTER CE -16AE0 ; [.3C17.0020.0002] # BASSA VAH LETTER UWU -16AE1 ; [.3C18.0020.0002] # BASSA VAH LETTER TO -16AE2 ; [.3C19.0020.0002] # BASSA VAH LETTER BA -16AE3 ; [.3C1A.0020.0002] # BASSA VAH LETTER VU -16AE4 ; [.3C1B.0020.0002] # BASSA VAH LETTER YEIN -16AE5 ; [.3C1C.0020.0002] # BASSA VAH LETTER PA -16AE6 ; [.3C1D.0020.0002] # BASSA VAH LETTER WADDA -16AE7 ; [.3C1E.0020.0002] # BASSA VAH LETTER A -16AE8 ; [.3C1F.0020.0002] # BASSA VAH LETTER O -16AE9 ; [.3C20.0020.0002] # BASSA VAH LETTER OO -16AEA ; [.3C21.0020.0002] # BASSA VAH LETTER U -16AEB ; [.3C22.0020.0002] # BASSA VAH LETTER EE -16AEC ; [.3C23.0020.0002] # BASSA VAH LETTER E -16AED ; [.3C24.0020.0002] # BASSA VAH LETTER I -1E800 ; [.3C25.0020.0002] # MENDE KIKAKUI SYLLABLE M001 KI -1E801 ; [.3C26.0020.0002] # MENDE KIKAKUI SYLLABLE M002 KA -1E802 ; [.3C27.0020.0002] # MENDE KIKAKUI SYLLABLE M003 KU -1E803 ; [.3C28.0020.0002] # MENDE KIKAKUI SYLLABLE M065 KEE -1E804 ; [.3C29.0020.0002] # MENDE KIKAKUI SYLLABLE M095 KE -1E805 ; [.3C2A.0020.0002] # MENDE KIKAKUI SYLLABLE M076 KOO -1E806 ; [.3C2B.0020.0002] # MENDE KIKAKUI SYLLABLE M048 KO -1E807 ; [.3C2C.0020.0002] # MENDE KIKAKUI SYLLABLE M179 KUA -1E808 ; [.3C2D.0020.0002] # MENDE KIKAKUI SYLLABLE M004 WI -1E809 ; [.3C2E.0020.0002] # MENDE KIKAKUI SYLLABLE M005 WA -1E80A ; [.3C2F.0020.0002] # MENDE KIKAKUI SYLLABLE M006 WU -1E80B ; [.3C30.0020.0002] # MENDE KIKAKUI SYLLABLE M126 WEE -1E80C ; [.3C31.0020.0002] # MENDE KIKAKUI SYLLABLE M118 WE -1E80D ; [.3C32.0020.0002] # MENDE KIKAKUI SYLLABLE M114 WOO -1E80E ; [.3C33.0020.0002] # MENDE KIKAKUI SYLLABLE M045 WO -1E80F ; [.3C34.0020.0002] # MENDE KIKAKUI SYLLABLE M194 WUI -1E810 ; [.3C35.0020.0002] # MENDE KIKAKUI SYLLABLE M143 WEI -1E811 ; [.3C36.0020.0002] # MENDE KIKAKUI SYLLABLE M061 WVI -1E812 ; [.3C37.0020.0002] # MENDE KIKAKUI SYLLABLE M049 WVA -1E813 ; [.3C38.0020.0002] # MENDE KIKAKUI SYLLABLE M139 WVE -1E814 ; [.3C39.0020.0002] # MENDE KIKAKUI SYLLABLE M007 MIN -1E815 ; [.3C3A.0020.0002] # MENDE KIKAKUI SYLLABLE M008 MAN -1E816 ; [.3C3B.0020.0002] # MENDE KIKAKUI SYLLABLE M009 MUN -1E817 ; [.3C3C.0020.0002] # MENDE KIKAKUI SYLLABLE M059 MEN -1E818 ; [.3C3D.0020.0002] # MENDE KIKAKUI SYLLABLE M094 MON -1E819 ; [.3C3E.0020.0002] # MENDE KIKAKUI SYLLABLE M154 MUAN -1E81A ; [.3C3F.0020.0002] # MENDE KIKAKUI SYLLABLE M189 MUEN -1E81B ; [.3C40.0020.0002] # MENDE KIKAKUI SYLLABLE M010 BI -1E81C ; [.3C41.0020.0002] # MENDE KIKAKUI SYLLABLE M011 BA -1E81D ; [.3C42.0020.0002] # MENDE KIKAKUI SYLLABLE M012 BU -1E81E ; [.3C43.0020.0002] # MENDE KIKAKUI SYLLABLE M150 BEE -1E81F ; [.3C44.0020.0002] # MENDE KIKAKUI SYLLABLE M097 BE -1E820 ; [.3C45.0020.0002] # MENDE KIKAKUI SYLLABLE M103 BOO -1E821 ; [.3C46.0020.0002] # MENDE KIKAKUI SYLLABLE M138 BO -1E822 ; [.3C47.0020.0002] # MENDE KIKAKUI SYLLABLE M013 I -1E823 ; [.3C48.0020.0002] # MENDE KIKAKUI SYLLABLE M014 A -1E824 ; [.3C49.0020.0002] # MENDE KIKAKUI SYLLABLE M015 U -1E825 ; [.3C4A.0020.0002] # MENDE KIKAKUI SYLLABLE M163 EE -1E826 ; [.3C4B.0020.0002] # MENDE KIKAKUI SYLLABLE M100 E -1E827 ; [.3C4C.0020.0002] # MENDE KIKAKUI SYLLABLE M165 OO -1E828 ; [.3C4D.0020.0002] # MENDE KIKAKUI SYLLABLE M147 O -1E829 ; [.3C4E.0020.0002] # MENDE KIKAKUI SYLLABLE M137 EI -1E82A ; [.3C4F.0020.0002] # MENDE KIKAKUI SYLLABLE M131 IN -1E82B ; [.3C50.0020.0002] # MENDE KIKAKUI SYLLABLE M135 IN -1E82C ; [.3C51.0020.0002] # MENDE KIKAKUI SYLLABLE M195 AN -1E82D ; [.3C52.0020.0002] # MENDE KIKAKUI SYLLABLE M178 EN -1E82E ; [.3C53.0020.0002] # MENDE KIKAKUI SYLLABLE M019 SI -1E82F ; [.3C54.0020.0002] # MENDE KIKAKUI SYLLABLE M020 SA -1E830 ; [.3C55.0020.0002] # MENDE KIKAKUI SYLLABLE M021 SU -1E831 ; [.3C56.0020.0002] # MENDE KIKAKUI SYLLABLE M162 SEE -1E832 ; [.3C57.0020.0002] # MENDE KIKAKUI SYLLABLE M116 SE -1E833 ; [.3C58.0020.0002] # MENDE KIKAKUI SYLLABLE M136 SOO -1E834 ; [.3C59.0020.0002] # MENDE KIKAKUI SYLLABLE M079 SO -1E835 ; [.3C5A.0020.0002] # MENDE KIKAKUI SYLLABLE M196 SIA -1E836 ; [.3C5B.0020.0002] # MENDE KIKAKUI SYLLABLE M025 LI -1E837 ; [.3C5C.0020.0002] # MENDE KIKAKUI SYLLABLE M026 LA -1E838 ; [.3C5D.0020.0002] # MENDE KIKAKUI SYLLABLE M027 LU -1E839 ; [.3C5E.0020.0002] # MENDE KIKAKUI SYLLABLE M084 LEE -1E83A ; [.3C5F.0020.0002] # MENDE KIKAKUI SYLLABLE M073 LE -1E83B ; [.3C60.0020.0002] # MENDE KIKAKUI SYLLABLE M054 LOO -1E83C ; [.3C61.0020.0002] # MENDE KIKAKUI SYLLABLE M153 LO -1E83D ; [.3C62.0020.0002] # MENDE KIKAKUI SYLLABLE M110 LONG LE -1E83E ; [.3C63.0020.0002] # MENDE KIKAKUI SYLLABLE M016 DI -1E83F ; [.3C64.0020.0002] # MENDE KIKAKUI SYLLABLE M017 DA -1E840 ; [.3C65.0020.0002] # MENDE KIKAKUI SYLLABLE M018 DU -1E841 ; [.3C66.0020.0002] # MENDE KIKAKUI SYLLABLE M089 DEE -1E842 ; [.3C67.0020.0002] # MENDE KIKAKUI SYLLABLE M180 DOO -1E843 ; [.3C68.0020.0002] # MENDE KIKAKUI SYLLABLE M181 DO -1E844 ; [.3C69.0020.0002] # MENDE KIKAKUI SYLLABLE M022 TI -1E845 ; [.3C6A.0020.0002] # MENDE KIKAKUI SYLLABLE M023 TA -1E846 ; [.3C6B.0020.0002] # MENDE KIKAKUI SYLLABLE M024 TU -1E847 ; [.3C6C.0020.0002] # MENDE KIKAKUI SYLLABLE M091 TEE -1E848 ; [.3C6D.0020.0002] # MENDE KIKAKUI SYLLABLE M055 TE -1E849 ; [.3C6E.0020.0002] # MENDE KIKAKUI SYLLABLE M104 TOO -1E84A ; [.3C6F.0020.0002] # MENDE KIKAKUI SYLLABLE M069 TO -1E84B ; [.3C70.0020.0002] # MENDE KIKAKUI SYLLABLE M028 JI -1E84C ; [.3C71.0020.0002] # MENDE KIKAKUI SYLLABLE M029 JA -1E84D ; [.3C72.0020.0002] # MENDE KIKAKUI SYLLABLE M030 JU -1E84E ; [.3C73.0020.0002] # MENDE KIKAKUI SYLLABLE M157 JEE -1E84F ; [.3C74.0020.0002] # MENDE KIKAKUI SYLLABLE M113 JE -1E850 ; [.3C75.0020.0002] # MENDE KIKAKUI SYLLABLE M160 JOO -1E851 ; [.3C76.0020.0002] # MENDE KIKAKUI SYLLABLE M063 JO -1E852 ; [.3C77.0020.0002] # MENDE KIKAKUI SYLLABLE M175 LONG JO -1E853 ; [.3C78.0020.0002] # MENDE KIKAKUI SYLLABLE M031 YI -1E854 ; [.3C79.0020.0002] # MENDE KIKAKUI SYLLABLE M032 YA -1E855 ; [.3C7A.0020.0002] # MENDE KIKAKUI SYLLABLE M033 YU -1E856 ; [.3C7B.0020.0002] # MENDE KIKAKUI SYLLABLE M109 YEE -1E857 ; [.3C7C.0020.0002] # MENDE KIKAKUI SYLLABLE M080 YE -1E858 ; [.3C7D.0020.0002] # MENDE KIKAKUI SYLLABLE M141 YOO -1E859 ; [.3C7E.0020.0002] # MENDE KIKAKUI SYLLABLE M121 YO -1E85A ; [.3C7F.0020.0002] # MENDE KIKAKUI SYLLABLE M034 FI -1E85B ; [.3C80.0020.0002] # MENDE KIKAKUI SYLLABLE M035 FA -1E85C ; [.3C81.0020.0002] # MENDE KIKAKUI SYLLABLE M036 FU -1E85D ; [.3C82.0020.0002] # MENDE KIKAKUI SYLLABLE M078 FEE -1E85E ; [.3C83.0020.0002] # MENDE KIKAKUI SYLLABLE M075 FE -1E85F ; [.3C84.0020.0002] # MENDE KIKAKUI SYLLABLE M133 FOO -1E860 ; [.3C85.0020.0002] # MENDE KIKAKUI SYLLABLE M088 FO -1E861 ; [.3C86.0020.0002] # MENDE KIKAKUI SYLLABLE M197 FUA -1E862 ; [.3C87.0020.0002] # MENDE KIKAKUI SYLLABLE M101 FAN -1E863 ; [.3C88.0020.0002] # MENDE KIKAKUI SYLLABLE M037 NIN -1E864 ; [.3C89.0020.0002] # MENDE KIKAKUI SYLLABLE M038 NAN -1E865 ; [.3C8A.0020.0002] # MENDE KIKAKUI SYLLABLE M039 NUN -1E866 ; [.3C8B.0020.0002] # MENDE KIKAKUI SYLLABLE M117 NEN -1E867 ; [.3C8C.0020.0002] # MENDE KIKAKUI SYLLABLE M169 NON -1E868 ; [.3C8D.0020.0002] # MENDE KIKAKUI SYLLABLE M176 HI -1E869 ; [.3C8E.0020.0002] # MENDE KIKAKUI SYLLABLE M041 HA -1E86A ; [.3C8F.0020.0002] # MENDE KIKAKUI SYLLABLE M186 HU -1E86B ; [.3C90.0020.0002] # MENDE KIKAKUI SYLLABLE M040 HEE -1E86C ; [.3C91.0020.0002] # MENDE KIKAKUI SYLLABLE M096 HE -1E86D ; [.3C92.0020.0002] # MENDE KIKAKUI SYLLABLE M042 HOO -1E86E ; [.3C93.0020.0002] # MENDE KIKAKUI SYLLABLE M140 HO -1E86F ; [.3C94.0020.0002] # MENDE KIKAKUI SYLLABLE M083 HEEI -1E870 ; [.3C95.0020.0002] # MENDE KIKAKUI SYLLABLE M128 HOOU -1E871 ; [.3C96.0020.0002] # MENDE KIKAKUI SYLLABLE M053 HIN -1E872 ; [.3C97.0020.0002] # MENDE KIKAKUI SYLLABLE M130 HAN -1E873 ; [.3C98.0020.0002] # MENDE KIKAKUI SYLLABLE M087 HUN -1E874 ; [.3C99.0020.0002] # MENDE KIKAKUI SYLLABLE M052 HEN -1E875 ; [.3C9A.0020.0002] # MENDE KIKAKUI SYLLABLE M193 HON -1E876 ; [.3C9B.0020.0002] # MENDE KIKAKUI SYLLABLE M046 HUAN -1E877 ; [.3C9C.0020.0002] # MENDE KIKAKUI SYLLABLE M090 NGGI -1E878 ; [.3C9D.0020.0002] # MENDE KIKAKUI SYLLABLE M043 NGGA -1E879 ; [.3C9E.0020.0002] # MENDE KIKAKUI SYLLABLE M082 NGGU -1E87A ; [.3C9F.0020.0002] # MENDE KIKAKUI SYLLABLE M115 NGGEE -1E87B ; [.3CA0.0020.0002] # MENDE KIKAKUI SYLLABLE M146 NGGE -1E87C ; [.3CA1.0020.0002] # MENDE KIKAKUI SYLLABLE M156 NGGOO -1E87D ; [.3CA2.0020.0002] # MENDE KIKAKUI SYLLABLE M120 NGGO -1E87E ; [.3CA3.0020.0002] # MENDE KIKAKUI SYLLABLE M159 NGGAA -1E87F ; [.3CA4.0020.0002] # MENDE KIKAKUI SYLLABLE M127 NGGUA -1E880 ; [.3CA5.0020.0002] # MENDE KIKAKUI SYLLABLE M086 LONG NGGE -1E881 ; [.3CA6.0020.0002] # MENDE KIKAKUI SYLLABLE M106 LONG NGGOO -1E882 ; [.3CA7.0020.0002] # MENDE KIKAKUI SYLLABLE M183 LONG NGGO -1E883 ; [.3CA8.0020.0002] # MENDE KIKAKUI SYLLABLE M155 GI -1E884 ; [.3CA9.0020.0002] # MENDE KIKAKUI SYLLABLE M111 GA -1E885 ; [.3CAA.0020.0002] # MENDE KIKAKUI SYLLABLE M168 GU -1E886 ; [.3CAB.0020.0002] # MENDE KIKAKUI SYLLABLE M190 GEE -1E887 ; [.3CAC.0020.0002] # MENDE KIKAKUI SYLLABLE M166 GUEI -1E888 ; [.3CAD.0020.0002] # MENDE KIKAKUI SYLLABLE M167 GUAN -1E889 ; [.3CAE.0020.0002] # MENDE KIKAKUI SYLLABLE M184 NGEN -1E88A ; [.3CAF.0020.0002] # MENDE KIKAKUI SYLLABLE M057 NGON -1E88B ; [.3CB0.0020.0002] # MENDE KIKAKUI SYLLABLE M177 NGUAN -1E88C ; [.3CB1.0020.0002] # MENDE KIKAKUI SYLLABLE M068 PI -1E88D ; [.3CB2.0020.0002] # MENDE KIKAKUI SYLLABLE M099 PA -1E88E ; [.3CB3.0020.0002] # MENDE KIKAKUI SYLLABLE M050 PU -1E88F ; [.3CB4.0020.0002] # MENDE KIKAKUI SYLLABLE M081 PEE -1E890 ; [.3CB5.0020.0002] # MENDE KIKAKUI SYLLABLE M051 PE -1E891 ; [.3CB6.0020.0002] # MENDE KIKAKUI SYLLABLE M102 POO -1E892 ; [.3CB7.0020.0002] # MENDE KIKAKUI SYLLABLE M066 PO -1E893 ; [.3CB8.0020.0002] # MENDE KIKAKUI SYLLABLE M145 MBI -1E894 ; [.3CB9.0020.0002] # MENDE KIKAKUI SYLLABLE M062 MBA -1E895 ; [.3CBA.0020.0002] # MENDE KIKAKUI SYLLABLE M122 MBU -1E896 ; [.3CBB.0020.0002] # MENDE KIKAKUI SYLLABLE M047 MBEE -1E897 ; [.3CBC.0020.0002] # MENDE KIKAKUI SYLLABLE M188 MBEE -1E898 ; [.3CBD.0020.0002] # MENDE KIKAKUI SYLLABLE M072 MBE -1E899 ; [.3CBE.0020.0002] # MENDE KIKAKUI SYLLABLE M172 MBOO -1E89A ; [.3CBF.0020.0002] # MENDE KIKAKUI SYLLABLE M174 MBO -1E89B ; [.3CC0.0020.0002] # MENDE KIKAKUI SYLLABLE M187 MBUU -1E89C ; [.3CC1.0020.0002] # MENDE KIKAKUI SYLLABLE M161 LONG MBE -1E89D ; [.3CC2.0020.0002] # MENDE KIKAKUI SYLLABLE M105 LONG MBOO -1E89E ; [.3CC3.0020.0002] # MENDE KIKAKUI SYLLABLE M142 LONG MBO -1E89F ; [.3CC4.0020.0002] # MENDE KIKAKUI SYLLABLE M132 KPI -1E8A0 ; [.3CC5.0020.0002] # MENDE KIKAKUI SYLLABLE M092 KPA -1E8A1 ; [.3CC6.0020.0002] # MENDE KIKAKUI SYLLABLE M074 KPU -1E8A2 ; [.3CC7.0020.0002] # MENDE KIKAKUI SYLLABLE M044 KPEE -1E8A3 ; [.3CC8.0020.0002] # MENDE KIKAKUI SYLLABLE M108 KPE -1E8A4 ; [.3CC9.0020.0002] # MENDE KIKAKUI SYLLABLE M112 KPOO -1E8A5 ; [.3CCA.0020.0002] # MENDE KIKAKUI SYLLABLE M158 KPO -1E8A6 ; [.3CCB.0020.0002] # MENDE KIKAKUI SYLLABLE M124 GBI -1E8A7 ; [.3CCC.0020.0002] # MENDE KIKAKUI SYLLABLE M056 GBA -1E8A8 ; [.3CCD.0020.0002] # MENDE KIKAKUI SYLLABLE M148 GBU -1E8A9 ; [.3CCE.0020.0002] # MENDE KIKAKUI SYLLABLE M093 GBEE -1E8AA ; [.3CCF.0020.0002] # MENDE KIKAKUI SYLLABLE M107 GBE -1E8AB ; [.3CD0.0020.0002] # MENDE KIKAKUI SYLLABLE M071 GBOO -1E8AC ; [.3CD1.0020.0002] # MENDE KIKAKUI SYLLABLE M070 GBO -1E8AD ; [.3CD2.0020.0002] # MENDE KIKAKUI SYLLABLE M171 RA -1E8AE ; [.3CD3.0020.0002] # MENDE KIKAKUI SYLLABLE M123 NDI -1E8AF ; [.3CD4.0020.0002] # MENDE KIKAKUI SYLLABLE M129 NDA -1E8B0 ; [.3CD5.0020.0002] # MENDE KIKAKUI SYLLABLE M125 NDU -1E8B1 ; [.3CD6.0020.0002] # MENDE KIKAKUI SYLLABLE M191 NDEE -1E8B2 ; [.3CD7.0020.0002] # MENDE KIKAKUI SYLLABLE M119 NDE -1E8B3 ; [.3CD8.0020.0002] # MENDE KIKAKUI SYLLABLE M067 NDOO -1E8B4 ; [.3CD9.0020.0002] # MENDE KIKAKUI SYLLABLE M064 NDO -1E8B5 ; [.3CDA.0020.0002] # MENDE KIKAKUI SYLLABLE M152 NJA -1E8B6 ; [.3CDB.0020.0002] # MENDE KIKAKUI SYLLABLE M192 NJU -1E8B7 ; [.3CDC.0020.0002] # MENDE KIKAKUI SYLLABLE M149 NJEE -1E8B8 ; [.3CDD.0020.0002] # MENDE KIKAKUI SYLLABLE M134 NJOO -1E8B9 ; [.3CDE.0020.0002] # MENDE KIKAKUI SYLLABLE M182 VI -1E8BA ; [.3CDF.0020.0002] # MENDE KIKAKUI SYLLABLE M185 VA -1E8BB ; [.3CE0.0020.0002] # MENDE KIKAKUI SYLLABLE M151 VU -1E8BC ; [.3CE1.0020.0002] # MENDE KIKAKUI SYLLABLE M173 VEE -1E8BD ; [.3CE2.0020.0002] # MENDE KIKAKUI SYLLABLE M085 VE -1E8BE ; [.3CE3.0020.0002] # MENDE KIKAKUI SYLLABLE M144 VOO -1E8BF ; [.3CE4.0020.0002] # MENDE KIKAKUI SYLLABLE M077 VO -1E8C0 ; [.3CE5.0020.0002] # MENDE KIKAKUI SYLLABLE M164 NYIN -1E8C1 ; [.3CE6.0020.0002] # MENDE KIKAKUI SYLLABLE M058 NYAN -1E8C2 ; [.3CE7.0020.0002] # MENDE KIKAKUI SYLLABLE M170 NYUN -1E8C3 ; [.3CE8.0020.0002] # MENDE KIKAKUI SYLLABLE M098 NYEN -1E8C4 ; [.3CE9.0020.0002] # MENDE KIKAKUI SYLLABLE M060 NYON -1E922 ; [.3CEA.0020.0002] # ADLAM SMALL LETTER ALIF -1E900 ; [.3CEA.0020.0008] # ADLAM CAPITAL LETTER ALIF -1E923 ; [.3CEB.0020.0002] # ADLAM SMALL LETTER DAALI -1E901 ; [.3CEB.0020.0008] # ADLAM CAPITAL LETTER DAALI -1E924 ; [.3CEC.0020.0002] # ADLAM SMALL LETTER LAAM -1E902 ; [.3CEC.0020.0008] # ADLAM CAPITAL LETTER LAAM -1E925 ; [.3CED.0020.0002] # ADLAM SMALL LETTER MIIM -1E903 ; [.3CED.0020.0008] # ADLAM CAPITAL LETTER MIIM -1E926 ; [.3CEE.0020.0002] # ADLAM SMALL LETTER BA -1E904 ; [.3CEE.0020.0008] # ADLAM CAPITAL LETTER BA -1E927 ; [.3CEF.0020.0002] # ADLAM SMALL LETTER SINNYIIYHE -1E905 ; [.3CEF.0020.0008] # ADLAM CAPITAL LETTER SINNYIIYHE -1E928 ; [.3CF0.0020.0002] # ADLAM SMALL LETTER PE -1E906 ; [.3CF0.0020.0008] # ADLAM CAPITAL LETTER PE -1E929 ; [.3CF1.0020.0002] # ADLAM SMALL LETTER BHE -1E907 ; [.3CF1.0020.0008] # ADLAM CAPITAL LETTER BHE -1E92A ; [.3CF2.0020.0002] # ADLAM SMALL LETTER RA -1E908 ; [.3CF2.0020.0008] # ADLAM CAPITAL LETTER RA -1E92B ; [.3CF3.0020.0002] # ADLAM SMALL LETTER E -1E909 ; [.3CF3.0020.0008] # ADLAM CAPITAL LETTER E -1E92C ; [.3CF4.0020.0002] # ADLAM SMALL LETTER FA -1E90A ; [.3CF4.0020.0008] # ADLAM CAPITAL LETTER FA -1E92D ; [.3CF5.0020.0002] # ADLAM SMALL LETTER I -1E90B ; [.3CF5.0020.0008] # ADLAM CAPITAL LETTER I -1E92E ; [.3CF6.0020.0002] # ADLAM SMALL LETTER O -1E90C ; [.3CF6.0020.0008] # ADLAM CAPITAL LETTER O -1E92F ; [.3CF7.0020.0002] # ADLAM SMALL LETTER DHA -1E90D ; [.3CF7.0020.0008] # ADLAM CAPITAL LETTER DHA -1E930 ; [.3CF8.0020.0002] # ADLAM SMALL LETTER YHE -1E90E ; [.3CF8.0020.0008] # ADLAM CAPITAL LETTER YHE -1E931 ; [.3CF9.0020.0002] # ADLAM SMALL LETTER WAW -1E90F ; [.3CF9.0020.0008] # ADLAM CAPITAL LETTER WAW -1E932 ; [.3CFA.0020.0002] # ADLAM SMALL LETTER NUN -1E910 ; [.3CFA.0020.0008] # ADLAM CAPITAL LETTER NUN -1E933 ; [.3CFB.0020.0002] # ADLAM SMALL LETTER KAF -1E911 ; [.3CFB.0020.0008] # ADLAM CAPITAL LETTER KAF -1E934 ; [.3CFC.0020.0002] # ADLAM SMALL LETTER YA -1E912 ; [.3CFC.0020.0008] # ADLAM CAPITAL LETTER YA -1E935 ; [.3CFD.0020.0002] # ADLAM SMALL LETTER U -1E913 ; [.3CFD.0020.0008] # ADLAM CAPITAL LETTER U -1E936 ; [.3CFE.0020.0002] # ADLAM SMALL LETTER JIIM -1E914 ; [.3CFE.0020.0008] # ADLAM CAPITAL LETTER JIIM -1E937 ; [.3CFF.0020.0002] # ADLAM SMALL LETTER CHI -1E915 ; [.3CFF.0020.0008] # ADLAM CAPITAL LETTER CHI -1E938 ; [.3D00.0020.0002] # ADLAM SMALL LETTER HA -1E916 ; [.3D00.0020.0008] # ADLAM CAPITAL LETTER HA -1E939 ; [.3D01.0020.0002] # ADLAM SMALL LETTER QAAF -1E917 ; [.3D01.0020.0008] # ADLAM CAPITAL LETTER QAAF -1E93A ; [.3D02.0020.0002] # ADLAM SMALL LETTER GA -1E918 ; [.3D02.0020.0008] # ADLAM CAPITAL LETTER GA -1E93B ; [.3D03.0020.0002] # ADLAM SMALL LETTER NYA -1E919 ; [.3D03.0020.0008] # ADLAM CAPITAL LETTER NYA -1E93C ; [.3D04.0020.0002] # ADLAM SMALL LETTER TU -1E91A ; [.3D04.0020.0008] # ADLAM CAPITAL LETTER TU -1E93D ; [.3D05.0020.0002] # ADLAM SMALL LETTER NHA -1E91B ; [.3D05.0020.0008] # ADLAM CAPITAL LETTER NHA -1E93E ; [.3D06.0020.0002] # ADLAM SMALL LETTER VA -1E91C ; [.3D06.0020.0008] # ADLAM CAPITAL LETTER VA -1E93F ; [.3D07.0020.0002] # ADLAM SMALL LETTER KHA -1E91D ; [.3D07.0020.0008] # ADLAM CAPITAL LETTER KHA -1E940 ; [.3D08.0020.0002] # ADLAM SMALL LETTER GBE -1E91E ; [.3D08.0020.0008] # ADLAM CAPITAL LETTER GBE -1E941 ; [.3D09.0020.0002] # ADLAM SMALL LETTER ZAL -1E91F ; [.3D09.0020.0008] # ADLAM CAPITAL LETTER ZAL -1E942 ; [.3D0A.0020.0002] # ADLAM SMALL LETTER KPO -1E920 ; [.3D0A.0020.0008] # ADLAM CAPITAL LETTER KPO -1E943 ; [.3D0B.0020.0002] # ADLAM SMALL LETTER SHA -1E921 ; [.3D0B.0020.0008] # ADLAM CAPITAL LETTER SHA -1100 ; [.3D0C.0020.0002] # HANGUL CHOSEONG KIYEOK -3131 ; [.3D0C.0020.0004] # HANGUL LETTER KIYEOK -3200 ; [*0318.0020.0004][.3D0C.0020.0004][*0319.0020.0004] # PARENTHESIZED HANGUL KIYEOK -3260 ; [.3D0C.0020.0006] # CIRCLED HANGUL KIYEOK -FFA1 ; [.3D0C.0020.0012] # HALFWIDTH HANGUL LETTER KIYEOK -320E ; [*0318.0020.0004][.3D0C.0020.0004][.3D8A.0020.0004][*0319.0020.0004] # PARENTHESIZED HANGUL KIYEOK A -326E ; [.3D0C.0020.0006][.3D8A.0020.0006] # CIRCLED HANGUL KIYEOK A -1101 ; [.3D0D.0020.0002] # HANGUL CHOSEONG SSANGKIYEOK -3132 ; [.3D0D.0020.0004] # HANGUL LETTER SSANGKIYEOK -FFA2 ; [.3D0D.0020.0012] # HALFWIDTH HANGUL LETTER SSANGKIYEOK -1102 ; [.3D0E.0020.0002] # HANGUL CHOSEONG NIEUN -3134 ; [.3D0E.0020.0004] # HANGUL LETTER NIEUN -3201 ; [*0318.0020.0004][.3D0E.0020.0004][*0319.0020.0004] # PARENTHESIZED HANGUL NIEUN -3261 ; [.3D0E.0020.0006] # CIRCLED HANGUL NIEUN -FFA4 ; [.3D0E.0020.0012] # HALFWIDTH HANGUL LETTER NIEUN -320F ; [*0318.0020.0004][.3D0E.0020.0004][.3D8A.0020.0004][*0319.0020.0004] # PARENTHESIZED HANGUL NIEUN A -326F ; [.3D0E.0020.0006][.3D8A.0020.0006] # CIRCLED HANGUL NIEUN A -1103 ; [.3D0F.0020.0002] # HANGUL CHOSEONG TIKEUT -3137 ; [.3D0F.0020.0004] # HANGUL LETTER TIKEUT -3202 ; [*0318.0020.0004][.3D0F.0020.0004][*0319.0020.0004] # PARENTHESIZED HANGUL TIKEUT -3262 ; [.3D0F.0020.0006] # CIRCLED HANGUL TIKEUT -FFA7 ; [.3D0F.0020.0012] # HALFWIDTH HANGUL LETTER TIKEUT -3210 ; [*0318.0020.0004][.3D0F.0020.0004][.3D8A.0020.0004][*0319.0020.0004] # PARENTHESIZED HANGUL TIKEUT A -3270 ; [.3D0F.0020.0006][.3D8A.0020.0006] # CIRCLED HANGUL TIKEUT A -1104 ; [.3D10.0020.0002] # HANGUL CHOSEONG SSANGTIKEUT -3138 ; [.3D10.0020.0004] # HANGUL LETTER SSANGTIKEUT -FFA8 ; [.3D10.0020.0012] # HALFWIDTH HANGUL LETTER SSANGTIKEUT -1105 ; [.3D11.0020.0002] # HANGUL CHOSEONG RIEUL -3139 ; [.3D11.0020.0004] # HANGUL LETTER RIEUL -3203 ; [*0318.0020.0004][.3D11.0020.0004][*0319.0020.0004] # PARENTHESIZED HANGUL RIEUL -3263 ; [.3D11.0020.0006] # CIRCLED HANGUL RIEUL -FFA9 ; [.3D11.0020.0012] # HALFWIDTH HANGUL LETTER RIEUL -3211 ; [*0318.0020.0004][.3D11.0020.0004][.3D8A.0020.0004][*0319.0020.0004] # PARENTHESIZED HANGUL RIEUL A -3271 ; [.3D11.0020.0006][.3D8A.0020.0006] # CIRCLED HANGUL RIEUL A -1106 ; [.3D12.0020.0002] # HANGUL CHOSEONG MIEUM -3141 ; [.3D12.0020.0004] # HANGUL LETTER MIEUM -3204 ; [*0318.0020.0004][.3D12.0020.0004][*0319.0020.0004] # PARENTHESIZED HANGUL MIEUM -3264 ; [.3D12.0020.0006] # CIRCLED HANGUL MIEUM -FFB1 ; [.3D12.0020.0012] # HALFWIDTH HANGUL LETTER MIEUM -3212 ; [*0318.0020.0004][.3D12.0020.0004][.3D8A.0020.0004][*0319.0020.0004] # PARENTHESIZED HANGUL MIEUM A -3272 ; [.3D12.0020.0006][.3D8A.0020.0006] # CIRCLED HANGUL MIEUM A -1107 ; [.3D13.0020.0002] # HANGUL CHOSEONG PIEUP -3142 ; [.3D13.0020.0004] # HANGUL LETTER PIEUP -3205 ; [*0318.0020.0004][.3D13.0020.0004][*0319.0020.0004] # PARENTHESIZED HANGUL PIEUP -3265 ; [.3D13.0020.0006] # CIRCLED HANGUL PIEUP -FFB2 ; [.3D13.0020.0012] # HALFWIDTH HANGUL LETTER PIEUP -3213 ; [*0318.0020.0004][.3D13.0020.0004][.3D8A.0020.0004][*0319.0020.0004] # PARENTHESIZED HANGUL PIEUP A -3273 ; [.3D13.0020.0006][.3D8A.0020.0006] # CIRCLED HANGUL PIEUP A -1108 ; [.3D14.0020.0002] # HANGUL CHOSEONG SSANGPIEUP -3143 ; [.3D14.0020.0004] # HANGUL LETTER SSANGPIEUP -FFB3 ; [.3D14.0020.0012] # HALFWIDTH HANGUL LETTER SSANGPIEUP -1109 ; [.3D15.0020.0002] # HANGUL CHOSEONG SIOS -3145 ; [.3D15.0020.0004] # HANGUL LETTER SIOS -3206 ; [*0318.0020.0004][.3D15.0020.0004][*0319.0020.0004] # PARENTHESIZED HANGUL SIOS -3266 ; [.3D15.0020.0006] # CIRCLED HANGUL SIOS -FFB5 ; [.3D15.0020.0012] # HALFWIDTH HANGUL LETTER SIOS -3214 ; [*0318.0020.0004][.3D15.0020.0004][.3D8A.0020.0004][*0319.0020.0004] # PARENTHESIZED HANGUL SIOS A -3274 ; [.3D15.0020.0006][.3D8A.0020.0006] # CIRCLED HANGUL SIOS A -110A ; [.3D16.0020.0002] # HANGUL CHOSEONG SSANGSIOS -3146 ; [.3D16.0020.0004] # HANGUL LETTER SSANGSIOS -FFB6 ; [.3D16.0020.0012] # HALFWIDTH HANGUL LETTER SSANGSIOS -110B ; [.3D17.0020.0002] # HANGUL CHOSEONG IEUNG -3147 ; [.3D17.0020.0004] # HANGUL LETTER IEUNG -3207 ; [*0318.0020.0004][.3D17.0020.0004][*0319.0020.0004] # PARENTHESIZED HANGUL IEUNG -3267 ; [.3D17.0020.0006] # CIRCLED HANGUL IEUNG -FFB7 ; [.3D17.0020.0012] # HALFWIDTH HANGUL LETTER IEUNG -3215 ; [*0318.0020.0004][.3D17.0020.0004][.3D8A.0020.0004][*0319.0020.0004] # PARENTHESIZED HANGUL IEUNG A -3275 ; [.3D17.0020.0006][.3D8A.0020.0006] # CIRCLED HANGUL IEUNG A -321D ; [*0318.0020.0004][.3D17.0020.0004][.3D92.0020.0004][.3D18.0020.0004][.3D8E.0020.0004][.3DEB.0020.0004][*0319.0020.0004] # PARENTHESIZED KOREAN CHARACTER OJEON -321E ; [*0318.0020.0004][.3D17.0020.0004][.3D92.0020.0004][.3D1E.0020.0004][.3D97.0020.0004][*0319.0020.0004] # PARENTHESIZED KOREAN CHARACTER O HU -327E ; [.3D17.0020.0006][.3D97.0020.0006] # CIRCLED HANGUL IEUNG U -110C ; [.3D18.0020.0002] # HANGUL CHOSEONG CIEUC -3148 ; [.3D18.0020.0004] # HANGUL LETTER CIEUC -3208 ; [*0318.0020.0004][.3D18.0020.0004][*0319.0020.0004] # PARENTHESIZED HANGUL CIEUC -3268 ; [.3D18.0020.0006] # CIRCLED HANGUL CIEUC -FFB8 ; [.3D18.0020.0012] # HALFWIDTH HANGUL LETTER CIEUC -3216 ; [*0318.0020.0004][.3D18.0020.0004][.3D8A.0020.0004][*0319.0020.0004] # PARENTHESIZED HANGUL CIEUC A -3276 ; [.3D18.0020.0006][.3D8A.0020.0006] # CIRCLED HANGUL CIEUC A -321C ; [*0318.0020.0004][.3D18.0020.0004][.3D97.0020.0004][*0319.0020.0004] # PARENTHESIZED HANGUL CIEUC U -327D ; [.3D18.0020.0006][.3D97.0020.0006][.3D17.0020.0006][.3D9D.0020.0006] # CIRCLED KOREAN CHARACTER JUEUI -110D ; [.3D19.0020.0002] # HANGUL CHOSEONG SSANGCIEUC -3149 ; [.3D19.0020.0004] # HANGUL LETTER SSANGCIEUC -FFB9 ; [.3D19.0020.0012] # HALFWIDTH HANGUL LETTER SSANGCIEUC -110E ; [.3D1A.0020.0002] # HANGUL CHOSEONG CHIEUCH -314A ; [.3D1A.0020.0004] # HANGUL LETTER CHIEUCH -3209 ; [*0318.0020.0004][.3D1A.0020.0004][*0319.0020.0004] # PARENTHESIZED HANGUL CHIEUCH -3269 ; [.3D1A.0020.0006] # CIRCLED HANGUL CHIEUCH -FFBA ; [.3D1A.0020.0012] # HALFWIDTH HANGUL LETTER CHIEUCH -3217 ; [*0318.0020.0004][.3D1A.0020.0004][.3D8A.0020.0004][*0319.0020.0004] # PARENTHESIZED HANGUL CHIEUCH A -3277 ; [.3D1A.0020.0006][.3D8A.0020.0006] # CIRCLED HANGUL CHIEUCH A -327C ; [.3D1A.0020.0006][.3D8A.0020.0006][.3DF7.0020.0006][.3D0C.0020.0006][.3D92.0020.0006] # CIRCLED KOREAN CHARACTER CHAMKO -110F ; [.3D1B.0020.0002] # HANGUL CHOSEONG KHIEUKH -314B ; [.3D1B.0020.0004] # HANGUL LETTER KHIEUKH -320A ; [*0318.0020.0004][.3D1B.0020.0004][*0319.0020.0004] # PARENTHESIZED HANGUL KHIEUKH -326A ; [.3D1B.0020.0006] # CIRCLED HANGUL KHIEUKH -FFBB ; [.3D1B.0020.0012] # HALFWIDTH HANGUL LETTER KHIEUKH -3218 ; [*0318.0020.0004][.3D1B.0020.0004][.3D8A.0020.0004][*0319.0020.0004] # PARENTHESIZED HANGUL KHIEUKH A -3278 ; [.3D1B.0020.0006][.3D8A.0020.0006] # CIRCLED HANGUL KHIEUKH A -1110 ; [.3D1C.0020.0002] # HANGUL CHOSEONG THIEUTH -314C ; [.3D1C.0020.0004] # HANGUL LETTER THIEUTH -320B ; [*0318.0020.0004][.3D1C.0020.0004][*0319.0020.0004] # PARENTHESIZED HANGUL THIEUTH -326B ; [.3D1C.0020.0006] # CIRCLED HANGUL THIEUTH -FFBC ; [.3D1C.0020.0012] # HALFWIDTH HANGUL LETTER THIEUTH -3219 ; [*0318.0020.0004][.3D1C.0020.0004][.3D8A.0020.0004][*0319.0020.0004] # PARENTHESIZED HANGUL THIEUTH A -3279 ; [.3D1C.0020.0006][.3D8A.0020.0006] # CIRCLED HANGUL THIEUTH A -1111 ; [.3D1D.0020.0002] # HANGUL CHOSEONG PHIEUPH -314D ; [.3D1D.0020.0004] # HANGUL LETTER PHIEUPH -320C ; [*0318.0020.0004][.3D1D.0020.0004][*0319.0020.0004] # PARENTHESIZED HANGUL PHIEUPH -326C ; [.3D1D.0020.0006] # CIRCLED HANGUL PHIEUPH -FFBD ; [.3D1D.0020.0012] # HALFWIDTH HANGUL LETTER PHIEUPH -321A ; [*0318.0020.0004][.3D1D.0020.0004][.3D8A.0020.0004][*0319.0020.0004] # PARENTHESIZED HANGUL PHIEUPH A -327A ; [.3D1D.0020.0006][.3D8A.0020.0006] # CIRCLED HANGUL PHIEUPH A -1112 ; [.3D1E.0020.0002] # HANGUL CHOSEONG HIEUH -314E ; [.3D1E.0020.0004] # HANGUL LETTER HIEUH -320D ; [*0318.0020.0004][.3D1E.0020.0004][*0319.0020.0004] # PARENTHESIZED HANGUL HIEUH -326D ; [.3D1E.0020.0006] # CIRCLED HANGUL HIEUH -FFBE ; [.3D1E.0020.0012] # HALFWIDTH HANGUL LETTER HIEUH -321B ; [*0318.0020.0004][.3D1E.0020.0004][.3D8A.0020.0004][*0319.0020.0004] # PARENTHESIZED HANGUL HIEUH A -327B ; [.3D1E.0020.0006][.3D8A.0020.0006] # CIRCLED HANGUL HIEUH A -1113 ; [.3D1F.0020.0002] # HANGUL CHOSEONG NIEUN-KIYEOK -1114 ; [.3D20.0020.0002] # HANGUL CHOSEONG SSANGNIEUN -3165 ; [.3D20.0020.0004] # HANGUL LETTER SSANGNIEUN -1115 ; [.3D21.0020.0002] # HANGUL CHOSEONG NIEUN-TIKEUT -3166 ; [.3D21.0020.0004] # HANGUL LETTER NIEUN-TIKEUT -1116 ; [.3D22.0020.0002] # HANGUL CHOSEONG NIEUN-PIEUP -1117 ; [.3D23.0020.0002] # HANGUL CHOSEONG TIKEUT-KIYEOK -1118 ; [.3D24.0020.0002] # HANGUL CHOSEONG RIEUL-NIEUN -1119 ; [.3D25.0020.0002] # HANGUL CHOSEONG SSANGRIEUL -111A ; [.3D26.0020.0002] # HANGUL CHOSEONG RIEUL-HIEUH -3140 ; [.3D26.0020.0004] # HANGUL LETTER RIEUL-HIEUH -FFB0 ; [.3D26.0020.0012] # HALFWIDTH HANGUL LETTER RIEUL-HIEUH -111B ; [.3D27.0020.0002] # HANGUL CHOSEONG KAPYEOUNRIEUL -111C ; [.3D28.0020.0002] # HANGUL CHOSEONG MIEUM-PIEUP -316E ; [.3D28.0020.0004] # HANGUL LETTER MIEUM-PIEUP -111D ; [.3D29.0020.0002] # HANGUL CHOSEONG KAPYEOUNMIEUM -3171 ; [.3D29.0020.0004] # HANGUL LETTER KAPYEOUNMIEUM -111E ; [.3D2A.0020.0002] # HANGUL CHOSEONG PIEUP-KIYEOK -3172 ; [.3D2A.0020.0004] # HANGUL LETTER PIEUP-KIYEOK -111F ; [.3D2B.0020.0002] # HANGUL CHOSEONG PIEUP-NIEUN -1120 ; [.3D2C.0020.0002] # HANGUL CHOSEONG PIEUP-TIKEUT -3173 ; [.3D2C.0020.0004] # HANGUL LETTER PIEUP-TIKEUT -1121 ; [.3D2D.0020.0002] # HANGUL CHOSEONG PIEUP-SIOS -3144 ; [.3D2D.0020.0004] # HANGUL LETTER PIEUP-SIOS -FFB4 ; [.3D2D.0020.0012] # HALFWIDTH HANGUL LETTER PIEUP-SIOS -1122 ; [.3D2E.0020.0002] # HANGUL CHOSEONG PIEUP-SIOS-KIYEOK -3174 ; [.3D2E.0020.0004] # HANGUL LETTER PIEUP-SIOS-KIYEOK -1123 ; [.3D2F.0020.0002] # HANGUL CHOSEONG PIEUP-SIOS-TIKEUT -3175 ; [.3D2F.0020.0004] # HANGUL LETTER PIEUP-SIOS-TIKEUT -1124 ; [.3D30.0020.0002] # HANGUL CHOSEONG PIEUP-SIOS-PIEUP -1125 ; [.3D31.0020.0002] # HANGUL CHOSEONG PIEUP-SSANGSIOS -1126 ; [.3D32.0020.0002] # HANGUL CHOSEONG PIEUP-SIOS-CIEUC -1127 ; [.3D33.0020.0002] # HANGUL CHOSEONG PIEUP-CIEUC -3176 ; [.3D33.0020.0004] # HANGUL LETTER PIEUP-CIEUC -1128 ; [.3D34.0020.0002] # HANGUL CHOSEONG PIEUP-CHIEUCH -1129 ; [.3D35.0020.0002] # HANGUL CHOSEONG PIEUP-THIEUTH -3177 ; [.3D35.0020.0004] # HANGUL LETTER PIEUP-THIEUTH -112A ; [.3D36.0020.0002] # HANGUL CHOSEONG PIEUP-PHIEUPH -112B ; [.3D37.0020.0002] # HANGUL CHOSEONG KAPYEOUNPIEUP -3178 ; [.3D37.0020.0004] # HANGUL LETTER KAPYEOUNPIEUP -112C ; [.3D38.0020.0002] # HANGUL CHOSEONG KAPYEOUNSSANGPIEUP -3179 ; [.3D38.0020.0004] # HANGUL LETTER KAPYEOUNSSANGPIEUP -112D ; [.3D39.0020.0002] # HANGUL CHOSEONG SIOS-KIYEOK -317A ; [.3D39.0020.0004] # HANGUL LETTER SIOS-KIYEOK -112E ; [.3D3A.0020.0002] # HANGUL CHOSEONG SIOS-NIEUN -317B ; [.3D3A.0020.0004] # HANGUL LETTER SIOS-NIEUN -112F ; [.3D3B.0020.0002] # HANGUL CHOSEONG SIOS-TIKEUT -317C ; [.3D3B.0020.0004] # HANGUL LETTER SIOS-TIKEUT -1130 ; [.3D3C.0020.0002] # HANGUL CHOSEONG SIOS-RIEUL -1131 ; [.3D3D.0020.0002] # HANGUL CHOSEONG SIOS-MIEUM -1132 ; [.3D3E.0020.0002] # HANGUL CHOSEONG SIOS-PIEUP -317D ; [.3D3E.0020.0004] # HANGUL LETTER SIOS-PIEUP -1133 ; [.3D3F.0020.0002] # HANGUL CHOSEONG SIOS-PIEUP-KIYEOK -1134 ; [.3D40.0020.0002] # HANGUL CHOSEONG SIOS-SSANGSIOS -1135 ; [.3D41.0020.0002] # HANGUL CHOSEONG SIOS-IEUNG -1136 ; [.3D42.0020.0002] # HANGUL CHOSEONG SIOS-CIEUC -317E ; [.3D42.0020.0004] # HANGUL LETTER SIOS-CIEUC -1137 ; [.3D43.0020.0002] # HANGUL CHOSEONG SIOS-CHIEUCH -1138 ; [.3D44.0020.0002] # HANGUL CHOSEONG SIOS-KHIEUKH -1139 ; [.3D45.0020.0002] # HANGUL CHOSEONG SIOS-THIEUTH -113A ; [.3D46.0020.0002] # HANGUL CHOSEONG SIOS-PHIEUPH -113B ; [.3D47.0020.0002] # HANGUL CHOSEONG SIOS-HIEUH -113C ; [.3D48.0020.0002] # HANGUL CHOSEONG CHITUEUMSIOS -113D ; [.3D49.0020.0002] # HANGUL CHOSEONG CHITUEUMSSANGSIOS -113E ; [.3D4A.0020.0002] # HANGUL CHOSEONG CEONGCHIEUMSIOS -113F ; [.3D4B.0020.0002] # HANGUL CHOSEONG CEONGCHIEUMSSANGSIOS -1140 ; [.3D4C.0020.0002] # HANGUL CHOSEONG PANSIOS -317F ; [.3D4C.0020.0004] # HANGUL LETTER PANSIOS -1141 ; [.3D4D.0020.0002] # HANGUL CHOSEONG IEUNG-KIYEOK -1142 ; [.3D4E.0020.0002] # HANGUL CHOSEONG IEUNG-TIKEUT -1143 ; [.3D4F.0020.0002] # HANGUL CHOSEONG IEUNG-MIEUM -1144 ; [.3D50.0020.0002] # HANGUL CHOSEONG IEUNG-PIEUP -1145 ; [.3D51.0020.0002] # HANGUL CHOSEONG IEUNG-SIOS -1146 ; [.3D52.0020.0002] # HANGUL CHOSEONG IEUNG-PANSIOS -1147 ; [.3D53.0020.0002] # HANGUL CHOSEONG SSANGIEUNG -3180 ; [.3D53.0020.0004] # HANGUL LETTER SSANGIEUNG -1148 ; [.3D54.0020.0002] # HANGUL CHOSEONG IEUNG-CIEUC -1149 ; [.3D55.0020.0002] # HANGUL CHOSEONG IEUNG-CHIEUCH -114A ; [.3D56.0020.0002] # HANGUL CHOSEONG IEUNG-THIEUTH -114B ; [.3D57.0020.0002] # HANGUL CHOSEONG IEUNG-PHIEUPH -114C ; [.3D58.0020.0002] # HANGUL CHOSEONG YESIEUNG -3181 ; [.3D58.0020.0004] # HANGUL LETTER YESIEUNG -114D ; [.3D59.0020.0002] # HANGUL CHOSEONG CIEUC-IEUNG -114E ; [.3D5A.0020.0002] # HANGUL CHOSEONG CHITUEUMCIEUC -114F ; [.3D5B.0020.0002] # HANGUL CHOSEONG CHITUEUMSSANGCIEUC -1150 ; [.3D5C.0020.0002] # HANGUL CHOSEONG CEONGCHIEUMCIEUC -1151 ; [.3D5D.0020.0002] # HANGUL CHOSEONG CEONGCHIEUMSSANGCIEUC -1152 ; [.3D5E.0020.0002] # HANGUL CHOSEONG CHIEUCH-KHIEUKH -1153 ; [.3D5F.0020.0002] # HANGUL CHOSEONG CHIEUCH-HIEUH -1154 ; [.3D60.0020.0002] # HANGUL CHOSEONG CHITUEUMCHIEUCH -1155 ; [.3D61.0020.0002] # HANGUL CHOSEONG CEONGCHIEUMCHIEUCH -1156 ; [.3D62.0020.0002] # HANGUL CHOSEONG PHIEUPH-PIEUP -1157 ; [.3D63.0020.0002] # HANGUL CHOSEONG KAPYEOUNPHIEUPH -3184 ; [.3D63.0020.0004] # HANGUL LETTER KAPYEOUNPHIEUPH -1158 ; [.3D64.0020.0002] # HANGUL CHOSEONG SSANGHIEUH -3185 ; [.3D64.0020.0004] # HANGUL LETTER SSANGHIEUH -1159 ; [.3D65.0020.0002] # HANGUL CHOSEONG YEORINHIEUH -3186 ; [.3D65.0020.0004] # HANGUL LETTER YEORINHIEUH -115A ; [.3D66.0020.0002] # HANGUL CHOSEONG KIYEOK-TIKEUT -115B ; [.3D67.0020.0002] # HANGUL CHOSEONG NIEUN-SIOS -115C ; [.3D68.0020.0002] # HANGUL CHOSEONG NIEUN-CIEUC -115D ; [.3D69.0020.0002] # HANGUL CHOSEONG NIEUN-HIEUH -115E ; [.3D6A.0020.0002] # HANGUL CHOSEONG TIKEUT-RIEUL -A960 ; [.3D6B.0020.0002] # HANGUL CHOSEONG TIKEUT-MIEUM -A961 ; [.3D6C.0020.0002] # HANGUL CHOSEONG TIKEUT-PIEUP -A962 ; [.3D6D.0020.0002] # HANGUL CHOSEONG TIKEUT-SIOS -A963 ; [.3D6E.0020.0002] # HANGUL CHOSEONG TIKEUT-CIEUC -A964 ; [.3D6F.0020.0002] # HANGUL CHOSEONG RIEUL-KIYEOK -A965 ; [.3D70.0020.0002] # HANGUL CHOSEONG RIEUL-SSANGKIYEOK -A966 ; [.3D71.0020.0002] # HANGUL CHOSEONG RIEUL-TIKEUT -A967 ; [.3D72.0020.0002] # HANGUL CHOSEONG RIEUL-SSANGTIKEUT -A968 ; [.3D73.0020.0002] # HANGUL CHOSEONG RIEUL-MIEUM -A969 ; [.3D74.0020.0002] # HANGUL CHOSEONG RIEUL-PIEUP -A96A ; [.3D75.0020.0002] # HANGUL CHOSEONG RIEUL-SSANGPIEUP -A96B ; [.3D76.0020.0002] # HANGUL CHOSEONG RIEUL-KAPYEOUNPIEUP -A96C ; [.3D77.0020.0002] # HANGUL CHOSEONG RIEUL-SIOS -A96D ; [.3D78.0020.0002] # HANGUL CHOSEONG RIEUL-CIEUC -A96E ; [.3D79.0020.0002] # HANGUL CHOSEONG RIEUL-KHIEUKH -A96F ; [.3D7A.0020.0002] # HANGUL CHOSEONG MIEUM-KIYEOK -A970 ; [.3D7B.0020.0002] # HANGUL CHOSEONG MIEUM-TIKEUT -A971 ; [.3D7C.0020.0002] # HANGUL CHOSEONG MIEUM-SIOS -A972 ; [.3D7D.0020.0002] # HANGUL CHOSEONG PIEUP-SIOS-THIEUTH -A973 ; [.3D7E.0020.0002] # HANGUL CHOSEONG PIEUP-KHIEUKH -A974 ; [.3D7F.0020.0002] # HANGUL CHOSEONG PIEUP-HIEUH -A975 ; [.3D80.0020.0002] # HANGUL CHOSEONG SSANGSIOS-PIEUP -A976 ; [.3D81.0020.0002] # HANGUL CHOSEONG IEUNG-RIEUL -A977 ; [.3D82.0020.0002] # HANGUL CHOSEONG IEUNG-HIEUH -A978 ; [.3D83.0020.0002] # HANGUL CHOSEONG SSANGCIEUC-HIEUH -A979 ; [.3D84.0020.0002] # HANGUL CHOSEONG SSANGTHIEUTH -A97A ; [.3D85.0020.0002] # HANGUL CHOSEONG PHIEUPH-HIEUH -A97B ; [.3D86.0020.0002] # HANGUL CHOSEONG HIEUH-SIOS -A97C ; [.3D87.0020.0002] # HANGUL CHOSEONG SSANGYEORINHIEUH -115F ; [.3D88.0020.0002] # HANGUL CHOSEONG FILLER -1160 ; [.3D89.0020.0002] # HANGUL JUNGSEONG FILLER -3164 ; [.3D89.0020.0004] # HANGUL FILLER -FFA0 ; [.3D89.0020.0012] # HALFWIDTH HANGUL FILLER -1161 ; [.3D8A.0020.0002] # HANGUL JUNGSEONG A -314F ; [.3D8A.0020.0004] # HANGUL LETTER A -FFC2 ; [.3D8A.0020.0012] # HALFWIDTH HANGUL LETTER A -1162 ; [.3D8B.0020.0002] # HANGUL JUNGSEONG AE -3150 ; [.3D8B.0020.0004] # HANGUL LETTER AE -FFC3 ; [.3D8B.0020.0012] # HALFWIDTH HANGUL LETTER AE -1163 ; [.3D8C.0020.0002] # HANGUL JUNGSEONG YA -3151 ; [.3D8C.0020.0004] # HANGUL LETTER YA -FFC4 ; [.3D8C.0020.0012] # HALFWIDTH HANGUL LETTER YA -1164 ; [.3D8D.0020.0002] # HANGUL JUNGSEONG YAE -3152 ; [.3D8D.0020.0004] # HANGUL LETTER YAE -FFC5 ; [.3D8D.0020.0012] # HALFWIDTH HANGUL LETTER YAE -1165 ; [.3D8E.0020.0002] # HANGUL JUNGSEONG EO -3153 ; [.3D8E.0020.0004] # HANGUL LETTER EO -FFC6 ; [.3D8E.0020.0012] # HALFWIDTH HANGUL LETTER EO -1166 ; [.3D8F.0020.0002] # HANGUL JUNGSEONG E -3154 ; [.3D8F.0020.0004] # HANGUL LETTER E -FFC7 ; [.3D8F.0020.0012] # HALFWIDTH HANGUL LETTER E -1167 ; [.3D90.0020.0002] # HANGUL JUNGSEONG YEO -3155 ; [.3D90.0020.0004] # HANGUL LETTER YEO -FFCA ; [.3D90.0020.0012] # HALFWIDTH HANGUL LETTER YEO -1168 ; [.3D91.0020.0002] # HANGUL JUNGSEONG YE -3156 ; [.3D91.0020.0004] # HANGUL LETTER YE -FFCB ; [.3D91.0020.0012] # HALFWIDTH HANGUL LETTER YE -1169 ; [.3D92.0020.0002] # HANGUL JUNGSEONG O -3157 ; [.3D92.0020.0004] # HANGUL LETTER O -FFCC ; [.3D92.0020.0012] # HALFWIDTH HANGUL LETTER O -116A ; [.3D93.0020.0002] # HANGUL JUNGSEONG WA -3158 ; [.3D93.0020.0004] # HANGUL LETTER WA -FFCD ; [.3D93.0020.0012] # HALFWIDTH HANGUL LETTER WA -116B ; [.3D94.0020.0002] # HANGUL JUNGSEONG WAE -3159 ; [.3D94.0020.0004] # HANGUL LETTER WAE -FFCE ; [.3D94.0020.0012] # HALFWIDTH HANGUL LETTER WAE -116C ; [.3D95.0020.0002] # HANGUL JUNGSEONG OE -315A ; [.3D95.0020.0004] # HANGUL LETTER OE -FFCF ; [.3D95.0020.0012] # HALFWIDTH HANGUL LETTER OE -116D ; [.3D96.0020.0002] # HANGUL JUNGSEONG YO -315B ; [.3D96.0020.0004] # HANGUL LETTER YO -FFD2 ; [.3D96.0020.0012] # HALFWIDTH HANGUL LETTER YO -116E ; [.3D97.0020.0002] # HANGUL JUNGSEONG U -315C ; [.3D97.0020.0004] # HANGUL LETTER U -FFD3 ; [.3D97.0020.0012] # HALFWIDTH HANGUL LETTER U -116F ; [.3D98.0020.0002] # HANGUL JUNGSEONG WEO -315D ; [.3D98.0020.0004] # HANGUL LETTER WEO -FFD4 ; [.3D98.0020.0012] # HALFWIDTH HANGUL LETTER WEO -1170 ; [.3D99.0020.0002] # HANGUL JUNGSEONG WE -315E ; [.3D99.0020.0004] # HANGUL LETTER WE -FFD5 ; [.3D99.0020.0012] # HALFWIDTH HANGUL LETTER WE -1171 ; [.3D9A.0020.0002] # HANGUL JUNGSEONG WI -315F ; [.3D9A.0020.0004] # HANGUL LETTER WI -FFD6 ; [.3D9A.0020.0012] # HALFWIDTH HANGUL LETTER WI -1172 ; [.3D9B.0020.0002] # HANGUL JUNGSEONG YU -3160 ; [.3D9B.0020.0004] # HANGUL LETTER YU -FFD7 ; [.3D9B.0020.0012] # HALFWIDTH HANGUL LETTER YU -1173 ; [.3D9C.0020.0002] # HANGUL JUNGSEONG EU -3161 ; [.3D9C.0020.0004] # HANGUL LETTER EU -FFDA ; [.3D9C.0020.0012] # HALFWIDTH HANGUL LETTER EU -1174 ; [.3D9D.0020.0002] # HANGUL JUNGSEONG YI -3162 ; [.3D9D.0020.0004] # HANGUL LETTER YI -FFDB ; [.3D9D.0020.0012] # HALFWIDTH HANGUL LETTER YI -1175 ; [.3D9E.0020.0002] # HANGUL JUNGSEONG I -3163 ; [.3D9E.0020.0004] # HANGUL LETTER I -FFDC ; [.3D9E.0020.0012] # HALFWIDTH HANGUL LETTER I -1176 ; [.3D9F.0020.0002] # HANGUL JUNGSEONG A-O -1177 ; [.3DA0.0020.0002] # HANGUL JUNGSEONG A-U -1178 ; [.3DA1.0020.0002] # HANGUL JUNGSEONG YA-O -1179 ; [.3DA2.0020.0002] # HANGUL JUNGSEONG YA-YO -117A ; [.3DA3.0020.0002] # HANGUL JUNGSEONG EO-O -117B ; [.3DA4.0020.0002] # HANGUL JUNGSEONG EO-U -117C ; [.3DA5.0020.0002] # HANGUL JUNGSEONG EO-EU -117D ; [.3DA6.0020.0002] # HANGUL JUNGSEONG YEO-O -117E ; [.3DA7.0020.0002] # HANGUL JUNGSEONG YEO-U -117F ; [.3DA8.0020.0002] # HANGUL JUNGSEONG O-EO -1180 ; [.3DA9.0020.0002] # HANGUL JUNGSEONG O-E -1181 ; [.3DAA.0020.0002] # HANGUL JUNGSEONG O-YE -1182 ; [.3DAB.0020.0002] # HANGUL JUNGSEONG O-O -1183 ; [.3DAC.0020.0002] # HANGUL JUNGSEONG O-U -1184 ; [.3DAD.0020.0002] # HANGUL JUNGSEONG YO-YA -3187 ; [.3DAD.0020.0004] # HANGUL LETTER YO-YA -1185 ; [.3DAE.0020.0002] # HANGUL JUNGSEONG YO-YAE -3188 ; [.3DAE.0020.0004] # HANGUL LETTER YO-YAE -1186 ; [.3DAF.0020.0002] # HANGUL JUNGSEONG YO-YEO -1187 ; [.3DB0.0020.0002] # HANGUL JUNGSEONG YO-O -1188 ; [.3DB1.0020.0002] # HANGUL JUNGSEONG YO-I -3189 ; [.3DB1.0020.0004] # HANGUL LETTER YO-I -1189 ; [.3DB2.0020.0002] # HANGUL JUNGSEONG U-A -118A ; [.3DB3.0020.0002] # HANGUL JUNGSEONG U-AE -118B ; [.3DB4.0020.0002] # HANGUL JUNGSEONG U-EO-EU -118C ; [.3DB5.0020.0002] # HANGUL JUNGSEONG U-YE -118D ; [.3DB6.0020.0002] # HANGUL JUNGSEONG U-U -118E ; [.3DB7.0020.0002] # HANGUL JUNGSEONG YU-A -118F ; [.3DB8.0020.0002] # HANGUL JUNGSEONG YU-EO -1190 ; [.3DB9.0020.0002] # HANGUL JUNGSEONG YU-E -1191 ; [.3DBA.0020.0002] # HANGUL JUNGSEONG YU-YEO -318A ; [.3DBA.0020.0004] # HANGUL LETTER YU-YEO -1192 ; [.3DBB.0020.0002] # HANGUL JUNGSEONG YU-YE -318B ; [.3DBB.0020.0004] # HANGUL LETTER YU-YE -1193 ; [.3DBC.0020.0002] # HANGUL JUNGSEONG YU-U -1194 ; [.3DBD.0020.0002] # HANGUL JUNGSEONG YU-I -318C ; [.3DBD.0020.0004] # HANGUL LETTER YU-I -1195 ; [.3DBE.0020.0002] # HANGUL JUNGSEONG EU-U -1196 ; [.3DBF.0020.0002] # HANGUL JUNGSEONG EU-EU -1197 ; [.3DC0.0020.0002] # HANGUL JUNGSEONG YI-U -1198 ; [.3DC1.0020.0002] # HANGUL JUNGSEONG I-A -1199 ; [.3DC2.0020.0002] # HANGUL JUNGSEONG I-YA -119A ; [.3DC3.0020.0002] # HANGUL JUNGSEONG I-O -119B ; [.3DC4.0020.0002] # HANGUL JUNGSEONG I-U -119C ; [.3DC5.0020.0002] # HANGUL JUNGSEONG I-EU -119D ; [.3DC6.0020.0002] # HANGUL JUNGSEONG I-ARAEA -119E ; [.3DC7.0020.0002] # HANGUL JUNGSEONG ARAEA -318D ; [.3DC7.0020.0004] # HANGUL LETTER ARAEA -119F ; [.3DC8.0020.0002] # HANGUL JUNGSEONG ARAEA-EO -11A0 ; [.3DC9.0020.0002] # HANGUL JUNGSEONG ARAEA-U -11A1 ; [.3DCA.0020.0002] # HANGUL JUNGSEONG ARAEA-I -318E ; [.3DCA.0020.0004] # HANGUL LETTER ARAEAE -11A2 ; [.3DCB.0020.0002] # HANGUL JUNGSEONG SSANGARAEA -11A3 ; [.3DCC.0020.0002] # HANGUL JUNGSEONG A-EU -11A4 ; [.3DCD.0020.0002] # HANGUL JUNGSEONG YA-U -11A5 ; [.3DCE.0020.0002] # HANGUL JUNGSEONG YEO-YA -11A6 ; [.3DCF.0020.0002] # HANGUL JUNGSEONG O-YA -11A7 ; [.3DD0.0020.0002] # HANGUL JUNGSEONG O-YAE -D7B0 ; [.3DD1.0020.0002] # HANGUL JUNGSEONG O-YEO -D7B1 ; [.3DD2.0020.0002] # HANGUL JUNGSEONG O-O-I -D7B2 ; [.3DD3.0020.0002] # HANGUL JUNGSEONG YO-A -D7B3 ; [.3DD4.0020.0002] # HANGUL JUNGSEONG YO-AE -D7B4 ; [.3DD5.0020.0002] # HANGUL JUNGSEONG YO-EO -D7B5 ; [.3DD6.0020.0002] # HANGUL JUNGSEONG U-YEO -D7B6 ; [.3DD7.0020.0002] # HANGUL JUNGSEONG U-I-I -D7B7 ; [.3DD8.0020.0002] # HANGUL JUNGSEONG YU-AE -D7B8 ; [.3DD9.0020.0002] # HANGUL JUNGSEONG YU-O -D7B9 ; [.3DDA.0020.0002] # HANGUL JUNGSEONG EU-A -D7BA ; [.3DDB.0020.0002] # HANGUL JUNGSEONG EU-EO -D7BB ; [.3DDC.0020.0002] # HANGUL JUNGSEONG EU-E -D7BC ; [.3DDD.0020.0002] # HANGUL JUNGSEONG EU-O -D7BD ; [.3DDE.0020.0002] # HANGUL JUNGSEONG I-YA-O -D7BE ; [.3DDF.0020.0002] # HANGUL JUNGSEONG I-YAE -D7BF ; [.3DE0.0020.0002] # HANGUL JUNGSEONG I-YEO -D7C0 ; [.3DE1.0020.0002] # HANGUL JUNGSEONG I-YE -D7C1 ; [.3DE2.0020.0002] # HANGUL JUNGSEONG I-O-I -D7C2 ; [.3DE3.0020.0002] # HANGUL JUNGSEONG I-YO -D7C3 ; [.3DE4.0020.0002] # HANGUL JUNGSEONG I-YU -D7C4 ; [.3DE5.0020.0002] # HANGUL JUNGSEONG I-I -D7C5 ; [.3DE6.0020.0002] # HANGUL JUNGSEONG ARAEA-A -D7C6 ; [.3DE7.0020.0002] # HANGUL JUNGSEONG ARAEA-E -11A8 ; [.3DE8.0020.0002] # HANGUL JONGSEONG KIYEOK -11A9 ; [.3DE9.0020.0002] # HANGUL JONGSEONG SSANGKIYEOK -11AA ; [.3DEA.0020.0002] # HANGUL JONGSEONG KIYEOK-SIOS -3133 ; [.3DEA.0020.0004] # HANGUL LETTER KIYEOK-SIOS -FFA3 ; [.3DEA.0020.0012] # HALFWIDTH HANGUL LETTER KIYEOK-SIOS -11AB ; [.3DEB.0020.0002] # HANGUL JONGSEONG NIEUN -11AC ; [.3DEC.0020.0002] # HANGUL JONGSEONG NIEUN-CIEUC -3135 ; [.3DEC.0020.0004] # HANGUL LETTER NIEUN-CIEUC -FFA5 ; [.3DEC.0020.0012] # HALFWIDTH HANGUL LETTER NIEUN-CIEUC -11AD ; [.3DED.0020.0002] # HANGUL JONGSEONG NIEUN-HIEUH -3136 ; [.3DED.0020.0004] # HANGUL LETTER NIEUN-HIEUH -FFA6 ; [.3DED.0020.0012] # HALFWIDTH HANGUL LETTER NIEUN-HIEUH -11AE ; [.3DEE.0020.0002] # HANGUL JONGSEONG TIKEUT -11AF ; [.3DEF.0020.0002] # HANGUL JONGSEONG RIEUL -11B0 ; [.3DF0.0020.0002] # HANGUL JONGSEONG RIEUL-KIYEOK -313A ; [.3DF0.0020.0004] # HANGUL LETTER RIEUL-KIYEOK -FFAA ; [.3DF0.0020.0012] # HALFWIDTH HANGUL LETTER RIEUL-KIYEOK -11B1 ; [.3DF1.0020.0002] # HANGUL JONGSEONG RIEUL-MIEUM -313B ; [.3DF1.0020.0004] # HANGUL LETTER RIEUL-MIEUM -FFAB ; [.3DF1.0020.0012] # HALFWIDTH HANGUL LETTER RIEUL-MIEUM -11B2 ; [.3DF2.0020.0002] # HANGUL JONGSEONG RIEUL-PIEUP -313C ; [.3DF2.0020.0004] # HANGUL LETTER RIEUL-PIEUP -FFAC ; [.3DF2.0020.0012] # HALFWIDTH HANGUL LETTER RIEUL-PIEUP -11B3 ; [.3DF3.0020.0002] # HANGUL JONGSEONG RIEUL-SIOS -313D ; [.3DF3.0020.0004] # HANGUL LETTER RIEUL-SIOS -FFAD ; [.3DF3.0020.0012] # HALFWIDTH HANGUL LETTER RIEUL-SIOS -11B4 ; [.3DF4.0020.0002] # HANGUL JONGSEONG RIEUL-THIEUTH -313E ; [.3DF4.0020.0004] # HANGUL LETTER RIEUL-THIEUTH -FFAE ; [.3DF4.0020.0012] # HALFWIDTH HANGUL LETTER RIEUL-THIEUTH -11B5 ; [.3DF5.0020.0002] # HANGUL JONGSEONG RIEUL-PHIEUPH -313F ; [.3DF5.0020.0004] # HANGUL LETTER RIEUL-PHIEUPH -FFAF ; [.3DF5.0020.0012] # HALFWIDTH HANGUL LETTER RIEUL-PHIEUPH -11B6 ; [.3DF6.0020.0002] # HANGUL JONGSEONG RIEUL-HIEUH -11B7 ; [.3DF7.0020.0002] # HANGUL JONGSEONG MIEUM -11B8 ; [.3DF8.0020.0002] # HANGUL JONGSEONG PIEUP -11B9 ; [.3DF9.0020.0002] # HANGUL JONGSEONG PIEUP-SIOS -11BA ; [.3DFA.0020.0002] # HANGUL JONGSEONG SIOS -11BB ; [.3DFB.0020.0002] # HANGUL JONGSEONG SSANGSIOS -11BC ; [.3DFC.0020.0002] # HANGUL JONGSEONG IEUNG -11BD ; [.3DFD.0020.0002] # HANGUL JONGSEONG CIEUC -11BE ; [.3DFE.0020.0002] # HANGUL JONGSEONG CHIEUCH -11BF ; [.3DFF.0020.0002] # HANGUL JONGSEONG KHIEUKH -11C0 ; [.3E00.0020.0002] # HANGUL JONGSEONG THIEUTH -11C1 ; [.3E01.0020.0002] # HANGUL JONGSEONG PHIEUPH -11C2 ; [.3E02.0020.0002] # HANGUL JONGSEONG HIEUH -11C3 ; [.3E03.0020.0002] # HANGUL JONGSEONG KIYEOK-RIEUL -11C4 ; [.3E04.0020.0002] # HANGUL JONGSEONG KIYEOK-SIOS-KIYEOK -11C5 ; [.3E05.0020.0002] # HANGUL JONGSEONG NIEUN-KIYEOK -11C6 ; [.3E06.0020.0002] # HANGUL JONGSEONG NIEUN-TIKEUT -11C7 ; [.3E07.0020.0002] # HANGUL JONGSEONG NIEUN-SIOS -3167 ; [.3E07.0020.0004] # HANGUL LETTER NIEUN-SIOS -11C8 ; [.3E08.0020.0002] # HANGUL JONGSEONG NIEUN-PANSIOS -3168 ; [.3E08.0020.0004] # HANGUL LETTER NIEUN-PANSIOS -11C9 ; [.3E09.0020.0002] # HANGUL JONGSEONG NIEUN-THIEUTH -11CA ; [.3E0A.0020.0002] # HANGUL JONGSEONG TIKEUT-KIYEOK -11CB ; [.3E0B.0020.0002] # HANGUL JONGSEONG TIKEUT-RIEUL -11CC ; [.3E0C.0020.0002] # HANGUL JONGSEONG RIEUL-KIYEOK-SIOS -3169 ; [.3E0C.0020.0004] # HANGUL LETTER RIEUL-KIYEOK-SIOS -11CD ; [.3E0D.0020.0002] # HANGUL JONGSEONG RIEUL-NIEUN -11CE ; [.3E0E.0020.0002] # HANGUL JONGSEONG RIEUL-TIKEUT -316A ; [.3E0E.0020.0004] # HANGUL LETTER RIEUL-TIKEUT -11CF ; [.3E0F.0020.0002] # HANGUL JONGSEONG RIEUL-TIKEUT-HIEUH -11D0 ; [.3E10.0020.0002] # HANGUL JONGSEONG SSANGRIEUL -11D1 ; [.3E11.0020.0002] # HANGUL JONGSEONG RIEUL-MIEUM-KIYEOK -11D2 ; [.3E12.0020.0002] # HANGUL JONGSEONG RIEUL-MIEUM-SIOS -11D3 ; [.3E13.0020.0002] # HANGUL JONGSEONG RIEUL-PIEUP-SIOS -316B ; [.3E13.0020.0004] # HANGUL LETTER RIEUL-PIEUP-SIOS -11D4 ; [.3E14.0020.0002] # HANGUL JONGSEONG RIEUL-PIEUP-HIEUH -11D5 ; [.3E15.0020.0002] # HANGUL JONGSEONG RIEUL-KAPYEOUNPIEUP -11D6 ; [.3E16.0020.0002] # HANGUL JONGSEONG RIEUL-SSANGSIOS -11D7 ; [.3E17.0020.0002] # HANGUL JONGSEONG RIEUL-PANSIOS -316C ; [.3E17.0020.0004] # HANGUL LETTER RIEUL-PANSIOS -11D8 ; [.3E18.0020.0002] # HANGUL JONGSEONG RIEUL-KHIEUKH -11D9 ; [.3E19.0020.0002] # HANGUL JONGSEONG RIEUL-YEORINHIEUH -316D ; [.3E19.0020.0004] # HANGUL LETTER RIEUL-YEORINHIEUH -11DA ; [.3E1A.0020.0002] # HANGUL JONGSEONG MIEUM-KIYEOK -11DB ; [.3E1B.0020.0002] # HANGUL JONGSEONG MIEUM-RIEUL -11DC ; [.3E1C.0020.0002] # HANGUL JONGSEONG MIEUM-PIEUP -11DD ; [.3E1D.0020.0002] # HANGUL JONGSEONG MIEUM-SIOS -316F ; [.3E1D.0020.0004] # HANGUL LETTER MIEUM-SIOS -11DE ; [.3E1E.0020.0002] # HANGUL JONGSEONG MIEUM-SSANGSIOS -11DF ; [.3E1F.0020.0002] # HANGUL JONGSEONG MIEUM-PANSIOS -3170 ; [.3E1F.0020.0004] # HANGUL LETTER MIEUM-PANSIOS -11E0 ; [.3E20.0020.0002] # HANGUL JONGSEONG MIEUM-CHIEUCH -11E1 ; [.3E21.0020.0002] # HANGUL JONGSEONG MIEUM-HIEUH -11E2 ; [.3E22.0020.0002] # HANGUL JONGSEONG KAPYEOUNMIEUM -11E3 ; [.3E23.0020.0002] # HANGUL JONGSEONG PIEUP-RIEUL -11E4 ; [.3E24.0020.0002] # HANGUL JONGSEONG PIEUP-PHIEUPH -11E5 ; [.3E25.0020.0002] # HANGUL JONGSEONG PIEUP-HIEUH -11E6 ; [.3E26.0020.0002] # HANGUL JONGSEONG KAPYEOUNPIEUP -11E7 ; [.3E27.0020.0002] # HANGUL JONGSEONG SIOS-KIYEOK -11E8 ; [.3E28.0020.0002] # HANGUL JONGSEONG SIOS-TIKEUT -11E9 ; [.3E29.0020.0002] # HANGUL JONGSEONG SIOS-RIEUL -11EA ; [.3E2A.0020.0002] # HANGUL JONGSEONG SIOS-PIEUP -11EB ; [.3E2B.0020.0002] # HANGUL JONGSEONG PANSIOS -11EC ; [.3E2C.0020.0002] # HANGUL JONGSEONG IEUNG-KIYEOK -11ED ; [.3E2D.0020.0002] # HANGUL JONGSEONG IEUNG-SSANGKIYEOK -11EE ; [.3E2E.0020.0002] # HANGUL JONGSEONG SSANGIEUNG -11EF ; [.3E2F.0020.0002] # HANGUL JONGSEONG IEUNG-KHIEUKH -11F0 ; [.3E30.0020.0002] # HANGUL JONGSEONG YESIEUNG -11F1 ; [.3E31.0020.0002] # HANGUL JONGSEONG YESIEUNG-SIOS -3182 ; [.3E31.0020.0004] # HANGUL LETTER YESIEUNG-SIOS -11F2 ; [.3E32.0020.0002] # HANGUL JONGSEONG YESIEUNG-PANSIOS -3183 ; [.3E32.0020.0004] # HANGUL LETTER YESIEUNG-PANSIOS -11F3 ; [.3E33.0020.0002] # HANGUL JONGSEONG PHIEUPH-PIEUP -11F4 ; [.3E34.0020.0002] # HANGUL JONGSEONG KAPYEOUNPHIEUPH -11F5 ; [.3E35.0020.0002] # HANGUL JONGSEONG HIEUH-NIEUN -11F6 ; [.3E36.0020.0002] # HANGUL JONGSEONG HIEUH-RIEUL -11F7 ; [.3E37.0020.0002] # HANGUL JONGSEONG HIEUH-MIEUM -11F8 ; [.3E38.0020.0002] # HANGUL JONGSEONG HIEUH-PIEUP -11F9 ; [.3E39.0020.0002] # HANGUL JONGSEONG YEORINHIEUH -11FA ; [.3E3A.0020.0002] # HANGUL JONGSEONG KIYEOK-NIEUN -11FB ; [.3E3B.0020.0002] # HANGUL JONGSEONG KIYEOK-PIEUP -11FC ; [.3E3C.0020.0002] # HANGUL JONGSEONG KIYEOK-CHIEUCH -11FD ; [.3E3D.0020.0002] # HANGUL JONGSEONG KIYEOK-KHIEUKH -11FE ; [.3E3E.0020.0002] # HANGUL JONGSEONG KIYEOK-HIEUH -11FF ; [.3E3F.0020.0002] # HANGUL JONGSEONG SSANGNIEUN -D7CB ; [.3E40.0020.0002] # HANGUL JONGSEONG NIEUN-RIEUL -D7CC ; [.3E41.0020.0002] # HANGUL JONGSEONG NIEUN-CHIEUCH -D7CD ; [.3E42.0020.0002] # HANGUL JONGSEONG SSANGTIKEUT -D7CE ; [.3E43.0020.0002] # HANGUL JONGSEONG SSANGTIKEUT-PIEUP -D7CF ; [.3E44.0020.0002] # HANGUL JONGSEONG TIKEUT-PIEUP -D7D0 ; [.3E45.0020.0002] # HANGUL JONGSEONG TIKEUT-SIOS -D7D1 ; [.3E46.0020.0002] # HANGUL JONGSEONG TIKEUT-SIOS-KIYEOK -D7D2 ; [.3E47.0020.0002] # HANGUL JONGSEONG TIKEUT-CIEUC -D7D3 ; [.3E48.0020.0002] # HANGUL JONGSEONG TIKEUT-CHIEUCH -D7D4 ; [.3E49.0020.0002] # HANGUL JONGSEONG TIKEUT-THIEUTH -D7D5 ; [.3E4A.0020.0002] # HANGUL JONGSEONG RIEUL-SSANGKIYEOK -D7D6 ; [.3E4B.0020.0002] # HANGUL JONGSEONG RIEUL-KIYEOK-HIEUH -D7D7 ; [.3E4C.0020.0002] # HANGUL JONGSEONG SSANGRIEUL-KHIEUKH -D7D8 ; [.3E4D.0020.0002] # HANGUL JONGSEONG RIEUL-MIEUM-HIEUH -D7D9 ; [.3E4E.0020.0002] # HANGUL JONGSEONG RIEUL-PIEUP-TIKEUT -D7DA ; [.3E4F.0020.0002] # HANGUL JONGSEONG RIEUL-PIEUP-PHIEUPH -D7DB ; [.3E50.0020.0002] # HANGUL JONGSEONG RIEUL-YESIEUNG -D7DC ; [.3E51.0020.0002] # HANGUL JONGSEONG RIEUL-YEORINHIEUH-HIEUH -D7DD ; [.3E52.0020.0002] # HANGUL JONGSEONG KAPYEOUNRIEUL -D7DE ; [.3E53.0020.0002] # HANGUL JONGSEONG MIEUM-NIEUN -D7DF ; [.3E54.0020.0002] # HANGUL JONGSEONG MIEUM-SSANGNIEUN -D7E0 ; [.3E55.0020.0002] # HANGUL JONGSEONG SSANGMIEUM -D7E1 ; [.3E56.0020.0002] # HANGUL JONGSEONG MIEUM-PIEUP-SIOS -D7E2 ; [.3E57.0020.0002] # HANGUL JONGSEONG MIEUM-CIEUC -D7E3 ; [.3E58.0020.0002] # HANGUL JONGSEONG PIEUP-TIKEUT -D7E4 ; [.3E59.0020.0002] # HANGUL JONGSEONG PIEUP-RIEUL-PHIEUPH -D7E5 ; [.3E5A.0020.0002] # HANGUL JONGSEONG PIEUP-MIEUM -D7E6 ; [.3E5B.0020.0002] # HANGUL JONGSEONG SSANGPIEUP -D7E7 ; [.3E5C.0020.0002] # HANGUL JONGSEONG PIEUP-SIOS-TIKEUT -D7E8 ; [.3E5D.0020.0002] # HANGUL JONGSEONG PIEUP-CIEUC -D7E9 ; [.3E5E.0020.0002] # HANGUL JONGSEONG PIEUP-CHIEUCH -D7EA ; [.3E5F.0020.0002] # HANGUL JONGSEONG SIOS-MIEUM -D7EB ; [.3E60.0020.0002] # HANGUL JONGSEONG SIOS-KAPYEOUNPIEUP -D7EC ; [.3E61.0020.0002] # HANGUL JONGSEONG SSANGSIOS-KIYEOK -D7ED ; [.3E62.0020.0002] # HANGUL JONGSEONG SSANGSIOS-TIKEUT -D7EE ; [.3E63.0020.0002] # HANGUL JONGSEONG SIOS-PANSIOS -D7EF ; [.3E64.0020.0002] # HANGUL JONGSEONG SIOS-CIEUC -D7F0 ; [.3E65.0020.0002] # HANGUL JONGSEONG SIOS-CHIEUCH -D7F1 ; [.3E66.0020.0002] # HANGUL JONGSEONG SIOS-THIEUTH -D7F2 ; [.3E67.0020.0002] # HANGUL JONGSEONG SIOS-HIEUH -D7F3 ; [.3E68.0020.0002] # HANGUL JONGSEONG PANSIOS-PIEUP -D7F4 ; [.3E69.0020.0002] # HANGUL JONGSEONG PANSIOS-KAPYEOUNPIEUP -D7F5 ; [.3E6A.0020.0002] # HANGUL JONGSEONG YESIEUNG-MIEUM -D7F6 ; [.3E6B.0020.0002] # HANGUL JONGSEONG YESIEUNG-HIEUH -D7F7 ; [.3E6C.0020.0002] # HANGUL JONGSEONG CIEUC-PIEUP -D7F8 ; [.3E6D.0020.0002] # HANGUL JONGSEONG CIEUC-SSANGPIEUP -D7F9 ; [.3E6E.0020.0002] # HANGUL JONGSEONG SSANGCIEUC -D7FA ; [.3E6F.0020.0002] # HANGUL JONGSEONG PHIEUPH-SIOS -D7FB ; [.3E70.0020.0002] # HANGUL JONGSEONG PHIEUPH-THIEUTH -3041 ; [.3E71.0020.000D] # HIRAGANA LETTER SMALL A -3042 ; [.3E71.0020.000E] # HIRAGANA LETTER A -30A1 ; [.3E71.0020.000F] # KATAKANA LETTER SMALL A -FF67 ; [.3E71.0020.0010] # HALFWIDTH KATAKANA LETTER SMALL A -30A2 ; [.3E71.0020.0011] # KATAKANA LETTER A -FF71 ; [.3E71.0020.0012] # HALFWIDTH KATAKANA LETTER A -32D0 ; [.3E71.0020.0013] # CIRCLED KATAKANA A -3303 ; [.3E71.0020.001C][.1C73.0020.001C][.3E9A.0020.001C] # SQUARE AARU -3300 ; [.3E71.0020.001C][.3E8B.0020.001C][.0000.0038.001C][.1C73.0020.001C][.3E85.0020.001C] # SQUARE APAATO -3301 ; [.3E71.0020.001C][.3E9A.0020.001C][.3E8D.0020.001C][.3E71.0020.001C] # SQUARE ARUHUA -3302 ; [.3E71.0020.001C][.3EA1.0020.001C][.3E8E.0020.001C][.0000.0038.001C][.3E71.0020.001C] # SQUARE ANPEA -3043 ; [.3E72.0020.000D] # HIRAGANA LETTER SMALL I -3044 ; [.3E72.0020.000E] # HIRAGANA LETTER I -30A3 ; [.3E72.0020.000F] # KATAKANA LETTER SMALL I -FF68 ; [.3E72.0020.0010] # HALFWIDTH KATAKANA LETTER SMALL I -30A4 ; [.3E72.0020.0011] # KATAKANA LETTER I -FF72 ; [.3E72.0020.0012] # HALFWIDTH KATAKANA LETTER I -32D1 ; [.3E72.0020.0013] # CIRCLED KATAKANA I -3304 ; [.3E72.0020.001C][.3E87.0020.001C][.3EA1.0020.001C][.3E79.0020.001C][.0000.0037.001C] # SQUARE ININGU -3305 ; [.3E72.0020.001C][.3EA1.0020.001C][.3E82.0020.001C] # SQUARE INTI -3045 ; [.3E73.0020.000D] # HIRAGANA LETTER SMALL U -3046 ; [.3E73.0020.000E] # HIRAGANA LETTER U -30A5 ; [.3E73.0020.000F] # KATAKANA LETTER SMALL U -FF69 ; [.3E73.0020.0010] # HALFWIDTH KATAKANA LETTER SMALL U -30A6 ; [.3E73.0020.0011] # KATAKANA LETTER U -FF73 ; [.3E73.0020.0012] # HALFWIDTH KATAKANA LETTER U -32D2 ; [.3E73.0020.0013] # CIRCLED KATAKANA U -3094 ; [.3E73.0020.000E][.0000.0037.0002] # HIRAGANA LETTER VU -30F4 ; [.3E73.0020.0011][.0000.0037.0002] # KATAKANA LETTER VU -3306 ; [.3E73.0020.001C][.3E76.0020.001C][.3EA1.0020.001C] # SQUARE UON -1B000 ; [.3E74.0020.0011] # KATAKANA LETTER ARCHAIC E -3047 ; [.3E75.0020.000D] # HIRAGANA LETTER SMALL E -3048 ; [.3E75.0020.000E] # HIRAGANA LETTER E -30A7 ; [.3E75.0020.000F] # KATAKANA LETTER SMALL E -FF6A ; [.3E75.0020.0010] # HALFWIDTH KATAKANA LETTER SMALL E -30A8 ; [.3E75.0020.0011] # KATAKANA LETTER E -FF74 ; [.3E75.0020.0012] # HALFWIDTH KATAKANA LETTER E -32D3 ; [.3E75.0020.0013] # CIRCLED KATAKANA E -3308 ; [.3E75.0020.001C][.1C73.0020.001C][.3E77.0020.001C][.1C73.0020.001C] # SQUARE EEKAA -3307 ; [.3E75.0020.001C][.3E7E.0020.001C][.3E79.0020.001C][.1C73.0020.001C][.3E85.0020.001C][.0000.0037.001C] # SQUARE ESUKUUDO -3049 ; [.3E76.0020.000D] # HIRAGANA LETTER SMALL O -304A ; [.3E76.0020.000E] # HIRAGANA LETTER O -30A9 ; [.3E76.0020.000F] # KATAKANA LETTER SMALL O -FF6B ; [.3E76.0020.0010] # HALFWIDTH KATAKANA LETTER SMALL O -30AA ; [.3E76.0020.0011] # KATAKANA LETTER O -FF75 ; [.3E76.0020.0012] # HALFWIDTH KATAKANA LETTER O -32D4 ; [.3E76.0020.0013] # CIRCLED KATAKANA O -330A ; [.3E76.0020.001C][.1C73.0020.001C][.3E92.0020.001C] # SQUARE OOMU -3309 ; [.3E76.0020.001C][.3EA1.0020.001C][.3E7E.0020.001C] # SQUARE ONSU -3095 ; [.3E77.0020.000D] # HIRAGANA LETTER SMALL KA -304B ; [.3E77.0020.000E] # HIRAGANA LETTER KA -30F5 ; [.3E77.0020.000F] # KATAKANA LETTER SMALL KA -30AB ; [.3E77.0020.0011] # KATAKANA LETTER KA -FF76 ; [.3E77.0020.0012] # HALFWIDTH KATAKANA LETTER KA -32D5 ; [.3E77.0020.0013] # CIRCLED KATAKANA KA -304C ; [.3E77.0020.000E][.0000.0037.0002] # HIRAGANA LETTER GA -30AC ; [.3E77.0020.0011][.0000.0037.0002] # KATAKANA LETTER GA -330B ; [.3E77.0020.001C][.3E72.0020.001C][.3E99.0020.001C] # SQUARE KAIRI -330C ; [.3E77.0020.001C][.3E98.0020.001C][.3E83.0020.001C][.3E85.0020.001C] # SQUARE KARATTO -330D ; [.3E77.0020.001C][.3E9C.0020.001C][.3E99.0020.001C][.1C73.0020.001C] # SQUARE KARORII -330E ; [.3E77.0020.001C][.0000.0037.001C][.3E9C.0020.001C][.3EA1.0020.001C] # SQUARE GARON -330F ; [.3E77.0020.001C][.0000.0037.001C][.3EA1.0020.001C][.3E90.0020.001C] # SQUARE GANMA -304D ; [.3E78.0020.000E] # HIRAGANA LETTER KI -30AD ; [.3E78.0020.0011] # KATAKANA LETTER KI -FF77 ; [.3E78.0020.0012] # HALFWIDTH KATAKANA LETTER KI -32D6 ; [.3E78.0020.0013] # CIRCLED KATAKANA KI -304E ; [.3E78.0020.000E][.0000.0037.0002] # HIRAGANA LETTER GI -30AE ; [.3E78.0020.0011][.0000.0037.0002] # KATAKANA LETTER GI -3310 ; [.3E78.0020.001C][.0000.0037.001C][.3E77.0020.001C][.0000.0037.001C] # SQUARE GIGA -3311 ; [.3E78.0020.001C][.0000.0037.001C][.3E87.0020.001C][.1C73.0020.001C] # SQUARE GINII -3312 ; [.3E78.0020.001C][.3E96.0020.001C][.3E99.0020.001C][.1C73.0020.001C] # SQUARE KYURII -3313 ; [.3E78.0020.001C][.0000.0037.001C][.3E9A.0020.001C][.3E81.0020.001C][.0000.0037.001C][.1C73.0020.001C] # SQUARE GIRUDAA -3314 ; [.3E78.0020.001C][.3E9C.0020.001C] # SQUARE KIRO -3315 ; [.3E78.0020.001C][.3E9C.0020.001C][.3E79.0020.001C][.0000.0037.001C][.3E98.0020.001C][.3E92.0020.001C] # SQUARE KIROGURAMU -3316 ; [.3E78.0020.001C][.3E9C.0020.001C][.3E93.0020.001C][.1C73.0020.001C][.3E85.0020.001C][.3E9A.0020.001C] # SQUARE KIROMEETORU -3317 ; [.3E78.0020.001C][.3E9C.0020.001C][.3E9D.0020.001C][.3E83.0020.001C][.3E85.0020.001C] # SQUARE KIROWATTO -304F ; [.3E79.0020.000E] # HIRAGANA LETTER KU -31F0 ; [.3E79.0020.000F] # KATAKANA LETTER SMALL KU -30AF ; [.3E79.0020.0011] # KATAKANA LETTER KU -FF78 ; [.3E79.0020.0012] # HALFWIDTH KATAKANA LETTER KU -32D7 ; [.3E79.0020.0013] # CIRCLED KATAKANA KU -3050 ; [.3E79.0020.000E][.0000.0037.0002] # HIRAGANA LETTER GU -30B0 ; [.3E79.0020.0011][.0000.0037.0002] # KATAKANA LETTER GU -3318 ; [.3E79.0020.001C][.0000.0037.001C][.3E98.0020.001C][.3E92.0020.001C] # SQUARE GURAMU -3319 ; [.3E79.0020.001C][.0000.0037.001C][.3E98.0020.001C][.3E92.0020.001C][.3E85.0020.001C][.3EA1.0020.001C] # SQUARE GURAMUTON -331A ; [.3E79.0020.001C][.3E9A.0020.001C][.3E7F.0020.001C][.0000.0037.001C][.3E72.0020.001C][.3E9C.0020.001C] # SQUARE KURUZEIRO -331B ; [.3E79.0020.001C][.3E9C.0020.001C][.1C73.0020.001C][.3E89.0020.001C] # SQUARE KUROONE -3096 ; [.3E7A.0020.000D] # HIRAGANA LETTER SMALL KE -3051 ; [.3E7A.0020.000E] # HIRAGANA LETTER KE -30F6 ; [.3E7A.0020.000F] # KATAKANA LETTER SMALL KE -30B1 ; [.3E7A.0020.0011] # KATAKANA LETTER KE -FF79 ; [.3E7A.0020.0012] # HALFWIDTH KATAKANA LETTER KE -32D8 ; [.3E7A.0020.0013] # CIRCLED KATAKANA KE -3052 ; [.3E7A.0020.000E][.0000.0037.0002] # HIRAGANA LETTER GE -30B2 ; [.3E7A.0020.0011][.0000.0037.0002] # KATAKANA LETTER GE -331C ; [.3E7A.0020.001C][.1C73.0020.001C][.3E7E.0020.001C] # SQUARE KEESU -3053 ; [.3E7B.0020.000E] # HIRAGANA LETTER KO -30B3 ; [.3E7B.0020.0011] # KATAKANA LETTER KO -FF7A ; [.3E7B.0020.0012] # HALFWIDTH KATAKANA LETTER KO -32D9 ; [.3E7B.0020.0013] # CIRCLED KATAKANA KO -3054 ; [.3E7B.0020.000E][.0000.0037.0002] # HIRAGANA LETTER GO -30B4 ; [.3E7B.0020.0011][.0000.0037.0002] # KATAKANA LETTER GO -331E ; [.3E7B.0020.001C][.1C73.0020.001C][.3E8F.0020.001C][.0000.0038.001C] # SQUARE KOOPO -1F201 ; [.3E7B.0020.001C][.3E7B.0020.001C] # SQUARED KATAKANA KOKO -30FF ; [.3E7B.0020.0016][.3E85.0020.0016] # KATAKANA DIGRAPH KOTO -331D ; [.3E7B.0020.001C][.3E9A.0020.001C][.3E86.0020.001C] # SQUARE KORUNA -3055 ; [.3E7C.0020.000E] # HIRAGANA LETTER SA -30B5 ; [.3E7C.0020.0011] # KATAKANA LETTER SA -FF7B ; [.3E7C.0020.0012] # HALFWIDTH KATAKANA LETTER SA -32DA ; [.3E7C.0020.0013] # CIRCLED KATAKANA SA -1F202 ; [.3E7C.0020.001C] # SQUARED KATAKANA SA -3056 ; [.3E7C.0020.000E][.0000.0037.0002] # HIRAGANA LETTER ZA -30B6 ; [.3E7C.0020.0011][.0000.0037.0002] # KATAKANA LETTER ZA -331F ; [.3E7C.0020.001C][.3E72.0020.001C][.3E79.0020.001C][.3E9A.0020.001C] # SQUARE SAIKURU -3320 ; [.3E7C.0020.001C][.3EA1.0020.001C][.3E82.0020.001C][.1C73.0020.001C][.3E92.0020.001C] # SQUARE SANTIIMU -3057 ; [.3E7D.0020.000E] # HIRAGANA LETTER SI -31F1 ; [.3E7D.0020.000F] # KATAKANA LETTER SMALL SI -30B7 ; [.3E7D.0020.0011] # KATAKANA LETTER SI -FF7C ; [.3E7D.0020.0012] # HALFWIDTH KATAKANA LETTER SI -32DB ; [.3E7D.0020.0013] # CIRCLED KATAKANA SI -3058 ; [.3E7D.0020.000E][.0000.0037.0002] # HIRAGANA LETTER ZI -30B8 ; [.3E7D.0020.0011][.0000.0037.0002] # KATAKANA LETTER ZI -3006 ; [.3E7D.0020.0004][.3E93.0020.0004] # IDEOGRAPHIC CLOSING MARK -3321 ; [.3E7D.0020.001C][.3E99.0020.001C][.3EA1.0020.001C][.3E79.0020.001C][.0000.0037.001C] # SQUARE SIRINGU -3059 ; [.3E7E.0020.000E] # HIRAGANA LETTER SU -31F2 ; [.3E7E.0020.000F] # KATAKANA LETTER SMALL SU -30B9 ; [.3E7E.0020.0011] # KATAKANA LETTER SU -FF7D ; [.3E7E.0020.0012] # HALFWIDTH KATAKANA LETTER SU -32DC ; [.3E7E.0020.0013] # CIRCLED KATAKANA SU -305A ; [.3E7E.0020.000E][.0000.0037.0002] # HIRAGANA LETTER ZU -30BA ; [.3E7E.0020.0011][.0000.0037.0002] # KATAKANA LETTER ZU -305B ; [.3E7F.0020.000E] # HIRAGANA LETTER SE -30BB ; [.3E7F.0020.0011] # KATAKANA LETTER SE -FF7E ; [.3E7F.0020.0012] # HALFWIDTH KATAKANA LETTER SE -32DD ; [.3E7F.0020.0013] # CIRCLED KATAKANA SE -305C ; [.3E7F.0020.000E][.0000.0037.0002] # HIRAGANA LETTER ZE -30BC ; [.3E7F.0020.0011][.0000.0037.0002] # KATAKANA LETTER ZE -3322 ; [.3E7F.0020.001C][.3EA1.0020.001C][.3E82.0020.001C] # SQUARE SENTI -3323 ; [.3E7F.0020.001C][.3EA1.0020.001C][.3E85.0020.001C] # SQUARE SENTO -305D ; [.3E80.0020.000E] # HIRAGANA LETTER SO -30BD ; [.3E80.0020.0011] # KATAKANA LETTER SO -FF7F ; [.3E80.0020.0012] # HALFWIDTH KATAKANA LETTER SO -32DE ; [.3E80.0020.0013] # CIRCLED KATAKANA SO -305E ; [.3E80.0020.000E][.0000.0037.0002] # HIRAGANA LETTER ZO -30BE ; [.3E80.0020.0011][.0000.0037.0002] # KATAKANA LETTER ZO -305F ; [.3E81.0020.000E] # HIRAGANA LETTER TA -30BF ; [.3E81.0020.0011] # KATAKANA LETTER TA -FF80 ; [.3E81.0020.0012] # HALFWIDTH KATAKANA LETTER TA -32DF ; [.3E81.0020.0013] # CIRCLED KATAKANA TA -3060 ; [.3E81.0020.000E][.0000.0037.0002] # HIRAGANA LETTER DA -30C0 ; [.3E81.0020.0011][.0000.0037.0002] # KATAKANA LETTER DA -3324 ; [.3E81.0020.001C][.0000.0037.001C][.1C73.0020.001C][.3E7E.0020.001C] # SQUARE DAASU -3061 ; [.3E82.0020.000E] # HIRAGANA LETTER TI -30C1 ; [.3E82.0020.0011] # KATAKANA LETTER TI -FF81 ; [.3E82.0020.0012] # HALFWIDTH KATAKANA LETTER TI -32E0 ; [.3E82.0020.0013] # CIRCLED KATAKANA TI -3062 ; [.3E82.0020.000E][.0000.0037.0002] # HIRAGANA LETTER DI -30C2 ; [.3E82.0020.0011][.0000.0037.0002] # KATAKANA LETTER DI -3063 ; [.3E83.0020.000D] # HIRAGANA LETTER SMALL TU -3064 ; [.3E83.0020.000E] # HIRAGANA LETTER TU -30C3 ; [.3E83.0020.000F] # KATAKANA LETTER SMALL TU -FF6F ; [.3E83.0020.0010] # HALFWIDTH KATAKANA LETTER SMALL TU -30C4 ; [.3E83.0020.0011] # KATAKANA LETTER TU -FF82 ; [.3E83.0020.0012] # HALFWIDTH KATAKANA LETTER TU -32E1 ; [.3E83.0020.0013] # CIRCLED KATAKANA TU -3065 ; [.3E83.0020.000E][.0000.0037.0002] # HIRAGANA LETTER DU -30C5 ; [.3E83.0020.0011][.0000.0037.0002] # KATAKANA LETTER DU -3066 ; [.3E84.0020.000E] # HIRAGANA LETTER TE -30C6 ; [.3E84.0020.0011] # KATAKANA LETTER TE -FF83 ; [.3E84.0020.0012] # HALFWIDTH KATAKANA LETTER TE -32E2 ; [.3E84.0020.0013] # CIRCLED KATAKANA TE -3067 ; [.3E84.0020.000E][.0000.0037.0002] # HIRAGANA LETTER DE -30C7 ; [.3E84.0020.0011][.0000.0037.0002] # KATAKANA LETTER DE -1F213 ; [.3E84.0020.001C][.0000.0037.001C] # SQUARED KATAKANA DE -3325 ; [.3E84.0020.001C][.0000.0037.001C][.3E7D.0020.001C] # SQUARE DESI -3068 ; [.3E85.0020.000E] # HIRAGANA LETTER TO -31F3 ; [.3E85.0020.000F] # KATAKANA LETTER SMALL TO -30C8 ; [.3E85.0020.0011] # KATAKANA LETTER TO -FF84 ; [.3E85.0020.0012] # HALFWIDTH KATAKANA LETTER TO -32E3 ; [.3E85.0020.0013] # CIRCLED KATAKANA TO -3069 ; [.3E85.0020.000E][.0000.0037.0002] # HIRAGANA LETTER DO -30C9 ; [.3E85.0020.0011][.0000.0037.0002] # KATAKANA LETTER DO -3326 ; [.3E85.0020.001C][.0000.0037.001C][.3E9A.0020.001C] # SQUARE DORU -3327 ; [.3E85.0020.001C][.3EA1.0020.001C] # SQUARE TON -306A ; [.3E86.0020.000E] # HIRAGANA LETTER NA -30CA ; [.3E86.0020.0011] # KATAKANA LETTER NA -FF85 ; [.3E86.0020.0012] # HALFWIDTH KATAKANA LETTER NA -32E4 ; [.3E86.0020.0013] # CIRCLED KATAKANA NA -3328 ; [.3E86.0020.001C][.3E8A.0020.001C] # SQUARE NANO -306B ; [.3E87.0020.000E] # HIRAGANA LETTER NI -30CB ; [.3E87.0020.0011] # KATAKANA LETTER NI -FF86 ; [.3E87.0020.0012] # HALFWIDTH KATAKANA LETTER NI -32E5 ; [.3E87.0020.0013] # CIRCLED KATAKANA NI -306C ; [.3E88.0020.000E] # HIRAGANA LETTER NU -31F4 ; [.3E88.0020.000F] # KATAKANA LETTER SMALL NU -30CC ; [.3E88.0020.0011] # KATAKANA LETTER NU -FF87 ; [.3E88.0020.0012] # HALFWIDTH KATAKANA LETTER NU -32E6 ; [.3E88.0020.0013] # CIRCLED KATAKANA NU -306D ; [.3E89.0020.000E] # HIRAGANA LETTER NE -30CD ; [.3E89.0020.0011] # KATAKANA LETTER NE -FF88 ; [.3E89.0020.0012] # HALFWIDTH KATAKANA LETTER NE -32E7 ; [.3E89.0020.0013] # CIRCLED KATAKANA NE -306E ; [.3E8A.0020.000E] # HIRAGANA LETTER NO -30CE ; [.3E8A.0020.0011] # KATAKANA LETTER NO -FF89 ; [.3E8A.0020.0012] # HALFWIDTH KATAKANA LETTER NO -32E8 ; [.3E8A.0020.0013] # CIRCLED KATAKANA NO -3329 ; [.3E8A.0020.001C][.3E83.0020.001C][.3E85.0020.001C] # SQUARE NOTTO -306F ; [.3E8B.0020.000E] # HIRAGANA LETTER HA -31F5 ; [.3E8B.0020.000F] # KATAKANA LETTER SMALL HA -30CF ; [.3E8B.0020.0011] # KATAKANA LETTER HA -FF8A ; [.3E8B.0020.0012] # HALFWIDTH KATAKANA LETTER HA -32E9 ; [.3E8B.0020.0013] # CIRCLED KATAKANA HA -3070 ; [.3E8B.0020.000E][.0000.0037.0002] # HIRAGANA LETTER BA -30D0 ; [.3E8B.0020.0011][.0000.0037.0002] # KATAKANA LETTER BA -3071 ; [.3E8B.0020.000E][.0000.0038.0002] # HIRAGANA LETTER PA -30D1 ; [.3E8B.0020.0011][.0000.0038.0002] # KATAKANA LETTER PA -332B ; [.3E8B.0020.001C][.0000.0038.001C][.1C73.0020.001C][.3E7F.0020.001C][.3EA1.0020.001C][.3E85.0020.001C] # SQUARE PAASENTO -332C ; [.3E8B.0020.001C][.0000.0038.001C][.1C73.0020.001C][.3E83.0020.001C] # SQUARE PAATU -332D ; [.3E8B.0020.001C][.0000.0037.001C][.1C73.0020.001C][.3E9B.0020.001C][.3E9A.0020.001C] # SQUARE BAARERU -332A ; [.3E8B.0020.001C][.3E72.0020.001C][.3E83.0020.001C] # SQUARE HAITU -3072 ; [.3E8C.0020.000E] # HIRAGANA LETTER HI -31F6 ; [.3E8C.0020.000F] # KATAKANA LETTER SMALL HI -30D2 ; [.3E8C.0020.0011] # KATAKANA LETTER HI -FF8B ; [.3E8C.0020.0012] # HALFWIDTH KATAKANA LETTER HI -32EA ; [.3E8C.0020.0013] # CIRCLED KATAKANA HI -3073 ; [.3E8C.0020.000E][.0000.0037.0002] # HIRAGANA LETTER BI -30D3 ; [.3E8C.0020.0011][.0000.0037.0002] # KATAKANA LETTER BI -3074 ; [.3E8C.0020.000E][.0000.0038.0002] # HIRAGANA LETTER PI -30D4 ; [.3E8C.0020.0011][.0000.0038.0002] # KATAKANA LETTER PI -332E ; [.3E8C.0020.001C][.0000.0038.001C][.3E71.0020.001C][.3E7E.0020.001C][.3E85.0020.001C][.3E9A.0020.001C] # SQUARE PIASUTORU -332F ; [.3E8C.0020.001C][.0000.0038.001C][.3E79.0020.001C][.3E9A.0020.001C] # SQUARE PIKURU -3330 ; [.3E8C.0020.001C][.0000.0038.001C][.3E7B.0020.001C] # SQUARE PIKO -3331 ; [.3E8C.0020.001C][.0000.0037.001C][.3E9A.0020.001C] # SQUARE BIRU -3075 ; [.3E8D.0020.000E] # HIRAGANA LETTER HU -31F7 ; [.3E8D.0020.000F] # KATAKANA LETTER SMALL HU -30D5 ; [.3E8D.0020.0011] # KATAKANA LETTER HU -FF8C ; [.3E8D.0020.0012] # HALFWIDTH KATAKANA LETTER HU -32EB ; [.3E8D.0020.0013] # CIRCLED KATAKANA HU -3076 ; [.3E8D.0020.000E][.0000.0037.0002] # HIRAGANA LETTER BU -30D6 ; [.3E8D.0020.0011][.0000.0037.0002] # KATAKANA LETTER BU -3077 ; [.3E8D.0020.000E][.0000.0038.0002] # HIRAGANA LETTER PU -30D7 ; [.3E8D.0020.0011][.0000.0038.0002] # KATAKANA LETTER PU -3332 ; [.3E8D.0020.001C][.3E71.0020.001C][.3E98.0020.001C][.3E83.0020.001C][.3E85.0020.001C][.0000.0037.001C] # SQUARE HUARADDO -3333 ; [.3E8D.0020.001C][.3E72.0020.001C][.1C73.0020.001C][.3E85.0020.001C] # SQUARE HUIITO -3334 ; [.3E8D.0020.001C][.0000.0037.001C][.3E83.0020.001C][.3E7D.0020.001C][.3E75.0020.001C][.3E9A.0020.001C] # SQUARE BUSSYERU -3335 ; [.3E8D.0020.001C][.3E98.0020.001C][.3EA1.0020.001C] # SQUARE HURAN -3078 ; [.3E8E.0020.000E] # HIRAGANA LETTER HE -31F8 ; [.3E8E.0020.000F] # KATAKANA LETTER SMALL HE -30D8 ; [.3E8E.0020.0011] # KATAKANA LETTER HE -FF8D ; [.3E8E.0020.0012] # HALFWIDTH KATAKANA LETTER HE -32EC ; [.3E8E.0020.0013] # CIRCLED KATAKANA HE -3079 ; [.3E8E.0020.000E][.0000.0037.0002] # HIRAGANA LETTER BE -30D9 ; [.3E8E.0020.0011][.0000.0037.0002] # KATAKANA LETTER BE -307A ; [.3E8E.0020.000E][.0000.0038.0002] # HIRAGANA LETTER PE -30DA ; [.3E8E.0020.0011][.0000.0038.0002] # KATAKANA LETTER PE -333B ; [.3E8E.0020.001C][.0000.0038.001C][.1C73.0020.001C][.3E7D.0020.001C][.0000.0037.001C] # SQUARE PEEZI -333C ; [.3E8E.0020.001C][.0000.0037.001C][.1C73.0020.001C][.3E81.0020.001C] # SQUARE BEETA -3336 ; [.3E8E.0020.001C][.3E79.0020.001C][.3E81.0020.001C][.1C73.0020.001C][.3E9A.0020.001C] # SQUARE HEKUTAARU -3337 ; [.3E8E.0020.001C][.0000.0038.001C][.3E80.0020.001C] # SQUARE PESO -3338 ; [.3E8E.0020.001C][.0000.0038.001C][.3E87.0020.001C][.3E8C.0020.001C] # SQUARE PENIHI -3339 ; [.3E8E.0020.001C][.3E9A.0020.001C][.3E83.0020.001C] # SQUARE HERUTU -333A ; [.3E8E.0020.001C][.0000.0038.001C][.3EA1.0020.001C][.3E7E.0020.001C] # SQUARE PENSU -307B ; [.3E8F.0020.000E] # HIRAGANA LETTER HO -31F9 ; [.3E8F.0020.000F] # KATAKANA LETTER SMALL HO -30DB ; [.3E8F.0020.0011] # KATAKANA LETTER HO -FF8E ; [.3E8F.0020.0012] # HALFWIDTH KATAKANA LETTER HO -32ED ; [.3E8F.0020.0013] # CIRCLED KATAKANA HO -307C ; [.3E8F.0020.000E][.0000.0037.0002] # HIRAGANA LETTER BO -30DC ; [.3E8F.0020.0011][.0000.0037.0002] # KATAKANA LETTER BO -307D ; [.3E8F.0020.000E][.0000.0038.0002] # HIRAGANA LETTER PO -30DD ; [.3E8F.0020.0011][.0000.0038.0002] # KATAKANA LETTER PO -3341 ; [.3E8F.0020.001C][.1C73.0020.001C][.3E9A.0020.001C] # SQUARE HOORU -3342 ; [.3E8F.0020.001C][.1C73.0020.001C][.3EA1.0020.001C] # SQUARE HOON -333D ; [.3E8F.0020.001C][.0000.0038.001C][.3E72.0020.001C][.3EA1.0020.001C][.3E85.0020.001C] # SQUARE POINTO -1F200 ; [.3E8F.0020.001C][.3E77.0020.001C] # SQUARE HIRAGANA HOKA -333E ; [.3E8F.0020.001C][.0000.0037.001C][.3E9A.0020.001C][.3E85.0020.001C] # SQUARE BORUTO -333F ; [.3E8F.0020.001C][.3EA1.0020.001C] # SQUARE HON -3340 ; [.3E8F.0020.001C][.0000.0038.001C][.3EA1.0020.001C][.3E85.0020.001C][.0000.0037.001C] # SQUARE PONDO -307E ; [.3E90.0020.000E] # HIRAGANA LETTER MA -30DE ; [.3E90.0020.0011] # KATAKANA LETTER MA -FF8F ; [.3E90.0020.0012] # HALFWIDTH KATAKANA LETTER MA -32EE ; [.3E90.0020.0013] # CIRCLED KATAKANA MA -3343 ; [.3E90.0020.001C][.3E72.0020.001C][.3E79.0020.001C][.3E9C.0020.001C] # SQUARE MAIKURO -3344 ; [.3E90.0020.001C][.3E72.0020.001C][.3E9A.0020.001C] # SQUARE MAIRU -303C ; [.3E90.0020.0004][.3E7E.0020.0004] # MASU MARK -3345 ; [.3E90.0020.001C][.3E83.0020.001C][.3E8B.0020.001C] # SQUARE MAHHA -3346 ; [.3E90.0020.001C][.3E9A.0020.001C][.3E79.0020.001C] # SQUARE MARUKU -3347 ; [.3E90.0020.001C][.3EA1.0020.001C][.3E7D.0020.001C][.3E97.0020.001C][.3EA1.0020.001C] # SQUARE MANSYON -307F ; [.3E91.0020.000E] # HIRAGANA LETTER MI -30DF ; [.3E91.0020.0011] # KATAKANA LETTER MI -FF90 ; [.3E91.0020.0012] # HALFWIDTH KATAKANA LETTER MI -32EF ; [.3E91.0020.0013] # CIRCLED KATAKANA MI -3348 ; [.3E91.0020.001C][.3E79.0020.001C][.3E9C.0020.001C][.3EA1.0020.001C] # SQUARE MIKURON -3349 ; [.3E91.0020.001C][.3E99.0020.001C] # SQUARE MIRI -334A ; [.3E91.0020.001C][.3E99.0020.001C][.3E8B.0020.001C][.0000.0037.001C][.1C73.0020.001C][.3E9A.0020.001C] # SQUARE MIRIBAARU -3080 ; [.3E92.0020.000E] # HIRAGANA LETTER MU -31FA ; [.3E92.0020.000F] # KATAKANA LETTER SMALL MU -30E0 ; [.3E92.0020.0011] # KATAKANA LETTER MU -FF91 ; [.3E92.0020.0012] # HALFWIDTH KATAKANA LETTER MU -32F0 ; [.3E92.0020.0013] # CIRCLED KATAKANA MU -3081 ; [.3E93.0020.000E] # HIRAGANA LETTER ME -30E1 ; [.3E93.0020.0011] # KATAKANA LETTER ME -FF92 ; [.3E93.0020.0012] # HALFWIDTH KATAKANA LETTER ME -32F1 ; [.3E93.0020.0013] # CIRCLED KATAKANA ME -334D ; [.3E93.0020.001C][.1C73.0020.001C][.3E85.0020.001C][.3E9A.0020.001C] # SQUARE MEETORU -334B ; [.3E93.0020.001C][.3E77.0020.001C][.0000.0037.001C] # SQUARE MEGA -334C ; [.3E93.0020.001C][.3E77.0020.001C][.0000.0037.001C][.3E85.0020.001C][.3EA1.0020.001C] # SQUARE MEGATON -3082 ; [.3E94.0020.000E] # HIRAGANA LETTER MO -30E2 ; [.3E94.0020.0011] # KATAKANA LETTER MO -FF93 ; [.3E94.0020.0012] # HALFWIDTH KATAKANA LETTER MO -32F2 ; [.3E94.0020.0013] # CIRCLED KATAKANA MO -3083 ; [.3E95.0020.000D] # HIRAGANA LETTER SMALL YA -3084 ; [.3E95.0020.000E] # HIRAGANA LETTER YA -30E3 ; [.3E95.0020.000F] # KATAKANA LETTER SMALL YA -FF6C ; [.3E95.0020.0010] # HALFWIDTH KATAKANA LETTER SMALL YA -30E4 ; [.3E95.0020.0011] # KATAKANA LETTER YA -FF94 ; [.3E95.0020.0012] # HALFWIDTH KATAKANA LETTER YA -32F3 ; [.3E95.0020.0013] # CIRCLED KATAKANA YA -334E ; [.3E95.0020.001C][.1C73.0020.001C][.3E85.0020.001C][.0000.0037.001C] # SQUARE YAADO -334F ; [.3E95.0020.001C][.1C73.0020.001C][.3E9A.0020.001C] # SQUARE YAARU -3085 ; [.3E96.0020.000D] # HIRAGANA LETTER SMALL YU -3086 ; [.3E96.0020.000E] # HIRAGANA LETTER YU -30E5 ; [.3E96.0020.000F] # KATAKANA LETTER SMALL YU -FF6D ; [.3E96.0020.0010] # HALFWIDTH KATAKANA LETTER SMALL YU -30E6 ; [.3E96.0020.0011] # KATAKANA LETTER YU -FF95 ; [.3E96.0020.0012] # HALFWIDTH KATAKANA LETTER YU -32F4 ; [.3E96.0020.0013] # CIRCLED KATAKANA YU -3350 ; [.3E96.0020.001C][.3E71.0020.001C][.3EA1.0020.001C] # SQUARE YUAN -3087 ; [.3E97.0020.000D] # HIRAGANA LETTER SMALL YO -3088 ; [.3E97.0020.000E] # HIRAGANA LETTER YO -30E7 ; [.3E97.0020.000F] # KATAKANA LETTER SMALL YO -FF6E ; [.3E97.0020.0010] # HALFWIDTH KATAKANA LETTER SMALL YO -30E8 ; [.3E97.0020.0011] # KATAKANA LETTER YO -FF96 ; [.3E97.0020.0012] # HALFWIDTH KATAKANA LETTER YO -32F5 ; [.3E97.0020.0013] # CIRCLED KATAKANA YO -309F ; [.3E97.0020.0016][.3E99.0020.0016] # HIRAGANA DIGRAPH YORI -3089 ; [.3E98.0020.000E] # HIRAGANA LETTER RA -31FB ; [.3E98.0020.000F] # KATAKANA LETTER SMALL RA -30E9 ; [.3E98.0020.0011] # KATAKANA LETTER RA -FF97 ; [.3E98.0020.0012] # HALFWIDTH KATAKANA LETTER RA -32F6 ; [.3E98.0020.0013] # CIRCLED KATAKANA RA -308A ; [.3E99.0020.000E] # HIRAGANA LETTER RI -31FC ; [.3E99.0020.000F] # KATAKANA LETTER SMALL RI -30EA ; [.3E99.0020.0011] # KATAKANA LETTER RI -FF98 ; [.3E99.0020.0012] # HALFWIDTH KATAKANA LETTER RI -32F7 ; [.3E99.0020.0013] # CIRCLED KATAKANA RI -3351 ; [.3E99.0020.001C][.3E83.0020.001C][.3E85.0020.001C][.3E9A.0020.001C] # SQUARE RITTORU -3352 ; [.3E99.0020.001C][.3E98.0020.001C] # SQUARE RIRA -308B ; [.3E9A.0020.000E] # HIRAGANA LETTER RU -31FD ; [.3E9A.0020.000F] # KATAKANA LETTER SMALL RU -30EB ; [.3E9A.0020.0011] # KATAKANA LETTER RU -FF99 ; [.3E9A.0020.0012] # HALFWIDTH KATAKANA LETTER RU -32F8 ; [.3E9A.0020.0013] # CIRCLED KATAKANA RU -3354 ; [.3E9A.0020.001C][.1C73.0020.001C][.3E8D.0020.001C][.0000.0037.001C][.3E9A.0020.001C] # SQUARE RUUBURU -3353 ; [.3E9A.0020.001C][.3E8C.0020.001C][.0000.0038.001C][.1C73.0020.001C] # SQUARE RUPII -308C ; [.3E9B.0020.000E] # HIRAGANA LETTER RE -31FE ; [.3E9B.0020.000F] # KATAKANA LETTER SMALL RE -30EC ; [.3E9B.0020.0011] # KATAKANA LETTER RE -FF9A ; [.3E9B.0020.0012] # HALFWIDTH KATAKANA LETTER RE -32F9 ; [.3E9B.0020.0013] # CIRCLED KATAKANA RE -3355 ; [.3E9B.0020.001C][.3E92.0020.001C] # SQUARE REMU -3356 ; [.3E9B.0020.001C][.3EA1.0020.001C][.3E85.0020.001C][.3E7A.0020.001C][.0000.0037.001C][.3EA1.0020.001C] # SQUARE RENTOGEN -308D ; [.3E9C.0020.000E] # HIRAGANA LETTER RO -31FF ; [.3E9C.0020.000F] # KATAKANA LETTER SMALL RO -30ED ; [.3E9C.0020.0011] # KATAKANA LETTER RO -FF9B ; [.3E9C.0020.0012] # HALFWIDTH KATAKANA LETTER RO -32FA ; [.3E9C.0020.0013] # CIRCLED KATAKANA RO -308E ; [.3E9D.0020.000D] # HIRAGANA LETTER SMALL WA -308F ; [.3E9D.0020.000E] # HIRAGANA LETTER WA -30EE ; [.3E9D.0020.000F] # KATAKANA LETTER SMALL WA -30EF ; [.3E9D.0020.0011] # KATAKANA LETTER WA -FF9C ; [.3E9D.0020.0012] # HALFWIDTH KATAKANA LETTER WA -32FB ; [.3E9D.0020.0013] # CIRCLED KATAKANA WA -30F7 ; [.3E9D.0020.0011][.0000.0037.0002] # KATAKANA LETTER VA -3357 ; [.3E9D.0020.001C][.3E83.0020.001C][.3E85.0020.001C] # SQUARE WATTO -3090 ; [.3E9E.0020.000E] # HIRAGANA LETTER WI -30F0 ; [.3E9E.0020.0011] # KATAKANA LETTER WI -32FC ; [.3E9E.0020.0013] # CIRCLED KATAKANA WI -30F8 ; [.3E9E.0020.0011][.0000.0037.0002] # KATAKANA LETTER VI -3091 ; [.3E9F.0020.000E] # HIRAGANA LETTER WE -30F1 ; [.3E9F.0020.0011] # KATAKANA LETTER WE -32FD ; [.3E9F.0020.0013] # CIRCLED KATAKANA WE -30F9 ; [.3E9F.0020.0011][.0000.0037.0002] # KATAKANA LETTER VE -3092 ; [.3EA0.0020.000E] # HIRAGANA LETTER WO -30F2 ; [.3EA0.0020.0011] # KATAKANA LETTER WO -FF66 ; [.3EA0.0020.0012] # HALFWIDTH KATAKANA LETTER WO -32FE ; [.3EA0.0020.0013] # CIRCLED KATAKANA WO -30FA ; [.3EA0.0020.0011][.0000.0037.0002] # KATAKANA LETTER VO -3093 ; [.3EA1.0020.000E] # HIRAGANA LETTER N -30F3 ; [.3EA1.0020.0011] # KATAKANA LETTER N -FF9D ; [.3EA1.0020.0012] # HALFWIDTH KATAKANA LETTER N -1B002 ; [.3EA2.0020.0002] # HENTAIGANA LETTER A-1 -1B003 ; [.3EA3.0020.0002] # HENTAIGANA LETTER A-2 -1B004 ; [.3EA4.0020.0002] # HENTAIGANA LETTER A-3 -1B005 ; [.3EA5.0020.0002] # HENTAIGANA LETTER A-WO -1B006 ; [.3EA6.0020.0002] # HENTAIGANA LETTER I-1 -1B007 ; [.3EA7.0020.0002] # HENTAIGANA LETTER I-2 -1B008 ; [.3EA8.0020.0002] # HENTAIGANA LETTER I-3 -1B009 ; [.3EA9.0020.0002] # HENTAIGANA LETTER I-4 -1B00A ; [.3EAA.0020.0002] # HENTAIGANA LETTER U-1 -1B00B ; [.3EAB.0020.0002] # HENTAIGANA LETTER U-2 -1B00C ; [.3EAC.0020.0002] # HENTAIGANA LETTER U-3 -1B00D ; [.3EAD.0020.0002] # HENTAIGANA LETTER U-4 -1B00E ; [.3EAE.0020.0002] # HENTAIGANA LETTER U-5 -1B001 ; [.3EAF.0020.0002] # HIRAGANA LETTER ARCHAIC YE -1B00F ; [.3EB0.0020.0002] # HENTAIGANA LETTER E-2 -1B010 ; [.3EB1.0020.0002] # HENTAIGANA LETTER E-3 -1B011 ; [.3EB2.0020.0002] # HENTAIGANA LETTER E-4 -1B012 ; [.3EB3.0020.0002] # HENTAIGANA LETTER E-5 -1B013 ; [.3EB4.0020.0002] # HENTAIGANA LETTER E-6 -1B014 ; [.3EB5.0020.0002] # HENTAIGANA LETTER O-1 -1B015 ; [.3EB6.0020.0002] # HENTAIGANA LETTER O-2 -1B016 ; [.3EB7.0020.0002] # HENTAIGANA LETTER O-3 -1B017 ; [.3EB8.0020.0002] # HENTAIGANA LETTER KA-1 -1B018 ; [.3EB9.0020.0002] # HENTAIGANA LETTER KA-2 -1B019 ; [.3EBA.0020.0002] # HENTAIGANA LETTER KA-3 -1B01A ; [.3EBB.0020.0002] # HENTAIGANA LETTER KA-4 -1B01B ; [.3EBC.0020.0002] # HENTAIGANA LETTER KA-5 -1B01C ; [.3EBD.0020.0002] # HENTAIGANA LETTER KA-6 -1B01D ; [.3EBE.0020.0002] # HENTAIGANA LETTER KA-7 -1B01E ; [.3EBF.0020.0002] # HENTAIGANA LETTER KA-8 -1B01F ; [.3EC0.0020.0002] # HENTAIGANA LETTER KA-9 -1B020 ; [.3EC1.0020.0002] # HENTAIGANA LETTER KA-10 -1B021 ; [.3EC2.0020.0002] # HENTAIGANA LETTER KA-11 -1B022 ; [.3EC3.0020.0002] # HENTAIGANA LETTER KA-KE -1B023 ; [.3EC4.0020.0002] # HENTAIGANA LETTER KI-1 -1B024 ; [.3EC5.0020.0002] # HENTAIGANA LETTER KI-2 -1B025 ; [.3EC6.0020.0002] # HENTAIGANA LETTER KI-3 -1B026 ; [.3EC7.0020.0002] # HENTAIGANA LETTER KI-4 -1B027 ; [.3EC8.0020.0002] # HENTAIGANA LETTER KI-5 -1B028 ; [.3EC9.0020.0002] # HENTAIGANA LETTER KI-6 -1B029 ; [.3ECA.0020.0002] # HENTAIGANA LETTER KI-7 -1B02A ; [.3ECB.0020.0002] # HENTAIGANA LETTER KI-8 -1B02B ; [.3ECC.0020.0002] # HENTAIGANA LETTER KU-1 -1B02C ; [.3ECD.0020.0002] # HENTAIGANA LETTER KU-2 -1B02D ; [.3ECE.0020.0002] # HENTAIGANA LETTER KU-3 -1B02E ; [.3ECF.0020.0002] # HENTAIGANA LETTER KU-4 -1B02F ; [.3ED0.0020.0002] # HENTAIGANA LETTER KU-5 -1B030 ; [.3ED1.0020.0002] # HENTAIGANA LETTER KU-6 -1B031 ; [.3ED2.0020.0002] # HENTAIGANA LETTER KU-7 -1B032 ; [.3ED3.0020.0002] # HENTAIGANA LETTER KE-1 -1B033 ; [.3ED4.0020.0002] # HENTAIGANA LETTER KE-2 -1B034 ; [.3ED5.0020.0002] # HENTAIGANA LETTER KE-3 -1B035 ; [.3ED6.0020.0002] # HENTAIGANA LETTER KE-4 -1B036 ; [.3ED7.0020.0002] # HENTAIGANA LETTER KE-5 -1B037 ; [.3ED8.0020.0002] # HENTAIGANA LETTER KE-6 -1B038 ; [.3ED9.0020.0002] # HENTAIGANA LETTER KO-1 -1B039 ; [.3EDA.0020.0002] # HENTAIGANA LETTER KO-2 -1B03A ; [.3EDB.0020.0002] # HENTAIGANA LETTER KO-3 -1B03B ; [.3EDC.0020.0002] # HENTAIGANA LETTER KO-KI -1B03C ; [.3EDD.0020.0002] # HENTAIGANA LETTER SA-1 -1B03D ; [.3EDE.0020.0002] # HENTAIGANA LETTER SA-2 -1B03E ; [.3EDF.0020.0002] # HENTAIGANA LETTER SA-3 -1B03F ; [.3EE0.0020.0002] # HENTAIGANA LETTER SA-4 -1B040 ; [.3EE1.0020.0002] # HENTAIGANA LETTER SA-5 -1B041 ; [.3EE2.0020.0002] # HENTAIGANA LETTER SA-6 -1B042 ; [.3EE3.0020.0002] # HENTAIGANA LETTER SA-7 -1B043 ; [.3EE4.0020.0002] # HENTAIGANA LETTER SA-8 -1B044 ; [.3EE5.0020.0002] # HENTAIGANA LETTER SI-1 -1B045 ; [.3EE6.0020.0002] # HENTAIGANA LETTER SI-2 -1B046 ; [.3EE7.0020.0002] # HENTAIGANA LETTER SI-3 -1B047 ; [.3EE8.0020.0002] # HENTAIGANA LETTER SI-4 -1B048 ; [.3EE9.0020.0002] # HENTAIGANA LETTER SI-5 -1B049 ; [.3EEA.0020.0002] # HENTAIGANA LETTER SI-6 -1B04A ; [.3EEB.0020.0002] # HENTAIGANA LETTER SU-1 -1B04B ; [.3EEC.0020.0002] # HENTAIGANA LETTER SU-2 -1B04C ; [.3EED.0020.0002] # HENTAIGANA LETTER SU-3 -1B04D ; [.3EEE.0020.0002] # HENTAIGANA LETTER SU-4 -1B04E ; [.3EEF.0020.0002] # HENTAIGANA LETTER SU-5 -1B04F ; [.3EF0.0020.0002] # HENTAIGANA LETTER SU-6 -1B050 ; [.3EF1.0020.0002] # HENTAIGANA LETTER SU-7 -1B051 ; [.3EF2.0020.0002] # HENTAIGANA LETTER SU-8 -1B052 ; [.3EF3.0020.0002] # HENTAIGANA LETTER SE-1 -1B053 ; [.3EF4.0020.0002] # HENTAIGANA LETTER SE-2 -1B054 ; [.3EF5.0020.0002] # HENTAIGANA LETTER SE-3 -1B055 ; [.3EF6.0020.0002] # HENTAIGANA LETTER SE-4 -1B056 ; [.3EF7.0020.0002] # HENTAIGANA LETTER SE-5 -1B057 ; [.3EF8.0020.0002] # HENTAIGANA LETTER SO-1 -1B058 ; [.3EF9.0020.0002] # HENTAIGANA LETTER SO-2 -1B059 ; [.3EFA.0020.0002] # HENTAIGANA LETTER SO-3 -1B05A ; [.3EFB.0020.0002] # HENTAIGANA LETTER SO-4 -1B05B ; [.3EFC.0020.0002] # HENTAIGANA LETTER SO-5 -1B05C ; [.3EFD.0020.0002] # HENTAIGANA LETTER SO-6 -1B05D ; [.3EFE.0020.0002] # HENTAIGANA LETTER SO-7 -1B05E ; [.3EFF.0020.0002] # HENTAIGANA LETTER TA-1 -1B05F ; [.3F00.0020.0002] # HENTAIGANA LETTER TA-2 -1B060 ; [.3F01.0020.0002] # HENTAIGANA LETTER TA-3 -1B061 ; [.3F02.0020.0002] # HENTAIGANA LETTER TA-4 -1B062 ; [.3F03.0020.0002] # HENTAIGANA LETTER TI-1 -1B063 ; [.3F04.0020.0002] # HENTAIGANA LETTER TI-2 -1B064 ; [.3F05.0020.0002] # HENTAIGANA LETTER TI-3 -1B065 ; [.3F06.0020.0002] # HENTAIGANA LETTER TI-4 -1B066 ; [.3F07.0020.0002] # HENTAIGANA LETTER TI-5 -1B067 ; [.3F08.0020.0002] # HENTAIGANA LETTER TI-6 -1B068 ; [.3F09.0020.0002] # HENTAIGANA LETTER TI-7 -1B069 ; [.3F0A.0020.0002] # HENTAIGANA LETTER TU-1 -1B06A ; [.3F0B.0020.0002] # HENTAIGANA LETTER TU-2 -1B06B ; [.3F0C.0020.0002] # HENTAIGANA LETTER TU-3 -1B06C ; [.3F0D.0020.0002] # HENTAIGANA LETTER TU-4 -1B06D ; [.3F0E.0020.0002] # HENTAIGANA LETTER TU-TO -1B06E ; [.3F0F.0020.0002] # HENTAIGANA LETTER TE-1 -1B06F ; [.3F10.0020.0002] # HENTAIGANA LETTER TE-2 -1B070 ; [.3F11.0020.0002] # HENTAIGANA LETTER TE-3 -1B071 ; [.3F12.0020.0002] # HENTAIGANA LETTER TE-4 -1B072 ; [.3F13.0020.0002] # HENTAIGANA LETTER TE-5 -1B073 ; [.3F14.0020.0002] # HENTAIGANA LETTER TE-6 -1B074 ; [.3F15.0020.0002] # HENTAIGANA LETTER TE-7 -1B075 ; [.3F16.0020.0002] # HENTAIGANA LETTER TE-8 -1B076 ; [.3F17.0020.0002] # HENTAIGANA LETTER TE-9 -1B077 ; [.3F18.0020.0002] # HENTAIGANA LETTER TO-1 -1B078 ; [.3F19.0020.0002] # HENTAIGANA LETTER TO-2 -1B079 ; [.3F1A.0020.0002] # HENTAIGANA LETTER TO-3 -1B07A ; [.3F1B.0020.0002] # HENTAIGANA LETTER TO-4 -1B07B ; [.3F1C.0020.0002] # HENTAIGANA LETTER TO-5 -1B07C ; [.3F1D.0020.0002] # HENTAIGANA LETTER TO-6 -1B07D ; [.3F1E.0020.0002] # HENTAIGANA LETTER TO-RA -1B07E ; [.3F1F.0020.0002] # HENTAIGANA LETTER NA-1 -1B07F ; [.3F20.0020.0002] # HENTAIGANA LETTER NA-2 -1B080 ; [.3F21.0020.0002] # HENTAIGANA LETTER NA-3 -1B081 ; [.3F22.0020.0002] # HENTAIGANA LETTER NA-4 -1B082 ; [.3F23.0020.0002] # HENTAIGANA LETTER NA-5 -1B083 ; [.3F24.0020.0002] # HENTAIGANA LETTER NA-6 -1B084 ; [.3F25.0020.0002] # HENTAIGANA LETTER NA-7 -1B085 ; [.3F26.0020.0002] # HENTAIGANA LETTER NA-8 -1B086 ; [.3F27.0020.0002] # HENTAIGANA LETTER NA-9 -1B087 ; [.3F28.0020.0002] # HENTAIGANA LETTER NI-1 -1B088 ; [.3F29.0020.0002] # HENTAIGANA LETTER NI-2 -1B089 ; [.3F2A.0020.0002] # HENTAIGANA LETTER NI-3 -1B08A ; [.3F2B.0020.0002] # HENTAIGANA LETTER NI-4 -1B08B ; [.3F2C.0020.0002] # HENTAIGANA LETTER NI-5 -1B08C ; [.3F2D.0020.0002] # HENTAIGANA LETTER NI-6 -1B08D ; [.3F2E.0020.0002] # HENTAIGANA LETTER NI-7 -1B08E ; [.3F2F.0020.0002] # HENTAIGANA LETTER NI-TE -1B08F ; [.3F30.0020.0002] # HENTAIGANA LETTER NU-1 -1B090 ; [.3F31.0020.0002] # HENTAIGANA LETTER NU-2 -1B091 ; [.3F32.0020.0002] # HENTAIGANA LETTER NU-3 -1B092 ; [.3F33.0020.0002] # HENTAIGANA LETTER NE-1 -1B093 ; [.3F34.0020.0002] # HENTAIGANA LETTER NE-2 -1B094 ; [.3F35.0020.0002] # HENTAIGANA LETTER NE-3 -1B095 ; [.3F36.0020.0002] # HENTAIGANA LETTER NE-4 -1B096 ; [.3F37.0020.0002] # HENTAIGANA LETTER NE-5 -1B097 ; [.3F38.0020.0002] # HENTAIGANA LETTER NE-6 -1B098 ; [.3F39.0020.0002] # HENTAIGANA LETTER NE-KO -1B099 ; [.3F3A.0020.0002] # HENTAIGANA LETTER NO-1 -1B09A ; [.3F3B.0020.0002] # HENTAIGANA LETTER NO-2 -1B09B ; [.3F3C.0020.0002] # HENTAIGANA LETTER NO-3 -1B09C ; [.3F3D.0020.0002] # HENTAIGANA LETTER NO-4 -1B09D ; [.3F3E.0020.0002] # HENTAIGANA LETTER NO-5 -1B09E ; [.3F3F.0020.0002] # HENTAIGANA LETTER HA-1 -1B09F ; [.3F40.0020.0002] # HENTAIGANA LETTER HA-2 -1B0A0 ; [.3F41.0020.0002] # HENTAIGANA LETTER HA-3 -1B0A1 ; [.3F42.0020.0002] # HENTAIGANA LETTER HA-4 -1B0A2 ; [.3F43.0020.0002] # HENTAIGANA LETTER HA-5 -1B0A3 ; [.3F44.0020.0002] # HENTAIGANA LETTER HA-6 -1B0A4 ; [.3F45.0020.0002] # HENTAIGANA LETTER HA-7 -1B0A5 ; [.3F46.0020.0002] # HENTAIGANA LETTER HA-8 -1B0A6 ; [.3F47.0020.0002] # HENTAIGANA LETTER HA-9 -1B0A7 ; [.3F48.0020.0002] # HENTAIGANA LETTER HA-10 -1B0A8 ; [.3F49.0020.0002] # HENTAIGANA LETTER HA-11 -1B0A9 ; [.3F4A.0020.0002] # HENTAIGANA LETTER HI-1 -1B0AA ; [.3F4B.0020.0002] # HENTAIGANA LETTER HI-2 -1B0AB ; [.3F4C.0020.0002] # HENTAIGANA LETTER HI-3 -1B0AC ; [.3F4D.0020.0002] # HENTAIGANA LETTER HI-4 -1B0AD ; [.3F4E.0020.0002] # HENTAIGANA LETTER HI-5 -1B0AE ; [.3F4F.0020.0002] # HENTAIGANA LETTER HI-6 -1B0AF ; [.3F50.0020.0002] # HENTAIGANA LETTER HI-7 -1B0B0 ; [.3F51.0020.0002] # HENTAIGANA LETTER HU-1 -1B0B1 ; [.3F52.0020.0002] # HENTAIGANA LETTER HU-2 -1B0B2 ; [.3F53.0020.0002] # HENTAIGANA LETTER HU-3 -1B0B3 ; [.3F54.0020.0002] # HENTAIGANA LETTER HE-1 -1B0B4 ; [.3F55.0020.0002] # HENTAIGANA LETTER HE-2 -1B0B5 ; [.3F56.0020.0002] # HENTAIGANA LETTER HE-3 -1B0B6 ; [.3F57.0020.0002] # HENTAIGANA LETTER HE-4 -1B0B7 ; [.3F58.0020.0002] # HENTAIGANA LETTER HE-5 -1B0B8 ; [.3F59.0020.0002] # HENTAIGANA LETTER HE-6 -1B0B9 ; [.3F5A.0020.0002] # HENTAIGANA LETTER HE-7 -1B0BA ; [.3F5B.0020.0002] # HENTAIGANA LETTER HO-1 -1B0BB ; [.3F5C.0020.0002] # HENTAIGANA LETTER HO-2 -1B0BC ; [.3F5D.0020.0002] # HENTAIGANA LETTER HO-3 -1B0BD ; [.3F5E.0020.0002] # HENTAIGANA LETTER HO-4 -1B0BE ; [.3F5F.0020.0002] # HENTAIGANA LETTER HO-5 -1B0BF ; [.3F60.0020.0002] # HENTAIGANA LETTER HO-6 -1B0C0 ; [.3F61.0020.0002] # HENTAIGANA LETTER HO-7 -1B0C1 ; [.3F62.0020.0002] # HENTAIGANA LETTER HO-8 -1B0C2 ; [.3F63.0020.0002] # HENTAIGANA LETTER MA-1 -1B0C3 ; [.3F64.0020.0002] # HENTAIGANA LETTER MA-2 -1B0C4 ; [.3F65.0020.0002] # HENTAIGANA LETTER MA-3 -1B0C5 ; [.3F66.0020.0002] # HENTAIGANA LETTER MA-4 -1B0C6 ; [.3F67.0020.0002] # HENTAIGANA LETTER MA-5 -1B0C7 ; [.3F68.0020.0002] # HENTAIGANA LETTER MA-6 -1B0C8 ; [.3F69.0020.0002] # HENTAIGANA LETTER MA-7 -1B0C9 ; [.3F6A.0020.0002] # HENTAIGANA LETTER MI-1 -1B0CA ; [.3F6B.0020.0002] # HENTAIGANA LETTER MI-2 -1B0CB ; [.3F6C.0020.0002] # HENTAIGANA LETTER MI-3 -1B0CC ; [.3F6D.0020.0002] # HENTAIGANA LETTER MI-4 -1B0CD ; [.3F6E.0020.0002] # HENTAIGANA LETTER MI-5 -1B0CE ; [.3F6F.0020.0002] # HENTAIGANA LETTER MI-6 -1B0CF ; [.3F70.0020.0002] # HENTAIGANA LETTER MI-7 -1B0D0 ; [.3F71.0020.0002] # HENTAIGANA LETTER MU-1 -1B0D1 ; [.3F72.0020.0002] # HENTAIGANA LETTER MU-2 -1B0D2 ; [.3F73.0020.0002] # HENTAIGANA LETTER MU-3 -1B0D3 ; [.3F74.0020.0002] # HENTAIGANA LETTER MU-4 -1B0D4 ; [.3F75.0020.0002] # HENTAIGANA LETTER ME-1 -1B0D5 ; [.3F76.0020.0002] # HENTAIGANA LETTER ME-2 -1B0D6 ; [.3F77.0020.0002] # HENTAIGANA LETTER ME-MA -1B0D7 ; [.3F78.0020.0002] # HENTAIGANA LETTER MO-1 -1B0D8 ; [.3F79.0020.0002] # HENTAIGANA LETTER MO-2 -1B0D9 ; [.3F7A.0020.0002] # HENTAIGANA LETTER MO-3 -1B0DA ; [.3F7B.0020.0002] # HENTAIGANA LETTER MO-4 -1B0DB ; [.3F7C.0020.0002] # HENTAIGANA LETTER MO-5 -1B0DC ; [.3F7D.0020.0002] # HENTAIGANA LETTER MO-6 -1B0DD ; [.3F7E.0020.0002] # HENTAIGANA LETTER YA-1 -1B0DE ; [.3F7F.0020.0002] # HENTAIGANA LETTER YA-2 -1B0DF ; [.3F80.0020.0002] # HENTAIGANA LETTER YA-3 -1B0E0 ; [.3F81.0020.0002] # HENTAIGANA LETTER YA-4 -1B0E1 ; [.3F82.0020.0002] # HENTAIGANA LETTER YA-5 -1B0E2 ; [.3F83.0020.0002] # HENTAIGANA LETTER YA-YO -1B0E3 ; [.3F84.0020.0002] # HENTAIGANA LETTER YU-1 -1B0E4 ; [.3F85.0020.0002] # HENTAIGANA LETTER YU-2 -1B0E5 ; [.3F86.0020.0002] # HENTAIGANA LETTER YU-3 -1B0E6 ; [.3F87.0020.0002] # HENTAIGANA LETTER YU-4 -1B0E7 ; [.3F88.0020.0002] # HENTAIGANA LETTER YO-1 -1B0E8 ; [.3F89.0020.0002] # HENTAIGANA LETTER YO-2 -1B0E9 ; [.3F8A.0020.0002] # HENTAIGANA LETTER YO-3 -1B0EA ; [.3F8B.0020.0002] # HENTAIGANA LETTER YO-4 -1B0EB ; [.3F8C.0020.0002] # HENTAIGANA LETTER YO-5 -1B0EC ; [.3F8D.0020.0002] # HENTAIGANA LETTER YO-6 -1B0ED ; [.3F8E.0020.0002] # HENTAIGANA LETTER RA-1 -1B0EE ; [.3F8F.0020.0002] # HENTAIGANA LETTER RA-2 -1B0EF ; [.3F90.0020.0002] # HENTAIGANA LETTER RA-3 -1B0F0 ; [.3F91.0020.0002] # HENTAIGANA LETTER RA-4 -1B0F1 ; [.3F92.0020.0002] # HENTAIGANA LETTER RI-1 -1B0F2 ; [.3F93.0020.0002] # HENTAIGANA LETTER RI-2 -1B0F3 ; [.3F94.0020.0002] # HENTAIGANA LETTER RI-3 -1B0F4 ; [.3F95.0020.0002] # HENTAIGANA LETTER RI-4 -1B0F5 ; [.3F96.0020.0002] # HENTAIGANA LETTER RI-5 -1B0F6 ; [.3F97.0020.0002] # HENTAIGANA LETTER RI-6 -1B0F7 ; [.3F98.0020.0002] # HENTAIGANA LETTER RI-7 -1B0F8 ; [.3F99.0020.0002] # HENTAIGANA LETTER RU-1 -1B0F9 ; [.3F9A.0020.0002] # HENTAIGANA LETTER RU-2 -1B0FA ; [.3F9B.0020.0002] # HENTAIGANA LETTER RU-3 -1B0FB ; [.3F9C.0020.0002] # HENTAIGANA LETTER RU-4 -1B0FC ; [.3F9D.0020.0002] # HENTAIGANA LETTER RU-5 -1B0FD ; [.3F9E.0020.0002] # HENTAIGANA LETTER RU-6 -1B0FE ; [.3F9F.0020.0002] # HENTAIGANA LETTER RE-1 -1B0FF ; [.3FA0.0020.0002] # HENTAIGANA LETTER RE-2 -1B100 ; [.3FA1.0020.0002] # HENTAIGANA LETTER RE-3 -1B101 ; [.3FA2.0020.0002] # HENTAIGANA LETTER RE-4 -1B102 ; [.3FA3.0020.0002] # HENTAIGANA LETTER RO-1 -1B103 ; [.3FA4.0020.0002] # HENTAIGANA LETTER RO-2 -1B104 ; [.3FA5.0020.0002] # HENTAIGANA LETTER RO-3 -1B105 ; [.3FA6.0020.0002] # HENTAIGANA LETTER RO-4 -1B106 ; [.3FA7.0020.0002] # HENTAIGANA LETTER RO-5 -1B107 ; [.3FA8.0020.0002] # HENTAIGANA LETTER RO-6 -1B108 ; [.3FA9.0020.0002] # HENTAIGANA LETTER WA-1 -1B109 ; [.3FAA.0020.0002] # HENTAIGANA LETTER WA-2 -1B10A ; [.3FAB.0020.0002] # HENTAIGANA LETTER WA-3 -1B10B ; [.3FAC.0020.0002] # HENTAIGANA LETTER WA-4 -1B10C ; [.3FAD.0020.0002] # HENTAIGANA LETTER WA-5 -1B10D ; [.3FAE.0020.0002] # HENTAIGANA LETTER WI-1 -1B10E ; [.3FAF.0020.0002] # HENTAIGANA LETTER WI-2 -1B10F ; [.3FB0.0020.0002] # HENTAIGANA LETTER WI-3 -1B110 ; [.3FB1.0020.0002] # HENTAIGANA LETTER WI-4 -1B111 ; [.3FB2.0020.0002] # HENTAIGANA LETTER WI-5 -1B112 ; [.3FB3.0020.0002] # HENTAIGANA LETTER WE-1 -1B113 ; [.3FB4.0020.0002] # HENTAIGANA LETTER WE-2 -1B114 ; [.3FB5.0020.0002] # HENTAIGANA LETTER WE-3 -1B115 ; [.3FB6.0020.0002] # HENTAIGANA LETTER WE-4 -1B116 ; [.3FB7.0020.0002] # HENTAIGANA LETTER WO-1 -1B117 ; [.3FB8.0020.0002] # HENTAIGANA LETTER WO-2 -1B118 ; [.3FB9.0020.0002] # HENTAIGANA LETTER WO-3 -1B119 ; [.3FBA.0020.0002] # HENTAIGANA LETTER WO-4 -1B11A ; [.3FBB.0020.0002] # HENTAIGANA LETTER WO-5 -1B11B ; [.3FBC.0020.0002] # HENTAIGANA LETTER WO-6 -1B11C ; [.3FBD.0020.0002] # HENTAIGANA LETTER WO-7 -1B11D ; [.3FBE.0020.0002] # HENTAIGANA LETTER N-MU-MO-1 -1B11E ; [.3FBF.0020.0002] # HENTAIGANA LETTER N-MU-MO-2 -3105 ; [.3FC0.0020.0002] # BOPOMOFO LETTER B -31A0 ; [.3FC0.0020.0004][.0000.0112.0004] # BOPOMOFO LETTER BU -3106 ; [.3FC1.0020.0002] # BOPOMOFO LETTER P -31B4 ; [.3FC1.0020.0019] # BOPOMOFO FINAL LETTER P -3107 ; [.3FC2.0020.0002] # BOPOMOFO LETTER M -3108 ; [.3FC3.0020.0002] # BOPOMOFO LETTER F -312A ; [.3FC4.0020.0002] # BOPOMOFO LETTER V -3109 ; [.3FC5.0020.0002] # BOPOMOFO LETTER D -310A ; [.3FC6.0020.0002] # BOPOMOFO LETTER T -31B5 ; [.3FC6.0020.0019] # BOPOMOFO FINAL LETTER T -310B ; [.3FC7.0020.0002] # BOPOMOFO LETTER N -310C ; [.3FC8.0020.0002] # BOPOMOFO LETTER L -310D ; [.3FC9.0020.0002] # BOPOMOFO LETTER G -31A3 ; [.3FC9.0020.0004][.0000.0112.0004] # BOPOMOFO LETTER GU -310E ; [.3FCA.0020.0002] # BOPOMOFO LETTER K -31B6 ; [.3FCA.0020.0019] # BOPOMOFO FINAL LETTER K -312B ; [.3FCB.0020.0002] # BOPOMOFO LETTER NG -31AD ; [.3FCC.0020.0002] # BOPOMOFO LETTER NGG -310F ; [.3FCD.0020.0002] # BOPOMOFO LETTER H -31B7 ; [.3FCD.0020.0019] # BOPOMOFO FINAL LETTER H -3110 ; [.3FCE.0020.0002] # BOPOMOFO LETTER J -31A2 ; [.3FCE.0020.0004][.0000.0112.0004] # BOPOMOFO LETTER JI -3111 ; [.3FCF.0020.0002] # BOPOMOFO LETTER Q -3112 ; [.3FD0.0020.0002] # BOPOMOFO LETTER X -312C ; [.3FD1.0020.0002] # BOPOMOFO LETTER GN -3113 ; [.3FD2.0020.0002] # BOPOMOFO LETTER ZH -3114 ; [.3FD3.0020.0002] # BOPOMOFO LETTER CH -3115 ; [.3FD4.0020.0002] # BOPOMOFO LETTER SH -3116 ; [.3FD5.0020.0002] # BOPOMOFO LETTER R -3117 ; [.3FD6.0020.0002] # BOPOMOFO LETTER Z -31A1 ; [.3FD6.0020.0004][.0000.0112.0004] # BOPOMOFO LETTER ZI -3118 ; [.3FD7.0020.0002] # BOPOMOFO LETTER C -3119 ; [.3FD8.0020.0002] # BOPOMOFO LETTER S -31B8 ; [.3FD9.0020.0002] # BOPOMOFO LETTER GH -31B9 ; [.3FDA.0020.0002] # BOPOMOFO LETTER LH -31BA ; [.3FDB.0020.0002] # BOPOMOFO LETTER ZY -311A ; [.3FDC.0020.0002] # BOPOMOFO LETTER A -31A9 ; [.3FDC.0020.0004][.0000.0112.0004] # BOPOMOFO LETTER ANN -311B ; [.3FDD.0020.0002] # BOPOMOFO LETTER O -31A7 ; [.3FDD.0020.0004][.0000.0112.0004] # BOPOMOFO LETTER ONN -31A6 ; [.3FDE.0020.0002] # BOPOMOFO LETTER OO -311C ; [.3FDF.0020.0002] # BOPOMOFO LETTER E -312E ; [.3FDF.0020.0004] # BOPOMOFO LETTER O WITH DOT ABOVE -311D ; [.3FE0.0020.0002] # BOPOMOFO LETTER EH -31A4 ; [.3FE1.0020.0002] # BOPOMOFO LETTER EE -31A5 ; [.3FE1.0020.0004][.0000.0112.0004] # BOPOMOFO LETTER ENN -311E ; [.3FE2.0020.0002] # BOPOMOFO LETTER AI -31AE ; [.3FE2.0020.0004][.0000.0112.0004] # BOPOMOFO LETTER AINN -311F ; [.3FE3.0020.0002] # BOPOMOFO LETTER EI -3120 ; [.3FE4.0020.0002] # BOPOMOFO LETTER AU -31AF ; [.3FE4.0020.0004][.0000.0112.0004] # BOPOMOFO LETTER AUNN -3121 ; [.3FE5.0020.0002] # BOPOMOFO LETTER OU -3122 ; [.3FE6.0020.0002] # BOPOMOFO LETTER AN -3123 ; [.3FE7.0020.0002] # BOPOMOFO LETTER EN -3124 ; [.3FE8.0020.0002] # BOPOMOFO LETTER ANG -31B2 ; [.3FE9.0020.0002] # BOPOMOFO LETTER ONG -3125 ; [.3FEA.0020.0002] # BOPOMOFO LETTER ENG -31B0 ; [.3FEB.0020.0002] # BOPOMOFO LETTER AM -31B1 ; [.3FEC.0020.0002] # BOPOMOFO LETTER OM -31AC ; [.3FED.0020.0002] # BOPOMOFO LETTER IM -3126 ; [.3FEE.0020.0002] # BOPOMOFO LETTER ER -3127 ; [.3FEF.0020.0002] # BOPOMOFO LETTER I -31AA ; [.3FEF.0020.0004][.0000.0112.0004] # BOPOMOFO LETTER INN -31B3 ; [.3FEF.0020.0016][.0000.0112.0016] # BOPOMOFO LETTER INNN -3128 ; [.3FF0.0020.0002] # BOPOMOFO LETTER U -31AB ; [.3FF0.0020.0004][.0000.0112.0004] # BOPOMOFO LETTER UNN -31A8 ; [.3FF0.0020.0004][.0000.0113.0004] # BOPOMOFO LETTER IR -3129 ; [.3FF1.0020.0002] # BOPOMOFO LETTER IU -312D ; [.3FF2.0020.0002] # BOPOMOFO LETTER IH -A000 ; [.3FF3.0020.0002] # YI SYLLABLE IT -A001 ; [.3FF4.0020.0002] # YI SYLLABLE IX -A002 ; [.3FF5.0020.0002] # YI SYLLABLE I -A003 ; [.3FF6.0020.0002] # YI SYLLABLE IP -A004 ; [.3FF7.0020.0002] # YI SYLLABLE IET -A005 ; [.3FF8.0020.0002] # YI SYLLABLE IEX -A006 ; [.3FF9.0020.0002] # YI SYLLABLE IE -A007 ; [.3FFA.0020.0002] # YI SYLLABLE IEP -A008 ; [.3FFB.0020.0002] # YI SYLLABLE AT -A009 ; [.3FFC.0020.0002] # YI SYLLABLE AX -A00A ; [.3FFD.0020.0002] # YI SYLLABLE A -A00B ; [.3FFE.0020.0002] # YI SYLLABLE AP -A00C ; [.3FFF.0020.0002] # YI SYLLABLE UOX -A00D ; [.4000.0020.0002] # YI SYLLABLE UO -A00E ; [.4001.0020.0002] # YI SYLLABLE UOP -A00F ; [.4002.0020.0002] # YI SYLLABLE OT -A010 ; [.4003.0020.0002] # YI SYLLABLE OX -A011 ; [.4004.0020.0002] # YI SYLLABLE O -A012 ; [.4005.0020.0002] # YI SYLLABLE OP -A013 ; [.4006.0020.0002] # YI SYLLABLE EX -A014 ; [.4007.0020.0002] # YI SYLLABLE E -A015 ; [.4008.0020.0002] # YI SYLLABLE WU -A016 ; [.4009.0020.0002] # YI SYLLABLE BIT -A017 ; [.400A.0020.0002] # YI SYLLABLE BIX -A018 ; [.400B.0020.0002] # YI SYLLABLE BI -A019 ; [.400C.0020.0002] # YI SYLLABLE BIP -A01A ; [.400D.0020.0002] # YI SYLLABLE BIET -A01B ; [.400E.0020.0002] # YI SYLLABLE BIEX -A01C ; [.400F.0020.0002] # YI SYLLABLE BIE -A01D ; [.4010.0020.0002] # YI SYLLABLE BIEP -A01E ; [.4011.0020.0002] # YI SYLLABLE BAT -A01F ; [.4012.0020.0002] # YI SYLLABLE BAX -A020 ; [.4013.0020.0002] # YI SYLLABLE BA -A021 ; [.4014.0020.0002] # YI SYLLABLE BAP -A022 ; [.4015.0020.0002] # YI SYLLABLE BUOX -A023 ; [.4016.0020.0002] # YI SYLLABLE BUO -A024 ; [.4017.0020.0002] # YI SYLLABLE BUOP -A025 ; [.4018.0020.0002] # YI SYLLABLE BOT -A026 ; [.4019.0020.0002] # YI SYLLABLE BOX -A027 ; [.401A.0020.0002] # YI SYLLABLE BO -A028 ; [.401B.0020.0002] # YI SYLLABLE BOP -A029 ; [.401C.0020.0002] # YI SYLLABLE BEX -A02A ; [.401D.0020.0002] # YI SYLLABLE BE -A02B ; [.401E.0020.0002] # YI SYLLABLE BEP -A02C ; [.401F.0020.0002] # YI SYLLABLE BUT -A02D ; [.4020.0020.0002] # YI SYLLABLE BUX -A02E ; [.4021.0020.0002] # YI SYLLABLE BU -A02F ; [.4022.0020.0002] # YI SYLLABLE BUP -A030 ; [.4023.0020.0002] # YI SYLLABLE BURX -A031 ; [.4024.0020.0002] # YI SYLLABLE BUR -A032 ; [.4025.0020.0002] # YI SYLLABLE BYT -A033 ; [.4026.0020.0002] # YI SYLLABLE BYX -A034 ; [.4027.0020.0002] # YI SYLLABLE BY -A035 ; [.4028.0020.0002] # YI SYLLABLE BYP -A036 ; [.4029.0020.0002] # YI SYLLABLE BYRX -A037 ; [.402A.0020.0002] # YI SYLLABLE BYR -A038 ; [.402B.0020.0002] # YI SYLLABLE PIT -A039 ; [.402C.0020.0002] # YI SYLLABLE PIX -A03A ; [.402D.0020.0002] # YI SYLLABLE PI -A03B ; [.402E.0020.0002] # YI SYLLABLE PIP -A03C ; [.402F.0020.0002] # YI SYLLABLE PIEX -A03D ; [.4030.0020.0002] # YI SYLLABLE PIE -A03E ; [.4031.0020.0002] # YI SYLLABLE PIEP -A03F ; [.4032.0020.0002] # YI SYLLABLE PAT -A040 ; [.4033.0020.0002] # YI SYLLABLE PAX -A041 ; [.4034.0020.0002] # YI SYLLABLE PA -A042 ; [.4035.0020.0002] # YI SYLLABLE PAP -A043 ; [.4036.0020.0002] # YI SYLLABLE PUOX -A044 ; [.4037.0020.0002] # YI SYLLABLE PUO -A045 ; [.4038.0020.0002] # YI SYLLABLE PUOP -A046 ; [.4039.0020.0002] # YI SYLLABLE POT -A047 ; [.403A.0020.0002] # YI SYLLABLE POX -A048 ; [.403B.0020.0002] # YI SYLLABLE PO -A049 ; [.403C.0020.0002] # YI SYLLABLE POP -A04A ; [.403D.0020.0002] # YI SYLLABLE PUT -A04B ; [.403E.0020.0002] # YI SYLLABLE PUX -A04C ; [.403F.0020.0002] # YI SYLLABLE PU -A04D ; [.4040.0020.0002] # YI SYLLABLE PUP -A04E ; [.4041.0020.0002] # YI SYLLABLE PURX -A04F ; [.4042.0020.0002] # YI SYLLABLE PUR -A050 ; [.4043.0020.0002] # YI SYLLABLE PYT -A051 ; [.4044.0020.0002] # YI SYLLABLE PYX -A052 ; [.4045.0020.0002] # YI SYLLABLE PY -A053 ; [.4046.0020.0002] # YI SYLLABLE PYP -A054 ; [.4047.0020.0002] # YI SYLLABLE PYRX -A055 ; [.4048.0020.0002] # YI SYLLABLE PYR -A056 ; [.4049.0020.0002] # YI SYLLABLE BBIT -A057 ; [.404A.0020.0002] # YI SYLLABLE BBIX -A058 ; [.404B.0020.0002] # YI SYLLABLE BBI -A059 ; [.404C.0020.0002] # YI SYLLABLE BBIP -A05A ; [.404D.0020.0002] # YI SYLLABLE BBIET -A05B ; [.404E.0020.0002] # YI SYLLABLE BBIEX -A05C ; [.404F.0020.0002] # YI SYLLABLE BBIE -A05D ; [.4050.0020.0002] # YI SYLLABLE BBIEP -A05E ; [.4051.0020.0002] # YI SYLLABLE BBAT -A05F ; [.4052.0020.0002] # YI SYLLABLE BBAX -A060 ; [.4053.0020.0002] # YI SYLLABLE BBA -A061 ; [.4054.0020.0002] # YI SYLLABLE BBAP -A062 ; [.4055.0020.0002] # YI SYLLABLE BBUOX -A063 ; [.4056.0020.0002] # YI SYLLABLE BBUO -A064 ; [.4057.0020.0002] # YI SYLLABLE BBUOP -A065 ; [.4058.0020.0002] # YI SYLLABLE BBOT -A066 ; [.4059.0020.0002] # YI SYLLABLE BBOX -A067 ; [.405A.0020.0002] # YI SYLLABLE BBO -A068 ; [.405B.0020.0002] # YI SYLLABLE BBOP -A069 ; [.405C.0020.0002] # YI SYLLABLE BBEX -A06A ; [.405D.0020.0002] # YI SYLLABLE BBE -A06B ; [.405E.0020.0002] # YI SYLLABLE BBEP -A06C ; [.405F.0020.0002] # YI SYLLABLE BBUT -A06D ; [.4060.0020.0002] # YI SYLLABLE BBUX -A06E ; [.4061.0020.0002] # YI SYLLABLE BBU -A06F ; [.4062.0020.0002] # YI SYLLABLE BBUP -A070 ; [.4063.0020.0002] # YI SYLLABLE BBURX -A071 ; [.4064.0020.0002] # YI SYLLABLE BBUR -A072 ; [.4065.0020.0002] # YI SYLLABLE BBYT -A073 ; [.4066.0020.0002] # YI SYLLABLE BBYX -A074 ; [.4067.0020.0002] # YI SYLLABLE BBY -A075 ; [.4068.0020.0002] # YI SYLLABLE BBYP -A076 ; [.4069.0020.0002] # YI SYLLABLE NBIT -A077 ; [.406A.0020.0002] # YI SYLLABLE NBIX -A078 ; [.406B.0020.0002] # YI SYLLABLE NBI -A079 ; [.406C.0020.0002] # YI SYLLABLE NBIP -A07A ; [.406D.0020.0002] # YI SYLLABLE NBIEX -A07B ; [.406E.0020.0002] # YI SYLLABLE NBIE -A07C ; [.406F.0020.0002] # YI SYLLABLE NBIEP -A07D ; [.4070.0020.0002] # YI SYLLABLE NBAT -A07E ; [.4071.0020.0002] # YI SYLLABLE NBAX -A07F ; [.4072.0020.0002] # YI SYLLABLE NBA -A080 ; [.4073.0020.0002] # YI SYLLABLE NBAP -A081 ; [.4074.0020.0002] # YI SYLLABLE NBOT -A082 ; [.4075.0020.0002] # YI SYLLABLE NBOX -A083 ; [.4076.0020.0002] # YI SYLLABLE NBO -A084 ; [.4077.0020.0002] # YI SYLLABLE NBOP -A085 ; [.4078.0020.0002] # YI SYLLABLE NBUT -A086 ; [.4079.0020.0002] # YI SYLLABLE NBUX -A087 ; [.407A.0020.0002] # YI SYLLABLE NBU -A088 ; [.407B.0020.0002] # YI SYLLABLE NBUP -A089 ; [.407C.0020.0002] # YI SYLLABLE NBURX -A08A ; [.407D.0020.0002] # YI SYLLABLE NBUR -A08B ; [.407E.0020.0002] # YI SYLLABLE NBYT -A08C ; [.407F.0020.0002] # YI SYLLABLE NBYX -A08D ; [.4080.0020.0002] # YI SYLLABLE NBY -A08E ; [.4081.0020.0002] # YI SYLLABLE NBYP -A08F ; [.4082.0020.0002] # YI SYLLABLE NBYRX -A090 ; [.4083.0020.0002] # YI SYLLABLE NBYR -A091 ; [.4084.0020.0002] # YI SYLLABLE HMIT -A092 ; [.4085.0020.0002] # YI SYLLABLE HMIX -A093 ; [.4086.0020.0002] # YI SYLLABLE HMI -A094 ; [.4087.0020.0002] # YI SYLLABLE HMIP -A095 ; [.4088.0020.0002] # YI SYLLABLE HMIEX -A096 ; [.4089.0020.0002] # YI SYLLABLE HMIE -A097 ; [.408A.0020.0002] # YI SYLLABLE HMIEP -A098 ; [.408B.0020.0002] # YI SYLLABLE HMAT -A099 ; [.408C.0020.0002] # YI SYLLABLE HMAX -A09A ; [.408D.0020.0002] # YI SYLLABLE HMA -A09B ; [.408E.0020.0002] # YI SYLLABLE HMAP -A09C ; [.408F.0020.0002] # YI SYLLABLE HMUOX -A09D ; [.4090.0020.0002] # YI SYLLABLE HMUO -A09E ; [.4091.0020.0002] # YI SYLLABLE HMUOP -A09F ; [.4092.0020.0002] # YI SYLLABLE HMOT -A0A0 ; [.4093.0020.0002] # YI SYLLABLE HMOX -A0A1 ; [.4094.0020.0002] # YI SYLLABLE HMO -A0A2 ; [.4095.0020.0002] # YI SYLLABLE HMOP -A0A3 ; [.4096.0020.0002] # YI SYLLABLE HMUT -A0A4 ; [.4097.0020.0002] # YI SYLLABLE HMUX -A0A5 ; [.4098.0020.0002] # YI SYLLABLE HMU -A0A6 ; [.4099.0020.0002] # YI SYLLABLE HMUP -A0A7 ; [.409A.0020.0002] # YI SYLLABLE HMURX -A0A8 ; [.409B.0020.0002] # YI SYLLABLE HMUR -A0A9 ; [.409C.0020.0002] # YI SYLLABLE HMYX -A0AA ; [.409D.0020.0002] # YI SYLLABLE HMY -A0AB ; [.409E.0020.0002] # YI SYLLABLE HMYP -A0AC ; [.409F.0020.0002] # YI SYLLABLE HMYRX -A0AD ; [.40A0.0020.0002] # YI SYLLABLE HMYR -A0AE ; [.40A1.0020.0002] # YI SYLLABLE MIT -A0AF ; [.40A2.0020.0002] # YI SYLLABLE MIX -A0B0 ; [.40A3.0020.0002] # YI SYLLABLE MI -A0B1 ; [.40A4.0020.0002] # YI SYLLABLE MIP -A0B2 ; [.40A5.0020.0002] # YI SYLLABLE MIEX -A0B3 ; [.40A6.0020.0002] # YI SYLLABLE MIE -A0B4 ; [.40A7.0020.0002] # YI SYLLABLE MIEP -A0B5 ; [.40A8.0020.0002] # YI SYLLABLE MAT -A0B6 ; [.40A9.0020.0002] # YI SYLLABLE MAX -A0B7 ; [.40AA.0020.0002] # YI SYLLABLE MA -A0B8 ; [.40AB.0020.0002] # YI SYLLABLE MAP -A0B9 ; [.40AC.0020.0002] # YI SYLLABLE MUOT -A0BA ; [.40AD.0020.0002] # YI SYLLABLE MUOX -A0BB ; [.40AE.0020.0002] # YI SYLLABLE MUO -A0BC ; [.40AF.0020.0002] # YI SYLLABLE MUOP -A0BD ; [.40B0.0020.0002] # YI SYLLABLE MOT -A0BE ; [.40B1.0020.0002] # YI SYLLABLE MOX -A0BF ; [.40B2.0020.0002] # YI SYLLABLE MO -A0C0 ; [.40B3.0020.0002] # YI SYLLABLE MOP -A0C1 ; [.40B4.0020.0002] # YI SYLLABLE MEX -A0C2 ; [.40B5.0020.0002] # YI SYLLABLE ME -A0C3 ; [.40B6.0020.0002] # YI SYLLABLE MUT -A0C4 ; [.40B7.0020.0002] # YI SYLLABLE MUX -A0C5 ; [.40B8.0020.0002] # YI SYLLABLE MU -A0C6 ; [.40B9.0020.0002] # YI SYLLABLE MUP -A0C7 ; [.40BA.0020.0002] # YI SYLLABLE MURX -A0C8 ; [.40BB.0020.0002] # YI SYLLABLE MUR -A0C9 ; [.40BC.0020.0002] # YI SYLLABLE MYT -A0CA ; [.40BD.0020.0002] # YI SYLLABLE MYX -A0CB ; [.40BE.0020.0002] # YI SYLLABLE MY -A0CC ; [.40BF.0020.0002] # YI SYLLABLE MYP -A0CD ; [.40C0.0020.0002] # YI SYLLABLE FIT -A0CE ; [.40C1.0020.0002] # YI SYLLABLE FIX -A0CF ; [.40C2.0020.0002] # YI SYLLABLE FI -A0D0 ; [.40C3.0020.0002] # YI SYLLABLE FIP -A0D1 ; [.40C4.0020.0002] # YI SYLLABLE FAT -A0D2 ; [.40C5.0020.0002] # YI SYLLABLE FAX -A0D3 ; [.40C6.0020.0002] # YI SYLLABLE FA -A0D4 ; [.40C7.0020.0002] # YI SYLLABLE FAP -A0D5 ; [.40C8.0020.0002] # YI SYLLABLE FOX -A0D6 ; [.40C9.0020.0002] # YI SYLLABLE FO -A0D7 ; [.40CA.0020.0002] # YI SYLLABLE FOP -A0D8 ; [.40CB.0020.0002] # YI SYLLABLE FUT -A0D9 ; [.40CC.0020.0002] # YI SYLLABLE FUX -A0DA ; [.40CD.0020.0002] # YI SYLLABLE FU -A0DB ; [.40CE.0020.0002] # YI SYLLABLE FUP -A0DC ; [.40CF.0020.0002] # YI SYLLABLE FURX -A0DD ; [.40D0.0020.0002] # YI SYLLABLE FUR -A0DE ; [.40D1.0020.0002] # YI SYLLABLE FYT -A0DF ; [.40D2.0020.0002] # YI SYLLABLE FYX -A0E0 ; [.40D3.0020.0002] # YI SYLLABLE FY -A0E1 ; [.40D4.0020.0002] # YI SYLLABLE FYP -A0E2 ; [.40D5.0020.0002] # YI SYLLABLE VIT -A0E3 ; [.40D6.0020.0002] # YI SYLLABLE VIX -A0E4 ; [.40D7.0020.0002] # YI SYLLABLE VI -A0E5 ; [.40D8.0020.0002] # YI SYLLABLE VIP -A0E6 ; [.40D9.0020.0002] # YI SYLLABLE VIET -A0E7 ; [.40DA.0020.0002] # YI SYLLABLE VIEX -A0E8 ; [.40DB.0020.0002] # YI SYLLABLE VIE -A0E9 ; [.40DC.0020.0002] # YI SYLLABLE VIEP -A0EA ; [.40DD.0020.0002] # YI SYLLABLE VAT -A0EB ; [.40DE.0020.0002] # YI SYLLABLE VAX -A0EC ; [.40DF.0020.0002] # YI SYLLABLE VA -A0ED ; [.40E0.0020.0002] # YI SYLLABLE VAP -A0EE ; [.40E1.0020.0002] # YI SYLLABLE VOT -A0EF ; [.40E2.0020.0002] # YI SYLLABLE VOX -A0F0 ; [.40E3.0020.0002] # YI SYLLABLE VO -A0F1 ; [.40E4.0020.0002] # YI SYLLABLE VOP -A0F2 ; [.40E5.0020.0002] # YI SYLLABLE VEX -A0F3 ; [.40E6.0020.0002] # YI SYLLABLE VEP -A0F4 ; [.40E7.0020.0002] # YI SYLLABLE VUT -A0F5 ; [.40E8.0020.0002] # YI SYLLABLE VUX -A0F6 ; [.40E9.0020.0002] # YI SYLLABLE VU -A0F7 ; [.40EA.0020.0002] # YI SYLLABLE VUP -A0F8 ; [.40EB.0020.0002] # YI SYLLABLE VURX -A0F9 ; [.40EC.0020.0002] # YI SYLLABLE VUR -A0FA ; [.40ED.0020.0002] # YI SYLLABLE VYT -A0FB ; [.40EE.0020.0002] # YI SYLLABLE VYX -A0FC ; [.40EF.0020.0002] # YI SYLLABLE VY -A0FD ; [.40F0.0020.0002] # YI SYLLABLE VYP -A0FE ; [.40F1.0020.0002] # YI SYLLABLE VYRX -A0FF ; [.40F2.0020.0002] # YI SYLLABLE VYR -A100 ; [.40F3.0020.0002] # YI SYLLABLE DIT -A101 ; [.40F4.0020.0002] # YI SYLLABLE DIX -A102 ; [.40F5.0020.0002] # YI SYLLABLE DI -A103 ; [.40F6.0020.0002] # YI SYLLABLE DIP -A104 ; [.40F7.0020.0002] # YI SYLLABLE DIEX -A105 ; [.40F8.0020.0002] # YI SYLLABLE DIE -A106 ; [.40F9.0020.0002] # YI SYLLABLE DIEP -A107 ; [.40FA.0020.0002] # YI SYLLABLE DAT -A108 ; [.40FB.0020.0002] # YI SYLLABLE DAX -A109 ; [.40FC.0020.0002] # YI SYLLABLE DA -A10A ; [.40FD.0020.0002] # YI SYLLABLE DAP -A10B ; [.40FE.0020.0002] # YI SYLLABLE DUOX -A10C ; [.40FF.0020.0002] # YI SYLLABLE DUO -A10D ; [.4100.0020.0002] # YI SYLLABLE DOT -A10E ; [.4101.0020.0002] # YI SYLLABLE DOX -A10F ; [.4102.0020.0002] # YI SYLLABLE DO -A110 ; [.4103.0020.0002] # YI SYLLABLE DOP -A111 ; [.4104.0020.0002] # YI SYLLABLE DEX -A112 ; [.4105.0020.0002] # YI SYLLABLE DE -A113 ; [.4106.0020.0002] # YI SYLLABLE DEP -A114 ; [.4107.0020.0002] # YI SYLLABLE DUT -A115 ; [.4108.0020.0002] # YI SYLLABLE DUX -A116 ; [.4109.0020.0002] # YI SYLLABLE DU -A117 ; [.410A.0020.0002] # YI SYLLABLE DUP -A118 ; [.410B.0020.0002] # YI SYLLABLE DURX -A119 ; [.410C.0020.0002] # YI SYLLABLE DUR -A11A ; [.410D.0020.0002] # YI SYLLABLE TIT -A11B ; [.410E.0020.0002] # YI SYLLABLE TIX -A11C ; [.410F.0020.0002] # YI SYLLABLE TI -A11D ; [.4110.0020.0002] # YI SYLLABLE TIP -A11E ; [.4111.0020.0002] # YI SYLLABLE TIEX -A11F ; [.4112.0020.0002] # YI SYLLABLE TIE -A120 ; [.4113.0020.0002] # YI SYLLABLE TIEP -A121 ; [.4114.0020.0002] # YI SYLLABLE TAT -A122 ; [.4115.0020.0002] # YI SYLLABLE TAX -A123 ; [.4116.0020.0002] # YI SYLLABLE TA -A124 ; [.4117.0020.0002] # YI SYLLABLE TAP -A125 ; [.4118.0020.0002] # YI SYLLABLE TUOT -A126 ; [.4119.0020.0002] # YI SYLLABLE TUOX -A127 ; [.411A.0020.0002] # YI SYLLABLE TUO -A128 ; [.411B.0020.0002] # YI SYLLABLE TUOP -A129 ; [.411C.0020.0002] # YI SYLLABLE TOT -A12A ; [.411D.0020.0002] # YI SYLLABLE TOX -A12B ; [.411E.0020.0002] # YI SYLLABLE TO -A12C ; [.411F.0020.0002] # YI SYLLABLE TOP -A12D ; [.4120.0020.0002] # YI SYLLABLE TEX -A12E ; [.4121.0020.0002] # YI SYLLABLE TE -A12F ; [.4122.0020.0002] # YI SYLLABLE TEP -A130 ; [.4123.0020.0002] # YI SYLLABLE TUT -A131 ; [.4124.0020.0002] # YI SYLLABLE TUX -A132 ; [.4125.0020.0002] # YI SYLLABLE TU -A133 ; [.4126.0020.0002] # YI SYLLABLE TUP -A134 ; [.4127.0020.0002] # YI SYLLABLE TURX -A135 ; [.4128.0020.0002] # YI SYLLABLE TUR -A136 ; [.4129.0020.0002] # YI SYLLABLE DDIT -A137 ; [.412A.0020.0002] # YI SYLLABLE DDIX -A138 ; [.412B.0020.0002] # YI SYLLABLE DDI -A139 ; [.412C.0020.0002] # YI SYLLABLE DDIP -A13A ; [.412D.0020.0002] # YI SYLLABLE DDIEX -A13B ; [.412E.0020.0002] # YI SYLLABLE DDIE -A13C ; [.412F.0020.0002] # YI SYLLABLE DDIEP -A13D ; [.4130.0020.0002] # YI SYLLABLE DDAT -A13E ; [.4131.0020.0002] # YI SYLLABLE DDAX -A13F ; [.4132.0020.0002] # YI SYLLABLE DDA -A140 ; [.4133.0020.0002] # YI SYLLABLE DDAP -A141 ; [.4134.0020.0002] # YI SYLLABLE DDUOX -A142 ; [.4135.0020.0002] # YI SYLLABLE DDUO -A143 ; [.4136.0020.0002] # YI SYLLABLE DDUOP -A144 ; [.4137.0020.0002] # YI SYLLABLE DDOT -A145 ; [.4138.0020.0002] # YI SYLLABLE DDOX -A146 ; [.4139.0020.0002] # YI SYLLABLE DDO -A147 ; [.413A.0020.0002] # YI SYLLABLE DDOP -A148 ; [.413B.0020.0002] # YI SYLLABLE DDEX -A149 ; [.413C.0020.0002] # YI SYLLABLE DDE -A14A ; [.413D.0020.0002] # YI SYLLABLE DDEP -A14B ; [.413E.0020.0002] # YI SYLLABLE DDUT -A14C ; [.413F.0020.0002] # YI SYLLABLE DDUX -A14D ; [.4140.0020.0002] # YI SYLLABLE DDU -A14E ; [.4141.0020.0002] # YI SYLLABLE DDUP -A14F ; [.4142.0020.0002] # YI SYLLABLE DDURX -A150 ; [.4143.0020.0002] # YI SYLLABLE DDUR -A151 ; [.4144.0020.0002] # YI SYLLABLE NDIT -A152 ; [.4145.0020.0002] # YI SYLLABLE NDIX -A153 ; [.4146.0020.0002] # YI SYLLABLE NDI -A154 ; [.4147.0020.0002] # YI SYLLABLE NDIP -A155 ; [.4148.0020.0002] # YI SYLLABLE NDIEX -A156 ; [.4149.0020.0002] # YI SYLLABLE NDIE -A157 ; [.414A.0020.0002] # YI SYLLABLE NDAT -A158 ; [.414B.0020.0002] # YI SYLLABLE NDAX -A159 ; [.414C.0020.0002] # YI SYLLABLE NDA -A15A ; [.414D.0020.0002] # YI SYLLABLE NDAP -A15B ; [.414E.0020.0002] # YI SYLLABLE NDOT -A15C ; [.414F.0020.0002] # YI SYLLABLE NDOX -A15D ; [.4150.0020.0002] # YI SYLLABLE NDO -A15E ; [.4151.0020.0002] # YI SYLLABLE NDOP -A15F ; [.4152.0020.0002] # YI SYLLABLE NDEX -A160 ; [.4153.0020.0002] # YI SYLLABLE NDE -A161 ; [.4154.0020.0002] # YI SYLLABLE NDEP -A162 ; [.4155.0020.0002] # YI SYLLABLE NDUT -A163 ; [.4156.0020.0002] # YI SYLLABLE NDUX -A164 ; [.4157.0020.0002] # YI SYLLABLE NDU -A165 ; [.4158.0020.0002] # YI SYLLABLE NDUP -A166 ; [.4159.0020.0002] # YI SYLLABLE NDURX -A167 ; [.415A.0020.0002] # YI SYLLABLE NDUR -A168 ; [.415B.0020.0002] # YI SYLLABLE HNIT -A169 ; [.415C.0020.0002] # YI SYLLABLE HNIX -A16A ; [.415D.0020.0002] # YI SYLLABLE HNI -A16B ; [.415E.0020.0002] # YI SYLLABLE HNIP -A16C ; [.415F.0020.0002] # YI SYLLABLE HNIET -A16D ; [.4160.0020.0002] # YI SYLLABLE HNIEX -A16E ; [.4161.0020.0002] # YI SYLLABLE HNIE -A16F ; [.4162.0020.0002] # YI SYLLABLE HNIEP -A170 ; [.4163.0020.0002] # YI SYLLABLE HNAT -A171 ; [.4164.0020.0002] # YI SYLLABLE HNAX -A172 ; [.4165.0020.0002] # YI SYLLABLE HNA -A173 ; [.4166.0020.0002] # YI SYLLABLE HNAP -A174 ; [.4167.0020.0002] # YI SYLLABLE HNUOX -A175 ; [.4168.0020.0002] # YI SYLLABLE HNUO -A176 ; [.4169.0020.0002] # YI SYLLABLE HNOT -A177 ; [.416A.0020.0002] # YI SYLLABLE HNOX -A178 ; [.416B.0020.0002] # YI SYLLABLE HNOP -A179 ; [.416C.0020.0002] # YI SYLLABLE HNEX -A17A ; [.416D.0020.0002] # YI SYLLABLE HNE -A17B ; [.416E.0020.0002] # YI SYLLABLE HNEP -A17C ; [.416F.0020.0002] # YI SYLLABLE HNUT -A17D ; [.4170.0020.0002] # YI SYLLABLE NIT -A17E ; [.4171.0020.0002] # YI SYLLABLE NIX -A17F ; [.4172.0020.0002] # YI SYLLABLE NI -A180 ; [.4173.0020.0002] # YI SYLLABLE NIP -A181 ; [.4174.0020.0002] # YI SYLLABLE NIEX -A182 ; [.4175.0020.0002] # YI SYLLABLE NIE -A183 ; [.4176.0020.0002] # YI SYLLABLE NIEP -A184 ; [.4177.0020.0002] # YI SYLLABLE NAX -A185 ; [.4178.0020.0002] # YI SYLLABLE NA -A186 ; [.4179.0020.0002] # YI SYLLABLE NAP -A187 ; [.417A.0020.0002] # YI SYLLABLE NUOX -A188 ; [.417B.0020.0002] # YI SYLLABLE NUO -A189 ; [.417C.0020.0002] # YI SYLLABLE NUOP -A18A ; [.417D.0020.0002] # YI SYLLABLE NOT -A18B ; [.417E.0020.0002] # YI SYLLABLE NOX -A18C ; [.417F.0020.0002] # YI SYLLABLE NO -A18D ; [.4180.0020.0002] # YI SYLLABLE NOP -A18E ; [.4181.0020.0002] # YI SYLLABLE NEX -A18F ; [.4182.0020.0002] # YI SYLLABLE NE -A190 ; [.4183.0020.0002] # YI SYLLABLE NEP -A191 ; [.4184.0020.0002] # YI SYLLABLE NUT -A192 ; [.4185.0020.0002] # YI SYLLABLE NUX -A193 ; [.4186.0020.0002] # YI SYLLABLE NU -A194 ; [.4187.0020.0002] # YI SYLLABLE NUP -A195 ; [.4188.0020.0002] # YI SYLLABLE NURX -A196 ; [.4189.0020.0002] # YI SYLLABLE NUR -A197 ; [.418A.0020.0002] # YI SYLLABLE HLIT -A198 ; [.418B.0020.0002] # YI SYLLABLE HLIX -A199 ; [.418C.0020.0002] # YI SYLLABLE HLI -A19A ; [.418D.0020.0002] # YI SYLLABLE HLIP -A19B ; [.418E.0020.0002] # YI SYLLABLE HLIEX -A19C ; [.418F.0020.0002] # YI SYLLABLE HLIE -A19D ; [.4190.0020.0002] # YI SYLLABLE HLIEP -A19E ; [.4191.0020.0002] # YI SYLLABLE HLAT -A19F ; [.4192.0020.0002] # YI SYLLABLE HLAX -A1A0 ; [.4193.0020.0002] # YI SYLLABLE HLA -A1A1 ; [.4194.0020.0002] # YI SYLLABLE HLAP -A1A2 ; [.4195.0020.0002] # YI SYLLABLE HLUOX -A1A3 ; [.4196.0020.0002] # YI SYLLABLE HLUO -A1A4 ; [.4197.0020.0002] # YI SYLLABLE HLUOP -A1A5 ; [.4198.0020.0002] # YI SYLLABLE HLOX -A1A6 ; [.4199.0020.0002] # YI SYLLABLE HLO -A1A7 ; [.419A.0020.0002] # YI SYLLABLE HLOP -A1A8 ; [.419B.0020.0002] # YI SYLLABLE HLEX -A1A9 ; [.419C.0020.0002] # YI SYLLABLE HLE -A1AA ; [.419D.0020.0002] # YI SYLLABLE HLEP -A1AB ; [.419E.0020.0002] # YI SYLLABLE HLUT -A1AC ; [.419F.0020.0002] # YI SYLLABLE HLUX -A1AD ; [.41A0.0020.0002] # YI SYLLABLE HLU -A1AE ; [.41A1.0020.0002] # YI SYLLABLE HLUP -A1AF ; [.41A2.0020.0002] # YI SYLLABLE HLURX -A1B0 ; [.41A3.0020.0002] # YI SYLLABLE HLUR -A1B1 ; [.41A4.0020.0002] # YI SYLLABLE HLYT -A1B2 ; [.41A5.0020.0002] # YI SYLLABLE HLYX -A1B3 ; [.41A6.0020.0002] # YI SYLLABLE HLY -A1B4 ; [.41A7.0020.0002] # YI SYLLABLE HLYP -A1B5 ; [.41A8.0020.0002] # YI SYLLABLE HLYRX -A1B6 ; [.41A9.0020.0002] # YI SYLLABLE HLYR -A1B7 ; [.41AA.0020.0002] # YI SYLLABLE LIT -A1B8 ; [.41AB.0020.0002] # YI SYLLABLE LIX -A1B9 ; [.41AC.0020.0002] # YI SYLLABLE LI -A1BA ; [.41AD.0020.0002] # YI SYLLABLE LIP -A1BB ; [.41AE.0020.0002] # YI SYLLABLE LIET -A1BC ; [.41AF.0020.0002] # YI SYLLABLE LIEX -A1BD ; [.41B0.0020.0002] # YI SYLLABLE LIE -A1BE ; [.41B1.0020.0002] # YI SYLLABLE LIEP -A1BF ; [.41B2.0020.0002] # YI SYLLABLE LAT -A1C0 ; [.41B3.0020.0002] # YI SYLLABLE LAX -A1C1 ; [.41B4.0020.0002] # YI SYLLABLE LA -A1C2 ; [.41B5.0020.0002] # YI SYLLABLE LAP -A1C3 ; [.41B6.0020.0002] # YI SYLLABLE LUOT -A1C4 ; [.41B7.0020.0002] # YI SYLLABLE LUOX -A1C5 ; [.41B8.0020.0002] # YI SYLLABLE LUO -A1C6 ; [.41B9.0020.0002] # YI SYLLABLE LUOP -A1C7 ; [.41BA.0020.0002] # YI SYLLABLE LOT -A1C8 ; [.41BB.0020.0002] # YI SYLLABLE LOX -A1C9 ; [.41BC.0020.0002] # YI SYLLABLE LO -A1CA ; [.41BD.0020.0002] # YI SYLLABLE LOP -A1CB ; [.41BE.0020.0002] # YI SYLLABLE LEX -A1CC ; [.41BF.0020.0002] # YI SYLLABLE LE -A1CD ; [.41C0.0020.0002] # YI SYLLABLE LEP -A1CE ; [.41C1.0020.0002] # YI SYLLABLE LUT -A1CF ; [.41C2.0020.0002] # YI SYLLABLE LUX -A1D0 ; [.41C3.0020.0002] # YI SYLLABLE LU -A1D1 ; [.41C4.0020.0002] # YI SYLLABLE LUP -A1D2 ; [.41C5.0020.0002] # YI SYLLABLE LURX -A1D3 ; [.41C6.0020.0002] # YI SYLLABLE LUR -A1D4 ; [.41C7.0020.0002] # YI SYLLABLE LYT -A1D5 ; [.41C8.0020.0002] # YI SYLLABLE LYX -A1D6 ; [.41C9.0020.0002] # YI SYLLABLE LY -A1D7 ; [.41CA.0020.0002] # YI SYLLABLE LYP -A1D8 ; [.41CB.0020.0002] # YI SYLLABLE LYRX -A1D9 ; [.41CC.0020.0002] # YI SYLLABLE LYR -A1DA ; [.41CD.0020.0002] # YI SYLLABLE GIT -A1DB ; [.41CE.0020.0002] # YI SYLLABLE GIX -A1DC ; [.41CF.0020.0002] # YI SYLLABLE GI -A1DD ; [.41D0.0020.0002] # YI SYLLABLE GIP -A1DE ; [.41D1.0020.0002] # YI SYLLABLE GIET -A1DF ; [.41D2.0020.0002] # YI SYLLABLE GIEX -A1E0 ; [.41D3.0020.0002] # YI SYLLABLE GIE -A1E1 ; [.41D4.0020.0002] # YI SYLLABLE GIEP -A1E2 ; [.41D5.0020.0002] # YI SYLLABLE GAT -A1E3 ; [.41D6.0020.0002] # YI SYLLABLE GAX -A1E4 ; [.41D7.0020.0002] # YI SYLLABLE GA -A1E5 ; [.41D8.0020.0002] # YI SYLLABLE GAP -A1E6 ; [.41D9.0020.0002] # YI SYLLABLE GUOT -A1E7 ; [.41DA.0020.0002] # YI SYLLABLE GUOX -A1E8 ; [.41DB.0020.0002] # YI SYLLABLE GUO -A1E9 ; [.41DC.0020.0002] # YI SYLLABLE GUOP -A1EA ; [.41DD.0020.0002] # YI SYLLABLE GOT -A1EB ; [.41DE.0020.0002] # YI SYLLABLE GOX -A1EC ; [.41DF.0020.0002] # YI SYLLABLE GO -A1ED ; [.41E0.0020.0002] # YI SYLLABLE GOP -A1EE ; [.41E1.0020.0002] # YI SYLLABLE GET -A1EF ; [.41E2.0020.0002] # YI SYLLABLE GEX -A1F0 ; [.41E3.0020.0002] # YI SYLLABLE GE -A1F1 ; [.41E4.0020.0002] # YI SYLLABLE GEP -A1F2 ; [.41E5.0020.0002] # YI SYLLABLE GUT -A1F3 ; [.41E6.0020.0002] # YI SYLLABLE GUX -A1F4 ; [.41E7.0020.0002] # YI SYLLABLE GU -A1F5 ; [.41E8.0020.0002] # YI SYLLABLE GUP -A1F6 ; [.41E9.0020.0002] # YI SYLLABLE GURX -A1F7 ; [.41EA.0020.0002] # YI SYLLABLE GUR -A1F8 ; [.41EB.0020.0002] # YI SYLLABLE KIT -A1F9 ; [.41EC.0020.0002] # YI SYLLABLE KIX -A1FA ; [.41ED.0020.0002] # YI SYLLABLE KI -A1FB ; [.41EE.0020.0002] # YI SYLLABLE KIP -A1FC ; [.41EF.0020.0002] # YI SYLLABLE KIEX -A1FD ; [.41F0.0020.0002] # YI SYLLABLE KIE -A1FE ; [.41F1.0020.0002] # YI SYLLABLE KIEP -A1FF ; [.41F2.0020.0002] # YI SYLLABLE KAT -A200 ; [.41F3.0020.0002] # YI SYLLABLE KAX -A201 ; [.41F4.0020.0002] # YI SYLLABLE KA -A202 ; [.41F5.0020.0002] # YI SYLLABLE KAP -A203 ; [.41F6.0020.0002] # YI SYLLABLE KUOX -A204 ; [.41F7.0020.0002] # YI SYLLABLE KUO -A205 ; [.41F8.0020.0002] # YI SYLLABLE KUOP -A206 ; [.41F9.0020.0002] # YI SYLLABLE KOT -A207 ; [.41FA.0020.0002] # YI SYLLABLE KOX -A208 ; [.41FB.0020.0002] # YI SYLLABLE KO -A209 ; [.41FC.0020.0002] # YI SYLLABLE KOP -A20A ; [.41FD.0020.0002] # YI SYLLABLE KET -A20B ; [.41FE.0020.0002] # YI SYLLABLE KEX -A20C ; [.41FF.0020.0002] # YI SYLLABLE KE -A20D ; [.4200.0020.0002] # YI SYLLABLE KEP -A20E ; [.4201.0020.0002] # YI SYLLABLE KUT -A20F ; [.4202.0020.0002] # YI SYLLABLE KUX -A210 ; [.4203.0020.0002] # YI SYLLABLE KU -A211 ; [.4204.0020.0002] # YI SYLLABLE KUP -A212 ; [.4205.0020.0002] # YI SYLLABLE KURX -A213 ; [.4206.0020.0002] # YI SYLLABLE KUR -A214 ; [.4207.0020.0002] # YI SYLLABLE GGIT -A215 ; [.4208.0020.0002] # YI SYLLABLE GGIX -A216 ; [.4209.0020.0002] # YI SYLLABLE GGI -A217 ; [.420A.0020.0002] # YI SYLLABLE GGIEX -A218 ; [.420B.0020.0002] # YI SYLLABLE GGIE -A219 ; [.420C.0020.0002] # YI SYLLABLE GGIEP -A21A ; [.420D.0020.0002] # YI SYLLABLE GGAT -A21B ; [.420E.0020.0002] # YI SYLLABLE GGAX -A21C ; [.420F.0020.0002] # YI SYLLABLE GGA -A21D ; [.4210.0020.0002] # YI SYLLABLE GGAP -A21E ; [.4211.0020.0002] # YI SYLLABLE GGUOT -A21F ; [.4212.0020.0002] # YI SYLLABLE GGUOX -A220 ; [.4213.0020.0002] # YI SYLLABLE GGUO -A221 ; [.4214.0020.0002] # YI SYLLABLE GGUOP -A222 ; [.4215.0020.0002] # YI SYLLABLE GGOT -A223 ; [.4216.0020.0002] # YI SYLLABLE GGOX -A224 ; [.4217.0020.0002] # YI SYLLABLE GGO -A225 ; [.4218.0020.0002] # YI SYLLABLE GGOP -A226 ; [.4219.0020.0002] # YI SYLLABLE GGET -A227 ; [.421A.0020.0002] # YI SYLLABLE GGEX -A228 ; [.421B.0020.0002] # YI SYLLABLE GGE -A229 ; [.421C.0020.0002] # YI SYLLABLE GGEP -A22A ; [.421D.0020.0002] # YI SYLLABLE GGUT -A22B ; [.421E.0020.0002] # YI SYLLABLE GGUX -A22C ; [.421F.0020.0002] # YI SYLLABLE GGU -A22D ; [.4220.0020.0002] # YI SYLLABLE GGUP -A22E ; [.4221.0020.0002] # YI SYLLABLE GGURX -A22F ; [.4222.0020.0002] # YI SYLLABLE GGUR -A230 ; [.4223.0020.0002] # YI SYLLABLE MGIEX -A231 ; [.4224.0020.0002] # YI SYLLABLE MGIE -A232 ; [.4225.0020.0002] # YI SYLLABLE MGAT -A233 ; [.4226.0020.0002] # YI SYLLABLE MGAX -A234 ; [.4227.0020.0002] # YI SYLLABLE MGA -A235 ; [.4228.0020.0002] # YI SYLLABLE MGAP -A236 ; [.4229.0020.0002] # YI SYLLABLE MGUOX -A237 ; [.422A.0020.0002] # YI SYLLABLE MGUO -A238 ; [.422B.0020.0002] # YI SYLLABLE MGUOP -A239 ; [.422C.0020.0002] # YI SYLLABLE MGOT -A23A ; [.422D.0020.0002] # YI SYLLABLE MGOX -A23B ; [.422E.0020.0002] # YI SYLLABLE MGO -A23C ; [.422F.0020.0002] # YI SYLLABLE MGOP -A23D ; [.4230.0020.0002] # YI SYLLABLE MGEX -A23E ; [.4231.0020.0002] # YI SYLLABLE MGE -A23F ; [.4232.0020.0002] # YI SYLLABLE MGEP -A240 ; [.4233.0020.0002] # YI SYLLABLE MGUT -A241 ; [.4234.0020.0002] # YI SYLLABLE MGUX -A242 ; [.4235.0020.0002] # YI SYLLABLE MGU -A243 ; [.4236.0020.0002] # YI SYLLABLE MGUP -A244 ; [.4237.0020.0002] # YI SYLLABLE MGURX -A245 ; [.4238.0020.0002] # YI SYLLABLE MGUR -A246 ; [.4239.0020.0002] # YI SYLLABLE HXIT -A247 ; [.423A.0020.0002] # YI SYLLABLE HXIX -A248 ; [.423B.0020.0002] # YI SYLLABLE HXI -A249 ; [.423C.0020.0002] # YI SYLLABLE HXIP -A24A ; [.423D.0020.0002] # YI SYLLABLE HXIET -A24B ; [.423E.0020.0002] # YI SYLLABLE HXIEX -A24C ; [.423F.0020.0002] # YI SYLLABLE HXIE -A24D ; [.4240.0020.0002] # YI SYLLABLE HXIEP -A24E ; [.4241.0020.0002] # YI SYLLABLE HXAT -A24F ; [.4242.0020.0002] # YI SYLLABLE HXAX -A250 ; [.4243.0020.0002] # YI SYLLABLE HXA -A251 ; [.4244.0020.0002] # YI SYLLABLE HXAP -A252 ; [.4245.0020.0002] # YI SYLLABLE HXUOT -A253 ; [.4246.0020.0002] # YI SYLLABLE HXUOX -A254 ; [.4247.0020.0002] # YI SYLLABLE HXUO -A255 ; [.4248.0020.0002] # YI SYLLABLE HXUOP -A256 ; [.4249.0020.0002] # YI SYLLABLE HXOT -A257 ; [.424A.0020.0002] # YI SYLLABLE HXOX -A258 ; [.424B.0020.0002] # YI SYLLABLE HXO -A259 ; [.424C.0020.0002] # YI SYLLABLE HXOP -A25A ; [.424D.0020.0002] # YI SYLLABLE HXEX -A25B ; [.424E.0020.0002] # YI SYLLABLE HXE -A25C ; [.424F.0020.0002] # YI SYLLABLE HXEP -A25D ; [.4250.0020.0002] # YI SYLLABLE NGIEX -A25E ; [.4251.0020.0002] # YI SYLLABLE NGIE -A25F ; [.4252.0020.0002] # YI SYLLABLE NGIEP -A260 ; [.4253.0020.0002] # YI SYLLABLE NGAT -A261 ; [.4254.0020.0002] # YI SYLLABLE NGAX -A262 ; [.4255.0020.0002] # YI SYLLABLE NGA -A263 ; [.4256.0020.0002] # YI SYLLABLE NGAP -A264 ; [.4257.0020.0002] # YI SYLLABLE NGUOT -A265 ; [.4258.0020.0002] # YI SYLLABLE NGUOX -A266 ; [.4259.0020.0002] # YI SYLLABLE NGUO -A267 ; [.425A.0020.0002] # YI SYLLABLE NGOT -A268 ; [.425B.0020.0002] # YI SYLLABLE NGOX -A269 ; [.425C.0020.0002] # YI SYLLABLE NGO -A26A ; [.425D.0020.0002] # YI SYLLABLE NGOP -A26B ; [.425E.0020.0002] # YI SYLLABLE NGEX -A26C ; [.425F.0020.0002] # YI SYLLABLE NGE -A26D ; [.4260.0020.0002] # YI SYLLABLE NGEP -A26E ; [.4261.0020.0002] # YI SYLLABLE HIT -A26F ; [.4262.0020.0002] # YI SYLLABLE HIEX -A270 ; [.4263.0020.0002] # YI SYLLABLE HIE -A271 ; [.4264.0020.0002] # YI SYLLABLE HAT -A272 ; [.4265.0020.0002] # YI SYLLABLE HAX -A273 ; [.4266.0020.0002] # YI SYLLABLE HA -A274 ; [.4267.0020.0002] # YI SYLLABLE HAP -A275 ; [.4268.0020.0002] # YI SYLLABLE HUOT -A276 ; [.4269.0020.0002] # YI SYLLABLE HUOX -A277 ; [.426A.0020.0002] # YI SYLLABLE HUO -A278 ; [.426B.0020.0002] # YI SYLLABLE HUOP -A279 ; [.426C.0020.0002] # YI SYLLABLE HOT -A27A ; [.426D.0020.0002] # YI SYLLABLE HOX -A27B ; [.426E.0020.0002] # YI SYLLABLE HO -A27C ; [.426F.0020.0002] # YI SYLLABLE HOP -A27D ; [.4270.0020.0002] # YI SYLLABLE HEX -A27E ; [.4271.0020.0002] # YI SYLLABLE HE -A27F ; [.4272.0020.0002] # YI SYLLABLE HEP -A280 ; [.4273.0020.0002] # YI SYLLABLE WAT -A281 ; [.4274.0020.0002] # YI SYLLABLE WAX -A282 ; [.4275.0020.0002] # YI SYLLABLE WA -A283 ; [.4276.0020.0002] # YI SYLLABLE WAP -A284 ; [.4277.0020.0002] # YI SYLLABLE WUOX -A285 ; [.4278.0020.0002] # YI SYLLABLE WUO -A286 ; [.4279.0020.0002] # YI SYLLABLE WUOP -A287 ; [.427A.0020.0002] # YI SYLLABLE WOX -A288 ; [.427B.0020.0002] # YI SYLLABLE WO -A289 ; [.427C.0020.0002] # YI SYLLABLE WOP -A28A ; [.427D.0020.0002] # YI SYLLABLE WEX -A28B ; [.427E.0020.0002] # YI SYLLABLE WE -A28C ; [.427F.0020.0002] # YI SYLLABLE WEP -A28D ; [.4280.0020.0002] # YI SYLLABLE ZIT -A28E ; [.4281.0020.0002] # YI SYLLABLE ZIX -A28F ; [.4282.0020.0002] # YI SYLLABLE ZI -A290 ; [.4283.0020.0002] # YI SYLLABLE ZIP -A291 ; [.4284.0020.0002] # YI SYLLABLE ZIEX -A292 ; [.4285.0020.0002] # YI SYLLABLE ZIE -A293 ; [.4286.0020.0002] # YI SYLLABLE ZIEP -A294 ; [.4287.0020.0002] # YI SYLLABLE ZAT -A295 ; [.4288.0020.0002] # YI SYLLABLE ZAX -A296 ; [.4289.0020.0002] # YI SYLLABLE ZA -A297 ; [.428A.0020.0002] # YI SYLLABLE ZAP -A298 ; [.428B.0020.0002] # YI SYLLABLE ZUOX -A299 ; [.428C.0020.0002] # YI SYLLABLE ZUO -A29A ; [.428D.0020.0002] # YI SYLLABLE ZUOP -A29B ; [.428E.0020.0002] # YI SYLLABLE ZOT -A29C ; [.428F.0020.0002] # YI SYLLABLE ZOX -A29D ; [.4290.0020.0002] # YI SYLLABLE ZO -A29E ; [.4291.0020.0002] # YI SYLLABLE ZOP -A29F ; [.4292.0020.0002] # YI SYLLABLE ZEX -A2A0 ; [.4293.0020.0002] # YI SYLLABLE ZE -A2A1 ; [.4294.0020.0002] # YI SYLLABLE ZEP -A2A2 ; [.4295.0020.0002] # YI SYLLABLE ZUT -A2A3 ; [.4296.0020.0002] # YI SYLLABLE ZUX -A2A4 ; [.4297.0020.0002] # YI SYLLABLE ZU -A2A5 ; [.4298.0020.0002] # YI SYLLABLE ZUP -A2A6 ; [.4299.0020.0002] # YI SYLLABLE ZURX -A2A7 ; [.429A.0020.0002] # YI SYLLABLE ZUR -A2A8 ; [.429B.0020.0002] # YI SYLLABLE ZYT -A2A9 ; [.429C.0020.0002] # YI SYLLABLE ZYX -A2AA ; [.429D.0020.0002] # YI SYLLABLE ZY -A2AB ; [.429E.0020.0002] # YI SYLLABLE ZYP -A2AC ; [.429F.0020.0002] # YI SYLLABLE ZYRX -A2AD ; [.42A0.0020.0002] # YI SYLLABLE ZYR -A2AE ; [.42A1.0020.0002] # YI SYLLABLE CIT -A2AF ; [.42A2.0020.0002] # YI SYLLABLE CIX -A2B0 ; [.42A3.0020.0002] # YI SYLLABLE CI -A2B1 ; [.42A4.0020.0002] # YI SYLLABLE CIP -A2B2 ; [.42A5.0020.0002] # YI SYLLABLE CIET -A2B3 ; [.42A6.0020.0002] # YI SYLLABLE CIEX -A2B4 ; [.42A7.0020.0002] # YI SYLLABLE CIE -A2B5 ; [.42A8.0020.0002] # YI SYLLABLE CIEP -A2B6 ; [.42A9.0020.0002] # YI SYLLABLE CAT -A2B7 ; [.42AA.0020.0002] # YI SYLLABLE CAX -A2B8 ; [.42AB.0020.0002] # YI SYLLABLE CA -A2B9 ; [.42AC.0020.0002] # YI SYLLABLE CAP -A2BA ; [.42AD.0020.0002] # YI SYLLABLE CUOX -A2BB ; [.42AE.0020.0002] # YI SYLLABLE CUO -A2BC ; [.42AF.0020.0002] # YI SYLLABLE CUOP -A2BD ; [.42B0.0020.0002] # YI SYLLABLE COT -A2BE ; [.42B1.0020.0002] # YI SYLLABLE COX -A2BF ; [.42B2.0020.0002] # YI SYLLABLE CO -A2C0 ; [.42B3.0020.0002] # YI SYLLABLE COP -A2C1 ; [.42B4.0020.0002] # YI SYLLABLE CEX -A2C2 ; [.42B5.0020.0002] # YI SYLLABLE CE -A2C3 ; [.42B6.0020.0002] # YI SYLLABLE CEP -A2C4 ; [.42B7.0020.0002] # YI SYLLABLE CUT -A2C5 ; [.42B8.0020.0002] # YI SYLLABLE CUX -A2C6 ; [.42B9.0020.0002] # YI SYLLABLE CU -A2C7 ; [.42BA.0020.0002] # YI SYLLABLE CUP -A2C8 ; [.42BB.0020.0002] # YI SYLLABLE CURX -A2C9 ; [.42BC.0020.0002] # YI SYLLABLE CUR -A2CA ; [.42BD.0020.0002] # YI SYLLABLE CYT -A2CB ; [.42BE.0020.0002] # YI SYLLABLE CYX -A2CC ; [.42BF.0020.0002] # YI SYLLABLE CY -A2CD ; [.42C0.0020.0002] # YI SYLLABLE CYP -A2CE ; [.42C1.0020.0002] # YI SYLLABLE CYRX -A2CF ; [.42C2.0020.0002] # YI SYLLABLE CYR -A2D0 ; [.42C3.0020.0002] # YI SYLLABLE ZZIT -A2D1 ; [.42C4.0020.0002] # YI SYLLABLE ZZIX -A2D2 ; [.42C5.0020.0002] # YI SYLLABLE ZZI -A2D3 ; [.42C6.0020.0002] # YI SYLLABLE ZZIP -A2D4 ; [.42C7.0020.0002] # YI SYLLABLE ZZIET -A2D5 ; [.42C8.0020.0002] # YI SYLLABLE ZZIEX -A2D6 ; [.42C9.0020.0002] # YI SYLLABLE ZZIE -A2D7 ; [.42CA.0020.0002] # YI SYLLABLE ZZIEP -A2D8 ; [.42CB.0020.0002] # YI SYLLABLE ZZAT -A2D9 ; [.42CC.0020.0002] # YI SYLLABLE ZZAX -A2DA ; [.42CD.0020.0002] # YI SYLLABLE ZZA -A2DB ; [.42CE.0020.0002] # YI SYLLABLE ZZAP -A2DC ; [.42CF.0020.0002] # YI SYLLABLE ZZOX -A2DD ; [.42D0.0020.0002] # YI SYLLABLE ZZO -A2DE ; [.42D1.0020.0002] # YI SYLLABLE ZZOP -A2DF ; [.42D2.0020.0002] # YI SYLLABLE ZZEX -A2E0 ; [.42D3.0020.0002] # YI SYLLABLE ZZE -A2E1 ; [.42D4.0020.0002] # YI SYLLABLE ZZEP -A2E2 ; [.42D5.0020.0002] # YI SYLLABLE ZZUX -A2E3 ; [.42D6.0020.0002] # YI SYLLABLE ZZU -A2E4 ; [.42D7.0020.0002] # YI SYLLABLE ZZUP -A2E5 ; [.42D8.0020.0002] # YI SYLLABLE ZZURX -A2E6 ; [.42D9.0020.0002] # YI SYLLABLE ZZUR -A2E7 ; [.42DA.0020.0002] # YI SYLLABLE ZZYT -A2E8 ; [.42DB.0020.0002] # YI SYLLABLE ZZYX -A2E9 ; [.42DC.0020.0002] # YI SYLLABLE ZZY -A2EA ; [.42DD.0020.0002] # YI SYLLABLE ZZYP -A2EB ; [.42DE.0020.0002] # YI SYLLABLE ZZYRX -A2EC ; [.42DF.0020.0002] # YI SYLLABLE ZZYR -A2ED ; [.42E0.0020.0002] # YI SYLLABLE NZIT -A2EE ; [.42E1.0020.0002] # YI SYLLABLE NZIX -A2EF ; [.42E2.0020.0002] # YI SYLLABLE NZI -A2F0 ; [.42E3.0020.0002] # YI SYLLABLE NZIP -A2F1 ; [.42E4.0020.0002] # YI SYLLABLE NZIEX -A2F2 ; [.42E5.0020.0002] # YI SYLLABLE NZIE -A2F3 ; [.42E6.0020.0002] # YI SYLLABLE NZIEP -A2F4 ; [.42E7.0020.0002] # YI SYLLABLE NZAT -A2F5 ; [.42E8.0020.0002] # YI SYLLABLE NZAX -A2F6 ; [.42E9.0020.0002] # YI SYLLABLE NZA -A2F7 ; [.42EA.0020.0002] # YI SYLLABLE NZAP -A2F8 ; [.42EB.0020.0002] # YI SYLLABLE NZUOX -A2F9 ; [.42EC.0020.0002] # YI SYLLABLE NZUO -A2FA ; [.42ED.0020.0002] # YI SYLLABLE NZOX -A2FB ; [.42EE.0020.0002] # YI SYLLABLE NZOP -A2FC ; [.42EF.0020.0002] # YI SYLLABLE NZEX -A2FD ; [.42F0.0020.0002] # YI SYLLABLE NZE -A2FE ; [.42F1.0020.0002] # YI SYLLABLE NZUX -A2FF ; [.42F2.0020.0002] # YI SYLLABLE NZU -A300 ; [.42F3.0020.0002] # YI SYLLABLE NZUP -A301 ; [.42F4.0020.0002] # YI SYLLABLE NZURX -A302 ; [.42F5.0020.0002] # YI SYLLABLE NZUR -A303 ; [.42F6.0020.0002] # YI SYLLABLE NZYT -A304 ; [.42F7.0020.0002] # YI SYLLABLE NZYX -A305 ; [.42F8.0020.0002] # YI SYLLABLE NZY -A306 ; [.42F9.0020.0002] # YI SYLLABLE NZYP -A307 ; [.42FA.0020.0002] # YI SYLLABLE NZYRX -A308 ; [.42FB.0020.0002] # YI SYLLABLE NZYR -A309 ; [.42FC.0020.0002] # YI SYLLABLE SIT -A30A ; [.42FD.0020.0002] # YI SYLLABLE SIX -A30B ; [.42FE.0020.0002] # YI SYLLABLE SI -A30C ; [.42FF.0020.0002] # YI SYLLABLE SIP -A30D ; [.4300.0020.0002] # YI SYLLABLE SIEX -A30E ; [.4301.0020.0002] # YI SYLLABLE SIE -A30F ; [.4302.0020.0002] # YI SYLLABLE SIEP -A310 ; [.4303.0020.0002] # YI SYLLABLE SAT -A311 ; [.4304.0020.0002] # YI SYLLABLE SAX -A312 ; [.4305.0020.0002] # YI SYLLABLE SA -A313 ; [.4306.0020.0002] # YI SYLLABLE SAP -A314 ; [.4307.0020.0002] # YI SYLLABLE SUOX -A315 ; [.4308.0020.0002] # YI SYLLABLE SUO -A316 ; [.4309.0020.0002] # YI SYLLABLE SUOP -A317 ; [.430A.0020.0002] # YI SYLLABLE SOT -A318 ; [.430B.0020.0002] # YI SYLLABLE SOX -A319 ; [.430C.0020.0002] # YI SYLLABLE SO -A31A ; [.430D.0020.0002] # YI SYLLABLE SOP -A31B ; [.430E.0020.0002] # YI SYLLABLE SEX -A31C ; [.430F.0020.0002] # YI SYLLABLE SE -A31D ; [.4310.0020.0002] # YI SYLLABLE SEP -A31E ; [.4311.0020.0002] # YI SYLLABLE SUT -A31F ; [.4312.0020.0002] # YI SYLLABLE SUX -A320 ; [.4313.0020.0002] # YI SYLLABLE SU -A321 ; [.4314.0020.0002] # YI SYLLABLE SUP -A322 ; [.4315.0020.0002] # YI SYLLABLE SURX -A323 ; [.4316.0020.0002] # YI SYLLABLE SUR -A324 ; [.4317.0020.0002] # YI SYLLABLE SYT -A325 ; [.4318.0020.0002] # YI SYLLABLE SYX -A326 ; [.4319.0020.0002] # YI SYLLABLE SY -A327 ; [.431A.0020.0002] # YI SYLLABLE SYP -A328 ; [.431B.0020.0002] # YI SYLLABLE SYRX -A329 ; [.431C.0020.0002] # YI SYLLABLE SYR -A32A ; [.431D.0020.0002] # YI SYLLABLE SSIT -A32B ; [.431E.0020.0002] # YI SYLLABLE SSIX -A32C ; [.431F.0020.0002] # YI SYLLABLE SSI -A32D ; [.4320.0020.0002] # YI SYLLABLE SSIP -A32E ; [.4321.0020.0002] # YI SYLLABLE SSIEX -A32F ; [.4322.0020.0002] # YI SYLLABLE SSIE -A330 ; [.4323.0020.0002] # YI SYLLABLE SSIEP -A331 ; [.4324.0020.0002] # YI SYLLABLE SSAT -A332 ; [.4325.0020.0002] # YI SYLLABLE SSAX -A333 ; [.4326.0020.0002] # YI SYLLABLE SSA -A334 ; [.4327.0020.0002] # YI SYLLABLE SSAP -A335 ; [.4328.0020.0002] # YI SYLLABLE SSOT -A336 ; [.4329.0020.0002] # YI SYLLABLE SSOX -A337 ; [.432A.0020.0002] # YI SYLLABLE SSO -A338 ; [.432B.0020.0002] # YI SYLLABLE SSOP -A339 ; [.432C.0020.0002] # YI SYLLABLE SSEX -A33A ; [.432D.0020.0002] # YI SYLLABLE SSE -A33B ; [.432E.0020.0002] # YI SYLLABLE SSEP -A33C ; [.432F.0020.0002] # YI SYLLABLE SSUT -A33D ; [.4330.0020.0002] # YI SYLLABLE SSUX -A33E ; [.4331.0020.0002] # YI SYLLABLE SSU -A33F ; [.4332.0020.0002] # YI SYLLABLE SSUP -A340 ; [.4333.0020.0002] # YI SYLLABLE SSYT -A341 ; [.4334.0020.0002] # YI SYLLABLE SSYX -A342 ; [.4335.0020.0002] # YI SYLLABLE SSY -A343 ; [.4336.0020.0002] # YI SYLLABLE SSYP -A344 ; [.4337.0020.0002] # YI SYLLABLE SSYRX -A345 ; [.4338.0020.0002] # YI SYLLABLE SSYR -A346 ; [.4339.0020.0002] # YI SYLLABLE ZHAT -A347 ; [.433A.0020.0002] # YI SYLLABLE ZHAX -A348 ; [.433B.0020.0002] # YI SYLLABLE ZHA -A349 ; [.433C.0020.0002] # YI SYLLABLE ZHAP -A34A ; [.433D.0020.0002] # YI SYLLABLE ZHUOX -A34B ; [.433E.0020.0002] # YI SYLLABLE ZHUO -A34C ; [.433F.0020.0002] # YI SYLLABLE ZHUOP -A34D ; [.4340.0020.0002] # YI SYLLABLE ZHOT -A34E ; [.4341.0020.0002] # YI SYLLABLE ZHOX -A34F ; [.4342.0020.0002] # YI SYLLABLE ZHO -A350 ; [.4343.0020.0002] # YI SYLLABLE ZHOP -A351 ; [.4344.0020.0002] # YI SYLLABLE ZHET -A352 ; [.4345.0020.0002] # YI SYLLABLE ZHEX -A353 ; [.4346.0020.0002] # YI SYLLABLE ZHE -A354 ; [.4347.0020.0002] # YI SYLLABLE ZHEP -A355 ; [.4348.0020.0002] # YI SYLLABLE ZHUT -A356 ; [.4349.0020.0002] # YI SYLLABLE ZHUX -A357 ; [.434A.0020.0002] # YI SYLLABLE ZHU -A358 ; [.434B.0020.0002] # YI SYLLABLE ZHUP -A359 ; [.434C.0020.0002] # YI SYLLABLE ZHURX -A35A ; [.434D.0020.0002] # YI SYLLABLE ZHUR -A35B ; [.434E.0020.0002] # YI SYLLABLE ZHYT -A35C ; [.434F.0020.0002] # YI SYLLABLE ZHYX -A35D ; [.4350.0020.0002] # YI SYLLABLE ZHY -A35E ; [.4351.0020.0002] # YI SYLLABLE ZHYP -A35F ; [.4352.0020.0002] # YI SYLLABLE ZHYRX -A360 ; [.4353.0020.0002] # YI SYLLABLE ZHYR -A361 ; [.4354.0020.0002] # YI SYLLABLE CHAT -A362 ; [.4355.0020.0002] # YI SYLLABLE CHAX -A363 ; [.4356.0020.0002] # YI SYLLABLE CHA -A364 ; [.4357.0020.0002] # YI SYLLABLE CHAP -A365 ; [.4358.0020.0002] # YI SYLLABLE CHUOT -A366 ; [.4359.0020.0002] # YI SYLLABLE CHUOX -A367 ; [.435A.0020.0002] # YI SYLLABLE CHUO -A368 ; [.435B.0020.0002] # YI SYLLABLE CHUOP -A369 ; [.435C.0020.0002] # YI SYLLABLE CHOT -A36A ; [.435D.0020.0002] # YI SYLLABLE CHOX -A36B ; [.435E.0020.0002] # YI SYLLABLE CHO -A36C ; [.435F.0020.0002] # YI SYLLABLE CHOP -A36D ; [.4360.0020.0002] # YI SYLLABLE CHET -A36E ; [.4361.0020.0002] # YI SYLLABLE CHEX -A36F ; [.4362.0020.0002] # YI SYLLABLE CHE -A370 ; [.4363.0020.0002] # YI SYLLABLE CHEP -A371 ; [.4364.0020.0002] # YI SYLLABLE CHUX -A372 ; [.4365.0020.0002] # YI SYLLABLE CHU -A373 ; [.4366.0020.0002] # YI SYLLABLE CHUP -A374 ; [.4367.0020.0002] # YI SYLLABLE CHURX -A375 ; [.4368.0020.0002] # YI SYLLABLE CHUR -A376 ; [.4369.0020.0002] # YI SYLLABLE CHYT -A377 ; [.436A.0020.0002] # YI SYLLABLE CHYX -A378 ; [.436B.0020.0002] # YI SYLLABLE CHY -A379 ; [.436C.0020.0002] # YI SYLLABLE CHYP -A37A ; [.436D.0020.0002] # YI SYLLABLE CHYRX -A37B ; [.436E.0020.0002] # YI SYLLABLE CHYR -A37C ; [.436F.0020.0002] # YI SYLLABLE RRAX -A37D ; [.4370.0020.0002] # YI SYLLABLE RRA -A37E ; [.4371.0020.0002] # YI SYLLABLE RRUOX -A37F ; [.4372.0020.0002] # YI SYLLABLE RRUO -A380 ; [.4373.0020.0002] # YI SYLLABLE RROT -A381 ; [.4374.0020.0002] # YI SYLLABLE RROX -A382 ; [.4375.0020.0002] # YI SYLLABLE RRO -A383 ; [.4376.0020.0002] # YI SYLLABLE RROP -A384 ; [.4377.0020.0002] # YI SYLLABLE RRET -A385 ; [.4378.0020.0002] # YI SYLLABLE RREX -A386 ; [.4379.0020.0002] # YI SYLLABLE RRE -A387 ; [.437A.0020.0002] # YI SYLLABLE RREP -A388 ; [.437B.0020.0002] # YI SYLLABLE RRUT -A389 ; [.437C.0020.0002] # YI SYLLABLE RRUX -A38A ; [.437D.0020.0002] # YI SYLLABLE RRU -A38B ; [.437E.0020.0002] # YI SYLLABLE RRUP -A38C ; [.437F.0020.0002] # YI SYLLABLE RRURX -A38D ; [.4380.0020.0002] # YI SYLLABLE RRUR -A38E ; [.4381.0020.0002] # YI SYLLABLE RRYT -A38F ; [.4382.0020.0002] # YI SYLLABLE RRYX -A390 ; [.4383.0020.0002] # YI SYLLABLE RRY -A391 ; [.4384.0020.0002] # YI SYLLABLE RRYP -A392 ; [.4385.0020.0002] # YI SYLLABLE RRYRX -A393 ; [.4386.0020.0002] # YI SYLLABLE RRYR -A394 ; [.4387.0020.0002] # YI SYLLABLE NRAT -A395 ; [.4388.0020.0002] # YI SYLLABLE NRAX -A396 ; [.4389.0020.0002] # YI SYLLABLE NRA -A397 ; [.438A.0020.0002] # YI SYLLABLE NRAP -A398 ; [.438B.0020.0002] # YI SYLLABLE NROX -A399 ; [.438C.0020.0002] # YI SYLLABLE NRO -A39A ; [.438D.0020.0002] # YI SYLLABLE NROP -A39B ; [.438E.0020.0002] # YI SYLLABLE NRET -A39C ; [.438F.0020.0002] # YI SYLLABLE NREX -A39D ; [.4390.0020.0002] # YI SYLLABLE NRE -A39E ; [.4391.0020.0002] # YI SYLLABLE NREP -A39F ; [.4392.0020.0002] # YI SYLLABLE NRUT -A3A0 ; [.4393.0020.0002] # YI SYLLABLE NRUX -A3A1 ; [.4394.0020.0002] # YI SYLLABLE NRU -A3A2 ; [.4395.0020.0002] # YI SYLLABLE NRUP -A3A3 ; [.4396.0020.0002] # YI SYLLABLE NRURX -A3A4 ; [.4397.0020.0002] # YI SYLLABLE NRUR -A3A5 ; [.4398.0020.0002] # YI SYLLABLE NRYT -A3A6 ; [.4399.0020.0002] # YI SYLLABLE NRYX -A3A7 ; [.439A.0020.0002] # YI SYLLABLE NRY -A3A8 ; [.439B.0020.0002] # YI SYLLABLE NRYP -A3A9 ; [.439C.0020.0002] # YI SYLLABLE NRYRX -A3AA ; [.439D.0020.0002] # YI SYLLABLE NRYR -A3AB ; [.439E.0020.0002] # YI SYLLABLE SHAT -A3AC ; [.439F.0020.0002] # YI SYLLABLE SHAX -A3AD ; [.43A0.0020.0002] # YI SYLLABLE SHA -A3AE ; [.43A1.0020.0002] # YI SYLLABLE SHAP -A3AF ; [.43A2.0020.0002] # YI SYLLABLE SHUOX -A3B0 ; [.43A3.0020.0002] # YI SYLLABLE SHUO -A3B1 ; [.43A4.0020.0002] # YI SYLLABLE SHUOP -A3B2 ; [.43A5.0020.0002] # YI SYLLABLE SHOT -A3B3 ; [.43A6.0020.0002] # YI SYLLABLE SHOX -A3B4 ; [.43A7.0020.0002] # YI SYLLABLE SHO -A3B5 ; [.43A8.0020.0002] # YI SYLLABLE SHOP -A3B6 ; [.43A9.0020.0002] # YI SYLLABLE SHET -A3B7 ; [.43AA.0020.0002] # YI SYLLABLE SHEX -A3B8 ; [.43AB.0020.0002] # YI SYLLABLE SHE -A3B9 ; [.43AC.0020.0002] # YI SYLLABLE SHEP -A3BA ; [.43AD.0020.0002] # YI SYLLABLE SHUT -A3BB ; [.43AE.0020.0002] # YI SYLLABLE SHUX -A3BC ; [.43AF.0020.0002] # YI SYLLABLE SHU -A3BD ; [.43B0.0020.0002] # YI SYLLABLE SHUP -A3BE ; [.43B1.0020.0002] # YI SYLLABLE SHURX -A3BF ; [.43B2.0020.0002] # YI SYLLABLE SHUR -A3C0 ; [.43B3.0020.0002] # YI SYLLABLE SHYT -A3C1 ; [.43B4.0020.0002] # YI SYLLABLE SHYX -A3C2 ; [.43B5.0020.0002] # YI SYLLABLE SHY -A3C3 ; [.43B6.0020.0002] # YI SYLLABLE SHYP -A3C4 ; [.43B7.0020.0002] # YI SYLLABLE SHYRX -A3C5 ; [.43B8.0020.0002] # YI SYLLABLE SHYR -A3C6 ; [.43B9.0020.0002] # YI SYLLABLE RAT -A3C7 ; [.43BA.0020.0002] # YI SYLLABLE RAX -A3C8 ; [.43BB.0020.0002] # YI SYLLABLE RA -A3C9 ; [.43BC.0020.0002] # YI SYLLABLE RAP -A3CA ; [.43BD.0020.0002] # YI SYLLABLE RUOX -A3CB ; [.43BE.0020.0002] # YI SYLLABLE RUO -A3CC ; [.43BF.0020.0002] # YI SYLLABLE RUOP -A3CD ; [.43C0.0020.0002] # YI SYLLABLE ROT -A3CE ; [.43C1.0020.0002] # YI SYLLABLE ROX -A3CF ; [.43C2.0020.0002] # YI SYLLABLE RO -A3D0 ; [.43C3.0020.0002] # YI SYLLABLE ROP -A3D1 ; [.43C4.0020.0002] # YI SYLLABLE REX -A3D2 ; [.43C5.0020.0002] # YI SYLLABLE RE -A3D3 ; [.43C6.0020.0002] # YI SYLLABLE REP -A3D4 ; [.43C7.0020.0002] # YI SYLLABLE RUT -A3D5 ; [.43C8.0020.0002] # YI SYLLABLE RUX -A3D6 ; [.43C9.0020.0002] # YI SYLLABLE RU -A3D7 ; [.43CA.0020.0002] # YI SYLLABLE RUP -A3D8 ; [.43CB.0020.0002] # YI SYLLABLE RURX -A3D9 ; [.43CC.0020.0002] # YI SYLLABLE RUR -A3DA ; [.43CD.0020.0002] # YI SYLLABLE RYT -A3DB ; [.43CE.0020.0002] # YI SYLLABLE RYX -A3DC ; [.43CF.0020.0002] # YI SYLLABLE RY -A3DD ; [.43D0.0020.0002] # YI SYLLABLE RYP -A3DE ; [.43D1.0020.0002] # YI SYLLABLE RYRX -A3DF ; [.43D2.0020.0002] # YI SYLLABLE RYR -A3E0 ; [.43D3.0020.0002] # YI SYLLABLE JIT -A3E1 ; [.43D4.0020.0002] # YI SYLLABLE JIX -A3E2 ; [.43D5.0020.0002] # YI SYLLABLE JI -A3E3 ; [.43D6.0020.0002] # YI SYLLABLE JIP -A3E4 ; [.43D7.0020.0002] # YI SYLLABLE JIET -A3E5 ; [.43D8.0020.0002] # YI SYLLABLE JIEX -A3E6 ; [.43D9.0020.0002] # YI SYLLABLE JIE -A3E7 ; [.43DA.0020.0002] # YI SYLLABLE JIEP -A3E8 ; [.43DB.0020.0002] # YI SYLLABLE JUOT -A3E9 ; [.43DC.0020.0002] # YI SYLLABLE JUOX -A3EA ; [.43DD.0020.0002] # YI SYLLABLE JUO -A3EB ; [.43DE.0020.0002] # YI SYLLABLE JUOP -A3EC ; [.43DF.0020.0002] # YI SYLLABLE JOT -A3ED ; [.43E0.0020.0002] # YI SYLLABLE JOX -A3EE ; [.43E1.0020.0002] # YI SYLLABLE JO -A3EF ; [.43E2.0020.0002] # YI SYLLABLE JOP -A3F0 ; [.43E3.0020.0002] # YI SYLLABLE JUT -A3F1 ; [.43E4.0020.0002] # YI SYLLABLE JUX -A3F2 ; [.43E5.0020.0002] # YI SYLLABLE JU -A3F3 ; [.43E6.0020.0002] # YI SYLLABLE JUP -A3F4 ; [.43E7.0020.0002] # YI SYLLABLE JURX -A3F5 ; [.43E8.0020.0002] # YI SYLLABLE JUR -A3F6 ; [.43E9.0020.0002] # YI SYLLABLE JYT -A3F7 ; [.43EA.0020.0002] # YI SYLLABLE JYX -A3F8 ; [.43EB.0020.0002] # YI SYLLABLE JY -A3F9 ; [.43EC.0020.0002] # YI SYLLABLE JYP -A3FA ; [.43ED.0020.0002] # YI SYLLABLE JYRX -A3FB ; [.43EE.0020.0002] # YI SYLLABLE JYR -A3FC ; [.43EF.0020.0002] # YI SYLLABLE QIT -A3FD ; [.43F0.0020.0002] # YI SYLLABLE QIX -A3FE ; [.43F1.0020.0002] # YI SYLLABLE QI -A3FF ; [.43F2.0020.0002] # YI SYLLABLE QIP -A400 ; [.43F3.0020.0002] # YI SYLLABLE QIET -A401 ; [.43F4.0020.0002] # YI SYLLABLE QIEX -A402 ; [.43F5.0020.0002] # YI SYLLABLE QIE -A403 ; [.43F6.0020.0002] # YI SYLLABLE QIEP -A404 ; [.43F7.0020.0002] # YI SYLLABLE QUOT -A405 ; [.43F8.0020.0002] # YI SYLLABLE QUOX -A406 ; [.43F9.0020.0002] # YI SYLLABLE QUO -A407 ; [.43FA.0020.0002] # YI SYLLABLE QUOP -A408 ; [.43FB.0020.0002] # YI SYLLABLE QOT -A409 ; [.43FC.0020.0002] # YI SYLLABLE QOX -A40A ; [.43FD.0020.0002] # YI SYLLABLE QO -A40B ; [.43FE.0020.0002] # YI SYLLABLE QOP -A40C ; [.43FF.0020.0002] # YI SYLLABLE QUT -A40D ; [.4400.0020.0002] # YI SYLLABLE QUX -A40E ; [.4401.0020.0002] # YI SYLLABLE QU -A40F ; [.4402.0020.0002] # YI SYLLABLE QUP -A410 ; [.4403.0020.0002] # YI SYLLABLE QURX -A411 ; [.4404.0020.0002] # YI SYLLABLE QUR -A412 ; [.4405.0020.0002] # YI SYLLABLE QYT -A413 ; [.4406.0020.0002] # YI SYLLABLE QYX -A414 ; [.4407.0020.0002] # YI SYLLABLE QY -A415 ; [.4408.0020.0002] # YI SYLLABLE QYP -A416 ; [.4409.0020.0002] # YI SYLLABLE QYRX -A417 ; [.440A.0020.0002] # YI SYLLABLE QYR -A418 ; [.440B.0020.0002] # YI SYLLABLE JJIT -A419 ; [.440C.0020.0002] # YI SYLLABLE JJIX -A41A ; [.440D.0020.0002] # YI SYLLABLE JJI -A41B ; [.440E.0020.0002] # YI SYLLABLE JJIP -A41C ; [.440F.0020.0002] # YI SYLLABLE JJIET -A41D ; [.4410.0020.0002] # YI SYLLABLE JJIEX -A41E ; [.4411.0020.0002] # YI SYLLABLE JJIE -A41F ; [.4412.0020.0002] # YI SYLLABLE JJIEP -A420 ; [.4413.0020.0002] # YI SYLLABLE JJUOX -A421 ; [.4414.0020.0002] # YI SYLLABLE JJUO -A422 ; [.4415.0020.0002] # YI SYLLABLE JJUOP -A423 ; [.4416.0020.0002] # YI SYLLABLE JJOT -A424 ; [.4417.0020.0002] # YI SYLLABLE JJOX -A425 ; [.4418.0020.0002] # YI SYLLABLE JJO -A426 ; [.4419.0020.0002] # YI SYLLABLE JJOP -A427 ; [.441A.0020.0002] # YI SYLLABLE JJUT -A428 ; [.441B.0020.0002] # YI SYLLABLE JJUX -A429 ; [.441C.0020.0002] # YI SYLLABLE JJU -A42A ; [.441D.0020.0002] # YI SYLLABLE JJUP -A42B ; [.441E.0020.0002] # YI SYLLABLE JJURX -A42C ; [.441F.0020.0002] # YI SYLLABLE JJUR -A42D ; [.4420.0020.0002] # YI SYLLABLE JJYT -A42E ; [.4421.0020.0002] # YI SYLLABLE JJYX -A42F ; [.4422.0020.0002] # YI SYLLABLE JJY -A430 ; [.4423.0020.0002] # YI SYLLABLE JJYP -A431 ; [.4424.0020.0002] # YI SYLLABLE NJIT -A432 ; [.4425.0020.0002] # YI SYLLABLE NJIX -A433 ; [.4426.0020.0002] # YI SYLLABLE NJI -A434 ; [.4427.0020.0002] # YI SYLLABLE NJIP -A435 ; [.4428.0020.0002] # YI SYLLABLE NJIET -A436 ; [.4429.0020.0002] # YI SYLLABLE NJIEX -A437 ; [.442A.0020.0002] # YI SYLLABLE NJIE -A438 ; [.442B.0020.0002] # YI SYLLABLE NJIEP -A439 ; [.442C.0020.0002] # YI SYLLABLE NJUOX -A43A ; [.442D.0020.0002] # YI SYLLABLE NJUO -A43B ; [.442E.0020.0002] # YI SYLLABLE NJOT -A43C ; [.442F.0020.0002] # YI SYLLABLE NJOX -A43D ; [.4430.0020.0002] # YI SYLLABLE NJO -A43E ; [.4431.0020.0002] # YI SYLLABLE NJOP -A43F ; [.4432.0020.0002] # YI SYLLABLE NJUX -A440 ; [.4433.0020.0002] # YI SYLLABLE NJU -A441 ; [.4434.0020.0002] # YI SYLLABLE NJUP -A442 ; [.4435.0020.0002] # YI SYLLABLE NJURX -A443 ; [.4436.0020.0002] # YI SYLLABLE NJUR -A444 ; [.4437.0020.0002] # YI SYLLABLE NJYT -A445 ; [.4438.0020.0002] # YI SYLLABLE NJYX -A446 ; [.4439.0020.0002] # YI SYLLABLE NJY -A447 ; [.443A.0020.0002] # YI SYLLABLE NJYP -A448 ; [.443B.0020.0002] # YI SYLLABLE NJYRX -A449 ; [.443C.0020.0002] # YI SYLLABLE NJYR -A44A ; [.443D.0020.0002] # YI SYLLABLE NYIT -A44B ; [.443E.0020.0002] # YI SYLLABLE NYIX -A44C ; [.443F.0020.0002] # YI SYLLABLE NYI -A44D ; [.4440.0020.0002] # YI SYLLABLE NYIP -A44E ; [.4441.0020.0002] # YI SYLLABLE NYIET -A44F ; [.4442.0020.0002] # YI SYLLABLE NYIEX -A450 ; [.4443.0020.0002] # YI SYLLABLE NYIE -A451 ; [.4444.0020.0002] # YI SYLLABLE NYIEP -A452 ; [.4445.0020.0002] # YI SYLLABLE NYUOX -A453 ; [.4446.0020.0002] # YI SYLLABLE NYUO -A454 ; [.4447.0020.0002] # YI SYLLABLE NYUOP -A455 ; [.4448.0020.0002] # YI SYLLABLE NYOT -A456 ; [.4449.0020.0002] # YI SYLLABLE NYOX -A457 ; [.444A.0020.0002] # YI SYLLABLE NYO -A458 ; [.444B.0020.0002] # YI SYLLABLE NYOP -A459 ; [.444C.0020.0002] # YI SYLLABLE NYUT -A45A ; [.444D.0020.0002] # YI SYLLABLE NYUX -A45B ; [.444E.0020.0002] # YI SYLLABLE NYU -A45C ; [.444F.0020.0002] # YI SYLLABLE NYUP -A45D ; [.4450.0020.0002] # YI SYLLABLE XIT -A45E ; [.4451.0020.0002] # YI SYLLABLE XIX -A45F ; [.4452.0020.0002] # YI SYLLABLE XI -A460 ; [.4453.0020.0002] # YI SYLLABLE XIP -A461 ; [.4454.0020.0002] # YI SYLLABLE XIET -A462 ; [.4455.0020.0002] # YI SYLLABLE XIEX -A463 ; [.4456.0020.0002] # YI SYLLABLE XIE -A464 ; [.4457.0020.0002] # YI SYLLABLE XIEP -A465 ; [.4458.0020.0002] # YI SYLLABLE XUOX -A466 ; [.4459.0020.0002] # YI SYLLABLE XUO -A467 ; [.445A.0020.0002] # YI SYLLABLE XOT -A468 ; [.445B.0020.0002] # YI SYLLABLE XOX -A469 ; [.445C.0020.0002] # YI SYLLABLE XO -A46A ; [.445D.0020.0002] # YI SYLLABLE XOP -A46B ; [.445E.0020.0002] # YI SYLLABLE XYT -A46C ; [.445F.0020.0002] # YI SYLLABLE XYX -A46D ; [.4460.0020.0002] # YI SYLLABLE XY -A46E ; [.4461.0020.0002] # YI SYLLABLE XYP -A46F ; [.4462.0020.0002] # YI SYLLABLE XYRX -A470 ; [.4463.0020.0002] # YI SYLLABLE XYR -A471 ; [.4464.0020.0002] # YI SYLLABLE YIT -A472 ; [.4465.0020.0002] # YI SYLLABLE YIX -A473 ; [.4466.0020.0002] # YI SYLLABLE YI -A474 ; [.4467.0020.0002] # YI SYLLABLE YIP -A475 ; [.4468.0020.0002] # YI SYLLABLE YIET -A476 ; [.4469.0020.0002] # YI SYLLABLE YIEX -A477 ; [.446A.0020.0002] # YI SYLLABLE YIE -A478 ; [.446B.0020.0002] # YI SYLLABLE YIEP -A479 ; [.446C.0020.0002] # YI SYLLABLE YUOT -A47A ; [.446D.0020.0002] # YI SYLLABLE YUOX -A47B ; [.446E.0020.0002] # YI SYLLABLE YUO -A47C ; [.446F.0020.0002] # YI SYLLABLE YUOP -A47D ; [.4470.0020.0002] # YI SYLLABLE YOT -A47E ; [.4471.0020.0002] # YI SYLLABLE YOX -A47F ; [.4472.0020.0002] # YI SYLLABLE YO -A480 ; [.4473.0020.0002] # YI SYLLABLE YOP -A481 ; [.4474.0020.0002] # YI SYLLABLE YUT -A482 ; [.4475.0020.0002] # YI SYLLABLE YUX -A483 ; [.4476.0020.0002] # YI SYLLABLE YU -A484 ; [.4477.0020.0002] # YI SYLLABLE YUP -A485 ; [.4478.0020.0002] # YI SYLLABLE YURX -A486 ; [.4479.0020.0002] # YI SYLLABLE YUR -A487 ; [.447A.0020.0002] # YI SYLLABLE YYT -A488 ; [.447B.0020.0002] # YI SYLLABLE YYX -A489 ; [.447C.0020.0002] # YI SYLLABLE YY -A48A ; [.447D.0020.0002] # YI SYLLABLE YYP -A48B ; [.447E.0020.0002] # YI SYLLABLE YYRX -A48C ; [.447F.0020.0002] # YI SYLLABLE YYR -A4F8 ; [.4480.0020.0002] # LISU LETTER TONE MYA TI -A4F9 ; [.4481.0020.0002] # LISU LETTER TONE NA PO -A4FA ; [.4482.0020.0002] # LISU LETTER TONE MYA CYA -A4FB ; [.4483.0020.0002] # LISU LETTER TONE MYA BO -A4FD ; [.4484.0020.0002] # LISU LETTER TONE MYA JEU -A4FC ; [.4485.0020.0002] # LISU LETTER TONE MYA NA -A4D0 ; [.4486.0020.0002] # LISU LETTER BA -A4D1 ; [.4487.0020.0002] # LISU LETTER PA -A4D2 ; [.4488.0020.0002] # LISU LETTER PHA -A4D3 ; [.4489.0020.0002] # LISU LETTER DA -A4D4 ; [.448A.0020.0002] # LISU LETTER TA -A4D5 ; [.448B.0020.0002] # LISU LETTER THA -A4D6 ; [.448C.0020.0002] # LISU LETTER GA -A4D7 ; [.448D.0020.0002] # LISU LETTER KA -A4D8 ; [.448E.0020.0002] # LISU LETTER KHA -A4D9 ; [.448F.0020.0002] # LISU LETTER JA -A4DA ; [.4490.0020.0002] # LISU LETTER CA -A4DB ; [.4491.0020.0002] # LISU LETTER CHA -A4DC ; [.4492.0020.0002] # LISU LETTER DZA -A4DD ; [.4493.0020.0002] # LISU LETTER TSA -A4DE ; [.4494.0020.0002] # LISU LETTER TSHA -A4DF ; [.4495.0020.0002] # LISU LETTER MA -A4E0 ; [.4496.0020.0002] # LISU LETTER NA -A4E1 ; [.4497.0020.0002] # LISU LETTER LA -A4E2 ; [.4498.0020.0002] # LISU LETTER SA -A4E3 ; [.4499.0020.0002] # LISU LETTER ZHA -A4E4 ; [.449A.0020.0002] # LISU LETTER ZA -A4E5 ; [.449B.0020.0002] # LISU LETTER NGA -A4E6 ; [.449C.0020.0002] # LISU LETTER HA -A4E7 ; [.449D.0020.0002] # LISU LETTER XA -A4E8 ; [.449E.0020.0002] # LISU LETTER HHA -A4E9 ; [.449F.0020.0002] # LISU LETTER FA -A4EB ; [.44A0.0020.0002] # LISU LETTER SHA -A4ED ; [.44A1.0020.0002] # LISU LETTER GHA -A4EA ; [.44A2.0020.0002] # LISU LETTER WA -A4EC ; [.44A3.0020.0002] # LISU LETTER YA -A4EE ; [.44A4.0020.0002] # LISU LETTER A -A4EF ; [.44A5.0020.0002] # LISU LETTER AE -A4F0 ; [.44A6.0020.0002] # LISU LETTER E -A4F1 ; [.44A7.0020.0002] # LISU LETTER EU -A4F2 ; [.44A8.0020.0002] # LISU LETTER I -A4F3 ; [.44A9.0020.0002] # LISU LETTER O -A4F4 ; [.44AA.0020.0002] # LISU LETTER U -A4F5 ; [.44AB.0020.0002] # LISU LETTER UE -A4F6 ; [.44AC.0020.0002] # LISU LETTER UH -A4F7 ; [.44AD.0020.0002] # LISU LETTER OE -16F00 ; [.44AE.0020.0002] # MIAO LETTER PA -16F01 ; [.44AF.0020.0002] # MIAO LETTER BA -16F02 ; [.44B0.0020.0002] # MIAO LETTER YI PA -16F03 ; [.44B1.0020.0002] # MIAO LETTER PLA -16F04 ; [.44B2.0020.0002] # MIAO LETTER MA -16F06 ; [.44B2.0020.0004] # MIAO LETTER ARCHAIC MA -16F05 ; [.44B3.0020.0002] # MIAO LETTER MHA -16F07 ; [.44B4.0020.0002] # MIAO LETTER FA -16F08 ; [.44B5.0020.0002] # MIAO LETTER VA -16F09 ; [.44B6.0020.0002] # MIAO LETTER VFA -16F0A ; [.44B7.0020.0002] # MIAO LETTER TA -16F0B ; [.44B8.0020.0002] # MIAO LETTER DA -16F0C ; [.44B9.0020.0002] # MIAO LETTER YI TTA -16F0D ; [.44BA.0020.0002] # MIAO LETTER YI TA -16F0E ; [.44BB.0020.0002] # MIAO LETTER TTA -16F0F ; [.44BC.0020.0002] # MIAO LETTER DDA -16F10 ; [.44BD.0020.0002] # MIAO LETTER NA -16F13 ; [.44BD.0020.0004] # MIAO LETTER ARCHAIC NA -16F11 ; [.44BE.0020.0002] # MIAO LETTER NHA -16F12 ; [.44BF.0020.0002] # MIAO LETTER YI NNA -16F14 ; [.44C0.0020.0002] # MIAO LETTER NNA -16F15 ; [.44C1.0020.0002] # MIAO LETTER NNHA -16F16 ; [.44C2.0020.0002] # MIAO LETTER LA -16F17 ; [.44C3.0020.0002] # MIAO LETTER LYA -16F18 ; [.44C4.0020.0002] # MIAO LETTER LHA -16F19 ; [.44C5.0020.0002] # MIAO LETTER LHYA -16F1A ; [.44C6.0020.0002] # MIAO LETTER TLHA -16F1B ; [.44C7.0020.0002] # MIAO LETTER DLHA -16F1C ; [.44C8.0020.0002] # MIAO LETTER TLHYA -16F1D ; [.44C9.0020.0002] # MIAO LETTER DLHYA -16F1E ; [.44CA.0020.0002] # MIAO LETTER KA -16F1F ; [.44CB.0020.0002] # MIAO LETTER GA -16F20 ; [.44CC.0020.0002] # MIAO LETTER YI KA -16F21 ; [.44CD.0020.0002] # MIAO LETTER QA -16F22 ; [.44CE.0020.0002] # MIAO LETTER QGA -16F23 ; [.44CF.0020.0002] # MIAO LETTER NGA -16F25 ; [.44CF.0020.0004] # MIAO LETTER ARCHAIC NGA -16F24 ; [.44D0.0020.0002] # MIAO LETTER NGHA -16F26 ; [.44D1.0020.0002] # MIAO LETTER HA -16F27 ; [.44D2.0020.0002] # MIAO LETTER XA -16F28 ; [.44D3.0020.0002] # MIAO LETTER GHA -16F29 ; [.44D4.0020.0002] # MIAO LETTER GHHA -16F2A ; [.44D5.0020.0002] # MIAO LETTER TSSA -16F2B ; [.44D6.0020.0002] # MIAO LETTER DZZA -16F2C ; [.44D7.0020.0002] # MIAO LETTER NYA -16F2D ; [.44D8.0020.0002] # MIAO LETTER NYHA -16F2E ; [.44D9.0020.0002] # MIAO LETTER TSHA -16F2F ; [.44DA.0020.0002] # MIAO LETTER DZHA -16F30 ; [.44DB.0020.0002] # MIAO LETTER YI TSHA -16F31 ; [.44DC.0020.0002] # MIAO LETTER YI DZHA -16F32 ; [.44DD.0020.0002] # MIAO LETTER REFORMED TSHA -16F33 ; [.44DE.0020.0002] # MIAO LETTER SHA -16F34 ; [.44DF.0020.0002] # MIAO LETTER SSA -16F35 ; [.44E0.0020.0002] # MIAO LETTER ZHA -16F36 ; [.44E1.0020.0002] # MIAO LETTER ZSHA -16F37 ; [.44E2.0020.0002] # MIAO LETTER TSA -16F38 ; [.44E3.0020.0002] # MIAO LETTER DZA -16F39 ; [.44E4.0020.0002] # MIAO LETTER YI TSA -16F3A ; [.44E5.0020.0002] # MIAO LETTER SA -16F3B ; [.44E6.0020.0002] # MIAO LETTER ZA -16F3C ; [.44E7.0020.0002] # MIAO LETTER ZSA -16F3D ; [.44E8.0020.0002] # MIAO LETTER ZZA -16F3F ; [.44E8.0020.0004] # MIAO LETTER ARCHAIC ZZA -16F3E ; [.44E9.0020.0002] # MIAO LETTER ZZSA -16F40 ; [.44EA.0020.0002] # MIAO LETTER ZZYA -16F41 ; [.44EB.0020.0002] # MIAO LETTER ZZSYA -16F42 ; [.44EC.0020.0002] # MIAO LETTER WA -16F43 ; [.44ED.0020.0002] # MIAO LETTER AH -16F44 ; [.44EE.0020.0002] # MIAO LETTER HHA -16F50 ; [.44EF.0020.0002] # MIAO LETTER NASALIZATION -16F51 ; [.44F0.0020.0002] # MIAO SIGN ASPIRATION -16F52 ; [.44F1.0020.0002] # MIAO SIGN REFORMED VOICING -16F53 ; [.44F2.0020.0002] # MIAO SIGN REFORMED ASPIRATION -16F54 ; [.44F3.0020.0002] # MIAO VOWEL SIGN A -16F55 ; [.44F4.0020.0002] # MIAO VOWEL SIGN AA -16F56 ; [.44F5.0020.0002] # MIAO VOWEL SIGN AHH -16F57 ; [.44F6.0020.0002] # MIAO VOWEL SIGN AN -16F58 ; [.44F7.0020.0002] # MIAO VOWEL SIGN ANG -16F59 ; [.44F8.0020.0002] # MIAO VOWEL SIGN O -16F5A ; [.44F9.0020.0002] # MIAO VOWEL SIGN OO -16F5B ; [.44FA.0020.0002] # MIAO VOWEL SIGN WO -16F5C ; [.44FB.0020.0002] # MIAO VOWEL SIGN W -16F5D ; [.44FC.0020.0002] # MIAO VOWEL SIGN E -16F5E ; [.44FD.0020.0002] # MIAO VOWEL SIGN EN -16F5F ; [.44FE.0020.0002] # MIAO VOWEL SIGN ENG -16F60 ; [.44FF.0020.0002] # MIAO VOWEL SIGN OEY -16F61 ; [.4500.0020.0002] # MIAO VOWEL SIGN I -16F62 ; [.4501.0020.0002] # MIAO VOWEL SIGN IA -16F63 ; [.4502.0020.0002] # MIAO VOWEL SIGN IAN -16F64 ; [.4503.0020.0002] # MIAO VOWEL SIGN IANG -16F65 ; [.4504.0020.0002] # MIAO VOWEL SIGN IO -16F66 ; [.4505.0020.0002] # MIAO VOWEL SIGN IE -16F67 ; [.4506.0020.0002] # MIAO VOWEL SIGN II -16F68 ; [.4507.0020.0002] # MIAO VOWEL SIGN IU -16F69 ; [.4508.0020.0002] # MIAO VOWEL SIGN ING -16F6A ; [.4509.0020.0002] # MIAO VOWEL SIGN U -16F6B ; [.450A.0020.0002] # MIAO VOWEL SIGN UA -16F6C ; [.450B.0020.0002] # MIAO VOWEL SIGN UAN -16F6D ; [.450C.0020.0002] # MIAO VOWEL SIGN UANG -16F6E ; [.450D.0020.0002] # MIAO VOWEL SIGN UU -16F6F ; [.450E.0020.0002] # MIAO VOWEL SIGN UEI -16F70 ; [.450F.0020.0002] # MIAO VOWEL SIGN UNG -16F71 ; [.4510.0020.0002] # MIAO VOWEL SIGN Y -16F72 ; [.4511.0020.0002] # MIAO VOWEL SIGN YI -16F73 ; [.4512.0020.0002] # MIAO VOWEL SIGN AE -16F74 ; [.4513.0020.0002] # MIAO VOWEL SIGN AEE -16F75 ; [.4514.0020.0002] # MIAO VOWEL SIGN ERR -16F76 ; [.4515.0020.0002] # MIAO VOWEL SIGN ROUNDED ERR -16F77 ; [.4516.0020.0002] # MIAO VOWEL SIGN ER -16F78 ; [.4517.0020.0002] # MIAO VOWEL SIGN ROUNDED ER -16F79 ; [.4518.0020.0002] # MIAO VOWEL SIGN AI -16F7A ; [.4519.0020.0002] # MIAO VOWEL SIGN EI -16F7B ; [.451A.0020.0002] # MIAO VOWEL SIGN AU -16F7C ; [.451B.0020.0002] # MIAO VOWEL SIGN OU -16F7D ; [.451C.0020.0002] # MIAO VOWEL SIGN N -16F7E ; [.451D.0020.0002] # MIAO VOWEL SIGN NG -16F8F ; [.451E.0020.0002] # MIAO TONE RIGHT -16F90 ; [.451F.0020.0002] # MIAO TONE TOP RIGHT -16F91 ; [.4520.0020.0002] # MIAO TONE ABOVE -16F92 ; [.4521.0020.0002] # MIAO TONE BELOW -16F93 ; [.4522.0020.0002] # MIAO LETTER TONE-2 -16F94 ; [.4523.0020.0002] # MIAO LETTER TONE-3 -16F95 ; [.4524.0020.0002] # MIAO LETTER TONE-4 -16F96 ; [.4525.0020.0002] # MIAO LETTER TONE-5 -16F97 ; [.4526.0020.0002] # MIAO LETTER TONE-6 -16F98 ; [.4527.0020.0002] # MIAO LETTER TONE-7 -16F99 ; [.4528.0020.0002] # MIAO LETTER TONE-8 -16F9A ; [.4529.0020.0002] # MIAO LETTER REFORMED TONE-1 -16F9B ; [.452A.0020.0002] # MIAO LETTER REFORMED TONE-2 -16F9C ; [.452B.0020.0002] # MIAO LETTER REFORMED TONE-4 -16F9D ; [.452C.0020.0002] # MIAO LETTER REFORMED TONE-5 -16F9E ; [.452D.0020.0002] # MIAO LETTER REFORMED TONE-6 -16F9F ; [.452E.0020.0002] # MIAO LETTER REFORMED TONE-8 -118FF ; [.452F.0020.0002] # WARANG CITI OM -118C0 ; [.4530.0020.0002] # WARANG CITI SMALL LETTER NGAA -118A0 ; [.4530.0020.0008] # WARANG CITI CAPITAL LETTER NGAA -118C1 ; [.4531.0020.0002] # WARANG CITI SMALL LETTER A -118A1 ; [.4531.0020.0008] # WARANG CITI CAPITAL LETTER A -118C2 ; [.4532.0020.0002] # WARANG CITI SMALL LETTER WI -118A2 ; [.4532.0020.0008] # WARANG CITI CAPITAL LETTER WI -118C3 ; [.4533.0020.0002] # WARANG CITI SMALL LETTER YU -118A3 ; [.4533.0020.0008] # WARANG CITI CAPITAL LETTER YU -118C4 ; [.4534.0020.0002] # WARANG CITI SMALL LETTER YA -118A4 ; [.4534.0020.0008] # WARANG CITI CAPITAL LETTER YA -118C5 ; [.4535.0020.0002] # WARANG CITI SMALL LETTER YO -118A5 ; [.4535.0020.0008] # WARANG CITI CAPITAL LETTER YO -118C6 ; [.4536.0020.0002] # WARANG CITI SMALL LETTER II -118A6 ; [.4536.0020.0008] # WARANG CITI CAPITAL LETTER II -118C7 ; [.4537.0020.0002] # WARANG CITI SMALL LETTER UU -118A7 ; [.4537.0020.0008] # WARANG CITI CAPITAL LETTER UU -118C8 ; [.4538.0020.0002] # WARANG CITI SMALL LETTER E -118A8 ; [.4538.0020.0008] # WARANG CITI CAPITAL LETTER E -118C9 ; [.4539.0020.0002] # WARANG CITI SMALL LETTER O -118A9 ; [.4539.0020.0008] # WARANG CITI CAPITAL LETTER O -118CA ; [.453A.0020.0002] # WARANG CITI SMALL LETTER ANG -118AA ; [.453A.0020.0008] # WARANG CITI CAPITAL LETTER ANG -118CB ; [.453B.0020.0002] # WARANG CITI SMALL LETTER GA -118AB ; [.453B.0020.0008] # WARANG CITI CAPITAL LETTER GA -118CC ; [.453C.0020.0002] # WARANG CITI SMALL LETTER KO -118AC ; [.453C.0020.0008] # WARANG CITI CAPITAL LETTER KO -118CD ; [.453D.0020.0002] # WARANG CITI SMALL LETTER ENY -118AD ; [.453D.0020.0008] # WARANG CITI CAPITAL LETTER ENY -118CE ; [.453E.0020.0002] # WARANG CITI SMALL LETTER YUJ -118AE ; [.453E.0020.0008] # WARANG CITI CAPITAL LETTER YUJ -118CF ; [.453F.0020.0002] # WARANG CITI SMALL LETTER UC -118AF ; [.453F.0020.0008] # WARANG CITI CAPITAL LETTER UC -118D0 ; [.4540.0020.0002] # WARANG CITI SMALL LETTER ENN -118B0 ; [.4540.0020.0008] # WARANG CITI CAPITAL LETTER ENN -118D1 ; [.4541.0020.0002] # WARANG CITI SMALL LETTER ODD -118B1 ; [.4541.0020.0008] # WARANG CITI CAPITAL LETTER ODD -118D2 ; [.4542.0020.0002] # WARANG CITI SMALL LETTER TTE -118B2 ; [.4542.0020.0008] # WARANG CITI CAPITAL LETTER TTE -118D3 ; [.4543.0020.0002] # WARANG CITI SMALL LETTER NUNG -118B3 ; [.4543.0020.0008] # WARANG CITI CAPITAL LETTER NUNG -118D4 ; [.4544.0020.0002] # WARANG CITI SMALL LETTER DA -118B4 ; [.4544.0020.0008] # WARANG CITI CAPITAL LETTER DA -118D5 ; [.4545.0020.0002] # WARANG CITI SMALL LETTER AT -118B5 ; [.4545.0020.0008] # WARANG CITI CAPITAL LETTER AT -118D6 ; [.4546.0020.0002] # WARANG CITI SMALL LETTER AM -118B6 ; [.4546.0020.0008] # WARANG CITI CAPITAL LETTER AM -118D7 ; [.4547.0020.0002] # WARANG CITI SMALL LETTER BU -118B7 ; [.4547.0020.0008] # WARANG CITI CAPITAL LETTER BU -118D8 ; [.4548.0020.0002] # WARANG CITI SMALL LETTER PU -118B8 ; [.4548.0020.0008] # WARANG CITI CAPITAL LETTER PU -118D9 ; [.4549.0020.0002] # WARANG CITI SMALL LETTER HIYO -118B9 ; [.4549.0020.0008] # WARANG CITI CAPITAL LETTER HIYO -118DA ; [.454A.0020.0002] # WARANG CITI SMALL LETTER HOLO -118BA ; [.454A.0020.0008] # WARANG CITI CAPITAL LETTER HOLO -118DB ; [.454B.0020.0002] # WARANG CITI SMALL LETTER HORR -118BB ; [.454B.0020.0008] # WARANG CITI CAPITAL LETTER HORR -118DC ; [.454C.0020.0002] # WARANG CITI SMALL LETTER HAR -118BC ; [.454C.0020.0008] # WARANG CITI CAPITAL LETTER HAR -118DD ; [.454D.0020.0002] # WARANG CITI SMALL LETTER SSUU -118BD ; [.454D.0020.0008] # WARANG CITI CAPITAL LETTER SSUU -118DE ; [.454E.0020.0002] # WARANG CITI SMALL LETTER SII -118BE ; [.454E.0020.0008] # WARANG CITI CAPITAL LETTER SII -118DF ; [.454F.0020.0002] # WARANG CITI SMALL LETTER VIYO -118BF ; [.454F.0020.0008] # WARANG CITI CAPITAL LETTER VIYO -11AD5 ; [.4550.0020.0002] # PAU CIN HAU LETTER A -11AD6 ; [.4551.0020.0002] # PAU CIN HAU LETTER E -11AD7 ; [.4552.0020.0002] # PAU CIN HAU LETTER I -11AD8 ; [.4553.0020.0002] # PAU CIN HAU LETTER O -11AD9 ; [.4554.0020.0002] # PAU CIN HAU LETTER U -11ADA ; [.4555.0020.0002] # PAU CIN HAU LETTER UA -11ADB ; [.4556.0020.0002] # PAU CIN HAU LETTER IA -11AC0 ; [.4557.0020.0002] # PAU CIN HAU LETTER PA -11AC1 ; [.4558.0020.0002] # PAU CIN HAU LETTER KA -11AC2 ; [.4559.0020.0002] # PAU CIN HAU LETTER LA -11AC3 ; [.455A.0020.0002] # PAU CIN HAU LETTER MA -11AC4 ; [.455B.0020.0002] # PAU CIN HAU LETTER DA -11AC5 ; [.455C.0020.0002] # PAU CIN HAU LETTER ZA -11AC6 ; [.455D.0020.0002] # PAU CIN HAU LETTER VA -11AC7 ; [.455E.0020.0002] # PAU CIN HAU LETTER NGA -11AC8 ; [.455F.0020.0002] # PAU CIN HAU LETTER HA -11AC9 ; [.4560.0020.0002] # PAU CIN HAU LETTER GA -11ACA ; [.4561.0020.0002] # PAU CIN HAU LETTER KHA -11ACB ; [.4562.0020.0002] # PAU CIN HAU LETTER SA -11ACC ; [.4563.0020.0002] # PAU CIN HAU LETTER BA -11ACD ; [.4564.0020.0002] # PAU CIN HAU LETTER CA -11ACE ; [.4565.0020.0002] # PAU CIN HAU LETTER TA -11ACF ; [.4566.0020.0002] # PAU CIN HAU LETTER THA -11AD0 ; [.4567.0020.0002] # PAU CIN HAU LETTER NA -11AD1 ; [.4568.0020.0002] # PAU CIN HAU LETTER PHA -11AD2 ; [.4569.0020.0002] # PAU CIN HAU LETTER RA -11AD3 ; [.456A.0020.0002] # PAU CIN HAU LETTER FA -11AD4 ; [.456B.0020.0002] # PAU CIN HAU LETTER CHA -11ADC ; [.456C.0020.0002] # PAU CIN HAU LETTER FINAL P -11ADD ; [.456D.0020.0002] # PAU CIN HAU LETTER FINAL K -11ADF ; [.456E.0020.0002] # PAU CIN HAU LETTER FINAL M -11AE0 ; [.456F.0020.0002] # PAU CIN HAU LETTER FINAL N -11AE1 ; [.4570.0020.0002] # PAU CIN HAU LETTER FINAL L -11AE2 ; [.4571.0020.0002] # PAU CIN HAU LETTER FINAL W -11AE3 ; [.4572.0020.0002] # PAU CIN HAU LETTER FINAL NG -11ADE ; [.4573.0020.0002] # PAU CIN HAU LETTER FINAL T -11AE4 ; [.4574.0020.0002] # PAU CIN HAU LETTER FINAL Y -11AEF ; [.4575.0020.0002] # PAU CIN HAU MID-LEVEL TONE -11AF2 ; [.4576.0020.0002] # PAU CIN HAU MID-LEVEL TONE FINAL -11AF1 ; [.4577.0020.0002] # PAU CIN HAU MID-LEVEL TONE LONG FINAL -11AE6 ; [.4578.0020.0002] # PAU CIN HAU RISING TONE -11AE9 ; [.4579.0020.0002] # PAU CIN HAU RISING TONE FINAL -11AE5 ; [.457A.0020.0002] # PAU CIN HAU RISING TONE LONG -11AE8 ; [.457B.0020.0002] # PAU CIN HAU RISING TONE LONG FINAL -11AF4 ; [.457C.0020.0002] # PAU CIN HAU LOW-FALLING TONE -11AF7 ; [.457D.0020.0002] # PAU CIN HAU LOW-FALLING TONE FINAL -11AF3 ; [.457E.0020.0002] # PAU CIN HAU LOW-FALLING TONE LONG -11AF6 ; [.457F.0020.0002] # PAU CIN HAU LOW-FALLING TONE LONG FINAL -11AEC ; [.4580.0020.0002] # PAU CIN HAU SANDHI TONE -11AEE ; [.4581.0020.0002] # PAU CIN HAU SANDHI TONE FINAL -11AEB ; [.4582.0020.0002] # PAU CIN HAU SANDHI TONE LONG -11AED ; [.4583.0020.0002] # PAU CIN HAU SANDHI TONE LONG FINAL -11AF5 ; [.4584.0020.0002] # PAU CIN HAU GLOTTAL STOP -11AF8 ; [.4585.0020.0002] # PAU CIN HAU GLOTTAL STOP FINAL -11AE7 ; [.4586.0020.0002] # PAU CIN HAU SANDHI GLOTTAL STOP -11AEA ; [.4587.0020.0002] # PAU CIN HAU SANDHI GLOTTAL STOP FINAL -11AF0 ; [.4588.0020.0002] # PAU CIN HAU GLOTTAL STOP VARIANT -16B00 ; [.4589.0020.0002] # PAHAWH HMONG VOWEL KEEB -16B01 ; [.458A.0020.0002] # PAHAWH HMONG VOWEL KEEV -16B02 ; [.458B.0020.0002] # PAHAWH HMONG VOWEL KIB -16B03 ; [.458C.0020.0002] # PAHAWH HMONG VOWEL KIV -16B04 ; [.458D.0020.0002] # PAHAWH HMONG VOWEL KAUB -16B05 ; [.458E.0020.0002] # PAHAWH HMONG VOWEL KAUV -16B06 ; [.458F.0020.0002] # PAHAWH HMONG VOWEL KUB -16B07 ; [.4590.0020.0002] # PAHAWH HMONG VOWEL KUV -16B08 ; [.4591.0020.0002] # PAHAWH HMONG VOWEL KEB -16B09 ; [.4592.0020.0002] # PAHAWH HMONG VOWEL KEV -16B0A ; [.4593.0020.0002] # PAHAWH HMONG VOWEL KAIB -16B0B ; [.4594.0020.0002] # PAHAWH HMONG VOWEL KAIV -16B0C ; [.4595.0020.0002] # PAHAWH HMONG VOWEL KOOB -16B0D ; [.4596.0020.0002] # PAHAWH HMONG VOWEL KOOV -16B0E ; [.4597.0020.0002] # PAHAWH HMONG VOWEL KAWB -16B0F ; [.4598.0020.0002] # PAHAWH HMONG VOWEL KAWV -16B10 ; [.4599.0020.0002] # PAHAWH HMONG VOWEL KUAB -16B11 ; [.459A.0020.0002] # PAHAWH HMONG VOWEL KUAV -16B12 ; [.459B.0020.0002] # PAHAWH HMONG VOWEL KOB -16B13 ; [.459C.0020.0002] # PAHAWH HMONG VOWEL KOV -16B14 ; [.459D.0020.0002] # PAHAWH HMONG VOWEL KIAB -16B15 ; [.459E.0020.0002] # PAHAWH HMONG VOWEL KIAV -16B16 ; [.459F.0020.0002] # PAHAWH HMONG VOWEL KAB -16B17 ; [.45A0.0020.0002] # PAHAWH HMONG VOWEL KAV -16B18 ; [.45A1.0020.0002] # PAHAWH HMONG VOWEL KWB -16B19 ; [.45A2.0020.0002] # PAHAWH HMONG VOWEL KWV -16B1A ; [.45A3.0020.0002] # PAHAWH HMONG VOWEL KAAB -16B1B ; [.45A4.0020.0002] # PAHAWH HMONG VOWEL KAAV -16B1C ; [.45A5.0020.0002] # PAHAWH HMONG CONSONANT VAU -16B1D ; [.45A6.0020.0002] # PAHAWH HMONG CONSONANT NTSAU -16B1E ; [.45A7.0020.0002] # PAHAWH HMONG CONSONANT LAU -16B1F ; [.45A8.0020.0002] # PAHAWH HMONG CONSONANT HAU -16B20 ; [.45A9.0020.0002] # PAHAWH HMONG CONSONANT NLAU -16B21 ; [.45AA.0020.0002] # PAHAWH HMONG CONSONANT RAU -16B22 ; [.45AB.0020.0002] # PAHAWH HMONG CONSONANT NKAU -16B23 ; [.45AC.0020.0002] # PAHAWH HMONG CONSONANT QHAU -16B24 ; [.45AD.0020.0002] # PAHAWH HMONG CONSONANT YAU -16B25 ; [.45AE.0020.0002] # PAHAWH HMONG CONSONANT HLAU -16B26 ; [.45AF.0020.0002] # PAHAWH HMONG CONSONANT MAU -16B27 ; [.45B0.0020.0002] # PAHAWH HMONG CONSONANT CHAU -16B28 ; [.45B1.0020.0002] # PAHAWH HMONG CONSONANT NCHAU -16B29 ; [.45B2.0020.0002] # PAHAWH HMONG CONSONANT HNAU -16B2A ; [.45B3.0020.0002] # PAHAWH HMONG CONSONANT PLHAU -16B2B ; [.45B4.0020.0002] # PAHAWH HMONG CONSONANT NTHAU -16B2C ; [.45B5.0020.0002] # PAHAWH HMONG CONSONANT NAU -16B2D ; [.45B6.0020.0002] # PAHAWH HMONG CONSONANT AU -16B2E ; [.45B7.0020.0002] # PAHAWH HMONG CONSONANT XAU -16B2F ; [.45B8.0020.0002] # PAHAWH HMONG CONSONANT CAU -16B40 ; [.45B9.0020.0002] # PAHAWH HMONG SIGN VOS SEEV -16B41 ; [.45BA.0020.0002] # PAHAWH HMONG SIGN MEEJ SUAB -16B63 ; [.45BB.0020.0002] # PAHAWH HMONG SIGN VOS LUB -16B64 ; [.45BC.0020.0002] # PAHAWH HMONG SIGN XYOO -16B65 ; [.45BD.0020.0002] # PAHAWH HMONG SIGN HLI -16B66 ; [.45BE.0020.0002] # PAHAWH HMONG SIGN THIRD-STAGE HLI -16B67 ; [.45BF.0020.0002] # PAHAWH HMONG SIGN ZWJ THAJ -16B68 ; [.45C0.0020.0002] # PAHAWH HMONG SIGN HNUB -16B69 ; [.45C1.0020.0002] # PAHAWH HMONG SIGN NQIG -16B6A ; [.45C2.0020.0002] # PAHAWH HMONG SIGN XIAB -16B6B ; [.45C3.0020.0002] # PAHAWH HMONG SIGN NTUJ -16B6C ; [.45C4.0020.0002] # PAHAWH HMONG SIGN AV -16B6D ; [.45C5.0020.0002] # PAHAWH HMONG SIGN TXHEEJ CEEV -16B6E ; [.45C6.0020.0002] # PAHAWH HMONG SIGN MEEJ TSEEB -16B6F ; [.45C7.0020.0002] # PAHAWH HMONG SIGN TAU -16B70 ; [.45C8.0020.0002] # PAHAWH HMONG SIGN LOS -16B71 ; [.45C9.0020.0002] # PAHAWH HMONG SIGN MUS -16B72 ; [.45CA.0020.0002] # PAHAWH HMONG SIGN CIM HAIS LUS NTOG NTOG -16B73 ; [.45CB.0020.0002] # PAHAWH HMONG SIGN CIM CUAM TSHOOJ -16B74 ; [.45CC.0020.0002] # PAHAWH HMONG SIGN CIM TXWV -16B75 ; [.45CD.0020.0002] # PAHAWH HMONG SIGN CIM TXWV CHWV -16B76 ; [.45CE.0020.0002] # PAHAWH HMONG SIGN CIM PUB DAWB -16B77 ; [.45CF.0020.0002] # PAHAWH HMONG SIGN CIM NRES TOS -16B7D ; [.45D0.0020.0002] # PAHAWH HMONG CLAN SIGN TSHEEJ -16B7E ; [.45D1.0020.0002] # PAHAWH HMONG CLAN SIGN YEEG -16B7F ; [.45D2.0020.0002] # PAHAWH HMONG CLAN SIGN LIS -16B80 ; [.45D3.0020.0002] # PAHAWH HMONG CLAN SIGN LAUJ -16B81 ; [.45D4.0020.0002] # PAHAWH HMONG CLAN SIGN XYOOJ -16B82 ; [.45D5.0020.0002] # PAHAWH HMONG CLAN SIGN KOO -16B83 ; [.45D6.0020.0002] # PAHAWH HMONG CLAN SIGN HAWJ -16B84 ; [.45D7.0020.0002] # PAHAWH HMONG CLAN SIGN MUAS -16B85 ; [.45D8.0020.0002] # PAHAWH HMONG CLAN SIGN THOJ -16B86 ; [.45D9.0020.0002] # PAHAWH HMONG CLAN SIGN TSAB -16B87 ; [.45DA.0020.0002] # PAHAWH HMONG CLAN SIGN PHAB -16B88 ; [.45DB.0020.0002] # PAHAWH HMONG CLAN SIGN KHAB -16B89 ; [.45DC.0020.0002] # PAHAWH HMONG CLAN SIGN HAM -16B8A ; [.45DD.0020.0002] # PAHAWH HMONG CLAN SIGN VAJ -16B8B ; [.45DE.0020.0002] # PAHAWH HMONG CLAN SIGN FAJ -16B8C ; [.45DF.0020.0002] # PAHAWH HMONG CLAN SIGN YAJ -16B8D ; [.45E0.0020.0002] # PAHAWH HMONG CLAN SIGN TSWB -16B8E ; [.45E1.0020.0002] # PAHAWH HMONG CLAN SIGN KWM -16B8F ; [.45E2.0020.0002] # PAHAWH HMONG CLAN SIGN VWJ -10280 ; [.45E3.0020.0002] # LYCIAN LETTER A -10281 ; [.45E4.0020.0002] # LYCIAN LETTER E -10282 ; [.45E5.0020.0002] # LYCIAN LETTER B -10283 ; [.45E6.0020.0002] # LYCIAN LETTER BH -10284 ; [.45E7.0020.0002] # LYCIAN LETTER G -10285 ; [.45E8.0020.0002] # LYCIAN LETTER D -10286 ; [.45E9.0020.0002] # LYCIAN LETTER I -10287 ; [.45EA.0020.0002] # LYCIAN LETTER W -10288 ; [.45EB.0020.0002] # LYCIAN LETTER Z -10289 ; [.45EC.0020.0002] # LYCIAN LETTER TH -1028A ; [.45ED.0020.0002] # LYCIAN LETTER J -1028B ; [.45EE.0020.0002] # LYCIAN LETTER K -1028C ; [.45EF.0020.0002] # LYCIAN LETTER Q -1028D ; [.45F0.0020.0002] # LYCIAN LETTER L -1028E ; [.45F1.0020.0002] # LYCIAN LETTER M -1028F ; [.45F2.0020.0002] # LYCIAN LETTER N -10290 ; [.45F3.0020.0002] # LYCIAN LETTER MM -10291 ; [.45F4.0020.0002] # LYCIAN LETTER NN -10292 ; [.45F5.0020.0002] # LYCIAN LETTER U -10293 ; [.45F6.0020.0002] # LYCIAN LETTER P -10294 ; [.45F7.0020.0002] # LYCIAN LETTER KK -10295 ; [.45F8.0020.0002] # LYCIAN LETTER R -10296 ; [.45F9.0020.0002] # LYCIAN LETTER S -10297 ; [.45FA.0020.0002] # LYCIAN LETTER T -10298 ; [.45FB.0020.0002] # LYCIAN LETTER TT -10299 ; [.45FC.0020.0002] # LYCIAN LETTER AN -1029A ; [.45FD.0020.0002] # LYCIAN LETTER EN -1029B ; [.45FE.0020.0002] # LYCIAN LETTER H -1029C ; [.45FF.0020.0002] # LYCIAN LETTER X -102A0 ; [.4600.0020.0002] # CARIAN LETTER A -102A1 ; [.4601.0020.0002] # CARIAN LETTER P2 -102A2 ; [.4602.0020.0002] # CARIAN LETTER D -102A3 ; [.4603.0020.0002] # CARIAN LETTER L -102A4 ; [.4604.0020.0002] # CARIAN LETTER UUU -102A5 ; [.4605.0020.0002] # CARIAN LETTER R -102A6 ; [.4606.0020.0002] # CARIAN LETTER LD -102A7 ; [.4607.0020.0002] # CARIAN LETTER A2 -102A8 ; [.4608.0020.0002] # CARIAN LETTER Q -102A9 ; [.4609.0020.0002] # CARIAN LETTER B -102AA ; [.460A.0020.0002] # CARIAN LETTER M -102AB ; [.460B.0020.0002] # CARIAN LETTER O -102AC ; [.460C.0020.0002] # CARIAN LETTER D2 -102AD ; [.460D.0020.0002] # CARIAN LETTER T -102AE ; [.460E.0020.0002] # CARIAN LETTER SH -102AF ; [.460F.0020.0002] # CARIAN LETTER SH2 -102B0 ; [.4610.0020.0002] # CARIAN LETTER S -102B1 ; [.4611.0020.0002] # CARIAN LETTER C-18 -102B2 ; [.4612.0020.0002] # CARIAN LETTER U -102B3 ; [.4613.0020.0002] # CARIAN LETTER NN -102B4 ; [.4614.0020.0002] # CARIAN LETTER X -102B5 ; [.4615.0020.0002] # CARIAN LETTER N -102B6 ; [.4616.0020.0002] # CARIAN LETTER TT2 -102B7 ; [.4617.0020.0002] # CARIAN LETTER P -102B8 ; [.4618.0020.0002] # CARIAN LETTER SS -102B9 ; [.4619.0020.0002] # CARIAN LETTER I -102BA ; [.461A.0020.0002] # CARIAN LETTER E -102BB ; [.461B.0020.0002] # CARIAN LETTER UUUU -102BC ; [.461C.0020.0002] # CARIAN LETTER K -102BD ; [.461D.0020.0002] # CARIAN LETTER K2 -102BE ; [.461E.0020.0002] # CARIAN LETTER ND -102BF ; [.461F.0020.0002] # CARIAN LETTER UU -102C0 ; [.4620.0020.0002] # CARIAN LETTER G -102C1 ; [.4621.0020.0002] # CARIAN LETTER G2 -102C2 ; [.4622.0020.0002] # CARIAN LETTER ST -102C3 ; [.4623.0020.0002] # CARIAN LETTER ST2 -102C4 ; [.4624.0020.0002] # CARIAN LETTER NG -102C5 ; [.4625.0020.0002] # CARIAN LETTER II -102C6 ; [.4626.0020.0002] # CARIAN LETTER C-39 -102C7 ; [.4627.0020.0002] # CARIAN LETTER TT -102C8 ; [.4628.0020.0002] # CARIAN LETTER UUU2 -102C9 ; [.4629.0020.0002] # CARIAN LETTER RR -102CA ; [.462A.0020.0002] # CARIAN LETTER MB -102CB ; [.462B.0020.0002] # CARIAN LETTER MB2 -102CC ; [.462C.0020.0002] # CARIAN LETTER MB3 -102CD ; [.462D.0020.0002] # CARIAN LETTER MB4 -102CE ; [.462E.0020.0002] # CARIAN LETTER LD2 -102CF ; [.462F.0020.0002] # CARIAN LETTER E2 -102D0 ; [.4630.0020.0002] # CARIAN LETTER UUU3 -10920 ; [.4631.0020.0002] # LYDIAN LETTER A -10921 ; [.4632.0020.0002] # LYDIAN LETTER B -10922 ; [.4633.0020.0002] # LYDIAN LETTER G -10923 ; [.4634.0020.0002] # LYDIAN LETTER D -10924 ; [.4635.0020.0002] # LYDIAN LETTER E -10925 ; [.4636.0020.0002] # LYDIAN LETTER V -10926 ; [.4637.0020.0002] # LYDIAN LETTER I -10927 ; [.4638.0020.0002] # LYDIAN LETTER Y -10928 ; [.4639.0020.0002] # LYDIAN LETTER K -10929 ; [.463A.0020.0002] # LYDIAN LETTER L -1092A ; [.463B.0020.0002] # LYDIAN LETTER M -1092B ; [.463C.0020.0002] # LYDIAN LETTER N -1092C ; [.463D.0020.0002] # LYDIAN LETTER O -1092D ; [.463E.0020.0002] # LYDIAN LETTER R -1092E ; [.463F.0020.0002] # LYDIAN LETTER SS -1092F ; [.4640.0020.0002] # LYDIAN LETTER T -10930 ; [.4641.0020.0002] # LYDIAN LETTER U -10931 ; [.4642.0020.0002] # LYDIAN LETTER F -10932 ; [.4643.0020.0002] # LYDIAN LETTER Q -10933 ; [.4644.0020.0002] # LYDIAN LETTER S -10934 ; [.4645.0020.0002] # LYDIAN LETTER TT -10935 ; [.4646.0020.0002] # LYDIAN LETTER AN -10936 ; [.4647.0020.0002] # LYDIAN LETTER EN -10937 ; [.4648.0020.0002] # LYDIAN LETTER LY -10938 ; [.4649.0020.0002] # LYDIAN LETTER NN -10939 ; [.464A.0020.0002] # LYDIAN LETTER C -10300 ; [.464B.0020.0002] # OLD ITALIC LETTER A -10301 ; [.464C.0020.0002] # OLD ITALIC LETTER BE -10302 ; [.464D.0020.0002] # OLD ITALIC LETTER KE -10303 ; [.464E.0020.0002] # OLD ITALIC LETTER DE -10304 ; [.464F.0020.0002] # OLD ITALIC LETTER E -10305 ; [.4650.0020.0002] # OLD ITALIC LETTER VE -10306 ; [.4651.0020.0002] # OLD ITALIC LETTER ZE -10307 ; [.4652.0020.0002] # OLD ITALIC LETTER HE -10308 ; [.4653.0020.0002] # OLD ITALIC LETTER THE -10309 ; [.4654.0020.0002] # OLD ITALIC LETTER I -1030A ; [.4655.0020.0002] # OLD ITALIC LETTER KA -1030B ; [.4656.0020.0002] # OLD ITALIC LETTER EL -1030C ; [.4657.0020.0002] # OLD ITALIC LETTER EM -1030D ; [.4658.0020.0002] # OLD ITALIC LETTER EN -1030E ; [.4659.0020.0002] # OLD ITALIC LETTER ESH -1031F ; [.465A.0020.0002] # OLD ITALIC LETTER ESS -1030F ; [.465B.0020.0002] # OLD ITALIC LETTER O -10310 ; [.465C.0020.0002] # OLD ITALIC LETTER PE -10311 ; [.465D.0020.0002] # OLD ITALIC LETTER SHE -10312 ; [.465E.0020.0002] # OLD ITALIC LETTER KU -10313 ; [.465F.0020.0002] # OLD ITALIC LETTER ER -10314 ; [.4660.0020.0002] # OLD ITALIC LETTER ES -10315 ; [.4661.0020.0002] # OLD ITALIC LETTER TE -10316 ; [.4662.0020.0002] # OLD ITALIC LETTER U -10317 ; [.4663.0020.0002] # OLD ITALIC LETTER EKS -10318 ; [.4664.0020.0002] # OLD ITALIC LETTER PHE -10319 ; [.4665.0020.0002] # OLD ITALIC LETTER KHE -1031A ; [.4666.0020.0002] # OLD ITALIC LETTER EF -1031B ; [.4667.0020.0002] # OLD ITALIC LETTER ERS -1031C ; [.4668.0020.0002] # OLD ITALIC LETTER CHE -1031D ; [.4669.0020.0002] # OLD ITALIC LETTER II -1031E ; [.466A.0020.0002] # OLD ITALIC LETTER UU -1032D ; [.466B.0020.0002] # OLD ITALIC LETTER YE -1032E ; [.466C.0020.0002] # OLD ITALIC LETTER NORTHERN TSE -1032F ; [.466D.0020.0002] # OLD ITALIC LETTER SOUTHERN TSE -10330 ; [.466E.0020.0002] # GOTHIC LETTER AHSA -10331 ; [.466F.0020.0002] # GOTHIC LETTER BAIRKAN -10332 ; [.4670.0020.0002] # GOTHIC LETTER GIBA -10333 ; [.4671.0020.0002] # GOTHIC LETTER DAGS -10334 ; [.4672.0020.0002] # GOTHIC LETTER AIHVUS -10335 ; [.4673.0020.0002] # GOTHIC LETTER QAIRTHRA -10336 ; [.4674.0020.0002] # GOTHIC LETTER IUJA -10337 ; [.4675.0020.0002] # GOTHIC LETTER HAGL -10338 ; [.4676.0020.0002] # GOTHIC LETTER THIUTH -10339 ; [.4677.0020.0002] # GOTHIC LETTER EIS -1033A ; [.4678.0020.0002] # GOTHIC LETTER KUSMA -1033B ; [.4679.0020.0002] # GOTHIC LETTER LAGUS -1033C ; [.467A.0020.0002] # GOTHIC LETTER MANNA -1033D ; [.467B.0020.0002] # GOTHIC LETTER NAUTHS -1033E ; [.467C.0020.0002] # GOTHIC LETTER JER -1033F ; [.467D.0020.0002] # GOTHIC LETTER URUS -10340 ; [.467E.0020.0002] # GOTHIC LETTER PAIRTHRA -10341 ; [.467F.0020.0002] # GOTHIC LETTER NINETY -10342 ; [.4680.0020.0002] # GOTHIC LETTER RAIDA -10343 ; [.4681.0020.0002] # GOTHIC LETTER SAUIL -10344 ; [.4682.0020.0002] # GOTHIC LETTER TEIWS -10345 ; [.4683.0020.0002] # GOTHIC LETTER WINJA -10346 ; [.4684.0020.0002] # GOTHIC LETTER FAIHU -10347 ; [.4685.0020.0002] # GOTHIC LETTER IGGWS -10348 ; [.4686.0020.0002] # GOTHIC LETTER HWAIR -10349 ; [.4687.0020.0002] # GOTHIC LETTER OTHAL -1034A ; [.4688.0020.0002] # GOTHIC LETTER NINE HUNDRED -10428 ; [.4689.0020.0002] # DESERET SMALL LETTER LONG I -10400 ; [.4689.0020.0008] # DESERET CAPITAL LETTER LONG I -10429 ; [.468A.0020.0002] # DESERET SMALL LETTER LONG E -10401 ; [.468A.0020.0008] # DESERET CAPITAL LETTER LONG E -1042A ; [.468B.0020.0002] # DESERET SMALL LETTER LONG A -10402 ; [.468B.0020.0008] # DESERET CAPITAL LETTER LONG A -1042B ; [.468C.0020.0002] # DESERET SMALL LETTER LONG AH -10403 ; [.468C.0020.0008] # DESERET CAPITAL LETTER LONG AH -1042C ; [.468D.0020.0002] # DESERET SMALL LETTER LONG O -10404 ; [.468D.0020.0008] # DESERET CAPITAL LETTER LONG O -1042D ; [.468E.0020.0002] # DESERET SMALL LETTER LONG OO -10405 ; [.468E.0020.0008] # DESERET CAPITAL LETTER LONG OO -1042E ; [.468F.0020.0002] # DESERET SMALL LETTER SHORT I -10406 ; [.468F.0020.0008] # DESERET CAPITAL LETTER SHORT I -1042F ; [.4690.0020.0002] # DESERET SMALL LETTER SHORT E -10407 ; [.4690.0020.0008] # DESERET CAPITAL LETTER SHORT E -10430 ; [.4691.0020.0002] # DESERET SMALL LETTER SHORT A -10408 ; [.4691.0020.0008] # DESERET CAPITAL LETTER SHORT A -10431 ; [.4692.0020.0002] # DESERET SMALL LETTER SHORT AH -10409 ; [.4692.0020.0008] # DESERET CAPITAL LETTER SHORT AH -10432 ; [.4693.0020.0002] # DESERET SMALL LETTER SHORT O -1040A ; [.4693.0020.0008] # DESERET CAPITAL LETTER SHORT O -10433 ; [.4694.0020.0002] # DESERET SMALL LETTER SHORT OO -1040B ; [.4694.0020.0008] # DESERET CAPITAL LETTER SHORT OO -10434 ; [.4695.0020.0002] # DESERET SMALL LETTER AY -1040C ; [.4695.0020.0008] # DESERET CAPITAL LETTER AY -10435 ; [.4696.0020.0002] # DESERET SMALL LETTER OW -1040D ; [.4696.0020.0008] # DESERET CAPITAL LETTER OW -10436 ; [.4697.0020.0002] # DESERET SMALL LETTER WU -1040E ; [.4697.0020.0008] # DESERET CAPITAL LETTER WU -10437 ; [.4698.0020.0002] # DESERET SMALL LETTER YEE -1040F ; [.4698.0020.0008] # DESERET CAPITAL LETTER YEE -10438 ; [.4699.0020.0002] # DESERET SMALL LETTER H -10410 ; [.4699.0020.0008] # DESERET CAPITAL LETTER H -10439 ; [.469A.0020.0002] # DESERET SMALL LETTER PEE -10411 ; [.469A.0020.0008] # DESERET CAPITAL LETTER PEE -1043A ; [.469B.0020.0002] # DESERET SMALL LETTER BEE -10412 ; [.469B.0020.0008] # DESERET CAPITAL LETTER BEE -1043B ; [.469C.0020.0002] # DESERET SMALL LETTER TEE -10413 ; [.469C.0020.0008] # DESERET CAPITAL LETTER TEE -1043C ; [.469D.0020.0002] # DESERET SMALL LETTER DEE -10414 ; [.469D.0020.0008] # DESERET CAPITAL LETTER DEE -1043D ; [.469E.0020.0002] # DESERET SMALL LETTER CHEE -10415 ; [.469E.0020.0008] # DESERET CAPITAL LETTER CHEE -1043E ; [.469F.0020.0002] # DESERET SMALL LETTER JEE -10416 ; [.469F.0020.0008] # DESERET CAPITAL LETTER JEE -1043F ; [.46A0.0020.0002] # DESERET SMALL LETTER KAY -10417 ; [.46A0.0020.0008] # DESERET CAPITAL LETTER KAY -10440 ; [.46A1.0020.0002] # DESERET SMALL LETTER GAY -10418 ; [.46A1.0020.0008] # DESERET CAPITAL LETTER GAY -10441 ; [.46A2.0020.0002] # DESERET SMALL LETTER EF -10419 ; [.46A2.0020.0008] # DESERET CAPITAL LETTER EF -10442 ; [.46A3.0020.0002] # DESERET SMALL LETTER VEE -1041A ; [.46A3.0020.0008] # DESERET CAPITAL LETTER VEE -10443 ; [.46A4.0020.0002] # DESERET SMALL LETTER ETH -1041B ; [.46A4.0020.0008] # DESERET CAPITAL LETTER ETH -10444 ; [.46A5.0020.0002] # DESERET SMALL LETTER THEE -1041C ; [.46A5.0020.0008] # DESERET CAPITAL LETTER THEE -10445 ; [.46A6.0020.0002] # DESERET SMALL LETTER ES -1041D ; [.46A6.0020.0008] # DESERET CAPITAL LETTER ES -10446 ; [.46A7.0020.0002] # DESERET SMALL LETTER ZEE -1041E ; [.46A7.0020.0008] # DESERET CAPITAL LETTER ZEE -10447 ; [.46A8.0020.0002] # DESERET SMALL LETTER ESH -1041F ; [.46A8.0020.0008] # DESERET CAPITAL LETTER ESH -10448 ; [.46A9.0020.0002] # DESERET SMALL LETTER ZHEE -10420 ; [.46A9.0020.0008] # DESERET CAPITAL LETTER ZHEE -10449 ; [.46AA.0020.0002] # DESERET SMALL LETTER ER -10421 ; [.46AA.0020.0008] # DESERET CAPITAL LETTER ER -1044A ; [.46AB.0020.0002] # DESERET SMALL LETTER EL -10422 ; [.46AB.0020.0008] # DESERET CAPITAL LETTER EL -1044B ; [.46AC.0020.0002] # DESERET SMALL LETTER EM -10423 ; [.46AC.0020.0008] # DESERET CAPITAL LETTER EM -1044C ; [.46AD.0020.0002] # DESERET SMALL LETTER EN -10424 ; [.46AD.0020.0008] # DESERET CAPITAL LETTER EN -1044D ; [.46AE.0020.0002] # DESERET SMALL LETTER ENG -10425 ; [.46AE.0020.0008] # DESERET CAPITAL LETTER ENG -1044E ; [.46AF.0020.0002] # DESERET SMALL LETTER OI -10426 ; [.46AF.0020.0008] # DESERET CAPITAL LETTER OI -1044F ; [.46B0.0020.0002] # DESERET SMALL LETTER EW -10427 ; [.46B0.0020.0008] # DESERET CAPITAL LETTER EW -10450 ; [.46B1.0020.0002] # SHAVIAN LETTER PEEP -10451 ; [.46B2.0020.0002] # SHAVIAN LETTER TOT -10452 ; [.46B3.0020.0002] # SHAVIAN LETTER KICK -10453 ; [.46B4.0020.0002] # SHAVIAN LETTER FEE -10454 ; [.46B5.0020.0002] # SHAVIAN LETTER THIGH -10455 ; [.46B6.0020.0002] # SHAVIAN LETTER SO -10456 ; [.46B7.0020.0002] # SHAVIAN LETTER SURE -10457 ; [.46B8.0020.0002] # SHAVIAN LETTER CHURCH -10458 ; [.46B9.0020.0002] # SHAVIAN LETTER YEA -10459 ; [.46BA.0020.0002] # SHAVIAN LETTER HUNG -1045A ; [.46BB.0020.0002] # SHAVIAN LETTER BIB -1045B ; [.46BC.0020.0002] # SHAVIAN LETTER DEAD -1045C ; [.46BD.0020.0002] # SHAVIAN LETTER GAG -1045D ; [.46BE.0020.0002] # SHAVIAN LETTER VOW -1045E ; [.46BF.0020.0002] # SHAVIAN LETTER THEY -1045F ; [.46C0.0020.0002] # SHAVIAN LETTER ZOO -10460 ; [.46C1.0020.0002] # SHAVIAN LETTER MEASURE -10461 ; [.46C2.0020.0002] # SHAVIAN LETTER JUDGE -10462 ; [.46C3.0020.0002] # SHAVIAN LETTER WOE -10463 ; [.46C4.0020.0002] # SHAVIAN LETTER HA-HA -10464 ; [.46C5.0020.0002] # SHAVIAN LETTER LOLL -10465 ; [.46C6.0020.0002] # SHAVIAN LETTER MIME -10466 ; [.46C7.0020.0002] # SHAVIAN LETTER IF -10467 ; [.46C8.0020.0002] # SHAVIAN LETTER EGG -10468 ; [.46C9.0020.0002] # SHAVIAN LETTER ASH -10469 ; [.46CA.0020.0002] # SHAVIAN LETTER ADO -1046A ; [.46CB.0020.0002] # SHAVIAN LETTER ON -1046B ; [.46CC.0020.0002] # SHAVIAN LETTER WOOL -1046C ; [.46CD.0020.0002] # SHAVIAN LETTER OUT -1046D ; [.46CE.0020.0002] # SHAVIAN LETTER AH -1046E ; [.46CF.0020.0002] # SHAVIAN LETTER ROAR -1046F ; [.46D0.0020.0002] # SHAVIAN LETTER NUN -10470 ; [.46D1.0020.0002] # SHAVIAN LETTER EAT -10471 ; [.46D2.0020.0002] # SHAVIAN LETTER AGE -10472 ; [.46D3.0020.0002] # SHAVIAN LETTER ICE -10473 ; [.46D4.0020.0002] # SHAVIAN LETTER UP -10474 ; [.46D5.0020.0002] # SHAVIAN LETTER OAK -10475 ; [.46D6.0020.0002] # SHAVIAN LETTER OOZE -10476 ; [.46D7.0020.0002] # SHAVIAN LETTER OIL -10477 ; [.46D8.0020.0002] # SHAVIAN LETTER AWE -10478 ; [.46D9.0020.0002] # SHAVIAN LETTER ARE -10479 ; [.46DA.0020.0002] # SHAVIAN LETTER OR -1047A ; [.46DB.0020.0002] # SHAVIAN LETTER AIR -1047B ; [.46DC.0020.0002] # SHAVIAN LETTER ERR -1047C ; [.46DD.0020.0002] # SHAVIAN LETTER ARRAY -1047D ; [.46DE.0020.0002] # SHAVIAN LETTER EAR -1047E ; [.46DF.0020.0002] # SHAVIAN LETTER IAN -1047F ; [.46E0.0020.0002] # SHAVIAN LETTER YEW -1BC00 ; [.46E1.0020.0002] # DUPLOYAN LETTER H -1BC01 ; [.46E2.0020.0002] # DUPLOYAN LETTER X -1BC02 ; [.46E3.0020.0002] # DUPLOYAN LETTER P -1BC03 ; [.46E4.0020.0002] # DUPLOYAN LETTER T -1BC04 ; [.46E5.0020.0002] # DUPLOYAN LETTER F -1BC05 ; [.46E6.0020.0002] # DUPLOYAN LETTER K -1BC06 ; [.46E7.0020.0002] # DUPLOYAN LETTER L -1BC07 ; [.46E8.0020.0002] # DUPLOYAN LETTER B -1BC08 ; [.46E9.0020.0002] # DUPLOYAN LETTER D -1BC09 ; [.46EA.0020.0002] # DUPLOYAN LETTER V -1BC0A ; [.46EB.0020.0002] # DUPLOYAN LETTER G -1BC0B ; [.46EC.0020.0002] # DUPLOYAN LETTER R -1BC0C ; [.46ED.0020.0002] # DUPLOYAN LETTER P N -1BC0D ; [.46EE.0020.0002] # DUPLOYAN LETTER D S -1BC0E ; [.46EF.0020.0002] # DUPLOYAN LETTER F N -1BC0F ; [.46F0.0020.0002] # DUPLOYAN LETTER K M -1BC10 ; [.46F1.0020.0002] # DUPLOYAN LETTER R S -1BC11 ; [.46F2.0020.0002] # DUPLOYAN LETTER TH -1BC12 ; [.46F3.0020.0002] # DUPLOYAN LETTER SLOAN DH -1BC13 ; [.46F4.0020.0002] # DUPLOYAN LETTER DH -1BC14 ; [.46F5.0020.0002] # DUPLOYAN LETTER KK -1BC15 ; [.46F6.0020.0002] # DUPLOYAN LETTER SLOAN J -1BC16 ; [.46F7.0020.0002] # DUPLOYAN LETTER HL -1BC17 ; [.46F8.0020.0002] # DUPLOYAN LETTER LH -1BC18 ; [.46F9.0020.0002] # DUPLOYAN LETTER RH -1BC19 ; [.46FA.0020.0002] # DUPLOYAN LETTER M -1BC1A ; [.46FB.0020.0002] # DUPLOYAN LETTER N -1BC1B ; [.46FC.0020.0002] # DUPLOYAN LETTER J -1BC1C ; [.46FD.0020.0002] # DUPLOYAN LETTER S -1BC1D ; [.46FE.0020.0002] # DUPLOYAN LETTER M N -1BC1E ; [.46FF.0020.0002] # DUPLOYAN LETTER N M -1BC1F ; [.4700.0020.0002] # DUPLOYAN LETTER J M -1BC20 ; [.4701.0020.0002] # DUPLOYAN LETTER S J -1BC21 ; [.4702.0020.0002] # DUPLOYAN LETTER M WITH DOT -1BC22 ; [.4703.0020.0002] # DUPLOYAN LETTER N WITH DOT -1BC23 ; [.4704.0020.0002] # DUPLOYAN LETTER J WITH DOT -1BC24 ; [.4705.0020.0002] # DUPLOYAN LETTER J WITH DOTS INSIDE AND ABOVE -1BC25 ; [.4706.0020.0002] # DUPLOYAN LETTER S WITH DOT -1BC26 ; [.4707.0020.0002] # DUPLOYAN LETTER S WITH DOT BELOW -1BC27 ; [.4708.0020.0002] # DUPLOYAN LETTER M S -1BC28 ; [.4709.0020.0002] # DUPLOYAN LETTER N S -1BC29 ; [.470A.0020.0002] # DUPLOYAN LETTER J S -1BC2A ; [.470B.0020.0002] # DUPLOYAN LETTER S S -1BC2B ; [.470C.0020.0002] # DUPLOYAN LETTER M N S -1BC2C ; [.470D.0020.0002] # DUPLOYAN LETTER N M S -1BC2D ; [.470E.0020.0002] # DUPLOYAN LETTER J M S -1BC2E ; [.470F.0020.0002] # DUPLOYAN LETTER S J S -1BC2F ; [.4710.0020.0002] # DUPLOYAN LETTER J S WITH DOT -1BC30 ; [.4711.0020.0002] # DUPLOYAN LETTER J N -1BC31 ; [.4712.0020.0002] # DUPLOYAN LETTER J N S -1BC32 ; [.4713.0020.0002] # DUPLOYAN LETTER S T -1BC33 ; [.4714.0020.0002] # DUPLOYAN LETTER S T R -1BC34 ; [.4715.0020.0002] # DUPLOYAN LETTER S P -1BC35 ; [.4716.0020.0002] # DUPLOYAN LETTER S P R -1BC36 ; [.4717.0020.0002] # DUPLOYAN LETTER T S -1BC37 ; [.4718.0020.0002] # DUPLOYAN LETTER T R S -1BC38 ; [.4719.0020.0002] # DUPLOYAN LETTER W -1BC39 ; [.471A.0020.0002] # DUPLOYAN LETTER WH -1BC3A ; [.471B.0020.0002] # DUPLOYAN LETTER W R -1BC3B ; [.471C.0020.0002] # DUPLOYAN LETTER S N -1BC3C ; [.471D.0020.0002] # DUPLOYAN LETTER S M -1BC3D ; [.471E.0020.0002] # DUPLOYAN LETTER K R S -1BC3E ; [.471F.0020.0002] # DUPLOYAN LETTER G R S -1BC3F ; [.4720.0020.0002] # DUPLOYAN LETTER S K -1BC40 ; [.4721.0020.0002] # DUPLOYAN LETTER S K R -1BC41 ; [.4722.0020.0002] # DUPLOYAN LETTER A -1BC42 ; [.4723.0020.0002] # DUPLOYAN LETTER SLOAN OW -1BC43 ; [.4724.0020.0002] # DUPLOYAN LETTER OA -1BC44 ; [.4725.0020.0002] # DUPLOYAN LETTER O -1BC45 ; [.4726.0020.0002] # DUPLOYAN LETTER AOU -1BC46 ; [.4727.0020.0002] # DUPLOYAN LETTER I -1BC47 ; [.4728.0020.0002] # DUPLOYAN LETTER E -1BC48 ; [.4729.0020.0002] # DUPLOYAN LETTER IE -1BC49 ; [.472A.0020.0002] # DUPLOYAN LETTER SHORT I -1BC4A ; [.472B.0020.0002] # DUPLOYAN LETTER UI -1BC4B ; [.472C.0020.0002] # DUPLOYAN LETTER EE -1BC4C ; [.472D.0020.0002] # DUPLOYAN LETTER SLOAN EH -1BC4D ; [.472E.0020.0002] # DUPLOYAN LETTER ROMANIAN I -1BC4E ; [.472F.0020.0002] # DUPLOYAN LETTER SLOAN EE -1BC4F ; [.4730.0020.0002] # DUPLOYAN LETTER LONG I -1BC50 ; [.4731.0020.0002] # DUPLOYAN LETTER YE -1BC51 ; [.4732.0020.0002] # DUPLOYAN LETTER U -1BC52 ; [.4733.0020.0002] # DUPLOYAN LETTER EU -1BC53 ; [.4734.0020.0002] # DUPLOYAN LETTER XW -1BC54 ; [.4735.0020.0002] # DUPLOYAN LETTER U N -1BC55 ; [.4736.0020.0002] # DUPLOYAN LETTER LONG U -1BC56 ; [.4737.0020.0002] # DUPLOYAN LETTER ROMANIAN U -1BC57 ; [.4738.0020.0002] # DUPLOYAN LETTER UH -1BC58 ; [.4739.0020.0002] # DUPLOYAN LETTER SLOAN U -1BC59 ; [.473A.0020.0002] # DUPLOYAN LETTER OOH -1BC5A ; [.473B.0020.0002] # DUPLOYAN LETTER OW -1BC5B ; [.473C.0020.0002] # DUPLOYAN LETTER OU -1BC5C ; [.473D.0020.0002] # DUPLOYAN LETTER WA -1BC5D ; [.473E.0020.0002] # DUPLOYAN LETTER WO -1BC5E ; [.473F.0020.0002] # DUPLOYAN LETTER WI -1BC5F ; [.4740.0020.0002] # DUPLOYAN LETTER WEI -1BC60 ; [.4741.0020.0002] # DUPLOYAN LETTER WOW -1BC61 ; [.4742.0020.0002] # DUPLOYAN LETTER NASAL U -1BC62 ; [.4743.0020.0002] # DUPLOYAN LETTER NASAL O -1BC63 ; [.4744.0020.0002] # DUPLOYAN LETTER NASAL I -1BC64 ; [.4745.0020.0002] # DUPLOYAN LETTER NASAL A -1BC65 ; [.4746.0020.0002] # DUPLOYAN LETTER PERNIN AN -1BC66 ; [.4747.0020.0002] # DUPLOYAN LETTER PERNIN AM -1BC67 ; [.4748.0020.0002] # DUPLOYAN LETTER SLOAN EN -1BC68 ; [.4749.0020.0002] # DUPLOYAN LETTER SLOAN AN -1BC69 ; [.474A.0020.0002] # DUPLOYAN LETTER SLOAN ON -1BC6A ; [.474B.0020.0002] # DUPLOYAN LETTER VOCALIC M -1BC70 ; [.474C.0020.0002] # DUPLOYAN AFFIX LEFT HORIZONTAL SECANT -1BC71 ; [.474D.0020.0002] # DUPLOYAN AFFIX MID HORIZONTAL SECANT -1BC72 ; [.474E.0020.0002] # DUPLOYAN AFFIX RIGHT HORIZONTAL SECANT -1BC73 ; [.474F.0020.0002] # DUPLOYAN AFFIX LOW VERTICAL SECANT -1BC74 ; [.4750.0020.0002] # DUPLOYAN AFFIX MID VERTICAL SECANT -1BC75 ; [.4751.0020.0002] # DUPLOYAN AFFIX HIGH VERTICAL SECANT -1BC76 ; [.4752.0020.0002] # DUPLOYAN AFFIX ATTACHED SECANT -1BC77 ; [.4753.0020.0002] # DUPLOYAN AFFIX ATTACHED LEFT-TO-RIGHT SECANT -1BC78 ; [.4754.0020.0002] # DUPLOYAN AFFIX ATTACHED TANGENT -1BC79 ; [.4755.0020.0002] # DUPLOYAN AFFIX ATTACHED TAIL -1BC7A ; [.4756.0020.0002] # DUPLOYAN AFFIX ATTACHED E HOOK -1BC7B ; [.4757.0020.0002] # DUPLOYAN AFFIX ATTACHED I HOOK -1BC7C ; [.4758.0020.0002] # DUPLOYAN AFFIX ATTACHED TANGENT HOOK -1BC80 ; [.4759.0020.0002] # DUPLOYAN AFFIX HIGH ACUTE -1BC81 ; [.475A.0020.0002] # DUPLOYAN AFFIX HIGH TIGHT ACUTE -1BC82 ; [.475B.0020.0002] # DUPLOYAN AFFIX HIGH GRAVE -1BC83 ; [.475C.0020.0002] # DUPLOYAN AFFIX HIGH LONG GRAVE -1BC84 ; [.475D.0020.0002] # DUPLOYAN AFFIX HIGH DOT -1BC85 ; [.475E.0020.0002] # DUPLOYAN AFFIX HIGH CIRCLE -1BC86 ; [.475F.0020.0002] # DUPLOYAN AFFIX HIGH LINE -1BC87 ; [.4760.0020.0002] # DUPLOYAN AFFIX HIGH WAVE -1BC88 ; [.4761.0020.0002] # DUPLOYAN AFFIX HIGH VERTICAL -1BC90 ; [.4762.0020.0002] # DUPLOYAN AFFIX LOW ACUTE -1BC91 ; [.4763.0020.0002] # DUPLOYAN AFFIX LOW TIGHT ACUTE -1BC92 ; [.4764.0020.0002] # DUPLOYAN AFFIX LOW GRAVE -1BC93 ; [.4765.0020.0002] # DUPLOYAN AFFIX LOW LONG GRAVE -1BC94 ; [.4766.0020.0002] # DUPLOYAN AFFIX LOW DOT -1BC95 ; [.4767.0020.0002] # DUPLOYAN AFFIX LOW CIRCLE -1BC96 ; [.4768.0020.0002] # DUPLOYAN AFFIX LOW LINE -1BC97 ; [.4769.0020.0002] # DUPLOYAN AFFIX LOW WAVE -1BC98 ; [.476A.0020.0002] # DUPLOYAN AFFIX LOW VERTICAL -1BC99 ; [.476B.0020.0002] # DUPLOYAN AFFIX LOW ARROW -10480 ; [.476C.0020.0002] # OSMANYA LETTER ALEF -10481 ; [.476D.0020.0002] # OSMANYA LETTER BA -10482 ; [.476E.0020.0002] # OSMANYA LETTER TA -10483 ; [.476F.0020.0002] # OSMANYA LETTER JA -10484 ; [.4770.0020.0002] # OSMANYA LETTER XA -10485 ; [.4771.0020.0002] # OSMANYA LETTER KHA -10486 ; [.4772.0020.0002] # OSMANYA LETTER DEEL -10487 ; [.4773.0020.0002] # OSMANYA LETTER RA -10488 ; [.4774.0020.0002] # OSMANYA LETTER SA -10489 ; [.4775.0020.0002] # OSMANYA LETTER SHIIN -1048A ; [.4776.0020.0002] # OSMANYA LETTER DHA -1048B ; [.4777.0020.0002] # OSMANYA LETTER CAYN -1048C ; [.4778.0020.0002] # OSMANYA LETTER GA -1048D ; [.4779.0020.0002] # OSMANYA LETTER FA -1048E ; [.477A.0020.0002] # OSMANYA LETTER QAAF -1048F ; [.477B.0020.0002] # OSMANYA LETTER KAAF -10490 ; [.477C.0020.0002] # OSMANYA LETTER LAAN -10491 ; [.477D.0020.0002] # OSMANYA LETTER MIIN -10492 ; [.477E.0020.0002] # OSMANYA LETTER NUUN -10493 ; [.477F.0020.0002] # OSMANYA LETTER WAW -10494 ; [.4780.0020.0002] # OSMANYA LETTER HA -10495 ; [.4781.0020.0002] # OSMANYA LETTER YA -10496 ; [.4782.0020.0002] # OSMANYA LETTER A -10497 ; [.4783.0020.0002] # OSMANYA LETTER E -10498 ; [.4784.0020.0002] # OSMANYA LETTER I -10499 ; [.4785.0020.0002] # OSMANYA LETTER O -1049A ; [.4786.0020.0002] # OSMANYA LETTER U -1049B ; [.4787.0020.0002] # OSMANYA LETTER AA -1049C ; [.4788.0020.0002] # OSMANYA LETTER EE -1049D ; [.4789.0020.0002] # OSMANYA LETTER OO -10500 ; [.478A.0020.0002] # ELBASAN LETTER A -10501 ; [.478B.0020.0002] # ELBASAN LETTER BE -10502 ; [.478C.0020.0002] # ELBASAN LETTER CE -10503 ; [.478D.0020.0002] # ELBASAN LETTER CHE -10504 ; [.478E.0020.0002] # ELBASAN LETTER DE -10505 ; [.478F.0020.0002] # ELBASAN LETTER NDE -10506 ; [.4790.0020.0002] # ELBASAN LETTER DHE -10507 ; [.4791.0020.0002] # ELBASAN LETTER EI -10508 ; [.4792.0020.0002] # ELBASAN LETTER E -10509 ; [.4793.0020.0002] # ELBASAN LETTER FE -1050A ; [.4794.0020.0002] # ELBASAN LETTER GE -1050B ; [.4795.0020.0002] # ELBASAN LETTER GJE -1050C ; [.4796.0020.0002] # ELBASAN LETTER HE -1050D ; [.4797.0020.0002] # ELBASAN LETTER I -1050E ; [.4798.0020.0002] # ELBASAN LETTER JE -1050F ; [.4799.0020.0002] # ELBASAN LETTER KE -10510 ; [.479A.0020.0002] # ELBASAN LETTER LE -10511 ; [.479B.0020.0002] # ELBASAN LETTER LLE -10512 ; [.479C.0020.0002] # ELBASAN LETTER ME -10513 ; [.479D.0020.0002] # ELBASAN LETTER NE -10514 ; [.479E.0020.0002] # ELBASAN LETTER NA -10515 ; [.479F.0020.0002] # ELBASAN LETTER NJE -10516 ; [.47A0.0020.0002] # ELBASAN LETTER O -10517 ; [.47A1.0020.0002] # ELBASAN LETTER PE -10518 ; [.47A2.0020.0002] # ELBASAN LETTER QE -10519 ; [.47A3.0020.0002] # ELBASAN LETTER RE -1051A ; [.47A4.0020.0002] # ELBASAN LETTER RRE -1051B ; [.47A5.0020.0002] # ELBASAN LETTER SE -1051C ; [.47A6.0020.0002] # ELBASAN LETTER SHE -1051D ; [.47A7.0020.0002] # ELBASAN LETTER TE -1051E ; [.47A8.0020.0002] # ELBASAN LETTER THE -1051F ; [.47A9.0020.0002] # ELBASAN LETTER U -10520 ; [.47AA.0020.0002] # ELBASAN LETTER VE -10521 ; [.47AB.0020.0002] # ELBASAN LETTER XE -10522 ; [.47AC.0020.0002] # ELBASAN LETTER Y -10523 ; [.47AD.0020.0002] # ELBASAN LETTER ZE -10524 ; [.47AE.0020.0002] # ELBASAN LETTER ZHE -10525 ; [.47AF.0020.0002] # ELBASAN LETTER GHE -10526 ; [.47B0.0020.0002] # ELBASAN LETTER GHAMMA -10527 ; [.47B1.0020.0002] # ELBASAN LETTER KHE -10530 ; [.47B2.0020.0002] # CAUCASIAN ALBANIAN LETTER ALT -10531 ; [.47B3.0020.0002] # CAUCASIAN ALBANIAN LETTER BET -10532 ; [.47B4.0020.0002] # CAUCASIAN ALBANIAN LETTER GIM -10533 ; [.47B5.0020.0002] # CAUCASIAN ALBANIAN LETTER DAT -10534 ; [.47B6.0020.0002] # CAUCASIAN ALBANIAN LETTER EB -10535 ; [.47B7.0020.0002] # CAUCASIAN ALBANIAN LETTER ZARL -10536 ; [.47B8.0020.0002] # CAUCASIAN ALBANIAN LETTER EYN -10537 ; [.47B9.0020.0002] # CAUCASIAN ALBANIAN LETTER ZHIL -10538 ; [.47BA.0020.0002] # CAUCASIAN ALBANIAN LETTER TAS -10539 ; [.47BB.0020.0002] # CAUCASIAN ALBANIAN LETTER CHA -1053A ; [.47BC.0020.0002] # CAUCASIAN ALBANIAN LETTER YOWD -1053B ; [.47BD.0020.0002] # CAUCASIAN ALBANIAN LETTER ZHA -1053C ; [.47BE.0020.0002] # CAUCASIAN ALBANIAN LETTER IRB -1053D ; [.47BF.0020.0002] # CAUCASIAN ALBANIAN LETTER SHA -1053E ; [.47C0.0020.0002] # CAUCASIAN ALBANIAN LETTER LAN -1053F ; [.47C1.0020.0002] # CAUCASIAN ALBANIAN LETTER INYA -10540 ; [.47C2.0020.0002] # CAUCASIAN ALBANIAN LETTER XEYN -10541 ; [.47C3.0020.0002] # CAUCASIAN ALBANIAN LETTER DYAN -10542 ; [.47C4.0020.0002] # CAUCASIAN ALBANIAN LETTER CAR -10543 ; [.47C5.0020.0002] # CAUCASIAN ALBANIAN LETTER JHOX -10544 ; [.47C6.0020.0002] # CAUCASIAN ALBANIAN LETTER KAR -10545 ; [.47C7.0020.0002] # CAUCASIAN ALBANIAN LETTER LYIT -10546 ; [.47C8.0020.0002] # CAUCASIAN ALBANIAN LETTER HEYT -10547 ; [.47C9.0020.0002] # CAUCASIAN ALBANIAN LETTER QAY -10548 ; [.47CA.0020.0002] # CAUCASIAN ALBANIAN LETTER AOR -10549 ; [.47CB.0020.0002] # CAUCASIAN ALBANIAN LETTER CHOY -1054A ; [.47CC.0020.0002] # CAUCASIAN ALBANIAN LETTER CHI -1054B ; [.47CD.0020.0002] # CAUCASIAN ALBANIAN LETTER CYAY -1054C ; [.47CE.0020.0002] # CAUCASIAN ALBANIAN LETTER MAQ -1054D ; [.47CF.0020.0002] # CAUCASIAN ALBANIAN LETTER QAR -1054E ; [.47D0.0020.0002] # CAUCASIAN ALBANIAN LETTER NOWC -1054F ; [.47D1.0020.0002] # CAUCASIAN ALBANIAN LETTER DZYAY -10550 ; [.47D2.0020.0002] # CAUCASIAN ALBANIAN LETTER SHAK -10551 ; [.47D3.0020.0002] # CAUCASIAN ALBANIAN LETTER JAYN -10552 ; [.47D4.0020.0002] # CAUCASIAN ALBANIAN LETTER ON -10553 ; [.47D5.0020.0002] # CAUCASIAN ALBANIAN LETTER TYAY -10554 ; [.47D6.0020.0002] # CAUCASIAN ALBANIAN LETTER FAM -10555 ; [.47D7.0020.0002] # CAUCASIAN ALBANIAN LETTER DZAY -10556 ; [.47D8.0020.0002] # CAUCASIAN ALBANIAN LETTER CHAT -10557 ; [.47D9.0020.0002] # CAUCASIAN ALBANIAN LETTER PEN -10558 ; [.47DA.0020.0002] # CAUCASIAN ALBANIAN LETTER GHEYS -10559 ; [.47DB.0020.0002] # CAUCASIAN ALBANIAN LETTER RAT -1055A ; [.47DC.0020.0002] # CAUCASIAN ALBANIAN LETTER SEYK -1055B ; [.47DD.0020.0002] # CAUCASIAN ALBANIAN LETTER VEYZ -1055C ; [.47DE.0020.0002] # CAUCASIAN ALBANIAN LETTER TIWR -1055D ; [.47DF.0020.0002] # CAUCASIAN ALBANIAN LETTER SHOY -1055E ; [.47E0.0020.0002] # CAUCASIAN ALBANIAN LETTER IWN -1055F ; [.47E1.0020.0002] # CAUCASIAN ALBANIAN LETTER CYAW -10560 ; [.47E2.0020.0002] # CAUCASIAN ALBANIAN LETTER CAYN -10561 ; [.47E3.0020.0002] # CAUCASIAN ALBANIAN LETTER YAYD -10562 ; [.47E4.0020.0002] # CAUCASIAN ALBANIAN LETTER PIWR -10563 ; [.47E5.0020.0002] # CAUCASIAN ALBANIAN LETTER KIW -110D0 ; [.47E6.0020.0002] # SORA SOMPENG LETTER SAH -110D1 ; [.47E7.0020.0002] # SORA SOMPENG LETTER TAH -110D2 ; [.47E8.0020.0002] # SORA SOMPENG LETTER BAH -110D3 ; [.47E9.0020.0002] # SORA SOMPENG LETTER CAH -110D4 ; [.47EA.0020.0002] # SORA SOMPENG LETTER DAH -110D5 ; [.47EB.0020.0002] # SORA SOMPENG LETTER GAH -110D6 ; [.47EC.0020.0002] # SORA SOMPENG LETTER MAH -110D7 ; [.47ED.0020.0002] # SORA SOMPENG LETTER NGAH -110D8 ; [.47EE.0020.0002] # SORA SOMPENG LETTER LAH -110D9 ; [.47EF.0020.0002] # SORA SOMPENG LETTER NAH -110DA ; [.47F0.0020.0002] # SORA SOMPENG LETTER VAH -110DB ; [.47F1.0020.0002] # SORA SOMPENG LETTER PAH -110DC ; [.47F2.0020.0002] # SORA SOMPENG LETTER YAH -110DD ; [.47F3.0020.0002] # SORA SOMPENG LETTER RAH -110DE ; [.47F4.0020.0002] # SORA SOMPENG LETTER HAH -110DF ; [.47F5.0020.0002] # SORA SOMPENG LETTER KAH -110E0 ; [.47F6.0020.0002] # SORA SOMPENG LETTER JAH -110E1 ; [.47F7.0020.0002] # SORA SOMPENG LETTER NYAH -110E2 ; [.47F8.0020.0002] # SORA SOMPENG LETTER AH -110E3 ; [.47F9.0020.0002] # SORA SOMPENG LETTER EEH -110E4 ; [.47FA.0020.0002] # SORA SOMPENG LETTER IH -110E5 ; [.47FB.0020.0002] # SORA SOMPENG LETTER UH -110E6 ; [.47FC.0020.0002] # SORA SOMPENG LETTER OH -110E7 ; [.47FD.0020.0002] # SORA SOMPENG LETTER EH -110E8 ; [.47FE.0020.0002] # SORA SOMPENG LETTER MAE -16A40 ; [.47FF.0020.0002] # MRO LETTER TA -16A41 ; [.4800.0020.0002] # MRO LETTER NGI -16A42 ; [.4801.0020.0002] # MRO LETTER YO -16A43 ; [.4802.0020.0002] # MRO LETTER MIM -16A44 ; [.4803.0020.0002] # MRO LETTER BA -16A45 ; [.4804.0020.0002] # MRO LETTER DA -16A46 ; [.4805.0020.0002] # MRO LETTER A -16A47 ; [.4806.0020.0002] # MRO LETTER PHI -16A48 ; [.4807.0020.0002] # MRO LETTER KHAI -16A49 ; [.4808.0020.0002] # MRO LETTER HAO -16A4A ; [.4809.0020.0002] # MRO LETTER DAI -16A4B ; [.480A.0020.0002] # MRO LETTER CHU -16A4C ; [.480B.0020.0002] # MRO LETTER KEAAE -16A4D ; [.480C.0020.0002] # MRO LETTER OL -16A4E ; [.480D.0020.0002] # MRO LETTER MAEM -16A4F ; [.480E.0020.0002] # MRO LETTER NIN -16A50 ; [.480F.0020.0002] # MRO LETTER PA -16A51 ; [.4810.0020.0002] # MRO LETTER OO -16A52 ; [.4811.0020.0002] # MRO LETTER O -16A53 ; [.4812.0020.0002] # MRO LETTER RO -16A54 ; [.4813.0020.0002] # MRO LETTER SHI -16A55 ; [.4814.0020.0002] # MRO LETTER THEA -16A56 ; [.4815.0020.0002] # MRO LETTER EA -16A57 ; [.4816.0020.0002] # MRO LETTER WA -16A58 ; [.4817.0020.0002] # MRO LETTER E -16A59 ; [.4818.0020.0002] # MRO LETTER KO -16A5A ; [.4819.0020.0002] # MRO LETTER LAN -16A5B ; [.481A.0020.0002] # MRO LETTER LA -16A5C ; [.481B.0020.0002] # MRO LETTER HAI -16A5D ; [.481C.0020.0002] # MRO LETTER RI -16A5E ; [.481D.0020.0002] # MRO LETTER TEK -10000 ; [.481E.0020.0002] # LINEAR B SYLLABLE B008 A -10001 ; [.481F.0020.0002] # LINEAR B SYLLABLE B038 E -10002 ; [.4820.0020.0002] # LINEAR B SYLLABLE B028 I -10003 ; [.4821.0020.0002] # LINEAR B SYLLABLE B061 O -10004 ; [.4822.0020.0002] # LINEAR B SYLLABLE B010 U -10005 ; [.4823.0020.0002] # LINEAR B SYLLABLE B001 DA -10006 ; [.4824.0020.0002] # LINEAR B SYLLABLE B045 DE -10007 ; [.4825.0020.0002] # LINEAR B SYLLABLE B007 DI -10008 ; [.4826.0020.0002] # LINEAR B SYLLABLE B014 DO -10009 ; [.4827.0020.0002] # LINEAR B SYLLABLE B051 DU -1000A ; [.4828.0020.0002] # LINEAR B SYLLABLE B057 JA -1000B ; [.4829.0020.0002] # LINEAR B SYLLABLE B046 JE -1000D ; [.482A.0020.0002] # LINEAR B SYLLABLE B036 JO -1000E ; [.482B.0020.0002] # LINEAR B SYLLABLE B065 JU -1000F ; [.482C.0020.0002] # LINEAR B SYLLABLE B077 KA -10010 ; [.482D.0020.0002] # LINEAR B SYLLABLE B044 KE -10011 ; [.482E.0020.0002] # LINEAR B SYLLABLE B067 KI -10012 ; [.482F.0020.0002] # LINEAR B SYLLABLE B070 KO -10013 ; [.4830.0020.0002] # LINEAR B SYLLABLE B081 KU -10014 ; [.4831.0020.0002] # LINEAR B SYLLABLE B080 MA -10015 ; [.4832.0020.0002] # LINEAR B SYLLABLE B013 ME -10016 ; [.4833.0020.0002] # LINEAR B SYLLABLE B073 MI -10017 ; [.4834.0020.0002] # LINEAR B SYLLABLE B015 MO -10018 ; [.4835.0020.0002] # LINEAR B SYLLABLE B023 MU -10019 ; [.4836.0020.0002] # LINEAR B SYLLABLE B006 NA -1001A ; [.4837.0020.0002] # LINEAR B SYLLABLE B024 NE -1001B ; [.4838.0020.0002] # LINEAR B SYLLABLE B030 NI -1001C ; [.4839.0020.0002] # LINEAR B SYLLABLE B052 NO -1001D ; [.483A.0020.0002] # LINEAR B SYLLABLE B055 NU -1001E ; [.483B.0020.0002] # LINEAR B SYLLABLE B003 PA -1001F ; [.483C.0020.0002] # LINEAR B SYLLABLE B072 PE -10020 ; [.483D.0020.0002] # LINEAR B SYLLABLE B039 PI -10021 ; [.483E.0020.0002] # LINEAR B SYLLABLE B011 PO -10022 ; [.483F.0020.0002] # LINEAR B SYLLABLE B050 PU -10023 ; [.4840.0020.0002] # LINEAR B SYLLABLE B016 QA -10024 ; [.4841.0020.0002] # LINEAR B SYLLABLE B078 QE -10025 ; [.4842.0020.0002] # LINEAR B SYLLABLE B021 QI -10026 ; [.4843.0020.0002] # LINEAR B SYLLABLE B032 QO -10028 ; [.4844.0020.0002] # LINEAR B SYLLABLE B060 RA -10029 ; [.4845.0020.0002] # LINEAR B SYLLABLE B027 RE -1002A ; [.4846.0020.0002] # LINEAR B SYLLABLE B053 RI -1002B ; [.4847.0020.0002] # LINEAR B SYLLABLE B002 RO -1002C ; [.4848.0020.0002] # LINEAR B SYLLABLE B026 RU -1002D ; [.4849.0020.0002] # LINEAR B SYLLABLE B031 SA -1002E ; [.484A.0020.0002] # LINEAR B SYLLABLE B009 SE -1002F ; [.484B.0020.0002] # LINEAR B SYLLABLE B041 SI -10030 ; [.484C.0020.0002] # LINEAR B SYLLABLE B012 SO -10031 ; [.484D.0020.0002] # LINEAR B SYLLABLE B058 SU -10032 ; [.484E.0020.0002] # LINEAR B SYLLABLE B059 TA -10033 ; [.484F.0020.0002] # LINEAR B SYLLABLE B004 TE -10034 ; [.4850.0020.0002] # LINEAR B SYLLABLE B037 TI -10035 ; [.4851.0020.0002] # LINEAR B SYLLABLE B005 TO -10036 ; [.4852.0020.0002] # LINEAR B SYLLABLE B069 TU -10037 ; [.4853.0020.0002] # LINEAR B SYLLABLE B054 WA -10038 ; [.4854.0020.0002] # LINEAR B SYLLABLE B075 WE -10039 ; [.4855.0020.0002] # LINEAR B SYLLABLE B040 WI -1003A ; [.4856.0020.0002] # LINEAR B SYLLABLE B042 WO -1003C ; [.4857.0020.0002] # LINEAR B SYLLABLE B017 ZA -1003D ; [.4858.0020.0002] # LINEAR B SYLLABLE B074 ZE -1003F ; [.4859.0020.0002] # LINEAR B SYLLABLE B020 ZO -10040 ; [.485A.0020.0002] # LINEAR B SYLLABLE B025 A2 -10041 ; [.485B.0020.0002] # LINEAR B SYLLABLE B043 A3 -10042 ; [.485C.0020.0002] # LINEAR B SYLLABLE B085 AU -10043 ; [.485D.0020.0002] # LINEAR B SYLLABLE B071 DWE -10044 ; [.485E.0020.0002] # LINEAR B SYLLABLE B090 DWO -10045 ; [.485F.0020.0002] # LINEAR B SYLLABLE B048 NWA -10046 ; [.4860.0020.0002] # LINEAR B SYLLABLE B029 PU2 -10047 ; [.4861.0020.0002] # LINEAR B SYLLABLE B062 PTE -10048 ; [.4862.0020.0002] # LINEAR B SYLLABLE B076 RA2 -10049 ; [.4863.0020.0002] # LINEAR B SYLLABLE B033 RA3 -1004A ; [.4864.0020.0002] # LINEAR B SYLLABLE B068 RO2 -1004B ; [.4865.0020.0002] # LINEAR B SYLLABLE B066 TA2 -1004C ; [.4866.0020.0002] # LINEAR B SYLLABLE B087 TWE -1004D ; [.4867.0020.0002] # LINEAR B SYLLABLE B091 TWO -10050 ; [.4868.0020.0002] # LINEAR B SYMBOL B018 -10051 ; [.4869.0020.0002] # LINEAR B SYMBOL B019 -10052 ; [.486A.0020.0002] # LINEAR B SYMBOL B022 -10053 ; [.486B.0020.0002] # LINEAR B SYMBOL B034 -10054 ; [.486C.0020.0002] # LINEAR B SYMBOL B047 -10055 ; [.486D.0020.0002] # LINEAR B SYMBOL B049 -10056 ; [.486E.0020.0002] # LINEAR B SYMBOL B056 -10057 ; [.486F.0020.0002] # LINEAR B SYMBOL B063 -10058 ; [.4870.0020.0002] # LINEAR B SYMBOL B064 -10059 ; [.4871.0020.0002] # LINEAR B SYMBOL B079 -1005A ; [.4872.0020.0002] # LINEAR B SYMBOL B082 -1005B ; [.4873.0020.0002] # LINEAR B SYMBOL B083 -1005C ; [.4874.0020.0002] # LINEAR B SYMBOL B086 -1005D ; [.4875.0020.0002] # LINEAR B SYMBOL B089 -10080 ; [.4876.0020.0002] # LINEAR B IDEOGRAM B100 MAN -10081 ; [.4877.0020.0002] # LINEAR B IDEOGRAM B102 WOMAN -10082 ; [.4878.0020.0002] # LINEAR B IDEOGRAM B104 DEER -10083 ; [.4879.0020.0002] # LINEAR B IDEOGRAM B105 EQUID -10084 ; [.487A.0020.0002] # LINEAR B IDEOGRAM B105F MARE -10085 ; [.487B.0020.0002] # LINEAR B IDEOGRAM B105M STALLION -10086 ; [.487C.0020.0002] # LINEAR B IDEOGRAM B106F EWE -10087 ; [.487D.0020.0002] # LINEAR B IDEOGRAM B106M RAM -10088 ; [.487E.0020.0002] # LINEAR B IDEOGRAM B107F SHE-GOAT -10089 ; [.487F.0020.0002] # LINEAR B IDEOGRAM B107M HE-GOAT -1008A ; [.4880.0020.0002] # LINEAR B IDEOGRAM B108F SOW -1008B ; [.4881.0020.0002] # LINEAR B IDEOGRAM B108M BOAR -1008C ; [.4882.0020.0002] # LINEAR B IDEOGRAM B109F COW -1008D ; [.4883.0020.0002] # LINEAR B IDEOGRAM B109M BULL -1008E ; [.4884.0020.0002] # LINEAR B IDEOGRAM B120 WHEAT -1008F ; [.4885.0020.0002] # LINEAR B IDEOGRAM B121 BARLEY -10090 ; [.4886.0020.0002] # LINEAR B IDEOGRAM B122 OLIVE -10091 ; [.4887.0020.0002] # LINEAR B IDEOGRAM B123 SPICE -10092 ; [.4888.0020.0002] # LINEAR B IDEOGRAM B125 CYPERUS -10093 ; [.4889.0020.0002] # LINEAR B MONOGRAM B127 KAPO -10094 ; [.488A.0020.0002] # LINEAR B MONOGRAM B128 KANAKO -10095 ; [.488B.0020.0002] # LINEAR B IDEOGRAM B130 OIL -10096 ; [.488C.0020.0002] # LINEAR B IDEOGRAM B131 WINE -10097 ; [.488D.0020.0002] # LINEAR B IDEOGRAM B132 -10098 ; [.488E.0020.0002] # LINEAR B MONOGRAM B133 AREPA -10099 ; [.488F.0020.0002] # LINEAR B MONOGRAM B135 MERI -1009A ; [.4890.0020.0002] # LINEAR B IDEOGRAM B140 BRONZE -1009B ; [.4891.0020.0002] # LINEAR B IDEOGRAM B141 GOLD -1009C ; [.4892.0020.0002] # LINEAR B IDEOGRAM B142 -1009D ; [.4893.0020.0002] # LINEAR B IDEOGRAM B145 WOOL -1009E ; [.4894.0020.0002] # LINEAR B IDEOGRAM B146 -1009F ; [.4895.0020.0002] # LINEAR B IDEOGRAM B150 -100A0 ; [.4896.0020.0002] # LINEAR B IDEOGRAM B151 HORN -100A1 ; [.4897.0020.0002] # LINEAR B IDEOGRAM B152 -100A2 ; [.4898.0020.0002] # LINEAR B IDEOGRAM B153 -100A3 ; [.4899.0020.0002] # LINEAR B IDEOGRAM B154 -100A4 ; [.489A.0020.0002] # LINEAR B MONOGRAM B156 TURO2 -100A5 ; [.489B.0020.0002] # LINEAR B IDEOGRAM B157 -100A6 ; [.489C.0020.0002] # LINEAR B IDEOGRAM B158 -100A7 ; [.489D.0020.0002] # LINEAR B IDEOGRAM B159 CLOTH -100A8 ; [.489E.0020.0002] # LINEAR B IDEOGRAM B160 -100A9 ; [.489F.0020.0002] # LINEAR B IDEOGRAM B161 -100AA ; [.48A0.0020.0002] # LINEAR B IDEOGRAM B162 GARMENT -100AB ; [.48A1.0020.0002] # LINEAR B IDEOGRAM B163 ARMOUR -100AC ; [.48A2.0020.0002] # LINEAR B IDEOGRAM B164 -100AD ; [.48A3.0020.0002] # LINEAR B IDEOGRAM B165 -100AE ; [.48A4.0020.0002] # LINEAR B IDEOGRAM B166 -100AF ; [.48A5.0020.0002] # LINEAR B IDEOGRAM B167 -100B0 ; [.48A6.0020.0002] # LINEAR B IDEOGRAM B168 -100B1 ; [.48A7.0020.0002] # LINEAR B IDEOGRAM B169 -100B2 ; [.48A8.0020.0002] # LINEAR B IDEOGRAM B170 -100B3 ; [.48A9.0020.0002] # LINEAR B IDEOGRAM B171 -100B4 ; [.48AA.0020.0002] # LINEAR B IDEOGRAM B172 -100B5 ; [.48AB.0020.0002] # LINEAR B IDEOGRAM B173 MONTH -100B6 ; [.48AC.0020.0002] # LINEAR B IDEOGRAM B174 -100B7 ; [.48AD.0020.0002] # LINEAR B IDEOGRAM B176 TREE -100B8 ; [.48AE.0020.0002] # LINEAR B IDEOGRAM B177 -100B9 ; [.48AF.0020.0002] # LINEAR B IDEOGRAM B178 -100BA ; [.48B0.0020.0002] # LINEAR B IDEOGRAM B179 -100BB ; [.48B1.0020.0002] # LINEAR B IDEOGRAM B180 -100BC ; [.48B2.0020.0002] # LINEAR B IDEOGRAM B181 -100BD ; [.48B3.0020.0002] # LINEAR B IDEOGRAM B182 -100BE ; [.48B4.0020.0002] # LINEAR B IDEOGRAM B183 -100BF ; [.48B5.0020.0002] # LINEAR B IDEOGRAM B184 -100C0 ; [.48B6.0020.0002] # LINEAR B IDEOGRAM B185 -100C1 ; [.48B7.0020.0002] # LINEAR B IDEOGRAM B189 -100C2 ; [.48B8.0020.0002] # LINEAR B IDEOGRAM B190 -100C3 ; [.48B9.0020.0002] # LINEAR B IDEOGRAM B191 HELMET -100C4 ; [.48BA.0020.0002] # LINEAR B IDEOGRAM B220 FOOTSTOOL -100C5 ; [.48BB.0020.0002] # LINEAR B IDEOGRAM B225 BATHTUB -100C6 ; [.48BC.0020.0002] # LINEAR B IDEOGRAM B230 SPEAR -100C7 ; [.48BD.0020.0002] # LINEAR B IDEOGRAM B231 ARROW -100C8 ; [.48BE.0020.0002] # LINEAR B IDEOGRAM B232 -100C9 ; [.48BF.0020.0002] # LINEAR B IDEOGRAM B233 SWORD -100CA ; [.48C0.0020.0002] # LINEAR B IDEOGRAM B234 -100CB ; [.48C1.0020.0002] # LINEAR B IDEOGRAM B236 -100CC ; [.48C2.0020.0002] # LINEAR B IDEOGRAM B240 WHEELED CHARIOT -100CD ; [.48C3.0020.0002] # LINEAR B IDEOGRAM B241 CHARIOT -100CE ; [.48C4.0020.0002] # LINEAR B IDEOGRAM B242 CHARIOT FRAME -100CF ; [.48C5.0020.0002] # LINEAR B IDEOGRAM B243 WHEEL -100D0 ; [.48C6.0020.0002] # LINEAR B IDEOGRAM B245 -100D1 ; [.48C7.0020.0002] # LINEAR B IDEOGRAM B246 -100D2 ; [.48C8.0020.0002] # LINEAR B MONOGRAM B247 DIPTE -100D3 ; [.48C9.0020.0002] # LINEAR B IDEOGRAM B248 -100D4 ; [.48CA.0020.0002] # LINEAR B IDEOGRAM B249 -100D5 ; [.48CB.0020.0002] # LINEAR B IDEOGRAM B251 -100D6 ; [.48CC.0020.0002] # LINEAR B IDEOGRAM B252 -100D7 ; [.48CD.0020.0002] # LINEAR B IDEOGRAM B253 -100D8 ; [.48CE.0020.0002] # LINEAR B IDEOGRAM B254 DART -100D9 ; [.48CF.0020.0002] # LINEAR B IDEOGRAM B255 -100DA ; [.48D0.0020.0002] # LINEAR B IDEOGRAM B256 -100DB ; [.48D1.0020.0002] # LINEAR B IDEOGRAM B257 -100DC ; [.48D2.0020.0002] # LINEAR B IDEOGRAM B258 -100DD ; [.48D3.0020.0002] # LINEAR B IDEOGRAM B259 -100DE ; [.48D4.0020.0002] # LINEAR B IDEOGRAM VESSEL B155 -100DF ; [.48D5.0020.0002] # LINEAR B IDEOGRAM VESSEL B200 -100E0 ; [.48D6.0020.0002] # LINEAR B IDEOGRAM VESSEL B201 -100E1 ; [.48D7.0020.0002] # LINEAR B IDEOGRAM VESSEL B202 -100E2 ; [.48D8.0020.0002] # LINEAR B IDEOGRAM VESSEL B203 -100E3 ; [.48D9.0020.0002] # LINEAR B IDEOGRAM VESSEL B204 -100E4 ; [.48DA.0020.0002] # LINEAR B IDEOGRAM VESSEL B205 -100E5 ; [.48DB.0020.0002] # LINEAR B IDEOGRAM VESSEL B206 -100E6 ; [.48DC.0020.0002] # LINEAR B IDEOGRAM VESSEL B207 -100E7 ; [.48DD.0020.0002] # LINEAR B IDEOGRAM VESSEL B208 -100E8 ; [.48DE.0020.0002] # LINEAR B IDEOGRAM VESSEL B209 -100E9 ; [.48DF.0020.0002] # LINEAR B IDEOGRAM VESSEL B210 -100EA ; [.48E0.0020.0002] # LINEAR B IDEOGRAM VESSEL B211 -100EB ; [.48E1.0020.0002] # LINEAR B IDEOGRAM VESSEL B212 -100EC ; [.48E2.0020.0002] # LINEAR B IDEOGRAM VESSEL B213 -100ED ; [.48E3.0020.0002] # LINEAR B IDEOGRAM VESSEL B214 -100EE ; [.48E4.0020.0002] # LINEAR B IDEOGRAM VESSEL B215 -100EF ; [.48E5.0020.0002] # LINEAR B IDEOGRAM VESSEL B216 -100F0 ; [.48E6.0020.0002] # LINEAR B IDEOGRAM VESSEL B217 -100F1 ; [.48E7.0020.0002] # LINEAR B IDEOGRAM VESSEL B218 -100F2 ; [.48E8.0020.0002] # LINEAR B IDEOGRAM VESSEL B219 -100F3 ; [.48E9.0020.0002] # LINEAR B IDEOGRAM VESSEL B221 -100F4 ; [.48EA.0020.0002] # LINEAR B IDEOGRAM VESSEL B222 -100F5 ; [.48EB.0020.0002] # LINEAR B IDEOGRAM VESSEL B226 -100F6 ; [.48EC.0020.0002] # LINEAR B IDEOGRAM VESSEL B227 -100F7 ; [.48ED.0020.0002] # LINEAR B IDEOGRAM VESSEL B228 -100F8 ; [.48EE.0020.0002] # LINEAR B IDEOGRAM VESSEL B229 -100F9 ; [.48EF.0020.0002] # LINEAR B IDEOGRAM VESSEL B250 -100FA ; [.48F0.0020.0002] # LINEAR B IDEOGRAM VESSEL B305 -10600 ; [.48F1.0020.0002] # LINEAR A SIGN AB001 -10601 ; [.48F2.0020.0002] # LINEAR A SIGN AB002 -10602 ; [.48F3.0020.0002] # LINEAR A SIGN AB003 -10603 ; [.48F4.0020.0002] # LINEAR A SIGN AB004 -10604 ; [.48F5.0020.0002] # LINEAR A SIGN AB005 -10605 ; [.48F6.0020.0002] # LINEAR A SIGN AB006 -10606 ; [.48F7.0020.0002] # LINEAR A SIGN AB007 -10607 ; [.48F8.0020.0002] # LINEAR A SIGN AB008 -10608 ; [.48F9.0020.0002] # LINEAR A SIGN AB009 -10609 ; [.48FA.0020.0002] # LINEAR A SIGN AB010 -1060A ; [.48FB.0020.0002] # LINEAR A SIGN AB011 -1060B ; [.48FC.0020.0002] # LINEAR A SIGN AB013 -1060C ; [.48FD.0020.0002] # LINEAR A SIGN AB016 -1060D ; [.48FE.0020.0002] # LINEAR A SIGN AB017 -1060E ; [.48FF.0020.0002] # LINEAR A SIGN AB020 -1060F ; [.4900.0020.0002] # LINEAR A SIGN AB021 -10610 ; [.4901.0020.0002] # LINEAR A SIGN AB021F -10611 ; [.4902.0020.0002] # LINEAR A SIGN AB021M -10612 ; [.4903.0020.0002] # LINEAR A SIGN AB022 -10613 ; [.4904.0020.0002] # LINEAR A SIGN AB022F -10614 ; [.4905.0020.0002] # LINEAR A SIGN AB022M -10615 ; [.4906.0020.0002] # LINEAR A SIGN AB023 -10616 ; [.4907.0020.0002] # LINEAR A SIGN AB023M -10617 ; [.4908.0020.0002] # LINEAR A SIGN AB024 -10618 ; [.4909.0020.0002] # LINEAR A SIGN AB026 -10619 ; [.490A.0020.0002] # LINEAR A SIGN AB027 -1061A ; [.490B.0020.0002] # LINEAR A SIGN AB028 -1061B ; [.490C.0020.0002] # LINEAR A SIGN A028B -1061C ; [.490D.0020.0002] # LINEAR A SIGN AB029 -1061D ; [.490E.0020.0002] # LINEAR A SIGN AB030 -1061E ; [.490F.0020.0002] # LINEAR A SIGN AB031 -1061F ; [.4910.0020.0002] # LINEAR A SIGN AB034 -10620 ; [.4911.0020.0002] # LINEAR A SIGN AB037 -10621 ; [.4912.0020.0002] # LINEAR A SIGN AB038 -10622 ; [.4913.0020.0002] # LINEAR A SIGN AB039 -10623 ; [.4914.0020.0002] # LINEAR A SIGN AB040 -10624 ; [.4915.0020.0002] # LINEAR A SIGN AB041 -10625 ; [.4916.0020.0002] # LINEAR A SIGN AB044 -10626 ; [.4917.0020.0002] # LINEAR A SIGN AB045 -10627 ; [.4918.0020.0002] # LINEAR A SIGN AB046 -10628 ; [.4919.0020.0002] # LINEAR A SIGN AB047 -10629 ; [.491A.0020.0002] # LINEAR A SIGN AB048 -1062A ; [.491B.0020.0002] # LINEAR A SIGN AB049 -1062B ; [.491C.0020.0002] # LINEAR A SIGN AB050 -1062C ; [.491D.0020.0002] # LINEAR A SIGN AB051 -1062D ; [.491E.0020.0002] # LINEAR A SIGN AB053 -1062E ; [.491F.0020.0002] # LINEAR A SIGN AB054 -1062F ; [.4920.0020.0002] # LINEAR A SIGN AB055 -10630 ; [.4921.0020.0002] # LINEAR A SIGN AB056 -10631 ; [.4922.0020.0002] # LINEAR A SIGN AB057 -10632 ; [.4923.0020.0002] # LINEAR A SIGN AB058 -10633 ; [.4924.0020.0002] # LINEAR A SIGN AB059 -10634 ; [.4925.0020.0002] # LINEAR A SIGN AB060 -10635 ; [.4926.0020.0002] # LINEAR A SIGN AB061 -10636 ; [.4927.0020.0002] # LINEAR A SIGN AB065 -10637 ; [.4928.0020.0002] # LINEAR A SIGN AB066 -10638 ; [.4929.0020.0002] # LINEAR A SIGN AB067 -10639 ; [.492A.0020.0002] # LINEAR A SIGN AB069 -1063A ; [.492B.0020.0002] # LINEAR A SIGN AB070 -1063B ; [.492C.0020.0002] # LINEAR A SIGN AB073 -1063C ; [.492D.0020.0002] # LINEAR A SIGN AB074 -1063D ; [.492E.0020.0002] # LINEAR A SIGN AB076 -1063E ; [.492F.0020.0002] # LINEAR A SIGN AB077 -1063F ; [.4930.0020.0002] # LINEAR A SIGN AB078 -10640 ; [.4931.0020.0002] # LINEAR A SIGN AB079 -10641 ; [.4932.0020.0002] # LINEAR A SIGN AB080 -10642 ; [.4933.0020.0002] # LINEAR A SIGN AB081 -10643 ; [.4934.0020.0002] # LINEAR A SIGN AB082 -10644 ; [.4935.0020.0002] # LINEAR A SIGN AB085 -10645 ; [.4936.0020.0002] # LINEAR A SIGN AB086 -10646 ; [.4937.0020.0002] # LINEAR A SIGN AB087 -10647 ; [.4938.0020.0002] # LINEAR A SIGN A100-102 -10648 ; [.4939.0020.0002] # LINEAR A SIGN AB118 -10649 ; [.493A.0020.0002] # LINEAR A SIGN AB120 -1064A ; [.493B.0020.0002] # LINEAR A SIGN A120B -1064B ; [.493C.0020.0002] # LINEAR A SIGN AB122 -1064C ; [.493D.0020.0002] # LINEAR A SIGN AB123 -1064D ; [.493E.0020.0002] # LINEAR A SIGN AB131A -1064E ; [.493F.0020.0002] # LINEAR A SIGN AB131B -1064F ; [.4940.0020.0002] # LINEAR A SIGN A131C -10650 ; [.4941.0020.0002] # LINEAR A SIGN AB164 -10651 ; [.4942.0020.0002] # LINEAR A SIGN AB171 -10652 ; [.4943.0020.0002] # LINEAR A SIGN AB180 -10653 ; [.4944.0020.0002] # LINEAR A SIGN AB188 -10654 ; [.4945.0020.0002] # LINEAR A SIGN AB191 -10655 ; [.4946.0020.0002] # LINEAR A SIGN A301 -10656 ; [.4947.0020.0002] # LINEAR A SIGN A302 -10657 ; [.4948.0020.0002] # LINEAR A SIGN A303 -10658 ; [.4949.0020.0002] # LINEAR A SIGN A304 -10659 ; [.494A.0020.0002] # LINEAR A SIGN A305 -1065A ; [.494B.0020.0002] # LINEAR A SIGN A306 -1065B ; [.494C.0020.0002] # LINEAR A SIGN A307 -1065C ; [.494D.0020.0002] # LINEAR A SIGN A308 -1065D ; [.494E.0020.0002] # LINEAR A SIGN A309A -1065E ; [.494F.0020.0002] # LINEAR A SIGN A309B -1065F ; [.4950.0020.0002] # LINEAR A SIGN A309C -10660 ; [.4951.0020.0002] # LINEAR A SIGN A310 -10661 ; [.4952.0020.0002] # LINEAR A SIGN A311 -10662 ; [.4953.0020.0002] # LINEAR A SIGN A312 -10663 ; [.4954.0020.0002] # LINEAR A SIGN A313A -10664 ; [.4955.0020.0002] # LINEAR A SIGN A313B -10665 ; [.4956.0020.0002] # LINEAR A SIGN A313C -10666 ; [.4957.0020.0002] # LINEAR A SIGN A314 -10667 ; [.4958.0020.0002] # LINEAR A SIGN A315 -10668 ; [.4959.0020.0002] # LINEAR A SIGN A316 -10669 ; [.495A.0020.0002] # LINEAR A SIGN A317 -1066A ; [.495B.0020.0002] # LINEAR A SIGN A318 -1066B ; [.495C.0020.0002] # LINEAR A SIGN A319 -1066C ; [.495D.0020.0002] # LINEAR A SIGN A320 -1066D ; [.495E.0020.0002] # LINEAR A SIGN A321 -1066E ; [.495F.0020.0002] # LINEAR A SIGN A322 -1066F ; [.4960.0020.0002] # LINEAR A SIGN A323 -10670 ; [.4961.0020.0002] # LINEAR A SIGN A324 -10671 ; [.4962.0020.0002] # LINEAR A SIGN A325 -10672 ; [.4963.0020.0002] # LINEAR A SIGN A326 -10673 ; [.4964.0020.0002] # LINEAR A SIGN A327 -10674 ; [.4965.0020.0002] # LINEAR A SIGN A328 -10675 ; [.4966.0020.0002] # LINEAR A SIGN A329 -10676 ; [.4967.0020.0002] # LINEAR A SIGN A330 -10677 ; [.4968.0020.0002] # LINEAR A SIGN A331 -10678 ; [.4969.0020.0002] # LINEAR A SIGN A332 -10679 ; [.496A.0020.0002] # LINEAR A SIGN A333 -1067A ; [.496B.0020.0002] # LINEAR A SIGN A334 -1067B ; [.496C.0020.0002] # LINEAR A SIGN A335 -1067C ; [.496D.0020.0002] # LINEAR A SIGN A336 -1067D ; [.496E.0020.0002] # LINEAR A SIGN A337 -1067E ; [.496F.0020.0002] # LINEAR A SIGN A338 -1067F ; [.4970.0020.0002] # LINEAR A SIGN A339 -10680 ; [.4971.0020.0002] # LINEAR A SIGN A340 -10681 ; [.4972.0020.0002] # LINEAR A SIGN A341 -10682 ; [.4973.0020.0002] # LINEAR A SIGN A342 -10683 ; [.4974.0020.0002] # LINEAR A SIGN A343 -10684 ; [.4975.0020.0002] # LINEAR A SIGN A344 -10685 ; [.4976.0020.0002] # LINEAR A SIGN A345 -10686 ; [.4977.0020.0002] # LINEAR A SIGN A346 -10687 ; [.4978.0020.0002] # LINEAR A SIGN A347 -10688 ; [.4979.0020.0002] # LINEAR A SIGN A348 -10689 ; [.497A.0020.0002] # LINEAR A SIGN A349 -1068A ; [.497B.0020.0002] # LINEAR A SIGN A350 -1068B ; [.497C.0020.0002] # LINEAR A SIGN A351 -1068C ; [.497D.0020.0002] # LINEAR A SIGN A352 -1068D ; [.497E.0020.0002] # LINEAR A SIGN A353 -1068E ; [.497F.0020.0002] # LINEAR A SIGN A354 -1068F ; [.4980.0020.0002] # LINEAR A SIGN A355 -10690 ; [.4981.0020.0002] # LINEAR A SIGN A356 -10691 ; [.4982.0020.0002] # LINEAR A SIGN A357 -10692 ; [.4983.0020.0002] # LINEAR A SIGN A358 -10693 ; [.4984.0020.0002] # LINEAR A SIGN A359 -10694 ; [.4985.0020.0002] # LINEAR A SIGN A360 -10695 ; [.4986.0020.0002] # LINEAR A SIGN A361 -10696 ; [.4987.0020.0002] # LINEAR A SIGN A362 -10697 ; [.4988.0020.0002] # LINEAR A SIGN A363 -10698 ; [.4989.0020.0002] # LINEAR A SIGN A364 -10699 ; [.498A.0020.0002] # LINEAR A SIGN A365 -1069A ; [.498B.0020.0002] # LINEAR A SIGN A366 -1069B ; [.498C.0020.0002] # LINEAR A SIGN A367 -1069C ; [.498D.0020.0002] # LINEAR A SIGN A368 -1069D ; [.498E.0020.0002] # LINEAR A SIGN A369 -1069E ; [.498F.0020.0002] # LINEAR A SIGN A370 -1069F ; [.4990.0020.0002] # LINEAR A SIGN A371 -106A0 ; [.4991.0020.0002] # LINEAR A SIGN A400-VAS -106A1 ; [.4992.0020.0002] # LINEAR A SIGN A401-VAS -106A2 ; [.4993.0020.0002] # LINEAR A SIGN A402-VAS -106A3 ; [.4994.0020.0002] # LINEAR A SIGN A403-VAS -106A4 ; [.4995.0020.0002] # LINEAR A SIGN A404-VAS -106A5 ; [.4996.0020.0002] # LINEAR A SIGN A405-VAS -106A6 ; [.4997.0020.0002] # LINEAR A SIGN A406-VAS -106A7 ; [.4998.0020.0002] # LINEAR A SIGN A407-VAS -106A8 ; [.4999.0020.0002] # LINEAR A SIGN A408-VAS -106A9 ; [.499A.0020.0002] # LINEAR A SIGN A409-VAS -106AA ; [.499B.0020.0002] # LINEAR A SIGN A410-VAS -106AB ; [.499C.0020.0002] # LINEAR A SIGN A411-VAS -106AC ; [.499D.0020.0002] # LINEAR A SIGN A412-VAS -106AD ; [.499E.0020.0002] # LINEAR A SIGN A413-VAS -106AE ; [.499F.0020.0002] # LINEAR A SIGN A414-VAS -106AF ; [.49A0.0020.0002] # LINEAR A SIGN A415-VAS -106B0 ; [.49A1.0020.0002] # LINEAR A SIGN A416-VAS -106B1 ; [.49A2.0020.0002] # LINEAR A SIGN A417-VAS -106B2 ; [.49A3.0020.0002] # LINEAR A SIGN A418-VAS -106B3 ; [.49A4.0020.0002] # LINEAR A SIGN A501 -106B4 ; [.49A5.0020.0002] # LINEAR A SIGN A502 -106B5 ; [.49A6.0020.0002] # LINEAR A SIGN A503 -106B6 ; [.49A7.0020.0002] # LINEAR A SIGN A504 -106B7 ; [.49A8.0020.0002] # LINEAR A SIGN A505 -106B8 ; [.49A9.0020.0002] # LINEAR A SIGN A506 -106B9 ; [.49AA.0020.0002] # LINEAR A SIGN A508 -106BA ; [.49AB.0020.0002] # LINEAR A SIGN A509 -106BB ; [.49AC.0020.0002] # LINEAR A SIGN A510 -106BC ; [.49AD.0020.0002] # LINEAR A SIGN A511 -106BD ; [.49AE.0020.0002] # LINEAR A SIGN A512 -106BE ; [.49AF.0020.0002] # LINEAR A SIGN A513 -106BF ; [.49B0.0020.0002] # LINEAR A SIGN A515 -106C0 ; [.49B1.0020.0002] # LINEAR A SIGN A516 -106C1 ; [.49B2.0020.0002] # LINEAR A SIGN A520 -106C2 ; [.49B3.0020.0002] # LINEAR A SIGN A521 -106C3 ; [.49B4.0020.0002] # LINEAR A SIGN A523 -106C4 ; [.49B5.0020.0002] # LINEAR A SIGN A524 -106C5 ; [.49B6.0020.0002] # LINEAR A SIGN A525 -106C6 ; [.49B7.0020.0002] # LINEAR A SIGN A526 -106C7 ; [.49B8.0020.0002] # LINEAR A SIGN A527 -106C8 ; [.49B9.0020.0002] # LINEAR A SIGN A528 -106C9 ; [.49BA.0020.0002] # LINEAR A SIGN A529 -106CA ; [.49BB.0020.0002] # LINEAR A SIGN A530 -106CB ; [.49BC.0020.0002] # LINEAR A SIGN A531 -106CC ; [.49BD.0020.0002] # LINEAR A SIGN A532 -106CD ; [.49BE.0020.0002] # LINEAR A SIGN A534 -106CE ; [.49BF.0020.0002] # LINEAR A SIGN A535 -106CF ; [.49C0.0020.0002] # LINEAR A SIGN A536 -106D0 ; [.49C1.0020.0002] # LINEAR A SIGN A537 -106D1 ; [.49C2.0020.0002] # LINEAR A SIGN A538 -106D2 ; [.49C3.0020.0002] # LINEAR A SIGN A539 -106D3 ; [.49C4.0020.0002] # LINEAR A SIGN A540 -106D4 ; [.49C5.0020.0002] # LINEAR A SIGN A541 -106D5 ; [.49C6.0020.0002] # LINEAR A SIGN A542 -106D6 ; [.49C7.0020.0002] # LINEAR A SIGN A545 -106D7 ; [.49C8.0020.0002] # LINEAR A SIGN A547 -106D8 ; [.49C9.0020.0002] # LINEAR A SIGN A548 -106D9 ; [.49CA.0020.0002] # LINEAR A SIGN A549 -106DA ; [.49CB.0020.0002] # LINEAR A SIGN A550 -106DB ; [.49CC.0020.0002] # LINEAR A SIGN A551 -106DC ; [.49CD.0020.0002] # LINEAR A SIGN A552 -106DD ; [.49CE.0020.0002] # LINEAR A SIGN A553 -106DE ; [.49CF.0020.0002] # LINEAR A SIGN A554 -106DF ; [.49D0.0020.0002] # LINEAR A SIGN A555 -106E0 ; [.49D1.0020.0002] # LINEAR A SIGN A556 -106E1 ; [.49D2.0020.0002] # LINEAR A SIGN A557 -106E2 ; [.49D3.0020.0002] # LINEAR A SIGN A559 -106E3 ; [.49D4.0020.0002] # LINEAR A SIGN A563 -106E4 ; [.49D5.0020.0002] # LINEAR A SIGN A564 -106E5 ; [.49D6.0020.0002] # LINEAR A SIGN A565 -106E6 ; [.49D7.0020.0002] # LINEAR A SIGN A566 -106E7 ; [.49D8.0020.0002] # LINEAR A SIGN A568 -106E8 ; [.49D9.0020.0002] # LINEAR A SIGN A569 -106E9 ; [.49DA.0020.0002] # LINEAR A SIGN A570 -106EA ; [.49DB.0020.0002] # LINEAR A SIGN A571 -106EB ; [.49DC.0020.0002] # LINEAR A SIGN A572 -106EC ; [.49DD.0020.0002] # LINEAR A SIGN A573 -106ED ; [.49DE.0020.0002] # LINEAR A SIGN A574 -106EE ; [.49DF.0020.0002] # LINEAR A SIGN A575 -106EF ; [.49E0.0020.0002] # LINEAR A SIGN A576 -106F0 ; [.49E1.0020.0002] # LINEAR A SIGN A577 -106F1 ; [.49E2.0020.0002] # LINEAR A SIGN A578 -106F2 ; [.49E3.0020.0002] # LINEAR A SIGN A579 -106F3 ; [.49E4.0020.0002] # LINEAR A SIGN A580 -106F4 ; [.49E5.0020.0002] # LINEAR A SIGN A581 -106F5 ; [.49E6.0020.0002] # LINEAR A SIGN A582 -106F6 ; [.49E7.0020.0002] # LINEAR A SIGN A583 -106F7 ; [.49E8.0020.0002] # LINEAR A SIGN A584 -106F8 ; [.49E9.0020.0002] # LINEAR A SIGN A585 -106F9 ; [.49EA.0020.0002] # LINEAR A SIGN A586 -106FA ; [.49EB.0020.0002] # LINEAR A SIGN A587 -106FB ; [.49EC.0020.0002] # LINEAR A SIGN A588 -106FC ; [.49ED.0020.0002] # LINEAR A SIGN A589 -106FD ; [.49EE.0020.0002] # LINEAR A SIGN A591 -106FE ; [.49EF.0020.0002] # LINEAR A SIGN A592 -106FF ; [.49F0.0020.0002] # LINEAR A SIGN A594 -10700 ; [.49F1.0020.0002] # LINEAR A SIGN A595 -10701 ; [.49F2.0020.0002] # LINEAR A SIGN A596 -10702 ; [.49F3.0020.0002] # LINEAR A SIGN A598 -10703 ; [.49F4.0020.0002] # LINEAR A SIGN A600 -10704 ; [.49F5.0020.0002] # LINEAR A SIGN A601 -10705 ; [.49F6.0020.0002] # LINEAR A SIGN A602 -10706 ; [.49F7.0020.0002] # LINEAR A SIGN A603 -10707 ; [.49F8.0020.0002] # LINEAR A SIGN A604 -10708 ; [.49F9.0020.0002] # LINEAR A SIGN A606 -10709 ; [.49FA.0020.0002] # LINEAR A SIGN A608 -1070A ; [.49FB.0020.0002] # LINEAR A SIGN A609 -1070B ; [.49FC.0020.0002] # LINEAR A SIGN A610 -1070C ; [.49FD.0020.0002] # LINEAR A SIGN A611 -1070D ; [.49FE.0020.0002] # LINEAR A SIGN A612 -1070E ; [.49FF.0020.0002] # LINEAR A SIGN A613 -1070F ; [.4A00.0020.0002] # LINEAR A SIGN A614 -10710 ; [.4A01.0020.0002] # LINEAR A SIGN A615 -10711 ; [.4A02.0020.0002] # LINEAR A SIGN A616 -10712 ; [.4A03.0020.0002] # LINEAR A SIGN A617 -10713 ; [.4A04.0020.0002] # LINEAR A SIGN A618 -10714 ; [.4A05.0020.0002] # LINEAR A SIGN A619 -10715 ; [.4A06.0020.0002] # LINEAR A SIGN A620 -10716 ; [.4A07.0020.0002] # LINEAR A SIGN A621 -10717 ; [.4A08.0020.0002] # LINEAR A SIGN A622 -10718 ; [.4A09.0020.0002] # LINEAR A SIGN A623 -10719 ; [.4A0A.0020.0002] # LINEAR A SIGN A624 -1071A ; [.4A0B.0020.0002] # LINEAR A SIGN A626 -1071B ; [.4A0C.0020.0002] # LINEAR A SIGN A627 -1071C ; [.4A0D.0020.0002] # LINEAR A SIGN A628 -1071D ; [.4A0E.0020.0002] # LINEAR A SIGN A629 -1071E ; [.4A0F.0020.0002] # LINEAR A SIGN A634 -1071F ; [.4A10.0020.0002] # LINEAR A SIGN A637 -10720 ; [.4A11.0020.0002] # LINEAR A SIGN A638 -10721 ; [.4A12.0020.0002] # LINEAR A SIGN A640 -10722 ; [.4A13.0020.0002] # LINEAR A SIGN A642 -10723 ; [.4A14.0020.0002] # LINEAR A SIGN A643 -10724 ; [.4A15.0020.0002] # LINEAR A SIGN A644 -10725 ; [.4A16.0020.0002] # LINEAR A SIGN A645 -10726 ; [.4A17.0020.0002] # LINEAR A SIGN A646 -10727 ; [.4A18.0020.0002] # LINEAR A SIGN A648 -10728 ; [.4A19.0020.0002] # LINEAR A SIGN A649 -10729 ; [.4A1A.0020.0002] # LINEAR A SIGN A651 -1072A ; [.4A1B.0020.0002] # LINEAR A SIGN A652 -1072B ; [.4A1C.0020.0002] # LINEAR A SIGN A653 -1072C ; [.4A1D.0020.0002] # LINEAR A SIGN A654 -1072D ; [.4A1E.0020.0002] # LINEAR A SIGN A655 -1072E ; [.4A1F.0020.0002] # LINEAR A SIGN A656 -1072F ; [.4A20.0020.0002] # LINEAR A SIGN A657 -10730 ; [.4A21.0020.0002] # LINEAR A SIGN A658 -10731 ; [.4A22.0020.0002] # LINEAR A SIGN A659 -10732 ; [.4A23.0020.0002] # LINEAR A SIGN A660 -10733 ; [.4A24.0020.0002] # LINEAR A SIGN A661 -10734 ; [.4A25.0020.0002] # LINEAR A SIGN A662 -10735 ; [.4A26.0020.0002] # LINEAR A SIGN A663 -10736 ; [.4A27.0020.0002] # LINEAR A SIGN A664 -10740 ; [.4A28.0020.0002] # LINEAR A SIGN A701 A -10741 ; [.4A29.0020.0002] # LINEAR A SIGN A702 B -10742 ; [.4A2A.0020.0002] # LINEAR A SIGN A703 D -10743 ; [.4A2B.0020.0002] # LINEAR A SIGN A704 E -10744 ; [.4A2C.0020.0002] # LINEAR A SIGN A705 F -10745 ; [.4A2D.0020.0002] # LINEAR A SIGN A706 H -10746 ; [.4A2E.0020.0002] # LINEAR A SIGN A707 J -10747 ; [.4A2F.0020.0002] # LINEAR A SIGN A708 K -10748 ; [.4A30.0020.0002] # LINEAR A SIGN A709 L -10749 ; [.4A31.0020.0002] # LINEAR A SIGN A709-2 L2 -1074A ; [.4A32.0020.0002] # LINEAR A SIGN A709-3 L3 -1074B ; [.4A33.0020.0002] # LINEAR A SIGN A709-4 L4 -1074C ; [.4A34.0020.0002] # LINEAR A SIGN A709-6 L6 -1074D ; [.4A35.0020.0002] # LINEAR A SIGN A710 W -1074E ; [.4A36.0020.0002] # LINEAR A SIGN A711 X -1074F ; [.4A37.0020.0002] # LINEAR A SIGN A712 Y -10750 ; [.4A38.0020.0002] # LINEAR A SIGN A713 OMEGA -10751 ; [.4A39.0020.0002] # LINEAR A SIGN A714 ABB -10752 ; [.4A3A.0020.0002] # LINEAR A SIGN A715 BB -10753 ; [.4A3B.0020.0002] # LINEAR A SIGN A717 DD -10754 ; [.4A3C.0020.0002] # LINEAR A SIGN A726 EYYY -10755 ; [.4A3D.0020.0002] # LINEAR A SIGN A732 JE -10760 ; [.4A3E.0020.0002] # LINEAR A SIGN A800 -10761 ; [.4A3F.0020.0002] # LINEAR A SIGN A801 -10762 ; [.4A40.0020.0002] # LINEAR A SIGN A802 -10763 ; [.4A41.0020.0002] # LINEAR A SIGN A803 -10764 ; [.4A42.0020.0002] # LINEAR A SIGN A804 -10765 ; [.4A43.0020.0002] # LINEAR A SIGN A805 -10766 ; [.4A44.0020.0002] # LINEAR A SIGN A806 -10767 ; [.4A45.0020.0002] # LINEAR A SIGN A807 -10800 ; [.4A46.0020.0002] # CYPRIOT SYLLABLE A -10801 ; [.4A47.0020.0002] # CYPRIOT SYLLABLE E -10802 ; [.4A48.0020.0002] # CYPRIOT SYLLABLE I -10803 ; [.4A49.0020.0002] # CYPRIOT SYLLABLE O -10804 ; [.4A4A.0020.0002] # CYPRIOT SYLLABLE U -10805 ; [.4A4B.0020.0002] # CYPRIOT SYLLABLE JA -10808 ; [.4A4C.0020.0002] # CYPRIOT SYLLABLE JO -1080A ; [.4A4D.0020.0002] # CYPRIOT SYLLABLE KA -1080B ; [.4A4E.0020.0002] # CYPRIOT SYLLABLE KE -1080C ; [.4A4F.0020.0002] # CYPRIOT SYLLABLE KI -1080D ; [.4A50.0020.0002] # CYPRIOT SYLLABLE KO -1080E ; [.4A51.0020.0002] # CYPRIOT SYLLABLE KU -1080F ; [.4A52.0020.0002] # CYPRIOT SYLLABLE LA -10810 ; [.4A53.0020.0002] # CYPRIOT SYLLABLE LE -10811 ; [.4A54.0020.0002] # CYPRIOT SYLLABLE LI -10812 ; [.4A55.0020.0002] # CYPRIOT SYLLABLE LO -10813 ; [.4A56.0020.0002] # CYPRIOT SYLLABLE LU -10814 ; [.4A57.0020.0002] # CYPRIOT SYLLABLE MA -10815 ; [.4A58.0020.0002] # CYPRIOT SYLLABLE ME -10816 ; [.4A59.0020.0002] # CYPRIOT SYLLABLE MI -10817 ; [.4A5A.0020.0002] # CYPRIOT SYLLABLE MO -10818 ; [.4A5B.0020.0002] # CYPRIOT SYLLABLE MU -10819 ; [.4A5C.0020.0002] # CYPRIOT SYLLABLE NA -1081A ; [.4A5D.0020.0002] # CYPRIOT SYLLABLE NE -1081B ; [.4A5E.0020.0002] # CYPRIOT SYLLABLE NI -1081C ; [.4A5F.0020.0002] # CYPRIOT SYLLABLE NO -1081D ; [.4A60.0020.0002] # CYPRIOT SYLLABLE NU -1081E ; [.4A61.0020.0002] # CYPRIOT SYLLABLE PA -1081F ; [.4A62.0020.0002] # CYPRIOT SYLLABLE PE -10820 ; [.4A63.0020.0002] # CYPRIOT SYLLABLE PI -10821 ; [.4A64.0020.0002] # CYPRIOT SYLLABLE PO -10822 ; [.4A65.0020.0002] # CYPRIOT SYLLABLE PU -10823 ; [.4A66.0020.0002] # CYPRIOT SYLLABLE RA -10824 ; [.4A67.0020.0002] # CYPRIOT SYLLABLE RE -10825 ; [.4A68.0020.0002] # CYPRIOT SYLLABLE RI -10826 ; [.4A69.0020.0002] # CYPRIOT SYLLABLE RO -10827 ; [.4A6A.0020.0002] # CYPRIOT SYLLABLE RU -10828 ; [.4A6B.0020.0002] # CYPRIOT SYLLABLE SA -10829 ; [.4A6C.0020.0002] # CYPRIOT SYLLABLE SE -1082A ; [.4A6D.0020.0002] # CYPRIOT SYLLABLE SI -1082B ; [.4A6E.0020.0002] # CYPRIOT SYLLABLE SO -1082C ; [.4A6F.0020.0002] # CYPRIOT SYLLABLE SU -1082D ; [.4A70.0020.0002] # CYPRIOT SYLLABLE TA -1082E ; [.4A71.0020.0002] # CYPRIOT SYLLABLE TE -1082F ; [.4A72.0020.0002] # CYPRIOT SYLLABLE TI -10830 ; [.4A73.0020.0002] # CYPRIOT SYLLABLE TO -10831 ; [.4A74.0020.0002] # CYPRIOT SYLLABLE TU -10832 ; [.4A75.0020.0002] # CYPRIOT SYLLABLE WA -10833 ; [.4A76.0020.0002] # CYPRIOT SYLLABLE WE -10834 ; [.4A77.0020.0002] # CYPRIOT SYLLABLE WI -10835 ; [.4A78.0020.0002] # CYPRIOT SYLLABLE WO -10837 ; [.4A79.0020.0002] # CYPRIOT SYLLABLE XA -10838 ; [.4A7A.0020.0002] # CYPRIOT SYLLABLE XE -1083C ; [.4A7B.0020.0002] # CYPRIOT SYLLABLE ZA -1083F ; [.4A7C.0020.0002] # CYPRIOT SYLLABLE ZO -10A60 ; [.4A7D.0020.0002] # OLD SOUTH ARABIAN LETTER HE -10A61 ; [.4A7E.0020.0002] # OLD SOUTH ARABIAN LETTER LAMEDH -10A62 ; [.4A7F.0020.0002] # OLD SOUTH ARABIAN LETTER HETH -10A63 ; [.4A80.0020.0002] # OLD SOUTH ARABIAN LETTER MEM -10A64 ; [.4A81.0020.0002] # OLD SOUTH ARABIAN LETTER QOPH -10A65 ; [.4A82.0020.0002] # OLD SOUTH ARABIAN LETTER WAW -10A66 ; [.4A83.0020.0002] # OLD SOUTH ARABIAN LETTER SHIN -10A67 ; [.4A84.0020.0002] # OLD SOUTH ARABIAN LETTER RESH -10A68 ; [.4A85.0020.0002] # OLD SOUTH ARABIAN LETTER BETH -10A69 ; [.4A86.0020.0002] # OLD SOUTH ARABIAN LETTER TAW -10A6A ; [.4A87.0020.0002] # OLD SOUTH ARABIAN LETTER SAT -10A6B ; [.4A88.0020.0002] # OLD SOUTH ARABIAN LETTER KAPH -10A6C ; [.4A89.0020.0002] # OLD SOUTH ARABIAN LETTER NUN -10A6D ; [.4A8A.0020.0002] # OLD SOUTH ARABIAN LETTER KHETH -10A6E ; [.4A8B.0020.0002] # OLD SOUTH ARABIAN LETTER SADHE -10A6F ; [.4A8C.0020.0002] # OLD SOUTH ARABIAN LETTER SAMEKH -10A70 ; [.4A8D.0020.0002] # OLD SOUTH ARABIAN LETTER FE -10A71 ; [.4A8E.0020.0002] # OLD SOUTH ARABIAN LETTER ALEF -10A72 ; [.4A8F.0020.0002] # OLD SOUTH ARABIAN LETTER AYN -10A73 ; [.4A90.0020.0002] # OLD SOUTH ARABIAN LETTER DHADHE -10A74 ; [.4A91.0020.0002] # OLD SOUTH ARABIAN LETTER GIMEL -10A75 ; [.4A92.0020.0002] # OLD SOUTH ARABIAN LETTER DALETH -10A76 ; [.4A93.0020.0002] # OLD SOUTH ARABIAN LETTER GHAYN -10A77 ; [.4A94.0020.0002] # OLD SOUTH ARABIAN LETTER TETH -10A78 ; [.4A95.0020.0002] # OLD SOUTH ARABIAN LETTER ZAYN -10A79 ; [.4A96.0020.0002] # OLD SOUTH ARABIAN LETTER DHALETH -10A7A ; [.4A97.0020.0002] # OLD SOUTH ARABIAN LETTER YODH -10A7B ; [.4A98.0020.0002] # OLD SOUTH ARABIAN LETTER THAW -10A7C ; [.4A99.0020.0002] # OLD SOUTH ARABIAN LETTER THETH -10A80 ; [.4A9A.0020.0002] # OLD NORTH ARABIAN LETTER HEH -10A81 ; [.4A9B.0020.0002] # OLD NORTH ARABIAN LETTER LAM -10A82 ; [.4A9C.0020.0002] # OLD NORTH ARABIAN LETTER HAH -10A83 ; [.4A9D.0020.0002] # OLD NORTH ARABIAN LETTER MEEM -10A84 ; [.4A9E.0020.0002] # OLD NORTH ARABIAN LETTER QAF -10A85 ; [.4A9F.0020.0002] # OLD NORTH ARABIAN LETTER WAW -10A86 ; [.4AA0.0020.0002] # OLD NORTH ARABIAN LETTER ES-2 -10A87 ; [.4AA1.0020.0002] # OLD NORTH ARABIAN LETTER REH -10A88 ; [.4AA2.0020.0002] # OLD NORTH ARABIAN LETTER BEH -10A89 ; [.4AA3.0020.0002] # OLD NORTH ARABIAN LETTER TEH -10A8A ; [.4AA4.0020.0002] # OLD NORTH ARABIAN LETTER ES-1 -10A8B ; [.4AA5.0020.0002] # OLD NORTH ARABIAN LETTER KAF -10A8C ; [.4AA6.0020.0002] # OLD NORTH ARABIAN LETTER NOON -10A8D ; [.4AA7.0020.0002] # OLD NORTH ARABIAN LETTER KHAH -10A8E ; [.4AA8.0020.0002] # OLD NORTH ARABIAN LETTER SAD -10A8F ; [.4AA9.0020.0002] # OLD NORTH ARABIAN LETTER ES-3 -10A90 ; [.4AAA.0020.0002] # OLD NORTH ARABIAN LETTER FEH -10A91 ; [.4AAB.0020.0002] # OLD NORTH ARABIAN LETTER ALEF -10A92 ; [.4AAC.0020.0002] # OLD NORTH ARABIAN LETTER AIN -10A93 ; [.4AAD.0020.0002] # OLD NORTH ARABIAN LETTER DAD -10A94 ; [.4AAE.0020.0002] # OLD NORTH ARABIAN LETTER GEEM -10A95 ; [.4AAF.0020.0002] # OLD NORTH ARABIAN LETTER DAL -10A96 ; [.4AB0.0020.0002] # OLD NORTH ARABIAN LETTER GHAIN -10A97 ; [.4AB1.0020.0002] # OLD NORTH ARABIAN LETTER TAH -10A98 ; [.4AB2.0020.0002] # OLD NORTH ARABIAN LETTER ZAIN -10A99 ; [.4AB3.0020.0002] # OLD NORTH ARABIAN LETTER THAL -10A9A ; [.4AB4.0020.0002] # OLD NORTH ARABIAN LETTER YEH -10A9B ; [.4AB5.0020.0002] # OLD NORTH ARABIAN LETTER THEH -10A9C ; [.4AB6.0020.0002] # OLD NORTH ARABIAN LETTER ZAH -10B00 ; [.4AB7.0020.0002] # AVESTAN LETTER A -10B01 ; [.4AB8.0020.0002] # AVESTAN LETTER AA -10B02 ; [.4AB9.0020.0002] # AVESTAN LETTER AO -10B03 ; [.4ABA.0020.0002] # AVESTAN LETTER AAO -10B04 ; [.4ABB.0020.0002] # AVESTAN LETTER AN -10B05 ; [.4ABC.0020.0002] # AVESTAN LETTER AAN -10B06 ; [.4ABD.0020.0002] # AVESTAN LETTER AE -10B07 ; [.4ABE.0020.0002] # AVESTAN LETTER AEE -10B08 ; [.4ABF.0020.0002] # AVESTAN LETTER E -10B09 ; [.4AC0.0020.0002] # AVESTAN LETTER EE -10B0A ; [.4AC1.0020.0002] # AVESTAN LETTER O -10B0B ; [.4AC2.0020.0002] # AVESTAN LETTER OO -10B0C ; [.4AC3.0020.0002] # AVESTAN LETTER I -10B0D ; [.4AC4.0020.0002] # AVESTAN LETTER II -10B0E ; [.4AC5.0020.0002] # AVESTAN LETTER U -10B0F ; [.4AC6.0020.0002] # AVESTAN LETTER UU -10B10 ; [.4AC7.0020.0002] # AVESTAN LETTER KE -10B11 ; [.4AC8.0020.0002] # AVESTAN LETTER XE -10B12 ; [.4AC9.0020.0002] # AVESTAN LETTER XYE -10B13 ; [.4ACA.0020.0002] # AVESTAN LETTER XVE -10B14 ; [.4ACB.0020.0002] # AVESTAN LETTER GE -10B15 ; [.4ACC.0020.0002] # AVESTAN LETTER GGE -10B16 ; [.4ACD.0020.0002] # AVESTAN LETTER GHE -10B17 ; [.4ACE.0020.0002] # AVESTAN LETTER CE -10B18 ; [.4ACF.0020.0002] # AVESTAN LETTER JE -10B19 ; [.4AD0.0020.0002] # AVESTAN LETTER TE -10B1A ; [.4AD1.0020.0002] # AVESTAN LETTER THE -10B1B ; [.4AD2.0020.0002] # AVESTAN LETTER DE -10B1C ; [.4AD3.0020.0002] # AVESTAN LETTER DHE -10B1D ; [.4AD4.0020.0002] # AVESTAN LETTER TTE -10B1E ; [.4AD5.0020.0002] # AVESTAN LETTER PE -10B1F ; [.4AD6.0020.0002] # AVESTAN LETTER FE -10B20 ; [.4AD7.0020.0002] # AVESTAN LETTER BE -10B21 ; [.4AD8.0020.0002] # AVESTAN LETTER BHE -10B22 ; [.4AD9.0020.0002] # AVESTAN LETTER NGE -10B23 ; [.4ADA.0020.0002] # AVESTAN LETTER NGYE -10B24 ; [.4ADB.0020.0002] # AVESTAN LETTER NGVE -10B25 ; [.4ADC.0020.0002] # AVESTAN LETTER NE -10B26 ; [.4ADD.0020.0002] # AVESTAN LETTER NYE -10B27 ; [.4ADE.0020.0002] # AVESTAN LETTER NNE -10B28 ; [.4ADF.0020.0002] # AVESTAN LETTER ME -10B29 ; [.4AE0.0020.0002] # AVESTAN LETTER HME -10B2A ; [.4AE1.0020.0002] # AVESTAN LETTER YYE -10B2B ; [.4AE2.0020.0002] # AVESTAN LETTER YE -10B2C ; [.4AE3.0020.0002] # AVESTAN LETTER VE -10B2D ; [.4AE4.0020.0002] # AVESTAN LETTER RE -10B2E ; [.4AE4.0020.0004][.0000.0111.0004] # AVESTAN LETTER LE -10B2F ; [.4AE5.0020.0002] # AVESTAN LETTER SE -10B30 ; [.4AE6.0020.0002] # AVESTAN LETTER ZE -10B31 ; [.4AE7.0020.0002] # AVESTAN LETTER SHE -10B32 ; [.4AE8.0020.0002] # AVESTAN LETTER ZHE -10B33 ; [.4AE9.0020.0002] # AVESTAN LETTER SHYE -10B34 ; [.4AEA.0020.0002] # AVESTAN LETTER SSHE -10B35 ; [.4AEB.0020.0002] # AVESTAN LETTER HE -10860 ; [.4AEC.0020.0002] # PALMYRENE LETTER ALEPH -10861 ; [.4AED.0020.0002] # PALMYRENE LETTER BETH -10862 ; [.4AEE.0020.0002] # PALMYRENE LETTER GIMEL -10863 ; [.4AEF.0020.0002] # PALMYRENE LETTER DALETH -10864 ; [.4AF0.0020.0002] # PALMYRENE LETTER HE -10865 ; [.4AF1.0020.0002] # PALMYRENE LETTER WAW -10866 ; [.4AF2.0020.0002] # PALMYRENE LETTER ZAYIN -10867 ; [.4AF3.0020.0002] # PALMYRENE LETTER HETH -10868 ; [.4AF4.0020.0002] # PALMYRENE LETTER TETH -10869 ; [.4AF5.0020.0002] # PALMYRENE LETTER YODH -1086A ; [.4AF6.0020.0002] # PALMYRENE LETTER KAPH -1086B ; [.4AF7.0020.0002] # PALMYRENE LETTER LAMEDH -1086C ; [.4AF8.0020.0002] # PALMYRENE LETTER MEM -1086E ; [.4AF9.0020.0002] # PALMYRENE LETTER NUN -1086D ; [.4AF9.0020.0019] # PALMYRENE LETTER FINAL NUN -1086F ; [.4AFA.0020.0002] # PALMYRENE LETTER SAMEKH -10870 ; [.4AFB.0020.0002] # PALMYRENE LETTER AYIN -10871 ; [.4AFC.0020.0002] # PALMYRENE LETTER PE -10872 ; [.4AFD.0020.0002] # PALMYRENE LETTER SADHE -10873 ; [.4AFE.0020.0002] # PALMYRENE LETTER QOPH -10874 ; [.4AFF.0020.0002] # PALMYRENE LETTER RESH -10875 ; [.4B00.0020.0002] # PALMYRENE LETTER SHIN -10876 ; [.4B01.0020.0002] # PALMYRENE LETTER TAW -10881 ; [.4B02.0020.0002] # NABATAEAN LETTER ALEPH -10880 ; [.4B02.0020.0019] # NABATAEAN LETTER FINAL ALEPH -10883 ; [.4B03.0020.0002] # NABATAEAN LETTER BETH -10882 ; [.4B03.0020.0019] # NABATAEAN LETTER FINAL BETH -10884 ; [.4B04.0020.0002] # NABATAEAN LETTER GIMEL -10885 ; [.4B05.0020.0002] # NABATAEAN LETTER DALETH -10887 ; [.4B06.0020.0002] # NABATAEAN LETTER HE -10886 ; [.4B06.0020.0019] # NABATAEAN LETTER FINAL HE -10888 ; [.4B07.0020.0002] # NABATAEAN LETTER WAW -10889 ; [.4B08.0020.0002] # NABATAEAN LETTER ZAYIN -1088A ; [.4B09.0020.0002] # NABATAEAN LETTER HETH -1088B ; [.4B0A.0020.0002] # NABATAEAN LETTER TETH -1088D ; [.4B0B.0020.0002] # NABATAEAN LETTER YODH -1088C ; [.4B0B.0020.0019] # NABATAEAN LETTER FINAL YODH -1088F ; [.4B0C.0020.0002] # NABATAEAN LETTER KAPH -1088E ; [.4B0C.0020.0019] # NABATAEAN LETTER FINAL KAPH -10891 ; [.4B0D.0020.0002] # NABATAEAN LETTER LAMEDH -10890 ; [.4B0D.0020.0019] # NABATAEAN LETTER FINAL LAMEDH -10893 ; [.4B0E.0020.0002] # NABATAEAN LETTER MEM -10892 ; [.4B0E.0020.0019] # NABATAEAN LETTER FINAL MEM -10895 ; [.4B0F.0020.0002] # NABATAEAN LETTER NUN -10894 ; [.4B0F.0020.0019] # NABATAEAN LETTER FINAL NUN -10896 ; [.4B10.0020.0002] # NABATAEAN LETTER SAMEKH -10897 ; [.4B11.0020.0002] # NABATAEAN LETTER AYIN -10898 ; [.4B12.0020.0002] # NABATAEAN LETTER PE -10899 ; [.4B13.0020.0002] # NABATAEAN LETTER SADHE -1089A ; [.4B14.0020.0002] # NABATAEAN LETTER QOPH -1089B ; [.4B15.0020.0002] # NABATAEAN LETTER RESH -1089D ; [.4B16.0020.0002] # NABATAEAN LETTER SHIN -1089C ; [.4B16.0020.0019] # NABATAEAN LETTER FINAL SHIN -1089E ; [.4B17.0020.0002] # NABATAEAN LETTER TAW -108E0 ; [.4B18.0020.0002] # HATRAN LETTER ALEPH -108E1 ; [.4B19.0020.0002] # HATRAN LETTER BETH -108E2 ; [.4B1A.0020.0002] # HATRAN LETTER GIMEL -108E3 ; [.4B1B.0020.0002] # HATRAN LETTER DALETH-RESH -108E4 ; [.4B1C.0020.0002] # HATRAN LETTER HE -108E5 ; [.4B1D.0020.0002] # HATRAN LETTER WAW -108E6 ; [.4B1E.0020.0002] # HATRAN LETTER ZAYN -108E7 ; [.4B1F.0020.0002] # HATRAN LETTER HETH -108E8 ; [.4B20.0020.0002] # HATRAN LETTER TETH -108E9 ; [.4B21.0020.0002] # HATRAN LETTER YODH -108EA ; [.4B22.0020.0002] # HATRAN LETTER KAPH -108EB ; [.4B23.0020.0002] # HATRAN LETTER LAMEDH -108EC ; [.4B24.0020.0002] # HATRAN LETTER MEM -108ED ; [.4B25.0020.0002] # HATRAN LETTER NUN -108EE ; [.4B26.0020.0002] # HATRAN LETTER SAMEKH -108EF ; [.4B27.0020.0002] # HATRAN LETTER AYN -108F0 ; [.4B28.0020.0002] # HATRAN LETTER PE -108F1 ; [.4B29.0020.0002] # HATRAN LETTER SADHE -108F2 ; [.4B2A.0020.0002] # HATRAN LETTER QOPH -108F4 ; [.4B2B.0020.0002] # HATRAN LETTER SHIN -108F5 ; [.4B2C.0020.0002] # HATRAN LETTER TAW -10840 ; [.4B2D.0020.0002] # IMPERIAL ARAMAIC LETTER ALEPH -10841 ; [.4B2E.0020.0002] # IMPERIAL ARAMAIC LETTER BETH -10842 ; [.4B2F.0020.0002] # IMPERIAL ARAMAIC LETTER GIMEL -10843 ; [.4B30.0020.0002] # IMPERIAL ARAMAIC LETTER DALETH -10844 ; [.4B31.0020.0002] # IMPERIAL ARAMAIC LETTER HE -10845 ; [.4B32.0020.0002] # IMPERIAL ARAMAIC LETTER WAW -10846 ; [.4B33.0020.0002] # IMPERIAL ARAMAIC LETTER ZAYIN -10847 ; [.4B34.0020.0002] # IMPERIAL ARAMAIC LETTER HETH -10848 ; [.4B35.0020.0002] # IMPERIAL ARAMAIC LETTER TETH -10849 ; [.4B36.0020.0002] # IMPERIAL ARAMAIC LETTER YODH -1084A ; [.4B37.0020.0002] # IMPERIAL ARAMAIC LETTER KAPH -1084B ; [.4B38.0020.0002] # IMPERIAL ARAMAIC LETTER LAMEDH -1084C ; [.4B39.0020.0002] # IMPERIAL ARAMAIC LETTER MEM -1084D ; [.4B3A.0020.0002] # IMPERIAL ARAMAIC LETTER NUN -1084E ; [.4B3B.0020.0002] # IMPERIAL ARAMAIC LETTER SAMEKH -1084F ; [.4B3C.0020.0002] # IMPERIAL ARAMAIC LETTER AYIN -10850 ; [.4B3D.0020.0002] # IMPERIAL ARAMAIC LETTER PE -10851 ; [.4B3E.0020.0002] # IMPERIAL ARAMAIC LETTER SADHE -10852 ; [.4B3F.0020.0002] # IMPERIAL ARAMAIC LETTER QOPH -10853 ; [.4B40.0020.0002] # IMPERIAL ARAMAIC LETTER RESH -10854 ; [.4B41.0020.0002] # IMPERIAL ARAMAIC LETTER SHIN -10855 ; [.4B42.0020.0002] # IMPERIAL ARAMAIC LETTER TAW -10B40 ; [.4B43.0020.0002] # INSCRIPTIONAL PARTHIAN LETTER ALEPH -10B41 ; [.4B44.0020.0002] # INSCRIPTIONAL PARTHIAN LETTER BETH -10B42 ; [.4B45.0020.0002] # INSCRIPTIONAL PARTHIAN LETTER GIMEL -10B43 ; [.4B46.0020.0002] # INSCRIPTIONAL PARTHIAN LETTER DALETH -10B44 ; [.4B47.0020.0002] # INSCRIPTIONAL PARTHIAN LETTER HE -10B45 ; [.4B48.0020.0002] # INSCRIPTIONAL PARTHIAN LETTER WAW -10B46 ; [.4B49.0020.0002] # INSCRIPTIONAL PARTHIAN LETTER ZAYIN -10B47 ; [.4B4A.0020.0002] # INSCRIPTIONAL PARTHIAN LETTER HETH -10B48 ; [.4B4B.0020.0002] # INSCRIPTIONAL PARTHIAN LETTER TETH -10B49 ; [.4B4C.0020.0002] # INSCRIPTIONAL PARTHIAN LETTER YODH -10B4A ; [.4B4D.0020.0002] # INSCRIPTIONAL PARTHIAN LETTER KAPH -10B4B ; [.4B4E.0020.0002] # INSCRIPTIONAL PARTHIAN LETTER LAMEDH -10B4C ; [.4B4F.0020.0002] # INSCRIPTIONAL PARTHIAN LETTER MEM -10B4D ; [.4B50.0020.0002] # INSCRIPTIONAL PARTHIAN LETTER NUN -10B4E ; [.4B51.0020.0002] # INSCRIPTIONAL PARTHIAN LETTER SAMEKH -10B4F ; [.4B52.0020.0002] # INSCRIPTIONAL PARTHIAN LETTER AYIN -10B50 ; [.4B53.0020.0002] # INSCRIPTIONAL PARTHIAN LETTER PE -10B51 ; [.4B54.0020.0002] # INSCRIPTIONAL PARTHIAN LETTER SADHE -10B52 ; [.4B55.0020.0002] # INSCRIPTIONAL PARTHIAN LETTER QOPH -10B53 ; [.4B56.0020.0002] # INSCRIPTIONAL PARTHIAN LETTER RESH -10B54 ; [.4B57.0020.0002] # INSCRIPTIONAL PARTHIAN LETTER SHIN -10B55 ; [.4B58.0020.0002] # INSCRIPTIONAL PARTHIAN LETTER TAW -10B60 ; [.4B59.0020.0002] # INSCRIPTIONAL PAHLAVI LETTER ALEPH -10B61 ; [.4B5A.0020.0002] # INSCRIPTIONAL PAHLAVI LETTER BETH -10B62 ; [.4B5B.0020.0002] # INSCRIPTIONAL PAHLAVI LETTER GIMEL -10B63 ; [.4B5C.0020.0002] # INSCRIPTIONAL PAHLAVI LETTER DALETH -10B64 ; [.4B5D.0020.0002] # INSCRIPTIONAL PAHLAVI LETTER HE -10B65 ; [.4B5E.0020.0002] # INSCRIPTIONAL PAHLAVI LETTER WAW-AYIN-RESH -10B66 ; [.4B5F.0020.0002] # INSCRIPTIONAL PAHLAVI LETTER ZAYIN -10B67 ; [.4B60.0020.0002] # INSCRIPTIONAL PAHLAVI LETTER HETH -10B68 ; [.4B61.0020.0002] # INSCRIPTIONAL PAHLAVI LETTER TETH -10B69 ; [.4B62.0020.0002] # INSCRIPTIONAL PAHLAVI LETTER YODH -10B6A ; [.4B63.0020.0002] # INSCRIPTIONAL PAHLAVI LETTER KAPH -10B6B ; [.4B64.0020.0002] # INSCRIPTIONAL PAHLAVI LETTER LAMEDH -10B6C ; [.4B65.0020.0002] # INSCRIPTIONAL PAHLAVI LETTER MEM-QOPH -10B6D ; [.4B66.0020.0002] # INSCRIPTIONAL PAHLAVI LETTER NUN -10B6E ; [.4B67.0020.0002] # INSCRIPTIONAL PAHLAVI LETTER SAMEKH -10B6F ; [.4B68.0020.0002] # INSCRIPTIONAL PAHLAVI LETTER PE -10B70 ; [.4B69.0020.0002] # INSCRIPTIONAL PAHLAVI LETTER SADHE -10B71 ; [.4B6A.0020.0002] # INSCRIPTIONAL PAHLAVI LETTER SHIN -10B72 ; [.4B6B.0020.0002] # INSCRIPTIONAL PAHLAVI LETTER TAW -10B80 ; [.4B6C.0020.0002] # PSALTER PAHLAVI LETTER ALEPH -10B81 ; [.4B6D.0020.0002] # PSALTER PAHLAVI LETTER BETH -10B82 ; [.4B6E.0020.0002] # PSALTER PAHLAVI LETTER GIMEL -10B83 ; [.4B6F.0020.0002] # PSALTER PAHLAVI LETTER DALETH -10B84 ; [.4B70.0020.0002] # PSALTER PAHLAVI LETTER HE -10B85 ; [.4B71.0020.0002] # PSALTER PAHLAVI LETTER WAW-AYIN-RESH -10B86 ; [.4B72.0020.0002] # PSALTER PAHLAVI LETTER ZAYIN -10B87 ; [.4B73.0020.0002] # PSALTER PAHLAVI LETTER HETH -10B88 ; [.4B74.0020.0002] # PSALTER PAHLAVI LETTER YODH -10B89 ; [.4B75.0020.0002] # PSALTER PAHLAVI LETTER KAPH -10B8A ; [.4B76.0020.0002] # PSALTER PAHLAVI LETTER LAMEDH -10B8B ; [.4B77.0020.0002] # PSALTER PAHLAVI LETTER MEM-QOPH -10B8C ; [.4B78.0020.0002] # PSALTER PAHLAVI LETTER NUN -10B8D ; [.4B79.0020.0002] # PSALTER PAHLAVI LETTER SAMEKH -10B8E ; [.4B7A.0020.0002] # PSALTER PAHLAVI LETTER PE -10B8F ; [.4B7B.0020.0002] # PSALTER PAHLAVI LETTER SADHE -10B90 ; [.4B7C.0020.0002] # PSALTER PAHLAVI LETTER SHIN -10B91 ; [.4B7D.0020.0002] # PSALTER PAHLAVI LETTER TAW -10AC0 ; [.4B7E.0020.0002] # MANICHAEAN LETTER ALEPH -10AC1 ; [.4B7F.0020.0002] # MANICHAEAN LETTER BETH -10AC2 ; [.4B80.0020.0002] # MANICHAEAN LETTER BHETH -10AC3 ; [.4B81.0020.0002] # MANICHAEAN LETTER GIMEL -10AC4 ; [.4B82.0020.0002] # MANICHAEAN LETTER GHIMEL -10AC5 ; [.4B83.0020.0002] # MANICHAEAN LETTER DALETH -10AC6 ; [.4B84.0020.0002] # MANICHAEAN LETTER HE -10AC7 ; [.4B85.0020.0002] # MANICHAEAN LETTER WAW -10AC8 ; [.4B85.0020.0004][.0000.0112.0004] # MANICHAEAN SIGN UD -10AC9 ; [.4B86.0020.0002] # MANICHAEAN LETTER ZAYIN -10ACA ; [.4B87.0020.0002] # MANICHAEAN LETTER ZHAYIN -10ACB ; [.4B88.0020.0002] # MANICHAEAN LETTER JAYIN -10ACC ; [.4B89.0020.0002] # MANICHAEAN LETTER JHAYIN -10ACD ; [.4B8A.0020.0002] # MANICHAEAN LETTER HETH -10ACE ; [.4B8B.0020.0002] # MANICHAEAN LETTER TETH -10ACF ; [.4B8C.0020.0002] # MANICHAEAN LETTER YODH -10AD0 ; [.4B8D.0020.0002] # MANICHAEAN LETTER KAPH -10AD1 ; [.4B8E.0020.0002] # MANICHAEAN LETTER XAPH -10AD2 ; [.4B8F.0020.0002] # MANICHAEAN LETTER KHAPH -10AD3 ; [.4B90.0020.0002] # MANICHAEAN LETTER LAMEDH -10AD4 ; [.4B91.0020.0002] # MANICHAEAN LETTER DHAMEDH -10AD5 ; [.4B92.0020.0002] # MANICHAEAN LETTER THAMEDH -10AD6 ; [.4B93.0020.0002] # MANICHAEAN LETTER MEM -10AD7 ; [.4B94.0020.0002] # MANICHAEAN LETTER NUN -10AD8 ; [.4B95.0020.0002] # MANICHAEAN LETTER SAMEKH -10AD9 ; [.4B96.0020.0002] # MANICHAEAN LETTER AYIN -10ADA ; [.4B97.0020.0002] # MANICHAEAN LETTER AAYIN -10ADB ; [.4B98.0020.0002] # MANICHAEAN LETTER PE -10ADC ; [.4B99.0020.0002] # MANICHAEAN LETTER FE -10ADD ; [.4B9A.0020.0002] # MANICHAEAN LETTER SADHE -10ADE ; [.4B9B.0020.0002] # MANICHAEAN LETTER QOPH -10ADF ; [.4B9C.0020.0002] # MANICHAEAN LETTER XOPH -10AE0 ; [.4B9D.0020.0002] # MANICHAEAN LETTER QHOPH -10AE1 ; [.4B9E.0020.0002] # MANICHAEAN LETTER RESH -10AE2 ; [.4B9F.0020.0002] # MANICHAEAN LETTER SHIN -10AE3 ; [.4BA0.0020.0002] # MANICHAEAN LETTER SSHIN -10AE4 ; [.4BA1.0020.0002] # MANICHAEAN LETTER TAW -10380 ; [.4BA2.0020.0002] # UGARITIC LETTER ALPA -10381 ; [.4BA3.0020.0002] # UGARITIC LETTER BETA -10382 ; [.4BA4.0020.0002] # UGARITIC LETTER GAMLA -10383 ; [.4BA5.0020.0002] # UGARITIC LETTER KHA -10384 ; [.4BA6.0020.0002] # UGARITIC LETTER DELTA -10385 ; [.4BA7.0020.0002] # UGARITIC LETTER HO -10386 ; [.4BA8.0020.0002] # UGARITIC LETTER WO -10387 ; [.4BA9.0020.0002] # UGARITIC LETTER ZETA -10388 ; [.4BAA.0020.0002] # UGARITIC LETTER HOTA -10389 ; [.4BAB.0020.0002] # UGARITIC LETTER TET -1038A ; [.4BAC.0020.0002] # UGARITIC LETTER YOD -1038B ; [.4BAD.0020.0002] # UGARITIC LETTER KAF -1038C ; [.4BAE.0020.0002] # UGARITIC LETTER SHIN -1038D ; [.4BAF.0020.0002] # UGARITIC LETTER LAMDA -1038E ; [.4BB0.0020.0002] # UGARITIC LETTER MEM -1038F ; [.4BB1.0020.0002] # UGARITIC LETTER DHAL -10390 ; [.4BB2.0020.0002] # UGARITIC LETTER NUN -10391 ; [.4BB3.0020.0002] # UGARITIC LETTER ZU -10392 ; [.4BB4.0020.0002] # UGARITIC LETTER SAMKA -10393 ; [.4BB5.0020.0002] # UGARITIC LETTER AIN -10394 ; [.4BB6.0020.0002] # UGARITIC LETTER PU -10395 ; [.4BB7.0020.0002] # UGARITIC LETTER SADE -10396 ; [.4BB8.0020.0002] # UGARITIC LETTER QOPA -10397 ; [.4BB9.0020.0002] # UGARITIC LETTER RASHA -10398 ; [.4BBA.0020.0002] # UGARITIC LETTER THANNA -10399 ; [.4BBB.0020.0002] # UGARITIC LETTER GHAIN -1039A ; [.4BBC.0020.0002] # UGARITIC LETTER TO -1039B ; [.4BBD.0020.0002] # UGARITIC LETTER I -1039C ; [.4BBE.0020.0002] # UGARITIC LETTER U -1039D ; [.4BBF.0020.0002] # UGARITIC LETTER SSU -103A0 ; [.4BC0.0020.0002] # OLD PERSIAN SIGN A -103A1 ; [.4BC1.0020.0002] # OLD PERSIAN SIGN I -103A2 ; [.4BC2.0020.0002] # OLD PERSIAN SIGN U -103A3 ; [.4BC3.0020.0002] # OLD PERSIAN SIGN KA -103A4 ; [.4BC4.0020.0002] # OLD PERSIAN SIGN KU -103A5 ; [.4BC5.0020.0002] # OLD PERSIAN SIGN GA -103A6 ; [.4BC6.0020.0002] # OLD PERSIAN SIGN GU -103A7 ; [.4BC7.0020.0002] # OLD PERSIAN SIGN XA -103A8 ; [.4BC8.0020.0002] # OLD PERSIAN SIGN CA -103A9 ; [.4BC9.0020.0002] # OLD PERSIAN SIGN JA -103AA ; [.4BCA.0020.0002] # OLD PERSIAN SIGN JI -103AB ; [.4BCB.0020.0002] # OLD PERSIAN SIGN TA -103AC ; [.4BCC.0020.0002] # OLD PERSIAN SIGN TU -103AD ; [.4BCD.0020.0002] # OLD PERSIAN SIGN DA -103AE ; [.4BCE.0020.0002] # OLD PERSIAN SIGN DI -103AF ; [.4BCF.0020.0002] # OLD PERSIAN SIGN DU -103B0 ; [.4BD0.0020.0002] # OLD PERSIAN SIGN THA -103B1 ; [.4BD1.0020.0002] # OLD PERSIAN SIGN PA -103B2 ; [.4BD2.0020.0002] # OLD PERSIAN SIGN BA -103B3 ; [.4BD3.0020.0002] # OLD PERSIAN SIGN FA -103B4 ; [.4BD4.0020.0002] # OLD PERSIAN SIGN NA -103B5 ; [.4BD5.0020.0002] # OLD PERSIAN SIGN NU -103B6 ; [.4BD6.0020.0002] # OLD PERSIAN SIGN MA -103B7 ; [.4BD7.0020.0002] # OLD PERSIAN SIGN MI -103B8 ; [.4BD8.0020.0002] # OLD PERSIAN SIGN MU -103B9 ; [.4BD9.0020.0002] # OLD PERSIAN SIGN YA -103BA ; [.4BDA.0020.0002] # OLD PERSIAN SIGN VA -103BB ; [.4BDB.0020.0002] # OLD PERSIAN SIGN VI -103BC ; [.4BDC.0020.0002] # OLD PERSIAN SIGN RA -103BD ; [.4BDD.0020.0002] # OLD PERSIAN SIGN RU -103BE ; [.4BDE.0020.0002] # OLD PERSIAN SIGN LA -103BF ; [.4BDF.0020.0002] # OLD PERSIAN SIGN SA -103C0 ; [.4BE0.0020.0002] # OLD PERSIAN SIGN ZA -103C1 ; [.4BE1.0020.0002] # OLD PERSIAN SIGN SHA -103C2 ; [.4BE2.0020.0002] # OLD PERSIAN SIGN SSA -103C3 ; [.4BE3.0020.0002] # OLD PERSIAN SIGN HA -103C8 ; [.4BE4.0020.0002] # OLD PERSIAN SIGN AURAMAZDAA -103C9 ; [.4BE5.0020.0002] # OLD PERSIAN SIGN AURAMAZDAA-2 -103CA ; [.4BE6.0020.0002] # OLD PERSIAN SIGN AURAMAZDAAHA -103CB ; [.4BE7.0020.0002] # OLD PERSIAN SIGN XSHAAYATHIYA -103CC ; [.4BE8.0020.0002] # OLD PERSIAN SIGN DAHYAAUSH -103CD ; [.4BE9.0020.0002] # OLD PERSIAN SIGN DAHYAAUSH-2 -103CE ; [.4BEA.0020.0002] # OLD PERSIAN SIGN BAGA -103CF ; [.4BEB.0020.0002] # OLD PERSIAN SIGN BUUMISH -12000 ; [.4BEC.0020.0002] # CUNEIFORM SIGN A -12001 ; [.4BED.0020.0002] # CUNEIFORM SIGN A TIMES A -12002 ; [.4BEE.0020.0002] # CUNEIFORM SIGN A TIMES BAD -12003 ; [.4BEF.0020.0002] # CUNEIFORM SIGN A TIMES GAN2 TENU -12004 ; [.4BF0.0020.0002] # CUNEIFORM SIGN A TIMES HA -12005 ; [.4BF1.0020.0002] # CUNEIFORM SIGN A TIMES IGI -12006 ; [.4BF2.0020.0002] # CUNEIFORM SIGN A TIMES LAGAR GUNU -12007 ; [.4BF3.0020.0002] # CUNEIFORM SIGN A TIMES MUSH -12008 ; [.4BF4.0020.0002] # CUNEIFORM SIGN A TIMES SAG -12009 ; [.4BF5.0020.0002] # CUNEIFORM SIGN A2 -1200A ; [.4BF6.0020.0002] # CUNEIFORM SIGN AB -1200B ; [.4BF7.0020.0002] # CUNEIFORM SIGN AB TIMES ASH2 -1200C ; [.4BF8.0020.0002] # CUNEIFORM SIGN AB TIMES DUN3 GUNU -1200D ; [.4BF9.0020.0002] # CUNEIFORM SIGN AB TIMES GAL -1200E ; [.4BFA.0020.0002] # CUNEIFORM SIGN AB TIMES GAN2 TENU -1200F ; [.4BFB.0020.0002] # CUNEIFORM SIGN AB TIMES HA -12010 ; [.4BFC.0020.0002] # CUNEIFORM SIGN AB TIMES IGI GUNU -12011 ; [.4BFD.0020.0002] # CUNEIFORM SIGN AB TIMES IMIN -12012 ; [.4BFE.0020.0002] # CUNEIFORM SIGN AB TIMES LAGAB -12013 ; [.4BFF.0020.0002] # CUNEIFORM SIGN AB TIMES SHESH -12014 ; [.4C00.0020.0002] # CUNEIFORM SIGN AB TIMES U PLUS U PLUS U -12015 ; [.4C01.0020.0002] # CUNEIFORM SIGN AB GUNU -12016 ; [.4C02.0020.0002] # CUNEIFORM SIGN AB2 -12017 ; [.4C03.0020.0002] # CUNEIFORM SIGN AB2 TIMES BALAG -12018 ; [.4C04.0020.0002] # CUNEIFORM SIGN AB2 TIMES GAN2 TENU -12019 ; [.4C05.0020.0002] # CUNEIFORM SIGN AB2 TIMES ME PLUS EN -1201A ; [.4C06.0020.0002] # CUNEIFORM SIGN AB2 TIMES SHA3 -1201B ; [.4C07.0020.0002] # CUNEIFORM SIGN AB2 TIMES TAK4 -1201C ; [.4C08.0020.0002] # CUNEIFORM SIGN AD -1201D ; [.4C09.0020.0002] # CUNEIFORM SIGN AK -1201E ; [.4C0A.0020.0002] # CUNEIFORM SIGN AK TIMES ERIN2 -1201F ; [.4C0B.0020.0002] # CUNEIFORM SIGN AK TIMES SHITA PLUS GISH -12020 ; [.4C0C.0020.0002] # CUNEIFORM SIGN AL -12021 ; [.4C0D.0020.0002] # CUNEIFORM SIGN AL TIMES AL -12022 ; [.4C0E.0020.0002] # CUNEIFORM SIGN AL TIMES DIM2 -12023 ; [.4C0F.0020.0002] # CUNEIFORM SIGN AL TIMES GISH -12024 ; [.4C10.0020.0002] # CUNEIFORM SIGN AL TIMES HA -12025 ; [.4C11.0020.0002] # CUNEIFORM SIGN AL TIMES KAD3 -12026 ; [.4C12.0020.0002] # CUNEIFORM SIGN AL TIMES KI -12027 ; [.4C13.0020.0002] # CUNEIFORM SIGN AL TIMES SHE -12028 ; [.4C14.0020.0002] # CUNEIFORM SIGN AL TIMES USH -12029 ; [.4C15.0020.0002] # CUNEIFORM SIGN ALAN -1202A ; [.4C16.0020.0002] # CUNEIFORM SIGN ALEPH -1202B ; [.4C17.0020.0002] # CUNEIFORM SIGN AMAR -1202C ; [.4C18.0020.0002] # CUNEIFORM SIGN AMAR TIMES SHE -1202D ; [.4C19.0020.0002] # CUNEIFORM SIGN AN -1202E ; [.4C1A.0020.0002] # CUNEIFORM SIGN AN OVER AN -1202F ; [.4C1B.0020.0002] # CUNEIFORM SIGN AN THREE TIMES -12030 ; [.4C1C.0020.0002] # CUNEIFORM SIGN AN PLUS NAGA OPPOSING AN PLUS NAGA -12031 ; [.4C1D.0020.0002] # CUNEIFORM SIGN AN PLUS NAGA SQUARED -12032 ; [.4C1E.0020.0002] # CUNEIFORM SIGN ANSHE -12033 ; [.4C1F.0020.0002] # CUNEIFORM SIGN APIN -12034 ; [.4C20.0020.0002] # CUNEIFORM SIGN ARAD -12035 ; [.4C21.0020.0002] # CUNEIFORM SIGN ARAD TIMES KUR -12036 ; [.4C22.0020.0002] # CUNEIFORM SIGN ARKAB -12037 ; [.4C23.0020.0002] # CUNEIFORM SIGN ASAL2 -12038 ; [.4C24.0020.0002] # CUNEIFORM SIGN ASH -12039 ; [.4C25.0020.0002] # CUNEIFORM SIGN ASH ZIDA TENU -1203A ; [.4C26.0020.0002] # CUNEIFORM SIGN ASH KABA TENU -1203B ; [.4C27.0020.0002] # CUNEIFORM SIGN ASH OVER ASH TUG2 OVER TUG2 TUG2 OVER TUG2 PAP -1203C ; [.4C28.0020.0002] # CUNEIFORM SIGN ASH OVER ASH OVER ASH -1203D ; [.4C29.0020.0002] # CUNEIFORM SIGN ASH OVER ASH OVER ASH CROSSING ASH OVER ASH OVER ASH -1203E ; [.4C2A.0020.0002] # CUNEIFORM SIGN ASH2 -1203F ; [.4C2B.0020.0002] # CUNEIFORM SIGN ASHGAB -12040 ; [.4C2C.0020.0002] # CUNEIFORM SIGN BA -12041 ; [.4C2D.0020.0002] # CUNEIFORM SIGN BAD -12042 ; [.4C2E.0020.0002] # CUNEIFORM SIGN BAG3 -12043 ; [.4C2F.0020.0002] # CUNEIFORM SIGN BAHAR2 -12044 ; [.4C30.0020.0002] # CUNEIFORM SIGN BAL -12045 ; [.4C31.0020.0002] # CUNEIFORM SIGN BAL OVER BAL -12046 ; [.4C32.0020.0002] # CUNEIFORM SIGN BALAG -12047 ; [.4C33.0020.0002] # CUNEIFORM SIGN BAR -12048 ; [.4C34.0020.0002] # CUNEIFORM SIGN BARA2 -12049 ; [.4C35.0020.0002] # CUNEIFORM SIGN BI -1204A ; [.4C36.0020.0002] # CUNEIFORM SIGN BI TIMES A -1204B ; [.4C37.0020.0002] # CUNEIFORM SIGN BI TIMES GAR -1204C ; [.4C38.0020.0002] # CUNEIFORM SIGN BI TIMES IGI GUNU -1204D ; [.4C39.0020.0002] # CUNEIFORM SIGN BU -1204E ; [.4C3A.0020.0002] # CUNEIFORM SIGN BU OVER BU AB -1204F ; [.4C3B.0020.0002] # CUNEIFORM SIGN BU OVER BU UN -12050 ; [.4C3C.0020.0002] # CUNEIFORM SIGN BU CROSSING BU -12051 ; [.4C3D.0020.0002] # CUNEIFORM SIGN BULUG -12052 ; [.4C3E.0020.0002] # CUNEIFORM SIGN BULUG OVER BULUG -12053 ; [.4C3F.0020.0002] # CUNEIFORM SIGN BUR -12054 ; [.4C40.0020.0002] # CUNEIFORM SIGN BUR2 -12055 ; [.4C41.0020.0002] # CUNEIFORM SIGN DA -12056 ; [.4C42.0020.0002] # CUNEIFORM SIGN DAG -12057 ; [.4C43.0020.0002] # CUNEIFORM SIGN DAG KISIM5 TIMES A PLUS MASH -12058 ; [.4C44.0020.0002] # CUNEIFORM SIGN DAG KISIM5 TIMES AMAR -12059 ; [.4C45.0020.0002] # CUNEIFORM SIGN DAG KISIM5 TIMES BALAG -1205A ; [.4C46.0020.0002] # CUNEIFORM SIGN DAG KISIM5 TIMES BI -1205B ; [.4C47.0020.0002] # CUNEIFORM SIGN DAG KISIM5 TIMES GA -1205C ; [.4C48.0020.0002] # CUNEIFORM SIGN DAG KISIM5 TIMES GA PLUS MASH -1205D ; [.4C49.0020.0002] # CUNEIFORM SIGN DAG KISIM5 TIMES GI -1205E ; [.4C4A.0020.0002] # CUNEIFORM SIGN DAG KISIM5 TIMES GIR2 -1205F ; [.4C4B.0020.0002] # CUNEIFORM SIGN DAG KISIM5 TIMES GUD -12060 ; [.4C4C.0020.0002] # CUNEIFORM SIGN DAG KISIM5 TIMES HA -12061 ; [.4C4D.0020.0002] # CUNEIFORM SIGN DAG KISIM5 TIMES IR -12062 ; [.4C4E.0020.0002] # CUNEIFORM SIGN DAG KISIM5 TIMES IR PLUS LU -12063 ; [.4C4F.0020.0002] # CUNEIFORM SIGN DAG KISIM5 TIMES KAK -12064 ; [.4C50.0020.0002] # CUNEIFORM SIGN DAG KISIM5 TIMES LA -12065 ; [.4C51.0020.0002] # CUNEIFORM SIGN DAG KISIM5 TIMES LU -12066 ; [.4C52.0020.0002] # CUNEIFORM SIGN DAG KISIM5 TIMES LU PLUS MASH2 -12067 ; [.4C53.0020.0002] # CUNEIFORM SIGN DAG KISIM5 TIMES LUM -12068 ; [.4C54.0020.0002] # CUNEIFORM SIGN DAG KISIM5 TIMES NE -12069 ; [.4C55.0020.0002] # CUNEIFORM SIGN DAG KISIM5 TIMES PAP PLUS PAP -1206A ; [.4C56.0020.0002] # CUNEIFORM SIGN DAG KISIM5 TIMES SI -1206B ; [.4C57.0020.0002] # CUNEIFORM SIGN DAG KISIM5 TIMES TAK4 -1206C ; [.4C58.0020.0002] # CUNEIFORM SIGN DAG KISIM5 TIMES U2 PLUS GIR2 -1206D ; [.4C59.0020.0002] # CUNEIFORM SIGN DAG KISIM5 TIMES USH -1206E ; [.4C5A.0020.0002] # CUNEIFORM SIGN DAM -1206F ; [.4C5B.0020.0002] # CUNEIFORM SIGN DAR -12070 ; [.4C5C.0020.0002] # CUNEIFORM SIGN DARA3 -12071 ; [.4C5D.0020.0002] # CUNEIFORM SIGN DARA4 -12072 ; [.4C5E.0020.0002] # CUNEIFORM SIGN DI -12073 ; [.4C5F.0020.0002] # CUNEIFORM SIGN DIB -12074 ; [.4C60.0020.0002] # CUNEIFORM SIGN DIM -12075 ; [.4C61.0020.0002] # CUNEIFORM SIGN DIM TIMES SHE -12076 ; [.4C62.0020.0002] # CUNEIFORM SIGN DIM2 -12077 ; [.4C63.0020.0002] # CUNEIFORM SIGN DIN -12078 ; [.4C64.0020.0002] # CUNEIFORM SIGN DIN KASKAL U GUNU DISH -12079 ; [.4C65.0020.0002] # CUNEIFORM SIGN DISH -1207A ; [.4C66.0020.0002] # CUNEIFORM SIGN DU -1207B ; [.4C67.0020.0002] # CUNEIFORM SIGN DU OVER DU -1207C ; [.4C68.0020.0002] # CUNEIFORM SIGN DU GUNU -1207D ; [.4C69.0020.0002] # CUNEIFORM SIGN DU SHESHIG -1207E ; [.4C6A.0020.0002] # CUNEIFORM SIGN DUB -1207F ; [.4C6B.0020.0002] # CUNEIFORM SIGN DUB TIMES ESH2 -12080 ; [.4C6C.0020.0002] # CUNEIFORM SIGN DUB2 -12081 ; [.4C6D.0020.0002] # CUNEIFORM SIGN DUG -12082 ; [.4C6E.0020.0002] # CUNEIFORM SIGN DUGUD -12083 ; [.4C6F.0020.0002] # CUNEIFORM SIGN DUH -12084 ; [.4C70.0020.0002] # CUNEIFORM SIGN DUN -12085 ; [.4C71.0020.0002] # CUNEIFORM SIGN DUN3 -12086 ; [.4C72.0020.0002] # CUNEIFORM SIGN DUN3 GUNU -12087 ; [.4C73.0020.0002] # CUNEIFORM SIGN DUN3 GUNU GUNU -12088 ; [.4C74.0020.0002] # CUNEIFORM SIGN DUN4 -12089 ; [.4C75.0020.0002] # CUNEIFORM SIGN DUR2 -1208A ; [.4C76.0020.0002] # CUNEIFORM SIGN E -1208B ; [.4C77.0020.0002] # CUNEIFORM SIGN E TIMES PAP -1208C ; [.4C78.0020.0002] # CUNEIFORM SIGN E OVER E NUN OVER NUN -1208D ; [.4C79.0020.0002] # CUNEIFORM SIGN E2 -1208E ; [.4C7A.0020.0002] # CUNEIFORM SIGN E2 TIMES A PLUS HA PLUS DA -1208F ; [.4C7B.0020.0002] # CUNEIFORM SIGN E2 TIMES GAR -12090 ; [.4C7C.0020.0002] # CUNEIFORM SIGN E2 TIMES MI -12091 ; [.4C7D.0020.0002] # CUNEIFORM SIGN E2 TIMES SAL -12092 ; [.4C7E.0020.0002] # CUNEIFORM SIGN E2 TIMES SHE -12093 ; [.4C7F.0020.0002] # CUNEIFORM SIGN E2 TIMES U -12094 ; [.4C80.0020.0002] # CUNEIFORM SIGN EDIN -12095 ; [.4C81.0020.0002] # CUNEIFORM SIGN EGIR -12096 ; [.4C82.0020.0002] # CUNEIFORM SIGN EL -12097 ; [.4C83.0020.0002] # CUNEIFORM SIGN EN -12098 ; [.4C84.0020.0002] # CUNEIFORM SIGN EN TIMES GAN2 -12099 ; [.4C85.0020.0002] # CUNEIFORM SIGN EN TIMES GAN2 TENU -1209A ; [.4C86.0020.0002] # CUNEIFORM SIGN EN TIMES ME -1209B ; [.4C87.0020.0002] # CUNEIFORM SIGN EN CROSSING EN -1209C ; [.4C88.0020.0002] # CUNEIFORM SIGN EN OPPOSING EN -1209D ; [.4C89.0020.0002] # CUNEIFORM SIGN EN SQUARED -1209E ; [.4C8A.0020.0002] # CUNEIFORM SIGN EREN -1209F ; [.4C8B.0020.0002] # CUNEIFORM SIGN ERIN2 -120A0 ; [.4C8C.0020.0002] # CUNEIFORM SIGN ESH2 -120A1 ; [.4C8D.0020.0002] # CUNEIFORM SIGN EZEN -120A2 ; [.4C8E.0020.0002] # CUNEIFORM SIGN EZEN TIMES A -120A3 ; [.4C8F.0020.0002] # CUNEIFORM SIGN EZEN TIMES A PLUS LAL -120A4 ; [.4C90.0020.0002] # CUNEIFORM SIGN EZEN TIMES A PLUS LAL TIMES LAL -120A5 ; [.4C91.0020.0002] # CUNEIFORM SIGN EZEN TIMES AN -120A6 ; [.4C92.0020.0002] # CUNEIFORM SIGN EZEN TIMES BAD -120A7 ; [.4C93.0020.0002] # CUNEIFORM SIGN EZEN TIMES DUN3 GUNU -120A8 ; [.4C94.0020.0002] # CUNEIFORM SIGN EZEN TIMES DUN3 GUNU GUNU -120A9 ; [.4C95.0020.0002] # CUNEIFORM SIGN EZEN TIMES HA -120AA ; [.4C96.0020.0002] # CUNEIFORM SIGN EZEN TIMES HA GUNU -120AB ; [.4C97.0020.0002] # CUNEIFORM SIGN EZEN TIMES IGI GUNU -120AC ; [.4C98.0020.0002] # CUNEIFORM SIGN EZEN TIMES KASKAL -120AD ; [.4C99.0020.0002] # CUNEIFORM SIGN EZEN TIMES KASKAL SQUARED -120AE ; [.4C9A.0020.0002] # CUNEIFORM SIGN EZEN TIMES KU3 -120AF ; [.4C9B.0020.0002] # CUNEIFORM SIGN EZEN TIMES LA -120B0 ; [.4C9C.0020.0002] # CUNEIFORM SIGN EZEN TIMES LAL TIMES LAL -120B1 ; [.4C9D.0020.0002] # CUNEIFORM SIGN EZEN TIMES LI -120B2 ; [.4C9E.0020.0002] # CUNEIFORM SIGN EZEN TIMES LU -120B3 ; [.4C9F.0020.0002] # CUNEIFORM SIGN EZEN TIMES U2 -120B4 ; [.4CA0.0020.0002] # CUNEIFORM SIGN EZEN TIMES UD -120B5 ; [.4CA1.0020.0002] # CUNEIFORM SIGN GA -120B6 ; [.4CA2.0020.0002] # CUNEIFORM SIGN GA GUNU -120B7 ; [.4CA3.0020.0002] # CUNEIFORM SIGN GA2 -120B8 ; [.4CA4.0020.0002] # CUNEIFORM SIGN GA2 TIMES A PLUS DA PLUS HA -120B9 ; [.4CA5.0020.0002] # CUNEIFORM SIGN GA2 TIMES A PLUS HA -120BA ; [.4CA6.0020.0002] # CUNEIFORM SIGN GA2 TIMES A PLUS IGI -120BB ; [.4CA7.0020.0002] # CUNEIFORM SIGN GA2 TIMES AB2 TENU PLUS TAB -120BC ; [.4CA8.0020.0002] # CUNEIFORM SIGN GA2 TIMES AN -120BD ; [.4CA9.0020.0002] # CUNEIFORM SIGN GA2 TIMES ASH -120BE ; [.4CAA.0020.0002] # CUNEIFORM SIGN GA2 TIMES ASH2 PLUS GAL -120BF ; [.4CAB.0020.0002] # CUNEIFORM SIGN GA2 TIMES BAD -120C0 ; [.4CAC.0020.0002] # CUNEIFORM SIGN GA2 TIMES BAR PLUS RA -120C1 ; [.4CAD.0020.0002] # CUNEIFORM SIGN GA2 TIMES BUR -120C2 ; [.4CAE.0020.0002] # CUNEIFORM SIGN GA2 TIMES BUR PLUS RA -120C3 ; [.4CAF.0020.0002] # CUNEIFORM SIGN GA2 TIMES DA -120C4 ; [.4CB0.0020.0002] # CUNEIFORM SIGN GA2 TIMES DI -120C5 ; [.4CB1.0020.0002] # CUNEIFORM SIGN GA2 TIMES DIM TIMES SHE -120C6 ; [.4CB2.0020.0002] # CUNEIFORM SIGN GA2 TIMES DUB -120C7 ; [.4CB3.0020.0002] # CUNEIFORM SIGN GA2 TIMES EL -120C8 ; [.4CB4.0020.0002] # CUNEIFORM SIGN GA2 TIMES EL PLUS LA -120C9 ; [.4CB5.0020.0002] # CUNEIFORM SIGN GA2 TIMES EN -120CA ; [.4CB6.0020.0002] # CUNEIFORM SIGN GA2 TIMES EN TIMES GAN2 TENU -120CB ; [.4CB7.0020.0002] # CUNEIFORM SIGN GA2 TIMES GAN2 TENU -120CC ; [.4CB8.0020.0002] # CUNEIFORM SIGN GA2 TIMES GAR -120CD ; [.4CB9.0020.0002] # CUNEIFORM SIGN GA2 TIMES GI -120CE ; [.4CBA.0020.0002] # CUNEIFORM SIGN GA2 TIMES GI4 -120CF ; [.4CBB.0020.0002] # CUNEIFORM SIGN GA2 TIMES GI4 PLUS A -120D0 ; [.4CBC.0020.0002] # CUNEIFORM SIGN GA2 TIMES GIR2 PLUS SU -120D1 ; [.4CBD.0020.0002] # CUNEIFORM SIGN GA2 TIMES HA PLUS LU PLUS ESH2 -120D2 ; [.4CBE.0020.0002] # CUNEIFORM SIGN GA2 TIMES HAL -120D3 ; [.4CBF.0020.0002] # CUNEIFORM SIGN GA2 TIMES HAL PLUS LA -120D4 ; [.4CC0.0020.0002] # CUNEIFORM SIGN GA2 TIMES HI PLUS LI -120D5 ; [.4CC1.0020.0002] # CUNEIFORM SIGN GA2 TIMES HUB2 -120D6 ; [.4CC2.0020.0002] # CUNEIFORM SIGN GA2 TIMES IGI GUNU -120D7 ; [.4CC3.0020.0002] # CUNEIFORM SIGN GA2 TIMES ISH PLUS HU PLUS ASH -120D8 ; [.4CC4.0020.0002] # CUNEIFORM SIGN GA2 TIMES KAK -120D9 ; [.4CC5.0020.0002] # CUNEIFORM SIGN GA2 TIMES KASKAL -120DA ; [.4CC6.0020.0002] # CUNEIFORM SIGN GA2 TIMES KID -120DB ; [.4CC7.0020.0002] # CUNEIFORM SIGN GA2 TIMES KID PLUS LAL -120DC ; [.4CC8.0020.0002] # CUNEIFORM SIGN GA2 TIMES KU3 PLUS AN -120DD ; [.4CC9.0020.0002] # CUNEIFORM SIGN GA2 TIMES LA -120DE ; [.4CCA.0020.0002] # CUNEIFORM SIGN GA2 TIMES ME PLUS EN -120DF ; [.4CCB.0020.0002] # CUNEIFORM SIGN GA2 TIMES MI -120E0 ; [.4CCC.0020.0002] # CUNEIFORM SIGN GA2 TIMES NUN -120E1 ; [.4CCD.0020.0002] # CUNEIFORM SIGN GA2 TIMES NUN OVER NUN -120E2 ; [.4CCE.0020.0002] # CUNEIFORM SIGN GA2 TIMES PA -120E3 ; [.4CCF.0020.0002] # CUNEIFORM SIGN GA2 TIMES SAL -120E4 ; [.4CD0.0020.0002] # CUNEIFORM SIGN GA2 TIMES SAR -120E5 ; [.4CD1.0020.0002] # CUNEIFORM SIGN GA2 TIMES SHE -120E6 ; [.4CD2.0020.0002] # CUNEIFORM SIGN GA2 TIMES SHE PLUS TUR -120E7 ; [.4CD3.0020.0002] # CUNEIFORM SIGN GA2 TIMES SHID -120E8 ; [.4CD4.0020.0002] # CUNEIFORM SIGN GA2 TIMES SUM -120E9 ; [.4CD5.0020.0002] # CUNEIFORM SIGN GA2 TIMES TAK4 -120EA ; [.4CD6.0020.0002] # CUNEIFORM SIGN GA2 TIMES U -120EB ; [.4CD7.0020.0002] # CUNEIFORM SIGN GA2 TIMES UD -120EC ; [.4CD8.0020.0002] # CUNEIFORM SIGN GA2 TIMES UD PLUS DU -120ED ; [.4CD9.0020.0002] # CUNEIFORM SIGN GA2 OVER GA2 -120EE ; [.4CDA.0020.0002] # CUNEIFORM SIGN GABA -120EF ; [.4CDB.0020.0002] # CUNEIFORM SIGN GABA CROSSING GABA -120F0 ; [.4CDC.0020.0002] # CUNEIFORM SIGN GAD -120F1 ; [.4CDD.0020.0002] # CUNEIFORM SIGN GAD OVER GAD GAR OVER GAR -120F2 ; [.4CDE.0020.0002] # CUNEIFORM SIGN GAL -120F3 ; [.4CDF.0020.0002] # CUNEIFORM SIGN GAL GAD OVER GAD GAR OVER GAR -120F4 ; [.4CE0.0020.0002] # CUNEIFORM SIGN GALAM -120F5 ; [.4CE1.0020.0002] # CUNEIFORM SIGN GAM -120F6 ; [.4CE2.0020.0002] # CUNEIFORM SIGN GAN -120F7 ; [.4CE3.0020.0002] # CUNEIFORM SIGN GAN2 -120F8 ; [.4CE4.0020.0002] # CUNEIFORM SIGN GAN2 TENU -120F9 ; [.4CE5.0020.0002] # CUNEIFORM SIGN GAN2 OVER GAN2 -120FA ; [.4CE6.0020.0002] # CUNEIFORM SIGN GAN2 CROSSING GAN2 -120FB ; [.4CE7.0020.0002] # CUNEIFORM SIGN GAR -120FC ; [.4CE8.0020.0002] # CUNEIFORM SIGN GAR3 -120FD ; [.4CE9.0020.0002] # CUNEIFORM SIGN GASHAN -120FE ; [.4CEA.0020.0002] # CUNEIFORM SIGN GESHTIN -120FF ; [.4CEB.0020.0002] # CUNEIFORM SIGN GESHTIN TIMES KUR -12100 ; [.4CEC.0020.0002] # CUNEIFORM SIGN GI -12101 ; [.4CED.0020.0002] # CUNEIFORM SIGN GI TIMES E -12102 ; [.4CEE.0020.0002] # CUNEIFORM SIGN GI TIMES U -12103 ; [.4CEF.0020.0002] # CUNEIFORM SIGN GI CROSSING GI -12104 ; [.4CF0.0020.0002] # CUNEIFORM SIGN GI4 -12105 ; [.4CF1.0020.0002] # CUNEIFORM SIGN GI4 OVER GI4 -12106 ; [.4CF2.0020.0002] # CUNEIFORM SIGN GI4 CROSSING GI4 -12107 ; [.4CF3.0020.0002] # CUNEIFORM SIGN GIDIM -12108 ; [.4CF4.0020.0002] # CUNEIFORM SIGN GIR2 -12109 ; [.4CF5.0020.0002] # CUNEIFORM SIGN GIR2 GUNU -1210A ; [.4CF6.0020.0002] # CUNEIFORM SIGN GIR3 -1210B ; [.4CF7.0020.0002] # CUNEIFORM SIGN GIR3 TIMES A PLUS IGI -1210C ; [.4CF8.0020.0002] # CUNEIFORM SIGN GIR3 TIMES GAN2 TENU -1210D ; [.4CF9.0020.0002] # CUNEIFORM SIGN GIR3 TIMES IGI -1210E ; [.4CFA.0020.0002] # CUNEIFORM SIGN GIR3 TIMES LU PLUS IGI -1210F ; [.4CFB.0020.0002] # CUNEIFORM SIGN GIR3 TIMES PA -12110 ; [.4CFC.0020.0002] # CUNEIFORM SIGN GISAL -12111 ; [.4CFD.0020.0002] # CUNEIFORM SIGN GISH -12112 ; [.4CFE.0020.0002] # CUNEIFORM SIGN GISH CROSSING GISH -12113 ; [.4CFF.0020.0002] # CUNEIFORM SIGN GISH TIMES BAD -12114 ; [.4D00.0020.0002] # CUNEIFORM SIGN GISH TIMES TAK4 -12115 ; [.4D01.0020.0002] # CUNEIFORM SIGN GISH TENU -12116 ; [.4D02.0020.0002] # CUNEIFORM SIGN GU -12117 ; [.4D03.0020.0002] # CUNEIFORM SIGN GU CROSSING GU -12118 ; [.4D04.0020.0002] # CUNEIFORM SIGN GU2 -12119 ; [.4D05.0020.0002] # CUNEIFORM SIGN GU2 TIMES KAK -1211A ; [.4D06.0020.0002] # CUNEIFORM SIGN GU2 TIMES KAK TIMES IGI GUNU -1211B ; [.4D07.0020.0002] # CUNEIFORM SIGN GU2 TIMES NUN -1211C ; [.4D08.0020.0002] # CUNEIFORM SIGN GU2 TIMES SAL PLUS TUG2 -1211D ; [.4D09.0020.0002] # CUNEIFORM SIGN GU2 GUNU -1211E ; [.4D0A.0020.0002] # CUNEIFORM SIGN GUD -1211F ; [.4D0B.0020.0002] # CUNEIFORM SIGN GUD TIMES A PLUS KUR -12120 ; [.4D0C.0020.0002] # CUNEIFORM SIGN GUD TIMES KUR -12121 ; [.4D0D.0020.0002] # CUNEIFORM SIGN GUD OVER GUD LUGAL -12122 ; [.4D0E.0020.0002] # CUNEIFORM SIGN GUL -12123 ; [.4D0F.0020.0002] # CUNEIFORM SIGN GUM -12124 ; [.4D10.0020.0002] # CUNEIFORM SIGN GUM TIMES SHE -12125 ; [.4D11.0020.0002] # CUNEIFORM SIGN GUR -12126 ; [.4D12.0020.0002] # CUNEIFORM SIGN GUR7 -12127 ; [.4D13.0020.0002] # CUNEIFORM SIGN GURUN -12128 ; [.4D14.0020.0002] # CUNEIFORM SIGN GURUSH -12129 ; [.4D15.0020.0002] # CUNEIFORM SIGN HA -1212A ; [.4D16.0020.0002] # CUNEIFORM SIGN HA TENU -1212B ; [.4D17.0020.0002] # CUNEIFORM SIGN HA GUNU -1212C ; [.4D18.0020.0002] # CUNEIFORM SIGN HAL -1212D ; [.4D19.0020.0002] # CUNEIFORM SIGN HI -1212E ; [.4D1A.0020.0002] # CUNEIFORM SIGN HI TIMES ASH -1212F ; [.4D1B.0020.0002] # CUNEIFORM SIGN HI TIMES ASH2 -12130 ; [.4D1C.0020.0002] # CUNEIFORM SIGN HI TIMES BAD -12131 ; [.4D1D.0020.0002] # CUNEIFORM SIGN HI TIMES DISH -12132 ; [.4D1E.0020.0002] # CUNEIFORM SIGN HI TIMES GAD -12133 ; [.4D1F.0020.0002] # CUNEIFORM SIGN HI TIMES KIN -12134 ; [.4D20.0020.0002] # CUNEIFORM SIGN HI TIMES NUN -12135 ; [.4D21.0020.0002] # CUNEIFORM SIGN HI TIMES SHE -12136 ; [.4D22.0020.0002] # CUNEIFORM SIGN HI TIMES U -12137 ; [.4D23.0020.0002] # CUNEIFORM SIGN HU -12138 ; [.4D24.0020.0002] # CUNEIFORM SIGN HUB2 -12139 ; [.4D25.0020.0002] # CUNEIFORM SIGN HUB2 TIMES AN -1213A ; [.4D26.0020.0002] # CUNEIFORM SIGN HUB2 TIMES HAL -1213B ; [.4D27.0020.0002] # CUNEIFORM SIGN HUB2 TIMES KASKAL -1213C ; [.4D28.0020.0002] # CUNEIFORM SIGN HUB2 TIMES LISH -1213D ; [.4D29.0020.0002] # CUNEIFORM SIGN HUB2 TIMES UD -1213E ; [.4D2A.0020.0002] # CUNEIFORM SIGN HUL2 -1213F ; [.4D2B.0020.0002] # CUNEIFORM SIGN I -12140 ; [.4D2C.0020.0002] # CUNEIFORM SIGN I A -12141 ; [.4D2D.0020.0002] # CUNEIFORM SIGN IB -12142 ; [.4D2E.0020.0002] # CUNEIFORM SIGN IDIM -12143 ; [.4D2F.0020.0002] # CUNEIFORM SIGN IDIM OVER IDIM BUR -12144 ; [.4D30.0020.0002] # CUNEIFORM SIGN IDIM OVER IDIM SQUARED -12145 ; [.4D31.0020.0002] # CUNEIFORM SIGN IG -12146 ; [.4D32.0020.0002] # CUNEIFORM SIGN IGI -12147 ; [.4D33.0020.0002] # CUNEIFORM SIGN IGI DIB -12148 ; [.4D34.0020.0002] # CUNEIFORM SIGN IGI RI -12149 ; [.4D35.0020.0002] # CUNEIFORM SIGN IGI OVER IGI SHIR OVER SHIR UD OVER UD -1214A ; [.4D36.0020.0002] # CUNEIFORM SIGN IGI GUNU -1214B ; [.4D37.0020.0002] # CUNEIFORM SIGN IL -1214C ; [.4D38.0020.0002] # CUNEIFORM SIGN IL TIMES GAN2 TENU -1214D ; [.4D39.0020.0002] # CUNEIFORM SIGN IL2 -1214E ; [.4D3A.0020.0002] # CUNEIFORM SIGN IM -1214F ; [.4D3B.0020.0002] # CUNEIFORM SIGN IM TIMES TAK4 -12150 ; [.4D3C.0020.0002] # CUNEIFORM SIGN IM CROSSING IM -12151 ; [.4D3D.0020.0002] # CUNEIFORM SIGN IM OPPOSING IM -12152 ; [.4D3E.0020.0002] # CUNEIFORM SIGN IM SQUARED -12153 ; [.4D3F.0020.0002] # CUNEIFORM SIGN IMIN -12154 ; [.4D40.0020.0002] # CUNEIFORM SIGN IN -12155 ; [.4D41.0020.0002] # CUNEIFORM SIGN IR -12156 ; [.4D42.0020.0002] # CUNEIFORM SIGN ISH -12157 ; [.4D43.0020.0002] # CUNEIFORM SIGN KA -12158 ; [.4D44.0020.0002] # CUNEIFORM SIGN KA TIMES A -12159 ; [.4D45.0020.0002] # CUNEIFORM SIGN KA TIMES AD -1215A ; [.4D46.0020.0002] # CUNEIFORM SIGN KA TIMES AD PLUS KU3 -1215B ; [.4D47.0020.0002] # CUNEIFORM SIGN KA TIMES ASH2 -1215C ; [.4D48.0020.0002] # CUNEIFORM SIGN KA TIMES BAD -1215D ; [.4D49.0020.0002] # CUNEIFORM SIGN KA TIMES BALAG -1215E ; [.4D4A.0020.0002] # CUNEIFORM SIGN KA TIMES BAR -1215F ; [.4D4B.0020.0002] # CUNEIFORM SIGN KA TIMES BI -12160 ; [.4D4C.0020.0002] # CUNEIFORM SIGN KA TIMES ERIN2 -12161 ; [.4D4D.0020.0002] # CUNEIFORM SIGN KA TIMES ESH2 -12162 ; [.4D4E.0020.0002] # CUNEIFORM SIGN KA TIMES GA -12163 ; [.4D4F.0020.0002] # CUNEIFORM SIGN KA TIMES GAL -12164 ; [.4D50.0020.0002] # CUNEIFORM SIGN KA TIMES GAN2 TENU -12165 ; [.4D51.0020.0002] # CUNEIFORM SIGN KA TIMES GAR -12166 ; [.4D52.0020.0002] # CUNEIFORM SIGN KA TIMES GAR PLUS SHA3 PLUS A -12167 ; [.4D53.0020.0002] # CUNEIFORM SIGN KA TIMES GI -12168 ; [.4D54.0020.0002] # CUNEIFORM SIGN KA TIMES GIR2 -12169 ; [.4D55.0020.0002] # CUNEIFORM SIGN KA TIMES GISH PLUS SAR -1216A ; [.4D56.0020.0002] # CUNEIFORM SIGN KA TIMES GISH CROSSING GISH -1216B ; [.4D57.0020.0002] # CUNEIFORM SIGN KA TIMES GU -1216C ; [.4D58.0020.0002] # CUNEIFORM SIGN KA TIMES GUR7 -1216D ; [.4D59.0020.0002] # CUNEIFORM SIGN KA TIMES IGI -1216E ; [.4D5A.0020.0002] # CUNEIFORM SIGN KA TIMES IM -1216F ; [.4D5B.0020.0002] # CUNEIFORM SIGN KA TIMES KAK -12170 ; [.4D5C.0020.0002] # CUNEIFORM SIGN KA TIMES KI -12171 ; [.4D5D.0020.0002] # CUNEIFORM SIGN KA TIMES KID -12172 ; [.4D5E.0020.0002] # CUNEIFORM SIGN KA TIMES LI -12173 ; [.4D5F.0020.0002] # CUNEIFORM SIGN KA TIMES LU -12174 ; [.4D60.0020.0002] # CUNEIFORM SIGN KA TIMES ME -12175 ; [.4D61.0020.0002] # CUNEIFORM SIGN KA TIMES ME PLUS DU -12176 ; [.4D62.0020.0002] # CUNEIFORM SIGN KA TIMES ME PLUS GI -12177 ; [.4D63.0020.0002] # CUNEIFORM SIGN KA TIMES ME PLUS TE -12178 ; [.4D64.0020.0002] # CUNEIFORM SIGN KA TIMES MI -12179 ; [.4D65.0020.0002] # CUNEIFORM SIGN KA TIMES MI PLUS NUNUZ -1217A ; [.4D66.0020.0002] # CUNEIFORM SIGN KA TIMES NE -1217B ; [.4D67.0020.0002] # CUNEIFORM SIGN KA TIMES NUN -1217C ; [.4D68.0020.0002] # CUNEIFORM SIGN KA TIMES PI -1217D ; [.4D69.0020.0002] # CUNEIFORM SIGN KA TIMES RU -1217E ; [.4D6A.0020.0002] # CUNEIFORM SIGN KA TIMES SA -1217F ; [.4D6B.0020.0002] # CUNEIFORM SIGN KA TIMES SAR -12180 ; [.4D6C.0020.0002] # CUNEIFORM SIGN KA TIMES SHA -12181 ; [.4D6D.0020.0002] # CUNEIFORM SIGN KA TIMES SHE -12182 ; [.4D6E.0020.0002] # CUNEIFORM SIGN KA TIMES SHID -12183 ; [.4D6F.0020.0002] # CUNEIFORM SIGN KA TIMES SHU -12184 ; [.4D70.0020.0002] # CUNEIFORM SIGN KA TIMES SIG -12185 ; [.4D71.0020.0002] # CUNEIFORM SIGN KA TIMES SUHUR -12186 ; [.4D72.0020.0002] # CUNEIFORM SIGN KA TIMES TAR -12187 ; [.4D73.0020.0002] # CUNEIFORM SIGN KA TIMES U -12188 ; [.4D74.0020.0002] # CUNEIFORM SIGN KA TIMES U2 -12189 ; [.4D75.0020.0002] # CUNEIFORM SIGN KA TIMES UD -1218A ; [.4D76.0020.0002] # CUNEIFORM SIGN KA TIMES UMUM TIMES PA -1218B ; [.4D77.0020.0002] # CUNEIFORM SIGN KA TIMES USH -1218C ; [.4D78.0020.0002] # CUNEIFORM SIGN KA TIMES ZI -1218D ; [.4D79.0020.0002] # CUNEIFORM SIGN KA2 -1218E ; [.4D7A.0020.0002] # CUNEIFORM SIGN KA2 CROSSING KA2 -1218F ; [.4D7B.0020.0002] # CUNEIFORM SIGN KAB -12190 ; [.4D7C.0020.0002] # CUNEIFORM SIGN KAD2 -12191 ; [.4D7D.0020.0002] # CUNEIFORM SIGN KAD3 -12192 ; [.4D7E.0020.0002] # CUNEIFORM SIGN KAD4 -12193 ; [.4D7F.0020.0002] # CUNEIFORM SIGN KAD5 -12194 ; [.4D80.0020.0002] # CUNEIFORM SIGN KAD5 OVER KAD5 -12195 ; [.4D81.0020.0002] # CUNEIFORM SIGN KAK -12196 ; [.4D82.0020.0002] # CUNEIFORM SIGN KAK TIMES IGI GUNU -12197 ; [.4D83.0020.0002] # CUNEIFORM SIGN KAL -12198 ; [.4D84.0020.0002] # CUNEIFORM SIGN KAL TIMES BAD -12199 ; [.4D85.0020.0002] # CUNEIFORM SIGN KAL CROSSING KAL -1219A ; [.4D86.0020.0002] # CUNEIFORM SIGN KAM2 -1219B ; [.4D87.0020.0002] # CUNEIFORM SIGN KAM4 -1219C ; [.4D88.0020.0002] # CUNEIFORM SIGN KASKAL -1219D ; [.4D89.0020.0002] # CUNEIFORM SIGN KASKAL LAGAB TIMES U OVER LAGAB TIMES U -1219E ; [.4D8A.0020.0002] # CUNEIFORM SIGN KASKAL OVER KASKAL LAGAB TIMES U OVER LAGAB TIMES U -1219F ; [.4D8B.0020.0002] # CUNEIFORM SIGN KESH2 -121A0 ; [.4D8C.0020.0002] # CUNEIFORM SIGN KI -121A1 ; [.4D8D.0020.0002] # CUNEIFORM SIGN KI TIMES BAD -121A2 ; [.4D8E.0020.0002] # CUNEIFORM SIGN KI TIMES U -121A3 ; [.4D8F.0020.0002] # CUNEIFORM SIGN KI TIMES UD -121A4 ; [.4D90.0020.0002] # CUNEIFORM SIGN KID -121A5 ; [.4D91.0020.0002] # CUNEIFORM SIGN KIN -121A6 ; [.4D92.0020.0002] # CUNEIFORM SIGN KISAL -121A7 ; [.4D93.0020.0002] # CUNEIFORM SIGN KISH -121A8 ; [.4D94.0020.0002] # CUNEIFORM SIGN KISIM5 -121A9 ; [.4D95.0020.0002] # CUNEIFORM SIGN KISIM5 OVER KISIM5 -121AA ; [.4D96.0020.0002] # CUNEIFORM SIGN KU -121AB ; [.4D97.0020.0002] # CUNEIFORM SIGN KU OVER HI TIMES ASH2 KU OVER HI TIMES ASH2 -121AC ; [.4D98.0020.0002] # CUNEIFORM SIGN KU3 -121AD ; [.4D99.0020.0002] # CUNEIFORM SIGN KU4 -121AE ; [.4D9A.0020.0002] # CUNEIFORM SIGN KU4 VARIANT FORM -121AF ; [.4D9B.0020.0002] # CUNEIFORM SIGN KU7 -121B0 ; [.4D9C.0020.0002] # CUNEIFORM SIGN KUL -121B1 ; [.4D9D.0020.0002] # CUNEIFORM SIGN KUL GUNU -121B2 ; [.4D9E.0020.0002] # CUNEIFORM SIGN KUN -121B3 ; [.4D9F.0020.0002] # CUNEIFORM SIGN KUR -121B4 ; [.4DA0.0020.0002] # CUNEIFORM SIGN KUR OPPOSING KUR -121B5 ; [.4DA1.0020.0002] # CUNEIFORM SIGN KUSHU2 -121B6 ; [.4DA2.0020.0002] # CUNEIFORM SIGN KWU318 -121B7 ; [.4DA3.0020.0002] # CUNEIFORM SIGN LA -121B8 ; [.4DA4.0020.0002] # CUNEIFORM SIGN LAGAB -121B9 ; [.4DA5.0020.0002] # CUNEIFORM SIGN LAGAB TIMES A -121BA ; [.4DA6.0020.0002] # CUNEIFORM SIGN LAGAB TIMES A PLUS DA PLUS HA -121BB ; [.4DA7.0020.0002] # CUNEIFORM SIGN LAGAB TIMES A PLUS GAR -121BC ; [.4DA8.0020.0002] # CUNEIFORM SIGN LAGAB TIMES A PLUS LAL -121BD ; [.4DA9.0020.0002] # CUNEIFORM SIGN LAGAB TIMES AL -121BE ; [.4DAA.0020.0002] # CUNEIFORM SIGN LAGAB TIMES AN -121BF ; [.4DAB.0020.0002] # CUNEIFORM SIGN LAGAB TIMES ASH ZIDA TENU -121C0 ; [.4DAC.0020.0002] # CUNEIFORM SIGN LAGAB TIMES BAD -121C1 ; [.4DAD.0020.0002] # CUNEIFORM SIGN LAGAB TIMES BI -121C2 ; [.4DAE.0020.0002] # CUNEIFORM SIGN LAGAB TIMES DAR -121C3 ; [.4DAF.0020.0002] # CUNEIFORM SIGN LAGAB TIMES EN -121C4 ; [.4DB0.0020.0002] # CUNEIFORM SIGN LAGAB TIMES GA -121C5 ; [.4DB1.0020.0002] # CUNEIFORM SIGN LAGAB TIMES GAR -121C6 ; [.4DB2.0020.0002] # CUNEIFORM SIGN LAGAB TIMES GUD -121C7 ; [.4DB3.0020.0002] # CUNEIFORM SIGN LAGAB TIMES GUD PLUS GUD -121C8 ; [.4DB4.0020.0002] # CUNEIFORM SIGN LAGAB TIMES HA -121C9 ; [.4DB5.0020.0002] # CUNEIFORM SIGN LAGAB TIMES HAL -121CA ; [.4DB6.0020.0002] # CUNEIFORM SIGN LAGAB TIMES HI TIMES NUN -121CB ; [.4DB7.0020.0002] # CUNEIFORM SIGN LAGAB TIMES IGI GUNU -121CC ; [.4DB8.0020.0002] # CUNEIFORM SIGN LAGAB TIMES IM -121CD ; [.4DB9.0020.0002] # CUNEIFORM SIGN LAGAB TIMES IM PLUS HA -121CE ; [.4DBA.0020.0002] # CUNEIFORM SIGN LAGAB TIMES IM PLUS LU -121CF ; [.4DBB.0020.0002] # CUNEIFORM SIGN LAGAB TIMES KI -121D0 ; [.4DBC.0020.0002] # CUNEIFORM SIGN LAGAB TIMES KIN -121D1 ; [.4DBD.0020.0002] # CUNEIFORM SIGN LAGAB TIMES KU3 -121D2 ; [.4DBE.0020.0002] # CUNEIFORM SIGN LAGAB TIMES KUL -121D3 ; [.4DBF.0020.0002] # CUNEIFORM SIGN LAGAB TIMES KUL PLUS HI PLUS A -121D4 ; [.4DC0.0020.0002] # CUNEIFORM SIGN LAGAB TIMES LAGAB -121D5 ; [.4DC1.0020.0002] # CUNEIFORM SIGN LAGAB TIMES LISH -121D6 ; [.4DC2.0020.0002] # CUNEIFORM SIGN LAGAB TIMES LU -121D7 ; [.4DC3.0020.0002] # CUNEIFORM SIGN LAGAB TIMES LUL -121D8 ; [.4DC4.0020.0002] # CUNEIFORM SIGN LAGAB TIMES ME -121D9 ; [.4DC5.0020.0002] # CUNEIFORM SIGN LAGAB TIMES ME PLUS EN -121DA ; [.4DC6.0020.0002] # CUNEIFORM SIGN LAGAB TIMES MUSH -121DB ; [.4DC7.0020.0002] # CUNEIFORM SIGN LAGAB TIMES NE -121DC ; [.4DC8.0020.0002] # CUNEIFORM SIGN LAGAB TIMES SHE PLUS SUM -121DD ; [.4DC9.0020.0002] # CUNEIFORM SIGN LAGAB TIMES SHITA PLUS GISH PLUS ERIN2 -121DE ; [.4DCA.0020.0002] # CUNEIFORM SIGN LAGAB TIMES SHITA PLUS GISH TENU -121DF ; [.4DCB.0020.0002] # CUNEIFORM SIGN LAGAB TIMES SHU2 -121E0 ; [.4DCC.0020.0002] # CUNEIFORM SIGN LAGAB TIMES SHU2 PLUS SHU2 -121E1 ; [.4DCD.0020.0002] # CUNEIFORM SIGN LAGAB TIMES SUM -121E2 ; [.4DCE.0020.0002] # CUNEIFORM SIGN LAGAB TIMES TAG -121E3 ; [.4DCF.0020.0002] # CUNEIFORM SIGN LAGAB TIMES TAK4 -121E4 ; [.4DD0.0020.0002] # CUNEIFORM SIGN LAGAB TIMES TE PLUS A PLUS SU PLUS NA -121E5 ; [.4DD1.0020.0002] # CUNEIFORM SIGN LAGAB TIMES U -121E6 ; [.4DD2.0020.0002] # CUNEIFORM SIGN LAGAB TIMES U PLUS A -121E7 ; [.4DD3.0020.0002] # CUNEIFORM SIGN LAGAB TIMES U PLUS U PLUS U -121E8 ; [.4DD4.0020.0002] # CUNEIFORM SIGN LAGAB TIMES U2 PLUS ASH -121E9 ; [.4DD5.0020.0002] # CUNEIFORM SIGN LAGAB TIMES UD -121EA ; [.4DD6.0020.0002] # CUNEIFORM SIGN LAGAB TIMES USH -121EB ; [.4DD7.0020.0002] # CUNEIFORM SIGN LAGAB SQUARED -121EC ; [.4DD8.0020.0002] # CUNEIFORM SIGN LAGAR -121ED ; [.4DD9.0020.0002] # CUNEIFORM SIGN LAGAR TIMES SHE -121EE ; [.4DDA.0020.0002] # CUNEIFORM SIGN LAGAR TIMES SHE PLUS SUM -121EF ; [.4DDB.0020.0002] # CUNEIFORM SIGN LAGAR GUNU -121F0 ; [.4DDC.0020.0002] # CUNEIFORM SIGN LAGAR GUNU OVER LAGAR GUNU SHE -121F1 ; [.4DDD.0020.0002] # CUNEIFORM SIGN LAHSHU -121F2 ; [.4DDE.0020.0002] # CUNEIFORM SIGN LAL -121F3 ; [.4DDF.0020.0002] # CUNEIFORM SIGN LAL TIMES LAL -121F4 ; [.4DE0.0020.0002] # CUNEIFORM SIGN LAM -121F5 ; [.4DE1.0020.0002] # CUNEIFORM SIGN LAM TIMES KUR -121F6 ; [.4DE2.0020.0002] # CUNEIFORM SIGN LAM TIMES KUR PLUS RU -121F7 ; [.4DE3.0020.0002] # CUNEIFORM SIGN LI -121F8 ; [.4DE4.0020.0002] # CUNEIFORM SIGN LIL -121F9 ; [.4DE5.0020.0002] # CUNEIFORM SIGN LIMMU2 -121FA ; [.4DE6.0020.0002] # CUNEIFORM SIGN LISH -121FB ; [.4DE7.0020.0002] # CUNEIFORM SIGN LU -121FC ; [.4DE8.0020.0002] # CUNEIFORM SIGN LU TIMES BAD -121FD ; [.4DE9.0020.0002] # CUNEIFORM SIGN LU2 -121FE ; [.4DEA.0020.0002] # CUNEIFORM SIGN LU2 TIMES AL -121FF ; [.4DEB.0020.0002] # CUNEIFORM SIGN LU2 TIMES BAD -12200 ; [.4DEC.0020.0002] # CUNEIFORM SIGN LU2 TIMES ESH2 -12201 ; [.4DED.0020.0002] # CUNEIFORM SIGN LU2 TIMES ESH2 TENU -12202 ; [.4DEE.0020.0002] # CUNEIFORM SIGN LU2 TIMES GAN2 TENU -12203 ; [.4DEF.0020.0002] # CUNEIFORM SIGN LU2 TIMES HI TIMES BAD -12204 ; [.4DF0.0020.0002] # CUNEIFORM SIGN LU2 TIMES IM -12205 ; [.4DF1.0020.0002] # CUNEIFORM SIGN LU2 TIMES KAD2 -12206 ; [.4DF2.0020.0002] # CUNEIFORM SIGN LU2 TIMES KAD3 -12207 ; [.4DF3.0020.0002] # CUNEIFORM SIGN LU2 TIMES KAD3 PLUS ASH -12208 ; [.4DF4.0020.0002] # CUNEIFORM SIGN LU2 TIMES KI -12209 ; [.4DF5.0020.0002] # CUNEIFORM SIGN LU2 TIMES LA PLUS ASH -1220A ; [.4DF6.0020.0002] # CUNEIFORM SIGN LU2 TIMES LAGAB -1220B ; [.4DF7.0020.0002] # CUNEIFORM SIGN LU2 TIMES ME PLUS EN -1220C ; [.4DF8.0020.0002] # CUNEIFORM SIGN LU2 TIMES NE -1220D ; [.4DF9.0020.0002] # CUNEIFORM SIGN LU2 TIMES NU -1220E ; [.4DFA.0020.0002] # CUNEIFORM SIGN LU2 TIMES SI PLUS ASH -1220F ; [.4DFB.0020.0002] # CUNEIFORM SIGN LU2 TIMES SIK2 PLUS BU -12210 ; [.4DFC.0020.0002] # CUNEIFORM SIGN LU2 TIMES TUG2 -12211 ; [.4DFD.0020.0002] # CUNEIFORM SIGN LU2 TENU -12212 ; [.4DFE.0020.0002] # CUNEIFORM SIGN LU2 CROSSING LU2 -12213 ; [.4DFF.0020.0002] # CUNEIFORM SIGN LU2 OPPOSING LU2 -12214 ; [.4E00.0020.0002] # CUNEIFORM SIGN LU2 SQUARED -12215 ; [.4E01.0020.0002] # CUNEIFORM SIGN LU2 SHESHIG -12216 ; [.4E02.0020.0002] # CUNEIFORM SIGN LU3 -12217 ; [.4E03.0020.0002] # CUNEIFORM SIGN LUGAL -12218 ; [.4E04.0020.0002] # CUNEIFORM SIGN LUGAL OVER LUGAL -12219 ; [.4E05.0020.0002] # CUNEIFORM SIGN LUGAL OPPOSING LUGAL -1221A ; [.4E06.0020.0002] # CUNEIFORM SIGN LUGAL SHESHIG -1221B ; [.4E07.0020.0002] # CUNEIFORM SIGN LUH -1221C ; [.4E08.0020.0002] # CUNEIFORM SIGN LUL -1221D ; [.4E09.0020.0002] # CUNEIFORM SIGN LUM -1221E ; [.4E0A.0020.0002] # CUNEIFORM SIGN LUM OVER LUM -1221F ; [.4E0B.0020.0002] # CUNEIFORM SIGN LUM OVER LUM GAR OVER GAR -12220 ; [.4E0C.0020.0002] # CUNEIFORM SIGN MA -12221 ; [.4E0D.0020.0002] # CUNEIFORM SIGN MA TIMES TAK4 -12222 ; [.4E0E.0020.0002] # CUNEIFORM SIGN MA GUNU -12223 ; [.4E0F.0020.0002] # CUNEIFORM SIGN MA2 -12224 ; [.4E10.0020.0002] # CUNEIFORM SIGN MAH -12225 ; [.4E11.0020.0002] # CUNEIFORM SIGN MAR -12226 ; [.4E12.0020.0002] # CUNEIFORM SIGN MASH -12227 ; [.4E13.0020.0002] # CUNEIFORM SIGN MASH2 -12228 ; [.4E14.0020.0002] # CUNEIFORM SIGN ME -12229 ; [.4E15.0020.0002] # CUNEIFORM SIGN MES -1222A ; [.4E16.0020.0002] # CUNEIFORM SIGN MI -1222B ; [.4E17.0020.0002] # CUNEIFORM SIGN MIN -1222C ; [.4E18.0020.0002] # CUNEIFORM SIGN MU -1222D ; [.4E19.0020.0002] # CUNEIFORM SIGN MU OVER MU -1222E ; [.4E1A.0020.0002] # CUNEIFORM SIGN MUG -1222F ; [.4E1B.0020.0002] # CUNEIFORM SIGN MUG GUNU -12230 ; [.4E1C.0020.0002] # CUNEIFORM SIGN MUNSUB -12231 ; [.4E1D.0020.0002] # CUNEIFORM SIGN MURGU2 -12232 ; [.4E1E.0020.0002] # CUNEIFORM SIGN MUSH -12233 ; [.4E1F.0020.0002] # CUNEIFORM SIGN MUSH TIMES A -12234 ; [.4E20.0020.0002] # CUNEIFORM SIGN MUSH TIMES KUR -12235 ; [.4E21.0020.0002] # CUNEIFORM SIGN MUSH TIMES ZA -12236 ; [.4E22.0020.0002] # CUNEIFORM SIGN MUSH OVER MUSH -12237 ; [.4E23.0020.0002] # CUNEIFORM SIGN MUSH OVER MUSH TIMES A PLUS NA -12238 ; [.4E24.0020.0002] # CUNEIFORM SIGN MUSH CROSSING MUSH -12239 ; [.4E25.0020.0002] # CUNEIFORM SIGN MUSH3 -1223A ; [.4E26.0020.0002] # CUNEIFORM SIGN MUSH3 TIMES A -1223B ; [.4E27.0020.0002] # CUNEIFORM SIGN MUSH3 TIMES A PLUS DI -1223C ; [.4E28.0020.0002] # CUNEIFORM SIGN MUSH3 TIMES DI -1223D ; [.4E29.0020.0002] # CUNEIFORM SIGN MUSH3 GUNU -1223E ; [.4E2A.0020.0002] # CUNEIFORM SIGN NA -1223F ; [.4E2B.0020.0002] # CUNEIFORM SIGN NA2 -12240 ; [.4E2C.0020.0002] # CUNEIFORM SIGN NAGA -12241 ; [.4E2D.0020.0002] # CUNEIFORM SIGN NAGA INVERTED -12242 ; [.4E2E.0020.0002] # CUNEIFORM SIGN NAGA TIMES SHU TENU -12243 ; [.4E2F.0020.0002] # CUNEIFORM SIGN NAGA OPPOSING NAGA -12244 ; [.4E30.0020.0002] # CUNEIFORM SIGN NAGAR -12245 ; [.4E31.0020.0002] # CUNEIFORM SIGN NAM NUTILLU -12246 ; [.4E32.0020.0002] # CUNEIFORM SIGN NAM -12247 ; [.4E33.0020.0002] # CUNEIFORM SIGN NAM2 -12248 ; [.4E34.0020.0002] # CUNEIFORM SIGN NE -12249 ; [.4E35.0020.0002] # CUNEIFORM SIGN NE TIMES A -1224A ; [.4E36.0020.0002] # CUNEIFORM SIGN NE TIMES UD -1224B ; [.4E37.0020.0002] # CUNEIFORM SIGN NE SHESHIG -1224C ; [.4E38.0020.0002] # CUNEIFORM SIGN NI -1224D ; [.4E39.0020.0002] # CUNEIFORM SIGN NI TIMES E -1224E ; [.4E3A.0020.0002] # CUNEIFORM SIGN NI2 -1224F ; [.4E3B.0020.0002] # CUNEIFORM SIGN NIM -12250 ; [.4E3C.0020.0002] # CUNEIFORM SIGN NIM TIMES GAN2 TENU -12251 ; [.4E3D.0020.0002] # CUNEIFORM SIGN NIM TIMES GAR PLUS GAN2 TENU -12252 ; [.4E3E.0020.0002] # CUNEIFORM SIGN NINDA2 -12253 ; [.4E3F.0020.0002] # CUNEIFORM SIGN NINDA2 TIMES AN -12254 ; [.4E40.0020.0002] # CUNEIFORM SIGN NINDA2 TIMES ASH -12255 ; [.4E41.0020.0002] # CUNEIFORM SIGN NINDA2 TIMES ASH PLUS ASH -12256 ; [.4E42.0020.0002] # CUNEIFORM SIGN NINDA2 TIMES GUD -12257 ; [.4E43.0020.0002] # CUNEIFORM SIGN NINDA2 TIMES ME PLUS GAN2 TENU -12258 ; [.4E44.0020.0002] # CUNEIFORM SIGN NINDA2 TIMES NE -12259 ; [.4E45.0020.0002] # CUNEIFORM SIGN NINDA2 TIMES NUN -1225A ; [.4E46.0020.0002] # CUNEIFORM SIGN NINDA2 TIMES SHE -1225B ; [.4E47.0020.0002] # CUNEIFORM SIGN NINDA2 TIMES SHE PLUS A AN -1225C ; [.4E48.0020.0002] # CUNEIFORM SIGN NINDA2 TIMES SHE PLUS ASH -1225D ; [.4E49.0020.0002] # CUNEIFORM SIGN NINDA2 TIMES SHE PLUS ASH PLUS ASH -1225E ; [.4E4A.0020.0002] # CUNEIFORM SIGN NINDA2 TIMES U2 PLUS ASH -1225F ; [.4E4B.0020.0002] # CUNEIFORM SIGN NINDA2 TIMES USH -12260 ; [.4E4C.0020.0002] # CUNEIFORM SIGN NISAG -12261 ; [.4E4D.0020.0002] # CUNEIFORM SIGN NU -12262 ; [.4E4E.0020.0002] # CUNEIFORM SIGN NU11 -122D4 ; [.4E4F.0020.0002] # CUNEIFORM SIGN SHIR TENU -122D5 ; [.4E50.0020.0002] # CUNEIFORM SIGN SHIR OVER SHIR BUR OVER BUR -12263 ; [.4E51.0020.0002] # CUNEIFORM SIGN NUN -12264 ; [.4E52.0020.0002] # CUNEIFORM SIGN NUN LAGAR TIMES GAR -12265 ; [.4E53.0020.0002] # CUNEIFORM SIGN NUN LAGAR TIMES MASH -12266 ; [.4E54.0020.0002] # CUNEIFORM SIGN NUN LAGAR TIMES SAL -12267 ; [.4E55.0020.0002] # CUNEIFORM SIGN NUN LAGAR TIMES SAL OVER NUN LAGAR TIMES SAL -12268 ; [.4E56.0020.0002] # CUNEIFORM SIGN NUN LAGAR TIMES USH -12269 ; [.4E57.0020.0002] # CUNEIFORM SIGN NUN TENU -1226A ; [.4E58.0020.0002] # CUNEIFORM SIGN NUN OVER NUN -1226B ; [.4E59.0020.0002] # CUNEIFORM SIGN NUN CROSSING NUN -1226C ; [.4E5A.0020.0002] # CUNEIFORM SIGN NUN CROSSING NUN LAGAR OVER LAGAR -1226D ; [.4E5B.0020.0002] # CUNEIFORM SIGN NUNUZ -1226E ; [.4E5C.0020.0002] # CUNEIFORM SIGN NUNUZ AB2 TIMES ASHGAB -1226F ; [.4E5D.0020.0002] # CUNEIFORM SIGN NUNUZ AB2 TIMES BI -12270 ; [.4E5E.0020.0002] # CUNEIFORM SIGN NUNUZ AB2 TIMES DUG -12271 ; [.4E5F.0020.0002] # CUNEIFORM SIGN NUNUZ AB2 TIMES GUD -12272 ; [.4E60.0020.0002] # CUNEIFORM SIGN NUNUZ AB2 TIMES IGI GUNU -12273 ; [.4E61.0020.0002] # CUNEIFORM SIGN NUNUZ AB2 TIMES KAD3 -12274 ; [.4E62.0020.0002] # CUNEIFORM SIGN NUNUZ AB2 TIMES LA -12275 ; [.4E63.0020.0002] # CUNEIFORM SIGN NUNUZ AB2 TIMES NE -12276 ; [.4E64.0020.0002] # CUNEIFORM SIGN NUNUZ AB2 TIMES SILA3 -12277 ; [.4E65.0020.0002] # CUNEIFORM SIGN NUNUZ AB2 TIMES U2 -12278 ; [.4E66.0020.0002] # CUNEIFORM SIGN NUNUZ KISIM5 TIMES BI -12279 ; [.4E67.0020.0002] # CUNEIFORM SIGN NUNUZ KISIM5 TIMES BI U -1227A ; [.4E68.0020.0002] # CUNEIFORM SIGN PA -1227B ; [.4E69.0020.0002] # CUNEIFORM SIGN PAD -1227C ; [.4E6A.0020.0002] # CUNEIFORM SIGN PAN -1227D ; [.4E6B.0020.0002] # CUNEIFORM SIGN PAP -1227E ; [.4E6C.0020.0002] # CUNEIFORM SIGN PESH2 -1227F ; [.4E6D.0020.0002] # CUNEIFORM SIGN PI -12280 ; [.4E6E.0020.0002] # CUNEIFORM SIGN PI TIMES A -12281 ; [.4E6F.0020.0002] # CUNEIFORM SIGN PI TIMES AB -12282 ; [.4E70.0020.0002] # CUNEIFORM SIGN PI TIMES BI -12283 ; [.4E71.0020.0002] # CUNEIFORM SIGN PI TIMES BU -12284 ; [.4E72.0020.0002] # CUNEIFORM SIGN PI TIMES E -12285 ; [.4E73.0020.0002] # CUNEIFORM SIGN PI TIMES I -12286 ; [.4E74.0020.0002] # CUNEIFORM SIGN PI TIMES IB -12287 ; [.4E75.0020.0002] # CUNEIFORM SIGN PI TIMES U -12288 ; [.4E76.0020.0002] # CUNEIFORM SIGN PI TIMES U2 -12289 ; [.4E77.0020.0002] # CUNEIFORM SIGN PI CROSSING PI -1228A ; [.4E78.0020.0002] # CUNEIFORM SIGN PIRIG -1228B ; [.4E79.0020.0002] # CUNEIFORM SIGN PIRIG TIMES KAL -1228C ; [.4E7A.0020.0002] # CUNEIFORM SIGN PIRIG TIMES UD -1228D ; [.4E7B.0020.0002] # CUNEIFORM SIGN PIRIG TIMES ZA -1228E ; [.4E7C.0020.0002] # CUNEIFORM SIGN PIRIG OPPOSING PIRIG -1228F ; [.4E7D.0020.0002] # CUNEIFORM SIGN RA -12290 ; [.4E7E.0020.0002] # CUNEIFORM SIGN RAB -12291 ; [.4E7F.0020.0002] # CUNEIFORM SIGN RI -12292 ; [.4E80.0020.0002] # CUNEIFORM SIGN RU -12293 ; [.4E81.0020.0002] # CUNEIFORM SIGN SA -12294 ; [.4E82.0020.0002] # CUNEIFORM SIGN SAG NUTILLU -12295 ; [.4E83.0020.0002] # CUNEIFORM SIGN SAG -12296 ; [.4E84.0020.0002] # CUNEIFORM SIGN SAG TIMES A -12297 ; [.4E85.0020.0002] # CUNEIFORM SIGN SAG TIMES DU -12298 ; [.4E86.0020.0002] # CUNEIFORM SIGN SAG TIMES DUB -12299 ; [.4E87.0020.0002] # CUNEIFORM SIGN SAG TIMES HA -1229A ; [.4E88.0020.0002] # CUNEIFORM SIGN SAG TIMES KAK -1229B ; [.4E89.0020.0002] # CUNEIFORM SIGN SAG TIMES KUR -1229C ; [.4E8A.0020.0002] # CUNEIFORM SIGN SAG TIMES LUM -1229D ; [.4E8B.0020.0002] # CUNEIFORM SIGN SAG TIMES MI -1229E ; [.4E8C.0020.0002] # CUNEIFORM SIGN SAG TIMES NUN -1229F ; [.4E8D.0020.0002] # CUNEIFORM SIGN SAG TIMES SAL -122A0 ; [.4E8E.0020.0002] # CUNEIFORM SIGN SAG TIMES SHID -122A1 ; [.4E8F.0020.0002] # CUNEIFORM SIGN SAG TIMES TAB -122A2 ; [.4E90.0020.0002] # CUNEIFORM SIGN SAG TIMES U2 -122A3 ; [.4E91.0020.0002] # CUNEIFORM SIGN SAG TIMES UB -122A4 ; [.4E92.0020.0002] # CUNEIFORM SIGN SAG TIMES UM -122A5 ; [.4E93.0020.0002] # CUNEIFORM SIGN SAG TIMES UR -122A6 ; [.4E94.0020.0002] # CUNEIFORM SIGN SAG TIMES USH -122A7 ; [.4E95.0020.0002] # CUNEIFORM SIGN SAG OVER SAG -122A8 ; [.4E96.0020.0002] # CUNEIFORM SIGN SAG GUNU -122A9 ; [.4E97.0020.0002] # CUNEIFORM SIGN SAL -122AA ; [.4E98.0020.0002] # CUNEIFORM SIGN SAL LAGAB TIMES ASH2 -122AB ; [.4E99.0020.0002] # CUNEIFORM SIGN SANGA2 -122AC ; [.4E9A.0020.0002] # CUNEIFORM SIGN SAR -122AD ; [.4E9B.0020.0002] # CUNEIFORM SIGN SHA -122AE ; [.4E9C.0020.0002] # CUNEIFORM SIGN SHA3 -122AF ; [.4E9D.0020.0002] # CUNEIFORM SIGN SHA3 TIMES A -122B0 ; [.4E9E.0020.0002] # CUNEIFORM SIGN SHA3 TIMES BAD -122B1 ; [.4E9F.0020.0002] # CUNEIFORM SIGN SHA3 TIMES GISH -122B2 ; [.4EA0.0020.0002] # CUNEIFORM SIGN SHA3 TIMES NE -122B3 ; [.4EA1.0020.0002] # CUNEIFORM SIGN SHA3 TIMES SHU2 -122B4 ; [.4EA2.0020.0002] # CUNEIFORM SIGN SHA3 TIMES TUR -122B5 ; [.4EA3.0020.0002] # CUNEIFORM SIGN SHA3 TIMES U -122B6 ; [.4EA4.0020.0002] # CUNEIFORM SIGN SHA3 TIMES U PLUS A -122B7 ; [.4EA5.0020.0002] # CUNEIFORM SIGN SHA6 -122B8 ; [.4EA6.0020.0002] # CUNEIFORM SIGN SHAB6 -122B9 ; [.4EA7.0020.0002] # CUNEIFORM SIGN SHAR2 -122BA ; [.4EA8.0020.0002] # CUNEIFORM SIGN SHE -122BB ; [.4EA9.0020.0002] # CUNEIFORM SIGN SHE HU -122BC ; [.4EAA.0020.0002] # CUNEIFORM SIGN SHE OVER SHE GAD OVER GAD GAR OVER GAR -122BD ; [.4EAB.0020.0002] # CUNEIFORM SIGN SHE OVER SHE TAB OVER TAB GAR OVER GAR -122BE ; [.4EAC.0020.0002] # CUNEIFORM SIGN SHEG9 -122BF ; [.4EAD.0020.0002] # CUNEIFORM SIGN SHEN -122C0 ; [.4EAE.0020.0002] # CUNEIFORM SIGN SHESH -122C1 ; [.4EAF.0020.0002] # CUNEIFORM SIGN SHESH2 -122C2 ; [.4EB0.0020.0002] # CUNEIFORM SIGN SHESHLAM -122C3 ; [.4EB1.0020.0002] # CUNEIFORM SIGN SHID -122C4 ; [.4EB2.0020.0002] # CUNEIFORM SIGN SHID TIMES A -122C5 ; [.4EB3.0020.0002] # CUNEIFORM SIGN SHID TIMES IM -122C6 ; [.4EB4.0020.0002] # CUNEIFORM SIGN SHIM -122C7 ; [.4EB5.0020.0002] # CUNEIFORM SIGN SHIM TIMES A -122C8 ; [.4EB6.0020.0002] # CUNEIFORM SIGN SHIM TIMES BAL -122C9 ; [.4EB7.0020.0002] # CUNEIFORM SIGN SHIM TIMES BULUG -122CA ; [.4EB8.0020.0002] # CUNEIFORM SIGN SHIM TIMES DIN -122CB ; [.4EB9.0020.0002] # CUNEIFORM SIGN SHIM TIMES GAR -122CC ; [.4EBA.0020.0002] # CUNEIFORM SIGN SHIM TIMES IGI -122CD ; [.4EBB.0020.0002] # CUNEIFORM SIGN SHIM TIMES IGI GUNU -122CE ; [.4EBC.0020.0002] # CUNEIFORM SIGN SHIM TIMES KUSHU2 -122CF ; [.4EBD.0020.0002] # CUNEIFORM SIGN SHIM TIMES LUL -122D0 ; [.4EBE.0020.0002] # CUNEIFORM SIGN SHIM TIMES MUG -122D1 ; [.4EBF.0020.0002] # CUNEIFORM SIGN SHIM TIMES SAL -122D2 ; [.4EC0.0020.0002] # CUNEIFORM SIGN SHINIG -122D3 ; [.4EC1.0020.0002] # CUNEIFORM SIGN SHIR -122D6 ; [.4EC2.0020.0002] # CUNEIFORM SIGN SHITA -122D7 ; [.4EC3.0020.0002] # CUNEIFORM SIGN SHU -122D8 ; [.4EC4.0020.0002] # CUNEIFORM SIGN SHU OVER INVERTED SHU -122D9 ; [.4EC5.0020.0002] # CUNEIFORM SIGN SHU2 -122DA ; [.4EC6.0020.0002] # CUNEIFORM SIGN SHUBUR -122DB ; [.4EC7.0020.0002] # CUNEIFORM SIGN SI -122DC ; [.4EC8.0020.0002] # CUNEIFORM SIGN SI GUNU -122DD ; [.4EC9.0020.0002] # CUNEIFORM SIGN SIG -122DE ; [.4ECA.0020.0002] # CUNEIFORM SIGN SIG4 -122DF ; [.4ECB.0020.0002] # CUNEIFORM SIGN SIG4 OVER SIG4 SHU2 -122E0 ; [.4ECC.0020.0002] # CUNEIFORM SIGN SIK2 -122E1 ; [.4ECD.0020.0002] # CUNEIFORM SIGN SILA3 -122E2 ; [.4ECE.0020.0002] # CUNEIFORM SIGN SU -122E3 ; [.4ECF.0020.0002] # CUNEIFORM SIGN SU OVER SU -122E4 ; [.4ED0.0020.0002] # CUNEIFORM SIGN SUD -122E5 ; [.4ED1.0020.0002] # CUNEIFORM SIGN SUD2 -122E6 ; [.4ED2.0020.0002] # CUNEIFORM SIGN SUHUR -122E7 ; [.4ED3.0020.0002] # CUNEIFORM SIGN SUM -122E8 ; [.4ED4.0020.0002] # CUNEIFORM SIGN SUMASH -122E9 ; [.4ED5.0020.0002] # CUNEIFORM SIGN SUR -122EA ; [.4ED6.0020.0002] # CUNEIFORM SIGN SUR9 -122EB ; [.4ED7.0020.0002] # CUNEIFORM SIGN TA -122EC ; [.4ED8.0020.0002] # CUNEIFORM SIGN TA ASTERISK -122ED ; [.4ED9.0020.0002] # CUNEIFORM SIGN TA TIMES HI -122EE ; [.4EDA.0020.0002] # CUNEIFORM SIGN TA TIMES MI -122EF ; [.4EDB.0020.0002] # CUNEIFORM SIGN TA GUNU -122F0 ; [.4EDC.0020.0002] # CUNEIFORM SIGN TAB -122F1 ; [.4EDD.0020.0002] # CUNEIFORM SIGN TAB OVER TAB NI OVER NI DISH OVER DISH -122F2 ; [.4EDE.0020.0002] # CUNEIFORM SIGN TAB SQUARED -122F3 ; [.4EDF.0020.0002] # CUNEIFORM SIGN TAG -122F4 ; [.4EE0.0020.0002] # CUNEIFORM SIGN TAG TIMES BI -122F5 ; [.4EE1.0020.0002] # CUNEIFORM SIGN TAG TIMES GUD -122F6 ; [.4EE2.0020.0002] # CUNEIFORM SIGN TAG TIMES SHE -122F7 ; [.4EE3.0020.0002] # CUNEIFORM SIGN TAG TIMES SHU -122F8 ; [.4EE4.0020.0002] # CUNEIFORM SIGN TAG TIMES TUG2 -122F9 ; [.4EE5.0020.0002] # CUNEIFORM SIGN TAG TIMES UD -122FA ; [.4EE6.0020.0002] # CUNEIFORM SIGN TAK4 -122FB ; [.4EE7.0020.0002] # CUNEIFORM SIGN TAR -122FC ; [.4EE8.0020.0002] # CUNEIFORM SIGN TE -122FD ; [.4EE9.0020.0002] # CUNEIFORM SIGN TE GUNU -122FE ; [.4EEA.0020.0002] # CUNEIFORM SIGN TI -122FF ; [.4EEB.0020.0002] # CUNEIFORM SIGN TI TENU -12300 ; [.4EEC.0020.0002] # CUNEIFORM SIGN TIL -12301 ; [.4EED.0020.0002] # CUNEIFORM SIGN TIR -12302 ; [.4EEE.0020.0002] # CUNEIFORM SIGN TIR TIMES TAK4 -12303 ; [.4EEF.0020.0002] # CUNEIFORM SIGN TIR OVER TIR -12304 ; [.4EF0.0020.0002] # CUNEIFORM SIGN TIR OVER TIR GAD OVER GAD GAR OVER GAR -12305 ; [.4EF1.0020.0002] # CUNEIFORM SIGN TU -12306 ; [.4EF2.0020.0002] # CUNEIFORM SIGN TUG2 -12307 ; [.4EF3.0020.0002] # CUNEIFORM SIGN TUK -12308 ; [.4EF4.0020.0002] # CUNEIFORM SIGN TUM -12309 ; [.4EF5.0020.0002] # CUNEIFORM SIGN TUR -1230A ; [.4EF6.0020.0002] # CUNEIFORM SIGN TUR OVER TUR ZA OVER ZA -1230B ; [.4EF7.0020.0002] # CUNEIFORM SIGN U -1230C ; [.4EF8.0020.0002] # CUNEIFORM SIGN U GUD -1230D ; [.4EF9.0020.0002] # CUNEIFORM SIGN U U U -1230E ; [.4EFA.0020.0002] # CUNEIFORM SIGN U OVER U PA OVER PA GAR OVER GAR -1230F ; [.4EFB.0020.0002] # CUNEIFORM SIGN U OVER U SUR OVER SUR -12310 ; [.4EFC.0020.0002] # CUNEIFORM SIGN U OVER U U REVERSED OVER U REVERSED -12311 ; [.4EFD.0020.0002] # CUNEIFORM SIGN U2 -12312 ; [.4EFE.0020.0002] # CUNEIFORM SIGN UB -12313 ; [.4EFF.0020.0002] # CUNEIFORM SIGN UD -12314 ; [.4F00.0020.0002] # CUNEIFORM SIGN UD KUSHU2 -12315 ; [.4F01.0020.0002] # CUNEIFORM SIGN UD TIMES BAD -12316 ; [.4F02.0020.0002] # CUNEIFORM SIGN UD TIMES MI -12317 ; [.4F03.0020.0002] # CUNEIFORM SIGN UD TIMES U PLUS U PLUS U -12318 ; [.4F04.0020.0002] # CUNEIFORM SIGN UD TIMES U PLUS U PLUS U GUNU -12319 ; [.4F05.0020.0002] # CUNEIFORM SIGN UD GUNU -1231A ; [.4F06.0020.0002] # CUNEIFORM SIGN UD SHESHIG -1231B ; [.4F07.0020.0002] # CUNEIFORM SIGN UD SHESHIG TIMES BAD -1231C ; [.4F08.0020.0002] # CUNEIFORM SIGN UDUG -1231D ; [.4F09.0020.0002] # CUNEIFORM SIGN UM -1231E ; [.4F0A.0020.0002] # CUNEIFORM SIGN UM TIMES LAGAB -1231F ; [.4F0B.0020.0002] # CUNEIFORM SIGN UM TIMES ME PLUS DA -12320 ; [.4F0C.0020.0002] # CUNEIFORM SIGN UM TIMES SHA3 -12321 ; [.4F0D.0020.0002] # CUNEIFORM SIGN UM TIMES U -12322 ; [.4F0E.0020.0002] # CUNEIFORM SIGN UMBIN -12323 ; [.4F0F.0020.0002] # CUNEIFORM SIGN UMUM -12324 ; [.4F10.0020.0002] # CUNEIFORM SIGN UMUM TIMES KASKAL -12325 ; [.4F11.0020.0002] # CUNEIFORM SIGN UMUM TIMES PA -12326 ; [.4F12.0020.0002] # CUNEIFORM SIGN UN -12327 ; [.4F13.0020.0002] # CUNEIFORM SIGN UN GUNU -12328 ; [.4F14.0020.0002] # CUNEIFORM SIGN UR -12329 ; [.4F15.0020.0002] # CUNEIFORM SIGN UR CROSSING UR -1232A ; [.4F16.0020.0002] # CUNEIFORM SIGN UR SHESHIG -1232B ; [.4F17.0020.0002] # CUNEIFORM SIGN UR2 -1232C ; [.4F18.0020.0002] # CUNEIFORM SIGN UR2 TIMES A PLUS HA -1232D ; [.4F19.0020.0002] # CUNEIFORM SIGN UR2 TIMES A PLUS NA -1232E ; [.4F1A.0020.0002] # CUNEIFORM SIGN UR2 TIMES AL -1232F ; [.4F1B.0020.0002] # CUNEIFORM SIGN UR2 TIMES HA -12330 ; [.4F1C.0020.0002] # CUNEIFORM SIGN UR2 TIMES NUN -12331 ; [.4F1D.0020.0002] # CUNEIFORM SIGN UR2 TIMES U2 -12332 ; [.4F1E.0020.0002] # CUNEIFORM SIGN UR2 TIMES U2 PLUS ASH -12333 ; [.4F1F.0020.0002] # CUNEIFORM SIGN UR2 TIMES U2 PLUS BI -12334 ; [.4F20.0020.0002] # CUNEIFORM SIGN UR4 -12335 ; [.4F21.0020.0002] # CUNEIFORM SIGN URI -12336 ; [.4F22.0020.0002] # CUNEIFORM SIGN URI3 -12337 ; [.4F23.0020.0002] # CUNEIFORM SIGN URU -12338 ; [.4F24.0020.0002] # CUNEIFORM SIGN URU TIMES A -12339 ; [.4F25.0020.0002] # CUNEIFORM SIGN URU TIMES ASHGAB -1233A ; [.4F26.0020.0002] # CUNEIFORM SIGN URU TIMES BAR -1233B ; [.4F27.0020.0002] # CUNEIFORM SIGN URU TIMES DUN -1233C ; [.4F28.0020.0002] # CUNEIFORM SIGN URU TIMES GA -1233D ; [.4F29.0020.0002] # CUNEIFORM SIGN URU TIMES GAL -1233E ; [.4F2A.0020.0002] # CUNEIFORM SIGN URU TIMES GAN2 TENU -1233F ; [.4F2B.0020.0002] # CUNEIFORM SIGN URU TIMES GAR -12340 ; [.4F2C.0020.0002] # CUNEIFORM SIGN URU TIMES GU -12341 ; [.4F2D.0020.0002] # CUNEIFORM SIGN URU TIMES HA -12342 ; [.4F2E.0020.0002] # CUNEIFORM SIGN URU TIMES IGI -12343 ; [.4F2F.0020.0002] # CUNEIFORM SIGN URU TIMES IM -12344 ; [.4F30.0020.0002] # CUNEIFORM SIGN URU TIMES ISH -12345 ; [.4F31.0020.0002] # CUNEIFORM SIGN URU TIMES KI -12346 ; [.4F32.0020.0002] # CUNEIFORM SIGN URU TIMES LUM -12347 ; [.4F33.0020.0002] # CUNEIFORM SIGN URU TIMES MIN -12348 ; [.4F34.0020.0002] # CUNEIFORM SIGN URU TIMES PA -12349 ; [.4F35.0020.0002] # CUNEIFORM SIGN URU TIMES SHE -1234A ; [.4F36.0020.0002] # CUNEIFORM SIGN URU TIMES SIG4 -1234B ; [.4F37.0020.0002] # CUNEIFORM SIGN URU TIMES TU -1234C ; [.4F38.0020.0002] # CUNEIFORM SIGN URU TIMES U PLUS GUD -1234D ; [.4F39.0020.0002] # CUNEIFORM SIGN URU TIMES UD -1234E ; [.4F3A.0020.0002] # CUNEIFORM SIGN URU TIMES URUDA -1234F ; [.4F3B.0020.0002] # CUNEIFORM SIGN URUDA -12350 ; [.4F3C.0020.0002] # CUNEIFORM SIGN URUDA TIMES U -12351 ; [.4F3D.0020.0002] # CUNEIFORM SIGN USH -12352 ; [.4F3E.0020.0002] # CUNEIFORM SIGN USH TIMES A -12353 ; [.4F3F.0020.0002] # CUNEIFORM SIGN USH TIMES KU -12354 ; [.4F40.0020.0002] # CUNEIFORM SIGN USH TIMES KUR -12355 ; [.4F41.0020.0002] # CUNEIFORM SIGN USH TIMES TAK4 -12356 ; [.4F42.0020.0002] # CUNEIFORM SIGN USHX -12357 ; [.4F43.0020.0002] # CUNEIFORM SIGN USH2 -12358 ; [.4F44.0020.0002] # CUNEIFORM SIGN USHUMX -12359 ; [.4F45.0020.0002] # CUNEIFORM SIGN UTUKI -1235A ; [.4F46.0020.0002] # CUNEIFORM SIGN UZ3 -1235B ; [.4F47.0020.0002] # CUNEIFORM SIGN UZ3 TIMES KASKAL -1235C ; [.4F48.0020.0002] # CUNEIFORM SIGN UZU -1235D ; [.4F49.0020.0002] # CUNEIFORM SIGN ZA -1235E ; [.4F4A.0020.0002] # CUNEIFORM SIGN ZA TENU -1235F ; [.4F4B.0020.0002] # CUNEIFORM SIGN ZA SQUARED TIMES KUR -12360 ; [.4F4C.0020.0002] # CUNEIFORM SIGN ZAG -12361 ; [.4F4D.0020.0002] # CUNEIFORM SIGN ZAMX -12362 ; [.4F4E.0020.0002] # CUNEIFORM SIGN ZE2 -12363 ; [.4F4F.0020.0002] # CUNEIFORM SIGN ZI -12364 ; [.4F50.0020.0002] # CUNEIFORM SIGN ZI OVER ZI -12365 ; [.4F51.0020.0002] # CUNEIFORM SIGN ZI3 -12366 ; [.4F52.0020.0002] # CUNEIFORM SIGN ZIB -12367 ; [.4F53.0020.0002] # CUNEIFORM SIGN ZIB KABA TENU -12368 ; [.4F54.0020.0002] # CUNEIFORM SIGN ZIG -12369 ; [.4F55.0020.0002] # CUNEIFORM SIGN ZIZ2 -1236A ; [.4F56.0020.0002] # CUNEIFORM SIGN ZU -1236B ; [.4F57.0020.0002] # CUNEIFORM SIGN ZU5 -1236C ; [.4F58.0020.0002] # CUNEIFORM SIGN ZU5 TIMES A -1236D ; [.4F59.0020.0002] # CUNEIFORM SIGN ZUBUR -1236E ; [.4F5A.0020.0002] # CUNEIFORM SIGN ZUM -1236F ; [.4F5B.0020.0002] # CUNEIFORM SIGN KAP ELAMITE -12370 ; [.4F5C.0020.0002] # CUNEIFORM SIGN AB TIMES NUN -12371 ; [.4F5D.0020.0002] # CUNEIFORM SIGN AB2 TIMES A -12372 ; [.4F5E.0020.0002] # CUNEIFORM SIGN AMAR TIMES KUG -12373 ; [.4F5F.0020.0002] # CUNEIFORM SIGN DAG KISIM5 TIMES U2 PLUS MASH -12374 ; [.4F60.0020.0002] # CUNEIFORM SIGN DAG3 -12375 ; [.4F61.0020.0002] # CUNEIFORM SIGN DISH PLUS SHU -12376 ; [.4F62.0020.0002] # CUNEIFORM SIGN DUB TIMES SHE -12377 ; [.4F63.0020.0002] # CUNEIFORM SIGN EZEN TIMES GUD -12378 ; [.4F64.0020.0002] # CUNEIFORM SIGN EZEN TIMES SHE -12379 ; [.4F65.0020.0002] # CUNEIFORM SIGN GA2 TIMES AN PLUS KAK PLUS A -1237A ; [.4F66.0020.0002] # CUNEIFORM SIGN GA2 TIMES ASH2 -1237B ; [.4F67.0020.0002] # CUNEIFORM SIGN GE22 -1237C ; [.4F68.0020.0002] # CUNEIFORM SIGN GIG -1237D ; [.4F69.0020.0002] # CUNEIFORM SIGN HUSH -1237E ; [.4F6A.0020.0002] # CUNEIFORM SIGN KA TIMES ANSHE -1237F ; [.4F6B.0020.0002] # CUNEIFORM SIGN KA TIMES ASH3 -12380 ; [.4F6C.0020.0002] # CUNEIFORM SIGN KA TIMES GISH -12381 ; [.4F6D.0020.0002] # CUNEIFORM SIGN KA TIMES GUD -12382 ; [.4F6E.0020.0002] # CUNEIFORM SIGN KA TIMES HI TIMES ASH2 -12383 ; [.4F6F.0020.0002] # CUNEIFORM SIGN KA TIMES LUM -12384 ; [.4F70.0020.0002] # CUNEIFORM SIGN KA TIMES PA -12385 ; [.4F71.0020.0002] # CUNEIFORM SIGN KA TIMES SHUL -12386 ; [.4F72.0020.0002] # CUNEIFORM SIGN KA TIMES TU -12387 ; [.4F73.0020.0002] # CUNEIFORM SIGN KA TIMES UR2 -12388 ; [.4F74.0020.0002] # CUNEIFORM SIGN LAGAB TIMES GI -12389 ; [.4F75.0020.0002] # CUNEIFORM SIGN LU2 SHESHIG TIMES BAD -1238A ; [.4F76.0020.0002] # CUNEIFORM SIGN LU2 TIMES ESH2 PLUS LAL -1238B ; [.4F77.0020.0002] # CUNEIFORM SIGN LU2 TIMES SHU -1238C ; [.4F78.0020.0002] # CUNEIFORM SIGN MESH -1238D ; [.4F79.0020.0002] # CUNEIFORM SIGN MUSH3 TIMES ZA -1238E ; [.4F7A.0020.0002] # CUNEIFORM SIGN NA4 -1238F ; [.4F7B.0020.0002] # CUNEIFORM SIGN NIN -12390 ; [.4F7C.0020.0002] # CUNEIFORM SIGN NIN9 -12391 ; [.4F7D.0020.0002] # CUNEIFORM SIGN NINDA2 TIMES BAL -12392 ; [.4F7E.0020.0002] # CUNEIFORM SIGN NINDA2 TIMES GI -12393 ; [.4F7F.0020.0002] # CUNEIFORM SIGN NU11 ROTATED NINETY DEGREES -12394 ; [.4F80.0020.0002] # CUNEIFORM SIGN PESH2 ASTERISK -12395 ; [.4F81.0020.0002] # CUNEIFORM SIGN PIR2 -12396 ; [.4F82.0020.0002] # CUNEIFORM SIGN SAG TIMES IGI GUNU -12397 ; [.4F83.0020.0002] # CUNEIFORM SIGN TI2 -12398 ; [.4F84.0020.0002] # CUNEIFORM SIGN UM TIMES ME -12399 ; [.4F85.0020.0002] # CUNEIFORM SIGN U U -12480 ; [.4F86.0020.0002] # CUNEIFORM SIGN AB TIMES NUN TENU -12481 ; [.4F87.0020.0002] # CUNEIFORM SIGN AB TIMES SHU2 -12482 ; [.4F88.0020.0002] # CUNEIFORM SIGN AD TIMES ESH2 -12483 ; [.4F89.0020.0002] # CUNEIFORM SIGN BAD TIMES DISH TENU -12484 ; [.4F8A.0020.0002] # CUNEIFORM SIGN BAHAR2 TIMES AB2 -12485 ; [.4F8B.0020.0002] # CUNEIFORM SIGN BAHAR2 TIMES NI -12486 ; [.4F8C.0020.0002] # CUNEIFORM SIGN BAHAR2 TIMES ZA -12487 ; [.4F8D.0020.0002] # CUNEIFORM SIGN BU OVER BU TIMES NA2 -12488 ; [.4F8E.0020.0002] # CUNEIFORM SIGN DA TIMES TAK4 -12489 ; [.4F8F.0020.0002] # CUNEIFORM SIGN DAG TIMES KUR -1248A ; [.4F90.0020.0002] # CUNEIFORM SIGN DIM TIMES IGI -1248B ; [.4F91.0020.0002] # CUNEIFORM SIGN DIM TIMES U U U -1248C ; [.4F92.0020.0002] # CUNEIFORM SIGN DIM2 TIMES UD -1248D ; [.4F93.0020.0002] # CUNEIFORM SIGN DUG TIMES ANSHE -1248E ; [.4F94.0020.0002] # CUNEIFORM SIGN DUG TIMES ASH -1248F ; [.4F95.0020.0002] # CUNEIFORM SIGN DUG TIMES ASH AT LEFT -12490 ; [.4F96.0020.0002] # CUNEIFORM SIGN DUG TIMES DIN -12491 ; [.4F97.0020.0002] # CUNEIFORM SIGN DUG TIMES DUN -12492 ; [.4F98.0020.0002] # CUNEIFORM SIGN DUG TIMES ERIN2 -12493 ; [.4F99.0020.0002] # CUNEIFORM SIGN DUG TIMES GA -12494 ; [.4F9A.0020.0002] # CUNEIFORM SIGN DUG TIMES GI -12495 ; [.4F9B.0020.0002] # CUNEIFORM SIGN DUG TIMES GIR2 GUNU -12496 ; [.4F9C.0020.0002] # CUNEIFORM SIGN DUG TIMES GISH -12497 ; [.4F9D.0020.0002] # CUNEIFORM SIGN DUG TIMES HA -12498 ; [.4F9E.0020.0002] # CUNEIFORM SIGN DUG TIMES HI -12499 ; [.4F9F.0020.0002] # CUNEIFORM SIGN DUG TIMES IGI GUNU -1249A ; [.4FA0.0020.0002] # CUNEIFORM SIGN DUG TIMES KASKAL -1249B ; [.4FA1.0020.0002] # CUNEIFORM SIGN DUG TIMES KUR -1249C ; [.4FA2.0020.0002] # CUNEIFORM SIGN DUG TIMES KUSHU2 -1249D ; [.4FA3.0020.0002] # CUNEIFORM SIGN DUG TIMES KUSHU2 PLUS KASKAL -1249E ; [.4FA4.0020.0002] # CUNEIFORM SIGN DUG TIMES LAK-020 -1249F ; [.4FA5.0020.0002] # CUNEIFORM SIGN DUG TIMES LAM -124A0 ; [.4FA6.0020.0002] # CUNEIFORM SIGN DUG TIMES LAM TIMES KUR -124A1 ; [.4FA7.0020.0002] # CUNEIFORM SIGN DUG TIMES LUH PLUS GISH -124A2 ; [.4FA8.0020.0002] # CUNEIFORM SIGN DUG TIMES MASH -124A3 ; [.4FA9.0020.0002] # CUNEIFORM SIGN DUG TIMES MES -124A4 ; [.4FAA.0020.0002] # CUNEIFORM SIGN DUG TIMES MI -124A5 ; [.4FAB.0020.0002] # CUNEIFORM SIGN DUG TIMES NI -124A6 ; [.4FAC.0020.0002] # CUNEIFORM SIGN DUG TIMES PI -124A7 ; [.4FAD.0020.0002] # CUNEIFORM SIGN DUG TIMES SHE -124A8 ; [.4FAE.0020.0002] # CUNEIFORM SIGN DUG TIMES SI GUNU -124A9 ; [.4FAF.0020.0002] # CUNEIFORM SIGN E2 TIMES KUR -124AA ; [.4FB0.0020.0002] # CUNEIFORM SIGN E2 TIMES PAP -124AB ; [.4FB1.0020.0002] # CUNEIFORM SIGN ERIN2 X -124AC ; [.4FB2.0020.0002] # CUNEIFORM SIGN ESH2 CROSSING ESH2 -124AD ; [.4FB3.0020.0002] # CUNEIFORM SIGN EZEN SHESHIG TIMES ASH -124AE ; [.4FB4.0020.0002] # CUNEIFORM SIGN EZEN SHESHIG TIMES HI -124AF ; [.4FB5.0020.0002] # CUNEIFORM SIGN EZEN SHESHIG TIMES IGI GUNU -124B0 ; [.4FB6.0020.0002] # CUNEIFORM SIGN EZEN SHESHIG TIMES LA -124B1 ; [.4FB7.0020.0002] # CUNEIFORM SIGN EZEN SHESHIG TIMES LAL -124B2 ; [.4FB8.0020.0002] # CUNEIFORM SIGN EZEN SHESHIG TIMES ME -124B3 ; [.4FB9.0020.0002] # CUNEIFORM SIGN EZEN SHESHIG TIMES MES -124B4 ; [.4FBA.0020.0002] # CUNEIFORM SIGN EZEN SHESHIG TIMES SU -124B5 ; [.4FBB.0020.0002] # CUNEIFORM SIGN EZEN TIMES SU -124B6 ; [.4FBC.0020.0002] # CUNEIFORM SIGN GA2 TIMES BAHAR2 -124B7 ; [.4FBD.0020.0002] # CUNEIFORM SIGN GA2 TIMES DIM GUNU -124B8 ; [.4FBE.0020.0002] # CUNEIFORM SIGN GA2 TIMES DUG TIMES IGI GUNU -124B9 ; [.4FBF.0020.0002] # CUNEIFORM SIGN GA2 TIMES DUG TIMES KASKAL -124BA ; [.4FC0.0020.0002] # CUNEIFORM SIGN GA2 TIMES EREN -124BB ; [.4FC1.0020.0002] # CUNEIFORM SIGN GA2 TIMES GA -124BC ; [.4FC2.0020.0002] # CUNEIFORM SIGN GA2 TIMES GAR PLUS DI -124BD ; [.4FC3.0020.0002] # CUNEIFORM SIGN GA2 TIMES GAR PLUS NE -124BE ; [.4FC4.0020.0002] # CUNEIFORM SIGN GA2 TIMES HA PLUS A -124BF ; [.4FC5.0020.0002] # CUNEIFORM SIGN GA2 TIMES KUSHU2 PLUS KASKAL -124C0 ; [.4FC6.0020.0002] # CUNEIFORM SIGN GA2 TIMES LAM -124C1 ; [.4FC7.0020.0002] # CUNEIFORM SIGN GA2 TIMES LAM TIMES KUR -124C2 ; [.4FC8.0020.0002] # CUNEIFORM SIGN GA2 TIMES LUH -124C3 ; [.4FC9.0020.0002] # CUNEIFORM SIGN GA2 TIMES MUSH -124C4 ; [.4FCA.0020.0002] # CUNEIFORM SIGN GA2 TIMES NE -124C5 ; [.4FCB.0020.0002] # CUNEIFORM SIGN GA2 TIMES NE PLUS E2 -124C6 ; [.4FCC.0020.0002] # CUNEIFORM SIGN GA2 TIMES NE PLUS GI -124C7 ; [.4FCD.0020.0002] # CUNEIFORM SIGN GA2 TIMES SHIM -124C8 ; [.4FCE.0020.0002] # CUNEIFORM SIGN GA2 TIMES ZIZ2 -124C9 ; [.4FCF.0020.0002] # CUNEIFORM SIGN GABA ROTATED NINETY DEGREES -124CA ; [.4FD0.0020.0002] # CUNEIFORM SIGN GESHTIN TIMES U -124CB ; [.4FD1.0020.0002] # CUNEIFORM SIGN GISH TIMES GISH CROSSING GISH -124CC ; [.4FD2.0020.0002] # CUNEIFORM SIGN GU2 TIMES IGI GUNU -124CD ; [.4FD3.0020.0002] # CUNEIFORM SIGN GUD PLUS GISH TIMES TAK4 -124CE ; [.4FD4.0020.0002] # CUNEIFORM SIGN HA TENU GUNU -124CF ; [.4FD5.0020.0002] # CUNEIFORM SIGN HI TIMES ASH OVER HI TIMES ASH -124D0 ; [.4FD6.0020.0002] # CUNEIFORM SIGN KA TIMES BU -124D1 ; [.4FD7.0020.0002] # CUNEIFORM SIGN KA TIMES KA -124D2 ; [.4FD8.0020.0002] # CUNEIFORM SIGN KA TIMES U U U -124D3 ; [.4FD9.0020.0002] # CUNEIFORM SIGN KA TIMES UR -124D4 ; [.4FDA.0020.0002] # CUNEIFORM SIGN LAGAB TIMES ZU OVER ZU -124D5 ; [.4FDB.0020.0002] # CUNEIFORM SIGN LAK-003 -124D6 ; [.4FDC.0020.0002] # CUNEIFORM SIGN LAK-021 -124D7 ; [.4FDD.0020.0002] # CUNEIFORM SIGN LAK-025 -124D8 ; [.4FDE.0020.0002] # CUNEIFORM SIGN LAK-030 -124D9 ; [.4FDF.0020.0002] # CUNEIFORM SIGN LAK-050 -124DA ; [.4FE0.0020.0002] # CUNEIFORM SIGN LAK-051 -124DB ; [.4FE1.0020.0002] # CUNEIFORM SIGN LAK-062 -124DC ; [.4FE2.0020.0002] # CUNEIFORM SIGN LAK-079 OVER LAK-079 GUNU -124DD ; [.4FE3.0020.0002] # CUNEIFORM SIGN LAK-080 -124DE ; [.4FE4.0020.0002] # CUNEIFORM SIGN LAK-081 OVER LAK-081 -124DF ; [.4FE5.0020.0002] # CUNEIFORM SIGN LAK-092 -124E0 ; [.4FE6.0020.0002] # CUNEIFORM SIGN LAK-130 -124E1 ; [.4FE7.0020.0002] # CUNEIFORM SIGN LAK-142 -124E2 ; [.4FE8.0020.0002] # CUNEIFORM SIGN LAK-210 -124E3 ; [.4FE9.0020.0002] # CUNEIFORM SIGN LAK-219 -124E4 ; [.4FEA.0020.0002] # CUNEIFORM SIGN LAK-220 -124E5 ; [.4FEB.0020.0002] # CUNEIFORM SIGN LAK-225 -124E6 ; [.4FEC.0020.0002] # CUNEIFORM SIGN LAK-228 -124E7 ; [.4FED.0020.0002] # CUNEIFORM SIGN LAK-238 -124E8 ; [.4FEE.0020.0002] # CUNEIFORM SIGN LAK-265 -124E9 ; [.4FEF.0020.0002] # CUNEIFORM SIGN LAK-266 -124EA ; [.4FF0.0020.0002] # CUNEIFORM SIGN LAK-343 -124EB ; [.4FF1.0020.0002] # CUNEIFORM SIGN LAK-347 -124EC ; [.4FF2.0020.0002] # CUNEIFORM SIGN LAK-348 -124ED ; [.4FF3.0020.0002] # CUNEIFORM SIGN LAK-383 -124EE ; [.4FF4.0020.0002] # CUNEIFORM SIGN LAK-384 -124EF ; [.4FF5.0020.0002] # CUNEIFORM SIGN LAK-390 -124F0 ; [.4FF6.0020.0002] # CUNEIFORM SIGN LAK-441 -124F1 ; [.4FF7.0020.0002] # CUNEIFORM SIGN LAK-449 -124F2 ; [.4FF8.0020.0002] # CUNEIFORM SIGN LAK-449 TIMES GU -124F3 ; [.4FF9.0020.0002] # CUNEIFORM SIGN LAK-449 TIMES IGI -124F4 ; [.4FFA.0020.0002] # CUNEIFORM SIGN LAK-449 TIMES PAP PLUS LU3 -124F5 ; [.4FFB.0020.0002] # CUNEIFORM SIGN LAK-449 TIMES PAP PLUS PAP PLUS LU3 -124F6 ; [.4FFC.0020.0002] # CUNEIFORM SIGN LAK-449 TIMES U2 PLUS BA -124F7 ; [.4FFD.0020.0002] # CUNEIFORM SIGN LAK-450 -124F8 ; [.4FFE.0020.0002] # CUNEIFORM SIGN LAK-457 -124F9 ; [.4FFF.0020.0002] # CUNEIFORM SIGN LAK-470 -124FA ; [.5000.0020.0002] # CUNEIFORM SIGN LAK-483 -124FB ; [.5001.0020.0002] # CUNEIFORM SIGN LAK-490 -124FC ; [.5002.0020.0002] # CUNEIFORM SIGN LAK-492 -124FD ; [.5003.0020.0002] # CUNEIFORM SIGN LAK-493 -124FE ; [.5004.0020.0002] # CUNEIFORM SIGN LAK-495 -124FF ; [.5005.0020.0002] # CUNEIFORM SIGN LAK-550 -12500 ; [.5006.0020.0002] # CUNEIFORM SIGN LAK-608 -12501 ; [.5007.0020.0002] # CUNEIFORM SIGN LAK-617 -12502 ; [.5008.0020.0002] # CUNEIFORM SIGN LAK-617 TIMES ASH -12503 ; [.5009.0020.0002] # CUNEIFORM SIGN LAK-617 TIMES BAD -12504 ; [.500A.0020.0002] # CUNEIFORM SIGN LAK-617 TIMES DUN3 GUNU GUNU -12505 ; [.500B.0020.0002] # CUNEIFORM SIGN LAK-617 TIMES KU3 -12506 ; [.500C.0020.0002] # CUNEIFORM SIGN LAK-617 TIMES LA -12507 ; [.500D.0020.0002] # CUNEIFORM SIGN LAK-617 TIMES TAR -12508 ; [.500E.0020.0002] # CUNEIFORM SIGN LAK-617 TIMES TE -12509 ; [.500F.0020.0002] # CUNEIFORM SIGN LAK-617 TIMES U2 -1250A ; [.5010.0020.0002] # CUNEIFORM SIGN LAK-617 TIMES UD -1250B ; [.5011.0020.0002] # CUNEIFORM SIGN LAK-617 TIMES URUDA -1250C ; [.5012.0020.0002] # CUNEIFORM SIGN LAK-636 -1250D ; [.5013.0020.0002] # CUNEIFORM SIGN LAK-648 -1250E ; [.5014.0020.0002] # CUNEIFORM SIGN LAK-648 TIMES DUB -1250F ; [.5015.0020.0002] # CUNEIFORM SIGN LAK-648 TIMES GA -12510 ; [.5016.0020.0002] # CUNEIFORM SIGN LAK-648 TIMES IGI -12511 ; [.5017.0020.0002] # CUNEIFORM SIGN LAK-648 TIMES IGI GUNU -12512 ; [.5018.0020.0002] # CUNEIFORM SIGN LAK-648 TIMES NI -12513 ; [.5019.0020.0002] # CUNEIFORM SIGN LAK-648 TIMES PAP PLUS PAP PLUS LU3 -12514 ; [.501A.0020.0002] # CUNEIFORM SIGN LAK-648 TIMES SHESH PLUS KI -12515 ; [.501B.0020.0002] # CUNEIFORM SIGN LAK-648 TIMES UD -12516 ; [.501C.0020.0002] # CUNEIFORM SIGN LAK-648 TIMES URUDA -12517 ; [.501D.0020.0002] # CUNEIFORM SIGN LAK-724 -12518 ; [.501E.0020.0002] # CUNEIFORM SIGN LAK-749 -12519 ; [.501F.0020.0002] # CUNEIFORM SIGN LU2 GUNU TIMES ASH -1251A ; [.5020.0020.0002] # CUNEIFORM SIGN LU2 TIMES DISH -1251B ; [.5021.0020.0002] # CUNEIFORM SIGN LU2 TIMES HAL -1251C ; [.5022.0020.0002] # CUNEIFORM SIGN LU2 TIMES PAP -1251D ; [.5023.0020.0002] # CUNEIFORM SIGN LU2 TIMES PAP PLUS PAP PLUS LU3 -1251E ; [.5024.0020.0002] # CUNEIFORM SIGN LU2 TIMES TAK4 -1251F ; [.5025.0020.0002] # CUNEIFORM SIGN MI PLUS ZA7 -12520 ; [.5026.0020.0002] # CUNEIFORM SIGN MUSH OVER MUSH TIMES GA -12521 ; [.5027.0020.0002] # CUNEIFORM SIGN MUSH OVER MUSH TIMES KAK -12522 ; [.5028.0020.0002] # CUNEIFORM SIGN NINDA2 TIMES DIM GUNU -12523 ; [.5029.0020.0002] # CUNEIFORM SIGN NINDA2 TIMES GISH -12524 ; [.502A.0020.0002] # CUNEIFORM SIGN NINDA2 TIMES GUL -12525 ; [.502B.0020.0002] # CUNEIFORM SIGN NINDA2 TIMES HI -12526 ; [.502C.0020.0002] # CUNEIFORM SIGN NINDA2 TIMES KESH2 -12527 ; [.502D.0020.0002] # CUNEIFORM SIGN NINDA2 TIMES LAK-050 -12528 ; [.502E.0020.0002] # CUNEIFORM SIGN NINDA2 TIMES MASH -12529 ; [.502F.0020.0002] # CUNEIFORM SIGN NINDA2 TIMES PAP PLUS PAP -1252A ; [.5030.0020.0002] # CUNEIFORM SIGN NINDA2 TIMES U -1252B ; [.5031.0020.0002] # CUNEIFORM SIGN NINDA2 TIMES U PLUS U -1252C ; [.5032.0020.0002] # CUNEIFORM SIGN NINDA2 TIMES URUDA -1252D ; [.5033.0020.0002] # CUNEIFORM SIGN SAG GUNU TIMES HA -1252E ; [.5034.0020.0002] # CUNEIFORM SIGN SAG TIMES EN -1252F ; [.5035.0020.0002] # CUNEIFORM SIGN SAG TIMES SHE AT LEFT -12530 ; [.5036.0020.0002] # CUNEIFORM SIGN SAG TIMES TAK4 -12531 ; [.5037.0020.0002] # CUNEIFORM SIGN SHA6 TENU -12532 ; [.5038.0020.0002] # CUNEIFORM SIGN SHE OVER SHE -12533 ; [.5039.0020.0002] # CUNEIFORM SIGN SHE PLUS HUB2 -12534 ; [.503A.0020.0002] # CUNEIFORM SIGN SHE PLUS NAM2 -12535 ; [.503B.0020.0002] # CUNEIFORM SIGN SHE PLUS SAR -12536 ; [.503C.0020.0002] # CUNEIFORM SIGN SHU2 PLUS DUG TIMES NI -12537 ; [.503D.0020.0002] # CUNEIFORM SIGN SHU2 PLUS E2 TIMES AN -12538 ; [.503E.0020.0002] # CUNEIFORM SIGN SI TIMES TAK4 -12539 ; [.503F.0020.0002] # CUNEIFORM SIGN TAK4 PLUS SAG -1253A ; [.5040.0020.0002] # CUNEIFORM SIGN TUM TIMES GAN2 TENU -1253B ; [.5041.0020.0002] # CUNEIFORM SIGN TUM TIMES THREE DISH -1253C ; [.5042.0020.0002] # CUNEIFORM SIGN UR2 INVERTED -1253D ; [.5043.0020.0002] # CUNEIFORM SIGN UR2 TIMES UD -1253E ; [.5044.0020.0002] # CUNEIFORM SIGN URU TIMES DARA3 -1253F ; [.5045.0020.0002] # CUNEIFORM SIGN URU TIMES LAK-668 -12540 ; [.5046.0020.0002] # CUNEIFORM SIGN URU TIMES LU3 -12541 ; [.5047.0020.0002] # CUNEIFORM SIGN ZA7 -12542 ; [.5048.0020.0002] # CUNEIFORM SIGN ZU OVER ZU PLUS SAR -12543 ; [.5049.0020.0002] # CUNEIFORM SIGN ZU5 TIMES THREE DISH TENU -13000 ; [.504A.0020.0002] # EGYPTIAN HIEROGLYPH A001 -13001 ; [.504B.0020.0002] # EGYPTIAN HIEROGLYPH A002 -13002 ; [.504C.0020.0002] # EGYPTIAN HIEROGLYPH A003 -13003 ; [.504D.0020.0002] # EGYPTIAN HIEROGLYPH A004 -13004 ; [.504E.0020.0002] # EGYPTIAN HIEROGLYPH A005 -13005 ; [.504F.0020.0002] # EGYPTIAN HIEROGLYPH A005A -13006 ; [.5050.0020.0002] # EGYPTIAN HIEROGLYPH A006 -13007 ; [.5051.0020.0002] # EGYPTIAN HIEROGLYPH A006A -13008 ; [.5052.0020.0002] # EGYPTIAN HIEROGLYPH A006B -13009 ; [.5053.0020.0002] # EGYPTIAN HIEROGLYPH A007 -1300A ; [.5054.0020.0002] # EGYPTIAN HIEROGLYPH A008 -1300B ; [.5055.0020.0002] # EGYPTIAN HIEROGLYPH A009 -1300C ; [.5056.0020.0002] # EGYPTIAN HIEROGLYPH A010 -1300D ; [.5057.0020.0002] # EGYPTIAN HIEROGLYPH A011 -1300E ; [.5058.0020.0002] # EGYPTIAN HIEROGLYPH A012 -1300F ; [.5059.0020.0002] # EGYPTIAN HIEROGLYPH A013 -13010 ; [.505A.0020.0002] # EGYPTIAN HIEROGLYPH A014 -13011 ; [.505B.0020.0002] # EGYPTIAN HIEROGLYPH A014A -13012 ; [.505C.0020.0002] # EGYPTIAN HIEROGLYPH A015 -13013 ; [.505D.0020.0002] # EGYPTIAN HIEROGLYPH A016 -13014 ; [.505E.0020.0002] # EGYPTIAN HIEROGLYPH A017 -13015 ; [.505F.0020.0002] # EGYPTIAN HIEROGLYPH A017A -13016 ; [.5060.0020.0002] # EGYPTIAN HIEROGLYPH A018 -13017 ; [.5061.0020.0002] # EGYPTIAN HIEROGLYPH A019 -13018 ; [.5062.0020.0002] # EGYPTIAN HIEROGLYPH A020 -13019 ; [.5063.0020.0002] # EGYPTIAN HIEROGLYPH A021 -1301A ; [.5064.0020.0002] # EGYPTIAN HIEROGLYPH A022 -1301B ; [.5065.0020.0002] # EGYPTIAN HIEROGLYPH A023 -1301C ; [.5066.0020.0002] # EGYPTIAN HIEROGLYPH A024 -1301D ; [.5067.0020.0002] # EGYPTIAN HIEROGLYPH A025 -1301E ; [.5068.0020.0002] # EGYPTIAN HIEROGLYPH A026 -1301F ; [.5069.0020.0002] # EGYPTIAN HIEROGLYPH A027 -13020 ; [.506A.0020.0002] # EGYPTIAN HIEROGLYPH A028 -13021 ; [.506B.0020.0002] # EGYPTIAN HIEROGLYPH A029 -13022 ; [.506C.0020.0002] # EGYPTIAN HIEROGLYPH A030 -13023 ; [.506D.0020.0002] # EGYPTIAN HIEROGLYPH A031 -13024 ; [.506E.0020.0002] # EGYPTIAN HIEROGLYPH A032 -13025 ; [.506F.0020.0002] # EGYPTIAN HIEROGLYPH A032A -13026 ; [.5070.0020.0002] # EGYPTIAN HIEROGLYPH A033 -13027 ; [.5071.0020.0002] # EGYPTIAN HIEROGLYPH A034 -13028 ; [.5072.0020.0002] # EGYPTIAN HIEROGLYPH A035 -13029 ; [.5073.0020.0002] # EGYPTIAN HIEROGLYPH A036 -1302A ; [.5074.0020.0002] # EGYPTIAN HIEROGLYPH A037 -1302B ; [.5075.0020.0002] # EGYPTIAN HIEROGLYPH A038 -1302C ; [.5076.0020.0002] # EGYPTIAN HIEROGLYPH A039 -1302D ; [.5077.0020.0002] # EGYPTIAN HIEROGLYPH A040 -1302E ; [.5078.0020.0002] # EGYPTIAN HIEROGLYPH A040A -1302F ; [.5079.0020.0002] # EGYPTIAN HIEROGLYPH A041 -13030 ; [.507A.0020.0002] # EGYPTIAN HIEROGLYPH A042 -13031 ; [.507B.0020.0002] # EGYPTIAN HIEROGLYPH A042A -13032 ; [.507C.0020.0002] # EGYPTIAN HIEROGLYPH A043 -13033 ; [.507D.0020.0002] # EGYPTIAN HIEROGLYPH A043A -13034 ; [.507E.0020.0002] # EGYPTIAN HIEROGLYPH A044 -13035 ; [.507F.0020.0002] # EGYPTIAN HIEROGLYPH A045 -13036 ; [.5080.0020.0002] # EGYPTIAN HIEROGLYPH A045A -13037 ; [.5081.0020.0002] # EGYPTIAN HIEROGLYPH A046 -13038 ; [.5082.0020.0002] # EGYPTIAN HIEROGLYPH A047 -13039 ; [.5083.0020.0002] # EGYPTIAN HIEROGLYPH A048 -1303A ; [.5084.0020.0002] # EGYPTIAN HIEROGLYPH A049 -1303B ; [.5085.0020.0002] # EGYPTIAN HIEROGLYPH A050 -1303C ; [.5086.0020.0002] # EGYPTIAN HIEROGLYPH A051 -1303D ; [.5087.0020.0002] # EGYPTIAN HIEROGLYPH A052 -1303E ; [.5088.0020.0002] # EGYPTIAN HIEROGLYPH A053 -1303F ; [.5089.0020.0002] # EGYPTIAN HIEROGLYPH A054 -13040 ; [.508A.0020.0002] # EGYPTIAN HIEROGLYPH A055 -13041 ; [.508B.0020.0002] # EGYPTIAN HIEROGLYPH A056 -13042 ; [.508C.0020.0002] # EGYPTIAN HIEROGLYPH A057 -13043 ; [.508D.0020.0002] # EGYPTIAN HIEROGLYPH A058 -13044 ; [.508E.0020.0002] # EGYPTIAN HIEROGLYPH A059 -13045 ; [.508F.0020.0002] # EGYPTIAN HIEROGLYPH A060 -13046 ; [.5090.0020.0002] # EGYPTIAN HIEROGLYPH A061 -13047 ; [.5091.0020.0002] # EGYPTIAN HIEROGLYPH A062 -13048 ; [.5092.0020.0002] # EGYPTIAN HIEROGLYPH A063 -13049 ; [.5093.0020.0002] # EGYPTIAN HIEROGLYPH A064 -1304A ; [.5094.0020.0002] # EGYPTIAN HIEROGLYPH A065 -1304B ; [.5095.0020.0002] # EGYPTIAN HIEROGLYPH A066 -1304C ; [.5096.0020.0002] # EGYPTIAN HIEROGLYPH A067 -1304D ; [.5097.0020.0002] # EGYPTIAN HIEROGLYPH A068 -1304E ; [.5098.0020.0002] # EGYPTIAN HIEROGLYPH A069 -1304F ; [.5099.0020.0002] # EGYPTIAN HIEROGLYPH A070 -13050 ; [.509A.0020.0002] # EGYPTIAN HIEROGLYPH B001 -13051 ; [.509B.0020.0002] # EGYPTIAN HIEROGLYPH B002 -13052 ; [.509C.0020.0002] # EGYPTIAN HIEROGLYPH B003 -13053 ; [.509D.0020.0002] # EGYPTIAN HIEROGLYPH B004 -13054 ; [.509E.0020.0002] # EGYPTIAN HIEROGLYPH B005 -13055 ; [.509F.0020.0002] # EGYPTIAN HIEROGLYPH B005A -13056 ; [.50A0.0020.0002] # EGYPTIAN HIEROGLYPH B006 -13057 ; [.50A1.0020.0002] # EGYPTIAN HIEROGLYPH B007 -13058 ; [.50A2.0020.0002] # EGYPTIAN HIEROGLYPH B008 -13059 ; [.50A3.0020.0002] # EGYPTIAN HIEROGLYPH B009 -1305A ; [.50A4.0020.0002] # EGYPTIAN HIEROGLYPH C001 -1305B ; [.50A5.0020.0002] # EGYPTIAN HIEROGLYPH C002 -1305C ; [.50A6.0020.0002] # EGYPTIAN HIEROGLYPH C002A -1305D ; [.50A7.0020.0002] # EGYPTIAN HIEROGLYPH C002B -1305E ; [.50A8.0020.0002] # EGYPTIAN HIEROGLYPH C002C -1305F ; [.50A9.0020.0002] # EGYPTIAN HIEROGLYPH C003 -13060 ; [.50AA.0020.0002] # EGYPTIAN HIEROGLYPH C004 -13061 ; [.50AB.0020.0002] # EGYPTIAN HIEROGLYPH C005 -13062 ; [.50AC.0020.0002] # EGYPTIAN HIEROGLYPH C006 -13063 ; [.50AD.0020.0002] # EGYPTIAN HIEROGLYPH C007 -13064 ; [.50AE.0020.0002] # EGYPTIAN HIEROGLYPH C008 -13065 ; [.50AF.0020.0002] # EGYPTIAN HIEROGLYPH C009 -13066 ; [.50B0.0020.0002] # EGYPTIAN HIEROGLYPH C010 -13067 ; [.50B1.0020.0002] # EGYPTIAN HIEROGLYPH C010A -13068 ; [.50B2.0020.0002] # EGYPTIAN HIEROGLYPH C011 -13069 ; [.50B3.0020.0002] # EGYPTIAN HIEROGLYPH C012 -1306A ; [.50B4.0020.0002] # EGYPTIAN HIEROGLYPH C013 -1306B ; [.50B5.0020.0002] # EGYPTIAN HIEROGLYPH C014 -1306C ; [.50B6.0020.0002] # EGYPTIAN HIEROGLYPH C015 -1306D ; [.50B7.0020.0002] # EGYPTIAN HIEROGLYPH C016 -1306E ; [.50B8.0020.0002] # EGYPTIAN HIEROGLYPH C017 -1306F ; [.50B9.0020.0002] # EGYPTIAN HIEROGLYPH C018 -13070 ; [.50BA.0020.0002] # EGYPTIAN HIEROGLYPH C019 -13071 ; [.50BB.0020.0002] # EGYPTIAN HIEROGLYPH C020 -13072 ; [.50BC.0020.0002] # EGYPTIAN HIEROGLYPH C021 -13073 ; [.50BD.0020.0002] # EGYPTIAN HIEROGLYPH C022 -13074 ; [.50BE.0020.0002] # EGYPTIAN HIEROGLYPH C023 -13075 ; [.50BF.0020.0002] # EGYPTIAN HIEROGLYPH C024 -13076 ; [.50C0.0020.0002] # EGYPTIAN HIEROGLYPH D001 -13077 ; [.50C1.0020.0002] # EGYPTIAN HIEROGLYPH D002 -13078 ; [.50C2.0020.0002] # EGYPTIAN HIEROGLYPH D003 -13079 ; [.50C3.0020.0002] # EGYPTIAN HIEROGLYPH D004 -1307A ; [.50C4.0020.0002] # EGYPTIAN HIEROGLYPH D005 -1307B ; [.50C5.0020.0002] # EGYPTIAN HIEROGLYPH D006 -1307C ; [.50C6.0020.0002] # EGYPTIAN HIEROGLYPH D007 -1307D ; [.50C7.0020.0002] # EGYPTIAN HIEROGLYPH D008 -1307E ; [.50C8.0020.0002] # EGYPTIAN HIEROGLYPH D008A -1307F ; [.50C9.0020.0002] # EGYPTIAN HIEROGLYPH D009 -13080 ; [.50CA.0020.0002] # EGYPTIAN HIEROGLYPH D010 -13081 ; [.50CB.0020.0002] # EGYPTIAN HIEROGLYPH D011 -13082 ; [.50CC.0020.0002] # EGYPTIAN HIEROGLYPH D012 -13083 ; [.50CD.0020.0002] # EGYPTIAN HIEROGLYPH D013 -13084 ; [.50CE.0020.0002] # EGYPTIAN HIEROGLYPH D014 -13085 ; [.50CF.0020.0002] # EGYPTIAN HIEROGLYPH D015 -13086 ; [.50D0.0020.0002] # EGYPTIAN HIEROGLYPH D016 -13087 ; [.50D1.0020.0002] # EGYPTIAN HIEROGLYPH D017 -13088 ; [.50D2.0020.0002] # EGYPTIAN HIEROGLYPH D018 -13089 ; [.50D3.0020.0002] # EGYPTIAN HIEROGLYPH D019 -1308A ; [.50D4.0020.0002] # EGYPTIAN HIEROGLYPH D020 -1308B ; [.50D5.0020.0002] # EGYPTIAN HIEROGLYPH D021 -1308C ; [.50D6.0020.0002] # EGYPTIAN HIEROGLYPH D022 -1308D ; [.50D7.0020.0002] # EGYPTIAN HIEROGLYPH D023 -1308E ; [.50D8.0020.0002] # EGYPTIAN HIEROGLYPH D024 -1308F ; [.50D9.0020.0002] # EGYPTIAN HIEROGLYPH D025 -13090 ; [.50DA.0020.0002] # EGYPTIAN HIEROGLYPH D026 -13091 ; [.50DB.0020.0002] # EGYPTIAN HIEROGLYPH D027 -13092 ; [.50DC.0020.0002] # EGYPTIAN HIEROGLYPH D027A -13093 ; [.50DD.0020.0002] # EGYPTIAN HIEROGLYPH D028 -13094 ; [.50DE.0020.0002] # EGYPTIAN HIEROGLYPH D029 -13095 ; [.50DF.0020.0002] # EGYPTIAN HIEROGLYPH D030 -13096 ; [.50E0.0020.0002] # EGYPTIAN HIEROGLYPH D031 -13097 ; [.50E1.0020.0002] # EGYPTIAN HIEROGLYPH D031A -13098 ; [.50E2.0020.0002] # EGYPTIAN HIEROGLYPH D032 -13099 ; [.50E3.0020.0002] # EGYPTIAN HIEROGLYPH D033 -1309A ; [.50E4.0020.0002] # EGYPTIAN HIEROGLYPH D034 -1309B ; [.50E5.0020.0002] # EGYPTIAN HIEROGLYPH D034A -1309C ; [.50E6.0020.0002] # EGYPTIAN HIEROGLYPH D035 -1309D ; [.50E7.0020.0002] # EGYPTIAN HIEROGLYPH D036 -1309E ; [.50E8.0020.0002] # EGYPTIAN HIEROGLYPH D037 -1309F ; [.50E9.0020.0002] # EGYPTIAN HIEROGLYPH D038 -130A0 ; [.50EA.0020.0002] # EGYPTIAN HIEROGLYPH D039 -130A1 ; [.50EB.0020.0002] # EGYPTIAN HIEROGLYPH D040 -130A2 ; [.50EC.0020.0002] # EGYPTIAN HIEROGLYPH D041 -130A3 ; [.50ED.0020.0002] # EGYPTIAN HIEROGLYPH D042 -130A4 ; [.50EE.0020.0002] # EGYPTIAN HIEROGLYPH D043 -130A5 ; [.50EF.0020.0002] # EGYPTIAN HIEROGLYPH D044 -130A6 ; [.50F0.0020.0002] # EGYPTIAN HIEROGLYPH D045 -130A7 ; [.50F1.0020.0002] # EGYPTIAN HIEROGLYPH D046 -130A8 ; [.50F2.0020.0002] # EGYPTIAN HIEROGLYPH D046A -130A9 ; [.50F3.0020.0002] # EGYPTIAN HIEROGLYPH D047 -130AA ; [.50F4.0020.0002] # EGYPTIAN HIEROGLYPH D048 -130AB ; [.50F5.0020.0002] # EGYPTIAN HIEROGLYPH D048A -130AC ; [.50F6.0020.0002] # EGYPTIAN HIEROGLYPH D049 -130AD ; [.50F7.0020.0002] # EGYPTIAN HIEROGLYPH D050 -130AE ; [.50F8.0020.0002] # EGYPTIAN HIEROGLYPH D050A -130AF ; [.50F9.0020.0002] # EGYPTIAN HIEROGLYPH D050B -130B0 ; [.50FA.0020.0002] # EGYPTIAN HIEROGLYPH D050C -130B1 ; [.50FB.0020.0002] # EGYPTIAN HIEROGLYPH D050D -130B2 ; [.50FC.0020.0002] # EGYPTIAN HIEROGLYPH D050E -130B3 ; [.50FD.0020.0002] # EGYPTIAN HIEROGLYPH D050F -130B4 ; [.50FE.0020.0002] # EGYPTIAN HIEROGLYPH D050G -130B5 ; [.50FF.0020.0002] # EGYPTIAN HIEROGLYPH D050H -130B6 ; [.5100.0020.0002] # EGYPTIAN HIEROGLYPH D050I -130B7 ; [.5101.0020.0002] # EGYPTIAN HIEROGLYPH D051 -130B8 ; [.5102.0020.0002] # EGYPTIAN HIEROGLYPH D052 -130B9 ; [.5103.0020.0002] # EGYPTIAN HIEROGLYPH D052A -130BA ; [.5104.0020.0002] # EGYPTIAN HIEROGLYPH D053 -130BB ; [.5105.0020.0002] # EGYPTIAN HIEROGLYPH D054 -130BC ; [.5106.0020.0002] # EGYPTIAN HIEROGLYPH D054A -130BD ; [.5107.0020.0002] # EGYPTIAN HIEROGLYPH D055 -130BE ; [.5108.0020.0002] # EGYPTIAN HIEROGLYPH D056 -130BF ; [.5109.0020.0002] # EGYPTIAN HIEROGLYPH D057 -130C0 ; [.510A.0020.0002] # EGYPTIAN HIEROGLYPH D058 -130C1 ; [.510B.0020.0002] # EGYPTIAN HIEROGLYPH D059 -130C2 ; [.510C.0020.0002] # EGYPTIAN HIEROGLYPH D060 -130C3 ; [.510D.0020.0002] # EGYPTIAN HIEROGLYPH D061 -130C4 ; [.510E.0020.0002] # EGYPTIAN HIEROGLYPH D062 -130C5 ; [.510F.0020.0002] # EGYPTIAN HIEROGLYPH D063 -130C6 ; [.5110.0020.0002] # EGYPTIAN HIEROGLYPH D064 -130C7 ; [.5111.0020.0002] # EGYPTIAN HIEROGLYPH D065 -130C8 ; [.5112.0020.0002] # EGYPTIAN HIEROGLYPH D066 -130C9 ; [.5113.0020.0002] # EGYPTIAN HIEROGLYPH D067 -130CA ; [.5114.0020.0002] # EGYPTIAN HIEROGLYPH D067A -130CB ; [.5115.0020.0002] # EGYPTIAN HIEROGLYPH D067B -130CC ; [.5116.0020.0002] # EGYPTIAN HIEROGLYPH D067C -130CD ; [.5117.0020.0002] # EGYPTIAN HIEROGLYPH D067D -130CE ; [.5118.0020.0002] # EGYPTIAN HIEROGLYPH D067E -130CF ; [.5119.0020.0002] # EGYPTIAN HIEROGLYPH D067F -130D0 ; [.511A.0020.0002] # EGYPTIAN HIEROGLYPH D067G -130D1 ; [.511B.0020.0002] # EGYPTIAN HIEROGLYPH D067H -130D2 ; [.511C.0020.0002] # EGYPTIAN HIEROGLYPH E001 -130D3 ; [.511D.0020.0002] # EGYPTIAN HIEROGLYPH E002 -130D4 ; [.511E.0020.0002] # EGYPTIAN HIEROGLYPH E003 -130D5 ; [.511F.0020.0002] # EGYPTIAN HIEROGLYPH E004 -130D6 ; [.5120.0020.0002] # EGYPTIAN HIEROGLYPH E005 -130D7 ; [.5121.0020.0002] # EGYPTIAN HIEROGLYPH E006 -130D8 ; [.5122.0020.0002] # EGYPTIAN HIEROGLYPH E007 -130D9 ; [.5123.0020.0002] # EGYPTIAN HIEROGLYPH E008 -130DA ; [.5124.0020.0002] # EGYPTIAN HIEROGLYPH E008A -130DB ; [.5125.0020.0002] # EGYPTIAN HIEROGLYPH E009 -130DC ; [.5126.0020.0002] # EGYPTIAN HIEROGLYPH E009A -130DD ; [.5127.0020.0002] # EGYPTIAN HIEROGLYPH E010 -130DE ; [.5128.0020.0002] # EGYPTIAN HIEROGLYPH E011 -130DF ; [.5129.0020.0002] # EGYPTIAN HIEROGLYPH E012 -130E0 ; [.512A.0020.0002] # EGYPTIAN HIEROGLYPH E013 -130E1 ; [.512B.0020.0002] # EGYPTIAN HIEROGLYPH E014 -130E2 ; [.512C.0020.0002] # EGYPTIAN HIEROGLYPH E015 -130E3 ; [.512D.0020.0002] # EGYPTIAN HIEROGLYPH E016 -130E4 ; [.512E.0020.0002] # EGYPTIAN HIEROGLYPH E016A -130E5 ; [.512F.0020.0002] # EGYPTIAN HIEROGLYPH E017 -130E6 ; [.5130.0020.0002] # EGYPTIAN HIEROGLYPH E017A -130E7 ; [.5131.0020.0002] # EGYPTIAN HIEROGLYPH E018 -130E8 ; [.5132.0020.0002] # EGYPTIAN HIEROGLYPH E019 -130E9 ; [.5133.0020.0002] # EGYPTIAN HIEROGLYPH E020 -130EA ; [.5134.0020.0002] # EGYPTIAN HIEROGLYPH E020A -130EB ; [.5135.0020.0002] # EGYPTIAN HIEROGLYPH E021 -130EC ; [.5136.0020.0002] # EGYPTIAN HIEROGLYPH E022 -130ED ; [.5137.0020.0002] # EGYPTIAN HIEROGLYPH E023 -130EE ; [.5138.0020.0002] # EGYPTIAN HIEROGLYPH E024 -130EF ; [.5139.0020.0002] # EGYPTIAN HIEROGLYPH E025 -130F0 ; [.513A.0020.0002] # EGYPTIAN HIEROGLYPH E026 -130F1 ; [.513B.0020.0002] # EGYPTIAN HIEROGLYPH E027 -130F2 ; [.513C.0020.0002] # EGYPTIAN HIEROGLYPH E028 -130F3 ; [.513D.0020.0002] # EGYPTIAN HIEROGLYPH E028A -130F4 ; [.513E.0020.0002] # EGYPTIAN HIEROGLYPH E029 -130F5 ; [.513F.0020.0002] # EGYPTIAN HIEROGLYPH E030 -130F6 ; [.5140.0020.0002] # EGYPTIAN HIEROGLYPH E031 -130F7 ; [.5141.0020.0002] # EGYPTIAN HIEROGLYPH E032 -130F8 ; [.5142.0020.0002] # EGYPTIAN HIEROGLYPH E033 -130F9 ; [.5143.0020.0002] # EGYPTIAN HIEROGLYPH E034 -130FA ; [.5144.0020.0002] # EGYPTIAN HIEROGLYPH E034A -130FB ; [.5145.0020.0002] # EGYPTIAN HIEROGLYPH E036 -130FC ; [.5146.0020.0002] # EGYPTIAN HIEROGLYPH E037 -130FD ; [.5147.0020.0002] # EGYPTIAN HIEROGLYPH E038 -130FE ; [.5148.0020.0002] # EGYPTIAN HIEROGLYPH F001 -130FF ; [.5149.0020.0002] # EGYPTIAN HIEROGLYPH F001A -13100 ; [.514A.0020.0002] # EGYPTIAN HIEROGLYPH F002 -13101 ; [.514B.0020.0002] # EGYPTIAN HIEROGLYPH F003 -13102 ; [.514C.0020.0002] # EGYPTIAN HIEROGLYPH F004 -13103 ; [.514D.0020.0002] # EGYPTIAN HIEROGLYPH F005 -13104 ; [.514E.0020.0002] # EGYPTIAN HIEROGLYPH F006 -13105 ; [.514F.0020.0002] # EGYPTIAN HIEROGLYPH F007 -13106 ; [.5150.0020.0002] # EGYPTIAN HIEROGLYPH F008 -13107 ; [.5151.0020.0002] # EGYPTIAN HIEROGLYPH F009 -13108 ; [.5152.0020.0002] # EGYPTIAN HIEROGLYPH F010 -13109 ; [.5153.0020.0002] # EGYPTIAN HIEROGLYPH F011 -1310A ; [.5154.0020.0002] # EGYPTIAN HIEROGLYPH F012 -1310B ; [.5155.0020.0002] # EGYPTIAN HIEROGLYPH F013 -1310C ; [.5156.0020.0002] # EGYPTIAN HIEROGLYPH F013A -1310D ; [.5157.0020.0002] # EGYPTIAN HIEROGLYPH F014 -1310E ; [.5158.0020.0002] # EGYPTIAN HIEROGLYPH F015 -1310F ; [.5159.0020.0002] # EGYPTIAN HIEROGLYPH F016 -13110 ; [.515A.0020.0002] # EGYPTIAN HIEROGLYPH F017 -13111 ; [.515B.0020.0002] # EGYPTIAN HIEROGLYPH F018 -13112 ; [.515C.0020.0002] # EGYPTIAN HIEROGLYPH F019 -13113 ; [.515D.0020.0002] # EGYPTIAN HIEROGLYPH F020 -13114 ; [.515E.0020.0002] # EGYPTIAN HIEROGLYPH F021 -13115 ; [.515F.0020.0002] # EGYPTIAN HIEROGLYPH F021A -13116 ; [.5160.0020.0002] # EGYPTIAN HIEROGLYPH F022 -13117 ; [.5161.0020.0002] # EGYPTIAN HIEROGLYPH F023 -13118 ; [.5162.0020.0002] # EGYPTIAN HIEROGLYPH F024 -13119 ; [.5163.0020.0002] # EGYPTIAN HIEROGLYPH F025 -1311A ; [.5164.0020.0002] # EGYPTIAN HIEROGLYPH F026 -1311B ; [.5165.0020.0002] # EGYPTIAN HIEROGLYPH F027 -1311C ; [.5166.0020.0002] # EGYPTIAN HIEROGLYPH F028 -1311D ; [.5167.0020.0002] # EGYPTIAN HIEROGLYPH F029 -1311E ; [.5168.0020.0002] # EGYPTIAN HIEROGLYPH F030 -1311F ; [.5169.0020.0002] # EGYPTIAN HIEROGLYPH F031 -13120 ; [.516A.0020.0002] # EGYPTIAN HIEROGLYPH F031A -13121 ; [.516B.0020.0002] # EGYPTIAN HIEROGLYPH F032 -13122 ; [.516C.0020.0002] # EGYPTIAN HIEROGLYPH F033 -13123 ; [.516D.0020.0002] # EGYPTIAN HIEROGLYPH F034 -13124 ; [.516E.0020.0002] # EGYPTIAN HIEROGLYPH F035 -13125 ; [.516F.0020.0002] # EGYPTIAN HIEROGLYPH F036 -13126 ; [.5170.0020.0002] # EGYPTIAN HIEROGLYPH F037 -13127 ; [.5171.0020.0002] # EGYPTIAN HIEROGLYPH F037A -13128 ; [.5172.0020.0002] # EGYPTIAN HIEROGLYPH F038 -13129 ; [.5173.0020.0002] # EGYPTIAN HIEROGLYPH F038A -1312A ; [.5174.0020.0002] # EGYPTIAN HIEROGLYPH F039 -1312B ; [.5175.0020.0002] # EGYPTIAN HIEROGLYPH F040 -1312C ; [.5176.0020.0002] # EGYPTIAN HIEROGLYPH F041 -1312D ; [.5177.0020.0002] # EGYPTIAN HIEROGLYPH F042 -1312E ; [.5178.0020.0002] # EGYPTIAN HIEROGLYPH F043 -1312F ; [.5179.0020.0002] # EGYPTIAN HIEROGLYPH F044 -13130 ; [.517A.0020.0002] # EGYPTIAN HIEROGLYPH F045 -13131 ; [.517B.0020.0002] # EGYPTIAN HIEROGLYPH F045A -13132 ; [.517C.0020.0002] # EGYPTIAN HIEROGLYPH F046 -13133 ; [.517D.0020.0002] # EGYPTIAN HIEROGLYPH F046A -13134 ; [.517E.0020.0002] # EGYPTIAN HIEROGLYPH F047 -13135 ; [.517F.0020.0002] # EGYPTIAN HIEROGLYPH F047A -13136 ; [.5180.0020.0002] # EGYPTIAN HIEROGLYPH F048 -13137 ; [.5181.0020.0002] # EGYPTIAN HIEROGLYPH F049 -13138 ; [.5182.0020.0002] # EGYPTIAN HIEROGLYPH F050 -13139 ; [.5183.0020.0002] # EGYPTIAN HIEROGLYPH F051 -1313A ; [.5184.0020.0002] # EGYPTIAN HIEROGLYPH F051A -1313B ; [.5185.0020.0002] # EGYPTIAN HIEROGLYPH F051B -1313C ; [.5186.0020.0002] # EGYPTIAN HIEROGLYPH F051C -1313D ; [.5187.0020.0002] # EGYPTIAN HIEROGLYPH F052 -1313E ; [.5188.0020.0002] # EGYPTIAN HIEROGLYPH F053 -1313F ; [.5189.0020.0002] # EGYPTIAN HIEROGLYPH G001 -13140 ; [.518A.0020.0002] # EGYPTIAN HIEROGLYPH G002 -13141 ; [.518B.0020.0002] # EGYPTIAN HIEROGLYPH G003 -13142 ; [.518C.0020.0002] # EGYPTIAN HIEROGLYPH G004 -13143 ; [.518D.0020.0002] # EGYPTIAN HIEROGLYPH G005 -13144 ; [.518E.0020.0002] # EGYPTIAN HIEROGLYPH G006 -13145 ; [.518F.0020.0002] # EGYPTIAN HIEROGLYPH G006A -13146 ; [.5190.0020.0002] # EGYPTIAN HIEROGLYPH G007 -13147 ; [.5191.0020.0002] # EGYPTIAN HIEROGLYPH G007A -13148 ; [.5192.0020.0002] # EGYPTIAN HIEROGLYPH G007B -13149 ; [.5193.0020.0002] # EGYPTIAN HIEROGLYPH G008 -1314A ; [.5194.0020.0002] # EGYPTIAN HIEROGLYPH G009 -1314B ; [.5195.0020.0002] # EGYPTIAN HIEROGLYPH G010 -1314C ; [.5196.0020.0002] # EGYPTIAN HIEROGLYPH G011 -1314D ; [.5197.0020.0002] # EGYPTIAN HIEROGLYPH G011A -1314E ; [.5198.0020.0002] # EGYPTIAN HIEROGLYPH G012 -1314F ; [.5199.0020.0002] # EGYPTIAN HIEROGLYPH G013 -13150 ; [.519A.0020.0002] # EGYPTIAN HIEROGLYPH G014 -13151 ; [.519B.0020.0002] # EGYPTIAN HIEROGLYPH G015 -13152 ; [.519C.0020.0002] # EGYPTIAN HIEROGLYPH G016 -13153 ; [.519D.0020.0002] # EGYPTIAN HIEROGLYPH G017 -13154 ; [.519E.0020.0002] # EGYPTIAN HIEROGLYPH G018 -13155 ; [.519F.0020.0002] # EGYPTIAN HIEROGLYPH G019 -13156 ; [.51A0.0020.0002] # EGYPTIAN HIEROGLYPH G020 -13157 ; [.51A1.0020.0002] # EGYPTIAN HIEROGLYPH G020A -13158 ; [.51A2.0020.0002] # EGYPTIAN HIEROGLYPH G021 -13159 ; [.51A3.0020.0002] # EGYPTIAN HIEROGLYPH G022 -1315A ; [.51A4.0020.0002] # EGYPTIAN HIEROGLYPH G023 -1315B ; [.51A5.0020.0002] # EGYPTIAN HIEROGLYPH G024 -1315C ; [.51A6.0020.0002] # EGYPTIAN HIEROGLYPH G025 -1315D ; [.51A7.0020.0002] # EGYPTIAN HIEROGLYPH G026 -1315E ; [.51A8.0020.0002] # EGYPTIAN HIEROGLYPH G026A -1315F ; [.51A9.0020.0002] # EGYPTIAN HIEROGLYPH G027 -13160 ; [.51AA.0020.0002] # EGYPTIAN HIEROGLYPH G028 -13161 ; [.51AB.0020.0002] # EGYPTIAN HIEROGLYPH G029 -13162 ; [.51AC.0020.0002] # EGYPTIAN HIEROGLYPH G030 -13163 ; [.51AD.0020.0002] # EGYPTIAN HIEROGLYPH G031 -13164 ; [.51AE.0020.0002] # EGYPTIAN HIEROGLYPH G032 -13165 ; [.51AF.0020.0002] # EGYPTIAN HIEROGLYPH G033 -13166 ; [.51B0.0020.0002] # EGYPTIAN HIEROGLYPH G034 -13167 ; [.51B1.0020.0002] # EGYPTIAN HIEROGLYPH G035 -13168 ; [.51B2.0020.0002] # EGYPTIAN HIEROGLYPH G036 -13169 ; [.51B3.0020.0002] # EGYPTIAN HIEROGLYPH G036A -1316A ; [.51B4.0020.0002] # EGYPTIAN HIEROGLYPH G037 -1316B ; [.51B5.0020.0002] # EGYPTIAN HIEROGLYPH G037A -1316C ; [.51B6.0020.0002] # EGYPTIAN HIEROGLYPH G038 -1316D ; [.51B7.0020.0002] # EGYPTIAN HIEROGLYPH G039 -1316E ; [.51B8.0020.0002] # EGYPTIAN HIEROGLYPH G040 -1316F ; [.51B9.0020.0002] # EGYPTIAN HIEROGLYPH G041 -13170 ; [.51BA.0020.0002] # EGYPTIAN HIEROGLYPH G042 -13171 ; [.51BB.0020.0002] # EGYPTIAN HIEROGLYPH G043 -13172 ; [.51BC.0020.0002] # EGYPTIAN HIEROGLYPH G043A -13173 ; [.51BD.0020.0002] # EGYPTIAN HIEROGLYPH G044 -13174 ; [.51BE.0020.0002] # EGYPTIAN HIEROGLYPH G045 -13175 ; [.51BF.0020.0002] # EGYPTIAN HIEROGLYPH G045A -13176 ; [.51C0.0020.0002] # EGYPTIAN HIEROGLYPH G046 -13177 ; [.51C1.0020.0002] # EGYPTIAN HIEROGLYPH G047 -13178 ; [.51C2.0020.0002] # EGYPTIAN HIEROGLYPH G048 -13179 ; [.51C3.0020.0002] # EGYPTIAN HIEROGLYPH G049 -1317A ; [.51C4.0020.0002] # EGYPTIAN HIEROGLYPH G050 -1317B ; [.51C5.0020.0002] # EGYPTIAN HIEROGLYPH G051 -1317C ; [.51C6.0020.0002] # EGYPTIAN HIEROGLYPH G052 -1317D ; [.51C7.0020.0002] # EGYPTIAN HIEROGLYPH G053 -1317E ; [.51C8.0020.0002] # EGYPTIAN HIEROGLYPH G054 -1317F ; [.51C9.0020.0002] # EGYPTIAN HIEROGLYPH H001 -13180 ; [.51CA.0020.0002] # EGYPTIAN HIEROGLYPH H002 -13181 ; [.51CB.0020.0002] # EGYPTIAN HIEROGLYPH H003 -13182 ; [.51CC.0020.0002] # EGYPTIAN HIEROGLYPH H004 -13183 ; [.51CD.0020.0002] # EGYPTIAN HIEROGLYPH H005 -13184 ; [.51CE.0020.0002] # EGYPTIAN HIEROGLYPH H006 -13185 ; [.51CF.0020.0002] # EGYPTIAN HIEROGLYPH H006A -13186 ; [.51D0.0020.0002] # EGYPTIAN HIEROGLYPH H007 -13187 ; [.51D1.0020.0002] # EGYPTIAN HIEROGLYPH H008 -13188 ; [.51D2.0020.0002] # EGYPTIAN HIEROGLYPH I001 -13189 ; [.51D3.0020.0002] # EGYPTIAN HIEROGLYPH I002 -1318A ; [.51D4.0020.0002] # EGYPTIAN HIEROGLYPH I003 -1318B ; [.51D5.0020.0002] # EGYPTIAN HIEROGLYPH I004 -1318C ; [.51D6.0020.0002] # EGYPTIAN HIEROGLYPH I005 -1318D ; [.51D7.0020.0002] # EGYPTIAN HIEROGLYPH I005A -1318E ; [.51D8.0020.0002] # EGYPTIAN HIEROGLYPH I006 -1318F ; [.51D9.0020.0002] # EGYPTIAN HIEROGLYPH I007 -13190 ; [.51DA.0020.0002] # EGYPTIAN HIEROGLYPH I008 -13191 ; [.51DB.0020.0002] # EGYPTIAN HIEROGLYPH I009 -13192 ; [.51DC.0020.0002] # EGYPTIAN HIEROGLYPH I009A -13193 ; [.51DD.0020.0002] # EGYPTIAN HIEROGLYPH I010 -13194 ; [.51DE.0020.0002] # EGYPTIAN HIEROGLYPH I010A -13195 ; [.51DF.0020.0002] # EGYPTIAN HIEROGLYPH I011 -13196 ; [.51E0.0020.0002] # EGYPTIAN HIEROGLYPH I011A -13197 ; [.51E1.0020.0002] # EGYPTIAN HIEROGLYPH I012 -13198 ; [.51E2.0020.0002] # EGYPTIAN HIEROGLYPH I013 -13199 ; [.51E3.0020.0002] # EGYPTIAN HIEROGLYPH I014 -1319A ; [.51E4.0020.0002] # EGYPTIAN HIEROGLYPH I015 -1319B ; [.51E5.0020.0002] # EGYPTIAN HIEROGLYPH K001 -1319C ; [.51E6.0020.0002] # EGYPTIAN HIEROGLYPH K002 -1319D ; [.51E7.0020.0002] # EGYPTIAN HIEROGLYPH K003 -1319E ; [.51E8.0020.0002] # EGYPTIAN HIEROGLYPH K004 -1319F ; [.51E9.0020.0002] # EGYPTIAN HIEROGLYPH K005 -131A0 ; [.51EA.0020.0002] # EGYPTIAN HIEROGLYPH K006 -131A1 ; [.51EB.0020.0002] # EGYPTIAN HIEROGLYPH K007 -131A2 ; [.51EC.0020.0002] # EGYPTIAN HIEROGLYPH K008 -131A3 ; [.51ED.0020.0002] # EGYPTIAN HIEROGLYPH L001 -131A4 ; [.51EE.0020.0002] # EGYPTIAN HIEROGLYPH L002 -131A5 ; [.51EF.0020.0002] # EGYPTIAN HIEROGLYPH L002A -131A6 ; [.51F0.0020.0002] # EGYPTIAN HIEROGLYPH L003 -131A7 ; [.51F1.0020.0002] # EGYPTIAN HIEROGLYPH L004 -131A8 ; [.51F2.0020.0002] # EGYPTIAN HIEROGLYPH L005 -131A9 ; [.51F3.0020.0002] # EGYPTIAN HIEROGLYPH L006 -131AA ; [.51F4.0020.0002] # EGYPTIAN HIEROGLYPH L006A -131AB ; [.51F5.0020.0002] # EGYPTIAN HIEROGLYPH L007 -131AC ; [.51F6.0020.0002] # EGYPTIAN HIEROGLYPH L008 -131AD ; [.51F7.0020.0002] # EGYPTIAN HIEROGLYPH M001 -131AE ; [.51F8.0020.0002] # EGYPTIAN HIEROGLYPH M001A -131AF ; [.51F9.0020.0002] # EGYPTIAN HIEROGLYPH M001B -131B0 ; [.51FA.0020.0002] # EGYPTIAN HIEROGLYPH M002 -131B1 ; [.51FB.0020.0002] # EGYPTIAN HIEROGLYPH M003 -131B2 ; [.51FC.0020.0002] # EGYPTIAN HIEROGLYPH M003A -131B3 ; [.51FD.0020.0002] # EGYPTIAN HIEROGLYPH M004 -131B4 ; [.51FE.0020.0002] # EGYPTIAN HIEROGLYPH M005 -131B5 ; [.51FF.0020.0002] # EGYPTIAN HIEROGLYPH M006 -131B6 ; [.5200.0020.0002] # EGYPTIAN HIEROGLYPH M007 -131B7 ; [.5201.0020.0002] # EGYPTIAN HIEROGLYPH M008 -131B8 ; [.5202.0020.0002] # EGYPTIAN HIEROGLYPH M009 -131B9 ; [.5203.0020.0002] # EGYPTIAN HIEROGLYPH M010 -131BA ; [.5204.0020.0002] # EGYPTIAN HIEROGLYPH M010A -131BB ; [.5205.0020.0002] # EGYPTIAN HIEROGLYPH M011 -131BC ; [.5206.0020.0002] # EGYPTIAN HIEROGLYPH M012 -131BD ; [.5207.0020.0002] # EGYPTIAN HIEROGLYPH M012A -131BE ; [.5208.0020.0002] # EGYPTIAN HIEROGLYPH M012B -131BF ; [.5209.0020.0002] # EGYPTIAN HIEROGLYPH M012C -131C0 ; [.520A.0020.0002] # EGYPTIAN HIEROGLYPH M012D -131C1 ; [.520B.0020.0002] # EGYPTIAN HIEROGLYPH M012E -131C2 ; [.520C.0020.0002] # EGYPTIAN HIEROGLYPH M012F -131C3 ; [.520D.0020.0002] # EGYPTIAN HIEROGLYPH M012G -131C4 ; [.520E.0020.0002] # EGYPTIAN HIEROGLYPH M012H -131C5 ; [.520F.0020.0002] # EGYPTIAN HIEROGLYPH M013 -131C6 ; [.5210.0020.0002] # EGYPTIAN HIEROGLYPH M014 -131C7 ; [.5211.0020.0002] # EGYPTIAN HIEROGLYPH M015 -131C8 ; [.5212.0020.0002] # EGYPTIAN HIEROGLYPH M015A -131C9 ; [.5213.0020.0002] # EGYPTIAN HIEROGLYPH M016 -131CA ; [.5214.0020.0002] # EGYPTIAN HIEROGLYPH M016A -131CB ; [.5215.0020.0002] # EGYPTIAN HIEROGLYPH M017 -131CC ; [.5216.0020.0002] # EGYPTIAN HIEROGLYPH M017A -131CD ; [.5217.0020.0002] # EGYPTIAN HIEROGLYPH M018 -131CE ; [.5218.0020.0002] # EGYPTIAN HIEROGLYPH M019 -131CF ; [.5219.0020.0002] # EGYPTIAN HIEROGLYPH M020 -131D0 ; [.521A.0020.0002] # EGYPTIAN HIEROGLYPH M021 -131D1 ; [.521B.0020.0002] # EGYPTIAN HIEROGLYPH M022 -131D2 ; [.521C.0020.0002] # EGYPTIAN HIEROGLYPH M022A -131D3 ; [.521D.0020.0002] # EGYPTIAN HIEROGLYPH M023 -131D4 ; [.521E.0020.0002] # EGYPTIAN HIEROGLYPH M024 -131D5 ; [.521F.0020.0002] # EGYPTIAN HIEROGLYPH M024A -131D6 ; [.5220.0020.0002] # EGYPTIAN HIEROGLYPH M025 -131D7 ; [.5221.0020.0002] # EGYPTIAN HIEROGLYPH M026 -131D8 ; [.5222.0020.0002] # EGYPTIAN HIEROGLYPH M027 -131D9 ; [.5223.0020.0002] # EGYPTIAN HIEROGLYPH M028 -131DA ; [.5224.0020.0002] # EGYPTIAN HIEROGLYPH M028A -131DB ; [.5225.0020.0002] # EGYPTIAN HIEROGLYPH M029 -131DC ; [.5226.0020.0002] # EGYPTIAN HIEROGLYPH M030 -131DD ; [.5227.0020.0002] # EGYPTIAN HIEROGLYPH M031 -131DE ; [.5228.0020.0002] # EGYPTIAN HIEROGLYPH M031A -131DF ; [.5229.0020.0002] # EGYPTIAN HIEROGLYPH M032 -131E0 ; [.522A.0020.0002] # EGYPTIAN HIEROGLYPH M033 -131E1 ; [.522B.0020.0002] # EGYPTIAN HIEROGLYPH M033A -131E2 ; [.522C.0020.0002] # EGYPTIAN HIEROGLYPH M033B -131E3 ; [.522D.0020.0002] # EGYPTIAN HIEROGLYPH M034 -131E4 ; [.522E.0020.0002] # EGYPTIAN HIEROGLYPH M035 -131E5 ; [.522F.0020.0002] # EGYPTIAN HIEROGLYPH M036 -131E6 ; [.5230.0020.0002] # EGYPTIAN HIEROGLYPH M037 -131E7 ; [.5231.0020.0002] # EGYPTIAN HIEROGLYPH M038 -131E8 ; [.5232.0020.0002] # EGYPTIAN HIEROGLYPH M039 -131E9 ; [.5233.0020.0002] # EGYPTIAN HIEROGLYPH M040 -131EA ; [.5234.0020.0002] # EGYPTIAN HIEROGLYPH M040A -131EB ; [.5235.0020.0002] # EGYPTIAN HIEROGLYPH M041 -131EC ; [.5236.0020.0002] # EGYPTIAN HIEROGLYPH M042 -131ED ; [.5237.0020.0002] # EGYPTIAN HIEROGLYPH M043 -131EE ; [.5238.0020.0002] # EGYPTIAN HIEROGLYPH M044 -131EF ; [.5239.0020.0002] # EGYPTIAN HIEROGLYPH N001 -131F0 ; [.523A.0020.0002] # EGYPTIAN HIEROGLYPH N002 -131F1 ; [.523B.0020.0002] # EGYPTIAN HIEROGLYPH N003 -131F2 ; [.523C.0020.0002] # EGYPTIAN HIEROGLYPH N004 -131F3 ; [.523D.0020.0002] # EGYPTIAN HIEROGLYPH N005 -131F4 ; [.523E.0020.0002] # EGYPTIAN HIEROGLYPH N006 -131F5 ; [.523F.0020.0002] # EGYPTIAN HIEROGLYPH N007 -131F6 ; [.5240.0020.0002] # EGYPTIAN HIEROGLYPH N008 -131F7 ; [.5241.0020.0002] # EGYPTIAN HIEROGLYPH N009 -131F8 ; [.5242.0020.0002] # EGYPTIAN HIEROGLYPH N010 -131F9 ; [.5243.0020.0002] # EGYPTIAN HIEROGLYPH N011 -131FA ; [.5244.0020.0002] # EGYPTIAN HIEROGLYPH N012 -131FB ; [.5245.0020.0002] # EGYPTIAN HIEROGLYPH N013 -131FC ; [.5246.0020.0002] # EGYPTIAN HIEROGLYPH N014 -131FD ; [.5247.0020.0002] # EGYPTIAN HIEROGLYPH N015 -131FE ; [.5248.0020.0002] # EGYPTIAN HIEROGLYPH N016 -131FF ; [.5249.0020.0002] # EGYPTIAN HIEROGLYPH N017 -13200 ; [.524A.0020.0002] # EGYPTIAN HIEROGLYPH N018 -13201 ; [.524B.0020.0002] # EGYPTIAN HIEROGLYPH N018A -13202 ; [.524C.0020.0002] # EGYPTIAN HIEROGLYPH N018B -13203 ; [.524D.0020.0002] # EGYPTIAN HIEROGLYPH N019 -13204 ; [.524E.0020.0002] # EGYPTIAN HIEROGLYPH N020 -13205 ; [.524F.0020.0002] # EGYPTIAN HIEROGLYPH N021 -13206 ; [.5250.0020.0002] # EGYPTIAN HIEROGLYPH N022 -13207 ; [.5251.0020.0002] # EGYPTIAN HIEROGLYPH N023 -13208 ; [.5252.0020.0002] # EGYPTIAN HIEROGLYPH N024 -13209 ; [.5253.0020.0002] # EGYPTIAN HIEROGLYPH N025 -1320A ; [.5254.0020.0002] # EGYPTIAN HIEROGLYPH N025A -1320B ; [.5255.0020.0002] # EGYPTIAN HIEROGLYPH N026 -1320C ; [.5256.0020.0002] # EGYPTIAN HIEROGLYPH N027 -1320D ; [.5257.0020.0002] # EGYPTIAN HIEROGLYPH N028 -1320E ; [.5258.0020.0002] # EGYPTIAN HIEROGLYPH N029 -1320F ; [.5259.0020.0002] # EGYPTIAN HIEROGLYPH N030 -13210 ; [.525A.0020.0002] # EGYPTIAN HIEROGLYPH N031 -13211 ; [.525B.0020.0002] # EGYPTIAN HIEROGLYPH N032 -13212 ; [.525C.0020.0002] # EGYPTIAN HIEROGLYPH N033 -13213 ; [.525D.0020.0002] # EGYPTIAN HIEROGLYPH N033A -13214 ; [.525E.0020.0002] # EGYPTIAN HIEROGLYPH N034 -13215 ; [.525F.0020.0002] # EGYPTIAN HIEROGLYPH N034A -13216 ; [.5260.0020.0002] # EGYPTIAN HIEROGLYPH N035 -13217 ; [.5261.0020.0002] # EGYPTIAN HIEROGLYPH N035A -13218 ; [.5262.0020.0002] # EGYPTIAN HIEROGLYPH N036 -13219 ; [.5263.0020.0002] # EGYPTIAN HIEROGLYPH N037 -1321A ; [.5264.0020.0002] # EGYPTIAN HIEROGLYPH N037A -1321B ; [.5265.0020.0002] # EGYPTIAN HIEROGLYPH N038 -1321C ; [.5266.0020.0002] # EGYPTIAN HIEROGLYPH N039 -1321D ; [.5267.0020.0002] # EGYPTIAN HIEROGLYPH N040 -1321E ; [.5268.0020.0002] # EGYPTIAN HIEROGLYPH N041 -1321F ; [.5269.0020.0002] # EGYPTIAN HIEROGLYPH N042 -13220 ; [.526A.0020.0002] # EGYPTIAN HIEROGLYPH NL001 -13221 ; [.526B.0020.0002] # EGYPTIAN HIEROGLYPH NL002 -13222 ; [.526C.0020.0002] # EGYPTIAN HIEROGLYPH NL003 -13223 ; [.526D.0020.0002] # EGYPTIAN HIEROGLYPH NL004 -13224 ; [.526E.0020.0002] # EGYPTIAN HIEROGLYPH NL005 -13225 ; [.526F.0020.0002] # EGYPTIAN HIEROGLYPH NL005A -13226 ; [.5270.0020.0002] # EGYPTIAN HIEROGLYPH NL006 -13227 ; [.5271.0020.0002] # EGYPTIAN HIEROGLYPH NL007 -13228 ; [.5272.0020.0002] # EGYPTIAN HIEROGLYPH NL008 -13229 ; [.5273.0020.0002] # EGYPTIAN HIEROGLYPH NL009 -1322A ; [.5274.0020.0002] # EGYPTIAN HIEROGLYPH NL010 -1322B ; [.5275.0020.0002] # EGYPTIAN HIEROGLYPH NL011 -1322C ; [.5276.0020.0002] # EGYPTIAN HIEROGLYPH NL012 -1322D ; [.5277.0020.0002] # EGYPTIAN HIEROGLYPH NL013 -1322E ; [.5278.0020.0002] # EGYPTIAN HIEROGLYPH NL014 -1322F ; [.5279.0020.0002] # EGYPTIAN HIEROGLYPH NL015 -13230 ; [.527A.0020.0002] # EGYPTIAN HIEROGLYPH NL016 -13231 ; [.527B.0020.0002] # EGYPTIAN HIEROGLYPH NL017 -13232 ; [.527C.0020.0002] # EGYPTIAN HIEROGLYPH NL017A -13233 ; [.527D.0020.0002] # EGYPTIAN HIEROGLYPH NL018 -13234 ; [.527E.0020.0002] # EGYPTIAN HIEROGLYPH NL019 -13235 ; [.527F.0020.0002] # EGYPTIAN HIEROGLYPH NL020 -13236 ; [.5280.0020.0002] # EGYPTIAN HIEROGLYPH NU001 -13237 ; [.5281.0020.0002] # EGYPTIAN HIEROGLYPH NU002 -13238 ; [.5282.0020.0002] # EGYPTIAN HIEROGLYPH NU003 -13239 ; [.5283.0020.0002] # EGYPTIAN HIEROGLYPH NU004 -1323A ; [.5284.0020.0002] # EGYPTIAN HIEROGLYPH NU005 -1323B ; [.5285.0020.0002] # EGYPTIAN HIEROGLYPH NU006 -1323C ; [.5286.0020.0002] # EGYPTIAN HIEROGLYPH NU007 -1323D ; [.5287.0020.0002] # EGYPTIAN HIEROGLYPH NU008 -1323E ; [.5288.0020.0002] # EGYPTIAN HIEROGLYPH NU009 -1323F ; [.5289.0020.0002] # EGYPTIAN HIEROGLYPH NU010 -13240 ; [.528A.0020.0002] # EGYPTIAN HIEROGLYPH NU010A -13241 ; [.528B.0020.0002] # EGYPTIAN HIEROGLYPH NU011 -13242 ; [.528C.0020.0002] # EGYPTIAN HIEROGLYPH NU011A -13243 ; [.528D.0020.0002] # EGYPTIAN HIEROGLYPH NU012 -13244 ; [.528E.0020.0002] # EGYPTIAN HIEROGLYPH NU013 -13245 ; [.528F.0020.0002] # EGYPTIAN HIEROGLYPH NU014 -13246 ; [.5290.0020.0002] # EGYPTIAN HIEROGLYPH NU015 -13247 ; [.5291.0020.0002] # EGYPTIAN HIEROGLYPH NU016 -13248 ; [.5292.0020.0002] # EGYPTIAN HIEROGLYPH NU017 -13249 ; [.5293.0020.0002] # EGYPTIAN HIEROGLYPH NU018 -1324A ; [.5294.0020.0002] # EGYPTIAN HIEROGLYPH NU018A -1324B ; [.5295.0020.0002] # EGYPTIAN HIEROGLYPH NU019 -1324C ; [.5296.0020.0002] # EGYPTIAN HIEROGLYPH NU020 -1324D ; [.5297.0020.0002] # EGYPTIAN HIEROGLYPH NU021 -1324E ; [.5298.0020.0002] # EGYPTIAN HIEROGLYPH NU022 -1324F ; [.5299.0020.0002] # EGYPTIAN HIEROGLYPH NU022A -13250 ; [.529A.0020.0002] # EGYPTIAN HIEROGLYPH O001 -13251 ; [.529B.0020.0002] # EGYPTIAN HIEROGLYPH O001A -13252 ; [.529C.0020.0002] # EGYPTIAN HIEROGLYPH O002 -13253 ; [.529D.0020.0002] # EGYPTIAN HIEROGLYPH O003 -13254 ; [.529E.0020.0002] # EGYPTIAN HIEROGLYPH O004 -13255 ; [.529F.0020.0002] # EGYPTIAN HIEROGLYPH O005 -13256 ; [.52A0.0020.0002] # EGYPTIAN HIEROGLYPH O005A -13257 ; [.52A1.0020.0002] # EGYPTIAN HIEROGLYPH O006 -13258 ; [.52A2.0020.0002] # EGYPTIAN HIEROGLYPH O006A -13259 ; [.52A3.0020.0002] # EGYPTIAN HIEROGLYPH O006B -1325A ; [.52A4.0020.0002] # EGYPTIAN HIEROGLYPH O006C -1325B ; [.52A5.0020.0002] # EGYPTIAN HIEROGLYPH O006D -1325C ; [.52A6.0020.0002] # EGYPTIAN HIEROGLYPH O006E -1325D ; [.52A7.0020.0002] # EGYPTIAN HIEROGLYPH O006F -1325E ; [.52A8.0020.0002] # EGYPTIAN HIEROGLYPH O007 -1325F ; [.52A9.0020.0002] # EGYPTIAN HIEROGLYPH O008 -13260 ; [.52AA.0020.0002] # EGYPTIAN HIEROGLYPH O009 -13261 ; [.52AB.0020.0002] # EGYPTIAN HIEROGLYPH O010 -13262 ; [.52AC.0020.0002] # EGYPTIAN HIEROGLYPH O010A -13263 ; [.52AD.0020.0002] # EGYPTIAN HIEROGLYPH O010B -13264 ; [.52AE.0020.0002] # EGYPTIAN HIEROGLYPH O010C -13265 ; [.52AF.0020.0002] # EGYPTIAN HIEROGLYPH O011 -13266 ; [.52B0.0020.0002] # EGYPTIAN HIEROGLYPH O012 -13267 ; [.52B1.0020.0002] # EGYPTIAN HIEROGLYPH O013 -13268 ; [.52B2.0020.0002] # EGYPTIAN HIEROGLYPH O014 -13269 ; [.52B3.0020.0002] # EGYPTIAN HIEROGLYPH O015 -1326A ; [.52B4.0020.0002] # EGYPTIAN HIEROGLYPH O016 -1326B ; [.52B5.0020.0002] # EGYPTIAN HIEROGLYPH O017 -1326C ; [.52B6.0020.0002] # EGYPTIAN HIEROGLYPH O018 -1326D ; [.52B7.0020.0002] # EGYPTIAN HIEROGLYPH O019 -1326E ; [.52B8.0020.0002] # EGYPTIAN HIEROGLYPH O019A -1326F ; [.52B9.0020.0002] # EGYPTIAN HIEROGLYPH O020 -13270 ; [.52BA.0020.0002] # EGYPTIAN HIEROGLYPH O020A -13271 ; [.52BB.0020.0002] # EGYPTIAN HIEROGLYPH O021 -13272 ; [.52BC.0020.0002] # EGYPTIAN HIEROGLYPH O022 -13273 ; [.52BD.0020.0002] # EGYPTIAN HIEROGLYPH O023 -13274 ; [.52BE.0020.0002] # EGYPTIAN HIEROGLYPH O024 -13275 ; [.52BF.0020.0002] # EGYPTIAN HIEROGLYPH O024A -13276 ; [.52C0.0020.0002] # EGYPTIAN HIEROGLYPH O025 -13277 ; [.52C1.0020.0002] # EGYPTIAN HIEROGLYPH O025A -13278 ; [.52C2.0020.0002] # EGYPTIAN HIEROGLYPH O026 -13279 ; [.52C3.0020.0002] # EGYPTIAN HIEROGLYPH O027 -1327A ; [.52C4.0020.0002] # EGYPTIAN HIEROGLYPH O028 -1327B ; [.52C5.0020.0002] # EGYPTIAN HIEROGLYPH O029 -1327C ; [.52C6.0020.0002] # EGYPTIAN HIEROGLYPH O029A -1327D ; [.52C7.0020.0002] # EGYPTIAN HIEROGLYPH O030 -1327E ; [.52C8.0020.0002] # EGYPTIAN HIEROGLYPH O030A -1327F ; [.52C9.0020.0002] # EGYPTIAN HIEROGLYPH O031 -13280 ; [.52CA.0020.0002] # EGYPTIAN HIEROGLYPH O032 -13281 ; [.52CB.0020.0002] # EGYPTIAN HIEROGLYPH O033 -13282 ; [.52CC.0020.0002] # EGYPTIAN HIEROGLYPH O033A -13283 ; [.52CD.0020.0002] # EGYPTIAN HIEROGLYPH O034 -13284 ; [.52CE.0020.0002] # EGYPTIAN HIEROGLYPH O035 -13285 ; [.52CF.0020.0002] # EGYPTIAN HIEROGLYPH O036 -13286 ; [.52D0.0020.0002] # EGYPTIAN HIEROGLYPH O036A -13287 ; [.52D1.0020.0002] # EGYPTIAN HIEROGLYPH O036B -13288 ; [.52D2.0020.0002] # EGYPTIAN HIEROGLYPH O036C -13289 ; [.52D3.0020.0002] # EGYPTIAN HIEROGLYPH O036D -1328A ; [.52D4.0020.0002] # EGYPTIAN HIEROGLYPH O037 -1328B ; [.52D5.0020.0002] # EGYPTIAN HIEROGLYPH O038 -1328C ; [.52D6.0020.0002] # EGYPTIAN HIEROGLYPH O039 -1328D ; [.52D7.0020.0002] # EGYPTIAN HIEROGLYPH O040 -1328E ; [.52D8.0020.0002] # EGYPTIAN HIEROGLYPH O041 -1328F ; [.52D9.0020.0002] # EGYPTIAN HIEROGLYPH O042 -13290 ; [.52DA.0020.0002] # EGYPTIAN HIEROGLYPH O043 -13291 ; [.52DB.0020.0002] # EGYPTIAN HIEROGLYPH O044 -13292 ; [.52DC.0020.0002] # EGYPTIAN HIEROGLYPH O045 -13293 ; [.52DD.0020.0002] # EGYPTIAN HIEROGLYPH O046 -13294 ; [.52DE.0020.0002] # EGYPTIAN HIEROGLYPH O047 -13295 ; [.52DF.0020.0002] # EGYPTIAN HIEROGLYPH O048 -13296 ; [.52E0.0020.0002] # EGYPTIAN HIEROGLYPH O049 -13297 ; [.52E1.0020.0002] # EGYPTIAN HIEROGLYPH O050 -13298 ; [.52E2.0020.0002] # EGYPTIAN HIEROGLYPH O050A -13299 ; [.52E3.0020.0002] # EGYPTIAN HIEROGLYPH O050B -1329A ; [.52E4.0020.0002] # EGYPTIAN HIEROGLYPH O051 -1329B ; [.52E5.0020.0002] # EGYPTIAN HIEROGLYPH P001 -1329C ; [.52E6.0020.0002] # EGYPTIAN HIEROGLYPH P001A -1329D ; [.52E7.0020.0002] # EGYPTIAN HIEROGLYPH P002 -1329E ; [.52E8.0020.0002] # EGYPTIAN HIEROGLYPH P003 -1329F ; [.52E9.0020.0002] # EGYPTIAN HIEROGLYPH P003A -132A0 ; [.52EA.0020.0002] # EGYPTIAN HIEROGLYPH P004 -132A1 ; [.52EB.0020.0002] # EGYPTIAN HIEROGLYPH P005 -132A2 ; [.52EC.0020.0002] # EGYPTIAN HIEROGLYPH P006 -132A3 ; [.52ED.0020.0002] # EGYPTIAN HIEROGLYPH P007 -132A4 ; [.52EE.0020.0002] # EGYPTIAN HIEROGLYPH P008 -132A5 ; [.52EF.0020.0002] # EGYPTIAN HIEROGLYPH P009 -132A6 ; [.52F0.0020.0002] # EGYPTIAN HIEROGLYPH P010 -132A7 ; [.52F1.0020.0002] # EGYPTIAN HIEROGLYPH P011 -132A8 ; [.52F2.0020.0002] # EGYPTIAN HIEROGLYPH Q001 -132A9 ; [.52F3.0020.0002] # EGYPTIAN HIEROGLYPH Q002 -132AA ; [.52F4.0020.0002] # EGYPTIAN HIEROGLYPH Q003 -132AB ; [.52F5.0020.0002] # EGYPTIAN HIEROGLYPH Q004 -132AC ; [.52F6.0020.0002] # EGYPTIAN HIEROGLYPH Q005 -132AD ; [.52F7.0020.0002] # EGYPTIAN HIEROGLYPH Q006 -132AE ; [.52F8.0020.0002] # EGYPTIAN HIEROGLYPH Q007 -132AF ; [.52F9.0020.0002] # EGYPTIAN HIEROGLYPH R001 -132B0 ; [.52FA.0020.0002] # EGYPTIAN HIEROGLYPH R002 -132B1 ; [.52FB.0020.0002] # EGYPTIAN HIEROGLYPH R002A -132B2 ; [.52FC.0020.0002] # EGYPTIAN HIEROGLYPH R003 -132B3 ; [.52FD.0020.0002] # EGYPTIAN HIEROGLYPH R003A -132B4 ; [.52FE.0020.0002] # EGYPTIAN HIEROGLYPH R003B -132B5 ; [.52FF.0020.0002] # EGYPTIAN HIEROGLYPH R004 -132B6 ; [.5300.0020.0002] # EGYPTIAN HIEROGLYPH R005 -132B7 ; [.5301.0020.0002] # EGYPTIAN HIEROGLYPH R006 -132B8 ; [.5302.0020.0002] # EGYPTIAN HIEROGLYPH R007 -132B9 ; [.5303.0020.0002] # EGYPTIAN HIEROGLYPH R008 -132BA ; [.5304.0020.0002] # EGYPTIAN HIEROGLYPH R009 -132BB ; [.5305.0020.0002] # EGYPTIAN HIEROGLYPH R010 -132BC ; [.5306.0020.0002] # EGYPTIAN HIEROGLYPH R010A -132BD ; [.5307.0020.0002] # EGYPTIAN HIEROGLYPH R011 -132BE ; [.5308.0020.0002] # EGYPTIAN HIEROGLYPH R012 -132BF ; [.5309.0020.0002] # EGYPTIAN HIEROGLYPH R013 -132C0 ; [.530A.0020.0002] # EGYPTIAN HIEROGLYPH R014 -132C1 ; [.530B.0020.0002] # EGYPTIAN HIEROGLYPH R015 -132C2 ; [.530C.0020.0002] # EGYPTIAN HIEROGLYPH R016 -132C3 ; [.530D.0020.0002] # EGYPTIAN HIEROGLYPH R016A -132C4 ; [.530E.0020.0002] # EGYPTIAN HIEROGLYPH R017 -132C5 ; [.530F.0020.0002] # EGYPTIAN HIEROGLYPH R018 -132C6 ; [.5310.0020.0002] # EGYPTIAN HIEROGLYPH R019 -132C7 ; [.5311.0020.0002] # EGYPTIAN HIEROGLYPH R020 -132C8 ; [.5312.0020.0002] # EGYPTIAN HIEROGLYPH R021 -132C9 ; [.5313.0020.0002] # EGYPTIAN HIEROGLYPH R022 -132CA ; [.5314.0020.0002] # EGYPTIAN HIEROGLYPH R023 -132CB ; [.5315.0020.0002] # EGYPTIAN HIEROGLYPH R024 -132CC ; [.5316.0020.0002] # EGYPTIAN HIEROGLYPH R025 -132CD ; [.5317.0020.0002] # EGYPTIAN HIEROGLYPH R026 -132CE ; [.5318.0020.0002] # EGYPTIAN HIEROGLYPH R027 -132CF ; [.5319.0020.0002] # EGYPTIAN HIEROGLYPH R028 -132D0 ; [.531A.0020.0002] # EGYPTIAN HIEROGLYPH R029 -132D1 ; [.531B.0020.0002] # EGYPTIAN HIEROGLYPH S001 -132D2 ; [.531C.0020.0002] # EGYPTIAN HIEROGLYPH S002 -132D3 ; [.531D.0020.0002] # EGYPTIAN HIEROGLYPH S002A -132D4 ; [.531E.0020.0002] # EGYPTIAN HIEROGLYPH S003 -132D5 ; [.531F.0020.0002] # EGYPTIAN HIEROGLYPH S004 -132D6 ; [.5320.0020.0002] # EGYPTIAN HIEROGLYPH S005 -132D7 ; [.5321.0020.0002] # EGYPTIAN HIEROGLYPH S006 -132D8 ; [.5322.0020.0002] # EGYPTIAN HIEROGLYPH S006A -132D9 ; [.5323.0020.0002] # EGYPTIAN HIEROGLYPH S007 -132DA ; [.5324.0020.0002] # EGYPTIAN HIEROGLYPH S008 -132DB ; [.5325.0020.0002] # EGYPTIAN HIEROGLYPH S009 -132DC ; [.5326.0020.0002] # EGYPTIAN HIEROGLYPH S010 -132DD ; [.5327.0020.0002] # EGYPTIAN HIEROGLYPH S011 -132DE ; [.5328.0020.0002] # EGYPTIAN HIEROGLYPH S012 -132DF ; [.5329.0020.0002] # EGYPTIAN HIEROGLYPH S013 -132E0 ; [.532A.0020.0002] # EGYPTIAN HIEROGLYPH S014 -132E1 ; [.532B.0020.0002] # EGYPTIAN HIEROGLYPH S014A -132E2 ; [.532C.0020.0002] # EGYPTIAN HIEROGLYPH S014B -132E3 ; [.532D.0020.0002] # EGYPTIAN HIEROGLYPH S015 -132E4 ; [.532E.0020.0002] # EGYPTIAN HIEROGLYPH S016 -132E5 ; [.532F.0020.0002] # EGYPTIAN HIEROGLYPH S017 -132E6 ; [.5330.0020.0002] # EGYPTIAN HIEROGLYPH S017A -132E7 ; [.5331.0020.0002] # EGYPTIAN HIEROGLYPH S018 -132E8 ; [.5332.0020.0002] # EGYPTIAN HIEROGLYPH S019 -132E9 ; [.5333.0020.0002] # EGYPTIAN HIEROGLYPH S020 -132EA ; [.5334.0020.0002] # EGYPTIAN HIEROGLYPH S021 -132EB ; [.5335.0020.0002] # EGYPTIAN HIEROGLYPH S022 -132EC ; [.5336.0020.0002] # EGYPTIAN HIEROGLYPH S023 -132ED ; [.5337.0020.0002] # EGYPTIAN HIEROGLYPH S024 -132EE ; [.5338.0020.0002] # EGYPTIAN HIEROGLYPH S025 -132EF ; [.5339.0020.0002] # EGYPTIAN HIEROGLYPH S026 -132F0 ; [.533A.0020.0002] # EGYPTIAN HIEROGLYPH S026A -132F1 ; [.533B.0020.0002] # EGYPTIAN HIEROGLYPH S026B -132F2 ; [.533C.0020.0002] # EGYPTIAN HIEROGLYPH S027 -132F3 ; [.533D.0020.0002] # EGYPTIAN HIEROGLYPH S028 -132F4 ; [.533E.0020.0002] # EGYPTIAN HIEROGLYPH S029 -132F5 ; [.533F.0020.0002] # EGYPTIAN HIEROGLYPH S030 -132F6 ; [.5340.0020.0002] # EGYPTIAN HIEROGLYPH S031 -132F7 ; [.5341.0020.0002] # EGYPTIAN HIEROGLYPH S032 -132F8 ; [.5342.0020.0002] # EGYPTIAN HIEROGLYPH S033 -132F9 ; [.5343.0020.0002] # EGYPTIAN HIEROGLYPH S034 -132FA ; [.5344.0020.0002] # EGYPTIAN HIEROGLYPH S035 -132FB ; [.5345.0020.0002] # EGYPTIAN HIEROGLYPH S035A -132FC ; [.5346.0020.0002] # EGYPTIAN HIEROGLYPH S036 -132FD ; [.5347.0020.0002] # EGYPTIAN HIEROGLYPH S037 -132FE ; [.5348.0020.0002] # EGYPTIAN HIEROGLYPH S038 -132FF ; [.5349.0020.0002] # EGYPTIAN HIEROGLYPH S039 -13300 ; [.534A.0020.0002] # EGYPTIAN HIEROGLYPH S040 -13301 ; [.534B.0020.0002] # EGYPTIAN HIEROGLYPH S041 -13302 ; [.534C.0020.0002] # EGYPTIAN HIEROGLYPH S042 -13303 ; [.534D.0020.0002] # EGYPTIAN HIEROGLYPH S043 -13304 ; [.534E.0020.0002] # EGYPTIAN HIEROGLYPH S044 -13305 ; [.534F.0020.0002] # EGYPTIAN HIEROGLYPH S045 -13306 ; [.5350.0020.0002] # EGYPTIAN HIEROGLYPH S046 -13307 ; [.5351.0020.0002] # EGYPTIAN HIEROGLYPH T001 -13308 ; [.5352.0020.0002] # EGYPTIAN HIEROGLYPH T002 -13309 ; [.5353.0020.0002] # EGYPTIAN HIEROGLYPH T003 -1330A ; [.5354.0020.0002] # EGYPTIAN HIEROGLYPH T003A -1330B ; [.5355.0020.0002] # EGYPTIAN HIEROGLYPH T004 -1330C ; [.5356.0020.0002] # EGYPTIAN HIEROGLYPH T005 -1330D ; [.5357.0020.0002] # EGYPTIAN HIEROGLYPH T006 -1330E ; [.5358.0020.0002] # EGYPTIAN HIEROGLYPH T007 -1330F ; [.5359.0020.0002] # EGYPTIAN HIEROGLYPH T007A -13310 ; [.535A.0020.0002] # EGYPTIAN HIEROGLYPH T008 -13311 ; [.535B.0020.0002] # EGYPTIAN HIEROGLYPH T008A -13312 ; [.535C.0020.0002] # EGYPTIAN HIEROGLYPH T009 -13313 ; [.535D.0020.0002] # EGYPTIAN HIEROGLYPH T009A -13314 ; [.535E.0020.0002] # EGYPTIAN HIEROGLYPH T010 -13315 ; [.535F.0020.0002] # EGYPTIAN HIEROGLYPH T011 -13316 ; [.5360.0020.0002] # EGYPTIAN HIEROGLYPH T011A -13317 ; [.5361.0020.0002] # EGYPTIAN HIEROGLYPH T012 -13318 ; [.5362.0020.0002] # EGYPTIAN HIEROGLYPH T013 -13319 ; [.5363.0020.0002] # EGYPTIAN HIEROGLYPH T014 -1331A ; [.5364.0020.0002] # EGYPTIAN HIEROGLYPH T015 -1331B ; [.5365.0020.0002] # EGYPTIAN HIEROGLYPH T016 -1331C ; [.5366.0020.0002] # EGYPTIAN HIEROGLYPH T016A -1331D ; [.5367.0020.0002] # EGYPTIAN HIEROGLYPH T017 -1331E ; [.5368.0020.0002] # EGYPTIAN HIEROGLYPH T018 -1331F ; [.5369.0020.0002] # EGYPTIAN HIEROGLYPH T019 -13320 ; [.536A.0020.0002] # EGYPTIAN HIEROGLYPH T020 -13321 ; [.536B.0020.0002] # EGYPTIAN HIEROGLYPH T021 -13322 ; [.536C.0020.0002] # EGYPTIAN HIEROGLYPH T022 -13323 ; [.536D.0020.0002] # EGYPTIAN HIEROGLYPH T023 -13324 ; [.536E.0020.0002] # EGYPTIAN HIEROGLYPH T024 -13325 ; [.536F.0020.0002] # EGYPTIAN HIEROGLYPH T025 -13326 ; [.5370.0020.0002] # EGYPTIAN HIEROGLYPH T026 -13327 ; [.5371.0020.0002] # EGYPTIAN HIEROGLYPH T027 -13328 ; [.5372.0020.0002] # EGYPTIAN HIEROGLYPH T028 -13329 ; [.5373.0020.0002] # EGYPTIAN HIEROGLYPH T029 -1332A ; [.5374.0020.0002] # EGYPTIAN HIEROGLYPH T030 -1332B ; [.5375.0020.0002] # EGYPTIAN HIEROGLYPH T031 -1332C ; [.5376.0020.0002] # EGYPTIAN HIEROGLYPH T032 -1332D ; [.5377.0020.0002] # EGYPTIAN HIEROGLYPH T032A -1332E ; [.5378.0020.0002] # EGYPTIAN HIEROGLYPH T033 -1332F ; [.5379.0020.0002] # EGYPTIAN HIEROGLYPH T033A -13330 ; [.537A.0020.0002] # EGYPTIAN HIEROGLYPH T034 -13331 ; [.537B.0020.0002] # EGYPTIAN HIEROGLYPH T035 -13332 ; [.537C.0020.0002] # EGYPTIAN HIEROGLYPH T036 -13333 ; [.537D.0020.0002] # EGYPTIAN HIEROGLYPH U001 -13334 ; [.537E.0020.0002] # EGYPTIAN HIEROGLYPH U002 -13335 ; [.537F.0020.0002] # EGYPTIAN HIEROGLYPH U003 -13336 ; [.5380.0020.0002] # EGYPTIAN HIEROGLYPH U004 -13337 ; [.5381.0020.0002] # EGYPTIAN HIEROGLYPH U005 -13338 ; [.5382.0020.0002] # EGYPTIAN HIEROGLYPH U006 -13339 ; [.5383.0020.0002] # EGYPTIAN HIEROGLYPH U006A -1333A ; [.5384.0020.0002] # EGYPTIAN HIEROGLYPH U006B -1333B ; [.5385.0020.0002] # EGYPTIAN HIEROGLYPH U007 -1333C ; [.5386.0020.0002] # EGYPTIAN HIEROGLYPH U008 -1333D ; [.5387.0020.0002] # EGYPTIAN HIEROGLYPH U009 -1333E ; [.5388.0020.0002] # EGYPTIAN HIEROGLYPH U010 -1333F ; [.5389.0020.0002] # EGYPTIAN HIEROGLYPH U011 -13340 ; [.538A.0020.0002] # EGYPTIAN HIEROGLYPH U012 -13341 ; [.538B.0020.0002] # EGYPTIAN HIEROGLYPH U013 -13342 ; [.538C.0020.0002] # EGYPTIAN HIEROGLYPH U014 -13343 ; [.538D.0020.0002] # EGYPTIAN HIEROGLYPH U015 -13344 ; [.538E.0020.0002] # EGYPTIAN HIEROGLYPH U016 -13345 ; [.538F.0020.0002] # EGYPTIAN HIEROGLYPH U017 -13346 ; [.5390.0020.0002] # EGYPTIAN HIEROGLYPH U018 -13347 ; [.5391.0020.0002] # EGYPTIAN HIEROGLYPH U019 -13348 ; [.5392.0020.0002] # EGYPTIAN HIEROGLYPH U020 -13349 ; [.5393.0020.0002] # EGYPTIAN HIEROGLYPH U021 -1334A ; [.5394.0020.0002] # EGYPTIAN HIEROGLYPH U022 -1334B ; [.5395.0020.0002] # EGYPTIAN HIEROGLYPH U023 -1334C ; [.5396.0020.0002] # EGYPTIAN HIEROGLYPH U023A -1334D ; [.5397.0020.0002] # EGYPTIAN HIEROGLYPH U024 -1334E ; [.5398.0020.0002] # EGYPTIAN HIEROGLYPH U025 -1334F ; [.5399.0020.0002] # EGYPTIAN HIEROGLYPH U026 -13350 ; [.539A.0020.0002] # EGYPTIAN HIEROGLYPH U027 -13351 ; [.539B.0020.0002] # EGYPTIAN HIEROGLYPH U028 -13352 ; [.539C.0020.0002] # EGYPTIAN HIEROGLYPH U029 -13353 ; [.539D.0020.0002] # EGYPTIAN HIEROGLYPH U029A -13354 ; [.539E.0020.0002] # EGYPTIAN HIEROGLYPH U030 -13355 ; [.539F.0020.0002] # EGYPTIAN HIEROGLYPH U031 -13356 ; [.53A0.0020.0002] # EGYPTIAN HIEROGLYPH U032 -13357 ; [.53A1.0020.0002] # EGYPTIAN HIEROGLYPH U032A -13358 ; [.53A2.0020.0002] # EGYPTIAN HIEROGLYPH U033 -13359 ; [.53A3.0020.0002] # EGYPTIAN HIEROGLYPH U034 -1335A ; [.53A4.0020.0002] # EGYPTIAN HIEROGLYPH U035 -1335B ; [.53A5.0020.0002] # EGYPTIAN HIEROGLYPH U036 -1335C ; [.53A6.0020.0002] # EGYPTIAN HIEROGLYPH U037 -1335D ; [.53A7.0020.0002] # EGYPTIAN HIEROGLYPH U038 -1335E ; [.53A8.0020.0002] # EGYPTIAN HIEROGLYPH U039 -1335F ; [.53A9.0020.0002] # EGYPTIAN HIEROGLYPH U040 -13360 ; [.53AA.0020.0002] # EGYPTIAN HIEROGLYPH U041 -13361 ; [.53AB.0020.0002] # EGYPTIAN HIEROGLYPH U042 -13362 ; [.53AC.0020.0002] # EGYPTIAN HIEROGLYPH V001 -13363 ; [.53AD.0020.0002] # EGYPTIAN HIEROGLYPH V001A -13364 ; [.53AE.0020.0002] # EGYPTIAN HIEROGLYPH V001B -13365 ; [.53AF.0020.0002] # EGYPTIAN HIEROGLYPH V001C -13366 ; [.53B0.0020.0002] # EGYPTIAN HIEROGLYPH V001D -13367 ; [.53B1.0020.0002] # EGYPTIAN HIEROGLYPH V001E -13368 ; [.53B2.0020.0002] # EGYPTIAN HIEROGLYPH V001F -13369 ; [.53B3.0020.0002] # EGYPTIAN HIEROGLYPH V001G -1336A ; [.53B4.0020.0002] # EGYPTIAN HIEROGLYPH V001H -1336B ; [.53B5.0020.0002] # EGYPTIAN HIEROGLYPH V001I -1336C ; [.53B6.0020.0002] # EGYPTIAN HIEROGLYPH V002 -1336D ; [.53B7.0020.0002] # EGYPTIAN HIEROGLYPH V002A -1336E ; [.53B8.0020.0002] # EGYPTIAN HIEROGLYPH V003 -1336F ; [.53B9.0020.0002] # EGYPTIAN HIEROGLYPH V004 -13370 ; [.53BA.0020.0002] # EGYPTIAN HIEROGLYPH V005 -13371 ; [.53BB.0020.0002] # EGYPTIAN HIEROGLYPH V006 -13372 ; [.53BC.0020.0002] # EGYPTIAN HIEROGLYPH V007 -13373 ; [.53BD.0020.0002] # EGYPTIAN HIEROGLYPH V007A -13374 ; [.53BE.0020.0002] # EGYPTIAN HIEROGLYPH V007B -13375 ; [.53BF.0020.0002] # EGYPTIAN HIEROGLYPH V008 -13376 ; [.53C0.0020.0002] # EGYPTIAN HIEROGLYPH V009 -13377 ; [.53C1.0020.0002] # EGYPTIAN HIEROGLYPH V010 -13378 ; [.53C2.0020.0002] # EGYPTIAN HIEROGLYPH V011 -13379 ; [.53C3.0020.0002] # EGYPTIAN HIEROGLYPH V011A -1337A ; [.53C4.0020.0002] # EGYPTIAN HIEROGLYPH V011B -1337B ; [.53C5.0020.0002] # EGYPTIAN HIEROGLYPH V011C -1337C ; [.53C6.0020.0002] # EGYPTIAN HIEROGLYPH V012 -1337D ; [.53C7.0020.0002] # EGYPTIAN HIEROGLYPH V012A -1337E ; [.53C8.0020.0002] # EGYPTIAN HIEROGLYPH V012B -1337F ; [.53C9.0020.0002] # EGYPTIAN HIEROGLYPH V013 -13380 ; [.53CA.0020.0002] # EGYPTIAN HIEROGLYPH V014 -13381 ; [.53CB.0020.0002] # EGYPTIAN HIEROGLYPH V015 -13382 ; [.53CC.0020.0002] # EGYPTIAN HIEROGLYPH V016 -13383 ; [.53CD.0020.0002] # EGYPTIAN HIEROGLYPH V017 -13384 ; [.53CE.0020.0002] # EGYPTIAN HIEROGLYPH V018 -13385 ; [.53CF.0020.0002] # EGYPTIAN HIEROGLYPH V019 -13386 ; [.53D0.0020.0002] # EGYPTIAN HIEROGLYPH V020 -13387 ; [.53D1.0020.0002] # EGYPTIAN HIEROGLYPH V020A -13388 ; [.53D2.0020.0002] # EGYPTIAN HIEROGLYPH V020B -13389 ; [.53D3.0020.0002] # EGYPTIAN HIEROGLYPH V020C -1338A ; [.53D4.0020.0002] # EGYPTIAN HIEROGLYPH V020D -1338B ; [.53D5.0020.0002] # EGYPTIAN HIEROGLYPH V020E -1338C ; [.53D6.0020.0002] # EGYPTIAN HIEROGLYPH V020F -1338D ; [.53D7.0020.0002] # EGYPTIAN HIEROGLYPH V020G -1338E ; [.53D8.0020.0002] # EGYPTIAN HIEROGLYPH V020H -1338F ; [.53D9.0020.0002] # EGYPTIAN HIEROGLYPH V020I -13390 ; [.53DA.0020.0002] # EGYPTIAN HIEROGLYPH V020J -13391 ; [.53DB.0020.0002] # EGYPTIAN HIEROGLYPH V020K -13392 ; [.53DC.0020.0002] # EGYPTIAN HIEROGLYPH V020L -13393 ; [.53DD.0020.0002] # EGYPTIAN HIEROGLYPH V021 -13394 ; [.53DE.0020.0002] # EGYPTIAN HIEROGLYPH V022 -13395 ; [.53DF.0020.0002] # EGYPTIAN HIEROGLYPH V023 -13396 ; [.53E0.0020.0002] # EGYPTIAN HIEROGLYPH V023A -13397 ; [.53E1.0020.0002] # EGYPTIAN HIEROGLYPH V024 -13398 ; [.53E2.0020.0002] # EGYPTIAN HIEROGLYPH V025 -13399 ; [.53E3.0020.0002] # EGYPTIAN HIEROGLYPH V026 -1339A ; [.53E4.0020.0002] # EGYPTIAN HIEROGLYPH V027 -1339B ; [.53E5.0020.0002] # EGYPTIAN HIEROGLYPH V028 -1339C ; [.53E6.0020.0002] # EGYPTIAN HIEROGLYPH V028A -1339D ; [.53E7.0020.0002] # EGYPTIAN HIEROGLYPH V029 -1339E ; [.53E8.0020.0002] # EGYPTIAN HIEROGLYPH V029A -1339F ; [.53E9.0020.0002] # EGYPTIAN HIEROGLYPH V030 -133A0 ; [.53EA.0020.0002] # EGYPTIAN HIEROGLYPH V030A -133A1 ; [.53EB.0020.0002] # EGYPTIAN HIEROGLYPH V031 -133A2 ; [.53EC.0020.0002] # EGYPTIAN HIEROGLYPH V031A -133A3 ; [.53ED.0020.0002] # EGYPTIAN HIEROGLYPH V032 -133A4 ; [.53EE.0020.0002] # EGYPTIAN HIEROGLYPH V033 -133A5 ; [.53EF.0020.0002] # EGYPTIAN HIEROGLYPH V033A -133A6 ; [.53F0.0020.0002] # EGYPTIAN HIEROGLYPH V034 -133A7 ; [.53F1.0020.0002] # EGYPTIAN HIEROGLYPH V035 -133A8 ; [.53F2.0020.0002] # EGYPTIAN HIEROGLYPH V036 -133A9 ; [.53F3.0020.0002] # EGYPTIAN HIEROGLYPH V037 -133AA ; [.53F4.0020.0002] # EGYPTIAN HIEROGLYPH V037A -133AB ; [.53F5.0020.0002] # EGYPTIAN HIEROGLYPH V038 -133AC ; [.53F6.0020.0002] # EGYPTIAN HIEROGLYPH V039 -133AD ; [.53F7.0020.0002] # EGYPTIAN HIEROGLYPH V040 -133AE ; [.53F8.0020.0002] # EGYPTIAN HIEROGLYPH V040A -133AF ; [.53F9.0020.0002] # EGYPTIAN HIEROGLYPH W001 -133B0 ; [.53FA.0020.0002] # EGYPTIAN HIEROGLYPH W002 -133B1 ; [.53FB.0020.0002] # EGYPTIAN HIEROGLYPH W003 -133B2 ; [.53FC.0020.0002] # EGYPTIAN HIEROGLYPH W003A -133B3 ; [.53FD.0020.0002] # EGYPTIAN HIEROGLYPH W004 -133B4 ; [.53FE.0020.0002] # EGYPTIAN HIEROGLYPH W005 -133B5 ; [.53FF.0020.0002] # EGYPTIAN HIEROGLYPH W006 -133B6 ; [.5400.0020.0002] # EGYPTIAN HIEROGLYPH W007 -133B7 ; [.5401.0020.0002] # EGYPTIAN HIEROGLYPH W008 -133B8 ; [.5402.0020.0002] # EGYPTIAN HIEROGLYPH W009 -133B9 ; [.5403.0020.0002] # EGYPTIAN HIEROGLYPH W009A -133BA ; [.5404.0020.0002] # EGYPTIAN HIEROGLYPH W010 -133BB ; [.5405.0020.0002] # EGYPTIAN HIEROGLYPH W010A -133BC ; [.5406.0020.0002] # EGYPTIAN HIEROGLYPH W011 -133BD ; [.5407.0020.0002] # EGYPTIAN HIEROGLYPH W012 -133BE ; [.5408.0020.0002] # EGYPTIAN HIEROGLYPH W013 -133BF ; [.5409.0020.0002] # EGYPTIAN HIEROGLYPH W014 -133C0 ; [.540A.0020.0002] # EGYPTIAN HIEROGLYPH W014A -133C1 ; [.540B.0020.0002] # EGYPTIAN HIEROGLYPH W015 -133C2 ; [.540C.0020.0002] # EGYPTIAN HIEROGLYPH W016 -133C3 ; [.540D.0020.0002] # EGYPTIAN HIEROGLYPH W017 -133C4 ; [.540E.0020.0002] # EGYPTIAN HIEROGLYPH W017A -133C5 ; [.540F.0020.0002] # EGYPTIAN HIEROGLYPH W018 -133C6 ; [.5410.0020.0002] # EGYPTIAN HIEROGLYPH W018A -133C7 ; [.5411.0020.0002] # EGYPTIAN HIEROGLYPH W019 -133C8 ; [.5412.0020.0002] # EGYPTIAN HIEROGLYPH W020 -133C9 ; [.5413.0020.0002] # EGYPTIAN HIEROGLYPH W021 -133CA ; [.5414.0020.0002] # EGYPTIAN HIEROGLYPH W022 -133CB ; [.5415.0020.0002] # EGYPTIAN HIEROGLYPH W023 -133CC ; [.5416.0020.0002] # EGYPTIAN HIEROGLYPH W024 -133CD ; [.5417.0020.0002] # EGYPTIAN HIEROGLYPH W024A -133CE ; [.5418.0020.0002] # EGYPTIAN HIEROGLYPH W025 -133CF ; [.5419.0020.0002] # EGYPTIAN HIEROGLYPH X001 -133D0 ; [.541A.0020.0002] # EGYPTIAN HIEROGLYPH X002 -133D1 ; [.541B.0020.0002] # EGYPTIAN HIEROGLYPH X003 -133D2 ; [.541C.0020.0002] # EGYPTIAN HIEROGLYPH X004 -133D3 ; [.541D.0020.0002] # EGYPTIAN HIEROGLYPH X004A -133D4 ; [.541E.0020.0002] # EGYPTIAN HIEROGLYPH X004B -133D5 ; [.541F.0020.0002] # EGYPTIAN HIEROGLYPH X005 -133D6 ; [.5420.0020.0002] # EGYPTIAN HIEROGLYPH X006 -133D7 ; [.5421.0020.0002] # EGYPTIAN HIEROGLYPH X006A -133D8 ; [.5422.0020.0002] # EGYPTIAN HIEROGLYPH X007 -133D9 ; [.5423.0020.0002] # EGYPTIAN HIEROGLYPH X008 -133DA ; [.5424.0020.0002] # EGYPTIAN HIEROGLYPH X008A -133DB ; [.5425.0020.0002] # EGYPTIAN HIEROGLYPH Y001 -133DC ; [.5426.0020.0002] # EGYPTIAN HIEROGLYPH Y001A -133DD ; [.5427.0020.0002] # EGYPTIAN HIEROGLYPH Y002 -133DE ; [.5428.0020.0002] # EGYPTIAN HIEROGLYPH Y003 -133DF ; [.5429.0020.0002] # EGYPTIAN HIEROGLYPH Y004 -133E0 ; [.542A.0020.0002] # EGYPTIAN HIEROGLYPH Y005 -133E1 ; [.542B.0020.0002] # EGYPTIAN HIEROGLYPH Y006 -133E2 ; [.542C.0020.0002] # EGYPTIAN HIEROGLYPH Y007 -133E3 ; [.542D.0020.0002] # EGYPTIAN HIEROGLYPH Y008 -133E4 ; [.542E.0020.0002] # EGYPTIAN HIEROGLYPH Z001 -133E5 ; [.542F.0020.0002] # EGYPTIAN HIEROGLYPH Z002 -133E6 ; [.5430.0020.0002] # EGYPTIAN HIEROGLYPH Z002A -133E7 ; [.5431.0020.0002] # EGYPTIAN HIEROGLYPH Z002B -133E8 ; [.5432.0020.0002] # EGYPTIAN HIEROGLYPH Z002C -133E9 ; [.5433.0020.0002] # EGYPTIAN HIEROGLYPH Z002D -133EA ; [.5434.0020.0002] # EGYPTIAN HIEROGLYPH Z003 -133EB ; [.5435.0020.0002] # EGYPTIAN HIEROGLYPH Z003A -133EC ; [.5436.0020.0002] # EGYPTIAN HIEROGLYPH Z003B -133ED ; [.5437.0020.0002] # EGYPTIAN HIEROGLYPH Z004 -133EE ; [.5438.0020.0002] # EGYPTIAN HIEROGLYPH Z004A -133EF ; [.5439.0020.0002] # EGYPTIAN HIEROGLYPH Z005 -133F0 ; [.543A.0020.0002] # EGYPTIAN HIEROGLYPH Z005A -133F1 ; [.543B.0020.0002] # EGYPTIAN HIEROGLYPH Z006 -133F2 ; [.543C.0020.0002] # EGYPTIAN HIEROGLYPH Z007 -133F3 ; [.543D.0020.0002] # EGYPTIAN HIEROGLYPH Z008 -133F4 ; [.543E.0020.0002] # EGYPTIAN HIEROGLYPH Z009 -133F5 ; [.543F.0020.0002] # EGYPTIAN HIEROGLYPH Z010 -133F6 ; [.5440.0020.0002] # EGYPTIAN HIEROGLYPH Z011 -133F7 ; [.5441.0020.0002] # EGYPTIAN HIEROGLYPH Z012 -133F8 ; [.5442.0020.0002] # EGYPTIAN HIEROGLYPH Z013 -133F9 ; [.5443.0020.0002] # EGYPTIAN HIEROGLYPH Z014 -133FA ; [.5444.0020.0002] # EGYPTIAN HIEROGLYPH Z015 -133FB ; [.5445.0020.0002] # EGYPTIAN HIEROGLYPH Z015A -133FC ; [.5446.0020.0002] # EGYPTIAN HIEROGLYPH Z015B -133FD ; [.5447.0020.0002] # EGYPTIAN HIEROGLYPH Z015C -133FE ; [.5448.0020.0002] # EGYPTIAN HIEROGLYPH Z015D -133FF ; [.5449.0020.0002] # EGYPTIAN HIEROGLYPH Z015E -13400 ; [.544A.0020.0002] # EGYPTIAN HIEROGLYPH Z015F -13401 ; [.544B.0020.0002] # EGYPTIAN HIEROGLYPH Z015G -13402 ; [.544C.0020.0002] # EGYPTIAN HIEROGLYPH Z015H -13403 ; [.544D.0020.0002] # EGYPTIAN HIEROGLYPH Z015I -13404 ; [.544E.0020.0002] # EGYPTIAN HIEROGLYPH Z016 -13405 ; [.544F.0020.0002] # EGYPTIAN HIEROGLYPH Z016A -13406 ; [.5450.0020.0002] # EGYPTIAN HIEROGLYPH Z016B -13407 ; [.5451.0020.0002] # EGYPTIAN HIEROGLYPH Z016C -13408 ; [.5452.0020.0002] # EGYPTIAN HIEROGLYPH Z016D -13409 ; [.5453.0020.0002] # EGYPTIAN HIEROGLYPH Z016E -1340A ; [.5454.0020.0002] # EGYPTIAN HIEROGLYPH Z016F -1340B ; [.5455.0020.0002] # EGYPTIAN HIEROGLYPH Z016G -1340C ; [.5456.0020.0002] # EGYPTIAN HIEROGLYPH Z016H -1340D ; [.5457.0020.0002] # EGYPTIAN HIEROGLYPH AA001 -1340E ; [.5458.0020.0002] # EGYPTIAN HIEROGLYPH AA002 -1340F ; [.5459.0020.0002] # EGYPTIAN HIEROGLYPH AA003 -13410 ; [.545A.0020.0002] # EGYPTIAN HIEROGLYPH AA004 -13411 ; [.545B.0020.0002] # EGYPTIAN HIEROGLYPH AA005 -13412 ; [.545C.0020.0002] # EGYPTIAN HIEROGLYPH AA006 -13413 ; [.545D.0020.0002] # EGYPTIAN HIEROGLYPH AA007 -13414 ; [.545E.0020.0002] # EGYPTIAN HIEROGLYPH AA007A -13415 ; [.545F.0020.0002] # EGYPTIAN HIEROGLYPH AA007B -13416 ; [.5460.0020.0002] # EGYPTIAN HIEROGLYPH AA008 -13417 ; [.5461.0020.0002] # EGYPTIAN HIEROGLYPH AA009 -13418 ; [.5462.0020.0002] # EGYPTIAN HIEROGLYPH AA010 -13419 ; [.5463.0020.0002] # EGYPTIAN HIEROGLYPH AA011 -1341A ; [.5464.0020.0002] # EGYPTIAN HIEROGLYPH AA012 -1341B ; [.5465.0020.0002] # EGYPTIAN HIEROGLYPH AA013 -1341C ; [.5466.0020.0002] # EGYPTIAN HIEROGLYPH AA014 -1341D ; [.5467.0020.0002] # EGYPTIAN HIEROGLYPH AA015 -1341E ; [.5468.0020.0002] # EGYPTIAN HIEROGLYPH AA016 -1341F ; [.5469.0020.0002] # EGYPTIAN HIEROGLYPH AA017 -13420 ; [.546A.0020.0002] # EGYPTIAN HIEROGLYPH AA018 -13421 ; [.546B.0020.0002] # EGYPTIAN HIEROGLYPH AA019 -13422 ; [.546C.0020.0002] # EGYPTIAN HIEROGLYPH AA020 -13423 ; [.546D.0020.0002] # EGYPTIAN HIEROGLYPH AA021 -13424 ; [.546E.0020.0002] # EGYPTIAN HIEROGLYPH AA022 -13425 ; [.546F.0020.0002] # EGYPTIAN HIEROGLYPH AA023 -13426 ; [.5470.0020.0002] # EGYPTIAN HIEROGLYPH AA024 -13427 ; [.5471.0020.0002] # EGYPTIAN HIEROGLYPH AA025 -13428 ; [.5472.0020.0002] # EGYPTIAN HIEROGLYPH AA026 -13429 ; [.5473.0020.0002] # EGYPTIAN HIEROGLYPH AA027 -1342A ; [.5474.0020.0002] # EGYPTIAN HIEROGLYPH AA028 -1342B ; [.5475.0020.0002] # EGYPTIAN HIEROGLYPH AA029 -1342C ; [.5476.0020.0002] # EGYPTIAN HIEROGLYPH AA030 -1342D ; [.5477.0020.0002] # EGYPTIAN HIEROGLYPH AA031 -1342E ; [.5478.0020.0002] # EGYPTIAN HIEROGLYPH AA032 -109A0 ; [.5479.0020.0002] # MEROITIC CURSIVE LETTER A -10980 ; [.5479.0020.0004][.0000.0111.0004] # MEROITIC HIEROGLYPHIC LETTER A -109A1 ; [.547A.0020.0002] # MEROITIC CURSIVE LETTER E -10981 ; [.547A.0020.0004][.0000.0111.0004] # MEROITIC HIEROGLYPHIC LETTER E -109A2 ; [.547B.0020.0002] # MEROITIC CURSIVE LETTER I -10982 ; [.547B.0020.0004][.0000.0111.0004] # MEROITIC HIEROGLYPHIC LETTER I -109A3 ; [.547C.0020.0002] # MEROITIC CURSIVE LETTER O -10983 ; [.547C.0020.0004][.0000.0111.0004] # MEROITIC HIEROGLYPHIC LETTER O -109A4 ; [.547D.0020.0002] # MEROITIC CURSIVE LETTER YA -10984 ; [.547D.0020.0004][.0000.0111.0004] # MEROITIC HIEROGLYPHIC LETTER YA -109A5 ; [.547E.0020.0002] # MEROITIC CURSIVE LETTER WA -10985 ; [.547E.0020.0004][.0000.0111.0004] # MEROITIC HIEROGLYPHIC LETTER WA -109A6 ; [.547F.0020.0002] # MEROITIC CURSIVE LETTER BA -10986 ; [.547F.0020.0004][.0000.0111.0004] # MEROITIC HIEROGLYPHIC LETTER BA -10987 ; [.547F.0020.0004][.0000.0112.0004] # MEROITIC HIEROGLYPHIC LETTER BA-2 -109A7 ; [.5480.0020.0002] # MEROITIC CURSIVE LETTER PA -10988 ; [.5480.0020.0004][.0000.0111.0004] # MEROITIC HIEROGLYPHIC LETTER PA -109A8 ; [.5481.0020.0002] # MEROITIC CURSIVE LETTER MA -10989 ; [.5481.0020.0004][.0000.0111.0004] # MEROITIC HIEROGLYPHIC LETTER MA -109A9 ; [.5482.0020.0002] # MEROITIC CURSIVE LETTER NA -1098A ; [.5482.0020.0004][.0000.0111.0004] # MEROITIC HIEROGLYPHIC LETTER NA -1098B ; [.5482.0020.0004][.0000.0112.0004] # MEROITIC HIEROGLYPHIC LETTER NA-2 -109AA ; [.5483.0020.0002] # MEROITIC CURSIVE LETTER NE -1098C ; [.5483.0020.0004][.0000.0111.0004] # MEROITIC HIEROGLYPHIC LETTER NE -1098D ; [.5483.0020.0004][.0000.0112.0004] # MEROITIC HIEROGLYPHIC LETTER NE-2 -109AB ; [.5484.0020.0002] # MEROITIC CURSIVE LETTER RA -1098E ; [.5484.0020.0004][.0000.0111.0004] # MEROITIC HIEROGLYPHIC LETTER RA -1098F ; [.5484.0020.0004][.0000.0112.0004] # MEROITIC HIEROGLYPHIC LETTER RA-2 -109AC ; [.5485.0020.0002] # MEROITIC CURSIVE LETTER LA -10990 ; [.5485.0020.0004][.0000.0111.0004] # MEROITIC HIEROGLYPHIC LETTER LA -109AD ; [.5486.0020.0002] # MEROITIC CURSIVE LETTER KHA -10991 ; [.5486.0020.0004][.0000.0111.0004] # MEROITIC HIEROGLYPHIC LETTER KHA -109AE ; [.5487.0020.0002] # MEROITIC CURSIVE LETTER HHA -10992 ; [.5487.0020.0004][.0000.0111.0004] # MEROITIC HIEROGLYPHIC LETTER HHA -109AF ; [.5488.0020.0002] # MEROITIC CURSIVE LETTER SA -109B0 ; [.5488.0020.0004][.0000.0111.0004] # MEROITIC CURSIVE LETTER ARCHAIC SA -10993 ; [.5488.0020.0004][.0000.0112.0004] # MEROITIC HIEROGLYPHIC LETTER SA -10994 ; [.5488.0020.0004][.0000.0113.0004] # MEROITIC HIEROGLYPHIC LETTER SA-2 -109B1 ; [.5489.0020.0002] # MEROITIC CURSIVE LETTER SE -10995 ; [.5489.0020.0004][.0000.0111.0004] # MEROITIC HIEROGLYPHIC LETTER SE -109B2 ; [.548A.0020.0002] # MEROITIC CURSIVE LETTER KA -10996 ; [.548A.0020.0004][.0000.0111.0004] # MEROITIC HIEROGLYPHIC LETTER KA -109B3 ; [.548B.0020.0002] # MEROITIC CURSIVE LETTER QA -10997 ; [.548B.0020.0004][.0000.0111.0004] # MEROITIC HIEROGLYPHIC LETTER QA -109B4 ; [.548C.0020.0002] # MEROITIC CURSIVE LETTER TA -10998 ; [.548C.0020.0004][.0000.0111.0004] # MEROITIC HIEROGLYPHIC LETTER TA -10999 ; [.548C.0020.0004][.0000.0112.0004] # MEROITIC HIEROGLYPHIC LETTER TA-2 -109B5 ; [.548D.0020.0002] # MEROITIC CURSIVE LETTER TE -1099A ; [.548D.0020.0004][.0000.0111.0004] # MEROITIC HIEROGLYPHIC LETTER TE -1099B ; [.548D.0020.0004][.0000.0112.0004] # MEROITIC HIEROGLYPHIC LETTER TE-2 -109B6 ; [.548E.0020.0002] # MEROITIC CURSIVE LETTER TO -1099C ; [.548E.0020.0004][.0000.0111.0004] # MEROITIC HIEROGLYPHIC LETTER TO -109B7 ; [.548F.0020.0002] # MEROITIC CURSIVE LETTER DA -1099D ; [.548F.0020.0004][.0000.0111.0004] # MEROITIC HIEROGLYPHIC LETTER DA -109BE ; [.5490.0020.0002] # MEROITIC CURSIVE LOGOGRAM RMT -109BF ; [.5491.0020.0002] # MEROITIC CURSIVE LOGOGRAM IMN -1099E ; [.5492.0020.0002] # MEROITIC HIEROGLYPHIC SYMBOL VIDJ -1099F ; [.5493.0020.0002] # MEROITIC HIEROGLYPHIC SYMBOL VIDJ-2 -14400 ; [.5494.0020.0002] # ANATOLIAN HIEROGLYPH A001 -14401 ; [.5495.0020.0002] # ANATOLIAN HIEROGLYPH A002 -14402 ; [.5496.0020.0002] # ANATOLIAN HIEROGLYPH A003 -14403 ; [.5497.0020.0002] # ANATOLIAN HIEROGLYPH A004 -14404 ; [.5498.0020.0002] # ANATOLIAN HIEROGLYPH A005 -14405 ; [.5499.0020.0002] # ANATOLIAN HIEROGLYPH A006 -14406 ; [.549A.0020.0002] # ANATOLIAN HIEROGLYPH A007 -14407 ; [.549B.0020.0002] # ANATOLIAN HIEROGLYPH A008 -14408 ; [.549C.0020.0002] # ANATOLIAN HIEROGLYPH A009 -14409 ; [.549D.0020.0002] # ANATOLIAN HIEROGLYPH A010 -1440A ; [.549E.0020.0002] # ANATOLIAN HIEROGLYPH A010A -1440B ; [.549F.0020.0002] # ANATOLIAN HIEROGLYPH A011 -1440C ; [.54A0.0020.0002] # ANATOLIAN HIEROGLYPH A012 -1440D ; [.54A1.0020.0002] # ANATOLIAN HIEROGLYPH A013 -1440E ; [.54A2.0020.0002] # ANATOLIAN HIEROGLYPH A014 -1440F ; [.54A3.0020.0002] # ANATOLIAN HIEROGLYPH A015 -14410 ; [.54A4.0020.0002] # ANATOLIAN HIEROGLYPH A016 -14411 ; [.54A5.0020.0002] # ANATOLIAN HIEROGLYPH A017 -14412 ; [.54A6.0020.0002] # ANATOLIAN HIEROGLYPH A018 -14413 ; [.54A7.0020.0002] # ANATOLIAN HIEROGLYPH A019 -14414 ; [.54A8.0020.0002] # ANATOLIAN HIEROGLYPH A020 -14415 ; [.54A9.0020.0002] # ANATOLIAN HIEROGLYPH A021 -14416 ; [.54AA.0020.0002] # ANATOLIAN HIEROGLYPH A022 -14417 ; [.54AB.0020.0002] # ANATOLIAN HIEROGLYPH A023 -14418 ; [.54AC.0020.0002] # ANATOLIAN HIEROGLYPH A024 -14419 ; [.54AD.0020.0002] # ANATOLIAN HIEROGLYPH A025 -1441A ; [.54AE.0020.0002] # ANATOLIAN HIEROGLYPH A026 -1441B ; [.54AF.0020.0002] # ANATOLIAN HIEROGLYPH A026A -1441C ; [.54B0.0020.0002] # ANATOLIAN HIEROGLYPH A027 -1441D ; [.54B1.0020.0002] # ANATOLIAN HIEROGLYPH A028 -1441E ; [.54B2.0020.0002] # ANATOLIAN HIEROGLYPH A029 -1441F ; [.54B3.0020.0002] # ANATOLIAN HIEROGLYPH A030 -14420 ; [.54B4.0020.0002] # ANATOLIAN HIEROGLYPH A031 -14421 ; [.54B5.0020.0002] # ANATOLIAN HIEROGLYPH A032 -14422 ; [.54B6.0020.0002] # ANATOLIAN HIEROGLYPH A033 -14423 ; [.54B7.0020.0002] # ANATOLIAN HIEROGLYPH A034 -14424 ; [.54B8.0020.0002] # ANATOLIAN HIEROGLYPH A035 -14425 ; [.54B9.0020.0002] # ANATOLIAN HIEROGLYPH A036 -14426 ; [.54BA.0020.0002] # ANATOLIAN HIEROGLYPH A037 -14427 ; [.54BB.0020.0002] # ANATOLIAN HIEROGLYPH A038 -14428 ; [.54BC.0020.0002] # ANATOLIAN HIEROGLYPH A039 -14429 ; [.54BD.0020.0002] # ANATOLIAN HIEROGLYPH A039A -1442A ; [.54BE.0020.0002] # ANATOLIAN HIEROGLYPH A040 -1442B ; [.54BF.0020.0002] # ANATOLIAN HIEROGLYPH A041 -1442C ; [.54C0.0020.0002] # ANATOLIAN HIEROGLYPH A041A -1442D ; [.54C1.0020.0002] # ANATOLIAN HIEROGLYPH A042 -1442E ; [.54C2.0020.0002] # ANATOLIAN HIEROGLYPH A043 -1442F ; [.54C3.0020.0002] # ANATOLIAN HIEROGLYPH A044 -14430 ; [.54C4.0020.0002] # ANATOLIAN HIEROGLYPH A045 -14431 ; [.54C5.0020.0002] # ANATOLIAN HIEROGLYPH A045A -14432 ; [.54C6.0020.0002] # ANATOLIAN HIEROGLYPH A046 -14433 ; [.54C7.0020.0002] # ANATOLIAN HIEROGLYPH A046A -14434 ; [.54C8.0020.0002] # ANATOLIAN HIEROGLYPH A046B -14435 ; [.54C9.0020.0002] # ANATOLIAN HIEROGLYPH A047 -14436 ; [.54CA.0020.0002] # ANATOLIAN HIEROGLYPH A048 -14437 ; [.54CB.0020.0002] # ANATOLIAN HIEROGLYPH A049 -14438 ; [.54CC.0020.0002] # ANATOLIAN HIEROGLYPH A050 -14439 ; [.54CD.0020.0002] # ANATOLIAN HIEROGLYPH A051 -1443A ; [.54CE.0020.0002] # ANATOLIAN HIEROGLYPH A052 -1443B ; [.54CF.0020.0002] # ANATOLIAN HIEROGLYPH A053 -1443C ; [.54D0.0020.0002] # ANATOLIAN HIEROGLYPH A054 -1443D ; [.54D1.0020.0002] # ANATOLIAN HIEROGLYPH A055 -1443E ; [.54D2.0020.0002] # ANATOLIAN HIEROGLYPH A056 -1443F ; [.54D3.0020.0002] # ANATOLIAN HIEROGLYPH A057 -14440 ; [.54D4.0020.0002] # ANATOLIAN HIEROGLYPH A058 -14441 ; [.54D5.0020.0002] # ANATOLIAN HIEROGLYPH A059 -14442 ; [.54D6.0020.0002] # ANATOLIAN HIEROGLYPH A060 -14443 ; [.54D7.0020.0002] # ANATOLIAN HIEROGLYPH A061 -14444 ; [.54D8.0020.0002] # ANATOLIAN HIEROGLYPH A062 -14445 ; [.54D9.0020.0002] # ANATOLIAN HIEROGLYPH A063 -14446 ; [.54DA.0020.0002] # ANATOLIAN HIEROGLYPH A064 -14447 ; [.54DB.0020.0002] # ANATOLIAN HIEROGLYPH A065 -14448 ; [.54DC.0020.0002] # ANATOLIAN HIEROGLYPH A066 -14449 ; [.54DD.0020.0002] # ANATOLIAN HIEROGLYPH A066A -1444A ; [.54DE.0020.0002] # ANATOLIAN HIEROGLYPH A066B -1444B ; [.54DF.0020.0002] # ANATOLIAN HIEROGLYPH A066C -1444C ; [.54E0.0020.0002] # ANATOLIAN HIEROGLYPH A067 -1444D ; [.54E1.0020.0002] # ANATOLIAN HIEROGLYPH A068 -1444E ; [.54E2.0020.0002] # ANATOLIAN HIEROGLYPH A069 -1444F ; [.54E3.0020.0002] # ANATOLIAN HIEROGLYPH A070 -14450 ; [.54E4.0020.0002] # ANATOLIAN HIEROGLYPH A071 -14451 ; [.54E5.0020.0002] # ANATOLIAN HIEROGLYPH A072 -14452 ; [.54E6.0020.0002] # ANATOLIAN HIEROGLYPH A073 -14453 ; [.54E7.0020.0002] # ANATOLIAN HIEROGLYPH A074 -14454 ; [.54E8.0020.0002] # ANATOLIAN HIEROGLYPH A075 -14455 ; [.54E9.0020.0002] # ANATOLIAN HIEROGLYPH A076 -14456 ; [.54EA.0020.0002] # ANATOLIAN HIEROGLYPH A077 -14457 ; [.54EB.0020.0002] # ANATOLIAN HIEROGLYPH A078 -14458 ; [.54EC.0020.0002] # ANATOLIAN HIEROGLYPH A079 -14459 ; [.54ED.0020.0002] # ANATOLIAN HIEROGLYPH A080 -1445A ; [.54EE.0020.0002] # ANATOLIAN HIEROGLYPH A081 -1445B ; [.54EF.0020.0002] # ANATOLIAN HIEROGLYPH A082 -1445C ; [.54F0.0020.0002] # ANATOLIAN HIEROGLYPH A083 -1445D ; [.54F1.0020.0002] # ANATOLIAN HIEROGLYPH A084 -1445E ; [.54F2.0020.0002] # ANATOLIAN HIEROGLYPH A085 -1445F ; [.54F3.0020.0002] # ANATOLIAN HIEROGLYPH A086 -14460 ; [.54F4.0020.0002] # ANATOLIAN HIEROGLYPH A087 -14461 ; [.54F5.0020.0002] # ANATOLIAN HIEROGLYPH A088 -14462 ; [.54F6.0020.0002] # ANATOLIAN HIEROGLYPH A089 -14463 ; [.54F7.0020.0002] # ANATOLIAN HIEROGLYPH A090 -14464 ; [.54F8.0020.0002] # ANATOLIAN HIEROGLYPH A091 -14465 ; [.54F9.0020.0002] # ANATOLIAN HIEROGLYPH A092 -14466 ; [.54FA.0020.0002] # ANATOLIAN HIEROGLYPH A093 -14467 ; [.54FB.0020.0002] # ANATOLIAN HIEROGLYPH A094 -14468 ; [.54FC.0020.0002] # ANATOLIAN HIEROGLYPH A095 -14469 ; [.54FD.0020.0002] # ANATOLIAN HIEROGLYPH A096 -1446A ; [.54FE.0020.0002] # ANATOLIAN HIEROGLYPH A097 -1446B ; [.54FF.0020.0002] # ANATOLIAN HIEROGLYPH A097A -1446C ; [.5500.0020.0002] # ANATOLIAN HIEROGLYPH A098 -1446D ; [.5501.0020.0002] # ANATOLIAN HIEROGLYPH A098A -1446E ; [.5502.0020.0002] # ANATOLIAN HIEROGLYPH A099 -1446F ; [.5503.0020.0002] # ANATOLIAN HIEROGLYPH A100 -14470 ; [.5504.0020.0002] # ANATOLIAN HIEROGLYPH A100A -14471 ; [.5505.0020.0002] # ANATOLIAN HIEROGLYPH A101 -14472 ; [.5506.0020.0002] # ANATOLIAN HIEROGLYPH A101A -14473 ; [.5507.0020.0002] # ANATOLIAN HIEROGLYPH A102 -14474 ; [.5508.0020.0002] # ANATOLIAN HIEROGLYPH A102A -14475 ; [.5509.0020.0002] # ANATOLIAN HIEROGLYPH A103 -14476 ; [.550A.0020.0002] # ANATOLIAN HIEROGLYPH A104 -14477 ; [.550B.0020.0002] # ANATOLIAN HIEROGLYPH A104A -14478 ; [.550C.0020.0002] # ANATOLIAN HIEROGLYPH A104B -14479 ; [.550D.0020.0002] # ANATOLIAN HIEROGLYPH A104C -1447A ; [.550E.0020.0002] # ANATOLIAN HIEROGLYPH A105 -1447B ; [.550F.0020.0002] # ANATOLIAN HIEROGLYPH A105A -1447C ; [.5510.0020.0002] # ANATOLIAN HIEROGLYPH A105B -1447D ; [.5511.0020.0002] # ANATOLIAN HIEROGLYPH A106 -1447E ; [.5512.0020.0002] # ANATOLIAN HIEROGLYPH A107 -1447F ; [.5513.0020.0002] # ANATOLIAN HIEROGLYPH A107A -14480 ; [.5514.0020.0002] # ANATOLIAN HIEROGLYPH A107B -14481 ; [.5515.0020.0002] # ANATOLIAN HIEROGLYPH A107C -14482 ; [.5516.0020.0002] # ANATOLIAN HIEROGLYPH A108 -14483 ; [.5517.0020.0002] # ANATOLIAN HIEROGLYPH A109 -14484 ; [.5518.0020.0002] # ANATOLIAN HIEROGLYPH A110 -14485 ; [.5519.0020.0002] # ANATOLIAN HIEROGLYPH A110A -14486 ; [.551A.0020.0002] # ANATOLIAN HIEROGLYPH A110B -14487 ; [.551B.0020.0002] # ANATOLIAN HIEROGLYPH A111 -14488 ; [.551C.0020.0002] # ANATOLIAN HIEROGLYPH A112 -14489 ; [.551D.0020.0002] # ANATOLIAN HIEROGLYPH A113 -1448A ; [.551E.0020.0002] # ANATOLIAN HIEROGLYPH A114 -1448B ; [.551F.0020.0002] # ANATOLIAN HIEROGLYPH A115 -1448C ; [.5520.0020.0002] # ANATOLIAN HIEROGLYPH A115A -1448D ; [.5521.0020.0002] # ANATOLIAN HIEROGLYPH A116 -1448E ; [.5522.0020.0002] # ANATOLIAN HIEROGLYPH A117 -1448F ; [.5523.0020.0002] # ANATOLIAN HIEROGLYPH A118 -14490 ; [.5524.0020.0002] # ANATOLIAN HIEROGLYPH A119 -14491 ; [.5525.0020.0002] # ANATOLIAN HIEROGLYPH A120 -14492 ; [.5526.0020.0002] # ANATOLIAN HIEROGLYPH A121 -14493 ; [.5527.0020.0002] # ANATOLIAN HIEROGLYPH A122 -14494 ; [.5528.0020.0002] # ANATOLIAN HIEROGLYPH A123 -14495 ; [.5529.0020.0002] # ANATOLIAN HIEROGLYPH A124 -14496 ; [.552A.0020.0002] # ANATOLIAN HIEROGLYPH A125 -14497 ; [.552B.0020.0002] # ANATOLIAN HIEROGLYPH A125A -14498 ; [.552C.0020.0002] # ANATOLIAN HIEROGLYPH A126 -14499 ; [.552D.0020.0002] # ANATOLIAN HIEROGLYPH A127 -1449A ; [.552E.0020.0002] # ANATOLIAN HIEROGLYPH A128 -1449B ; [.552F.0020.0002] # ANATOLIAN HIEROGLYPH A129 -1449C ; [.5530.0020.0002] # ANATOLIAN HIEROGLYPH A130 -1449D ; [.5531.0020.0002] # ANATOLIAN HIEROGLYPH A131 -1449E ; [.5532.0020.0002] # ANATOLIAN HIEROGLYPH A132 -1449F ; [.5533.0020.0002] # ANATOLIAN HIEROGLYPH A133 -144A0 ; [.5534.0020.0002] # ANATOLIAN HIEROGLYPH A134 -144A1 ; [.5535.0020.0002] # ANATOLIAN HIEROGLYPH A135 -144A2 ; [.5536.0020.0002] # ANATOLIAN HIEROGLYPH A135A -144A3 ; [.5537.0020.0002] # ANATOLIAN HIEROGLYPH A136 -144A4 ; [.5538.0020.0002] # ANATOLIAN HIEROGLYPH A137 -144A5 ; [.5539.0020.0002] # ANATOLIAN HIEROGLYPH A138 -144A6 ; [.553A.0020.0002] # ANATOLIAN HIEROGLYPH A139 -144A7 ; [.553B.0020.0002] # ANATOLIAN HIEROGLYPH A140 -144A8 ; [.553C.0020.0002] # ANATOLIAN HIEROGLYPH A141 -144A9 ; [.553D.0020.0002] # ANATOLIAN HIEROGLYPH A142 -144AA ; [.553E.0020.0002] # ANATOLIAN HIEROGLYPH A143 -144AB ; [.553F.0020.0002] # ANATOLIAN HIEROGLYPH A144 -144AC ; [.5540.0020.0002] # ANATOLIAN HIEROGLYPH A145 -144AD ; [.5541.0020.0002] # ANATOLIAN HIEROGLYPH A146 -144AE ; [.5542.0020.0002] # ANATOLIAN HIEROGLYPH A147 -144AF ; [.5543.0020.0002] # ANATOLIAN HIEROGLYPH A148 -144B0 ; [.5544.0020.0002] # ANATOLIAN HIEROGLYPH A149 -144B1 ; [.5545.0020.0002] # ANATOLIAN HIEROGLYPH A150 -144B2 ; [.5546.0020.0002] # ANATOLIAN HIEROGLYPH A151 -144B3 ; [.5547.0020.0002] # ANATOLIAN HIEROGLYPH A152 -144B4 ; [.5548.0020.0002] # ANATOLIAN HIEROGLYPH A153 -144B5 ; [.5549.0020.0002] # ANATOLIAN HIEROGLYPH A154 -144B6 ; [.554A.0020.0002] # ANATOLIAN HIEROGLYPH A155 -144B7 ; [.554B.0020.0002] # ANATOLIAN HIEROGLYPH A156 -144B8 ; [.554C.0020.0002] # ANATOLIAN HIEROGLYPH A157 -144B9 ; [.554D.0020.0002] # ANATOLIAN HIEROGLYPH A158 -144BA ; [.554E.0020.0002] # ANATOLIAN HIEROGLYPH A159 -144BB ; [.554F.0020.0002] # ANATOLIAN HIEROGLYPH A160 -144BC ; [.5550.0020.0002] # ANATOLIAN HIEROGLYPH A161 -144BD ; [.5551.0020.0002] # ANATOLIAN HIEROGLYPH A162 -144BE ; [.5552.0020.0002] # ANATOLIAN HIEROGLYPH A163 -144BF ; [.5553.0020.0002] # ANATOLIAN HIEROGLYPH A164 -144C0 ; [.5554.0020.0002] # ANATOLIAN HIEROGLYPH A165 -144C1 ; [.5555.0020.0002] # ANATOLIAN HIEROGLYPH A166 -144C2 ; [.5556.0020.0002] # ANATOLIAN HIEROGLYPH A167 -144C3 ; [.5557.0020.0002] # ANATOLIAN HIEROGLYPH A168 -144C4 ; [.5558.0020.0002] # ANATOLIAN HIEROGLYPH A169 -144C5 ; [.5559.0020.0002] # ANATOLIAN HIEROGLYPH A170 -144C6 ; [.555A.0020.0002] # ANATOLIAN HIEROGLYPH A171 -144C7 ; [.555B.0020.0002] # ANATOLIAN HIEROGLYPH A172 -144C8 ; [.555C.0020.0002] # ANATOLIAN HIEROGLYPH A173 -144C9 ; [.555D.0020.0002] # ANATOLIAN HIEROGLYPH A174 -144CA ; [.555E.0020.0002] # ANATOLIAN HIEROGLYPH A175 -144CB ; [.555F.0020.0002] # ANATOLIAN HIEROGLYPH A176 -144CC ; [.5560.0020.0002] # ANATOLIAN HIEROGLYPH A177 -144CD ; [.5561.0020.0002] # ANATOLIAN HIEROGLYPH A178 -144CE ; [.5562.0020.0002] # ANATOLIAN HIEROGLYPH A179 -144CF ; [.5563.0020.0002] # ANATOLIAN HIEROGLYPH A180 -144D0 ; [.5564.0020.0002] # ANATOLIAN HIEROGLYPH A181 -144D1 ; [.5565.0020.0002] # ANATOLIAN HIEROGLYPH A182 -144D2 ; [.5566.0020.0002] # ANATOLIAN HIEROGLYPH A183 -144D3 ; [.5567.0020.0002] # ANATOLIAN HIEROGLYPH A184 -144D4 ; [.5568.0020.0002] # ANATOLIAN HIEROGLYPH A185 -144D5 ; [.5569.0020.0002] # ANATOLIAN HIEROGLYPH A186 -144D6 ; [.556A.0020.0002] # ANATOLIAN HIEROGLYPH A187 -144D7 ; [.556B.0020.0002] # ANATOLIAN HIEROGLYPH A188 -144D8 ; [.556C.0020.0002] # ANATOLIAN HIEROGLYPH A189 -144D9 ; [.556D.0020.0002] # ANATOLIAN HIEROGLYPH A190 -144DA ; [.556E.0020.0002] # ANATOLIAN HIEROGLYPH A191 -144DB ; [.556F.0020.0002] # ANATOLIAN HIEROGLYPH A192 -144DC ; [.5570.0020.0002] # ANATOLIAN HIEROGLYPH A193 -144DD ; [.5571.0020.0002] # ANATOLIAN HIEROGLYPH A194 -144DE ; [.5572.0020.0002] # ANATOLIAN HIEROGLYPH A195 -144DF ; [.5573.0020.0002] # ANATOLIAN HIEROGLYPH A196 -144E0 ; [.5574.0020.0002] # ANATOLIAN HIEROGLYPH A197 -144E1 ; [.5575.0020.0002] # ANATOLIAN HIEROGLYPH A198 -144E2 ; [.5576.0020.0002] # ANATOLIAN HIEROGLYPH A199 -144E3 ; [.5577.0020.0002] # ANATOLIAN HIEROGLYPH A200 -144E4 ; [.5578.0020.0002] # ANATOLIAN HIEROGLYPH A201 -144E5 ; [.5579.0020.0002] # ANATOLIAN HIEROGLYPH A202 -144E6 ; [.557A.0020.0002] # ANATOLIAN HIEROGLYPH A202A -144E7 ; [.557B.0020.0002] # ANATOLIAN HIEROGLYPH A202B -144E8 ; [.557C.0020.0002] # ANATOLIAN HIEROGLYPH A203 -144E9 ; [.557D.0020.0002] # ANATOLIAN HIEROGLYPH A204 -144EA ; [.557E.0020.0002] # ANATOLIAN HIEROGLYPH A205 -144EB ; [.557F.0020.0002] # ANATOLIAN HIEROGLYPH A206 -144EC ; [.5580.0020.0002] # ANATOLIAN HIEROGLYPH A207 -144ED ; [.5581.0020.0002] # ANATOLIAN HIEROGLYPH A207A -144EE ; [.5582.0020.0002] # ANATOLIAN HIEROGLYPH A208 -144EF ; [.5583.0020.0002] # ANATOLIAN HIEROGLYPH A209 -144F0 ; [.5584.0020.0002] # ANATOLIAN HIEROGLYPH A209A -144F1 ; [.5585.0020.0002] # ANATOLIAN HIEROGLYPH A210 -144F2 ; [.5586.0020.0002] # ANATOLIAN HIEROGLYPH A211 -144F3 ; [.5587.0020.0002] # ANATOLIAN HIEROGLYPH A212 -144F4 ; [.5588.0020.0002] # ANATOLIAN HIEROGLYPH A213 -144F5 ; [.5589.0020.0002] # ANATOLIAN HIEROGLYPH A214 -144F6 ; [.558A.0020.0002] # ANATOLIAN HIEROGLYPH A215 -144F7 ; [.558B.0020.0002] # ANATOLIAN HIEROGLYPH A215A -144F8 ; [.558C.0020.0002] # ANATOLIAN HIEROGLYPH A216 -144F9 ; [.558D.0020.0002] # ANATOLIAN HIEROGLYPH A216A -144FA ; [.558E.0020.0002] # ANATOLIAN HIEROGLYPH A217 -144FB ; [.558F.0020.0002] # ANATOLIAN HIEROGLYPH A218 -144FC ; [.5590.0020.0002] # ANATOLIAN HIEROGLYPH A219 -144FD ; [.5591.0020.0002] # ANATOLIAN HIEROGLYPH A220 -144FE ; [.5592.0020.0002] # ANATOLIAN HIEROGLYPH A221 -144FF ; [.5593.0020.0002] # ANATOLIAN HIEROGLYPH A222 -14500 ; [.5594.0020.0002] # ANATOLIAN HIEROGLYPH A223 -14501 ; [.5595.0020.0002] # ANATOLIAN HIEROGLYPH A224 -14502 ; [.5596.0020.0002] # ANATOLIAN HIEROGLYPH A225 -14503 ; [.5597.0020.0002] # ANATOLIAN HIEROGLYPH A226 -14504 ; [.5598.0020.0002] # ANATOLIAN HIEROGLYPH A227 -14505 ; [.5599.0020.0002] # ANATOLIAN HIEROGLYPH A227A -14506 ; [.559A.0020.0002] # ANATOLIAN HIEROGLYPH A228 -14507 ; [.559B.0020.0002] # ANATOLIAN HIEROGLYPH A229 -14508 ; [.559C.0020.0002] # ANATOLIAN HIEROGLYPH A230 -14509 ; [.559D.0020.0002] # ANATOLIAN HIEROGLYPH A231 -1450A ; [.559E.0020.0002] # ANATOLIAN HIEROGLYPH A232 -1450B ; [.559F.0020.0002] # ANATOLIAN HIEROGLYPH A233 -1450C ; [.55A0.0020.0002] # ANATOLIAN HIEROGLYPH A234 -1450D ; [.55A1.0020.0002] # ANATOLIAN HIEROGLYPH A235 -1450E ; [.55A2.0020.0002] # ANATOLIAN HIEROGLYPH A236 -1450F ; [.55A3.0020.0002] # ANATOLIAN HIEROGLYPH A237 -14510 ; [.55A4.0020.0002] # ANATOLIAN HIEROGLYPH A238 -14511 ; [.55A5.0020.0002] # ANATOLIAN HIEROGLYPH A239 -14512 ; [.55A6.0020.0002] # ANATOLIAN HIEROGLYPH A240 -14513 ; [.55A7.0020.0002] # ANATOLIAN HIEROGLYPH A241 -14514 ; [.55A8.0020.0002] # ANATOLIAN HIEROGLYPH A242 -14515 ; [.55A9.0020.0002] # ANATOLIAN HIEROGLYPH A243 -14516 ; [.55AA.0020.0002] # ANATOLIAN HIEROGLYPH A244 -14517 ; [.55AB.0020.0002] # ANATOLIAN HIEROGLYPH A245 -14518 ; [.55AC.0020.0002] # ANATOLIAN HIEROGLYPH A246 -14519 ; [.55AD.0020.0002] # ANATOLIAN HIEROGLYPH A247 -1451A ; [.55AE.0020.0002] # ANATOLIAN HIEROGLYPH A248 -1451B ; [.55AF.0020.0002] # ANATOLIAN HIEROGLYPH A249 -1451C ; [.55B0.0020.0002] # ANATOLIAN HIEROGLYPH A250 -1451D ; [.55B1.0020.0002] # ANATOLIAN HIEROGLYPH A251 -1451E ; [.55B2.0020.0002] # ANATOLIAN HIEROGLYPH A252 -1451F ; [.55B3.0020.0002] # ANATOLIAN HIEROGLYPH A253 -14520 ; [.55B4.0020.0002] # ANATOLIAN HIEROGLYPH A254 -14521 ; [.55B5.0020.0002] # ANATOLIAN HIEROGLYPH A255 -14522 ; [.55B6.0020.0002] # ANATOLIAN HIEROGLYPH A256 -14523 ; [.55B7.0020.0002] # ANATOLIAN HIEROGLYPH A257 -14524 ; [.55B8.0020.0002] # ANATOLIAN HIEROGLYPH A258 -14525 ; [.55B9.0020.0002] # ANATOLIAN HIEROGLYPH A259 -14526 ; [.55BA.0020.0002] # ANATOLIAN HIEROGLYPH A260 -14527 ; [.55BB.0020.0002] # ANATOLIAN HIEROGLYPH A261 -14528 ; [.55BC.0020.0002] # ANATOLIAN HIEROGLYPH A262 -14529 ; [.55BD.0020.0002] # ANATOLIAN HIEROGLYPH A263 -1452A ; [.55BE.0020.0002] # ANATOLIAN HIEROGLYPH A264 -1452B ; [.55BF.0020.0002] # ANATOLIAN HIEROGLYPH A265 -1452C ; [.55C0.0020.0002] # ANATOLIAN HIEROGLYPH A266 -1452D ; [.55C1.0020.0002] # ANATOLIAN HIEROGLYPH A267 -1452E ; [.55C2.0020.0002] # ANATOLIAN HIEROGLYPH A267A -1452F ; [.55C3.0020.0002] # ANATOLIAN HIEROGLYPH A268 -14530 ; [.55C4.0020.0002] # ANATOLIAN HIEROGLYPH A269 -14531 ; [.55C5.0020.0002] # ANATOLIAN HIEROGLYPH A270 -14532 ; [.55C6.0020.0002] # ANATOLIAN HIEROGLYPH A271 -14533 ; [.55C7.0020.0002] # ANATOLIAN HIEROGLYPH A272 -14534 ; [.55C8.0020.0002] # ANATOLIAN HIEROGLYPH A273 -14535 ; [.55C9.0020.0002] # ANATOLIAN HIEROGLYPH A274 -14536 ; [.55CA.0020.0002] # ANATOLIAN HIEROGLYPH A275 -14537 ; [.55CB.0020.0002] # ANATOLIAN HIEROGLYPH A276 -14538 ; [.55CC.0020.0002] # ANATOLIAN HIEROGLYPH A277 -14539 ; [.55CD.0020.0002] # ANATOLIAN HIEROGLYPH A278 -1453A ; [.55CE.0020.0002] # ANATOLIAN HIEROGLYPH A279 -1453B ; [.55CF.0020.0002] # ANATOLIAN HIEROGLYPH A280 -1453C ; [.55D0.0020.0002] # ANATOLIAN HIEROGLYPH A281 -1453D ; [.55D1.0020.0002] # ANATOLIAN HIEROGLYPH A282 -1453E ; [.55D2.0020.0002] # ANATOLIAN HIEROGLYPH A283 -1453F ; [.55D3.0020.0002] # ANATOLIAN HIEROGLYPH A284 -14540 ; [.55D4.0020.0002] # ANATOLIAN HIEROGLYPH A285 -14541 ; [.55D5.0020.0002] # ANATOLIAN HIEROGLYPH A286 -14542 ; [.55D6.0020.0002] # ANATOLIAN HIEROGLYPH A287 -14543 ; [.55D7.0020.0002] # ANATOLIAN HIEROGLYPH A288 -14544 ; [.55D8.0020.0002] # ANATOLIAN HIEROGLYPH A289 -14545 ; [.55D9.0020.0002] # ANATOLIAN HIEROGLYPH A289A -14546 ; [.55DA.0020.0002] # ANATOLIAN HIEROGLYPH A290 -14547 ; [.55DB.0020.0002] # ANATOLIAN HIEROGLYPH A291 -14548 ; [.55DC.0020.0002] # ANATOLIAN HIEROGLYPH A292 -14549 ; [.55DD.0020.0002] # ANATOLIAN HIEROGLYPH A293 -1454A ; [.55DE.0020.0002] # ANATOLIAN HIEROGLYPH A294 -1454B ; [.55DF.0020.0002] # ANATOLIAN HIEROGLYPH A294A -1454C ; [.55E0.0020.0002] # ANATOLIAN HIEROGLYPH A295 -1454D ; [.55E1.0020.0002] # ANATOLIAN HIEROGLYPH A296 -1454E ; [.55E2.0020.0002] # ANATOLIAN HIEROGLYPH A297 -1454F ; [.55E3.0020.0002] # ANATOLIAN HIEROGLYPH A298 -14550 ; [.55E4.0020.0002] # ANATOLIAN HIEROGLYPH A299 -14551 ; [.55E5.0020.0002] # ANATOLIAN HIEROGLYPH A299A -14552 ; [.55E6.0020.0002] # ANATOLIAN HIEROGLYPH A300 -14553 ; [.55E7.0020.0002] # ANATOLIAN HIEROGLYPH A301 -14554 ; [.55E8.0020.0002] # ANATOLIAN HIEROGLYPH A302 -14555 ; [.55E9.0020.0002] # ANATOLIAN HIEROGLYPH A303 -14556 ; [.55EA.0020.0002] # ANATOLIAN HIEROGLYPH A304 -14557 ; [.55EB.0020.0002] # ANATOLIAN HIEROGLYPH A305 -14558 ; [.55EC.0020.0002] # ANATOLIAN HIEROGLYPH A306 -14559 ; [.55ED.0020.0002] # ANATOLIAN HIEROGLYPH A307 -1455A ; [.55EE.0020.0002] # ANATOLIAN HIEROGLYPH A308 -1455B ; [.55EF.0020.0002] # ANATOLIAN HIEROGLYPH A309 -1455C ; [.55F0.0020.0002] # ANATOLIAN HIEROGLYPH A309A -1455D ; [.55F1.0020.0002] # ANATOLIAN HIEROGLYPH A310 -1455E ; [.55F2.0020.0002] # ANATOLIAN HIEROGLYPH A311 -1455F ; [.55F3.0020.0002] # ANATOLIAN HIEROGLYPH A312 -14560 ; [.55F4.0020.0002] # ANATOLIAN HIEROGLYPH A313 -14561 ; [.55F5.0020.0002] # ANATOLIAN HIEROGLYPH A314 -14562 ; [.55F6.0020.0002] # ANATOLIAN HIEROGLYPH A315 -14563 ; [.55F7.0020.0002] # ANATOLIAN HIEROGLYPH A316 -14564 ; [.55F8.0020.0002] # ANATOLIAN HIEROGLYPH A317 -14565 ; [.55F9.0020.0002] # ANATOLIAN HIEROGLYPH A318 -14566 ; [.55FA.0020.0002] # ANATOLIAN HIEROGLYPH A319 -14567 ; [.55FB.0020.0002] # ANATOLIAN HIEROGLYPH A320 -14568 ; [.55FC.0020.0002] # ANATOLIAN HIEROGLYPH A321 -14569 ; [.55FD.0020.0002] # ANATOLIAN HIEROGLYPH A322 -1456A ; [.55FE.0020.0002] # ANATOLIAN HIEROGLYPH A323 -1456B ; [.55FF.0020.0002] # ANATOLIAN HIEROGLYPH A324 -1456C ; [.5600.0020.0002] # ANATOLIAN HIEROGLYPH A325 -1456D ; [.5601.0020.0002] # ANATOLIAN HIEROGLYPH A326 -1456E ; [.5602.0020.0002] # ANATOLIAN HIEROGLYPH A327 -1456F ; [.5603.0020.0002] # ANATOLIAN HIEROGLYPH A328 -14570 ; [.5604.0020.0002] # ANATOLIAN HIEROGLYPH A329 -14571 ; [.5605.0020.0002] # ANATOLIAN HIEROGLYPH A329A -14572 ; [.5606.0020.0002] # ANATOLIAN HIEROGLYPH A330 -14573 ; [.5607.0020.0002] # ANATOLIAN HIEROGLYPH A331 -14574 ; [.5608.0020.0002] # ANATOLIAN HIEROGLYPH A332A -14575 ; [.5609.0020.0002] # ANATOLIAN HIEROGLYPH A332B -14576 ; [.560A.0020.0002] # ANATOLIAN HIEROGLYPH A332C -14577 ; [.560B.0020.0002] # ANATOLIAN HIEROGLYPH A333 -14578 ; [.560C.0020.0002] # ANATOLIAN HIEROGLYPH A334 -14579 ; [.560D.0020.0002] # ANATOLIAN HIEROGLYPH A335 -1457A ; [.560E.0020.0002] # ANATOLIAN HIEROGLYPH A336 -1457B ; [.560F.0020.0002] # ANATOLIAN HIEROGLYPH A336A -1457C ; [.5610.0020.0002] # ANATOLIAN HIEROGLYPH A336B -1457D ; [.5611.0020.0002] # ANATOLIAN HIEROGLYPH A336C -1457E ; [.5612.0020.0002] # ANATOLIAN HIEROGLYPH A337 -1457F ; [.5613.0020.0002] # ANATOLIAN HIEROGLYPH A338 -14580 ; [.5614.0020.0002] # ANATOLIAN HIEROGLYPH A339 -14581 ; [.5615.0020.0002] # ANATOLIAN HIEROGLYPH A340 -14582 ; [.5616.0020.0002] # ANATOLIAN HIEROGLYPH A341 -14583 ; [.5617.0020.0002] # ANATOLIAN HIEROGLYPH A342 -14584 ; [.5618.0020.0002] # ANATOLIAN HIEROGLYPH A343 -14585 ; [.5619.0020.0002] # ANATOLIAN HIEROGLYPH A344 -14586 ; [.561A.0020.0002] # ANATOLIAN HIEROGLYPH A345 -14587 ; [.561B.0020.0002] # ANATOLIAN HIEROGLYPH A346 -14588 ; [.561C.0020.0002] # ANATOLIAN HIEROGLYPH A347 -14589 ; [.561D.0020.0002] # ANATOLIAN HIEROGLYPH A348 -1458A ; [.561E.0020.0002] # ANATOLIAN HIEROGLYPH A349 -1458B ; [.561F.0020.0002] # ANATOLIAN HIEROGLYPH A350 -1458C ; [.5620.0020.0002] # ANATOLIAN HIEROGLYPH A351 -1458D ; [.5621.0020.0002] # ANATOLIAN HIEROGLYPH A352 -1458E ; [.5622.0020.0002] # ANATOLIAN HIEROGLYPH A353 -1458F ; [.5623.0020.0002] # ANATOLIAN HIEROGLYPH A354 -14590 ; [.5624.0020.0002] # ANATOLIAN HIEROGLYPH A355 -14591 ; [.5625.0020.0002] # ANATOLIAN HIEROGLYPH A356 -14592 ; [.5626.0020.0002] # ANATOLIAN HIEROGLYPH A357 -14593 ; [.5627.0020.0002] # ANATOLIAN HIEROGLYPH A358 -14594 ; [.5628.0020.0002] # ANATOLIAN HIEROGLYPH A359 -14595 ; [.5629.0020.0002] # ANATOLIAN HIEROGLYPH A359A -14596 ; [.562A.0020.0002] # ANATOLIAN HIEROGLYPH A360 -14597 ; [.562B.0020.0002] # ANATOLIAN HIEROGLYPH A361 -14598 ; [.562C.0020.0002] # ANATOLIAN HIEROGLYPH A362 -14599 ; [.562D.0020.0002] # ANATOLIAN HIEROGLYPH A363 -1459A ; [.562E.0020.0002] # ANATOLIAN HIEROGLYPH A364 -1459B ; [.562F.0020.0002] # ANATOLIAN HIEROGLYPH A364A -1459C ; [.5630.0020.0002] # ANATOLIAN HIEROGLYPH A365 -1459D ; [.5631.0020.0002] # ANATOLIAN HIEROGLYPH A366 -1459E ; [.5632.0020.0002] # ANATOLIAN HIEROGLYPH A367 -1459F ; [.5633.0020.0002] # ANATOLIAN HIEROGLYPH A368 -145A0 ; [.5634.0020.0002] # ANATOLIAN HIEROGLYPH A368A -145A1 ; [.5635.0020.0002] # ANATOLIAN HIEROGLYPH A369 -145A2 ; [.5636.0020.0002] # ANATOLIAN HIEROGLYPH A370 -145A3 ; [.5637.0020.0002] # ANATOLIAN HIEROGLYPH A371 -145A4 ; [.5638.0020.0002] # ANATOLIAN HIEROGLYPH A371A -145A5 ; [.5639.0020.0002] # ANATOLIAN HIEROGLYPH A372 -145A6 ; [.563A.0020.0002] # ANATOLIAN HIEROGLYPH A373 -145A7 ; [.563B.0020.0002] # ANATOLIAN HIEROGLYPH A374 -145A8 ; [.563C.0020.0002] # ANATOLIAN HIEROGLYPH A375 -145A9 ; [.563D.0020.0002] # ANATOLIAN HIEROGLYPH A376 -145AA ; [.563E.0020.0002] # ANATOLIAN HIEROGLYPH A377 -145AB ; [.563F.0020.0002] # ANATOLIAN HIEROGLYPH A378 -145AC ; [.5640.0020.0002] # ANATOLIAN HIEROGLYPH A379 -145AD ; [.5641.0020.0002] # ANATOLIAN HIEROGLYPH A380 -145AE ; [.5642.0020.0002] # ANATOLIAN HIEROGLYPH A381 -145AF ; [.5643.0020.0002] # ANATOLIAN HIEROGLYPH A381A -145B0 ; [.5644.0020.0002] # ANATOLIAN HIEROGLYPH A382 -145B1 ; [.5645.0020.0002] # ANATOLIAN HIEROGLYPH A383 RA OR RI -145B2 ; [.5646.0020.0002] # ANATOLIAN HIEROGLYPH A383A -145B3 ; [.5647.0020.0002] # ANATOLIAN HIEROGLYPH A384 -145B4 ; [.5648.0020.0002] # ANATOLIAN HIEROGLYPH A385 -145B5 ; [.5649.0020.0002] # ANATOLIAN HIEROGLYPH A386 -145B6 ; [.564A.0020.0002] # ANATOLIAN HIEROGLYPH A386A -145B7 ; [.564B.0020.0002] # ANATOLIAN HIEROGLYPH A387 -145B8 ; [.564C.0020.0002] # ANATOLIAN HIEROGLYPH A388 -145B9 ; [.564D.0020.0002] # ANATOLIAN HIEROGLYPH A389 -145BA ; [.564E.0020.0002] # ANATOLIAN HIEROGLYPH A390 -145BB ; [.564F.0020.0002] # ANATOLIAN HIEROGLYPH A391 -145BC ; [.5650.0020.0002] # ANATOLIAN HIEROGLYPH A392 -145BD ; [.5651.0020.0002] # ANATOLIAN HIEROGLYPH A393 EIGHT -145BE ; [.5652.0020.0002] # ANATOLIAN HIEROGLYPH A394 -145BF ; [.5653.0020.0002] # ANATOLIAN HIEROGLYPH A395 -145C0 ; [.5654.0020.0002] # ANATOLIAN HIEROGLYPH A396 -145C1 ; [.5655.0020.0002] # ANATOLIAN HIEROGLYPH A397 -145C2 ; [.5656.0020.0002] # ANATOLIAN HIEROGLYPH A398 -145C3 ; [.5657.0020.0002] # ANATOLIAN HIEROGLYPH A399 -145C4 ; [.5658.0020.0002] # ANATOLIAN HIEROGLYPH A400 -145C5 ; [.5659.0020.0002] # ANATOLIAN HIEROGLYPH A401 -145C6 ; [.565A.0020.0002] # ANATOLIAN HIEROGLYPH A402 -145C7 ; [.565B.0020.0002] # ANATOLIAN HIEROGLYPH A403 -145C8 ; [.565C.0020.0002] # ANATOLIAN HIEROGLYPH A404 -145C9 ; [.565D.0020.0002] # ANATOLIAN HIEROGLYPH A405 -145CA ; [.565E.0020.0002] # ANATOLIAN HIEROGLYPH A406 -145CB ; [.565F.0020.0002] # ANATOLIAN HIEROGLYPH A407 -145CC ; [.5660.0020.0002] # ANATOLIAN HIEROGLYPH A408 -145CD ; [.5661.0020.0002] # ANATOLIAN HIEROGLYPH A409 -145CE ; [.5662.0020.0002] # ANATOLIAN HIEROGLYPH A410 BEGIN LOGOGRAM MARK -145CF ; [.5663.0020.0002] # ANATOLIAN HIEROGLYPH A410A END LOGOGRAM MARK -145D0 ; [.5664.0020.0002] # ANATOLIAN HIEROGLYPH A411 -145D1 ; [.5665.0020.0002] # ANATOLIAN HIEROGLYPH A412 -145D2 ; [.5666.0020.0002] # ANATOLIAN HIEROGLYPH A413 -145D3 ; [.5667.0020.0002] # ANATOLIAN HIEROGLYPH A414 -145D4 ; [.5668.0020.0002] # ANATOLIAN HIEROGLYPH A415 -145D5 ; [.5669.0020.0002] # ANATOLIAN HIEROGLYPH A416 -145D6 ; [.566A.0020.0002] # ANATOLIAN HIEROGLYPH A417 -145D7 ; [.566B.0020.0002] # ANATOLIAN HIEROGLYPH A418 -145D8 ; [.566C.0020.0002] # ANATOLIAN HIEROGLYPH A419 -145D9 ; [.566D.0020.0002] # ANATOLIAN HIEROGLYPH A420 -145DA ; [.566E.0020.0002] # ANATOLIAN HIEROGLYPH A421 -145DB ; [.566F.0020.0002] # ANATOLIAN HIEROGLYPH A422 -145DC ; [.5670.0020.0002] # ANATOLIAN HIEROGLYPH A423 -145DD ; [.5671.0020.0002] # ANATOLIAN HIEROGLYPH A424 -145DE ; [.5672.0020.0002] # ANATOLIAN HIEROGLYPH A425 -145DF ; [.5673.0020.0002] # ANATOLIAN HIEROGLYPH A426 -145E0 ; [.5674.0020.0002] # ANATOLIAN HIEROGLYPH A427 -145E1 ; [.5675.0020.0002] # ANATOLIAN HIEROGLYPH A428 -145E2 ; [.5676.0020.0002] # ANATOLIAN HIEROGLYPH A429 -145E3 ; [.5677.0020.0002] # ANATOLIAN HIEROGLYPH A430 -145E4 ; [.5678.0020.0002] # ANATOLIAN HIEROGLYPH A431 -145E5 ; [.5679.0020.0002] # ANATOLIAN HIEROGLYPH A432 -145E6 ; [.567A.0020.0002] # ANATOLIAN HIEROGLYPH A433 -145E7 ; [.567B.0020.0002] # ANATOLIAN HIEROGLYPH A434 -145E8 ; [.567C.0020.0002] # ANATOLIAN HIEROGLYPH A435 -145E9 ; [.567D.0020.0002] # ANATOLIAN HIEROGLYPH A436 -145EA ; [.567E.0020.0002] # ANATOLIAN HIEROGLYPH A437 -145EB ; [.567F.0020.0002] # ANATOLIAN HIEROGLYPH A438 -145EC ; [.5680.0020.0002] # ANATOLIAN HIEROGLYPH A439 -145ED ; [.5681.0020.0002] # ANATOLIAN HIEROGLYPH A440 -145EE ; [.5682.0020.0002] # ANATOLIAN HIEROGLYPH A441 -145EF ; [.5683.0020.0002] # ANATOLIAN HIEROGLYPH A442 -145F0 ; [.5684.0020.0002] # ANATOLIAN HIEROGLYPH A443 -145F1 ; [.5685.0020.0002] # ANATOLIAN HIEROGLYPH A444 -145F2 ; [.5686.0020.0002] # ANATOLIAN HIEROGLYPH A445 -145F3 ; [.5687.0020.0002] # ANATOLIAN HIEROGLYPH A446 -145F4 ; [.5688.0020.0002] # ANATOLIAN HIEROGLYPH A447 -145F5 ; [.5689.0020.0002] # ANATOLIAN HIEROGLYPH A448 -145F6 ; [.568A.0020.0002] # ANATOLIAN HIEROGLYPH A449 -145F7 ; [.568B.0020.0002] # ANATOLIAN HIEROGLYPH A450 -145F8 ; [.568C.0020.0002] # ANATOLIAN HIEROGLYPH A450A -145F9 ; [.568D.0020.0002] # ANATOLIAN HIEROGLYPH A451 -145FA ; [.568E.0020.0002] # ANATOLIAN HIEROGLYPH A452 -145FB ; [.568F.0020.0002] # ANATOLIAN HIEROGLYPH A453 -145FC ; [.5690.0020.0002] # ANATOLIAN HIEROGLYPH A454 -145FD ; [.5691.0020.0002] # ANATOLIAN HIEROGLYPH A455 -145FE ; [.5692.0020.0002] # ANATOLIAN HIEROGLYPH A456 -145FF ; [.5693.0020.0002] # ANATOLIAN HIEROGLYPH A457 -14600 ; [.5694.0020.0002] # ANATOLIAN HIEROGLYPH A457A -14601 ; [.5695.0020.0002] # ANATOLIAN HIEROGLYPH A458 -14602 ; [.5696.0020.0002] # ANATOLIAN HIEROGLYPH A459 -14603 ; [.5697.0020.0002] # ANATOLIAN HIEROGLYPH A460 -14604 ; [.5698.0020.0002] # ANATOLIAN HIEROGLYPH A461 -14605 ; [.5699.0020.0002] # ANATOLIAN HIEROGLYPH A462 -14606 ; [.569A.0020.0002] # ANATOLIAN HIEROGLYPH A463 -14607 ; [.569B.0020.0002] # ANATOLIAN HIEROGLYPH A464 -14608 ; [.569C.0020.0002] # ANATOLIAN HIEROGLYPH A465 -14609 ; [.569D.0020.0002] # ANATOLIAN HIEROGLYPH A466 -1460A ; [.569E.0020.0002] # ANATOLIAN HIEROGLYPH A467 -1460B ; [.569F.0020.0002] # ANATOLIAN HIEROGLYPH A468 -1460C ; [.56A0.0020.0002] # ANATOLIAN HIEROGLYPH A469 -1460D ; [.56A1.0020.0002] # ANATOLIAN HIEROGLYPH A470 -1460E ; [.56A2.0020.0002] # ANATOLIAN HIEROGLYPH A471 -1460F ; [.56A3.0020.0002] # ANATOLIAN HIEROGLYPH A472 -14610 ; [.56A4.0020.0002] # ANATOLIAN HIEROGLYPH A473 -14611 ; [.56A5.0020.0002] # ANATOLIAN HIEROGLYPH A474 -14612 ; [.56A6.0020.0002] # ANATOLIAN HIEROGLYPH A475 -14613 ; [.56A7.0020.0002] # ANATOLIAN HIEROGLYPH A476 -14614 ; [.56A8.0020.0002] # ANATOLIAN HIEROGLYPH A477 -14615 ; [.56A9.0020.0002] # ANATOLIAN HIEROGLYPH A478 -14616 ; [.56AA.0020.0002] # ANATOLIAN HIEROGLYPH A479 -14617 ; [.56AB.0020.0002] # ANATOLIAN HIEROGLYPH A480 -14618 ; [.56AC.0020.0002] # ANATOLIAN HIEROGLYPH A481 -14619 ; [.56AD.0020.0002] # ANATOLIAN HIEROGLYPH A482 -1461A ; [.56AE.0020.0002] # ANATOLIAN HIEROGLYPH A483 -1461B ; [.56AF.0020.0002] # ANATOLIAN HIEROGLYPH A484 -1461C ; [.56B0.0020.0002] # ANATOLIAN HIEROGLYPH A485 -1461D ; [.56B1.0020.0002] # ANATOLIAN HIEROGLYPH A486 -1461E ; [.56B2.0020.0002] # ANATOLIAN HIEROGLYPH A487 -1461F ; [.56B3.0020.0002] # ANATOLIAN HIEROGLYPH A488 -14620 ; [.56B4.0020.0002] # ANATOLIAN HIEROGLYPH A489 -14621 ; [.56B5.0020.0002] # ANATOLIAN HIEROGLYPH A490 -14622 ; [.56B6.0020.0002] # ANATOLIAN HIEROGLYPH A491 -14623 ; [.56B7.0020.0002] # ANATOLIAN HIEROGLYPH A492 -14624 ; [.56B8.0020.0002] # ANATOLIAN HIEROGLYPH A493 -14625 ; [.56B9.0020.0002] # ANATOLIAN HIEROGLYPH A494 -14626 ; [.56BA.0020.0002] # ANATOLIAN HIEROGLYPH A495 -14627 ; [.56BB.0020.0002] # ANATOLIAN HIEROGLYPH A496 -14628 ; [.56BC.0020.0002] # ANATOLIAN HIEROGLYPH A497 -14629 ; [.56BD.0020.0002] # ANATOLIAN HIEROGLYPH A501 -1462A ; [.56BE.0020.0002] # ANATOLIAN HIEROGLYPH A502 -1462B ; [.56BF.0020.0002] # ANATOLIAN HIEROGLYPH A503 -1462C ; [.56C0.0020.0002] # ANATOLIAN HIEROGLYPH A504 -1462D ; [.56C1.0020.0002] # ANATOLIAN HIEROGLYPH A505 -1462E ; [.56C2.0020.0002] # ANATOLIAN HIEROGLYPH A506 -1462F ; [.56C3.0020.0002] # ANATOLIAN HIEROGLYPH A507 -14630 ; [.56C4.0020.0002] # ANATOLIAN HIEROGLYPH A508 -14631 ; [.56C5.0020.0002] # ANATOLIAN HIEROGLYPH A509 -14632 ; [.56C6.0020.0002] # ANATOLIAN HIEROGLYPH A510 -14633 ; [.56C7.0020.0002] # ANATOLIAN HIEROGLYPH A511 -14634 ; [.56C8.0020.0002] # ANATOLIAN HIEROGLYPH A512 -14635 ; [.56C9.0020.0002] # ANATOLIAN HIEROGLYPH A513 -14636 ; [.56CA.0020.0002] # ANATOLIAN HIEROGLYPH A514 -14637 ; [.56CB.0020.0002] # ANATOLIAN HIEROGLYPH A515 -14638 ; [.56CC.0020.0002] # ANATOLIAN HIEROGLYPH A516 -14639 ; [.56CD.0020.0002] # ANATOLIAN HIEROGLYPH A517 -1463A ; [.56CE.0020.0002] # ANATOLIAN HIEROGLYPH A518 -1463B ; [.56CF.0020.0002] # ANATOLIAN HIEROGLYPH A519 -1463C ; [.56D0.0020.0002] # ANATOLIAN HIEROGLYPH A520 -1463D ; [.56D1.0020.0002] # ANATOLIAN HIEROGLYPH A521 -1463E ; [.56D2.0020.0002] # ANATOLIAN HIEROGLYPH A522 -1463F ; [.56D3.0020.0002] # ANATOLIAN HIEROGLYPH A523 -14640 ; [.56D4.0020.0002] # ANATOLIAN HIEROGLYPH A524 -14641 ; [.56D5.0020.0002] # ANATOLIAN HIEROGLYPH A525 -14642 ; [.56D6.0020.0002] # ANATOLIAN HIEROGLYPH A526 -14643 ; [.56D7.0020.0002] # ANATOLIAN HIEROGLYPH A527 -14644 ; [.56D8.0020.0002] # ANATOLIAN HIEROGLYPH A528 -14645 ; [.56D9.0020.0002] # ANATOLIAN HIEROGLYPH A529 -14646 ; [.56DA.0020.0002] # ANATOLIAN HIEROGLYPH A530 +11D96 ; [.0000.00C5.0002] # GUNJALA GONDI SIGN VISARGA +09FE ; [.0000.00C6.0002] # BENGALI SANDHI MARK +111C9 ; [.0000.00C6.0002] # SHARADA SANDHI MARK +1145E ; [.0000.00C6.0002] # NEWA SANDHI MARK +0A70 ; [.0000.00C7.0002] # GURMUKHI TIPPI +0A71 ; [.0000.00C8.0002] # GURMUKHI ADDAK +1B03 ; [.0000.00C9.0002] # BALINESE SIGN SURANG +A982 ; [.0000.00CA.0002] # JAVANESE SIGN LAYAR +1B81 ; [.0000.00CB.0002] # SUNDANESE SIGN PANGLAYAR +ABEC ; [.0000.00CC.0002] # MEETEI MAYEK LUM IYEK +10A38 ; [.0000.00CD.0002] # KHAROSHTHI SIGN BAR ABOVE +10A39 ; [.0000.00CE.0002] # KHAROSHTHI SIGN CAUDA +10A3A ; [.0000.00CF.0002] # KHAROSHTHI SIGN DOT BELOW +111CB ; [.0000.00D0.0002] # SHARADA VOWEL MODIFIER MARK +111CC ; [.0000.00D1.0002] # SHARADA EXTRA SHORT VOWEL MARK +11A98 ; [.0000.00D2.0002] # SOYOMBO GEMINATION MARK +0E4E ; [.0000.00D3.0002] # THAI CHARACTER YAMAKKAN +0E47 ; [.0000.00D4.0002] # THAI CHARACTER MAITAIKHU +0E48 ; [.0000.00D5.0002] # THAI CHARACTER MAI EK +0E49 ; [.0000.00D6.0002] # THAI CHARACTER MAI THO +0E4A ; [.0000.00D7.0002] # THAI CHARACTER MAI TRI +0E4B ; [.0000.00D8.0002] # THAI CHARACTER MAI CHATTAWA +0E4C ; [.0000.00D9.0002] # THAI CHARACTER THANTHAKHAT +0E4D ; [.0000.00DA.0002] # THAI CHARACTER NIKHAHIT +0EC8 ; [.0000.00DB.0002] # LAO TONE MAI EK +0EC9 ; [.0000.00DC.0002] # LAO TONE MAI THO +0ECA ; [.0000.00DD.0002] # LAO TONE MAI TI +0ECB ; [.0000.00DE.0002] # LAO TONE MAI CATAWA +0ECC ; [.0000.00DF.0002] # LAO CANCELLATION MARK +0ECD ; [.0000.00E0.0002] # LAO NIGGAHITA +AABF ; [.0000.00E1.0002] # TAI VIET TONE MAI EK +AAC1 ; [.0000.00E2.0002] # TAI VIET TONE MAI THO +0F39 ; [.0000.00E3.0002] # TIBETAN MARK TSA -PHRU +A92B ; [.0000.00E4.0002] # KAYAH LI TONE PLOPHU +A92C ; [.0000.00E5.0002] # KAYAH LI TONE CALYA +A92D ; [.0000.00E6.0002] # KAYAH LI TONE CALYA PLOPHU +1037 ; [.0000.00E7.0002] # MYANMAR SIGN DOT BELOW +17C8 ; [.0000.00E8.0002] # KHMER SIGN YUUKALEAPINTU +17C9 ; [.0000.00E9.0002] # KHMER SIGN MUUSIKATOAN +17CA ; [.0000.00EA.0002] # KHMER SIGN TRIISAP +1A75 ; [.0000.00EB.0002] # TAI THAM SIGN TONE-1 +1A76 ; [.0000.00EC.0002] # TAI THAM SIGN TONE-2 +1A77 ; [.0000.00ED.0002] # TAI THAM SIGN KHUEN TONE-3 +1A78 ; [.0000.00EE.0002] # TAI THAM SIGN KHUEN TONE-4 +1A79 ; [.0000.00EF.0002] # TAI THAM SIGN KHUEN TONE-5 +1A7A ; [.0000.00F0.0002] # TAI THAM SIGN RA HAAM +1A7B ; [.0000.00F1.0002] # TAI THAM SIGN MAI SAM +1A7C ; [.0000.00F2.0002] # TAI THAM SIGN KHUEN-LUE KARAN +1939 ; [.0000.00F3.0002] # LIMBU SIGN MUKPHRENG +193A ; [.0000.00F4.0002] # LIMBU SIGN KEMPHRENG +193B ; [.0000.00F5.0002] # LIMBU SIGN SA-I +16B30 ; [.0000.00F6.0002] # PAHAWH HMONG MARK CIM TUB +1E131 ; [.0000.00F6.0002] # NYIAKENG PUACHUE HMONG TONE-M +16B31 ; [.0000.00F7.0002] # PAHAWH HMONG MARK CIM SO +1E136 ; [.0000.00F7.0002] # NYIAKENG PUACHUE HMONG TONE-D +16B32 ; [.0000.00F8.0002] # PAHAWH HMONG MARK CIM KES +1E132 ; [.0000.00F8.0002] # NYIAKENG PUACHUE HMONG TONE-J +16B33 ; [.0000.00F9.0002] # PAHAWH HMONG MARK CIM KHAV +1E133 ; [.0000.00F9.0002] # NYIAKENG PUACHUE HMONG TONE-V +16B34 ; [.0000.00FA.0002] # PAHAWH HMONG MARK CIM SUAM +1E130 ; [.0000.00FA.0002] # NYIAKENG PUACHUE HMONG TONE-B +16B35 ; [.0000.00FB.0002] # PAHAWH HMONG MARK CIM HOM +1E134 ; [.0000.00FB.0002] # NYIAKENG PUACHUE HMONG TONE-S +16B36 ; [.0000.00FC.0002] # PAHAWH HMONG MARK CIM TAUM +1E135 ; [.0000.00FC.0002] # NYIAKENG PUACHUE HMONG TONE-G +1E2EC ; [.0000.00FD.0002] # WANCHO TONE TUP +1E2ED ; [.0000.00FE.0002] # WANCHO TONE TUPNI +1E2EE ; [.0000.00FF.0002] # WANCHO TONE KOI +1E2EF ; [.0000.0100.0002] # WANCHO TONE KOINI +302A ; [.0000.0101.0002] # IDEOGRAPHIC LEVEL TONE MARK +302B ; [.0000.0102.0002] # IDEOGRAPHIC RISING TONE MARK +302C ; [.0000.0103.0002] # IDEOGRAPHIC DEPARTING TONE MARK +302D ; [.0000.0104.0002] # IDEOGRAPHIC ENTERING TONE MARK +302E ; [.0000.0105.0002] # HANGUL SINGLE DOT TONE MARK +302F ; [.0000.0106.0002] # HANGUL DOUBLE DOT TONE MARK +16FF0 ; [.0000.0107.0002] # VIETNAMESE ALTERNATE READING MARK CA +16FF1 ; [.0000.0108.0002] # VIETNAMESE ALTERNATE READING MARK NHAY +20D0 ; [.0000.0109.0002] # COMBINING LEFT HARPOON ABOVE +20D1 ; [.0000.010A.0002] # COMBINING RIGHT HARPOON ABOVE +20D2 ; [.0000.010B.0002] # COMBINING LONG VERTICAL LINE OVERLAY +20D3 ; [.0000.010B.0002] # COMBINING SHORT VERTICAL LINE OVERLAY +20D4 ; [.0000.010C.0002] # COMBINING ANTICLOCKWISE ARROW ABOVE +20D5 ; [.0000.010D.0002] # COMBINING CLOCKWISE ARROW ABOVE +20D6 ; [.0000.010E.0002] # COMBINING LEFT ARROW ABOVE +20D7 ; [.0000.010F.0002] # COMBINING RIGHT ARROW ABOVE +20DB ; [.0000.0110.0002] # COMBINING THREE DOTS ABOVE +20DC ; [.0000.0111.0002] # COMBINING FOUR DOTS ABOVE +20E1 ; [.0000.0112.0002] # COMBINING LEFT RIGHT ARROW ABOVE +20E6 ; [.0000.0113.0002] # COMBINING DOUBLE VERTICAL STROKE OVERLAY +20E7 ; [.0000.0114.0002] # COMBINING ANNUITY SYMBOL +20E8 ; [.0000.0115.0002] # COMBINING TRIPLE UNDERDOT +20E9 ; [.0000.0116.0002] # COMBINING WIDE BRIDGE ABOVE +101FD ; [.0000.0117.0002] # PHAISTOS DISC SIGN COMBINING OBLIQUE STROKE +02D0 ; [.1F46.0020.0002] # MODIFIER LETTER TRIANGULAR COLON +02D1 ; [.1F47.0020.0002] # MODIFIER LETTER HALF TRIANGULAR COLON +0971 ; [.1F48.0020.0002] # DEVANAGARI SIGN HIGH SPACING DOT +0E46 ; [.1F49.0020.0002] # THAI CHARACTER MAIYAMOK +0EC6 ; [.1F4A.0020.0002] # LAO KO LA +17D7 ; [.1F4B.0020.0002] # KHMER SIGN LEK TOO +1AA7 ; [.1F4C.0020.0002] # TAI THAM SIGN MAI YAMOK +A9CF ; [.1F4D.0020.0002] # JAVANESE PANGRANGKEP +A9E6 ; [.1F4E.0020.0002] # MYANMAR MODIFIER LETTER SHAN REDUPLICATION +AA70 ; [.1F4F.0020.0002] # MYANMAR MODIFIER LETTER KHAMTI REDUPLICATION +AADD ; [.1F50.0020.0002] # TAI VIET SYMBOL SAM +AAF3 ; [.1F51.0020.0002] # MEETEI MAYEK SYLLABLE REPETITION MARK +AAF4 ; [.1F52.0020.0002] # MEETEI MAYEK WORD REPETITION MARK +16B42 ; [.1F53.0020.0002] # PAHAWH HMONG SIGN VOS NRUA +16B43 ; [.1F54.0020.0002] # PAHAWH HMONG SIGN IB YAM +1E13C ; [.1F55.0020.0002] # NYIAKENG PUACHUE HMONG SIGN XW XW +1E13D ; [.1F56.0020.0002] # NYIAKENG PUACHUE HMONG SYLLABLE LENGTHENER +3005 ; [.1F57.0020.0002] # IDEOGRAPHIC ITERATION MARK +303B ; [.1F58.0020.0002] # VERTICAL IDEOGRAPHIC ITERATION MARK +16FE0 ; [.1F59.0020.0002] # TANGUT ITERATION MARK +16FE1 ; [.1F5A.0020.0002] # NUSHU ITERATION MARK +16FE3 ; [.1F5B.0020.0002] # OLD CHINESE ITERATION MARK +3031 ; [.1F5C.0020.0002] # VERTICAL KANA REPEAT MARK +3032 ; [.1F5C.0020.0002][.0000.0037.0002] # VERTICAL KANA REPEAT WITH VOICED SOUND MARK +3033 ; [.1F5D.0020.0002] # VERTICAL KANA REPEAT MARK UPPER HALF +3034 ; [.1F5D.0020.0002][.0000.0037.0002] # VERTICAL KANA REPEAT WITH VOICED SOUND MARK UPPER HALF +3035 ; [.1F5E.0020.0002] # VERTICAL KANA REPEAT MARK LOWER HALF +309D ; [.1F5F.0020.0002] # HIRAGANA ITERATION MARK +309E ; [.1F5F.0020.0002][.0000.0037.0002] # HIRAGANA VOICED ITERATION MARK +30FC ; [.1F60.0020.0002] # KATAKANA-HIRAGANA PROLONGED SOUND MARK +FF70 ; [.1F60.0020.0012] # HALFWIDTH KATAKANA-HIRAGANA PROLONGED SOUND MARK +30FD ; [.1F61.0020.0002] # KATAKANA ITERATION MARK +30FE ; [.1F61.0020.0002][.0000.0037.0002] # KATAKANA VOICED ITERATION MARK +00A4 ; [.1F62.0020.0002] # CURRENCY SIGN +00A2 ; [.1F63.0020.0002] # CENT SIGN +FFE0 ; [.1F63.0020.0003] # FULLWIDTH CENT SIGN +0024 ; [.1F64.0020.0002] # DOLLAR SIGN +FF04 ; [.1F64.0020.0003] # FULLWIDTH DOLLAR SIGN +FE69 ; [.1F64.0020.000F] # SMALL DOLLAR SIGN +00A3 ; [.1F65.0020.0002] # POUND SIGN +FFE1 ; [.1F65.0020.0003] # FULLWIDTH POUND SIGN +00A5 ; [.1F66.0020.0002] # YEN SIGN +FFE5 ; [.1F66.0020.0003] # FULLWIDTH YEN SIGN +058F ; [.1F67.0020.0002] # ARMENIAN DRAM SIGN +060B ; [.1F68.0020.0002] # AFGHANI SIGN +07FE ; [.1F69.0020.0002] # NKO DOROME SIGN +07FF ; [.1F6A.0020.0002] # NKO TAMAN SIGN +09F2 ; [.1F6B.0020.0002] # BENGALI RUPEE MARK +09F3 ; [.1F6C.0020.0002] # BENGALI RUPEE SIGN +09FB ; [.1F6D.0020.0002] # BENGALI GANDA MARK +0AF1 ; [.1F6E.0020.0002] # GUJARATI RUPEE SIGN +A838 ; [.1F6F.0020.0002] # NORTH INDIC RUPEE MARK +0BF9 ; [.1F70.0020.0002] # TAMIL RUPEE SIGN +11FDD ; [.1F71.0020.0002] # TAMIL SIGN KAACU +11FDE ; [.1F72.0020.0002] # TAMIL SIGN PANAM +11FDF ; [.1F73.0020.0002] # TAMIL SIGN PON +11FE0 ; [.1F74.0020.0002] # TAMIL SIGN VARAAKAN +0E3F ; [.1F75.0020.0002] # THAI CURRENCY SYMBOL BAHT +17DB ; [.1F76.0020.0002] # KHMER CURRENCY SYMBOL RIEL +1E2FF ; [.1F77.0020.0002] # WANCHO NGUN SIGN +20A0 ; [.1F78.0020.0002] # EURO-CURRENCY SIGN +20A1 ; [.1F79.0020.0002] # COLON SIGN +20A2 ; [.1F7A.0020.0002] # CRUZEIRO SIGN +20A3 ; [.1F7B.0020.0002] # FRENCH FRANC SIGN +20A4 ; [.1F7C.0020.0002] # LIRA SIGN +20A5 ; [.1F7D.0020.0002] # MILL SIGN +20A6 ; [.1F7E.0020.0002] # NAIRA SIGN +20A7 ; [.1F7F.0020.0002] # PESETA SIGN +20A9 ; [.1F80.0020.0002] # WON SIGN +FFE6 ; [.1F80.0020.0003] # FULLWIDTH WON SIGN +20AA ; [.1F81.0020.0002] # NEW SHEQEL SIGN +20AB ; [.1F82.0020.0002] # DONG SIGN +20AC ; [.1F83.0020.0002] # EURO SIGN +20AD ; [.1F84.0020.0002] # KIP SIGN +20AE ; [.1F85.0020.0002] # TUGRIK SIGN +20AF ; [.1F86.0020.0002] # DRACHMA SIGN +20B0 ; [.1F87.0020.0002] # GERMAN PENNY SIGN +20B1 ; [.1F88.0020.0002] # PESO SIGN +20B2 ; [.1F89.0020.0002] # GUARANI SIGN +20B3 ; [.1F8A.0020.0002] # AUSTRAL SIGN +20B4 ; [.1F8B.0020.0002] # HRYVNIA SIGN +20B5 ; [.1F8C.0020.0002] # CEDI SIGN +20B6 ; [.1F8D.0020.0002] # LIVRE TOURNOIS SIGN +20B7 ; [.1F8E.0020.0002] # SPESMILO SIGN +20B8 ; [.1F8F.0020.0002] # TENGE SIGN +20B9 ; [.1F90.0020.0002] # INDIAN RUPEE SIGN +1ECB0 ; [.1F91.0020.0002] # INDIC SIYAQ RUPEE MARK +20BA ; [.1F92.0020.0002] # TURKISH LIRA SIGN +20BB ; [.1F93.0020.0002] # NORDIC MARK SIGN +20BC ; [.1F94.0020.0002] # MANAT SIGN +20BD ; [.1F95.0020.0002] # RUBLE SIGN +20BE ; [.1F96.0020.0002] # LARI SIGN +20BF ; [.1F97.0020.0002] # BITCOIN SIGN +0030 ; [.1F98.0020.0002] # DIGIT ZERO +0660 ; [.1F98.0020.0002] # ARABIC-INDIC DIGIT ZERO +06F0 ; [.1F98.0020.0002] # EXTENDED ARABIC-INDIC DIGIT ZERO +07C0 ; [.1F98.0020.0002] # NKO DIGIT ZERO +0966 ; [.1F98.0020.0002] # DEVANAGARI DIGIT ZERO +09E6 ; [.1F98.0020.0002] # BENGALI DIGIT ZERO +0A66 ; [.1F98.0020.0002] # GURMUKHI DIGIT ZERO +0AE6 ; [.1F98.0020.0002] # GUJARATI DIGIT ZERO +0B66 ; [.1F98.0020.0002] # ORIYA DIGIT ZERO +0BE6 ; [.1F98.0020.0002] # TAMIL DIGIT ZERO +0C66 ; [.1F98.0020.0002] # TELUGU DIGIT ZERO +0C78 ; [.1F98.0020.0002] # TELUGU FRACTION DIGIT ZERO FOR ODD POWERS OF FOUR +0CE6 ; [.1F98.0020.0002] # KANNADA DIGIT ZERO +0D66 ; [.1F98.0020.0002] # MALAYALAM DIGIT ZERO +0DE6 ; [.1F98.0020.0002] # SINHALA LITH DIGIT ZERO +0E50 ; [.1F98.0020.0002] # THAI DIGIT ZERO +0ED0 ; [.1F98.0020.0002] # LAO DIGIT ZERO +0F20 ; [.1F98.0020.0002] # TIBETAN DIGIT ZERO +1040 ; [.1F98.0020.0002] # MYANMAR DIGIT ZERO +1090 ; [.1F98.0020.0002] # MYANMAR SHAN DIGIT ZERO +17E0 ; [.1F98.0020.0002] # KHMER DIGIT ZERO +17F0 ; [.1F98.0020.0002] # KHMER SYMBOL LEK ATTAK SON +1810 ; [.1F98.0020.0002] # MONGOLIAN DIGIT ZERO +1946 ; [.1F98.0020.0002] # LIMBU DIGIT ZERO +19D0 ; [.1F98.0020.0002] # NEW TAI LUE DIGIT ZERO +1A80 ; [.1F98.0020.0002] # TAI THAM HORA DIGIT ZERO +1A90 ; [.1F98.0020.0002] # TAI THAM THAM DIGIT ZERO +1B50 ; [.1F98.0020.0002] # BALINESE DIGIT ZERO +1BB0 ; [.1F98.0020.0002] # SUNDANESE DIGIT ZERO +1C40 ; [.1F98.0020.0002] # LEPCHA DIGIT ZERO +1C50 ; [.1F98.0020.0002] # OL CHIKI DIGIT ZERO +3007 ; [.1F98.0020.0002] # IDEOGRAPHIC NUMBER ZERO +A620 ; [.1F98.0020.0002] # VAI DIGIT ZERO +A8D0 ; [.1F98.0020.0002] # SAURASHTRA DIGIT ZERO +A900 ; [.1F98.0020.0002] # KAYAH LI DIGIT ZERO +A9D0 ; [.1F98.0020.0002] # JAVANESE DIGIT ZERO +A9F0 ; [.1F98.0020.0002] # MYANMAR TAI LAING DIGIT ZERO +AA50 ; [.1F98.0020.0002] # CHAM DIGIT ZERO +ABF0 ; [.1F98.0020.0002] # MEETEI MAYEK DIGIT ZERO +1018A ; [.1F98.0020.0002] # GREEK ZERO SIGN +104A0 ; [.1F98.0020.0002] # OSMANYA DIGIT ZERO +10D30 ; [.1F98.0020.0002] # HANIFI ROHINGYA DIGIT ZERO +11066 ; [.1F98.0020.0002] # BRAHMI DIGIT ZERO +110F0 ; [.1F98.0020.0002] # SORA SOMPENG DIGIT ZERO +11136 ; [.1F98.0020.0002] # CHAKMA DIGIT ZERO +111D0 ; [.1F98.0020.0002] # SHARADA DIGIT ZERO +112F0 ; [.1F98.0020.0002] # KHUDAWADI DIGIT ZERO +11450 ; [.1F98.0020.0002] # NEWA DIGIT ZERO +114D0 ; [.1F98.0020.0002] # TIRHUTA DIGIT ZERO +11650 ; [.1F98.0020.0002] # MODI DIGIT ZERO +116C0 ; [.1F98.0020.0002] # TAKRI DIGIT ZERO +11730 ; [.1F98.0020.0002] # AHOM DIGIT ZERO +118E0 ; [.1F98.0020.0002] # WARANG CITI DIGIT ZERO +11950 ; [.1F98.0020.0002] # DIVES AKURU DIGIT ZERO +11C50 ; [.1F98.0020.0002] # BHAIKSUKI DIGIT ZERO +11D50 ; [.1F98.0020.0002] # MASARAM GONDI DIGIT ZERO +11DA0 ; [.1F98.0020.0002] # GUNJALA GONDI DIGIT ZERO +16A60 ; [.1F98.0020.0002] # MRO DIGIT ZERO +16B50 ; [.1F98.0020.0002] # PAHAWH HMONG DIGIT ZERO +16E80 ; [.1F98.0020.0002] # MEDEFAIDRIN DIGIT ZERO +1D2E0 ; [.1F98.0020.0002] # MAYAN NUMERAL ZERO +1E140 ; [.1F98.0020.0002] # NYIAKENG PUACHUE HMONG DIGIT ZERO +1E2F0 ; [.1F98.0020.0002] # WANCHO DIGIT ZERO +1E950 ; [.1F98.0020.0002] # ADLAM DIGIT ZERO +FF10 ; [.1F98.0020.0003] # FULLWIDTH DIGIT ZERO +0F33 ; [.1F98.0020.0004] # TIBETAN DIGIT HALF ZERO +1F100 ; [.1F98.0020.0004][*027E.0020.0004] # DIGIT ZERO FULL STOP +1F101 ; [.1F98.0020.0004][*0223.0020.0004] # DIGIT ZERO COMMA +1D7CE ; [.1F98.0020.0005] # MATHEMATICAL BOLD DIGIT ZERO +1D7D8 ; [.1F98.0020.0005] # MATHEMATICAL DOUBLE-STRUCK DIGIT ZERO +1D7E2 ; [.1F98.0020.0005] # MATHEMATICAL SANS-SERIF DIGIT ZERO +1D7EC ; [.1F98.0020.0005] # MATHEMATICAL SANS-SERIF BOLD DIGIT ZERO +1D7F6 ; [.1F98.0020.0005] # MATHEMATICAL MONOSPACE DIGIT ZERO +1FBF0 ; [.1F98.0020.0005] # SEGMENTED DIGIT ZERO +24EA ; [.1F98.0020.0006] # CIRCLED DIGIT ZERO +24FF ; [.1F98.0020.0006] # NEGATIVE CIRCLED DIGIT ZERO +1F10B ; [.1F98.0020.0006] # DINGBAT CIRCLED SANS-SERIF DIGIT ZERO +1F10C ; [.1F98.0020.0006] # DINGBAT NEGATIVE CIRCLED SANS-SERIF DIGIT ZERO +2070 ; [.1F98.0020.0014] # SUPERSCRIPT ZERO +2080 ; [.1F98.0020.0015] # SUBSCRIPT ZERO +2189 ; [.1F98.0020.001E][*0676.0020.001E][.1F9B.0020.001E] # VULGAR FRACTION ZERO THIRDS +3358 ; [.1F98.0020.0004][.FB40.0020.0004][.F0B9.0000.0000] # IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR ZERO +0031 ; [.1F99.0020.0002] # DIGIT ONE +0661 ; [.1F99.0020.0002] # ARABIC-INDIC DIGIT ONE +06F1 ; [.1F99.0020.0002] # EXTENDED ARABIC-INDIC DIGIT ONE +07C1 ; [.1F99.0020.0002] # NKO DIGIT ONE +0967 ; [.1F99.0020.0002] # DEVANAGARI DIGIT ONE +09E7 ; [.1F99.0020.0002] # BENGALI DIGIT ONE +0A67 ; [.1F99.0020.0002] # GURMUKHI DIGIT ONE +0AE7 ; [.1F99.0020.0002] # GUJARATI DIGIT ONE +0B67 ; [.1F99.0020.0002] # ORIYA DIGIT ONE +0BE7 ; [.1F99.0020.0002] # TAMIL DIGIT ONE +0C67 ; [.1F99.0020.0002] # TELUGU DIGIT ONE +0C79 ; [.1F99.0020.0002] # TELUGU FRACTION DIGIT ONE FOR ODD POWERS OF FOUR +0C7C ; [.1F99.0020.0002] # TELUGU FRACTION DIGIT ONE FOR EVEN POWERS OF FOUR +0CE7 ; [.1F99.0020.0002] # KANNADA DIGIT ONE +0D67 ; [.1F99.0020.0002] # MALAYALAM DIGIT ONE +0DE7 ; [.1F99.0020.0002] # SINHALA LITH DIGIT ONE +0E51 ; [.1F99.0020.0002] # THAI DIGIT ONE +0ED1 ; [.1F99.0020.0002] # LAO DIGIT ONE +0F21 ; [.1F99.0020.0002] # TIBETAN DIGIT ONE +1041 ; [.1F99.0020.0002] # MYANMAR DIGIT ONE +1091 ; [.1F99.0020.0002] # MYANMAR SHAN DIGIT ONE +1369 ; [.1F99.0020.0002] # ETHIOPIC DIGIT ONE +17E1 ; [.1F99.0020.0002] # KHMER DIGIT ONE +17F1 ; [.1F99.0020.0002] # KHMER SYMBOL LEK ATTAK MUOY +1811 ; [.1F99.0020.0002] # MONGOLIAN DIGIT ONE +1947 ; [.1F99.0020.0002] # LIMBU DIGIT ONE +19D1 ; [.1F99.0020.0002] # NEW TAI LUE DIGIT ONE +19DA ; [.1F99.0020.0002] # NEW TAI LUE THAM DIGIT ONE +1A81 ; [.1F99.0020.0002] # TAI THAM HORA DIGIT ONE +1A91 ; [.1F99.0020.0002] # TAI THAM THAM DIGIT ONE +1B51 ; [.1F99.0020.0002] # BALINESE DIGIT ONE +1BB1 ; [.1F99.0020.0002] # SUNDANESE DIGIT ONE +1C41 ; [.1F99.0020.0002] # LEPCHA DIGIT ONE +1C51 ; [.1F99.0020.0002] # OL CHIKI DIGIT ONE +3021 ; [.1F99.0020.0002] # HANGZHOU NUMERAL ONE +A621 ; [.1F99.0020.0002] # VAI DIGIT ONE +A8D1 ; [.1F99.0020.0002] # SAURASHTRA DIGIT ONE +A901 ; [.1F99.0020.0002] # KAYAH LI DIGIT ONE +A9D1 ; [.1F99.0020.0002] # JAVANESE DIGIT ONE +A9F1 ; [.1F99.0020.0002] # MYANMAR TAI LAING DIGIT ONE +AA51 ; [.1F99.0020.0002] # CHAM DIGIT ONE +ABF1 ; [.1F99.0020.0002] # MEETEI MAYEK DIGIT ONE +10107 ; [.1F99.0020.0002] # AEGEAN NUMBER ONE +10142 ; [.1F99.0020.0002] # GREEK ACROPHONIC ATTIC ONE DRACHMA +10158 ; [.1F99.0020.0002] # GREEK ACROPHONIC HERAEUM ONE PLETHRON +10159 ; [.1F99.0020.0002] # GREEK ACROPHONIC THESPIAN ONE +1015A ; [.1F99.0020.0002] # GREEK ACROPHONIC HERMIONIAN ONE +102E1 ; [.1F99.0020.0002] # COPTIC EPACT DIGIT ONE +10320 ; [.1F99.0020.0002] # OLD ITALIC NUMERAL ONE +103D1 ; [.1F99.0020.0002] # OLD PERSIAN NUMBER ONE +104A1 ; [.1F99.0020.0002] # OSMANYA DIGIT ONE +10858 ; [.1F99.0020.0002] # IMPERIAL ARAMAIC NUMBER ONE +10879 ; [.1F99.0020.0002] # PALMYRENE NUMBER ONE +108A7 ; [.1F99.0020.0002] # NABATAEAN NUMBER ONE +108FB ; [.1F99.0020.0002] # HATRAN NUMBER ONE +10916 ; [.1F99.0020.0002] # PHOENICIAN NUMBER ONE +109C0 ; [.1F99.0020.0002] # MEROITIC CURSIVE NUMBER ONE +10A40 ; [.1F99.0020.0002] # KHAROSHTHI DIGIT ONE +10A7D ; [.1F99.0020.0002] # OLD SOUTH ARABIAN NUMBER ONE +10A9D ; [.1F99.0020.0002] # OLD NORTH ARABIAN NUMBER ONE +10AEB ; [.1F99.0020.0002] # MANICHAEAN NUMBER ONE +10B58 ; [.1F99.0020.0002] # INSCRIPTIONAL PARTHIAN NUMBER ONE +10B78 ; [.1F99.0020.0002] # INSCRIPTIONAL PAHLAVI NUMBER ONE +10BA9 ; [.1F99.0020.0002] # PSALTER PAHLAVI NUMBER ONE +10CFA ; [.1F99.0020.0002] # OLD HUNGARIAN NUMBER ONE +10D31 ; [.1F99.0020.0002] # HANIFI ROHINGYA DIGIT ONE +10E60 ; [.1F99.0020.0002] # RUMI DIGIT ONE +10F1D ; [.1F99.0020.0002] # OLD SOGDIAN NUMBER ONE +10F51 ; [.1F99.0020.0002] # SOGDIAN NUMBER ONE +10FC5 ; [.1F99.0020.0002] # CHORASMIAN NUMBER ONE +11052 ; [.1F99.0020.0002] # BRAHMI NUMBER ONE +11067 ; [.1F99.0020.0002] # BRAHMI DIGIT ONE +110F1 ; [.1F99.0020.0002] # SORA SOMPENG DIGIT ONE +11137 ; [.1F99.0020.0002] # CHAKMA DIGIT ONE +111D1 ; [.1F99.0020.0002] # SHARADA DIGIT ONE +111E1 ; [.1F99.0020.0002] # SINHALA ARCHAIC DIGIT ONE +112F1 ; [.1F99.0020.0002] # KHUDAWADI DIGIT ONE +11451 ; [.1F99.0020.0002] # NEWA DIGIT ONE +114D1 ; [.1F99.0020.0002] # TIRHUTA DIGIT ONE +11651 ; [.1F99.0020.0002] # MODI DIGIT ONE +116C1 ; [.1F99.0020.0002] # TAKRI DIGIT ONE +11731 ; [.1F99.0020.0002] # AHOM DIGIT ONE +118E1 ; [.1F99.0020.0002] # WARANG CITI DIGIT ONE +11951 ; [.1F99.0020.0002] # DIVES AKURU DIGIT ONE +11C51 ; [.1F99.0020.0002] # BHAIKSUKI DIGIT ONE +11C5A ; [.1F99.0020.0002] # BHAIKSUKI NUMBER ONE +11D51 ; [.1F99.0020.0002] # MASARAM GONDI DIGIT ONE +11DA1 ; [.1F99.0020.0002] # GUNJALA GONDI DIGIT ONE +12415 ; [.1F99.0020.0002] # CUNEIFORM NUMERIC SIGN ONE GESH2 +1241E ; [.1F99.0020.0002] # CUNEIFORM NUMERIC SIGN ONE GESHU +1242C ; [.1F99.0020.0002] # CUNEIFORM NUMERIC SIGN ONE SHARU +12434 ; [.1F99.0020.0002] # CUNEIFORM NUMERIC SIGN ONE BURU +1244F ; [.1F99.0020.0002] # CUNEIFORM NUMERIC SIGN ONE BAN2 +12458 ; [.1F99.0020.0002] # CUNEIFORM NUMERIC SIGN ONE ESHE3 +16A61 ; [.1F99.0020.0002] # MRO DIGIT ONE +16B51 ; [.1F99.0020.0002] # PAHAWH HMONG DIGIT ONE +16E81 ; [.1F99.0020.0002] # MEDEFAIDRIN DIGIT ONE +1D2E1 ; [.1F99.0020.0002] # MAYAN NUMERAL ONE +1D360 ; [.1F99.0020.0002] # COUNTING ROD UNIT DIGIT ONE +1D372 ; [.1F99.0020.0002] # IDEOGRAPHIC TALLY MARK ONE +1D377 ; [.1F99.0020.0002] # TALLY MARK ONE +1E141 ; [.1F99.0020.0002] # NYIAKENG PUACHUE HMONG DIGIT ONE +1E2F1 ; [.1F99.0020.0002] # WANCHO DIGIT ONE +1E8C7 ; [.1F99.0020.0002] # MENDE KIKAKUI DIGIT ONE +1E951 ; [.1F99.0020.0002] # ADLAM DIGIT ONE +1EC71 ; [.1F99.0020.0002] # INDIC SIYAQ NUMBER ONE +1ECA3 ; [.1F99.0020.0002] # INDIC SIYAQ NUMBER PREFIXED ONE +1ED01 ; [.1F99.0020.0002] # OTTOMAN SIYAQ NUMBER ONE +FF11 ; [.1F99.0020.0003] # FULLWIDTH DIGIT ONE +0F2A ; [.1F99.0020.0004] # TIBETAN DIGIT HALF ONE +2474 ; [*0328.0020.0004][.1F99.0020.0004][*0329.0020.0004] # PARENTHESIZED DIGIT ONE +2488 ; [.1F99.0020.0004][*027E.0020.0004] # DIGIT ONE FULL STOP +1F102 ; [.1F99.0020.0004][*0223.0020.0004] # DIGIT ONE COMMA +1D7CF ; [.1F99.0020.0005] # MATHEMATICAL BOLD DIGIT ONE +1D7D9 ; [.1F99.0020.0005] # MATHEMATICAL DOUBLE-STRUCK DIGIT ONE +1D7E3 ; [.1F99.0020.0005] # MATHEMATICAL SANS-SERIF DIGIT ONE +1D7ED ; [.1F99.0020.0005] # MATHEMATICAL SANS-SERIF BOLD DIGIT ONE +1D7F7 ; [.1F99.0020.0005] # MATHEMATICAL MONOSPACE DIGIT ONE +1FBF1 ; [.1F99.0020.0005] # SEGMENTED DIGIT ONE +2460 ; [.1F99.0020.0006] # CIRCLED DIGIT ONE +24F5 ; [.1F99.0020.0006] # DOUBLE CIRCLED DIGIT ONE +2776 ; [.1F99.0020.0006] # DINGBAT NEGATIVE CIRCLED DIGIT ONE +2780 ; [.1F99.0020.0006] # DINGBAT CIRCLED SANS-SERIF DIGIT ONE +278A ; [.1F99.0020.0006] # DINGBAT NEGATIVE CIRCLED SANS-SERIF DIGIT ONE +00B9 ; [.1F99.0020.0014] # SUPERSCRIPT ONE +2081 ; [.1F99.0020.0015] # SUBSCRIPT ONE +215F ; [.1F99.0020.001E][*0676.0020.001E] # FRACTION NUMERATOR ONE +16E94 ; [.1F99.0020.0004][.0000.0118.0004] # MEDEFAIDRIN DIGIT ONE ALTERNATE FORM +1ECB1 ; [.1F99.0020.0004][.0000.0118.0004] # INDIC SIYAQ NUMBER ALTERNATE ONE +247D ; [*0328.0020.0004][.1F99.0020.0004][.1F98.0020.0004][*0329.0020.0004] # PARENTHESIZED NUMBER TEN +2491 ; [.1F99.0020.0004][.1F98.0020.0004][*027E.0020.0004] # NUMBER TEN FULL STOP +2469 ; [.1F99.0020.0006][.1F98.0020.0006] # CIRCLED NUMBER TEN +24FE ; [.1F99.0020.0006][.1F98.0020.0006] # DOUBLE CIRCLED NUMBER TEN +277F ; [.1F99.0020.0006][.1F98.0020.0006] # DINGBAT NEGATIVE CIRCLED NUMBER TEN +2789 ; [.1F99.0020.0006][.1F98.0020.0006] # DINGBAT CIRCLED SANS-SERIF NUMBER TEN +2793 ; [.1F99.0020.0006][.1F98.0020.0006] # DINGBAT NEGATIVE CIRCLED SANS-SERIF NUMBER TEN +3248 ; [.1F99.0020.0006][.1F98.0020.0006] # CIRCLED NUMBER TEN ON BLACK SQUARE +33E9 ; [.1F99.0020.0004][.1F98.0020.0004][.FB40.0020.0004][.E5E5.0000.0000] # IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY TEN +32C9 ; [.1F99.0020.0004][.1F98.0020.0004][.FB40.0020.0004][.E708.0000.0000] # IDEOGRAPHIC TELEGRAPH SYMBOL FOR OCTOBER +3362 ; [.1F99.0020.0004][.1F98.0020.0004][.FB40.0020.0004][.F0B9.0000.0000] # IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR TEN +247E ; [*0328.0020.0004][.1F99.0020.0004][.1F99.0020.0004][*0329.0020.0004] # PARENTHESIZED NUMBER ELEVEN +2492 ; [.1F99.0020.0004][.1F99.0020.0004][*027E.0020.0004] # NUMBER ELEVEN FULL STOP +246A ; [.1F99.0020.0006][.1F99.0020.0006] # CIRCLED NUMBER ELEVEN +24EB ; [.1F99.0020.0006][.1F99.0020.0006] # NEGATIVE CIRCLED NUMBER ELEVEN +2152 ; [.1F99.0020.001E][*0676.0020.001E][.1F99.0020.001E][.1F98.0020.001E] # VULGAR FRACTION ONE TENTH +33EA ; [.1F99.0020.0004][.1F99.0020.0004][.FB40.0020.0004][.E5E5.0000.0000] # IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY ELEVEN +32CA ; [.1F99.0020.0004][.1F99.0020.0004][.FB40.0020.0004][.E708.0000.0000] # IDEOGRAPHIC TELEGRAPH SYMBOL FOR NOVEMBER +3363 ; [.1F99.0020.0004][.1F99.0020.0004][.FB40.0020.0004][.F0B9.0000.0000] # IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR ELEVEN +247F ; [*0328.0020.0004][.1F99.0020.0004][.1F9A.0020.0004][*0329.0020.0004] # PARENTHESIZED NUMBER TWELVE +2493 ; [.1F99.0020.0004][.1F9A.0020.0004][*027E.0020.0004] # NUMBER TWELVE FULL STOP +246B ; [.1F99.0020.0006][.1F9A.0020.0006] # CIRCLED NUMBER TWELVE +24EC ; [.1F99.0020.0006][.1F9A.0020.0006] # NEGATIVE CIRCLED NUMBER TWELVE +00BD ; [.1F99.0020.001E][*0676.0020.001E][.1F9A.0020.001E] # VULGAR FRACTION ONE HALF +1F1A4 ; [.1F99.0020.001C][.1F9A.0020.001C][.1F98.0020.001C][.216B.0020.001D] # SQUARED ONE HUNDRED TWENTY P +33EB ; [.1F99.0020.0004][.1F9A.0020.0004][.FB40.0020.0004][.E5E5.0000.0000] # IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY TWELVE +32CB ; [.1F99.0020.0004][.1F9A.0020.0004][.FB40.0020.0004][.E708.0000.0000] # IDEOGRAPHIC TELEGRAPH SYMBOL FOR DECEMBER +3364 ; [.1F99.0020.0004][.1F9A.0020.0004][.FB40.0020.0004][.F0B9.0000.0000] # IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR TWELVE +2480 ; [*0328.0020.0004][.1F99.0020.0004][.1F9B.0020.0004][*0329.0020.0004] # PARENTHESIZED NUMBER THIRTEEN +2494 ; [.1F99.0020.0004][.1F9B.0020.0004][*027E.0020.0004] # NUMBER THIRTEEN FULL STOP +246C ; [.1F99.0020.0006][.1F9B.0020.0006] # CIRCLED NUMBER THIRTEEN +24ED ; [.1F99.0020.0006][.1F9B.0020.0006] # NEGATIVE CIRCLED NUMBER THIRTEEN +2153 ; [.1F99.0020.001E][*0676.0020.001E][.1F9B.0020.001E] # VULGAR FRACTION ONE THIRD +33EC ; [.1F99.0020.0004][.1F9B.0020.0004][.FB40.0020.0004][.E5E5.0000.0000] # IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY THIRTEEN +3365 ; [.1F99.0020.0004][.1F9B.0020.0004][.FB40.0020.0004][.F0B9.0000.0000] # IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR THIRTEEN +2481 ; [*0328.0020.0004][.1F99.0020.0004][.1F9C.0020.0004][*0329.0020.0004] # PARENTHESIZED NUMBER FOURTEEN +2495 ; [.1F99.0020.0004][.1F9C.0020.0004][*027E.0020.0004] # NUMBER FOURTEEN FULL STOP +246D ; [.1F99.0020.0006][.1F9C.0020.0006] # CIRCLED NUMBER FOURTEEN +24EE ; [.1F99.0020.0006][.1F9C.0020.0006] # NEGATIVE CIRCLED NUMBER FOURTEEN +00BC ; [.1F99.0020.001E][*0676.0020.001E][.1F9C.0020.001E] # VULGAR FRACTION ONE QUARTER +33ED ; [.1F99.0020.0004][.1F9C.0020.0004][.FB40.0020.0004][.E5E5.0000.0000] # IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY FOURTEEN +3366 ; [.1F99.0020.0004][.1F9C.0020.0004][.FB40.0020.0004][.F0B9.0000.0000] # IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR FOURTEEN +2482 ; [*0328.0020.0004][.1F99.0020.0004][.1F9D.0020.0004][*0329.0020.0004] # PARENTHESIZED NUMBER FIFTEEN +2496 ; [.1F99.0020.0004][.1F9D.0020.0004][*027E.0020.0004] # NUMBER FIFTEEN FULL STOP +246E ; [.1F99.0020.0006][.1F9D.0020.0006] # CIRCLED NUMBER FIFTEEN +24EF ; [.1F99.0020.0006][.1F9D.0020.0006] # NEGATIVE CIRCLED NUMBER FIFTEEN +2155 ; [.1F99.0020.001E][*0676.0020.001E][.1F9D.0020.001E] # VULGAR FRACTION ONE FIFTH +33EE ; [.1F99.0020.0004][.1F9D.0020.0004][.FB40.0020.0004][.E5E5.0000.0000] # IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY FIFTEEN +3367 ; [.1F99.0020.0004][.1F9D.0020.0004][.FB40.0020.0004][.F0B9.0000.0000] # IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR FIFTEEN +2483 ; [*0328.0020.0004][.1F99.0020.0004][.1F9E.0020.0004][*0329.0020.0004] # PARENTHESIZED NUMBER SIXTEEN +2497 ; [.1F99.0020.0004][.1F9E.0020.0004][*027E.0020.0004] # NUMBER SIXTEEN FULL STOP +246F ; [.1F99.0020.0006][.1F9E.0020.0006] # CIRCLED NUMBER SIXTEEN +24F0 ; [.1F99.0020.0006][.1F9E.0020.0006] # NEGATIVE CIRCLED NUMBER SIXTEEN +2159 ; [.1F99.0020.001E][*0676.0020.001E][.1F9E.0020.001E] # VULGAR FRACTION ONE SIXTH +33EF ; [.1F99.0020.0004][.1F9E.0020.0004][.FB40.0020.0004][.E5E5.0000.0000] # IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY SIXTEEN +3368 ; [.1F99.0020.0004][.1F9E.0020.0004][.FB40.0020.0004][.F0B9.0000.0000] # IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR SIXTEEN +2484 ; [*0328.0020.0004][.1F99.0020.0004][.1F9F.0020.0004][*0329.0020.0004] # PARENTHESIZED NUMBER SEVENTEEN +2498 ; [.1F99.0020.0004][.1F9F.0020.0004][*027E.0020.0004] # NUMBER SEVENTEEN FULL STOP +2470 ; [.1F99.0020.0006][.1F9F.0020.0006] # CIRCLED NUMBER SEVENTEEN +24F1 ; [.1F99.0020.0006][.1F9F.0020.0006] # NEGATIVE CIRCLED NUMBER SEVENTEEN +2150 ; [.1F99.0020.001E][*0676.0020.001E][.1F9F.0020.001E] # VULGAR FRACTION ONE SEVENTH +33F0 ; [.1F99.0020.0004][.1F9F.0020.0004][.FB40.0020.0004][.E5E5.0000.0000] # IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY SEVENTEEN +3369 ; [.1F99.0020.0004][.1F9F.0020.0004][.FB40.0020.0004][.F0B9.0000.0000] # IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR SEVENTEEN +2485 ; [*0328.0020.0004][.1F99.0020.0004][.1FA0.0020.0004][*0329.0020.0004] # PARENTHESIZED NUMBER EIGHTEEN +2499 ; [.1F99.0020.0004][.1FA0.0020.0004][*027E.0020.0004] # NUMBER EIGHTEEN FULL STOP +2471 ; [.1F99.0020.0006][.1FA0.0020.0006] # CIRCLED NUMBER EIGHTEEN +24F2 ; [.1F99.0020.0006][.1FA0.0020.0006] # NEGATIVE CIRCLED NUMBER EIGHTEEN +215B ; [.1F99.0020.001E][*0676.0020.001E][.1FA0.0020.001E] # VULGAR FRACTION ONE EIGHTH +33F1 ; [.1F99.0020.0004][.1FA0.0020.0004][.FB40.0020.0004][.E5E5.0000.0000] # IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY EIGHTEEN +336A ; [.1F99.0020.0004][.1FA0.0020.0004][.FB40.0020.0004][.F0B9.0000.0000] # IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR EIGHTEEN +2486 ; [*0328.0020.0004][.1F99.0020.0004][.1FA1.0020.0004][*0329.0020.0004] # PARENTHESIZED NUMBER NINETEEN +249A ; [.1F99.0020.0004][.1FA1.0020.0004][*027E.0020.0004] # NUMBER NINETEEN FULL STOP +2472 ; [.1F99.0020.0006][.1FA1.0020.0006] # CIRCLED NUMBER NINETEEN +24F3 ; [.1F99.0020.0006][.1FA1.0020.0006] # NEGATIVE CIRCLED NUMBER NINETEEN +2151 ; [.1F99.0020.001E][*0676.0020.001E][.1FA1.0020.001E] # VULGAR FRACTION ONE NINTH +33F2 ; [.1F99.0020.0004][.1FA1.0020.0004][.FB40.0020.0004][.E5E5.0000.0000] # IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY NINETEEN +336B ; [.1F99.0020.0004][.1FA1.0020.0004][.FB40.0020.0004][.F0B9.0000.0000] # IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR NINETEEN +33E0 ; [.1F99.0020.0004][.FB40.0020.0004][.E5E5.0000.0000] # IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY ONE +32C0 ; [.1F99.0020.0004][.FB40.0020.0004][.E708.0000.0000] # IDEOGRAPHIC TELEGRAPH SYMBOL FOR JANUARY +3359 ; [.1F99.0020.0004][.FB40.0020.0004][.F0B9.0000.0000] # IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR ONE +0032 ; [.1F9A.0020.0002] # DIGIT TWO +0662 ; [.1F9A.0020.0002] # ARABIC-INDIC DIGIT TWO +06F2 ; [.1F9A.0020.0002] # EXTENDED ARABIC-INDIC DIGIT TWO +07C2 ; [.1F9A.0020.0002] # NKO DIGIT TWO +0968 ; [.1F9A.0020.0002] # DEVANAGARI DIGIT TWO +09E8 ; [.1F9A.0020.0002] # BENGALI DIGIT TWO +0A68 ; [.1F9A.0020.0002] # GURMUKHI DIGIT TWO +0AE8 ; [.1F9A.0020.0002] # GUJARATI DIGIT TWO +0B68 ; [.1F9A.0020.0002] # ORIYA DIGIT TWO +0BE8 ; [.1F9A.0020.0002] # TAMIL DIGIT TWO +0C68 ; [.1F9A.0020.0002] # TELUGU DIGIT TWO +0C7A ; [.1F9A.0020.0002] # TELUGU FRACTION DIGIT TWO FOR ODD POWERS OF FOUR +0C7D ; [.1F9A.0020.0002] # TELUGU FRACTION DIGIT TWO FOR EVEN POWERS OF FOUR +0CE8 ; [.1F9A.0020.0002] # KANNADA DIGIT TWO +0D68 ; [.1F9A.0020.0002] # MALAYALAM DIGIT TWO +0DE8 ; [.1F9A.0020.0002] # SINHALA LITH DIGIT TWO +0E52 ; [.1F9A.0020.0002] # THAI DIGIT TWO +0ED2 ; [.1F9A.0020.0002] # LAO DIGIT TWO +0F22 ; [.1F9A.0020.0002] # TIBETAN DIGIT TWO +1042 ; [.1F9A.0020.0002] # MYANMAR DIGIT TWO +1092 ; [.1F9A.0020.0002] # MYANMAR SHAN DIGIT TWO +136A ; [.1F9A.0020.0002] # ETHIOPIC DIGIT TWO +17E2 ; [.1F9A.0020.0002] # KHMER DIGIT TWO +17F2 ; [.1F9A.0020.0002] # KHMER SYMBOL LEK ATTAK PII +1812 ; [.1F9A.0020.0002] # MONGOLIAN DIGIT TWO +1948 ; [.1F9A.0020.0002] # LIMBU DIGIT TWO +19D2 ; [.1F9A.0020.0002] # NEW TAI LUE DIGIT TWO +1A82 ; [.1F9A.0020.0002] # TAI THAM HORA DIGIT TWO +1A92 ; [.1F9A.0020.0002] # TAI THAM THAM DIGIT TWO +1B52 ; [.1F9A.0020.0002] # BALINESE DIGIT TWO +1BB2 ; [.1F9A.0020.0002] # SUNDANESE DIGIT TWO +1C42 ; [.1F9A.0020.0002] # LEPCHA DIGIT TWO +1C52 ; [.1F9A.0020.0002] # OL CHIKI DIGIT TWO +3022 ; [.1F9A.0020.0002] # HANGZHOU NUMERAL TWO +A622 ; [.1F9A.0020.0002] # VAI DIGIT TWO +A8D2 ; [.1F9A.0020.0002] # SAURASHTRA DIGIT TWO +A902 ; [.1F9A.0020.0002] # KAYAH LI DIGIT TWO +A9D2 ; [.1F9A.0020.0002] # JAVANESE DIGIT TWO +A9F2 ; [.1F9A.0020.0002] # MYANMAR TAI LAING DIGIT TWO +AA52 ; [.1F9A.0020.0002] # CHAM DIGIT TWO +ABF2 ; [.1F9A.0020.0002] # MEETEI MAYEK DIGIT TWO +10108 ; [.1F9A.0020.0002] # AEGEAN NUMBER TWO +1015B ; [.1F9A.0020.0002] # GREEK ACROPHONIC EPIDAUREAN TWO +1015C ; [.1F9A.0020.0002] # GREEK ACROPHONIC THESPIAN TWO +1015D ; [.1F9A.0020.0002] # GREEK ACROPHONIC CYRENAIC TWO DRACHMAS +1015E ; [.1F9A.0020.0002] # GREEK ACROPHONIC EPIDAUREAN TWO DRACHMAS +102E2 ; [.1F9A.0020.0002] # COPTIC EPACT DIGIT TWO +103D2 ; [.1F9A.0020.0002] # OLD PERSIAN NUMBER TWO +104A2 ; [.1F9A.0020.0002] # OSMANYA DIGIT TWO +10859 ; [.1F9A.0020.0002] # IMPERIAL ARAMAIC NUMBER TWO +1087A ; [.1F9A.0020.0002] # PALMYRENE NUMBER TWO +108A8 ; [.1F9A.0020.0002] # NABATAEAN NUMBER TWO +1091A ; [.1F9A.0020.0002] # PHOENICIAN NUMBER TWO +109C1 ; [.1F9A.0020.0002] # MEROITIC CURSIVE NUMBER TWO +10A41 ; [.1F9A.0020.0002] # KHAROSHTHI DIGIT TWO +10B59 ; [.1F9A.0020.0002] # INSCRIPTIONAL PARTHIAN NUMBER TWO +10B79 ; [.1F9A.0020.0002] # INSCRIPTIONAL PAHLAVI NUMBER TWO +10BAA ; [.1F9A.0020.0002] # PSALTER PAHLAVI NUMBER TWO +10D32 ; [.1F9A.0020.0002] # HANIFI ROHINGYA DIGIT TWO +10E61 ; [.1F9A.0020.0002] # RUMI DIGIT TWO +10F1E ; [.1F9A.0020.0002] # OLD SOGDIAN NUMBER TWO +10FC6 ; [.1F9A.0020.0002] # CHORASMIAN NUMBER TWO +11053 ; [.1F9A.0020.0002] # BRAHMI NUMBER TWO +11068 ; [.1F9A.0020.0002] # BRAHMI DIGIT TWO +110F2 ; [.1F9A.0020.0002] # SORA SOMPENG DIGIT TWO +11138 ; [.1F9A.0020.0002] # CHAKMA DIGIT TWO +111D2 ; [.1F9A.0020.0002] # SHARADA DIGIT TWO +111E2 ; [.1F9A.0020.0002] # SINHALA ARCHAIC DIGIT TWO +112F2 ; [.1F9A.0020.0002] # KHUDAWADI DIGIT TWO +11452 ; [.1F9A.0020.0002] # NEWA DIGIT TWO +114D2 ; [.1F9A.0020.0002] # TIRHUTA DIGIT TWO +11652 ; [.1F9A.0020.0002] # MODI DIGIT TWO +116C2 ; [.1F9A.0020.0002] # TAKRI DIGIT TWO +11732 ; [.1F9A.0020.0002] # AHOM DIGIT TWO +118E2 ; [.1F9A.0020.0002] # WARANG CITI DIGIT TWO +11952 ; [.1F9A.0020.0002] # DIVES AKURU DIGIT TWO +11C52 ; [.1F9A.0020.0002] # BHAIKSUKI DIGIT TWO +11C5B ; [.1F9A.0020.0002] # BHAIKSUKI NUMBER TWO +11D52 ; [.1F9A.0020.0002] # MASARAM GONDI DIGIT TWO +11DA2 ; [.1F9A.0020.0002] # GUNJALA GONDI DIGIT TWO +12400 ; [.1F9A.0020.0002] # CUNEIFORM NUMERIC SIGN TWO ASH +12416 ; [.1F9A.0020.0002] # CUNEIFORM NUMERIC SIGN TWO GESH2 +1241F ; [.1F9A.0020.0002] # CUNEIFORM NUMERIC SIGN TWO GESHU +12423 ; [.1F9A.0020.0002] # CUNEIFORM NUMERIC SIGN TWO SHAR2 +1242D ; [.1F9A.0020.0002] # CUNEIFORM NUMERIC SIGN TWO SHARU +12435 ; [.1F9A.0020.0002] # CUNEIFORM NUMERIC SIGN TWO BURU +1244A ; [.1F9A.0020.0002] # CUNEIFORM NUMERIC SIGN TWO ASH TENU +12450 ; [.1F9A.0020.0002] # CUNEIFORM NUMERIC SIGN TWO BAN2 +12456 ; [.1F9A.0020.0002] # CUNEIFORM NUMERIC SIGN NIGIDAMIN +12459 ; [.1F9A.0020.0002] # CUNEIFORM NUMERIC SIGN TWO ESHE3 +16A62 ; [.1F9A.0020.0002] # MRO DIGIT TWO +16B52 ; [.1F9A.0020.0002] # PAHAWH HMONG DIGIT TWO +16E82 ; [.1F9A.0020.0002] # MEDEFAIDRIN DIGIT TWO +1D2E2 ; [.1F9A.0020.0002] # MAYAN NUMERAL TWO +1D361 ; [.1F9A.0020.0002] # COUNTING ROD UNIT DIGIT TWO +1D373 ; [.1F9A.0020.0002] # IDEOGRAPHIC TALLY MARK TWO +1E142 ; [.1F9A.0020.0002] # NYIAKENG PUACHUE HMONG DIGIT TWO +1E2F2 ; [.1F9A.0020.0002] # WANCHO DIGIT TWO +1E8C8 ; [.1F9A.0020.0002] # MENDE KIKAKUI DIGIT TWO +1E952 ; [.1F9A.0020.0002] # ADLAM DIGIT TWO +1EC72 ; [.1F9A.0020.0002] # INDIC SIYAQ NUMBER TWO +1ECA4 ; [.1F9A.0020.0002] # INDIC SIYAQ NUMBER PREFIXED TWO +1ED02 ; [.1F9A.0020.0002] # OTTOMAN SIYAQ NUMBER TWO +FF12 ; [.1F9A.0020.0003] # FULLWIDTH DIGIT TWO +0F2B ; [.1F9A.0020.0004] # TIBETAN DIGIT HALF TWO +2475 ; [*0328.0020.0004][.1F9A.0020.0004][*0329.0020.0004] # PARENTHESIZED DIGIT TWO +2489 ; [.1F9A.0020.0004][*027E.0020.0004] # DIGIT TWO FULL STOP +1F103 ; [.1F9A.0020.0004][*0223.0020.0004] # DIGIT TWO COMMA +1D7D0 ; [.1F9A.0020.0005] # MATHEMATICAL BOLD DIGIT TWO +1D7DA ; [.1F9A.0020.0005] # MATHEMATICAL DOUBLE-STRUCK DIGIT TWO +1D7E4 ; [.1F9A.0020.0005] # MATHEMATICAL SANS-SERIF DIGIT TWO +1D7EE ; [.1F9A.0020.0005] # MATHEMATICAL SANS-SERIF BOLD DIGIT TWO +1D7F8 ; [.1F9A.0020.0005] # MATHEMATICAL MONOSPACE DIGIT TWO +1FBF2 ; [.1F9A.0020.0005] # SEGMENTED DIGIT TWO +2461 ; [.1F9A.0020.0006] # CIRCLED DIGIT TWO +24F6 ; [.1F9A.0020.0006] # DOUBLE CIRCLED DIGIT TWO +2777 ; [.1F9A.0020.0006] # DINGBAT NEGATIVE CIRCLED DIGIT TWO +2781 ; [.1F9A.0020.0006] # DINGBAT CIRCLED SANS-SERIF DIGIT TWO +278B ; [.1F9A.0020.0006] # DINGBAT NEGATIVE CIRCLED SANS-SERIF DIGIT TWO +00B2 ; [.1F9A.0020.0014] # SUPERSCRIPT TWO +2082 ; [.1F9A.0020.0015] # SUBSCRIPT TWO +16E95 ; [.1F9A.0020.0004][.0000.0118.0004] # MEDEFAIDRIN DIGIT TWO ALTERNATE FORM +1ECB2 ; [.1F9A.0020.0004][.0000.0118.0004] # INDIC SIYAQ NUMBER ALTERNATE TWO +1ED2F ; [.1F9A.0020.0004][.0000.0118.0004] # OTTOMAN SIYAQ ALTERNATE NUMBER TWO +2487 ; [*0328.0020.0004][.1F9A.0020.0004][.1F98.0020.0004][*0329.0020.0004] # PARENTHESIZED NUMBER TWENTY +249B ; [.1F9A.0020.0004][.1F98.0020.0004][*027E.0020.0004] # NUMBER TWENTY FULL STOP +2473 ; [.1F9A.0020.0006][.1F98.0020.0006] # CIRCLED NUMBER TWENTY +24F4 ; [.1F9A.0020.0006][.1F98.0020.0006] # NEGATIVE CIRCLED NUMBER TWENTY +3249 ; [.1F9A.0020.0006][.1F98.0020.0006] # CIRCLED NUMBER TWENTY ON BLACK SQUARE +33F3 ; [.1F9A.0020.0004][.1F98.0020.0004][.FB40.0020.0004][.E5E5.0000.0000] # IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY TWENTY +336C ; [.1F9A.0020.0004][.1F98.0020.0004][.FB40.0020.0004][.F0B9.0000.0000] # IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR TWENTY +3251 ; [.1F9A.0020.0006][.1F99.0020.0006] # CIRCLED NUMBER TWENTY ONE +33F4 ; [.1F9A.0020.0004][.1F99.0020.0004][.FB40.0020.0004][.E5E5.0000.0000] # IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY TWENTY-ONE +336D ; [.1F9A.0020.0004][.1F99.0020.0004][.FB40.0020.0004][.F0B9.0000.0000] # IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR TWENTY-ONE +3252 ; [.1F9A.0020.0006][.1F9A.0020.0006] # CIRCLED NUMBER TWENTY TWO +1F1A2 ; [.1F9A.0020.001C][.1F9A.0020.001C][*027E.0020.001C][.1F9A.0020.001C] # SQUARED TWENTY-TWO POINT TWO +33F5 ; [.1F9A.0020.0004][.1F9A.0020.0004][.FB40.0020.0004][.E5E5.0000.0000] # IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY TWENTY-TWO +336E ; [.1F9A.0020.0004][.1F9A.0020.0004][.FB40.0020.0004][.F0B9.0000.0000] # IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR TWENTY-TWO +3253 ; [.1F9A.0020.0006][.1F9B.0020.0006] # CIRCLED NUMBER TWENTY THREE +2154 ; [.1F9A.0020.001E][*0676.0020.001E][.1F9B.0020.001E] # VULGAR FRACTION TWO THIRDS +33F6 ; [.1F9A.0020.0004][.1F9B.0020.0004][.FB40.0020.0004][.E5E5.0000.0000] # IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY TWENTY-THREE +336F ; [.1F9A.0020.0004][.1F9B.0020.0004][.FB40.0020.0004][.F0B9.0000.0000] # IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR TWENTY-THREE +3254 ; [.1F9A.0020.0006][.1F9C.0020.0006] # CIRCLED NUMBER TWENTY FOUR +33F7 ; [.1F9A.0020.0004][.1F9C.0020.0004][.FB40.0020.0004][.E5E5.0000.0000] # IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY TWENTY-FOUR +3370 ; [.1F9A.0020.0004][.1F9C.0020.0004][.FB40.0020.0004][.F0B9.0000.0000] # IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR TWENTY-FOUR +3255 ; [.1F9A.0020.0006][.1F9D.0020.0006] # CIRCLED NUMBER TWENTY FIVE +2156 ; [.1F9A.0020.001E][*0676.0020.001E][.1F9D.0020.001E] # VULGAR FRACTION TWO FIFTHS +33F8 ; [.1F9A.0020.0004][.1F9D.0020.0004][.FB40.0020.0004][.E5E5.0000.0000] # IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY TWENTY-FIVE +3256 ; [.1F9A.0020.0006][.1F9E.0020.0006] # CIRCLED NUMBER TWENTY SIX +33F9 ; [.1F9A.0020.0004][.1F9E.0020.0004][.FB40.0020.0004][.E5E5.0000.0000] # IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY TWENTY-SIX +3257 ; [.1F9A.0020.0006][.1F9F.0020.0006] # CIRCLED NUMBER TWENTY SEVEN +33FA ; [.1F9A.0020.0004][.1F9F.0020.0004][.FB40.0020.0004][.E5E5.0000.0000] # IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY TWENTY-SEVEN +3258 ; [.1F9A.0020.0006][.1FA0.0020.0006] # CIRCLED NUMBER TWENTY EIGHT +33FB ; [.1F9A.0020.0004][.1FA0.0020.0004][.FB40.0020.0004][.E5E5.0000.0000] # IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY TWENTY-EIGHT +3259 ; [.1F9A.0020.0006][.1FA1.0020.0006] # CIRCLED NUMBER TWENTY NINE +33FC ; [.1F9A.0020.0004][.1FA1.0020.0004][.FB40.0020.0004][.E5E5.0000.0000] # IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY TWENTY-NINE +1F19D ; [.1F9A.0020.001C][.20C4.0020.001D] # SQUARED TWO K +1F19C ; [.1F9A.0020.001C][.2118.0020.001C][.1FEB.0020.001C][*0209.0020.001C][.21D2.0020.001D][.1FD6.0020.001C][.2193.0020.001C] # SQUARED SECOND SCREEN +33E1 ; [.1F9A.0020.0004][.FB40.0020.0004][.E5E5.0000.0000] # IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY TWO +32C1 ; [.1F9A.0020.0004][.FB40.0020.0004][.E708.0000.0000] # IDEOGRAPHIC TELEGRAPH SYMBOL FOR FEBRUARY +335A ; [.1F9A.0020.0004][.FB40.0020.0004][.F0B9.0000.0000] # IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR TWO +0033 ; [.1F9B.0020.0002] # DIGIT THREE +0663 ; [.1F9B.0020.0002] # ARABIC-INDIC DIGIT THREE +06F3 ; [.1F9B.0020.0002] # EXTENDED ARABIC-INDIC DIGIT THREE +07C3 ; [.1F9B.0020.0002] # NKO DIGIT THREE +0969 ; [.1F9B.0020.0002] # DEVANAGARI DIGIT THREE +09E9 ; [.1F9B.0020.0002] # BENGALI DIGIT THREE +0A69 ; [.1F9B.0020.0002] # GURMUKHI DIGIT THREE +0AE9 ; [.1F9B.0020.0002] # GUJARATI DIGIT THREE +0B69 ; [.1F9B.0020.0002] # ORIYA DIGIT THREE +0BE9 ; [.1F9B.0020.0002] # TAMIL DIGIT THREE +0C69 ; [.1F9B.0020.0002] # TELUGU DIGIT THREE +0C7B ; [.1F9B.0020.0002] # TELUGU FRACTION DIGIT THREE FOR ODD POWERS OF FOUR +0C7E ; [.1F9B.0020.0002] # TELUGU FRACTION DIGIT THREE FOR EVEN POWERS OF FOUR +0CE9 ; [.1F9B.0020.0002] # KANNADA DIGIT THREE +0D69 ; [.1F9B.0020.0002] # MALAYALAM DIGIT THREE +0DE9 ; [.1F9B.0020.0002] # SINHALA LITH DIGIT THREE +0E53 ; [.1F9B.0020.0002] # THAI DIGIT THREE +0ED3 ; [.1F9B.0020.0002] # LAO DIGIT THREE +0F23 ; [.1F9B.0020.0002] # TIBETAN DIGIT THREE +1043 ; [.1F9B.0020.0002] # MYANMAR DIGIT THREE +1093 ; [.1F9B.0020.0002] # MYANMAR SHAN DIGIT THREE +136B ; [.1F9B.0020.0002] # ETHIOPIC DIGIT THREE +17E3 ; [.1F9B.0020.0002] # KHMER DIGIT THREE +17F3 ; [.1F9B.0020.0002] # KHMER SYMBOL LEK ATTAK BEI +1813 ; [.1F9B.0020.0002] # MONGOLIAN DIGIT THREE +1949 ; [.1F9B.0020.0002] # LIMBU DIGIT THREE +19D3 ; [.1F9B.0020.0002] # NEW TAI LUE DIGIT THREE +1A83 ; [.1F9B.0020.0002] # TAI THAM HORA DIGIT THREE +1A93 ; [.1F9B.0020.0002] # TAI THAM THAM DIGIT THREE +1B53 ; [.1F9B.0020.0002] # BALINESE DIGIT THREE +1BB3 ; [.1F9B.0020.0002] # SUNDANESE DIGIT THREE +1C43 ; [.1F9B.0020.0002] # LEPCHA DIGIT THREE +1C53 ; [.1F9B.0020.0002] # OL CHIKI DIGIT THREE +3023 ; [.1F9B.0020.0002] # HANGZHOU NUMERAL THREE +A623 ; [.1F9B.0020.0002] # VAI DIGIT THREE +A8D3 ; [.1F9B.0020.0002] # SAURASHTRA DIGIT THREE +A903 ; [.1F9B.0020.0002] # KAYAH LI DIGIT THREE +A9D3 ; [.1F9B.0020.0002] # JAVANESE DIGIT THREE +A9F3 ; [.1F9B.0020.0002] # MYANMAR TAI LAING DIGIT THREE +AA53 ; [.1F9B.0020.0002] # CHAM DIGIT THREE +ABF3 ; [.1F9B.0020.0002] # MEETEI MAYEK DIGIT THREE +10109 ; [.1F9B.0020.0002] # AEGEAN NUMBER THREE +102E3 ; [.1F9B.0020.0002] # COPTIC EPACT DIGIT THREE +104A3 ; [.1F9B.0020.0002] # OSMANYA DIGIT THREE +1085A ; [.1F9B.0020.0002] # IMPERIAL ARAMAIC NUMBER THREE +1087B ; [.1F9B.0020.0002] # PALMYRENE NUMBER THREE +108A9 ; [.1F9B.0020.0002] # NABATAEAN NUMBER THREE +1091B ; [.1F9B.0020.0002] # PHOENICIAN NUMBER THREE +109C2 ; [.1F9B.0020.0002] # MEROITIC CURSIVE NUMBER THREE +10A42 ; [.1F9B.0020.0002] # KHAROSHTHI DIGIT THREE +10B5A ; [.1F9B.0020.0002] # INSCRIPTIONAL PARTHIAN NUMBER THREE +10B7A ; [.1F9B.0020.0002] # INSCRIPTIONAL PAHLAVI NUMBER THREE +10BAB ; [.1F9B.0020.0002] # PSALTER PAHLAVI NUMBER THREE +10D33 ; [.1F9B.0020.0002] # HANIFI ROHINGYA DIGIT THREE +10E62 ; [.1F9B.0020.0002] # RUMI DIGIT THREE +10F1F ; [.1F9B.0020.0002] # OLD SOGDIAN NUMBER THREE +10FC7 ; [.1F9B.0020.0002] # CHORASMIAN NUMBER THREE +11054 ; [.1F9B.0020.0002] # BRAHMI NUMBER THREE +11069 ; [.1F9B.0020.0002] # BRAHMI DIGIT THREE +110F3 ; [.1F9B.0020.0002] # SORA SOMPENG DIGIT THREE +11139 ; [.1F9B.0020.0002] # CHAKMA DIGIT THREE +111D3 ; [.1F9B.0020.0002] # SHARADA DIGIT THREE +111E3 ; [.1F9B.0020.0002] # SINHALA ARCHAIC DIGIT THREE +112F3 ; [.1F9B.0020.0002] # KHUDAWADI DIGIT THREE +11453 ; [.1F9B.0020.0002] # NEWA DIGIT THREE +114D3 ; [.1F9B.0020.0002] # TIRHUTA DIGIT THREE +11653 ; [.1F9B.0020.0002] # MODI DIGIT THREE +116C3 ; [.1F9B.0020.0002] # TAKRI DIGIT THREE +11733 ; [.1F9B.0020.0002] # AHOM DIGIT THREE +118E3 ; [.1F9B.0020.0002] # WARANG CITI DIGIT THREE +11953 ; [.1F9B.0020.0002] # DIVES AKURU DIGIT THREE +11C53 ; [.1F9B.0020.0002] # BHAIKSUKI DIGIT THREE +11C5C ; [.1F9B.0020.0002] # BHAIKSUKI NUMBER THREE +11D53 ; [.1F9B.0020.0002] # MASARAM GONDI DIGIT THREE +11DA3 ; [.1F9B.0020.0002] # GUNJALA GONDI DIGIT THREE +12401 ; [.1F9B.0020.0002] # CUNEIFORM NUMERIC SIGN THREE ASH +12408 ; [.1F9B.0020.0002] # CUNEIFORM NUMERIC SIGN THREE DISH +12417 ; [.1F9B.0020.0002] # CUNEIFORM NUMERIC SIGN THREE GESH2 +12420 ; [.1F9B.0020.0002] # CUNEIFORM NUMERIC SIGN THREE GESHU +12424 ; [.1F9B.0020.0002] # CUNEIFORM NUMERIC SIGN THREE SHAR2 +12425 ; [.1F9B.0020.0002] # CUNEIFORM NUMERIC SIGN THREE SHAR2 VARIANT FORM +1242E ; [.1F9B.0020.0002] # CUNEIFORM NUMERIC SIGN THREE SHARU +1242F ; [.1F9B.0020.0002] # CUNEIFORM NUMERIC SIGN THREE SHARU VARIANT FORM +12436 ; [.1F9B.0020.0002] # CUNEIFORM NUMERIC SIGN THREE BURU +12437 ; [.1F9B.0020.0002] # CUNEIFORM NUMERIC SIGN THREE BURU VARIANT FORM +1243A ; [.1F9B.0020.0002] # CUNEIFORM NUMERIC SIGN THREE VARIANT FORM ESH16 +1243B ; [.1F9B.0020.0002] # CUNEIFORM NUMERIC SIGN THREE VARIANT FORM ESH21 +1244B ; [.1F9B.0020.0002] # CUNEIFORM NUMERIC SIGN THREE ASH TENU +12451 ; [.1F9B.0020.0002] # CUNEIFORM NUMERIC SIGN THREE BAN2 +12457 ; [.1F9B.0020.0002] # CUNEIFORM NUMERIC SIGN NIGIDAESH +16A63 ; [.1F9B.0020.0002] # MRO DIGIT THREE +16B53 ; [.1F9B.0020.0002] # PAHAWH HMONG DIGIT THREE +16E83 ; [.1F9B.0020.0002] # MEDEFAIDRIN DIGIT THREE +1D2E3 ; [.1F9B.0020.0002] # MAYAN NUMERAL THREE +1D362 ; [.1F9B.0020.0002] # COUNTING ROD UNIT DIGIT THREE +1D374 ; [.1F9B.0020.0002] # IDEOGRAPHIC TALLY MARK THREE +1E143 ; [.1F9B.0020.0002] # NYIAKENG PUACHUE HMONG DIGIT THREE +1E2F3 ; [.1F9B.0020.0002] # WANCHO DIGIT THREE +1E8C9 ; [.1F9B.0020.0002] # MENDE KIKAKUI DIGIT THREE +1E953 ; [.1F9B.0020.0002] # ADLAM DIGIT THREE +1EC73 ; [.1F9B.0020.0002] # INDIC SIYAQ NUMBER THREE +1ECA5 ; [.1F9B.0020.0002] # INDIC SIYAQ NUMBER PREFIXED THREE +1ED03 ; [.1F9B.0020.0002] # OTTOMAN SIYAQ NUMBER THREE +FF13 ; [.1F9B.0020.0003] # FULLWIDTH DIGIT THREE +0F2C ; [.1F9B.0020.0004] # TIBETAN DIGIT HALF THREE +2476 ; [*0328.0020.0004][.1F9B.0020.0004][*0329.0020.0004] # PARENTHESIZED DIGIT THREE +248A ; [.1F9B.0020.0004][*027E.0020.0004] # DIGIT THREE FULL STOP +1F104 ; [.1F9B.0020.0004][*0223.0020.0004] # DIGIT THREE COMMA +1D7D1 ; [.1F9B.0020.0005] # MATHEMATICAL BOLD DIGIT THREE +1D7DB ; [.1F9B.0020.0005] # MATHEMATICAL DOUBLE-STRUCK DIGIT THREE +1D7E5 ; [.1F9B.0020.0005] # MATHEMATICAL SANS-SERIF DIGIT THREE +1D7EF ; [.1F9B.0020.0005] # MATHEMATICAL SANS-SERIF BOLD DIGIT THREE +1D7F9 ; [.1F9B.0020.0005] # MATHEMATICAL MONOSPACE DIGIT THREE +1FBF3 ; [.1F9B.0020.0005] # SEGMENTED DIGIT THREE +2462 ; [.1F9B.0020.0006] # CIRCLED DIGIT THREE +24F7 ; [.1F9B.0020.0006] # DOUBLE CIRCLED DIGIT THREE +2778 ; [.1F9B.0020.0006] # DINGBAT NEGATIVE CIRCLED DIGIT THREE +2782 ; [.1F9B.0020.0006] # DINGBAT CIRCLED SANS-SERIF DIGIT THREE +278C ; [.1F9B.0020.0006] # DINGBAT NEGATIVE CIRCLED SANS-SERIF DIGIT THREE +00B3 ; [.1F9B.0020.0014] # SUPERSCRIPT THREE +2083 ; [.1F9B.0020.0015] # SUBSCRIPT THREE +16E96 ; [.1F9B.0020.0002][.0000.0118.0002] # MEDEFAIDRIN DIGIT THREE ALTERNATE FORM +1ED30 ; [.1F9B.0020.0004][.0000.0118.0004] # OTTOMAN SIYAQ ALTERNATE NUMBER THREE +324A ; [.1F9B.0020.0006][.1F98.0020.0006] # CIRCLED NUMBER THIRTY ON BLACK SQUARE +325A ; [.1F9B.0020.0006][.1F98.0020.0006] # CIRCLED NUMBER THIRTY +33FD ; [.1F9B.0020.0004][.1F98.0020.0004][.FB40.0020.0004][.E5E5.0000.0000] # IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY THIRTY +325B ; [.1F9B.0020.0006][.1F99.0020.0006] # CIRCLED NUMBER THIRTY ONE +33FE ; [.1F9B.0020.0004][.1F99.0020.0004][.FB40.0020.0004][.E5E5.0000.0000] # IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY THIRTY-ONE +325C ; [.1F9B.0020.0006][.1F9A.0020.0006] # CIRCLED NUMBER THIRTY TWO +325D ; [.1F9B.0020.0006][.1F9B.0020.0006] # CIRCLED NUMBER THIRTY THREE +325E ; [.1F9B.0020.0006][.1F9C.0020.0006] # CIRCLED NUMBER THIRTY FOUR +00BE ; [.1F9B.0020.001E][*0676.0020.001E][.1F9C.0020.001E] # VULGAR FRACTION THREE QUARTERS +325F ; [.1F9B.0020.0006][.1F9D.0020.0006] # CIRCLED NUMBER THIRTY FIVE +2157 ; [.1F9B.0020.001E][*0676.0020.001E][.1F9D.0020.001E] # VULGAR FRACTION THREE FIFTHS +32B1 ; [.1F9B.0020.0006][.1F9E.0020.0006] # CIRCLED NUMBER THIRTY SIX +32B2 ; [.1F9B.0020.0006][.1F9F.0020.0006] # CIRCLED NUMBER THIRTY SEVEN +32B3 ; [.1F9B.0020.0006][.1FA0.0020.0006] # CIRCLED NUMBER THIRTY EIGHT +215C ; [.1F9B.0020.001E][*0676.0020.001E][.1FA0.0020.001E] # VULGAR FRACTION THREE EIGHTHS +32B4 ; [.1F9B.0020.0006][.1FA1.0020.0006] # CIRCLED NUMBER THIRTY NINE +1F19B ; [.1F9B.0020.001C][.1FEB.0020.001D] # SQUARED THREE D +33E2 ; [.1F9B.0020.0004][.FB40.0020.0004][.E5E5.0000.0000] # IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY THREE +32C2 ; [.1F9B.0020.0004][.FB40.0020.0004][.E708.0000.0000] # IDEOGRAPHIC TELEGRAPH SYMBOL FOR MARCH +335B ; [.1F9B.0020.0004][.FB40.0020.0004][.F0B9.0000.0000] # IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR THREE +0034 ; [.1F9C.0020.0002] # DIGIT FOUR +0664 ; [.1F9C.0020.0002] # ARABIC-INDIC DIGIT FOUR +06F4 ; [.1F9C.0020.0002] # EXTENDED ARABIC-INDIC DIGIT FOUR +07C4 ; [.1F9C.0020.0002] # NKO DIGIT FOUR +096A ; [.1F9C.0020.0002] # DEVANAGARI DIGIT FOUR +09EA ; [.1F9C.0020.0002] # BENGALI DIGIT FOUR +0A6A ; [.1F9C.0020.0002] # GURMUKHI DIGIT FOUR +0AEA ; [.1F9C.0020.0002] # GUJARATI DIGIT FOUR +0B6A ; [.1F9C.0020.0002] # ORIYA DIGIT FOUR +0BEA ; [.1F9C.0020.0002] # TAMIL DIGIT FOUR +0C6A ; [.1F9C.0020.0002] # TELUGU DIGIT FOUR +0CEA ; [.1F9C.0020.0002] # KANNADA DIGIT FOUR +0D6A ; [.1F9C.0020.0002] # MALAYALAM DIGIT FOUR +0DEA ; [.1F9C.0020.0002] # SINHALA LITH DIGIT FOUR +0E54 ; [.1F9C.0020.0002] # THAI DIGIT FOUR +0ED4 ; [.1F9C.0020.0002] # LAO DIGIT FOUR +0F24 ; [.1F9C.0020.0002] # TIBETAN DIGIT FOUR +1044 ; [.1F9C.0020.0002] # MYANMAR DIGIT FOUR +1094 ; [.1F9C.0020.0002] # MYANMAR SHAN DIGIT FOUR +136C ; [.1F9C.0020.0002] # ETHIOPIC DIGIT FOUR +17E4 ; [.1F9C.0020.0002] # KHMER DIGIT FOUR +17F4 ; [.1F9C.0020.0002] # KHMER SYMBOL LEK ATTAK BUON +1814 ; [.1F9C.0020.0002] # MONGOLIAN DIGIT FOUR +194A ; [.1F9C.0020.0002] # LIMBU DIGIT FOUR +19D4 ; [.1F9C.0020.0002] # NEW TAI LUE DIGIT FOUR +1A84 ; [.1F9C.0020.0002] # TAI THAM HORA DIGIT FOUR +1A94 ; [.1F9C.0020.0002] # TAI THAM THAM DIGIT FOUR +1B54 ; [.1F9C.0020.0002] # BALINESE DIGIT FOUR +1BB4 ; [.1F9C.0020.0002] # SUNDANESE DIGIT FOUR +1C44 ; [.1F9C.0020.0002] # LEPCHA DIGIT FOUR +1C54 ; [.1F9C.0020.0002] # OL CHIKI DIGIT FOUR +3024 ; [.1F9C.0020.0002] # HANGZHOU NUMERAL FOUR +A624 ; [.1F9C.0020.0002] # VAI DIGIT FOUR +A8D4 ; [.1F9C.0020.0002] # SAURASHTRA DIGIT FOUR +A904 ; [.1F9C.0020.0002] # KAYAH LI DIGIT FOUR +A9D4 ; [.1F9C.0020.0002] # JAVANESE DIGIT FOUR +A9F4 ; [.1F9C.0020.0002] # MYANMAR TAI LAING DIGIT FOUR +AA54 ; [.1F9C.0020.0002] # CHAM DIGIT FOUR +ABF4 ; [.1F9C.0020.0002] # MEETEI MAYEK DIGIT FOUR +1010A ; [.1F9C.0020.0002] # AEGEAN NUMBER FOUR +102E4 ; [.1F9C.0020.0002] # COPTIC EPACT DIGIT FOUR +104A4 ; [.1F9C.0020.0002] # OSMANYA DIGIT FOUR +1087C ; [.1F9C.0020.0002] # PALMYRENE NUMBER FOUR +108AA ; [.1F9C.0020.0002] # NABATAEAN NUMBER FOUR +108AB ; [.1F9C.0020.0002] # NABATAEAN CRUCIFORM NUMBER FOUR +109C3 ; [.1F9C.0020.0002] # MEROITIC CURSIVE NUMBER FOUR +10A43 ; [.1F9C.0020.0002] # KHAROSHTHI DIGIT FOUR +10B5B ; [.1F9C.0020.0002] # INSCRIPTIONAL PARTHIAN NUMBER FOUR +10B7B ; [.1F9C.0020.0002] # INSCRIPTIONAL PAHLAVI NUMBER FOUR +10BAC ; [.1F9C.0020.0002] # PSALTER PAHLAVI NUMBER FOUR +10D34 ; [.1F9C.0020.0002] # HANIFI ROHINGYA DIGIT FOUR +10E63 ; [.1F9C.0020.0002] # RUMI DIGIT FOUR +10F20 ; [.1F9C.0020.0002] # OLD SOGDIAN NUMBER FOUR +10FC8 ; [.1F9C.0020.0002] # CHORASMIAN NUMBER FOUR +11055 ; [.1F9C.0020.0002] # BRAHMI NUMBER FOUR +1106A ; [.1F9C.0020.0002] # BRAHMI DIGIT FOUR +110F4 ; [.1F9C.0020.0002] # SORA SOMPENG DIGIT FOUR +1113A ; [.1F9C.0020.0002] # CHAKMA DIGIT FOUR +111D4 ; [.1F9C.0020.0002] # SHARADA DIGIT FOUR +111E4 ; [.1F9C.0020.0002] # SINHALA ARCHAIC DIGIT FOUR +112F4 ; [.1F9C.0020.0002] # KHUDAWADI DIGIT FOUR +11454 ; [.1F9C.0020.0002] # NEWA DIGIT FOUR +114D4 ; [.1F9C.0020.0002] # TIRHUTA DIGIT FOUR +11654 ; [.1F9C.0020.0002] # MODI DIGIT FOUR +116C4 ; [.1F9C.0020.0002] # TAKRI DIGIT FOUR +11734 ; [.1F9C.0020.0002] # AHOM DIGIT FOUR +118E4 ; [.1F9C.0020.0002] # WARANG CITI DIGIT FOUR +11954 ; [.1F9C.0020.0002] # DIVES AKURU DIGIT FOUR +11C54 ; [.1F9C.0020.0002] # BHAIKSUKI DIGIT FOUR +11C5D ; [.1F9C.0020.0002] # BHAIKSUKI NUMBER FOUR +11D54 ; [.1F9C.0020.0002] # MASARAM GONDI DIGIT FOUR +11DA4 ; [.1F9C.0020.0002] # GUNJALA GONDI DIGIT FOUR +12402 ; [.1F9C.0020.0002] # CUNEIFORM NUMERIC SIGN FOUR ASH +12409 ; [.1F9C.0020.0002] # CUNEIFORM NUMERIC SIGN FOUR DISH +1240F ; [.1F9C.0020.0002] # CUNEIFORM NUMERIC SIGN FOUR U +12418 ; [.1F9C.0020.0002] # CUNEIFORM NUMERIC SIGN FOUR GESH2 +12421 ; [.1F9C.0020.0002] # CUNEIFORM NUMERIC SIGN FOUR GESHU +12426 ; [.1F9C.0020.0002] # CUNEIFORM NUMERIC SIGN FOUR SHAR2 +12430 ; [.1F9C.0020.0002] # CUNEIFORM NUMERIC SIGN FOUR SHARU +12438 ; [.1F9C.0020.0002] # CUNEIFORM NUMERIC SIGN FOUR BURU +1243C ; [.1F9C.0020.0002] # CUNEIFORM NUMERIC SIGN FOUR VARIANT FORM LIMMU +1243D ; [.1F9C.0020.0002] # CUNEIFORM NUMERIC SIGN FOUR VARIANT FORM LIMMU4 +1243E ; [.1F9C.0020.0002] # CUNEIFORM NUMERIC SIGN FOUR VARIANT FORM LIMMU A +1243F ; [.1F9C.0020.0002] # CUNEIFORM NUMERIC SIGN FOUR VARIANT FORM LIMMU B +1244C ; [.1F9C.0020.0002] # CUNEIFORM NUMERIC SIGN FOUR ASH TENU +12452 ; [.1F9C.0020.0002] # CUNEIFORM NUMERIC SIGN FOUR BAN2 +12453 ; [.1F9C.0020.0002] # CUNEIFORM NUMERIC SIGN FOUR BAN2 VARIANT FORM +12469 ; [.1F9C.0020.0002] # CUNEIFORM NUMERIC SIGN FOUR U VARIANT FORM +16A64 ; [.1F9C.0020.0002] # MRO DIGIT FOUR +16B54 ; [.1F9C.0020.0002] # PAHAWH HMONG DIGIT FOUR +16E84 ; [.1F9C.0020.0002] # MEDEFAIDRIN DIGIT FOUR +1D2E4 ; [.1F9C.0020.0002] # MAYAN NUMERAL FOUR +1D363 ; [.1F9C.0020.0002] # COUNTING ROD UNIT DIGIT FOUR +1D375 ; [.1F9C.0020.0002] # IDEOGRAPHIC TALLY MARK FOUR +1E144 ; [.1F9C.0020.0002] # NYIAKENG PUACHUE HMONG DIGIT FOUR +1E2F4 ; [.1F9C.0020.0002] # WANCHO DIGIT FOUR +1E8CA ; [.1F9C.0020.0002] # MENDE KIKAKUI DIGIT FOUR +1E954 ; [.1F9C.0020.0002] # ADLAM DIGIT FOUR +1EC74 ; [.1F9C.0020.0002] # INDIC SIYAQ NUMBER FOUR +1ECA6 ; [.1F9C.0020.0002] # INDIC SIYAQ NUMBER PREFIXED FOUR +1ED04 ; [.1F9C.0020.0002] # OTTOMAN SIYAQ NUMBER FOUR +FF14 ; [.1F9C.0020.0003] # FULLWIDTH DIGIT FOUR +0F2D ; [.1F9C.0020.0004] # TIBETAN DIGIT HALF FOUR +2477 ; [*0328.0020.0004][.1F9C.0020.0004][*0329.0020.0004] # PARENTHESIZED DIGIT FOUR +248B ; [.1F9C.0020.0004][*027E.0020.0004] # DIGIT FOUR FULL STOP +1F105 ; [.1F9C.0020.0004][*0223.0020.0004] # DIGIT FOUR COMMA +1D7D2 ; [.1F9C.0020.0005] # MATHEMATICAL BOLD DIGIT FOUR +1D7DC ; [.1F9C.0020.0005] # MATHEMATICAL DOUBLE-STRUCK DIGIT FOUR +1D7E6 ; [.1F9C.0020.0005] # MATHEMATICAL SANS-SERIF DIGIT FOUR +1D7F0 ; [.1F9C.0020.0005] # MATHEMATICAL SANS-SERIF BOLD DIGIT FOUR +1D7FA ; [.1F9C.0020.0005] # MATHEMATICAL MONOSPACE DIGIT FOUR +1FBF4 ; [.1F9C.0020.0005] # SEGMENTED DIGIT FOUR +2463 ; [.1F9C.0020.0006] # CIRCLED DIGIT FOUR +24F8 ; [.1F9C.0020.0006] # DOUBLE CIRCLED DIGIT FOUR +2779 ; [.1F9C.0020.0006] # DINGBAT NEGATIVE CIRCLED DIGIT FOUR +2783 ; [.1F9C.0020.0006] # DINGBAT CIRCLED SANS-SERIF DIGIT FOUR +278D ; [.1F9C.0020.0006] # DINGBAT NEGATIVE CIRCLED SANS-SERIF DIGIT FOUR +2074 ; [.1F9C.0020.0014] # SUPERSCRIPT FOUR +2084 ; [.1F9C.0020.0015] # SUBSCRIPT FOUR +1ED31 ; [.1F9C.0020.0004][.0000.0118.0004] # OTTOMAN SIYAQ ALTERNATE NUMBER FOUR +324B ; [.1F9C.0020.0006][.1F98.0020.0006] # CIRCLED NUMBER FORTY ON BLACK SQUARE +32B5 ; [.1F9C.0020.0006][.1F98.0020.0006] # CIRCLED NUMBER FORTY +32B6 ; [.1F9C.0020.0006][.1F99.0020.0006] # CIRCLED NUMBER FORTY ONE +32B7 ; [.1F9C.0020.0006][.1F9A.0020.0006] # CIRCLED NUMBER FORTY TWO +32B8 ; [.1F9C.0020.0006][.1F9B.0020.0006] # CIRCLED NUMBER FORTY THREE +32B9 ; [.1F9C.0020.0006][.1F9C.0020.0006] # CIRCLED NUMBER FORTY FOUR +32BA ; [.1F9C.0020.0006][.1F9D.0020.0006] # CIRCLED NUMBER FORTY FIVE +2158 ; [.1F9C.0020.001E][*0676.0020.001E][.1F9D.0020.001E] # VULGAR FRACTION FOUR FIFTHS +32BB ; [.1F9C.0020.0006][.1F9E.0020.0006] # CIRCLED NUMBER FORTY SIX +32BC ; [.1F9C.0020.0006][.1F9F.0020.0006] # CIRCLED NUMBER FORTY SEVEN +32BD ; [.1F9C.0020.0006][.1FA0.0020.0006] # CIRCLED NUMBER FORTY EIGHT +32BE ; [.1F9C.0020.0006][.1FA1.0020.0006] # CIRCLED NUMBER FORTY NINE +1F19E ; [.1F9C.0020.001C][.20C4.0020.001D] # SQUARED FOUR K +33E3 ; [.1F9C.0020.0004][.FB40.0020.0004][.E5E5.0000.0000] # IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY FOUR +32C3 ; [.1F9C.0020.0004][.FB40.0020.0004][.E708.0000.0000] # IDEOGRAPHIC TELEGRAPH SYMBOL FOR APRIL +335C ; [.1F9C.0020.0004][.FB40.0020.0004][.F0B9.0000.0000] # IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR FOUR +0035 ; [.1F9D.0020.0002] # DIGIT FIVE +0665 ; [.1F9D.0020.0002] # ARABIC-INDIC DIGIT FIVE +06F5 ; [.1F9D.0020.0002] # EXTENDED ARABIC-INDIC DIGIT FIVE +07C5 ; [.1F9D.0020.0002] # NKO DIGIT FIVE +096B ; [.1F9D.0020.0002] # DEVANAGARI DIGIT FIVE +09EB ; [.1F9D.0020.0002] # BENGALI DIGIT FIVE +0A6B ; [.1F9D.0020.0002] # GURMUKHI DIGIT FIVE +0AEB ; [.1F9D.0020.0002] # GUJARATI DIGIT FIVE +0B6B ; [.1F9D.0020.0002] # ORIYA DIGIT FIVE +0BEB ; [.1F9D.0020.0002] # TAMIL DIGIT FIVE +0C6B ; [.1F9D.0020.0002] # TELUGU DIGIT FIVE +0CEB ; [.1F9D.0020.0002] # KANNADA DIGIT FIVE +0D6B ; [.1F9D.0020.0002] # MALAYALAM DIGIT FIVE +0DEB ; [.1F9D.0020.0002] # SINHALA LITH DIGIT FIVE +0E55 ; [.1F9D.0020.0002] # THAI DIGIT FIVE +0ED5 ; [.1F9D.0020.0002] # LAO DIGIT FIVE +0F25 ; [.1F9D.0020.0002] # TIBETAN DIGIT FIVE +1045 ; [.1F9D.0020.0002] # MYANMAR DIGIT FIVE +1095 ; [.1F9D.0020.0002] # MYANMAR SHAN DIGIT FIVE +136D ; [.1F9D.0020.0002] # ETHIOPIC DIGIT FIVE +17E5 ; [.1F9D.0020.0002] # KHMER DIGIT FIVE +17F5 ; [.1F9D.0020.0002] # KHMER SYMBOL LEK ATTAK PRAM +1815 ; [.1F9D.0020.0002] # MONGOLIAN DIGIT FIVE +194B ; [.1F9D.0020.0002] # LIMBU DIGIT FIVE +19D5 ; [.1F9D.0020.0002] # NEW TAI LUE DIGIT FIVE +1A85 ; [.1F9D.0020.0002] # TAI THAM HORA DIGIT FIVE +1A95 ; [.1F9D.0020.0002] # TAI THAM THAM DIGIT FIVE +1B55 ; [.1F9D.0020.0002] # BALINESE DIGIT FIVE +1BB5 ; [.1F9D.0020.0002] # SUNDANESE DIGIT FIVE +1C45 ; [.1F9D.0020.0002] # LEPCHA DIGIT FIVE +1C55 ; [.1F9D.0020.0002] # OL CHIKI DIGIT FIVE +3025 ; [.1F9D.0020.0002] # HANGZHOU NUMERAL FIVE +A625 ; [.1F9D.0020.0002] # VAI DIGIT FIVE +A8D5 ; [.1F9D.0020.0002] # SAURASHTRA DIGIT FIVE +A905 ; [.1F9D.0020.0002] # KAYAH LI DIGIT FIVE +A9D5 ; [.1F9D.0020.0002] # JAVANESE DIGIT FIVE +A9F5 ; [.1F9D.0020.0002] # MYANMAR TAI LAING DIGIT FIVE +AA55 ; [.1F9D.0020.0002] # CHAM DIGIT FIVE +ABF5 ; [.1F9D.0020.0002] # MEETEI MAYEK DIGIT FIVE +1010B ; [.1F9D.0020.0002] # AEGEAN NUMBER FIVE +10143 ; [.1F9D.0020.0002] # GREEK ACROPHONIC ATTIC FIVE +10148 ; [.1F9D.0020.0002] # GREEK ACROPHONIC ATTIC FIVE TALENTS +1014F ; [.1F9D.0020.0002] # GREEK ACROPHONIC ATTIC FIVE STATERS +1015F ; [.1F9D.0020.0002] # GREEK ACROPHONIC TROEZENIAN FIVE +10173 ; [.1F9D.0020.0002] # GREEK ACROPHONIC DELPHIC FIVE MNAS +102E5 ; [.1F9D.0020.0002] # COPTIC EPACT DIGIT FIVE +10321 ; [.1F9D.0020.0002] # OLD ITALIC NUMERAL FIVE +104A5 ; [.1F9D.0020.0002] # OSMANYA DIGIT FIVE +1087D ; [.1F9D.0020.0002] # PALMYRENE NUMBER FIVE +108AC ; [.1F9D.0020.0002] # NABATAEAN NUMBER FIVE +108FC ; [.1F9D.0020.0002] # HATRAN NUMBER FIVE +109C4 ; [.1F9D.0020.0002] # MEROITIC CURSIVE NUMBER FIVE +10AEC ; [.1F9D.0020.0002] # MANICHAEAN NUMBER FIVE +10CFB ; [.1F9D.0020.0002] # OLD HUNGARIAN NUMBER FIVE +10D35 ; [.1F9D.0020.0002] # HANIFI ROHINGYA DIGIT FIVE +10E64 ; [.1F9D.0020.0002] # RUMI DIGIT FIVE +10F21 ; [.1F9D.0020.0002] # OLD SOGDIAN NUMBER FIVE +11056 ; [.1F9D.0020.0002] # BRAHMI NUMBER FIVE +1106B ; [.1F9D.0020.0002] # BRAHMI DIGIT FIVE +110F5 ; [.1F9D.0020.0002] # SORA SOMPENG DIGIT FIVE +1113B ; [.1F9D.0020.0002] # CHAKMA DIGIT FIVE +111D5 ; [.1F9D.0020.0002] # SHARADA DIGIT FIVE +111E5 ; [.1F9D.0020.0002] # SINHALA ARCHAIC DIGIT FIVE +112F5 ; [.1F9D.0020.0002] # KHUDAWADI DIGIT FIVE +11455 ; [.1F9D.0020.0002] # NEWA DIGIT FIVE +114D5 ; [.1F9D.0020.0002] # TIRHUTA DIGIT FIVE +11655 ; [.1F9D.0020.0002] # MODI DIGIT FIVE +116C5 ; [.1F9D.0020.0002] # TAKRI DIGIT FIVE +11735 ; [.1F9D.0020.0002] # AHOM DIGIT FIVE +118E5 ; [.1F9D.0020.0002] # WARANG CITI DIGIT FIVE +11955 ; [.1F9D.0020.0002] # DIVES AKURU DIGIT FIVE +11C55 ; [.1F9D.0020.0002] # BHAIKSUKI DIGIT FIVE +11C5E ; [.1F9D.0020.0002] # BHAIKSUKI NUMBER FIVE +11D55 ; [.1F9D.0020.0002] # MASARAM GONDI DIGIT FIVE +11DA5 ; [.1F9D.0020.0002] # GUNJALA GONDI DIGIT FIVE +12403 ; [.1F9D.0020.0002] # CUNEIFORM NUMERIC SIGN FIVE ASH +1240A ; [.1F9D.0020.0002] # CUNEIFORM NUMERIC SIGN FIVE DISH +12410 ; [.1F9D.0020.0002] # CUNEIFORM NUMERIC SIGN FIVE U +12419 ; [.1F9D.0020.0002] # CUNEIFORM NUMERIC SIGN FIVE GESH2 +12422 ; [.1F9D.0020.0002] # CUNEIFORM NUMERIC SIGN FIVE GESHU +12427 ; [.1F9D.0020.0002] # CUNEIFORM NUMERIC SIGN FIVE SHAR2 +12431 ; [.1F9D.0020.0002] # CUNEIFORM NUMERIC SIGN FIVE SHARU +12439 ; [.1F9D.0020.0002] # CUNEIFORM NUMERIC SIGN FIVE BURU +1244D ; [.1F9D.0020.0002] # CUNEIFORM NUMERIC SIGN FIVE ASH TENU +12454 ; [.1F9D.0020.0002] # CUNEIFORM NUMERIC SIGN FIVE BAN2 +12455 ; [.1F9D.0020.0002] # CUNEIFORM NUMERIC SIGN FIVE BAN2 VARIANT FORM +1246A ; [.1F9D.0020.0002] # CUNEIFORM NUMERIC SIGN FIVE U VARIANT FORM +16A65 ; [.1F9D.0020.0002] # MRO DIGIT FIVE +16B55 ; [.1F9D.0020.0002] # PAHAWH HMONG DIGIT FIVE +16E85 ; [.1F9D.0020.0002] # MEDEFAIDRIN DIGIT FIVE +1D2E5 ; [.1F9D.0020.0002] # MAYAN NUMERAL FIVE +1D364 ; [.1F9D.0020.0002] # COUNTING ROD UNIT DIGIT FIVE +1D376 ; [.1F9D.0020.0002] # IDEOGRAPHIC TALLY MARK FIVE +1D378 ; [.1F9D.0020.0002] # TALLY MARK FIVE +1E145 ; [.1F9D.0020.0002] # NYIAKENG PUACHUE HMONG DIGIT FIVE +1E2F5 ; [.1F9D.0020.0002] # WANCHO DIGIT FIVE +1E8CB ; [.1F9D.0020.0002] # MENDE KIKAKUI DIGIT FIVE +1E955 ; [.1F9D.0020.0002] # ADLAM DIGIT FIVE +1EC75 ; [.1F9D.0020.0002] # INDIC SIYAQ NUMBER FIVE +1ECA7 ; [.1F9D.0020.0002] # INDIC SIYAQ NUMBER PREFIXED FIVE +1ED05 ; [.1F9D.0020.0002] # OTTOMAN SIYAQ NUMBER FIVE +FF15 ; [.1F9D.0020.0003] # FULLWIDTH DIGIT FIVE +0F2E ; [.1F9D.0020.0004] # TIBETAN DIGIT HALF FIVE +2478 ; [*0328.0020.0004][.1F9D.0020.0004][*0329.0020.0004] # PARENTHESIZED DIGIT FIVE +248C ; [.1F9D.0020.0004][*027E.0020.0004] # DIGIT FIVE FULL STOP +1F106 ; [.1F9D.0020.0004][*0223.0020.0004] # DIGIT FIVE COMMA +1D7D3 ; [.1F9D.0020.0005] # MATHEMATICAL BOLD DIGIT FIVE +1D7DD ; [.1F9D.0020.0005] # MATHEMATICAL DOUBLE-STRUCK DIGIT FIVE +1D7E7 ; [.1F9D.0020.0005] # MATHEMATICAL SANS-SERIF DIGIT FIVE +1D7F1 ; [.1F9D.0020.0005] # MATHEMATICAL SANS-SERIF BOLD DIGIT FIVE +1D7FB ; [.1F9D.0020.0005] # MATHEMATICAL MONOSPACE DIGIT FIVE +1FBF5 ; [.1F9D.0020.0005] # SEGMENTED DIGIT FIVE +2464 ; [.1F9D.0020.0006] # CIRCLED DIGIT FIVE +24F9 ; [.1F9D.0020.0006] # DOUBLE CIRCLED DIGIT FIVE +277A ; [.1F9D.0020.0006] # DINGBAT NEGATIVE CIRCLED DIGIT FIVE +2784 ; [.1F9D.0020.0006] # DINGBAT CIRCLED SANS-SERIF DIGIT FIVE +278E ; [.1F9D.0020.0006] # DINGBAT NEGATIVE CIRCLED SANS-SERIF DIGIT FIVE +2075 ; [.1F9D.0020.0014] # SUPERSCRIPT FIVE +2085 ; [.1F9D.0020.0015] # SUBSCRIPT FIVE +1ED32 ; [.1F9D.0020.0004][.0000.0118.0004] # OTTOMAN SIYAQ ALTERNATE NUMBER FIVE +324C ; [.1F9D.0020.0006][.1F98.0020.0006] # CIRCLED NUMBER FIFTY ON BLACK SQUARE +32BF ; [.1F9D.0020.0006][.1F98.0020.0006] # CIRCLED NUMBER FIFTY +1F1A0 ; [.1F9D.0020.001C][*027E.0020.001C][.1F99.0020.001C] # SQUARED FIVE POINT ONE +215A ; [.1F9D.0020.001E][*0676.0020.001E][.1F9E.0020.001E] # VULGAR FRACTION FIVE SIXTHS +215D ; [.1F9D.0020.001E][*0676.0020.001E][.1FA0.0020.001E] # VULGAR FRACTION FIVE EIGHTHS +33E4 ; [.1F9D.0020.0004][.FB40.0020.0004][.E5E5.0000.0000] # IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY FIVE +32C4 ; [.1F9D.0020.0004][.FB40.0020.0004][.E708.0000.0000] # IDEOGRAPHIC TELEGRAPH SYMBOL FOR MAY +335D ; [.1F9D.0020.0004][.FB40.0020.0004][.F0B9.0000.0000] # IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR FIVE +0036 ; [.1F9E.0020.0002] # DIGIT SIX +0666 ; [.1F9E.0020.0002] # ARABIC-INDIC DIGIT SIX +06F6 ; [.1F9E.0020.0002] # EXTENDED ARABIC-INDIC DIGIT SIX +07C6 ; [.1F9E.0020.0002] # NKO DIGIT SIX +096C ; [.1F9E.0020.0002] # DEVANAGARI DIGIT SIX +09EC ; [.1F9E.0020.0002] # BENGALI DIGIT SIX +0A6C ; [.1F9E.0020.0002] # GURMUKHI DIGIT SIX +0AEC ; [.1F9E.0020.0002] # GUJARATI DIGIT SIX +0B6C ; [.1F9E.0020.0002] # ORIYA DIGIT SIX +0BEC ; [.1F9E.0020.0002] # TAMIL DIGIT SIX +0C6C ; [.1F9E.0020.0002] # TELUGU DIGIT SIX +0CEC ; [.1F9E.0020.0002] # KANNADA DIGIT SIX +0D6C ; [.1F9E.0020.0002] # MALAYALAM DIGIT SIX +0DEC ; [.1F9E.0020.0002] # SINHALA LITH DIGIT SIX +0E56 ; [.1F9E.0020.0002] # THAI DIGIT SIX +0ED6 ; [.1F9E.0020.0002] # LAO DIGIT SIX +0F26 ; [.1F9E.0020.0002] # TIBETAN DIGIT SIX +1046 ; [.1F9E.0020.0002] # MYANMAR DIGIT SIX +1096 ; [.1F9E.0020.0002] # MYANMAR SHAN DIGIT SIX +136E ; [.1F9E.0020.0002] # ETHIOPIC DIGIT SIX +17E6 ; [.1F9E.0020.0002] # KHMER DIGIT SIX +17F6 ; [.1F9E.0020.0002] # KHMER SYMBOL LEK ATTAK PRAM-MUOY +1816 ; [.1F9E.0020.0002] # MONGOLIAN DIGIT SIX +194C ; [.1F9E.0020.0002] # LIMBU DIGIT SIX +19D6 ; [.1F9E.0020.0002] # NEW TAI LUE DIGIT SIX +1A86 ; [.1F9E.0020.0002] # TAI THAM HORA DIGIT SIX +1A96 ; [.1F9E.0020.0002] # TAI THAM THAM DIGIT SIX +1B56 ; [.1F9E.0020.0002] # BALINESE DIGIT SIX +1BB6 ; [.1F9E.0020.0002] # SUNDANESE DIGIT SIX +1C46 ; [.1F9E.0020.0002] # LEPCHA DIGIT SIX +1C56 ; [.1F9E.0020.0002] # OL CHIKI DIGIT SIX +2185 ; [.1F9E.0020.0002] # ROMAN NUMERAL SIX LATE FORM +3026 ; [.1F9E.0020.0002] # HANGZHOU NUMERAL SIX +A626 ; [.1F9E.0020.0002] # VAI DIGIT SIX +A8D6 ; [.1F9E.0020.0002] # SAURASHTRA DIGIT SIX +A906 ; [.1F9E.0020.0002] # KAYAH LI DIGIT SIX +A9D6 ; [.1F9E.0020.0002] # JAVANESE DIGIT SIX +A9F6 ; [.1F9E.0020.0002] # MYANMAR TAI LAING DIGIT SIX +AA56 ; [.1F9E.0020.0002] # CHAM DIGIT SIX +ABF6 ; [.1F9E.0020.0002] # MEETEI MAYEK DIGIT SIX +1010C ; [.1F9E.0020.0002] # AEGEAN NUMBER SIX +102E6 ; [.1F9E.0020.0002] # COPTIC EPACT DIGIT SIX +104A6 ; [.1F9E.0020.0002] # OSMANYA DIGIT SIX +109C5 ; [.1F9E.0020.0002] # MEROITIC CURSIVE NUMBER SIX +10D36 ; [.1F9E.0020.0002] # HANIFI ROHINGYA DIGIT SIX +10E65 ; [.1F9E.0020.0002] # RUMI DIGIT SIX +11057 ; [.1F9E.0020.0002] # BRAHMI NUMBER SIX +1106C ; [.1F9E.0020.0002] # BRAHMI DIGIT SIX +110F6 ; [.1F9E.0020.0002] # SORA SOMPENG DIGIT SIX +1113C ; [.1F9E.0020.0002] # CHAKMA DIGIT SIX +111D6 ; [.1F9E.0020.0002] # SHARADA DIGIT SIX +111E6 ; [.1F9E.0020.0002] # SINHALA ARCHAIC DIGIT SIX +112F6 ; [.1F9E.0020.0002] # KHUDAWADI DIGIT SIX +11456 ; [.1F9E.0020.0002] # NEWA DIGIT SIX +114D6 ; [.1F9E.0020.0002] # TIRHUTA DIGIT SIX +11656 ; [.1F9E.0020.0002] # MODI DIGIT SIX +116C6 ; [.1F9E.0020.0002] # TAKRI DIGIT SIX +11736 ; [.1F9E.0020.0002] # AHOM DIGIT SIX +118E6 ; [.1F9E.0020.0002] # WARANG CITI DIGIT SIX +11956 ; [.1F9E.0020.0002] # DIVES AKURU DIGIT SIX +11C56 ; [.1F9E.0020.0002] # BHAIKSUKI DIGIT SIX +11C5F ; [.1F9E.0020.0002] # BHAIKSUKI NUMBER SIX +11D56 ; [.1F9E.0020.0002] # MASARAM GONDI DIGIT SIX +11DA6 ; [.1F9E.0020.0002] # GUNJALA GONDI DIGIT SIX +12404 ; [.1F9E.0020.0002] # CUNEIFORM NUMERIC SIGN SIX ASH +1240B ; [.1F9E.0020.0002] # CUNEIFORM NUMERIC SIGN SIX DISH +12411 ; [.1F9E.0020.0002] # CUNEIFORM NUMERIC SIGN SIX U +1241A ; [.1F9E.0020.0002] # CUNEIFORM NUMERIC SIGN SIX GESH2 +12428 ; [.1F9E.0020.0002] # CUNEIFORM NUMERIC SIGN SIX SHAR2 +12440 ; [.1F9E.0020.0002] # CUNEIFORM NUMERIC SIGN SIX VARIANT FORM ASH9 +1244E ; [.1F9E.0020.0002] # CUNEIFORM NUMERIC SIGN SIX ASH TENU +1246B ; [.1F9E.0020.0002] # CUNEIFORM NUMERIC SIGN SIX U VARIANT FORM +16A66 ; [.1F9E.0020.0002] # MRO DIGIT SIX +16B56 ; [.1F9E.0020.0002] # PAHAWH HMONG DIGIT SIX +16E86 ; [.1F9E.0020.0002] # MEDEFAIDRIN DIGIT SIX +1D2E6 ; [.1F9E.0020.0002] # MAYAN NUMERAL SIX +1D365 ; [.1F9E.0020.0002] # COUNTING ROD UNIT DIGIT SIX +1E146 ; [.1F9E.0020.0002] # NYIAKENG PUACHUE HMONG DIGIT SIX +1E2F6 ; [.1F9E.0020.0002] # WANCHO DIGIT SIX +1E8CC ; [.1F9E.0020.0002] # MENDE KIKAKUI DIGIT SIX +1E956 ; [.1F9E.0020.0002] # ADLAM DIGIT SIX +1EC76 ; [.1F9E.0020.0002] # INDIC SIYAQ NUMBER SIX +1ECA8 ; [.1F9E.0020.0002] # INDIC SIYAQ NUMBER PREFIXED SIX +1ED06 ; [.1F9E.0020.0002] # OTTOMAN SIYAQ NUMBER SIX +FF16 ; [.1F9E.0020.0003] # FULLWIDTH DIGIT SIX +0F2F ; [.1F9E.0020.0004] # TIBETAN DIGIT HALF SIX +2479 ; [*0328.0020.0004][.1F9E.0020.0004][*0329.0020.0004] # PARENTHESIZED DIGIT SIX +248D ; [.1F9E.0020.0004][*027E.0020.0004] # DIGIT SIX FULL STOP +1F107 ; [.1F9E.0020.0004][*0223.0020.0004] # DIGIT SIX COMMA +1D7D4 ; [.1F9E.0020.0005] # MATHEMATICAL BOLD DIGIT SIX +1D7DE ; [.1F9E.0020.0005] # MATHEMATICAL DOUBLE-STRUCK DIGIT SIX +1D7E8 ; [.1F9E.0020.0005] # MATHEMATICAL SANS-SERIF DIGIT SIX +1D7F2 ; [.1F9E.0020.0005] # MATHEMATICAL SANS-SERIF BOLD DIGIT SIX +1D7FC ; [.1F9E.0020.0005] # MATHEMATICAL MONOSPACE DIGIT SIX +1FBF6 ; [.1F9E.0020.0005] # SEGMENTED DIGIT SIX +2465 ; [.1F9E.0020.0006] # CIRCLED DIGIT SIX +24FA ; [.1F9E.0020.0006] # DOUBLE CIRCLED DIGIT SIX +277B ; [.1F9E.0020.0006] # DINGBAT NEGATIVE CIRCLED DIGIT SIX +2785 ; [.1F9E.0020.0006] # DINGBAT CIRCLED SANS-SERIF DIGIT SIX +278F ; [.1F9E.0020.0006] # DINGBAT NEGATIVE CIRCLED SANS-SERIF DIGIT SIX +2076 ; [.1F9E.0020.0014] # SUPERSCRIPT SIX +2086 ; [.1F9E.0020.0015] # SUBSCRIPT SIX +1ED33 ; [.1F9E.0020.0004][.0000.0118.0004] # OTTOMAN SIYAQ ALTERNATE NUMBER SIX +324D ; [.1F9E.0020.0006][.1F98.0020.0006] # CIRCLED NUMBER SIXTY ON BLACK SQUARE +1F1A3 ; [.1F9E.0020.001C][.1F98.0020.001C][.216B.0020.001D] # SQUARED SIXTY P +33E5 ; [.1F9E.0020.0004][.FB40.0020.0004][.E5E5.0000.0000] # IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY SIX +32C5 ; [.1F9E.0020.0004][.FB40.0020.0004][.E708.0000.0000] # IDEOGRAPHIC TELEGRAPH SYMBOL FOR JUNE +335E ; [.1F9E.0020.0004][.FB40.0020.0004][.F0B9.0000.0000] # IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR SIX +0037 ; [.1F9F.0020.0002] # DIGIT SEVEN +0667 ; [.1F9F.0020.0002] # ARABIC-INDIC DIGIT SEVEN +06F7 ; [.1F9F.0020.0002] # EXTENDED ARABIC-INDIC DIGIT SEVEN +07C7 ; [.1F9F.0020.0002] # NKO DIGIT SEVEN +096D ; [.1F9F.0020.0002] # DEVANAGARI DIGIT SEVEN +09ED ; [.1F9F.0020.0002] # BENGALI DIGIT SEVEN +0A6D ; [.1F9F.0020.0002] # GURMUKHI DIGIT SEVEN +0AED ; [.1F9F.0020.0002] # GUJARATI DIGIT SEVEN +0B6D ; [.1F9F.0020.0002] # ORIYA DIGIT SEVEN +0BED ; [.1F9F.0020.0002] # TAMIL DIGIT SEVEN +0C6D ; [.1F9F.0020.0002] # TELUGU DIGIT SEVEN +0CED ; [.1F9F.0020.0002] # KANNADA DIGIT SEVEN +0D6D ; [.1F9F.0020.0002] # MALAYALAM DIGIT SEVEN +0DED ; [.1F9F.0020.0002] # SINHALA LITH DIGIT SEVEN +0E57 ; [.1F9F.0020.0002] # THAI DIGIT SEVEN +0ED7 ; [.1F9F.0020.0002] # LAO DIGIT SEVEN +0F27 ; [.1F9F.0020.0002] # TIBETAN DIGIT SEVEN +1047 ; [.1F9F.0020.0002] # MYANMAR DIGIT SEVEN +1097 ; [.1F9F.0020.0002] # MYANMAR SHAN DIGIT SEVEN +136F ; [.1F9F.0020.0002] # ETHIOPIC DIGIT SEVEN +17E7 ; [.1F9F.0020.0002] # KHMER DIGIT SEVEN +17F7 ; [.1F9F.0020.0002] # KHMER SYMBOL LEK ATTAK PRAM-PII +1817 ; [.1F9F.0020.0002] # MONGOLIAN DIGIT SEVEN +194D ; [.1F9F.0020.0002] # LIMBU DIGIT SEVEN +19D7 ; [.1F9F.0020.0002] # NEW TAI LUE DIGIT SEVEN +1A87 ; [.1F9F.0020.0002] # TAI THAM HORA DIGIT SEVEN +1A97 ; [.1F9F.0020.0002] # TAI THAM THAM DIGIT SEVEN +1B57 ; [.1F9F.0020.0002] # BALINESE DIGIT SEVEN +1BB7 ; [.1F9F.0020.0002] # SUNDANESE DIGIT SEVEN +1C47 ; [.1F9F.0020.0002] # LEPCHA DIGIT SEVEN +1C57 ; [.1F9F.0020.0002] # OL CHIKI DIGIT SEVEN +3027 ; [.1F9F.0020.0002] # HANGZHOU NUMERAL SEVEN +A627 ; [.1F9F.0020.0002] # VAI DIGIT SEVEN +A8D7 ; [.1F9F.0020.0002] # SAURASHTRA DIGIT SEVEN +A907 ; [.1F9F.0020.0002] # KAYAH LI DIGIT SEVEN +A9D7 ; [.1F9F.0020.0002] # JAVANESE DIGIT SEVEN +A9F7 ; [.1F9F.0020.0002] # MYANMAR TAI LAING DIGIT SEVEN +AA57 ; [.1F9F.0020.0002] # CHAM DIGIT SEVEN +ABF7 ; [.1F9F.0020.0002] # MEETEI MAYEK DIGIT SEVEN +1010D ; [.1F9F.0020.0002] # AEGEAN NUMBER SEVEN +102E7 ; [.1F9F.0020.0002] # COPTIC EPACT DIGIT SEVEN +104A7 ; [.1F9F.0020.0002] # OSMANYA DIGIT SEVEN +109C6 ; [.1F9F.0020.0002] # MEROITIC CURSIVE NUMBER SEVEN +10D37 ; [.1F9F.0020.0002] # HANIFI ROHINGYA DIGIT SEVEN +10E66 ; [.1F9F.0020.0002] # RUMI DIGIT SEVEN +11058 ; [.1F9F.0020.0002] # BRAHMI NUMBER SEVEN +1106D ; [.1F9F.0020.0002] # BRAHMI DIGIT SEVEN +110F7 ; [.1F9F.0020.0002] # SORA SOMPENG DIGIT SEVEN +1113D ; [.1F9F.0020.0002] # CHAKMA DIGIT SEVEN +111D7 ; [.1F9F.0020.0002] # SHARADA DIGIT SEVEN +111E7 ; [.1F9F.0020.0002] # SINHALA ARCHAIC DIGIT SEVEN +112F7 ; [.1F9F.0020.0002] # KHUDAWADI DIGIT SEVEN +11457 ; [.1F9F.0020.0002] # NEWA DIGIT SEVEN +114D7 ; [.1F9F.0020.0002] # TIRHUTA DIGIT SEVEN +11657 ; [.1F9F.0020.0002] # MODI DIGIT SEVEN +116C7 ; [.1F9F.0020.0002] # TAKRI DIGIT SEVEN +11737 ; [.1F9F.0020.0002] # AHOM DIGIT SEVEN +118E7 ; [.1F9F.0020.0002] # WARANG CITI DIGIT SEVEN +11957 ; [.1F9F.0020.0002] # DIVES AKURU DIGIT SEVEN +11C57 ; [.1F9F.0020.0002] # BHAIKSUKI DIGIT SEVEN +11C60 ; [.1F9F.0020.0002] # BHAIKSUKI NUMBER SEVEN +11D57 ; [.1F9F.0020.0002] # MASARAM GONDI DIGIT SEVEN +11DA7 ; [.1F9F.0020.0002] # GUNJALA GONDI DIGIT SEVEN +12405 ; [.1F9F.0020.0002] # CUNEIFORM NUMERIC SIGN SEVEN ASH +1240C ; [.1F9F.0020.0002] # CUNEIFORM NUMERIC SIGN SEVEN DISH +12412 ; [.1F9F.0020.0002] # CUNEIFORM NUMERIC SIGN SEVEN U +1241B ; [.1F9F.0020.0002] # CUNEIFORM NUMERIC SIGN SEVEN GESH2 +12429 ; [.1F9F.0020.0002] # CUNEIFORM NUMERIC SIGN SEVEN SHAR2 +12441 ; [.1F9F.0020.0002] # CUNEIFORM NUMERIC SIGN SEVEN VARIANT FORM IMIN3 +12442 ; [.1F9F.0020.0002] # CUNEIFORM NUMERIC SIGN SEVEN VARIANT FORM IMIN A +12443 ; [.1F9F.0020.0002] # CUNEIFORM NUMERIC SIGN SEVEN VARIANT FORM IMIN B +1246C ; [.1F9F.0020.0002] # CUNEIFORM NUMERIC SIGN SEVEN U VARIANT FORM +16A67 ; [.1F9F.0020.0002] # MRO DIGIT SEVEN +16B57 ; [.1F9F.0020.0002] # PAHAWH HMONG DIGIT SEVEN +16E87 ; [.1F9F.0020.0002] # MEDEFAIDRIN DIGIT SEVEN +1D2E7 ; [.1F9F.0020.0002] # MAYAN NUMERAL SEVEN +1D366 ; [.1F9F.0020.0002] # COUNTING ROD UNIT DIGIT SEVEN +1E147 ; [.1F9F.0020.0002] # NYIAKENG PUACHUE HMONG DIGIT SEVEN +1E2F7 ; [.1F9F.0020.0002] # WANCHO DIGIT SEVEN +1E8CD ; [.1F9F.0020.0002] # MENDE KIKAKUI DIGIT SEVEN +1E957 ; [.1F9F.0020.0002] # ADLAM DIGIT SEVEN +1EC77 ; [.1F9F.0020.0002] # INDIC SIYAQ NUMBER SEVEN +1ECA9 ; [.1F9F.0020.0002] # INDIC SIYAQ NUMBER PREFIXED SEVEN +1ED07 ; [.1F9F.0020.0002] # OTTOMAN SIYAQ NUMBER SEVEN +FF17 ; [.1F9F.0020.0003] # FULLWIDTH DIGIT SEVEN +0F30 ; [.1F9F.0020.0004] # TIBETAN DIGIT HALF SEVEN +247A ; [*0328.0020.0004][.1F9F.0020.0004][*0329.0020.0004] # PARENTHESIZED DIGIT SEVEN +248E ; [.1F9F.0020.0004][*027E.0020.0004] # DIGIT SEVEN FULL STOP +1F108 ; [.1F9F.0020.0004][*0223.0020.0004] # DIGIT SEVEN COMMA +1D7D5 ; [.1F9F.0020.0005] # MATHEMATICAL BOLD DIGIT SEVEN +1D7DF ; [.1F9F.0020.0005] # MATHEMATICAL DOUBLE-STRUCK DIGIT SEVEN +1D7E9 ; [.1F9F.0020.0005] # MATHEMATICAL SANS-SERIF DIGIT SEVEN +1D7F3 ; [.1F9F.0020.0005] # MATHEMATICAL SANS-SERIF BOLD DIGIT SEVEN +1D7FD ; [.1F9F.0020.0005] # MATHEMATICAL MONOSPACE DIGIT SEVEN +1FBF7 ; [.1F9F.0020.0005] # SEGMENTED DIGIT SEVEN +2466 ; [.1F9F.0020.0006] # CIRCLED DIGIT SEVEN +24FB ; [.1F9F.0020.0006] # DOUBLE CIRCLED DIGIT SEVEN +277C ; [.1F9F.0020.0006] # DINGBAT NEGATIVE CIRCLED DIGIT SEVEN +2786 ; [.1F9F.0020.0006] # DINGBAT CIRCLED SANS-SERIF DIGIT SEVEN +2790 ; [.1F9F.0020.0006] # DINGBAT NEGATIVE CIRCLED SANS-SERIF DIGIT SEVEN +2077 ; [.1F9F.0020.0014] # SUPERSCRIPT SEVEN +2087 ; [.1F9F.0020.0015] # SUBSCRIPT SEVEN +1ED34 ; [.1F9F.0020.0004][.0000.0118.0004] # OTTOMAN SIYAQ ALTERNATE NUMBER SEVEN +324E ; [.1F9F.0020.0006][.1F98.0020.0006] # CIRCLED NUMBER SEVENTY ON BLACK SQUARE +1F1A1 ; [.1F9F.0020.001C][*027E.0020.001C][.1F99.0020.001C] # SQUARED SEVEN POINT ONE +215E ; [.1F9F.0020.001E][*0676.0020.001E][.1FA0.0020.001E] # VULGAR FRACTION SEVEN EIGHTHS +33E6 ; [.1F9F.0020.0004][.FB40.0020.0004][.E5E5.0000.0000] # IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY SEVEN +32C6 ; [.1F9F.0020.0004][.FB40.0020.0004][.E708.0000.0000] # IDEOGRAPHIC TELEGRAPH SYMBOL FOR JULY +335F ; [.1F9F.0020.0004][.FB40.0020.0004][.F0B9.0000.0000] # IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR SEVEN +0038 ; [.1FA0.0020.0002] # DIGIT EIGHT +0668 ; [.1FA0.0020.0002] # ARABIC-INDIC DIGIT EIGHT +06F8 ; [.1FA0.0020.0002] # EXTENDED ARABIC-INDIC DIGIT EIGHT +07C8 ; [.1FA0.0020.0002] # NKO DIGIT EIGHT +096E ; [.1FA0.0020.0002] # DEVANAGARI DIGIT EIGHT +09EE ; [.1FA0.0020.0002] # BENGALI DIGIT EIGHT +0A6E ; [.1FA0.0020.0002] # GURMUKHI DIGIT EIGHT +0AEE ; [.1FA0.0020.0002] # GUJARATI DIGIT EIGHT +0B6E ; [.1FA0.0020.0002] # ORIYA DIGIT EIGHT +0BEE ; [.1FA0.0020.0002] # TAMIL DIGIT EIGHT +0C6E ; [.1FA0.0020.0002] # TELUGU DIGIT EIGHT +0CEE ; [.1FA0.0020.0002] # KANNADA DIGIT EIGHT +0D6E ; [.1FA0.0020.0002] # MALAYALAM DIGIT EIGHT +0DEE ; [.1FA0.0020.0002] # SINHALA LITH DIGIT EIGHT +0E58 ; [.1FA0.0020.0002] # THAI DIGIT EIGHT +0ED8 ; [.1FA0.0020.0002] # LAO DIGIT EIGHT +0F28 ; [.1FA0.0020.0002] # TIBETAN DIGIT EIGHT +1048 ; [.1FA0.0020.0002] # MYANMAR DIGIT EIGHT +1098 ; [.1FA0.0020.0002] # MYANMAR SHAN DIGIT EIGHT +1370 ; [.1FA0.0020.0002] # ETHIOPIC DIGIT EIGHT +17E8 ; [.1FA0.0020.0002] # KHMER DIGIT EIGHT +17F8 ; [.1FA0.0020.0002] # KHMER SYMBOL LEK ATTAK PRAM-BEI +1818 ; [.1FA0.0020.0002] # MONGOLIAN DIGIT EIGHT +194E ; [.1FA0.0020.0002] # LIMBU DIGIT EIGHT +19D8 ; [.1FA0.0020.0002] # NEW TAI LUE DIGIT EIGHT +1A88 ; [.1FA0.0020.0002] # TAI THAM HORA DIGIT EIGHT +1A98 ; [.1FA0.0020.0002] # TAI THAM THAM DIGIT EIGHT +1B58 ; [.1FA0.0020.0002] # BALINESE DIGIT EIGHT +1BB8 ; [.1FA0.0020.0002] # SUNDANESE DIGIT EIGHT +1C48 ; [.1FA0.0020.0002] # LEPCHA DIGIT EIGHT +1C58 ; [.1FA0.0020.0002] # OL CHIKI DIGIT EIGHT +3028 ; [.1FA0.0020.0002] # HANGZHOU NUMERAL EIGHT +A628 ; [.1FA0.0020.0002] # VAI DIGIT EIGHT +A8D8 ; [.1FA0.0020.0002] # SAURASHTRA DIGIT EIGHT +A908 ; [.1FA0.0020.0002] # KAYAH LI DIGIT EIGHT +A9D8 ; [.1FA0.0020.0002] # JAVANESE DIGIT EIGHT +A9F8 ; [.1FA0.0020.0002] # MYANMAR TAI LAING DIGIT EIGHT +AA58 ; [.1FA0.0020.0002] # CHAM DIGIT EIGHT +ABF8 ; [.1FA0.0020.0002] # MEETEI MAYEK DIGIT EIGHT +1010E ; [.1FA0.0020.0002] # AEGEAN NUMBER EIGHT +102E8 ; [.1FA0.0020.0002] # COPTIC EPACT DIGIT EIGHT +104A8 ; [.1FA0.0020.0002] # OSMANYA DIGIT EIGHT +109C7 ; [.1FA0.0020.0002] # MEROITIC CURSIVE NUMBER EIGHT +10D38 ; [.1FA0.0020.0002] # HANIFI ROHINGYA DIGIT EIGHT +10E67 ; [.1FA0.0020.0002] # RUMI DIGIT EIGHT +11059 ; [.1FA0.0020.0002] # BRAHMI NUMBER EIGHT +1106E ; [.1FA0.0020.0002] # BRAHMI DIGIT EIGHT +110F8 ; [.1FA0.0020.0002] # SORA SOMPENG DIGIT EIGHT +1113E ; [.1FA0.0020.0002] # CHAKMA DIGIT EIGHT +111D8 ; [.1FA0.0020.0002] # SHARADA DIGIT EIGHT +111E8 ; [.1FA0.0020.0002] # SINHALA ARCHAIC DIGIT EIGHT +112F8 ; [.1FA0.0020.0002] # KHUDAWADI DIGIT EIGHT +11458 ; [.1FA0.0020.0002] # NEWA DIGIT EIGHT +114D8 ; [.1FA0.0020.0002] # TIRHUTA DIGIT EIGHT +11658 ; [.1FA0.0020.0002] # MODI DIGIT EIGHT +116C8 ; [.1FA0.0020.0002] # TAKRI DIGIT EIGHT +11738 ; [.1FA0.0020.0002] # AHOM DIGIT EIGHT +118E8 ; [.1FA0.0020.0002] # WARANG CITI DIGIT EIGHT +11958 ; [.1FA0.0020.0002] # DIVES AKURU DIGIT EIGHT +11C58 ; [.1FA0.0020.0002] # BHAIKSUKI DIGIT EIGHT +11C61 ; [.1FA0.0020.0002] # BHAIKSUKI NUMBER EIGHT +11D58 ; [.1FA0.0020.0002] # MASARAM GONDI DIGIT EIGHT +11DA8 ; [.1FA0.0020.0002] # GUNJALA GONDI DIGIT EIGHT +12406 ; [.1FA0.0020.0002] # CUNEIFORM NUMERIC SIGN EIGHT ASH +1240D ; [.1FA0.0020.0002] # CUNEIFORM NUMERIC SIGN EIGHT DISH +12413 ; [.1FA0.0020.0002] # CUNEIFORM NUMERIC SIGN EIGHT U +1241C ; [.1FA0.0020.0002] # CUNEIFORM NUMERIC SIGN EIGHT GESH2 +1242A ; [.1FA0.0020.0002] # CUNEIFORM NUMERIC SIGN EIGHT SHAR2 +12444 ; [.1FA0.0020.0002] # CUNEIFORM NUMERIC SIGN EIGHT VARIANT FORM USSU +12445 ; [.1FA0.0020.0002] # CUNEIFORM NUMERIC SIGN EIGHT VARIANT FORM USSU3 +1246D ; [.1FA0.0020.0002] # CUNEIFORM NUMERIC SIGN EIGHT U VARIANT FORM +16A68 ; [.1FA0.0020.0002] # MRO DIGIT EIGHT +16B58 ; [.1FA0.0020.0002] # PAHAWH HMONG DIGIT EIGHT +16E88 ; [.1FA0.0020.0002] # MEDEFAIDRIN DIGIT EIGHT +1D2E8 ; [.1FA0.0020.0002] # MAYAN NUMERAL EIGHT +1D367 ; [.1FA0.0020.0002] # COUNTING ROD UNIT DIGIT EIGHT +1E148 ; [.1FA0.0020.0002] # NYIAKENG PUACHUE HMONG DIGIT EIGHT +1E2F8 ; [.1FA0.0020.0002] # WANCHO DIGIT EIGHT +1E8CE ; [.1FA0.0020.0002] # MENDE KIKAKUI DIGIT EIGHT +1E958 ; [.1FA0.0020.0002] # ADLAM DIGIT EIGHT +1EC78 ; [.1FA0.0020.0002] # INDIC SIYAQ NUMBER EIGHT +1ECAA ; [.1FA0.0020.0002] # INDIC SIYAQ NUMBER PREFIXED EIGHT +1ED08 ; [.1FA0.0020.0002] # OTTOMAN SIYAQ NUMBER EIGHT +FF18 ; [.1FA0.0020.0003] # FULLWIDTH DIGIT EIGHT +0F31 ; [.1FA0.0020.0004] # TIBETAN DIGIT HALF EIGHT +247B ; [*0328.0020.0004][.1FA0.0020.0004][*0329.0020.0004] # PARENTHESIZED DIGIT EIGHT +248F ; [.1FA0.0020.0004][*027E.0020.0004] # DIGIT EIGHT FULL STOP +1F109 ; [.1FA0.0020.0004][*0223.0020.0004] # DIGIT EIGHT COMMA +1D7D6 ; [.1FA0.0020.0005] # MATHEMATICAL BOLD DIGIT EIGHT +1D7E0 ; [.1FA0.0020.0005] # MATHEMATICAL DOUBLE-STRUCK DIGIT EIGHT +1D7EA ; [.1FA0.0020.0005] # MATHEMATICAL SANS-SERIF DIGIT EIGHT +1D7F4 ; [.1FA0.0020.0005] # MATHEMATICAL SANS-SERIF BOLD DIGIT EIGHT +1D7FE ; [.1FA0.0020.0005] # MATHEMATICAL MONOSPACE DIGIT EIGHT +1FBF8 ; [.1FA0.0020.0005] # SEGMENTED DIGIT EIGHT +2467 ; [.1FA0.0020.0006] # CIRCLED DIGIT EIGHT +24FC ; [.1FA0.0020.0006] # DOUBLE CIRCLED DIGIT EIGHT +277D ; [.1FA0.0020.0006] # DINGBAT NEGATIVE CIRCLED DIGIT EIGHT +2787 ; [.1FA0.0020.0006] # DINGBAT CIRCLED SANS-SERIF DIGIT EIGHT +2791 ; [.1FA0.0020.0006] # DINGBAT NEGATIVE CIRCLED SANS-SERIF DIGIT EIGHT +2078 ; [.1FA0.0020.0014] # SUPERSCRIPT EIGHT +2088 ; [.1FA0.0020.0015] # SUBSCRIPT EIGHT +1ED35 ; [.1FA0.0020.0004][.0000.0118.0004] # OTTOMAN SIYAQ ALTERNATE NUMBER EIGHT +324F ; [.1FA0.0020.0006][.1F98.0020.0006] # CIRCLED NUMBER EIGHTY ON BLACK SQUARE +1F19F ; [.1FA0.0020.001C][.20C4.0020.001D] # SQUARED EIGHT K +33E7 ; [.1FA0.0020.0004][.FB40.0020.0004][.E5E5.0000.0000] # IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY EIGHT +32C7 ; [.1FA0.0020.0004][.FB40.0020.0004][.E708.0000.0000] # IDEOGRAPHIC TELEGRAPH SYMBOL FOR AUGUST +3360 ; [.1FA0.0020.0004][.FB40.0020.0004][.F0B9.0000.0000] # IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR EIGHT +0039 ; [.1FA1.0020.0002] # DIGIT NINE +0669 ; [.1FA1.0020.0002] # ARABIC-INDIC DIGIT NINE +06F9 ; [.1FA1.0020.0002] # EXTENDED ARABIC-INDIC DIGIT NINE +07C9 ; [.1FA1.0020.0002] # NKO DIGIT NINE +096F ; [.1FA1.0020.0002] # DEVANAGARI DIGIT NINE +09EF ; [.1FA1.0020.0002] # BENGALI DIGIT NINE +0A6F ; [.1FA1.0020.0002] # GURMUKHI DIGIT NINE +0AEF ; [.1FA1.0020.0002] # GUJARATI DIGIT NINE +0B6F ; [.1FA1.0020.0002] # ORIYA DIGIT NINE +0BEF ; [.1FA1.0020.0002] # TAMIL DIGIT NINE +0C6F ; [.1FA1.0020.0002] # TELUGU DIGIT NINE +0CEF ; [.1FA1.0020.0002] # KANNADA DIGIT NINE +0D6F ; [.1FA1.0020.0002] # MALAYALAM DIGIT NINE +0DEF ; [.1FA1.0020.0002] # SINHALA LITH DIGIT NINE +0E59 ; [.1FA1.0020.0002] # THAI DIGIT NINE +0ED9 ; [.1FA1.0020.0002] # LAO DIGIT NINE +0F29 ; [.1FA1.0020.0002] # TIBETAN DIGIT NINE +1049 ; [.1FA1.0020.0002] # MYANMAR DIGIT NINE +1099 ; [.1FA1.0020.0002] # MYANMAR SHAN DIGIT NINE +1371 ; [.1FA1.0020.0002] # ETHIOPIC DIGIT NINE +17E9 ; [.1FA1.0020.0002] # KHMER DIGIT NINE +17F9 ; [.1FA1.0020.0002] # KHMER SYMBOL LEK ATTAK PRAM-BUON +1819 ; [.1FA1.0020.0002] # MONGOLIAN DIGIT NINE +194F ; [.1FA1.0020.0002] # LIMBU DIGIT NINE +19D9 ; [.1FA1.0020.0002] # NEW TAI LUE DIGIT NINE +1A89 ; [.1FA1.0020.0002] # TAI THAM HORA DIGIT NINE +1A99 ; [.1FA1.0020.0002] # TAI THAM THAM DIGIT NINE +1B59 ; [.1FA1.0020.0002] # BALINESE DIGIT NINE +1BB9 ; [.1FA1.0020.0002] # SUNDANESE DIGIT NINE +1C49 ; [.1FA1.0020.0002] # LEPCHA DIGIT NINE +1C59 ; [.1FA1.0020.0002] # OL CHIKI DIGIT NINE +3029 ; [.1FA1.0020.0002] # HANGZHOU NUMERAL NINE +A629 ; [.1FA1.0020.0002] # VAI DIGIT NINE +A8D9 ; [.1FA1.0020.0002] # SAURASHTRA DIGIT NINE +A909 ; [.1FA1.0020.0002] # KAYAH LI DIGIT NINE +A9D9 ; [.1FA1.0020.0002] # JAVANESE DIGIT NINE +A9F9 ; [.1FA1.0020.0002] # MYANMAR TAI LAING DIGIT NINE +AA59 ; [.1FA1.0020.0002] # CHAM DIGIT NINE +ABF9 ; [.1FA1.0020.0002] # MEETEI MAYEK DIGIT NINE +1010F ; [.1FA1.0020.0002] # AEGEAN NUMBER NINE +102E9 ; [.1FA1.0020.0002] # COPTIC EPACT DIGIT NINE +104A9 ; [.1FA1.0020.0002] # OSMANYA DIGIT NINE +109C8 ; [.1FA1.0020.0002] # MEROITIC CURSIVE NUMBER NINE +10D39 ; [.1FA1.0020.0002] # HANIFI ROHINGYA DIGIT NINE +10E68 ; [.1FA1.0020.0002] # RUMI DIGIT NINE +1105A ; [.1FA1.0020.0002] # BRAHMI NUMBER NINE +1106F ; [.1FA1.0020.0002] # BRAHMI DIGIT NINE +110F9 ; [.1FA1.0020.0002] # SORA SOMPENG DIGIT NINE +1113F ; [.1FA1.0020.0002] # CHAKMA DIGIT NINE +111D9 ; [.1FA1.0020.0002] # SHARADA DIGIT NINE +111E9 ; [.1FA1.0020.0002] # SINHALA ARCHAIC DIGIT NINE +112F9 ; [.1FA1.0020.0002] # KHUDAWADI DIGIT NINE +11459 ; [.1FA1.0020.0002] # NEWA DIGIT NINE +114D9 ; [.1FA1.0020.0002] # TIRHUTA DIGIT NINE +11659 ; [.1FA1.0020.0002] # MODI DIGIT NINE +116C9 ; [.1FA1.0020.0002] # TAKRI DIGIT NINE +11739 ; [.1FA1.0020.0002] # AHOM DIGIT NINE +118E9 ; [.1FA1.0020.0002] # WARANG CITI DIGIT NINE +11959 ; [.1FA1.0020.0002] # DIVES AKURU DIGIT NINE +11C59 ; [.1FA1.0020.0002] # BHAIKSUKI DIGIT NINE +11C62 ; [.1FA1.0020.0002] # BHAIKSUKI NUMBER NINE +11D59 ; [.1FA1.0020.0002] # MASARAM GONDI DIGIT NINE +11DA9 ; [.1FA1.0020.0002] # GUNJALA GONDI DIGIT NINE +12407 ; [.1FA1.0020.0002] # CUNEIFORM NUMERIC SIGN NINE ASH +1240E ; [.1FA1.0020.0002] # CUNEIFORM NUMERIC SIGN NINE DISH +12414 ; [.1FA1.0020.0002] # CUNEIFORM NUMERIC SIGN NINE U +1241D ; [.1FA1.0020.0002] # CUNEIFORM NUMERIC SIGN NINE GESH2 +1242B ; [.1FA1.0020.0002] # CUNEIFORM NUMERIC SIGN NINE SHAR2 +12446 ; [.1FA1.0020.0002] # CUNEIFORM NUMERIC SIGN NINE VARIANT FORM ILIMMU +12447 ; [.1FA1.0020.0002] # CUNEIFORM NUMERIC SIGN NINE VARIANT FORM ILIMMU3 +12448 ; [.1FA1.0020.0002] # CUNEIFORM NUMERIC SIGN NINE VARIANT FORM ILIMMU4 +12449 ; [.1FA1.0020.0002] # CUNEIFORM NUMERIC SIGN NINE VARIANT FORM ILIMMU A +1246E ; [.1FA1.0020.0002] # CUNEIFORM NUMERIC SIGN NINE U VARIANT FORM +16A69 ; [.1FA1.0020.0002] # MRO DIGIT NINE +16B59 ; [.1FA1.0020.0002] # PAHAWH HMONG DIGIT NINE +16E89 ; [.1FA1.0020.0002] # MEDEFAIDRIN DIGIT NINE +1D2E9 ; [.1FA1.0020.0002] # MAYAN NUMERAL NINE +1D368 ; [.1FA1.0020.0002] # COUNTING ROD UNIT DIGIT NINE +1E149 ; [.1FA1.0020.0002] # NYIAKENG PUACHUE HMONG DIGIT NINE +1E2F9 ; [.1FA1.0020.0002] # WANCHO DIGIT NINE +1E8CF ; [.1FA1.0020.0002] # MENDE KIKAKUI DIGIT NINE +1E959 ; [.1FA1.0020.0002] # ADLAM DIGIT NINE +1EC79 ; [.1FA1.0020.0002] # INDIC SIYAQ NUMBER NINE +1ECAB ; [.1FA1.0020.0002] # INDIC SIYAQ NUMBER PREFIXED NINE +1ED09 ; [.1FA1.0020.0002] # OTTOMAN SIYAQ NUMBER NINE +FF19 ; [.1FA1.0020.0003] # FULLWIDTH DIGIT NINE +0F32 ; [.1FA1.0020.0004] # TIBETAN DIGIT HALF NINE +247C ; [*0328.0020.0004][.1FA1.0020.0004][*0329.0020.0004] # PARENTHESIZED DIGIT NINE +2490 ; [.1FA1.0020.0004][*027E.0020.0004] # DIGIT NINE FULL STOP +1F10A ; [.1FA1.0020.0004][*0223.0020.0004] # DIGIT NINE COMMA +1D7D7 ; [.1FA1.0020.0005] # MATHEMATICAL BOLD DIGIT NINE +1D7E1 ; [.1FA1.0020.0005] # MATHEMATICAL DOUBLE-STRUCK DIGIT NINE +1D7EB ; [.1FA1.0020.0005] # MATHEMATICAL SANS-SERIF DIGIT NINE +1D7F5 ; [.1FA1.0020.0005] # MATHEMATICAL SANS-SERIF BOLD DIGIT NINE +1D7FF ; [.1FA1.0020.0005] # MATHEMATICAL MONOSPACE DIGIT NINE +1FBF9 ; [.1FA1.0020.0005] # SEGMENTED DIGIT NINE +2468 ; [.1FA1.0020.0006] # CIRCLED DIGIT NINE +24FD ; [.1FA1.0020.0006] # DOUBLE CIRCLED DIGIT NINE +277E ; [.1FA1.0020.0006] # DINGBAT NEGATIVE CIRCLED DIGIT NINE +2788 ; [.1FA1.0020.0006] # DINGBAT CIRCLED SANS-SERIF DIGIT NINE +2792 ; [.1FA1.0020.0006] # DINGBAT NEGATIVE CIRCLED SANS-SERIF DIGIT NINE +2079 ; [.1FA1.0020.0014] # SUPERSCRIPT NINE +2089 ; [.1FA1.0020.0015] # SUBSCRIPT NINE +1ED36 ; [.1FA1.0020.0004][.0000.0118.0004] # OTTOMAN SIYAQ ALTERNATE NUMBER NINE +33E8 ; [.1FA1.0020.0004][.FB40.0020.0004][.E5E5.0000.0000] # IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY NINE +32C8 ; [.1FA1.0020.0004][.FB40.0020.0004][.E708.0000.0000] # IDEOGRAPHIC TELEGRAPH SYMBOL FOR SEPTEMBER +3361 ; [.1FA1.0020.0004][.FB40.0020.0004][.F0B9.0000.0000] # IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR NINE +0061 ; [.1FA2.0020.0002] # LATIN SMALL LETTER A +FF41 ; [.1FA2.0020.0003] # FULLWIDTH LATIN SMALL LETTER A +0363 ; [.1FA2.0020.0004] # COMBINING LATIN SMALL LETTER A +249C ; [*0328.0020.0004][.1FA2.0020.0004][*0329.0020.0004] # PARENTHESIZED LATIN SMALL LETTER A +1D41A ; [.1FA2.0020.0005] # MATHEMATICAL BOLD SMALL A +1D44E ; [.1FA2.0020.0005] # MATHEMATICAL ITALIC SMALL A +1D482 ; [.1FA2.0020.0005] # MATHEMATICAL BOLD ITALIC SMALL A +1D4B6 ; [.1FA2.0020.0005] # MATHEMATICAL SCRIPT SMALL A +1D4EA ; [.1FA2.0020.0005] # MATHEMATICAL BOLD SCRIPT SMALL A +1D51E ; [.1FA2.0020.0005] # MATHEMATICAL FRAKTUR SMALL A +1D552 ; [.1FA2.0020.0005] # MATHEMATICAL DOUBLE-STRUCK SMALL A +1D586 ; [.1FA2.0020.0005] # MATHEMATICAL BOLD FRAKTUR SMALL A +1D5BA ; [.1FA2.0020.0005] # MATHEMATICAL SANS-SERIF SMALL A +1D5EE ; [.1FA2.0020.0005] # MATHEMATICAL SANS-SERIF BOLD SMALL A +1D622 ; [.1FA2.0020.0005] # MATHEMATICAL SANS-SERIF ITALIC SMALL A +1D656 ; [.1FA2.0020.0005] # MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL A +1D68A ; [.1FA2.0020.0005] # MATHEMATICAL MONOSPACE SMALL A +24D0 ; [.1FA2.0020.0006] # CIRCLED LATIN SMALL LETTER A +0041 ; [.1FA2.0020.0008] # LATIN CAPITAL LETTER A +FF21 ; [.1FA2.0020.0009] # FULLWIDTH LATIN CAPITAL LETTER A +1F110 ; [*0328.0020.0004][.1FA2.0020.000A][*0329.0020.0004] # PARENTHESIZED LATIN CAPITAL LETTER A +1D400 ; [.1FA2.0020.000B] # MATHEMATICAL BOLD CAPITAL A +1D434 ; [.1FA2.0020.000B] # MATHEMATICAL ITALIC CAPITAL A +1D468 ; [.1FA2.0020.000B] # MATHEMATICAL BOLD ITALIC CAPITAL A +1D49C ; [.1FA2.0020.000B] # MATHEMATICAL SCRIPT CAPITAL A +1D4D0 ; [.1FA2.0020.000B] # MATHEMATICAL BOLD SCRIPT CAPITAL A +1D504 ; [.1FA2.0020.000B] # MATHEMATICAL FRAKTUR CAPITAL A +1D538 ; [.1FA2.0020.000B] # MATHEMATICAL DOUBLE-STRUCK CAPITAL A +1D56C ; [.1FA2.0020.000B] # MATHEMATICAL BOLD FRAKTUR CAPITAL A +1D5A0 ; [.1FA2.0020.000B] # MATHEMATICAL SANS-SERIF CAPITAL A +1D5D4 ; [.1FA2.0020.000B] # MATHEMATICAL SANS-SERIF BOLD CAPITAL A +1D608 ; [.1FA2.0020.000B] # MATHEMATICAL SANS-SERIF ITALIC CAPITAL A +1D63C ; [.1FA2.0020.000B] # MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL A +1D670 ; [.1FA2.0020.000B] # MATHEMATICAL MONOSPACE CAPITAL A +24B6 ; [.1FA2.0020.000C] # CIRCLED LATIN CAPITAL LETTER A +1F150 ; [.1FA2.0020.000C] # NEGATIVE CIRCLED LATIN CAPITAL LETTER A +00AA ; [.1FA2.0020.0014] # FEMININE ORDINAL INDICATOR +1D43 ; [.1FA2.0020.0014] # MODIFIER LETTER SMALL A +2090 ; [.1FA2.0020.0015] # LATIN SUBSCRIPT SMALL LETTER A +1D2C ; [.1FA2.0020.001D] # MODIFIER LETTER CAPITAL A +1F130 ; [.1FA2.0020.001D] # SQUARED LATIN CAPITAL LETTER A +1F170 ; [.1FA2.0020.001D] # NEGATIVE SQUARED LATIN CAPITAL LETTER A +00E1 ; [.1FA2.0020.0002][.0000.0024.0002] # LATIN SMALL LETTER A WITH ACUTE +00C1 ; [.1FA2.0020.0008][.0000.0024.0002] # LATIN CAPITAL LETTER A WITH ACUTE +00E0 ; [.1FA2.0020.0002][.0000.0025.0002] # LATIN SMALL LETTER A WITH GRAVE +00C0 ; [.1FA2.0020.0008][.0000.0025.0002] # LATIN CAPITAL LETTER A WITH GRAVE +0103 ; [.1FA2.0020.0002][.0000.0026.0002] # LATIN SMALL LETTER A WITH BREVE +0102 ; [.1FA2.0020.0008][.0000.0026.0002] # LATIN CAPITAL LETTER A WITH BREVE +1EAF ; [.1FA2.0020.0002][.0000.0026.0002][.0000.0024.0002] # LATIN SMALL LETTER A WITH BREVE AND ACUTE +1EAE ; [.1FA2.0020.0008][.0000.0026.0002][.0000.0024.0002] # LATIN CAPITAL LETTER A WITH BREVE AND ACUTE +1EB1 ; [.1FA2.0020.0002][.0000.0026.0002][.0000.0025.0002] # LATIN SMALL LETTER A WITH BREVE AND GRAVE +1EB0 ; [.1FA2.0020.0008][.0000.0026.0002][.0000.0025.0002] # LATIN CAPITAL LETTER A WITH BREVE AND GRAVE +1EB5 ; [.1FA2.0020.0002][.0000.0026.0002][.0000.002D.0002] # LATIN SMALL LETTER A WITH BREVE AND TILDE +1EB4 ; [.1FA2.0020.0008][.0000.0026.0002][.0000.002D.0002] # LATIN CAPITAL LETTER A WITH BREVE AND TILDE +1EB3 ; [.1FA2.0020.0002][.0000.0026.0002][.0000.003B.0002] # LATIN SMALL LETTER A WITH BREVE AND HOOK ABOVE +1EB2 ; [.1FA2.0020.0008][.0000.0026.0002][.0000.003B.0002] # LATIN CAPITAL LETTER A WITH BREVE AND HOOK ABOVE +00E2 ; [.1FA2.0020.0002][.0000.0027.0002] # LATIN SMALL LETTER A WITH CIRCUMFLEX +00C2 ; [.1FA2.0020.0008][.0000.0027.0002] # LATIN CAPITAL LETTER A WITH CIRCUMFLEX +1EA5 ; [.1FA2.0020.0002][.0000.0027.0002][.0000.0024.0002] # LATIN SMALL LETTER A WITH CIRCUMFLEX AND ACUTE +1EA4 ; [.1FA2.0020.0008][.0000.0027.0002][.0000.0024.0002] # LATIN CAPITAL LETTER A WITH CIRCUMFLEX AND ACUTE +1EA7 ; [.1FA2.0020.0002][.0000.0027.0002][.0000.0025.0002] # LATIN SMALL LETTER A WITH CIRCUMFLEX AND GRAVE +1EA6 ; [.1FA2.0020.0008][.0000.0027.0002][.0000.0025.0002] # LATIN CAPITAL LETTER A WITH CIRCUMFLEX AND GRAVE +1EAB ; [.1FA2.0020.0002][.0000.0027.0002][.0000.002D.0002] # LATIN SMALL LETTER A WITH CIRCUMFLEX AND TILDE +1EAA ; [.1FA2.0020.0008][.0000.0027.0002][.0000.002D.0002] # LATIN CAPITAL LETTER A WITH CIRCUMFLEX AND TILDE +1EA9 ; [.1FA2.0020.0002][.0000.0027.0002][.0000.003B.0002] # LATIN SMALL LETTER A WITH CIRCUMFLEX AND HOOK ABOVE +1EA8 ; [.1FA2.0020.0008][.0000.0027.0002][.0000.003B.0002] # LATIN CAPITAL LETTER A WITH CIRCUMFLEX AND HOOK ABOVE +01CE ; [.1FA2.0020.0002][.0000.0028.0002] # LATIN SMALL LETTER A WITH CARON +01CD ; [.1FA2.0020.0008][.0000.0028.0002] # LATIN CAPITAL LETTER A WITH CARON +00E5 ; [.1FA2.0020.0002][.0000.0029.0002] # LATIN SMALL LETTER A WITH RING ABOVE +00C5 ; [.1FA2.0020.0008][.0000.0029.0002] # LATIN CAPITAL LETTER A WITH RING ABOVE +212B ; [.1FA2.0020.0008][.0000.0029.0002] # ANGSTROM SIGN +01FB ; [.1FA2.0020.0002][.0000.0029.0002][.0000.0024.0002] # LATIN SMALL LETTER A WITH RING ABOVE AND ACUTE +01FA ; [.1FA2.0020.0008][.0000.0029.0002][.0000.0024.0002] # LATIN CAPITAL LETTER A WITH RING ABOVE AND ACUTE +00E4 ; [.1FA2.0020.0002][.0000.002B.0002] # LATIN SMALL LETTER A WITH DIAERESIS +1DF2 ; [.1FA2.0020.0004][.0000.002B.0004] # COMBINING LATIN SMALL LETTER A WITH DIAERESIS +A79B ; [.1FA2.0020.0004][.0000.002B.0004] # LATIN SMALL LETTER VOLAPUK AE +00C4 ; [.1FA2.0020.0008][.0000.002B.0002] # LATIN CAPITAL LETTER A WITH DIAERESIS +A79A ; [.1FA2.0020.000A][.0000.002B.0004] # LATIN CAPITAL LETTER VOLAPUK AE +01DF ; [.1FA2.0020.0002][.0000.002B.0002][.0000.0032.0002] # LATIN SMALL LETTER A WITH DIAERESIS AND MACRON +01DE ; [.1FA2.0020.0008][.0000.002B.0002][.0000.0032.0002] # LATIN CAPITAL LETTER A WITH DIAERESIS AND MACRON +00E3 ; [.1FA2.0020.0002][.0000.002D.0002] # LATIN SMALL LETTER A WITH TILDE +00C3 ; [.1FA2.0020.0008][.0000.002D.0002] # LATIN CAPITAL LETTER A WITH TILDE +0227 ; [.1FA2.0020.0002][.0000.002E.0002] # LATIN SMALL LETTER A WITH DOT ABOVE +0226 ; [.1FA2.0020.0008][.0000.002E.0002] # LATIN CAPITAL LETTER A WITH DOT ABOVE +01E1 ; [.1FA2.0020.0002][.0000.002E.0002][.0000.0032.0002] # LATIN SMALL LETTER A WITH DOT ABOVE AND MACRON +01E0 ; [.1FA2.0020.0008][.0000.002E.0002][.0000.0032.0002] # LATIN CAPITAL LETTER A WITH DOT ABOVE AND MACRON +0105 ; [.1FA2.0020.0002][.0000.0031.0002] # LATIN SMALL LETTER A WITH OGONEK +0104 ; [.1FA2.0020.0008][.0000.0031.0002] # LATIN CAPITAL LETTER A WITH OGONEK +0101 ; [.1FA2.0020.0002][.0000.0032.0002] # LATIN SMALL LETTER A WITH MACRON +0100 ; [.1FA2.0020.0008][.0000.0032.0002] # LATIN CAPITAL LETTER A WITH MACRON +1EA3 ; [.1FA2.0020.0002][.0000.003B.0002] # LATIN SMALL LETTER A WITH HOOK ABOVE +1EA2 ; [.1FA2.0020.0008][.0000.003B.0002] # LATIN CAPITAL LETTER A WITH HOOK ABOVE +0201 ; [.1FA2.0020.0002][.0000.003C.0002] # LATIN SMALL LETTER A WITH DOUBLE GRAVE +0200 ; [.1FA2.0020.0008][.0000.003C.0002] # LATIN CAPITAL LETTER A WITH DOUBLE GRAVE +0203 ; [.1FA2.0020.0002][.0000.003E.0002] # LATIN SMALL LETTER A WITH INVERTED BREVE +0202 ; [.1FA2.0020.0008][.0000.003E.0002] # LATIN CAPITAL LETTER A WITH INVERTED BREVE +1EA1 ; [.1FA2.0020.0002][.0000.0042.0002] # LATIN SMALL LETTER A WITH DOT BELOW +1EA0 ; [.1FA2.0020.0008][.0000.0042.0002] # LATIN CAPITAL LETTER A WITH DOT BELOW +1EB7 ; [.1FA2.0020.0002][.0000.0042.0002][.0000.0026.0002] # LATIN SMALL LETTER A WITH BREVE AND DOT BELOW +1EB6 ; [.1FA2.0020.0008][.0000.0042.0002][.0000.0026.0002] # LATIN CAPITAL LETTER A WITH BREVE AND DOT BELOW +1EAD ; [.1FA2.0020.0002][.0000.0042.0002][.0000.0027.0002] # LATIN SMALL LETTER A WITH CIRCUMFLEX AND DOT BELOW +1EAC ; [.1FA2.0020.0008][.0000.0042.0002][.0000.0027.0002] # LATIN CAPITAL LETTER A WITH CIRCUMFLEX AND DOT BELOW +1E01 ; [.1FA2.0020.0002][.0000.0044.0002] # LATIN SMALL LETTER A WITH RING BELOW +1E00 ; [.1FA2.0020.0008][.0000.0044.0002] # LATIN CAPITAL LETTER A WITH RING BELOW +1DD3 ; [.1FA2.0020.0004][.0000.0118.0004] # COMBINING LATIN SMALL LETTER FLATTENED OPEN A ABOVE +A733 ; [.1FA2.0020.0004][.1FA2.0020.0004] # LATIN SMALL LETTER AA +A732 ; [.1FA2.0020.000A][.1FA2.0020.000A] # LATIN CAPITAL LETTER AA +1F18E ; [.1FA2.0020.001D][.1FBC.0020.001D] # NEGATIVE SQUARED AB +2100 ; [.1FA2.0020.0004][*03A6.0020.0004][.1FD6.0020.0004] # ACCOUNT OF +00E6 ; [.1FA2.0020.0004][.0000.0118.0004][.2007.0020.0004] # LATIN SMALL LETTER AE +1DD4 ; [.1FA2.0020.0004][.0000.0118.0004][.2007.0020.0004] # COMBINING LATIN SMALL LETTER AE +00C6 ; [.1FA2.0020.000A][.0000.0118.0004][.2007.0020.000A] # LATIN CAPITAL LETTER AE +1D2D ; [.1FA2.0020.0014][.0000.0118.0014][.2007.0020.0014] # MODIFIER LETTER CAPITAL AE +01FD ; [.1FA2.0020.0004][.0000.0118.0004][.2007.0020.0004][.0000.0024.0002] # LATIN SMALL LETTER AE WITH ACUTE +01FC ; [.1FA2.0020.000A][.0000.0118.0004][.2007.0020.000A][.0000.0024.0002] # LATIN CAPITAL LETTER AE WITH ACUTE +01E3 ; [.1FA2.0020.0004][.0000.0118.0004][.2007.0020.0004][.0000.0032.0002] # LATIN SMALL LETTER AE WITH MACRON +01E2 ; [.1FA2.0020.000A][.0000.0118.0004][.2007.0020.000A][.0000.0032.0002] # LATIN CAPITAL LETTER AE WITH MACRON +33C2 ; [.1FA2.0020.001C][*027E.0020.001C][.2109.0020.001C][*027E.0020.001C] # SQUARE AM +33DF ; [.1FA2.0020.001D][*0675.0020.001C][.2109.0020.001C] # SQUARE A OVER M +1DD5 ; [.1FA2.0020.0004][.213C.0020.0004] # COMBINING LATIN SMALL LETTER AO +A735 ; [.1FA2.0020.0004][.213C.0020.0004] # LATIN SMALL LETTER AO +A734 ; [.1FA2.0020.000A][.213C.0020.000A] # LATIN CAPITAL LETTER AO +2101 ; [.1FA2.0020.0004][*03A6.0020.0004][.21D2.0020.0004] # ADDRESSED TO THE SUBJECT +214D ; [.1FA2.0020.000A][*03A6.0020.0004][.21D2.0020.000A] # AKTIESELSKAB +A737 ; [.1FA2.0020.0004][.2217.0020.0004] # LATIN SMALL LETTER AU +A736 ; [.1FA2.0020.000A][.2217.0020.000A] # LATIN CAPITAL LETTER AU +3373 ; [.1FA2.0020.001D][.2217.0020.001D] # SQUARE AU +1DD6 ; [.1FA2.0020.0004][.2247.0020.0004] # COMBINING LATIN SMALL LETTER AV +A739 ; [.1FA2.0020.0004][.2247.0020.0004] # LATIN SMALL LETTER AV +A738 ; [.1FA2.0020.000A][.2247.0020.000A] # LATIN CAPITAL LETTER AV +A73B ; [.1FA2.0020.0004][.0000.0118.0004][.2247.0020.0004] # LATIN SMALL LETTER AV WITH HORIZONTAL BAR +A73A ; [.1FA2.0020.000A][.0000.0118.0004][.2247.0020.000A] # LATIN CAPITAL LETTER AV WITH HORIZONTAL BAR +A73D ; [.1FA2.0020.0004][.2270.0020.0004] # LATIN SMALL LETTER AY +A73C ; [.1FA2.0020.000A][.2270.0020.000A] # LATIN CAPITAL LETTER AY +1E9A ; [.1FA2.0020.0004][.22E5.0020.0004] # LATIN SMALL LETTER A WITH RIGHT HALF RING +1D00 ; [.1FA6.0020.0002] # LATIN LETTER SMALL CAPITAL A +2C65 ; [.1FA7.0020.0002] # LATIN SMALL LETTER A WITH STROKE +023A ; [.1FA7.0020.0008] # LATIN CAPITAL LETTER A WITH STROKE +1D8F ; [.1FA8.0020.0002] # LATIN SMALL LETTER A WITH RETROFLEX HOOK +A7BB ; [.1FA9.0020.0002] # LATIN SMALL LETTER GLOTTAL A +A7BA ; [.1FA9.0020.0008] # LATIN CAPITAL LETTER GLOTTAL A +1D01 ; [.1FAA.0020.0002] # LATIN LETTER SMALL CAPITAL AE +1D02 ; [.1FAB.0020.0002] # LATIN SMALL LETTER TURNED AE +1D46 ; [.1FAB.0020.0014] # MODIFIER LETTER SMALL TURNED AE +AB31 ; [.1FAC.0020.0002] # LATIN SMALL LETTER A REVERSED-SCHWA +0250 ; [.1FAD.0020.0002] # LATIN SMALL LETTER TURNED A +2C6F ; [.1FAD.0020.0008] # LATIN CAPITAL LETTER TURNED A +1D44 ; [.1FAD.0020.0014] # MODIFIER LETTER SMALL TURNED A +0251 ; [.1FB1.0020.0002] # LATIN SMALL LETTER ALPHA +1DE7 ; [.1FB1.0020.0004] # COMBINING LATIN SMALL LETTER ALPHA +2C6D ; [.1FB1.0020.0008] # LATIN CAPITAL LETTER ALPHA +1D45 ; [.1FB1.0020.0014] # MODIFIER LETTER SMALL ALPHA +AB30 ; [.1FB5.0020.0002] # LATIN SMALL LETTER BARRED ALPHA +1D90 ; [.1FB6.0020.0002] # LATIN SMALL LETTER ALPHA WITH RETROFLEX HOOK +0252 ; [.1FB7.0020.0002] # LATIN SMALL LETTER TURNED ALPHA +2C70 ; [.1FB7.0020.0008] # LATIN CAPITAL LETTER TURNED ALPHA +1D9B ; [.1FB7.0020.0014] # MODIFIER LETTER SMALL TURNED ALPHA +AB64 ; [.1FBB.0020.0002] # LATIN SMALL LETTER INVERTED ALPHA +0062 ; [.1FBC.0020.0002] # LATIN SMALL LETTER B +FF42 ; [.1FBC.0020.0003] # FULLWIDTH LATIN SMALL LETTER B +1DE8 ; [.1FBC.0020.0004] # COMBINING LATIN SMALL LETTER B +249D ; [*0328.0020.0004][.1FBC.0020.0004][*0329.0020.0004] # PARENTHESIZED LATIN SMALL LETTER B +1D41B ; [.1FBC.0020.0005] # MATHEMATICAL BOLD SMALL B +1D44F ; [.1FBC.0020.0005] # MATHEMATICAL ITALIC SMALL B +1D483 ; [.1FBC.0020.0005] # MATHEMATICAL BOLD ITALIC SMALL B +1D4B7 ; [.1FBC.0020.0005] # MATHEMATICAL SCRIPT SMALL B +1D4EB ; [.1FBC.0020.0005] # MATHEMATICAL BOLD SCRIPT SMALL B +1D51F ; [.1FBC.0020.0005] # MATHEMATICAL FRAKTUR SMALL B +1D553 ; [.1FBC.0020.0005] # MATHEMATICAL DOUBLE-STRUCK SMALL B +1D587 ; [.1FBC.0020.0005] # MATHEMATICAL BOLD FRAKTUR SMALL B +1D5BB ; [.1FBC.0020.0005] # MATHEMATICAL SANS-SERIF SMALL B +1D5EF ; [.1FBC.0020.0005] # MATHEMATICAL SANS-SERIF BOLD SMALL B +1D623 ; [.1FBC.0020.0005] # MATHEMATICAL SANS-SERIF ITALIC SMALL B +1D657 ; [.1FBC.0020.0005] # MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL B +1D68B ; [.1FBC.0020.0005] # MATHEMATICAL MONOSPACE SMALL B +24D1 ; [.1FBC.0020.0006] # CIRCLED LATIN SMALL LETTER B +0042 ; [.1FBC.0020.0008] # LATIN CAPITAL LETTER B +FF22 ; [.1FBC.0020.0009] # FULLWIDTH LATIN CAPITAL LETTER B +1F111 ; [*0328.0020.0004][.1FBC.0020.000A][*0329.0020.0004] # PARENTHESIZED LATIN CAPITAL LETTER B +212C ; [.1FBC.0020.000B] # SCRIPT CAPITAL B +1D401 ; [.1FBC.0020.000B] # MATHEMATICAL BOLD CAPITAL B +1D435 ; [.1FBC.0020.000B] # MATHEMATICAL ITALIC CAPITAL B +1D469 ; [.1FBC.0020.000B] # MATHEMATICAL BOLD ITALIC CAPITAL B +1D4D1 ; [.1FBC.0020.000B] # MATHEMATICAL BOLD SCRIPT CAPITAL B +1D505 ; [.1FBC.0020.000B] # MATHEMATICAL FRAKTUR CAPITAL B +1D539 ; [.1FBC.0020.000B] # MATHEMATICAL DOUBLE-STRUCK CAPITAL B +1D56D ; [.1FBC.0020.000B] # MATHEMATICAL BOLD FRAKTUR CAPITAL B +1D5A1 ; [.1FBC.0020.000B] # MATHEMATICAL SANS-SERIF CAPITAL B +1D5D5 ; [.1FBC.0020.000B] # MATHEMATICAL SANS-SERIF BOLD CAPITAL B +1D609 ; [.1FBC.0020.000B] # MATHEMATICAL SANS-SERIF ITALIC CAPITAL B +1D63D ; [.1FBC.0020.000B] # MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL B +1D671 ; [.1FBC.0020.000B] # MATHEMATICAL MONOSPACE CAPITAL B +24B7 ; [.1FBC.0020.000C] # CIRCLED LATIN CAPITAL LETTER B +1F151 ; [.1FBC.0020.000C] # NEGATIVE CIRCLED LATIN CAPITAL LETTER B +1D47 ; [.1FBC.0020.0014] # MODIFIER LETTER SMALL B +1D2E ; [.1FBC.0020.001D] # MODIFIER LETTER CAPITAL B +1F131 ; [.1FBC.0020.001D] # SQUARED LATIN CAPITAL LETTER B +1F171 ; [.1FBC.0020.001D] # NEGATIVE SQUARED LATIN CAPITAL LETTER B +1E03 ; [.1FBC.0020.0002][.0000.002E.0002] # LATIN SMALL LETTER B WITH DOT ABOVE +1E02 ; [.1FBC.0020.0008][.0000.002E.0002] # LATIN CAPITAL LETTER B WITH DOT ABOVE +1E05 ; [.1FBC.0020.0002][.0000.0042.0002] # LATIN SMALL LETTER B WITH DOT BELOW +1E04 ; [.1FBC.0020.0008][.0000.0042.0002] # LATIN CAPITAL LETTER B WITH DOT BELOW +1E07 ; [.1FBC.0020.0002][.0000.0049.0002] # LATIN SMALL LETTER B WITH LINE BELOW +1E06 ; [.1FBC.0020.0008][.0000.0049.0002] # LATIN CAPITAL LETTER B WITH LINE BELOW +3374 ; [.1FBC.0020.001C][.1FA2.0020.001C][.2193.0020.001C] # SQUARE BAR +33C3 ; [.1FBC.0020.001D][.2180.0020.001C] # SQUARE BQ +0299 ; [.1FC0.0020.0002] # LATIN LETTER SMALL CAPITAL B +0180 ; [.1FC4.0020.0002] # LATIN SMALL LETTER B WITH STROKE +0243 ; [.1FC4.0020.0008] # LATIN CAPITAL LETTER B WITH STROKE +1D2F ; [.1FC8.0020.0002] # MODIFIER LETTER CAPITAL BARRED B +1D03 ; [.1FC9.0020.0002] # LATIN LETTER SMALL CAPITAL BARRED B +1D6C ; [.1FCA.0020.0002] # LATIN SMALL LETTER B WITH MIDDLE TILDE +A797 ; [.1FCB.0020.0002] # LATIN SMALL LETTER B WITH FLOURISH +A796 ; [.1FCB.0020.0008] # LATIN CAPITAL LETTER B WITH FLOURISH +1D80 ; [.1FCC.0020.0002] # LATIN SMALL LETTER B WITH PALATAL HOOK +0253 ; [.1FCD.0020.0002] # LATIN SMALL LETTER B WITH HOOK +0181 ; [.1FCD.0020.0008] # LATIN CAPITAL LETTER B WITH HOOK +0183 ; [.1FD1.0020.0002] # LATIN SMALL LETTER B WITH TOPBAR +0182 ; [.1FD1.0020.0008] # LATIN CAPITAL LETTER B WITH TOPBAR +A7B5 ; [.1FD5.0020.0002] # LATIN SMALL LETTER BETA +1DE9 ; [.1FD5.0020.0004] # COMBINING LATIN SMALL LETTER BETA +A7B4 ; [.1FD5.0020.0008] # LATIN CAPITAL LETTER BETA +0063 ; [.1FD6.0020.0002] # LATIN SMALL LETTER C +FF43 ; [.1FD6.0020.0003] # FULLWIDTH LATIN SMALL LETTER C +0368 ; [.1FD6.0020.0004] # COMBINING LATIN SMALL LETTER C +217D ; [.1FD6.0020.0004] # SMALL ROMAN NUMERAL ONE HUNDRED +249E ; [*0328.0020.0004][.1FD6.0020.0004][*0329.0020.0004] # PARENTHESIZED LATIN SMALL LETTER C +1D41C ; [.1FD6.0020.0005] # MATHEMATICAL BOLD SMALL C +1D450 ; [.1FD6.0020.0005] # MATHEMATICAL ITALIC SMALL C +1D484 ; [.1FD6.0020.0005] # MATHEMATICAL BOLD ITALIC SMALL C +1D4B8 ; [.1FD6.0020.0005] # MATHEMATICAL SCRIPT SMALL C +1D4EC ; [.1FD6.0020.0005] # MATHEMATICAL BOLD SCRIPT SMALL C +1D520 ; [.1FD6.0020.0005] # MATHEMATICAL FRAKTUR SMALL C +1D554 ; [.1FD6.0020.0005] # MATHEMATICAL DOUBLE-STRUCK SMALL C +1D588 ; [.1FD6.0020.0005] # MATHEMATICAL BOLD FRAKTUR SMALL C +1D5BC ; [.1FD6.0020.0005] # MATHEMATICAL SANS-SERIF SMALL C +1D5F0 ; [.1FD6.0020.0005] # MATHEMATICAL SANS-SERIF BOLD SMALL C +1D624 ; [.1FD6.0020.0005] # MATHEMATICAL SANS-SERIF ITALIC SMALL C +1D658 ; [.1FD6.0020.0005] # MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL C +1D68C ; [.1FD6.0020.0005] # MATHEMATICAL MONOSPACE SMALL C +24D2 ; [.1FD6.0020.0006] # CIRCLED LATIN SMALL LETTER C +0043 ; [.1FD6.0020.0008] # LATIN CAPITAL LETTER C +FF23 ; [.1FD6.0020.0009] # FULLWIDTH LATIN CAPITAL LETTER C +2103 ; [*052A.0020.0004][.1FD6.0020.000A] # DEGREE CELSIUS +216D ; [.1FD6.0020.000A] # ROMAN NUMERAL ONE HUNDRED +1F112 ; [*0328.0020.0004][.1FD6.0020.000A][*0329.0020.0004] # PARENTHESIZED LATIN CAPITAL LETTER C +2102 ; [.1FD6.0020.000B] # DOUBLE-STRUCK CAPITAL C +212D ; [.1FD6.0020.000B] # BLACK-LETTER CAPITAL C +1D402 ; [.1FD6.0020.000B] # MATHEMATICAL BOLD CAPITAL C +1D436 ; [.1FD6.0020.000B] # MATHEMATICAL ITALIC CAPITAL C +1D46A ; [.1FD6.0020.000B] # MATHEMATICAL BOLD ITALIC CAPITAL C +1D49E ; [.1FD6.0020.000B] # MATHEMATICAL SCRIPT CAPITAL C +1D4D2 ; [.1FD6.0020.000B] # MATHEMATICAL BOLD SCRIPT CAPITAL C +1D56E ; [.1FD6.0020.000B] # MATHEMATICAL BOLD FRAKTUR CAPITAL C +1D5A2 ; [.1FD6.0020.000B] # MATHEMATICAL SANS-SERIF CAPITAL C +1D5D6 ; [.1FD6.0020.000B] # MATHEMATICAL SANS-SERIF BOLD CAPITAL C +1D60A ; [.1FD6.0020.000B] # MATHEMATICAL SANS-SERIF ITALIC CAPITAL C +1D63E ; [.1FD6.0020.000B] # MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL C +1D672 ; [.1FD6.0020.000B] # MATHEMATICAL MONOSPACE CAPITAL C +24B8 ; [.1FD6.0020.000C] # CIRCLED LATIN CAPITAL LETTER C +1F12B ; [.1FD6.0020.000C] # CIRCLED ITALIC LATIN CAPITAL LETTER C +1F152 ; [.1FD6.0020.000C] # NEGATIVE CIRCLED LATIN CAPITAL LETTER C +1D9C ; [.1FD6.0020.0014] # MODIFIER LETTER SMALL C +1F132 ; [.1FD6.0020.001D] # SQUARED LATIN CAPITAL LETTER C +1F172 ; [.1FD6.0020.001D] # NEGATIVE SQUARED LATIN CAPITAL LETTER C +0107 ; [.1FD6.0020.0002][.0000.0024.0002] # LATIN SMALL LETTER C WITH ACUTE +0106 ; [.1FD6.0020.0008][.0000.0024.0002] # LATIN CAPITAL LETTER C WITH ACUTE +0109 ; [.1FD6.0020.0002][.0000.0027.0002] # LATIN SMALL LETTER C WITH CIRCUMFLEX +0108 ; [.1FD6.0020.0008][.0000.0027.0002] # LATIN CAPITAL LETTER C WITH CIRCUMFLEX +010D ; [.1FD6.0020.0002][.0000.0028.0002] # LATIN SMALL LETTER C WITH CARON +010C ; [.1FD6.0020.0008][.0000.0028.0002] # LATIN CAPITAL LETTER C WITH CARON +010B ; [.1FD6.0020.0002][.0000.002E.0002] # LATIN SMALL LETTER C WITH DOT ABOVE +010A ; [.1FD6.0020.0008][.0000.002E.0002] # LATIN CAPITAL LETTER C WITH DOT ABOVE +00E7 ; [.1FD6.0020.0002][.0000.0030.0002] # LATIN SMALL LETTER C WITH CEDILLA +1DD7 ; [.1FD6.0020.0004][.0000.0030.0004] # COMBINING LATIN SMALL LETTER C CEDILLA +00C7 ; [.1FD6.0020.0008][.0000.0030.0002] # LATIN CAPITAL LETTER C WITH CEDILLA +1E09 ; [.1FD6.0020.0002][.0000.0030.0002][.0000.0024.0002] # LATIN SMALL LETTER C WITH CEDILLA AND ACUTE +1E08 ; [.1FD6.0020.0008][.0000.0030.0002][.0000.0024.0002] # LATIN CAPITAL LETTER C WITH CEDILLA AND ACUTE +3388 ; [.1FD6.0020.001C][.1FA2.0020.001C][.20D6.0020.001C] # SQUARE CAL +33C4 ; [.1FD6.0020.001C][.1FD6.0020.001C] # SQUARE CC +1F12D ; [.1FD6.0020.000C][.1FEB.0020.000C] # CIRCLED CD +33C5 ; [.1FD6.0020.001C][.1FEB.0020.001C] # SQUARE CD +33C6 ; [.1FD6.0020.001D][*0675.0020.001C][.20C4.0020.001C][.2051.0020.001C] # SQUARE C OVER KG +1F191 ; [.1FD6.0020.001D][.20D6.0020.001D] # SQUARED CL +339D ; [.1FD6.0020.001C][.2109.0020.001C] # SQUARE CM +33A0 ; [.1FD6.0020.001C][.2109.0020.001C][.1F9A.0020.001C] # SQUARE CM SQUARED +33A4 ; [.1FD6.0020.001C][.2109.0020.001C][.1F9B.0020.001C] # SQUARE CM CUBED +2105 ; [.1FD6.0020.0004][*03A6.0020.0004][.213C.0020.0004] # CARE OF +33C7 ; [.1FD6.0020.001D][.213C.0020.001C][*027E.0020.001C] # SQUARE CO +1F192 ; [.1FD6.0020.001D][.213C.0020.001D][.213C.0020.001D][.20D6.0020.001D] # SQUARED COOL +2106 ; [.1FD6.0020.0004][*03A6.0020.0004][.2217.0020.0004] # CADA UNA +1D04 ; [.1FDA.0020.0002] # LATIN LETTER SMALL CAPITAL C +023C ; [.1FDB.0020.0002] # LATIN SMALL LETTER C WITH STROKE +023B ; [.1FDB.0020.0008] # LATIN CAPITAL LETTER C WITH STROKE +A793 ; [.1FDF.0020.0002] # LATIN SMALL LETTER C WITH BAR +A792 ; [.1FDF.0020.0008] # LATIN CAPITAL LETTER C WITH BAR +A794 ; [.1FE0.0020.0002] # LATIN SMALL LETTER C WITH PALATAL HOOK +A7C4 ; [.1FE0.0020.0008] # LATIN CAPITAL LETTER C WITH PALATAL HOOK +0188 ; [.1FE1.0020.0002] # LATIN SMALL LETTER C WITH HOOK +0187 ; [.1FE1.0020.0008] # LATIN CAPITAL LETTER C WITH HOOK +0255 ; [.1FE5.0020.0002] # LATIN SMALL LETTER C WITH CURL +1D9D ; [.1FE5.0020.0014] # MODIFIER LETTER SMALL C WITH CURL +2184 ; [.1FE9.0020.0002] # LATIN SMALL LETTER REVERSED C +2183 ; [.1FE9.0020.0008] # ROMAN NUMERAL REVERSED ONE HUNDRED +A73F ; [.1FEA.0020.0002] # LATIN SMALL LETTER REVERSED C WITH DOT +A73E ; [.1FEA.0020.0008] # LATIN CAPITAL LETTER REVERSED C WITH DOT +0064 ; [.1FEB.0020.0002] # LATIN SMALL LETTER D +FF44 ; [.1FEB.0020.0003] # FULLWIDTH LATIN SMALL LETTER D +0369 ; [.1FEB.0020.0004] # COMBINING LATIN SMALL LETTER D +217E ; [.1FEB.0020.0004] # SMALL ROMAN NUMERAL FIVE HUNDRED +249F ; [*0328.0020.0004][.1FEB.0020.0004][*0329.0020.0004] # PARENTHESIZED LATIN SMALL LETTER D +2146 ; [.1FEB.0020.0005] # DOUBLE-STRUCK ITALIC SMALL D +1D41D ; [.1FEB.0020.0005] # MATHEMATICAL BOLD SMALL D +1D451 ; [.1FEB.0020.0005] # MATHEMATICAL ITALIC SMALL D +1D485 ; [.1FEB.0020.0005] # MATHEMATICAL BOLD ITALIC SMALL D +1D4B9 ; [.1FEB.0020.0005] # MATHEMATICAL SCRIPT SMALL D +1D4ED ; [.1FEB.0020.0005] # MATHEMATICAL BOLD SCRIPT SMALL D +1D521 ; [.1FEB.0020.0005] # MATHEMATICAL FRAKTUR SMALL D +1D555 ; [.1FEB.0020.0005] # MATHEMATICAL DOUBLE-STRUCK SMALL D +1D589 ; [.1FEB.0020.0005] # MATHEMATICAL BOLD FRAKTUR SMALL D +1D5BD ; [.1FEB.0020.0005] # MATHEMATICAL SANS-SERIF SMALL D +1D5F1 ; [.1FEB.0020.0005] # MATHEMATICAL SANS-SERIF BOLD SMALL D +1D625 ; [.1FEB.0020.0005] # MATHEMATICAL SANS-SERIF ITALIC SMALL D +1D659 ; [.1FEB.0020.0005] # MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL D +1D68D ; [.1FEB.0020.0005] # MATHEMATICAL MONOSPACE SMALL D +24D3 ; [.1FEB.0020.0006] # CIRCLED LATIN SMALL LETTER D +0044 ; [.1FEB.0020.0008] # LATIN CAPITAL LETTER D +FF24 ; [.1FEB.0020.0009] # FULLWIDTH LATIN CAPITAL LETTER D +216E ; [.1FEB.0020.000A] # ROMAN NUMERAL FIVE HUNDRED +1F113 ; [*0328.0020.0004][.1FEB.0020.000A][*0329.0020.0004] # PARENTHESIZED LATIN CAPITAL LETTER D +2145 ; [.1FEB.0020.000B] # DOUBLE-STRUCK ITALIC CAPITAL D +1D403 ; [.1FEB.0020.000B] # MATHEMATICAL BOLD CAPITAL D +1D437 ; [.1FEB.0020.000B] # MATHEMATICAL ITALIC CAPITAL D +1D46B ; [.1FEB.0020.000B] # MATHEMATICAL BOLD ITALIC CAPITAL D +1D49F ; [.1FEB.0020.000B] # MATHEMATICAL SCRIPT CAPITAL D +1D4D3 ; [.1FEB.0020.000B] # MATHEMATICAL BOLD SCRIPT CAPITAL D +1D507 ; [.1FEB.0020.000B] # MATHEMATICAL FRAKTUR CAPITAL D +1D53B ; [.1FEB.0020.000B] # MATHEMATICAL DOUBLE-STRUCK CAPITAL D +1D56F ; [.1FEB.0020.000B] # MATHEMATICAL BOLD FRAKTUR CAPITAL D +1D5A3 ; [.1FEB.0020.000B] # MATHEMATICAL SANS-SERIF CAPITAL D +1D5D7 ; [.1FEB.0020.000B] # MATHEMATICAL SANS-SERIF BOLD CAPITAL D +1D60B ; [.1FEB.0020.000B] # MATHEMATICAL SANS-SERIF ITALIC CAPITAL D +1D63F ; [.1FEB.0020.000B] # MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL D +1D673 ; [.1FEB.0020.000B] # MATHEMATICAL MONOSPACE CAPITAL D +24B9 ; [.1FEB.0020.000C] # CIRCLED LATIN CAPITAL LETTER D +1F153 ; [.1FEB.0020.000C] # NEGATIVE CIRCLED LATIN CAPITAL LETTER D +1D48 ; [.1FEB.0020.0014] # MODIFIER LETTER SMALL D +1F1A5 ; [.1FEB.0020.001C] # SQUARED LATIN SMALL LETTER D +1D30 ; [.1FEB.0020.001D] # MODIFIER LETTER CAPITAL D +1F133 ; [.1FEB.0020.001D] # SQUARED LATIN CAPITAL LETTER D +1F173 ; [.1FEB.0020.001D] # NEGATIVE SQUARED LATIN CAPITAL LETTER D +010F ; [.1FEB.0020.0002][.0000.0028.0002] # LATIN SMALL LETTER D WITH CARON +010E ; [.1FEB.0020.0008][.0000.0028.0002] # LATIN CAPITAL LETTER D WITH CARON +1E0B ; [.1FEB.0020.0002][.0000.002E.0002] # LATIN SMALL LETTER D WITH DOT ABOVE +1E0A ; [.1FEB.0020.0008][.0000.002E.0002] # LATIN CAPITAL LETTER D WITH DOT ABOVE +1E11 ; [.1FEB.0020.0002][.0000.0030.0002] # LATIN SMALL LETTER D WITH CEDILLA +1E10 ; [.1FEB.0020.0008][.0000.0030.0002] # LATIN CAPITAL LETTER D WITH CEDILLA +0111 ; [.1FEB.0020.0002][.0000.0039.0002] # LATIN SMALL LETTER D WITH STROKE +0110 ; [.1FEB.0020.0008][.0000.0039.0002] # LATIN CAPITAL LETTER D WITH STROKE +1E0D ; [.1FEB.0020.0002][.0000.0042.0002] # LATIN SMALL LETTER D WITH DOT BELOW +1E0C ; [.1FEB.0020.0008][.0000.0042.0002] # LATIN CAPITAL LETTER D WITH DOT BELOW +1E13 ; [.1FEB.0020.0002][.0000.0046.0002] # LATIN SMALL LETTER D WITH CIRCUMFLEX BELOW +1E12 ; [.1FEB.0020.0008][.0000.0046.0002] # LATIN CAPITAL LETTER D WITH CIRCUMFLEX BELOW +1E0F ; [.1FEB.0020.0002][.0000.0049.0002] # LATIN SMALL LETTER D WITH LINE BELOW +1E0E ; [.1FEB.0020.0008][.0000.0049.0002] # LATIN CAPITAL LETTER D WITH LINE BELOW +00F0 ; [.1FEB.0020.0004][.0000.0118.0004] # LATIN SMALL LETTER ETH +1DD9 ; [.1FEB.0020.0004][.0000.0118.0004] # COMBINING LATIN SMALL LETTER ETH +00D0 ; [.1FEB.0020.000A][.0000.0118.0004] # LATIN CAPITAL LETTER ETH +1D9E ; [.1FEB.0020.0014][.0000.0118.0014] # MODIFIER LETTER SMALL ETH +1DD8 ; [.1FEB.0020.0004][.0000.0119.0004] # COMBINING LATIN SMALL LETTER INSULAR D +A77A ; [.1FEB.0020.0004][.0000.0119.0004] # LATIN SMALL LETTER INSULAR D +A779 ; [.1FEB.0020.000A][.0000.0119.0004] # LATIN CAPITAL LETTER INSULAR D +3372 ; [.1FEB.0020.001C][.1FA2.0020.001C] # SQUARE DA +0238 ; [.1FEB.0020.0004][.1FBC.0020.0004] # LATIN SMALL LETTER DB DIGRAPH +33C8 ; [.1FEB.0020.001C][.1FBC.0020.001D] # SQUARE DB +1F190 ; [.1FEB.0020.001D][.20AB.0020.001D] # SQUARE DJ +3397 ; [.1FEB.0020.001C][.20D6.0020.001C] # SQUARE DL +3377 ; [.1FEB.0020.001C][.2109.0020.001C] # SQUARE DM +3378 ; [.1FEB.0020.001C][.2109.0020.001C][.1F9A.0020.001C] # SQUARE DM SQUARED +3379 ; [.1FEB.0020.001C][.2109.0020.001C][.1F9B.0020.001C] # SQUARE DM CUBED +01F3 ; [.1FEB.0020.0004][.2286.0020.0004] # LATIN SMALL LETTER DZ +02A3 ; [.1FEB.0020.0004][.2286.0020.0004] # LATIN SMALL LETTER DZ DIGRAPH +01F2 ; [.1FEB.0020.000A][.2286.0020.0004] # LATIN CAPITAL LETTER D WITH SMALL LETTER Z +01F1 ; [.1FEB.0020.000A][.2286.0020.000A] # LATIN CAPITAL LETTER DZ +01C6 ; [.1FEB.0020.0004][.2286.0020.0004][.0000.0028.0004] # LATIN SMALL LETTER DZ WITH CARON +01C5 ; [.1FEB.0020.000A][.2286.0020.0004][.0000.0028.0004] # LATIN CAPITAL LETTER D WITH SMALL LETTER Z WITH CARON +01C4 ; [.1FEB.0020.000A][.2286.0020.000A][.0000.0028.0004] # LATIN CAPITAL LETTER DZ WITH CARON +AB66 ; [.1FEB.0020.0004][.2295.0020.0004] # LATIN SMALL LETTER DZ DIGRAPH WITH RETROFLEX HOOK +02A5 ; [.1FEB.0020.0004][.2299.0020.0004] # LATIN SMALL LETTER DZ DIGRAPH WITH CURL +02A4 ; [.1FEB.0020.0004][.22A3.0020.0004] # LATIN SMALL LETTER DEZH DIGRAPH +1D05 ; [.1FEF.0020.0002] # LATIN LETTER SMALL CAPITAL D +1D06 ; [.1FF0.0020.0002] # LATIN LETTER SMALL CAPITAL ETH +A7C8 ; [.1FF1.0020.0002] # LATIN SMALL LETTER D WITH SHORT STROKE OVERLAY +A7C7 ; [.1FF1.0020.0008] # LATIN CAPITAL LETTER D WITH SHORT STROKE OVERLAY +1D6D ; [.1FF2.0020.0002] # LATIN SMALL LETTER D WITH MIDDLE TILDE +1D81 ; [.1FF3.0020.0002] # LATIN SMALL LETTER D WITH PALATAL HOOK +0256 ; [.1FF4.0020.0002] # LATIN SMALL LETTER D WITH TAIL +0189 ; [.1FF4.0020.0008] # LATIN CAPITAL LETTER AFRICAN D +0257 ; [.1FF8.0020.0002] # LATIN SMALL LETTER D WITH HOOK +018A ; [.1FF8.0020.0008] # LATIN CAPITAL LETTER D WITH HOOK +1D91 ; [.1FFC.0020.0002] # LATIN SMALL LETTER D WITH HOOK AND TAIL +018C ; [.1FFD.0020.0002] # LATIN SMALL LETTER D WITH TOPBAR +018B ; [.1FFD.0020.0008] # LATIN CAPITAL LETTER D WITH TOPBAR +0221 ; [.2001.0020.0002] # LATIN SMALL LETTER D WITH CURL +A771 ; [.2005.0020.0002] # LATIN SMALL LETTER DUM +1E9F ; [.2006.0020.0002] # LATIN SMALL LETTER DELTA +0065 ; [.2007.0020.0002] # LATIN SMALL LETTER E +FF45 ; [.2007.0020.0003] # FULLWIDTH LATIN SMALL LETTER E +0364 ; [.2007.0020.0004] # COMBINING LATIN SMALL LETTER E +24A0 ; [*0328.0020.0004][.2007.0020.0004][*0329.0020.0004] # PARENTHESIZED LATIN SMALL LETTER E +212F ; [.2007.0020.0005] # SCRIPT SMALL E +2147 ; [.2007.0020.0005] # DOUBLE-STRUCK ITALIC SMALL E +1D41E ; [.2007.0020.0005] # MATHEMATICAL BOLD SMALL E +1D452 ; [.2007.0020.0005] # MATHEMATICAL ITALIC SMALL E +1D486 ; [.2007.0020.0005] # MATHEMATICAL BOLD ITALIC SMALL E +1D4EE ; [.2007.0020.0005] # MATHEMATICAL BOLD SCRIPT SMALL E +1D522 ; [.2007.0020.0005] # MATHEMATICAL FRAKTUR SMALL E +1D556 ; [.2007.0020.0005] # MATHEMATICAL DOUBLE-STRUCK SMALL E +1D58A ; [.2007.0020.0005] # MATHEMATICAL BOLD FRAKTUR SMALL E +1D5BE ; [.2007.0020.0005] # MATHEMATICAL SANS-SERIF SMALL E +1D5F2 ; [.2007.0020.0005] # MATHEMATICAL SANS-SERIF BOLD SMALL E +1D626 ; [.2007.0020.0005] # MATHEMATICAL SANS-SERIF ITALIC SMALL E +1D65A ; [.2007.0020.0005] # MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL E +1D68E ; [.2007.0020.0005] # MATHEMATICAL MONOSPACE SMALL E +24D4 ; [.2007.0020.0006] # CIRCLED LATIN SMALL LETTER E +0045 ; [.2007.0020.0008] # LATIN CAPITAL LETTER E +FF25 ; [.2007.0020.0009] # FULLWIDTH LATIN CAPITAL LETTER E +1F114 ; [*0328.0020.0004][.2007.0020.000A][*0329.0020.0004] # PARENTHESIZED LATIN CAPITAL LETTER E +2130 ; [.2007.0020.000B] # SCRIPT CAPITAL E +1D404 ; [.2007.0020.000B] # MATHEMATICAL BOLD CAPITAL E +1D438 ; [.2007.0020.000B] # MATHEMATICAL ITALIC CAPITAL E +1D46C ; [.2007.0020.000B] # MATHEMATICAL BOLD ITALIC CAPITAL E +1D4D4 ; [.2007.0020.000B] # MATHEMATICAL BOLD SCRIPT CAPITAL E +1D508 ; [.2007.0020.000B] # MATHEMATICAL FRAKTUR CAPITAL E +1D53C ; [.2007.0020.000B] # MATHEMATICAL DOUBLE-STRUCK CAPITAL E +1D570 ; [.2007.0020.000B] # MATHEMATICAL BOLD FRAKTUR CAPITAL E +1D5A4 ; [.2007.0020.000B] # MATHEMATICAL SANS-SERIF CAPITAL E +1D5D8 ; [.2007.0020.000B] # MATHEMATICAL SANS-SERIF BOLD CAPITAL E +1D60C ; [.2007.0020.000B] # MATHEMATICAL SANS-SERIF ITALIC CAPITAL E +1D640 ; [.2007.0020.000B] # MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL E +1D674 ; [.2007.0020.000B] # MATHEMATICAL MONOSPACE CAPITAL E +24BA ; [.2007.0020.000C] # CIRCLED LATIN CAPITAL LETTER E +1F154 ; [.2007.0020.000C] # NEGATIVE CIRCLED LATIN CAPITAL LETTER E +1D49 ; [.2007.0020.0014] # MODIFIER LETTER SMALL E +2091 ; [.2007.0020.0015] # LATIN SUBSCRIPT SMALL LETTER E +1D31 ; [.2007.0020.001D] # MODIFIER LETTER CAPITAL E +1F134 ; [.2007.0020.001D] # SQUARED LATIN CAPITAL LETTER E +1F174 ; [.2007.0020.001D] # NEGATIVE SQUARED LATIN CAPITAL LETTER E +00E9 ; [.2007.0020.0002][.0000.0024.0002] # LATIN SMALL LETTER E WITH ACUTE +00C9 ; [.2007.0020.0008][.0000.0024.0002] # LATIN CAPITAL LETTER E WITH ACUTE +00E8 ; [.2007.0020.0002][.0000.0025.0002] # LATIN SMALL LETTER E WITH GRAVE +00C8 ; [.2007.0020.0008][.0000.0025.0002] # LATIN CAPITAL LETTER E WITH GRAVE +0115 ; [.2007.0020.0002][.0000.0026.0002] # LATIN SMALL LETTER E WITH BREVE +0114 ; [.2007.0020.0008][.0000.0026.0002] # LATIN CAPITAL LETTER E WITH BREVE +00EA ; [.2007.0020.0002][.0000.0027.0002] # LATIN SMALL LETTER E WITH CIRCUMFLEX +00CA ; [.2007.0020.0008][.0000.0027.0002] # LATIN CAPITAL LETTER E WITH CIRCUMFLEX +1EBF ; [.2007.0020.0002][.0000.0027.0002][.0000.0024.0002] # LATIN SMALL LETTER E WITH CIRCUMFLEX AND ACUTE +1EBE ; [.2007.0020.0008][.0000.0027.0002][.0000.0024.0002] # LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND ACUTE +1EC1 ; [.2007.0020.0002][.0000.0027.0002][.0000.0025.0002] # LATIN SMALL LETTER E WITH CIRCUMFLEX AND GRAVE +1EC0 ; [.2007.0020.0008][.0000.0027.0002][.0000.0025.0002] # LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND GRAVE +1EC5 ; [.2007.0020.0002][.0000.0027.0002][.0000.002D.0002] # LATIN SMALL LETTER E WITH CIRCUMFLEX AND TILDE +1EC4 ; [.2007.0020.0008][.0000.0027.0002][.0000.002D.0002] # LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND TILDE +1EC3 ; [.2007.0020.0002][.0000.0027.0002][.0000.003B.0002] # LATIN SMALL LETTER E WITH CIRCUMFLEX AND HOOK ABOVE +1EC2 ; [.2007.0020.0008][.0000.0027.0002][.0000.003B.0002] # LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND HOOK ABOVE +011B ; [.2007.0020.0002][.0000.0028.0002] # LATIN SMALL LETTER E WITH CARON +011A ; [.2007.0020.0008][.0000.0028.0002] # LATIN CAPITAL LETTER E WITH CARON +00EB ; [.2007.0020.0002][.0000.002B.0002] # LATIN SMALL LETTER E WITH DIAERESIS +00CB ; [.2007.0020.0008][.0000.002B.0002] # LATIN CAPITAL LETTER E WITH DIAERESIS +1EBD ; [.2007.0020.0002][.0000.002D.0002] # LATIN SMALL LETTER E WITH TILDE +1EBC ; [.2007.0020.0008][.0000.002D.0002] # LATIN CAPITAL LETTER E WITH TILDE +0117 ; [.2007.0020.0002][.0000.002E.0002] # LATIN SMALL LETTER E WITH DOT ABOVE +0116 ; [.2007.0020.0008][.0000.002E.0002] # LATIN CAPITAL LETTER E WITH DOT ABOVE +0229 ; [.2007.0020.0002][.0000.0030.0002] # LATIN SMALL LETTER E WITH CEDILLA +0228 ; [.2007.0020.0008][.0000.0030.0002] # LATIN CAPITAL LETTER E WITH CEDILLA +1E1D ; [.2007.0020.0002][.0000.0030.0002][.0000.0026.0002] # LATIN SMALL LETTER E WITH CEDILLA AND BREVE +1E1C ; [.2007.0020.0008][.0000.0030.0002][.0000.0026.0002] # LATIN CAPITAL LETTER E WITH CEDILLA AND BREVE +0119 ; [.2007.0020.0002][.0000.0031.0002] # LATIN SMALL LETTER E WITH OGONEK +0118 ; [.2007.0020.0008][.0000.0031.0002] # LATIN CAPITAL LETTER E WITH OGONEK +0113 ; [.2007.0020.0002][.0000.0032.0002] # LATIN SMALL LETTER E WITH MACRON +0112 ; [.2007.0020.0008][.0000.0032.0002] # LATIN CAPITAL LETTER E WITH MACRON +1E17 ; [.2007.0020.0002][.0000.0032.0002][.0000.0024.0002] # LATIN SMALL LETTER E WITH MACRON AND ACUTE +1E16 ; [.2007.0020.0008][.0000.0032.0002][.0000.0024.0002] # LATIN CAPITAL LETTER E WITH MACRON AND ACUTE +1E15 ; [.2007.0020.0002][.0000.0032.0002][.0000.0025.0002] # LATIN SMALL LETTER E WITH MACRON AND GRAVE +1E14 ; [.2007.0020.0008][.0000.0032.0002][.0000.0025.0002] # LATIN CAPITAL LETTER E WITH MACRON AND GRAVE +1EBB ; [.2007.0020.0002][.0000.003B.0002] # LATIN SMALL LETTER E WITH HOOK ABOVE +1EBA ; [.2007.0020.0008][.0000.003B.0002] # LATIN CAPITAL LETTER E WITH HOOK ABOVE +0205 ; [.2007.0020.0002][.0000.003C.0002] # LATIN SMALL LETTER E WITH DOUBLE GRAVE +0204 ; [.2007.0020.0008][.0000.003C.0002] # LATIN CAPITAL LETTER E WITH DOUBLE GRAVE +0207 ; [.2007.0020.0002][.0000.003E.0002] # LATIN SMALL LETTER E WITH INVERTED BREVE +0206 ; [.2007.0020.0008][.0000.003E.0002] # LATIN CAPITAL LETTER E WITH INVERTED BREVE +1EB9 ; [.2007.0020.0002][.0000.0042.0002] # LATIN SMALL LETTER E WITH DOT BELOW +1EB8 ; [.2007.0020.0008][.0000.0042.0002] # LATIN CAPITAL LETTER E WITH DOT BELOW +1EC7 ; [.2007.0020.0002][.0000.0042.0002][.0000.0027.0002] # LATIN SMALL LETTER E WITH CIRCUMFLEX AND DOT BELOW +1EC6 ; [.2007.0020.0008][.0000.0042.0002][.0000.0027.0002] # LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND DOT BELOW +1E19 ; [.2007.0020.0002][.0000.0046.0002] # LATIN SMALL LETTER E WITH CIRCUMFLEX BELOW +1E18 ; [.2007.0020.0008][.0000.0046.0002] # LATIN CAPITAL LETTER E WITH CIRCUMFLEX BELOW +1E1B ; [.2007.0020.0002][.0000.0048.0002] # LATIN SMALL LETTER E WITH TILDE BELOW +1E1A ; [.2007.0020.0008][.0000.0048.0002] # LATIN CAPITAL LETTER E WITH TILDE BELOW +32CD ; [.2007.0020.001C][.2193.0020.001C][.2051.0020.001C] # SQUARE ERG +32CE ; [.2007.0020.001C][.2247.0020.001D] # SQUARE EV +1D07 ; [.200B.0020.0002] # LATIN LETTER SMALL CAPITAL E +AB32 ; [.200C.0020.0002] # LATIN SMALL LETTER BLACKLETTER E +AB33 ; [.200D.0020.0002] # LATIN SMALL LETTER BARRED E +0247 ; [.200E.0020.0002] # LATIN SMALL LETTER E WITH STROKE +0246 ; [.200E.0020.0008] # LATIN CAPITAL LETTER E WITH STROKE +1D92 ; [.2012.0020.0002] # LATIN SMALL LETTER E WITH RETROFLEX HOOK +AB34 ; [.2013.0020.0002] # LATIN SMALL LETTER E WITH FLOURISH +2C78 ; [.2014.0020.0002] # LATIN SMALL LETTER E WITH NOTCH +01DD ; [.2015.0020.0002] # LATIN SMALL LETTER TURNED E +018E ; [.2015.0020.0008] # LATIN CAPITAL LETTER REVERSED E +1D32 ; [.2015.0020.001D] # MODIFIER LETTER CAPITAL REVERSED E +2C7B ; [.2019.0020.0002] # LATIN LETTER SMALL CAPITAL TURNED E +0259 ; [.201A.0020.0002] # LATIN SMALL LETTER SCHWA +1DEA ; [.201A.0020.0004] # COMBINING LATIN SMALL LETTER SCHWA +018F ; [.201A.0020.0008] # LATIN CAPITAL LETTER SCHWA +1D4A ; [.201A.0020.0014] # MODIFIER LETTER SMALL SCHWA +2094 ; [.201A.0020.0015] # LATIN SUBSCRIPT SMALL LETTER SCHWA +1D95 ; [.201E.0020.0002] # LATIN SMALL LETTER SCHWA WITH RETROFLEX HOOK +025B ; [.201F.0020.0002] # LATIN SMALL LETTER OPEN E +0190 ; [.201F.0020.0008] # LATIN CAPITAL LETTER OPEN E +2107 ; [.201F.0020.000A] # EULER CONSTANT +1D4B ; [.201F.0020.0014] # MODIFIER LETTER SMALL OPEN E +1D93 ; [.2023.0020.0002] # LATIN SMALL LETTER OPEN E WITH RETROFLEX HOOK +0258 ; [.2024.0020.0002] # LATIN SMALL LETTER REVERSED E +025A ; [.2028.0020.0002] # LATIN SMALL LETTER SCHWA WITH HOOK +025C ; [.202C.0020.0002] # LATIN SMALL LETTER REVERSED OPEN E +A7AB ; [.202C.0020.0008] # LATIN CAPITAL LETTER REVERSED OPEN E +1D9F ; [.202C.0020.0014] # MODIFIER LETTER SMALL REVERSED OPEN E +1D94 ; [.2030.0020.0002] # LATIN SMALL LETTER REVERSED OPEN E WITH RETROFLEX HOOK +1D08 ; [.2031.0020.0002] # LATIN SMALL LETTER TURNED OPEN E +1D4C ; [.2031.0020.0014] # MODIFIER LETTER SMALL TURNED OPEN E +025D ; [.2032.0020.0002] # LATIN SMALL LETTER REVERSED OPEN E WITH HOOK +025E ; [.2036.0020.0002] # LATIN SMALL LETTER CLOSED REVERSED OPEN E +029A ; [.203A.0020.0002] # LATIN SMALL LETTER CLOSED OPEN E +0264 ; [.203E.0020.0002] # LATIN SMALL LETTER RAMS HORN +0066 ; [.2042.0020.0002] # LATIN SMALL LETTER F +FF46 ; [.2042.0020.0003] # FULLWIDTH LATIN SMALL LETTER F +1DEB ; [.2042.0020.0004] # COMBINING LATIN SMALL LETTER F +24A1 ; [*0328.0020.0004][.2042.0020.0004][*0329.0020.0004] # PARENTHESIZED LATIN SMALL LETTER F +1D41F ; [.2042.0020.0005] # MATHEMATICAL BOLD SMALL F +1D453 ; [.2042.0020.0005] # MATHEMATICAL ITALIC SMALL F +1D487 ; [.2042.0020.0005] # MATHEMATICAL BOLD ITALIC SMALL F +1D4BB ; [.2042.0020.0005] # MATHEMATICAL SCRIPT SMALL F +1D4EF ; [.2042.0020.0005] # MATHEMATICAL BOLD SCRIPT SMALL F +1D523 ; [.2042.0020.0005] # MATHEMATICAL FRAKTUR SMALL F +1D557 ; [.2042.0020.0005] # MATHEMATICAL DOUBLE-STRUCK SMALL F +1D58B ; [.2042.0020.0005] # MATHEMATICAL BOLD FRAKTUR SMALL F +1D5BF ; [.2042.0020.0005] # MATHEMATICAL SANS-SERIF SMALL F +1D5F3 ; [.2042.0020.0005] # MATHEMATICAL SANS-SERIF BOLD SMALL F +1D627 ; [.2042.0020.0005] # MATHEMATICAL SANS-SERIF ITALIC SMALL F +1D65B ; [.2042.0020.0005] # MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL F +1D68F ; [.2042.0020.0005] # MATHEMATICAL MONOSPACE SMALL F +24D5 ; [.2042.0020.0006] # CIRCLED LATIN SMALL LETTER F +0046 ; [.2042.0020.0008] # LATIN CAPITAL LETTER F +FF26 ; [.2042.0020.0009] # FULLWIDTH LATIN CAPITAL LETTER F +2109 ; [*052A.0020.0004][.2042.0020.000A] # DEGREE FAHRENHEIT +1F115 ; [*0328.0020.0004][.2042.0020.000A][*0329.0020.0004] # PARENTHESIZED LATIN CAPITAL LETTER F +2131 ; [.2042.0020.000B] # SCRIPT CAPITAL F +1D405 ; [.2042.0020.000B] # MATHEMATICAL BOLD CAPITAL F +1D439 ; [.2042.0020.000B] # MATHEMATICAL ITALIC CAPITAL F +1D46D ; [.2042.0020.000B] # MATHEMATICAL BOLD ITALIC CAPITAL F +1D4D5 ; [.2042.0020.000B] # MATHEMATICAL BOLD SCRIPT CAPITAL F +1D509 ; [.2042.0020.000B] # MATHEMATICAL FRAKTUR CAPITAL F +1D53D ; [.2042.0020.000B] # MATHEMATICAL DOUBLE-STRUCK CAPITAL F +1D571 ; [.2042.0020.000B] # MATHEMATICAL BOLD FRAKTUR CAPITAL F +1D5A5 ; [.2042.0020.000B] # MATHEMATICAL SANS-SERIF CAPITAL F +1D5D9 ; [.2042.0020.000B] # MATHEMATICAL SANS-SERIF BOLD CAPITAL F +1D60D ; [.2042.0020.000B] # MATHEMATICAL SANS-SERIF ITALIC CAPITAL F +1D641 ; [.2042.0020.000B] # MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL F +1D675 ; [.2042.0020.000B] # MATHEMATICAL MONOSPACE CAPITAL F +24BB ; [.2042.0020.000C] # CIRCLED LATIN CAPITAL LETTER F +1F155 ; [.2042.0020.000C] # NEGATIVE CIRCLED LATIN CAPITAL LETTER F +1DA0 ; [.2042.0020.0014] # MODIFIER LETTER SMALL F +1F135 ; [.2042.0020.001D] # SQUARED LATIN CAPITAL LETTER F +1F175 ; [.2042.0020.001D] # NEGATIVE SQUARED LATIN CAPITAL LETTER F +1E1F ; [.2042.0020.0002][.0000.002E.0002] # LATIN SMALL LETTER F WITH DOT ABOVE +1E1E ; [.2042.0020.0008][.0000.002E.0002] # LATIN CAPITAL LETTER F WITH DOT ABOVE +A77C ; [.2042.0020.0004][.0000.0119.0004] # LATIN SMALL LETTER INSULAR F +A77B ; [.2042.0020.000A][.0000.0119.0004] # LATIN CAPITAL LETTER INSULAR F +213B ; [.2042.0020.000A][.1FA2.0020.000A][.2264.0020.000A] # FACSIMILE SIGN +FB00 ; [.2042.0020.0004][.2042.0020.0004] # LATIN SMALL LIGATURE FF +FB03 ; [.2042.0020.0004][.2042.0020.0004][.2090.0020.0004] # LATIN SMALL LIGATURE FFI +FB04 ; [.2042.0020.0004][.2042.0020.0004][.20D6.0020.0004] # LATIN SMALL LIGATURE FFL +FB01 ; [.2042.0020.0004][.2090.0020.0004] # LATIN SMALL LIGATURE FI +FB02 ; [.2042.0020.0004][.20D6.0020.0004] # LATIN SMALL LIGATURE FL +3399 ; [.2042.0020.001C][.2109.0020.001C] # SQUARE FM +02A9 ; [.2042.0020.0004][.2137.0020.0004] # LATIN SMALL LETTER FENG DIGRAPH +1F193 ; [.2042.0020.001D][.2193.0020.001D][.2007.0020.001D][.2007.0020.001D] # SQUARED FREE +A730 ; [.2046.0020.0002] # LATIN LETTER SMALL CAPITAL F +AB35 ; [.2047.0020.0002] # LATIN SMALL LETTER LENIS F +A799 ; [.2048.0020.0002] # LATIN SMALL LETTER F WITH STROKE +A798 ; [.2048.0020.0008] # LATIN CAPITAL LETTER F WITH STROKE +1D6E ; [.2049.0020.0002] # LATIN SMALL LETTER F WITH MIDDLE TILDE +1D82 ; [.204A.0020.0002] # LATIN SMALL LETTER F WITH PALATAL HOOK +0192 ; [.204B.0020.0002] # LATIN SMALL LETTER F WITH HOOK +0191 ; [.204B.0020.0008] # LATIN CAPITAL LETTER F WITH HOOK +214E ; [.204F.0020.0002] # TURNED SMALL F +2132 ; [.204F.0020.0008] # TURNED CAPITAL F +A7FB ; [.2050.0020.0002] # LATIN EPIGRAPHIC LETTER REVERSED F +0067 ; [.2051.0020.0002] # LATIN SMALL LETTER G +FF47 ; [.2051.0020.0003] # FULLWIDTH LATIN SMALL LETTER G +1DDA ; [.2051.0020.0004] # COMBINING LATIN SMALL LETTER G +24A2 ; [*0328.0020.0004][.2051.0020.0004][*0329.0020.0004] # PARENTHESIZED LATIN SMALL LETTER G +210A ; [.2051.0020.0005] # SCRIPT SMALL G +1D420 ; [.2051.0020.0005] # MATHEMATICAL BOLD SMALL G +1D454 ; [.2051.0020.0005] # MATHEMATICAL ITALIC SMALL G +1D488 ; [.2051.0020.0005] # MATHEMATICAL BOLD ITALIC SMALL G +1D4F0 ; [.2051.0020.0005] # MATHEMATICAL BOLD SCRIPT SMALL G +1D524 ; [.2051.0020.0005] # MATHEMATICAL FRAKTUR SMALL G +1D558 ; [.2051.0020.0005] # MATHEMATICAL DOUBLE-STRUCK SMALL G +1D58C ; [.2051.0020.0005] # MATHEMATICAL BOLD FRAKTUR SMALL G +1D5C0 ; [.2051.0020.0005] # MATHEMATICAL SANS-SERIF SMALL G +1D5F4 ; [.2051.0020.0005] # MATHEMATICAL SANS-SERIF BOLD SMALL G +1D628 ; [.2051.0020.0005] # MATHEMATICAL SANS-SERIF ITALIC SMALL G +1D65C ; [.2051.0020.0005] # MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL G +1D690 ; [.2051.0020.0005] # MATHEMATICAL MONOSPACE SMALL G +24D6 ; [.2051.0020.0006] # CIRCLED LATIN SMALL LETTER G +0047 ; [.2051.0020.0008] # LATIN CAPITAL LETTER G +FF27 ; [.2051.0020.0009] # FULLWIDTH LATIN CAPITAL LETTER G +1F116 ; [*0328.0020.0004][.2051.0020.000A][*0329.0020.0004] # PARENTHESIZED LATIN CAPITAL LETTER G +1D406 ; [.2051.0020.000B] # MATHEMATICAL BOLD CAPITAL G +1D43A ; [.2051.0020.000B] # MATHEMATICAL ITALIC CAPITAL G +1D46E ; [.2051.0020.000B] # MATHEMATICAL BOLD ITALIC CAPITAL G +1D4A2 ; [.2051.0020.000B] # MATHEMATICAL SCRIPT CAPITAL G +1D4D6 ; [.2051.0020.000B] # MATHEMATICAL BOLD SCRIPT CAPITAL G +1D50A ; [.2051.0020.000B] # MATHEMATICAL FRAKTUR CAPITAL G +1D53E ; [.2051.0020.000B] # MATHEMATICAL DOUBLE-STRUCK CAPITAL G +1D572 ; [.2051.0020.000B] # MATHEMATICAL BOLD FRAKTUR CAPITAL G +1D5A6 ; [.2051.0020.000B] # MATHEMATICAL SANS-SERIF CAPITAL G +1D5DA ; [.2051.0020.000B] # MATHEMATICAL SANS-SERIF BOLD CAPITAL G +1D60E ; [.2051.0020.000B] # MATHEMATICAL SANS-SERIF ITALIC CAPITAL G +1D642 ; [.2051.0020.000B] # MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL G +1D676 ; [.2051.0020.000B] # MATHEMATICAL MONOSPACE CAPITAL G +24BC ; [.2051.0020.000C] # CIRCLED LATIN CAPITAL LETTER G +1F156 ; [.2051.0020.000C] # NEGATIVE CIRCLED LATIN CAPITAL LETTER G +1D4D ; [.2051.0020.0014] # MODIFIER LETTER SMALL G +1D33 ; [.2051.0020.001D] # MODIFIER LETTER CAPITAL G +1F136 ; [.2051.0020.001D] # SQUARED LATIN CAPITAL LETTER G +1F176 ; [.2051.0020.001D] # NEGATIVE SQUARED LATIN CAPITAL LETTER G +01F5 ; [.2051.0020.0002][.0000.0024.0002] # LATIN SMALL LETTER G WITH ACUTE +01F4 ; [.2051.0020.0008][.0000.0024.0002] # LATIN CAPITAL LETTER G WITH ACUTE +011F ; [.2051.0020.0002][.0000.0026.0002] # LATIN SMALL LETTER G WITH BREVE +011E ; [.2051.0020.0008][.0000.0026.0002] # LATIN CAPITAL LETTER G WITH BREVE +011D ; [.2051.0020.0002][.0000.0027.0002] # LATIN SMALL LETTER G WITH CIRCUMFLEX +011C ; [.2051.0020.0008][.0000.0027.0002] # LATIN CAPITAL LETTER G WITH CIRCUMFLEX +01E7 ; [.2051.0020.0002][.0000.0028.0002] # LATIN SMALL LETTER G WITH CARON +01E6 ; [.2051.0020.0008][.0000.0028.0002] # LATIN CAPITAL LETTER G WITH CARON +0121 ; [.2051.0020.0002][.0000.002E.0002] # LATIN SMALL LETTER G WITH DOT ABOVE +0120 ; [.2051.0020.0008][.0000.002E.0002] # LATIN CAPITAL LETTER G WITH DOT ABOVE +0123 ; [.2051.0020.0002][.0000.0030.0002] # LATIN SMALL LETTER G WITH CEDILLA +0122 ; [.2051.0020.0008][.0000.0030.0002] # LATIN CAPITAL LETTER G WITH CEDILLA +1E21 ; [.2051.0020.0002][.0000.0032.0002] # LATIN SMALL LETTER G WITH MACRON +1E20 ; [.2051.0020.0008][.0000.0032.0002] # LATIN CAPITAL LETTER G WITH MACRON +A7A1 ; [.2051.0020.0004][.0000.0035.0004] # LATIN SMALL LETTER G WITH OBLIQUE STROKE +A7A0 ; [.2051.0020.000A][.0000.0035.0004] # LATIN CAPITAL LETTER G WITH OBLIQUE STROKE +1D79 ; [.2051.0020.0004][.0000.0119.0004] # LATIN SMALL LETTER INSULAR G +A77D ; [.2051.0020.000A][.0000.0119.0004] # LATIN CAPITAL LETTER INSULAR G +33FF ; [.2051.0020.001C][.1FA2.0020.001C][.20D6.0020.001C] # SQUARE GAL +3387 ; [.2051.0020.001D][.1FBC.0020.001D] # SQUARE GB +3393 ; [.2051.0020.001D][.2075.0020.001D][.2286.0020.001C] # SQUARE GHZ +33AC ; [.2051.0020.001D][.216B.0020.001D][.1FA2.0020.001C] # SQUARE GPA +33C9 ; [.2051.0020.001D][.2270.0020.001C] # SQUARE GY +0261 ; [.2055.0020.0002] # LATIN SMALL LETTER SCRIPT G +A7AC ; [.2055.0020.0008] # LATIN CAPITAL LETTER SCRIPT G +1DA2 ; [.2055.0020.0014] # MODIFIER LETTER SMALL SCRIPT G +AB36 ; [.2059.0020.0002] # LATIN SMALL LETTER SCRIPT G WITH CROSSED-TAIL +0262 ; [.205A.0020.0002] # LATIN LETTER SMALL CAPITAL G +1DDB ; [.205A.0020.0004] # COMBINING LATIN LETTER SMALL CAPITAL G +01E5 ; [.205E.0020.0002] # LATIN SMALL LETTER G WITH STROKE +01E4 ; [.205E.0020.0008] # LATIN CAPITAL LETTER G WITH STROKE +1D83 ; [.2062.0020.0002] # LATIN SMALL LETTER G WITH PALATAL HOOK +0260 ; [.2063.0020.0002] # LATIN SMALL LETTER G WITH HOOK +0193 ; [.2063.0020.0008] # LATIN CAPITAL LETTER G WITH HOOK +029B ; [.2067.0020.0002] # LATIN LETTER SMALL CAPITAL G WITH HOOK +1D77 ; [.206B.0020.0002] # LATIN SMALL LETTER TURNED G +A77F ; [.206C.0020.0002] # LATIN SMALL LETTER TURNED INSULAR G +A77E ; [.206C.0020.0008] # LATIN CAPITAL LETTER TURNED INSULAR G +0263 ; [.206D.0020.0002] # LATIN SMALL LETTER GAMMA +0194 ; [.206D.0020.0008] # LATIN CAPITAL LETTER GAMMA +02E0 ; [.206D.0020.0014] # MODIFIER LETTER SMALL GAMMA +01A3 ; [.2071.0020.0002] # LATIN SMALL LETTER OI +01A2 ; [.2071.0020.0008] # LATIN CAPITAL LETTER OI +0068 ; [.2075.0020.0002] # LATIN SMALL LETTER H +FF48 ; [.2075.0020.0003] # FULLWIDTH LATIN SMALL LETTER H +036A ; [.2075.0020.0004] # COMBINING LATIN SMALL LETTER H +24A3 ; [*0328.0020.0004][.2075.0020.0004][*0329.0020.0004] # PARENTHESIZED LATIN SMALL LETTER H +210E ; [.2075.0020.0005] # PLANCK CONSTANT +1D421 ; [.2075.0020.0005] # MATHEMATICAL BOLD SMALL H +1D489 ; [.2075.0020.0005] # MATHEMATICAL BOLD ITALIC SMALL H +1D4BD ; [.2075.0020.0005] # MATHEMATICAL SCRIPT SMALL H +1D4F1 ; [.2075.0020.0005] # MATHEMATICAL BOLD SCRIPT SMALL H +1D525 ; [.2075.0020.0005] # MATHEMATICAL FRAKTUR SMALL H +1D559 ; [.2075.0020.0005] # MATHEMATICAL DOUBLE-STRUCK SMALL H +1D58D ; [.2075.0020.0005] # MATHEMATICAL BOLD FRAKTUR SMALL H +1D5C1 ; [.2075.0020.0005] # MATHEMATICAL SANS-SERIF SMALL H +1D5F5 ; [.2075.0020.0005] # MATHEMATICAL SANS-SERIF BOLD SMALL H +1D629 ; [.2075.0020.0005] # MATHEMATICAL SANS-SERIF ITALIC SMALL H +1D65D ; [.2075.0020.0005] # MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL H +1D691 ; [.2075.0020.0005] # MATHEMATICAL MONOSPACE SMALL H +24D7 ; [.2075.0020.0006] # CIRCLED LATIN SMALL LETTER H +0048 ; [.2075.0020.0008] # LATIN CAPITAL LETTER H +FF28 ; [.2075.0020.0009] # FULLWIDTH LATIN CAPITAL LETTER H +1F117 ; [*0328.0020.0004][.2075.0020.000A][*0329.0020.0004] # PARENTHESIZED LATIN CAPITAL LETTER H +210B ; [.2075.0020.000B] # SCRIPT CAPITAL H +210C ; [.2075.0020.000B] # BLACK-LETTER CAPITAL H +210D ; [.2075.0020.000B] # DOUBLE-STRUCK CAPITAL H +1D407 ; [.2075.0020.000B] # MATHEMATICAL BOLD CAPITAL H +1D43B ; [.2075.0020.000B] # MATHEMATICAL ITALIC CAPITAL H +1D46F ; [.2075.0020.000B] # MATHEMATICAL BOLD ITALIC CAPITAL H +1D4D7 ; [.2075.0020.000B] # MATHEMATICAL BOLD SCRIPT CAPITAL H +1D573 ; [.2075.0020.000B] # MATHEMATICAL BOLD FRAKTUR CAPITAL H +1D5A7 ; [.2075.0020.000B] # MATHEMATICAL SANS-SERIF CAPITAL H +1D5DB ; [.2075.0020.000B] # MATHEMATICAL SANS-SERIF BOLD CAPITAL H +1D60F ; [.2075.0020.000B] # MATHEMATICAL SANS-SERIF ITALIC CAPITAL H +1D643 ; [.2075.0020.000B] # MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL H +1D677 ; [.2075.0020.000B] # MATHEMATICAL MONOSPACE CAPITAL H +24BD ; [.2075.0020.000C] # CIRCLED LATIN CAPITAL LETTER H +1F157 ; [.2075.0020.000C] # NEGATIVE CIRCLED LATIN CAPITAL LETTER H +02B0 ; [.2075.0020.0014] # MODIFIER LETTER SMALL H +2095 ; [.2075.0020.0015] # LATIN SUBSCRIPT SMALL LETTER H +1D34 ; [.2075.0020.001D] # MODIFIER LETTER CAPITAL H +1F137 ; [.2075.0020.001D] # SQUARED LATIN CAPITAL LETTER H +1F177 ; [.2075.0020.001D] # NEGATIVE SQUARED LATIN CAPITAL LETTER H +0125 ; [.2075.0020.0002][.0000.0027.0002] # LATIN SMALL LETTER H WITH CIRCUMFLEX +0124 ; [.2075.0020.0008][.0000.0027.0002] # LATIN CAPITAL LETTER H WITH CIRCUMFLEX +021F ; [.2075.0020.0002][.0000.0028.0002] # LATIN SMALL LETTER H WITH CARON +021E ; [.2075.0020.0008][.0000.0028.0002] # LATIN CAPITAL LETTER H WITH CARON +1E27 ; [.2075.0020.0002][.0000.002B.0002] # LATIN SMALL LETTER H WITH DIAERESIS +1E26 ; [.2075.0020.0008][.0000.002B.0002] # LATIN CAPITAL LETTER H WITH DIAERESIS +1E23 ; [.2075.0020.0002][.0000.002E.0002] # LATIN SMALL LETTER H WITH DOT ABOVE +1E22 ; [.2075.0020.0008][.0000.002E.0002] # LATIN CAPITAL LETTER H WITH DOT ABOVE +1E29 ; [.2075.0020.0002][.0000.0030.0002] # LATIN SMALL LETTER H WITH CEDILLA +1E28 ; [.2075.0020.0008][.0000.0030.0002] # LATIN CAPITAL LETTER H WITH CEDILLA +0127 ; [.2075.0020.0002][.0000.0039.0002] # LATIN SMALL LETTER H WITH STROKE +210F ; [.2075.0020.0002][.0000.0039.0002] # PLANCK CONSTANT OVER TWO PI +0126 ; [.2075.0020.0008][.0000.0039.0002] # LATIN CAPITAL LETTER H WITH STROKE +A7F8 ; [.2075.0020.0014][.0000.0039.0014] # MODIFIER LETTER CAPITAL H WITH STROKE +1E25 ; [.2075.0020.0002][.0000.0042.0002] # LATIN SMALL LETTER H WITH DOT BELOW +1E24 ; [.2075.0020.0008][.0000.0042.0002] # LATIN CAPITAL LETTER H WITH DOT BELOW +1E2B ; [.2075.0020.0002][.0000.0047.0002] # LATIN SMALL LETTER H WITH BREVE BELOW +1E2A ; [.2075.0020.0008][.0000.0047.0002] # LATIN CAPITAL LETTER H WITH BREVE BELOW +1E96 ; [.2075.0020.0002][.0000.0049.0002] # LATIN SMALL LETTER H WITH LINE BELOW +33CA ; [.2075.0020.001C][.1FA2.0020.001C] # SQUARE HA +1F1A6 ; [.2075.0020.001D][.1FD6.0020.001C] # SQUARED HC +1F1A7 ; [.2075.0020.001D][.1FEB.0020.001C][.2193.0020.001D] # SQUARED HDR +32CC ; [.2075.0020.001D][.2051.0020.001C] # SQUARE HG +1F1A8 ; [.2075.0020.001D][.2090.0020.001C][*0209.0020.001C][.2193.0020.001D][.2007.0020.001C][.21D2.0020.001C] # SQUARED HI-RES +33CB ; [.2075.0020.001D][.216B.0020.001D] # SQUARE HP +3371 ; [.2075.0020.001C][.216B.0020.001D][.1FA2.0020.001C] # SQUARE HPA +1F14A ; [.2075.0020.001D][.2247.0020.001D] # SQUARED HV +3390 ; [.2075.0020.001D][.2286.0020.001C] # SQUARE HZ +029C ; [.2079.0020.0002] # LATIN LETTER SMALL CAPITAL H +0195 ; [.207D.0020.0002] # LATIN SMALL LETTER HV +01F6 ; [.207D.0020.0008] # LATIN CAPITAL LETTER HWAIR +A795 ; [.2081.0020.0002] # LATIN SMALL LETTER H WITH PALATAL HOOK +0266 ; [.2082.0020.0002] # LATIN SMALL LETTER H WITH HOOK +A7AA ; [.2082.0020.0008] # LATIN CAPITAL LETTER H WITH HOOK +02B1 ; [.2082.0020.0014] # MODIFIER LETTER SMALL H WITH HOOK +2C68 ; [.2086.0020.0002] # LATIN SMALL LETTER H WITH DESCENDER +2C67 ; [.2086.0020.0008] # LATIN CAPITAL LETTER H WITH DESCENDER +2C76 ; [.2087.0020.0002] # LATIN SMALL LETTER HALF H +2C75 ; [.2087.0020.0008] # LATIN CAPITAL LETTER HALF H +A7F6 ; [.2088.0020.0002] # LATIN SMALL LETTER REVERSED HALF H +A7F5 ; [.2088.0020.0008] # LATIN CAPITAL LETTER REVERSED HALF H +A727 ; [.2089.0020.0002] # LATIN SMALL LETTER HENG +A726 ; [.2089.0020.0008] # LATIN CAPITAL LETTER HENG +AB5C ; [.2089.0020.0014] # MODIFIER LETTER SMALL HENG +0267 ; [.208A.0020.0002] # LATIN SMALL LETTER HENG WITH HOOK +02BB ; [.208E.0020.0002] # MODIFIER LETTER TURNED COMMA +02BD ; [.208F.0020.0002] # MODIFIER LETTER REVERSED COMMA +0069 ; [.2090.0020.0002] # LATIN SMALL LETTER I +FF49 ; [.2090.0020.0003] # FULLWIDTH LATIN SMALL LETTER I +0365 ; [.2090.0020.0004] # COMBINING LATIN SMALL LETTER I +2170 ; [.2090.0020.0004] # SMALL ROMAN NUMERAL ONE +24A4 ; [*0328.0020.0004][.2090.0020.0004][*0329.0020.0004] # PARENTHESIZED LATIN SMALL LETTER I +2139 ; [.2090.0020.0005] # INFORMATION SOURCE +2148 ; [.2090.0020.0005] # DOUBLE-STRUCK ITALIC SMALL I +1D422 ; [.2090.0020.0005] # MATHEMATICAL BOLD SMALL I +1D456 ; [.2090.0020.0005] # MATHEMATICAL ITALIC SMALL I +1D48A ; [.2090.0020.0005] # MATHEMATICAL BOLD ITALIC SMALL I +1D4BE ; [.2090.0020.0005] # MATHEMATICAL SCRIPT SMALL I +1D4F2 ; [.2090.0020.0005] # MATHEMATICAL BOLD SCRIPT SMALL I +1D526 ; [.2090.0020.0005] # MATHEMATICAL FRAKTUR SMALL I +1D55A ; [.2090.0020.0005] # MATHEMATICAL DOUBLE-STRUCK SMALL I +1D58E ; [.2090.0020.0005] # MATHEMATICAL BOLD FRAKTUR SMALL I +1D5C2 ; [.2090.0020.0005] # MATHEMATICAL SANS-SERIF SMALL I +1D5F6 ; [.2090.0020.0005] # MATHEMATICAL SANS-SERIF BOLD SMALL I +1D62A ; [.2090.0020.0005] # MATHEMATICAL SANS-SERIF ITALIC SMALL I +1D65E ; [.2090.0020.0005] # MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL I +1D692 ; [.2090.0020.0005] # MATHEMATICAL MONOSPACE SMALL I +24D8 ; [.2090.0020.0006] # CIRCLED LATIN SMALL LETTER I +0049 ; [.2090.0020.0008] # LATIN CAPITAL LETTER I +FF29 ; [.2090.0020.0009] # FULLWIDTH LATIN CAPITAL LETTER I +2160 ; [.2090.0020.000A] # ROMAN NUMERAL ONE +1F118 ; [*0328.0020.0004][.2090.0020.000A][*0329.0020.0004] # PARENTHESIZED LATIN CAPITAL LETTER I +2110 ; [.2090.0020.000B] # SCRIPT CAPITAL I +2111 ; [.2090.0020.000B] # BLACK-LETTER CAPITAL I +1D408 ; [.2090.0020.000B] # MATHEMATICAL BOLD CAPITAL I +1D43C ; [.2090.0020.000B] # MATHEMATICAL ITALIC CAPITAL I +1D470 ; [.2090.0020.000B] # MATHEMATICAL BOLD ITALIC CAPITAL I +1D4D8 ; [.2090.0020.000B] # MATHEMATICAL BOLD SCRIPT CAPITAL I +1D540 ; [.2090.0020.000B] # MATHEMATICAL DOUBLE-STRUCK CAPITAL I +1D574 ; [.2090.0020.000B] # MATHEMATICAL BOLD FRAKTUR CAPITAL I +1D5A8 ; [.2090.0020.000B] # MATHEMATICAL SANS-SERIF CAPITAL I +1D5DC ; [.2090.0020.000B] # MATHEMATICAL SANS-SERIF BOLD CAPITAL I +1D610 ; [.2090.0020.000B] # MATHEMATICAL SANS-SERIF ITALIC CAPITAL I +1D644 ; [.2090.0020.000B] # MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL I +1D678 ; [.2090.0020.000B] # MATHEMATICAL MONOSPACE CAPITAL I +24BE ; [.2090.0020.000C] # CIRCLED LATIN CAPITAL LETTER I +1F158 ; [.2090.0020.000C] # NEGATIVE CIRCLED LATIN CAPITAL LETTER I +2071 ; [.2090.0020.0014] # SUPERSCRIPT LATIN SMALL LETTER I +1D62 ; [.2090.0020.0015] # LATIN SUBSCRIPT SMALL LETTER I +1D35 ; [.2090.0020.001D] # MODIFIER LETTER CAPITAL I +1F138 ; [.2090.0020.001D] # SQUARED LATIN CAPITAL LETTER I +1F178 ; [.2090.0020.001D] # NEGATIVE SQUARED LATIN CAPITAL LETTER I +00ED ; [.2090.0020.0002][.0000.0024.0002] # LATIN SMALL LETTER I WITH ACUTE +00CD ; [.2090.0020.0008][.0000.0024.0002] # LATIN CAPITAL LETTER I WITH ACUTE +00EC ; [.2090.0020.0002][.0000.0025.0002] # LATIN SMALL LETTER I WITH GRAVE +00CC ; [.2090.0020.0008][.0000.0025.0002] # LATIN CAPITAL LETTER I WITH GRAVE +012D ; [.2090.0020.0002][.0000.0026.0002] # LATIN SMALL LETTER I WITH BREVE +012C ; [.2090.0020.0008][.0000.0026.0002] # LATIN CAPITAL LETTER I WITH BREVE +00EE ; [.2090.0020.0002][.0000.0027.0002] # LATIN SMALL LETTER I WITH CIRCUMFLEX +00CE ; [.2090.0020.0008][.0000.0027.0002] # LATIN CAPITAL LETTER I WITH CIRCUMFLEX +01D0 ; [.2090.0020.0002][.0000.0028.0002] # LATIN SMALL LETTER I WITH CARON +01CF ; [.2090.0020.0008][.0000.0028.0002] # LATIN CAPITAL LETTER I WITH CARON +00EF ; [.2090.0020.0002][.0000.002B.0002] # LATIN SMALL LETTER I WITH DIAERESIS +00CF ; [.2090.0020.0008][.0000.002B.0002] # LATIN CAPITAL LETTER I WITH DIAERESIS +1E2F ; [.2090.0020.0002][.0000.002B.0002][.0000.0024.0002] # LATIN SMALL LETTER I WITH DIAERESIS AND ACUTE +1E2E ; [.2090.0020.0008][.0000.002B.0002][.0000.0024.0002] # LATIN CAPITAL LETTER I WITH DIAERESIS AND ACUTE +0129 ; [.2090.0020.0002][.0000.002D.0002] # LATIN SMALL LETTER I WITH TILDE +0128 ; [.2090.0020.0008][.0000.002D.0002] # LATIN CAPITAL LETTER I WITH TILDE +0130 ; [.2090.0020.0008][.0000.002E.0002] # LATIN CAPITAL LETTER I WITH DOT ABOVE +012F ; [.2090.0020.0002][.0000.0031.0002] # LATIN SMALL LETTER I WITH OGONEK +012E ; [.2090.0020.0008][.0000.0031.0002] # LATIN CAPITAL LETTER I WITH OGONEK +012B ; [.2090.0020.0002][.0000.0032.0002] # LATIN SMALL LETTER I WITH MACRON +012A ; [.2090.0020.0008][.0000.0032.0002] # LATIN CAPITAL LETTER I WITH MACRON +1EC9 ; [.2090.0020.0002][.0000.003B.0002] # LATIN SMALL LETTER I WITH HOOK ABOVE +1EC8 ; [.2090.0020.0008][.0000.003B.0002] # LATIN CAPITAL LETTER I WITH HOOK ABOVE +0209 ; [.2090.0020.0002][.0000.003C.0002] # LATIN SMALL LETTER I WITH DOUBLE GRAVE +0208 ; [.2090.0020.0008][.0000.003C.0002] # LATIN CAPITAL LETTER I WITH DOUBLE GRAVE +020B ; [.2090.0020.0002][.0000.003E.0002] # LATIN SMALL LETTER I WITH INVERTED BREVE +020A ; [.2090.0020.0008][.0000.003E.0002] # LATIN CAPITAL LETTER I WITH INVERTED BREVE +1ECB ; [.2090.0020.0002][.0000.0042.0002] # LATIN SMALL LETTER I WITH DOT BELOW +1ECA ; [.2090.0020.0008][.0000.0042.0002] # LATIN CAPITAL LETTER I WITH DOT BELOW +1E2D ; [.2090.0020.0002][.0000.0048.0002] # LATIN SMALL LETTER I WITH TILDE BELOW +1E2C ; [.2090.0020.0008][.0000.0048.0002] # LATIN CAPITAL LETTER I WITH TILDE BELOW +1F18B ; [.2090.0020.001D][.1FD6.0020.001D] # NEGATIVE SQUARED IC +1F194 ; [.2090.0020.001D][.1FEB.0020.001D] # SQUARED ID +2171 ; [.2090.0020.0004][.2090.0020.0004] # SMALL ROMAN NUMERAL TWO +2161 ; [.2090.0020.000A][.2090.0020.000A] # ROMAN NUMERAL TWO +2172 ; [.2090.0020.0004][.2090.0020.0004][.2090.0020.0004] # SMALL ROMAN NUMERAL THREE +2162 ; [.2090.0020.000A][.2090.0020.000A][.2090.0020.000A] # ROMAN NUMERAL THREE +0133 ; [.2090.0020.0004][.20AB.0020.0004] # LATIN SMALL LIGATURE IJ +0132 ; [.2090.0020.000A][.20AB.0020.000A] # LATIN CAPITAL LIGATURE IJ +33CC ; [.2090.0020.001C][.2118.0020.001C] # SQUARE IN +337A ; [.2090.0020.001D][.2217.0020.001D] # SQUARE IU +2173 ; [.2090.0020.0004][.2247.0020.0004] # SMALL ROMAN NUMERAL FOUR +2163 ; [.2090.0020.000A][.2247.0020.000A] # ROMAN NUMERAL FOUR +2178 ; [.2090.0020.0004][.2264.0020.0004] # SMALL ROMAN NUMERAL NINE +2168 ; [.2090.0020.000A][.2264.0020.000A] # ROMAN NUMERAL NINE +0131 ; [.2094.0020.0002] # LATIN SMALL LETTER DOTLESS I +1D6A4 ; [.2094.0020.0005] # MATHEMATICAL ITALIC SMALL DOTLESS I +026A ; [.2098.0020.0002] # LATIN LETTER SMALL CAPITAL I +A7AE ; [.2098.0020.0008] # LATIN CAPITAL LETTER SMALL CAPITAL I +1DA6 ; [.2098.0020.0014] # MODIFIER LETTER SMALL CAPITAL I +A7FE ; [.209C.0020.0002] # LATIN EPIGRAPHIC LETTER I LONGA +A7F7 ; [.209D.0020.0002] # LATIN EPIGRAPHIC LETTER SIDEWAYS I +1D09 ; [.209E.0020.0002] # LATIN SMALL LETTER TURNED I +1D4E ; [.209E.0020.0014] # MODIFIER LETTER SMALL TURNED I +0268 ; [.209F.0020.0002] # LATIN SMALL LETTER I WITH STROKE +0197 ; [.209F.0020.0008] # LATIN CAPITAL LETTER I WITH STROKE +1DA4 ; [.209F.0020.0014] # MODIFIER LETTER SMALL I WITH STROKE +1D7B ; [.20A3.0020.0002] # LATIN SMALL CAPITAL LETTER I WITH STROKE +1DA7 ; [.20A3.0020.0014] # MODIFIER LETTER SMALL CAPITAL I WITH STROKE +1D96 ; [.20A4.0020.0002] # LATIN SMALL LETTER I WITH RETROFLEX HOOK +A7BD ; [.20A5.0020.0002] # LATIN SMALL LETTER GLOTTAL I +A7BC ; [.20A5.0020.0008] # LATIN CAPITAL LETTER GLOTTAL I +0269 ; [.20A6.0020.0002] # LATIN SMALL LETTER IOTA +0196 ; [.20A6.0020.0008] # LATIN CAPITAL LETTER IOTA +1DA5 ; [.20A6.0020.0014] # MODIFIER LETTER SMALL IOTA +1D7C ; [.20AA.0020.0002] # LATIN SMALL LETTER IOTA WITH STROKE +006A ; [.20AB.0020.0002] # LATIN SMALL LETTER J +FF4A ; [.20AB.0020.0003] # FULLWIDTH LATIN SMALL LETTER J +24A5 ; [*0328.0020.0004][.20AB.0020.0004][*0329.0020.0004] # PARENTHESIZED LATIN SMALL LETTER J +2149 ; [.20AB.0020.0005] # DOUBLE-STRUCK ITALIC SMALL J +1D423 ; [.20AB.0020.0005] # MATHEMATICAL BOLD SMALL J +1D457 ; [.20AB.0020.0005] # MATHEMATICAL ITALIC SMALL J +1D48B ; [.20AB.0020.0005] # MATHEMATICAL BOLD ITALIC SMALL J +1D4BF ; [.20AB.0020.0005] # MATHEMATICAL SCRIPT SMALL J +1D4F3 ; [.20AB.0020.0005] # MATHEMATICAL BOLD SCRIPT SMALL J +1D527 ; [.20AB.0020.0005] # MATHEMATICAL FRAKTUR SMALL J +1D55B ; [.20AB.0020.0005] # MATHEMATICAL DOUBLE-STRUCK SMALL J +1D58F ; [.20AB.0020.0005] # MATHEMATICAL BOLD FRAKTUR SMALL J +1D5C3 ; [.20AB.0020.0005] # MATHEMATICAL SANS-SERIF SMALL J +1D5F7 ; [.20AB.0020.0005] # MATHEMATICAL SANS-SERIF BOLD SMALL J +1D62B ; [.20AB.0020.0005] # MATHEMATICAL SANS-SERIF ITALIC SMALL J +1D65F ; [.20AB.0020.0005] # MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL J +1D693 ; [.20AB.0020.0005] # MATHEMATICAL MONOSPACE SMALL J +24D9 ; [.20AB.0020.0006] # CIRCLED LATIN SMALL LETTER J +004A ; [.20AB.0020.0008] # LATIN CAPITAL LETTER J +FF2A ; [.20AB.0020.0009] # FULLWIDTH LATIN CAPITAL LETTER J +1F119 ; [*0328.0020.0004][.20AB.0020.000A][*0329.0020.0004] # PARENTHESIZED LATIN CAPITAL LETTER J +1D409 ; [.20AB.0020.000B] # MATHEMATICAL BOLD CAPITAL J +1D43D ; [.20AB.0020.000B] # MATHEMATICAL ITALIC CAPITAL J +1D471 ; [.20AB.0020.000B] # MATHEMATICAL BOLD ITALIC CAPITAL J +1D4A5 ; [.20AB.0020.000B] # MATHEMATICAL SCRIPT CAPITAL J +1D4D9 ; [.20AB.0020.000B] # MATHEMATICAL BOLD SCRIPT CAPITAL J +1D50D ; [.20AB.0020.000B] # MATHEMATICAL FRAKTUR CAPITAL J +1D541 ; [.20AB.0020.000B] # MATHEMATICAL DOUBLE-STRUCK CAPITAL J +1D575 ; [.20AB.0020.000B] # MATHEMATICAL BOLD FRAKTUR CAPITAL J +1D5A9 ; [.20AB.0020.000B] # MATHEMATICAL SANS-SERIF CAPITAL J +1D5DD ; [.20AB.0020.000B] # MATHEMATICAL SANS-SERIF BOLD CAPITAL J +1D611 ; [.20AB.0020.000B] # MATHEMATICAL SANS-SERIF ITALIC CAPITAL J +1D645 ; [.20AB.0020.000B] # MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL J +1D679 ; [.20AB.0020.000B] # MATHEMATICAL MONOSPACE CAPITAL J +24BF ; [.20AB.0020.000C] # CIRCLED LATIN CAPITAL LETTER J +1F159 ; [.20AB.0020.000C] # NEGATIVE CIRCLED LATIN CAPITAL LETTER J +02B2 ; [.20AB.0020.0014] # MODIFIER LETTER SMALL J +2C7C ; [.20AB.0020.0015] # LATIN SUBSCRIPT SMALL LETTER J +1D36 ; [.20AB.0020.001D] # MODIFIER LETTER CAPITAL J +1F139 ; [.20AB.0020.001D] # SQUARED LATIN CAPITAL LETTER J +1F179 ; [.20AB.0020.001D] # NEGATIVE SQUARED LATIN CAPITAL LETTER J +0135 ; [.20AB.0020.0002][.0000.0027.0002] # LATIN SMALL LETTER J WITH CIRCUMFLEX +0134 ; [.20AB.0020.0008][.0000.0027.0002] # LATIN CAPITAL LETTER J WITH CIRCUMFLEX +01F0 ; [.20AB.0020.0002][.0000.0028.0002] # LATIN SMALL LETTER J WITH CARON +0237 ; [.20AF.0020.0002] # LATIN SMALL LETTER DOTLESS J +1D6A5 ; [.20AF.0020.0005] # MATHEMATICAL ITALIC SMALL DOTLESS J +1D0A ; [.20B3.0020.0002] # LATIN LETTER SMALL CAPITAL J +0249 ; [.20B4.0020.0002] # LATIN SMALL LETTER J WITH STROKE +0248 ; [.20B4.0020.0008] # LATIN CAPITAL LETTER J WITH STROKE +029D ; [.20B8.0020.0002] # LATIN SMALL LETTER J WITH CROSSED-TAIL +A7B2 ; [.20B8.0020.0008] # LATIN CAPITAL LETTER J WITH CROSSED-TAIL +1DA8 ; [.20B8.0020.0014] # MODIFIER LETTER SMALL J WITH CROSSED-TAIL +025F ; [.20BC.0020.0002] # LATIN SMALL LETTER DOTLESS J WITH STROKE +1DA1 ; [.20BC.0020.0014] # MODIFIER LETTER SMALL DOTLESS J WITH STROKE +0284 ; [.20C0.0020.0002] # LATIN SMALL LETTER DOTLESS J WITH STROKE AND HOOK +006B ; [.20C4.0020.0002] # LATIN SMALL LETTER K +FF4B ; [.20C4.0020.0003] # FULLWIDTH LATIN SMALL LETTER K +1DDC ; [.20C4.0020.0004] # COMBINING LATIN SMALL LETTER K +24A6 ; [*0328.0020.0004][.20C4.0020.0004][*0329.0020.0004] # PARENTHESIZED LATIN SMALL LETTER K +1D424 ; [.20C4.0020.0005] # MATHEMATICAL BOLD SMALL K +1D458 ; [.20C4.0020.0005] # MATHEMATICAL ITALIC SMALL K +1D48C ; [.20C4.0020.0005] # MATHEMATICAL BOLD ITALIC SMALL K +1D4C0 ; [.20C4.0020.0005] # MATHEMATICAL SCRIPT SMALL K +1D4F4 ; [.20C4.0020.0005] # MATHEMATICAL BOLD SCRIPT SMALL K +1D528 ; [.20C4.0020.0005] # MATHEMATICAL FRAKTUR SMALL K +1D55C ; [.20C4.0020.0005] # MATHEMATICAL DOUBLE-STRUCK SMALL K +1D590 ; [.20C4.0020.0005] # MATHEMATICAL BOLD FRAKTUR SMALL K +1D5C4 ; [.20C4.0020.0005] # MATHEMATICAL SANS-SERIF SMALL K +1D5F8 ; [.20C4.0020.0005] # MATHEMATICAL SANS-SERIF BOLD SMALL K +1D62C ; [.20C4.0020.0005] # MATHEMATICAL SANS-SERIF ITALIC SMALL K +1D660 ; [.20C4.0020.0005] # MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL K +1D694 ; [.20C4.0020.0005] # MATHEMATICAL MONOSPACE SMALL K +24DA ; [.20C4.0020.0006] # CIRCLED LATIN SMALL LETTER K +004B ; [.20C4.0020.0008] # LATIN CAPITAL LETTER K +212A ; [.20C4.0020.0008] # KELVIN SIGN +FF2B ; [.20C4.0020.0009] # FULLWIDTH LATIN CAPITAL LETTER K +1F11A ; [*0328.0020.0004][.20C4.0020.000A][*0329.0020.0004] # PARENTHESIZED LATIN CAPITAL LETTER K +1D40A ; [.20C4.0020.000B] # MATHEMATICAL BOLD CAPITAL K +1D43E ; [.20C4.0020.000B] # MATHEMATICAL ITALIC CAPITAL K +1D472 ; [.20C4.0020.000B] # MATHEMATICAL BOLD ITALIC CAPITAL K +1D4A6 ; [.20C4.0020.000B] # MATHEMATICAL SCRIPT CAPITAL K +1D4DA ; [.20C4.0020.000B] # MATHEMATICAL BOLD SCRIPT CAPITAL K +1D50E ; [.20C4.0020.000B] # MATHEMATICAL FRAKTUR CAPITAL K +1D542 ; [.20C4.0020.000B] # MATHEMATICAL DOUBLE-STRUCK CAPITAL K +1D576 ; [.20C4.0020.000B] # MATHEMATICAL BOLD FRAKTUR CAPITAL K +1D5AA ; [.20C4.0020.000B] # MATHEMATICAL SANS-SERIF CAPITAL K +1D5DE ; [.20C4.0020.000B] # MATHEMATICAL SANS-SERIF BOLD CAPITAL K +1D612 ; [.20C4.0020.000B] # MATHEMATICAL SANS-SERIF ITALIC CAPITAL K +1D646 ; [.20C4.0020.000B] # MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL K +1D67A ; [.20C4.0020.000B] # MATHEMATICAL MONOSPACE CAPITAL K +24C0 ; [.20C4.0020.000C] # CIRCLED LATIN CAPITAL LETTER K +1F15A ; [.20C4.0020.000C] # NEGATIVE CIRCLED LATIN CAPITAL LETTER K +1D4F ; [.20C4.0020.0014] # MODIFIER LETTER SMALL K +2096 ; [.20C4.0020.0015] # LATIN SUBSCRIPT SMALL LETTER K +1D37 ; [.20C4.0020.001D] # MODIFIER LETTER CAPITAL K +1F13A ; [.20C4.0020.001D] # SQUARED LATIN CAPITAL LETTER K +1F17A ; [.20C4.0020.001D] # NEGATIVE SQUARED LATIN CAPITAL LETTER K +1E31 ; [.20C4.0020.0002][.0000.0024.0002] # LATIN SMALL LETTER K WITH ACUTE +1E30 ; [.20C4.0020.0008][.0000.0024.0002] # LATIN CAPITAL LETTER K WITH ACUTE +01E9 ; [.20C4.0020.0002][.0000.0028.0002] # LATIN SMALL LETTER K WITH CARON +01E8 ; [.20C4.0020.0008][.0000.0028.0002] # LATIN CAPITAL LETTER K WITH CARON +0137 ; [.20C4.0020.0002][.0000.0030.0002] # LATIN SMALL LETTER K WITH CEDILLA +0136 ; [.20C4.0020.0008][.0000.0030.0002] # LATIN CAPITAL LETTER K WITH CEDILLA +A7A3 ; [.20C4.0020.0004][.0000.0035.0004] # LATIN SMALL LETTER K WITH OBLIQUE STROKE +A7A2 ; [.20C4.0020.000A][.0000.0035.0004] # LATIN CAPITAL LETTER K WITH OBLIQUE STROKE +1E33 ; [.20C4.0020.0002][.0000.0042.0002] # LATIN SMALL LETTER K WITH DOT BELOW +1E32 ; [.20C4.0020.0008][.0000.0042.0002] # LATIN CAPITAL LETTER K WITH DOT BELOW +1E35 ; [.20C4.0020.0002][.0000.0049.0002] # LATIN SMALL LETTER K WITH LINE BELOW +1E34 ; [.20C4.0020.0008][.0000.0049.0002] # LATIN CAPITAL LETTER K WITH LINE BELOW +3384 ; [.20C4.0020.001C][.1FA2.0020.001D] # SQUARE KA +3385 ; [.20C4.0020.001D][.1FBC.0020.001D] # SQUARE KB +3389 ; [.20C4.0020.001C][.1FD6.0020.001C][.1FA2.0020.001C][.20D6.0020.001C] # SQUARE KCAL +338F ; [.20C4.0020.001C][.2051.0020.001C] # SQUARE KG +3391 ; [.20C4.0020.001C][.2075.0020.001D][.2286.0020.001C] # SQUARE KHZ +33CD ; [.20C4.0020.001D][.20C4.0020.001D] # SQUARE KK +3398 ; [.20C4.0020.001C][.20D6.0020.001C] # SQUARE KL +339E ; [.20C4.0020.001C][.2109.0020.001C] # SQUARE KM +33CE ; [.20C4.0020.001D][.2109.0020.001D] # SQUARE KM CAPITAL +33A2 ; [.20C4.0020.001C][.2109.0020.001C][.1F9A.0020.001C] # SQUARE KM SQUARED +33A6 ; [.20C4.0020.001C][.2109.0020.001C][.1F9B.0020.001C] # SQUARE KM CUBED +33AA ; [.20C4.0020.001C][.216B.0020.001D][.1FA2.0020.001C] # SQUARE KPA +33CF ; [.20C4.0020.001C][.21F7.0020.001C] # SQUARE KT +33B8 ; [.20C4.0020.001C][.2247.0020.001D] # SQUARE KV +33BE ; [.20C4.0020.001C][.2259.0020.001D] # SQUARE KW +33C0 ; [.20C4.0020.001C][.2346.0020.001D] # SQUARE K OHM +1D0B ; [.20C8.0020.0002] # LATIN LETTER SMALL CAPITAL K +1D84 ; [.20C9.0020.0002] # LATIN SMALL LETTER K WITH PALATAL HOOK +0199 ; [.20CA.0020.0002] # LATIN SMALL LETTER K WITH HOOK +0198 ; [.20CA.0020.0008] # LATIN CAPITAL LETTER K WITH HOOK +2C6A ; [.20CE.0020.0002] # LATIN SMALL LETTER K WITH DESCENDER +2C69 ; [.20CE.0020.0008] # LATIN CAPITAL LETTER K WITH DESCENDER +A741 ; [.20CF.0020.0002] # LATIN SMALL LETTER K WITH STROKE +A740 ; [.20CF.0020.0008] # LATIN CAPITAL LETTER K WITH STROKE +A743 ; [.20D0.0020.0002] # LATIN SMALL LETTER K WITH DIAGONAL STROKE +A742 ; [.20D0.0020.0008] # LATIN CAPITAL LETTER K WITH DIAGONAL STROKE +A745 ; [.20D1.0020.0002] # LATIN SMALL LETTER K WITH STROKE AND DIAGONAL STROKE +A744 ; [.20D1.0020.0008] # LATIN CAPITAL LETTER K WITH STROKE AND DIAGONAL STROKE +029E ; [.20D2.0020.0002] # LATIN SMALL LETTER TURNED K +A7B0 ; [.20D2.0020.0008] # LATIN CAPITAL LETTER TURNED K +006C ; [.20D6.0020.0002] # LATIN SMALL LETTER L +FF4C ; [.20D6.0020.0003] # FULLWIDTH LATIN SMALL LETTER L +1DDD ; [.20D6.0020.0004] # COMBINING LATIN SMALL LETTER L +217C ; [.20D6.0020.0004] # SMALL ROMAN NUMERAL FIFTY +24A7 ; [*0328.0020.0004][.20D6.0020.0004][*0329.0020.0004] # PARENTHESIZED LATIN SMALL LETTER L +2113 ; [.20D6.0020.0005] # SCRIPT SMALL L +1D425 ; [.20D6.0020.0005] # MATHEMATICAL BOLD SMALL L +1D459 ; [.20D6.0020.0005] # MATHEMATICAL ITALIC SMALL L +1D48D ; [.20D6.0020.0005] # MATHEMATICAL BOLD ITALIC SMALL L +1D4C1 ; [.20D6.0020.0005] # MATHEMATICAL SCRIPT SMALL L +1D4F5 ; [.20D6.0020.0005] # MATHEMATICAL BOLD SCRIPT SMALL L +1D529 ; [.20D6.0020.0005] # MATHEMATICAL FRAKTUR SMALL L +1D55D ; [.20D6.0020.0005] # MATHEMATICAL DOUBLE-STRUCK SMALL L +1D591 ; [.20D6.0020.0005] # MATHEMATICAL BOLD FRAKTUR SMALL L +1D5C5 ; [.20D6.0020.0005] # MATHEMATICAL SANS-SERIF SMALL L +1D5F9 ; [.20D6.0020.0005] # MATHEMATICAL SANS-SERIF BOLD SMALL L +1D62D ; [.20D6.0020.0005] # MATHEMATICAL SANS-SERIF ITALIC SMALL L +1D661 ; [.20D6.0020.0005] # MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL L +1D695 ; [.20D6.0020.0005] # MATHEMATICAL MONOSPACE SMALL L +24DB ; [.20D6.0020.0006] # CIRCLED LATIN SMALL LETTER L +004C ; [.20D6.0020.0008] # LATIN CAPITAL LETTER L +FF2C ; [.20D6.0020.0009] # FULLWIDTH LATIN CAPITAL LETTER L +216C ; [.20D6.0020.000A] # ROMAN NUMERAL FIFTY +1F11B ; [*0328.0020.0004][.20D6.0020.000A][*0329.0020.0004] # PARENTHESIZED LATIN CAPITAL LETTER L +2112 ; [.20D6.0020.000B] # SCRIPT CAPITAL L +1D40B ; [.20D6.0020.000B] # MATHEMATICAL BOLD CAPITAL L +1D43F ; [.20D6.0020.000B] # MATHEMATICAL ITALIC CAPITAL L +1D473 ; [.20D6.0020.000B] # MATHEMATICAL BOLD ITALIC CAPITAL L +1D4DB ; [.20D6.0020.000B] # MATHEMATICAL BOLD SCRIPT CAPITAL L +1D50F ; [.20D6.0020.000B] # MATHEMATICAL FRAKTUR CAPITAL L +1D543 ; [.20D6.0020.000B] # MATHEMATICAL DOUBLE-STRUCK CAPITAL L +1D577 ; [.20D6.0020.000B] # MATHEMATICAL BOLD FRAKTUR CAPITAL L +1D5AB ; [.20D6.0020.000B] # MATHEMATICAL SANS-SERIF CAPITAL L +1D5DF ; [.20D6.0020.000B] # MATHEMATICAL SANS-SERIF BOLD CAPITAL L +1D613 ; [.20D6.0020.000B] # MATHEMATICAL SANS-SERIF ITALIC CAPITAL L +1D647 ; [.20D6.0020.000B] # MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL L +1D67B ; [.20D6.0020.000B] # MATHEMATICAL MONOSPACE CAPITAL L +24C1 ; [.20D6.0020.000C] # CIRCLED LATIN CAPITAL LETTER L +1F15B ; [.20D6.0020.000C] # NEGATIVE CIRCLED LATIN CAPITAL LETTER L +02E1 ; [.20D6.0020.0014] # MODIFIER LETTER SMALL L +2097 ; [.20D6.0020.0015] # LATIN SUBSCRIPT SMALL LETTER L +1D38 ; [.20D6.0020.001D] # MODIFIER LETTER CAPITAL L +1F13B ; [.20D6.0020.001D] # SQUARED LATIN CAPITAL LETTER L +1F17B ; [.20D6.0020.001D] # NEGATIVE SQUARED LATIN CAPITAL LETTER L +013A ; [.20D6.0020.0002][.0000.0024.0002] # LATIN SMALL LETTER L WITH ACUTE +0139 ; [.20D6.0020.0008][.0000.0024.0002] # LATIN CAPITAL LETTER L WITH ACUTE +013E ; [.20D6.0020.0002][.0000.0028.0002] # LATIN SMALL LETTER L WITH CARON +013D ; [.20D6.0020.0008][.0000.0028.0002] # LATIN CAPITAL LETTER L WITH CARON +013C ; [.20D6.0020.0002][.0000.0030.0002] # LATIN SMALL LETTER L WITH CEDILLA +013B ; [.20D6.0020.0008][.0000.0030.0002] # LATIN CAPITAL LETTER L WITH CEDILLA +0142 ; [.20D6.0020.0002][.0000.0039.0002] # LATIN SMALL LETTER L WITH STROKE +0141 ; [.20D6.0020.0008][.0000.0039.0002] # LATIN CAPITAL LETTER L WITH STROKE +1E37 ; [.20D6.0020.0002][.0000.0042.0002] # LATIN SMALL LETTER L WITH DOT BELOW +1E36 ; [.20D6.0020.0008][.0000.0042.0002] # LATIN CAPITAL LETTER L WITH DOT BELOW +1E39 ; [.20D6.0020.0002][.0000.0042.0002][.0000.0032.0002] # LATIN SMALL LETTER L WITH DOT BELOW AND MACRON +1E38 ; [.20D6.0020.0008][.0000.0042.0002][.0000.0032.0002] # LATIN CAPITAL LETTER L WITH DOT BELOW AND MACRON +1E3D ; [.20D6.0020.0002][.0000.0046.0002] # LATIN SMALL LETTER L WITH CIRCUMFLEX BELOW +1E3C ; [.20D6.0020.0008][.0000.0046.0002] # LATIN CAPITAL LETTER L WITH CIRCUMFLEX BELOW +1E3B ; [.20D6.0020.0002][.0000.0049.0002] # LATIN SMALL LETTER L WITH LINE BELOW +1E3A ; [.20D6.0020.0008][.0000.0049.0002] # LATIN CAPITAL LETTER L WITH LINE BELOW +0140 ; [.20D6.0020.0002][.0000.0118.0002] # LATIN SMALL LETTER L WITH MIDDLE DOT +006C 00B7 ; [.20D6.0020.0002][.0000.0118.0002] # LATIN SMALL LETTER L WITH MIDDLE DOT +006C 0387 ; [.20D6.0020.0002][.0000.0118.0002] # LATIN SMALL LETTER L WITH MIDDLE DOT +013F ; [.20D6.0020.0008][.0000.0118.0002] # LATIN CAPITAL LETTER L WITH MIDDLE DOT +004C 00B7 ; [.20D6.0020.0008][.0000.0118.0002] # LATIN CAPITAL LETTER L WITH MIDDLE DOT +004C 0387 ; [.20D6.0020.0008][.0000.0118.0002] # LATIN CAPITAL LETTER L WITH MIDDLE DOT +01C9 ; [.20D6.0020.0004][.20AB.0020.0004] # LATIN SMALL LETTER LJ +01C8 ; [.20D6.0020.000A][.20AB.0020.0004] # LATIN CAPITAL LETTER L WITH SMALL LETTER J +01C7 ; [.20D6.0020.000A][.20AB.0020.000A] # LATIN CAPITAL LETTER LJ +1EFB ; [.20D6.0020.0004][.20D6.0020.0004] # LATIN SMALL LETTER MIDDLE-WELSH LL +1EFA ; [.20D6.0020.000A][.20D6.0020.000A] # LATIN CAPITAL LETTER MIDDLE-WELSH LL +33D0 ; [.20D6.0020.001C][.2109.0020.001C] # SQUARE LM +33D1 ; [.20D6.0020.001C][.2118.0020.001C] # SQUARE LN +33D2 ; [.20D6.0020.001C][.213C.0020.001C][.2051.0020.001C] # SQUARE LOG +1F1A9 ; [.20D6.0020.001D][.213C.0020.001C][.21D2.0020.001C][.21D2.0020.001C][.20D6.0020.001C][.2007.0020.001C][.21D2.0020.001C][.21D2.0020.001C] # SQUARED LOSSLESS +02AA ; [.20D6.0020.0004][.21D2.0020.0004] # LATIN SMALL LETTER LS DIGRAPH +32CF ; [.20D6.0020.001D][.21F7.0020.001D][.1FEB.0020.001D] # LIMITED LIABILITY SIGN +33D3 ; [.20D6.0020.001C][.2264.0020.001C] # SQUARE LX +02AB ; [.20D6.0020.0004][.2286.0020.0004] # LATIN SMALL LETTER LZ DIGRAPH +029F ; [.20DA.0020.0002] # LATIN LETTER SMALL CAPITAL L +1DDE ; [.20DA.0020.0004] # COMBINING LATIN LETTER SMALL CAPITAL L +1DAB ; [.20DA.0020.0014] # MODIFIER LETTER SMALL CAPITAL L +A747 ; [.20DE.0020.0002] # LATIN SMALL LETTER BROKEN L +A746 ; [.20DE.0020.0008] # LATIN CAPITAL LETTER BROKEN L +1D0C ; [.20DF.0020.0002] # LATIN LETTER SMALL CAPITAL L WITH STROKE +A749 ; [.20E0.0020.0002] # LATIN SMALL LETTER L WITH HIGH STROKE +A748 ; [.20E0.0020.0008] # LATIN CAPITAL LETTER L WITH HIGH STROKE +019A ; [.20E1.0020.0002] # LATIN SMALL LETTER L WITH BAR +023D ; [.20E1.0020.0008] # LATIN CAPITAL LETTER L WITH BAR +2C61 ; [.20E5.0020.0002] # LATIN SMALL LETTER L WITH DOUBLE BAR +2C60 ; [.20E5.0020.0008] # LATIN CAPITAL LETTER L WITH DOUBLE BAR +026B ; [.20E6.0020.0002] # LATIN SMALL LETTER L WITH MIDDLE TILDE +2C62 ; [.20E6.0020.0008] # LATIN CAPITAL LETTER L WITH MIDDLE TILDE +AB5E ; [.20E6.0020.0014] # MODIFIER LETTER SMALL L WITH MIDDLE TILDE +AB38 ; [.20EA.0020.0002] # LATIN SMALL LETTER L WITH DOUBLE MIDDLE TILDE +1DEC ; [.20EA.0020.0004] # COMBINING LATIN SMALL LETTER L WITH DOUBLE MIDDLE TILDE +AB39 ; [.20EB.0020.0002] # LATIN SMALL LETTER L WITH MIDDLE RING +026C ; [.20EC.0020.0002] # LATIN SMALL LETTER L WITH BELT +A7AD ; [.20EC.0020.0008] # LATIN CAPITAL LETTER L WITH BELT +AB37 ; [.20F0.0020.0002] # LATIN SMALL LETTER L WITH INVERTED LAZY S +AB5D ; [.20F0.0020.0014] # MODIFIER LETTER SMALL L WITH INVERTED LAZY S +1D85 ; [.20F1.0020.0002] # LATIN SMALL LETTER L WITH PALATAL HOOK +1DAA ; [.20F1.0020.0014] # MODIFIER LETTER SMALL L WITH PALATAL HOOK +026D ; [.20F2.0020.0002] # LATIN SMALL LETTER L WITH RETROFLEX HOOK +1DA9 ; [.20F2.0020.0014] # MODIFIER LETTER SMALL L WITH RETROFLEX HOOK +A78E ; [.20F6.0020.0002] # LATIN SMALL LETTER L WITH RETROFLEX HOOK AND BELT +0234 ; [.20F7.0020.0002] # LATIN SMALL LETTER L WITH CURL +A772 ; [.20FB.0020.0002] # LATIN SMALL LETTER LUM +026E ; [.20FC.0020.0002] # LATIN SMALL LETTER LEZH +A781 ; [.2100.0020.0002] # LATIN SMALL LETTER TURNED L +A780 ; [.2100.0020.0008] # LATIN CAPITAL LETTER TURNED L +019B ; [.2101.0020.0002] # LATIN SMALL LETTER LAMBDA WITH STROKE +028E ; [.2105.0020.0002] # LATIN SMALL LETTER TURNED Y +006D ; [.2109.0020.0002] # LATIN SMALL LETTER M +FF4D ; [.2109.0020.0003] # FULLWIDTH LATIN SMALL LETTER M +036B ; [.2109.0020.0004] # COMBINING LATIN SMALL LETTER M +217F ; [.2109.0020.0004] # SMALL ROMAN NUMERAL ONE THOUSAND +24A8 ; [*0328.0020.0004][.2109.0020.0004][*0329.0020.0004] # PARENTHESIZED LATIN SMALL LETTER M +1D426 ; [.2109.0020.0005] # MATHEMATICAL BOLD SMALL M +1D45A ; [.2109.0020.0005] # MATHEMATICAL ITALIC SMALL M +1D48E ; [.2109.0020.0005] # MATHEMATICAL BOLD ITALIC SMALL M +1D4C2 ; [.2109.0020.0005] # MATHEMATICAL SCRIPT SMALL M +1D4F6 ; [.2109.0020.0005] # MATHEMATICAL BOLD SCRIPT SMALL M +1D52A ; [.2109.0020.0005] # MATHEMATICAL FRAKTUR SMALL M +1D55E ; [.2109.0020.0005] # MATHEMATICAL DOUBLE-STRUCK SMALL M +1D592 ; [.2109.0020.0005] # MATHEMATICAL BOLD FRAKTUR SMALL M +1D5C6 ; [.2109.0020.0005] # MATHEMATICAL SANS-SERIF SMALL M +1D5FA ; [.2109.0020.0005] # MATHEMATICAL SANS-SERIF BOLD SMALL M +1D62E ; [.2109.0020.0005] # MATHEMATICAL SANS-SERIF ITALIC SMALL M +1D662 ; [.2109.0020.0005] # MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL M +1D696 ; [.2109.0020.0005] # MATHEMATICAL MONOSPACE SMALL M +24DC ; [.2109.0020.0006] # CIRCLED LATIN SMALL LETTER M +004D ; [.2109.0020.0008] # LATIN CAPITAL LETTER M +FF2D ; [.2109.0020.0009] # FULLWIDTH LATIN CAPITAL LETTER M +216F ; [.2109.0020.000A] # ROMAN NUMERAL ONE THOUSAND +1F11C ; [*0328.0020.0004][.2109.0020.000A][*0329.0020.0004] # PARENTHESIZED LATIN CAPITAL LETTER M +2133 ; [.2109.0020.000B] # SCRIPT CAPITAL M +1D40C ; [.2109.0020.000B] # MATHEMATICAL BOLD CAPITAL M +1D440 ; [.2109.0020.000B] # MATHEMATICAL ITALIC CAPITAL M +1D474 ; [.2109.0020.000B] # MATHEMATICAL BOLD ITALIC CAPITAL M +1D4DC ; [.2109.0020.000B] # MATHEMATICAL BOLD SCRIPT CAPITAL M +1D510 ; [.2109.0020.000B] # MATHEMATICAL FRAKTUR CAPITAL M +1D544 ; [.2109.0020.000B] # MATHEMATICAL DOUBLE-STRUCK CAPITAL M +1D578 ; [.2109.0020.000B] # MATHEMATICAL BOLD FRAKTUR CAPITAL M +1D5AC ; [.2109.0020.000B] # MATHEMATICAL SANS-SERIF CAPITAL M +1D5E0 ; [.2109.0020.000B] # MATHEMATICAL SANS-SERIF BOLD CAPITAL M +1D614 ; [.2109.0020.000B] # MATHEMATICAL SANS-SERIF ITALIC CAPITAL M +1D648 ; [.2109.0020.000B] # MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL M +1D67C ; [.2109.0020.000B] # MATHEMATICAL MONOSPACE CAPITAL M +24C2 ; [.2109.0020.000C] # CIRCLED LATIN CAPITAL LETTER M +1F15C ; [.2109.0020.000C] # NEGATIVE CIRCLED LATIN CAPITAL LETTER M +1D50 ; [.2109.0020.0014] # MODIFIER LETTER SMALL M +2098 ; [.2109.0020.0015] # LATIN SUBSCRIPT SMALL LETTER M +1D39 ; [.2109.0020.001D] # MODIFIER LETTER CAPITAL M +1F13C ; [.2109.0020.001D] # SQUARED LATIN CAPITAL LETTER M +1F17C ; [.2109.0020.001D] # NEGATIVE SQUARED LATIN CAPITAL LETTER M +1E3F ; [.2109.0020.0002][.0000.0024.0002] # LATIN SMALL LETTER M WITH ACUTE +1E3E ; [.2109.0020.0008][.0000.0024.0002] # LATIN CAPITAL LETTER M WITH ACUTE +1E41 ; [.2109.0020.0002][.0000.002E.0002] # LATIN SMALL LETTER M WITH DOT ABOVE +1E40 ; [.2109.0020.0008][.0000.002E.0002] # LATIN CAPITAL LETTER M WITH DOT ABOVE +1E43 ; [.2109.0020.0002][.0000.0042.0002] # LATIN SMALL LETTER M WITH DOT BELOW +1E42 ; [.2109.0020.0008][.0000.0042.0002] # LATIN CAPITAL LETTER M WITH DOT BELOW +33A1 ; [.2109.0020.001C][.1F9A.0020.001C] # SQUARE M SQUARED +33A5 ; [.2109.0020.001C][.1F9B.0020.001C] # SQUARE M CUBED +3383 ; [.2109.0020.001C][.1FA2.0020.001D] # SQUARE MA +33D4 ; [.2109.0020.001C][.1FBC.0020.001C] # SQUARE MB SMALL +3386 ; [.2109.0020.001D][.1FBC.0020.001D] # SQUARE MB +1F16A ; [.2109.0020.0014][.1FD6.0020.0014] # RAISED MC SIGN +1F16B ; [.2109.0020.0014][.1FEB.0020.0014] # RAISED MD SIGN +338E ; [.2109.0020.001C][.2051.0020.001C] # SQUARE MG +3392 ; [.2109.0020.001D][.2075.0020.001D][.2286.0020.001C] # SQUARE MHZ +33D5 ; [.2109.0020.001C][.2090.0020.001C][.20D6.0020.001C] # SQUARE MIL +3396 ; [.2109.0020.001C][.20D6.0020.001C] # SQUARE ML +339C ; [.2109.0020.001C][.2109.0020.001C] # SQUARE MM +339F ; [.2109.0020.001C][.2109.0020.001C][.1F9A.0020.001C] # SQUARE MM SQUARED +33A3 ; [.2109.0020.001C][.2109.0020.001C][.1F9B.0020.001C] # SQUARE MM CUBED +33D6 ; [.2109.0020.001C][.213C.0020.001C][.20D6.0020.001C] # SQUARE MOL +33AB ; [.2109.0020.001D][.216B.0020.001D][.1FA2.0020.001C] # SQUARE MPA +1F16C ; [.2109.0020.0014][.2193.0020.0014] # RAISED MR SIGN +33A7 ; [.2109.0020.001C][*0675.0020.001C][.21D2.0020.001C] # SQUARE M OVER S +33B3 ; [.2109.0020.001C][.21D2.0020.001C] # SQUARE MS +33A8 ; [.2109.0020.001C][*0675.0020.001C][.21D2.0020.001C][.1F9A.0020.001C] # SQUARE M OVER S SQUARED +33B7 ; [.2109.0020.001C][.2247.0020.001D] # SQUARE MV +33B9 ; [.2109.0020.001D][.2247.0020.001D] # SQUARE MV MEGA +1F14B ; [.2109.0020.001D][.2247.0020.001D] # SQUARED MV +33BD ; [.2109.0020.001C][.2259.0020.001D] # SQUARE MW +33BF ; [.2109.0020.001D][.2259.0020.001D] # SQUARE MW MEGA +33C1 ; [.2109.0020.001D][.2346.0020.001D] # SQUARE M OHM +1D0D ; [.210D.0020.0002] # LATIN LETTER SMALL CAPITAL M +1DDF ; [.210D.0020.0004] # COMBINING LATIN LETTER SMALL CAPITAL M +1D6F ; [.210E.0020.0002] # LATIN SMALL LETTER M WITH MIDDLE TILDE +1D86 ; [.210F.0020.0002] # LATIN SMALL LETTER M WITH PALATAL HOOK +0271 ; [.2110.0020.0002] # LATIN SMALL LETTER M WITH HOOK +2C6E ; [.2110.0020.0008] # LATIN CAPITAL LETTER M WITH HOOK +1DAC ; [.2110.0020.0014] # MODIFIER LETTER SMALL M WITH HOOK +AB3A ; [.2114.0020.0002] # LATIN SMALL LETTER M WITH CROSSED-TAIL +A7FD ; [.2115.0020.0002] # LATIN EPIGRAPHIC LETTER INVERTED M +A7FF ; [.2116.0020.0002] # LATIN EPIGRAPHIC LETTER ARCHAIC M +A773 ; [.2117.0020.0002] # LATIN SMALL LETTER MUM +006E ; [.2118.0020.0002] # LATIN SMALL LETTER N +FF4E ; [.2118.0020.0003] # FULLWIDTH LATIN SMALL LETTER N +1DE0 ; [.2118.0020.0004] # COMBINING LATIN SMALL LETTER N +24A9 ; [*0328.0020.0004][.2118.0020.0004][*0329.0020.0004] # PARENTHESIZED LATIN SMALL LETTER N +1D427 ; [.2118.0020.0005] # MATHEMATICAL BOLD SMALL N +1D45B ; [.2118.0020.0005] # MATHEMATICAL ITALIC SMALL N +1D48F ; [.2118.0020.0005] # MATHEMATICAL BOLD ITALIC SMALL N +1D4C3 ; [.2118.0020.0005] # MATHEMATICAL SCRIPT SMALL N +1D4F7 ; [.2118.0020.0005] # MATHEMATICAL BOLD SCRIPT SMALL N +1D52B ; [.2118.0020.0005] # MATHEMATICAL FRAKTUR SMALL N +1D55F ; [.2118.0020.0005] # MATHEMATICAL DOUBLE-STRUCK SMALL N +1D593 ; [.2118.0020.0005] # MATHEMATICAL BOLD FRAKTUR SMALL N +1D5C7 ; [.2118.0020.0005] # MATHEMATICAL SANS-SERIF SMALL N +1D5FB ; [.2118.0020.0005] # MATHEMATICAL SANS-SERIF BOLD SMALL N +1D62F ; [.2118.0020.0005] # MATHEMATICAL SANS-SERIF ITALIC SMALL N +1D663 ; [.2118.0020.0005] # MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL N +1D697 ; [.2118.0020.0005] # MATHEMATICAL MONOSPACE SMALL N +24DD ; [.2118.0020.0006] # CIRCLED LATIN SMALL LETTER N +004E ; [.2118.0020.0008] # LATIN CAPITAL LETTER N +FF2E ; [.2118.0020.0009] # FULLWIDTH LATIN CAPITAL LETTER N +1F11D ; [*0328.0020.0004][.2118.0020.000A][*0329.0020.0004] # PARENTHESIZED LATIN CAPITAL LETTER N +2115 ; [.2118.0020.000B] # DOUBLE-STRUCK CAPITAL N +1D40D ; [.2118.0020.000B] # MATHEMATICAL BOLD CAPITAL N +1D441 ; [.2118.0020.000B] # MATHEMATICAL ITALIC CAPITAL N +1D475 ; [.2118.0020.000B] # MATHEMATICAL BOLD ITALIC CAPITAL N +1D4A9 ; [.2118.0020.000B] # MATHEMATICAL SCRIPT CAPITAL N +1D4DD ; [.2118.0020.000B] # MATHEMATICAL BOLD SCRIPT CAPITAL N +1D511 ; [.2118.0020.000B] # MATHEMATICAL FRAKTUR CAPITAL N +1D579 ; [.2118.0020.000B] # MATHEMATICAL BOLD FRAKTUR CAPITAL N +1D5AD ; [.2118.0020.000B] # MATHEMATICAL SANS-SERIF CAPITAL N +1D5E1 ; [.2118.0020.000B] # MATHEMATICAL SANS-SERIF BOLD CAPITAL N +1D615 ; [.2118.0020.000B] # MATHEMATICAL SANS-SERIF ITALIC CAPITAL N +1D649 ; [.2118.0020.000B] # MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL N +1D67D ; [.2118.0020.000B] # MATHEMATICAL MONOSPACE CAPITAL N +24C3 ; [.2118.0020.000C] # CIRCLED LATIN CAPITAL LETTER N +1F15D ; [.2118.0020.000C] # NEGATIVE CIRCLED LATIN CAPITAL LETTER N +207F ; [.2118.0020.0014] # SUPERSCRIPT LATIN SMALL LETTER N +2099 ; [.2118.0020.0015] # LATIN SUBSCRIPT SMALL LETTER N +1D3A ; [.2118.0020.001D] # MODIFIER LETTER CAPITAL N +1F13D ; [.2118.0020.001D] # SQUARED LATIN CAPITAL LETTER N +1F17D ; [.2118.0020.001D] # NEGATIVE SQUARED LATIN CAPITAL LETTER N +0144 ; [.2118.0020.0002][.0000.0024.0002] # LATIN SMALL LETTER N WITH ACUTE +0143 ; [.2118.0020.0008][.0000.0024.0002] # LATIN CAPITAL LETTER N WITH ACUTE +01F9 ; [.2118.0020.0002][.0000.0025.0002] # LATIN SMALL LETTER N WITH GRAVE +01F8 ; [.2118.0020.0008][.0000.0025.0002] # LATIN CAPITAL LETTER N WITH GRAVE +0148 ; [.2118.0020.0002][.0000.0028.0002] # LATIN SMALL LETTER N WITH CARON +0147 ; [.2118.0020.0008][.0000.0028.0002] # LATIN CAPITAL LETTER N WITH CARON +00F1 ; [.2118.0020.0002][.0000.002D.0002] # LATIN SMALL LETTER N WITH TILDE +00D1 ; [.2118.0020.0008][.0000.002D.0002] # LATIN CAPITAL LETTER N WITH TILDE +1E45 ; [.2118.0020.0002][.0000.002E.0002] # LATIN SMALL LETTER N WITH DOT ABOVE +1E44 ; [.2118.0020.0008][.0000.002E.0002] # LATIN CAPITAL LETTER N WITH DOT ABOVE +0146 ; [.2118.0020.0002][.0000.0030.0002] # LATIN SMALL LETTER N WITH CEDILLA +0145 ; [.2118.0020.0008][.0000.0030.0002] # LATIN CAPITAL LETTER N WITH CEDILLA +A7A5 ; [.2118.0020.0004][.0000.0035.0004] # LATIN SMALL LETTER N WITH OBLIQUE STROKE +A7A4 ; [.2118.0020.000A][.0000.0035.0004] # LATIN CAPITAL LETTER N WITH OBLIQUE STROKE +1E47 ; [.2118.0020.0002][.0000.0042.0002] # LATIN SMALL LETTER N WITH DOT BELOW +1E46 ; [.2118.0020.0008][.0000.0042.0002] # LATIN CAPITAL LETTER N WITH DOT BELOW +1E4B ; [.2118.0020.0002][.0000.0046.0002] # LATIN SMALL LETTER N WITH CIRCUMFLEX BELOW +1E4A ; [.2118.0020.0008][.0000.0046.0002] # LATIN CAPITAL LETTER N WITH CIRCUMFLEX BELOW +1E49 ; [.2118.0020.0002][.0000.0049.0002] # LATIN SMALL LETTER N WITH LINE BELOW +1E48 ; [.2118.0020.0008][.0000.0049.0002] # LATIN CAPITAL LETTER N WITH LINE BELOW +3381 ; [.2118.0020.001C][.1FA2.0020.001D] # SQUARE NA +1F195 ; [.2118.0020.001D][.2007.0020.001D][.2259.0020.001D] # SQUARED NEW +338B ; [.2118.0020.001C][.2042.0020.001D] # SQUARE NF +1F196 ; [.2118.0020.001D][.2051.0020.001D] # SQUARED NG +01CC ; [.2118.0020.0004][.20AB.0020.0004] # LATIN SMALL LETTER NJ +01CB ; [.2118.0020.000A][.20AB.0020.0004] # LATIN CAPITAL LETTER N WITH SMALL LETTER J +01CA ; [.2118.0020.000A][.20AB.0020.000A] # LATIN CAPITAL LETTER NJ +339A ; [.2118.0020.001C][.2109.0020.001C] # SQUARE NM +2116 ; [.2118.0020.000A][.213C.0020.0004] # NUMERO SIGN +33B1 ; [.2118.0020.001C][.21D2.0020.001C] # SQUARE NS +33B5 ; [.2118.0020.001C][.2247.0020.001D] # SQUARE NV +33BB ; [.2118.0020.001C][.2259.0020.001D] # SQUARE NW +0274 ; [.211C.0020.0002] # LATIN LETTER SMALL CAPITAL N +1DE1 ; [.211C.0020.0004] # COMBINING LATIN LETTER SMALL CAPITAL N +1DB0 ; [.211C.0020.0014] # MODIFIER LETTER SMALL CAPITAL N +1D3B ; [.2120.0020.0002] # MODIFIER LETTER CAPITAL REVERSED N +1D0E ; [.2121.0020.0002] # LATIN LETTER SMALL CAPITAL REVERSED N +1D70 ; [.2122.0020.0002] # LATIN SMALL LETTER N WITH MIDDLE TILDE +0272 ; [.2123.0020.0002] # LATIN SMALL LETTER N WITH LEFT HOOK +019D ; [.2123.0020.0008] # LATIN CAPITAL LETTER N WITH LEFT HOOK +1DAE ; [.2123.0020.0014] # MODIFIER LETTER SMALL N WITH LEFT HOOK +019E ; [.2127.0020.0002] # LATIN SMALL LETTER N WITH LONG RIGHT LEG +0220 ; [.2127.0020.0008] # LATIN CAPITAL LETTER N WITH LONG RIGHT LEG +A791 ; [.212B.0020.0002] # LATIN SMALL LETTER N WITH DESCENDER +A790 ; [.212B.0020.0008] # LATIN CAPITAL LETTER N WITH DESCENDER +1D87 ; [.212C.0020.0002] # LATIN SMALL LETTER N WITH PALATAL HOOK +0273 ; [.212D.0020.0002] # LATIN SMALL LETTER N WITH RETROFLEX HOOK +1DAF ; [.212D.0020.0014] # MODIFIER LETTER SMALL N WITH RETROFLEX HOOK +0235 ; [.2131.0020.0002] # LATIN SMALL LETTER N WITH CURL +AB3B ; [.2135.0020.0002] # LATIN SMALL LETTER N WITH CROSSED-TAIL +A774 ; [.2136.0020.0002] # LATIN SMALL LETTER NUM +014B ; [.2137.0020.0002] # LATIN SMALL LETTER ENG +014A ; [.2137.0020.0008] # LATIN CAPITAL LETTER ENG +1D51 ; [.2137.0020.0014] # MODIFIER LETTER SMALL ENG +AB3C ; [.213B.0020.0002] # LATIN SMALL LETTER ENG WITH CROSSED-TAIL +006F ; [.213C.0020.0002] # LATIN SMALL LETTER O +FF4F ; [.213C.0020.0003] # FULLWIDTH LATIN SMALL LETTER O +0366 ; [.213C.0020.0004] # COMBINING LATIN SMALL LETTER O +24AA ; [*0328.0020.0004][.213C.0020.0004][*0329.0020.0004] # PARENTHESIZED LATIN SMALL LETTER O +2134 ; [.213C.0020.0005] # SCRIPT SMALL O +1D428 ; [.213C.0020.0005] # MATHEMATICAL BOLD SMALL O +1D45C ; [.213C.0020.0005] # MATHEMATICAL ITALIC SMALL O +1D490 ; [.213C.0020.0005] # MATHEMATICAL BOLD ITALIC SMALL O +1D4F8 ; [.213C.0020.0005] # MATHEMATICAL BOLD SCRIPT SMALL O +1D52C ; [.213C.0020.0005] # MATHEMATICAL FRAKTUR SMALL O +1D560 ; [.213C.0020.0005] # MATHEMATICAL DOUBLE-STRUCK SMALL O +1D594 ; [.213C.0020.0005] # MATHEMATICAL BOLD FRAKTUR SMALL O +1D5C8 ; [.213C.0020.0005] # MATHEMATICAL SANS-SERIF SMALL O +1D5FC ; [.213C.0020.0005] # MATHEMATICAL SANS-SERIF BOLD SMALL O +1D630 ; [.213C.0020.0005] # MATHEMATICAL SANS-SERIF ITALIC SMALL O +1D664 ; [.213C.0020.0005] # MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL O +1D698 ; [.213C.0020.0005] # MATHEMATICAL MONOSPACE SMALL O +24DE ; [.213C.0020.0006] # CIRCLED LATIN SMALL LETTER O +004F ; [.213C.0020.0008] # LATIN CAPITAL LETTER O +FF2F ; [.213C.0020.0009] # FULLWIDTH LATIN CAPITAL LETTER O +1F11E ; [*0328.0020.0004][.213C.0020.000A][*0329.0020.0004] # PARENTHESIZED LATIN CAPITAL LETTER O +1D40E ; [.213C.0020.000B] # MATHEMATICAL BOLD CAPITAL O +1D442 ; [.213C.0020.000B] # MATHEMATICAL ITALIC CAPITAL O +1D476 ; [.213C.0020.000B] # MATHEMATICAL BOLD ITALIC CAPITAL O +1D4AA ; [.213C.0020.000B] # MATHEMATICAL SCRIPT CAPITAL O +1D4DE ; [.213C.0020.000B] # MATHEMATICAL BOLD SCRIPT CAPITAL O +1D512 ; [.213C.0020.000B] # MATHEMATICAL FRAKTUR CAPITAL O +1D546 ; [.213C.0020.000B] # MATHEMATICAL DOUBLE-STRUCK CAPITAL O +1D57A ; [.213C.0020.000B] # MATHEMATICAL BOLD FRAKTUR CAPITAL O +1D5AE ; [.213C.0020.000B] # MATHEMATICAL SANS-SERIF CAPITAL O +1D5E2 ; [.213C.0020.000B] # MATHEMATICAL SANS-SERIF BOLD CAPITAL O +1D616 ; [.213C.0020.000B] # MATHEMATICAL SANS-SERIF ITALIC CAPITAL O +1D64A ; [.213C.0020.000B] # MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL O +1D67E ; [.213C.0020.000B] # MATHEMATICAL MONOSPACE CAPITAL O +24C4 ; [.213C.0020.000C] # CIRCLED LATIN CAPITAL LETTER O +1F15E ; [.213C.0020.000C] # NEGATIVE CIRCLED LATIN CAPITAL LETTER O +00BA ; [.213C.0020.0014] # MASCULINE ORDINAL INDICATOR +1D52 ; [.213C.0020.0014] # MODIFIER LETTER SMALL O +2092 ; [.213C.0020.0015] # LATIN SUBSCRIPT SMALL LETTER O +1D3C ; [.213C.0020.001D] # MODIFIER LETTER CAPITAL O +1F13E ; [.213C.0020.001D] # SQUARED LATIN CAPITAL LETTER O +1F17E ; [.213C.0020.001D] # NEGATIVE SQUARED LATIN CAPITAL LETTER O +00F3 ; [.213C.0020.0002][.0000.0024.0002] # LATIN SMALL LETTER O WITH ACUTE +00D3 ; [.213C.0020.0008][.0000.0024.0002] # LATIN CAPITAL LETTER O WITH ACUTE +00F2 ; [.213C.0020.0002][.0000.0025.0002] # LATIN SMALL LETTER O WITH GRAVE +00D2 ; [.213C.0020.0008][.0000.0025.0002] # LATIN CAPITAL LETTER O WITH GRAVE +014F ; [.213C.0020.0002][.0000.0026.0002] # LATIN SMALL LETTER O WITH BREVE +014E ; [.213C.0020.0008][.0000.0026.0002] # LATIN CAPITAL LETTER O WITH BREVE +00F4 ; [.213C.0020.0002][.0000.0027.0002] # LATIN SMALL LETTER O WITH CIRCUMFLEX +00D4 ; [.213C.0020.0008][.0000.0027.0002] # LATIN CAPITAL LETTER O WITH CIRCUMFLEX +1ED1 ; [.213C.0020.0002][.0000.0027.0002][.0000.0024.0002] # LATIN SMALL LETTER O WITH CIRCUMFLEX AND ACUTE +1ED0 ; [.213C.0020.0008][.0000.0027.0002][.0000.0024.0002] # LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND ACUTE +1ED3 ; [.213C.0020.0002][.0000.0027.0002][.0000.0025.0002] # LATIN SMALL LETTER O WITH CIRCUMFLEX AND GRAVE +1ED2 ; [.213C.0020.0008][.0000.0027.0002][.0000.0025.0002] # LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND GRAVE +1ED7 ; [.213C.0020.0002][.0000.0027.0002][.0000.002D.0002] # LATIN SMALL LETTER O WITH CIRCUMFLEX AND TILDE +1ED6 ; [.213C.0020.0008][.0000.0027.0002][.0000.002D.0002] # LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND TILDE +1ED5 ; [.213C.0020.0002][.0000.0027.0002][.0000.003B.0002] # LATIN SMALL LETTER O WITH CIRCUMFLEX AND HOOK ABOVE +1ED4 ; [.213C.0020.0008][.0000.0027.0002][.0000.003B.0002] # LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND HOOK ABOVE +01D2 ; [.213C.0020.0002][.0000.0028.0002] # LATIN SMALL LETTER O WITH CARON +01D1 ; [.213C.0020.0008][.0000.0028.0002] # LATIN CAPITAL LETTER O WITH CARON +00F6 ; [.213C.0020.0002][.0000.002B.0002] # LATIN SMALL LETTER O WITH DIAERESIS +1DF3 ; [.213C.0020.0004][.0000.002B.0004] # COMBINING LATIN SMALL LETTER O WITH DIAERESIS +A79D ; [.213C.0020.0004][.0000.002B.0004] # LATIN SMALL LETTER VOLAPUK OE +00D6 ; [.213C.0020.0008][.0000.002B.0002] # LATIN CAPITAL LETTER O WITH DIAERESIS +A79C ; [.213C.0020.000A][.0000.002B.0004] # LATIN CAPITAL LETTER VOLAPUK OE +022B ; [.213C.0020.0002][.0000.002B.0002][.0000.0032.0002] # LATIN SMALL LETTER O WITH DIAERESIS AND MACRON +022A ; [.213C.0020.0008][.0000.002B.0002][.0000.0032.0002] # LATIN CAPITAL LETTER O WITH DIAERESIS AND MACRON +0151 ; [.213C.0020.0002][.0000.002C.0002] # LATIN SMALL LETTER O WITH DOUBLE ACUTE +0150 ; [.213C.0020.0008][.0000.002C.0002] # LATIN CAPITAL LETTER O WITH DOUBLE ACUTE +00F5 ; [.213C.0020.0002][.0000.002D.0002] # LATIN SMALL LETTER O WITH TILDE +00D5 ; [.213C.0020.0008][.0000.002D.0002] # LATIN CAPITAL LETTER O WITH TILDE +1E4D ; [.213C.0020.0002][.0000.002D.0002][.0000.0024.0002] # LATIN SMALL LETTER O WITH TILDE AND ACUTE +1E4C ; [.213C.0020.0008][.0000.002D.0002][.0000.0024.0002] # LATIN CAPITAL LETTER O WITH TILDE AND ACUTE +1E4F ; [.213C.0020.0002][.0000.002D.0002][.0000.002B.0002] # LATIN SMALL LETTER O WITH TILDE AND DIAERESIS +1E4E ; [.213C.0020.0008][.0000.002D.0002][.0000.002B.0002] # LATIN CAPITAL LETTER O WITH TILDE AND DIAERESIS +022D ; [.213C.0020.0002][.0000.002D.0002][.0000.0032.0002] # LATIN SMALL LETTER O WITH TILDE AND MACRON +022C ; [.213C.0020.0008][.0000.002D.0002][.0000.0032.0002] # LATIN CAPITAL LETTER O WITH TILDE AND MACRON +022F ; [.213C.0020.0002][.0000.002E.0002] # LATIN SMALL LETTER O WITH DOT ABOVE +022E ; [.213C.0020.0008][.0000.002E.0002] # LATIN CAPITAL LETTER O WITH DOT ABOVE +0231 ; [.213C.0020.0002][.0000.002E.0002][.0000.0032.0002] # LATIN SMALL LETTER O WITH DOT ABOVE AND MACRON +0230 ; [.213C.0020.0008][.0000.002E.0002][.0000.0032.0002] # LATIN CAPITAL LETTER O WITH DOT ABOVE AND MACRON +00F8 ; [.213C.0020.0002][.0000.002F.0002] # LATIN SMALL LETTER O WITH STROKE +00D8 ; [.213C.0020.0008][.0000.002F.0002] # LATIN CAPITAL LETTER O WITH STROKE +01FF ; [.213C.0020.0002][.0000.002F.0002][.0000.0024.0002] # LATIN SMALL LETTER O WITH STROKE AND ACUTE +01FE ; [.213C.0020.0008][.0000.002F.0002][.0000.0024.0002] # LATIN CAPITAL LETTER O WITH STROKE AND ACUTE +01EB ; [.213C.0020.0002][.0000.0031.0002] # LATIN SMALL LETTER O WITH OGONEK +01EA ; [.213C.0020.0008][.0000.0031.0002] # LATIN CAPITAL LETTER O WITH OGONEK +01ED ; [.213C.0020.0002][.0000.0031.0002][.0000.0032.0002] # LATIN SMALL LETTER O WITH OGONEK AND MACRON +01EC ; [.213C.0020.0008][.0000.0031.0002][.0000.0032.0002] # LATIN CAPITAL LETTER O WITH OGONEK AND MACRON +014D ; [.213C.0020.0002][.0000.0032.0002] # LATIN SMALL LETTER O WITH MACRON +014C ; [.213C.0020.0008][.0000.0032.0002] # LATIN CAPITAL LETTER O WITH MACRON +1E53 ; [.213C.0020.0002][.0000.0032.0002][.0000.0024.0002] # LATIN SMALL LETTER O WITH MACRON AND ACUTE +1E52 ; [.213C.0020.0008][.0000.0032.0002][.0000.0024.0002] # LATIN CAPITAL LETTER O WITH MACRON AND ACUTE +1E51 ; [.213C.0020.0002][.0000.0032.0002][.0000.0025.0002] # LATIN SMALL LETTER O WITH MACRON AND GRAVE +1E50 ; [.213C.0020.0008][.0000.0032.0002][.0000.0025.0002] # LATIN CAPITAL LETTER O WITH MACRON AND GRAVE +1DED ; [.213C.0020.0004][.0000.0034.0004] # COMBINING LATIN SMALL LETTER O WITH LIGHT CENTRALIZATION STROKE +1ECF ; [.213C.0020.0002][.0000.003B.0002] # LATIN SMALL LETTER O WITH HOOK ABOVE +1ECE ; [.213C.0020.0008][.0000.003B.0002] # LATIN CAPITAL LETTER O WITH HOOK ABOVE +020D ; [.213C.0020.0002][.0000.003C.0002] # LATIN SMALL LETTER O WITH DOUBLE GRAVE +020C ; [.213C.0020.0008][.0000.003C.0002] # LATIN CAPITAL LETTER O WITH DOUBLE GRAVE +020F ; [.213C.0020.0002][.0000.003E.0002] # LATIN SMALL LETTER O WITH INVERTED BREVE +020E ; [.213C.0020.0008][.0000.003E.0002] # LATIN CAPITAL LETTER O WITH INVERTED BREVE +01A1 ; [.213C.0020.0002][.0000.003F.0002] # LATIN SMALL LETTER O WITH HORN +01A0 ; [.213C.0020.0008][.0000.003F.0002] # LATIN CAPITAL LETTER O WITH HORN +1EDB ; [.213C.0020.0002][.0000.003F.0002][.0000.0024.0002] # LATIN SMALL LETTER O WITH HORN AND ACUTE +1EDA ; [.213C.0020.0008][.0000.003F.0002][.0000.0024.0002] # LATIN CAPITAL LETTER O WITH HORN AND ACUTE +1EDD ; [.213C.0020.0002][.0000.003F.0002][.0000.0025.0002] # LATIN SMALL LETTER O WITH HORN AND GRAVE +1EDC ; [.213C.0020.0008][.0000.003F.0002][.0000.0025.0002] # LATIN CAPITAL LETTER O WITH HORN AND GRAVE +1EE1 ; [.213C.0020.0002][.0000.003F.0002][.0000.002D.0002] # LATIN SMALL LETTER O WITH HORN AND TILDE +1EE0 ; [.213C.0020.0008][.0000.003F.0002][.0000.002D.0002] # LATIN CAPITAL LETTER O WITH HORN AND TILDE +1EDF ; [.213C.0020.0002][.0000.003F.0002][.0000.003B.0002] # LATIN SMALL LETTER O WITH HORN AND HOOK ABOVE +1EDE ; [.213C.0020.0008][.0000.003F.0002][.0000.003B.0002] # LATIN CAPITAL LETTER O WITH HORN AND HOOK ABOVE +1EE3 ; [.213C.0020.0002][.0000.003F.0002][.0000.0042.0002] # LATIN SMALL LETTER O WITH HORN AND DOT BELOW +1EE2 ; [.213C.0020.0008][.0000.003F.0002][.0000.0042.0002] # LATIN CAPITAL LETTER O WITH HORN AND DOT BELOW +1ECD ; [.213C.0020.0002][.0000.0042.0002] # LATIN SMALL LETTER O WITH DOT BELOW +1ECC ; [.213C.0020.0008][.0000.0042.0002] # LATIN CAPITAL LETTER O WITH DOT BELOW +1ED9 ; [.213C.0020.0002][.0000.0042.0002][.0000.0027.0002] # LATIN SMALL LETTER O WITH CIRCUMFLEX AND DOT BELOW +1ED8 ; [.213C.0020.0008][.0000.0042.0002][.0000.0027.0002] # LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND DOT BELOW +0153 ; [.213C.0020.0004][.0000.0118.0004][.2007.0020.0004] # LATIN SMALL LIGATURE OE +0152 ; [.213C.0020.000A][.0000.0118.0004][.2007.0020.000A] # LATIN CAPITAL LIGATURE OE +A7F9 ; [.213C.0020.0014][.0000.0118.0014][.2007.0020.0014] # MODIFIER LETTER SMALL LIGATURE OE +1F197 ; [.213C.0020.001D][.20C4.0020.001D] # SQUARED OK +A74F ; [.213C.0020.0004][.213C.0020.0004] # LATIN SMALL LETTER OO +A74E ; [.213C.0020.000A][.213C.0020.000A] # LATIN CAPITAL LETTER OO +3375 ; [.213C.0020.001C][.2247.0020.001D] # SQUARE OV +1D0F ; [.2140.0020.0002] # LATIN LETTER SMALL CAPITAL O +1D11 ; [.2141.0020.0002] # LATIN SMALL LETTER SIDEWAYS O +AB3D ; [.2142.0020.0002] # LATIN SMALL LETTER BLACKLETTER O +0276 ; [.2143.0020.0002] # LATIN LETTER SMALL CAPITAL OE +1D14 ; [.2147.0020.0002] # LATIN SMALL LETTER TURNED OE +AB41 ; [.2148.0020.0002] # LATIN SMALL LETTER TURNED OE WITH STROKE +AB42 ; [.2149.0020.0002] # LATIN SMALL LETTER TURNED OE WITH HORIZONTAL STROKE +AB40 ; [.214A.0020.0002] # LATIN SMALL LETTER INVERTED OE +AB43 ; [.214B.0020.0002] # LATIN SMALL LETTER TURNED O OPEN-O +AB44 ; [.214C.0020.0002] # LATIN SMALL LETTER TURNED O OPEN-O WITH STROKE +1D13 ; [.214D.0020.0002] # LATIN SMALL LETTER SIDEWAYS O WITH STROKE +AB3E ; [.214E.0020.0002] # LATIN SMALL LETTER BLACKLETTER O WITH STROKE +0254 ; [.214F.0020.0002] # LATIN SMALL LETTER OPEN O +0186 ; [.214F.0020.0008] # LATIN CAPITAL LETTER OPEN O +1D53 ; [.214F.0020.0014] # MODIFIER LETTER SMALL OPEN O +1D10 ; [.2153.0020.0002] # LATIN LETTER SMALL CAPITAL OPEN O +1D12 ; [.2154.0020.0002] # LATIN SMALL LETTER SIDEWAYS OPEN O +AB3F ; [.2155.0020.0002] # LATIN SMALL LETTER OPEN O WITH STROKE +1D97 ; [.2156.0020.0002] # LATIN SMALL LETTER OPEN O WITH RETROFLEX HOOK +AB62 ; [.2157.0020.0002] # LATIN SMALL LETTER OPEN OE +A74D ; [.2158.0020.0002] # LATIN SMALL LETTER O WITH LOOP +A74C ; [.2158.0020.0008] # LATIN CAPITAL LETTER O WITH LOOP +1D16 ; [.2159.0020.0002] # LATIN SMALL LETTER TOP HALF O +1D54 ; [.2159.0020.0014] # MODIFIER LETTER SMALL TOP HALF O +1D17 ; [.215A.0020.0002] # LATIN SMALL LETTER BOTTOM HALF O +1D55 ; [.215A.0020.0014] # MODIFIER LETTER SMALL BOTTOM HALF O +2C7A ; [.215B.0020.0002] # LATIN SMALL LETTER O WITH LOW RING INSIDE +0275 ; [.215C.0020.0002] # LATIN SMALL LETTER BARRED O +019F ; [.215C.0020.0008] # LATIN CAPITAL LETTER O WITH MIDDLE TILDE +1DB1 ; [.215C.0020.0014] # MODIFIER LETTER SMALL BARRED O +A74B ; [.2160.0020.0002] # LATIN SMALL LETTER O WITH LONG STROKE OVERLAY +A74A ; [.2160.0020.0008] # LATIN CAPITAL LETTER O WITH LONG STROKE OVERLAY +0277 ; [.2161.0020.0002] # LATIN SMALL LETTER CLOSED OMEGA +A7B7 ; [.2165.0020.0002] # LATIN SMALL LETTER OMEGA +A7B6 ; [.2165.0020.0008] # LATIN CAPITAL LETTER OMEGA +0223 ; [.2166.0020.0002] # LATIN SMALL LETTER OU +0222 ; [.2166.0020.0008] # LATIN CAPITAL LETTER OU +1D3D ; [.2166.0020.001D] # MODIFIER LETTER CAPITAL OU +1D15 ; [.216A.0020.0002] # LATIN LETTER SMALL CAPITAL OU +0070 ; [.216B.0020.0002] # LATIN SMALL LETTER P +FF50 ; [.216B.0020.0003] # FULLWIDTH LATIN SMALL LETTER P +1DEE ; [.216B.0020.0004] # COMBINING LATIN SMALL LETTER P +24AB ; [*0328.0020.0004][.216B.0020.0004][*0329.0020.0004] # PARENTHESIZED LATIN SMALL LETTER P +1D429 ; [.216B.0020.0005] # MATHEMATICAL BOLD SMALL P +1D45D ; [.216B.0020.0005] # MATHEMATICAL ITALIC SMALL P +1D491 ; [.216B.0020.0005] # MATHEMATICAL BOLD ITALIC SMALL P +1D4C5 ; [.216B.0020.0005] # MATHEMATICAL SCRIPT SMALL P +1D4F9 ; [.216B.0020.0005] # MATHEMATICAL BOLD SCRIPT SMALL P +1D52D ; [.216B.0020.0005] # MATHEMATICAL FRAKTUR SMALL P +1D561 ; [.216B.0020.0005] # MATHEMATICAL DOUBLE-STRUCK SMALL P +1D595 ; [.216B.0020.0005] # MATHEMATICAL BOLD FRAKTUR SMALL P +1D5C9 ; [.216B.0020.0005] # MATHEMATICAL SANS-SERIF SMALL P +1D5FD ; [.216B.0020.0005] # MATHEMATICAL SANS-SERIF BOLD SMALL P +1D631 ; [.216B.0020.0005] # MATHEMATICAL SANS-SERIF ITALIC SMALL P +1D665 ; [.216B.0020.0005] # MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL P +1D699 ; [.216B.0020.0005] # MATHEMATICAL MONOSPACE SMALL P +24DF ; [.216B.0020.0006] # CIRCLED LATIN SMALL LETTER P +0050 ; [.216B.0020.0008] # LATIN CAPITAL LETTER P +FF30 ; [.216B.0020.0009] # FULLWIDTH LATIN CAPITAL LETTER P +1F11F ; [*0328.0020.0004][.216B.0020.000A][*0329.0020.0004] # PARENTHESIZED LATIN CAPITAL LETTER P +2119 ; [.216B.0020.000B] # DOUBLE-STRUCK CAPITAL P +1D40F ; [.216B.0020.000B] # MATHEMATICAL BOLD CAPITAL P +1D443 ; [.216B.0020.000B] # MATHEMATICAL ITALIC CAPITAL P +1D477 ; [.216B.0020.000B] # MATHEMATICAL BOLD ITALIC CAPITAL P +1D4AB ; [.216B.0020.000B] # MATHEMATICAL SCRIPT CAPITAL P +1D4DF ; [.216B.0020.000B] # MATHEMATICAL BOLD SCRIPT CAPITAL P +1D513 ; [.216B.0020.000B] # MATHEMATICAL FRAKTUR CAPITAL P +1D57B ; [.216B.0020.000B] # MATHEMATICAL BOLD FRAKTUR CAPITAL P +1D5AF ; [.216B.0020.000B] # MATHEMATICAL SANS-SERIF CAPITAL P +1D5E3 ; [.216B.0020.000B] # MATHEMATICAL SANS-SERIF BOLD CAPITAL P +1D617 ; [.216B.0020.000B] # MATHEMATICAL SANS-SERIF ITALIC CAPITAL P +1D64B ; [.216B.0020.000B] # MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL P +1D67F ; [.216B.0020.000B] # MATHEMATICAL MONOSPACE CAPITAL P +24C5 ; [.216B.0020.000C] # CIRCLED LATIN CAPITAL LETTER P +1F15F ; [.216B.0020.000C] # NEGATIVE CIRCLED LATIN CAPITAL LETTER P +1D56 ; [.216B.0020.0014] # MODIFIER LETTER SMALL P +209A ; [.216B.0020.0015] # LATIN SUBSCRIPT SMALL LETTER P +1D3E ; [.216B.0020.001D] # MODIFIER LETTER CAPITAL P +1F13F ; [.216B.0020.001D] # SQUARED LATIN CAPITAL LETTER P +1F17F ; [.216B.0020.001D] # NEGATIVE SQUARED LATIN CAPITAL LETTER P +1F18A ; [.216B.0020.001D] # CROSSED NEGATIVE SQUARED LATIN CAPITAL LETTER P +1E55 ; [.216B.0020.0002][.0000.0024.0002] # LATIN SMALL LETTER P WITH ACUTE +1E54 ; [.216B.0020.0008][.0000.0024.0002] # LATIN CAPITAL LETTER P WITH ACUTE +1E57 ; [.216B.0020.0002][.0000.002E.0002] # LATIN SMALL LETTER P WITH DOT ABOVE +1E56 ; [.216B.0020.0008][.0000.002E.0002] # LATIN CAPITAL LETTER P WITH DOT ABOVE +3380 ; [.216B.0020.001C][.1FA2.0020.001D] # SQUARE PA AMPS +33A9 ; [.216B.0020.001D][.1FA2.0020.001C] # SQUARE PA +1F18C ; [.216B.0020.001D][.1FA2.0020.001D] # NEGATIVE SQUARED PA +3376 ; [.216B.0020.001C][.1FD6.0020.001C] # SQUARE PC +338A ; [.216B.0020.001C][.2042.0020.001D] # SQUARE PF +33D7 ; [.216B.0020.001D][.2075.0020.001D] # SQUARE PH +33D8 ; [.216B.0020.001C][*027E.0020.001C][.2109.0020.001C][*027E.0020.001C] # SQUARE PM +33D9 ; [.216B.0020.001D][.216B.0020.001D][.2109.0020.001D] # SQUARE PPM +1F14E ; [.216B.0020.001D][.216B.0020.001D][.2247.0020.001D] # SQUARED PPV +33DA ; [.216B.0020.001D][.2193.0020.001D] # SQUARE PR +33B0 ; [.216B.0020.001C][.21D2.0020.001C] # SQUARE PS +3250 ; [.216B.0020.001D][.21F7.0020.001D][.2007.0020.001D] # PARTNERSHIP SIGN +33B4 ; [.216B.0020.001C][.2247.0020.001D] # SQUARE PV +33BA ; [.216B.0020.001C][.2259.0020.001D] # SQUARE PW +1D18 ; [.216F.0020.0002] # LATIN LETTER SMALL CAPITAL P +1D7D ; [.2170.0020.0002] # LATIN SMALL LETTER P WITH STROKE +2C63 ; [.2170.0020.0008] # LATIN CAPITAL LETTER P WITH STROKE +A751 ; [.2171.0020.0002] # LATIN SMALL LETTER P WITH STROKE THROUGH DESCENDER +A750 ; [.2171.0020.0008] # LATIN CAPITAL LETTER P WITH STROKE THROUGH DESCENDER +1D71 ; [.2172.0020.0002] # LATIN SMALL LETTER P WITH MIDDLE TILDE +1D88 ; [.2173.0020.0002] # LATIN SMALL LETTER P WITH PALATAL HOOK +01A5 ; [.2174.0020.0002] # LATIN SMALL LETTER P WITH HOOK +01A4 ; [.2174.0020.0008] # LATIN CAPITAL LETTER P WITH HOOK +A753 ; [.2178.0020.0002] # LATIN SMALL LETTER P WITH FLOURISH +A752 ; [.2178.0020.0008] # LATIN CAPITAL LETTER P WITH FLOURISH +A755 ; [.2179.0020.0002] # LATIN SMALL LETTER P WITH SQUIRREL TAIL +A754 ; [.2179.0020.0008] # LATIN CAPITAL LETTER P WITH SQUIRREL TAIL +A7FC ; [.217A.0020.0002] # LATIN EPIGRAPHIC LETTER REVERSED P +0278 ; [.217B.0020.0002] # LATIN SMALL LETTER PHI +1DB2 ; [.217B.0020.0014] # MODIFIER LETTER SMALL PHI +2C77 ; [.217F.0020.0002] # LATIN SMALL LETTER TAILLESS PHI +0071 ; [.2180.0020.0002] # LATIN SMALL LETTER Q +FF51 ; [.2180.0020.0003] # FULLWIDTH LATIN SMALL LETTER Q +24AC ; [*0328.0020.0004][.2180.0020.0004][*0329.0020.0004] # PARENTHESIZED LATIN SMALL LETTER Q +1D42A ; [.2180.0020.0005] # MATHEMATICAL BOLD SMALL Q +1D45E ; [.2180.0020.0005] # MATHEMATICAL ITALIC SMALL Q +1D492 ; [.2180.0020.0005] # MATHEMATICAL BOLD ITALIC SMALL Q +1D4C6 ; [.2180.0020.0005] # MATHEMATICAL SCRIPT SMALL Q +1D4FA ; [.2180.0020.0005] # MATHEMATICAL BOLD SCRIPT SMALL Q +1D52E ; [.2180.0020.0005] # MATHEMATICAL FRAKTUR SMALL Q +1D562 ; [.2180.0020.0005] # MATHEMATICAL DOUBLE-STRUCK SMALL Q +1D596 ; [.2180.0020.0005] # MATHEMATICAL BOLD FRAKTUR SMALL Q +1D5CA ; [.2180.0020.0005] # MATHEMATICAL SANS-SERIF SMALL Q +1D5FE ; [.2180.0020.0005] # MATHEMATICAL SANS-SERIF BOLD SMALL Q +1D632 ; [.2180.0020.0005] # MATHEMATICAL SANS-SERIF ITALIC SMALL Q +1D666 ; [.2180.0020.0005] # MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL Q +1D69A ; [.2180.0020.0005] # MATHEMATICAL MONOSPACE SMALL Q +24E0 ; [.2180.0020.0006] # CIRCLED LATIN SMALL LETTER Q +0051 ; [.2180.0020.0008] # LATIN CAPITAL LETTER Q +FF31 ; [.2180.0020.0009] # FULLWIDTH LATIN CAPITAL LETTER Q +1F120 ; [*0328.0020.0004][.2180.0020.000A][*0329.0020.0004] # PARENTHESIZED LATIN CAPITAL LETTER Q +211A ; [.2180.0020.000B] # DOUBLE-STRUCK CAPITAL Q +1D410 ; [.2180.0020.000B] # MATHEMATICAL BOLD CAPITAL Q +1D444 ; [.2180.0020.000B] # MATHEMATICAL ITALIC CAPITAL Q +1D478 ; [.2180.0020.000B] # MATHEMATICAL BOLD ITALIC CAPITAL Q +1D4AC ; [.2180.0020.000B] # MATHEMATICAL SCRIPT CAPITAL Q +1D4E0 ; [.2180.0020.000B] # MATHEMATICAL BOLD SCRIPT CAPITAL Q +1D514 ; [.2180.0020.000B] # MATHEMATICAL FRAKTUR CAPITAL Q +1D57C ; [.2180.0020.000B] # MATHEMATICAL BOLD FRAKTUR CAPITAL Q +1D5B0 ; [.2180.0020.000B] # MATHEMATICAL SANS-SERIF CAPITAL Q +1D5E4 ; [.2180.0020.000B] # MATHEMATICAL SANS-SERIF BOLD CAPITAL Q +1D618 ; [.2180.0020.000B] # MATHEMATICAL SANS-SERIF ITALIC CAPITAL Q +1D64C ; [.2180.0020.000B] # MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL Q +1D680 ; [.2180.0020.000B] # MATHEMATICAL MONOSPACE CAPITAL Q +24C6 ; [.2180.0020.000C] # CIRCLED LATIN CAPITAL LETTER Q +1F160 ; [.2180.0020.000C] # NEGATIVE CIRCLED LATIN CAPITAL LETTER Q +1F140 ; [.2180.0020.001D] # SQUARED LATIN CAPITAL LETTER Q +1F180 ; [.2180.0020.001D] # NEGATIVE SQUARED LATIN CAPITAL LETTER Q +0239 ; [.2180.0020.0004][.216B.0020.0004] # LATIN SMALL LETTER QP DIGRAPH +A7AF ; [.2184.0020.0002] # LATIN LETTER SMALL CAPITAL Q +A757 ; [.2185.0020.0002] # LATIN SMALL LETTER Q WITH STROKE THROUGH DESCENDER +A756 ; [.2185.0020.0008] # LATIN CAPITAL LETTER Q WITH STROKE THROUGH DESCENDER +A759 ; [.2186.0020.0002] # LATIN SMALL LETTER Q WITH DIAGONAL STROKE +A758 ; [.2186.0020.0008] # LATIN CAPITAL LETTER Q WITH DIAGONAL STROKE +02A0 ; [.2187.0020.0002] # LATIN SMALL LETTER Q WITH HOOK +024B ; [.218B.0020.0002] # LATIN SMALL LETTER Q WITH HOOK TAIL +024A ; [.218B.0020.0008] # LATIN CAPITAL LETTER SMALL Q WITH HOOK TAIL +0138 ; [.218F.0020.0002] # LATIN SMALL LETTER KRA +0072 ; [.2193.0020.0002] # LATIN SMALL LETTER R +FF52 ; [.2193.0020.0003] # FULLWIDTH LATIN SMALL LETTER R +036C ; [.2193.0020.0004] # COMBINING LATIN SMALL LETTER R +1DCA ; [.2193.0020.0004] # COMBINING LATIN SMALL LETTER R BELOW +24AD ; [*0328.0020.0004][.2193.0020.0004][*0329.0020.0004] # PARENTHESIZED LATIN SMALL LETTER R +1D42B ; [.2193.0020.0005] # MATHEMATICAL BOLD SMALL R +1D45F ; [.2193.0020.0005] # MATHEMATICAL ITALIC SMALL R +1D493 ; [.2193.0020.0005] # MATHEMATICAL BOLD ITALIC SMALL R +1D4C7 ; [.2193.0020.0005] # MATHEMATICAL SCRIPT SMALL R +1D4FB ; [.2193.0020.0005] # MATHEMATICAL BOLD SCRIPT SMALL R +1D52F ; [.2193.0020.0005] # MATHEMATICAL FRAKTUR SMALL R +1D563 ; [.2193.0020.0005] # MATHEMATICAL DOUBLE-STRUCK SMALL R +1D597 ; [.2193.0020.0005] # MATHEMATICAL BOLD FRAKTUR SMALL R +1D5CB ; [.2193.0020.0005] # MATHEMATICAL SANS-SERIF SMALL R +1D5FF ; [.2193.0020.0005] # MATHEMATICAL SANS-SERIF BOLD SMALL R +1D633 ; [.2193.0020.0005] # MATHEMATICAL SANS-SERIF ITALIC SMALL R +1D667 ; [.2193.0020.0005] # MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL R +1D69B ; [.2193.0020.0005] # MATHEMATICAL MONOSPACE SMALL R +24E1 ; [.2193.0020.0006] # CIRCLED LATIN SMALL LETTER R +0052 ; [.2193.0020.0008] # LATIN CAPITAL LETTER R +FF32 ; [.2193.0020.0009] # FULLWIDTH LATIN CAPITAL LETTER R +1F121 ; [*0328.0020.0004][.2193.0020.000A][*0329.0020.0004] # PARENTHESIZED LATIN CAPITAL LETTER R +211B ; [.2193.0020.000B] # SCRIPT CAPITAL R +211C ; [.2193.0020.000B] # BLACK-LETTER CAPITAL R +211D ; [.2193.0020.000B] # DOUBLE-STRUCK CAPITAL R +1D411 ; [.2193.0020.000B] # MATHEMATICAL BOLD CAPITAL R +1D445 ; [.2193.0020.000B] # MATHEMATICAL ITALIC CAPITAL R +1D479 ; [.2193.0020.000B] # MATHEMATICAL BOLD ITALIC CAPITAL R +1D4E1 ; [.2193.0020.000B] # MATHEMATICAL BOLD SCRIPT CAPITAL R +1D57D ; [.2193.0020.000B] # MATHEMATICAL BOLD FRAKTUR CAPITAL R +1D5B1 ; [.2193.0020.000B] # MATHEMATICAL SANS-SERIF CAPITAL R +1D5E5 ; [.2193.0020.000B] # MATHEMATICAL SANS-SERIF BOLD CAPITAL R +1D619 ; [.2193.0020.000B] # MATHEMATICAL SANS-SERIF ITALIC CAPITAL R +1D64D ; [.2193.0020.000B] # MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL R +1D681 ; [.2193.0020.000B] # MATHEMATICAL MONOSPACE CAPITAL R +24C7 ; [.2193.0020.000C] # CIRCLED LATIN CAPITAL LETTER R +1F12C ; [.2193.0020.000C] # CIRCLED ITALIC LATIN CAPITAL LETTER R +1F161 ; [.2193.0020.000C] # NEGATIVE CIRCLED LATIN CAPITAL LETTER R +02B3 ; [.2193.0020.0014] # MODIFIER LETTER SMALL R +1D63 ; [.2193.0020.0015] # LATIN SUBSCRIPT SMALL LETTER R +1D3F ; [.2193.0020.001D] # MODIFIER LETTER CAPITAL R +1F141 ; [.2193.0020.001D] # SQUARED LATIN CAPITAL LETTER R +1F181 ; [.2193.0020.001D] # NEGATIVE SQUARED LATIN CAPITAL LETTER R +0155 ; [.2193.0020.0002][.0000.0024.0002] # LATIN SMALL LETTER R WITH ACUTE +0154 ; [.2193.0020.0008][.0000.0024.0002] # LATIN CAPITAL LETTER R WITH ACUTE +0159 ; [.2193.0020.0002][.0000.0028.0002] # LATIN SMALL LETTER R WITH CARON +0158 ; [.2193.0020.0008][.0000.0028.0002] # LATIN CAPITAL LETTER R WITH CARON +1E59 ; [.2193.0020.0002][.0000.002E.0002] # LATIN SMALL LETTER R WITH DOT ABOVE +1E58 ; [.2193.0020.0008][.0000.002E.0002] # LATIN CAPITAL LETTER R WITH DOT ABOVE +0157 ; [.2193.0020.0002][.0000.0030.0002] # LATIN SMALL LETTER R WITH CEDILLA +0156 ; [.2193.0020.0008][.0000.0030.0002] # LATIN CAPITAL LETTER R WITH CEDILLA +A7A7 ; [.2193.0020.0004][.0000.0035.0004] # LATIN SMALL LETTER R WITH OBLIQUE STROKE +A7A6 ; [.2193.0020.000A][.0000.0035.0004] # LATIN CAPITAL LETTER R WITH OBLIQUE STROKE +0211 ; [.2193.0020.0002][.0000.003C.0002] # LATIN SMALL LETTER R WITH DOUBLE GRAVE +0210 ; [.2193.0020.0008][.0000.003C.0002] # LATIN CAPITAL LETTER R WITH DOUBLE GRAVE +0213 ; [.2193.0020.0002][.0000.003E.0002] # LATIN SMALL LETTER R WITH INVERTED BREVE +0212 ; [.2193.0020.0008][.0000.003E.0002] # LATIN CAPITAL LETTER R WITH INVERTED BREVE +1E5B ; [.2193.0020.0002][.0000.0042.0002] # LATIN SMALL LETTER R WITH DOT BELOW +1E5A ; [.2193.0020.0008][.0000.0042.0002] # LATIN CAPITAL LETTER R WITH DOT BELOW +1E5D ; [.2193.0020.0002][.0000.0042.0002][.0000.0032.0002] # LATIN SMALL LETTER R WITH DOT BELOW AND MACRON +1E5C ; [.2193.0020.0008][.0000.0042.0002][.0000.0032.0002] # LATIN CAPITAL LETTER R WITH DOT BELOW AND MACRON +1E5F ; [.2193.0020.0002][.0000.0049.0002] # LATIN SMALL LETTER R WITH LINE BELOW +1E5E ; [.2193.0020.0008][.0000.0049.0002] # LATIN CAPITAL LETTER R WITH LINE BELOW +A783 ; [.2193.0020.0004][.0000.0119.0004] # LATIN SMALL LETTER INSULAR R +A782 ; [.2193.0020.000A][.0000.0119.0004] # LATIN CAPITAL LETTER INSULAR R +33AD ; [.2193.0020.001C][.1FA2.0020.001C][.1FEB.0020.001C] # SQUARE RAD +33AE ; [.2193.0020.001C][.1FA2.0020.001C][.1FEB.0020.001C][*0675.0020.001C][.21D2.0020.001C] # SQUARE RAD OVER S +33AF ; [.2193.0020.001C][.1FA2.0020.001C][.1FEB.0020.001C][*0675.0020.001C][.21D2.0020.001C][.1F9A.0020.001C] # SQUARE RAD OVER S SQUARED +20A8 ; [.2193.0020.000A][.21D2.0020.0004] # RUPEE SIGN +AB45 ; [.2197.0020.0002] # LATIN SMALL LETTER STIRRUP R +0280 ; [.2198.0020.0002] # LATIN LETTER SMALL CAPITAL R +1DE2 ; [.2198.0020.0004] # COMBINING LATIN LETTER SMALL CAPITAL R +01A6 ; [.2198.0020.0008] # LATIN LETTER YR +AB46 ; [.219C.0020.0002] # LATIN LETTER SMALL CAPITAL R WITH RIGHT LEG +A75B ; [.219D.0020.0002] # LATIN SMALL LETTER R ROTUNDA +1DE3 ; [.219D.0020.0004] # COMBINING LATIN SMALL LETTER R ROTUNDA +A75A ; [.219D.0020.0008] # LATIN CAPITAL LETTER R ROTUNDA +1D19 ; [.219E.0020.0002] # LATIN LETTER SMALL CAPITAL REVERSED R +024D ; [.219F.0020.0002] # LATIN SMALL LETTER R WITH STROKE +024C ; [.219F.0020.0008] # LATIN CAPITAL LETTER R WITH STROKE +1D72 ; [.21A3.0020.0002] # LATIN SMALL LETTER R WITH MIDDLE TILDE +0279 ; [.21A4.0020.0002] # LATIN SMALL LETTER TURNED R +02B4 ; [.21A4.0020.0014] # MODIFIER LETTER SMALL TURNED R +1D1A ; [.21A8.0020.0002] # LATIN LETTER SMALL CAPITAL TURNED R +027A ; [.21A9.0020.0002] # LATIN SMALL LETTER TURNED R WITH LONG LEG +1D89 ; [.21AD.0020.0002] # LATIN SMALL LETTER R WITH PALATAL HOOK +027B ; [.21AE.0020.0002] # LATIN SMALL LETTER TURNED R WITH HOOK +02B5 ; [.21AE.0020.0014] # MODIFIER LETTER SMALL TURNED R WITH HOOK +2C79 ; [.21B2.0020.0002] # LATIN SMALL LETTER TURNED R WITH TAIL +027C ; [.21B3.0020.0002] # LATIN SMALL LETTER R WITH LONG LEG +027D ; [.21B7.0020.0002] # LATIN SMALL LETTER R WITH TAIL +2C64 ; [.21B7.0020.0008] # LATIN CAPITAL LETTER R WITH TAIL +AB49 ; [.21BB.0020.0002] # LATIN SMALL LETTER R WITH CROSSED-TAIL +027E ; [.21BC.0020.0002] # LATIN SMALL LETTER R WITH FISHHOOK +1D73 ; [.21C0.0020.0002] # LATIN SMALL LETTER R WITH FISHHOOK AND MIDDLE TILDE +027F ; [.21C1.0020.0002] # LATIN SMALL LETTER REVERSED R WITH FISHHOOK +AB47 ; [.21C5.0020.0002] # LATIN SMALL LETTER R WITHOUT HANDLE +AB48 ; [.21C6.0020.0002] # LATIN SMALL LETTER DOUBLE R +AB4A ; [.21C7.0020.0002] # LATIN SMALL LETTER DOUBLE R WITH CROSSED-TAIL +AB4B ; [.21C8.0020.0002] # LATIN SMALL LETTER SCRIPT R +AB4C ; [.21C9.0020.0002] # LATIN SMALL LETTER SCRIPT R WITH RING +0281 ; [.21CA.0020.0002] # LATIN LETTER SMALL CAPITAL INVERTED R +02B6 ; [.21CA.0020.0014] # MODIFIER LETTER SMALL CAPITAL INVERTED R +AB68 ; [.21CE.0020.0002] # LATIN SMALL LETTER TURNED R WITH MIDDLE TILDE +A775 ; [.21CF.0020.0002] # LATIN SMALL LETTER RUM +A776 ; [.21D0.0020.0002] # LATIN LETTER SMALL CAPITAL RUM +A75D ; [.21D1.0020.0002] # LATIN SMALL LETTER RUM ROTUNDA +A75C ; [.21D1.0020.0008] # LATIN CAPITAL LETTER RUM ROTUNDA +0073 ; [.21D2.0020.0002] # LATIN SMALL LETTER S +FF53 ; [.21D2.0020.0003] # FULLWIDTH LATIN SMALL LETTER S +1DE4 ; [.21D2.0020.0004] # COMBINING LATIN SMALL LETTER S +24AE ; [*0328.0020.0004][.21D2.0020.0004][*0329.0020.0004] # PARENTHESIZED LATIN SMALL LETTER S +1D42C ; [.21D2.0020.0005] # MATHEMATICAL BOLD SMALL S +1D460 ; [.21D2.0020.0005] # MATHEMATICAL ITALIC SMALL S +1D494 ; [.21D2.0020.0005] # MATHEMATICAL BOLD ITALIC SMALL S +1D4C8 ; [.21D2.0020.0005] # MATHEMATICAL SCRIPT SMALL S +1D4FC ; [.21D2.0020.0005] # MATHEMATICAL BOLD SCRIPT SMALL S +1D530 ; [.21D2.0020.0005] # MATHEMATICAL FRAKTUR SMALL S +1D564 ; [.21D2.0020.0005] # MATHEMATICAL DOUBLE-STRUCK SMALL S +1D598 ; [.21D2.0020.0005] # MATHEMATICAL BOLD FRAKTUR SMALL S +1D5CC ; [.21D2.0020.0005] # MATHEMATICAL SANS-SERIF SMALL S +1D600 ; [.21D2.0020.0005] # MATHEMATICAL SANS-SERIF BOLD SMALL S +1D634 ; [.21D2.0020.0005] # MATHEMATICAL SANS-SERIF ITALIC SMALL S +1D668 ; [.21D2.0020.0005] # MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL S +1D69C ; [.21D2.0020.0005] # MATHEMATICAL MONOSPACE SMALL S +24E2 ; [.21D2.0020.0006] # CIRCLED LATIN SMALL LETTER S +0053 ; [.21D2.0020.0008] # LATIN CAPITAL LETTER S +FF33 ; [.21D2.0020.0009] # FULLWIDTH LATIN CAPITAL LETTER S +1F122 ; [*0328.0020.0004][.21D2.0020.000A][*0329.0020.0004] # PARENTHESIZED LATIN CAPITAL LETTER S +1F12A ; [*038A.0020.0004][.21D2.0020.000A][*038B.0020.0004] # TORTOISE SHELL BRACKETED LATIN CAPITAL LETTER S +1D412 ; [.21D2.0020.000B] # MATHEMATICAL BOLD CAPITAL S +1D446 ; [.21D2.0020.000B] # MATHEMATICAL ITALIC CAPITAL S +1D47A ; [.21D2.0020.000B] # MATHEMATICAL BOLD ITALIC CAPITAL S +1D4AE ; [.21D2.0020.000B] # MATHEMATICAL SCRIPT CAPITAL S +1D4E2 ; [.21D2.0020.000B] # MATHEMATICAL BOLD SCRIPT CAPITAL S +1D516 ; [.21D2.0020.000B] # MATHEMATICAL FRAKTUR CAPITAL S +1D54A ; [.21D2.0020.000B] # MATHEMATICAL DOUBLE-STRUCK CAPITAL S +1D57E ; [.21D2.0020.000B] # MATHEMATICAL BOLD FRAKTUR CAPITAL S +1D5B2 ; [.21D2.0020.000B] # MATHEMATICAL SANS-SERIF CAPITAL S +1D5E6 ; [.21D2.0020.000B] # MATHEMATICAL SANS-SERIF BOLD CAPITAL S +1D61A ; [.21D2.0020.000B] # MATHEMATICAL SANS-SERIF ITALIC CAPITAL S +1D64E ; [.21D2.0020.000B] # MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL S +1D682 ; [.21D2.0020.000B] # MATHEMATICAL MONOSPACE CAPITAL S +24C8 ; [.21D2.0020.000C] # CIRCLED LATIN CAPITAL LETTER S +1F162 ; [.21D2.0020.000C] # NEGATIVE CIRCLED LATIN CAPITAL LETTER S +02E2 ; [.21D2.0020.0014] # MODIFIER LETTER SMALL S +209B ; [.21D2.0020.0015] # LATIN SUBSCRIPT SMALL LETTER S +1F142 ; [.21D2.0020.001D] # SQUARED LATIN CAPITAL LETTER S +1F182 ; [.21D2.0020.001D] # NEGATIVE SQUARED LATIN CAPITAL LETTER S +015B ; [.21D2.0020.0002][.0000.0024.0002] # LATIN SMALL LETTER S WITH ACUTE +015A ; [.21D2.0020.0008][.0000.0024.0002] # LATIN CAPITAL LETTER S WITH ACUTE +1E65 ; [.21D2.0020.0002][.0000.0024.0002][.0000.002E.0002] # LATIN SMALL LETTER S WITH ACUTE AND DOT ABOVE +1E64 ; [.21D2.0020.0008][.0000.0024.0002][.0000.002E.0002] # LATIN CAPITAL LETTER S WITH ACUTE AND DOT ABOVE +015D ; [.21D2.0020.0002][.0000.0027.0002] # LATIN SMALL LETTER S WITH CIRCUMFLEX +015C ; [.21D2.0020.0008][.0000.0027.0002] # LATIN CAPITAL LETTER S WITH CIRCUMFLEX +0161 ; [.21D2.0020.0002][.0000.0028.0002] # LATIN SMALL LETTER S WITH CARON +0160 ; [.21D2.0020.0008][.0000.0028.0002] # LATIN CAPITAL LETTER S WITH CARON +1E67 ; [.21D2.0020.0002][.0000.0028.0002][.0000.002E.0002] # LATIN SMALL LETTER S WITH CARON AND DOT ABOVE +1E66 ; [.21D2.0020.0008][.0000.0028.0002][.0000.002E.0002] # LATIN CAPITAL LETTER S WITH CARON AND DOT ABOVE +1E61 ; [.21D2.0020.0002][.0000.002E.0002] # LATIN SMALL LETTER S WITH DOT ABOVE +1E60 ; [.21D2.0020.0008][.0000.002E.0002] # LATIN CAPITAL LETTER S WITH DOT ABOVE +015F ; [.21D2.0020.0002][.0000.0030.0002] # LATIN SMALL LETTER S WITH CEDILLA +015E ; [.21D2.0020.0008][.0000.0030.0002] # LATIN CAPITAL LETTER S WITH CEDILLA +A7A9 ; [.21D2.0020.0004][.0000.0035.0004] # LATIN SMALL LETTER S WITH OBLIQUE STROKE +A7A8 ; [.21D2.0020.000A][.0000.0035.0004] # LATIN CAPITAL LETTER S WITH OBLIQUE STROKE +1E63 ; [.21D2.0020.0002][.0000.0042.0002] # LATIN SMALL LETTER S WITH DOT BELOW +1E62 ; [.21D2.0020.0008][.0000.0042.0002] # LATIN CAPITAL LETTER S WITH DOT BELOW +1E69 ; [.21D2.0020.0002][.0000.0042.0002][.0000.002E.0002] # LATIN SMALL LETTER S WITH DOT BELOW AND DOT ABOVE +1E68 ; [.21D2.0020.0008][.0000.0042.0002][.0000.002E.0002] # LATIN CAPITAL LETTER S WITH DOT BELOW AND DOT ABOVE +0219 ; [.21D2.0020.0002][.0000.0045.0002] # LATIN SMALL LETTER S WITH COMMA BELOW +0218 ; [.21D2.0020.0008][.0000.0045.0002] # LATIN CAPITAL LETTER S WITH COMMA BELOW +017F ; [.21D2.0020.0004][.0000.0119.0004] # LATIN SMALL LETTER LONG S +1DE5 ; [.21D2.0020.0004][.0000.0119.0004] # COMBINING LATIN SMALL LETTER LONG S +A785 ; [.21D2.0020.0004][.0000.0119.0004] # LATIN SMALL LETTER INSULAR S +A784 ; [.21D2.0020.000A][.0000.0119.0004] # LATIN CAPITAL LETTER INSULAR S +1E9B ; [.21D2.0020.0004][.0000.0119.0004][.0000.002E.0002] # LATIN SMALL LETTER LONG S WITH DOT ABOVE +1F18D ; [.21D2.0020.001D][.1FA2.0020.001D] # NEGATIVE SQUARED SA +1F14C ; [.21D2.0020.001D][.1FEB.0020.001D] # SQUARED SD +1F1AA ; [.21D2.0020.001D][.2075.0020.001D][.2247.0020.001D] # SQUARED SHV +2120 ; [.21D2.0020.0014][.2109.0020.0014] # SERVICE MARK +1F198 ; [.21D2.0020.001D][.213C.0020.001D][.21D2.0020.001D] # SQUARED SOS +33DB ; [.21D2.0020.001C][.2193.0020.001C] # SQUARE SR +1F14D ; [.21D2.0020.001D][.21D2.0020.001D] # SQUARED SS +00DF ; [.21D2.0020.0004][.0000.0118.0004][.21D2.0020.0004] # LATIN SMALL LETTER SHARP S +1E9E ; [.21D2.0020.000A][.0000.0118.0004][.21D2.0020.000A] # LATIN CAPITAL LETTER SHARP S +FB06 ; [.21D2.0020.0004][.21F7.0020.0004] # LATIN SMALL LIGATURE ST +FB05 ; [.21D2.0020.0004][.0000.0119.0004][.21F7.0020.0004] # LATIN SMALL LIGATURE LONG S T +33DC ; [.21D2.0020.001D][.2247.0020.001C] # SQUARE SV +A731 ; [.21D6.0020.0002] # LATIN LETTER SMALL CAPITAL S +A7CA ; [.21D7.0020.0002] # LATIN SMALL LETTER S WITH SHORT STROKE OVERLAY +A7C9 ; [.21D7.0020.0008] # LATIN CAPITAL LETTER S WITH SHORT STROKE OVERLAY +1D74 ; [.21D8.0020.0002] # LATIN SMALL LETTER S WITH MIDDLE TILDE +1D8A ; [.21D9.0020.0002] # LATIN SMALL LETTER S WITH PALATAL HOOK +0282 ; [.21DA.0020.0002] # LATIN SMALL LETTER S WITH HOOK +A7C5 ; [.21DA.0020.0008] # LATIN CAPITAL LETTER S WITH HOOK +1DB3 ; [.21DA.0020.0014] # MODIFIER LETTER SMALL S WITH HOOK +023F ; [.21DE.0020.0002] # LATIN SMALL LETTER S WITH SWASH TAIL +2C7E ; [.21DE.0020.0008] # LATIN CAPITAL LETTER S WITH SWASH TAIL +1E9C ; [.21E2.0020.0002] # LATIN SMALL LETTER LONG S WITH DIAGONAL STROKE +1E9D ; [.21E3.0020.0002] # LATIN SMALL LETTER LONG S WITH HIGH STROKE +0283 ; [.21E4.0020.0002] # LATIN SMALL LETTER ESH +1DEF ; [.21E4.0020.0004] # COMBINING LATIN SMALL LETTER ESH +01A9 ; [.21E4.0020.0008] # LATIN CAPITAL LETTER ESH +1DB4 ; [.21E4.0020.0014] # MODIFIER LETTER SMALL ESH +AB4D ; [.21E8.0020.0002] # LATIN SMALL LETTER BASELINE ESH +1D8B ; [.21E9.0020.0002] # LATIN SMALL LETTER ESH WITH PALATAL HOOK +01AA ; [.21EA.0020.0002] # LATIN LETTER REVERSED ESH LOOP +0285 ; [.21EE.0020.0002] # LATIN SMALL LETTER SQUAT REVERSED ESH +1D98 ; [.21F2.0020.0002] # LATIN SMALL LETTER ESH WITH RETROFLEX HOOK +0286 ; [.21F3.0020.0002] # LATIN SMALL LETTER ESH WITH CURL +0074 ; [.21F7.0020.0002] # LATIN SMALL LETTER T +FF54 ; [.21F7.0020.0003] # FULLWIDTH LATIN SMALL LETTER T +036D ; [.21F7.0020.0004] # COMBINING LATIN SMALL LETTER T +24AF ; [*0328.0020.0004][.21F7.0020.0004][*0329.0020.0004] # PARENTHESIZED LATIN SMALL LETTER T +1D42D ; [.21F7.0020.0005] # MATHEMATICAL BOLD SMALL T +1D461 ; [.21F7.0020.0005] # MATHEMATICAL ITALIC SMALL T +1D495 ; [.21F7.0020.0005] # MATHEMATICAL BOLD ITALIC SMALL T +1D4C9 ; [.21F7.0020.0005] # MATHEMATICAL SCRIPT SMALL T +1D4FD ; [.21F7.0020.0005] # MATHEMATICAL BOLD SCRIPT SMALL T +1D531 ; [.21F7.0020.0005] # MATHEMATICAL FRAKTUR SMALL T +1D565 ; [.21F7.0020.0005] # MATHEMATICAL DOUBLE-STRUCK SMALL T +1D599 ; [.21F7.0020.0005] # MATHEMATICAL BOLD FRAKTUR SMALL T +1D5CD ; [.21F7.0020.0005] # MATHEMATICAL SANS-SERIF SMALL T +1D601 ; [.21F7.0020.0005] # MATHEMATICAL SANS-SERIF BOLD SMALL T +1D635 ; [.21F7.0020.0005] # MATHEMATICAL SANS-SERIF ITALIC SMALL T +1D669 ; [.21F7.0020.0005] # MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL T +1D69D ; [.21F7.0020.0005] # MATHEMATICAL MONOSPACE SMALL T +24E3 ; [.21F7.0020.0006] # CIRCLED LATIN SMALL LETTER T +0054 ; [.21F7.0020.0008] # LATIN CAPITAL LETTER T +FF34 ; [.21F7.0020.0009] # FULLWIDTH LATIN CAPITAL LETTER T +1F123 ; [*0328.0020.0004][.21F7.0020.000A][*0329.0020.0004] # PARENTHESIZED LATIN CAPITAL LETTER T +1D413 ; [.21F7.0020.000B] # MATHEMATICAL BOLD CAPITAL T +1D447 ; [.21F7.0020.000B] # MATHEMATICAL ITALIC CAPITAL T +1D47B ; [.21F7.0020.000B] # MATHEMATICAL BOLD ITALIC CAPITAL T +1D4AF ; [.21F7.0020.000B] # MATHEMATICAL SCRIPT CAPITAL T +1D4E3 ; [.21F7.0020.000B] # MATHEMATICAL BOLD SCRIPT CAPITAL T +1D517 ; [.21F7.0020.000B] # MATHEMATICAL FRAKTUR CAPITAL T +1D54B ; [.21F7.0020.000B] # MATHEMATICAL DOUBLE-STRUCK CAPITAL T +1D57F ; [.21F7.0020.000B] # MATHEMATICAL BOLD FRAKTUR CAPITAL T +1D5B3 ; [.21F7.0020.000B] # MATHEMATICAL SANS-SERIF CAPITAL T +1D5E7 ; [.21F7.0020.000B] # MATHEMATICAL SANS-SERIF BOLD CAPITAL T +1D61B ; [.21F7.0020.000B] # MATHEMATICAL SANS-SERIF ITALIC CAPITAL T +1D64F ; [.21F7.0020.000B] # MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL T +1D683 ; [.21F7.0020.000B] # MATHEMATICAL MONOSPACE CAPITAL T +24C9 ; [.21F7.0020.000C] # CIRCLED LATIN CAPITAL LETTER T +1F163 ; [.21F7.0020.000C] # NEGATIVE CIRCLED LATIN CAPITAL LETTER T +1D57 ; [.21F7.0020.0014] # MODIFIER LETTER SMALL T +209C ; [.21F7.0020.0015] # LATIN SUBSCRIPT SMALL LETTER T +1D40 ; [.21F7.0020.001D] # MODIFIER LETTER CAPITAL T +1F143 ; [.21F7.0020.001D] # SQUARED LATIN CAPITAL LETTER T +1F183 ; [.21F7.0020.001D] # NEGATIVE SQUARED LATIN CAPITAL LETTER T +0165 ; [.21F7.0020.0002][.0000.0028.0002] # LATIN SMALL LETTER T WITH CARON +0164 ; [.21F7.0020.0008][.0000.0028.0002] # LATIN CAPITAL LETTER T WITH CARON +1E97 ; [.21F7.0020.0002][.0000.002B.0002] # LATIN SMALL LETTER T WITH DIAERESIS +1E6B ; [.21F7.0020.0002][.0000.002E.0002] # LATIN SMALL LETTER T WITH DOT ABOVE +1E6A ; [.21F7.0020.0008][.0000.002E.0002] # LATIN CAPITAL LETTER T WITH DOT ABOVE +0163 ; [.21F7.0020.0002][.0000.0030.0002] # LATIN SMALL LETTER T WITH CEDILLA +0162 ; [.21F7.0020.0008][.0000.0030.0002] # LATIN CAPITAL LETTER T WITH CEDILLA +1E6D ; [.21F7.0020.0002][.0000.0042.0002] # LATIN SMALL LETTER T WITH DOT BELOW +1E6C ; [.21F7.0020.0008][.0000.0042.0002] # LATIN CAPITAL LETTER T WITH DOT BELOW +021B ; [.21F7.0020.0002][.0000.0045.0002] # LATIN SMALL LETTER T WITH COMMA BELOW +021A ; [.21F7.0020.0008][.0000.0045.0002] # LATIN CAPITAL LETTER T WITH COMMA BELOW +1E71 ; [.21F7.0020.0002][.0000.0046.0002] # LATIN SMALL LETTER T WITH CIRCUMFLEX BELOW +1E70 ; [.21F7.0020.0008][.0000.0046.0002] # LATIN CAPITAL LETTER T WITH CIRCUMFLEX BELOW +1E6F ; [.21F7.0020.0002][.0000.0049.0002] # LATIN SMALL LETTER T WITH LINE BELOW +1E6E ; [.21F7.0020.0008][.0000.0049.0002] # LATIN CAPITAL LETTER T WITH LINE BELOW +A787 ; [.21F7.0020.0004][.0000.0119.0004] # LATIN SMALL LETTER INSULAR T +A786 ; [.21F7.0020.000A][.0000.0119.0004] # LATIN CAPITAL LETTER INSULAR T +02A8 ; [.21F7.0020.0004][.1FE5.0020.0004] # LATIN SMALL LETTER TC DIGRAPH WITH CURL +2121 ; [.21F7.0020.000A][.2007.0020.000A][.20D6.0020.000A] # TELEPHONE SIGN +1D7A ; [.21F7.0020.0004][.0000.0118.0004][.2075.0020.0004] # LATIN SMALL LETTER TH WITH STRIKETHROUGH +3394 ; [.21F7.0020.001D][.2075.0020.001D][.2286.0020.001C] # SQUARE THZ +2122 ; [.21F7.0020.0014][.2109.0020.0014] # TRADE MARK SIGN +01BE ; [.21F7.0020.0004][.21D2.0020.0004] # LATIN LETTER INVERTED GLOTTAL STOP WITH STROKE +02A6 ; [.21F7.0020.0004][.21D2.0020.0004] # LATIN SMALL LETTER TS DIGRAPH +AB67 ; [.21F7.0020.0004][.21DA.0020.0004] # LATIN SMALL LETTER TS DIGRAPH WITH RETROFLEX HOOK +02A7 ; [.21F7.0020.0004][.21E4.0020.0004] # LATIN SMALL LETTER TESH DIGRAPH +A729 ; [.21F7.0020.0004][.2286.0020.0004] # LATIN SMALL LETTER TZ +A728 ; [.21F7.0020.000A][.2286.0020.0004] # LATIN CAPITAL LETTER TZ +1D1B ; [.21FB.0020.0002] # LATIN LETTER SMALL CAPITAL T +0167 ; [.21FC.0020.0002] # LATIN SMALL LETTER T WITH STROKE +0166 ; [.21FC.0020.0008] # LATIN CAPITAL LETTER T WITH STROKE +2C66 ; [.2200.0020.0002] # LATIN SMALL LETTER T WITH DIAGONAL STROKE +023E ; [.2200.0020.0008] # LATIN CAPITAL LETTER T WITH DIAGONAL STROKE +1D75 ; [.2201.0020.0002] # LATIN SMALL LETTER T WITH MIDDLE TILDE +01AB ; [.2202.0020.0002] # LATIN SMALL LETTER T WITH PALATAL HOOK +1DB5 ; [.2202.0020.0014] # MODIFIER LETTER SMALL T WITH PALATAL HOOK +01AD ; [.2206.0020.0002] # LATIN SMALL LETTER T WITH HOOK +01AC ; [.2206.0020.0008] # LATIN CAPITAL LETTER T WITH HOOK +0288 ; [.220A.0020.0002] # LATIN SMALL LETTER T WITH RETROFLEX HOOK +01AE ; [.220A.0020.0008] # LATIN CAPITAL LETTER T WITH RETROFLEX HOOK +0236 ; [.220E.0020.0002] # LATIN SMALL LETTER T WITH CURL +A777 ; [.2212.0020.0002] # LATIN SMALL LETTER TUM +0287 ; [.2213.0020.0002] # LATIN SMALL LETTER TURNED T +A7B1 ; [.2213.0020.0008] # LATIN CAPITAL LETTER TURNED T +0075 ; [.2217.0020.0002] # LATIN SMALL LETTER U +FF55 ; [.2217.0020.0003] # FULLWIDTH LATIN SMALL LETTER U +0367 ; [.2217.0020.0004] # COMBINING LATIN SMALL LETTER U +24B0 ; [*0328.0020.0004][.2217.0020.0004][*0329.0020.0004] # PARENTHESIZED LATIN SMALL LETTER U +1D42E ; [.2217.0020.0005] # MATHEMATICAL BOLD SMALL U +1D462 ; [.2217.0020.0005] # MATHEMATICAL ITALIC SMALL U +1D496 ; [.2217.0020.0005] # MATHEMATICAL BOLD ITALIC SMALL U +1D4CA ; [.2217.0020.0005] # MATHEMATICAL SCRIPT SMALL U +1D4FE ; [.2217.0020.0005] # MATHEMATICAL BOLD SCRIPT SMALL U +1D532 ; [.2217.0020.0005] # MATHEMATICAL FRAKTUR SMALL U +1D566 ; [.2217.0020.0005] # MATHEMATICAL DOUBLE-STRUCK SMALL U +1D59A ; [.2217.0020.0005] # MATHEMATICAL BOLD FRAKTUR SMALL U +1D5CE ; [.2217.0020.0005] # MATHEMATICAL SANS-SERIF SMALL U +1D602 ; [.2217.0020.0005] # MATHEMATICAL SANS-SERIF BOLD SMALL U +1D636 ; [.2217.0020.0005] # MATHEMATICAL SANS-SERIF ITALIC SMALL U +1D66A ; [.2217.0020.0005] # MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL U +1D69E ; [.2217.0020.0005] # MATHEMATICAL MONOSPACE SMALL U +24E4 ; [.2217.0020.0006] # CIRCLED LATIN SMALL LETTER U +0055 ; [.2217.0020.0008] # LATIN CAPITAL LETTER U +FF35 ; [.2217.0020.0009] # FULLWIDTH LATIN CAPITAL LETTER U +1F124 ; [*0328.0020.0004][.2217.0020.000A][*0329.0020.0004] # PARENTHESIZED LATIN CAPITAL LETTER U +1D414 ; [.2217.0020.000B] # MATHEMATICAL BOLD CAPITAL U +1D448 ; [.2217.0020.000B] # MATHEMATICAL ITALIC CAPITAL U +1D47C ; [.2217.0020.000B] # MATHEMATICAL BOLD ITALIC CAPITAL U +1D4B0 ; [.2217.0020.000B] # MATHEMATICAL SCRIPT CAPITAL U +1D4E4 ; [.2217.0020.000B] # MATHEMATICAL BOLD SCRIPT CAPITAL U +1D518 ; [.2217.0020.000B] # MATHEMATICAL FRAKTUR CAPITAL U +1D54C ; [.2217.0020.000B] # MATHEMATICAL DOUBLE-STRUCK CAPITAL U +1D580 ; [.2217.0020.000B] # MATHEMATICAL BOLD FRAKTUR CAPITAL U +1D5B4 ; [.2217.0020.000B] # MATHEMATICAL SANS-SERIF CAPITAL U +1D5E8 ; [.2217.0020.000B] # MATHEMATICAL SANS-SERIF BOLD CAPITAL U +1D61C ; [.2217.0020.000B] # MATHEMATICAL SANS-SERIF ITALIC CAPITAL U +1D650 ; [.2217.0020.000B] # MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL U +1D684 ; [.2217.0020.000B] # MATHEMATICAL MONOSPACE CAPITAL U +24CA ; [.2217.0020.000C] # CIRCLED LATIN CAPITAL LETTER U +1F164 ; [.2217.0020.000C] # NEGATIVE CIRCLED LATIN CAPITAL LETTER U +1D58 ; [.2217.0020.0014] # MODIFIER LETTER SMALL U +1D64 ; [.2217.0020.0015] # LATIN SUBSCRIPT SMALL LETTER U +1D41 ; [.2217.0020.001D] # MODIFIER LETTER CAPITAL U +1F144 ; [.2217.0020.001D] # SQUARED LATIN CAPITAL LETTER U +1F184 ; [.2217.0020.001D] # NEGATIVE SQUARED LATIN CAPITAL LETTER U +00FA ; [.2217.0020.0002][.0000.0024.0002] # LATIN SMALL LETTER U WITH ACUTE +00DA ; [.2217.0020.0008][.0000.0024.0002] # LATIN CAPITAL LETTER U WITH ACUTE +00F9 ; [.2217.0020.0002][.0000.0025.0002] # LATIN SMALL LETTER U WITH GRAVE +00D9 ; [.2217.0020.0008][.0000.0025.0002] # LATIN CAPITAL LETTER U WITH GRAVE +016D ; [.2217.0020.0002][.0000.0026.0002] # LATIN SMALL LETTER U WITH BREVE +016C ; [.2217.0020.0008][.0000.0026.0002] # LATIN CAPITAL LETTER U WITH BREVE +00FB ; [.2217.0020.0002][.0000.0027.0002] # LATIN SMALL LETTER U WITH CIRCUMFLEX +00DB ; [.2217.0020.0008][.0000.0027.0002] # LATIN CAPITAL LETTER U WITH CIRCUMFLEX +01D4 ; [.2217.0020.0002][.0000.0028.0002] # LATIN SMALL LETTER U WITH CARON +01D3 ; [.2217.0020.0008][.0000.0028.0002] # LATIN CAPITAL LETTER U WITH CARON +016F ; [.2217.0020.0002][.0000.0029.0002] # LATIN SMALL LETTER U WITH RING ABOVE +016E ; [.2217.0020.0008][.0000.0029.0002] # LATIN CAPITAL LETTER U WITH RING ABOVE +00FC ; [.2217.0020.0002][.0000.002B.0002] # LATIN SMALL LETTER U WITH DIAERESIS +1DF4 ; [.2217.0020.0004][.0000.002B.0004] # COMBINING LATIN SMALL LETTER U WITH DIAERESIS +A79F ; [.2217.0020.0004][.0000.002B.0004] # LATIN SMALL LETTER VOLAPUK UE +00DC ; [.2217.0020.0008][.0000.002B.0002] # LATIN CAPITAL LETTER U WITH DIAERESIS +A79E ; [.2217.0020.000A][.0000.002B.0004] # LATIN CAPITAL LETTER VOLAPUK UE +01D8 ; [.2217.0020.0002][.0000.002B.0002][.0000.0024.0002] # LATIN SMALL LETTER U WITH DIAERESIS AND ACUTE +01D7 ; [.2217.0020.0008][.0000.002B.0002][.0000.0024.0002] # LATIN CAPITAL LETTER U WITH DIAERESIS AND ACUTE +01DC ; [.2217.0020.0002][.0000.002B.0002][.0000.0025.0002] # LATIN SMALL LETTER U WITH DIAERESIS AND GRAVE +01DB ; [.2217.0020.0008][.0000.002B.0002][.0000.0025.0002] # LATIN CAPITAL LETTER U WITH DIAERESIS AND GRAVE +01DA ; [.2217.0020.0002][.0000.002B.0002][.0000.0028.0002] # LATIN SMALL LETTER U WITH DIAERESIS AND CARON +01D9 ; [.2217.0020.0008][.0000.002B.0002][.0000.0028.0002] # LATIN CAPITAL LETTER U WITH DIAERESIS AND CARON +01D6 ; [.2217.0020.0002][.0000.002B.0002][.0000.0032.0002] # LATIN SMALL LETTER U WITH DIAERESIS AND MACRON +01D5 ; [.2217.0020.0008][.0000.002B.0002][.0000.0032.0002] # LATIN CAPITAL LETTER U WITH DIAERESIS AND MACRON +0171 ; [.2217.0020.0002][.0000.002C.0002] # LATIN SMALL LETTER U WITH DOUBLE ACUTE +0170 ; [.2217.0020.0008][.0000.002C.0002] # LATIN CAPITAL LETTER U WITH DOUBLE ACUTE +0169 ; [.2217.0020.0002][.0000.002D.0002] # LATIN SMALL LETTER U WITH TILDE +0168 ; [.2217.0020.0008][.0000.002D.0002] # LATIN CAPITAL LETTER U WITH TILDE +1E79 ; [.2217.0020.0002][.0000.002D.0002][.0000.0024.0002] # LATIN SMALL LETTER U WITH TILDE AND ACUTE +1E78 ; [.2217.0020.0008][.0000.002D.0002][.0000.0024.0002] # LATIN CAPITAL LETTER U WITH TILDE AND ACUTE +0173 ; [.2217.0020.0002][.0000.0031.0002] # LATIN SMALL LETTER U WITH OGONEK +0172 ; [.2217.0020.0008][.0000.0031.0002] # LATIN CAPITAL LETTER U WITH OGONEK +016B ; [.2217.0020.0002][.0000.0032.0002] # LATIN SMALL LETTER U WITH MACRON +016A ; [.2217.0020.0008][.0000.0032.0002] # LATIN CAPITAL LETTER U WITH MACRON +1E7B ; [.2217.0020.0002][.0000.0032.0002][.0000.002B.0002] # LATIN SMALL LETTER U WITH MACRON AND DIAERESIS +1E7A ; [.2217.0020.0008][.0000.0032.0002][.0000.002B.0002] # LATIN CAPITAL LETTER U WITH MACRON AND DIAERESIS +1DF0 ; [.2217.0020.0004][.0000.0034.0004] # COMBINING LATIN SMALL LETTER U WITH LIGHT CENTRALIZATION STROKE +1EE7 ; [.2217.0020.0002][.0000.003B.0002] # LATIN SMALL LETTER U WITH HOOK ABOVE +1EE6 ; [.2217.0020.0008][.0000.003B.0002] # LATIN CAPITAL LETTER U WITH HOOK ABOVE +0215 ; [.2217.0020.0002][.0000.003C.0002] # LATIN SMALL LETTER U WITH DOUBLE GRAVE +0214 ; [.2217.0020.0008][.0000.003C.0002] # LATIN CAPITAL LETTER U WITH DOUBLE GRAVE +0217 ; [.2217.0020.0002][.0000.003E.0002] # LATIN SMALL LETTER U WITH INVERTED BREVE +0216 ; [.2217.0020.0008][.0000.003E.0002] # LATIN CAPITAL LETTER U WITH INVERTED BREVE +01B0 ; [.2217.0020.0002][.0000.003F.0002] # LATIN SMALL LETTER U WITH HORN +01AF ; [.2217.0020.0008][.0000.003F.0002] # LATIN CAPITAL LETTER U WITH HORN +1EE9 ; [.2217.0020.0002][.0000.003F.0002][.0000.0024.0002] # LATIN SMALL LETTER U WITH HORN AND ACUTE +1EE8 ; [.2217.0020.0008][.0000.003F.0002][.0000.0024.0002] # LATIN CAPITAL LETTER U WITH HORN AND ACUTE +1EEB ; [.2217.0020.0002][.0000.003F.0002][.0000.0025.0002] # LATIN SMALL LETTER U WITH HORN AND GRAVE +1EEA ; [.2217.0020.0008][.0000.003F.0002][.0000.0025.0002] # LATIN CAPITAL LETTER U WITH HORN AND GRAVE +1EEF ; [.2217.0020.0002][.0000.003F.0002][.0000.002D.0002] # LATIN SMALL LETTER U WITH HORN AND TILDE +1EEE ; [.2217.0020.0008][.0000.003F.0002][.0000.002D.0002] # LATIN CAPITAL LETTER U WITH HORN AND TILDE +1EED ; [.2217.0020.0002][.0000.003F.0002][.0000.003B.0002] # LATIN SMALL LETTER U WITH HORN AND HOOK ABOVE +1EEC ; [.2217.0020.0008][.0000.003F.0002][.0000.003B.0002] # LATIN CAPITAL LETTER U WITH HORN AND HOOK ABOVE +1EF1 ; [.2217.0020.0002][.0000.003F.0002][.0000.0042.0002] # LATIN SMALL LETTER U WITH HORN AND DOT BELOW +1EF0 ; [.2217.0020.0008][.0000.003F.0002][.0000.0042.0002] # LATIN CAPITAL LETTER U WITH HORN AND DOT BELOW +1EE5 ; [.2217.0020.0002][.0000.0042.0002] # LATIN SMALL LETTER U WITH DOT BELOW +1EE4 ; [.2217.0020.0008][.0000.0042.0002] # LATIN CAPITAL LETTER U WITH DOT BELOW +1E73 ; [.2217.0020.0002][.0000.0043.0002] # LATIN SMALL LETTER U WITH DIAERESIS BELOW +1E72 ; [.2217.0020.0008][.0000.0043.0002] # LATIN CAPITAL LETTER U WITH DIAERESIS BELOW +1E77 ; [.2217.0020.0002][.0000.0046.0002] # LATIN SMALL LETTER U WITH CIRCUMFLEX BELOW +1E76 ; [.2217.0020.0008][.0000.0046.0002] # LATIN CAPITAL LETTER U WITH CIRCUMFLEX BELOW +1E75 ; [.2217.0020.0002][.0000.0048.0002] # LATIN SMALL LETTER U WITH TILDE BELOW +1E74 ; [.2217.0020.0008][.0000.0048.0002] # LATIN CAPITAL LETTER U WITH TILDE BELOW +1F1AB ; [.2217.0020.001D][.2075.0020.001D][.1FEB.0020.001D] # SQUARED UHD +1F199 ; [.2217.0020.001D][.216B.0020.001D][*0267.0020.001C] # SQUARED UP WITH EXCLAMATION MARK +1D1C ; [.221B.0020.0002] # LATIN LETTER SMALL CAPITAL U +1DB8 ; [.221B.0020.0014] # MODIFIER LETTER SMALL CAPITAL U +AB4E ; [.221C.0020.0002] # LATIN SMALL LETTER U WITH SHORT RIGHT LEG +1D1D ; [.221D.0020.0002] # LATIN SMALL LETTER SIDEWAYS U +1D59 ; [.221D.0020.0014] # MODIFIER LETTER SMALL SIDEWAYS U +1D1E ; [.221E.0020.0002] # LATIN SMALL LETTER SIDEWAYS DIAERESIZED U +1D6B ; [.221F.0020.0002] # LATIN SMALL LETTER UE +AB50 ; [.2220.0020.0002] # LATIN SMALL LETTER UI +AB51 ; [.2221.0020.0002] # LATIN SMALL LETTER TURNED UI +0289 ; [.2222.0020.0002] # LATIN SMALL LETTER U BAR +0244 ; [.2222.0020.0008] # LATIN CAPITAL LETTER U BAR +1DB6 ; [.2222.0020.0014] # MODIFIER LETTER SMALL U BAR +AB4F ; [.2226.0020.0002] # LATIN SMALL LETTER U BAR WITH SHORT RIGHT LEG +A7B9 ; [.2227.0020.0002] # LATIN SMALL LETTER U WITH STROKE +A7B8 ; [.2227.0020.0008] # LATIN CAPITAL LETTER U WITH STROKE +1D7E ; [.2228.0020.0002] # LATIN SMALL CAPITAL LETTER U WITH STROKE +1D99 ; [.2229.0020.0002] # LATIN SMALL LETTER U WITH RETROFLEX HOOK +AB52 ; [.222A.0020.0002] # LATIN SMALL LETTER U WITH LEFT HOOK +AB5F ; [.222A.0020.0014] # MODIFIER LETTER SMALL U WITH LEFT HOOK +A7BF ; [.222B.0020.0002] # LATIN SMALL LETTER GLOTTAL U +A7BE ; [.222B.0020.0008] # LATIN CAPITAL LETTER GLOTTAL U +0265 ; [.222C.0020.0002] # LATIN SMALL LETTER TURNED H +A78D ; [.222C.0020.0008] # LATIN CAPITAL LETTER TURNED H +1DA3 ; [.222C.0020.0014] # MODIFIER LETTER SMALL TURNED H +02AE ; [.2230.0020.0002] # LATIN SMALL LETTER TURNED H WITH FISHHOOK +02AF ; [.2234.0020.0002] # LATIN SMALL LETTER TURNED H WITH FISHHOOK AND TAIL +026F ; [.2238.0020.0002] # LATIN SMALL LETTER TURNED M +019C ; [.2238.0020.0008] # LATIN CAPITAL LETTER TURNED M +1D5A ; [.2238.0020.0014] # MODIFIER LETTER SMALL TURNED M +A7FA ; [.223C.0020.0002] # LATIN LETTER SMALL CAPITAL TURNED M +1D1F ; [.223D.0020.0002] # LATIN SMALL LETTER SIDEWAYS TURNED M +0270 ; [.223E.0020.0002] # LATIN SMALL LETTER TURNED M WITH LONG LEG +1DAD ; [.223E.0020.0014] # MODIFIER LETTER SMALL TURNED M WITH LONG LEG +028A ; [.2242.0020.0002] # LATIN SMALL LETTER UPSILON +01B1 ; [.2242.0020.0008] # LATIN CAPITAL LETTER UPSILON +1DB7 ; [.2242.0020.0014] # MODIFIER LETTER SMALL UPSILON +1D7F ; [.2246.0020.0002] # LATIN SMALL LETTER UPSILON WITH STROKE +0076 ; [.2247.0020.0002] # LATIN SMALL LETTER V +FF56 ; [.2247.0020.0003] # FULLWIDTH LATIN SMALL LETTER V +036E ; [.2247.0020.0004] # COMBINING LATIN SMALL LETTER V +2174 ; [.2247.0020.0004] # SMALL ROMAN NUMERAL FIVE +24B1 ; [*0328.0020.0004][.2247.0020.0004][*0329.0020.0004] # PARENTHESIZED LATIN SMALL LETTER V +1D42F ; [.2247.0020.0005] # MATHEMATICAL BOLD SMALL V +1D463 ; [.2247.0020.0005] # MATHEMATICAL ITALIC SMALL V +1D497 ; [.2247.0020.0005] # MATHEMATICAL BOLD ITALIC SMALL V +1D4CB ; [.2247.0020.0005] # MATHEMATICAL SCRIPT SMALL V +1D4FF ; [.2247.0020.0005] # MATHEMATICAL BOLD SCRIPT SMALL V +1D533 ; [.2247.0020.0005] # MATHEMATICAL FRAKTUR SMALL V +1D567 ; [.2247.0020.0005] # MATHEMATICAL DOUBLE-STRUCK SMALL V +1D59B ; [.2247.0020.0005] # MATHEMATICAL BOLD FRAKTUR SMALL V +1D5CF ; [.2247.0020.0005] # MATHEMATICAL SANS-SERIF SMALL V +1D603 ; [.2247.0020.0005] # MATHEMATICAL SANS-SERIF BOLD SMALL V +1D637 ; [.2247.0020.0005] # MATHEMATICAL SANS-SERIF ITALIC SMALL V +1D66B ; [.2247.0020.0005] # MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL V +1D69F ; [.2247.0020.0005] # MATHEMATICAL MONOSPACE SMALL V +24E5 ; [.2247.0020.0006] # CIRCLED LATIN SMALL LETTER V +0056 ; [.2247.0020.0008] # LATIN CAPITAL LETTER V +FF36 ; [.2247.0020.0009] # FULLWIDTH LATIN CAPITAL LETTER V +2164 ; [.2247.0020.000A] # ROMAN NUMERAL FIVE +1F125 ; [*0328.0020.0004][.2247.0020.000A][*0329.0020.0004] # PARENTHESIZED LATIN CAPITAL LETTER V +1D415 ; [.2247.0020.000B] # MATHEMATICAL BOLD CAPITAL V +1D449 ; [.2247.0020.000B] # MATHEMATICAL ITALIC CAPITAL V +1D47D ; [.2247.0020.000B] # MATHEMATICAL BOLD ITALIC CAPITAL V +1D4B1 ; [.2247.0020.000B] # MATHEMATICAL SCRIPT CAPITAL V +1D4E5 ; [.2247.0020.000B] # MATHEMATICAL BOLD SCRIPT CAPITAL V +1D519 ; [.2247.0020.000B] # MATHEMATICAL FRAKTUR CAPITAL V +1D54D ; [.2247.0020.000B] # MATHEMATICAL DOUBLE-STRUCK CAPITAL V +1D581 ; [.2247.0020.000B] # MATHEMATICAL BOLD FRAKTUR CAPITAL V +1D5B5 ; [.2247.0020.000B] # MATHEMATICAL SANS-SERIF CAPITAL V +1D5E9 ; [.2247.0020.000B] # MATHEMATICAL SANS-SERIF BOLD CAPITAL V +1D61D ; [.2247.0020.000B] # MATHEMATICAL SANS-SERIF ITALIC CAPITAL V +1D651 ; [.2247.0020.000B] # MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL V +1D685 ; [.2247.0020.000B] # MATHEMATICAL MONOSPACE CAPITAL V +24CB ; [.2247.0020.000C] # CIRCLED LATIN CAPITAL LETTER V +1F165 ; [.2247.0020.000C] # NEGATIVE CIRCLED LATIN CAPITAL LETTER V +1D5B ; [.2247.0020.0014] # MODIFIER LETTER SMALL V +1D65 ; [.2247.0020.0015] # LATIN SUBSCRIPT SMALL LETTER V +2C7D ; [.2247.0020.001D] # MODIFIER LETTER CAPITAL V +1F145 ; [.2247.0020.001D] # SQUARED LATIN CAPITAL LETTER V +1F185 ; [.2247.0020.001D] # NEGATIVE SQUARED LATIN CAPITAL LETTER V +1E7D ; [.2247.0020.0002][.0000.002D.0002] # LATIN SMALL LETTER V WITH TILDE +1E7C ; [.2247.0020.0008][.0000.002D.0002] # LATIN CAPITAL LETTER V WITH TILDE +1E7F ; [.2247.0020.0002][.0000.0042.0002] # LATIN SMALL LETTER V WITH DOT BELOW +1E7E ; [.2247.0020.0008][.0000.0042.0002] # LATIN CAPITAL LETTER V WITH DOT BELOW +2175 ; [.2247.0020.0004][.2090.0020.0004] # SMALL ROMAN NUMERAL SIX +2165 ; [.2247.0020.000A][.2090.0020.000A] # ROMAN NUMERAL SIX +2176 ; [.2247.0020.0004][.2090.0020.0004][.2090.0020.0004] # SMALL ROMAN NUMERAL SEVEN +2166 ; [.2247.0020.000A][.2090.0020.000A][.2090.0020.000A] # ROMAN NUMERAL SEVEN +2177 ; [.2247.0020.0004][.2090.0020.0004][.2090.0020.0004][.2090.0020.0004] # SMALL ROMAN NUMERAL EIGHT +2167 ; [.2247.0020.000A][.2090.0020.000A][.2090.0020.000A][.2090.0020.000A] # ROMAN NUMERAL EIGHT +33DE ; [.2247.0020.001D][*0675.0020.001C][.2109.0020.001C] # SQUARE V OVER M +1F1AC ; [.2247.0020.001D][.213C.0020.001D][.1FEB.0020.001D] # SQUARED VOD +1F19A ; [.2247.0020.001D][.21D2.0020.001D] # SQUARED VS +A761 ; [.2247.0020.0004][.2270.0020.0004] # LATIN SMALL LETTER VY +A760 ; [.2247.0020.000A][.2270.0020.000A] # LATIN CAPITAL LETTER VY +1D20 ; [.224B.0020.0002] # LATIN LETTER SMALL CAPITAL V +A75F ; [.224C.0020.0002] # LATIN SMALL LETTER V WITH DIAGONAL STROKE +A75E ; [.224C.0020.0008] # LATIN CAPITAL LETTER V WITH DIAGONAL STROKE +1D8C ; [.224D.0020.0002] # LATIN SMALL LETTER V WITH PALATAL HOOK +028B ; [.224E.0020.0002] # LATIN SMALL LETTER V WITH HOOK +01B2 ; [.224E.0020.0008] # LATIN CAPITAL LETTER V WITH HOOK +1DB9 ; [.224E.0020.0014] # MODIFIER LETTER SMALL V WITH HOOK +2C71 ; [.2252.0020.0002] # LATIN SMALL LETTER V WITH RIGHT HOOK +2C74 ; [.2253.0020.0002] # LATIN SMALL LETTER V WITH CURL +1EFD ; [.2254.0020.0002] # LATIN SMALL LETTER MIDDLE-WELSH V +1EFC ; [.2254.0020.0008] # LATIN CAPITAL LETTER MIDDLE-WELSH V +028C ; [.2255.0020.0002] # LATIN SMALL LETTER TURNED V +0245 ; [.2255.0020.0008] # LATIN CAPITAL LETTER TURNED V +1DBA ; [.2255.0020.0014] # MODIFIER LETTER SMALL TURNED V +0077 ; [.2259.0020.0002] # LATIN SMALL LETTER W +FF57 ; [.2259.0020.0003] # FULLWIDTH LATIN SMALL LETTER W +1ABF ; [.2259.0020.0004] # COMBINING LATIN SMALL LETTER W BELOW +1DF1 ; [.2259.0020.0004] # COMBINING LATIN SMALL LETTER W +24B2 ; [*0328.0020.0004][.2259.0020.0004][*0329.0020.0004] # PARENTHESIZED LATIN SMALL LETTER W +1D430 ; [.2259.0020.0005] # MATHEMATICAL BOLD SMALL W +1D464 ; [.2259.0020.0005] # MATHEMATICAL ITALIC SMALL W +1D498 ; [.2259.0020.0005] # MATHEMATICAL BOLD ITALIC SMALL W +1D4CC ; [.2259.0020.0005] # MATHEMATICAL SCRIPT SMALL W +1D500 ; [.2259.0020.0005] # MATHEMATICAL BOLD SCRIPT SMALL W +1D534 ; [.2259.0020.0005] # MATHEMATICAL FRAKTUR SMALL W +1D568 ; [.2259.0020.0005] # MATHEMATICAL DOUBLE-STRUCK SMALL W +1D59C ; [.2259.0020.0005] # MATHEMATICAL BOLD FRAKTUR SMALL W +1D5D0 ; [.2259.0020.0005] # MATHEMATICAL SANS-SERIF SMALL W +1D604 ; [.2259.0020.0005] # MATHEMATICAL SANS-SERIF BOLD SMALL W +1D638 ; [.2259.0020.0005] # MATHEMATICAL SANS-SERIF ITALIC SMALL W +1D66C ; [.2259.0020.0005] # MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL W +1D6A0 ; [.2259.0020.0005] # MATHEMATICAL MONOSPACE SMALL W +24E6 ; [.2259.0020.0006] # CIRCLED LATIN SMALL LETTER W +0057 ; [.2259.0020.0008] # LATIN CAPITAL LETTER W +FF37 ; [.2259.0020.0009] # FULLWIDTH LATIN CAPITAL LETTER W +1F126 ; [*0328.0020.0004][.2259.0020.000A][*0329.0020.0004] # PARENTHESIZED LATIN CAPITAL LETTER W +1D416 ; [.2259.0020.000B] # MATHEMATICAL BOLD CAPITAL W +1D44A ; [.2259.0020.000B] # MATHEMATICAL ITALIC CAPITAL W +1D47E ; [.2259.0020.000B] # MATHEMATICAL BOLD ITALIC CAPITAL W +1D4B2 ; [.2259.0020.000B] # MATHEMATICAL SCRIPT CAPITAL W +1D4E6 ; [.2259.0020.000B] # MATHEMATICAL BOLD SCRIPT CAPITAL W +1D51A ; [.2259.0020.000B] # MATHEMATICAL FRAKTUR CAPITAL W +1D54E ; [.2259.0020.000B] # MATHEMATICAL DOUBLE-STRUCK CAPITAL W +1D582 ; [.2259.0020.000B] # MATHEMATICAL BOLD FRAKTUR CAPITAL W +1D5B6 ; [.2259.0020.000B] # MATHEMATICAL SANS-SERIF CAPITAL W +1D5EA ; [.2259.0020.000B] # MATHEMATICAL SANS-SERIF BOLD CAPITAL W +1D61E ; [.2259.0020.000B] # MATHEMATICAL SANS-SERIF ITALIC CAPITAL W +1D652 ; [.2259.0020.000B] # MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL W +1D686 ; [.2259.0020.000B] # MATHEMATICAL MONOSPACE CAPITAL W +24CC ; [.2259.0020.000C] # CIRCLED LATIN CAPITAL LETTER W +1F166 ; [.2259.0020.000C] # NEGATIVE CIRCLED LATIN CAPITAL LETTER W +02B7 ; [.2259.0020.0014] # MODIFIER LETTER SMALL W +1D42 ; [.2259.0020.001D] # MODIFIER LETTER CAPITAL W +1F146 ; [.2259.0020.001D] # SQUARED LATIN CAPITAL LETTER W +1F186 ; [.2259.0020.001D] # NEGATIVE SQUARED LATIN CAPITAL LETTER W +1E83 ; [.2259.0020.0002][.0000.0024.0002] # LATIN SMALL LETTER W WITH ACUTE +1E82 ; [.2259.0020.0008][.0000.0024.0002] # LATIN CAPITAL LETTER W WITH ACUTE +1E81 ; [.2259.0020.0002][.0000.0025.0002] # LATIN SMALL LETTER W WITH GRAVE +1E80 ; [.2259.0020.0008][.0000.0025.0002] # LATIN CAPITAL LETTER W WITH GRAVE +0175 ; [.2259.0020.0002][.0000.0027.0002] # LATIN SMALL LETTER W WITH CIRCUMFLEX +0174 ; [.2259.0020.0008][.0000.0027.0002] # LATIN CAPITAL LETTER W WITH CIRCUMFLEX +1E98 ; [.2259.0020.0002][.0000.0029.0002] # LATIN SMALL LETTER W WITH RING ABOVE +1E85 ; [.2259.0020.0002][.0000.002B.0002] # LATIN SMALL LETTER W WITH DIAERESIS +1E84 ; [.2259.0020.0008][.0000.002B.0002] # LATIN CAPITAL LETTER W WITH DIAERESIS +1E87 ; [.2259.0020.0002][.0000.002E.0002] # LATIN SMALL LETTER W WITH DOT ABOVE +1E86 ; [.2259.0020.0008][.0000.002E.0002] # LATIN CAPITAL LETTER W WITH DOT ABOVE +1E89 ; [.2259.0020.0002][.0000.0042.0002] # LATIN SMALL LETTER W WITH DOT BELOW +1E88 ; [.2259.0020.0008][.0000.0042.0002] # LATIN CAPITAL LETTER W WITH DOT BELOW +33DD ; [.2259.0020.001D][.1FBC.0020.001C] # SQUARE WB +1F14F ; [.2259.0020.001D][.1FD6.0020.001D] # SQUARED WC +1F18F ; [.2259.0020.001D][.1FD6.0020.001D] # NEGATIVE SQUARED WC +1F12E ; [.2259.0020.000C][.2286.0020.000C] # CIRCLED WZ +1D21 ; [.225D.0020.0002] # LATIN LETTER SMALL CAPITAL W +A7C3 ; [.225E.0020.0002] # LATIN SMALL LETTER ANGLICANA W +A7C2 ; [.225E.0020.0008] # LATIN CAPITAL LETTER ANGLICANA W +2C73 ; [.225F.0020.0002] # LATIN SMALL LETTER W WITH HOOK +2C72 ; [.225F.0020.0008] # LATIN CAPITAL LETTER W WITH HOOK +028D ; [.2260.0020.0002] # LATIN SMALL LETTER TURNED W +1AC0 ; [.2260.0020.0004] # COMBINING LATIN SMALL LETTER TURNED W BELOW +AB69 ; [.2260.0020.0014] # MODIFIER LETTER SMALL TURNED W +0078 ; [.2264.0020.0002] # LATIN SMALL LETTER X +FF58 ; [.2264.0020.0003] # FULLWIDTH LATIN SMALL LETTER X +036F ; [.2264.0020.0004] # COMBINING LATIN SMALL LETTER X +2179 ; [.2264.0020.0004] # SMALL ROMAN NUMERAL TEN +24B3 ; [*0328.0020.0004][.2264.0020.0004][*0329.0020.0004] # PARENTHESIZED LATIN SMALL LETTER X +1D431 ; [.2264.0020.0005] # MATHEMATICAL BOLD SMALL X +1D465 ; [.2264.0020.0005] # MATHEMATICAL ITALIC SMALL X +1D499 ; [.2264.0020.0005] # MATHEMATICAL BOLD ITALIC SMALL X +1D4CD ; [.2264.0020.0005] # MATHEMATICAL SCRIPT SMALL X +1D501 ; [.2264.0020.0005] # MATHEMATICAL BOLD SCRIPT SMALL X +1D535 ; [.2264.0020.0005] # MATHEMATICAL FRAKTUR SMALL X +1D569 ; [.2264.0020.0005] # MATHEMATICAL DOUBLE-STRUCK SMALL X +1D59D ; [.2264.0020.0005] # MATHEMATICAL BOLD FRAKTUR SMALL X +1D5D1 ; [.2264.0020.0005] # MATHEMATICAL SANS-SERIF SMALL X +1D605 ; [.2264.0020.0005] # MATHEMATICAL SANS-SERIF BOLD SMALL X +1D639 ; [.2264.0020.0005] # MATHEMATICAL SANS-SERIF ITALIC SMALL X +1D66D ; [.2264.0020.0005] # MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL X +1D6A1 ; [.2264.0020.0005] # MATHEMATICAL MONOSPACE SMALL X +24E7 ; [.2264.0020.0006] # CIRCLED LATIN SMALL LETTER X +0058 ; [.2264.0020.0008] # LATIN CAPITAL LETTER X +FF38 ; [.2264.0020.0009] # FULLWIDTH LATIN CAPITAL LETTER X +2169 ; [.2264.0020.000A] # ROMAN NUMERAL TEN +1F127 ; [*0328.0020.0004][.2264.0020.000A][*0329.0020.0004] # PARENTHESIZED LATIN CAPITAL LETTER X +1D417 ; [.2264.0020.000B] # MATHEMATICAL BOLD CAPITAL X +1D44B ; [.2264.0020.000B] # MATHEMATICAL ITALIC CAPITAL X +1D47F ; [.2264.0020.000B] # MATHEMATICAL BOLD ITALIC CAPITAL X +1D4B3 ; [.2264.0020.000B] # MATHEMATICAL SCRIPT CAPITAL X +1D4E7 ; [.2264.0020.000B] # MATHEMATICAL BOLD SCRIPT CAPITAL X +1D51B ; [.2264.0020.000B] # MATHEMATICAL FRAKTUR CAPITAL X +1D54F ; [.2264.0020.000B] # MATHEMATICAL DOUBLE-STRUCK CAPITAL X +1D583 ; [.2264.0020.000B] # MATHEMATICAL BOLD FRAKTUR CAPITAL X +1D5B7 ; [.2264.0020.000B] # MATHEMATICAL SANS-SERIF CAPITAL X +1D5EB ; [.2264.0020.000B] # MATHEMATICAL SANS-SERIF BOLD CAPITAL X +1D61F ; [.2264.0020.000B] # MATHEMATICAL SANS-SERIF ITALIC CAPITAL X +1D653 ; [.2264.0020.000B] # MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL X +1D687 ; [.2264.0020.000B] # MATHEMATICAL MONOSPACE CAPITAL X +24CD ; [.2264.0020.000C] # CIRCLED LATIN CAPITAL LETTER X +1F167 ; [.2264.0020.000C] # NEGATIVE CIRCLED LATIN CAPITAL LETTER X +02E3 ; [.2264.0020.0014] # MODIFIER LETTER SMALL X +2093 ; [.2264.0020.0015] # LATIN SUBSCRIPT SMALL LETTER X +1F147 ; [.2264.0020.001D] # SQUARED LATIN CAPITAL LETTER X +1F187 ; [.2264.0020.001D] # NEGATIVE SQUARED LATIN CAPITAL LETTER X +1E8D ; [.2264.0020.0002][.0000.002B.0002] # LATIN SMALL LETTER X WITH DIAERESIS +1E8C ; [.2264.0020.0008][.0000.002B.0002] # LATIN CAPITAL LETTER X WITH DIAERESIS +1E8B ; [.2264.0020.0002][.0000.002E.0002] # LATIN SMALL LETTER X WITH DOT ABOVE +1E8A ; [.2264.0020.0008][.0000.002E.0002] # LATIN CAPITAL LETTER X WITH DOT ABOVE +217A ; [.2264.0020.0004][.2090.0020.0004] # SMALL ROMAN NUMERAL ELEVEN +216A ; [.2264.0020.000A][.2090.0020.000A] # ROMAN NUMERAL ELEVEN +217B ; [.2264.0020.0004][.2090.0020.0004][.2090.0020.0004] # SMALL ROMAN NUMERAL TWELVE +216B ; [.2264.0020.000A][.2090.0020.000A][.2090.0020.000A] # ROMAN NUMERAL TWELVE +1D8D ; [.2268.0020.0002] # LATIN SMALL LETTER X WITH PALATAL HOOK +AB56 ; [.2269.0020.0002] # LATIN SMALL LETTER X WITH LOW RIGHT RING +AB57 ; [.226A.0020.0002] # LATIN SMALL LETTER X WITH LONG LEFT LEG +AB58 ; [.226B.0020.0002] # LATIN SMALL LETTER X WITH LONG LEFT LEG AND LOW RIGHT RING +AB59 ; [.226C.0020.0002] # LATIN SMALL LETTER X WITH LONG LEFT LEG WITH SERIF +AB53 ; [.226D.0020.0002] # LATIN SMALL LETTER CHI +A7B3 ; [.226D.0020.0008] # LATIN CAPITAL LETTER CHI +AB54 ; [.226E.0020.0002] # LATIN SMALL LETTER CHI WITH LOW RIGHT RING +AB55 ; [.226F.0020.0002] # LATIN SMALL LETTER CHI WITH LOW LEFT SERIF +0079 ; [.2270.0020.0002] # LATIN SMALL LETTER Y +FF59 ; [.2270.0020.0003] # FULLWIDTH LATIN SMALL LETTER Y +24B4 ; [*0328.0020.0004][.2270.0020.0004][*0329.0020.0004] # PARENTHESIZED LATIN SMALL LETTER Y +1D432 ; [.2270.0020.0005] # MATHEMATICAL BOLD SMALL Y +1D466 ; [.2270.0020.0005] # MATHEMATICAL ITALIC SMALL Y +1D49A ; [.2270.0020.0005] # MATHEMATICAL BOLD ITALIC SMALL Y +1D4CE ; [.2270.0020.0005] # MATHEMATICAL SCRIPT SMALL Y +1D502 ; [.2270.0020.0005] # MATHEMATICAL BOLD SCRIPT SMALL Y +1D536 ; [.2270.0020.0005] # MATHEMATICAL FRAKTUR SMALL Y +1D56A ; [.2270.0020.0005] # MATHEMATICAL DOUBLE-STRUCK SMALL Y +1D59E ; [.2270.0020.0005] # MATHEMATICAL BOLD FRAKTUR SMALL Y +1D5D2 ; [.2270.0020.0005] # MATHEMATICAL SANS-SERIF SMALL Y +1D606 ; [.2270.0020.0005] # MATHEMATICAL SANS-SERIF BOLD SMALL Y +1D63A ; [.2270.0020.0005] # MATHEMATICAL SANS-SERIF ITALIC SMALL Y +1D66E ; [.2270.0020.0005] # MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL Y +1D6A2 ; [.2270.0020.0005] # MATHEMATICAL MONOSPACE SMALL Y +24E8 ; [.2270.0020.0006] # CIRCLED LATIN SMALL LETTER Y +0059 ; [.2270.0020.0008] # LATIN CAPITAL LETTER Y +FF39 ; [.2270.0020.0009] # FULLWIDTH LATIN CAPITAL LETTER Y +1F128 ; [*0328.0020.0004][.2270.0020.000A][*0329.0020.0004] # PARENTHESIZED LATIN CAPITAL LETTER Y +1D418 ; [.2270.0020.000B] # MATHEMATICAL BOLD CAPITAL Y +1D44C ; [.2270.0020.000B] # MATHEMATICAL ITALIC CAPITAL Y +1D480 ; [.2270.0020.000B] # MATHEMATICAL BOLD ITALIC CAPITAL Y +1D4B4 ; [.2270.0020.000B] # MATHEMATICAL SCRIPT CAPITAL Y +1D4E8 ; [.2270.0020.000B] # MATHEMATICAL BOLD SCRIPT CAPITAL Y +1D51C ; [.2270.0020.000B] # MATHEMATICAL FRAKTUR CAPITAL Y +1D550 ; [.2270.0020.000B] # MATHEMATICAL DOUBLE-STRUCK CAPITAL Y +1D584 ; [.2270.0020.000B] # MATHEMATICAL BOLD FRAKTUR CAPITAL Y +1D5B8 ; [.2270.0020.000B] # MATHEMATICAL SANS-SERIF CAPITAL Y +1D5EC ; [.2270.0020.000B] # MATHEMATICAL SANS-SERIF BOLD CAPITAL Y +1D620 ; [.2270.0020.000B] # MATHEMATICAL SANS-SERIF ITALIC CAPITAL Y +1D654 ; [.2270.0020.000B] # MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL Y +1D688 ; [.2270.0020.000B] # MATHEMATICAL MONOSPACE CAPITAL Y +24CE ; [.2270.0020.000C] # CIRCLED LATIN CAPITAL LETTER Y +1F168 ; [.2270.0020.000C] # NEGATIVE CIRCLED LATIN CAPITAL LETTER Y +02B8 ; [.2270.0020.0014] # MODIFIER LETTER SMALL Y +1F148 ; [.2270.0020.001D] # SQUARED LATIN CAPITAL LETTER Y +1F188 ; [.2270.0020.001D] # NEGATIVE SQUARED LATIN CAPITAL LETTER Y +00FD ; [.2270.0020.0002][.0000.0024.0002] # LATIN SMALL LETTER Y WITH ACUTE +00DD ; [.2270.0020.0008][.0000.0024.0002] # LATIN CAPITAL LETTER Y WITH ACUTE +1EF3 ; [.2270.0020.0002][.0000.0025.0002] # LATIN SMALL LETTER Y WITH GRAVE +1EF2 ; [.2270.0020.0008][.0000.0025.0002] # LATIN CAPITAL LETTER Y WITH GRAVE +0177 ; [.2270.0020.0002][.0000.0027.0002] # LATIN SMALL LETTER Y WITH CIRCUMFLEX +0176 ; [.2270.0020.0008][.0000.0027.0002] # LATIN CAPITAL LETTER Y WITH CIRCUMFLEX +1E99 ; [.2270.0020.0002][.0000.0029.0002] # LATIN SMALL LETTER Y WITH RING ABOVE +00FF ; [.2270.0020.0002][.0000.002B.0002] # LATIN SMALL LETTER Y WITH DIAERESIS +0178 ; [.2270.0020.0008][.0000.002B.0002] # LATIN CAPITAL LETTER Y WITH DIAERESIS +1EF9 ; [.2270.0020.0002][.0000.002D.0002] # LATIN SMALL LETTER Y WITH TILDE +1EF8 ; [.2270.0020.0008][.0000.002D.0002] # LATIN CAPITAL LETTER Y WITH TILDE +1E8F ; [.2270.0020.0002][.0000.002E.0002] # LATIN SMALL LETTER Y WITH DOT ABOVE +1E8E ; [.2270.0020.0008][.0000.002E.0002] # LATIN CAPITAL LETTER Y WITH DOT ABOVE +0233 ; [.2270.0020.0002][.0000.0032.0002] # LATIN SMALL LETTER Y WITH MACRON +0232 ; [.2270.0020.0008][.0000.0032.0002] # LATIN CAPITAL LETTER Y WITH MACRON +1EF7 ; [.2270.0020.0002][.0000.003B.0002] # LATIN SMALL LETTER Y WITH HOOK ABOVE +1EF6 ; [.2270.0020.0008][.0000.003B.0002] # LATIN CAPITAL LETTER Y WITH HOOK ABOVE +1EF5 ; [.2270.0020.0002][.0000.0042.0002] # LATIN SMALL LETTER Y WITH DOT BELOW +1EF4 ; [.2270.0020.0008][.0000.0042.0002] # LATIN CAPITAL LETTER Y WITH DOT BELOW +028F ; [.2274.0020.0002] # LATIN LETTER SMALL CAPITAL Y +024F ; [.2278.0020.0002] # LATIN SMALL LETTER Y WITH STROKE +024E ; [.2278.0020.0008] # LATIN CAPITAL LETTER Y WITH STROKE +01B4 ; [.227C.0020.0002] # LATIN SMALL LETTER Y WITH HOOK +01B3 ; [.227C.0020.0008] # LATIN CAPITAL LETTER Y WITH HOOK +1EFF ; [.2280.0020.0002] # LATIN SMALL LETTER Y WITH LOOP +1EFE ; [.2280.0020.0008] # LATIN CAPITAL LETTER Y WITH LOOP +AB5A ; [.2281.0020.0002] # LATIN SMALL LETTER Y WITH SHORT RIGHT LEG +021D ; [.2282.0020.0002] # LATIN SMALL LETTER YOGH +021C ; [.2282.0020.0008] # LATIN CAPITAL LETTER YOGH +007A ; [.2286.0020.0002] # LATIN SMALL LETTER Z +FF5A ; [.2286.0020.0003] # FULLWIDTH LATIN SMALL LETTER Z +1DE6 ; [.2286.0020.0004] # COMBINING LATIN SMALL LETTER Z +24B5 ; [*0328.0020.0004][.2286.0020.0004][*0329.0020.0004] # PARENTHESIZED LATIN SMALL LETTER Z +1D433 ; [.2286.0020.0005] # MATHEMATICAL BOLD SMALL Z +1D467 ; [.2286.0020.0005] # MATHEMATICAL ITALIC SMALL Z +1D49B ; [.2286.0020.0005] # MATHEMATICAL BOLD ITALIC SMALL Z +1D4CF ; [.2286.0020.0005] # MATHEMATICAL SCRIPT SMALL Z +1D503 ; [.2286.0020.0005] # MATHEMATICAL BOLD SCRIPT SMALL Z +1D537 ; [.2286.0020.0005] # MATHEMATICAL FRAKTUR SMALL Z +1D56B ; [.2286.0020.0005] # MATHEMATICAL DOUBLE-STRUCK SMALL Z +1D59F ; [.2286.0020.0005] # MATHEMATICAL BOLD FRAKTUR SMALL Z +1D5D3 ; [.2286.0020.0005] # MATHEMATICAL SANS-SERIF SMALL Z +1D607 ; [.2286.0020.0005] # MATHEMATICAL SANS-SERIF BOLD SMALL Z +1D63B ; [.2286.0020.0005] # MATHEMATICAL SANS-SERIF ITALIC SMALL Z +1D66F ; [.2286.0020.0005] # MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL Z +1D6A3 ; [.2286.0020.0005] # MATHEMATICAL MONOSPACE SMALL Z +24E9 ; [.2286.0020.0006] # CIRCLED LATIN SMALL LETTER Z +005A ; [.2286.0020.0008] # LATIN CAPITAL LETTER Z +FF3A ; [.2286.0020.0009] # FULLWIDTH LATIN CAPITAL LETTER Z +1F129 ; [*0328.0020.0004][.2286.0020.000A][*0329.0020.0004] # PARENTHESIZED LATIN CAPITAL LETTER Z +2124 ; [.2286.0020.000B] # DOUBLE-STRUCK CAPITAL Z +2128 ; [.2286.0020.000B] # BLACK-LETTER CAPITAL Z +1D419 ; [.2286.0020.000B] # MATHEMATICAL BOLD CAPITAL Z +1D44D ; [.2286.0020.000B] # MATHEMATICAL ITALIC CAPITAL Z +1D481 ; [.2286.0020.000B] # MATHEMATICAL BOLD ITALIC CAPITAL Z +1D4B5 ; [.2286.0020.000B] # MATHEMATICAL SCRIPT CAPITAL Z +1D4E9 ; [.2286.0020.000B] # MATHEMATICAL BOLD SCRIPT CAPITAL Z +1D585 ; [.2286.0020.000B] # MATHEMATICAL BOLD FRAKTUR CAPITAL Z +1D5B9 ; [.2286.0020.000B] # MATHEMATICAL SANS-SERIF CAPITAL Z +1D5ED ; [.2286.0020.000B] # MATHEMATICAL SANS-SERIF BOLD CAPITAL Z +1D621 ; [.2286.0020.000B] # MATHEMATICAL SANS-SERIF ITALIC CAPITAL Z +1D655 ; [.2286.0020.000B] # MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL Z +1D689 ; [.2286.0020.000B] # MATHEMATICAL MONOSPACE CAPITAL Z +24CF ; [.2286.0020.000C] # CIRCLED LATIN CAPITAL LETTER Z +1F169 ; [.2286.0020.000C] # NEGATIVE CIRCLED LATIN CAPITAL LETTER Z +1DBB ; [.2286.0020.0014] # MODIFIER LETTER SMALL Z +1F149 ; [.2286.0020.001D] # SQUARED LATIN CAPITAL LETTER Z +1F189 ; [.2286.0020.001D] # NEGATIVE SQUARED LATIN CAPITAL LETTER Z +017A ; [.2286.0020.0002][.0000.0024.0002] # LATIN SMALL LETTER Z WITH ACUTE +0179 ; [.2286.0020.0008][.0000.0024.0002] # LATIN CAPITAL LETTER Z WITH ACUTE +1E91 ; [.2286.0020.0002][.0000.0027.0002] # LATIN SMALL LETTER Z WITH CIRCUMFLEX +1E90 ; [.2286.0020.0008][.0000.0027.0002] # LATIN CAPITAL LETTER Z WITH CIRCUMFLEX +017E ; [.2286.0020.0002][.0000.0028.0002] # LATIN SMALL LETTER Z WITH CARON +017D ; [.2286.0020.0008][.0000.0028.0002] # LATIN CAPITAL LETTER Z WITH CARON +017C ; [.2286.0020.0002][.0000.002E.0002] # LATIN SMALL LETTER Z WITH DOT ABOVE +017B ; [.2286.0020.0008][.0000.002E.0002] # LATIN CAPITAL LETTER Z WITH DOT ABOVE +1E93 ; [.2286.0020.0002][.0000.0042.0002] # LATIN SMALL LETTER Z WITH DOT BELOW +1E92 ; [.2286.0020.0008][.0000.0042.0002] # LATIN CAPITAL LETTER Z WITH DOT BELOW +1E95 ; [.2286.0020.0002][.0000.0049.0002] # LATIN SMALL LETTER Z WITH LINE BELOW +1E94 ; [.2286.0020.0008][.0000.0049.0002] # LATIN CAPITAL LETTER Z WITH LINE BELOW +018D ; [.2286.0020.0004][.2259.0020.0004] # LATIN SMALL LETTER TURNED DELTA +1D22 ; [.228A.0020.0002] # LATIN LETTER SMALL CAPITAL Z +01B6 ; [.228B.0020.0002] # LATIN SMALL LETTER Z WITH STROKE +01B5 ; [.228B.0020.0008] # LATIN CAPITAL LETTER Z WITH STROKE +1D76 ; [.228F.0020.0002] # LATIN SMALL LETTER Z WITH MIDDLE TILDE +1D8E ; [.2290.0020.0002] # LATIN SMALL LETTER Z WITH PALATAL HOOK +A7C6 ; [.2290.0020.0008] # LATIN CAPITAL LETTER Z WITH PALATAL HOOK +0225 ; [.2291.0020.0002] # LATIN SMALL LETTER Z WITH HOOK +0224 ; [.2291.0020.0008] # LATIN CAPITAL LETTER Z WITH HOOK +0290 ; [.2295.0020.0002] # LATIN SMALL LETTER Z WITH RETROFLEX HOOK +1DBC ; [.2295.0020.0014] # MODIFIER LETTER SMALL Z WITH RETROFLEX HOOK +0291 ; [.2299.0020.0002] # LATIN SMALL LETTER Z WITH CURL +1DBD ; [.2299.0020.0014] # MODIFIER LETTER SMALL Z WITH CURL +0240 ; [.229D.0020.0002] # LATIN SMALL LETTER Z WITH SWASH TAIL +2C7F ; [.229D.0020.0008] # LATIN CAPITAL LETTER Z WITH SWASH TAIL +2C6C ; [.22A1.0020.0002] # LATIN SMALL LETTER Z WITH DESCENDER +2C6B ; [.22A1.0020.0008] # LATIN CAPITAL LETTER Z WITH DESCENDER +A763 ; [.22A2.0020.0002] # LATIN SMALL LETTER VISIGOTHIC Z +A762 ; [.22A2.0020.0008] # LATIN CAPITAL LETTER VISIGOTHIC Z +0292 ; [.22A3.0020.0002] # LATIN SMALL LETTER EZH +01B7 ; [.22A3.0020.0008] # LATIN CAPITAL LETTER EZH +1DBE ; [.22A3.0020.0014] # MODIFIER LETTER SMALL EZH +01EF ; [.22A3.0020.0002][.0000.0028.0002] # LATIN SMALL LETTER EZH WITH CARON +01EE ; [.22A3.0020.0008][.0000.0028.0002] # LATIN CAPITAL LETTER EZH WITH CARON +1D23 ; [.22A7.0020.0002] # LATIN LETTER SMALL CAPITAL EZH +01B9 ; [.22A8.0020.0002] # LATIN SMALL LETTER EZH REVERSED +01B8 ; [.22A8.0020.0008] # LATIN CAPITAL LETTER EZH REVERSED +1D9A ; [.22AC.0020.0002] # LATIN SMALL LETTER EZH WITH RETROFLEX HOOK +01BA ; [.22AD.0020.0002] # LATIN SMALL LETTER EZH WITH TAIL +0293 ; [.22B1.0020.0002] # LATIN SMALL LETTER EZH WITH CURL +00FE ; [.22B5.0020.0002] # LATIN SMALL LETTER THORN +00DE ; [.22B5.0020.0008] # LATIN CAPITAL LETTER THORN +A765 ; [.22B9.0020.0002] # LATIN SMALL LETTER THORN WITH STROKE +A764 ; [.22B9.0020.0008] # LATIN CAPITAL LETTER THORN WITH STROKE +A767 ; [.22BA.0020.0002] # LATIN SMALL LETTER THORN WITH STROKE THROUGH DESCENDER +A766 ; [.22BA.0020.0008] # LATIN CAPITAL LETTER THORN WITH STROKE THROUGH DESCENDER +01BF ; [.22BB.0020.0002] # LATIN LETTER WYNN +01F7 ; [.22BB.0020.0008] # LATIN CAPITAL LETTER WYNN +A769 ; [.22BF.0020.0002] # LATIN SMALL LETTER VEND +A768 ; [.22BF.0020.0008] # LATIN CAPITAL LETTER VEND +AB60 ; [.22C0.0020.0002] # LATIN SMALL LETTER SAKHA YAT +AB61 ; [.22C1.0020.0002] # LATIN SMALL LETTER IOTIFIED E +AB63 ; [.22C2.0020.0002] # LATIN SMALL LETTER UO +A76B ; [.22C3.0020.0002] # LATIN SMALL LETTER ET +A76A ; [.22C3.0020.0008] # LATIN CAPITAL LETTER ET +A76D ; [.22C4.0020.0002] # LATIN SMALL LETTER IS +A76C ; [.22C4.0020.0008] # LATIN CAPITAL LETTER IS +A76F ; [.22C5.0020.0002] # LATIN SMALL LETTER CON +1DD2 ; [.22C5.0020.0004] # COMBINING US ABOVE +A76E ; [.22C5.0020.0008] # LATIN CAPITAL LETTER CON +A770 ; [.22C5.0020.0014] # MODIFIER LETTER US +A778 ; [.22C6.0020.0002] # LATIN SMALL LETTER UM +01BB ; [.22C7.0020.0002] # LATIN LETTER TWO WITH STROKE +A72B ; [.22CB.0020.0002] # LATIN SMALL LETTER TRESILLO +A72A ; [.22CB.0020.0008] # LATIN CAPITAL LETTER TRESILLO +A72D ; [.22CC.0020.0002] # LATIN SMALL LETTER CUATRILLO +A72C ; [.22CC.0020.0008] # LATIN CAPITAL LETTER CUATRILLO +A72F ; [.22CD.0020.0002] # LATIN SMALL LETTER CUATRILLO WITH COMMA +A72E ; [.22CD.0020.0008] # LATIN CAPITAL LETTER CUATRILLO WITH COMMA +01A8 ; [.22CE.0020.0002] # LATIN SMALL LETTER TONE TWO +01A7 ; [.22CE.0020.0008] # LATIN CAPITAL LETTER TONE TWO +01BD ; [.22D2.0020.0002] # LATIN SMALL LETTER TONE FIVE +01BC ; [.22D2.0020.0008] # LATIN CAPITAL LETTER TONE FIVE +0185 ; [.22D6.0020.0002] # LATIN SMALL LETTER TONE SIX +0184 ; [.22D6.0020.0008] # LATIN CAPITAL LETTER TONE SIX +0294 ; [.22DA.0020.0002] # LATIN LETTER GLOTTAL STOP +0242 ; [.22DE.0020.0002] # LATIN SMALL LETTER GLOTTAL STOP +0241 ; [.22DE.0020.0008] # LATIN CAPITAL LETTER GLOTTAL STOP +02C0 ; [.22E2.0020.0002] # MODIFIER LETTER GLOTTAL STOP +02BC ; [.22E3.0020.0002] # MODIFIER LETTER APOSTROPHE +0149 ; [.22E3.0020.0004][.2118.0020.0004] # LATIN SMALL LETTER N PRECEDED BY APOSTROPHE +02EE ; [.22E4.0020.0002] # MODIFIER LETTER DOUBLE APOSTROPHE +02BE ; [.22E5.0020.0002] # MODIFIER LETTER RIGHT HALF RING +A723 ; [.22E6.0020.0002] # LATIN SMALL LETTER EGYPTOLOGICAL ALEF +A722 ; [.22E6.0020.0008] # LATIN CAPITAL LETTER EGYPTOLOGICAL ALEF +A78C ; [.22E7.0020.0002] # LATIN SMALL LETTER SALTILLO +A78B ; [.22E7.0020.0008] # LATIN CAPITAL LETTER SALTILLO +A78F ; [.22E8.0020.0002] # LATIN LETTER SINOLOGICAL DOT +0295 ; [.22E9.0020.0002] # LATIN LETTER PHARYNGEAL VOICED FRICATIVE +02E4 ; [.22E9.0020.0014] # MODIFIER LETTER SMALL REVERSED GLOTTAL STOP +02BF ; [.22ED.0020.0002] # MODIFIER LETTER LEFT HALF RING +02C1 ; [.22EE.0020.0002] # MODIFIER LETTER REVERSED GLOTTAL STOP +1D24 ; [.22EF.0020.0002] # LATIN LETTER VOICED LARYNGEAL SPIRANT +1D25 ; [.22F0.0020.0002] # LATIN LETTER AIN +1D5C ; [.22F0.0020.0014] # MODIFIER LETTER SMALL AIN +A725 ; [.22F1.0020.0002] # LATIN SMALL LETTER EGYPTOLOGICAL AIN +A724 ; [.22F1.0020.0008] # LATIN CAPITAL LETTER EGYPTOLOGICAL AIN +02A1 ; [.22F2.0020.0002] # LATIN LETTER GLOTTAL STOP WITH STROKE +02A2 ; [.22F6.0020.0002] # LATIN LETTER REVERSED GLOTTAL STOP WITH STROKE +0296 ; [.22FA.0020.0002] # LATIN LETTER INVERTED GLOTTAL STOP +01C0 ; [.22FE.0020.0002] # LATIN LETTER DENTAL CLICK +01C1 ; [.2302.0020.0002] # LATIN LETTER LATERAL CLICK +01C2 ; [.2306.0020.0002] # LATIN LETTER ALVEOLAR CLICK +01C3 ; [.230A.0020.0002] # LATIN LETTER RETROFLEX CLICK +0297 ; [.230E.0020.0002] # LATIN LETTER STRETCHED C +0298 ; [.2312.0020.0002] # LATIN LETTER BILABIAL CLICK +02AC ; [.2316.0020.0002] # LATIN LETTER BILABIAL PERCUSSIVE +02AD ; [.231A.0020.0002] # LATIN LETTER BIDENTAL PERCUSSIVE +03B1 ; [.231E.0020.0002] # GREEK SMALL LETTER ALPHA +1D6C2 ; [.231E.0020.0005] # MATHEMATICAL BOLD SMALL ALPHA +1D6FC ; [.231E.0020.0005] # MATHEMATICAL ITALIC SMALL ALPHA +1D736 ; [.231E.0020.0005] # MATHEMATICAL BOLD ITALIC SMALL ALPHA +1D770 ; [.231E.0020.0005] # MATHEMATICAL SANS-SERIF BOLD SMALL ALPHA +1D7AA ; [.231E.0020.0005] # MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL ALPHA +0391 ; [.231E.0020.0008] # GREEK CAPITAL LETTER ALPHA +1D6A8 ; [.231E.0020.000B] # MATHEMATICAL BOLD CAPITAL ALPHA +1D6E2 ; [.231E.0020.000B] # MATHEMATICAL ITALIC CAPITAL ALPHA +1D71C ; [.231E.0020.000B] # MATHEMATICAL BOLD ITALIC CAPITAL ALPHA +1D756 ; [.231E.0020.000B] # MATHEMATICAL SANS-SERIF BOLD CAPITAL ALPHA +1D790 ; [.231E.0020.000B] # MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL ALPHA +1F00 ; [.231E.0020.0002][.0000.0022.0002] # GREEK SMALL LETTER ALPHA WITH PSILI +1F08 ; [.231E.0020.0008][.0000.0022.0002] # GREEK CAPITAL LETTER ALPHA WITH PSILI +1F04 ; [.231E.0020.0002][.0000.0022.0002][.0000.0024.0002] # GREEK SMALL LETTER ALPHA WITH PSILI AND OXIA +1F0C ; [.231E.0020.0008][.0000.0022.0002][.0000.0024.0002] # GREEK CAPITAL LETTER ALPHA WITH PSILI AND OXIA +1F84 ; [.231E.0020.0002][.0000.0022.0002][.0000.0024.0002][.0000.004C.0002] # GREEK SMALL LETTER ALPHA WITH PSILI AND OXIA AND YPOGEGRAMMENI +1F8C ; [.231E.0020.0008][.0000.0022.0002][.0000.0024.0002][.0000.004C.0002] # GREEK CAPITAL LETTER ALPHA WITH PSILI AND OXIA AND PROSGEGRAMMENI +1F02 ; [.231E.0020.0002][.0000.0022.0002][.0000.0025.0002] # GREEK SMALL LETTER ALPHA WITH PSILI AND VARIA +1F0A ; [.231E.0020.0008][.0000.0022.0002][.0000.0025.0002] # GREEK CAPITAL LETTER ALPHA WITH PSILI AND VARIA +1F82 ; [.231E.0020.0002][.0000.0022.0002][.0000.0025.0002][.0000.004C.0002] # GREEK SMALL LETTER ALPHA WITH PSILI AND VARIA AND YPOGEGRAMMENI +1F8A ; [.231E.0020.0008][.0000.0022.0002][.0000.0025.0002][.0000.004C.0002] # GREEK CAPITAL LETTER ALPHA WITH PSILI AND VARIA AND PROSGEGRAMMENI +1F06 ; [.231E.0020.0002][.0000.0022.0002][.0000.002A.0002] # GREEK SMALL LETTER ALPHA WITH PSILI AND PERISPOMENI +1F0E ; [.231E.0020.0008][.0000.0022.0002][.0000.002A.0002] # GREEK CAPITAL LETTER ALPHA WITH PSILI AND PERISPOMENI +1F86 ; [.231E.0020.0002][.0000.0022.0002][.0000.002A.0002][.0000.004C.0002] # GREEK SMALL LETTER ALPHA WITH PSILI AND PERISPOMENI AND YPOGEGRAMMENI +1F8E ; [.231E.0020.0008][.0000.0022.0002][.0000.002A.0002][.0000.004C.0002] # GREEK CAPITAL LETTER ALPHA WITH PSILI AND PERISPOMENI AND PROSGEGRAMMENI +1F80 ; [.231E.0020.0002][.0000.0022.0002][.0000.004C.0002] # GREEK SMALL LETTER ALPHA WITH PSILI AND YPOGEGRAMMENI +1F88 ; [.231E.0020.0008][.0000.0022.0002][.0000.004C.0002] # GREEK CAPITAL LETTER ALPHA WITH PSILI AND PROSGEGRAMMENI +1F01 ; [.231E.0020.0002][.0000.0023.0002] # GREEK SMALL LETTER ALPHA WITH DASIA +1F09 ; [.231E.0020.0008][.0000.0023.0002] # GREEK CAPITAL LETTER ALPHA WITH DASIA +1F05 ; [.231E.0020.0002][.0000.0023.0002][.0000.0024.0002] # GREEK SMALL LETTER ALPHA WITH DASIA AND OXIA +1F0D ; [.231E.0020.0008][.0000.0023.0002][.0000.0024.0002] # GREEK CAPITAL LETTER ALPHA WITH DASIA AND OXIA +1F85 ; [.231E.0020.0002][.0000.0023.0002][.0000.0024.0002][.0000.004C.0002] # GREEK SMALL LETTER ALPHA WITH DASIA AND OXIA AND YPOGEGRAMMENI +1F8D ; [.231E.0020.0008][.0000.0023.0002][.0000.0024.0002][.0000.004C.0002] # GREEK CAPITAL LETTER ALPHA WITH DASIA AND OXIA AND PROSGEGRAMMENI +1F03 ; [.231E.0020.0002][.0000.0023.0002][.0000.0025.0002] # GREEK SMALL LETTER ALPHA WITH DASIA AND VARIA +1F0B ; [.231E.0020.0008][.0000.0023.0002][.0000.0025.0002] # GREEK CAPITAL LETTER ALPHA WITH DASIA AND VARIA +1F83 ; [.231E.0020.0002][.0000.0023.0002][.0000.0025.0002][.0000.004C.0002] # GREEK SMALL LETTER ALPHA WITH DASIA AND VARIA AND YPOGEGRAMMENI +1F8B ; [.231E.0020.0008][.0000.0023.0002][.0000.0025.0002][.0000.004C.0002] # GREEK CAPITAL LETTER ALPHA WITH DASIA AND VARIA AND PROSGEGRAMMENI +1F07 ; [.231E.0020.0002][.0000.0023.0002][.0000.002A.0002] # GREEK SMALL LETTER ALPHA WITH DASIA AND PERISPOMENI +1F0F ; [.231E.0020.0008][.0000.0023.0002][.0000.002A.0002] # GREEK CAPITAL LETTER ALPHA WITH DASIA AND PERISPOMENI +1F87 ; [.231E.0020.0002][.0000.0023.0002][.0000.002A.0002][.0000.004C.0002] # GREEK SMALL LETTER ALPHA WITH DASIA AND PERISPOMENI AND YPOGEGRAMMENI +1F8F ; [.231E.0020.0008][.0000.0023.0002][.0000.002A.0002][.0000.004C.0002] # GREEK CAPITAL LETTER ALPHA WITH DASIA AND PERISPOMENI AND PROSGEGRAMMENI +1F81 ; [.231E.0020.0002][.0000.0023.0002][.0000.004C.0002] # GREEK SMALL LETTER ALPHA WITH DASIA AND YPOGEGRAMMENI +1F89 ; [.231E.0020.0008][.0000.0023.0002][.0000.004C.0002] # GREEK CAPITAL LETTER ALPHA WITH DASIA AND PROSGEGRAMMENI +03AC ; [.231E.0020.0002][.0000.0024.0002] # GREEK SMALL LETTER ALPHA WITH TONOS +1F71 ; [.231E.0020.0002][.0000.0024.0002] # GREEK SMALL LETTER ALPHA WITH OXIA +0386 ; [.231E.0020.0008][.0000.0024.0002] # GREEK CAPITAL LETTER ALPHA WITH TONOS +1FBB ; [.231E.0020.0008][.0000.0024.0002] # GREEK CAPITAL LETTER ALPHA WITH OXIA +1FB4 ; [.231E.0020.0002][.0000.0024.0002][.0000.004C.0002] # GREEK SMALL LETTER ALPHA WITH OXIA AND YPOGEGRAMMENI +1F70 ; [.231E.0020.0002][.0000.0025.0002] # GREEK SMALL LETTER ALPHA WITH VARIA +1FBA ; [.231E.0020.0008][.0000.0025.0002] # GREEK CAPITAL LETTER ALPHA WITH VARIA +1FB2 ; [.231E.0020.0002][.0000.0025.0002][.0000.004C.0002] # GREEK SMALL LETTER ALPHA WITH VARIA AND YPOGEGRAMMENI +1FB0 ; [.231E.0020.0002][.0000.0026.0002] # GREEK SMALL LETTER ALPHA WITH VRACHY +1FB8 ; [.231E.0020.0008][.0000.0026.0002] # GREEK CAPITAL LETTER ALPHA WITH VRACHY +1FB6 ; [.231E.0020.0002][.0000.002A.0002] # GREEK SMALL LETTER ALPHA WITH PERISPOMENI +1FB7 ; [.231E.0020.0002][.0000.002A.0002][.0000.004C.0002] # GREEK SMALL LETTER ALPHA WITH PERISPOMENI AND YPOGEGRAMMENI +1FB1 ; [.231E.0020.0002][.0000.0032.0002] # GREEK SMALL LETTER ALPHA WITH MACRON +1FB9 ; [.231E.0020.0008][.0000.0032.0002] # GREEK CAPITAL LETTER ALPHA WITH MACRON +1FB3 ; [.231E.0020.0002][.0000.004C.0002] # GREEK SMALL LETTER ALPHA WITH YPOGEGRAMMENI +1FBC ; [.231E.0020.0008][.0000.004C.0002] # GREEK CAPITAL LETTER ALPHA WITH PROSGEGRAMMENI +03B2 ; [.231F.0020.0002] # GREEK SMALL LETTER BETA +03D0 ; [.231F.0020.0004] # GREEK BETA SYMBOL +1D6C3 ; [.231F.0020.0005] # MATHEMATICAL BOLD SMALL BETA +1D6FD ; [.231F.0020.0005] # MATHEMATICAL ITALIC SMALL BETA +1D737 ; [.231F.0020.0005] # MATHEMATICAL BOLD ITALIC SMALL BETA +1D771 ; [.231F.0020.0005] # MATHEMATICAL SANS-SERIF BOLD SMALL BETA +1D7AB ; [.231F.0020.0005] # MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL BETA +0392 ; [.231F.0020.0008] # GREEK CAPITAL LETTER BETA +1D6A9 ; [.231F.0020.000B] # MATHEMATICAL BOLD CAPITAL BETA +1D6E3 ; [.231F.0020.000B] # MATHEMATICAL ITALIC CAPITAL BETA +1D71D ; [.231F.0020.000B] # MATHEMATICAL BOLD ITALIC CAPITAL BETA +1D757 ; [.231F.0020.000B] # MATHEMATICAL SANS-SERIF BOLD CAPITAL BETA +1D791 ; [.231F.0020.000B] # MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL BETA +1D5D ; [.231F.0020.0014] # MODIFIER LETTER SMALL BETA +1D66 ; [.231F.0020.0015] # GREEK SUBSCRIPT SMALL LETTER BETA +03B3 ; [.2320.0020.0002] # GREEK SMALL LETTER GAMMA +213D ; [.2320.0020.0005] # DOUBLE-STRUCK SMALL GAMMA +1D6C4 ; [.2320.0020.0005] # MATHEMATICAL BOLD SMALL GAMMA +1D6FE ; [.2320.0020.0005] # MATHEMATICAL ITALIC SMALL GAMMA +1D738 ; [.2320.0020.0005] # MATHEMATICAL BOLD ITALIC SMALL GAMMA +1D772 ; [.2320.0020.0005] # MATHEMATICAL SANS-SERIF BOLD SMALL GAMMA +1D7AC ; [.2320.0020.0005] # MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL GAMMA +0393 ; [.2320.0020.0008] # GREEK CAPITAL LETTER GAMMA +213E ; [.2320.0020.000B] # DOUBLE-STRUCK CAPITAL GAMMA +1D6AA ; [.2320.0020.000B] # MATHEMATICAL BOLD CAPITAL GAMMA +1D6E4 ; [.2320.0020.000B] # MATHEMATICAL ITALIC CAPITAL GAMMA +1D71E ; [.2320.0020.000B] # MATHEMATICAL BOLD ITALIC CAPITAL GAMMA +1D758 ; [.2320.0020.000B] # MATHEMATICAL SANS-SERIF BOLD CAPITAL GAMMA +1D792 ; [.2320.0020.000B] # MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL GAMMA +1D5E ; [.2320.0020.0014] # MODIFIER LETTER SMALL GREEK GAMMA +1D67 ; [.2320.0020.0015] # GREEK SUBSCRIPT SMALL LETTER GAMMA +1D26 ; [.2321.0020.0002] # GREEK LETTER SMALL CAPITAL GAMMA +03B4 ; [.2322.0020.0002] # GREEK SMALL LETTER DELTA +1D6C5 ; [.2322.0020.0005] # MATHEMATICAL BOLD SMALL DELTA +1D6FF ; [.2322.0020.0005] # MATHEMATICAL ITALIC SMALL DELTA +1D739 ; [.2322.0020.0005] # MATHEMATICAL BOLD ITALIC SMALL DELTA +1D773 ; [.2322.0020.0005] # MATHEMATICAL SANS-SERIF BOLD SMALL DELTA +1D7AD ; [.2322.0020.0005] # MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL DELTA +0394 ; [.2322.0020.0008] # GREEK CAPITAL LETTER DELTA +1D6AB ; [.2322.0020.000B] # MATHEMATICAL BOLD CAPITAL DELTA +1D6E5 ; [.2322.0020.000B] # MATHEMATICAL ITALIC CAPITAL DELTA +1D71F ; [.2322.0020.000B] # MATHEMATICAL BOLD ITALIC CAPITAL DELTA +1D759 ; [.2322.0020.000B] # MATHEMATICAL SANS-SERIF BOLD CAPITAL DELTA +1D793 ; [.2322.0020.000B] # MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL DELTA +1D5F ; [.2322.0020.0014] # MODIFIER LETTER SMALL DELTA +03B5 ; [.2323.0020.0002] # GREEK SMALL LETTER EPSILON +03F5 ; [.2323.0020.0004] # GREEK LUNATE EPSILON SYMBOL +1D6C6 ; [.2323.0020.0005] # MATHEMATICAL BOLD SMALL EPSILON +1D6DC ; [.2323.0020.0005] # MATHEMATICAL BOLD EPSILON SYMBOL +1D700 ; [.2323.0020.0005] # MATHEMATICAL ITALIC SMALL EPSILON +1D716 ; [.2323.0020.0005] # MATHEMATICAL ITALIC EPSILON SYMBOL +1D73A ; [.2323.0020.0005] # MATHEMATICAL BOLD ITALIC SMALL EPSILON +1D750 ; [.2323.0020.0005] # MATHEMATICAL BOLD ITALIC EPSILON SYMBOL +1D774 ; [.2323.0020.0005] # MATHEMATICAL SANS-SERIF BOLD SMALL EPSILON +1D78A ; [.2323.0020.0005] # MATHEMATICAL SANS-SERIF BOLD EPSILON SYMBOL +1D7AE ; [.2323.0020.0005] # MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL EPSILON +1D7C4 ; [.2323.0020.0005] # MATHEMATICAL SANS-SERIF BOLD ITALIC EPSILON SYMBOL +0395 ; [.2323.0020.0008] # GREEK CAPITAL LETTER EPSILON +1D6AC ; [.2323.0020.000B] # MATHEMATICAL BOLD CAPITAL EPSILON +1D6E6 ; [.2323.0020.000B] # MATHEMATICAL ITALIC CAPITAL EPSILON +1D720 ; [.2323.0020.000B] # MATHEMATICAL BOLD ITALIC CAPITAL EPSILON +1D75A ; [.2323.0020.000B] # MATHEMATICAL SANS-SERIF BOLD CAPITAL EPSILON +1D794 ; [.2323.0020.000B] # MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL EPSILON +1F10 ; [.2323.0020.0002][.0000.0022.0002] # GREEK SMALL LETTER EPSILON WITH PSILI +1F18 ; [.2323.0020.0008][.0000.0022.0002] # GREEK CAPITAL LETTER EPSILON WITH PSILI +1F14 ; [.2323.0020.0002][.0000.0022.0002][.0000.0024.0002] # GREEK SMALL LETTER EPSILON WITH PSILI AND OXIA +1F1C ; [.2323.0020.0008][.0000.0022.0002][.0000.0024.0002] # GREEK CAPITAL LETTER EPSILON WITH PSILI AND OXIA +1F12 ; [.2323.0020.0002][.0000.0022.0002][.0000.0025.0002] # GREEK SMALL LETTER EPSILON WITH PSILI AND VARIA +1F1A ; [.2323.0020.0008][.0000.0022.0002][.0000.0025.0002] # GREEK CAPITAL LETTER EPSILON WITH PSILI AND VARIA +1F11 ; [.2323.0020.0002][.0000.0023.0002] # GREEK SMALL LETTER EPSILON WITH DASIA +1F19 ; [.2323.0020.0008][.0000.0023.0002] # GREEK CAPITAL LETTER EPSILON WITH DASIA +1F15 ; [.2323.0020.0002][.0000.0023.0002][.0000.0024.0002] # GREEK SMALL LETTER EPSILON WITH DASIA AND OXIA +1F1D ; [.2323.0020.0008][.0000.0023.0002][.0000.0024.0002] # GREEK CAPITAL LETTER EPSILON WITH DASIA AND OXIA +1F13 ; [.2323.0020.0002][.0000.0023.0002][.0000.0025.0002] # GREEK SMALL LETTER EPSILON WITH DASIA AND VARIA +1F1B ; [.2323.0020.0008][.0000.0023.0002][.0000.0025.0002] # GREEK CAPITAL LETTER EPSILON WITH DASIA AND VARIA +03AD ; [.2323.0020.0002][.0000.0024.0002] # GREEK SMALL LETTER EPSILON WITH TONOS +1F73 ; [.2323.0020.0002][.0000.0024.0002] # GREEK SMALL LETTER EPSILON WITH OXIA +0388 ; [.2323.0020.0008][.0000.0024.0002] # GREEK CAPITAL LETTER EPSILON WITH TONOS +1FC9 ; [.2323.0020.0008][.0000.0024.0002] # GREEK CAPITAL LETTER EPSILON WITH OXIA +1F72 ; [.2323.0020.0002][.0000.0025.0002] # GREEK SMALL LETTER EPSILON WITH VARIA +1FC8 ; [.2323.0020.0008][.0000.0025.0002] # GREEK CAPITAL LETTER EPSILON WITH VARIA +03DD ; [.2324.0020.0002] # GREEK SMALL LETTER DIGAMMA +1D7CB ; [.2324.0020.0005] # MATHEMATICAL BOLD SMALL DIGAMMA +03DC ; [.2324.0020.0008] # GREEK LETTER DIGAMMA +1D7CA ; [.2324.0020.000B] # MATHEMATICAL BOLD CAPITAL DIGAMMA +0377 ; [.2325.0020.0002] # GREEK SMALL LETTER PAMPHYLIAN DIGAMMA +0376 ; [.2325.0020.0008] # GREEK CAPITAL LETTER PAMPHYLIAN DIGAMMA +03DB ; [.2326.0020.0002] # GREEK SMALL LETTER STIGMA +03DA ; [.2326.0020.0008] # GREEK LETTER STIGMA +03B6 ; [.2327.0020.0002] # GREEK SMALL LETTER ZETA +1D6C7 ; [.2327.0020.0005] # MATHEMATICAL BOLD SMALL ZETA +1D701 ; [.2327.0020.0005] # MATHEMATICAL ITALIC SMALL ZETA +1D73B ; [.2327.0020.0005] # MATHEMATICAL BOLD ITALIC SMALL ZETA +1D775 ; [.2327.0020.0005] # MATHEMATICAL SANS-SERIF BOLD SMALL ZETA +1D7AF ; [.2327.0020.0005] # MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL ZETA +0396 ; [.2327.0020.0008] # GREEK CAPITAL LETTER ZETA +1D6AD ; [.2327.0020.000B] # MATHEMATICAL BOLD CAPITAL ZETA +1D6E7 ; [.2327.0020.000B] # MATHEMATICAL ITALIC CAPITAL ZETA +1D721 ; [.2327.0020.000B] # MATHEMATICAL BOLD ITALIC CAPITAL ZETA +1D75B ; [.2327.0020.000B] # MATHEMATICAL SANS-SERIF BOLD CAPITAL ZETA +1D795 ; [.2327.0020.000B] # MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL ZETA +0371 ; [.2328.0020.0002] # GREEK SMALL LETTER HETA +0370 ; [.2328.0020.0008] # GREEK CAPITAL LETTER HETA +03B7 ; [.2329.0020.0002] # GREEK SMALL LETTER ETA +1D6C8 ; [.2329.0020.0005] # MATHEMATICAL BOLD SMALL ETA +1D702 ; [.2329.0020.0005] # MATHEMATICAL ITALIC SMALL ETA +1D73C ; [.2329.0020.0005] # MATHEMATICAL BOLD ITALIC SMALL ETA +1D776 ; [.2329.0020.0005] # MATHEMATICAL SANS-SERIF BOLD SMALL ETA +1D7B0 ; [.2329.0020.0005] # MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL ETA +0397 ; [.2329.0020.0008] # GREEK CAPITAL LETTER ETA +1D6AE ; [.2329.0020.000B] # MATHEMATICAL BOLD CAPITAL ETA +1D6E8 ; [.2329.0020.000B] # MATHEMATICAL ITALIC CAPITAL ETA +1D722 ; [.2329.0020.000B] # MATHEMATICAL BOLD ITALIC CAPITAL ETA +1D75C ; [.2329.0020.000B] # MATHEMATICAL SANS-SERIF BOLD CAPITAL ETA +1D796 ; [.2329.0020.000B] # MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL ETA +1F20 ; [.2329.0020.0002][.0000.0022.0002] # GREEK SMALL LETTER ETA WITH PSILI +1F28 ; [.2329.0020.0008][.0000.0022.0002] # GREEK CAPITAL LETTER ETA WITH PSILI +1F24 ; [.2329.0020.0002][.0000.0022.0002][.0000.0024.0002] # GREEK SMALL LETTER ETA WITH PSILI AND OXIA +1F2C ; [.2329.0020.0008][.0000.0022.0002][.0000.0024.0002] # GREEK CAPITAL LETTER ETA WITH PSILI AND OXIA +1F94 ; [.2329.0020.0002][.0000.0022.0002][.0000.0024.0002][.0000.004C.0002] # GREEK SMALL LETTER ETA WITH PSILI AND OXIA AND YPOGEGRAMMENI +1F9C ; [.2329.0020.0008][.0000.0022.0002][.0000.0024.0002][.0000.004C.0002] # GREEK CAPITAL LETTER ETA WITH PSILI AND OXIA AND PROSGEGRAMMENI +1F22 ; [.2329.0020.0002][.0000.0022.0002][.0000.0025.0002] # GREEK SMALL LETTER ETA WITH PSILI AND VARIA +1F2A ; [.2329.0020.0008][.0000.0022.0002][.0000.0025.0002] # GREEK CAPITAL LETTER ETA WITH PSILI AND VARIA +1F92 ; [.2329.0020.0002][.0000.0022.0002][.0000.0025.0002][.0000.004C.0002] # GREEK SMALL LETTER ETA WITH PSILI AND VARIA AND YPOGEGRAMMENI +1F9A ; [.2329.0020.0008][.0000.0022.0002][.0000.0025.0002][.0000.004C.0002] # GREEK CAPITAL LETTER ETA WITH PSILI AND VARIA AND PROSGEGRAMMENI +1F26 ; [.2329.0020.0002][.0000.0022.0002][.0000.002A.0002] # GREEK SMALL LETTER ETA WITH PSILI AND PERISPOMENI +1F2E ; [.2329.0020.0008][.0000.0022.0002][.0000.002A.0002] # GREEK CAPITAL LETTER ETA WITH PSILI AND PERISPOMENI +1F96 ; [.2329.0020.0002][.0000.0022.0002][.0000.002A.0002][.0000.004C.0002] # GREEK SMALL LETTER ETA WITH PSILI AND PERISPOMENI AND YPOGEGRAMMENI +1F9E ; [.2329.0020.0008][.0000.0022.0002][.0000.002A.0002][.0000.004C.0002] # GREEK CAPITAL LETTER ETA WITH PSILI AND PERISPOMENI AND PROSGEGRAMMENI +1F90 ; [.2329.0020.0002][.0000.0022.0002][.0000.004C.0002] # GREEK SMALL LETTER ETA WITH PSILI AND YPOGEGRAMMENI +1F98 ; [.2329.0020.0008][.0000.0022.0002][.0000.004C.0002] # GREEK CAPITAL LETTER ETA WITH PSILI AND PROSGEGRAMMENI +1F21 ; [.2329.0020.0002][.0000.0023.0002] # GREEK SMALL LETTER ETA WITH DASIA +1F29 ; [.2329.0020.0008][.0000.0023.0002] # GREEK CAPITAL LETTER ETA WITH DASIA +1F25 ; [.2329.0020.0002][.0000.0023.0002][.0000.0024.0002] # GREEK SMALL LETTER ETA WITH DASIA AND OXIA +1F2D ; [.2329.0020.0008][.0000.0023.0002][.0000.0024.0002] # GREEK CAPITAL LETTER ETA WITH DASIA AND OXIA +1F95 ; [.2329.0020.0002][.0000.0023.0002][.0000.0024.0002][.0000.004C.0002] # GREEK SMALL LETTER ETA WITH DASIA AND OXIA AND YPOGEGRAMMENI +1F9D ; [.2329.0020.0008][.0000.0023.0002][.0000.0024.0002][.0000.004C.0002] # GREEK CAPITAL LETTER ETA WITH DASIA AND OXIA AND PROSGEGRAMMENI +1F23 ; [.2329.0020.0002][.0000.0023.0002][.0000.0025.0002] # GREEK SMALL LETTER ETA WITH DASIA AND VARIA +1F2B ; [.2329.0020.0008][.0000.0023.0002][.0000.0025.0002] # GREEK CAPITAL LETTER ETA WITH DASIA AND VARIA +1F93 ; [.2329.0020.0002][.0000.0023.0002][.0000.0025.0002][.0000.004C.0002] # GREEK SMALL LETTER ETA WITH DASIA AND VARIA AND YPOGEGRAMMENI +1F9B ; [.2329.0020.0008][.0000.0023.0002][.0000.0025.0002][.0000.004C.0002] # GREEK CAPITAL LETTER ETA WITH DASIA AND VARIA AND PROSGEGRAMMENI +1F27 ; [.2329.0020.0002][.0000.0023.0002][.0000.002A.0002] # GREEK SMALL LETTER ETA WITH DASIA AND PERISPOMENI +1F2F ; [.2329.0020.0008][.0000.0023.0002][.0000.002A.0002] # GREEK CAPITAL LETTER ETA WITH DASIA AND PERISPOMENI +1F97 ; [.2329.0020.0002][.0000.0023.0002][.0000.002A.0002][.0000.004C.0002] # GREEK SMALL LETTER ETA WITH DASIA AND PERISPOMENI AND YPOGEGRAMMENI +1F9F ; [.2329.0020.0008][.0000.0023.0002][.0000.002A.0002][.0000.004C.0002] # GREEK CAPITAL LETTER ETA WITH DASIA AND PERISPOMENI AND PROSGEGRAMMENI +1F91 ; [.2329.0020.0002][.0000.0023.0002][.0000.004C.0002] # GREEK SMALL LETTER ETA WITH DASIA AND YPOGEGRAMMENI +1F99 ; [.2329.0020.0008][.0000.0023.0002][.0000.004C.0002] # GREEK CAPITAL LETTER ETA WITH DASIA AND PROSGEGRAMMENI +03AE ; [.2329.0020.0002][.0000.0024.0002] # GREEK SMALL LETTER ETA WITH TONOS +1F75 ; [.2329.0020.0002][.0000.0024.0002] # GREEK SMALL LETTER ETA WITH OXIA +0389 ; [.2329.0020.0008][.0000.0024.0002] # GREEK CAPITAL LETTER ETA WITH TONOS +1FCB ; [.2329.0020.0008][.0000.0024.0002] # GREEK CAPITAL LETTER ETA WITH OXIA +1FC4 ; [.2329.0020.0002][.0000.0024.0002][.0000.004C.0002] # GREEK SMALL LETTER ETA WITH OXIA AND YPOGEGRAMMENI +1F74 ; [.2329.0020.0002][.0000.0025.0002] # GREEK SMALL LETTER ETA WITH VARIA +1FCA ; [.2329.0020.0008][.0000.0025.0002] # GREEK CAPITAL LETTER ETA WITH VARIA +1FC2 ; [.2329.0020.0002][.0000.0025.0002][.0000.004C.0002] # GREEK SMALL LETTER ETA WITH VARIA AND YPOGEGRAMMENI +1FC6 ; [.2329.0020.0002][.0000.002A.0002] # GREEK SMALL LETTER ETA WITH PERISPOMENI +1FC7 ; [.2329.0020.0002][.0000.002A.0002][.0000.004C.0002] # GREEK SMALL LETTER ETA WITH PERISPOMENI AND YPOGEGRAMMENI +1FC3 ; [.2329.0020.0002][.0000.004C.0002] # GREEK SMALL LETTER ETA WITH YPOGEGRAMMENI +1FCC ; [.2329.0020.0008][.0000.004C.0002] # GREEK CAPITAL LETTER ETA WITH PROSGEGRAMMENI +03B8 ; [.232A.0020.0002] # GREEK SMALL LETTER THETA +03D1 ; [.232A.0020.0004] # GREEK THETA SYMBOL +1D6C9 ; [.232A.0020.0005] # MATHEMATICAL BOLD SMALL THETA +1D6DD ; [.232A.0020.0005] # MATHEMATICAL BOLD THETA SYMBOL +1D703 ; [.232A.0020.0005] # MATHEMATICAL ITALIC SMALL THETA +1D717 ; [.232A.0020.0005] # MATHEMATICAL ITALIC THETA SYMBOL +1D73D ; [.232A.0020.0005] # MATHEMATICAL BOLD ITALIC SMALL THETA +1D751 ; [.232A.0020.0005] # MATHEMATICAL BOLD ITALIC THETA SYMBOL +1D777 ; [.232A.0020.0005] # MATHEMATICAL SANS-SERIF BOLD SMALL THETA +1D78B ; [.232A.0020.0005] # MATHEMATICAL SANS-SERIF BOLD THETA SYMBOL +1D7B1 ; [.232A.0020.0005] # MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL THETA +1D7C5 ; [.232A.0020.0005] # MATHEMATICAL SANS-SERIF BOLD ITALIC THETA SYMBOL +0398 ; [.232A.0020.0008] # GREEK CAPITAL LETTER THETA +03F4 ; [.232A.0020.000A] # GREEK CAPITAL THETA SYMBOL +1D6AF ; [.232A.0020.000B] # MATHEMATICAL BOLD CAPITAL THETA +1D6B9 ; [.232A.0020.000B] # MATHEMATICAL BOLD CAPITAL THETA SYMBOL +1D6E9 ; [.232A.0020.000B] # MATHEMATICAL ITALIC CAPITAL THETA +1D6F3 ; [.232A.0020.000B] # MATHEMATICAL ITALIC CAPITAL THETA SYMBOL +1D723 ; [.232A.0020.000B] # MATHEMATICAL BOLD ITALIC CAPITAL THETA +1D72D ; [.232A.0020.000B] # MATHEMATICAL BOLD ITALIC CAPITAL THETA SYMBOL +1D75D ; [.232A.0020.000B] # MATHEMATICAL SANS-SERIF BOLD CAPITAL THETA +1D767 ; [.232A.0020.000B] # MATHEMATICAL SANS-SERIF BOLD CAPITAL THETA SYMBOL +1D797 ; [.232A.0020.000B] # MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL THETA +1D7A1 ; [.232A.0020.000B] # MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL THETA SYMBOL +1DBF ; [.232A.0020.0014] # MODIFIER LETTER SMALL THETA +03B9 ; [.232B.0020.0002] # GREEK SMALL LETTER IOTA +1FBE ; [.232B.0020.0002] # GREEK PROSGEGRAMMENI +037A ; [.232B.0020.0004] # GREEK YPOGEGRAMMENI +1D6CA ; [.232B.0020.0005] # MATHEMATICAL BOLD SMALL IOTA +1D704 ; [.232B.0020.0005] # MATHEMATICAL ITALIC SMALL IOTA +1D73E ; [.232B.0020.0005] # MATHEMATICAL BOLD ITALIC SMALL IOTA +1D778 ; [.232B.0020.0005] # MATHEMATICAL SANS-SERIF BOLD SMALL IOTA +1D7B2 ; [.232B.0020.0005] # MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL IOTA +0399 ; [.232B.0020.0008] # GREEK CAPITAL LETTER IOTA +1D6B0 ; [.232B.0020.000B] # MATHEMATICAL BOLD CAPITAL IOTA +1D6EA ; [.232B.0020.000B] # MATHEMATICAL ITALIC CAPITAL IOTA +1D724 ; [.232B.0020.000B] # MATHEMATICAL BOLD ITALIC CAPITAL IOTA +1D75E ; [.232B.0020.000B] # MATHEMATICAL SANS-SERIF BOLD CAPITAL IOTA +1D798 ; [.232B.0020.000B] # MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL IOTA +1F30 ; [.232B.0020.0002][.0000.0022.0002] # GREEK SMALL LETTER IOTA WITH PSILI +1F38 ; [.232B.0020.0008][.0000.0022.0002] # GREEK CAPITAL LETTER IOTA WITH PSILI +1F34 ; [.232B.0020.0002][.0000.0022.0002][.0000.0024.0002] # GREEK SMALL LETTER IOTA WITH PSILI AND OXIA +1F3C ; [.232B.0020.0008][.0000.0022.0002][.0000.0024.0002] # GREEK CAPITAL LETTER IOTA WITH PSILI AND OXIA +1F32 ; [.232B.0020.0002][.0000.0022.0002][.0000.0025.0002] # GREEK SMALL LETTER IOTA WITH PSILI AND VARIA +1F3A ; [.232B.0020.0008][.0000.0022.0002][.0000.0025.0002] # GREEK CAPITAL LETTER IOTA WITH PSILI AND VARIA +1F36 ; [.232B.0020.0002][.0000.0022.0002][.0000.002A.0002] # GREEK SMALL LETTER IOTA WITH PSILI AND PERISPOMENI +1F3E ; [.232B.0020.0008][.0000.0022.0002][.0000.002A.0002] # GREEK CAPITAL LETTER IOTA WITH PSILI AND PERISPOMENI +1F31 ; [.232B.0020.0002][.0000.0023.0002] # GREEK SMALL LETTER IOTA WITH DASIA +1F39 ; [.232B.0020.0008][.0000.0023.0002] # GREEK CAPITAL LETTER IOTA WITH DASIA +1F35 ; [.232B.0020.0002][.0000.0023.0002][.0000.0024.0002] # GREEK SMALL LETTER IOTA WITH DASIA AND OXIA +1F3D ; [.232B.0020.0008][.0000.0023.0002][.0000.0024.0002] # GREEK CAPITAL LETTER IOTA WITH DASIA AND OXIA +1F33 ; [.232B.0020.0002][.0000.0023.0002][.0000.0025.0002] # GREEK SMALL LETTER IOTA WITH DASIA AND VARIA +1F3B ; [.232B.0020.0008][.0000.0023.0002][.0000.0025.0002] # GREEK CAPITAL LETTER IOTA WITH DASIA AND VARIA +1F37 ; [.232B.0020.0002][.0000.0023.0002][.0000.002A.0002] # GREEK SMALL LETTER IOTA WITH DASIA AND PERISPOMENI +1F3F ; [.232B.0020.0008][.0000.0023.0002][.0000.002A.0002] # GREEK CAPITAL LETTER IOTA WITH DASIA AND PERISPOMENI +03AF ; [.232B.0020.0002][.0000.0024.0002] # GREEK SMALL LETTER IOTA WITH TONOS +1F77 ; [.232B.0020.0002][.0000.0024.0002] # GREEK SMALL LETTER IOTA WITH OXIA +038A ; [.232B.0020.0008][.0000.0024.0002] # GREEK CAPITAL LETTER IOTA WITH TONOS +1FDB ; [.232B.0020.0008][.0000.0024.0002] # GREEK CAPITAL LETTER IOTA WITH OXIA +1F76 ; [.232B.0020.0002][.0000.0025.0002] # GREEK SMALL LETTER IOTA WITH VARIA +1FDA ; [.232B.0020.0008][.0000.0025.0002] # GREEK CAPITAL LETTER IOTA WITH VARIA +1FD0 ; [.232B.0020.0002][.0000.0026.0002] # GREEK SMALL LETTER IOTA WITH VRACHY +1FD8 ; [.232B.0020.0008][.0000.0026.0002] # GREEK CAPITAL LETTER IOTA WITH VRACHY +1FD6 ; [.232B.0020.0002][.0000.002A.0002] # GREEK SMALL LETTER IOTA WITH PERISPOMENI +03CA ; [.232B.0020.0002][.0000.002B.0002] # GREEK SMALL LETTER IOTA WITH DIALYTIKA +03AA ; [.232B.0020.0008][.0000.002B.0002] # GREEK CAPITAL LETTER IOTA WITH DIALYTIKA +0390 ; [.232B.0020.0002][.0000.002B.0002][.0000.0024.0002] # GREEK SMALL LETTER IOTA WITH DIALYTIKA AND TONOS +1FD3 ; [.232B.0020.0002][.0000.002B.0002][.0000.0024.0002] # GREEK SMALL LETTER IOTA WITH DIALYTIKA AND OXIA +1FD2 ; [.232B.0020.0002][.0000.002B.0002][.0000.0025.0002] # GREEK SMALL LETTER IOTA WITH DIALYTIKA AND VARIA +1FD7 ; [.232B.0020.0002][.0000.002B.0002][.0000.002A.0002] # GREEK SMALL LETTER IOTA WITH DIALYTIKA AND PERISPOMENI +1FD1 ; [.232B.0020.0002][.0000.0032.0002] # GREEK SMALL LETTER IOTA WITH MACRON +1FD9 ; [.232B.0020.0008][.0000.0032.0002] # GREEK CAPITAL LETTER IOTA WITH MACRON +03F3 ; [.232C.0020.0002] # GREEK LETTER YOT +037F ; [.232C.0020.0008] # GREEK CAPITAL LETTER YOT +03BA ; [.232D.0020.0002] # GREEK SMALL LETTER KAPPA +03F0 ; [.232D.0020.0004] # GREEK KAPPA SYMBOL +1D6CB ; [.232D.0020.0005] # MATHEMATICAL BOLD SMALL KAPPA +1D6DE ; [.232D.0020.0005] # MATHEMATICAL BOLD KAPPA SYMBOL +1D705 ; [.232D.0020.0005] # MATHEMATICAL ITALIC SMALL KAPPA +1D718 ; [.232D.0020.0005] # MATHEMATICAL ITALIC KAPPA SYMBOL +1D73F ; [.232D.0020.0005] # MATHEMATICAL BOLD ITALIC SMALL KAPPA +1D752 ; [.232D.0020.0005] # MATHEMATICAL BOLD ITALIC KAPPA SYMBOL +1D779 ; [.232D.0020.0005] # MATHEMATICAL SANS-SERIF BOLD SMALL KAPPA +1D78C ; [.232D.0020.0005] # MATHEMATICAL SANS-SERIF BOLD KAPPA SYMBOL +1D7B3 ; [.232D.0020.0005] # MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL KAPPA +1D7C6 ; [.232D.0020.0005] # MATHEMATICAL SANS-SERIF BOLD ITALIC KAPPA SYMBOL +039A ; [.232D.0020.0008] # GREEK CAPITAL LETTER KAPPA +1D6B1 ; [.232D.0020.000B] # MATHEMATICAL BOLD CAPITAL KAPPA +1D6EB ; [.232D.0020.000B] # MATHEMATICAL ITALIC CAPITAL KAPPA +1D725 ; [.232D.0020.000B] # MATHEMATICAL BOLD ITALIC CAPITAL KAPPA +1D75F ; [.232D.0020.000B] # MATHEMATICAL SANS-SERIF BOLD CAPITAL KAPPA +1D799 ; [.232D.0020.000B] # MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL KAPPA +03D7 ; [.232D.0020.0004][.231E.0020.0004][.232B.0020.0004] # GREEK KAI SYMBOL +03CF ; [.232D.0020.000A][.231E.0020.0004][.232B.0020.0004] # GREEK CAPITAL KAI SYMBOL +03BB ; [.232E.0020.0002] # GREEK SMALL LETTER LAMDA +1D6CC ; [.232E.0020.0005] # MATHEMATICAL BOLD SMALL LAMDA +1D706 ; [.232E.0020.0005] # MATHEMATICAL ITALIC SMALL LAMDA +1D740 ; [.232E.0020.0005] # MATHEMATICAL BOLD ITALIC SMALL LAMDA +1D77A ; [.232E.0020.0005] # MATHEMATICAL SANS-SERIF BOLD SMALL LAMDA +1D7B4 ; [.232E.0020.0005] # MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL LAMDA +039B ; [.232E.0020.0008] # GREEK CAPITAL LETTER LAMDA +1D6B2 ; [.232E.0020.000B] # MATHEMATICAL BOLD CAPITAL LAMDA +1D6EC ; [.232E.0020.000B] # MATHEMATICAL ITALIC CAPITAL LAMDA +1D726 ; [.232E.0020.000B] # MATHEMATICAL BOLD ITALIC CAPITAL LAMDA +1D760 ; [.232E.0020.000B] # MATHEMATICAL SANS-SERIF BOLD CAPITAL LAMDA +1D79A ; [.232E.0020.000B] # MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL LAMDA +1D27 ; [.232F.0020.0002] # GREEK LETTER SMALL CAPITAL LAMDA +03BC ; [.2330.0020.0002] # GREEK SMALL LETTER MU +00B5 ; [.2330.0020.0004] # MICRO SIGN +1D6CD ; [.2330.0020.0005] # MATHEMATICAL BOLD SMALL MU +1D707 ; [.2330.0020.0005] # MATHEMATICAL ITALIC SMALL MU +1D741 ; [.2330.0020.0005] # MATHEMATICAL BOLD ITALIC SMALL MU +1D77B ; [.2330.0020.0005] # MATHEMATICAL SANS-SERIF BOLD SMALL MU +1D7B5 ; [.2330.0020.0005] # MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL MU +039C ; [.2330.0020.0008] # GREEK CAPITAL LETTER MU +1D6B3 ; [.2330.0020.000B] # MATHEMATICAL BOLD CAPITAL MU +1D6ED ; [.2330.0020.000B] # MATHEMATICAL ITALIC CAPITAL MU +1D727 ; [.2330.0020.000B] # MATHEMATICAL BOLD ITALIC CAPITAL MU +1D761 ; [.2330.0020.000B] # MATHEMATICAL SANS-SERIF BOLD CAPITAL MU +1D79B ; [.2330.0020.000B] # MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL MU +3382 ; [.2330.0020.001C][.1FA2.0020.001D] # SQUARE MU A +338C ; [.2330.0020.001C][.2042.0020.001D] # SQUARE MU F +338D ; [.2330.0020.001C][.2051.0020.001C] # SQUARE MU G +3395 ; [.2330.0020.001C][.20D6.0020.001C] # SQUARE MU L +339B ; [.2330.0020.001C][.2109.0020.001C] # SQUARE MU M +33B2 ; [.2330.0020.001C][.21D2.0020.001C] # SQUARE MU S +33B6 ; [.2330.0020.001C][.2247.0020.001D] # SQUARE MU V +33BC ; [.2330.0020.001C][.2259.0020.001D] # SQUARE MU W +03BD ; [.2331.0020.0002] # GREEK SMALL LETTER NU +1D6CE ; [.2331.0020.0005] # MATHEMATICAL BOLD SMALL NU +1D708 ; [.2331.0020.0005] # MATHEMATICAL ITALIC SMALL NU +1D742 ; [.2331.0020.0005] # MATHEMATICAL BOLD ITALIC SMALL NU +1D77C ; [.2331.0020.0005] # MATHEMATICAL SANS-SERIF BOLD SMALL NU +1D7B6 ; [.2331.0020.0005] # MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL NU +039D ; [.2331.0020.0008] # GREEK CAPITAL LETTER NU +1D6B4 ; [.2331.0020.000B] # MATHEMATICAL BOLD CAPITAL NU +1D6EE ; [.2331.0020.000B] # MATHEMATICAL ITALIC CAPITAL NU +1D728 ; [.2331.0020.000B] # MATHEMATICAL BOLD ITALIC CAPITAL NU +1D762 ; [.2331.0020.000B] # MATHEMATICAL SANS-SERIF BOLD CAPITAL NU +1D79C ; [.2331.0020.000B] # MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL NU +03BE ; [.2332.0020.0002] # GREEK SMALL LETTER XI +1D6CF ; [.2332.0020.0005] # MATHEMATICAL BOLD SMALL XI +1D709 ; [.2332.0020.0005] # MATHEMATICAL ITALIC SMALL XI +1D743 ; [.2332.0020.0005] # MATHEMATICAL BOLD ITALIC SMALL XI +1D77D ; [.2332.0020.0005] # MATHEMATICAL SANS-SERIF BOLD SMALL XI +1D7B7 ; [.2332.0020.0005] # MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL XI +039E ; [.2332.0020.0008] # GREEK CAPITAL LETTER XI +1D6B5 ; [.2332.0020.000B] # MATHEMATICAL BOLD CAPITAL XI +1D6EF ; [.2332.0020.000B] # MATHEMATICAL ITALIC CAPITAL XI +1D729 ; [.2332.0020.000B] # MATHEMATICAL BOLD ITALIC CAPITAL XI +1D763 ; [.2332.0020.000B] # MATHEMATICAL SANS-SERIF BOLD CAPITAL XI +1D79D ; [.2332.0020.000B] # MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL XI +03BF ; [.2333.0020.0002] # GREEK SMALL LETTER OMICRON +1D6D0 ; [.2333.0020.0005] # MATHEMATICAL BOLD SMALL OMICRON +1D70A ; [.2333.0020.0005] # MATHEMATICAL ITALIC SMALL OMICRON +1D744 ; [.2333.0020.0005] # MATHEMATICAL BOLD ITALIC SMALL OMICRON +1D77E ; [.2333.0020.0005] # MATHEMATICAL SANS-SERIF BOLD SMALL OMICRON +1D7B8 ; [.2333.0020.0005] # MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL OMICRON +039F ; [.2333.0020.0008] # GREEK CAPITAL LETTER OMICRON +1D6B6 ; [.2333.0020.000B] # MATHEMATICAL BOLD CAPITAL OMICRON +1D6F0 ; [.2333.0020.000B] # MATHEMATICAL ITALIC CAPITAL OMICRON +1D72A ; [.2333.0020.000B] # MATHEMATICAL BOLD ITALIC CAPITAL OMICRON +1D764 ; [.2333.0020.000B] # MATHEMATICAL SANS-SERIF BOLD CAPITAL OMICRON +1D79E ; [.2333.0020.000B] # MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL OMICRON +1F40 ; [.2333.0020.0002][.0000.0022.0002] # GREEK SMALL LETTER OMICRON WITH PSILI +1F48 ; [.2333.0020.0008][.0000.0022.0002] # GREEK CAPITAL LETTER OMICRON WITH PSILI +1F44 ; [.2333.0020.0002][.0000.0022.0002][.0000.0024.0002] # GREEK SMALL LETTER OMICRON WITH PSILI AND OXIA +1F4C ; [.2333.0020.0008][.0000.0022.0002][.0000.0024.0002] # GREEK CAPITAL LETTER OMICRON WITH PSILI AND OXIA +1F42 ; [.2333.0020.0002][.0000.0022.0002][.0000.0025.0002] # GREEK SMALL LETTER OMICRON WITH PSILI AND VARIA +1F4A ; [.2333.0020.0008][.0000.0022.0002][.0000.0025.0002] # GREEK CAPITAL LETTER OMICRON WITH PSILI AND VARIA +1F41 ; [.2333.0020.0002][.0000.0023.0002] # GREEK SMALL LETTER OMICRON WITH DASIA +1F49 ; [.2333.0020.0008][.0000.0023.0002] # GREEK CAPITAL LETTER OMICRON WITH DASIA +1F45 ; [.2333.0020.0002][.0000.0023.0002][.0000.0024.0002] # GREEK SMALL LETTER OMICRON WITH DASIA AND OXIA +1F4D ; [.2333.0020.0008][.0000.0023.0002][.0000.0024.0002] # GREEK CAPITAL LETTER OMICRON WITH DASIA AND OXIA +1F43 ; [.2333.0020.0002][.0000.0023.0002][.0000.0025.0002] # GREEK SMALL LETTER OMICRON WITH DASIA AND VARIA +1F4B ; [.2333.0020.0008][.0000.0023.0002][.0000.0025.0002] # GREEK CAPITAL LETTER OMICRON WITH DASIA AND VARIA +03CC ; [.2333.0020.0002][.0000.0024.0002] # GREEK SMALL LETTER OMICRON WITH TONOS +1F79 ; [.2333.0020.0002][.0000.0024.0002] # GREEK SMALL LETTER OMICRON WITH OXIA +038C ; [.2333.0020.0008][.0000.0024.0002] # GREEK CAPITAL LETTER OMICRON WITH TONOS +1FF9 ; [.2333.0020.0008][.0000.0024.0002] # GREEK CAPITAL LETTER OMICRON WITH OXIA +1F78 ; [.2333.0020.0002][.0000.0025.0002] # GREEK SMALL LETTER OMICRON WITH VARIA +1FF8 ; [.2333.0020.0008][.0000.0025.0002] # GREEK CAPITAL LETTER OMICRON WITH VARIA +03C0 ; [.2334.0020.0002] # GREEK SMALL LETTER PI +03D6 ; [.2334.0020.0004] # GREEK PI SYMBOL +213C ; [.2334.0020.0005] # DOUBLE-STRUCK SMALL PI +1D6D1 ; [.2334.0020.0005] # MATHEMATICAL BOLD SMALL PI +1D6E1 ; [.2334.0020.0005] # MATHEMATICAL BOLD PI SYMBOL +1D70B ; [.2334.0020.0005] # MATHEMATICAL ITALIC SMALL PI +1D71B ; [.2334.0020.0005] # MATHEMATICAL ITALIC PI SYMBOL +1D745 ; [.2334.0020.0005] # MATHEMATICAL BOLD ITALIC SMALL PI +1D755 ; [.2334.0020.0005] # MATHEMATICAL BOLD ITALIC PI SYMBOL +1D77F ; [.2334.0020.0005] # MATHEMATICAL SANS-SERIF BOLD SMALL PI +1D78F ; [.2334.0020.0005] # MATHEMATICAL SANS-SERIF BOLD PI SYMBOL +1D7B9 ; [.2334.0020.0005] # MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL PI +1D7C9 ; [.2334.0020.0005] # MATHEMATICAL SANS-SERIF BOLD ITALIC PI SYMBOL +03A0 ; [.2334.0020.0008] # GREEK CAPITAL LETTER PI +213F ; [.2334.0020.000B] # DOUBLE-STRUCK CAPITAL PI +1D6B7 ; [.2334.0020.000B] # MATHEMATICAL BOLD CAPITAL PI +1D6F1 ; [.2334.0020.000B] # MATHEMATICAL ITALIC CAPITAL PI +1D72B ; [.2334.0020.000B] # MATHEMATICAL BOLD ITALIC CAPITAL PI +1D765 ; [.2334.0020.000B] # MATHEMATICAL SANS-SERIF BOLD CAPITAL PI +1D79F ; [.2334.0020.000B] # MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL PI +1D28 ; [.2335.0020.0002] # GREEK LETTER SMALL CAPITAL PI +03FB ; [.2336.0020.0002] # GREEK SMALL LETTER SAN +03FA ; [.2336.0020.0008] # GREEK CAPITAL LETTER SAN +03DF ; [.2337.0020.0002] # GREEK SMALL LETTER KOPPA +03DE ; [.2337.0020.0008] # GREEK LETTER KOPPA +03D9 ; [.2338.0020.0002] # GREEK SMALL LETTER ARCHAIC KOPPA +03D8 ; [.2338.0020.0008] # GREEK LETTER ARCHAIC KOPPA +03C1 ; [.2339.0020.0002] # GREEK SMALL LETTER RHO +03F1 ; [.2339.0020.0004] # GREEK RHO SYMBOL +1D6D2 ; [.2339.0020.0005] # MATHEMATICAL BOLD SMALL RHO +1D6E0 ; [.2339.0020.0005] # MATHEMATICAL BOLD RHO SYMBOL +1D70C ; [.2339.0020.0005] # MATHEMATICAL ITALIC SMALL RHO +1D71A ; [.2339.0020.0005] # MATHEMATICAL ITALIC RHO SYMBOL +1D746 ; [.2339.0020.0005] # MATHEMATICAL BOLD ITALIC SMALL RHO +1D754 ; [.2339.0020.0005] # MATHEMATICAL BOLD ITALIC RHO SYMBOL +1D780 ; [.2339.0020.0005] # MATHEMATICAL SANS-SERIF BOLD SMALL RHO +1D78E ; [.2339.0020.0005] # MATHEMATICAL SANS-SERIF BOLD RHO SYMBOL +1D7BA ; [.2339.0020.0005] # MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL RHO +1D7C8 ; [.2339.0020.0005] # MATHEMATICAL SANS-SERIF BOLD ITALIC RHO SYMBOL +03A1 ; [.2339.0020.0008] # GREEK CAPITAL LETTER RHO +1D6B8 ; [.2339.0020.000B] # MATHEMATICAL BOLD CAPITAL RHO +1D6F2 ; [.2339.0020.000B] # MATHEMATICAL ITALIC CAPITAL RHO +1D72C ; [.2339.0020.000B] # MATHEMATICAL BOLD ITALIC CAPITAL RHO +1D766 ; [.2339.0020.000B] # MATHEMATICAL SANS-SERIF BOLD CAPITAL RHO +1D7A0 ; [.2339.0020.000B] # MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL RHO +1D68 ; [.2339.0020.0015] # GREEK SUBSCRIPT SMALL LETTER RHO +1FE4 ; [.2339.0020.0002][.0000.0022.0002] # GREEK SMALL LETTER RHO WITH PSILI +1FE5 ; [.2339.0020.0002][.0000.0023.0002] # GREEK SMALL LETTER RHO WITH DASIA +1FEC ; [.2339.0020.0008][.0000.0023.0002] # GREEK CAPITAL LETTER RHO WITH DASIA +1D29 ; [.233A.0020.0002] # GREEK LETTER SMALL CAPITAL RHO +03FC ; [.233B.0020.0002] # GREEK RHO WITH STROKE SYMBOL +03C3 ; [.233C.0020.0002] # GREEK SMALL LETTER SIGMA +03F2 ; [.233C.0020.0004] # GREEK LUNATE SIGMA SYMBOL +1D6D3 ; [.233C.0020.0005] # MATHEMATICAL BOLD SMALL FINAL SIGMA +1D6D4 ; [.233C.0020.0005] # MATHEMATICAL BOLD SMALL SIGMA +1D70D ; [.233C.0020.0005] # MATHEMATICAL ITALIC SMALL FINAL SIGMA +1D70E ; [.233C.0020.0005] # MATHEMATICAL ITALIC SMALL SIGMA +1D747 ; [.233C.0020.0005] # MATHEMATICAL BOLD ITALIC SMALL FINAL SIGMA +1D748 ; [.233C.0020.0005] # MATHEMATICAL BOLD ITALIC SMALL SIGMA +1D781 ; [.233C.0020.0005] # MATHEMATICAL SANS-SERIF BOLD SMALL FINAL SIGMA +1D782 ; [.233C.0020.0005] # MATHEMATICAL SANS-SERIF BOLD SMALL SIGMA +1D7BB ; [.233C.0020.0005] # MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL FINAL SIGMA +1D7BC ; [.233C.0020.0005] # MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL SIGMA +03A3 ; [.233C.0020.0008] # GREEK CAPITAL LETTER SIGMA +03F9 ; [.233C.0020.000A] # GREEK CAPITAL LUNATE SIGMA SYMBOL +1D6BA ; [.233C.0020.000B] # MATHEMATICAL BOLD CAPITAL SIGMA +1D6F4 ; [.233C.0020.000B] # MATHEMATICAL ITALIC CAPITAL SIGMA +1D72E ; [.233C.0020.000B] # MATHEMATICAL BOLD ITALIC CAPITAL SIGMA +1D768 ; [.233C.0020.000B] # MATHEMATICAL SANS-SERIF BOLD CAPITAL SIGMA +1D7A2 ; [.233C.0020.000B] # MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL SIGMA +03C2 ; [.233C.0020.0019] # GREEK SMALL LETTER FINAL SIGMA +037C ; [.233D.0020.0002] # GREEK SMALL DOTTED LUNATE SIGMA SYMBOL +03FE ; [.233D.0020.0008] # GREEK CAPITAL DOTTED LUNATE SIGMA SYMBOL +037B ; [.233E.0020.0002] # GREEK SMALL REVERSED LUNATE SIGMA SYMBOL +03FD ; [.233E.0020.0008] # GREEK CAPITAL REVERSED LUNATE SIGMA SYMBOL +037D ; [.233F.0020.0002] # GREEK SMALL REVERSED DOTTED LUNATE SIGMA SYMBOL +03FF ; [.233F.0020.0008] # GREEK CAPITAL REVERSED DOTTED LUNATE SIGMA SYMBOL +03C4 ; [.2340.0020.0002] # GREEK SMALL LETTER TAU +1D6D5 ; [.2340.0020.0005] # MATHEMATICAL BOLD SMALL TAU +1D70F ; [.2340.0020.0005] # MATHEMATICAL ITALIC SMALL TAU +1D749 ; [.2340.0020.0005] # MATHEMATICAL BOLD ITALIC SMALL TAU +1D783 ; [.2340.0020.0005] # MATHEMATICAL SANS-SERIF BOLD SMALL TAU +1D7BD ; [.2340.0020.0005] # MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL TAU +03A4 ; [.2340.0020.0008] # GREEK CAPITAL LETTER TAU +1D6BB ; [.2340.0020.000B] # MATHEMATICAL BOLD CAPITAL TAU +1D6F5 ; [.2340.0020.000B] # MATHEMATICAL ITALIC CAPITAL TAU +1D72F ; [.2340.0020.000B] # MATHEMATICAL BOLD ITALIC CAPITAL TAU +1D769 ; [.2340.0020.000B] # MATHEMATICAL SANS-SERIF BOLD CAPITAL TAU +1D7A3 ; [.2340.0020.000B] # MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL TAU +03C5 ; [.2341.0020.0002] # GREEK SMALL LETTER UPSILON +1D6D6 ; [.2341.0020.0005] # MATHEMATICAL BOLD SMALL UPSILON +1D710 ; [.2341.0020.0005] # MATHEMATICAL ITALIC SMALL UPSILON +1D74A ; [.2341.0020.0005] # MATHEMATICAL BOLD ITALIC SMALL UPSILON +1D784 ; [.2341.0020.0005] # MATHEMATICAL SANS-SERIF BOLD SMALL UPSILON +1D7BE ; [.2341.0020.0005] # MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL UPSILON +03A5 ; [.2341.0020.0008] # GREEK CAPITAL LETTER UPSILON +03D2 ; [.2341.0020.000A] # GREEK UPSILON WITH HOOK SYMBOL +1D6BC ; [.2341.0020.000B] # MATHEMATICAL BOLD CAPITAL UPSILON +1D6F6 ; [.2341.0020.000B] # MATHEMATICAL ITALIC CAPITAL UPSILON +1D730 ; [.2341.0020.000B] # MATHEMATICAL BOLD ITALIC CAPITAL UPSILON +1D76A ; [.2341.0020.000B] # MATHEMATICAL SANS-SERIF BOLD CAPITAL UPSILON +1D7A4 ; [.2341.0020.000B] # MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL UPSILON +1F50 ; [.2341.0020.0002][.0000.0022.0002] # GREEK SMALL LETTER UPSILON WITH PSILI +1F54 ; [.2341.0020.0002][.0000.0022.0002][.0000.0024.0002] # GREEK SMALL LETTER UPSILON WITH PSILI AND OXIA +1F52 ; [.2341.0020.0002][.0000.0022.0002][.0000.0025.0002] # GREEK SMALL LETTER UPSILON WITH PSILI AND VARIA +1F56 ; [.2341.0020.0002][.0000.0022.0002][.0000.002A.0002] # GREEK SMALL LETTER UPSILON WITH PSILI AND PERISPOMENI +1F51 ; [.2341.0020.0002][.0000.0023.0002] # GREEK SMALL LETTER UPSILON WITH DASIA +1F59 ; [.2341.0020.0008][.0000.0023.0002] # GREEK CAPITAL LETTER UPSILON WITH DASIA +1F55 ; [.2341.0020.0002][.0000.0023.0002][.0000.0024.0002] # GREEK SMALL LETTER UPSILON WITH DASIA AND OXIA +1F5D ; [.2341.0020.0008][.0000.0023.0002][.0000.0024.0002] # GREEK CAPITAL LETTER UPSILON WITH DASIA AND OXIA +1F53 ; [.2341.0020.0002][.0000.0023.0002][.0000.0025.0002] # GREEK SMALL LETTER UPSILON WITH DASIA AND VARIA +1F5B ; [.2341.0020.0008][.0000.0023.0002][.0000.0025.0002] # GREEK CAPITAL LETTER UPSILON WITH DASIA AND VARIA +1F57 ; [.2341.0020.0002][.0000.0023.0002][.0000.002A.0002] # GREEK SMALL LETTER UPSILON WITH DASIA AND PERISPOMENI +1F5F ; [.2341.0020.0008][.0000.0023.0002][.0000.002A.0002] # GREEK CAPITAL LETTER UPSILON WITH DASIA AND PERISPOMENI +03CD ; [.2341.0020.0002][.0000.0024.0002] # GREEK SMALL LETTER UPSILON WITH TONOS +1F7B ; [.2341.0020.0002][.0000.0024.0002] # GREEK SMALL LETTER UPSILON WITH OXIA +038E ; [.2341.0020.0008][.0000.0024.0002] # GREEK CAPITAL LETTER UPSILON WITH TONOS +1FEB ; [.2341.0020.0008][.0000.0024.0002] # GREEK CAPITAL LETTER UPSILON WITH OXIA +03D3 ; [.2341.0020.000A][.0000.0024.0002] # GREEK UPSILON WITH ACUTE AND HOOK SYMBOL +1F7A ; [.2341.0020.0002][.0000.0025.0002] # GREEK SMALL LETTER UPSILON WITH VARIA +1FEA ; [.2341.0020.0008][.0000.0025.0002] # GREEK CAPITAL LETTER UPSILON WITH VARIA +1FE0 ; [.2341.0020.0002][.0000.0026.0002] # GREEK SMALL LETTER UPSILON WITH VRACHY +1FE8 ; [.2341.0020.0008][.0000.0026.0002] # GREEK CAPITAL LETTER UPSILON WITH VRACHY +1FE6 ; [.2341.0020.0002][.0000.002A.0002] # GREEK SMALL LETTER UPSILON WITH PERISPOMENI +03CB ; [.2341.0020.0002][.0000.002B.0002] # GREEK SMALL LETTER UPSILON WITH DIALYTIKA +03AB ; [.2341.0020.0008][.0000.002B.0002] # GREEK CAPITAL LETTER UPSILON WITH DIALYTIKA +03D4 ; [.2341.0020.000A][.0000.002B.0002] # GREEK UPSILON WITH DIAERESIS AND HOOK SYMBOL +03B0 ; [.2341.0020.0002][.0000.002B.0002][.0000.0024.0002] # GREEK SMALL LETTER UPSILON WITH DIALYTIKA AND TONOS +1FE3 ; [.2341.0020.0002][.0000.002B.0002][.0000.0024.0002] # GREEK SMALL LETTER UPSILON WITH DIALYTIKA AND OXIA +1FE2 ; [.2341.0020.0002][.0000.002B.0002][.0000.0025.0002] # GREEK SMALL LETTER UPSILON WITH DIALYTIKA AND VARIA +1FE7 ; [.2341.0020.0002][.0000.002B.0002][.0000.002A.0002] # GREEK SMALL LETTER UPSILON WITH DIALYTIKA AND PERISPOMENI +1FE1 ; [.2341.0020.0002][.0000.0032.0002] # GREEK SMALL LETTER UPSILON WITH MACRON +1FE9 ; [.2341.0020.0008][.0000.0032.0002] # GREEK CAPITAL LETTER UPSILON WITH MACRON +03C6 ; [.2342.0020.0002] # GREEK SMALL LETTER PHI +03D5 ; [.2342.0020.0004] # GREEK PHI SYMBOL +1D6D7 ; [.2342.0020.0005] # MATHEMATICAL BOLD SMALL PHI +1D6DF ; [.2342.0020.0005] # MATHEMATICAL BOLD PHI SYMBOL +1D711 ; [.2342.0020.0005] # MATHEMATICAL ITALIC SMALL PHI +1D719 ; [.2342.0020.0005] # MATHEMATICAL ITALIC PHI SYMBOL +1D74B ; [.2342.0020.0005] # MATHEMATICAL BOLD ITALIC SMALL PHI +1D753 ; [.2342.0020.0005] # MATHEMATICAL BOLD ITALIC PHI SYMBOL +1D785 ; [.2342.0020.0005] # MATHEMATICAL SANS-SERIF BOLD SMALL PHI +1D78D ; [.2342.0020.0005] # MATHEMATICAL SANS-SERIF BOLD PHI SYMBOL +1D7BF ; [.2342.0020.0005] # MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL PHI +1D7C7 ; [.2342.0020.0005] # MATHEMATICAL SANS-SERIF BOLD ITALIC PHI SYMBOL +03A6 ; [.2342.0020.0008] # GREEK CAPITAL LETTER PHI +1D6BD ; [.2342.0020.000B] # MATHEMATICAL BOLD CAPITAL PHI +1D6F7 ; [.2342.0020.000B] # MATHEMATICAL ITALIC CAPITAL PHI +1D731 ; [.2342.0020.000B] # MATHEMATICAL BOLD ITALIC CAPITAL PHI +1D76B ; [.2342.0020.000B] # MATHEMATICAL SANS-SERIF BOLD CAPITAL PHI +1D7A5 ; [.2342.0020.000B] # MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL PHI +1D60 ; [.2342.0020.0014] # MODIFIER LETTER SMALL GREEK PHI +1D69 ; [.2342.0020.0015] # GREEK SUBSCRIPT SMALL LETTER PHI +03C7 ; [.2343.0020.0002] # GREEK SMALL LETTER CHI +1D6D8 ; [.2343.0020.0005] # MATHEMATICAL BOLD SMALL CHI +1D712 ; [.2343.0020.0005] # MATHEMATICAL ITALIC SMALL CHI +1D74C ; [.2343.0020.0005] # MATHEMATICAL BOLD ITALIC SMALL CHI +1D786 ; [.2343.0020.0005] # MATHEMATICAL SANS-SERIF BOLD SMALL CHI +1D7C0 ; [.2343.0020.0005] # MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL CHI +03A7 ; [.2343.0020.0008] # GREEK CAPITAL LETTER CHI +1D6BE ; [.2343.0020.000B] # MATHEMATICAL BOLD CAPITAL CHI +1D6F8 ; [.2343.0020.000B] # MATHEMATICAL ITALIC CAPITAL CHI +1D732 ; [.2343.0020.000B] # MATHEMATICAL BOLD ITALIC CAPITAL CHI +1D76C ; [.2343.0020.000B] # MATHEMATICAL SANS-SERIF BOLD CAPITAL CHI +1D7A6 ; [.2343.0020.000B] # MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL CHI +1D61 ; [.2343.0020.0014] # MODIFIER LETTER SMALL CHI +1D6A ; [.2343.0020.0015] # GREEK SUBSCRIPT SMALL LETTER CHI +03C8 ; [.2344.0020.0002] # GREEK SMALL LETTER PSI +1D6D9 ; [.2344.0020.0005] # MATHEMATICAL BOLD SMALL PSI +1D713 ; [.2344.0020.0005] # MATHEMATICAL ITALIC SMALL PSI +1D74D ; [.2344.0020.0005] # MATHEMATICAL BOLD ITALIC SMALL PSI +1D787 ; [.2344.0020.0005] # MATHEMATICAL SANS-SERIF BOLD SMALL PSI +1D7C1 ; [.2344.0020.0005] # MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL PSI +03A8 ; [.2344.0020.0008] # GREEK CAPITAL LETTER PSI +1D6BF ; [.2344.0020.000B] # MATHEMATICAL BOLD CAPITAL PSI +1D6F9 ; [.2344.0020.000B] # MATHEMATICAL ITALIC CAPITAL PSI +1D733 ; [.2344.0020.000B] # MATHEMATICAL BOLD ITALIC CAPITAL PSI +1D76D ; [.2344.0020.000B] # MATHEMATICAL SANS-SERIF BOLD CAPITAL PSI +1D7A7 ; [.2344.0020.000B] # MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL PSI +1D2A ; [.2345.0020.0002] # GREEK LETTER SMALL CAPITAL PSI +03C9 ; [.2346.0020.0002] # GREEK SMALL LETTER OMEGA +1D6DA ; [.2346.0020.0005] # MATHEMATICAL BOLD SMALL OMEGA +1D714 ; [.2346.0020.0005] # MATHEMATICAL ITALIC SMALL OMEGA +1D74E ; [.2346.0020.0005] # MATHEMATICAL BOLD ITALIC SMALL OMEGA +1D788 ; [.2346.0020.0005] # MATHEMATICAL SANS-SERIF BOLD SMALL OMEGA +1D7C2 ; [.2346.0020.0005] # MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL OMEGA +03A9 ; [.2346.0020.0008] # GREEK CAPITAL LETTER OMEGA +2126 ; [.2346.0020.0008] # OHM SIGN +1D6C0 ; [.2346.0020.000B] # MATHEMATICAL BOLD CAPITAL OMEGA +1D6FA ; [.2346.0020.000B] # MATHEMATICAL ITALIC CAPITAL OMEGA +1D734 ; [.2346.0020.000B] # MATHEMATICAL BOLD ITALIC CAPITAL OMEGA +1D76E ; [.2346.0020.000B] # MATHEMATICAL SANS-SERIF BOLD CAPITAL OMEGA +1D7A8 ; [.2346.0020.000B] # MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL OMEGA +1F60 ; [.2346.0020.0002][.0000.0022.0002] # GREEK SMALL LETTER OMEGA WITH PSILI +1F68 ; [.2346.0020.0008][.0000.0022.0002] # GREEK CAPITAL LETTER OMEGA WITH PSILI +1F64 ; [.2346.0020.0002][.0000.0022.0002][.0000.0024.0002] # GREEK SMALL LETTER OMEGA WITH PSILI AND OXIA +1F6C ; [.2346.0020.0008][.0000.0022.0002][.0000.0024.0002] # GREEK CAPITAL LETTER OMEGA WITH PSILI AND OXIA +1FA4 ; [.2346.0020.0002][.0000.0022.0002][.0000.0024.0002][.0000.004C.0002] # GREEK SMALL LETTER OMEGA WITH PSILI AND OXIA AND YPOGEGRAMMENI +1FAC ; [.2346.0020.0008][.0000.0022.0002][.0000.0024.0002][.0000.004C.0002] # GREEK CAPITAL LETTER OMEGA WITH PSILI AND OXIA AND PROSGEGRAMMENI +1F62 ; [.2346.0020.0002][.0000.0022.0002][.0000.0025.0002] # GREEK SMALL LETTER OMEGA WITH PSILI AND VARIA +1F6A ; [.2346.0020.0008][.0000.0022.0002][.0000.0025.0002] # GREEK CAPITAL LETTER OMEGA WITH PSILI AND VARIA +1FA2 ; [.2346.0020.0002][.0000.0022.0002][.0000.0025.0002][.0000.004C.0002] # GREEK SMALL LETTER OMEGA WITH PSILI AND VARIA AND YPOGEGRAMMENI +1FAA ; [.2346.0020.0008][.0000.0022.0002][.0000.0025.0002][.0000.004C.0002] # GREEK CAPITAL LETTER OMEGA WITH PSILI AND VARIA AND PROSGEGRAMMENI +1F66 ; [.2346.0020.0002][.0000.0022.0002][.0000.002A.0002] # GREEK SMALL LETTER OMEGA WITH PSILI AND PERISPOMENI +1F6E ; [.2346.0020.0008][.0000.0022.0002][.0000.002A.0002] # GREEK CAPITAL LETTER OMEGA WITH PSILI AND PERISPOMENI +1FA6 ; [.2346.0020.0002][.0000.0022.0002][.0000.002A.0002][.0000.004C.0002] # GREEK SMALL LETTER OMEGA WITH PSILI AND PERISPOMENI AND YPOGEGRAMMENI +1FAE ; [.2346.0020.0008][.0000.0022.0002][.0000.002A.0002][.0000.004C.0002] # GREEK CAPITAL LETTER OMEGA WITH PSILI AND PERISPOMENI AND PROSGEGRAMMENI +1FA0 ; [.2346.0020.0002][.0000.0022.0002][.0000.004C.0002] # GREEK SMALL LETTER OMEGA WITH PSILI AND YPOGEGRAMMENI +1FA8 ; [.2346.0020.0008][.0000.0022.0002][.0000.004C.0002] # GREEK CAPITAL LETTER OMEGA WITH PSILI AND PROSGEGRAMMENI +1F61 ; [.2346.0020.0002][.0000.0023.0002] # GREEK SMALL LETTER OMEGA WITH DASIA +1F69 ; [.2346.0020.0008][.0000.0023.0002] # GREEK CAPITAL LETTER OMEGA WITH DASIA +1F65 ; [.2346.0020.0002][.0000.0023.0002][.0000.0024.0002] # GREEK SMALL LETTER OMEGA WITH DASIA AND OXIA +1F6D ; [.2346.0020.0008][.0000.0023.0002][.0000.0024.0002] # GREEK CAPITAL LETTER OMEGA WITH DASIA AND OXIA +1FA5 ; [.2346.0020.0002][.0000.0023.0002][.0000.0024.0002][.0000.004C.0002] # GREEK SMALL LETTER OMEGA WITH DASIA AND OXIA AND YPOGEGRAMMENI +1FAD ; [.2346.0020.0008][.0000.0023.0002][.0000.0024.0002][.0000.004C.0002] # GREEK CAPITAL LETTER OMEGA WITH DASIA AND OXIA AND PROSGEGRAMMENI +1F63 ; [.2346.0020.0002][.0000.0023.0002][.0000.0025.0002] # GREEK SMALL LETTER OMEGA WITH DASIA AND VARIA +1F6B ; [.2346.0020.0008][.0000.0023.0002][.0000.0025.0002] # GREEK CAPITAL LETTER OMEGA WITH DASIA AND VARIA +1FA3 ; [.2346.0020.0002][.0000.0023.0002][.0000.0025.0002][.0000.004C.0002] # GREEK SMALL LETTER OMEGA WITH DASIA AND VARIA AND YPOGEGRAMMENI +1FAB ; [.2346.0020.0008][.0000.0023.0002][.0000.0025.0002][.0000.004C.0002] # GREEK CAPITAL LETTER OMEGA WITH DASIA AND VARIA AND PROSGEGRAMMENI +1F67 ; [.2346.0020.0002][.0000.0023.0002][.0000.002A.0002] # GREEK SMALL LETTER OMEGA WITH DASIA AND PERISPOMENI +1F6F ; [.2346.0020.0008][.0000.0023.0002][.0000.002A.0002] # GREEK CAPITAL LETTER OMEGA WITH DASIA AND PERISPOMENI +1FA7 ; [.2346.0020.0002][.0000.0023.0002][.0000.002A.0002][.0000.004C.0002] # GREEK SMALL LETTER OMEGA WITH DASIA AND PERISPOMENI AND YPOGEGRAMMENI +1FAF ; [.2346.0020.0008][.0000.0023.0002][.0000.002A.0002][.0000.004C.0002] # GREEK CAPITAL LETTER OMEGA WITH DASIA AND PERISPOMENI AND PROSGEGRAMMENI +1FA1 ; [.2346.0020.0002][.0000.0023.0002][.0000.004C.0002] # GREEK SMALL LETTER OMEGA WITH DASIA AND YPOGEGRAMMENI +1FA9 ; [.2346.0020.0008][.0000.0023.0002][.0000.004C.0002] # GREEK CAPITAL LETTER OMEGA WITH DASIA AND PROSGEGRAMMENI +03CE ; [.2346.0020.0002][.0000.0024.0002] # GREEK SMALL LETTER OMEGA WITH TONOS +1F7D ; [.2346.0020.0002][.0000.0024.0002] # GREEK SMALL LETTER OMEGA WITH OXIA +038F ; [.2346.0020.0008][.0000.0024.0002] # GREEK CAPITAL LETTER OMEGA WITH TONOS +1FFB ; [.2346.0020.0008][.0000.0024.0002] # GREEK CAPITAL LETTER OMEGA WITH OXIA +1FF4 ; [.2346.0020.0002][.0000.0024.0002][.0000.004C.0002] # GREEK SMALL LETTER OMEGA WITH OXIA AND YPOGEGRAMMENI +1F7C ; [.2346.0020.0002][.0000.0025.0002] # GREEK SMALL LETTER OMEGA WITH VARIA +1FFA ; [.2346.0020.0008][.0000.0025.0002] # GREEK CAPITAL LETTER OMEGA WITH VARIA +1FF2 ; [.2346.0020.0002][.0000.0025.0002][.0000.004C.0002] # GREEK SMALL LETTER OMEGA WITH VARIA AND YPOGEGRAMMENI +1FF6 ; [.2346.0020.0002][.0000.002A.0002] # GREEK SMALL LETTER OMEGA WITH PERISPOMENI +1FF7 ; [.2346.0020.0002][.0000.002A.0002][.0000.004C.0002] # GREEK SMALL LETTER OMEGA WITH PERISPOMENI AND YPOGEGRAMMENI +1FF3 ; [.2346.0020.0002][.0000.004C.0002] # GREEK SMALL LETTER OMEGA WITH YPOGEGRAMMENI +1FFC ; [.2346.0020.0008][.0000.004C.0002] # GREEK CAPITAL LETTER OMEGA WITH PROSGEGRAMMENI +AB65 ; [.2347.0020.0002] # GREEK LETTER SMALL CAPITAL OMEGA +03E1 ; [.2348.0020.0002] # GREEK SMALL LETTER SAMPI +03E0 ; [.2348.0020.0008] # GREEK LETTER SAMPI +0373 ; [.2349.0020.0002] # GREEK SMALL LETTER ARCHAIC SAMPI +0372 ; [.2349.0020.0008] # GREEK CAPITAL LETTER ARCHAIC SAMPI +03F8 ; [.234A.0020.0002] # GREEK SMALL LETTER SHO +03F7 ; [.234A.0020.0008] # GREEK CAPITAL LETTER SHO +2C81 ; [.234B.0020.0002] # COPTIC SMALL LETTER ALFA +2C80 ; [.234B.0020.0008] # COPTIC CAPITAL LETTER ALFA +2C83 ; [.234C.0020.0002] # COPTIC SMALL LETTER VIDA +2C82 ; [.234C.0020.0008] # COPTIC CAPITAL LETTER VIDA +2C85 ; [.234D.0020.0002] # COPTIC SMALL LETTER GAMMA +2C84 ; [.234D.0020.0008] # COPTIC CAPITAL LETTER GAMMA +2C87 ; [.234E.0020.0002] # COPTIC SMALL LETTER DALDA +2C86 ; [.234E.0020.0008] # COPTIC CAPITAL LETTER DALDA +2C89 ; [.234F.0020.0002] # COPTIC SMALL LETTER EIE +2C88 ; [.234F.0020.0008] # COPTIC CAPITAL LETTER EIE +2CB7 ; [.2350.0020.0002] # COPTIC SMALL LETTER CRYPTOGRAMMIC EIE +2CB6 ; [.2350.0020.0008] # COPTIC CAPITAL LETTER CRYPTOGRAMMIC EIE +2C8B ; [.2351.0020.0002] # COPTIC SMALL LETTER SOU +2C8A ; [.2351.0020.0008] # COPTIC CAPITAL LETTER SOU +2C8D ; [.2352.0020.0002] # COPTIC SMALL LETTER ZATA +2C8C ; [.2352.0020.0008] # COPTIC CAPITAL LETTER ZATA +2C8F ; [.2353.0020.0002] # COPTIC SMALL LETTER HATE +2C8E ; [.2353.0020.0008] # COPTIC CAPITAL LETTER HATE +2C91 ; [.2354.0020.0002] # COPTIC SMALL LETTER THETHE +2C90 ; [.2354.0020.0008] # COPTIC CAPITAL LETTER THETHE +2C93 ; [.2355.0020.0002] # COPTIC SMALL LETTER IAUDA +2C92 ; [.2355.0020.0008] # COPTIC CAPITAL LETTER IAUDA +2C95 ; [.2356.0020.0002] # COPTIC SMALL LETTER KAPA +2C94 ; [.2356.0020.0008] # COPTIC CAPITAL LETTER KAPA +2CE4 ; [.2356.0020.0004][.234B.0020.0004][.2355.0020.0004] # COPTIC SYMBOL KAI +2CB9 ; [.2357.0020.0002] # COPTIC SMALL LETTER DIALECT-P KAPA +2CB8 ; [.2357.0020.0008] # COPTIC CAPITAL LETTER DIALECT-P KAPA +2C97 ; [.2358.0020.0002] # COPTIC SMALL LETTER LAULA +2C96 ; [.2358.0020.0008] # COPTIC CAPITAL LETTER LAULA +2C99 ; [.2359.0020.0002] # COPTIC SMALL LETTER MI +2C98 ; [.2359.0020.0008] # COPTIC CAPITAL LETTER MI +2C9B ; [.235A.0020.0002] # COPTIC SMALL LETTER NI +2C9A ; [.235A.0020.0008] # COPTIC CAPITAL LETTER NI +2CBB ; [.235B.0020.0002] # COPTIC SMALL LETTER DIALECT-P NI +2CBA ; [.235B.0020.0008] # COPTIC CAPITAL LETTER DIALECT-P NI +2CBD ; [.235C.0020.0002] # COPTIC SMALL LETTER CRYPTOGRAMMIC NI +2CBC ; [.235C.0020.0008] # COPTIC CAPITAL LETTER CRYPTOGRAMMIC NI +2C9D ; [.235D.0020.0002] # COPTIC SMALL LETTER KSI +2C9C ; [.235D.0020.0008] # COPTIC CAPITAL LETTER KSI +2C9F ; [.235E.0020.0002] # COPTIC SMALL LETTER O +2C9E ; [.235E.0020.0008] # COPTIC CAPITAL LETTER O +2CA1 ; [.235F.0020.0002] # COPTIC SMALL LETTER PI +2CA0 ; [.235F.0020.0008] # COPTIC CAPITAL LETTER PI +2CA3 ; [.2360.0020.0002] # COPTIC SMALL LETTER RO +2CA2 ; [.2360.0020.0008] # COPTIC CAPITAL LETTER RO +2CA5 ; [.2361.0020.0002] # COPTIC SMALL LETTER SIMA +2CA4 ; [.2361.0020.0008] # COPTIC CAPITAL LETTER SIMA +2CA7 ; [.2362.0020.0002] # COPTIC SMALL LETTER TAU +2CA6 ; [.2362.0020.0008] # COPTIC CAPITAL LETTER TAU +2CA9 ; [.2363.0020.0002] # COPTIC SMALL LETTER UA +2CA8 ; [.2363.0020.0008] # COPTIC CAPITAL LETTER UA +2CAB ; [.2364.0020.0002] # COPTIC SMALL LETTER FI +2CAA ; [.2364.0020.0008] # COPTIC CAPITAL LETTER FI +2CAD ; [.2365.0020.0002] # COPTIC SMALL LETTER KHI +2CAC ; [.2365.0020.0008] # COPTIC CAPITAL LETTER KHI +2CAF ; [.2366.0020.0002] # COPTIC SMALL LETTER PSI +2CAE ; [.2366.0020.0008] # COPTIC CAPITAL LETTER PSI +2CB1 ; [.2367.0020.0002] # COPTIC SMALL LETTER OOU +2CB0 ; [.2367.0020.0008] # COPTIC CAPITAL LETTER OOU +2CBF ; [.2368.0020.0002] # COPTIC SMALL LETTER OLD COPTIC OOU +2CBE ; [.2368.0020.0008] # COPTIC CAPITAL LETTER OLD COPTIC OOU +2CC1 ; [.2369.0020.0002] # COPTIC SMALL LETTER SAMPI +2CC0 ; [.2369.0020.0008] # COPTIC CAPITAL LETTER SAMPI +03E3 ; [.236A.0020.0002] # COPTIC SMALL LETTER SHEI +03E2 ; [.236A.0020.0008] # COPTIC CAPITAL LETTER SHEI +2CEC ; [.236B.0020.0002] # COPTIC SMALL LETTER CRYPTOGRAMMIC SHEI +2CEB ; [.236B.0020.0008] # COPTIC CAPITAL LETTER CRYPTOGRAMMIC SHEI +2CC3 ; [.236C.0020.0002] # COPTIC SMALL LETTER CROSSED SHEI +2CC2 ; [.236C.0020.0008] # COPTIC CAPITAL LETTER CROSSED SHEI +2CC5 ; [.236D.0020.0002] # COPTIC SMALL LETTER OLD COPTIC SHEI +2CC4 ; [.236D.0020.0008] # COPTIC CAPITAL LETTER OLD COPTIC SHEI +2CC7 ; [.236E.0020.0002] # COPTIC SMALL LETTER OLD COPTIC ESH +2CC6 ; [.236E.0020.0008] # COPTIC CAPITAL LETTER OLD COPTIC ESH +03E5 ; [.236F.0020.0002] # COPTIC SMALL LETTER FEI +03E4 ; [.236F.0020.0008] # COPTIC CAPITAL LETTER FEI +03E7 ; [.2370.0020.0002] # COPTIC SMALL LETTER KHEI +03E6 ; [.2370.0020.0008] # COPTIC CAPITAL LETTER KHEI +2CF3 ; [.2371.0020.0002] # COPTIC SMALL LETTER BOHAIRIC KHEI +2CF2 ; [.2371.0020.0008] # COPTIC CAPITAL LETTER BOHAIRIC KHEI +2CC9 ; [.2372.0020.0002] # COPTIC SMALL LETTER AKHMIMIC KHEI +2CC8 ; [.2372.0020.0008] # COPTIC CAPITAL LETTER AKHMIMIC KHEI +03E9 ; [.2373.0020.0002] # COPTIC SMALL LETTER HORI +03E8 ; [.2373.0020.0008] # COPTIC CAPITAL LETTER HORI +2CCB ; [.2374.0020.0002] # COPTIC SMALL LETTER DIALECT-P HORI +2CCA ; [.2374.0020.0008] # COPTIC CAPITAL LETTER DIALECT-P HORI +2CCD ; [.2375.0020.0002] # COPTIC SMALL LETTER OLD COPTIC HORI +2CCC ; [.2375.0020.0008] # COPTIC CAPITAL LETTER OLD COPTIC HORI +2CCF ; [.2376.0020.0002] # COPTIC SMALL LETTER OLD COPTIC HA +2CCE ; [.2376.0020.0008] # COPTIC CAPITAL LETTER OLD COPTIC HA +2CD1 ; [.2377.0020.0002] # COPTIC SMALL LETTER L-SHAPED HA +2CD0 ; [.2377.0020.0008] # COPTIC CAPITAL LETTER L-SHAPED HA +2CD3 ; [.2378.0020.0002] # COPTIC SMALL LETTER OLD COPTIC HEI +2CD2 ; [.2378.0020.0008] # COPTIC CAPITAL LETTER OLD COPTIC HEI +2CD5 ; [.2379.0020.0002] # COPTIC SMALL LETTER OLD COPTIC HAT +2CD4 ; [.2379.0020.0008] # COPTIC CAPITAL LETTER OLD COPTIC HAT +03EB ; [.237A.0020.0002] # COPTIC SMALL LETTER GANGIA +03EA ; [.237A.0020.0008] # COPTIC CAPITAL LETTER GANGIA +2CEE ; [.237B.0020.0002] # COPTIC SMALL LETTER CRYPTOGRAMMIC GANGIA +2CED ; [.237B.0020.0008] # COPTIC CAPITAL LETTER CRYPTOGRAMMIC GANGIA +2CD7 ; [.237C.0020.0002] # COPTIC SMALL LETTER OLD COPTIC GANGIA +2CD6 ; [.237C.0020.0008] # COPTIC CAPITAL LETTER OLD COPTIC GANGIA +03ED ; [.237D.0020.0002] # COPTIC SMALL LETTER SHIMA +03EC ; [.237D.0020.0008] # COPTIC CAPITAL LETTER SHIMA +2CD9 ; [.237E.0020.0002] # COPTIC SMALL LETTER OLD COPTIC DJA +2CD8 ; [.237E.0020.0008] # COPTIC CAPITAL LETTER OLD COPTIC DJA +2CDB ; [.237F.0020.0002] # COPTIC SMALL LETTER OLD COPTIC SHIMA +2CDA ; [.237F.0020.0008] # COPTIC CAPITAL LETTER OLD COPTIC SHIMA +2CDD ; [.2380.0020.0002] # COPTIC SMALL LETTER OLD NUBIAN SHIMA +2CDC ; [.2380.0020.0008] # COPTIC CAPITAL LETTER OLD NUBIAN SHIMA +03EF ; [.2381.0020.0002] # COPTIC SMALL LETTER DEI +03EE ; [.2381.0020.0008] # COPTIC CAPITAL LETTER DEI +2CB3 ; [.2382.0020.0002] # COPTIC SMALL LETTER DIALECT-P ALEF +2CB2 ; [.2382.0020.0008] # COPTIC CAPITAL LETTER DIALECT-P ALEF +2CB5 ; [.2383.0020.0002] # COPTIC SMALL LETTER OLD COPTIC AIN +2CB4 ; [.2383.0020.0008] # COPTIC CAPITAL LETTER OLD COPTIC AIN +2CDF ; [.2384.0020.0002] # COPTIC SMALL LETTER OLD NUBIAN NGI +2CDE ; [.2384.0020.0008] # COPTIC CAPITAL LETTER OLD NUBIAN NGI +2CE1 ; [.2385.0020.0002] # COPTIC SMALL LETTER OLD NUBIAN NYI +2CE0 ; [.2385.0020.0008] # COPTIC CAPITAL LETTER OLD NUBIAN NYI +2CE3 ; [.2386.0020.0002] # COPTIC SMALL LETTER OLD NUBIAN WAU +2CE2 ; [.2386.0020.0008] # COPTIC CAPITAL LETTER OLD NUBIAN WAU +0430 ; [.2387.0020.0002] # CYRILLIC SMALL LETTER A +2DF6 ; [.2387.0020.0004] # COMBINING CYRILLIC LETTER A +0410 ; [.2387.0020.0008] # CYRILLIC CAPITAL LETTER A +04D1 ; [.2387.0020.0002][.0000.0026.0002] # CYRILLIC SMALL LETTER A WITH BREVE +04D0 ; [.2387.0020.0008][.0000.0026.0002] # CYRILLIC CAPITAL LETTER A WITH BREVE +04D3 ; [.2387.0020.0002][.0000.002B.0002] # CYRILLIC SMALL LETTER A WITH DIAERESIS +04D2 ; [.2387.0020.0008][.0000.002B.0002] # CYRILLIC CAPITAL LETTER A WITH DIAERESIS +04D9 ; [.238B.0020.0002] # CYRILLIC SMALL LETTER SCHWA +04D8 ; [.238B.0020.0008] # CYRILLIC CAPITAL LETTER SCHWA +04DB ; [.238B.0020.0002][.0000.002B.0002] # CYRILLIC SMALL LETTER SCHWA WITH DIAERESIS +04DA ; [.238B.0020.0008][.0000.002B.0002] # CYRILLIC CAPITAL LETTER SCHWA WITH DIAERESIS +04D5 ; [.238F.0020.0002] # CYRILLIC SMALL LIGATURE A IE +04D4 ; [.238F.0020.0008] # CYRILLIC CAPITAL LIGATURE A IE +0431 ; [.2393.0020.0002] # CYRILLIC SMALL LETTER BE +2DE0 ; [.2393.0020.0004] # COMBINING CYRILLIC LETTER BE +0411 ; [.2393.0020.0008] # CYRILLIC CAPITAL LETTER BE +0432 ; [.2397.0020.0002] # CYRILLIC SMALL LETTER VE +1C80 ; [.2397.0020.0004] # CYRILLIC SMALL LETTER ROUNDED VE +2DE1 ; [.2397.0020.0004] # COMBINING CYRILLIC LETTER VE +0412 ; [.2397.0020.0008] # CYRILLIC CAPITAL LETTER VE +0433 ; [.239B.0020.0002] # CYRILLIC SMALL LETTER GHE +2DE2 ; [.239B.0020.0004] # COMBINING CYRILLIC LETTER GHE +0413 ; [.239B.0020.0008] # CYRILLIC CAPITAL LETTER GHE +0453 ; [.239B.0020.0002][.0000.0024.0002] # CYRILLIC SMALL LETTER GJE +0403 ; [.239B.0020.0008][.0000.0024.0002] # CYRILLIC CAPITAL LETTER GJE +0491 ; [.239B.0020.0004][.0000.0119.0004] # CYRILLIC SMALL LETTER GHE WITH UPTURN +0490 ; [.239B.0020.000A][.0000.0119.0004] # CYRILLIC CAPITAL LETTER GHE WITH UPTURN +0493 ; [.239F.0020.0002] # CYRILLIC SMALL LETTER GHE WITH STROKE +0492 ; [.239F.0020.0008] # CYRILLIC CAPITAL LETTER GHE WITH STROKE +04FB ; [.23A3.0020.0002] # CYRILLIC SMALL LETTER GHE WITH STROKE AND HOOK +04FA ; [.23A3.0020.0008] # CYRILLIC CAPITAL LETTER GHE WITH STROKE AND HOOK +0495 ; [.23A7.0020.0002] # CYRILLIC SMALL LETTER GHE WITH MIDDLE HOOK +0494 ; [.23A7.0020.0008] # CYRILLIC CAPITAL LETTER GHE WITH MIDDLE HOOK +04F7 ; [.23AB.0020.0002] # CYRILLIC SMALL LETTER GHE WITH DESCENDER +04F6 ; [.23AB.0020.0008] # CYRILLIC CAPITAL LETTER GHE WITH DESCENDER +0434 ; [.23AF.0020.0002] # CYRILLIC SMALL LETTER DE +1C81 ; [.23AF.0020.0004] # CYRILLIC SMALL LETTER LONG-LEGGED DE +2DE3 ; [.23AF.0020.0004] # COMBINING CYRILLIC LETTER DE +0414 ; [.23AF.0020.0008] # CYRILLIC CAPITAL LETTER DE +0501 ; [.23B3.0020.0002] # CYRILLIC SMALL LETTER KOMI DE +0500 ; [.23B3.0020.0008] # CYRILLIC CAPITAL LETTER KOMI DE +A681 ; [.23B4.0020.0002] # CYRILLIC SMALL LETTER DWE +A680 ; [.23B4.0020.0008] # CYRILLIC CAPITAL LETTER DWE +0452 ; [.23B5.0020.0002] # CYRILLIC SMALL LETTER DJE +0402 ; [.23B5.0020.0008] # CYRILLIC CAPITAL LETTER DJE +A663 ; [.23B9.0020.0002] # CYRILLIC SMALL LETTER SOFT DE +A662 ; [.23B9.0020.0008] # CYRILLIC CAPITAL LETTER SOFT DE +0503 ; [.23BA.0020.0002] # CYRILLIC SMALL LETTER KOMI DJE +0502 ; [.23BA.0020.0008] # CYRILLIC CAPITAL LETTER KOMI DJE +0499 ; [.23BB.0020.0002] # CYRILLIC SMALL LETTER ZE WITH DESCENDER +0498 ; [.23BB.0020.0008] # CYRILLIC CAPITAL LETTER ZE WITH DESCENDER +0435 ; [.23BF.0020.0002] # CYRILLIC SMALL LETTER IE +2DF7 ; [.23BF.0020.0004] # COMBINING CYRILLIC LETTER IE +0415 ; [.23BF.0020.0008] # CYRILLIC CAPITAL LETTER IE +0450 ; [.23BF.0020.0002][.0000.0025.0002] # CYRILLIC SMALL LETTER IE WITH GRAVE +0400 ; [.23BF.0020.0008][.0000.0025.0002] # CYRILLIC CAPITAL LETTER IE WITH GRAVE +04D7 ; [.23BF.0020.0002][.0000.0026.0002] # CYRILLIC SMALL LETTER IE WITH BREVE +04D6 ; [.23BF.0020.0008][.0000.0026.0002] # CYRILLIC CAPITAL LETTER IE WITH BREVE +0451 ; [.23BF.0020.0002][.0000.002B.0002] # CYRILLIC SMALL LETTER IO +0401 ; [.23BF.0020.0008][.0000.002B.0002] # CYRILLIC CAPITAL LETTER IO +0454 ; [.23C3.0020.0002] # CYRILLIC SMALL LETTER UKRAINIAN IE +A674 ; [.23C3.0020.0004] # COMBINING CYRILLIC LETTER UKRAINIAN IE +0404 ; [.23C3.0020.0008] # CYRILLIC CAPITAL LETTER UKRAINIAN IE +0436 ; [.23C7.0020.0002] # CYRILLIC SMALL LETTER ZHE +2DE4 ; [.23C7.0020.0004] # COMBINING CYRILLIC LETTER ZHE +0416 ; [.23C7.0020.0008] # CYRILLIC CAPITAL LETTER ZHE +04C2 ; [.23C7.0020.0002][.0000.0026.0002] # CYRILLIC SMALL LETTER ZHE WITH BREVE +04C1 ; [.23C7.0020.0008][.0000.0026.0002] # CYRILLIC CAPITAL LETTER ZHE WITH BREVE +04DD ; [.23C7.0020.0002][.0000.002B.0002] # CYRILLIC SMALL LETTER ZHE WITH DIAERESIS +04DC ; [.23C7.0020.0008][.0000.002B.0002] # CYRILLIC CAPITAL LETTER ZHE WITH DIAERESIS +052B ; [.23CB.0020.0002] # CYRILLIC SMALL LETTER DZZHE +052A ; [.23CB.0020.0008] # CYRILLIC CAPITAL LETTER DZZHE +A685 ; [.23CC.0020.0002] # CYRILLIC SMALL LETTER ZHWE +A684 ; [.23CC.0020.0008] # CYRILLIC CAPITAL LETTER ZHWE +0497 ; [.23CD.0020.0002] # CYRILLIC SMALL LETTER ZHE WITH DESCENDER +0496 ; [.23CD.0020.0008] # CYRILLIC CAPITAL LETTER ZHE WITH DESCENDER +0437 ; [.23D1.0020.0002] # CYRILLIC SMALL LETTER ZE +2DE5 ; [.23D1.0020.0004] # COMBINING CYRILLIC LETTER ZE +0417 ; [.23D1.0020.0008] # CYRILLIC CAPITAL LETTER ZE +04DF ; [.23D1.0020.0002][.0000.002B.0002] # CYRILLIC SMALL LETTER ZE WITH DIAERESIS +04DE ; [.23D1.0020.0008][.0000.002B.0002] # CYRILLIC CAPITAL LETTER ZE WITH DIAERESIS +A641 ; [.23D5.0020.0002] # CYRILLIC SMALL LETTER ZEMLYA +A640 ; [.23D5.0020.0008] # CYRILLIC CAPITAL LETTER ZEMLYA +0505 ; [.23D6.0020.0002] # CYRILLIC SMALL LETTER KOMI ZJE +0504 ; [.23D6.0020.0008] # CYRILLIC CAPITAL LETTER KOMI ZJE +0511 ; [.23D7.0020.0002] # CYRILLIC SMALL LETTER REVERSED ZE +0510 ; [.23D7.0020.0008] # CYRILLIC CAPITAL LETTER REVERSED ZE +A643 ; [.23D8.0020.0002] # CYRILLIC SMALL LETTER DZELO +A642 ; [.23D8.0020.0008] # CYRILLIC CAPITAL LETTER DZELO +0455 ; [.23D9.0020.0002] # CYRILLIC SMALL LETTER DZE +0405 ; [.23D9.0020.0008] # CYRILLIC CAPITAL LETTER DZE +A645 ; [.23DD.0020.0002] # CYRILLIC SMALL LETTER REVERSED DZE +A644 ; [.23DD.0020.0008] # CYRILLIC CAPITAL LETTER REVERSED DZE +04E1 ; [.23DE.0020.0002] # CYRILLIC SMALL LETTER ABKHASIAN DZE +04E0 ; [.23DE.0020.0008] # CYRILLIC CAPITAL LETTER ABKHASIAN DZE +A689 ; [.23E2.0020.0002] # CYRILLIC SMALL LETTER DZZE +A688 ; [.23E2.0020.0008] # CYRILLIC CAPITAL LETTER DZZE +0507 ; [.23E3.0020.0002] # CYRILLIC SMALL LETTER KOMI DZJE +0506 ; [.23E3.0020.0008] # CYRILLIC CAPITAL LETTER KOMI DZJE +A683 ; [.23E4.0020.0002] # CYRILLIC SMALL LETTER DZWE +A682 ; [.23E4.0020.0008] # CYRILLIC CAPITAL LETTER DZWE +0438 ; [.23E5.0020.0002] # CYRILLIC SMALL LETTER I +A675 ; [.23E5.0020.0004] # COMBINING CYRILLIC LETTER I +0418 ; [.23E5.0020.0008] # CYRILLIC CAPITAL LETTER I +045D ; [.23E5.0020.0002][.0000.0025.0002] # CYRILLIC SMALL LETTER I WITH GRAVE +040D ; [.23E5.0020.0008][.0000.0025.0002] # CYRILLIC CAPITAL LETTER I WITH GRAVE +04E5 ; [.23E5.0020.0002][.0000.002B.0002] # CYRILLIC SMALL LETTER I WITH DIAERESIS +04E4 ; [.23E5.0020.0008][.0000.002B.0002] # CYRILLIC CAPITAL LETTER I WITH DIAERESIS +04E3 ; [.23E5.0020.0002][.0000.0032.0002] # CYRILLIC SMALL LETTER I WITH MACRON +04E2 ; [.23E5.0020.0008][.0000.0032.0002] # CYRILLIC CAPITAL LETTER I WITH MACRON +048B ; [.23E9.0020.0002] # CYRILLIC SMALL LETTER SHORT I WITH TAIL +048A ; [.23E9.0020.0008] # CYRILLIC CAPITAL LETTER SHORT I WITH TAIL +0456 ; [.23ED.0020.0002] # CYRILLIC SMALL LETTER BYELORUSSIAN-UKRAINIAN I +0406 ; [.23ED.0020.0008] # CYRILLIC CAPITAL LETTER BYELORUSSIAN-UKRAINIAN I +0457 ; [.23ED.0020.0002][.0000.002B.0002] # CYRILLIC SMALL LETTER YI +A676 ; [.23ED.0020.0004][.0000.002B.0004] # COMBINING CYRILLIC LETTER YI +0407 ; [.23ED.0020.0008][.0000.002B.0002] # CYRILLIC CAPITAL LETTER YI +A647 ; [.23F1.0020.0002] # CYRILLIC SMALL LETTER IOTA +A646 ; [.23F1.0020.0008] # CYRILLIC CAPITAL LETTER IOTA +0439 ; [.23F2.0020.0002] # CYRILLIC SMALL LETTER SHORT I +0438 0306 ; [.23F2.0020.0002] # CYRILLIC SMALL LETTER SHORT I +0419 ; [.23F2.0020.0008] # CYRILLIC CAPITAL LETTER SHORT I +0418 0306 ; [.23F2.0020.0008] # CYRILLIC CAPITAL LETTER SHORT I +0458 ; [.23F6.0020.0002] # CYRILLIC SMALL LETTER JE +0408 ; [.23F6.0020.0008] # CYRILLIC CAPITAL LETTER JE +A649 ; [.23FA.0020.0002] # CYRILLIC SMALL LETTER DJERV +2DF8 ; [.23FA.0020.0004] # COMBINING CYRILLIC LETTER DJERV +A648 ; [.23FA.0020.0008] # CYRILLIC CAPITAL LETTER DJERV +043A ; [.23FB.0020.0002] # CYRILLIC SMALL LETTER KA +2DE6 ; [.23FB.0020.0004] # COMBINING CYRILLIC LETTER KA +041A ; [.23FB.0020.0008] # CYRILLIC CAPITAL LETTER KA +045C ; [.23FB.0020.0002][.0000.0024.0002] # CYRILLIC SMALL LETTER KJE +040C ; [.23FB.0020.0008][.0000.0024.0002] # CYRILLIC CAPITAL LETTER KJE +049B ; [.23FF.0020.0002] # CYRILLIC SMALL LETTER KA WITH DESCENDER +049A ; [.23FF.0020.0008] # CYRILLIC CAPITAL LETTER KA WITH DESCENDER +04C4 ; [.2403.0020.0002] # CYRILLIC SMALL LETTER KA WITH HOOK +04C3 ; [.2403.0020.0008] # CYRILLIC CAPITAL LETTER KA WITH HOOK +04A1 ; [.2407.0020.0002] # CYRILLIC SMALL LETTER BASHKIR KA +04A0 ; [.2407.0020.0008] # CYRILLIC CAPITAL LETTER BASHKIR KA +049F ; [.240B.0020.0002] # CYRILLIC SMALL LETTER KA WITH STROKE +049E ; [.240B.0020.0008] # CYRILLIC CAPITAL LETTER KA WITH STROKE +049D ; [.240F.0020.0002] # CYRILLIC SMALL LETTER KA WITH VERTICAL STROKE +049C ; [.240F.0020.0008] # CYRILLIC CAPITAL LETTER KA WITH VERTICAL STROKE +051F ; [.2413.0020.0002] # CYRILLIC SMALL LETTER ALEUT KA +051E ; [.2413.0020.0008] # CYRILLIC CAPITAL LETTER ALEUT KA +051B ; [.2414.0020.0002] # CYRILLIC SMALL LETTER QA +051A ; [.2414.0020.0008] # CYRILLIC CAPITAL LETTER QA +043B ; [.2415.0020.0002] # CYRILLIC SMALL LETTER EL +2DE7 ; [.2415.0020.0004] # COMBINING CYRILLIC LETTER EL +041B ; [.2415.0020.0008] # CYRILLIC CAPITAL LETTER EL +1D2B ; [.2419.0020.0002] # CYRILLIC LETTER SMALL CAPITAL EL +04C6 ; [.241A.0020.0002] # CYRILLIC SMALL LETTER EL WITH TAIL +04C5 ; [.241A.0020.0008] # CYRILLIC CAPITAL LETTER EL WITH TAIL +052F ; [.241E.0020.0002] # CYRILLIC SMALL LETTER EL WITH DESCENDER +052E ; [.241E.0020.0008] # CYRILLIC CAPITAL LETTER EL WITH DESCENDER +0513 ; [.241F.0020.0002] # CYRILLIC SMALL LETTER EL WITH HOOK +0512 ; [.241F.0020.0008] # CYRILLIC CAPITAL LETTER EL WITH HOOK +0521 ; [.2420.0020.0002] # CYRILLIC SMALL LETTER EL WITH MIDDLE HOOK +0520 ; [.2420.0020.0008] # CYRILLIC CAPITAL LETTER EL WITH MIDDLE HOOK +0459 ; [.2421.0020.0002] # CYRILLIC SMALL LETTER LJE +0409 ; [.2421.0020.0008] # CYRILLIC CAPITAL LETTER LJE +A665 ; [.2425.0020.0002] # CYRILLIC SMALL LETTER SOFT EL +A664 ; [.2425.0020.0008] # CYRILLIC CAPITAL LETTER SOFT EL +0509 ; [.2426.0020.0002] # CYRILLIC SMALL LETTER KOMI LJE +0508 ; [.2426.0020.0008] # CYRILLIC CAPITAL LETTER KOMI LJE +0515 ; [.2427.0020.0002] # CYRILLIC SMALL LETTER LHA +0514 ; [.2427.0020.0008] # CYRILLIC CAPITAL LETTER LHA +043C ; [.2428.0020.0002] # CYRILLIC SMALL LETTER EM +2DE8 ; [.2428.0020.0004] # COMBINING CYRILLIC LETTER EM +041C ; [.2428.0020.0008] # CYRILLIC CAPITAL LETTER EM +04CE ; [.242C.0020.0002] # CYRILLIC SMALL LETTER EM WITH TAIL +04CD ; [.242C.0020.0008] # CYRILLIC CAPITAL LETTER EM WITH TAIL +A667 ; [.2430.0020.0002] # CYRILLIC SMALL LETTER SOFT EM +A666 ; [.2430.0020.0008] # CYRILLIC CAPITAL LETTER SOFT EM +043D ; [.2431.0020.0002] # CYRILLIC SMALL LETTER EN +2DE9 ; [.2431.0020.0004] # COMBINING CYRILLIC LETTER EN +041D ; [.2431.0020.0008] # CYRILLIC CAPITAL LETTER EN +1D78 ; [.2431.0020.0014] # MODIFIER LETTER CYRILLIC EN +0529 ; [.2435.0020.0002] # CYRILLIC SMALL LETTER EN WITH LEFT HOOK +0528 ; [.2435.0020.0008] # CYRILLIC CAPITAL LETTER EN WITH LEFT HOOK +04CA ; [.2436.0020.0002] # CYRILLIC SMALL LETTER EN WITH TAIL +04C9 ; [.2436.0020.0008] # CYRILLIC CAPITAL LETTER EN WITH TAIL +04A3 ; [.243A.0020.0002] # CYRILLIC SMALL LETTER EN WITH DESCENDER +04A2 ; [.243A.0020.0008] # CYRILLIC CAPITAL LETTER EN WITH DESCENDER +04C8 ; [.243E.0020.0002] # CYRILLIC SMALL LETTER EN WITH HOOK +04C7 ; [.243E.0020.0008] # CYRILLIC CAPITAL LETTER EN WITH HOOK +0523 ; [.2442.0020.0002] # CYRILLIC SMALL LETTER EN WITH MIDDLE HOOK +0522 ; [.2442.0020.0008] # CYRILLIC CAPITAL LETTER EN WITH MIDDLE HOOK +04A5 ; [.2443.0020.0002] # CYRILLIC SMALL LIGATURE EN GHE +04A4 ; [.2443.0020.0008] # CYRILLIC CAPITAL LIGATURE EN GHE +045A ; [.2447.0020.0002] # CYRILLIC SMALL LETTER NJE +040A ; [.2447.0020.0008] # CYRILLIC CAPITAL LETTER NJE +050B ; [.244B.0020.0002] # CYRILLIC SMALL LETTER KOMI NJE +050A ; [.244B.0020.0008] # CYRILLIC CAPITAL LETTER KOMI NJE +043E ; [.244C.0020.0002] # CYRILLIC SMALL LETTER O +1C82 ; [.244C.0020.0004] # CYRILLIC SMALL LETTER NARROW O +2DEA ; [.244C.0020.0004] # COMBINING CYRILLIC LETTER O +A669 ; [.244C.0020.0004] # CYRILLIC SMALL LETTER MONOCULAR O +A66B ; [.244C.0020.0004] # CYRILLIC SMALL LETTER BINOCULAR O +A66D ; [.244C.0020.0004] # CYRILLIC SMALL LETTER DOUBLE MONOCULAR O +A66E ; [.244C.0020.0004] # CYRILLIC LETTER MULTIOCULAR O +A699 ; [.244C.0020.0004] # CYRILLIC SMALL LETTER DOUBLE O +A69B ; [.244C.0020.0004] # CYRILLIC SMALL LETTER CROSSED O +041E ; [.244C.0020.0008] # CYRILLIC CAPITAL LETTER O +A668 ; [.244C.0020.000A] # CYRILLIC CAPITAL LETTER MONOCULAR O +A66A ; [.244C.0020.000A] # CYRILLIC CAPITAL LETTER BINOCULAR O +A66C ; [.244C.0020.000A] # CYRILLIC CAPITAL LETTER DOUBLE MONOCULAR O +A698 ; [.244C.0020.000A] # CYRILLIC CAPITAL LETTER DOUBLE O +A69A ; [.244C.0020.000A] # CYRILLIC CAPITAL LETTER CROSSED O +04E7 ; [.244C.0020.0002][.0000.002B.0002] # CYRILLIC SMALL LETTER O WITH DIAERESIS +04E6 ; [.244C.0020.0008][.0000.002B.0002] # CYRILLIC CAPITAL LETTER O WITH DIAERESIS +04E9 ; [.2450.0020.0002] # CYRILLIC SMALL LETTER BARRED O +04E8 ; [.2450.0020.0008] # CYRILLIC CAPITAL LETTER BARRED O +04EB ; [.2450.0020.0002][.0000.002B.0002] # CYRILLIC SMALL LETTER BARRED O WITH DIAERESIS +04EA ; [.2450.0020.0008][.0000.002B.0002] # CYRILLIC CAPITAL LETTER BARRED O WITH DIAERESIS +043F ; [.2454.0020.0002] # CYRILLIC SMALL LETTER PE +2DEB ; [.2454.0020.0004] # COMBINING CYRILLIC LETTER PE +041F ; [.2454.0020.0008] # CYRILLIC CAPITAL LETTER PE +0525 ; [.2458.0020.0002] # CYRILLIC SMALL LETTER PE WITH DESCENDER +0524 ; [.2458.0020.0008] # CYRILLIC CAPITAL LETTER PE WITH DESCENDER +04A7 ; [.2459.0020.0002] # CYRILLIC SMALL LETTER PE WITH MIDDLE HOOK +04A6 ; [.2459.0020.0008] # CYRILLIC CAPITAL LETTER PE WITH MIDDLE HOOK +0481 ; [.245D.0020.0002] # CYRILLIC SMALL LETTER KOPPA +0480 ; [.245D.0020.0008] # CYRILLIC CAPITAL LETTER KOPPA +0440 ; [.2461.0020.0002] # CYRILLIC SMALL LETTER ER +2DEC ; [.2461.0020.0004] # COMBINING CYRILLIC LETTER ER +0420 ; [.2461.0020.0008] # CYRILLIC CAPITAL LETTER ER +048F ; [.2465.0020.0002] # CYRILLIC SMALL LETTER ER WITH TICK +048E ; [.2465.0020.0008] # CYRILLIC CAPITAL LETTER ER WITH TICK +0517 ; [.2469.0020.0002] # CYRILLIC SMALL LETTER RHA +0516 ; [.2469.0020.0008] # CYRILLIC CAPITAL LETTER RHA +0441 ; [.246A.0020.0002] # CYRILLIC SMALL LETTER ES +1C83 ; [.246A.0020.0004] # CYRILLIC SMALL LETTER WIDE ES +2DED ; [.246A.0020.0004] # COMBINING CYRILLIC LETTER ES +0421 ; [.246A.0020.0008] # CYRILLIC CAPITAL LETTER ES +2DF5 ; [.246A.0020.0004][.2473.0020.0004] # COMBINING CYRILLIC LETTER ES-TE +050D ; [.246E.0020.0002] # CYRILLIC SMALL LETTER KOMI SJE +050C ; [.246E.0020.0008] # CYRILLIC CAPITAL LETTER KOMI SJE +04AB ; [.246F.0020.0002] # CYRILLIC SMALL LETTER ES WITH DESCENDER +04AA ; [.246F.0020.0008] # CYRILLIC CAPITAL LETTER ES WITH DESCENDER +0442 ; [.2473.0020.0002] # CYRILLIC SMALL LETTER TE +1C84 ; [.2473.0020.0004] # CYRILLIC SMALL LETTER TALL TE +1C85 ; [.2473.0020.0004] # CYRILLIC SMALL LETTER THREE-LEGGED TE +2DEE ; [.2473.0020.0004] # COMBINING CYRILLIC LETTER TE +0422 ; [.2473.0020.0008] # CYRILLIC CAPITAL LETTER TE +A68D ; [.2477.0020.0002] # CYRILLIC SMALL LETTER TWE +A68C ; [.2477.0020.0008] # CYRILLIC CAPITAL LETTER TWE +050F ; [.2478.0020.0002] # CYRILLIC SMALL LETTER KOMI TJE +050E ; [.2478.0020.0008] # CYRILLIC CAPITAL LETTER KOMI TJE +04AD ; [.2479.0020.0002] # CYRILLIC SMALL LETTER TE WITH DESCENDER +04AC ; [.2479.0020.0008] # CYRILLIC CAPITAL LETTER TE WITH DESCENDER +A68B ; [.247D.0020.0002] # CYRILLIC SMALL LETTER TE WITH MIDDLE HOOK +A68A ; [.247D.0020.0008] # CYRILLIC CAPITAL LETTER TE WITH MIDDLE HOOK +045B ; [.247E.0020.0002] # CYRILLIC SMALL LETTER TSHE +040B ; [.247E.0020.0008] # CYRILLIC CAPITAL LETTER TSHE +0443 ; [.2482.0020.0002] # CYRILLIC SMALL LETTER U +A677 ; [.2482.0020.0004] # COMBINING CYRILLIC LETTER U +0423 ; [.2482.0020.0008] # CYRILLIC CAPITAL LETTER U +045E ; [.2482.0020.0002][.0000.0026.0002] # CYRILLIC SMALL LETTER SHORT U +040E ; [.2482.0020.0008][.0000.0026.0002] # CYRILLIC CAPITAL LETTER SHORT U +04F1 ; [.2482.0020.0002][.0000.002B.0002] # CYRILLIC SMALL LETTER U WITH DIAERESIS +04F0 ; [.2482.0020.0008][.0000.002B.0002] # CYRILLIC CAPITAL LETTER U WITH DIAERESIS +04F3 ; [.2482.0020.0002][.0000.002C.0002] # CYRILLIC SMALL LETTER U WITH DOUBLE ACUTE +04F2 ; [.2482.0020.0008][.0000.002C.0002] # CYRILLIC CAPITAL LETTER U WITH DOUBLE ACUTE +04EF ; [.2482.0020.0002][.0000.0032.0002] # CYRILLIC SMALL LETTER U WITH MACRON +04EE ; [.2482.0020.0008][.0000.0032.0002] # CYRILLIC CAPITAL LETTER U WITH MACRON +04AF ; [.2486.0020.0002] # CYRILLIC SMALL LETTER STRAIGHT U +04AE ; [.2486.0020.0008] # CYRILLIC CAPITAL LETTER STRAIGHT U +04B1 ; [.248A.0020.0002] # CYRILLIC SMALL LETTER STRAIGHT U WITH STROKE +04B0 ; [.248A.0020.0008] # CYRILLIC CAPITAL LETTER STRAIGHT U WITH STROKE +A64B ; [.248E.0020.0002] # CYRILLIC SMALL LETTER MONOGRAPH UK +1C88 ; [.248E.0020.0004] # CYRILLIC SMALL LETTER UNBLENDED UK +2DF9 ; [.248E.0020.0004] # COMBINING CYRILLIC LETTER MONOGRAPH UK +A64A ; [.248E.0020.0008] # CYRILLIC CAPITAL LETTER MONOGRAPH UK +0479 ; [.248F.0020.0002] # CYRILLIC SMALL LETTER UK +0478 ; [.248F.0020.0008] # CYRILLIC CAPITAL LETTER UK +0444 ; [.2493.0020.0002] # CYRILLIC SMALL LETTER EF +A69E ; [.2493.0020.0004] # COMBINING CYRILLIC LETTER EF +0424 ; [.2493.0020.0008] # CYRILLIC CAPITAL LETTER EF +0445 ; [.2497.0020.0002] # CYRILLIC SMALL LETTER HA +2DEF ; [.2497.0020.0004] # COMBINING CYRILLIC LETTER HA +0425 ; [.2497.0020.0008] # CYRILLIC CAPITAL LETTER HA +04FD ; [.249B.0020.0002] # CYRILLIC SMALL LETTER HA WITH HOOK +04FC ; [.249B.0020.0008] # CYRILLIC CAPITAL LETTER HA WITH HOOK +04FF ; [.249F.0020.0002] # CYRILLIC SMALL LETTER HA WITH STROKE +04FE ; [.249F.0020.0008] # CYRILLIC CAPITAL LETTER HA WITH STROKE +04B3 ; [.24A3.0020.0002] # CYRILLIC SMALL LETTER HA WITH DESCENDER +04B2 ; [.24A3.0020.0008] # CYRILLIC CAPITAL LETTER HA WITH DESCENDER +04BB ; [.24A7.0020.0002] # CYRILLIC SMALL LETTER SHHA +04BA ; [.24A7.0020.0008] # CYRILLIC CAPITAL LETTER SHHA +0527 ; [.24AB.0020.0002] # CYRILLIC SMALL LETTER SHHA WITH DESCENDER +0526 ; [.24AB.0020.0008] # CYRILLIC CAPITAL LETTER SHHA WITH DESCENDER +A695 ; [.24AC.0020.0002] # CYRILLIC SMALL LETTER HWE +A694 ; [.24AC.0020.0008] # CYRILLIC CAPITAL LETTER HWE +0461 ; [.24AD.0020.0002] # CYRILLIC SMALL LETTER OMEGA +A67B ; [.24AD.0020.0004] # COMBINING CYRILLIC LETTER OMEGA +0460 ; [.24AD.0020.0008] # CYRILLIC CAPITAL LETTER OMEGA +047F ; [.24B1.0020.0002] # CYRILLIC SMALL LETTER OT +047E ; [.24B1.0020.0008] # CYRILLIC CAPITAL LETTER OT +A64D ; [.24B5.0020.0002] # CYRILLIC SMALL LETTER BROAD OMEGA +A64C ; [.24B5.0020.0008] # CYRILLIC CAPITAL LETTER BROAD OMEGA +047D ; [.24B6.0020.0002] # CYRILLIC SMALL LETTER OMEGA WITH TITLO +047C ; [.24B6.0020.0008] # CYRILLIC CAPITAL LETTER OMEGA WITH TITLO +047B ; [.24BA.0020.0002] # CYRILLIC SMALL LETTER ROUND OMEGA +047A ; [.24BA.0020.0008] # CYRILLIC CAPITAL LETTER ROUND OMEGA +0446 ; [.24BE.0020.0002] # CYRILLIC SMALL LETTER TSE +2DF0 ; [.24BE.0020.0004] # COMBINING CYRILLIC LETTER TSE +0426 ; [.24BE.0020.0008] # CYRILLIC CAPITAL LETTER TSE +A661 ; [.24C2.0020.0002] # CYRILLIC SMALL LETTER REVERSED TSE +A660 ; [.24C2.0020.0008] # CYRILLIC CAPITAL LETTER REVERSED TSE +A68F ; [.24C3.0020.0002] # CYRILLIC SMALL LETTER TSWE +A68E ; [.24C3.0020.0008] # CYRILLIC CAPITAL LETTER TSWE +04B5 ; [.24C4.0020.0002] # CYRILLIC SMALL LIGATURE TE TSE +04B4 ; [.24C4.0020.0008] # CYRILLIC CAPITAL LIGATURE TE TSE +A691 ; [.24C8.0020.0002] # CYRILLIC SMALL LETTER TSSE +A690 ; [.24C8.0020.0008] # CYRILLIC CAPITAL LETTER TSSE +0447 ; [.24C9.0020.0002] # CYRILLIC SMALL LETTER CHE +2DF1 ; [.24C9.0020.0004] # COMBINING CYRILLIC LETTER CHE +0427 ; [.24C9.0020.0008] # CYRILLIC CAPITAL LETTER CHE +04F5 ; [.24C9.0020.0002][.0000.002B.0002] # CYRILLIC SMALL LETTER CHE WITH DIAERESIS +04F4 ; [.24C9.0020.0008][.0000.002B.0002] # CYRILLIC CAPITAL LETTER CHE WITH DIAERESIS +052D ; [.24CD.0020.0002] # CYRILLIC SMALL LETTER DCHE +052C ; [.24CD.0020.0008] # CYRILLIC CAPITAL LETTER DCHE +A693 ; [.24CE.0020.0002] # CYRILLIC SMALL LETTER TCHE +A692 ; [.24CE.0020.0008] # CYRILLIC CAPITAL LETTER TCHE +04B7 ; [.24CF.0020.0002] # CYRILLIC SMALL LETTER CHE WITH DESCENDER +04B6 ; [.24CF.0020.0008] # CYRILLIC CAPITAL LETTER CHE WITH DESCENDER +04CC ; [.24D3.0020.0002] # CYRILLIC SMALL LETTER KHAKASSIAN CHE +04CB ; [.24D3.0020.0008] # CYRILLIC CAPITAL LETTER KHAKASSIAN CHE +04B9 ; [.24D7.0020.0002] # CYRILLIC SMALL LETTER CHE WITH VERTICAL STROKE +04B8 ; [.24D7.0020.0008] # CYRILLIC CAPITAL LETTER CHE WITH VERTICAL STROKE +A687 ; [.24DB.0020.0002] # CYRILLIC SMALL LETTER CCHE +A686 ; [.24DB.0020.0008] # CYRILLIC CAPITAL LETTER CCHE +04BD ; [.24DC.0020.0002] # CYRILLIC SMALL LETTER ABKHASIAN CHE +04BC ; [.24DC.0020.0008] # CYRILLIC CAPITAL LETTER ABKHASIAN CHE +04BF ; [.24E0.0020.0002] # CYRILLIC SMALL LETTER ABKHASIAN CHE WITH DESCENDER +04BE ; [.24E0.0020.0008] # CYRILLIC CAPITAL LETTER ABKHASIAN CHE WITH DESCENDER +045F ; [.24E4.0020.0002] # CYRILLIC SMALL LETTER DZHE +040F ; [.24E4.0020.0008] # CYRILLIC CAPITAL LETTER DZHE +0448 ; [.24E8.0020.0002] # CYRILLIC SMALL LETTER SHA +2DF2 ; [.24E8.0020.0004] # COMBINING CYRILLIC LETTER SHA +0428 ; [.24E8.0020.0008] # CYRILLIC CAPITAL LETTER SHA +A697 ; [.24EC.0020.0002] # CYRILLIC SMALL LETTER SHWE +A696 ; [.24EC.0020.0008] # CYRILLIC CAPITAL LETTER SHWE +0449 ; [.24ED.0020.0002] # CYRILLIC SMALL LETTER SHCHA +2DF3 ; [.24ED.0020.0004] # COMBINING CYRILLIC LETTER SHCHA +0429 ; [.24ED.0020.0008] # CYRILLIC CAPITAL LETTER SHCHA +A64F ; [.24F1.0020.0002] # CYRILLIC SMALL LETTER NEUTRAL YER +A64E ; [.24F1.0020.0008] # CYRILLIC CAPITAL LETTER NEUTRAL YER +2E2F ; [.24F2.0020.0002] # VERTICAL TILDE +A67F ; [.24F3.0020.0002] # CYRILLIC PAYEROK +044A ; [.24F4.0020.0002] # CYRILLIC SMALL LETTER HARD SIGN +1C86 ; [.24F4.0020.0004] # CYRILLIC SMALL LETTER TALL HARD SIGN +A678 ; [.24F4.0020.0004] # COMBINING CYRILLIC LETTER HARD SIGN +042A ; [.24F4.0020.0008] # CYRILLIC CAPITAL LETTER HARD SIGN +A69C ; [.24F4.0020.0014] # MODIFIER LETTER CYRILLIC HARD SIGN +A651 ; [.24F8.0020.0002] # CYRILLIC SMALL LETTER YERU WITH BACK YER +A650 ; [.24F8.0020.0008] # CYRILLIC CAPITAL LETTER YERU WITH BACK YER +044B ; [.24F9.0020.0002] # CYRILLIC SMALL LETTER YERU +A679 ; [.24F9.0020.0004] # COMBINING CYRILLIC LETTER YERU +042B ; [.24F9.0020.0008] # CYRILLIC CAPITAL LETTER YERU +04F9 ; [.24F9.0020.0002][.0000.002B.0002] # CYRILLIC SMALL LETTER YERU WITH DIAERESIS +04F8 ; [.24F9.0020.0008][.0000.002B.0002] # CYRILLIC CAPITAL LETTER YERU WITH DIAERESIS +044C ; [.24FD.0020.0002] # CYRILLIC SMALL LETTER SOFT SIGN +A67A ; [.24FD.0020.0004] # COMBINING CYRILLIC LETTER SOFT SIGN +042C ; [.24FD.0020.0008] # CYRILLIC CAPITAL LETTER SOFT SIGN +A69D ; [.24FD.0020.0014] # MODIFIER LETTER CYRILLIC SOFT SIGN +048D ; [.2501.0020.0002] # CYRILLIC SMALL LETTER SEMISOFT SIGN +048C ; [.2501.0020.0008] # CYRILLIC CAPITAL LETTER SEMISOFT SIGN +0463 ; [.2505.0020.0002] # CYRILLIC SMALL LETTER YAT +1C87 ; [.2505.0020.0004] # CYRILLIC SMALL LETTER TALL YAT +2DFA ; [.2505.0020.0004] # COMBINING CYRILLIC LETTER YAT +0462 ; [.2505.0020.0008] # CYRILLIC CAPITAL LETTER YAT +A653 ; [.2509.0020.0002] # CYRILLIC SMALL LETTER IOTIFIED YAT +A652 ; [.2509.0020.0008] # CYRILLIC CAPITAL LETTER IOTIFIED YAT +044D ; [.250A.0020.0002] # CYRILLIC SMALL LETTER E +042D ; [.250A.0020.0008] # CYRILLIC CAPITAL LETTER E +04ED ; [.250A.0020.0002][.0000.002B.0002] # CYRILLIC SMALL LETTER E WITH DIAERESIS +04EC ; [.250A.0020.0008][.0000.002B.0002] # CYRILLIC CAPITAL LETTER E WITH DIAERESIS +044E ; [.250E.0020.0002] # CYRILLIC SMALL LETTER YU +2DFB ; [.250E.0020.0004] # COMBINING CYRILLIC LETTER YU +042E ; [.250E.0020.0008] # CYRILLIC CAPITAL LETTER YU +A655 ; [.2512.0020.0002] # CYRILLIC SMALL LETTER REVERSED YU +A654 ; [.2512.0020.0008] # CYRILLIC CAPITAL LETTER REVERSED YU +A657 ; [.2513.0020.0002] # CYRILLIC SMALL LETTER IOTIFIED A +2DFC ; [.2513.0020.0004] # COMBINING CYRILLIC LETTER IOTIFIED A +A656 ; [.2513.0020.0008] # CYRILLIC CAPITAL LETTER IOTIFIED A +044F ; [.2514.0020.0002] # CYRILLIC SMALL LETTER YA +042F ; [.2514.0020.0008] # CYRILLIC CAPITAL LETTER YA +0519 ; [.2518.0020.0002] # CYRILLIC SMALL LETTER YAE +0518 ; [.2518.0020.0008] # CYRILLIC CAPITAL LETTER YAE +0465 ; [.2519.0020.0002] # CYRILLIC SMALL LETTER IOTIFIED E +A69F ; [.2519.0020.0004] # COMBINING CYRILLIC LETTER IOTIFIED E +0464 ; [.2519.0020.0008] # CYRILLIC CAPITAL LETTER IOTIFIED E +0467 ; [.251D.0020.0002] # CYRILLIC SMALL LETTER LITTLE YUS +2DFD ; [.251D.0020.0004] # COMBINING CYRILLIC LETTER LITTLE YUS +0466 ; [.251D.0020.0008] # CYRILLIC CAPITAL LETTER LITTLE YUS +A659 ; [.2521.0020.0002] # CYRILLIC SMALL LETTER CLOSED LITTLE YUS +A658 ; [.2521.0020.0008] # CYRILLIC CAPITAL LETTER CLOSED LITTLE YUS +046B ; [.2522.0020.0002] # CYRILLIC SMALL LETTER BIG YUS +2DFE ; [.2522.0020.0004] # COMBINING CYRILLIC LETTER BIG YUS +046A ; [.2522.0020.0008] # CYRILLIC CAPITAL LETTER BIG YUS +A65B ; [.2526.0020.0002] # CYRILLIC SMALL LETTER BLENDED YUS +A65A ; [.2526.0020.0008] # CYRILLIC CAPITAL LETTER BLENDED YUS +0469 ; [.2527.0020.0002] # CYRILLIC SMALL LETTER IOTIFIED LITTLE YUS +0468 ; [.2527.0020.0008] # CYRILLIC CAPITAL LETTER IOTIFIED LITTLE YUS +A65D ; [.252B.0020.0002] # CYRILLIC SMALL LETTER IOTIFIED CLOSED LITTLE YUS +A65C ; [.252B.0020.0008] # CYRILLIC CAPITAL LETTER IOTIFIED CLOSED LITTLE YUS +046D ; [.252C.0020.0002] # CYRILLIC SMALL LETTER IOTIFIED BIG YUS +2DFF ; [.252C.0020.0004] # COMBINING CYRILLIC LETTER IOTIFIED BIG YUS +046C ; [.252C.0020.0008] # CYRILLIC CAPITAL LETTER IOTIFIED BIG YUS +046F ; [.2530.0020.0002] # CYRILLIC SMALL LETTER KSI +046E ; [.2530.0020.0008] # CYRILLIC CAPITAL LETTER KSI +0471 ; [.2534.0020.0002] # CYRILLIC SMALL LETTER PSI +0470 ; [.2534.0020.0008] # CYRILLIC CAPITAL LETTER PSI +0473 ; [.2538.0020.0002] # CYRILLIC SMALL LETTER FITA +2DF4 ; [.2538.0020.0004] # COMBINING CYRILLIC LETTER FITA +0472 ; [.2538.0020.0008] # CYRILLIC CAPITAL LETTER FITA +0475 ; [.253C.0020.0002] # CYRILLIC SMALL LETTER IZHITSA +0474 ; [.253C.0020.0008] # CYRILLIC CAPITAL LETTER IZHITSA +0477 ; [.253C.0020.0002][.0000.003C.0002] # CYRILLIC SMALL LETTER IZHITSA WITH DOUBLE GRAVE ACCENT +0476 ; [.253C.0020.0008][.0000.003C.0002] # CYRILLIC CAPITAL LETTER IZHITSA WITH DOUBLE GRAVE ACCENT +A65F ; [.2540.0020.0002] # CYRILLIC SMALL LETTER YN +A65E ; [.2540.0020.0008] # CYRILLIC CAPITAL LETTER YN +04A9 ; [.2541.0020.0002] # CYRILLIC SMALL LETTER ABKHASIAN HA +04A8 ; [.2541.0020.0008] # CYRILLIC CAPITAL LETTER ABKHASIAN HA +051D ; [.2545.0020.0002] # CYRILLIC SMALL LETTER WE +051C ; [.2545.0020.0008] # CYRILLIC CAPITAL LETTER WE +04CF ; [.2546.0020.0002] # CYRILLIC SMALL LETTER PALOCHKA +04C0 ; [.2546.0020.0008] # CYRILLIC LETTER PALOCHKA +2C30 ; [.254A.0020.0002] # GLAGOLITIC SMALL LETTER AZU +1E000 ; [.254A.0020.0004] # COMBINING GLAGOLITIC LETTER AZU +2C00 ; [.254A.0020.0008] # GLAGOLITIC CAPITAL LETTER AZU +2C31 ; [.254B.0020.0002] # GLAGOLITIC SMALL LETTER BUKY +1E001 ; [.254B.0020.0004] # COMBINING GLAGOLITIC LETTER BUKY +2C01 ; [.254B.0020.0008] # GLAGOLITIC CAPITAL LETTER BUKY +2C32 ; [.254C.0020.0002] # GLAGOLITIC SMALL LETTER VEDE +1E002 ; [.254C.0020.0004] # COMBINING GLAGOLITIC LETTER VEDE +2C02 ; [.254C.0020.0008] # GLAGOLITIC CAPITAL LETTER VEDE +2C33 ; [.254D.0020.0002] # GLAGOLITIC SMALL LETTER GLAGOLI +1E003 ; [.254D.0020.0004] # COMBINING GLAGOLITIC LETTER GLAGOLI +2C03 ; [.254D.0020.0008] # GLAGOLITIC CAPITAL LETTER GLAGOLI +2C34 ; [.254E.0020.0002] # GLAGOLITIC SMALL LETTER DOBRO +1E004 ; [.254E.0020.0004] # COMBINING GLAGOLITIC LETTER DOBRO +2C04 ; [.254E.0020.0008] # GLAGOLITIC CAPITAL LETTER DOBRO +2C35 ; [.254F.0020.0002] # GLAGOLITIC SMALL LETTER YESTU +1E005 ; [.254F.0020.0004] # COMBINING GLAGOLITIC LETTER YESTU +2C05 ; [.254F.0020.0008] # GLAGOLITIC CAPITAL LETTER YESTU +2C36 ; [.2550.0020.0002] # GLAGOLITIC SMALL LETTER ZHIVETE +1E006 ; [.2550.0020.0004] # COMBINING GLAGOLITIC LETTER ZHIVETE +2C06 ; [.2550.0020.0008] # GLAGOLITIC CAPITAL LETTER ZHIVETE +2C37 ; [.2551.0020.0002] # GLAGOLITIC SMALL LETTER DZELO +2C07 ; [.2551.0020.0008] # GLAGOLITIC CAPITAL LETTER DZELO +2C38 ; [.2552.0020.0002] # GLAGOLITIC SMALL LETTER ZEMLJA +1E008 ; [.2552.0020.0004] # COMBINING GLAGOLITIC LETTER ZEMLJA +2C08 ; [.2552.0020.0008] # GLAGOLITIC CAPITAL LETTER ZEMLJA +2C39 ; [.2553.0020.0002] # GLAGOLITIC SMALL LETTER IZHE +1E009 ; [.2553.0020.0004] # COMBINING GLAGOLITIC LETTER IZHE +2C09 ; [.2553.0020.0008] # GLAGOLITIC CAPITAL LETTER IZHE +2C3A ; [.2554.0020.0002] # GLAGOLITIC SMALL LETTER INITIAL IZHE +1E00A ; [.2554.0020.0004] # COMBINING GLAGOLITIC LETTER INITIAL IZHE +2C0A ; [.2554.0020.0008] # GLAGOLITIC CAPITAL LETTER INITIAL IZHE +2C3B ; [.2555.0020.0002] # GLAGOLITIC SMALL LETTER I +1E00B ; [.2555.0020.0004] # COMBINING GLAGOLITIC LETTER I +2C0B ; [.2555.0020.0008] # GLAGOLITIC CAPITAL LETTER I +2C3C ; [.2556.0020.0002] # GLAGOLITIC SMALL LETTER DJERVI +1E00C ; [.2556.0020.0004] # COMBINING GLAGOLITIC LETTER DJERVI +2C0C ; [.2556.0020.0008] # GLAGOLITIC CAPITAL LETTER DJERVI +2C3D ; [.2557.0020.0002] # GLAGOLITIC SMALL LETTER KAKO +1E00D ; [.2557.0020.0004] # COMBINING GLAGOLITIC LETTER KAKO +2C0D ; [.2557.0020.0008] # GLAGOLITIC CAPITAL LETTER KAKO +2C3E ; [.2558.0020.0002] # GLAGOLITIC SMALL LETTER LJUDIJE +1E00E ; [.2558.0020.0004] # COMBINING GLAGOLITIC LETTER LJUDIJE +2C0E ; [.2558.0020.0008] # GLAGOLITIC CAPITAL LETTER LJUDIJE +2C3F ; [.2559.0020.0002] # GLAGOLITIC SMALL LETTER MYSLITE +1E00F ; [.2559.0020.0004] # COMBINING GLAGOLITIC LETTER MYSLITE +2C0F ; [.2559.0020.0008] # GLAGOLITIC CAPITAL LETTER MYSLITE +2C40 ; [.255A.0020.0002] # GLAGOLITIC SMALL LETTER NASHI +1E010 ; [.255A.0020.0004] # COMBINING GLAGOLITIC LETTER NASHI +2C10 ; [.255A.0020.0008] # GLAGOLITIC CAPITAL LETTER NASHI +2C41 ; [.255B.0020.0002] # GLAGOLITIC SMALL LETTER ONU +1E011 ; [.255B.0020.0004] # COMBINING GLAGOLITIC LETTER ONU +2C11 ; [.255B.0020.0008] # GLAGOLITIC CAPITAL LETTER ONU +2C42 ; [.255C.0020.0002] # GLAGOLITIC SMALL LETTER POKOJI +1E012 ; [.255C.0020.0004] # COMBINING GLAGOLITIC LETTER POKOJI +2C12 ; [.255C.0020.0008] # GLAGOLITIC CAPITAL LETTER POKOJI +2C43 ; [.255D.0020.0002] # GLAGOLITIC SMALL LETTER RITSI +1E013 ; [.255D.0020.0004] # COMBINING GLAGOLITIC LETTER RITSI +2C13 ; [.255D.0020.0008] # GLAGOLITIC CAPITAL LETTER RITSI +2C44 ; [.255E.0020.0002] # GLAGOLITIC SMALL LETTER SLOVO +1E014 ; [.255E.0020.0004] # COMBINING GLAGOLITIC LETTER SLOVO +2C14 ; [.255E.0020.0008] # GLAGOLITIC CAPITAL LETTER SLOVO +2C45 ; [.255F.0020.0002] # GLAGOLITIC SMALL LETTER TVRIDO +1E015 ; [.255F.0020.0004] # COMBINING GLAGOLITIC LETTER TVRIDO +2C15 ; [.255F.0020.0008] # GLAGOLITIC CAPITAL LETTER TVRIDO +2C46 ; [.2560.0020.0002] # GLAGOLITIC SMALL LETTER UKU +1E016 ; [.2560.0020.0004] # COMBINING GLAGOLITIC LETTER UKU +2C16 ; [.2560.0020.0008] # GLAGOLITIC CAPITAL LETTER UKU +2C47 ; [.2561.0020.0002] # GLAGOLITIC SMALL LETTER FRITU +1E017 ; [.2561.0020.0004] # COMBINING GLAGOLITIC LETTER FRITU +2C17 ; [.2561.0020.0008] # GLAGOLITIC CAPITAL LETTER FRITU +2C48 ; [.2562.0020.0002] # GLAGOLITIC SMALL LETTER HERU +1E018 ; [.2562.0020.0004] # COMBINING GLAGOLITIC LETTER HERU +2C18 ; [.2562.0020.0008] # GLAGOLITIC CAPITAL LETTER HERU +2C49 ; [.2563.0020.0002] # GLAGOLITIC SMALL LETTER OTU +2C19 ; [.2563.0020.0008] # GLAGOLITIC CAPITAL LETTER OTU +2C4A ; [.2564.0020.0002] # GLAGOLITIC SMALL LETTER PE +2C1A ; [.2564.0020.0008] # GLAGOLITIC CAPITAL LETTER PE +2C4B ; [.2565.0020.0002] # GLAGOLITIC SMALL LETTER SHTA +1E01B ; [.2565.0020.0004] # COMBINING GLAGOLITIC LETTER SHTA +2C1B ; [.2565.0020.0008] # GLAGOLITIC CAPITAL LETTER SHTA +2C4C ; [.2566.0020.0002] # GLAGOLITIC SMALL LETTER TSI +1E01C ; [.2566.0020.0004] # COMBINING GLAGOLITIC LETTER TSI +2C1C ; [.2566.0020.0008] # GLAGOLITIC CAPITAL LETTER TSI +2C4D ; [.2567.0020.0002] # GLAGOLITIC SMALL LETTER CHRIVI +1E01D ; [.2567.0020.0004] # COMBINING GLAGOLITIC LETTER CHRIVI +2C1D ; [.2567.0020.0008] # GLAGOLITIC CAPITAL LETTER CHRIVI +2C4E ; [.2568.0020.0002] # GLAGOLITIC SMALL LETTER SHA +1E01E ; [.2568.0020.0004] # COMBINING GLAGOLITIC LETTER SHA +2C1E ; [.2568.0020.0008] # GLAGOLITIC CAPITAL LETTER SHA +2C4F ; [.2569.0020.0002] # GLAGOLITIC SMALL LETTER YERU +1E01F ; [.2569.0020.0004] # COMBINING GLAGOLITIC LETTER YERU +2C1F ; [.2569.0020.0008] # GLAGOLITIC CAPITAL LETTER YERU +2C50 ; [.256A.0020.0002] # GLAGOLITIC SMALL LETTER YERI +1E020 ; [.256A.0020.0004] # COMBINING GLAGOLITIC LETTER YERI +2C20 ; [.256A.0020.0008] # GLAGOLITIC CAPITAL LETTER YERI +2C51 ; [.256B.0020.0002] # GLAGOLITIC SMALL LETTER YATI +1E021 ; [.256B.0020.0004] # COMBINING GLAGOLITIC LETTER YATI +2C21 ; [.256B.0020.0008] # GLAGOLITIC CAPITAL LETTER YATI +2C52 ; [.256C.0020.0002] # GLAGOLITIC SMALL LETTER SPIDERY HA +2C22 ; [.256C.0020.0008] # GLAGOLITIC CAPITAL LETTER SPIDERY HA +2C53 ; [.256D.0020.0002] # GLAGOLITIC SMALL LETTER YU +1E023 ; [.256D.0020.0004] # COMBINING GLAGOLITIC LETTER YU +2C23 ; [.256D.0020.0008] # GLAGOLITIC CAPITAL LETTER YU +2C54 ; [.256E.0020.0002] # GLAGOLITIC SMALL LETTER SMALL YUS +1E024 ; [.256E.0020.0004] # COMBINING GLAGOLITIC LETTER SMALL YUS +2C24 ; [.256E.0020.0008] # GLAGOLITIC CAPITAL LETTER SMALL YUS +2C55 ; [.256F.0020.0002] # GLAGOLITIC SMALL LETTER SMALL YUS WITH TAIL +2C25 ; [.256F.0020.0008] # GLAGOLITIC CAPITAL LETTER SMALL YUS WITH TAIL +2C56 ; [.2570.0020.0002] # GLAGOLITIC SMALL LETTER YO +1E026 ; [.2570.0020.0004] # COMBINING GLAGOLITIC LETTER YO +2C26 ; [.2570.0020.0008] # GLAGOLITIC CAPITAL LETTER YO +2C57 ; [.2571.0020.0002] # GLAGOLITIC SMALL LETTER IOTATED SMALL YUS +1E027 ; [.2571.0020.0004] # COMBINING GLAGOLITIC LETTER IOTATED SMALL YUS +2C27 ; [.2571.0020.0008] # GLAGOLITIC CAPITAL LETTER IOTATED SMALL YUS +2C58 ; [.2572.0020.0002] # GLAGOLITIC SMALL LETTER BIG YUS +1E028 ; [.2572.0020.0004] # COMBINING GLAGOLITIC LETTER BIG YUS +2C28 ; [.2572.0020.0008] # GLAGOLITIC CAPITAL LETTER BIG YUS +2C59 ; [.2573.0020.0002] # GLAGOLITIC SMALL LETTER IOTATED BIG YUS +1E029 ; [.2573.0020.0004] # COMBINING GLAGOLITIC LETTER IOTATED BIG YUS +2C29 ; [.2573.0020.0008] # GLAGOLITIC CAPITAL LETTER IOTATED BIG YUS +2C5A ; [.2574.0020.0002] # GLAGOLITIC SMALL LETTER FITA +1E02A ; [.2574.0020.0004] # COMBINING GLAGOLITIC LETTER FITA +2C2A ; [.2574.0020.0008] # GLAGOLITIC CAPITAL LETTER FITA +2C5B ; [.2575.0020.0002] # GLAGOLITIC SMALL LETTER IZHITSA +2C2B ; [.2575.0020.0008] # GLAGOLITIC CAPITAL LETTER IZHITSA +2C5C ; [.2576.0020.0002] # GLAGOLITIC SMALL LETTER SHTAPIC +2C2C ; [.2576.0020.0008] # GLAGOLITIC CAPITAL LETTER SHTAPIC +2C5D ; [.2577.0020.0002] # GLAGOLITIC SMALL LETTER TROKUTASTI A +2C2D ; [.2577.0020.0008] # GLAGOLITIC CAPITAL LETTER TROKUTASTI A +2C5E ; [.2578.0020.0002] # GLAGOLITIC SMALL LETTER LATINATE MYSLITE +2C2E ; [.2578.0020.0008] # GLAGOLITIC CAPITAL LETTER LATINATE MYSLITE +10350 ; [.2579.0020.0002] # OLD PERMIC LETTER AN +10376 ; [.2579.0020.0004] # COMBINING OLD PERMIC LETTER AN +10351 ; [.257A.0020.0002] # OLD PERMIC LETTER BUR +10352 ; [.257B.0020.0002] # OLD PERMIC LETTER GAI +10353 ; [.257C.0020.0002] # OLD PERMIC LETTER DOI +10377 ; [.257C.0020.0004] # COMBINING OLD PERMIC LETTER DOI +10354 ; [.257D.0020.0002] # OLD PERMIC LETTER E +10355 ; [.257E.0020.0002] # OLD PERMIC LETTER ZHOI +10356 ; [.257F.0020.0002] # OLD PERMIC LETTER DZHOI +10357 ; [.2580.0020.0002] # OLD PERMIC LETTER ZATA +10378 ; [.2580.0020.0004] # COMBINING OLD PERMIC LETTER ZATA +10358 ; [.2581.0020.0002] # OLD PERMIC LETTER DZITA +10359 ; [.2582.0020.0002] # OLD PERMIC LETTER I +1035A ; [.2583.0020.0002] # OLD PERMIC LETTER KOKE +1035B ; [.2584.0020.0002] # OLD PERMIC LETTER LEI +1035C ; [.2585.0020.0002] # OLD PERMIC LETTER MENOE +1035D ; [.2586.0020.0002] # OLD PERMIC LETTER NENOE +10379 ; [.2586.0020.0004] # COMBINING OLD PERMIC LETTER NENOE +1035E ; [.2587.0020.0002] # OLD PERMIC LETTER VOOI +1035F ; [.2588.0020.0002] # OLD PERMIC LETTER PEEI +10360 ; [.2589.0020.0002] # OLD PERMIC LETTER REI +10361 ; [.258A.0020.0002] # OLD PERMIC LETTER SII +1037A ; [.258A.0020.0004] # COMBINING OLD PERMIC LETTER SII +10362 ; [.258B.0020.0002] # OLD PERMIC LETTER TAI +10363 ; [.258C.0020.0002] # OLD PERMIC LETTER U +10364 ; [.258D.0020.0002] # OLD PERMIC LETTER CHERY +10365 ; [.258E.0020.0002] # OLD PERMIC LETTER SHOOI +10366 ; [.258F.0020.0002] # OLD PERMIC LETTER SHCHOOI +10367 ; [.2590.0020.0002] # OLD PERMIC LETTER YRY +10368 ; [.2591.0020.0002] # OLD PERMIC LETTER YERU +10369 ; [.2592.0020.0002] # OLD PERMIC LETTER O +1036A ; [.2593.0020.0002] # OLD PERMIC LETTER OO +1036B ; [.2594.0020.0002] # OLD PERMIC LETTER EF +1036C ; [.2595.0020.0002] # OLD PERMIC LETTER HA +1036D ; [.2596.0020.0002] # OLD PERMIC LETTER TSIU +1036E ; [.2597.0020.0002] # OLD PERMIC LETTER VER +1036F ; [.2598.0020.0002] # OLD PERMIC LETTER YER +10370 ; [.2599.0020.0002] # OLD PERMIC LETTER YERI +10371 ; [.259A.0020.0002] # OLD PERMIC LETTER YAT +10372 ; [.259B.0020.0002] # OLD PERMIC LETTER IE +10373 ; [.259C.0020.0002] # OLD PERMIC LETTER YU +10374 ; [.259D.0020.0002] # OLD PERMIC LETTER YA +10375 ; [.259E.0020.0002] # OLD PERMIC LETTER IA +10D0 ; [.259F.0020.0002] # GEORGIAN LETTER AN +1C90 ; [.259F.0020.0008] # GEORGIAN MTAVRULI CAPITAL LETTER AN +2D00 ; [.25A0.0020.0002] # GEORGIAN SMALL LETTER AN +10A0 ; [.25A0.0020.0008] # GEORGIAN CAPITAL LETTER AN +10D1 ; [.25A1.0020.0002] # GEORGIAN LETTER BAN +1C91 ; [.25A1.0020.0008] # GEORGIAN MTAVRULI CAPITAL LETTER BAN +2D01 ; [.25A2.0020.0002] # GEORGIAN SMALL LETTER BAN +10A1 ; [.25A2.0020.0008] # GEORGIAN CAPITAL LETTER BAN +10D2 ; [.25A3.0020.0002] # GEORGIAN LETTER GAN +1C92 ; [.25A3.0020.0008] # GEORGIAN MTAVRULI CAPITAL LETTER GAN +2D02 ; [.25A4.0020.0002] # GEORGIAN SMALL LETTER GAN +10A2 ; [.25A4.0020.0008] # GEORGIAN CAPITAL LETTER GAN +10D3 ; [.25A5.0020.0002] # GEORGIAN LETTER DON +1C93 ; [.25A5.0020.0008] # GEORGIAN MTAVRULI CAPITAL LETTER DON +2D03 ; [.25A6.0020.0002] # GEORGIAN SMALL LETTER DON +10A3 ; [.25A6.0020.0008] # GEORGIAN CAPITAL LETTER DON +10D4 ; [.25A7.0020.0002] # GEORGIAN LETTER EN +1C94 ; [.25A7.0020.0008] # GEORGIAN MTAVRULI CAPITAL LETTER EN +2D04 ; [.25A8.0020.0002] # GEORGIAN SMALL LETTER EN +10A4 ; [.25A8.0020.0008] # GEORGIAN CAPITAL LETTER EN +10D5 ; [.25A9.0020.0002] # GEORGIAN LETTER VIN +1C95 ; [.25A9.0020.0008] # GEORGIAN MTAVRULI CAPITAL LETTER VIN +2D05 ; [.25AA.0020.0002] # GEORGIAN SMALL LETTER VIN +10A5 ; [.25AA.0020.0008] # GEORGIAN CAPITAL LETTER VIN +10D6 ; [.25AB.0020.0002] # GEORGIAN LETTER ZEN +1C96 ; [.25AB.0020.0008] # GEORGIAN MTAVRULI CAPITAL LETTER ZEN +2D06 ; [.25AC.0020.0002] # GEORGIAN SMALL LETTER ZEN +10A6 ; [.25AC.0020.0008] # GEORGIAN CAPITAL LETTER ZEN +10F1 ; [.25AD.0020.0002] # GEORGIAN LETTER HE +1CB1 ; [.25AD.0020.0008] # GEORGIAN MTAVRULI CAPITAL LETTER HE +2D21 ; [.25AE.0020.0002] # GEORGIAN SMALL LETTER HE +10C1 ; [.25AE.0020.0008] # GEORGIAN CAPITAL LETTER HE +10D7 ; [.25AF.0020.0002] # GEORGIAN LETTER TAN +1C97 ; [.25AF.0020.0008] # GEORGIAN MTAVRULI CAPITAL LETTER TAN +2D07 ; [.25B0.0020.0002] # GEORGIAN SMALL LETTER TAN +10A7 ; [.25B0.0020.0008] # GEORGIAN CAPITAL LETTER TAN +10D8 ; [.25B1.0020.0002] # GEORGIAN LETTER IN +1C98 ; [.25B1.0020.0008] # GEORGIAN MTAVRULI CAPITAL LETTER IN +2D08 ; [.25B2.0020.0002] # GEORGIAN SMALL LETTER IN +10A8 ; [.25B2.0020.0008] # GEORGIAN CAPITAL LETTER IN +10D9 ; [.25B3.0020.0002] # GEORGIAN LETTER KAN +1C99 ; [.25B3.0020.0008] # GEORGIAN MTAVRULI CAPITAL LETTER KAN +2D09 ; [.25B4.0020.0002] # GEORGIAN SMALL LETTER KAN +10A9 ; [.25B4.0020.0008] # GEORGIAN CAPITAL LETTER KAN +10DA ; [.25B5.0020.0002] # GEORGIAN LETTER LAS +1C9A ; [.25B5.0020.0008] # GEORGIAN MTAVRULI CAPITAL LETTER LAS +2D0A ; [.25B6.0020.0002] # GEORGIAN SMALL LETTER LAS +10AA ; [.25B6.0020.0008] # GEORGIAN CAPITAL LETTER LAS +10DB ; [.25B7.0020.0002] # GEORGIAN LETTER MAN +1C9B ; [.25B7.0020.0008] # GEORGIAN MTAVRULI CAPITAL LETTER MAN +2D0B ; [.25B8.0020.0002] # GEORGIAN SMALL LETTER MAN +10AB ; [.25B8.0020.0008] # GEORGIAN CAPITAL LETTER MAN +10DC ; [.25B9.0020.0002] # GEORGIAN LETTER NAR +1C9C ; [.25B9.0020.0008] # GEORGIAN MTAVRULI CAPITAL LETTER NAR +10FC ; [.25B9.0020.0014] # MODIFIER LETTER GEORGIAN NAR +2D0C ; [.25BA.0020.0002] # GEORGIAN SMALL LETTER NAR +10AC ; [.25BA.0020.0008] # GEORGIAN CAPITAL LETTER NAR +10F2 ; [.25BB.0020.0002] # GEORGIAN LETTER HIE +1CB2 ; [.25BB.0020.0008] # GEORGIAN MTAVRULI CAPITAL LETTER HIE +2D22 ; [.25BC.0020.0002] # GEORGIAN SMALL LETTER HIE +10C2 ; [.25BC.0020.0008] # GEORGIAN CAPITAL LETTER HIE +10DD ; [.25BD.0020.0002] # GEORGIAN LETTER ON +1C9D ; [.25BD.0020.0008] # GEORGIAN MTAVRULI CAPITAL LETTER ON +2D0D ; [.25BE.0020.0002] # GEORGIAN SMALL LETTER ON +10AD ; [.25BE.0020.0008] # GEORGIAN CAPITAL LETTER ON +10DE ; [.25BF.0020.0002] # GEORGIAN LETTER PAR +1C9E ; [.25BF.0020.0008] # GEORGIAN MTAVRULI CAPITAL LETTER PAR +2D0E ; [.25C0.0020.0002] # GEORGIAN SMALL LETTER PAR +10AE ; [.25C0.0020.0008] # GEORGIAN CAPITAL LETTER PAR +10DF ; [.25C1.0020.0002] # GEORGIAN LETTER ZHAR +1C9F ; [.25C1.0020.0008] # GEORGIAN MTAVRULI CAPITAL LETTER ZHAR +2D0F ; [.25C2.0020.0002] # GEORGIAN SMALL LETTER ZHAR +10AF ; [.25C2.0020.0008] # GEORGIAN CAPITAL LETTER ZHAR +10E0 ; [.25C3.0020.0002] # GEORGIAN LETTER RAE +1CA0 ; [.25C3.0020.0008] # GEORGIAN MTAVRULI CAPITAL LETTER RAE +2D10 ; [.25C4.0020.0002] # GEORGIAN SMALL LETTER RAE +10B0 ; [.25C4.0020.0008] # GEORGIAN CAPITAL LETTER RAE +10E1 ; [.25C5.0020.0002] # GEORGIAN LETTER SAN +1CA1 ; [.25C5.0020.0008] # GEORGIAN MTAVRULI CAPITAL LETTER SAN +2D11 ; [.25C6.0020.0002] # GEORGIAN SMALL LETTER SAN +10B1 ; [.25C6.0020.0008] # GEORGIAN CAPITAL LETTER SAN +10E2 ; [.25C7.0020.0002] # GEORGIAN LETTER TAR +1CA2 ; [.25C7.0020.0008] # GEORGIAN MTAVRULI CAPITAL LETTER TAR +2D12 ; [.25C8.0020.0002] # GEORGIAN SMALL LETTER TAR +10B2 ; [.25C8.0020.0008] # GEORGIAN CAPITAL LETTER TAR +10F3 ; [.25C9.0020.0002] # GEORGIAN LETTER WE +1CB3 ; [.25C9.0020.0008] # GEORGIAN MTAVRULI CAPITAL LETTER WE +2D23 ; [.25CA.0020.0002] # GEORGIAN SMALL LETTER WE +10C3 ; [.25CA.0020.0008] # GEORGIAN CAPITAL LETTER WE +10E3 ; [.25CB.0020.0002] # GEORGIAN LETTER UN +1CA3 ; [.25CB.0020.0008] # GEORGIAN MTAVRULI CAPITAL LETTER UN +2D13 ; [.25CC.0020.0002] # GEORGIAN SMALL LETTER UN +10B3 ; [.25CC.0020.0008] # GEORGIAN CAPITAL LETTER UN +10E4 ; [.25CD.0020.0002] # GEORGIAN LETTER PHAR +1CA4 ; [.25CD.0020.0008] # GEORGIAN MTAVRULI CAPITAL LETTER PHAR +2D14 ; [.25CE.0020.0002] # GEORGIAN SMALL LETTER PHAR +10B4 ; [.25CE.0020.0008] # GEORGIAN CAPITAL LETTER PHAR +10E5 ; [.25CF.0020.0002] # GEORGIAN LETTER KHAR +1CA5 ; [.25CF.0020.0008] # GEORGIAN MTAVRULI CAPITAL LETTER KHAR +2D15 ; [.25D0.0020.0002] # GEORGIAN SMALL LETTER KHAR +10B5 ; [.25D0.0020.0008] # GEORGIAN CAPITAL LETTER KHAR +10E6 ; [.25D1.0020.0002] # GEORGIAN LETTER GHAN +1CA6 ; [.25D1.0020.0008] # GEORGIAN MTAVRULI CAPITAL LETTER GHAN +2D16 ; [.25D2.0020.0002] # GEORGIAN SMALL LETTER GHAN +10B6 ; [.25D2.0020.0008] # GEORGIAN CAPITAL LETTER GHAN +10E7 ; [.25D3.0020.0002] # GEORGIAN LETTER QAR +1CA7 ; [.25D3.0020.0008] # GEORGIAN MTAVRULI CAPITAL LETTER QAR +2D17 ; [.25D4.0020.0002] # GEORGIAN SMALL LETTER QAR +10B7 ; [.25D4.0020.0008] # GEORGIAN CAPITAL LETTER QAR +10E8 ; [.25D5.0020.0002] # GEORGIAN LETTER SHIN +1CA8 ; [.25D5.0020.0008] # GEORGIAN MTAVRULI CAPITAL LETTER SHIN +2D18 ; [.25D6.0020.0002] # GEORGIAN SMALL LETTER SHIN +10B8 ; [.25D6.0020.0008] # GEORGIAN CAPITAL LETTER SHIN +10E9 ; [.25D7.0020.0002] # GEORGIAN LETTER CHIN +1CA9 ; [.25D7.0020.0008] # GEORGIAN MTAVRULI CAPITAL LETTER CHIN +2D19 ; [.25D8.0020.0002] # GEORGIAN SMALL LETTER CHIN +10B9 ; [.25D8.0020.0008] # GEORGIAN CAPITAL LETTER CHIN +10EA ; [.25D9.0020.0002] # GEORGIAN LETTER CAN +1CAA ; [.25D9.0020.0008] # GEORGIAN MTAVRULI CAPITAL LETTER CAN +2D1A ; [.25DA.0020.0002] # GEORGIAN SMALL LETTER CAN +10BA ; [.25DA.0020.0008] # GEORGIAN CAPITAL LETTER CAN +10EB ; [.25DB.0020.0002] # GEORGIAN LETTER JIL +1CAB ; [.25DB.0020.0008] # GEORGIAN MTAVRULI CAPITAL LETTER JIL +2D1B ; [.25DC.0020.0002] # GEORGIAN SMALL LETTER JIL +10BB ; [.25DC.0020.0008] # GEORGIAN CAPITAL LETTER JIL +10EC ; [.25DD.0020.0002] # GEORGIAN LETTER CIL +1CAC ; [.25DD.0020.0008] # GEORGIAN MTAVRULI CAPITAL LETTER CIL +2D1C ; [.25DE.0020.0002] # GEORGIAN SMALL LETTER CIL +10BC ; [.25DE.0020.0008] # GEORGIAN CAPITAL LETTER CIL +10ED ; [.25DF.0020.0002] # GEORGIAN LETTER CHAR +1CAD ; [.25DF.0020.0008] # GEORGIAN MTAVRULI CAPITAL LETTER CHAR +2D1D ; [.25E0.0020.0002] # GEORGIAN SMALL LETTER CHAR +10BD ; [.25E0.0020.0008] # GEORGIAN CAPITAL LETTER CHAR +10EE ; [.25E1.0020.0002] # GEORGIAN LETTER XAN +1CAE ; [.25E1.0020.0008] # GEORGIAN MTAVRULI CAPITAL LETTER XAN +2D1E ; [.25E2.0020.0002] # GEORGIAN SMALL LETTER XAN +10BE ; [.25E2.0020.0008] # GEORGIAN CAPITAL LETTER XAN +10F4 ; [.25E3.0020.0002] # GEORGIAN LETTER HAR +1CB4 ; [.25E3.0020.0008] # GEORGIAN MTAVRULI CAPITAL LETTER HAR +2D24 ; [.25E4.0020.0002] # GEORGIAN SMALL LETTER HAR +10C4 ; [.25E4.0020.0008] # GEORGIAN CAPITAL LETTER HAR +10EF ; [.25E5.0020.0002] # GEORGIAN LETTER JHAN +1CAF ; [.25E5.0020.0008] # GEORGIAN MTAVRULI CAPITAL LETTER JHAN +2D1F ; [.25E6.0020.0002] # GEORGIAN SMALL LETTER JHAN +10BF ; [.25E6.0020.0008] # GEORGIAN CAPITAL LETTER JHAN +10F0 ; [.25E7.0020.0002] # GEORGIAN LETTER HAE +1CB0 ; [.25E7.0020.0008] # GEORGIAN MTAVRULI CAPITAL LETTER HAE +2D20 ; [.25E8.0020.0002] # GEORGIAN SMALL LETTER HAE +10C0 ; [.25E8.0020.0008] # GEORGIAN CAPITAL LETTER HAE +10F5 ; [.25E9.0020.0002] # GEORGIAN LETTER HOE +1CB5 ; [.25E9.0020.0008] # GEORGIAN MTAVRULI CAPITAL LETTER HOE +2D25 ; [.25EA.0020.0002] # GEORGIAN SMALL LETTER HOE +10C5 ; [.25EA.0020.0008] # GEORGIAN CAPITAL LETTER HOE +10F6 ; [.25EB.0020.0002] # GEORGIAN LETTER FI +1CB6 ; [.25EB.0020.0008] # GEORGIAN MTAVRULI CAPITAL LETTER FI +10F7 ; [.25EC.0020.0002] # GEORGIAN LETTER YN +1CB7 ; [.25EC.0020.0008] # GEORGIAN MTAVRULI CAPITAL LETTER YN +2D27 ; [.25ED.0020.0002] # GEORGIAN SMALL LETTER YN +10C7 ; [.25ED.0020.0008] # GEORGIAN CAPITAL LETTER YN +10F8 ; [.25EE.0020.0002] # GEORGIAN LETTER ELIFI +1CB8 ; [.25EE.0020.0008] # GEORGIAN MTAVRULI CAPITAL LETTER ELIFI +10F9 ; [.25EF.0020.0002] # GEORGIAN LETTER TURNED GAN +1CB9 ; [.25EF.0020.0008] # GEORGIAN MTAVRULI CAPITAL LETTER TURNED GAN +10FA ; [.25F0.0020.0002] # GEORGIAN LETTER AIN +1CBA ; [.25F0.0020.0008] # GEORGIAN MTAVRULI CAPITAL LETTER AIN +10FD ; [.25F1.0020.0002] # GEORGIAN LETTER AEN +1CBD ; [.25F1.0020.0008] # GEORGIAN MTAVRULI CAPITAL LETTER AEN +2D2D ; [.25F2.0020.0002] # GEORGIAN SMALL LETTER AEN +10CD ; [.25F2.0020.0008] # GEORGIAN CAPITAL LETTER AEN +10FE ; [.25F3.0020.0002] # GEORGIAN LETTER HARD SIGN +1CBE ; [.25F3.0020.0008] # GEORGIAN MTAVRULI CAPITAL LETTER HARD SIGN +10FF ; [.25F4.0020.0002] # GEORGIAN LETTER LABIAL SIGN +1CBF ; [.25F4.0020.0008] # GEORGIAN MTAVRULI CAPITAL LETTER LABIAL SIGN +0561 ; [.25F5.0020.0002] # ARMENIAN SMALL LETTER AYB +0531 ; [.25F5.0020.0008] # ARMENIAN CAPITAL LETTER AYB +0560 ; [.25F6.0020.0002] # ARMENIAN SMALL LETTER TURNED AYB +0562 ; [.25F7.0020.0002] # ARMENIAN SMALL LETTER BEN +0532 ; [.25F7.0020.0008] # ARMENIAN CAPITAL LETTER BEN +0563 ; [.25F8.0020.0002] # ARMENIAN SMALL LETTER GIM +0533 ; [.25F8.0020.0008] # ARMENIAN CAPITAL LETTER GIM +0564 ; [.25F9.0020.0002] # ARMENIAN SMALL LETTER DA +0534 ; [.25F9.0020.0008] # ARMENIAN CAPITAL LETTER DA +0565 ; [.25FA.0020.0002] # ARMENIAN SMALL LETTER ECH +0535 ; [.25FA.0020.0008] # ARMENIAN CAPITAL LETTER ECH +0587 ; [.25FA.0020.0004][.2618.0020.0004] # ARMENIAN SMALL LIGATURE ECH YIWN +0566 ; [.25FB.0020.0002] # ARMENIAN SMALL LETTER ZA +0536 ; [.25FB.0020.0008] # ARMENIAN CAPITAL LETTER ZA +0567 ; [.25FC.0020.0002] # ARMENIAN SMALL LETTER EH +0537 ; [.25FC.0020.0008] # ARMENIAN CAPITAL LETTER EH +0568 ; [.25FD.0020.0002] # ARMENIAN SMALL LETTER ET +0538 ; [.25FD.0020.0008] # ARMENIAN CAPITAL LETTER ET +0569 ; [.25FE.0020.0002] # ARMENIAN SMALL LETTER TO +0539 ; [.25FE.0020.0008] # ARMENIAN CAPITAL LETTER TO +056A ; [.25FF.0020.0002] # ARMENIAN SMALL LETTER ZHE +053A ; [.25FF.0020.0008] # ARMENIAN CAPITAL LETTER ZHE +056B ; [.2600.0020.0002] # ARMENIAN SMALL LETTER INI +053B ; [.2600.0020.0008] # ARMENIAN CAPITAL LETTER INI +056C ; [.2601.0020.0002] # ARMENIAN SMALL LETTER LIWN +053C ; [.2601.0020.0008] # ARMENIAN CAPITAL LETTER LIWN +056D ; [.2602.0020.0002] # ARMENIAN SMALL LETTER XEH +053D ; [.2602.0020.0008] # ARMENIAN CAPITAL LETTER XEH +056E ; [.2603.0020.0002] # ARMENIAN SMALL LETTER CA +053E ; [.2603.0020.0008] # ARMENIAN CAPITAL LETTER CA +056F ; [.2604.0020.0002] # ARMENIAN SMALL LETTER KEN +053F ; [.2604.0020.0008] # ARMENIAN CAPITAL LETTER KEN +0570 ; [.2605.0020.0002] # ARMENIAN SMALL LETTER HO +0540 ; [.2605.0020.0008] # ARMENIAN CAPITAL LETTER HO +0571 ; [.2606.0020.0002] # ARMENIAN SMALL LETTER JA +0541 ; [.2606.0020.0008] # ARMENIAN CAPITAL LETTER JA +0572 ; [.2607.0020.0002] # ARMENIAN SMALL LETTER GHAD +0542 ; [.2607.0020.0008] # ARMENIAN CAPITAL LETTER GHAD +0573 ; [.2608.0020.0002] # ARMENIAN SMALL LETTER CHEH +0543 ; [.2608.0020.0008] # ARMENIAN CAPITAL LETTER CHEH +0574 ; [.2609.0020.0002] # ARMENIAN SMALL LETTER MEN +0544 ; [.2609.0020.0008] # ARMENIAN CAPITAL LETTER MEN +FB14 ; [.2609.0020.0004][.25FA.0020.0004] # ARMENIAN SMALL LIGATURE MEN ECH +FB15 ; [.2609.0020.0004][.2600.0020.0004] # ARMENIAN SMALL LIGATURE MEN INI +FB17 ; [.2609.0020.0004][.2602.0020.0004] # ARMENIAN SMALL LIGATURE MEN XEH +FB13 ; [.2609.0020.0004][.260C.0020.0004] # ARMENIAN SMALL LIGATURE MEN NOW +0575 ; [.260A.0020.0002] # ARMENIAN SMALL LETTER YI +0545 ; [.260A.0020.0008] # ARMENIAN CAPITAL LETTER YI +0588 ; [.260B.0020.0002] # ARMENIAN SMALL LETTER YI WITH STROKE +0576 ; [.260C.0020.0002] # ARMENIAN SMALL LETTER NOW +0546 ; [.260C.0020.0008] # ARMENIAN CAPITAL LETTER NOW +0577 ; [.260D.0020.0002] # ARMENIAN SMALL LETTER SHA +0547 ; [.260D.0020.0008] # ARMENIAN CAPITAL LETTER SHA +0578 ; [.260E.0020.0002] # ARMENIAN SMALL LETTER VO +0548 ; [.260E.0020.0008] # ARMENIAN CAPITAL LETTER VO +0579 ; [.260F.0020.0002] # ARMENIAN SMALL LETTER CHA +0549 ; [.260F.0020.0008] # ARMENIAN CAPITAL LETTER CHA +057A ; [.2610.0020.0002] # ARMENIAN SMALL LETTER PEH +054A ; [.2610.0020.0008] # ARMENIAN CAPITAL LETTER PEH +057B ; [.2611.0020.0002] # ARMENIAN SMALL LETTER JHEH +054B ; [.2611.0020.0008] # ARMENIAN CAPITAL LETTER JHEH +057C ; [.2612.0020.0002] # ARMENIAN SMALL LETTER RA +054C ; [.2612.0020.0008] # ARMENIAN CAPITAL LETTER RA +057D ; [.2613.0020.0002] # ARMENIAN SMALL LETTER SEH +054D ; [.2613.0020.0008] # ARMENIAN CAPITAL LETTER SEH +057E ; [.2614.0020.0002] # ARMENIAN SMALL LETTER VEW +054E ; [.2614.0020.0008] # ARMENIAN CAPITAL LETTER VEW +FB16 ; [.2614.0020.0004][.260C.0020.0004] # ARMENIAN SMALL LIGATURE VEW NOW +057F ; [.2615.0020.0002] # ARMENIAN SMALL LETTER TIWN +054F ; [.2615.0020.0008] # ARMENIAN CAPITAL LETTER TIWN +0580 ; [.2616.0020.0002] # ARMENIAN SMALL LETTER REH +0550 ; [.2616.0020.0008] # ARMENIAN CAPITAL LETTER REH +0581 ; [.2617.0020.0002] # ARMENIAN SMALL LETTER CO +0551 ; [.2617.0020.0008] # ARMENIAN CAPITAL LETTER CO +0582 ; [.2618.0020.0002] # ARMENIAN SMALL LETTER YIWN +0552 ; [.2618.0020.0008] # ARMENIAN CAPITAL LETTER YIWN +0583 ; [.2619.0020.0002] # ARMENIAN SMALL LETTER PIWR +0553 ; [.2619.0020.0008] # ARMENIAN CAPITAL LETTER PIWR +0584 ; [.261A.0020.0002] # ARMENIAN SMALL LETTER KEH +0554 ; [.261A.0020.0008] # ARMENIAN CAPITAL LETTER KEH +0585 ; [.261B.0020.0002] # ARMENIAN SMALL LETTER OH +0555 ; [.261B.0020.0008] # ARMENIAN CAPITAL LETTER OH +0586 ; [.261C.0020.0002] # ARMENIAN SMALL LETTER FEH +0556 ; [.261C.0020.0008] # ARMENIAN CAPITAL LETTER FEH +0559 ; [.261D.0020.0002] # ARMENIAN MODIFIER LETTER LEFT HALF RING +05D0 ; [.261E.0020.0002] # HEBREW LETTER ALEF +2135 ; [.261E.0020.0004] # ALEF SYMBOL +FB21 ; [.261E.0020.0005] # HEBREW LETTER WIDE ALEF +FB2E ; [.261E.0020.0002][.0000.0059.0002] # HEBREW LETTER ALEF WITH PATAH +FB2F ; [.261E.0020.0002][.0000.005A.0002] # HEBREW LETTER ALEF WITH QAMATS +FB30 ; [.261E.0020.0002][.0000.005F.0002] # HEBREW LETTER ALEF WITH MAPIQ +FB4F ; [.261E.0020.0004][.2629.0020.0004] # HEBREW LIGATURE ALEF LAMED +05D1 ; [.261F.0020.0002] # HEBREW LETTER BET +2136 ; [.261F.0020.0004] # BET SYMBOL +FB31 ; [.261F.0020.0002][.0000.005F.0002] # HEBREW LETTER BET WITH DAGESH +FB4C ; [.261F.0020.0002][.0000.0060.0002] # HEBREW LETTER BET WITH RAFE +05D2 ; [.2620.0020.0002] # HEBREW LETTER GIMEL +2137 ; [.2620.0020.0004] # GIMEL SYMBOL +FB32 ; [.2620.0020.0002][.0000.005F.0002] # HEBREW LETTER GIMEL WITH DAGESH +05D3 ; [.2621.0020.0002] # HEBREW LETTER DALET +2138 ; [.2621.0020.0004] # DALET SYMBOL +FB22 ; [.2621.0020.0005] # HEBREW LETTER WIDE DALET +FB33 ; [.2621.0020.0002][.0000.005F.0002] # HEBREW LETTER DALET WITH DAGESH +05D4 ; [.2622.0020.0002] # HEBREW LETTER HE +FB23 ; [.2622.0020.0005] # HEBREW LETTER WIDE HE +FB34 ; [.2622.0020.0002][.0000.005F.0002] # HEBREW LETTER HE WITH MAPIQ +05D5 ; [.2623.0020.0002] # HEBREW LETTER VAV +FB4B ; [.2623.0020.0002][.0000.005B.0002] # HEBREW LETTER VAV WITH HOLAM +FB35 ; [.2623.0020.0002][.0000.005F.0002] # HEBREW LETTER VAV WITH DAGESH +05F0 ; [.2623.0020.0004][.2623.0020.0004] # HEBREW LIGATURE YIDDISH DOUBLE VAV +05F1 ; [.2623.0020.0004][.2627.0020.0004] # HEBREW LIGATURE YIDDISH VAV YOD +05D6 ; [.2624.0020.0002] # HEBREW LETTER ZAYIN +FB36 ; [.2624.0020.0002][.0000.005F.0002] # HEBREW LETTER ZAYIN WITH DAGESH +05D7 ; [.2625.0020.0002] # HEBREW LETTER HET +05D8 ; [.2626.0020.0002] # HEBREW LETTER TET +FB38 ; [.2626.0020.0002][.0000.005F.0002] # HEBREW LETTER TET WITH DAGESH +05D9 ; [.2627.0020.0002] # HEBREW LETTER YOD +FB1D ; [.2627.0020.0002][.0000.0056.0002] # HEBREW LETTER YOD WITH HIRIQ +FB39 ; [.2627.0020.0002][.0000.005F.0002] # HEBREW LETTER YOD WITH DAGESH +05EF ; [.2627.0020.0004][.2622.0020.0004][.2623.0020.0004][.2622.0020.0004] # HEBREW YOD TRIANGLE +05F2 ; [.2627.0020.0004][.2627.0020.0004] # HEBREW LIGATURE YIDDISH DOUBLE YOD +FB1F ; [.2627.0020.0004][.2627.0020.0004][.0000.0059.0002] # HEBREW LIGATURE YIDDISH YOD YOD PATAH +05DB ; [.2628.0020.0002] # HEBREW LETTER KAF +FB24 ; [.2628.0020.0005] # HEBREW LETTER WIDE KAF +05DA ; [.2628.0020.0019] # HEBREW LETTER FINAL KAF +FB3B ; [.2628.0020.0002][.0000.005F.0002] # HEBREW LETTER KAF WITH DAGESH +FB3A ; [.2628.0020.0019][.0000.005F.0002] # HEBREW LETTER FINAL KAF WITH DAGESH +FB4D ; [.2628.0020.0002][.0000.0060.0002] # HEBREW LETTER KAF WITH RAFE +05DC ; [.2629.0020.0002] # HEBREW LETTER LAMED +FB25 ; [.2629.0020.0005] # HEBREW LETTER WIDE LAMED +FB3C ; [.2629.0020.0002][.0000.005F.0002] # HEBREW LETTER LAMED WITH DAGESH +05DE ; [.262A.0020.0002] # HEBREW LETTER MEM +FB26 ; [.262A.0020.0005] # HEBREW LETTER WIDE FINAL MEM +05DD ; [.262A.0020.0019] # HEBREW LETTER FINAL MEM +FB3E ; [.262A.0020.0002][.0000.005F.0002] # HEBREW LETTER MEM WITH DAGESH +05E0 ; [.262B.0020.0002] # HEBREW LETTER NUN +05DF ; [.262B.0020.0019] # HEBREW LETTER FINAL NUN +FB40 ; [.262B.0020.0002][.0000.005F.0002] # HEBREW LETTER NUN WITH DAGESH +05E1 ; [.262C.0020.0002] # HEBREW LETTER SAMEKH +FB41 ; [.262C.0020.0002][.0000.005F.0002] # HEBREW LETTER SAMEKH WITH DAGESH +05E2 ; [.262D.0020.0002] # HEBREW LETTER AYIN +FB20 ; [.262D.0020.0005] # HEBREW LETTER ALTERNATIVE AYIN +05E4 ; [.262E.0020.0002] # HEBREW LETTER PE +05E3 ; [.262E.0020.0019] # HEBREW LETTER FINAL PE +FB44 ; [.262E.0020.0002][.0000.005F.0002] # HEBREW LETTER PE WITH DAGESH +FB43 ; [.262E.0020.0019][.0000.005F.0002] # HEBREW LETTER FINAL PE WITH DAGESH +FB4E ; [.262E.0020.0002][.0000.0060.0002] # HEBREW LETTER PE WITH RAFE +05E6 ; [.262F.0020.0002] # HEBREW LETTER TSADI +05E5 ; [.262F.0020.0019] # HEBREW LETTER FINAL TSADI +FB46 ; [.262F.0020.0002][.0000.005F.0002] # HEBREW LETTER TSADI WITH DAGESH +05E7 ; [.2630.0020.0002] # HEBREW LETTER QOF +FB47 ; [.2630.0020.0002][.0000.005F.0002] # HEBREW LETTER QOF WITH DAGESH +05E8 ; [.2631.0020.0002] # HEBREW LETTER RESH +FB27 ; [.2631.0020.0005] # HEBREW LETTER WIDE RESH +FB48 ; [.2631.0020.0002][.0000.005F.0002] # HEBREW LETTER RESH WITH DAGESH +05E9 ; [.2632.0020.0002] # HEBREW LETTER SHIN +FB2B ; [.2632.0020.0002][.0000.005D.0002] # HEBREW LETTER SHIN WITH SIN DOT +FB2A ; [.2632.0020.0002][.0000.005E.0002] # HEBREW LETTER SHIN WITH SHIN DOT +FB49 ; [.2632.0020.0002][.0000.005F.0002] # HEBREW LETTER SHIN WITH DAGESH +FB2D ; [.2632.0020.0002][.0000.005F.0002][.0000.005D.0002] # HEBREW LETTER SHIN WITH DAGESH AND SIN DOT +FB2C ; [.2632.0020.0002][.0000.005F.0002][.0000.005E.0002] # HEBREW LETTER SHIN WITH DAGESH AND SHIN DOT +05EA ; [.2633.0020.0002] # HEBREW LETTER TAV +FB28 ; [.2633.0020.0005] # HEBREW LETTER WIDE TAV +FB4A ; [.2633.0020.0002][.0000.005F.0002] # HEBREW LETTER TAV WITH DAGESH +10900 ; [.2634.0020.0002] # PHOENICIAN LETTER ALF +10901 ; [.2635.0020.0002] # PHOENICIAN LETTER BET +10902 ; [.2636.0020.0002] # PHOENICIAN LETTER GAML +10903 ; [.2637.0020.0002] # PHOENICIAN LETTER DELT +10904 ; [.2638.0020.0002] # PHOENICIAN LETTER HE +10905 ; [.2639.0020.0002] # PHOENICIAN LETTER WAU +10906 ; [.263A.0020.0002] # PHOENICIAN LETTER ZAI +10907 ; [.263B.0020.0002] # PHOENICIAN LETTER HET +10908 ; [.263C.0020.0002] # PHOENICIAN LETTER TET +10909 ; [.263D.0020.0002] # PHOENICIAN LETTER YOD +1090A ; [.263E.0020.0002] # PHOENICIAN LETTER KAF +1090B ; [.263F.0020.0002] # PHOENICIAN LETTER LAMD +1090C ; [.2640.0020.0002] # PHOENICIAN LETTER MEM +1090D ; [.2641.0020.0002] # PHOENICIAN LETTER NUN +1090E ; [.2642.0020.0002] # PHOENICIAN LETTER SEMK +1090F ; [.2643.0020.0002] # PHOENICIAN LETTER AIN +10910 ; [.2644.0020.0002] # PHOENICIAN LETTER PE +10911 ; [.2645.0020.0002] # PHOENICIAN LETTER SADE +10912 ; [.2646.0020.0002] # PHOENICIAN LETTER QOF +10913 ; [.2647.0020.0002] # PHOENICIAN LETTER ROSH +10914 ; [.2648.0020.0002] # PHOENICIAN LETTER SHIN +10915 ; [.2649.0020.0002] # PHOENICIAN LETTER TAU +0800 ; [.264A.0020.0002] # SAMARITAN LETTER ALAF +0801 ; [.264B.0020.0002] # SAMARITAN LETTER BIT +0802 ; [.264C.0020.0002] # SAMARITAN LETTER GAMAN +0803 ; [.264D.0020.0002] # SAMARITAN LETTER DALAT +0804 ; [.264E.0020.0002] # SAMARITAN LETTER IY +0805 ; [.264F.0020.0002] # SAMARITAN LETTER BAA +0806 ; [.2650.0020.0002] # SAMARITAN LETTER ZEN +0807 ; [.2651.0020.0002] # SAMARITAN LETTER IT +0808 ; [.2652.0020.0002] # SAMARITAN LETTER TIT +0809 ; [.2653.0020.0002] # SAMARITAN LETTER YUT +080A ; [.2654.0020.0002] # SAMARITAN LETTER KAAF +080B ; [.2655.0020.0002] # SAMARITAN LETTER LABAT +080C ; [.2656.0020.0002] # SAMARITAN LETTER MIM +080D ; [.2657.0020.0002] # SAMARITAN LETTER NUN +080E ; [.2658.0020.0002] # SAMARITAN LETTER SINGAAT +080F ; [.2659.0020.0002] # SAMARITAN LETTER IN +0810 ; [.265A.0020.0002] # SAMARITAN LETTER FI +0811 ; [.265B.0020.0002] # SAMARITAN LETTER TSAADIY +0812 ; [.265C.0020.0002] # SAMARITAN LETTER QUF +0813 ; [.265D.0020.0002] # SAMARITAN LETTER RISH +0814 ; [.265E.0020.0002] # SAMARITAN LETTER SHAN +0815 ; [.265F.0020.0002] # SAMARITAN LETTER TAAF +0816 ; [.2660.0020.0002] # SAMARITAN MARK IN +0817 ; [.2661.0020.0002] # SAMARITAN MARK IN-ALAF +081A ; [.2662.0020.0002] # SAMARITAN MODIFIER LETTER EPENTHETIC YUT +081B ; [.2663.0020.0002] # SAMARITAN MARK EPENTHETIC YUT +0621 ; [.2664.0020.0002] # ARABIC LETTER HAMZA +0674 ; [.2664.0020.0004] # ARABIC LETTER HIGH HAMZA +FE80 ; [.2664.0020.001A] # ARABIC LETTER HAMZA ISOLATED FORM +06FD ; [.2664.0020.0004][.0000.0119.0004] # ARABIC SIGN SINDHI AMPERSAND +0622 ; [.2665.0020.0002] # ARABIC LETTER ALEF WITH MADDA ABOVE +0627 0653 ; [.2665.0020.0002] # ARABIC LETTER ALEF WITH MADDA ABOVE +FE82 ; [.2665.0020.0019] # ARABIC LETTER ALEF WITH MADDA ABOVE FINAL FORM +FE81 ; [.2665.0020.001A] # ARABIC LETTER ALEF WITH MADDA ABOVE ISOLATED FORM +0623 ; [.2666.0020.0002] # ARABIC LETTER ALEF WITH HAMZA ABOVE +0627 0654 ; [.2666.0020.0002] # ARABIC LETTER ALEF WITH HAMZA ABOVE +FE84 ; [.2666.0020.0019] # ARABIC LETTER ALEF WITH HAMZA ABOVE FINAL FORM +FE83 ; [.2666.0020.001A] # ARABIC LETTER ALEF WITH HAMZA ABOVE ISOLATED FORM +0672 ; [.2667.0020.0002] # ARABIC LETTER ALEF WITH WAVY HAMZA ABOVE +0671 ; [.2668.0020.0002] # ARABIC LETTER ALEF WASLA +FB51 ; [.2668.0020.0019] # ARABIC LETTER ALEF WASLA FINAL FORM +FB50 ; [.2668.0020.001A] # ARABIC LETTER ALEF WASLA ISOLATED FORM +0624 ; [.2669.0020.0002] # ARABIC LETTER WAW WITH HAMZA ABOVE +0648 0654 ; [.2669.0020.0002] # ARABIC LETTER WAW WITH HAMZA ABOVE +FE86 ; [.2669.0020.0019] # ARABIC LETTER WAW WITH HAMZA ABOVE FINAL FORM +FE85 ; [.2669.0020.001A] # ARABIC LETTER WAW WITH HAMZA ABOVE ISOLATED FORM +0625 ; [.266A.0020.0002] # ARABIC LETTER ALEF WITH HAMZA BELOW +0627 0655 ; [.266A.0020.0002] # ARABIC LETTER ALEF WITH HAMZA BELOW +FE88 ; [.266A.0020.0019] # ARABIC LETTER ALEF WITH HAMZA BELOW FINAL FORM +FE87 ; [.266A.0020.001A] # ARABIC LETTER ALEF WITH HAMZA BELOW ISOLATED FORM +0673 ; [.266B.0020.0002] # ARABIC LETTER ALEF WITH WAVY HAMZA BELOW +0773 ; [.266C.0020.0002] # ARABIC LETTER ALEF WITH EXTENDED ARABIC-INDIC DIGIT TWO ABOVE +0774 ; [.266D.0020.0002] # ARABIC LETTER ALEF WITH EXTENDED ARABIC-INDIC DIGIT THREE ABOVE +0626 ; [.266E.0020.0002] # ARABIC LETTER YEH WITH HAMZA ABOVE +064A 0654 ; [.266E.0020.0002] # ARABIC LETTER YEH WITH HAMZA ABOVE +FE8B ; [.266E.0020.0017] # ARABIC LETTER YEH WITH HAMZA ABOVE INITIAL FORM +FE8C ; [.266E.0020.0018] # ARABIC LETTER YEH WITH HAMZA ABOVE MEDIAL FORM +FE8A ; [.266E.0020.0019] # ARABIC LETTER YEH WITH HAMZA ABOVE FINAL FORM +FE89 ; [.266E.0020.001A] # ARABIC LETTER YEH WITH HAMZA ABOVE ISOLATED FORM +FBEB ; [.266E.0020.0019][.2672.0020.0019] # ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH ALEF FINAL FORM +FBEA ; [.266E.0020.001A][.2672.0020.001A] # ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH ALEF ISOLATED FORM +FC97 ; [.266E.0020.0017][.268F.0020.0017] # ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH JEEM INITIAL FORM +FC00 ; [.266E.0020.001A][.268F.0020.001A] # ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH JEEM ISOLATED FORM +FC98 ; [.266E.0020.0017][.2699.0020.0017] # ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH HAH INITIAL FORM +FC01 ; [.266E.0020.001A][.2699.0020.001A] # ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH HAH ISOLATED FORM +FC99 ; [.266E.0020.0017][.269A.0020.0017] # ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH KHAH INITIAL FORM +FC64 ; [.266E.0020.0019][.26B3.0020.0019] # ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH REH FINAL FORM +FC65 ; [.266E.0020.0019][.26B4.0020.0019] # ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH ZAIN FINAL FORM +FC9A ; [.266E.0020.0017][.2714.0020.0017] # ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH MEEM INITIAL FORM +FCDF ; [.266E.0020.0018][.2714.0020.0018] # ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH MEEM MEDIAL FORM +FC66 ; [.266E.0020.0019][.2714.0020.0019] # ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH MEEM FINAL FORM +FC02 ; [.266E.0020.001A][.2714.0020.001A] # ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH MEEM ISOLATED FORM +FC67 ; [.266E.0020.0019][.2718.0020.0019] # ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH NOON FINAL FORM +FC9B ; [.266E.0020.0017][.2722.0020.0017] # ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH HEH INITIAL FORM +FCE0 ; [.266E.0020.0018][.2722.0020.0018] # ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH HEH MEDIAL FORM +FBED ; [.266E.0020.0019][.2727.0020.0019] # ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH AE FINAL FORM +FBEC ; [.266E.0020.001A][.2727.0020.001A] # ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH AE ISOLATED FORM +FBEF ; [.266E.0020.0019][.2728.0020.0019] # ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH WAW FINAL FORM +FBEE ; [.266E.0020.001A][.2728.0020.001A] # ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH WAW ISOLATED FORM +FBF3 ; [.266E.0020.0019][.272B.0020.0019] # ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH OE FINAL FORM +FBF2 ; [.266E.0020.001A][.272B.0020.001A] # ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH OE ISOLATED FORM +FBF1 ; [.266E.0020.0019][.272C.0020.0019] # ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH U FINAL FORM +FBF0 ; [.266E.0020.001A][.272C.0020.001A] # ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH U ISOLATED FORM +FBF5 ; [.266E.0020.0019][.272D.0020.0019] # ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH YU FINAL FORM +FBF4 ; [.266E.0020.001A][.272D.0020.001A] # ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH YU ISOLATED FORM +FBFB ; [.266E.0020.0017][.2736.0020.0017] # ARABIC LIGATURE UIGHUR KIRGHIZ YEH WITH HAMZA ABOVE WITH ALEF MAKSURA INITIAL FORM +FBFA ; [.266E.0020.0019][.2736.0020.0019] # ARABIC LIGATURE UIGHUR KIRGHIZ YEH WITH HAMZA ABOVE WITH ALEF MAKSURA FINAL FORM +FC68 ; [.266E.0020.0019][.2736.0020.0019] # ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH ALEF MAKSURA FINAL FORM +FBF9 ; [.266E.0020.001A][.2736.0020.001A] # ARABIC LIGATURE UIGHUR KIRGHIZ YEH WITH HAMZA ABOVE WITH ALEF MAKSURA ISOLATED FORM +FC03 ; [.266E.0020.001A][.2736.0020.001A] # ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH ALEF MAKSURA ISOLATED FORM +FC69 ; [.266E.0020.0019][.2737.0020.0019] # ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH YEH FINAL FORM +FC04 ; [.266E.0020.001A][.2737.0020.001A] # ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH YEH ISOLATED FORM +FBF8 ; [.266E.0020.0017][.273B.0020.0017] # ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH E INITIAL FORM +FBF7 ; [.266E.0020.0019][.273B.0020.0019] # ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH E FINAL FORM +FBF6 ; [.266E.0020.001A][.273B.0020.001A] # ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH E ISOLATED FORM +08A8 ; [.266F.0020.0002] # ARABIC LETTER YEH WITH TWO DOTS BELOW AND HAMZA ABOVE +08A9 ; [.2670.0020.0002] # ARABIC LETTER YEH WITH TWO DOTS BELOW AND DOT ABOVE +08AC ; [.2671.0020.0002] # ARABIC LETTER ROHINGYA YEH +0627 ; [.2672.0020.0002] # ARABIC LETTER ALEF +08AD ; [.2672.0020.0004] # ARABIC LETTER LOW ALEF +1EE00 ; [.2672.0020.0005] # ARABIC MATHEMATICAL ALEF +1EE80 ; [.2672.0020.0005] # ARABIC MATHEMATICAL LOOPED ALEF +FE8E ; [.2672.0020.0019] # ARABIC LETTER ALEF FINAL FORM +FE8D ; [.2672.0020.001A] # ARABIC LETTER ALEF ISOLATED FORM +FD3C ; [.2672.0020.0019][.0000.006D.0019] # ARABIC LIGATURE ALEF WITH FATHATAN FINAL FORM +FD3D ; [.2672.0020.001A][.0000.006D.001A] # ARABIC LIGATURE ALEF WITH FATHATAN ISOLATED FORM +0675 ; [.2672.0020.0004][.2664.0020.0004] # ARABIC LETTER HIGH HAMZA ALEF +FDF3 ; [.2672.0020.001A][.26F6.0020.001A][.2674.0020.001A][.26B3.0020.001A] # ARABIC LIGATURE AKBAR ISOLATED FORM +FDF2 ; [.2672.0020.001A][.270C.0020.001A][.270C.0020.001A][.2722.0020.001A] # ARABIC LIGATURE ALLAH ISOLATED FORM +066E ; [.2673.0020.0002] # ARABIC LETTER DOTLESS BEH +1EE1C ; [.2673.0020.0005] # ARABIC MATHEMATICAL DOTLESS BEH +1EE7C ; [.2673.0020.0005] # ARABIC MATHEMATICAL STRETCHED DOTLESS BEH +0628 ; [.2674.0020.0002] # ARABIC LETTER BEH +1EE01 ; [.2674.0020.0005] # ARABIC MATHEMATICAL BEH +1EE21 ; [.2674.0020.0005] # ARABIC MATHEMATICAL INITIAL BEH +1EE61 ; [.2674.0020.0005] # ARABIC MATHEMATICAL STRETCHED BEH +1EE81 ; [.2674.0020.0005] # ARABIC MATHEMATICAL LOOPED BEH +1EEA1 ; [.2674.0020.0005] # ARABIC MATHEMATICAL DOUBLE-STRUCK BEH +FE91 ; [.2674.0020.0017] # ARABIC LETTER BEH INITIAL FORM +FE92 ; [.2674.0020.0018] # ARABIC LETTER BEH MEDIAL FORM +FE90 ; [.2674.0020.0019] # ARABIC LETTER BEH FINAL FORM +FE8F ; [.2674.0020.001A] # ARABIC LETTER BEH ISOLATED FORM +FC9C ; [.2674.0020.0017][.268F.0020.0017] # ARABIC LIGATURE BEH WITH JEEM INITIAL FORM +FC05 ; [.2674.0020.001A][.268F.0020.001A] # ARABIC LIGATURE BEH WITH JEEM ISOLATED FORM +FC9D ; [.2674.0020.0017][.2699.0020.0017] # ARABIC LIGATURE BEH WITH HAH INITIAL FORM +FC06 ; [.2674.0020.001A][.2699.0020.001A] # ARABIC LIGATURE BEH WITH HAH ISOLATED FORM +FDC2 ; [.2674.0020.0019][.2699.0020.0019][.2737.0020.0019] # ARABIC LIGATURE BEH WITH HAH WITH YEH FINAL FORM +FC9E ; [.2674.0020.0017][.269A.0020.0017] # ARABIC LIGATURE BEH WITH KHAH INITIAL FORM +FC07 ; [.2674.0020.001A][.269A.0020.001A] # ARABIC LIGATURE BEH WITH KHAH ISOLATED FORM +FD9E ; [.2674.0020.0019][.269A.0020.0019][.2737.0020.0019] # ARABIC LIGATURE BEH WITH KHAH WITH YEH FINAL FORM +FC6A ; [.2674.0020.0019][.26B3.0020.0019] # ARABIC LIGATURE BEH WITH REH FINAL FORM +FC6B ; [.2674.0020.0019][.26B4.0020.0019] # ARABIC LIGATURE BEH WITH ZAIN FINAL FORM +FC9F ; [.2674.0020.0017][.2714.0020.0017] # ARABIC LIGATURE BEH WITH MEEM INITIAL FORM +FCE1 ; [.2674.0020.0018][.2714.0020.0018] # ARABIC LIGATURE BEH WITH MEEM MEDIAL FORM +FC6C ; [.2674.0020.0019][.2714.0020.0019] # ARABIC LIGATURE BEH WITH MEEM FINAL FORM +FC08 ; [.2674.0020.001A][.2714.0020.001A] # ARABIC LIGATURE BEH WITH MEEM ISOLATED FORM +FC6D ; [.2674.0020.0019][.2718.0020.0019] # ARABIC LIGATURE BEH WITH NOON FINAL FORM +FCA0 ; [.2674.0020.0017][.2722.0020.0017] # ARABIC LIGATURE BEH WITH HEH INITIAL FORM +FCE2 ; [.2674.0020.0018][.2722.0020.0018] # ARABIC LIGATURE BEH WITH HEH MEDIAL FORM +FC6E ; [.2674.0020.0019][.2736.0020.0019] # ARABIC LIGATURE BEH WITH ALEF MAKSURA FINAL FORM +FC09 ; [.2674.0020.001A][.2736.0020.001A] # ARABIC LIGATURE BEH WITH ALEF MAKSURA ISOLATED FORM +FC6F ; [.2674.0020.0019][.2737.0020.0019] # ARABIC LIGATURE BEH WITH YEH FINAL FORM +FC0A ; [.2674.0020.001A][.2737.0020.001A] # ARABIC LIGATURE BEH WITH YEH ISOLATED FORM +067B ; [.2675.0020.0002] # ARABIC LETTER BEEH +FB54 ; [.2675.0020.0017] # ARABIC LETTER BEEH INITIAL FORM +FB55 ; [.2675.0020.0018] # ARABIC LETTER BEEH MEDIAL FORM +FB53 ; [.2675.0020.0019] # ARABIC LETTER BEEH FINAL FORM +FB52 ; [.2675.0020.001A] # ARABIC LETTER BEEH ISOLATED FORM +067E ; [.2676.0020.0002] # ARABIC LETTER PEH +FB58 ; [.2676.0020.0017] # ARABIC LETTER PEH INITIAL FORM +FB59 ; [.2676.0020.0018] # ARABIC LETTER PEH MEDIAL FORM +FB57 ; [.2676.0020.0019] # ARABIC LETTER PEH FINAL FORM +FB56 ; [.2676.0020.001A] # ARABIC LETTER PEH ISOLATED FORM +0680 ; [.2677.0020.0002] # ARABIC LETTER BEHEH +FB5C ; [.2677.0020.0017] # ARABIC LETTER BEHEH INITIAL FORM +FB5D ; [.2677.0020.0018] # ARABIC LETTER BEHEH MEDIAL FORM +FB5B ; [.2677.0020.0019] # ARABIC LETTER BEHEH FINAL FORM +FB5A ; [.2677.0020.001A] # ARABIC LETTER BEHEH ISOLATED FORM +0750 ; [.2678.0020.0002] # ARABIC LETTER BEH WITH THREE DOTS HORIZONTALLY BELOW +0751 ; [.2679.0020.0002] # ARABIC LETTER BEH WITH DOT BELOW AND THREE DOTS ABOVE +0752 ; [.267A.0020.0002] # ARABIC LETTER BEH WITH THREE DOTS POINTING UPWARDS BELOW +0753 ; [.267B.0020.0002] # ARABIC LETTER BEH WITH THREE DOTS POINTING UPWARDS BELOW AND TWO DOTS ABOVE +0754 ; [.267C.0020.0002] # ARABIC LETTER BEH WITH TWO DOTS BELOW AND DOT ABOVE +0755 ; [.267D.0020.0002] # ARABIC LETTER BEH WITH INVERTED SMALL V BELOW +08A0 ; [.267E.0020.0002] # ARABIC LETTER BEH WITH SMALL V BELOW +0756 ; [.267F.0020.0002] # ARABIC LETTER BEH WITH SMALL V +08BE ; [.2680.0020.0002] # ARABIC LETTER PEH WITH SMALL V +08A1 ; [.2681.0020.0002] # ARABIC LETTER BEH WITH HAMZA ABOVE +08B6 ; [.2682.0020.0002] # ARABIC LETTER BEH WITH SMALL MEEM ABOVE +08B7 ; [.2683.0020.0002] # ARABIC LETTER PEH WITH SMALL MEEM ABOVE +0629 ; [.2684.0020.0002] # ARABIC LETTER TEH MARBUTA +FE94 ; [.2684.0020.0019] # ARABIC LETTER TEH MARBUTA FINAL FORM +FE93 ; [.2684.0020.001A] # ARABIC LETTER TEH MARBUTA ISOLATED FORM +062A ; [.2685.0020.0002] # ARABIC LETTER TEH +1EE15 ; [.2685.0020.0005] # ARABIC MATHEMATICAL TEH +1EE35 ; [.2685.0020.0005] # ARABIC MATHEMATICAL INITIAL TEH +1EE75 ; [.2685.0020.0005] # ARABIC MATHEMATICAL STRETCHED TEH +1EE95 ; [.2685.0020.0005] # ARABIC MATHEMATICAL LOOPED TEH +1EEB5 ; [.2685.0020.0005] # ARABIC MATHEMATICAL DOUBLE-STRUCK TEH +FE97 ; [.2685.0020.0017] # ARABIC LETTER TEH INITIAL FORM +FE98 ; [.2685.0020.0018] # ARABIC LETTER TEH MEDIAL FORM +FE96 ; [.2685.0020.0019] # ARABIC LETTER TEH FINAL FORM +FE95 ; [.2685.0020.001A] # ARABIC LETTER TEH ISOLATED FORM +FCA1 ; [.2685.0020.0017][.268F.0020.0017] # ARABIC LIGATURE TEH WITH JEEM INITIAL FORM +FC0B ; [.2685.0020.001A][.268F.0020.001A] # ARABIC LIGATURE TEH WITH JEEM ISOLATED FORM +FD50 ; [.2685.0020.0017][.268F.0020.0017][.2714.0020.0017] # ARABIC LIGATURE TEH WITH JEEM WITH MEEM INITIAL FORM +FDA0 ; [.2685.0020.0019][.268F.0020.0019][.2736.0020.0019] # ARABIC LIGATURE TEH WITH JEEM WITH ALEF MAKSURA FINAL FORM +FD9F ; [.2685.0020.0019][.268F.0020.0019][.2737.0020.0019] # ARABIC LIGATURE TEH WITH JEEM WITH YEH FINAL FORM +FCA2 ; [.2685.0020.0017][.2699.0020.0017] # ARABIC LIGATURE TEH WITH HAH INITIAL FORM +FC0C ; [.2685.0020.001A][.2699.0020.001A] # ARABIC LIGATURE TEH WITH HAH ISOLATED FORM +FD52 ; [.2685.0020.0017][.2699.0020.0017][.268F.0020.0017] # ARABIC LIGATURE TEH WITH HAH WITH JEEM INITIAL FORM +FD51 ; [.2685.0020.0019][.2699.0020.0019][.268F.0020.0019] # ARABIC LIGATURE TEH WITH HAH WITH JEEM FINAL FORM +FD53 ; [.2685.0020.0017][.2699.0020.0017][.2714.0020.0017] # ARABIC LIGATURE TEH WITH HAH WITH MEEM INITIAL FORM +FCA3 ; [.2685.0020.0017][.269A.0020.0017] # ARABIC LIGATURE TEH WITH KHAH INITIAL FORM +FC0D ; [.2685.0020.001A][.269A.0020.001A] # ARABIC LIGATURE TEH WITH KHAH ISOLATED FORM +FD54 ; [.2685.0020.0017][.269A.0020.0017][.2714.0020.0017] # ARABIC LIGATURE TEH WITH KHAH WITH MEEM INITIAL FORM +FDA2 ; [.2685.0020.0019][.269A.0020.0019][.2736.0020.0019] # ARABIC LIGATURE TEH WITH KHAH WITH ALEF MAKSURA FINAL FORM +FDA1 ; [.2685.0020.0019][.269A.0020.0019][.2737.0020.0019] # ARABIC LIGATURE TEH WITH KHAH WITH YEH FINAL FORM +FC70 ; [.2685.0020.0019][.26B3.0020.0019] # ARABIC LIGATURE TEH WITH REH FINAL FORM +FC71 ; [.2685.0020.0019][.26B4.0020.0019] # ARABIC LIGATURE TEH WITH ZAIN FINAL FORM +FCA4 ; [.2685.0020.0017][.2714.0020.0017] # ARABIC LIGATURE TEH WITH MEEM INITIAL FORM +FCE3 ; [.2685.0020.0018][.2714.0020.0018] # ARABIC LIGATURE TEH WITH MEEM MEDIAL FORM +FC72 ; [.2685.0020.0019][.2714.0020.0019] # ARABIC LIGATURE TEH WITH MEEM FINAL FORM +FC0E ; [.2685.0020.001A][.2714.0020.001A] # ARABIC LIGATURE TEH WITH MEEM ISOLATED FORM +FD55 ; [.2685.0020.0017][.2714.0020.0017][.268F.0020.0017] # ARABIC LIGATURE TEH WITH MEEM WITH JEEM INITIAL FORM +FD56 ; [.2685.0020.0017][.2714.0020.0017][.2699.0020.0017] # ARABIC LIGATURE TEH WITH MEEM WITH HAH INITIAL FORM +FD57 ; [.2685.0020.0017][.2714.0020.0017][.269A.0020.0017] # ARABIC LIGATURE TEH WITH MEEM WITH KHAH INITIAL FORM +FDA4 ; [.2685.0020.0019][.2714.0020.0019][.2736.0020.0019] # ARABIC LIGATURE TEH WITH MEEM WITH ALEF MAKSURA FINAL FORM +FDA3 ; [.2685.0020.0019][.2714.0020.0019][.2737.0020.0019] # ARABIC LIGATURE TEH WITH MEEM WITH YEH FINAL FORM +FC73 ; [.2685.0020.0019][.2718.0020.0019] # ARABIC LIGATURE TEH WITH NOON FINAL FORM +FCA5 ; [.2685.0020.0017][.2722.0020.0017] # ARABIC LIGATURE TEH WITH HEH INITIAL FORM +FCE4 ; [.2685.0020.0018][.2722.0020.0018] # ARABIC LIGATURE TEH WITH HEH MEDIAL FORM +FC74 ; [.2685.0020.0019][.2736.0020.0019] # ARABIC LIGATURE TEH WITH ALEF MAKSURA FINAL FORM +FC0F ; [.2685.0020.001A][.2736.0020.001A] # ARABIC LIGATURE TEH WITH ALEF MAKSURA ISOLATED FORM +FC75 ; [.2685.0020.0019][.2737.0020.0019] # ARABIC LIGATURE TEH WITH YEH FINAL FORM +FC10 ; [.2685.0020.001A][.2737.0020.001A] # ARABIC LIGATURE TEH WITH YEH ISOLATED FORM +062B ; [.2686.0020.0002] # ARABIC LETTER THEH +1EE16 ; [.2686.0020.0005] # ARABIC MATHEMATICAL THEH +1EE36 ; [.2686.0020.0005] # ARABIC MATHEMATICAL INITIAL THEH +1EE76 ; [.2686.0020.0005] # ARABIC MATHEMATICAL STRETCHED THEH +1EE96 ; [.2686.0020.0005] # ARABIC MATHEMATICAL LOOPED THEH +1EEB6 ; [.2686.0020.0005] # ARABIC MATHEMATICAL DOUBLE-STRUCK THEH +FE9B ; [.2686.0020.0017] # ARABIC LETTER THEH INITIAL FORM +FE9C ; [.2686.0020.0018] # ARABIC LETTER THEH MEDIAL FORM +FE9A ; [.2686.0020.0019] # ARABIC LETTER THEH FINAL FORM +FE99 ; [.2686.0020.001A] # ARABIC LETTER THEH ISOLATED FORM +FC11 ; [.2686.0020.001A][.268F.0020.001A] # ARABIC LIGATURE THEH WITH JEEM ISOLATED FORM +FC76 ; [.2686.0020.0019][.26B3.0020.0019] # ARABIC LIGATURE THEH WITH REH FINAL FORM +FC77 ; [.2686.0020.0019][.26B4.0020.0019] # ARABIC LIGATURE THEH WITH ZAIN FINAL FORM +FCA6 ; [.2686.0020.0017][.2714.0020.0017] # ARABIC LIGATURE THEH WITH MEEM INITIAL FORM +FCE5 ; [.2686.0020.0018][.2714.0020.0018] # ARABIC LIGATURE THEH WITH MEEM MEDIAL FORM +FC78 ; [.2686.0020.0019][.2714.0020.0019] # ARABIC LIGATURE THEH WITH MEEM FINAL FORM +FC12 ; [.2686.0020.001A][.2714.0020.001A] # ARABIC LIGATURE THEH WITH MEEM ISOLATED FORM +FC79 ; [.2686.0020.0019][.2718.0020.0019] # ARABIC LIGATURE THEH WITH NOON FINAL FORM +FCE6 ; [.2686.0020.0018][.2722.0020.0018] # ARABIC LIGATURE THEH WITH HEH MEDIAL FORM +FC7A ; [.2686.0020.0019][.2736.0020.0019] # ARABIC LIGATURE THEH WITH ALEF MAKSURA FINAL FORM +FC13 ; [.2686.0020.001A][.2736.0020.001A] # ARABIC LIGATURE THEH WITH ALEF MAKSURA ISOLATED FORM +FC7B ; [.2686.0020.0019][.2737.0020.0019] # ARABIC LIGATURE THEH WITH YEH FINAL FORM +FC14 ; [.2686.0020.001A][.2737.0020.001A] # ARABIC LIGATURE THEH WITH YEH ISOLATED FORM +0679 ; [.2687.0020.0002] # ARABIC LETTER TTEH +FB68 ; [.2687.0020.0017] # ARABIC LETTER TTEH INITIAL FORM +FB69 ; [.2687.0020.0018] # ARABIC LETTER TTEH MEDIAL FORM +FB67 ; [.2687.0020.0019] # ARABIC LETTER TTEH FINAL FORM +FB66 ; [.2687.0020.001A] # ARABIC LETTER TTEH ISOLATED FORM +067A ; [.2688.0020.0002] # ARABIC LETTER TTEHEH +FB60 ; [.2688.0020.0017] # ARABIC LETTER TTEHEH INITIAL FORM +FB61 ; [.2688.0020.0018] # ARABIC LETTER TTEHEH MEDIAL FORM +FB5F ; [.2688.0020.0019] # ARABIC LETTER TTEHEH FINAL FORM +FB5E ; [.2688.0020.001A] # ARABIC LETTER TTEHEH ISOLATED FORM +067C ; [.2689.0020.0002] # ARABIC LETTER TEH WITH RING +067D ; [.268A.0020.0002] # ARABIC LETTER TEH WITH THREE DOTS ABOVE DOWNWARDS +067F ; [.268B.0020.0002] # ARABIC LETTER TEHEH +FB64 ; [.268B.0020.0017] # ARABIC LETTER TEHEH INITIAL FORM +FB65 ; [.268B.0020.0018] # ARABIC LETTER TEHEH MEDIAL FORM +FB63 ; [.268B.0020.0019] # ARABIC LETTER TEHEH FINAL FORM +FB62 ; [.268B.0020.001A] # ARABIC LETTER TEHEH ISOLATED FORM +08B8 ; [.268C.0020.0002] # ARABIC LETTER TEH WITH SMALL TEH ABOVE +08BF ; [.268D.0020.0002] # ARABIC LETTER TEH WITH SMALL V +08C0 ; [.268E.0020.0002] # ARABIC LETTER TTEH WITH SMALL V +062C ; [.268F.0020.0002] # ARABIC LETTER JEEM +1EE02 ; [.268F.0020.0005] # ARABIC MATHEMATICAL JEEM +1EE22 ; [.268F.0020.0005] # ARABIC MATHEMATICAL INITIAL JEEM +1EE42 ; [.268F.0020.0005] # ARABIC MATHEMATICAL TAILED JEEM +1EE62 ; [.268F.0020.0005] # ARABIC MATHEMATICAL STRETCHED JEEM +1EE82 ; [.268F.0020.0005] # ARABIC MATHEMATICAL LOOPED JEEM +1EEA2 ; [.268F.0020.0005] # ARABIC MATHEMATICAL DOUBLE-STRUCK JEEM +FE9F ; [.268F.0020.0017] # ARABIC LETTER JEEM INITIAL FORM +FEA0 ; [.268F.0020.0018] # ARABIC LETTER JEEM MEDIAL FORM +FE9E ; [.268F.0020.0019] # ARABIC LETTER JEEM FINAL FORM +FE9D ; [.268F.0020.001A] # ARABIC LETTER JEEM ISOLATED FORM +FCA7 ; [.268F.0020.0017][.2699.0020.0017] # ARABIC LIGATURE JEEM WITH HAH INITIAL FORM +FC15 ; [.268F.0020.001A][.2699.0020.001A] # ARABIC LIGATURE JEEM WITH HAH ISOLATED FORM +FDA6 ; [.268F.0020.0019][.2699.0020.0019][.2736.0020.0019] # ARABIC LIGATURE JEEM WITH HAH WITH ALEF MAKSURA FINAL FORM +FDBE ; [.268F.0020.0019][.2699.0020.0019][.2737.0020.0019] # ARABIC LIGATURE JEEM WITH HAH WITH YEH FINAL FORM +FDFB ; [.268F.0020.001A][.270C.0020.001A][*0209.0020.001A][.268F.0020.001A][.270C.0020.001A][.2672.0020.001A][.270C.0020.001A][.2722.0020.001A] # ARABIC LIGATURE JALLAJALALOUHOU +FCA8 ; [.268F.0020.0017][.2714.0020.0017] # ARABIC LIGATURE JEEM WITH MEEM INITIAL FORM +FC16 ; [.268F.0020.001A][.2714.0020.001A] # ARABIC LIGATURE JEEM WITH MEEM ISOLATED FORM +FD59 ; [.268F.0020.0017][.2714.0020.0017][.2699.0020.0017] # ARABIC LIGATURE JEEM WITH MEEM WITH HAH INITIAL FORM +FD58 ; [.268F.0020.0019][.2714.0020.0019][.2699.0020.0019] # ARABIC LIGATURE JEEM WITH MEEM WITH HAH FINAL FORM +FDA7 ; [.268F.0020.0019][.2714.0020.0019][.2736.0020.0019] # ARABIC LIGATURE JEEM WITH MEEM WITH ALEF MAKSURA FINAL FORM +FDA5 ; [.268F.0020.0019][.2714.0020.0019][.2737.0020.0019] # ARABIC LIGATURE JEEM WITH MEEM WITH YEH FINAL FORM +FD1D ; [.268F.0020.0019][.2736.0020.0019] # ARABIC LIGATURE JEEM WITH ALEF MAKSURA FINAL FORM +FD01 ; [.268F.0020.001A][.2736.0020.001A] # ARABIC LIGATURE JEEM WITH ALEF MAKSURA ISOLATED FORM +FD1E ; [.268F.0020.0019][.2737.0020.0019] # ARABIC LIGATURE JEEM WITH YEH FINAL FORM +FD02 ; [.268F.0020.001A][.2737.0020.001A] # ARABIC LIGATURE JEEM WITH YEH ISOLATED FORM +0683 ; [.2690.0020.0002] # ARABIC LETTER NYEH +FB78 ; [.2690.0020.0017] # ARABIC LETTER NYEH INITIAL FORM +FB79 ; [.2690.0020.0018] # ARABIC LETTER NYEH MEDIAL FORM +FB77 ; [.2690.0020.0019] # ARABIC LETTER NYEH FINAL FORM +FB76 ; [.2690.0020.001A] # ARABIC LETTER NYEH ISOLATED FORM +0684 ; [.2691.0020.0002] # ARABIC LETTER DYEH +FB74 ; [.2691.0020.0017] # ARABIC LETTER DYEH INITIAL FORM +FB75 ; [.2691.0020.0018] # ARABIC LETTER DYEH MEDIAL FORM +FB73 ; [.2691.0020.0019] # ARABIC LETTER DYEH FINAL FORM +FB72 ; [.2691.0020.001A] # ARABIC LETTER DYEH ISOLATED FORM +0686 ; [.2692.0020.0002] # ARABIC LETTER TCHEH +FB7C ; [.2692.0020.0017] # ARABIC LETTER TCHEH INITIAL FORM +FB7D ; [.2692.0020.0018] # ARABIC LETTER TCHEH MEDIAL FORM +FB7B ; [.2692.0020.0019] # ARABIC LETTER TCHEH FINAL FORM +FB7A ; [.2692.0020.001A] # ARABIC LETTER TCHEH ISOLATED FORM +06BF ; [.2693.0020.0002] # ARABIC LETTER TCHEH WITH DOT ABOVE +0687 ; [.2694.0020.0002] # ARABIC LETTER TCHEHEH +FB80 ; [.2694.0020.0017] # ARABIC LETTER TCHEHEH INITIAL FORM +FB81 ; [.2694.0020.0018] # ARABIC LETTER TCHEHEH MEDIAL FORM +FB7F ; [.2694.0020.0019] # ARABIC LETTER TCHEHEH FINAL FORM +FB7E ; [.2694.0020.001A] # ARABIC LETTER TCHEHEH ISOLATED FORM +08A2 ; [.2695.0020.0002] # ARABIC LETTER JEEM WITH TWO DOTS ABOVE +08C1 ; [.2696.0020.0002] # ARABIC LETTER TCHEH WITH SMALL V +08C5 ; [.2697.0020.0002] # ARABIC LETTER JEEM WITH THREE DOTS ABOVE +08C6 ; [.2698.0020.0002] # ARABIC LETTER JEEM WITH THREE DOTS BELOW +062D ; [.2699.0020.0002] # ARABIC LETTER HAH +1EE07 ; [.2699.0020.0005] # ARABIC MATHEMATICAL HAH +1EE27 ; [.2699.0020.0005] # ARABIC MATHEMATICAL INITIAL HAH +1EE47 ; [.2699.0020.0005] # ARABIC MATHEMATICAL TAILED HAH +1EE67 ; [.2699.0020.0005] # ARABIC MATHEMATICAL STRETCHED HAH +1EE87 ; [.2699.0020.0005] # ARABIC MATHEMATICAL LOOPED HAH +1EEA7 ; [.2699.0020.0005] # ARABIC MATHEMATICAL DOUBLE-STRUCK HAH +FEA3 ; [.2699.0020.0017] # ARABIC LETTER HAH INITIAL FORM +FEA4 ; [.2699.0020.0018] # ARABIC LETTER HAH MEDIAL FORM +FEA2 ; [.2699.0020.0019] # ARABIC LETTER HAH FINAL FORM +FEA1 ; [.2699.0020.001A] # ARABIC LETTER HAH ISOLATED FORM +FCA9 ; [.2699.0020.0017][.268F.0020.0017] # ARABIC LIGATURE HAH WITH JEEM INITIAL FORM +FC17 ; [.2699.0020.001A][.268F.0020.001A] # ARABIC LIGATURE HAH WITH JEEM ISOLATED FORM +FDBF ; [.2699.0020.0019][.268F.0020.0019][.2737.0020.0019] # ARABIC LIGATURE HAH WITH JEEM WITH YEH FINAL FORM +FCAA ; [.2699.0020.0017][.2714.0020.0017] # ARABIC LIGATURE HAH WITH MEEM INITIAL FORM +FC18 ; [.2699.0020.001A][.2714.0020.001A] # ARABIC LIGATURE HAH WITH MEEM ISOLATED FORM +FD5B ; [.2699.0020.0019][.2714.0020.0019][.2736.0020.0019] # ARABIC LIGATURE HAH WITH MEEM WITH ALEF MAKSURA FINAL FORM +FD5A ; [.2699.0020.0019][.2714.0020.0019][.2737.0020.0019] # ARABIC LIGATURE HAH WITH MEEM WITH YEH FINAL FORM +FD1B ; [.2699.0020.0019][.2736.0020.0019] # ARABIC LIGATURE HAH WITH ALEF MAKSURA FINAL FORM +FCFF ; [.2699.0020.001A][.2736.0020.001A] # ARABIC LIGATURE HAH WITH ALEF MAKSURA ISOLATED FORM +FD1C ; [.2699.0020.0019][.2737.0020.0019] # ARABIC LIGATURE HAH WITH YEH FINAL FORM +FD00 ; [.2699.0020.001A][.2737.0020.001A] # ARABIC LIGATURE HAH WITH YEH ISOLATED FORM +062E ; [.269A.0020.0002] # ARABIC LETTER KHAH +1EE17 ; [.269A.0020.0005] # ARABIC MATHEMATICAL KHAH +1EE37 ; [.269A.0020.0005] # ARABIC MATHEMATICAL INITIAL KHAH +1EE57 ; [.269A.0020.0005] # ARABIC MATHEMATICAL TAILED KHAH +1EE77 ; [.269A.0020.0005] # ARABIC MATHEMATICAL STRETCHED KHAH +1EE97 ; [.269A.0020.0005] # ARABIC MATHEMATICAL LOOPED KHAH +1EEB7 ; [.269A.0020.0005] # ARABIC MATHEMATICAL DOUBLE-STRUCK KHAH +FEA7 ; [.269A.0020.0017] # ARABIC LETTER KHAH INITIAL FORM +FEA8 ; [.269A.0020.0018] # ARABIC LETTER KHAH MEDIAL FORM +FEA6 ; [.269A.0020.0019] # ARABIC LETTER KHAH FINAL FORM +FEA5 ; [.269A.0020.001A] # ARABIC LETTER KHAH ISOLATED FORM +FCAB ; [.269A.0020.0017][.268F.0020.0017] # ARABIC LIGATURE KHAH WITH JEEM INITIAL FORM +FC19 ; [.269A.0020.001A][.268F.0020.001A] # ARABIC LIGATURE KHAH WITH JEEM ISOLATED FORM +FC1A ; [.269A.0020.001A][.2699.0020.001A] # ARABIC LIGATURE KHAH WITH HAH ISOLATED FORM +FCAC ; [.269A.0020.0017][.2714.0020.0017] # ARABIC LIGATURE KHAH WITH MEEM INITIAL FORM +FC1B ; [.269A.0020.001A][.2714.0020.001A] # ARABIC LIGATURE KHAH WITH MEEM ISOLATED FORM +FD1F ; [.269A.0020.0019][.2736.0020.0019] # ARABIC LIGATURE KHAH WITH ALEF MAKSURA FINAL FORM +FD03 ; [.269A.0020.001A][.2736.0020.001A] # ARABIC LIGATURE KHAH WITH ALEF MAKSURA ISOLATED FORM +FD20 ; [.269A.0020.0019][.2737.0020.0019] # ARABIC LIGATURE KHAH WITH YEH FINAL FORM +FD04 ; [.269A.0020.001A][.2737.0020.001A] # ARABIC LIGATURE KHAH WITH YEH ISOLATED FORM +0681 ; [.269B.0020.0002] # ARABIC LETTER HAH WITH HAMZA ABOVE +0682 ; [.269C.0020.0002] # ARABIC LETTER HAH WITH TWO DOTS VERTICAL ABOVE +0685 ; [.269D.0020.0002] # ARABIC LETTER HAH WITH THREE DOTS ABOVE +0757 ; [.269E.0020.0002] # ARABIC LETTER HAH WITH TWO DOTS ABOVE +0758 ; [.269F.0020.0002] # ARABIC LETTER HAH WITH THREE DOTS POINTING UPWARDS BELOW +076E ; [.26A0.0020.0002] # ARABIC LETTER HAH WITH SMALL ARABIC LETTER TAH BELOW +076F ; [.26A1.0020.0002] # ARABIC LETTER HAH WITH SMALL ARABIC LETTER TAH AND TWO DOTS +0772 ; [.26A2.0020.0002] # ARABIC LETTER HAH WITH SMALL ARABIC LETTER TAH ABOVE +077C ; [.26A3.0020.0002] # ARABIC LETTER HAH WITH EXTENDED ARABIC-INDIC DIGIT FOUR BELOW +062F ; [.26A4.0020.0002] # ARABIC LETTER DAL +1EE03 ; [.26A4.0020.0005] # ARABIC MATHEMATICAL DAL +1EE83 ; [.26A4.0020.0005] # ARABIC MATHEMATICAL LOOPED DAL +1EEA3 ; [.26A4.0020.0005] # ARABIC MATHEMATICAL DOUBLE-STRUCK DAL +FEAA ; [.26A4.0020.0019] # ARABIC LETTER DAL FINAL FORM +FEA9 ; [.26A4.0020.001A] # ARABIC LETTER DAL ISOLATED FORM +0630 ; [.26A5.0020.0002] # ARABIC LETTER THAL +1EE18 ; [.26A5.0020.0005] # ARABIC MATHEMATICAL THAL +1EE98 ; [.26A5.0020.0005] # ARABIC MATHEMATICAL LOOPED THAL +1EEB8 ; [.26A5.0020.0005] # ARABIC MATHEMATICAL DOUBLE-STRUCK THAL +FEAC ; [.26A5.0020.0019] # ARABIC LETTER THAL FINAL FORM +FEAB ; [.26A5.0020.001A] # ARABIC LETTER THAL ISOLATED FORM +FC5B ; [.26A5.0020.001A][.0000.0098.001A] # ARABIC LIGATURE THAL WITH SUPERSCRIPT ALEF ISOLATED FORM +0688 ; [.26A6.0020.0002] # ARABIC LETTER DDAL +FB89 ; [.26A6.0020.0019] # ARABIC LETTER DDAL FINAL FORM +FB88 ; [.26A6.0020.001A] # ARABIC LETTER DDAL ISOLATED FORM +0689 ; [.26A7.0020.0002] # ARABIC LETTER DAL WITH RING +068A ; [.26A8.0020.0002] # ARABIC LETTER DAL WITH DOT BELOW +068B ; [.26A9.0020.0002] # ARABIC LETTER DAL WITH DOT BELOW AND SMALL TAH +068C ; [.26AA.0020.0002] # ARABIC LETTER DAHAL +FB85 ; [.26AA.0020.0019] # ARABIC LETTER DAHAL FINAL FORM +FB84 ; [.26AA.0020.001A] # ARABIC LETTER DAHAL ISOLATED FORM +068D ; [.26AB.0020.0002] # ARABIC LETTER DDAHAL +FB83 ; [.26AB.0020.0019] # ARABIC LETTER DDAHAL FINAL FORM +FB82 ; [.26AB.0020.001A] # ARABIC LETTER DDAHAL ISOLATED FORM +08AE ; [.26AC.0020.0002] # ARABIC LETTER DAL WITH THREE DOTS BELOW +068E ; [.26AD.0020.0002] # ARABIC LETTER DUL +FB87 ; [.26AD.0020.0019] # ARABIC LETTER DUL FINAL FORM +FB86 ; [.26AD.0020.001A] # ARABIC LETTER DUL ISOLATED FORM +068F ; [.26AE.0020.0002] # ARABIC LETTER DAL WITH THREE DOTS ABOVE DOWNWARDS +0690 ; [.26AF.0020.0002] # ARABIC LETTER DAL WITH FOUR DOTS ABOVE +06EE ; [.26B0.0020.0002] # ARABIC LETTER DAL WITH INVERTED V +0759 ; [.26B1.0020.0002] # ARABIC LETTER DAL WITH TWO DOTS VERTICALLY BELOW AND SMALL TAH +075A ; [.26B2.0020.0002] # ARABIC LETTER DAL WITH INVERTED SMALL V BELOW +0631 ; [.26B3.0020.0002] # ARABIC LETTER REH +1EE13 ; [.26B3.0020.0005] # ARABIC MATHEMATICAL REH +1EE93 ; [.26B3.0020.0005] # ARABIC MATHEMATICAL LOOPED REH +1EEB3 ; [.26B3.0020.0005] # ARABIC MATHEMATICAL DOUBLE-STRUCK REH +FEAE ; [.26B3.0020.0019] # ARABIC LETTER REH FINAL FORM +FEAD ; [.26B3.0020.001A] # ARABIC LETTER REH ISOLATED FORM +FC5C ; [.26B3.0020.001A][.0000.0098.001A] # ARABIC LIGATURE REH WITH SUPERSCRIPT ALEF ISOLATED FORM +FDF6 ; [.26B3.0020.001A][.26C6.0020.001A][.2728.0020.001A][.270C.0020.001A] # ARABIC LIGATURE RASOUL ISOLATED FORM +FDFC ; [.26B3.0020.001A][.2738.0020.001A][.2672.0020.001A][.270C.0020.001A] # RIAL SIGN +0632 ; [.26B4.0020.0002] # ARABIC LETTER ZAIN +1EE06 ; [.26B4.0020.0005] # ARABIC MATHEMATICAL ZAIN +1EE86 ; [.26B4.0020.0005] # ARABIC MATHEMATICAL LOOPED ZAIN +1EEA6 ; [.26B4.0020.0005] # ARABIC MATHEMATICAL DOUBLE-STRUCK ZAIN +FEB0 ; [.26B4.0020.0019] # ARABIC LETTER ZAIN FINAL FORM +FEAF ; [.26B4.0020.001A] # ARABIC LETTER ZAIN ISOLATED FORM +0691 ; [.26B5.0020.0002] # ARABIC LETTER RREH +FB8D ; [.26B5.0020.0019] # ARABIC LETTER RREH FINAL FORM +FB8C ; [.26B5.0020.001A] # ARABIC LETTER RREH ISOLATED FORM +0692 ; [.26B6.0020.0002] # ARABIC LETTER REH WITH SMALL V +0693 ; [.26B7.0020.0002] # ARABIC LETTER REH WITH RING +0694 ; [.26B8.0020.0002] # ARABIC LETTER REH WITH DOT BELOW +0695 ; [.26B9.0020.0002] # ARABIC LETTER REH WITH SMALL V BELOW +0696 ; [.26BA.0020.0002] # ARABIC LETTER REH WITH DOT BELOW AND DOT ABOVE +0697 ; [.26BB.0020.0002] # ARABIC LETTER REH WITH TWO DOTS ABOVE +0698 ; [.26BC.0020.0002] # ARABIC LETTER JEH +FB8B ; [.26BC.0020.0019] # ARABIC LETTER JEH FINAL FORM +FB8A ; [.26BC.0020.001A] # ARABIC LETTER JEH ISOLATED FORM +0699 ; [.26BD.0020.0002] # ARABIC LETTER REH WITH FOUR DOTS ABOVE +06EF ; [.26BE.0020.0002] # ARABIC LETTER REH WITH INVERTED V +075B ; [.26BF.0020.0002] # ARABIC LETTER REH WITH STROKE +076B ; [.26C0.0020.0002] # ARABIC LETTER REH WITH TWO DOTS VERTICALLY ABOVE +076C ; [.26C1.0020.0002] # ARABIC LETTER REH WITH HAMZA ABOVE +0771 ; [.26C2.0020.0002] # ARABIC LETTER REH WITH SMALL ARABIC LETTER TAH AND TWO DOTS +08AA ; [.26C3.0020.0002] # ARABIC LETTER REH WITH LOOP +08B2 ; [.26C4.0020.0002] # ARABIC LETTER ZAIN WITH INVERTED V ABOVE +08B9 ; [.26C5.0020.0002] # ARABIC LETTER REH WITH SMALL NOON ABOVE +0633 ; [.26C6.0020.0002] # ARABIC LETTER SEEN +1EE0E ; [.26C6.0020.0005] # ARABIC MATHEMATICAL SEEN +1EE2E ; [.26C6.0020.0005] # ARABIC MATHEMATICAL INITIAL SEEN +1EE4E ; [.26C6.0020.0005] # ARABIC MATHEMATICAL TAILED SEEN +1EE6E ; [.26C6.0020.0005] # ARABIC MATHEMATICAL STRETCHED SEEN +1EE8E ; [.26C6.0020.0005] # ARABIC MATHEMATICAL LOOPED SEEN +1EEAE ; [.26C6.0020.0005] # ARABIC MATHEMATICAL DOUBLE-STRUCK SEEN +FEB3 ; [.26C6.0020.0017] # ARABIC LETTER SEEN INITIAL FORM +FEB4 ; [.26C6.0020.0018] # ARABIC LETTER SEEN MEDIAL FORM +FEB2 ; [.26C6.0020.0019] # ARABIC LETTER SEEN FINAL FORM +FEB1 ; [.26C6.0020.001A] # ARABIC LETTER SEEN ISOLATED FORM +FCAD ; [.26C6.0020.0017][.268F.0020.0017] # ARABIC LIGATURE SEEN WITH JEEM INITIAL FORM +FD34 ; [.26C6.0020.0018][.268F.0020.0018] # ARABIC LIGATURE SEEN WITH JEEM MEDIAL FORM +FC1C ; [.26C6.0020.001A][.268F.0020.001A] # ARABIC LIGATURE SEEN WITH JEEM ISOLATED FORM +FD5D ; [.26C6.0020.0017][.268F.0020.0017][.2699.0020.0017] # ARABIC LIGATURE SEEN WITH JEEM WITH HAH INITIAL FORM +FD5E ; [.26C6.0020.0019][.268F.0020.0019][.2736.0020.0019] # ARABIC LIGATURE SEEN WITH JEEM WITH ALEF MAKSURA FINAL FORM +FCAE ; [.26C6.0020.0017][.2699.0020.0017] # ARABIC LIGATURE SEEN WITH HAH INITIAL FORM +FD35 ; [.26C6.0020.0018][.2699.0020.0018] # ARABIC LIGATURE SEEN WITH HAH MEDIAL FORM +FC1D ; [.26C6.0020.001A][.2699.0020.001A] # ARABIC LIGATURE SEEN WITH HAH ISOLATED FORM +FD5C ; [.26C6.0020.0017][.2699.0020.0017][.268F.0020.0017] # ARABIC LIGATURE SEEN WITH HAH WITH JEEM INITIAL FORM +FCAF ; [.26C6.0020.0017][.269A.0020.0017] # ARABIC LIGATURE SEEN WITH KHAH INITIAL FORM +FD36 ; [.26C6.0020.0018][.269A.0020.0018] # ARABIC LIGATURE SEEN WITH KHAH MEDIAL FORM +FC1E ; [.26C6.0020.001A][.269A.0020.001A] # ARABIC LIGATURE SEEN WITH KHAH ISOLATED FORM +FDA8 ; [.26C6.0020.0019][.269A.0020.0019][.2736.0020.0019] # ARABIC LIGATURE SEEN WITH KHAH WITH ALEF MAKSURA FINAL FORM +FDC6 ; [.26C6.0020.0019][.269A.0020.0019][.2737.0020.0019] # ARABIC LIGATURE SEEN WITH KHAH WITH YEH FINAL FORM +FD2A ; [.26C6.0020.0019][.26B3.0020.0019] # ARABIC LIGATURE SEEN WITH REH FINAL FORM +FD0E ; [.26C6.0020.001A][.26B3.0020.001A] # ARABIC LIGATURE SEEN WITH REH ISOLATED FORM +FCB0 ; [.26C6.0020.0017][.2714.0020.0017] # ARABIC LIGATURE SEEN WITH MEEM INITIAL FORM +FCE7 ; [.26C6.0020.0018][.2714.0020.0018] # ARABIC LIGATURE SEEN WITH MEEM MEDIAL FORM +FC1F ; [.26C6.0020.001A][.2714.0020.001A] # ARABIC LIGATURE SEEN WITH MEEM ISOLATED FORM +FD61 ; [.26C6.0020.0017][.2714.0020.0017][.268F.0020.0017] # ARABIC LIGATURE SEEN WITH MEEM WITH JEEM INITIAL FORM +FD60 ; [.26C6.0020.0017][.2714.0020.0017][.2699.0020.0017] # ARABIC LIGATURE SEEN WITH MEEM WITH HAH INITIAL FORM +FD5F ; [.26C6.0020.0019][.2714.0020.0019][.2699.0020.0019] # ARABIC LIGATURE SEEN WITH MEEM WITH HAH FINAL FORM +FD63 ; [.26C6.0020.0017][.2714.0020.0017][.2714.0020.0017] # ARABIC LIGATURE SEEN WITH MEEM WITH MEEM INITIAL FORM +FD62 ; [.26C6.0020.0019][.2714.0020.0019][.2714.0020.0019] # ARABIC LIGATURE SEEN WITH MEEM WITH MEEM FINAL FORM +FD31 ; [.26C6.0020.0017][.2722.0020.0017] # ARABIC LIGATURE SEEN WITH HEH INITIAL FORM +FCE8 ; [.26C6.0020.0018][.2722.0020.0018] # ARABIC LIGATURE SEEN WITH HEH MEDIAL FORM +FD17 ; [.26C6.0020.0019][.2736.0020.0019] # ARABIC LIGATURE SEEN WITH ALEF MAKSURA FINAL FORM +FCFB ; [.26C6.0020.001A][.2736.0020.001A] # ARABIC LIGATURE SEEN WITH ALEF MAKSURA ISOLATED FORM +FD18 ; [.26C6.0020.0019][.2737.0020.0019] # ARABIC LIGATURE SEEN WITH YEH FINAL FORM +FCFC ; [.26C6.0020.001A][.2737.0020.001A] # ARABIC LIGATURE SEEN WITH YEH ISOLATED FORM +0634 ; [.26C7.0020.0002] # ARABIC LETTER SHEEN +1EE14 ; [.26C7.0020.0005] # ARABIC MATHEMATICAL SHEEN +1EE34 ; [.26C7.0020.0005] # ARABIC MATHEMATICAL INITIAL SHEEN +1EE54 ; [.26C7.0020.0005] # ARABIC MATHEMATICAL TAILED SHEEN +1EE74 ; [.26C7.0020.0005] # ARABIC MATHEMATICAL STRETCHED SHEEN +1EE94 ; [.26C7.0020.0005] # ARABIC MATHEMATICAL LOOPED SHEEN +1EEB4 ; [.26C7.0020.0005] # ARABIC MATHEMATICAL DOUBLE-STRUCK SHEEN +FEB7 ; [.26C7.0020.0017] # ARABIC LETTER SHEEN INITIAL FORM +FEB8 ; [.26C7.0020.0018] # ARABIC LETTER SHEEN MEDIAL FORM +FEB6 ; [.26C7.0020.0019] # ARABIC LETTER SHEEN FINAL FORM +FEB5 ; [.26C7.0020.001A] # ARABIC LETTER SHEEN ISOLATED FORM +FD2D ; [.26C7.0020.0017][.268F.0020.0017] # ARABIC LIGATURE SHEEN WITH JEEM INITIAL FORM +FD37 ; [.26C7.0020.0018][.268F.0020.0018] # ARABIC LIGATURE SHEEN WITH JEEM MEDIAL FORM +FD25 ; [.26C7.0020.0019][.268F.0020.0019] # ARABIC LIGATURE SHEEN WITH JEEM FINAL FORM +FD09 ; [.26C7.0020.001A][.268F.0020.001A] # ARABIC LIGATURE SHEEN WITH JEEM ISOLATED FORM +FD69 ; [.26C7.0020.0019][.268F.0020.0019][.2737.0020.0019] # ARABIC LIGATURE SHEEN WITH JEEM WITH YEH FINAL FORM +FD2E ; [.26C7.0020.0017][.2699.0020.0017] # ARABIC LIGATURE SHEEN WITH HAH INITIAL FORM +FD38 ; [.26C7.0020.0018][.2699.0020.0018] # ARABIC LIGATURE SHEEN WITH HAH MEDIAL FORM +FD26 ; [.26C7.0020.0019][.2699.0020.0019] # ARABIC LIGATURE SHEEN WITH HAH FINAL FORM +FD0A ; [.26C7.0020.001A][.2699.0020.001A] # ARABIC LIGATURE SHEEN WITH HAH ISOLATED FORM +FD68 ; [.26C7.0020.0017][.2699.0020.0017][.2714.0020.0017] # ARABIC LIGATURE SHEEN WITH HAH WITH MEEM INITIAL FORM +FD67 ; [.26C7.0020.0019][.2699.0020.0019][.2714.0020.0019] # ARABIC LIGATURE SHEEN WITH HAH WITH MEEM FINAL FORM +FDAA ; [.26C7.0020.0019][.2699.0020.0019][.2737.0020.0019] # ARABIC LIGATURE SHEEN WITH HAH WITH YEH FINAL FORM +FD2F ; [.26C7.0020.0017][.269A.0020.0017] # ARABIC LIGATURE SHEEN WITH KHAH INITIAL FORM +FD39 ; [.26C7.0020.0018][.269A.0020.0018] # ARABIC LIGATURE SHEEN WITH KHAH MEDIAL FORM +FD27 ; [.26C7.0020.0019][.269A.0020.0019] # ARABIC LIGATURE SHEEN WITH KHAH FINAL FORM +FD0B ; [.26C7.0020.001A][.269A.0020.001A] # ARABIC LIGATURE SHEEN WITH KHAH ISOLATED FORM +FD29 ; [.26C7.0020.0019][.26B3.0020.0019] # ARABIC LIGATURE SHEEN WITH REH FINAL FORM +FD0D ; [.26C7.0020.001A][.26B3.0020.001A] # ARABIC LIGATURE SHEEN WITH REH ISOLATED FORM +FD30 ; [.26C7.0020.0017][.2714.0020.0017] # ARABIC LIGATURE SHEEN WITH MEEM INITIAL FORM +FCE9 ; [.26C7.0020.0018][.2714.0020.0018] # ARABIC LIGATURE SHEEN WITH MEEM MEDIAL FORM +FD28 ; [.26C7.0020.0019][.2714.0020.0019] # ARABIC LIGATURE SHEEN WITH MEEM FINAL FORM +FD0C ; [.26C7.0020.001A][.2714.0020.001A] # ARABIC LIGATURE SHEEN WITH MEEM ISOLATED FORM +FD6B ; [.26C7.0020.0017][.2714.0020.0017][.269A.0020.0017] # ARABIC LIGATURE SHEEN WITH MEEM WITH KHAH INITIAL FORM +FD6A ; [.26C7.0020.0019][.2714.0020.0019][.269A.0020.0019] # ARABIC LIGATURE SHEEN WITH MEEM WITH KHAH FINAL FORM +FD6D ; [.26C7.0020.0017][.2714.0020.0017][.2714.0020.0017] # ARABIC LIGATURE SHEEN WITH MEEM WITH MEEM INITIAL FORM +FD6C ; [.26C7.0020.0019][.2714.0020.0019][.2714.0020.0019] # ARABIC LIGATURE SHEEN WITH MEEM WITH MEEM FINAL FORM +FD32 ; [.26C7.0020.0017][.2722.0020.0017] # ARABIC LIGATURE SHEEN WITH HEH INITIAL FORM +FCEA ; [.26C7.0020.0018][.2722.0020.0018] # ARABIC LIGATURE SHEEN WITH HEH MEDIAL FORM +FD19 ; [.26C7.0020.0019][.2736.0020.0019] # ARABIC LIGATURE SHEEN WITH ALEF MAKSURA FINAL FORM +FCFD ; [.26C7.0020.001A][.2736.0020.001A] # ARABIC LIGATURE SHEEN WITH ALEF MAKSURA ISOLATED FORM +FD1A ; [.26C7.0020.0019][.2737.0020.0019] # ARABIC LIGATURE SHEEN WITH YEH FINAL FORM +FCFE ; [.26C7.0020.001A][.2737.0020.001A] # ARABIC LIGATURE SHEEN WITH YEH ISOLATED FORM +069A ; [.26C8.0020.0002] # ARABIC LETTER SEEN WITH DOT BELOW AND DOT ABOVE +069B ; [.26C9.0020.0002] # ARABIC LETTER SEEN WITH THREE DOTS BELOW +069C ; [.26CA.0020.0002] # ARABIC LETTER SEEN WITH THREE DOTS BELOW AND THREE DOTS ABOVE +06FA ; [.26CB.0020.0002] # ARABIC LETTER SHEEN WITH DOT BELOW +075C ; [.26CC.0020.0002] # ARABIC LETTER SEEN WITH FOUR DOTS ABOVE +076D ; [.26CD.0020.0002] # ARABIC LETTER SEEN WITH TWO DOTS VERTICALLY ABOVE +0770 ; [.26CE.0020.0002] # ARABIC LETTER SEEN WITH SMALL ARABIC LETTER TAH AND TWO DOTS +077D ; [.26CF.0020.0002] # ARABIC LETTER SEEN WITH EXTENDED ARABIC-INDIC DIGIT FOUR ABOVE +077E ; [.26D0.0020.0002] # ARABIC LETTER SEEN WITH INVERTED V +0635 ; [.26D1.0020.0002] # ARABIC LETTER SAD +1EE11 ; [.26D1.0020.0005] # ARABIC MATHEMATICAL SAD +1EE31 ; [.26D1.0020.0005] # ARABIC MATHEMATICAL INITIAL SAD +1EE51 ; [.26D1.0020.0005] # ARABIC MATHEMATICAL TAILED SAD +1EE71 ; [.26D1.0020.0005] # ARABIC MATHEMATICAL STRETCHED SAD +1EE91 ; [.26D1.0020.0005] # ARABIC MATHEMATICAL LOOPED SAD +1EEB1 ; [.26D1.0020.0005] # ARABIC MATHEMATICAL DOUBLE-STRUCK SAD +FEBB ; [.26D1.0020.0017] # ARABIC LETTER SAD INITIAL FORM +FEBC ; [.26D1.0020.0018] # ARABIC LETTER SAD MEDIAL FORM +FEBA ; [.26D1.0020.0019] # ARABIC LETTER SAD FINAL FORM +FEB9 ; [.26D1.0020.001A] # ARABIC LETTER SAD ISOLATED FORM +FCB1 ; [.26D1.0020.0017][.2699.0020.0017] # ARABIC LIGATURE SAD WITH HAH INITIAL FORM +FC20 ; [.26D1.0020.001A][.2699.0020.001A] # ARABIC LIGATURE SAD WITH HAH ISOLATED FORM +FD65 ; [.26D1.0020.0017][.2699.0020.0017][.2699.0020.0017] # ARABIC LIGATURE SAD WITH HAH WITH HAH INITIAL FORM +FD64 ; [.26D1.0020.0019][.2699.0020.0019][.2699.0020.0019] # ARABIC LIGATURE SAD WITH HAH WITH HAH FINAL FORM +FDA9 ; [.26D1.0020.0019][.2699.0020.0019][.2737.0020.0019] # ARABIC LIGATURE SAD WITH HAH WITH YEH FINAL FORM +FCB2 ; [.26D1.0020.0017][.269A.0020.0017] # ARABIC LIGATURE SAD WITH KHAH INITIAL FORM +FD2B ; [.26D1.0020.0019][.26B3.0020.0019] # ARABIC LIGATURE SAD WITH REH FINAL FORM +FD0F ; [.26D1.0020.001A][.26B3.0020.001A] # ARABIC LIGATURE SAD WITH REH ISOLATED FORM +FDF5 ; [.26D1.0020.001A][.270C.0020.001A][.26DB.0020.001A][.2714.0020.001A] # ARABIC LIGATURE SALAM ISOLATED FORM +FDF9 ; [.26D1.0020.001A][.270C.0020.001A][.2736.0020.001A] # ARABIC LIGATURE SALLA ISOLATED FORM +FDFA ; [.26D1.0020.001A][.270C.0020.001A][.2736.0020.001A][*0209.0020.001A][.2672.0020.001A][.270C.0020.001A][.270C.0020.001A][.2722.0020.001A][*0209.0020.001A][.26DB.0020.001A][.270C.0020.001A][.2737.0020.001A][.2722.0020.001A][*0209.0020.001A][.2728.0020.001A][.26C6.0020.001A][.270C.0020.001A][.2714.0020.001A] # ARABIC LIGATURE SALLALLAHOU ALAYHE WASALLAM +FDF0 ; [.26D1.0020.001A][.270C.0020.001A][.2745.0020.001A] # ARABIC LIGATURE SALLA USED AS KORANIC STOP SIGN ISOLATED FORM +FCB3 ; [.26D1.0020.0017][.2714.0020.0017] # ARABIC LIGATURE SAD WITH MEEM INITIAL FORM +FC21 ; [.26D1.0020.001A][.2714.0020.001A] # ARABIC LIGATURE SAD WITH MEEM ISOLATED FORM +FDC5 ; [.26D1.0020.0017][.2714.0020.0017][.2714.0020.0017] # ARABIC LIGATURE SAD WITH MEEM WITH MEEM INITIAL FORM +FD66 ; [.26D1.0020.0019][.2714.0020.0019][.2714.0020.0019] # ARABIC LIGATURE SAD WITH MEEM WITH MEEM FINAL FORM +FD21 ; [.26D1.0020.0019][.2736.0020.0019] # ARABIC LIGATURE SAD WITH ALEF MAKSURA FINAL FORM +FD05 ; [.26D1.0020.001A][.2736.0020.001A] # ARABIC LIGATURE SAD WITH ALEF MAKSURA ISOLATED FORM +FD22 ; [.26D1.0020.0019][.2737.0020.0019] # ARABIC LIGATURE SAD WITH YEH FINAL FORM +FD06 ; [.26D1.0020.001A][.2737.0020.001A] # ARABIC LIGATURE SAD WITH YEH ISOLATED FORM +0636 ; [.26D2.0020.0002] # ARABIC LETTER DAD +1EE19 ; [.26D2.0020.0005] # ARABIC MATHEMATICAL DAD +1EE39 ; [.26D2.0020.0005] # ARABIC MATHEMATICAL INITIAL DAD +1EE59 ; [.26D2.0020.0005] # ARABIC MATHEMATICAL TAILED DAD +1EE79 ; [.26D2.0020.0005] # ARABIC MATHEMATICAL STRETCHED DAD +1EE99 ; [.26D2.0020.0005] # ARABIC MATHEMATICAL LOOPED DAD +1EEB9 ; [.26D2.0020.0005] # ARABIC MATHEMATICAL DOUBLE-STRUCK DAD +FEBF ; [.26D2.0020.0017] # ARABIC LETTER DAD INITIAL FORM +FEC0 ; [.26D2.0020.0018] # ARABIC LETTER DAD MEDIAL FORM +FEBE ; [.26D2.0020.0019] # ARABIC LETTER DAD FINAL FORM +FEBD ; [.26D2.0020.001A] # ARABIC LETTER DAD ISOLATED FORM +FCB4 ; [.26D2.0020.0017][.268F.0020.0017] # ARABIC LIGATURE DAD WITH JEEM INITIAL FORM +FC22 ; [.26D2.0020.001A][.268F.0020.001A] # ARABIC LIGATURE DAD WITH JEEM ISOLATED FORM +FCB5 ; [.26D2.0020.0017][.2699.0020.0017] # ARABIC LIGATURE DAD WITH HAH INITIAL FORM +FC23 ; [.26D2.0020.001A][.2699.0020.001A] # ARABIC LIGATURE DAD WITH HAH ISOLATED FORM +FD6E ; [.26D2.0020.0019][.2699.0020.0019][.2736.0020.0019] # ARABIC LIGATURE DAD WITH HAH WITH ALEF MAKSURA FINAL FORM +FDAB ; [.26D2.0020.0019][.2699.0020.0019][.2737.0020.0019] # ARABIC LIGATURE DAD WITH HAH WITH YEH FINAL FORM +FCB6 ; [.26D2.0020.0017][.269A.0020.0017] # ARABIC LIGATURE DAD WITH KHAH INITIAL FORM +FC24 ; [.26D2.0020.001A][.269A.0020.001A] # ARABIC LIGATURE DAD WITH KHAH ISOLATED FORM +FD70 ; [.26D2.0020.0017][.269A.0020.0017][.2714.0020.0017] # ARABIC LIGATURE DAD WITH KHAH WITH MEEM INITIAL FORM +FD6F ; [.26D2.0020.0019][.269A.0020.0019][.2714.0020.0019] # ARABIC LIGATURE DAD WITH KHAH WITH MEEM FINAL FORM +FD2C ; [.26D2.0020.0019][.26B3.0020.0019] # ARABIC LIGATURE DAD WITH REH FINAL FORM +FD10 ; [.26D2.0020.001A][.26B3.0020.001A] # ARABIC LIGATURE DAD WITH REH ISOLATED FORM +FCB7 ; [.26D2.0020.0017][.2714.0020.0017] # ARABIC LIGATURE DAD WITH MEEM INITIAL FORM +FC25 ; [.26D2.0020.001A][.2714.0020.001A] # ARABIC LIGATURE DAD WITH MEEM ISOLATED FORM +FD23 ; [.26D2.0020.0019][.2736.0020.0019] # ARABIC LIGATURE DAD WITH ALEF MAKSURA FINAL FORM +FD07 ; [.26D2.0020.001A][.2736.0020.001A] # ARABIC LIGATURE DAD WITH ALEF MAKSURA ISOLATED FORM +FD24 ; [.26D2.0020.0019][.2737.0020.0019] # ARABIC LIGATURE DAD WITH YEH FINAL FORM +FD08 ; [.26D2.0020.001A][.2737.0020.001A] # ARABIC LIGATURE DAD WITH YEH ISOLATED FORM +069D ; [.26D3.0020.0002] # ARABIC LETTER SAD WITH TWO DOTS BELOW +08AF ; [.26D4.0020.0002] # ARABIC LETTER SAD WITH THREE DOTS BELOW +069E ; [.26D5.0020.0002] # ARABIC LETTER SAD WITH THREE DOTS ABOVE +06FB ; [.26D6.0020.0002] # ARABIC LETTER DAD WITH DOT BELOW +0637 ; [.26D7.0020.0002] # ARABIC LETTER TAH +1EE08 ; [.26D7.0020.0005] # ARABIC MATHEMATICAL TAH +1EE68 ; [.26D7.0020.0005] # ARABIC MATHEMATICAL STRETCHED TAH +1EE88 ; [.26D7.0020.0005] # ARABIC MATHEMATICAL LOOPED TAH +1EEA8 ; [.26D7.0020.0005] # ARABIC MATHEMATICAL DOUBLE-STRUCK TAH +FEC3 ; [.26D7.0020.0017] # ARABIC LETTER TAH INITIAL FORM +FEC4 ; [.26D7.0020.0018] # ARABIC LETTER TAH MEDIAL FORM +FEC2 ; [.26D7.0020.0019] # ARABIC LETTER TAH FINAL FORM +FEC1 ; [.26D7.0020.001A] # ARABIC LETTER TAH ISOLATED FORM +FCB8 ; [.26D7.0020.0017][.2699.0020.0017] # ARABIC LIGATURE TAH WITH HAH INITIAL FORM +FC26 ; [.26D7.0020.001A][.2699.0020.001A] # ARABIC LIGATURE TAH WITH HAH ISOLATED FORM +FD33 ; [.26D7.0020.0017][.2714.0020.0017] # ARABIC LIGATURE TAH WITH MEEM INITIAL FORM +FD3A ; [.26D7.0020.0018][.2714.0020.0018] # ARABIC LIGATURE TAH WITH MEEM MEDIAL FORM +FC27 ; [.26D7.0020.001A][.2714.0020.001A] # ARABIC LIGATURE TAH WITH MEEM ISOLATED FORM +FD72 ; [.26D7.0020.0017][.2714.0020.0017][.2699.0020.0017] # ARABIC LIGATURE TAH WITH MEEM WITH HAH INITIAL FORM +FD71 ; [.26D7.0020.0019][.2714.0020.0019][.2699.0020.0019] # ARABIC LIGATURE TAH WITH MEEM WITH HAH FINAL FORM +FD73 ; [.26D7.0020.0017][.2714.0020.0017][.2714.0020.0017] # ARABIC LIGATURE TAH WITH MEEM WITH MEEM INITIAL FORM +FD74 ; [.26D7.0020.0019][.2714.0020.0019][.2737.0020.0019] # ARABIC LIGATURE TAH WITH MEEM WITH YEH FINAL FORM +FD11 ; [.26D7.0020.0019][.2736.0020.0019] # ARABIC LIGATURE TAH WITH ALEF MAKSURA FINAL FORM +FCF5 ; [.26D7.0020.001A][.2736.0020.001A] # ARABIC LIGATURE TAH WITH ALEF MAKSURA ISOLATED FORM +FD12 ; [.26D7.0020.0019][.2737.0020.0019] # ARABIC LIGATURE TAH WITH YEH FINAL FORM +FCF6 ; [.26D7.0020.001A][.2737.0020.001A] # ARABIC LIGATURE TAH WITH YEH ISOLATED FORM +0638 ; [.26D8.0020.0002] # ARABIC LETTER ZAH +1EE1A ; [.26D8.0020.0005] # ARABIC MATHEMATICAL ZAH +1EE7A ; [.26D8.0020.0005] # ARABIC MATHEMATICAL STRETCHED ZAH +1EE9A ; [.26D8.0020.0005] # ARABIC MATHEMATICAL LOOPED ZAH +1EEBA ; [.26D8.0020.0005] # ARABIC MATHEMATICAL DOUBLE-STRUCK ZAH +FEC7 ; [.26D8.0020.0017] # ARABIC LETTER ZAH INITIAL FORM +FEC8 ; [.26D8.0020.0018] # ARABIC LETTER ZAH MEDIAL FORM +FEC6 ; [.26D8.0020.0019] # ARABIC LETTER ZAH FINAL FORM +FEC5 ; [.26D8.0020.001A] # ARABIC LETTER ZAH ISOLATED FORM +FCB9 ; [.26D8.0020.0017][.2714.0020.0017] # ARABIC LIGATURE ZAH WITH MEEM INITIAL FORM +FD3B ; [.26D8.0020.0018][.2714.0020.0018] # ARABIC LIGATURE ZAH WITH MEEM MEDIAL FORM +FC28 ; [.26D8.0020.001A][.2714.0020.001A] # ARABIC LIGATURE ZAH WITH MEEM ISOLATED FORM +069F ; [.26D9.0020.0002] # ARABIC LETTER TAH WITH THREE DOTS ABOVE +08A3 ; [.26DA.0020.0002] # ARABIC LETTER TAH WITH TWO DOTS ABOVE +0639 ; [.26DB.0020.0002] # ARABIC LETTER AIN +1EE0F ; [.26DB.0020.0005] # ARABIC MATHEMATICAL AIN +1EE2F ; [.26DB.0020.0005] # ARABIC MATHEMATICAL INITIAL AIN +1EE4F ; [.26DB.0020.0005] # ARABIC MATHEMATICAL TAILED AIN +1EE6F ; [.26DB.0020.0005] # ARABIC MATHEMATICAL STRETCHED AIN +1EE8F ; [.26DB.0020.0005] # ARABIC MATHEMATICAL LOOPED AIN +1EEAF ; [.26DB.0020.0005] # ARABIC MATHEMATICAL DOUBLE-STRUCK AIN +FECB ; [.26DB.0020.0017] # ARABIC LETTER AIN INITIAL FORM +FECC ; [.26DB.0020.0018] # ARABIC LETTER AIN MEDIAL FORM +FECA ; [.26DB.0020.0019] # ARABIC LETTER AIN FINAL FORM +FEC9 ; [.26DB.0020.001A] # ARABIC LETTER AIN ISOLATED FORM +FCBA ; [.26DB.0020.0017][.268F.0020.0017] # ARABIC LIGATURE AIN WITH JEEM INITIAL FORM +FC29 ; [.26DB.0020.001A][.268F.0020.001A] # ARABIC LIGATURE AIN WITH JEEM ISOLATED FORM +FDC4 ; [.26DB.0020.0017][.268F.0020.0017][.2714.0020.0017] # ARABIC LIGATURE AIN WITH JEEM WITH MEEM INITIAL FORM +FD75 ; [.26DB.0020.0019][.268F.0020.0019][.2714.0020.0019] # ARABIC LIGATURE AIN WITH JEEM WITH MEEM FINAL FORM +FDF7 ; [.26DB.0020.001A][.270C.0020.001A][.2737.0020.001A][.2722.0020.001A] # ARABIC LIGATURE ALAYHE ISOLATED FORM +FCBB ; [.26DB.0020.0017][.2714.0020.0017] # ARABIC LIGATURE AIN WITH MEEM INITIAL FORM +FC2A ; [.26DB.0020.001A][.2714.0020.001A] # ARABIC LIGATURE AIN WITH MEEM ISOLATED FORM +FD77 ; [.26DB.0020.0017][.2714.0020.0017][.2714.0020.0017] # ARABIC LIGATURE AIN WITH MEEM WITH MEEM INITIAL FORM +FD76 ; [.26DB.0020.0019][.2714.0020.0019][.2714.0020.0019] # ARABIC LIGATURE AIN WITH MEEM WITH MEEM FINAL FORM +FD78 ; [.26DB.0020.0019][.2714.0020.0019][.2736.0020.0019] # ARABIC LIGATURE AIN WITH MEEM WITH ALEF MAKSURA FINAL FORM +FDB6 ; [.26DB.0020.0019][.2714.0020.0019][.2737.0020.0019] # ARABIC LIGATURE AIN WITH MEEM WITH YEH FINAL FORM +FD13 ; [.26DB.0020.0019][.2736.0020.0019] # ARABIC LIGATURE AIN WITH ALEF MAKSURA FINAL FORM +FCF7 ; [.26DB.0020.001A][.2736.0020.001A] # ARABIC LIGATURE AIN WITH ALEF MAKSURA ISOLATED FORM +FD14 ; [.26DB.0020.0019][.2737.0020.0019] # ARABIC LIGATURE AIN WITH YEH FINAL FORM +FCF8 ; [.26DB.0020.001A][.2737.0020.001A] # ARABIC LIGATURE AIN WITH YEH ISOLATED FORM +063A ; [.26DC.0020.0002] # ARABIC LETTER GHAIN +1EE1B ; [.26DC.0020.0005] # ARABIC MATHEMATICAL GHAIN +1EE3B ; [.26DC.0020.0005] # ARABIC MATHEMATICAL INITIAL GHAIN +1EE5B ; [.26DC.0020.0005] # ARABIC MATHEMATICAL TAILED GHAIN +1EE7B ; [.26DC.0020.0005] # ARABIC MATHEMATICAL STRETCHED GHAIN +1EE9B ; [.26DC.0020.0005] # ARABIC MATHEMATICAL LOOPED GHAIN +1EEBB ; [.26DC.0020.0005] # ARABIC MATHEMATICAL DOUBLE-STRUCK GHAIN +FECF ; [.26DC.0020.0017] # ARABIC LETTER GHAIN INITIAL FORM +FED0 ; [.26DC.0020.0018] # ARABIC LETTER GHAIN MEDIAL FORM +FECE ; [.26DC.0020.0019] # ARABIC LETTER GHAIN FINAL FORM +FECD ; [.26DC.0020.001A] # ARABIC LETTER GHAIN ISOLATED FORM +FCBC ; [.26DC.0020.0017][.268F.0020.0017] # ARABIC LIGATURE GHAIN WITH JEEM INITIAL FORM +FC2B ; [.26DC.0020.001A][.268F.0020.001A] # ARABIC LIGATURE GHAIN WITH JEEM ISOLATED FORM +FCBD ; [.26DC.0020.0017][.2714.0020.0017] # ARABIC LIGATURE GHAIN WITH MEEM INITIAL FORM +FC2C ; [.26DC.0020.001A][.2714.0020.001A] # ARABIC LIGATURE GHAIN WITH MEEM ISOLATED FORM +FD79 ; [.26DC.0020.0019][.2714.0020.0019][.2714.0020.0019] # ARABIC LIGATURE GHAIN WITH MEEM WITH MEEM FINAL FORM +FD7B ; [.26DC.0020.0019][.2714.0020.0019][.2736.0020.0019] # ARABIC LIGATURE GHAIN WITH MEEM WITH ALEF MAKSURA FINAL FORM +FD7A ; [.26DC.0020.0019][.2714.0020.0019][.2737.0020.0019] # ARABIC LIGATURE GHAIN WITH MEEM WITH YEH FINAL FORM +FD15 ; [.26DC.0020.0019][.2736.0020.0019] # ARABIC LIGATURE GHAIN WITH ALEF MAKSURA FINAL FORM +FCF9 ; [.26DC.0020.001A][.2736.0020.001A] # ARABIC LIGATURE GHAIN WITH ALEF MAKSURA ISOLATED FORM +FD16 ; [.26DC.0020.0019][.2737.0020.0019] # ARABIC LIGATURE GHAIN WITH YEH FINAL FORM +FCFA ; [.26DC.0020.001A][.2737.0020.001A] # ARABIC LIGATURE GHAIN WITH YEH ISOLATED FORM +06A0 ; [.26DD.0020.0002] # ARABIC LETTER AIN WITH THREE DOTS ABOVE +08C3 ; [.26DE.0020.0002] # ARABIC LETTER GHAIN WITH THREE DOTS ABOVE +06FC ; [.26DF.0020.0002] # ARABIC LETTER GHAIN WITH DOT BELOW +075D ; [.26E0.0020.0002] # ARABIC LETTER AIN WITH TWO DOTS ABOVE +075E ; [.26E1.0020.0002] # ARABIC LETTER AIN WITH THREE DOTS POINTING DOWNWARDS ABOVE +075F ; [.26E2.0020.0002] # ARABIC LETTER AIN WITH TWO DOTS VERTICALLY ABOVE +08B3 ; [.26E3.0020.0002] # ARABIC LETTER AIN WITH THREE DOTS BELOW +0641 ; [.26E4.0020.0002] # ARABIC LETTER FEH +1EE10 ; [.26E4.0020.0005] # ARABIC MATHEMATICAL FEH +1EE30 ; [.26E4.0020.0005] # ARABIC MATHEMATICAL INITIAL FEH +1EE70 ; [.26E4.0020.0005] # ARABIC MATHEMATICAL STRETCHED FEH +1EE90 ; [.26E4.0020.0005] # ARABIC MATHEMATICAL LOOPED FEH +1EEB0 ; [.26E4.0020.0005] # ARABIC MATHEMATICAL DOUBLE-STRUCK FEH +FED3 ; [.26E4.0020.0017] # ARABIC LETTER FEH INITIAL FORM +FED4 ; [.26E4.0020.0018] # ARABIC LETTER FEH MEDIAL FORM +FED2 ; [.26E4.0020.0019] # ARABIC LETTER FEH FINAL FORM +FED1 ; [.26E4.0020.001A] # ARABIC LETTER FEH ISOLATED FORM +FCBE ; [.26E4.0020.0017][.268F.0020.0017] # ARABIC LIGATURE FEH WITH JEEM INITIAL FORM +FC2D ; [.26E4.0020.001A][.268F.0020.001A] # ARABIC LIGATURE FEH WITH JEEM ISOLATED FORM +FCBF ; [.26E4.0020.0017][.2699.0020.0017] # ARABIC LIGATURE FEH WITH HAH INITIAL FORM +FC2E ; [.26E4.0020.001A][.2699.0020.001A] # ARABIC LIGATURE FEH WITH HAH ISOLATED FORM +FCC0 ; [.26E4.0020.0017][.269A.0020.0017] # ARABIC LIGATURE FEH WITH KHAH INITIAL FORM +FC2F ; [.26E4.0020.001A][.269A.0020.001A] # ARABIC LIGATURE FEH WITH KHAH ISOLATED FORM +FD7D ; [.26E4.0020.0017][.269A.0020.0017][.2714.0020.0017] # ARABIC LIGATURE FEH WITH KHAH WITH MEEM INITIAL FORM +FD7C ; [.26E4.0020.0019][.269A.0020.0019][.2714.0020.0019] # ARABIC LIGATURE FEH WITH KHAH WITH MEEM FINAL FORM +FCC1 ; [.26E4.0020.0017][.2714.0020.0017] # ARABIC LIGATURE FEH WITH MEEM INITIAL FORM +FC30 ; [.26E4.0020.001A][.2714.0020.001A] # ARABIC LIGATURE FEH WITH MEEM ISOLATED FORM +FDC1 ; [.26E4.0020.0019][.2714.0020.0019][.2737.0020.0019] # ARABIC LIGATURE FEH WITH MEEM WITH YEH FINAL FORM +FC7C ; [.26E4.0020.0019][.2736.0020.0019] # ARABIC LIGATURE FEH WITH ALEF MAKSURA FINAL FORM +FC31 ; [.26E4.0020.001A][.2736.0020.001A] # ARABIC LIGATURE FEH WITH ALEF MAKSURA ISOLATED FORM +FC7D ; [.26E4.0020.0019][.2737.0020.0019] # ARABIC LIGATURE FEH WITH YEH FINAL FORM +FC32 ; [.26E4.0020.001A][.2737.0020.001A] # ARABIC LIGATURE FEH WITH YEH ISOLATED FORM +06A1 ; [.26E5.0020.0002] # ARABIC LETTER DOTLESS FEH +1EE1E ; [.26E5.0020.0005] # ARABIC MATHEMATICAL DOTLESS FEH +1EE7E ; [.26E5.0020.0005] # ARABIC MATHEMATICAL STRETCHED DOTLESS FEH +06A2 ; [.26E6.0020.0002] # ARABIC LETTER FEH WITH DOT MOVED BELOW +08BB ; [.26E7.0020.0002] # ARABIC LETTER AFRICAN FEH +06A3 ; [.26E8.0020.0002] # ARABIC LETTER FEH WITH DOT BELOW +06A4 ; [.26E9.0020.0002] # ARABIC LETTER VEH +FB6C ; [.26E9.0020.0017] # ARABIC LETTER VEH INITIAL FORM +FB6D ; [.26E9.0020.0018] # ARABIC LETTER VEH MEDIAL FORM +FB6B ; [.26E9.0020.0019] # ARABIC LETTER VEH FINAL FORM +FB6A ; [.26E9.0020.001A] # ARABIC LETTER VEH ISOLATED FORM +08A4 ; [.26EA.0020.0002] # ARABIC LETTER FEH WITH DOT BELOW AND THREE DOTS ABOVE +06A5 ; [.26EB.0020.0002] # ARABIC LETTER FEH WITH THREE DOTS BELOW +06A6 ; [.26EC.0020.0002] # ARABIC LETTER PEHEH +FB70 ; [.26EC.0020.0017] # ARABIC LETTER PEHEH INITIAL FORM +FB71 ; [.26EC.0020.0018] # ARABIC LETTER PEHEH MEDIAL FORM +FB6F ; [.26EC.0020.0019] # ARABIC LETTER PEHEH FINAL FORM +FB6E ; [.26EC.0020.001A] # ARABIC LETTER PEHEH ISOLATED FORM +0760 ; [.26ED.0020.0002] # ARABIC LETTER FEH WITH TWO DOTS BELOW +0761 ; [.26EE.0020.0002] # ARABIC LETTER FEH WITH THREE DOTS POINTING UPWARDS BELOW +066F ; [.26EF.0020.0002] # ARABIC LETTER DOTLESS QAF +1EE1F ; [.26EF.0020.0005] # ARABIC MATHEMATICAL DOTLESS QAF +1EE5F ; [.26EF.0020.0005] # ARABIC MATHEMATICAL TAILED DOTLESS QAF +0642 ; [.26F0.0020.0002] # ARABIC LETTER QAF +1EE12 ; [.26F0.0020.0005] # ARABIC MATHEMATICAL QAF +1EE32 ; [.26F0.0020.0005] # ARABIC MATHEMATICAL INITIAL QAF +1EE52 ; [.26F0.0020.0005] # ARABIC MATHEMATICAL TAILED QAF +1EE72 ; [.26F0.0020.0005] # ARABIC MATHEMATICAL STRETCHED QAF +1EE92 ; [.26F0.0020.0005] # ARABIC MATHEMATICAL LOOPED QAF +1EEB2 ; [.26F0.0020.0005] # ARABIC MATHEMATICAL DOUBLE-STRUCK QAF +FED7 ; [.26F0.0020.0017] # ARABIC LETTER QAF INITIAL FORM +FED8 ; [.26F0.0020.0018] # ARABIC LETTER QAF MEDIAL FORM +FED6 ; [.26F0.0020.0019] # ARABIC LETTER QAF FINAL FORM +FED5 ; [.26F0.0020.001A] # ARABIC LETTER QAF ISOLATED FORM +FCC2 ; [.26F0.0020.0017][.2699.0020.0017] # ARABIC LIGATURE QAF WITH HAH INITIAL FORM +FC33 ; [.26F0.0020.001A][.2699.0020.001A] # ARABIC LIGATURE QAF WITH HAH ISOLATED FORM +FDF1 ; [.26F0.0020.001A][.270C.0020.001A][.2745.0020.001A] # ARABIC LIGATURE QALA USED AS KORANIC STOP SIGN ISOLATED FORM +FCC3 ; [.26F0.0020.0017][.2714.0020.0017] # ARABIC LIGATURE QAF WITH MEEM INITIAL FORM +FC34 ; [.26F0.0020.001A][.2714.0020.001A] # ARABIC LIGATURE QAF WITH MEEM ISOLATED FORM +FDB4 ; [.26F0.0020.0017][.2714.0020.0017][.2699.0020.0017] # ARABIC LIGATURE QAF WITH MEEM WITH HAH INITIAL FORM +FD7E ; [.26F0.0020.0019][.2714.0020.0019][.2699.0020.0019] # ARABIC LIGATURE QAF WITH MEEM WITH HAH FINAL FORM +FD7F ; [.26F0.0020.0019][.2714.0020.0019][.2714.0020.0019] # ARABIC LIGATURE QAF WITH MEEM WITH MEEM FINAL FORM +FDB2 ; [.26F0.0020.0019][.2714.0020.0019][.2737.0020.0019] # ARABIC LIGATURE QAF WITH MEEM WITH YEH FINAL FORM +FC7E ; [.26F0.0020.0019][.2736.0020.0019] # ARABIC LIGATURE QAF WITH ALEF MAKSURA FINAL FORM +FC35 ; [.26F0.0020.001A][.2736.0020.001A] # ARABIC LIGATURE QAF WITH ALEF MAKSURA ISOLATED FORM +FC7F ; [.26F0.0020.0019][.2737.0020.0019] # ARABIC LIGATURE QAF WITH YEH FINAL FORM +FC36 ; [.26F0.0020.001A][.2737.0020.001A] # ARABIC LIGATURE QAF WITH YEH ISOLATED FORM +06A7 ; [.26F1.0020.0002] # ARABIC LETTER QAF WITH DOT ABOVE +08BC ; [.26F2.0020.0002] # ARABIC LETTER AFRICAN QAF +06A8 ; [.26F3.0020.0002] # ARABIC LETTER QAF WITH THREE DOTS ABOVE +08C4 ; [.26F4.0020.0002] # ARABIC LETTER AFRICAN QAF WITH THREE DOTS ABOVE +08A5 ; [.26F5.0020.0002] # ARABIC LETTER QAF WITH DOT BELOW +0643 ; [.26F6.0020.0002] # ARABIC LETTER KAF +1EE0A ; [.26F6.0020.0005] # ARABIC MATHEMATICAL KAF +1EE2A ; [.26F6.0020.0005] # ARABIC MATHEMATICAL INITIAL KAF +1EE6A ; [.26F6.0020.0005] # ARABIC MATHEMATICAL STRETCHED KAF +FEDB ; [.26F6.0020.0017] # ARABIC LETTER KAF INITIAL FORM +FEDC ; [.26F6.0020.0018] # ARABIC LETTER KAF MEDIAL FORM +FEDA ; [.26F6.0020.0019] # ARABIC LETTER KAF FINAL FORM +FED9 ; [.26F6.0020.001A] # ARABIC LETTER KAF ISOLATED FORM +FC80 ; [.26F6.0020.0019][.2672.0020.0019] # ARABIC LIGATURE KAF WITH ALEF FINAL FORM +FC37 ; [.26F6.0020.001A][.2672.0020.001A] # ARABIC LIGATURE KAF WITH ALEF ISOLATED FORM +FCC4 ; [.26F6.0020.0017][.268F.0020.0017] # ARABIC LIGATURE KAF WITH JEEM INITIAL FORM +FC38 ; [.26F6.0020.001A][.268F.0020.001A] # ARABIC LIGATURE KAF WITH JEEM ISOLATED FORM +FCC5 ; [.26F6.0020.0017][.2699.0020.0017] # ARABIC LIGATURE KAF WITH HAH INITIAL FORM +FC39 ; [.26F6.0020.001A][.2699.0020.001A] # ARABIC LIGATURE KAF WITH HAH ISOLATED FORM +FCC6 ; [.26F6.0020.0017][.269A.0020.0017] # ARABIC LIGATURE KAF WITH KHAH INITIAL FORM +FC3A ; [.26F6.0020.001A][.269A.0020.001A] # ARABIC LIGATURE KAF WITH KHAH ISOLATED FORM +FCC7 ; [.26F6.0020.0017][.270C.0020.0017] # ARABIC LIGATURE KAF WITH LAM INITIAL FORM +FCEB ; [.26F6.0020.0018][.270C.0020.0018] # ARABIC LIGATURE KAF WITH LAM MEDIAL FORM +FC81 ; [.26F6.0020.0019][.270C.0020.0019] # ARABIC LIGATURE KAF WITH LAM FINAL FORM +FC3B ; [.26F6.0020.001A][.270C.0020.001A] # ARABIC LIGATURE KAF WITH LAM ISOLATED FORM +FCC8 ; [.26F6.0020.0017][.2714.0020.0017] # ARABIC LIGATURE KAF WITH MEEM INITIAL FORM +FCEC ; [.26F6.0020.0018][.2714.0020.0018] # ARABIC LIGATURE KAF WITH MEEM MEDIAL FORM +FC82 ; [.26F6.0020.0019][.2714.0020.0019] # ARABIC LIGATURE KAF WITH MEEM FINAL FORM +FC3C ; [.26F6.0020.001A][.2714.0020.001A] # ARABIC LIGATURE KAF WITH MEEM ISOLATED FORM +FDC3 ; [.26F6.0020.0017][.2714.0020.0017][.2714.0020.0017] # ARABIC LIGATURE KAF WITH MEEM WITH MEEM INITIAL FORM +FDBB ; [.26F6.0020.0019][.2714.0020.0019][.2714.0020.0019] # ARABIC LIGATURE KAF WITH MEEM WITH MEEM FINAL FORM +FDB7 ; [.26F6.0020.0019][.2714.0020.0019][.2737.0020.0019] # ARABIC LIGATURE KAF WITH MEEM WITH YEH FINAL FORM +FC83 ; [.26F6.0020.0019][.2736.0020.0019] # ARABIC LIGATURE KAF WITH ALEF MAKSURA FINAL FORM +FC3D ; [.26F6.0020.001A][.2736.0020.001A] # ARABIC LIGATURE KAF WITH ALEF MAKSURA ISOLATED FORM +FC84 ; [.26F6.0020.0019][.2737.0020.0019] # ARABIC LIGATURE KAF WITH YEH FINAL FORM +FC3E ; [.26F6.0020.001A][.2737.0020.001A] # ARABIC LIGATURE KAF WITH YEH ISOLATED FORM +06A9 ; [.26F7.0020.0002] # ARABIC LETTER KEHEH +FB90 ; [.26F7.0020.0017] # ARABIC LETTER KEHEH INITIAL FORM +FB91 ; [.26F7.0020.0018] # ARABIC LETTER KEHEH MEDIAL FORM +FB8F ; [.26F7.0020.0019] # ARABIC LETTER KEHEH FINAL FORM +FB8E ; [.26F7.0020.001A] # ARABIC LETTER KEHEH ISOLATED FORM +06AA ; [.26F8.0020.0002] # ARABIC LETTER SWASH KAF +06AB ; [.26F9.0020.0002] # ARABIC LETTER KAF WITH RING +06AC ; [.26FA.0020.0002] # ARABIC LETTER KAF WITH DOT ABOVE +077F ; [.26FB.0020.0002] # ARABIC LETTER KAF WITH TWO DOTS ABOVE +06AD ; [.26FC.0020.0002] # ARABIC LETTER NG +FBD5 ; [.26FC.0020.0017] # ARABIC LETTER NG INITIAL FORM +FBD6 ; [.26FC.0020.0018] # ARABIC LETTER NG MEDIAL FORM +FBD4 ; [.26FC.0020.0019] # ARABIC LETTER NG FINAL FORM +FBD3 ; [.26FC.0020.001A] # ARABIC LETTER NG ISOLATED FORM +06AE ; [.26FD.0020.0002] # ARABIC LETTER KAF WITH THREE DOTS BELOW +08B4 ; [.26FE.0020.0002] # ARABIC LETTER KAF WITH DOT BELOW +06AF ; [.26FF.0020.0002] # ARABIC LETTER GAF +FB94 ; [.26FF.0020.0017] # ARABIC LETTER GAF INITIAL FORM +FB95 ; [.26FF.0020.0018] # ARABIC LETTER GAF MEDIAL FORM +FB93 ; [.26FF.0020.0019] # ARABIC LETTER GAF FINAL FORM +FB92 ; [.26FF.0020.001A] # ARABIC LETTER GAF ISOLATED FORM +08B0 ; [.2700.0020.0002] # ARABIC LETTER GAF WITH INVERTED STROKE +06B0 ; [.2701.0020.0002] # ARABIC LETTER GAF WITH RING +06B1 ; [.2702.0020.0002] # ARABIC LETTER NGOEH +FB9C ; [.2702.0020.0017] # ARABIC LETTER NGOEH INITIAL FORM +FB9D ; [.2702.0020.0018] # ARABIC LETTER NGOEH MEDIAL FORM +FB9B ; [.2702.0020.0019] # ARABIC LETTER NGOEH FINAL FORM +FB9A ; [.2702.0020.001A] # ARABIC LETTER NGOEH ISOLATED FORM +06B2 ; [.2703.0020.0002] # ARABIC LETTER GAF WITH TWO DOTS BELOW +06B3 ; [.2704.0020.0002] # ARABIC LETTER GUEH +FB98 ; [.2704.0020.0017] # ARABIC LETTER GUEH INITIAL FORM +FB99 ; [.2704.0020.0018] # ARABIC LETTER GUEH MEDIAL FORM +FB97 ; [.2704.0020.0019] # ARABIC LETTER GUEH FINAL FORM +FB96 ; [.2704.0020.001A] # ARABIC LETTER GUEH ISOLATED FORM +06B4 ; [.2705.0020.0002] # ARABIC LETTER GAF WITH THREE DOTS ABOVE +0762 ; [.2706.0020.0002] # ARABIC LETTER KEHEH WITH DOT ABOVE +063B ; [.2707.0020.0002] # ARABIC LETTER KEHEH WITH TWO DOTS ABOVE +063C ; [.2708.0020.0002] # ARABIC LETTER KEHEH WITH THREE DOTS BELOW +0763 ; [.2709.0020.0002] # ARABIC LETTER KEHEH WITH THREE DOTS ABOVE +0764 ; [.270A.0020.0002] # ARABIC LETTER KEHEH WITH THREE DOTS POINTING UPWARDS BELOW +08C2 ; [.270B.0020.0002] # ARABIC LETTER KEHEH WITH SMALL V +0644 ; [.270C.0020.0002] # ARABIC LETTER LAM +1EE0B ; [.270C.0020.0005] # ARABIC MATHEMATICAL LAM +1EE2B ; [.270C.0020.0005] # ARABIC MATHEMATICAL INITIAL LAM +1EE4B ; [.270C.0020.0005] # ARABIC MATHEMATICAL TAILED LAM +1EE8B ; [.270C.0020.0005] # ARABIC MATHEMATICAL LOOPED LAM +1EEAB ; [.270C.0020.0005] # ARABIC MATHEMATICAL DOUBLE-STRUCK LAM +FEDF ; [.270C.0020.0017] # ARABIC LETTER LAM INITIAL FORM +FEE0 ; [.270C.0020.0018] # ARABIC LETTER LAM MEDIAL FORM +FEDE ; [.270C.0020.0019] # ARABIC LETTER LAM FINAL FORM +FEDD ; [.270C.0020.001A] # ARABIC LETTER LAM ISOLATED FORM +FEF6 ; [.270C.0020.0019][.2665.0020.0019] # ARABIC LIGATURE LAM WITH ALEF WITH MADDA ABOVE FINAL FORM +FEF5 ; [.270C.0020.001A][.2665.0020.001A] # ARABIC LIGATURE LAM WITH ALEF WITH MADDA ABOVE ISOLATED FORM +FEF8 ; [.270C.0020.0019][.2666.0020.0019] # ARABIC LIGATURE LAM WITH ALEF WITH HAMZA ABOVE FINAL FORM +FEF7 ; [.270C.0020.001A][.2666.0020.001A] # ARABIC LIGATURE LAM WITH ALEF WITH HAMZA ABOVE ISOLATED FORM +FEFA ; [.270C.0020.0019][.266A.0020.0019] # ARABIC LIGATURE LAM WITH ALEF WITH HAMZA BELOW FINAL FORM +FEF9 ; [.270C.0020.001A][.266A.0020.001A] # ARABIC LIGATURE LAM WITH ALEF WITH HAMZA BELOW ISOLATED FORM +FEFC ; [.270C.0020.0019][.2672.0020.0019] # ARABIC LIGATURE LAM WITH ALEF FINAL FORM +FEFB ; [.270C.0020.001A][.2672.0020.001A] # ARABIC LIGATURE LAM WITH ALEF ISOLATED FORM +FCC9 ; [.270C.0020.0017][.268F.0020.0017] # ARABIC LIGATURE LAM WITH JEEM INITIAL FORM +FC3F ; [.270C.0020.001A][.268F.0020.001A] # ARABIC LIGATURE LAM WITH JEEM ISOLATED FORM +FD83 ; [.270C.0020.0017][.268F.0020.0017][.268F.0020.0017] # ARABIC LIGATURE LAM WITH JEEM WITH JEEM INITIAL FORM +FD84 ; [.270C.0020.0019][.268F.0020.0019][.268F.0020.0019] # ARABIC LIGATURE LAM WITH JEEM WITH JEEM FINAL FORM +FDBA ; [.270C.0020.0017][.268F.0020.0017][.2714.0020.0017] # ARABIC LIGATURE LAM WITH JEEM WITH MEEM INITIAL FORM +FDBC ; [.270C.0020.0019][.268F.0020.0019][.2714.0020.0019] # ARABIC LIGATURE LAM WITH JEEM WITH MEEM FINAL FORM +FDAC ; [.270C.0020.0019][.268F.0020.0019][.2737.0020.0019] # ARABIC LIGATURE LAM WITH JEEM WITH YEH FINAL FORM +FCCA ; [.270C.0020.0017][.2699.0020.0017] # ARABIC LIGATURE LAM WITH HAH INITIAL FORM +FC40 ; [.270C.0020.001A][.2699.0020.001A] # ARABIC LIGATURE LAM WITH HAH ISOLATED FORM +FDB5 ; [.270C.0020.0017][.2699.0020.0017][.2714.0020.0017] # ARABIC LIGATURE LAM WITH HAH WITH MEEM INITIAL FORM +FD80 ; [.270C.0020.0019][.2699.0020.0019][.2714.0020.0019] # ARABIC LIGATURE LAM WITH HAH WITH MEEM FINAL FORM +FD82 ; [.270C.0020.0019][.2699.0020.0019][.2736.0020.0019] # ARABIC LIGATURE LAM WITH HAH WITH ALEF MAKSURA FINAL FORM +FD81 ; [.270C.0020.0019][.2699.0020.0019][.2737.0020.0019] # ARABIC LIGATURE LAM WITH HAH WITH YEH FINAL FORM +FCCB ; [.270C.0020.0017][.269A.0020.0017] # ARABIC LIGATURE LAM WITH KHAH INITIAL FORM +FC41 ; [.270C.0020.001A][.269A.0020.001A] # ARABIC LIGATURE LAM WITH KHAH ISOLATED FORM +FD86 ; [.270C.0020.0017][.269A.0020.0017][.2714.0020.0017] # ARABIC LIGATURE LAM WITH KHAH WITH MEEM INITIAL FORM +FD85 ; [.270C.0020.0019][.269A.0020.0019][.2714.0020.0019] # ARABIC LIGATURE LAM WITH KHAH WITH MEEM FINAL FORM +FCCC ; [.270C.0020.0017][.2714.0020.0017] # ARABIC LIGATURE LAM WITH MEEM INITIAL FORM +FCED ; [.270C.0020.0018][.2714.0020.0018] # ARABIC LIGATURE LAM WITH MEEM MEDIAL FORM +FC85 ; [.270C.0020.0019][.2714.0020.0019] # ARABIC LIGATURE LAM WITH MEEM FINAL FORM +FC42 ; [.270C.0020.001A][.2714.0020.001A] # ARABIC LIGATURE LAM WITH MEEM ISOLATED FORM +FD88 ; [.270C.0020.0017][.2714.0020.0017][.2699.0020.0017] # ARABIC LIGATURE LAM WITH MEEM WITH HAH INITIAL FORM +FD87 ; [.270C.0020.0019][.2714.0020.0019][.2699.0020.0019] # ARABIC LIGATURE LAM WITH MEEM WITH HAH FINAL FORM +FDAD ; [.270C.0020.0019][.2714.0020.0019][.2737.0020.0019] # ARABIC LIGATURE LAM WITH MEEM WITH YEH FINAL FORM +FCCD ; [.270C.0020.0017][.2722.0020.0017] # ARABIC LIGATURE LAM WITH HEH INITIAL FORM +FC86 ; [.270C.0020.0019][.2736.0020.0019] # ARABIC LIGATURE LAM WITH ALEF MAKSURA FINAL FORM +FC43 ; [.270C.0020.001A][.2736.0020.001A] # ARABIC LIGATURE LAM WITH ALEF MAKSURA ISOLATED FORM +FC87 ; [.270C.0020.0019][.2737.0020.0019] # ARABIC LIGATURE LAM WITH YEH FINAL FORM +FC44 ; [.270C.0020.001A][.2737.0020.001A] # ARABIC LIGATURE LAM WITH YEH ISOLATED FORM +06B5 ; [.270D.0020.0002] # ARABIC LETTER LAM WITH SMALL V +06B6 ; [.270E.0020.0002] # ARABIC LETTER LAM WITH DOT ABOVE +06B7 ; [.270F.0020.0002] # ARABIC LETTER LAM WITH THREE DOTS ABOVE +06B8 ; [.2710.0020.0002] # ARABIC LETTER LAM WITH THREE DOTS BELOW +076A ; [.2711.0020.0002] # ARABIC LETTER LAM WITH BAR +08A6 ; [.2712.0020.0002] # ARABIC LETTER LAM WITH DOUBLE BAR +08C7 ; [.2713.0020.0002] # ARABIC LETTER LAM WITH SMALL ARABIC LETTER TAH ABOVE +0645 ; [.2714.0020.0002] # ARABIC LETTER MEEM +1EE0C ; [.2714.0020.0005] # ARABIC MATHEMATICAL MEEM +1EE2C ; [.2714.0020.0005] # ARABIC MATHEMATICAL INITIAL MEEM +1EE6C ; [.2714.0020.0005] # ARABIC MATHEMATICAL STRETCHED MEEM +1EE8C ; [.2714.0020.0005] # ARABIC MATHEMATICAL LOOPED MEEM +1EEAC ; [.2714.0020.0005] # ARABIC MATHEMATICAL DOUBLE-STRUCK MEEM +FEE3 ; [.2714.0020.0017] # ARABIC LETTER MEEM INITIAL FORM +FEE4 ; [.2714.0020.0018] # ARABIC LETTER MEEM MEDIAL FORM +FEE2 ; [.2714.0020.0019] # ARABIC LETTER MEEM FINAL FORM +FEE1 ; [.2714.0020.001A] # ARABIC LETTER MEEM ISOLATED FORM +06FE ; [.2714.0020.0004][.0000.0119.0004] # ARABIC SIGN SINDHI POSTPOSITION MEN +FC88 ; [.2714.0020.0019][.2672.0020.0019] # ARABIC LIGATURE MEEM WITH ALEF FINAL FORM +FCCE ; [.2714.0020.0017][.268F.0020.0017] # ARABIC LIGATURE MEEM WITH JEEM INITIAL FORM +FC45 ; [.2714.0020.001A][.268F.0020.001A] # ARABIC LIGATURE MEEM WITH JEEM ISOLATED FORM +FD8C ; [.2714.0020.0017][.268F.0020.0017][.2699.0020.0017] # ARABIC LIGATURE MEEM WITH JEEM WITH HAH INITIAL FORM +FD92 ; [.2714.0020.0017][.268F.0020.0017][.269A.0020.0017] # ARABIC LIGATURE MEEM WITH JEEM WITH KHAH INITIAL FORM +FD8D ; [.2714.0020.0017][.268F.0020.0017][.2714.0020.0017] # ARABIC LIGATURE MEEM WITH JEEM WITH MEEM INITIAL FORM +FDC0 ; [.2714.0020.0019][.268F.0020.0019][.2737.0020.0019] # ARABIC LIGATURE MEEM WITH JEEM WITH YEH FINAL FORM +FCCF ; [.2714.0020.0017][.2699.0020.0017] # ARABIC LIGATURE MEEM WITH HAH INITIAL FORM +FC46 ; [.2714.0020.001A][.2699.0020.001A] # ARABIC LIGATURE MEEM WITH HAH ISOLATED FORM +FD89 ; [.2714.0020.0017][.2699.0020.0017][.268F.0020.0017] # ARABIC LIGATURE MEEM WITH HAH WITH JEEM INITIAL FORM +FD8A ; [.2714.0020.0017][.2699.0020.0017][.2714.0020.0017] # ARABIC LIGATURE MEEM WITH HAH WITH MEEM INITIAL FORM +FDF4 ; [.2714.0020.001A][.2699.0020.001A][.2714.0020.001A][.26A4.0020.001A] # ARABIC LIGATURE MOHAMMAD ISOLATED FORM +FD8B ; [.2714.0020.0019][.2699.0020.0019][.2737.0020.0019] # ARABIC LIGATURE MEEM WITH HAH WITH YEH FINAL FORM +FCD0 ; [.2714.0020.0017][.269A.0020.0017] # ARABIC LIGATURE MEEM WITH KHAH INITIAL FORM +FC47 ; [.2714.0020.001A][.269A.0020.001A] # ARABIC LIGATURE MEEM WITH KHAH ISOLATED FORM +FD8E ; [.2714.0020.0017][.269A.0020.0017][.268F.0020.0017] # ARABIC LIGATURE MEEM WITH KHAH WITH JEEM INITIAL FORM +FD8F ; [.2714.0020.0017][.269A.0020.0017][.2714.0020.0017] # ARABIC LIGATURE MEEM WITH KHAH WITH MEEM INITIAL FORM +FDB9 ; [.2714.0020.0019][.269A.0020.0019][.2737.0020.0019] # ARABIC LIGATURE MEEM WITH KHAH WITH YEH FINAL FORM +FCD1 ; [.2714.0020.0017][.2714.0020.0017] # ARABIC LIGATURE MEEM WITH MEEM INITIAL FORM +FC89 ; [.2714.0020.0019][.2714.0020.0019] # ARABIC LIGATURE MEEM WITH MEEM FINAL FORM +FC48 ; [.2714.0020.001A][.2714.0020.001A] # ARABIC LIGATURE MEEM WITH MEEM ISOLATED FORM +FDB1 ; [.2714.0020.0019][.2714.0020.0019][.2737.0020.0019] # ARABIC LIGATURE MEEM WITH MEEM WITH YEH FINAL FORM +FC49 ; [.2714.0020.001A][.2736.0020.001A] # ARABIC LIGATURE MEEM WITH ALEF MAKSURA ISOLATED FORM +FC4A ; [.2714.0020.001A][.2737.0020.001A] # ARABIC LIGATURE MEEM WITH YEH ISOLATED FORM +0765 ; [.2715.0020.0002] # ARABIC LETTER MEEM WITH DOT ABOVE +0766 ; [.2716.0020.0002] # ARABIC LETTER MEEM WITH DOT BELOW +08A7 ; [.2717.0020.0002] # ARABIC LETTER MEEM WITH THREE DOTS ABOVE +0646 ; [.2718.0020.0002] # ARABIC LETTER NOON +1EE0D ; [.2718.0020.0005] # ARABIC MATHEMATICAL NOON +1EE2D ; [.2718.0020.0005] # ARABIC MATHEMATICAL INITIAL NOON +1EE4D ; [.2718.0020.0005] # ARABIC MATHEMATICAL TAILED NOON +1EE6D ; [.2718.0020.0005] # ARABIC MATHEMATICAL STRETCHED NOON +1EE8D ; [.2718.0020.0005] # ARABIC MATHEMATICAL LOOPED NOON +1EEAD ; [.2718.0020.0005] # ARABIC MATHEMATICAL DOUBLE-STRUCK NOON +FEE7 ; [.2718.0020.0017] # ARABIC LETTER NOON INITIAL FORM +FEE8 ; [.2718.0020.0018] # ARABIC LETTER NOON MEDIAL FORM +FEE6 ; [.2718.0020.0019] # ARABIC LETTER NOON FINAL FORM +FEE5 ; [.2718.0020.001A] # ARABIC LETTER NOON ISOLATED FORM +FCD2 ; [.2718.0020.0017][.268F.0020.0017] # ARABIC LIGATURE NOON WITH JEEM INITIAL FORM +FC4B ; [.2718.0020.001A][.268F.0020.001A] # ARABIC LIGATURE NOON WITH JEEM ISOLATED FORM +FDB8 ; [.2718.0020.0017][.268F.0020.0017][.2699.0020.0017] # ARABIC LIGATURE NOON WITH JEEM WITH HAH INITIAL FORM +FDBD ; [.2718.0020.0019][.268F.0020.0019][.2699.0020.0019] # ARABIC LIGATURE NOON WITH JEEM WITH HAH FINAL FORM +FD98 ; [.2718.0020.0017][.268F.0020.0017][.2714.0020.0017] # ARABIC LIGATURE NOON WITH JEEM WITH MEEM INITIAL FORM +FD97 ; [.2718.0020.0019][.268F.0020.0019][.2714.0020.0019] # ARABIC LIGATURE NOON WITH JEEM WITH MEEM FINAL FORM +FD99 ; [.2718.0020.0019][.268F.0020.0019][.2736.0020.0019] # ARABIC LIGATURE NOON WITH JEEM WITH ALEF MAKSURA FINAL FORM +FDC7 ; [.2718.0020.0019][.268F.0020.0019][.2737.0020.0019] # ARABIC LIGATURE NOON WITH JEEM WITH YEH FINAL FORM +FCD3 ; [.2718.0020.0017][.2699.0020.0017] # ARABIC LIGATURE NOON WITH HAH INITIAL FORM +FC4C ; [.2718.0020.001A][.2699.0020.001A] # ARABIC LIGATURE NOON WITH HAH ISOLATED FORM +FD95 ; [.2718.0020.0017][.2699.0020.0017][.2714.0020.0017] # ARABIC LIGATURE NOON WITH HAH WITH MEEM INITIAL FORM +FD96 ; [.2718.0020.0019][.2699.0020.0019][.2736.0020.0019] # ARABIC LIGATURE NOON WITH HAH WITH ALEF MAKSURA FINAL FORM +FDB3 ; [.2718.0020.0019][.2699.0020.0019][.2737.0020.0019] # ARABIC LIGATURE NOON WITH HAH WITH YEH FINAL FORM +FCD4 ; [.2718.0020.0017][.269A.0020.0017] # ARABIC LIGATURE NOON WITH KHAH INITIAL FORM +FC4D ; [.2718.0020.001A][.269A.0020.001A] # ARABIC LIGATURE NOON WITH KHAH ISOLATED FORM +FC8A ; [.2718.0020.0019][.26B3.0020.0019] # ARABIC LIGATURE NOON WITH REH FINAL FORM +FC8B ; [.2718.0020.0019][.26B4.0020.0019] # ARABIC LIGATURE NOON WITH ZAIN FINAL FORM +FCD5 ; [.2718.0020.0017][.2714.0020.0017] # ARABIC LIGATURE NOON WITH MEEM INITIAL FORM +FCEE ; [.2718.0020.0018][.2714.0020.0018] # ARABIC LIGATURE NOON WITH MEEM MEDIAL FORM +FC8C ; [.2718.0020.0019][.2714.0020.0019] # ARABIC LIGATURE NOON WITH MEEM FINAL FORM +FC4E ; [.2718.0020.001A][.2714.0020.001A] # ARABIC LIGATURE NOON WITH MEEM ISOLATED FORM +FD9B ; [.2718.0020.0019][.2714.0020.0019][.2736.0020.0019] # ARABIC LIGATURE NOON WITH MEEM WITH ALEF MAKSURA FINAL FORM +FD9A ; [.2718.0020.0019][.2714.0020.0019][.2737.0020.0019] # ARABIC LIGATURE NOON WITH MEEM WITH YEH FINAL FORM +FC8D ; [.2718.0020.0019][.2718.0020.0019] # ARABIC LIGATURE NOON WITH NOON FINAL FORM +FCD6 ; [.2718.0020.0017][.2722.0020.0017] # ARABIC LIGATURE NOON WITH HEH INITIAL FORM +FCEF ; [.2718.0020.0018][.2722.0020.0018] # ARABIC LIGATURE NOON WITH HEH MEDIAL FORM +FC8E ; [.2718.0020.0019][.2736.0020.0019] # ARABIC LIGATURE NOON WITH ALEF MAKSURA FINAL FORM +FC4F ; [.2718.0020.001A][.2736.0020.001A] # ARABIC LIGATURE NOON WITH ALEF MAKSURA ISOLATED FORM +FC8F ; [.2718.0020.0019][.2737.0020.0019] # ARABIC LIGATURE NOON WITH YEH FINAL FORM +FC50 ; [.2718.0020.001A][.2737.0020.001A] # ARABIC LIGATURE NOON WITH YEH ISOLATED FORM +06BA ; [.2719.0020.0002] # ARABIC LETTER NOON GHUNNA +1EE1D ; [.2719.0020.0005] # ARABIC MATHEMATICAL DOTLESS NOON +1EE5D ; [.2719.0020.0005] # ARABIC MATHEMATICAL TAILED DOTLESS NOON +FB9F ; [.2719.0020.0019] # ARABIC LETTER NOON GHUNNA FINAL FORM +FB9E ; [.2719.0020.001A] # ARABIC LETTER NOON GHUNNA ISOLATED FORM +08BD ; [.271A.0020.0002] # ARABIC LETTER AFRICAN NOON +06BB ; [.271B.0020.0002] # ARABIC LETTER RNOON +FBA2 ; [.271B.0020.0017] # ARABIC LETTER RNOON INITIAL FORM +FBA3 ; [.271B.0020.0018] # ARABIC LETTER RNOON MEDIAL FORM +FBA1 ; [.271B.0020.0019] # ARABIC LETTER RNOON FINAL FORM +FBA0 ; [.271B.0020.001A] # ARABIC LETTER RNOON ISOLATED FORM +06BC ; [.271C.0020.0002] # ARABIC LETTER NOON WITH RING +06BD ; [.271D.0020.0002] # ARABIC LETTER NOON WITH THREE DOTS ABOVE +06B9 ; [.271E.0020.0002] # ARABIC LETTER NOON WITH DOT BELOW +0767 ; [.271F.0020.0002] # ARABIC LETTER NOON WITH TWO DOTS BELOW +0768 ; [.2720.0020.0002] # ARABIC LETTER NOON WITH SMALL TAH +0769 ; [.2721.0020.0002] # ARABIC LETTER NOON WITH SMALL V +0647 ; [.2722.0020.0002] # ARABIC LETTER HEH +1EE24 ; [.2722.0020.0005] # ARABIC MATHEMATICAL INITIAL HEH +1EE64 ; [.2722.0020.0005] # ARABIC MATHEMATICAL STRETCHED HEH +1EE84 ; [.2722.0020.0005] # ARABIC MATHEMATICAL LOOPED HEH +FEEB ; [.2722.0020.0017] # ARABIC LETTER HEH INITIAL FORM +FEEC ; [.2722.0020.0018] # ARABIC LETTER HEH MEDIAL FORM +FEEA ; [.2722.0020.0019] # ARABIC LETTER HEH FINAL FORM +FEE9 ; [.2722.0020.001A] # ARABIC LETTER HEH ISOLATED FORM +FCD9 ; [.2722.0020.0017][.0000.0098.0017] # ARABIC LIGATURE HEH WITH SUPERSCRIPT ALEF INITIAL FORM +FCD7 ; [.2722.0020.0017][.268F.0020.0017] # ARABIC LIGATURE HEH WITH JEEM INITIAL FORM +FC51 ; [.2722.0020.001A][.268F.0020.001A] # ARABIC LIGATURE HEH WITH JEEM ISOLATED FORM +FCD8 ; [.2722.0020.0017][.2714.0020.0017] # ARABIC LIGATURE HEH WITH MEEM INITIAL FORM +FC52 ; [.2722.0020.001A][.2714.0020.001A] # ARABIC LIGATURE HEH WITH MEEM ISOLATED FORM +FD93 ; [.2722.0020.0017][.2714.0020.0017][.268F.0020.0017] # ARABIC LIGATURE HEH WITH MEEM WITH JEEM INITIAL FORM +FD94 ; [.2722.0020.0017][.2714.0020.0017][.2714.0020.0017] # ARABIC LIGATURE HEH WITH MEEM WITH MEEM INITIAL FORM +FC53 ; [.2722.0020.001A][.2736.0020.001A] # ARABIC LIGATURE HEH WITH ALEF MAKSURA ISOLATED FORM +FC54 ; [.2722.0020.001A][.2737.0020.001A] # ARABIC LIGATURE HEH WITH YEH ISOLATED FORM +06BE ; [.2723.0020.0002] # ARABIC LETTER HEH DOACHASHMEE +FBAC ; [.2723.0020.0017] # ARABIC LETTER HEH DOACHASHMEE INITIAL FORM +FBAD ; [.2723.0020.0018] # ARABIC LETTER HEH DOACHASHMEE MEDIAL FORM +FBAB ; [.2723.0020.0019] # ARABIC LETTER HEH DOACHASHMEE FINAL FORM +FBAA ; [.2723.0020.001A] # ARABIC LETTER HEH DOACHASHMEE ISOLATED FORM +06C1 ; [.2724.0020.0002] # ARABIC LETTER HEH GOAL +FBA8 ; [.2724.0020.0017] # ARABIC LETTER HEH GOAL INITIAL FORM +FBA9 ; [.2724.0020.0018] # ARABIC LETTER HEH GOAL MEDIAL FORM +FBA7 ; [.2724.0020.0019] # ARABIC LETTER HEH GOAL FINAL FORM +FBA6 ; [.2724.0020.001A] # ARABIC LETTER HEH GOAL ISOLATED FORM +06C2 ; [.2724.0020.0002][.0000.0083.0002] # ARABIC LETTER HEH GOAL WITH HAMZA ABOVE +06C3 ; [.2725.0020.0002] # ARABIC LETTER TEH MARBUTA GOAL +06FF ; [.2726.0020.0002] # ARABIC LETTER HEH WITH INVERTED V +06D5 ; [.2727.0020.0002] # ARABIC LETTER AE +06C0 ; [.2727.0020.0002][.0000.0083.0002] # ARABIC LETTER HEH WITH YEH ABOVE +FBA5 ; [.2727.0020.0019][.0000.0083.0019] # ARABIC LETTER HEH WITH YEH ABOVE FINAL FORM +FBA4 ; [.2727.0020.001A][.0000.0083.001A] # ARABIC LETTER HEH WITH YEH ABOVE ISOLATED FORM +0648 ; [.2728.0020.0002] # ARABIC LETTER WAW +06E5 ; [.2728.0020.0004] # ARABIC SMALL WAW +1EE05 ; [.2728.0020.0005] # ARABIC MATHEMATICAL WAW +1EE85 ; [.2728.0020.0005] # ARABIC MATHEMATICAL LOOPED WAW +1EEA5 ; [.2728.0020.0005] # ARABIC MATHEMATICAL DOUBLE-STRUCK WAW +FEEE ; [.2728.0020.0019] # ARABIC LETTER WAW FINAL FORM +FEED ; [.2728.0020.001A] # ARABIC LETTER WAW ISOLATED FORM +0676 ; [.2728.0020.0004][.2664.0020.0004] # ARABIC LETTER HIGH HAMZA WAW +FDF8 ; [.2728.0020.001A][.26C6.0020.001A][.270C.0020.001A][.2714.0020.001A] # ARABIC LIGATURE WASALLAM ISOLATED FORM +06C4 ; [.2729.0020.0002] # ARABIC LETTER WAW WITH RING +06C5 ; [.272A.0020.0002] # ARABIC LETTER KIRGHIZ OE +FBE1 ; [.272A.0020.0019] # ARABIC LETTER KIRGHIZ OE FINAL FORM +FBE0 ; [.272A.0020.001A] # ARABIC LETTER KIRGHIZ OE ISOLATED FORM +06C6 ; [.272B.0020.0002] # ARABIC LETTER OE +FBDA ; [.272B.0020.0019] # ARABIC LETTER OE FINAL FORM +FBD9 ; [.272B.0020.001A] # ARABIC LETTER OE ISOLATED FORM +06C7 ; [.272C.0020.0002] # ARABIC LETTER U +FBD8 ; [.272C.0020.0019] # ARABIC LETTER U FINAL FORM +FBD7 ; [.272C.0020.001A] # ARABIC LETTER U ISOLATED FORM +0677 ; [.272C.0020.0004][.2664.0020.0004] # ARABIC LETTER U WITH HAMZA ABOVE +FBDD ; [.272C.0020.001A][.2664.0020.001A] # ARABIC LETTER U WITH HAMZA ABOVE ISOLATED FORM +06C8 ; [.272D.0020.0002] # ARABIC LETTER YU +FBDC ; [.272D.0020.0019] # ARABIC LETTER YU FINAL FORM +FBDB ; [.272D.0020.001A] # ARABIC LETTER YU ISOLATED FORM +06C9 ; [.272E.0020.0002] # ARABIC LETTER KIRGHIZ YU +FBE3 ; [.272E.0020.0019] # ARABIC LETTER KIRGHIZ YU FINAL FORM +FBE2 ; [.272E.0020.001A] # ARABIC LETTER KIRGHIZ YU ISOLATED FORM +06CA ; [.272F.0020.0002] # ARABIC LETTER WAW WITH TWO DOTS ABOVE +06CB ; [.2730.0020.0002] # ARABIC LETTER VE +FBDF ; [.2730.0020.0019] # ARABIC LETTER VE FINAL FORM +FBDE ; [.2730.0020.001A] # ARABIC LETTER VE ISOLATED FORM +08B1 ; [.2731.0020.0002] # ARABIC LETTER STRAIGHT WAW +06CF ; [.2732.0020.0002] # ARABIC LETTER WAW WITH DOT ABOVE +0778 ; [.2733.0020.0002] # ARABIC LETTER WAW WITH EXTENDED ARABIC-INDIC DIGIT TWO ABOVE +0779 ; [.2734.0020.0002] # ARABIC LETTER WAW WITH EXTENDED ARABIC-INDIC DIGIT THREE ABOVE +08AB ; [.2735.0020.0002] # ARABIC LETTER WAW WITH DOT WITHIN +0649 ; [.2736.0020.0002] # ARABIC LETTER ALEF MAKSURA +FBE8 ; [.2736.0020.0017] # ARABIC LETTER UIGHUR KAZAKH KIRGHIZ ALEF MAKSURA INITIAL FORM +FBE9 ; [.2736.0020.0018] # ARABIC LETTER UIGHUR KAZAKH KIRGHIZ ALEF MAKSURA MEDIAL FORM +FEF0 ; [.2736.0020.0019] # ARABIC LETTER ALEF MAKSURA FINAL FORM +FEEF ; [.2736.0020.001A] # ARABIC LETTER ALEF MAKSURA ISOLATED FORM +FC90 ; [.2736.0020.0019][.0000.0098.0019] # ARABIC LIGATURE ALEF MAKSURA WITH SUPERSCRIPT ALEF FINAL FORM +FC5D ; [.2736.0020.001A][.0000.0098.001A] # ARABIC LIGATURE ALEF MAKSURA WITH SUPERSCRIPT ALEF ISOLATED FORM +064A ; [.2737.0020.0002] # ARABIC LETTER YEH +06E6 ; [.2737.0020.0004] # ARABIC SMALL YEH +1EE09 ; [.2737.0020.0005] # ARABIC MATHEMATICAL YEH +1EE29 ; [.2737.0020.0005] # ARABIC MATHEMATICAL INITIAL YEH +1EE49 ; [.2737.0020.0005] # ARABIC MATHEMATICAL TAILED YEH +1EE69 ; [.2737.0020.0005] # ARABIC MATHEMATICAL STRETCHED YEH +1EE89 ; [.2737.0020.0005] # ARABIC MATHEMATICAL LOOPED YEH +1EEA9 ; [.2737.0020.0005] # ARABIC MATHEMATICAL DOUBLE-STRUCK YEH +FEF3 ; [.2737.0020.0017] # ARABIC LETTER YEH INITIAL FORM +FEF4 ; [.2737.0020.0018] # ARABIC LETTER YEH MEDIAL FORM +FEF2 ; [.2737.0020.0019] # ARABIC LETTER YEH FINAL FORM +FEF1 ; [.2737.0020.001A] # ARABIC LETTER YEH ISOLATED FORM +0678 ; [.2737.0020.0004][.2664.0020.0004] # ARABIC LETTER HIGH HAMZA YEH +FCDA ; [.2737.0020.0017][.268F.0020.0017] # ARABIC LIGATURE YEH WITH JEEM INITIAL FORM +FC55 ; [.2737.0020.001A][.268F.0020.001A] # ARABIC LIGATURE YEH WITH JEEM ISOLATED FORM +FDAF ; [.2737.0020.0019][.268F.0020.0019][.2737.0020.0019] # ARABIC LIGATURE YEH WITH JEEM WITH YEH FINAL FORM +FCDB ; [.2737.0020.0017][.2699.0020.0017] # ARABIC LIGATURE YEH WITH HAH INITIAL FORM +FC56 ; [.2737.0020.001A][.2699.0020.001A] # ARABIC LIGATURE YEH WITH HAH ISOLATED FORM +FDAE ; [.2737.0020.0019][.2699.0020.0019][.2737.0020.0019] # ARABIC LIGATURE YEH WITH HAH WITH YEH FINAL FORM +FCDC ; [.2737.0020.0017][.269A.0020.0017] # ARABIC LIGATURE YEH WITH KHAH INITIAL FORM +FC57 ; [.2737.0020.001A][.269A.0020.001A] # ARABIC LIGATURE YEH WITH KHAH ISOLATED FORM +FC91 ; [.2737.0020.0019][.26B3.0020.0019] # ARABIC LIGATURE YEH WITH REH FINAL FORM +FC92 ; [.2737.0020.0019][.26B4.0020.0019] # ARABIC LIGATURE YEH WITH ZAIN FINAL FORM +FCDD ; [.2737.0020.0017][.2714.0020.0017] # ARABIC LIGATURE YEH WITH MEEM INITIAL FORM +FCF0 ; [.2737.0020.0018][.2714.0020.0018] # ARABIC LIGATURE YEH WITH MEEM MEDIAL FORM +FC93 ; [.2737.0020.0019][.2714.0020.0019] # ARABIC LIGATURE YEH WITH MEEM FINAL FORM +FC58 ; [.2737.0020.001A][.2714.0020.001A] # ARABIC LIGATURE YEH WITH MEEM ISOLATED FORM +FD9D ; [.2737.0020.0017][.2714.0020.0017][.2714.0020.0017] # ARABIC LIGATURE YEH WITH MEEM WITH MEEM INITIAL FORM +FD9C ; [.2737.0020.0019][.2714.0020.0019][.2714.0020.0019] # ARABIC LIGATURE YEH WITH MEEM WITH MEEM FINAL FORM +FDB0 ; [.2737.0020.0019][.2714.0020.0019][.2737.0020.0019] # ARABIC LIGATURE YEH WITH MEEM WITH YEH FINAL FORM +FC94 ; [.2737.0020.0019][.2718.0020.0019] # ARABIC LIGATURE YEH WITH NOON FINAL FORM +FCDE ; [.2737.0020.0017][.2722.0020.0017] # ARABIC LIGATURE YEH WITH HEH INITIAL FORM +FCF1 ; [.2737.0020.0018][.2722.0020.0018] # ARABIC LIGATURE YEH WITH HEH MEDIAL FORM +FC95 ; [.2737.0020.0019][.2736.0020.0019] # ARABIC LIGATURE YEH WITH ALEF MAKSURA FINAL FORM +FC59 ; [.2737.0020.001A][.2736.0020.001A] # ARABIC LIGATURE YEH WITH ALEF MAKSURA ISOLATED FORM +FC96 ; [.2737.0020.0019][.2737.0020.0019] # ARABIC LIGATURE YEH WITH YEH FINAL FORM +FC5A ; [.2737.0020.001A][.2737.0020.001A] # ARABIC LIGATURE YEH WITH YEH ISOLATED FORM +06CC ; [.2738.0020.0002] # ARABIC LETTER FARSI YEH +FBFE ; [.2738.0020.0017] # ARABIC LETTER FARSI YEH INITIAL FORM +FBFF ; [.2738.0020.0018] # ARABIC LETTER FARSI YEH MEDIAL FORM +FBFD ; [.2738.0020.0019] # ARABIC LETTER FARSI YEH FINAL FORM +FBFC ; [.2738.0020.001A] # ARABIC LETTER FARSI YEH ISOLATED FORM +06CD ; [.2739.0020.0002] # ARABIC LETTER YEH WITH TAIL +06CE ; [.273A.0020.0002] # ARABIC LETTER YEH WITH SMALL V +06D0 ; [.273B.0020.0002] # ARABIC LETTER E +FBE6 ; [.273B.0020.0017] # ARABIC LETTER E INITIAL FORM +FBE7 ; [.273B.0020.0018] # ARABIC LETTER E MEDIAL FORM +FBE5 ; [.273B.0020.0019] # ARABIC LETTER E FINAL FORM +FBE4 ; [.273B.0020.001A] # ARABIC LETTER E ISOLATED FORM +06D1 ; [.273C.0020.0002] # ARABIC LETTER YEH WITH THREE DOTS BELOW +063D ; [.273D.0020.0002] # ARABIC LETTER FARSI YEH WITH INVERTED V +063E ; [.273E.0020.0002] # ARABIC LETTER FARSI YEH WITH TWO DOTS ABOVE +063F ; [.273F.0020.0002] # ARABIC LETTER FARSI YEH WITH THREE DOTS ABOVE +0620 ; [.2740.0020.0002] # ARABIC LETTER KASHMIRI YEH +0775 ; [.2741.0020.0002] # ARABIC LETTER FARSI YEH WITH EXTENDED ARABIC-INDIC DIGIT TWO ABOVE +0776 ; [.2742.0020.0002] # ARABIC LETTER FARSI YEH WITH EXTENDED ARABIC-INDIC DIGIT THREE ABOVE +0777 ; [.2743.0020.0002] # ARABIC LETTER FARSI YEH WITH EXTENDED ARABIC-INDIC DIGIT FOUR BELOW +08BA ; [.2744.0020.0002] # ARABIC LETTER YEH WITH TWO DOTS BELOW AND SMALL NOON ABOVE +06D2 ; [.2745.0020.0002] # ARABIC LETTER YEH BARREE +FBAF ; [.2745.0020.0019] # ARABIC LETTER YEH BARREE FINAL FORM +FBAE ; [.2745.0020.001A] # ARABIC LETTER YEH BARREE ISOLATED FORM +06D3 ; [.2745.0020.0002][.0000.0083.0002] # ARABIC LETTER YEH BARREE WITH HAMZA ABOVE +FBB1 ; [.2745.0020.0019][.0000.0083.0019] # ARABIC LETTER YEH BARREE WITH HAMZA ABOVE FINAL FORM +FBB0 ; [.2745.0020.001A][.0000.0083.001A] # ARABIC LETTER YEH BARREE WITH HAMZA ABOVE ISOLATED FORM +077A ; [.2746.0020.0002] # ARABIC LETTER YEH BARREE WITH EXTENDED ARABIC-INDIC DIGIT TWO ABOVE +077B ; [.2747.0020.0002] # ARABIC LETTER YEH BARREE WITH EXTENDED ARABIC-INDIC DIGIT THREE ABOVE +0710 ; [.2748.0020.0002] # SYRIAC LETTER ALAPH +0712 ; [.2749.0020.0002] # SYRIAC LETTER BETH +072D ; [.2749.0020.0004][.0000.011A.0004] # SYRIAC LETTER PERSIAN BHETH +0713 ; [.274A.0020.0002] # SYRIAC LETTER GAMAL +0714 ; [.274A.0020.0004][.0000.0119.0004] # SYRIAC LETTER GAMAL GARSHUNI +072E ; [.274A.0020.0004][.0000.011A.0004] # SYRIAC LETTER PERSIAN GHAMAL +0716 ; [.274B.0020.0002] # SYRIAC LETTER DOTLESS DALATH RISH +0715 ; [.274C.0020.0002] # SYRIAC LETTER DALATH +072F ; [.274C.0020.0004][.0000.011A.0004] # SYRIAC LETTER PERSIAN DHALATH +0717 ; [.274D.0020.0002] # SYRIAC LETTER HE +0718 ; [.274E.0020.0002] # SYRIAC LETTER WAW +0719 ; [.274F.0020.0002] # SYRIAC LETTER ZAIN +074D ; [.2750.0020.0002] # SYRIAC LETTER SOGDIAN ZHAIN +071A ; [.2751.0020.0002] # SYRIAC LETTER HETH +071B ; [.2752.0020.0002] # SYRIAC LETTER TETH +071C ; [.2752.0020.0004][.0000.0119.0004] # SYRIAC LETTER TETH GARSHUNI +071D ; [.2753.0020.0002] # SYRIAC LETTER YUDH +071E ; [.2754.0020.0002] # SYRIAC LETTER YUDH HE +071F ; [.2755.0020.0002] # SYRIAC LETTER KAPH +074E ; [.2756.0020.0002] # SYRIAC LETTER SOGDIAN KHAPH +0720 ; [.2757.0020.0002] # SYRIAC LETTER LAMADH +0721 ; [.2758.0020.0002] # SYRIAC LETTER MIM +0722 ; [.2759.0020.0002] # SYRIAC LETTER NUN +0723 ; [.275A.0020.0002] # SYRIAC LETTER SEMKATH +0724 ; [.275A.0020.0019] # SYRIAC LETTER FINAL SEMKATH +0725 ; [.275B.0020.0002] # SYRIAC LETTER E +0726 ; [.275C.0020.0002] # SYRIAC LETTER PE +0727 ; [.275C.0020.0004][.0000.0119.0004] # SYRIAC LETTER REVERSED PE +074F ; [.275D.0020.0002] # SYRIAC LETTER SOGDIAN FE +0728 ; [.275E.0020.0002] # SYRIAC LETTER SADHE +0729 ; [.275F.0020.0002] # SYRIAC LETTER QAPH +072A ; [.2760.0020.0002] # SYRIAC LETTER RISH +072B ; [.2761.0020.0002] # SYRIAC LETTER SHIN +072C ; [.2762.0020.0002] # SYRIAC LETTER TAW +0860 ; [.2763.0020.0002] # SYRIAC LETTER MALAYALAM NGA +0861 ; [.2764.0020.0002] # SYRIAC LETTER MALAYALAM JA +0862 ; [.2765.0020.0002] # SYRIAC LETTER MALAYALAM NYA +0863 ; [.2766.0020.0002] # SYRIAC LETTER MALAYALAM TTA +0864 ; [.2767.0020.0002] # SYRIAC LETTER MALAYALAM NNA +0865 ; [.2768.0020.0002] # SYRIAC LETTER MALAYALAM NNNA +0866 ; [.2769.0020.0002] # SYRIAC LETTER MALAYALAM BHA +0867 ; [.276A.0020.0002] # SYRIAC LETTER MALAYALAM RA +0868 ; [.276B.0020.0002] # SYRIAC LETTER MALAYALAM LLA +0869 ; [.276C.0020.0002] # SYRIAC LETTER MALAYALAM LLLA +086A ; [.276D.0020.0002] # SYRIAC LETTER MALAYALAM SSA +0840 ; [.276E.0020.0002] # MANDAIC LETTER HALQA +0841 ; [.276F.0020.0002] # MANDAIC LETTER AB +0842 ; [.2770.0020.0002] # MANDAIC LETTER AG +0843 ; [.2771.0020.0002] # MANDAIC LETTER AD +0844 ; [.2772.0020.0002] # MANDAIC LETTER AH +0845 ; [.2773.0020.0002] # MANDAIC LETTER USHENNA +0846 ; [.2774.0020.0002] # MANDAIC LETTER AZ +0847 ; [.2775.0020.0002] # MANDAIC LETTER IT +0848 ; [.2776.0020.0002] # MANDAIC LETTER ATT +0849 ; [.2777.0020.0002] # MANDAIC LETTER AKSA +084A ; [.2778.0020.0002] # MANDAIC LETTER AK +084B ; [.2779.0020.0002] # MANDAIC LETTER AL +084C ; [.277A.0020.0002] # MANDAIC LETTER AM +084D ; [.277B.0020.0002] # MANDAIC LETTER AN +084E ; [.277C.0020.0002] # MANDAIC LETTER AS +084F ; [.277D.0020.0002] # MANDAIC LETTER IN +0850 ; [.277E.0020.0002] # MANDAIC LETTER AP +0851 ; [.277F.0020.0002] # MANDAIC LETTER ASZ +0852 ; [.2780.0020.0002] # MANDAIC LETTER AQ +0853 ; [.2781.0020.0002] # MANDAIC LETTER AR +0854 ; [.2782.0020.0002] # MANDAIC LETTER ASH +0855 ; [.2783.0020.0002] # MANDAIC LETTER AT +0856 ; [.2784.0020.0002] # MANDAIC LETTER DUSHENNA +0857 ; [.2785.0020.0002] # MANDAIC LETTER KAD +0858 ; [.2786.0020.0002] # MANDAIC LETTER AIN +0780 ; [.2787.0020.0002] # THAANA LETTER HAA +0799 ; [.2788.0020.0002] # THAANA LETTER HHAA +079A ; [.2789.0020.0002] # THAANA LETTER KHAA +0781 ; [.278A.0020.0002] # THAANA LETTER SHAVIYANI +0782 ; [.278B.0020.0002] # THAANA LETTER NOONU +0783 ; [.278C.0020.0002] # THAANA LETTER RAA +079C ; [.278D.0020.0002] # THAANA LETTER ZAA +0784 ; [.278E.0020.0002] # THAANA LETTER BAA +0785 ; [.278F.0020.0002] # THAANA LETTER LHAVIYANI +0786 ; [.2790.0020.0002] # THAANA LETTER KAAFU +0787 ; [.2791.0020.0002] # THAANA LETTER ALIFU +07A2 ; [.2792.0020.0002] # THAANA LETTER AINU +07A3 ; [.2793.0020.0002] # THAANA LETTER GHAINU +0788 ; [.2794.0020.0002] # THAANA LETTER VAAVU +07A5 ; [.2795.0020.0002] # THAANA LETTER WAAVU +0789 ; [.2796.0020.0002] # THAANA LETTER MEEMU +078A ; [.2797.0020.0002] # THAANA LETTER FAAFU +078B ; [.2798.0020.0002] # THAANA LETTER DHAALU +079B ; [.2799.0020.0002] # THAANA LETTER THAALU +078C ; [.279A.0020.0002] # THAANA LETTER THAA +0798 ; [.279B.0020.0002] # THAANA LETTER TTAA +07A0 ; [.279C.0020.0002] # THAANA LETTER TO +07A1 ; [.279D.0020.0002] # THAANA LETTER ZO +078D ; [.279E.0020.0002] # THAANA LETTER LAAMU +078E ; [.279F.0020.0002] # THAANA LETTER GAAFU +07A4 ; [.27A0.0020.0002] # THAANA LETTER QAAFU +078F ; [.27A1.0020.0002] # THAANA LETTER GNAVIYANI +0790 ; [.27A2.0020.0002] # THAANA LETTER SEENU +079D ; [.27A3.0020.0002] # THAANA LETTER SHEENU +079E ; [.27A4.0020.0002] # THAANA LETTER SAADHU +079F ; [.27A5.0020.0002] # THAANA LETTER DAADHU +0791 ; [.27A6.0020.0002] # THAANA LETTER DAVIYANI +0792 ; [.27A7.0020.0002] # THAANA LETTER ZAVIYANI +0793 ; [.27A8.0020.0002] # THAANA LETTER TAVIYANI +0794 ; [.27A9.0020.0002] # THAANA LETTER YAA +0795 ; [.27AA.0020.0002] # THAANA LETTER PAVIYANI +0796 ; [.27AB.0020.0002] # THAANA LETTER JAVIYANI +0797 ; [.27AC.0020.0002] # THAANA LETTER CHAVIYANI +07B1 ; [.27AD.0020.0002] # THAANA LETTER NAA +07A6 ; [.27AE.0020.0002] # THAANA ABAFILI +07A7 ; [.27AF.0020.0002] # THAANA AABAAFILI +07A8 ; [.27B0.0020.0002] # THAANA IBIFILI +07A9 ; [.27B1.0020.0002] # THAANA EEBEEFILI +07AA ; [.27B2.0020.0002] # THAANA UBUFILI +07AB ; [.27B3.0020.0002] # THAANA OOBOOFILI +07AC ; [.27B4.0020.0002] # THAANA EBEFILI +07AD ; [.27B5.0020.0002] # THAANA EYBEYFILI +07AE ; [.27B6.0020.0002] # THAANA OBOFILI +07AF ; [.27B7.0020.0002] # THAANA OABOAFILI +07B0 ; [.27B8.0020.0002] # THAANA SUKUN +07CA ; [.27B9.0020.0002] # NKO LETTER A +07CB ; [.27BA.0020.0002] # NKO LETTER EE +07CC ; [.27BB.0020.0002] # NKO LETTER I +07CD ; [.27BC.0020.0002] # NKO LETTER E +07CE ; [.27BD.0020.0002] # NKO LETTER U +07CF ; [.27BE.0020.0002] # NKO LETTER OO +07D0 ; [.27BF.0020.0002] # NKO LETTER O +07D1 ; [.27C0.0020.0002] # NKO LETTER DAGBASINNA +07D2 ; [.27C1.0020.0002] # NKO LETTER N +07D3 ; [.27C2.0020.0002] # NKO LETTER BA +07D4 ; [.27C3.0020.0002] # NKO LETTER PA +07D5 ; [.27C4.0020.0002] # NKO LETTER TA +07D6 ; [.27C5.0020.0002] # NKO LETTER JA +07E8 ; [.27C5.0020.0004][.0000.0118.0004] # NKO LETTER JONA JA +07D7 ; [.27C6.0020.0002] # NKO LETTER CHA +07E9 ; [.27C6.0020.0004][.0000.0118.0004] # NKO LETTER JONA CHA +07D8 ; [.27C7.0020.0002] # NKO LETTER DA +07D9 ; [.27C8.0020.0002] # NKO LETTER RA +07EA ; [.27C8.0020.0004][.0000.0118.0004] # NKO LETTER JONA RA +07DA ; [.27C9.0020.0002] # NKO LETTER RRA +07DB ; [.27CA.0020.0002] # NKO LETTER SA +07DC ; [.27CB.0020.0002] # NKO LETTER GBA +07DD ; [.27CC.0020.0002] # NKO LETTER FA +07DE ; [.27CD.0020.0002] # NKO LETTER KA +07DF ; [.27CE.0020.0002] # NKO LETTER LA +07E0 ; [.27CF.0020.0002] # NKO LETTER NA WOLOSO +07E1 ; [.27D0.0020.0002] # NKO LETTER MA +07E2 ; [.27D1.0020.0002] # NKO LETTER NYA +07E3 ; [.27D2.0020.0002] # NKO LETTER NA +07E4 ; [.27D3.0020.0002] # NKO LETTER HA +07E5 ; [.27D4.0020.0002] # NKO LETTER WA +07E6 ; [.27D5.0020.0002] # NKO LETTER YA +07E7 ; [.27D6.0020.0002] # NKO LETTER NYA WOLOSO +07F4 ; [.27D7.0020.0002] # NKO HIGH TONE APOSTROPHE +07F5 ; [.27D8.0020.0002] # NKO LOW TONE APOSTROPHE +2D30 ; [.27D9.0020.0002] # TIFINAGH LETTER YA +2D31 ; [.27DA.0020.0002] # TIFINAGH LETTER YAB +2D32 ; [.27DB.0020.0002] # TIFINAGH LETTER YABH +2D33 ; [.27DC.0020.0002] # TIFINAGH LETTER YAG +2D34 ; [.27DD.0020.0002] # TIFINAGH LETTER YAGHH +2D35 ; [.27DE.0020.0002] # TIFINAGH LETTER BERBER ACADEMY YAJ +2D36 ; [.27DF.0020.0002] # TIFINAGH LETTER YAJ +2D37 ; [.27E0.0020.0002] # TIFINAGH LETTER YAD +2D38 ; [.27E1.0020.0002] # TIFINAGH LETTER YADH +2D39 ; [.27E2.0020.0002] # TIFINAGH LETTER YADD +2D3A ; [.27E3.0020.0002] # TIFINAGH LETTER YADDH +2D3B ; [.27E4.0020.0002] # TIFINAGH LETTER YEY +2D66 ; [.27E5.0020.0002] # TIFINAGH LETTER YE +2D3C ; [.27E6.0020.0002] # TIFINAGH LETTER YAF +2D3D ; [.27E7.0020.0002] # TIFINAGH LETTER YAK +2D3E ; [.27E8.0020.0002] # TIFINAGH LETTER TUAREG YAK +2D3F ; [.27E9.0020.0002] # TIFINAGH LETTER YAKHH +2D40 ; [.27EA.0020.0002] # TIFINAGH LETTER YAH +2D41 ; [.27EB.0020.0002] # TIFINAGH LETTER BERBER ACADEMY YAH +2D42 ; [.27EC.0020.0002] # TIFINAGH LETTER TUAREG YAH +2D43 ; [.27ED.0020.0002] # TIFINAGH LETTER YAHH +2D44 ; [.27EE.0020.0002] # TIFINAGH LETTER YAA +2D45 ; [.27EF.0020.0002] # TIFINAGH LETTER YAKH +2D46 ; [.27F0.0020.0002] # TIFINAGH LETTER TUAREG YAKH +2D47 ; [.27F1.0020.0002] # TIFINAGH LETTER YAQ +2D48 ; [.27F2.0020.0002] # TIFINAGH LETTER TUAREG YAQ +2D49 ; [.27F3.0020.0002] # TIFINAGH LETTER YI +2D4A ; [.27F4.0020.0002] # TIFINAGH LETTER YAZH +2D4B ; [.27F5.0020.0002] # TIFINAGH LETTER AHAGGAR YAZH +2D4C ; [.27F6.0020.0002] # TIFINAGH LETTER TUAREG YAZH +2D4D ; [.27F7.0020.0002] # TIFINAGH LETTER YAL +2D4E ; [.27F8.0020.0002] # TIFINAGH LETTER YAM +2D4F ; [.27F9.0020.0002] # TIFINAGH LETTER YAN +2D50 ; [.27FA.0020.0002] # TIFINAGH LETTER TUAREG YAGN +2D51 ; [.27FB.0020.0002] # TIFINAGH LETTER TUAREG YANG +2D52 ; [.27FC.0020.0002] # TIFINAGH LETTER YAP +2D53 ; [.27FD.0020.0002] # TIFINAGH LETTER YU +2D67 ; [.27FE.0020.0002] # TIFINAGH LETTER YO +2D54 ; [.27FF.0020.0002] # TIFINAGH LETTER YAR +2D55 ; [.2800.0020.0002] # TIFINAGH LETTER YARR +2D56 ; [.2801.0020.0002] # TIFINAGH LETTER YAGH +2D57 ; [.2802.0020.0002] # TIFINAGH LETTER TUAREG YAGH +2D58 ; [.2803.0020.0002] # TIFINAGH LETTER AYER YAGH +2D59 ; [.2804.0020.0002] # TIFINAGH LETTER YAS +2D5A ; [.2805.0020.0002] # TIFINAGH LETTER YASS +2D5B ; [.2806.0020.0002] # TIFINAGH LETTER YASH +2D5C ; [.2807.0020.0002] # TIFINAGH LETTER YAT +2D5D ; [.2808.0020.0002] # TIFINAGH LETTER YATH +2D5E ; [.2809.0020.0002] # TIFINAGH LETTER YACH +2D5F ; [.280A.0020.0002] # TIFINAGH LETTER YATT +2D60 ; [.280B.0020.0002] # TIFINAGH LETTER YAV +2D61 ; [.280C.0020.0002] # TIFINAGH LETTER YAW +2D62 ; [.280D.0020.0002] # TIFINAGH LETTER YAY +2D63 ; [.280E.0020.0002] # TIFINAGH LETTER YAZ +2D64 ; [.280F.0020.0002] # TIFINAGH LETTER TAWELLEMET YAZ +2D65 ; [.2810.0020.0002] # TIFINAGH LETTER YAZZ +2D6F ; [.2811.0020.0002] # TIFINAGH MODIFIER LETTER LABIALIZATION MARK +1200 ; [.2812.0020.0002] # ETHIOPIC SYLLABLE HA +1201 ; [.2813.0020.0002] # ETHIOPIC SYLLABLE HU +1202 ; [.2814.0020.0002] # ETHIOPIC SYLLABLE HI +1203 ; [.2815.0020.0002] # ETHIOPIC SYLLABLE HAA +1204 ; [.2816.0020.0002] # ETHIOPIC SYLLABLE HEE +1205 ; [.2817.0020.0002] # ETHIOPIC SYLLABLE HE +1206 ; [.2818.0020.0002] # ETHIOPIC SYLLABLE HO +1207 ; [.2819.0020.0002] # ETHIOPIC SYLLABLE HOA +1208 ; [.281A.0020.0002] # ETHIOPIC SYLLABLE LA +1209 ; [.281B.0020.0002] # ETHIOPIC SYLLABLE LU +120A ; [.281C.0020.0002] # ETHIOPIC SYLLABLE LI +120B ; [.281D.0020.0002] # ETHIOPIC SYLLABLE LAA +120C ; [.281E.0020.0002] # ETHIOPIC SYLLABLE LEE +120D ; [.281F.0020.0002] # ETHIOPIC SYLLABLE LE +120E ; [.2820.0020.0002] # ETHIOPIC SYLLABLE LO +120F ; [.2821.0020.0002] # ETHIOPIC SYLLABLE LWA +2D80 ; [.2822.0020.0002] # ETHIOPIC SYLLABLE LOA +1210 ; [.2823.0020.0002] # ETHIOPIC SYLLABLE HHA +1211 ; [.2824.0020.0002] # ETHIOPIC SYLLABLE HHU +1212 ; [.2825.0020.0002] # ETHIOPIC SYLLABLE HHI +1213 ; [.2826.0020.0002] # ETHIOPIC SYLLABLE HHAA +1214 ; [.2827.0020.0002] # ETHIOPIC SYLLABLE HHEE +1215 ; [.2828.0020.0002] # ETHIOPIC SYLLABLE HHE +1216 ; [.2829.0020.0002] # ETHIOPIC SYLLABLE HHO +1217 ; [.282A.0020.0002] # ETHIOPIC SYLLABLE HHWA +1218 ; [.282B.0020.0002] # ETHIOPIC SYLLABLE MA +1219 ; [.282C.0020.0002] # ETHIOPIC SYLLABLE MU +121A ; [.282D.0020.0002] # ETHIOPIC SYLLABLE MI +121B ; [.282E.0020.0002] # ETHIOPIC SYLLABLE MAA +121C ; [.282F.0020.0002] # ETHIOPIC SYLLABLE MEE +121D ; [.2830.0020.0002] # ETHIOPIC SYLLABLE ME +121E ; [.2831.0020.0002] # ETHIOPIC SYLLABLE MO +121F ; [.2832.0020.0002] # ETHIOPIC SYLLABLE MWA +1380 ; [.2833.0020.0002] # ETHIOPIC SYLLABLE SEBATBEIT MWA +1381 ; [.2834.0020.0002] # ETHIOPIC SYLLABLE MWI +1382 ; [.2835.0020.0002] # ETHIOPIC SYLLABLE MWEE +1383 ; [.2836.0020.0002] # ETHIOPIC SYLLABLE MWE +2D81 ; [.2837.0020.0002] # ETHIOPIC SYLLABLE MOA +1220 ; [.2838.0020.0002] # ETHIOPIC SYLLABLE SZA +1221 ; [.2839.0020.0002] # ETHIOPIC SYLLABLE SZU +1222 ; [.283A.0020.0002] # ETHIOPIC SYLLABLE SZI +1223 ; [.283B.0020.0002] # ETHIOPIC SYLLABLE SZAA +1224 ; [.283C.0020.0002] # ETHIOPIC SYLLABLE SZEE +1225 ; [.283D.0020.0002] # ETHIOPIC SYLLABLE SZE +1226 ; [.283E.0020.0002] # ETHIOPIC SYLLABLE SZO +1227 ; [.283F.0020.0002] # ETHIOPIC SYLLABLE SZWA +1228 ; [.2840.0020.0002] # ETHIOPIC SYLLABLE RA +1229 ; [.2841.0020.0002] # ETHIOPIC SYLLABLE RU +122A ; [.2842.0020.0002] # ETHIOPIC SYLLABLE RI +122B ; [.2843.0020.0002] # ETHIOPIC SYLLABLE RAA +122C ; [.2844.0020.0002] # ETHIOPIC SYLLABLE REE +122D ; [.2845.0020.0002] # ETHIOPIC SYLLABLE RE +122E ; [.2846.0020.0002] # ETHIOPIC SYLLABLE RO +122F ; [.2847.0020.0002] # ETHIOPIC SYLLABLE RWA +2D82 ; [.2848.0020.0002] # ETHIOPIC SYLLABLE ROA +1230 ; [.2849.0020.0002] # ETHIOPIC SYLLABLE SA +1231 ; [.284A.0020.0002] # ETHIOPIC SYLLABLE SU +1232 ; [.284B.0020.0002] # ETHIOPIC SYLLABLE SI +1233 ; [.284C.0020.0002] # ETHIOPIC SYLLABLE SAA +1234 ; [.284D.0020.0002] # ETHIOPIC SYLLABLE SEE +1235 ; [.284E.0020.0002] # ETHIOPIC SYLLABLE SE +1236 ; [.284F.0020.0002] # ETHIOPIC SYLLABLE SO +1237 ; [.2850.0020.0002] # ETHIOPIC SYLLABLE SWA +2D83 ; [.2851.0020.0002] # ETHIOPIC SYLLABLE SOA +AB01 ; [.2852.0020.0002] # ETHIOPIC SYLLABLE TTHU +AB02 ; [.2853.0020.0002] # ETHIOPIC SYLLABLE TTHI +AB03 ; [.2854.0020.0002] # ETHIOPIC SYLLABLE TTHAA +AB04 ; [.2855.0020.0002] # ETHIOPIC SYLLABLE TTHEE +AB05 ; [.2856.0020.0002] # ETHIOPIC SYLLABLE TTHE +AB06 ; [.2857.0020.0002] # ETHIOPIC SYLLABLE TTHO +1238 ; [.2858.0020.0002] # ETHIOPIC SYLLABLE SHA +1239 ; [.2859.0020.0002] # ETHIOPIC SYLLABLE SHU +123A ; [.285A.0020.0002] # ETHIOPIC SYLLABLE SHI +123B ; [.285B.0020.0002] # ETHIOPIC SYLLABLE SHAA +123C ; [.285C.0020.0002] # ETHIOPIC SYLLABLE SHEE +123D ; [.285D.0020.0002] # ETHIOPIC SYLLABLE SHE +123E ; [.285E.0020.0002] # ETHIOPIC SYLLABLE SHO +123F ; [.285F.0020.0002] # ETHIOPIC SYLLABLE SHWA +2D84 ; [.2860.0020.0002] # ETHIOPIC SYLLABLE SHOA +1240 ; [.2861.0020.0002] # ETHIOPIC SYLLABLE QA +1241 ; [.2862.0020.0002] # ETHIOPIC SYLLABLE QU +1242 ; [.2863.0020.0002] # ETHIOPIC SYLLABLE QI +1243 ; [.2864.0020.0002] # ETHIOPIC SYLLABLE QAA +1244 ; [.2865.0020.0002] # ETHIOPIC SYLLABLE QEE +1245 ; [.2866.0020.0002] # ETHIOPIC SYLLABLE QE +1246 ; [.2867.0020.0002] # ETHIOPIC SYLLABLE QO +1247 ; [.2868.0020.0002] # ETHIOPIC SYLLABLE QOA +1248 ; [.2869.0020.0002] # ETHIOPIC SYLLABLE QWA +124A ; [.286A.0020.0002] # ETHIOPIC SYLLABLE QWI +124B ; [.286B.0020.0002] # ETHIOPIC SYLLABLE QWAA +124C ; [.286C.0020.0002] # ETHIOPIC SYLLABLE QWEE +124D ; [.286D.0020.0002] # ETHIOPIC SYLLABLE QWE +1250 ; [.286E.0020.0002] # ETHIOPIC SYLLABLE QHA +1251 ; [.286F.0020.0002] # ETHIOPIC SYLLABLE QHU +1252 ; [.2870.0020.0002] # ETHIOPIC SYLLABLE QHI +1253 ; [.2871.0020.0002] # ETHIOPIC SYLLABLE QHAA +1254 ; [.2872.0020.0002] # ETHIOPIC SYLLABLE QHEE +1255 ; [.2873.0020.0002] # ETHIOPIC SYLLABLE QHE +1256 ; [.2874.0020.0002] # ETHIOPIC SYLLABLE QHO +1258 ; [.2875.0020.0002] # ETHIOPIC SYLLABLE QHWA +125A ; [.2876.0020.0002] # ETHIOPIC SYLLABLE QHWI +125B ; [.2877.0020.0002] # ETHIOPIC SYLLABLE QHWAA +125C ; [.2878.0020.0002] # ETHIOPIC SYLLABLE QHWEE +125D ; [.2879.0020.0002] # ETHIOPIC SYLLABLE QHWE +1260 ; [.287A.0020.0002] # ETHIOPIC SYLLABLE BA +1261 ; [.287B.0020.0002] # ETHIOPIC SYLLABLE BU +1262 ; [.287C.0020.0002] # ETHIOPIC SYLLABLE BI +1263 ; [.287D.0020.0002] # ETHIOPIC SYLLABLE BAA +1264 ; [.287E.0020.0002] # ETHIOPIC SYLLABLE BEE +1265 ; [.287F.0020.0002] # ETHIOPIC SYLLABLE BE +1266 ; [.2880.0020.0002] # ETHIOPIC SYLLABLE BO +1267 ; [.2881.0020.0002] # ETHIOPIC SYLLABLE BWA +1384 ; [.2882.0020.0002] # ETHIOPIC SYLLABLE SEBATBEIT BWA +1385 ; [.2883.0020.0002] # ETHIOPIC SYLLABLE BWI +1386 ; [.2884.0020.0002] # ETHIOPIC SYLLABLE BWEE +1387 ; [.2885.0020.0002] # ETHIOPIC SYLLABLE BWE +2D85 ; [.2886.0020.0002] # ETHIOPIC SYLLABLE BOA +1268 ; [.2887.0020.0002] # ETHIOPIC SYLLABLE VA +1269 ; [.2888.0020.0002] # ETHIOPIC SYLLABLE VU +126A ; [.2889.0020.0002] # ETHIOPIC SYLLABLE VI +126B ; [.288A.0020.0002] # ETHIOPIC SYLLABLE VAA +126C ; [.288B.0020.0002] # ETHIOPIC SYLLABLE VEE +126D ; [.288C.0020.0002] # ETHIOPIC SYLLABLE VE +126E ; [.288D.0020.0002] # ETHIOPIC SYLLABLE VO +126F ; [.288E.0020.0002] # ETHIOPIC SYLLABLE VWA +1270 ; [.288F.0020.0002] # ETHIOPIC SYLLABLE TA +1271 ; [.2890.0020.0002] # ETHIOPIC SYLLABLE TU +1272 ; [.2891.0020.0002] # ETHIOPIC SYLLABLE TI +1273 ; [.2892.0020.0002] # ETHIOPIC SYLLABLE TAA +1274 ; [.2893.0020.0002] # ETHIOPIC SYLLABLE TEE +1275 ; [.2894.0020.0002] # ETHIOPIC SYLLABLE TE +1276 ; [.2895.0020.0002] # ETHIOPIC SYLLABLE TO +1277 ; [.2896.0020.0002] # ETHIOPIC SYLLABLE TWA +2D86 ; [.2897.0020.0002] # ETHIOPIC SYLLABLE TOA +1278 ; [.2898.0020.0002] # ETHIOPIC SYLLABLE CA +1279 ; [.2899.0020.0002] # ETHIOPIC SYLLABLE CU +127A ; [.289A.0020.0002] # ETHIOPIC SYLLABLE CI +127B ; [.289B.0020.0002] # ETHIOPIC SYLLABLE CAA +127C ; [.289C.0020.0002] # ETHIOPIC SYLLABLE CEE +127D ; [.289D.0020.0002] # ETHIOPIC SYLLABLE CE +127E ; [.289E.0020.0002] # ETHIOPIC SYLLABLE CO +127F ; [.289F.0020.0002] # ETHIOPIC SYLLABLE CWA +2D87 ; [.28A0.0020.0002] # ETHIOPIC SYLLABLE COA +1280 ; [.28A1.0020.0002] # ETHIOPIC SYLLABLE XA +1281 ; [.28A2.0020.0002] # ETHIOPIC SYLLABLE XU +1282 ; [.28A3.0020.0002] # ETHIOPIC SYLLABLE XI +1283 ; [.28A4.0020.0002] # ETHIOPIC SYLLABLE XAA +1284 ; [.28A5.0020.0002] # ETHIOPIC SYLLABLE XEE +1285 ; [.28A6.0020.0002] # ETHIOPIC SYLLABLE XE +1286 ; [.28A7.0020.0002] # ETHIOPIC SYLLABLE XO +1287 ; [.28A8.0020.0002] # ETHIOPIC SYLLABLE XOA +1288 ; [.28A9.0020.0002] # ETHIOPIC SYLLABLE XWA +128A ; [.28AA.0020.0002] # ETHIOPIC SYLLABLE XWI +128B ; [.28AB.0020.0002] # ETHIOPIC SYLLABLE XWAA +128C ; [.28AC.0020.0002] # ETHIOPIC SYLLABLE XWEE +128D ; [.28AD.0020.0002] # ETHIOPIC SYLLABLE XWE +1290 ; [.28AE.0020.0002] # ETHIOPIC SYLLABLE NA +1291 ; [.28AF.0020.0002] # ETHIOPIC SYLLABLE NU +1292 ; [.28B0.0020.0002] # ETHIOPIC SYLLABLE NI +1293 ; [.28B1.0020.0002] # ETHIOPIC SYLLABLE NAA +1294 ; [.28B2.0020.0002] # ETHIOPIC SYLLABLE NEE +1295 ; [.28B3.0020.0002] # ETHIOPIC SYLLABLE NE +1296 ; [.28B4.0020.0002] # ETHIOPIC SYLLABLE NO +1297 ; [.28B5.0020.0002] # ETHIOPIC SYLLABLE NWA +2D88 ; [.28B6.0020.0002] # ETHIOPIC SYLLABLE NOA +1298 ; [.28B7.0020.0002] # ETHIOPIC SYLLABLE NYA +1299 ; [.28B8.0020.0002] # ETHIOPIC SYLLABLE NYU +129A ; [.28B9.0020.0002] # ETHIOPIC SYLLABLE NYI +129B ; [.28BA.0020.0002] # ETHIOPIC SYLLABLE NYAA +129C ; [.28BB.0020.0002] # ETHIOPIC SYLLABLE NYEE +129D ; [.28BC.0020.0002] # ETHIOPIC SYLLABLE NYE +129E ; [.28BD.0020.0002] # ETHIOPIC SYLLABLE NYO +129F ; [.28BE.0020.0002] # ETHIOPIC SYLLABLE NYWA +2D89 ; [.28BF.0020.0002] # ETHIOPIC SYLLABLE NYOA +12A0 ; [.28C0.0020.0002] # ETHIOPIC SYLLABLE GLOTTAL A +12A1 ; [.28C1.0020.0002] # ETHIOPIC SYLLABLE GLOTTAL U +12A2 ; [.28C2.0020.0002] # ETHIOPIC SYLLABLE GLOTTAL I +12A3 ; [.28C3.0020.0002] # ETHIOPIC SYLLABLE GLOTTAL AA +12A4 ; [.28C4.0020.0002] # ETHIOPIC SYLLABLE GLOTTAL EE +12A5 ; [.28C5.0020.0002] # ETHIOPIC SYLLABLE GLOTTAL E +12A6 ; [.28C6.0020.0002] # ETHIOPIC SYLLABLE GLOTTAL O +12A7 ; [.28C7.0020.0002] # ETHIOPIC SYLLABLE GLOTTAL WA +2D8A ; [.28C8.0020.0002] # ETHIOPIC SYLLABLE GLOTTAL OA +12A8 ; [.28C9.0020.0002] # ETHIOPIC SYLLABLE KA +12A9 ; [.28CA.0020.0002] # ETHIOPIC SYLLABLE KU +12AA ; [.28CB.0020.0002] # ETHIOPIC SYLLABLE KI +12AB ; [.28CC.0020.0002] # ETHIOPIC SYLLABLE KAA +12AC ; [.28CD.0020.0002] # ETHIOPIC SYLLABLE KEE +12AD ; [.28CE.0020.0002] # ETHIOPIC SYLLABLE KE +12AE ; [.28CF.0020.0002] # ETHIOPIC SYLLABLE KO +12AF ; [.28D0.0020.0002] # ETHIOPIC SYLLABLE KOA +12B0 ; [.28D1.0020.0002] # ETHIOPIC SYLLABLE KWA +12B2 ; [.28D2.0020.0002] # ETHIOPIC SYLLABLE KWI +12B3 ; [.28D3.0020.0002] # ETHIOPIC SYLLABLE KWAA +12B4 ; [.28D4.0020.0002] # ETHIOPIC SYLLABLE KWEE +12B5 ; [.28D5.0020.0002] # ETHIOPIC SYLLABLE KWE +12B8 ; [.28D6.0020.0002] # ETHIOPIC SYLLABLE KXA +12B9 ; [.28D7.0020.0002] # ETHIOPIC SYLLABLE KXU +12BA ; [.28D8.0020.0002] # ETHIOPIC SYLLABLE KXI +12BB ; [.28D9.0020.0002] # ETHIOPIC SYLLABLE KXAA +12BC ; [.28DA.0020.0002] # ETHIOPIC SYLLABLE KXEE +12BD ; [.28DB.0020.0002] # ETHIOPIC SYLLABLE KXE +12BE ; [.28DC.0020.0002] # ETHIOPIC SYLLABLE KXO +12C0 ; [.28DD.0020.0002] # ETHIOPIC SYLLABLE KXWA +12C2 ; [.28DE.0020.0002] # ETHIOPIC SYLLABLE KXWI +12C3 ; [.28DF.0020.0002] # ETHIOPIC SYLLABLE KXWAA +12C4 ; [.28E0.0020.0002] # ETHIOPIC SYLLABLE KXWEE +12C5 ; [.28E1.0020.0002] # ETHIOPIC SYLLABLE KXWE +12C8 ; [.28E2.0020.0002] # ETHIOPIC SYLLABLE WA +12C9 ; [.28E3.0020.0002] # ETHIOPIC SYLLABLE WU +12CA ; [.28E4.0020.0002] # ETHIOPIC SYLLABLE WI +12CB ; [.28E5.0020.0002] # ETHIOPIC SYLLABLE WAA +12CC ; [.28E6.0020.0002] # ETHIOPIC SYLLABLE WEE +12CD ; [.28E7.0020.0002] # ETHIOPIC SYLLABLE WE +12CE ; [.28E8.0020.0002] # ETHIOPIC SYLLABLE WO +12CF ; [.28E9.0020.0002] # ETHIOPIC SYLLABLE WOA +12D0 ; [.28EA.0020.0002] # ETHIOPIC SYLLABLE PHARYNGEAL A +12D1 ; [.28EB.0020.0002] # ETHIOPIC SYLLABLE PHARYNGEAL U +12D2 ; [.28EC.0020.0002] # ETHIOPIC SYLLABLE PHARYNGEAL I +12D3 ; [.28ED.0020.0002] # ETHIOPIC SYLLABLE PHARYNGEAL AA +12D4 ; [.28EE.0020.0002] # ETHIOPIC SYLLABLE PHARYNGEAL EE +12D5 ; [.28EF.0020.0002] # ETHIOPIC SYLLABLE PHARYNGEAL E +12D6 ; [.28F0.0020.0002] # ETHIOPIC SYLLABLE PHARYNGEAL O +12D8 ; [.28F1.0020.0002] # ETHIOPIC SYLLABLE ZA +12D9 ; [.28F2.0020.0002] # ETHIOPIC SYLLABLE ZU +12DA ; [.28F3.0020.0002] # ETHIOPIC SYLLABLE ZI +12DB ; [.28F4.0020.0002] # ETHIOPIC SYLLABLE ZAA +12DC ; [.28F5.0020.0002] # ETHIOPIC SYLLABLE ZEE +12DD ; [.28F6.0020.0002] # ETHIOPIC SYLLABLE ZE +12DE ; [.28F7.0020.0002] # ETHIOPIC SYLLABLE ZO +12DF ; [.28F8.0020.0002] # ETHIOPIC SYLLABLE ZWA +2D8B ; [.28F9.0020.0002] # ETHIOPIC SYLLABLE ZOA +AB11 ; [.28FA.0020.0002] # ETHIOPIC SYLLABLE DZU +AB12 ; [.28FB.0020.0002] # ETHIOPIC SYLLABLE DZI +AB13 ; [.28FC.0020.0002] # ETHIOPIC SYLLABLE DZAA +AB14 ; [.28FD.0020.0002] # ETHIOPIC SYLLABLE DZEE +AB15 ; [.28FE.0020.0002] # ETHIOPIC SYLLABLE DZE +AB16 ; [.28FF.0020.0002] # ETHIOPIC SYLLABLE DZO +12E0 ; [.2900.0020.0002] # ETHIOPIC SYLLABLE ZHA +12E1 ; [.2901.0020.0002] # ETHIOPIC SYLLABLE ZHU +12E2 ; [.2902.0020.0002] # ETHIOPIC SYLLABLE ZHI +12E3 ; [.2903.0020.0002] # ETHIOPIC SYLLABLE ZHAA +12E4 ; [.2904.0020.0002] # ETHIOPIC SYLLABLE ZHEE +12E5 ; [.2905.0020.0002] # ETHIOPIC SYLLABLE ZHE +12E6 ; [.2906.0020.0002] # ETHIOPIC SYLLABLE ZHO +12E7 ; [.2907.0020.0002] # ETHIOPIC SYLLABLE ZHWA +12E8 ; [.2908.0020.0002] # ETHIOPIC SYLLABLE YA +12E9 ; [.2909.0020.0002] # ETHIOPIC SYLLABLE YU +12EA ; [.290A.0020.0002] # ETHIOPIC SYLLABLE YI +12EB ; [.290B.0020.0002] # ETHIOPIC SYLLABLE YAA +12EC ; [.290C.0020.0002] # ETHIOPIC SYLLABLE YEE +12ED ; [.290D.0020.0002] # ETHIOPIC SYLLABLE YE +12EE ; [.290E.0020.0002] # ETHIOPIC SYLLABLE YO +12EF ; [.290F.0020.0002] # ETHIOPIC SYLLABLE YOA +12F0 ; [.2910.0020.0002] # ETHIOPIC SYLLABLE DA +12F1 ; [.2911.0020.0002] # ETHIOPIC SYLLABLE DU +12F2 ; [.2912.0020.0002] # ETHIOPIC SYLLABLE DI +12F3 ; [.2913.0020.0002] # ETHIOPIC SYLLABLE DAA +12F4 ; [.2914.0020.0002] # ETHIOPIC SYLLABLE DEE +12F5 ; [.2915.0020.0002] # ETHIOPIC SYLLABLE DE +12F6 ; [.2916.0020.0002] # ETHIOPIC SYLLABLE DO +12F7 ; [.2917.0020.0002] # ETHIOPIC SYLLABLE DWA +2D8C ; [.2918.0020.0002] # ETHIOPIC SYLLABLE DOA +AB09 ; [.2919.0020.0002] # ETHIOPIC SYLLABLE DDHU +AB0A ; [.291A.0020.0002] # ETHIOPIC SYLLABLE DDHI +AB0B ; [.291B.0020.0002] # ETHIOPIC SYLLABLE DDHAA +AB0C ; [.291C.0020.0002] # ETHIOPIC SYLLABLE DDHEE +AB0D ; [.291D.0020.0002] # ETHIOPIC SYLLABLE DDHE +AB0E ; [.291E.0020.0002] # ETHIOPIC SYLLABLE DDHO +12F8 ; [.291F.0020.0002] # ETHIOPIC SYLLABLE DDA +12F9 ; [.2920.0020.0002] # ETHIOPIC SYLLABLE DDU +12FA ; [.2921.0020.0002] # ETHIOPIC SYLLABLE DDI +12FB ; [.2922.0020.0002] # ETHIOPIC SYLLABLE DDAA +12FC ; [.2923.0020.0002] # ETHIOPIC SYLLABLE DDEE +12FD ; [.2924.0020.0002] # ETHIOPIC SYLLABLE DDE +12FE ; [.2925.0020.0002] # ETHIOPIC SYLLABLE DDO +12FF ; [.2926.0020.0002] # ETHIOPIC SYLLABLE DDWA +2D8D ; [.2927.0020.0002] # ETHIOPIC SYLLABLE DDOA +1300 ; [.2928.0020.0002] # ETHIOPIC SYLLABLE JA +1301 ; [.2929.0020.0002] # ETHIOPIC SYLLABLE JU +1302 ; [.292A.0020.0002] # ETHIOPIC SYLLABLE JI +1303 ; [.292B.0020.0002] # ETHIOPIC SYLLABLE JAA +1304 ; [.292C.0020.0002] # ETHIOPIC SYLLABLE JEE +1305 ; [.292D.0020.0002] # ETHIOPIC SYLLABLE JE +1306 ; [.292E.0020.0002] # ETHIOPIC SYLLABLE JO +1307 ; [.292F.0020.0002] # ETHIOPIC SYLLABLE JWA +2D8E ; [.2930.0020.0002] # ETHIOPIC SYLLABLE JOA +1308 ; [.2931.0020.0002] # ETHIOPIC SYLLABLE GA +1309 ; [.2932.0020.0002] # ETHIOPIC SYLLABLE GU +130A ; [.2933.0020.0002] # ETHIOPIC SYLLABLE GI +130B ; [.2934.0020.0002] # ETHIOPIC SYLLABLE GAA +130C ; [.2935.0020.0002] # ETHIOPIC SYLLABLE GEE +130D ; [.2936.0020.0002] # ETHIOPIC SYLLABLE GE +130E ; [.2937.0020.0002] # ETHIOPIC SYLLABLE GO +130F ; [.2938.0020.0002] # ETHIOPIC SYLLABLE GOA +1310 ; [.2939.0020.0002] # ETHIOPIC SYLLABLE GWA +1312 ; [.293A.0020.0002] # ETHIOPIC SYLLABLE GWI +1313 ; [.293B.0020.0002] # ETHIOPIC SYLLABLE GWAA +1314 ; [.293C.0020.0002] # ETHIOPIC SYLLABLE GWEE +1315 ; [.293D.0020.0002] # ETHIOPIC SYLLABLE GWE +1318 ; [.293E.0020.0002] # ETHIOPIC SYLLABLE GGA +1319 ; [.293F.0020.0002] # ETHIOPIC SYLLABLE GGU +131A ; [.2940.0020.0002] # ETHIOPIC SYLLABLE GGI +131B ; [.2941.0020.0002] # ETHIOPIC SYLLABLE GGAA +131C ; [.2942.0020.0002] # ETHIOPIC SYLLABLE GGEE +131D ; [.2943.0020.0002] # ETHIOPIC SYLLABLE GGE +131E ; [.2944.0020.0002] # ETHIOPIC SYLLABLE GGO +131F ; [.2945.0020.0002] # ETHIOPIC SYLLABLE GGWAA +2D93 ; [.2946.0020.0002] # ETHIOPIC SYLLABLE GGWA +2D94 ; [.2947.0020.0002] # ETHIOPIC SYLLABLE GGWI +2D95 ; [.2948.0020.0002] # ETHIOPIC SYLLABLE GGWEE +2D96 ; [.2949.0020.0002] # ETHIOPIC SYLLABLE GGWE +1320 ; [.294A.0020.0002] # ETHIOPIC SYLLABLE THA +1321 ; [.294B.0020.0002] # ETHIOPIC SYLLABLE THU +1322 ; [.294C.0020.0002] # ETHIOPIC SYLLABLE THI +1323 ; [.294D.0020.0002] # ETHIOPIC SYLLABLE THAA +1324 ; [.294E.0020.0002] # ETHIOPIC SYLLABLE THEE +1325 ; [.294F.0020.0002] # ETHIOPIC SYLLABLE THE +1326 ; [.2950.0020.0002] # ETHIOPIC SYLLABLE THO +1327 ; [.2951.0020.0002] # ETHIOPIC SYLLABLE THWA +2D8F ; [.2952.0020.0002] # ETHIOPIC SYLLABLE THOA +1328 ; [.2953.0020.0002] # ETHIOPIC SYLLABLE CHA +1329 ; [.2954.0020.0002] # ETHIOPIC SYLLABLE CHU +132A ; [.2955.0020.0002] # ETHIOPIC SYLLABLE CHI +132B ; [.2956.0020.0002] # ETHIOPIC SYLLABLE CHAA +132C ; [.2957.0020.0002] # ETHIOPIC SYLLABLE CHEE +132D ; [.2958.0020.0002] # ETHIOPIC SYLLABLE CHE +132E ; [.2959.0020.0002] # ETHIOPIC SYLLABLE CHO +132F ; [.295A.0020.0002] # ETHIOPIC SYLLABLE CHWA +2D90 ; [.295B.0020.0002] # ETHIOPIC SYLLABLE CHOA +AB20 ; [.295C.0020.0002] # ETHIOPIC SYLLABLE CCHHA +AB21 ; [.295D.0020.0002] # ETHIOPIC SYLLABLE CCHHU +AB22 ; [.295E.0020.0002] # ETHIOPIC SYLLABLE CCHHI +AB23 ; [.295F.0020.0002] # ETHIOPIC SYLLABLE CCHHAA +AB24 ; [.2960.0020.0002] # ETHIOPIC SYLLABLE CCHHEE +AB25 ; [.2961.0020.0002] # ETHIOPIC SYLLABLE CCHHE +AB26 ; [.2962.0020.0002] # ETHIOPIC SYLLABLE CCHHO +1330 ; [.2963.0020.0002] # ETHIOPIC SYLLABLE PHA +1331 ; [.2964.0020.0002] # ETHIOPIC SYLLABLE PHU +1332 ; [.2965.0020.0002] # ETHIOPIC SYLLABLE PHI +1333 ; [.2966.0020.0002] # ETHIOPIC SYLLABLE PHAA +1334 ; [.2967.0020.0002] # ETHIOPIC SYLLABLE PHEE +1335 ; [.2968.0020.0002] # ETHIOPIC SYLLABLE PHE +1336 ; [.2969.0020.0002] # ETHIOPIC SYLLABLE PHO +1337 ; [.296A.0020.0002] # ETHIOPIC SYLLABLE PHWA +2D91 ; [.296B.0020.0002] # ETHIOPIC SYLLABLE PHOA +1338 ; [.296C.0020.0002] # ETHIOPIC SYLLABLE TSA +1339 ; [.296D.0020.0002] # ETHIOPIC SYLLABLE TSU +133A ; [.296E.0020.0002] # ETHIOPIC SYLLABLE TSI +133B ; [.296F.0020.0002] # ETHIOPIC SYLLABLE TSAA +133C ; [.2970.0020.0002] # ETHIOPIC SYLLABLE TSEE +133D ; [.2971.0020.0002] # ETHIOPIC SYLLABLE TSE +133E ; [.2972.0020.0002] # ETHIOPIC SYLLABLE TSO +133F ; [.2973.0020.0002] # ETHIOPIC SYLLABLE TSWA +AB28 ; [.2974.0020.0002] # ETHIOPIC SYLLABLE BBA +AB29 ; [.2975.0020.0002] # ETHIOPIC SYLLABLE BBU +AB2A ; [.2976.0020.0002] # ETHIOPIC SYLLABLE BBI +AB2B ; [.2977.0020.0002] # ETHIOPIC SYLLABLE BBAA +AB2C ; [.2978.0020.0002] # ETHIOPIC SYLLABLE BBEE +AB2D ; [.2979.0020.0002] # ETHIOPIC SYLLABLE BBE +AB2E ; [.297A.0020.0002] # ETHIOPIC SYLLABLE BBO +1340 ; [.297B.0020.0002] # ETHIOPIC SYLLABLE TZA +1341 ; [.297C.0020.0002] # ETHIOPIC SYLLABLE TZU +1342 ; [.297D.0020.0002] # ETHIOPIC SYLLABLE TZI +1343 ; [.297E.0020.0002] # ETHIOPIC SYLLABLE TZAA +1344 ; [.297F.0020.0002] # ETHIOPIC SYLLABLE TZEE +1345 ; [.2980.0020.0002] # ETHIOPIC SYLLABLE TZE +1346 ; [.2981.0020.0002] # ETHIOPIC SYLLABLE TZO +1347 ; [.2982.0020.0002] # ETHIOPIC SYLLABLE TZOA +1348 ; [.2983.0020.0002] # ETHIOPIC SYLLABLE FA +1349 ; [.2984.0020.0002] # ETHIOPIC SYLLABLE FU +134A ; [.2985.0020.0002] # ETHIOPIC SYLLABLE FI +134B ; [.2986.0020.0002] # ETHIOPIC SYLLABLE FAA +134C ; [.2987.0020.0002] # ETHIOPIC SYLLABLE FEE +134D ; [.2988.0020.0002] # ETHIOPIC SYLLABLE FE +134E ; [.2989.0020.0002] # ETHIOPIC SYLLABLE FO +134F ; [.298A.0020.0002] # ETHIOPIC SYLLABLE FWA +1388 ; [.298B.0020.0002] # ETHIOPIC SYLLABLE SEBATBEIT FWA +1389 ; [.298C.0020.0002] # ETHIOPIC SYLLABLE FWI +138A ; [.298D.0020.0002] # ETHIOPIC SYLLABLE FWEE +138B ; [.298E.0020.0002] # ETHIOPIC SYLLABLE FWE +1350 ; [.298F.0020.0002] # ETHIOPIC SYLLABLE PA +1351 ; [.2990.0020.0002] # ETHIOPIC SYLLABLE PU +1352 ; [.2991.0020.0002] # ETHIOPIC SYLLABLE PI +1353 ; [.2992.0020.0002] # ETHIOPIC SYLLABLE PAA +1354 ; [.2993.0020.0002] # ETHIOPIC SYLLABLE PEE +1355 ; [.2994.0020.0002] # ETHIOPIC SYLLABLE PE +1356 ; [.2995.0020.0002] # ETHIOPIC SYLLABLE PO +1357 ; [.2996.0020.0002] # ETHIOPIC SYLLABLE PWA +138C ; [.2997.0020.0002] # ETHIOPIC SYLLABLE SEBATBEIT PWA +138D ; [.2998.0020.0002] # ETHIOPIC SYLLABLE PWI +138E ; [.2999.0020.0002] # ETHIOPIC SYLLABLE PWEE +138F ; [.299A.0020.0002] # ETHIOPIC SYLLABLE PWE +2D92 ; [.299B.0020.0002] # ETHIOPIC SYLLABLE POA +1358 ; [.299C.0020.0002] # ETHIOPIC SYLLABLE RYA +1359 ; [.299D.0020.0002] # ETHIOPIC SYLLABLE MYA +135A ; [.299E.0020.0002] # ETHIOPIC SYLLABLE FYA +2DA0 ; [.299F.0020.0002] # ETHIOPIC SYLLABLE SSA +2DA1 ; [.29A0.0020.0002] # ETHIOPIC SYLLABLE SSU +2DA2 ; [.29A1.0020.0002] # ETHIOPIC SYLLABLE SSI +2DA3 ; [.29A2.0020.0002] # ETHIOPIC SYLLABLE SSAA +2DA4 ; [.29A3.0020.0002] # ETHIOPIC SYLLABLE SSEE +2DA5 ; [.29A4.0020.0002] # ETHIOPIC SYLLABLE SSE +2DA6 ; [.29A5.0020.0002] # ETHIOPIC SYLLABLE SSO +2DA8 ; [.29A6.0020.0002] # ETHIOPIC SYLLABLE CCA +2DA9 ; [.29A7.0020.0002] # ETHIOPIC SYLLABLE CCU +2DAA ; [.29A8.0020.0002] # ETHIOPIC SYLLABLE CCI +2DAB ; [.29A9.0020.0002] # ETHIOPIC SYLLABLE CCAA +2DAC ; [.29AA.0020.0002] # ETHIOPIC SYLLABLE CCEE +2DAD ; [.29AB.0020.0002] # ETHIOPIC SYLLABLE CCE +2DAE ; [.29AC.0020.0002] # ETHIOPIC SYLLABLE CCO +2DB0 ; [.29AD.0020.0002] # ETHIOPIC SYLLABLE ZZA +2DB1 ; [.29AE.0020.0002] # ETHIOPIC SYLLABLE ZZU +2DB2 ; [.29AF.0020.0002] # ETHIOPIC SYLLABLE ZZI +2DB3 ; [.29B0.0020.0002] # ETHIOPIC SYLLABLE ZZAA +2DB4 ; [.29B1.0020.0002] # ETHIOPIC SYLLABLE ZZEE +2DB5 ; [.29B2.0020.0002] # ETHIOPIC SYLLABLE ZZE +2DB6 ; [.29B3.0020.0002] # ETHIOPIC SYLLABLE ZZO +2DB8 ; [.29B4.0020.0002] # ETHIOPIC SYLLABLE CCHA +2DB9 ; [.29B5.0020.0002] # ETHIOPIC SYLLABLE CCHU +2DBA ; [.29B6.0020.0002] # ETHIOPIC SYLLABLE CCHI +2DBB ; [.29B7.0020.0002] # ETHIOPIC SYLLABLE CCHAA +2DBC ; [.29B8.0020.0002] # ETHIOPIC SYLLABLE CCHEE +2DBD ; [.29B9.0020.0002] # ETHIOPIC SYLLABLE CCHE +2DBE ; [.29BA.0020.0002] # ETHIOPIC SYLLABLE CCHO +2DC0 ; [.29BB.0020.0002] # ETHIOPIC SYLLABLE QYA +2DC1 ; [.29BC.0020.0002] # ETHIOPIC SYLLABLE QYU +2DC2 ; [.29BD.0020.0002] # ETHIOPIC SYLLABLE QYI +2DC3 ; [.29BE.0020.0002] # ETHIOPIC SYLLABLE QYAA +2DC4 ; [.29BF.0020.0002] # ETHIOPIC SYLLABLE QYEE +2DC5 ; [.29C0.0020.0002] # ETHIOPIC SYLLABLE QYE +2DC6 ; [.29C1.0020.0002] # ETHIOPIC SYLLABLE QYO +2DC8 ; [.29C2.0020.0002] # ETHIOPIC SYLLABLE KYA +2DC9 ; [.29C3.0020.0002] # ETHIOPIC SYLLABLE KYU +2DCA ; [.29C4.0020.0002] # ETHIOPIC SYLLABLE KYI +2DCB ; [.29C5.0020.0002] # ETHIOPIC SYLLABLE KYAA +2DCC ; [.29C6.0020.0002] # ETHIOPIC SYLLABLE KYEE +2DCD ; [.29C7.0020.0002] # ETHIOPIC SYLLABLE KYE +2DCE ; [.29C8.0020.0002] # ETHIOPIC SYLLABLE KYO +2DD0 ; [.29C9.0020.0002] # ETHIOPIC SYLLABLE XYA +2DD1 ; [.29CA.0020.0002] # ETHIOPIC SYLLABLE XYU +2DD2 ; [.29CB.0020.0002] # ETHIOPIC SYLLABLE XYI +2DD3 ; [.29CC.0020.0002] # ETHIOPIC SYLLABLE XYAA +2DD4 ; [.29CD.0020.0002] # ETHIOPIC SYLLABLE XYEE +2DD5 ; [.29CE.0020.0002] # ETHIOPIC SYLLABLE XYE +2DD6 ; [.29CF.0020.0002] # ETHIOPIC SYLLABLE XYO +2DD8 ; [.29D0.0020.0002] # ETHIOPIC SYLLABLE GYA +2DD9 ; [.29D1.0020.0002] # ETHIOPIC SYLLABLE GYU +2DDA ; [.29D2.0020.0002] # ETHIOPIC SYLLABLE GYI +2DDB ; [.29D3.0020.0002] # ETHIOPIC SYLLABLE GYAA +2DDC ; [.29D4.0020.0002] # ETHIOPIC SYLLABLE GYEE +2DDD ; [.29D5.0020.0002] # ETHIOPIC SYLLABLE GYE +2DDE ; [.29D6.0020.0002] # ETHIOPIC SYLLABLE GYO +0950 ; [.29D7.0020.0002] # DEVANAGARI OM +A8FD ; [.29D8.0020.0002] # DEVANAGARI JAIN OM +0972 ; [.29D9.0020.0002] # DEVANAGARI LETTER CANDRA A +0904 ; [.29DA.0020.0002] # DEVANAGARI LETTER SHORT A +0905 ; [.29DB.0020.0002] # DEVANAGARI LETTER A +0906 ; [.29DC.0020.0002] # DEVANAGARI LETTER AA +0973 ; [.29DD.0020.0002] # DEVANAGARI LETTER OE +0974 ; [.29DE.0020.0002] # DEVANAGARI LETTER OOE +0975 ; [.29DF.0020.0002] # DEVANAGARI LETTER AW +0976 ; [.29E0.0020.0002] # DEVANAGARI LETTER UE +0977 ; [.29E1.0020.0002] # DEVANAGARI LETTER UUE +0907 ; [.29E2.0020.0002] # DEVANAGARI LETTER I +0908 ; [.29E3.0020.0002] # DEVANAGARI LETTER II +0909 ; [.29E4.0020.0002] # DEVANAGARI LETTER U +090A ; [.29E5.0020.0002] # DEVANAGARI LETTER UU +090B ; [.29E6.0020.0002] # DEVANAGARI LETTER VOCALIC R +0960 ; [.29E7.0020.0002] # DEVANAGARI LETTER VOCALIC RR +090C ; [.29E8.0020.0002] # DEVANAGARI LETTER VOCALIC L +0961 ; [.29E9.0020.0002] # DEVANAGARI LETTER VOCALIC LL +090D ; [.29EA.0020.0002] # DEVANAGARI LETTER CANDRA E +090E ; [.29EB.0020.0002] # DEVANAGARI LETTER SHORT E +090F ; [.29EC.0020.0002] # DEVANAGARI LETTER E +0910 ; [.29ED.0020.0002] # DEVANAGARI LETTER AI +A8FE ; [.29EE.0020.0002] # DEVANAGARI LETTER AY +0911 ; [.29EF.0020.0002] # DEVANAGARI LETTER CANDRA O +0912 ; [.29F0.0020.0002] # DEVANAGARI LETTER SHORT O +0913 ; [.29F1.0020.0002] # DEVANAGARI LETTER O +0914 ; [.29F2.0020.0002] # DEVANAGARI LETTER AU +0915 ; [.29F3.0020.0002] # DEVANAGARI LETTER KA +0958 ; [.29F3.0020.0002][.0000.00C2.0002] # DEVANAGARI LETTER QA +0916 ; [.29F4.0020.0002] # DEVANAGARI LETTER KHA +0959 ; [.29F4.0020.0002][.0000.00C2.0002] # DEVANAGARI LETTER KHHA +0917 ; [.29F5.0020.0002] # DEVANAGARI LETTER GA +095A ; [.29F5.0020.0002][.0000.00C2.0002] # DEVANAGARI LETTER GHHA +097B ; [.29F6.0020.0002] # DEVANAGARI LETTER GGA +0918 ; [.29F7.0020.0002] # DEVANAGARI LETTER GHA +0919 ; [.29F8.0020.0002] # DEVANAGARI LETTER NGA +091A ; [.29F9.0020.0002] # DEVANAGARI LETTER CA +091B ; [.29FA.0020.0002] # DEVANAGARI LETTER CHA +091C ; [.29FB.0020.0002] # DEVANAGARI LETTER JA +095B ; [.29FB.0020.0002][.0000.00C2.0002] # DEVANAGARI LETTER ZA +0979 ; [.29FC.0020.0002] # DEVANAGARI LETTER ZHA +097C ; [.29FD.0020.0002] # DEVANAGARI LETTER JJA +091D ; [.29FE.0020.0002] # DEVANAGARI LETTER JHA +091E ; [.29FF.0020.0002] # DEVANAGARI LETTER NYA +091F ; [.2A00.0020.0002] # DEVANAGARI LETTER TTA +0920 ; [.2A01.0020.0002] # DEVANAGARI LETTER TTHA +0978 ; [.2A02.0020.0002] # DEVANAGARI LETTER MARWARI DDA +0921 ; [.2A03.0020.0002] # DEVANAGARI LETTER DDA +095C ; [.2A03.0020.0002][.0000.00C2.0002] # DEVANAGARI LETTER DDDHA +097E ; [.2A04.0020.0002] # DEVANAGARI LETTER DDDA +0922 ; [.2A05.0020.0002] # DEVANAGARI LETTER DDHA +095D ; [.2A05.0020.0002][.0000.00C2.0002] # DEVANAGARI LETTER RHA +0923 ; [.2A06.0020.0002] # DEVANAGARI LETTER NNA +0924 ; [.2A07.0020.0002] # DEVANAGARI LETTER TA +0925 ; [.2A08.0020.0002] # DEVANAGARI LETTER THA +0926 ; [.2A09.0020.0002] # DEVANAGARI LETTER DA +0927 ; [.2A0A.0020.0002] # DEVANAGARI LETTER DHA +0928 ; [.2A0B.0020.0002] # DEVANAGARI LETTER NA +0929 ; [.2A0B.0020.0002][.0000.00C2.0002] # DEVANAGARI LETTER NNNA +092A ; [.2A0C.0020.0002] # DEVANAGARI LETTER PA +092B ; [.2A0D.0020.0002] # DEVANAGARI LETTER PHA +095E ; [.2A0D.0020.0002][.0000.00C2.0002] # DEVANAGARI LETTER FA +092C ; [.2A0E.0020.0002] # DEVANAGARI LETTER BA +097F ; [.2A0F.0020.0002] # DEVANAGARI LETTER BBA +092D ; [.2A10.0020.0002] # DEVANAGARI LETTER BHA +092E ; [.2A11.0020.0002] # DEVANAGARI LETTER MA +092F ; [.2A12.0020.0002] # DEVANAGARI LETTER YA +095F ; [.2A12.0020.0002][.0000.00C2.0002] # DEVANAGARI LETTER YYA +097A ; [.2A13.0020.0002] # DEVANAGARI LETTER HEAVY YA +0930 ; [.2A14.0020.0002] # DEVANAGARI LETTER RA +0931 ; [.2A14.0020.0002][.0000.00C2.0002] # DEVANAGARI LETTER RRA +0932 ; [.2A15.0020.0002] # DEVANAGARI LETTER LA +0933 ; [.2A16.0020.0002] # DEVANAGARI LETTER LLA +0934 ; [.2A16.0020.0002][.0000.00C2.0002] # DEVANAGARI LETTER LLLA +0935 ; [.2A17.0020.0002] # DEVANAGARI LETTER VA +0936 ; [.2A18.0020.0002] # DEVANAGARI LETTER SHA +0937 ; [.2A19.0020.0002] # DEVANAGARI LETTER SSA +0938 ; [.2A1A.0020.0002] # DEVANAGARI LETTER SA +0939 ; [.2A1B.0020.0002] # DEVANAGARI LETTER HA +093D ; [.2A1C.0020.0002] # DEVANAGARI SIGN AVAGRAHA +097D ; [.2A1D.0020.0002] # DEVANAGARI LETTER GLOTTAL STOP +1CE9 ; [.2A1E.0020.0002] # VEDIC SIGN ANUSVARA ANTARGOMUKHA +1CEA ; [.2A1E.0020.0004] # VEDIC SIGN ANUSVARA BAHIRGOMUKHA +1CEB ; [.2A1E.0020.0004] # VEDIC SIGN ANUSVARA VAMAGOMUKHA +1CEC ; [.2A1E.0020.0004] # VEDIC SIGN ANUSVARA VAMAGOMUKHA WITH TAIL +1CEE ; [.2A1E.0020.0004] # VEDIC SIGN HEXIFORM LONG ANUSVARA +1CEF ; [.2A1E.0020.0004] # VEDIC SIGN LONG ANUSVARA +1CF0 ; [.2A1E.0020.0004] # VEDIC SIGN RTHANG LONG ANUSVARA +1CF1 ; [.2A1E.0020.0004] # VEDIC SIGN ANUSVARA UBHAYATO MUKHA +1CFA ; [.2A1E.0020.0004] # VEDIC SIGN DOUBLE ANUSVARA ANTARGOMUKHA +1CF5 ; [.2A1F.0020.0002] # VEDIC SIGN JIHVAMULIYA +1CF6 ; [.2A20.0020.0002] # VEDIC SIGN UPADHMANIYA +A8F2 ; [.2A21.0020.0002] # DEVANAGARI SIGN SPACING CANDRABINDU +A8F3 ; [.2A21.0020.0004] # DEVANAGARI SIGN CANDRABINDU VIRAMA +A8F4 ; [.2A21.0020.0004] # DEVANAGARI SIGN DOUBLE CANDRABINDU VIRAMA +A8F5 ; [.2A21.0020.0004] # DEVANAGARI SIGN CANDRABINDU TWO +A8F6 ; [.2A21.0020.0004] # DEVANAGARI SIGN CANDRABINDU THREE +A8F7 ; [.2A21.0020.0004] # DEVANAGARI SIGN CANDRABINDU AVAGRAHA +A8FB ; [.2A22.0020.0002] # DEVANAGARI HEADSTROKE +093E ; [.2A23.0020.0002] # DEVANAGARI VOWEL SIGN AA +093A ; [.2A24.0020.0002] # DEVANAGARI VOWEL SIGN OE +093B ; [.2A25.0020.0002] # DEVANAGARI VOWEL SIGN OOE +094F ; [.2A26.0020.0002] # DEVANAGARI VOWEL SIGN AW +0956 ; [.2A27.0020.0002] # DEVANAGARI VOWEL SIGN UE +0957 ; [.2A28.0020.0002] # DEVANAGARI VOWEL SIGN UUE +093F ; [.2A29.0020.0002] # DEVANAGARI VOWEL SIGN I +0940 ; [.2A2A.0020.0002] # DEVANAGARI VOWEL SIGN II +0941 ; [.2A2B.0020.0002] # DEVANAGARI VOWEL SIGN U +0942 ; [.2A2C.0020.0002] # DEVANAGARI VOWEL SIGN UU +0943 ; [.2A2D.0020.0002] # DEVANAGARI VOWEL SIGN VOCALIC R +0944 ; [.2A2E.0020.0002] # DEVANAGARI VOWEL SIGN VOCALIC RR +0962 ; [.2A2F.0020.0002] # DEVANAGARI VOWEL SIGN VOCALIC L +0963 ; [.2A30.0020.0002] # DEVANAGARI VOWEL SIGN VOCALIC LL +0945 ; [.2A31.0020.0002] # DEVANAGARI VOWEL SIGN CANDRA E +0955 ; [.2A32.0020.0002] # DEVANAGARI VOWEL SIGN CANDRA LONG E +0946 ; [.2A33.0020.0002] # DEVANAGARI VOWEL SIGN SHORT E +0947 ; [.2A34.0020.0002] # DEVANAGARI VOWEL SIGN E +094E ; [.2A35.0020.0002] # DEVANAGARI VOWEL SIGN PRISHTHAMATRA E +0948 ; [.2A36.0020.0002] # DEVANAGARI VOWEL SIGN AI +A8FF ; [.2A37.0020.0002] # DEVANAGARI VOWEL SIGN AY +0949 ; [.2A38.0020.0002] # DEVANAGARI VOWEL SIGN CANDRA O +094A ; [.2A39.0020.0002] # DEVANAGARI VOWEL SIGN SHORT O +094B ; [.2A3A.0020.0002] # DEVANAGARI VOWEL SIGN O +094C ; [.2A3B.0020.0002] # DEVANAGARI VOWEL SIGN AU +094D ; [.2A3C.0020.0002] # DEVANAGARI SIGN VIRAMA +0980 ; [.2A3D.0020.0002] # BENGALI ANJI +0985 ; [.2A3E.0020.0002] # BENGALI LETTER A +0986 ; [.2A3F.0020.0002] # BENGALI LETTER AA +0987 ; [.2A40.0020.0002] # BENGALI LETTER I +0988 ; [.2A41.0020.0002] # BENGALI LETTER II +0989 ; [.2A42.0020.0002] # BENGALI LETTER U +098A ; [.2A43.0020.0002] # BENGALI LETTER UU +098B ; [.2A44.0020.0002] # BENGALI LETTER VOCALIC R +09E0 ; [.2A45.0020.0002] # BENGALI LETTER VOCALIC RR +098C ; [.2A46.0020.0002] # BENGALI LETTER VOCALIC L +09E1 ; [.2A47.0020.0002] # BENGALI LETTER VOCALIC LL +098F ; [.2A48.0020.0002] # BENGALI LETTER E +0990 ; [.2A49.0020.0002] # BENGALI LETTER AI +0993 ; [.2A4A.0020.0002] # BENGALI LETTER O +0994 ; [.2A4B.0020.0002] # BENGALI LETTER AU +0995 ; [.2A4C.0020.0002] # BENGALI LETTER KA +0996 ; [.2A4D.0020.0002] # BENGALI LETTER KHA +0997 ; [.2A4E.0020.0002] # BENGALI LETTER GA +0998 ; [.2A4F.0020.0002] # BENGALI LETTER GHA +0999 ; [.2A50.0020.0002] # BENGALI LETTER NGA +099A ; [.2A51.0020.0002] # BENGALI LETTER CA +099B ; [.2A52.0020.0002] # BENGALI LETTER CHA +099C ; [.2A53.0020.0002] # BENGALI LETTER JA +099D ; [.2A54.0020.0002] # BENGALI LETTER JHA +099E ; [.2A55.0020.0002] # BENGALI LETTER NYA +099F ; [.2A56.0020.0002] # BENGALI LETTER TTA +09A0 ; [.2A57.0020.0002] # BENGALI LETTER TTHA +09A1 ; [.2A58.0020.0002] # BENGALI LETTER DDA +09DC ; [.2A58.0020.0002][.0000.00C2.0002] # BENGALI LETTER RRA +09A2 ; [.2A59.0020.0002] # BENGALI LETTER DDHA +09DD ; [.2A59.0020.0002][.0000.00C2.0002] # BENGALI LETTER RHA +09A3 ; [.2A5A.0020.0002] # BENGALI LETTER NNA +09A4 ; [.2A5B.0020.0002] # BENGALI LETTER TA +09CE ; [.2A5B.0020.0004][.2A7C.0020.0004] # BENGALI LETTER KHANDA TA +09A5 ; [.2A5C.0020.0002] # BENGALI LETTER THA +09A6 ; [.2A5D.0020.0002] # BENGALI LETTER DA +09A7 ; [.2A5E.0020.0002] # BENGALI LETTER DHA +09A8 ; [.2A5F.0020.0002] # BENGALI LETTER NA +09AA ; [.2A60.0020.0002] # BENGALI LETTER PA +09AB ; [.2A61.0020.0002] # BENGALI LETTER PHA +09AC ; [.2A62.0020.0002] # BENGALI LETTER BA +09AD ; [.2A63.0020.0002] # BENGALI LETTER BHA +09AE ; [.2A64.0020.0002] # BENGALI LETTER MA +09AF ; [.2A65.0020.0002] # BENGALI LETTER YA +09DF ; [.2A65.0020.0002][.0000.00C2.0002] # BENGALI LETTER YYA +09B0 ; [.2A66.0020.0002] # BENGALI LETTER RA +09F0 ; [.2A67.0020.0002] # BENGALI LETTER RA WITH MIDDLE DIAGONAL +09B2 ; [.2A68.0020.0002] # BENGALI LETTER LA +09F1 ; [.2A69.0020.0002] # BENGALI LETTER RA WITH LOWER DIAGONAL +09B6 ; [.2A6A.0020.0002] # BENGALI LETTER SHA +09B7 ; [.2A6B.0020.0002] # BENGALI LETTER SSA +09B8 ; [.2A6C.0020.0002] # BENGALI LETTER SA +09B9 ; [.2A6D.0020.0002] # BENGALI LETTER HA +09BD ; [.2A6E.0020.0002] # BENGALI SIGN AVAGRAHA +09BE ; [.2A6F.0020.0002] # BENGALI VOWEL SIGN AA +09BF ; [.2A70.0020.0002] # BENGALI VOWEL SIGN I +09C0 ; [.2A71.0020.0002] # BENGALI VOWEL SIGN II +09C1 ; [.2A72.0020.0002] # BENGALI VOWEL SIGN U +09C2 ; [.2A73.0020.0002] # BENGALI VOWEL SIGN UU +09C3 ; [.2A74.0020.0002] # BENGALI VOWEL SIGN VOCALIC R +09C4 ; [.2A75.0020.0002] # BENGALI VOWEL SIGN VOCALIC RR +09E2 ; [.2A76.0020.0002] # BENGALI VOWEL SIGN VOCALIC L +09E3 ; [.2A77.0020.0002] # BENGALI VOWEL SIGN VOCALIC LL +09C7 ; [.2A78.0020.0002] # BENGALI VOWEL SIGN E +09C8 ; [.2A79.0020.0002] # BENGALI VOWEL SIGN AI +09CB ; [.2A7A.0020.0002] # BENGALI VOWEL SIGN O +09C7 09BE ; [.2A7A.0020.0002] # BENGALI VOWEL SIGN O +09CC ; [.2A7B.0020.0002] # BENGALI VOWEL SIGN AU +09C7 09D7 ; [.2A7B.0020.0002] # BENGALI VOWEL SIGN AU +09CD ; [.2A7C.0020.0002] # BENGALI SIGN VIRAMA +09D7 ; [.2A7D.0020.0002] # BENGALI AU LENGTH MARK +09FC ; [.2A7E.0020.0002] # BENGALI LETTER VEDIC ANUSVARA +0A74 ; [.2A7F.0020.0002] # GURMUKHI EK ONKAR +0A73 ; [.2A80.0020.0002] # GURMUKHI URA +0A09 ; [.2A81.0020.0002] # GURMUKHI LETTER U +0A0A ; [.2A82.0020.0002] # GURMUKHI LETTER UU +0A13 ; [.2A83.0020.0002] # GURMUKHI LETTER OO +0A05 ; [.2A84.0020.0002] # GURMUKHI LETTER A +0A06 ; [.2A85.0020.0002] # GURMUKHI LETTER AA +0A10 ; [.2A86.0020.0002] # GURMUKHI LETTER AI +0A14 ; [.2A87.0020.0002] # GURMUKHI LETTER AU +0A72 ; [.2A88.0020.0002] # GURMUKHI IRI +0A07 ; [.2A89.0020.0002] # GURMUKHI LETTER I +0A08 ; [.2A8A.0020.0002] # GURMUKHI LETTER II +0A0F ; [.2A8B.0020.0002] # GURMUKHI LETTER EE +0A38 ; [.2A8C.0020.0002] # GURMUKHI LETTER SA +0A36 ; [.2A8C.0020.0002][.0000.00C2.0002] # GURMUKHI LETTER SHA +0A39 ; [.2A8D.0020.0002] # GURMUKHI LETTER HA +0A51 ; [.2A8E.0020.0002] # GURMUKHI SIGN UDAAT +0A15 ; [.2A8F.0020.0002] # GURMUKHI LETTER KA +0A16 ; [.2A90.0020.0002] # GURMUKHI LETTER KHA +0A59 ; [.2A90.0020.0002][.0000.00C2.0002] # GURMUKHI LETTER KHHA +0A17 ; [.2A91.0020.0002] # GURMUKHI LETTER GA +0A5A ; [.2A91.0020.0002][.0000.00C2.0002] # GURMUKHI LETTER GHHA +0A18 ; [.2A92.0020.0002] # GURMUKHI LETTER GHA +0A19 ; [.2A93.0020.0002] # GURMUKHI LETTER NGA +0A1A ; [.2A94.0020.0002] # GURMUKHI LETTER CA +0A1B ; [.2A95.0020.0002] # GURMUKHI LETTER CHA +0A1C ; [.2A96.0020.0002] # GURMUKHI LETTER JA +0A5B ; [.2A96.0020.0002][.0000.00C2.0002] # GURMUKHI LETTER ZA +0A1D ; [.2A97.0020.0002] # GURMUKHI LETTER JHA +0A1E ; [.2A98.0020.0002] # GURMUKHI LETTER NYA +0A1F ; [.2A99.0020.0002] # GURMUKHI LETTER TTA +0A20 ; [.2A9A.0020.0002] # GURMUKHI LETTER TTHA +0A21 ; [.2A9B.0020.0002] # GURMUKHI LETTER DDA +0A22 ; [.2A9C.0020.0002] # GURMUKHI LETTER DDHA +0A23 ; [.2A9D.0020.0002] # GURMUKHI LETTER NNA +0A24 ; [.2A9E.0020.0002] # GURMUKHI LETTER TA +0A25 ; [.2A9F.0020.0002] # GURMUKHI LETTER THA +0A26 ; [.2AA0.0020.0002] # GURMUKHI LETTER DA +0A27 ; [.2AA1.0020.0002] # GURMUKHI LETTER DHA +0A28 ; [.2AA2.0020.0002] # GURMUKHI LETTER NA +0A2A ; [.2AA3.0020.0002] # GURMUKHI LETTER PA +0A2B ; [.2AA4.0020.0002] # GURMUKHI LETTER PHA +0A5E ; [.2AA4.0020.0002][.0000.00C2.0002] # GURMUKHI LETTER FA +0A2C ; [.2AA5.0020.0002] # GURMUKHI LETTER BA +0A2D ; [.2AA6.0020.0002] # GURMUKHI LETTER BHA +0A2E ; [.2AA7.0020.0002] # GURMUKHI LETTER MA +0A2F ; [.2AA8.0020.0002] # GURMUKHI LETTER YA +0A75 ; [.2AA9.0020.0002] # GURMUKHI SIGN YAKASH +0A30 ; [.2AAA.0020.0002] # GURMUKHI LETTER RA +0A32 ; [.2AAB.0020.0002] # GURMUKHI LETTER LA +0A33 ; [.2AAB.0020.0002][.0000.00C2.0002] # GURMUKHI LETTER LLA +0A35 ; [.2AAC.0020.0002] # GURMUKHI LETTER VA +0A5C ; [.2AAD.0020.0002] # GURMUKHI LETTER RRA +0A3E ; [.2AAE.0020.0002] # GURMUKHI VOWEL SIGN AA +0A3F ; [.2AAF.0020.0002] # GURMUKHI VOWEL SIGN I +0A40 ; [.2AB0.0020.0002] # GURMUKHI VOWEL SIGN II +0A41 ; [.2AB1.0020.0002] # GURMUKHI VOWEL SIGN U +0A42 ; [.2AB2.0020.0002] # GURMUKHI VOWEL SIGN UU +0A47 ; [.2AB3.0020.0002] # GURMUKHI VOWEL SIGN EE +0A48 ; [.2AB4.0020.0002] # GURMUKHI VOWEL SIGN AI +0A4B ; [.2AB5.0020.0002] # GURMUKHI VOWEL SIGN OO +0A4C ; [.2AB6.0020.0002] # GURMUKHI VOWEL SIGN AU +0A4D ; [.2AB7.0020.0002] # GURMUKHI SIGN VIRAMA +0AD0 ; [.2AB8.0020.0002] # GUJARATI OM +0A85 ; [.2AB9.0020.0002] # GUJARATI LETTER A +0A86 ; [.2ABA.0020.0002] # GUJARATI LETTER AA +0A87 ; [.2ABB.0020.0002] # GUJARATI LETTER I +0A88 ; [.2ABC.0020.0002] # GUJARATI LETTER II +0A89 ; [.2ABD.0020.0002] # GUJARATI LETTER U +0A8A ; [.2ABE.0020.0002] # GUJARATI LETTER UU +0A8B ; [.2ABF.0020.0002] # GUJARATI LETTER VOCALIC R +0AE0 ; [.2AC0.0020.0002] # GUJARATI LETTER VOCALIC RR +0A8C ; [.2AC1.0020.0002] # GUJARATI LETTER VOCALIC L +0AE1 ; [.2AC2.0020.0002] # GUJARATI LETTER VOCALIC LL +0A8D ; [.2AC3.0020.0002] # GUJARATI VOWEL CANDRA E +0A8F ; [.2AC4.0020.0002] # GUJARATI LETTER E +0A90 ; [.2AC5.0020.0002] # GUJARATI LETTER AI +0A91 ; [.2AC6.0020.0002] # GUJARATI VOWEL CANDRA O +0A93 ; [.2AC7.0020.0002] # GUJARATI LETTER O +0A94 ; [.2AC8.0020.0002] # GUJARATI LETTER AU +0A95 ; [.2AC9.0020.0002] # GUJARATI LETTER KA +0A96 ; [.2ACA.0020.0002] # GUJARATI LETTER KHA +0A97 ; [.2ACB.0020.0002] # GUJARATI LETTER GA +0A98 ; [.2ACC.0020.0002] # GUJARATI LETTER GHA +0A99 ; [.2ACD.0020.0002] # GUJARATI LETTER NGA +0A9A ; [.2ACE.0020.0002] # GUJARATI LETTER CA +0A9B ; [.2ACF.0020.0002] # GUJARATI LETTER CHA +0A9C ; [.2AD0.0020.0002] # GUJARATI LETTER JA +0AF9 ; [.2AD1.0020.0002] # GUJARATI LETTER ZHA +0A9D ; [.2AD2.0020.0002] # GUJARATI LETTER JHA +0A9E ; [.2AD3.0020.0002] # GUJARATI LETTER NYA +0A9F ; [.2AD4.0020.0002] # GUJARATI LETTER TTA +0AA0 ; [.2AD5.0020.0002] # GUJARATI LETTER TTHA +0AA1 ; [.2AD6.0020.0002] # GUJARATI LETTER DDA +0AA2 ; [.2AD7.0020.0002] # GUJARATI LETTER DDHA +0AA3 ; [.2AD8.0020.0002] # GUJARATI LETTER NNA +0AA4 ; [.2AD9.0020.0002] # GUJARATI LETTER TA +0AA5 ; [.2ADA.0020.0002] # GUJARATI LETTER THA +0AA6 ; [.2ADB.0020.0002] # GUJARATI LETTER DA +0AA7 ; [.2ADC.0020.0002] # GUJARATI LETTER DHA +0AA8 ; [.2ADD.0020.0002] # GUJARATI LETTER NA +0AAA ; [.2ADE.0020.0002] # GUJARATI LETTER PA +0AAB ; [.2ADF.0020.0002] # GUJARATI LETTER PHA +0AAC ; [.2AE0.0020.0002] # GUJARATI LETTER BA +0AAD ; [.2AE1.0020.0002] # GUJARATI LETTER BHA +0AAE ; [.2AE2.0020.0002] # GUJARATI LETTER MA +0AAF ; [.2AE3.0020.0002] # GUJARATI LETTER YA +0AB0 ; [.2AE4.0020.0002] # GUJARATI LETTER RA +0AB2 ; [.2AE5.0020.0002] # GUJARATI LETTER LA +0AB5 ; [.2AE6.0020.0002] # GUJARATI LETTER VA +0AB6 ; [.2AE7.0020.0002] # GUJARATI LETTER SHA +0AB7 ; [.2AE8.0020.0002] # GUJARATI LETTER SSA +0AB8 ; [.2AE9.0020.0002] # GUJARATI LETTER SA +0AB9 ; [.2AEA.0020.0002] # GUJARATI LETTER HA +0AB3 ; [.2AEB.0020.0002] # GUJARATI LETTER LLA +0ABD ; [.2AEC.0020.0002] # GUJARATI SIGN AVAGRAHA +0ABE ; [.2AED.0020.0002] # GUJARATI VOWEL SIGN AA +0ABF ; [.2AEE.0020.0002] # GUJARATI VOWEL SIGN I +0AC0 ; [.2AEF.0020.0002] # GUJARATI VOWEL SIGN II +0AC1 ; [.2AF0.0020.0002] # GUJARATI VOWEL SIGN U +0AC2 ; [.2AF1.0020.0002] # GUJARATI VOWEL SIGN UU +0AC3 ; [.2AF2.0020.0002] # GUJARATI VOWEL SIGN VOCALIC R +0AC4 ; [.2AF3.0020.0002] # GUJARATI VOWEL SIGN VOCALIC RR +0AE2 ; [.2AF4.0020.0002] # GUJARATI VOWEL SIGN VOCALIC L +0AE3 ; [.2AF5.0020.0002] # GUJARATI VOWEL SIGN VOCALIC LL +0AC5 ; [.2AF6.0020.0002] # GUJARATI VOWEL SIGN CANDRA E +0AC7 ; [.2AF7.0020.0002] # GUJARATI VOWEL SIGN E +0AC8 ; [.2AF8.0020.0002] # GUJARATI VOWEL SIGN AI +0AC9 ; [.2AF9.0020.0002] # GUJARATI VOWEL SIGN CANDRA O +0ACB ; [.2AFA.0020.0002] # GUJARATI VOWEL SIGN O +0ACC ; [.2AFB.0020.0002] # GUJARATI VOWEL SIGN AU +0ACD ; [.2AFC.0020.0002] # GUJARATI SIGN VIRAMA +0B05 ; [.2AFD.0020.0002] # ORIYA LETTER A +0B06 ; [.2AFE.0020.0002] # ORIYA LETTER AA +0B07 ; [.2AFF.0020.0002] # ORIYA LETTER I +0B08 ; [.2B00.0020.0002] # ORIYA LETTER II +0B09 ; [.2B01.0020.0002] # ORIYA LETTER U +0B0A ; [.2B02.0020.0002] # ORIYA LETTER UU +0B0B ; [.2B03.0020.0002] # ORIYA LETTER VOCALIC R +0B60 ; [.2B04.0020.0002] # ORIYA LETTER VOCALIC RR +0B0C ; [.2B05.0020.0002] # ORIYA LETTER VOCALIC L +0B61 ; [.2B06.0020.0002] # ORIYA LETTER VOCALIC LL +0B0F ; [.2B07.0020.0002] # ORIYA LETTER E +0B10 ; [.2B08.0020.0002] # ORIYA LETTER AI +0B13 ; [.2B09.0020.0002] # ORIYA LETTER O +0B14 ; [.2B0A.0020.0002] # ORIYA LETTER AU +0B15 ; [.2B0B.0020.0002] # ORIYA LETTER KA +0B16 ; [.2B0C.0020.0002] # ORIYA LETTER KHA +0B17 ; [.2B0D.0020.0002] # ORIYA LETTER GA +0B18 ; [.2B0E.0020.0002] # ORIYA LETTER GHA +0B19 ; [.2B0F.0020.0002] # ORIYA LETTER NGA +0B1A ; [.2B10.0020.0002] # ORIYA LETTER CA +0B1B ; [.2B11.0020.0002] # ORIYA LETTER CHA +0B1C ; [.2B12.0020.0002] # ORIYA LETTER JA +0B1D ; [.2B13.0020.0002] # ORIYA LETTER JHA +0B1E ; [.2B14.0020.0002] # ORIYA LETTER NYA +0B1F ; [.2B15.0020.0002] # ORIYA LETTER TTA +0B20 ; [.2B16.0020.0002] # ORIYA LETTER TTHA +0B21 ; [.2B17.0020.0002] # ORIYA LETTER DDA +0B5C ; [.2B17.0020.0002][.0000.00C2.0002] # ORIYA LETTER RRA +0B22 ; [.2B18.0020.0002] # ORIYA LETTER DDHA +0B5D ; [.2B18.0020.0002][.0000.00C2.0002] # ORIYA LETTER RHA +0B23 ; [.2B19.0020.0002] # ORIYA LETTER NNA +0B24 ; [.2B1A.0020.0002] # ORIYA LETTER TA +0B25 ; [.2B1B.0020.0002] # ORIYA LETTER THA +0B26 ; [.2B1C.0020.0002] # ORIYA LETTER DA +0B27 ; [.2B1D.0020.0002] # ORIYA LETTER DHA +0B28 ; [.2B1E.0020.0002] # ORIYA LETTER NA +0B2A ; [.2B1F.0020.0002] # ORIYA LETTER PA +0B2B ; [.2B20.0020.0002] # ORIYA LETTER PHA +0B2C ; [.2B21.0020.0002] # ORIYA LETTER BA +0B2D ; [.2B22.0020.0002] # ORIYA LETTER BHA +0B2E ; [.2B23.0020.0002] # ORIYA LETTER MA +0B2F ; [.2B24.0020.0002] # ORIYA LETTER YA +0B5F ; [.2B25.0020.0002] # ORIYA LETTER YYA +0B30 ; [.2B26.0020.0002] # ORIYA LETTER RA +0B32 ; [.2B27.0020.0002] # ORIYA LETTER LA +0B33 ; [.2B28.0020.0002] # ORIYA LETTER LLA +0B35 ; [.2B29.0020.0002] # ORIYA LETTER VA +0B71 ; [.2B2A.0020.0002] # ORIYA LETTER WA +0B36 ; [.2B2B.0020.0002] # ORIYA LETTER SHA +0B37 ; [.2B2C.0020.0002] # ORIYA LETTER SSA +0B38 ; [.2B2D.0020.0002] # ORIYA LETTER SA +0B39 ; [.2B2E.0020.0002] # ORIYA LETTER HA +0B3D ; [.2B2F.0020.0002] # ORIYA SIGN AVAGRAHA +0B3E ; [.2B30.0020.0002] # ORIYA VOWEL SIGN AA +0B3F ; [.2B31.0020.0002] # ORIYA VOWEL SIGN I +0B40 ; [.2B32.0020.0002] # ORIYA VOWEL SIGN II +0B41 ; [.2B33.0020.0002] # ORIYA VOWEL SIGN U +0B42 ; [.2B34.0020.0002] # ORIYA VOWEL SIGN UU +0B43 ; [.2B35.0020.0002] # ORIYA VOWEL SIGN VOCALIC R +0B44 ; [.2B36.0020.0002] # ORIYA VOWEL SIGN VOCALIC RR +0B62 ; [.2B37.0020.0002] # ORIYA VOWEL SIGN VOCALIC L +0B63 ; [.2B38.0020.0002] # ORIYA VOWEL SIGN VOCALIC LL +0B47 ; [.2B39.0020.0002] # ORIYA VOWEL SIGN E +0B48 ; [.2B3A.0020.0002] # ORIYA VOWEL SIGN AI +0B47 0B56 ; [.2B3A.0020.0002] # ORIYA VOWEL SIGN AI +0B4B ; [.2B3B.0020.0002] # ORIYA VOWEL SIGN O +0B47 0B3E ; [.2B3B.0020.0002] # ORIYA VOWEL SIGN O +0B4C ; [.2B3C.0020.0002] # ORIYA VOWEL SIGN AU +0B47 0B57 ; [.2B3C.0020.0002] # ORIYA VOWEL SIGN AU +0B4D ; [.2B3D.0020.0002] # ORIYA SIGN VIRAMA +0B56 ; [.2B3E.0020.0002] # ORIYA AI LENGTH MARK +0B57 ; [.2B3F.0020.0002] # ORIYA AU LENGTH MARK +0BD0 ; [.2B40.0020.0002] # TAMIL OM +0B85 ; [.2B41.0020.0002] # TAMIL LETTER A +0B86 ; [.2B42.0020.0002] # TAMIL LETTER AA +0B87 ; [.2B43.0020.0002] # TAMIL LETTER I +0B88 ; [.2B44.0020.0002] # TAMIL LETTER II +0B89 ; [.2B45.0020.0002] # TAMIL LETTER U +0B8A ; [.2B46.0020.0002] # TAMIL LETTER UU +0B8E ; [.2B47.0020.0002] # TAMIL LETTER E +0B8F ; [.2B48.0020.0002] # TAMIL LETTER EE +0B90 ; [.2B49.0020.0002] # TAMIL LETTER AI +0B92 ; [.2B4A.0020.0002] # TAMIL LETTER O +0B93 ; [.2B4B.0020.0002] # TAMIL LETTER OO +0B94 ; [.2B4C.0020.0002] # TAMIL LETTER AU +0B92 0BD7 ; [.2B4C.0020.0002] # TAMIL LETTER AU +0B83 ; [.2B4D.0020.0002] # TAMIL SIGN VISARGA +0B95 ; [.2B4E.0020.0002] # TAMIL LETTER KA +0B99 ; [.2B4F.0020.0002] # TAMIL LETTER NGA +0B9A ; [.2B50.0020.0002] # TAMIL LETTER CA +0B9E ; [.2B51.0020.0002] # TAMIL LETTER NYA +0B9F ; [.2B52.0020.0002] # TAMIL LETTER TTA +0BA3 ; [.2B53.0020.0002] # TAMIL LETTER NNA +0BA4 ; [.2B54.0020.0002] # TAMIL LETTER TA +0BA8 ; [.2B55.0020.0002] # TAMIL LETTER NA +0BAA ; [.2B56.0020.0002] # TAMIL LETTER PA +0BAE ; [.2B57.0020.0002] # TAMIL LETTER MA +0BAF ; [.2B58.0020.0002] # TAMIL LETTER YA +0BB0 ; [.2B59.0020.0002] # TAMIL LETTER RA +0BB2 ; [.2B5A.0020.0002] # TAMIL LETTER LA +0BB5 ; [.2B5B.0020.0002] # TAMIL LETTER VA +0BB4 ; [.2B5C.0020.0002] # TAMIL LETTER LLLA +0BB3 ; [.2B5D.0020.0002] # TAMIL LETTER LLA +0BB1 ; [.2B5E.0020.0002] # TAMIL LETTER RRA +0BA9 ; [.2B5F.0020.0002] # TAMIL LETTER NNNA +0B9C ; [.2B60.0020.0002] # TAMIL LETTER JA +0BB6 ; [.2B61.0020.0002] # TAMIL LETTER SHA +0BB7 ; [.2B62.0020.0002] # TAMIL LETTER SSA +0BB8 ; [.2B63.0020.0002] # TAMIL LETTER SA +0BB9 ; [.2B64.0020.0002] # TAMIL LETTER HA +0BBE ; [.2B65.0020.0002] # TAMIL VOWEL SIGN AA +0BBF ; [.2B66.0020.0002] # TAMIL VOWEL SIGN I +0BC0 ; [.2B67.0020.0002] # TAMIL VOWEL SIGN II +0BC1 ; [.2B68.0020.0002] # TAMIL VOWEL SIGN U +0BC2 ; [.2B69.0020.0002] # TAMIL VOWEL SIGN UU +0BC6 ; [.2B6A.0020.0002] # TAMIL VOWEL SIGN E +0BC7 ; [.2B6B.0020.0002] # TAMIL VOWEL SIGN EE +0BC8 ; [.2B6C.0020.0002] # TAMIL VOWEL SIGN AI +0BCA ; [.2B6D.0020.0002] # TAMIL VOWEL SIGN O +0BC6 0BBE ; [.2B6D.0020.0002] # TAMIL VOWEL SIGN O +0BCB ; [.2B6E.0020.0002] # TAMIL VOWEL SIGN OO +0BC7 0BBE ; [.2B6E.0020.0002] # TAMIL VOWEL SIGN OO +0BCC ; [.2B6F.0020.0002] # TAMIL VOWEL SIGN AU +0BC6 0BD7 ; [.2B6F.0020.0002] # TAMIL VOWEL SIGN AU +0BCD ; [.2B70.0020.0002] # TAMIL SIGN VIRAMA +0BD7 ; [.2B71.0020.0002] # TAMIL AU LENGTH MARK +0C05 ; [.2B72.0020.0002] # TELUGU LETTER A +0C06 ; [.2B73.0020.0002] # TELUGU LETTER AA +0C07 ; [.2B74.0020.0002] # TELUGU LETTER I +0C08 ; [.2B75.0020.0002] # TELUGU LETTER II +0C09 ; [.2B76.0020.0002] # TELUGU LETTER U +0C0A ; [.2B77.0020.0002] # TELUGU LETTER UU +0C0B ; [.2B78.0020.0002] # TELUGU LETTER VOCALIC R +0C60 ; [.2B79.0020.0002] # TELUGU LETTER VOCALIC RR +0C0C ; [.2B7A.0020.0002] # TELUGU LETTER VOCALIC L +0C61 ; [.2B7B.0020.0002] # TELUGU LETTER VOCALIC LL +0C0E ; [.2B7C.0020.0002] # TELUGU LETTER E +0C0F ; [.2B7D.0020.0002] # TELUGU LETTER EE +0C10 ; [.2B7E.0020.0002] # TELUGU LETTER AI +0C12 ; [.2B7F.0020.0002] # TELUGU LETTER O +0C13 ; [.2B80.0020.0002] # TELUGU LETTER OO +0C14 ; [.2B81.0020.0002] # TELUGU LETTER AU +0C15 ; [.2B82.0020.0002] # TELUGU LETTER KA +0C16 ; [.2B83.0020.0002] # TELUGU LETTER KHA +0C17 ; [.2B84.0020.0002] # TELUGU LETTER GA +0C18 ; [.2B85.0020.0002] # TELUGU LETTER GHA +0C19 ; [.2B86.0020.0002] # TELUGU LETTER NGA +0C1A ; [.2B87.0020.0002] # TELUGU LETTER CA +0C58 ; [.2B88.0020.0002] # TELUGU LETTER TSA +0C1B ; [.2B89.0020.0002] # TELUGU LETTER CHA +0C1C ; [.2B8A.0020.0002] # TELUGU LETTER JA +0C59 ; [.2B8B.0020.0002] # TELUGU LETTER DZA +0C1D ; [.2B8C.0020.0002] # TELUGU LETTER JHA +0C1E ; [.2B8D.0020.0002] # TELUGU LETTER NYA +0C1F ; [.2B8E.0020.0002] # TELUGU LETTER TTA +0C20 ; [.2B8F.0020.0002] # TELUGU LETTER TTHA +0C21 ; [.2B90.0020.0002] # TELUGU LETTER DDA +0C22 ; [.2B91.0020.0002] # TELUGU LETTER DDHA +0C23 ; [.2B92.0020.0002] # TELUGU LETTER NNA +0C24 ; [.2B93.0020.0002] # TELUGU LETTER TA +0C25 ; [.2B94.0020.0002] # TELUGU LETTER THA +0C26 ; [.2B95.0020.0002] # TELUGU LETTER DA +0C27 ; [.2B96.0020.0002] # TELUGU LETTER DHA +0C28 ; [.2B97.0020.0002] # TELUGU LETTER NA +0C2A ; [.2B98.0020.0002] # TELUGU LETTER PA +0C2B ; [.2B99.0020.0002] # TELUGU LETTER PHA +0C2C ; [.2B9A.0020.0002] # TELUGU LETTER BA +0C2D ; [.2B9B.0020.0002] # TELUGU LETTER BHA +0C2E ; [.2B9C.0020.0002] # TELUGU LETTER MA +0C2F ; [.2B9D.0020.0002] # TELUGU LETTER YA +0C30 ; [.2B9E.0020.0002] # TELUGU LETTER RA +0C31 ; [.2B9F.0020.0002] # TELUGU LETTER RRA +0C32 ; [.2BA0.0020.0002] # TELUGU LETTER LA +0C35 ; [.2BA1.0020.0002] # TELUGU LETTER VA +0C36 ; [.2BA2.0020.0002] # TELUGU LETTER SHA +0C37 ; [.2BA3.0020.0002] # TELUGU LETTER SSA +0C38 ; [.2BA4.0020.0002] # TELUGU LETTER SA +0C39 ; [.2BA5.0020.0002] # TELUGU LETTER HA +0C33 ; [.2BA6.0020.0002] # TELUGU LETTER LLA +0C34 ; [.2BA7.0020.0002] # TELUGU LETTER LLLA +0C5A ; [.2BA8.0020.0002] # TELUGU LETTER RRRA +0C3D ; [.2BA9.0020.0002] # TELUGU SIGN AVAGRAHA +0C3E ; [.2BAA.0020.0002] # TELUGU VOWEL SIGN AA +0C3F ; [.2BAB.0020.0002] # TELUGU VOWEL SIGN I +0C40 ; [.2BAC.0020.0002] # TELUGU VOWEL SIGN II +0C41 ; [.2BAD.0020.0002] # TELUGU VOWEL SIGN U +0C42 ; [.2BAE.0020.0002] # TELUGU VOWEL SIGN UU +0C43 ; [.2BAF.0020.0002] # TELUGU VOWEL SIGN VOCALIC R +0C44 ; [.2BB0.0020.0002] # TELUGU VOWEL SIGN VOCALIC RR +0C62 ; [.2BB1.0020.0002] # TELUGU VOWEL SIGN VOCALIC L +0C63 ; [.2BB2.0020.0002] # TELUGU VOWEL SIGN VOCALIC LL +0C46 ; [.2BB3.0020.0002] # TELUGU VOWEL SIGN E +0C47 ; [.2BB4.0020.0002] # TELUGU VOWEL SIGN EE +0C48 ; [.2BB5.0020.0002] # TELUGU VOWEL SIGN AI +0C46 0C56 ; [.2BB5.0020.0002] # TELUGU VOWEL SIGN AI +0C4A ; [.2BB6.0020.0002] # TELUGU VOWEL SIGN O +0C4B ; [.2BB7.0020.0002] # TELUGU VOWEL SIGN OO +0C4C ; [.2BB8.0020.0002] # TELUGU VOWEL SIGN AU +0C4D ; [.2BB9.0020.0002] # TELUGU SIGN VIRAMA +0C55 ; [.2BBA.0020.0002] # TELUGU LENGTH MARK +0C56 ; [.2BBB.0020.0002] # TELUGU AI LENGTH MARK +0C85 ; [.2BBC.0020.0002] # KANNADA LETTER A +0C86 ; [.2BBD.0020.0002] # KANNADA LETTER AA +0C87 ; [.2BBE.0020.0002] # KANNADA LETTER I +0C88 ; [.2BBF.0020.0002] # KANNADA LETTER II +0C89 ; [.2BC0.0020.0002] # KANNADA LETTER U +0C8A ; [.2BC1.0020.0002] # KANNADA LETTER UU +0C8B ; [.2BC2.0020.0002] # KANNADA LETTER VOCALIC R +0CE0 ; [.2BC3.0020.0002] # KANNADA LETTER VOCALIC RR +0C8C ; [.2BC4.0020.0002] # KANNADA LETTER VOCALIC L +0CE1 ; [.2BC5.0020.0002] # KANNADA LETTER VOCALIC LL +0C8E ; [.2BC6.0020.0002] # KANNADA LETTER E +0C8F ; [.2BC7.0020.0002] # KANNADA LETTER EE +0C90 ; [.2BC8.0020.0002] # KANNADA LETTER AI +0C92 ; [.2BC9.0020.0002] # KANNADA LETTER O +0C93 ; [.2BCA.0020.0002] # KANNADA LETTER OO +0C94 ; [.2BCB.0020.0002] # KANNADA LETTER AU +0C95 ; [.2BCC.0020.0002] # KANNADA LETTER KA +0C96 ; [.2BCD.0020.0002] # KANNADA LETTER KHA +0C97 ; [.2BCE.0020.0002] # KANNADA LETTER GA +0C98 ; [.2BCF.0020.0002] # KANNADA LETTER GHA +0C99 ; [.2BD0.0020.0002] # KANNADA LETTER NGA +0C9A ; [.2BD1.0020.0002] # KANNADA LETTER CA +0C9B ; [.2BD2.0020.0002] # KANNADA LETTER CHA +0C9C ; [.2BD3.0020.0002] # KANNADA LETTER JA +0C9D ; [.2BD4.0020.0002] # KANNADA LETTER JHA +0C9E ; [.2BD5.0020.0002] # KANNADA LETTER NYA +0C9F ; [.2BD6.0020.0002] # KANNADA LETTER TTA +0CA0 ; [.2BD7.0020.0002] # KANNADA LETTER TTHA +0CA1 ; [.2BD8.0020.0002] # KANNADA LETTER DDA +0CA2 ; [.2BD9.0020.0002] # KANNADA LETTER DDHA +0CA3 ; [.2BDA.0020.0002] # KANNADA LETTER NNA +0CA4 ; [.2BDB.0020.0002] # KANNADA LETTER TA +0CA5 ; [.2BDC.0020.0002] # KANNADA LETTER THA +0CA6 ; [.2BDD.0020.0002] # KANNADA LETTER DA +0CA7 ; [.2BDE.0020.0002] # KANNADA LETTER DHA +0CA8 ; [.2BDF.0020.0002] # KANNADA LETTER NA +0CAA ; [.2BE0.0020.0002] # KANNADA LETTER PA +0CAB ; [.2BE1.0020.0002] # KANNADA LETTER PHA +0CAC ; [.2BE2.0020.0002] # KANNADA LETTER BA +0CAD ; [.2BE3.0020.0002] # KANNADA LETTER BHA +0CAE ; [.2BE4.0020.0002] # KANNADA LETTER MA +0CAF ; [.2BE5.0020.0002] # KANNADA LETTER YA +0CB0 ; [.2BE6.0020.0002] # KANNADA LETTER RA +0CB1 ; [.2BE7.0020.0002] # KANNADA LETTER RRA +0CB2 ; [.2BE8.0020.0002] # KANNADA LETTER LA +0CB5 ; [.2BE9.0020.0002] # KANNADA LETTER VA +0CB6 ; [.2BEA.0020.0002] # KANNADA LETTER SHA +0CB7 ; [.2BEB.0020.0002] # KANNADA LETTER SSA +0CB8 ; [.2BEC.0020.0002] # KANNADA LETTER SA +0CB9 ; [.2BED.0020.0002] # KANNADA LETTER HA +0CB3 ; [.2BEE.0020.0002] # KANNADA LETTER LLA +0CDE ; [.2BEF.0020.0002] # KANNADA LETTER FA +0CBD ; [.2BF0.0020.0002] # KANNADA SIGN AVAGRAHA +0CF1 ; [.2BF1.0020.0002] # KANNADA SIGN JIHVAMULIYA +0CF2 ; [.2BF2.0020.0002] # KANNADA SIGN UPADHMANIYA +0C80 ; [.2BF3.0020.0002] # KANNADA SIGN SPACING CANDRABINDU +0CBE ; [.2BF4.0020.0002] # KANNADA VOWEL SIGN AA +0CBF ; [.2BF5.0020.0002] # KANNADA VOWEL SIGN I +0CC0 ; [.2BF6.0020.0002] # KANNADA VOWEL SIGN II +0CBF 0CD5 ; [.2BF6.0020.0002] # KANNADA VOWEL SIGN II +0CC1 ; [.2BF7.0020.0002] # KANNADA VOWEL SIGN U +0CC2 ; [.2BF8.0020.0002] # KANNADA VOWEL SIGN UU +0CC3 ; [.2BF9.0020.0002] # KANNADA VOWEL SIGN VOCALIC R +0CC4 ; [.2BFA.0020.0002] # KANNADA VOWEL SIGN VOCALIC RR +0CE2 ; [.2BFB.0020.0002] # KANNADA VOWEL SIGN VOCALIC L +0CE3 ; [.2BFC.0020.0002] # KANNADA VOWEL SIGN VOCALIC LL +0CC6 ; [.2BFD.0020.0002] # KANNADA VOWEL SIGN E +0CC7 ; [.2BFE.0020.0002] # KANNADA VOWEL SIGN EE +0CC6 0CD5 ; [.2BFE.0020.0002] # KANNADA VOWEL SIGN EE +0CC8 ; [.2BFF.0020.0002] # KANNADA VOWEL SIGN AI +0CC6 0CD6 ; [.2BFF.0020.0002] # KANNADA VOWEL SIGN AI +0CCA ; [.2C00.0020.0002] # KANNADA VOWEL SIGN O +0CC6 0CC2 ; [.2C00.0020.0002] # KANNADA VOWEL SIGN O +0CCB ; [.2C01.0020.0002] # KANNADA VOWEL SIGN OO +0CC6 0CC2 0CD5 ; [.2C01.0020.0002] # KANNADA VOWEL SIGN OO +0CCA 0CD5 ; [.2C01.0020.0002] # KANNADA VOWEL SIGN OO +0CCC ; [.2C02.0020.0002] # KANNADA VOWEL SIGN AU +0CCD ; [.2C03.0020.0002] # KANNADA SIGN VIRAMA +0CD5 ; [.2C04.0020.0002] # KANNADA LENGTH MARK +0CD6 ; [.2C05.0020.0002] # KANNADA AI LENGTH MARK +0D05 ; [.2C06.0020.0002] # MALAYALAM LETTER A +0D06 ; [.2C07.0020.0002] # MALAYALAM LETTER AA +0D07 ; [.2C08.0020.0002] # MALAYALAM LETTER I +0D08 ; [.2C09.0020.0002] # MALAYALAM LETTER II +0D5F ; [.2C0A.0020.0002] # MALAYALAM LETTER ARCHAIC II +0D09 ; [.2C0B.0020.0002] # MALAYALAM LETTER U +0D0A ; [.2C0C.0020.0002] # MALAYALAM LETTER UU +0D0B ; [.2C0D.0020.0002] # MALAYALAM LETTER VOCALIC R +0D60 ; [.2C0E.0020.0002] # MALAYALAM LETTER VOCALIC RR +0D0C ; [.2C0F.0020.0002] # MALAYALAM LETTER VOCALIC L +0D61 ; [.2C10.0020.0002] # MALAYALAM LETTER VOCALIC LL +0D0E ; [.2C11.0020.0002] # MALAYALAM LETTER E +0D0F ; [.2C12.0020.0002] # MALAYALAM LETTER EE +0D10 ; [.2C13.0020.0002] # MALAYALAM LETTER AI +0D12 ; [.2C14.0020.0002] # MALAYALAM LETTER O +0D13 ; [.2C15.0020.0002] # MALAYALAM LETTER OO +0D14 ; [.2C16.0020.0002] # MALAYALAM LETTER AU +0D15 ; [.2C17.0020.0002] # MALAYALAM LETTER KA +0D7F ; [.2C17.0020.0004][.2C4F.0020.0004] # MALAYALAM LETTER CHILLU K +0D16 ; [.2C18.0020.0002] # MALAYALAM LETTER KHA +0D17 ; [.2C19.0020.0002] # MALAYALAM LETTER GA +0D18 ; [.2C1A.0020.0002] # MALAYALAM LETTER GHA +0D19 ; [.2C1B.0020.0002] # MALAYALAM LETTER NGA +0D1A ; [.2C1C.0020.0002] # MALAYALAM LETTER CA +0D1B ; [.2C1D.0020.0002] # MALAYALAM LETTER CHA +0D1C ; [.2C1E.0020.0002] # MALAYALAM LETTER JA +0D1D ; [.2C1F.0020.0002] # MALAYALAM LETTER JHA +0D1E ; [.2C20.0020.0002] # MALAYALAM LETTER NYA +0D1F ; [.2C21.0020.0002] # MALAYALAM LETTER TTA +0D20 ; [.2C22.0020.0002] # MALAYALAM LETTER TTHA +0D21 ; [.2C23.0020.0002] # MALAYALAM LETTER DDA +0D22 ; [.2C24.0020.0002] # MALAYALAM LETTER DDHA +0D23 ; [.2C25.0020.0002] # MALAYALAM LETTER NNA +0D7A ; [.2C25.0020.0004][.2C4F.0020.0004] # MALAYALAM LETTER CHILLU NN +0D24 ; [.2C26.0020.0002] # MALAYALAM LETTER TA +0D25 ; [.2C27.0020.0002] # MALAYALAM LETTER THA +0D26 ; [.2C28.0020.0002] # MALAYALAM LETTER DA +0D27 ; [.2C29.0020.0002] # MALAYALAM LETTER DHA +0D28 ; [.2C2A.0020.0002] # MALAYALAM LETTER NA +0D7B ; [.2C2A.0020.0004][.2C4F.0020.0004] # MALAYALAM LETTER CHILLU N +0D29 ; [.2C2B.0020.0002] # MALAYALAM LETTER NNNA +0D2A ; [.2C2C.0020.0002] # MALAYALAM LETTER PA +0D2B ; [.2C2D.0020.0002] # MALAYALAM LETTER PHA +0D2C ; [.2C2E.0020.0002] # MALAYALAM LETTER BA +0D2D ; [.2C2F.0020.0002] # MALAYALAM LETTER BHA +0D2E ; [.2C30.0020.0002] # MALAYALAM LETTER MA +0D54 ; [.2C30.0020.0004][.2C4F.0020.0004] # MALAYALAM LETTER CHILLU M +0D2F ; [.2C31.0020.0002] # MALAYALAM LETTER YA +0D55 ; [.2C31.0020.0004][.2C4F.0020.0004] # MALAYALAM LETTER CHILLU Y +0D30 ; [.2C32.0020.0002] # MALAYALAM LETTER RA +0D4E ; [.2C32.0020.0004][.2C4F.0020.0004] # MALAYALAM LETTER DOT REPH +0D7C ; [.2C32.0020.0004][.2C4F.0020.0004] # MALAYALAM LETTER CHILLU RR +0D32 ; [.2C33.0020.0002] # MALAYALAM LETTER LA +0D7D ; [.2C33.0020.0004][.2C4F.0020.0004] # MALAYALAM LETTER CHILLU L +0D35 ; [.2C34.0020.0002] # MALAYALAM LETTER VA +0D36 ; [.2C35.0020.0002] # MALAYALAM LETTER SHA +0D37 ; [.2C36.0020.0002] # MALAYALAM LETTER SSA +0D38 ; [.2C37.0020.0002] # MALAYALAM LETTER SA +0D39 ; [.2C38.0020.0002] # MALAYALAM LETTER HA +0D33 ; [.2C39.0020.0002] # MALAYALAM LETTER LLA +0D7E ; [.2C39.0020.0004][.2C4F.0020.0004] # MALAYALAM LETTER CHILLU LL +0D34 ; [.2C3A.0020.0002] # MALAYALAM LETTER LLLA +0D56 ; [.2C3A.0020.0004][.2C4F.0020.0004] # MALAYALAM LETTER CHILLU LLL +0D31 ; [.2C3B.0020.0002] # MALAYALAM LETTER RRA +0D3A ; [.2C3C.0020.0002] # MALAYALAM LETTER TTTA +0D3D ; [.2C3D.0020.0002] # MALAYALAM SIGN AVAGRAHA +0D04 ; [.2C3E.0020.0002] # MALAYALAM LETTER VEDIC ANUSVARA +0D3E ; [.2C3F.0020.0002] # MALAYALAM VOWEL SIGN AA +0D3F ; [.2C40.0020.0002] # MALAYALAM VOWEL SIGN I +0D40 ; [.2C41.0020.0002] # MALAYALAM VOWEL SIGN II +0D41 ; [.2C42.0020.0002] # MALAYALAM VOWEL SIGN U +0D42 ; [.2C43.0020.0002] # MALAYALAM VOWEL SIGN UU +0D43 ; [.2C44.0020.0002] # MALAYALAM VOWEL SIGN VOCALIC R +0D44 ; [.2C45.0020.0002] # MALAYALAM VOWEL SIGN VOCALIC RR +0D62 ; [.2C46.0020.0002] # MALAYALAM VOWEL SIGN VOCALIC L +0D63 ; [.2C47.0020.0002] # MALAYALAM VOWEL SIGN VOCALIC LL +0D46 ; [.2C48.0020.0002] # MALAYALAM VOWEL SIGN E +0D47 ; [.2C49.0020.0002] # MALAYALAM VOWEL SIGN EE +0D48 ; [.2C4A.0020.0002] # MALAYALAM VOWEL SIGN AI +0D4A ; [.2C4B.0020.0002] # MALAYALAM VOWEL SIGN O +0D46 0D3E ; [.2C4B.0020.0002] # MALAYALAM VOWEL SIGN O +0D4B ; [.2C4C.0020.0002] # MALAYALAM VOWEL SIGN OO +0D47 0D3E ; [.2C4C.0020.0002] # MALAYALAM VOWEL SIGN OO +0D4C ; [.2C4D.0020.0002] # MALAYALAM VOWEL SIGN AU +0D46 0D57 ; [.2C4D.0020.0002] # MALAYALAM VOWEL SIGN AU +0D57 ; [.2C4E.0020.0002] # MALAYALAM AU LENGTH MARK +0D4D ; [.2C4F.0020.0002] # MALAYALAM SIGN VIRAMA +0D3B ; [.2C4F.0020.0004] # MALAYALAM SIGN VERTICAL BAR VIRAMA +0D3C ; [.2C4F.0020.0004] # MALAYALAM SIGN CIRCULAR VIRAMA +0D85 ; [.2C50.0020.0002] # SINHALA LETTER AYANNA +0D86 ; [.2C51.0020.0002] # SINHALA LETTER AAYANNA +0D87 ; [.2C52.0020.0002] # SINHALA LETTER AEYANNA +0D88 ; [.2C53.0020.0002] # SINHALA LETTER AEEYANNA +0D89 ; [.2C54.0020.0002] # SINHALA LETTER IYANNA +0D8A ; [.2C55.0020.0002] # SINHALA LETTER IIYANNA +0D8B ; [.2C56.0020.0002] # SINHALA LETTER UYANNA +0D8C ; [.2C57.0020.0002] # SINHALA LETTER UUYANNA +0D8D ; [.2C58.0020.0002] # SINHALA LETTER IRUYANNA +0D8E ; [.2C59.0020.0002] # SINHALA LETTER IRUUYANNA +0D8F ; [.2C5A.0020.0002] # SINHALA LETTER ILUYANNA +0D90 ; [.2C5B.0020.0002] # SINHALA LETTER ILUUYANNA +0D91 ; [.2C5C.0020.0002] # SINHALA LETTER EYANNA +0D92 ; [.2C5D.0020.0002] # SINHALA LETTER EEYANNA +0D93 ; [.2C5E.0020.0002] # SINHALA LETTER AIYANNA +0D94 ; [.2C5F.0020.0002] # SINHALA LETTER OYANNA +0D95 ; [.2C60.0020.0002] # SINHALA LETTER OOYANNA +0D96 ; [.2C61.0020.0002] # SINHALA LETTER AUYANNA +0D9A ; [.2C62.0020.0002] # SINHALA LETTER ALPAPRAANA KAYANNA +0D9B ; [.2C63.0020.0002] # SINHALA LETTER MAHAAPRAANA KAYANNA +0D9C ; [.2C64.0020.0002] # SINHALA LETTER ALPAPRAANA GAYANNA +0D9D ; [.2C65.0020.0002] # SINHALA LETTER MAHAAPRAANA GAYANNA +0D9E ; [.2C66.0020.0002] # SINHALA LETTER KANTAJA NAASIKYAYA +0D9F ; [.2C67.0020.0002] # SINHALA LETTER SANYAKA GAYANNA +0DA0 ; [.2C68.0020.0002] # SINHALA LETTER ALPAPRAANA CAYANNA +0DA1 ; [.2C69.0020.0002] # SINHALA LETTER MAHAAPRAANA CAYANNA +0DA2 ; [.2C6A.0020.0002] # SINHALA LETTER ALPAPRAANA JAYANNA +0DA3 ; [.2C6B.0020.0002] # SINHALA LETTER MAHAAPRAANA JAYANNA +0DA4 ; [.2C6C.0020.0002] # SINHALA LETTER TAALUJA NAASIKYAYA +0DA5 ; [.2C6D.0020.0002] # SINHALA LETTER TAALUJA SANYOOGA NAAKSIKYAYA +0DA6 ; [.2C6E.0020.0002] # SINHALA LETTER SANYAKA JAYANNA +0DA7 ; [.2C6F.0020.0002] # SINHALA LETTER ALPAPRAANA TTAYANNA +0DA8 ; [.2C70.0020.0002] # SINHALA LETTER MAHAAPRAANA TTAYANNA +0DA9 ; [.2C71.0020.0002] # SINHALA LETTER ALPAPRAANA DDAYANNA +0DAA ; [.2C72.0020.0002] # SINHALA LETTER MAHAAPRAANA DDAYANNA +0DAB ; [.2C73.0020.0002] # SINHALA LETTER MUURDHAJA NAYANNA +0DAC ; [.2C74.0020.0002] # SINHALA LETTER SANYAKA DDAYANNA +0DAD ; [.2C75.0020.0002] # SINHALA LETTER ALPAPRAANA TAYANNA +0DAE ; [.2C76.0020.0002] # SINHALA LETTER MAHAAPRAANA TAYANNA +0DAF ; [.2C77.0020.0002] # SINHALA LETTER ALPAPRAANA DAYANNA +0DB0 ; [.2C78.0020.0002] # SINHALA LETTER MAHAAPRAANA DAYANNA +0DB1 ; [.2C79.0020.0002] # SINHALA LETTER DANTAJA NAYANNA +0DB3 ; [.2C7A.0020.0002] # SINHALA LETTER SANYAKA DAYANNA +0DB4 ; [.2C7B.0020.0002] # SINHALA LETTER ALPAPRAANA PAYANNA +0DB5 ; [.2C7C.0020.0002] # SINHALA LETTER MAHAAPRAANA PAYANNA +0DB6 ; [.2C7D.0020.0002] # SINHALA LETTER ALPAPRAANA BAYANNA +0DB7 ; [.2C7E.0020.0002] # SINHALA LETTER MAHAAPRAANA BAYANNA +0DB8 ; [.2C7F.0020.0002] # SINHALA LETTER MAYANNA +0DB9 ; [.2C80.0020.0002] # SINHALA LETTER AMBA BAYANNA +0DBA ; [.2C81.0020.0002] # SINHALA LETTER YAYANNA +0DBB ; [.2C82.0020.0002] # SINHALA LETTER RAYANNA +0DBD ; [.2C83.0020.0002] # SINHALA LETTER DANTAJA LAYANNA +0DC0 ; [.2C84.0020.0002] # SINHALA LETTER VAYANNA +0DC1 ; [.2C85.0020.0002] # SINHALA LETTER TAALUJA SAYANNA +0DC2 ; [.2C86.0020.0002] # SINHALA LETTER MUURDHAJA SAYANNA +0DC3 ; [.2C87.0020.0002] # SINHALA LETTER DANTAJA SAYANNA +0DC4 ; [.2C88.0020.0002] # SINHALA LETTER HAYANNA +0DC5 ; [.2C89.0020.0002] # SINHALA LETTER MUURDHAJA LAYANNA +0DC6 ; [.2C8A.0020.0002] # SINHALA LETTER FAYANNA +0DCF ; [.2C8B.0020.0002] # SINHALA VOWEL SIGN AELA-PILLA +0DD0 ; [.2C8C.0020.0002] # SINHALA VOWEL SIGN KETTI AEDA-PILLA +0DD1 ; [.2C8D.0020.0002] # SINHALA VOWEL SIGN DIGA AEDA-PILLA +0DD2 ; [.2C8E.0020.0002] # SINHALA VOWEL SIGN KETTI IS-PILLA +0DD3 ; [.2C8F.0020.0002] # SINHALA VOWEL SIGN DIGA IS-PILLA +0DD4 ; [.2C90.0020.0002] # SINHALA VOWEL SIGN KETTI PAA-PILLA +0DD6 ; [.2C91.0020.0002] # SINHALA VOWEL SIGN DIGA PAA-PILLA +0DD8 ; [.2C92.0020.0002] # SINHALA VOWEL SIGN GAETTA-PILLA +0DF2 ; [.2C93.0020.0002] # SINHALA VOWEL SIGN DIGA GAETTA-PILLA +0DDF ; [.2C94.0020.0002] # SINHALA VOWEL SIGN GAYANUKITTA +0DF3 ; [.2C95.0020.0002] # SINHALA VOWEL SIGN DIGA GAYANUKITTA +0DD9 ; [.2C96.0020.0002] # SINHALA VOWEL SIGN KOMBUVA +0DDA ; [.2C97.0020.0002] # SINHALA VOWEL SIGN DIGA KOMBUVA +0DD9 0DCA ; [.2C97.0020.0002] # SINHALA VOWEL SIGN DIGA KOMBUVA +0DDB ; [.2C98.0020.0002] # SINHALA VOWEL SIGN KOMBU DEKA +0DDC ; [.2C99.0020.0002] # SINHALA VOWEL SIGN KOMBUVA HAA AELA-PILLA +0DD9 0DCF ; [.2C99.0020.0002] # SINHALA VOWEL SIGN KOMBUVA HAA AELA-PILLA +0DDD ; [.2C9A.0020.0002] # SINHALA VOWEL SIGN KOMBUVA HAA DIGA AELA-PILLA +0DD9 0DCF 0DCA ; [.2C9A.0020.0002] # SINHALA VOWEL SIGN KOMBUVA HAA DIGA AELA-PILLA +0DDC 0DCA ; [.2C9A.0020.0002] # SINHALA VOWEL SIGN KOMBUVA HAA DIGA AELA-PILLA +0DDE ; [.2C9B.0020.0002] # SINHALA VOWEL SIGN KOMBUVA HAA GAYANUKITTA +0DD9 0DDF ; [.2C9B.0020.0002] # SINHALA VOWEL SIGN KOMBUVA HAA GAYANUKITTA +0DCA ; [.2C9C.0020.0002] # SINHALA SIGN AL-LAKUNA +AAF2 ; [.2C9D.0020.0002] # MEETEI MAYEK ANJI +ABC0 ; [.2C9E.0020.0002] # MEETEI MAYEK LETTER KOK +ABC1 ; [.2C9F.0020.0002] # MEETEI MAYEK LETTER SAM +ABC2 ; [.2CA0.0020.0002] # MEETEI MAYEK LETTER LAI +ABC3 ; [.2CA1.0020.0002] # MEETEI MAYEK LETTER MIT +ABC4 ; [.2CA2.0020.0002] # MEETEI MAYEK LETTER PA +ABC5 ; [.2CA3.0020.0002] # MEETEI MAYEK LETTER NA +ABC6 ; [.2CA4.0020.0002] # MEETEI MAYEK LETTER CHIL +ABC7 ; [.2CA5.0020.0002] # MEETEI MAYEK LETTER TIL +ABC8 ; [.2CA6.0020.0002] # MEETEI MAYEK LETTER KHOU +ABC9 ; [.2CA7.0020.0002] # MEETEI MAYEK LETTER NGOU +ABCA ; [.2CA8.0020.0002] # MEETEI MAYEK LETTER THOU +ABCB ; [.2CA9.0020.0002] # MEETEI MAYEK LETTER WAI +ABCC ; [.2CAA.0020.0002] # MEETEI MAYEK LETTER YANG +ABCD ; [.2CAB.0020.0002] # MEETEI MAYEK LETTER HUK +ABCE ; [.2CAC.0020.0002] # MEETEI MAYEK LETTER UN +ABCF ; [.2CAD.0020.0002] # MEETEI MAYEK LETTER I +ABD0 ; [.2CAE.0020.0002] # MEETEI MAYEK LETTER PHAM +ABD1 ; [.2CAF.0020.0002] # MEETEI MAYEK LETTER ATIYA +ABD2 ; [.2CB0.0020.0002] # MEETEI MAYEK LETTER GOK +ABD3 ; [.2CB1.0020.0002] # MEETEI MAYEK LETTER JHAM +ABD4 ; [.2CB2.0020.0002] # MEETEI MAYEK LETTER RAI +ABD5 ; [.2CB3.0020.0002] # MEETEI MAYEK LETTER BA +ABD6 ; [.2CB4.0020.0002] # MEETEI MAYEK LETTER JIL +ABD7 ; [.2CB5.0020.0002] # MEETEI MAYEK LETTER DIL +ABD8 ; [.2CB6.0020.0002] # MEETEI MAYEK LETTER GHOU +ABD9 ; [.2CB7.0020.0002] # MEETEI MAYEK LETTER DHOU +ABDA ; [.2CB8.0020.0002] # MEETEI MAYEK LETTER BHAM +AAE0 ; [.2CB9.0020.0002] # MEETEI MAYEK LETTER E +AAE1 ; [.2CBA.0020.0002] # MEETEI MAYEK LETTER O +AAE2 ; [.2CBB.0020.0002] # MEETEI MAYEK LETTER CHA +AAE3 ; [.2CBC.0020.0002] # MEETEI MAYEK LETTER NYA +AAE4 ; [.2CBD.0020.0002] # MEETEI MAYEK LETTER TTA +AAE5 ; [.2CBE.0020.0002] # MEETEI MAYEK LETTER TTHA +AAE6 ; [.2CBF.0020.0002] # MEETEI MAYEK LETTER DDA +AAE7 ; [.2CC0.0020.0002] # MEETEI MAYEK LETTER DDHA +AAE8 ; [.2CC1.0020.0002] # MEETEI MAYEK LETTER NNA +AAE9 ; [.2CC2.0020.0002] # MEETEI MAYEK LETTER SHA +AAEA ; [.2CC3.0020.0002] # MEETEI MAYEK LETTER SSA +ABE3 ; [.2CC4.0020.0002] # MEETEI MAYEK VOWEL SIGN ONAP +ABE4 ; [.2CC5.0020.0002] # MEETEI MAYEK VOWEL SIGN INAP +ABE5 ; [.2CC6.0020.0002] # MEETEI MAYEK VOWEL SIGN ANAP +ABE6 ; [.2CC7.0020.0002] # MEETEI MAYEK VOWEL SIGN YENAP +ABE7 ; [.2CC8.0020.0002] # MEETEI MAYEK VOWEL SIGN SOUNAP +ABE8 ; [.2CC9.0020.0002] # MEETEI MAYEK VOWEL SIGN UNAP +ABE9 ; [.2CCA.0020.0002] # MEETEI MAYEK VOWEL SIGN CHEINAP +ABEA ; [.2CCB.0020.0002] # MEETEI MAYEK VOWEL SIGN NUNG +AAEB ; [.2CCC.0020.0002] # MEETEI MAYEK VOWEL SIGN II +AAEC ; [.2CCD.0020.0002] # MEETEI MAYEK VOWEL SIGN UU +AAED ; [.2CCE.0020.0002] # MEETEI MAYEK VOWEL SIGN AAI +AAEE ; [.2CCF.0020.0002] # MEETEI MAYEK VOWEL SIGN AU +AAEF ; [.2CD0.0020.0002] # MEETEI MAYEK VOWEL SIGN AAU +AAF5 ; [.2CD1.0020.0002] # MEETEI MAYEK VOWEL SIGN VISARGA +ABDB ; [.2CD2.0020.0002] # MEETEI MAYEK LETTER KOK LONSUM +ABDC ; [.2CD3.0020.0002] # MEETEI MAYEK LETTER LAI LONSUM +ABDD ; [.2CD4.0020.0002] # MEETEI MAYEK LETTER MIT LONSUM +ABDE ; [.2CD5.0020.0002] # MEETEI MAYEK LETTER PA LONSUM +ABDF ; [.2CD6.0020.0002] # MEETEI MAYEK LETTER NA LONSUM +ABE0 ; [.2CD7.0020.0002] # MEETEI MAYEK LETTER TIL LONSUM +ABE1 ; [.2CD8.0020.0002] # MEETEI MAYEK LETTER NGOU LONSUM +ABE2 ; [.2CD9.0020.0002] # MEETEI MAYEK LETTER I LONSUM +ABED ; [.2CDA.0020.0002] # MEETEI MAYEK APUN IYEK +AAF6 ; [.2CDB.0020.0002] # MEETEI MAYEK VIRAMA +A800 ; [.2CDC.0020.0002] # SYLOTI NAGRI LETTER A +A801 ; [.2CDD.0020.0002] # SYLOTI NAGRI LETTER I +A802 ; [.2CDE.0020.0002] # SYLOTI NAGRI SIGN DVISVARA +A803 ; [.2CDF.0020.0002] # SYLOTI NAGRI LETTER U +A804 ; [.2CE0.0020.0002] # SYLOTI NAGRI LETTER E +A805 ; [.2CE1.0020.0002] # SYLOTI NAGRI LETTER O +A806 ; [.2CE2.0020.0002] # SYLOTI NAGRI SIGN HASANTA +A82C ; [.2CE3.0020.0002] # SYLOTI NAGRI SIGN ALTERNATE HASANTA +A807 ; [.2CE4.0020.0002] # SYLOTI NAGRI LETTER KO +A808 ; [.2CE5.0020.0002] # SYLOTI NAGRI LETTER KHO +A809 ; [.2CE6.0020.0002] # SYLOTI NAGRI LETTER GO +A80A ; [.2CE7.0020.0002] # SYLOTI NAGRI LETTER GHO +A80C ; [.2CE8.0020.0002] # SYLOTI NAGRI LETTER CO +A80D ; [.2CE9.0020.0002] # SYLOTI NAGRI LETTER CHO +A80E ; [.2CEA.0020.0002] # SYLOTI NAGRI LETTER JO +A80F ; [.2CEB.0020.0002] # SYLOTI NAGRI LETTER JHO +A810 ; [.2CEC.0020.0002] # SYLOTI NAGRI LETTER TTO +A811 ; [.2CED.0020.0002] # SYLOTI NAGRI LETTER TTHO +A812 ; [.2CEE.0020.0002] # SYLOTI NAGRI LETTER DDO +A813 ; [.2CEF.0020.0002] # SYLOTI NAGRI LETTER DDHO +A814 ; [.2CF0.0020.0002] # SYLOTI NAGRI LETTER TO +A815 ; [.2CF1.0020.0002] # SYLOTI NAGRI LETTER THO +A816 ; [.2CF2.0020.0002] # SYLOTI NAGRI LETTER DO +A817 ; [.2CF3.0020.0002] # SYLOTI NAGRI LETTER DHO +A818 ; [.2CF4.0020.0002] # SYLOTI NAGRI LETTER NO +A819 ; [.2CF5.0020.0002] # SYLOTI NAGRI LETTER PO +A81A ; [.2CF6.0020.0002] # SYLOTI NAGRI LETTER PHO +A81B ; [.2CF7.0020.0002] # SYLOTI NAGRI LETTER BO +A81C ; [.2CF8.0020.0002] # SYLOTI NAGRI LETTER BHO +A81D ; [.2CF9.0020.0002] # SYLOTI NAGRI LETTER MO +A81E ; [.2CFA.0020.0002] # SYLOTI NAGRI LETTER RO +A81F ; [.2CFB.0020.0002] # SYLOTI NAGRI LETTER LO +A820 ; [.2CFC.0020.0002] # SYLOTI NAGRI LETTER RRO +A821 ; [.2CFD.0020.0002] # SYLOTI NAGRI LETTER SO +A822 ; [.2CFE.0020.0002] # SYLOTI NAGRI LETTER HO +A823 ; [.2CFF.0020.0002] # SYLOTI NAGRI VOWEL SIGN A +A824 ; [.2D00.0020.0002] # SYLOTI NAGRI VOWEL SIGN I +A825 ; [.2D01.0020.0002] # SYLOTI NAGRI VOWEL SIGN U +A826 ; [.2D02.0020.0002] # SYLOTI NAGRI VOWEL SIGN E +A827 ; [.2D03.0020.0002] # SYLOTI NAGRI VOWEL SIGN OO +A882 ; [.2D04.0020.0002] # SAURASHTRA LETTER A +A883 ; [.2D05.0020.0002] # SAURASHTRA LETTER AA +A884 ; [.2D06.0020.0002] # SAURASHTRA LETTER I +A885 ; [.2D07.0020.0002] # SAURASHTRA LETTER II +A886 ; [.2D08.0020.0002] # SAURASHTRA LETTER U +A887 ; [.2D09.0020.0002] # SAURASHTRA LETTER UU +A888 ; [.2D0A.0020.0002] # SAURASHTRA LETTER VOCALIC R +A889 ; [.2D0B.0020.0002] # SAURASHTRA LETTER VOCALIC RR +A88A ; [.2D0C.0020.0002] # SAURASHTRA LETTER VOCALIC L +A88B ; [.2D0D.0020.0002] # SAURASHTRA LETTER VOCALIC LL +A88C ; [.2D0E.0020.0002] # SAURASHTRA LETTER E +A88D ; [.2D0F.0020.0002] # SAURASHTRA LETTER EE +A88E ; [.2D10.0020.0002] # SAURASHTRA LETTER AI +A88F ; [.2D11.0020.0002] # SAURASHTRA LETTER O +A890 ; [.2D12.0020.0002] # SAURASHTRA LETTER OO +A891 ; [.2D13.0020.0002] # SAURASHTRA LETTER AU +A892 ; [.2D14.0020.0002] # SAURASHTRA LETTER KA +A893 ; [.2D15.0020.0002] # SAURASHTRA LETTER KHA +A894 ; [.2D16.0020.0002] # SAURASHTRA LETTER GA +A895 ; [.2D17.0020.0002] # SAURASHTRA LETTER GHA +A896 ; [.2D18.0020.0002] # SAURASHTRA LETTER NGA +A897 ; [.2D19.0020.0002] # SAURASHTRA LETTER CA +A898 ; [.2D1A.0020.0002] # SAURASHTRA LETTER CHA +A899 ; [.2D1B.0020.0002] # SAURASHTRA LETTER JA +A89A ; [.2D1C.0020.0002] # SAURASHTRA LETTER JHA +A89B ; [.2D1D.0020.0002] # SAURASHTRA LETTER NYA +A89C ; [.2D1E.0020.0002] # SAURASHTRA LETTER TTA +A89D ; [.2D1F.0020.0002] # SAURASHTRA LETTER TTHA +A89E ; [.2D20.0020.0002] # SAURASHTRA LETTER DDA +A89F ; [.2D21.0020.0002] # SAURASHTRA LETTER DDHA +A8A0 ; [.2D22.0020.0002] # SAURASHTRA LETTER NNA +A8A1 ; [.2D23.0020.0002] # SAURASHTRA LETTER TA +A8A2 ; [.2D24.0020.0002] # SAURASHTRA LETTER THA +A8A3 ; [.2D25.0020.0002] # SAURASHTRA LETTER DA +A8A4 ; [.2D26.0020.0002] # SAURASHTRA LETTER DHA +A8A5 ; [.2D27.0020.0002] # SAURASHTRA LETTER NA +A8A6 ; [.2D28.0020.0002] # SAURASHTRA LETTER PA +A8A7 ; [.2D29.0020.0002] # SAURASHTRA LETTER PHA +A8A8 ; [.2D2A.0020.0002] # SAURASHTRA LETTER BA +A8A9 ; [.2D2B.0020.0002] # SAURASHTRA LETTER BHA +A8AA ; [.2D2C.0020.0002] # SAURASHTRA LETTER MA +A8AB ; [.2D2D.0020.0002] # SAURASHTRA LETTER YA +A8AC ; [.2D2E.0020.0002] # SAURASHTRA LETTER RA +A8AD ; [.2D2F.0020.0002] # SAURASHTRA LETTER LA +A8AE ; [.2D30.0020.0002] # SAURASHTRA LETTER VA +A8AF ; [.2D31.0020.0002] # SAURASHTRA LETTER SHA +A8B0 ; [.2D32.0020.0002] # SAURASHTRA LETTER SSA +A8B1 ; [.2D33.0020.0002] # SAURASHTRA LETTER SA +A8B2 ; [.2D34.0020.0002] # SAURASHTRA LETTER HA +A8B3 ; [.2D35.0020.0002] # SAURASHTRA LETTER LLA +A8B4 ; [.2D36.0020.0002] # SAURASHTRA CONSONANT SIGN HAARU +A8B5 ; [.2D37.0020.0002] # SAURASHTRA VOWEL SIGN AA +A8B6 ; [.2D38.0020.0002] # SAURASHTRA VOWEL SIGN I +A8B7 ; [.2D39.0020.0002] # SAURASHTRA VOWEL SIGN II +A8B8 ; [.2D3A.0020.0002] # SAURASHTRA VOWEL SIGN U +A8B9 ; [.2D3B.0020.0002] # SAURASHTRA VOWEL SIGN UU +A8BA ; [.2D3C.0020.0002] # SAURASHTRA VOWEL SIGN VOCALIC R +A8BB ; [.2D3D.0020.0002] # SAURASHTRA VOWEL SIGN VOCALIC RR +A8BC ; [.2D3E.0020.0002] # SAURASHTRA VOWEL SIGN VOCALIC L +A8BD ; [.2D3F.0020.0002] # SAURASHTRA VOWEL SIGN VOCALIC LL +A8BE ; [.2D40.0020.0002] # SAURASHTRA VOWEL SIGN E +A8BF ; [.2D41.0020.0002] # SAURASHTRA VOWEL SIGN EE +A8C0 ; [.2D42.0020.0002] # SAURASHTRA VOWEL SIGN AI +A8C1 ; [.2D43.0020.0002] # SAURASHTRA VOWEL SIGN O +A8C2 ; [.2D44.0020.0002] # SAURASHTRA VOWEL SIGN OO +A8C3 ; [.2D45.0020.0002] # SAURASHTRA VOWEL SIGN AU +A8C4 ; [.2D46.0020.0002] # SAURASHTRA SIGN VIRAMA +11083 ; [.2D47.0020.0002] # KAITHI LETTER A +11084 ; [.2D48.0020.0002] # KAITHI LETTER AA +11085 ; [.2D49.0020.0002] # KAITHI LETTER I +11086 ; [.2D4A.0020.0002] # KAITHI LETTER II +11087 ; [.2D4B.0020.0002] # KAITHI LETTER U +11088 ; [.2D4C.0020.0002] # KAITHI LETTER UU +11089 ; [.2D4D.0020.0002] # KAITHI LETTER E +1108A ; [.2D4E.0020.0002] # KAITHI LETTER AI +1108B ; [.2D4F.0020.0002] # KAITHI LETTER O +1108C ; [.2D50.0020.0002] # KAITHI LETTER AU +1108D ; [.2D51.0020.0002] # KAITHI LETTER KA +1108E ; [.2D52.0020.0002] # KAITHI LETTER KHA +1108F ; [.2D53.0020.0002] # KAITHI LETTER GA +11090 ; [.2D54.0020.0002] # KAITHI LETTER GHA +11091 ; [.2D55.0020.0002] # KAITHI LETTER NGA +11092 ; [.2D56.0020.0002] # KAITHI LETTER CA +11093 ; [.2D57.0020.0002] # KAITHI LETTER CHA +11094 ; [.2D58.0020.0002] # KAITHI LETTER JA +11095 ; [.2D59.0020.0002] # KAITHI LETTER JHA +11096 ; [.2D5A.0020.0002] # KAITHI LETTER NYA +11097 ; [.2D5B.0020.0002] # KAITHI LETTER TTA +11098 ; [.2D5C.0020.0002] # KAITHI LETTER TTHA +11099 ; [.2D5D.0020.0002] # KAITHI LETTER DDA +1109A ; [.2D5D.0020.0002][.0000.00C2.0002] # KAITHI LETTER DDDHA +1109B ; [.2D5E.0020.0002] # KAITHI LETTER DDHA +1109C ; [.2D5E.0020.0002][.0000.00C2.0002] # KAITHI LETTER RHA +1109D ; [.2D5F.0020.0002] # KAITHI LETTER NNA +1109E ; [.2D60.0020.0002] # KAITHI LETTER TA +1109F ; [.2D61.0020.0002] # KAITHI LETTER THA +110A0 ; [.2D62.0020.0002] # KAITHI LETTER DA +110A1 ; [.2D63.0020.0002] # KAITHI LETTER DHA +110A2 ; [.2D64.0020.0002] # KAITHI LETTER NA +110A3 ; [.2D65.0020.0002] # KAITHI LETTER PA +110A4 ; [.2D66.0020.0002] # KAITHI LETTER PHA +110A5 ; [.2D67.0020.0002] # KAITHI LETTER BA +110AB ; [.2D67.0020.0002][.0000.00C2.0002] # KAITHI LETTER VA +110A6 ; [.2D68.0020.0002] # KAITHI LETTER BHA +110A7 ; [.2D69.0020.0002] # KAITHI LETTER MA +110A8 ; [.2D6A.0020.0002] # KAITHI LETTER YA +110A9 ; [.2D6B.0020.0002] # KAITHI LETTER RA +110AA ; [.2D6C.0020.0002] # KAITHI LETTER LA +110AC ; [.2D6D.0020.0002] # KAITHI LETTER SHA +110AD ; [.2D6E.0020.0002] # KAITHI LETTER SSA +110AE ; [.2D6F.0020.0002] # KAITHI LETTER SA +110AF ; [.2D70.0020.0002] # KAITHI LETTER HA +110B0 ; [.2D71.0020.0002] # KAITHI VOWEL SIGN AA +110B1 ; [.2D72.0020.0002] # KAITHI VOWEL SIGN I +110B2 ; [.2D73.0020.0002] # KAITHI VOWEL SIGN II +110B3 ; [.2D74.0020.0002] # KAITHI VOWEL SIGN U +110B4 ; [.2D75.0020.0002] # KAITHI VOWEL SIGN UU +110B5 ; [.2D76.0020.0002] # KAITHI VOWEL SIGN E +110B6 ; [.2D77.0020.0002] # KAITHI VOWEL SIGN AI +110B7 ; [.2D78.0020.0002] # KAITHI VOWEL SIGN O +110B8 ; [.2D79.0020.0002] # KAITHI VOWEL SIGN AU +110B9 ; [.2D7A.0020.0002] # KAITHI SIGN VIRAMA +11150 ; [.2D7B.0020.0002] # MAHAJANI LETTER A +11151 ; [.2D7C.0020.0002] # MAHAJANI LETTER I +11152 ; [.2D7D.0020.0002] # MAHAJANI LETTER U +11153 ; [.2D7E.0020.0002] # MAHAJANI LETTER E +11154 ; [.2D7F.0020.0002] # MAHAJANI LETTER O +11155 ; [.2D80.0020.0002] # MAHAJANI LETTER KA +11156 ; [.2D81.0020.0002] # MAHAJANI LETTER KHA +11157 ; [.2D82.0020.0002] # MAHAJANI LETTER GA +11158 ; [.2D83.0020.0002] # MAHAJANI LETTER GHA +11159 ; [.2D84.0020.0002] # MAHAJANI LETTER CA +1115A ; [.2D85.0020.0002] # MAHAJANI LETTER CHA +1115B ; [.2D86.0020.0002] # MAHAJANI LETTER JA +1115C ; [.2D87.0020.0002] # MAHAJANI LETTER JHA +1115D ; [.2D88.0020.0002] # MAHAJANI LETTER NYA +1115E ; [.2D89.0020.0002] # MAHAJANI LETTER TTA +1115F ; [.2D8A.0020.0002] # MAHAJANI LETTER TTHA +11160 ; [.2D8B.0020.0002] # MAHAJANI LETTER DDA +11161 ; [.2D8C.0020.0002] # MAHAJANI LETTER DDHA +11162 ; [.2D8D.0020.0002] # MAHAJANI LETTER NNA +11163 ; [.2D8E.0020.0002] # MAHAJANI LETTER TA +11164 ; [.2D8F.0020.0002] # MAHAJANI LETTER THA +11165 ; [.2D90.0020.0002] # MAHAJANI LETTER DA +11166 ; [.2D91.0020.0002] # MAHAJANI LETTER DHA +11167 ; [.2D92.0020.0002] # MAHAJANI LETTER NA +11168 ; [.2D93.0020.0002] # MAHAJANI LETTER PA +11169 ; [.2D94.0020.0002] # MAHAJANI LETTER PHA +1116A ; [.2D95.0020.0002] # MAHAJANI LETTER BA +1116B ; [.2D96.0020.0002] # MAHAJANI LETTER BHA +1116C ; [.2D97.0020.0002] # MAHAJANI LETTER MA +1116D ; [.2D98.0020.0002] # MAHAJANI LETTER RA +1116E ; [.2D99.0020.0002] # MAHAJANI LETTER LA +1116F ; [.2D9A.0020.0002] # MAHAJANI LETTER VA +11176 ; [.2D9B.0020.0002] # MAHAJANI LIGATURE SHRI +11170 ; [.2D9C.0020.0002] # MAHAJANI LETTER SA +11171 ; [.2D9D.0020.0002] # MAHAJANI LETTER HA +11172 ; [.2D9E.0020.0002] # MAHAJANI LETTER RRA +111C4 ; [.2D9F.0020.0002] # SHARADA OM +111DA ; [.2DA0.0020.0002] # SHARADA EKAM +11183 ; [.2DA1.0020.0002] # SHARADA LETTER A +11184 ; [.2DA2.0020.0002] # SHARADA LETTER AA +11185 ; [.2DA3.0020.0002] # SHARADA LETTER I +11186 ; [.2DA4.0020.0002] # SHARADA LETTER II +11187 ; [.2DA5.0020.0002] # SHARADA LETTER U +11188 ; [.2DA6.0020.0002] # SHARADA LETTER UU +11189 ; [.2DA7.0020.0002] # SHARADA LETTER VOCALIC R +1118A ; [.2DA8.0020.0002] # SHARADA LETTER VOCALIC RR +1118B ; [.2DA9.0020.0002] # SHARADA LETTER VOCALIC L +1118C ; [.2DAA.0020.0002] # SHARADA LETTER VOCALIC LL +1118D ; [.2DAB.0020.0002] # SHARADA LETTER E +1118E ; [.2DAC.0020.0002] # SHARADA LETTER AI +1118F ; [.2DAD.0020.0002] # SHARADA LETTER O +11190 ; [.2DAE.0020.0002] # SHARADA LETTER AU +11191 ; [.2DAF.0020.0002] # SHARADA LETTER KA +11192 ; [.2DB0.0020.0002] # SHARADA LETTER KHA +11193 ; [.2DB1.0020.0002] # SHARADA LETTER GA +11194 ; [.2DB2.0020.0002] # SHARADA LETTER GHA +11195 ; [.2DB3.0020.0002] # SHARADA LETTER NGA +11196 ; [.2DB4.0020.0002] # SHARADA LETTER CA +11197 ; [.2DB5.0020.0002] # SHARADA LETTER CHA +11198 ; [.2DB6.0020.0002] # SHARADA LETTER JA +11199 ; [.2DB7.0020.0002] # SHARADA LETTER JHA +1119A ; [.2DB8.0020.0002] # SHARADA LETTER NYA +1119B ; [.2DB9.0020.0002] # SHARADA LETTER TTA +1119C ; [.2DBA.0020.0002] # SHARADA LETTER TTHA +1119D ; [.2DBB.0020.0002] # SHARADA LETTER DDA +1119E ; [.2DBC.0020.0002] # SHARADA LETTER DDHA +1119F ; [.2DBD.0020.0002] # SHARADA LETTER NNA +111A0 ; [.2DBE.0020.0002] # SHARADA LETTER TA +111A1 ; [.2DBF.0020.0002] # SHARADA LETTER THA +111A2 ; [.2DC0.0020.0002] # SHARADA LETTER DA +111A3 ; [.2DC1.0020.0002] # SHARADA LETTER DHA +111A4 ; [.2DC2.0020.0002] # SHARADA LETTER NA +111A5 ; [.2DC3.0020.0002] # SHARADA LETTER PA +111A6 ; [.2DC4.0020.0002] # SHARADA LETTER PHA +111A7 ; [.2DC5.0020.0002] # SHARADA LETTER BA +111A8 ; [.2DC6.0020.0002] # SHARADA LETTER BHA +111A9 ; [.2DC7.0020.0002] # SHARADA LETTER MA +111AA ; [.2DC8.0020.0002] # SHARADA LETTER YA +111AB ; [.2DC9.0020.0002] # SHARADA LETTER RA +111AC ; [.2DCA.0020.0002] # SHARADA LETTER LA +111AD ; [.2DCB.0020.0002] # SHARADA LETTER LLA +111AE ; [.2DCC.0020.0002] # SHARADA LETTER VA +111AF ; [.2DCD.0020.0002] # SHARADA LETTER SHA +111B0 ; [.2DCE.0020.0002] # SHARADA LETTER SSA +111B1 ; [.2DCF.0020.0002] # SHARADA LETTER SA +111B2 ; [.2DD0.0020.0002] # SHARADA LETTER HA +111C1 ; [.2DD1.0020.0002] # SHARADA SIGN AVAGRAHA +111C2 ; [.2DD2.0020.0002] # SHARADA SIGN JIHVAMULIYA +111C3 ; [.2DD3.0020.0002] # SHARADA SIGN UPADHMANIYA +111DC ; [.2DD4.0020.0002] # SHARADA HEADSTROKE +111B3 ; [.2DD5.0020.0002] # SHARADA VOWEL SIGN AA +111B4 ; [.2DD6.0020.0002] # SHARADA VOWEL SIGN I +111B5 ; [.2DD7.0020.0002] # SHARADA VOWEL SIGN II +111B6 ; [.2DD8.0020.0002] # SHARADA VOWEL SIGN U +111B7 ; [.2DD9.0020.0002] # SHARADA VOWEL SIGN UU +111B8 ; [.2DDA.0020.0002] # SHARADA VOWEL SIGN VOCALIC R +111B9 ; [.2DDB.0020.0002] # SHARADA VOWEL SIGN VOCALIC RR +111BA ; [.2DDC.0020.0002] # SHARADA VOWEL SIGN VOCALIC L +111BB ; [.2DDD.0020.0002] # SHARADA VOWEL SIGN VOCALIC LL +111BC ; [.2DDE.0020.0002] # SHARADA VOWEL SIGN E +111CE ; [.2DDF.0020.0002] # SHARADA VOWEL SIGN PRISHTHAMATRA E +111BD ; [.2DE0.0020.0002] # SHARADA VOWEL SIGN AI +111BE ; [.2DE1.0020.0002] # SHARADA VOWEL SIGN O +111BF ; [.2DE2.0020.0002] # SHARADA VOWEL SIGN AU +111C0 ; [.2DE3.0020.0002] # SHARADA SIGN VIRAMA +11200 ; [.2DE4.0020.0002] # KHOJKI LETTER A +11201 ; [.2DE5.0020.0002] # KHOJKI LETTER AA +11202 ; [.2DE6.0020.0002] # KHOJKI LETTER I +11203 ; [.2DE7.0020.0002] # KHOJKI LETTER U +11204 ; [.2DE8.0020.0002] # KHOJKI LETTER E +11205 ; [.2DE9.0020.0002] # KHOJKI LETTER AI +11206 ; [.2DEA.0020.0002] # KHOJKI LETTER O +11207 ; [.2DEB.0020.0002] # KHOJKI LETTER AU +11208 ; [.2DEC.0020.0002] # KHOJKI LETTER KA +11209 ; [.2DED.0020.0002] # KHOJKI LETTER KHA +1120A ; [.2DEE.0020.0002] # KHOJKI LETTER GA +1120B ; [.2DEF.0020.0002] # KHOJKI LETTER GGA +1120C ; [.2DF0.0020.0002] # KHOJKI LETTER GHA +1120D ; [.2DF1.0020.0002] # KHOJKI LETTER NGA +1120E ; [.2DF2.0020.0002] # KHOJKI LETTER CA +1120F ; [.2DF3.0020.0002] # KHOJKI LETTER CHA +11210 ; [.2DF4.0020.0002] # KHOJKI LETTER JA +11211 ; [.2DF5.0020.0002] # KHOJKI LETTER JJA +11213 ; [.2DF6.0020.0002] # KHOJKI LETTER NYA +11214 ; [.2DF7.0020.0002] # KHOJKI LETTER TTA +11215 ; [.2DF8.0020.0002] # KHOJKI LETTER TTHA +11216 ; [.2DF9.0020.0002] # KHOJKI LETTER DDA +11217 ; [.2DFA.0020.0002] # KHOJKI LETTER DDHA +11218 ; [.2DFB.0020.0002] # KHOJKI LETTER NNA +11219 ; [.2DFC.0020.0002] # KHOJKI LETTER TA +1121A ; [.2DFD.0020.0002] # KHOJKI LETTER THA +1121B ; [.2DFE.0020.0002] # KHOJKI LETTER DA +1121C ; [.2DFF.0020.0002] # KHOJKI LETTER DDDA +1121D ; [.2E00.0020.0002] # KHOJKI LETTER DHA +1121E ; [.2E01.0020.0002] # KHOJKI LETTER NA +1121F ; [.2E02.0020.0002] # KHOJKI LETTER PA +11220 ; [.2E03.0020.0002] # KHOJKI LETTER PHA +11221 ; [.2E04.0020.0002] # KHOJKI LETTER BA +11222 ; [.2E05.0020.0002] # KHOJKI LETTER BBA +11223 ; [.2E06.0020.0002] # KHOJKI LETTER BHA +11224 ; [.2E07.0020.0002] # KHOJKI LETTER MA +11225 ; [.2E08.0020.0002] # KHOJKI LETTER YA +11226 ; [.2E09.0020.0002] # KHOJKI LETTER RA +11227 ; [.2E0A.0020.0002] # KHOJKI LETTER LA +11228 ; [.2E0B.0020.0002] # KHOJKI LETTER VA +11229 ; [.2E0C.0020.0002] # KHOJKI LETTER SA +1122A ; [.2E0D.0020.0002] # KHOJKI LETTER HA +1122B ; [.2E0E.0020.0002] # KHOJKI LETTER LLA +1122C ; [.2E0F.0020.0002] # KHOJKI VOWEL SIGN AA +1122D ; [.2E10.0020.0002] # KHOJKI VOWEL SIGN I +1122E ; [.2E11.0020.0002] # KHOJKI VOWEL SIGN II +1122F ; [.2E12.0020.0002] # KHOJKI VOWEL SIGN U +11230 ; [.2E13.0020.0002] # KHOJKI VOWEL SIGN E +11231 ; [.2E14.0020.0002] # KHOJKI VOWEL SIGN AI +11232 ; [.2E15.0020.0002] # KHOJKI VOWEL SIGN O +11233 ; [.2E16.0020.0002] # KHOJKI VOWEL SIGN AU +11235 ; [.2E17.0020.0002] # KHOJKI SIGN VIRAMA +112B0 ; [.2E18.0020.0002] # KHUDAWADI LETTER A +112B1 ; [.2E19.0020.0002] # KHUDAWADI LETTER AA +112B2 ; [.2E1A.0020.0002] # KHUDAWADI LETTER I +112B3 ; [.2E1B.0020.0002] # KHUDAWADI LETTER II +112B4 ; [.2E1C.0020.0002] # KHUDAWADI LETTER U +112B5 ; [.2E1D.0020.0002] # KHUDAWADI LETTER UU +112B6 ; [.2E1E.0020.0002] # KHUDAWADI LETTER E +112B7 ; [.2E1F.0020.0002] # KHUDAWADI LETTER AI +112B8 ; [.2E20.0020.0002] # KHUDAWADI LETTER O +112B9 ; [.2E21.0020.0002] # KHUDAWADI LETTER AU +112BA ; [.2E22.0020.0002] # KHUDAWADI LETTER KA +112BB ; [.2E23.0020.0002] # KHUDAWADI LETTER KHA +112BC ; [.2E24.0020.0002] # KHUDAWADI LETTER GA +112BD ; [.2E25.0020.0002] # KHUDAWADI LETTER GGA +112BE ; [.2E26.0020.0002] # KHUDAWADI LETTER GHA +112BF ; [.2E27.0020.0002] # KHUDAWADI LETTER NGA +112C0 ; [.2E28.0020.0002] # KHUDAWADI LETTER CA +112C1 ; [.2E29.0020.0002] # KHUDAWADI LETTER CHA +112C2 ; [.2E2A.0020.0002] # KHUDAWADI LETTER JA +112C3 ; [.2E2B.0020.0002] # KHUDAWADI LETTER JJA +112C4 ; [.2E2C.0020.0002] # KHUDAWADI LETTER JHA +112C5 ; [.2E2D.0020.0002] # KHUDAWADI LETTER NYA +112C6 ; [.2E2E.0020.0002] # KHUDAWADI LETTER TTA +112C7 ; [.2E2F.0020.0002] # KHUDAWADI LETTER TTHA +112C8 ; [.2E30.0020.0002] # KHUDAWADI LETTER DDA +112C9 ; [.2E31.0020.0002] # KHUDAWADI LETTER DDDA +112CA ; [.2E32.0020.0002] # KHUDAWADI LETTER RRA +112CB ; [.2E33.0020.0002] # KHUDAWADI LETTER DDHA +112CC ; [.2E34.0020.0002] # KHUDAWADI LETTER NNA +112CD ; [.2E35.0020.0002] # KHUDAWADI LETTER TA +112CE ; [.2E36.0020.0002] # KHUDAWADI LETTER THA +112CF ; [.2E37.0020.0002] # KHUDAWADI LETTER DA +112D0 ; [.2E38.0020.0002] # KHUDAWADI LETTER DHA +112D1 ; [.2E39.0020.0002] # KHUDAWADI LETTER NA +112D2 ; [.2E3A.0020.0002] # KHUDAWADI LETTER PA +112D3 ; [.2E3B.0020.0002] # KHUDAWADI LETTER PHA +112D4 ; [.2E3C.0020.0002] # KHUDAWADI LETTER BA +112D5 ; [.2E3D.0020.0002] # KHUDAWADI LETTER BBA +112D6 ; [.2E3E.0020.0002] # KHUDAWADI LETTER BHA +112D7 ; [.2E3F.0020.0002] # KHUDAWADI LETTER MA +112D8 ; [.2E40.0020.0002] # KHUDAWADI LETTER YA +112D9 ; [.2E41.0020.0002] # KHUDAWADI LETTER RA +112DA ; [.2E42.0020.0002] # KHUDAWADI LETTER LA +112DB ; [.2E43.0020.0002] # KHUDAWADI LETTER VA +112DC ; [.2E44.0020.0002] # KHUDAWADI LETTER SHA +112DD ; [.2E45.0020.0002] # KHUDAWADI LETTER SA +112DE ; [.2E46.0020.0002] # KHUDAWADI LETTER HA +112E0 ; [.2E47.0020.0002] # KHUDAWADI VOWEL SIGN AA +112E1 ; [.2E48.0020.0002] # KHUDAWADI VOWEL SIGN I +112E2 ; [.2E49.0020.0002] # KHUDAWADI VOWEL SIGN II +112E3 ; [.2E4A.0020.0002] # KHUDAWADI VOWEL SIGN U +112E4 ; [.2E4B.0020.0002] # KHUDAWADI VOWEL SIGN UU +112E5 ; [.2E4C.0020.0002] # KHUDAWADI VOWEL SIGN E +112E6 ; [.2E4D.0020.0002] # KHUDAWADI VOWEL SIGN AI +112E7 ; [.2E4E.0020.0002] # KHUDAWADI VOWEL SIGN O +112E8 ; [.2E4F.0020.0002] # KHUDAWADI VOWEL SIGN AU +112EA ; [.2E50.0020.0002] # KHUDAWADI SIGN VIRAMA +11280 ; [.2E51.0020.0002] # MULTANI LETTER A +11281 ; [.2E52.0020.0002] # MULTANI LETTER I +11282 ; [.2E53.0020.0002] # MULTANI LETTER U +11283 ; [.2E54.0020.0002] # MULTANI LETTER E +112A5 ; [.2E55.0020.0002] # MULTANI LETTER SA +112A6 ; [.2E56.0020.0002] # MULTANI LETTER HA +11284 ; [.2E57.0020.0002] # MULTANI LETTER KA +11285 ; [.2E58.0020.0002] # MULTANI LETTER KHA +11286 ; [.2E59.0020.0002] # MULTANI LETTER GA +11288 ; [.2E5A.0020.0002] # MULTANI LETTER GHA +1128A ; [.2E5B.0020.0002] # MULTANI LETTER CA +1128B ; [.2E5C.0020.0002] # MULTANI LETTER CHA +1128C ; [.2E5D.0020.0002] # MULTANI LETTER JA +1128D ; [.2E5E.0020.0002] # MULTANI LETTER JJA +1128F ; [.2E5F.0020.0002] # MULTANI LETTER NYA +11290 ; [.2E60.0020.0002] # MULTANI LETTER TTA +11291 ; [.2E61.0020.0002] # MULTANI LETTER TTHA +11292 ; [.2E62.0020.0002] # MULTANI LETTER DDA +11293 ; [.2E63.0020.0002] # MULTANI LETTER DDDA +11294 ; [.2E64.0020.0002] # MULTANI LETTER DDHA +11295 ; [.2E65.0020.0002] # MULTANI LETTER NNA +11296 ; [.2E66.0020.0002] # MULTANI LETTER TA +11297 ; [.2E67.0020.0002] # MULTANI LETTER THA +11298 ; [.2E68.0020.0002] # MULTANI LETTER DA +11299 ; [.2E69.0020.0002] # MULTANI LETTER DHA +1129A ; [.2E6A.0020.0002] # MULTANI LETTER NA +1129B ; [.2E6B.0020.0002] # MULTANI LETTER PA +1129C ; [.2E6C.0020.0002] # MULTANI LETTER PHA +1129D ; [.2E6D.0020.0002] # MULTANI LETTER BA +1129F ; [.2E6E.0020.0002] # MULTANI LETTER BHA +112A0 ; [.2E6F.0020.0002] # MULTANI LETTER MA +112A1 ; [.2E70.0020.0002] # MULTANI LETTER YA +112A2 ; [.2E71.0020.0002] # MULTANI LETTER RA +112A3 ; [.2E72.0020.0002] # MULTANI LETTER LA +112A4 ; [.2E73.0020.0002] # MULTANI LETTER VA +112A7 ; [.2E74.0020.0002] # MULTANI LETTER RRA +112A8 ; [.2E75.0020.0002] # MULTANI LETTER RHA +11350 ; [.2E76.0020.0002] # GRANTHA OM +11305 ; [.2E77.0020.0002] # GRANTHA LETTER A +11306 ; [.2E78.0020.0002] # GRANTHA LETTER AA +11307 ; [.2E79.0020.0002] # GRANTHA LETTER I +11308 ; [.2E7A.0020.0002] # GRANTHA LETTER II +11309 ; [.2E7B.0020.0002] # GRANTHA LETTER U +1130A ; [.2E7C.0020.0002] # GRANTHA LETTER UU +1130B ; [.2E7D.0020.0002] # GRANTHA LETTER VOCALIC R +11360 ; [.2E7E.0020.0002] # GRANTHA LETTER VOCALIC RR +1130C ; [.2E7F.0020.0002] # GRANTHA LETTER VOCALIC L +11361 ; [.2E80.0020.0002] # GRANTHA LETTER VOCALIC LL +1130F ; [.2E81.0020.0002] # GRANTHA LETTER EE +11310 ; [.2E82.0020.0002] # GRANTHA LETTER AI +11313 ; [.2E83.0020.0002] # GRANTHA LETTER OO +11314 ; [.2E84.0020.0002] # GRANTHA LETTER AU +11315 ; [.2E85.0020.0002] # GRANTHA LETTER KA +11316 ; [.2E86.0020.0002] # GRANTHA LETTER KHA +11317 ; [.2E87.0020.0002] # GRANTHA LETTER GA +11318 ; [.2E88.0020.0002] # GRANTHA LETTER GHA +11319 ; [.2E89.0020.0002] # GRANTHA LETTER NGA +1131A ; [.2E8A.0020.0002] # GRANTHA LETTER CA +1131B ; [.2E8B.0020.0002] # GRANTHA LETTER CHA +1131C ; [.2E8C.0020.0002] # GRANTHA LETTER JA +1131D ; [.2E8D.0020.0002] # GRANTHA LETTER JHA +1131E ; [.2E8E.0020.0002] # GRANTHA LETTER NYA +1131F ; [.2E8F.0020.0002] # GRANTHA LETTER TTA +11320 ; [.2E90.0020.0002] # GRANTHA LETTER TTHA +11321 ; [.2E91.0020.0002] # GRANTHA LETTER DDA +11322 ; [.2E92.0020.0002] # GRANTHA LETTER DDHA +11323 ; [.2E93.0020.0002] # GRANTHA LETTER NNA +11324 ; [.2E94.0020.0002] # GRANTHA LETTER TA +11325 ; [.2E95.0020.0002] # GRANTHA LETTER THA +11326 ; [.2E96.0020.0002] # GRANTHA LETTER DA +11327 ; [.2E97.0020.0002] # GRANTHA LETTER DHA +11328 ; [.2E98.0020.0002] # GRANTHA LETTER NA +1132A ; [.2E99.0020.0002] # GRANTHA LETTER PA +1132B ; [.2E9A.0020.0002] # GRANTHA LETTER PHA +1132C ; [.2E9B.0020.0002] # GRANTHA LETTER BA +1132D ; [.2E9C.0020.0002] # GRANTHA LETTER BHA +1132E ; [.2E9D.0020.0002] # GRANTHA LETTER MA +1132F ; [.2E9E.0020.0002] # GRANTHA LETTER YA +11330 ; [.2E9F.0020.0002] # GRANTHA LETTER RA +11332 ; [.2EA0.0020.0002] # GRANTHA LETTER LA +11333 ; [.2EA1.0020.0002] # GRANTHA LETTER LLA +11335 ; [.2EA2.0020.0002] # GRANTHA LETTER VA +11336 ; [.2EA3.0020.0002] # GRANTHA LETTER SHA +11337 ; [.2EA4.0020.0002] # GRANTHA LETTER SSA +11338 ; [.2EA5.0020.0002] # GRANTHA LETTER SA +11339 ; [.2EA6.0020.0002] # GRANTHA LETTER HA +1133D ; [.2EA7.0020.0002] # GRANTHA SIGN AVAGRAHA +1135E ; [.2EA8.0020.0002] # GRANTHA LETTER VEDIC ANUSVARA +1135F ; [.2EA9.0020.0002] # GRANTHA LETTER VEDIC DOUBLE ANUSVARA +1133E ; [.2EAA.0020.0002] # GRANTHA VOWEL SIGN AA +1133F ; [.2EAB.0020.0002] # GRANTHA VOWEL SIGN I +11340 ; [.2EAC.0020.0002] # GRANTHA VOWEL SIGN II +11341 ; [.2EAD.0020.0002] # GRANTHA VOWEL SIGN U +11342 ; [.2EAE.0020.0002] # GRANTHA VOWEL SIGN UU +11343 ; [.2EAF.0020.0002] # GRANTHA VOWEL SIGN VOCALIC R +11344 ; [.2EB0.0020.0002] # GRANTHA VOWEL SIGN VOCALIC RR +11362 ; [.2EB1.0020.0002] # GRANTHA VOWEL SIGN VOCALIC L +11363 ; [.2EB2.0020.0002] # GRANTHA VOWEL SIGN VOCALIC LL +11347 ; [.2EB3.0020.0002] # GRANTHA VOWEL SIGN EE +11348 ; [.2EB4.0020.0002] # GRANTHA VOWEL SIGN AI +1134B ; [.2EB5.0020.0002] # GRANTHA VOWEL SIGN OO +11347 1133E ; [.2EB5.0020.0002] # GRANTHA VOWEL SIGN OO +1134C ; [.2EB6.0020.0002] # GRANTHA VOWEL SIGN AU +11347 11357 ; [.2EB6.0020.0002] # GRANTHA VOWEL SIGN AU +1134D ; [.2EB7.0020.0002] # GRANTHA SIGN VIRAMA +11357 ; [.2EB8.0020.0002] # GRANTHA AU LENGTH MARK +1135D ; [.2EB9.0020.0002] # GRANTHA SIGN PLUTA +11449 ; [.2EBA.0020.0002] # NEWA OM +1144A ; [.2EBB.0020.0002] # NEWA SIDDHI +11400 ; [.2EBC.0020.0002] # NEWA LETTER A +11401 ; [.2EBD.0020.0002] # NEWA LETTER AA +11402 ; [.2EBE.0020.0002] # NEWA LETTER I +11403 ; [.2EBF.0020.0002] # NEWA LETTER II +11404 ; [.2EC0.0020.0002] # NEWA LETTER U +11405 ; [.2EC1.0020.0002] # NEWA LETTER UU +11406 ; [.2EC2.0020.0002] # NEWA LETTER VOCALIC R +11407 ; [.2EC3.0020.0002] # NEWA LETTER VOCALIC RR +11408 ; [.2EC4.0020.0002] # NEWA LETTER VOCALIC L +11409 ; [.2EC5.0020.0002] # NEWA LETTER VOCALIC LL +1140A ; [.2EC6.0020.0002] # NEWA LETTER E +1140B ; [.2EC7.0020.0002] # NEWA LETTER AI +1140C ; [.2EC8.0020.0002] # NEWA LETTER O +1140D ; [.2EC9.0020.0002] # NEWA LETTER AU +1140E ; [.2ECA.0020.0002] # NEWA LETTER KA +1140F ; [.2ECB.0020.0002] # NEWA LETTER KHA +11410 ; [.2ECC.0020.0002] # NEWA LETTER GA +11411 ; [.2ECD.0020.0002] # NEWA LETTER GHA +11412 ; [.2ECE.0020.0002] # NEWA LETTER NGA +11413 ; [.2ECF.0020.0002] # NEWA LETTER NGHA +11414 ; [.2ED0.0020.0002] # NEWA LETTER CA +11415 ; [.2ED1.0020.0002] # NEWA LETTER CHA +11416 ; [.2ED2.0020.0002] # NEWA LETTER JA +11417 ; [.2ED3.0020.0002] # NEWA LETTER JHA +11418 ; [.2ED4.0020.0002] # NEWA LETTER NYA +11419 ; [.2ED5.0020.0002] # NEWA LETTER NYHA +1141A ; [.2ED6.0020.0002] # NEWA LETTER TTA +1141B ; [.2ED7.0020.0002] # NEWA LETTER TTHA +1141C ; [.2ED8.0020.0002] # NEWA LETTER DDA +1141D ; [.2ED9.0020.0002] # NEWA LETTER DDHA +1141E ; [.2EDA.0020.0002] # NEWA LETTER NNA +1141F ; [.2EDB.0020.0002] # NEWA LETTER TA +11420 ; [.2EDC.0020.0002] # NEWA LETTER THA +11421 ; [.2EDD.0020.0002] # NEWA LETTER DA +11422 ; [.2EDE.0020.0002] # NEWA LETTER DHA +11423 ; [.2EDF.0020.0002] # NEWA LETTER NA +11424 ; [.2EE0.0020.0002] # NEWA LETTER NHA +11425 ; [.2EE1.0020.0002] # NEWA LETTER PA +11426 ; [.2EE2.0020.0002] # NEWA LETTER PHA +11427 ; [.2EE3.0020.0002] # NEWA LETTER BA +11428 ; [.2EE4.0020.0002] # NEWA LETTER BHA +11429 ; [.2EE5.0020.0002] # NEWA LETTER MA +1142A ; [.2EE6.0020.0002] # NEWA LETTER MHA +1142B ; [.2EE7.0020.0002] # NEWA LETTER YA +1142C ; [.2EE8.0020.0002] # NEWA LETTER RA +1142D ; [.2EE9.0020.0002] # NEWA LETTER RHA +1142E ; [.2EEA.0020.0002] # NEWA LETTER LA +1142F ; [.2EEB.0020.0002] # NEWA LETTER LHA +11430 ; [.2EEC.0020.0002] # NEWA LETTER WA +11431 ; [.2EED.0020.0002] # NEWA LETTER SHA +11432 ; [.2EEE.0020.0002] # NEWA LETTER SSA +11433 ; [.2EEF.0020.0002] # NEWA LETTER SA +11434 ; [.2EF0.0020.0002] # NEWA LETTER HA +11447 ; [.2EF1.0020.0002] # NEWA SIGN AVAGRAHA +11460 ; [.2EF2.0020.0002] # NEWA SIGN JIHVAMULIYA +11461 ; [.2EF3.0020.0002] # NEWA SIGN UPADHMANIYA +11448 ; [.2EF4.0020.0002] # NEWA SIGN FINAL ANUSVARA +1145F ; [.2EF5.0020.0002] # NEWA LETTER VEDIC ANUSVARA +11435 ; [.2EF6.0020.0002] # NEWA VOWEL SIGN AA +11436 ; [.2EF7.0020.0002] # NEWA VOWEL SIGN I +11437 ; [.2EF8.0020.0002] # NEWA VOWEL SIGN II +11438 ; [.2EF9.0020.0002] # NEWA VOWEL SIGN U +11439 ; [.2EFA.0020.0002] # NEWA VOWEL SIGN UU +1143A ; [.2EFB.0020.0002] # NEWA VOWEL SIGN VOCALIC R +1143B ; [.2EFC.0020.0002] # NEWA VOWEL SIGN VOCALIC RR +1143C ; [.2EFD.0020.0002] # NEWA VOWEL SIGN VOCALIC L +1143D ; [.2EFE.0020.0002] # NEWA VOWEL SIGN VOCALIC LL +1143E ; [.2EFF.0020.0002] # NEWA VOWEL SIGN E +1143F ; [.2F00.0020.0002] # NEWA VOWEL SIGN AI +11440 ; [.2F01.0020.0002] # NEWA VOWEL SIGN O +11441 ; [.2F02.0020.0002] # NEWA VOWEL SIGN AU +11442 ; [.2F03.0020.0002] # NEWA SIGN VIRAMA +114C7 ; [.2F04.0020.0002] # TIRHUTA OM +11480 ; [.2F05.0020.0002] # TIRHUTA ANJI +11481 ; [.2F06.0020.0002] # TIRHUTA LETTER A +11482 ; [.2F07.0020.0002] # TIRHUTA LETTER AA +11483 ; [.2F08.0020.0002] # TIRHUTA LETTER I +11484 ; [.2F09.0020.0002] # TIRHUTA LETTER II +11485 ; [.2F0A.0020.0002] # TIRHUTA LETTER U +11486 ; [.2F0B.0020.0002] # TIRHUTA LETTER UU +11487 ; [.2F0C.0020.0002] # TIRHUTA LETTER VOCALIC R +11488 ; [.2F0D.0020.0002] # TIRHUTA LETTER VOCALIC RR +11489 ; [.2F0E.0020.0002] # TIRHUTA LETTER VOCALIC L +1148A ; [.2F0F.0020.0002] # TIRHUTA LETTER VOCALIC LL +1148B ; [.2F10.0020.0002] # TIRHUTA LETTER E +1148C ; [.2F11.0020.0002] # TIRHUTA LETTER AI +1148D ; [.2F12.0020.0002] # TIRHUTA LETTER O +1148E ; [.2F13.0020.0002] # TIRHUTA LETTER AU +1148F ; [.2F14.0020.0002] # TIRHUTA LETTER KA +11490 ; [.2F15.0020.0002] # TIRHUTA LETTER KHA +11491 ; [.2F16.0020.0002] # TIRHUTA LETTER GA +11492 ; [.2F17.0020.0002] # TIRHUTA LETTER GHA +11493 ; [.2F18.0020.0002] # TIRHUTA LETTER NGA +11494 ; [.2F19.0020.0002] # TIRHUTA LETTER CA +11495 ; [.2F1A.0020.0002] # TIRHUTA LETTER CHA +11496 ; [.2F1B.0020.0002] # TIRHUTA LETTER JA +11497 ; [.2F1C.0020.0002] # TIRHUTA LETTER JHA +11498 ; [.2F1D.0020.0002] # TIRHUTA LETTER NYA +11499 ; [.2F1E.0020.0002] # TIRHUTA LETTER TTA +1149A ; [.2F1F.0020.0002] # TIRHUTA LETTER TTHA +1149B ; [.2F20.0020.0002] # TIRHUTA LETTER DDA +1149C ; [.2F21.0020.0002] # TIRHUTA LETTER DDHA +1149D ; [.2F22.0020.0002] # TIRHUTA LETTER NNA +1149E ; [.2F23.0020.0002] # TIRHUTA LETTER TA +1149F ; [.2F24.0020.0002] # TIRHUTA LETTER THA +114A0 ; [.2F25.0020.0002] # TIRHUTA LETTER DA +114A1 ; [.2F26.0020.0002] # TIRHUTA LETTER DHA +114A2 ; [.2F27.0020.0002] # TIRHUTA LETTER NA +114A3 ; [.2F28.0020.0002] # TIRHUTA LETTER PA +114A4 ; [.2F29.0020.0002] # TIRHUTA LETTER PHA +114A5 ; [.2F2A.0020.0002] # TIRHUTA LETTER BA +114A6 ; [.2F2B.0020.0002] # TIRHUTA LETTER BHA +114A7 ; [.2F2C.0020.0002] # TIRHUTA LETTER MA +114A8 ; [.2F2D.0020.0002] # TIRHUTA LETTER YA +114A9 ; [.2F2E.0020.0002] # TIRHUTA LETTER RA +114AA ; [.2F2F.0020.0002] # TIRHUTA LETTER LA +114AB ; [.2F30.0020.0002] # TIRHUTA LETTER VA +114AC ; [.2F31.0020.0002] # TIRHUTA LETTER SHA +114AD ; [.2F32.0020.0002] # TIRHUTA LETTER SSA +114AE ; [.2F33.0020.0002] # TIRHUTA LETTER SA +114AF ; [.2F34.0020.0002] # TIRHUTA LETTER HA +114C4 ; [.2F35.0020.0002] # TIRHUTA SIGN AVAGRAHA +114C5 ; [.2F36.0020.0002] # TIRHUTA GVANG +114B0 ; [.2F37.0020.0002] # TIRHUTA VOWEL SIGN AA +114B1 ; [.2F38.0020.0002] # TIRHUTA VOWEL SIGN I +114B2 ; [.2F39.0020.0002] # TIRHUTA VOWEL SIGN II +114B3 ; [.2F3A.0020.0002] # TIRHUTA VOWEL SIGN U +114B4 ; [.2F3B.0020.0002] # TIRHUTA VOWEL SIGN UU +114B5 ; [.2F3C.0020.0002] # TIRHUTA VOWEL SIGN VOCALIC R +114B6 ; [.2F3D.0020.0002] # TIRHUTA VOWEL SIGN VOCALIC RR +114B7 ; [.2F3E.0020.0002] # TIRHUTA VOWEL SIGN VOCALIC L +114B8 ; [.2F3F.0020.0002] # TIRHUTA VOWEL SIGN VOCALIC LL +114B9 ; [.2F40.0020.0002] # TIRHUTA VOWEL SIGN E +114BA ; [.2F41.0020.0002] # TIRHUTA VOWEL SIGN SHORT E +114BB ; [.2F42.0020.0002] # TIRHUTA VOWEL SIGN AI +114B9 114BA ; [.2F42.0020.0002] # TIRHUTA VOWEL SIGN AI +114BC ; [.2F43.0020.0002] # TIRHUTA VOWEL SIGN O +114B9 114B0 ; [.2F43.0020.0002] # TIRHUTA VOWEL SIGN O +114BD ; [.2F44.0020.0002] # TIRHUTA VOWEL SIGN SHORT O +114BE ; [.2F45.0020.0002] # TIRHUTA VOWEL SIGN AU +114B9 114BD ; [.2F45.0020.0002] # TIRHUTA VOWEL SIGN AU +114C2 ; [.2F46.0020.0002] # TIRHUTA SIGN VIRAMA +11580 ; [.2F47.0020.0002] # SIDDHAM LETTER A +11581 ; [.2F48.0020.0002] # SIDDHAM LETTER AA +11582 ; [.2F49.0020.0002] # SIDDHAM LETTER I +115D8 ; [.2F49.0020.0004][.0000.0118.0004] # SIDDHAM LETTER THREE-CIRCLE ALTERNATE I +115D9 ; [.2F49.0020.0004][.0000.0119.0004] # SIDDHAM LETTER TWO-CIRCLE ALTERNATE I +11583 ; [.2F4A.0020.0002] # SIDDHAM LETTER II +115DA ; [.2F4A.0020.0004][.0000.0118.0004] # SIDDHAM LETTER TWO-CIRCLE ALTERNATE II +11584 ; [.2F4B.0020.0002] # SIDDHAM LETTER U +115DB ; [.2F4B.0020.0004][.0000.0118.0004] # SIDDHAM LETTER ALTERNATE U +11585 ; [.2F4C.0020.0002] # SIDDHAM LETTER UU +11586 ; [.2F4D.0020.0002] # SIDDHAM LETTER VOCALIC R +11587 ; [.2F4E.0020.0002] # SIDDHAM LETTER VOCALIC RR +11588 ; [.2F4F.0020.0002] # SIDDHAM LETTER VOCALIC L +11589 ; [.2F50.0020.0002] # SIDDHAM LETTER VOCALIC LL +1158A ; [.2F51.0020.0002] # SIDDHAM LETTER E +1158B ; [.2F52.0020.0002] # SIDDHAM LETTER AI +1158C ; [.2F53.0020.0002] # SIDDHAM LETTER O +1158D ; [.2F54.0020.0002] # SIDDHAM LETTER AU +1158E ; [.2F55.0020.0002] # SIDDHAM LETTER KA +1158F ; [.2F56.0020.0002] # SIDDHAM LETTER KHA +11590 ; [.2F57.0020.0002] # SIDDHAM LETTER GA +11591 ; [.2F58.0020.0002] # SIDDHAM LETTER GHA +11592 ; [.2F59.0020.0002] # SIDDHAM LETTER NGA +11593 ; [.2F5A.0020.0002] # SIDDHAM LETTER CA +11594 ; [.2F5B.0020.0002] # SIDDHAM LETTER CHA +11595 ; [.2F5C.0020.0002] # SIDDHAM LETTER JA +11596 ; [.2F5D.0020.0002] # SIDDHAM LETTER JHA +11597 ; [.2F5E.0020.0002] # SIDDHAM LETTER NYA +11598 ; [.2F5F.0020.0002] # SIDDHAM LETTER TTA +11599 ; [.2F60.0020.0002] # SIDDHAM LETTER TTHA +1159A ; [.2F61.0020.0002] # SIDDHAM LETTER DDA +1159B ; [.2F62.0020.0002] # SIDDHAM LETTER DDHA +1159C ; [.2F63.0020.0002] # SIDDHAM LETTER NNA +1159D ; [.2F64.0020.0002] # SIDDHAM LETTER TA +1159E ; [.2F65.0020.0002] # SIDDHAM LETTER THA +1159F ; [.2F66.0020.0002] # SIDDHAM LETTER DA +115A0 ; [.2F67.0020.0002] # SIDDHAM LETTER DHA +115A1 ; [.2F68.0020.0002] # SIDDHAM LETTER NA +115A2 ; [.2F69.0020.0002] # SIDDHAM LETTER PA +115A3 ; [.2F6A.0020.0002] # SIDDHAM LETTER PHA +115A4 ; [.2F6B.0020.0002] # SIDDHAM LETTER BA +115A5 ; [.2F6C.0020.0002] # SIDDHAM LETTER BHA +115A6 ; [.2F6D.0020.0002] # SIDDHAM LETTER MA +115A7 ; [.2F6E.0020.0002] # SIDDHAM LETTER YA +115A8 ; [.2F6F.0020.0002] # SIDDHAM LETTER RA +115A9 ; [.2F70.0020.0002] # SIDDHAM LETTER LA +115AA ; [.2F71.0020.0002] # SIDDHAM LETTER VA +115AB ; [.2F72.0020.0002] # SIDDHAM LETTER SHA +115AC ; [.2F73.0020.0002] # SIDDHAM LETTER SSA +115AD ; [.2F74.0020.0002] # SIDDHAM LETTER SA +115AE ; [.2F75.0020.0002] # SIDDHAM LETTER HA +115AF ; [.2F76.0020.0002] # SIDDHAM VOWEL SIGN AA +115B0 ; [.2F77.0020.0002] # SIDDHAM VOWEL SIGN I +115B1 ; [.2F78.0020.0002] # SIDDHAM VOWEL SIGN II +115B2 ; [.2F79.0020.0002] # SIDDHAM VOWEL SIGN U +115DC ; [.2F79.0020.0004][.0000.0118.0004] # SIDDHAM VOWEL SIGN ALTERNATE U +115B3 ; [.2F7A.0020.0002] # SIDDHAM VOWEL SIGN UU +115DD ; [.2F7A.0020.0004][.0000.0118.0004] # SIDDHAM VOWEL SIGN ALTERNATE UU +115B4 ; [.2F7B.0020.0002] # SIDDHAM VOWEL SIGN VOCALIC R +115B5 ; [.2F7C.0020.0002] # SIDDHAM VOWEL SIGN VOCALIC RR +115B8 ; [.2F7D.0020.0002] # SIDDHAM VOWEL SIGN E +115B9 ; [.2F7E.0020.0002] # SIDDHAM VOWEL SIGN AI +115BA ; [.2F7F.0020.0002] # SIDDHAM VOWEL SIGN O +115B8 115AF ; [.2F7F.0020.0002] # SIDDHAM VOWEL SIGN O +115BB ; [.2F80.0020.0002] # SIDDHAM VOWEL SIGN AU +115B9 115AF ; [.2F80.0020.0002] # SIDDHAM VOWEL SIGN AU +115BF ; [.2F81.0020.0002] # SIDDHAM SIGN VIRAMA +11600 ; [.2F82.0020.0002] # MODI LETTER A +11601 ; [.2F83.0020.0002] # MODI LETTER AA +11602 ; [.2F84.0020.0002] # MODI LETTER I +11603 ; [.2F85.0020.0002] # MODI LETTER II +11604 ; [.2F86.0020.0002] # MODI LETTER U +11605 ; [.2F87.0020.0002] # MODI LETTER UU +11606 ; [.2F88.0020.0002] # MODI LETTER VOCALIC R +11607 ; [.2F89.0020.0002] # MODI LETTER VOCALIC RR +11608 ; [.2F8A.0020.0002] # MODI LETTER VOCALIC L +11609 ; [.2F8B.0020.0002] # MODI LETTER VOCALIC LL +1160A ; [.2F8C.0020.0002] # MODI LETTER E +1160B ; [.2F8D.0020.0002] # MODI LETTER AI +1160C ; [.2F8E.0020.0002] # MODI LETTER O +1160D ; [.2F8F.0020.0002] # MODI LETTER AU +1160E ; [.2F90.0020.0002] # MODI LETTER KA +1160F ; [.2F91.0020.0002] # MODI LETTER KHA +11610 ; [.2F92.0020.0002] # MODI LETTER GA +11611 ; [.2F93.0020.0002] # MODI LETTER GHA +11612 ; [.2F94.0020.0002] # MODI LETTER NGA +11613 ; [.2F95.0020.0002] # MODI LETTER CA +11614 ; [.2F96.0020.0002] # MODI LETTER CHA +11615 ; [.2F97.0020.0002] # MODI LETTER JA +11616 ; [.2F98.0020.0002] # MODI LETTER JHA +11617 ; [.2F99.0020.0002] # MODI LETTER NYA +11618 ; [.2F9A.0020.0002] # MODI LETTER TTA +11619 ; [.2F9B.0020.0002] # MODI LETTER TTHA +1161A ; [.2F9C.0020.0002] # MODI LETTER DDA +1161B ; [.2F9D.0020.0002] # MODI LETTER DDHA +1161C ; [.2F9E.0020.0002] # MODI LETTER NNA +1161D ; [.2F9F.0020.0002] # MODI LETTER TA +1161E ; [.2FA0.0020.0002] # MODI LETTER THA +1161F ; [.2FA1.0020.0002] # MODI LETTER DA +11620 ; [.2FA2.0020.0002] # MODI LETTER DHA +11621 ; [.2FA3.0020.0002] # MODI LETTER NA +11622 ; [.2FA4.0020.0002] # MODI LETTER PA +11623 ; [.2FA5.0020.0002] # MODI LETTER PHA +11624 ; [.2FA6.0020.0002] # MODI LETTER BA +11625 ; [.2FA7.0020.0002] # MODI LETTER BHA +11626 ; [.2FA8.0020.0002] # MODI LETTER MA +11627 ; [.2FA9.0020.0002] # MODI LETTER YA +11628 ; [.2FAA.0020.0002] # MODI LETTER RA +11629 ; [.2FAB.0020.0002] # MODI LETTER LA +1162A ; [.2FAC.0020.0002] # MODI LETTER VA +1162B ; [.2FAD.0020.0002] # MODI LETTER SHA +1162C ; [.2FAE.0020.0002] # MODI LETTER SSA +1162D ; [.2FAF.0020.0002] # MODI LETTER SA +1162E ; [.2FB0.0020.0002] # MODI LETTER HA +1162F ; [.2FB1.0020.0002] # MODI LETTER LLA +11630 ; [.2FB2.0020.0002] # MODI VOWEL SIGN AA +11631 ; [.2FB3.0020.0002] # MODI VOWEL SIGN I +11632 ; [.2FB4.0020.0002] # MODI VOWEL SIGN II +11633 ; [.2FB5.0020.0002] # MODI VOWEL SIGN U +11634 ; [.2FB6.0020.0002] # MODI VOWEL SIGN UU +11635 ; [.2FB7.0020.0002] # MODI VOWEL SIGN VOCALIC R +11636 ; [.2FB8.0020.0002] # MODI VOWEL SIGN VOCALIC RR +11637 ; [.2FB9.0020.0002] # MODI VOWEL SIGN VOCALIC L +11638 ; [.2FBA.0020.0002] # MODI VOWEL SIGN VOCALIC LL +11639 ; [.2FBB.0020.0002] # MODI VOWEL SIGN E +1163A ; [.2FBC.0020.0002] # MODI VOWEL SIGN AI +1163B ; [.2FBD.0020.0002] # MODI VOWEL SIGN O +1163C ; [.2FBE.0020.0002] # MODI VOWEL SIGN AU +1163F ; [.2FBF.0020.0002] # MODI SIGN VIRAMA +11644 ; [.2FC0.0020.0002] # MODI SIGN HUVA +11680 ; [.2FC1.0020.0002] # TAKRI LETTER A +11681 ; [.2FC2.0020.0002] # TAKRI LETTER AA +11682 ; [.2FC3.0020.0002] # TAKRI LETTER I +11683 ; [.2FC4.0020.0002] # TAKRI LETTER II +11684 ; [.2FC5.0020.0002] # TAKRI LETTER U +11685 ; [.2FC6.0020.0002] # TAKRI LETTER UU +11686 ; [.2FC7.0020.0002] # TAKRI LETTER E +11687 ; [.2FC8.0020.0002] # TAKRI LETTER AI +11688 ; [.2FC9.0020.0002] # TAKRI LETTER O +11689 ; [.2FCA.0020.0002] # TAKRI LETTER AU +116A8 ; [.2FCB.0020.0002] # TAKRI LETTER SA +116A7 ; [.2FCC.0020.0002] # TAKRI LETTER SHA +116A9 ; [.2FCD.0020.0002] # TAKRI LETTER HA +1168A ; [.2FCE.0020.0002] # TAKRI LETTER KA +1168B ; [.2FCF.0020.0002] # TAKRI LETTER KHA +116B8 ; [.2FD0.0020.0002] # TAKRI LETTER ARCHAIC KHA +1168C ; [.2FD1.0020.0002] # TAKRI LETTER GA +1168D ; [.2FD2.0020.0002] # TAKRI LETTER GHA +1168E ; [.2FD3.0020.0002] # TAKRI LETTER NGA +1168F ; [.2FD4.0020.0002] # TAKRI LETTER CA +11690 ; [.2FD5.0020.0002] # TAKRI LETTER CHA +11691 ; [.2FD6.0020.0002] # TAKRI LETTER JA +11692 ; [.2FD7.0020.0002] # TAKRI LETTER JHA +11693 ; [.2FD8.0020.0002] # TAKRI LETTER NYA +11694 ; [.2FD9.0020.0002] # TAKRI LETTER TTA +11695 ; [.2FDA.0020.0002] # TAKRI LETTER TTHA +11696 ; [.2FDB.0020.0002] # TAKRI LETTER DDA +11697 ; [.2FDC.0020.0002] # TAKRI LETTER DDHA +11698 ; [.2FDD.0020.0002] # TAKRI LETTER NNA +11699 ; [.2FDE.0020.0002] # TAKRI LETTER TA +1169A ; [.2FDF.0020.0002] # TAKRI LETTER THA +1169B ; [.2FE0.0020.0002] # TAKRI LETTER DA +1169C ; [.2FE1.0020.0002] # TAKRI LETTER DHA +1169D ; [.2FE2.0020.0002] # TAKRI LETTER NA +1169E ; [.2FE3.0020.0002] # TAKRI LETTER PA +1169F ; [.2FE4.0020.0002] # TAKRI LETTER PHA +116A0 ; [.2FE5.0020.0002] # TAKRI LETTER BA +116A1 ; [.2FE6.0020.0002] # TAKRI LETTER BHA +116A2 ; [.2FE7.0020.0002] # TAKRI LETTER MA +116A3 ; [.2FE8.0020.0002] # TAKRI LETTER YA +116A4 ; [.2FE9.0020.0002] # TAKRI LETTER RA +116A5 ; [.2FEA.0020.0002] # TAKRI LETTER LA +116A6 ; [.2FEB.0020.0002] # TAKRI LETTER VA +116AA ; [.2FEC.0020.0002] # TAKRI LETTER RRA +116AD ; [.2FED.0020.0002] # TAKRI VOWEL SIGN AA +116AE ; [.2FEE.0020.0002] # TAKRI VOWEL SIGN I +116AF ; [.2FEF.0020.0002] # TAKRI VOWEL SIGN II +116B0 ; [.2FF0.0020.0002] # TAKRI VOWEL SIGN U +116B1 ; [.2FF1.0020.0002] # TAKRI VOWEL SIGN UU +116B2 ; [.2FF2.0020.0002] # TAKRI VOWEL SIGN E +116B3 ; [.2FF3.0020.0002] # TAKRI VOWEL SIGN AI +116B4 ; [.2FF4.0020.0002] # TAKRI VOWEL SIGN O +116B5 ; [.2FF5.0020.0002] # TAKRI VOWEL SIGN AU +116B6 ; [.2FF6.0020.0002] # TAKRI SIGN VIRAMA +11900 ; [.2FF7.0020.0002] # DIVES AKURU LETTER A +11901 ; [.2FF8.0020.0002] # DIVES AKURU LETTER AA +11902 ; [.2FF9.0020.0002] # DIVES AKURU LETTER I +11903 ; [.2FFA.0020.0002] # DIVES AKURU LETTER II +11904 ; [.2FFB.0020.0002] # DIVES AKURU LETTER U +11905 ; [.2FFC.0020.0002] # DIVES AKURU LETTER UU +11906 ; [.2FFD.0020.0002] # DIVES AKURU LETTER E +11909 ; [.2FFE.0020.0002] # DIVES AKURU LETTER O +1190C ; [.2FFF.0020.0002] # DIVES AKURU LETTER KA +1190D ; [.3000.0020.0002] # DIVES AKURU LETTER KHA +1190E ; [.3001.0020.0002] # DIVES AKURU LETTER GA +1190F ; [.3002.0020.0002] # DIVES AKURU LETTER GHA +11910 ; [.3003.0020.0002] # DIVES AKURU LETTER NGA +1193F ; [.3004.0020.0002] # DIVES AKURU PREFIXED NASAL SIGN +11911 ; [.3005.0020.0002] # DIVES AKURU LETTER CA +11912 ; [.3006.0020.0002] # DIVES AKURU LETTER CHA +11913 ; [.3007.0020.0002] # DIVES AKURU LETTER JA +11915 ; [.3008.0020.0002] # DIVES AKURU LETTER NYA +11916 ; [.3009.0020.0002] # DIVES AKURU LETTER TTA +11918 ; [.300A.0020.0002] # DIVES AKURU LETTER DDA +11919 ; [.300B.0020.0002] # DIVES AKURU LETTER DDHA +1191A ; [.300C.0020.0002] # DIVES AKURU LETTER NNA +1191B ; [.300D.0020.0002] # DIVES AKURU LETTER TA +1191C ; [.300E.0020.0002] # DIVES AKURU LETTER THA +1191D ; [.300F.0020.0002] # DIVES AKURU LETTER DA +1191E ; [.3010.0020.0002] # DIVES AKURU LETTER DHA +1191F ; [.3011.0020.0002] # DIVES AKURU LETTER NA +11920 ; [.3012.0020.0002] # DIVES AKURU LETTER PA +11921 ; [.3013.0020.0002] # DIVES AKURU LETTER PHA +11922 ; [.3014.0020.0002] # DIVES AKURU LETTER BA +11923 ; [.3015.0020.0002] # DIVES AKURU LETTER BHA +11924 ; [.3016.0020.0002] # DIVES AKURU LETTER MA +11925 ; [.3017.0020.0002] # DIVES AKURU LETTER YA +11940 ; [.3018.0020.0002] # DIVES AKURU MEDIAL YA +11926 ; [.3019.0020.0002] # DIVES AKURU LETTER YYA +11941 ; [.301A.0020.0002] # DIVES AKURU INITIAL RA +11927 ; [.301B.0020.0002] # DIVES AKURU LETTER RA +11942 ; [.301C.0020.0002] # DIVES AKURU MEDIAL RA +11928 ; [.301D.0020.0002] # DIVES AKURU LETTER LA +11929 ; [.301E.0020.0002] # DIVES AKURU LETTER VA +1192A ; [.301F.0020.0002] # DIVES AKURU LETTER SHA +1192B ; [.3020.0020.0002] # DIVES AKURU LETTER SSA +1192C ; [.3021.0020.0002] # DIVES AKURU LETTER SA +1192D ; [.3022.0020.0002] # DIVES AKURU LETTER HA +1192E ; [.3023.0020.0002] # DIVES AKURU LETTER LLA +1192F ; [.3024.0020.0002] # DIVES AKURU LETTER ZA +11930 ; [.3025.0020.0002] # DIVES AKURU VOWEL SIGN AA +11931 ; [.3026.0020.0002] # DIVES AKURU VOWEL SIGN I +11932 ; [.3027.0020.0002] # DIVES AKURU VOWEL SIGN II +11933 ; [.3028.0020.0002] # DIVES AKURU VOWEL SIGN U +11934 ; [.3029.0020.0002] # DIVES AKURU VOWEL SIGN UU +11935 ; [.302A.0020.0002] # DIVES AKURU VOWEL SIGN E +11937 ; [.302B.0020.0002] # DIVES AKURU VOWEL SIGN AI +11938 ; [.302C.0020.0002] # DIVES AKURU VOWEL SIGN O +11935 11930 ; [.302C.0020.0002] # DIVES AKURU VOWEL SIGN O +1193D ; [.302D.0020.0002] # DIVES AKURU SIGN HALANTA +1193E ; [.302E.0020.0002] # DIVES AKURU VIRAMA +119A0 ; [.302F.0020.0002] # NANDINAGARI LETTER A +119A1 ; [.3030.0020.0002] # NANDINAGARI LETTER AA +119A2 ; [.3031.0020.0002] # NANDINAGARI LETTER I +119A3 ; [.3032.0020.0002] # NANDINAGARI LETTER II +119A4 ; [.3033.0020.0002] # NANDINAGARI LETTER U +119A5 ; [.3034.0020.0002] # NANDINAGARI LETTER UU +119A6 ; [.3035.0020.0002] # NANDINAGARI LETTER VOCALIC R +119A7 ; [.3036.0020.0002] # NANDINAGARI LETTER VOCALIC RR +119AA ; [.3037.0020.0002] # NANDINAGARI LETTER E +119AB ; [.3038.0020.0002] # NANDINAGARI LETTER AI +119AC ; [.3039.0020.0002] # NANDINAGARI LETTER O +119AD ; [.303A.0020.0002] # NANDINAGARI LETTER AU +119AE ; [.303B.0020.0002] # NANDINAGARI LETTER KA +119AF ; [.303C.0020.0002] # NANDINAGARI LETTER KHA +119B0 ; [.303D.0020.0002] # NANDINAGARI LETTER GA +119B1 ; [.303E.0020.0002] # NANDINAGARI LETTER GHA +119B2 ; [.303F.0020.0002] # NANDINAGARI LETTER NGA +119B3 ; [.3040.0020.0002] # NANDINAGARI LETTER CA +119B4 ; [.3041.0020.0002] # NANDINAGARI LETTER CHA +119B5 ; [.3042.0020.0002] # NANDINAGARI LETTER JA +119B6 ; [.3043.0020.0002] # NANDINAGARI LETTER JHA +119B7 ; [.3044.0020.0002] # NANDINAGARI LETTER NYA +119B8 ; [.3045.0020.0002] # NANDINAGARI LETTER TTA +119B9 ; [.3046.0020.0002] # NANDINAGARI LETTER TTHA +119BA ; [.3047.0020.0002] # NANDINAGARI LETTER DDA +119BB ; [.3048.0020.0002] # NANDINAGARI LETTER DDHA +119BC ; [.3049.0020.0002] # NANDINAGARI LETTER NNA +119BD ; [.304A.0020.0002] # NANDINAGARI LETTER TA +119BE ; [.304B.0020.0002] # NANDINAGARI LETTER THA +119BF ; [.304C.0020.0002] # NANDINAGARI LETTER DA +119C0 ; [.304D.0020.0002] # NANDINAGARI LETTER DHA +119C1 ; [.304E.0020.0002] # NANDINAGARI LETTER NA +119C2 ; [.304F.0020.0002] # NANDINAGARI LETTER PA +119C3 ; [.3050.0020.0002] # NANDINAGARI LETTER PHA +119C4 ; [.3051.0020.0002] # NANDINAGARI LETTER BA +119C5 ; [.3052.0020.0002] # NANDINAGARI LETTER BHA +119C6 ; [.3053.0020.0002] # NANDINAGARI LETTER MA +119C7 ; [.3054.0020.0002] # NANDINAGARI LETTER YA +119C8 ; [.3055.0020.0002] # NANDINAGARI LETTER RA +119C9 ; [.3056.0020.0002] # NANDINAGARI LETTER LA +119CA ; [.3057.0020.0002] # NANDINAGARI LETTER VA +119CB ; [.3058.0020.0002] # NANDINAGARI LETTER SHA +119CC ; [.3059.0020.0002] # NANDINAGARI LETTER SSA +119CD ; [.305A.0020.0002] # NANDINAGARI LETTER SA +119CE ; [.305B.0020.0002] # NANDINAGARI LETTER HA +119CF ; [.305C.0020.0002] # NANDINAGARI LETTER LLA +119D0 ; [.305D.0020.0002] # NANDINAGARI LETTER RRA +119E1 ; [.305E.0020.0002] # NANDINAGARI SIGN AVAGRAHA +119E3 ; [.305F.0020.0002] # NANDINAGARI HEADSTROKE +119D1 ; [.3060.0020.0002] # NANDINAGARI VOWEL SIGN AA +119D2 ; [.3061.0020.0002] # NANDINAGARI VOWEL SIGN I +119D3 ; [.3062.0020.0002] # NANDINAGARI VOWEL SIGN II +119D4 ; [.3063.0020.0002] # NANDINAGARI VOWEL SIGN U +119D5 ; [.3064.0020.0002] # NANDINAGARI VOWEL SIGN UU +119D6 ; [.3065.0020.0002] # NANDINAGARI VOWEL SIGN VOCALIC R +119D7 ; [.3066.0020.0002] # NANDINAGARI VOWEL SIGN VOCALIC RR +119DA ; [.3067.0020.0002] # NANDINAGARI VOWEL SIGN E +119E4 ; [.3068.0020.0002] # NANDINAGARI VOWEL SIGN PRISHTHAMATRA E +119DB ; [.3069.0020.0002] # NANDINAGARI VOWEL SIGN AI +119DC ; [.306A.0020.0002] # NANDINAGARI VOWEL SIGN O +119DD ; [.306B.0020.0002] # NANDINAGARI VOWEL SIGN AU +119E0 ; [.306C.0020.0002] # NANDINAGARI SIGN VIRAMA +11800 ; [.306D.0020.0002] # DOGRA LETTER A +11801 ; [.306E.0020.0002] # DOGRA LETTER AA +11802 ; [.306F.0020.0002] # DOGRA LETTER I +11803 ; [.3070.0020.0002] # DOGRA LETTER II +11804 ; [.3071.0020.0002] # DOGRA LETTER U +11805 ; [.3072.0020.0002] # DOGRA LETTER UU +11806 ; [.3073.0020.0002] # DOGRA LETTER E +11807 ; [.3074.0020.0002] # DOGRA LETTER AI +11808 ; [.3075.0020.0002] # DOGRA LETTER O +11809 ; [.3076.0020.0002] # DOGRA LETTER AU +1180A ; [.3077.0020.0002] # DOGRA LETTER KA +1180B ; [.3078.0020.0002] # DOGRA LETTER KHA +1180C ; [.3079.0020.0002] # DOGRA LETTER GA +1180D ; [.307A.0020.0002] # DOGRA LETTER GHA +1180E ; [.307B.0020.0002] # DOGRA LETTER NGA +1180F ; [.307C.0020.0002] # DOGRA LETTER CA +11810 ; [.307D.0020.0002] # DOGRA LETTER CHA +11811 ; [.307E.0020.0002] # DOGRA LETTER JA +11812 ; [.307F.0020.0002] # DOGRA LETTER JHA +11813 ; [.3080.0020.0002] # DOGRA LETTER NYA +11814 ; [.3081.0020.0002] # DOGRA LETTER TTA +11815 ; [.3082.0020.0002] # DOGRA LETTER TTHA +11816 ; [.3083.0020.0002] # DOGRA LETTER DDA +11817 ; [.3084.0020.0002] # DOGRA LETTER DDHA +11818 ; [.3085.0020.0002] # DOGRA LETTER NNA +11819 ; [.3086.0020.0002] # DOGRA LETTER TA +1181A ; [.3087.0020.0002] # DOGRA LETTER THA +1181B ; [.3088.0020.0002] # DOGRA LETTER DA +1181C ; [.3089.0020.0002] # DOGRA LETTER DHA +1181D ; [.308A.0020.0002] # DOGRA LETTER NA +1181E ; [.308B.0020.0002] # DOGRA LETTER PA +1181F ; [.308C.0020.0002] # DOGRA LETTER PHA +11820 ; [.308D.0020.0002] # DOGRA LETTER BA +11821 ; [.308E.0020.0002] # DOGRA LETTER BHA +11822 ; [.308F.0020.0002] # DOGRA LETTER MA +11823 ; [.3090.0020.0002] # DOGRA LETTER YA +11824 ; [.3091.0020.0002] # DOGRA LETTER RA +11825 ; [.3092.0020.0002] # DOGRA LETTER LA +11826 ; [.3093.0020.0002] # DOGRA LETTER VA +11827 ; [.3094.0020.0002] # DOGRA LETTER SHA +11828 ; [.3095.0020.0002] # DOGRA LETTER SSA +11829 ; [.3096.0020.0002] # DOGRA LETTER SA +1182A ; [.3097.0020.0002] # DOGRA LETTER HA +1182B ; [.3098.0020.0002] # DOGRA LETTER RRA +1182C ; [.3099.0020.0002] # DOGRA VOWEL SIGN AA +1182D ; [.309A.0020.0002] # DOGRA VOWEL SIGN I +1182E ; [.309B.0020.0002] # DOGRA VOWEL SIGN II +1182F ; [.309C.0020.0002] # DOGRA VOWEL SIGN U +11830 ; [.309D.0020.0002] # DOGRA VOWEL SIGN UU +11831 ; [.309E.0020.0002] # DOGRA VOWEL SIGN VOCALIC R +11832 ; [.309F.0020.0002] # DOGRA VOWEL SIGN VOCALIC RR +11833 ; [.30A0.0020.0002] # DOGRA VOWEL SIGN E +11834 ; [.30A1.0020.0002] # DOGRA VOWEL SIGN AI +11835 ; [.30A2.0020.0002] # DOGRA VOWEL SIGN O +11836 ; [.30A3.0020.0002] # DOGRA VOWEL SIGN AU +11839 ; [.30A4.0020.0002] # DOGRA SIGN VIRAMA +11700 ; [.30A5.0020.0002] # AHOM LETTER KA +11701 ; [.30A6.0020.0002] # AHOM LETTER KHA +11702 ; [.30A7.0020.0002] # AHOM LETTER NGA +11703 ; [.30A8.0020.0002] # AHOM LETTER NA +11704 ; [.30A9.0020.0002] # AHOM LETTER TA +11705 ; [.30A9.0020.0004][.0000.0118.0004] # AHOM LETTER ALTERNATE TA +11706 ; [.30AA.0020.0002] # AHOM LETTER PA +11707 ; [.30AB.0020.0002] # AHOM LETTER PHA +11708 ; [.30AC.0020.0002] # AHOM LETTER BA +1171A ; [.30AC.0020.0004][.0000.0118.0004] # AHOM LETTER ALTERNATE BA +11709 ; [.30AD.0020.0002] # AHOM LETTER MA +1170A ; [.30AE.0020.0002] # AHOM LETTER JA +1170B ; [.30AF.0020.0002] # AHOM LETTER CHA +1170C ; [.30B0.0020.0002] # AHOM LETTER THA +1170D ; [.30B1.0020.0002] # AHOM LETTER RA +1170E ; [.30B2.0020.0002] # AHOM LETTER LA +1170F ; [.30B3.0020.0002] # AHOM LETTER SA +11710 ; [.30B4.0020.0002] # AHOM LETTER NYA +11711 ; [.30B5.0020.0002] # AHOM LETTER HA +11712 ; [.30B6.0020.0002] # AHOM LETTER A +11713 ; [.30B7.0020.0002] # AHOM LETTER DA +11714 ; [.30B8.0020.0002] # AHOM LETTER DHA +11715 ; [.30B9.0020.0002] # AHOM LETTER GA +11716 ; [.30B9.0020.0004][.0000.0118.0004] # AHOM LETTER ALTERNATE GA +11717 ; [.30BA.0020.0002] # AHOM LETTER GHA +11718 ; [.30BB.0020.0002] # AHOM LETTER BHA +11719 ; [.30BC.0020.0002] # AHOM LETTER JHA +11720 ; [.30BD.0020.0002] # AHOM VOWEL SIGN A +11721 ; [.30BE.0020.0002] # AHOM VOWEL SIGN AA +11722 ; [.30BF.0020.0002] # AHOM VOWEL SIGN I +11723 ; [.30C0.0020.0002] # AHOM VOWEL SIGN II +11724 ; [.30C1.0020.0002] # AHOM VOWEL SIGN U +11725 ; [.30C2.0020.0002] # AHOM VOWEL SIGN UU +11726 ; [.30C3.0020.0002] # AHOM VOWEL SIGN E +11727 ; [.30C4.0020.0002] # AHOM VOWEL SIGN AW +11728 ; [.30C5.0020.0002] # AHOM VOWEL SIGN O +11729 ; [.30C6.0020.0002] # AHOM VOWEL SIGN AI +1172A ; [.30C7.0020.0002] # AHOM VOWEL SIGN AM +1172B ; [.30C8.0020.0002] # AHOM SIGN KILLER +1171D ; [.30C9.0020.0002] # AHOM CONSONANT SIGN MEDIAL LA +1171E ; [.30CA.0020.0002] # AHOM CONSONANT SIGN MEDIAL RA +1171F ; [.30CB.0020.0002] # AHOM CONSONANT SIGN MEDIAL LIGATING RA +11D00 ; [.30CC.0020.0002] # MASARAM GONDI LETTER A +11D01 ; [.30CD.0020.0002] # MASARAM GONDI LETTER AA +11D02 ; [.30CE.0020.0002] # MASARAM GONDI LETTER I +11D03 ; [.30CF.0020.0002] # MASARAM GONDI LETTER II +11D04 ; [.30D0.0020.0002] # MASARAM GONDI LETTER U +11D05 ; [.30D1.0020.0002] # MASARAM GONDI LETTER UU +11D06 ; [.30D2.0020.0002] # MASARAM GONDI LETTER E +11D08 ; [.30D3.0020.0002] # MASARAM GONDI LETTER AI +11D09 ; [.30D4.0020.0002] # MASARAM GONDI LETTER O +11D0B ; [.30D5.0020.0002] # MASARAM GONDI LETTER AU +11D0C ; [.30D6.0020.0002] # MASARAM GONDI LETTER KA +11D0D ; [.30D7.0020.0002] # MASARAM GONDI LETTER KHA +11D0E ; [.30D8.0020.0002] # MASARAM GONDI LETTER GA +11D0F ; [.30D9.0020.0002] # MASARAM GONDI LETTER GHA +11D10 ; [.30DA.0020.0002] # MASARAM GONDI LETTER NGA +11D11 ; [.30DB.0020.0002] # MASARAM GONDI LETTER CA +11D12 ; [.30DC.0020.0002] # MASARAM GONDI LETTER CHA +11D13 ; [.30DD.0020.0002] # MASARAM GONDI LETTER JA +11D14 ; [.30DE.0020.0002] # MASARAM GONDI LETTER JHA +11D15 ; [.30DF.0020.0002] # MASARAM GONDI LETTER NYA +11D16 ; [.30E0.0020.0002] # MASARAM GONDI LETTER TTA +11D17 ; [.30E1.0020.0002] # MASARAM GONDI LETTER TTHA +11D18 ; [.30E2.0020.0002] # MASARAM GONDI LETTER DDA +11D19 ; [.30E3.0020.0002] # MASARAM GONDI LETTER DDHA +11D1A ; [.30E4.0020.0002] # MASARAM GONDI LETTER NNA +11D1B ; [.30E5.0020.0002] # MASARAM GONDI LETTER TA +11D1C ; [.30E6.0020.0002] # MASARAM GONDI LETTER THA +11D1D ; [.30E7.0020.0002] # MASARAM GONDI LETTER DA +11D1E ; [.30E8.0020.0002] # MASARAM GONDI LETTER DHA +11D1F ; [.30E9.0020.0002] # MASARAM GONDI LETTER NA +11D20 ; [.30EA.0020.0002] # MASARAM GONDI LETTER PA +11D21 ; [.30EB.0020.0002] # MASARAM GONDI LETTER PHA +11D22 ; [.30EC.0020.0002] # MASARAM GONDI LETTER BA +11D23 ; [.30ED.0020.0002] # MASARAM GONDI LETTER BHA +11D24 ; [.30EE.0020.0002] # MASARAM GONDI LETTER MA +11D25 ; [.30EF.0020.0002] # MASARAM GONDI LETTER YA +11D26 ; [.30F0.0020.0002] # MASARAM GONDI LETTER RA +11D46 ; [.30F0.0020.0017] # MASARAM GONDI REPHA +11D47 ; [.30F0.0020.0019] # MASARAM GONDI RA-KARA +11D27 ; [.30F1.0020.0002] # MASARAM GONDI LETTER LA +11D28 ; [.30F2.0020.0002] # MASARAM GONDI LETTER VA +11D29 ; [.30F3.0020.0002] # MASARAM GONDI LETTER SHA +11D2A ; [.30F4.0020.0002] # MASARAM GONDI LETTER SSA +11D2B ; [.30F5.0020.0002] # MASARAM GONDI LETTER SA +11D2C ; [.30F6.0020.0002] # MASARAM GONDI LETTER HA +11D2D ; [.30F7.0020.0002] # MASARAM GONDI LETTER LLA +11D2E ; [.30F8.0020.0002] # MASARAM GONDI LETTER KSSA +11D2F ; [.30F9.0020.0002] # MASARAM GONDI LETTER JNYA +11D30 ; [.30FA.0020.0002] # MASARAM GONDI LETTER TRA +11D31 ; [.30FB.0020.0002] # MASARAM GONDI VOWEL SIGN AA +11D32 ; [.30FC.0020.0002] # MASARAM GONDI VOWEL SIGN I +11D33 ; [.30FD.0020.0002] # MASARAM GONDI VOWEL SIGN II +11D34 ; [.30FE.0020.0002] # MASARAM GONDI VOWEL SIGN U +11D35 ; [.30FF.0020.0002] # MASARAM GONDI VOWEL SIGN UU +11D36 ; [.3100.0020.0002] # MASARAM GONDI VOWEL SIGN VOCALIC R +11D3A ; [.3101.0020.0002] # MASARAM GONDI VOWEL SIGN E +11D3C ; [.3102.0020.0002] # MASARAM GONDI VOWEL SIGN AI +11D3D ; [.3103.0020.0002] # MASARAM GONDI VOWEL SIGN O +11D3F ; [.3104.0020.0002] # MASARAM GONDI VOWEL SIGN AU +11D44 ; [.3105.0020.0002] # MASARAM GONDI SIGN HALANTA +11D45 ; [.3106.0020.0002] # MASARAM GONDI VIRAMA +11D98 ; [.3107.0020.0002] # GUNJALA GONDI OM +11D60 ; [.3108.0020.0002] # GUNJALA GONDI LETTER A +11D61 ; [.3109.0020.0002] # GUNJALA GONDI LETTER AA +11D62 ; [.310A.0020.0002] # GUNJALA GONDI LETTER I +11D63 ; [.310B.0020.0002] # GUNJALA GONDI LETTER II +11D64 ; [.310C.0020.0002] # GUNJALA GONDI LETTER U +11D65 ; [.310D.0020.0002] # GUNJALA GONDI LETTER UU +11D67 ; [.310E.0020.0002] # GUNJALA GONDI LETTER EE +11D68 ; [.310F.0020.0002] # GUNJALA GONDI LETTER AI +11D6A ; [.3110.0020.0002] # GUNJALA GONDI LETTER OO +11D6B ; [.3111.0020.0002] # GUNJALA GONDI LETTER AU +11D6C ; [.3112.0020.0002] # GUNJALA GONDI LETTER YA +11D6D ; [.3113.0020.0002] # GUNJALA GONDI LETTER VA +11D6E ; [.3114.0020.0002] # GUNJALA GONDI LETTER BA +11D6F ; [.3115.0020.0002] # GUNJALA GONDI LETTER BHA +11D70 ; [.3116.0020.0002] # GUNJALA GONDI LETTER MA +11D71 ; [.3117.0020.0002] # GUNJALA GONDI LETTER KA +11D72 ; [.3118.0020.0002] # GUNJALA GONDI LETTER KHA +11D73 ; [.3119.0020.0002] # GUNJALA GONDI LETTER TA +11D74 ; [.311A.0020.0002] # GUNJALA GONDI LETTER THA +11D75 ; [.311B.0020.0002] # GUNJALA GONDI LETTER LA +11D76 ; [.311C.0020.0002] # GUNJALA GONDI LETTER GA +11D77 ; [.311D.0020.0002] # GUNJALA GONDI LETTER GHA +11D78 ; [.311E.0020.0002] # GUNJALA GONDI LETTER DA +11D79 ; [.311F.0020.0002] # GUNJALA GONDI LETTER DHA +11D7A ; [.3120.0020.0002] # GUNJALA GONDI LETTER NA +11D7B ; [.3121.0020.0002] # GUNJALA GONDI LETTER CA +11D7C ; [.3122.0020.0002] # GUNJALA GONDI LETTER CHA +11D7D ; [.3123.0020.0002] # GUNJALA GONDI LETTER TTA +11D7E ; [.3124.0020.0002] # GUNJALA GONDI LETTER TTHA +11D7F ; [.3125.0020.0002] # GUNJALA GONDI LETTER LLA +11D80 ; [.3126.0020.0002] # GUNJALA GONDI LETTER JA +11D81 ; [.3127.0020.0002] # GUNJALA GONDI LETTER JHA +11D82 ; [.3128.0020.0002] # GUNJALA GONDI LETTER DDA +11D83 ; [.3129.0020.0002] # GUNJALA GONDI LETTER DDHA +11D84 ; [.312A.0020.0002] # GUNJALA GONDI LETTER NGA +11D85 ; [.312B.0020.0002] # GUNJALA GONDI LETTER PA +11D86 ; [.312C.0020.0002] # GUNJALA GONDI LETTER PHA +11D87 ; [.312D.0020.0002] # GUNJALA GONDI LETTER HA +11D88 ; [.312E.0020.0002] # GUNJALA GONDI LETTER RA +11D89 ; [.312F.0020.0002] # GUNJALA GONDI LETTER SA +11D8A ; [.3130.0020.0002] # GUNJALA GONDI VOWEL SIGN AA +11D8B ; [.3131.0020.0002] # GUNJALA GONDI VOWEL SIGN I +11D8C ; [.3132.0020.0002] # GUNJALA GONDI VOWEL SIGN II +11D8D ; [.3133.0020.0002] # GUNJALA GONDI VOWEL SIGN U +11D8E ; [.3134.0020.0002] # GUNJALA GONDI VOWEL SIGN UU +11D90 ; [.3135.0020.0002] # GUNJALA GONDI VOWEL SIGN EE +11D91 ; [.3136.0020.0002] # GUNJALA GONDI VOWEL SIGN AI +11D93 ; [.3137.0020.0002] # GUNJALA GONDI VOWEL SIGN OO +11D94 ; [.3138.0020.0002] # GUNJALA GONDI VOWEL SIGN AU +11D97 ; [.3139.0020.0002] # GUNJALA GONDI VIRAMA +1B83 ; [.313A.0020.0002] # SUNDANESE LETTER A +1BBA ; [.313A.0020.0004] # SUNDANESE AVAGRAHA +1B84 ; [.313B.0020.0002] # SUNDANESE LETTER I +1B85 ; [.313C.0020.0002] # SUNDANESE LETTER U +1B86 ; [.313D.0020.0002] # SUNDANESE LETTER AE +1B87 ; [.313E.0020.0002] # SUNDANESE LETTER O +1B88 ; [.313F.0020.0002] # SUNDANESE LETTER E +1B89 ; [.3140.0020.0002] # SUNDANESE LETTER EU +1B8A ; [.3141.0020.0002] # SUNDANESE LETTER KA +1BBE ; [.3141.0020.0019] # SUNDANESE LETTER FINAL K +1BAE ; [.3142.0020.0002] # SUNDANESE LETTER KHA +1B8B ; [.3143.0020.0002] # SUNDANESE LETTER QA +1B8C ; [.3144.0020.0002] # SUNDANESE LETTER GA +1B8D ; [.3145.0020.0002] # SUNDANESE LETTER NGA +1B8E ; [.3146.0020.0002] # SUNDANESE LETTER CA +1B8F ; [.3147.0020.0002] # SUNDANESE LETTER JA +1B90 ; [.3148.0020.0002] # SUNDANESE LETTER ZA +1B91 ; [.3149.0020.0002] # SUNDANESE LETTER NYA +1B92 ; [.314A.0020.0002] # SUNDANESE LETTER TA +1B93 ; [.314B.0020.0002] # SUNDANESE LETTER DA +1B94 ; [.314C.0020.0002] # SUNDANESE LETTER NA +1B95 ; [.314D.0020.0002] # SUNDANESE LETTER PA +1B96 ; [.314E.0020.0002] # SUNDANESE LETTER FA +1B97 ; [.314F.0020.0002] # SUNDANESE LETTER VA +1B98 ; [.3150.0020.0002] # SUNDANESE LETTER BA +1BBD ; [.3151.0020.0002] # SUNDANESE LETTER BHA +1B99 ; [.3152.0020.0002] # SUNDANESE LETTER MA +1BBF ; [.3152.0020.0019] # SUNDANESE LETTER FINAL M +1BAC ; [.3153.0020.0002] # SUNDANESE CONSONANT SIGN PASANGAN MA +1B9A ; [.3154.0020.0002] # SUNDANESE LETTER YA +1BA1 ; [.3155.0020.0002] # SUNDANESE CONSONANT SIGN PAMINGKAL +1B9B ; [.3156.0020.0002] # SUNDANESE LETTER RA +1BA2 ; [.3157.0020.0002] # SUNDANESE CONSONANT SIGN PANYAKRA +1BBB ; [.3158.0020.0002] # SUNDANESE LETTER REU +1B9C ; [.3159.0020.0002] # SUNDANESE LETTER LA +1BA3 ; [.315A.0020.0002] # SUNDANESE CONSONANT SIGN PANYIKU +1BBC ; [.315B.0020.0002] # SUNDANESE LETTER LEU +1B9D ; [.315C.0020.0002] # SUNDANESE LETTER WA +1BAD ; [.315D.0020.0002] # SUNDANESE CONSONANT SIGN PASANGAN WA +1B9E ; [.315E.0020.0002] # SUNDANESE LETTER SA +1B9F ; [.315F.0020.0002] # SUNDANESE LETTER XA +1BAF ; [.3160.0020.0002] # SUNDANESE LETTER SYA +1BA0 ; [.3161.0020.0002] # SUNDANESE LETTER HA +1BA4 ; [.3162.0020.0002] # SUNDANESE VOWEL SIGN PANGHULU +1BA5 ; [.3163.0020.0002] # SUNDANESE VOWEL SIGN PANYUKU +1BA6 ; [.3164.0020.0002] # SUNDANESE VOWEL SIGN PANAELAENG +1BA7 ; [.3165.0020.0002] # SUNDANESE VOWEL SIGN PANOLONG +1BA8 ; [.3166.0020.0002] # SUNDANESE VOWEL SIGN PAMEPET +1BA9 ; [.3167.0020.0002] # SUNDANESE VOWEL SIGN PANEULEUNG +1BAA ; [.3168.0020.0002] # SUNDANESE SIGN PAMAAEH +1BAB ; [.3169.0020.0002] # SUNDANESE SIGN VIRAMA +11005 ; [.316A.0020.0002] # BRAHMI LETTER A +11006 ; [.316B.0020.0002] # BRAHMI LETTER AA +11007 ; [.316C.0020.0002] # BRAHMI LETTER I +11008 ; [.316D.0020.0002] # BRAHMI LETTER II +11009 ; [.316E.0020.0002] # BRAHMI LETTER U +1100A ; [.316F.0020.0002] # BRAHMI LETTER UU +1100B ; [.3170.0020.0002] # BRAHMI LETTER VOCALIC R +1100C ; [.3171.0020.0002] # BRAHMI LETTER VOCALIC RR +1100D ; [.3172.0020.0002] # BRAHMI LETTER VOCALIC L +1100E ; [.3173.0020.0002] # BRAHMI LETTER VOCALIC LL +1100F ; [.3174.0020.0002] # BRAHMI LETTER E +11010 ; [.3175.0020.0002] # BRAHMI LETTER AI +11011 ; [.3176.0020.0002] # BRAHMI LETTER O +11012 ; [.3177.0020.0002] # BRAHMI LETTER AU +11013 ; [.3178.0020.0002] # BRAHMI LETTER KA +11014 ; [.3179.0020.0002] # BRAHMI LETTER KHA +11015 ; [.317A.0020.0002] # BRAHMI LETTER GA +11016 ; [.317B.0020.0002] # BRAHMI LETTER GHA +11017 ; [.317C.0020.0002] # BRAHMI LETTER NGA +11018 ; [.317D.0020.0002] # BRAHMI LETTER CA +11019 ; [.317E.0020.0002] # BRAHMI LETTER CHA +1101A ; [.317F.0020.0002] # BRAHMI LETTER JA +1101B ; [.3180.0020.0002] # BRAHMI LETTER JHA +1101C ; [.3181.0020.0002] # BRAHMI LETTER NYA +1101D ; [.3182.0020.0002] # BRAHMI LETTER TTA +1101E ; [.3183.0020.0002] # BRAHMI LETTER TTHA +1101F ; [.3184.0020.0002] # BRAHMI LETTER DDA +11020 ; [.3185.0020.0002] # BRAHMI LETTER DDHA +11021 ; [.3186.0020.0002] # BRAHMI LETTER NNA +11022 ; [.3187.0020.0002] # BRAHMI LETTER TA +11023 ; [.3188.0020.0002] # BRAHMI LETTER THA +11024 ; [.3189.0020.0002] # BRAHMI LETTER DA +11025 ; [.318A.0020.0002] # BRAHMI LETTER DHA +11026 ; [.318B.0020.0002] # BRAHMI LETTER NA +11027 ; [.318C.0020.0002] # BRAHMI LETTER PA +11028 ; [.318D.0020.0002] # BRAHMI LETTER PHA +11029 ; [.318E.0020.0002] # BRAHMI LETTER BA +1102A ; [.318F.0020.0002] # BRAHMI LETTER BHA +1102B ; [.3190.0020.0002] # BRAHMI LETTER MA +1102C ; [.3191.0020.0002] # BRAHMI LETTER YA +1102D ; [.3192.0020.0002] # BRAHMI LETTER RA +1102E ; [.3193.0020.0002] # BRAHMI LETTER LA +1102F ; [.3194.0020.0002] # BRAHMI LETTER VA +11030 ; [.3195.0020.0002] # BRAHMI LETTER SHA +11031 ; [.3196.0020.0002] # BRAHMI LETTER SSA +11032 ; [.3197.0020.0002] # BRAHMI LETTER SA +11033 ; [.3198.0020.0002] # BRAHMI LETTER HA +11003 ; [.3199.0020.0002] # BRAHMI SIGN JIHVAMULIYA +11004 ; [.319A.0020.0002] # BRAHMI SIGN UPADHMANIYA +11034 ; [.319B.0020.0002] # BRAHMI LETTER LLA +11035 ; [.319C.0020.0002] # BRAHMI LETTER OLD TAMIL LLLA +11036 ; [.319D.0020.0002] # BRAHMI LETTER OLD TAMIL RRA +11037 ; [.319E.0020.0002] # BRAHMI LETTER OLD TAMIL NNNA +11038 ; [.319F.0020.0002] # BRAHMI VOWEL SIGN AA +11039 ; [.31A0.0020.0002] # BRAHMI VOWEL SIGN BHATTIPROLU AA +1103A ; [.31A1.0020.0002] # BRAHMI VOWEL SIGN I +1103B ; [.31A2.0020.0002] # BRAHMI VOWEL SIGN II +1103C ; [.31A3.0020.0002] # BRAHMI VOWEL SIGN U +1103D ; [.31A4.0020.0002] # BRAHMI VOWEL SIGN UU +1103E ; [.31A5.0020.0002] # BRAHMI VOWEL SIGN VOCALIC R +1103F ; [.31A6.0020.0002] # BRAHMI VOWEL SIGN VOCALIC RR +11040 ; [.31A7.0020.0002] # BRAHMI VOWEL SIGN VOCALIC L +11041 ; [.31A8.0020.0002] # BRAHMI VOWEL SIGN VOCALIC LL +11042 ; [.31A9.0020.0002] # BRAHMI VOWEL SIGN E +11043 ; [.31AA.0020.0002] # BRAHMI VOWEL SIGN AI +11044 ; [.31AB.0020.0002] # BRAHMI VOWEL SIGN O +11045 ; [.31AC.0020.0002] # BRAHMI VOWEL SIGN AU +11046 ; [.31AD.0020.0002] # BRAHMI VIRAMA +1107F ; [.31AE.0020.0002] # BRAHMI NUMBER JOINER +10A00 ; [.31AF.0020.0002] # KHAROSHTHI LETTER A +10A01 ; [.31B0.0020.0002] # KHAROSHTHI VOWEL SIGN I +10A02 ; [.31B1.0020.0002] # KHAROSHTHI VOWEL SIGN U +10A03 ; [.31B2.0020.0002] # KHAROSHTHI VOWEL SIGN VOCALIC R +10A05 ; [.31B3.0020.0002] # KHAROSHTHI VOWEL SIGN E +10A06 ; [.31B4.0020.0002] # KHAROSHTHI VOWEL SIGN O +10A0C ; [.31B5.0020.0002] # KHAROSHTHI VOWEL LENGTH MARK +10A10 ; [.31B6.0020.0002] # KHAROSHTHI LETTER KA +10A32 ; [.31B7.0020.0002] # KHAROSHTHI LETTER KKA +10A11 ; [.31B8.0020.0002] # KHAROSHTHI LETTER KHA +10A12 ; [.31B9.0020.0002] # KHAROSHTHI LETTER GA +10A13 ; [.31BA.0020.0002] # KHAROSHTHI LETTER GHA +10A15 ; [.31BB.0020.0002] # KHAROSHTHI LETTER CA +10A16 ; [.31BC.0020.0002] # KHAROSHTHI LETTER CHA +10A17 ; [.31BD.0020.0002] # KHAROSHTHI LETTER JA +10A19 ; [.31BE.0020.0002] # KHAROSHTHI LETTER NYA +10A1A ; [.31BF.0020.0002] # KHAROSHTHI LETTER TTA +10A34 ; [.31C0.0020.0002] # KHAROSHTHI LETTER TTTA +10A1B ; [.31C1.0020.0002] # KHAROSHTHI LETTER TTHA +10A33 ; [.31C2.0020.0002] # KHAROSHTHI LETTER TTTHA +10A1C ; [.31C3.0020.0002] # KHAROSHTHI LETTER DDA +10A1D ; [.31C4.0020.0002] # KHAROSHTHI LETTER DDHA +10A1E ; [.31C5.0020.0002] # KHAROSHTHI LETTER NNA +10A1F ; [.31C6.0020.0002] # KHAROSHTHI LETTER TA +10A20 ; [.31C7.0020.0002] # KHAROSHTHI LETTER THA +10A21 ; [.31C8.0020.0002] # KHAROSHTHI LETTER DA +10A22 ; [.31C9.0020.0002] # KHAROSHTHI LETTER DHA +10A23 ; [.31CA.0020.0002] # KHAROSHTHI LETTER NA +10A24 ; [.31CB.0020.0002] # KHAROSHTHI LETTER PA +10A25 ; [.31CC.0020.0002] # KHAROSHTHI LETTER PHA +10A26 ; [.31CD.0020.0002] # KHAROSHTHI LETTER BA +10A27 ; [.31CE.0020.0002] # KHAROSHTHI LETTER BHA +10A28 ; [.31CF.0020.0002] # KHAROSHTHI LETTER MA +10A29 ; [.31D0.0020.0002] # KHAROSHTHI LETTER YA +10A2A ; [.31D1.0020.0002] # KHAROSHTHI LETTER RA +10A2B ; [.31D2.0020.0002] # KHAROSHTHI LETTER LA +10A2C ; [.31D3.0020.0002] # KHAROSHTHI LETTER VA +10A35 ; [.31D4.0020.0002] # KHAROSHTHI LETTER VHA +10A2D ; [.31D5.0020.0002] # KHAROSHTHI LETTER SHA +10A2E ; [.31D6.0020.0002] # KHAROSHTHI LETTER SSA +10A2F ; [.31D7.0020.0002] # KHAROSHTHI LETTER SA +10A30 ; [.31D8.0020.0002] # KHAROSHTHI LETTER ZA +10A31 ; [.31D9.0020.0002] # KHAROSHTHI LETTER HA +10A3F ; [.31DA.0020.0002] # KHAROSHTHI VIRAMA +11C00 ; [.31DB.0020.0002] # BHAIKSUKI LETTER A +11C01 ; [.31DC.0020.0002] # BHAIKSUKI LETTER AA +11C02 ; [.31DD.0020.0002] # BHAIKSUKI LETTER I +11C03 ; [.31DE.0020.0002] # BHAIKSUKI LETTER II +11C04 ; [.31DF.0020.0002] # BHAIKSUKI LETTER U +11C05 ; [.31E0.0020.0002] # BHAIKSUKI LETTER UU +11C06 ; [.31E1.0020.0002] # BHAIKSUKI LETTER VOCALIC R +11C07 ; [.31E2.0020.0002] # BHAIKSUKI LETTER VOCALIC RR +11C08 ; [.31E3.0020.0002] # BHAIKSUKI LETTER VOCALIC L +11C0A ; [.31E4.0020.0002] # BHAIKSUKI LETTER E +11C0B ; [.31E5.0020.0002] # BHAIKSUKI LETTER AI +11C0C ; [.31E6.0020.0002] # BHAIKSUKI LETTER O +11C0D ; [.31E7.0020.0002] # BHAIKSUKI LETTER AU +11C0E ; [.31E8.0020.0002] # BHAIKSUKI LETTER KA +11C0F ; [.31E9.0020.0002] # BHAIKSUKI LETTER KHA +11C10 ; [.31EA.0020.0002] # BHAIKSUKI LETTER GA +11C11 ; [.31EB.0020.0002] # BHAIKSUKI LETTER GHA +11C12 ; [.31EC.0020.0002] # BHAIKSUKI LETTER NGA +11C13 ; [.31ED.0020.0002] # BHAIKSUKI LETTER CA +11C14 ; [.31EE.0020.0002] # BHAIKSUKI LETTER CHA +11C15 ; [.31EF.0020.0002] # BHAIKSUKI LETTER JA +11C16 ; [.31F0.0020.0002] # BHAIKSUKI LETTER JHA +11C17 ; [.31F1.0020.0002] # BHAIKSUKI LETTER NYA +11C18 ; [.31F2.0020.0002] # BHAIKSUKI LETTER TTA +11C19 ; [.31F3.0020.0002] # BHAIKSUKI LETTER TTHA +11C1A ; [.31F4.0020.0002] # BHAIKSUKI LETTER DDA +11C1B ; [.31F5.0020.0002] # BHAIKSUKI LETTER DDHA +11C1C ; [.31F6.0020.0002] # BHAIKSUKI LETTER NNA +11C1D ; [.31F7.0020.0002] # BHAIKSUKI LETTER TA +11C1E ; [.31F8.0020.0002] # BHAIKSUKI LETTER THA +11C1F ; [.31F9.0020.0002] # BHAIKSUKI LETTER DA +11C20 ; [.31FA.0020.0002] # BHAIKSUKI LETTER DHA +11C21 ; [.31FB.0020.0002] # BHAIKSUKI LETTER NA +11C22 ; [.31FC.0020.0002] # BHAIKSUKI LETTER PA +11C23 ; [.31FD.0020.0002] # BHAIKSUKI LETTER PHA +11C24 ; [.31FE.0020.0002] # BHAIKSUKI LETTER BA +11C25 ; [.31FF.0020.0002] # BHAIKSUKI LETTER BHA +11C26 ; [.3200.0020.0002] # BHAIKSUKI LETTER MA +11C27 ; [.3201.0020.0002] # BHAIKSUKI LETTER YA +11C28 ; [.3202.0020.0002] # BHAIKSUKI LETTER RA +11C29 ; [.3203.0020.0002] # BHAIKSUKI LETTER LA +11C2A ; [.3204.0020.0002] # BHAIKSUKI LETTER VA +11C2B ; [.3205.0020.0002] # BHAIKSUKI LETTER SHA +11C2C ; [.3206.0020.0002] # BHAIKSUKI LETTER SSA +11C2D ; [.3207.0020.0002] # BHAIKSUKI LETTER SA +11C2E ; [.3208.0020.0002] # BHAIKSUKI LETTER HA +11C40 ; [.3209.0020.0002] # BHAIKSUKI SIGN AVAGRAHA +11C2F ; [.320A.0020.0002] # BHAIKSUKI VOWEL SIGN AA +11C30 ; [.320B.0020.0002] # BHAIKSUKI VOWEL SIGN I +11C31 ; [.320C.0020.0002] # BHAIKSUKI VOWEL SIGN II +11C32 ; [.320D.0020.0002] # BHAIKSUKI VOWEL SIGN U +11C33 ; [.320E.0020.0002] # BHAIKSUKI VOWEL SIGN UU +11C34 ; [.320F.0020.0002] # BHAIKSUKI VOWEL SIGN VOCALIC R +11C35 ; [.3210.0020.0002] # BHAIKSUKI VOWEL SIGN VOCALIC RR +11C36 ; [.3211.0020.0002] # BHAIKSUKI VOWEL SIGN VOCALIC L +11C38 ; [.3212.0020.0002] # BHAIKSUKI VOWEL SIGN E +11C39 ; [.3213.0020.0002] # BHAIKSUKI VOWEL SIGN AI +11C3A ; [.3214.0020.0002] # BHAIKSUKI VOWEL SIGN O +11C3B ; [.3215.0020.0002] # BHAIKSUKI VOWEL SIGN AU +11C3F ; [.3216.0020.0002] # BHAIKSUKI SIGN VIRAMA +0E01 ; [.3217.0020.0002] # THAI CHARACTER KO KAI +0E40 0E01 ; [.3217.0020.0002][.3251.0020.0002] # +0E41 0E01 ; [.3217.0020.0002][.3252.0020.0002] # +0E42 0E01 ; [.3217.0020.0002][.3253.0020.0002] # +0E43 0E01 ; [.3217.0020.0002][.3254.0020.0002] # +0E44 0E01 ; [.3217.0020.0002][.3255.0020.0002] # +0E02 ; [.3218.0020.0002] # THAI CHARACTER KHO KHAI +0E40 0E02 ; [.3218.0020.0002][.3251.0020.0002] # +0E41 0E02 ; [.3218.0020.0002][.3252.0020.0002] # +0E42 0E02 ; [.3218.0020.0002][.3253.0020.0002] # +0E43 0E02 ; [.3218.0020.0002][.3254.0020.0002] # +0E44 0E02 ; [.3218.0020.0002][.3255.0020.0002] # +0E03 ; [.3219.0020.0002] # THAI CHARACTER KHO KHUAT +0E40 0E03 ; [.3219.0020.0002][.3251.0020.0002] # +0E41 0E03 ; [.3219.0020.0002][.3252.0020.0002] # +0E42 0E03 ; [.3219.0020.0002][.3253.0020.0002] # +0E43 0E03 ; [.3219.0020.0002][.3254.0020.0002] # +0E44 0E03 ; [.3219.0020.0002][.3255.0020.0002] # +0E04 ; [.321A.0020.0002] # THAI CHARACTER KHO KHWAI +0E40 0E04 ; [.321A.0020.0002][.3251.0020.0002] # +0E41 0E04 ; [.321A.0020.0002][.3252.0020.0002] # +0E42 0E04 ; [.321A.0020.0002][.3253.0020.0002] # +0E43 0E04 ; [.321A.0020.0002][.3254.0020.0002] # +0E44 0E04 ; [.321A.0020.0002][.3255.0020.0002] # +0E05 ; [.321B.0020.0002] # THAI CHARACTER KHO KHON +0E40 0E05 ; [.321B.0020.0002][.3251.0020.0002] # +0E41 0E05 ; [.321B.0020.0002][.3252.0020.0002] # +0E42 0E05 ; [.321B.0020.0002][.3253.0020.0002] # +0E43 0E05 ; [.321B.0020.0002][.3254.0020.0002] # +0E44 0E05 ; [.321B.0020.0002][.3255.0020.0002] # +0E06 ; [.321C.0020.0002] # THAI CHARACTER KHO RAKHANG +0E40 0E06 ; [.321C.0020.0002][.3251.0020.0002] # +0E41 0E06 ; [.321C.0020.0002][.3252.0020.0002] # +0E42 0E06 ; [.321C.0020.0002][.3253.0020.0002] # +0E43 0E06 ; [.321C.0020.0002][.3254.0020.0002] # +0E44 0E06 ; [.321C.0020.0002][.3255.0020.0002] # +0E07 ; [.321D.0020.0002] # THAI CHARACTER NGO NGU +0E40 0E07 ; [.321D.0020.0002][.3251.0020.0002] # +0E41 0E07 ; [.321D.0020.0002][.3252.0020.0002] # +0E42 0E07 ; [.321D.0020.0002][.3253.0020.0002] # +0E43 0E07 ; [.321D.0020.0002][.3254.0020.0002] # +0E44 0E07 ; [.321D.0020.0002][.3255.0020.0002] # +0E08 ; [.321E.0020.0002] # THAI CHARACTER CHO CHAN +0E40 0E08 ; [.321E.0020.0002][.3251.0020.0002] # +0E41 0E08 ; [.321E.0020.0002][.3252.0020.0002] # +0E42 0E08 ; [.321E.0020.0002][.3253.0020.0002] # +0E43 0E08 ; [.321E.0020.0002][.3254.0020.0002] # +0E44 0E08 ; [.321E.0020.0002][.3255.0020.0002] # +0E09 ; [.321F.0020.0002] # THAI CHARACTER CHO CHING +0E40 0E09 ; [.321F.0020.0002][.3251.0020.0002] # +0E41 0E09 ; [.321F.0020.0002][.3252.0020.0002] # +0E42 0E09 ; [.321F.0020.0002][.3253.0020.0002] # +0E43 0E09 ; [.321F.0020.0002][.3254.0020.0002] # +0E44 0E09 ; [.321F.0020.0002][.3255.0020.0002] # +0E0A ; [.3220.0020.0002] # THAI CHARACTER CHO CHANG +0E40 0E0A ; [.3220.0020.0002][.3251.0020.0002] # +0E41 0E0A ; [.3220.0020.0002][.3252.0020.0002] # +0E42 0E0A ; [.3220.0020.0002][.3253.0020.0002] # +0E43 0E0A ; [.3220.0020.0002][.3254.0020.0002] # +0E44 0E0A ; [.3220.0020.0002][.3255.0020.0002] # +0E0B ; [.3221.0020.0002] # THAI CHARACTER SO SO +0E40 0E0B ; [.3221.0020.0002][.3251.0020.0002] # +0E41 0E0B ; [.3221.0020.0002][.3252.0020.0002] # +0E42 0E0B ; [.3221.0020.0002][.3253.0020.0002] # +0E43 0E0B ; [.3221.0020.0002][.3254.0020.0002] # +0E44 0E0B ; [.3221.0020.0002][.3255.0020.0002] # +0E0C ; [.3222.0020.0002] # THAI CHARACTER CHO CHOE +0E40 0E0C ; [.3222.0020.0002][.3251.0020.0002] # +0E41 0E0C ; [.3222.0020.0002][.3252.0020.0002] # +0E42 0E0C ; [.3222.0020.0002][.3253.0020.0002] # +0E43 0E0C ; [.3222.0020.0002][.3254.0020.0002] # +0E44 0E0C ; [.3222.0020.0002][.3255.0020.0002] # +0E0D ; [.3223.0020.0002] # THAI CHARACTER YO YING +0E40 0E0D ; [.3223.0020.0002][.3251.0020.0002] # +0E41 0E0D ; [.3223.0020.0002][.3252.0020.0002] # +0E42 0E0D ; [.3223.0020.0002][.3253.0020.0002] # +0E43 0E0D ; [.3223.0020.0002][.3254.0020.0002] # +0E44 0E0D ; [.3223.0020.0002][.3255.0020.0002] # +0E0E ; [.3224.0020.0002] # THAI CHARACTER DO CHADA +0E40 0E0E ; [.3224.0020.0002][.3251.0020.0002] # +0E41 0E0E ; [.3224.0020.0002][.3252.0020.0002] # +0E42 0E0E ; [.3224.0020.0002][.3253.0020.0002] # +0E43 0E0E ; [.3224.0020.0002][.3254.0020.0002] # +0E44 0E0E ; [.3224.0020.0002][.3255.0020.0002] # +0E0F ; [.3225.0020.0002] # THAI CHARACTER TO PATAK +0E40 0E0F ; [.3225.0020.0002][.3251.0020.0002] # +0E41 0E0F ; [.3225.0020.0002][.3252.0020.0002] # +0E42 0E0F ; [.3225.0020.0002][.3253.0020.0002] # +0E43 0E0F ; [.3225.0020.0002][.3254.0020.0002] # +0E44 0E0F ; [.3225.0020.0002][.3255.0020.0002] # +0E10 ; [.3226.0020.0002] # THAI CHARACTER THO THAN +0E40 0E10 ; [.3226.0020.0002][.3251.0020.0002] # +0E41 0E10 ; [.3226.0020.0002][.3252.0020.0002] # +0E42 0E10 ; [.3226.0020.0002][.3253.0020.0002] # +0E43 0E10 ; [.3226.0020.0002][.3254.0020.0002] # +0E44 0E10 ; [.3226.0020.0002][.3255.0020.0002] # +0E11 ; [.3227.0020.0002] # THAI CHARACTER THO NANGMONTHO +0E40 0E11 ; [.3227.0020.0002][.3251.0020.0002] # +0E41 0E11 ; [.3227.0020.0002][.3252.0020.0002] # +0E42 0E11 ; [.3227.0020.0002][.3253.0020.0002] # +0E43 0E11 ; [.3227.0020.0002][.3254.0020.0002] # +0E44 0E11 ; [.3227.0020.0002][.3255.0020.0002] # +0E12 ; [.3228.0020.0002] # THAI CHARACTER THO PHUTHAO +0E40 0E12 ; [.3228.0020.0002][.3251.0020.0002] # +0E41 0E12 ; [.3228.0020.0002][.3252.0020.0002] # +0E42 0E12 ; [.3228.0020.0002][.3253.0020.0002] # +0E43 0E12 ; [.3228.0020.0002][.3254.0020.0002] # +0E44 0E12 ; [.3228.0020.0002][.3255.0020.0002] # +0E13 ; [.3229.0020.0002] # THAI CHARACTER NO NEN +0E40 0E13 ; [.3229.0020.0002][.3251.0020.0002] # +0E41 0E13 ; [.3229.0020.0002][.3252.0020.0002] # +0E42 0E13 ; [.3229.0020.0002][.3253.0020.0002] # +0E43 0E13 ; [.3229.0020.0002][.3254.0020.0002] # +0E44 0E13 ; [.3229.0020.0002][.3255.0020.0002] # +0E14 ; [.322A.0020.0002] # THAI CHARACTER DO DEK +0E40 0E14 ; [.322A.0020.0002][.3251.0020.0002] # +0E41 0E14 ; [.322A.0020.0002][.3252.0020.0002] # +0E42 0E14 ; [.322A.0020.0002][.3253.0020.0002] # +0E43 0E14 ; [.322A.0020.0002][.3254.0020.0002] # +0E44 0E14 ; [.322A.0020.0002][.3255.0020.0002] # +0E15 ; [.322B.0020.0002] # THAI CHARACTER TO TAO +0E40 0E15 ; [.322B.0020.0002][.3251.0020.0002] # +0E41 0E15 ; [.322B.0020.0002][.3252.0020.0002] # +0E42 0E15 ; [.322B.0020.0002][.3253.0020.0002] # +0E43 0E15 ; [.322B.0020.0002][.3254.0020.0002] # +0E44 0E15 ; [.322B.0020.0002][.3255.0020.0002] # +0E16 ; [.322C.0020.0002] # THAI CHARACTER THO THUNG +0E40 0E16 ; [.322C.0020.0002][.3251.0020.0002] # +0E41 0E16 ; [.322C.0020.0002][.3252.0020.0002] # +0E42 0E16 ; [.322C.0020.0002][.3253.0020.0002] # +0E43 0E16 ; [.322C.0020.0002][.3254.0020.0002] # +0E44 0E16 ; [.322C.0020.0002][.3255.0020.0002] # +0E17 ; [.322D.0020.0002] # THAI CHARACTER THO THAHAN +0E40 0E17 ; [.322D.0020.0002][.3251.0020.0002] # +0E41 0E17 ; [.322D.0020.0002][.3252.0020.0002] # +0E42 0E17 ; [.322D.0020.0002][.3253.0020.0002] # +0E43 0E17 ; [.322D.0020.0002][.3254.0020.0002] # +0E44 0E17 ; [.322D.0020.0002][.3255.0020.0002] # +0E18 ; [.322E.0020.0002] # THAI CHARACTER THO THONG +0E40 0E18 ; [.322E.0020.0002][.3251.0020.0002] # +0E41 0E18 ; [.322E.0020.0002][.3252.0020.0002] # +0E42 0E18 ; [.322E.0020.0002][.3253.0020.0002] # +0E43 0E18 ; [.322E.0020.0002][.3254.0020.0002] # +0E44 0E18 ; [.322E.0020.0002][.3255.0020.0002] # +0E19 ; [.322F.0020.0002] # THAI CHARACTER NO NU +0E40 0E19 ; [.322F.0020.0002][.3251.0020.0002] # +0E41 0E19 ; [.322F.0020.0002][.3252.0020.0002] # +0E42 0E19 ; [.322F.0020.0002][.3253.0020.0002] # +0E43 0E19 ; [.322F.0020.0002][.3254.0020.0002] # +0E44 0E19 ; [.322F.0020.0002][.3255.0020.0002] # +0E1A ; [.3230.0020.0002] # THAI CHARACTER BO BAIMAI +0E40 0E1A ; [.3230.0020.0002][.3251.0020.0002] # +0E41 0E1A ; [.3230.0020.0002][.3252.0020.0002] # +0E42 0E1A ; [.3230.0020.0002][.3253.0020.0002] # +0E43 0E1A ; [.3230.0020.0002][.3254.0020.0002] # +0E44 0E1A ; [.3230.0020.0002][.3255.0020.0002] # +0E1B ; [.3231.0020.0002] # THAI CHARACTER PO PLA +0E40 0E1B ; [.3231.0020.0002][.3251.0020.0002] # +0E41 0E1B ; [.3231.0020.0002][.3252.0020.0002] # +0E42 0E1B ; [.3231.0020.0002][.3253.0020.0002] # +0E43 0E1B ; [.3231.0020.0002][.3254.0020.0002] # +0E44 0E1B ; [.3231.0020.0002][.3255.0020.0002] # +0E1C ; [.3232.0020.0002] # THAI CHARACTER PHO PHUNG +0E40 0E1C ; [.3232.0020.0002][.3251.0020.0002] # +0E41 0E1C ; [.3232.0020.0002][.3252.0020.0002] # +0E42 0E1C ; [.3232.0020.0002][.3253.0020.0002] # +0E43 0E1C ; [.3232.0020.0002][.3254.0020.0002] # +0E44 0E1C ; [.3232.0020.0002][.3255.0020.0002] # +0E1D ; [.3233.0020.0002] # THAI CHARACTER FO FA +0E40 0E1D ; [.3233.0020.0002][.3251.0020.0002] # +0E41 0E1D ; [.3233.0020.0002][.3252.0020.0002] # +0E42 0E1D ; [.3233.0020.0002][.3253.0020.0002] # +0E43 0E1D ; [.3233.0020.0002][.3254.0020.0002] # +0E44 0E1D ; [.3233.0020.0002][.3255.0020.0002] # +0E1E ; [.3234.0020.0002] # THAI CHARACTER PHO PHAN +0E40 0E1E ; [.3234.0020.0002][.3251.0020.0002] # +0E41 0E1E ; [.3234.0020.0002][.3252.0020.0002] # +0E42 0E1E ; [.3234.0020.0002][.3253.0020.0002] # +0E43 0E1E ; [.3234.0020.0002][.3254.0020.0002] # +0E44 0E1E ; [.3234.0020.0002][.3255.0020.0002] # +0E1F ; [.3235.0020.0002] # THAI CHARACTER FO FAN +0E40 0E1F ; [.3235.0020.0002][.3251.0020.0002] # +0E41 0E1F ; [.3235.0020.0002][.3252.0020.0002] # +0E42 0E1F ; [.3235.0020.0002][.3253.0020.0002] # +0E43 0E1F ; [.3235.0020.0002][.3254.0020.0002] # +0E44 0E1F ; [.3235.0020.0002][.3255.0020.0002] # +0E20 ; [.3236.0020.0002] # THAI CHARACTER PHO SAMPHAO +0E40 0E20 ; [.3236.0020.0002][.3251.0020.0002] # +0E41 0E20 ; [.3236.0020.0002][.3252.0020.0002] # +0E42 0E20 ; [.3236.0020.0002][.3253.0020.0002] # +0E43 0E20 ; [.3236.0020.0002][.3254.0020.0002] # +0E44 0E20 ; [.3236.0020.0002][.3255.0020.0002] # +0E21 ; [.3237.0020.0002] # THAI CHARACTER MO MA +0E40 0E21 ; [.3237.0020.0002][.3251.0020.0002] # +0E41 0E21 ; [.3237.0020.0002][.3252.0020.0002] # +0E42 0E21 ; [.3237.0020.0002][.3253.0020.0002] # +0E43 0E21 ; [.3237.0020.0002][.3254.0020.0002] # +0E44 0E21 ; [.3237.0020.0002][.3255.0020.0002] # +0E22 ; [.3238.0020.0002] # THAI CHARACTER YO YAK +0E40 0E22 ; [.3238.0020.0002][.3251.0020.0002] # +0E41 0E22 ; [.3238.0020.0002][.3252.0020.0002] # +0E42 0E22 ; [.3238.0020.0002][.3253.0020.0002] # +0E43 0E22 ; [.3238.0020.0002][.3254.0020.0002] # +0E44 0E22 ; [.3238.0020.0002][.3255.0020.0002] # +0E23 ; [.3239.0020.0002] # THAI CHARACTER RO RUA +0E40 0E23 ; [.3239.0020.0002][.3251.0020.0002] # +0E41 0E23 ; [.3239.0020.0002][.3252.0020.0002] # +0E42 0E23 ; [.3239.0020.0002][.3253.0020.0002] # +0E43 0E23 ; [.3239.0020.0002][.3254.0020.0002] # +0E44 0E23 ; [.3239.0020.0002][.3255.0020.0002] # +0E24 ; [.323A.0020.0002] # THAI CHARACTER RU +0E40 0E24 ; [.323A.0020.0002][.3251.0020.0002] # +0E41 0E24 ; [.323A.0020.0002][.3252.0020.0002] # +0E42 0E24 ; [.323A.0020.0002][.3253.0020.0002] # +0E43 0E24 ; [.323A.0020.0002][.3254.0020.0002] # +0E44 0E24 ; [.323A.0020.0002][.3255.0020.0002] # +0E25 ; [.323B.0020.0002] # THAI CHARACTER LO LING +0E40 0E25 ; [.323B.0020.0002][.3251.0020.0002] # +0E41 0E25 ; [.323B.0020.0002][.3252.0020.0002] # +0E42 0E25 ; [.323B.0020.0002][.3253.0020.0002] # +0E43 0E25 ; [.323B.0020.0002][.3254.0020.0002] # +0E44 0E25 ; [.323B.0020.0002][.3255.0020.0002] # +0E26 ; [.323C.0020.0002] # THAI CHARACTER LU +0E40 0E26 ; [.323C.0020.0002][.3251.0020.0002] # +0E41 0E26 ; [.323C.0020.0002][.3252.0020.0002] # +0E42 0E26 ; [.323C.0020.0002][.3253.0020.0002] # +0E43 0E26 ; [.323C.0020.0002][.3254.0020.0002] # +0E44 0E26 ; [.323C.0020.0002][.3255.0020.0002] # +0E27 ; [.323D.0020.0002] # THAI CHARACTER WO WAEN +0E40 0E27 ; [.323D.0020.0002][.3251.0020.0002] # +0E41 0E27 ; [.323D.0020.0002][.3252.0020.0002] # +0E42 0E27 ; [.323D.0020.0002][.3253.0020.0002] # +0E43 0E27 ; [.323D.0020.0002][.3254.0020.0002] # +0E44 0E27 ; [.323D.0020.0002][.3255.0020.0002] # +0E28 ; [.323E.0020.0002] # THAI CHARACTER SO SALA +0E40 0E28 ; [.323E.0020.0002][.3251.0020.0002] # +0E41 0E28 ; [.323E.0020.0002][.3252.0020.0002] # +0E42 0E28 ; [.323E.0020.0002][.3253.0020.0002] # +0E43 0E28 ; [.323E.0020.0002][.3254.0020.0002] # +0E44 0E28 ; [.323E.0020.0002][.3255.0020.0002] # +0E29 ; [.323F.0020.0002] # THAI CHARACTER SO RUSI +0E40 0E29 ; [.323F.0020.0002][.3251.0020.0002] # +0E41 0E29 ; [.323F.0020.0002][.3252.0020.0002] # +0E42 0E29 ; [.323F.0020.0002][.3253.0020.0002] # +0E43 0E29 ; [.323F.0020.0002][.3254.0020.0002] # +0E44 0E29 ; [.323F.0020.0002][.3255.0020.0002] # +0E2A ; [.3240.0020.0002] # THAI CHARACTER SO SUA +0E40 0E2A ; [.3240.0020.0002][.3251.0020.0002] # +0E41 0E2A ; [.3240.0020.0002][.3252.0020.0002] # +0E42 0E2A ; [.3240.0020.0002][.3253.0020.0002] # +0E43 0E2A ; [.3240.0020.0002][.3254.0020.0002] # +0E44 0E2A ; [.3240.0020.0002][.3255.0020.0002] # +0E2B ; [.3241.0020.0002] # THAI CHARACTER HO HIP +0E40 0E2B ; [.3241.0020.0002][.3251.0020.0002] # +0E41 0E2B ; [.3241.0020.0002][.3252.0020.0002] # +0E42 0E2B ; [.3241.0020.0002][.3253.0020.0002] # +0E43 0E2B ; [.3241.0020.0002][.3254.0020.0002] # +0E44 0E2B ; [.3241.0020.0002][.3255.0020.0002] # +0E2C ; [.3242.0020.0002] # THAI CHARACTER LO CHULA +0E40 0E2C ; [.3242.0020.0002][.3251.0020.0002] # +0E41 0E2C ; [.3242.0020.0002][.3252.0020.0002] # +0E42 0E2C ; [.3242.0020.0002][.3253.0020.0002] # +0E43 0E2C ; [.3242.0020.0002][.3254.0020.0002] # +0E44 0E2C ; [.3242.0020.0002][.3255.0020.0002] # +0E2D ; [.3243.0020.0002] # THAI CHARACTER O ANG +0E40 0E2D ; [.3243.0020.0002][.3251.0020.0002] # +0E41 0E2D ; [.3243.0020.0002][.3252.0020.0002] # +0E42 0E2D ; [.3243.0020.0002][.3253.0020.0002] # +0E43 0E2D ; [.3243.0020.0002][.3254.0020.0002] # +0E44 0E2D ; [.3243.0020.0002][.3255.0020.0002] # +0E2E ; [.3244.0020.0002] # THAI CHARACTER HO NOKHUK +0E40 0E2E ; [.3244.0020.0002][.3251.0020.0002] # +0E41 0E2E ; [.3244.0020.0002][.3252.0020.0002] # +0E42 0E2E ; [.3244.0020.0002][.3253.0020.0002] # +0E43 0E2E ; [.3244.0020.0002][.3254.0020.0002] # +0E44 0E2E ; [.3244.0020.0002][.3255.0020.0002] # +0E2F ; [.3245.0020.0002] # THAI CHARACTER PAIYANNOI +0E30 ; [.3246.0020.0002] # THAI CHARACTER SARA A +0E31 ; [.3247.0020.0002] # THAI CHARACTER MAI HAN-AKAT +0E32 ; [.3248.0020.0002] # THAI CHARACTER SARA AA +0E33 ; [.3249.0020.0002] # THAI CHARACTER SARA AM +0E4D 0E32 ; [.3249.0020.0002] # THAI CHARACTER SARA AM +0E34 ; [.324A.0020.0002] # THAI CHARACTER SARA I +0E35 ; [.324B.0020.0002] # THAI CHARACTER SARA II +0E36 ; [.324C.0020.0002] # THAI CHARACTER SARA UE +0E37 ; [.324D.0020.0002] # THAI CHARACTER SARA UEE +0E38 ; [.324E.0020.0002] # THAI CHARACTER SARA U +0E39 ; [.324F.0020.0002] # THAI CHARACTER SARA UU +0E3A ; [.3250.0020.0002] # THAI CHARACTER PHINTHU +0E40 ; [.3251.0020.0002] # THAI CHARACTER SARA E +0E41 ; [.3252.0020.0002] # THAI CHARACTER SARA AE +0E42 ; [.3253.0020.0002] # THAI CHARACTER SARA O +0E43 ; [.3254.0020.0002] # THAI CHARACTER SARA AI MAIMUAN +0E44 ; [.3255.0020.0002] # THAI CHARACTER SARA AI MAIMALAI +0E45 ; [.3256.0020.0002] # THAI CHARACTER LAKKHANGYAO +0EDE ; [.3257.0020.0002] # LAO LETTER KHMU GO +0EC0 0EDE ; [.3257.0020.0002][.3291.0020.0002] # +0EC1 0EDE ; [.3257.0020.0002][.3292.0020.0002] # +0EC2 0EDE ; [.3257.0020.0002][.3293.0020.0002] # +0EC3 0EDE ; [.3257.0020.0002][.3294.0020.0002] # +0EC4 0EDE ; [.3257.0020.0002][.3295.0020.0002] # +0E81 ; [.3258.0020.0002] # LAO LETTER KO +0EC0 0E81 ; [.3258.0020.0002][.3291.0020.0002] # +0EC1 0E81 ; [.3258.0020.0002][.3292.0020.0002] # +0EC2 0E81 ; [.3258.0020.0002][.3293.0020.0002] # +0EC3 0E81 ; [.3258.0020.0002][.3294.0020.0002] # +0EC4 0E81 ; [.3258.0020.0002][.3295.0020.0002] # +0E82 ; [.3259.0020.0002] # LAO LETTER KHO SUNG +0EC0 0E82 ; [.3259.0020.0002][.3291.0020.0002] # +0EC1 0E82 ; [.3259.0020.0002][.3292.0020.0002] # +0EC2 0E82 ; [.3259.0020.0002][.3293.0020.0002] # +0EC3 0E82 ; [.3259.0020.0002][.3294.0020.0002] # +0EC4 0E82 ; [.3259.0020.0002][.3295.0020.0002] # +0E84 ; [.325A.0020.0002] # LAO LETTER KHO TAM +0EC0 0E84 ; [.325A.0020.0002][.3291.0020.0002] # +0EC1 0E84 ; [.325A.0020.0002][.3292.0020.0002] # +0EC2 0E84 ; [.325A.0020.0002][.3293.0020.0002] # +0EC3 0E84 ; [.325A.0020.0002][.3294.0020.0002] # +0EC4 0E84 ; [.325A.0020.0002][.3295.0020.0002] # +0E86 ; [.325B.0020.0002] # LAO LETTER PALI GHA +0EC0 0E86 ; [.325B.0020.0002][.3291.0020.0002] # +0EC1 0E86 ; [.325B.0020.0002][.3292.0020.0002] # +0EC2 0E86 ; [.325B.0020.0002][.3293.0020.0002] # +0EC3 0E86 ; [.325B.0020.0002][.3294.0020.0002] # +0EC4 0E86 ; [.325B.0020.0002][.3295.0020.0002] # +0E87 ; [.325C.0020.0002] # LAO LETTER NGO +0EC0 0E87 ; [.325C.0020.0002][.3291.0020.0002] # +0EC1 0E87 ; [.325C.0020.0002][.3292.0020.0002] # +0EC2 0E87 ; [.325C.0020.0002][.3293.0020.0002] # +0EC3 0E87 ; [.325C.0020.0002][.3294.0020.0002] # +0EC4 0E87 ; [.325C.0020.0002][.3295.0020.0002] # +0E88 ; [.325D.0020.0002] # LAO LETTER CO +0EC0 0E88 ; [.325D.0020.0002][.3291.0020.0002] # +0EC1 0E88 ; [.325D.0020.0002][.3292.0020.0002] # +0EC2 0E88 ; [.325D.0020.0002][.3293.0020.0002] # +0EC3 0E88 ; [.325D.0020.0002][.3294.0020.0002] # +0EC4 0E88 ; [.325D.0020.0002][.3295.0020.0002] # +0E89 ; [.325E.0020.0002] # LAO LETTER PALI CHA +0EC0 0E89 ; [.325E.0020.0002][.3291.0020.0002] # +0EC1 0E89 ; [.325E.0020.0002][.3292.0020.0002] # +0EC2 0E89 ; [.325E.0020.0002][.3293.0020.0002] # +0EC3 0E89 ; [.325E.0020.0002][.3294.0020.0002] # +0EC4 0E89 ; [.325E.0020.0002][.3295.0020.0002] # +0EAA ; [.325F.0020.0002] # LAO LETTER SO SUNG +0EC0 0EAA ; [.325F.0020.0002][.3291.0020.0002] # +0EC1 0EAA ; [.325F.0020.0002][.3292.0020.0002] # +0EC2 0EAA ; [.325F.0020.0002][.3293.0020.0002] # +0EC3 0EAA ; [.325F.0020.0002][.3294.0020.0002] # +0EC4 0EAA ; [.325F.0020.0002][.3295.0020.0002] # +0E8A ; [.3260.0020.0002] # LAO LETTER SO TAM +0EC0 0E8A ; [.3260.0020.0002][.3291.0020.0002] # +0EC1 0E8A ; [.3260.0020.0002][.3292.0020.0002] # +0EC2 0E8A ; [.3260.0020.0002][.3293.0020.0002] # +0EC3 0E8A ; [.3260.0020.0002][.3294.0020.0002] # +0EC4 0E8A ; [.3260.0020.0002][.3295.0020.0002] # +0E8C ; [.3261.0020.0002] # LAO LETTER PALI JHA +0EC0 0E8C ; [.3261.0020.0002][.3291.0020.0002] # +0EC1 0E8C ; [.3261.0020.0002][.3292.0020.0002] # +0EC2 0E8C ; [.3261.0020.0002][.3293.0020.0002] # +0EC3 0E8C ; [.3261.0020.0002][.3294.0020.0002] # +0EC4 0E8C ; [.3261.0020.0002][.3295.0020.0002] # +0E8E ; [.3262.0020.0002] # LAO LETTER PALI NYA +0EC0 0E8E ; [.3262.0020.0002][.3291.0020.0002] # +0EC1 0E8E ; [.3262.0020.0002][.3292.0020.0002] # +0EC2 0E8E ; [.3262.0020.0002][.3293.0020.0002] # +0EC3 0E8E ; [.3262.0020.0002][.3294.0020.0002] # +0EC4 0E8E ; [.3262.0020.0002][.3295.0020.0002] # +0EDF ; [.3263.0020.0002] # LAO LETTER KHMU NYO +0EC0 0EDF ; [.3263.0020.0002][.3291.0020.0002] # +0EC1 0EDF ; [.3263.0020.0002][.3292.0020.0002] # +0EC2 0EDF ; [.3263.0020.0002][.3293.0020.0002] # +0EC3 0EDF ; [.3263.0020.0002][.3294.0020.0002] # +0EC4 0EDF ; [.3263.0020.0002][.3295.0020.0002] # +0E8D ; [.3264.0020.0002] # LAO LETTER NYO +0EC0 0E8D ; [.3264.0020.0002][.3291.0020.0002] # +0EC1 0E8D ; [.3264.0020.0002][.3292.0020.0002] # +0EC2 0E8D ; [.3264.0020.0002][.3293.0020.0002] # +0EC3 0E8D ; [.3264.0020.0002][.3294.0020.0002] # +0EC4 0E8D ; [.3264.0020.0002][.3295.0020.0002] # +0E8F ; [.3265.0020.0002] # LAO LETTER PALI TTA +0EC0 0E8F ; [.3265.0020.0002][.3291.0020.0002] # +0EC1 0E8F ; [.3265.0020.0002][.3292.0020.0002] # +0EC2 0E8F ; [.3265.0020.0002][.3293.0020.0002] # +0EC3 0E8F ; [.3265.0020.0002][.3294.0020.0002] # +0EC4 0E8F ; [.3265.0020.0002][.3295.0020.0002] # +0E90 ; [.3266.0020.0002] # LAO LETTER PALI TTHA +0EC0 0E90 ; [.3266.0020.0002][.3291.0020.0002] # +0EC1 0E90 ; [.3266.0020.0002][.3292.0020.0002] # +0EC2 0E90 ; [.3266.0020.0002][.3293.0020.0002] # +0EC3 0E90 ; [.3266.0020.0002][.3294.0020.0002] # +0EC4 0E90 ; [.3266.0020.0002][.3295.0020.0002] # +0E91 ; [.3267.0020.0002] # LAO LETTER PALI DDA +0EC0 0E91 ; [.3267.0020.0002][.3291.0020.0002] # +0EC1 0E91 ; [.3267.0020.0002][.3292.0020.0002] # +0EC2 0E91 ; [.3267.0020.0002][.3293.0020.0002] # +0EC3 0E91 ; [.3267.0020.0002][.3294.0020.0002] # +0EC4 0E91 ; [.3267.0020.0002][.3295.0020.0002] # +0E92 ; [.3268.0020.0002] # LAO LETTER PALI DDHA +0EC0 0E92 ; [.3268.0020.0002][.3291.0020.0002] # +0EC1 0E92 ; [.3268.0020.0002][.3292.0020.0002] # +0EC2 0E92 ; [.3268.0020.0002][.3293.0020.0002] # +0EC3 0E92 ; [.3268.0020.0002][.3294.0020.0002] # +0EC4 0E92 ; [.3268.0020.0002][.3295.0020.0002] # +0E93 ; [.3269.0020.0002] # LAO LETTER PALI NNA +0EC0 0E93 ; [.3269.0020.0002][.3291.0020.0002] # +0EC1 0E93 ; [.3269.0020.0002][.3292.0020.0002] # +0EC2 0E93 ; [.3269.0020.0002][.3293.0020.0002] # +0EC3 0E93 ; [.3269.0020.0002][.3294.0020.0002] # +0EC4 0E93 ; [.3269.0020.0002][.3295.0020.0002] # +0E94 ; [.326A.0020.0002] # LAO LETTER DO +0EC0 0E94 ; [.326A.0020.0002][.3291.0020.0002] # +0EC1 0E94 ; [.326A.0020.0002][.3292.0020.0002] # +0EC2 0E94 ; [.326A.0020.0002][.3293.0020.0002] # +0EC3 0E94 ; [.326A.0020.0002][.3294.0020.0002] # +0EC4 0E94 ; [.326A.0020.0002][.3295.0020.0002] # +0E95 ; [.326B.0020.0002] # LAO LETTER TO +0EC0 0E95 ; [.326B.0020.0002][.3291.0020.0002] # +0EC1 0E95 ; [.326B.0020.0002][.3292.0020.0002] # +0EC2 0E95 ; [.326B.0020.0002][.3293.0020.0002] # +0EC3 0E95 ; [.326B.0020.0002][.3294.0020.0002] # +0EC4 0E95 ; [.326B.0020.0002][.3295.0020.0002] # +0E96 ; [.326C.0020.0002] # LAO LETTER THO SUNG +0EC0 0E96 ; [.326C.0020.0002][.3291.0020.0002] # +0EC1 0E96 ; [.326C.0020.0002][.3292.0020.0002] # +0EC2 0E96 ; [.326C.0020.0002][.3293.0020.0002] # +0EC3 0E96 ; [.326C.0020.0002][.3294.0020.0002] # +0EC4 0E96 ; [.326C.0020.0002][.3295.0020.0002] # +0E97 ; [.326D.0020.0002] # LAO LETTER THO TAM +0EC0 0E97 ; [.326D.0020.0002][.3291.0020.0002] # +0EC1 0E97 ; [.326D.0020.0002][.3292.0020.0002] # +0EC2 0E97 ; [.326D.0020.0002][.3293.0020.0002] # +0EC3 0E97 ; [.326D.0020.0002][.3294.0020.0002] # +0EC4 0E97 ; [.326D.0020.0002][.3295.0020.0002] # +0E98 ; [.326E.0020.0002] # LAO LETTER PALI DHA +0EC0 0E98 ; [.326E.0020.0002][.3291.0020.0002] # +0EC1 0E98 ; [.326E.0020.0002][.3292.0020.0002] # +0EC2 0E98 ; [.326E.0020.0002][.3293.0020.0002] # +0EC3 0E98 ; [.326E.0020.0002][.3294.0020.0002] # +0EC4 0E98 ; [.326E.0020.0002][.3295.0020.0002] # +0E99 ; [.326F.0020.0002] # LAO LETTER NO +0EC0 0E99 ; [.326F.0020.0002][.3291.0020.0002] # +0EC1 0E99 ; [.326F.0020.0002][.3292.0020.0002] # +0EC2 0E99 ; [.326F.0020.0002][.3293.0020.0002] # +0EC3 0E99 ; [.326F.0020.0002][.3294.0020.0002] # +0EC4 0E99 ; [.326F.0020.0002][.3295.0020.0002] # +0E9A ; [.3270.0020.0002] # LAO LETTER BO +0EC0 0E9A ; [.3270.0020.0002][.3291.0020.0002] # +0EC1 0E9A ; [.3270.0020.0002][.3292.0020.0002] # +0EC2 0E9A ; [.3270.0020.0002][.3293.0020.0002] # +0EC3 0E9A ; [.3270.0020.0002][.3294.0020.0002] # +0EC4 0E9A ; [.3270.0020.0002][.3295.0020.0002] # +0E9B ; [.3271.0020.0002] # LAO LETTER PO +0EC0 0E9B ; [.3271.0020.0002][.3291.0020.0002] # +0EC1 0E9B ; [.3271.0020.0002][.3292.0020.0002] # +0EC2 0E9B ; [.3271.0020.0002][.3293.0020.0002] # +0EC3 0E9B ; [.3271.0020.0002][.3294.0020.0002] # +0EC4 0E9B ; [.3271.0020.0002][.3295.0020.0002] # +0E9C ; [.3272.0020.0002] # LAO LETTER PHO SUNG +0EC0 0E9C ; [.3272.0020.0002][.3291.0020.0002] # +0EC1 0E9C ; [.3272.0020.0002][.3292.0020.0002] # +0EC2 0E9C ; [.3272.0020.0002][.3293.0020.0002] # +0EC3 0E9C ; [.3272.0020.0002][.3294.0020.0002] # +0EC4 0E9C ; [.3272.0020.0002][.3295.0020.0002] # +0E9D ; [.3273.0020.0002] # LAO LETTER FO TAM +0EC0 0E9D ; [.3273.0020.0002][.3291.0020.0002] # +0EC1 0E9D ; [.3273.0020.0002][.3292.0020.0002] # +0EC2 0E9D ; [.3273.0020.0002][.3293.0020.0002] # +0EC3 0E9D ; [.3273.0020.0002][.3294.0020.0002] # +0EC4 0E9D ; [.3273.0020.0002][.3295.0020.0002] # +0E9E ; [.3274.0020.0002] # LAO LETTER PHO TAM +0EC0 0E9E ; [.3274.0020.0002][.3291.0020.0002] # +0EC1 0E9E ; [.3274.0020.0002][.3292.0020.0002] # +0EC2 0E9E ; [.3274.0020.0002][.3293.0020.0002] # +0EC3 0E9E ; [.3274.0020.0002][.3294.0020.0002] # +0EC4 0E9E ; [.3274.0020.0002][.3295.0020.0002] # +0E9F ; [.3275.0020.0002] # LAO LETTER FO SUNG +0EC0 0E9F ; [.3275.0020.0002][.3291.0020.0002] # +0EC1 0E9F ; [.3275.0020.0002][.3292.0020.0002] # +0EC2 0E9F ; [.3275.0020.0002][.3293.0020.0002] # +0EC3 0E9F ; [.3275.0020.0002][.3294.0020.0002] # +0EC4 0E9F ; [.3275.0020.0002][.3295.0020.0002] # +0EA0 ; [.3276.0020.0002] # LAO LETTER PALI BHA +0EC0 0EA0 ; [.3276.0020.0002][.3291.0020.0002] # +0EC1 0EA0 ; [.3276.0020.0002][.3292.0020.0002] # +0EC2 0EA0 ; [.3276.0020.0002][.3293.0020.0002] # +0EC3 0EA0 ; [.3276.0020.0002][.3294.0020.0002] # +0EC4 0EA0 ; [.3276.0020.0002][.3295.0020.0002] # +0EA1 ; [.3277.0020.0002] # LAO LETTER MO +0EC0 0EA1 ; [.3277.0020.0002][.3291.0020.0002] # +0EC1 0EA1 ; [.3277.0020.0002][.3292.0020.0002] # +0EC2 0EA1 ; [.3277.0020.0002][.3293.0020.0002] # +0EC3 0EA1 ; [.3277.0020.0002][.3294.0020.0002] # +0EC4 0EA1 ; [.3277.0020.0002][.3295.0020.0002] # +0EA2 ; [.3278.0020.0002] # LAO LETTER YO +0EC0 0EA2 ; [.3278.0020.0002][.3291.0020.0002] # +0EC1 0EA2 ; [.3278.0020.0002][.3292.0020.0002] # +0EC2 0EA2 ; [.3278.0020.0002][.3293.0020.0002] # +0EC3 0EA2 ; [.3278.0020.0002][.3294.0020.0002] # +0EC4 0EA2 ; [.3278.0020.0002][.3295.0020.0002] # +0EA3 ; [.3279.0020.0002] # LAO LETTER LO LING +0EC0 0EA3 ; [.3279.0020.0002][.3291.0020.0002] # +0EC1 0EA3 ; [.3279.0020.0002][.3292.0020.0002] # +0EC2 0EA3 ; [.3279.0020.0002][.3293.0020.0002] # +0EC3 0EA3 ; [.3279.0020.0002][.3294.0020.0002] # +0EC4 0EA3 ; [.3279.0020.0002][.3295.0020.0002] # +0EA5 ; [.327A.0020.0002] # LAO LETTER LO LOOT +0EC0 0EA5 ; [.327A.0020.0002][.3291.0020.0002] # +0EC1 0EA5 ; [.327A.0020.0002][.3292.0020.0002] # +0EC2 0EA5 ; [.327A.0020.0002][.3293.0020.0002] # +0EC3 0EA5 ; [.327A.0020.0002][.3294.0020.0002] # +0EC4 0EA5 ; [.327A.0020.0002][.3295.0020.0002] # +0EA7 ; [.327B.0020.0002] # LAO LETTER WO +0EC0 0EA7 ; [.327B.0020.0002][.3291.0020.0002] # +0EC1 0EA7 ; [.327B.0020.0002][.3292.0020.0002] # +0EC2 0EA7 ; [.327B.0020.0002][.3293.0020.0002] # +0EC3 0EA7 ; [.327B.0020.0002][.3294.0020.0002] # +0EC4 0EA7 ; [.327B.0020.0002][.3295.0020.0002] # +0EA8 ; [.327C.0020.0002] # LAO LETTER SANSKRIT SHA +0EC0 0EA8 ; [.327C.0020.0002][.3291.0020.0002] # +0EC1 0EA8 ; [.327C.0020.0002][.3292.0020.0002] # +0EC2 0EA8 ; [.327C.0020.0002][.3293.0020.0002] # +0EC3 0EA8 ; [.327C.0020.0002][.3294.0020.0002] # +0EC4 0EA8 ; [.327C.0020.0002][.3295.0020.0002] # +0EA9 ; [.327D.0020.0002] # LAO LETTER SANSKRIT SSA +0EC0 0EA9 ; [.327D.0020.0002][.3291.0020.0002] # +0EC1 0EA9 ; [.327D.0020.0002][.3292.0020.0002] # +0EC2 0EA9 ; [.327D.0020.0002][.3293.0020.0002] # +0EC3 0EA9 ; [.327D.0020.0002][.3294.0020.0002] # +0EC4 0EA9 ; [.327D.0020.0002][.3295.0020.0002] # +0EAB ; [.327E.0020.0002] # LAO LETTER HO SUNG +0EDC ; [.327E.0020.0004][.326F.0020.0004] # LAO HO NO +0EC0 0EDC ; [.327E.0020.0004][.326F.0020.0004][.3291.0020.0002] # +0EC1 0EDC ; [.327E.0020.0004][.326F.0020.0004][.3292.0020.0002] # +0EC2 0EDC ; [.327E.0020.0004][.326F.0020.0004][.3293.0020.0002] # +0EC3 0EDC ; [.327E.0020.0004][.326F.0020.0004][.3294.0020.0002] # +0EC4 0EDC ; [.327E.0020.0004][.326F.0020.0004][.3295.0020.0002] # +0EDD ; [.327E.0020.0004][.3277.0020.0004] # LAO HO MO +0EC0 0EDD ; [.327E.0020.0004][.3277.0020.0004][.3291.0020.0002] # +0EC1 0EDD ; [.327E.0020.0004][.3277.0020.0004][.3292.0020.0002] # +0EC2 0EDD ; [.327E.0020.0004][.3277.0020.0004][.3293.0020.0002] # +0EC3 0EDD ; [.327E.0020.0004][.3277.0020.0004][.3294.0020.0002] # +0EC4 0EDD ; [.327E.0020.0004][.3277.0020.0004][.3295.0020.0002] # +0EC0 0EAB ; [.327E.0020.0002][.3291.0020.0002] # +0EC1 0EAB ; [.327E.0020.0002][.3292.0020.0002] # +0EC2 0EAB ; [.327E.0020.0002][.3293.0020.0002] # +0EC3 0EAB ; [.327E.0020.0002][.3294.0020.0002] # +0EC4 0EAB ; [.327E.0020.0002][.3295.0020.0002] # +0EAC ; [.327F.0020.0002] # LAO LETTER PALI LLA +0EC0 0EAC ; [.327F.0020.0002][.3291.0020.0002] # +0EC1 0EAC ; [.327F.0020.0002][.3292.0020.0002] # +0EC2 0EAC ; [.327F.0020.0002][.3293.0020.0002] # +0EC3 0EAC ; [.327F.0020.0002][.3294.0020.0002] # +0EC4 0EAC ; [.327F.0020.0002][.3295.0020.0002] # +0EAD ; [.3280.0020.0002] # LAO LETTER O +0EC0 0EAD ; [.3280.0020.0002][.3291.0020.0002] # +0EC1 0EAD ; [.3280.0020.0002][.3292.0020.0002] # +0EC2 0EAD ; [.3280.0020.0002][.3293.0020.0002] # +0EC3 0EAD ; [.3280.0020.0002][.3294.0020.0002] # +0EC4 0EAD ; [.3280.0020.0002][.3295.0020.0002] # +0EAE ; [.3281.0020.0002] # LAO LETTER HO TAM +0EC0 0EAE ; [.3281.0020.0002][.3291.0020.0002] # +0EC1 0EAE ; [.3281.0020.0002][.3292.0020.0002] # +0EC2 0EAE ; [.3281.0020.0002][.3293.0020.0002] # +0EC3 0EAE ; [.3281.0020.0002][.3294.0020.0002] # +0EC4 0EAE ; [.3281.0020.0002][.3295.0020.0002] # +0EAF ; [.3282.0020.0002] # LAO ELLIPSIS +0EB0 ; [.3283.0020.0002] # LAO VOWEL SIGN A +0EB1 ; [.3284.0020.0002] # LAO VOWEL SIGN MAI KAN +0EB2 ; [.3285.0020.0002] # LAO VOWEL SIGN AA +0EB3 ; [.3286.0020.0002] # LAO VOWEL SIGN AM +0ECD 0EB2 ; [.3286.0020.0002] # LAO VOWEL SIGN AM +0EB4 ; [.3287.0020.0002] # LAO VOWEL SIGN I +0EB5 ; [.3288.0020.0002] # LAO VOWEL SIGN II +0EB6 ; [.3289.0020.0002] # LAO VOWEL SIGN Y +0EB7 ; [.328A.0020.0002] # LAO VOWEL SIGN YY +0EB8 ; [.328B.0020.0002] # LAO VOWEL SIGN U +0EB9 ; [.328C.0020.0002] # LAO VOWEL SIGN UU +0EBA ; [.328D.0020.0002] # LAO SIGN PALI VIRAMA +0EBB ; [.328E.0020.0002] # LAO VOWEL SIGN MAI KON +0EBC ; [.328F.0020.0002] # LAO SEMIVOWEL SIGN LO +0EBD ; [.3290.0020.0002] # LAO SEMIVOWEL SIGN NYO +0EC0 ; [.3291.0020.0002] # LAO VOWEL SIGN E +0EC1 ; [.3292.0020.0002] # LAO VOWEL SIGN EI +0EC2 ; [.3293.0020.0002] # LAO VOWEL SIGN O +0EC3 ; [.3294.0020.0002] # LAO VOWEL SIGN AY +0EC4 ; [.3295.0020.0002] # LAO VOWEL SIGN AI +AA80 ; [.3296.0020.0002] # TAI VIET LETTER LOW KO +AAB5 AA80 ; [.3296.0020.0002][.32CB.0020.0002] # +AAB6 AA80 ; [.3296.0020.0002][.32CC.0020.0002] # +AAB9 AA80 ; [.3296.0020.0002][.32CF.0020.0002] # +AABB AA80 ; [.3296.0020.0002][.32D1.0020.0002] # +AABC AA80 ; [.3296.0020.0002][.32D2.0020.0002] # +AA81 ; [.3297.0020.0002] # TAI VIET LETTER HIGH KO +AAB5 AA81 ; [.3297.0020.0002][.32CB.0020.0002] # +AAB6 AA81 ; [.3297.0020.0002][.32CC.0020.0002] # +AAB9 AA81 ; [.3297.0020.0002][.32CF.0020.0002] # +AABB AA81 ; [.3297.0020.0002][.32D1.0020.0002] # +AABC AA81 ; [.3297.0020.0002][.32D2.0020.0002] # +AA82 ; [.3298.0020.0002] # TAI VIET LETTER LOW KHO +AAB5 AA82 ; [.3298.0020.0002][.32CB.0020.0002] # +AAB6 AA82 ; [.3298.0020.0002][.32CC.0020.0002] # +AAB9 AA82 ; [.3298.0020.0002][.32CF.0020.0002] # +AABB AA82 ; [.3298.0020.0002][.32D1.0020.0002] # +AABC AA82 ; [.3298.0020.0002][.32D2.0020.0002] # +AA83 ; [.3299.0020.0002] # TAI VIET LETTER HIGH KHO +AAB5 AA83 ; [.3299.0020.0002][.32CB.0020.0002] # +AAB6 AA83 ; [.3299.0020.0002][.32CC.0020.0002] # +AAB9 AA83 ; [.3299.0020.0002][.32CF.0020.0002] # +AABB AA83 ; [.3299.0020.0002][.32D1.0020.0002] # +AABC AA83 ; [.3299.0020.0002][.32D2.0020.0002] # +AA84 ; [.329A.0020.0002] # TAI VIET LETTER LOW KHHO +AAB5 AA84 ; [.329A.0020.0002][.32CB.0020.0002] # +AAB6 AA84 ; [.329A.0020.0002][.32CC.0020.0002] # +AAB9 AA84 ; [.329A.0020.0002][.32CF.0020.0002] # +AABB AA84 ; [.329A.0020.0002][.32D1.0020.0002] # +AABC AA84 ; [.329A.0020.0002][.32D2.0020.0002] # +AA85 ; [.329B.0020.0002] # TAI VIET LETTER HIGH KHHO +AAB5 AA85 ; [.329B.0020.0002][.32CB.0020.0002] # +AAB6 AA85 ; [.329B.0020.0002][.32CC.0020.0002] # +AAB9 AA85 ; [.329B.0020.0002][.32CF.0020.0002] # +AABB AA85 ; [.329B.0020.0002][.32D1.0020.0002] # +AABC AA85 ; [.329B.0020.0002][.32D2.0020.0002] # +AA86 ; [.329C.0020.0002] # TAI VIET LETTER LOW GO +AAB5 AA86 ; [.329C.0020.0002][.32CB.0020.0002] # +AAB6 AA86 ; [.329C.0020.0002][.32CC.0020.0002] # +AAB9 AA86 ; [.329C.0020.0002][.32CF.0020.0002] # +AABB AA86 ; [.329C.0020.0002][.32D1.0020.0002] # +AABC AA86 ; [.329C.0020.0002][.32D2.0020.0002] # +AA87 ; [.329D.0020.0002] # TAI VIET LETTER HIGH GO +AAB5 AA87 ; [.329D.0020.0002][.32CB.0020.0002] # +AAB6 AA87 ; [.329D.0020.0002][.32CC.0020.0002] # +AAB9 AA87 ; [.329D.0020.0002][.32CF.0020.0002] # +AABB AA87 ; [.329D.0020.0002][.32D1.0020.0002] # +AABC AA87 ; [.329D.0020.0002][.32D2.0020.0002] # +AA88 ; [.329E.0020.0002] # TAI VIET LETTER LOW NGO +AAB5 AA88 ; [.329E.0020.0002][.32CB.0020.0002] # +AAB6 AA88 ; [.329E.0020.0002][.32CC.0020.0002] # +AAB9 AA88 ; [.329E.0020.0002][.32CF.0020.0002] # +AABB AA88 ; [.329E.0020.0002][.32D1.0020.0002] # +AABC AA88 ; [.329E.0020.0002][.32D2.0020.0002] # +AA89 ; [.329F.0020.0002] # TAI VIET LETTER HIGH NGO +AAB5 AA89 ; [.329F.0020.0002][.32CB.0020.0002] # +AAB6 AA89 ; [.329F.0020.0002][.32CC.0020.0002] # +AAB9 AA89 ; [.329F.0020.0002][.32CF.0020.0002] # +AABB AA89 ; [.329F.0020.0002][.32D1.0020.0002] # +AABC AA89 ; [.329F.0020.0002][.32D2.0020.0002] # +AA8A ; [.32A0.0020.0002] # TAI VIET LETTER LOW CO +AAB5 AA8A ; [.32A0.0020.0002][.32CB.0020.0002] # +AAB6 AA8A ; [.32A0.0020.0002][.32CC.0020.0002] # +AAB9 AA8A ; [.32A0.0020.0002][.32CF.0020.0002] # +AABB AA8A ; [.32A0.0020.0002][.32D1.0020.0002] # +AABC AA8A ; [.32A0.0020.0002][.32D2.0020.0002] # +AA8B ; [.32A1.0020.0002] # TAI VIET LETTER HIGH CO +AAB5 AA8B ; [.32A1.0020.0002][.32CB.0020.0002] # +AAB6 AA8B ; [.32A1.0020.0002][.32CC.0020.0002] # +AAB9 AA8B ; [.32A1.0020.0002][.32CF.0020.0002] # +AABB AA8B ; [.32A1.0020.0002][.32D1.0020.0002] # +AABC AA8B ; [.32A1.0020.0002][.32D2.0020.0002] # +AA8C ; [.32A2.0020.0002] # TAI VIET LETTER LOW CHO +AAB5 AA8C ; [.32A2.0020.0002][.32CB.0020.0002] # +AAB6 AA8C ; [.32A2.0020.0002][.32CC.0020.0002] # +AAB9 AA8C ; [.32A2.0020.0002][.32CF.0020.0002] # +AABB AA8C ; [.32A2.0020.0002][.32D1.0020.0002] # +AABC AA8C ; [.32A2.0020.0002][.32D2.0020.0002] # +AA8D ; [.32A3.0020.0002] # TAI VIET LETTER HIGH CHO +AAB5 AA8D ; [.32A3.0020.0002][.32CB.0020.0002] # +AAB6 AA8D ; [.32A3.0020.0002][.32CC.0020.0002] # +AAB9 AA8D ; [.32A3.0020.0002][.32CF.0020.0002] # +AABB AA8D ; [.32A3.0020.0002][.32D1.0020.0002] # +AABC AA8D ; [.32A3.0020.0002][.32D2.0020.0002] # +AA8E ; [.32A4.0020.0002] # TAI VIET LETTER LOW SO +AAB5 AA8E ; [.32A4.0020.0002][.32CB.0020.0002] # +AAB6 AA8E ; [.32A4.0020.0002][.32CC.0020.0002] # +AAB9 AA8E ; [.32A4.0020.0002][.32CF.0020.0002] # +AABB AA8E ; [.32A4.0020.0002][.32D1.0020.0002] # +AABC AA8E ; [.32A4.0020.0002][.32D2.0020.0002] # +AA8F ; [.32A5.0020.0002] # TAI VIET LETTER HIGH SO +AAB5 AA8F ; [.32A5.0020.0002][.32CB.0020.0002] # +AAB6 AA8F ; [.32A5.0020.0002][.32CC.0020.0002] # +AAB9 AA8F ; [.32A5.0020.0002][.32CF.0020.0002] # +AABB AA8F ; [.32A5.0020.0002][.32D1.0020.0002] # +AABC AA8F ; [.32A5.0020.0002][.32D2.0020.0002] # +AA90 ; [.32A6.0020.0002] # TAI VIET LETTER LOW NYO +AAB5 AA90 ; [.32A6.0020.0002][.32CB.0020.0002] # +AAB6 AA90 ; [.32A6.0020.0002][.32CC.0020.0002] # +AAB9 AA90 ; [.32A6.0020.0002][.32CF.0020.0002] # +AABB AA90 ; [.32A6.0020.0002][.32D1.0020.0002] # +AABC AA90 ; [.32A6.0020.0002][.32D2.0020.0002] # +AA91 ; [.32A7.0020.0002] # TAI VIET LETTER HIGH NYO +AAB5 AA91 ; [.32A7.0020.0002][.32CB.0020.0002] # +AAB6 AA91 ; [.32A7.0020.0002][.32CC.0020.0002] # +AAB9 AA91 ; [.32A7.0020.0002][.32CF.0020.0002] # +AABB AA91 ; [.32A7.0020.0002][.32D1.0020.0002] # +AABC AA91 ; [.32A7.0020.0002][.32D2.0020.0002] # +AA92 ; [.32A8.0020.0002] # TAI VIET LETTER LOW DO +AAB5 AA92 ; [.32A8.0020.0002][.32CB.0020.0002] # +AAB6 AA92 ; [.32A8.0020.0002][.32CC.0020.0002] # +AAB9 AA92 ; [.32A8.0020.0002][.32CF.0020.0002] # +AABB AA92 ; [.32A8.0020.0002][.32D1.0020.0002] # +AABC AA92 ; [.32A8.0020.0002][.32D2.0020.0002] # +AA93 ; [.32A9.0020.0002] # TAI VIET LETTER HIGH DO +AAB5 AA93 ; [.32A9.0020.0002][.32CB.0020.0002] # +AAB6 AA93 ; [.32A9.0020.0002][.32CC.0020.0002] # +AAB9 AA93 ; [.32A9.0020.0002][.32CF.0020.0002] # +AABB AA93 ; [.32A9.0020.0002][.32D1.0020.0002] # +AABC AA93 ; [.32A9.0020.0002][.32D2.0020.0002] # +AA94 ; [.32AA.0020.0002] # TAI VIET LETTER LOW TO +AAB5 AA94 ; [.32AA.0020.0002][.32CB.0020.0002] # +AAB6 AA94 ; [.32AA.0020.0002][.32CC.0020.0002] # +AAB9 AA94 ; [.32AA.0020.0002][.32CF.0020.0002] # +AABB AA94 ; [.32AA.0020.0002][.32D1.0020.0002] # +AABC AA94 ; [.32AA.0020.0002][.32D2.0020.0002] # +AA95 ; [.32AB.0020.0002] # TAI VIET LETTER HIGH TO +AAB5 AA95 ; [.32AB.0020.0002][.32CB.0020.0002] # +AAB6 AA95 ; [.32AB.0020.0002][.32CC.0020.0002] # +AAB9 AA95 ; [.32AB.0020.0002][.32CF.0020.0002] # +AABB AA95 ; [.32AB.0020.0002][.32D1.0020.0002] # +AABC AA95 ; [.32AB.0020.0002][.32D2.0020.0002] # +AA96 ; [.32AC.0020.0002] # TAI VIET LETTER LOW THO +AAB5 AA96 ; [.32AC.0020.0002][.32CB.0020.0002] # +AAB6 AA96 ; [.32AC.0020.0002][.32CC.0020.0002] # +AAB9 AA96 ; [.32AC.0020.0002][.32CF.0020.0002] # +AABB AA96 ; [.32AC.0020.0002][.32D1.0020.0002] # +AABC AA96 ; [.32AC.0020.0002][.32D2.0020.0002] # +AA97 ; [.32AD.0020.0002] # TAI VIET LETTER HIGH THO +AAB5 AA97 ; [.32AD.0020.0002][.32CB.0020.0002] # +AAB6 AA97 ; [.32AD.0020.0002][.32CC.0020.0002] # +AAB9 AA97 ; [.32AD.0020.0002][.32CF.0020.0002] # +AABB AA97 ; [.32AD.0020.0002][.32D1.0020.0002] # +AABC AA97 ; [.32AD.0020.0002][.32D2.0020.0002] # +AA98 ; [.32AE.0020.0002] # TAI VIET LETTER LOW NO +AAB5 AA98 ; [.32AE.0020.0002][.32CB.0020.0002] # +AAB6 AA98 ; [.32AE.0020.0002][.32CC.0020.0002] # +AAB9 AA98 ; [.32AE.0020.0002][.32CF.0020.0002] # +AABB AA98 ; [.32AE.0020.0002][.32D1.0020.0002] # +AABC AA98 ; [.32AE.0020.0002][.32D2.0020.0002] # +AA99 ; [.32AF.0020.0002] # TAI VIET LETTER HIGH NO +AAB5 AA99 ; [.32AF.0020.0002][.32CB.0020.0002] # +AAB6 AA99 ; [.32AF.0020.0002][.32CC.0020.0002] # +AAB9 AA99 ; [.32AF.0020.0002][.32CF.0020.0002] # +AABB AA99 ; [.32AF.0020.0002][.32D1.0020.0002] # +AABC AA99 ; [.32AF.0020.0002][.32D2.0020.0002] # +AA9A ; [.32B0.0020.0002] # TAI VIET LETTER LOW BO +AAB5 AA9A ; [.32B0.0020.0002][.32CB.0020.0002] # +AAB6 AA9A ; [.32B0.0020.0002][.32CC.0020.0002] # +AAB9 AA9A ; [.32B0.0020.0002][.32CF.0020.0002] # +AABB AA9A ; [.32B0.0020.0002][.32D1.0020.0002] # +AABC AA9A ; [.32B0.0020.0002][.32D2.0020.0002] # +AA9B ; [.32B1.0020.0002] # TAI VIET LETTER HIGH BO +AAB5 AA9B ; [.32B1.0020.0002][.32CB.0020.0002] # +AAB6 AA9B ; [.32B1.0020.0002][.32CC.0020.0002] # +AAB9 AA9B ; [.32B1.0020.0002][.32CF.0020.0002] # +AABB AA9B ; [.32B1.0020.0002][.32D1.0020.0002] # +AABC AA9B ; [.32B1.0020.0002][.32D2.0020.0002] # +AA9C ; [.32B2.0020.0002] # TAI VIET LETTER LOW PO +AAB5 AA9C ; [.32B2.0020.0002][.32CB.0020.0002] # +AAB6 AA9C ; [.32B2.0020.0002][.32CC.0020.0002] # +AAB9 AA9C ; [.32B2.0020.0002][.32CF.0020.0002] # +AABB AA9C ; [.32B2.0020.0002][.32D1.0020.0002] # +AABC AA9C ; [.32B2.0020.0002][.32D2.0020.0002] # +AA9D ; [.32B3.0020.0002] # TAI VIET LETTER HIGH PO +AAB5 AA9D ; [.32B3.0020.0002][.32CB.0020.0002] # +AAB6 AA9D ; [.32B3.0020.0002][.32CC.0020.0002] # +AAB9 AA9D ; [.32B3.0020.0002][.32CF.0020.0002] # +AABB AA9D ; [.32B3.0020.0002][.32D1.0020.0002] # +AABC AA9D ; [.32B3.0020.0002][.32D2.0020.0002] # +AA9E ; [.32B4.0020.0002] # TAI VIET LETTER LOW PHO +AAB5 AA9E ; [.32B4.0020.0002][.32CB.0020.0002] # +AAB6 AA9E ; [.32B4.0020.0002][.32CC.0020.0002] # +AAB9 AA9E ; [.32B4.0020.0002][.32CF.0020.0002] # +AABB AA9E ; [.32B4.0020.0002][.32D1.0020.0002] # +AABC AA9E ; [.32B4.0020.0002][.32D2.0020.0002] # +AA9F ; [.32B5.0020.0002] # TAI VIET LETTER HIGH PHO +AAB5 AA9F ; [.32B5.0020.0002][.32CB.0020.0002] # +AAB6 AA9F ; [.32B5.0020.0002][.32CC.0020.0002] # +AAB9 AA9F ; [.32B5.0020.0002][.32CF.0020.0002] # +AABB AA9F ; [.32B5.0020.0002][.32D1.0020.0002] # +AABC AA9F ; [.32B5.0020.0002][.32D2.0020.0002] # +AAA0 ; [.32B6.0020.0002] # TAI VIET LETTER LOW FO +AAB5 AAA0 ; [.32B6.0020.0002][.32CB.0020.0002] # +AAB6 AAA0 ; [.32B6.0020.0002][.32CC.0020.0002] # +AAB9 AAA0 ; [.32B6.0020.0002][.32CF.0020.0002] # +AABB AAA0 ; [.32B6.0020.0002][.32D1.0020.0002] # +AABC AAA0 ; [.32B6.0020.0002][.32D2.0020.0002] # +AAA1 ; [.32B7.0020.0002] # TAI VIET LETTER HIGH FO +AAB5 AAA1 ; [.32B7.0020.0002][.32CB.0020.0002] # +AAB6 AAA1 ; [.32B7.0020.0002][.32CC.0020.0002] # +AAB9 AAA1 ; [.32B7.0020.0002][.32CF.0020.0002] # +AABB AAA1 ; [.32B7.0020.0002][.32D1.0020.0002] # +AABC AAA1 ; [.32B7.0020.0002][.32D2.0020.0002] # +AAA2 ; [.32B8.0020.0002] # TAI VIET LETTER LOW MO +AAB5 AAA2 ; [.32B8.0020.0002][.32CB.0020.0002] # +AAB6 AAA2 ; [.32B8.0020.0002][.32CC.0020.0002] # +AAB9 AAA2 ; [.32B8.0020.0002][.32CF.0020.0002] # +AABB AAA2 ; [.32B8.0020.0002][.32D1.0020.0002] # +AABC AAA2 ; [.32B8.0020.0002][.32D2.0020.0002] # +AAA3 ; [.32B9.0020.0002] # TAI VIET LETTER HIGH MO +AAB5 AAA3 ; [.32B9.0020.0002][.32CB.0020.0002] # +AAB6 AAA3 ; [.32B9.0020.0002][.32CC.0020.0002] # +AAB9 AAA3 ; [.32B9.0020.0002][.32CF.0020.0002] # +AABB AAA3 ; [.32B9.0020.0002][.32D1.0020.0002] # +AABC AAA3 ; [.32B9.0020.0002][.32D2.0020.0002] # +AAA4 ; [.32BA.0020.0002] # TAI VIET LETTER LOW YO +AAB5 AAA4 ; [.32BA.0020.0002][.32CB.0020.0002] # +AAB6 AAA4 ; [.32BA.0020.0002][.32CC.0020.0002] # +AAB9 AAA4 ; [.32BA.0020.0002][.32CF.0020.0002] # +AABB AAA4 ; [.32BA.0020.0002][.32D1.0020.0002] # +AABC AAA4 ; [.32BA.0020.0002][.32D2.0020.0002] # +AAA5 ; [.32BB.0020.0002] # TAI VIET LETTER HIGH YO +AAB5 AAA5 ; [.32BB.0020.0002][.32CB.0020.0002] # +AAB6 AAA5 ; [.32BB.0020.0002][.32CC.0020.0002] # +AAB9 AAA5 ; [.32BB.0020.0002][.32CF.0020.0002] # +AABB AAA5 ; [.32BB.0020.0002][.32D1.0020.0002] # +AABC AAA5 ; [.32BB.0020.0002][.32D2.0020.0002] # +AAA6 ; [.32BC.0020.0002] # TAI VIET LETTER LOW RO +AAB5 AAA6 ; [.32BC.0020.0002][.32CB.0020.0002] # +AAB6 AAA6 ; [.32BC.0020.0002][.32CC.0020.0002] # +AAB9 AAA6 ; [.32BC.0020.0002][.32CF.0020.0002] # +AABB AAA6 ; [.32BC.0020.0002][.32D1.0020.0002] # +AABC AAA6 ; [.32BC.0020.0002][.32D2.0020.0002] # +AAA7 ; [.32BD.0020.0002] # TAI VIET LETTER HIGH RO +AAB5 AAA7 ; [.32BD.0020.0002][.32CB.0020.0002] # +AAB6 AAA7 ; [.32BD.0020.0002][.32CC.0020.0002] # +AAB9 AAA7 ; [.32BD.0020.0002][.32CF.0020.0002] # +AABB AAA7 ; [.32BD.0020.0002][.32D1.0020.0002] # +AABC AAA7 ; [.32BD.0020.0002][.32D2.0020.0002] # +AAA8 ; [.32BE.0020.0002] # TAI VIET LETTER LOW LO +AAB5 AAA8 ; [.32BE.0020.0002][.32CB.0020.0002] # +AAB6 AAA8 ; [.32BE.0020.0002][.32CC.0020.0002] # +AAB9 AAA8 ; [.32BE.0020.0002][.32CF.0020.0002] # +AABB AAA8 ; [.32BE.0020.0002][.32D1.0020.0002] # +AABC AAA8 ; [.32BE.0020.0002][.32D2.0020.0002] # +AAA9 ; [.32BF.0020.0002] # TAI VIET LETTER HIGH LO +AAB5 AAA9 ; [.32BF.0020.0002][.32CB.0020.0002] # +AAB6 AAA9 ; [.32BF.0020.0002][.32CC.0020.0002] # +AAB9 AAA9 ; [.32BF.0020.0002][.32CF.0020.0002] # +AABB AAA9 ; [.32BF.0020.0002][.32D1.0020.0002] # +AABC AAA9 ; [.32BF.0020.0002][.32D2.0020.0002] # +AAAA ; [.32C0.0020.0002] # TAI VIET LETTER LOW VO +AAB5 AAAA ; [.32C0.0020.0002][.32CB.0020.0002] # +AAB6 AAAA ; [.32C0.0020.0002][.32CC.0020.0002] # +AAB9 AAAA ; [.32C0.0020.0002][.32CF.0020.0002] # +AABB AAAA ; [.32C0.0020.0002][.32D1.0020.0002] # +AABC AAAA ; [.32C0.0020.0002][.32D2.0020.0002] # +AAAB ; [.32C1.0020.0002] # TAI VIET LETTER HIGH VO +AAB5 AAAB ; [.32C1.0020.0002][.32CB.0020.0002] # +AAB6 AAAB ; [.32C1.0020.0002][.32CC.0020.0002] # +AAB9 AAAB ; [.32C1.0020.0002][.32CF.0020.0002] # +AABB AAAB ; [.32C1.0020.0002][.32D1.0020.0002] # +AABC AAAB ; [.32C1.0020.0002][.32D2.0020.0002] # +AAAC ; [.32C2.0020.0002] # TAI VIET LETTER LOW HO +AAB5 AAAC ; [.32C2.0020.0002][.32CB.0020.0002] # +AAB6 AAAC ; [.32C2.0020.0002][.32CC.0020.0002] # +AAB9 AAAC ; [.32C2.0020.0002][.32CF.0020.0002] # +AABB AAAC ; [.32C2.0020.0002][.32D1.0020.0002] # +AABC AAAC ; [.32C2.0020.0002][.32D2.0020.0002] # +AAAD ; [.32C3.0020.0002] # TAI VIET LETTER HIGH HO +AAB5 AAAD ; [.32C3.0020.0002][.32CB.0020.0002] # +AAB6 AAAD ; [.32C3.0020.0002][.32CC.0020.0002] # +AAB9 AAAD ; [.32C3.0020.0002][.32CF.0020.0002] # +AABB AAAD ; [.32C3.0020.0002][.32D1.0020.0002] # +AABC AAAD ; [.32C3.0020.0002][.32D2.0020.0002] # +AAAE ; [.32C4.0020.0002] # TAI VIET LETTER LOW O +AAB5 AAAE ; [.32C4.0020.0002][.32CB.0020.0002] # +AAB6 AAAE ; [.32C4.0020.0002][.32CC.0020.0002] # +AAB9 AAAE ; [.32C4.0020.0002][.32CF.0020.0002] # +AABB AAAE ; [.32C4.0020.0002][.32D1.0020.0002] # +AABC AAAE ; [.32C4.0020.0002][.32D2.0020.0002] # +AAAF ; [.32C5.0020.0002] # TAI VIET LETTER HIGH O +AAB5 AAAF ; [.32C5.0020.0002][.32CB.0020.0002] # +AAB6 AAAF ; [.32C5.0020.0002][.32CC.0020.0002] # +AAB9 AAAF ; [.32C5.0020.0002][.32CF.0020.0002] # +AABB AAAF ; [.32C5.0020.0002][.32D1.0020.0002] # +AABC AAAF ; [.32C5.0020.0002][.32D2.0020.0002] # +AAB0 ; [.32C6.0020.0002] # TAI VIET MAI KANG +AAB1 ; [.32C7.0020.0002] # TAI VIET VOWEL AA +AAB2 ; [.32C8.0020.0002] # TAI VIET VOWEL I +AAB3 ; [.32C9.0020.0002] # TAI VIET VOWEL UE +AAB4 ; [.32CA.0020.0002] # TAI VIET VOWEL U +AAB5 ; [.32CB.0020.0002] # TAI VIET VOWEL E +AAB6 ; [.32CC.0020.0002] # TAI VIET VOWEL O +AAB7 ; [.32CD.0020.0002] # TAI VIET MAI KHIT +AAB8 ; [.32CE.0020.0002] # TAI VIET VOWEL IA +AAB9 ; [.32CF.0020.0002] # TAI VIET VOWEL UEA +AABA ; [.32D0.0020.0002] # TAI VIET VOWEL UA +AABB ; [.32D1.0020.0002] # TAI VIET VOWEL AUE +AABC ; [.32D2.0020.0002] # TAI VIET VOWEL AY +AABD ; [.32D3.0020.0002] # TAI VIET VOWEL AN +AABE ; [.32D4.0020.0002] # TAI VIET VOWEL AM +AAC0 ; [.32D5.0020.0002] # TAI VIET TONE MAI NUENG +AAC2 ; [.32D6.0020.0002] # TAI VIET TONE MAI SONG +AADB ; [.32D7.0020.0002] # TAI VIET SYMBOL KON +AADC ; [.32D8.0020.0002] # TAI VIET SYMBOL NUENG +0F40 ; [.32D9.0020.0002] # TIBETAN LETTER KA +0F69 ; [.32D9.0020.0002][.331A.0020.0002] # TIBETAN LETTER KSSA +0F90 ; [.32DA.0020.0002] # TIBETAN SUBJOINED LETTER KA +0FB9 ; [.32DA.0020.0002][.331A.0020.0002] # TIBETAN SUBJOINED LETTER KSSA +0F6B ; [.32DB.0020.0002] # TIBETAN LETTER KKA +0F41 ; [.32DC.0020.0002] # TIBETAN LETTER KHA +0F91 ; [.32DD.0020.0002] # TIBETAN SUBJOINED LETTER KHA +0F42 ; [.32DE.0020.0002] # TIBETAN LETTER GA +0F43 ; [.32DE.0020.0002][.331E.0020.0002] # TIBETAN LETTER GHA +0F92 ; [.32DF.0020.0002] # TIBETAN SUBJOINED LETTER GA +0F93 ; [.32DF.0020.0002][.331E.0020.0002] # TIBETAN SUBJOINED LETTER GHA +0F44 ; [.32E0.0020.0002] # TIBETAN LETTER NGA +0F94 ; [.32E1.0020.0002] # TIBETAN SUBJOINED LETTER NGA +0F45 ; [.32E2.0020.0002] # TIBETAN LETTER CA +0F95 ; [.32E3.0020.0002] # TIBETAN SUBJOINED LETTER CA +0F46 ; [.32E4.0020.0002] # TIBETAN LETTER CHA +0F96 ; [.32E5.0020.0002] # TIBETAN SUBJOINED LETTER CHA +0F47 ; [.32E6.0020.0002] # TIBETAN LETTER JA +0F97 ; [.32E7.0020.0002] # TIBETAN SUBJOINED LETTER JA +0F49 ; [.32E8.0020.0002] # TIBETAN LETTER NYA +0F99 ; [.32E9.0020.0002] # TIBETAN SUBJOINED LETTER NYA +0F4A ; [.32EA.0020.0002] # TIBETAN LETTER TTA +0F9A ; [.32EB.0020.0002] # TIBETAN SUBJOINED LETTER TTA +0F4B ; [.32EC.0020.0002] # TIBETAN LETTER TTHA +0F9B ; [.32ED.0020.0002] # TIBETAN SUBJOINED LETTER TTHA +0F4C ; [.32EE.0020.0002] # TIBETAN LETTER DDA +0F4D ; [.32EE.0020.0002][.331E.0020.0002] # TIBETAN LETTER DDHA +0F9C ; [.32EF.0020.0002] # TIBETAN SUBJOINED LETTER DDA +0F9D ; [.32EF.0020.0002][.331E.0020.0002] # TIBETAN SUBJOINED LETTER DDHA +0F4E ; [.32F0.0020.0002] # TIBETAN LETTER NNA +0F9E ; [.32F1.0020.0002] # TIBETAN SUBJOINED LETTER NNA +0F4F ; [.32F2.0020.0002] # TIBETAN LETTER TA +0F9F ; [.32F3.0020.0002] # TIBETAN SUBJOINED LETTER TA +0F50 ; [.32F4.0020.0002] # TIBETAN LETTER THA +0FA0 ; [.32F5.0020.0002] # TIBETAN SUBJOINED LETTER THA +0F51 ; [.32F6.0020.0002] # TIBETAN LETTER DA +0F52 ; [.32F6.0020.0002][.331E.0020.0002] # TIBETAN LETTER DHA +0FA1 ; [.32F7.0020.0002] # TIBETAN SUBJOINED LETTER DA +0FA2 ; [.32F7.0020.0002][.331E.0020.0002] # TIBETAN SUBJOINED LETTER DHA +0F53 ; [.32F8.0020.0002] # TIBETAN LETTER NA +0FA3 ; [.32F9.0020.0002] # TIBETAN SUBJOINED LETTER NA +0F54 ; [.32FA.0020.0002] # TIBETAN LETTER PA +0FA4 ; [.32FB.0020.0002] # TIBETAN SUBJOINED LETTER PA +0F55 ; [.32FC.0020.0002] # TIBETAN LETTER PHA +0FA5 ; [.32FD.0020.0002] # TIBETAN SUBJOINED LETTER PHA +0F56 ; [.32FE.0020.0002] # TIBETAN LETTER BA +0F57 ; [.32FE.0020.0002][.331E.0020.0002] # TIBETAN LETTER BHA +0FA6 ; [.32FF.0020.0002] # TIBETAN SUBJOINED LETTER BA +0FA7 ; [.32FF.0020.0002][.331E.0020.0002] # TIBETAN SUBJOINED LETTER BHA +0F58 ; [.3300.0020.0002] # TIBETAN LETTER MA +0FA8 ; [.3301.0020.0002] # TIBETAN SUBJOINED LETTER MA +0F59 ; [.3302.0020.0002] # TIBETAN LETTER TSA +0FA9 ; [.3303.0020.0002] # TIBETAN SUBJOINED LETTER TSA +0F5A ; [.3304.0020.0002] # TIBETAN LETTER TSHA +0FAA ; [.3305.0020.0002] # TIBETAN SUBJOINED LETTER TSHA +0F5B ; [.3306.0020.0002] # TIBETAN LETTER DZA +0F5C ; [.3306.0020.0002][.331E.0020.0002] # TIBETAN LETTER DZHA +0FAB ; [.3307.0020.0002] # TIBETAN SUBJOINED LETTER DZA +0FAC ; [.3307.0020.0002][.331E.0020.0002] # TIBETAN SUBJOINED LETTER DZHA +0F5D ; [.3308.0020.0002] # TIBETAN LETTER WA +0FAD ; [.3309.0020.0002] # TIBETAN SUBJOINED LETTER WA +0FBA ; [.3309.0020.0004][.0000.0119.0004] # TIBETAN SUBJOINED LETTER FIXED-FORM WA +0F5E ; [.330A.0020.0002] # TIBETAN LETTER ZHA +0FAE ; [.330B.0020.0002] # TIBETAN SUBJOINED LETTER ZHA +0F5F ; [.330C.0020.0002] # TIBETAN LETTER ZA +0FAF ; [.330D.0020.0002] # TIBETAN SUBJOINED LETTER ZA +0F60 ; [.330E.0020.0002] # TIBETAN LETTER -A +0FB0 ; [.330F.0020.0002] # TIBETAN SUBJOINED LETTER -A +0F61 ; [.3310.0020.0002] # TIBETAN LETTER YA +0FB1 ; [.3311.0020.0002] # TIBETAN SUBJOINED LETTER YA +0FBB ; [.3311.0020.0004][.0000.0119.0004] # TIBETAN SUBJOINED LETTER FIXED-FORM YA +0F62 ; [.3312.0020.0002] # TIBETAN LETTER RA +0F6A ; [.3312.0020.0004][.0000.0119.0004] # TIBETAN LETTER FIXED-FORM RA +0FB2 ; [.3313.0020.0002] # TIBETAN SUBJOINED LETTER RA +0FBC ; [.3313.0020.0004][.0000.0119.0004] # TIBETAN SUBJOINED LETTER FIXED-FORM RA +0F6C ; [.3314.0020.0002] # TIBETAN LETTER RRA +0F63 ; [.3315.0020.0002] # TIBETAN LETTER LA +0FB3 ; [.3316.0020.0002] # TIBETAN SUBJOINED LETTER LA +0F64 ; [.3317.0020.0002] # TIBETAN LETTER SHA +0FB4 ; [.3318.0020.0002] # TIBETAN SUBJOINED LETTER SHA +0F65 ; [.3319.0020.0002] # TIBETAN LETTER SSA +0FB5 ; [.331A.0020.0002] # TIBETAN SUBJOINED LETTER SSA +0F66 ; [.331B.0020.0002] # TIBETAN LETTER SA +0FB6 ; [.331C.0020.0002] # TIBETAN SUBJOINED LETTER SA +0F67 ; [.331D.0020.0002] # TIBETAN LETTER HA +0FB7 ; [.331E.0020.0002] # TIBETAN SUBJOINED LETTER HA +0F68 ; [.331F.0020.0002] # TIBETAN LETTER A +0F00 ; [.331F.0020.0004][.3336.0020.0004][.0000.00C4.0004] # TIBETAN SYLLABLE OM +0FB8 ; [.3320.0020.0002] # TIBETAN SUBJOINED LETTER A +0F88 ; [.3321.0020.0002] # TIBETAN SIGN LCE TSA CAN +0F8D ; [.3322.0020.0002] # TIBETAN SUBJOINED SIGN LCE TSA CAN +0F89 ; [.3323.0020.0002] # TIBETAN SIGN MCHU CAN +0F8E ; [.3324.0020.0002] # TIBETAN SUBJOINED SIGN MCHU CAN +0F8C ; [.3325.0020.0002] # TIBETAN SIGN INVERTED MCHU CAN +0F8F ; [.3326.0020.0002] # TIBETAN SUBJOINED SIGN INVERTED MCHU CAN +0F8A ; [.3327.0020.0002] # TIBETAN SIGN GRU CAN RGYINGS +0F8B ; [.3328.0020.0002] # TIBETAN SIGN GRU MED RGYINGS +0F71 ; [.3329.0020.0002] # TIBETAN VOWEL SIGN AA +0F72 ; [.332A.0020.0002] # TIBETAN VOWEL SIGN I +0F73 ; [.332B.0020.0002] # TIBETAN VOWEL SIGN II +0F71 0F72 ; [.332B.0020.0002] # TIBETAN VOWEL SIGN II +0F80 ; [.332C.0020.0002] # TIBETAN VOWEL SIGN REVERSED I +0F81 ; [.332D.0020.0002] # TIBETAN VOWEL SIGN REVERSED II +0F71 0F80 ; [.332D.0020.0002] # TIBETAN VOWEL SIGN REVERSED II +0F74 ; [.332E.0020.0002] # TIBETAN VOWEL SIGN U +0F75 ; [.332F.0020.0002] # TIBETAN VOWEL SIGN UU +0F71 0F74 ; [.332F.0020.0002] # TIBETAN VOWEL SIGN UU +0F76 ; [.3330.0020.0002] # TIBETAN VOWEL SIGN VOCALIC R +0FB2 0F80 ; [.3330.0020.0002] # TIBETAN VOWEL SIGN VOCALIC R +0F77 ; [.3331.0020.0002] # TIBETAN VOWEL SIGN VOCALIC RR +0FB2 0F71 0F80 ; [.3331.0020.0002] # TIBETAN VOWEL SIGN VOCALIC RR +0FB2 0F81 ; [.3331.0020.0002] # TIBETAN VOWEL SIGN VOCALIC RR +0F78 ; [.3332.0020.0002] # TIBETAN VOWEL SIGN VOCALIC L +0FB3 0F80 ; [.3332.0020.0002] # TIBETAN VOWEL SIGN VOCALIC L +0F79 ; [.3333.0020.0002] # TIBETAN VOWEL SIGN VOCALIC LL +0FB3 0F71 0F80 ; [.3333.0020.0002] # TIBETAN VOWEL SIGN VOCALIC LL +0FB3 0F81 ; [.3333.0020.0002] # TIBETAN VOWEL SIGN VOCALIC LL +0F7A ; [.3334.0020.0002] # TIBETAN VOWEL SIGN E +0F7B ; [.3335.0020.0002] # TIBETAN VOWEL SIGN EE +0F7C ; [.3336.0020.0002] # TIBETAN VOWEL SIGN O +0F7D ; [.3337.0020.0002] # TIBETAN VOWEL SIGN OO +0F84 ; [.3338.0020.0002] # TIBETAN MARK HALANTA +11A0B ; [.3339.0020.0002] # ZANABAZAR SQUARE LETTER KA +11A32 ; [.333A.0020.0002] # ZANABAZAR SQUARE LETTER KSSA +11A0C ; [.333B.0020.0002] # ZANABAZAR SQUARE LETTER KHA +11A0D ; [.333C.0020.0002] # ZANABAZAR SQUARE LETTER GA +11A0E ; [.333D.0020.0002] # ZANABAZAR SQUARE LETTER GHA +11A0F ; [.333E.0020.0002] # ZANABAZAR SQUARE LETTER NGA +11A10 ; [.333F.0020.0002] # ZANABAZAR SQUARE LETTER CA +11A11 ; [.3340.0020.0002] # ZANABAZAR SQUARE LETTER CHA +11A12 ; [.3341.0020.0002] # ZANABAZAR SQUARE LETTER JA +11A13 ; [.3342.0020.0002] # ZANABAZAR SQUARE LETTER NYA +11A14 ; [.3343.0020.0002] # ZANABAZAR SQUARE LETTER TTA +11A15 ; [.3344.0020.0002] # ZANABAZAR SQUARE LETTER TTHA +11A16 ; [.3345.0020.0002] # ZANABAZAR SQUARE LETTER DDA +11A17 ; [.3346.0020.0002] # ZANABAZAR SQUARE LETTER DDHA +11A18 ; [.3347.0020.0002] # ZANABAZAR SQUARE LETTER NNA +11A19 ; [.3348.0020.0002] # ZANABAZAR SQUARE LETTER TA +11A1A ; [.3349.0020.0002] # ZANABAZAR SQUARE LETTER THA +11A1B ; [.334A.0020.0002] # ZANABAZAR SQUARE LETTER DA +11A1C ; [.334B.0020.0002] # ZANABAZAR SQUARE LETTER DHA +11A1D ; [.334C.0020.0002] # ZANABAZAR SQUARE LETTER NA +11A1E ; [.334D.0020.0002] # ZANABAZAR SQUARE LETTER PA +11A1F ; [.334E.0020.0002] # ZANABAZAR SQUARE LETTER PHA +11A20 ; [.334F.0020.0002] # ZANABAZAR SQUARE LETTER BA +11A21 ; [.3350.0020.0002] # ZANABAZAR SQUARE LETTER BHA +11A22 ; [.3351.0020.0002] # ZANABAZAR SQUARE LETTER MA +11A23 ; [.3352.0020.0002] # ZANABAZAR SQUARE LETTER TSA +11A24 ; [.3353.0020.0002] # ZANABAZAR SQUARE LETTER TSHA +11A25 ; [.3354.0020.0002] # ZANABAZAR SQUARE LETTER DZA +11A26 ; [.3355.0020.0002] # ZANABAZAR SQUARE LETTER DZHA +11A27 ; [.3356.0020.0002] # ZANABAZAR SQUARE LETTER ZHA +11A28 ; [.3357.0020.0002] # ZANABAZAR SQUARE LETTER ZA +11A29 ; [.3358.0020.0002] # ZANABAZAR SQUARE LETTER -A +11A2A ; [.3359.0020.0002] # ZANABAZAR SQUARE LETTER YA +11A3B ; [.3359.0020.0019] # ZANABAZAR SQUARE CLUSTER-FINAL LETTER YA +11A2B ; [.335A.0020.0002] # ZANABAZAR SQUARE LETTER RA +11A3A ; [.335A.0020.0017] # ZANABAZAR SQUARE CLUSTER-INITIAL LETTER RA +11A3C ; [.335A.0020.0019] # ZANABAZAR SQUARE CLUSTER-FINAL LETTER RA +11A2C ; [.335B.0020.0002] # ZANABAZAR SQUARE LETTER LA +11A3D ; [.335B.0020.0019] # ZANABAZAR SQUARE CLUSTER-FINAL LETTER LA +11A2D ; [.335C.0020.0002] # ZANABAZAR SQUARE LETTER VA +11A3E ; [.335C.0020.0019] # ZANABAZAR SQUARE CLUSTER-FINAL LETTER VA +11A2E ; [.335D.0020.0002] # ZANABAZAR SQUARE LETTER SHA +11A2F ; [.335E.0020.0002] # ZANABAZAR SQUARE LETTER SSA +11A30 ; [.335F.0020.0002] # ZANABAZAR SQUARE LETTER SA +11A31 ; [.3360.0020.0002] # ZANABAZAR SQUARE LETTER HA +11A00 ; [.3361.0020.0002] # ZANABAZAR SQUARE LETTER A +11A01 ; [.3362.0020.0002] # ZANABAZAR SQUARE VOWEL SIGN I +11A02 ; [.3363.0020.0002] # ZANABAZAR SQUARE VOWEL SIGN UE +11A03 ; [.3364.0020.0002] # ZANABAZAR SQUARE VOWEL SIGN U +11A04 ; [.3365.0020.0002] # ZANABAZAR SQUARE VOWEL SIGN E +11A05 ; [.3366.0020.0002] # ZANABAZAR SQUARE VOWEL SIGN OE +11A06 ; [.3367.0020.0002] # ZANABAZAR SQUARE VOWEL SIGN O +11A07 ; [.3368.0020.0002] # ZANABAZAR SQUARE VOWEL SIGN AI +11A08 ; [.3369.0020.0002] # ZANABAZAR SQUARE VOWEL SIGN AU +11A09 ; [.336A.0020.0002] # ZANABAZAR SQUARE VOWEL SIGN REVERSED I +11A0A ; [.336B.0020.0002] # ZANABAZAR SQUARE VOWEL LENGTH MARK +11A34 ; [.336C.0020.0002] # ZANABAZAR SQUARE SIGN VIRAMA +11A47 ; [.336D.0020.0002] # ZANABAZAR SQUARE SUBJOINER +11A50 ; [.336E.0020.0002] # SOYOMBO LETTER A +11A51 ; [.336F.0020.0002] # SOYOMBO VOWEL SIGN I +11A52 ; [.3370.0020.0002] # SOYOMBO VOWEL SIGN UE +11A53 ; [.3371.0020.0002] # SOYOMBO VOWEL SIGN U +11A59 ; [.3372.0020.0002] # SOYOMBO VOWEL SIGN VOCALIC R +11A5A ; [.3373.0020.0002] # SOYOMBO VOWEL SIGN VOCALIC L +11A54 ; [.3374.0020.0002] # SOYOMBO VOWEL SIGN E +11A56 ; [.3375.0020.0002] # SOYOMBO VOWEL SIGN OE +11A55 ; [.3376.0020.0002] # SOYOMBO VOWEL SIGN O +11A57 ; [.3377.0020.0002] # SOYOMBO VOWEL SIGN AI +11A58 ; [.3378.0020.0002] # SOYOMBO VOWEL SIGN AU +11A5B ; [.3379.0020.0002] # SOYOMBO VOWEL LENGTH MARK +11A5C ; [.337A.0020.0002] # SOYOMBO LETTER KA +11A8A ; [.337A.0020.0019] # SOYOMBO FINAL CONSONANT SIGN G +11A83 ; [.337B.0020.0002] # SOYOMBO LETTER KSSA +11A5D ; [.337C.0020.0002] # SOYOMBO LETTER KHA +11A8B ; [.337C.0020.0019] # SOYOMBO FINAL CONSONANT SIGN K +11A5E ; [.337D.0020.0002] # SOYOMBO LETTER GA +11A5F ; [.337E.0020.0002] # SOYOMBO LETTER GHA +11A60 ; [.337F.0020.0002] # SOYOMBO LETTER NGA +11A8C ; [.337F.0020.0019] # SOYOMBO FINAL CONSONANT SIGN NG +11A61 ; [.3380.0020.0002] # SOYOMBO LETTER CA +11A62 ; [.3381.0020.0002] # SOYOMBO LETTER CHA +11A63 ; [.3382.0020.0002] # SOYOMBO LETTER JA +11A64 ; [.3383.0020.0002] # SOYOMBO LETTER JHA +11A65 ; [.3384.0020.0002] # SOYOMBO LETTER NYA +11A66 ; [.3385.0020.0002] # SOYOMBO LETTER TTA +11A67 ; [.3386.0020.0002] # SOYOMBO LETTER TTHA +11A68 ; [.3387.0020.0002] # SOYOMBO LETTER DDA +11A69 ; [.3388.0020.0002] # SOYOMBO LETTER DDHA +11A6A ; [.3389.0020.0002] # SOYOMBO LETTER NNA +11A6B ; [.338A.0020.0002] # SOYOMBO LETTER TA +11A8D ; [.338A.0020.0019] # SOYOMBO FINAL CONSONANT SIGN D +11A6C ; [.338B.0020.0002] # SOYOMBO LETTER THA +11A6D ; [.338C.0020.0002] # SOYOMBO LETTER DA +11A6E ; [.338D.0020.0002] # SOYOMBO LETTER DHA +11A6F ; [.338E.0020.0002] # SOYOMBO LETTER NA +11A8E ; [.338E.0020.0019] # SOYOMBO FINAL CONSONANT SIGN N +11A70 ; [.338F.0020.0002] # SOYOMBO LETTER PA +11A8F ; [.338F.0020.0019] # SOYOMBO FINAL CONSONANT SIGN B +11A71 ; [.3390.0020.0002] # SOYOMBO LETTER PHA +11A72 ; [.3391.0020.0002] # SOYOMBO LETTER BA +11A73 ; [.3392.0020.0002] # SOYOMBO LETTER BHA +11A74 ; [.3393.0020.0002] # SOYOMBO LETTER MA +11A90 ; [.3393.0020.0019] # SOYOMBO FINAL CONSONANT SIGN M +11A75 ; [.3394.0020.0002] # SOYOMBO LETTER TSA +11A76 ; [.3395.0020.0002] # SOYOMBO LETTER TSHA +11A77 ; [.3396.0020.0002] # SOYOMBO LETTER DZA +11A78 ; [.3397.0020.0002] # SOYOMBO LETTER ZHA +11A79 ; [.3398.0020.0002] # SOYOMBO LETTER ZA +11A7A ; [.3399.0020.0002] # SOYOMBO LETTER -A +11A95 ; [.3399.0020.0019] # SOYOMBO FINAL CONSONANT SIGN -A +11A7B ; [.339A.0020.0002] # SOYOMBO LETTER YA +11A7C ; [.339B.0020.0002] # SOYOMBO LETTER RA +11A86 ; [.339B.0020.0017] # SOYOMBO CLUSTER-INITIAL LETTER RA +11A91 ; [.339B.0020.0019] # SOYOMBO FINAL CONSONANT SIGN R +11A7D ; [.339C.0020.0002] # SOYOMBO LETTER LA +11A87 ; [.339C.0020.0017] # SOYOMBO CLUSTER-INITIAL LETTER LA +11A92 ; [.339C.0020.0019] # SOYOMBO FINAL CONSONANT SIGN L +11A7E ; [.339D.0020.0002] # SOYOMBO LETTER VA +11A7F ; [.339E.0020.0002] # SOYOMBO LETTER SHA +11A88 ; [.339E.0020.0017] # SOYOMBO CLUSTER-INITIAL LETTER SHA +11A93 ; [.339E.0020.0019] # SOYOMBO FINAL CONSONANT SIGN SH +11A80 ; [.339F.0020.0002] # SOYOMBO LETTER SSA +11A81 ; [.33A0.0020.0002] # SOYOMBO LETTER SA +11A89 ; [.33A0.0020.0017] # SOYOMBO CLUSTER-INITIAL LETTER SA +11A94 ; [.33A0.0020.0019] # SOYOMBO FINAL CONSONANT SIGN S +11A82 ; [.33A1.0020.0002] # SOYOMBO LETTER HA +11A84 ; [.33A2.0020.0002] # SOYOMBO SIGN JIHVAMULIYA +11A85 ; [.33A3.0020.0002] # SOYOMBO SIGN UPADHMANIYA +11A99 ; [.33A4.0020.0002] # SOYOMBO SUBJOINER +11A9D ; [.33A5.0020.0002] # SOYOMBO MARK PLUTA +11C72 ; [.33A6.0020.0002] # MARCHEN LETTER KA +11C92 ; [.33A7.0020.0002] # MARCHEN SUBJOINED LETTER KA +11C73 ; [.33A8.0020.0002] # MARCHEN LETTER KHA +11C93 ; [.33A9.0020.0002] # MARCHEN SUBJOINED LETTER KHA +11C74 ; [.33AA.0020.0002] # MARCHEN LETTER GA +11C94 ; [.33AB.0020.0002] # MARCHEN SUBJOINED LETTER GA +11C75 ; [.33AC.0020.0002] # MARCHEN LETTER NGA +11C95 ; [.33AD.0020.0002] # MARCHEN SUBJOINED LETTER NGA +11C76 ; [.33AE.0020.0002] # MARCHEN LETTER CA +11C96 ; [.33AF.0020.0002] # MARCHEN SUBJOINED LETTER CA +11C77 ; [.33B0.0020.0002] # MARCHEN LETTER CHA +11C97 ; [.33B1.0020.0002] # MARCHEN SUBJOINED LETTER CHA +11C78 ; [.33B2.0020.0002] # MARCHEN LETTER JA +11C98 ; [.33B3.0020.0002] # MARCHEN SUBJOINED LETTER JA +11C79 ; [.33B4.0020.0002] # MARCHEN LETTER NYA +11C99 ; [.33B5.0020.0002] # MARCHEN SUBJOINED LETTER NYA +11C7A ; [.33B6.0020.0002] # MARCHEN LETTER TA +11C9A ; [.33B7.0020.0002] # MARCHEN SUBJOINED LETTER TA +11C7B ; [.33B8.0020.0002] # MARCHEN LETTER THA +11C9B ; [.33B9.0020.0002] # MARCHEN SUBJOINED LETTER THA +11C7C ; [.33BA.0020.0002] # MARCHEN LETTER DA +11C9C ; [.33BB.0020.0002] # MARCHEN SUBJOINED LETTER DA +11C7D ; [.33BC.0020.0002] # MARCHEN LETTER NA +11C9D ; [.33BD.0020.0002] # MARCHEN SUBJOINED LETTER NA +11C7E ; [.33BE.0020.0002] # MARCHEN LETTER PA +11C9E ; [.33BF.0020.0002] # MARCHEN SUBJOINED LETTER PA +11C7F ; [.33C0.0020.0002] # MARCHEN LETTER PHA +11C9F ; [.33C1.0020.0002] # MARCHEN SUBJOINED LETTER PHA +11C80 ; [.33C2.0020.0002] # MARCHEN LETTER BA +11CA0 ; [.33C3.0020.0002] # MARCHEN SUBJOINED LETTER BA +11C81 ; [.33C4.0020.0002] # MARCHEN LETTER MA +11CA1 ; [.33C5.0020.0002] # MARCHEN SUBJOINED LETTER MA +11C82 ; [.33C6.0020.0002] # MARCHEN LETTER TSA +11CA2 ; [.33C7.0020.0002] # MARCHEN SUBJOINED LETTER TSA +11C83 ; [.33C8.0020.0002] # MARCHEN LETTER TSHA +11CA3 ; [.33C9.0020.0002] # MARCHEN SUBJOINED LETTER TSHA +11C84 ; [.33CA.0020.0002] # MARCHEN LETTER DZA +11CA4 ; [.33CB.0020.0002] # MARCHEN SUBJOINED LETTER DZA +11C85 ; [.33CC.0020.0002] # MARCHEN LETTER WA +11CA5 ; [.33CD.0020.0002] # MARCHEN SUBJOINED LETTER WA +11C86 ; [.33CE.0020.0002] # MARCHEN LETTER ZHA +11CA6 ; [.33CF.0020.0002] # MARCHEN SUBJOINED LETTER ZHA +11C87 ; [.33D0.0020.0002] # MARCHEN LETTER ZA +11CA7 ; [.33D1.0020.0002] # MARCHEN SUBJOINED LETTER ZA +11C88 ; [.33D2.0020.0002] # MARCHEN LETTER -A +11C89 ; [.33D3.0020.0002] # MARCHEN LETTER YA +11CA9 ; [.33D4.0020.0002] # MARCHEN SUBJOINED LETTER YA +11C8A ; [.33D5.0020.0002] # MARCHEN LETTER RA +11CAA ; [.33D6.0020.0002] # MARCHEN SUBJOINED LETTER RA +11C8B ; [.33D7.0020.0002] # MARCHEN LETTER LA +11CAB ; [.33D8.0020.0002] # MARCHEN SUBJOINED LETTER LA +11C8C ; [.33D9.0020.0002] # MARCHEN LETTER SHA +11CAC ; [.33DA.0020.0002] # MARCHEN SUBJOINED LETTER SHA +11C8D ; [.33DB.0020.0002] # MARCHEN LETTER SA +11CAD ; [.33DC.0020.0002] # MARCHEN SUBJOINED LETTER SA +11C8E ; [.33DD.0020.0002] # MARCHEN LETTER HA +11CAE ; [.33DE.0020.0002] # MARCHEN SUBJOINED LETTER HA +11C8F ; [.33DF.0020.0002] # MARCHEN LETTER A +11CAF ; [.33E0.0020.0002] # MARCHEN SUBJOINED LETTER A +11CB0 ; [.33E1.0020.0002] # MARCHEN VOWEL SIGN AA +11CB1 ; [.33E2.0020.0002] # MARCHEN VOWEL SIGN I +11CB2 ; [.33E3.0020.0002] # MARCHEN VOWEL SIGN U +11CB3 ; [.33E4.0020.0002] # MARCHEN VOWEL SIGN E +11CB4 ; [.33E5.0020.0002] # MARCHEN VOWEL SIGN O +1C00 ; [.33E6.0020.0002] # LEPCHA LETTER KA +1C01 ; [.33E7.0020.0002] # LEPCHA LETTER KLA +1C02 ; [.33E8.0020.0002] # LEPCHA LETTER KHA +1C03 ; [.33E9.0020.0002] # LEPCHA LETTER GA +1C04 ; [.33EA.0020.0002] # LEPCHA LETTER GLA +1C05 ; [.33EB.0020.0002] # LEPCHA LETTER NGA +1C06 ; [.33EC.0020.0002] # LEPCHA LETTER CA +1C07 ; [.33ED.0020.0002] # LEPCHA LETTER CHA +1C08 ; [.33EE.0020.0002] # LEPCHA LETTER JA +1C09 ; [.33EF.0020.0002] # LEPCHA LETTER NYA +1C4D ; [.33F0.0020.0002] # LEPCHA LETTER TTA +1C4E ; [.33F1.0020.0002] # LEPCHA LETTER TTHA +1C4F ; [.33F2.0020.0002] # LEPCHA LETTER DDA +1C0A ; [.33F3.0020.0002] # LEPCHA LETTER TA +1C0B ; [.33F4.0020.0002] # LEPCHA LETTER THA +1C0C ; [.33F5.0020.0002] # LEPCHA LETTER DA +1C0D ; [.33F6.0020.0002] # LEPCHA LETTER NA +1C0E ; [.33F7.0020.0002] # LEPCHA LETTER PA +1C0F ; [.33F8.0020.0002] # LEPCHA LETTER PLA +1C10 ; [.33F9.0020.0002] # LEPCHA LETTER PHA +1C11 ; [.33FA.0020.0002] # LEPCHA LETTER FA +1C12 ; [.33FB.0020.0002] # LEPCHA LETTER FLA +1C13 ; [.33FC.0020.0002] # LEPCHA LETTER BA +1C14 ; [.33FD.0020.0002] # LEPCHA LETTER BLA +1C15 ; [.33FE.0020.0002] # LEPCHA LETTER MA +1C16 ; [.33FF.0020.0002] # LEPCHA LETTER MLA +1C17 ; [.3400.0020.0002] # LEPCHA LETTER TSA +1C18 ; [.3401.0020.0002] # LEPCHA LETTER TSHA +1C19 ; [.3402.0020.0002] # LEPCHA LETTER DZA +1C1A ; [.3403.0020.0002] # LEPCHA LETTER YA +1C24 ; [.3404.0020.0002] # LEPCHA SUBJOINED LETTER YA +1C1B ; [.3405.0020.0002] # LEPCHA LETTER RA +1C25 ; [.3406.0020.0002] # LEPCHA SUBJOINED LETTER RA +1C1C ; [.3407.0020.0002] # LEPCHA LETTER LA +1C1D ; [.3408.0020.0002] # LEPCHA LETTER HA +1C1E ; [.3409.0020.0002] # LEPCHA LETTER HLA +1C1F ; [.340A.0020.0002] # LEPCHA LETTER VA +1C20 ; [.340B.0020.0002] # LEPCHA LETTER SA +1C21 ; [.340C.0020.0002] # LEPCHA LETTER SHA +1C22 ; [.340D.0020.0002] # LEPCHA LETTER WA +1C23 ; [.340E.0020.0002] # LEPCHA LETTER A +1C36 ; [.340F.0020.0002] # LEPCHA SIGN RAN +1C26 ; [.3410.0020.0002] # LEPCHA VOWEL SIGN AA +1C27 ; [.3411.0020.0002] # LEPCHA VOWEL SIGN I +1C28 ; [.3412.0020.0002] # LEPCHA VOWEL SIGN O +1C29 ; [.3413.0020.0002] # LEPCHA VOWEL SIGN OO +1C2A ; [.3414.0020.0002] # LEPCHA VOWEL SIGN U +1C2B ; [.3415.0020.0002] # LEPCHA VOWEL SIGN UU +1C2C ; [.3416.0020.0002] # LEPCHA VOWEL SIGN E +1C2D ; [.3417.0020.0002] # LEPCHA CONSONANT SIGN K +1C2E ; [.3418.0020.0002] # LEPCHA CONSONANT SIGN M +1C2F ; [.3419.0020.0002] # LEPCHA CONSONANT SIGN L +1C30 ; [.341A.0020.0002] # LEPCHA CONSONANT SIGN N +1C31 ; [.341B.0020.0002] # LEPCHA CONSONANT SIGN P +1C32 ; [.341C.0020.0002] # LEPCHA CONSONANT SIGN R +1C33 ; [.341D.0020.0002] # LEPCHA CONSONANT SIGN T +1C34 ; [.341E.0020.0002] # LEPCHA CONSONANT SIGN NYIN-DO +1C35 ; [.341F.0020.0002] # LEPCHA CONSONANT SIGN KANG +A840 ; [.3420.0020.0002] # PHAGS-PA LETTER KA +A841 ; [.3421.0020.0002] # PHAGS-PA LETTER KHA +A842 ; [.3422.0020.0002] # PHAGS-PA LETTER GA +A843 ; [.3423.0020.0002] # PHAGS-PA LETTER NGA +A844 ; [.3424.0020.0002] # PHAGS-PA LETTER CA +A845 ; [.3425.0020.0002] # PHAGS-PA LETTER CHA +A846 ; [.3426.0020.0002] # PHAGS-PA LETTER JA +A847 ; [.3427.0020.0002] # PHAGS-PA LETTER NYA +A869 ; [.3428.0020.0002] # PHAGS-PA LETTER TTA +A86A ; [.3429.0020.0002] # PHAGS-PA LETTER TTHA +A86B ; [.342A.0020.0002] # PHAGS-PA LETTER DDA +A86C ; [.342B.0020.0002] # PHAGS-PA LETTER NNA +A848 ; [.342C.0020.0002] # PHAGS-PA LETTER TA +A849 ; [.342D.0020.0002] # PHAGS-PA LETTER THA +A84A ; [.342E.0020.0002] # PHAGS-PA LETTER DA +A84B ; [.342F.0020.0002] # PHAGS-PA LETTER NA +A84C ; [.3430.0020.0002] # PHAGS-PA LETTER PA +A84D ; [.3431.0020.0002] # PHAGS-PA LETTER PHA +A84E ; [.3432.0020.0002] # PHAGS-PA LETTER BA +A84F ; [.3433.0020.0002] # PHAGS-PA LETTER MA +A850 ; [.3434.0020.0002] # PHAGS-PA LETTER TSA +A851 ; [.3435.0020.0002] # PHAGS-PA LETTER TSHA +A852 ; [.3436.0020.0002] # PHAGS-PA LETTER DZA +A853 ; [.3437.0020.0002] # PHAGS-PA LETTER WA +A867 ; [.3438.0020.0002] # PHAGS-PA SUBJOINED LETTER WA +A854 ; [.3439.0020.0002] # PHAGS-PA LETTER ZHA +A855 ; [.343A.0020.0002] # PHAGS-PA LETTER ZA +A856 ; [.343B.0020.0002] # PHAGS-PA LETTER SMALL A +A857 ; [.343C.0020.0002] # PHAGS-PA LETTER YA +A868 ; [.343D.0020.0002] # PHAGS-PA SUBJOINED LETTER YA +A86D ; [.343E.0020.0002] # PHAGS-PA LETTER ALTERNATE YA +A858 ; [.343F.0020.0002] # PHAGS-PA LETTER RA +A871 ; [.3440.0020.0002] # PHAGS-PA SUBJOINED LETTER RA +A872 ; [.3441.0020.0002] # PHAGS-PA SUPERFIXED LETTER RA +A859 ; [.3442.0020.0002] # PHAGS-PA LETTER LA +A85A ; [.3443.0020.0002] # PHAGS-PA LETTER SHA +A86E ; [.3444.0020.0002] # PHAGS-PA LETTER VOICELESS SHA +A85B ; [.3445.0020.0002] # PHAGS-PA LETTER SA +A85C ; [.3446.0020.0002] # PHAGS-PA LETTER HA +A86F ; [.3447.0020.0002] # PHAGS-PA LETTER VOICED HA +A870 ; [.3448.0020.0002] # PHAGS-PA LETTER ASPIRATED FA +A85D ; [.3449.0020.0002] # PHAGS-PA LETTER A +A862 ; [.344A.0020.0002] # PHAGS-PA LETTER QA +A863 ; [.344B.0020.0002] # PHAGS-PA LETTER XA +A864 ; [.344C.0020.0002] # PHAGS-PA LETTER FA +A865 ; [.344D.0020.0002] # PHAGS-PA LETTER GGA +A85E ; [.344E.0020.0002] # PHAGS-PA LETTER I +A85F ; [.344F.0020.0002] # PHAGS-PA LETTER U +A860 ; [.3450.0020.0002] # PHAGS-PA LETTER E +A861 ; [.3451.0020.0002] # PHAGS-PA LETTER O +A866 ; [.3452.0020.0002] # PHAGS-PA LETTER EE +A873 ; [.3453.0020.0002] # PHAGS-PA LETTER CANDRABINDU +1900 ; [.3454.0020.0002] # LIMBU VOWEL-CARRIER LETTER +1901 ; [.3455.0020.0002] # LIMBU LETTER KA +1902 ; [.3456.0020.0002] # LIMBU LETTER KHA +1903 ; [.3457.0020.0002] # LIMBU LETTER GA +1904 ; [.3458.0020.0002] # LIMBU LETTER GHA +1905 ; [.3459.0020.0002] # LIMBU LETTER NGA +1906 ; [.345A.0020.0002] # LIMBU LETTER CA +1907 ; [.345B.0020.0002] # LIMBU LETTER CHA +1908 ; [.345C.0020.0002] # LIMBU LETTER JA +191D ; [.345C.0020.0004][.347A.0020.0004] # LIMBU LETTER GYAN +1909 ; [.345D.0020.0002] # LIMBU LETTER JHA +190A ; [.345E.0020.0002] # LIMBU LETTER YAN +190B ; [.345F.0020.0002] # LIMBU LETTER TA +191E ; [.345F.0020.0004][.347B.0020.0004] # LIMBU LETTER TRA +190C ; [.3460.0020.0002] # LIMBU LETTER THA +190D ; [.3461.0020.0002] # LIMBU LETTER DA +190E ; [.3462.0020.0002] # LIMBU LETTER DHA +190F ; [.3463.0020.0002] # LIMBU LETTER NA +1910 ; [.3464.0020.0002] # LIMBU LETTER PA +1911 ; [.3465.0020.0002] # LIMBU LETTER PHA +1912 ; [.3466.0020.0002] # LIMBU LETTER BA +1913 ; [.3467.0020.0002] # LIMBU LETTER BHA +1914 ; [.3468.0020.0002] # LIMBU LETTER MA +1915 ; [.3469.0020.0002] # LIMBU LETTER YA +1916 ; [.346A.0020.0002] # LIMBU LETTER RA +1917 ; [.346B.0020.0002] # LIMBU LETTER LA +1918 ; [.346C.0020.0002] # LIMBU LETTER WA +1919 ; [.346D.0020.0002] # LIMBU LETTER SHA +191A ; [.346E.0020.0002] # LIMBU LETTER SSA +191B ; [.346F.0020.0002] # LIMBU LETTER SA +191C ; [.3470.0020.0002] # LIMBU LETTER HA +1920 ; [.3471.0020.0002] # LIMBU VOWEL SIGN A +1921 ; [.3472.0020.0002] # LIMBU VOWEL SIGN I +1922 ; [.3473.0020.0002] # LIMBU VOWEL SIGN U +1923 ; [.3474.0020.0002] # LIMBU VOWEL SIGN EE +1924 ; [.3475.0020.0002] # LIMBU VOWEL SIGN AI +1925 ; [.3476.0020.0002] # LIMBU VOWEL SIGN OO +1926 ; [.3477.0020.0002] # LIMBU VOWEL SIGN AU +1927 ; [.3478.0020.0002] # LIMBU VOWEL SIGN E +1928 ; [.3479.0020.0002] # LIMBU VOWEL SIGN O +1929 ; [.347A.0020.0002] # LIMBU SUBJOINED LETTER YA +192A ; [.347B.0020.0002] # LIMBU SUBJOINED LETTER RA +192B ; [.347C.0020.0002] # LIMBU SUBJOINED LETTER WA +1930 ; [.347D.0020.0002] # LIMBU SMALL LETTER KA +1931 ; [.347E.0020.0002] # LIMBU SMALL LETTER NGA +1932 ; [.347F.0020.0002] # LIMBU SMALL LETTER ANUSVARA +1933 ; [.3480.0020.0002] # LIMBU SMALL LETTER TA +1934 ; [.3481.0020.0002] # LIMBU SMALL LETTER NA +1935 ; [.3482.0020.0002] # LIMBU SMALL LETTER PA +1936 ; [.3483.0020.0002] # LIMBU SMALL LETTER MA +1937 ; [.3484.0020.0002] # LIMBU SMALL LETTER RA +1938 ; [.3485.0020.0002] # LIMBU SMALL LETTER LA +1700 ; [.3486.0020.0002] # TAGALOG LETTER A +1701 ; [.3487.0020.0002] # TAGALOG LETTER I +1702 ; [.3488.0020.0002] # TAGALOG LETTER U +1703 ; [.3489.0020.0002] # TAGALOG LETTER KA +1704 ; [.348A.0020.0002] # TAGALOG LETTER GA +1705 ; [.348B.0020.0002] # TAGALOG LETTER NGA +1706 ; [.348C.0020.0002] # TAGALOG LETTER TA +1707 ; [.348D.0020.0002] # TAGALOG LETTER DA +1708 ; [.348E.0020.0002] # TAGALOG LETTER NA +1709 ; [.348F.0020.0002] # TAGALOG LETTER PA +170A ; [.3490.0020.0002] # TAGALOG LETTER BA +170B ; [.3491.0020.0002] # TAGALOG LETTER MA +170C ; [.3492.0020.0002] # TAGALOG LETTER YA +170E ; [.3493.0020.0002] # TAGALOG LETTER LA +170F ; [.3494.0020.0002] # TAGALOG LETTER WA +1710 ; [.3495.0020.0002] # TAGALOG LETTER SA +1711 ; [.3496.0020.0002] # TAGALOG LETTER HA +1712 ; [.3497.0020.0002] # TAGALOG VOWEL SIGN I +1713 ; [.3498.0020.0002] # TAGALOG VOWEL SIGN U +1714 ; [.3499.0020.0002] # TAGALOG SIGN VIRAMA +1720 ; [.349A.0020.0002] # HANUNOO LETTER A +1721 ; [.349B.0020.0002] # HANUNOO LETTER I +1722 ; [.349C.0020.0002] # HANUNOO LETTER U +1723 ; [.349D.0020.0002] # HANUNOO LETTER KA +1724 ; [.349E.0020.0002] # HANUNOO LETTER GA +1725 ; [.349F.0020.0002] # HANUNOO LETTER NGA +1726 ; [.34A0.0020.0002] # HANUNOO LETTER TA +1727 ; [.34A1.0020.0002] # HANUNOO LETTER DA +1728 ; [.34A2.0020.0002] # HANUNOO LETTER NA +1729 ; [.34A3.0020.0002] # HANUNOO LETTER PA +172A ; [.34A4.0020.0002] # HANUNOO LETTER BA +172B ; [.34A5.0020.0002] # HANUNOO LETTER MA +172C ; [.34A6.0020.0002] # HANUNOO LETTER YA +172D ; [.34A7.0020.0002] # HANUNOO LETTER RA +172E ; [.34A8.0020.0002] # HANUNOO LETTER LA +172F ; [.34A9.0020.0002] # HANUNOO LETTER WA +1730 ; [.34AA.0020.0002] # HANUNOO LETTER SA +1731 ; [.34AB.0020.0002] # HANUNOO LETTER HA +1732 ; [.34AC.0020.0002] # HANUNOO VOWEL SIGN I +1733 ; [.34AD.0020.0002] # HANUNOO VOWEL SIGN U +1734 ; [.34AE.0020.0002] # HANUNOO SIGN PAMUDPOD +1740 ; [.34AF.0020.0002] # BUHID LETTER A +1741 ; [.34B0.0020.0002] # BUHID LETTER I +1742 ; [.34B1.0020.0002] # BUHID LETTER U +1743 ; [.34B2.0020.0002] # BUHID LETTER KA +1744 ; [.34B3.0020.0002] # BUHID LETTER GA +1745 ; [.34B4.0020.0002] # BUHID LETTER NGA +1746 ; [.34B5.0020.0002] # BUHID LETTER TA +1747 ; [.34B6.0020.0002] # BUHID LETTER DA +1748 ; [.34B7.0020.0002] # BUHID LETTER NA +1749 ; [.34B8.0020.0002] # BUHID LETTER PA +174A ; [.34B9.0020.0002] # BUHID LETTER BA +174B ; [.34BA.0020.0002] # BUHID LETTER MA +174C ; [.34BB.0020.0002] # BUHID LETTER YA +174D ; [.34BC.0020.0002] # BUHID LETTER RA +174E ; [.34BD.0020.0002] # BUHID LETTER LA +174F ; [.34BE.0020.0002] # BUHID LETTER WA +1750 ; [.34BF.0020.0002] # BUHID LETTER SA +1751 ; [.34C0.0020.0002] # BUHID LETTER HA +1752 ; [.34C1.0020.0002] # BUHID VOWEL SIGN I +1753 ; [.34C2.0020.0002] # BUHID VOWEL SIGN U +1760 ; [.34C3.0020.0002] # TAGBANWA LETTER A +1761 ; [.34C4.0020.0002] # TAGBANWA LETTER I +1762 ; [.34C5.0020.0002] # TAGBANWA LETTER U +1763 ; [.34C6.0020.0002] # TAGBANWA LETTER KA +1764 ; [.34C7.0020.0002] # TAGBANWA LETTER GA +1765 ; [.34C8.0020.0002] # TAGBANWA LETTER NGA +1766 ; [.34C9.0020.0002] # TAGBANWA LETTER TA +1767 ; [.34CA.0020.0002] # TAGBANWA LETTER DA +1768 ; [.34CB.0020.0002] # TAGBANWA LETTER NA +1769 ; [.34CC.0020.0002] # TAGBANWA LETTER PA +176A ; [.34CD.0020.0002] # TAGBANWA LETTER BA +176B ; [.34CE.0020.0002] # TAGBANWA LETTER MA +176C ; [.34CF.0020.0002] # TAGBANWA LETTER YA +176E ; [.34D0.0020.0002] # TAGBANWA LETTER LA +176F ; [.34D1.0020.0002] # TAGBANWA LETTER WA +1770 ; [.34D2.0020.0002] # TAGBANWA LETTER SA +1772 ; [.34D3.0020.0002] # TAGBANWA VOWEL SIGN I +1773 ; [.34D4.0020.0002] # TAGBANWA VOWEL SIGN U +1A00 ; [.34D5.0020.0002] # BUGINESE LETTER KA +1A01 ; [.34D6.0020.0002] # BUGINESE LETTER GA +1A02 ; [.34D7.0020.0002] # BUGINESE LETTER NGA +1A03 ; [.34D8.0020.0002] # BUGINESE LETTER NGKA +1A04 ; [.34D9.0020.0002] # BUGINESE LETTER PA +1A05 ; [.34DA.0020.0002] # BUGINESE LETTER BA +1A06 ; [.34DB.0020.0002] # BUGINESE LETTER MA +1A07 ; [.34DC.0020.0002] # BUGINESE LETTER MPA +1A08 ; [.34DD.0020.0002] # BUGINESE LETTER TA +1A09 ; [.34DE.0020.0002] # BUGINESE LETTER DA +1A0A ; [.34DF.0020.0002] # BUGINESE LETTER NA +1A0B ; [.34E0.0020.0002] # BUGINESE LETTER NRA +1A0C ; [.34E1.0020.0002] # BUGINESE LETTER CA +1A0D ; [.34E2.0020.0002] # BUGINESE LETTER JA +1A0E ; [.34E3.0020.0002] # BUGINESE LETTER NYA +1A0F ; [.34E4.0020.0002] # BUGINESE LETTER NYCA +1A10 ; [.34E5.0020.0002] # BUGINESE LETTER YA +1A11 ; [.34E6.0020.0002] # BUGINESE LETTER RA +1A12 ; [.34E7.0020.0002] # BUGINESE LETTER LA +1A13 ; [.34E8.0020.0002] # BUGINESE LETTER VA +1A14 ; [.34E9.0020.0002] # BUGINESE LETTER SA +1A15 ; [.34EA.0020.0002] # BUGINESE LETTER A +1A16 ; [.34EB.0020.0002] # BUGINESE LETTER HA +1A17 ; [.34EC.0020.0002] # BUGINESE VOWEL SIGN I +1A18 ; [.34ED.0020.0002] # BUGINESE VOWEL SIGN U +1A19 ; [.34EE.0020.0002] # BUGINESE VOWEL SIGN E +1A1A ; [.34EF.0020.0002] # BUGINESE VOWEL SIGN O +1A1B ; [.34F0.0020.0002] # BUGINESE VOWEL SIGN AE +11EE0 ; [.34F1.0020.0002] # MAKASAR LETTER KA +11EE1 ; [.34F2.0020.0002] # MAKASAR LETTER GA +11EE2 ; [.34F3.0020.0002] # MAKASAR LETTER NGA +11EE3 ; [.34F4.0020.0002] # MAKASAR LETTER PA +11EE4 ; [.34F5.0020.0002] # MAKASAR LETTER BA +11EE5 ; [.34F6.0020.0002] # MAKASAR LETTER MA +11EE6 ; [.34F7.0020.0002] # MAKASAR LETTER TA +11EE7 ; [.34F8.0020.0002] # MAKASAR LETTER DA +11EE8 ; [.34F9.0020.0002] # MAKASAR LETTER NA +11EE9 ; [.34FA.0020.0002] # MAKASAR LETTER CA +11EEA ; [.34FB.0020.0002] # MAKASAR LETTER JA +11EEB ; [.34FC.0020.0002] # MAKASAR LETTER NYA +11EEC ; [.34FD.0020.0002] # MAKASAR LETTER YA +11EED ; [.34FE.0020.0002] # MAKASAR LETTER RA +11EEE ; [.34FF.0020.0002] # MAKASAR LETTER LA +11EEF ; [.3500.0020.0002] # MAKASAR LETTER VA +11EF0 ; [.3501.0020.0002] # MAKASAR LETTER SA +11EF1 ; [.3502.0020.0002] # MAKASAR LETTER A +11EF2 ; [.3503.0020.0002] # MAKASAR ANGKA +11EF3 ; [.3504.0020.0002] # MAKASAR VOWEL SIGN I +11EF4 ; [.3505.0020.0002] # MAKASAR VOWEL SIGN U +11EF5 ; [.3506.0020.0002] # MAKASAR VOWEL SIGN E +11EF6 ; [.3507.0020.0002] # MAKASAR VOWEL SIGN O +1BC0 ; [.3508.0020.0002] # BATAK LETTER A +1BC1 ; [.3508.0020.0004] # BATAK LETTER SIMALUNGUN A +1BC2 ; [.3509.0020.0002] # BATAK LETTER HA +1BC3 ; [.3509.0020.0004] # BATAK LETTER SIMALUNGUN HA +1BC4 ; [.3509.0020.0004] # BATAK LETTER MANDAILING HA +1BC5 ; [.350A.0020.0002] # BATAK LETTER BA +1BC6 ; [.350A.0020.0004] # BATAK LETTER KARO BA +1BC7 ; [.350B.0020.0002] # BATAK LETTER PA +1BC8 ; [.350B.0020.0004] # BATAK LETTER SIMALUNGUN PA +1BC9 ; [.350C.0020.0002] # BATAK LETTER NA +1BCA ; [.350C.0020.0004] # BATAK LETTER MANDAILING NA +1BCB ; [.350D.0020.0002] # BATAK LETTER WA +1BCC ; [.350D.0020.0004] # BATAK LETTER SIMALUNGUN WA +1BCD ; [.350D.0020.0004] # BATAK LETTER PAKPAK WA +1BCE ; [.350E.0020.0002] # BATAK LETTER GA +1BCF ; [.350E.0020.0004] # BATAK LETTER SIMALUNGUN GA +1BD0 ; [.350F.0020.0002] # BATAK LETTER JA +1BD1 ; [.3510.0020.0002] # BATAK LETTER DA +1BD2 ; [.3511.0020.0002] # BATAK LETTER RA +1BD3 ; [.3511.0020.0004] # BATAK LETTER SIMALUNGUN RA +1BD4 ; [.3512.0020.0002] # BATAK LETTER MA +1BD5 ; [.3512.0020.0004] # BATAK LETTER SIMALUNGUN MA +1BD6 ; [.3513.0020.0002] # BATAK LETTER SOUTHERN TA +1BD7 ; [.3513.0020.0004] # BATAK LETTER NORTHERN TA +1BD8 ; [.3514.0020.0002] # BATAK LETTER SA +1BD9 ; [.3514.0020.0004] # BATAK LETTER SIMALUNGUN SA +1BDA ; [.3514.0020.0004] # BATAK LETTER MANDAILING SA +1BDB ; [.3515.0020.0002] # BATAK LETTER YA +1BDC ; [.3515.0020.0004] # BATAK LETTER SIMALUNGUN YA +1BDD ; [.3516.0020.0002] # BATAK LETTER NGA +1BDE ; [.3517.0020.0002] # BATAK LETTER LA +1BDF ; [.3517.0020.0004] # BATAK LETTER SIMALUNGUN LA +1BE0 ; [.3518.0020.0002] # BATAK LETTER NYA +1BE1 ; [.3519.0020.0002] # BATAK LETTER CA +1BE2 ; [.351A.0020.0002] # BATAK LETTER NDA +1BE3 ; [.351B.0020.0002] # BATAK LETTER MBA +1BE4 ; [.351C.0020.0002] # BATAK LETTER I +1BE5 ; [.351D.0020.0002] # BATAK LETTER U +1BE7 ; [.351E.0020.0002] # BATAK VOWEL SIGN E +1BE8 ; [.351E.0020.0004] # BATAK VOWEL SIGN PAKPAK E +1BE9 ; [.351F.0020.0002] # BATAK VOWEL SIGN EE +1BEA ; [.3520.0020.0002] # BATAK VOWEL SIGN I +1BEB ; [.3520.0020.0004] # BATAK VOWEL SIGN KARO I +1BEC ; [.3521.0020.0002] # BATAK VOWEL SIGN O +1BED ; [.3521.0020.0004] # BATAK VOWEL SIGN KARO O +1BEE ; [.3522.0020.0002] # BATAK VOWEL SIGN U +1BEF ; [.3522.0020.0004] # BATAK VOWEL SIGN U FOR SIMALUNGUN SA +1BF0 ; [.3523.0020.0002] # BATAK CONSONANT SIGN NG +1BF1 ; [.3524.0020.0002] # BATAK CONSONANT SIGN H +1BF2 ; [.3525.0020.0002] # BATAK PANGOLAT +1BF3 ; [.3526.0020.0002] # BATAK PANONGONAN +A930 ; [.3527.0020.0002] # REJANG LETTER KA +A931 ; [.3528.0020.0002] # REJANG LETTER GA +A932 ; [.3529.0020.0002] # REJANG LETTER NGA +A933 ; [.352A.0020.0002] # REJANG LETTER TA +A934 ; [.352B.0020.0002] # REJANG LETTER DA +A935 ; [.352C.0020.0002] # REJANG LETTER NA +A936 ; [.352D.0020.0002] # REJANG LETTER PA +A937 ; [.352E.0020.0002] # REJANG LETTER BA +A938 ; [.352F.0020.0002] # REJANG LETTER MA +A939 ; [.3530.0020.0002] # REJANG LETTER CA +A93A ; [.3531.0020.0002] # REJANG LETTER JA +A93B ; [.3532.0020.0002] # REJANG LETTER NYA +A93C ; [.3533.0020.0002] # REJANG LETTER SA +A93D ; [.3534.0020.0002] # REJANG LETTER RA +A93E ; [.3535.0020.0002] # REJANG LETTER LA +A93F ; [.3536.0020.0002] # REJANG LETTER YA +A940 ; [.3537.0020.0002] # REJANG LETTER WA +A941 ; [.3538.0020.0002] # REJANG LETTER HA +A942 ; [.3539.0020.0002] # REJANG LETTER MBA +A943 ; [.353A.0020.0002] # REJANG LETTER NGGA +A944 ; [.353B.0020.0002] # REJANG LETTER NDA +A945 ; [.353C.0020.0002] # REJANG LETTER NYJA +A946 ; [.353D.0020.0002] # REJANG LETTER A +A947 ; [.353E.0020.0002] # REJANG VOWEL SIGN I +A948 ; [.353F.0020.0002] # REJANG VOWEL SIGN U +A949 ; [.3540.0020.0002] # REJANG VOWEL SIGN E +A94A ; [.3541.0020.0002] # REJANG VOWEL SIGN AI +A94B ; [.3542.0020.0002] # REJANG VOWEL SIGN O +A94C ; [.3543.0020.0002] # REJANG VOWEL SIGN AU +A94D ; [.3544.0020.0002] # REJANG VOWEL SIGN EU +A94E ; [.3545.0020.0002] # REJANG VOWEL SIGN EA +A94F ; [.3546.0020.0002] # REJANG CONSONANT SIGN NG +A950 ; [.3547.0020.0002] # REJANG CONSONANT SIGN N +A951 ; [.3548.0020.0002] # REJANG CONSONANT SIGN R +A952 ; [.3549.0020.0002] # REJANG CONSONANT SIGN H +A953 ; [.354A.0020.0002] # REJANG VIRAMA +A90A ; [.354B.0020.0002] # KAYAH LI LETTER KA +A90B ; [.354C.0020.0002] # KAYAH LI LETTER KHA +A90C ; [.354D.0020.0002] # KAYAH LI LETTER GA +A90D ; [.354E.0020.0002] # KAYAH LI LETTER NGA +A90E ; [.354F.0020.0002] # KAYAH LI LETTER SA +A90F ; [.3550.0020.0002] # KAYAH LI LETTER SHA +A910 ; [.3551.0020.0002] # KAYAH LI LETTER ZA +A911 ; [.3552.0020.0002] # KAYAH LI LETTER NYA +A912 ; [.3553.0020.0002] # KAYAH LI LETTER TA +A913 ; [.3554.0020.0002] # KAYAH LI LETTER HTA +A914 ; [.3555.0020.0002] # KAYAH LI LETTER NA +A915 ; [.3556.0020.0002] # KAYAH LI LETTER PA +A916 ; [.3557.0020.0002] # KAYAH LI LETTER PHA +A917 ; [.3558.0020.0002] # KAYAH LI LETTER MA +A918 ; [.3559.0020.0002] # KAYAH LI LETTER DA +A919 ; [.355A.0020.0002] # KAYAH LI LETTER BA +A91A ; [.355B.0020.0002] # KAYAH LI LETTER RA +A91B ; [.355C.0020.0002] # KAYAH LI LETTER YA +A91C ; [.355D.0020.0002] # KAYAH LI LETTER LA +A91D ; [.355E.0020.0002] # KAYAH LI LETTER WA +A91E ; [.355F.0020.0002] # KAYAH LI LETTER THA +A91F ; [.3560.0020.0002] # KAYAH LI LETTER HA +A920 ; [.3561.0020.0002] # KAYAH LI LETTER VA +A921 ; [.3562.0020.0002] # KAYAH LI LETTER CA +A922 ; [.3563.0020.0002] # KAYAH LI LETTER A +A923 ; [.3564.0020.0002] # KAYAH LI LETTER OE +A924 ; [.3565.0020.0002] # KAYAH LI LETTER I +A925 ; [.3566.0020.0002] # KAYAH LI LETTER OO +A926 ; [.3567.0020.0002] # KAYAH LI VOWEL UE +A927 ; [.3568.0020.0002] # KAYAH LI VOWEL E +A928 ; [.3569.0020.0002] # KAYAH LI VOWEL U +A929 ; [.356A.0020.0002] # KAYAH LI VOWEL EE +A92A ; [.356B.0020.0002] # KAYAH LI VOWEL O +1000 ; [.356C.0020.0002] # MYANMAR LETTER KA +1075 ; [.356D.0020.0002] # MYANMAR LETTER SHAN KA +1001 ; [.356E.0020.0002] # MYANMAR LETTER KHA +1076 ; [.356F.0020.0002] # MYANMAR LETTER SHAN KHA +1002 ; [.3570.0020.0002] # MYANMAR LETTER GA +1077 ; [.3571.0020.0002] # MYANMAR LETTER SHAN GA +AA60 ; [.3572.0020.0002] # MYANMAR LETTER KHAMTI GA +A9E9 ; [.3573.0020.0002] # MYANMAR LETTER TAI LAING GA +1003 ; [.3574.0020.0002] # MYANMAR LETTER GHA +A9E0 ; [.3575.0020.0002] # MYANMAR LETTER SHAN GHA +A9EA ; [.3576.0020.0002] # MYANMAR LETTER TAI LAING GHA +1004 ; [.3577.0020.0002] # MYANMAR LETTER NGA +105A ; [.3578.0020.0002] # MYANMAR LETTER MON NGA +1005 ; [.3579.0020.0002] # MYANMAR LETTER CA +1078 ; [.357A.0020.0002] # MYANMAR LETTER SHAN CA +AA61 ; [.357B.0020.0002] # MYANMAR LETTER KHAMTI CA +1006 ; [.357C.0020.0002] # MYANMAR LETTER CHA +A9E1 ; [.357D.0020.0002] # MYANMAR LETTER SHAN CHA +AA62 ; [.357E.0020.0002] # MYANMAR LETTER KHAMTI CHA +AA7E ; [.357F.0020.0002] # MYANMAR LETTER SHWE PALAUNG CHA +1007 ; [.3580.0020.0002] # MYANMAR LETTER JA +AA63 ; [.3581.0020.0002] # MYANMAR LETTER KHAMTI JA +A9EB ; [.3582.0020.0002] # MYANMAR LETTER TAI LAING JA +1079 ; [.3583.0020.0002] # MYANMAR LETTER SHAN ZA +AA72 ; [.3584.0020.0002] # MYANMAR LETTER KHAMTI ZA +1008 ; [.3585.0020.0002] # MYANMAR LETTER JHA +105B ; [.3586.0020.0002] # MYANMAR LETTER MON JHA +A9E2 ; [.3587.0020.0002] # MYANMAR LETTER SHAN JHA +AA64 ; [.3588.0020.0002] # MYANMAR LETTER KHAMTI JHA +A9EC ; [.3589.0020.0002] # MYANMAR LETTER TAI LAING JHA +1061 ; [.358A.0020.0002] # MYANMAR LETTER SGAW KAREN SHA +AA7F ; [.358B.0020.0002] # MYANMAR LETTER SHWE PALAUNG SHA +1009 ; [.358C.0020.0002] # MYANMAR LETTER NYA +107A ; [.358D.0020.0002] # MYANMAR LETTER SHAN NYA +AA65 ; [.358E.0020.0002] # MYANMAR LETTER KHAMTI NYA +A9E7 ; [.358F.0020.0002] # MYANMAR LETTER TAI LAING NYA +100A ; [.3590.0020.0002] # MYANMAR LETTER NNYA +100B ; [.3591.0020.0002] # MYANMAR LETTER TTA +AA66 ; [.3592.0020.0002] # MYANMAR LETTER KHAMTI TTA +100C ; [.3593.0020.0002] # MYANMAR LETTER TTHA +AA67 ; [.3594.0020.0002] # MYANMAR LETTER KHAMTI TTHA +100D ; [.3595.0020.0002] # MYANMAR LETTER DDA +AA68 ; [.3596.0020.0002] # MYANMAR LETTER KHAMTI DDA +A9ED ; [.3597.0020.0002] # MYANMAR LETTER TAI LAING DDA +100E ; [.3598.0020.0002] # MYANMAR LETTER DDHA +AA69 ; [.3599.0020.0002] # MYANMAR LETTER KHAMTI DDHA +A9EE ; [.359A.0020.0002] # MYANMAR LETTER TAI LAING DDHA +100F ; [.359B.0020.0002] # MYANMAR LETTER NNA +106E ; [.359C.0020.0002] # MYANMAR LETTER EASTERN PWO KAREN NNA +A9E3 ; [.359D.0020.0002] # MYANMAR LETTER SHAN NNA +A9EF ; [.359E.0020.0002] # MYANMAR LETTER TAI LAING NNA +1010 ; [.359F.0020.0002] # MYANMAR LETTER TA +1011 ; [.35A0.0020.0002] # MYANMAR LETTER THA +1012 ; [.35A1.0020.0002] # MYANMAR LETTER DA +107B ; [.35A2.0020.0002] # MYANMAR LETTER SHAN DA +A9FB ; [.35A3.0020.0002] # MYANMAR LETTER TAI LAING DA +1013 ; [.35A4.0020.0002] # MYANMAR LETTER DHA +AA6A ; [.35A5.0020.0002] # MYANMAR LETTER KHAMTI DHA +A9FC ; [.35A6.0020.0002] # MYANMAR LETTER TAI LAING DHA +1014 ; [.35A7.0020.0002] # MYANMAR LETTER NA +107C ; [.35A8.0020.0002] # MYANMAR LETTER SHAN NA +AA6B ; [.35A9.0020.0002] # MYANMAR LETTER KHAMTI NA +105E ; [.35AA.0020.0002] # MYANMAR CONSONANT SIGN MON MEDIAL NA +1015 ; [.35AB.0020.0002] # MYANMAR LETTER PA +1016 ; [.35AC.0020.0002] # MYANMAR LETTER PHA +107D ; [.35AD.0020.0002] # MYANMAR LETTER SHAN PHA +107E ; [.35AE.0020.0002] # MYANMAR LETTER SHAN FA +AA6F ; [.35AF.0020.0002] # MYANMAR LETTER KHAMTI FA +108E ; [.35B0.0020.0002] # MYANMAR LETTER RUMAI PALAUNG FA +A9E8 ; [.35B1.0020.0002] # MYANMAR LETTER TAI LAING FA +1017 ; [.35B2.0020.0002] # MYANMAR LETTER BA +107F ; [.35B3.0020.0002] # MYANMAR LETTER SHAN BA +A9FD ; [.35B4.0020.0002] # MYANMAR LETTER TAI LAING BA +1018 ; [.35B5.0020.0002] # MYANMAR LETTER BHA +A9E4 ; [.35B6.0020.0002] # MYANMAR LETTER SHAN BHA +A9FE ; [.35B7.0020.0002] # MYANMAR LETTER TAI LAING BHA +1019 ; [.35B8.0020.0002] # MYANMAR LETTER MA +105F ; [.35B9.0020.0002] # MYANMAR CONSONANT SIGN MON MEDIAL MA +101A ; [.35BA.0020.0002] # MYANMAR LETTER YA +103B ; [.35BB.0020.0002] # MYANMAR CONSONANT SIGN MEDIAL YA +101B ; [.35BC.0020.0002] # MYANMAR LETTER RA +AA73 ; [.35BD.0020.0002] # MYANMAR LETTER KHAMTI RA +AA7A ; [.35BE.0020.0002] # MYANMAR LETTER AITON RA +103C ; [.35BF.0020.0002] # MYANMAR CONSONANT SIGN MEDIAL RA +101C ; [.35C0.0020.0002] # MYANMAR LETTER LA +1060 ; [.35C1.0020.0002] # MYANMAR CONSONANT SIGN MON MEDIAL LA +101D ; [.35C2.0020.0002] # MYANMAR LETTER WA +103D ; [.35C3.0020.0002] # MYANMAR CONSONANT SIGN MEDIAL WA +1082 ; [.35C4.0020.0002] # MYANMAR CONSONANT SIGN SHAN MEDIAL WA +1080 ; [.35C5.0020.0002] # MYANMAR LETTER SHAN THA +1050 ; [.35C6.0020.0002] # MYANMAR LETTER SHA +1051 ; [.35C7.0020.0002] # MYANMAR LETTER SSA +1065 ; [.35C8.0020.0002] # MYANMAR LETTER WESTERN PWO KAREN THA +101E ; [.35C9.0020.0002] # MYANMAR LETTER SA +103F ; [.35C9.0020.0004][.3602.0020.0004][.35C9.0020.0004] # MYANMAR LETTER GREAT SA +AA6C ; [.35CA.0020.0002] # MYANMAR LETTER KHAMTI SA +101F ; [.35CB.0020.0002] # MYANMAR LETTER HA +1081 ; [.35CC.0020.0002] # MYANMAR LETTER SHAN HA +AA6D ; [.35CD.0020.0002] # MYANMAR LETTER KHAMTI HA +103E ; [.35CE.0020.0002] # MYANMAR CONSONANT SIGN MEDIAL HA +AA6E ; [.35CF.0020.0002] # MYANMAR LETTER KHAMTI HHA +AA71 ; [.35D0.0020.0002] # MYANMAR LETTER KHAMTI XA +1020 ; [.35D1.0020.0002] # MYANMAR LETTER LLA +A9FA ; [.35D2.0020.0002] # MYANMAR LETTER TAI LAING LLA +105C ; [.35D3.0020.0002] # MYANMAR LETTER MON BBA +105D ; [.35D4.0020.0002] # MYANMAR LETTER MON BBE +106F ; [.35D5.0020.0002] # MYANMAR LETTER EASTERN PWO KAREN YWA +1070 ; [.35D6.0020.0002] # MYANMAR LETTER EASTERN PWO KAREN GHWA +1066 ; [.35D7.0020.0002] # MYANMAR LETTER WESTERN PWO KAREN PWA +1021 ; [.35D8.0020.0002] # MYANMAR LETTER A +1022 ; [.35D9.0020.0002] # MYANMAR LETTER SHAN A +1023 ; [.35DA.0020.0002] # MYANMAR LETTER I +1024 ; [.35DB.0020.0002] # MYANMAR LETTER II +1025 ; [.35DC.0020.0002] # MYANMAR LETTER U +1026 ; [.35DD.0020.0002] # MYANMAR LETTER UU +1025 102E ; [.35DD.0020.0002] # MYANMAR LETTER UU +1052 ; [.35DE.0020.0002] # MYANMAR LETTER VOCALIC R +1053 ; [.35DF.0020.0002] # MYANMAR LETTER VOCALIC RR +1054 ; [.35E0.0020.0002] # MYANMAR LETTER VOCALIC L +1055 ; [.35E1.0020.0002] # MYANMAR LETTER VOCALIC LL +1027 ; [.35E2.0020.0002] # MYANMAR LETTER E +1028 ; [.35E3.0020.0002] # MYANMAR LETTER MON E +1029 ; [.35E4.0020.0002] # MYANMAR LETTER O +102A ; [.35E5.0020.0002] # MYANMAR LETTER AU +102C ; [.35E6.0020.0002] # MYANMAR VOWEL SIGN AA +102B ; [.35E6.0020.0004] # MYANMAR VOWEL SIGN TALL AA +1083 ; [.35E7.0020.0002] # MYANMAR VOWEL SIGN SHAN AA +1072 ; [.35E8.0020.0002] # MYANMAR VOWEL SIGN KAYAH OE +109C ; [.35E9.0020.0002] # MYANMAR VOWEL SIGN AITON A +102D ; [.35EA.0020.0002] # MYANMAR VOWEL SIGN I +1071 ; [.35EB.0020.0002] # MYANMAR VOWEL SIGN GEBA KAREN I +102E ; [.35EC.0020.0002] # MYANMAR VOWEL SIGN II +1033 ; [.35ED.0020.0002] # MYANMAR VOWEL SIGN MON II +102F ; [.35EE.0020.0002] # MYANMAR VOWEL SIGN U +1073 ; [.35EF.0020.0002] # MYANMAR VOWEL SIGN KAYAH U +1074 ; [.35F0.0020.0002] # MYANMAR VOWEL SIGN KAYAH EE +1030 ; [.35F1.0020.0002] # MYANMAR VOWEL SIGN UU +1056 ; [.35F2.0020.0002] # MYANMAR VOWEL SIGN VOCALIC R +1057 ; [.35F3.0020.0002] # MYANMAR VOWEL SIGN VOCALIC RR +1058 ; [.35F4.0020.0002] # MYANMAR VOWEL SIGN VOCALIC L +1059 ; [.35F5.0020.0002] # MYANMAR VOWEL SIGN VOCALIC LL +1031 ; [.35F6.0020.0002] # MYANMAR VOWEL SIGN E +1084 ; [.35F7.0020.0002] # MYANMAR VOWEL SIGN SHAN E +1035 ; [.35F8.0020.0002] # MYANMAR VOWEL SIGN E ABOVE +1085 ; [.35F9.0020.0002] # MYANMAR VOWEL SIGN SHAN E ABOVE +1032 ; [.35FA.0020.0002] # MYANMAR VOWEL SIGN AI +109D ; [.35FB.0020.0002] # MYANMAR VOWEL SIGN AITON AI +1034 ; [.35FC.0020.0002] # MYANMAR VOWEL SIGN MON O +1062 ; [.35FD.0020.0002] # MYANMAR VOWEL SIGN SGAW KAREN EU +1067 ; [.35FE.0020.0002] # MYANMAR VOWEL SIGN WESTERN PWO KAREN EU +1068 ; [.35FF.0020.0002] # MYANMAR VOWEL SIGN WESTERN PWO KAREN UE +A9E5 ; [.3600.0020.0002] # MYANMAR SIGN SHAN SAW +1086 ; [.3601.0020.0002] # MYANMAR VOWEL SIGN SHAN FINAL Y +1039 ; [.3602.0020.0002] # MYANMAR SIGN VIRAMA +103A ; [.3603.0020.0002] # MYANMAR SIGN ASAT +1063 ; [.3604.0020.0002] # MYANMAR TONE MARK SGAW KAREN HATHI +1064 ; [.3605.0020.0002] # MYANMAR TONE MARK SGAW KAREN KE PHO +1069 ; [.3606.0020.0002] # MYANMAR SIGN WESTERN PWO KAREN TONE-1 +106A ; [.3607.0020.0002] # MYANMAR SIGN WESTERN PWO KAREN TONE-2 +106B ; [.3608.0020.0002] # MYANMAR SIGN WESTERN PWO KAREN TONE-3 +106C ; [.3609.0020.0002] # MYANMAR SIGN WESTERN PWO KAREN TONE-4 +106D ; [.360A.0020.0002] # MYANMAR SIGN WESTERN PWO KAREN TONE-5 +1087 ; [.360B.0020.0002] # MYANMAR SIGN SHAN TONE-2 +108B ; [.360C.0020.0002] # MYANMAR SIGN SHAN COUNCIL TONE-2 +1088 ; [.360D.0020.0002] # MYANMAR SIGN SHAN TONE-3 +108C ; [.360E.0020.0002] # MYANMAR SIGN SHAN COUNCIL TONE-3 +108D ; [.360F.0020.0002] # MYANMAR SIGN SHAN COUNCIL EMPHATIC TONE +1089 ; [.3610.0020.0002] # MYANMAR SIGN SHAN TONE-5 +108A ; [.3611.0020.0002] # MYANMAR SIGN SHAN TONE-6 +108F ; [.3612.0020.0002] # MYANMAR SIGN RUMAI PALAUNG TONE-5 +109A ; [.3613.0020.0002] # MYANMAR SIGN KHAMTI TONE-1 +109B ; [.3614.0020.0002] # MYANMAR SIGN KHAMTI TONE-3 +AA7B ; [.3615.0020.0002] # MYANMAR SIGN PAO KAREN TONE +AA7C ; [.3616.0020.0002] # MYANMAR SIGN TAI LAING TONE-2 +AA7D ; [.3617.0020.0002] # MYANMAR SIGN TAI LAING TONE-5 +AA74 ; [.3618.0020.0002] # MYANMAR LOGOGRAM KHAMTI OAY +AA75 ; [.3619.0020.0002] # MYANMAR LOGOGRAM KHAMTI QN +AA76 ; [.361A.0020.0002] # MYANMAR LOGOGRAM KHAMTI HM +10D00 ; [.361B.0020.0002] # HANIFI ROHINGYA LETTER A +10D1D ; [.361C.0020.0002] # HANIFI ROHINGYA VOWEL A +10D1E ; [.361D.0020.0002] # HANIFI ROHINGYA VOWEL I +10D1F ; [.361E.0020.0002] # HANIFI ROHINGYA VOWEL U +10D20 ; [.361F.0020.0002] # HANIFI ROHINGYA VOWEL E +10D21 ; [.3620.0020.0002] # HANIFI ROHINGYA VOWEL O +10D01 ; [.3621.0020.0002] # HANIFI ROHINGYA LETTER BA +10D02 ; [.3622.0020.0002] # HANIFI ROHINGYA LETTER PA +10D03 ; [.3623.0020.0002] # HANIFI ROHINGYA LETTER TA +10D04 ; [.3624.0020.0002] # HANIFI ROHINGYA LETTER TTA +10D05 ; [.3625.0020.0002] # HANIFI ROHINGYA LETTER JA +10D06 ; [.3626.0020.0002] # HANIFI ROHINGYA LETTER CA +10D07 ; [.3627.0020.0002] # HANIFI ROHINGYA LETTER HA +10D08 ; [.3628.0020.0002] # HANIFI ROHINGYA LETTER KHA +10D09 ; [.3629.0020.0002] # HANIFI ROHINGYA LETTER FA +10D0A ; [.362A.0020.0002] # HANIFI ROHINGYA LETTER DA +10D0B ; [.362B.0020.0002] # HANIFI ROHINGYA LETTER DDA +10D0C ; [.362C.0020.0002] # HANIFI ROHINGYA LETTER RA +10D0D ; [.362D.0020.0002] # HANIFI ROHINGYA LETTER RRA +10D0E ; [.362E.0020.0002] # HANIFI ROHINGYA LETTER ZA +10D0F ; [.362F.0020.0002] # HANIFI ROHINGYA LETTER SA +10D10 ; [.3630.0020.0002] # HANIFI ROHINGYA LETTER SHA +10D11 ; [.3631.0020.0002] # HANIFI ROHINGYA LETTER KA +10D12 ; [.3632.0020.0002] # HANIFI ROHINGYA LETTER GA +10D13 ; [.3633.0020.0002] # HANIFI ROHINGYA LETTER LA +10D14 ; [.3634.0020.0002] # HANIFI ROHINGYA LETTER MA +10D15 ; [.3635.0020.0002] # HANIFI ROHINGYA LETTER NA +10D16 ; [.3636.0020.0002] # HANIFI ROHINGYA LETTER WA +10D17 ; [.3637.0020.0002] # HANIFI ROHINGYA LETTER KINNA WA +10D18 ; [.3638.0020.0002] # HANIFI ROHINGYA LETTER YA +10D19 ; [.3639.0020.0002] # HANIFI ROHINGYA LETTER KINNA YA +10D1A ; [.363A.0020.0002] # HANIFI ROHINGYA LETTER NGA +10D1B ; [.363B.0020.0002] # HANIFI ROHINGYA LETTER NYA +10D1C ; [.363C.0020.0002] # HANIFI ROHINGYA LETTER VA +10D22 ; [.363D.0020.0002] # HANIFI ROHINGYA MARK SAKIN +10D23 ; [.363E.0020.0002] # HANIFI ROHINGYA MARK NA KHONNA +11103 ; [.363F.0020.0002] # CHAKMA LETTER AA +11104 ; [.3640.0020.0002] # CHAKMA LETTER I +11105 ; [.3641.0020.0002] # CHAKMA LETTER U +11106 ; [.3642.0020.0002] # CHAKMA LETTER E +11107 ; [.3643.0020.0002] # CHAKMA LETTER KAA +11108 ; [.3644.0020.0002] # CHAKMA LETTER KHAA +11109 ; [.3645.0020.0002] # CHAKMA LETTER GAA +1110A ; [.3646.0020.0002] # CHAKMA LETTER GHAA +1110B ; [.3647.0020.0002] # CHAKMA LETTER NGAA +1110C ; [.3648.0020.0002] # CHAKMA LETTER CAA +1110D ; [.3649.0020.0002] # CHAKMA LETTER CHAA +1110E ; [.364A.0020.0002] # CHAKMA LETTER JAA +1110F ; [.364B.0020.0002] # CHAKMA LETTER JHAA +11110 ; [.364C.0020.0002] # CHAKMA LETTER NYAA +11111 ; [.364D.0020.0002] # CHAKMA LETTER TTAA +11112 ; [.364E.0020.0002] # CHAKMA LETTER TTHAA +11113 ; [.364F.0020.0002] # CHAKMA LETTER DDAA +11114 ; [.3650.0020.0002] # CHAKMA LETTER DDHAA +11115 ; [.3651.0020.0002] # CHAKMA LETTER NNAA +11116 ; [.3652.0020.0002] # CHAKMA LETTER TAA +11117 ; [.3653.0020.0002] # CHAKMA LETTER THAA +11118 ; [.3654.0020.0002] # CHAKMA LETTER DAA +11119 ; [.3655.0020.0002] # CHAKMA LETTER DHAA +1111A ; [.3656.0020.0002] # CHAKMA LETTER NAA +1111B ; [.3657.0020.0002] # CHAKMA LETTER PAA +1111C ; [.3658.0020.0002] # CHAKMA LETTER PHAA +1111D ; [.3659.0020.0002] # CHAKMA LETTER BAA +1111E ; [.365A.0020.0002] # CHAKMA LETTER BHAA +1111F ; [.365B.0020.0002] # CHAKMA LETTER MAA +11120 ; [.365C.0020.0002] # CHAKMA LETTER YYAA +11121 ; [.365D.0020.0002] # CHAKMA LETTER YAA +11122 ; [.365E.0020.0002] # CHAKMA LETTER RAA +11123 ; [.365F.0020.0002] # CHAKMA LETTER LAA +11147 ; [.3660.0020.0002] # CHAKMA LETTER VAA +11124 ; [.3661.0020.0002] # CHAKMA LETTER WAA +11125 ; [.3662.0020.0002] # CHAKMA LETTER SAA +11126 ; [.3663.0020.0002] # CHAKMA LETTER HAA +11144 ; [.3664.0020.0002] # CHAKMA LETTER LHAA +11127 ; [.3665.0020.0002] # CHAKMA VOWEL SIGN A +11128 ; [.3666.0020.0002] # CHAKMA VOWEL SIGN I +11129 ; [.3667.0020.0002] # CHAKMA VOWEL SIGN II +1112A ; [.3668.0020.0002] # CHAKMA VOWEL SIGN U +1112B ; [.3669.0020.0002] # CHAKMA VOWEL SIGN UU +1112C ; [.366A.0020.0002] # CHAKMA VOWEL SIGN E +1112D ; [.366B.0020.0002] # CHAKMA VOWEL SIGN AI +1112E ; [.366C.0020.0002] # CHAKMA VOWEL SIGN O +11131 11127 ; [.366C.0020.0002] # CHAKMA VOWEL SIGN O +1112F ; [.366D.0020.0002] # CHAKMA VOWEL SIGN AU +11132 11127 ; [.366D.0020.0002] # CHAKMA VOWEL SIGN AU +11130 ; [.366E.0020.0002] # CHAKMA VOWEL SIGN OI +11131 ; [.366F.0020.0002] # CHAKMA O MARK +11132 ; [.3670.0020.0002] # CHAKMA AU MARK +11145 ; [.3671.0020.0002] # CHAKMA VOWEL SIGN AA +11146 ; [.3672.0020.0002] # CHAKMA VOWEL SIGN EI +11133 ; [.3673.0020.0002] # CHAKMA VIRAMA +11134 ; [.3674.0020.0002] # CHAKMA MAAYYAA +1780 ; [.3675.0020.0002] # KHMER LETTER KA +1781 ; [.3676.0020.0002] # KHMER LETTER KHA +1782 ; [.3677.0020.0002] # KHMER LETTER KO +1783 ; [.3678.0020.0002] # KHMER LETTER KHO +1784 ; [.3679.0020.0002] # KHMER LETTER NGO +1785 ; [.367A.0020.0002] # KHMER LETTER CA +1786 ; [.367B.0020.0002] # KHMER LETTER CHA +1787 ; [.367C.0020.0002] # KHMER LETTER CO +1788 ; [.367D.0020.0002] # KHMER LETTER CHO +1789 ; [.367E.0020.0002] # KHMER LETTER NYO +178A ; [.367F.0020.0002] # KHMER LETTER DA +178B ; [.3680.0020.0002] # KHMER LETTER TTHA +178C ; [.3681.0020.0002] # KHMER LETTER DO +178D ; [.3682.0020.0002] # KHMER LETTER TTHO +178E ; [.3683.0020.0002] # KHMER LETTER NNO +178F ; [.3684.0020.0002] # KHMER LETTER TA +1790 ; [.3685.0020.0002] # KHMER LETTER THA +1791 ; [.3686.0020.0002] # KHMER LETTER TO +1792 ; [.3687.0020.0002] # KHMER LETTER THO +1793 ; [.3688.0020.0002] # KHMER LETTER NO +1794 ; [.3689.0020.0002] # KHMER LETTER BA +1795 ; [.368A.0020.0002] # KHMER LETTER PHA +1796 ; [.368B.0020.0002] # KHMER LETTER PO +1797 ; [.368C.0020.0002] # KHMER LETTER PHO +1798 ; [.368D.0020.0002] # KHMER LETTER MO +1799 ; [.368E.0020.0002] # KHMER LETTER YO +179A ; [.368F.0020.0002] # KHMER LETTER RO +179B ; [.3690.0020.0002] # KHMER LETTER LO +179C ; [.3691.0020.0002] # KHMER LETTER VO +179D ; [.3692.0020.0002] # KHMER LETTER SHA +179E ; [.3693.0020.0002] # KHMER LETTER SSO +179F ; [.3694.0020.0002] # KHMER LETTER SA +17A0 ; [.3695.0020.0002] # KHMER LETTER HA +17A1 ; [.3696.0020.0002] # KHMER LETTER LA +17A2 ; [.3697.0020.0002] # KHMER LETTER QA +17DC ; [.3698.0020.0002] # KHMER SIGN AVAKRAHASANYA +17A3 ; [.3699.0020.0002] # KHMER INDEPENDENT VOWEL QAQ +17A4 ; [.369A.0020.0002] # KHMER INDEPENDENT VOWEL QAA +17A5 ; [.369B.0020.0002] # KHMER INDEPENDENT VOWEL QI +17A6 ; [.369C.0020.0002] # KHMER INDEPENDENT VOWEL QII +17A7 ; [.369D.0020.0002] # KHMER INDEPENDENT VOWEL QU +17A8 ; [.369E.0020.0002] # KHMER INDEPENDENT VOWEL QUK +17A9 ; [.369F.0020.0002] # KHMER INDEPENDENT VOWEL QUU +17AA ; [.36A0.0020.0002] # KHMER INDEPENDENT VOWEL QUUV +17AB ; [.36A1.0020.0002] # KHMER INDEPENDENT VOWEL RY +17AC ; [.36A2.0020.0002] # KHMER INDEPENDENT VOWEL RYY +17AD ; [.36A3.0020.0002] # KHMER INDEPENDENT VOWEL LY +17AE ; [.36A4.0020.0002] # KHMER INDEPENDENT VOWEL LYY +17AF ; [.36A5.0020.0002] # KHMER INDEPENDENT VOWEL QE +17B0 ; [.36A6.0020.0002] # KHMER INDEPENDENT VOWEL QAI +17B1 ; [.36A7.0020.0002] # KHMER INDEPENDENT VOWEL QOO TYPE ONE +17B2 ; [.36A8.0020.0002] # KHMER INDEPENDENT VOWEL QOO TYPE TWO +17B3 ; [.36A9.0020.0002] # KHMER INDEPENDENT VOWEL QAU +17B6 ; [.36AA.0020.0002] # KHMER VOWEL SIGN AA +17B7 ; [.36AB.0020.0002] # KHMER VOWEL SIGN I +17B8 ; [.36AC.0020.0002] # KHMER VOWEL SIGN II +17B9 ; [.36AD.0020.0002] # KHMER VOWEL SIGN Y +17BA ; [.36AE.0020.0002] # KHMER VOWEL SIGN YY +17BB ; [.36AF.0020.0002] # KHMER VOWEL SIGN U +17BC ; [.36B0.0020.0002] # KHMER VOWEL SIGN UU +17BD ; [.36B1.0020.0002] # KHMER VOWEL SIGN UA +17BE ; [.36B2.0020.0002] # KHMER VOWEL SIGN OE +17BF ; [.36B3.0020.0002] # KHMER VOWEL SIGN YA +17C0 ; [.36B4.0020.0002] # KHMER VOWEL SIGN IE +17C1 ; [.36B5.0020.0002] # KHMER VOWEL SIGN E +17C2 ; [.36B6.0020.0002] # KHMER VOWEL SIGN AE +17C3 ; [.36B7.0020.0002] # KHMER VOWEL SIGN AI +17C4 ; [.36B8.0020.0002] # KHMER VOWEL SIGN OO +17C5 ; [.36B9.0020.0002] # KHMER VOWEL SIGN AU +17D2 ; [.36BA.0020.0002] # KHMER SIGN COENG +1950 ; [.36BB.0020.0002] # TAI LE LETTER KA +1951 ; [.36BC.0020.0002] # TAI LE LETTER XA +1952 ; [.36BD.0020.0002] # TAI LE LETTER NGA +1953 ; [.36BE.0020.0002] # TAI LE LETTER TSA +1954 ; [.36BF.0020.0002] # TAI LE LETTER SA +1955 ; [.36C0.0020.0002] # TAI LE LETTER YA +1956 ; [.36C1.0020.0002] # TAI LE LETTER TA +1957 ; [.36C2.0020.0002] # TAI LE LETTER THA +1958 ; [.36C3.0020.0002] # TAI LE LETTER LA +1959 ; [.36C4.0020.0002] # TAI LE LETTER PA +195A ; [.36C5.0020.0002] # TAI LE LETTER PHA +195B ; [.36C6.0020.0002] # TAI LE LETTER MA +195C ; [.36C7.0020.0002] # TAI LE LETTER FA +195D ; [.36C8.0020.0002] # TAI LE LETTER VA +195E ; [.36C9.0020.0002] # TAI LE LETTER HA +195F ; [.36CA.0020.0002] # TAI LE LETTER QA +1960 ; [.36CB.0020.0002] # TAI LE LETTER KHA +1961 ; [.36CC.0020.0002] # TAI LE LETTER TSHA +1962 ; [.36CD.0020.0002] # TAI LE LETTER NA +1963 ; [.36CE.0020.0002] # TAI LE LETTER A +1964 ; [.36CF.0020.0002] # TAI LE LETTER I +1965 ; [.36D0.0020.0002] # TAI LE LETTER EE +1966 ; [.36D1.0020.0002] # TAI LE LETTER EH +1967 ; [.36D2.0020.0002] # TAI LE LETTER U +1968 ; [.36D3.0020.0002] # TAI LE LETTER OO +1969 ; [.36D4.0020.0002] # TAI LE LETTER O +196A ; [.36D5.0020.0002] # TAI LE LETTER UE +196B ; [.36D6.0020.0002] # TAI LE LETTER E +196C ; [.36D7.0020.0002] # TAI LE LETTER AUE +196D ; [.36D8.0020.0002] # TAI LE LETTER AI +1970 ; [.36D9.0020.0002] # TAI LE LETTER TONE-2 +1971 ; [.36DA.0020.0002] # TAI LE LETTER TONE-3 +1972 ; [.36DB.0020.0002] # TAI LE LETTER TONE-4 +1973 ; [.36DC.0020.0002] # TAI LE LETTER TONE-5 +1974 ; [.36DD.0020.0002] # TAI LE LETTER TONE-6 +1980 ; [.36DE.0020.0002] # NEW TAI LUE LETTER HIGH QA +19B5 1980 ; [.36DE.0020.0002][.370F.0020.0002] # +19B6 1980 ; [.36DE.0020.0002][.3710.0020.0002] # +19B7 1980 ; [.36DE.0020.0002][.3711.0020.0002] # +19BA 1980 ; [.36DE.0020.0002][.3714.0020.0002] # +1981 ; [.36DF.0020.0002] # NEW TAI LUE LETTER LOW QA +19B5 1981 ; [.36DF.0020.0002][.370F.0020.0002] # +19B6 1981 ; [.36DF.0020.0002][.3710.0020.0002] # +19B7 1981 ; [.36DF.0020.0002][.3711.0020.0002] # +19BA 1981 ; [.36DF.0020.0002][.3714.0020.0002] # +1982 ; [.36E0.0020.0002] # NEW TAI LUE LETTER HIGH KA +19B5 1982 ; [.36E0.0020.0002][.370F.0020.0002] # +19B6 1982 ; [.36E0.0020.0002][.3710.0020.0002] # +19B7 1982 ; [.36E0.0020.0002][.3711.0020.0002] # +19BA 1982 ; [.36E0.0020.0002][.3714.0020.0002] # +1983 ; [.36E1.0020.0002] # NEW TAI LUE LETTER HIGH XA +19B5 1983 ; [.36E1.0020.0002][.370F.0020.0002] # +19B6 1983 ; [.36E1.0020.0002][.3710.0020.0002] # +19B7 1983 ; [.36E1.0020.0002][.3711.0020.0002] # +19BA 1983 ; [.36E1.0020.0002][.3714.0020.0002] # +1984 ; [.36E2.0020.0002] # NEW TAI LUE LETTER HIGH NGA +19B5 1984 ; [.36E2.0020.0002][.370F.0020.0002] # +19B6 1984 ; [.36E2.0020.0002][.3710.0020.0002] # +19B7 1984 ; [.36E2.0020.0002][.3711.0020.0002] # +19BA 1984 ; [.36E2.0020.0002][.3714.0020.0002] # +1985 ; [.36E3.0020.0002] # NEW TAI LUE LETTER LOW KA +19B5 1985 ; [.36E3.0020.0002][.370F.0020.0002] # +19B6 1985 ; [.36E3.0020.0002][.3710.0020.0002] # +19B7 1985 ; [.36E3.0020.0002][.3711.0020.0002] # +19BA 1985 ; [.36E3.0020.0002][.3714.0020.0002] # +1986 ; [.36E4.0020.0002] # NEW TAI LUE LETTER LOW XA +19B5 1986 ; [.36E4.0020.0002][.370F.0020.0002] # +19B6 1986 ; [.36E4.0020.0002][.3710.0020.0002] # +19B7 1986 ; [.36E4.0020.0002][.3711.0020.0002] # +19BA 1986 ; [.36E4.0020.0002][.3714.0020.0002] # +1987 ; [.36E5.0020.0002] # NEW TAI LUE LETTER LOW NGA +19B5 1987 ; [.36E5.0020.0002][.370F.0020.0002] # +19B6 1987 ; [.36E5.0020.0002][.3710.0020.0002] # +19B7 1987 ; [.36E5.0020.0002][.3711.0020.0002] # +19BA 1987 ; [.36E5.0020.0002][.3714.0020.0002] # +1988 ; [.36E6.0020.0002] # NEW TAI LUE LETTER HIGH TSA +19B5 1988 ; [.36E6.0020.0002][.370F.0020.0002] # +19B6 1988 ; [.36E6.0020.0002][.3710.0020.0002] # +19B7 1988 ; [.36E6.0020.0002][.3711.0020.0002] # +19BA 1988 ; [.36E6.0020.0002][.3714.0020.0002] # +1989 ; [.36E7.0020.0002] # NEW TAI LUE LETTER HIGH SA +19B5 1989 ; [.36E7.0020.0002][.370F.0020.0002] # +19B6 1989 ; [.36E7.0020.0002][.3710.0020.0002] # +19B7 1989 ; [.36E7.0020.0002][.3711.0020.0002] # +19BA 1989 ; [.36E7.0020.0002][.3714.0020.0002] # +198A ; [.36E8.0020.0002] # NEW TAI LUE LETTER HIGH YA +19B5 198A ; [.36E8.0020.0002][.370F.0020.0002] # +19B6 198A ; [.36E8.0020.0002][.3710.0020.0002] # +19B7 198A ; [.36E8.0020.0002][.3711.0020.0002] # +19BA 198A ; [.36E8.0020.0002][.3714.0020.0002] # +198B ; [.36E9.0020.0002] # NEW TAI LUE LETTER LOW TSA +19B5 198B ; [.36E9.0020.0002][.370F.0020.0002] # +19B6 198B ; [.36E9.0020.0002][.3710.0020.0002] # +19B7 198B ; [.36E9.0020.0002][.3711.0020.0002] # +19BA 198B ; [.36E9.0020.0002][.3714.0020.0002] # +198C ; [.36EA.0020.0002] # NEW TAI LUE LETTER LOW SA +19B5 198C ; [.36EA.0020.0002][.370F.0020.0002] # +19B6 198C ; [.36EA.0020.0002][.3710.0020.0002] # +19B7 198C ; [.36EA.0020.0002][.3711.0020.0002] # +19BA 198C ; [.36EA.0020.0002][.3714.0020.0002] # +198D ; [.36EB.0020.0002] # NEW TAI LUE LETTER LOW YA +19B5 198D ; [.36EB.0020.0002][.370F.0020.0002] # +19B6 198D ; [.36EB.0020.0002][.3710.0020.0002] # +19B7 198D ; [.36EB.0020.0002][.3711.0020.0002] # +19BA 198D ; [.36EB.0020.0002][.3714.0020.0002] # +198E ; [.36EC.0020.0002] # NEW TAI LUE LETTER HIGH TA +19B5 198E ; [.36EC.0020.0002][.370F.0020.0002] # +19B6 198E ; [.36EC.0020.0002][.3710.0020.0002] # +19B7 198E ; [.36EC.0020.0002][.3711.0020.0002] # +19BA 198E ; [.36EC.0020.0002][.3714.0020.0002] # +198F ; [.36ED.0020.0002] # NEW TAI LUE LETTER HIGH THA +19B5 198F ; [.36ED.0020.0002][.370F.0020.0002] # +19B6 198F ; [.36ED.0020.0002][.3710.0020.0002] # +19B7 198F ; [.36ED.0020.0002][.3711.0020.0002] # +19BA 198F ; [.36ED.0020.0002][.3714.0020.0002] # +1990 ; [.36EE.0020.0002] # NEW TAI LUE LETTER HIGH NA +19B5 1990 ; [.36EE.0020.0002][.370F.0020.0002] # +19B6 1990 ; [.36EE.0020.0002][.3710.0020.0002] # +19B7 1990 ; [.36EE.0020.0002][.3711.0020.0002] # +19BA 1990 ; [.36EE.0020.0002][.3714.0020.0002] # +1991 ; [.36EF.0020.0002] # NEW TAI LUE LETTER LOW TA +19B5 1991 ; [.36EF.0020.0002][.370F.0020.0002] # +19B6 1991 ; [.36EF.0020.0002][.3710.0020.0002] # +19B7 1991 ; [.36EF.0020.0002][.3711.0020.0002] # +19BA 1991 ; [.36EF.0020.0002][.3714.0020.0002] # +1992 ; [.36F0.0020.0002] # NEW TAI LUE LETTER LOW THA +19B5 1992 ; [.36F0.0020.0002][.370F.0020.0002] # +19B6 1992 ; [.36F0.0020.0002][.3710.0020.0002] # +19B7 1992 ; [.36F0.0020.0002][.3711.0020.0002] # +19BA 1992 ; [.36F0.0020.0002][.3714.0020.0002] # +1993 ; [.36F1.0020.0002] # NEW TAI LUE LETTER LOW NA +19B5 1993 ; [.36F1.0020.0002][.370F.0020.0002] # +19B6 1993 ; [.36F1.0020.0002][.3710.0020.0002] # +19B7 1993 ; [.36F1.0020.0002][.3711.0020.0002] # +19BA 1993 ; [.36F1.0020.0002][.3714.0020.0002] # +1994 ; [.36F2.0020.0002] # NEW TAI LUE LETTER HIGH PA +19B5 1994 ; [.36F2.0020.0002][.370F.0020.0002] # +19B6 1994 ; [.36F2.0020.0002][.3710.0020.0002] # +19B7 1994 ; [.36F2.0020.0002][.3711.0020.0002] # +19BA 1994 ; [.36F2.0020.0002][.3714.0020.0002] # +1995 ; [.36F3.0020.0002] # NEW TAI LUE LETTER HIGH PHA +19B5 1995 ; [.36F3.0020.0002][.370F.0020.0002] # +19B6 1995 ; [.36F3.0020.0002][.3710.0020.0002] # +19B7 1995 ; [.36F3.0020.0002][.3711.0020.0002] # +19BA 1995 ; [.36F3.0020.0002][.3714.0020.0002] # +1996 ; [.36F4.0020.0002] # NEW TAI LUE LETTER HIGH MA +19B5 1996 ; [.36F4.0020.0002][.370F.0020.0002] # +19B6 1996 ; [.36F4.0020.0002][.3710.0020.0002] # +19B7 1996 ; [.36F4.0020.0002][.3711.0020.0002] # +19BA 1996 ; [.36F4.0020.0002][.3714.0020.0002] # +1997 ; [.36F5.0020.0002] # NEW TAI LUE LETTER LOW PA +19B5 1997 ; [.36F5.0020.0002][.370F.0020.0002] # +19B6 1997 ; [.36F5.0020.0002][.3710.0020.0002] # +19B7 1997 ; [.36F5.0020.0002][.3711.0020.0002] # +19BA 1997 ; [.36F5.0020.0002][.3714.0020.0002] # +1998 ; [.36F6.0020.0002] # NEW TAI LUE LETTER LOW PHA +19B5 1998 ; [.36F6.0020.0002][.370F.0020.0002] # +19B6 1998 ; [.36F6.0020.0002][.3710.0020.0002] # +19B7 1998 ; [.36F6.0020.0002][.3711.0020.0002] # +19BA 1998 ; [.36F6.0020.0002][.3714.0020.0002] # +1999 ; [.36F7.0020.0002] # NEW TAI LUE LETTER LOW MA +19B5 1999 ; [.36F7.0020.0002][.370F.0020.0002] # +19B6 1999 ; [.36F7.0020.0002][.3710.0020.0002] # +19B7 1999 ; [.36F7.0020.0002][.3711.0020.0002] # +19BA 1999 ; [.36F7.0020.0002][.3714.0020.0002] # +199A ; [.36F8.0020.0002] # NEW TAI LUE LETTER HIGH FA +19B5 199A ; [.36F8.0020.0002][.370F.0020.0002] # +19B6 199A ; [.36F8.0020.0002][.3710.0020.0002] # +19B7 199A ; [.36F8.0020.0002][.3711.0020.0002] # +19BA 199A ; [.36F8.0020.0002][.3714.0020.0002] # +199B ; [.36F9.0020.0002] # NEW TAI LUE LETTER HIGH VA +19B5 199B ; [.36F9.0020.0002][.370F.0020.0002] # +19B6 199B ; [.36F9.0020.0002][.3710.0020.0002] # +19B7 199B ; [.36F9.0020.0002][.3711.0020.0002] # +19BA 199B ; [.36F9.0020.0002][.3714.0020.0002] # +199C ; [.36FA.0020.0002] # NEW TAI LUE LETTER HIGH LA +19B5 199C ; [.36FA.0020.0002][.370F.0020.0002] # +19B6 199C ; [.36FA.0020.0002][.3710.0020.0002] # +19DE ; [.36FA.0020.0004][.3710.0020.0004] # NEW TAI LUE SIGN LAE +19DF ; [.36FA.0020.0004][.3710.0020.0004][.371B.0020.0004] # NEW TAI LUE SIGN LAEV +19B7 199C ; [.36FA.0020.0002][.3711.0020.0002] # +19BA 199C ; [.36FA.0020.0002][.3714.0020.0002] # +199D ; [.36FB.0020.0002] # NEW TAI LUE LETTER LOW FA +19B5 199D ; [.36FB.0020.0002][.370F.0020.0002] # +19B6 199D ; [.36FB.0020.0002][.3710.0020.0002] # +19B7 199D ; [.36FB.0020.0002][.3711.0020.0002] # +19BA 199D ; [.36FB.0020.0002][.3714.0020.0002] # +199E ; [.36FC.0020.0002] # NEW TAI LUE LETTER LOW VA +19B5 199E ; [.36FC.0020.0002][.370F.0020.0002] # +19B6 199E ; [.36FC.0020.0002][.3710.0020.0002] # +19B7 199E ; [.36FC.0020.0002][.3711.0020.0002] # +19BA 199E ; [.36FC.0020.0002][.3714.0020.0002] # +199F ; [.36FD.0020.0002] # NEW TAI LUE LETTER LOW LA +19B5 199F ; [.36FD.0020.0002][.370F.0020.0002] # +19B6 199F ; [.36FD.0020.0002][.3710.0020.0002] # +19B7 199F ; [.36FD.0020.0002][.3711.0020.0002] # +19BA 199F ; [.36FD.0020.0002][.3714.0020.0002] # +19A0 ; [.36FE.0020.0002] # NEW TAI LUE LETTER HIGH HA +19B5 19A0 ; [.36FE.0020.0002][.370F.0020.0002] # +19B6 19A0 ; [.36FE.0020.0002][.3710.0020.0002] # +19B7 19A0 ; [.36FE.0020.0002][.3711.0020.0002] # +19BA 19A0 ; [.36FE.0020.0002][.3714.0020.0002] # +19A1 ; [.36FF.0020.0002] # NEW TAI LUE LETTER HIGH DA +19B5 19A1 ; [.36FF.0020.0002][.370F.0020.0002] # +19B6 19A1 ; [.36FF.0020.0002][.3710.0020.0002] # +19B7 19A1 ; [.36FF.0020.0002][.3711.0020.0002] # +19BA 19A1 ; [.36FF.0020.0002][.3714.0020.0002] # +19A2 ; [.3700.0020.0002] # NEW TAI LUE LETTER HIGH BA +19B5 19A2 ; [.3700.0020.0002][.370F.0020.0002] # +19B6 19A2 ; [.3700.0020.0002][.3710.0020.0002] # +19B7 19A2 ; [.3700.0020.0002][.3711.0020.0002] # +19BA 19A2 ; [.3700.0020.0002][.3714.0020.0002] # +19A3 ; [.3701.0020.0002] # NEW TAI LUE LETTER LOW HA +19B5 19A3 ; [.3701.0020.0002][.370F.0020.0002] # +19B6 19A3 ; [.3701.0020.0002][.3710.0020.0002] # +19B7 19A3 ; [.3701.0020.0002][.3711.0020.0002] # +19BA 19A3 ; [.3701.0020.0002][.3714.0020.0002] # +19A4 ; [.3702.0020.0002] # NEW TAI LUE LETTER LOW DA +19B5 19A4 ; [.3702.0020.0002][.370F.0020.0002] # +19B6 19A4 ; [.3702.0020.0002][.3710.0020.0002] # +19B7 19A4 ; [.3702.0020.0002][.3711.0020.0002] # +19BA 19A4 ; [.3702.0020.0002][.3714.0020.0002] # +19A5 ; [.3703.0020.0002] # NEW TAI LUE LETTER LOW BA +19B5 19A5 ; [.3703.0020.0002][.370F.0020.0002] # +19B6 19A5 ; [.3703.0020.0002][.3710.0020.0002] # +19B7 19A5 ; [.3703.0020.0002][.3711.0020.0002] # +19BA 19A5 ; [.3703.0020.0002][.3714.0020.0002] # +19A6 ; [.3704.0020.0002] # NEW TAI LUE LETTER HIGH KVA +19B5 19A6 ; [.3704.0020.0002][.370F.0020.0002] # +19B6 19A6 ; [.3704.0020.0002][.3710.0020.0002] # +19B7 19A6 ; [.3704.0020.0002][.3711.0020.0002] # +19BA 19A6 ; [.3704.0020.0002][.3714.0020.0002] # +19A7 ; [.3705.0020.0002] # NEW TAI LUE LETTER HIGH XVA +19B5 19A7 ; [.3705.0020.0002][.370F.0020.0002] # +19B6 19A7 ; [.3705.0020.0002][.3710.0020.0002] # +19B7 19A7 ; [.3705.0020.0002][.3711.0020.0002] # +19BA 19A7 ; [.3705.0020.0002][.3714.0020.0002] # +19A8 ; [.3706.0020.0002] # NEW TAI LUE LETTER LOW KVA +19B5 19A8 ; [.3706.0020.0002][.370F.0020.0002] # +19B6 19A8 ; [.3706.0020.0002][.3710.0020.0002] # +19B7 19A8 ; [.3706.0020.0002][.3711.0020.0002] # +19BA 19A8 ; [.3706.0020.0002][.3714.0020.0002] # +19A9 ; [.3707.0020.0002] # NEW TAI LUE LETTER LOW XVA +19B5 19A9 ; [.3707.0020.0002][.370F.0020.0002] # +19B6 19A9 ; [.3707.0020.0002][.3710.0020.0002] # +19B7 19A9 ; [.3707.0020.0002][.3711.0020.0002] # +19BA 19A9 ; [.3707.0020.0002][.3714.0020.0002] # +19AA ; [.3708.0020.0002] # NEW TAI LUE LETTER HIGH SUA +19B5 19AA ; [.3708.0020.0002][.370F.0020.0002] # +19B6 19AA ; [.3708.0020.0002][.3710.0020.0002] # +19B7 19AA ; [.3708.0020.0002][.3711.0020.0002] # +19BA 19AA ; [.3708.0020.0002][.3714.0020.0002] # +19AB ; [.3709.0020.0002] # NEW TAI LUE LETTER LOW SUA +19B5 19AB ; [.3709.0020.0002][.370F.0020.0002] # +19B6 19AB ; [.3709.0020.0002][.3710.0020.0002] # +19B7 19AB ; [.3709.0020.0002][.3711.0020.0002] # +19BA 19AB ; [.3709.0020.0002][.3714.0020.0002] # +19B0 ; [.370A.0020.0002] # NEW TAI LUE VOWEL SIGN VOWEL SHORTENER +19B1 ; [.370B.0020.0002] # NEW TAI LUE VOWEL SIGN AA +19B2 ; [.370C.0020.0002] # NEW TAI LUE VOWEL SIGN II +19B3 ; [.370D.0020.0002] # NEW TAI LUE VOWEL SIGN U +19B4 ; [.370E.0020.0002] # NEW TAI LUE VOWEL SIGN UU +19B5 ; [.370F.0020.0002] # NEW TAI LUE VOWEL SIGN E +19B6 ; [.3710.0020.0002] # NEW TAI LUE VOWEL SIGN AE +19B7 ; [.3711.0020.0002] # NEW TAI LUE VOWEL SIGN O +19B8 ; [.3712.0020.0002] # NEW TAI LUE VOWEL SIGN OA +19B9 ; [.3713.0020.0002] # NEW TAI LUE VOWEL SIGN UE +19BA ; [.3714.0020.0002] # NEW TAI LUE VOWEL SIGN AY +19BB ; [.3715.0020.0002] # NEW TAI LUE VOWEL SIGN AAY +19BC ; [.3716.0020.0002] # NEW TAI LUE VOWEL SIGN UY +19BD ; [.3717.0020.0002] # NEW TAI LUE VOWEL SIGN OY +19BE ; [.3718.0020.0002] # NEW TAI LUE VOWEL SIGN OAY +19BF ; [.3719.0020.0002] # NEW TAI LUE VOWEL SIGN UEY +19C0 ; [.371A.0020.0002] # NEW TAI LUE VOWEL SIGN IY +19C1 ; [.371B.0020.0002] # NEW TAI LUE LETTER FINAL V +19C2 ; [.371C.0020.0002] # NEW TAI LUE LETTER FINAL NG +19C3 ; [.371D.0020.0002] # NEW TAI LUE LETTER FINAL N +19C4 ; [.371E.0020.0002] # NEW TAI LUE LETTER FINAL M +19C5 ; [.371F.0020.0002] # NEW TAI LUE LETTER FINAL K +19C6 ; [.3720.0020.0002] # NEW TAI LUE LETTER FINAL D +19C7 ; [.3721.0020.0002] # NEW TAI LUE LETTER FINAL B +19C8 ; [.3722.0020.0002] # NEW TAI LUE TONE MARK-1 +19C9 ; [.3723.0020.0002] # NEW TAI LUE TONE MARK-2 +1A20 ; [.3724.0020.0002] # TAI THAM LETTER HIGH KA +1A21 ; [.3725.0020.0002] # TAI THAM LETTER HIGH KHA +1A22 ; [.3726.0020.0002] # TAI THAM LETTER HIGH KXA +1A23 ; [.3727.0020.0002] # TAI THAM LETTER LOW KA +1A24 ; [.3728.0020.0002] # TAI THAM LETTER LOW KXA +1A25 ; [.3729.0020.0002] # TAI THAM LETTER LOW KHA +1A26 ; [.372A.0020.0002] # TAI THAM LETTER NGA +1A58 ; [.372A.0020.0004] # TAI THAM SIGN MAI KANG LAI +1A59 ; [.372A.0020.0004] # TAI THAM CONSONANT SIGN FINAL NGA +1A27 ; [.372B.0020.0002] # TAI THAM LETTER HIGH CA +1A28 ; [.372C.0020.0002] # TAI THAM LETTER HIGH CHA +1A29 ; [.372D.0020.0002] # TAI THAM LETTER LOW CA +1A2A ; [.372E.0020.0002] # TAI THAM LETTER LOW SA +1A2B ; [.372F.0020.0002] # TAI THAM LETTER LOW CHA +1A2C ; [.3730.0020.0002] # TAI THAM LETTER NYA +1A2D ; [.3731.0020.0002] # TAI THAM LETTER RATA +1A2E ; [.3732.0020.0002] # TAI THAM LETTER HIGH RATHA +1A2F ; [.3733.0020.0002] # TAI THAM LETTER DA +1A30 ; [.3734.0020.0002] # TAI THAM LETTER LOW RATHA +1A31 ; [.3735.0020.0002] # TAI THAM LETTER RANA +1A32 ; [.3736.0020.0002] # TAI THAM LETTER HIGH TA +1A33 ; [.3737.0020.0002] # TAI THAM LETTER HIGH THA +1A34 ; [.3738.0020.0002] # TAI THAM LETTER LOW TA +1A35 ; [.3739.0020.0002] # TAI THAM LETTER LOW THA +1A36 ; [.373A.0020.0002] # TAI THAM LETTER NA +1A37 ; [.373B.0020.0002] # TAI THAM LETTER BA +1A38 ; [.373C.0020.0002] # TAI THAM LETTER HIGH PA +1A39 ; [.373D.0020.0002] # TAI THAM LETTER HIGH PHA +1A3A ; [.373E.0020.0002] # TAI THAM LETTER HIGH FA +1A3B ; [.373F.0020.0002] # TAI THAM LETTER LOW PA +1A5A ; [.373F.0020.0004] # TAI THAM CONSONANT SIGN LOW PA +1A5B ; [.373F.0020.0004] # TAI THAM CONSONANT SIGN HIGH RATHA OR LOW PA +1A3C ; [.3740.0020.0002] # TAI THAM LETTER LOW FA +1A3D ; [.3741.0020.0002] # TAI THAM LETTER LOW PHA +1A3E ; [.3742.0020.0002] # TAI THAM LETTER MA +1A3F ; [.3743.0020.0002] # TAI THAM LETTER LOW YA +1A40 ; [.3744.0020.0002] # TAI THAM LETTER HIGH YA +1A41 ; [.3745.0020.0002] # TAI THAM LETTER RA +1A42 ; [.3746.0020.0002] # TAI THAM LETTER RUE +1A43 ; [.3747.0020.0002] # TAI THAM LETTER LA +1A44 ; [.3748.0020.0002] # TAI THAM LETTER LUE +1A45 ; [.3749.0020.0002] # TAI THAM LETTER WA +1A46 ; [.374A.0020.0002] # TAI THAM LETTER HIGH SHA +1A54 ; [.374A.0020.0004][.3770.0020.0004][.374A.0020.0004] # TAI THAM LETTER GREAT SA +1A47 ; [.374B.0020.0002] # TAI THAM LETTER HIGH SSA +1A48 ; [.374C.0020.0002] # TAI THAM LETTER HIGH SA +1A49 ; [.374D.0020.0002] # TAI THAM LETTER HIGH HA +1A4A ; [.374E.0020.0002] # TAI THAM LETTER LLA +1A4B ; [.374F.0020.0002] # TAI THAM LETTER A +1A4C ; [.3750.0020.0002] # TAI THAM LETTER LOW HA +1A53 ; [.3751.0020.0002] # TAI THAM LETTER LAE +1A6B ; [.3752.0020.0002] # TAI THAM VOWEL SIGN O +1A55 ; [.3753.0020.0002] # TAI THAM CONSONANT SIGN MEDIAL RA +1A56 ; [.3754.0020.0002] # TAI THAM CONSONANT SIGN MEDIAL LA +1A57 ; [.3755.0020.0002] # TAI THAM CONSONANT SIGN LA TANG LAI +1A5C ; [.3756.0020.0002] # TAI THAM CONSONANT SIGN MA +1A5D ; [.3757.0020.0002] # TAI THAM CONSONANT SIGN BA +1A5E ; [.3758.0020.0002] # TAI THAM CONSONANT SIGN SA +1A4D ; [.3759.0020.0002] # TAI THAM LETTER I +1A4E ; [.375A.0020.0002] # TAI THAM LETTER II +1A4F ; [.375B.0020.0002] # TAI THAM LETTER U +1A50 ; [.375C.0020.0002] # TAI THAM LETTER UU +1A51 ; [.375D.0020.0002] # TAI THAM LETTER EE +1A52 ; [.375E.0020.0002] # TAI THAM LETTER OO +1A61 ; [.375F.0020.0002] # TAI THAM VOWEL SIGN A +1A6C ; [.3760.0020.0002] # TAI THAM VOWEL SIGN OA BELOW +1A62 ; [.3761.0020.0002] # TAI THAM VOWEL SIGN MAI SAT +1A63 ; [.3762.0020.0002] # TAI THAM VOWEL SIGN AA +1A64 ; [.3762.0020.0004] # TAI THAM VOWEL SIGN TALL AA +1A65 ; [.3763.0020.0002] # TAI THAM VOWEL SIGN I +1A66 ; [.3764.0020.0002] # TAI THAM VOWEL SIGN II +1A67 ; [.3765.0020.0002] # TAI THAM VOWEL SIGN UE +1A68 ; [.3766.0020.0002] # TAI THAM VOWEL SIGN UUE +1A69 ; [.3767.0020.0002] # TAI THAM VOWEL SIGN U +1A6A ; [.3768.0020.0002] # TAI THAM VOWEL SIGN UU +1A6E ; [.3769.0020.0002] # TAI THAM VOWEL SIGN E +1A6F ; [.376A.0020.0002] # TAI THAM VOWEL SIGN AE +1A73 ; [.376B.0020.0002] # TAI THAM VOWEL SIGN OA ABOVE +1A70 ; [.376C.0020.0002] # TAI THAM VOWEL SIGN OO +1A71 ; [.376D.0020.0002] # TAI THAM VOWEL SIGN AI +1A72 ; [.376E.0020.0002] # TAI THAM VOWEL SIGN THAM AI +1A6D ; [.376F.0020.0002] # TAI THAM VOWEL SIGN OY +1A60 ; [.3770.0020.0002] # TAI THAM SIGN SAKOT +AA00 ; [.3771.0020.0002] # CHAM LETTER A +AA01 ; [.3772.0020.0002] # CHAM LETTER I +AA02 ; [.3773.0020.0002] # CHAM LETTER U +AA03 ; [.3774.0020.0002] # CHAM LETTER E +AA04 ; [.3775.0020.0002] # CHAM LETTER AI +AA05 ; [.3776.0020.0002] # CHAM LETTER O +AA06 ; [.3777.0020.0002] # CHAM LETTER KA +AA07 ; [.3778.0020.0002] # CHAM LETTER KHA +AA08 ; [.3779.0020.0002] # CHAM LETTER GA +AA09 ; [.377A.0020.0002] # CHAM LETTER GHA +AA0A ; [.377B.0020.0002] # CHAM LETTER NGUE +AA0B ; [.377C.0020.0002] # CHAM LETTER NGA +AA0C ; [.377D.0020.0002] # CHAM LETTER CHA +AA0D ; [.377E.0020.0002] # CHAM LETTER CHHA +AA0E ; [.377F.0020.0002] # CHAM LETTER JA +AA0F ; [.3780.0020.0002] # CHAM LETTER JHA +AA10 ; [.3781.0020.0002] # CHAM LETTER NHUE +AA11 ; [.3782.0020.0002] # CHAM LETTER NHA +AA12 ; [.3783.0020.0002] # CHAM LETTER NHJA +AA13 ; [.3784.0020.0002] # CHAM LETTER TA +AA14 ; [.3785.0020.0002] # CHAM LETTER THA +AA15 ; [.3786.0020.0002] # CHAM LETTER DA +AA16 ; [.3787.0020.0002] # CHAM LETTER DHA +AA17 ; [.3788.0020.0002] # CHAM LETTER NUE +AA18 ; [.3789.0020.0002] # CHAM LETTER NA +AA19 ; [.378A.0020.0002] # CHAM LETTER DDA +AA1A ; [.378B.0020.0002] # CHAM LETTER PA +AA1B ; [.378C.0020.0002] # CHAM LETTER PPA +AA1C ; [.378D.0020.0002] # CHAM LETTER PHA +AA1D ; [.378E.0020.0002] # CHAM LETTER BA +AA1E ; [.378F.0020.0002] # CHAM LETTER BHA +AA1F ; [.3790.0020.0002] # CHAM LETTER MUE +AA20 ; [.3791.0020.0002] # CHAM LETTER MA +AA21 ; [.3792.0020.0002] # CHAM LETTER BBA +AA22 ; [.3793.0020.0002] # CHAM LETTER YA +AA23 ; [.3794.0020.0002] # CHAM LETTER RA +AA24 ; [.3795.0020.0002] # CHAM LETTER LA +AA25 ; [.3796.0020.0002] # CHAM LETTER VA +AA26 ; [.3797.0020.0002] # CHAM LETTER SSA +AA27 ; [.3798.0020.0002] # CHAM LETTER SA +AA28 ; [.3799.0020.0002] # CHAM LETTER HA +AA33 ; [.379A.0020.0002] # CHAM CONSONANT SIGN YA +AA34 ; [.379B.0020.0002] # CHAM CONSONANT SIGN RA +AA35 ; [.379C.0020.0002] # CHAM CONSONANT SIGN LA +AA36 ; [.379D.0020.0002] # CHAM CONSONANT SIGN WA +AA29 ; [.379E.0020.0002] # CHAM VOWEL SIGN AA +AA2A ; [.379F.0020.0002] # CHAM VOWEL SIGN I +AA2B ; [.37A0.0020.0002] # CHAM VOWEL SIGN II +AA2C ; [.37A1.0020.0002] # CHAM VOWEL SIGN EI +AA2D ; [.37A2.0020.0002] # CHAM VOWEL SIGN U +AA2E ; [.37A3.0020.0002] # CHAM VOWEL SIGN OE +AA2F ; [.37A4.0020.0002] # CHAM VOWEL SIGN O +AA30 ; [.37A5.0020.0002] # CHAM VOWEL SIGN AI +AA31 ; [.37A6.0020.0002] # CHAM VOWEL SIGN AU +AA32 ; [.37A7.0020.0002] # CHAM VOWEL SIGN UE +AA40 ; [.37A8.0020.0002] # CHAM LETTER FINAL K +AA41 ; [.37A9.0020.0002] # CHAM LETTER FINAL G +AA42 ; [.37AA.0020.0002] # CHAM LETTER FINAL NG +AA43 ; [.37AB.0020.0002] # CHAM CONSONANT SIGN FINAL NG +AA44 ; [.37AC.0020.0002] # CHAM LETTER FINAL CH +AA45 ; [.37AD.0020.0002] # CHAM LETTER FINAL T +AA46 ; [.37AE.0020.0002] # CHAM LETTER FINAL N +AA47 ; [.37AF.0020.0002] # CHAM LETTER FINAL P +AA48 ; [.37B0.0020.0002] # CHAM LETTER FINAL Y +AA49 ; [.37B1.0020.0002] # CHAM LETTER FINAL R +AA4A ; [.37B2.0020.0002] # CHAM LETTER FINAL L +AA4B ; [.37B3.0020.0002] # CHAM LETTER FINAL SS +AA4C ; [.37B4.0020.0002] # CHAM CONSONANT SIGN FINAL M +AA4D ; [.37B5.0020.0002] # CHAM CONSONANT SIGN FINAL H +1B05 ; [.37B6.0020.0002] # BALINESE LETTER AKARA +1B06 ; [.37B7.0020.0002] # BALINESE LETTER AKARA TEDUNG +1B05 1B35 ; [.37B7.0020.0002] # BALINESE LETTER AKARA TEDUNG +1B07 ; [.37B8.0020.0002] # BALINESE LETTER IKARA +1B08 ; [.37B9.0020.0002] # BALINESE LETTER IKARA TEDUNG +1B07 1B35 ; [.37B9.0020.0002] # BALINESE LETTER IKARA TEDUNG +1B09 ; [.37BA.0020.0002] # BALINESE LETTER UKARA +1B0A ; [.37BB.0020.0002] # BALINESE LETTER UKARA TEDUNG +1B09 1B35 ; [.37BB.0020.0002] # BALINESE LETTER UKARA TEDUNG +1B0B ; [.37BC.0020.0002] # BALINESE LETTER RA REPA +1B0C ; [.37BD.0020.0002] # BALINESE LETTER RA REPA TEDUNG +1B0B 1B35 ; [.37BD.0020.0002] # BALINESE LETTER RA REPA TEDUNG +1B0D ; [.37BE.0020.0002] # BALINESE LETTER LA LENGA +1B0E ; [.37BF.0020.0002] # BALINESE LETTER LA LENGA TEDUNG +1B0D 1B35 ; [.37BF.0020.0002] # BALINESE LETTER LA LENGA TEDUNG +1B0F ; [.37C0.0020.0002] # BALINESE LETTER EKARA +1B10 ; [.37C1.0020.0002] # BALINESE LETTER AIKARA +1B11 ; [.37C2.0020.0002] # BALINESE LETTER OKARA +1B12 ; [.37C3.0020.0002] # BALINESE LETTER OKARA TEDUNG +1B11 1B35 ; [.37C3.0020.0002] # BALINESE LETTER OKARA TEDUNG +1B13 ; [.37C4.0020.0002] # BALINESE LETTER KA +1B45 ; [.37C5.0020.0002] # BALINESE LETTER KAF SASAK +1B46 ; [.37C6.0020.0002] # BALINESE LETTER KHOT SASAK +1B14 ; [.37C7.0020.0002] # BALINESE LETTER KA MAHAPRANA +1B15 ; [.37C8.0020.0002] # BALINESE LETTER GA +1B16 ; [.37C9.0020.0002] # BALINESE LETTER GA GORA +1B17 ; [.37CA.0020.0002] # BALINESE LETTER NGA +1B18 ; [.37CB.0020.0002] # BALINESE LETTER CA +1B19 ; [.37CC.0020.0002] # BALINESE LETTER CA LACA +1B1A ; [.37CD.0020.0002] # BALINESE LETTER JA +1B1B ; [.37CE.0020.0002] # BALINESE LETTER JA JERA +1B1C ; [.37CF.0020.0002] # BALINESE LETTER NYA +1B1D ; [.37D0.0020.0002] # BALINESE LETTER TA LATIK +1B1E ; [.37D1.0020.0002] # BALINESE LETTER TA MURDA MAHAPRANA +1B1F ; [.37D2.0020.0002] # BALINESE LETTER DA MURDA ALPAPRANA +1B20 ; [.37D3.0020.0002] # BALINESE LETTER DA MURDA MAHAPRANA +1B21 ; [.37D4.0020.0002] # BALINESE LETTER NA RAMBAT +1B22 ; [.37D5.0020.0002] # BALINESE LETTER TA +1B47 ; [.37D6.0020.0002] # BALINESE LETTER TZIR SASAK +1B23 ; [.37D7.0020.0002] # BALINESE LETTER TA TAWA +1B24 ; [.37D8.0020.0002] # BALINESE LETTER DA +1B25 ; [.37D9.0020.0002] # BALINESE LETTER DA MADU +1B26 ; [.37DA.0020.0002] # BALINESE LETTER NA +1B27 ; [.37DB.0020.0002] # BALINESE LETTER PA +1B48 ; [.37DC.0020.0002] # BALINESE LETTER EF SASAK +1B28 ; [.37DD.0020.0002] # BALINESE LETTER PA KAPAL +1B29 ; [.37DE.0020.0002] # BALINESE LETTER BA +1B2A ; [.37DF.0020.0002] # BALINESE LETTER BA KEMBANG +1B2B ; [.37E0.0020.0002] # BALINESE LETTER MA +1B2C ; [.37E1.0020.0002] # BALINESE LETTER YA +1B2D ; [.37E2.0020.0002] # BALINESE LETTER RA +1B2E ; [.37E3.0020.0002] # BALINESE LETTER LA +1B2F ; [.37E4.0020.0002] # BALINESE LETTER WA +1B49 ; [.37E5.0020.0002] # BALINESE LETTER VE SASAK +1B30 ; [.37E6.0020.0002] # BALINESE LETTER SA SAGA +1B31 ; [.37E7.0020.0002] # BALINESE LETTER SA SAPA +1B32 ; [.37E8.0020.0002] # BALINESE LETTER SA +1B4A ; [.37E9.0020.0002] # BALINESE LETTER ZAL SASAK +1B4B ; [.37EA.0020.0002] # BALINESE LETTER ASYURA SASAK +1B33 ; [.37EB.0020.0002] # BALINESE LETTER HA +1B35 ; [.37EC.0020.0002] # BALINESE VOWEL SIGN TEDUNG +1B36 ; [.37ED.0020.0002] # BALINESE VOWEL SIGN ULU +1B37 ; [.37EE.0020.0002] # BALINESE VOWEL SIGN ULU SARI +1B38 ; [.37EF.0020.0002] # BALINESE VOWEL SIGN SUKU +1B39 ; [.37F0.0020.0002] # BALINESE VOWEL SIGN SUKU ILUT +1B3A ; [.37F1.0020.0002] # BALINESE VOWEL SIGN RA REPA +1B3B ; [.37F2.0020.0002] # BALINESE VOWEL SIGN RA REPA TEDUNG +1B3A 1B35 ; [.37F2.0020.0002] # BALINESE VOWEL SIGN RA REPA TEDUNG +1B3C ; [.37F3.0020.0002] # BALINESE VOWEL SIGN LA LENGA +1B3D ; [.37F4.0020.0002] # BALINESE VOWEL SIGN LA LENGA TEDUNG +1B3C 1B35 ; [.37F4.0020.0002] # BALINESE VOWEL SIGN LA LENGA TEDUNG +1B3E ; [.37F5.0020.0002] # BALINESE VOWEL SIGN TALING +1B3F ; [.37F6.0020.0002] # BALINESE VOWEL SIGN TALING REPA +1B40 ; [.37F7.0020.0002] # BALINESE VOWEL SIGN TALING TEDUNG +1B3E 1B35 ; [.37F7.0020.0002] # BALINESE VOWEL SIGN TALING TEDUNG +1B41 ; [.37F8.0020.0002] # BALINESE VOWEL SIGN TALING REPA TEDUNG +1B3F 1B35 ; [.37F8.0020.0002] # BALINESE VOWEL SIGN TALING REPA TEDUNG +1B42 ; [.37F9.0020.0002] # BALINESE VOWEL SIGN PEPET +1B43 ; [.37FA.0020.0002] # BALINESE VOWEL SIGN PEPET TEDUNG +1B42 1B35 ; [.37FA.0020.0002] # BALINESE VOWEL SIGN PEPET TEDUNG +1B44 ; [.37FB.0020.0002] # BALINESE ADEG ADEG +A984 ; [.37FC.0020.0002] # JAVANESE LETTER A +A985 ; [.37FD.0020.0002] # JAVANESE LETTER I KAWI +A986 ; [.37FE.0020.0002] # JAVANESE LETTER I +A987 ; [.37FF.0020.0002] # JAVANESE LETTER II +A988 ; [.3800.0020.0002] # JAVANESE LETTER U +A989 ; [.3801.0020.0002] # JAVANESE LETTER PA CEREK +A98A ; [.3802.0020.0002] # JAVANESE LETTER NGA LELET +A98B ; [.3803.0020.0002] # JAVANESE LETTER NGA LELET RASWADI +A98C ; [.3804.0020.0002] # JAVANESE LETTER E +A98D ; [.3805.0020.0002] # JAVANESE LETTER AI +A98E ; [.3806.0020.0002] # JAVANESE LETTER O +A98F ; [.3807.0020.0002] # JAVANESE LETTER KA +A990 ; [.3808.0020.0002] # JAVANESE LETTER KA SASAK +A991 ; [.3809.0020.0002] # JAVANESE LETTER KA MURDA +A992 ; [.380A.0020.0002] # JAVANESE LETTER GA +A993 ; [.380B.0020.0002] # JAVANESE LETTER GA MURDA +A994 ; [.380C.0020.0002] # JAVANESE LETTER NGA +A995 ; [.380D.0020.0002] # JAVANESE LETTER CA +A996 ; [.380E.0020.0002] # JAVANESE LETTER CA MURDA +A997 ; [.380F.0020.0002] # JAVANESE LETTER JA +A998 ; [.3810.0020.0002] # JAVANESE LETTER NYA MURDA +A999 ; [.3811.0020.0002] # JAVANESE LETTER JA MAHAPRANA +A99A ; [.3812.0020.0002] # JAVANESE LETTER NYA +A99B ; [.3813.0020.0002] # JAVANESE LETTER TTA +A99C ; [.3814.0020.0002] # JAVANESE LETTER TTA MAHAPRANA +A99D ; [.3815.0020.0002] # JAVANESE LETTER DDA +A99E ; [.3816.0020.0002] # JAVANESE LETTER DDA MAHAPRANA +A99F ; [.3817.0020.0002] # JAVANESE LETTER NA MURDA +A9A0 ; [.3818.0020.0002] # JAVANESE LETTER TA +A9A1 ; [.3819.0020.0002] # JAVANESE LETTER TA MURDA +A9A2 ; [.381A.0020.0002] # JAVANESE LETTER DA +A9A3 ; [.381B.0020.0002] # JAVANESE LETTER DA MAHAPRANA +A9A4 ; [.381C.0020.0002] # JAVANESE LETTER NA +A9A5 ; [.381D.0020.0002] # JAVANESE LETTER PA +A9A6 ; [.381E.0020.0002] # JAVANESE LETTER PA MURDA +A9A7 ; [.381F.0020.0002] # JAVANESE LETTER BA +A9A8 ; [.3820.0020.0002] # JAVANESE LETTER BA MURDA +A9A9 ; [.3821.0020.0002] # JAVANESE LETTER MA +A9AA ; [.3822.0020.0002] # JAVANESE LETTER YA +A9BE ; [.3823.0020.0002] # JAVANESE CONSONANT SIGN PENGKAL +A9AB ; [.3824.0020.0002] # JAVANESE LETTER RA +A9AC ; [.3824.0020.0004] # JAVANESE LETTER RA AGUNG +A9BF ; [.3825.0020.0002] # JAVANESE CONSONANT SIGN CAKRA +A9AD ; [.3826.0020.0002] # JAVANESE LETTER LA +A9AE ; [.3827.0020.0002] # JAVANESE LETTER WA +A9AF ; [.3828.0020.0002] # JAVANESE LETTER SA MURDA +A9B0 ; [.3829.0020.0002] # JAVANESE LETTER SA MAHAPRANA +A9B1 ; [.382A.0020.0002] # JAVANESE LETTER SA +A9B2 ; [.382B.0020.0002] # JAVANESE LETTER HA +A9B4 ; [.382C.0020.0002] # JAVANESE VOWEL SIGN TARUNG +A9B5 ; [.382C.0020.0004] # JAVANESE VOWEL SIGN TOLONG +A9BC ; [.382D.0020.0002] # JAVANESE VOWEL SIGN PEPET +A9B6 ; [.382E.0020.0002] # JAVANESE VOWEL SIGN WULU +A9B7 ; [.382F.0020.0002] # JAVANESE VOWEL SIGN WULU MELIK +A9B8 ; [.3830.0020.0002] # JAVANESE VOWEL SIGN SUKU +A9B9 ; [.3831.0020.0002] # JAVANESE VOWEL SIGN SUKU MENDUT +A9BD ; [.3832.0020.0002] # JAVANESE CONSONANT SIGN KERET +A9BA ; [.3833.0020.0002] # JAVANESE VOWEL SIGN TALING +A9BB ; [.3834.0020.0002] # JAVANESE VOWEL SIGN DIRGA MURE +A9C0 ; [.3835.0020.0002] # JAVANESE PANGKON +1880 ; [.3836.0020.0002] # MONGOLIAN LETTER ALI GALI ANUSVARA ONE +1881 ; [.3837.0020.0002] # MONGOLIAN LETTER ALI GALI VISARGA ONE +1882 ; [.3838.0020.0002] # MONGOLIAN LETTER ALI GALI DAMARU +1883 ; [.3839.0020.0002] # MONGOLIAN LETTER ALI GALI UBADAMA +1884 ; [.383A.0020.0002] # MONGOLIAN LETTER ALI GALI INVERTED UBADAMA +1885 ; [.383B.0020.0002] # MONGOLIAN LETTER ALI GALI BALUDA +1886 ; [.383C.0020.0002] # MONGOLIAN LETTER ALI GALI THREE BALUDA +1843 ; [.383D.0020.0002] # MONGOLIAN LETTER TODO LONG VOWEL SIGN +1820 ; [.383E.0020.0002] # MONGOLIAN LETTER A +1887 ; [.383F.0020.0002] # MONGOLIAN LETTER ALI GALI A +1821 ; [.3840.0020.0002] # MONGOLIAN LETTER E +1844 ; [.3841.0020.0002] # MONGOLIAN LETTER TODO E +185D ; [.3842.0020.0002] # MONGOLIAN LETTER SIBE E +1822 ; [.3843.0020.0002] # MONGOLIAN LETTER I +1845 ; [.3844.0020.0002] # MONGOLIAN LETTER TODO I +185E ; [.3845.0020.0002] # MONGOLIAN LETTER SIBE I +1873 ; [.3846.0020.0002] # MONGOLIAN LETTER MANCHU I +1888 ; [.3847.0020.0002] # MONGOLIAN LETTER ALI GALI I +185F ; [.3848.0020.0002] # MONGOLIAN LETTER SIBE IY +1823 ; [.3849.0020.0002] # MONGOLIAN LETTER O +1846 ; [.384A.0020.0002] # MONGOLIAN LETTER TODO O +1824 ; [.384B.0020.0002] # MONGOLIAN LETTER U +1847 ; [.384C.0020.0002] # MONGOLIAN LETTER TODO U +1861 ; [.384D.0020.0002] # MONGOLIAN LETTER SIBE U +1825 ; [.384E.0020.0002] # MONGOLIAN LETTER OE +1848 ; [.384F.0020.0002] # MONGOLIAN LETTER TODO OE +1826 ; [.3850.0020.0002] # MONGOLIAN LETTER UE +1849 ; [.3851.0020.0002] # MONGOLIAN LETTER TODO UE +1860 ; [.3852.0020.0002] # MONGOLIAN LETTER SIBE UE +1827 ; [.3853.0020.0002] # MONGOLIAN LETTER EE +1828 ; [.3854.0020.0002] # MONGOLIAN LETTER NA +1829 ; [.3855.0020.0002] # MONGOLIAN LETTER ANG +184A ; [.3856.0020.0002] # MONGOLIAN LETTER TODO ANG +1862 ; [.3857.0020.0002] # MONGOLIAN LETTER SIBE ANG +188A ; [.3858.0020.0002] # MONGOLIAN LETTER ALI GALI NGA +189B ; [.3859.0020.0002] # MONGOLIAN LETTER MANCHU ALI GALI NGA +182A ; [.385A.0020.0002] # MONGOLIAN LETTER BA +184B ; [.385B.0020.0002] # MONGOLIAN LETTER TODO BA +182B ; [.385C.0020.0002] # MONGOLIAN LETTER PA +184C ; [.385D.0020.0002] # MONGOLIAN LETTER TODO PA +1866 ; [.385E.0020.0002] # MONGOLIAN LETTER SIBE PA +182C ; [.385F.0020.0002] # MONGOLIAN LETTER QA +184D ; [.3860.0020.0002] # MONGOLIAN LETTER TODO QA +182D ; [.3861.0020.0002] # MONGOLIAN LETTER GA +184E ; [.3862.0020.0002] # MONGOLIAN LETTER TODO GA +1864 ; [.3863.0020.0002] # MONGOLIAN LETTER SIBE GA +189A ; [.3864.0020.0002] # MONGOLIAN LETTER MANCHU ALI GALI GHA +1865 ; [.3865.0020.0002] # MONGOLIAN LETTER SIBE HA +182E ; [.3866.0020.0002] # MONGOLIAN LETTER MA +184F ; [.3867.0020.0002] # MONGOLIAN LETTER TODO MA +182F ; [.3868.0020.0002] # MONGOLIAN LETTER LA +1830 ; [.3869.0020.0002] # MONGOLIAN LETTER SA +1831 ; [.386A.0020.0002] # MONGOLIAN LETTER SHA +1867 ; [.386B.0020.0002] # MONGOLIAN LETTER SIBE SHA +189C ; [.386C.0020.0002] # MONGOLIAN LETTER MANCHU ALI GALI CA +189D ; [.386D.0020.0002] # MONGOLIAN LETTER MANCHU ALI GALI JHA +18A2 ; [.386E.0020.0002] # MONGOLIAN LETTER MANCHU ALI GALI SSA +18A4 ; [.386F.0020.0002] # MONGOLIAN LETTER MANCHU ALI GALI ZHA +18A5 ; [.3870.0020.0002] # MONGOLIAN LETTER MANCHU ALI GALI ZA +1832 ; [.3871.0020.0002] # MONGOLIAN LETTER TA +1850 ; [.3872.0020.0002] # MONGOLIAN LETTER TODO TA +1868 ; [.3873.0020.0002] # MONGOLIAN LETTER SIBE TA +1833 ; [.3874.0020.0002] # MONGOLIAN LETTER DA +1851 ; [.3875.0020.0002] # MONGOLIAN LETTER TODO DA +1869 ; [.3876.0020.0002] # MONGOLIAN LETTER SIBE DA +1834 ; [.3877.0020.0002] # MONGOLIAN LETTER CHA +1852 ; [.3878.0020.0002] # MONGOLIAN LETTER TODO CHA +1871 ; [.3879.0020.0002] # MONGOLIAN LETTER SIBE CHA +1878 ; [.387A.0020.0002] # MONGOLIAN LETTER CHA WITH TWO DOTS +185C ; [.387B.0020.0002] # MONGOLIAN LETTER TODO DZA +188B ; [.387C.0020.0002] # MONGOLIAN LETTER ALI GALI CA +1835 ; [.387D.0020.0002] # MONGOLIAN LETTER JA +1853 ; [.387E.0020.0002] # MONGOLIAN LETTER TODO JA +186A ; [.387F.0020.0002] # MONGOLIAN LETTER SIBE JA +1877 ; [.3880.0020.0002] # MONGOLIAN LETTER MANCHU ZHA +1836 ; [.3881.0020.0002] # MONGOLIAN LETTER YA +1855 ; [.3882.0020.0002] # MONGOLIAN LETTER TODO YA +1872 ; [.3883.0020.0002] # MONGOLIAN LETTER SIBE ZHA +1837 ; [.3884.0020.0002] # MONGOLIAN LETTER RA +1875 ; [.3885.0020.0002] # MONGOLIAN LETTER MANCHU RA +1838 ; [.3886.0020.0002] # MONGOLIAN LETTER WA +1856 ; [.3887.0020.0002] # MONGOLIAN LETTER TODO WA +1839 ; [.3888.0020.0002] # MONGOLIAN LETTER FA +186B ; [.3889.0020.0002] # MONGOLIAN LETTER SIBE FA +1876 ; [.388A.0020.0002] # MONGOLIAN LETTER MANCHU FA +183A ; [.388B.0020.0002] # MONGOLIAN LETTER KA +1857 ; [.388C.0020.0002] # MONGOLIAN LETTER TODO KA +1863 ; [.388D.0020.0002] # MONGOLIAN LETTER SIBE KA +1874 ; [.388E.0020.0002] # MONGOLIAN LETTER MANCHU KA +1889 ; [.388F.0020.0002] # MONGOLIAN LETTER ALI GALI KA +183B ; [.3890.0020.0002] # MONGOLIAN LETTER KHA +183C ; [.3891.0020.0002] # MONGOLIAN LETTER TSA +1854 ; [.3892.0020.0002] # MONGOLIAN LETTER TODO TSA +186E ; [.3893.0020.0002] # MONGOLIAN LETTER SIBE TSA +183D ; [.3894.0020.0002] # MONGOLIAN LETTER ZA +186F ; [.3895.0020.0002] # MONGOLIAN LETTER SIBE ZA +1858 ; [.3896.0020.0002] # MONGOLIAN LETTER TODO GAA +186C ; [.3897.0020.0002] # MONGOLIAN LETTER SIBE GAA +183E ; [.3898.0020.0002] # MONGOLIAN LETTER HAA +1859 ; [.3899.0020.0002] # MONGOLIAN LETTER TODO HAA +186D ; [.389A.0020.0002] # MONGOLIAN LETTER SIBE HAA +183F ; [.389B.0020.0002] # MONGOLIAN LETTER ZRA +1840 ; [.389C.0020.0002] # MONGOLIAN LETTER LHA +1841 ; [.389D.0020.0002] # MONGOLIAN LETTER ZHI +1842 ; [.389E.0020.0002] # MONGOLIAN LETTER CHI +185A ; [.389F.0020.0002] # MONGOLIAN LETTER TODO JIA +185B ; [.38A0.0020.0002] # MONGOLIAN LETTER TODO NIA +1870 ; [.38A1.0020.0002] # MONGOLIAN LETTER SIBE RAA +188C ; [.38A2.0020.0002] # MONGOLIAN LETTER ALI GALI TTA +189E ; [.38A3.0020.0002] # MONGOLIAN LETTER MANCHU ALI GALI TTA +188D ; [.38A4.0020.0002] # MONGOLIAN LETTER ALI GALI TTHA +188E ; [.38A5.0020.0002] # MONGOLIAN LETTER ALI GALI DDA +189F ; [.38A6.0020.0002] # MONGOLIAN LETTER MANCHU ALI GALI DDHA +188F ; [.38A7.0020.0002] # MONGOLIAN LETTER ALI GALI NNA +1890 ; [.38A8.0020.0002] # MONGOLIAN LETTER ALI GALI TA +1898 ; [.38A9.0020.0002] # MONGOLIAN LETTER TODO ALI GALI TA +18A0 ; [.38AA.0020.0002] # MONGOLIAN LETTER MANCHU ALI GALI TA +1891 ; [.38AB.0020.0002] # MONGOLIAN LETTER ALI GALI DA +18A1 ; [.38AC.0020.0002] # MONGOLIAN LETTER MANCHU ALI GALI DHA +1892 ; [.38AD.0020.0002] # MONGOLIAN LETTER ALI GALI PA +1893 ; [.38AE.0020.0002] # MONGOLIAN LETTER ALI GALI PHA +18A8 ; [.38AF.0020.0002] # MONGOLIAN LETTER MANCHU ALI GALI BHA +1894 ; [.38B0.0020.0002] # MONGOLIAN LETTER ALI GALI SSA +18A3 ; [.38B1.0020.0002] # MONGOLIAN LETTER MANCHU ALI GALI CYA +1895 ; [.38B2.0020.0002] # MONGOLIAN LETTER ALI GALI ZHA +1899 ; [.38B3.0020.0002] # MONGOLIAN LETTER TODO ALI GALI ZHA +1896 ; [.38B4.0020.0002] # MONGOLIAN LETTER ALI GALI ZA +1897 ; [.38B5.0020.0002] # MONGOLIAN LETTER ALI GALI AH +18A6 ; [.38B6.0020.0002] # MONGOLIAN LETTER ALI GALI HALF U +18A7 ; [.38B7.0020.0002] # MONGOLIAN LETTER ALI GALI HALF YA +18AA ; [.38B8.0020.0002] # MONGOLIAN LETTER MANCHU ALI GALI LHA +18A9 ; [.38B9.0020.0002] # MONGOLIAN LETTER ALI GALI DAGALGA +1C5A ; [.38BA.0020.0002] # OL CHIKI LETTER LA +1C5B ; [.38BB.0020.0002] # OL CHIKI LETTER AT +1C5C ; [.38BC.0020.0002] # OL CHIKI LETTER AG +1C5D ; [.38BD.0020.0002] # OL CHIKI LETTER ANG +1C5E ; [.38BE.0020.0002] # OL CHIKI LETTER AL +1C5F ; [.38BF.0020.0002] # OL CHIKI LETTER LAA +1C60 ; [.38C0.0020.0002] # OL CHIKI LETTER AAK +1C61 ; [.38C1.0020.0002] # OL CHIKI LETTER AAJ +1C62 ; [.38C2.0020.0002] # OL CHIKI LETTER AAM +1C63 ; [.38C3.0020.0002] # OL CHIKI LETTER AAW +1C64 ; [.38C4.0020.0002] # OL CHIKI LETTER LI +1C65 ; [.38C5.0020.0002] # OL CHIKI LETTER IS +1C66 ; [.38C6.0020.0002] # OL CHIKI LETTER IH +1C67 ; [.38C7.0020.0002] # OL CHIKI LETTER INY +1C68 ; [.38C8.0020.0002] # OL CHIKI LETTER IR +1C69 ; [.38C9.0020.0002] # OL CHIKI LETTER LU +1C6A ; [.38CA.0020.0002] # OL CHIKI LETTER UC +1C6B ; [.38CB.0020.0002] # OL CHIKI LETTER UD +1C6C ; [.38CC.0020.0002] # OL CHIKI LETTER UNN +1C6D ; [.38CD.0020.0002] # OL CHIKI LETTER UY +1C6E ; [.38CE.0020.0002] # OL CHIKI LETTER LE +1C6F ; [.38CF.0020.0002] # OL CHIKI LETTER EP +1C70 ; [.38D0.0020.0002] # OL CHIKI LETTER EDD +1C71 ; [.38D1.0020.0002] # OL CHIKI LETTER EN +1C72 ; [.38D2.0020.0002] # OL CHIKI LETTER ERR +1C73 ; [.38D3.0020.0002] # OL CHIKI LETTER LO +1C74 ; [.38D4.0020.0002] # OL CHIKI LETTER OTT +1C75 ; [.38D5.0020.0002] # OL CHIKI LETTER OB +1C76 ; [.38D6.0020.0002] # OL CHIKI LETTER OV +1C77 ; [.38D7.0020.0002] # OL CHIKI LETTER OH +1C78 ; [.38D8.0020.0002] # OL CHIKI MU TTUDDAG +1C79 ; [.38D9.0020.0002] # OL CHIKI GAAHLAA TTUDDAAG +1C7A ; [.38DA.0020.0002] # OL CHIKI MU-GAAHLAA TTUDDAAG +1C7B ; [.38DB.0020.0002] # OL CHIKI RELAA +1C7C ; [.38DC.0020.0002] # OL CHIKI PHAARKAA +1C7D ; [.38DD.0020.0002] # OL CHIKI AHAD +AB70 ; [.38DE.0020.0002] # CHEROKEE SMALL LETTER A +13A0 ; [.38DE.0020.0008] # CHEROKEE LETTER A +AB71 ; [.38DF.0020.0002] # CHEROKEE SMALL LETTER E +13A1 ; [.38DF.0020.0008] # CHEROKEE LETTER E +AB72 ; [.38E0.0020.0002] # CHEROKEE SMALL LETTER I +13A2 ; [.38E0.0020.0008] # CHEROKEE LETTER I +AB73 ; [.38E1.0020.0002] # CHEROKEE SMALL LETTER O +13A3 ; [.38E1.0020.0008] # CHEROKEE LETTER O +AB74 ; [.38E2.0020.0002] # CHEROKEE SMALL LETTER U +13A4 ; [.38E2.0020.0008] # CHEROKEE LETTER U +AB75 ; [.38E3.0020.0002] # CHEROKEE SMALL LETTER V +13A5 ; [.38E3.0020.0008] # CHEROKEE LETTER V +AB76 ; [.38E4.0020.0002] # CHEROKEE SMALL LETTER GA +13A6 ; [.38E4.0020.0008] # CHEROKEE LETTER GA +AB77 ; [.38E5.0020.0002] # CHEROKEE SMALL LETTER KA +13A7 ; [.38E5.0020.0008] # CHEROKEE LETTER KA +AB78 ; [.38E6.0020.0002] # CHEROKEE SMALL LETTER GE +13A8 ; [.38E6.0020.0008] # CHEROKEE LETTER GE +AB79 ; [.38E7.0020.0002] # CHEROKEE SMALL LETTER GI +13A9 ; [.38E7.0020.0008] # CHEROKEE LETTER GI +AB7A ; [.38E8.0020.0002] # CHEROKEE SMALL LETTER GO +13AA ; [.38E8.0020.0008] # CHEROKEE LETTER GO +AB7B ; [.38E9.0020.0002] # CHEROKEE SMALL LETTER GU +13AB ; [.38E9.0020.0008] # CHEROKEE LETTER GU +AB7C ; [.38EA.0020.0002] # CHEROKEE SMALL LETTER GV +13AC ; [.38EA.0020.0008] # CHEROKEE LETTER GV +AB7D ; [.38EB.0020.0002] # CHEROKEE SMALL LETTER HA +13AD ; [.38EB.0020.0008] # CHEROKEE LETTER HA +AB7E ; [.38EC.0020.0002] # CHEROKEE SMALL LETTER HE +13AE ; [.38EC.0020.0008] # CHEROKEE LETTER HE +AB7F ; [.38ED.0020.0002] # CHEROKEE SMALL LETTER HI +13AF ; [.38ED.0020.0008] # CHEROKEE LETTER HI +AB80 ; [.38EE.0020.0002] # CHEROKEE SMALL LETTER HO +13B0 ; [.38EE.0020.0008] # CHEROKEE LETTER HO +AB81 ; [.38EF.0020.0002] # CHEROKEE SMALL LETTER HU +13B1 ; [.38EF.0020.0008] # CHEROKEE LETTER HU +AB82 ; [.38F0.0020.0002] # CHEROKEE SMALL LETTER HV +13B2 ; [.38F0.0020.0008] # CHEROKEE LETTER HV +AB83 ; [.38F1.0020.0002] # CHEROKEE SMALL LETTER LA +13B3 ; [.38F1.0020.0008] # CHEROKEE LETTER LA +AB84 ; [.38F2.0020.0002] # CHEROKEE SMALL LETTER LE +13B4 ; [.38F2.0020.0008] # CHEROKEE LETTER LE +AB85 ; [.38F3.0020.0002] # CHEROKEE SMALL LETTER LI +13B5 ; [.38F3.0020.0008] # CHEROKEE LETTER LI +AB86 ; [.38F4.0020.0002] # CHEROKEE SMALL LETTER LO +13B6 ; [.38F4.0020.0008] # CHEROKEE LETTER LO +AB87 ; [.38F5.0020.0002] # CHEROKEE SMALL LETTER LU +13B7 ; [.38F5.0020.0008] # CHEROKEE LETTER LU +AB88 ; [.38F6.0020.0002] # CHEROKEE SMALL LETTER LV +13B8 ; [.38F6.0020.0008] # CHEROKEE LETTER LV +AB89 ; [.38F7.0020.0002] # CHEROKEE SMALL LETTER MA +13B9 ; [.38F7.0020.0008] # CHEROKEE LETTER MA +AB8A ; [.38F8.0020.0002] # CHEROKEE SMALL LETTER ME +13BA ; [.38F8.0020.0008] # CHEROKEE LETTER ME +AB8B ; [.38F9.0020.0002] # CHEROKEE SMALL LETTER MI +13BB ; [.38F9.0020.0008] # CHEROKEE LETTER MI +AB8C ; [.38FA.0020.0002] # CHEROKEE SMALL LETTER MO +13BC ; [.38FA.0020.0008] # CHEROKEE LETTER MO +AB8D ; [.38FB.0020.0002] # CHEROKEE SMALL LETTER MU +13BD ; [.38FB.0020.0008] # CHEROKEE LETTER MU +AB8E ; [.38FC.0020.0002] # CHEROKEE SMALL LETTER NA +13BE ; [.38FC.0020.0008] # CHEROKEE LETTER NA +AB8F ; [.38FD.0020.0002] # CHEROKEE SMALL LETTER HNA +13BF ; [.38FD.0020.0008] # CHEROKEE LETTER HNA +AB90 ; [.38FE.0020.0002] # CHEROKEE SMALL LETTER NAH +13C0 ; [.38FE.0020.0008] # CHEROKEE LETTER NAH +AB91 ; [.38FF.0020.0002] # CHEROKEE SMALL LETTER NE +13C1 ; [.38FF.0020.0008] # CHEROKEE LETTER NE +AB92 ; [.3900.0020.0002] # CHEROKEE SMALL LETTER NI +13C2 ; [.3900.0020.0008] # CHEROKEE LETTER NI +AB93 ; [.3901.0020.0002] # CHEROKEE SMALL LETTER NO +13C3 ; [.3901.0020.0008] # CHEROKEE LETTER NO +AB94 ; [.3902.0020.0002] # CHEROKEE SMALL LETTER NU +13C4 ; [.3902.0020.0008] # CHEROKEE LETTER NU +AB95 ; [.3903.0020.0002] # CHEROKEE SMALL LETTER NV +13C5 ; [.3903.0020.0008] # CHEROKEE LETTER NV +AB96 ; [.3904.0020.0002] # CHEROKEE SMALL LETTER QUA +13C6 ; [.3904.0020.0008] # CHEROKEE LETTER QUA +AB97 ; [.3905.0020.0002] # CHEROKEE SMALL LETTER QUE +13C7 ; [.3905.0020.0008] # CHEROKEE LETTER QUE +AB98 ; [.3906.0020.0002] # CHEROKEE SMALL LETTER QUI +13C8 ; [.3906.0020.0008] # CHEROKEE LETTER QUI +AB99 ; [.3907.0020.0002] # CHEROKEE SMALL LETTER QUO +13C9 ; [.3907.0020.0008] # CHEROKEE LETTER QUO +AB9A ; [.3908.0020.0002] # CHEROKEE SMALL LETTER QUU +13CA ; [.3908.0020.0008] # CHEROKEE LETTER QUU +AB9B ; [.3909.0020.0002] # CHEROKEE SMALL LETTER QUV +13CB ; [.3909.0020.0008] # CHEROKEE LETTER QUV +AB9C ; [.390A.0020.0002] # CHEROKEE SMALL LETTER SA +13CC ; [.390A.0020.0008] # CHEROKEE LETTER SA +AB9D ; [.390B.0020.0002] # CHEROKEE SMALL LETTER S +13CD ; [.390B.0020.0008] # CHEROKEE LETTER S +AB9E ; [.390C.0020.0002] # CHEROKEE SMALL LETTER SE +13CE ; [.390C.0020.0008] # CHEROKEE LETTER SE +AB9F ; [.390D.0020.0002] # CHEROKEE SMALL LETTER SI +13CF ; [.390D.0020.0008] # CHEROKEE LETTER SI +ABA0 ; [.390E.0020.0002] # CHEROKEE SMALL LETTER SO +13D0 ; [.390E.0020.0008] # CHEROKEE LETTER SO +ABA1 ; [.390F.0020.0002] # CHEROKEE SMALL LETTER SU +13D1 ; [.390F.0020.0008] # CHEROKEE LETTER SU +ABA2 ; [.3910.0020.0002] # CHEROKEE SMALL LETTER SV +13D2 ; [.3910.0020.0008] # CHEROKEE LETTER SV +ABA3 ; [.3911.0020.0002] # CHEROKEE SMALL LETTER DA +13D3 ; [.3911.0020.0008] # CHEROKEE LETTER DA +ABA4 ; [.3912.0020.0002] # CHEROKEE SMALL LETTER TA +13D4 ; [.3912.0020.0008] # CHEROKEE LETTER TA +ABA5 ; [.3913.0020.0002] # CHEROKEE SMALL LETTER DE +13D5 ; [.3913.0020.0008] # CHEROKEE LETTER DE +ABA6 ; [.3914.0020.0002] # CHEROKEE SMALL LETTER TE +13D6 ; [.3914.0020.0008] # CHEROKEE LETTER TE +ABA7 ; [.3915.0020.0002] # CHEROKEE SMALL LETTER DI +13D7 ; [.3915.0020.0008] # CHEROKEE LETTER DI +ABA8 ; [.3916.0020.0002] # CHEROKEE SMALL LETTER TI +13D8 ; [.3916.0020.0008] # CHEROKEE LETTER TI +ABA9 ; [.3917.0020.0002] # CHEROKEE SMALL LETTER DO +13D9 ; [.3917.0020.0008] # CHEROKEE LETTER DO +ABAA ; [.3918.0020.0002] # CHEROKEE SMALL LETTER DU +13DA ; [.3918.0020.0008] # CHEROKEE LETTER DU +ABAB ; [.3919.0020.0002] # CHEROKEE SMALL LETTER DV +13DB ; [.3919.0020.0008] # CHEROKEE LETTER DV +ABAC ; [.391A.0020.0002] # CHEROKEE SMALL LETTER DLA +13DC ; [.391A.0020.0008] # CHEROKEE LETTER DLA +ABAD ; [.391B.0020.0002] # CHEROKEE SMALL LETTER TLA +13DD ; [.391B.0020.0008] # CHEROKEE LETTER TLA +ABAE ; [.391C.0020.0002] # CHEROKEE SMALL LETTER TLE +13DE ; [.391C.0020.0008] # CHEROKEE LETTER TLE +ABAF ; [.391D.0020.0002] # CHEROKEE SMALL LETTER TLI +13DF ; [.391D.0020.0008] # CHEROKEE LETTER TLI +ABB0 ; [.391E.0020.0002] # CHEROKEE SMALL LETTER TLO +13E0 ; [.391E.0020.0008] # CHEROKEE LETTER TLO +ABB1 ; [.391F.0020.0002] # CHEROKEE SMALL LETTER TLU +13E1 ; [.391F.0020.0008] # CHEROKEE LETTER TLU +ABB2 ; [.3920.0020.0002] # CHEROKEE SMALL LETTER TLV +13E2 ; [.3920.0020.0008] # CHEROKEE LETTER TLV +ABB3 ; [.3921.0020.0002] # CHEROKEE SMALL LETTER TSA +13E3 ; [.3921.0020.0008] # CHEROKEE LETTER TSA +ABB4 ; [.3922.0020.0002] # CHEROKEE SMALL LETTER TSE +13E4 ; [.3922.0020.0008] # CHEROKEE LETTER TSE +ABB5 ; [.3923.0020.0002] # CHEROKEE SMALL LETTER TSI +13E5 ; [.3923.0020.0008] # CHEROKEE LETTER TSI +ABB6 ; [.3924.0020.0002] # CHEROKEE SMALL LETTER TSO +13E6 ; [.3924.0020.0008] # CHEROKEE LETTER TSO +ABB7 ; [.3925.0020.0002] # CHEROKEE SMALL LETTER TSU +13E7 ; [.3925.0020.0008] # CHEROKEE LETTER TSU +ABB8 ; [.3926.0020.0002] # CHEROKEE SMALL LETTER TSV +13E8 ; [.3926.0020.0008] # CHEROKEE LETTER TSV +ABB9 ; [.3927.0020.0002] # CHEROKEE SMALL LETTER WA +13E9 ; [.3927.0020.0008] # CHEROKEE LETTER WA +ABBA ; [.3928.0020.0002] # CHEROKEE SMALL LETTER WE +13EA ; [.3928.0020.0008] # CHEROKEE LETTER WE +ABBB ; [.3929.0020.0002] # CHEROKEE SMALL LETTER WI +13EB ; [.3929.0020.0008] # CHEROKEE LETTER WI +ABBC ; [.392A.0020.0002] # CHEROKEE SMALL LETTER WO +13EC ; [.392A.0020.0008] # CHEROKEE LETTER WO +ABBD ; [.392B.0020.0002] # CHEROKEE SMALL LETTER WU +13ED ; [.392B.0020.0008] # CHEROKEE LETTER WU +ABBE ; [.392C.0020.0002] # CHEROKEE SMALL LETTER WV +13EE ; [.392C.0020.0008] # CHEROKEE LETTER WV +ABBF ; [.392D.0020.0002] # CHEROKEE SMALL LETTER YA +13EF ; [.392D.0020.0008] # CHEROKEE LETTER YA +13F8 ; [.392E.0020.0002] # CHEROKEE SMALL LETTER YE +13F0 ; [.392E.0020.0008] # CHEROKEE LETTER YE +13F9 ; [.392F.0020.0002] # CHEROKEE SMALL LETTER YI +13F1 ; [.392F.0020.0008] # CHEROKEE LETTER YI +13FA ; [.3930.0020.0002] # CHEROKEE SMALL LETTER YO +13F2 ; [.3930.0020.0008] # CHEROKEE LETTER YO +13FB ; [.3931.0020.0002] # CHEROKEE SMALL LETTER YU +13F3 ; [.3931.0020.0008] # CHEROKEE LETTER YU +13FC ; [.3932.0020.0002] # CHEROKEE SMALL LETTER YV +13F4 ; [.3932.0020.0008] # CHEROKEE LETTER YV +13FD ; [.3933.0020.0002] # CHEROKEE SMALL LETTER MV +13F5 ; [.3933.0020.0008] # CHEROKEE LETTER MV +104D8 ; [.3934.0020.0002] # OSAGE SMALL LETTER A +104B0 ; [.3934.0020.0008] # OSAGE CAPITAL LETTER A +104D9 ; [.3935.0020.0002] # OSAGE SMALL LETTER AI +104B1 ; [.3935.0020.0008] # OSAGE CAPITAL LETTER AI +104DA ; [.3936.0020.0002] # OSAGE SMALL LETTER AIN +104B2 ; [.3936.0020.0008] # OSAGE CAPITAL LETTER AIN +104DB ; [.3937.0020.0002] # OSAGE SMALL LETTER AH +104B3 ; [.3937.0020.0008] # OSAGE CAPITAL LETTER AH +104DC ; [.3938.0020.0002] # OSAGE SMALL LETTER BRA +104B4 ; [.3938.0020.0008] # OSAGE CAPITAL LETTER BRA +104DD ; [.3939.0020.0002] # OSAGE SMALL LETTER CHA +104B5 ; [.3939.0020.0008] # OSAGE CAPITAL LETTER CHA +104DE ; [.393A.0020.0002] # OSAGE SMALL LETTER EHCHA +104B6 ; [.393A.0020.0008] # OSAGE CAPITAL LETTER EHCHA +104DF ; [.393B.0020.0002] # OSAGE SMALL LETTER E +104B7 ; [.393B.0020.0008] # OSAGE CAPITAL LETTER E +104E0 ; [.393C.0020.0002] # OSAGE SMALL LETTER EIN +104B8 ; [.393C.0020.0008] # OSAGE CAPITAL LETTER EIN +104E1 ; [.393D.0020.0002] # OSAGE SMALL LETTER HA +104B9 ; [.393D.0020.0008] # OSAGE CAPITAL LETTER HA +104E2 ; [.393E.0020.0002] # OSAGE SMALL LETTER HYA +104BA ; [.393E.0020.0008] # OSAGE CAPITAL LETTER HYA +104E3 ; [.393F.0020.0002] # OSAGE SMALL LETTER I +104BB ; [.393F.0020.0008] # OSAGE CAPITAL LETTER I +104E4 ; [.3940.0020.0002] # OSAGE SMALL LETTER KA +104BC ; [.3940.0020.0008] # OSAGE CAPITAL LETTER KA +104E5 ; [.3941.0020.0002] # OSAGE SMALL LETTER EHKA +104BD ; [.3941.0020.0008] # OSAGE CAPITAL LETTER EHKA +104E6 ; [.3942.0020.0002] # OSAGE SMALL LETTER KYA +104BE ; [.3942.0020.0008] # OSAGE CAPITAL LETTER KYA +104E7 ; [.3943.0020.0002] # OSAGE SMALL LETTER LA +104BF ; [.3943.0020.0008] # OSAGE CAPITAL LETTER LA +104E8 ; [.3944.0020.0002] # OSAGE SMALL LETTER MA +104C0 ; [.3944.0020.0008] # OSAGE CAPITAL LETTER MA +104E9 ; [.3945.0020.0002] # OSAGE SMALL LETTER NA +104C1 ; [.3945.0020.0008] # OSAGE CAPITAL LETTER NA +104EA ; [.3946.0020.0002] # OSAGE SMALL LETTER O +104C2 ; [.3946.0020.0008] # OSAGE CAPITAL LETTER O +104EB ; [.3947.0020.0002] # OSAGE SMALL LETTER OIN +104C3 ; [.3947.0020.0008] # OSAGE CAPITAL LETTER OIN +104EC ; [.3948.0020.0002] # OSAGE SMALL LETTER PA +104C4 ; [.3948.0020.0008] # OSAGE CAPITAL LETTER PA +104ED ; [.3949.0020.0002] # OSAGE SMALL LETTER EHPA +104C5 ; [.3949.0020.0008] # OSAGE CAPITAL LETTER EHPA +104EE ; [.394A.0020.0002] # OSAGE SMALL LETTER SA +104C6 ; [.394A.0020.0008] # OSAGE CAPITAL LETTER SA +104EF ; [.394B.0020.0002] # OSAGE SMALL LETTER SHA +104C7 ; [.394B.0020.0008] # OSAGE CAPITAL LETTER SHA +104F0 ; [.394C.0020.0002] # OSAGE SMALL LETTER TA +104C8 ; [.394C.0020.0008] # OSAGE CAPITAL LETTER TA +104F1 ; [.394D.0020.0002] # OSAGE SMALL LETTER EHTA +104C9 ; [.394D.0020.0008] # OSAGE CAPITAL LETTER EHTA +104F2 ; [.394E.0020.0002] # OSAGE SMALL LETTER TSA +104CA ; [.394E.0020.0008] # OSAGE CAPITAL LETTER TSA +104F3 ; [.394F.0020.0002] # OSAGE SMALL LETTER EHTSA +104CB ; [.394F.0020.0008] # OSAGE CAPITAL LETTER EHTSA +104F4 ; [.3950.0020.0002] # OSAGE SMALL LETTER TSHA +104CC ; [.3950.0020.0008] # OSAGE CAPITAL LETTER TSHA +104F5 ; [.3951.0020.0002] # OSAGE SMALL LETTER DHA +104CD ; [.3951.0020.0008] # OSAGE CAPITAL LETTER DHA +104F6 ; [.3952.0020.0002] # OSAGE SMALL LETTER U +104CE ; [.3952.0020.0008] # OSAGE CAPITAL LETTER U +104F7 ; [.3953.0020.0002] # OSAGE SMALL LETTER WA +104CF ; [.3953.0020.0008] # OSAGE CAPITAL LETTER WA +104F8 ; [.3954.0020.0002] # OSAGE SMALL LETTER KHA +104D0 ; [.3954.0020.0008] # OSAGE CAPITAL LETTER KHA +104F9 ; [.3955.0020.0002] # OSAGE SMALL LETTER GHA +104D1 ; [.3955.0020.0008] # OSAGE CAPITAL LETTER GHA +104FA ; [.3956.0020.0002] # OSAGE SMALL LETTER ZA +104D2 ; [.3956.0020.0008] # OSAGE CAPITAL LETTER ZA +104FB ; [.3957.0020.0002] # OSAGE SMALL LETTER ZHA +104D3 ; [.3957.0020.0008] # OSAGE CAPITAL LETTER ZHA +1401 ; [.3958.0020.0002] # CANADIAN SYLLABICS E +1402 ; [.3959.0020.0002] # CANADIAN SYLLABICS AAI +1403 ; [.395A.0020.0002] # CANADIAN SYLLABICS I +1404 ; [.395B.0020.0002] # CANADIAN SYLLABICS II +1405 ; [.395C.0020.0002] # CANADIAN SYLLABICS O +1406 ; [.395D.0020.0002] # CANADIAN SYLLABICS OO +1407 ; [.395E.0020.0002] # CANADIAN SYLLABICS Y-CREE OO +1408 ; [.395F.0020.0002] # CANADIAN SYLLABICS CARRIER EE +1409 ; [.3960.0020.0002] # CANADIAN SYLLABICS CARRIER I +140A ; [.3961.0020.0002] # CANADIAN SYLLABICS A +140B ; [.3962.0020.0002] # CANADIAN SYLLABICS AA +140C ; [.3963.0020.0002] # CANADIAN SYLLABICS WE +140D ; [.3964.0020.0002] # CANADIAN SYLLABICS WEST-CREE WE +140E ; [.3965.0020.0002] # CANADIAN SYLLABICS WI +140F ; [.3966.0020.0002] # CANADIAN SYLLABICS WEST-CREE WI +1410 ; [.3967.0020.0002] # CANADIAN SYLLABICS WII +1411 ; [.3968.0020.0002] # CANADIAN SYLLABICS WEST-CREE WII +1412 ; [.3969.0020.0002] # CANADIAN SYLLABICS WO +1413 ; [.396A.0020.0002] # CANADIAN SYLLABICS WEST-CREE WO +1414 ; [.396B.0020.0002] # CANADIAN SYLLABICS WOO +1415 ; [.396C.0020.0002] # CANADIAN SYLLABICS WEST-CREE WOO +1416 ; [.396D.0020.0002] # CANADIAN SYLLABICS NASKAPI WOO +1417 ; [.396E.0020.0002] # CANADIAN SYLLABICS WA +1418 ; [.396F.0020.0002] # CANADIAN SYLLABICS WEST-CREE WA +1419 ; [.3970.0020.0002] # CANADIAN SYLLABICS WAA +141A ; [.3971.0020.0002] # CANADIAN SYLLABICS WEST-CREE WAA +141B ; [.3972.0020.0002] # CANADIAN SYLLABICS NASKAPI WAA +141C ; [.3973.0020.0002] # CANADIAN SYLLABICS AI +141D ; [.3974.0020.0002] # CANADIAN SYLLABICS Y-CREE W +141E ; [.3975.0020.0002] # CANADIAN SYLLABICS GLOTTAL STOP +141F ; [.3976.0020.0002] # CANADIAN SYLLABICS FINAL ACUTE +1420 ; [.3977.0020.0002] # CANADIAN SYLLABICS FINAL GRAVE +1421 ; [.3978.0020.0002] # CANADIAN SYLLABICS FINAL BOTTOM HALF RING +1422 ; [.3979.0020.0002] # CANADIAN SYLLABICS FINAL TOP HALF RING +1423 ; [.397A.0020.0002] # CANADIAN SYLLABICS FINAL RIGHT HALF RING +1424 ; [.397B.0020.0002] # CANADIAN SYLLABICS FINAL RING +1425 ; [.397C.0020.0002] # CANADIAN SYLLABICS FINAL DOUBLE ACUTE +1426 ; [.397D.0020.0002] # CANADIAN SYLLABICS FINAL DOUBLE SHORT VERTICAL STROKES +1427 ; [.397E.0020.0002] # CANADIAN SYLLABICS FINAL MIDDLE DOT +1428 ; [.397F.0020.0002] # CANADIAN SYLLABICS FINAL SHORT HORIZONTAL STROKE +1429 ; [.3980.0020.0002] # CANADIAN SYLLABICS FINAL PLUS +142A ; [.3981.0020.0002] # CANADIAN SYLLABICS FINAL DOWN TACK +142B ; [.3982.0020.0002] # CANADIAN SYLLABICS EN +142C ; [.3983.0020.0002] # CANADIAN SYLLABICS IN +142D ; [.3984.0020.0002] # CANADIAN SYLLABICS ON +142E ; [.3985.0020.0002] # CANADIAN SYLLABICS AN +142F ; [.3986.0020.0002] # CANADIAN SYLLABICS PE +1430 ; [.3987.0020.0002] # CANADIAN SYLLABICS PAAI +1431 ; [.3988.0020.0002] # CANADIAN SYLLABICS PI +1432 ; [.3989.0020.0002] # CANADIAN SYLLABICS PII +1433 ; [.398A.0020.0002] # CANADIAN SYLLABICS PO +1434 ; [.398B.0020.0002] # CANADIAN SYLLABICS POO +1435 ; [.398C.0020.0002] # CANADIAN SYLLABICS Y-CREE POO +1436 ; [.398D.0020.0002] # CANADIAN SYLLABICS CARRIER HEE +1437 ; [.398E.0020.0002] # CANADIAN SYLLABICS CARRIER HI +1438 ; [.398F.0020.0002] # CANADIAN SYLLABICS PA +1439 ; [.3990.0020.0002] # CANADIAN SYLLABICS PAA +143A ; [.3991.0020.0002] # CANADIAN SYLLABICS PWE +143B ; [.3992.0020.0002] # CANADIAN SYLLABICS WEST-CREE PWE +143C ; [.3993.0020.0002] # CANADIAN SYLLABICS PWI +143D ; [.3994.0020.0002] # CANADIAN SYLLABICS WEST-CREE PWI +143E ; [.3995.0020.0002] # CANADIAN SYLLABICS PWII +143F ; [.3996.0020.0002] # CANADIAN SYLLABICS WEST-CREE PWII +1440 ; [.3997.0020.0002] # CANADIAN SYLLABICS PWO +1441 ; [.3998.0020.0002] # CANADIAN SYLLABICS WEST-CREE PWO +1442 ; [.3999.0020.0002] # CANADIAN SYLLABICS PWOO +1443 ; [.399A.0020.0002] # CANADIAN SYLLABICS WEST-CREE PWOO +1444 ; [.399B.0020.0002] # CANADIAN SYLLABICS PWA +1445 ; [.399C.0020.0002] # CANADIAN SYLLABICS WEST-CREE PWA +1446 ; [.399D.0020.0002] # CANADIAN SYLLABICS PWAA +1447 ; [.399E.0020.0002] # CANADIAN SYLLABICS WEST-CREE PWAA +1448 ; [.399F.0020.0002] # CANADIAN SYLLABICS Y-CREE PWAA +1449 ; [.39A0.0020.0002] # CANADIAN SYLLABICS P +144A ; [.39A1.0020.0002] # CANADIAN SYLLABICS WEST-CREE P +144B ; [.39A2.0020.0002] # CANADIAN SYLLABICS CARRIER H +144C ; [.39A3.0020.0002] # CANADIAN SYLLABICS TE +144D ; [.39A4.0020.0002] # CANADIAN SYLLABICS TAAI +144E ; [.39A5.0020.0002] # CANADIAN SYLLABICS TI +144F ; [.39A6.0020.0002] # CANADIAN SYLLABICS TII +1450 ; [.39A7.0020.0002] # CANADIAN SYLLABICS TO +1451 ; [.39A8.0020.0002] # CANADIAN SYLLABICS TOO +1452 ; [.39A9.0020.0002] # CANADIAN SYLLABICS Y-CREE TOO +1453 ; [.39AA.0020.0002] # CANADIAN SYLLABICS CARRIER DEE +1454 ; [.39AB.0020.0002] # CANADIAN SYLLABICS CARRIER DI +1455 ; [.39AC.0020.0002] # CANADIAN SYLLABICS TA +1456 ; [.39AD.0020.0002] # CANADIAN SYLLABICS TAA +1457 ; [.39AE.0020.0002] # CANADIAN SYLLABICS TWE +1458 ; [.39AF.0020.0002] # CANADIAN SYLLABICS WEST-CREE TWE +1459 ; [.39B0.0020.0002] # CANADIAN SYLLABICS TWI +145A ; [.39B1.0020.0002] # CANADIAN SYLLABICS WEST-CREE TWI +145B ; [.39B2.0020.0002] # CANADIAN SYLLABICS TWII +145C ; [.39B3.0020.0002] # CANADIAN SYLLABICS WEST-CREE TWII +145D ; [.39B4.0020.0002] # CANADIAN SYLLABICS TWO +145E ; [.39B5.0020.0002] # CANADIAN SYLLABICS WEST-CREE TWO +145F ; [.39B6.0020.0002] # CANADIAN SYLLABICS TWOO +1460 ; [.39B7.0020.0002] # CANADIAN SYLLABICS WEST-CREE TWOO +1461 ; [.39B8.0020.0002] # CANADIAN SYLLABICS TWA +1462 ; [.39B9.0020.0002] # CANADIAN SYLLABICS WEST-CREE TWA +1463 ; [.39BA.0020.0002] # CANADIAN SYLLABICS TWAA +1464 ; [.39BB.0020.0002] # CANADIAN SYLLABICS WEST-CREE TWAA +1465 ; [.39BC.0020.0002] # CANADIAN SYLLABICS NASKAPI TWAA +1466 ; [.39BD.0020.0002] # CANADIAN SYLLABICS T +1467 ; [.39BE.0020.0002] # CANADIAN SYLLABICS TTE +1468 ; [.39BF.0020.0002] # CANADIAN SYLLABICS TTI +1469 ; [.39C0.0020.0002] # CANADIAN SYLLABICS TTO +146A ; [.39C1.0020.0002] # CANADIAN SYLLABICS TTA +146B ; [.39C2.0020.0002] # CANADIAN SYLLABICS KE +146C ; [.39C3.0020.0002] # CANADIAN SYLLABICS KAAI +146D ; [.39C4.0020.0002] # CANADIAN SYLLABICS KI +146E ; [.39C5.0020.0002] # CANADIAN SYLLABICS KII +146F ; [.39C6.0020.0002] # CANADIAN SYLLABICS KO +1470 ; [.39C7.0020.0002] # CANADIAN SYLLABICS KOO +1471 ; [.39C8.0020.0002] # CANADIAN SYLLABICS Y-CREE KOO +1472 ; [.39C9.0020.0002] # CANADIAN SYLLABICS KA +1473 ; [.39CA.0020.0002] # CANADIAN SYLLABICS KAA +1474 ; [.39CB.0020.0002] # CANADIAN SYLLABICS KWE +1475 ; [.39CC.0020.0002] # CANADIAN SYLLABICS WEST-CREE KWE +1476 ; [.39CD.0020.0002] # CANADIAN SYLLABICS KWI +1477 ; [.39CE.0020.0002] # CANADIAN SYLLABICS WEST-CREE KWI +1478 ; [.39CF.0020.0002] # CANADIAN SYLLABICS KWII +1479 ; [.39D0.0020.0002] # CANADIAN SYLLABICS WEST-CREE KWII +147A ; [.39D1.0020.0002] # CANADIAN SYLLABICS KWO +147B ; [.39D2.0020.0002] # CANADIAN SYLLABICS WEST-CREE KWO +147C ; [.39D3.0020.0002] # CANADIAN SYLLABICS KWOO +147D ; [.39D4.0020.0002] # CANADIAN SYLLABICS WEST-CREE KWOO +147E ; [.39D5.0020.0002] # CANADIAN SYLLABICS KWA +147F ; [.39D6.0020.0002] # CANADIAN SYLLABICS WEST-CREE KWA +1480 ; [.39D7.0020.0002] # CANADIAN SYLLABICS KWAA +1481 ; [.39D8.0020.0002] # CANADIAN SYLLABICS WEST-CREE KWAA +1482 ; [.39D9.0020.0002] # CANADIAN SYLLABICS NASKAPI KWAA +1483 ; [.39DA.0020.0002] # CANADIAN SYLLABICS K +1484 ; [.39DB.0020.0002] # CANADIAN SYLLABICS KW +1485 ; [.39DC.0020.0002] # CANADIAN SYLLABICS SOUTH-SLAVEY KEH +1486 ; [.39DD.0020.0002] # CANADIAN SYLLABICS SOUTH-SLAVEY KIH +1487 ; [.39DE.0020.0002] # CANADIAN SYLLABICS SOUTH-SLAVEY KOH +1488 ; [.39DF.0020.0002] # CANADIAN SYLLABICS SOUTH-SLAVEY KAH +1489 ; [.39E0.0020.0002] # CANADIAN SYLLABICS CE +148A ; [.39E1.0020.0002] # CANADIAN SYLLABICS CAAI +148B ; [.39E2.0020.0002] # CANADIAN SYLLABICS CI +148C ; [.39E3.0020.0002] # CANADIAN SYLLABICS CII +148D ; [.39E4.0020.0002] # CANADIAN SYLLABICS CO +148E ; [.39E5.0020.0002] # CANADIAN SYLLABICS COO +148F ; [.39E6.0020.0002] # CANADIAN SYLLABICS Y-CREE COO +1490 ; [.39E7.0020.0002] # CANADIAN SYLLABICS CA +1491 ; [.39E8.0020.0002] # CANADIAN SYLLABICS CAA +1492 ; [.39E9.0020.0002] # CANADIAN SYLLABICS CWE +1493 ; [.39EA.0020.0002] # CANADIAN SYLLABICS WEST-CREE CWE +1494 ; [.39EB.0020.0002] # CANADIAN SYLLABICS CWI +1495 ; [.39EC.0020.0002] # CANADIAN SYLLABICS WEST-CREE CWI +1496 ; [.39ED.0020.0002] # CANADIAN SYLLABICS CWII +1497 ; [.39EE.0020.0002] # CANADIAN SYLLABICS WEST-CREE CWII +1498 ; [.39EF.0020.0002] # CANADIAN SYLLABICS CWO +1499 ; [.39F0.0020.0002] # CANADIAN SYLLABICS WEST-CREE CWO +149A ; [.39F1.0020.0002] # CANADIAN SYLLABICS CWOO +149B ; [.39F2.0020.0002] # CANADIAN SYLLABICS WEST-CREE CWOO +149C ; [.39F3.0020.0002] # CANADIAN SYLLABICS CWA +149D ; [.39F4.0020.0002] # CANADIAN SYLLABICS WEST-CREE CWA +149E ; [.39F5.0020.0002] # CANADIAN SYLLABICS CWAA +149F ; [.39F6.0020.0002] # CANADIAN SYLLABICS WEST-CREE CWAA +14A0 ; [.39F7.0020.0002] # CANADIAN SYLLABICS NASKAPI CWAA +14A1 ; [.39F8.0020.0002] # CANADIAN SYLLABICS C +14A2 ; [.39F9.0020.0002] # CANADIAN SYLLABICS SAYISI TH +14A3 ; [.39FA.0020.0002] # CANADIAN SYLLABICS ME +14A4 ; [.39FB.0020.0002] # CANADIAN SYLLABICS MAAI +14A5 ; [.39FC.0020.0002] # CANADIAN SYLLABICS MI +14A6 ; [.39FD.0020.0002] # CANADIAN SYLLABICS MII +14A7 ; [.39FE.0020.0002] # CANADIAN SYLLABICS MO +14A8 ; [.39FF.0020.0002] # CANADIAN SYLLABICS MOO +14A9 ; [.3A00.0020.0002] # CANADIAN SYLLABICS Y-CREE MOO +14AA ; [.3A01.0020.0002] # CANADIAN SYLLABICS MA +14AB ; [.3A02.0020.0002] # CANADIAN SYLLABICS MAA +14AC ; [.3A03.0020.0002] # CANADIAN SYLLABICS MWE +14AD ; [.3A04.0020.0002] # CANADIAN SYLLABICS WEST-CREE MWE +14AE ; [.3A05.0020.0002] # CANADIAN SYLLABICS MWI +14AF ; [.3A06.0020.0002] # CANADIAN SYLLABICS WEST-CREE MWI +14B0 ; [.3A07.0020.0002] # CANADIAN SYLLABICS MWII +14B1 ; [.3A08.0020.0002] # CANADIAN SYLLABICS WEST-CREE MWII +14B2 ; [.3A09.0020.0002] # CANADIAN SYLLABICS MWO +14B3 ; [.3A0A.0020.0002] # CANADIAN SYLLABICS WEST-CREE MWO +14B4 ; [.3A0B.0020.0002] # CANADIAN SYLLABICS MWOO +14B5 ; [.3A0C.0020.0002] # CANADIAN SYLLABICS WEST-CREE MWOO +14B6 ; [.3A0D.0020.0002] # CANADIAN SYLLABICS MWA +14B7 ; [.3A0E.0020.0002] # CANADIAN SYLLABICS WEST-CREE MWA +14B8 ; [.3A0F.0020.0002] # CANADIAN SYLLABICS MWAA +14B9 ; [.3A10.0020.0002] # CANADIAN SYLLABICS WEST-CREE MWAA +14BA ; [.3A11.0020.0002] # CANADIAN SYLLABICS NASKAPI MWAA +14BB ; [.3A12.0020.0002] # CANADIAN SYLLABICS M +14BC ; [.3A13.0020.0002] # CANADIAN SYLLABICS WEST-CREE M +14BD ; [.3A14.0020.0002] # CANADIAN SYLLABICS MH +14BE ; [.3A15.0020.0002] # CANADIAN SYLLABICS ATHAPASCAN M +14BF ; [.3A16.0020.0002] # CANADIAN SYLLABICS SAYISI M +14C0 ; [.3A17.0020.0002] # CANADIAN SYLLABICS NE +14C1 ; [.3A18.0020.0002] # CANADIAN SYLLABICS NAAI +14C2 ; [.3A19.0020.0002] # CANADIAN SYLLABICS NI +14C3 ; [.3A1A.0020.0002] # CANADIAN SYLLABICS NII +14C4 ; [.3A1B.0020.0002] # CANADIAN SYLLABICS NO +14C5 ; [.3A1C.0020.0002] # CANADIAN SYLLABICS NOO +14C6 ; [.3A1D.0020.0002] # CANADIAN SYLLABICS Y-CREE NOO +14C7 ; [.3A1E.0020.0002] # CANADIAN SYLLABICS NA +14C8 ; [.3A1F.0020.0002] # CANADIAN SYLLABICS NAA +14C9 ; [.3A20.0020.0002] # CANADIAN SYLLABICS NWE +14CA ; [.3A21.0020.0002] # CANADIAN SYLLABICS WEST-CREE NWE +14CB ; [.3A22.0020.0002] # CANADIAN SYLLABICS NWA +14CC ; [.3A23.0020.0002] # CANADIAN SYLLABICS WEST-CREE NWA +14CD ; [.3A24.0020.0002] # CANADIAN SYLLABICS NWAA +14CE ; [.3A25.0020.0002] # CANADIAN SYLLABICS WEST-CREE NWAA +14CF ; [.3A26.0020.0002] # CANADIAN SYLLABICS NASKAPI NWAA +14D0 ; [.3A27.0020.0002] # CANADIAN SYLLABICS N +14D1 ; [.3A28.0020.0002] # CANADIAN SYLLABICS CARRIER NG +14D2 ; [.3A29.0020.0002] # CANADIAN SYLLABICS NH +14D3 ; [.3A2A.0020.0002] # CANADIAN SYLLABICS LE +14D4 ; [.3A2B.0020.0002] # CANADIAN SYLLABICS LAAI +14D5 ; [.3A2C.0020.0002] # CANADIAN SYLLABICS LI +14D6 ; [.3A2D.0020.0002] # CANADIAN SYLLABICS LII +14D7 ; [.3A2E.0020.0002] # CANADIAN SYLLABICS LO +14D8 ; [.3A2F.0020.0002] # CANADIAN SYLLABICS LOO +14D9 ; [.3A30.0020.0002] # CANADIAN SYLLABICS Y-CREE LOO +14DA ; [.3A31.0020.0002] # CANADIAN SYLLABICS LA +14DB ; [.3A32.0020.0002] # CANADIAN SYLLABICS LAA +14DC ; [.3A33.0020.0002] # CANADIAN SYLLABICS LWE +14DD ; [.3A34.0020.0002] # CANADIAN SYLLABICS WEST-CREE LWE +14DE ; [.3A35.0020.0002] # CANADIAN SYLLABICS LWI +14DF ; [.3A36.0020.0002] # CANADIAN SYLLABICS WEST-CREE LWI +14E0 ; [.3A37.0020.0002] # CANADIAN SYLLABICS LWII +14E1 ; [.3A38.0020.0002] # CANADIAN SYLLABICS WEST-CREE LWII +14E2 ; [.3A39.0020.0002] # CANADIAN SYLLABICS LWO +14E3 ; [.3A3A.0020.0002] # CANADIAN SYLLABICS WEST-CREE LWO +14E4 ; [.3A3B.0020.0002] # CANADIAN SYLLABICS LWOO +14E5 ; [.3A3C.0020.0002] # CANADIAN SYLLABICS WEST-CREE LWOO +14E6 ; [.3A3D.0020.0002] # CANADIAN SYLLABICS LWA +14E7 ; [.3A3E.0020.0002] # CANADIAN SYLLABICS WEST-CREE LWA +14E8 ; [.3A3F.0020.0002] # CANADIAN SYLLABICS LWAA +14E9 ; [.3A40.0020.0002] # CANADIAN SYLLABICS WEST-CREE LWAA +14EA ; [.3A41.0020.0002] # CANADIAN SYLLABICS L +14EB ; [.3A42.0020.0002] # CANADIAN SYLLABICS WEST-CREE L +14EC ; [.3A43.0020.0002] # CANADIAN SYLLABICS MEDIAL L +14ED ; [.3A44.0020.0002] # CANADIAN SYLLABICS SE +14EE ; [.3A45.0020.0002] # CANADIAN SYLLABICS SAAI +14EF ; [.3A46.0020.0002] # CANADIAN SYLLABICS SI +14F0 ; [.3A47.0020.0002] # CANADIAN SYLLABICS SII +14F1 ; [.3A48.0020.0002] # CANADIAN SYLLABICS SO +14F2 ; [.3A49.0020.0002] # CANADIAN SYLLABICS SOO +14F3 ; [.3A4A.0020.0002] # CANADIAN SYLLABICS Y-CREE SOO +14F4 ; [.3A4B.0020.0002] # CANADIAN SYLLABICS SA +14F5 ; [.3A4C.0020.0002] # CANADIAN SYLLABICS SAA +14F6 ; [.3A4D.0020.0002] # CANADIAN SYLLABICS SWE +14F7 ; [.3A4E.0020.0002] # CANADIAN SYLLABICS WEST-CREE SWE +14F8 ; [.3A4F.0020.0002] # CANADIAN SYLLABICS SWI +14F9 ; [.3A50.0020.0002] # CANADIAN SYLLABICS WEST-CREE SWI +14FA ; [.3A51.0020.0002] # CANADIAN SYLLABICS SWII +14FB ; [.3A52.0020.0002] # CANADIAN SYLLABICS WEST-CREE SWII +14FC ; [.3A53.0020.0002] # CANADIAN SYLLABICS SWO +14FD ; [.3A54.0020.0002] # CANADIAN SYLLABICS WEST-CREE SWO +14FE ; [.3A55.0020.0002] # CANADIAN SYLLABICS SWOO +14FF ; [.3A56.0020.0002] # CANADIAN SYLLABICS WEST-CREE SWOO +1500 ; [.3A57.0020.0002] # CANADIAN SYLLABICS SWA +1501 ; [.3A58.0020.0002] # CANADIAN SYLLABICS WEST-CREE SWA +1502 ; [.3A59.0020.0002] # CANADIAN SYLLABICS SWAA +1503 ; [.3A5A.0020.0002] # CANADIAN SYLLABICS WEST-CREE SWAA +1504 ; [.3A5B.0020.0002] # CANADIAN SYLLABICS NASKAPI SWAA +1505 ; [.3A5C.0020.0002] # CANADIAN SYLLABICS S +1506 ; [.3A5D.0020.0002] # CANADIAN SYLLABICS ATHAPASCAN S +1507 ; [.3A5E.0020.0002] # CANADIAN SYLLABICS SW +1508 ; [.3A5F.0020.0002] # CANADIAN SYLLABICS BLACKFOOT S +1509 ; [.3A60.0020.0002] # CANADIAN SYLLABICS MOOSE-CREE SK +150A ; [.3A61.0020.0002] # CANADIAN SYLLABICS NASKAPI SKW +150B ; [.3A62.0020.0002] # CANADIAN SYLLABICS NASKAPI S-W +150C ; [.3A63.0020.0002] # CANADIAN SYLLABICS NASKAPI SPWA +150D ; [.3A64.0020.0002] # CANADIAN SYLLABICS NASKAPI STWA +150E ; [.3A65.0020.0002] # CANADIAN SYLLABICS NASKAPI SKWA +150F ; [.3A66.0020.0002] # CANADIAN SYLLABICS NASKAPI SCWA +1510 ; [.3A67.0020.0002] # CANADIAN SYLLABICS SHE +1511 ; [.3A68.0020.0002] # CANADIAN SYLLABICS SHI +1512 ; [.3A69.0020.0002] # CANADIAN SYLLABICS SHII +1513 ; [.3A6A.0020.0002] # CANADIAN SYLLABICS SHO +1514 ; [.3A6B.0020.0002] # CANADIAN SYLLABICS SHOO +1515 ; [.3A6C.0020.0002] # CANADIAN SYLLABICS SHA +1516 ; [.3A6D.0020.0002] # CANADIAN SYLLABICS SHAA +1517 ; [.3A6E.0020.0002] # CANADIAN SYLLABICS SHWE +1518 ; [.3A6F.0020.0002] # CANADIAN SYLLABICS WEST-CREE SHWE +1519 ; [.3A70.0020.0002] # CANADIAN SYLLABICS SHWI +151A ; [.3A71.0020.0002] # CANADIAN SYLLABICS WEST-CREE SHWI +151B ; [.3A72.0020.0002] # CANADIAN SYLLABICS SHWII +151C ; [.3A73.0020.0002] # CANADIAN SYLLABICS WEST-CREE SHWII +151D ; [.3A74.0020.0002] # CANADIAN SYLLABICS SHWO +151E ; [.3A75.0020.0002] # CANADIAN SYLLABICS WEST-CREE SHWO +151F ; [.3A76.0020.0002] # CANADIAN SYLLABICS SHWOO +1520 ; [.3A77.0020.0002] # CANADIAN SYLLABICS WEST-CREE SHWOO +1521 ; [.3A78.0020.0002] # CANADIAN SYLLABICS SHWA +1522 ; [.3A79.0020.0002] # CANADIAN SYLLABICS WEST-CREE SHWA +1523 ; [.3A7A.0020.0002] # CANADIAN SYLLABICS SHWAA +1524 ; [.3A7B.0020.0002] # CANADIAN SYLLABICS WEST-CREE SHWAA +1525 ; [.3A7C.0020.0002] # CANADIAN SYLLABICS SH +1526 ; [.3A7D.0020.0002] # CANADIAN SYLLABICS YE +1527 ; [.3A7E.0020.0002] # CANADIAN SYLLABICS YAAI +1528 ; [.3A7F.0020.0002] # CANADIAN SYLLABICS YI +1529 ; [.3A80.0020.0002] # CANADIAN SYLLABICS YII +152A ; [.3A81.0020.0002] # CANADIAN SYLLABICS YO +152B ; [.3A82.0020.0002] # CANADIAN SYLLABICS YOO +152C ; [.3A83.0020.0002] # CANADIAN SYLLABICS Y-CREE YOO +152D ; [.3A84.0020.0002] # CANADIAN SYLLABICS YA +152E ; [.3A85.0020.0002] # CANADIAN SYLLABICS YAA +152F ; [.3A86.0020.0002] # CANADIAN SYLLABICS YWE +1530 ; [.3A87.0020.0002] # CANADIAN SYLLABICS WEST-CREE YWE +1531 ; [.3A88.0020.0002] # CANADIAN SYLLABICS YWI +1532 ; [.3A89.0020.0002] # CANADIAN SYLLABICS WEST-CREE YWI +1533 ; [.3A8A.0020.0002] # CANADIAN SYLLABICS YWII +1534 ; [.3A8B.0020.0002] # CANADIAN SYLLABICS WEST-CREE YWII +1535 ; [.3A8C.0020.0002] # CANADIAN SYLLABICS YWO +1536 ; [.3A8D.0020.0002] # CANADIAN SYLLABICS WEST-CREE YWO +1537 ; [.3A8E.0020.0002] # CANADIAN SYLLABICS YWOO +1538 ; [.3A8F.0020.0002] # CANADIAN SYLLABICS WEST-CREE YWOO +1539 ; [.3A90.0020.0002] # CANADIAN SYLLABICS YWA +153A ; [.3A91.0020.0002] # CANADIAN SYLLABICS WEST-CREE YWA +153B ; [.3A92.0020.0002] # CANADIAN SYLLABICS YWAA +153C ; [.3A93.0020.0002] # CANADIAN SYLLABICS WEST-CREE YWAA +153D ; [.3A94.0020.0002] # CANADIAN SYLLABICS NASKAPI YWAA +153E ; [.3A95.0020.0002] # CANADIAN SYLLABICS Y +153F ; [.3A96.0020.0002] # CANADIAN SYLLABICS BIBLE-CREE Y +1540 ; [.3A97.0020.0002] # CANADIAN SYLLABICS WEST-CREE Y +1541 ; [.3A98.0020.0002] # CANADIAN SYLLABICS SAYISI YI +1542 ; [.3A99.0020.0002] # CANADIAN SYLLABICS RE +1543 ; [.3A9A.0020.0002] # CANADIAN SYLLABICS R-CREE RE +1544 ; [.3A9B.0020.0002] # CANADIAN SYLLABICS WEST-CREE LE +1545 ; [.3A9C.0020.0002] # CANADIAN SYLLABICS RAAI +1546 ; [.3A9D.0020.0002] # CANADIAN SYLLABICS RI +1547 ; [.3A9E.0020.0002] # CANADIAN SYLLABICS RII +1548 ; [.3A9F.0020.0002] # CANADIAN SYLLABICS RO +1549 ; [.3AA0.0020.0002] # CANADIAN SYLLABICS ROO +154A ; [.3AA1.0020.0002] # CANADIAN SYLLABICS WEST-CREE LO +154B ; [.3AA2.0020.0002] # CANADIAN SYLLABICS RA +154C ; [.3AA3.0020.0002] # CANADIAN SYLLABICS RAA +154D ; [.3AA4.0020.0002] # CANADIAN SYLLABICS WEST-CREE LA +154E ; [.3AA5.0020.0002] # CANADIAN SYLLABICS RWAA +154F ; [.3AA6.0020.0002] # CANADIAN SYLLABICS WEST-CREE RWAA +1550 ; [.3AA7.0020.0002] # CANADIAN SYLLABICS R +1551 ; [.3AA8.0020.0002] # CANADIAN SYLLABICS WEST-CREE R +1552 ; [.3AA9.0020.0002] # CANADIAN SYLLABICS MEDIAL R +1553 ; [.3AAA.0020.0002] # CANADIAN SYLLABICS FE +1554 ; [.3AAB.0020.0002] # CANADIAN SYLLABICS FAAI +1555 ; [.3AAC.0020.0002] # CANADIAN SYLLABICS FI +1556 ; [.3AAD.0020.0002] # CANADIAN SYLLABICS FII +1557 ; [.3AAE.0020.0002] # CANADIAN SYLLABICS FO +1558 ; [.3AAF.0020.0002] # CANADIAN SYLLABICS FOO +1559 ; [.3AB0.0020.0002] # CANADIAN SYLLABICS FA +155A ; [.3AB1.0020.0002] # CANADIAN SYLLABICS FAA +155B ; [.3AB2.0020.0002] # CANADIAN SYLLABICS FWAA +155C ; [.3AB3.0020.0002] # CANADIAN SYLLABICS WEST-CREE FWAA +155D ; [.3AB4.0020.0002] # CANADIAN SYLLABICS F +155E ; [.3AB5.0020.0002] # CANADIAN SYLLABICS THE +155F ; [.3AB6.0020.0002] # CANADIAN SYLLABICS N-CREE THE +1560 ; [.3AB7.0020.0002] # CANADIAN SYLLABICS THI +1561 ; [.3AB8.0020.0002] # CANADIAN SYLLABICS N-CREE THI +1562 ; [.3AB9.0020.0002] # CANADIAN SYLLABICS THII +1563 ; [.3ABA.0020.0002] # CANADIAN SYLLABICS N-CREE THII +1564 ; [.3ABB.0020.0002] # CANADIAN SYLLABICS THO +1565 ; [.3ABC.0020.0002] # CANADIAN SYLLABICS THOO +1566 ; [.3ABD.0020.0002] # CANADIAN SYLLABICS THA +1567 ; [.3ABE.0020.0002] # CANADIAN SYLLABICS THAA +1568 ; [.3ABF.0020.0002] # CANADIAN SYLLABICS THWAA +1569 ; [.3AC0.0020.0002] # CANADIAN SYLLABICS WEST-CREE THWAA +156A ; [.3AC1.0020.0002] # CANADIAN SYLLABICS TH +156B ; [.3AC2.0020.0002] # CANADIAN SYLLABICS TTHE +156C ; [.3AC3.0020.0002] # CANADIAN SYLLABICS TTHI +156D ; [.3AC4.0020.0002] # CANADIAN SYLLABICS TTHO +156E ; [.3AC5.0020.0002] # CANADIAN SYLLABICS TTHA +156F ; [.3AC6.0020.0002] # CANADIAN SYLLABICS TTH +1570 ; [.3AC7.0020.0002] # CANADIAN SYLLABICS TYE +1571 ; [.3AC8.0020.0002] # CANADIAN SYLLABICS TYI +1572 ; [.3AC9.0020.0002] # CANADIAN SYLLABICS TYO +1573 ; [.3ACA.0020.0002] # CANADIAN SYLLABICS TYA +1574 ; [.3ACB.0020.0002] # CANADIAN SYLLABICS NUNAVIK HE +1575 ; [.3ACC.0020.0002] # CANADIAN SYLLABICS NUNAVIK HI +1576 ; [.3ACD.0020.0002] # CANADIAN SYLLABICS NUNAVIK HII +1577 ; [.3ACE.0020.0002] # CANADIAN SYLLABICS NUNAVIK HO +1578 ; [.3ACF.0020.0002] # CANADIAN SYLLABICS NUNAVIK HOO +1579 ; [.3AD0.0020.0002] # CANADIAN SYLLABICS NUNAVIK HA +157A ; [.3AD1.0020.0002] # CANADIAN SYLLABICS NUNAVIK HAA +157B ; [.3AD2.0020.0002] # CANADIAN SYLLABICS NUNAVIK H +157D ; [.3AD3.0020.0002] # CANADIAN SYLLABICS HK +166F ; [.3AD4.0020.0002] # CANADIAN SYLLABICS QAI +157E ; [.3AD5.0020.0002] # CANADIAN SYLLABICS QAAI +157F ; [.3AD6.0020.0002] # CANADIAN SYLLABICS QI +1580 ; [.3AD7.0020.0002] # CANADIAN SYLLABICS QII +1581 ; [.3AD8.0020.0002] # CANADIAN SYLLABICS QO +1582 ; [.3AD9.0020.0002] # CANADIAN SYLLABICS QOO +1583 ; [.3ADA.0020.0002] # CANADIAN SYLLABICS QA +1584 ; [.3ADB.0020.0002] # CANADIAN SYLLABICS QAA +1585 ; [.3ADC.0020.0002] # CANADIAN SYLLABICS Q +1586 ; [.3ADD.0020.0002] # CANADIAN SYLLABICS TLHE +1587 ; [.3ADE.0020.0002] # CANADIAN SYLLABICS TLHI +1588 ; [.3ADF.0020.0002] # CANADIAN SYLLABICS TLHO +1589 ; [.3AE0.0020.0002] # CANADIAN SYLLABICS TLHA +158A ; [.3AE1.0020.0002] # CANADIAN SYLLABICS WEST-CREE RE +158B ; [.3AE2.0020.0002] # CANADIAN SYLLABICS WEST-CREE RI +158C ; [.3AE3.0020.0002] # CANADIAN SYLLABICS WEST-CREE RO +158D ; [.3AE4.0020.0002] # CANADIAN SYLLABICS WEST-CREE RA +1670 ; [.3AE5.0020.0002] # CANADIAN SYLLABICS NGAI +158E ; [.3AE6.0020.0002] # CANADIAN SYLLABICS NGAAI +158F ; [.3AE7.0020.0002] # CANADIAN SYLLABICS NGI +1590 ; [.3AE8.0020.0002] # CANADIAN SYLLABICS NGII +1591 ; [.3AE9.0020.0002] # CANADIAN SYLLABICS NGO +1592 ; [.3AEA.0020.0002] # CANADIAN SYLLABICS NGOO +1593 ; [.3AEB.0020.0002] # CANADIAN SYLLABICS NGA +1594 ; [.3AEC.0020.0002] # CANADIAN SYLLABICS NGAA +1595 ; [.3AED.0020.0002] # CANADIAN SYLLABICS NG +1671 ; [.3AEE.0020.0002] # CANADIAN SYLLABICS NNGI +1672 ; [.3AEF.0020.0002] # CANADIAN SYLLABICS NNGII +1673 ; [.3AF0.0020.0002] # CANADIAN SYLLABICS NNGO +1674 ; [.3AF1.0020.0002] # CANADIAN SYLLABICS NNGOO +1675 ; [.3AF2.0020.0002] # CANADIAN SYLLABICS NNGA +1676 ; [.3AF3.0020.0002] # CANADIAN SYLLABICS NNGAA +1596 ; [.3AF4.0020.0002] # CANADIAN SYLLABICS NNG +1597 ; [.3AF5.0020.0002] # CANADIAN SYLLABICS SAYISI SHE +1598 ; [.3AF6.0020.0002] # CANADIAN SYLLABICS SAYISI SHI +1599 ; [.3AF7.0020.0002] # CANADIAN SYLLABICS SAYISI SHO +159A ; [.3AF8.0020.0002] # CANADIAN SYLLABICS SAYISI SHA +159B ; [.3AF9.0020.0002] # CANADIAN SYLLABICS WOODS-CREE THE +159C ; [.3AFA.0020.0002] # CANADIAN SYLLABICS WOODS-CREE THI +159D ; [.3AFB.0020.0002] # CANADIAN SYLLABICS WOODS-CREE THO +159E ; [.3AFC.0020.0002] # CANADIAN SYLLABICS WOODS-CREE THA +159F ; [.3AFD.0020.0002] # CANADIAN SYLLABICS WOODS-CREE TH +15A0 ; [.3AFE.0020.0002] # CANADIAN SYLLABICS LHI +15A1 ; [.3AFF.0020.0002] # CANADIAN SYLLABICS LHII +15A2 ; [.3B00.0020.0002] # CANADIAN SYLLABICS LHO +15A3 ; [.3B01.0020.0002] # CANADIAN SYLLABICS LHOO +15A4 ; [.3B02.0020.0002] # CANADIAN SYLLABICS LHA +15A5 ; [.3B03.0020.0002] # CANADIAN SYLLABICS LHAA +15A6 ; [.3B04.0020.0002] # CANADIAN SYLLABICS LH +157C ; [.3B05.0020.0002] # CANADIAN SYLLABICS NUNAVUT H +15A7 ; [.3B06.0020.0002] # CANADIAN SYLLABICS TH-CREE THE +15A8 ; [.3B07.0020.0002] # CANADIAN SYLLABICS TH-CREE THI +15A9 ; [.3B08.0020.0002] # CANADIAN SYLLABICS TH-CREE THII +15AA ; [.3B09.0020.0002] # CANADIAN SYLLABICS TH-CREE THO +15AB ; [.3B0A.0020.0002] # CANADIAN SYLLABICS TH-CREE THOO +15AC ; [.3B0B.0020.0002] # CANADIAN SYLLABICS TH-CREE THA +15AD ; [.3B0C.0020.0002] # CANADIAN SYLLABICS TH-CREE THAA +15AE ; [.3B0D.0020.0002] # CANADIAN SYLLABICS TH-CREE TH +15AF ; [.3B0E.0020.0002] # CANADIAN SYLLABICS AIVILIK B +15B0 ; [.3B0F.0020.0002] # CANADIAN SYLLABICS BLACKFOOT E +15B1 ; [.3B10.0020.0002] # CANADIAN SYLLABICS BLACKFOOT I +15B2 ; [.3B11.0020.0002] # CANADIAN SYLLABICS BLACKFOOT O +15B3 ; [.3B12.0020.0002] # CANADIAN SYLLABICS BLACKFOOT A +15B4 ; [.3B13.0020.0002] # CANADIAN SYLLABICS BLACKFOOT WE +15B5 ; [.3B14.0020.0002] # CANADIAN SYLLABICS BLACKFOOT WI +15B6 ; [.3B15.0020.0002] # CANADIAN SYLLABICS BLACKFOOT WO +15B7 ; [.3B16.0020.0002] # CANADIAN SYLLABICS BLACKFOOT WA +15B8 ; [.3B17.0020.0002] # CANADIAN SYLLABICS BLACKFOOT NE +15B9 ; [.3B18.0020.0002] # CANADIAN SYLLABICS BLACKFOOT NI +15BA ; [.3B19.0020.0002] # CANADIAN SYLLABICS BLACKFOOT NO +15BB ; [.3B1A.0020.0002] # CANADIAN SYLLABICS BLACKFOOT NA +15BC ; [.3B1B.0020.0002] # CANADIAN SYLLABICS BLACKFOOT KE +15BD ; [.3B1C.0020.0002] # CANADIAN SYLLABICS BLACKFOOT KI +15BE ; [.3B1D.0020.0002] # CANADIAN SYLLABICS BLACKFOOT KO +15BF ; [.3B1E.0020.0002] # CANADIAN SYLLABICS BLACKFOOT KA +15C0 ; [.3B1F.0020.0002] # CANADIAN SYLLABICS SAYISI HE +15C1 ; [.3B20.0020.0002] # CANADIAN SYLLABICS SAYISI HI +15C2 ; [.3B21.0020.0002] # CANADIAN SYLLABICS SAYISI HO +15C3 ; [.3B22.0020.0002] # CANADIAN SYLLABICS SAYISI HA +15C4 ; [.3B23.0020.0002] # CANADIAN SYLLABICS CARRIER GHU +15C5 ; [.3B24.0020.0002] # CANADIAN SYLLABICS CARRIER GHO +15C6 ; [.3B25.0020.0002] # CANADIAN SYLLABICS CARRIER GHE +15C7 ; [.3B26.0020.0002] # CANADIAN SYLLABICS CARRIER GHEE +15C8 ; [.3B27.0020.0002] # CANADIAN SYLLABICS CARRIER GHI +15C9 ; [.3B28.0020.0002] # CANADIAN SYLLABICS CARRIER GHA +15CA ; [.3B29.0020.0002] # CANADIAN SYLLABICS CARRIER RU +15CB ; [.3B2A.0020.0002] # CANADIAN SYLLABICS CARRIER RO +15CC ; [.3B2B.0020.0002] # CANADIAN SYLLABICS CARRIER RE +15CD ; [.3B2C.0020.0002] # CANADIAN SYLLABICS CARRIER REE +15CE ; [.3B2D.0020.0002] # CANADIAN SYLLABICS CARRIER RI +15CF ; [.3B2E.0020.0002] # CANADIAN SYLLABICS CARRIER RA +15D0 ; [.3B2F.0020.0002] # CANADIAN SYLLABICS CARRIER WU +15D1 ; [.3B30.0020.0002] # CANADIAN SYLLABICS CARRIER WO +15D2 ; [.3B31.0020.0002] # CANADIAN SYLLABICS CARRIER WE +15D3 ; [.3B32.0020.0002] # CANADIAN SYLLABICS CARRIER WEE +15D4 ; [.3B33.0020.0002] # CANADIAN SYLLABICS CARRIER WI +15D5 ; [.3B34.0020.0002] # CANADIAN SYLLABICS CARRIER WA +15D6 ; [.3B35.0020.0002] # CANADIAN SYLLABICS CARRIER HWU +15D7 ; [.3B36.0020.0002] # CANADIAN SYLLABICS CARRIER HWO +15D8 ; [.3B37.0020.0002] # CANADIAN SYLLABICS CARRIER HWE +15D9 ; [.3B38.0020.0002] # CANADIAN SYLLABICS CARRIER HWEE +15DA ; [.3B39.0020.0002] # CANADIAN SYLLABICS CARRIER HWI +15DB ; [.3B3A.0020.0002] # CANADIAN SYLLABICS CARRIER HWA +15DC ; [.3B3B.0020.0002] # CANADIAN SYLLABICS CARRIER THU +15DD ; [.3B3C.0020.0002] # CANADIAN SYLLABICS CARRIER THO +15DE ; [.3B3D.0020.0002] # CANADIAN SYLLABICS CARRIER THE +15DF ; [.3B3E.0020.0002] # CANADIAN SYLLABICS CARRIER THEE +15E0 ; [.3B3F.0020.0002] # CANADIAN SYLLABICS CARRIER THI +15E1 ; [.3B40.0020.0002] # CANADIAN SYLLABICS CARRIER THA +15E2 ; [.3B41.0020.0002] # CANADIAN SYLLABICS CARRIER TTU +15E3 ; [.3B42.0020.0002] # CANADIAN SYLLABICS CARRIER TTO +15E4 ; [.3B43.0020.0002] # CANADIAN SYLLABICS CARRIER TTE +15E5 ; [.3B44.0020.0002] # CANADIAN SYLLABICS CARRIER TTEE +15E6 ; [.3B45.0020.0002] # CANADIAN SYLLABICS CARRIER TTI +15E7 ; [.3B46.0020.0002] # CANADIAN SYLLABICS CARRIER TTA +15E8 ; [.3B47.0020.0002] # CANADIAN SYLLABICS CARRIER PU +15E9 ; [.3B48.0020.0002] # CANADIAN SYLLABICS CARRIER PO +15EA ; [.3B49.0020.0002] # CANADIAN SYLLABICS CARRIER PE +15EB ; [.3B4A.0020.0002] # CANADIAN SYLLABICS CARRIER PEE +15EC ; [.3B4B.0020.0002] # CANADIAN SYLLABICS CARRIER PI +15ED ; [.3B4C.0020.0002] # CANADIAN SYLLABICS CARRIER PA +15EE ; [.3B4D.0020.0002] # CANADIAN SYLLABICS CARRIER P +15EF ; [.3B4E.0020.0002] # CANADIAN SYLLABICS CARRIER GU +15F0 ; [.3B4F.0020.0002] # CANADIAN SYLLABICS CARRIER GO +15F1 ; [.3B50.0020.0002] # CANADIAN SYLLABICS CARRIER GE +15F2 ; [.3B51.0020.0002] # CANADIAN SYLLABICS CARRIER GEE +15F3 ; [.3B52.0020.0002] # CANADIAN SYLLABICS CARRIER GI +15F4 ; [.3B53.0020.0002] # CANADIAN SYLLABICS CARRIER GA +15F5 ; [.3B54.0020.0002] # CANADIAN SYLLABICS CARRIER KHU +15F6 ; [.3B55.0020.0002] # CANADIAN SYLLABICS CARRIER KHO +15F7 ; [.3B56.0020.0002] # CANADIAN SYLLABICS CARRIER KHE +15F8 ; [.3B57.0020.0002] # CANADIAN SYLLABICS CARRIER KHEE +15F9 ; [.3B58.0020.0002] # CANADIAN SYLLABICS CARRIER KHI +15FA ; [.3B59.0020.0002] # CANADIAN SYLLABICS CARRIER KHA +15FB ; [.3B5A.0020.0002] # CANADIAN SYLLABICS CARRIER KKU +15FC ; [.3B5B.0020.0002] # CANADIAN SYLLABICS CARRIER KKO +15FD ; [.3B5C.0020.0002] # CANADIAN SYLLABICS CARRIER KKE +15FE ; [.3B5D.0020.0002] # CANADIAN SYLLABICS CARRIER KKEE +15FF ; [.3B5E.0020.0002] # CANADIAN SYLLABICS CARRIER KKI +1600 ; [.3B5F.0020.0002] # CANADIAN SYLLABICS CARRIER KKA +1601 ; [.3B60.0020.0002] # CANADIAN SYLLABICS CARRIER KK +1602 ; [.3B61.0020.0002] # CANADIAN SYLLABICS CARRIER NU +1603 ; [.3B62.0020.0002] # CANADIAN SYLLABICS CARRIER NO +1604 ; [.3B63.0020.0002] # CANADIAN SYLLABICS CARRIER NE +1605 ; [.3B64.0020.0002] # CANADIAN SYLLABICS CARRIER NEE +1606 ; [.3B65.0020.0002] # CANADIAN SYLLABICS CARRIER NI +1607 ; [.3B66.0020.0002] # CANADIAN SYLLABICS CARRIER NA +1608 ; [.3B67.0020.0002] # CANADIAN SYLLABICS CARRIER MU +1609 ; [.3B68.0020.0002] # CANADIAN SYLLABICS CARRIER MO +160A ; [.3B69.0020.0002] # CANADIAN SYLLABICS CARRIER ME +160B ; [.3B6A.0020.0002] # CANADIAN SYLLABICS CARRIER MEE +160C ; [.3B6B.0020.0002] # CANADIAN SYLLABICS CARRIER MI +160D ; [.3B6C.0020.0002] # CANADIAN SYLLABICS CARRIER MA +160E ; [.3B6D.0020.0002] # CANADIAN SYLLABICS CARRIER YU +160F ; [.3B6E.0020.0002] # CANADIAN SYLLABICS CARRIER YO +1610 ; [.3B6F.0020.0002] # CANADIAN SYLLABICS CARRIER YE +1611 ; [.3B70.0020.0002] # CANADIAN SYLLABICS CARRIER YEE +1612 ; [.3B71.0020.0002] # CANADIAN SYLLABICS CARRIER YI +1613 ; [.3B72.0020.0002] # CANADIAN SYLLABICS CARRIER YA +1614 ; [.3B73.0020.0002] # CANADIAN SYLLABICS CARRIER JU +1615 ; [.3B74.0020.0002] # CANADIAN SYLLABICS SAYISI JU +1616 ; [.3B75.0020.0002] # CANADIAN SYLLABICS CARRIER JO +1617 ; [.3B76.0020.0002] # CANADIAN SYLLABICS CARRIER JE +1618 ; [.3B77.0020.0002] # CANADIAN SYLLABICS CARRIER JEE +1619 ; [.3B78.0020.0002] # CANADIAN SYLLABICS CARRIER JI +161A ; [.3B79.0020.0002] # CANADIAN SYLLABICS SAYISI JI +161B ; [.3B7A.0020.0002] # CANADIAN SYLLABICS CARRIER JA +161C ; [.3B7B.0020.0002] # CANADIAN SYLLABICS CARRIER JJU +161D ; [.3B7C.0020.0002] # CANADIAN SYLLABICS CARRIER JJO +161E ; [.3B7D.0020.0002] # CANADIAN SYLLABICS CARRIER JJE +161F ; [.3B7E.0020.0002] # CANADIAN SYLLABICS CARRIER JJEE +1620 ; [.3B7F.0020.0002] # CANADIAN SYLLABICS CARRIER JJI +1621 ; [.3B80.0020.0002] # CANADIAN SYLLABICS CARRIER JJA +1622 ; [.3B81.0020.0002] # CANADIAN SYLLABICS CARRIER LU +1623 ; [.3B82.0020.0002] # CANADIAN SYLLABICS CARRIER LO +1624 ; [.3B83.0020.0002] # CANADIAN SYLLABICS CARRIER LE +1625 ; [.3B84.0020.0002] # CANADIAN SYLLABICS CARRIER LEE +1626 ; [.3B85.0020.0002] # CANADIAN SYLLABICS CARRIER LI +1627 ; [.3B86.0020.0002] # CANADIAN SYLLABICS CARRIER LA +1628 ; [.3B87.0020.0002] # CANADIAN SYLLABICS CARRIER DLU +1629 ; [.3B88.0020.0002] # CANADIAN SYLLABICS CARRIER DLO +162A ; [.3B89.0020.0002] # CANADIAN SYLLABICS CARRIER DLE +162B ; [.3B8A.0020.0002] # CANADIAN SYLLABICS CARRIER DLEE +162C ; [.3B8B.0020.0002] # CANADIAN SYLLABICS CARRIER DLI +162D ; [.3B8C.0020.0002] # CANADIAN SYLLABICS CARRIER DLA +162E ; [.3B8D.0020.0002] # CANADIAN SYLLABICS CARRIER LHU +162F ; [.3B8E.0020.0002] # CANADIAN SYLLABICS CARRIER LHO +1630 ; [.3B8F.0020.0002] # CANADIAN SYLLABICS CARRIER LHE +1631 ; [.3B90.0020.0002] # CANADIAN SYLLABICS CARRIER LHEE +1632 ; [.3B91.0020.0002] # CANADIAN SYLLABICS CARRIER LHI +1633 ; [.3B92.0020.0002] # CANADIAN SYLLABICS CARRIER LHA +1634 ; [.3B93.0020.0002] # CANADIAN SYLLABICS CARRIER TLHU +1635 ; [.3B94.0020.0002] # CANADIAN SYLLABICS CARRIER TLHO +1636 ; [.3B95.0020.0002] # CANADIAN SYLLABICS CARRIER TLHE +1637 ; [.3B96.0020.0002] # CANADIAN SYLLABICS CARRIER TLHEE +1638 ; [.3B97.0020.0002] # CANADIAN SYLLABICS CARRIER TLHI +1639 ; [.3B98.0020.0002] # CANADIAN SYLLABICS CARRIER TLHA +163A ; [.3B99.0020.0002] # CANADIAN SYLLABICS CARRIER TLU +163B ; [.3B9A.0020.0002] # CANADIAN SYLLABICS CARRIER TLO +163C ; [.3B9B.0020.0002] # CANADIAN SYLLABICS CARRIER TLE +163D ; [.3B9C.0020.0002] # CANADIAN SYLLABICS CARRIER TLEE +163E ; [.3B9D.0020.0002] # CANADIAN SYLLABICS CARRIER TLI +163F ; [.3B9E.0020.0002] # CANADIAN SYLLABICS CARRIER TLA +1640 ; [.3B9F.0020.0002] # CANADIAN SYLLABICS CARRIER ZU +1641 ; [.3BA0.0020.0002] # CANADIAN SYLLABICS CARRIER ZO +1642 ; [.3BA1.0020.0002] # CANADIAN SYLLABICS CARRIER ZE +1643 ; [.3BA2.0020.0002] # CANADIAN SYLLABICS CARRIER ZEE +1644 ; [.3BA3.0020.0002] # CANADIAN SYLLABICS CARRIER ZI +1645 ; [.3BA4.0020.0002] # CANADIAN SYLLABICS CARRIER ZA +1646 ; [.3BA5.0020.0002] # CANADIAN SYLLABICS CARRIER Z +1647 ; [.3BA6.0020.0002] # CANADIAN SYLLABICS CARRIER INITIAL Z +1648 ; [.3BA7.0020.0002] # CANADIAN SYLLABICS CARRIER DZU +1649 ; [.3BA8.0020.0002] # CANADIAN SYLLABICS CARRIER DZO +164A ; [.3BA9.0020.0002] # CANADIAN SYLLABICS CARRIER DZE +164B ; [.3BAA.0020.0002] # CANADIAN SYLLABICS CARRIER DZEE +164C ; [.3BAB.0020.0002] # CANADIAN SYLLABICS CARRIER DZI +164D ; [.3BAC.0020.0002] # CANADIAN SYLLABICS CARRIER DZA +164E ; [.3BAD.0020.0002] # CANADIAN SYLLABICS CARRIER SU +164F ; [.3BAE.0020.0002] # CANADIAN SYLLABICS CARRIER SO +1650 ; [.3BAF.0020.0002] # CANADIAN SYLLABICS CARRIER SE +1651 ; [.3BB0.0020.0002] # CANADIAN SYLLABICS CARRIER SEE +1652 ; [.3BB1.0020.0002] # CANADIAN SYLLABICS CARRIER SI +1653 ; [.3BB2.0020.0002] # CANADIAN SYLLABICS CARRIER SA +1654 ; [.3BB3.0020.0002] # CANADIAN SYLLABICS CARRIER SHU +1655 ; [.3BB4.0020.0002] # CANADIAN SYLLABICS CARRIER SHO +1656 ; [.3BB5.0020.0002] # CANADIAN SYLLABICS CARRIER SHE +1657 ; [.3BB6.0020.0002] # CANADIAN SYLLABICS CARRIER SHEE +1658 ; [.3BB7.0020.0002] # CANADIAN SYLLABICS CARRIER SHI +1659 ; [.3BB8.0020.0002] # CANADIAN SYLLABICS CARRIER SHA +165A ; [.3BB9.0020.0002] # CANADIAN SYLLABICS CARRIER SH +165B ; [.3BBA.0020.0002] # CANADIAN SYLLABICS CARRIER TSU +165C ; [.3BBB.0020.0002] # CANADIAN SYLLABICS CARRIER TSO +165D ; [.3BBC.0020.0002] # CANADIAN SYLLABICS CARRIER TSE +165E ; [.3BBD.0020.0002] # CANADIAN SYLLABICS CARRIER TSEE +165F ; [.3BBE.0020.0002] # CANADIAN SYLLABICS CARRIER TSI +1660 ; [.3BBF.0020.0002] # CANADIAN SYLLABICS CARRIER TSA +1661 ; [.3BC0.0020.0002] # CANADIAN SYLLABICS CARRIER CHU +1662 ; [.3BC1.0020.0002] # CANADIAN SYLLABICS CARRIER CHO +1663 ; [.3BC2.0020.0002] # CANADIAN SYLLABICS CARRIER CHE +1664 ; [.3BC3.0020.0002] # CANADIAN SYLLABICS CARRIER CHEE +1665 ; [.3BC4.0020.0002] # CANADIAN SYLLABICS CARRIER CHI +1666 ; [.3BC5.0020.0002] # CANADIAN SYLLABICS CARRIER CHA +1667 ; [.3BC6.0020.0002] # CANADIAN SYLLABICS CARRIER TTSU +1668 ; [.3BC7.0020.0002] # CANADIAN SYLLABICS CARRIER TTSO +1669 ; [.3BC8.0020.0002] # CANADIAN SYLLABICS CARRIER TTSE +166A ; [.3BC9.0020.0002] # CANADIAN SYLLABICS CARRIER TTSEE +166B ; [.3BCA.0020.0002] # CANADIAN SYLLABICS CARRIER TTSI +166C ; [.3BCB.0020.0002] # CANADIAN SYLLABICS CARRIER TTSA +1677 ; [.3BCC.0020.0002] # CANADIAN SYLLABICS WOODS-CREE THWEE +1678 ; [.3BCD.0020.0002] # CANADIAN SYLLABICS WOODS-CREE THWI +1679 ; [.3BCE.0020.0002] # CANADIAN SYLLABICS WOODS-CREE THWII +167A ; [.3BCF.0020.0002] # CANADIAN SYLLABICS WOODS-CREE THWO +167B ; [.3BD0.0020.0002] # CANADIAN SYLLABICS WOODS-CREE THWOO +167C ; [.3BD1.0020.0002] # CANADIAN SYLLABICS WOODS-CREE THWA +167D ; [.3BD2.0020.0002] # CANADIAN SYLLABICS WOODS-CREE THWAA +167E ; [.3BD3.0020.0002] # CANADIAN SYLLABICS WOODS-CREE FINAL TH +167F ; [.3BD4.0020.0002] # CANADIAN SYLLABICS BLACKFOOT W +18B0 ; [.3BD5.0020.0002] # CANADIAN SYLLABICS OY +18B1 ; [.3BD6.0020.0002] # CANADIAN SYLLABICS AY +18B2 ; [.3BD7.0020.0002] # CANADIAN SYLLABICS AAY +18B3 ; [.3BD8.0020.0002] # CANADIAN SYLLABICS WAY +18B4 ; [.3BD9.0020.0002] # CANADIAN SYLLABICS POY +18B5 ; [.3BDA.0020.0002] # CANADIAN SYLLABICS PAY +18B6 ; [.3BDB.0020.0002] # CANADIAN SYLLABICS PWOY +18B7 ; [.3BDC.0020.0002] # CANADIAN SYLLABICS TAY +18B8 ; [.3BDD.0020.0002] # CANADIAN SYLLABICS KAY +18B9 ; [.3BDE.0020.0002] # CANADIAN SYLLABICS KWAY +18BA ; [.3BDF.0020.0002] # CANADIAN SYLLABICS MAY +18BB ; [.3BE0.0020.0002] # CANADIAN SYLLABICS NOY +18BC ; [.3BE1.0020.0002] # CANADIAN SYLLABICS NAY +18BD ; [.3BE2.0020.0002] # CANADIAN SYLLABICS LAY +18BE ; [.3BE3.0020.0002] # CANADIAN SYLLABICS SOY +18BF ; [.3BE4.0020.0002] # CANADIAN SYLLABICS SAY +18C0 ; [.3BE5.0020.0002] # CANADIAN SYLLABICS SHOY +18C1 ; [.3BE6.0020.0002] # CANADIAN SYLLABICS SHAY +18C2 ; [.3BE7.0020.0002] # CANADIAN SYLLABICS SHWOY +18C3 ; [.3BE8.0020.0002] # CANADIAN SYLLABICS YOY +18C4 ; [.3BE9.0020.0002] # CANADIAN SYLLABICS YAY +18C5 ; [.3BEA.0020.0002] # CANADIAN SYLLABICS RAY +18C6 ; [.3BEB.0020.0002] # CANADIAN SYLLABICS NWI +18C7 ; [.3BEC.0020.0002] # CANADIAN SYLLABICS OJIBWAY NWI +18C8 ; [.3BED.0020.0002] # CANADIAN SYLLABICS NWII +18C9 ; [.3BEE.0020.0002] # CANADIAN SYLLABICS OJIBWAY NWII +18CA ; [.3BEF.0020.0002] # CANADIAN SYLLABICS NWO +18CB ; [.3BF0.0020.0002] # CANADIAN SYLLABICS OJIBWAY NWO +18CC ; [.3BF1.0020.0002] # CANADIAN SYLLABICS NWOO +18CD ; [.3BF2.0020.0002] # CANADIAN SYLLABICS OJIBWAY NWOO +18CE ; [.3BF3.0020.0002] # CANADIAN SYLLABICS RWEE +18CF ; [.3BF4.0020.0002] # CANADIAN SYLLABICS RWI +18D0 ; [.3BF5.0020.0002] # CANADIAN SYLLABICS RWII +18D1 ; [.3BF6.0020.0002] # CANADIAN SYLLABICS RWO +18D2 ; [.3BF7.0020.0002] # CANADIAN SYLLABICS RWOO +18D3 ; [.3BF8.0020.0002] # CANADIAN SYLLABICS RWA +18D4 ; [.3BF9.0020.0002] # CANADIAN SYLLABICS OJIBWAY P +18D5 ; [.3BFA.0020.0002] # CANADIAN SYLLABICS OJIBWAY T +18D6 ; [.3BFB.0020.0002] # CANADIAN SYLLABICS OJIBWAY K +18D7 ; [.3BFC.0020.0002] # CANADIAN SYLLABICS OJIBWAY C +18D8 ; [.3BFD.0020.0002] # CANADIAN SYLLABICS OJIBWAY M +18D9 ; [.3BFE.0020.0002] # CANADIAN SYLLABICS OJIBWAY N +18DA ; [.3BFF.0020.0002] # CANADIAN SYLLABICS OJIBWAY S +18DB ; [.3C00.0020.0002] # CANADIAN SYLLABICS OJIBWAY SH +18DC ; [.3C01.0020.0002] # CANADIAN SYLLABICS EASTERN W +18DD ; [.3C02.0020.0002] # CANADIAN SYLLABICS WESTERN W +18DE ; [.3C03.0020.0002] # CANADIAN SYLLABICS FINAL SMALL RING +18DF ; [.3C04.0020.0002] # CANADIAN SYLLABICS FINAL RAISED DOT +18E0 ; [.3C05.0020.0002] # CANADIAN SYLLABICS R-CREE RWE +18E1 ; [.3C06.0020.0002] # CANADIAN SYLLABICS WEST-CREE LOO +18E2 ; [.3C07.0020.0002] # CANADIAN SYLLABICS WEST-CREE LAA +18E3 ; [.3C08.0020.0002] # CANADIAN SYLLABICS THWE +18E4 ; [.3C09.0020.0002] # CANADIAN SYLLABICS THWA +18E5 ; [.3C0A.0020.0002] # CANADIAN SYLLABICS TTHWE +18E6 ; [.3C0B.0020.0002] # CANADIAN SYLLABICS TTHOO +18E7 ; [.3C0C.0020.0002] # CANADIAN SYLLABICS TTHAA +18E8 ; [.3C0D.0020.0002] # CANADIAN SYLLABICS TLHWE +18E9 ; [.3C0E.0020.0002] # CANADIAN SYLLABICS TLHOO +18EA ; [.3C0F.0020.0002] # CANADIAN SYLLABICS SAYISI SHWE +18EB ; [.3C10.0020.0002] # CANADIAN SYLLABICS SAYISI SHOO +18EC ; [.3C11.0020.0002] # CANADIAN SYLLABICS SAYISI HOO +18ED ; [.3C12.0020.0002] # CANADIAN SYLLABICS CARRIER GWU +18EE ; [.3C13.0020.0002] # CANADIAN SYLLABICS CARRIER DENE GEE +18EF ; [.3C14.0020.0002] # CANADIAN SYLLABICS CARRIER GAA +18F0 ; [.3C15.0020.0002] # CANADIAN SYLLABICS CARRIER GWA +18F1 ; [.3C16.0020.0002] # CANADIAN SYLLABICS SAYISI JUU +18F2 ; [.3C17.0020.0002] # CANADIAN SYLLABICS CARRIER JWA +18F3 ; [.3C18.0020.0002] # CANADIAN SYLLABICS BEAVER DENE L +18F4 ; [.3C19.0020.0002] # CANADIAN SYLLABICS BEAVER DENE R +18F5 ; [.3C1A.0020.0002] # CANADIAN SYLLABICS CARRIER DENTAL S +1681 ; [.3C1B.0020.0002] # OGHAM LETTER BEITH +1682 ; [.3C1C.0020.0002] # OGHAM LETTER LUIS +1683 ; [.3C1D.0020.0002] # OGHAM LETTER FEARN +1684 ; [.3C1E.0020.0002] # OGHAM LETTER SAIL +1685 ; [.3C1F.0020.0002] # OGHAM LETTER NION +1686 ; [.3C20.0020.0002] # OGHAM LETTER UATH +1687 ; [.3C21.0020.0002] # OGHAM LETTER DAIR +1688 ; [.3C22.0020.0002] # OGHAM LETTER TINNE +1689 ; [.3C23.0020.0002] # OGHAM LETTER COLL +168A ; [.3C24.0020.0002] # OGHAM LETTER CEIRT +168B ; [.3C25.0020.0002] # OGHAM LETTER MUIN +168C ; [.3C26.0020.0002] # OGHAM LETTER GORT +168D ; [.3C27.0020.0002] # OGHAM LETTER NGEADAL +168E ; [.3C28.0020.0002] # OGHAM LETTER STRAIF +168F ; [.3C29.0020.0002] # OGHAM LETTER RUIS +1690 ; [.3C2A.0020.0002] # OGHAM LETTER AILM +1691 ; [.3C2B.0020.0002] # OGHAM LETTER ONN +1692 ; [.3C2C.0020.0002] # OGHAM LETTER UR +1693 ; [.3C2D.0020.0002] # OGHAM LETTER EADHADH +1694 ; [.3C2E.0020.0002] # OGHAM LETTER IODHADH +1695 ; [.3C2F.0020.0002] # OGHAM LETTER EABHADH +1696 ; [.3C30.0020.0002] # OGHAM LETTER OR +1697 ; [.3C31.0020.0002] # OGHAM LETTER UILLEANN +1698 ; [.3C32.0020.0002] # OGHAM LETTER IFIN +1699 ; [.3C33.0020.0002] # OGHAM LETTER EAMHANCHOLL +169A ; [.3C34.0020.0002] # OGHAM LETTER PEITH +16A0 ; [.3C35.0020.0002] # RUNIC LETTER FEHU FEOH FE F +16A1 ; [.3C35.0020.0004][.0000.0118.0004] # RUNIC LETTER V +16A2 ; [.3C36.0020.0002] # RUNIC LETTER URUZ UR U +16A4 ; [.3C36.0020.0004][.0000.0118.0004] # RUNIC LETTER Y +16A5 ; [.3C36.0020.0004][.0000.0119.0004] # RUNIC LETTER W +16A6 ; [.3C37.0020.0002] # RUNIC LETTER THURISAZ THURS THORN +16A7 ; [.3C37.0020.0004][.0000.0118.0004] # RUNIC LETTER ETH +16F0 ; [.3C37.0020.0004][.3C37.0020.0004] # RUNIC BELGTHOR SYMBOL +16A8 ; [.3C38.0020.0002] # RUNIC LETTER ANSUZ A +16A9 ; [.3C38.0020.0004][.0000.0118.0004] # RUNIC LETTER OS O +16AC ; [.3C38.0020.0004][.0000.0119.0004] # RUNIC LETTER LONG-BRANCH-OSS O +16AD ; [.3C38.0020.0004][.0000.011A.0004] # RUNIC LETTER SHORT-TWIG-OSS O +16AE ; [.3C38.0020.0004][.0000.011B.0004] # RUNIC LETTER O +16F4 ; [.3C39.0020.0002] # RUNIC LETTER FRANKS CASKET OS +16AF ; [.3C3A.0020.0002] # RUNIC LETTER OE +16B0 ; [.3C3B.0020.0002] # RUNIC LETTER ON +16B1 ; [.3C3C.0020.0002] # RUNIC LETTER RAIDO RAD REID R +16B2 ; [.3C3D.0020.0002] # RUNIC LETTER KAUNA +16B3 ; [.3C3D.0020.0004][.0000.0118.0004] # RUNIC LETTER CEN +16B4 ; [.3C3D.0020.0004][.0000.0119.0004] # RUNIC LETTER KAUN K +16B5 ; [.3C3D.0020.0004][.0000.011A.0004] # RUNIC LETTER G +16B6 ; [.3C3D.0020.0004][.0000.011B.0004] # RUNIC LETTER ENG +16F1 ; [.3C3E.0020.0002] # RUNIC LETTER K +16B7 ; [.3C3F.0020.0002] # RUNIC LETTER GEBO GYFU G +16B9 ; [.3C40.0020.0002] # RUNIC LETTER WUNJO WYNN W +16E9 ; [.3C40.0020.0004][.0000.0118.0004] # RUNIC LETTER Q +16BA ; [.3C41.0020.0002] # RUNIC LETTER HAGLAZ H +16BB ; [.3C41.0020.0004][.0000.0118.0004] # RUNIC LETTER HAEGL H +16BC ; [.3C41.0020.0004][.0000.0119.0004] # RUNIC LETTER LONG-BRANCH-HAGALL H +16BD ; [.3C41.0020.0004][.0000.011A.0004] # RUNIC LETTER SHORT-TWIG-HAGALL H +16BE ; [.3C42.0020.0002] # RUNIC LETTER NAUDIZ NYD NAUD N +16BF ; [.3C42.0020.0004][.0000.0118.0004] # RUNIC LETTER SHORT-TWIG-NAUD N +16C0 ; [.3C42.0020.0004][.0000.0119.0004] # RUNIC LETTER DOTTED-N +16C1 ; [.3C43.0020.0002] # RUNIC LETTER ISAZ IS ISS I +16C2 ; [.3C43.0020.0004][.0000.0118.0004] # RUNIC LETTER E +16F5 ; [.3C44.0020.0002] # RUNIC LETTER FRANKS CASKET IS +16C3 ; [.3C45.0020.0002] # RUNIC LETTER JERAN J +16C4 ; [.3C45.0020.0004][.0000.0118.0004] # RUNIC LETTER GER +16C5 ; [.3C46.0020.0002] # RUNIC LETTER LONG-BRANCH-AR AE +16C6 ; [.3C46.0020.0004][.0000.0118.0004] # RUNIC LETTER SHORT-TWIG-AR A +16EE ; [.3C46.0020.0004][.3C51.0020.0004] # RUNIC ARLAUG SYMBOL +16C7 ; [.3C47.0020.0002] # RUNIC LETTER IWAZ EOH +16C8 ; [.3C48.0020.0002] # RUNIC LETTER PERTHO PEORTH P +16D5 ; [.3C48.0020.0004][.0000.0118.0004] # RUNIC LETTER OPEN-P +16C9 ; [.3C49.0020.0002] # RUNIC LETTER ALGIZ EOLHX +16CA ; [.3C4A.0020.0002] # RUNIC LETTER SOWILO S +16CB ; [.3C4A.0020.0004][.0000.0118.0004] # RUNIC LETTER SIGEL LONG-BRANCH-SOL S +16EA ; [.3C4A.0020.0004][.0000.0119.0004] # RUNIC LETTER X +16CC ; [.3C4A.0020.0004][.0000.011A.0004] # RUNIC LETTER SHORT-TWIG-SOL S +16CD ; [.3C4A.0020.0004][.0000.011B.0004] # RUNIC LETTER C +16CE ; [.3C4A.0020.0004][.0000.011C.0004] # RUNIC LETTER Z +16F2 ; [.3C4B.0020.0002] # RUNIC LETTER SH +16CF ; [.3C4C.0020.0002] # RUNIC LETTER TIWAZ TIR TYR T +16D0 ; [.3C4C.0020.0004][.0000.0118.0004] # RUNIC LETTER SHORT-TWIG-TYR T +16D1 ; [.3C4C.0020.0004][.0000.0119.0004] # RUNIC LETTER D +16D2 ; [.3C4D.0020.0002] # RUNIC LETTER BERKANAN BEORC BJARKAN B +16D3 ; [.3C4D.0020.0004][.0000.0118.0004] # RUNIC LETTER SHORT-TWIG-BJARKAN B +16D4 ; [.3C4D.0020.0004][.0000.0119.0004] # RUNIC LETTER DOTTED-P +16D6 ; [.3C4E.0020.0002] # RUNIC LETTER EHWAZ EH E +16F6 ; [.3C4F.0020.0002] # RUNIC LETTER FRANKS CASKET EH +16D7 ; [.3C50.0020.0002] # RUNIC LETTER MANNAZ MAN M +16D8 ; [.3C50.0020.0004][.0000.0118.0004] # RUNIC LETTER LONG-BRANCH-MADR M +16D9 ; [.3C50.0020.0004][.0000.0119.0004] # RUNIC LETTER SHORT-TWIG-MADR M +16EF ; [.3C50.0020.0004][.0000.0118.0004][.3C50.0020.0004][.0000.0118.0004] # RUNIC TVIMADUR SYMBOL +16DA ; [.3C51.0020.0002] # RUNIC LETTER LAUKAZ LAGU LOGR L +16DB ; [.3C51.0020.0004][.0000.0118.0004] # RUNIC LETTER DOTTED-L +16DC ; [.3C52.0020.0002] # RUNIC LETTER INGWAZ +16DD ; [.3C52.0020.0004][.0000.0118.0004] # RUNIC LETTER ING +16DE ; [.3C53.0020.0002] # RUNIC LETTER DAGAZ DAEG D +16DF ; [.3C54.0020.0002] # RUNIC LETTER OTHALAN ETHEL O +16F3 ; [.3C55.0020.0002] # RUNIC LETTER OO +16AA ; [.3C56.0020.0002] # RUNIC LETTER AC A +16F7 ; [.3C57.0020.0002] # RUNIC LETTER FRANKS CASKET AC +16AB ; [.3C58.0020.0002] # RUNIC LETTER AESC +16F8 ; [.3C59.0020.0002] # RUNIC LETTER FRANKS CASKET AESC +16A3 ; [.3C5A.0020.0002] # RUNIC LETTER YR +16E0 ; [.3C5B.0020.0002] # RUNIC LETTER EAR +16E3 ; [.3C5C.0020.0002] # RUNIC LETTER CALC +16B8 ; [.3C5D.0020.0002] # RUNIC LETTER GAR +16E4 ; [.3C5E.0020.0002] # RUNIC LETTER CEALC +16E1 ; [.3C5F.0020.0002] # RUNIC LETTER IOR +16E2 ; [.3C60.0020.0002] # RUNIC LETTER CWEORTH +16E5 ; [.3C61.0020.0002] # RUNIC LETTER STAN +16E6 ; [.3C62.0020.0002] # RUNIC LETTER LONG-BRANCH-YR +16E7 ; [.3C62.0020.0004][.0000.0118.0004] # RUNIC LETTER SHORT-TWIG-YR +16E8 ; [.3C62.0020.0004][.0000.0119.0004] # RUNIC LETTER ICELANDIC-YR +10CC0 ; [.3C63.0020.0002] # OLD HUNGARIAN SMALL LETTER A +10C80 ; [.3C63.0020.0008] # OLD HUNGARIAN CAPITAL LETTER A +10CC1 ; [.3C63.0020.0004][.0000.0118.0004] # OLD HUNGARIAN SMALL LETTER AA +10C81 ; [.3C63.0020.000A][.0000.0118.0004] # OLD HUNGARIAN CAPITAL LETTER AA +10CC2 ; [.3C64.0020.0002] # OLD HUNGARIAN SMALL LETTER EB +10C82 ; [.3C64.0020.0008] # OLD HUNGARIAN CAPITAL LETTER EB +10CC3 ; [.3C65.0020.0002] # OLD HUNGARIAN SMALL LETTER AMB +10C83 ; [.3C65.0020.0008] # OLD HUNGARIAN CAPITAL LETTER AMB +10CC4 ; [.3C66.0020.0002] # OLD HUNGARIAN SMALL LETTER EC +10C84 ; [.3C66.0020.0008] # OLD HUNGARIAN CAPITAL LETTER EC +10CC5 ; [.3C67.0020.0002] # OLD HUNGARIAN SMALL LETTER ENC +10C85 ; [.3C67.0020.0008] # OLD HUNGARIAN CAPITAL LETTER ENC +10CC6 ; [.3C68.0020.0002] # OLD HUNGARIAN SMALL LETTER ECS +10C86 ; [.3C68.0020.0008] # OLD HUNGARIAN CAPITAL LETTER ECS +10CC7 ; [.3C69.0020.0002] # OLD HUNGARIAN SMALL LETTER ED +10C87 ; [.3C69.0020.0008] # OLD HUNGARIAN CAPITAL LETTER ED +10CC8 ; [.3C6A.0020.0002] # OLD HUNGARIAN SMALL LETTER AND +10C88 ; [.3C6A.0020.0008] # OLD HUNGARIAN CAPITAL LETTER AND +10CC9 ; [.3C6B.0020.0002] # OLD HUNGARIAN SMALL LETTER E +10C89 ; [.3C6B.0020.0008] # OLD HUNGARIAN CAPITAL LETTER E +10CCA ; [.3C6B.0020.0004][.0000.0118.0004] # OLD HUNGARIAN SMALL LETTER CLOSE E +10C8A ; [.3C6B.0020.000A][.0000.0118.0004] # OLD HUNGARIAN CAPITAL LETTER CLOSE E +10CCB ; [.3C6B.0020.0004][.0000.0119.0004] # OLD HUNGARIAN SMALL LETTER EE +10C8B ; [.3C6B.0020.000A][.0000.0119.0004] # OLD HUNGARIAN CAPITAL LETTER EE +10CCC ; [.3C6C.0020.0002] # OLD HUNGARIAN SMALL LETTER EF +10C8C ; [.3C6C.0020.0008] # OLD HUNGARIAN CAPITAL LETTER EF +10CCD ; [.3C6D.0020.0002] # OLD HUNGARIAN SMALL LETTER EG +10C8D ; [.3C6D.0020.0008] # OLD HUNGARIAN CAPITAL LETTER EG +10CCE ; [.3C6E.0020.0002] # OLD HUNGARIAN SMALL LETTER EGY +10C8E ; [.3C6E.0020.0008] # OLD HUNGARIAN CAPITAL LETTER EGY +10CCF ; [.3C6F.0020.0002] # OLD HUNGARIAN SMALL LETTER EH +10C8F ; [.3C6F.0020.0008] # OLD HUNGARIAN CAPITAL LETTER EH +10CD0 ; [.3C70.0020.0002] # OLD HUNGARIAN SMALL LETTER I +10C90 ; [.3C70.0020.0008] # OLD HUNGARIAN CAPITAL LETTER I +10CD1 ; [.3C70.0020.0004][.0000.0118.0004] # OLD HUNGARIAN SMALL LETTER II +10C91 ; [.3C70.0020.000A][.0000.0118.0004] # OLD HUNGARIAN CAPITAL LETTER II +10CD2 ; [.3C71.0020.0002] # OLD HUNGARIAN SMALL LETTER EJ +10C92 ; [.3C71.0020.0008] # OLD HUNGARIAN CAPITAL LETTER EJ +10CD3 ; [.3C72.0020.0002] # OLD HUNGARIAN SMALL LETTER EK +10C93 ; [.3C72.0020.0008] # OLD HUNGARIAN CAPITAL LETTER EK +10CD4 ; [.3C73.0020.0002] # OLD HUNGARIAN SMALL LETTER AK +10C94 ; [.3C73.0020.0008] # OLD HUNGARIAN CAPITAL LETTER AK +10CD5 ; [.3C74.0020.0002] # OLD HUNGARIAN SMALL LETTER UNK +10C95 ; [.3C74.0020.0008] # OLD HUNGARIAN CAPITAL LETTER UNK +10CD6 ; [.3C75.0020.0002] # OLD HUNGARIAN SMALL LETTER EL +10C96 ; [.3C75.0020.0008] # OLD HUNGARIAN CAPITAL LETTER EL +10CD7 ; [.3C76.0020.0002] # OLD HUNGARIAN SMALL LETTER ELY +10C97 ; [.3C76.0020.0008] # OLD HUNGARIAN CAPITAL LETTER ELY +10CD8 ; [.3C77.0020.0002] # OLD HUNGARIAN SMALL LETTER EM +10C98 ; [.3C77.0020.0008] # OLD HUNGARIAN CAPITAL LETTER EM +10CD9 ; [.3C78.0020.0002] # OLD HUNGARIAN SMALL LETTER EN +10C99 ; [.3C78.0020.0008] # OLD HUNGARIAN CAPITAL LETTER EN +10CDA ; [.3C79.0020.0002] # OLD HUNGARIAN SMALL LETTER ENY +10C9A ; [.3C79.0020.0008] # OLD HUNGARIAN CAPITAL LETTER ENY +10CDB ; [.3C7A.0020.0002] # OLD HUNGARIAN SMALL LETTER O +10C9B ; [.3C7A.0020.0008] # OLD HUNGARIAN CAPITAL LETTER O +10CDC ; [.3C7A.0020.0004][.0000.0118.0004] # OLD HUNGARIAN SMALL LETTER OO +10C9C ; [.3C7A.0020.000A][.0000.0118.0004] # OLD HUNGARIAN CAPITAL LETTER OO +10CDD ; [.3C7B.0020.0002] # OLD HUNGARIAN SMALL LETTER NIKOLSBURG OE +10C9D ; [.3C7B.0020.0008] # OLD HUNGARIAN CAPITAL LETTER NIKOLSBURG OE +10CDE ; [.3C7B.0020.0004][.0000.0118.0004] # OLD HUNGARIAN SMALL LETTER RUDIMENTA OE +10C9E ; [.3C7B.0020.000A][.0000.0118.0004] # OLD HUNGARIAN CAPITAL LETTER RUDIMENTA OE +10CDF ; [.3C7B.0020.0004][.0000.0119.0004] # OLD HUNGARIAN SMALL LETTER OEE +10C9F ; [.3C7B.0020.000A][.0000.0119.0004] # OLD HUNGARIAN CAPITAL LETTER OEE +10CE0 ; [.3C7C.0020.0002] # OLD HUNGARIAN SMALL LETTER EP +10CA0 ; [.3C7C.0020.0008] # OLD HUNGARIAN CAPITAL LETTER EP +10CE1 ; [.3C7D.0020.0002] # OLD HUNGARIAN SMALL LETTER EMP +10CA1 ; [.3C7D.0020.0008] # OLD HUNGARIAN CAPITAL LETTER EMP +10CE2 ; [.3C7E.0020.0002] # OLD HUNGARIAN SMALL LETTER ER +10CA2 ; [.3C7E.0020.0008] # OLD HUNGARIAN CAPITAL LETTER ER +10CE3 ; [.3C7E.0020.0004][.0000.0118.0004] # OLD HUNGARIAN SMALL LETTER SHORT ER +10CA3 ; [.3C7E.0020.000A][.0000.0118.0004] # OLD HUNGARIAN CAPITAL LETTER SHORT ER +10CE4 ; [.3C7F.0020.0002] # OLD HUNGARIAN SMALL LETTER ES +10CA4 ; [.3C7F.0020.0008] # OLD HUNGARIAN CAPITAL LETTER ES +10CE5 ; [.3C80.0020.0002] # OLD HUNGARIAN SMALL LETTER ESZ +10CA5 ; [.3C80.0020.0008] # OLD HUNGARIAN CAPITAL LETTER ESZ +10CE6 ; [.3C81.0020.0002] # OLD HUNGARIAN SMALL LETTER ET +10CA6 ; [.3C81.0020.0008] # OLD HUNGARIAN CAPITAL LETTER ET +10CE7 ; [.3C82.0020.0002] # OLD HUNGARIAN SMALL LETTER ENT +10CA7 ; [.3C82.0020.0008] # OLD HUNGARIAN CAPITAL LETTER ENT +10CE8 ; [.3C83.0020.0002] # OLD HUNGARIAN SMALL LETTER ETY +10CA8 ; [.3C83.0020.0008] # OLD HUNGARIAN CAPITAL LETTER ETY +10CE9 ; [.3C84.0020.0002] # OLD HUNGARIAN SMALL LETTER ECH +10CA9 ; [.3C84.0020.0008] # OLD HUNGARIAN CAPITAL LETTER ECH +10CEA ; [.3C85.0020.0002] # OLD HUNGARIAN SMALL LETTER U +10CAA ; [.3C85.0020.0008] # OLD HUNGARIAN CAPITAL LETTER U +10CEB ; [.3C85.0020.0004][.0000.0118.0004] # OLD HUNGARIAN SMALL LETTER UU +10CAB ; [.3C85.0020.000A][.0000.0118.0004] # OLD HUNGARIAN CAPITAL LETTER UU +10CEC ; [.3C86.0020.0002] # OLD HUNGARIAN SMALL LETTER NIKOLSBURG UE +10CAC ; [.3C86.0020.0008] # OLD HUNGARIAN CAPITAL LETTER NIKOLSBURG UE +10CED ; [.3C86.0020.0004][.0000.0118.0004] # OLD HUNGARIAN SMALL LETTER RUDIMENTA UE +10CAD ; [.3C86.0020.000A][.0000.0118.0004] # OLD HUNGARIAN CAPITAL LETTER RUDIMENTA UE +10CEE ; [.3C87.0020.0002] # OLD HUNGARIAN SMALL LETTER EV +10CAE ; [.3C87.0020.0008] # OLD HUNGARIAN CAPITAL LETTER EV +10CEF ; [.3C88.0020.0002] # OLD HUNGARIAN SMALL LETTER EZ +10CAF ; [.3C88.0020.0008] # OLD HUNGARIAN CAPITAL LETTER EZ +10CF0 ; [.3C89.0020.0002] # OLD HUNGARIAN SMALL LETTER EZS +10CB0 ; [.3C89.0020.0008] # OLD HUNGARIAN CAPITAL LETTER EZS +10CF1 ; [.3C8A.0020.0002] # OLD HUNGARIAN SMALL LETTER ENT-SHAPED SIGN +10CB1 ; [.3C8A.0020.0008] # OLD HUNGARIAN CAPITAL LETTER ENT-SHAPED SIGN +10CF2 ; [.3C8B.0020.0002] # OLD HUNGARIAN SMALL LETTER US +10CB2 ; [.3C8B.0020.0008] # OLD HUNGARIAN CAPITAL LETTER US +10C00 ; [.3C8C.0020.0002] # OLD TURKIC LETTER ORKHON A +10C01 ; [.3C8C.0020.0004][.0000.0118.0004] # OLD TURKIC LETTER YENISEI A +10C02 ; [.3C8D.0020.0002] # OLD TURKIC LETTER YENISEI AE +10C03 ; [.3C8E.0020.0002] # OLD TURKIC LETTER ORKHON I +10C04 ; [.3C8E.0020.0004][.0000.0118.0004] # OLD TURKIC LETTER YENISEI I +10C05 ; [.3C8F.0020.0002] # OLD TURKIC LETTER YENISEI E +10C06 ; [.3C90.0020.0002] # OLD TURKIC LETTER ORKHON O +10C07 ; [.3C91.0020.0002] # OLD TURKIC LETTER ORKHON OE +10C08 ; [.3C91.0020.0004][.0000.0118.0004] # OLD TURKIC LETTER YENISEI OE +10C09 ; [.3C92.0020.0002] # OLD TURKIC LETTER ORKHON AB +10C0A ; [.3C92.0020.0004][.0000.0118.0004] # OLD TURKIC LETTER YENISEI AB +10C0B ; [.3C93.0020.0002] # OLD TURKIC LETTER ORKHON AEB +10C0C ; [.3C93.0020.0004][.0000.0118.0004] # OLD TURKIC LETTER YENISEI AEB +10C0D ; [.3C94.0020.0002] # OLD TURKIC LETTER ORKHON AG +10C0E ; [.3C94.0020.0004][.0000.0118.0004] # OLD TURKIC LETTER YENISEI AG +10C0F ; [.3C95.0020.0002] # OLD TURKIC LETTER ORKHON AEG +10C10 ; [.3C95.0020.0004][.0000.0118.0004] # OLD TURKIC LETTER YENISEI AEG +10C11 ; [.3C96.0020.0002] # OLD TURKIC LETTER ORKHON AD +10C12 ; [.3C96.0020.0004][.0000.0118.0004] # OLD TURKIC LETTER YENISEI AD +10C13 ; [.3C97.0020.0002] # OLD TURKIC LETTER ORKHON AED +10C14 ; [.3C98.0020.0002] # OLD TURKIC LETTER ORKHON EZ +10C15 ; [.3C98.0020.0004][.0000.0118.0004] # OLD TURKIC LETTER YENISEI EZ +10C16 ; [.3C99.0020.0002] # OLD TURKIC LETTER ORKHON AY +10C17 ; [.3C99.0020.0004][.0000.0118.0004] # OLD TURKIC LETTER YENISEI AY +10C18 ; [.3C9A.0020.0002] # OLD TURKIC LETTER ORKHON AEY +10C19 ; [.3C9A.0020.0004][.0000.0118.0004] # OLD TURKIC LETTER YENISEI AEY +10C1A ; [.3C9B.0020.0002] # OLD TURKIC LETTER ORKHON AEK +10C1B ; [.3C9B.0020.0004][.0000.0118.0004] # OLD TURKIC LETTER YENISEI AEK +10C1C ; [.3C9C.0020.0002] # OLD TURKIC LETTER ORKHON OEK +10C1D ; [.3C9C.0020.0004][.0000.0118.0004] # OLD TURKIC LETTER YENISEI OEK +10C1E ; [.3C9D.0020.0002] # OLD TURKIC LETTER ORKHON AL +10C1F ; [.3C9D.0020.0004][.0000.0118.0004] # OLD TURKIC LETTER YENISEI AL +10C20 ; [.3C9E.0020.0002] # OLD TURKIC LETTER ORKHON AEL +10C21 ; [.3C9F.0020.0002] # OLD TURKIC LETTER ORKHON ELT +10C22 ; [.3CA0.0020.0002] # OLD TURKIC LETTER ORKHON EM +10C23 ; [.3CA1.0020.0002] # OLD TURKIC LETTER ORKHON AN +10C24 ; [.3CA2.0020.0002] # OLD TURKIC LETTER ORKHON AEN +10C25 ; [.3CA2.0020.0004][.0000.0118.0004] # OLD TURKIC LETTER YENISEI AEN +10C26 ; [.3CA3.0020.0002] # OLD TURKIC LETTER ORKHON ENT +10C27 ; [.3CA3.0020.0004][.0000.0118.0004] # OLD TURKIC LETTER YENISEI ENT +10C28 ; [.3CA4.0020.0002] # OLD TURKIC LETTER ORKHON ENC +10C29 ; [.3CA4.0020.0004][.0000.0118.0004] # OLD TURKIC LETTER YENISEI ENC +10C2A ; [.3CA5.0020.0002] # OLD TURKIC LETTER ORKHON ENY +10C2B ; [.3CA5.0020.0004][.0000.0118.0004] # OLD TURKIC LETTER YENISEI ENY +10C2C ; [.3CA6.0020.0002] # OLD TURKIC LETTER YENISEI ANG +10C2D ; [.3CA7.0020.0002] # OLD TURKIC LETTER ORKHON ENG +10C2E ; [.3CA7.0020.0004][.0000.0118.0004] # OLD TURKIC LETTER YENISEI AENG +10C2F ; [.3CA8.0020.0002] # OLD TURKIC LETTER ORKHON EP +10C30 ; [.3CA9.0020.0002] # OLD TURKIC LETTER ORKHON OP +10C31 ; [.3CAA.0020.0002] # OLD TURKIC LETTER ORKHON IC +10C32 ; [.3CAB.0020.0002] # OLD TURKIC LETTER ORKHON EC +10C33 ; [.3CAB.0020.0004][.0000.0118.0004] # OLD TURKIC LETTER YENISEI EC +10C34 ; [.3CAC.0020.0002] # OLD TURKIC LETTER ORKHON AQ +10C35 ; [.3CAC.0020.0004][.0000.0118.0004] # OLD TURKIC LETTER YENISEI AQ +10C36 ; [.3CAD.0020.0002] # OLD TURKIC LETTER ORKHON IQ +10C37 ; [.3CAD.0020.0004][.0000.0118.0004] # OLD TURKIC LETTER YENISEI IQ +10C38 ; [.3CAE.0020.0002] # OLD TURKIC LETTER ORKHON OQ +10C39 ; [.3CAE.0020.0004][.0000.0118.0004] # OLD TURKIC LETTER YENISEI OQ +10C3A ; [.3CAF.0020.0002] # OLD TURKIC LETTER ORKHON AR +10C3B ; [.3CAF.0020.0004][.0000.0118.0004] # OLD TURKIC LETTER YENISEI AR +10C3C ; [.3CB0.0020.0002] # OLD TURKIC LETTER ORKHON AER +10C3D ; [.3CB1.0020.0002] # OLD TURKIC LETTER ORKHON AS +10C3E ; [.3CB2.0020.0002] # OLD TURKIC LETTER ORKHON AES +10C3F ; [.3CB3.0020.0002] # OLD TURKIC LETTER ORKHON ASH +10C40 ; [.3CB3.0020.0004][.0000.0118.0004] # OLD TURKIC LETTER YENISEI ASH +10C41 ; [.3CB4.0020.0002] # OLD TURKIC LETTER ORKHON ESH +10C42 ; [.3CB4.0020.0004][.0000.0118.0004] # OLD TURKIC LETTER YENISEI ESH +10C43 ; [.3CB5.0020.0002] # OLD TURKIC LETTER ORKHON AT +10C44 ; [.3CB5.0020.0004][.0000.0118.0004] # OLD TURKIC LETTER YENISEI AT +10C45 ; [.3CB6.0020.0002] # OLD TURKIC LETTER ORKHON AET +10C46 ; [.3CB6.0020.0004][.0000.0118.0004] # OLD TURKIC LETTER YENISEI AET +10C47 ; [.3CB7.0020.0002] # OLD TURKIC LETTER ORKHON OT +10C48 ; [.3CB8.0020.0002] # OLD TURKIC LETTER ORKHON BASH +A500 ; [.3CB9.0020.0002] # VAI SYLLABLE EE +A501 ; [.3CBA.0020.0002] # VAI SYLLABLE EEN +A502 ; [.3CBB.0020.0002] # VAI SYLLABLE HEE +A503 ; [.3CBC.0020.0002] # VAI SYLLABLE WEE +A504 ; [.3CBD.0020.0002] # VAI SYLLABLE WEEN +A505 ; [.3CBE.0020.0002] # VAI SYLLABLE PEE +A506 ; [.3CBF.0020.0002] # VAI SYLLABLE BHEE +A507 ; [.3CC0.0020.0002] # VAI SYLLABLE BEE +A508 ; [.3CC1.0020.0002] # VAI SYLLABLE MBEE +A509 ; [.3CC2.0020.0002] # VAI SYLLABLE KPEE +A50A ; [.3CC3.0020.0002] # VAI SYLLABLE MGBEE +A50B ; [.3CC4.0020.0002] # VAI SYLLABLE GBEE +A50C ; [.3CC5.0020.0002] # VAI SYLLABLE FEE +A613 ; [.3CC5.0020.0004][.3DC4.0020.0004] # VAI SYMBOL FEENG +A50D ; [.3CC6.0020.0002] # VAI SYLLABLE VEE +A50E ; [.3CC7.0020.0002] # VAI SYLLABLE TEE +A50F ; [.3CC8.0020.0002] # VAI SYLLABLE THEE +A510 ; [.3CC9.0020.0002] # VAI SYLLABLE DHEE +A511 ; [.3CCA.0020.0002] # VAI SYLLABLE DHHEE +A512 ; [.3CCB.0020.0002] # VAI SYLLABLE LEE +A513 ; [.3CCC.0020.0002] # VAI SYLLABLE REE +A514 ; [.3CCD.0020.0002] # VAI SYLLABLE DEE +A515 ; [.3CCE.0020.0002] # VAI SYLLABLE NDEE +A516 ; [.3CCF.0020.0002] # VAI SYLLABLE SEE +A517 ; [.3CD0.0020.0002] # VAI SYLLABLE SHEE +A518 ; [.3CD1.0020.0002] # VAI SYLLABLE ZEE +A519 ; [.3CD2.0020.0002] # VAI SYLLABLE ZHEE +A51A ; [.3CD3.0020.0002] # VAI SYLLABLE CEE +A51B ; [.3CD4.0020.0002] # VAI SYLLABLE JEE +A51C ; [.3CD5.0020.0002] # VAI SYLLABLE NJEE +A51D ; [.3CD6.0020.0002] # VAI SYLLABLE YEE +A51E ; [.3CD7.0020.0002] # VAI SYLLABLE KEE +A614 ; [.3CD7.0020.0004][.3DC4.0020.0004] # VAI SYMBOL KEENG +A51F ; [.3CD8.0020.0002] # VAI SYLLABLE NGGEE +A520 ; [.3CD9.0020.0002] # VAI SYLLABLE GEE +A521 ; [.3CDA.0020.0002] # VAI SYLLABLE MEE +A522 ; [.3CDB.0020.0002] # VAI SYLLABLE NEE +A523 ; [.3CDC.0020.0002] # VAI SYLLABLE NYEE +A524 ; [.3CDD.0020.0002] # VAI SYLLABLE I +A525 ; [.3CDE.0020.0002] # VAI SYLLABLE IN +A526 ; [.3CDF.0020.0002] # VAI SYLLABLE HI +A527 ; [.3CE0.0020.0002] # VAI SYLLABLE HIN +A528 ; [.3CE1.0020.0002] # VAI SYLLABLE WI +A529 ; [.3CE2.0020.0002] # VAI SYLLABLE WIN +A52A ; [.3CE3.0020.0002] # VAI SYLLABLE PI +A52B ; [.3CE4.0020.0002] # VAI SYLLABLE BHI +A52C ; [.3CE5.0020.0002] # VAI SYLLABLE BI +A52D ; [.3CE6.0020.0002] # VAI SYLLABLE MBI +A52E ; [.3CE7.0020.0002] # VAI SYLLABLE KPI +A52F ; [.3CE8.0020.0002] # VAI SYLLABLE MGBI +A530 ; [.3CE9.0020.0002] # VAI SYLLABLE GBI +A531 ; [.3CEA.0020.0002] # VAI SYLLABLE FI +A532 ; [.3CEB.0020.0002] # VAI SYLLABLE VI +A533 ; [.3CEC.0020.0002] # VAI SYLLABLE TI +A615 ; [.3CEC.0020.0004][.3DC4.0020.0004] # VAI SYMBOL TING +A534 ; [.3CED.0020.0002] # VAI SYLLABLE THI +A535 ; [.3CEE.0020.0002] # VAI SYLLABLE DHI +A536 ; [.3CEF.0020.0002] # VAI SYLLABLE DHHI +A537 ; [.3CF0.0020.0002] # VAI SYLLABLE LI +A538 ; [.3CF1.0020.0002] # VAI SYLLABLE RI +A539 ; [.3CF2.0020.0002] # VAI SYLLABLE DI +A53A ; [.3CF3.0020.0002] # VAI SYLLABLE NDI +A53B ; [.3CF4.0020.0002] # VAI SYLLABLE SI +A53C ; [.3CF5.0020.0002] # VAI SYLLABLE SHI +A53D ; [.3CF6.0020.0002] # VAI SYLLABLE ZI +A53E ; [.3CF7.0020.0002] # VAI SYLLABLE ZHI +A53F ; [.3CF8.0020.0002] # VAI SYLLABLE CI +A540 ; [.3CF9.0020.0002] # VAI SYLLABLE JI +A541 ; [.3CFA.0020.0002] # VAI SYLLABLE NJI +A542 ; [.3CFB.0020.0002] # VAI SYLLABLE YI +A543 ; [.3CFC.0020.0002] # VAI SYLLABLE KI +A544 ; [.3CFD.0020.0002] # VAI SYLLABLE NGGI +A545 ; [.3CFE.0020.0002] # VAI SYLLABLE GI +A546 ; [.3CFF.0020.0002] # VAI SYLLABLE MI +A547 ; [.3D00.0020.0002] # VAI SYLLABLE NI +A616 ; [.3D00.0020.0004][.3DC5.0020.0004] # VAI SYMBOL NII +A548 ; [.3D01.0020.0002] # VAI SYLLABLE NYI +A549 ; [.3D02.0020.0002] # VAI SYLLABLE A +A54A ; [.3D03.0020.0002] # VAI SYLLABLE AN +A54B ; [.3D04.0020.0002] # VAI SYLLABLE NGAN +A54C ; [.3D05.0020.0002] # VAI SYLLABLE HA +A54D ; [.3D06.0020.0002] # VAI SYLLABLE HAN +A54E ; [.3D07.0020.0002] # VAI SYLLABLE WA +A54F ; [.3D08.0020.0002] # VAI SYLLABLE WAN +A550 ; [.3D09.0020.0002] # VAI SYLLABLE PA +A551 ; [.3D0A.0020.0002] # VAI SYLLABLE BHA +A552 ; [.3D0B.0020.0002] # VAI SYLLABLE BA +A617 ; [.3D0B.0020.0004][.3DC4.0020.0004] # VAI SYMBOL BANG +A553 ; [.3D0C.0020.0002] # VAI SYLLABLE MBA +A554 ; [.3D0D.0020.0002] # VAI SYLLABLE KPA +A555 ; [.3D0E.0020.0002] # VAI SYLLABLE KPAN +A556 ; [.3D0F.0020.0002] # VAI SYLLABLE MGBA +A557 ; [.3D10.0020.0002] # VAI SYLLABLE GBA +A558 ; [.3D11.0020.0002] # VAI SYLLABLE FA +A610 ; [.3D11.0020.0004] # VAI SYLLABLE NDOLE FA +A618 ; [.3D11.0020.0004][.3DC5.0020.0004] # VAI SYMBOL FAA +A559 ; [.3D12.0020.0002] # VAI SYLLABLE VA +A55A ; [.3D13.0020.0002] # VAI SYLLABLE TA +A619 ; [.3D13.0020.0004][.3DC5.0020.0004] # VAI SYMBOL TAA +A55B ; [.3D14.0020.0002] # VAI SYLLABLE THA +A55C ; [.3D15.0020.0002] # VAI SYLLABLE DHA +A55D ; [.3D16.0020.0002] # VAI SYLLABLE DHHA +A55E ; [.3D17.0020.0002] # VAI SYLLABLE LA +A55F ; [.3D18.0020.0002] # VAI SYLLABLE RA +A560 ; [.3D19.0020.0002] # VAI SYLLABLE DA +A61A ; [.3D19.0020.0004][.3DC4.0020.0004] # VAI SYMBOL DANG +A561 ; [.3D1A.0020.0002] # VAI SYLLABLE NDA +A562 ; [.3D1B.0020.0002] # VAI SYLLABLE SA +A563 ; [.3D1C.0020.0002] # VAI SYLLABLE SHA +A564 ; [.3D1D.0020.0002] # VAI SYLLABLE ZA +A565 ; [.3D1E.0020.0002] # VAI SYLLABLE ZHA +A566 ; [.3D1F.0020.0002] # VAI SYLLABLE CA +A567 ; [.3D20.0020.0002] # VAI SYLLABLE JA +A568 ; [.3D21.0020.0002] # VAI SYLLABLE NJA +A569 ; [.3D22.0020.0002] # VAI SYLLABLE YA +A56A ; [.3D23.0020.0002] # VAI SYLLABLE KA +A611 ; [.3D23.0020.0004] # VAI SYLLABLE NDOLE KA +A56B ; [.3D24.0020.0002] # VAI SYLLABLE KAN +A56C ; [.3D25.0020.0002] # VAI SYLLABLE NGGA +A56D ; [.3D26.0020.0002] # VAI SYLLABLE GA +A56E ; [.3D27.0020.0002] # VAI SYLLABLE MA +A62A ; [.3D27.0020.0004] # VAI SYLLABLE NDOLE MA +A56F ; [.3D28.0020.0002] # VAI SYLLABLE NA +A570 ; [.3D29.0020.0002] # VAI SYLLABLE NYA +A571 ; [.3D2A.0020.0002] # VAI SYLLABLE OO +A572 ; [.3D2B.0020.0002] # VAI SYLLABLE OON +A573 ; [.3D2C.0020.0002] # VAI SYLLABLE HOO +A574 ; [.3D2D.0020.0002] # VAI SYLLABLE WOO +A575 ; [.3D2E.0020.0002] # VAI SYLLABLE WOON +A576 ; [.3D2F.0020.0002] # VAI SYLLABLE POO +A577 ; [.3D30.0020.0002] # VAI SYLLABLE BHOO +A578 ; [.3D31.0020.0002] # VAI SYLLABLE BOO +A579 ; [.3D32.0020.0002] # VAI SYLLABLE MBOO +A57A ; [.3D33.0020.0002] # VAI SYLLABLE KPOO +A57B ; [.3D34.0020.0002] # VAI SYLLABLE MGBOO +A57C ; [.3D35.0020.0002] # VAI SYLLABLE GBOO +A57D ; [.3D36.0020.0002] # VAI SYLLABLE FOO +A57E ; [.3D37.0020.0002] # VAI SYLLABLE VOO +A57F ; [.3D38.0020.0002] # VAI SYLLABLE TOO +A580 ; [.3D39.0020.0002] # VAI SYLLABLE THOO +A581 ; [.3D3A.0020.0002] # VAI SYLLABLE DHOO +A582 ; [.3D3B.0020.0002] # VAI SYLLABLE DHHOO +A583 ; [.3D3C.0020.0002] # VAI SYLLABLE LOO +A584 ; [.3D3D.0020.0002] # VAI SYLLABLE ROO +A585 ; [.3D3E.0020.0002] # VAI SYLLABLE DOO +A61B ; [.3D3E.0020.0004][.3DC4.0020.0004] # VAI SYMBOL DOONG +A586 ; [.3D3F.0020.0002] # VAI SYLLABLE NDOO +A587 ; [.3D40.0020.0002] # VAI SYLLABLE SOO +A612 ; [.3D40.0020.0004] # VAI SYLLABLE NDOLE SOO +A588 ; [.3D41.0020.0002] # VAI SYLLABLE SHOO +A589 ; [.3D42.0020.0002] # VAI SYLLABLE ZOO +A58A ; [.3D43.0020.0002] # VAI SYLLABLE ZHOO +A58B ; [.3D44.0020.0002] # VAI SYLLABLE COO +A58C ; [.3D45.0020.0002] # VAI SYLLABLE JOO +A58D ; [.3D46.0020.0002] # VAI SYLLABLE NJOO +A58E ; [.3D47.0020.0002] # VAI SYLLABLE YOO +A58F ; [.3D48.0020.0002] # VAI SYLLABLE KOO +A590 ; [.3D49.0020.0002] # VAI SYLLABLE NGGOO +A591 ; [.3D4A.0020.0002] # VAI SYLLABLE GOO +A592 ; [.3D4B.0020.0002] # VAI SYLLABLE MOO +A593 ; [.3D4C.0020.0002] # VAI SYLLABLE NOO +A594 ; [.3D4D.0020.0002] # VAI SYLLABLE NYOO +A595 ; [.3D4E.0020.0002] # VAI SYLLABLE U +A596 ; [.3D4F.0020.0002] # VAI SYLLABLE UN +A597 ; [.3D50.0020.0002] # VAI SYLLABLE HU +A598 ; [.3D51.0020.0002] # VAI SYLLABLE HUN +A599 ; [.3D52.0020.0002] # VAI SYLLABLE WU +A59A ; [.3D53.0020.0002] # VAI SYLLABLE WUN +A59B ; [.3D54.0020.0002] # VAI SYLLABLE PU +A59C ; [.3D55.0020.0002] # VAI SYLLABLE BHU +A59D ; [.3D56.0020.0002] # VAI SYLLABLE BU +A59E ; [.3D57.0020.0002] # VAI SYLLABLE MBU +A59F ; [.3D58.0020.0002] # VAI SYLLABLE KPU +A5A0 ; [.3D59.0020.0002] # VAI SYLLABLE MGBU +A5A1 ; [.3D5A.0020.0002] # VAI SYLLABLE GBU +A5A2 ; [.3D5B.0020.0002] # VAI SYLLABLE FU +A5A3 ; [.3D5C.0020.0002] # VAI SYLLABLE VU +A5A4 ; [.3D5D.0020.0002] # VAI SYLLABLE TU +A5A5 ; [.3D5E.0020.0002] # VAI SYLLABLE THU +A5A6 ; [.3D5F.0020.0002] # VAI SYLLABLE DHU +A5A7 ; [.3D60.0020.0002] # VAI SYLLABLE DHHU +A5A8 ; [.3D61.0020.0002] # VAI SYLLABLE LU +A5A9 ; [.3D62.0020.0002] # VAI SYLLABLE RU +A5AA ; [.3D63.0020.0002] # VAI SYLLABLE DU +A5AB ; [.3D64.0020.0002] # VAI SYLLABLE NDU +A5AC ; [.3D65.0020.0002] # VAI SYLLABLE SU +A5AD ; [.3D66.0020.0002] # VAI SYLLABLE SHU +A5AE ; [.3D67.0020.0002] # VAI SYLLABLE ZU +A5AF ; [.3D68.0020.0002] # VAI SYLLABLE ZHU +A5B0 ; [.3D69.0020.0002] # VAI SYLLABLE CU +A5B1 ; [.3D6A.0020.0002] # VAI SYLLABLE JU +A5B2 ; [.3D6B.0020.0002] # VAI SYLLABLE NJU +A5B3 ; [.3D6C.0020.0002] # VAI SYLLABLE YU +A5B4 ; [.3D6D.0020.0002] # VAI SYLLABLE KU +A61C ; [.3D6D.0020.0004][.3DC4.0020.0004] # VAI SYMBOL KUNG +A5B5 ; [.3D6E.0020.0002] # VAI SYLLABLE NGGU +A5B6 ; [.3D6F.0020.0002] # VAI SYLLABLE GU +A5B7 ; [.3D70.0020.0002] # VAI SYLLABLE MU +A5B8 ; [.3D71.0020.0002] # VAI SYLLABLE NU +A5B9 ; [.3D72.0020.0002] # VAI SYLLABLE NYU +A5BA ; [.3D73.0020.0002] # VAI SYLLABLE O +A5BB ; [.3D74.0020.0002] # VAI SYLLABLE ON +A5BC ; [.3D75.0020.0002] # VAI SYLLABLE NGON +A5BD ; [.3D76.0020.0002] # VAI SYLLABLE HO +A5BE ; [.3D77.0020.0002] # VAI SYLLABLE HON +A5BF ; [.3D78.0020.0002] # VAI SYLLABLE WO +A5C0 ; [.3D79.0020.0002] # VAI SYLLABLE WON +A5C1 ; [.3D7A.0020.0002] # VAI SYLLABLE PO +A5C2 ; [.3D7B.0020.0002] # VAI SYLLABLE BHO +A5C3 ; [.3D7C.0020.0002] # VAI SYLLABLE BO +A5C4 ; [.3D7D.0020.0002] # VAI SYLLABLE MBO +A5C5 ; [.3D7E.0020.0002] # VAI SYLLABLE KPO +A5C6 ; [.3D7F.0020.0002] # VAI SYLLABLE MGBO +A5C7 ; [.3D80.0020.0002] # VAI SYLLABLE GBO +A5C8 ; [.3D81.0020.0002] # VAI SYLLABLE GBON +A5C9 ; [.3D82.0020.0002] # VAI SYLLABLE FO +A5CA ; [.3D83.0020.0002] # VAI SYLLABLE VO +A5CB ; [.3D84.0020.0002] # VAI SYLLABLE TO +A61D ; [.3D84.0020.0004][.3DC4.0020.0004] # VAI SYMBOL TONG +A5CC ; [.3D85.0020.0002] # VAI SYLLABLE THO +A5CD ; [.3D86.0020.0002] # VAI SYLLABLE DHO +A5CE ; [.3D87.0020.0002] # VAI SYLLABLE DHHO +A5CF ; [.3D88.0020.0002] # VAI SYLLABLE LO +A5D0 ; [.3D89.0020.0002] # VAI SYLLABLE RO +A5D1 ; [.3D8A.0020.0002] # VAI SYLLABLE DO +A62B ; [.3D8A.0020.0004] # VAI SYLLABLE NDOLE DO +A61E ; [.3D8A.0020.0004][.3DC5.0020.0004] # VAI SYMBOL DO-O +A5D2 ; [.3D8B.0020.0002] # VAI SYLLABLE NDO +A5D3 ; [.3D8C.0020.0002] # VAI SYLLABLE SO +A5D4 ; [.3D8D.0020.0002] # VAI SYLLABLE SHO +A5D5 ; [.3D8E.0020.0002] # VAI SYLLABLE ZO +A5D6 ; [.3D8F.0020.0002] # VAI SYLLABLE ZHO +A5D7 ; [.3D90.0020.0002] # VAI SYLLABLE CO +A5D8 ; [.3D91.0020.0002] # VAI SYLLABLE JO +A61F ; [.3D91.0020.0004][.3DC4.0020.0004] # VAI SYMBOL JONG +A5D9 ; [.3D92.0020.0002] # VAI SYLLABLE NJO +A5DA ; [.3D93.0020.0002] # VAI SYLLABLE YO +A5DB ; [.3D94.0020.0002] # VAI SYLLABLE KO +A5DC ; [.3D95.0020.0002] # VAI SYLLABLE NGGO +A5DD ; [.3D96.0020.0002] # VAI SYLLABLE GO +A5DE ; [.3D97.0020.0002] # VAI SYLLABLE MO +A5DF ; [.3D98.0020.0002] # VAI SYLLABLE NO +A5E0 ; [.3D99.0020.0002] # VAI SYLLABLE NYO +A5E1 ; [.3D9A.0020.0002] # VAI SYLLABLE E +A5E2 ; [.3D9B.0020.0002] # VAI SYLLABLE EN +A5E3 ; [.3D9C.0020.0002] # VAI SYLLABLE NGEN +A5E4 ; [.3D9D.0020.0002] # VAI SYLLABLE HE +A5E5 ; [.3D9E.0020.0002] # VAI SYLLABLE HEN +A5E6 ; [.3D9F.0020.0002] # VAI SYLLABLE WE +A5E7 ; [.3DA0.0020.0002] # VAI SYLLABLE WEN +A5E8 ; [.3DA1.0020.0002] # VAI SYLLABLE PE +A5E9 ; [.3DA2.0020.0002] # VAI SYLLABLE BHE +A5EA ; [.3DA3.0020.0002] # VAI SYLLABLE BE +A5EB ; [.3DA4.0020.0002] # VAI SYLLABLE MBE +A5EC ; [.3DA5.0020.0002] # VAI SYLLABLE KPE +A5ED ; [.3DA6.0020.0002] # VAI SYLLABLE KPEN +A5EE ; [.3DA7.0020.0002] # VAI SYLLABLE MGBE +A5EF ; [.3DA8.0020.0002] # VAI SYLLABLE GBE +A5F0 ; [.3DA9.0020.0002] # VAI SYLLABLE GBEN +A5F1 ; [.3DAA.0020.0002] # VAI SYLLABLE FE +A5F2 ; [.3DAB.0020.0002] # VAI SYLLABLE VE +A5F3 ; [.3DAC.0020.0002] # VAI SYLLABLE TE +A5F4 ; [.3DAD.0020.0002] # VAI SYLLABLE THE +A5F5 ; [.3DAE.0020.0002] # VAI SYLLABLE DHE +A5F6 ; [.3DAF.0020.0002] # VAI SYLLABLE DHHE +A5F7 ; [.3DB0.0020.0002] # VAI SYLLABLE LE +A5F8 ; [.3DB1.0020.0002] # VAI SYLLABLE RE +A5F9 ; [.3DB2.0020.0002] # VAI SYLLABLE DE +A5FA ; [.3DB3.0020.0002] # VAI SYLLABLE NDE +A5FB ; [.3DB4.0020.0002] # VAI SYLLABLE SE +A5FC ; [.3DB5.0020.0002] # VAI SYLLABLE SHE +A5FD ; [.3DB6.0020.0002] # VAI SYLLABLE ZE +A5FE ; [.3DB7.0020.0002] # VAI SYLLABLE ZHE +A5FF ; [.3DB8.0020.0002] # VAI SYLLABLE CE +A600 ; [.3DB9.0020.0002] # VAI SYLLABLE JE +A601 ; [.3DBA.0020.0002] # VAI SYLLABLE NJE +A602 ; [.3DBB.0020.0002] # VAI SYLLABLE YE +A603 ; [.3DBC.0020.0002] # VAI SYLLABLE KE +A604 ; [.3DBD.0020.0002] # VAI SYLLABLE NGGE +A605 ; [.3DBE.0020.0002] # VAI SYLLABLE NGGEN +A606 ; [.3DBF.0020.0002] # VAI SYLLABLE GE +A607 ; [.3DC0.0020.0002] # VAI SYLLABLE GEN +A608 ; [.3DC1.0020.0002] # VAI SYLLABLE ME +A609 ; [.3DC2.0020.0002] # VAI SYLLABLE NE +A60A ; [.3DC3.0020.0002] # VAI SYLLABLE NYE +A60B ; [.3DC4.0020.0002] # VAI SYLLABLE NG +A60C ; [.3DC5.0020.0002] # VAI SYLLABLE LENGTHENER +A6A0 ; [.3DC6.0020.0002] # BAMUM LETTER A +A6A1 ; [.3DC7.0020.0002] # BAMUM LETTER KA +A6A2 ; [.3DC8.0020.0002] # BAMUM LETTER U +A6A3 ; [.3DC9.0020.0002] # BAMUM LETTER KU +A6A4 ; [.3DCA.0020.0002] # BAMUM LETTER EE +A6A5 ; [.3DCB.0020.0002] # BAMUM LETTER REE +A6A6 ; [.3DCC.0020.0002] # BAMUM LETTER TAE +A6A7 ; [.3DCD.0020.0002] # BAMUM LETTER O +A6A8 ; [.3DCE.0020.0002] # BAMUM LETTER NYI +A6A9 ; [.3DCF.0020.0002] # BAMUM LETTER I +A6AA ; [.3DD0.0020.0002] # BAMUM LETTER LA +A6AB ; [.3DD1.0020.0002] # BAMUM LETTER PA +A6AC ; [.3DD2.0020.0002] # BAMUM LETTER RII +A6AD ; [.3DD3.0020.0002] # BAMUM LETTER RIEE +A6AE ; [.3DD4.0020.0002] # BAMUM LETTER LEEEE +A6AF ; [.3DD5.0020.0002] # BAMUM LETTER MEEEE +A6B0 ; [.3DD6.0020.0002] # BAMUM LETTER TAA +A6B1 ; [.3DD7.0020.0002] # BAMUM LETTER NDAA +A6B2 ; [.3DD8.0020.0002] # BAMUM LETTER NJAEM +A6B3 ; [.3DD9.0020.0002] # BAMUM LETTER M +A6B4 ; [.3DDA.0020.0002] # BAMUM LETTER SUU +A6B5 ; [.3DDB.0020.0002] # BAMUM LETTER MU +A6B6 ; [.3DDC.0020.0002] # BAMUM LETTER SHII +A6B7 ; [.3DDD.0020.0002] # BAMUM LETTER SI +A6B8 ; [.3DDE.0020.0002] # BAMUM LETTER SHEUX +A6B9 ; [.3DDF.0020.0002] # BAMUM LETTER SEUX +A6BA ; [.3DE0.0020.0002] # BAMUM LETTER KYEE +A6BB ; [.3DE1.0020.0002] # BAMUM LETTER KET +A6BC ; [.3DE2.0020.0002] # BAMUM LETTER NUAE +A6BD ; [.3DE3.0020.0002] # BAMUM LETTER NU +A6BE ; [.3DE4.0020.0002] # BAMUM LETTER NJUAE +A6BF ; [.3DE5.0020.0002] # BAMUM LETTER YOQ +A6C0 ; [.3DE6.0020.0002] # BAMUM LETTER SHU +A6C1 ; [.3DE7.0020.0002] # BAMUM LETTER YUQ +A6C2 ; [.3DE8.0020.0002] # BAMUM LETTER YA +A6C3 ; [.3DE9.0020.0002] # BAMUM LETTER NSHA +A6C4 ; [.3DEA.0020.0002] # BAMUM LETTER KEUX +A6C5 ; [.3DEB.0020.0002] # BAMUM LETTER PEUX +A6C6 ; [.3DEC.0020.0002] # BAMUM LETTER NJEE +A6C7 ; [.3DED.0020.0002] # BAMUM LETTER NTEE +A6C8 ; [.3DEE.0020.0002] # BAMUM LETTER PUE +A6C9 ; [.3DEF.0020.0002] # BAMUM LETTER WUE +A6CA ; [.3DF0.0020.0002] # BAMUM LETTER PEE +A6CB ; [.3DF1.0020.0002] # BAMUM LETTER FEE +A6CC ; [.3DF2.0020.0002] # BAMUM LETTER RU +A6CD ; [.3DF3.0020.0002] # BAMUM LETTER LU +A6CE ; [.3DF4.0020.0002] # BAMUM LETTER MI +A6CF ; [.3DF5.0020.0002] # BAMUM LETTER NI +A6D0 ; [.3DF6.0020.0002] # BAMUM LETTER REUX +A6D1 ; [.3DF7.0020.0002] # BAMUM LETTER RAE +A6D2 ; [.3DF8.0020.0002] # BAMUM LETTER KEN +A6D3 ; [.3DF9.0020.0002] # BAMUM LETTER NGKWAEN +A6D4 ; [.3DFA.0020.0002] # BAMUM LETTER NGGA +A6D5 ; [.3DFB.0020.0002] # BAMUM LETTER NGA +A6D6 ; [.3DFC.0020.0002] # BAMUM LETTER SHO +A6D7 ; [.3DFD.0020.0002] # BAMUM LETTER PUAE +A6D8 ; [.3DFE.0020.0002] # BAMUM LETTER FU +A6D9 ; [.3DFF.0020.0002] # BAMUM LETTER FOM +A6DA ; [.3E00.0020.0002] # BAMUM LETTER WA +A6DB ; [.3E01.0020.0002] # BAMUM LETTER NA +A6DC ; [.3E02.0020.0002] # BAMUM LETTER LI +A6DD ; [.3E03.0020.0002] # BAMUM LETTER PI +A6DE ; [.3E04.0020.0002] # BAMUM LETTER LOQ +A6DF ; [.3E05.0020.0002] # BAMUM LETTER KO +A6E0 ; [.3E06.0020.0002] # BAMUM LETTER MBEN +A6E1 ; [.3E07.0020.0002] # BAMUM LETTER REN +A6E2 ; [.3E08.0020.0002] # BAMUM LETTER MEN +A6E3 ; [.3E09.0020.0002] # BAMUM LETTER MA +A6E4 ; [.3E0A.0020.0002] # BAMUM LETTER TI +A6E5 ; [.3E0B.0020.0002] # BAMUM LETTER KI +A6E6 ; [.3E0C.0020.0002] # BAMUM LETTER MO +A6E7 ; [.3E0D.0020.0002] # BAMUM LETTER MBAA +A6E8 ; [.3E0E.0020.0002] # BAMUM LETTER TET +A6E9 ; [.3E0F.0020.0002] # BAMUM LETTER KPA +A6EA ; [.3E10.0020.0002] # BAMUM LETTER TEN +A6EB ; [.3E11.0020.0002] # BAMUM LETTER NTUU +A6EC ; [.3E12.0020.0002] # BAMUM LETTER SAMBA +A6ED ; [.3E13.0020.0002] # BAMUM LETTER FAAMAE +A6EE ; [.3E14.0020.0002] # BAMUM LETTER KOVUU +A6EF ; [.3E15.0020.0002] # BAMUM LETTER KOGHOM +16800 ; [.3E16.0020.0002] # BAMUM LETTER PHASE-A NGKUE MFON +16801 ; [.3E17.0020.0002] # BAMUM LETTER PHASE-A GBIEE FON +16802 ; [.3E18.0020.0002] # BAMUM LETTER PHASE-A PON MFON PIPAEMGBIEE +16803 ; [.3E19.0020.0002] # BAMUM LETTER PHASE-A PON MFON PIPAEMBA +16804 ; [.3E1A.0020.0002] # BAMUM LETTER PHASE-A NAA MFON +16805 ; [.3E1B.0020.0002] # BAMUM LETTER PHASE-A SHUENSHUET +16806 ; [.3E1C.0020.0002] # BAMUM LETTER PHASE-A TITA MFON +16807 ; [.3E1D.0020.0002] # BAMUM LETTER PHASE-A NZA MFON +16808 ; [.3E1E.0020.0002] # BAMUM LETTER PHASE-A SHINDA PA NJI +16809 ; [.3E1F.0020.0002] # BAMUM LETTER PHASE-A PON PA NJI PIPAEMGBIEE +1680A ; [.3E20.0020.0002] # BAMUM LETTER PHASE-A PON PA NJI PIPAEMBA +1680B ; [.3E21.0020.0002] # BAMUM LETTER PHASE-A MAEMBGBIEE +1680C ; [.3E22.0020.0002] # BAMUM LETTER PHASE-A TU MAEMBA +1680D ; [.3E23.0020.0002] # BAMUM LETTER PHASE-A NGANGU +1680E ; [.3E24.0020.0002] # BAMUM LETTER PHASE-A MAEMVEUX +1680F ; [.3E25.0020.0002] # BAMUM LETTER PHASE-A MANSUAE +16810 ; [.3E26.0020.0002] # BAMUM LETTER PHASE-A MVEUAENGAM +16811 ; [.3E27.0020.0002] # BAMUM LETTER PHASE-A SEUNYAM +16812 ; [.3E28.0020.0002] # BAMUM LETTER PHASE-A NTOQPEN +16813 ; [.3E29.0020.0002] # BAMUM LETTER PHASE-A KEUKEUTNDA +16814 ; [.3E2A.0020.0002] # BAMUM LETTER PHASE-A NKINDI +16815 ; [.3E2B.0020.0002] # BAMUM LETTER PHASE-A SUU +16816 ; [.3E2C.0020.0002] # BAMUM LETTER PHASE-A NGKUENZEUM +16817 ; [.3E2D.0020.0002] # BAMUM LETTER PHASE-A LAPAQ +16818 ; [.3E2E.0020.0002] # BAMUM LETTER PHASE-A LET KUT +16819 ; [.3E2F.0020.0002] # BAMUM LETTER PHASE-A NTAP MFAA +1681A ; [.3E30.0020.0002] # BAMUM LETTER PHASE-A MAEKEUP +1681B ; [.3E31.0020.0002] # BAMUM LETTER PHASE-A PASHAE +1681C ; [.3E32.0020.0002] # BAMUM LETTER PHASE-A GHEUAERAE +1681D ; [.3E33.0020.0002] # BAMUM LETTER PHASE-A PAMSHAE +1681E ; [.3E34.0020.0002] # BAMUM LETTER PHASE-A MON NGGEUAET +1681F ; [.3E35.0020.0002] # BAMUM LETTER PHASE-A NZUN MEUT +16820 ; [.3E36.0020.0002] # BAMUM LETTER PHASE-A U YUQ NAE +16821 ; [.3E37.0020.0002] # BAMUM LETTER PHASE-A GHEUAEGHEUAE +16822 ; [.3E38.0020.0002] # BAMUM LETTER PHASE-A NTAP NTAA +16823 ; [.3E39.0020.0002] # BAMUM LETTER PHASE-A SISA +16824 ; [.3E3A.0020.0002] # BAMUM LETTER PHASE-A MGBASA +16825 ; [.3E3B.0020.0002] # BAMUM LETTER PHASE-A MEUNJOMNDEUQ +16826 ; [.3E3C.0020.0002] # BAMUM LETTER PHASE-A MOOMPUQ +16827 ; [.3E3D.0020.0002] # BAMUM LETTER PHASE-A KAFA +16828 ; [.3E3E.0020.0002] # BAMUM LETTER PHASE-A PA LEERAEWA +16829 ; [.3E3F.0020.0002] # BAMUM LETTER PHASE-A NDA LEERAEWA +1682A ; [.3E40.0020.0002] # BAMUM LETTER PHASE-A PET +1682B ; [.3E41.0020.0002] # BAMUM LETTER PHASE-A MAEMKPEN +1682C ; [.3E42.0020.0002] # BAMUM LETTER PHASE-A NIKA +1682D ; [.3E43.0020.0002] # BAMUM LETTER PHASE-A PUP +1682E ; [.3E44.0020.0002] # BAMUM LETTER PHASE-A TUAEP +1682F ; [.3E45.0020.0002] # BAMUM LETTER PHASE-A LUAEP +16830 ; [.3E46.0020.0002] # BAMUM LETTER PHASE-A SONJAM +16831 ; [.3E47.0020.0002] # BAMUM LETTER PHASE-A TEUTEUWEN +16832 ; [.3E48.0020.0002] # BAMUM LETTER PHASE-A MAENYI +16833 ; [.3E49.0020.0002] # BAMUM LETTER PHASE-A KET +16834 ; [.3E4A.0020.0002] # BAMUM LETTER PHASE-A NDAANGGEUAET +16835 ; [.3E4B.0020.0002] # BAMUM LETTER PHASE-A KUOQ +16836 ; [.3E4C.0020.0002] # BAMUM LETTER PHASE-A MOOMEUT +16837 ; [.3E4D.0020.0002] # BAMUM LETTER PHASE-A SHUM +16838 ; [.3E4E.0020.0002] # BAMUM LETTER PHASE-A LOMMAE +16839 ; [.3E4F.0020.0002] # BAMUM LETTER PHASE-A FIRI +1683A ; [.3E50.0020.0002] # BAMUM LETTER PHASE-A ROM +1683B ; [.3E51.0020.0002] # BAMUM LETTER PHASE-A KPOQ +1683C ; [.3E52.0020.0002] # BAMUM LETTER PHASE-A SOQ +1683D ; [.3E53.0020.0002] # BAMUM LETTER PHASE-A MAP PIEET +1683E ; [.3E54.0020.0002] # BAMUM LETTER PHASE-A SHIRAE +1683F ; [.3E55.0020.0002] # BAMUM LETTER PHASE-A NTAP +16840 ; [.3E56.0020.0002] # BAMUM LETTER PHASE-A SHOQ NSHUT YUM +16841 ; [.3E57.0020.0002] # BAMUM LETTER PHASE-A NYIT MONGKEUAEQ +16842 ; [.3E58.0020.0002] # BAMUM LETTER PHASE-A PAARAE +16843 ; [.3E59.0020.0002] # BAMUM LETTER PHASE-A NKAARAE +16844 ; [.3E5A.0020.0002] # BAMUM LETTER PHASE-A UNKNOWN +16845 ; [.3E5B.0020.0002] # BAMUM LETTER PHASE-A NGGEN +16846 ; [.3E5C.0020.0002] # BAMUM LETTER PHASE-A MAESI +16847 ; [.3E5D.0020.0002] # BAMUM LETTER PHASE-A NJAM +16848 ; [.3E5E.0020.0002] # BAMUM LETTER PHASE-A MBANYI +16849 ; [.3E5F.0020.0002] # BAMUM LETTER PHASE-A NYET +1684A ; [.3E60.0020.0002] # BAMUM LETTER PHASE-A TEUAEN +1684B ; [.3E61.0020.0002] # BAMUM LETTER PHASE-A SOT +1684C ; [.3E62.0020.0002] # BAMUM LETTER PHASE-A PAAM +1684D ; [.3E63.0020.0002] # BAMUM LETTER PHASE-A NSHIEE +1684E ; [.3E64.0020.0002] # BAMUM LETTER PHASE-A MAEM +1684F ; [.3E65.0020.0002] # BAMUM LETTER PHASE-A NYI +16850 ; [.3E66.0020.0002] # BAMUM LETTER PHASE-A KAQ +16851 ; [.3E67.0020.0002] # BAMUM LETTER PHASE-A NSHA +16852 ; [.3E68.0020.0002] # BAMUM LETTER PHASE-A VEE +16853 ; [.3E69.0020.0002] # BAMUM LETTER PHASE-A LU +16854 ; [.3E6A.0020.0002] # BAMUM LETTER PHASE-A NEN +16855 ; [.3E6B.0020.0002] # BAMUM LETTER PHASE-A NAQ +16856 ; [.3E6C.0020.0002] # BAMUM LETTER PHASE-A MBAQ +16857 ; [.3E6D.0020.0002] # BAMUM LETTER PHASE-B NSHUET +16858 ; [.3E6E.0020.0002] # BAMUM LETTER PHASE-B TU MAEMGBIEE +16859 ; [.3E6F.0020.0002] # BAMUM LETTER PHASE-B SIEE +1685A ; [.3E70.0020.0002] # BAMUM LETTER PHASE-B SET TU +1685B ; [.3E71.0020.0002] # BAMUM LETTER PHASE-B LOM NTEUM +1685C ; [.3E72.0020.0002] # BAMUM LETTER PHASE-B MBA MAELEE +1685D ; [.3E73.0020.0002] # BAMUM LETTER PHASE-B KIEEM +1685E ; [.3E74.0020.0002] # BAMUM LETTER PHASE-B YEURAE +1685F ; [.3E75.0020.0002] # BAMUM LETTER PHASE-B MBAARAE +16860 ; [.3E76.0020.0002] # BAMUM LETTER PHASE-B KAM +16861 ; [.3E77.0020.0002] # BAMUM LETTER PHASE-B PEESHI +16862 ; [.3E78.0020.0002] # BAMUM LETTER PHASE-B YAFU LEERAEWA +16863 ; [.3E79.0020.0002] # BAMUM LETTER PHASE-B LAM NSHUT NYAM +16864 ; [.3E7A.0020.0002] # BAMUM LETTER PHASE-B NTIEE SHEUOQ +16865 ; [.3E7B.0020.0002] # BAMUM LETTER PHASE-B NDU NJAA +16866 ; [.3E7C.0020.0002] # BAMUM LETTER PHASE-B GHEUGHEUAEM +16867 ; [.3E7D.0020.0002] # BAMUM LETTER PHASE-B PIT +16868 ; [.3E7E.0020.0002] # BAMUM LETTER PHASE-B TU NSIEE +16869 ; [.3E7F.0020.0002] # BAMUM LETTER PHASE-B SHET NJAQ +1686A ; [.3E80.0020.0002] # BAMUM LETTER PHASE-B SHEUAEQTU +1686B ; [.3E81.0020.0002] # BAMUM LETTER PHASE-B MFON TEUAEQ +1686C ; [.3E82.0020.0002] # BAMUM LETTER PHASE-B MBIT MBAAKET +1686D ; [.3E83.0020.0002] # BAMUM LETTER PHASE-B NYI NTEUM +1686E ; [.3E84.0020.0002] # BAMUM LETTER PHASE-B KEUPUQ +1686F ; [.3E85.0020.0002] # BAMUM LETTER PHASE-B GHEUGHEN +16870 ; [.3E86.0020.0002] # BAMUM LETTER PHASE-B KEUYEUX +16871 ; [.3E87.0020.0002] # BAMUM LETTER PHASE-B LAANAE +16872 ; [.3E88.0020.0002] # BAMUM LETTER PHASE-B PARUM +16873 ; [.3E89.0020.0002] # BAMUM LETTER PHASE-B VEUM +16874 ; [.3E8A.0020.0002] # BAMUM LETTER PHASE-B NGKINDI MVOP +16875 ; [.3E8B.0020.0002] # BAMUM LETTER PHASE-B NGGEU MBU +16876 ; [.3E8C.0020.0002] # BAMUM LETTER PHASE-B WUAET +16877 ; [.3E8D.0020.0002] # BAMUM LETTER PHASE-B SAKEUAE +16878 ; [.3E8E.0020.0002] # BAMUM LETTER PHASE-B TAAM +16879 ; [.3E8F.0020.0002] # BAMUM LETTER PHASE-B MEUQ +1687A ; [.3E90.0020.0002] # BAMUM LETTER PHASE-B NGGUOQ +1687B ; [.3E91.0020.0002] # BAMUM LETTER PHASE-B NGGUOQ LARGE +1687C ; [.3E92.0020.0002] # BAMUM LETTER PHASE-B MFIYAQ +1687D ; [.3E93.0020.0002] # BAMUM LETTER PHASE-B SUE +1687E ; [.3E94.0020.0002] # BAMUM LETTER PHASE-B MBEURI +1687F ; [.3E95.0020.0002] # BAMUM LETTER PHASE-B MONTIEEN +16880 ; [.3E96.0020.0002] # BAMUM LETTER PHASE-B NYAEMAE +16881 ; [.3E97.0020.0002] # BAMUM LETTER PHASE-B PUNGAAM +16882 ; [.3E98.0020.0002] # BAMUM LETTER PHASE-B MEUT NGGEET +16883 ; [.3E99.0020.0002] # BAMUM LETTER PHASE-B FEUX +16884 ; [.3E9A.0020.0002] # BAMUM LETTER PHASE-B MBUOQ +16885 ; [.3E9B.0020.0002] # BAMUM LETTER PHASE-B FEE +16886 ; [.3E9C.0020.0002] # BAMUM LETTER PHASE-B KEUAEM +16887 ; [.3E9D.0020.0002] # BAMUM LETTER PHASE-B MA NJEUAENA +16888 ; [.3E9E.0020.0002] # BAMUM LETTER PHASE-B MA NJUQA +16889 ; [.3E9F.0020.0002] # BAMUM LETTER PHASE-B LET +1688A ; [.3EA0.0020.0002] # BAMUM LETTER PHASE-B NGGAAM +1688B ; [.3EA1.0020.0002] # BAMUM LETTER PHASE-B NSEN +1688C ; [.3EA2.0020.0002] # BAMUM LETTER PHASE-B MA +1688D ; [.3EA3.0020.0002] # BAMUM LETTER PHASE-B KIQ +1688E ; [.3EA4.0020.0002] # BAMUM LETTER PHASE-B NGOM +1688F ; [.3EA5.0020.0002] # BAMUM LETTER PHASE-C NGKUE MAEMBA +16890 ; [.3EA6.0020.0002] # BAMUM LETTER PHASE-C NZA +16891 ; [.3EA7.0020.0002] # BAMUM LETTER PHASE-C YUM +16892 ; [.3EA8.0020.0002] # BAMUM LETTER PHASE-C WANGKUOQ +16893 ; [.3EA9.0020.0002] # BAMUM LETTER PHASE-C NGGEN +16894 ; [.3EAA.0020.0002] # BAMUM LETTER PHASE-C NDEUAEREE +16895 ; [.3EAB.0020.0002] # BAMUM LETTER PHASE-C NGKAQ +16896 ; [.3EAC.0020.0002] # BAMUM LETTER PHASE-C GHARAE +16897 ; [.3EAD.0020.0002] # BAMUM LETTER PHASE-C MBEEKEET +16898 ; [.3EAE.0020.0002] # BAMUM LETTER PHASE-C GBAYI +16899 ; [.3EAF.0020.0002] # BAMUM LETTER PHASE-C NYIR MKPARAQ MEUN +1689A ; [.3EB0.0020.0002] # BAMUM LETTER PHASE-C NTU MBIT +1689B ; [.3EB1.0020.0002] # BAMUM LETTER PHASE-C MBEUM +1689C ; [.3EB2.0020.0002] # BAMUM LETTER PHASE-C PIRIEEN +1689D ; [.3EB3.0020.0002] # BAMUM LETTER PHASE-C NDOMBU +1689E ; [.3EB4.0020.0002] # BAMUM LETTER PHASE-C MBAA CABBAGE-TREE +1689F ; [.3EB5.0020.0002] # BAMUM LETTER PHASE-C KEUSHEUAEP +168A0 ; [.3EB6.0020.0002] # BAMUM LETTER PHASE-C GHAP +168A1 ; [.3EB7.0020.0002] # BAMUM LETTER PHASE-C KEUKAQ +168A2 ; [.3EB8.0020.0002] # BAMUM LETTER PHASE-C YU MUOMAE +168A3 ; [.3EB9.0020.0002] # BAMUM LETTER PHASE-C NZEUM +168A4 ; [.3EBA.0020.0002] # BAMUM LETTER PHASE-C MBUE +168A5 ; [.3EBB.0020.0002] # BAMUM LETTER PHASE-C NSEUAEN +168A6 ; [.3EBC.0020.0002] # BAMUM LETTER PHASE-C MBIT +168A7 ; [.3EBD.0020.0002] # BAMUM LETTER PHASE-C YEUQ +168A8 ; [.3EBE.0020.0002] # BAMUM LETTER PHASE-C KPARAQ +168A9 ; [.3EBF.0020.0002] # BAMUM LETTER PHASE-C KAA +168AA ; [.3EC0.0020.0002] # BAMUM LETTER PHASE-C SEUX +168AB ; [.3EC1.0020.0002] # BAMUM LETTER PHASE-C NDIDA +168AC ; [.3EC2.0020.0002] # BAMUM LETTER PHASE-C TAASHAE +168AD ; [.3EC3.0020.0002] # BAMUM LETTER PHASE-C NJUEQ +168AE ; [.3EC4.0020.0002] # BAMUM LETTER PHASE-C TITA YUE +168AF ; [.3EC5.0020.0002] # BAMUM LETTER PHASE-C SUAET +168B0 ; [.3EC6.0020.0002] # BAMUM LETTER PHASE-C NGGUAEN NYAM +168B1 ; [.3EC7.0020.0002] # BAMUM LETTER PHASE-C VEUX +168B2 ; [.3EC8.0020.0002] # BAMUM LETTER PHASE-C NANSANAQ +168B3 ; [.3EC9.0020.0002] # BAMUM LETTER PHASE-C MA KEUAERI +168B4 ; [.3ECA.0020.0002] # BAMUM LETTER PHASE-C NTAA +168B5 ; [.3ECB.0020.0002] # BAMUM LETTER PHASE-C NGGUON +168B6 ; [.3ECC.0020.0002] # BAMUM LETTER PHASE-C LAP +168B7 ; [.3ECD.0020.0002] # BAMUM LETTER PHASE-C MBIRIEEN +168B8 ; [.3ECE.0020.0002] # BAMUM LETTER PHASE-C MGBASAQ +168B9 ; [.3ECF.0020.0002] # BAMUM LETTER PHASE-C NTEUNGBA +168BA ; [.3ED0.0020.0002] # BAMUM LETTER PHASE-C TEUTEUX +168BB ; [.3ED1.0020.0002] # BAMUM LETTER PHASE-C NGGUM +168BC ; [.3ED2.0020.0002] # BAMUM LETTER PHASE-C FUE +168BD ; [.3ED3.0020.0002] # BAMUM LETTER PHASE-C NDEUT +168BE ; [.3ED4.0020.0002] # BAMUM LETTER PHASE-C NSA +168BF ; [.3ED5.0020.0002] # BAMUM LETTER PHASE-C NSHAQ +168C0 ; [.3ED6.0020.0002] # BAMUM LETTER PHASE-C BUNG +168C1 ; [.3ED7.0020.0002] # BAMUM LETTER PHASE-C VEUAEPEN +168C2 ; [.3ED8.0020.0002] # BAMUM LETTER PHASE-C MBERAE +168C3 ; [.3ED9.0020.0002] # BAMUM LETTER PHASE-C RU +168C4 ; [.3EDA.0020.0002] # BAMUM LETTER PHASE-C NJAEM +168C5 ; [.3EDB.0020.0002] # BAMUM LETTER PHASE-C LAM +168C6 ; [.3EDC.0020.0002] # BAMUM LETTER PHASE-C TITUAEP +168C7 ; [.3EDD.0020.0002] # BAMUM LETTER PHASE-C NSUOT NGOM +168C8 ; [.3EDE.0020.0002] # BAMUM LETTER PHASE-C NJEEEE +168C9 ; [.3EDF.0020.0002] # BAMUM LETTER PHASE-C KET +168CA ; [.3EE0.0020.0002] # BAMUM LETTER PHASE-C NGGU +168CB ; [.3EE1.0020.0002] # BAMUM LETTER PHASE-C MAESI +168CC ; [.3EE2.0020.0002] # BAMUM LETTER PHASE-C MBUAEM +168CD ; [.3EE3.0020.0002] # BAMUM LETTER PHASE-C LU +168CE ; [.3EE4.0020.0002] # BAMUM LETTER PHASE-C KUT +168CF ; [.3EE5.0020.0002] # BAMUM LETTER PHASE-C NJAM +168D0 ; [.3EE6.0020.0002] # BAMUM LETTER PHASE-C NGOM +168D1 ; [.3EE7.0020.0002] # BAMUM LETTER PHASE-C WUP +168D2 ; [.3EE8.0020.0002] # BAMUM LETTER PHASE-C NGGUEET +168D3 ; [.3EE9.0020.0002] # BAMUM LETTER PHASE-C NSOM +168D4 ; [.3EEA.0020.0002] # BAMUM LETTER PHASE-C NTEN +168D5 ; [.3EEB.0020.0002] # BAMUM LETTER PHASE-C KUOP NKAARAE +168D6 ; [.3EEC.0020.0002] # BAMUM LETTER PHASE-C NSUN +168D7 ; [.3EED.0020.0002] # BAMUM LETTER PHASE-C NDAM +168D8 ; [.3EEE.0020.0002] # BAMUM LETTER PHASE-C MA NSIEE +168D9 ; [.3EEF.0020.0002] # BAMUM LETTER PHASE-C YAA +168DA ; [.3EF0.0020.0002] # BAMUM LETTER PHASE-C NDAP +168DB ; [.3EF1.0020.0002] # BAMUM LETTER PHASE-C SHUEQ +168DC ; [.3EF2.0020.0002] # BAMUM LETTER PHASE-C SETFON +168DD ; [.3EF3.0020.0002] # BAMUM LETTER PHASE-C MBI +168DE ; [.3EF4.0020.0002] # BAMUM LETTER PHASE-C MAEMBA +168DF ; [.3EF5.0020.0002] # BAMUM LETTER PHASE-C MBANYI +168E0 ; [.3EF6.0020.0002] # BAMUM LETTER PHASE-C KEUSEUX +168E1 ; [.3EF7.0020.0002] # BAMUM LETTER PHASE-C MBEUX +168E2 ; [.3EF8.0020.0002] # BAMUM LETTER PHASE-C KEUM +168E3 ; [.3EF9.0020.0002] # BAMUM LETTER PHASE-C MBAA PICKET +168E4 ; [.3EFA.0020.0002] # BAMUM LETTER PHASE-C YUWOQ +168E5 ; [.3EFB.0020.0002] # BAMUM LETTER PHASE-C NJEUX +168E6 ; [.3EFC.0020.0002] # BAMUM LETTER PHASE-C MIEE +168E7 ; [.3EFD.0020.0002] # BAMUM LETTER PHASE-C MUAE +168E8 ; [.3EFE.0020.0002] # BAMUM LETTER PHASE-C SHIQ +168E9 ; [.3EFF.0020.0002] # BAMUM LETTER PHASE-C KEN LAW +168EA ; [.3F00.0020.0002] # BAMUM LETTER PHASE-C KEN FATIGUE +168EB ; [.3F01.0020.0002] # BAMUM LETTER PHASE-C NGAQ +168EC ; [.3F02.0020.0002] # BAMUM LETTER PHASE-C NAQ +168ED ; [.3F03.0020.0002] # BAMUM LETTER PHASE-C LIQ +168EE ; [.3F04.0020.0002] # BAMUM LETTER PHASE-C PIN +168EF ; [.3F05.0020.0002] # BAMUM LETTER PHASE-C PEN +168F0 ; [.3F06.0020.0002] # BAMUM LETTER PHASE-C TET +168F1 ; [.3F07.0020.0002] # BAMUM LETTER PHASE-D MBUO +168F2 ; [.3F08.0020.0002] # BAMUM LETTER PHASE-D WAP +168F3 ; [.3F09.0020.0002] # BAMUM LETTER PHASE-D NJI +168F4 ; [.3F0A.0020.0002] # BAMUM LETTER PHASE-D MFON +168F5 ; [.3F0B.0020.0002] # BAMUM LETTER PHASE-D NJIEE +168F6 ; [.3F0C.0020.0002] # BAMUM LETTER PHASE-D LIEE +168F7 ; [.3F0D.0020.0002] # BAMUM LETTER PHASE-D NJEUT +168F8 ; [.3F0E.0020.0002] # BAMUM LETTER PHASE-D NSHEE +168F9 ; [.3F0F.0020.0002] # BAMUM LETTER PHASE-D NGGAAMAE +168FA ; [.3F10.0020.0002] # BAMUM LETTER PHASE-D NYAM +168FB ; [.3F11.0020.0002] # BAMUM LETTER PHASE-D WUAEN +168FC ; [.3F12.0020.0002] # BAMUM LETTER PHASE-D NGKUN +168FD ; [.3F13.0020.0002] # BAMUM LETTER PHASE-D SHEE +168FE ; [.3F14.0020.0002] # BAMUM LETTER PHASE-D NGKAP +168FF ; [.3F15.0020.0002] # BAMUM LETTER PHASE-D KEUAETMEUN +16900 ; [.3F16.0020.0002] # BAMUM LETTER PHASE-D TEUT +16901 ; [.3F17.0020.0002] # BAMUM LETTER PHASE-D SHEUAE +16902 ; [.3F18.0020.0002] # BAMUM LETTER PHASE-D NJAP +16903 ; [.3F19.0020.0002] # BAMUM LETTER PHASE-D SUE +16904 ; [.3F1A.0020.0002] # BAMUM LETTER PHASE-D KET +16905 ; [.3F1B.0020.0002] # BAMUM LETTER PHASE-D YAEMMAE +16906 ; [.3F1C.0020.0002] # BAMUM LETTER PHASE-D KUOM +16907 ; [.3F1D.0020.0002] # BAMUM LETTER PHASE-D SAP +16908 ; [.3F1E.0020.0002] # BAMUM LETTER PHASE-D MFEUT +16909 ; [.3F1F.0020.0002] # BAMUM LETTER PHASE-D NDEUX +1690A ; [.3F20.0020.0002] # BAMUM LETTER PHASE-D MALEERI +1690B ; [.3F21.0020.0002] # BAMUM LETTER PHASE-D MEUT +1690C ; [.3F22.0020.0002] # BAMUM LETTER PHASE-D SEUAEQ +1690D ; [.3F23.0020.0002] # BAMUM LETTER PHASE-D YEN +1690E ; [.3F24.0020.0002] # BAMUM LETTER PHASE-D NJEUAEM +1690F ; [.3F25.0020.0002] # BAMUM LETTER PHASE-D KEUOT MBUAE +16910 ; [.3F26.0020.0002] # BAMUM LETTER PHASE-D NGKEURI +16911 ; [.3F27.0020.0002] # BAMUM LETTER PHASE-D TU +16912 ; [.3F28.0020.0002] # BAMUM LETTER PHASE-D GHAA +16913 ; [.3F29.0020.0002] # BAMUM LETTER PHASE-D NGKYEE +16914 ; [.3F2A.0020.0002] # BAMUM LETTER PHASE-D FEUFEUAET +16915 ; [.3F2B.0020.0002] # BAMUM LETTER PHASE-D NDEE +16916 ; [.3F2C.0020.0002] # BAMUM LETTER PHASE-D MGBOFUM +16917 ; [.3F2D.0020.0002] # BAMUM LETTER PHASE-D LEUAEP +16918 ; [.3F2E.0020.0002] # BAMUM LETTER PHASE-D NDON +16919 ; [.3F2F.0020.0002] # BAMUM LETTER PHASE-D MONI +1691A ; [.3F30.0020.0002] # BAMUM LETTER PHASE-D MGBEUN +1691B ; [.3F31.0020.0002] # BAMUM LETTER PHASE-D PUUT +1691C ; [.3F32.0020.0002] # BAMUM LETTER PHASE-D MGBIEE +1691D ; [.3F33.0020.0002] # BAMUM LETTER PHASE-D MFO +1691E ; [.3F34.0020.0002] # BAMUM LETTER PHASE-D LUM +1691F ; [.3F35.0020.0002] # BAMUM LETTER PHASE-D NSIEEP +16920 ; [.3F36.0020.0002] # BAMUM LETTER PHASE-D MBAA +16921 ; [.3F37.0020.0002] # BAMUM LETTER PHASE-D KWAET +16922 ; [.3F38.0020.0002] # BAMUM LETTER PHASE-D NYET +16923 ; [.3F39.0020.0002] # BAMUM LETTER PHASE-D TEUAEN +16924 ; [.3F3A.0020.0002] # BAMUM LETTER PHASE-D SOT +16925 ; [.3F3B.0020.0002] # BAMUM LETTER PHASE-D YUWOQ +16926 ; [.3F3C.0020.0002] # BAMUM LETTER PHASE-D KEUM +16927 ; [.3F3D.0020.0002] # BAMUM LETTER PHASE-D RAEM +16928 ; [.3F3E.0020.0002] # BAMUM LETTER PHASE-D TEEEE +16929 ; [.3F3F.0020.0002] # BAMUM LETTER PHASE-D NGKEUAEQ +1692A ; [.3F40.0020.0002] # BAMUM LETTER PHASE-D MFEUAE +1692B ; [.3F41.0020.0002] # BAMUM LETTER PHASE-D NSIEET +1692C ; [.3F42.0020.0002] # BAMUM LETTER PHASE-D KEUP +1692D ; [.3F43.0020.0002] # BAMUM LETTER PHASE-D PIP +1692E ; [.3F44.0020.0002] # BAMUM LETTER PHASE-D PEUTAE +1692F ; [.3F45.0020.0002] # BAMUM LETTER PHASE-D NYUE +16930 ; [.3F46.0020.0002] # BAMUM LETTER PHASE-D LET +16931 ; [.3F47.0020.0002] # BAMUM LETTER PHASE-D NGGAAM +16932 ; [.3F48.0020.0002] # BAMUM LETTER PHASE-D MFIEE +16933 ; [.3F49.0020.0002] # BAMUM LETTER PHASE-D NGGWAEN +16934 ; [.3F4A.0020.0002] # BAMUM LETTER PHASE-D YUOM +16935 ; [.3F4B.0020.0002] # BAMUM LETTER PHASE-D PAP +16936 ; [.3F4C.0020.0002] # BAMUM LETTER PHASE-D YUOP +16937 ; [.3F4D.0020.0002] # BAMUM LETTER PHASE-D NDAM +16938 ; [.3F4E.0020.0002] # BAMUM LETTER PHASE-D NTEUM +16939 ; [.3F4F.0020.0002] # BAMUM LETTER PHASE-D SUAE +1693A ; [.3F50.0020.0002] # BAMUM LETTER PHASE-D KUN +1693B ; [.3F51.0020.0002] # BAMUM LETTER PHASE-D NGGEUX +1693C ; [.3F52.0020.0002] # BAMUM LETTER PHASE-D NGKIEE +1693D ; [.3F53.0020.0002] # BAMUM LETTER PHASE-D TUOT +1693E ; [.3F54.0020.0002] # BAMUM LETTER PHASE-D MEUN +1693F ; [.3F55.0020.0002] # BAMUM LETTER PHASE-D KUQ +16940 ; [.3F56.0020.0002] # BAMUM LETTER PHASE-D NSUM +16941 ; [.3F57.0020.0002] # BAMUM LETTER PHASE-D TEUN +16942 ; [.3F58.0020.0002] # BAMUM LETTER PHASE-D MAENJET +16943 ; [.3F59.0020.0002] # BAMUM LETTER PHASE-D NGGAP +16944 ; [.3F5A.0020.0002] # BAMUM LETTER PHASE-D LEUM +16945 ; [.3F5B.0020.0002] # BAMUM LETTER PHASE-D NGGUOM +16946 ; [.3F5C.0020.0002] # BAMUM LETTER PHASE-D NSHUT +16947 ; [.3F5D.0020.0002] # BAMUM LETTER PHASE-D NJUEQ +16948 ; [.3F5E.0020.0002] # BAMUM LETTER PHASE-D GHEUAE +16949 ; [.3F5F.0020.0002] # BAMUM LETTER PHASE-D KU +1694A ; [.3F60.0020.0002] # BAMUM LETTER PHASE-D REN OLD +1694B ; [.3F61.0020.0002] # BAMUM LETTER PHASE-D TAE +1694C ; [.3F62.0020.0002] # BAMUM LETTER PHASE-D TOQ +1694D ; [.3F63.0020.0002] # BAMUM LETTER PHASE-D NYI +1694E ; [.3F64.0020.0002] # BAMUM LETTER PHASE-D RII +1694F ; [.3F65.0020.0002] # BAMUM LETTER PHASE-D LEEEE +16950 ; [.3F66.0020.0002] # BAMUM LETTER PHASE-D MEEEE +16951 ; [.3F67.0020.0002] # BAMUM LETTER PHASE-D M +16952 ; [.3F68.0020.0002] # BAMUM LETTER PHASE-D SUU +16953 ; [.3F69.0020.0002] # BAMUM LETTER PHASE-D MU +16954 ; [.3F6A.0020.0002] # BAMUM LETTER PHASE-D SHII +16955 ; [.3F6B.0020.0002] # BAMUM LETTER PHASE-D SHEUX +16956 ; [.3F6C.0020.0002] # BAMUM LETTER PHASE-D KYEE +16957 ; [.3F6D.0020.0002] # BAMUM LETTER PHASE-D NU +16958 ; [.3F6E.0020.0002] # BAMUM LETTER PHASE-D SHU +16959 ; [.3F6F.0020.0002] # BAMUM LETTER PHASE-D NTEE +1695A ; [.3F70.0020.0002] # BAMUM LETTER PHASE-D PEE +1695B ; [.3F71.0020.0002] # BAMUM LETTER PHASE-D NI +1695C ; [.3F72.0020.0002] # BAMUM LETTER PHASE-D SHOQ +1695D ; [.3F73.0020.0002] # BAMUM LETTER PHASE-D PUQ +1695E ; [.3F74.0020.0002] # BAMUM LETTER PHASE-D MVOP +1695F ; [.3F75.0020.0002] # BAMUM LETTER PHASE-D LOQ +16960 ; [.3F76.0020.0002] # BAMUM LETTER PHASE-D REN MUCH +16961 ; [.3F77.0020.0002] # BAMUM LETTER PHASE-D TI +16962 ; [.3F78.0020.0002] # BAMUM LETTER PHASE-D NTUU +16963 ; [.3F79.0020.0002] # BAMUM LETTER PHASE-D MBAA SEVEN +16964 ; [.3F7A.0020.0002] # BAMUM LETTER PHASE-D SAQ +16965 ; [.3F7B.0020.0002] # BAMUM LETTER PHASE-D FAA +16966 ; [.3F7C.0020.0002] # BAMUM LETTER PHASE-E NDAP +16967 ; [.3F7D.0020.0002] # BAMUM LETTER PHASE-E TOON +16968 ; [.3F7E.0020.0002] # BAMUM LETTER PHASE-E MBEUM +16969 ; [.3F7F.0020.0002] # BAMUM LETTER PHASE-E LAP +1696A ; [.3F80.0020.0002] # BAMUM LETTER PHASE-E VOM +1696B ; [.3F81.0020.0002] # BAMUM LETTER PHASE-E LOON +1696C ; [.3F82.0020.0002] # BAMUM LETTER PHASE-E PAA +1696D ; [.3F83.0020.0002] # BAMUM LETTER PHASE-E SOM +1696E ; [.3F84.0020.0002] # BAMUM LETTER PHASE-E RAQ +1696F ; [.3F85.0020.0002] # BAMUM LETTER PHASE-E NSHUOP +16970 ; [.3F86.0020.0002] # BAMUM LETTER PHASE-E NDUN +16971 ; [.3F87.0020.0002] # BAMUM LETTER PHASE-E PUAE +16972 ; [.3F88.0020.0002] # BAMUM LETTER PHASE-E TAM +16973 ; [.3F89.0020.0002] # BAMUM LETTER PHASE-E NGKA +16974 ; [.3F8A.0020.0002] # BAMUM LETTER PHASE-E KPEUX +16975 ; [.3F8B.0020.0002] # BAMUM LETTER PHASE-E WUO +16976 ; [.3F8C.0020.0002] # BAMUM LETTER PHASE-E SEE +16977 ; [.3F8D.0020.0002] # BAMUM LETTER PHASE-E NGGEUAET +16978 ; [.3F8E.0020.0002] # BAMUM LETTER PHASE-E PAAM +16979 ; [.3F8F.0020.0002] # BAMUM LETTER PHASE-E TOO +1697A ; [.3F90.0020.0002] # BAMUM LETTER PHASE-E KUOP +1697B ; [.3F91.0020.0002] # BAMUM LETTER PHASE-E LOM +1697C ; [.3F92.0020.0002] # BAMUM LETTER PHASE-E NSHIEE +1697D ; [.3F93.0020.0002] # BAMUM LETTER PHASE-E NGOP +1697E ; [.3F94.0020.0002] # BAMUM LETTER PHASE-E MAEM +1697F ; [.3F95.0020.0002] # BAMUM LETTER PHASE-E NGKEUX +16980 ; [.3F96.0020.0002] # BAMUM LETTER PHASE-E NGOQ +16981 ; [.3F97.0020.0002] # BAMUM LETTER PHASE-E NSHUE +16982 ; [.3F98.0020.0002] # BAMUM LETTER PHASE-E RIMGBA +16983 ; [.3F99.0020.0002] # BAMUM LETTER PHASE-E NJEUX +16984 ; [.3F9A.0020.0002] # BAMUM LETTER PHASE-E PEEM +16985 ; [.3F9B.0020.0002] # BAMUM LETTER PHASE-E SAA +16986 ; [.3F9C.0020.0002] # BAMUM LETTER PHASE-E NGGURAE +16987 ; [.3F9D.0020.0002] # BAMUM LETTER PHASE-E MGBA +16988 ; [.3F9E.0020.0002] # BAMUM LETTER PHASE-E GHEUX +16989 ; [.3F9F.0020.0002] # BAMUM LETTER PHASE-E NGKEUAEM +1698A ; [.3FA0.0020.0002] # BAMUM LETTER PHASE-E NJAEMLI +1698B ; [.3FA1.0020.0002] # BAMUM LETTER PHASE-E MAP +1698C ; [.3FA2.0020.0002] # BAMUM LETTER PHASE-E LOOT +1698D ; [.3FA3.0020.0002] # BAMUM LETTER PHASE-E NGGEEEE +1698E ; [.3FA4.0020.0002] # BAMUM LETTER PHASE-E NDIQ +1698F ; [.3FA5.0020.0002] # BAMUM LETTER PHASE-E TAEN NTEUM +16990 ; [.3FA6.0020.0002] # BAMUM LETTER PHASE-E SET +16991 ; [.3FA7.0020.0002] # BAMUM LETTER PHASE-E PUM +16992 ; [.3FA8.0020.0002] # BAMUM LETTER PHASE-E NDAA SOFTNESS +16993 ; [.3FA9.0020.0002] # BAMUM LETTER PHASE-E NGGUAESHAE NYAM +16994 ; [.3FAA.0020.0002] # BAMUM LETTER PHASE-E YIEE +16995 ; [.3FAB.0020.0002] # BAMUM LETTER PHASE-E GHEUN +16996 ; [.3FAC.0020.0002] # BAMUM LETTER PHASE-E TUAE +16997 ; [.3FAD.0020.0002] # BAMUM LETTER PHASE-E YEUAE +16998 ; [.3FAE.0020.0002] # BAMUM LETTER PHASE-E PO +16999 ; [.3FAF.0020.0002] # BAMUM LETTER PHASE-E TUMAE +1699A ; [.3FB0.0020.0002] # BAMUM LETTER PHASE-E KEUAE +1699B ; [.3FB1.0020.0002] # BAMUM LETTER PHASE-E SUAEN +1699C ; [.3FB2.0020.0002] # BAMUM LETTER PHASE-E TEUAEQ +1699D ; [.3FB3.0020.0002] # BAMUM LETTER PHASE-E VEUAE +1699E ; [.3FB4.0020.0002] # BAMUM LETTER PHASE-E WEUX +1699F ; [.3FB5.0020.0002] # BAMUM LETTER PHASE-E LAAM +169A0 ; [.3FB6.0020.0002] # BAMUM LETTER PHASE-E PU +169A1 ; [.3FB7.0020.0002] # BAMUM LETTER PHASE-E TAAQ +169A2 ; [.3FB8.0020.0002] # BAMUM LETTER PHASE-E GHAAMAE +169A3 ; [.3FB9.0020.0002] # BAMUM LETTER PHASE-E NGEUREUT +169A4 ; [.3FBA.0020.0002] # BAMUM LETTER PHASE-E SHEUAEQ +169A5 ; [.3FBB.0020.0002] # BAMUM LETTER PHASE-E MGBEN +169A6 ; [.3FBC.0020.0002] # BAMUM LETTER PHASE-E MBEE +169A7 ; [.3FBD.0020.0002] # BAMUM LETTER PHASE-E NZAQ +169A8 ; [.3FBE.0020.0002] # BAMUM LETTER PHASE-E NKOM +169A9 ; [.3FBF.0020.0002] # BAMUM LETTER PHASE-E GBET +169AA ; [.3FC0.0020.0002] # BAMUM LETTER PHASE-E TUM +169AB ; [.3FC1.0020.0002] # BAMUM LETTER PHASE-E KUET +169AC ; [.3FC2.0020.0002] # BAMUM LETTER PHASE-E YAP +169AD ; [.3FC3.0020.0002] # BAMUM LETTER PHASE-E NYI CLEAVER +169AE ; [.3FC4.0020.0002] # BAMUM LETTER PHASE-E YIT +169AF ; [.3FC5.0020.0002] # BAMUM LETTER PHASE-E MFEUQ +169B0 ; [.3FC6.0020.0002] # BAMUM LETTER PHASE-E NDIAQ +169B1 ; [.3FC7.0020.0002] # BAMUM LETTER PHASE-E PIEEQ +169B2 ; [.3FC8.0020.0002] # BAMUM LETTER PHASE-E YUEQ +169B3 ; [.3FC9.0020.0002] # BAMUM LETTER PHASE-E LEUAEM +169B4 ; [.3FCA.0020.0002] # BAMUM LETTER PHASE-E FUE +169B5 ; [.3FCB.0020.0002] # BAMUM LETTER PHASE-E GBEUX +169B6 ; [.3FCC.0020.0002] # BAMUM LETTER PHASE-E NGKUP +169B7 ; [.3FCD.0020.0002] # BAMUM LETTER PHASE-E KET +169B8 ; [.3FCE.0020.0002] # BAMUM LETTER PHASE-E MAE +169B9 ; [.3FCF.0020.0002] # BAMUM LETTER PHASE-E NGKAAMI +169BA ; [.3FD0.0020.0002] # BAMUM LETTER PHASE-E GHET +169BB ; [.3FD1.0020.0002] # BAMUM LETTER PHASE-E FA +169BC ; [.3FD2.0020.0002] # BAMUM LETTER PHASE-E NTUM +169BD ; [.3FD3.0020.0002] # BAMUM LETTER PHASE-E PEUT +169BE ; [.3FD4.0020.0002] # BAMUM LETTER PHASE-E YEUM +169BF ; [.3FD5.0020.0002] # BAMUM LETTER PHASE-E NGGEUAE +169C0 ; [.3FD6.0020.0002] # BAMUM LETTER PHASE-E NYI BETWEEN +169C1 ; [.3FD7.0020.0002] # BAMUM LETTER PHASE-E NZUQ +169C2 ; [.3FD8.0020.0002] # BAMUM LETTER PHASE-E POON +169C3 ; [.3FD9.0020.0002] # BAMUM LETTER PHASE-E MIEE +169C4 ; [.3FDA.0020.0002] # BAMUM LETTER PHASE-E FUET +169C5 ; [.3FDB.0020.0002] # BAMUM LETTER PHASE-E NAE +169C6 ; [.3FDC.0020.0002] # BAMUM LETTER PHASE-E MUAE +169C7 ; [.3FDD.0020.0002] # BAMUM LETTER PHASE-E GHEUAE +169C8 ; [.3FDE.0020.0002] # BAMUM LETTER PHASE-E FU I +169C9 ; [.3FDF.0020.0002] # BAMUM LETTER PHASE-E MVI +169CA ; [.3FE0.0020.0002] # BAMUM LETTER PHASE-E PUAQ +169CB ; [.3FE1.0020.0002] # BAMUM LETTER PHASE-E NGKUM +169CC ; [.3FE2.0020.0002] # BAMUM LETTER PHASE-E KUT +169CD ; [.3FE3.0020.0002] # BAMUM LETTER PHASE-E PIET +169CE ; [.3FE4.0020.0002] # BAMUM LETTER PHASE-E NTAP +169CF ; [.3FE5.0020.0002] # BAMUM LETTER PHASE-E YEUAET +169D0 ; [.3FE6.0020.0002] # BAMUM LETTER PHASE-E NGGUP +169D1 ; [.3FE7.0020.0002] # BAMUM LETTER PHASE-E PA PEOPLE +169D2 ; [.3FE8.0020.0002] # BAMUM LETTER PHASE-E FU CALL +169D3 ; [.3FE9.0020.0002] # BAMUM LETTER PHASE-E FOM +169D4 ; [.3FEA.0020.0002] # BAMUM LETTER PHASE-E NJEE +169D5 ; [.3FEB.0020.0002] # BAMUM LETTER PHASE-E A +169D6 ; [.3FEC.0020.0002] # BAMUM LETTER PHASE-E TOQ +169D7 ; [.3FED.0020.0002] # BAMUM LETTER PHASE-E O +169D8 ; [.3FEE.0020.0002] # BAMUM LETTER PHASE-E I +169D9 ; [.3FEF.0020.0002] # BAMUM LETTER PHASE-E LAQ +169DA ; [.3FF0.0020.0002] # BAMUM LETTER PHASE-E PA PLURAL +169DB ; [.3FF1.0020.0002] # BAMUM LETTER PHASE-E TAA +169DC ; [.3FF2.0020.0002] # BAMUM LETTER PHASE-E TAQ +169DD ; [.3FF3.0020.0002] # BAMUM LETTER PHASE-E NDAA MY HOUSE +169DE ; [.3FF4.0020.0002] # BAMUM LETTER PHASE-E SHIQ +169DF ; [.3FF5.0020.0002] # BAMUM LETTER PHASE-E YEUX +169E0 ; [.3FF6.0020.0002] # BAMUM LETTER PHASE-E NGUAE +169E1 ; [.3FF7.0020.0002] # BAMUM LETTER PHASE-E YUAEN +169E2 ; [.3FF8.0020.0002] # BAMUM LETTER PHASE-E YOQ SWIMMING +169E3 ; [.3FF9.0020.0002] # BAMUM LETTER PHASE-E YOQ COVER +169E4 ; [.3FFA.0020.0002] # BAMUM LETTER PHASE-E YUQ +169E5 ; [.3FFB.0020.0002] # BAMUM LETTER PHASE-E YUN +169E6 ; [.3FFC.0020.0002] # BAMUM LETTER PHASE-E KEUX +169E7 ; [.3FFD.0020.0002] # BAMUM LETTER PHASE-E PEUX +169E8 ; [.3FFE.0020.0002] # BAMUM LETTER PHASE-E NJEE EPOCH +169E9 ; [.3FFF.0020.0002] # BAMUM LETTER PHASE-E PUE +169EA ; [.4000.0020.0002] # BAMUM LETTER PHASE-E WUE +169EB ; [.4001.0020.0002] # BAMUM LETTER PHASE-E FEE +169EC ; [.4002.0020.0002] # BAMUM LETTER PHASE-E VEE +169ED ; [.4003.0020.0002] # BAMUM LETTER PHASE-E LU +169EE ; [.4004.0020.0002] # BAMUM LETTER PHASE-E MI +169EF ; [.4005.0020.0002] # BAMUM LETTER PHASE-E REUX +169F0 ; [.4006.0020.0002] # BAMUM LETTER PHASE-E RAE +169F1 ; [.4007.0020.0002] # BAMUM LETTER PHASE-E NGUAET +169F2 ; [.4008.0020.0002] # BAMUM LETTER PHASE-E NGA +169F3 ; [.4009.0020.0002] # BAMUM LETTER PHASE-E SHO +169F4 ; [.400A.0020.0002] # BAMUM LETTER PHASE-E SHOQ +169F5 ; [.400B.0020.0002] # BAMUM LETTER PHASE-E FU REMEDY +169F6 ; [.400C.0020.0002] # BAMUM LETTER PHASE-E NA +169F7 ; [.400D.0020.0002] # BAMUM LETTER PHASE-E PI +169F8 ; [.400E.0020.0002] # BAMUM LETTER PHASE-E LOQ +169F9 ; [.400F.0020.0002] # BAMUM LETTER PHASE-E KO +169FA ; [.4010.0020.0002] # BAMUM LETTER PHASE-E MEN +169FB ; [.4011.0020.0002] # BAMUM LETTER PHASE-E MA +169FC ; [.4012.0020.0002] # BAMUM LETTER PHASE-E MAQ +169FD ; [.4013.0020.0002] # BAMUM LETTER PHASE-E TEU +169FE ; [.4014.0020.0002] # BAMUM LETTER PHASE-E KI +169FF ; [.4015.0020.0002] # BAMUM LETTER PHASE-E MON +16A00 ; [.4016.0020.0002] # BAMUM LETTER PHASE-E TEN +16A01 ; [.4017.0020.0002] # BAMUM LETTER PHASE-E FAQ +16A02 ; [.4018.0020.0002] # BAMUM LETTER PHASE-E GHOM +16A03 ; [.4019.0020.0002] # BAMUM LETTER PHASE-F KA +16A04 ; [.401A.0020.0002] # BAMUM LETTER PHASE-F U +16A05 ; [.401B.0020.0002] # BAMUM LETTER PHASE-F KU +16A06 ; [.401C.0020.0002] # BAMUM LETTER PHASE-F EE +16A07 ; [.401D.0020.0002] # BAMUM LETTER PHASE-F REE +16A08 ; [.401E.0020.0002] # BAMUM LETTER PHASE-F TAE +16A09 ; [.401F.0020.0002] # BAMUM LETTER PHASE-F NYI +16A0A ; [.4020.0020.0002] # BAMUM LETTER PHASE-F LA +16A0B ; [.4021.0020.0002] # BAMUM LETTER PHASE-F RII +16A0C ; [.4022.0020.0002] # BAMUM LETTER PHASE-F RIEE +16A0D ; [.4023.0020.0002] # BAMUM LETTER PHASE-F MEEEE +16A0E ; [.4024.0020.0002] # BAMUM LETTER PHASE-F TAA +16A0F ; [.4025.0020.0002] # BAMUM LETTER PHASE-F NDAA +16A10 ; [.4026.0020.0002] # BAMUM LETTER PHASE-F NJAEM +16A11 ; [.4027.0020.0002] # BAMUM LETTER PHASE-F M +16A12 ; [.4028.0020.0002] # BAMUM LETTER PHASE-F SUU +16A13 ; [.4029.0020.0002] # BAMUM LETTER PHASE-F SHII +16A14 ; [.402A.0020.0002] # BAMUM LETTER PHASE-F SI +16A15 ; [.402B.0020.0002] # BAMUM LETTER PHASE-F SEUX +16A16 ; [.402C.0020.0002] # BAMUM LETTER PHASE-F KYEE +16A17 ; [.402D.0020.0002] # BAMUM LETTER PHASE-F KET +16A18 ; [.402E.0020.0002] # BAMUM LETTER PHASE-F NUAE +16A19 ; [.402F.0020.0002] # BAMUM LETTER PHASE-F NU +16A1A ; [.4030.0020.0002] # BAMUM LETTER PHASE-F NJUAE +16A1B ; [.4031.0020.0002] # BAMUM LETTER PHASE-F YOQ +16A1C ; [.4032.0020.0002] # BAMUM LETTER PHASE-F SHU +16A1D ; [.4033.0020.0002] # BAMUM LETTER PHASE-F YA +16A1E ; [.4034.0020.0002] # BAMUM LETTER PHASE-F NSHA +16A1F ; [.4035.0020.0002] # BAMUM LETTER PHASE-F PEUX +16A20 ; [.4036.0020.0002] # BAMUM LETTER PHASE-F NTEE +16A21 ; [.4037.0020.0002] # BAMUM LETTER PHASE-F WUE +16A22 ; [.4038.0020.0002] # BAMUM LETTER PHASE-F PEE +16A23 ; [.4039.0020.0002] # BAMUM LETTER PHASE-F RU +16A24 ; [.403A.0020.0002] # BAMUM LETTER PHASE-F NI +16A25 ; [.403B.0020.0002] # BAMUM LETTER PHASE-F REUX +16A26 ; [.403C.0020.0002] # BAMUM LETTER PHASE-F KEN +16A27 ; [.403D.0020.0002] # BAMUM LETTER PHASE-F NGKWAEN +16A28 ; [.403E.0020.0002] # BAMUM LETTER PHASE-F NGGA +16A29 ; [.403F.0020.0002] # BAMUM LETTER PHASE-F SHO +16A2A ; [.4040.0020.0002] # BAMUM LETTER PHASE-F PUAE +16A2B ; [.4041.0020.0002] # BAMUM LETTER PHASE-F FOM +16A2C ; [.4042.0020.0002] # BAMUM LETTER PHASE-F WA +16A2D ; [.4043.0020.0002] # BAMUM LETTER PHASE-F LI +16A2E ; [.4044.0020.0002] # BAMUM LETTER PHASE-F LOQ +16A2F ; [.4045.0020.0002] # BAMUM LETTER PHASE-F KO +16A30 ; [.4046.0020.0002] # BAMUM LETTER PHASE-F MBEN +16A31 ; [.4047.0020.0002] # BAMUM LETTER PHASE-F REN +16A32 ; [.4048.0020.0002] # BAMUM LETTER PHASE-F MA +16A33 ; [.4049.0020.0002] # BAMUM LETTER PHASE-F MO +16A34 ; [.404A.0020.0002] # BAMUM LETTER PHASE-F MBAA +16A35 ; [.404B.0020.0002] # BAMUM LETTER PHASE-F TET +16A36 ; [.404C.0020.0002] # BAMUM LETTER PHASE-F KPA +16A37 ; [.404D.0020.0002] # BAMUM LETTER PHASE-F SAMBA +16A38 ; [.404E.0020.0002] # BAMUM LETTER PHASE-F VUEQ +16AD0 ; [.404F.0020.0002] # BASSA VAH LETTER ENNI +16AD1 ; [.4050.0020.0002] # BASSA VAH LETTER KA +16AD2 ; [.4051.0020.0002] # BASSA VAH LETTER SE +16AD3 ; [.4052.0020.0002] # BASSA VAH LETTER FA +16AD4 ; [.4053.0020.0002] # BASSA VAH LETTER MBE +16AD5 ; [.4054.0020.0002] # BASSA VAH LETTER YIE +16AD6 ; [.4055.0020.0002] # BASSA VAH LETTER GAH +16AD7 ; [.4056.0020.0002] # BASSA VAH LETTER DHII +16AD8 ; [.4057.0020.0002] # BASSA VAH LETTER KPAH +16AD9 ; [.4058.0020.0002] # BASSA VAH LETTER JO +16ADA ; [.4059.0020.0002] # BASSA VAH LETTER HWAH +16ADB ; [.405A.0020.0002] # BASSA VAH LETTER WA +16ADC ; [.405B.0020.0002] # BASSA VAH LETTER ZO +16ADD ; [.405C.0020.0002] # BASSA VAH LETTER GBU +16ADE ; [.405D.0020.0002] # BASSA VAH LETTER DO +16ADF ; [.405E.0020.0002] # BASSA VAH LETTER CE +16AE0 ; [.405F.0020.0002] # BASSA VAH LETTER UWU +16AE1 ; [.4060.0020.0002] # BASSA VAH LETTER TO +16AE2 ; [.4061.0020.0002] # BASSA VAH LETTER BA +16AE3 ; [.4062.0020.0002] # BASSA VAH LETTER VU +16AE4 ; [.4063.0020.0002] # BASSA VAH LETTER YEIN +16AE5 ; [.4064.0020.0002] # BASSA VAH LETTER PA +16AE6 ; [.4065.0020.0002] # BASSA VAH LETTER WADDA +16AE7 ; [.4066.0020.0002] # BASSA VAH LETTER A +16AE8 ; [.4067.0020.0002] # BASSA VAH LETTER O +16AE9 ; [.4068.0020.0002] # BASSA VAH LETTER OO +16AEA ; [.4069.0020.0002] # BASSA VAH LETTER U +16AEB ; [.406A.0020.0002] # BASSA VAH LETTER EE +16AEC ; [.406B.0020.0002] # BASSA VAH LETTER E +16AED ; [.406C.0020.0002] # BASSA VAH LETTER I +1E800 ; [.406D.0020.0002] # MENDE KIKAKUI SYLLABLE M001 KI +1E801 ; [.406E.0020.0002] # MENDE KIKAKUI SYLLABLE M002 KA +1E802 ; [.406F.0020.0002] # MENDE KIKAKUI SYLLABLE M003 KU +1E803 ; [.4070.0020.0002] # MENDE KIKAKUI SYLLABLE M065 KEE +1E804 ; [.4071.0020.0002] # MENDE KIKAKUI SYLLABLE M095 KE +1E805 ; [.4072.0020.0002] # MENDE KIKAKUI SYLLABLE M076 KOO +1E806 ; [.4073.0020.0002] # MENDE KIKAKUI SYLLABLE M048 KO +1E807 ; [.4074.0020.0002] # MENDE KIKAKUI SYLLABLE M179 KUA +1E808 ; [.4075.0020.0002] # MENDE KIKAKUI SYLLABLE M004 WI +1E809 ; [.4076.0020.0002] # MENDE KIKAKUI SYLLABLE M005 WA +1E80A ; [.4077.0020.0002] # MENDE KIKAKUI SYLLABLE M006 WU +1E80B ; [.4078.0020.0002] # MENDE KIKAKUI SYLLABLE M126 WEE +1E80C ; [.4079.0020.0002] # MENDE KIKAKUI SYLLABLE M118 WE +1E80D ; [.407A.0020.0002] # MENDE KIKAKUI SYLLABLE M114 WOO +1E80E ; [.407B.0020.0002] # MENDE KIKAKUI SYLLABLE M045 WO +1E80F ; [.407C.0020.0002] # MENDE KIKAKUI SYLLABLE M194 WUI +1E810 ; [.407D.0020.0002] # MENDE KIKAKUI SYLLABLE M143 WEI +1E811 ; [.407E.0020.0002] # MENDE KIKAKUI SYLLABLE M061 WVI +1E812 ; [.407F.0020.0002] # MENDE KIKAKUI SYLLABLE M049 WVA +1E813 ; [.4080.0020.0002] # MENDE KIKAKUI SYLLABLE M139 WVE +1E814 ; [.4081.0020.0002] # MENDE KIKAKUI SYLLABLE M007 MIN +1E815 ; [.4082.0020.0002] # MENDE KIKAKUI SYLLABLE M008 MAN +1E816 ; [.4083.0020.0002] # MENDE KIKAKUI SYLLABLE M009 MUN +1E817 ; [.4084.0020.0002] # MENDE KIKAKUI SYLLABLE M059 MEN +1E818 ; [.4085.0020.0002] # MENDE KIKAKUI SYLLABLE M094 MON +1E819 ; [.4086.0020.0002] # MENDE KIKAKUI SYLLABLE M154 MUAN +1E81A ; [.4087.0020.0002] # MENDE KIKAKUI SYLLABLE M189 MUEN +1E81B ; [.4088.0020.0002] # MENDE KIKAKUI SYLLABLE M010 BI +1E81C ; [.4089.0020.0002] # MENDE KIKAKUI SYLLABLE M011 BA +1E81D ; [.408A.0020.0002] # MENDE KIKAKUI SYLLABLE M012 BU +1E81E ; [.408B.0020.0002] # MENDE KIKAKUI SYLLABLE M150 BEE +1E81F ; [.408C.0020.0002] # MENDE KIKAKUI SYLLABLE M097 BE +1E820 ; [.408D.0020.0002] # MENDE KIKAKUI SYLLABLE M103 BOO +1E821 ; [.408E.0020.0002] # MENDE KIKAKUI SYLLABLE M138 BO +1E822 ; [.408F.0020.0002] # MENDE KIKAKUI SYLLABLE M013 I +1E823 ; [.4090.0020.0002] # MENDE KIKAKUI SYLLABLE M014 A +1E824 ; [.4091.0020.0002] # MENDE KIKAKUI SYLLABLE M015 U +1E825 ; [.4092.0020.0002] # MENDE KIKAKUI SYLLABLE M163 EE +1E826 ; [.4093.0020.0002] # MENDE KIKAKUI SYLLABLE M100 E +1E827 ; [.4094.0020.0002] # MENDE KIKAKUI SYLLABLE M165 OO +1E828 ; [.4095.0020.0002] # MENDE KIKAKUI SYLLABLE M147 O +1E829 ; [.4096.0020.0002] # MENDE KIKAKUI SYLLABLE M137 EI +1E82A ; [.4097.0020.0002] # MENDE KIKAKUI SYLLABLE M131 IN +1E82B ; [.4098.0020.0002] # MENDE KIKAKUI SYLLABLE M135 IN +1E82C ; [.4099.0020.0002] # MENDE KIKAKUI SYLLABLE M195 AN +1E82D ; [.409A.0020.0002] # MENDE KIKAKUI SYLLABLE M178 EN +1E82E ; [.409B.0020.0002] # MENDE KIKAKUI SYLLABLE M019 SI +1E82F ; [.409C.0020.0002] # MENDE KIKAKUI SYLLABLE M020 SA +1E830 ; [.409D.0020.0002] # MENDE KIKAKUI SYLLABLE M021 SU +1E831 ; [.409E.0020.0002] # MENDE KIKAKUI SYLLABLE M162 SEE +1E832 ; [.409F.0020.0002] # MENDE KIKAKUI SYLLABLE M116 SE +1E833 ; [.40A0.0020.0002] # MENDE KIKAKUI SYLLABLE M136 SOO +1E834 ; [.40A1.0020.0002] # MENDE KIKAKUI SYLLABLE M079 SO +1E835 ; [.40A2.0020.0002] # MENDE KIKAKUI SYLLABLE M196 SIA +1E836 ; [.40A3.0020.0002] # MENDE KIKAKUI SYLLABLE M025 LI +1E837 ; [.40A4.0020.0002] # MENDE KIKAKUI SYLLABLE M026 LA +1E838 ; [.40A5.0020.0002] # MENDE KIKAKUI SYLLABLE M027 LU +1E839 ; [.40A6.0020.0002] # MENDE KIKAKUI SYLLABLE M084 LEE +1E83A ; [.40A7.0020.0002] # MENDE KIKAKUI SYLLABLE M073 LE +1E83B ; [.40A8.0020.0002] # MENDE KIKAKUI SYLLABLE M054 LOO +1E83C ; [.40A9.0020.0002] # MENDE KIKAKUI SYLLABLE M153 LO +1E83D ; [.40AA.0020.0002] # MENDE KIKAKUI SYLLABLE M110 LONG LE +1E83E ; [.40AB.0020.0002] # MENDE KIKAKUI SYLLABLE M016 DI +1E83F ; [.40AC.0020.0002] # MENDE KIKAKUI SYLLABLE M017 DA +1E840 ; [.40AD.0020.0002] # MENDE KIKAKUI SYLLABLE M018 DU +1E841 ; [.40AE.0020.0002] # MENDE KIKAKUI SYLLABLE M089 DEE +1E842 ; [.40AF.0020.0002] # MENDE KIKAKUI SYLLABLE M180 DOO +1E843 ; [.40B0.0020.0002] # MENDE KIKAKUI SYLLABLE M181 DO +1E844 ; [.40B1.0020.0002] # MENDE KIKAKUI SYLLABLE M022 TI +1E845 ; [.40B2.0020.0002] # MENDE KIKAKUI SYLLABLE M023 TA +1E846 ; [.40B3.0020.0002] # MENDE KIKAKUI SYLLABLE M024 TU +1E847 ; [.40B4.0020.0002] # MENDE KIKAKUI SYLLABLE M091 TEE +1E848 ; [.40B5.0020.0002] # MENDE KIKAKUI SYLLABLE M055 TE +1E849 ; [.40B6.0020.0002] # MENDE KIKAKUI SYLLABLE M104 TOO +1E84A ; [.40B7.0020.0002] # MENDE KIKAKUI SYLLABLE M069 TO +1E84B ; [.40B8.0020.0002] # MENDE KIKAKUI SYLLABLE M028 JI +1E84C ; [.40B9.0020.0002] # MENDE KIKAKUI SYLLABLE M029 JA +1E84D ; [.40BA.0020.0002] # MENDE KIKAKUI SYLLABLE M030 JU +1E84E ; [.40BB.0020.0002] # MENDE KIKAKUI SYLLABLE M157 JEE +1E84F ; [.40BC.0020.0002] # MENDE KIKAKUI SYLLABLE M113 JE +1E850 ; [.40BD.0020.0002] # MENDE KIKAKUI SYLLABLE M160 JOO +1E851 ; [.40BE.0020.0002] # MENDE KIKAKUI SYLLABLE M063 JO +1E852 ; [.40BF.0020.0002] # MENDE KIKAKUI SYLLABLE M175 LONG JO +1E853 ; [.40C0.0020.0002] # MENDE KIKAKUI SYLLABLE M031 YI +1E854 ; [.40C1.0020.0002] # MENDE KIKAKUI SYLLABLE M032 YA +1E855 ; [.40C2.0020.0002] # MENDE KIKAKUI SYLLABLE M033 YU +1E856 ; [.40C3.0020.0002] # MENDE KIKAKUI SYLLABLE M109 YEE +1E857 ; [.40C4.0020.0002] # MENDE KIKAKUI SYLLABLE M080 YE +1E858 ; [.40C5.0020.0002] # MENDE KIKAKUI SYLLABLE M141 YOO +1E859 ; [.40C6.0020.0002] # MENDE KIKAKUI SYLLABLE M121 YO +1E85A ; [.40C7.0020.0002] # MENDE KIKAKUI SYLLABLE M034 FI +1E85B ; [.40C8.0020.0002] # MENDE KIKAKUI SYLLABLE M035 FA +1E85C ; [.40C9.0020.0002] # MENDE KIKAKUI SYLLABLE M036 FU +1E85D ; [.40CA.0020.0002] # MENDE KIKAKUI SYLLABLE M078 FEE +1E85E ; [.40CB.0020.0002] # MENDE KIKAKUI SYLLABLE M075 FE +1E85F ; [.40CC.0020.0002] # MENDE KIKAKUI SYLLABLE M133 FOO +1E860 ; [.40CD.0020.0002] # MENDE KIKAKUI SYLLABLE M088 FO +1E861 ; [.40CE.0020.0002] # MENDE KIKAKUI SYLLABLE M197 FUA +1E862 ; [.40CF.0020.0002] # MENDE KIKAKUI SYLLABLE M101 FAN +1E863 ; [.40D0.0020.0002] # MENDE KIKAKUI SYLLABLE M037 NIN +1E864 ; [.40D1.0020.0002] # MENDE KIKAKUI SYLLABLE M038 NAN +1E865 ; [.40D2.0020.0002] # MENDE KIKAKUI SYLLABLE M039 NUN +1E866 ; [.40D3.0020.0002] # MENDE KIKAKUI SYLLABLE M117 NEN +1E867 ; [.40D4.0020.0002] # MENDE KIKAKUI SYLLABLE M169 NON +1E868 ; [.40D5.0020.0002] # MENDE KIKAKUI SYLLABLE M176 HI +1E869 ; [.40D6.0020.0002] # MENDE KIKAKUI SYLLABLE M041 HA +1E86A ; [.40D7.0020.0002] # MENDE KIKAKUI SYLLABLE M186 HU +1E86B ; [.40D8.0020.0002] # MENDE KIKAKUI SYLLABLE M040 HEE +1E86C ; [.40D9.0020.0002] # MENDE KIKAKUI SYLLABLE M096 HE +1E86D ; [.40DA.0020.0002] # MENDE KIKAKUI SYLLABLE M042 HOO +1E86E ; [.40DB.0020.0002] # MENDE KIKAKUI SYLLABLE M140 HO +1E86F ; [.40DC.0020.0002] # MENDE KIKAKUI SYLLABLE M083 HEEI +1E870 ; [.40DD.0020.0002] # MENDE KIKAKUI SYLLABLE M128 HOOU +1E871 ; [.40DE.0020.0002] # MENDE KIKAKUI SYLLABLE M053 HIN +1E872 ; [.40DF.0020.0002] # MENDE KIKAKUI SYLLABLE M130 HAN +1E873 ; [.40E0.0020.0002] # MENDE KIKAKUI SYLLABLE M087 HUN +1E874 ; [.40E1.0020.0002] # MENDE KIKAKUI SYLLABLE M052 HEN +1E875 ; [.40E2.0020.0002] # MENDE KIKAKUI SYLLABLE M193 HON +1E876 ; [.40E3.0020.0002] # MENDE KIKAKUI SYLLABLE M046 HUAN +1E877 ; [.40E4.0020.0002] # MENDE KIKAKUI SYLLABLE M090 NGGI +1E878 ; [.40E5.0020.0002] # MENDE KIKAKUI SYLLABLE M043 NGGA +1E879 ; [.40E6.0020.0002] # MENDE KIKAKUI SYLLABLE M082 NGGU +1E87A ; [.40E7.0020.0002] # MENDE KIKAKUI SYLLABLE M115 NGGEE +1E87B ; [.40E8.0020.0002] # MENDE KIKAKUI SYLLABLE M146 NGGE +1E87C ; [.40E9.0020.0002] # MENDE KIKAKUI SYLLABLE M156 NGGOO +1E87D ; [.40EA.0020.0002] # MENDE KIKAKUI SYLLABLE M120 NGGO +1E87E ; [.40EB.0020.0002] # MENDE KIKAKUI SYLLABLE M159 NGGAA +1E87F ; [.40EC.0020.0002] # MENDE KIKAKUI SYLLABLE M127 NGGUA +1E880 ; [.40ED.0020.0002] # MENDE KIKAKUI SYLLABLE M086 LONG NGGE +1E881 ; [.40EE.0020.0002] # MENDE KIKAKUI SYLLABLE M106 LONG NGGOO +1E882 ; [.40EF.0020.0002] # MENDE KIKAKUI SYLLABLE M183 LONG NGGO +1E883 ; [.40F0.0020.0002] # MENDE KIKAKUI SYLLABLE M155 GI +1E884 ; [.40F1.0020.0002] # MENDE KIKAKUI SYLLABLE M111 GA +1E885 ; [.40F2.0020.0002] # MENDE KIKAKUI SYLLABLE M168 GU +1E886 ; [.40F3.0020.0002] # MENDE KIKAKUI SYLLABLE M190 GEE +1E887 ; [.40F4.0020.0002] # MENDE KIKAKUI SYLLABLE M166 GUEI +1E888 ; [.40F5.0020.0002] # MENDE KIKAKUI SYLLABLE M167 GUAN +1E889 ; [.40F6.0020.0002] # MENDE KIKAKUI SYLLABLE M184 NGEN +1E88A ; [.40F7.0020.0002] # MENDE KIKAKUI SYLLABLE M057 NGON +1E88B ; [.40F8.0020.0002] # MENDE KIKAKUI SYLLABLE M177 NGUAN +1E88C ; [.40F9.0020.0002] # MENDE KIKAKUI SYLLABLE M068 PI +1E88D ; [.40FA.0020.0002] # MENDE KIKAKUI SYLLABLE M099 PA +1E88E ; [.40FB.0020.0002] # MENDE KIKAKUI SYLLABLE M050 PU +1E88F ; [.40FC.0020.0002] # MENDE KIKAKUI SYLLABLE M081 PEE +1E890 ; [.40FD.0020.0002] # MENDE KIKAKUI SYLLABLE M051 PE +1E891 ; [.40FE.0020.0002] # MENDE KIKAKUI SYLLABLE M102 POO +1E892 ; [.40FF.0020.0002] # MENDE KIKAKUI SYLLABLE M066 PO +1E893 ; [.4100.0020.0002] # MENDE KIKAKUI SYLLABLE M145 MBI +1E894 ; [.4101.0020.0002] # MENDE KIKAKUI SYLLABLE M062 MBA +1E895 ; [.4102.0020.0002] # MENDE KIKAKUI SYLLABLE M122 MBU +1E896 ; [.4103.0020.0002] # MENDE KIKAKUI SYLLABLE M047 MBEE +1E897 ; [.4104.0020.0002] # MENDE KIKAKUI SYLLABLE M188 MBEE +1E898 ; [.4105.0020.0002] # MENDE KIKAKUI SYLLABLE M072 MBE +1E899 ; [.4106.0020.0002] # MENDE KIKAKUI SYLLABLE M172 MBOO +1E89A ; [.4107.0020.0002] # MENDE KIKAKUI SYLLABLE M174 MBO +1E89B ; [.4108.0020.0002] # MENDE KIKAKUI SYLLABLE M187 MBUU +1E89C ; [.4109.0020.0002] # MENDE KIKAKUI SYLLABLE M161 LONG MBE +1E89D ; [.410A.0020.0002] # MENDE KIKAKUI SYLLABLE M105 LONG MBOO +1E89E ; [.410B.0020.0002] # MENDE KIKAKUI SYLLABLE M142 LONG MBO +1E89F ; [.410C.0020.0002] # MENDE KIKAKUI SYLLABLE M132 KPI +1E8A0 ; [.410D.0020.0002] # MENDE KIKAKUI SYLLABLE M092 KPA +1E8A1 ; [.410E.0020.0002] # MENDE KIKAKUI SYLLABLE M074 KPU +1E8A2 ; [.410F.0020.0002] # MENDE KIKAKUI SYLLABLE M044 KPEE +1E8A3 ; [.4110.0020.0002] # MENDE KIKAKUI SYLLABLE M108 KPE +1E8A4 ; [.4111.0020.0002] # MENDE KIKAKUI SYLLABLE M112 KPOO +1E8A5 ; [.4112.0020.0002] # MENDE KIKAKUI SYLLABLE M158 KPO +1E8A6 ; [.4113.0020.0002] # MENDE KIKAKUI SYLLABLE M124 GBI +1E8A7 ; [.4114.0020.0002] # MENDE KIKAKUI SYLLABLE M056 GBA +1E8A8 ; [.4115.0020.0002] # MENDE KIKAKUI SYLLABLE M148 GBU +1E8A9 ; [.4116.0020.0002] # MENDE KIKAKUI SYLLABLE M093 GBEE +1E8AA ; [.4117.0020.0002] # MENDE KIKAKUI SYLLABLE M107 GBE +1E8AB ; [.4118.0020.0002] # MENDE KIKAKUI SYLLABLE M071 GBOO +1E8AC ; [.4119.0020.0002] # MENDE KIKAKUI SYLLABLE M070 GBO +1E8AD ; [.411A.0020.0002] # MENDE KIKAKUI SYLLABLE M171 RA +1E8AE ; [.411B.0020.0002] # MENDE KIKAKUI SYLLABLE M123 NDI +1E8AF ; [.411C.0020.0002] # MENDE KIKAKUI SYLLABLE M129 NDA +1E8B0 ; [.411D.0020.0002] # MENDE KIKAKUI SYLLABLE M125 NDU +1E8B1 ; [.411E.0020.0002] # MENDE KIKAKUI SYLLABLE M191 NDEE +1E8B2 ; [.411F.0020.0002] # MENDE KIKAKUI SYLLABLE M119 NDE +1E8B3 ; [.4120.0020.0002] # MENDE KIKAKUI SYLLABLE M067 NDOO +1E8B4 ; [.4121.0020.0002] # MENDE KIKAKUI SYLLABLE M064 NDO +1E8B5 ; [.4122.0020.0002] # MENDE KIKAKUI SYLLABLE M152 NJA +1E8B6 ; [.4123.0020.0002] # MENDE KIKAKUI SYLLABLE M192 NJU +1E8B7 ; [.4124.0020.0002] # MENDE KIKAKUI SYLLABLE M149 NJEE +1E8B8 ; [.4125.0020.0002] # MENDE KIKAKUI SYLLABLE M134 NJOO +1E8B9 ; [.4126.0020.0002] # MENDE KIKAKUI SYLLABLE M182 VI +1E8BA ; [.4127.0020.0002] # MENDE KIKAKUI SYLLABLE M185 VA +1E8BB ; [.4128.0020.0002] # MENDE KIKAKUI SYLLABLE M151 VU +1E8BC ; [.4129.0020.0002] # MENDE KIKAKUI SYLLABLE M173 VEE +1E8BD ; [.412A.0020.0002] # MENDE KIKAKUI SYLLABLE M085 VE +1E8BE ; [.412B.0020.0002] # MENDE KIKAKUI SYLLABLE M144 VOO +1E8BF ; [.412C.0020.0002] # MENDE KIKAKUI SYLLABLE M077 VO +1E8C0 ; [.412D.0020.0002] # MENDE KIKAKUI SYLLABLE M164 NYIN +1E8C1 ; [.412E.0020.0002] # MENDE KIKAKUI SYLLABLE M058 NYAN +1E8C2 ; [.412F.0020.0002] # MENDE KIKAKUI SYLLABLE M170 NYUN +1E8C3 ; [.4130.0020.0002] # MENDE KIKAKUI SYLLABLE M098 NYEN +1E8C4 ; [.4131.0020.0002] # MENDE KIKAKUI SYLLABLE M060 NYON +16E60 ; [.4132.0020.0002] # MEDEFAIDRIN SMALL LETTER M +16E40 ; [.4132.0020.0008] # MEDEFAIDRIN CAPITAL LETTER M +16E61 ; [.4133.0020.0002] # MEDEFAIDRIN SMALL LETTER S +16E41 ; [.4133.0020.0008] # MEDEFAIDRIN CAPITAL LETTER S +16E62 ; [.4134.0020.0002] # MEDEFAIDRIN SMALL LETTER V +16E42 ; [.4134.0020.0008] # MEDEFAIDRIN CAPITAL LETTER V +16E63 ; [.4135.0020.0002] # MEDEFAIDRIN SMALL LETTER W +16E43 ; [.4135.0020.0008] # MEDEFAIDRIN CAPITAL LETTER W +16E64 ; [.4136.0020.0002] # MEDEFAIDRIN SMALL LETTER ATIU +16E44 ; [.4136.0020.0008] # MEDEFAIDRIN CAPITAL LETTER ATIU +16E65 ; [.4137.0020.0002] # MEDEFAIDRIN SMALL LETTER Z +16E45 ; [.4137.0020.0008] # MEDEFAIDRIN CAPITAL LETTER Z +16E66 ; [.4138.0020.0002] # MEDEFAIDRIN SMALL LETTER KP +16E46 ; [.4138.0020.0008] # MEDEFAIDRIN CAPITAL LETTER KP +16E67 ; [.4139.0020.0002] # MEDEFAIDRIN SMALL LETTER P +16E47 ; [.4139.0020.0008] # MEDEFAIDRIN CAPITAL LETTER P +16E68 ; [.413A.0020.0002] # MEDEFAIDRIN SMALL LETTER T +16E48 ; [.413A.0020.0008] # MEDEFAIDRIN CAPITAL LETTER T +16E69 ; [.413B.0020.0002] # MEDEFAIDRIN SMALL LETTER G +16E49 ; [.413B.0020.0008] # MEDEFAIDRIN CAPITAL LETTER G +16E6A ; [.413C.0020.0002] # MEDEFAIDRIN SMALL LETTER F +16E4A ; [.413C.0020.0008] # MEDEFAIDRIN CAPITAL LETTER F +16E6B ; [.413D.0020.0002] # MEDEFAIDRIN SMALL LETTER I +16E4B ; [.413D.0020.0008] # MEDEFAIDRIN CAPITAL LETTER I +16E6C ; [.413E.0020.0002] # MEDEFAIDRIN SMALL LETTER K +16E4C ; [.413E.0020.0008] # MEDEFAIDRIN CAPITAL LETTER K +16E6D ; [.413F.0020.0002] # MEDEFAIDRIN SMALL LETTER A +16E4D ; [.413F.0020.0008] # MEDEFAIDRIN CAPITAL LETTER A +16E6E ; [.4140.0020.0002] # MEDEFAIDRIN SMALL LETTER J +16E4E ; [.4140.0020.0008] # MEDEFAIDRIN CAPITAL LETTER J +16E6F ; [.4141.0020.0002] # MEDEFAIDRIN SMALL LETTER E +16E4F ; [.4141.0020.0008] # MEDEFAIDRIN CAPITAL LETTER E +16E70 ; [.4142.0020.0002] # MEDEFAIDRIN SMALL LETTER B +16E50 ; [.4142.0020.0008] # MEDEFAIDRIN CAPITAL LETTER B +16E71 ; [.4143.0020.0002] # MEDEFAIDRIN SMALL LETTER C +16E51 ; [.4143.0020.0008] # MEDEFAIDRIN CAPITAL LETTER C +16E72 ; [.4144.0020.0002] # MEDEFAIDRIN SMALL LETTER U +16E52 ; [.4144.0020.0008] # MEDEFAIDRIN CAPITAL LETTER U +16E73 ; [.4145.0020.0002] # MEDEFAIDRIN SMALL LETTER YU +16E53 ; [.4145.0020.0008] # MEDEFAIDRIN CAPITAL LETTER YU +16E74 ; [.4146.0020.0002] # MEDEFAIDRIN SMALL LETTER L +16E54 ; [.4146.0020.0008] # MEDEFAIDRIN CAPITAL LETTER L +16E75 ; [.4147.0020.0002] # MEDEFAIDRIN SMALL LETTER Q +16E55 ; [.4147.0020.0008] # MEDEFAIDRIN CAPITAL LETTER Q +16E76 ; [.4148.0020.0002] # MEDEFAIDRIN SMALL LETTER HP +16E56 ; [.4148.0020.0008] # MEDEFAIDRIN CAPITAL LETTER HP +16E77 ; [.4149.0020.0002] # MEDEFAIDRIN SMALL LETTER NY +16E57 ; [.4149.0020.0008] # MEDEFAIDRIN CAPITAL LETTER NY +16E78 ; [.414A.0020.0002] # MEDEFAIDRIN SMALL LETTER X +16E58 ; [.414A.0020.0008] # MEDEFAIDRIN CAPITAL LETTER X +16E79 ; [.414B.0020.0002] # MEDEFAIDRIN SMALL LETTER D +16E59 ; [.414B.0020.0008] # MEDEFAIDRIN CAPITAL LETTER D +16E7A ; [.414C.0020.0002] # MEDEFAIDRIN SMALL LETTER OE +16E5A ; [.414C.0020.0008] # MEDEFAIDRIN CAPITAL LETTER OE +16E7B ; [.414D.0020.0002] # MEDEFAIDRIN SMALL LETTER N +16E5B ; [.414D.0020.0008] # MEDEFAIDRIN CAPITAL LETTER N +16E7C ; [.414E.0020.0002] # MEDEFAIDRIN SMALL LETTER R +16E5C ; [.414E.0020.0008] # MEDEFAIDRIN CAPITAL LETTER R +16E7D ; [.414F.0020.0002] # MEDEFAIDRIN SMALL LETTER O +16E5D ; [.414F.0020.0008] # MEDEFAIDRIN CAPITAL LETTER O +16E7E ; [.4150.0020.0002] # MEDEFAIDRIN SMALL LETTER AI +16E5E ; [.4150.0020.0008] # MEDEFAIDRIN CAPITAL LETTER AI +16E7F ; [.4151.0020.0002] # MEDEFAIDRIN SMALL LETTER Y +16E5F ; [.4151.0020.0008] # MEDEFAIDRIN CAPITAL LETTER Y +1E922 ; [.4152.0020.0002] # ADLAM SMALL LETTER ALIF +1E900 ; [.4152.0020.0008] # ADLAM CAPITAL LETTER ALIF +1E923 ; [.4153.0020.0002] # ADLAM SMALL LETTER DAALI +1E901 ; [.4153.0020.0008] # ADLAM CAPITAL LETTER DAALI +1E924 ; [.4154.0020.0002] # ADLAM SMALL LETTER LAAM +1E902 ; [.4154.0020.0008] # ADLAM CAPITAL LETTER LAAM +1E925 ; [.4155.0020.0002] # ADLAM SMALL LETTER MIIM +1E903 ; [.4155.0020.0008] # ADLAM CAPITAL LETTER MIIM +1E926 ; [.4156.0020.0002] # ADLAM SMALL LETTER BA +1E904 ; [.4156.0020.0008] # ADLAM CAPITAL LETTER BA +1E927 ; [.4157.0020.0002] # ADLAM SMALL LETTER SINNYIIYHE +1E905 ; [.4157.0020.0008] # ADLAM CAPITAL LETTER SINNYIIYHE +1E928 ; [.4158.0020.0002] # ADLAM SMALL LETTER PE +1E906 ; [.4158.0020.0008] # ADLAM CAPITAL LETTER PE +1E929 ; [.4159.0020.0002] # ADLAM SMALL LETTER BHE +1E907 ; [.4159.0020.0008] # ADLAM CAPITAL LETTER BHE +1E92A ; [.415A.0020.0002] # ADLAM SMALL LETTER RA +1E908 ; [.415A.0020.0008] # ADLAM CAPITAL LETTER RA +1E92B ; [.415B.0020.0002] # ADLAM SMALL LETTER E +1E909 ; [.415B.0020.0008] # ADLAM CAPITAL LETTER E +1E92C ; [.415C.0020.0002] # ADLAM SMALL LETTER FA +1E90A ; [.415C.0020.0008] # ADLAM CAPITAL LETTER FA +1E92D ; [.415D.0020.0002] # ADLAM SMALL LETTER I +1E90B ; [.415D.0020.0008] # ADLAM CAPITAL LETTER I +1E92E ; [.415E.0020.0002] # ADLAM SMALL LETTER O +1E90C ; [.415E.0020.0008] # ADLAM CAPITAL LETTER O +1E92F ; [.415F.0020.0002] # ADLAM SMALL LETTER DHA +1E90D ; [.415F.0020.0008] # ADLAM CAPITAL LETTER DHA +1E930 ; [.4160.0020.0002] # ADLAM SMALL LETTER YHE +1E90E ; [.4160.0020.0008] # ADLAM CAPITAL LETTER YHE +1E931 ; [.4161.0020.0002] # ADLAM SMALL LETTER WAW +1E90F ; [.4161.0020.0008] # ADLAM CAPITAL LETTER WAW +1E932 ; [.4162.0020.0002] # ADLAM SMALL LETTER NUN +1E910 ; [.4162.0020.0008] # ADLAM CAPITAL LETTER NUN +1E933 ; [.4163.0020.0002] # ADLAM SMALL LETTER KAF +1E911 ; [.4163.0020.0008] # ADLAM CAPITAL LETTER KAF +1E934 ; [.4164.0020.0002] # ADLAM SMALL LETTER YA +1E912 ; [.4164.0020.0008] # ADLAM CAPITAL LETTER YA +1E935 ; [.4165.0020.0002] # ADLAM SMALL LETTER U +1E913 ; [.4165.0020.0008] # ADLAM CAPITAL LETTER U +1E936 ; [.4166.0020.0002] # ADLAM SMALL LETTER JIIM +1E914 ; [.4166.0020.0008] # ADLAM CAPITAL LETTER JIIM +1E937 ; [.4167.0020.0002] # ADLAM SMALL LETTER CHI +1E915 ; [.4167.0020.0008] # ADLAM CAPITAL LETTER CHI +1E938 ; [.4168.0020.0002] # ADLAM SMALL LETTER HA +1E916 ; [.4168.0020.0008] # ADLAM CAPITAL LETTER HA +1E939 ; [.4169.0020.0002] # ADLAM SMALL LETTER QAAF +1E917 ; [.4169.0020.0008] # ADLAM CAPITAL LETTER QAAF +1E93A ; [.416A.0020.0002] # ADLAM SMALL LETTER GA +1E918 ; [.416A.0020.0008] # ADLAM CAPITAL LETTER GA +1E93B ; [.416B.0020.0002] # ADLAM SMALL LETTER NYA +1E919 ; [.416B.0020.0008] # ADLAM CAPITAL LETTER NYA +1E93C ; [.416C.0020.0002] # ADLAM SMALL LETTER TU +1E91A ; [.416C.0020.0008] # ADLAM CAPITAL LETTER TU +1E93D ; [.416D.0020.0002] # ADLAM SMALL LETTER NHA +1E91B ; [.416D.0020.0008] # ADLAM CAPITAL LETTER NHA +1E93E ; [.416E.0020.0002] # ADLAM SMALL LETTER VA +1E91C ; [.416E.0020.0008] # ADLAM CAPITAL LETTER VA +1E93F ; [.416F.0020.0002] # ADLAM SMALL LETTER KHA +1E91D ; [.416F.0020.0008] # ADLAM CAPITAL LETTER KHA +1E940 ; [.4170.0020.0002] # ADLAM SMALL LETTER GBE +1E91E ; [.4170.0020.0008] # ADLAM CAPITAL LETTER GBE +1E941 ; [.4171.0020.0002] # ADLAM SMALL LETTER ZAL +1E91F ; [.4171.0020.0008] # ADLAM CAPITAL LETTER ZAL +1E942 ; [.4172.0020.0002] # ADLAM SMALL LETTER KPO +1E920 ; [.4172.0020.0008] # ADLAM CAPITAL LETTER KPO +1E943 ; [.4173.0020.0002] # ADLAM SMALL LETTER SHA +1E921 ; [.4173.0020.0008] # ADLAM CAPITAL LETTER SHA +1E94B ; [.4174.0020.0002] # ADLAM NASALIZATION MARK +1100 ; [.4175.0020.0002] # HANGUL CHOSEONG KIYEOK +3131 ; [.4175.0020.0004] # HANGUL LETTER KIYEOK +3200 ; [*0328.0020.0004][.4175.0020.0004][*0329.0020.0004] # PARENTHESIZED HANGUL KIYEOK +3260 ; [.4175.0020.0006] # CIRCLED HANGUL KIYEOK +FFA1 ; [.4175.0020.0012] # HALFWIDTH HANGUL LETTER KIYEOK +320E ; [*0328.0020.0004][.4175.0020.0004][.41F3.0020.0004][*0329.0020.0004] # PARENTHESIZED HANGUL KIYEOK A +326E ; [.4175.0020.0006][.41F3.0020.0006] # CIRCLED HANGUL KIYEOK A +1101 ; [.4176.0020.0002] # HANGUL CHOSEONG SSANGKIYEOK +3132 ; [.4176.0020.0004] # HANGUL LETTER SSANGKIYEOK +FFA2 ; [.4176.0020.0012] # HALFWIDTH HANGUL LETTER SSANGKIYEOK +1102 ; [.4177.0020.0002] # HANGUL CHOSEONG NIEUN +3134 ; [.4177.0020.0004] # HANGUL LETTER NIEUN +3201 ; [*0328.0020.0004][.4177.0020.0004][*0329.0020.0004] # PARENTHESIZED HANGUL NIEUN +3261 ; [.4177.0020.0006] # CIRCLED HANGUL NIEUN +FFA4 ; [.4177.0020.0012] # HALFWIDTH HANGUL LETTER NIEUN +320F ; [*0328.0020.0004][.4177.0020.0004][.41F3.0020.0004][*0329.0020.0004] # PARENTHESIZED HANGUL NIEUN A +326F ; [.4177.0020.0006][.41F3.0020.0006] # CIRCLED HANGUL NIEUN A +1103 ; [.4178.0020.0002] # HANGUL CHOSEONG TIKEUT +3137 ; [.4178.0020.0004] # HANGUL LETTER TIKEUT +3202 ; [*0328.0020.0004][.4178.0020.0004][*0329.0020.0004] # PARENTHESIZED HANGUL TIKEUT +3262 ; [.4178.0020.0006] # CIRCLED HANGUL TIKEUT +FFA7 ; [.4178.0020.0012] # HALFWIDTH HANGUL LETTER TIKEUT +3210 ; [*0328.0020.0004][.4178.0020.0004][.41F3.0020.0004][*0329.0020.0004] # PARENTHESIZED HANGUL TIKEUT A +3270 ; [.4178.0020.0006][.41F3.0020.0006] # CIRCLED HANGUL TIKEUT A +1104 ; [.4179.0020.0002] # HANGUL CHOSEONG SSANGTIKEUT +3138 ; [.4179.0020.0004] # HANGUL LETTER SSANGTIKEUT +FFA8 ; [.4179.0020.0012] # HALFWIDTH HANGUL LETTER SSANGTIKEUT +1105 ; [.417A.0020.0002] # HANGUL CHOSEONG RIEUL +3139 ; [.417A.0020.0004] # HANGUL LETTER RIEUL +3203 ; [*0328.0020.0004][.417A.0020.0004][*0329.0020.0004] # PARENTHESIZED HANGUL RIEUL +3263 ; [.417A.0020.0006] # CIRCLED HANGUL RIEUL +FFA9 ; [.417A.0020.0012] # HALFWIDTH HANGUL LETTER RIEUL +3211 ; [*0328.0020.0004][.417A.0020.0004][.41F3.0020.0004][*0329.0020.0004] # PARENTHESIZED HANGUL RIEUL A +3271 ; [.417A.0020.0006][.41F3.0020.0006] # CIRCLED HANGUL RIEUL A +1106 ; [.417B.0020.0002] # HANGUL CHOSEONG MIEUM +3141 ; [.417B.0020.0004] # HANGUL LETTER MIEUM +3204 ; [*0328.0020.0004][.417B.0020.0004][*0329.0020.0004] # PARENTHESIZED HANGUL MIEUM +3264 ; [.417B.0020.0006] # CIRCLED HANGUL MIEUM +FFB1 ; [.417B.0020.0012] # HALFWIDTH HANGUL LETTER MIEUM +3212 ; [*0328.0020.0004][.417B.0020.0004][.41F3.0020.0004][*0329.0020.0004] # PARENTHESIZED HANGUL MIEUM A +3272 ; [.417B.0020.0006][.41F3.0020.0006] # CIRCLED HANGUL MIEUM A +1107 ; [.417C.0020.0002] # HANGUL CHOSEONG PIEUP +3142 ; [.417C.0020.0004] # HANGUL LETTER PIEUP +3205 ; [*0328.0020.0004][.417C.0020.0004][*0329.0020.0004] # PARENTHESIZED HANGUL PIEUP +3265 ; [.417C.0020.0006] # CIRCLED HANGUL PIEUP +FFB2 ; [.417C.0020.0012] # HALFWIDTH HANGUL LETTER PIEUP +3213 ; [*0328.0020.0004][.417C.0020.0004][.41F3.0020.0004][*0329.0020.0004] # PARENTHESIZED HANGUL PIEUP A +3273 ; [.417C.0020.0006][.41F3.0020.0006] # CIRCLED HANGUL PIEUP A +1108 ; [.417D.0020.0002] # HANGUL CHOSEONG SSANGPIEUP +3143 ; [.417D.0020.0004] # HANGUL LETTER SSANGPIEUP +FFB3 ; [.417D.0020.0012] # HALFWIDTH HANGUL LETTER SSANGPIEUP +1109 ; [.417E.0020.0002] # HANGUL CHOSEONG SIOS +3145 ; [.417E.0020.0004] # HANGUL LETTER SIOS +3206 ; [*0328.0020.0004][.417E.0020.0004][*0329.0020.0004] # PARENTHESIZED HANGUL SIOS +3266 ; [.417E.0020.0006] # CIRCLED HANGUL SIOS +FFB5 ; [.417E.0020.0012] # HALFWIDTH HANGUL LETTER SIOS +3214 ; [*0328.0020.0004][.417E.0020.0004][.41F3.0020.0004][*0329.0020.0004] # PARENTHESIZED HANGUL SIOS A +3274 ; [.417E.0020.0006][.41F3.0020.0006] # CIRCLED HANGUL SIOS A +110A ; [.417F.0020.0002] # HANGUL CHOSEONG SSANGSIOS +3146 ; [.417F.0020.0004] # HANGUL LETTER SSANGSIOS +FFB6 ; [.417F.0020.0012] # HALFWIDTH HANGUL LETTER SSANGSIOS +110B ; [.4180.0020.0002] # HANGUL CHOSEONG IEUNG +3147 ; [.4180.0020.0004] # HANGUL LETTER IEUNG +3207 ; [*0328.0020.0004][.4180.0020.0004][*0329.0020.0004] # PARENTHESIZED HANGUL IEUNG +3267 ; [.4180.0020.0006] # CIRCLED HANGUL IEUNG +FFB7 ; [.4180.0020.0012] # HALFWIDTH HANGUL LETTER IEUNG +3215 ; [*0328.0020.0004][.4180.0020.0004][.41F3.0020.0004][*0329.0020.0004] # PARENTHESIZED HANGUL IEUNG A +3275 ; [.4180.0020.0006][.41F3.0020.0006] # CIRCLED HANGUL IEUNG A +321D ; [*0328.0020.0004][.4180.0020.0004][.41FB.0020.0004][.4181.0020.0004][.41F7.0020.0004][.4254.0020.0004][*0329.0020.0004] # PARENTHESIZED KOREAN CHARACTER OJEON +321E ; [*0328.0020.0004][.4180.0020.0004][.41FB.0020.0004][.4187.0020.0004][.4200.0020.0004][*0329.0020.0004] # PARENTHESIZED KOREAN CHARACTER O HU +327E ; [.4180.0020.0006][.4200.0020.0006] # CIRCLED HANGUL IEUNG U +110C ; [.4181.0020.0002] # HANGUL CHOSEONG CIEUC +3148 ; [.4181.0020.0004] # HANGUL LETTER CIEUC +3208 ; [*0328.0020.0004][.4181.0020.0004][*0329.0020.0004] # PARENTHESIZED HANGUL CIEUC +3268 ; [.4181.0020.0006] # CIRCLED HANGUL CIEUC +FFB8 ; [.4181.0020.0012] # HALFWIDTH HANGUL LETTER CIEUC +3216 ; [*0328.0020.0004][.4181.0020.0004][.41F3.0020.0004][*0329.0020.0004] # PARENTHESIZED HANGUL CIEUC A +3276 ; [.4181.0020.0006][.41F3.0020.0006] # CIRCLED HANGUL CIEUC A +321C ; [*0328.0020.0004][.4181.0020.0004][.4200.0020.0004][*0329.0020.0004] # PARENTHESIZED HANGUL CIEUC U +327D ; [.4181.0020.0006][.4200.0020.0006][.4180.0020.0006][.4206.0020.0006] # CIRCLED KOREAN CHARACTER JUEUI +110D ; [.4182.0020.0002] # HANGUL CHOSEONG SSANGCIEUC +3149 ; [.4182.0020.0004] # HANGUL LETTER SSANGCIEUC +FFB9 ; [.4182.0020.0012] # HALFWIDTH HANGUL LETTER SSANGCIEUC +110E ; [.4183.0020.0002] # HANGUL CHOSEONG CHIEUCH +314A ; [.4183.0020.0004] # HANGUL LETTER CHIEUCH +3209 ; [*0328.0020.0004][.4183.0020.0004][*0329.0020.0004] # PARENTHESIZED HANGUL CHIEUCH +3269 ; [.4183.0020.0006] # CIRCLED HANGUL CHIEUCH +FFBA ; [.4183.0020.0012] # HALFWIDTH HANGUL LETTER CHIEUCH +3217 ; [*0328.0020.0004][.4183.0020.0004][.41F3.0020.0004][*0329.0020.0004] # PARENTHESIZED HANGUL CHIEUCH A +3277 ; [.4183.0020.0006][.41F3.0020.0006] # CIRCLED HANGUL CHIEUCH A +327C ; [.4183.0020.0006][.41F3.0020.0006][.4260.0020.0006][.4175.0020.0006][.41FB.0020.0006] # CIRCLED KOREAN CHARACTER CHAMKO +110F ; [.4184.0020.0002] # HANGUL CHOSEONG KHIEUKH +314B ; [.4184.0020.0004] # HANGUL LETTER KHIEUKH +320A ; [*0328.0020.0004][.4184.0020.0004][*0329.0020.0004] # PARENTHESIZED HANGUL KHIEUKH +326A ; [.4184.0020.0006] # CIRCLED HANGUL KHIEUKH +FFBB ; [.4184.0020.0012] # HALFWIDTH HANGUL LETTER KHIEUKH +3218 ; [*0328.0020.0004][.4184.0020.0004][.41F3.0020.0004][*0329.0020.0004] # PARENTHESIZED HANGUL KHIEUKH A +3278 ; [.4184.0020.0006][.41F3.0020.0006] # CIRCLED HANGUL KHIEUKH A +1110 ; [.4185.0020.0002] # HANGUL CHOSEONG THIEUTH +314C ; [.4185.0020.0004] # HANGUL LETTER THIEUTH +320B ; [*0328.0020.0004][.4185.0020.0004][*0329.0020.0004] # PARENTHESIZED HANGUL THIEUTH +326B ; [.4185.0020.0006] # CIRCLED HANGUL THIEUTH +FFBC ; [.4185.0020.0012] # HALFWIDTH HANGUL LETTER THIEUTH +3219 ; [*0328.0020.0004][.4185.0020.0004][.41F3.0020.0004][*0329.0020.0004] # PARENTHESIZED HANGUL THIEUTH A +3279 ; [.4185.0020.0006][.41F3.0020.0006] # CIRCLED HANGUL THIEUTH A +1111 ; [.4186.0020.0002] # HANGUL CHOSEONG PHIEUPH +314D ; [.4186.0020.0004] # HANGUL LETTER PHIEUPH +320C ; [*0328.0020.0004][.4186.0020.0004][*0329.0020.0004] # PARENTHESIZED HANGUL PHIEUPH +326C ; [.4186.0020.0006] # CIRCLED HANGUL PHIEUPH +FFBD ; [.4186.0020.0012] # HALFWIDTH HANGUL LETTER PHIEUPH +321A ; [*0328.0020.0004][.4186.0020.0004][.41F3.0020.0004][*0329.0020.0004] # PARENTHESIZED HANGUL PHIEUPH A +327A ; [.4186.0020.0006][.41F3.0020.0006] # CIRCLED HANGUL PHIEUPH A +1112 ; [.4187.0020.0002] # HANGUL CHOSEONG HIEUH +314E ; [.4187.0020.0004] # HANGUL LETTER HIEUH +320D ; [*0328.0020.0004][.4187.0020.0004][*0329.0020.0004] # PARENTHESIZED HANGUL HIEUH +326D ; [.4187.0020.0006] # CIRCLED HANGUL HIEUH +FFBE ; [.4187.0020.0012] # HALFWIDTH HANGUL LETTER HIEUH +321B ; [*0328.0020.0004][.4187.0020.0004][.41F3.0020.0004][*0329.0020.0004] # PARENTHESIZED HANGUL HIEUH A +327B ; [.4187.0020.0006][.41F3.0020.0006] # CIRCLED HANGUL HIEUH A +1113 ; [.4188.0020.0002] # HANGUL CHOSEONG NIEUN-KIYEOK +1114 ; [.4189.0020.0002] # HANGUL CHOSEONG SSANGNIEUN +3165 ; [.4189.0020.0004] # HANGUL LETTER SSANGNIEUN +1115 ; [.418A.0020.0002] # HANGUL CHOSEONG NIEUN-TIKEUT +3166 ; [.418A.0020.0004] # HANGUL LETTER NIEUN-TIKEUT +1116 ; [.418B.0020.0002] # HANGUL CHOSEONG NIEUN-PIEUP +1117 ; [.418C.0020.0002] # HANGUL CHOSEONG TIKEUT-KIYEOK +1118 ; [.418D.0020.0002] # HANGUL CHOSEONG RIEUL-NIEUN +1119 ; [.418E.0020.0002] # HANGUL CHOSEONG SSANGRIEUL +111A ; [.418F.0020.0002] # HANGUL CHOSEONG RIEUL-HIEUH +3140 ; [.418F.0020.0004] # HANGUL LETTER RIEUL-HIEUH +FFB0 ; [.418F.0020.0012] # HALFWIDTH HANGUL LETTER RIEUL-HIEUH +111B ; [.4190.0020.0002] # HANGUL CHOSEONG KAPYEOUNRIEUL +111C ; [.4191.0020.0002] # HANGUL CHOSEONG MIEUM-PIEUP +316E ; [.4191.0020.0004] # HANGUL LETTER MIEUM-PIEUP +111D ; [.4192.0020.0002] # HANGUL CHOSEONG KAPYEOUNMIEUM +3171 ; [.4192.0020.0004] # HANGUL LETTER KAPYEOUNMIEUM +111E ; [.4193.0020.0002] # HANGUL CHOSEONG PIEUP-KIYEOK +3172 ; [.4193.0020.0004] # HANGUL LETTER PIEUP-KIYEOK +111F ; [.4194.0020.0002] # HANGUL CHOSEONG PIEUP-NIEUN +1120 ; [.4195.0020.0002] # HANGUL CHOSEONG PIEUP-TIKEUT +3173 ; [.4195.0020.0004] # HANGUL LETTER PIEUP-TIKEUT +1121 ; [.4196.0020.0002] # HANGUL CHOSEONG PIEUP-SIOS +3144 ; [.4196.0020.0004] # HANGUL LETTER PIEUP-SIOS +FFB4 ; [.4196.0020.0012] # HALFWIDTH HANGUL LETTER PIEUP-SIOS +1122 ; [.4197.0020.0002] # HANGUL CHOSEONG PIEUP-SIOS-KIYEOK +3174 ; [.4197.0020.0004] # HANGUL LETTER PIEUP-SIOS-KIYEOK +1123 ; [.4198.0020.0002] # HANGUL CHOSEONG PIEUP-SIOS-TIKEUT +3175 ; [.4198.0020.0004] # HANGUL LETTER PIEUP-SIOS-TIKEUT +1124 ; [.4199.0020.0002] # HANGUL CHOSEONG PIEUP-SIOS-PIEUP +1125 ; [.419A.0020.0002] # HANGUL CHOSEONG PIEUP-SSANGSIOS +1126 ; [.419B.0020.0002] # HANGUL CHOSEONG PIEUP-SIOS-CIEUC +1127 ; [.419C.0020.0002] # HANGUL CHOSEONG PIEUP-CIEUC +3176 ; [.419C.0020.0004] # HANGUL LETTER PIEUP-CIEUC +1128 ; [.419D.0020.0002] # HANGUL CHOSEONG PIEUP-CHIEUCH +1129 ; [.419E.0020.0002] # HANGUL CHOSEONG PIEUP-THIEUTH +3177 ; [.419E.0020.0004] # HANGUL LETTER PIEUP-THIEUTH +112A ; [.419F.0020.0002] # HANGUL CHOSEONG PIEUP-PHIEUPH +112B ; [.41A0.0020.0002] # HANGUL CHOSEONG KAPYEOUNPIEUP +3178 ; [.41A0.0020.0004] # HANGUL LETTER KAPYEOUNPIEUP +112C ; [.41A1.0020.0002] # HANGUL CHOSEONG KAPYEOUNSSANGPIEUP +3179 ; [.41A1.0020.0004] # HANGUL LETTER KAPYEOUNSSANGPIEUP +112D ; [.41A2.0020.0002] # HANGUL CHOSEONG SIOS-KIYEOK +317A ; [.41A2.0020.0004] # HANGUL LETTER SIOS-KIYEOK +112E ; [.41A3.0020.0002] # HANGUL CHOSEONG SIOS-NIEUN +317B ; [.41A3.0020.0004] # HANGUL LETTER SIOS-NIEUN +112F ; [.41A4.0020.0002] # HANGUL CHOSEONG SIOS-TIKEUT +317C ; [.41A4.0020.0004] # HANGUL LETTER SIOS-TIKEUT +1130 ; [.41A5.0020.0002] # HANGUL CHOSEONG SIOS-RIEUL +1131 ; [.41A6.0020.0002] # HANGUL CHOSEONG SIOS-MIEUM +1132 ; [.41A7.0020.0002] # HANGUL CHOSEONG SIOS-PIEUP +317D ; [.41A7.0020.0004] # HANGUL LETTER SIOS-PIEUP +1133 ; [.41A8.0020.0002] # HANGUL CHOSEONG SIOS-PIEUP-KIYEOK +1134 ; [.41A9.0020.0002] # HANGUL CHOSEONG SIOS-SSANGSIOS +1135 ; [.41AA.0020.0002] # HANGUL CHOSEONG SIOS-IEUNG +1136 ; [.41AB.0020.0002] # HANGUL CHOSEONG SIOS-CIEUC +317E ; [.41AB.0020.0004] # HANGUL LETTER SIOS-CIEUC +1137 ; [.41AC.0020.0002] # HANGUL CHOSEONG SIOS-CHIEUCH +1138 ; [.41AD.0020.0002] # HANGUL CHOSEONG SIOS-KHIEUKH +1139 ; [.41AE.0020.0002] # HANGUL CHOSEONG SIOS-THIEUTH +113A ; [.41AF.0020.0002] # HANGUL CHOSEONG SIOS-PHIEUPH +113B ; [.41B0.0020.0002] # HANGUL CHOSEONG SIOS-HIEUH +113C ; [.41B1.0020.0002] # HANGUL CHOSEONG CHITUEUMSIOS +113D ; [.41B2.0020.0002] # HANGUL CHOSEONG CHITUEUMSSANGSIOS +113E ; [.41B3.0020.0002] # HANGUL CHOSEONG CEONGCHIEUMSIOS +113F ; [.41B4.0020.0002] # HANGUL CHOSEONG CEONGCHIEUMSSANGSIOS +1140 ; [.41B5.0020.0002] # HANGUL CHOSEONG PANSIOS +317F ; [.41B5.0020.0004] # HANGUL LETTER PANSIOS +1141 ; [.41B6.0020.0002] # HANGUL CHOSEONG IEUNG-KIYEOK +1142 ; [.41B7.0020.0002] # HANGUL CHOSEONG IEUNG-TIKEUT +1143 ; [.41B8.0020.0002] # HANGUL CHOSEONG IEUNG-MIEUM +1144 ; [.41B9.0020.0002] # HANGUL CHOSEONG IEUNG-PIEUP +1145 ; [.41BA.0020.0002] # HANGUL CHOSEONG IEUNG-SIOS +1146 ; [.41BB.0020.0002] # HANGUL CHOSEONG IEUNG-PANSIOS +1147 ; [.41BC.0020.0002] # HANGUL CHOSEONG SSANGIEUNG +3180 ; [.41BC.0020.0004] # HANGUL LETTER SSANGIEUNG +1148 ; [.41BD.0020.0002] # HANGUL CHOSEONG IEUNG-CIEUC +1149 ; [.41BE.0020.0002] # HANGUL CHOSEONG IEUNG-CHIEUCH +114A ; [.41BF.0020.0002] # HANGUL CHOSEONG IEUNG-THIEUTH +114B ; [.41C0.0020.0002] # HANGUL CHOSEONG IEUNG-PHIEUPH +114C ; [.41C1.0020.0002] # HANGUL CHOSEONG YESIEUNG +3181 ; [.41C1.0020.0004] # HANGUL LETTER YESIEUNG +114D ; [.41C2.0020.0002] # HANGUL CHOSEONG CIEUC-IEUNG +114E ; [.41C3.0020.0002] # HANGUL CHOSEONG CHITUEUMCIEUC +114F ; [.41C4.0020.0002] # HANGUL CHOSEONG CHITUEUMSSANGCIEUC +1150 ; [.41C5.0020.0002] # HANGUL CHOSEONG CEONGCHIEUMCIEUC +1151 ; [.41C6.0020.0002] # HANGUL CHOSEONG CEONGCHIEUMSSANGCIEUC +1152 ; [.41C7.0020.0002] # HANGUL CHOSEONG CHIEUCH-KHIEUKH +1153 ; [.41C8.0020.0002] # HANGUL CHOSEONG CHIEUCH-HIEUH +1154 ; [.41C9.0020.0002] # HANGUL CHOSEONG CHITUEUMCHIEUCH +1155 ; [.41CA.0020.0002] # HANGUL CHOSEONG CEONGCHIEUMCHIEUCH +1156 ; [.41CB.0020.0002] # HANGUL CHOSEONG PHIEUPH-PIEUP +1157 ; [.41CC.0020.0002] # HANGUL CHOSEONG KAPYEOUNPHIEUPH +3184 ; [.41CC.0020.0004] # HANGUL LETTER KAPYEOUNPHIEUPH +1158 ; [.41CD.0020.0002] # HANGUL CHOSEONG SSANGHIEUH +3185 ; [.41CD.0020.0004] # HANGUL LETTER SSANGHIEUH +1159 ; [.41CE.0020.0002] # HANGUL CHOSEONG YEORINHIEUH +3186 ; [.41CE.0020.0004] # HANGUL LETTER YEORINHIEUH +115A ; [.41CF.0020.0002] # HANGUL CHOSEONG KIYEOK-TIKEUT +115B ; [.41D0.0020.0002] # HANGUL CHOSEONG NIEUN-SIOS +115C ; [.41D1.0020.0002] # HANGUL CHOSEONG NIEUN-CIEUC +115D ; [.41D2.0020.0002] # HANGUL CHOSEONG NIEUN-HIEUH +115E ; [.41D3.0020.0002] # HANGUL CHOSEONG TIKEUT-RIEUL +A960 ; [.41D4.0020.0002] # HANGUL CHOSEONG TIKEUT-MIEUM +A961 ; [.41D5.0020.0002] # HANGUL CHOSEONG TIKEUT-PIEUP +A962 ; [.41D6.0020.0002] # HANGUL CHOSEONG TIKEUT-SIOS +A963 ; [.41D7.0020.0002] # HANGUL CHOSEONG TIKEUT-CIEUC +A964 ; [.41D8.0020.0002] # HANGUL CHOSEONG RIEUL-KIYEOK +A965 ; [.41D9.0020.0002] # HANGUL CHOSEONG RIEUL-SSANGKIYEOK +A966 ; [.41DA.0020.0002] # HANGUL CHOSEONG RIEUL-TIKEUT +A967 ; [.41DB.0020.0002] # HANGUL CHOSEONG RIEUL-SSANGTIKEUT +A968 ; [.41DC.0020.0002] # HANGUL CHOSEONG RIEUL-MIEUM +A969 ; [.41DD.0020.0002] # HANGUL CHOSEONG RIEUL-PIEUP +A96A ; [.41DE.0020.0002] # HANGUL CHOSEONG RIEUL-SSANGPIEUP +A96B ; [.41DF.0020.0002] # HANGUL CHOSEONG RIEUL-KAPYEOUNPIEUP +A96C ; [.41E0.0020.0002] # HANGUL CHOSEONG RIEUL-SIOS +A96D ; [.41E1.0020.0002] # HANGUL CHOSEONG RIEUL-CIEUC +A96E ; [.41E2.0020.0002] # HANGUL CHOSEONG RIEUL-KHIEUKH +A96F ; [.41E3.0020.0002] # HANGUL CHOSEONG MIEUM-KIYEOK +A970 ; [.41E4.0020.0002] # HANGUL CHOSEONG MIEUM-TIKEUT +A971 ; [.41E5.0020.0002] # HANGUL CHOSEONG MIEUM-SIOS +A972 ; [.41E6.0020.0002] # HANGUL CHOSEONG PIEUP-SIOS-THIEUTH +A973 ; [.41E7.0020.0002] # HANGUL CHOSEONG PIEUP-KHIEUKH +A974 ; [.41E8.0020.0002] # HANGUL CHOSEONG PIEUP-HIEUH +A975 ; [.41E9.0020.0002] # HANGUL CHOSEONG SSANGSIOS-PIEUP +A976 ; [.41EA.0020.0002] # HANGUL CHOSEONG IEUNG-RIEUL +A977 ; [.41EB.0020.0002] # HANGUL CHOSEONG IEUNG-HIEUH +A978 ; [.41EC.0020.0002] # HANGUL CHOSEONG SSANGCIEUC-HIEUH +A979 ; [.41ED.0020.0002] # HANGUL CHOSEONG SSANGTHIEUTH +A97A ; [.41EE.0020.0002] # HANGUL CHOSEONG PHIEUPH-HIEUH +A97B ; [.41EF.0020.0002] # HANGUL CHOSEONG HIEUH-SIOS +A97C ; [.41F0.0020.0002] # HANGUL CHOSEONG SSANGYEORINHIEUH +115F ; [.41F1.0020.0002] # HANGUL CHOSEONG FILLER +1160 ; [.41F2.0020.0002] # HANGUL JUNGSEONG FILLER +3164 ; [.41F2.0020.0004] # HANGUL FILLER +FFA0 ; [.41F2.0020.0012] # HALFWIDTH HANGUL FILLER +1161 ; [.41F3.0020.0002] # HANGUL JUNGSEONG A +314F ; [.41F3.0020.0004] # HANGUL LETTER A +FFC2 ; [.41F3.0020.0012] # HALFWIDTH HANGUL LETTER A +1162 ; [.41F4.0020.0002] # HANGUL JUNGSEONG AE +3150 ; [.41F4.0020.0004] # HANGUL LETTER AE +FFC3 ; [.41F4.0020.0012] # HALFWIDTH HANGUL LETTER AE +1163 ; [.41F5.0020.0002] # HANGUL JUNGSEONG YA +3151 ; [.41F5.0020.0004] # HANGUL LETTER YA +FFC4 ; [.41F5.0020.0012] # HALFWIDTH HANGUL LETTER YA +1164 ; [.41F6.0020.0002] # HANGUL JUNGSEONG YAE +3152 ; [.41F6.0020.0004] # HANGUL LETTER YAE +FFC5 ; [.41F6.0020.0012] # HALFWIDTH HANGUL LETTER YAE +1165 ; [.41F7.0020.0002] # HANGUL JUNGSEONG EO +3153 ; [.41F7.0020.0004] # HANGUL LETTER EO +FFC6 ; [.41F7.0020.0012] # HALFWIDTH HANGUL LETTER EO +1166 ; [.41F8.0020.0002] # HANGUL JUNGSEONG E +3154 ; [.41F8.0020.0004] # HANGUL LETTER E +FFC7 ; [.41F8.0020.0012] # HALFWIDTH HANGUL LETTER E +1167 ; [.41F9.0020.0002] # HANGUL JUNGSEONG YEO +3155 ; [.41F9.0020.0004] # HANGUL LETTER YEO +FFCA ; [.41F9.0020.0012] # HALFWIDTH HANGUL LETTER YEO +1168 ; [.41FA.0020.0002] # HANGUL JUNGSEONG YE +3156 ; [.41FA.0020.0004] # HANGUL LETTER YE +FFCB ; [.41FA.0020.0012] # HALFWIDTH HANGUL LETTER YE +1169 ; [.41FB.0020.0002] # HANGUL JUNGSEONG O +3157 ; [.41FB.0020.0004] # HANGUL LETTER O +FFCC ; [.41FB.0020.0012] # HALFWIDTH HANGUL LETTER O +116A ; [.41FC.0020.0002] # HANGUL JUNGSEONG WA +3158 ; [.41FC.0020.0004] # HANGUL LETTER WA +FFCD ; [.41FC.0020.0012] # HALFWIDTH HANGUL LETTER WA +116B ; [.41FD.0020.0002] # HANGUL JUNGSEONG WAE +3159 ; [.41FD.0020.0004] # HANGUL LETTER WAE +FFCE ; [.41FD.0020.0012] # HALFWIDTH HANGUL LETTER WAE +116C ; [.41FE.0020.0002] # HANGUL JUNGSEONG OE +315A ; [.41FE.0020.0004] # HANGUL LETTER OE +FFCF ; [.41FE.0020.0012] # HALFWIDTH HANGUL LETTER OE +116D ; [.41FF.0020.0002] # HANGUL JUNGSEONG YO +315B ; [.41FF.0020.0004] # HANGUL LETTER YO +FFD2 ; [.41FF.0020.0012] # HALFWIDTH HANGUL LETTER YO +116E ; [.4200.0020.0002] # HANGUL JUNGSEONG U +315C ; [.4200.0020.0004] # HANGUL LETTER U +FFD3 ; [.4200.0020.0012] # HALFWIDTH HANGUL LETTER U +116F ; [.4201.0020.0002] # HANGUL JUNGSEONG WEO +315D ; [.4201.0020.0004] # HANGUL LETTER WEO +FFD4 ; [.4201.0020.0012] # HALFWIDTH HANGUL LETTER WEO +1170 ; [.4202.0020.0002] # HANGUL JUNGSEONG WE +315E ; [.4202.0020.0004] # HANGUL LETTER WE +FFD5 ; [.4202.0020.0012] # HALFWIDTH HANGUL LETTER WE +1171 ; [.4203.0020.0002] # HANGUL JUNGSEONG WI +315F ; [.4203.0020.0004] # HANGUL LETTER WI +FFD6 ; [.4203.0020.0012] # HALFWIDTH HANGUL LETTER WI +1172 ; [.4204.0020.0002] # HANGUL JUNGSEONG YU +3160 ; [.4204.0020.0004] # HANGUL LETTER YU +FFD7 ; [.4204.0020.0012] # HALFWIDTH HANGUL LETTER YU +1173 ; [.4205.0020.0002] # HANGUL JUNGSEONG EU +3161 ; [.4205.0020.0004] # HANGUL LETTER EU +FFDA ; [.4205.0020.0012] # HALFWIDTH HANGUL LETTER EU +1174 ; [.4206.0020.0002] # HANGUL JUNGSEONG YI +3162 ; [.4206.0020.0004] # HANGUL LETTER YI +FFDB ; [.4206.0020.0012] # HALFWIDTH HANGUL LETTER YI +1175 ; [.4207.0020.0002] # HANGUL JUNGSEONG I +3163 ; [.4207.0020.0004] # HANGUL LETTER I +FFDC ; [.4207.0020.0012] # HALFWIDTH HANGUL LETTER I +1176 ; [.4208.0020.0002] # HANGUL JUNGSEONG A-O +1177 ; [.4209.0020.0002] # HANGUL JUNGSEONG A-U +1178 ; [.420A.0020.0002] # HANGUL JUNGSEONG YA-O +1179 ; [.420B.0020.0002] # HANGUL JUNGSEONG YA-YO +117A ; [.420C.0020.0002] # HANGUL JUNGSEONG EO-O +117B ; [.420D.0020.0002] # HANGUL JUNGSEONG EO-U +117C ; [.420E.0020.0002] # HANGUL JUNGSEONG EO-EU +117D ; [.420F.0020.0002] # HANGUL JUNGSEONG YEO-O +117E ; [.4210.0020.0002] # HANGUL JUNGSEONG YEO-U +117F ; [.4211.0020.0002] # HANGUL JUNGSEONG O-EO +1180 ; [.4212.0020.0002] # HANGUL JUNGSEONG O-E +1181 ; [.4213.0020.0002] # HANGUL JUNGSEONG O-YE +1182 ; [.4214.0020.0002] # HANGUL JUNGSEONG O-O +1183 ; [.4215.0020.0002] # HANGUL JUNGSEONG O-U +1184 ; [.4216.0020.0002] # HANGUL JUNGSEONG YO-YA +3187 ; [.4216.0020.0004] # HANGUL LETTER YO-YA +1185 ; [.4217.0020.0002] # HANGUL JUNGSEONG YO-YAE +3188 ; [.4217.0020.0004] # HANGUL LETTER YO-YAE +1186 ; [.4218.0020.0002] # HANGUL JUNGSEONG YO-YEO +1187 ; [.4219.0020.0002] # HANGUL JUNGSEONG YO-O +1188 ; [.421A.0020.0002] # HANGUL JUNGSEONG YO-I +3189 ; [.421A.0020.0004] # HANGUL LETTER YO-I +1189 ; [.421B.0020.0002] # HANGUL JUNGSEONG U-A +118A ; [.421C.0020.0002] # HANGUL JUNGSEONG U-AE +118B ; [.421D.0020.0002] # HANGUL JUNGSEONG U-EO-EU +118C ; [.421E.0020.0002] # HANGUL JUNGSEONG U-YE +118D ; [.421F.0020.0002] # HANGUL JUNGSEONG U-U +118E ; [.4220.0020.0002] # HANGUL JUNGSEONG YU-A +118F ; [.4221.0020.0002] # HANGUL JUNGSEONG YU-EO +1190 ; [.4222.0020.0002] # HANGUL JUNGSEONG YU-E +1191 ; [.4223.0020.0002] # HANGUL JUNGSEONG YU-YEO +318A ; [.4223.0020.0004] # HANGUL LETTER YU-YEO +1192 ; [.4224.0020.0002] # HANGUL JUNGSEONG YU-YE +318B ; [.4224.0020.0004] # HANGUL LETTER YU-YE +1193 ; [.4225.0020.0002] # HANGUL JUNGSEONG YU-U +1194 ; [.4226.0020.0002] # HANGUL JUNGSEONG YU-I +318C ; [.4226.0020.0004] # HANGUL LETTER YU-I +1195 ; [.4227.0020.0002] # HANGUL JUNGSEONG EU-U +1196 ; [.4228.0020.0002] # HANGUL JUNGSEONG EU-EU +1197 ; [.4229.0020.0002] # HANGUL JUNGSEONG YI-U +1198 ; [.422A.0020.0002] # HANGUL JUNGSEONG I-A +1199 ; [.422B.0020.0002] # HANGUL JUNGSEONG I-YA +119A ; [.422C.0020.0002] # HANGUL JUNGSEONG I-O +119B ; [.422D.0020.0002] # HANGUL JUNGSEONG I-U +119C ; [.422E.0020.0002] # HANGUL JUNGSEONG I-EU +119D ; [.422F.0020.0002] # HANGUL JUNGSEONG I-ARAEA +119E ; [.4230.0020.0002] # HANGUL JUNGSEONG ARAEA +318D ; [.4230.0020.0004] # HANGUL LETTER ARAEA +119F ; [.4231.0020.0002] # HANGUL JUNGSEONG ARAEA-EO +11A0 ; [.4232.0020.0002] # HANGUL JUNGSEONG ARAEA-U +11A1 ; [.4233.0020.0002] # HANGUL JUNGSEONG ARAEA-I +318E ; [.4233.0020.0004] # HANGUL LETTER ARAEAE +11A2 ; [.4234.0020.0002] # HANGUL JUNGSEONG SSANGARAEA +11A3 ; [.4235.0020.0002] # HANGUL JUNGSEONG A-EU +11A4 ; [.4236.0020.0002] # HANGUL JUNGSEONG YA-U +11A5 ; [.4237.0020.0002] # HANGUL JUNGSEONG YEO-YA +11A6 ; [.4238.0020.0002] # HANGUL JUNGSEONG O-YA +11A7 ; [.4239.0020.0002] # HANGUL JUNGSEONG O-YAE +D7B0 ; [.423A.0020.0002] # HANGUL JUNGSEONG O-YEO +D7B1 ; [.423B.0020.0002] # HANGUL JUNGSEONG O-O-I +D7B2 ; [.423C.0020.0002] # HANGUL JUNGSEONG YO-A +D7B3 ; [.423D.0020.0002] # HANGUL JUNGSEONG YO-AE +D7B4 ; [.423E.0020.0002] # HANGUL JUNGSEONG YO-EO +D7B5 ; [.423F.0020.0002] # HANGUL JUNGSEONG U-YEO +D7B6 ; [.4240.0020.0002] # HANGUL JUNGSEONG U-I-I +D7B7 ; [.4241.0020.0002] # HANGUL JUNGSEONG YU-AE +D7B8 ; [.4242.0020.0002] # HANGUL JUNGSEONG YU-O +D7B9 ; [.4243.0020.0002] # HANGUL JUNGSEONG EU-A +D7BA ; [.4244.0020.0002] # HANGUL JUNGSEONG EU-EO +D7BB ; [.4245.0020.0002] # HANGUL JUNGSEONG EU-E +D7BC ; [.4246.0020.0002] # HANGUL JUNGSEONG EU-O +D7BD ; [.4247.0020.0002] # HANGUL JUNGSEONG I-YA-O +D7BE ; [.4248.0020.0002] # HANGUL JUNGSEONG I-YAE +D7BF ; [.4249.0020.0002] # HANGUL JUNGSEONG I-YEO +D7C0 ; [.424A.0020.0002] # HANGUL JUNGSEONG I-YE +D7C1 ; [.424B.0020.0002] # HANGUL JUNGSEONG I-O-I +D7C2 ; [.424C.0020.0002] # HANGUL JUNGSEONG I-YO +D7C3 ; [.424D.0020.0002] # HANGUL JUNGSEONG I-YU +D7C4 ; [.424E.0020.0002] # HANGUL JUNGSEONG I-I +D7C5 ; [.424F.0020.0002] # HANGUL JUNGSEONG ARAEA-A +D7C6 ; [.4250.0020.0002] # HANGUL JUNGSEONG ARAEA-E +11A8 ; [.4251.0020.0002] # HANGUL JONGSEONG KIYEOK +11A9 ; [.4252.0020.0002] # HANGUL JONGSEONG SSANGKIYEOK +11AA ; [.4253.0020.0002] # HANGUL JONGSEONG KIYEOK-SIOS +3133 ; [.4253.0020.0004] # HANGUL LETTER KIYEOK-SIOS +FFA3 ; [.4253.0020.0012] # HALFWIDTH HANGUL LETTER KIYEOK-SIOS +11AB ; [.4254.0020.0002] # HANGUL JONGSEONG NIEUN +11AC ; [.4255.0020.0002] # HANGUL JONGSEONG NIEUN-CIEUC +3135 ; [.4255.0020.0004] # HANGUL LETTER NIEUN-CIEUC +FFA5 ; [.4255.0020.0012] # HALFWIDTH HANGUL LETTER NIEUN-CIEUC +11AD ; [.4256.0020.0002] # HANGUL JONGSEONG NIEUN-HIEUH +3136 ; [.4256.0020.0004] # HANGUL LETTER NIEUN-HIEUH +FFA6 ; [.4256.0020.0012] # HALFWIDTH HANGUL LETTER NIEUN-HIEUH +11AE ; [.4257.0020.0002] # HANGUL JONGSEONG TIKEUT +11AF ; [.4258.0020.0002] # HANGUL JONGSEONG RIEUL +11B0 ; [.4259.0020.0002] # HANGUL JONGSEONG RIEUL-KIYEOK +313A ; [.4259.0020.0004] # HANGUL LETTER RIEUL-KIYEOK +FFAA ; [.4259.0020.0012] # HALFWIDTH HANGUL LETTER RIEUL-KIYEOK +11B1 ; [.425A.0020.0002] # HANGUL JONGSEONG RIEUL-MIEUM +313B ; [.425A.0020.0004] # HANGUL LETTER RIEUL-MIEUM +FFAB ; [.425A.0020.0012] # HALFWIDTH HANGUL LETTER RIEUL-MIEUM +11B2 ; [.425B.0020.0002] # HANGUL JONGSEONG RIEUL-PIEUP +313C ; [.425B.0020.0004] # HANGUL LETTER RIEUL-PIEUP +FFAC ; [.425B.0020.0012] # HALFWIDTH HANGUL LETTER RIEUL-PIEUP +11B3 ; [.425C.0020.0002] # HANGUL JONGSEONG RIEUL-SIOS +313D ; [.425C.0020.0004] # HANGUL LETTER RIEUL-SIOS +FFAD ; [.425C.0020.0012] # HALFWIDTH HANGUL LETTER RIEUL-SIOS +11B4 ; [.425D.0020.0002] # HANGUL JONGSEONG RIEUL-THIEUTH +313E ; [.425D.0020.0004] # HANGUL LETTER RIEUL-THIEUTH +FFAE ; [.425D.0020.0012] # HALFWIDTH HANGUL LETTER RIEUL-THIEUTH +11B5 ; [.425E.0020.0002] # HANGUL JONGSEONG RIEUL-PHIEUPH +313F ; [.425E.0020.0004] # HANGUL LETTER RIEUL-PHIEUPH +FFAF ; [.425E.0020.0012] # HALFWIDTH HANGUL LETTER RIEUL-PHIEUPH +11B6 ; [.425F.0020.0002] # HANGUL JONGSEONG RIEUL-HIEUH +11B7 ; [.4260.0020.0002] # HANGUL JONGSEONG MIEUM +11B8 ; [.4261.0020.0002] # HANGUL JONGSEONG PIEUP +11B9 ; [.4262.0020.0002] # HANGUL JONGSEONG PIEUP-SIOS +11BA ; [.4263.0020.0002] # HANGUL JONGSEONG SIOS +11BB ; [.4264.0020.0002] # HANGUL JONGSEONG SSANGSIOS +11BC ; [.4265.0020.0002] # HANGUL JONGSEONG IEUNG +11BD ; [.4266.0020.0002] # HANGUL JONGSEONG CIEUC +11BE ; [.4267.0020.0002] # HANGUL JONGSEONG CHIEUCH +11BF ; [.4268.0020.0002] # HANGUL JONGSEONG KHIEUKH +11C0 ; [.4269.0020.0002] # HANGUL JONGSEONG THIEUTH +11C1 ; [.426A.0020.0002] # HANGUL JONGSEONG PHIEUPH +11C2 ; [.426B.0020.0002] # HANGUL JONGSEONG HIEUH +11C3 ; [.426C.0020.0002] # HANGUL JONGSEONG KIYEOK-RIEUL +11C4 ; [.426D.0020.0002] # HANGUL JONGSEONG KIYEOK-SIOS-KIYEOK +11C5 ; [.426E.0020.0002] # HANGUL JONGSEONG NIEUN-KIYEOK +11C6 ; [.426F.0020.0002] # HANGUL JONGSEONG NIEUN-TIKEUT +11C7 ; [.4270.0020.0002] # HANGUL JONGSEONG NIEUN-SIOS +3167 ; [.4270.0020.0004] # HANGUL LETTER NIEUN-SIOS +11C8 ; [.4271.0020.0002] # HANGUL JONGSEONG NIEUN-PANSIOS +3168 ; [.4271.0020.0004] # HANGUL LETTER NIEUN-PANSIOS +11C9 ; [.4272.0020.0002] # HANGUL JONGSEONG NIEUN-THIEUTH +11CA ; [.4273.0020.0002] # HANGUL JONGSEONG TIKEUT-KIYEOK +11CB ; [.4274.0020.0002] # HANGUL JONGSEONG TIKEUT-RIEUL +11CC ; [.4275.0020.0002] # HANGUL JONGSEONG RIEUL-KIYEOK-SIOS +3169 ; [.4275.0020.0004] # HANGUL LETTER RIEUL-KIYEOK-SIOS +11CD ; [.4276.0020.0002] # HANGUL JONGSEONG RIEUL-NIEUN +11CE ; [.4277.0020.0002] # HANGUL JONGSEONG RIEUL-TIKEUT +316A ; [.4277.0020.0004] # HANGUL LETTER RIEUL-TIKEUT +11CF ; [.4278.0020.0002] # HANGUL JONGSEONG RIEUL-TIKEUT-HIEUH +11D0 ; [.4279.0020.0002] # HANGUL JONGSEONG SSANGRIEUL +11D1 ; [.427A.0020.0002] # HANGUL JONGSEONG RIEUL-MIEUM-KIYEOK +11D2 ; [.427B.0020.0002] # HANGUL JONGSEONG RIEUL-MIEUM-SIOS +11D3 ; [.427C.0020.0002] # HANGUL JONGSEONG RIEUL-PIEUP-SIOS +316B ; [.427C.0020.0004] # HANGUL LETTER RIEUL-PIEUP-SIOS +11D4 ; [.427D.0020.0002] # HANGUL JONGSEONG RIEUL-PIEUP-HIEUH +11D5 ; [.427E.0020.0002] # HANGUL JONGSEONG RIEUL-KAPYEOUNPIEUP +11D6 ; [.427F.0020.0002] # HANGUL JONGSEONG RIEUL-SSANGSIOS +11D7 ; [.4280.0020.0002] # HANGUL JONGSEONG RIEUL-PANSIOS +316C ; [.4280.0020.0004] # HANGUL LETTER RIEUL-PANSIOS +11D8 ; [.4281.0020.0002] # HANGUL JONGSEONG RIEUL-KHIEUKH +11D9 ; [.4282.0020.0002] # HANGUL JONGSEONG RIEUL-YEORINHIEUH +316D ; [.4282.0020.0004] # HANGUL LETTER RIEUL-YEORINHIEUH +11DA ; [.4283.0020.0002] # HANGUL JONGSEONG MIEUM-KIYEOK +11DB ; [.4284.0020.0002] # HANGUL JONGSEONG MIEUM-RIEUL +11DC ; [.4285.0020.0002] # HANGUL JONGSEONG MIEUM-PIEUP +11DD ; [.4286.0020.0002] # HANGUL JONGSEONG MIEUM-SIOS +316F ; [.4286.0020.0004] # HANGUL LETTER MIEUM-SIOS +11DE ; [.4287.0020.0002] # HANGUL JONGSEONG MIEUM-SSANGSIOS +11DF ; [.4288.0020.0002] # HANGUL JONGSEONG MIEUM-PANSIOS +3170 ; [.4288.0020.0004] # HANGUL LETTER MIEUM-PANSIOS +11E0 ; [.4289.0020.0002] # HANGUL JONGSEONG MIEUM-CHIEUCH +11E1 ; [.428A.0020.0002] # HANGUL JONGSEONG MIEUM-HIEUH +11E2 ; [.428B.0020.0002] # HANGUL JONGSEONG KAPYEOUNMIEUM +11E3 ; [.428C.0020.0002] # HANGUL JONGSEONG PIEUP-RIEUL +11E4 ; [.428D.0020.0002] # HANGUL JONGSEONG PIEUP-PHIEUPH +11E5 ; [.428E.0020.0002] # HANGUL JONGSEONG PIEUP-HIEUH +11E6 ; [.428F.0020.0002] # HANGUL JONGSEONG KAPYEOUNPIEUP +11E7 ; [.4290.0020.0002] # HANGUL JONGSEONG SIOS-KIYEOK +11E8 ; [.4291.0020.0002] # HANGUL JONGSEONG SIOS-TIKEUT +11E9 ; [.4292.0020.0002] # HANGUL JONGSEONG SIOS-RIEUL +11EA ; [.4293.0020.0002] # HANGUL JONGSEONG SIOS-PIEUP +11EB ; [.4294.0020.0002] # HANGUL JONGSEONG PANSIOS +11EC ; [.4295.0020.0002] # HANGUL JONGSEONG IEUNG-KIYEOK +11ED ; [.4296.0020.0002] # HANGUL JONGSEONG IEUNG-SSANGKIYEOK +11EE ; [.4297.0020.0002] # HANGUL JONGSEONG SSANGIEUNG +11EF ; [.4298.0020.0002] # HANGUL JONGSEONG IEUNG-KHIEUKH +11F0 ; [.4299.0020.0002] # HANGUL JONGSEONG YESIEUNG +11F1 ; [.429A.0020.0002] # HANGUL JONGSEONG YESIEUNG-SIOS +3182 ; [.429A.0020.0004] # HANGUL LETTER YESIEUNG-SIOS +11F2 ; [.429B.0020.0002] # HANGUL JONGSEONG YESIEUNG-PANSIOS +3183 ; [.429B.0020.0004] # HANGUL LETTER YESIEUNG-PANSIOS +11F3 ; [.429C.0020.0002] # HANGUL JONGSEONG PHIEUPH-PIEUP +11F4 ; [.429D.0020.0002] # HANGUL JONGSEONG KAPYEOUNPHIEUPH +11F5 ; [.429E.0020.0002] # HANGUL JONGSEONG HIEUH-NIEUN +11F6 ; [.429F.0020.0002] # HANGUL JONGSEONG HIEUH-RIEUL +11F7 ; [.42A0.0020.0002] # HANGUL JONGSEONG HIEUH-MIEUM +11F8 ; [.42A1.0020.0002] # HANGUL JONGSEONG HIEUH-PIEUP +11F9 ; [.42A2.0020.0002] # HANGUL JONGSEONG YEORINHIEUH +11FA ; [.42A3.0020.0002] # HANGUL JONGSEONG KIYEOK-NIEUN +11FB ; [.42A4.0020.0002] # HANGUL JONGSEONG KIYEOK-PIEUP +11FC ; [.42A5.0020.0002] # HANGUL JONGSEONG KIYEOK-CHIEUCH +11FD ; [.42A6.0020.0002] # HANGUL JONGSEONG KIYEOK-KHIEUKH +11FE ; [.42A7.0020.0002] # HANGUL JONGSEONG KIYEOK-HIEUH +11FF ; [.42A8.0020.0002] # HANGUL JONGSEONG SSANGNIEUN +D7CB ; [.42A9.0020.0002] # HANGUL JONGSEONG NIEUN-RIEUL +D7CC ; [.42AA.0020.0002] # HANGUL JONGSEONG NIEUN-CHIEUCH +D7CD ; [.42AB.0020.0002] # HANGUL JONGSEONG SSANGTIKEUT +D7CE ; [.42AC.0020.0002] # HANGUL JONGSEONG SSANGTIKEUT-PIEUP +D7CF ; [.42AD.0020.0002] # HANGUL JONGSEONG TIKEUT-PIEUP +D7D0 ; [.42AE.0020.0002] # HANGUL JONGSEONG TIKEUT-SIOS +D7D1 ; [.42AF.0020.0002] # HANGUL JONGSEONG TIKEUT-SIOS-KIYEOK +D7D2 ; [.42B0.0020.0002] # HANGUL JONGSEONG TIKEUT-CIEUC +D7D3 ; [.42B1.0020.0002] # HANGUL JONGSEONG TIKEUT-CHIEUCH +D7D4 ; [.42B2.0020.0002] # HANGUL JONGSEONG TIKEUT-THIEUTH +D7D5 ; [.42B3.0020.0002] # HANGUL JONGSEONG RIEUL-SSANGKIYEOK +D7D6 ; [.42B4.0020.0002] # HANGUL JONGSEONG RIEUL-KIYEOK-HIEUH +D7D7 ; [.42B5.0020.0002] # HANGUL JONGSEONG SSANGRIEUL-KHIEUKH +D7D8 ; [.42B6.0020.0002] # HANGUL JONGSEONG RIEUL-MIEUM-HIEUH +D7D9 ; [.42B7.0020.0002] # HANGUL JONGSEONG RIEUL-PIEUP-TIKEUT +D7DA ; [.42B8.0020.0002] # HANGUL JONGSEONG RIEUL-PIEUP-PHIEUPH +D7DB ; [.42B9.0020.0002] # HANGUL JONGSEONG RIEUL-YESIEUNG +D7DC ; [.42BA.0020.0002] # HANGUL JONGSEONG RIEUL-YEORINHIEUH-HIEUH +D7DD ; [.42BB.0020.0002] # HANGUL JONGSEONG KAPYEOUNRIEUL +D7DE ; [.42BC.0020.0002] # HANGUL JONGSEONG MIEUM-NIEUN +D7DF ; [.42BD.0020.0002] # HANGUL JONGSEONG MIEUM-SSANGNIEUN +D7E0 ; [.42BE.0020.0002] # HANGUL JONGSEONG SSANGMIEUM +D7E1 ; [.42BF.0020.0002] # HANGUL JONGSEONG MIEUM-PIEUP-SIOS +D7E2 ; [.42C0.0020.0002] # HANGUL JONGSEONG MIEUM-CIEUC +D7E3 ; [.42C1.0020.0002] # HANGUL JONGSEONG PIEUP-TIKEUT +D7E4 ; [.42C2.0020.0002] # HANGUL JONGSEONG PIEUP-RIEUL-PHIEUPH +D7E5 ; [.42C3.0020.0002] # HANGUL JONGSEONG PIEUP-MIEUM +D7E6 ; [.42C4.0020.0002] # HANGUL JONGSEONG SSANGPIEUP +D7E7 ; [.42C5.0020.0002] # HANGUL JONGSEONG PIEUP-SIOS-TIKEUT +D7E8 ; [.42C6.0020.0002] # HANGUL JONGSEONG PIEUP-CIEUC +D7E9 ; [.42C7.0020.0002] # HANGUL JONGSEONG PIEUP-CHIEUCH +D7EA ; [.42C8.0020.0002] # HANGUL JONGSEONG SIOS-MIEUM +D7EB ; [.42C9.0020.0002] # HANGUL JONGSEONG SIOS-KAPYEOUNPIEUP +D7EC ; [.42CA.0020.0002] # HANGUL JONGSEONG SSANGSIOS-KIYEOK +D7ED ; [.42CB.0020.0002] # HANGUL JONGSEONG SSANGSIOS-TIKEUT +D7EE ; [.42CC.0020.0002] # HANGUL JONGSEONG SIOS-PANSIOS +D7EF ; [.42CD.0020.0002] # HANGUL JONGSEONG SIOS-CIEUC +D7F0 ; [.42CE.0020.0002] # HANGUL JONGSEONG SIOS-CHIEUCH +D7F1 ; [.42CF.0020.0002] # HANGUL JONGSEONG SIOS-THIEUTH +D7F2 ; [.42D0.0020.0002] # HANGUL JONGSEONG SIOS-HIEUH +D7F3 ; [.42D1.0020.0002] # HANGUL JONGSEONG PANSIOS-PIEUP +D7F4 ; [.42D2.0020.0002] # HANGUL JONGSEONG PANSIOS-KAPYEOUNPIEUP +D7F5 ; [.42D3.0020.0002] # HANGUL JONGSEONG YESIEUNG-MIEUM +D7F6 ; [.42D4.0020.0002] # HANGUL JONGSEONG YESIEUNG-HIEUH +D7F7 ; [.42D5.0020.0002] # HANGUL JONGSEONG CIEUC-PIEUP +D7F8 ; [.42D6.0020.0002] # HANGUL JONGSEONG CIEUC-SSANGPIEUP +D7F9 ; [.42D7.0020.0002] # HANGUL JONGSEONG SSANGCIEUC +D7FA ; [.42D8.0020.0002] # HANGUL JONGSEONG PHIEUPH-SIOS +D7FB ; [.42D9.0020.0002] # HANGUL JONGSEONG PHIEUPH-THIEUTH +3041 ; [.42DA.0020.000D] # HIRAGANA LETTER SMALL A +3042 ; [.42DA.0020.000E] # HIRAGANA LETTER A +30A1 ; [.42DA.0020.000F] # KATAKANA LETTER SMALL A +FF67 ; [.42DA.0020.0010] # HALFWIDTH KATAKANA LETTER SMALL A +30A2 ; [.42DA.0020.0011] # KATAKANA LETTER A +FF71 ; [.42DA.0020.0012] # HALFWIDTH KATAKANA LETTER A +32D0 ; [.42DA.0020.0013] # CIRCLED KATAKANA A +3303 ; [.42DA.0020.001C][.1F60.0020.001C][.4303.0020.001C] # SQUARE AARU +3300 ; [.42DA.0020.001C][.42F4.0020.001C][.0000.0038.001C][.1F60.0020.001C][.42EE.0020.001C] # SQUARE APAATO +3301 ; [.42DA.0020.001C][.4303.0020.001C][.42F6.0020.001C][.42DA.0020.001C] # SQUARE ARUHUA +3302 ; [.42DA.0020.001C][.430A.0020.001C][.42F7.0020.001C][.0000.0038.001C][.42DA.0020.001C] # SQUARE ANPEA +3043 ; [.42DB.0020.000D] # HIRAGANA LETTER SMALL I +3044 ; [.42DB.0020.000E] # HIRAGANA LETTER I +30A3 ; [.42DB.0020.000F] # KATAKANA LETTER SMALL I +FF68 ; [.42DB.0020.0010] # HALFWIDTH KATAKANA LETTER SMALL I +30A4 ; [.42DB.0020.0011] # KATAKANA LETTER I +FF72 ; [.42DB.0020.0012] # HALFWIDTH KATAKANA LETTER I +32D1 ; [.42DB.0020.0013] # CIRCLED KATAKANA I +3304 ; [.42DB.0020.001C][.42F0.0020.001C][.430A.0020.001C][.42E2.0020.001C][.0000.0037.001C] # SQUARE ININGU +3305 ; [.42DB.0020.001C][.430A.0020.001C][.42EB.0020.001C] # SQUARE INTI +3045 ; [.42DC.0020.000D] # HIRAGANA LETTER SMALL U +3046 ; [.42DC.0020.000E] # HIRAGANA LETTER U +30A5 ; [.42DC.0020.000F] # KATAKANA LETTER SMALL U +FF69 ; [.42DC.0020.0010] # HALFWIDTH KATAKANA LETTER SMALL U +30A6 ; [.42DC.0020.0011] # KATAKANA LETTER U +FF73 ; [.42DC.0020.0012] # HALFWIDTH KATAKANA LETTER U +32D2 ; [.42DC.0020.0013] # CIRCLED KATAKANA U +3094 ; [.42DC.0020.000E][.0000.0037.0002] # HIRAGANA LETTER VU +30F4 ; [.42DC.0020.0011][.0000.0037.0002] # KATAKANA LETTER VU +3306 ; [.42DC.0020.001C][.42DF.0020.001C][.430A.0020.001C] # SQUARE UON +1B000 ; [.42DD.0020.0011] # KATAKANA LETTER ARCHAIC E +3047 ; [.42DE.0020.000D] # HIRAGANA LETTER SMALL E +3048 ; [.42DE.0020.000E] # HIRAGANA LETTER E +30A7 ; [.42DE.0020.000F] # KATAKANA LETTER SMALL E +FF6A ; [.42DE.0020.0010] # HALFWIDTH KATAKANA LETTER SMALL E +30A8 ; [.42DE.0020.0011] # KATAKANA LETTER E +FF74 ; [.42DE.0020.0012] # HALFWIDTH KATAKANA LETTER E +32D3 ; [.42DE.0020.0013] # CIRCLED KATAKANA E +3308 ; [.42DE.0020.001C][.1F60.0020.001C][.42E0.0020.001C][.1F60.0020.001C] # SQUARE EEKAA +3307 ; [.42DE.0020.001C][.42E7.0020.001C][.42E2.0020.001C][.1F60.0020.001C][.42EE.0020.001C][.0000.0037.001C] # SQUARE ESUKUUDO +3049 ; [.42DF.0020.000D] # HIRAGANA LETTER SMALL O +304A ; [.42DF.0020.000E] # HIRAGANA LETTER O +30A9 ; [.42DF.0020.000F] # KATAKANA LETTER SMALL O +FF6B ; [.42DF.0020.0010] # HALFWIDTH KATAKANA LETTER SMALL O +30AA ; [.42DF.0020.0011] # KATAKANA LETTER O +FF75 ; [.42DF.0020.0012] # HALFWIDTH KATAKANA LETTER O +32D4 ; [.42DF.0020.0013] # CIRCLED KATAKANA O +330A ; [.42DF.0020.001C][.1F60.0020.001C][.42FB.0020.001C] # SQUARE OOMU +3309 ; [.42DF.0020.001C][.430A.0020.001C][.42E7.0020.001C] # SQUARE ONSU +3095 ; [.42E0.0020.000D] # HIRAGANA LETTER SMALL KA +304B ; [.42E0.0020.000E] # HIRAGANA LETTER KA +30F5 ; [.42E0.0020.000F] # KATAKANA LETTER SMALL KA +30AB ; [.42E0.0020.0011] # KATAKANA LETTER KA +FF76 ; [.42E0.0020.0012] # HALFWIDTH KATAKANA LETTER KA +32D5 ; [.42E0.0020.0013] # CIRCLED KATAKANA KA +304C ; [.42E0.0020.000E][.0000.0037.0002] # HIRAGANA LETTER GA +30AC ; [.42E0.0020.0011][.0000.0037.0002] # KATAKANA LETTER GA +330B ; [.42E0.0020.001C][.42DB.0020.001C][.4302.0020.001C] # SQUARE KAIRI +330C ; [.42E0.0020.001C][.4301.0020.001C][.42EC.0020.001C][.42EE.0020.001C] # SQUARE KARATTO +330D ; [.42E0.0020.001C][.4305.0020.001C][.4302.0020.001C][.1F60.0020.001C] # SQUARE KARORII +330E ; [.42E0.0020.001C][.0000.0037.001C][.4305.0020.001C][.430A.0020.001C] # SQUARE GARON +330F ; [.42E0.0020.001C][.0000.0037.001C][.430A.0020.001C][.42F9.0020.001C] # SQUARE GANMA +304D ; [.42E1.0020.000E] # HIRAGANA LETTER KI +30AD ; [.42E1.0020.0011] # KATAKANA LETTER KI +FF77 ; [.42E1.0020.0012] # HALFWIDTH KATAKANA LETTER KI +32D6 ; [.42E1.0020.0013] # CIRCLED KATAKANA KI +304E ; [.42E1.0020.000E][.0000.0037.0002] # HIRAGANA LETTER GI +30AE ; [.42E1.0020.0011][.0000.0037.0002] # KATAKANA LETTER GI +3310 ; [.42E1.0020.001C][.0000.0037.001C][.42E0.0020.001C][.0000.0037.001C] # SQUARE GIGA +3311 ; [.42E1.0020.001C][.0000.0037.001C][.42F0.0020.001C][.1F60.0020.001C] # SQUARE GINII +3312 ; [.42E1.0020.001C][.42FF.0020.001C][.4302.0020.001C][.1F60.0020.001C] # SQUARE KYURII +3313 ; [.42E1.0020.001C][.0000.0037.001C][.4303.0020.001C][.42EA.0020.001C][.0000.0037.001C][.1F60.0020.001C] # SQUARE GIRUDAA +3314 ; [.42E1.0020.001C][.4305.0020.001C] # SQUARE KIRO +3315 ; [.42E1.0020.001C][.4305.0020.001C][.42E2.0020.001C][.0000.0037.001C][.4301.0020.001C][.42FB.0020.001C] # SQUARE KIROGURAMU +3316 ; [.42E1.0020.001C][.4305.0020.001C][.42FC.0020.001C][.1F60.0020.001C][.42EE.0020.001C][.4303.0020.001C] # SQUARE KIROMEETORU +3317 ; [.42E1.0020.001C][.4305.0020.001C][.4306.0020.001C][.42EC.0020.001C][.42EE.0020.001C] # SQUARE KIROWATTO +304F ; [.42E2.0020.000E] # HIRAGANA LETTER KU +31F0 ; [.42E2.0020.000F] # KATAKANA LETTER SMALL KU +30AF ; [.42E2.0020.0011] # KATAKANA LETTER KU +FF78 ; [.42E2.0020.0012] # HALFWIDTH KATAKANA LETTER KU +32D7 ; [.42E2.0020.0013] # CIRCLED KATAKANA KU +3050 ; [.42E2.0020.000E][.0000.0037.0002] # HIRAGANA LETTER GU +30B0 ; [.42E2.0020.0011][.0000.0037.0002] # KATAKANA LETTER GU +3318 ; [.42E2.0020.001C][.0000.0037.001C][.4301.0020.001C][.42FB.0020.001C] # SQUARE GURAMU +3319 ; [.42E2.0020.001C][.0000.0037.001C][.4301.0020.001C][.42FB.0020.001C][.42EE.0020.001C][.430A.0020.001C] # SQUARE GURAMUTON +331A ; [.42E2.0020.001C][.4303.0020.001C][.42E8.0020.001C][.0000.0037.001C][.42DB.0020.001C][.4305.0020.001C] # SQUARE KURUZEIRO +331B ; [.42E2.0020.001C][.4305.0020.001C][.1F60.0020.001C][.42F2.0020.001C] # SQUARE KUROONE +3096 ; [.42E3.0020.000D] # HIRAGANA LETTER SMALL KE +3051 ; [.42E3.0020.000E] # HIRAGANA LETTER KE +30F6 ; [.42E3.0020.000F] # KATAKANA LETTER SMALL KE +30B1 ; [.42E3.0020.0011] # KATAKANA LETTER KE +FF79 ; [.42E3.0020.0012] # HALFWIDTH KATAKANA LETTER KE +32D8 ; [.42E3.0020.0013] # CIRCLED KATAKANA KE +3052 ; [.42E3.0020.000E][.0000.0037.0002] # HIRAGANA LETTER GE +30B2 ; [.42E3.0020.0011][.0000.0037.0002] # KATAKANA LETTER GE +331C ; [.42E3.0020.001C][.1F60.0020.001C][.42E7.0020.001C] # SQUARE KEESU +3053 ; [.42E4.0020.000E] # HIRAGANA LETTER KO +30B3 ; [.42E4.0020.0011] # KATAKANA LETTER KO +FF7A ; [.42E4.0020.0012] # HALFWIDTH KATAKANA LETTER KO +32D9 ; [.42E4.0020.0013] # CIRCLED KATAKANA KO +3054 ; [.42E4.0020.000E][.0000.0037.0002] # HIRAGANA LETTER GO +30B4 ; [.42E4.0020.0011][.0000.0037.0002] # KATAKANA LETTER GO +331E ; [.42E4.0020.001C][.1F60.0020.001C][.42F8.0020.001C][.0000.0038.001C] # SQUARE KOOPO +1F201 ; [.42E4.0020.001C][.42E4.0020.001C] # SQUARED KATAKANA KOKO +30FF ; [.42E4.0020.0016][.42EE.0020.0016] # KATAKANA DIGRAPH KOTO +331D ; [.42E4.0020.001C][.4303.0020.001C][.42EF.0020.001C] # SQUARE KORUNA +3055 ; [.42E5.0020.000E] # HIRAGANA LETTER SA +30B5 ; [.42E5.0020.0011] # KATAKANA LETTER SA +FF7B ; [.42E5.0020.0012] # HALFWIDTH KATAKANA LETTER SA +32DA ; [.42E5.0020.0013] # CIRCLED KATAKANA SA +1F202 ; [.42E5.0020.001C] # SQUARED KATAKANA SA +3056 ; [.42E5.0020.000E][.0000.0037.0002] # HIRAGANA LETTER ZA +30B6 ; [.42E5.0020.0011][.0000.0037.0002] # KATAKANA LETTER ZA +331F ; [.42E5.0020.001C][.42DB.0020.001C][.42E2.0020.001C][.4303.0020.001C] # SQUARE SAIKURU +3320 ; [.42E5.0020.001C][.430A.0020.001C][.42EB.0020.001C][.1F60.0020.001C][.42FB.0020.001C] # SQUARE SANTIIMU +3057 ; [.42E6.0020.000E] # HIRAGANA LETTER SI +31F1 ; [.42E6.0020.000F] # KATAKANA LETTER SMALL SI +30B7 ; [.42E6.0020.0011] # KATAKANA LETTER SI +FF7C ; [.42E6.0020.0012] # HALFWIDTH KATAKANA LETTER SI +32DB ; [.42E6.0020.0013] # CIRCLED KATAKANA SI +3058 ; [.42E6.0020.000E][.0000.0037.0002] # HIRAGANA LETTER ZI +30B8 ; [.42E6.0020.0011][.0000.0037.0002] # KATAKANA LETTER ZI +3006 ; [.42E6.0020.0004][.42FC.0020.0004] # IDEOGRAPHIC CLOSING MARK +3321 ; [.42E6.0020.001C][.4302.0020.001C][.430A.0020.001C][.42E2.0020.001C][.0000.0037.001C] # SQUARE SIRINGU +3059 ; [.42E7.0020.000E] # HIRAGANA LETTER SU +31F2 ; [.42E7.0020.000F] # KATAKANA LETTER SMALL SU +30B9 ; [.42E7.0020.0011] # KATAKANA LETTER SU +FF7D ; [.42E7.0020.0012] # HALFWIDTH KATAKANA LETTER SU +32DC ; [.42E7.0020.0013] # CIRCLED KATAKANA SU +305A ; [.42E7.0020.000E][.0000.0037.0002] # HIRAGANA LETTER ZU +30BA ; [.42E7.0020.0011][.0000.0037.0002] # KATAKANA LETTER ZU +305B ; [.42E8.0020.000E] # HIRAGANA LETTER SE +30BB ; [.42E8.0020.0011] # KATAKANA LETTER SE +FF7E ; [.42E8.0020.0012] # HALFWIDTH KATAKANA LETTER SE +32DD ; [.42E8.0020.0013] # CIRCLED KATAKANA SE +305C ; [.42E8.0020.000E][.0000.0037.0002] # HIRAGANA LETTER ZE +30BC ; [.42E8.0020.0011][.0000.0037.0002] # KATAKANA LETTER ZE +3322 ; [.42E8.0020.001C][.430A.0020.001C][.42EB.0020.001C] # SQUARE SENTI +3323 ; [.42E8.0020.001C][.430A.0020.001C][.42EE.0020.001C] # SQUARE SENTO +305D ; [.42E9.0020.000E] # HIRAGANA LETTER SO +30BD ; [.42E9.0020.0011] # KATAKANA LETTER SO +FF7F ; [.42E9.0020.0012] # HALFWIDTH KATAKANA LETTER SO +32DE ; [.42E9.0020.0013] # CIRCLED KATAKANA SO +305E ; [.42E9.0020.000E][.0000.0037.0002] # HIRAGANA LETTER ZO +30BE ; [.42E9.0020.0011][.0000.0037.0002] # KATAKANA LETTER ZO +305F ; [.42EA.0020.000E] # HIRAGANA LETTER TA +30BF ; [.42EA.0020.0011] # KATAKANA LETTER TA +FF80 ; [.42EA.0020.0012] # HALFWIDTH KATAKANA LETTER TA +32DF ; [.42EA.0020.0013] # CIRCLED KATAKANA TA +3060 ; [.42EA.0020.000E][.0000.0037.0002] # HIRAGANA LETTER DA +30C0 ; [.42EA.0020.0011][.0000.0037.0002] # KATAKANA LETTER DA +3324 ; [.42EA.0020.001C][.0000.0037.001C][.1F60.0020.001C][.42E7.0020.001C] # SQUARE DAASU +3061 ; [.42EB.0020.000E] # HIRAGANA LETTER TI +30C1 ; [.42EB.0020.0011] # KATAKANA LETTER TI +FF81 ; [.42EB.0020.0012] # HALFWIDTH KATAKANA LETTER TI +32E0 ; [.42EB.0020.0013] # CIRCLED KATAKANA TI +3062 ; [.42EB.0020.000E][.0000.0037.0002] # HIRAGANA LETTER DI +30C2 ; [.42EB.0020.0011][.0000.0037.0002] # KATAKANA LETTER DI +3063 ; [.42EC.0020.000D] # HIRAGANA LETTER SMALL TU +3064 ; [.42EC.0020.000E] # HIRAGANA LETTER TU +30C3 ; [.42EC.0020.000F] # KATAKANA LETTER SMALL TU +FF6F ; [.42EC.0020.0010] # HALFWIDTH KATAKANA LETTER SMALL TU +30C4 ; [.42EC.0020.0011] # KATAKANA LETTER TU +FF82 ; [.42EC.0020.0012] # HALFWIDTH KATAKANA LETTER TU +32E1 ; [.42EC.0020.0013] # CIRCLED KATAKANA TU +3065 ; [.42EC.0020.000E][.0000.0037.0002] # HIRAGANA LETTER DU +30C5 ; [.42EC.0020.0011][.0000.0037.0002] # KATAKANA LETTER DU +3066 ; [.42ED.0020.000E] # HIRAGANA LETTER TE +30C6 ; [.42ED.0020.0011] # KATAKANA LETTER TE +FF83 ; [.42ED.0020.0012] # HALFWIDTH KATAKANA LETTER TE +32E2 ; [.42ED.0020.0013] # CIRCLED KATAKANA TE +3067 ; [.42ED.0020.000E][.0000.0037.0002] # HIRAGANA LETTER DE +30C7 ; [.42ED.0020.0011][.0000.0037.0002] # KATAKANA LETTER DE +1F213 ; [.42ED.0020.001C][.0000.0037.001C] # SQUARED KATAKANA DE +3325 ; [.42ED.0020.001C][.0000.0037.001C][.42E6.0020.001C] # SQUARE DESI +3068 ; [.42EE.0020.000E] # HIRAGANA LETTER TO +31F3 ; [.42EE.0020.000F] # KATAKANA LETTER SMALL TO +30C8 ; [.42EE.0020.0011] # KATAKANA LETTER TO +FF84 ; [.42EE.0020.0012] # HALFWIDTH KATAKANA LETTER TO +32E3 ; [.42EE.0020.0013] # CIRCLED KATAKANA TO +3069 ; [.42EE.0020.000E][.0000.0037.0002] # HIRAGANA LETTER DO +30C9 ; [.42EE.0020.0011][.0000.0037.0002] # KATAKANA LETTER DO +3326 ; [.42EE.0020.001C][.0000.0037.001C][.4303.0020.001C] # SQUARE DORU +3327 ; [.42EE.0020.001C][.430A.0020.001C] # SQUARE TON +306A ; [.42EF.0020.000E] # HIRAGANA LETTER NA +30CA ; [.42EF.0020.0011] # KATAKANA LETTER NA +FF85 ; [.42EF.0020.0012] # HALFWIDTH KATAKANA LETTER NA +32E4 ; [.42EF.0020.0013] # CIRCLED KATAKANA NA +3328 ; [.42EF.0020.001C][.42F3.0020.001C] # SQUARE NANO +306B ; [.42F0.0020.000E] # HIRAGANA LETTER NI +30CB ; [.42F0.0020.0011] # KATAKANA LETTER NI +FF86 ; [.42F0.0020.0012] # HALFWIDTH KATAKANA LETTER NI +32E5 ; [.42F0.0020.0013] # CIRCLED KATAKANA NI +306C ; [.42F1.0020.000E] # HIRAGANA LETTER NU +31F4 ; [.42F1.0020.000F] # KATAKANA LETTER SMALL NU +30CC ; [.42F1.0020.0011] # KATAKANA LETTER NU +FF87 ; [.42F1.0020.0012] # HALFWIDTH KATAKANA LETTER NU +32E6 ; [.42F1.0020.0013] # CIRCLED KATAKANA NU +306D ; [.42F2.0020.000E] # HIRAGANA LETTER NE +30CD ; [.42F2.0020.0011] # KATAKANA LETTER NE +FF88 ; [.42F2.0020.0012] # HALFWIDTH KATAKANA LETTER NE +32E7 ; [.42F2.0020.0013] # CIRCLED KATAKANA NE +306E ; [.42F3.0020.000E] # HIRAGANA LETTER NO +30CE ; [.42F3.0020.0011] # KATAKANA LETTER NO +FF89 ; [.42F3.0020.0012] # HALFWIDTH KATAKANA LETTER NO +32E8 ; [.42F3.0020.0013] # CIRCLED KATAKANA NO +3329 ; [.42F3.0020.001C][.42EC.0020.001C][.42EE.0020.001C] # SQUARE NOTTO +306F ; [.42F4.0020.000E] # HIRAGANA LETTER HA +31F5 ; [.42F4.0020.000F] # KATAKANA LETTER SMALL HA +30CF ; [.42F4.0020.0011] # KATAKANA LETTER HA +FF8A ; [.42F4.0020.0012] # HALFWIDTH KATAKANA LETTER HA +32E9 ; [.42F4.0020.0013] # CIRCLED KATAKANA HA +3070 ; [.42F4.0020.000E][.0000.0037.0002] # HIRAGANA LETTER BA +30D0 ; [.42F4.0020.0011][.0000.0037.0002] # KATAKANA LETTER BA +3071 ; [.42F4.0020.000E][.0000.0038.0002] # HIRAGANA LETTER PA +30D1 ; [.42F4.0020.0011][.0000.0038.0002] # KATAKANA LETTER PA +332B ; [.42F4.0020.001C][.0000.0038.001C][.1F60.0020.001C][.42E8.0020.001C][.430A.0020.001C][.42EE.0020.001C] # SQUARE PAASENTO +332C ; [.42F4.0020.001C][.0000.0038.001C][.1F60.0020.001C][.42EC.0020.001C] # SQUARE PAATU +332D ; [.42F4.0020.001C][.0000.0037.001C][.1F60.0020.001C][.4304.0020.001C][.4303.0020.001C] # SQUARE BAARERU +332A ; [.42F4.0020.001C][.42DB.0020.001C][.42EC.0020.001C] # SQUARE HAITU +3072 ; [.42F5.0020.000E] # HIRAGANA LETTER HI +31F6 ; [.42F5.0020.000F] # KATAKANA LETTER SMALL HI +30D2 ; [.42F5.0020.0011] # KATAKANA LETTER HI +FF8B ; [.42F5.0020.0012] # HALFWIDTH KATAKANA LETTER HI +32EA ; [.42F5.0020.0013] # CIRCLED KATAKANA HI +3073 ; [.42F5.0020.000E][.0000.0037.0002] # HIRAGANA LETTER BI +30D3 ; [.42F5.0020.0011][.0000.0037.0002] # KATAKANA LETTER BI +3074 ; [.42F5.0020.000E][.0000.0038.0002] # HIRAGANA LETTER PI +30D4 ; [.42F5.0020.0011][.0000.0038.0002] # KATAKANA LETTER PI +332E ; [.42F5.0020.001C][.0000.0038.001C][.42DA.0020.001C][.42E7.0020.001C][.42EE.0020.001C][.4303.0020.001C] # SQUARE PIASUTORU +332F ; [.42F5.0020.001C][.0000.0038.001C][.42E2.0020.001C][.4303.0020.001C] # SQUARE PIKURU +3330 ; [.42F5.0020.001C][.0000.0038.001C][.42E4.0020.001C] # SQUARE PIKO +3331 ; [.42F5.0020.001C][.0000.0037.001C][.4303.0020.001C] # SQUARE BIRU +3075 ; [.42F6.0020.000E] # HIRAGANA LETTER HU +31F7 ; [.42F6.0020.000F] # KATAKANA LETTER SMALL HU +30D5 ; [.42F6.0020.0011] # KATAKANA LETTER HU +FF8C ; [.42F6.0020.0012] # HALFWIDTH KATAKANA LETTER HU +32EB ; [.42F6.0020.0013] # CIRCLED KATAKANA HU +3076 ; [.42F6.0020.000E][.0000.0037.0002] # HIRAGANA LETTER BU +30D6 ; [.42F6.0020.0011][.0000.0037.0002] # KATAKANA LETTER BU +3077 ; [.42F6.0020.000E][.0000.0038.0002] # HIRAGANA LETTER PU +30D7 ; [.42F6.0020.0011][.0000.0038.0002] # KATAKANA LETTER PU +3332 ; [.42F6.0020.001C][.42DA.0020.001C][.4301.0020.001C][.42EC.0020.001C][.42EE.0020.001C][.0000.0037.001C] # SQUARE HUARADDO +3333 ; [.42F6.0020.001C][.42DB.0020.001C][.1F60.0020.001C][.42EE.0020.001C] # SQUARE HUIITO +3334 ; [.42F6.0020.001C][.0000.0037.001C][.42EC.0020.001C][.42E6.0020.001C][.42DE.0020.001C][.4303.0020.001C] # SQUARE BUSSYERU +3335 ; [.42F6.0020.001C][.4301.0020.001C][.430A.0020.001C] # SQUARE HURAN +3078 ; [.42F7.0020.000E] # HIRAGANA LETTER HE +31F8 ; [.42F7.0020.000F] # KATAKANA LETTER SMALL HE +30D8 ; [.42F7.0020.0011] # KATAKANA LETTER HE +FF8D ; [.42F7.0020.0012] # HALFWIDTH KATAKANA LETTER HE +32EC ; [.42F7.0020.0013] # CIRCLED KATAKANA HE +3079 ; [.42F7.0020.000E][.0000.0037.0002] # HIRAGANA LETTER BE +30D9 ; [.42F7.0020.0011][.0000.0037.0002] # KATAKANA LETTER BE +307A ; [.42F7.0020.000E][.0000.0038.0002] # HIRAGANA LETTER PE +30DA ; [.42F7.0020.0011][.0000.0038.0002] # KATAKANA LETTER PE +333B ; [.42F7.0020.001C][.0000.0038.001C][.1F60.0020.001C][.42E6.0020.001C][.0000.0037.001C] # SQUARE PEEZI +333C ; [.42F7.0020.001C][.0000.0037.001C][.1F60.0020.001C][.42EA.0020.001C] # SQUARE BEETA +3336 ; [.42F7.0020.001C][.42E2.0020.001C][.42EA.0020.001C][.1F60.0020.001C][.4303.0020.001C] # SQUARE HEKUTAARU +3337 ; [.42F7.0020.001C][.0000.0038.001C][.42E9.0020.001C] # SQUARE PESO +3338 ; [.42F7.0020.001C][.0000.0038.001C][.42F0.0020.001C][.42F5.0020.001C] # SQUARE PENIHI +3339 ; [.42F7.0020.001C][.4303.0020.001C][.42EC.0020.001C] # SQUARE HERUTU +333A ; [.42F7.0020.001C][.0000.0038.001C][.430A.0020.001C][.42E7.0020.001C] # SQUARE PENSU +307B ; [.42F8.0020.000E] # HIRAGANA LETTER HO +31F9 ; [.42F8.0020.000F] # KATAKANA LETTER SMALL HO +30DB ; [.42F8.0020.0011] # KATAKANA LETTER HO +FF8E ; [.42F8.0020.0012] # HALFWIDTH KATAKANA LETTER HO +32ED ; [.42F8.0020.0013] # CIRCLED KATAKANA HO +307C ; [.42F8.0020.000E][.0000.0037.0002] # HIRAGANA LETTER BO +30DC ; [.42F8.0020.0011][.0000.0037.0002] # KATAKANA LETTER BO +307D ; [.42F8.0020.000E][.0000.0038.0002] # HIRAGANA LETTER PO +30DD ; [.42F8.0020.0011][.0000.0038.0002] # KATAKANA LETTER PO +3341 ; [.42F8.0020.001C][.1F60.0020.001C][.4303.0020.001C] # SQUARE HOORU +3342 ; [.42F8.0020.001C][.1F60.0020.001C][.430A.0020.001C] # SQUARE HOON +333D ; [.42F8.0020.001C][.0000.0038.001C][.42DB.0020.001C][.430A.0020.001C][.42EE.0020.001C] # SQUARE POINTO +1F200 ; [.42F8.0020.001C][.42E0.0020.001C] # SQUARE HIRAGANA HOKA +333E ; [.42F8.0020.001C][.0000.0037.001C][.4303.0020.001C][.42EE.0020.001C] # SQUARE BORUTO +333F ; [.42F8.0020.001C][.430A.0020.001C] # SQUARE HON +3340 ; [.42F8.0020.001C][.0000.0038.001C][.430A.0020.001C][.42EE.0020.001C][.0000.0037.001C] # SQUARE PONDO +307E ; [.42F9.0020.000E] # HIRAGANA LETTER MA +30DE ; [.42F9.0020.0011] # KATAKANA LETTER MA +FF8F ; [.42F9.0020.0012] # HALFWIDTH KATAKANA LETTER MA +32EE ; [.42F9.0020.0013] # CIRCLED KATAKANA MA +3343 ; [.42F9.0020.001C][.42DB.0020.001C][.42E2.0020.001C][.4305.0020.001C] # SQUARE MAIKURO +3344 ; [.42F9.0020.001C][.42DB.0020.001C][.4303.0020.001C] # SQUARE MAIRU +303C ; [.42F9.0020.0004][.42E7.0020.0004] # MASU MARK +3345 ; [.42F9.0020.001C][.42EC.0020.001C][.42F4.0020.001C] # SQUARE MAHHA +3346 ; [.42F9.0020.001C][.4303.0020.001C][.42E2.0020.001C] # SQUARE MARUKU +3347 ; [.42F9.0020.001C][.430A.0020.001C][.42E6.0020.001C][.4300.0020.001C][.430A.0020.001C] # SQUARE MANSYON +307F ; [.42FA.0020.000E] # HIRAGANA LETTER MI +30DF ; [.42FA.0020.0011] # KATAKANA LETTER MI +FF90 ; [.42FA.0020.0012] # HALFWIDTH KATAKANA LETTER MI +32EF ; [.42FA.0020.0013] # CIRCLED KATAKANA MI +3348 ; [.42FA.0020.001C][.42E2.0020.001C][.4305.0020.001C][.430A.0020.001C] # SQUARE MIKURON +3349 ; [.42FA.0020.001C][.4302.0020.001C] # SQUARE MIRI +334A ; [.42FA.0020.001C][.4302.0020.001C][.42F4.0020.001C][.0000.0037.001C][.1F60.0020.001C][.4303.0020.001C] # SQUARE MIRIBAARU +3080 ; [.42FB.0020.000E] # HIRAGANA LETTER MU +31FA ; [.42FB.0020.000F] # KATAKANA LETTER SMALL MU +30E0 ; [.42FB.0020.0011] # KATAKANA LETTER MU +FF91 ; [.42FB.0020.0012] # HALFWIDTH KATAKANA LETTER MU +32F0 ; [.42FB.0020.0013] # CIRCLED KATAKANA MU +3081 ; [.42FC.0020.000E] # HIRAGANA LETTER ME +30E1 ; [.42FC.0020.0011] # KATAKANA LETTER ME +FF92 ; [.42FC.0020.0012] # HALFWIDTH KATAKANA LETTER ME +32F1 ; [.42FC.0020.0013] # CIRCLED KATAKANA ME +334D ; [.42FC.0020.001C][.1F60.0020.001C][.42EE.0020.001C][.4303.0020.001C] # SQUARE MEETORU +334B ; [.42FC.0020.001C][.42E0.0020.001C][.0000.0037.001C] # SQUARE MEGA +334C ; [.42FC.0020.001C][.42E0.0020.001C][.0000.0037.001C][.42EE.0020.001C][.430A.0020.001C] # SQUARE MEGATON +3082 ; [.42FD.0020.000E] # HIRAGANA LETTER MO +30E2 ; [.42FD.0020.0011] # KATAKANA LETTER MO +FF93 ; [.42FD.0020.0012] # HALFWIDTH KATAKANA LETTER MO +32F2 ; [.42FD.0020.0013] # CIRCLED KATAKANA MO +3083 ; [.42FE.0020.000D] # HIRAGANA LETTER SMALL YA +3084 ; [.42FE.0020.000E] # HIRAGANA LETTER YA +30E3 ; [.42FE.0020.000F] # KATAKANA LETTER SMALL YA +FF6C ; [.42FE.0020.0010] # HALFWIDTH KATAKANA LETTER SMALL YA +30E4 ; [.42FE.0020.0011] # KATAKANA LETTER YA +FF94 ; [.42FE.0020.0012] # HALFWIDTH KATAKANA LETTER YA +32F3 ; [.42FE.0020.0013] # CIRCLED KATAKANA YA +334E ; [.42FE.0020.001C][.1F60.0020.001C][.42EE.0020.001C][.0000.0037.001C] # SQUARE YAADO +334F ; [.42FE.0020.001C][.1F60.0020.001C][.4303.0020.001C] # SQUARE YAARU +3085 ; [.42FF.0020.000D] # HIRAGANA LETTER SMALL YU +3086 ; [.42FF.0020.000E] # HIRAGANA LETTER YU +30E5 ; [.42FF.0020.000F] # KATAKANA LETTER SMALL YU +FF6D ; [.42FF.0020.0010] # HALFWIDTH KATAKANA LETTER SMALL YU +30E6 ; [.42FF.0020.0011] # KATAKANA LETTER YU +FF95 ; [.42FF.0020.0012] # HALFWIDTH KATAKANA LETTER YU +32F4 ; [.42FF.0020.0013] # CIRCLED KATAKANA YU +3350 ; [.42FF.0020.001C][.42DA.0020.001C][.430A.0020.001C] # SQUARE YUAN +3087 ; [.4300.0020.000D] # HIRAGANA LETTER SMALL YO +3088 ; [.4300.0020.000E] # HIRAGANA LETTER YO +30E7 ; [.4300.0020.000F] # KATAKANA LETTER SMALL YO +FF6E ; [.4300.0020.0010] # HALFWIDTH KATAKANA LETTER SMALL YO +30E8 ; [.4300.0020.0011] # KATAKANA LETTER YO +FF96 ; [.4300.0020.0012] # HALFWIDTH KATAKANA LETTER YO +32F5 ; [.4300.0020.0013] # CIRCLED KATAKANA YO +309F ; [.4300.0020.0016][.4302.0020.0016] # HIRAGANA DIGRAPH YORI +3089 ; [.4301.0020.000E] # HIRAGANA LETTER RA +31FB ; [.4301.0020.000F] # KATAKANA LETTER SMALL RA +30E9 ; [.4301.0020.0011] # KATAKANA LETTER RA +FF97 ; [.4301.0020.0012] # HALFWIDTH KATAKANA LETTER RA +32F6 ; [.4301.0020.0013] # CIRCLED KATAKANA RA +308A ; [.4302.0020.000E] # HIRAGANA LETTER RI +31FC ; [.4302.0020.000F] # KATAKANA LETTER SMALL RI +30EA ; [.4302.0020.0011] # KATAKANA LETTER RI +FF98 ; [.4302.0020.0012] # HALFWIDTH KATAKANA LETTER RI +32F7 ; [.4302.0020.0013] # CIRCLED KATAKANA RI +3351 ; [.4302.0020.001C][.42EC.0020.001C][.42EE.0020.001C][.4303.0020.001C] # SQUARE RITTORU +3352 ; [.4302.0020.001C][.4301.0020.001C] # SQUARE RIRA +308B ; [.4303.0020.000E] # HIRAGANA LETTER RU +31FD ; [.4303.0020.000F] # KATAKANA LETTER SMALL RU +30EB ; [.4303.0020.0011] # KATAKANA LETTER RU +FF99 ; [.4303.0020.0012] # HALFWIDTH KATAKANA LETTER RU +32F8 ; [.4303.0020.0013] # CIRCLED KATAKANA RU +3354 ; [.4303.0020.001C][.1F60.0020.001C][.42F6.0020.001C][.0000.0037.001C][.4303.0020.001C] # SQUARE RUUBURU +3353 ; [.4303.0020.001C][.42F5.0020.001C][.0000.0038.001C][.1F60.0020.001C] # SQUARE RUPII +308C ; [.4304.0020.000E] # HIRAGANA LETTER RE +31FE ; [.4304.0020.000F] # KATAKANA LETTER SMALL RE +30EC ; [.4304.0020.0011] # KATAKANA LETTER RE +FF9A ; [.4304.0020.0012] # HALFWIDTH KATAKANA LETTER RE +32F9 ; [.4304.0020.0013] # CIRCLED KATAKANA RE +3355 ; [.4304.0020.001C][.42FB.0020.001C] # SQUARE REMU +3356 ; [.4304.0020.001C][.430A.0020.001C][.42EE.0020.001C][.42E3.0020.001C][.0000.0037.001C][.430A.0020.001C] # SQUARE RENTOGEN +308D ; [.4305.0020.000E] # HIRAGANA LETTER RO +31FF ; [.4305.0020.000F] # KATAKANA LETTER SMALL RO +30ED ; [.4305.0020.0011] # KATAKANA LETTER RO +FF9B ; [.4305.0020.0012] # HALFWIDTH KATAKANA LETTER RO +32FA ; [.4305.0020.0013] # CIRCLED KATAKANA RO +308E ; [.4306.0020.000D] # HIRAGANA LETTER SMALL WA +308F ; [.4306.0020.000E] # HIRAGANA LETTER WA +30EE ; [.4306.0020.000F] # KATAKANA LETTER SMALL WA +30EF ; [.4306.0020.0011] # KATAKANA LETTER WA +FF9C ; [.4306.0020.0012] # HALFWIDTH KATAKANA LETTER WA +32FB ; [.4306.0020.0013] # CIRCLED KATAKANA WA +30F7 ; [.4306.0020.0011][.0000.0037.0002] # KATAKANA LETTER VA +3357 ; [.4306.0020.001C][.42EC.0020.001C][.42EE.0020.001C] # SQUARE WATTO +1B150 ; [.4307.0020.000D] # HIRAGANA LETTER SMALL WI +3090 ; [.4307.0020.000E] # HIRAGANA LETTER WI +1B164 ; [.4307.0020.000F] # KATAKANA LETTER SMALL WI +30F0 ; [.4307.0020.0011] # KATAKANA LETTER WI +32FC ; [.4307.0020.0013] # CIRCLED KATAKANA WI +30F8 ; [.4307.0020.0011][.0000.0037.0002] # KATAKANA LETTER VI +1B151 ; [.4308.0020.000D] # HIRAGANA LETTER SMALL WE +3091 ; [.4308.0020.000E] # HIRAGANA LETTER WE +1B165 ; [.4308.0020.000F] # KATAKANA LETTER SMALL WE +30F1 ; [.4308.0020.0011] # KATAKANA LETTER WE +32FD ; [.4308.0020.0013] # CIRCLED KATAKANA WE +30F9 ; [.4308.0020.0011][.0000.0037.0002] # KATAKANA LETTER VE +1B152 ; [.4309.0020.000D] # HIRAGANA LETTER SMALL WO +3092 ; [.4309.0020.000E] # HIRAGANA LETTER WO +1B166 ; [.4309.0020.000F] # KATAKANA LETTER SMALL WO +30F2 ; [.4309.0020.0011] # KATAKANA LETTER WO +FF66 ; [.4309.0020.0012] # HALFWIDTH KATAKANA LETTER WO +32FE ; [.4309.0020.0013] # CIRCLED KATAKANA WO +30FA ; [.4309.0020.0011][.0000.0037.0002] # KATAKANA LETTER VO +3093 ; [.430A.0020.000E] # HIRAGANA LETTER N +1B167 ; [.430A.0020.000F] # KATAKANA LETTER SMALL N +30F3 ; [.430A.0020.0011] # KATAKANA LETTER N +FF9D ; [.430A.0020.0012] # HALFWIDTH KATAKANA LETTER N +1B002 ; [.430B.0020.0002] # HENTAIGANA LETTER A-1 +1B003 ; [.430C.0020.0002] # HENTAIGANA LETTER A-2 +1B004 ; [.430D.0020.0002] # HENTAIGANA LETTER A-3 +1B005 ; [.430E.0020.0002] # HENTAIGANA LETTER A-WO +1B006 ; [.430F.0020.0002] # HENTAIGANA LETTER I-1 +1B007 ; [.4310.0020.0002] # HENTAIGANA LETTER I-2 +1B008 ; [.4311.0020.0002] # HENTAIGANA LETTER I-3 +1B009 ; [.4312.0020.0002] # HENTAIGANA LETTER I-4 +1B00A ; [.4313.0020.0002] # HENTAIGANA LETTER U-1 +1B00B ; [.4314.0020.0002] # HENTAIGANA LETTER U-2 +1B00C ; [.4315.0020.0002] # HENTAIGANA LETTER U-3 +1B00D ; [.4316.0020.0002] # HENTAIGANA LETTER U-4 +1B00E ; [.4317.0020.0002] # HENTAIGANA LETTER U-5 +1B001 ; [.4318.0020.0002] # HIRAGANA LETTER ARCHAIC YE +1B00F ; [.4319.0020.0002] # HENTAIGANA LETTER E-2 +1B010 ; [.431A.0020.0002] # HENTAIGANA LETTER E-3 +1B011 ; [.431B.0020.0002] # HENTAIGANA LETTER E-4 +1B012 ; [.431C.0020.0002] # HENTAIGANA LETTER E-5 +1B013 ; [.431D.0020.0002] # HENTAIGANA LETTER E-6 +1B014 ; [.431E.0020.0002] # HENTAIGANA LETTER O-1 +1B015 ; [.431F.0020.0002] # HENTAIGANA LETTER O-2 +1B016 ; [.4320.0020.0002] # HENTAIGANA LETTER O-3 +1B017 ; [.4321.0020.0002] # HENTAIGANA LETTER KA-1 +1B018 ; [.4322.0020.0002] # HENTAIGANA LETTER KA-2 +1B019 ; [.4323.0020.0002] # HENTAIGANA LETTER KA-3 +1B01A ; [.4324.0020.0002] # HENTAIGANA LETTER KA-4 +1B01B ; [.4325.0020.0002] # HENTAIGANA LETTER KA-5 +1B01C ; [.4326.0020.0002] # HENTAIGANA LETTER KA-6 +1B01D ; [.4327.0020.0002] # HENTAIGANA LETTER KA-7 +1B01E ; [.4328.0020.0002] # HENTAIGANA LETTER KA-8 +1B01F ; [.4329.0020.0002] # HENTAIGANA LETTER KA-9 +1B020 ; [.432A.0020.0002] # HENTAIGANA LETTER KA-10 +1B021 ; [.432B.0020.0002] # HENTAIGANA LETTER KA-11 +1B022 ; [.432C.0020.0002] # HENTAIGANA LETTER KA-KE +1B023 ; [.432D.0020.0002] # HENTAIGANA LETTER KI-1 +1B024 ; [.432E.0020.0002] # HENTAIGANA LETTER KI-2 +1B025 ; [.432F.0020.0002] # HENTAIGANA LETTER KI-3 +1B026 ; [.4330.0020.0002] # HENTAIGANA LETTER KI-4 +1B027 ; [.4331.0020.0002] # HENTAIGANA LETTER KI-5 +1B028 ; [.4332.0020.0002] # HENTAIGANA LETTER KI-6 +1B029 ; [.4333.0020.0002] # HENTAIGANA LETTER KI-7 +1B02A ; [.4334.0020.0002] # HENTAIGANA LETTER KI-8 +1B02B ; [.4335.0020.0002] # HENTAIGANA LETTER KU-1 +1B02C ; [.4336.0020.0002] # HENTAIGANA LETTER KU-2 +1B02D ; [.4337.0020.0002] # HENTAIGANA LETTER KU-3 +1B02E ; [.4338.0020.0002] # HENTAIGANA LETTER KU-4 +1B02F ; [.4339.0020.0002] # HENTAIGANA LETTER KU-5 +1B030 ; [.433A.0020.0002] # HENTAIGANA LETTER KU-6 +1B031 ; [.433B.0020.0002] # HENTAIGANA LETTER KU-7 +1B032 ; [.433C.0020.0002] # HENTAIGANA LETTER KE-1 +1B033 ; [.433D.0020.0002] # HENTAIGANA LETTER KE-2 +1B034 ; [.433E.0020.0002] # HENTAIGANA LETTER KE-3 +1B035 ; [.433F.0020.0002] # HENTAIGANA LETTER KE-4 +1B036 ; [.4340.0020.0002] # HENTAIGANA LETTER KE-5 +1B037 ; [.4341.0020.0002] # HENTAIGANA LETTER KE-6 +1B038 ; [.4342.0020.0002] # HENTAIGANA LETTER KO-1 +1B039 ; [.4343.0020.0002] # HENTAIGANA LETTER KO-2 +1B03A ; [.4344.0020.0002] # HENTAIGANA LETTER KO-3 +1B03B ; [.4345.0020.0002] # HENTAIGANA LETTER KO-KI +1B03C ; [.4346.0020.0002] # HENTAIGANA LETTER SA-1 +1B03D ; [.4347.0020.0002] # HENTAIGANA LETTER SA-2 +1B03E ; [.4348.0020.0002] # HENTAIGANA LETTER SA-3 +1B03F ; [.4349.0020.0002] # HENTAIGANA LETTER SA-4 +1B040 ; [.434A.0020.0002] # HENTAIGANA LETTER SA-5 +1B041 ; [.434B.0020.0002] # HENTAIGANA LETTER SA-6 +1B042 ; [.434C.0020.0002] # HENTAIGANA LETTER SA-7 +1B043 ; [.434D.0020.0002] # HENTAIGANA LETTER SA-8 +1B044 ; [.434E.0020.0002] # HENTAIGANA LETTER SI-1 +1B045 ; [.434F.0020.0002] # HENTAIGANA LETTER SI-2 +1B046 ; [.4350.0020.0002] # HENTAIGANA LETTER SI-3 +1B047 ; [.4351.0020.0002] # HENTAIGANA LETTER SI-4 +1B048 ; [.4352.0020.0002] # HENTAIGANA LETTER SI-5 +1B049 ; [.4353.0020.0002] # HENTAIGANA LETTER SI-6 +1B04A ; [.4354.0020.0002] # HENTAIGANA LETTER SU-1 +1B04B ; [.4355.0020.0002] # HENTAIGANA LETTER SU-2 +1B04C ; [.4356.0020.0002] # HENTAIGANA LETTER SU-3 +1B04D ; [.4357.0020.0002] # HENTAIGANA LETTER SU-4 +1B04E ; [.4358.0020.0002] # HENTAIGANA LETTER SU-5 +1B04F ; [.4359.0020.0002] # HENTAIGANA LETTER SU-6 +1B050 ; [.435A.0020.0002] # HENTAIGANA LETTER SU-7 +1B051 ; [.435B.0020.0002] # HENTAIGANA LETTER SU-8 +1B052 ; [.435C.0020.0002] # HENTAIGANA LETTER SE-1 +1B053 ; [.435D.0020.0002] # HENTAIGANA LETTER SE-2 +1B054 ; [.435E.0020.0002] # HENTAIGANA LETTER SE-3 +1B055 ; [.435F.0020.0002] # HENTAIGANA LETTER SE-4 +1B056 ; [.4360.0020.0002] # HENTAIGANA LETTER SE-5 +1B057 ; [.4361.0020.0002] # HENTAIGANA LETTER SO-1 +1B058 ; [.4362.0020.0002] # HENTAIGANA LETTER SO-2 +1B059 ; [.4363.0020.0002] # HENTAIGANA LETTER SO-3 +1B05A ; [.4364.0020.0002] # HENTAIGANA LETTER SO-4 +1B05B ; [.4365.0020.0002] # HENTAIGANA LETTER SO-5 +1B05C ; [.4366.0020.0002] # HENTAIGANA LETTER SO-6 +1B05D ; [.4367.0020.0002] # HENTAIGANA LETTER SO-7 +1B05E ; [.4368.0020.0002] # HENTAIGANA LETTER TA-1 +1B05F ; [.4369.0020.0002] # HENTAIGANA LETTER TA-2 +1B060 ; [.436A.0020.0002] # HENTAIGANA LETTER TA-3 +1B061 ; [.436B.0020.0002] # HENTAIGANA LETTER TA-4 +1B062 ; [.436C.0020.0002] # HENTAIGANA LETTER TI-1 +1B063 ; [.436D.0020.0002] # HENTAIGANA LETTER TI-2 +1B064 ; [.436E.0020.0002] # HENTAIGANA LETTER TI-3 +1B065 ; [.436F.0020.0002] # HENTAIGANA LETTER TI-4 +1B066 ; [.4370.0020.0002] # HENTAIGANA LETTER TI-5 +1B067 ; [.4371.0020.0002] # HENTAIGANA LETTER TI-6 +1B068 ; [.4372.0020.0002] # HENTAIGANA LETTER TI-7 +1B069 ; [.4373.0020.0002] # HENTAIGANA LETTER TU-1 +1B06A ; [.4374.0020.0002] # HENTAIGANA LETTER TU-2 +1B06B ; [.4375.0020.0002] # HENTAIGANA LETTER TU-3 +1B06C ; [.4376.0020.0002] # HENTAIGANA LETTER TU-4 +1B06D ; [.4377.0020.0002] # HENTAIGANA LETTER TU-TO +1B06E ; [.4378.0020.0002] # HENTAIGANA LETTER TE-1 +1B06F ; [.4379.0020.0002] # HENTAIGANA LETTER TE-2 +1B070 ; [.437A.0020.0002] # HENTAIGANA LETTER TE-3 +1B071 ; [.437B.0020.0002] # HENTAIGANA LETTER TE-4 +1B072 ; [.437C.0020.0002] # HENTAIGANA LETTER TE-5 +1B073 ; [.437D.0020.0002] # HENTAIGANA LETTER TE-6 +1B074 ; [.437E.0020.0002] # HENTAIGANA LETTER TE-7 +1B075 ; [.437F.0020.0002] # HENTAIGANA LETTER TE-8 +1B076 ; [.4380.0020.0002] # HENTAIGANA LETTER TE-9 +1B077 ; [.4381.0020.0002] # HENTAIGANA LETTER TO-1 +1B078 ; [.4382.0020.0002] # HENTAIGANA LETTER TO-2 +1B079 ; [.4383.0020.0002] # HENTAIGANA LETTER TO-3 +1B07A ; [.4384.0020.0002] # HENTAIGANA LETTER TO-4 +1B07B ; [.4385.0020.0002] # HENTAIGANA LETTER TO-5 +1B07C ; [.4386.0020.0002] # HENTAIGANA LETTER TO-6 +1B07D ; [.4387.0020.0002] # HENTAIGANA LETTER TO-RA +1B07E ; [.4388.0020.0002] # HENTAIGANA LETTER NA-1 +1B07F ; [.4389.0020.0002] # HENTAIGANA LETTER NA-2 +1B080 ; [.438A.0020.0002] # HENTAIGANA LETTER NA-3 +1B081 ; [.438B.0020.0002] # HENTAIGANA LETTER NA-4 +1B082 ; [.438C.0020.0002] # HENTAIGANA LETTER NA-5 +1B083 ; [.438D.0020.0002] # HENTAIGANA LETTER NA-6 +1B084 ; [.438E.0020.0002] # HENTAIGANA LETTER NA-7 +1B085 ; [.438F.0020.0002] # HENTAIGANA LETTER NA-8 +1B086 ; [.4390.0020.0002] # HENTAIGANA LETTER NA-9 +1B087 ; [.4391.0020.0002] # HENTAIGANA LETTER NI-1 +1B088 ; [.4392.0020.0002] # HENTAIGANA LETTER NI-2 +1B089 ; [.4393.0020.0002] # HENTAIGANA LETTER NI-3 +1B08A ; [.4394.0020.0002] # HENTAIGANA LETTER NI-4 +1B08B ; [.4395.0020.0002] # HENTAIGANA LETTER NI-5 +1B08C ; [.4396.0020.0002] # HENTAIGANA LETTER NI-6 +1B08D ; [.4397.0020.0002] # HENTAIGANA LETTER NI-7 +1B08E ; [.4398.0020.0002] # HENTAIGANA LETTER NI-TE +1B08F ; [.4399.0020.0002] # HENTAIGANA LETTER NU-1 +1B090 ; [.439A.0020.0002] # HENTAIGANA LETTER NU-2 +1B091 ; [.439B.0020.0002] # HENTAIGANA LETTER NU-3 +1B092 ; [.439C.0020.0002] # HENTAIGANA LETTER NE-1 +1B093 ; [.439D.0020.0002] # HENTAIGANA LETTER NE-2 +1B094 ; [.439E.0020.0002] # HENTAIGANA LETTER NE-3 +1B095 ; [.439F.0020.0002] # HENTAIGANA LETTER NE-4 +1B096 ; [.43A0.0020.0002] # HENTAIGANA LETTER NE-5 +1B097 ; [.43A1.0020.0002] # HENTAIGANA LETTER NE-6 +1B098 ; [.43A2.0020.0002] # HENTAIGANA LETTER NE-KO +1B099 ; [.43A3.0020.0002] # HENTAIGANA LETTER NO-1 +1B09A ; [.43A4.0020.0002] # HENTAIGANA LETTER NO-2 +1B09B ; [.43A5.0020.0002] # HENTAIGANA LETTER NO-3 +1B09C ; [.43A6.0020.0002] # HENTAIGANA LETTER NO-4 +1B09D ; [.43A7.0020.0002] # HENTAIGANA LETTER NO-5 +1B09E ; [.43A8.0020.0002] # HENTAIGANA LETTER HA-1 +1B09F ; [.43A9.0020.0002] # HENTAIGANA LETTER HA-2 +1B0A0 ; [.43AA.0020.0002] # HENTAIGANA LETTER HA-3 +1B0A1 ; [.43AB.0020.0002] # HENTAIGANA LETTER HA-4 +1B0A2 ; [.43AC.0020.0002] # HENTAIGANA LETTER HA-5 +1B0A3 ; [.43AD.0020.0002] # HENTAIGANA LETTER HA-6 +1B0A4 ; [.43AE.0020.0002] # HENTAIGANA LETTER HA-7 +1B0A5 ; [.43AF.0020.0002] # HENTAIGANA LETTER HA-8 +1B0A6 ; [.43B0.0020.0002] # HENTAIGANA LETTER HA-9 +1B0A7 ; [.43B1.0020.0002] # HENTAIGANA LETTER HA-10 +1B0A8 ; [.43B2.0020.0002] # HENTAIGANA LETTER HA-11 +1B0A9 ; [.43B3.0020.0002] # HENTAIGANA LETTER HI-1 +1B0AA ; [.43B4.0020.0002] # HENTAIGANA LETTER HI-2 +1B0AB ; [.43B5.0020.0002] # HENTAIGANA LETTER HI-3 +1B0AC ; [.43B6.0020.0002] # HENTAIGANA LETTER HI-4 +1B0AD ; [.43B7.0020.0002] # HENTAIGANA LETTER HI-5 +1B0AE ; [.43B8.0020.0002] # HENTAIGANA LETTER HI-6 +1B0AF ; [.43B9.0020.0002] # HENTAIGANA LETTER HI-7 +1B0B0 ; [.43BA.0020.0002] # HENTAIGANA LETTER HU-1 +1B0B1 ; [.43BB.0020.0002] # HENTAIGANA LETTER HU-2 +1B0B2 ; [.43BC.0020.0002] # HENTAIGANA LETTER HU-3 +1B0B3 ; [.43BD.0020.0002] # HENTAIGANA LETTER HE-1 +1B0B4 ; [.43BE.0020.0002] # HENTAIGANA LETTER HE-2 +1B0B5 ; [.43BF.0020.0002] # HENTAIGANA LETTER HE-3 +1B0B6 ; [.43C0.0020.0002] # HENTAIGANA LETTER HE-4 +1B0B7 ; [.43C1.0020.0002] # HENTAIGANA LETTER HE-5 +1B0B8 ; [.43C2.0020.0002] # HENTAIGANA LETTER HE-6 +1B0B9 ; [.43C3.0020.0002] # HENTAIGANA LETTER HE-7 +1B0BA ; [.43C4.0020.0002] # HENTAIGANA LETTER HO-1 +1B0BB ; [.43C5.0020.0002] # HENTAIGANA LETTER HO-2 +1B0BC ; [.43C6.0020.0002] # HENTAIGANA LETTER HO-3 +1B0BD ; [.43C7.0020.0002] # HENTAIGANA LETTER HO-4 +1B0BE ; [.43C8.0020.0002] # HENTAIGANA LETTER HO-5 +1B0BF ; [.43C9.0020.0002] # HENTAIGANA LETTER HO-6 +1B0C0 ; [.43CA.0020.0002] # HENTAIGANA LETTER HO-7 +1B0C1 ; [.43CB.0020.0002] # HENTAIGANA LETTER HO-8 +1B0C2 ; [.43CC.0020.0002] # HENTAIGANA LETTER MA-1 +1B0C3 ; [.43CD.0020.0002] # HENTAIGANA LETTER MA-2 +1B0C4 ; [.43CE.0020.0002] # HENTAIGANA LETTER MA-3 +1B0C5 ; [.43CF.0020.0002] # HENTAIGANA LETTER MA-4 +1B0C6 ; [.43D0.0020.0002] # HENTAIGANA LETTER MA-5 +1B0C7 ; [.43D1.0020.0002] # HENTAIGANA LETTER MA-6 +1B0C8 ; [.43D2.0020.0002] # HENTAIGANA LETTER MA-7 +1B0C9 ; [.43D3.0020.0002] # HENTAIGANA LETTER MI-1 +1B0CA ; [.43D4.0020.0002] # HENTAIGANA LETTER MI-2 +1B0CB ; [.43D5.0020.0002] # HENTAIGANA LETTER MI-3 +1B0CC ; [.43D6.0020.0002] # HENTAIGANA LETTER MI-4 +1B0CD ; [.43D7.0020.0002] # HENTAIGANA LETTER MI-5 +1B0CE ; [.43D8.0020.0002] # HENTAIGANA LETTER MI-6 +1B0CF ; [.43D9.0020.0002] # HENTAIGANA LETTER MI-7 +1B0D0 ; [.43DA.0020.0002] # HENTAIGANA LETTER MU-1 +1B0D1 ; [.43DB.0020.0002] # HENTAIGANA LETTER MU-2 +1B0D2 ; [.43DC.0020.0002] # HENTAIGANA LETTER MU-3 +1B0D3 ; [.43DD.0020.0002] # HENTAIGANA LETTER MU-4 +1B0D4 ; [.43DE.0020.0002] # HENTAIGANA LETTER ME-1 +1B0D5 ; [.43DF.0020.0002] # HENTAIGANA LETTER ME-2 +1B0D6 ; [.43E0.0020.0002] # HENTAIGANA LETTER ME-MA +1B0D7 ; [.43E1.0020.0002] # HENTAIGANA LETTER MO-1 +1B0D8 ; [.43E2.0020.0002] # HENTAIGANA LETTER MO-2 +1B0D9 ; [.43E3.0020.0002] # HENTAIGANA LETTER MO-3 +1B0DA ; [.43E4.0020.0002] # HENTAIGANA LETTER MO-4 +1B0DB ; [.43E5.0020.0002] # HENTAIGANA LETTER MO-5 +1B0DC ; [.43E6.0020.0002] # HENTAIGANA LETTER MO-6 +1B0DD ; [.43E7.0020.0002] # HENTAIGANA LETTER YA-1 +1B0DE ; [.43E8.0020.0002] # HENTAIGANA LETTER YA-2 +1B0DF ; [.43E9.0020.0002] # HENTAIGANA LETTER YA-3 +1B0E0 ; [.43EA.0020.0002] # HENTAIGANA LETTER YA-4 +1B0E1 ; [.43EB.0020.0002] # HENTAIGANA LETTER YA-5 +1B0E2 ; [.43EC.0020.0002] # HENTAIGANA LETTER YA-YO +1B0E3 ; [.43ED.0020.0002] # HENTAIGANA LETTER YU-1 +1B0E4 ; [.43EE.0020.0002] # HENTAIGANA LETTER YU-2 +1B0E5 ; [.43EF.0020.0002] # HENTAIGANA LETTER YU-3 +1B0E6 ; [.43F0.0020.0002] # HENTAIGANA LETTER YU-4 +1B0E7 ; [.43F1.0020.0002] # HENTAIGANA LETTER YO-1 +1B0E8 ; [.43F2.0020.0002] # HENTAIGANA LETTER YO-2 +1B0E9 ; [.43F3.0020.0002] # HENTAIGANA LETTER YO-3 +1B0EA ; [.43F4.0020.0002] # HENTAIGANA LETTER YO-4 +1B0EB ; [.43F5.0020.0002] # HENTAIGANA LETTER YO-5 +1B0EC ; [.43F6.0020.0002] # HENTAIGANA LETTER YO-6 +1B0ED ; [.43F7.0020.0002] # HENTAIGANA LETTER RA-1 +1B0EE ; [.43F8.0020.0002] # HENTAIGANA LETTER RA-2 +1B0EF ; [.43F9.0020.0002] # HENTAIGANA LETTER RA-3 +1B0F0 ; [.43FA.0020.0002] # HENTAIGANA LETTER RA-4 +1B0F1 ; [.43FB.0020.0002] # HENTAIGANA LETTER RI-1 +1B0F2 ; [.43FC.0020.0002] # HENTAIGANA LETTER RI-2 +1B0F3 ; [.43FD.0020.0002] # HENTAIGANA LETTER RI-3 +1B0F4 ; [.43FE.0020.0002] # HENTAIGANA LETTER RI-4 +1B0F5 ; [.43FF.0020.0002] # HENTAIGANA LETTER RI-5 +1B0F6 ; [.4400.0020.0002] # HENTAIGANA LETTER RI-6 +1B0F7 ; [.4401.0020.0002] # HENTAIGANA LETTER RI-7 +1B0F8 ; [.4402.0020.0002] # HENTAIGANA LETTER RU-1 +1B0F9 ; [.4403.0020.0002] # HENTAIGANA LETTER RU-2 +1B0FA ; [.4404.0020.0002] # HENTAIGANA LETTER RU-3 +1B0FB ; [.4405.0020.0002] # HENTAIGANA LETTER RU-4 +1B0FC ; [.4406.0020.0002] # HENTAIGANA LETTER RU-5 +1B0FD ; [.4407.0020.0002] # HENTAIGANA LETTER RU-6 +1B0FE ; [.4408.0020.0002] # HENTAIGANA LETTER RE-1 +1B0FF ; [.4409.0020.0002] # HENTAIGANA LETTER RE-2 +1B100 ; [.440A.0020.0002] # HENTAIGANA LETTER RE-3 +1B101 ; [.440B.0020.0002] # HENTAIGANA LETTER RE-4 +1B102 ; [.440C.0020.0002] # HENTAIGANA LETTER RO-1 +1B103 ; [.440D.0020.0002] # HENTAIGANA LETTER RO-2 +1B104 ; [.440E.0020.0002] # HENTAIGANA LETTER RO-3 +1B105 ; [.440F.0020.0002] # HENTAIGANA LETTER RO-4 +1B106 ; [.4410.0020.0002] # HENTAIGANA LETTER RO-5 +1B107 ; [.4411.0020.0002] # HENTAIGANA LETTER RO-6 +1B108 ; [.4412.0020.0002] # HENTAIGANA LETTER WA-1 +1B109 ; [.4413.0020.0002] # HENTAIGANA LETTER WA-2 +1B10A ; [.4414.0020.0002] # HENTAIGANA LETTER WA-3 +1B10B ; [.4415.0020.0002] # HENTAIGANA LETTER WA-4 +1B10C ; [.4416.0020.0002] # HENTAIGANA LETTER WA-5 +1B10D ; [.4417.0020.0002] # HENTAIGANA LETTER WI-1 +1B10E ; [.4418.0020.0002] # HENTAIGANA LETTER WI-2 +1B10F ; [.4419.0020.0002] # HENTAIGANA LETTER WI-3 +1B110 ; [.441A.0020.0002] # HENTAIGANA LETTER WI-4 +1B111 ; [.441B.0020.0002] # HENTAIGANA LETTER WI-5 +1B112 ; [.441C.0020.0002] # HENTAIGANA LETTER WE-1 +1B113 ; [.441D.0020.0002] # HENTAIGANA LETTER WE-2 +1B114 ; [.441E.0020.0002] # HENTAIGANA LETTER WE-3 +1B115 ; [.441F.0020.0002] # HENTAIGANA LETTER WE-4 +1B116 ; [.4420.0020.0002] # HENTAIGANA LETTER WO-1 +1B117 ; [.4421.0020.0002] # HENTAIGANA LETTER WO-2 +1B118 ; [.4422.0020.0002] # HENTAIGANA LETTER WO-3 +1B119 ; [.4423.0020.0002] # HENTAIGANA LETTER WO-4 +1B11A ; [.4424.0020.0002] # HENTAIGANA LETTER WO-5 +1B11B ; [.4425.0020.0002] # HENTAIGANA LETTER WO-6 +1B11C ; [.4426.0020.0002] # HENTAIGANA LETTER WO-7 +1B11D ; [.4427.0020.0002] # HENTAIGANA LETTER N-MU-MO-1 +1B11E ; [.4428.0020.0002] # HENTAIGANA LETTER N-MU-MO-2 +3105 ; [.4429.0020.0002] # BOPOMOFO LETTER B +31A0 ; [.4429.0020.0004][.0000.0119.0004] # BOPOMOFO LETTER BU +3106 ; [.442A.0020.0002] # BOPOMOFO LETTER P +31B4 ; [.442A.0020.0019] # BOPOMOFO FINAL LETTER P +3107 ; [.442B.0020.0002] # BOPOMOFO LETTER M +31AC ; [.442C.0020.0002] # BOPOMOFO LETTER IM +3108 ; [.442D.0020.0002] # BOPOMOFO LETTER F +312A ; [.442E.0020.0002] # BOPOMOFO LETTER V +3109 ; [.442F.0020.0002] # BOPOMOFO LETTER D +310A ; [.4430.0020.0002] # BOPOMOFO LETTER T +31B5 ; [.4430.0020.0019] # BOPOMOFO FINAL LETTER T +310B ; [.4431.0020.0002] # BOPOMOFO LETTER N +312F ; [.4432.0020.0002] # BOPOMOFO LETTER NN +310C ; [.4433.0020.0002] # BOPOMOFO LETTER L +310D ; [.4434.0020.0002] # BOPOMOFO LETTER G +31BB ; [.4434.0020.0019] # BOPOMOFO FINAL LETTER G +31A3 ; [.4434.0020.0004][.0000.0119.0004] # BOPOMOFO LETTER GU +310E ; [.4435.0020.0002] # BOPOMOFO LETTER K +31B6 ; [.4435.0020.0019] # BOPOMOFO FINAL LETTER K +312B ; [.4436.0020.0002] # BOPOMOFO LETTER NG +31AD ; [.4437.0020.0002] # BOPOMOFO LETTER NGG +310F ; [.4438.0020.0002] # BOPOMOFO LETTER H +31B7 ; [.4438.0020.0019] # BOPOMOFO FINAL LETTER H +3110 ; [.4439.0020.0002] # BOPOMOFO LETTER J +31A2 ; [.4439.0020.0004][.0000.0119.0004] # BOPOMOFO LETTER JI +3111 ; [.443A.0020.0002] # BOPOMOFO LETTER Q +3112 ; [.443B.0020.0002] # BOPOMOFO LETTER X +312C ; [.443C.0020.0002] # BOPOMOFO LETTER GN +31BC ; [.443D.0020.0002] # BOPOMOFO LETTER GW +31BD ; [.443E.0020.0002] # BOPOMOFO LETTER KW +3113 ; [.443F.0020.0002] # BOPOMOFO LETTER ZH +3114 ; [.4440.0020.0002] # BOPOMOFO LETTER CH +3115 ; [.4441.0020.0002] # BOPOMOFO LETTER SH +3116 ; [.4442.0020.0002] # BOPOMOFO LETTER R +3117 ; [.4443.0020.0002] # BOPOMOFO LETTER Z +31A1 ; [.4443.0020.0004][.0000.0119.0004] # BOPOMOFO LETTER ZI +3118 ; [.4444.0020.0002] # BOPOMOFO LETTER C +3119 ; [.4445.0020.0002] # BOPOMOFO LETTER S +31B8 ; [.4446.0020.0002] # BOPOMOFO LETTER GH +31B9 ; [.4447.0020.0002] # BOPOMOFO LETTER LH +31BA ; [.4448.0020.0002] # BOPOMOFO LETTER ZY +311A ; [.4449.0020.0002] # BOPOMOFO LETTER A +31A9 ; [.4449.0020.0004][.0000.0119.0004] # BOPOMOFO LETTER ANN +311B ; [.444A.0020.0002] # BOPOMOFO LETTER O +31A7 ; [.444A.0020.0004][.0000.0119.0004] # BOPOMOFO LETTER ONN +31A6 ; [.444B.0020.0002] # BOPOMOFO LETTER OO +311C ; [.444C.0020.0002] # BOPOMOFO LETTER E +312E ; [.444C.0020.0004] # BOPOMOFO LETTER O WITH DOT ABOVE +311D ; [.444D.0020.0002] # BOPOMOFO LETTER EH +31A4 ; [.444E.0020.0002] # BOPOMOFO LETTER EE +31A5 ; [.444E.0020.0004][.0000.0119.0004] # BOPOMOFO LETTER ENN +311E ; [.444F.0020.0002] # BOPOMOFO LETTER AI +31AE ; [.444F.0020.0004][.0000.0119.0004] # BOPOMOFO LETTER AINN +311F ; [.4450.0020.0002] # BOPOMOFO LETTER EI +3120 ; [.4451.0020.0002] # BOPOMOFO LETTER AU +31AF ; [.4451.0020.0004][.0000.0119.0004] # BOPOMOFO LETTER AUNN +3121 ; [.4452.0020.0002] # BOPOMOFO LETTER OU +3122 ; [.4453.0020.0002] # BOPOMOFO LETTER AN +3123 ; [.4454.0020.0002] # BOPOMOFO LETTER EN +3124 ; [.4455.0020.0002] # BOPOMOFO LETTER ANG +31B2 ; [.4456.0020.0002] # BOPOMOFO LETTER ONG +3125 ; [.4457.0020.0002] # BOPOMOFO LETTER ENG +31B0 ; [.4458.0020.0002] # BOPOMOFO LETTER AM +31B1 ; [.4459.0020.0002] # BOPOMOFO LETTER OM +3126 ; [.445A.0020.0002] # BOPOMOFO LETTER ER +3127 ; [.445B.0020.0002] # BOPOMOFO LETTER I +31AA ; [.445B.0020.0004][.0000.0119.0004] # BOPOMOFO LETTER INN +31B3 ; [.445B.0020.0016][.0000.0119.0016] # BOPOMOFO LETTER INNN +3128 ; [.445C.0020.0002] # BOPOMOFO LETTER U +31AB ; [.445C.0020.0004][.0000.0119.0004] # BOPOMOFO LETTER UNN +31A8 ; [.445C.0020.0004][.0000.011A.0004] # BOPOMOFO LETTER IR +3129 ; [.445D.0020.0002] # BOPOMOFO LETTER IU +312D ; [.445E.0020.0002] # BOPOMOFO LETTER IH +31BE ; [.445F.0020.0002] # BOPOMOFO LETTER OE +31BF ; [.4460.0020.0002] # BOPOMOFO LETTER AH +A000 ; [.4461.0020.0002] # YI SYLLABLE IT +A001 ; [.4462.0020.0002] # YI SYLLABLE IX +A002 ; [.4463.0020.0002] # YI SYLLABLE I +A003 ; [.4464.0020.0002] # YI SYLLABLE IP +A004 ; [.4465.0020.0002] # YI SYLLABLE IET +A005 ; [.4466.0020.0002] # YI SYLLABLE IEX +A006 ; [.4467.0020.0002] # YI SYLLABLE IE +A007 ; [.4468.0020.0002] # YI SYLLABLE IEP +A008 ; [.4469.0020.0002] # YI SYLLABLE AT +A009 ; [.446A.0020.0002] # YI SYLLABLE AX +A00A ; [.446B.0020.0002] # YI SYLLABLE A +A00B ; [.446C.0020.0002] # YI SYLLABLE AP +A00C ; [.446D.0020.0002] # YI SYLLABLE UOX +A00D ; [.446E.0020.0002] # YI SYLLABLE UO +A00E ; [.446F.0020.0002] # YI SYLLABLE UOP +A00F ; [.4470.0020.0002] # YI SYLLABLE OT +A010 ; [.4471.0020.0002] # YI SYLLABLE OX +A011 ; [.4472.0020.0002] # YI SYLLABLE O +A012 ; [.4473.0020.0002] # YI SYLLABLE OP +A013 ; [.4474.0020.0002] # YI SYLLABLE EX +A014 ; [.4475.0020.0002] # YI SYLLABLE E +A015 ; [.4476.0020.0002] # YI SYLLABLE WU +A016 ; [.4477.0020.0002] # YI SYLLABLE BIT +A017 ; [.4478.0020.0002] # YI SYLLABLE BIX +A018 ; [.4479.0020.0002] # YI SYLLABLE BI +A019 ; [.447A.0020.0002] # YI SYLLABLE BIP +A01A ; [.447B.0020.0002] # YI SYLLABLE BIET +A01B ; [.447C.0020.0002] # YI SYLLABLE BIEX +A01C ; [.447D.0020.0002] # YI SYLLABLE BIE +A01D ; [.447E.0020.0002] # YI SYLLABLE BIEP +A01E ; [.447F.0020.0002] # YI SYLLABLE BAT +A01F ; [.4480.0020.0002] # YI SYLLABLE BAX +A020 ; [.4481.0020.0002] # YI SYLLABLE BA +A021 ; [.4482.0020.0002] # YI SYLLABLE BAP +A022 ; [.4483.0020.0002] # YI SYLLABLE BUOX +A023 ; [.4484.0020.0002] # YI SYLLABLE BUO +A024 ; [.4485.0020.0002] # YI SYLLABLE BUOP +A025 ; [.4486.0020.0002] # YI SYLLABLE BOT +A026 ; [.4487.0020.0002] # YI SYLLABLE BOX +A027 ; [.4488.0020.0002] # YI SYLLABLE BO +A028 ; [.4489.0020.0002] # YI SYLLABLE BOP +A029 ; [.448A.0020.0002] # YI SYLLABLE BEX +A02A ; [.448B.0020.0002] # YI SYLLABLE BE +A02B ; [.448C.0020.0002] # YI SYLLABLE BEP +A02C ; [.448D.0020.0002] # YI SYLLABLE BUT +A02D ; [.448E.0020.0002] # YI SYLLABLE BUX +A02E ; [.448F.0020.0002] # YI SYLLABLE BU +A02F ; [.4490.0020.0002] # YI SYLLABLE BUP +A030 ; [.4491.0020.0002] # YI SYLLABLE BURX +A031 ; [.4492.0020.0002] # YI SYLLABLE BUR +A032 ; [.4493.0020.0002] # YI SYLLABLE BYT +A033 ; [.4494.0020.0002] # YI SYLLABLE BYX +A034 ; [.4495.0020.0002] # YI SYLLABLE BY +A035 ; [.4496.0020.0002] # YI SYLLABLE BYP +A036 ; [.4497.0020.0002] # YI SYLLABLE BYRX +A037 ; [.4498.0020.0002] # YI SYLLABLE BYR +A038 ; [.4499.0020.0002] # YI SYLLABLE PIT +A039 ; [.449A.0020.0002] # YI SYLLABLE PIX +A03A ; [.449B.0020.0002] # YI SYLLABLE PI +A03B ; [.449C.0020.0002] # YI SYLLABLE PIP +A03C ; [.449D.0020.0002] # YI SYLLABLE PIEX +A03D ; [.449E.0020.0002] # YI SYLLABLE PIE +A03E ; [.449F.0020.0002] # YI SYLLABLE PIEP +A03F ; [.44A0.0020.0002] # YI SYLLABLE PAT +A040 ; [.44A1.0020.0002] # YI SYLLABLE PAX +A041 ; [.44A2.0020.0002] # YI SYLLABLE PA +A042 ; [.44A3.0020.0002] # YI SYLLABLE PAP +A043 ; [.44A4.0020.0002] # YI SYLLABLE PUOX +A044 ; [.44A5.0020.0002] # YI SYLLABLE PUO +A045 ; [.44A6.0020.0002] # YI SYLLABLE PUOP +A046 ; [.44A7.0020.0002] # YI SYLLABLE POT +A047 ; [.44A8.0020.0002] # YI SYLLABLE POX +A048 ; [.44A9.0020.0002] # YI SYLLABLE PO +A049 ; [.44AA.0020.0002] # YI SYLLABLE POP +A04A ; [.44AB.0020.0002] # YI SYLLABLE PUT +A04B ; [.44AC.0020.0002] # YI SYLLABLE PUX +A04C ; [.44AD.0020.0002] # YI SYLLABLE PU +A04D ; [.44AE.0020.0002] # YI SYLLABLE PUP +A04E ; [.44AF.0020.0002] # YI SYLLABLE PURX +A04F ; [.44B0.0020.0002] # YI SYLLABLE PUR +A050 ; [.44B1.0020.0002] # YI SYLLABLE PYT +A051 ; [.44B2.0020.0002] # YI SYLLABLE PYX +A052 ; [.44B3.0020.0002] # YI SYLLABLE PY +A053 ; [.44B4.0020.0002] # YI SYLLABLE PYP +A054 ; [.44B5.0020.0002] # YI SYLLABLE PYRX +A055 ; [.44B6.0020.0002] # YI SYLLABLE PYR +A056 ; [.44B7.0020.0002] # YI SYLLABLE BBIT +A057 ; [.44B8.0020.0002] # YI SYLLABLE BBIX +A058 ; [.44B9.0020.0002] # YI SYLLABLE BBI +A059 ; [.44BA.0020.0002] # YI SYLLABLE BBIP +A05A ; [.44BB.0020.0002] # YI SYLLABLE BBIET +A05B ; [.44BC.0020.0002] # YI SYLLABLE BBIEX +A05C ; [.44BD.0020.0002] # YI SYLLABLE BBIE +A05D ; [.44BE.0020.0002] # YI SYLLABLE BBIEP +A05E ; [.44BF.0020.0002] # YI SYLLABLE BBAT +A05F ; [.44C0.0020.0002] # YI SYLLABLE BBAX +A060 ; [.44C1.0020.0002] # YI SYLLABLE BBA +A061 ; [.44C2.0020.0002] # YI SYLLABLE BBAP +A062 ; [.44C3.0020.0002] # YI SYLLABLE BBUOX +A063 ; [.44C4.0020.0002] # YI SYLLABLE BBUO +A064 ; [.44C5.0020.0002] # YI SYLLABLE BBUOP +A065 ; [.44C6.0020.0002] # YI SYLLABLE BBOT +A066 ; [.44C7.0020.0002] # YI SYLLABLE BBOX +A067 ; [.44C8.0020.0002] # YI SYLLABLE BBO +A068 ; [.44C9.0020.0002] # YI SYLLABLE BBOP +A069 ; [.44CA.0020.0002] # YI SYLLABLE BBEX +A06A ; [.44CB.0020.0002] # YI SYLLABLE BBE +A06B ; [.44CC.0020.0002] # YI SYLLABLE BBEP +A06C ; [.44CD.0020.0002] # YI SYLLABLE BBUT +A06D ; [.44CE.0020.0002] # YI SYLLABLE BBUX +A06E ; [.44CF.0020.0002] # YI SYLLABLE BBU +A06F ; [.44D0.0020.0002] # YI SYLLABLE BBUP +A070 ; [.44D1.0020.0002] # YI SYLLABLE BBURX +A071 ; [.44D2.0020.0002] # YI SYLLABLE BBUR +A072 ; [.44D3.0020.0002] # YI SYLLABLE BBYT +A073 ; [.44D4.0020.0002] # YI SYLLABLE BBYX +A074 ; [.44D5.0020.0002] # YI SYLLABLE BBY +A075 ; [.44D6.0020.0002] # YI SYLLABLE BBYP +A076 ; [.44D7.0020.0002] # YI SYLLABLE NBIT +A077 ; [.44D8.0020.0002] # YI SYLLABLE NBIX +A078 ; [.44D9.0020.0002] # YI SYLLABLE NBI +A079 ; [.44DA.0020.0002] # YI SYLLABLE NBIP +A07A ; [.44DB.0020.0002] # YI SYLLABLE NBIEX +A07B ; [.44DC.0020.0002] # YI SYLLABLE NBIE +A07C ; [.44DD.0020.0002] # YI SYLLABLE NBIEP +A07D ; [.44DE.0020.0002] # YI SYLLABLE NBAT +A07E ; [.44DF.0020.0002] # YI SYLLABLE NBAX +A07F ; [.44E0.0020.0002] # YI SYLLABLE NBA +A080 ; [.44E1.0020.0002] # YI SYLLABLE NBAP +A081 ; [.44E2.0020.0002] # YI SYLLABLE NBOT +A082 ; [.44E3.0020.0002] # YI SYLLABLE NBOX +A083 ; [.44E4.0020.0002] # YI SYLLABLE NBO +A084 ; [.44E5.0020.0002] # YI SYLLABLE NBOP +A085 ; [.44E6.0020.0002] # YI SYLLABLE NBUT +A086 ; [.44E7.0020.0002] # YI SYLLABLE NBUX +A087 ; [.44E8.0020.0002] # YI SYLLABLE NBU +A088 ; [.44E9.0020.0002] # YI SYLLABLE NBUP +A089 ; [.44EA.0020.0002] # YI SYLLABLE NBURX +A08A ; [.44EB.0020.0002] # YI SYLLABLE NBUR +A08B ; [.44EC.0020.0002] # YI SYLLABLE NBYT +A08C ; [.44ED.0020.0002] # YI SYLLABLE NBYX +A08D ; [.44EE.0020.0002] # YI SYLLABLE NBY +A08E ; [.44EF.0020.0002] # YI SYLLABLE NBYP +A08F ; [.44F0.0020.0002] # YI SYLLABLE NBYRX +A090 ; [.44F1.0020.0002] # YI SYLLABLE NBYR +A091 ; [.44F2.0020.0002] # YI SYLLABLE HMIT +A092 ; [.44F3.0020.0002] # YI SYLLABLE HMIX +A093 ; [.44F4.0020.0002] # YI SYLLABLE HMI +A094 ; [.44F5.0020.0002] # YI SYLLABLE HMIP +A095 ; [.44F6.0020.0002] # YI SYLLABLE HMIEX +A096 ; [.44F7.0020.0002] # YI SYLLABLE HMIE +A097 ; [.44F8.0020.0002] # YI SYLLABLE HMIEP +A098 ; [.44F9.0020.0002] # YI SYLLABLE HMAT +A099 ; [.44FA.0020.0002] # YI SYLLABLE HMAX +A09A ; [.44FB.0020.0002] # YI SYLLABLE HMA +A09B ; [.44FC.0020.0002] # YI SYLLABLE HMAP +A09C ; [.44FD.0020.0002] # YI SYLLABLE HMUOX +A09D ; [.44FE.0020.0002] # YI SYLLABLE HMUO +A09E ; [.44FF.0020.0002] # YI SYLLABLE HMUOP +A09F ; [.4500.0020.0002] # YI SYLLABLE HMOT +A0A0 ; [.4501.0020.0002] # YI SYLLABLE HMOX +A0A1 ; [.4502.0020.0002] # YI SYLLABLE HMO +A0A2 ; [.4503.0020.0002] # YI SYLLABLE HMOP +A0A3 ; [.4504.0020.0002] # YI SYLLABLE HMUT +A0A4 ; [.4505.0020.0002] # YI SYLLABLE HMUX +A0A5 ; [.4506.0020.0002] # YI SYLLABLE HMU +A0A6 ; [.4507.0020.0002] # YI SYLLABLE HMUP +A0A7 ; [.4508.0020.0002] # YI SYLLABLE HMURX +A0A8 ; [.4509.0020.0002] # YI SYLLABLE HMUR +A0A9 ; [.450A.0020.0002] # YI SYLLABLE HMYX +A0AA ; [.450B.0020.0002] # YI SYLLABLE HMY +A0AB ; [.450C.0020.0002] # YI SYLLABLE HMYP +A0AC ; [.450D.0020.0002] # YI SYLLABLE HMYRX +A0AD ; [.450E.0020.0002] # YI SYLLABLE HMYR +A0AE ; [.450F.0020.0002] # YI SYLLABLE MIT +A0AF ; [.4510.0020.0002] # YI SYLLABLE MIX +A0B0 ; [.4511.0020.0002] # YI SYLLABLE MI +A0B1 ; [.4512.0020.0002] # YI SYLLABLE MIP +A0B2 ; [.4513.0020.0002] # YI SYLLABLE MIEX +A0B3 ; [.4514.0020.0002] # YI SYLLABLE MIE +A0B4 ; [.4515.0020.0002] # YI SYLLABLE MIEP +A0B5 ; [.4516.0020.0002] # YI SYLLABLE MAT +A0B6 ; [.4517.0020.0002] # YI SYLLABLE MAX +A0B7 ; [.4518.0020.0002] # YI SYLLABLE MA +A0B8 ; [.4519.0020.0002] # YI SYLLABLE MAP +A0B9 ; [.451A.0020.0002] # YI SYLLABLE MUOT +A0BA ; [.451B.0020.0002] # YI SYLLABLE MUOX +A0BB ; [.451C.0020.0002] # YI SYLLABLE MUO +A0BC ; [.451D.0020.0002] # YI SYLLABLE MUOP +A0BD ; [.451E.0020.0002] # YI SYLLABLE MOT +A0BE ; [.451F.0020.0002] # YI SYLLABLE MOX +A0BF ; [.4520.0020.0002] # YI SYLLABLE MO +A0C0 ; [.4521.0020.0002] # YI SYLLABLE MOP +A0C1 ; [.4522.0020.0002] # YI SYLLABLE MEX +A0C2 ; [.4523.0020.0002] # YI SYLLABLE ME +A0C3 ; [.4524.0020.0002] # YI SYLLABLE MUT +A0C4 ; [.4525.0020.0002] # YI SYLLABLE MUX +A0C5 ; [.4526.0020.0002] # YI SYLLABLE MU +A0C6 ; [.4527.0020.0002] # YI SYLLABLE MUP +A0C7 ; [.4528.0020.0002] # YI SYLLABLE MURX +A0C8 ; [.4529.0020.0002] # YI SYLLABLE MUR +A0C9 ; [.452A.0020.0002] # YI SYLLABLE MYT +A0CA ; [.452B.0020.0002] # YI SYLLABLE MYX +A0CB ; [.452C.0020.0002] # YI SYLLABLE MY +A0CC ; [.452D.0020.0002] # YI SYLLABLE MYP +A0CD ; [.452E.0020.0002] # YI SYLLABLE FIT +A0CE ; [.452F.0020.0002] # YI SYLLABLE FIX +A0CF ; [.4530.0020.0002] # YI SYLLABLE FI +A0D0 ; [.4531.0020.0002] # YI SYLLABLE FIP +A0D1 ; [.4532.0020.0002] # YI SYLLABLE FAT +A0D2 ; [.4533.0020.0002] # YI SYLLABLE FAX +A0D3 ; [.4534.0020.0002] # YI SYLLABLE FA +A0D4 ; [.4535.0020.0002] # YI SYLLABLE FAP +A0D5 ; [.4536.0020.0002] # YI SYLLABLE FOX +A0D6 ; [.4537.0020.0002] # YI SYLLABLE FO +A0D7 ; [.4538.0020.0002] # YI SYLLABLE FOP +A0D8 ; [.4539.0020.0002] # YI SYLLABLE FUT +A0D9 ; [.453A.0020.0002] # YI SYLLABLE FUX +A0DA ; [.453B.0020.0002] # YI SYLLABLE FU +A0DB ; [.453C.0020.0002] # YI SYLLABLE FUP +A0DC ; [.453D.0020.0002] # YI SYLLABLE FURX +A0DD ; [.453E.0020.0002] # YI SYLLABLE FUR +A0DE ; [.453F.0020.0002] # YI SYLLABLE FYT +A0DF ; [.4540.0020.0002] # YI SYLLABLE FYX +A0E0 ; [.4541.0020.0002] # YI SYLLABLE FY +A0E1 ; [.4542.0020.0002] # YI SYLLABLE FYP +A0E2 ; [.4543.0020.0002] # YI SYLLABLE VIT +A0E3 ; [.4544.0020.0002] # YI SYLLABLE VIX +A0E4 ; [.4545.0020.0002] # YI SYLLABLE VI +A0E5 ; [.4546.0020.0002] # YI SYLLABLE VIP +A0E6 ; [.4547.0020.0002] # YI SYLLABLE VIET +A0E7 ; [.4548.0020.0002] # YI SYLLABLE VIEX +A0E8 ; [.4549.0020.0002] # YI SYLLABLE VIE +A0E9 ; [.454A.0020.0002] # YI SYLLABLE VIEP +A0EA ; [.454B.0020.0002] # YI SYLLABLE VAT +A0EB ; [.454C.0020.0002] # YI SYLLABLE VAX +A0EC ; [.454D.0020.0002] # YI SYLLABLE VA +A0ED ; [.454E.0020.0002] # YI SYLLABLE VAP +A0EE ; [.454F.0020.0002] # YI SYLLABLE VOT +A0EF ; [.4550.0020.0002] # YI SYLLABLE VOX +A0F0 ; [.4551.0020.0002] # YI SYLLABLE VO +A0F1 ; [.4552.0020.0002] # YI SYLLABLE VOP +A0F2 ; [.4553.0020.0002] # YI SYLLABLE VEX +A0F3 ; [.4554.0020.0002] # YI SYLLABLE VEP +A0F4 ; [.4555.0020.0002] # YI SYLLABLE VUT +A0F5 ; [.4556.0020.0002] # YI SYLLABLE VUX +A0F6 ; [.4557.0020.0002] # YI SYLLABLE VU +A0F7 ; [.4558.0020.0002] # YI SYLLABLE VUP +A0F8 ; [.4559.0020.0002] # YI SYLLABLE VURX +A0F9 ; [.455A.0020.0002] # YI SYLLABLE VUR +A0FA ; [.455B.0020.0002] # YI SYLLABLE VYT +A0FB ; [.455C.0020.0002] # YI SYLLABLE VYX +A0FC ; [.455D.0020.0002] # YI SYLLABLE VY +A0FD ; [.455E.0020.0002] # YI SYLLABLE VYP +A0FE ; [.455F.0020.0002] # YI SYLLABLE VYRX +A0FF ; [.4560.0020.0002] # YI SYLLABLE VYR +A100 ; [.4561.0020.0002] # YI SYLLABLE DIT +A101 ; [.4562.0020.0002] # YI SYLLABLE DIX +A102 ; [.4563.0020.0002] # YI SYLLABLE DI +A103 ; [.4564.0020.0002] # YI SYLLABLE DIP +A104 ; [.4565.0020.0002] # YI SYLLABLE DIEX +A105 ; [.4566.0020.0002] # YI SYLLABLE DIE +A106 ; [.4567.0020.0002] # YI SYLLABLE DIEP +A107 ; [.4568.0020.0002] # YI SYLLABLE DAT +A108 ; [.4569.0020.0002] # YI SYLLABLE DAX +A109 ; [.456A.0020.0002] # YI SYLLABLE DA +A10A ; [.456B.0020.0002] # YI SYLLABLE DAP +A10B ; [.456C.0020.0002] # YI SYLLABLE DUOX +A10C ; [.456D.0020.0002] # YI SYLLABLE DUO +A10D ; [.456E.0020.0002] # YI SYLLABLE DOT +A10E ; [.456F.0020.0002] # YI SYLLABLE DOX +A10F ; [.4570.0020.0002] # YI SYLLABLE DO +A110 ; [.4571.0020.0002] # YI SYLLABLE DOP +A111 ; [.4572.0020.0002] # YI SYLLABLE DEX +A112 ; [.4573.0020.0002] # YI SYLLABLE DE +A113 ; [.4574.0020.0002] # YI SYLLABLE DEP +A114 ; [.4575.0020.0002] # YI SYLLABLE DUT +A115 ; [.4576.0020.0002] # YI SYLLABLE DUX +A116 ; [.4577.0020.0002] # YI SYLLABLE DU +A117 ; [.4578.0020.0002] # YI SYLLABLE DUP +A118 ; [.4579.0020.0002] # YI SYLLABLE DURX +A119 ; [.457A.0020.0002] # YI SYLLABLE DUR +A11A ; [.457B.0020.0002] # YI SYLLABLE TIT +A11B ; [.457C.0020.0002] # YI SYLLABLE TIX +A11C ; [.457D.0020.0002] # YI SYLLABLE TI +A11D ; [.457E.0020.0002] # YI SYLLABLE TIP +A11E ; [.457F.0020.0002] # YI SYLLABLE TIEX +A11F ; [.4580.0020.0002] # YI SYLLABLE TIE +A120 ; [.4581.0020.0002] # YI SYLLABLE TIEP +A121 ; [.4582.0020.0002] # YI SYLLABLE TAT +A122 ; [.4583.0020.0002] # YI SYLLABLE TAX +A123 ; [.4584.0020.0002] # YI SYLLABLE TA +A124 ; [.4585.0020.0002] # YI SYLLABLE TAP +A125 ; [.4586.0020.0002] # YI SYLLABLE TUOT +A126 ; [.4587.0020.0002] # YI SYLLABLE TUOX +A127 ; [.4588.0020.0002] # YI SYLLABLE TUO +A128 ; [.4589.0020.0002] # YI SYLLABLE TUOP +A129 ; [.458A.0020.0002] # YI SYLLABLE TOT +A12A ; [.458B.0020.0002] # YI SYLLABLE TOX +A12B ; [.458C.0020.0002] # YI SYLLABLE TO +A12C ; [.458D.0020.0002] # YI SYLLABLE TOP +A12D ; [.458E.0020.0002] # YI SYLLABLE TEX +A12E ; [.458F.0020.0002] # YI SYLLABLE TE +A12F ; [.4590.0020.0002] # YI SYLLABLE TEP +A130 ; [.4591.0020.0002] # YI SYLLABLE TUT +A131 ; [.4592.0020.0002] # YI SYLLABLE TUX +A132 ; [.4593.0020.0002] # YI SYLLABLE TU +A133 ; [.4594.0020.0002] # YI SYLLABLE TUP +A134 ; [.4595.0020.0002] # YI SYLLABLE TURX +A135 ; [.4596.0020.0002] # YI SYLLABLE TUR +A136 ; [.4597.0020.0002] # YI SYLLABLE DDIT +A137 ; [.4598.0020.0002] # YI SYLLABLE DDIX +A138 ; [.4599.0020.0002] # YI SYLLABLE DDI +A139 ; [.459A.0020.0002] # YI SYLLABLE DDIP +A13A ; [.459B.0020.0002] # YI SYLLABLE DDIEX +A13B ; [.459C.0020.0002] # YI SYLLABLE DDIE +A13C ; [.459D.0020.0002] # YI SYLLABLE DDIEP +A13D ; [.459E.0020.0002] # YI SYLLABLE DDAT +A13E ; [.459F.0020.0002] # YI SYLLABLE DDAX +A13F ; [.45A0.0020.0002] # YI SYLLABLE DDA +A140 ; [.45A1.0020.0002] # YI SYLLABLE DDAP +A141 ; [.45A2.0020.0002] # YI SYLLABLE DDUOX +A142 ; [.45A3.0020.0002] # YI SYLLABLE DDUO +A143 ; [.45A4.0020.0002] # YI SYLLABLE DDUOP +A144 ; [.45A5.0020.0002] # YI SYLLABLE DDOT +A145 ; [.45A6.0020.0002] # YI SYLLABLE DDOX +A146 ; [.45A7.0020.0002] # YI SYLLABLE DDO +A147 ; [.45A8.0020.0002] # YI SYLLABLE DDOP +A148 ; [.45A9.0020.0002] # YI SYLLABLE DDEX +A149 ; [.45AA.0020.0002] # YI SYLLABLE DDE +A14A ; [.45AB.0020.0002] # YI SYLLABLE DDEP +A14B ; [.45AC.0020.0002] # YI SYLLABLE DDUT +A14C ; [.45AD.0020.0002] # YI SYLLABLE DDUX +A14D ; [.45AE.0020.0002] # YI SYLLABLE DDU +A14E ; [.45AF.0020.0002] # YI SYLLABLE DDUP +A14F ; [.45B0.0020.0002] # YI SYLLABLE DDURX +A150 ; [.45B1.0020.0002] # YI SYLLABLE DDUR +A151 ; [.45B2.0020.0002] # YI SYLLABLE NDIT +A152 ; [.45B3.0020.0002] # YI SYLLABLE NDIX +A153 ; [.45B4.0020.0002] # YI SYLLABLE NDI +A154 ; [.45B5.0020.0002] # YI SYLLABLE NDIP +A155 ; [.45B6.0020.0002] # YI SYLLABLE NDIEX +A156 ; [.45B7.0020.0002] # YI SYLLABLE NDIE +A157 ; [.45B8.0020.0002] # YI SYLLABLE NDAT +A158 ; [.45B9.0020.0002] # YI SYLLABLE NDAX +A159 ; [.45BA.0020.0002] # YI SYLLABLE NDA +A15A ; [.45BB.0020.0002] # YI SYLLABLE NDAP +A15B ; [.45BC.0020.0002] # YI SYLLABLE NDOT +A15C ; [.45BD.0020.0002] # YI SYLLABLE NDOX +A15D ; [.45BE.0020.0002] # YI SYLLABLE NDO +A15E ; [.45BF.0020.0002] # YI SYLLABLE NDOP +A15F ; [.45C0.0020.0002] # YI SYLLABLE NDEX +A160 ; [.45C1.0020.0002] # YI SYLLABLE NDE +A161 ; [.45C2.0020.0002] # YI SYLLABLE NDEP +A162 ; [.45C3.0020.0002] # YI SYLLABLE NDUT +A163 ; [.45C4.0020.0002] # YI SYLLABLE NDUX +A164 ; [.45C5.0020.0002] # YI SYLLABLE NDU +A165 ; [.45C6.0020.0002] # YI SYLLABLE NDUP +A166 ; [.45C7.0020.0002] # YI SYLLABLE NDURX +A167 ; [.45C8.0020.0002] # YI SYLLABLE NDUR +A168 ; [.45C9.0020.0002] # YI SYLLABLE HNIT +A169 ; [.45CA.0020.0002] # YI SYLLABLE HNIX +A16A ; [.45CB.0020.0002] # YI SYLLABLE HNI +A16B ; [.45CC.0020.0002] # YI SYLLABLE HNIP +A16C ; [.45CD.0020.0002] # YI SYLLABLE HNIET +A16D ; [.45CE.0020.0002] # YI SYLLABLE HNIEX +A16E ; [.45CF.0020.0002] # YI SYLLABLE HNIE +A16F ; [.45D0.0020.0002] # YI SYLLABLE HNIEP +A170 ; [.45D1.0020.0002] # YI SYLLABLE HNAT +A171 ; [.45D2.0020.0002] # YI SYLLABLE HNAX +A172 ; [.45D3.0020.0002] # YI SYLLABLE HNA +A173 ; [.45D4.0020.0002] # YI SYLLABLE HNAP +A174 ; [.45D5.0020.0002] # YI SYLLABLE HNUOX +A175 ; [.45D6.0020.0002] # YI SYLLABLE HNUO +A176 ; [.45D7.0020.0002] # YI SYLLABLE HNOT +A177 ; [.45D8.0020.0002] # YI SYLLABLE HNOX +A178 ; [.45D9.0020.0002] # YI SYLLABLE HNOP +A179 ; [.45DA.0020.0002] # YI SYLLABLE HNEX +A17A ; [.45DB.0020.0002] # YI SYLLABLE HNE +A17B ; [.45DC.0020.0002] # YI SYLLABLE HNEP +A17C ; [.45DD.0020.0002] # YI SYLLABLE HNUT +A17D ; [.45DE.0020.0002] # YI SYLLABLE NIT +A17E ; [.45DF.0020.0002] # YI SYLLABLE NIX +A17F ; [.45E0.0020.0002] # YI SYLLABLE NI +A180 ; [.45E1.0020.0002] # YI SYLLABLE NIP +A181 ; [.45E2.0020.0002] # YI SYLLABLE NIEX +A182 ; [.45E3.0020.0002] # YI SYLLABLE NIE +A183 ; [.45E4.0020.0002] # YI SYLLABLE NIEP +A184 ; [.45E5.0020.0002] # YI SYLLABLE NAX +A185 ; [.45E6.0020.0002] # YI SYLLABLE NA +A186 ; [.45E7.0020.0002] # YI SYLLABLE NAP +A187 ; [.45E8.0020.0002] # YI SYLLABLE NUOX +A188 ; [.45E9.0020.0002] # YI SYLLABLE NUO +A189 ; [.45EA.0020.0002] # YI SYLLABLE NUOP +A18A ; [.45EB.0020.0002] # YI SYLLABLE NOT +A18B ; [.45EC.0020.0002] # YI SYLLABLE NOX +A18C ; [.45ED.0020.0002] # YI SYLLABLE NO +A18D ; [.45EE.0020.0002] # YI SYLLABLE NOP +A18E ; [.45EF.0020.0002] # YI SYLLABLE NEX +A18F ; [.45F0.0020.0002] # YI SYLLABLE NE +A190 ; [.45F1.0020.0002] # YI SYLLABLE NEP +A191 ; [.45F2.0020.0002] # YI SYLLABLE NUT +A192 ; [.45F3.0020.0002] # YI SYLLABLE NUX +A193 ; [.45F4.0020.0002] # YI SYLLABLE NU +A194 ; [.45F5.0020.0002] # YI SYLLABLE NUP +A195 ; [.45F6.0020.0002] # YI SYLLABLE NURX +A196 ; [.45F7.0020.0002] # YI SYLLABLE NUR +A197 ; [.45F8.0020.0002] # YI SYLLABLE HLIT +A198 ; [.45F9.0020.0002] # YI SYLLABLE HLIX +A199 ; [.45FA.0020.0002] # YI SYLLABLE HLI +A19A ; [.45FB.0020.0002] # YI SYLLABLE HLIP +A19B ; [.45FC.0020.0002] # YI SYLLABLE HLIEX +A19C ; [.45FD.0020.0002] # YI SYLLABLE HLIE +A19D ; [.45FE.0020.0002] # YI SYLLABLE HLIEP +A19E ; [.45FF.0020.0002] # YI SYLLABLE HLAT +A19F ; [.4600.0020.0002] # YI SYLLABLE HLAX +A1A0 ; [.4601.0020.0002] # YI SYLLABLE HLA +A1A1 ; [.4602.0020.0002] # YI SYLLABLE HLAP +A1A2 ; [.4603.0020.0002] # YI SYLLABLE HLUOX +A1A3 ; [.4604.0020.0002] # YI SYLLABLE HLUO +A1A4 ; [.4605.0020.0002] # YI SYLLABLE HLUOP +A1A5 ; [.4606.0020.0002] # YI SYLLABLE HLOX +A1A6 ; [.4607.0020.0002] # YI SYLLABLE HLO +A1A7 ; [.4608.0020.0002] # YI SYLLABLE HLOP +A1A8 ; [.4609.0020.0002] # YI SYLLABLE HLEX +A1A9 ; [.460A.0020.0002] # YI SYLLABLE HLE +A1AA ; [.460B.0020.0002] # YI SYLLABLE HLEP +A1AB ; [.460C.0020.0002] # YI SYLLABLE HLUT +A1AC ; [.460D.0020.0002] # YI SYLLABLE HLUX +A1AD ; [.460E.0020.0002] # YI SYLLABLE HLU +A1AE ; [.460F.0020.0002] # YI SYLLABLE HLUP +A1AF ; [.4610.0020.0002] # YI SYLLABLE HLURX +A1B0 ; [.4611.0020.0002] # YI SYLLABLE HLUR +A1B1 ; [.4612.0020.0002] # YI SYLLABLE HLYT +A1B2 ; [.4613.0020.0002] # YI SYLLABLE HLYX +A1B3 ; [.4614.0020.0002] # YI SYLLABLE HLY +A1B4 ; [.4615.0020.0002] # YI SYLLABLE HLYP +A1B5 ; [.4616.0020.0002] # YI SYLLABLE HLYRX +A1B6 ; [.4617.0020.0002] # YI SYLLABLE HLYR +A1B7 ; [.4618.0020.0002] # YI SYLLABLE LIT +A1B8 ; [.4619.0020.0002] # YI SYLLABLE LIX +A1B9 ; [.461A.0020.0002] # YI SYLLABLE LI +A1BA ; [.461B.0020.0002] # YI SYLLABLE LIP +A1BB ; [.461C.0020.0002] # YI SYLLABLE LIET +A1BC ; [.461D.0020.0002] # YI SYLLABLE LIEX +A1BD ; [.461E.0020.0002] # YI SYLLABLE LIE +A1BE ; [.461F.0020.0002] # YI SYLLABLE LIEP +A1BF ; [.4620.0020.0002] # YI SYLLABLE LAT +A1C0 ; [.4621.0020.0002] # YI SYLLABLE LAX +A1C1 ; [.4622.0020.0002] # YI SYLLABLE LA +A1C2 ; [.4623.0020.0002] # YI SYLLABLE LAP +A1C3 ; [.4624.0020.0002] # YI SYLLABLE LUOT +A1C4 ; [.4625.0020.0002] # YI SYLLABLE LUOX +A1C5 ; [.4626.0020.0002] # YI SYLLABLE LUO +A1C6 ; [.4627.0020.0002] # YI SYLLABLE LUOP +A1C7 ; [.4628.0020.0002] # YI SYLLABLE LOT +A1C8 ; [.4629.0020.0002] # YI SYLLABLE LOX +A1C9 ; [.462A.0020.0002] # YI SYLLABLE LO +A1CA ; [.462B.0020.0002] # YI SYLLABLE LOP +A1CB ; [.462C.0020.0002] # YI SYLLABLE LEX +A1CC ; [.462D.0020.0002] # YI SYLLABLE LE +A1CD ; [.462E.0020.0002] # YI SYLLABLE LEP +A1CE ; [.462F.0020.0002] # YI SYLLABLE LUT +A1CF ; [.4630.0020.0002] # YI SYLLABLE LUX +A1D0 ; [.4631.0020.0002] # YI SYLLABLE LU +A1D1 ; [.4632.0020.0002] # YI SYLLABLE LUP +A1D2 ; [.4633.0020.0002] # YI SYLLABLE LURX +A1D3 ; [.4634.0020.0002] # YI SYLLABLE LUR +A1D4 ; [.4635.0020.0002] # YI SYLLABLE LYT +A1D5 ; [.4636.0020.0002] # YI SYLLABLE LYX +A1D6 ; [.4637.0020.0002] # YI SYLLABLE LY +A1D7 ; [.4638.0020.0002] # YI SYLLABLE LYP +A1D8 ; [.4639.0020.0002] # YI SYLLABLE LYRX +A1D9 ; [.463A.0020.0002] # YI SYLLABLE LYR +A1DA ; [.463B.0020.0002] # YI SYLLABLE GIT +A1DB ; [.463C.0020.0002] # YI SYLLABLE GIX +A1DC ; [.463D.0020.0002] # YI SYLLABLE GI +A1DD ; [.463E.0020.0002] # YI SYLLABLE GIP +A1DE ; [.463F.0020.0002] # YI SYLLABLE GIET +A1DF ; [.4640.0020.0002] # YI SYLLABLE GIEX +A1E0 ; [.4641.0020.0002] # YI SYLLABLE GIE +A1E1 ; [.4642.0020.0002] # YI SYLLABLE GIEP +A1E2 ; [.4643.0020.0002] # YI SYLLABLE GAT +A1E3 ; [.4644.0020.0002] # YI SYLLABLE GAX +A1E4 ; [.4645.0020.0002] # YI SYLLABLE GA +A1E5 ; [.4646.0020.0002] # YI SYLLABLE GAP +A1E6 ; [.4647.0020.0002] # YI SYLLABLE GUOT +A1E7 ; [.4648.0020.0002] # YI SYLLABLE GUOX +A1E8 ; [.4649.0020.0002] # YI SYLLABLE GUO +A1E9 ; [.464A.0020.0002] # YI SYLLABLE GUOP +A1EA ; [.464B.0020.0002] # YI SYLLABLE GOT +A1EB ; [.464C.0020.0002] # YI SYLLABLE GOX +A1EC ; [.464D.0020.0002] # YI SYLLABLE GO +A1ED ; [.464E.0020.0002] # YI SYLLABLE GOP +A1EE ; [.464F.0020.0002] # YI SYLLABLE GET +A1EF ; [.4650.0020.0002] # YI SYLLABLE GEX +A1F0 ; [.4651.0020.0002] # YI SYLLABLE GE +A1F1 ; [.4652.0020.0002] # YI SYLLABLE GEP +A1F2 ; [.4653.0020.0002] # YI SYLLABLE GUT +A1F3 ; [.4654.0020.0002] # YI SYLLABLE GUX +A1F4 ; [.4655.0020.0002] # YI SYLLABLE GU +A1F5 ; [.4656.0020.0002] # YI SYLLABLE GUP +A1F6 ; [.4657.0020.0002] # YI SYLLABLE GURX +A1F7 ; [.4658.0020.0002] # YI SYLLABLE GUR +A1F8 ; [.4659.0020.0002] # YI SYLLABLE KIT +A1F9 ; [.465A.0020.0002] # YI SYLLABLE KIX +A1FA ; [.465B.0020.0002] # YI SYLLABLE KI +A1FB ; [.465C.0020.0002] # YI SYLLABLE KIP +A1FC ; [.465D.0020.0002] # YI SYLLABLE KIEX +A1FD ; [.465E.0020.0002] # YI SYLLABLE KIE +A1FE ; [.465F.0020.0002] # YI SYLLABLE KIEP +A1FF ; [.4660.0020.0002] # YI SYLLABLE KAT +A200 ; [.4661.0020.0002] # YI SYLLABLE KAX +A201 ; [.4662.0020.0002] # YI SYLLABLE KA +A202 ; [.4663.0020.0002] # YI SYLLABLE KAP +A203 ; [.4664.0020.0002] # YI SYLLABLE KUOX +A204 ; [.4665.0020.0002] # YI SYLLABLE KUO +A205 ; [.4666.0020.0002] # YI SYLLABLE KUOP +A206 ; [.4667.0020.0002] # YI SYLLABLE KOT +A207 ; [.4668.0020.0002] # YI SYLLABLE KOX +A208 ; [.4669.0020.0002] # YI SYLLABLE KO +A209 ; [.466A.0020.0002] # YI SYLLABLE KOP +A20A ; [.466B.0020.0002] # YI SYLLABLE KET +A20B ; [.466C.0020.0002] # YI SYLLABLE KEX +A20C ; [.466D.0020.0002] # YI SYLLABLE KE +A20D ; [.466E.0020.0002] # YI SYLLABLE KEP +A20E ; [.466F.0020.0002] # YI SYLLABLE KUT +A20F ; [.4670.0020.0002] # YI SYLLABLE KUX +A210 ; [.4671.0020.0002] # YI SYLLABLE KU +A211 ; [.4672.0020.0002] # YI SYLLABLE KUP +A212 ; [.4673.0020.0002] # YI SYLLABLE KURX +A213 ; [.4674.0020.0002] # YI SYLLABLE KUR +A214 ; [.4675.0020.0002] # YI SYLLABLE GGIT +A215 ; [.4676.0020.0002] # YI SYLLABLE GGIX +A216 ; [.4677.0020.0002] # YI SYLLABLE GGI +A217 ; [.4678.0020.0002] # YI SYLLABLE GGIEX +A218 ; [.4679.0020.0002] # YI SYLLABLE GGIE +A219 ; [.467A.0020.0002] # YI SYLLABLE GGIEP +A21A ; [.467B.0020.0002] # YI SYLLABLE GGAT +A21B ; [.467C.0020.0002] # YI SYLLABLE GGAX +A21C ; [.467D.0020.0002] # YI SYLLABLE GGA +A21D ; [.467E.0020.0002] # YI SYLLABLE GGAP +A21E ; [.467F.0020.0002] # YI SYLLABLE GGUOT +A21F ; [.4680.0020.0002] # YI SYLLABLE GGUOX +A220 ; [.4681.0020.0002] # YI SYLLABLE GGUO +A221 ; [.4682.0020.0002] # YI SYLLABLE GGUOP +A222 ; [.4683.0020.0002] # YI SYLLABLE GGOT +A223 ; [.4684.0020.0002] # YI SYLLABLE GGOX +A224 ; [.4685.0020.0002] # YI SYLLABLE GGO +A225 ; [.4686.0020.0002] # YI SYLLABLE GGOP +A226 ; [.4687.0020.0002] # YI SYLLABLE GGET +A227 ; [.4688.0020.0002] # YI SYLLABLE GGEX +A228 ; [.4689.0020.0002] # YI SYLLABLE GGE +A229 ; [.468A.0020.0002] # YI SYLLABLE GGEP +A22A ; [.468B.0020.0002] # YI SYLLABLE GGUT +A22B ; [.468C.0020.0002] # YI SYLLABLE GGUX +A22C ; [.468D.0020.0002] # YI SYLLABLE GGU +A22D ; [.468E.0020.0002] # YI SYLLABLE GGUP +A22E ; [.468F.0020.0002] # YI SYLLABLE GGURX +A22F ; [.4690.0020.0002] # YI SYLLABLE GGUR +A230 ; [.4691.0020.0002] # YI SYLLABLE MGIEX +A231 ; [.4692.0020.0002] # YI SYLLABLE MGIE +A232 ; [.4693.0020.0002] # YI SYLLABLE MGAT +A233 ; [.4694.0020.0002] # YI SYLLABLE MGAX +A234 ; [.4695.0020.0002] # YI SYLLABLE MGA +A235 ; [.4696.0020.0002] # YI SYLLABLE MGAP +A236 ; [.4697.0020.0002] # YI SYLLABLE MGUOX +A237 ; [.4698.0020.0002] # YI SYLLABLE MGUO +A238 ; [.4699.0020.0002] # YI SYLLABLE MGUOP +A239 ; [.469A.0020.0002] # YI SYLLABLE MGOT +A23A ; [.469B.0020.0002] # YI SYLLABLE MGOX +A23B ; [.469C.0020.0002] # YI SYLLABLE MGO +A23C ; [.469D.0020.0002] # YI SYLLABLE MGOP +A23D ; [.469E.0020.0002] # YI SYLLABLE MGEX +A23E ; [.469F.0020.0002] # YI SYLLABLE MGE +A23F ; [.46A0.0020.0002] # YI SYLLABLE MGEP +A240 ; [.46A1.0020.0002] # YI SYLLABLE MGUT +A241 ; [.46A2.0020.0002] # YI SYLLABLE MGUX +A242 ; [.46A3.0020.0002] # YI SYLLABLE MGU +A243 ; [.46A4.0020.0002] # YI SYLLABLE MGUP +A244 ; [.46A5.0020.0002] # YI SYLLABLE MGURX +A245 ; [.46A6.0020.0002] # YI SYLLABLE MGUR +A246 ; [.46A7.0020.0002] # YI SYLLABLE HXIT +A247 ; [.46A8.0020.0002] # YI SYLLABLE HXIX +A248 ; [.46A9.0020.0002] # YI SYLLABLE HXI +A249 ; [.46AA.0020.0002] # YI SYLLABLE HXIP +A24A ; [.46AB.0020.0002] # YI SYLLABLE HXIET +A24B ; [.46AC.0020.0002] # YI SYLLABLE HXIEX +A24C ; [.46AD.0020.0002] # YI SYLLABLE HXIE +A24D ; [.46AE.0020.0002] # YI SYLLABLE HXIEP +A24E ; [.46AF.0020.0002] # YI SYLLABLE HXAT +A24F ; [.46B0.0020.0002] # YI SYLLABLE HXAX +A250 ; [.46B1.0020.0002] # YI SYLLABLE HXA +A251 ; [.46B2.0020.0002] # YI SYLLABLE HXAP +A252 ; [.46B3.0020.0002] # YI SYLLABLE HXUOT +A253 ; [.46B4.0020.0002] # YI SYLLABLE HXUOX +A254 ; [.46B5.0020.0002] # YI SYLLABLE HXUO +A255 ; [.46B6.0020.0002] # YI SYLLABLE HXUOP +A256 ; [.46B7.0020.0002] # YI SYLLABLE HXOT +A257 ; [.46B8.0020.0002] # YI SYLLABLE HXOX +A258 ; [.46B9.0020.0002] # YI SYLLABLE HXO +A259 ; [.46BA.0020.0002] # YI SYLLABLE HXOP +A25A ; [.46BB.0020.0002] # YI SYLLABLE HXEX +A25B ; [.46BC.0020.0002] # YI SYLLABLE HXE +A25C ; [.46BD.0020.0002] # YI SYLLABLE HXEP +A25D ; [.46BE.0020.0002] # YI SYLLABLE NGIEX +A25E ; [.46BF.0020.0002] # YI SYLLABLE NGIE +A25F ; [.46C0.0020.0002] # YI SYLLABLE NGIEP +A260 ; [.46C1.0020.0002] # YI SYLLABLE NGAT +A261 ; [.46C2.0020.0002] # YI SYLLABLE NGAX +A262 ; [.46C3.0020.0002] # YI SYLLABLE NGA +A263 ; [.46C4.0020.0002] # YI SYLLABLE NGAP +A264 ; [.46C5.0020.0002] # YI SYLLABLE NGUOT +A265 ; [.46C6.0020.0002] # YI SYLLABLE NGUOX +A266 ; [.46C7.0020.0002] # YI SYLLABLE NGUO +A267 ; [.46C8.0020.0002] # YI SYLLABLE NGOT +A268 ; [.46C9.0020.0002] # YI SYLLABLE NGOX +A269 ; [.46CA.0020.0002] # YI SYLLABLE NGO +A26A ; [.46CB.0020.0002] # YI SYLLABLE NGOP +A26B ; [.46CC.0020.0002] # YI SYLLABLE NGEX +A26C ; [.46CD.0020.0002] # YI SYLLABLE NGE +A26D ; [.46CE.0020.0002] # YI SYLLABLE NGEP +A26E ; [.46CF.0020.0002] # YI SYLLABLE HIT +A26F ; [.46D0.0020.0002] # YI SYLLABLE HIEX +A270 ; [.46D1.0020.0002] # YI SYLLABLE HIE +A271 ; [.46D2.0020.0002] # YI SYLLABLE HAT +A272 ; [.46D3.0020.0002] # YI SYLLABLE HAX +A273 ; [.46D4.0020.0002] # YI SYLLABLE HA +A274 ; [.46D5.0020.0002] # YI SYLLABLE HAP +A275 ; [.46D6.0020.0002] # YI SYLLABLE HUOT +A276 ; [.46D7.0020.0002] # YI SYLLABLE HUOX +A277 ; [.46D8.0020.0002] # YI SYLLABLE HUO +A278 ; [.46D9.0020.0002] # YI SYLLABLE HUOP +A279 ; [.46DA.0020.0002] # YI SYLLABLE HOT +A27A ; [.46DB.0020.0002] # YI SYLLABLE HOX +A27B ; [.46DC.0020.0002] # YI SYLLABLE HO +A27C ; [.46DD.0020.0002] # YI SYLLABLE HOP +A27D ; [.46DE.0020.0002] # YI SYLLABLE HEX +A27E ; [.46DF.0020.0002] # YI SYLLABLE HE +A27F ; [.46E0.0020.0002] # YI SYLLABLE HEP +A280 ; [.46E1.0020.0002] # YI SYLLABLE WAT +A281 ; [.46E2.0020.0002] # YI SYLLABLE WAX +A282 ; [.46E3.0020.0002] # YI SYLLABLE WA +A283 ; [.46E4.0020.0002] # YI SYLLABLE WAP +A284 ; [.46E5.0020.0002] # YI SYLLABLE WUOX +A285 ; [.46E6.0020.0002] # YI SYLLABLE WUO +A286 ; [.46E7.0020.0002] # YI SYLLABLE WUOP +A287 ; [.46E8.0020.0002] # YI SYLLABLE WOX +A288 ; [.46E9.0020.0002] # YI SYLLABLE WO +A289 ; [.46EA.0020.0002] # YI SYLLABLE WOP +A28A ; [.46EB.0020.0002] # YI SYLLABLE WEX +A28B ; [.46EC.0020.0002] # YI SYLLABLE WE +A28C ; [.46ED.0020.0002] # YI SYLLABLE WEP +A28D ; [.46EE.0020.0002] # YI SYLLABLE ZIT +A28E ; [.46EF.0020.0002] # YI SYLLABLE ZIX +A28F ; [.46F0.0020.0002] # YI SYLLABLE ZI +A290 ; [.46F1.0020.0002] # YI SYLLABLE ZIP +A291 ; [.46F2.0020.0002] # YI SYLLABLE ZIEX +A292 ; [.46F3.0020.0002] # YI SYLLABLE ZIE +A293 ; [.46F4.0020.0002] # YI SYLLABLE ZIEP +A294 ; [.46F5.0020.0002] # YI SYLLABLE ZAT +A295 ; [.46F6.0020.0002] # YI SYLLABLE ZAX +A296 ; [.46F7.0020.0002] # YI SYLLABLE ZA +A297 ; [.46F8.0020.0002] # YI SYLLABLE ZAP +A298 ; [.46F9.0020.0002] # YI SYLLABLE ZUOX +A299 ; [.46FA.0020.0002] # YI SYLLABLE ZUO +A29A ; [.46FB.0020.0002] # YI SYLLABLE ZUOP +A29B ; [.46FC.0020.0002] # YI SYLLABLE ZOT +A29C ; [.46FD.0020.0002] # YI SYLLABLE ZOX +A29D ; [.46FE.0020.0002] # YI SYLLABLE ZO +A29E ; [.46FF.0020.0002] # YI SYLLABLE ZOP +A29F ; [.4700.0020.0002] # YI SYLLABLE ZEX +A2A0 ; [.4701.0020.0002] # YI SYLLABLE ZE +A2A1 ; [.4702.0020.0002] # YI SYLLABLE ZEP +A2A2 ; [.4703.0020.0002] # YI SYLLABLE ZUT +A2A3 ; [.4704.0020.0002] # YI SYLLABLE ZUX +A2A4 ; [.4705.0020.0002] # YI SYLLABLE ZU +A2A5 ; [.4706.0020.0002] # YI SYLLABLE ZUP +A2A6 ; [.4707.0020.0002] # YI SYLLABLE ZURX +A2A7 ; [.4708.0020.0002] # YI SYLLABLE ZUR +A2A8 ; [.4709.0020.0002] # YI SYLLABLE ZYT +A2A9 ; [.470A.0020.0002] # YI SYLLABLE ZYX +A2AA ; [.470B.0020.0002] # YI SYLLABLE ZY +A2AB ; [.470C.0020.0002] # YI SYLLABLE ZYP +A2AC ; [.470D.0020.0002] # YI SYLLABLE ZYRX +A2AD ; [.470E.0020.0002] # YI SYLLABLE ZYR +A2AE ; [.470F.0020.0002] # YI SYLLABLE CIT +A2AF ; [.4710.0020.0002] # YI SYLLABLE CIX +A2B0 ; [.4711.0020.0002] # YI SYLLABLE CI +A2B1 ; [.4712.0020.0002] # YI SYLLABLE CIP +A2B2 ; [.4713.0020.0002] # YI SYLLABLE CIET +A2B3 ; [.4714.0020.0002] # YI SYLLABLE CIEX +A2B4 ; [.4715.0020.0002] # YI SYLLABLE CIE +A2B5 ; [.4716.0020.0002] # YI SYLLABLE CIEP +A2B6 ; [.4717.0020.0002] # YI SYLLABLE CAT +A2B7 ; [.4718.0020.0002] # YI SYLLABLE CAX +A2B8 ; [.4719.0020.0002] # YI SYLLABLE CA +A2B9 ; [.471A.0020.0002] # YI SYLLABLE CAP +A2BA ; [.471B.0020.0002] # YI SYLLABLE CUOX +A2BB ; [.471C.0020.0002] # YI SYLLABLE CUO +A2BC ; [.471D.0020.0002] # YI SYLLABLE CUOP +A2BD ; [.471E.0020.0002] # YI SYLLABLE COT +A2BE ; [.471F.0020.0002] # YI SYLLABLE COX +A2BF ; [.4720.0020.0002] # YI SYLLABLE CO +A2C0 ; [.4721.0020.0002] # YI SYLLABLE COP +A2C1 ; [.4722.0020.0002] # YI SYLLABLE CEX +A2C2 ; [.4723.0020.0002] # YI SYLLABLE CE +A2C3 ; [.4724.0020.0002] # YI SYLLABLE CEP +A2C4 ; [.4725.0020.0002] # YI SYLLABLE CUT +A2C5 ; [.4726.0020.0002] # YI SYLLABLE CUX +A2C6 ; [.4727.0020.0002] # YI SYLLABLE CU +A2C7 ; [.4728.0020.0002] # YI SYLLABLE CUP +A2C8 ; [.4729.0020.0002] # YI SYLLABLE CURX +A2C9 ; [.472A.0020.0002] # YI SYLLABLE CUR +A2CA ; [.472B.0020.0002] # YI SYLLABLE CYT +A2CB ; [.472C.0020.0002] # YI SYLLABLE CYX +A2CC ; [.472D.0020.0002] # YI SYLLABLE CY +A2CD ; [.472E.0020.0002] # YI SYLLABLE CYP +A2CE ; [.472F.0020.0002] # YI SYLLABLE CYRX +A2CF ; [.4730.0020.0002] # YI SYLLABLE CYR +A2D0 ; [.4731.0020.0002] # YI SYLLABLE ZZIT +A2D1 ; [.4732.0020.0002] # YI SYLLABLE ZZIX +A2D2 ; [.4733.0020.0002] # YI SYLLABLE ZZI +A2D3 ; [.4734.0020.0002] # YI SYLLABLE ZZIP +A2D4 ; [.4735.0020.0002] # YI SYLLABLE ZZIET +A2D5 ; [.4736.0020.0002] # YI SYLLABLE ZZIEX +A2D6 ; [.4737.0020.0002] # YI SYLLABLE ZZIE +A2D7 ; [.4738.0020.0002] # YI SYLLABLE ZZIEP +A2D8 ; [.4739.0020.0002] # YI SYLLABLE ZZAT +A2D9 ; [.473A.0020.0002] # YI SYLLABLE ZZAX +A2DA ; [.473B.0020.0002] # YI SYLLABLE ZZA +A2DB ; [.473C.0020.0002] # YI SYLLABLE ZZAP +A2DC ; [.473D.0020.0002] # YI SYLLABLE ZZOX +A2DD ; [.473E.0020.0002] # YI SYLLABLE ZZO +A2DE ; [.473F.0020.0002] # YI SYLLABLE ZZOP +A2DF ; [.4740.0020.0002] # YI SYLLABLE ZZEX +A2E0 ; [.4741.0020.0002] # YI SYLLABLE ZZE +A2E1 ; [.4742.0020.0002] # YI SYLLABLE ZZEP +A2E2 ; [.4743.0020.0002] # YI SYLLABLE ZZUX +A2E3 ; [.4744.0020.0002] # YI SYLLABLE ZZU +A2E4 ; [.4745.0020.0002] # YI SYLLABLE ZZUP +A2E5 ; [.4746.0020.0002] # YI SYLLABLE ZZURX +A2E6 ; [.4747.0020.0002] # YI SYLLABLE ZZUR +A2E7 ; [.4748.0020.0002] # YI SYLLABLE ZZYT +A2E8 ; [.4749.0020.0002] # YI SYLLABLE ZZYX +A2E9 ; [.474A.0020.0002] # YI SYLLABLE ZZY +A2EA ; [.474B.0020.0002] # YI SYLLABLE ZZYP +A2EB ; [.474C.0020.0002] # YI SYLLABLE ZZYRX +A2EC ; [.474D.0020.0002] # YI SYLLABLE ZZYR +A2ED ; [.474E.0020.0002] # YI SYLLABLE NZIT +A2EE ; [.474F.0020.0002] # YI SYLLABLE NZIX +A2EF ; [.4750.0020.0002] # YI SYLLABLE NZI +A2F0 ; [.4751.0020.0002] # YI SYLLABLE NZIP +A2F1 ; [.4752.0020.0002] # YI SYLLABLE NZIEX +A2F2 ; [.4753.0020.0002] # YI SYLLABLE NZIE +A2F3 ; [.4754.0020.0002] # YI SYLLABLE NZIEP +A2F4 ; [.4755.0020.0002] # YI SYLLABLE NZAT +A2F5 ; [.4756.0020.0002] # YI SYLLABLE NZAX +A2F6 ; [.4757.0020.0002] # YI SYLLABLE NZA +A2F7 ; [.4758.0020.0002] # YI SYLLABLE NZAP +A2F8 ; [.4759.0020.0002] # YI SYLLABLE NZUOX +A2F9 ; [.475A.0020.0002] # YI SYLLABLE NZUO +A2FA ; [.475B.0020.0002] # YI SYLLABLE NZOX +A2FB ; [.475C.0020.0002] # YI SYLLABLE NZOP +A2FC ; [.475D.0020.0002] # YI SYLLABLE NZEX +A2FD ; [.475E.0020.0002] # YI SYLLABLE NZE +A2FE ; [.475F.0020.0002] # YI SYLLABLE NZUX +A2FF ; [.4760.0020.0002] # YI SYLLABLE NZU +A300 ; [.4761.0020.0002] # YI SYLLABLE NZUP +A301 ; [.4762.0020.0002] # YI SYLLABLE NZURX +A302 ; [.4763.0020.0002] # YI SYLLABLE NZUR +A303 ; [.4764.0020.0002] # YI SYLLABLE NZYT +A304 ; [.4765.0020.0002] # YI SYLLABLE NZYX +A305 ; [.4766.0020.0002] # YI SYLLABLE NZY +A306 ; [.4767.0020.0002] # YI SYLLABLE NZYP +A307 ; [.4768.0020.0002] # YI SYLLABLE NZYRX +A308 ; [.4769.0020.0002] # YI SYLLABLE NZYR +A309 ; [.476A.0020.0002] # YI SYLLABLE SIT +A30A ; [.476B.0020.0002] # YI SYLLABLE SIX +A30B ; [.476C.0020.0002] # YI SYLLABLE SI +A30C ; [.476D.0020.0002] # YI SYLLABLE SIP +A30D ; [.476E.0020.0002] # YI SYLLABLE SIEX +A30E ; [.476F.0020.0002] # YI SYLLABLE SIE +A30F ; [.4770.0020.0002] # YI SYLLABLE SIEP +A310 ; [.4771.0020.0002] # YI SYLLABLE SAT +A311 ; [.4772.0020.0002] # YI SYLLABLE SAX +A312 ; [.4773.0020.0002] # YI SYLLABLE SA +A313 ; [.4774.0020.0002] # YI SYLLABLE SAP +A314 ; [.4775.0020.0002] # YI SYLLABLE SUOX +A315 ; [.4776.0020.0002] # YI SYLLABLE SUO +A316 ; [.4777.0020.0002] # YI SYLLABLE SUOP +A317 ; [.4778.0020.0002] # YI SYLLABLE SOT +A318 ; [.4779.0020.0002] # YI SYLLABLE SOX +A319 ; [.477A.0020.0002] # YI SYLLABLE SO +A31A ; [.477B.0020.0002] # YI SYLLABLE SOP +A31B ; [.477C.0020.0002] # YI SYLLABLE SEX +A31C ; [.477D.0020.0002] # YI SYLLABLE SE +A31D ; [.477E.0020.0002] # YI SYLLABLE SEP +A31E ; [.477F.0020.0002] # YI SYLLABLE SUT +A31F ; [.4780.0020.0002] # YI SYLLABLE SUX +A320 ; [.4781.0020.0002] # YI SYLLABLE SU +A321 ; [.4782.0020.0002] # YI SYLLABLE SUP +A322 ; [.4783.0020.0002] # YI SYLLABLE SURX +A323 ; [.4784.0020.0002] # YI SYLLABLE SUR +A324 ; [.4785.0020.0002] # YI SYLLABLE SYT +A325 ; [.4786.0020.0002] # YI SYLLABLE SYX +A326 ; [.4787.0020.0002] # YI SYLLABLE SY +A327 ; [.4788.0020.0002] # YI SYLLABLE SYP +A328 ; [.4789.0020.0002] # YI SYLLABLE SYRX +A329 ; [.478A.0020.0002] # YI SYLLABLE SYR +A32A ; [.478B.0020.0002] # YI SYLLABLE SSIT +A32B ; [.478C.0020.0002] # YI SYLLABLE SSIX +A32C ; [.478D.0020.0002] # YI SYLLABLE SSI +A32D ; [.478E.0020.0002] # YI SYLLABLE SSIP +A32E ; [.478F.0020.0002] # YI SYLLABLE SSIEX +A32F ; [.4790.0020.0002] # YI SYLLABLE SSIE +A330 ; [.4791.0020.0002] # YI SYLLABLE SSIEP +A331 ; [.4792.0020.0002] # YI SYLLABLE SSAT +A332 ; [.4793.0020.0002] # YI SYLLABLE SSAX +A333 ; [.4794.0020.0002] # YI SYLLABLE SSA +A334 ; [.4795.0020.0002] # YI SYLLABLE SSAP +A335 ; [.4796.0020.0002] # YI SYLLABLE SSOT +A336 ; [.4797.0020.0002] # YI SYLLABLE SSOX +A337 ; [.4798.0020.0002] # YI SYLLABLE SSO +A338 ; [.4799.0020.0002] # YI SYLLABLE SSOP +A339 ; [.479A.0020.0002] # YI SYLLABLE SSEX +A33A ; [.479B.0020.0002] # YI SYLLABLE SSE +A33B ; [.479C.0020.0002] # YI SYLLABLE SSEP +A33C ; [.479D.0020.0002] # YI SYLLABLE SSUT +A33D ; [.479E.0020.0002] # YI SYLLABLE SSUX +A33E ; [.479F.0020.0002] # YI SYLLABLE SSU +A33F ; [.47A0.0020.0002] # YI SYLLABLE SSUP +A340 ; [.47A1.0020.0002] # YI SYLLABLE SSYT +A341 ; [.47A2.0020.0002] # YI SYLLABLE SSYX +A342 ; [.47A3.0020.0002] # YI SYLLABLE SSY +A343 ; [.47A4.0020.0002] # YI SYLLABLE SSYP +A344 ; [.47A5.0020.0002] # YI SYLLABLE SSYRX +A345 ; [.47A6.0020.0002] # YI SYLLABLE SSYR +A346 ; [.47A7.0020.0002] # YI SYLLABLE ZHAT +A347 ; [.47A8.0020.0002] # YI SYLLABLE ZHAX +A348 ; [.47A9.0020.0002] # YI SYLLABLE ZHA +A349 ; [.47AA.0020.0002] # YI SYLLABLE ZHAP +A34A ; [.47AB.0020.0002] # YI SYLLABLE ZHUOX +A34B ; [.47AC.0020.0002] # YI SYLLABLE ZHUO +A34C ; [.47AD.0020.0002] # YI SYLLABLE ZHUOP +A34D ; [.47AE.0020.0002] # YI SYLLABLE ZHOT +A34E ; [.47AF.0020.0002] # YI SYLLABLE ZHOX +A34F ; [.47B0.0020.0002] # YI SYLLABLE ZHO +A350 ; [.47B1.0020.0002] # YI SYLLABLE ZHOP +A351 ; [.47B2.0020.0002] # YI SYLLABLE ZHET +A352 ; [.47B3.0020.0002] # YI SYLLABLE ZHEX +A353 ; [.47B4.0020.0002] # YI SYLLABLE ZHE +A354 ; [.47B5.0020.0002] # YI SYLLABLE ZHEP +A355 ; [.47B6.0020.0002] # YI SYLLABLE ZHUT +A356 ; [.47B7.0020.0002] # YI SYLLABLE ZHUX +A357 ; [.47B8.0020.0002] # YI SYLLABLE ZHU +A358 ; [.47B9.0020.0002] # YI SYLLABLE ZHUP +A359 ; [.47BA.0020.0002] # YI SYLLABLE ZHURX +A35A ; [.47BB.0020.0002] # YI SYLLABLE ZHUR +A35B ; [.47BC.0020.0002] # YI SYLLABLE ZHYT +A35C ; [.47BD.0020.0002] # YI SYLLABLE ZHYX +A35D ; [.47BE.0020.0002] # YI SYLLABLE ZHY +A35E ; [.47BF.0020.0002] # YI SYLLABLE ZHYP +A35F ; [.47C0.0020.0002] # YI SYLLABLE ZHYRX +A360 ; [.47C1.0020.0002] # YI SYLLABLE ZHYR +A361 ; [.47C2.0020.0002] # YI SYLLABLE CHAT +A362 ; [.47C3.0020.0002] # YI SYLLABLE CHAX +A363 ; [.47C4.0020.0002] # YI SYLLABLE CHA +A364 ; [.47C5.0020.0002] # YI SYLLABLE CHAP +A365 ; [.47C6.0020.0002] # YI SYLLABLE CHUOT +A366 ; [.47C7.0020.0002] # YI SYLLABLE CHUOX +A367 ; [.47C8.0020.0002] # YI SYLLABLE CHUO +A368 ; [.47C9.0020.0002] # YI SYLLABLE CHUOP +A369 ; [.47CA.0020.0002] # YI SYLLABLE CHOT +A36A ; [.47CB.0020.0002] # YI SYLLABLE CHOX +A36B ; [.47CC.0020.0002] # YI SYLLABLE CHO +A36C ; [.47CD.0020.0002] # YI SYLLABLE CHOP +A36D ; [.47CE.0020.0002] # YI SYLLABLE CHET +A36E ; [.47CF.0020.0002] # YI SYLLABLE CHEX +A36F ; [.47D0.0020.0002] # YI SYLLABLE CHE +A370 ; [.47D1.0020.0002] # YI SYLLABLE CHEP +A371 ; [.47D2.0020.0002] # YI SYLLABLE CHUX +A372 ; [.47D3.0020.0002] # YI SYLLABLE CHU +A373 ; [.47D4.0020.0002] # YI SYLLABLE CHUP +A374 ; [.47D5.0020.0002] # YI SYLLABLE CHURX +A375 ; [.47D6.0020.0002] # YI SYLLABLE CHUR +A376 ; [.47D7.0020.0002] # YI SYLLABLE CHYT +A377 ; [.47D8.0020.0002] # YI SYLLABLE CHYX +A378 ; [.47D9.0020.0002] # YI SYLLABLE CHY +A379 ; [.47DA.0020.0002] # YI SYLLABLE CHYP +A37A ; [.47DB.0020.0002] # YI SYLLABLE CHYRX +A37B ; [.47DC.0020.0002] # YI SYLLABLE CHYR +A37C ; [.47DD.0020.0002] # YI SYLLABLE RRAX +A37D ; [.47DE.0020.0002] # YI SYLLABLE RRA +A37E ; [.47DF.0020.0002] # YI SYLLABLE RRUOX +A37F ; [.47E0.0020.0002] # YI SYLLABLE RRUO +A380 ; [.47E1.0020.0002] # YI SYLLABLE RROT +A381 ; [.47E2.0020.0002] # YI SYLLABLE RROX +A382 ; [.47E3.0020.0002] # YI SYLLABLE RRO +A383 ; [.47E4.0020.0002] # YI SYLLABLE RROP +A384 ; [.47E5.0020.0002] # YI SYLLABLE RRET +A385 ; [.47E6.0020.0002] # YI SYLLABLE RREX +A386 ; [.47E7.0020.0002] # YI SYLLABLE RRE +A387 ; [.47E8.0020.0002] # YI SYLLABLE RREP +A388 ; [.47E9.0020.0002] # YI SYLLABLE RRUT +A389 ; [.47EA.0020.0002] # YI SYLLABLE RRUX +A38A ; [.47EB.0020.0002] # YI SYLLABLE RRU +A38B ; [.47EC.0020.0002] # YI SYLLABLE RRUP +A38C ; [.47ED.0020.0002] # YI SYLLABLE RRURX +A38D ; [.47EE.0020.0002] # YI SYLLABLE RRUR +A38E ; [.47EF.0020.0002] # YI SYLLABLE RRYT +A38F ; [.47F0.0020.0002] # YI SYLLABLE RRYX +A390 ; [.47F1.0020.0002] # YI SYLLABLE RRY +A391 ; [.47F2.0020.0002] # YI SYLLABLE RRYP +A392 ; [.47F3.0020.0002] # YI SYLLABLE RRYRX +A393 ; [.47F4.0020.0002] # YI SYLLABLE RRYR +A394 ; [.47F5.0020.0002] # YI SYLLABLE NRAT +A395 ; [.47F6.0020.0002] # YI SYLLABLE NRAX +A396 ; [.47F7.0020.0002] # YI SYLLABLE NRA +A397 ; [.47F8.0020.0002] # YI SYLLABLE NRAP +A398 ; [.47F9.0020.0002] # YI SYLLABLE NROX +A399 ; [.47FA.0020.0002] # YI SYLLABLE NRO +A39A ; [.47FB.0020.0002] # YI SYLLABLE NROP +A39B ; [.47FC.0020.0002] # YI SYLLABLE NRET +A39C ; [.47FD.0020.0002] # YI SYLLABLE NREX +A39D ; [.47FE.0020.0002] # YI SYLLABLE NRE +A39E ; [.47FF.0020.0002] # YI SYLLABLE NREP +A39F ; [.4800.0020.0002] # YI SYLLABLE NRUT +A3A0 ; [.4801.0020.0002] # YI SYLLABLE NRUX +A3A1 ; [.4802.0020.0002] # YI SYLLABLE NRU +A3A2 ; [.4803.0020.0002] # YI SYLLABLE NRUP +A3A3 ; [.4804.0020.0002] # YI SYLLABLE NRURX +A3A4 ; [.4805.0020.0002] # YI SYLLABLE NRUR +A3A5 ; [.4806.0020.0002] # YI SYLLABLE NRYT +A3A6 ; [.4807.0020.0002] # YI SYLLABLE NRYX +A3A7 ; [.4808.0020.0002] # YI SYLLABLE NRY +A3A8 ; [.4809.0020.0002] # YI SYLLABLE NRYP +A3A9 ; [.480A.0020.0002] # YI SYLLABLE NRYRX +A3AA ; [.480B.0020.0002] # YI SYLLABLE NRYR +A3AB ; [.480C.0020.0002] # YI SYLLABLE SHAT +A3AC ; [.480D.0020.0002] # YI SYLLABLE SHAX +A3AD ; [.480E.0020.0002] # YI SYLLABLE SHA +A3AE ; [.480F.0020.0002] # YI SYLLABLE SHAP +A3AF ; [.4810.0020.0002] # YI SYLLABLE SHUOX +A3B0 ; [.4811.0020.0002] # YI SYLLABLE SHUO +A3B1 ; [.4812.0020.0002] # YI SYLLABLE SHUOP +A3B2 ; [.4813.0020.0002] # YI SYLLABLE SHOT +A3B3 ; [.4814.0020.0002] # YI SYLLABLE SHOX +A3B4 ; [.4815.0020.0002] # YI SYLLABLE SHO +A3B5 ; [.4816.0020.0002] # YI SYLLABLE SHOP +A3B6 ; [.4817.0020.0002] # YI SYLLABLE SHET +A3B7 ; [.4818.0020.0002] # YI SYLLABLE SHEX +A3B8 ; [.4819.0020.0002] # YI SYLLABLE SHE +A3B9 ; [.481A.0020.0002] # YI SYLLABLE SHEP +A3BA ; [.481B.0020.0002] # YI SYLLABLE SHUT +A3BB ; [.481C.0020.0002] # YI SYLLABLE SHUX +A3BC ; [.481D.0020.0002] # YI SYLLABLE SHU +A3BD ; [.481E.0020.0002] # YI SYLLABLE SHUP +A3BE ; [.481F.0020.0002] # YI SYLLABLE SHURX +A3BF ; [.4820.0020.0002] # YI SYLLABLE SHUR +A3C0 ; [.4821.0020.0002] # YI SYLLABLE SHYT +A3C1 ; [.4822.0020.0002] # YI SYLLABLE SHYX +A3C2 ; [.4823.0020.0002] # YI SYLLABLE SHY +A3C3 ; [.4824.0020.0002] # YI SYLLABLE SHYP +A3C4 ; [.4825.0020.0002] # YI SYLLABLE SHYRX +A3C5 ; [.4826.0020.0002] # YI SYLLABLE SHYR +A3C6 ; [.4827.0020.0002] # YI SYLLABLE RAT +A3C7 ; [.4828.0020.0002] # YI SYLLABLE RAX +A3C8 ; [.4829.0020.0002] # YI SYLLABLE RA +A3C9 ; [.482A.0020.0002] # YI SYLLABLE RAP +A3CA ; [.482B.0020.0002] # YI SYLLABLE RUOX +A3CB ; [.482C.0020.0002] # YI SYLLABLE RUO +A3CC ; [.482D.0020.0002] # YI SYLLABLE RUOP +A3CD ; [.482E.0020.0002] # YI SYLLABLE ROT +A3CE ; [.482F.0020.0002] # YI SYLLABLE ROX +A3CF ; [.4830.0020.0002] # YI SYLLABLE RO +A3D0 ; [.4831.0020.0002] # YI SYLLABLE ROP +A3D1 ; [.4832.0020.0002] # YI SYLLABLE REX +A3D2 ; [.4833.0020.0002] # YI SYLLABLE RE +A3D3 ; [.4834.0020.0002] # YI SYLLABLE REP +A3D4 ; [.4835.0020.0002] # YI SYLLABLE RUT +A3D5 ; [.4836.0020.0002] # YI SYLLABLE RUX +A3D6 ; [.4837.0020.0002] # YI SYLLABLE RU +A3D7 ; [.4838.0020.0002] # YI SYLLABLE RUP +A3D8 ; [.4839.0020.0002] # YI SYLLABLE RURX +A3D9 ; [.483A.0020.0002] # YI SYLLABLE RUR +A3DA ; [.483B.0020.0002] # YI SYLLABLE RYT +A3DB ; [.483C.0020.0002] # YI SYLLABLE RYX +A3DC ; [.483D.0020.0002] # YI SYLLABLE RY +A3DD ; [.483E.0020.0002] # YI SYLLABLE RYP +A3DE ; [.483F.0020.0002] # YI SYLLABLE RYRX +A3DF ; [.4840.0020.0002] # YI SYLLABLE RYR +A3E0 ; [.4841.0020.0002] # YI SYLLABLE JIT +A3E1 ; [.4842.0020.0002] # YI SYLLABLE JIX +A3E2 ; [.4843.0020.0002] # YI SYLLABLE JI +A3E3 ; [.4844.0020.0002] # YI SYLLABLE JIP +A3E4 ; [.4845.0020.0002] # YI SYLLABLE JIET +A3E5 ; [.4846.0020.0002] # YI SYLLABLE JIEX +A3E6 ; [.4847.0020.0002] # YI SYLLABLE JIE +A3E7 ; [.4848.0020.0002] # YI SYLLABLE JIEP +A3E8 ; [.4849.0020.0002] # YI SYLLABLE JUOT +A3E9 ; [.484A.0020.0002] # YI SYLLABLE JUOX +A3EA ; [.484B.0020.0002] # YI SYLLABLE JUO +A3EB ; [.484C.0020.0002] # YI SYLLABLE JUOP +A3EC ; [.484D.0020.0002] # YI SYLLABLE JOT +A3ED ; [.484E.0020.0002] # YI SYLLABLE JOX +A3EE ; [.484F.0020.0002] # YI SYLLABLE JO +A3EF ; [.4850.0020.0002] # YI SYLLABLE JOP +A3F0 ; [.4851.0020.0002] # YI SYLLABLE JUT +A3F1 ; [.4852.0020.0002] # YI SYLLABLE JUX +A3F2 ; [.4853.0020.0002] # YI SYLLABLE JU +A3F3 ; [.4854.0020.0002] # YI SYLLABLE JUP +A3F4 ; [.4855.0020.0002] # YI SYLLABLE JURX +A3F5 ; [.4856.0020.0002] # YI SYLLABLE JUR +A3F6 ; [.4857.0020.0002] # YI SYLLABLE JYT +A3F7 ; [.4858.0020.0002] # YI SYLLABLE JYX +A3F8 ; [.4859.0020.0002] # YI SYLLABLE JY +A3F9 ; [.485A.0020.0002] # YI SYLLABLE JYP +A3FA ; [.485B.0020.0002] # YI SYLLABLE JYRX +A3FB ; [.485C.0020.0002] # YI SYLLABLE JYR +A3FC ; [.485D.0020.0002] # YI SYLLABLE QIT +A3FD ; [.485E.0020.0002] # YI SYLLABLE QIX +A3FE ; [.485F.0020.0002] # YI SYLLABLE QI +A3FF ; [.4860.0020.0002] # YI SYLLABLE QIP +A400 ; [.4861.0020.0002] # YI SYLLABLE QIET +A401 ; [.4862.0020.0002] # YI SYLLABLE QIEX +A402 ; [.4863.0020.0002] # YI SYLLABLE QIE +A403 ; [.4864.0020.0002] # YI SYLLABLE QIEP +A404 ; [.4865.0020.0002] # YI SYLLABLE QUOT +A405 ; [.4866.0020.0002] # YI SYLLABLE QUOX +A406 ; [.4867.0020.0002] # YI SYLLABLE QUO +A407 ; [.4868.0020.0002] # YI SYLLABLE QUOP +A408 ; [.4869.0020.0002] # YI SYLLABLE QOT +A409 ; [.486A.0020.0002] # YI SYLLABLE QOX +A40A ; [.486B.0020.0002] # YI SYLLABLE QO +A40B ; [.486C.0020.0002] # YI SYLLABLE QOP +A40C ; [.486D.0020.0002] # YI SYLLABLE QUT +A40D ; [.486E.0020.0002] # YI SYLLABLE QUX +A40E ; [.486F.0020.0002] # YI SYLLABLE QU +A40F ; [.4870.0020.0002] # YI SYLLABLE QUP +A410 ; [.4871.0020.0002] # YI SYLLABLE QURX +A411 ; [.4872.0020.0002] # YI SYLLABLE QUR +A412 ; [.4873.0020.0002] # YI SYLLABLE QYT +A413 ; [.4874.0020.0002] # YI SYLLABLE QYX +A414 ; [.4875.0020.0002] # YI SYLLABLE QY +A415 ; [.4876.0020.0002] # YI SYLLABLE QYP +A416 ; [.4877.0020.0002] # YI SYLLABLE QYRX +A417 ; [.4878.0020.0002] # YI SYLLABLE QYR +A418 ; [.4879.0020.0002] # YI SYLLABLE JJIT +A419 ; [.487A.0020.0002] # YI SYLLABLE JJIX +A41A ; [.487B.0020.0002] # YI SYLLABLE JJI +A41B ; [.487C.0020.0002] # YI SYLLABLE JJIP +A41C ; [.487D.0020.0002] # YI SYLLABLE JJIET +A41D ; [.487E.0020.0002] # YI SYLLABLE JJIEX +A41E ; [.487F.0020.0002] # YI SYLLABLE JJIE +A41F ; [.4880.0020.0002] # YI SYLLABLE JJIEP +A420 ; [.4881.0020.0002] # YI SYLLABLE JJUOX +A421 ; [.4882.0020.0002] # YI SYLLABLE JJUO +A422 ; [.4883.0020.0002] # YI SYLLABLE JJUOP +A423 ; [.4884.0020.0002] # YI SYLLABLE JJOT +A424 ; [.4885.0020.0002] # YI SYLLABLE JJOX +A425 ; [.4886.0020.0002] # YI SYLLABLE JJO +A426 ; [.4887.0020.0002] # YI SYLLABLE JJOP +A427 ; [.4888.0020.0002] # YI SYLLABLE JJUT +A428 ; [.4889.0020.0002] # YI SYLLABLE JJUX +A429 ; [.488A.0020.0002] # YI SYLLABLE JJU +A42A ; [.488B.0020.0002] # YI SYLLABLE JJUP +A42B ; [.488C.0020.0002] # YI SYLLABLE JJURX +A42C ; [.488D.0020.0002] # YI SYLLABLE JJUR +A42D ; [.488E.0020.0002] # YI SYLLABLE JJYT +A42E ; [.488F.0020.0002] # YI SYLLABLE JJYX +A42F ; [.4890.0020.0002] # YI SYLLABLE JJY +A430 ; [.4891.0020.0002] # YI SYLLABLE JJYP +A431 ; [.4892.0020.0002] # YI SYLLABLE NJIT +A432 ; [.4893.0020.0002] # YI SYLLABLE NJIX +A433 ; [.4894.0020.0002] # YI SYLLABLE NJI +A434 ; [.4895.0020.0002] # YI SYLLABLE NJIP +A435 ; [.4896.0020.0002] # YI SYLLABLE NJIET +A436 ; [.4897.0020.0002] # YI SYLLABLE NJIEX +A437 ; [.4898.0020.0002] # YI SYLLABLE NJIE +A438 ; [.4899.0020.0002] # YI SYLLABLE NJIEP +A439 ; [.489A.0020.0002] # YI SYLLABLE NJUOX +A43A ; [.489B.0020.0002] # YI SYLLABLE NJUO +A43B ; [.489C.0020.0002] # YI SYLLABLE NJOT +A43C ; [.489D.0020.0002] # YI SYLLABLE NJOX +A43D ; [.489E.0020.0002] # YI SYLLABLE NJO +A43E ; [.489F.0020.0002] # YI SYLLABLE NJOP +A43F ; [.48A0.0020.0002] # YI SYLLABLE NJUX +A440 ; [.48A1.0020.0002] # YI SYLLABLE NJU +A441 ; [.48A2.0020.0002] # YI SYLLABLE NJUP +A442 ; [.48A3.0020.0002] # YI SYLLABLE NJURX +A443 ; [.48A4.0020.0002] # YI SYLLABLE NJUR +A444 ; [.48A5.0020.0002] # YI SYLLABLE NJYT +A445 ; [.48A6.0020.0002] # YI SYLLABLE NJYX +A446 ; [.48A7.0020.0002] # YI SYLLABLE NJY +A447 ; [.48A8.0020.0002] # YI SYLLABLE NJYP +A448 ; [.48A9.0020.0002] # YI SYLLABLE NJYRX +A449 ; [.48AA.0020.0002] # YI SYLLABLE NJYR +A44A ; [.48AB.0020.0002] # YI SYLLABLE NYIT +A44B ; [.48AC.0020.0002] # YI SYLLABLE NYIX +A44C ; [.48AD.0020.0002] # YI SYLLABLE NYI +A44D ; [.48AE.0020.0002] # YI SYLLABLE NYIP +A44E ; [.48AF.0020.0002] # YI SYLLABLE NYIET +A44F ; [.48B0.0020.0002] # YI SYLLABLE NYIEX +A450 ; [.48B1.0020.0002] # YI SYLLABLE NYIE +A451 ; [.48B2.0020.0002] # YI SYLLABLE NYIEP +A452 ; [.48B3.0020.0002] # YI SYLLABLE NYUOX +A453 ; [.48B4.0020.0002] # YI SYLLABLE NYUO +A454 ; [.48B5.0020.0002] # YI SYLLABLE NYUOP +A455 ; [.48B6.0020.0002] # YI SYLLABLE NYOT +A456 ; [.48B7.0020.0002] # YI SYLLABLE NYOX +A457 ; [.48B8.0020.0002] # YI SYLLABLE NYO +A458 ; [.48B9.0020.0002] # YI SYLLABLE NYOP +A459 ; [.48BA.0020.0002] # YI SYLLABLE NYUT +A45A ; [.48BB.0020.0002] # YI SYLLABLE NYUX +A45B ; [.48BC.0020.0002] # YI SYLLABLE NYU +A45C ; [.48BD.0020.0002] # YI SYLLABLE NYUP +A45D ; [.48BE.0020.0002] # YI SYLLABLE XIT +A45E ; [.48BF.0020.0002] # YI SYLLABLE XIX +A45F ; [.48C0.0020.0002] # YI SYLLABLE XI +A460 ; [.48C1.0020.0002] # YI SYLLABLE XIP +A461 ; [.48C2.0020.0002] # YI SYLLABLE XIET +A462 ; [.48C3.0020.0002] # YI SYLLABLE XIEX +A463 ; [.48C4.0020.0002] # YI SYLLABLE XIE +A464 ; [.48C5.0020.0002] # YI SYLLABLE XIEP +A465 ; [.48C6.0020.0002] # YI SYLLABLE XUOX +A466 ; [.48C7.0020.0002] # YI SYLLABLE XUO +A467 ; [.48C8.0020.0002] # YI SYLLABLE XOT +A468 ; [.48C9.0020.0002] # YI SYLLABLE XOX +A469 ; [.48CA.0020.0002] # YI SYLLABLE XO +A46A ; [.48CB.0020.0002] # YI SYLLABLE XOP +A46B ; [.48CC.0020.0002] # YI SYLLABLE XYT +A46C ; [.48CD.0020.0002] # YI SYLLABLE XYX +A46D ; [.48CE.0020.0002] # YI SYLLABLE XY +A46E ; [.48CF.0020.0002] # YI SYLLABLE XYP +A46F ; [.48D0.0020.0002] # YI SYLLABLE XYRX +A470 ; [.48D1.0020.0002] # YI SYLLABLE XYR +A471 ; [.48D2.0020.0002] # YI SYLLABLE YIT +A472 ; [.48D3.0020.0002] # YI SYLLABLE YIX +A473 ; [.48D4.0020.0002] # YI SYLLABLE YI +A474 ; [.48D5.0020.0002] # YI SYLLABLE YIP +A475 ; [.48D6.0020.0002] # YI SYLLABLE YIET +A476 ; [.48D7.0020.0002] # YI SYLLABLE YIEX +A477 ; [.48D8.0020.0002] # YI SYLLABLE YIE +A478 ; [.48D9.0020.0002] # YI SYLLABLE YIEP +A479 ; [.48DA.0020.0002] # YI SYLLABLE YUOT +A47A ; [.48DB.0020.0002] # YI SYLLABLE YUOX +A47B ; [.48DC.0020.0002] # YI SYLLABLE YUO +A47C ; [.48DD.0020.0002] # YI SYLLABLE YUOP +A47D ; [.48DE.0020.0002] # YI SYLLABLE YOT +A47E ; [.48DF.0020.0002] # YI SYLLABLE YOX +A47F ; [.48E0.0020.0002] # YI SYLLABLE YO +A480 ; [.48E1.0020.0002] # YI SYLLABLE YOP +A481 ; [.48E2.0020.0002] # YI SYLLABLE YUT +A482 ; [.48E3.0020.0002] # YI SYLLABLE YUX +A483 ; [.48E4.0020.0002] # YI SYLLABLE YU +A484 ; [.48E5.0020.0002] # YI SYLLABLE YUP +A485 ; [.48E6.0020.0002] # YI SYLLABLE YURX +A486 ; [.48E7.0020.0002] # YI SYLLABLE YUR +A487 ; [.48E8.0020.0002] # YI SYLLABLE YYT +A488 ; [.48E9.0020.0002] # YI SYLLABLE YYX +A489 ; [.48EA.0020.0002] # YI SYLLABLE YY +A48A ; [.48EB.0020.0002] # YI SYLLABLE YYP +A48B ; [.48EC.0020.0002] # YI SYLLABLE YYRX +A48C ; [.48ED.0020.0002] # YI SYLLABLE YYR +A4F8 ; [.48EE.0020.0002] # LISU LETTER TONE MYA TI +A4F9 ; [.48EF.0020.0002] # LISU LETTER TONE NA PO +A4FA ; [.48F0.0020.0002] # LISU LETTER TONE MYA CYA +A4FB ; [.48F1.0020.0002] # LISU LETTER TONE MYA BO +A4FD ; [.48F2.0020.0002] # LISU LETTER TONE MYA JEU +A4FC ; [.48F3.0020.0002] # LISU LETTER TONE MYA NA +A4D0 ; [.48F4.0020.0002] # LISU LETTER BA +A4D1 ; [.48F5.0020.0002] # LISU LETTER PA +A4D2 ; [.48F6.0020.0002] # LISU LETTER PHA +A4D3 ; [.48F7.0020.0002] # LISU LETTER DA +A4D4 ; [.48F8.0020.0002] # LISU LETTER TA +A4D5 ; [.48F9.0020.0002] # LISU LETTER THA +A4D6 ; [.48FA.0020.0002] # LISU LETTER GA +A4D7 ; [.48FB.0020.0002] # LISU LETTER KA +A4D8 ; [.48FC.0020.0002] # LISU LETTER KHA +A4D9 ; [.48FD.0020.0002] # LISU LETTER JA +A4DA ; [.48FE.0020.0002] # LISU LETTER CA +A4DB ; [.48FF.0020.0002] # LISU LETTER CHA +A4DC ; [.4900.0020.0002] # LISU LETTER DZA +A4DD ; [.4901.0020.0002] # LISU LETTER TSA +A4DE ; [.4902.0020.0002] # LISU LETTER TSHA +A4DF ; [.4903.0020.0002] # LISU LETTER MA +A4E0 ; [.4904.0020.0002] # LISU LETTER NA +A4E1 ; [.4905.0020.0002] # LISU LETTER LA +A4E2 ; [.4906.0020.0002] # LISU LETTER SA +A4E3 ; [.4907.0020.0002] # LISU LETTER ZHA +A4E4 ; [.4908.0020.0002] # LISU LETTER ZA +A4E5 ; [.4909.0020.0002] # LISU LETTER NGA +A4E6 ; [.490A.0020.0002] # LISU LETTER HA +A4E7 ; [.490B.0020.0002] # LISU LETTER XA +A4E8 ; [.490C.0020.0002] # LISU LETTER HHA +A4E9 ; [.490D.0020.0002] # LISU LETTER FA +A4EB ; [.490E.0020.0002] # LISU LETTER SHA +A4ED ; [.490F.0020.0002] # LISU LETTER GHA +A4EA ; [.4910.0020.0002] # LISU LETTER WA +A4EC ; [.4911.0020.0002] # LISU LETTER YA +11FB0 ; [.4912.0020.0002] # LISU LETTER YHA +A4EE ; [.4913.0020.0002] # LISU LETTER A +A4EF ; [.4914.0020.0002] # LISU LETTER AE +A4F0 ; [.4915.0020.0002] # LISU LETTER E +A4F1 ; [.4916.0020.0002] # LISU LETTER EU +A4F2 ; [.4917.0020.0002] # LISU LETTER I +A4F3 ; [.4918.0020.0002] # LISU LETTER O +A4F4 ; [.4919.0020.0002] # LISU LETTER U +A4F5 ; [.491A.0020.0002] # LISU LETTER UE +A4F6 ; [.491B.0020.0002] # LISU LETTER UH +A4F7 ; [.491C.0020.0002] # LISU LETTER OE +16F00 ; [.491D.0020.0002] # MIAO LETTER PA +16F01 ; [.491E.0020.0002] # MIAO LETTER BA +16F02 ; [.491F.0020.0002] # MIAO LETTER YI PA +16F03 ; [.4920.0020.0002] # MIAO LETTER PLA +16F45 ; [.4921.0020.0002] # MIAO LETTER BRI +16F04 ; [.4922.0020.0002] # MIAO LETTER MA +16F06 ; [.4922.0020.0004] # MIAO LETTER ARCHAIC MA +16F05 ; [.4923.0020.0002] # MIAO LETTER MHA +16F07 ; [.4924.0020.0002] # MIAO LETTER FA +16F08 ; [.4925.0020.0002] # MIAO LETTER VA +16F09 ; [.4926.0020.0002] # MIAO LETTER VFA +16F0A ; [.4927.0020.0002] # MIAO LETTER TA +16F0B ; [.4928.0020.0002] # MIAO LETTER DA +16F0C ; [.4929.0020.0002] # MIAO LETTER YI TTA +16F0D ; [.492A.0020.0002] # MIAO LETTER YI TA +16F48 ; [.492B.0020.0002] # MIAO LETTER TE +16F0E ; [.492C.0020.0002] # MIAO LETTER TTA +16F0F ; [.492D.0020.0002] # MIAO LETTER DDA +16F4A ; [.492E.0020.0002] # MIAO LETTER RTE +16F10 ; [.492F.0020.0002] # MIAO LETTER NA +16F13 ; [.492F.0020.0004] # MIAO LETTER ARCHAIC NA +16F11 ; [.4930.0020.0002] # MIAO LETTER NHA +16F12 ; [.4931.0020.0002] # MIAO LETTER YI NNA +16F14 ; [.4932.0020.0002] # MIAO LETTER NNA +16F15 ; [.4933.0020.0002] # MIAO LETTER NNHA +16F16 ; [.4934.0020.0002] # MIAO LETTER LA +16F17 ; [.4935.0020.0002] # MIAO LETTER LYA +16F18 ; [.4936.0020.0002] # MIAO LETTER LHA +16F19 ; [.4937.0020.0002] # MIAO LETTER LHYA +16F1A ; [.4938.0020.0002] # MIAO LETTER TLHA +16F1B ; [.4939.0020.0002] # MIAO LETTER DLHA +16F1C ; [.493A.0020.0002] # MIAO LETTER TLHYA +16F1D ; [.493B.0020.0002] # MIAO LETTER DLHYA +16F1E ; [.493C.0020.0002] # MIAO LETTER KA +16F1F ; [.493D.0020.0002] # MIAO LETTER GA +16F20 ; [.493E.0020.0002] # MIAO LETTER YI KA +16F21 ; [.493F.0020.0002] # MIAO LETTER QA +16F22 ; [.4940.0020.0002] # MIAO LETTER QGA +16F23 ; [.4941.0020.0002] # MIAO LETTER NGA +16F25 ; [.4941.0020.0004] # MIAO LETTER ARCHAIC NGA +16F24 ; [.4942.0020.0002] # MIAO LETTER NGHA +16F26 ; [.4943.0020.0002] # MIAO LETTER HA +16F27 ; [.4944.0020.0002] # MIAO LETTER XA +16F28 ; [.4945.0020.0002] # MIAO LETTER GHA +16F29 ; [.4946.0020.0002] # MIAO LETTER GHHA +16F2A ; [.4947.0020.0002] # MIAO LETTER TSSA +16F2B ; [.4948.0020.0002] # MIAO LETTER DZZA +16F2C ; [.4949.0020.0002] # MIAO LETTER NYA +16F2D ; [.494A.0020.0002] # MIAO LETTER NYHA +16F2E ; [.494B.0020.0002] # MIAO LETTER TSHA +16F2F ; [.494C.0020.0002] # MIAO LETTER DZHA +16F30 ; [.494D.0020.0002] # MIAO LETTER YI TSHA +16F31 ; [.494E.0020.0002] # MIAO LETTER YI DZHA +16F32 ; [.494F.0020.0002] # MIAO LETTER REFORMED TSHA +16F47 ; [.4950.0020.0002] # MIAO LETTER DZYI +16F33 ; [.4951.0020.0002] # MIAO LETTER SHA +16F46 ; [.4952.0020.0002] # MIAO LETTER SYI +16F34 ; [.4953.0020.0002] # MIAO LETTER SSA +16F35 ; [.4954.0020.0002] # MIAO LETTER ZHA +16F36 ; [.4955.0020.0002] # MIAO LETTER ZSHA +16F37 ; [.4956.0020.0002] # MIAO LETTER TSA +16F38 ; [.4957.0020.0002] # MIAO LETTER DZA +16F39 ; [.4958.0020.0002] # MIAO LETTER YI TSA +16F49 ; [.4959.0020.0002] # MIAO LETTER TSE +16F3A ; [.495A.0020.0002] # MIAO LETTER SA +16F3B ; [.495B.0020.0002] # MIAO LETTER ZA +16F3C ; [.495C.0020.0002] # MIAO LETTER ZSA +16F3D ; [.495D.0020.0002] # MIAO LETTER ZZA +16F3F ; [.495D.0020.0004] # MIAO LETTER ARCHAIC ZZA +16F3E ; [.495E.0020.0002] # MIAO LETTER ZZSA +16F40 ; [.495F.0020.0002] # MIAO LETTER ZZYA +16F41 ; [.4960.0020.0002] # MIAO LETTER ZZSYA +16F42 ; [.4961.0020.0002] # MIAO LETTER WA +16F43 ; [.4962.0020.0002] # MIAO LETTER AH +16F44 ; [.4963.0020.0002] # MIAO LETTER HHA +16F50 ; [.4964.0020.0002] # MIAO LETTER NASALIZATION +16F51 ; [.4965.0020.0002] # MIAO SIGN ASPIRATION +16F52 ; [.4966.0020.0002] # MIAO SIGN REFORMED VOICING +16F53 ; [.4967.0020.0002] # MIAO SIGN REFORMED ASPIRATION +16F4F ; [.4968.0020.0002] # MIAO SIGN CONSONANT MODIFIER BAR +16F54 ; [.4969.0020.0002] # MIAO VOWEL SIGN A +16F55 ; [.496A.0020.0002] # MIAO VOWEL SIGN AA +16F56 ; [.496B.0020.0002] # MIAO VOWEL SIGN AHH +16F57 ; [.496C.0020.0002] # MIAO VOWEL SIGN AN +16F58 ; [.496D.0020.0002] # MIAO VOWEL SIGN ANG +16F81 ; [.496E.0020.0002] # MIAO VOWEL SIGN OG +16F59 ; [.496F.0020.0002] # MIAO VOWEL SIGN O +16F5A ; [.4970.0020.0002] # MIAO VOWEL SIGN OO +16F5B ; [.4971.0020.0002] # MIAO VOWEL SIGN WO +16F5C ; [.4972.0020.0002] # MIAO VOWEL SIGN W +16F83 ; [.4973.0020.0002] # MIAO VOWEL SIGN VW +16F5D ; [.4974.0020.0002] # MIAO VOWEL SIGN E +16F5E ; [.4975.0020.0002] # MIAO VOWEL SIGN EN +16F5F ; [.4976.0020.0002] # MIAO VOWEL SIGN ENG +16F60 ; [.4977.0020.0002] # MIAO VOWEL SIGN OEY +16F84 ; [.4978.0020.0002] # MIAO VOWEL SIGN IG +16F61 ; [.4979.0020.0002] # MIAO VOWEL SIGN I +16F62 ; [.497A.0020.0002] # MIAO VOWEL SIGN IA +16F63 ; [.497B.0020.0002] # MIAO VOWEL SIGN IAN +16F64 ; [.497C.0020.0002] # MIAO VOWEL SIGN IANG +16F65 ; [.497D.0020.0002] # MIAO VOWEL SIGN IO +16F86 ; [.497E.0020.0002] # MIAO VOWEL SIGN IONG +16F66 ; [.497F.0020.0002] # MIAO VOWEL SIGN IE +16F67 ; [.4980.0020.0002] # MIAO VOWEL SIGN II +16F68 ; [.4981.0020.0002] # MIAO VOWEL SIGN IU +16F69 ; [.4982.0020.0002] # MIAO VOWEL SIGN ING +16F6A ; [.4983.0020.0002] # MIAO VOWEL SIGN U +16F6B ; [.4984.0020.0002] # MIAO VOWEL SIGN UA +16F6C ; [.4985.0020.0002] # MIAO VOWEL SIGN UAN +16F6D ; [.4986.0020.0002] # MIAO VOWEL SIGN UANG +16F7F ; [.4987.0020.0002] # MIAO VOWEL SIGN UOG +16F87 ; [.4988.0020.0002] # MIAO VOWEL SIGN UI +16F6E ; [.4989.0020.0002] # MIAO VOWEL SIGN UU +16F6F ; [.498A.0020.0002] # MIAO VOWEL SIGN UEI +16F70 ; [.498B.0020.0002] # MIAO VOWEL SIGN UNG +16F71 ; [.498C.0020.0002] # MIAO VOWEL SIGN Y +16F72 ; [.498D.0020.0002] # MIAO VOWEL SIGN YI +16F80 ; [.498E.0020.0002] # MIAO VOWEL SIGN YUI +16F73 ; [.498F.0020.0002] # MIAO VOWEL SIGN AE +16F74 ; [.4990.0020.0002] # MIAO VOWEL SIGN AEE +16F85 ; [.4991.0020.0002] # MIAO VOWEL SIGN EA +16F82 ; [.4992.0020.0002] # MIAO VOWEL SIGN OER +16F75 ; [.4993.0020.0002] # MIAO VOWEL SIGN ERR +16F76 ; [.4994.0020.0002] # MIAO VOWEL SIGN ROUNDED ERR +16F77 ; [.4995.0020.0002] # MIAO VOWEL SIGN ER +16F78 ; [.4996.0020.0002] # MIAO VOWEL SIGN ROUNDED ER +16F79 ; [.4997.0020.0002] # MIAO VOWEL SIGN AI +16F7A ; [.4998.0020.0002] # MIAO VOWEL SIGN EI +16F7B ; [.4999.0020.0002] # MIAO VOWEL SIGN AU +16F7C ; [.499A.0020.0002] # MIAO VOWEL SIGN OU +16F7D ; [.499B.0020.0002] # MIAO VOWEL SIGN N +16F7E ; [.499C.0020.0002] # MIAO VOWEL SIGN NG +16F8F ; [.499D.0020.0002] # MIAO TONE RIGHT +16F90 ; [.499E.0020.0002] # MIAO TONE TOP RIGHT +16F91 ; [.499F.0020.0002] # MIAO TONE ABOVE +16F92 ; [.49A0.0020.0002] # MIAO TONE BELOW +16F93 ; [.49A1.0020.0002] # MIAO LETTER TONE-2 +16F94 ; [.49A2.0020.0002] # MIAO LETTER TONE-3 +16F95 ; [.49A3.0020.0002] # MIAO LETTER TONE-4 +16F96 ; [.49A4.0020.0002] # MIAO LETTER TONE-5 +16F97 ; [.49A5.0020.0002] # MIAO LETTER TONE-6 +16F98 ; [.49A6.0020.0002] # MIAO LETTER TONE-7 +16F99 ; [.49A7.0020.0002] # MIAO LETTER TONE-8 +16F9A ; [.49A8.0020.0002] # MIAO LETTER REFORMED TONE-1 +16F9B ; [.49A9.0020.0002] # MIAO LETTER REFORMED TONE-2 +16F9C ; [.49AA.0020.0002] # MIAO LETTER REFORMED TONE-4 +16F9D ; [.49AB.0020.0002] # MIAO LETTER REFORMED TONE-5 +16F9E ; [.49AC.0020.0002] # MIAO LETTER REFORMED TONE-6 +16F9F ; [.49AD.0020.0002] # MIAO LETTER REFORMED TONE-8 +118FF ; [.49AE.0020.0002] # WARANG CITI OM +118C0 ; [.49AF.0020.0002] # WARANG CITI SMALL LETTER NGAA +118A0 ; [.49AF.0020.0008] # WARANG CITI CAPITAL LETTER NGAA +118C1 ; [.49B0.0020.0002] # WARANG CITI SMALL LETTER A +118A1 ; [.49B0.0020.0008] # WARANG CITI CAPITAL LETTER A +118C2 ; [.49B1.0020.0002] # WARANG CITI SMALL LETTER WI +118A2 ; [.49B1.0020.0008] # WARANG CITI CAPITAL LETTER WI +118C3 ; [.49B2.0020.0002] # WARANG CITI SMALL LETTER YU +118A3 ; [.49B2.0020.0008] # WARANG CITI CAPITAL LETTER YU +118C4 ; [.49B3.0020.0002] # WARANG CITI SMALL LETTER YA +118A4 ; [.49B3.0020.0008] # WARANG CITI CAPITAL LETTER YA +118C5 ; [.49B4.0020.0002] # WARANG CITI SMALL LETTER YO +118A5 ; [.49B4.0020.0008] # WARANG CITI CAPITAL LETTER YO +118C6 ; [.49B5.0020.0002] # WARANG CITI SMALL LETTER II +118A6 ; [.49B5.0020.0008] # WARANG CITI CAPITAL LETTER II +118C7 ; [.49B6.0020.0002] # WARANG CITI SMALL LETTER UU +118A7 ; [.49B6.0020.0008] # WARANG CITI CAPITAL LETTER UU +118C8 ; [.49B7.0020.0002] # WARANG CITI SMALL LETTER E +118A8 ; [.49B7.0020.0008] # WARANG CITI CAPITAL LETTER E +118C9 ; [.49B8.0020.0002] # WARANG CITI SMALL LETTER O +118A9 ; [.49B8.0020.0008] # WARANG CITI CAPITAL LETTER O +118CA ; [.49B9.0020.0002] # WARANG CITI SMALL LETTER ANG +118AA ; [.49B9.0020.0008] # WARANG CITI CAPITAL LETTER ANG +118CB ; [.49BA.0020.0002] # WARANG CITI SMALL LETTER GA +118AB ; [.49BA.0020.0008] # WARANG CITI CAPITAL LETTER GA +118CC ; [.49BB.0020.0002] # WARANG CITI SMALL LETTER KO +118AC ; [.49BB.0020.0008] # WARANG CITI CAPITAL LETTER KO +118CD ; [.49BC.0020.0002] # WARANG CITI SMALL LETTER ENY +118AD ; [.49BC.0020.0008] # WARANG CITI CAPITAL LETTER ENY +118CE ; [.49BD.0020.0002] # WARANG CITI SMALL LETTER YUJ +118AE ; [.49BD.0020.0008] # WARANG CITI CAPITAL LETTER YUJ +118CF ; [.49BE.0020.0002] # WARANG CITI SMALL LETTER UC +118AF ; [.49BE.0020.0008] # WARANG CITI CAPITAL LETTER UC +118D0 ; [.49BF.0020.0002] # WARANG CITI SMALL LETTER ENN +118B0 ; [.49BF.0020.0008] # WARANG CITI CAPITAL LETTER ENN +118D1 ; [.49C0.0020.0002] # WARANG CITI SMALL LETTER ODD +118B1 ; [.49C0.0020.0008] # WARANG CITI CAPITAL LETTER ODD +118D2 ; [.49C1.0020.0002] # WARANG CITI SMALL LETTER TTE +118B2 ; [.49C1.0020.0008] # WARANG CITI CAPITAL LETTER TTE +118D3 ; [.49C2.0020.0002] # WARANG CITI SMALL LETTER NUNG +118B3 ; [.49C2.0020.0008] # WARANG CITI CAPITAL LETTER NUNG +118D4 ; [.49C3.0020.0002] # WARANG CITI SMALL LETTER DA +118B4 ; [.49C3.0020.0008] # WARANG CITI CAPITAL LETTER DA +118D5 ; [.49C4.0020.0002] # WARANG CITI SMALL LETTER AT +118B5 ; [.49C4.0020.0008] # WARANG CITI CAPITAL LETTER AT +118D6 ; [.49C5.0020.0002] # WARANG CITI SMALL LETTER AM +118B6 ; [.49C5.0020.0008] # WARANG CITI CAPITAL LETTER AM +118D7 ; [.49C6.0020.0002] # WARANG CITI SMALL LETTER BU +118B7 ; [.49C6.0020.0008] # WARANG CITI CAPITAL LETTER BU +118D8 ; [.49C7.0020.0002] # WARANG CITI SMALL LETTER PU +118B8 ; [.49C7.0020.0008] # WARANG CITI CAPITAL LETTER PU +118D9 ; [.49C8.0020.0002] # WARANG CITI SMALL LETTER HIYO +118B9 ; [.49C8.0020.0008] # WARANG CITI CAPITAL LETTER HIYO +118DA ; [.49C9.0020.0002] # WARANG CITI SMALL LETTER HOLO +118BA ; [.49C9.0020.0008] # WARANG CITI CAPITAL LETTER HOLO +118DB ; [.49CA.0020.0002] # WARANG CITI SMALL LETTER HORR +118BB ; [.49CA.0020.0008] # WARANG CITI CAPITAL LETTER HORR +118DC ; [.49CB.0020.0002] # WARANG CITI SMALL LETTER HAR +118BC ; [.49CB.0020.0008] # WARANG CITI CAPITAL LETTER HAR +118DD ; [.49CC.0020.0002] # WARANG CITI SMALL LETTER SSUU +118BD ; [.49CC.0020.0008] # WARANG CITI CAPITAL LETTER SSUU +118DE ; [.49CD.0020.0002] # WARANG CITI SMALL LETTER SII +118BE ; [.49CD.0020.0008] # WARANG CITI CAPITAL LETTER SII +118DF ; [.49CE.0020.0002] # WARANG CITI SMALL LETTER VIYO +118BF ; [.49CE.0020.0008] # WARANG CITI CAPITAL LETTER VIYO +11AD5 ; [.49CF.0020.0002] # PAU CIN HAU LETTER A +11AD6 ; [.49D0.0020.0002] # PAU CIN HAU LETTER E +11AD7 ; [.49D1.0020.0002] # PAU CIN HAU LETTER I +11AD8 ; [.49D2.0020.0002] # PAU CIN HAU LETTER O +11AD9 ; [.49D3.0020.0002] # PAU CIN HAU LETTER U +11ADA ; [.49D4.0020.0002] # PAU CIN HAU LETTER UA +11ADB ; [.49D5.0020.0002] # PAU CIN HAU LETTER IA +11AC0 ; [.49D6.0020.0002] # PAU CIN HAU LETTER PA +11AC1 ; [.49D7.0020.0002] # PAU CIN HAU LETTER KA +11AC2 ; [.49D8.0020.0002] # PAU CIN HAU LETTER LA +11AC3 ; [.49D9.0020.0002] # PAU CIN HAU LETTER MA +11AC4 ; [.49DA.0020.0002] # PAU CIN HAU LETTER DA +11AC5 ; [.49DB.0020.0002] # PAU CIN HAU LETTER ZA +11AC6 ; [.49DC.0020.0002] # PAU CIN HAU LETTER VA +11AC7 ; [.49DD.0020.0002] # PAU CIN HAU LETTER NGA +11AC8 ; [.49DE.0020.0002] # PAU CIN HAU LETTER HA +11AC9 ; [.49DF.0020.0002] # PAU CIN HAU LETTER GA +11ACA ; [.49E0.0020.0002] # PAU CIN HAU LETTER KHA +11ACB ; [.49E1.0020.0002] # PAU CIN HAU LETTER SA +11ACC ; [.49E2.0020.0002] # PAU CIN HAU LETTER BA +11ACD ; [.49E3.0020.0002] # PAU CIN HAU LETTER CA +11ACE ; [.49E4.0020.0002] # PAU CIN HAU LETTER TA +11ACF ; [.49E5.0020.0002] # PAU CIN HAU LETTER THA +11AD0 ; [.49E6.0020.0002] # PAU CIN HAU LETTER NA +11AD1 ; [.49E7.0020.0002] # PAU CIN HAU LETTER PHA +11AD2 ; [.49E8.0020.0002] # PAU CIN HAU LETTER RA +11AD3 ; [.49E9.0020.0002] # PAU CIN HAU LETTER FA +11AD4 ; [.49EA.0020.0002] # PAU CIN HAU LETTER CHA +11ADC ; [.49EB.0020.0002] # PAU CIN HAU LETTER FINAL P +11ADD ; [.49EC.0020.0002] # PAU CIN HAU LETTER FINAL K +11ADF ; [.49ED.0020.0002] # PAU CIN HAU LETTER FINAL M +11AE0 ; [.49EE.0020.0002] # PAU CIN HAU LETTER FINAL N +11AE1 ; [.49EF.0020.0002] # PAU CIN HAU LETTER FINAL L +11AE2 ; [.49F0.0020.0002] # PAU CIN HAU LETTER FINAL W +11AE3 ; [.49F1.0020.0002] # PAU CIN HAU LETTER FINAL NG +11ADE ; [.49F2.0020.0002] # PAU CIN HAU LETTER FINAL T +11AE4 ; [.49F3.0020.0002] # PAU CIN HAU LETTER FINAL Y +11AEF ; [.49F4.0020.0002] # PAU CIN HAU MID-LEVEL TONE +11AF2 ; [.49F5.0020.0002] # PAU CIN HAU MID-LEVEL TONE FINAL +11AF1 ; [.49F6.0020.0002] # PAU CIN HAU MID-LEVEL TONE LONG FINAL +11AE6 ; [.49F7.0020.0002] # PAU CIN HAU RISING TONE +11AE9 ; [.49F8.0020.0002] # PAU CIN HAU RISING TONE FINAL +11AE5 ; [.49F9.0020.0002] # PAU CIN HAU RISING TONE LONG +11AE8 ; [.49FA.0020.0002] # PAU CIN HAU RISING TONE LONG FINAL +11AF4 ; [.49FB.0020.0002] # PAU CIN HAU LOW-FALLING TONE +11AF7 ; [.49FC.0020.0002] # PAU CIN HAU LOW-FALLING TONE FINAL +11AF3 ; [.49FD.0020.0002] # PAU CIN HAU LOW-FALLING TONE LONG +11AF6 ; [.49FE.0020.0002] # PAU CIN HAU LOW-FALLING TONE LONG FINAL +11AEC ; [.49FF.0020.0002] # PAU CIN HAU SANDHI TONE +11AEE ; [.4A00.0020.0002] # PAU CIN HAU SANDHI TONE FINAL +11AEB ; [.4A01.0020.0002] # PAU CIN HAU SANDHI TONE LONG +11AED ; [.4A02.0020.0002] # PAU CIN HAU SANDHI TONE LONG FINAL +11AF5 ; [.4A03.0020.0002] # PAU CIN HAU GLOTTAL STOP +11AF8 ; [.4A04.0020.0002] # PAU CIN HAU GLOTTAL STOP FINAL +11AE7 ; [.4A05.0020.0002] # PAU CIN HAU SANDHI GLOTTAL STOP +11AEA ; [.4A06.0020.0002] # PAU CIN HAU SANDHI GLOTTAL STOP FINAL +11AF0 ; [.4A07.0020.0002] # PAU CIN HAU GLOTTAL STOP VARIANT +16B00 ; [.4A08.0020.0002] # PAHAWH HMONG VOWEL KEEB +16B01 ; [.4A09.0020.0002] # PAHAWH HMONG VOWEL KEEV +16B02 ; [.4A0A.0020.0002] # PAHAWH HMONG VOWEL KIB +16B03 ; [.4A0B.0020.0002] # PAHAWH HMONG VOWEL KIV +16B04 ; [.4A0C.0020.0002] # PAHAWH HMONG VOWEL KAUB +16B05 ; [.4A0D.0020.0002] # PAHAWH HMONG VOWEL KAUV +16B06 ; [.4A0E.0020.0002] # PAHAWH HMONG VOWEL KUB +16B07 ; [.4A0F.0020.0002] # PAHAWH HMONG VOWEL KUV +16B08 ; [.4A10.0020.0002] # PAHAWH HMONG VOWEL KEB +16B09 ; [.4A11.0020.0002] # PAHAWH HMONG VOWEL KEV +16B0A ; [.4A12.0020.0002] # PAHAWH HMONG VOWEL KAIB +16B0B ; [.4A13.0020.0002] # PAHAWH HMONG VOWEL KAIV +16B0C ; [.4A14.0020.0002] # PAHAWH HMONG VOWEL KOOB +16B0D ; [.4A15.0020.0002] # PAHAWH HMONG VOWEL KOOV +16B0E ; [.4A16.0020.0002] # PAHAWH HMONG VOWEL KAWB +16B0F ; [.4A17.0020.0002] # PAHAWH HMONG VOWEL KAWV +16B10 ; [.4A18.0020.0002] # PAHAWH HMONG VOWEL KUAB +16B11 ; [.4A19.0020.0002] # PAHAWH HMONG VOWEL KUAV +16B12 ; [.4A1A.0020.0002] # PAHAWH HMONG VOWEL KOB +16B13 ; [.4A1B.0020.0002] # PAHAWH HMONG VOWEL KOV +16B14 ; [.4A1C.0020.0002] # PAHAWH HMONG VOWEL KIAB +16B15 ; [.4A1D.0020.0002] # PAHAWH HMONG VOWEL KIAV +16B16 ; [.4A1E.0020.0002] # PAHAWH HMONG VOWEL KAB +16B17 ; [.4A1F.0020.0002] # PAHAWH HMONG VOWEL KAV +16B18 ; [.4A20.0020.0002] # PAHAWH HMONG VOWEL KWB +16B19 ; [.4A21.0020.0002] # PAHAWH HMONG VOWEL KWV +16B1A ; [.4A22.0020.0002] # PAHAWH HMONG VOWEL KAAB +16B1B ; [.4A23.0020.0002] # PAHAWH HMONG VOWEL KAAV +16B1C ; [.4A24.0020.0002] # PAHAWH HMONG CONSONANT VAU +16B1D ; [.4A25.0020.0002] # PAHAWH HMONG CONSONANT NTSAU +16B1E ; [.4A26.0020.0002] # PAHAWH HMONG CONSONANT LAU +16B1F ; [.4A27.0020.0002] # PAHAWH HMONG CONSONANT HAU +16B20 ; [.4A28.0020.0002] # PAHAWH HMONG CONSONANT NLAU +16B21 ; [.4A29.0020.0002] # PAHAWH HMONG CONSONANT RAU +16B22 ; [.4A2A.0020.0002] # PAHAWH HMONG CONSONANT NKAU +16B23 ; [.4A2B.0020.0002] # PAHAWH HMONG CONSONANT QHAU +16B24 ; [.4A2C.0020.0002] # PAHAWH HMONG CONSONANT YAU +16B25 ; [.4A2D.0020.0002] # PAHAWH HMONG CONSONANT HLAU +16B26 ; [.4A2E.0020.0002] # PAHAWH HMONG CONSONANT MAU +16B27 ; [.4A2F.0020.0002] # PAHAWH HMONG CONSONANT CHAU +16B28 ; [.4A30.0020.0002] # PAHAWH HMONG CONSONANT NCHAU +16B29 ; [.4A31.0020.0002] # PAHAWH HMONG CONSONANT HNAU +16B2A ; [.4A32.0020.0002] # PAHAWH HMONG CONSONANT PLHAU +16B2B ; [.4A33.0020.0002] # PAHAWH HMONG CONSONANT NTHAU +16B2C ; [.4A34.0020.0002] # PAHAWH HMONG CONSONANT NAU +16B2D ; [.4A35.0020.0002] # PAHAWH HMONG CONSONANT AU +16B2E ; [.4A36.0020.0002] # PAHAWH HMONG CONSONANT XAU +16B2F ; [.4A37.0020.0002] # PAHAWH HMONG CONSONANT CAU +16B40 ; [.4A38.0020.0002] # PAHAWH HMONG SIGN VOS SEEV +16B41 ; [.4A39.0020.0002] # PAHAWH HMONG SIGN MEEJ SUAB +16B63 ; [.4A3A.0020.0002] # PAHAWH HMONG SIGN VOS LUB +16B64 ; [.4A3B.0020.0002] # PAHAWH HMONG SIGN XYOO +16B65 ; [.4A3C.0020.0002] # PAHAWH HMONG SIGN HLI +16B66 ; [.4A3D.0020.0002] # PAHAWH HMONG SIGN THIRD-STAGE HLI +16B67 ; [.4A3E.0020.0002] # PAHAWH HMONG SIGN ZWJ THAJ +16B68 ; [.4A3F.0020.0002] # PAHAWH HMONG SIGN HNUB +16B69 ; [.4A40.0020.0002] # PAHAWH HMONG SIGN NQIG +16B6A ; [.4A41.0020.0002] # PAHAWH HMONG SIGN XIAB +16B6B ; [.4A42.0020.0002] # PAHAWH HMONG SIGN NTUJ +16B6C ; [.4A43.0020.0002] # PAHAWH HMONG SIGN AV +16B6D ; [.4A44.0020.0002] # PAHAWH HMONG SIGN TXHEEJ CEEV +16B6E ; [.4A45.0020.0002] # PAHAWH HMONG SIGN MEEJ TSEEB +16B6F ; [.4A46.0020.0002] # PAHAWH HMONG SIGN TAU +16B70 ; [.4A47.0020.0002] # PAHAWH HMONG SIGN LOS +16B71 ; [.4A48.0020.0002] # PAHAWH HMONG SIGN MUS +16B72 ; [.4A49.0020.0002] # PAHAWH HMONG SIGN CIM HAIS LUS NTOG NTOG +16B73 ; [.4A4A.0020.0002] # PAHAWH HMONG SIGN CIM CUAM TSHOOJ +16B74 ; [.4A4B.0020.0002] # PAHAWH HMONG SIGN CIM TXWV +16B75 ; [.4A4C.0020.0002] # PAHAWH HMONG SIGN CIM TXWV CHWV +16B76 ; [.4A4D.0020.0002] # PAHAWH HMONG SIGN CIM PUB DAWB +16B77 ; [.4A4E.0020.0002] # PAHAWH HMONG SIGN CIM NRES TOS +16B7D ; [.4A4F.0020.0002] # PAHAWH HMONG CLAN SIGN TSHEEJ +16B7E ; [.4A50.0020.0002] # PAHAWH HMONG CLAN SIGN YEEG +16B7F ; [.4A51.0020.0002] # PAHAWH HMONG CLAN SIGN LIS +16B80 ; [.4A52.0020.0002] # PAHAWH HMONG CLAN SIGN LAUJ +16B81 ; [.4A53.0020.0002] # PAHAWH HMONG CLAN SIGN XYOOJ +16B82 ; [.4A54.0020.0002] # PAHAWH HMONG CLAN SIGN KOO +16B83 ; [.4A55.0020.0002] # PAHAWH HMONG CLAN SIGN HAWJ +16B84 ; [.4A56.0020.0002] # PAHAWH HMONG CLAN SIGN MUAS +16B85 ; [.4A57.0020.0002] # PAHAWH HMONG CLAN SIGN THOJ +16B86 ; [.4A58.0020.0002] # PAHAWH HMONG CLAN SIGN TSAB +16B87 ; [.4A59.0020.0002] # PAHAWH HMONG CLAN SIGN PHAB +16B88 ; [.4A5A.0020.0002] # PAHAWH HMONG CLAN SIGN KHAB +16B89 ; [.4A5B.0020.0002] # PAHAWH HMONG CLAN SIGN HAM +16B8A ; [.4A5C.0020.0002] # PAHAWH HMONG CLAN SIGN VAJ +16B8B ; [.4A5D.0020.0002] # PAHAWH HMONG CLAN SIGN FAJ +16B8C ; [.4A5E.0020.0002] # PAHAWH HMONG CLAN SIGN YAJ +16B8D ; [.4A5F.0020.0002] # PAHAWH HMONG CLAN SIGN TSWB +16B8E ; [.4A60.0020.0002] # PAHAWH HMONG CLAN SIGN KWM +16B8F ; [.4A61.0020.0002] # PAHAWH HMONG CLAN SIGN VWJ +1E100 ; [.4A62.0020.0002] # NYIAKENG PUACHUE HMONG LETTER MA +1E101 ; [.4A63.0020.0002] # NYIAKENG PUACHUE HMONG LETTER TSA +1E102 ; [.4A64.0020.0002] # NYIAKENG PUACHUE HMONG LETTER NTA +1E103 ; [.4A65.0020.0002] # NYIAKENG PUACHUE HMONG LETTER TA +1E104 ; [.4A66.0020.0002] # NYIAKENG PUACHUE HMONG LETTER HA +1E105 ; [.4A67.0020.0002] # NYIAKENG PUACHUE HMONG LETTER NA +1E106 ; [.4A68.0020.0002] # NYIAKENG PUACHUE HMONG LETTER XA +1E107 ; [.4A69.0020.0002] # NYIAKENG PUACHUE HMONG LETTER NKA +1E108 ; [.4A6A.0020.0002] # NYIAKENG PUACHUE HMONG LETTER CA +1E109 ; [.4A6B.0020.0002] # NYIAKENG PUACHUE HMONG LETTER LA +1E10A ; [.4A6C.0020.0002] # NYIAKENG PUACHUE HMONG LETTER SA +1E10B ; [.4A6D.0020.0002] # NYIAKENG PUACHUE HMONG LETTER ZA +1E10C ; [.4A6E.0020.0002] # NYIAKENG PUACHUE HMONG LETTER NCA +1E10D ; [.4A6F.0020.0002] # NYIAKENG PUACHUE HMONG LETTER NTSA +1E10E ; [.4A70.0020.0002] # NYIAKENG PUACHUE HMONG LETTER KA +1E10F ; [.4A71.0020.0002] # NYIAKENG PUACHUE HMONG LETTER DA +1E110 ; [.4A72.0020.0002] # NYIAKENG PUACHUE HMONG LETTER NYA +1E111 ; [.4A73.0020.0002] # NYIAKENG PUACHUE HMONG LETTER NRA +1E112 ; [.4A74.0020.0002] # NYIAKENG PUACHUE HMONG LETTER VA +1E113 ; [.4A75.0020.0002] # NYIAKENG PUACHUE HMONG LETTER NTXA +1E114 ; [.4A76.0020.0002] # NYIAKENG PUACHUE HMONG LETTER TXA +1E115 ; [.4A77.0020.0002] # NYIAKENG PUACHUE HMONG LETTER FA +1E116 ; [.4A78.0020.0002] # NYIAKENG PUACHUE HMONG LETTER RA +1E117 ; [.4A79.0020.0002] # NYIAKENG PUACHUE HMONG LETTER QA +1E118 ; [.4A7A.0020.0002] # NYIAKENG PUACHUE HMONG LETTER YA +1E119 ; [.4A7B.0020.0002] # NYIAKENG PUACHUE HMONG LETTER NQA +1E11A ; [.4A7C.0020.0002] # NYIAKENG PUACHUE HMONG LETTER PA +1E11B ; [.4A7D.0020.0002] # NYIAKENG PUACHUE HMONG LETTER XYA +1E11C ; [.4A7E.0020.0002] # NYIAKENG PUACHUE HMONG LETTER NPA +1E11D ; [.4A7F.0020.0002] # NYIAKENG PUACHUE HMONG LETTER DLA +1E11E ; [.4A80.0020.0002] # NYIAKENG PUACHUE HMONG LETTER NPLA +1E11F ; [.4A81.0020.0002] # NYIAKENG PUACHUE HMONG LETTER HAH +1E120 ; [.4A82.0020.0002] # NYIAKENG PUACHUE HMONG LETTER MLA +1E121 ; [.4A83.0020.0002] # NYIAKENG PUACHUE HMONG LETTER PLA +1E122 ; [.4A84.0020.0002] # NYIAKENG PUACHUE HMONG LETTER GA +1E123 ; [.4A85.0020.0002] # NYIAKENG PUACHUE HMONG LETTER RRA +1E124 ; [.4A86.0020.0002] # NYIAKENG PUACHUE HMONG LETTER A +1E125 ; [.4A87.0020.0002] # NYIAKENG PUACHUE HMONG LETTER AA +1E126 ; [.4A88.0020.0002] # NYIAKENG PUACHUE HMONG LETTER I +1E127 ; [.4A89.0020.0002] # NYIAKENG PUACHUE HMONG LETTER U +1E128 ; [.4A8A.0020.0002] # NYIAKENG PUACHUE HMONG LETTER O +1E129 ; [.4A8B.0020.0002] # NYIAKENG PUACHUE HMONG LETTER OO +1E12A ; [.4A8C.0020.0002] # NYIAKENG PUACHUE HMONG LETTER E +1E12B ; [.4A8D.0020.0002] # NYIAKENG PUACHUE HMONG LETTER EE +1E12C ; [.4A8E.0020.0002] # NYIAKENG PUACHUE HMONG LETTER W +1E137 ; [.4A8F.0020.0002] # NYIAKENG PUACHUE HMONG SIGN FOR PERSON +1E138 ; [.4A90.0020.0002] # NYIAKENG PUACHUE HMONG SIGN FOR THING +1E139 ; [.4A91.0020.0002] # NYIAKENG PUACHUE HMONG SIGN FOR LOCATION +1E13A ; [.4A92.0020.0002] # NYIAKENG PUACHUE HMONG SIGN FOR ANIMAL +1E13B ; [.4A93.0020.0002] # NYIAKENG PUACHUE HMONG SIGN FOR INVERTEBRATE +1E14E ; [.4A94.0020.0002] # NYIAKENG PUACHUE HMONG LOGOGRAM NYAJ +1E2C0 ; [.4A95.0020.0002] # WANCHO LETTER AA +1E2C1 ; [.4A96.0020.0002] # WANCHO LETTER A +1E2C2 ; [.4A97.0020.0002] # WANCHO LETTER BA +1E2C3 ; [.4A98.0020.0002] # WANCHO LETTER CA +1E2C4 ; [.4A99.0020.0002] # WANCHO LETTER DA +1E2C5 ; [.4A9A.0020.0002] # WANCHO LETTER GA +1E2C6 ; [.4A9B.0020.0002] # WANCHO LETTER YA +1E2C7 ; [.4A9C.0020.0002] # WANCHO LETTER PHA +1E2C8 ; [.4A9D.0020.0002] # WANCHO LETTER LA +1E2C9 ; [.4A9E.0020.0002] # WANCHO LETTER NA +1E2CA ; [.4A9F.0020.0002] # WANCHO LETTER PA +1E2CB ; [.4AA0.0020.0002] # WANCHO LETTER TA +1E2CC ; [.4AA1.0020.0002] # WANCHO LETTER THA +1E2CD ; [.4AA2.0020.0002] # WANCHO LETTER FA +1E2CE ; [.4AA3.0020.0002] # WANCHO LETTER SA +1E2CF ; [.4AA4.0020.0002] # WANCHO LETTER SHA +1E2D0 ; [.4AA5.0020.0002] # WANCHO LETTER JA +1E2D1 ; [.4AA6.0020.0002] # WANCHO LETTER ZA +1E2D2 ; [.4AA7.0020.0002] # WANCHO LETTER WA +1E2D3 ; [.4AA8.0020.0002] # WANCHO LETTER VA +1E2D4 ; [.4AA9.0020.0002] # WANCHO LETTER KA +1E2D5 ; [.4AAA.0020.0002] # WANCHO LETTER O +1E2D6 ; [.4AAB.0020.0002] # WANCHO LETTER AU +1E2D7 ; [.4AAC.0020.0002] # WANCHO LETTER RA +1E2D8 ; [.4AAD.0020.0002] # WANCHO LETTER MA +1E2D9 ; [.4AAE.0020.0002] # WANCHO LETTER KHA +1E2DA ; [.4AAF.0020.0002] # WANCHO LETTER HA +1E2DB ; [.4AB0.0020.0002] # WANCHO LETTER E +1E2DC ; [.4AB1.0020.0002] # WANCHO LETTER I +1E2DD ; [.4AB2.0020.0002] # WANCHO LETTER NGA +1E2DE ; [.4AB3.0020.0002] # WANCHO LETTER U +1E2DF ; [.4AB4.0020.0002] # WANCHO LETTER LLHA +1E2E0 ; [.4AB5.0020.0002] # WANCHO LETTER TSA +1E2E1 ; [.4AB6.0020.0002] # WANCHO LETTER TRA +1E2E2 ; [.4AB7.0020.0002] # WANCHO LETTER ONG +1E2E3 ; [.4AB8.0020.0002] # WANCHO LETTER AANG +1E2E4 ; [.4AB9.0020.0002] # WANCHO LETTER ANG +1E2E5 ; [.4ABA.0020.0002] # WANCHO LETTER ING +1E2E6 ; [.4ABB.0020.0002] # WANCHO LETTER ON +1E2E7 ; [.4ABC.0020.0002] # WANCHO LETTER EN +1E2E8 ; [.4ABD.0020.0002] # WANCHO LETTER AAN +1E2E9 ; [.4ABE.0020.0002] # WANCHO LETTER NYA +1E2EA ; [.4ABF.0020.0002] # WANCHO LETTER UEN +1E2EB ; [.4AC0.0020.0002] # WANCHO LETTER YIH +10280 ; [.4AC1.0020.0002] # LYCIAN LETTER A +10281 ; [.4AC2.0020.0002] # LYCIAN LETTER E +10282 ; [.4AC3.0020.0002] # LYCIAN LETTER B +10283 ; [.4AC4.0020.0002] # LYCIAN LETTER BH +10284 ; [.4AC5.0020.0002] # LYCIAN LETTER G +10285 ; [.4AC6.0020.0002] # LYCIAN LETTER D +10286 ; [.4AC7.0020.0002] # LYCIAN LETTER I +10287 ; [.4AC8.0020.0002] # LYCIAN LETTER W +10288 ; [.4AC9.0020.0002] # LYCIAN LETTER Z +10289 ; [.4ACA.0020.0002] # LYCIAN LETTER TH +1028A ; [.4ACB.0020.0002] # LYCIAN LETTER J +1028B ; [.4ACC.0020.0002] # LYCIAN LETTER K +1028C ; [.4ACD.0020.0002] # LYCIAN LETTER Q +1028D ; [.4ACE.0020.0002] # LYCIAN LETTER L +1028E ; [.4ACF.0020.0002] # LYCIAN LETTER M +1028F ; [.4AD0.0020.0002] # LYCIAN LETTER N +10290 ; [.4AD1.0020.0002] # LYCIAN LETTER MM +10291 ; [.4AD2.0020.0002] # LYCIAN LETTER NN +10292 ; [.4AD3.0020.0002] # LYCIAN LETTER U +10293 ; [.4AD4.0020.0002] # LYCIAN LETTER P +10294 ; [.4AD5.0020.0002] # LYCIAN LETTER KK +10295 ; [.4AD6.0020.0002] # LYCIAN LETTER R +10296 ; [.4AD7.0020.0002] # LYCIAN LETTER S +10297 ; [.4AD8.0020.0002] # LYCIAN LETTER T +10298 ; [.4AD9.0020.0002] # LYCIAN LETTER TT +10299 ; [.4ADA.0020.0002] # LYCIAN LETTER AN +1029A ; [.4ADB.0020.0002] # LYCIAN LETTER EN +1029B ; [.4ADC.0020.0002] # LYCIAN LETTER H +1029C ; [.4ADD.0020.0002] # LYCIAN LETTER X +102A0 ; [.4ADE.0020.0002] # CARIAN LETTER A +102A1 ; [.4ADF.0020.0002] # CARIAN LETTER P2 +102A2 ; [.4AE0.0020.0002] # CARIAN LETTER D +102A3 ; [.4AE1.0020.0002] # CARIAN LETTER L +102A4 ; [.4AE2.0020.0002] # CARIAN LETTER UUU +102A5 ; [.4AE3.0020.0002] # CARIAN LETTER R +102A6 ; [.4AE4.0020.0002] # CARIAN LETTER LD +102A7 ; [.4AE5.0020.0002] # CARIAN LETTER A2 +102A8 ; [.4AE6.0020.0002] # CARIAN LETTER Q +102A9 ; [.4AE7.0020.0002] # CARIAN LETTER B +102AA ; [.4AE8.0020.0002] # CARIAN LETTER M +102AB ; [.4AE9.0020.0002] # CARIAN LETTER O +102AC ; [.4AEA.0020.0002] # CARIAN LETTER D2 +102AD ; [.4AEB.0020.0002] # CARIAN LETTER T +102AE ; [.4AEC.0020.0002] # CARIAN LETTER SH +102AF ; [.4AED.0020.0002] # CARIAN LETTER SH2 +102B0 ; [.4AEE.0020.0002] # CARIAN LETTER S +102B1 ; [.4AEF.0020.0002] # CARIAN LETTER C-18 +102B2 ; [.4AF0.0020.0002] # CARIAN LETTER U +102B3 ; [.4AF1.0020.0002] # CARIAN LETTER NN +102B4 ; [.4AF2.0020.0002] # CARIAN LETTER X +102B5 ; [.4AF3.0020.0002] # CARIAN LETTER N +102B6 ; [.4AF4.0020.0002] # CARIAN LETTER TT2 +102B7 ; [.4AF5.0020.0002] # CARIAN LETTER P +102B8 ; [.4AF6.0020.0002] # CARIAN LETTER SS +102B9 ; [.4AF7.0020.0002] # CARIAN LETTER I +102BA ; [.4AF8.0020.0002] # CARIAN LETTER E +102BB ; [.4AF9.0020.0002] # CARIAN LETTER UUUU +102BC ; [.4AFA.0020.0002] # CARIAN LETTER K +102BD ; [.4AFB.0020.0002] # CARIAN LETTER K2 +102BE ; [.4AFC.0020.0002] # CARIAN LETTER ND +102BF ; [.4AFD.0020.0002] # CARIAN LETTER UU +102C0 ; [.4AFE.0020.0002] # CARIAN LETTER G +102C1 ; [.4AFF.0020.0002] # CARIAN LETTER G2 +102C2 ; [.4B00.0020.0002] # CARIAN LETTER ST +102C3 ; [.4B01.0020.0002] # CARIAN LETTER ST2 +102C4 ; [.4B02.0020.0002] # CARIAN LETTER NG +102C5 ; [.4B03.0020.0002] # CARIAN LETTER II +102C6 ; [.4B04.0020.0002] # CARIAN LETTER C-39 +102C7 ; [.4B05.0020.0002] # CARIAN LETTER TT +102C8 ; [.4B06.0020.0002] # CARIAN LETTER UUU2 +102C9 ; [.4B07.0020.0002] # CARIAN LETTER RR +102CA ; [.4B08.0020.0002] # CARIAN LETTER MB +102CB ; [.4B09.0020.0002] # CARIAN LETTER MB2 +102CC ; [.4B0A.0020.0002] # CARIAN LETTER MB3 +102CD ; [.4B0B.0020.0002] # CARIAN LETTER MB4 +102CE ; [.4B0C.0020.0002] # CARIAN LETTER LD2 +102CF ; [.4B0D.0020.0002] # CARIAN LETTER E2 +102D0 ; [.4B0E.0020.0002] # CARIAN LETTER UUU3 +10920 ; [.4B0F.0020.0002] # LYDIAN LETTER A +10921 ; [.4B10.0020.0002] # LYDIAN LETTER B +10922 ; [.4B11.0020.0002] # LYDIAN LETTER G +10923 ; [.4B12.0020.0002] # LYDIAN LETTER D +10924 ; [.4B13.0020.0002] # LYDIAN LETTER E +10925 ; [.4B14.0020.0002] # LYDIAN LETTER V +10926 ; [.4B15.0020.0002] # LYDIAN LETTER I +10927 ; [.4B16.0020.0002] # LYDIAN LETTER Y +10928 ; [.4B17.0020.0002] # LYDIAN LETTER K +10929 ; [.4B18.0020.0002] # LYDIAN LETTER L +1092A ; [.4B19.0020.0002] # LYDIAN LETTER M +1092B ; [.4B1A.0020.0002] # LYDIAN LETTER N +1092C ; [.4B1B.0020.0002] # LYDIAN LETTER O +1092D ; [.4B1C.0020.0002] # LYDIAN LETTER R +1092E ; [.4B1D.0020.0002] # LYDIAN LETTER SS +1092F ; [.4B1E.0020.0002] # LYDIAN LETTER T +10930 ; [.4B1F.0020.0002] # LYDIAN LETTER U +10931 ; [.4B20.0020.0002] # LYDIAN LETTER F +10932 ; [.4B21.0020.0002] # LYDIAN LETTER Q +10933 ; [.4B22.0020.0002] # LYDIAN LETTER S +10934 ; [.4B23.0020.0002] # LYDIAN LETTER TT +10935 ; [.4B24.0020.0002] # LYDIAN LETTER AN +10936 ; [.4B25.0020.0002] # LYDIAN LETTER EN +10937 ; [.4B26.0020.0002] # LYDIAN LETTER LY +10938 ; [.4B27.0020.0002] # LYDIAN LETTER NN +10939 ; [.4B28.0020.0002] # LYDIAN LETTER C +10300 ; [.4B29.0020.0002] # OLD ITALIC LETTER A +10301 ; [.4B2A.0020.0002] # OLD ITALIC LETTER BE +10302 ; [.4B2B.0020.0002] # OLD ITALIC LETTER KE +10303 ; [.4B2C.0020.0002] # OLD ITALIC LETTER DE +10304 ; [.4B2D.0020.0002] # OLD ITALIC LETTER E +10305 ; [.4B2E.0020.0002] # OLD ITALIC LETTER VE +10306 ; [.4B2F.0020.0002] # OLD ITALIC LETTER ZE +10307 ; [.4B30.0020.0002] # OLD ITALIC LETTER HE +10308 ; [.4B31.0020.0002] # OLD ITALIC LETTER THE +10309 ; [.4B32.0020.0002] # OLD ITALIC LETTER I +1030A ; [.4B33.0020.0002] # OLD ITALIC LETTER KA +1030B ; [.4B34.0020.0002] # OLD ITALIC LETTER EL +1030C ; [.4B35.0020.0002] # OLD ITALIC LETTER EM +1030D ; [.4B36.0020.0002] # OLD ITALIC LETTER EN +1030E ; [.4B37.0020.0002] # OLD ITALIC LETTER ESH +1031F ; [.4B38.0020.0002] # OLD ITALIC LETTER ESS +1030F ; [.4B39.0020.0002] # OLD ITALIC LETTER O +10310 ; [.4B3A.0020.0002] # OLD ITALIC LETTER PE +10311 ; [.4B3B.0020.0002] # OLD ITALIC LETTER SHE +10312 ; [.4B3C.0020.0002] # OLD ITALIC LETTER KU +10313 ; [.4B3D.0020.0002] # OLD ITALIC LETTER ER +10314 ; [.4B3E.0020.0002] # OLD ITALIC LETTER ES +10315 ; [.4B3F.0020.0002] # OLD ITALIC LETTER TE +10316 ; [.4B40.0020.0002] # OLD ITALIC LETTER U +10317 ; [.4B41.0020.0002] # OLD ITALIC LETTER EKS +10318 ; [.4B42.0020.0002] # OLD ITALIC LETTER PHE +10319 ; [.4B43.0020.0002] # OLD ITALIC LETTER KHE +1031A ; [.4B44.0020.0002] # OLD ITALIC LETTER EF +1031B ; [.4B45.0020.0002] # OLD ITALIC LETTER ERS +1031C ; [.4B46.0020.0002] # OLD ITALIC LETTER CHE +1031D ; [.4B47.0020.0002] # OLD ITALIC LETTER II +1031E ; [.4B48.0020.0002] # OLD ITALIC LETTER UU +1032D ; [.4B49.0020.0002] # OLD ITALIC LETTER YE +1032E ; [.4B4A.0020.0002] # OLD ITALIC LETTER NORTHERN TSE +1032F ; [.4B4B.0020.0002] # OLD ITALIC LETTER SOUTHERN TSE +10330 ; [.4B4C.0020.0002] # GOTHIC LETTER AHSA +10331 ; [.4B4D.0020.0002] # GOTHIC LETTER BAIRKAN +10332 ; [.4B4E.0020.0002] # GOTHIC LETTER GIBA +10333 ; [.4B4F.0020.0002] # GOTHIC LETTER DAGS +10334 ; [.4B50.0020.0002] # GOTHIC LETTER AIHVUS +10335 ; [.4B51.0020.0002] # GOTHIC LETTER QAIRTHRA +10336 ; [.4B52.0020.0002] # GOTHIC LETTER IUJA +10337 ; [.4B53.0020.0002] # GOTHIC LETTER HAGL +10338 ; [.4B54.0020.0002] # GOTHIC LETTER THIUTH +10339 ; [.4B55.0020.0002] # GOTHIC LETTER EIS +1033A ; [.4B56.0020.0002] # GOTHIC LETTER KUSMA +1033B ; [.4B57.0020.0002] # GOTHIC LETTER LAGUS +1033C ; [.4B58.0020.0002] # GOTHIC LETTER MANNA +1033D ; [.4B59.0020.0002] # GOTHIC LETTER NAUTHS +1033E ; [.4B5A.0020.0002] # GOTHIC LETTER JER +1033F ; [.4B5B.0020.0002] # GOTHIC LETTER URUS +10340 ; [.4B5C.0020.0002] # GOTHIC LETTER PAIRTHRA +10341 ; [.4B5D.0020.0002] # GOTHIC LETTER NINETY +10342 ; [.4B5E.0020.0002] # GOTHIC LETTER RAIDA +10343 ; [.4B5F.0020.0002] # GOTHIC LETTER SAUIL +10344 ; [.4B60.0020.0002] # GOTHIC LETTER TEIWS +10345 ; [.4B61.0020.0002] # GOTHIC LETTER WINJA +10346 ; [.4B62.0020.0002] # GOTHIC LETTER FAIHU +10347 ; [.4B63.0020.0002] # GOTHIC LETTER IGGWS +10348 ; [.4B64.0020.0002] # GOTHIC LETTER HWAIR +10349 ; [.4B65.0020.0002] # GOTHIC LETTER OTHAL +1034A ; [.4B66.0020.0002] # GOTHIC LETTER NINE HUNDRED +10428 ; [.4B67.0020.0002] # DESERET SMALL LETTER LONG I +10400 ; [.4B67.0020.0008] # DESERET CAPITAL LETTER LONG I +10429 ; [.4B68.0020.0002] # DESERET SMALL LETTER LONG E +10401 ; [.4B68.0020.0008] # DESERET CAPITAL LETTER LONG E +1042A ; [.4B69.0020.0002] # DESERET SMALL LETTER LONG A +10402 ; [.4B69.0020.0008] # DESERET CAPITAL LETTER LONG A +1042B ; [.4B6A.0020.0002] # DESERET SMALL LETTER LONG AH +10403 ; [.4B6A.0020.0008] # DESERET CAPITAL LETTER LONG AH +1042C ; [.4B6B.0020.0002] # DESERET SMALL LETTER LONG O +10404 ; [.4B6B.0020.0008] # DESERET CAPITAL LETTER LONG O +1042D ; [.4B6C.0020.0002] # DESERET SMALL LETTER LONG OO +10405 ; [.4B6C.0020.0008] # DESERET CAPITAL LETTER LONG OO +1042E ; [.4B6D.0020.0002] # DESERET SMALL LETTER SHORT I +10406 ; [.4B6D.0020.0008] # DESERET CAPITAL LETTER SHORT I +1042F ; [.4B6E.0020.0002] # DESERET SMALL LETTER SHORT E +10407 ; [.4B6E.0020.0008] # DESERET CAPITAL LETTER SHORT E +10430 ; [.4B6F.0020.0002] # DESERET SMALL LETTER SHORT A +10408 ; [.4B6F.0020.0008] # DESERET CAPITAL LETTER SHORT A +10431 ; [.4B70.0020.0002] # DESERET SMALL LETTER SHORT AH +10409 ; [.4B70.0020.0008] # DESERET CAPITAL LETTER SHORT AH +10432 ; [.4B71.0020.0002] # DESERET SMALL LETTER SHORT O +1040A ; [.4B71.0020.0008] # DESERET CAPITAL LETTER SHORT O +10433 ; [.4B72.0020.0002] # DESERET SMALL LETTER SHORT OO +1040B ; [.4B72.0020.0008] # DESERET CAPITAL LETTER SHORT OO +10434 ; [.4B73.0020.0002] # DESERET SMALL LETTER AY +1040C ; [.4B73.0020.0008] # DESERET CAPITAL LETTER AY +10435 ; [.4B74.0020.0002] # DESERET SMALL LETTER OW +1040D ; [.4B74.0020.0008] # DESERET CAPITAL LETTER OW +10436 ; [.4B75.0020.0002] # DESERET SMALL LETTER WU +1040E ; [.4B75.0020.0008] # DESERET CAPITAL LETTER WU +10437 ; [.4B76.0020.0002] # DESERET SMALL LETTER YEE +1040F ; [.4B76.0020.0008] # DESERET CAPITAL LETTER YEE +10438 ; [.4B77.0020.0002] # DESERET SMALL LETTER H +10410 ; [.4B77.0020.0008] # DESERET CAPITAL LETTER H +10439 ; [.4B78.0020.0002] # DESERET SMALL LETTER PEE +10411 ; [.4B78.0020.0008] # DESERET CAPITAL LETTER PEE +1043A ; [.4B79.0020.0002] # DESERET SMALL LETTER BEE +10412 ; [.4B79.0020.0008] # DESERET CAPITAL LETTER BEE +1043B ; [.4B7A.0020.0002] # DESERET SMALL LETTER TEE +10413 ; [.4B7A.0020.0008] # DESERET CAPITAL LETTER TEE +1043C ; [.4B7B.0020.0002] # DESERET SMALL LETTER DEE +10414 ; [.4B7B.0020.0008] # DESERET CAPITAL LETTER DEE +1043D ; [.4B7C.0020.0002] # DESERET SMALL LETTER CHEE +10415 ; [.4B7C.0020.0008] # DESERET CAPITAL LETTER CHEE +1043E ; [.4B7D.0020.0002] # DESERET SMALL LETTER JEE +10416 ; [.4B7D.0020.0008] # DESERET CAPITAL LETTER JEE +1043F ; [.4B7E.0020.0002] # DESERET SMALL LETTER KAY +10417 ; [.4B7E.0020.0008] # DESERET CAPITAL LETTER KAY +10440 ; [.4B7F.0020.0002] # DESERET SMALL LETTER GAY +10418 ; [.4B7F.0020.0008] # DESERET CAPITAL LETTER GAY +10441 ; [.4B80.0020.0002] # DESERET SMALL LETTER EF +10419 ; [.4B80.0020.0008] # DESERET CAPITAL LETTER EF +10442 ; [.4B81.0020.0002] # DESERET SMALL LETTER VEE +1041A ; [.4B81.0020.0008] # DESERET CAPITAL LETTER VEE +10443 ; [.4B82.0020.0002] # DESERET SMALL LETTER ETH +1041B ; [.4B82.0020.0008] # DESERET CAPITAL LETTER ETH +10444 ; [.4B83.0020.0002] # DESERET SMALL LETTER THEE +1041C ; [.4B83.0020.0008] # DESERET CAPITAL LETTER THEE +10445 ; [.4B84.0020.0002] # DESERET SMALL LETTER ES +1041D ; [.4B84.0020.0008] # DESERET CAPITAL LETTER ES +10446 ; [.4B85.0020.0002] # DESERET SMALL LETTER ZEE +1041E ; [.4B85.0020.0008] # DESERET CAPITAL LETTER ZEE +10447 ; [.4B86.0020.0002] # DESERET SMALL LETTER ESH +1041F ; [.4B86.0020.0008] # DESERET CAPITAL LETTER ESH +10448 ; [.4B87.0020.0002] # DESERET SMALL LETTER ZHEE +10420 ; [.4B87.0020.0008] # DESERET CAPITAL LETTER ZHEE +10449 ; [.4B88.0020.0002] # DESERET SMALL LETTER ER +10421 ; [.4B88.0020.0008] # DESERET CAPITAL LETTER ER +1044A ; [.4B89.0020.0002] # DESERET SMALL LETTER EL +10422 ; [.4B89.0020.0008] # DESERET CAPITAL LETTER EL +1044B ; [.4B8A.0020.0002] # DESERET SMALL LETTER EM +10423 ; [.4B8A.0020.0008] # DESERET CAPITAL LETTER EM +1044C ; [.4B8B.0020.0002] # DESERET SMALL LETTER EN +10424 ; [.4B8B.0020.0008] # DESERET CAPITAL LETTER EN +1044D ; [.4B8C.0020.0002] # DESERET SMALL LETTER ENG +10425 ; [.4B8C.0020.0008] # DESERET CAPITAL LETTER ENG +1044E ; [.4B8D.0020.0002] # DESERET SMALL LETTER OI +10426 ; [.4B8D.0020.0008] # DESERET CAPITAL LETTER OI +1044F ; [.4B8E.0020.0002] # DESERET SMALL LETTER EW +10427 ; [.4B8E.0020.0008] # DESERET CAPITAL LETTER EW +10450 ; [.4B8F.0020.0002] # SHAVIAN LETTER PEEP +10451 ; [.4B90.0020.0002] # SHAVIAN LETTER TOT +10452 ; [.4B91.0020.0002] # SHAVIAN LETTER KICK +10453 ; [.4B92.0020.0002] # SHAVIAN LETTER FEE +10454 ; [.4B93.0020.0002] # SHAVIAN LETTER THIGH +10455 ; [.4B94.0020.0002] # SHAVIAN LETTER SO +10456 ; [.4B95.0020.0002] # SHAVIAN LETTER SURE +10457 ; [.4B96.0020.0002] # SHAVIAN LETTER CHURCH +10458 ; [.4B97.0020.0002] # SHAVIAN LETTER YEA +10459 ; [.4B98.0020.0002] # SHAVIAN LETTER HUNG +1045A ; [.4B99.0020.0002] # SHAVIAN LETTER BIB +1045B ; [.4B9A.0020.0002] # SHAVIAN LETTER DEAD +1045C ; [.4B9B.0020.0002] # SHAVIAN LETTER GAG +1045D ; [.4B9C.0020.0002] # SHAVIAN LETTER VOW +1045E ; [.4B9D.0020.0002] # SHAVIAN LETTER THEY +1045F ; [.4B9E.0020.0002] # SHAVIAN LETTER ZOO +10460 ; [.4B9F.0020.0002] # SHAVIAN LETTER MEASURE +10461 ; [.4BA0.0020.0002] # SHAVIAN LETTER JUDGE +10462 ; [.4BA1.0020.0002] # SHAVIAN LETTER WOE +10463 ; [.4BA2.0020.0002] # SHAVIAN LETTER HA-HA +10464 ; [.4BA3.0020.0002] # SHAVIAN LETTER LOLL +10465 ; [.4BA4.0020.0002] # SHAVIAN LETTER MIME +10466 ; [.4BA5.0020.0002] # SHAVIAN LETTER IF +10467 ; [.4BA6.0020.0002] # SHAVIAN LETTER EGG +10468 ; [.4BA7.0020.0002] # SHAVIAN LETTER ASH +10469 ; [.4BA8.0020.0002] # SHAVIAN LETTER ADO +1046A ; [.4BA9.0020.0002] # SHAVIAN LETTER ON +1046B ; [.4BAA.0020.0002] # SHAVIAN LETTER WOOL +1046C ; [.4BAB.0020.0002] # SHAVIAN LETTER OUT +1046D ; [.4BAC.0020.0002] # SHAVIAN LETTER AH +1046E ; [.4BAD.0020.0002] # SHAVIAN LETTER ROAR +1046F ; [.4BAE.0020.0002] # SHAVIAN LETTER NUN +10470 ; [.4BAF.0020.0002] # SHAVIAN LETTER EAT +10471 ; [.4BB0.0020.0002] # SHAVIAN LETTER AGE +10472 ; [.4BB1.0020.0002] # SHAVIAN LETTER ICE +10473 ; [.4BB2.0020.0002] # SHAVIAN LETTER UP +10474 ; [.4BB3.0020.0002] # SHAVIAN LETTER OAK +10475 ; [.4BB4.0020.0002] # SHAVIAN LETTER OOZE +10476 ; [.4BB5.0020.0002] # SHAVIAN LETTER OIL +10477 ; [.4BB6.0020.0002] # SHAVIAN LETTER AWE +10478 ; [.4BB7.0020.0002] # SHAVIAN LETTER ARE +10479 ; [.4BB8.0020.0002] # SHAVIAN LETTER OR +1047A ; [.4BB9.0020.0002] # SHAVIAN LETTER AIR +1047B ; [.4BBA.0020.0002] # SHAVIAN LETTER ERR +1047C ; [.4BBB.0020.0002] # SHAVIAN LETTER ARRAY +1047D ; [.4BBC.0020.0002] # SHAVIAN LETTER EAR +1047E ; [.4BBD.0020.0002] # SHAVIAN LETTER IAN +1047F ; [.4BBE.0020.0002] # SHAVIAN LETTER YEW +1BC00 ; [.4BBF.0020.0002] # DUPLOYAN LETTER H +1BC01 ; [.4BC0.0020.0002] # DUPLOYAN LETTER X +1BC02 ; [.4BC1.0020.0002] # DUPLOYAN LETTER P +1BC03 ; [.4BC2.0020.0002] # DUPLOYAN LETTER T +1BC04 ; [.4BC3.0020.0002] # DUPLOYAN LETTER F +1BC05 ; [.4BC4.0020.0002] # DUPLOYAN LETTER K +1BC06 ; [.4BC5.0020.0002] # DUPLOYAN LETTER L +1BC07 ; [.4BC6.0020.0002] # DUPLOYAN LETTER B +1BC08 ; [.4BC7.0020.0002] # DUPLOYAN LETTER D +1BC09 ; [.4BC8.0020.0002] # DUPLOYAN LETTER V +1BC0A ; [.4BC9.0020.0002] # DUPLOYAN LETTER G +1BC0B ; [.4BCA.0020.0002] # DUPLOYAN LETTER R +1BC0C ; [.4BCB.0020.0002] # DUPLOYAN LETTER P N +1BC0D ; [.4BCC.0020.0002] # DUPLOYAN LETTER D S +1BC0E ; [.4BCD.0020.0002] # DUPLOYAN LETTER F N +1BC0F ; [.4BCE.0020.0002] # DUPLOYAN LETTER K M +1BC10 ; [.4BCF.0020.0002] # DUPLOYAN LETTER R S +1BC11 ; [.4BD0.0020.0002] # DUPLOYAN LETTER TH +1BC12 ; [.4BD1.0020.0002] # DUPLOYAN LETTER SLOAN DH +1BC13 ; [.4BD2.0020.0002] # DUPLOYAN LETTER DH +1BC14 ; [.4BD3.0020.0002] # DUPLOYAN LETTER KK +1BC15 ; [.4BD4.0020.0002] # DUPLOYAN LETTER SLOAN J +1BC16 ; [.4BD5.0020.0002] # DUPLOYAN LETTER HL +1BC17 ; [.4BD6.0020.0002] # DUPLOYAN LETTER LH +1BC18 ; [.4BD7.0020.0002] # DUPLOYAN LETTER RH +1BC19 ; [.4BD8.0020.0002] # DUPLOYAN LETTER M +1BC1A ; [.4BD9.0020.0002] # DUPLOYAN LETTER N +1BC1B ; [.4BDA.0020.0002] # DUPLOYAN LETTER J +1BC1C ; [.4BDB.0020.0002] # DUPLOYAN LETTER S +1BC1D ; [.4BDC.0020.0002] # DUPLOYAN LETTER M N +1BC1E ; [.4BDD.0020.0002] # DUPLOYAN LETTER N M +1BC1F ; [.4BDE.0020.0002] # DUPLOYAN LETTER J M +1BC20 ; [.4BDF.0020.0002] # DUPLOYAN LETTER S J +1BC21 ; [.4BE0.0020.0002] # DUPLOYAN LETTER M WITH DOT +1BC22 ; [.4BE1.0020.0002] # DUPLOYAN LETTER N WITH DOT +1BC23 ; [.4BE2.0020.0002] # DUPLOYAN LETTER J WITH DOT +1BC24 ; [.4BE3.0020.0002] # DUPLOYAN LETTER J WITH DOTS INSIDE AND ABOVE +1BC25 ; [.4BE4.0020.0002] # DUPLOYAN LETTER S WITH DOT +1BC26 ; [.4BE5.0020.0002] # DUPLOYAN LETTER S WITH DOT BELOW +1BC27 ; [.4BE6.0020.0002] # DUPLOYAN LETTER M S +1BC28 ; [.4BE7.0020.0002] # DUPLOYAN LETTER N S +1BC29 ; [.4BE8.0020.0002] # DUPLOYAN LETTER J S +1BC2A ; [.4BE9.0020.0002] # DUPLOYAN LETTER S S +1BC2B ; [.4BEA.0020.0002] # DUPLOYAN LETTER M N S +1BC2C ; [.4BEB.0020.0002] # DUPLOYAN LETTER N M S +1BC2D ; [.4BEC.0020.0002] # DUPLOYAN LETTER J M S +1BC2E ; [.4BED.0020.0002] # DUPLOYAN LETTER S J S +1BC2F ; [.4BEE.0020.0002] # DUPLOYAN LETTER J S WITH DOT +1BC30 ; [.4BEF.0020.0002] # DUPLOYAN LETTER J N +1BC31 ; [.4BF0.0020.0002] # DUPLOYAN LETTER J N S +1BC32 ; [.4BF1.0020.0002] # DUPLOYAN LETTER S T +1BC33 ; [.4BF2.0020.0002] # DUPLOYAN LETTER S T R +1BC34 ; [.4BF3.0020.0002] # DUPLOYAN LETTER S P +1BC35 ; [.4BF4.0020.0002] # DUPLOYAN LETTER S P R +1BC36 ; [.4BF5.0020.0002] # DUPLOYAN LETTER T S +1BC37 ; [.4BF6.0020.0002] # DUPLOYAN LETTER T R S +1BC38 ; [.4BF7.0020.0002] # DUPLOYAN LETTER W +1BC39 ; [.4BF8.0020.0002] # DUPLOYAN LETTER WH +1BC3A ; [.4BF9.0020.0002] # DUPLOYAN LETTER W R +1BC3B ; [.4BFA.0020.0002] # DUPLOYAN LETTER S N +1BC3C ; [.4BFB.0020.0002] # DUPLOYAN LETTER S M +1BC3D ; [.4BFC.0020.0002] # DUPLOYAN LETTER K R S +1BC3E ; [.4BFD.0020.0002] # DUPLOYAN LETTER G R S +1BC3F ; [.4BFE.0020.0002] # DUPLOYAN LETTER S K +1BC40 ; [.4BFF.0020.0002] # DUPLOYAN LETTER S K R +1BC41 ; [.4C00.0020.0002] # DUPLOYAN LETTER A +1BC42 ; [.4C01.0020.0002] # DUPLOYAN LETTER SLOAN OW +1BC43 ; [.4C02.0020.0002] # DUPLOYAN LETTER OA +1BC44 ; [.4C03.0020.0002] # DUPLOYAN LETTER O +1BC45 ; [.4C04.0020.0002] # DUPLOYAN LETTER AOU +1BC46 ; [.4C05.0020.0002] # DUPLOYAN LETTER I +1BC47 ; [.4C06.0020.0002] # DUPLOYAN LETTER E +1BC48 ; [.4C07.0020.0002] # DUPLOYAN LETTER IE +1BC49 ; [.4C08.0020.0002] # DUPLOYAN LETTER SHORT I +1BC4A ; [.4C09.0020.0002] # DUPLOYAN LETTER UI +1BC4B ; [.4C0A.0020.0002] # DUPLOYAN LETTER EE +1BC4C ; [.4C0B.0020.0002] # DUPLOYAN LETTER SLOAN EH +1BC4D ; [.4C0C.0020.0002] # DUPLOYAN LETTER ROMANIAN I +1BC4E ; [.4C0D.0020.0002] # DUPLOYAN LETTER SLOAN EE +1BC4F ; [.4C0E.0020.0002] # DUPLOYAN LETTER LONG I +1BC50 ; [.4C0F.0020.0002] # DUPLOYAN LETTER YE +1BC51 ; [.4C10.0020.0002] # DUPLOYAN LETTER U +1BC52 ; [.4C11.0020.0002] # DUPLOYAN LETTER EU +1BC53 ; [.4C12.0020.0002] # DUPLOYAN LETTER XW +1BC54 ; [.4C13.0020.0002] # DUPLOYAN LETTER U N +1BC55 ; [.4C14.0020.0002] # DUPLOYAN LETTER LONG U +1BC56 ; [.4C15.0020.0002] # DUPLOYAN LETTER ROMANIAN U +1BC57 ; [.4C16.0020.0002] # DUPLOYAN LETTER UH +1BC58 ; [.4C17.0020.0002] # DUPLOYAN LETTER SLOAN U +1BC59 ; [.4C18.0020.0002] # DUPLOYAN LETTER OOH +1BC5A ; [.4C19.0020.0002] # DUPLOYAN LETTER OW +1BC5B ; [.4C1A.0020.0002] # DUPLOYAN LETTER OU +1BC5C ; [.4C1B.0020.0002] # DUPLOYAN LETTER WA +1BC5D ; [.4C1C.0020.0002] # DUPLOYAN LETTER WO +1BC5E ; [.4C1D.0020.0002] # DUPLOYAN LETTER WI +1BC5F ; [.4C1E.0020.0002] # DUPLOYAN LETTER WEI +1BC60 ; [.4C1F.0020.0002] # DUPLOYAN LETTER WOW +1BC61 ; [.4C20.0020.0002] # DUPLOYAN LETTER NASAL U +1BC62 ; [.4C21.0020.0002] # DUPLOYAN LETTER NASAL O +1BC63 ; [.4C22.0020.0002] # DUPLOYAN LETTER NASAL I +1BC64 ; [.4C23.0020.0002] # DUPLOYAN LETTER NASAL A +1BC65 ; [.4C24.0020.0002] # DUPLOYAN LETTER PERNIN AN +1BC66 ; [.4C25.0020.0002] # DUPLOYAN LETTER PERNIN AM +1BC67 ; [.4C26.0020.0002] # DUPLOYAN LETTER SLOAN EN +1BC68 ; [.4C27.0020.0002] # DUPLOYAN LETTER SLOAN AN +1BC69 ; [.4C28.0020.0002] # DUPLOYAN LETTER SLOAN ON +1BC6A ; [.4C29.0020.0002] # DUPLOYAN LETTER VOCALIC M +1BC70 ; [.4C2A.0020.0002] # DUPLOYAN AFFIX LEFT HORIZONTAL SECANT +1BC71 ; [.4C2B.0020.0002] # DUPLOYAN AFFIX MID HORIZONTAL SECANT +1BC72 ; [.4C2C.0020.0002] # DUPLOYAN AFFIX RIGHT HORIZONTAL SECANT +1BC73 ; [.4C2D.0020.0002] # DUPLOYAN AFFIX LOW VERTICAL SECANT +1BC74 ; [.4C2E.0020.0002] # DUPLOYAN AFFIX MID VERTICAL SECANT +1BC75 ; [.4C2F.0020.0002] # DUPLOYAN AFFIX HIGH VERTICAL SECANT +1BC76 ; [.4C30.0020.0002] # DUPLOYAN AFFIX ATTACHED SECANT +1BC77 ; [.4C31.0020.0002] # DUPLOYAN AFFIX ATTACHED LEFT-TO-RIGHT SECANT +1BC78 ; [.4C32.0020.0002] # DUPLOYAN AFFIX ATTACHED TANGENT +1BC79 ; [.4C33.0020.0002] # DUPLOYAN AFFIX ATTACHED TAIL +1BC7A ; [.4C34.0020.0002] # DUPLOYAN AFFIX ATTACHED E HOOK +1BC7B ; [.4C35.0020.0002] # DUPLOYAN AFFIX ATTACHED I HOOK +1BC7C ; [.4C36.0020.0002] # DUPLOYAN AFFIX ATTACHED TANGENT HOOK +1BC80 ; [.4C37.0020.0002] # DUPLOYAN AFFIX HIGH ACUTE +1BC81 ; [.4C38.0020.0002] # DUPLOYAN AFFIX HIGH TIGHT ACUTE +1BC82 ; [.4C39.0020.0002] # DUPLOYAN AFFIX HIGH GRAVE +1BC83 ; [.4C3A.0020.0002] # DUPLOYAN AFFIX HIGH LONG GRAVE +1BC84 ; [.4C3B.0020.0002] # DUPLOYAN AFFIX HIGH DOT +1BC85 ; [.4C3C.0020.0002] # DUPLOYAN AFFIX HIGH CIRCLE +1BC86 ; [.4C3D.0020.0002] # DUPLOYAN AFFIX HIGH LINE +1BC87 ; [.4C3E.0020.0002] # DUPLOYAN AFFIX HIGH WAVE +1BC88 ; [.4C3F.0020.0002] # DUPLOYAN AFFIX HIGH VERTICAL +1BC90 ; [.4C40.0020.0002] # DUPLOYAN AFFIX LOW ACUTE +1BC91 ; [.4C41.0020.0002] # DUPLOYAN AFFIX LOW TIGHT ACUTE +1BC92 ; [.4C42.0020.0002] # DUPLOYAN AFFIX LOW GRAVE +1BC93 ; [.4C43.0020.0002] # DUPLOYAN AFFIX LOW LONG GRAVE +1BC94 ; [.4C44.0020.0002] # DUPLOYAN AFFIX LOW DOT +1BC95 ; [.4C45.0020.0002] # DUPLOYAN AFFIX LOW CIRCLE +1BC96 ; [.4C46.0020.0002] # DUPLOYAN AFFIX LOW LINE +1BC97 ; [.4C47.0020.0002] # DUPLOYAN AFFIX LOW WAVE +1BC98 ; [.4C48.0020.0002] # DUPLOYAN AFFIX LOW VERTICAL +1BC99 ; [.4C49.0020.0002] # DUPLOYAN AFFIX LOW ARROW +10480 ; [.4C4A.0020.0002] # OSMANYA LETTER ALEF +10481 ; [.4C4B.0020.0002] # OSMANYA LETTER BA +10482 ; [.4C4C.0020.0002] # OSMANYA LETTER TA +10483 ; [.4C4D.0020.0002] # OSMANYA LETTER JA +10484 ; [.4C4E.0020.0002] # OSMANYA LETTER XA +10485 ; [.4C4F.0020.0002] # OSMANYA LETTER KHA +10486 ; [.4C50.0020.0002] # OSMANYA LETTER DEEL +10487 ; [.4C51.0020.0002] # OSMANYA LETTER RA +10488 ; [.4C52.0020.0002] # OSMANYA LETTER SA +10489 ; [.4C53.0020.0002] # OSMANYA LETTER SHIIN +1048A ; [.4C54.0020.0002] # OSMANYA LETTER DHA +1048B ; [.4C55.0020.0002] # OSMANYA LETTER CAYN +1048C ; [.4C56.0020.0002] # OSMANYA LETTER GA +1048D ; [.4C57.0020.0002] # OSMANYA LETTER FA +1048E ; [.4C58.0020.0002] # OSMANYA LETTER QAAF +1048F ; [.4C59.0020.0002] # OSMANYA LETTER KAAF +10490 ; [.4C5A.0020.0002] # OSMANYA LETTER LAAN +10491 ; [.4C5B.0020.0002] # OSMANYA LETTER MIIN +10492 ; [.4C5C.0020.0002] # OSMANYA LETTER NUUN +10493 ; [.4C5D.0020.0002] # OSMANYA LETTER WAW +10494 ; [.4C5E.0020.0002] # OSMANYA LETTER HA +10495 ; [.4C5F.0020.0002] # OSMANYA LETTER YA +10496 ; [.4C60.0020.0002] # OSMANYA LETTER A +10497 ; [.4C61.0020.0002] # OSMANYA LETTER E +10498 ; [.4C62.0020.0002] # OSMANYA LETTER I +10499 ; [.4C63.0020.0002] # OSMANYA LETTER O +1049A ; [.4C64.0020.0002] # OSMANYA LETTER U +1049B ; [.4C65.0020.0002] # OSMANYA LETTER AA +1049C ; [.4C66.0020.0002] # OSMANYA LETTER EE +1049D ; [.4C67.0020.0002] # OSMANYA LETTER OO +10500 ; [.4C68.0020.0002] # ELBASAN LETTER A +10501 ; [.4C69.0020.0002] # ELBASAN LETTER BE +10502 ; [.4C6A.0020.0002] # ELBASAN LETTER CE +10503 ; [.4C6B.0020.0002] # ELBASAN LETTER CHE +10504 ; [.4C6C.0020.0002] # ELBASAN LETTER DE +10505 ; [.4C6D.0020.0002] # ELBASAN LETTER NDE +10506 ; [.4C6E.0020.0002] # ELBASAN LETTER DHE +10507 ; [.4C6F.0020.0002] # ELBASAN LETTER EI +10508 ; [.4C70.0020.0002] # ELBASAN LETTER E +10509 ; [.4C71.0020.0002] # ELBASAN LETTER FE +1050A ; [.4C72.0020.0002] # ELBASAN LETTER GE +1050B ; [.4C73.0020.0002] # ELBASAN LETTER GJE +1050C ; [.4C74.0020.0002] # ELBASAN LETTER HE +1050D ; [.4C75.0020.0002] # ELBASAN LETTER I +1050E ; [.4C76.0020.0002] # ELBASAN LETTER JE +1050F ; [.4C77.0020.0002] # ELBASAN LETTER KE +10510 ; [.4C78.0020.0002] # ELBASAN LETTER LE +10511 ; [.4C79.0020.0002] # ELBASAN LETTER LLE +10512 ; [.4C7A.0020.0002] # ELBASAN LETTER ME +10513 ; [.4C7B.0020.0002] # ELBASAN LETTER NE +10514 ; [.4C7C.0020.0002] # ELBASAN LETTER NA +10515 ; [.4C7D.0020.0002] # ELBASAN LETTER NJE +10516 ; [.4C7E.0020.0002] # ELBASAN LETTER O +10517 ; [.4C7F.0020.0002] # ELBASAN LETTER PE +10518 ; [.4C80.0020.0002] # ELBASAN LETTER QE +10519 ; [.4C81.0020.0002] # ELBASAN LETTER RE +1051A ; [.4C82.0020.0002] # ELBASAN LETTER RRE +1051B ; [.4C83.0020.0002] # ELBASAN LETTER SE +1051C ; [.4C84.0020.0002] # ELBASAN LETTER SHE +1051D ; [.4C85.0020.0002] # ELBASAN LETTER TE +1051E ; [.4C86.0020.0002] # ELBASAN LETTER THE +1051F ; [.4C87.0020.0002] # ELBASAN LETTER U +10520 ; [.4C88.0020.0002] # ELBASAN LETTER VE +10521 ; [.4C89.0020.0002] # ELBASAN LETTER XE +10522 ; [.4C8A.0020.0002] # ELBASAN LETTER Y +10523 ; [.4C8B.0020.0002] # ELBASAN LETTER ZE +10524 ; [.4C8C.0020.0002] # ELBASAN LETTER ZHE +10525 ; [.4C8D.0020.0002] # ELBASAN LETTER GHE +10526 ; [.4C8E.0020.0002] # ELBASAN LETTER GHAMMA +10527 ; [.4C8F.0020.0002] # ELBASAN LETTER KHE +10530 ; [.4C90.0020.0002] # CAUCASIAN ALBANIAN LETTER ALT +10531 ; [.4C91.0020.0002] # CAUCASIAN ALBANIAN LETTER BET +10532 ; [.4C92.0020.0002] # CAUCASIAN ALBANIAN LETTER GIM +10533 ; [.4C93.0020.0002] # CAUCASIAN ALBANIAN LETTER DAT +10534 ; [.4C94.0020.0002] # CAUCASIAN ALBANIAN LETTER EB +10535 ; [.4C95.0020.0002] # CAUCASIAN ALBANIAN LETTER ZARL +10536 ; [.4C96.0020.0002] # CAUCASIAN ALBANIAN LETTER EYN +10537 ; [.4C97.0020.0002] # CAUCASIAN ALBANIAN LETTER ZHIL +10538 ; [.4C98.0020.0002] # CAUCASIAN ALBANIAN LETTER TAS +10539 ; [.4C99.0020.0002] # CAUCASIAN ALBANIAN LETTER CHA +1053A ; [.4C9A.0020.0002] # CAUCASIAN ALBANIAN LETTER YOWD +1053B ; [.4C9B.0020.0002] # CAUCASIAN ALBANIAN LETTER ZHA +1053C ; [.4C9C.0020.0002] # CAUCASIAN ALBANIAN LETTER IRB +1053D ; [.4C9D.0020.0002] # CAUCASIAN ALBANIAN LETTER SHA +1053E ; [.4C9E.0020.0002] # CAUCASIAN ALBANIAN LETTER LAN +1053F ; [.4C9F.0020.0002] # CAUCASIAN ALBANIAN LETTER INYA +10540 ; [.4CA0.0020.0002] # CAUCASIAN ALBANIAN LETTER XEYN +10541 ; [.4CA1.0020.0002] # CAUCASIAN ALBANIAN LETTER DYAN +10542 ; [.4CA2.0020.0002] # CAUCASIAN ALBANIAN LETTER CAR +10543 ; [.4CA3.0020.0002] # CAUCASIAN ALBANIAN LETTER JHOX +10544 ; [.4CA4.0020.0002] # CAUCASIAN ALBANIAN LETTER KAR +10545 ; [.4CA5.0020.0002] # CAUCASIAN ALBANIAN LETTER LYIT +10546 ; [.4CA6.0020.0002] # CAUCASIAN ALBANIAN LETTER HEYT +10547 ; [.4CA7.0020.0002] # CAUCASIAN ALBANIAN LETTER QAY +10548 ; [.4CA8.0020.0002] # CAUCASIAN ALBANIAN LETTER AOR +10549 ; [.4CA9.0020.0002] # CAUCASIAN ALBANIAN LETTER CHOY +1054A ; [.4CAA.0020.0002] # CAUCASIAN ALBANIAN LETTER CHI +1054B ; [.4CAB.0020.0002] # CAUCASIAN ALBANIAN LETTER CYAY +1054C ; [.4CAC.0020.0002] # CAUCASIAN ALBANIAN LETTER MAQ +1054D ; [.4CAD.0020.0002] # CAUCASIAN ALBANIAN LETTER QAR +1054E ; [.4CAE.0020.0002] # CAUCASIAN ALBANIAN LETTER NOWC +1054F ; [.4CAF.0020.0002] # CAUCASIAN ALBANIAN LETTER DZYAY +10550 ; [.4CB0.0020.0002] # CAUCASIAN ALBANIAN LETTER SHAK +10551 ; [.4CB1.0020.0002] # CAUCASIAN ALBANIAN LETTER JAYN +10552 ; [.4CB2.0020.0002] # CAUCASIAN ALBANIAN LETTER ON +10553 ; [.4CB3.0020.0002] # CAUCASIAN ALBANIAN LETTER TYAY +10554 ; [.4CB4.0020.0002] # CAUCASIAN ALBANIAN LETTER FAM +10555 ; [.4CB5.0020.0002] # CAUCASIAN ALBANIAN LETTER DZAY +10556 ; [.4CB6.0020.0002] # CAUCASIAN ALBANIAN LETTER CHAT +10557 ; [.4CB7.0020.0002] # CAUCASIAN ALBANIAN LETTER PEN +10558 ; [.4CB8.0020.0002] # CAUCASIAN ALBANIAN LETTER GHEYS +10559 ; [.4CB9.0020.0002] # CAUCASIAN ALBANIAN LETTER RAT +1055A ; [.4CBA.0020.0002] # CAUCASIAN ALBANIAN LETTER SEYK +1055B ; [.4CBB.0020.0002] # CAUCASIAN ALBANIAN LETTER VEYZ +1055C ; [.4CBC.0020.0002] # CAUCASIAN ALBANIAN LETTER TIWR +1055D ; [.4CBD.0020.0002] # CAUCASIAN ALBANIAN LETTER SHOY +1055E ; [.4CBE.0020.0002] # CAUCASIAN ALBANIAN LETTER IWN +1055F ; [.4CBF.0020.0002] # CAUCASIAN ALBANIAN LETTER CYAW +10560 ; [.4CC0.0020.0002] # CAUCASIAN ALBANIAN LETTER CAYN +10561 ; [.4CC1.0020.0002] # CAUCASIAN ALBANIAN LETTER YAYD +10562 ; [.4CC2.0020.0002] # CAUCASIAN ALBANIAN LETTER PIWR +10563 ; [.4CC3.0020.0002] # CAUCASIAN ALBANIAN LETTER KIW +110D0 ; [.4CC4.0020.0002] # SORA SOMPENG LETTER SAH +110D1 ; [.4CC5.0020.0002] # SORA SOMPENG LETTER TAH +110D2 ; [.4CC6.0020.0002] # SORA SOMPENG LETTER BAH +110D3 ; [.4CC7.0020.0002] # SORA SOMPENG LETTER CAH +110D4 ; [.4CC8.0020.0002] # SORA SOMPENG LETTER DAH +110D5 ; [.4CC9.0020.0002] # SORA SOMPENG LETTER GAH +110D6 ; [.4CCA.0020.0002] # SORA SOMPENG LETTER MAH +110D7 ; [.4CCB.0020.0002] # SORA SOMPENG LETTER NGAH +110D8 ; [.4CCC.0020.0002] # SORA SOMPENG LETTER LAH +110D9 ; [.4CCD.0020.0002] # SORA SOMPENG LETTER NAH +110DA ; [.4CCE.0020.0002] # SORA SOMPENG LETTER VAH +110DB ; [.4CCF.0020.0002] # SORA SOMPENG LETTER PAH +110DC ; [.4CD0.0020.0002] # SORA SOMPENG LETTER YAH +110DD ; [.4CD1.0020.0002] # SORA SOMPENG LETTER RAH +110DE ; [.4CD2.0020.0002] # SORA SOMPENG LETTER HAH +110DF ; [.4CD3.0020.0002] # SORA SOMPENG LETTER KAH +110E0 ; [.4CD4.0020.0002] # SORA SOMPENG LETTER JAH +110E1 ; [.4CD5.0020.0002] # SORA SOMPENG LETTER NYAH +110E2 ; [.4CD6.0020.0002] # SORA SOMPENG LETTER AH +110E3 ; [.4CD7.0020.0002] # SORA SOMPENG LETTER EEH +110E4 ; [.4CD8.0020.0002] # SORA SOMPENG LETTER IH +110E5 ; [.4CD9.0020.0002] # SORA SOMPENG LETTER UH +110E6 ; [.4CDA.0020.0002] # SORA SOMPENG LETTER OH +110E7 ; [.4CDB.0020.0002] # SORA SOMPENG LETTER EH +110E8 ; [.4CDC.0020.0002] # SORA SOMPENG LETTER MAE +16A40 ; [.4CDD.0020.0002] # MRO LETTER TA +16A41 ; [.4CDE.0020.0002] # MRO LETTER NGI +16A42 ; [.4CDF.0020.0002] # MRO LETTER YO +16A43 ; [.4CE0.0020.0002] # MRO LETTER MIM +16A44 ; [.4CE1.0020.0002] # MRO LETTER BA +16A45 ; [.4CE2.0020.0002] # MRO LETTER DA +16A46 ; [.4CE3.0020.0002] # MRO LETTER A +16A47 ; [.4CE4.0020.0002] # MRO LETTER PHI +16A48 ; [.4CE5.0020.0002] # MRO LETTER KHAI +16A49 ; [.4CE6.0020.0002] # MRO LETTER HAO +16A4A ; [.4CE7.0020.0002] # MRO LETTER DAI +16A4B ; [.4CE8.0020.0002] # MRO LETTER CHU +16A4C ; [.4CE9.0020.0002] # MRO LETTER KEAAE +16A4D ; [.4CEA.0020.0002] # MRO LETTER OL +16A4E ; [.4CEB.0020.0002] # MRO LETTER MAEM +16A4F ; [.4CEC.0020.0002] # MRO LETTER NIN +16A50 ; [.4CED.0020.0002] # MRO LETTER PA +16A51 ; [.4CEE.0020.0002] # MRO LETTER OO +16A52 ; [.4CEF.0020.0002] # MRO LETTER O +16A53 ; [.4CF0.0020.0002] # MRO LETTER RO +16A54 ; [.4CF1.0020.0002] # MRO LETTER SHI +16A55 ; [.4CF2.0020.0002] # MRO LETTER THEA +16A56 ; [.4CF3.0020.0002] # MRO LETTER EA +16A57 ; [.4CF4.0020.0002] # MRO LETTER WA +16A58 ; [.4CF5.0020.0002] # MRO LETTER E +16A59 ; [.4CF6.0020.0002] # MRO LETTER KO +16A5A ; [.4CF7.0020.0002] # MRO LETTER LAN +16A5B ; [.4CF8.0020.0002] # MRO LETTER LA +16A5C ; [.4CF9.0020.0002] # MRO LETTER HAI +16A5D ; [.4CFA.0020.0002] # MRO LETTER RI +16A5E ; [.4CFB.0020.0002] # MRO LETTER TEK +10000 ; [.4CFC.0020.0002] # LINEAR B SYLLABLE B008 A +10001 ; [.4CFD.0020.0002] # LINEAR B SYLLABLE B038 E +10002 ; [.4CFE.0020.0002] # LINEAR B SYLLABLE B028 I +10003 ; [.4CFF.0020.0002] # LINEAR B SYLLABLE B061 O +10004 ; [.4D00.0020.0002] # LINEAR B SYLLABLE B010 U +10005 ; [.4D01.0020.0002] # LINEAR B SYLLABLE B001 DA +10006 ; [.4D02.0020.0002] # LINEAR B SYLLABLE B045 DE +10007 ; [.4D03.0020.0002] # LINEAR B SYLLABLE B007 DI +10008 ; [.4D04.0020.0002] # LINEAR B SYLLABLE B014 DO +10009 ; [.4D05.0020.0002] # LINEAR B SYLLABLE B051 DU +1000A ; [.4D06.0020.0002] # LINEAR B SYLLABLE B057 JA +1000B ; [.4D07.0020.0002] # LINEAR B SYLLABLE B046 JE +1000D ; [.4D08.0020.0002] # LINEAR B SYLLABLE B036 JO +1000E ; [.4D09.0020.0002] # LINEAR B SYLLABLE B065 JU +1000F ; [.4D0A.0020.0002] # LINEAR B SYLLABLE B077 KA +10010 ; [.4D0B.0020.0002] # LINEAR B SYLLABLE B044 KE +10011 ; [.4D0C.0020.0002] # LINEAR B SYLLABLE B067 KI +10012 ; [.4D0D.0020.0002] # LINEAR B SYLLABLE B070 KO +10013 ; [.4D0E.0020.0002] # LINEAR B SYLLABLE B081 KU +10014 ; [.4D0F.0020.0002] # LINEAR B SYLLABLE B080 MA +10015 ; [.4D10.0020.0002] # LINEAR B SYLLABLE B013 ME +10016 ; [.4D11.0020.0002] # LINEAR B SYLLABLE B073 MI +10017 ; [.4D12.0020.0002] # LINEAR B SYLLABLE B015 MO +10018 ; [.4D13.0020.0002] # LINEAR B SYLLABLE B023 MU +10019 ; [.4D14.0020.0002] # LINEAR B SYLLABLE B006 NA +1001A ; [.4D15.0020.0002] # LINEAR B SYLLABLE B024 NE +1001B ; [.4D16.0020.0002] # LINEAR B SYLLABLE B030 NI +1001C ; [.4D17.0020.0002] # LINEAR B SYLLABLE B052 NO +1001D ; [.4D18.0020.0002] # LINEAR B SYLLABLE B055 NU +1001E ; [.4D19.0020.0002] # LINEAR B SYLLABLE B003 PA +1001F ; [.4D1A.0020.0002] # LINEAR B SYLLABLE B072 PE +10020 ; [.4D1B.0020.0002] # LINEAR B SYLLABLE B039 PI +10021 ; [.4D1C.0020.0002] # LINEAR B SYLLABLE B011 PO +10022 ; [.4D1D.0020.0002] # LINEAR B SYLLABLE B050 PU +10023 ; [.4D1E.0020.0002] # LINEAR B SYLLABLE B016 QA +10024 ; [.4D1F.0020.0002] # LINEAR B SYLLABLE B078 QE +10025 ; [.4D20.0020.0002] # LINEAR B SYLLABLE B021 QI +10026 ; [.4D21.0020.0002] # LINEAR B SYLLABLE B032 QO +10028 ; [.4D22.0020.0002] # LINEAR B SYLLABLE B060 RA +10029 ; [.4D23.0020.0002] # LINEAR B SYLLABLE B027 RE +1002A ; [.4D24.0020.0002] # LINEAR B SYLLABLE B053 RI +1002B ; [.4D25.0020.0002] # LINEAR B SYLLABLE B002 RO +1002C ; [.4D26.0020.0002] # LINEAR B SYLLABLE B026 RU +1002D ; [.4D27.0020.0002] # LINEAR B SYLLABLE B031 SA +1002E ; [.4D28.0020.0002] # LINEAR B SYLLABLE B009 SE +1002F ; [.4D29.0020.0002] # LINEAR B SYLLABLE B041 SI +10030 ; [.4D2A.0020.0002] # LINEAR B SYLLABLE B012 SO +10031 ; [.4D2B.0020.0002] # LINEAR B SYLLABLE B058 SU +10032 ; [.4D2C.0020.0002] # LINEAR B SYLLABLE B059 TA +10033 ; [.4D2D.0020.0002] # LINEAR B SYLLABLE B004 TE +10034 ; [.4D2E.0020.0002] # LINEAR B SYLLABLE B037 TI +10035 ; [.4D2F.0020.0002] # LINEAR B SYLLABLE B005 TO +10036 ; [.4D30.0020.0002] # LINEAR B SYLLABLE B069 TU +10037 ; [.4D31.0020.0002] # LINEAR B SYLLABLE B054 WA +10038 ; [.4D32.0020.0002] # LINEAR B SYLLABLE B075 WE +10039 ; [.4D33.0020.0002] # LINEAR B SYLLABLE B040 WI +1003A ; [.4D34.0020.0002] # LINEAR B SYLLABLE B042 WO +1003C ; [.4D35.0020.0002] # LINEAR B SYLLABLE B017 ZA +1003D ; [.4D36.0020.0002] # LINEAR B SYLLABLE B074 ZE +1003F ; [.4D37.0020.0002] # LINEAR B SYLLABLE B020 ZO +10040 ; [.4D38.0020.0002] # LINEAR B SYLLABLE B025 A2 +10041 ; [.4D39.0020.0002] # LINEAR B SYLLABLE B043 A3 +10042 ; [.4D3A.0020.0002] # LINEAR B SYLLABLE B085 AU +10043 ; [.4D3B.0020.0002] # LINEAR B SYLLABLE B071 DWE +10044 ; [.4D3C.0020.0002] # LINEAR B SYLLABLE B090 DWO +10045 ; [.4D3D.0020.0002] # LINEAR B SYLLABLE B048 NWA +10046 ; [.4D3E.0020.0002] # LINEAR B SYLLABLE B029 PU2 +10047 ; [.4D3F.0020.0002] # LINEAR B SYLLABLE B062 PTE +10048 ; [.4D40.0020.0002] # LINEAR B SYLLABLE B076 RA2 +10049 ; [.4D41.0020.0002] # LINEAR B SYLLABLE B033 RA3 +1004A ; [.4D42.0020.0002] # LINEAR B SYLLABLE B068 RO2 +1004B ; [.4D43.0020.0002] # LINEAR B SYLLABLE B066 TA2 +1004C ; [.4D44.0020.0002] # LINEAR B SYLLABLE B087 TWE +1004D ; [.4D45.0020.0002] # LINEAR B SYLLABLE B091 TWO +10050 ; [.4D46.0020.0002] # LINEAR B SYMBOL B018 +10051 ; [.4D47.0020.0002] # LINEAR B SYMBOL B019 +10052 ; [.4D48.0020.0002] # LINEAR B SYMBOL B022 +10053 ; [.4D49.0020.0002] # LINEAR B SYMBOL B034 +10054 ; [.4D4A.0020.0002] # LINEAR B SYMBOL B047 +10055 ; [.4D4B.0020.0002] # LINEAR B SYMBOL B049 +10056 ; [.4D4C.0020.0002] # LINEAR B SYMBOL B056 +10057 ; [.4D4D.0020.0002] # LINEAR B SYMBOL B063 +10058 ; [.4D4E.0020.0002] # LINEAR B SYMBOL B064 +10059 ; [.4D4F.0020.0002] # LINEAR B SYMBOL B079 +1005A ; [.4D50.0020.0002] # LINEAR B SYMBOL B082 +1005B ; [.4D51.0020.0002] # LINEAR B SYMBOL B083 +1005C ; [.4D52.0020.0002] # LINEAR B SYMBOL B086 +1005D ; [.4D53.0020.0002] # LINEAR B SYMBOL B089 +10080 ; [.4D54.0020.0002] # LINEAR B IDEOGRAM B100 MAN +10081 ; [.4D55.0020.0002] # LINEAR B IDEOGRAM B102 WOMAN +10082 ; [.4D56.0020.0002] # LINEAR B IDEOGRAM B104 DEER +10083 ; [.4D57.0020.0002] # LINEAR B IDEOGRAM B105 EQUID +10084 ; [.4D58.0020.0002] # LINEAR B IDEOGRAM B105F MARE +10085 ; [.4D59.0020.0002] # LINEAR B IDEOGRAM B105M STALLION +10086 ; [.4D5A.0020.0002] # LINEAR B IDEOGRAM B106F EWE +10087 ; [.4D5B.0020.0002] # LINEAR B IDEOGRAM B106M RAM +10088 ; [.4D5C.0020.0002] # LINEAR B IDEOGRAM B107F SHE-GOAT +10089 ; [.4D5D.0020.0002] # LINEAR B IDEOGRAM B107M HE-GOAT +1008A ; [.4D5E.0020.0002] # LINEAR B IDEOGRAM B108F SOW +1008B ; [.4D5F.0020.0002] # LINEAR B IDEOGRAM B108M BOAR +1008C ; [.4D60.0020.0002] # LINEAR B IDEOGRAM B109F COW +1008D ; [.4D61.0020.0002] # LINEAR B IDEOGRAM B109M BULL +1008E ; [.4D62.0020.0002] # LINEAR B IDEOGRAM B120 WHEAT +1008F ; [.4D63.0020.0002] # LINEAR B IDEOGRAM B121 BARLEY +10090 ; [.4D64.0020.0002] # LINEAR B IDEOGRAM B122 OLIVE +10091 ; [.4D65.0020.0002] # LINEAR B IDEOGRAM B123 SPICE +10092 ; [.4D66.0020.0002] # LINEAR B IDEOGRAM B125 CYPERUS +10093 ; [.4D67.0020.0002] # LINEAR B MONOGRAM B127 KAPO +10094 ; [.4D68.0020.0002] # LINEAR B MONOGRAM B128 KANAKO +10095 ; [.4D69.0020.0002] # LINEAR B IDEOGRAM B130 OIL +10096 ; [.4D6A.0020.0002] # LINEAR B IDEOGRAM B131 WINE +10097 ; [.4D6B.0020.0002] # LINEAR B IDEOGRAM B132 +10098 ; [.4D6C.0020.0002] # LINEAR B MONOGRAM B133 AREPA +10099 ; [.4D6D.0020.0002] # LINEAR B MONOGRAM B135 MERI +1009A ; [.4D6E.0020.0002] # LINEAR B IDEOGRAM B140 BRONZE +1009B ; [.4D6F.0020.0002] # LINEAR B IDEOGRAM B141 GOLD +1009C ; [.4D70.0020.0002] # LINEAR B IDEOGRAM B142 +1009D ; [.4D71.0020.0002] # LINEAR B IDEOGRAM B145 WOOL +1009E ; [.4D72.0020.0002] # LINEAR B IDEOGRAM B146 +1009F ; [.4D73.0020.0002] # LINEAR B IDEOGRAM B150 +100A0 ; [.4D74.0020.0002] # LINEAR B IDEOGRAM B151 HORN +100A1 ; [.4D75.0020.0002] # LINEAR B IDEOGRAM B152 +100A2 ; [.4D76.0020.0002] # LINEAR B IDEOGRAM B153 +100A3 ; [.4D77.0020.0002] # LINEAR B IDEOGRAM B154 +100A4 ; [.4D78.0020.0002] # LINEAR B MONOGRAM B156 TURO2 +100A5 ; [.4D79.0020.0002] # LINEAR B IDEOGRAM B157 +100A6 ; [.4D7A.0020.0002] # LINEAR B IDEOGRAM B158 +100A7 ; [.4D7B.0020.0002] # LINEAR B IDEOGRAM B159 CLOTH +100A8 ; [.4D7C.0020.0002] # LINEAR B IDEOGRAM B160 +100A9 ; [.4D7D.0020.0002] # LINEAR B IDEOGRAM B161 +100AA ; [.4D7E.0020.0002] # LINEAR B IDEOGRAM B162 GARMENT +100AB ; [.4D7F.0020.0002] # LINEAR B IDEOGRAM B163 ARMOUR +100AC ; [.4D80.0020.0002] # LINEAR B IDEOGRAM B164 +100AD ; [.4D81.0020.0002] # LINEAR B IDEOGRAM B165 +100AE ; [.4D82.0020.0002] # LINEAR B IDEOGRAM B166 +100AF ; [.4D83.0020.0002] # LINEAR B IDEOGRAM B167 +100B0 ; [.4D84.0020.0002] # LINEAR B IDEOGRAM B168 +100B1 ; [.4D85.0020.0002] # LINEAR B IDEOGRAM B169 +100B2 ; [.4D86.0020.0002] # LINEAR B IDEOGRAM B170 +100B3 ; [.4D87.0020.0002] # LINEAR B IDEOGRAM B171 +100B4 ; [.4D88.0020.0002] # LINEAR B IDEOGRAM B172 +100B5 ; [.4D89.0020.0002] # LINEAR B IDEOGRAM B173 MONTH +100B6 ; [.4D8A.0020.0002] # LINEAR B IDEOGRAM B174 +100B7 ; [.4D8B.0020.0002] # LINEAR B IDEOGRAM B176 TREE +100B8 ; [.4D8C.0020.0002] # LINEAR B IDEOGRAM B177 +100B9 ; [.4D8D.0020.0002] # LINEAR B IDEOGRAM B178 +100BA ; [.4D8E.0020.0002] # LINEAR B IDEOGRAM B179 +100BB ; [.4D8F.0020.0002] # LINEAR B IDEOGRAM B180 +100BC ; [.4D90.0020.0002] # LINEAR B IDEOGRAM B181 +100BD ; [.4D91.0020.0002] # LINEAR B IDEOGRAM B182 +100BE ; [.4D92.0020.0002] # LINEAR B IDEOGRAM B183 +100BF ; [.4D93.0020.0002] # LINEAR B IDEOGRAM B184 +100C0 ; [.4D94.0020.0002] # LINEAR B IDEOGRAM B185 +100C1 ; [.4D95.0020.0002] # LINEAR B IDEOGRAM B189 +100C2 ; [.4D96.0020.0002] # LINEAR B IDEOGRAM B190 +100C3 ; [.4D97.0020.0002] # LINEAR B IDEOGRAM B191 HELMET +100C4 ; [.4D98.0020.0002] # LINEAR B IDEOGRAM B220 FOOTSTOOL +100C5 ; [.4D99.0020.0002] # LINEAR B IDEOGRAM B225 BATHTUB +100C6 ; [.4D9A.0020.0002] # LINEAR B IDEOGRAM B230 SPEAR +100C7 ; [.4D9B.0020.0002] # LINEAR B IDEOGRAM B231 ARROW +100C8 ; [.4D9C.0020.0002] # LINEAR B IDEOGRAM B232 +100C9 ; [.4D9D.0020.0002] # LINEAR B IDEOGRAM B233 SWORD +100CA ; [.4D9E.0020.0002] # LINEAR B IDEOGRAM B234 +100CB ; [.4D9F.0020.0002] # LINEAR B IDEOGRAM B236 +100CC ; [.4DA0.0020.0002] # LINEAR B IDEOGRAM B240 WHEELED CHARIOT +100CD ; [.4DA1.0020.0002] # LINEAR B IDEOGRAM B241 CHARIOT +100CE ; [.4DA2.0020.0002] # LINEAR B IDEOGRAM B242 CHARIOT FRAME +100CF ; [.4DA3.0020.0002] # LINEAR B IDEOGRAM B243 WHEEL +100D0 ; [.4DA4.0020.0002] # LINEAR B IDEOGRAM B245 +100D1 ; [.4DA5.0020.0002] # LINEAR B IDEOGRAM B246 +100D2 ; [.4DA6.0020.0002] # LINEAR B MONOGRAM B247 DIPTE +100D3 ; [.4DA7.0020.0002] # LINEAR B IDEOGRAM B248 +100D4 ; [.4DA8.0020.0002] # LINEAR B IDEOGRAM B249 +100D5 ; [.4DA9.0020.0002] # LINEAR B IDEOGRAM B251 +100D6 ; [.4DAA.0020.0002] # LINEAR B IDEOGRAM B252 +100D7 ; [.4DAB.0020.0002] # LINEAR B IDEOGRAM B253 +100D8 ; [.4DAC.0020.0002] # LINEAR B IDEOGRAM B254 DART +100D9 ; [.4DAD.0020.0002] # LINEAR B IDEOGRAM B255 +100DA ; [.4DAE.0020.0002] # LINEAR B IDEOGRAM B256 +100DB ; [.4DAF.0020.0002] # LINEAR B IDEOGRAM B257 +100DC ; [.4DB0.0020.0002] # LINEAR B IDEOGRAM B258 +100DD ; [.4DB1.0020.0002] # LINEAR B IDEOGRAM B259 +100DE ; [.4DB2.0020.0002] # LINEAR B IDEOGRAM VESSEL B155 +100DF ; [.4DB3.0020.0002] # LINEAR B IDEOGRAM VESSEL B200 +100E0 ; [.4DB4.0020.0002] # LINEAR B IDEOGRAM VESSEL B201 +100E1 ; [.4DB5.0020.0002] # LINEAR B IDEOGRAM VESSEL B202 +100E2 ; [.4DB6.0020.0002] # LINEAR B IDEOGRAM VESSEL B203 +100E3 ; [.4DB7.0020.0002] # LINEAR B IDEOGRAM VESSEL B204 +100E4 ; [.4DB8.0020.0002] # LINEAR B IDEOGRAM VESSEL B205 +100E5 ; [.4DB9.0020.0002] # LINEAR B IDEOGRAM VESSEL B206 +100E6 ; [.4DBA.0020.0002] # LINEAR B IDEOGRAM VESSEL B207 +100E7 ; [.4DBB.0020.0002] # LINEAR B IDEOGRAM VESSEL B208 +100E8 ; [.4DBC.0020.0002] # LINEAR B IDEOGRAM VESSEL B209 +100E9 ; [.4DBD.0020.0002] # LINEAR B IDEOGRAM VESSEL B210 +100EA ; [.4DBE.0020.0002] # LINEAR B IDEOGRAM VESSEL B211 +100EB ; [.4DBF.0020.0002] # LINEAR B IDEOGRAM VESSEL B212 +100EC ; [.4DC0.0020.0002] # LINEAR B IDEOGRAM VESSEL B213 +100ED ; [.4DC1.0020.0002] # LINEAR B IDEOGRAM VESSEL B214 +100EE ; [.4DC2.0020.0002] # LINEAR B IDEOGRAM VESSEL B215 +100EF ; [.4DC3.0020.0002] # LINEAR B IDEOGRAM VESSEL B216 +100F0 ; [.4DC4.0020.0002] # LINEAR B IDEOGRAM VESSEL B217 +100F1 ; [.4DC5.0020.0002] # LINEAR B IDEOGRAM VESSEL B218 +100F2 ; [.4DC6.0020.0002] # LINEAR B IDEOGRAM VESSEL B219 +100F3 ; [.4DC7.0020.0002] # LINEAR B IDEOGRAM VESSEL B221 +100F4 ; [.4DC8.0020.0002] # LINEAR B IDEOGRAM VESSEL B222 +100F5 ; [.4DC9.0020.0002] # LINEAR B IDEOGRAM VESSEL B226 +100F6 ; [.4DCA.0020.0002] # LINEAR B IDEOGRAM VESSEL B227 +100F7 ; [.4DCB.0020.0002] # LINEAR B IDEOGRAM VESSEL B228 +100F8 ; [.4DCC.0020.0002] # LINEAR B IDEOGRAM VESSEL B229 +100F9 ; [.4DCD.0020.0002] # LINEAR B IDEOGRAM VESSEL B250 +100FA ; [.4DCE.0020.0002] # LINEAR B IDEOGRAM VESSEL B305 +10600 ; [.4DCF.0020.0002] # LINEAR A SIGN AB001 +10601 ; [.4DD0.0020.0002] # LINEAR A SIGN AB002 +10602 ; [.4DD1.0020.0002] # LINEAR A SIGN AB003 +10603 ; [.4DD2.0020.0002] # LINEAR A SIGN AB004 +10604 ; [.4DD3.0020.0002] # LINEAR A SIGN AB005 +10605 ; [.4DD4.0020.0002] # LINEAR A SIGN AB006 +10606 ; [.4DD5.0020.0002] # LINEAR A SIGN AB007 +10607 ; [.4DD6.0020.0002] # LINEAR A SIGN AB008 +10608 ; [.4DD7.0020.0002] # LINEAR A SIGN AB009 +10609 ; [.4DD8.0020.0002] # LINEAR A SIGN AB010 +1060A ; [.4DD9.0020.0002] # LINEAR A SIGN AB011 +1060B ; [.4DDA.0020.0002] # LINEAR A SIGN AB013 +1060C ; [.4DDB.0020.0002] # LINEAR A SIGN AB016 +1060D ; [.4DDC.0020.0002] # LINEAR A SIGN AB017 +1060E ; [.4DDD.0020.0002] # LINEAR A SIGN AB020 +1060F ; [.4DDE.0020.0002] # LINEAR A SIGN AB021 +10610 ; [.4DDF.0020.0002] # LINEAR A SIGN AB021F +10611 ; [.4DE0.0020.0002] # LINEAR A SIGN AB021M +10612 ; [.4DE1.0020.0002] # LINEAR A SIGN AB022 +10613 ; [.4DE2.0020.0002] # LINEAR A SIGN AB022F +10614 ; [.4DE3.0020.0002] # LINEAR A SIGN AB022M +10615 ; [.4DE4.0020.0002] # LINEAR A SIGN AB023 +10616 ; [.4DE5.0020.0002] # LINEAR A SIGN AB023M +10617 ; [.4DE6.0020.0002] # LINEAR A SIGN AB024 +10618 ; [.4DE7.0020.0002] # LINEAR A SIGN AB026 +10619 ; [.4DE8.0020.0002] # LINEAR A SIGN AB027 +1061A ; [.4DE9.0020.0002] # LINEAR A SIGN AB028 +1061B ; [.4DEA.0020.0002] # LINEAR A SIGN A028B +1061C ; [.4DEB.0020.0002] # LINEAR A SIGN AB029 +1061D ; [.4DEC.0020.0002] # LINEAR A SIGN AB030 +1061E ; [.4DED.0020.0002] # LINEAR A SIGN AB031 +1061F ; [.4DEE.0020.0002] # LINEAR A SIGN AB034 +10620 ; [.4DEF.0020.0002] # LINEAR A SIGN AB037 +10621 ; [.4DF0.0020.0002] # LINEAR A SIGN AB038 +10622 ; [.4DF1.0020.0002] # LINEAR A SIGN AB039 +10623 ; [.4DF2.0020.0002] # LINEAR A SIGN AB040 +10624 ; [.4DF3.0020.0002] # LINEAR A SIGN AB041 +10625 ; [.4DF4.0020.0002] # LINEAR A SIGN AB044 +10626 ; [.4DF5.0020.0002] # LINEAR A SIGN AB045 +10627 ; [.4DF6.0020.0002] # LINEAR A SIGN AB046 +10628 ; [.4DF7.0020.0002] # LINEAR A SIGN AB047 +10629 ; [.4DF8.0020.0002] # LINEAR A SIGN AB048 +1062A ; [.4DF9.0020.0002] # LINEAR A SIGN AB049 +1062B ; [.4DFA.0020.0002] # LINEAR A SIGN AB050 +1062C ; [.4DFB.0020.0002] # LINEAR A SIGN AB051 +1062D ; [.4DFC.0020.0002] # LINEAR A SIGN AB053 +1062E ; [.4DFD.0020.0002] # LINEAR A SIGN AB054 +1062F ; [.4DFE.0020.0002] # LINEAR A SIGN AB055 +10630 ; [.4DFF.0020.0002] # LINEAR A SIGN AB056 +10631 ; [.4E00.0020.0002] # LINEAR A SIGN AB057 +10632 ; [.4E01.0020.0002] # LINEAR A SIGN AB058 +10633 ; [.4E02.0020.0002] # LINEAR A SIGN AB059 +10634 ; [.4E03.0020.0002] # LINEAR A SIGN AB060 +10635 ; [.4E04.0020.0002] # LINEAR A SIGN AB061 +10636 ; [.4E05.0020.0002] # LINEAR A SIGN AB065 +10637 ; [.4E06.0020.0002] # LINEAR A SIGN AB066 +10638 ; [.4E07.0020.0002] # LINEAR A SIGN AB067 +10639 ; [.4E08.0020.0002] # LINEAR A SIGN AB069 +1063A ; [.4E09.0020.0002] # LINEAR A SIGN AB070 +1063B ; [.4E0A.0020.0002] # LINEAR A SIGN AB073 +1063C ; [.4E0B.0020.0002] # LINEAR A SIGN AB074 +1063D ; [.4E0C.0020.0002] # LINEAR A SIGN AB076 +1063E ; [.4E0D.0020.0002] # LINEAR A SIGN AB077 +1063F ; [.4E0E.0020.0002] # LINEAR A SIGN AB078 +10640 ; [.4E0F.0020.0002] # LINEAR A SIGN AB079 +10641 ; [.4E10.0020.0002] # LINEAR A SIGN AB080 +10642 ; [.4E11.0020.0002] # LINEAR A SIGN AB081 +10643 ; [.4E12.0020.0002] # LINEAR A SIGN AB082 +10644 ; [.4E13.0020.0002] # LINEAR A SIGN AB085 +10645 ; [.4E14.0020.0002] # LINEAR A SIGN AB086 +10646 ; [.4E15.0020.0002] # LINEAR A SIGN AB087 +10647 ; [.4E16.0020.0002] # LINEAR A SIGN A100-102 +10648 ; [.4E17.0020.0002] # LINEAR A SIGN AB118 +10649 ; [.4E18.0020.0002] # LINEAR A SIGN AB120 +1064A ; [.4E19.0020.0002] # LINEAR A SIGN A120B +1064B ; [.4E1A.0020.0002] # LINEAR A SIGN AB122 +1064C ; [.4E1B.0020.0002] # LINEAR A SIGN AB123 +1064D ; [.4E1C.0020.0002] # LINEAR A SIGN AB131A +1064E ; [.4E1D.0020.0002] # LINEAR A SIGN AB131B +1064F ; [.4E1E.0020.0002] # LINEAR A SIGN A131C +10650 ; [.4E1F.0020.0002] # LINEAR A SIGN AB164 +10651 ; [.4E20.0020.0002] # LINEAR A SIGN AB171 +10652 ; [.4E21.0020.0002] # LINEAR A SIGN AB180 +10653 ; [.4E22.0020.0002] # LINEAR A SIGN AB188 +10654 ; [.4E23.0020.0002] # LINEAR A SIGN AB191 +10655 ; [.4E24.0020.0002] # LINEAR A SIGN A301 +10656 ; [.4E25.0020.0002] # LINEAR A SIGN A302 +10657 ; [.4E26.0020.0002] # LINEAR A SIGN A303 +10658 ; [.4E27.0020.0002] # LINEAR A SIGN A304 +10659 ; [.4E28.0020.0002] # LINEAR A SIGN A305 +1065A ; [.4E29.0020.0002] # LINEAR A SIGN A306 +1065B ; [.4E2A.0020.0002] # LINEAR A SIGN A307 +1065C ; [.4E2B.0020.0002] # LINEAR A SIGN A308 +1065D ; [.4E2C.0020.0002] # LINEAR A SIGN A309A +1065E ; [.4E2D.0020.0002] # LINEAR A SIGN A309B +1065F ; [.4E2E.0020.0002] # LINEAR A SIGN A309C +10660 ; [.4E2F.0020.0002] # LINEAR A SIGN A310 +10661 ; [.4E30.0020.0002] # LINEAR A SIGN A311 +10662 ; [.4E31.0020.0002] # LINEAR A SIGN A312 +10663 ; [.4E32.0020.0002] # LINEAR A SIGN A313A +10664 ; [.4E33.0020.0002] # LINEAR A SIGN A313B +10665 ; [.4E34.0020.0002] # LINEAR A SIGN A313C +10666 ; [.4E35.0020.0002] # LINEAR A SIGN A314 +10667 ; [.4E36.0020.0002] # LINEAR A SIGN A315 +10668 ; [.4E37.0020.0002] # LINEAR A SIGN A316 +10669 ; [.4E38.0020.0002] # LINEAR A SIGN A317 +1066A ; [.4E39.0020.0002] # LINEAR A SIGN A318 +1066B ; [.4E3A.0020.0002] # LINEAR A SIGN A319 +1066C ; [.4E3B.0020.0002] # LINEAR A SIGN A320 +1066D ; [.4E3C.0020.0002] # LINEAR A SIGN A321 +1066E ; [.4E3D.0020.0002] # LINEAR A SIGN A322 +1066F ; [.4E3E.0020.0002] # LINEAR A SIGN A323 +10670 ; [.4E3F.0020.0002] # LINEAR A SIGN A324 +10671 ; [.4E40.0020.0002] # LINEAR A SIGN A325 +10672 ; [.4E41.0020.0002] # LINEAR A SIGN A326 +10673 ; [.4E42.0020.0002] # LINEAR A SIGN A327 +10674 ; [.4E43.0020.0002] # LINEAR A SIGN A328 +10675 ; [.4E44.0020.0002] # LINEAR A SIGN A329 +10676 ; [.4E45.0020.0002] # LINEAR A SIGN A330 +10677 ; [.4E46.0020.0002] # LINEAR A SIGN A331 +10678 ; [.4E47.0020.0002] # LINEAR A SIGN A332 +10679 ; [.4E48.0020.0002] # LINEAR A SIGN A333 +1067A ; [.4E49.0020.0002] # LINEAR A SIGN A334 +1067B ; [.4E4A.0020.0002] # LINEAR A SIGN A335 +1067C ; [.4E4B.0020.0002] # LINEAR A SIGN A336 +1067D ; [.4E4C.0020.0002] # LINEAR A SIGN A337 +1067E ; [.4E4D.0020.0002] # LINEAR A SIGN A338 +1067F ; [.4E4E.0020.0002] # LINEAR A SIGN A339 +10680 ; [.4E4F.0020.0002] # LINEAR A SIGN A340 +10681 ; [.4E50.0020.0002] # LINEAR A SIGN A341 +10682 ; [.4E51.0020.0002] # LINEAR A SIGN A342 +10683 ; [.4E52.0020.0002] # LINEAR A SIGN A343 +10684 ; [.4E53.0020.0002] # LINEAR A SIGN A344 +10685 ; [.4E54.0020.0002] # LINEAR A SIGN A345 +10686 ; [.4E55.0020.0002] # LINEAR A SIGN A346 +10687 ; [.4E56.0020.0002] # LINEAR A SIGN A347 +10688 ; [.4E57.0020.0002] # LINEAR A SIGN A348 +10689 ; [.4E58.0020.0002] # LINEAR A SIGN A349 +1068A ; [.4E59.0020.0002] # LINEAR A SIGN A350 +1068B ; [.4E5A.0020.0002] # LINEAR A SIGN A351 +1068C ; [.4E5B.0020.0002] # LINEAR A SIGN A352 +1068D ; [.4E5C.0020.0002] # LINEAR A SIGN A353 +1068E ; [.4E5D.0020.0002] # LINEAR A SIGN A354 +1068F ; [.4E5E.0020.0002] # LINEAR A SIGN A355 +10690 ; [.4E5F.0020.0002] # LINEAR A SIGN A356 +10691 ; [.4E60.0020.0002] # LINEAR A SIGN A357 +10692 ; [.4E61.0020.0002] # LINEAR A SIGN A358 +10693 ; [.4E62.0020.0002] # LINEAR A SIGN A359 +10694 ; [.4E63.0020.0002] # LINEAR A SIGN A360 +10695 ; [.4E64.0020.0002] # LINEAR A SIGN A361 +10696 ; [.4E65.0020.0002] # LINEAR A SIGN A362 +10697 ; [.4E66.0020.0002] # LINEAR A SIGN A363 +10698 ; [.4E67.0020.0002] # LINEAR A SIGN A364 +10699 ; [.4E68.0020.0002] # LINEAR A SIGN A365 +1069A ; [.4E69.0020.0002] # LINEAR A SIGN A366 +1069B ; [.4E6A.0020.0002] # LINEAR A SIGN A367 +1069C ; [.4E6B.0020.0002] # LINEAR A SIGN A368 +1069D ; [.4E6C.0020.0002] # LINEAR A SIGN A369 +1069E ; [.4E6D.0020.0002] # LINEAR A SIGN A370 +1069F ; [.4E6E.0020.0002] # LINEAR A SIGN A371 +106A0 ; [.4E6F.0020.0002] # LINEAR A SIGN A400-VAS +106A1 ; [.4E70.0020.0002] # LINEAR A SIGN A401-VAS +106A2 ; [.4E71.0020.0002] # LINEAR A SIGN A402-VAS +106A3 ; [.4E72.0020.0002] # LINEAR A SIGN A403-VAS +106A4 ; [.4E73.0020.0002] # LINEAR A SIGN A404-VAS +106A5 ; [.4E74.0020.0002] # LINEAR A SIGN A405-VAS +106A6 ; [.4E75.0020.0002] # LINEAR A SIGN A406-VAS +106A7 ; [.4E76.0020.0002] # LINEAR A SIGN A407-VAS +106A8 ; [.4E77.0020.0002] # LINEAR A SIGN A408-VAS +106A9 ; [.4E78.0020.0002] # LINEAR A SIGN A409-VAS +106AA ; [.4E79.0020.0002] # LINEAR A SIGN A410-VAS +106AB ; [.4E7A.0020.0002] # LINEAR A SIGN A411-VAS +106AC ; [.4E7B.0020.0002] # LINEAR A SIGN A412-VAS +106AD ; [.4E7C.0020.0002] # LINEAR A SIGN A413-VAS +106AE ; [.4E7D.0020.0002] # LINEAR A SIGN A414-VAS +106AF ; [.4E7E.0020.0002] # LINEAR A SIGN A415-VAS +106B0 ; [.4E7F.0020.0002] # LINEAR A SIGN A416-VAS +106B1 ; [.4E80.0020.0002] # LINEAR A SIGN A417-VAS +106B2 ; [.4E81.0020.0002] # LINEAR A SIGN A418-VAS +106B3 ; [.4E82.0020.0002] # LINEAR A SIGN A501 +106B4 ; [.4E83.0020.0002] # LINEAR A SIGN A502 +106B5 ; [.4E84.0020.0002] # LINEAR A SIGN A503 +106B6 ; [.4E85.0020.0002] # LINEAR A SIGN A504 +106B7 ; [.4E86.0020.0002] # LINEAR A SIGN A505 +106B8 ; [.4E87.0020.0002] # LINEAR A SIGN A506 +106B9 ; [.4E88.0020.0002] # LINEAR A SIGN A508 +106BA ; [.4E89.0020.0002] # LINEAR A SIGN A509 +106BB ; [.4E8A.0020.0002] # LINEAR A SIGN A510 +106BC ; [.4E8B.0020.0002] # LINEAR A SIGN A511 +106BD ; [.4E8C.0020.0002] # LINEAR A SIGN A512 +106BE ; [.4E8D.0020.0002] # LINEAR A SIGN A513 +106BF ; [.4E8E.0020.0002] # LINEAR A SIGN A515 +106C0 ; [.4E8F.0020.0002] # LINEAR A SIGN A516 +106C1 ; [.4E90.0020.0002] # LINEAR A SIGN A520 +106C2 ; [.4E91.0020.0002] # LINEAR A SIGN A521 +106C3 ; [.4E92.0020.0002] # LINEAR A SIGN A523 +106C4 ; [.4E93.0020.0002] # LINEAR A SIGN A524 +106C5 ; [.4E94.0020.0002] # LINEAR A SIGN A525 +106C6 ; [.4E95.0020.0002] # LINEAR A SIGN A526 +106C7 ; [.4E96.0020.0002] # LINEAR A SIGN A527 +106C8 ; [.4E97.0020.0002] # LINEAR A SIGN A528 +106C9 ; [.4E98.0020.0002] # LINEAR A SIGN A529 +106CA ; [.4E99.0020.0002] # LINEAR A SIGN A530 +106CB ; [.4E9A.0020.0002] # LINEAR A SIGN A531 +106CC ; [.4E9B.0020.0002] # LINEAR A SIGN A532 +106CD ; [.4E9C.0020.0002] # LINEAR A SIGN A534 +106CE ; [.4E9D.0020.0002] # LINEAR A SIGN A535 +106CF ; [.4E9E.0020.0002] # LINEAR A SIGN A536 +106D0 ; [.4E9F.0020.0002] # LINEAR A SIGN A537 +106D1 ; [.4EA0.0020.0002] # LINEAR A SIGN A538 +106D2 ; [.4EA1.0020.0002] # LINEAR A SIGN A539 +106D3 ; [.4EA2.0020.0002] # LINEAR A SIGN A540 +106D4 ; [.4EA3.0020.0002] # LINEAR A SIGN A541 +106D5 ; [.4EA4.0020.0002] # LINEAR A SIGN A542 +106D6 ; [.4EA5.0020.0002] # LINEAR A SIGN A545 +106D7 ; [.4EA6.0020.0002] # LINEAR A SIGN A547 +106D8 ; [.4EA7.0020.0002] # LINEAR A SIGN A548 +106D9 ; [.4EA8.0020.0002] # LINEAR A SIGN A549 +106DA ; [.4EA9.0020.0002] # LINEAR A SIGN A550 +106DB ; [.4EAA.0020.0002] # LINEAR A SIGN A551 +106DC ; [.4EAB.0020.0002] # LINEAR A SIGN A552 +106DD ; [.4EAC.0020.0002] # LINEAR A SIGN A553 +106DE ; [.4EAD.0020.0002] # LINEAR A SIGN A554 +106DF ; [.4EAE.0020.0002] # LINEAR A SIGN A555 +106E0 ; [.4EAF.0020.0002] # LINEAR A SIGN A556 +106E1 ; [.4EB0.0020.0002] # LINEAR A SIGN A557 +106E2 ; [.4EB1.0020.0002] # LINEAR A SIGN A559 +106E3 ; [.4EB2.0020.0002] # LINEAR A SIGN A563 +106E4 ; [.4EB3.0020.0002] # LINEAR A SIGN A564 +106E5 ; [.4EB4.0020.0002] # LINEAR A SIGN A565 +106E6 ; [.4EB5.0020.0002] # LINEAR A SIGN A566 +106E7 ; [.4EB6.0020.0002] # LINEAR A SIGN A568 +106E8 ; [.4EB7.0020.0002] # LINEAR A SIGN A569 +106E9 ; [.4EB8.0020.0002] # LINEAR A SIGN A570 +106EA ; [.4EB9.0020.0002] # LINEAR A SIGN A571 +106EB ; [.4EBA.0020.0002] # LINEAR A SIGN A572 +106EC ; [.4EBB.0020.0002] # LINEAR A SIGN A573 +106ED ; [.4EBC.0020.0002] # LINEAR A SIGN A574 +106EE ; [.4EBD.0020.0002] # LINEAR A SIGN A575 +106EF ; [.4EBE.0020.0002] # LINEAR A SIGN A576 +106F0 ; [.4EBF.0020.0002] # LINEAR A SIGN A577 +106F1 ; [.4EC0.0020.0002] # LINEAR A SIGN A578 +106F2 ; [.4EC1.0020.0002] # LINEAR A SIGN A579 +106F3 ; [.4EC2.0020.0002] # LINEAR A SIGN A580 +106F4 ; [.4EC3.0020.0002] # LINEAR A SIGN A581 +106F5 ; [.4EC4.0020.0002] # LINEAR A SIGN A582 +106F6 ; [.4EC5.0020.0002] # LINEAR A SIGN A583 +106F7 ; [.4EC6.0020.0002] # LINEAR A SIGN A584 +106F8 ; [.4EC7.0020.0002] # LINEAR A SIGN A585 +106F9 ; [.4EC8.0020.0002] # LINEAR A SIGN A586 +106FA ; [.4EC9.0020.0002] # LINEAR A SIGN A587 +106FB ; [.4ECA.0020.0002] # LINEAR A SIGN A588 +106FC ; [.4ECB.0020.0002] # LINEAR A SIGN A589 +106FD ; [.4ECC.0020.0002] # LINEAR A SIGN A591 +106FE ; [.4ECD.0020.0002] # LINEAR A SIGN A592 +106FF ; [.4ECE.0020.0002] # LINEAR A SIGN A594 +10700 ; [.4ECF.0020.0002] # LINEAR A SIGN A595 +10701 ; [.4ED0.0020.0002] # LINEAR A SIGN A596 +10702 ; [.4ED1.0020.0002] # LINEAR A SIGN A598 +10703 ; [.4ED2.0020.0002] # LINEAR A SIGN A600 +10704 ; [.4ED3.0020.0002] # LINEAR A SIGN A601 +10705 ; [.4ED4.0020.0002] # LINEAR A SIGN A602 +10706 ; [.4ED5.0020.0002] # LINEAR A SIGN A603 +10707 ; [.4ED6.0020.0002] # LINEAR A SIGN A604 +10708 ; [.4ED7.0020.0002] # LINEAR A SIGN A606 +10709 ; [.4ED8.0020.0002] # LINEAR A SIGN A608 +1070A ; [.4ED9.0020.0002] # LINEAR A SIGN A609 +1070B ; [.4EDA.0020.0002] # LINEAR A SIGN A610 +1070C ; [.4EDB.0020.0002] # LINEAR A SIGN A611 +1070D ; [.4EDC.0020.0002] # LINEAR A SIGN A612 +1070E ; [.4EDD.0020.0002] # LINEAR A SIGN A613 +1070F ; [.4EDE.0020.0002] # LINEAR A SIGN A614 +10710 ; [.4EDF.0020.0002] # LINEAR A SIGN A615 +10711 ; [.4EE0.0020.0002] # LINEAR A SIGN A616 +10712 ; [.4EE1.0020.0002] # LINEAR A SIGN A617 +10713 ; [.4EE2.0020.0002] # LINEAR A SIGN A618 +10714 ; [.4EE3.0020.0002] # LINEAR A SIGN A619 +10715 ; [.4EE4.0020.0002] # LINEAR A SIGN A620 +10716 ; [.4EE5.0020.0002] # LINEAR A SIGN A621 +10717 ; [.4EE6.0020.0002] # LINEAR A SIGN A622 +10718 ; [.4EE7.0020.0002] # LINEAR A SIGN A623 +10719 ; [.4EE8.0020.0002] # LINEAR A SIGN A624 +1071A ; [.4EE9.0020.0002] # LINEAR A SIGN A626 +1071B ; [.4EEA.0020.0002] # LINEAR A SIGN A627 +1071C ; [.4EEB.0020.0002] # LINEAR A SIGN A628 +1071D ; [.4EEC.0020.0002] # LINEAR A SIGN A629 +1071E ; [.4EED.0020.0002] # LINEAR A SIGN A634 +1071F ; [.4EEE.0020.0002] # LINEAR A SIGN A637 +10720 ; [.4EEF.0020.0002] # LINEAR A SIGN A638 +10721 ; [.4EF0.0020.0002] # LINEAR A SIGN A640 +10722 ; [.4EF1.0020.0002] # LINEAR A SIGN A642 +10723 ; [.4EF2.0020.0002] # LINEAR A SIGN A643 +10724 ; [.4EF3.0020.0002] # LINEAR A SIGN A644 +10725 ; [.4EF4.0020.0002] # LINEAR A SIGN A645 +10726 ; [.4EF5.0020.0002] # LINEAR A SIGN A646 +10727 ; [.4EF6.0020.0002] # LINEAR A SIGN A648 +10728 ; [.4EF7.0020.0002] # LINEAR A SIGN A649 +10729 ; [.4EF8.0020.0002] # LINEAR A SIGN A651 +1072A ; [.4EF9.0020.0002] # LINEAR A SIGN A652 +1072B ; [.4EFA.0020.0002] # LINEAR A SIGN A653 +1072C ; [.4EFB.0020.0002] # LINEAR A SIGN A654 +1072D ; [.4EFC.0020.0002] # LINEAR A SIGN A655 +1072E ; [.4EFD.0020.0002] # LINEAR A SIGN A656 +1072F ; [.4EFE.0020.0002] # LINEAR A SIGN A657 +10730 ; [.4EFF.0020.0002] # LINEAR A SIGN A658 +10731 ; [.4F00.0020.0002] # LINEAR A SIGN A659 +10732 ; [.4F01.0020.0002] # LINEAR A SIGN A660 +10733 ; [.4F02.0020.0002] # LINEAR A SIGN A661 +10734 ; [.4F03.0020.0002] # LINEAR A SIGN A662 +10735 ; [.4F04.0020.0002] # LINEAR A SIGN A663 +10736 ; [.4F05.0020.0002] # LINEAR A SIGN A664 +10740 ; [.4F06.0020.0002] # LINEAR A SIGN A701 A +10741 ; [.4F07.0020.0002] # LINEAR A SIGN A702 B +10742 ; [.4F08.0020.0002] # LINEAR A SIGN A703 D +10743 ; [.4F09.0020.0002] # LINEAR A SIGN A704 E +10744 ; [.4F0A.0020.0002] # LINEAR A SIGN A705 F +10745 ; [.4F0B.0020.0002] # LINEAR A SIGN A706 H +10746 ; [.4F0C.0020.0002] # LINEAR A SIGN A707 J +10747 ; [.4F0D.0020.0002] # LINEAR A SIGN A708 K +10748 ; [.4F0E.0020.0002] # LINEAR A SIGN A709 L +10749 ; [.4F0F.0020.0002] # LINEAR A SIGN A709-2 L2 +1074A ; [.4F10.0020.0002] # LINEAR A SIGN A709-3 L3 +1074B ; [.4F11.0020.0002] # LINEAR A SIGN A709-4 L4 +1074C ; [.4F12.0020.0002] # LINEAR A SIGN A709-6 L6 +1074D ; [.4F13.0020.0002] # LINEAR A SIGN A710 W +1074E ; [.4F14.0020.0002] # LINEAR A SIGN A711 X +1074F ; [.4F15.0020.0002] # LINEAR A SIGN A712 Y +10750 ; [.4F16.0020.0002] # LINEAR A SIGN A713 OMEGA +10751 ; [.4F17.0020.0002] # LINEAR A SIGN A714 ABB +10752 ; [.4F18.0020.0002] # LINEAR A SIGN A715 BB +10753 ; [.4F19.0020.0002] # LINEAR A SIGN A717 DD +10754 ; [.4F1A.0020.0002] # LINEAR A SIGN A726 EYYY +10755 ; [.4F1B.0020.0002] # LINEAR A SIGN A732 JE +10760 ; [.4F1C.0020.0002] # LINEAR A SIGN A800 +10761 ; [.4F1D.0020.0002] # LINEAR A SIGN A801 +10762 ; [.4F1E.0020.0002] # LINEAR A SIGN A802 +10763 ; [.4F1F.0020.0002] # LINEAR A SIGN A803 +10764 ; [.4F20.0020.0002] # LINEAR A SIGN A804 +10765 ; [.4F21.0020.0002] # LINEAR A SIGN A805 +10766 ; [.4F22.0020.0002] # LINEAR A SIGN A806 +10767 ; [.4F23.0020.0002] # LINEAR A SIGN A807 +10800 ; [.4F24.0020.0002] # CYPRIOT SYLLABLE A +10801 ; [.4F25.0020.0002] # CYPRIOT SYLLABLE E +10802 ; [.4F26.0020.0002] # CYPRIOT SYLLABLE I +10803 ; [.4F27.0020.0002] # CYPRIOT SYLLABLE O +10804 ; [.4F28.0020.0002] # CYPRIOT SYLLABLE U +10805 ; [.4F29.0020.0002] # CYPRIOT SYLLABLE JA +10808 ; [.4F2A.0020.0002] # CYPRIOT SYLLABLE JO +1080A ; [.4F2B.0020.0002] # CYPRIOT SYLLABLE KA +1080B ; [.4F2C.0020.0002] # CYPRIOT SYLLABLE KE +1080C ; [.4F2D.0020.0002] # CYPRIOT SYLLABLE KI +1080D ; [.4F2E.0020.0002] # CYPRIOT SYLLABLE KO +1080E ; [.4F2F.0020.0002] # CYPRIOT SYLLABLE KU +1080F ; [.4F30.0020.0002] # CYPRIOT SYLLABLE LA +10810 ; [.4F31.0020.0002] # CYPRIOT SYLLABLE LE +10811 ; [.4F32.0020.0002] # CYPRIOT SYLLABLE LI +10812 ; [.4F33.0020.0002] # CYPRIOT SYLLABLE LO +10813 ; [.4F34.0020.0002] # CYPRIOT SYLLABLE LU +10814 ; [.4F35.0020.0002] # CYPRIOT SYLLABLE MA +10815 ; [.4F36.0020.0002] # CYPRIOT SYLLABLE ME +10816 ; [.4F37.0020.0002] # CYPRIOT SYLLABLE MI +10817 ; [.4F38.0020.0002] # CYPRIOT SYLLABLE MO +10818 ; [.4F39.0020.0002] # CYPRIOT SYLLABLE MU +10819 ; [.4F3A.0020.0002] # CYPRIOT SYLLABLE NA +1081A ; [.4F3B.0020.0002] # CYPRIOT SYLLABLE NE +1081B ; [.4F3C.0020.0002] # CYPRIOT SYLLABLE NI +1081C ; [.4F3D.0020.0002] # CYPRIOT SYLLABLE NO +1081D ; [.4F3E.0020.0002] # CYPRIOT SYLLABLE NU +1081E ; [.4F3F.0020.0002] # CYPRIOT SYLLABLE PA +1081F ; [.4F40.0020.0002] # CYPRIOT SYLLABLE PE +10820 ; [.4F41.0020.0002] # CYPRIOT SYLLABLE PI +10821 ; [.4F42.0020.0002] # CYPRIOT SYLLABLE PO +10822 ; [.4F43.0020.0002] # CYPRIOT SYLLABLE PU +10823 ; [.4F44.0020.0002] # CYPRIOT SYLLABLE RA +10824 ; [.4F45.0020.0002] # CYPRIOT SYLLABLE RE +10825 ; [.4F46.0020.0002] # CYPRIOT SYLLABLE RI +10826 ; [.4F47.0020.0002] # CYPRIOT SYLLABLE RO +10827 ; [.4F48.0020.0002] # CYPRIOT SYLLABLE RU +10828 ; [.4F49.0020.0002] # CYPRIOT SYLLABLE SA +10829 ; [.4F4A.0020.0002] # CYPRIOT SYLLABLE SE +1082A ; [.4F4B.0020.0002] # CYPRIOT SYLLABLE SI +1082B ; [.4F4C.0020.0002] # CYPRIOT SYLLABLE SO +1082C ; [.4F4D.0020.0002] # CYPRIOT SYLLABLE SU +1082D ; [.4F4E.0020.0002] # CYPRIOT SYLLABLE TA +1082E ; [.4F4F.0020.0002] # CYPRIOT SYLLABLE TE +1082F ; [.4F50.0020.0002] # CYPRIOT SYLLABLE TI +10830 ; [.4F51.0020.0002] # CYPRIOT SYLLABLE TO +10831 ; [.4F52.0020.0002] # CYPRIOT SYLLABLE TU +10832 ; [.4F53.0020.0002] # CYPRIOT SYLLABLE WA +10833 ; [.4F54.0020.0002] # CYPRIOT SYLLABLE WE +10834 ; [.4F55.0020.0002] # CYPRIOT SYLLABLE WI +10835 ; [.4F56.0020.0002] # CYPRIOT SYLLABLE WO +10837 ; [.4F57.0020.0002] # CYPRIOT SYLLABLE XA +10838 ; [.4F58.0020.0002] # CYPRIOT SYLLABLE XE +1083C ; [.4F59.0020.0002] # CYPRIOT SYLLABLE ZA +1083F ; [.4F5A.0020.0002] # CYPRIOT SYLLABLE ZO +10A60 ; [.4F5B.0020.0002] # OLD SOUTH ARABIAN LETTER HE +10A61 ; [.4F5C.0020.0002] # OLD SOUTH ARABIAN LETTER LAMEDH +10A62 ; [.4F5D.0020.0002] # OLD SOUTH ARABIAN LETTER HETH +10A63 ; [.4F5E.0020.0002] # OLD SOUTH ARABIAN LETTER MEM +10A64 ; [.4F5F.0020.0002] # OLD SOUTH ARABIAN LETTER QOPH +10A65 ; [.4F60.0020.0002] # OLD SOUTH ARABIAN LETTER WAW +10A66 ; [.4F61.0020.0002] # OLD SOUTH ARABIAN LETTER SHIN +10A67 ; [.4F62.0020.0002] # OLD SOUTH ARABIAN LETTER RESH +10A68 ; [.4F63.0020.0002] # OLD SOUTH ARABIAN LETTER BETH +10A69 ; [.4F64.0020.0002] # OLD SOUTH ARABIAN LETTER TAW +10A6A ; [.4F65.0020.0002] # OLD SOUTH ARABIAN LETTER SAT +10A6B ; [.4F66.0020.0002] # OLD SOUTH ARABIAN LETTER KAPH +10A6C ; [.4F67.0020.0002] # OLD SOUTH ARABIAN LETTER NUN +10A6D ; [.4F68.0020.0002] # OLD SOUTH ARABIAN LETTER KHETH +10A6E ; [.4F69.0020.0002] # OLD SOUTH ARABIAN LETTER SADHE +10A6F ; [.4F6A.0020.0002] # OLD SOUTH ARABIAN LETTER SAMEKH +10A70 ; [.4F6B.0020.0002] # OLD SOUTH ARABIAN LETTER FE +10A71 ; [.4F6C.0020.0002] # OLD SOUTH ARABIAN LETTER ALEF +10A72 ; [.4F6D.0020.0002] # OLD SOUTH ARABIAN LETTER AYN +10A73 ; [.4F6E.0020.0002] # OLD SOUTH ARABIAN LETTER DHADHE +10A74 ; [.4F6F.0020.0002] # OLD SOUTH ARABIAN LETTER GIMEL +10A75 ; [.4F70.0020.0002] # OLD SOUTH ARABIAN LETTER DALETH +10A76 ; [.4F71.0020.0002] # OLD SOUTH ARABIAN LETTER GHAYN +10A77 ; [.4F72.0020.0002] # OLD SOUTH ARABIAN LETTER TETH +10A78 ; [.4F73.0020.0002] # OLD SOUTH ARABIAN LETTER ZAYN +10A79 ; [.4F74.0020.0002] # OLD SOUTH ARABIAN LETTER DHALETH +10A7A ; [.4F75.0020.0002] # OLD SOUTH ARABIAN LETTER YODH +10A7B ; [.4F76.0020.0002] # OLD SOUTH ARABIAN LETTER THAW +10A7C ; [.4F77.0020.0002] # OLD SOUTH ARABIAN LETTER THETH +10A80 ; [.4F78.0020.0002] # OLD NORTH ARABIAN LETTER HEH +10A81 ; [.4F79.0020.0002] # OLD NORTH ARABIAN LETTER LAM +10A82 ; [.4F7A.0020.0002] # OLD NORTH ARABIAN LETTER HAH +10A83 ; [.4F7B.0020.0002] # OLD NORTH ARABIAN LETTER MEEM +10A84 ; [.4F7C.0020.0002] # OLD NORTH ARABIAN LETTER QAF +10A85 ; [.4F7D.0020.0002] # OLD NORTH ARABIAN LETTER WAW +10A86 ; [.4F7E.0020.0002] # OLD NORTH ARABIAN LETTER ES-2 +10A87 ; [.4F7F.0020.0002] # OLD NORTH ARABIAN LETTER REH +10A88 ; [.4F80.0020.0002] # OLD NORTH ARABIAN LETTER BEH +10A89 ; [.4F81.0020.0002] # OLD NORTH ARABIAN LETTER TEH +10A8A ; [.4F82.0020.0002] # OLD NORTH ARABIAN LETTER ES-1 +10A8B ; [.4F83.0020.0002] # OLD NORTH ARABIAN LETTER KAF +10A8C ; [.4F84.0020.0002] # OLD NORTH ARABIAN LETTER NOON +10A8D ; [.4F85.0020.0002] # OLD NORTH ARABIAN LETTER KHAH +10A8E ; [.4F86.0020.0002] # OLD NORTH ARABIAN LETTER SAD +10A8F ; [.4F87.0020.0002] # OLD NORTH ARABIAN LETTER ES-3 +10A90 ; [.4F88.0020.0002] # OLD NORTH ARABIAN LETTER FEH +10A91 ; [.4F89.0020.0002] # OLD NORTH ARABIAN LETTER ALEF +10A92 ; [.4F8A.0020.0002] # OLD NORTH ARABIAN LETTER AIN +10A93 ; [.4F8B.0020.0002] # OLD NORTH ARABIAN LETTER DAD +10A94 ; [.4F8C.0020.0002] # OLD NORTH ARABIAN LETTER GEEM +10A95 ; [.4F8D.0020.0002] # OLD NORTH ARABIAN LETTER DAL +10A96 ; [.4F8E.0020.0002] # OLD NORTH ARABIAN LETTER GHAIN +10A97 ; [.4F8F.0020.0002] # OLD NORTH ARABIAN LETTER TAH +10A98 ; [.4F90.0020.0002] # OLD NORTH ARABIAN LETTER ZAIN +10A99 ; [.4F91.0020.0002] # OLD NORTH ARABIAN LETTER THAL +10A9A ; [.4F92.0020.0002] # OLD NORTH ARABIAN LETTER YEH +10A9B ; [.4F93.0020.0002] # OLD NORTH ARABIAN LETTER THEH +10A9C ; [.4F94.0020.0002] # OLD NORTH ARABIAN LETTER ZAH +10B00 ; [.4F95.0020.0002] # AVESTAN LETTER A +10B01 ; [.4F96.0020.0002] # AVESTAN LETTER AA +10B02 ; [.4F97.0020.0002] # AVESTAN LETTER AO +10B03 ; [.4F98.0020.0002] # AVESTAN LETTER AAO +10B04 ; [.4F99.0020.0002] # AVESTAN LETTER AN +10B05 ; [.4F9A.0020.0002] # AVESTAN LETTER AAN +10B06 ; [.4F9B.0020.0002] # AVESTAN LETTER AE +10B07 ; [.4F9C.0020.0002] # AVESTAN LETTER AEE +10B08 ; [.4F9D.0020.0002] # AVESTAN LETTER E +10B09 ; [.4F9E.0020.0002] # AVESTAN LETTER EE +10B0A ; [.4F9F.0020.0002] # AVESTAN LETTER O +10B0B ; [.4FA0.0020.0002] # AVESTAN LETTER OO +10B0C ; [.4FA1.0020.0002] # AVESTAN LETTER I +10B0D ; [.4FA2.0020.0002] # AVESTAN LETTER II +10B0E ; [.4FA3.0020.0002] # AVESTAN LETTER U +10B0F ; [.4FA4.0020.0002] # AVESTAN LETTER UU +10B10 ; [.4FA5.0020.0002] # AVESTAN LETTER KE +10B11 ; [.4FA6.0020.0002] # AVESTAN LETTER XE +10B12 ; [.4FA7.0020.0002] # AVESTAN LETTER XYE +10B13 ; [.4FA8.0020.0002] # AVESTAN LETTER XVE +10B14 ; [.4FA9.0020.0002] # AVESTAN LETTER GE +10B15 ; [.4FAA.0020.0002] # AVESTAN LETTER GGE +10B16 ; [.4FAB.0020.0002] # AVESTAN LETTER GHE +10B17 ; [.4FAC.0020.0002] # AVESTAN LETTER CE +10B18 ; [.4FAD.0020.0002] # AVESTAN LETTER JE +10B19 ; [.4FAE.0020.0002] # AVESTAN LETTER TE +10B1A ; [.4FAF.0020.0002] # AVESTAN LETTER THE +10B1B ; [.4FB0.0020.0002] # AVESTAN LETTER DE +10B1C ; [.4FB1.0020.0002] # AVESTAN LETTER DHE +10B1D ; [.4FB2.0020.0002] # AVESTAN LETTER TTE +10B1E ; [.4FB3.0020.0002] # AVESTAN LETTER PE +10B1F ; [.4FB4.0020.0002] # AVESTAN LETTER FE +10B20 ; [.4FB5.0020.0002] # AVESTAN LETTER BE +10B21 ; [.4FB6.0020.0002] # AVESTAN LETTER BHE +10B22 ; [.4FB7.0020.0002] # AVESTAN LETTER NGE +10B23 ; [.4FB8.0020.0002] # AVESTAN LETTER NGYE +10B24 ; [.4FB9.0020.0002] # AVESTAN LETTER NGVE +10B25 ; [.4FBA.0020.0002] # AVESTAN LETTER NE +10B26 ; [.4FBB.0020.0002] # AVESTAN LETTER NYE +10B27 ; [.4FBC.0020.0002] # AVESTAN LETTER NNE +10B28 ; [.4FBD.0020.0002] # AVESTAN LETTER ME +10B29 ; [.4FBE.0020.0002] # AVESTAN LETTER HME +10B2A ; [.4FBF.0020.0002] # AVESTAN LETTER YYE +10B2B ; [.4FC0.0020.0002] # AVESTAN LETTER YE +10B2C ; [.4FC1.0020.0002] # AVESTAN LETTER VE +10B2D ; [.4FC2.0020.0002] # AVESTAN LETTER RE +10B2E ; [.4FC2.0020.0004][.0000.0118.0004] # AVESTAN LETTER LE +10B2F ; [.4FC3.0020.0002] # AVESTAN LETTER SE +10B30 ; [.4FC4.0020.0002] # AVESTAN LETTER ZE +10B31 ; [.4FC5.0020.0002] # AVESTAN LETTER SHE +10B32 ; [.4FC6.0020.0002] # AVESTAN LETTER ZHE +10B33 ; [.4FC7.0020.0002] # AVESTAN LETTER SHYE +10B34 ; [.4FC8.0020.0002] # AVESTAN LETTER SSHE +10B35 ; [.4FC9.0020.0002] # AVESTAN LETTER HE +10860 ; [.4FCA.0020.0002] # PALMYRENE LETTER ALEPH +10861 ; [.4FCB.0020.0002] # PALMYRENE LETTER BETH +10862 ; [.4FCC.0020.0002] # PALMYRENE LETTER GIMEL +10863 ; [.4FCD.0020.0002] # PALMYRENE LETTER DALETH +10864 ; [.4FCE.0020.0002] # PALMYRENE LETTER HE +10865 ; [.4FCF.0020.0002] # PALMYRENE LETTER WAW +10866 ; [.4FD0.0020.0002] # PALMYRENE LETTER ZAYIN +10867 ; [.4FD1.0020.0002] # PALMYRENE LETTER HETH +10868 ; [.4FD2.0020.0002] # PALMYRENE LETTER TETH +10869 ; [.4FD3.0020.0002] # PALMYRENE LETTER YODH +1086A ; [.4FD4.0020.0002] # PALMYRENE LETTER KAPH +1086B ; [.4FD5.0020.0002] # PALMYRENE LETTER LAMEDH +1086C ; [.4FD6.0020.0002] # PALMYRENE LETTER MEM +1086E ; [.4FD7.0020.0002] # PALMYRENE LETTER NUN +1086D ; [.4FD7.0020.0019] # PALMYRENE LETTER FINAL NUN +1086F ; [.4FD8.0020.0002] # PALMYRENE LETTER SAMEKH +10870 ; [.4FD9.0020.0002] # PALMYRENE LETTER AYIN +10871 ; [.4FDA.0020.0002] # PALMYRENE LETTER PE +10872 ; [.4FDB.0020.0002] # PALMYRENE LETTER SADHE +10873 ; [.4FDC.0020.0002] # PALMYRENE LETTER QOPH +10874 ; [.4FDD.0020.0002] # PALMYRENE LETTER RESH +10875 ; [.4FDE.0020.0002] # PALMYRENE LETTER SHIN +10876 ; [.4FDF.0020.0002] # PALMYRENE LETTER TAW +10881 ; [.4FE0.0020.0002] # NABATAEAN LETTER ALEPH +10880 ; [.4FE0.0020.0019] # NABATAEAN LETTER FINAL ALEPH +10883 ; [.4FE1.0020.0002] # NABATAEAN LETTER BETH +10882 ; [.4FE1.0020.0019] # NABATAEAN LETTER FINAL BETH +10884 ; [.4FE2.0020.0002] # NABATAEAN LETTER GIMEL +10885 ; [.4FE3.0020.0002] # NABATAEAN LETTER DALETH +10887 ; [.4FE4.0020.0002] # NABATAEAN LETTER HE +10886 ; [.4FE4.0020.0019] # NABATAEAN LETTER FINAL HE +10888 ; [.4FE5.0020.0002] # NABATAEAN LETTER WAW +10889 ; [.4FE6.0020.0002] # NABATAEAN LETTER ZAYIN +1088A ; [.4FE7.0020.0002] # NABATAEAN LETTER HETH +1088B ; [.4FE8.0020.0002] # NABATAEAN LETTER TETH +1088D ; [.4FE9.0020.0002] # NABATAEAN LETTER YODH +1088C ; [.4FE9.0020.0019] # NABATAEAN LETTER FINAL YODH +1088F ; [.4FEA.0020.0002] # NABATAEAN LETTER KAPH +1088E ; [.4FEA.0020.0019] # NABATAEAN LETTER FINAL KAPH +10891 ; [.4FEB.0020.0002] # NABATAEAN LETTER LAMEDH +10890 ; [.4FEB.0020.0019] # NABATAEAN LETTER FINAL LAMEDH +10893 ; [.4FEC.0020.0002] # NABATAEAN LETTER MEM +10892 ; [.4FEC.0020.0019] # NABATAEAN LETTER FINAL MEM +10895 ; [.4FED.0020.0002] # NABATAEAN LETTER NUN +10894 ; [.4FED.0020.0019] # NABATAEAN LETTER FINAL NUN +10896 ; [.4FEE.0020.0002] # NABATAEAN LETTER SAMEKH +10897 ; [.4FEF.0020.0002] # NABATAEAN LETTER AYIN +10898 ; [.4FF0.0020.0002] # NABATAEAN LETTER PE +10899 ; [.4FF1.0020.0002] # NABATAEAN LETTER SADHE +1089A ; [.4FF2.0020.0002] # NABATAEAN LETTER QOPH +1089B ; [.4FF3.0020.0002] # NABATAEAN LETTER RESH +1089D ; [.4FF4.0020.0002] # NABATAEAN LETTER SHIN +1089C ; [.4FF4.0020.0019] # NABATAEAN LETTER FINAL SHIN +1089E ; [.4FF5.0020.0002] # NABATAEAN LETTER TAW +108E0 ; [.4FF6.0020.0002] # HATRAN LETTER ALEPH +108E1 ; [.4FF7.0020.0002] # HATRAN LETTER BETH +108E2 ; [.4FF8.0020.0002] # HATRAN LETTER GIMEL +108E3 ; [.4FF9.0020.0002] # HATRAN LETTER DALETH-RESH +108E4 ; [.4FFA.0020.0002] # HATRAN LETTER HE +108E5 ; [.4FFB.0020.0002] # HATRAN LETTER WAW +108E6 ; [.4FFC.0020.0002] # HATRAN LETTER ZAYN +108E7 ; [.4FFD.0020.0002] # HATRAN LETTER HETH +108E8 ; [.4FFE.0020.0002] # HATRAN LETTER TETH +108E9 ; [.4FFF.0020.0002] # HATRAN LETTER YODH +108EA ; [.5000.0020.0002] # HATRAN LETTER KAPH +108EB ; [.5001.0020.0002] # HATRAN LETTER LAMEDH +108EC ; [.5002.0020.0002] # HATRAN LETTER MEM +108ED ; [.5003.0020.0002] # HATRAN LETTER NUN +108EE ; [.5004.0020.0002] # HATRAN LETTER SAMEKH +108EF ; [.5005.0020.0002] # HATRAN LETTER AYN +108F0 ; [.5006.0020.0002] # HATRAN LETTER PE +108F1 ; [.5007.0020.0002] # HATRAN LETTER SADHE +108F2 ; [.5008.0020.0002] # HATRAN LETTER QOPH +108F4 ; [.5009.0020.0002] # HATRAN LETTER SHIN +108F5 ; [.500A.0020.0002] # HATRAN LETTER TAW +10840 ; [.500B.0020.0002] # IMPERIAL ARAMAIC LETTER ALEPH +10841 ; [.500C.0020.0002] # IMPERIAL ARAMAIC LETTER BETH +10842 ; [.500D.0020.0002] # IMPERIAL ARAMAIC LETTER GIMEL +10843 ; [.500E.0020.0002] # IMPERIAL ARAMAIC LETTER DALETH +10844 ; [.500F.0020.0002] # IMPERIAL ARAMAIC LETTER HE +10845 ; [.5010.0020.0002] # IMPERIAL ARAMAIC LETTER WAW +10846 ; [.5011.0020.0002] # IMPERIAL ARAMAIC LETTER ZAYIN +10847 ; [.5012.0020.0002] # IMPERIAL ARAMAIC LETTER HETH +10848 ; [.5013.0020.0002] # IMPERIAL ARAMAIC LETTER TETH +10849 ; [.5014.0020.0002] # IMPERIAL ARAMAIC LETTER YODH +1084A ; [.5015.0020.0002] # IMPERIAL ARAMAIC LETTER KAPH +1084B ; [.5016.0020.0002] # IMPERIAL ARAMAIC LETTER LAMEDH +1084C ; [.5017.0020.0002] # IMPERIAL ARAMAIC LETTER MEM +1084D ; [.5018.0020.0002] # IMPERIAL ARAMAIC LETTER NUN +1084E ; [.5019.0020.0002] # IMPERIAL ARAMAIC LETTER SAMEKH +1084F ; [.501A.0020.0002] # IMPERIAL ARAMAIC LETTER AYIN +10850 ; [.501B.0020.0002] # IMPERIAL ARAMAIC LETTER PE +10851 ; [.501C.0020.0002] # IMPERIAL ARAMAIC LETTER SADHE +10852 ; [.501D.0020.0002] # IMPERIAL ARAMAIC LETTER QOPH +10853 ; [.501E.0020.0002] # IMPERIAL ARAMAIC LETTER RESH +10854 ; [.501F.0020.0002] # IMPERIAL ARAMAIC LETTER SHIN +10855 ; [.5020.0020.0002] # IMPERIAL ARAMAIC LETTER TAW +10B40 ; [.5021.0020.0002] # INSCRIPTIONAL PARTHIAN LETTER ALEPH +10B41 ; [.5022.0020.0002] # INSCRIPTIONAL PARTHIAN LETTER BETH +10B42 ; [.5023.0020.0002] # INSCRIPTIONAL PARTHIAN LETTER GIMEL +10B43 ; [.5024.0020.0002] # INSCRIPTIONAL PARTHIAN LETTER DALETH +10B44 ; [.5025.0020.0002] # INSCRIPTIONAL PARTHIAN LETTER HE +10B45 ; [.5026.0020.0002] # INSCRIPTIONAL PARTHIAN LETTER WAW +10B46 ; [.5027.0020.0002] # INSCRIPTIONAL PARTHIAN LETTER ZAYIN +10B47 ; [.5028.0020.0002] # INSCRIPTIONAL PARTHIAN LETTER HETH +10B48 ; [.5029.0020.0002] # INSCRIPTIONAL PARTHIAN LETTER TETH +10B49 ; [.502A.0020.0002] # INSCRIPTIONAL PARTHIAN LETTER YODH +10B4A ; [.502B.0020.0002] # INSCRIPTIONAL PARTHIAN LETTER KAPH +10B4B ; [.502C.0020.0002] # INSCRIPTIONAL PARTHIAN LETTER LAMEDH +10B4C ; [.502D.0020.0002] # INSCRIPTIONAL PARTHIAN LETTER MEM +10B4D ; [.502E.0020.0002] # INSCRIPTIONAL PARTHIAN LETTER NUN +10B4E ; [.502F.0020.0002] # INSCRIPTIONAL PARTHIAN LETTER SAMEKH +10B4F ; [.5030.0020.0002] # INSCRIPTIONAL PARTHIAN LETTER AYIN +10B50 ; [.5031.0020.0002] # INSCRIPTIONAL PARTHIAN LETTER PE +10B51 ; [.5032.0020.0002] # INSCRIPTIONAL PARTHIAN LETTER SADHE +10B52 ; [.5033.0020.0002] # INSCRIPTIONAL PARTHIAN LETTER QOPH +10B53 ; [.5034.0020.0002] # INSCRIPTIONAL PARTHIAN LETTER RESH +10B54 ; [.5035.0020.0002] # INSCRIPTIONAL PARTHIAN LETTER SHIN +10B55 ; [.5036.0020.0002] # INSCRIPTIONAL PARTHIAN LETTER TAW +10B60 ; [.5037.0020.0002] # INSCRIPTIONAL PAHLAVI LETTER ALEPH +10B61 ; [.5038.0020.0002] # INSCRIPTIONAL PAHLAVI LETTER BETH +10B62 ; [.5039.0020.0002] # INSCRIPTIONAL PAHLAVI LETTER GIMEL +10B63 ; [.503A.0020.0002] # INSCRIPTIONAL PAHLAVI LETTER DALETH +10B64 ; [.503B.0020.0002] # INSCRIPTIONAL PAHLAVI LETTER HE +10B65 ; [.503C.0020.0002] # INSCRIPTIONAL PAHLAVI LETTER WAW-AYIN-RESH +10B66 ; [.503D.0020.0002] # INSCRIPTIONAL PAHLAVI LETTER ZAYIN +10B67 ; [.503E.0020.0002] # INSCRIPTIONAL PAHLAVI LETTER HETH +10B68 ; [.503F.0020.0002] # INSCRIPTIONAL PAHLAVI LETTER TETH +10B69 ; [.5040.0020.0002] # INSCRIPTIONAL PAHLAVI LETTER YODH +10B6A ; [.5041.0020.0002] # INSCRIPTIONAL PAHLAVI LETTER KAPH +10B6B ; [.5042.0020.0002] # INSCRIPTIONAL PAHLAVI LETTER LAMEDH +10B6C ; [.5043.0020.0002] # INSCRIPTIONAL PAHLAVI LETTER MEM-QOPH +10B6D ; [.5044.0020.0002] # INSCRIPTIONAL PAHLAVI LETTER NUN +10B6E ; [.5045.0020.0002] # INSCRIPTIONAL PAHLAVI LETTER SAMEKH +10B6F ; [.5046.0020.0002] # INSCRIPTIONAL PAHLAVI LETTER PE +10B70 ; [.5047.0020.0002] # INSCRIPTIONAL PAHLAVI LETTER SADHE +10B71 ; [.5048.0020.0002] # INSCRIPTIONAL PAHLAVI LETTER SHIN +10B72 ; [.5049.0020.0002] # INSCRIPTIONAL PAHLAVI LETTER TAW +10B80 ; [.504A.0020.0002] # PSALTER PAHLAVI LETTER ALEPH +10B81 ; [.504B.0020.0002] # PSALTER PAHLAVI LETTER BETH +10B82 ; [.504C.0020.0002] # PSALTER PAHLAVI LETTER GIMEL +10B83 ; [.504D.0020.0002] # PSALTER PAHLAVI LETTER DALETH +10B84 ; [.504E.0020.0002] # PSALTER PAHLAVI LETTER HE +10B85 ; [.504F.0020.0002] # PSALTER PAHLAVI LETTER WAW-AYIN-RESH +10B86 ; [.5050.0020.0002] # PSALTER PAHLAVI LETTER ZAYIN +10B87 ; [.5051.0020.0002] # PSALTER PAHLAVI LETTER HETH +10B88 ; [.5052.0020.0002] # PSALTER PAHLAVI LETTER YODH +10B89 ; [.5053.0020.0002] # PSALTER PAHLAVI LETTER KAPH +10B8A ; [.5054.0020.0002] # PSALTER PAHLAVI LETTER LAMEDH +10B8B ; [.5055.0020.0002] # PSALTER PAHLAVI LETTER MEM-QOPH +10B8C ; [.5056.0020.0002] # PSALTER PAHLAVI LETTER NUN +10B8D ; [.5057.0020.0002] # PSALTER PAHLAVI LETTER SAMEKH +10B8E ; [.5058.0020.0002] # PSALTER PAHLAVI LETTER PE +10B8F ; [.5059.0020.0002] # PSALTER PAHLAVI LETTER SADHE +10B90 ; [.505A.0020.0002] # PSALTER PAHLAVI LETTER SHIN +10B91 ; [.505B.0020.0002] # PSALTER PAHLAVI LETTER TAW +10FE0 ; [.505C.0020.0002] # ELYMAIC LETTER ALEPH +10FE1 ; [.505D.0020.0002] # ELYMAIC LETTER BETH +10FE2 ; [.505E.0020.0002] # ELYMAIC LETTER GIMEL +10FE3 ; [.505F.0020.0002] # ELYMAIC LETTER DALETH +10FE4 ; [.5060.0020.0002] # ELYMAIC LETTER HE +10FE5 ; [.5061.0020.0002] # ELYMAIC LETTER WAW +10FE6 ; [.5062.0020.0002] # ELYMAIC LETTER ZAYIN +10FF6 ; [.5062.0020.0004][.5065.0020.0004] # ELYMAIC LIGATURE ZAYIN-YODH +10FE7 ; [.5063.0020.0002] # ELYMAIC LETTER HETH +10FE8 ; [.5064.0020.0002] # ELYMAIC LETTER TETH +10FE9 ; [.5065.0020.0002] # ELYMAIC LETTER YODH +10FEA ; [.5066.0020.0002] # ELYMAIC LETTER KAPH +10FEB ; [.5067.0020.0002] # ELYMAIC LETTER LAMEDH +10FEC ; [.5068.0020.0002] # ELYMAIC LETTER MEM +10FED ; [.5069.0020.0002] # ELYMAIC LETTER NUN +10FEE ; [.506A.0020.0002] # ELYMAIC LETTER SAMEKH +10FEF ; [.506B.0020.0002] # ELYMAIC LETTER AYIN +10FF0 ; [.506C.0020.0002] # ELYMAIC LETTER PE +10FF1 ; [.506D.0020.0002] # ELYMAIC LETTER SADHE +10FF2 ; [.506E.0020.0002] # ELYMAIC LETTER QOPH +10FF3 ; [.506F.0020.0002] # ELYMAIC LETTER RESH +10FF4 ; [.5070.0020.0002] # ELYMAIC LETTER SHIN +10FF5 ; [.5071.0020.0002] # ELYMAIC LETTER TAW +10AC0 ; [.5072.0020.0002] # MANICHAEAN LETTER ALEPH +10AC1 ; [.5073.0020.0002] # MANICHAEAN LETTER BETH +10AC2 ; [.5074.0020.0002] # MANICHAEAN LETTER BHETH +10AC3 ; [.5075.0020.0002] # MANICHAEAN LETTER GIMEL +10AC4 ; [.5076.0020.0002] # MANICHAEAN LETTER GHIMEL +10AC5 ; [.5077.0020.0002] # MANICHAEAN LETTER DALETH +10AC6 ; [.5078.0020.0002] # MANICHAEAN LETTER HE +10AC7 ; [.5079.0020.0002] # MANICHAEAN LETTER WAW +10AC8 ; [.5079.0020.0004][.0000.0119.0004] # MANICHAEAN SIGN UD +10AC9 ; [.507A.0020.0002] # MANICHAEAN LETTER ZAYIN +10ACA ; [.507B.0020.0002] # MANICHAEAN LETTER ZHAYIN +10ACB ; [.507C.0020.0002] # MANICHAEAN LETTER JAYIN +10ACC ; [.507D.0020.0002] # MANICHAEAN LETTER JHAYIN +10ACD ; [.507E.0020.0002] # MANICHAEAN LETTER HETH +10ACE ; [.507F.0020.0002] # MANICHAEAN LETTER TETH +10ACF ; [.5080.0020.0002] # MANICHAEAN LETTER YODH +10AD0 ; [.5081.0020.0002] # MANICHAEAN LETTER KAPH +10AD1 ; [.5082.0020.0002] # MANICHAEAN LETTER XAPH +10AD2 ; [.5083.0020.0002] # MANICHAEAN LETTER KHAPH +10AD3 ; [.5084.0020.0002] # MANICHAEAN LETTER LAMEDH +10AD4 ; [.5085.0020.0002] # MANICHAEAN LETTER DHAMEDH +10AD5 ; [.5086.0020.0002] # MANICHAEAN LETTER THAMEDH +10AD6 ; [.5087.0020.0002] # MANICHAEAN LETTER MEM +10AD7 ; [.5088.0020.0002] # MANICHAEAN LETTER NUN +10AD8 ; [.5089.0020.0002] # MANICHAEAN LETTER SAMEKH +10AD9 ; [.508A.0020.0002] # MANICHAEAN LETTER AYIN +10ADA ; [.508B.0020.0002] # MANICHAEAN LETTER AAYIN +10ADB ; [.508C.0020.0002] # MANICHAEAN LETTER PE +10ADC ; [.508D.0020.0002] # MANICHAEAN LETTER FE +10ADD ; [.508E.0020.0002] # MANICHAEAN LETTER SADHE +10ADE ; [.508F.0020.0002] # MANICHAEAN LETTER QOPH +10ADF ; [.5090.0020.0002] # MANICHAEAN LETTER XOPH +10AE0 ; [.5091.0020.0002] # MANICHAEAN LETTER QHOPH +10AE1 ; [.5092.0020.0002] # MANICHAEAN LETTER RESH +10AE2 ; [.5093.0020.0002] # MANICHAEAN LETTER SHIN +10AE3 ; [.5094.0020.0002] # MANICHAEAN LETTER SSHIN +10AE4 ; [.5095.0020.0002] # MANICHAEAN LETTER TAW +10F00 ; [.5096.0020.0002] # OLD SOGDIAN LETTER ALEPH +10F01 ; [.5096.0020.0019] # OLD SOGDIAN LETTER FINAL ALEPH +10F02 ; [.5097.0020.0002] # OLD SOGDIAN LETTER BETH +10F03 ; [.5097.0020.0019] # OLD SOGDIAN LETTER FINAL BETH +10F04 ; [.5098.0020.0002] # OLD SOGDIAN LETTER GIMEL +10F05 ; [.5099.0020.0002] # OLD SOGDIAN LETTER HE +10F06 ; [.5099.0020.0019] # OLD SOGDIAN LETTER FINAL HE +10F07 ; [.509A.0020.0002] # OLD SOGDIAN LETTER WAW +10F08 ; [.509B.0020.0002] # OLD SOGDIAN LETTER ZAYIN +10F09 ; [.509C.0020.0002] # OLD SOGDIAN LETTER HETH +10F0A ; [.509D.0020.0002] # OLD SOGDIAN LETTER YODH +10F0B ; [.509E.0020.0002] # OLD SOGDIAN LETTER KAPH +10F0C ; [.509F.0020.0002] # OLD SOGDIAN LETTER LAMEDH +10F0D ; [.50A0.0020.0002] # OLD SOGDIAN LETTER MEM +10F0E ; [.50A1.0020.0002] # OLD SOGDIAN LETTER NUN +10F0F ; [.50A1.0020.0019] # OLD SOGDIAN LETTER FINAL NUN +10F10 ; [.50A1.0020.0004][.0000.0119.0004] # OLD SOGDIAN LETTER FINAL NUN WITH VERTICAL TAIL +10F11 ; [.50A2.0020.0002] # OLD SOGDIAN LETTER SAMEKH +10F12 ; [.50A3.0020.0002] # OLD SOGDIAN LETTER AYIN +10F13 ; [.50A3.0020.0004][.0000.0119.0004] # OLD SOGDIAN LETTER ALTERNATE AYIN +10F27 ; [.50A3.0020.0004][.50A6.0020.0004] # OLD SOGDIAN LIGATURE AYIN-DALETH +10F14 ; [.50A4.0020.0002] # OLD SOGDIAN LETTER PE +10F15 ; [.50A5.0020.0002] # OLD SOGDIAN LETTER SADHE +10F16 ; [.50A5.0020.0019] # OLD SOGDIAN LETTER FINAL SADHE +10F17 ; [.50A5.0020.0004][.0000.0119.0004] # OLD SOGDIAN LETTER FINAL SADHE WITH VERTICAL TAIL +10F18 ; [.50A6.0020.0002] # OLD SOGDIAN LETTER RESH-AYIN-DALETH +10F19 ; [.50A7.0020.0002] # OLD SOGDIAN LETTER SHIN +10F1A ; [.50A8.0020.0002] # OLD SOGDIAN LETTER TAW +10F1B ; [.50A8.0020.0019] # OLD SOGDIAN LETTER FINAL TAW +10F1C ; [.50A8.0020.0004][.0000.0119.0004] # OLD SOGDIAN LETTER FINAL TAW WITH VERTICAL TAIL +10F30 ; [.50A9.0020.0002] # SOGDIAN LETTER ALEPH +10F31 ; [.50AA.0020.0002] # SOGDIAN LETTER BETH +10F32 ; [.50AB.0020.0002] # SOGDIAN LETTER GIMEL +10F33 ; [.50AC.0020.0002] # SOGDIAN LETTER HE +10F34 ; [.50AD.0020.0002] # SOGDIAN LETTER WAW +10F35 ; [.50AE.0020.0002] # SOGDIAN LETTER ZAYIN +10F36 ; [.50AF.0020.0002] # SOGDIAN LETTER HETH +10F37 ; [.50B0.0020.0002] # SOGDIAN LETTER YODH +10F38 ; [.50B1.0020.0002] # SOGDIAN LETTER KAPH +10F39 ; [.50B2.0020.0002] # SOGDIAN LETTER LAMEDH +10F3A ; [.50B3.0020.0002] # SOGDIAN LETTER MEM +10F3B ; [.50B4.0020.0002] # SOGDIAN LETTER NUN +10F3C ; [.50B5.0020.0002] # SOGDIAN LETTER SAMEKH +10F3D ; [.50B6.0020.0002] # SOGDIAN LETTER AYIN +10F3E ; [.50B7.0020.0002] # SOGDIAN LETTER PE +10F3F ; [.50B8.0020.0002] # SOGDIAN LETTER SADHE +10F40 ; [.50B9.0020.0002] # SOGDIAN LETTER RESH-AYIN +10F41 ; [.50BA.0020.0002] # SOGDIAN LETTER SHIN +10F45 ; [.50BA.0020.0004][.0000.0119.0004] # SOGDIAN INDEPENDENT SHIN +10F42 ; [.50BB.0020.0002] # SOGDIAN LETTER TAW +10F43 ; [.50BC.0020.0002] # SOGDIAN LETTER FETH +10F44 ; [.50BD.0020.0002] # SOGDIAN LETTER LESH +10E80 ; [.50BE.0020.0002] # YEZIDI LETTER ELIF +10E81 ; [.50BF.0020.0002] # YEZIDI LETTER BE +10E82 ; [.50C0.0020.0002] # YEZIDI LETTER PE +10E83 ; [.50C1.0020.0002] # YEZIDI LETTER PHE +10E84 ; [.50C2.0020.0002] # YEZIDI LETTER THE +10E85 ; [.50C3.0020.0002] # YEZIDI LETTER SE +10E86 ; [.50C4.0020.0002] # YEZIDI LETTER CIM +10E87 ; [.50C5.0020.0002] # YEZIDI LETTER CHIM +10E88 ; [.50C6.0020.0002] # YEZIDI LETTER CHHIM +10E89 ; [.50C7.0020.0002] # YEZIDI LETTER HHA +10E8A ; [.50C8.0020.0002] # YEZIDI LETTER XA +10E8B ; [.50C9.0020.0002] # YEZIDI LETTER DAL +10E8C ; [.50CA.0020.0002] # YEZIDI LETTER ZAL +10E8D ; [.50CB.0020.0002] # YEZIDI LETTER RA +10E8E ; [.50CC.0020.0002] # YEZIDI LETTER RHA +10E8F ; [.50CD.0020.0002] # YEZIDI LETTER ZA +10E90 ; [.50CE.0020.0002] # YEZIDI LETTER JA +10E91 ; [.50CF.0020.0002] # YEZIDI LETTER SIN +10E92 ; [.50D0.0020.0002] # YEZIDI LETTER SHIN +10E93 ; [.50D1.0020.0002] # YEZIDI LETTER SAD +10E94 ; [.50D2.0020.0002] # YEZIDI LETTER DAD +10E95 ; [.50D3.0020.0002] # YEZIDI LETTER TA +10E96 ; [.50D4.0020.0002] # YEZIDI LETTER ZE +10E97 ; [.50D5.0020.0002] # YEZIDI LETTER EYN +10E98 ; [.50D6.0020.0002] # YEZIDI LETTER XHEYN +10E99 ; [.50D7.0020.0002] # YEZIDI LETTER FA +10E9A ; [.50D8.0020.0002] # YEZIDI LETTER VA +10E9B ; [.50D9.0020.0002] # YEZIDI LETTER VA ALTERNATE FORM +10E9C ; [.50DA.0020.0002] # YEZIDI LETTER QAF +10E9D ; [.50DB.0020.0002] # YEZIDI LETTER KAF +10E9E ; [.50DC.0020.0002] # YEZIDI LETTER KHAF +10E9F ; [.50DD.0020.0002] # YEZIDI LETTER GAF +10EA0 ; [.50DE.0020.0002] # YEZIDI LETTER LAM +10EB0 ; [.50DF.0020.0002] # YEZIDI LETTER LAM WITH DOT ABOVE +10EA1 ; [.50E0.0020.0002] # YEZIDI LETTER MIM +10EA2 ; [.50E1.0020.0002] # YEZIDI LETTER NUN +10EA3 ; [.50E2.0020.0002] # YEZIDI LETTER UM +10EA4 ; [.50E3.0020.0002] # YEZIDI LETTER WAW +10EA5 ; [.50E4.0020.0002] # YEZIDI LETTER OW +10EA6 ; [.50E5.0020.0002] # YEZIDI LETTER EW +10EA7 ; [.50E6.0020.0002] # YEZIDI LETTER HAY +10EA8 ; [.50E7.0020.0002] # YEZIDI LETTER YOT +10EB1 ; [.50E8.0020.0002] # YEZIDI LETTER YOT WITH CIRCUMFLEX ABOVE +10EA9 ; [.50E9.0020.0002] # YEZIDI LETTER ET +10FB0 ; [.50EA.0020.0002] # CHORASMIAN LETTER ALEPH +10FB1 ; [.50EB.0020.0002] # CHORASMIAN LETTER SMALL ALEPH +10FB2 ; [.50EC.0020.0002] # CHORASMIAN LETTER BETH +10FB3 ; [.50ED.0020.0002] # CHORASMIAN LETTER GIMEL +10FB4 ; [.50EE.0020.0002] # CHORASMIAN LETTER DALETH +10FB5 ; [.50EF.0020.0002] # CHORASMIAN LETTER HE +10FB6 ; [.50F0.0020.0002] # CHORASMIAN LETTER WAW +10FB7 ; [.50F1.0020.0002] # CHORASMIAN LETTER CURLED WAW +10FB8 ; [.50F2.0020.0002] # CHORASMIAN LETTER ZAYIN +10FB9 ; [.50F3.0020.0002] # CHORASMIAN LETTER HETH +10FBA ; [.50F4.0020.0002] # CHORASMIAN LETTER YODH +10FBB ; [.50F5.0020.0002] # CHORASMIAN LETTER KAPH +10FBC ; [.50F6.0020.0002] # CHORASMIAN LETTER LAMEDH +10FBD ; [.50F7.0020.0002] # CHORASMIAN LETTER MEM +10FBE ; [.50F8.0020.0002] # CHORASMIAN LETTER NUN +10FBF ; [.50F9.0020.0002] # CHORASMIAN LETTER SAMEKH +10FC0 ; [.50FA.0020.0002] # CHORASMIAN LETTER AYIN +10FC1 ; [.50FB.0020.0002] # CHORASMIAN LETTER PE +10FC2 ; [.50FC.0020.0002] # CHORASMIAN LETTER RESH +10FC3 ; [.50FD.0020.0002] # CHORASMIAN LETTER SHIN +10FC4 ; [.50FE.0020.0002] # CHORASMIAN LETTER TAW +10380 ; [.50FF.0020.0002] # UGARITIC LETTER ALPA +10381 ; [.5100.0020.0002] # UGARITIC LETTER BETA +10382 ; [.5101.0020.0002] # UGARITIC LETTER GAMLA +10383 ; [.5102.0020.0002] # UGARITIC LETTER KHA +10384 ; [.5103.0020.0002] # UGARITIC LETTER DELTA +10385 ; [.5104.0020.0002] # UGARITIC LETTER HO +10386 ; [.5105.0020.0002] # UGARITIC LETTER WO +10387 ; [.5106.0020.0002] # UGARITIC LETTER ZETA +10388 ; [.5107.0020.0002] # UGARITIC LETTER HOTA +10389 ; [.5108.0020.0002] # UGARITIC LETTER TET +1038A ; [.5109.0020.0002] # UGARITIC LETTER YOD +1038B ; [.510A.0020.0002] # UGARITIC LETTER KAF +1038C ; [.510B.0020.0002] # UGARITIC LETTER SHIN +1038D ; [.510C.0020.0002] # UGARITIC LETTER LAMDA +1038E ; [.510D.0020.0002] # UGARITIC LETTER MEM +1038F ; [.510E.0020.0002] # UGARITIC LETTER DHAL +10390 ; [.510F.0020.0002] # UGARITIC LETTER NUN +10391 ; [.5110.0020.0002] # UGARITIC LETTER ZU +10392 ; [.5111.0020.0002] # UGARITIC LETTER SAMKA +10393 ; [.5112.0020.0002] # UGARITIC LETTER AIN +10394 ; [.5113.0020.0002] # UGARITIC LETTER PU +10395 ; [.5114.0020.0002] # UGARITIC LETTER SADE +10396 ; [.5115.0020.0002] # UGARITIC LETTER QOPA +10397 ; [.5116.0020.0002] # UGARITIC LETTER RASHA +10398 ; [.5117.0020.0002] # UGARITIC LETTER THANNA +10399 ; [.5118.0020.0002] # UGARITIC LETTER GHAIN +1039A ; [.5119.0020.0002] # UGARITIC LETTER TO +1039B ; [.511A.0020.0002] # UGARITIC LETTER I +1039C ; [.511B.0020.0002] # UGARITIC LETTER U +1039D ; [.511C.0020.0002] # UGARITIC LETTER SSU +103A0 ; [.511D.0020.0002] # OLD PERSIAN SIGN A +103A1 ; [.511E.0020.0002] # OLD PERSIAN SIGN I +103A2 ; [.511F.0020.0002] # OLD PERSIAN SIGN U +103A3 ; [.5120.0020.0002] # OLD PERSIAN SIGN KA +103A4 ; [.5121.0020.0002] # OLD PERSIAN SIGN KU +103A5 ; [.5122.0020.0002] # OLD PERSIAN SIGN GA +103A6 ; [.5123.0020.0002] # OLD PERSIAN SIGN GU +103A7 ; [.5124.0020.0002] # OLD PERSIAN SIGN XA +103A8 ; [.5125.0020.0002] # OLD PERSIAN SIGN CA +103A9 ; [.5126.0020.0002] # OLD PERSIAN SIGN JA +103AA ; [.5127.0020.0002] # OLD PERSIAN SIGN JI +103AB ; [.5128.0020.0002] # OLD PERSIAN SIGN TA +103AC ; [.5129.0020.0002] # OLD PERSIAN SIGN TU +103AD ; [.512A.0020.0002] # OLD PERSIAN SIGN DA +103AE ; [.512B.0020.0002] # OLD PERSIAN SIGN DI +103AF ; [.512C.0020.0002] # OLD PERSIAN SIGN DU +103B0 ; [.512D.0020.0002] # OLD PERSIAN SIGN THA +103B1 ; [.512E.0020.0002] # OLD PERSIAN SIGN PA +103B2 ; [.512F.0020.0002] # OLD PERSIAN SIGN BA +103B3 ; [.5130.0020.0002] # OLD PERSIAN SIGN FA +103B4 ; [.5131.0020.0002] # OLD PERSIAN SIGN NA +103B5 ; [.5132.0020.0002] # OLD PERSIAN SIGN NU +103B6 ; [.5133.0020.0002] # OLD PERSIAN SIGN MA +103B7 ; [.5134.0020.0002] # OLD PERSIAN SIGN MI +103B8 ; [.5135.0020.0002] # OLD PERSIAN SIGN MU +103B9 ; [.5136.0020.0002] # OLD PERSIAN SIGN YA +103BA ; [.5137.0020.0002] # OLD PERSIAN SIGN VA +103BB ; [.5138.0020.0002] # OLD PERSIAN SIGN VI +103BC ; [.5139.0020.0002] # OLD PERSIAN SIGN RA +103BD ; [.513A.0020.0002] # OLD PERSIAN SIGN RU +103BE ; [.513B.0020.0002] # OLD PERSIAN SIGN LA +103BF ; [.513C.0020.0002] # OLD PERSIAN SIGN SA +103C0 ; [.513D.0020.0002] # OLD PERSIAN SIGN ZA +103C1 ; [.513E.0020.0002] # OLD PERSIAN SIGN SHA +103C2 ; [.513F.0020.0002] # OLD PERSIAN SIGN SSA +103C3 ; [.5140.0020.0002] # OLD PERSIAN SIGN HA +103C8 ; [.5141.0020.0002] # OLD PERSIAN SIGN AURAMAZDAA +103C9 ; [.5142.0020.0002] # OLD PERSIAN SIGN AURAMAZDAA-2 +103CA ; [.5143.0020.0002] # OLD PERSIAN SIGN AURAMAZDAAHA +103CB ; [.5144.0020.0002] # OLD PERSIAN SIGN XSHAAYATHIYA +103CC ; [.5145.0020.0002] # OLD PERSIAN SIGN DAHYAAUSH +103CD ; [.5146.0020.0002] # OLD PERSIAN SIGN DAHYAAUSH-2 +103CE ; [.5147.0020.0002] # OLD PERSIAN SIGN BAGA +103CF ; [.5148.0020.0002] # OLD PERSIAN SIGN BUUMISH +12000 ; [.5149.0020.0002] # CUNEIFORM SIGN A +12001 ; [.514A.0020.0002] # CUNEIFORM SIGN A TIMES A +12002 ; [.514B.0020.0002] # CUNEIFORM SIGN A TIMES BAD +12003 ; [.514C.0020.0002] # CUNEIFORM SIGN A TIMES GAN2 TENU +12004 ; [.514D.0020.0002] # CUNEIFORM SIGN A TIMES HA +12005 ; [.514E.0020.0002] # CUNEIFORM SIGN A TIMES IGI +12006 ; [.514F.0020.0002] # CUNEIFORM SIGN A TIMES LAGAR GUNU +12007 ; [.5150.0020.0002] # CUNEIFORM SIGN A TIMES MUSH +12008 ; [.5151.0020.0002] # CUNEIFORM SIGN A TIMES SAG +12009 ; [.5152.0020.0002] # CUNEIFORM SIGN A2 +1200A ; [.5153.0020.0002] # CUNEIFORM SIGN AB +1200B ; [.5154.0020.0002] # CUNEIFORM SIGN AB TIMES ASH2 +1200C ; [.5155.0020.0002] # CUNEIFORM SIGN AB TIMES DUN3 GUNU +1200D ; [.5156.0020.0002] # CUNEIFORM SIGN AB TIMES GAL +1200E ; [.5157.0020.0002] # CUNEIFORM SIGN AB TIMES GAN2 TENU +1200F ; [.5158.0020.0002] # CUNEIFORM SIGN AB TIMES HA +12010 ; [.5159.0020.0002] # CUNEIFORM SIGN AB TIMES IGI GUNU +12011 ; [.515A.0020.0002] # CUNEIFORM SIGN AB TIMES IMIN +12012 ; [.515B.0020.0002] # CUNEIFORM SIGN AB TIMES LAGAB +12013 ; [.515C.0020.0002] # CUNEIFORM SIGN AB TIMES SHESH +12014 ; [.515D.0020.0002] # CUNEIFORM SIGN AB TIMES U PLUS U PLUS U +12015 ; [.515E.0020.0002] # CUNEIFORM SIGN AB GUNU +12016 ; [.515F.0020.0002] # CUNEIFORM SIGN AB2 +12017 ; [.5160.0020.0002] # CUNEIFORM SIGN AB2 TIMES BALAG +12018 ; [.5161.0020.0002] # CUNEIFORM SIGN AB2 TIMES GAN2 TENU +12019 ; [.5162.0020.0002] # CUNEIFORM SIGN AB2 TIMES ME PLUS EN +1201A ; [.5163.0020.0002] # CUNEIFORM SIGN AB2 TIMES SHA3 +1201B ; [.5164.0020.0002] # CUNEIFORM SIGN AB2 TIMES TAK4 +1201C ; [.5165.0020.0002] # CUNEIFORM SIGN AD +1201D ; [.5166.0020.0002] # CUNEIFORM SIGN AK +1201E ; [.5167.0020.0002] # CUNEIFORM SIGN AK TIMES ERIN2 +1201F ; [.5168.0020.0002] # CUNEIFORM SIGN AK TIMES SHITA PLUS GISH +12020 ; [.5169.0020.0002] # CUNEIFORM SIGN AL +12021 ; [.516A.0020.0002] # CUNEIFORM SIGN AL TIMES AL +12022 ; [.516B.0020.0002] # CUNEIFORM SIGN AL TIMES DIM2 +12023 ; [.516C.0020.0002] # CUNEIFORM SIGN AL TIMES GISH +12024 ; [.516D.0020.0002] # CUNEIFORM SIGN AL TIMES HA +12025 ; [.516E.0020.0002] # CUNEIFORM SIGN AL TIMES KAD3 +12026 ; [.516F.0020.0002] # CUNEIFORM SIGN AL TIMES KI +12027 ; [.5170.0020.0002] # CUNEIFORM SIGN AL TIMES SHE +12028 ; [.5171.0020.0002] # CUNEIFORM SIGN AL TIMES USH +12029 ; [.5172.0020.0002] # CUNEIFORM SIGN ALAN +1202A ; [.5173.0020.0002] # CUNEIFORM SIGN ALEPH +1202B ; [.5174.0020.0002] # CUNEIFORM SIGN AMAR +1202C ; [.5175.0020.0002] # CUNEIFORM SIGN AMAR TIMES SHE +1202D ; [.5176.0020.0002] # CUNEIFORM SIGN AN +1202E ; [.5177.0020.0002] # CUNEIFORM SIGN AN OVER AN +1202F ; [.5178.0020.0002] # CUNEIFORM SIGN AN THREE TIMES +12030 ; [.5179.0020.0002] # CUNEIFORM SIGN AN PLUS NAGA OPPOSING AN PLUS NAGA +12031 ; [.517A.0020.0002] # CUNEIFORM SIGN AN PLUS NAGA SQUARED +12032 ; [.517B.0020.0002] # CUNEIFORM SIGN ANSHE +12033 ; [.517C.0020.0002] # CUNEIFORM SIGN APIN +12034 ; [.517D.0020.0002] # CUNEIFORM SIGN ARAD +12035 ; [.517E.0020.0002] # CUNEIFORM SIGN ARAD TIMES KUR +12036 ; [.517F.0020.0002] # CUNEIFORM SIGN ARKAB +12037 ; [.5180.0020.0002] # CUNEIFORM SIGN ASAL2 +12038 ; [.5181.0020.0002] # CUNEIFORM SIGN ASH +12039 ; [.5182.0020.0002] # CUNEIFORM SIGN ASH ZIDA TENU +1203A ; [.5183.0020.0002] # CUNEIFORM SIGN ASH KABA TENU +1203B ; [.5184.0020.0002] # CUNEIFORM SIGN ASH OVER ASH TUG2 OVER TUG2 TUG2 OVER TUG2 PAP +1203C ; [.5185.0020.0002] # CUNEIFORM SIGN ASH OVER ASH OVER ASH +1203D ; [.5186.0020.0002] # CUNEIFORM SIGN ASH OVER ASH OVER ASH CROSSING ASH OVER ASH OVER ASH +1203E ; [.5187.0020.0002] # CUNEIFORM SIGN ASH2 +1203F ; [.5188.0020.0002] # CUNEIFORM SIGN ASHGAB +12040 ; [.5189.0020.0002] # CUNEIFORM SIGN BA +12041 ; [.518A.0020.0002] # CUNEIFORM SIGN BAD +12042 ; [.518B.0020.0002] # CUNEIFORM SIGN BAG3 +12043 ; [.518C.0020.0002] # CUNEIFORM SIGN BAHAR2 +12044 ; [.518D.0020.0002] # CUNEIFORM SIGN BAL +12045 ; [.518E.0020.0002] # CUNEIFORM SIGN BAL OVER BAL +12046 ; [.518F.0020.0002] # CUNEIFORM SIGN BALAG +12047 ; [.5190.0020.0002] # CUNEIFORM SIGN BAR +12048 ; [.5191.0020.0002] # CUNEIFORM SIGN BARA2 +12049 ; [.5192.0020.0002] # CUNEIFORM SIGN BI +1204A ; [.5193.0020.0002] # CUNEIFORM SIGN BI TIMES A +1204B ; [.5194.0020.0002] # CUNEIFORM SIGN BI TIMES GAR +1204C ; [.5195.0020.0002] # CUNEIFORM SIGN BI TIMES IGI GUNU +1204D ; [.5196.0020.0002] # CUNEIFORM SIGN BU +1204E ; [.5197.0020.0002] # CUNEIFORM SIGN BU OVER BU AB +1204F ; [.5198.0020.0002] # CUNEIFORM SIGN BU OVER BU UN +12050 ; [.5199.0020.0002] # CUNEIFORM SIGN BU CROSSING BU +12051 ; [.519A.0020.0002] # CUNEIFORM SIGN BULUG +12052 ; [.519B.0020.0002] # CUNEIFORM SIGN BULUG OVER BULUG +12053 ; [.519C.0020.0002] # CUNEIFORM SIGN BUR +12054 ; [.519D.0020.0002] # CUNEIFORM SIGN BUR2 +12055 ; [.519E.0020.0002] # CUNEIFORM SIGN DA +12056 ; [.519F.0020.0002] # CUNEIFORM SIGN DAG +12057 ; [.51A0.0020.0002] # CUNEIFORM SIGN DAG KISIM5 TIMES A PLUS MASH +12058 ; [.51A1.0020.0002] # CUNEIFORM SIGN DAG KISIM5 TIMES AMAR +12059 ; [.51A2.0020.0002] # CUNEIFORM SIGN DAG KISIM5 TIMES BALAG +1205A ; [.51A3.0020.0002] # CUNEIFORM SIGN DAG KISIM5 TIMES BI +1205B ; [.51A4.0020.0002] # CUNEIFORM SIGN DAG KISIM5 TIMES GA +1205C ; [.51A5.0020.0002] # CUNEIFORM SIGN DAG KISIM5 TIMES GA PLUS MASH +1205D ; [.51A6.0020.0002] # CUNEIFORM SIGN DAG KISIM5 TIMES GI +1205E ; [.51A7.0020.0002] # CUNEIFORM SIGN DAG KISIM5 TIMES GIR2 +1205F ; [.51A8.0020.0002] # CUNEIFORM SIGN DAG KISIM5 TIMES GUD +12060 ; [.51A9.0020.0002] # CUNEIFORM SIGN DAG KISIM5 TIMES HA +12061 ; [.51AA.0020.0002] # CUNEIFORM SIGN DAG KISIM5 TIMES IR +12062 ; [.51AB.0020.0002] # CUNEIFORM SIGN DAG KISIM5 TIMES IR PLUS LU +12063 ; [.51AC.0020.0002] # CUNEIFORM SIGN DAG KISIM5 TIMES KAK +12064 ; [.51AD.0020.0002] # CUNEIFORM SIGN DAG KISIM5 TIMES LA +12065 ; [.51AE.0020.0002] # CUNEIFORM SIGN DAG KISIM5 TIMES LU +12066 ; [.51AF.0020.0002] # CUNEIFORM SIGN DAG KISIM5 TIMES LU PLUS MASH2 +12067 ; [.51B0.0020.0002] # CUNEIFORM SIGN DAG KISIM5 TIMES LUM +12068 ; [.51B1.0020.0002] # CUNEIFORM SIGN DAG KISIM5 TIMES NE +12069 ; [.51B2.0020.0002] # CUNEIFORM SIGN DAG KISIM5 TIMES PAP PLUS PAP +1206A ; [.51B3.0020.0002] # CUNEIFORM SIGN DAG KISIM5 TIMES SI +1206B ; [.51B4.0020.0002] # CUNEIFORM SIGN DAG KISIM5 TIMES TAK4 +1206C ; [.51B5.0020.0002] # CUNEIFORM SIGN DAG KISIM5 TIMES U2 PLUS GIR2 +1206D ; [.51B6.0020.0002] # CUNEIFORM SIGN DAG KISIM5 TIMES USH +1206E ; [.51B7.0020.0002] # CUNEIFORM SIGN DAM +1206F ; [.51B8.0020.0002] # CUNEIFORM SIGN DAR +12070 ; [.51B9.0020.0002] # CUNEIFORM SIGN DARA3 +12071 ; [.51BA.0020.0002] # CUNEIFORM SIGN DARA4 +12072 ; [.51BB.0020.0002] # CUNEIFORM SIGN DI +12073 ; [.51BC.0020.0002] # CUNEIFORM SIGN DIB +12074 ; [.51BD.0020.0002] # CUNEIFORM SIGN DIM +12075 ; [.51BE.0020.0002] # CUNEIFORM SIGN DIM TIMES SHE +12076 ; [.51BF.0020.0002] # CUNEIFORM SIGN DIM2 +12077 ; [.51C0.0020.0002] # CUNEIFORM SIGN DIN +12078 ; [.51C1.0020.0002] # CUNEIFORM SIGN DIN KASKAL U GUNU DISH +12079 ; [.51C2.0020.0002] # CUNEIFORM SIGN DISH +1207A ; [.51C3.0020.0002] # CUNEIFORM SIGN DU +1207B ; [.51C4.0020.0002] # CUNEIFORM SIGN DU OVER DU +1207C ; [.51C5.0020.0002] # CUNEIFORM SIGN DU GUNU +1207D ; [.51C6.0020.0002] # CUNEIFORM SIGN DU SHESHIG +1207E ; [.51C7.0020.0002] # CUNEIFORM SIGN DUB +1207F ; [.51C8.0020.0002] # CUNEIFORM SIGN DUB TIMES ESH2 +12080 ; [.51C9.0020.0002] # CUNEIFORM SIGN DUB2 +12081 ; [.51CA.0020.0002] # CUNEIFORM SIGN DUG +12082 ; [.51CB.0020.0002] # CUNEIFORM SIGN DUGUD +12083 ; [.51CC.0020.0002] # CUNEIFORM SIGN DUH +12084 ; [.51CD.0020.0002] # CUNEIFORM SIGN DUN +12085 ; [.51CE.0020.0002] # CUNEIFORM SIGN DUN3 +12086 ; [.51CF.0020.0002] # CUNEIFORM SIGN DUN3 GUNU +12087 ; [.51D0.0020.0002] # CUNEIFORM SIGN DUN3 GUNU GUNU +12088 ; [.51D1.0020.0002] # CUNEIFORM SIGN DUN4 +12089 ; [.51D2.0020.0002] # CUNEIFORM SIGN DUR2 +1208A ; [.51D3.0020.0002] # CUNEIFORM SIGN E +1208B ; [.51D4.0020.0002] # CUNEIFORM SIGN E TIMES PAP +1208C ; [.51D5.0020.0002] # CUNEIFORM SIGN E OVER E NUN OVER NUN +1208D ; [.51D6.0020.0002] # CUNEIFORM SIGN E2 +1208E ; [.51D7.0020.0002] # CUNEIFORM SIGN E2 TIMES A PLUS HA PLUS DA +1208F ; [.51D8.0020.0002] # CUNEIFORM SIGN E2 TIMES GAR +12090 ; [.51D9.0020.0002] # CUNEIFORM SIGN E2 TIMES MI +12091 ; [.51DA.0020.0002] # CUNEIFORM SIGN E2 TIMES SAL +12092 ; [.51DB.0020.0002] # CUNEIFORM SIGN E2 TIMES SHE +12093 ; [.51DC.0020.0002] # CUNEIFORM SIGN E2 TIMES U +12094 ; [.51DD.0020.0002] # CUNEIFORM SIGN EDIN +12095 ; [.51DE.0020.0002] # CUNEIFORM SIGN EGIR +12096 ; [.51DF.0020.0002] # CUNEIFORM SIGN EL +12097 ; [.51E0.0020.0002] # CUNEIFORM SIGN EN +12098 ; [.51E1.0020.0002] # CUNEIFORM SIGN EN TIMES GAN2 +12099 ; [.51E2.0020.0002] # CUNEIFORM SIGN EN TIMES GAN2 TENU +1209A ; [.51E3.0020.0002] # CUNEIFORM SIGN EN TIMES ME +1209B ; [.51E4.0020.0002] # CUNEIFORM SIGN EN CROSSING EN +1209C ; [.51E5.0020.0002] # CUNEIFORM SIGN EN OPPOSING EN +1209D ; [.51E6.0020.0002] # CUNEIFORM SIGN EN SQUARED +1209E ; [.51E7.0020.0002] # CUNEIFORM SIGN EREN +1209F ; [.51E8.0020.0002] # CUNEIFORM SIGN ERIN2 +120A0 ; [.51E9.0020.0002] # CUNEIFORM SIGN ESH2 +120A1 ; [.51EA.0020.0002] # CUNEIFORM SIGN EZEN +120A2 ; [.51EB.0020.0002] # CUNEIFORM SIGN EZEN TIMES A +120A3 ; [.51EC.0020.0002] # CUNEIFORM SIGN EZEN TIMES A PLUS LAL +120A4 ; [.51ED.0020.0002] # CUNEIFORM SIGN EZEN TIMES A PLUS LAL TIMES LAL +120A5 ; [.51EE.0020.0002] # CUNEIFORM SIGN EZEN TIMES AN +120A6 ; [.51EF.0020.0002] # CUNEIFORM SIGN EZEN TIMES BAD +120A7 ; [.51F0.0020.0002] # CUNEIFORM SIGN EZEN TIMES DUN3 GUNU +120A8 ; [.51F1.0020.0002] # CUNEIFORM SIGN EZEN TIMES DUN3 GUNU GUNU +120A9 ; [.51F2.0020.0002] # CUNEIFORM SIGN EZEN TIMES HA +120AA ; [.51F3.0020.0002] # CUNEIFORM SIGN EZEN TIMES HA GUNU +120AB ; [.51F4.0020.0002] # CUNEIFORM SIGN EZEN TIMES IGI GUNU +120AC ; [.51F5.0020.0002] # CUNEIFORM SIGN EZEN TIMES KASKAL +120AD ; [.51F6.0020.0002] # CUNEIFORM SIGN EZEN TIMES KASKAL SQUARED +120AE ; [.51F7.0020.0002] # CUNEIFORM SIGN EZEN TIMES KU3 +120AF ; [.51F8.0020.0002] # CUNEIFORM SIGN EZEN TIMES LA +120B0 ; [.51F9.0020.0002] # CUNEIFORM SIGN EZEN TIMES LAL TIMES LAL +120B1 ; [.51FA.0020.0002] # CUNEIFORM SIGN EZEN TIMES LI +120B2 ; [.51FB.0020.0002] # CUNEIFORM SIGN EZEN TIMES LU +120B3 ; [.51FC.0020.0002] # CUNEIFORM SIGN EZEN TIMES U2 +120B4 ; [.51FD.0020.0002] # CUNEIFORM SIGN EZEN TIMES UD +120B5 ; [.51FE.0020.0002] # CUNEIFORM SIGN GA +120B6 ; [.51FF.0020.0002] # CUNEIFORM SIGN GA GUNU +120B7 ; [.5200.0020.0002] # CUNEIFORM SIGN GA2 +120B8 ; [.5201.0020.0002] # CUNEIFORM SIGN GA2 TIMES A PLUS DA PLUS HA +120B9 ; [.5202.0020.0002] # CUNEIFORM SIGN GA2 TIMES A PLUS HA +120BA ; [.5203.0020.0002] # CUNEIFORM SIGN GA2 TIMES A PLUS IGI +120BB ; [.5204.0020.0002] # CUNEIFORM SIGN GA2 TIMES AB2 TENU PLUS TAB +120BC ; [.5205.0020.0002] # CUNEIFORM SIGN GA2 TIMES AN +120BD ; [.5206.0020.0002] # CUNEIFORM SIGN GA2 TIMES ASH +120BE ; [.5207.0020.0002] # CUNEIFORM SIGN GA2 TIMES ASH2 PLUS GAL +120BF ; [.5208.0020.0002] # CUNEIFORM SIGN GA2 TIMES BAD +120C0 ; [.5209.0020.0002] # CUNEIFORM SIGN GA2 TIMES BAR PLUS RA +120C1 ; [.520A.0020.0002] # CUNEIFORM SIGN GA2 TIMES BUR +120C2 ; [.520B.0020.0002] # CUNEIFORM SIGN GA2 TIMES BUR PLUS RA +120C3 ; [.520C.0020.0002] # CUNEIFORM SIGN GA2 TIMES DA +120C4 ; [.520D.0020.0002] # CUNEIFORM SIGN GA2 TIMES DI +120C5 ; [.520E.0020.0002] # CUNEIFORM SIGN GA2 TIMES DIM TIMES SHE +120C6 ; [.520F.0020.0002] # CUNEIFORM SIGN GA2 TIMES DUB +120C7 ; [.5210.0020.0002] # CUNEIFORM SIGN GA2 TIMES EL +120C8 ; [.5211.0020.0002] # CUNEIFORM SIGN GA2 TIMES EL PLUS LA +120C9 ; [.5212.0020.0002] # CUNEIFORM SIGN GA2 TIMES EN +120CA ; [.5213.0020.0002] # CUNEIFORM SIGN GA2 TIMES EN TIMES GAN2 TENU +120CB ; [.5214.0020.0002] # CUNEIFORM SIGN GA2 TIMES GAN2 TENU +120CC ; [.5215.0020.0002] # CUNEIFORM SIGN GA2 TIMES GAR +120CD ; [.5216.0020.0002] # CUNEIFORM SIGN GA2 TIMES GI +120CE ; [.5217.0020.0002] # CUNEIFORM SIGN GA2 TIMES GI4 +120CF ; [.5218.0020.0002] # CUNEIFORM SIGN GA2 TIMES GI4 PLUS A +120D0 ; [.5219.0020.0002] # CUNEIFORM SIGN GA2 TIMES GIR2 PLUS SU +120D1 ; [.521A.0020.0002] # CUNEIFORM SIGN GA2 TIMES HA PLUS LU PLUS ESH2 +120D2 ; [.521B.0020.0002] # CUNEIFORM SIGN GA2 TIMES HAL +120D3 ; [.521C.0020.0002] # CUNEIFORM SIGN GA2 TIMES HAL PLUS LA +120D4 ; [.521D.0020.0002] # CUNEIFORM SIGN GA2 TIMES HI PLUS LI +120D5 ; [.521E.0020.0002] # CUNEIFORM SIGN GA2 TIMES HUB2 +120D6 ; [.521F.0020.0002] # CUNEIFORM SIGN GA2 TIMES IGI GUNU +120D7 ; [.5220.0020.0002] # CUNEIFORM SIGN GA2 TIMES ISH PLUS HU PLUS ASH +120D8 ; [.5221.0020.0002] # CUNEIFORM SIGN GA2 TIMES KAK +120D9 ; [.5222.0020.0002] # CUNEIFORM SIGN GA2 TIMES KASKAL +120DA ; [.5223.0020.0002] # CUNEIFORM SIGN GA2 TIMES KID +120DB ; [.5224.0020.0002] # CUNEIFORM SIGN GA2 TIMES KID PLUS LAL +120DC ; [.5225.0020.0002] # CUNEIFORM SIGN GA2 TIMES KU3 PLUS AN +120DD ; [.5226.0020.0002] # CUNEIFORM SIGN GA2 TIMES LA +120DE ; [.5227.0020.0002] # CUNEIFORM SIGN GA2 TIMES ME PLUS EN +120DF ; [.5228.0020.0002] # CUNEIFORM SIGN GA2 TIMES MI +120E0 ; [.5229.0020.0002] # CUNEIFORM SIGN GA2 TIMES NUN +120E1 ; [.522A.0020.0002] # CUNEIFORM SIGN GA2 TIMES NUN OVER NUN +120E2 ; [.522B.0020.0002] # CUNEIFORM SIGN GA2 TIMES PA +120E3 ; [.522C.0020.0002] # CUNEIFORM SIGN GA2 TIMES SAL +120E4 ; [.522D.0020.0002] # CUNEIFORM SIGN GA2 TIMES SAR +120E5 ; [.522E.0020.0002] # CUNEIFORM SIGN GA2 TIMES SHE +120E6 ; [.522F.0020.0002] # CUNEIFORM SIGN GA2 TIMES SHE PLUS TUR +120E7 ; [.5230.0020.0002] # CUNEIFORM SIGN GA2 TIMES SHID +120E8 ; [.5231.0020.0002] # CUNEIFORM SIGN GA2 TIMES SUM +120E9 ; [.5232.0020.0002] # CUNEIFORM SIGN GA2 TIMES TAK4 +120EA ; [.5233.0020.0002] # CUNEIFORM SIGN GA2 TIMES U +120EB ; [.5234.0020.0002] # CUNEIFORM SIGN GA2 TIMES UD +120EC ; [.5235.0020.0002] # CUNEIFORM SIGN GA2 TIMES UD PLUS DU +120ED ; [.5236.0020.0002] # CUNEIFORM SIGN GA2 OVER GA2 +120EE ; [.5237.0020.0002] # CUNEIFORM SIGN GABA +120EF ; [.5238.0020.0002] # CUNEIFORM SIGN GABA CROSSING GABA +120F0 ; [.5239.0020.0002] # CUNEIFORM SIGN GAD +120F1 ; [.523A.0020.0002] # CUNEIFORM SIGN GAD OVER GAD GAR OVER GAR +120F2 ; [.523B.0020.0002] # CUNEIFORM SIGN GAL +120F3 ; [.523C.0020.0002] # CUNEIFORM SIGN GAL GAD OVER GAD GAR OVER GAR +120F4 ; [.523D.0020.0002] # CUNEIFORM SIGN GALAM +120F5 ; [.523E.0020.0002] # CUNEIFORM SIGN GAM +120F6 ; [.523F.0020.0002] # CUNEIFORM SIGN GAN +120F7 ; [.5240.0020.0002] # CUNEIFORM SIGN GAN2 +120F8 ; [.5241.0020.0002] # CUNEIFORM SIGN GAN2 TENU +120F9 ; [.5242.0020.0002] # CUNEIFORM SIGN GAN2 OVER GAN2 +120FA ; [.5243.0020.0002] # CUNEIFORM SIGN GAN2 CROSSING GAN2 +120FB ; [.5244.0020.0002] # CUNEIFORM SIGN GAR +120FC ; [.5245.0020.0002] # CUNEIFORM SIGN GAR3 +120FD ; [.5246.0020.0002] # CUNEIFORM SIGN GASHAN +120FE ; [.5247.0020.0002] # CUNEIFORM SIGN GESHTIN +120FF ; [.5248.0020.0002] # CUNEIFORM SIGN GESHTIN TIMES KUR +12100 ; [.5249.0020.0002] # CUNEIFORM SIGN GI +12101 ; [.524A.0020.0002] # CUNEIFORM SIGN GI TIMES E +12102 ; [.524B.0020.0002] # CUNEIFORM SIGN GI TIMES U +12103 ; [.524C.0020.0002] # CUNEIFORM SIGN GI CROSSING GI +12104 ; [.524D.0020.0002] # CUNEIFORM SIGN GI4 +12105 ; [.524E.0020.0002] # CUNEIFORM SIGN GI4 OVER GI4 +12106 ; [.524F.0020.0002] # CUNEIFORM SIGN GI4 CROSSING GI4 +12107 ; [.5250.0020.0002] # CUNEIFORM SIGN GIDIM +12108 ; [.5251.0020.0002] # CUNEIFORM SIGN GIR2 +12109 ; [.5252.0020.0002] # CUNEIFORM SIGN GIR2 GUNU +1210A ; [.5253.0020.0002] # CUNEIFORM SIGN GIR3 +1210B ; [.5254.0020.0002] # CUNEIFORM SIGN GIR3 TIMES A PLUS IGI +1210C ; [.5255.0020.0002] # CUNEIFORM SIGN GIR3 TIMES GAN2 TENU +1210D ; [.5256.0020.0002] # CUNEIFORM SIGN GIR3 TIMES IGI +1210E ; [.5257.0020.0002] # CUNEIFORM SIGN GIR3 TIMES LU PLUS IGI +1210F ; [.5258.0020.0002] # CUNEIFORM SIGN GIR3 TIMES PA +12110 ; [.5259.0020.0002] # CUNEIFORM SIGN GISAL +12111 ; [.525A.0020.0002] # CUNEIFORM SIGN GISH +12112 ; [.525B.0020.0002] # CUNEIFORM SIGN GISH CROSSING GISH +12113 ; [.525C.0020.0002] # CUNEIFORM SIGN GISH TIMES BAD +12114 ; [.525D.0020.0002] # CUNEIFORM SIGN GISH TIMES TAK4 +12115 ; [.525E.0020.0002] # CUNEIFORM SIGN GISH TENU +12116 ; [.525F.0020.0002] # CUNEIFORM SIGN GU +12117 ; [.5260.0020.0002] # CUNEIFORM SIGN GU CROSSING GU +12118 ; [.5261.0020.0002] # CUNEIFORM SIGN GU2 +12119 ; [.5262.0020.0002] # CUNEIFORM SIGN GU2 TIMES KAK +1211A ; [.5263.0020.0002] # CUNEIFORM SIGN GU2 TIMES KAK TIMES IGI GUNU +1211B ; [.5264.0020.0002] # CUNEIFORM SIGN GU2 TIMES NUN +1211C ; [.5265.0020.0002] # CUNEIFORM SIGN GU2 TIMES SAL PLUS TUG2 +1211D ; [.5266.0020.0002] # CUNEIFORM SIGN GU2 GUNU +1211E ; [.5267.0020.0002] # CUNEIFORM SIGN GUD +1211F ; [.5268.0020.0002] # CUNEIFORM SIGN GUD TIMES A PLUS KUR +12120 ; [.5269.0020.0002] # CUNEIFORM SIGN GUD TIMES KUR +12121 ; [.526A.0020.0002] # CUNEIFORM SIGN GUD OVER GUD LUGAL +12122 ; [.526B.0020.0002] # CUNEIFORM SIGN GUL +12123 ; [.526C.0020.0002] # CUNEIFORM SIGN GUM +12124 ; [.526D.0020.0002] # CUNEIFORM SIGN GUM TIMES SHE +12125 ; [.526E.0020.0002] # CUNEIFORM SIGN GUR +12126 ; [.526F.0020.0002] # CUNEIFORM SIGN GUR7 +12127 ; [.5270.0020.0002] # CUNEIFORM SIGN GURUN +12128 ; [.5271.0020.0002] # CUNEIFORM SIGN GURUSH +12129 ; [.5272.0020.0002] # CUNEIFORM SIGN HA +1212A ; [.5273.0020.0002] # CUNEIFORM SIGN HA TENU +1212B ; [.5274.0020.0002] # CUNEIFORM SIGN HA GUNU +1212C ; [.5275.0020.0002] # CUNEIFORM SIGN HAL +1212D ; [.5276.0020.0002] # CUNEIFORM SIGN HI +1212E ; [.5277.0020.0002] # CUNEIFORM SIGN HI TIMES ASH +1212F ; [.5278.0020.0002] # CUNEIFORM SIGN HI TIMES ASH2 +12130 ; [.5279.0020.0002] # CUNEIFORM SIGN HI TIMES BAD +12131 ; [.527A.0020.0002] # CUNEIFORM SIGN HI TIMES DISH +12132 ; [.527B.0020.0002] # CUNEIFORM SIGN HI TIMES GAD +12133 ; [.527C.0020.0002] # CUNEIFORM SIGN HI TIMES KIN +12134 ; [.527D.0020.0002] # CUNEIFORM SIGN HI TIMES NUN +12135 ; [.527E.0020.0002] # CUNEIFORM SIGN HI TIMES SHE +12136 ; [.527F.0020.0002] # CUNEIFORM SIGN HI TIMES U +12137 ; [.5280.0020.0002] # CUNEIFORM SIGN HU +12138 ; [.5281.0020.0002] # CUNEIFORM SIGN HUB2 +12139 ; [.5282.0020.0002] # CUNEIFORM SIGN HUB2 TIMES AN +1213A ; [.5283.0020.0002] # CUNEIFORM SIGN HUB2 TIMES HAL +1213B ; [.5284.0020.0002] # CUNEIFORM SIGN HUB2 TIMES KASKAL +1213C ; [.5285.0020.0002] # CUNEIFORM SIGN HUB2 TIMES LISH +1213D ; [.5286.0020.0002] # CUNEIFORM SIGN HUB2 TIMES UD +1213E ; [.5287.0020.0002] # CUNEIFORM SIGN HUL2 +1213F ; [.5288.0020.0002] # CUNEIFORM SIGN I +12140 ; [.5289.0020.0002] # CUNEIFORM SIGN I A +12141 ; [.528A.0020.0002] # CUNEIFORM SIGN IB +12142 ; [.528B.0020.0002] # CUNEIFORM SIGN IDIM +12143 ; [.528C.0020.0002] # CUNEIFORM SIGN IDIM OVER IDIM BUR +12144 ; [.528D.0020.0002] # CUNEIFORM SIGN IDIM OVER IDIM SQUARED +12145 ; [.528E.0020.0002] # CUNEIFORM SIGN IG +12146 ; [.528F.0020.0002] # CUNEIFORM SIGN IGI +12147 ; [.5290.0020.0002] # CUNEIFORM SIGN IGI DIB +12148 ; [.5291.0020.0002] # CUNEIFORM SIGN IGI RI +12149 ; [.5292.0020.0002] # CUNEIFORM SIGN IGI OVER IGI SHIR OVER SHIR UD OVER UD +1214A ; [.5293.0020.0002] # CUNEIFORM SIGN IGI GUNU +1214B ; [.5294.0020.0002] # CUNEIFORM SIGN IL +1214C ; [.5295.0020.0002] # CUNEIFORM SIGN IL TIMES GAN2 TENU +1214D ; [.5296.0020.0002] # CUNEIFORM SIGN IL2 +1214E ; [.5297.0020.0002] # CUNEIFORM SIGN IM +1214F ; [.5298.0020.0002] # CUNEIFORM SIGN IM TIMES TAK4 +12150 ; [.5299.0020.0002] # CUNEIFORM SIGN IM CROSSING IM +12151 ; [.529A.0020.0002] # CUNEIFORM SIGN IM OPPOSING IM +12152 ; [.529B.0020.0002] # CUNEIFORM SIGN IM SQUARED +12153 ; [.529C.0020.0002] # CUNEIFORM SIGN IMIN +12154 ; [.529D.0020.0002] # CUNEIFORM SIGN IN +12155 ; [.529E.0020.0002] # CUNEIFORM SIGN IR +12156 ; [.529F.0020.0002] # CUNEIFORM SIGN ISH +12157 ; [.52A0.0020.0002] # CUNEIFORM SIGN KA +12158 ; [.52A1.0020.0002] # CUNEIFORM SIGN KA TIMES A +12159 ; [.52A2.0020.0002] # CUNEIFORM SIGN KA TIMES AD +1215A ; [.52A3.0020.0002] # CUNEIFORM SIGN KA TIMES AD PLUS KU3 +1215B ; [.52A4.0020.0002] # CUNEIFORM SIGN KA TIMES ASH2 +1215C ; [.52A5.0020.0002] # CUNEIFORM SIGN KA TIMES BAD +1215D ; [.52A6.0020.0002] # CUNEIFORM SIGN KA TIMES BALAG +1215E ; [.52A7.0020.0002] # CUNEIFORM SIGN KA TIMES BAR +1215F ; [.52A8.0020.0002] # CUNEIFORM SIGN KA TIMES BI +12160 ; [.52A9.0020.0002] # CUNEIFORM SIGN KA TIMES ERIN2 +12161 ; [.52AA.0020.0002] # CUNEIFORM SIGN KA TIMES ESH2 +12162 ; [.52AB.0020.0002] # CUNEIFORM SIGN KA TIMES GA +12163 ; [.52AC.0020.0002] # CUNEIFORM SIGN KA TIMES GAL +12164 ; [.52AD.0020.0002] # CUNEIFORM SIGN KA TIMES GAN2 TENU +12165 ; [.52AE.0020.0002] # CUNEIFORM SIGN KA TIMES GAR +12166 ; [.52AF.0020.0002] # CUNEIFORM SIGN KA TIMES GAR PLUS SHA3 PLUS A +12167 ; [.52B0.0020.0002] # CUNEIFORM SIGN KA TIMES GI +12168 ; [.52B1.0020.0002] # CUNEIFORM SIGN KA TIMES GIR2 +12169 ; [.52B2.0020.0002] # CUNEIFORM SIGN KA TIMES GISH PLUS SAR +1216A ; [.52B3.0020.0002] # CUNEIFORM SIGN KA TIMES GISH CROSSING GISH +1216B ; [.52B4.0020.0002] # CUNEIFORM SIGN KA TIMES GU +1216C ; [.52B5.0020.0002] # CUNEIFORM SIGN KA TIMES GUR7 +1216D ; [.52B6.0020.0002] # CUNEIFORM SIGN KA TIMES IGI +1216E ; [.52B7.0020.0002] # CUNEIFORM SIGN KA TIMES IM +1216F ; [.52B8.0020.0002] # CUNEIFORM SIGN KA TIMES KAK +12170 ; [.52B9.0020.0002] # CUNEIFORM SIGN KA TIMES KI +12171 ; [.52BA.0020.0002] # CUNEIFORM SIGN KA TIMES KID +12172 ; [.52BB.0020.0002] # CUNEIFORM SIGN KA TIMES LI +12173 ; [.52BC.0020.0002] # CUNEIFORM SIGN KA TIMES LU +12174 ; [.52BD.0020.0002] # CUNEIFORM SIGN KA TIMES ME +12175 ; [.52BE.0020.0002] # CUNEIFORM SIGN KA TIMES ME PLUS DU +12176 ; [.52BF.0020.0002] # CUNEIFORM SIGN KA TIMES ME PLUS GI +12177 ; [.52C0.0020.0002] # CUNEIFORM SIGN KA TIMES ME PLUS TE +12178 ; [.52C1.0020.0002] # CUNEIFORM SIGN KA TIMES MI +12179 ; [.52C2.0020.0002] # CUNEIFORM SIGN KA TIMES MI PLUS NUNUZ +1217A ; [.52C3.0020.0002] # CUNEIFORM SIGN KA TIMES NE +1217B ; [.52C4.0020.0002] # CUNEIFORM SIGN KA TIMES NUN +1217C ; [.52C5.0020.0002] # CUNEIFORM SIGN KA TIMES PI +1217D ; [.52C6.0020.0002] # CUNEIFORM SIGN KA TIMES RU +1217E ; [.52C7.0020.0002] # CUNEIFORM SIGN KA TIMES SA +1217F ; [.52C8.0020.0002] # CUNEIFORM SIGN KA TIMES SAR +12180 ; [.52C9.0020.0002] # CUNEIFORM SIGN KA TIMES SHA +12181 ; [.52CA.0020.0002] # CUNEIFORM SIGN KA TIMES SHE +12182 ; [.52CB.0020.0002] # CUNEIFORM SIGN KA TIMES SHID +12183 ; [.52CC.0020.0002] # CUNEIFORM SIGN KA TIMES SHU +12184 ; [.52CD.0020.0002] # CUNEIFORM SIGN KA TIMES SIG +12185 ; [.52CE.0020.0002] # CUNEIFORM SIGN KA TIMES SUHUR +12186 ; [.52CF.0020.0002] # CUNEIFORM SIGN KA TIMES TAR +12187 ; [.52D0.0020.0002] # CUNEIFORM SIGN KA TIMES U +12188 ; [.52D1.0020.0002] # CUNEIFORM SIGN KA TIMES U2 +12189 ; [.52D2.0020.0002] # CUNEIFORM SIGN KA TIMES UD +1218A ; [.52D3.0020.0002] # CUNEIFORM SIGN KA TIMES UMUM TIMES PA +1218B ; [.52D4.0020.0002] # CUNEIFORM SIGN KA TIMES USH +1218C ; [.52D5.0020.0002] # CUNEIFORM SIGN KA TIMES ZI +1218D ; [.52D6.0020.0002] # CUNEIFORM SIGN KA2 +1218E ; [.52D7.0020.0002] # CUNEIFORM SIGN KA2 CROSSING KA2 +1218F ; [.52D8.0020.0002] # CUNEIFORM SIGN KAB +12190 ; [.52D9.0020.0002] # CUNEIFORM SIGN KAD2 +12191 ; [.52DA.0020.0002] # CUNEIFORM SIGN KAD3 +12192 ; [.52DB.0020.0002] # CUNEIFORM SIGN KAD4 +12193 ; [.52DC.0020.0002] # CUNEIFORM SIGN KAD5 +12194 ; [.52DD.0020.0002] # CUNEIFORM SIGN KAD5 OVER KAD5 +12195 ; [.52DE.0020.0002] # CUNEIFORM SIGN KAK +12196 ; [.52DF.0020.0002] # CUNEIFORM SIGN KAK TIMES IGI GUNU +12197 ; [.52E0.0020.0002] # CUNEIFORM SIGN KAL +12198 ; [.52E1.0020.0002] # CUNEIFORM SIGN KAL TIMES BAD +12199 ; [.52E2.0020.0002] # CUNEIFORM SIGN KAL CROSSING KAL +1219A ; [.52E3.0020.0002] # CUNEIFORM SIGN KAM2 +1219B ; [.52E4.0020.0002] # CUNEIFORM SIGN KAM4 +1219C ; [.52E5.0020.0002] # CUNEIFORM SIGN KASKAL +1219D ; [.52E6.0020.0002] # CUNEIFORM SIGN KASKAL LAGAB TIMES U OVER LAGAB TIMES U +1219E ; [.52E7.0020.0002] # CUNEIFORM SIGN KASKAL OVER KASKAL LAGAB TIMES U OVER LAGAB TIMES U +1219F ; [.52E8.0020.0002] # CUNEIFORM SIGN KESH2 +121A0 ; [.52E9.0020.0002] # CUNEIFORM SIGN KI +121A1 ; [.52EA.0020.0002] # CUNEIFORM SIGN KI TIMES BAD +121A2 ; [.52EB.0020.0002] # CUNEIFORM SIGN KI TIMES U +121A3 ; [.52EC.0020.0002] # CUNEIFORM SIGN KI TIMES UD +121A4 ; [.52ED.0020.0002] # CUNEIFORM SIGN KID +121A5 ; [.52EE.0020.0002] # CUNEIFORM SIGN KIN +121A6 ; [.52EF.0020.0002] # CUNEIFORM SIGN KISAL +121A7 ; [.52F0.0020.0002] # CUNEIFORM SIGN KISH +121A8 ; [.52F1.0020.0002] # CUNEIFORM SIGN KISIM5 +121A9 ; [.52F2.0020.0002] # CUNEIFORM SIGN KISIM5 OVER KISIM5 +121AA ; [.52F3.0020.0002] # CUNEIFORM SIGN KU +121AB ; [.52F4.0020.0002] # CUNEIFORM SIGN KU OVER HI TIMES ASH2 KU OVER HI TIMES ASH2 +121AC ; [.52F5.0020.0002] # CUNEIFORM SIGN KU3 +121AD ; [.52F6.0020.0002] # CUNEIFORM SIGN KU4 +121AE ; [.52F7.0020.0002] # CUNEIFORM SIGN KU4 VARIANT FORM +121AF ; [.52F8.0020.0002] # CUNEIFORM SIGN KU7 +121B0 ; [.52F9.0020.0002] # CUNEIFORM SIGN KUL +121B1 ; [.52FA.0020.0002] # CUNEIFORM SIGN KUL GUNU +121B2 ; [.52FB.0020.0002] # CUNEIFORM SIGN KUN +121B3 ; [.52FC.0020.0002] # CUNEIFORM SIGN KUR +121B4 ; [.52FD.0020.0002] # CUNEIFORM SIGN KUR OPPOSING KUR +121B5 ; [.52FE.0020.0002] # CUNEIFORM SIGN KUSHU2 +121B6 ; [.52FF.0020.0002] # CUNEIFORM SIGN KWU318 +121B7 ; [.5300.0020.0002] # CUNEIFORM SIGN LA +121B8 ; [.5301.0020.0002] # CUNEIFORM SIGN LAGAB +121B9 ; [.5302.0020.0002] # CUNEIFORM SIGN LAGAB TIMES A +121BA ; [.5303.0020.0002] # CUNEIFORM SIGN LAGAB TIMES A PLUS DA PLUS HA +121BB ; [.5304.0020.0002] # CUNEIFORM SIGN LAGAB TIMES A PLUS GAR +121BC ; [.5305.0020.0002] # CUNEIFORM SIGN LAGAB TIMES A PLUS LAL +121BD ; [.5306.0020.0002] # CUNEIFORM SIGN LAGAB TIMES AL +121BE ; [.5307.0020.0002] # CUNEIFORM SIGN LAGAB TIMES AN +121BF ; [.5308.0020.0002] # CUNEIFORM SIGN LAGAB TIMES ASH ZIDA TENU +121C0 ; [.5309.0020.0002] # CUNEIFORM SIGN LAGAB TIMES BAD +121C1 ; [.530A.0020.0002] # CUNEIFORM SIGN LAGAB TIMES BI +121C2 ; [.530B.0020.0002] # CUNEIFORM SIGN LAGAB TIMES DAR +121C3 ; [.530C.0020.0002] # CUNEIFORM SIGN LAGAB TIMES EN +121C4 ; [.530D.0020.0002] # CUNEIFORM SIGN LAGAB TIMES GA +121C5 ; [.530E.0020.0002] # CUNEIFORM SIGN LAGAB TIMES GAR +121C6 ; [.530F.0020.0002] # CUNEIFORM SIGN LAGAB TIMES GUD +121C7 ; [.5310.0020.0002] # CUNEIFORM SIGN LAGAB TIMES GUD PLUS GUD +121C8 ; [.5311.0020.0002] # CUNEIFORM SIGN LAGAB TIMES HA +121C9 ; [.5312.0020.0002] # CUNEIFORM SIGN LAGAB TIMES HAL +121CA ; [.5313.0020.0002] # CUNEIFORM SIGN LAGAB TIMES HI TIMES NUN +121CB ; [.5314.0020.0002] # CUNEIFORM SIGN LAGAB TIMES IGI GUNU +121CC ; [.5315.0020.0002] # CUNEIFORM SIGN LAGAB TIMES IM +121CD ; [.5316.0020.0002] # CUNEIFORM SIGN LAGAB TIMES IM PLUS HA +121CE ; [.5317.0020.0002] # CUNEIFORM SIGN LAGAB TIMES IM PLUS LU +121CF ; [.5318.0020.0002] # CUNEIFORM SIGN LAGAB TIMES KI +121D0 ; [.5319.0020.0002] # CUNEIFORM SIGN LAGAB TIMES KIN +121D1 ; [.531A.0020.0002] # CUNEIFORM SIGN LAGAB TIMES KU3 +121D2 ; [.531B.0020.0002] # CUNEIFORM SIGN LAGAB TIMES KUL +121D3 ; [.531C.0020.0002] # CUNEIFORM SIGN LAGAB TIMES KUL PLUS HI PLUS A +121D4 ; [.531D.0020.0002] # CUNEIFORM SIGN LAGAB TIMES LAGAB +121D5 ; [.531E.0020.0002] # CUNEIFORM SIGN LAGAB TIMES LISH +121D6 ; [.531F.0020.0002] # CUNEIFORM SIGN LAGAB TIMES LU +121D7 ; [.5320.0020.0002] # CUNEIFORM SIGN LAGAB TIMES LUL +121D8 ; [.5321.0020.0002] # CUNEIFORM SIGN LAGAB TIMES ME +121D9 ; [.5322.0020.0002] # CUNEIFORM SIGN LAGAB TIMES ME PLUS EN +121DA ; [.5323.0020.0002] # CUNEIFORM SIGN LAGAB TIMES MUSH +121DB ; [.5324.0020.0002] # CUNEIFORM SIGN LAGAB TIMES NE +121DC ; [.5325.0020.0002] # CUNEIFORM SIGN LAGAB TIMES SHE PLUS SUM +121DD ; [.5326.0020.0002] # CUNEIFORM SIGN LAGAB TIMES SHITA PLUS GISH PLUS ERIN2 +121DE ; [.5327.0020.0002] # CUNEIFORM SIGN LAGAB TIMES SHITA PLUS GISH TENU +121DF ; [.5328.0020.0002] # CUNEIFORM SIGN LAGAB TIMES SHU2 +121E0 ; [.5329.0020.0002] # CUNEIFORM SIGN LAGAB TIMES SHU2 PLUS SHU2 +121E1 ; [.532A.0020.0002] # CUNEIFORM SIGN LAGAB TIMES SUM +121E2 ; [.532B.0020.0002] # CUNEIFORM SIGN LAGAB TIMES TAG +121E3 ; [.532C.0020.0002] # CUNEIFORM SIGN LAGAB TIMES TAK4 +121E4 ; [.532D.0020.0002] # CUNEIFORM SIGN LAGAB TIMES TE PLUS A PLUS SU PLUS NA +121E5 ; [.532E.0020.0002] # CUNEIFORM SIGN LAGAB TIMES U +121E6 ; [.532F.0020.0002] # CUNEIFORM SIGN LAGAB TIMES U PLUS A +121E7 ; [.5330.0020.0002] # CUNEIFORM SIGN LAGAB TIMES U PLUS U PLUS U +121E8 ; [.5331.0020.0002] # CUNEIFORM SIGN LAGAB TIMES U2 PLUS ASH +121E9 ; [.5332.0020.0002] # CUNEIFORM SIGN LAGAB TIMES UD +121EA ; [.5333.0020.0002] # CUNEIFORM SIGN LAGAB TIMES USH +121EB ; [.5334.0020.0002] # CUNEIFORM SIGN LAGAB SQUARED +121EC ; [.5335.0020.0002] # CUNEIFORM SIGN LAGAR +121ED ; [.5336.0020.0002] # CUNEIFORM SIGN LAGAR TIMES SHE +121EE ; [.5337.0020.0002] # CUNEIFORM SIGN LAGAR TIMES SHE PLUS SUM +121EF ; [.5338.0020.0002] # CUNEIFORM SIGN LAGAR GUNU +121F0 ; [.5339.0020.0002] # CUNEIFORM SIGN LAGAR GUNU OVER LAGAR GUNU SHE +121F1 ; [.533A.0020.0002] # CUNEIFORM SIGN LAHSHU +121F2 ; [.533B.0020.0002] # CUNEIFORM SIGN LAL +121F3 ; [.533C.0020.0002] # CUNEIFORM SIGN LAL TIMES LAL +121F4 ; [.533D.0020.0002] # CUNEIFORM SIGN LAM +121F5 ; [.533E.0020.0002] # CUNEIFORM SIGN LAM TIMES KUR +121F6 ; [.533F.0020.0002] # CUNEIFORM SIGN LAM TIMES KUR PLUS RU +121F7 ; [.5340.0020.0002] # CUNEIFORM SIGN LI +121F8 ; [.5341.0020.0002] # CUNEIFORM SIGN LIL +121F9 ; [.5342.0020.0002] # CUNEIFORM SIGN LIMMU2 +121FA ; [.5343.0020.0002] # CUNEIFORM SIGN LISH +121FB ; [.5344.0020.0002] # CUNEIFORM SIGN LU +121FC ; [.5345.0020.0002] # CUNEIFORM SIGN LU TIMES BAD +121FD ; [.5346.0020.0002] # CUNEIFORM SIGN LU2 +121FE ; [.5347.0020.0002] # CUNEIFORM SIGN LU2 TIMES AL +121FF ; [.5348.0020.0002] # CUNEIFORM SIGN LU2 TIMES BAD +12200 ; [.5349.0020.0002] # CUNEIFORM SIGN LU2 TIMES ESH2 +12201 ; [.534A.0020.0002] # CUNEIFORM SIGN LU2 TIMES ESH2 TENU +12202 ; [.534B.0020.0002] # CUNEIFORM SIGN LU2 TIMES GAN2 TENU +12203 ; [.534C.0020.0002] # CUNEIFORM SIGN LU2 TIMES HI TIMES BAD +12204 ; [.534D.0020.0002] # CUNEIFORM SIGN LU2 TIMES IM +12205 ; [.534E.0020.0002] # CUNEIFORM SIGN LU2 TIMES KAD2 +12206 ; [.534F.0020.0002] # CUNEIFORM SIGN LU2 TIMES KAD3 +12207 ; [.5350.0020.0002] # CUNEIFORM SIGN LU2 TIMES KAD3 PLUS ASH +12208 ; [.5351.0020.0002] # CUNEIFORM SIGN LU2 TIMES KI +12209 ; [.5352.0020.0002] # CUNEIFORM SIGN LU2 TIMES LA PLUS ASH +1220A ; [.5353.0020.0002] # CUNEIFORM SIGN LU2 TIMES LAGAB +1220B ; [.5354.0020.0002] # CUNEIFORM SIGN LU2 TIMES ME PLUS EN +1220C ; [.5355.0020.0002] # CUNEIFORM SIGN LU2 TIMES NE +1220D ; [.5356.0020.0002] # CUNEIFORM SIGN LU2 TIMES NU +1220E ; [.5357.0020.0002] # CUNEIFORM SIGN LU2 TIMES SI PLUS ASH +1220F ; [.5358.0020.0002] # CUNEIFORM SIGN LU2 TIMES SIK2 PLUS BU +12210 ; [.5359.0020.0002] # CUNEIFORM SIGN LU2 TIMES TUG2 +12211 ; [.535A.0020.0002] # CUNEIFORM SIGN LU2 TENU +12212 ; [.535B.0020.0002] # CUNEIFORM SIGN LU2 CROSSING LU2 +12213 ; [.535C.0020.0002] # CUNEIFORM SIGN LU2 OPPOSING LU2 +12214 ; [.535D.0020.0002] # CUNEIFORM SIGN LU2 SQUARED +12215 ; [.535E.0020.0002] # CUNEIFORM SIGN LU2 SHESHIG +12216 ; [.535F.0020.0002] # CUNEIFORM SIGN LU3 +12217 ; [.5360.0020.0002] # CUNEIFORM SIGN LUGAL +12218 ; [.5361.0020.0002] # CUNEIFORM SIGN LUGAL OVER LUGAL +12219 ; [.5362.0020.0002] # CUNEIFORM SIGN LUGAL OPPOSING LUGAL +1221A ; [.5363.0020.0002] # CUNEIFORM SIGN LUGAL SHESHIG +1221B ; [.5364.0020.0002] # CUNEIFORM SIGN LUH +1221C ; [.5365.0020.0002] # CUNEIFORM SIGN LUL +1221D ; [.5366.0020.0002] # CUNEIFORM SIGN LUM +1221E ; [.5367.0020.0002] # CUNEIFORM SIGN LUM OVER LUM +1221F ; [.5368.0020.0002] # CUNEIFORM SIGN LUM OVER LUM GAR OVER GAR +12220 ; [.5369.0020.0002] # CUNEIFORM SIGN MA +12221 ; [.536A.0020.0002] # CUNEIFORM SIGN MA TIMES TAK4 +12222 ; [.536B.0020.0002] # CUNEIFORM SIGN MA GUNU +12223 ; [.536C.0020.0002] # CUNEIFORM SIGN MA2 +12224 ; [.536D.0020.0002] # CUNEIFORM SIGN MAH +12225 ; [.536E.0020.0002] # CUNEIFORM SIGN MAR +12226 ; [.536F.0020.0002] # CUNEIFORM SIGN MASH +12227 ; [.5370.0020.0002] # CUNEIFORM SIGN MASH2 +12228 ; [.5371.0020.0002] # CUNEIFORM SIGN ME +12229 ; [.5372.0020.0002] # CUNEIFORM SIGN MES +1222A ; [.5373.0020.0002] # CUNEIFORM SIGN MI +1222B ; [.5374.0020.0002] # CUNEIFORM SIGN MIN +1222C ; [.5375.0020.0002] # CUNEIFORM SIGN MU +1222D ; [.5376.0020.0002] # CUNEIFORM SIGN MU OVER MU +1222E ; [.5377.0020.0002] # CUNEIFORM SIGN MUG +1222F ; [.5378.0020.0002] # CUNEIFORM SIGN MUG GUNU +12230 ; [.5379.0020.0002] # CUNEIFORM SIGN MUNSUB +12231 ; [.537A.0020.0002] # CUNEIFORM SIGN MURGU2 +12232 ; [.537B.0020.0002] # CUNEIFORM SIGN MUSH +12233 ; [.537C.0020.0002] # CUNEIFORM SIGN MUSH TIMES A +12234 ; [.537D.0020.0002] # CUNEIFORM SIGN MUSH TIMES KUR +12235 ; [.537E.0020.0002] # CUNEIFORM SIGN MUSH TIMES ZA +12236 ; [.537F.0020.0002] # CUNEIFORM SIGN MUSH OVER MUSH +12237 ; [.5380.0020.0002] # CUNEIFORM SIGN MUSH OVER MUSH TIMES A PLUS NA +12238 ; [.5381.0020.0002] # CUNEIFORM SIGN MUSH CROSSING MUSH +12239 ; [.5382.0020.0002] # CUNEIFORM SIGN MUSH3 +1223A ; [.5383.0020.0002] # CUNEIFORM SIGN MUSH3 TIMES A +1223B ; [.5384.0020.0002] # CUNEIFORM SIGN MUSH3 TIMES A PLUS DI +1223C ; [.5385.0020.0002] # CUNEIFORM SIGN MUSH3 TIMES DI +1223D ; [.5386.0020.0002] # CUNEIFORM SIGN MUSH3 GUNU +1223E ; [.5387.0020.0002] # CUNEIFORM SIGN NA +1223F ; [.5388.0020.0002] # CUNEIFORM SIGN NA2 +12240 ; [.5389.0020.0002] # CUNEIFORM SIGN NAGA +12241 ; [.538A.0020.0002] # CUNEIFORM SIGN NAGA INVERTED +12242 ; [.538B.0020.0002] # CUNEIFORM SIGN NAGA TIMES SHU TENU +12243 ; [.538C.0020.0002] # CUNEIFORM SIGN NAGA OPPOSING NAGA +12244 ; [.538D.0020.0002] # CUNEIFORM SIGN NAGAR +12245 ; [.538E.0020.0002] # CUNEIFORM SIGN NAM NUTILLU +12246 ; [.538F.0020.0002] # CUNEIFORM SIGN NAM +12247 ; [.5390.0020.0002] # CUNEIFORM SIGN NAM2 +12248 ; [.5391.0020.0002] # CUNEIFORM SIGN NE +12249 ; [.5392.0020.0002] # CUNEIFORM SIGN NE TIMES A +1224A ; [.5393.0020.0002] # CUNEIFORM SIGN NE TIMES UD +1224B ; [.5394.0020.0002] # CUNEIFORM SIGN NE SHESHIG +1224C ; [.5395.0020.0002] # CUNEIFORM SIGN NI +1224D ; [.5396.0020.0002] # CUNEIFORM SIGN NI TIMES E +1224E ; [.5397.0020.0002] # CUNEIFORM SIGN NI2 +1224F ; [.5398.0020.0002] # CUNEIFORM SIGN NIM +12250 ; [.5399.0020.0002] # CUNEIFORM SIGN NIM TIMES GAN2 TENU +12251 ; [.539A.0020.0002] # CUNEIFORM SIGN NIM TIMES GAR PLUS GAN2 TENU +12252 ; [.539B.0020.0002] # CUNEIFORM SIGN NINDA2 +12253 ; [.539C.0020.0002] # CUNEIFORM SIGN NINDA2 TIMES AN +12254 ; [.539D.0020.0002] # CUNEIFORM SIGN NINDA2 TIMES ASH +12255 ; [.539E.0020.0002] # CUNEIFORM SIGN NINDA2 TIMES ASH PLUS ASH +12256 ; [.539F.0020.0002] # CUNEIFORM SIGN NINDA2 TIMES GUD +12257 ; [.53A0.0020.0002] # CUNEIFORM SIGN NINDA2 TIMES ME PLUS GAN2 TENU +12258 ; [.53A1.0020.0002] # CUNEIFORM SIGN NINDA2 TIMES NE +12259 ; [.53A2.0020.0002] # CUNEIFORM SIGN NINDA2 TIMES NUN +1225A ; [.53A3.0020.0002] # CUNEIFORM SIGN NINDA2 TIMES SHE +1225B ; [.53A4.0020.0002] # CUNEIFORM SIGN NINDA2 TIMES SHE PLUS A AN +1225C ; [.53A5.0020.0002] # CUNEIFORM SIGN NINDA2 TIMES SHE PLUS ASH +1225D ; [.53A6.0020.0002] # CUNEIFORM SIGN NINDA2 TIMES SHE PLUS ASH PLUS ASH +1225E ; [.53A7.0020.0002] # CUNEIFORM SIGN NINDA2 TIMES U2 PLUS ASH +1225F ; [.53A8.0020.0002] # CUNEIFORM SIGN NINDA2 TIMES USH +12260 ; [.53A9.0020.0002] # CUNEIFORM SIGN NISAG +12261 ; [.53AA.0020.0002] # CUNEIFORM SIGN NU +12262 ; [.53AB.0020.0002] # CUNEIFORM SIGN NU11 +122D4 ; [.53AC.0020.0002] # CUNEIFORM SIGN SHIR TENU +122D5 ; [.53AD.0020.0002] # CUNEIFORM SIGN SHIR OVER SHIR BUR OVER BUR +12263 ; [.53AE.0020.0002] # CUNEIFORM SIGN NUN +12264 ; [.53AF.0020.0002] # CUNEIFORM SIGN NUN LAGAR TIMES GAR +12265 ; [.53B0.0020.0002] # CUNEIFORM SIGN NUN LAGAR TIMES MASH +12266 ; [.53B1.0020.0002] # CUNEIFORM SIGN NUN LAGAR TIMES SAL +12267 ; [.53B2.0020.0002] # CUNEIFORM SIGN NUN LAGAR TIMES SAL OVER NUN LAGAR TIMES SAL +12268 ; [.53B3.0020.0002] # CUNEIFORM SIGN NUN LAGAR TIMES USH +12269 ; [.53B4.0020.0002] # CUNEIFORM SIGN NUN TENU +1226A ; [.53B5.0020.0002] # CUNEIFORM SIGN NUN OVER NUN +1226B ; [.53B6.0020.0002] # CUNEIFORM SIGN NUN CROSSING NUN +1226C ; [.53B7.0020.0002] # CUNEIFORM SIGN NUN CROSSING NUN LAGAR OVER LAGAR +1226D ; [.53B8.0020.0002] # CUNEIFORM SIGN NUNUZ +1226E ; [.53B9.0020.0002] # CUNEIFORM SIGN NUNUZ AB2 TIMES ASHGAB +1226F ; [.53BA.0020.0002] # CUNEIFORM SIGN NUNUZ AB2 TIMES BI +12270 ; [.53BB.0020.0002] # CUNEIFORM SIGN NUNUZ AB2 TIMES DUG +12271 ; [.53BC.0020.0002] # CUNEIFORM SIGN NUNUZ AB2 TIMES GUD +12272 ; [.53BD.0020.0002] # CUNEIFORM SIGN NUNUZ AB2 TIMES IGI GUNU +12273 ; [.53BE.0020.0002] # CUNEIFORM SIGN NUNUZ AB2 TIMES KAD3 +12274 ; [.53BF.0020.0002] # CUNEIFORM SIGN NUNUZ AB2 TIMES LA +12275 ; [.53C0.0020.0002] # CUNEIFORM SIGN NUNUZ AB2 TIMES NE +12276 ; [.53C1.0020.0002] # CUNEIFORM SIGN NUNUZ AB2 TIMES SILA3 +12277 ; [.53C2.0020.0002] # CUNEIFORM SIGN NUNUZ AB2 TIMES U2 +12278 ; [.53C3.0020.0002] # CUNEIFORM SIGN NUNUZ KISIM5 TIMES BI +12279 ; [.53C4.0020.0002] # CUNEIFORM SIGN NUNUZ KISIM5 TIMES BI U +1227A ; [.53C5.0020.0002] # CUNEIFORM SIGN PA +1227B ; [.53C6.0020.0002] # CUNEIFORM SIGN PAD +1227C ; [.53C7.0020.0002] # CUNEIFORM SIGN PAN +1227D ; [.53C8.0020.0002] # CUNEIFORM SIGN PAP +1227E ; [.53C9.0020.0002] # CUNEIFORM SIGN PESH2 +1227F ; [.53CA.0020.0002] # CUNEIFORM SIGN PI +12280 ; [.53CB.0020.0002] # CUNEIFORM SIGN PI TIMES A +12281 ; [.53CC.0020.0002] # CUNEIFORM SIGN PI TIMES AB +12282 ; [.53CD.0020.0002] # CUNEIFORM SIGN PI TIMES BI +12283 ; [.53CE.0020.0002] # CUNEIFORM SIGN PI TIMES BU +12284 ; [.53CF.0020.0002] # CUNEIFORM SIGN PI TIMES E +12285 ; [.53D0.0020.0002] # CUNEIFORM SIGN PI TIMES I +12286 ; [.53D1.0020.0002] # CUNEIFORM SIGN PI TIMES IB +12287 ; [.53D2.0020.0002] # CUNEIFORM SIGN PI TIMES U +12288 ; [.53D3.0020.0002] # CUNEIFORM SIGN PI TIMES U2 +12289 ; [.53D4.0020.0002] # CUNEIFORM SIGN PI CROSSING PI +1228A ; [.53D5.0020.0002] # CUNEIFORM SIGN PIRIG +1228B ; [.53D6.0020.0002] # CUNEIFORM SIGN PIRIG TIMES KAL +1228C ; [.53D7.0020.0002] # CUNEIFORM SIGN PIRIG TIMES UD +1228D ; [.53D8.0020.0002] # CUNEIFORM SIGN PIRIG TIMES ZA +1228E ; [.53D9.0020.0002] # CUNEIFORM SIGN PIRIG OPPOSING PIRIG +1228F ; [.53DA.0020.0002] # CUNEIFORM SIGN RA +12290 ; [.53DB.0020.0002] # CUNEIFORM SIGN RAB +12291 ; [.53DC.0020.0002] # CUNEIFORM SIGN RI +12292 ; [.53DD.0020.0002] # CUNEIFORM SIGN RU +12293 ; [.53DE.0020.0002] # CUNEIFORM SIGN SA +12294 ; [.53DF.0020.0002] # CUNEIFORM SIGN SAG NUTILLU +12295 ; [.53E0.0020.0002] # CUNEIFORM SIGN SAG +12296 ; [.53E1.0020.0002] # CUNEIFORM SIGN SAG TIMES A +12297 ; [.53E2.0020.0002] # CUNEIFORM SIGN SAG TIMES DU +12298 ; [.53E3.0020.0002] # CUNEIFORM SIGN SAG TIMES DUB +12299 ; [.53E4.0020.0002] # CUNEIFORM SIGN SAG TIMES HA +1229A ; [.53E5.0020.0002] # CUNEIFORM SIGN SAG TIMES KAK +1229B ; [.53E6.0020.0002] # CUNEIFORM SIGN SAG TIMES KUR +1229C ; [.53E7.0020.0002] # CUNEIFORM SIGN SAG TIMES LUM +1229D ; [.53E8.0020.0002] # CUNEIFORM SIGN SAG TIMES MI +1229E ; [.53E9.0020.0002] # CUNEIFORM SIGN SAG TIMES NUN +1229F ; [.53EA.0020.0002] # CUNEIFORM SIGN SAG TIMES SAL +122A0 ; [.53EB.0020.0002] # CUNEIFORM SIGN SAG TIMES SHID +122A1 ; [.53EC.0020.0002] # CUNEIFORM SIGN SAG TIMES TAB +122A2 ; [.53ED.0020.0002] # CUNEIFORM SIGN SAG TIMES U2 +122A3 ; [.53EE.0020.0002] # CUNEIFORM SIGN SAG TIMES UB +122A4 ; [.53EF.0020.0002] # CUNEIFORM SIGN SAG TIMES UM +122A5 ; [.53F0.0020.0002] # CUNEIFORM SIGN SAG TIMES UR +122A6 ; [.53F1.0020.0002] # CUNEIFORM SIGN SAG TIMES USH +122A7 ; [.53F2.0020.0002] # CUNEIFORM SIGN SAG OVER SAG +122A8 ; [.53F3.0020.0002] # CUNEIFORM SIGN SAG GUNU +122A9 ; [.53F4.0020.0002] # CUNEIFORM SIGN SAL +122AA ; [.53F5.0020.0002] # CUNEIFORM SIGN SAL LAGAB TIMES ASH2 +122AB ; [.53F6.0020.0002] # CUNEIFORM SIGN SANGA2 +122AC ; [.53F7.0020.0002] # CUNEIFORM SIGN SAR +122AD ; [.53F8.0020.0002] # CUNEIFORM SIGN SHA +122AE ; [.53F9.0020.0002] # CUNEIFORM SIGN SHA3 +122AF ; [.53FA.0020.0002] # CUNEIFORM SIGN SHA3 TIMES A +122B0 ; [.53FB.0020.0002] # CUNEIFORM SIGN SHA3 TIMES BAD +122B1 ; [.53FC.0020.0002] # CUNEIFORM SIGN SHA3 TIMES GISH +122B2 ; [.53FD.0020.0002] # CUNEIFORM SIGN SHA3 TIMES NE +122B3 ; [.53FE.0020.0002] # CUNEIFORM SIGN SHA3 TIMES SHU2 +122B4 ; [.53FF.0020.0002] # CUNEIFORM SIGN SHA3 TIMES TUR +122B5 ; [.5400.0020.0002] # CUNEIFORM SIGN SHA3 TIMES U +122B6 ; [.5401.0020.0002] # CUNEIFORM SIGN SHA3 TIMES U PLUS A +122B7 ; [.5402.0020.0002] # CUNEIFORM SIGN SHA6 +122B8 ; [.5403.0020.0002] # CUNEIFORM SIGN SHAB6 +122B9 ; [.5404.0020.0002] # CUNEIFORM SIGN SHAR2 +122BA ; [.5405.0020.0002] # CUNEIFORM SIGN SHE +122BB ; [.5406.0020.0002] # CUNEIFORM SIGN SHE HU +122BC ; [.5407.0020.0002] # CUNEIFORM SIGN SHE OVER SHE GAD OVER GAD GAR OVER GAR +122BD ; [.5408.0020.0002] # CUNEIFORM SIGN SHE OVER SHE TAB OVER TAB GAR OVER GAR +122BE ; [.5409.0020.0002] # CUNEIFORM SIGN SHEG9 +122BF ; [.540A.0020.0002] # CUNEIFORM SIGN SHEN +122C0 ; [.540B.0020.0002] # CUNEIFORM SIGN SHESH +122C1 ; [.540C.0020.0002] # CUNEIFORM SIGN SHESH2 +122C2 ; [.540D.0020.0002] # CUNEIFORM SIGN SHESHLAM +122C3 ; [.540E.0020.0002] # CUNEIFORM SIGN SHID +122C4 ; [.540F.0020.0002] # CUNEIFORM SIGN SHID TIMES A +122C5 ; [.5410.0020.0002] # CUNEIFORM SIGN SHID TIMES IM +122C6 ; [.5411.0020.0002] # CUNEIFORM SIGN SHIM +122C7 ; [.5412.0020.0002] # CUNEIFORM SIGN SHIM TIMES A +122C8 ; [.5413.0020.0002] # CUNEIFORM SIGN SHIM TIMES BAL +122C9 ; [.5414.0020.0002] # CUNEIFORM SIGN SHIM TIMES BULUG +122CA ; [.5415.0020.0002] # CUNEIFORM SIGN SHIM TIMES DIN +122CB ; [.5416.0020.0002] # CUNEIFORM SIGN SHIM TIMES GAR +122CC ; [.5417.0020.0002] # CUNEIFORM SIGN SHIM TIMES IGI +122CD ; [.5418.0020.0002] # CUNEIFORM SIGN SHIM TIMES IGI GUNU +122CE ; [.5419.0020.0002] # CUNEIFORM SIGN SHIM TIMES KUSHU2 +122CF ; [.541A.0020.0002] # CUNEIFORM SIGN SHIM TIMES LUL +122D0 ; [.541B.0020.0002] # CUNEIFORM SIGN SHIM TIMES MUG +122D1 ; [.541C.0020.0002] # CUNEIFORM SIGN SHIM TIMES SAL +122D2 ; [.541D.0020.0002] # CUNEIFORM SIGN SHINIG +122D3 ; [.541E.0020.0002] # CUNEIFORM SIGN SHIR +122D6 ; [.541F.0020.0002] # CUNEIFORM SIGN SHITA +122D7 ; [.5420.0020.0002] # CUNEIFORM SIGN SHU +122D8 ; [.5421.0020.0002] # CUNEIFORM SIGN SHU OVER INVERTED SHU +122D9 ; [.5422.0020.0002] # CUNEIFORM SIGN SHU2 +122DA ; [.5423.0020.0002] # CUNEIFORM SIGN SHUBUR +122DB ; [.5424.0020.0002] # CUNEIFORM SIGN SI +122DC ; [.5425.0020.0002] # CUNEIFORM SIGN SI GUNU +122DD ; [.5426.0020.0002] # CUNEIFORM SIGN SIG +122DE ; [.5427.0020.0002] # CUNEIFORM SIGN SIG4 +122DF ; [.5428.0020.0002] # CUNEIFORM SIGN SIG4 OVER SIG4 SHU2 +122E0 ; [.5429.0020.0002] # CUNEIFORM SIGN SIK2 +122E1 ; [.542A.0020.0002] # CUNEIFORM SIGN SILA3 +122E2 ; [.542B.0020.0002] # CUNEIFORM SIGN SU +122E3 ; [.542C.0020.0002] # CUNEIFORM SIGN SU OVER SU +122E4 ; [.542D.0020.0002] # CUNEIFORM SIGN SUD +122E5 ; [.542E.0020.0002] # CUNEIFORM SIGN SUD2 +122E6 ; [.542F.0020.0002] # CUNEIFORM SIGN SUHUR +122E7 ; [.5430.0020.0002] # CUNEIFORM SIGN SUM +122E8 ; [.5431.0020.0002] # CUNEIFORM SIGN SUMASH +122E9 ; [.5432.0020.0002] # CUNEIFORM SIGN SUR +122EA ; [.5433.0020.0002] # CUNEIFORM SIGN SUR9 +122EB ; [.5434.0020.0002] # CUNEIFORM SIGN TA +122EC ; [.5435.0020.0002] # CUNEIFORM SIGN TA ASTERISK +122ED ; [.5436.0020.0002] # CUNEIFORM SIGN TA TIMES HI +122EE ; [.5437.0020.0002] # CUNEIFORM SIGN TA TIMES MI +122EF ; [.5438.0020.0002] # CUNEIFORM SIGN TA GUNU +122F0 ; [.5439.0020.0002] # CUNEIFORM SIGN TAB +122F1 ; [.543A.0020.0002] # CUNEIFORM SIGN TAB OVER TAB NI OVER NI DISH OVER DISH +122F2 ; [.543B.0020.0002] # CUNEIFORM SIGN TAB SQUARED +122F3 ; [.543C.0020.0002] # CUNEIFORM SIGN TAG +122F4 ; [.543D.0020.0002] # CUNEIFORM SIGN TAG TIMES BI +122F5 ; [.543E.0020.0002] # CUNEIFORM SIGN TAG TIMES GUD +122F6 ; [.543F.0020.0002] # CUNEIFORM SIGN TAG TIMES SHE +122F7 ; [.5440.0020.0002] # CUNEIFORM SIGN TAG TIMES SHU +122F8 ; [.5441.0020.0002] # CUNEIFORM SIGN TAG TIMES TUG2 +122F9 ; [.5442.0020.0002] # CUNEIFORM SIGN TAG TIMES UD +122FA ; [.5443.0020.0002] # CUNEIFORM SIGN TAK4 +122FB ; [.5444.0020.0002] # CUNEIFORM SIGN TAR +122FC ; [.5445.0020.0002] # CUNEIFORM SIGN TE +122FD ; [.5446.0020.0002] # CUNEIFORM SIGN TE GUNU +122FE ; [.5447.0020.0002] # CUNEIFORM SIGN TI +122FF ; [.5448.0020.0002] # CUNEIFORM SIGN TI TENU +12300 ; [.5449.0020.0002] # CUNEIFORM SIGN TIL +12301 ; [.544A.0020.0002] # CUNEIFORM SIGN TIR +12302 ; [.544B.0020.0002] # CUNEIFORM SIGN TIR TIMES TAK4 +12303 ; [.544C.0020.0002] # CUNEIFORM SIGN TIR OVER TIR +12304 ; [.544D.0020.0002] # CUNEIFORM SIGN TIR OVER TIR GAD OVER GAD GAR OVER GAR +12305 ; [.544E.0020.0002] # CUNEIFORM SIGN TU +12306 ; [.544F.0020.0002] # CUNEIFORM SIGN TUG2 +12307 ; [.5450.0020.0002] # CUNEIFORM SIGN TUK +12308 ; [.5451.0020.0002] # CUNEIFORM SIGN TUM +12309 ; [.5452.0020.0002] # CUNEIFORM SIGN TUR +1230A ; [.5453.0020.0002] # CUNEIFORM SIGN TUR OVER TUR ZA OVER ZA +1230B ; [.5454.0020.0002] # CUNEIFORM SIGN U +1230C ; [.5455.0020.0002] # CUNEIFORM SIGN U GUD +1230D ; [.5456.0020.0002] # CUNEIFORM SIGN U U U +1230E ; [.5457.0020.0002] # CUNEIFORM SIGN U OVER U PA OVER PA GAR OVER GAR +1230F ; [.5458.0020.0002] # CUNEIFORM SIGN U OVER U SUR OVER SUR +12310 ; [.5459.0020.0002] # CUNEIFORM SIGN U OVER U U REVERSED OVER U REVERSED +12311 ; [.545A.0020.0002] # CUNEIFORM SIGN U2 +12312 ; [.545B.0020.0002] # CUNEIFORM SIGN UB +12313 ; [.545C.0020.0002] # CUNEIFORM SIGN UD +12314 ; [.545D.0020.0002] # CUNEIFORM SIGN UD KUSHU2 +12315 ; [.545E.0020.0002] # CUNEIFORM SIGN UD TIMES BAD +12316 ; [.545F.0020.0002] # CUNEIFORM SIGN UD TIMES MI +12317 ; [.5460.0020.0002] # CUNEIFORM SIGN UD TIMES U PLUS U PLUS U +12318 ; [.5461.0020.0002] # CUNEIFORM SIGN UD TIMES U PLUS U PLUS U GUNU +12319 ; [.5462.0020.0002] # CUNEIFORM SIGN UD GUNU +1231A ; [.5463.0020.0002] # CUNEIFORM SIGN UD SHESHIG +1231B ; [.5464.0020.0002] # CUNEIFORM SIGN UD SHESHIG TIMES BAD +1231C ; [.5465.0020.0002] # CUNEIFORM SIGN UDUG +1231D ; [.5466.0020.0002] # CUNEIFORM SIGN UM +1231E ; [.5467.0020.0002] # CUNEIFORM SIGN UM TIMES LAGAB +1231F ; [.5468.0020.0002] # CUNEIFORM SIGN UM TIMES ME PLUS DA +12320 ; [.5469.0020.0002] # CUNEIFORM SIGN UM TIMES SHA3 +12321 ; [.546A.0020.0002] # CUNEIFORM SIGN UM TIMES U +12322 ; [.546B.0020.0002] # CUNEIFORM SIGN UMBIN +12323 ; [.546C.0020.0002] # CUNEIFORM SIGN UMUM +12324 ; [.546D.0020.0002] # CUNEIFORM SIGN UMUM TIMES KASKAL +12325 ; [.546E.0020.0002] # CUNEIFORM SIGN UMUM TIMES PA +12326 ; [.546F.0020.0002] # CUNEIFORM SIGN UN +12327 ; [.5470.0020.0002] # CUNEIFORM SIGN UN GUNU +12328 ; [.5471.0020.0002] # CUNEIFORM SIGN UR +12329 ; [.5472.0020.0002] # CUNEIFORM SIGN UR CROSSING UR +1232A ; [.5473.0020.0002] # CUNEIFORM SIGN UR SHESHIG +1232B ; [.5474.0020.0002] # CUNEIFORM SIGN UR2 +1232C ; [.5475.0020.0002] # CUNEIFORM SIGN UR2 TIMES A PLUS HA +1232D ; [.5476.0020.0002] # CUNEIFORM SIGN UR2 TIMES A PLUS NA +1232E ; [.5477.0020.0002] # CUNEIFORM SIGN UR2 TIMES AL +1232F ; [.5478.0020.0002] # CUNEIFORM SIGN UR2 TIMES HA +12330 ; [.5479.0020.0002] # CUNEIFORM SIGN UR2 TIMES NUN +12331 ; [.547A.0020.0002] # CUNEIFORM SIGN UR2 TIMES U2 +12332 ; [.547B.0020.0002] # CUNEIFORM SIGN UR2 TIMES U2 PLUS ASH +12333 ; [.547C.0020.0002] # CUNEIFORM SIGN UR2 TIMES U2 PLUS BI +12334 ; [.547D.0020.0002] # CUNEIFORM SIGN UR4 +12335 ; [.547E.0020.0002] # CUNEIFORM SIGN URI +12336 ; [.547F.0020.0002] # CUNEIFORM SIGN URI3 +12337 ; [.5480.0020.0002] # CUNEIFORM SIGN URU +12338 ; [.5481.0020.0002] # CUNEIFORM SIGN URU TIMES A +12339 ; [.5482.0020.0002] # CUNEIFORM SIGN URU TIMES ASHGAB +1233A ; [.5483.0020.0002] # CUNEIFORM SIGN URU TIMES BAR +1233B ; [.5484.0020.0002] # CUNEIFORM SIGN URU TIMES DUN +1233C ; [.5485.0020.0002] # CUNEIFORM SIGN URU TIMES GA +1233D ; [.5486.0020.0002] # CUNEIFORM SIGN URU TIMES GAL +1233E ; [.5487.0020.0002] # CUNEIFORM SIGN URU TIMES GAN2 TENU +1233F ; [.5488.0020.0002] # CUNEIFORM SIGN URU TIMES GAR +12340 ; [.5489.0020.0002] # CUNEIFORM SIGN URU TIMES GU +12341 ; [.548A.0020.0002] # CUNEIFORM SIGN URU TIMES HA +12342 ; [.548B.0020.0002] # CUNEIFORM SIGN URU TIMES IGI +12343 ; [.548C.0020.0002] # CUNEIFORM SIGN URU TIMES IM +12344 ; [.548D.0020.0002] # CUNEIFORM SIGN URU TIMES ISH +12345 ; [.548E.0020.0002] # CUNEIFORM SIGN URU TIMES KI +12346 ; [.548F.0020.0002] # CUNEIFORM SIGN URU TIMES LUM +12347 ; [.5490.0020.0002] # CUNEIFORM SIGN URU TIMES MIN +12348 ; [.5491.0020.0002] # CUNEIFORM SIGN URU TIMES PA +12349 ; [.5492.0020.0002] # CUNEIFORM SIGN URU TIMES SHE +1234A ; [.5493.0020.0002] # CUNEIFORM SIGN URU TIMES SIG4 +1234B ; [.5494.0020.0002] # CUNEIFORM SIGN URU TIMES TU +1234C ; [.5495.0020.0002] # CUNEIFORM SIGN URU TIMES U PLUS GUD +1234D ; [.5496.0020.0002] # CUNEIFORM SIGN URU TIMES UD +1234E ; [.5497.0020.0002] # CUNEIFORM SIGN URU TIMES URUDA +1234F ; [.5498.0020.0002] # CUNEIFORM SIGN URUDA +12350 ; [.5499.0020.0002] # CUNEIFORM SIGN URUDA TIMES U +12351 ; [.549A.0020.0002] # CUNEIFORM SIGN USH +12352 ; [.549B.0020.0002] # CUNEIFORM SIGN USH TIMES A +12353 ; [.549C.0020.0002] # CUNEIFORM SIGN USH TIMES KU +12354 ; [.549D.0020.0002] # CUNEIFORM SIGN USH TIMES KUR +12355 ; [.549E.0020.0002] # CUNEIFORM SIGN USH TIMES TAK4 +12356 ; [.549F.0020.0002] # CUNEIFORM SIGN USHX +12357 ; [.54A0.0020.0002] # CUNEIFORM SIGN USH2 +12358 ; [.54A1.0020.0002] # CUNEIFORM SIGN USHUMX +12359 ; [.54A2.0020.0002] # CUNEIFORM SIGN UTUKI +1235A ; [.54A3.0020.0002] # CUNEIFORM SIGN UZ3 +1235B ; [.54A4.0020.0002] # CUNEIFORM SIGN UZ3 TIMES KASKAL +1235C ; [.54A5.0020.0002] # CUNEIFORM SIGN UZU +1235D ; [.54A6.0020.0002] # CUNEIFORM SIGN ZA +1235E ; [.54A7.0020.0002] # CUNEIFORM SIGN ZA TENU +1235F ; [.54A8.0020.0002] # CUNEIFORM SIGN ZA SQUARED TIMES KUR +12360 ; [.54A9.0020.0002] # CUNEIFORM SIGN ZAG +12361 ; [.54AA.0020.0002] # CUNEIFORM SIGN ZAMX +12362 ; [.54AB.0020.0002] # CUNEIFORM SIGN ZE2 +12363 ; [.54AC.0020.0002] # CUNEIFORM SIGN ZI +12364 ; [.54AD.0020.0002] # CUNEIFORM SIGN ZI OVER ZI +12365 ; [.54AE.0020.0002] # CUNEIFORM SIGN ZI3 +12366 ; [.54AF.0020.0002] # CUNEIFORM SIGN ZIB +12367 ; [.54B0.0020.0002] # CUNEIFORM SIGN ZIB KABA TENU +12368 ; [.54B1.0020.0002] # CUNEIFORM SIGN ZIG +12369 ; [.54B2.0020.0002] # CUNEIFORM SIGN ZIZ2 +1236A ; [.54B3.0020.0002] # CUNEIFORM SIGN ZU +1236B ; [.54B4.0020.0002] # CUNEIFORM SIGN ZU5 +1236C ; [.54B5.0020.0002] # CUNEIFORM SIGN ZU5 TIMES A +1236D ; [.54B6.0020.0002] # CUNEIFORM SIGN ZUBUR +1236E ; [.54B7.0020.0002] # CUNEIFORM SIGN ZUM +1236F ; [.54B8.0020.0002] # CUNEIFORM SIGN KAP ELAMITE +12370 ; [.54B9.0020.0002] # CUNEIFORM SIGN AB TIMES NUN +12371 ; [.54BA.0020.0002] # CUNEIFORM SIGN AB2 TIMES A +12372 ; [.54BB.0020.0002] # CUNEIFORM SIGN AMAR TIMES KUG +12373 ; [.54BC.0020.0002] # CUNEIFORM SIGN DAG KISIM5 TIMES U2 PLUS MASH +12374 ; [.54BD.0020.0002] # CUNEIFORM SIGN DAG3 +12375 ; [.54BE.0020.0002] # CUNEIFORM SIGN DISH PLUS SHU +12376 ; [.54BF.0020.0002] # CUNEIFORM SIGN DUB TIMES SHE +12377 ; [.54C0.0020.0002] # CUNEIFORM SIGN EZEN TIMES GUD +12378 ; [.54C1.0020.0002] # CUNEIFORM SIGN EZEN TIMES SHE +12379 ; [.54C2.0020.0002] # CUNEIFORM SIGN GA2 TIMES AN PLUS KAK PLUS A +1237A ; [.54C3.0020.0002] # CUNEIFORM SIGN GA2 TIMES ASH2 +1237B ; [.54C4.0020.0002] # CUNEIFORM SIGN GE22 +1237C ; [.54C5.0020.0002] # CUNEIFORM SIGN GIG +1237D ; [.54C6.0020.0002] # CUNEIFORM SIGN HUSH +1237E ; [.54C7.0020.0002] # CUNEIFORM SIGN KA TIMES ANSHE +1237F ; [.54C8.0020.0002] # CUNEIFORM SIGN KA TIMES ASH3 +12380 ; [.54C9.0020.0002] # CUNEIFORM SIGN KA TIMES GISH +12381 ; [.54CA.0020.0002] # CUNEIFORM SIGN KA TIMES GUD +12382 ; [.54CB.0020.0002] # CUNEIFORM SIGN KA TIMES HI TIMES ASH2 +12383 ; [.54CC.0020.0002] # CUNEIFORM SIGN KA TIMES LUM +12384 ; [.54CD.0020.0002] # CUNEIFORM SIGN KA TIMES PA +12385 ; [.54CE.0020.0002] # CUNEIFORM SIGN KA TIMES SHUL +12386 ; [.54CF.0020.0002] # CUNEIFORM SIGN KA TIMES TU +12387 ; [.54D0.0020.0002] # CUNEIFORM SIGN KA TIMES UR2 +12388 ; [.54D1.0020.0002] # CUNEIFORM SIGN LAGAB TIMES GI +12389 ; [.54D2.0020.0002] # CUNEIFORM SIGN LU2 SHESHIG TIMES BAD +1238A ; [.54D3.0020.0002] # CUNEIFORM SIGN LU2 TIMES ESH2 PLUS LAL +1238B ; [.54D4.0020.0002] # CUNEIFORM SIGN LU2 TIMES SHU +1238C ; [.54D5.0020.0002] # CUNEIFORM SIGN MESH +1238D ; [.54D6.0020.0002] # CUNEIFORM SIGN MUSH3 TIMES ZA +1238E ; [.54D7.0020.0002] # CUNEIFORM SIGN NA4 +1238F ; [.54D8.0020.0002] # CUNEIFORM SIGN NIN +12390 ; [.54D9.0020.0002] # CUNEIFORM SIGN NIN9 +12391 ; [.54DA.0020.0002] # CUNEIFORM SIGN NINDA2 TIMES BAL +12392 ; [.54DB.0020.0002] # CUNEIFORM SIGN NINDA2 TIMES GI +12393 ; [.54DC.0020.0002] # CUNEIFORM SIGN NU11 ROTATED NINETY DEGREES +12394 ; [.54DD.0020.0002] # CUNEIFORM SIGN PESH2 ASTERISK +12395 ; [.54DE.0020.0002] # CUNEIFORM SIGN PIR2 +12396 ; [.54DF.0020.0002] # CUNEIFORM SIGN SAG TIMES IGI GUNU +12397 ; [.54E0.0020.0002] # CUNEIFORM SIGN TI2 +12398 ; [.54E1.0020.0002] # CUNEIFORM SIGN UM TIMES ME +12399 ; [.54E2.0020.0002] # CUNEIFORM SIGN U U +12480 ; [.54E3.0020.0002] # CUNEIFORM SIGN AB TIMES NUN TENU +12481 ; [.54E4.0020.0002] # CUNEIFORM SIGN AB TIMES SHU2 +12482 ; [.54E5.0020.0002] # CUNEIFORM SIGN AD TIMES ESH2 +12483 ; [.54E6.0020.0002] # CUNEIFORM SIGN BAD TIMES DISH TENU +12484 ; [.54E7.0020.0002] # CUNEIFORM SIGN BAHAR2 TIMES AB2 +12485 ; [.54E8.0020.0002] # CUNEIFORM SIGN BAHAR2 TIMES NI +12486 ; [.54E9.0020.0002] # CUNEIFORM SIGN BAHAR2 TIMES ZA +12487 ; [.54EA.0020.0002] # CUNEIFORM SIGN BU OVER BU TIMES NA2 +12488 ; [.54EB.0020.0002] # CUNEIFORM SIGN DA TIMES TAK4 +12489 ; [.54EC.0020.0002] # CUNEIFORM SIGN DAG TIMES KUR +1248A ; [.54ED.0020.0002] # CUNEIFORM SIGN DIM TIMES IGI +1248B ; [.54EE.0020.0002] # CUNEIFORM SIGN DIM TIMES U U U +1248C ; [.54EF.0020.0002] # CUNEIFORM SIGN DIM2 TIMES UD +1248D ; [.54F0.0020.0002] # CUNEIFORM SIGN DUG TIMES ANSHE +1248E ; [.54F1.0020.0002] # CUNEIFORM SIGN DUG TIMES ASH +1248F ; [.54F2.0020.0002] # CUNEIFORM SIGN DUG TIMES ASH AT LEFT +12490 ; [.54F3.0020.0002] # CUNEIFORM SIGN DUG TIMES DIN +12491 ; [.54F4.0020.0002] # CUNEIFORM SIGN DUG TIMES DUN +12492 ; [.54F5.0020.0002] # CUNEIFORM SIGN DUG TIMES ERIN2 +12493 ; [.54F6.0020.0002] # CUNEIFORM SIGN DUG TIMES GA +12494 ; [.54F7.0020.0002] # CUNEIFORM SIGN DUG TIMES GI +12495 ; [.54F8.0020.0002] # CUNEIFORM SIGN DUG TIMES GIR2 GUNU +12496 ; [.54F9.0020.0002] # CUNEIFORM SIGN DUG TIMES GISH +12497 ; [.54FA.0020.0002] # CUNEIFORM SIGN DUG TIMES HA +12498 ; [.54FB.0020.0002] # CUNEIFORM SIGN DUG TIMES HI +12499 ; [.54FC.0020.0002] # CUNEIFORM SIGN DUG TIMES IGI GUNU +1249A ; [.54FD.0020.0002] # CUNEIFORM SIGN DUG TIMES KASKAL +1249B ; [.54FE.0020.0002] # CUNEIFORM SIGN DUG TIMES KUR +1249C ; [.54FF.0020.0002] # CUNEIFORM SIGN DUG TIMES KUSHU2 +1249D ; [.5500.0020.0002] # CUNEIFORM SIGN DUG TIMES KUSHU2 PLUS KASKAL +1249E ; [.5501.0020.0002] # CUNEIFORM SIGN DUG TIMES LAK-020 +1249F ; [.5502.0020.0002] # CUNEIFORM SIGN DUG TIMES LAM +124A0 ; [.5503.0020.0002] # CUNEIFORM SIGN DUG TIMES LAM TIMES KUR +124A1 ; [.5504.0020.0002] # CUNEIFORM SIGN DUG TIMES LUH PLUS GISH +124A2 ; [.5505.0020.0002] # CUNEIFORM SIGN DUG TIMES MASH +124A3 ; [.5506.0020.0002] # CUNEIFORM SIGN DUG TIMES MES +124A4 ; [.5507.0020.0002] # CUNEIFORM SIGN DUG TIMES MI +124A5 ; [.5508.0020.0002] # CUNEIFORM SIGN DUG TIMES NI +124A6 ; [.5509.0020.0002] # CUNEIFORM SIGN DUG TIMES PI +124A7 ; [.550A.0020.0002] # CUNEIFORM SIGN DUG TIMES SHE +124A8 ; [.550B.0020.0002] # CUNEIFORM SIGN DUG TIMES SI GUNU +124A9 ; [.550C.0020.0002] # CUNEIFORM SIGN E2 TIMES KUR +124AA ; [.550D.0020.0002] # CUNEIFORM SIGN E2 TIMES PAP +124AB ; [.550E.0020.0002] # CUNEIFORM SIGN ERIN2 X +124AC ; [.550F.0020.0002] # CUNEIFORM SIGN ESH2 CROSSING ESH2 +124AD ; [.5510.0020.0002] # CUNEIFORM SIGN EZEN SHESHIG TIMES ASH +124AE ; [.5511.0020.0002] # CUNEIFORM SIGN EZEN SHESHIG TIMES HI +124AF ; [.5512.0020.0002] # CUNEIFORM SIGN EZEN SHESHIG TIMES IGI GUNU +124B0 ; [.5513.0020.0002] # CUNEIFORM SIGN EZEN SHESHIG TIMES LA +124B1 ; [.5514.0020.0002] # CUNEIFORM SIGN EZEN SHESHIG TIMES LAL +124B2 ; [.5515.0020.0002] # CUNEIFORM SIGN EZEN SHESHIG TIMES ME +124B3 ; [.5516.0020.0002] # CUNEIFORM SIGN EZEN SHESHIG TIMES MES +124B4 ; [.5517.0020.0002] # CUNEIFORM SIGN EZEN SHESHIG TIMES SU +124B5 ; [.5518.0020.0002] # CUNEIFORM SIGN EZEN TIMES SU +124B6 ; [.5519.0020.0002] # CUNEIFORM SIGN GA2 TIMES BAHAR2 +124B7 ; [.551A.0020.0002] # CUNEIFORM SIGN GA2 TIMES DIM GUNU +124B8 ; [.551B.0020.0002] # CUNEIFORM SIGN GA2 TIMES DUG TIMES IGI GUNU +124B9 ; [.551C.0020.0002] # CUNEIFORM SIGN GA2 TIMES DUG TIMES KASKAL +124BA ; [.551D.0020.0002] # CUNEIFORM SIGN GA2 TIMES EREN +124BB ; [.551E.0020.0002] # CUNEIFORM SIGN GA2 TIMES GA +124BC ; [.551F.0020.0002] # CUNEIFORM SIGN GA2 TIMES GAR PLUS DI +124BD ; [.5520.0020.0002] # CUNEIFORM SIGN GA2 TIMES GAR PLUS NE +124BE ; [.5521.0020.0002] # CUNEIFORM SIGN GA2 TIMES HA PLUS A +124BF ; [.5522.0020.0002] # CUNEIFORM SIGN GA2 TIMES KUSHU2 PLUS KASKAL +124C0 ; [.5523.0020.0002] # CUNEIFORM SIGN GA2 TIMES LAM +124C1 ; [.5524.0020.0002] # CUNEIFORM SIGN GA2 TIMES LAM TIMES KUR +124C2 ; [.5525.0020.0002] # CUNEIFORM SIGN GA2 TIMES LUH +124C3 ; [.5526.0020.0002] # CUNEIFORM SIGN GA2 TIMES MUSH +124C4 ; [.5527.0020.0002] # CUNEIFORM SIGN GA2 TIMES NE +124C5 ; [.5528.0020.0002] # CUNEIFORM SIGN GA2 TIMES NE PLUS E2 +124C6 ; [.5529.0020.0002] # CUNEIFORM SIGN GA2 TIMES NE PLUS GI +124C7 ; [.552A.0020.0002] # CUNEIFORM SIGN GA2 TIMES SHIM +124C8 ; [.552B.0020.0002] # CUNEIFORM SIGN GA2 TIMES ZIZ2 +124C9 ; [.552C.0020.0002] # CUNEIFORM SIGN GABA ROTATED NINETY DEGREES +124CA ; [.552D.0020.0002] # CUNEIFORM SIGN GESHTIN TIMES U +124CB ; [.552E.0020.0002] # CUNEIFORM SIGN GISH TIMES GISH CROSSING GISH +124CC ; [.552F.0020.0002] # CUNEIFORM SIGN GU2 TIMES IGI GUNU +124CD ; [.5530.0020.0002] # CUNEIFORM SIGN GUD PLUS GISH TIMES TAK4 +124CE ; [.5531.0020.0002] # CUNEIFORM SIGN HA TENU GUNU +124CF ; [.5532.0020.0002] # CUNEIFORM SIGN HI TIMES ASH OVER HI TIMES ASH +124D0 ; [.5533.0020.0002] # CUNEIFORM SIGN KA TIMES BU +124D1 ; [.5534.0020.0002] # CUNEIFORM SIGN KA TIMES KA +124D2 ; [.5535.0020.0002] # CUNEIFORM SIGN KA TIMES U U U +124D3 ; [.5536.0020.0002] # CUNEIFORM SIGN KA TIMES UR +124D4 ; [.5537.0020.0002] # CUNEIFORM SIGN LAGAB TIMES ZU OVER ZU +124D5 ; [.5538.0020.0002] # CUNEIFORM SIGN LAK-003 +124D6 ; [.5539.0020.0002] # CUNEIFORM SIGN LAK-021 +124D7 ; [.553A.0020.0002] # CUNEIFORM SIGN LAK-025 +124D8 ; [.553B.0020.0002] # CUNEIFORM SIGN LAK-030 +124D9 ; [.553C.0020.0002] # CUNEIFORM SIGN LAK-050 +124DA ; [.553D.0020.0002] # CUNEIFORM SIGN LAK-051 +124DB ; [.553E.0020.0002] # CUNEIFORM SIGN LAK-062 +124DC ; [.553F.0020.0002] # CUNEIFORM SIGN LAK-079 OVER LAK-079 GUNU +124DD ; [.5540.0020.0002] # CUNEIFORM SIGN LAK-080 +124DE ; [.5541.0020.0002] # CUNEIFORM SIGN LAK-081 OVER LAK-081 +124DF ; [.5542.0020.0002] # CUNEIFORM SIGN LAK-092 +124E0 ; [.5543.0020.0002] # CUNEIFORM SIGN LAK-130 +124E1 ; [.5544.0020.0002] # CUNEIFORM SIGN LAK-142 +124E2 ; [.5545.0020.0002] # CUNEIFORM SIGN LAK-210 +124E3 ; [.5546.0020.0002] # CUNEIFORM SIGN LAK-219 +124E4 ; [.5547.0020.0002] # CUNEIFORM SIGN LAK-220 +124E5 ; [.5548.0020.0002] # CUNEIFORM SIGN LAK-225 +124E6 ; [.5549.0020.0002] # CUNEIFORM SIGN LAK-228 +124E7 ; [.554A.0020.0002] # CUNEIFORM SIGN LAK-238 +124E8 ; [.554B.0020.0002] # CUNEIFORM SIGN LAK-265 +124E9 ; [.554C.0020.0002] # CUNEIFORM SIGN LAK-266 +124EA ; [.554D.0020.0002] # CUNEIFORM SIGN LAK-343 +124EB ; [.554E.0020.0002] # CUNEIFORM SIGN LAK-347 +124EC ; [.554F.0020.0002] # CUNEIFORM SIGN LAK-348 +124ED ; [.5550.0020.0002] # CUNEIFORM SIGN LAK-383 +124EE ; [.5551.0020.0002] # CUNEIFORM SIGN LAK-384 +124EF ; [.5552.0020.0002] # CUNEIFORM SIGN LAK-390 +124F0 ; [.5553.0020.0002] # CUNEIFORM SIGN LAK-441 +124F1 ; [.5554.0020.0002] # CUNEIFORM SIGN LAK-449 +124F2 ; [.5555.0020.0002] # CUNEIFORM SIGN LAK-449 TIMES GU +124F3 ; [.5556.0020.0002] # CUNEIFORM SIGN LAK-449 TIMES IGI +124F4 ; [.5557.0020.0002] # CUNEIFORM SIGN LAK-449 TIMES PAP PLUS LU3 +124F5 ; [.5558.0020.0002] # CUNEIFORM SIGN LAK-449 TIMES PAP PLUS PAP PLUS LU3 +124F6 ; [.5559.0020.0002] # CUNEIFORM SIGN LAK-449 TIMES U2 PLUS BA +124F7 ; [.555A.0020.0002] # CUNEIFORM SIGN LAK-450 +124F8 ; [.555B.0020.0002] # CUNEIFORM SIGN LAK-457 +124F9 ; [.555C.0020.0002] # CUNEIFORM SIGN LAK-470 +124FA ; [.555D.0020.0002] # CUNEIFORM SIGN LAK-483 +124FB ; [.555E.0020.0002] # CUNEIFORM SIGN LAK-490 +124FC ; [.555F.0020.0002] # CUNEIFORM SIGN LAK-492 +124FD ; [.5560.0020.0002] # CUNEIFORM SIGN LAK-493 +124FE ; [.5561.0020.0002] # CUNEIFORM SIGN LAK-495 +124FF ; [.5562.0020.0002] # CUNEIFORM SIGN LAK-550 +12500 ; [.5563.0020.0002] # CUNEIFORM SIGN LAK-608 +12501 ; [.5564.0020.0002] # CUNEIFORM SIGN LAK-617 +12502 ; [.5565.0020.0002] # CUNEIFORM SIGN LAK-617 TIMES ASH +12503 ; [.5566.0020.0002] # CUNEIFORM SIGN LAK-617 TIMES BAD +12504 ; [.5567.0020.0002] # CUNEIFORM SIGN LAK-617 TIMES DUN3 GUNU GUNU +12505 ; [.5568.0020.0002] # CUNEIFORM SIGN LAK-617 TIMES KU3 +12506 ; [.5569.0020.0002] # CUNEIFORM SIGN LAK-617 TIMES LA +12507 ; [.556A.0020.0002] # CUNEIFORM SIGN LAK-617 TIMES TAR +12508 ; [.556B.0020.0002] # CUNEIFORM SIGN LAK-617 TIMES TE +12509 ; [.556C.0020.0002] # CUNEIFORM SIGN LAK-617 TIMES U2 +1250A ; [.556D.0020.0002] # CUNEIFORM SIGN LAK-617 TIMES UD +1250B ; [.556E.0020.0002] # CUNEIFORM SIGN LAK-617 TIMES URUDA +1250C ; [.556F.0020.0002] # CUNEIFORM SIGN LAK-636 +1250D ; [.5570.0020.0002] # CUNEIFORM SIGN LAK-648 +1250E ; [.5571.0020.0002] # CUNEIFORM SIGN LAK-648 TIMES DUB +1250F ; [.5572.0020.0002] # CUNEIFORM SIGN LAK-648 TIMES GA +12510 ; [.5573.0020.0002] # CUNEIFORM SIGN LAK-648 TIMES IGI +12511 ; [.5574.0020.0002] # CUNEIFORM SIGN LAK-648 TIMES IGI GUNU +12512 ; [.5575.0020.0002] # CUNEIFORM SIGN LAK-648 TIMES NI +12513 ; [.5576.0020.0002] # CUNEIFORM SIGN LAK-648 TIMES PAP PLUS PAP PLUS LU3 +12514 ; [.5577.0020.0002] # CUNEIFORM SIGN LAK-648 TIMES SHESH PLUS KI +12515 ; [.5578.0020.0002] # CUNEIFORM SIGN LAK-648 TIMES UD +12516 ; [.5579.0020.0002] # CUNEIFORM SIGN LAK-648 TIMES URUDA +12517 ; [.557A.0020.0002] # CUNEIFORM SIGN LAK-724 +12518 ; [.557B.0020.0002] # CUNEIFORM SIGN LAK-749 +12519 ; [.557C.0020.0002] # CUNEIFORM SIGN LU2 GUNU TIMES ASH +1251A ; [.557D.0020.0002] # CUNEIFORM SIGN LU2 TIMES DISH +1251B ; [.557E.0020.0002] # CUNEIFORM SIGN LU2 TIMES HAL +1251C ; [.557F.0020.0002] # CUNEIFORM SIGN LU2 TIMES PAP +1251D ; [.5580.0020.0002] # CUNEIFORM SIGN LU2 TIMES PAP PLUS PAP PLUS LU3 +1251E ; [.5581.0020.0002] # CUNEIFORM SIGN LU2 TIMES TAK4 +1251F ; [.5582.0020.0002] # CUNEIFORM SIGN MI PLUS ZA7 +12520 ; [.5583.0020.0002] # CUNEIFORM SIGN MUSH OVER MUSH TIMES GA +12521 ; [.5584.0020.0002] # CUNEIFORM SIGN MUSH OVER MUSH TIMES KAK +12522 ; [.5585.0020.0002] # CUNEIFORM SIGN NINDA2 TIMES DIM GUNU +12523 ; [.5586.0020.0002] # CUNEIFORM SIGN NINDA2 TIMES GISH +12524 ; [.5587.0020.0002] # CUNEIFORM SIGN NINDA2 TIMES GUL +12525 ; [.5588.0020.0002] # CUNEIFORM SIGN NINDA2 TIMES HI +12526 ; [.5589.0020.0002] # CUNEIFORM SIGN NINDA2 TIMES KESH2 +12527 ; [.558A.0020.0002] # CUNEIFORM SIGN NINDA2 TIMES LAK-050 +12528 ; [.558B.0020.0002] # CUNEIFORM SIGN NINDA2 TIMES MASH +12529 ; [.558C.0020.0002] # CUNEIFORM SIGN NINDA2 TIMES PAP PLUS PAP +1252A ; [.558D.0020.0002] # CUNEIFORM SIGN NINDA2 TIMES U +1252B ; [.558E.0020.0002] # CUNEIFORM SIGN NINDA2 TIMES U PLUS U +1252C ; [.558F.0020.0002] # CUNEIFORM SIGN NINDA2 TIMES URUDA +1252D ; [.5590.0020.0002] # CUNEIFORM SIGN SAG GUNU TIMES HA +1252E ; [.5591.0020.0002] # CUNEIFORM SIGN SAG TIMES EN +1252F ; [.5592.0020.0002] # CUNEIFORM SIGN SAG TIMES SHE AT LEFT +12530 ; [.5593.0020.0002] # CUNEIFORM SIGN SAG TIMES TAK4 +12531 ; [.5594.0020.0002] # CUNEIFORM SIGN SHA6 TENU +12532 ; [.5595.0020.0002] # CUNEIFORM SIGN SHE OVER SHE +12533 ; [.5596.0020.0002] # CUNEIFORM SIGN SHE PLUS HUB2 +12534 ; [.5597.0020.0002] # CUNEIFORM SIGN SHE PLUS NAM2 +12535 ; [.5598.0020.0002] # CUNEIFORM SIGN SHE PLUS SAR +12536 ; [.5599.0020.0002] # CUNEIFORM SIGN SHU2 PLUS DUG TIMES NI +12537 ; [.559A.0020.0002] # CUNEIFORM SIGN SHU2 PLUS E2 TIMES AN +12538 ; [.559B.0020.0002] # CUNEIFORM SIGN SI TIMES TAK4 +12539 ; [.559C.0020.0002] # CUNEIFORM SIGN TAK4 PLUS SAG +1253A ; [.559D.0020.0002] # CUNEIFORM SIGN TUM TIMES GAN2 TENU +1253B ; [.559E.0020.0002] # CUNEIFORM SIGN TUM TIMES THREE DISH +1253C ; [.559F.0020.0002] # CUNEIFORM SIGN UR2 INVERTED +1253D ; [.55A0.0020.0002] # CUNEIFORM SIGN UR2 TIMES UD +1253E ; [.55A1.0020.0002] # CUNEIFORM SIGN URU TIMES DARA3 +1253F ; [.55A2.0020.0002] # CUNEIFORM SIGN URU TIMES LAK-668 +12540 ; [.55A3.0020.0002] # CUNEIFORM SIGN URU TIMES LU3 +12541 ; [.55A4.0020.0002] # CUNEIFORM SIGN ZA7 +12542 ; [.55A5.0020.0002] # CUNEIFORM SIGN ZU OVER ZU PLUS SAR +12543 ; [.55A6.0020.0002] # CUNEIFORM SIGN ZU5 TIMES THREE DISH TENU +13000 ; [.55A7.0020.0002] # EGYPTIAN HIEROGLYPH A001 +13001 ; [.55A8.0020.0002] # EGYPTIAN HIEROGLYPH A002 +13002 ; [.55A9.0020.0002] # EGYPTIAN HIEROGLYPH A003 +13003 ; [.55AA.0020.0002] # EGYPTIAN HIEROGLYPH A004 +13004 ; [.55AB.0020.0002] # EGYPTIAN HIEROGLYPH A005 +13005 ; [.55AC.0020.0002] # EGYPTIAN HIEROGLYPH A005A +13006 ; [.55AD.0020.0002] # EGYPTIAN HIEROGLYPH A006 +13007 ; [.55AE.0020.0002] # EGYPTIAN HIEROGLYPH A006A +13008 ; [.55AF.0020.0002] # EGYPTIAN HIEROGLYPH A006B +13009 ; [.55B0.0020.0002] # EGYPTIAN HIEROGLYPH A007 +1300A ; [.55B1.0020.0002] # EGYPTIAN HIEROGLYPH A008 +1300B ; [.55B2.0020.0002] # EGYPTIAN HIEROGLYPH A009 +1300C ; [.55B3.0020.0002] # EGYPTIAN HIEROGLYPH A010 +1300D ; [.55B4.0020.0002] # EGYPTIAN HIEROGLYPH A011 +1300E ; [.55B5.0020.0002] # EGYPTIAN HIEROGLYPH A012 +1300F ; [.55B6.0020.0002] # EGYPTIAN HIEROGLYPH A013 +13010 ; [.55B7.0020.0002] # EGYPTIAN HIEROGLYPH A014 +13011 ; [.55B8.0020.0002] # EGYPTIAN HIEROGLYPH A014A +13012 ; [.55B9.0020.0002] # EGYPTIAN HIEROGLYPH A015 +13013 ; [.55BA.0020.0002] # EGYPTIAN HIEROGLYPH A016 +13014 ; [.55BB.0020.0002] # EGYPTIAN HIEROGLYPH A017 +13015 ; [.55BC.0020.0002] # EGYPTIAN HIEROGLYPH A017A +13016 ; [.55BD.0020.0002] # EGYPTIAN HIEROGLYPH A018 +13017 ; [.55BE.0020.0002] # EGYPTIAN HIEROGLYPH A019 +13018 ; [.55BF.0020.0002] # EGYPTIAN HIEROGLYPH A020 +13019 ; [.55C0.0020.0002] # EGYPTIAN HIEROGLYPH A021 +1301A ; [.55C1.0020.0002] # EGYPTIAN HIEROGLYPH A022 +1301B ; [.55C2.0020.0002] # EGYPTIAN HIEROGLYPH A023 +1301C ; [.55C3.0020.0002] # EGYPTIAN HIEROGLYPH A024 +1301D ; [.55C4.0020.0002] # EGYPTIAN HIEROGLYPH A025 +1301E ; [.55C5.0020.0002] # EGYPTIAN HIEROGLYPH A026 +1301F ; [.55C6.0020.0002] # EGYPTIAN HIEROGLYPH A027 +13020 ; [.55C7.0020.0002] # EGYPTIAN HIEROGLYPH A028 +13021 ; [.55C8.0020.0002] # EGYPTIAN HIEROGLYPH A029 +13022 ; [.55C9.0020.0002] # EGYPTIAN HIEROGLYPH A030 +13023 ; [.55CA.0020.0002] # EGYPTIAN HIEROGLYPH A031 +13024 ; [.55CB.0020.0002] # EGYPTIAN HIEROGLYPH A032 +13025 ; [.55CC.0020.0002] # EGYPTIAN HIEROGLYPH A032A +13026 ; [.55CD.0020.0002] # EGYPTIAN HIEROGLYPH A033 +13027 ; [.55CE.0020.0002] # EGYPTIAN HIEROGLYPH A034 +13028 ; [.55CF.0020.0002] # EGYPTIAN HIEROGLYPH A035 +13029 ; [.55D0.0020.0002] # EGYPTIAN HIEROGLYPH A036 +1302A ; [.55D1.0020.0002] # EGYPTIAN HIEROGLYPH A037 +1302B ; [.55D2.0020.0002] # EGYPTIAN HIEROGLYPH A038 +1302C ; [.55D3.0020.0002] # EGYPTIAN HIEROGLYPH A039 +1302D ; [.55D4.0020.0002] # EGYPTIAN HIEROGLYPH A040 +1302E ; [.55D5.0020.0002] # EGYPTIAN HIEROGLYPH A040A +1302F ; [.55D6.0020.0002] # EGYPTIAN HIEROGLYPH A041 +13030 ; [.55D7.0020.0002] # EGYPTIAN HIEROGLYPH A042 +13031 ; [.55D8.0020.0002] # EGYPTIAN HIEROGLYPH A042A +13032 ; [.55D9.0020.0002] # EGYPTIAN HIEROGLYPH A043 +13033 ; [.55DA.0020.0002] # EGYPTIAN HIEROGLYPH A043A +13034 ; [.55DB.0020.0002] # EGYPTIAN HIEROGLYPH A044 +13035 ; [.55DC.0020.0002] # EGYPTIAN HIEROGLYPH A045 +13036 ; [.55DD.0020.0002] # EGYPTIAN HIEROGLYPH A045A +13037 ; [.55DE.0020.0002] # EGYPTIAN HIEROGLYPH A046 +13038 ; [.55DF.0020.0002] # EGYPTIAN HIEROGLYPH A047 +13039 ; [.55E0.0020.0002] # EGYPTIAN HIEROGLYPH A048 +1303A ; [.55E1.0020.0002] # EGYPTIAN HIEROGLYPH A049 +1303B ; [.55E2.0020.0002] # EGYPTIAN HIEROGLYPH A050 +1303C ; [.55E3.0020.0002] # EGYPTIAN HIEROGLYPH A051 +1303D ; [.55E4.0020.0002] # EGYPTIAN HIEROGLYPH A052 +1303E ; [.55E5.0020.0002] # EGYPTIAN HIEROGLYPH A053 +1303F ; [.55E6.0020.0002] # EGYPTIAN HIEROGLYPH A054 +13040 ; [.55E7.0020.0002] # EGYPTIAN HIEROGLYPH A055 +13041 ; [.55E8.0020.0002] # EGYPTIAN HIEROGLYPH A056 +13042 ; [.55E9.0020.0002] # EGYPTIAN HIEROGLYPH A057 +13043 ; [.55EA.0020.0002] # EGYPTIAN HIEROGLYPH A058 +13044 ; [.55EB.0020.0002] # EGYPTIAN HIEROGLYPH A059 +13045 ; [.55EC.0020.0002] # EGYPTIAN HIEROGLYPH A060 +13046 ; [.55ED.0020.0002] # EGYPTIAN HIEROGLYPH A061 +13047 ; [.55EE.0020.0002] # EGYPTIAN HIEROGLYPH A062 +13048 ; [.55EF.0020.0002] # EGYPTIAN HIEROGLYPH A063 +13049 ; [.55F0.0020.0002] # EGYPTIAN HIEROGLYPH A064 +1304A ; [.55F1.0020.0002] # EGYPTIAN HIEROGLYPH A065 +1304B ; [.55F2.0020.0002] # EGYPTIAN HIEROGLYPH A066 +1304C ; [.55F3.0020.0002] # EGYPTIAN HIEROGLYPH A067 +1304D ; [.55F4.0020.0002] # EGYPTIAN HIEROGLYPH A068 +1304E ; [.55F5.0020.0002] # EGYPTIAN HIEROGLYPH A069 +1304F ; [.55F6.0020.0002] # EGYPTIAN HIEROGLYPH A070 +13050 ; [.55F7.0020.0002] # EGYPTIAN HIEROGLYPH B001 +13051 ; [.55F8.0020.0002] # EGYPTIAN HIEROGLYPH B002 +13052 ; [.55F9.0020.0002] # EGYPTIAN HIEROGLYPH B003 +13053 ; [.55FA.0020.0002] # EGYPTIAN HIEROGLYPH B004 +13054 ; [.55FB.0020.0002] # EGYPTIAN HIEROGLYPH B005 +13055 ; [.55FC.0020.0002] # EGYPTIAN HIEROGLYPH B005A +13056 ; [.55FD.0020.0002] # EGYPTIAN HIEROGLYPH B006 +13057 ; [.55FE.0020.0002] # EGYPTIAN HIEROGLYPH B007 +13058 ; [.55FF.0020.0002] # EGYPTIAN HIEROGLYPH B008 +13059 ; [.5600.0020.0002] # EGYPTIAN HIEROGLYPH B009 +1305A ; [.5601.0020.0002] # EGYPTIAN HIEROGLYPH C001 +1305B ; [.5602.0020.0002] # EGYPTIAN HIEROGLYPH C002 +1305C ; [.5603.0020.0002] # EGYPTIAN HIEROGLYPH C002A +1305D ; [.5604.0020.0002] # EGYPTIAN HIEROGLYPH C002B +1305E ; [.5605.0020.0002] # EGYPTIAN HIEROGLYPH C002C +1305F ; [.5606.0020.0002] # EGYPTIAN HIEROGLYPH C003 +13060 ; [.5607.0020.0002] # EGYPTIAN HIEROGLYPH C004 +13061 ; [.5608.0020.0002] # EGYPTIAN HIEROGLYPH C005 +13062 ; [.5609.0020.0002] # EGYPTIAN HIEROGLYPH C006 +13063 ; [.560A.0020.0002] # EGYPTIAN HIEROGLYPH C007 +13064 ; [.560B.0020.0002] # EGYPTIAN HIEROGLYPH C008 +13065 ; [.560C.0020.0002] # EGYPTIAN HIEROGLYPH C009 +13066 ; [.560D.0020.0002] # EGYPTIAN HIEROGLYPH C010 +13067 ; [.560E.0020.0002] # EGYPTIAN HIEROGLYPH C010A +13068 ; [.560F.0020.0002] # EGYPTIAN HIEROGLYPH C011 +13069 ; [.5610.0020.0002] # EGYPTIAN HIEROGLYPH C012 +1306A ; [.5611.0020.0002] # EGYPTIAN HIEROGLYPH C013 +1306B ; [.5612.0020.0002] # EGYPTIAN HIEROGLYPH C014 +1306C ; [.5613.0020.0002] # EGYPTIAN HIEROGLYPH C015 +1306D ; [.5614.0020.0002] # EGYPTIAN HIEROGLYPH C016 +1306E ; [.5615.0020.0002] # EGYPTIAN HIEROGLYPH C017 +1306F ; [.5616.0020.0002] # EGYPTIAN HIEROGLYPH C018 +13070 ; [.5617.0020.0002] # EGYPTIAN HIEROGLYPH C019 +13071 ; [.5618.0020.0002] # EGYPTIAN HIEROGLYPH C020 +13072 ; [.5619.0020.0002] # EGYPTIAN HIEROGLYPH C021 +13073 ; [.561A.0020.0002] # EGYPTIAN HIEROGLYPH C022 +13074 ; [.561B.0020.0002] # EGYPTIAN HIEROGLYPH C023 +13075 ; [.561C.0020.0002] # EGYPTIAN HIEROGLYPH C024 +13076 ; [.561D.0020.0002] # EGYPTIAN HIEROGLYPH D001 +13077 ; [.561E.0020.0002] # EGYPTIAN HIEROGLYPH D002 +13078 ; [.561F.0020.0002] # EGYPTIAN HIEROGLYPH D003 +13079 ; [.5620.0020.0002] # EGYPTIAN HIEROGLYPH D004 +1307A ; [.5621.0020.0002] # EGYPTIAN HIEROGLYPH D005 +1307B ; [.5622.0020.0002] # EGYPTIAN HIEROGLYPH D006 +1307C ; [.5623.0020.0002] # EGYPTIAN HIEROGLYPH D007 +1307D ; [.5624.0020.0002] # EGYPTIAN HIEROGLYPH D008 +1307E ; [.5625.0020.0002] # EGYPTIAN HIEROGLYPH D008A +1307F ; [.5626.0020.0002] # EGYPTIAN HIEROGLYPH D009 +13080 ; [.5627.0020.0002] # EGYPTIAN HIEROGLYPH D010 +13081 ; [.5628.0020.0002] # EGYPTIAN HIEROGLYPH D011 +13082 ; [.5629.0020.0002] # EGYPTIAN HIEROGLYPH D012 +13083 ; [.562A.0020.0002] # EGYPTIAN HIEROGLYPH D013 +13084 ; [.562B.0020.0002] # EGYPTIAN HIEROGLYPH D014 +13085 ; [.562C.0020.0002] # EGYPTIAN HIEROGLYPH D015 +13086 ; [.562D.0020.0002] # EGYPTIAN HIEROGLYPH D016 +13087 ; [.562E.0020.0002] # EGYPTIAN HIEROGLYPH D017 +13088 ; [.562F.0020.0002] # EGYPTIAN HIEROGLYPH D018 +13089 ; [.5630.0020.0002] # EGYPTIAN HIEROGLYPH D019 +1308A ; [.5631.0020.0002] # EGYPTIAN HIEROGLYPH D020 +1308B ; [.5632.0020.0002] # EGYPTIAN HIEROGLYPH D021 +1308C ; [.5633.0020.0002] # EGYPTIAN HIEROGLYPH D022 +1308D ; [.5634.0020.0002] # EGYPTIAN HIEROGLYPH D023 +1308E ; [.5635.0020.0002] # EGYPTIAN HIEROGLYPH D024 +1308F ; [.5636.0020.0002] # EGYPTIAN HIEROGLYPH D025 +13090 ; [.5637.0020.0002] # EGYPTIAN HIEROGLYPH D026 +13091 ; [.5638.0020.0002] # EGYPTIAN HIEROGLYPH D027 +13092 ; [.5639.0020.0002] # EGYPTIAN HIEROGLYPH D027A +13093 ; [.563A.0020.0002] # EGYPTIAN HIEROGLYPH D028 +13094 ; [.563B.0020.0002] # EGYPTIAN HIEROGLYPH D029 +13095 ; [.563C.0020.0002] # EGYPTIAN HIEROGLYPH D030 +13096 ; [.563D.0020.0002] # EGYPTIAN HIEROGLYPH D031 +13097 ; [.563E.0020.0002] # EGYPTIAN HIEROGLYPH D031A +13098 ; [.563F.0020.0002] # EGYPTIAN HIEROGLYPH D032 +13099 ; [.5640.0020.0002] # EGYPTIAN HIEROGLYPH D033 +1309A ; [.5641.0020.0002] # EGYPTIAN HIEROGLYPH D034 +1309B ; [.5642.0020.0002] # EGYPTIAN HIEROGLYPH D034A +1309C ; [.5643.0020.0002] # EGYPTIAN HIEROGLYPH D035 +1309D ; [.5644.0020.0002] # EGYPTIAN HIEROGLYPH D036 +1309E ; [.5645.0020.0002] # EGYPTIAN HIEROGLYPH D037 +1309F ; [.5646.0020.0002] # EGYPTIAN HIEROGLYPH D038 +130A0 ; [.5647.0020.0002] # EGYPTIAN HIEROGLYPH D039 +130A1 ; [.5648.0020.0002] # EGYPTIAN HIEROGLYPH D040 +130A2 ; [.5649.0020.0002] # EGYPTIAN HIEROGLYPH D041 +130A3 ; [.564A.0020.0002] # EGYPTIAN HIEROGLYPH D042 +130A4 ; [.564B.0020.0002] # EGYPTIAN HIEROGLYPH D043 +130A5 ; [.564C.0020.0002] # EGYPTIAN HIEROGLYPH D044 +130A6 ; [.564D.0020.0002] # EGYPTIAN HIEROGLYPH D045 +130A7 ; [.564E.0020.0002] # EGYPTIAN HIEROGLYPH D046 +130A8 ; [.564F.0020.0002] # EGYPTIAN HIEROGLYPH D046A +130A9 ; [.5650.0020.0002] # EGYPTIAN HIEROGLYPH D047 +130AA ; [.5651.0020.0002] # EGYPTIAN HIEROGLYPH D048 +130AB ; [.5652.0020.0002] # EGYPTIAN HIEROGLYPH D048A +130AC ; [.5653.0020.0002] # EGYPTIAN HIEROGLYPH D049 +130AD ; [.5654.0020.0002] # EGYPTIAN HIEROGLYPH D050 +130AE ; [.5655.0020.0002] # EGYPTIAN HIEROGLYPH D050A +130AF ; [.5656.0020.0002] # EGYPTIAN HIEROGLYPH D050B +130B0 ; [.5657.0020.0002] # EGYPTIAN HIEROGLYPH D050C +130B1 ; [.5658.0020.0002] # EGYPTIAN HIEROGLYPH D050D +130B2 ; [.5659.0020.0002] # EGYPTIAN HIEROGLYPH D050E +130B3 ; [.565A.0020.0002] # EGYPTIAN HIEROGLYPH D050F +130B4 ; [.565B.0020.0002] # EGYPTIAN HIEROGLYPH D050G +130B5 ; [.565C.0020.0002] # EGYPTIAN HIEROGLYPH D050H +130B6 ; [.565D.0020.0002] # EGYPTIAN HIEROGLYPH D050I +130B7 ; [.565E.0020.0002] # EGYPTIAN HIEROGLYPH D051 +130B8 ; [.565F.0020.0002] # EGYPTIAN HIEROGLYPH D052 +130B9 ; [.5660.0020.0002] # EGYPTIAN HIEROGLYPH D052A +130BA ; [.5661.0020.0002] # EGYPTIAN HIEROGLYPH D053 +130BB ; [.5662.0020.0002] # EGYPTIAN HIEROGLYPH D054 +130BC ; [.5663.0020.0002] # EGYPTIAN HIEROGLYPH D054A +130BD ; [.5664.0020.0002] # EGYPTIAN HIEROGLYPH D055 +130BE ; [.5665.0020.0002] # EGYPTIAN HIEROGLYPH D056 +130BF ; [.5666.0020.0002] # EGYPTIAN HIEROGLYPH D057 +130C0 ; [.5667.0020.0002] # EGYPTIAN HIEROGLYPH D058 +130C1 ; [.5668.0020.0002] # EGYPTIAN HIEROGLYPH D059 +130C2 ; [.5669.0020.0002] # EGYPTIAN HIEROGLYPH D060 +130C3 ; [.566A.0020.0002] # EGYPTIAN HIEROGLYPH D061 +130C4 ; [.566B.0020.0002] # EGYPTIAN HIEROGLYPH D062 +130C5 ; [.566C.0020.0002] # EGYPTIAN HIEROGLYPH D063 +130C6 ; [.566D.0020.0002] # EGYPTIAN HIEROGLYPH D064 +130C7 ; [.566E.0020.0002] # EGYPTIAN HIEROGLYPH D065 +130C8 ; [.566F.0020.0002] # EGYPTIAN HIEROGLYPH D066 +130C9 ; [.5670.0020.0002] # EGYPTIAN HIEROGLYPH D067 +130CA ; [.5671.0020.0002] # EGYPTIAN HIEROGLYPH D067A +130CB ; [.5672.0020.0002] # EGYPTIAN HIEROGLYPH D067B +130CC ; [.5673.0020.0002] # EGYPTIAN HIEROGLYPH D067C +130CD ; [.5674.0020.0002] # EGYPTIAN HIEROGLYPH D067D +130CE ; [.5675.0020.0002] # EGYPTIAN HIEROGLYPH D067E +130CF ; [.5676.0020.0002] # EGYPTIAN HIEROGLYPH D067F +130D0 ; [.5677.0020.0002] # EGYPTIAN HIEROGLYPH D067G +130D1 ; [.5678.0020.0002] # EGYPTIAN HIEROGLYPH D067H +130D2 ; [.5679.0020.0002] # EGYPTIAN HIEROGLYPH E001 +130D3 ; [.567A.0020.0002] # EGYPTIAN HIEROGLYPH E002 +130D4 ; [.567B.0020.0002] # EGYPTIAN HIEROGLYPH E003 +130D5 ; [.567C.0020.0002] # EGYPTIAN HIEROGLYPH E004 +130D6 ; [.567D.0020.0002] # EGYPTIAN HIEROGLYPH E005 +130D7 ; [.567E.0020.0002] # EGYPTIAN HIEROGLYPH E006 +130D8 ; [.567F.0020.0002] # EGYPTIAN HIEROGLYPH E007 +130D9 ; [.5680.0020.0002] # EGYPTIAN HIEROGLYPH E008 +130DA ; [.5681.0020.0002] # EGYPTIAN HIEROGLYPH E008A +130DB ; [.5682.0020.0002] # EGYPTIAN HIEROGLYPH E009 +130DC ; [.5683.0020.0002] # EGYPTIAN HIEROGLYPH E009A +130DD ; [.5684.0020.0002] # EGYPTIAN HIEROGLYPH E010 +130DE ; [.5685.0020.0002] # EGYPTIAN HIEROGLYPH E011 +130DF ; [.5686.0020.0002] # EGYPTIAN HIEROGLYPH E012 +130E0 ; [.5687.0020.0002] # EGYPTIAN HIEROGLYPH E013 +130E1 ; [.5688.0020.0002] # EGYPTIAN HIEROGLYPH E014 +130E2 ; [.5689.0020.0002] # EGYPTIAN HIEROGLYPH E015 +130E3 ; [.568A.0020.0002] # EGYPTIAN HIEROGLYPH E016 +130E4 ; [.568B.0020.0002] # EGYPTIAN HIEROGLYPH E016A +130E5 ; [.568C.0020.0002] # EGYPTIAN HIEROGLYPH E017 +130E6 ; [.568D.0020.0002] # EGYPTIAN HIEROGLYPH E017A +130E7 ; [.568E.0020.0002] # EGYPTIAN HIEROGLYPH E018 +130E8 ; [.568F.0020.0002] # EGYPTIAN HIEROGLYPH E019 +130E9 ; [.5690.0020.0002] # EGYPTIAN HIEROGLYPH E020 +130EA ; [.5691.0020.0002] # EGYPTIAN HIEROGLYPH E020A +130EB ; [.5692.0020.0002] # EGYPTIAN HIEROGLYPH E021 +130EC ; [.5693.0020.0002] # EGYPTIAN HIEROGLYPH E022 +130ED ; [.5694.0020.0002] # EGYPTIAN HIEROGLYPH E023 +130EE ; [.5695.0020.0002] # EGYPTIAN HIEROGLYPH E024 +130EF ; [.5696.0020.0002] # EGYPTIAN HIEROGLYPH E025 +130F0 ; [.5697.0020.0002] # EGYPTIAN HIEROGLYPH E026 +130F1 ; [.5698.0020.0002] # EGYPTIAN HIEROGLYPH E027 +130F2 ; [.5699.0020.0002] # EGYPTIAN HIEROGLYPH E028 +130F3 ; [.569A.0020.0002] # EGYPTIAN HIEROGLYPH E028A +130F4 ; [.569B.0020.0002] # EGYPTIAN HIEROGLYPH E029 +130F5 ; [.569C.0020.0002] # EGYPTIAN HIEROGLYPH E030 +130F6 ; [.569D.0020.0002] # EGYPTIAN HIEROGLYPH E031 +130F7 ; [.569E.0020.0002] # EGYPTIAN HIEROGLYPH E032 +130F8 ; [.569F.0020.0002] # EGYPTIAN HIEROGLYPH E033 +130F9 ; [.56A0.0020.0002] # EGYPTIAN HIEROGLYPH E034 +130FA ; [.56A1.0020.0002] # EGYPTIAN HIEROGLYPH E034A +130FB ; [.56A2.0020.0002] # EGYPTIAN HIEROGLYPH E036 +130FC ; [.56A3.0020.0002] # EGYPTIAN HIEROGLYPH E037 +130FD ; [.56A4.0020.0002] # EGYPTIAN HIEROGLYPH E038 +130FE ; [.56A5.0020.0002] # EGYPTIAN HIEROGLYPH F001 +130FF ; [.56A6.0020.0002] # EGYPTIAN HIEROGLYPH F001A +13100 ; [.56A7.0020.0002] # EGYPTIAN HIEROGLYPH F002 +13101 ; [.56A8.0020.0002] # EGYPTIAN HIEROGLYPH F003 +13102 ; [.56A9.0020.0002] # EGYPTIAN HIEROGLYPH F004 +13103 ; [.56AA.0020.0002] # EGYPTIAN HIEROGLYPH F005 +13104 ; [.56AB.0020.0002] # EGYPTIAN HIEROGLYPH F006 +13105 ; [.56AC.0020.0002] # EGYPTIAN HIEROGLYPH F007 +13106 ; [.56AD.0020.0002] # EGYPTIAN HIEROGLYPH F008 +13107 ; [.56AE.0020.0002] # EGYPTIAN HIEROGLYPH F009 +13108 ; [.56AF.0020.0002] # EGYPTIAN HIEROGLYPH F010 +13109 ; [.56B0.0020.0002] # EGYPTIAN HIEROGLYPH F011 +1310A ; [.56B1.0020.0002] # EGYPTIAN HIEROGLYPH F012 +1310B ; [.56B2.0020.0002] # EGYPTIAN HIEROGLYPH F013 +1310C ; [.56B3.0020.0002] # EGYPTIAN HIEROGLYPH F013A +1310D ; [.56B4.0020.0002] # EGYPTIAN HIEROGLYPH F014 +1310E ; [.56B5.0020.0002] # EGYPTIAN HIEROGLYPH F015 +1310F ; [.56B6.0020.0002] # EGYPTIAN HIEROGLYPH F016 +13110 ; [.56B7.0020.0002] # EGYPTIAN HIEROGLYPH F017 +13111 ; [.56B8.0020.0002] # EGYPTIAN HIEROGLYPH F018 +13112 ; [.56B9.0020.0002] # EGYPTIAN HIEROGLYPH F019 +13113 ; [.56BA.0020.0002] # EGYPTIAN HIEROGLYPH F020 +13114 ; [.56BB.0020.0002] # EGYPTIAN HIEROGLYPH F021 +13115 ; [.56BC.0020.0002] # EGYPTIAN HIEROGLYPH F021A +13116 ; [.56BD.0020.0002] # EGYPTIAN HIEROGLYPH F022 +13117 ; [.56BE.0020.0002] # EGYPTIAN HIEROGLYPH F023 +13118 ; [.56BF.0020.0002] # EGYPTIAN HIEROGLYPH F024 +13119 ; [.56C0.0020.0002] # EGYPTIAN HIEROGLYPH F025 +1311A ; [.56C1.0020.0002] # EGYPTIAN HIEROGLYPH F026 +1311B ; [.56C2.0020.0002] # EGYPTIAN HIEROGLYPH F027 +1311C ; [.56C3.0020.0002] # EGYPTIAN HIEROGLYPH F028 +1311D ; [.56C4.0020.0002] # EGYPTIAN HIEROGLYPH F029 +1311E ; [.56C5.0020.0002] # EGYPTIAN HIEROGLYPH F030 +1311F ; [.56C6.0020.0002] # EGYPTIAN HIEROGLYPH F031 +13120 ; [.56C7.0020.0002] # EGYPTIAN HIEROGLYPH F031A +13121 ; [.56C8.0020.0002] # EGYPTIAN HIEROGLYPH F032 +13122 ; [.56C9.0020.0002] # EGYPTIAN HIEROGLYPH F033 +13123 ; [.56CA.0020.0002] # EGYPTIAN HIEROGLYPH F034 +13124 ; [.56CB.0020.0002] # EGYPTIAN HIEROGLYPH F035 +13125 ; [.56CC.0020.0002] # EGYPTIAN HIEROGLYPH F036 +13126 ; [.56CD.0020.0002] # EGYPTIAN HIEROGLYPH F037 +13127 ; [.56CE.0020.0002] # EGYPTIAN HIEROGLYPH F037A +13128 ; [.56CF.0020.0002] # EGYPTIAN HIEROGLYPH F038 +13129 ; [.56D0.0020.0002] # EGYPTIAN HIEROGLYPH F038A +1312A ; [.56D1.0020.0002] # EGYPTIAN HIEROGLYPH F039 +1312B ; [.56D2.0020.0002] # EGYPTIAN HIEROGLYPH F040 +1312C ; [.56D3.0020.0002] # EGYPTIAN HIEROGLYPH F041 +1312D ; [.56D4.0020.0002] # EGYPTIAN HIEROGLYPH F042 +1312E ; [.56D5.0020.0002] # EGYPTIAN HIEROGLYPH F043 +1312F ; [.56D6.0020.0002] # EGYPTIAN HIEROGLYPH F044 +13130 ; [.56D7.0020.0002] # EGYPTIAN HIEROGLYPH F045 +13131 ; [.56D8.0020.0002] # EGYPTIAN HIEROGLYPH F045A +13132 ; [.56D9.0020.0002] # EGYPTIAN HIEROGLYPH F046 +13133 ; [.56DA.0020.0002] # EGYPTIAN HIEROGLYPH F046A +13134 ; [.56DB.0020.0002] # EGYPTIAN HIEROGLYPH F047 +13135 ; [.56DC.0020.0002] # EGYPTIAN HIEROGLYPH F047A +13136 ; [.56DD.0020.0002] # EGYPTIAN HIEROGLYPH F048 +13137 ; [.56DE.0020.0002] # EGYPTIAN HIEROGLYPH F049 +13138 ; [.56DF.0020.0002] # EGYPTIAN HIEROGLYPH F050 +13139 ; [.56E0.0020.0002] # EGYPTIAN HIEROGLYPH F051 +1313A ; [.56E1.0020.0002] # EGYPTIAN HIEROGLYPH F051A +1313B ; [.56E2.0020.0002] # EGYPTIAN HIEROGLYPH F051B +1313C ; [.56E3.0020.0002] # EGYPTIAN HIEROGLYPH F051C +1313D ; [.56E4.0020.0002] # EGYPTIAN HIEROGLYPH F052 +1313E ; [.56E5.0020.0002] # EGYPTIAN HIEROGLYPH F053 +1313F ; [.56E6.0020.0002] # EGYPTIAN HIEROGLYPH G001 +13140 ; [.56E7.0020.0002] # EGYPTIAN HIEROGLYPH G002 +13141 ; [.56E8.0020.0002] # EGYPTIAN HIEROGLYPH G003 +13142 ; [.56E9.0020.0002] # EGYPTIAN HIEROGLYPH G004 +13143 ; [.56EA.0020.0002] # EGYPTIAN HIEROGLYPH G005 +13144 ; [.56EB.0020.0002] # EGYPTIAN HIEROGLYPH G006 +13145 ; [.56EC.0020.0002] # EGYPTIAN HIEROGLYPH G006A +13146 ; [.56ED.0020.0002] # EGYPTIAN HIEROGLYPH G007 +13147 ; [.56EE.0020.0002] # EGYPTIAN HIEROGLYPH G007A +13148 ; [.56EF.0020.0002] # EGYPTIAN HIEROGLYPH G007B +13149 ; [.56F0.0020.0002] # EGYPTIAN HIEROGLYPH G008 +1314A ; [.56F1.0020.0002] # EGYPTIAN HIEROGLYPH G009 +1314B ; [.56F2.0020.0002] # EGYPTIAN HIEROGLYPH G010 +1314C ; [.56F3.0020.0002] # EGYPTIAN HIEROGLYPH G011 +1314D ; [.56F4.0020.0002] # EGYPTIAN HIEROGLYPH G011A +1314E ; [.56F5.0020.0002] # EGYPTIAN HIEROGLYPH G012 +1314F ; [.56F6.0020.0002] # EGYPTIAN HIEROGLYPH G013 +13150 ; [.56F7.0020.0002] # EGYPTIAN HIEROGLYPH G014 +13151 ; [.56F8.0020.0002] # EGYPTIAN HIEROGLYPH G015 +13152 ; [.56F9.0020.0002] # EGYPTIAN HIEROGLYPH G016 +13153 ; [.56FA.0020.0002] # EGYPTIAN HIEROGLYPH G017 +13154 ; [.56FB.0020.0002] # EGYPTIAN HIEROGLYPH G018 +13155 ; [.56FC.0020.0002] # EGYPTIAN HIEROGLYPH G019 +13156 ; [.56FD.0020.0002] # EGYPTIAN HIEROGLYPH G020 +13157 ; [.56FE.0020.0002] # EGYPTIAN HIEROGLYPH G020A +13158 ; [.56FF.0020.0002] # EGYPTIAN HIEROGLYPH G021 +13159 ; [.5700.0020.0002] # EGYPTIAN HIEROGLYPH G022 +1315A ; [.5701.0020.0002] # EGYPTIAN HIEROGLYPH G023 +1315B ; [.5702.0020.0002] # EGYPTIAN HIEROGLYPH G024 +1315C ; [.5703.0020.0002] # EGYPTIAN HIEROGLYPH G025 +1315D ; [.5704.0020.0002] # EGYPTIAN HIEROGLYPH G026 +1315E ; [.5705.0020.0002] # EGYPTIAN HIEROGLYPH G026A +1315F ; [.5706.0020.0002] # EGYPTIAN HIEROGLYPH G027 +13160 ; [.5707.0020.0002] # EGYPTIAN HIEROGLYPH G028 +13161 ; [.5708.0020.0002] # EGYPTIAN HIEROGLYPH G029 +13162 ; [.5709.0020.0002] # EGYPTIAN HIEROGLYPH G030 +13163 ; [.570A.0020.0002] # EGYPTIAN HIEROGLYPH G031 +13164 ; [.570B.0020.0002] # EGYPTIAN HIEROGLYPH G032 +13165 ; [.570C.0020.0002] # EGYPTIAN HIEROGLYPH G033 +13166 ; [.570D.0020.0002] # EGYPTIAN HIEROGLYPH G034 +13167 ; [.570E.0020.0002] # EGYPTIAN HIEROGLYPH G035 +13168 ; [.570F.0020.0002] # EGYPTIAN HIEROGLYPH G036 +13169 ; [.5710.0020.0002] # EGYPTIAN HIEROGLYPH G036A +1316A ; [.5711.0020.0002] # EGYPTIAN HIEROGLYPH G037 +1316B ; [.5712.0020.0002] # EGYPTIAN HIEROGLYPH G037A +1316C ; [.5713.0020.0002] # EGYPTIAN HIEROGLYPH G038 +1316D ; [.5714.0020.0002] # EGYPTIAN HIEROGLYPH G039 +1316E ; [.5715.0020.0002] # EGYPTIAN HIEROGLYPH G040 +1316F ; [.5716.0020.0002] # EGYPTIAN HIEROGLYPH G041 +13170 ; [.5717.0020.0002] # EGYPTIAN HIEROGLYPH G042 +13171 ; [.5718.0020.0002] # EGYPTIAN HIEROGLYPH G043 +13172 ; [.5719.0020.0002] # EGYPTIAN HIEROGLYPH G043A +13173 ; [.571A.0020.0002] # EGYPTIAN HIEROGLYPH G044 +13174 ; [.571B.0020.0002] # EGYPTIAN HIEROGLYPH G045 +13175 ; [.571C.0020.0002] # EGYPTIAN HIEROGLYPH G045A +13176 ; [.571D.0020.0002] # EGYPTIAN HIEROGLYPH G046 +13177 ; [.571E.0020.0002] # EGYPTIAN HIEROGLYPH G047 +13178 ; [.571F.0020.0002] # EGYPTIAN HIEROGLYPH G048 +13179 ; [.5720.0020.0002] # EGYPTIAN HIEROGLYPH G049 +1317A ; [.5721.0020.0002] # EGYPTIAN HIEROGLYPH G050 +1317B ; [.5722.0020.0002] # EGYPTIAN HIEROGLYPH G051 +1317C ; [.5723.0020.0002] # EGYPTIAN HIEROGLYPH G052 +1317D ; [.5724.0020.0002] # EGYPTIAN HIEROGLYPH G053 +1317E ; [.5725.0020.0002] # EGYPTIAN HIEROGLYPH G054 +1317F ; [.5726.0020.0002] # EGYPTIAN HIEROGLYPH H001 +13180 ; [.5727.0020.0002] # EGYPTIAN HIEROGLYPH H002 +13181 ; [.5728.0020.0002] # EGYPTIAN HIEROGLYPH H003 +13182 ; [.5729.0020.0002] # EGYPTIAN HIEROGLYPH H004 +13183 ; [.572A.0020.0002] # EGYPTIAN HIEROGLYPH H005 +13184 ; [.572B.0020.0002] # EGYPTIAN HIEROGLYPH H006 +13185 ; [.572C.0020.0002] # EGYPTIAN HIEROGLYPH H006A +13186 ; [.572D.0020.0002] # EGYPTIAN HIEROGLYPH H007 +13187 ; [.572E.0020.0002] # EGYPTIAN HIEROGLYPH H008 +13188 ; [.572F.0020.0002] # EGYPTIAN HIEROGLYPH I001 +13189 ; [.5730.0020.0002] # EGYPTIAN HIEROGLYPH I002 +1318A ; [.5731.0020.0002] # EGYPTIAN HIEROGLYPH I003 +1318B ; [.5732.0020.0002] # EGYPTIAN HIEROGLYPH I004 +1318C ; [.5733.0020.0002] # EGYPTIAN HIEROGLYPH I005 +1318D ; [.5734.0020.0002] # EGYPTIAN HIEROGLYPH I005A +1318E ; [.5735.0020.0002] # EGYPTIAN HIEROGLYPH I006 +1318F ; [.5736.0020.0002] # EGYPTIAN HIEROGLYPH I007 +13190 ; [.5737.0020.0002] # EGYPTIAN HIEROGLYPH I008 +13191 ; [.5738.0020.0002] # EGYPTIAN HIEROGLYPH I009 +13192 ; [.5739.0020.0002] # EGYPTIAN HIEROGLYPH I009A +13193 ; [.573A.0020.0002] # EGYPTIAN HIEROGLYPH I010 +13194 ; [.573B.0020.0002] # EGYPTIAN HIEROGLYPH I010A +13195 ; [.573C.0020.0002] # EGYPTIAN HIEROGLYPH I011 +13196 ; [.573D.0020.0002] # EGYPTIAN HIEROGLYPH I011A +13197 ; [.573E.0020.0002] # EGYPTIAN HIEROGLYPH I012 +13198 ; [.573F.0020.0002] # EGYPTIAN HIEROGLYPH I013 +13199 ; [.5740.0020.0002] # EGYPTIAN HIEROGLYPH I014 +1319A ; [.5741.0020.0002] # EGYPTIAN HIEROGLYPH I015 +1319B ; [.5742.0020.0002] # EGYPTIAN HIEROGLYPH K001 +1319C ; [.5743.0020.0002] # EGYPTIAN HIEROGLYPH K002 +1319D ; [.5744.0020.0002] # EGYPTIAN HIEROGLYPH K003 +1319E ; [.5745.0020.0002] # EGYPTIAN HIEROGLYPH K004 +1319F ; [.5746.0020.0002] # EGYPTIAN HIEROGLYPH K005 +131A0 ; [.5747.0020.0002] # EGYPTIAN HIEROGLYPH K006 +131A1 ; [.5748.0020.0002] # EGYPTIAN HIEROGLYPH K007 +131A2 ; [.5749.0020.0002] # EGYPTIAN HIEROGLYPH K008 +131A3 ; [.574A.0020.0002] # EGYPTIAN HIEROGLYPH L001 +131A4 ; [.574B.0020.0002] # EGYPTIAN HIEROGLYPH L002 +131A5 ; [.574C.0020.0002] # EGYPTIAN HIEROGLYPH L002A +131A6 ; [.574D.0020.0002] # EGYPTIAN HIEROGLYPH L003 +131A7 ; [.574E.0020.0002] # EGYPTIAN HIEROGLYPH L004 +131A8 ; [.574F.0020.0002] # EGYPTIAN HIEROGLYPH L005 +131A9 ; [.5750.0020.0002] # EGYPTIAN HIEROGLYPH L006 +131AA ; [.5751.0020.0002] # EGYPTIAN HIEROGLYPH L006A +131AB ; [.5752.0020.0002] # EGYPTIAN HIEROGLYPH L007 +131AC ; [.5753.0020.0002] # EGYPTIAN HIEROGLYPH L008 +131AD ; [.5754.0020.0002] # EGYPTIAN HIEROGLYPH M001 +131AE ; [.5755.0020.0002] # EGYPTIAN HIEROGLYPH M001A +131AF ; [.5756.0020.0002] # EGYPTIAN HIEROGLYPH M001B +131B0 ; [.5757.0020.0002] # EGYPTIAN HIEROGLYPH M002 +131B1 ; [.5758.0020.0002] # EGYPTIAN HIEROGLYPH M003 +131B2 ; [.5759.0020.0002] # EGYPTIAN HIEROGLYPH M003A +131B3 ; [.575A.0020.0002] # EGYPTIAN HIEROGLYPH M004 +131B4 ; [.575B.0020.0002] # EGYPTIAN HIEROGLYPH M005 +131B5 ; [.575C.0020.0002] # EGYPTIAN HIEROGLYPH M006 +131B6 ; [.575D.0020.0002] # EGYPTIAN HIEROGLYPH M007 +131B7 ; [.575E.0020.0002] # EGYPTIAN HIEROGLYPH M008 +131B8 ; [.575F.0020.0002] # EGYPTIAN HIEROGLYPH M009 +131B9 ; [.5760.0020.0002] # EGYPTIAN HIEROGLYPH M010 +131BA ; [.5761.0020.0002] # EGYPTIAN HIEROGLYPH M010A +131BB ; [.5762.0020.0002] # EGYPTIAN HIEROGLYPH M011 +131BC ; [.5763.0020.0002] # EGYPTIAN HIEROGLYPH M012 +131BD ; [.5764.0020.0002] # EGYPTIAN HIEROGLYPH M012A +131BE ; [.5765.0020.0002] # EGYPTIAN HIEROGLYPH M012B +131BF ; [.5766.0020.0002] # EGYPTIAN HIEROGLYPH M012C +131C0 ; [.5767.0020.0002] # EGYPTIAN HIEROGLYPH M012D +131C1 ; [.5768.0020.0002] # EGYPTIAN HIEROGLYPH M012E +131C2 ; [.5769.0020.0002] # EGYPTIAN HIEROGLYPH M012F +131C3 ; [.576A.0020.0002] # EGYPTIAN HIEROGLYPH M012G +131C4 ; [.576B.0020.0002] # EGYPTIAN HIEROGLYPH M012H +131C5 ; [.576C.0020.0002] # EGYPTIAN HIEROGLYPH M013 +131C6 ; [.576D.0020.0002] # EGYPTIAN HIEROGLYPH M014 +131C7 ; [.576E.0020.0002] # EGYPTIAN HIEROGLYPH M015 +131C8 ; [.576F.0020.0002] # EGYPTIAN HIEROGLYPH M015A +131C9 ; [.5770.0020.0002] # EGYPTIAN HIEROGLYPH M016 +131CA ; [.5771.0020.0002] # EGYPTIAN HIEROGLYPH M016A +131CB ; [.5772.0020.0002] # EGYPTIAN HIEROGLYPH M017 +131CC ; [.5773.0020.0002] # EGYPTIAN HIEROGLYPH M017A +131CD ; [.5774.0020.0002] # EGYPTIAN HIEROGLYPH M018 +131CE ; [.5775.0020.0002] # EGYPTIAN HIEROGLYPH M019 +131CF ; [.5776.0020.0002] # EGYPTIAN HIEROGLYPH M020 +131D0 ; [.5777.0020.0002] # EGYPTIAN HIEROGLYPH M021 +131D1 ; [.5778.0020.0002] # EGYPTIAN HIEROGLYPH M022 +131D2 ; [.5779.0020.0002] # EGYPTIAN HIEROGLYPH M022A +131D3 ; [.577A.0020.0002] # EGYPTIAN HIEROGLYPH M023 +131D4 ; [.577B.0020.0002] # EGYPTIAN HIEROGLYPH M024 +131D5 ; [.577C.0020.0002] # EGYPTIAN HIEROGLYPH M024A +131D6 ; [.577D.0020.0002] # EGYPTIAN HIEROGLYPH M025 +131D7 ; [.577E.0020.0002] # EGYPTIAN HIEROGLYPH M026 +131D8 ; [.577F.0020.0002] # EGYPTIAN HIEROGLYPH M027 +131D9 ; [.5780.0020.0002] # EGYPTIAN HIEROGLYPH M028 +131DA ; [.5781.0020.0002] # EGYPTIAN HIEROGLYPH M028A +131DB ; [.5782.0020.0002] # EGYPTIAN HIEROGLYPH M029 +131DC ; [.5783.0020.0002] # EGYPTIAN HIEROGLYPH M030 +131DD ; [.5784.0020.0002] # EGYPTIAN HIEROGLYPH M031 +131DE ; [.5785.0020.0002] # EGYPTIAN HIEROGLYPH M031A +131DF ; [.5786.0020.0002] # EGYPTIAN HIEROGLYPH M032 +131E0 ; [.5787.0020.0002] # EGYPTIAN HIEROGLYPH M033 +131E1 ; [.5788.0020.0002] # EGYPTIAN HIEROGLYPH M033A +131E2 ; [.5789.0020.0002] # EGYPTIAN HIEROGLYPH M033B +131E3 ; [.578A.0020.0002] # EGYPTIAN HIEROGLYPH M034 +131E4 ; [.578B.0020.0002] # EGYPTIAN HIEROGLYPH M035 +131E5 ; [.578C.0020.0002] # EGYPTIAN HIEROGLYPH M036 +131E6 ; [.578D.0020.0002] # EGYPTIAN HIEROGLYPH M037 +131E7 ; [.578E.0020.0002] # EGYPTIAN HIEROGLYPH M038 +131E8 ; [.578F.0020.0002] # EGYPTIAN HIEROGLYPH M039 +131E9 ; [.5790.0020.0002] # EGYPTIAN HIEROGLYPH M040 +131EA ; [.5791.0020.0002] # EGYPTIAN HIEROGLYPH M040A +131EB ; [.5792.0020.0002] # EGYPTIAN HIEROGLYPH M041 +131EC ; [.5793.0020.0002] # EGYPTIAN HIEROGLYPH M042 +131ED ; [.5794.0020.0002] # EGYPTIAN HIEROGLYPH M043 +131EE ; [.5795.0020.0002] # EGYPTIAN HIEROGLYPH M044 +131EF ; [.5796.0020.0002] # EGYPTIAN HIEROGLYPH N001 +131F0 ; [.5797.0020.0002] # EGYPTIAN HIEROGLYPH N002 +131F1 ; [.5798.0020.0002] # EGYPTIAN HIEROGLYPH N003 +131F2 ; [.5799.0020.0002] # EGYPTIAN HIEROGLYPH N004 +131F3 ; [.579A.0020.0002] # EGYPTIAN HIEROGLYPH N005 +131F4 ; [.579B.0020.0002] # EGYPTIAN HIEROGLYPH N006 +131F5 ; [.579C.0020.0002] # EGYPTIAN HIEROGLYPH N007 +131F6 ; [.579D.0020.0002] # EGYPTIAN HIEROGLYPH N008 +131F7 ; [.579E.0020.0002] # EGYPTIAN HIEROGLYPH N009 +131F8 ; [.579F.0020.0002] # EGYPTIAN HIEROGLYPH N010 +131F9 ; [.57A0.0020.0002] # EGYPTIAN HIEROGLYPH N011 +131FA ; [.57A1.0020.0002] # EGYPTIAN HIEROGLYPH N012 +131FB ; [.57A2.0020.0002] # EGYPTIAN HIEROGLYPH N013 +131FC ; [.57A3.0020.0002] # EGYPTIAN HIEROGLYPH N014 +131FD ; [.57A4.0020.0002] # EGYPTIAN HIEROGLYPH N015 +131FE ; [.57A5.0020.0002] # EGYPTIAN HIEROGLYPH N016 +131FF ; [.57A6.0020.0002] # EGYPTIAN HIEROGLYPH N017 +13200 ; [.57A7.0020.0002] # EGYPTIAN HIEROGLYPH N018 +13201 ; [.57A8.0020.0002] # EGYPTIAN HIEROGLYPH N018A +13202 ; [.57A9.0020.0002] # EGYPTIAN HIEROGLYPH N018B +13203 ; [.57AA.0020.0002] # EGYPTIAN HIEROGLYPH N019 +13204 ; [.57AB.0020.0002] # EGYPTIAN HIEROGLYPH N020 +13205 ; [.57AC.0020.0002] # EGYPTIAN HIEROGLYPH N021 +13206 ; [.57AD.0020.0002] # EGYPTIAN HIEROGLYPH N022 +13207 ; [.57AE.0020.0002] # EGYPTIAN HIEROGLYPH N023 +13208 ; [.57AF.0020.0002] # EGYPTIAN HIEROGLYPH N024 +13209 ; [.57B0.0020.0002] # EGYPTIAN HIEROGLYPH N025 +1320A ; [.57B1.0020.0002] # EGYPTIAN HIEROGLYPH N025A +1320B ; [.57B2.0020.0002] # EGYPTIAN HIEROGLYPH N026 +1320C ; [.57B3.0020.0002] # EGYPTIAN HIEROGLYPH N027 +1320D ; [.57B4.0020.0002] # EGYPTIAN HIEROGLYPH N028 +1320E ; [.57B5.0020.0002] # EGYPTIAN HIEROGLYPH N029 +1320F ; [.57B6.0020.0002] # EGYPTIAN HIEROGLYPH N030 +13210 ; [.57B7.0020.0002] # EGYPTIAN HIEROGLYPH N031 +13211 ; [.57B8.0020.0002] # EGYPTIAN HIEROGLYPH N032 +13212 ; [.57B9.0020.0002] # EGYPTIAN HIEROGLYPH N033 +13213 ; [.57BA.0020.0002] # EGYPTIAN HIEROGLYPH N033A +13214 ; [.57BB.0020.0002] # EGYPTIAN HIEROGLYPH N034 +13215 ; [.57BC.0020.0002] # EGYPTIAN HIEROGLYPH N034A +13216 ; [.57BD.0020.0002] # EGYPTIAN HIEROGLYPH N035 +13217 ; [.57BE.0020.0002] # EGYPTIAN HIEROGLYPH N035A +13218 ; [.57BF.0020.0002] # EGYPTIAN HIEROGLYPH N036 +13219 ; [.57C0.0020.0002] # EGYPTIAN HIEROGLYPH N037 +1321A ; [.57C1.0020.0002] # EGYPTIAN HIEROGLYPH N037A +1321B ; [.57C2.0020.0002] # EGYPTIAN HIEROGLYPH N038 +1321C ; [.57C3.0020.0002] # EGYPTIAN HIEROGLYPH N039 +1321D ; [.57C4.0020.0002] # EGYPTIAN HIEROGLYPH N040 +1321E ; [.57C5.0020.0002] # EGYPTIAN HIEROGLYPH N041 +1321F ; [.57C6.0020.0002] # EGYPTIAN HIEROGLYPH N042 +13220 ; [.57C7.0020.0002] # EGYPTIAN HIEROGLYPH NL001 +13221 ; [.57C8.0020.0002] # EGYPTIAN HIEROGLYPH NL002 +13222 ; [.57C9.0020.0002] # EGYPTIAN HIEROGLYPH NL003 +13223 ; [.57CA.0020.0002] # EGYPTIAN HIEROGLYPH NL004 +13224 ; [.57CB.0020.0002] # EGYPTIAN HIEROGLYPH NL005 +13225 ; [.57CC.0020.0002] # EGYPTIAN HIEROGLYPH NL005A +13226 ; [.57CD.0020.0002] # EGYPTIAN HIEROGLYPH NL006 +13227 ; [.57CE.0020.0002] # EGYPTIAN HIEROGLYPH NL007 +13228 ; [.57CF.0020.0002] # EGYPTIAN HIEROGLYPH NL008 +13229 ; [.57D0.0020.0002] # EGYPTIAN HIEROGLYPH NL009 +1322A ; [.57D1.0020.0002] # EGYPTIAN HIEROGLYPH NL010 +1322B ; [.57D2.0020.0002] # EGYPTIAN HIEROGLYPH NL011 +1322C ; [.57D3.0020.0002] # EGYPTIAN HIEROGLYPH NL012 +1322D ; [.57D4.0020.0002] # EGYPTIAN HIEROGLYPH NL013 +1322E ; [.57D5.0020.0002] # EGYPTIAN HIEROGLYPH NL014 +1322F ; [.57D6.0020.0002] # EGYPTIAN HIEROGLYPH NL015 +13230 ; [.57D7.0020.0002] # EGYPTIAN HIEROGLYPH NL016 +13231 ; [.57D8.0020.0002] # EGYPTIAN HIEROGLYPH NL017 +13232 ; [.57D9.0020.0002] # EGYPTIAN HIEROGLYPH NL017A +13233 ; [.57DA.0020.0002] # EGYPTIAN HIEROGLYPH NL018 +13234 ; [.57DB.0020.0002] # EGYPTIAN HIEROGLYPH NL019 +13235 ; [.57DC.0020.0002] # EGYPTIAN HIEROGLYPH NL020 +13236 ; [.57DD.0020.0002] # EGYPTIAN HIEROGLYPH NU001 +13237 ; [.57DE.0020.0002] # EGYPTIAN HIEROGLYPH NU002 +13238 ; [.57DF.0020.0002] # EGYPTIAN HIEROGLYPH NU003 +13239 ; [.57E0.0020.0002] # EGYPTIAN HIEROGLYPH NU004 +1323A ; [.57E1.0020.0002] # EGYPTIAN HIEROGLYPH NU005 +1323B ; [.57E2.0020.0002] # EGYPTIAN HIEROGLYPH NU006 +1323C ; [.57E3.0020.0002] # EGYPTIAN HIEROGLYPH NU007 +1323D ; [.57E4.0020.0002] # EGYPTIAN HIEROGLYPH NU008 +1323E ; [.57E5.0020.0002] # EGYPTIAN HIEROGLYPH NU009 +1323F ; [.57E6.0020.0002] # EGYPTIAN HIEROGLYPH NU010 +13240 ; [.57E7.0020.0002] # EGYPTIAN HIEROGLYPH NU010A +13241 ; [.57E8.0020.0002] # EGYPTIAN HIEROGLYPH NU011 +13242 ; [.57E9.0020.0002] # EGYPTIAN HIEROGLYPH NU011A +13243 ; [.57EA.0020.0002] # EGYPTIAN HIEROGLYPH NU012 +13244 ; [.57EB.0020.0002] # EGYPTIAN HIEROGLYPH NU013 +13245 ; [.57EC.0020.0002] # EGYPTIAN HIEROGLYPH NU014 +13246 ; [.57ED.0020.0002] # EGYPTIAN HIEROGLYPH NU015 +13247 ; [.57EE.0020.0002] # EGYPTIAN HIEROGLYPH NU016 +13248 ; [.57EF.0020.0002] # EGYPTIAN HIEROGLYPH NU017 +13249 ; [.57F0.0020.0002] # EGYPTIAN HIEROGLYPH NU018 +1324A ; [.57F1.0020.0002] # EGYPTIAN HIEROGLYPH NU018A +1324B ; [.57F2.0020.0002] # EGYPTIAN HIEROGLYPH NU019 +1324C ; [.57F3.0020.0002] # EGYPTIAN HIEROGLYPH NU020 +1324D ; [.57F4.0020.0002] # EGYPTIAN HIEROGLYPH NU021 +1324E ; [.57F5.0020.0002] # EGYPTIAN HIEROGLYPH NU022 +1324F ; [.57F6.0020.0002] # EGYPTIAN HIEROGLYPH NU022A +13250 ; [.57F7.0020.0002] # EGYPTIAN HIEROGLYPH O001 +13251 ; [.57F8.0020.0002] # EGYPTIAN HIEROGLYPH O001A +13252 ; [.57F9.0020.0002] # EGYPTIAN HIEROGLYPH O002 +13253 ; [.57FA.0020.0002] # EGYPTIAN HIEROGLYPH O003 +13254 ; [.57FB.0020.0002] # EGYPTIAN HIEROGLYPH O004 +13255 ; [.57FC.0020.0002] # EGYPTIAN HIEROGLYPH O005 +13256 ; [.57FD.0020.0002] # EGYPTIAN HIEROGLYPH O005A +13257 ; [.57FE.0020.0002] # EGYPTIAN HIEROGLYPH O006 +13258 ; [.57FF.0020.0002] # EGYPTIAN HIEROGLYPH O006A +13259 ; [.5800.0020.0002] # EGYPTIAN HIEROGLYPH O006B +1325A ; [.5801.0020.0002] # EGYPTIAN HIEROGLYPH O006C +1325B ; [.5802.0020.0002] # EGYPTIAN HIEROGLYPH O006D +1325C ; [.5803.0020.0002] # EGYPTIAN HIEROGLYPH O006E +1325D ; [.5804.0020.0002] # EGYPTIAN HIEROGLYPH O006F +1325E ; [.5805.0020.0002] # EGYPTIAN HIEROGLYPH O007 +1325F ; [.5806.0020.0002] # EGYPTIAN HIEROGLYPH O008 +13260 ; [.5807.0020.0002] # EGYPTIAN HIEROGLYPH O009 +13261 ; [.5808.0020.0002] # EGYPTIAN HIEROGLYPH O010 +13262 ; [.5809.0020.0002] # EGYPTIAN HIEROGLYPH O010A +13263 ; [.580A.0020.0002] # EGYPTIAN HIEROGLYPH O010B +13264 ; [.580B.0020.0002] # EGYPTIAN HIEROGLYPH O010C +13265 ; [.580C.0020.0002] # EGYPTIAN HIEROGLYPH O011 +13266 ; [.580D.0020.0002] # EGYPTIAN HIEROGLYPH O012 +13267 ; [.580E.0020.0002] # EGYPTIAN HIEROGLYPH O013 +13268 ; [.580F.0020.0002] # EGYPTIAN HIEROGLYPH O014 +13269 ; [.5810.0020.0002] # EGYPTIAN HIEROGLYPH O015 +1326A ; [.5811.0020.0002] # EGYPTIAN HIEROGLYPH O016 +1326B ; [.5812.0020.0002] # EGYPTIAN HIEROGLYPH O017 +1326C ; [.5813.0020.0002] # EGYPTIAN HIEROGLYPH O018 +1326D ; [.5814.0020.0002] # EGYPTIAN HIEROGLYPH O019 +1326E ; [.5815.0020.0002] # EGYPTIAN HIEROGLYPH O019A +1326F ; [.5816.0020.0002] # EGYPTIAN HIEROGLYPH O020 +13270 ; [.5817.0020.0002] # EGYPTIAN HIEROGLYPH O020A +13271 ; [.5818.0020.0002] # EGYPTIAN HIEROGLYPH O021 +13272 ; [.5819.0020.0002] # EGYPTIAN HIEROGLYPH O022 +13273 ; [.581A.0020.0002] # EGYPTIAN HIEROGLYPH O023 +13274 ; [.581B.0020.0002] # EGYPTIAN HIEROGLYPH O024 +13275 ; [.581C.0020.0002] # EGYPTIAN HIEROGLYPH O024A +13276 ; [.581D.0020.0002] # EGYPTIAN HIEROGLYPH O025 +13277 ; [.581E.0020.0002] # EGYPTIAN HIEROGLYPH O025A +13278 ; [.581F.0020.0002] # EGYPTIAN HIEROGLYPH O026 +13279 ; [.5820.0020.0002] # EGYPTIAN HIEROGLYPH O027 +1327A ; [.5821.0020.0002] # EGYPTIAN HIEROGLYPH O028 +1327B ; [.5822.0020.0002] # EGYPTIAN HIEROGLYPH O029 +1327C ; [.5823.0020.0002] # EGYPTIAN HIEROGLYPH O029A +1327D ; [.5824.0020.0002] # EGYPTIAN HIEROGLYPH O030 +1327E ; [.5825.0020.0002] # EGYPTIAN HIEROGLYPH O030A +1327F ; [.5826.0020.0002] # EGYPTIAN HIEROGLYPH O031 +13280 ; [.5827.0020.0002] # EGYPTIAN HIEROGLYPH O032 +13281 ; [.5828.0020.0002] # EGYPTIAN HIEROGLYPH O033 +13282 ; [.5829.0020.0002] # EGYPTIAN HIEROGLYPH O033A +13283 ; [.582A.0020.0002] # EGYPTIAN HIEROGLYPH O034 +13284 ; [.582B.0020.0002] # EGYPTIAN HIEROGLYPH O035 +13285 ; [.582C.0020.0002] # EGYPTIAN HIEROGLYPH O036 +13286 ; [.582D.0020.0002] # EGYPTIAN HIEROGLYPH O036A +13287 ; [.582E.0020.0002] # EGYPTIAN HIEROGLYPH O036B +13288 ; [.582F.0020.0002] # EGYPTIAN HIEROGLYPH O036C +13289 ; [.5830.0020.0002] # EGYPTIAN HIEROGLYPH O036D +1328A ; [.5831.0020.0002] # EGYPTIAN HIEROGLYPH O037 +1328B ; [.5832.0020.0002] # EGYPTIAN HIEROGLYPH O038 +1328C ; [.5833.0020.0002] # EGYPTIAN HIEROGLYPH O039 +1328D ; [.5834.0020.0002] # EGYPTIAN HIEROGLYPH O040 +1328E ; [.5835.0020.0002] # EGYPTIAN HIEROGLYPH O041 +1328F ; [.5836.0020.0002] # EGYPTIAN HIEROGLYPH O042 +13290 ; [.5837.0020.0002] # EGYPTIAN HIEROGLYPH O043 +13291 ; [.5838.0020.0002] # EGYPTIAN HIEROGLYPH O044 +13292 ; [.5839.0020.0002] # EGYPTIAN HIEROGLYPH O045 +13293 ; [.583A.0020.0002] # EGYPTIAN HIEROGLYPH O046 +13294 ; [.583B.0020.0002] # EGYPTIAN HIEROGLYPH O047 +13295 ; [.583C.0020.0002] # EGYPTIAN HIEROGLYPH O048 +13296 ; [.583D.0020.0002] # EGYPTIAN HIEROGLYPH O049 +13297 ; [.583E.0020.0002] # EGYPTIAN HIEROGLYPH O050 +13298 ; [.583F.0020.0002] # EGYPTIAN HIEROGLYPH O050A +13299 ; [.5840.0020.0002] # EGYPTIAN HIEROGLYPH O050B +1329A ; [.5841.0020.0002] # EGYPTIAN HIEROGLYPH O051 +1329B ; [.5842.0020.0002] # EGYPTIAN HIEROGLYPH P001 +1329C ; [.5843.0020.0002] # EGYPTIAN HIEROGLYPH P001A +1329D ; [.5844.0020.0002] # EGYPTIAN HIEROGLYPH P002 +1329E ; [.5845.0020.0002] # EGYPTIAN HIEROGLYPH P003 +1329F ; [.5846.0020.0002] # EGYPTIAN HIEROGLYPH P003A +132A0 ; [.5847.0020.0002] # EGYPTIAN HIEROGLYPH P004 +132A1 ; [.5848.0020.0002] # EGYPTIAN HIEROGLYPH P005 +132A2 ; [.5849.0020.0002] # EGYPTIAN HIEROGLYPH P006 +132A3 ; [.584A.0020.0002] # EGYPTIAN HIEROGLYPH P007 +132A4 ; [.584B.0020.0002] # EGYPTIAN HIEROGLYPH P008 +132A5 ; [.584C.0020.0002] # EGYPTIAN HIEROGLYPH P009 +132A6 ; [.584D.0020.0002] # EGYPTIAN HIEROGLYPH P010 +132A7 ; [.584E.0020.0002] # EGYPTIAN HIEROGLYPH P011 +132A8 ; [.584F.0020.0002] # EGYPTIAN HIEROGLYPH Q001 +132A9 ; [.5850.0020.0002] # EGYPTIAN HIEROGLYPH Q002 +132AA ; [.5851.0020.0002] # EGYPTIAN HIEROGLYPH Q003 +132AB ; [.5852.0020.0002] # EGYPTIAN HIEROGLYPH Q004 +132AC ; [.5853.0020.0002] # EGYPTIAN HIEROGLYPH Q005 +132AD ; [.5854.0020.0002] # EGYPTIAN HIEROGLYPH Q006 +132AE ; [.5855.0020.0002] # EGYPTIAN HIEROGLYPH Q007 +132AF ; [.5856.0020.0002] # EGYPTIAN HIEROGLYPH R001 +132B0 ; [.5857.0020.0002] # EGYPTIAN HIEROGLYPH R002 +132B1 ; [.5858.0020.0002] # EGYPTIAN HIEROGLYPH R002A +132B2 ; [.5859.0020.0002] # EGYPTIAN HIEROGLYPH R003 +132B3 ; [.585A.0020.0002] # EGYPTIAN HIEROGLYPH R003A +132B4 ; [.585B.0020.0002] # EGYPTIAN HIEROGLYPH R003B +132B5 ; [.585C.0020.0002] # EGYPTIAN HIEROGLYPH R004 +132B6 ; [.585D.0020.0002] # EGYPTIAN HIEROGLYPH R005 +132B7 ; [.585E.0020.0002] # EGYPTIAN HIEROGLYPH R006 +132B8 ; [.585F.0020.0002] # EGYPTIAN HIEROGLYPH R007 +132B9 ; [.5860.0020.0002] # EGYPTIAN HIEROGLYPH R008 +132BA ; [.5861.0020.0002] # EGYPTIAN HIEROGLYPH R009 +132BB ; [.5862.0020.0002] # EGYPTIAN HIEROGLYPH R010 +132BC ; [.5863.0020.0002] # EGYPTIAN HIEROGLYPH R010A +132BD ; [.5864.0020.0002] # EGYPTIAN HIEROGLYPH R011 +132BE ; [.5865.0020.0002] # EGYPTIAN HIEROGLYPH R012 +132BF ; [.5866.0020.0002] # EGYPTIAN HIEROGLYPH R013 +132C0 ; [.5867.0020.0002] # EGYPTIAN HIEROGLYPH R014 +132C1 ; [.5868.0020.0002] # EGYPTIAN HIEROGLYPH R015 +132C2 ; [.5869.0020.0002] # EGYPTIAN HIEROGLYPH R016 +132C3 ; [.586A.0020.0002] # EGYPTIAN HIEROGLYPH R016A +132C4 ; [.586B.0020.0002] # EGYPTIAN HIEROGLYPH R017 +132C5 ; [.586C.0020.0002] # EGYPTIAN HIEROGLYPH R018 +132C6 ; [.586D.0020.0002] # EGYPTIAN HIEROGLYPH R019 +132C7 ; [.586E.0020.0002] # EGYPTIAN HIEROGLYPH R020 +132C8 ; [.586F.0020.0002] # EGYPTIAN HIEROGLYPH R021 +132C9 ; [.5870.0020.0002] # EGYPTIAN HIEROGLYPH R022 +132CA ; [.5871.0020.0002] # EGYPTIAN HIEROGLYPH R023 +132CB ; [.5872.0020.0002] # EGYPTIAN HIEROGLYPH R024 +132CC ; [.5873.0020.0002] # EGYPTIAN HIEROGLYPH R025 +132CD ; [.5874.0020.0002] # EGYPTIAN HIEROGLYPH R026 +132CE ; [.5875.0020.0002] # EGYPTIAN HIEROGLYPH R027 +132CF ; [.5876.0020.0002] # EGYPTIAN HIEROGLYPH R028 +132D0 ; [.5877.0020.0002] # EGYPTIAN HIEROGLYPH R029 +132D1 ; [.5878.0020.0002] # EGYPTIAN HIEROGLYPH S001 +132D2 ; [.5879.0020.0002] # EGYPTIAN HIEROGLYPH S002 +132D3 ; [.587A.0020.0002] # EGYPTIAN HIEROGLYPH S002A +132D4 ; [.587B.0020.0002] # EGYPTIAN HIEROGLYPH S003 +132D5 ; [.587C.0020.0002] # EGYPTIAN HIEROGLYPH S004 +132D6 ; [.587D.0020.0002] # EGYPTIAN HIEROGLYPH S005 +132D7 ; [.587E.0020.0002] # EGYPTIAN HIEROGLYPH S006 +132D8 ; [.587F.0020.0002] # EGYPTIAN HIEROGLYPH S006A +132D9 ; [.5880.0020.0002] # EGYPTIAN HIEROGLYPH S007 +132DA ; [.5881.0020.0002] # EGYPTIAN HIEROGLYPH S008 +132DB ; [.5882.0020.0002] # EGYPTIAN HIEROGLYPH S009 +132DC ; [.5883.0020.0002] # EGYPTIAN HIEROGLYPH S010 +132DD ; [.5884.0020.0002] # EGYPTIAN HIEROGLYPH S011 +132DE ; [.5885.0020.0002] # EGYPTIAN HIEROGLYPH S012 +132DF ; [.5886.0020.0002] # EGYPTIAN HIEROGLYPH S013 +132E0 ; [.5887.0020.0002] # EGYPTIAN HIEROGLYPH S014 +132E1 ; [.5888.0020.0002] # EGYPTIAN HIEROGLYPH S014A +132E2 ; [.5889.0020.0002] # EGYPTIAN HIEROGLYPH S014B +132E3 ; [.588A.0020.0002] # EGYPTIAN HIEROGLYPH S015 +132E4 ; [.588B.0020.0002] # EGYPTIAN HIEROGLYPH S016 +132E5 ; [.588C.0020.0002] # EGYPTIAN HIEROGLYPH S017 +132E6 ; [.588D.0020.0002] # EGYPTIAN HIEROGLYPH S017A +132E7 ; [.588E.0020.0002] # EGYPTIAN HIEROGLYPH S018 +132E8 ; [.588F.0020.0002] # EGYPTIAN HIEROGLYPH S019 +132E9 ; [.5890.0020.0002] # EGYPTIAN HIEROGLYPH S020 +132EA ; [.5891.0020.0002] # EGYPTIAN HIEROGLYPH S021 +132EB ; [.5892.0020.0002] # EGYPTIAN HIEROGLYPH S022 +132EC ; [.5893.0020.0002] # EGYPTIAN HIEROGLYPH S023 +132ED ; [.5894.0020.0002] # EGYPTIAN HIEROGLYPH S024 +132EE ; [.5895.0020.0002] # EGYPTIAN HIEROGLYPH S025 +132EF ; [.5896.0020.0002] # EGYPTIAN HIEROGLYPH S026 +132F0 ; [.5897.0020.0002] # EGYPTIAN HIEROGLYPH S026A +132F1 ; [.5898.0020.0002] # EGYPTIAN HIEROGLYPH S026B +132F2 ; [.5899.0020.0002] # EGYPTIAN HIEROGLYPH S027 +132F3 ; [.589A.0020.0002] # EGYPTIAN HIEROGLYPH S028 +132F4 ; [.589B.0020.0002] # EGYPTIAN HIEROGLYPH S029 +132F5 ; [.589C.0020.0002] # EGYPTIAN HIEROGLYPH S030 +132F6 ; [.589D.0020.0002] # EGYPTIAN HIEROGLYPH S031 +132F7 ; [.589E.0020.0002] # EGYPTIAN HIEROGLYPH S032 +132F8 ; [.589F.0020.0002] # EGYPTIAN HIEROGLYPH S033 +132F9 ; [.58A0.0020.0002] # EGYPTIAN HIEROGLYPH S034 +132FA ; [.58A1.0020.0002] # EGYPTIAN HIEROGLYPH S035 +132FB ; [.58A2.0020.0002] # EGYPTIAN HIEROGLYPH S035A +132FC ; [.58A3.0020.0002] # EGYPTIAN HIEROGLYPH S036 +132FD ; [.58A4.0020.0002] # EGYPTIAN HIEROGLYPH S037 +132FE ; [.58A5.0020.0002] # EGYPTIAN HIEROGLYPH S038 +132FF ; [.58A6.0020.0002] # EGYPTIAN HIEROGLYPH S039 +13300 ; [.58A7.0020.0002] # EGYPTIAN HIEROGLYPH S040 +13301 ; [.58A8.0020.0002] # EGYPTIAN HIEROGLYPH S041 +13302 ; [.58A9.0020.0002] # EGYPTIAN HIEROGLYPH S042 +13303 ; [.58AA.0020.0002] # EGYPTIAN HIEROGLYPH S043 +13304 ; [.58AB.0020.0002] # EGYPTIAN HIEROGLYPH S044 +13305 ; [.58AC.0020.0002] # EGYPTIAN HIEROGLYPH S045 +13306 ; [.58AD.0020.0002] # EGYPTIAN HIEROGLYPH S046 +13307 ; [.58AE.0020.0002] # EGYPTIAN HIEROGLYPH T001 +13308 ; [.58AF.0020.0002] # EGYPTIAN HIEROGLYPH T002 +13309 ; [.58B0.0020.0002] # EGYPTIAN HIEROGLYPH T003 +1330A ; [.58B1.0020.0002] # EGYPTIAN HIEROGLYPH T003A +1330B ; [.58B2.0020.0002] # EGYPTIAN HIEROGLYPH T004 +1330C ; [.58B3.0020.0002] # EGYPTIAN HIEROGLYPH T005 +1330D ; [.58B4.0020.0002] # EGYPTIAN HIEROGLYPH T006 +1330E ; [.58B5.0020.0002] # EGYPTIAN HIEROGLYPH T007 +1330F ; [.58B6.0020.0002] # EGYPTIAN HIEROGLYPH T007A +13310 ; [.58B7.0020.0002] # EGYPTIAN HIEROGLYPH T008 +13311 ; [.58B8.0020.0002] # EGYPTIAN HIEROGLYPH T008A +13312 ; [.58B9.0020.0002] # EGYPTIAN HIEROGLYPH T009 +13313 ; [.58BA.0020.0002] # EGYPTIAN HIEROGLYPH T009A +13314 ; [.58BB.0020.0002] # EGYPTIAN HIEROGLYPH T010 +13315 ; [.58BC.0020.0002] # EGYPTIAN HIEROGLYPH T011 +13316 ; [.58BD.0020.0002] # EGYPTIAN HIEROGLYPH T011A +13317 ; [.58BE.0020.0002] # EGYPTIAN HIEROGLYPH T012 +13318 ; [.58BF.0020.0002] # EGYPTIAN HIEROGLYPH T013 +13319 ; [.58C0.0020.0002] # EGYPTIAN HIEROGLYPH T014 +1331A ; [.58C1.0020.0002] # EGYPTIAN HIEROGLYPH T015 +1331B ; [.58C2.0020.0002] # EGYPTIAN HIEROGLYPH T016 +1331C ; [.58C3.0020.0002] # EGYPTIAN HIEROGLYPH T016A +1331D ; [.58C4.0020.0002] # EGYPTIAN HIEROGLYPH T017 +1331E ; [.58C5.0020.0002] # EGYPTIAN HIEROGLYPH T018 +1331F ; [.58C6.0020.0002] # EGYPTIAN HIEROGLYPH T019 +13320 ; [.58C7.0020.0002] # EGYPTIAN HIEROGLYPH T020 +13321 ; [.58C8.0020.0002] # EGYPTIAN HIEROGLYPH T021 +13322 ; [.58C9.0020.0002] # EGYPTIAN HIEROGLYPH T022 +13323 ; [.58CA.0020.0002] # EGYPTIAN HIEROGLYPH T023 +13324 ; [.58CB.0020.0002] # EGYPTIAN HIEROGLYPH T024 +13325 ; [.58CC.0020.0002] # EGYPTIAN HIEROGLYPH T025 +13326 ; [.58CD.0020.0002] # EGYPTIAN HIEROGLYPH T026 +13327 ; [.58CE.0020.0002] # EGYPTIAN HIEROGLYPH T027 +13328 ; [.58CF.0020.0002] # EGYPTIAN HIEROGLYPH T028 +13329 ; [.58D0.0020.0002] # EGYPTIAN HIEROGLYPH T029 +1332A ; [.58D1.0020.0002] # EGYPTIAN HIEROGLYPH T030 +1332B ; [.58D2.0020.0002] # EGYPTIAN HIEROGLYPH T031 +1332C ; [.58D3.0020.0002] # EGYPTIAN HIEROGLYPH T032 +1332D ; [.58D4.0020.0002] # EGYPTIAN HIEROGLYPH T032A +1332E ; [.58D5.0020.0002] # EGYPTIAN HIEROGLYPH T033 +1332F ; [.58D6.0020.0002] # EGYPTIAN HIEROGLYPH T033A +13330 ; [.58D7.0020.0002] # EGYPTIAN HIEROGLYPH T034 +13331 ; [.58D8.0020.0002] # EGYPTIAN HIEROGLYPH T035 +13332 ; [.58D9.0020.0002] # EGYPTIAN HIEROGLYPH T036 +13333 ; [.58DA.0020.0002] # EGYPTIAN HIEROGLYPH U001 +13334 ; [.58DB.0020.0002] # EGYPTIAN HIEROGLYPH U002 +13335 ; [.58DC.0020.0002] # EGYPTIAN HIEROGLYPH U003 +13336 ; [.58DD.0020.0002] # EGYPTIAN HIEROGLYPH U004 +13337 ; [.58DE.0020.0002] # EGYPTIAN HIEROGLYPH U005 +13338 ; [.58DF.0020.0002] # EGYPTIAN HIEROGLYPH U006 +13339 ; [.58E0.0020.0002] # EGYPTIAN HIEROGLYPH U006A +1333A ; [.58E1.0020.0002] # EGYPTIAN HIEROGLYPH U006B +1333B ; [.58E2.0020.0002] # EGYPTIAN HIEROGLYPH U007 +1333C ; [.58E3.0020.0002] # EGYPTIAN HIEROGLYPH U008 +1333D ; [.58E4.0020.0002] # EGYPTIAN HIEROGLYPH U009 +1333E ; [.58E5.0020.0002] # EGYPTIAN HIEROGLYPH U010 +1333F ; [.58E6.0020.0002] # EGYPTIAN HIEROGLYPH U011 +13340 ; [.58E7.0020.0002] # EGYPTIAN HIEROGLYPH U012 +13341 ; [.58E8.0020.0002] # EGYPTIAN HIEROGLYPH U013 +13342 ; [.58E9.0020.0002] # EGYPTIAN HIEROGLYPH U014 +13343 ; [.58EA.0020.0002] # EGYPTIAN HIEROGLYPH U015 +13344 ; [.58EB.0020.0002] # EGYPTIAN HIEROGLYPH U016 +13345 ; [.58EC.0020.0002] # EGYPTIAN HIEROGLYPH U017 +13346 ; [.58ED.0020.0002] # EGYPTIAN HIEROGLYPH U018 +13347 ; [.58EE.0020.0002] # EGYPTIAN HIEROGLYPH U019 +13348 ; [.58EF.0020.0002] # EGYPTIAN HIEROGLYPH U020 +13349 ; [.58F0.0020.0002] # EGYPTIAN HIEROGLYPH U021 +1334A ; [.58F1.0020.0002] # EGYPTIAN HIEROGLYPH U022 +1334B ; [.58F2.0020.0002] # EGYPTIAN HIEROGLYPH U023 +1334C ; [.58F3.0020.0002] # EGYPTIAN HIEROGLYPH U023A +1334D ; [.58F4.0020.0002] # EGYPTIAN HIEROGLYPH U024 +1334E ; [.58F5.0020.0002] # EGYPTIAN HIEROGLYPH U025 +1334F ; [.58F6.0020.0002] # EGYPTIAN HIEROGLYPH U026 +13350 ; [.58F7.0020.0002] # EGYPTIAN HIEROGLYPH U027 +13351 ; [.58F8.0020.0002] # EGYPTIAN HIEROGLYPH U028 +13352 ; [.58F9.0020.0002] # EGYPTIAN HIEROGLYPH U029 +13353 ; [.58FA.0020.0002] # EGYPTIAN HIEROGLYPH U029A +13354 ; [.58FB.0020.0002] # EGYPTIAN HIEROGLYPH U030 +13355 ; [.58FC.0020.0002] # EGYPTIAN HIEROGLYPH U031 +13356 ; [.58FD.0020.0002] # EGYPTIAN HIEROGLYPH U032 +13357 ; [.58FE.0020.0002] # EGYPTIAN HIEROGLYPH U032A +13358 ; [.58FF.0020.0002] # EGYPTIAN HIEROGLYPH U033 +13359 ; [.5900.0020.0002] # EGYPTIAN HIEROGLYPH U034 +1335A ; [.5901.0020.0002] # EGYPTIAN HIEROGLYPH U035 +1335B ; [.5902.0020.0002] # EGYPTIAN HIEROGLYPH U036 +1335C ; [.5903.0020.0002] # EGYPTIAN HIEROGLYPH U037 +1335D ; [.5904.0020.0002] # EGYPTIAN HIEROGLYPH U038 +1335E ; [.5905.0020.0002] # EGYPTIAN HIEROGLYPH U039 +1335F ; [.5906.0020.0002] # EGYPTIAN HIEROGLYPH U040 +13360 ; [.5907.0020.0002] # EGYPTIAN HIEROGLYPH U041 +13361 ; [.5908.0020.0002] # EGYPTIAN HIEROGLYPH U042 +13362 ; [.5909.0020.0002] # EGYPTIAN HIEROGLYPH V001 +13363 ; [.590A.0020.0002] # EGYPTIAN HIEROGLYPH V001A +13364 ; [.590B.0020.0002] # EGYPTIAN HIEROGLYPH V001B +13365 ; [.590C.0020.0002] # EGYPTIAN HIEROGLYPH V001C +13366 ; [.590D.0020.0002] # EGYPTIAN HIEROGLYPH V001D +13367 ; [.590E.0020.0002] # EGYPTIAN HIEROGLYPH V001E +13368 ; [.590F.0020.0002] # EGYPTIAN HIEROGLYPH V001F +13369 ; [.5910.0020.0002] # EGYPTIAN HIEROGLYPH V001G +1336A ; [.5911.0020.0002] # EGYPTIAN HIEROGLYPH V001H +1336B ; [.5912.0020.0002] # EGYPTIAN HIEROGLYPH V001I +1336C ; [.5913.0020.0002] # EGYPTIAN HIEROGLYPH V002 +1336D ; [.5914.0020.0002] # EGYPTIAN HIEROGLYPH V002A +1336E ; [.5915.0020.0002] # EGYPTIAN HIEROGLYPH V003 +1336F ; [.5916.0020.0002] # EGYPTIAN HIEROGLYPH V004 +13370 ; [.5917.0020.0002] # EGYPTIAN HIEROGLYPH V005 +13371 ; [.5918.0020.0002] # EGYPTIAN HIEROGLYPH V006 +13372 ; [.5919.0020.0002] # EGYPTIAN HIEROGLYPH V007 +13373 ; [.591A.0020.0002] # EGYPTIAN HIEROGLYPH V007A +13374 ; [.591B.0020.0002] # EGYPTIAN HIEROGLYPH V007B +13375 ; [.591C.0020.0002] # EGYPTIAN HIEROGLYPH V008 +13376 ; [.591D.0020.0002] # EGYPTIAN HIEROGLYPH V009 +13377 ; [.591E.0020.0002] # EGYPTIAN HIEROGLYPH V010 +13378 ; [.591F.0020.0002] # EGYPTIAN HIEROGLYPH V011 +13379 ; [.5920.0020.0002] # EGYPTIAN HIEROGLYPH V011A +1337A ; [.5921.0020.0002] # EGYPTIAN HIEROGLYPH V011B +1337B ; [.5922.0020.0002] # EGYPTIAN HIEROGLYPH V011C +1337C ; [.5923.0020.0002] # EGYPTIAN HIEROGLYPH V012 +1337D ; [.5924.0020.0002] # EGYPTIAN HIEROGLYPH V012A +1337E ; [.5925.0020.0002] # EGYPTIAN HIEROGLYPH V012B +1337F ; [.5926.0020.0002] # EGYPTIAN HIEROGLYPH V013 +13380 ; [.5927.0020.0002] # EGYPTIAN HIEROGLYPH V014 +13381 ; [.5928.0020.0002] # EGYPTIAN HIEROGLYPH V015 +13382 ; [.5929.0020.0002] # EGYPTIAN HIEROGLYPH V016 +13383 ; [.592A.0020.0002] # EGYPTIAN HIEROGLYPH V017 +13384 ; [.592B.0020.0002] # EGYPTIAN HIEROGLYPH V018 +13385 ; [.592C.0020.0002] # EGYPTIAN HIEROGLYPH V019 +13386 ; [.592D.0020.0002] # EGYPTIAN HIEROGLYPH V020 +13387 ; [.592E.0020.0002] # EGYPTIAN HIEROGLYPH V020A +13388 ; [.592F.0020.0002] # EGYPTIAN HIEROGLYPH V020B +13389 ; [.5930.0020.0002] # EGYPTIAN HIEROGLYPH V020C +1338A ; [.5931.0020.0002] # EGYPTIAN HIEROGLYPH V020D +1338B ; [.5932.0020.0002] # EGYPTIAN HIEROGLYPH V020E +1338C ; [.5933.0020.0002] # EGYPTIAN HIEROGLYPH V020F +1338D ; [.5934.0020.0002] # EGYPTIAN HIEROGLYPH V020G +1338E ; [.5935.0020.0002] # EGYPTIAN HIEROGLYPH V020H +1338F ; [.5936.0020.0002] # EGYPTIAN HIEROGLYPH V020I +13390 ; [.5937.0020.0002] # EGYPTIAN HIEROGLYPH V020J +13391 ; [.5938.0020.0002] # EGYPTIAN HIEROGLYPH V020K +13392 ; [.5939.0020.0002] # EGYPTIAN HIEROGLYPH V020L +13393 ; [.593A.0020.0002] # EGYPTIAN HIEROGLYPH V021 +13394 ; [.593B.0020.0002] # EGYPTIAN HIEROGLYPH V022 +13395 ; [.593C.0020.0002] # EGYPTIAN HIEROGLYPH V023 +13396 ; [.593D.0020.0002] # EGYPTIAN HIEROGLYPH V023A +13397 ; [.593E.0020.0002] # EGYPTIAN HIEROGLYPH V024 +13398 ; [.593F.0020.0002] # EGYPTIAN HIEROGLYPH V025 +13399 ; [.5940.0020.0002] # EGYPTIAN HIEROGLYPH V026 +1339A ; [.5941.0020.0002] # EGYPTIAN HIEROGLYPH V027 +1339B ; [.5942.0020.0002] # EGYPTIAN HIEROGLYPH V028 +1339C ; [.5943.0020.0002] # EGYPTIAN HIEROGLYPH V028A +1339D ; [.5944.0020.0002] # EGYPTIAN HIEROGLYPH V029 +1339E ; [.5945.0020.0002] # EGYPTIAN HIEROGLYPH V029A +1339F ; [.5946.0020.0002] # EGYPTIAN HIEROGLYPH V030 +133A0 ; [.5947.0020.0002] # EGYPTIAN HIEROGLYPH V030A +133A1 ; [.5948.0020.0002] # EGYPTIAN HIEROGLYPH V031 +133A2 ; [.5949.0020.0002] # EGYPTIAN HIEROGLYPH V031A +133A3 ; [.594A.0020.0002] # EGYPTIAN HIEROGLYPH V032 +133A4 ; [.594B.0020.0002] # EGYPTIAN HIEROGLYPH V033 +133A5 ; [.594C.0020.0002] # EGYPTIAN HIEROGLYPH V033A +133A6 ; [.594D.0020.0002] # EGYPTIAN HIEROGLYPH V034 +133A7 ; [.594E.0020.0002] # EGYPTIAN HIEROGLYPH V035 +133A8 ; [.594F.0020.0002] # EGYPTIAN HIEROGLYPH V036 +133A9 ; [.5950.0020.0002] # EGYPTIAN HIEROGLYPH V037 +133AA ; [.5951.0020.0002] # EGYPTIAN HIEROGLYPH V037A +133AB ; [.5952.0020.0002] # EGYPTIAN HIEROGLYPH V038 +133AC ; [.5953.0020.0002] # EGYPTIAN HIEROGLYPH V039 +133AD ; [.5954.0020.0002] # EGYPTIAN HIEROGLYPH V040 +133AE ; [.5955.0020.0002] # EGYPTIAN HIEROGLYPH V040A +133AF ; [.5956.0020.0002] # EGYPTIAN HIEROGLYPH W001 +133B0 ; [.5957.0020.0002] # EGYPTIAN HIEROGLYPH W002 +133B1 ; [.5958.0020.0002] # EGYPTIAN HIEROGLYPH W003 +133B2 ; [.5959.0020.0002] # EGYPTIAN HIEROGLYPH W003A +133B3 ; [.595A.0020.0002] # EGYPTIAN HIEROGLYPH W004 +133B4 ; [.595B.0020.0002] # EGYPTIAN HIEROGLYPH W005 +133B5 ; [.595C.0020.0002] # EGYPTIAN HIEROGLYPH W006 +133B6 ; [.595D.0020.0002] # EGYPTIAN HIEROGLYPH W007 +133B7 ; [.595E.0020.0002] # EGYPTIAN HIEROGLYPH W008 +133B8 ; [.595F.0020.0002] # EGYPTIAN HIEROGLYPH W009 +133B9 ; [.5960.0020.0002] # EGYPTIAN HIEROGLYPH W009A +133BA ; [.5961.0020.0002] # EGYPTIAN HIEROGLYPH W010 +133BB ; [.5962.0020.0002] # EGYPTIAN HIEROGLYPH W010A +133BC ; [.5963.0020.0002] # EGYPTIAN HIEROGLYPH W011 +133BD ; [.5964.0020.0002] # EGYPTIAN HIEROGLYPH W012 +133BE ; [.5965.0020.0002] # EGYPTIAN HIEROGLYPH W013 +133BF ; [.5966.0020.0002] # EGYPTIAN HIEROGLYPH W014 +133C0 ; [.5967.0020.0002] # EGYPTIAN HIEROGLYPH W014A +133C1 ; [.5968.0020.0002] # EGYPTIAN HIEROGLYPH W015 +133C2 ; [.5969.0020.0002] # EGYPTIAN HIEROGLYPH W016 +133C3 ; [.596A.0020.0002] # EGYPTIAN HIEROGLYPH W017 +133C4 ; [.596B.0020.0002] # EGYPTIAN HIEROGLYPH W017A +133C5 ; [.596C.0020.0002] # EGYPTIAN HIEROGLYPH W018 +133C6 ; [.596D.0020.0002] # EGYPTIAN HIEROGLYPH W018A +133C7 ; [.596E.0020.0002] # EGYPTIAN HIEROGLYPH W019 +133C8 ; [.596F.0020.0002] # EGYPTIAN HIEROGLYPH W020 +133C9 ; [.5970.0020.0002] # EGYPTIAN HIEROGLYPH W021 +133CA ; [.5971.0020.0002] # EGYPTIAN HIEROGLYPH W022 +133CB ; [.5972.0020.0002] # EGYPTIAN HIEROGLYPH W023 +133CC ; [.5973.0020.0002] # EGYPTIAN HIEROGLYPH W024 +133CD ; [.5974.0020.0002] # EGYPTIAN HIEROGLYPH W024A +133CE ; [.5975.0020.0002] # EGYPTIAN HIEROGLYPH W025 +133CF ; [.5976.0020.0002] # EGYPTIAN HIEROGLYPH X001 +133D0 ; [.5977.0020.0002] # EGYPTIAN HIEROGLYPH X002 +133D1 ; [.5978.0020.0002] # EGYPTIAN HIEROGLYPH X003 +133D2 ; [.5979.0020.0002] # EGYPTIAN HIEROGLYPH X004 +133D3 ; [.597A.0020.0002] # EGYPTIAN HIEROGLYPH X004A +133D4 ; [.597B.0020.0002] # EGYPTIAN HIEROGLYPH X004B +133D5 ; [.597C.0020.0002] # EGYPTIAN HIEROGLYPH X005 +133D6 ; [.597D.0020.0002] # EGYPTIAN HIEROGLYPH X006 +133D7 ; [.597E.0020.0002] # EGYPTIAN HIEROGLYPH X006A +133D8 ; [.597F.0020.0002] # EGYPTIAN HIEROGLYPH X007 +133D9 ; [.5980.0020.0002] # EGYPTIAN HIEROGLYPH X008 +133DA ; [.5981.0020.0002] # EGYPTIAN HIEROGLYPH X008A +133DB ; [.5982.0020.0002] # EGYPTIAN HIEROGLYPH Y001 +133DC ; [.5983.0020.0002] # EGYPTIAN HIEROGLYPH Y001A +133DD ; [.5984.0020.0002] # EGYPTIAN HIEROGLYPH Y002 +133DE ; [.5985.0020.0002] # EGYPTIAN HIEROGLYPH Y003 +133DF ; [.5986.0020.0002] # EGYPTIAN HIEROGLYPH Y004 +133E0 ; [.5987.0020.0002] # EGYPTIAN HIEROGLYPH Y005 +133E1 ; [.5988.0020.0002] # EGYPTIAN HIEROGLYPH Y006 +133E2 ; [.5989.0020.0002] # EGYPTIAN HIEROGLYPH Y007 +133E3 ; [.598A.0020.0002] # EGYPTIAN HIEROGLYPH Y008 +133E4 ; [.598B.0020.0002] # EGYPTIAN HIEROGLYPH Z001 +133E5 ; [.598C.0020.0002] # EGYPTIAN HIEROGLYPH Z002 +133E6 ; [.598D.0020.0002] # EGYPTIAN HIEROGLYPH Z002A +133E7 ; [.598E.0020.0002] # EGYPTIAN HIEROGLYPH Z002B +133E8 ; [.598F.0020.0002] # EGYPTIAN HIEROGLYPH Z002C +133E9 ; [.5990.0020.0002] # EGYPTIAN HIEROGLYPH Z002D +133EA ; [.5991.0020.0002] # EGYPTIAN HIEROGLYPH Z003 +133EB ; [.5992.0020.0002] # EGYPTIAN HIEROGLYPH Z003A +133EC ; [.5993.0020.0002] # EGYPTIAN HIEROGLYPH Z003B +133ED ; [.5994.0020.0002] # EGYPTIAN HIEROGLYPH Z004 +133EE ; [.5995.0020.0002] # EGYPTIAN HIEROGLYPH Z004A +133EF ; [.5996.0020.0002] # EGYPTIAN HIEROGLYPH Z005 +133F0 ; [.5997.0020.0002] # EGYPTIAN HIEROGLYPH Z005A +133F1 ; [.5998.0020.0002] # EGYPTIAN HIEROGLYPH Z006 +133F2 ; [.5999.0020.0002] # EGYPTIAN HIEROGLYPH Z007 +133F3 ; [.599A.0020.0002] # EGYPTIAN HIEROGLYPH Z008 +133F4 ; [.599B.0020.0002] # EGYPTIAN HIEROGLYPH Z009 +133F5 ; [.599C.0020.0002] # EGYPTIAN HIEROGLYPH Z010 +133F6 ; [.599D.0020.0002] # EGYPTIAN HIEROGLYPH Z011 +133F7 ; [.599E.0020.0002] # EGYPTIAN HIEROGLYPH Z012 +133F8 ; [.599F.0020.0002] # EGYPTIAN HIEROGLYPH Z013 +133F9 ; [.59A0.0020.0002] # EGYPTIAN HIEROGLYPH Z014 +133FA ; [.59A1.0020.0002] # EGYPTIAN HIEROGLYPH Z015 +133FB ; [.59A2.0020.0002] # EGYPTIAN HIEROGLYPH Z015A +133FC ; [.59A3.0020.0002] # EGYPTIAN HIEROGLYPH Z015B +133FD ; [.59A4.0020.0002] # EGYPTIAN HIEROGLYPH Z015C +133FE ; [.59A5.0020.0002] # EGYPTIAN HIEROGLYPH Z015D +133FF ; [.59A6.0020.0002] # EGYPTIAN HIEROGLYPH Z015E +13400 ; [.59A7.0020.0002] # EGYPTIAN HIEROGLYPH Z015F +13401 ; [.59A8.0020.0002] # EGYPTIAN HIEROGLYPH Z015G +13402 ; [.59A9.0020.0002] # EGYPTIAN HIEROGLYPH Z015H +13403 ; [.59AA.0020.0002] # EGYPTIAN HIEROGLYPH Z015I +13404 ; [.59AB.0020.0002] # EGYPTIAN HIEROGLYPH Z016 +13405 ; [.59AC.0020.0002] # EGYPTIAN HIEROGLYPH Z016A +13406 ; [.59AD.0020.0002] # EGYPTIAN HIEROGLYPH Z016B +13407 ; [.59AE.0020.0002] # EGYPTIAN HIEROGLYPH Z016C +13408 ; [.59AF.0020.0002] # EGYPTIAN HIEROGLYPH Z016D +13409 ; [.59B0.0020.0002] # EGYPTIAN HIEROGLYPH Z016E +1340A ; [.59B1.0020.0002] # EGYPTIAN HIEROGLYPH Z016F +1340B ; [.59B2.0020.0002] # EGYPTIAN HIEROGLYPH Z016G +1340C ; [.59B3.0020.0002] # EGYPTIAN HIEROGLYPH Z016H +1340D ; [.59B4.0020.0002] # EGYPTIAN HIEROGLYPH AA001 +1340E ; [.59B5.0020.0002] # EGYPTIAN HIEROGLYPH AA002 +1340F ; [.59B6.0020.0002] # EGYPTIAN HIEROGLYPH AA003 +13410 ; [.59B7.0020.0002] # EGYPTIAN HIEROGLYPH AA004 +13411 ; [.59B8.0020.0002] # EGYPTIAN HIEROGLYPH AA005 +13412 ; [.59B9.0020.0002] # EGYPTIAN HIEROGLYPH AA006 +13413 ; [.59BA.0020.0002] # EGYPTIAN HIEROGLYPH AA007 +13414 ; [.59BB.0020.0002] # EGYPTIAN HIEROGLYPH AA007A +13415 ; [.59BC.0020.0002] # EGYPTIAN HIEROGLYPH AA007B +13416 ; [.59BD.0020.0002] # EGYPTIAN HIEROGLYPH AA008 +13417 ; [.59BE.0020.0002] # EGYPTIAN HIEROGLYPH AA009 +13418 ; [.59BF.0020.0002] # EGYPTIAN HIEROGLYPH AA010 +13419 ; [.59C0.0020.0002] # EGYPTIAN HIEROGLYPH AA011 +1341A ; [.59C1.0020.0002] # EGYPTIAN HIEROGLYPH AA012 +1341B ; [.59C2.0020.0002] # EGYPTIAN HIEROGLYPH AA013 +1341C ; [.59C3.0020.0002] # EGYPTIAN HIEROGLYPH AA014 +1341D ; [.59C4.0020.0002] # EGYPTIAN HIEROGLYPH AA015 +1341E ; [.59C5.0020.0002] # EGYPTIAN HIEROGLYPH AA016 +1341F ; [.59C6.0020.0002] # EGYPTIAN HIEROGLYPH AA017 +13420 ; [.59C7.0020.0002] # EGYPTIAN HIEROGLYPH AA018 +13421 ; [.59C8.0020.0002] # EGYPTIAN HIEROGLYPH AA019 +13422 ; [.59C9.0020.0002] # EGYPTIAN HIEROGLYPH AA020 +13423 ; [.59CA.0020.0002] # EGYPTIAN HIEROGLYPH AA021 +13424 ; [.59CB.0020.0002] # EGYPTIAN HIEROGLYPH AA022 +13425 ; [.59CC.0020.0002] # EGYPTIAN HIEROGLYPH AA023 +13426 ; [.59CD.0020.0002] # EGYPTIAN HIEROGLYPH AA024 +13427 ; [.59CE.0020.0002] # EGYPTIAN HIEROGLYPH AA025 +13428 ; [.59CF.0020.0002] # EGYPTIAN HIEROGLYPH AA026 +13429 ; [.59D0.0020.0002] # EGYPTIAN HIEROGLYPH AA027 +1342A ; [.59D1.0020.0002] # EGYPTIAN HIEROGLYPH AA028 +1342B ; [.59D2.0020.0002] # EGYPTIAN HIEROGLYPH AA029 +1342C ; [.59D3.0020.0002] # EGYPTIAN HIEROGLYPH AA030 +1342D ; [.59D4.0020.0002] # EGYPTIAN HIEROGLYPH AA031 +1342E ; [.59D5.0020.0002] # EGYPTIAN HIEROGLYPH AA032 +109A0 ; [.59D6.0020.0002] # MEROITIC CURSIVE LETTER A +10980 ; [.59D6.0020.0004][.0000.0118.0004] # MEROITIC HIEROGLYPHIC LETTER A +109A1 ; [.59D7.0020.0002] # MEROITIC CURSIVE LETTER E +10981 ; [.59D7.0020.0004][.0000.0118.0004] # MEROITIC HIEROGLYPHIC LETTER E +109A2 ; [.59D8.0020.0002] # MEROITIC CURSIVE LETTER I +10982 ; [.59D8.0020.0004][.0000.0118.0004] # MEROITIC HIEROGLYPHIC LETTER I +109A3 ; [.59D9.0020.0002] # MEROITIC CURSIVE LETTER O +10983 ; [.59D9.0020.0004][.0000.0118.0004] # MEROITIC HIEROGLYPHIC LETTER O +109A4 ; [.59DA.0020.0002] # MEROITIC CURSIVE LETTER YA +10984 ; [.59DA.0020.0004][.0000.0118.0004] # MEROITIC HIEROGLYPHIC LETTER YA +109A5 ; [.59DB.0020.0002] # MEROITIC CURSIVE LETTER WA +10985 ; [.59DB.0020.0004][.0000.0118.0004] # MEROITIC HIEROGLYPHIC LETTER WA +109A6 ; [.59DC.0020.0002] # MEROITIC CURSIVE LETTER BA +10986 ; [.59DC.0020.0004][.0000.0118.0004] # MEROITIC HIEROGLYPHIC LETTER BA +10987 ; [.59DC.0020.0004][.0000.0119.0004] # MEROITIC HIEROGLYPHIC LETTER BA-2 +109A7 ; [.59DD.0020.0002] # MEROITIC CURSIVE LETTER PA +10988 ; [.59DD.0020.0004][.0000.0118.0004] # MEROITIC HIEROGLYPHIC LETTER PA +109A8 ; [.59DE.0020.0002] # MEROITIC CURSIVE LETTER MA +10989 ; [.59DE.0020.0004][.0000.0118.0004] # MEROITIC HIEROGLYPHIC LETTER MA +109A9 ; [.59DF.0020.0002] # MEROITIC CURSIVE LETTER NA +1098A ; [.59DF.0020.0004][.0000.0118.0004] # MEROITIC HIEROGLYPHIC LETTER NA +1098B ; [.59DF.0020.0004][.0000.0119.0004] # MEROITIC HIEROGLYPHIC LETTER NA-2 +109AA ; [.59E0.0020.0002] # MEROITIC CURSIVE LETTER NE +1098C ; [.59E0.0020.0004][.0000.0118.0004] # MEROITIC HIEROGLYPHIC LETTER NE +1098D ; [.59E0.0020.0004][.0000.0119.0004] # MEROITIC HIEROGLYPHIC LETTER NE-2 +109AB ; [.59E1.0020.0002] # MEROITIC CURSIVE LETTER RA +1098E ; [.59E1.0020.0004][.0000.0118.0004] # MEROITIC HIEROGLYPHIC LETTER RA +1098F ; [.59E1.0020.0004][.0000.0119.0004] # MEROITIC HIEROGLYPHIC LETTER RA-2 +109AC ; [.59E2.0020.0002] # MEROITIC CURSIVE LETTER LA +10990 ; [.59E2.0020.0004][.0000.0118.0004] # MEROITIC HIEROGLYPHIC LETTER LA +109AD ; [.59E3.0020.0002] # MEROITIC CURSIVE LETTER KHA +10991 ; [.59E3.0020.0004][.0000.0118.0004] # MEROITIC HIEROGLYPHIC LETTER KHA +109AE ; [.59E4.0020.0002] # MEROITIC CURSIVE LETTER HHA +10992 ; [.59E4.0020.0004][.0000.0118.0004] # MEROITIC HIEROGLYPHIC LETTER HHA +109AF ; [.59E5.0020.0002] # MEROITIC CURSIVE LETTER SA +109B0 ; [.59E5.0020.0004][.0000.0118.0004] # MEROITIC CURSIVE LETTER ARCHAIC SA +10993 ; [.59E5.0020.0004][.0000.0119.0004] # MEROITIC HIEROGLYPHIC LETTER SA +10994 ; [.59E5.0020.0004][.0000.011A.0004] # MEROITIC HIEROGLYPHIC LETTER SA-2 +109B1 ; [.59E6.0020.0002] # MEROITIC CURSIVE LETTER SE +10995 ; [.59E6.0020.0004][.0000.0118.0004] # MEROITIC HIEROGLYPHIC LETTER SE +109B2 ; [.59E7.0020.0002] # MEROITIC CURSIVE LETTER KA +10996 ; [.59E7.0020.0004][.0000.0118.0004] # MEROITIC HIEROGLYPHIC LETTER KA +109B3 ; [.59E8.0020.0002] # MEROITIC CURSIVE LETTER QA +10997 ; [.59E8.0020.0004][.0000.0118.0004] # MEROITIC HIEROGLYPHIC LETTER QA +109B4 ; [.59E9.0020.0002] # MEROITIC CURSIVE LETTER TA +10998 ; [.59E9.0020.0004][.0000.0118.0004] # MEROITIC HIEROGLYPHIC LETTER TA +10999 ; [.59E9.0020.0004][.0000.0119.0004] # MEROITIC HIEROGLYPHIC LETTER TA-2 +109B5 ; [.59EA.0020.0002] # MEROITIC CURSIVE LETTER TE +1099A ; [.59EA.0020.0004][.0000.0118.0004] # MEROITIC HIEROGLYPHIC LETTER TE +1099B ; [.59EA.0020.0004][.0000.0119.0004] # MEROITIC HIEROGLYPHIC LETTER TE-2 +109B6 ; [.59EB.0020.0002] # MEROITIC CURSIVE LETTER TO +1099C ; [.59EB.0020.0004][.0000.0118.0004] # MEROITIC HIEROGLYPHIC LETTER TO +109B7 ; [.59EC.0020.0002] # MEROITIC CURSIVE LETTER DA +1099D ; [.59EC.0020.0004][.0000.0118.0004] # MEROITIC HIEROGLYPHIC LETTER DA +109BE ; [.59ED.0020.0002] # MEROITIC CURSIVE LOGOGRAM RMT +109BF ; [.59EE.0020.0002] # MEROITIC CURSIVE LOGOGRAM IMN +1099E ; [.59EF.0020.0002] # MEROITIC HIEROGLYPHIC SYMBOL VIDJ +1099F ; [.59F0.0020.0002] # MEROITIC HIEROGLYPHIC SYMBOL VIDJ-2 +14400 ; [.59F1.0020.0002] # ANATOLIAN HIEROGLYPH A001 +14401 ; [.59F2.0020.0002] # ANATOLIAN HIEROGLYPH A002 +14402 ; [.59F3.0020.0002] # ANATOLIAN HIEROGLYPH A003 +14403 ; [.59F4.0020.0002] # ANATOLIAN HIEROGLYPH A004 +14404 ; [.59F5.0020.0002] # ANATOLIAN HIEROGLYPH A005 +14405 ; [.59F6.0020.0002] # ANATOLIAN HIEROGLYPH A006 +14406 ; [.59F7.0020.0002] # ANATOLIAN HIEROGLYPH A007 +14407 ; [.59F8.0020.0002] # ANATOLIAN HIEROGLYPH A008 +14408 ; [.59F9.0020.0002] # ANATOLIAN HIEROGLYPH A009 +14409 ; [.59FA.0020.0002] # ANATOLIAN HIEROGLYPH A010 +1440A ; [.59FB.0020.0002] # ANATOLIAN HIEROGLYPH A010A +1440B ; [.59FC.0020.0002] # ANATOLIAN HIEROGLYPH A011 +1440C ; [.59FD.0020.0002] # ANATOLIAN HIEROGLYPH A012 +1440D ; [.59FE.0020.0002] # ANATOLIAN HIEROGLYPH A013 +1440E ; [.59FF.0020.0002] # ANATOLIAN HIEROGLYPH A014 +1440F ; [.5A00.0020.0002] # ANATOLIAN HIEROGLYPH A015 +14410 ; [.5A01.0020.0002] # ANATOLIAN HIEROGLYPH A016 +14411 ; [.5A02.0020.0002] # ANATOLIAN HIEROGLYPH A017 +14412 ; [.5A03.0020.0002] # ANATOLIAN HIEROGLYPH A018 +14413 ; [.5A04.0020.0002] # ANATOLIAN HIEROGLYPH A019 +14414 ; [.5A05.0020.0002] # ANATOLIAN HIEROGLYPH A020 +14415 ; [.5A06.0020.0002] # ANATOLIAN HIEROGLYPH A021 +14416 ; [.5A07.0020.0002] # ANATOLIAN HIEROGLYPH A022 +14417 ; [.5A08.0020.0002] # ANATOLIAN HIEROGLYPH A023 +14418 ; [.5A09.0020.0002] # ANATOLIAN HIEROGLYPH A024 +14419 ; [.5A0A.0020.0002] # ANATOLIAN HIEROGLYPH A025 +1441A ; [.5A0B.0020.0002] # ANATOLIAN HIEROGLYPH A026 +1441B ; [.5A0C.0020.0002] # ANATOLIAN HIEROGLYPH A026A +1441C ; [.5A0D.0020.0002] # ANATOLIAN HIEROGLYPH A027 +1441D ; [.5A0E.0020.0002] # ANATOLIAN HIEROGLYPH A028 +1441E ; [.5A0F.0020.0002] # ANATOLIAN HIEROGLYPH A029 +1441F ; [.5A10.0020.0002] # ANATOLIAN HIEROGLYPH A030 +14420 ; [.5A11.0020.0002] # ANATOLIAN HIEROGLYPH A031 +14421 ; [.5A12.0020.0002] # ANATOLIAN HIEROGLYPH A032 +14422 ; [.5A13.0020.0002] # ANATOLIAN HIEROGLYPH A033 +14423 ; [.5A14.0020.0002] # ANATOLIAN HIEROGLYPH A034 +14424 ; [.5A15.0020.0002] # ANATOLIAN HIEROGLYPH A035 +14425 ; [.5A16.0020.0002] # ANATOLIAN HIEROGLYPH A036 +14426 ; [.5A17.0020.0002] # ANATOLIAN HIEROGLYPH A037 +14427 ; [.5A18.0020.0002] # ANATOLIAN HIEROGLYPH A038 +14428 ; [.5A19.0020.0002] # ANATOLIAN HIEROGLYPH A039 +14429 ; [.5A1A.0020.0002] # ANATOLIAN HIEROGLYPH A039A +1442A ; [.5A1B.0020.0002] # ANATOLIAN HIEROGLYPH A040 +1442B ; [.5A1C.0020.0002] # ANATOLIAN HIEROGLYPH A041 +1442C ; [.5A1D.0020.0002] # ANATOLIAN HIEROGLYPH A041A +1442D ; [.5A1E.0020.0002] # ANATOLIAN HIEROGLYPH A042 +1442E ; [.5A1F.0020.0002] # ANATOLIAN HIEROGLYPH A043 +1442F ; [.5A20.0020.0002] # ANATOLIAN HIEROGLYPH A044 +14430 ; [.5A21.0020.0002] # ANATOLIAN HIEROGLYPH A045 +14431 ; [.5A22.0020.0002] # ANATOLIAN HIEROGLYPH A045A +14432 ; [.5A23.0020.0002] # ANATOLIAN HIEROGLYPH A046 +14433 ; [.5A24.0020.0002] # ANATOLIAN HIEROGLYPH A046A +14434 ; [.5A25.0020.0002] # ANATOLIAN HIEROGLYPH A046B +14435 ; [.5A26.0020.0002] # ANATOLIAN HIEROGLYPH A047 +14436 ; [.5A27.0020.0002] # ANATOLIAN HIEROGLYPH A048 +14437 ; [.5A28.0020.0002] # ANATOLIAN HIEROGLYPH A049 +14438 ; [.5A29.0020.0002] # ANATOLIAN HIEROGLYPH A050 +14439 ; [.5A2A.0020.0002] # ANATOLIAN HIEROGLYPH A051 +1443A ; [.5A2B.0020.0002] # ANATOLIAN HIEROGLYPH A052 +1443B ; [.5A2C.0020.0002] # ANATOLIAN HIEROGLYPH A053 +1443C ; [.5A2D.0020.0002] # ANATOLIAN HIEROGLYPH A054 +1443D ; [.5A2E.0020.0002] # ANATOLIAN HIEROGLYPH A055 +1443E ; [.5A2F.0020.0002] # ANATOLIAN HIEROGLYPH A056 +1443F ; [.5A30.0020.0002] # ANATOLIAN HIEROGLYPH A057 +14440 ; [.5A31.0020.0002] # ANATOLIAN HIEROGLYPH A058 +14441 ; [.5A32.0020.0002] # ANATOLIAN HIEROGLYPH A059 +14442 ; [.5A33.0020.0002] # ANATOLIAN HIEROGLYPH A060 +14443 ; [.5A34.0020.0002] # ANATOLIAN HIEROGLYPH A061 +14444 ; [.5A35.0020.0002] # ANATOLIAN HIEROGLYPH A062 +14445 ; [.5A36.0020.0002] # ANATOLIAN HIEROGLYPH A063 +14446 ; [.5A37.0020.0002] # ANATOLIAN HIEROGLYPH A064 +14447 ; [.5A38.0020.0002] # ANATOLIAN HIEROGLYPH A065 +14448 ; [.5A39.0020.0002] # ANATOLIAN HIEROGLYPH A066 +14449 ; [.5A3A.0020.0002] # ANATOLIAN HIEROGLYPH A066A +1444A ; [.5A3B.0020.0002] # ANATOLIAN HIEROGLYPH A066B +1444B ; [.5A3C.0020.0002] # ANATOLIAN HIEROGLYPH A066C +1444C ; [.5A3D.0020.0002] # ANATOLIAN HIEROGLYPH A067 +1444D ; [.5A3E.0020.0002] # ANATOLIAN HIEROGLYPH A068 +1444E ; [.5A3F.0020.0002] # ANATOLIAN HIEROGLYPH A069 +1444F ; [.5A40.0020.0002] # ANATOLIAN HIEROGLYPH A070 +14450 ; [.5A41.0020.0002] # ANATOLIAN HIEROGLYPH A071 +14451 ; [.5A42.0020.0002] # ANATOLIAN HIEROGLYPH A072 +14452 ; [.5A43.0020.0002] # ANATOLIAN HIEROGLYPH A073 +14453 ; [.5A44.0020.0002] # ANATOLIAN HIEROGLYPH A074 +14454 ; [.5A45.0020.0002] # ANATOLIAN HIEROGLYPH A075 +14455 ; [.5A46.0020.0002] # ANATOLIAN HIEROGLYPH A076 +14456 ; [.5A47.0020.0002] # ANATOLIAN HIEROGLYPH A077 +14457 ; [.5A48.0020.0002] # ANATOLIAN HIEROGLYPH A078 +14458 ; [.5A49.0020.0002] # ANATOLIAN HIEROGLYPH A079 +14459 ; [.5A4A.0020.0002] # ANATOLIAN HIEROGLYPH A080 +1445A ; [.5A4B.0020.0002] # ANATOLIAN HIEROGLYPH A081 +1445B ; [.5A4C.0020.0002] # ANATOLIAN HIEROGLYPH A082 +1445C ; [.5A4D.0020.0002] # ANATOLIAN HIEROGLYPH A083 +1445D ; [.5A4E.0020.0002] # ANATOLIAN HIEROGLYPH A084 +1445E ; [.5A4F.0020.0002] # ANATOLIAN HIEROGLYPH A085 +1445F ; [.5A50.0020.0002] # ANATOLIAN HIEROGLYPH A086 +14460 ; [.5A51.0020.0002] # ANATOLIAN HIEROGLYPH A087 +14461 ; [.5A52.0020.0002] # ANATOLIAN HIEROGLYPH A088 +14462 ; [.5A53.0020.0002] # ANATOLIAN HIEROGLYPH A089 +14463 ; [.5A54.0020.0002] # ANATOLIAN HIEROGLYPH A090 +14464 ; [.5A55.0020.0002] # ANATOLIAN HIEROGLYPH A091 +14465 ; [.5A56.0020.0002] # ANATOLIAN HIEROGLYPH A092 +14466 ; [.5A57.0020.0002] # ANATOLIAN HIEROGLYPH A093 +14467 ; [.5A58.0020.0002] # ANATOLIAN HIEROGLYPH A094 +14468 ; [.5A59.0020.0002] # ANATOLIAN HIEROGLYPH A095 +14469 ; [.5A5A.0020.0002] # ANATOLIAN HIEROGLYPH A096 +1446A ; [.5A5B.0020.0002] # ANATOLIAN HIEROGLYPH A097 +1446B ; [.5A5C.0020.0002] # ANATOLIAN HIEROGLYPH A097A +1446C ; [.5A5D.0020.0002] # ANATOLIAN HIEROGLYPH A098 +1446D ; [.5A5E.0020.0002] # ANATOLIAN HIEROGLYPH A098A +1446E ; [.5A5F.0020.0002] # ANATOLIAN HIEROGLYPH A099 +1446F ; [.5A60.0020.0002] # ANATOLIAN HIEROGLYPH A100 +14470 ; [.5A61.0020.0002] # ANATOLIAN HIEROGLYPH A100A +14471 ; [.5A62.0020.0002] # ANATOLIAN HIEROGLYPH A101 +14472 ; [.5A63.0020.0002] # ANATOLIAN HIEROGLYPH A101A +14473 ; [.5A64.0020.0002] # ANATOLIAN HIEROGLYPH A102 +14474 ; [.5A65.0020.0002] # ANATOLIAN HIEROGLYPH A102A +14475 ; [.5A66.0020.0002] # ANATOLIAN HIEROGLYPH A103 +14476 ; [.5A67.0020.0002] # ANATOLIAN HIEROGLYPH A104 +14477 ; [.5A68.0020.0002] # ANATOLIAN HIEROGLYPH A104A +14478 ; [.5A69.0020.0002] # ANATOLIAN HIEROGLYPH A104B +14479 ; [.5A6A.0020.0002] # ANATOLIAN HIEROGLYPH A104C +1447A ; [.5A6B.0020.0002] # ANATOLIAN HIEROGLYPH A105 +1447B ; [.5A6C.0020.0002] # ANATOLIAN HIEROGLYPH A105A +1447C ; [.5A6D.0020.0002] # ANATOLIAN HIEROGLYPH A105B +1447D ; [.5A6E.0020.0002] # ANATOLIAN HIEROGLYPH A106 +1447E ; [.5A6F.0020.0002] # ANATOLIAN HIEROGLYPH A107 +1447F ; [.5A70.0020.0002] # ANATOLIAN HIEROGLYPH A107A +14480 ; [.5A71.0020.0002] # ANATOLIAN HIEROGLYPH A107B +14481 ; [.5A72.0020.0002] # ANATOLIAN HIEROGLYPH A107C +14482 ; [.5A73.0020.0002] # ANATOLIAN HIEROGLYPH A108 +14483 ; [.5A74.0020.0002] # ANATOLIAN HIEROGLYPH A109 +14484 ; [.5A75.0020.0002] # ANATOLIAN HIEROGLYPH A110 +14485 ; [.5A76.0020.0002] # ANATOLIAN HIEROGLYPH A110A +14486 ; [.5A77.0020.0002] # ANATOLIAN HIEROGLYPH A110B +14487 ; [.5A78.0020.0002] # ANATOLIAN HIEROGLYPH A111 +14488 ; [.5A79.0020.0002] # ANATOLIAN HIEROGLYPH A112 +14489 ; [.5A7A.0020.0002] # ANATOLIAN HIEROGLYPH A113 +1448A ; [.5A7B.0020.0002] # ANATOLIAN HIEROGLYPH A114 +1448B ; [.5A7C.0020.0002] # ANATOLIAN HIEROGLYPH A115 +1448C ; [.5A7D.0020.0002] # ANATOLIAN HIEROGLYPH A115A +1448D ; [.5A7E.0020.0002] # ANATOLIAN HIEROGLYPH A116 +1448E ; [.5A7F.0020.0002] # ANATOLIAN HIEROGLYPH A117 +1448F ; [.5A80.0020.0002] # ANATOLIAN HIEROGLYPH A118 +14490 ; [.5A81.0020.0002] # ANATOLIAN HIEROGLYPH A119 +14491 ; [.5A82.0020.0002] # ANATOLIAN HIEROGLYPH A120 +14492 ; [.5A83.0020.0002] # ANATOLIAN HIEROGLYPH A121 +14493 ; [.5A84.0020.0002] # ANATOLIAN HIEROGLYPH A122 +14494 ; [.5A85.0020.0002] # ANATOLIAN HIEROGLYPH A123 +14495 ; [.5A86.0020.0002] # ANATOLIAN HIEROGLYPH A124 +14496 ; [.5A87.0020.0002] # ANATOLIAN HIEROGLYPH A125 +14497 ; [.5A88.0020.0002] # ANATOLIAN HIEROGLYPH A125A +14498 ; [.5A89.0020.0002] # ANATOLIAN HIEROGLYPH A126 +14499 ; [.5A8A.0020.0002] # ANATOLIAN HIEROGLYPH A127 +1449A ; [.5A8B.0020.0002] # ANATOLIAN HIEROGLYPH A128 +1449B ; [.5A8C.0020.0002] # ANATOLIAN HIEROGLYPH A129 +1449C ; [.5A8D.0020.0002] # ANATOLIAN HIEROGLYPH A130 +1449D ; [.5A8E.0020.0002] # ANATOLIAN HIEROGLYPH A131 +1449E ; [.5A8F.0020.0002] # ANATOLIAN HIEROGLYPH A132 +1449F ; [.5A90.0020.0002] # ANATOLIAN HIEROGLYPH A133 +144A0 ; [.5A91.0020.0002] # ANATOLIAN HIEROGLYPH A134 +144A1 ; [.5A92.0020.0002] # ANATOLIAN HIEROGLYPH A135 +144A2 ; [.5A93.0020.0002] # ANATOLIAN HIEROGLYPH A135A +144A3 ; [.5A94.0020.0002] # ANATOLIAN HIEROGLYPH A136 +144A4 ; [.5A95.0020.0002] # ANATOLIAN HIEROGLYPH A137 +144A5 ; [.5A96.0020.0002] # ANATOLIAN HIEROGLYPH A138 +144A6 ; [.5A97.0020.0002] # ANATOLIAN HIEROGLYPH A139 +144A7 ; [.5A98.0020.0002] # ANATOLIAN HIEROGLYPH A140 +144A8 ; [.5A99.0020.0002] # ANATOLIAN HIEROGLYPH A141 +144A9 ; [.5A9A.0020.0002] # ANATOLIAN HIEROGLYPH A142 +144AA ; [.5A9B.0020.0002] # ANATOLIAN HIEROGLYPH A143 +144AB ; [.5A9C.0020.0002] # ANATOLIAN HIEROGLYPH A144 +144AC ; [.5A9D.0020.0002] # ANATOLIAN HIEROGLYPH A145 +144AD ; [.5A9E.0020.0002] # ANATOLIAN HIEROGLYPH A146 +144AE ; [.5A9F.0020.0002] # ANATOLIAN HIEROGLYPH A147 +144AF ; [.5AA0.0020.0002] # ANATOLIAN HIEROGLYPH A148 +144B0 ; [.5AA1.0020.0002] # ANATOLIAN HIEROGLYPH A149 +144B1 ; [.5AA2.0020.0002] # ANATOLIAN HIEROGLYPH A150 +144B2 ; [.5AA3.0020.0002] # ANATOLIAN HIEROGLYPH A151 +144B3 ; [.5AA4.0020.0002] # ANATOLIAN HIEROGLYPH A152 +144B4 ; [.5AA5.0020.0002] # ANATOLIAN HIEROGLYPH A153 +144B5 ; [.5AA6.0020.0002] # ANATOLIAN HIEROGLYPH A154 +144B6 ; [.5AA7.0020.0002] # ANATOLIAN HIEROGLYPH A155 +144B7 ; [.5AA8.0020.0002] # ANATOLIAN HIEROGLYPH A156 +144B8 ; [.5AA9.0020.0002] # ANATOLIAN HIEROGLYPH A157 +144B9 ; [.5AAA.0020.0002] # ANATOLIAN HIEROGLYPH A158 +144BA ; [.5AAB.0020.0002] # ANATOLIAN HIEROGLYPH A159 +144BB ; [.5AAC.0020.0002] # ANATOLIAN HIEROGLYPH A160 +144BC ; [.5AAD.0020.0002] # ANATOLIAN HIEROGLYPH A161 +144BD ; [.5AAE.0020.0002] # ANATOLIAN HIEROGLYPH A162 +144BE ; [.5AAF.0020.0002] # ANATOLIAN HIEROGLYPH A163 +144BF ; [.5AB0.0020.0002] # ANATOLIAN HIEROGLYPH A164 +144C0 ; [.5AB1.0020.0002] # ANATOLIAN HIEROGLYPH A165 +144C1 ; [.5AB2.0020.0002] # ANATOLIAN HIEROGLYPH A166 +144C2 ; [.5AB3.0020.0002] # ANATOLIAN HIEROGLYPH A167 +144C3 ; [.5AB4.0020.0002] # ANATOLIAN HIEROGLYPH A168 +144C4 ; [.5AB5.0020.0002] # ANATOLIAN HIEROGLYPH A169 +144C5 ; [.5AB6.0020.0002] # ANATOLIAN HIEROGLYPH A170 +144C6 ; [.5AB7.0020.0002] # ANATOLIAN HIEROGLYPH A171 +144C7 ; [.5AB8.0020.0002] # ANATOLIAN HIEROGLYPH A172 +144C8 ; [.5AB9.0020.0002] # ANATOLIAN HIEROGLYPH A173 +144C9 ; [.5ABA.0020.0002] # ANATOLIAN HIEROGLYPH A174 +144CA ; [.5ABB.0020.0002] # ANATOLIAN HIEROGLYPH A175 +144CB ; [.5ABC.0020.0002] # ANATOLIAN HIEROGLYPH A176 +144CC ; [.5ABD.0020.0002] # ANATOLIAN HIEROGLYPH A177 +144CD ; [.5ABE.0020.0002] # ANATOLIAN HIEROGLYPH A178 +144CE ; [.5ABF.0020.0002] # ANATOLIAN HIEROGLYPH A179 +144CF ; [.5AC0.0020.0002] # ANATOLIAN HIEROGLYPH A180 +144D0 ; [.5AC1.0020.0002] # ANATOLIAN HIEROGLYPH A181 +144D1 ; [.5AC2.0020.0002] # ANATOLIAN HIEROGLYPH A182 +144D2 ; [.5AC3.0020.0002] # ANATOLIAN HIEROGLYPH A183 +144D3 ; [.5AC4.0020.0002] # ANATOLIAN HIEROGLYPH A184 +144D4 ; [.5AC5.0020.0002] # ANATOLIAN HIEROGLYPH A185 +144D5 ; [.5AC6.0020.0002] # ANATOLIAN HIEROGLYPH A186 +144D6 ; [.5AC7.0020.0002] # ANATOLIAN HIEROGLYPH A187 +144D7 ; [.5AC8.0020.0002] # ANATOLIAN HIEROGLYPH A188 +144D8 ; [.5AC9.0020.0002] # ANATOLIAN HIEROGLYPH A189 +144D9 ; [.5ACA.0020.0002] # ANATOLIAN HIEROGLYPH A190 +144DA ; [.5ACB.0020.0002] # ANATOLIAN HIEROGLYPH A191 +144DB ; [.5ACC.0020.0002] # ANATOLIAN HIEROGLYPH A192 +144DC ; [.5ACD.0020.0002] # ANATOLIAN HIEROGLYPH A193 +144DD ; [.5ACE.0020.0002] # ANATOLIAN HIEROGLYPH A194 +144DE ; [.5ACF.0020.0002] # ANATOLIAN HIEROGLYPH A195 +144DF ; [.5AD0.0020.0002] # ANATOLIAN HIEROGLYPH A196 +144E0 ; [.5AD1.0020.0002] # ANATOLIAN HIEROGLYPH A197 +144E1 ; [.5AD2.0020.0002] # ANATOLIAN HIEROGLYPH A198 +144E2 ; [.5AD3.0020.0002] # ANATOLIAN HIEROGLYPH A199 +144E3 ; [.5AD4.0020.0002] # ANATOLIAN HIEROGLYPH A200 +144E4 ; [.5AD5.0020.0002] # ANATOLIAN HIEROGLYPH A201 +144E5 ; [.5AD6.0020.0002] # ANATOLIAN HIEROGLYPH A202 +144E6 ; [.5AD7.0020.0002] # ANATOLIAN HIEROGLYPH A202A +144E7 ; [.5AD8.0020.0002] # ANATOLIAN HIEROGLYPH A202B +144E8 ; [.5AD9.0020.0002] # ANATOLIAN HIEROGLYPH A203 +144E9 ; [.5ADA.0020.0002] # ANATOLIAN HIEROGLYPH A204 +144EA ; [.5ADB.0020.0002] # ANATOLIAN HIEROGLYPH A205 +144EB ; [.5ADC.0020.0002] # ANATOLIAN HIEROGLYPH A206 +144EC ; [.5ADD.0020.0002] # ANATOLIAN HIEROGLYPH A207 +144ED ; [.5ADE.0020.0002] # ANATOLIAN HIEROGLYPH A207A +144EE ; [.5ADF.0020.0002] # ANATOLIAN HIEROGLYPH A208 +144EF ; [.5AE0.0020.0002] # ANATOLIAN HIEROGLYPH A209 +144F0 ; [.5AE1.0020.0002] # ANATOLIAN HIEROGLYPH A209A +144F1 ; [.5AE2.0020.0002] # ANATOLIAN HIEROGLYPH A210 +144F2 ; [.5AE3.0020.0002] # ANATOLIAN HIEROGLYPH A211 +144F3 ; [.5AE4.0020.0002] # ANATOLIAN HIEROGLYPH A212 +144F4 ; [.5AE5.0020.0002] # ANATOLIAN HIEROGLYPH A213 +144F5 ; [.5AE6.0020.0002] # ANATOLIAN HIEROGLYPH A214 +144F6 ; [.5AE7.0020.0002] # ANATOLIAN HIEROGLYPH A215 +144F7 ; [.5AE8.0020.0002] # ANATOLIAN HIEROGLYPH A215A +144F8 ; [.5AE9.0020.0002] # ANATOLIAN HIEROGLYPH A216 +144F9 ; [.5AEA.0020.0002] # ANATOLIAN HIEROGLYPH A216A +144FA ; [.5AEB.0020.0002] # ANATOLIAN HIEROGLYPH A217 +144FB ; [.5AEC.0020.0002] # ANATOLIAN HIEROGLYPH A218 +144FC ; [.5AED.0020.0002] # ANATOLIAN HIEROGLYPH A219 +144FD ; [.5AEE.0020.0002] # ANATOLIAN HIEROGLYPH A220 +144FE ; [.5AEF.0020.0002] # ANATOLIAN HIEROGLYPH A221 +144FF ; [.5AF0.0020.0002] # ANATOLIAN HIEROGLYPH A222 +14500 ; [.5AF1.0020.0002] # ANATOLIAN HIEROGLYPH A223 +14501 ; [.5AF2.0020.0002] # ANATOLIAN HIEROGLYPH A224 +14502 ; [.5AF3.0020.0002] # ANATOLIAN HIEROGLYPH A225 +14503 ; [.5AF4.0020.0002] # ANATOLIAN HIEROGLYPH A226 +14504 ; [.5AF5.0020.0002] # ANATOLIAN HIEROGLYPH A227 +14505 ; [.5AF6.0020.0002] # ANATOLIAN HIEROGLYPH A227A +14506 ; [.5AF7.0020.0002] # ANATOLIAN HIEROGLYPH A228 +14507 ; [.5AF8.0020.0002] # ANATOLIAN HIEROGLYPH A229 +14508 ; [.5AF9.0020.0002] # ANATOLIAN HIEROGLYPH A230 +14509 ; [.5AFA.0020.0002] # ANATOLIAN HIEROGLYPH A231 +1450A ; [.5AFB.0020.0002] # ANATOLIAN HIEROGLYPH A232 +1450B ; [.5AFC.0020.0002] # ANATOLIAN HIEROGLYPH A233 +1450C ; [.5AFD.0020.0002] # ANATOLIAN HIEROGLYPH A234 +1450D ; [.5AFE.0020.0002] # ANATOLIAN HIEROGLYPH A235 +1450E ; [.5AFF.0020.0002] # ANATOLIAN HIEROGLYPH A236 +1450F ; [.5B00.0020.0002] # ANATOLIAN HIEROGLYPH A237 +14510 ; [.5B01.0020.0002] # ANATOLIAN HIEROGLYPH A238 +14511 ; [.5B02.0020.0002] # ANATOLIAN HIEROGLYPH A239 +14512 ; [.5B03.0020.0002] # ANATOLIAN HIEROGLYPH A240 +14513 ; [.5B04.0020.0002] # ANATOLIAN HIEROGLYPH A241 +14514 ; [.5B05.0020.0002] # ANATOLIAN HIEROGLYPH A242 +14515 ; [.5B06.0020.0002] # ANATOLIAN HIEROGLYPH A243 +14516 ; [.5B07.0020.0002] # ANATOLIAN HIEROGLYPH A244 +14517 ; [.5B08.0020.0002] # ANATOLIAN HIEROGLYPH A245 +14518 ; [.5B09.0020.0002] # ANATOLIAN HIEROGLYPH A246 +14519 ; [.5B0A.0020.0002] # ANATOLIAN HIEROGLYPH A247 +1451A ; [.5B0B.0020.0002] # ANATOLIAN HIEROGLYPH A248 +1451B ; [.5B0C.0020.0002] # ANATOLIAN HIEROGLYPH A249 +1451C ; [.5B0D.0020.0002] # ANATOLIAN HIEROGLYPH A250 +1451D ; [.5B0E.0020.0002] # ANATOLIAN HIEROGLYPH A251 +1451E ; [.5B0F.0020.0002] # ANATOLIAN HIEROGLYPH A252 +1451F ; [.5B10.0020.0002] # ANATOLIAN HIEROGLYPH A253 +14520 ; [.5B11.0020.0002] # ANATOLIAN HIEROGLYPH A254 +14521 ; [.5B12.0020.0002] # ANATOLIAN HIEROGLYPH A255 +14522 ; [.5B13.0020.0002] # ANATOLIAN HIEROGLYPH A256 +14523 ; [.5B14.0020.0002] # ANATOLIAN HIEROGLYPH A257 +14524 ; [.5B15.0020.0002] # ANATOLIAN HIEROGLYPH A258 +14525 ; [.5B16.0020.0002] # ANATOLIAN HIEROGLYPH A259 +14526 ; [.5B17.0020.0002] # ANATOLIAN HIEROGLYPH A260 +14527 ; [.5B18.0020.0002] # ANATOLIAN HIEROGLYPH A261 +14528 ; [.5B19.0020.0002] # ANATOLIAN HIEROGLYPH A262 +14529 ; [.5B1A.0020.0002] # ANATOLIAN HIEROGLYPH A263 +1452A ; [.5B1B.0020.0002] # ANATOLIAN HIEROGLYPH A264 +1452B ; [.5B1C.0020.0002] # ANATOLIAN HIEROGLYPH A265 +1452C ; [.5B1D.0020.0002] # ANATOLIAN HIEROGLYPH A266 +1452D ; [.5B1E.0020.0002] # ANATOLIAN HIEROGLYPH A267 +1452E ; [.5B1F.0020.0002] # ANATOLIAN HIEROGLYPH A267A +1452F ; [.5B20.0020.0002] # ANATOLIAN HIEROGLYPH A268 +14530 ; [.5B21.0020.0002] # ANATOLIAN HIEROGLYPH A269 +14531 ; [.5B22.0020.0002] # ANATOLIAN HIEROGLYPH A270 +14532 ; [.5B23.0020.0002] # ANATOLIAN HIEROGLYPH A271 +14533 ; [.5B24.0020.0002] # ANATOLIAN HIEROGLYPH A272 +14534 ; [.5B25.0020.0002] # ANATOLIAN HIEROGLYPH A273 +14535 ; [.5B26.0020.0002] # ANATOLIAN HIEROGLYPH A274 +14536 ; [.5B27.0020.0002] # ANATOLIAN HIEROGLYPH A275 +14537 ; [.5B28.0020.0002] # ANATOLIAN HIEROGLYPH A276 +14538 ; [.5B29.0020.0002] # ANATOLIAN HIEROGLYPH A277 +14539 ; [.5B2A.0020.0002] # ANATOLIAN HIEROGLYPH A278 +1453A ; [.5B2B.0020.0002] # ANATOLIAN HIEROGLYPH A279 +1453B ; [.5B2C.0020.0002] # ANATOLIAN HIEROGLYPH A280 +1453C ; [.5B2D.0020.0002] # ANATOLIAN HIEROGLYPH A281 +1453D ; [.5B2E.0020.0002] # ANATOLIAN HIEROGLYPH A282 +1453E ; [.5B2F.0020.0002] # ANATOLIAN HIEROGLYPH A283 +1453F ; [.5B30.0020.0002] # ANATOLIAN HIEROGLYPH A284 +14540 ; [.5B31.0020.0002] # ANATOLIAN HIEROGLYPH A285 +14541 ; [.5B32.0020.0002] # ANATOLIAN HIEROGLYPH A286 +14542 ; [.5B33.0020.0002] # ANATOLIAN HIEROGLYPH A287 +14543 ; [.5B34.0020.0002] # ANATOLIAN HIEROGLYPH A288 +14544 ; [.5B35.0020.0002] # ANATOLIAN HIEROGLYPH A289 +14545 ; [.5B36.0020.0002] # ANATOLIAN HIEROGLYPH A289A +14546 ; [.5B37.0020.0002] # ANATOLIAN HIEROGLYPH A290 +14547 ; [.5B38.0020.0002] # ANATOLIAN HIEROGLYPH A291 +14548 ; [.5B39.0020.0002] # ANATOLIAN HIEROGLYPH A292 +14549 ; [.5B3A.0020.0002] # ANATOLIAN HIEROGLYPH A293 +1454A ; [.5B3B.0020.0002] # ANATOLIAN HIEROGLYPH A294 +1454B ; [.5B3C.0020.0002] # ANATOLIAN HIEROGLYPH A294A +1454C ; [.5B3D.0020.0002] # ANATOLIAN HIEROGLYPH A295 +1454D ; [.5B3E.0020.0002] # ANATOLIAN HIEROGLYPH A296 +1454E ; [.5B3F.0020.0002] # ANATOLIAN HIEROGLYPH A297 +1454F ; [.5B40.0020.0002] # ANATOLIAN HIEROGLYPH A298 +14550 ; [.5B41.0020.0002] # ANATOLIAN HIEROGLYPH A299 +14551 ; [.5B42.0020.0002] # ANATOLIAN HIEROGLYPH A299A +14552 ; [.5B43.0020.0002] # ANATOLIAN HIEROGLYPH A300 +14553 ; [.5B44.0020.0002] # ANATOLIAN HIEROGLYPH A301 +14554 ; [.5B45.0020.0002] # ANATOLIAN HIEROGLYPH A302 +14555 ; [.5B46.0020.0002] # ANATOLIAN HIEROGLYPH A303 +14556 ; [.5B47.0020.0002] # ANATOLIAN HIEROGLYPH A304 +14557 ; [.5B48.0020.0002] # ANATOLIAN HIEROGLYPH A305 +14558 ; [.5B49.0020.0002] # ANATOLIAN HIEROGLYPH A306 +14559 ; [.5B4A.0020.0002] # ANATOLIAN HIEROGLYPH A307 +1455A ; [.5B4B.0020.0002] # ANATOLIAN HIEROGLYPH A308 +1455B ; [.5B4C.0020.0002] # ANATOLIAN HIEROGLYPH A309 +1455C ; [.5B4D.0020.0002] # ANATOLIAN HIEROGLYPH A309A +1455D ; [.5B4E.0020.0002] # ANATOLIAN HIEROGLYPH A310 +1455E ; [.5B4F.0020.0002] # ANATOLIAN HIEROGLYPH A311 +1455F ; [.5B50.0020.0002] # ANATOLIAN HIEROGLYPH A312 +14560 ; [.5B51.0020.0002] # ANATOLIAN HIEROGLYPH A313 +14561 ; [.5B52.0020.0002] # ANATOLIAN HIEROGLYPH A314 +14562 ; [.5B53.0020.0002] # ANATOLIAN HIEROGLYPH A315 +14563 ; [.5B54.0020.0002] # ANATOLIAN HIEROGLYPH A316 +14564 ; [.5B55.0020.0002] # ANATOLIAN HIEROGLYPH A317 +14565 ; [.5B56.0020.0002] # ANATOLIAN HIEROGLYPH A318 +14566 ; [.5B57.0020.0002] # ANATOLIAN HIEROGLYPH A319 +14567 ; [.5B58.0020.0002] # ANATOLIAN HIEROGLYPH A320 +14568 ; [.5B59.0020.0002] # ANATOLIAN HIEROGLYPH A321 +14569 ; [.5B5A.0020.0002] # ANATOLIAN HIEROGLYPH A322 +1456A ; [.5B5B.0020.0002] # ANATOLIAN HIEROGLYPH A323 +1456B ; [.5B5C.0020.0002] # ANATOLIAN HIEROGLYPH A324 +1456C ; [.5B5D.0020.0002] # ANATOLIAN HIEROGLYPH A325 +1456D ; [.5B5E.0020.0002] # ANATOLIAN HIEROGLYPH A326 +1456E ; [.5B5F.0020.0002] # ANATOLIAN HIEROGLYPH A327 +1456F ; [.5B60.0020.0002] # ANATOLIAN HIEROGLYPH A328 +14570 ; [.5B61.0020.0002] # ANATOLIAN HIEROGLYPH A329 +14571 ; [.5B62.0020.0002] # ANATOLIAN HIEROGLYPH A329A +14572 ; [.5B63.0020.0002] # ANATOLIAN HIEROGLYPH A330 +14573 ; [.5B64.0020.0002] # ANATOLIAN HIEROGLYPH A331 +14574 ; [.5B65.0020.0002] # ANATOLIAN HIEROGLYPH A332A +14575 ; [.5B66.0020.0002] # ANATOLIAN HIEROGLYPH A332B +14576 ; [.5B67.0020.0002] # ANATOLIAN HIEROGLYPH A332C +14577 ; [.5B68.0020.0002] # ANATOLIAN HIEROGLYPH A333 +14578 ; [.5B69.0020.0002] # ANATOLIAN HIEROGLYPH A334 +14579 ; [.5B6A.0020.0002] # ANATOLIAN HIEROGLYPH A335 +1457A ; [.5B6B.0020.0002] # ANATOLIAN HIEROGLYPH A336 +1457B ; [.5B6C.0020.0002] # ANATOLIAN HIEROGLYPH A336A +1457C ; [.5B6D.0020.0002] # ANATOLIAN HIEROGLYPH A336B +1457D ; [.5B6E.0020.0002] # ANATOLIAN HIEROGLYPH A336C +1457E ; [.5B6F.0020.0002] # ANATOLIAN HIEROGLYPH A337 +1457F ; [.5B70.0020.0002] # ANATOLIAN HIEROGLYPH A338 +14580 ; [.5B71.0020.0002] # ANATOLIAN HIEROGLYPH A339 +14581 ; [.5B72.0020.0002] # ANATOLIAN HIEROGLYPH A340 +14582 ; [.5B73.0020.0002] # ANATOLIAN HIEROGLYPH A341 +14583 ; [.5B74.0020.0002] # ANATOLIAN HIEROGLYPH A342 +14584 ; [.5B75.0020.0002] # ANATOLIAN HIEROGLYPH A343 +14585 ; [.5B76.0020.0002] # ANATOLIAN HIEROGLYPH A344 +14586 ; [.5B77.0020.0002] # ANATOLIAN HIEROGLYPH A345 +14587 ; [.5B78.0020.0002] # ANATOLIAN HIEROGLYPH A346 +14588 ; [.5B79.0020.0002] # ANATOLIAN HIEROGLYPH A347 +14589 ; [.5B7A.0020.0002] # ANATOLIAN HIEROGLYPH A348 +1458A ; [.5B7B.0020.0002] # ANATOLIAN HIEROGLYPH A349 +1458B ; [.5B7C.0020.0002] # ANATOLIAN HIEROGLYPH A350 +1458C ; [.5B7D.0020.0002] # ANATOLIAN HIEROGLYPH A351 +1458D ; [.5B7E.0020.0002] # ANATOLIAN HIEROGLYPH A352 +1458E ; [.5B7F.0020.0002] # ANATOLIAN HIEROGLYPH A353 +1458F ; [.5B80.0020.0002] # ANATOLIAN HIEROGLYPH A354 +14590 ; [.5B81.0020.0002] # ANATOLIAN HIEROGLYPH A355 +14591 ; [.5B82.0020.0002] # ANATOLIAN HIEROGLYPH A356 +14592 ; [.5B83.0020.0002] # ANATOLIAN HIEROGLYPH A357 +14593 ; [.5B84.0020.0002] # ANATOLIAN HIEROGLYPH A358 +14594 ; [.5B85.0020.0002] # ANATOLIAN HIEROGLYPH A359 +14595 ; [.5B86.0020.0002] # ANATOLIAN HIEROGLYPH A359A +14596 ; [.5B87.0020.0002] # ANATOLIAN HIEROGLYPH A360 +14597 ; [.5B88.0020.0002] # ANATOLIAN HIEROGLYPH A361 +14598 ; [.5B89.0020.0002] # ANATOLIAN HIEROGLYPH A362 +14599 ; [.5B8A.0020.0002] # ANATOLIAN HIEROGLYPH A363 +1459A ; [.5B8B.0020.0002] # ANATOLIAN HIEROGLYPH A364 +1459B ; [.5B8C.0020.0002] # ANATOLIAN HIEROGLYPH A364A +1459C ; [.5B8D.0020.0002] # ANATOLIAN HIEROGLYPH A365 +1459D ; [.5B8E.0020.0002] # ANATOLIAN HIEROGLYPH A366 +1459E ; [.5B8F.0020.0002] # ANATOLIAN HIEROGLYPH A367 +1459F ; [.5B90.0020.0002] # ANATOLIAN HIEROGLYPH A368 +145A0 ; [.5B91.0020.0002] # ANATOLIAN HIEROGLYPH A368A +145A1 ; [.5B92.0020.0002] # ANATOLIAN HIEROGLYPH A369 +145A2 ; [.5B93.0020.0002] # ANATOLIAN HIEROGLYPH A370 +145A3 ; [.5B94.0020.0002] # ANATOLIAN HIEROGLYPH A371 +145A4 ; [.5B95.0020.0002] # ANATOLIAN HIEROGLYPH A371A +145A5 ; [.5B96.0020.0002] # ANATOLIAN HIEROGLYPH A372 +145A6 ; [.5B97.0020.0002] # ANATOLIAN HIEROGLYPH A373 +145A7 ; [.5B98.0020.0002] # ANATOLIAN HIEROGLYPH A374 +145A8 ; [.5B99.0020.0002] # ANATOLIAN HIEROGLYPH A375 +145A9 ; [.5B9A.0020.0002] # ANATOLIAN HIEROGLYPH A376 +145AA ; [.5B9B.0020.0002] # ANATOLIAN HIEROGLYPH A377 +145AB ; [.5B9C.0020.0002] # ANATOLIAN HIEROGLYPH A378 +145AC ; [.5B9D.0020.0002] # ANATOLIAN HIEROGLYPH A379 +145AD ; [.5B9E.0020.0002] # ANATOLIAN HIEROGLYPH A380 +145AE ; [.5B9F.0020.0002] # ANATOLIAN HIEROGLYPH A381 +145AF ; [.5BA0.0020.0002] # ANATOLIAN HIEROGLYPH A381A +145B0 ; [.5BA1.0020.0002] # ANATOLIAN HIEROGLYPH A382 +145B1 ; [.5BA2.0020.0002] # ANATOLIAN HIEROGLYPH A383 RA OR RI +145B2 ; [.5BA3.0020.0002] # ANATOLIAN HIEROGLYPH A383A +145B3 ; [.5BA4.0020.0002] # ANATOLIAN HIEROGLYPH A384 +145B4 ; [.5BA5.0020.0002] # ANATOLIAN HIEROGLYPH A385 +145B5 ; [.5BA6.0020.0002] # ANATOLIAN HIEROGLYPH A386 +145B6 ; [.5BA7.0020.0002] # ANATOLIAN HIEROGLYPH A386A +145B7 ; [.5BA8.0020.0002] # ANATOLIAN HIEROGLYPH A387 +145B8 ; [.5BA9.0020.0002] # ANATOLIAN HIEROGLYPH A388 +145B9 ; [.5BAA.0020.0002] # ANATOLIAN HIEROGLYPH A389 +145BA ; [.5BAB.0020.0002] # ANATOLIAN HIEROGLYPH A390 +145BB ; [.5BAC.0020.0002] # ANATOLIAN HIEROGLYPH A391 +145BC ; [.5BAD.0020.0002] # ANATOLIAN HIEROGLYPH A392 +145BD ; [.5BAE.0020.0002] # ANATOLIAN HIEROGLYPH A393 EIGHT +145BE ; [.5BAF.0020.0002] # ANATOLIAN HIEROGLYPH A394 +145BF ; [.5BB0.0020.0002] # ANATOLIAN HIEROGLYPH A395 +145C0 ; [.5BB1.0020.0002] # ANATOLIAN HIEROGLYPH A396 +145C1 ; [.5BB2.0020.0002] # ANATOLIAN HIEROGLYPH A397 +145C2 ; [.5BB3.0020.0002] # ANATOLIAN HIEROGLYPH A398 +145C3 ; [.5BB4.0020.0002] # ANATOLIAN HIEROGLYPH A399 +145C4 ; [.5BB5.0020.0002] # ANATOLIAN HIEROGLYPH A400 +145C5 ; [.5BB6.0020.0002] # ANATOLIAN HIEROGLYPH A401 +145C6 ; [.5BB7.0020.0002] # ANATOLIAN HIEROGLYPH A402 +145C7 ; [.5BB8.0020.0002] # ANATOLIAN HIEROGLYPH A403 +145C8 ; [.5BB9.0020.0002] # ANATOLIAN HIEROGLYPH A404 +145C9 ; [.5BBA.0020.0002] # ANATOLIAN HIEROGLYPH A405 +145CA ; [.5BBB.0020.0002] # ANATOLIAN HIEROGLYPH A406 +145CB ; [.5BBC.0020.0002] # ANATOLIAN HIEROGLYPH A407 +145CC ; [.5BBD.0020.0002] # ANATOLIAN HIEROGLYPH A408 +145CD ; [.5BBE.0020.0002] # ANATOLIAN HIEROGLYPH A409 +145CE ; [.5BBF.0020.0002] # ANATOLIAN HIEROGLYPH A410 BEGIN LOGOGRAM MARK +145CF ; [.5BC0.0020.0002] # ANATOLIAN HIEROGLYPH A410A END LOGOGRAM MARK +145D0 ; [.5BC1.0020.0002] # ANATOLIAN HIEROGLYPH A411 +145D1 ; [.5BC2.0020.0002] # ANATOLIAN HIEROGLYPH A412 +145D2 ; [.5BC3.0020.0002] # ANATOLIAN HIEROGLYPH A413 +145D3 ; [.5BC4.0020.0002] # ANATOLIAN HIEROGLYPH A414 +145D4 ; [.5BC5.0020.0002] # ANATOLIAN HIEROGLYPH A415 +145D5 ; [.5BC6.0020.0002] # ANATOLIAN HIEROGLYPH A416 +145D6 ; [.5BC7.0020.0002] # ANATOLIAN HIEROGLYPH A417 +145D7 ; [.5BC8.0020.0002] # ANATOLIAN HIEROGLYPH A418 +145D8 ; [.5BC9.0020.0002] # ANATOLIAN HIEROGLYPH A419 +145D9 ; [.5BCA.0020.0002] # ANATOLIAN HIEROGLYPH A420 +145DA ; [.5BCB.0020.0002] # ANATOLIAN HIEROGLYPH A421 +145DB ; [.5BCC.0020.0002] # ANATOLIAN HIEROGLYPH A422 +145DC ; [.5BCD.0020.0002] # ANATOLIAN HIEROGLYPH A423 +145DD ; [.5BCE.0020.0002] # ANATOLIAN HIEROGLYPH A424 +145DE ; [.5BCF.0020.0002] # ANATOLIAN HIEROGLYPH A425 +145DF ; [.5BD0.0020.0002] # ANATOLIAN HIEROGLYPH A426 +145E0 ; [.5BD1.0020.0002] # ANATOLIAN HIEROGLYPH A427 +145E1 ; [.5BD2.0020.0002] # ANATOLIAN HIEROGLYPH A428 +145E2 ; [.5BD3.0020.0002] # ANATOLIAN HIEROGLYPH A429 +145E3 ; [.5BD4.0020.0002] # ANATOLIAN HIEROGLYPH A430 +145E4 ; [.5BD5.0020.0002] # ANATOLIAN HIEROGLYPH A431 +145E5 ; [.5BD6.0020.0002] # ANATOLIAN HIEROGLYPH A432 +145E6 ; [.5BD7.0020.0002] # ANATOLIAN HIEROGLYPH A433 +145E7 ; [.5BD8.0020.0002] # ANATOLIAN HIEROGLYPH A434 +145E8 ; [.5BD9.0020.0002] # ANATOLIAN HIEROGLYPH A435 +145E9 ; [.5BDA.0020.0002] # ANATOLIAN HIEROGLYPH A436 +145EA ; [.5BDB.0020.0002] # ANATOLIAN HIEROGLYPH A437 +145EB ; [.5BDC.0020.0002] # ANATOLIAN HIEROGLYPH A438 +145EC ; [.5BDD.0020.0002] # ANATOLIAN HIEROGLYPH A439 +145ED ; [.5BDE.0020.0002] # ANATOLIAN HIEROGLYPH A440 +145EE ; [.5BDF.0020.0002] # ANATOLIAN HIEROGLYPH A441 +145EF ; [.5BE0.0020.0002] # ANATOLIAN HIEROGLYPH A442 +145F0 ; [.5BE1.0020.0002] # ANATOLIAN HIEROGLYPH A443 +145F1 ; [.5BE2.0020.0002] # ANATOLIAN HIEROGLYPH A444 +145F2 ; [.5BE3.0020.0002] # ANATOLIAN HIEROGLYPH A445 +145F3 ; [.5BE4.0020.0002] # ANATOLIAN HIEROGLYPH A446 +145F4 ; [.5BE5.0020.0002] # ANATOLIAN HIEROGLYPH A447 +145F5 ; [.5BE6.0020.0002] # ANATOLIAN HIEROGLYPH A448 +145F6 ; [.5BE7.0020.0002] # ANATOLIAN HIEROGLYPH A449 +145F7 ; [.5BE8.0020.0002] # ANATOLIAN HIEROGLYPH A450 +145F8 ; [.5BE9.0020.0002] # ANATOLIAN HIEROGLYPH A450A +145F9 ; [.5BEA.0020.0002] # ANATOLIAN HIEROGLYPH A451 +145FA ; [.5BEB.0020.0002] # ANATOLIAN HIEROGLYPH A452 +145FB ; [.5BEC.0020.0002] # ANATOLIAN HIEROGLYPH A453 +145FC ; [.5BED.0020.0002] # ANATOLIAN HIEROGLYPH A454 +145FD ; [.5BEE.0020.0002] # ANATOLIAN HIEROGLYPH A455 +145FE ; [.5BEF.0020.0002] # ANATOLIAN HIEROGLYPH A456 +145FF ; [.5BF0.0020.0002] # ANATOLIAN HIEROGLYPH A457 +14600 ; [.5BF1.0020.0002] # ANATOLIAN HIEROGLYPH A457A +14601 ; [.5BF2.0020.0002] # ANATOLIAN HIEROGLYPH A458 +14602 ; [.5BF3.0020.0002] # ANATOLIAN HIEROGLYPH A459 +14603 ; [.5BF4.0020.0002] # ANATOLIAN HIEROGLYPH A460 +14604 ; [.5BF5.0020.0002] # ANATOLIAN HIEROGLYPH A461 +14605 ; [.5BF6.0020.0002] # ANATOLIAN HIEROGLYPH A462 +14606 ; [.5BF7.0020.0002] # ANATOLIAN HIEROGLYPH A463 +14607 ; [.5BF8.0020.0002] # ANATOLIAN HIEROGLYPH A464 +14608 ; [.5BF9.0020.0002] # ANATOLIAN HIEROGLYPH A465 +14609 ; [.5BFA.0020.0002] # ANATOLIAN HIEROGLYPH A466 +1460A ; [.5BFB.0020.0002] # ANATOLIAN HIEROGLYPH A467 +1460B ; [.5BFC.0020.0002] # ANATOLIAN HIEROGLYPH A468 +1460C ; [.5BFD.0020.0002] # ANATOLIAN HIEROGLYPH A469 +1460D ; [.5BFE.0020.0002] # ANATOLIAN HIEROGLYPH A470 +1460E ; [.5BFF.0020.0002] # ANATOLIAN HIEROGLYPH A471 +1460F ; [.5C00.0020.0002] # ANATOLIAN HIEROGLYPH A472 +14610 ; [.5C01.0020.0002] # ANATOLIAN HIEROGLYPH A473 +14611 ; [.5C02.0020.0002] # ANATOLIAN HIEROGLYPH A474 +14612 ; [.5C03.0020.0002] # ANATOLIAN HIEROGLYPH A475 +14613 ; [.5C04.0020.0002] # ANATOLIAN HIEROGLYPH A476 +14614 ; [.5C05.0020.0002] # ANATOLIAN HIEROGLYPH A477 +14615 ; [.5C06.0020.0002] # ANATOLIAN HIEROGLYPH A478 +14616 ; [.5C07.0020.0002] # ANATOLIAN HIEROGLYPH A479 +14617 ; [.5C08.0020.0002] # ANATOLIAN HIEROGLYPH A480 +14618 ; [.5C09.0020.0002] # ANATOLIAN HIEROGLYPH A481 +14619 ; [.5C0A.0020.0002] # ANATOLIAN HIEROGLYPH A482 +1461A ; [.5C0B.0020.0002] # ANATOLIAN HIEROGLYPH A483 +1461B ; [.5C0C.0020.0002] # ANATOLIAN HIEROGLYPH A484 +1461C ; [.5C0D.0020.0002] # ANATOLIAN HIEROGLYPH A485 +1461D ; [.5C0E.0020.0002] # ANATOLIAN HIEROGLYPH A486 +1461E ; [.5C0F.0020.0002] # ANATOLIAN HIEROGLYPH A487 +1461F ; [.5C10.0020.0002] # ANATOLIAN HIEROGLYPH A488 +14620 ; [.5C11.0020.0002] # ANATOLIAN HIEROGLYPH A489 +14621 ; [.5C12.0020.0002] # ANATOLIAN HIEROGLYPH A490 +14622 ; [.5C13.0020.0002] # ANATOLIAN HIEROGLYPH A491 +14623 ; [.5C14.0020.0002] # ANATOLIAN HIEROGLYPH A492 +14624 ; [.5C15.0020.0002] # ANATOLIAN HIEROGLYPH A493 +14625 ; [.5C16.0020.0002] # ANATOLIAN HIEROGLYPH A494 +14626 ; [.5C17.0020.0002] # ANATOLIAN HIEROGLYPH A495 +14627 ; [.5C18.0020.0002] # ANATOLIAN HIEROGLYPH A496 +14628 ; [.5C19.0020.0002] # ANATOLIAN HIEROGLYPH A497 +14629 ; [.5C1A.0020.0002] # ANATOLIAN HIEROGLYPH A501 +1462A ; [.5C1B.0020.0002] # ANATOLIAN HIEROGLYPH A502 +1462B ; [.5C1C.0020.0002] # ANATOLIAN HIEROGLYPH A503 +1462C ; [.5C1D.0020.0002] # ANATOLIAN HIEROGLYPH A504 +1462D ; [.5C1E.0020.0002] # ANATOLIAN HIEROGLYPH A505 +1462E ; [.5C1F.0020.0002] # ANATOLIAN HIEROGLYPH A506 +1462F ; [.5C20.0020.0002] # ANATOLIAN HIEROGLYPH A507 +14630 ; [.5C21.0020.0002] # ANATOLIAN HIEROGLYPH A508 +14631 ; [.5C22.0020.0002] # ANATOLIAN HIEROGLYPH A509 +14632 ; [.5C23.0020.0002] # ANATOLIAN HIEROGLYPH A510 +14633 ; [.5C24.0020.0002] # ANATOLIAN HIEROGLYPH A511 +14634 ; [.5C25.0020.0002] # ANATOLIAN HIEROGLYPH A512 +14635 ; [.5C26.0020.0002] # ANATOLIAN HIEROGLYPH A513 +14636 ; [.5C27.0020.0002] # ANATOLIAN HIEROGLYPH A514 +14637 ; [.5C28.0020.0002] # ANATOLIAN HIEROGLYPH A515 +14638 ; [.5C29.0020.0002] # ANATOLIAN HIEROGLYPH A516 +14639 ; [.5C2A.0020.0002] # ANATOLIAN HIEROGLYPH A517 +1463A ; [.5C2B.0020.0002] # ANATOLIAN HIEROGLYPH A518 +1463B ; [.5C2C.0020.0002] # ANATOLIAN HIEROGLYPH A519 +1463C ; [.5C2D.0020.0002] # ANATOLIAN HIEROGLYPH A520 +1463D ; [.5C2E.0020.0002] # ANATOLIAN HIEROGLYPH A521 +1463E ; [.5C2F.0020.0002] # ANATOLIAN HIEROGLYPH A522 +1463F ; [.5C30.0020.0002] # ANATOLIAN HIEROGLYPH A523 +14640 ; [.5C31.0020.0002] # ANATOLIAN HIEROGLYPH A524 +14641 ; [.5C32.0020.0002] # ANATOLIAN HIEROGLYPH A525 +14642 ; [.5C33.0020.0002] # ANATOLIAN HIEROGLYPH A526 +14643 ; [.5C34.0020.0002] # ANATOLIAN HIEROGLYPH A527 +14644 ; [.5C35.0020.0002] # ANATOLIAN HIEROGLYPH A528 +14645 ; [.5C36.0020.0002] # ANATOLIAN HIEROGLYPH A529 +14646 ; [.5C37.0020.0002] # ANATOLIAN HIEROGLYPH A530 2F00 ; [.FB40.0020.0004][.CE00.0000.0000] # KANGXI RADICAL ONE -3220 ; [*0318.0020.0004][.FB40.0020.0004][.CE00.0000.0000][*0319.0020.0004] # PARENTHESIZED IDEOGRAPH ONE +3220 ; [*0328.0020.0004][.FB40.0020.0004][.CE00.0000.0000][*0329.0020.0004] # PARENTHESIZED IDEOGRAPH ONE 3280 ; [.FB40.0020.0006][.CE00.0000.0000] # CIRCLED IDEOGRAPH ONE 3192 ; [.FB40.0020.0014][.CE00.0000.0000] # IDEOGRAPHIC ANNOTATION ONE MARK 1F229 ; [.FB40.0020.001C][.CE00.0000.0000] # SQUARED CJK UNIFIED IDEOGRAPH-4E00 319C ; [.FB40.0020.0014][.CE01.0000.0000] # IDEOGRAPHIC ANNOTATION FOURTH MARK -3226 ; [*0318.0020.0004][.FB40.0020.0004][.CE03.0000.0000][*0319.0020.0004] # PARENTHESIZED IDEOGRAPH SEVEN +3226 ; [*0328.0020.0004][.FB40.0020.0004][.CE03.0000.0000][*0329.0020.0004] # PARENTHESIZED IDEOGRAPH SEVEN 3286 ; [.FB40.0020.0006][.CE03.0000.0000] # CIRCLED IDEOGRAPH SEVEN -3222 ; [*0318.0020.0004][.FB40.0020.0004][.CE09.0000.0000][*0319.0020.0004] # PARENTHESIZED IDEOGRAPH THREE -1F241 ; [*037A.0020.0004][.FB40.0020.0004][.CE09.0000.0000][*037B.0020.0004] # TORTOISE SHELL BRACKETED CJK UNIFIED IDEOGRAPH-4E09 +3222 ; [*0328.0020.0004][.FB40.0020.0004][.CE09.0000.0000][*0329.0020.0004] # PARENTHESIZED IDEOGRAPH THREE +1F241 ; [*038A.0020.0004][.FB40.0020.0004][.CE09.0000.0000][*038B.0020.0004] # TORTOISE SHELL BRACKETED CJK UNIFIED IDEOGRAPH-4E09 3282 ; [.FB40.0020.0006][.CE09.0000.0000] # CIRCLED IDEOGRAPH THREE 3194 ; [.FB40.0020.0014][.CE09.0000.0000] # IDEOGRAPHIC ANNOTATION THREE MARK 1F22A ; [.FB40.0020.001C][.CE09.0000.0000] # SQUARED CJK UNIFIED IDEOGRAPH-4E09 @@ -29843,7 +31609,7 @@ FA70 ; [.FB40.0020.0002][.CE26.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-FA70 1F22D ; [.FB40.0020.001C][.CE2D.0000.0000] # SQUARED CJK UNIFIED IDEOGRAPH-4E2D F905 ; [.FB40.0020.0002][.CE32.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-F905 2F02 ; [.FB40.0020.0004][.CE36.0000.0000] # KANGXI RADICAL DOT -2E80 ; [.FB40.0020.0004][.CE36.0000.0000][.0000.0111.0004] # CJK RADICAL REPEAT +2E80 ; [.FB40.0020.0004][.CE36.0000.0000][.0000.0118.0004] # CJK RADICAL REPEAT 2F801 ; [.FB40.0020.0002][.CE38.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F801 F95E ; [.FB40.0020.0002][.CE39.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-F95E 2F800 ; [.FB40.0020.0002][.CE3D.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F800 @@ -29851,21 +31617,21 @@ F95E ; [.FB40.0020.0002][.CE39.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-F95E 2F802 ; [.FB40.0020.0002][.CE41.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F802 2F04 ; [.FB40.0020.0004][.CE59.0000.0000] # KANGXI RADICAL SECOND 319A ; [.FB40.0020.0014][.CE59.0000.0000] # IDEOGRAPHIC ANNOTATION SECOND MARK -2E84 ; [.FB40.0020.0004][.CE59.0000.0000][.0000.0111.0004] # CJK RADICAL SECOND THREE +2E84 ; [.FB40.0020.0004][.CE59.0000.0000][.0000.0118.0004] # CJK RADICAL SECOND THREE 2E83 ; [.FB40.0020.0004][.CE5A.0000.0000] # CJK RADICAL SECOND TWO 2E82 ; [.FB40.0020.0004][.CE5B.0000.0000] # CJK RADICAL SECOND ONE -3228 ; [*0318.0020.0004][.FB40.0020.0004][.CE5D.0000.0000][*0319.0020.0004] # PARENTHESIZED IDEOGRAPH NINE +3228 ; [*0328.0020.0004][.FB40.0020.0004][.CE5D.0000.0000][*0329.0020.0004] # PARENTHESIZED IDEOGRAPH NINE 3288 ; [.FB40.0020.0006][.CE5D.0000.0000] # CIRCLED IDEOGRAPH NINE F91B ; [.FB40.0020.0002][.CE82.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-F91B 2F05 ; [.FB40.0020.0004][.CE85.0000.0000] # KANGXI RADICAL HOOK F9BA ; [.FB40.0020.0002][.CE86.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-F9BA 2F06 ; [.FB40.0020.0004][.CE8C.0000.0000] # KANGXI RADICAL TWO -3221 ; [*0318.0020.0004][.FB40.0020.0004][.CE8C.0000.0000][*0319.0020.0004] # PARENTHESIZED IDEOGRAPH TWO -1F242 ; [*037A.0020.0004][.FB40.0020.0004][.CE8C.0000.0000][*037B.0020.0004] # TORTOISE SHELL BRACKETED CJK UNIFIED IDEOGRAPH-4E8C +3221 ; [*0328.0020.0004][.FB40.0020.0004][.CE8C.0000.0000][*0329.0020.0004] # PARENTHESIZED IDEOGRAPH TWO +1F242 ; [*038A.0020.0004][.FB40.0020.0004][.CE8C.0000.0000][*038B.0020.0004] # TORTOISE SHELL BRACKETED CJK UNIFIED IDEOGRAPH-4E8C 3281 ; [.FB40.0020.0006][.CE8C.0000.0000] # CIRCLED IDEOGRAPH TWO 3193 ; [.FB40.0020.0014][.CE8C.0000.0000] # IDEOGRAPHIC ANNOTATION TWO MARK 1F214 ; [.FB40.0020.001C][.CE8C.0000.0000] # SQUARED CJK UNIFIED IDEOGRAPH-4E8C -3224 ; [*0318.0020.0004][.FB40.0020.0004][.CE94.0000.0000][*0319.0020.0004] # PARENTHESIZED IDEOGRAPH FIVE +3224 ; [*0328.0020.0004][.FB40.0020.0004][.CE94.0000.0000][*0329.0020.0004] # PARENTHESIZED IDEOGRAPH FIVE 3284 ; [.FB40.0020.0006][.CE94.0000.0000] # CIRCLED IDEOGRAPH FIVE 2F07 ; [.FB40.0020.0004][.CEA0.0000.0000] # KANGXI RADICAL LID 1F218 ; [.FB40.0020.001C][.CEA4.0000.0000] # SQUARED CJK UNIFIED IDEOGRAPH-4EA4 @@ -29875,11 +31641,12 @@ F977 ; [.FB40.0020.0002][.CEAE.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-F977 2E85 ; [.FB40.0020.0004][.CEBB.0000.0000] # CJK RADICAL PERSON F9FD ; [.FB40.0020.0002][.CEC0.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-F9FD 2F819 ; [.FB40.0020.0002][.CECC.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F819 -3239 ; [*0318.0020.0004][.FB40.0020.0004][.CEE3.0000.0000][*0319.0020.0004] # PARENTHESIZED IDEOGRAPH REPRESENT +3239 ; [*0328.0020.0004][.FB40.0020.0004][.CEE3.0000.0000][*0329.0020.0004] # PARENTHESIZED IDEOGRAPH REPRESENT F9A8 ; [.FB40.0020.0002][.CEE4.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-F9A8 -323D ; [*0318.0020.0004][.FB40.0020.0004][.CF01.0000.0000][*0319.0020.0004] # PARENTHESIZED IDEOGRAPH ENTERPRISE +32FF ; [.FB40.0020.001C][.CEE4.0000.0000][.FB40.0020.001C][.D48C.0000.0000] # SQUARE ERA NAME REIWA +323D ; [*0328.0020.0004][.FB40.0020.0004][.CF01.0000.0000][*0329.0020.0004] # PARENTHESIZED IDEOGRAPH ENTERPRISE 32AD ; [.FB40.0020.0006][.CF01.0000.0000] # CIRCLED IDEOGRAPH ENTERPRISE -3241 ; [*0318.0020.0004][.FB40.0020.0004][.CF11.0000.0000][*0319.0020.0004] # PARENTHESIZED IDEOGRAPH REST +3241 ; [*0328.0020.0004][.FB40.0020.0004][.CF11.0000.0000][*0329.0020.0004] # PARENTHESIZED IDEOGRAPH REST 32A1 ; [.FB40.0020.0006][.CF11.0000.0000] # CIRCLED IDEOGRAPH REST 2F804 ; [.FB40.0020.0002][.CF60.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F804 FA73 ; [.FB40.0020.0002][.CF80.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-FA73 @@ -29910,15 +31677,15 @@ FA32 ; [.FB40.0020.0002][.D14D.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-FA32 FA72 ; [.FB40.0020.0002][.D168.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-FA72 F978 ; [.FB40.0020.0002][.D169.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-F978 2F0B ; [.FB40.0020.0004][.D16B.0000.0000] # KANGXI RADICAL EIGHT -3227 ; [*0318.0020.0004][.FB40.0020.0004][.D16B.0000.0000][*0319.0020.0004] # PARENTHESIZED IDEOGRAPH EIGHT +3227 ; [*0328.0020.0004][.FB40.0020.0004][.D16B.0000.0000][*0329.0020.0004] # PARENTHESIZED IDEOGRAPH EIGHT 3287 ; [.FB40.0020.0006][.D16B.0000.0000] # CIRCLED IDEOGRAPH EIGHT F9D1 ; [.FB40.0020.0002][.D16D.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-F9D1 -3225 ; [*0318.0020.0004][.FB40.0020.0004][.D16D.0000.0000][*0319.0020.0004] # PARENTHESIZED IDEOGRAPH SIX +3225 ; [*0328.0020.0004][.FB40.0020.0004][.D16D.0000.0000][*0329.0020.0004] # PARENTHESIZED IDEOGRAPH SIX 3285 ; [.FB40.0020.0006][.D16D.0000.0000] # CIRCLED IDEOGRAPH SIX 2F811 ; [.FB40.0020.0002][.D177.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F811 FA75 ; [.FB40.0020.0002][.D180.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-FA75 2F0C ; [.FB40.0020.0004][.D182.0000.0000] # KANGXI RADICAL DOWN BOX -2E86 ; [.FB40.0020.0004][.D182.0000.0000][.0000.0111.0004] # CJK RADICAL BOX +2E86 ; [.FB40.0020.0004][.D182.0000.0000][.0000.0118.0004] # CJK RADICAL BOX 2F815 ; [.FB40.0020.0002][.D18D.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F815 1F21E ; [.FB40.0020.001C][.D18D.0000.0000] # SQUARED CJK UNIFIED IDEOGRAPH-518D 2F8D2 ; [.FB40.0020.0002][.D192.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F8D2 @@ -29937,11 +31704,11 @@ F955 ; [.FB40.0020.0002][.D1CC.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-F955 F954 ; [.FB40.0020.0002][.D1DC.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-F954 FA15 ; [.FB40.0020.0002][.D1DE.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-FA15 2F0F ; [.FB40.0020.0004][.D1E0.0000.0000] # KANGXI RADICAL TABLE -2E87 ; [.FB40.0020.0004][.D1E0.0000.0000][.0000.0111.0004] # CJK RADICAL TABLE +2E87 ; [.FB40.0020.0004][.D1E0.0000.0000][.0000.0118.0004] # CJK RADICAL TABLE 2F81D ; [.FB40.0020.0002][.D1F5.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F81D 2F10 ; [.FB40.0020.0004][.D1F5.0000.0000] # KANGXI RADICAL OPEN BOX 2F11 ; [.FB40.0020.0004][.D200.0000.0000] # KANGXI RADICAL KNIFE -2E88 ; [.FB40.0020.0004][.D200.0000.0000][.0000.0111.0004] # CJK RADICAL KNIFE ONE +2E88 ; [.FB40.0020.0004][.D200.0000.0000][.0000.0118.0004] # CJK RADICAL KNIFE ONE 2E89 ; [.FB40.0020.0004][.D202.0000.0000] # CJK RADICAL KNIFE TWO 2F81E ; [.FB40.0020.0002][.D203.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F81E FA00 ; [.FB40.0020.0002][.D207.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-FA00 @@ -29961,14 +31728,14 @@ F98A ; [.FB40.0020.0002][.D29B.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-F98A 2F12 ; [.FB40.0020.0004][.D29B.0000.0000] # KANGXI RADICAL POWER F99D ; [.FB40.0020.0002][.D2A3.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-F99D 2F992 ; [.FB40.0020.0002][.D2B3.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F992 -3238 ; [*0318.0020.0004][.FB40.0020.0004][.D2B4.0000.0000][*0319.0020.0004] # PARENTHESIZED IDEOGRAPH LABOR +3238 ; [*0328.0020.0004][.FB40.0020.0004][.D2B4.0000.0000][*0329.0020.0004] # PARENTHESIZED IDEOGRAPH LABOR 3298 ; [.FB40.0020.0006][.D2B4.0000.0000] # CIRCLED IDEOGRAPH LABOR FA76 ; [.FB40.0020.0002][.D2C7.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-FA76 2F825 ; [.FB40.0020.0002][.D2C7.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F825 FA33 ; [.FB40.0020.0002][.D2C9.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-FA33 2F826 ; [.FB40.0020.0002][.D2C9.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F826 F952 ; [.FB40.0020.0002][.D2D2.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-F952 -1F247 ; [*037A.0020.0004][.FB40.0020.0004][.D2DD.0000.0000][*037B.0020.0004] # TORTOISE SHELL BRACKETED CJK UNIFIED IDEOGRAPH-52DD +1F247 ; [*038A.0020.0004][.FB40.0020.0004][.D2DD.0000.0000][*038B.0020.0004] # TORTOISE SHELL BRACKETED CJK UNIFIED IDEOGRAPH-52DD F92F ; [.FB40.0020.0002][.D2DE.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-F92F FA34 ; [.FB40.0020.0002][.D2E4.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-FA34 2F827 ; [.FB40.0020.0002][.D2E4.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F827 @@ -29987,20 +31754,20 @@ F963 ; [.FB40.0020.0002][.D317.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-F963 F9EB ; [.FB40.0020.0002][.D33F.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-F9EB 2F17 ; [.FB40.0020.0004][.D341.0000.0000] # KANGXI RADICAL TEN 3038 ; [.FB40.0020.0004][.D341.0000.0000] # HANGZHOU NUMERAL TEN -3229 ; [*0318.0020.0004][.FB40.0020.0004][.D341.0000.0000][*0319.0020.0004] # PARENTHESIZED IDEOGRAPH TEN +3229 ; [*0328.0020.0004][.FB40.0020.0004][.D341.0000.0000][*0329.0020.0004] # PARENTHESIZED IDEOGRAPH TEN 3289 ; [.FB40.0020.0006][.D341.0000.0000] # CIRCLED IDEOGRAPH TEN 3039 ; [.FB40.0020.0004][.D344.0000.0000] # HANGZHOU NUMERAL TWENTY 303A ; [.FB40.0020.0004][.D345.0000.0000] # HANGZHOU NUMERAL THIRTY 2F82C ; [.FB40.0020.0002][.D349.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F82C FA35 ; [.FB40.0020.0002][.D351.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-FA35 2F82D ; [.FB40.0020.0002][.D351.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F82D -323F ; [*0318.0020.0004][.FB40.0020.0004][.D354.0000.0000][*0319.0020.0004] # PARENTHESIZED IDEOGRAPH ALLIANCE +323F ; [*0328.0020.0004][.FB40.0020.0004][.D354.0000.0000][*0329.0020.0004] # PARENTHESIZED IDEOGRAPH ALLIANCE 32AF ; [.FB40.0020.0006][.D354.0000.0000] # CIRCLED IDEOGRAPH ALLIANCE 2F82E ; [.FB40.0020.0002][.D35A.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F82E 2F18 ; [.FB40.0020.0004][.D35C.0000.0000] # KANGXI RADICAL DIVINATION -2E8A ; [.FB40.0020.0004][.D35C.0000.0000][.0000.0111.0004] # CJK RADICAL DIVINATION +2E8A ; [.FB40.0020.0004][.D35C.0000.0000][.0000.0118.0004] # CJK RADICAL DIVINATION 2F19 ; [.FB40.0020.0004][.D369.0000.0000] # KANGXI RADICAL SEAL -2E8B ; [.FB40.0020.0004][.D369.0000.0000][.0000.0111.0004] # CJK RADICAL SEAL +2E8B ; [.FB40.0020.0004][.D369.0000.0000][.0000.0118.0004] # CJK RADICAL SEAL 329E ; [.FB40.0020.0006][.D370.0000.0000] # CIRCLED IDEOGRAPH PRINT 2F82F ; [.FB40.0020.0002][.D373.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F82F F91C ; [.FB40.0020.0002][.D375.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-F91C @@ -30009,7 +31776,7 @@ F91C ; [.FB40.0020.0002][.D375.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-F91C 2F832 ; [.FB40.0020.0002][.D37F.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F832 2F833 ; [.FB40.0020.0002][.D37F.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F833 2F1A ; [.FB40.0020.0004][.D382.0000.0000] # KANGXI RADICAL CLIFF -2E81 ; [.FB40.0020.0004][.D382.0000.0000][.0000.0111.0004] # CJK RADICAL CLIFF +2E81 ; [.FB40.0020.0004][.D382.0000.0000][.0000.0118.0004] # CJK RADICAL CLIFF 2F1B ; [.FB40.0020.0004][.D3B6.0000.0000] # KANGXI RADICAL PRIVATE F96B ; [.FB40.0020.0002][.D3C3.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-F96B 2F1C ; [.FB40.0020.0004][.D3C8.0000.0000] # KANGXI RADICAL AGAIN @@ -30025,7 +31792,7 @@ F906 ; [.FB40.0020.0002][.D3E5.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-F906 1F22E ; [.FB40.0020.001C][.D3F3.0000.0000] # SQUARED CJK UNIFIED IDEOGRAPH-53F3 2F83B ; [.FB40.0020.0002][.D406.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F83B 1F234 ; [.FB40.0020.001C][.D408.0000.0000] # SQUARED CJK UNIFIED IDEOGRAPH-5408 -3234 ; [*0318.0020.0004][.FB40.0020.0004][.D40D.0000.0000][*0319.0020.0004] # PARENTHESIZED IDEOGRAPH NAME +3234 ; [*0328.0020.0004][.FB40.0020.0004][.D40D.0000.0000][*0329.0020.0004] # PARENTHESIZED IDEOGRAPH NAME 3294 ; [.FB40.0020.0006][.D40D.0000.0000] # CIRCLED IDEOGRAPH NAME F9DE ; [.FB40.0020.0002][.D40F.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-F9DE F9ED ; [.FB40.0020.0002][.D41D.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-F9ED @@ -30034,7 +31801,7 @@ F9ED ; [.FB40.0020.0002][.D41D.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-F9ED F980 ; [.FB40.0020.0002][.D442.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-F980 2F83E ; [.FB40.0020.0002][.D448.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F83E 2F83F ; [.FB40.0020.0002][.D468.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F83F -323A ; [*0318.0020.0004][.FB40.0020.0004][.D47C.0000.0000][*0319.0020.0004] # PARENTHESIZED IDEOGRAPH CALL +323A ; [*0328.0020.0004][.FB40.0020.0004][.D47C.0000.0000][*0329.0020.0004] # PARENTHESIZED IDEOGRAPH CALL 2F83C ; [.FB40.0020.0002][.D49E.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F83C 2F840 ; [.FB40.0020.0002][.D4A2.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F840 F99E ; [.FB40.0020.0002][.D4BD.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-F99E @@ -30063,14 +31830,14 @@ FA37 ; [.FB40.0020.0002][.D606.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-FA37 FA38 ; [.FB40.0020.0002][.D668.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-FA38 2F84F ; [.FB40.0020.0002][.D674.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F84F 2F1E ; [.FB40.0020.0004][.D6D7.0000.0000] # KANGXI RADICAL ENCLOSURE -3223 ; [*0318.0020.0004][.FB40.0020.0004][.D6DB.0000.0000][*0319.0020.0004] # PARENTHESIZED IDEOGRAPH FOUR +3223 ; [*0328.0020.0004][.FB40.0020.0004][.D6DB.0000.0000][*0329.0020.0004] # PARENTHESIZED IDEOGRAPH FOUR 3283 ; [.FB40.0020.0006][.D6DB.0000.0000] # CIRCLED IDEOGRAPH FOUR 3195 ; [.FB40.0020.0014][.D6DB.0000.0000] # IDEOGRAPHIC ANNOTATION FOUR MARK F9A9 ; [.FB40.0020.0002][.D6F9.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-F9A9 2F84B ; [.FB40.0020.0002][.D716.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F84B 2F84D ; [.FB40.0020.0002][.D717.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F84D 2F1F ; [.FB40.0020.0004][.D71F.0000.0000] # KANGXI RADICAL EARTH -322F ; [*0318.0020.0004][.FB40.0020.0004][.D71F.0000.0000][*0319.0020.0004] # PARENTHESIZED IDEOGRAPH EARTH +322F ; [*0328.0020.0004][.FB40.0020.0004][.D71F.0000.0000][*0329.0020.0004] # PARENTHESIZED IDEOGRAPH EARTH 328F ; [.FB40.0020.0006][.D71F.0000.0000] # CIRCLED IDEOGRAPH EARTH 319E ; [.FB40.0020.0014][.D730.0000.0000] # IDEOGRAPHIC ANNOTATION EARTH MARK 2F855 ; [.FB40.0020.0002][.D78B.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F855 @@ -30126,11 +31893,11 @@ FA81 ; [.FB40.0020.0002][.DB28.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-FA81 2F86B ; [.FB40.0020.0002][.DB3E.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F86B 2F26 ; [.FB40.0020.0004][.DB50.0000.0000] # KANGXI RADICAL CHILD 1F211 ; [.FB40.0020.001C][.DB57.0000.0000] # SQUARED CJK UNIFIED IDEOGRAPH-5B57 -323B ; [*0318.0020.0004][.FB40.0020.0004][.DB66.0000.0000][*0319.0020.0004] # PARENTHESIZED IDEOGRAPH STUDY +323B ; [*0328.0020.0004][.FB40.0020.0004][.DB66.0000.0000][*0329.0020.0004] # PARENTHESIZED IDEOGRAPH STUDY 32AB ; [.FB40.0020.0006][.DB66.0000.0000] # CIRCLED IDEOGRAPH STUDY 2F27 ; [.FB40.0020.0004][.DB80.0000.0000] # KANGXI RADICAL ROOF FA04 ; [.FB40.0020.0002][.DB85.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-FA04 -1F243 ; [*037A.0020.0004][.FB40.0020.0004][.DB89.0000.0000][*037B.0020.0004] # TORTOISE SHELL BRACKETED CJK UNIFIED IDEOGRAPH-5B89 +1F243 ; [*038A.0020.0004][.FB40.0020.0004][.DB89.0000.0000][*038B.0020.0004] # TORTOISE SHELL BRACKETED CJK UNIFIED IDEOGRAPH-5B89 32AA ; [.FB40.0020.0006][.DB97.0000.0000] # CIRCLED IDEOGRAPH RELIGION 2F86D ; [.FB40.0020.0002][.DBC3.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F86D 2F86E ; [.FB40.0020.0002][.DBD8.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F86E @@ -30143,14 +31910,14 @@ F9BC ; [.FB40.0020.0002][.DBEE.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-F9BC 2F872 ; [.FB40.0020.0002][.DBFF.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F872 2F873 ; [.FB40.0020.0002][.DC06.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F873 2F29 ; [.FB40.0020.0004][.DC0F.0000.0000] # KANGXI RADICAL SMALL -2E8C ; [.FB40.0020.0004][.DC0F.0000.0000][.0000.0111.0004] # CJK RADICAL SMALL ONE -2E8D ; [.FB40.0020.0004][.DC0F.0000.0000][.0000.0112.0004] # CJK RADICAL SMALL TWO +2E8C ; [.FB40.0020.0004][.DC0F.0000.0000][.0000.0118.0004] # CJK RADICAL SMALL ONE +2E8D ; [.FB40.0020.0004][.DC0F.0000.0000][.0000.0119.0004] # CJK RADICAL SMALL TWO 2F875 ; [.FB40.0020.0002][.DC22.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F875 2E90 ; [.FB40.0020.0004][.DC22.0000.0000] # CJK RADICAL LAME THREE 2F2A ; [.FB40.0020.0004][.DC22.0000.0000] # KANGXI RADICAL LAME -2E8E ; [.FB40.0020.0004][.DC22.0000.0000][.0000.0111.0004] # CJK RADICAL LAME ONE +2E8E ; [.FB40.0020.0004][.DC22.0000.0000][.0000.0118.0004] # CJK RADICAL LAME ONE 2E8F ; [.FB40.0020.0004][.DC23.0000.0000] # CJK RADICAL LAME TWO -2E91 ; [.FB40.0020.0004][.DC23.0000.0000][.0000.0111.0004] # CJK RADICAL LAME FOUR +2E91 ; [.FB40.0020.0004][.DC23.0000.0000][.0000.0118.0004] # CJK RADICAL LAME FOUR 2F2B ; [.FB40.0020.0004][.DC38.0000.0000] # KANGXI RADICAL CORPSE F9BD ; [.FB40.0020.0002][.DC3F.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-F9BD 2F877 ; [.FB40.0020.0002][.DC60.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F877 @@ -30211,7 +31978,7 @@ F943 ; [.FB40.0020.0002][.DF04.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-F943 2F894 ; [.FB40.0020.0002][.DF22.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F894 2F895 ; [.FB40.0020.0002][.DF22.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F895 2F39 ; [.FB40.0020.0004][.DF50.0000.0000] # KANGXI RADICAL SNOUT -2E95 ; [.FB40.0020.0004][.DF50.0000.0000][.0000.0111.0004] # CJK RADICAL SNOUT TWO +2E95 ; [.FB40.0020.0004][.DF50.0000.0000][.0000.0118.0004] # CJK RADICAL SNOUT TWO 2E94 ; [.FB40.0020.0004][.DF51.0000.0000] # CJK RADICAL SNOUT ONE 2F874 ; [.FB40.0020.0002][.DF53.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F874 2F3A ; [.FB40.0020.0004][.DF61.0000.0000] # KANGXI RADICAL BRISTLE @@ -30226,7 +31993,7 @@ F9D8 ; [.FB40.0020.0002][.DF8B.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-F9D8 F966 ; [.FB40.0020.0002][.DFA9.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-F966 FA85 ; [.FB40.0020.0002][.DFAD.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-FA85 2F3C ; [.FB40.0020.0004][.DFC3.0000.0000] # KANGXI RADICAL HEART -2E97 ; [.FB40.0020.0004][.DFC3.0000.0000][.0000.0111.0004] # CJK RADICAL HEART TWO +2E97 ; [.FB40.0020.0004][.DFC3.0000.0000][.0000.0118.0004] # CJK RADICAL HEART TWO 2E96 ; [.FB40.0020.0004][.DFC4.0000.0000] # CJK RADICAL HEART ONE 2F89D ; [.FB40.0020.0002][.DFCD.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F89D 2F89E ; [.FB40.0020.0002][.DFD7.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F89E @@ -30274,7 +32041,7 @@ FA8C ; [.FB40.0020.0002][.E234.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-FA8C 2F3F ; [.FB40.0020.0004][.E24B.0000.0000] # KANGXI RADICAL HAND 1F210 ; [.FB40.0020.001C][.E24B.0000.0000] # SQUARED CJK UNIFIED IDEOGRAPH-624B 2E98 ; [.FB40.0020.0004][.E24C.0000.0000] # CJK RADICAL HAND -1F245 ; [*037A.0020.0004][.FB40.0020.0004][.E253.0000.0000][*037B.0020.0004] # TORTOISE SHELL BRACKETED CJK UNIFIED IDEOGRAPH-6253 +1F245 ; [*038A.0020.0004][.FB40.0020.0004][.E253.0000.0000][*038B.0020.0004] # TORTOISE SHELL BRACKETED CJK UNIFIED IDEOGRAPH-6253 1F231 ; [.FB40.0020.001C][.E253.0000.0000] # SQUARED CJK UNIFIED IDEOGRAPH-6253 2F8B4 ; [.FB40.0020.0002][.E25D.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F8B4 1F227 ; [.FB40.0020.001C][.E295.0000.0000] # SQUARED CJK UNIFIED IDEOGRAPH-6295 @@ -30312,7 +32079,7 @@ F930 ; [.FB40.0020.0002][.E4C4.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-F930 FA41 ; [.FB40.0020.0002][.E54F.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-FA41 2F8C8 ; [.FB40.0020.0002][.E54F.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F8C8 FA90 ; [.FB40.0020.0002][.E556.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-FA90 -1F248 ; [*037A.0020.0004][.FB40.0020.0004][.E557.0000.0000][*037B.0020.0004] # TORTOISE SHELL BRACKETED CJK UNIFIED IDEOGRAPH-6557 +1F248 ; [*038A.0020.0004][.FB40.0020.0004][.E557.0000.0000][*038B.0020.0004] # TORTOISE SHELL BRACKETED CJK UNIFIED IDEOGRAPH-6557 2F8C9 ; [.FB40.0020.0002][.E56C.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F8C9 F969 ; [.FB40.0020.0002][.E578.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-F969 2F42 ; [.FB40.0020.0004][.E587.0000.0000] # KANGXI RADICAL SCRIPT @@ -30329,9 +32096,9 @@ F983 ; [.FB40.0020.0002][.E5C5.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-F983 FA42 ; [.FB40.0020.0002][.E5E2.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-FA42 2F8CB ; [.FB40.0020.0002][.E5E3.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F8CB 2F47 ; [.FB40.0020.0004][.E5E5.0000.0000] # KANGXI RADICAL SUN -3230 ; [*0318.0020.0004][.FB40.0020.0004][.E5E5.0000.0000][*0319.0020.0004] # PARENTHESIZED IDEOGRAPH SUN +3230 ; [*0328.0020.0004][.FB40.0020.0004][.E5E5.0000.0000][*0329.0020.0004] # PARENTHESIZED IDEOGRAPH SUN 3290 ; [.FB40.0020.0006][.E5E5.0000.0000] # CIRCLED IDEOGRAPH SUN -2E9C ; [.FB40.0020.0004][.E5E5.0000.0000][.0000.0111.0004] # CJK RADICAL SUN +2E9C ; [.FB40.0020.0004][.E5E5.0000.0000][.0000.0118.0004] # CJK RADICAL SUN 337E ; [.FB40.0020.001C][.E60E.0000.0000][.FB40.0020.001C][.ECBB.0000.0000] # SQUARE ERA NAME MEIZI F9E0 ; [.FB40.0020.0002][.E613.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-F9E0 1F219 ; [.FB40.0020.001C][.E620.0000.0000] # SQUARED CJK UNIFIED IDEOGRAPH-6620 @@ -30350,11 +32117,11 @@ F901 ; [.FB40.0020.0002][.E6F4.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-F901 2F8CC ; [.FB40.0020.0002][.E6F8.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F8CC 2F8D4 ; [.FB40.0020.0002][.E700.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F8D4 2F49 ; [.FB40.0020.0004][.E708.0000.0000] # KANGXI RADICAL MOON -322A ; [*0318.0020.0004][.FB40.0020.0004][.E708.0000.0000][*0319.0020.0004] # PARENTHESIZED IDEOGRAPH MOON +322A ; [*0328.0020.0004][.FB40.0020.0004][.E708.0000.0000][*0329.0020.0004] # PARENTHESIZED IDEOGRAPH MOON 328A ; [.FB40.0020.0006][.E708.0000.0000] # CIRCLED IDEOGRAPH MOON 1F237 ; [.FB40.0020.001C][.E708.0000.0000] # SQUARED CJK UNIFIED IDEOGRAPH-6708 -2E9D ; [.FB40.0020.0004][.E708.0000.0000][.0000.0111.0004] # CJK RADICAL MOON -3232 ; [*0318.0020.0004][.FB40.0020.0004][.E709.0000.0000][*0319.0020.0004] # PARENTHESIZED IDEOGRAPH HAVE +2E9D ; [.FB40.0020.0004][.E708.0000.0000][.0000.0118.0004] # CJK RADICAL MOON +3232 ; [*0328.0020.0004][.FB40.0020.0004][.E709.0000.0000][*0329.0020.0004] # PARENTHESIZED IDEOGRAPH HAVE 3292 ; [.FB40.0020.0006][.E709.0000.0000] # CIRCLED IDEOGRAPH HAVE 1F236 ; [.FB40.0020.001C][.E709.0000.0000] # SQUARED CJK UNIFIED IDEOGRAPH-6709 F929 ; [.FB40.0020.0002][.E717.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-F929 @@ -30364,9 +32131,9 @@ FA93 ; [.FB40.0020.0002][.E71B.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-FA93 2F8D9 ; [.FB40.0020.0002][.E71B.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F8D9 2F8DA ; [.FB40.0020.0002][.E721.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F8DA 2F4A ; [.FB40.0020.0004][.E728.0000.0000] # KANGXI RADICAL TREE -322D ; [*0318.0020.0004][.FB40.0020.0004][.E728.0000.0000][*0319.0020.0004] # PARENTHESIZED IDEOGRAPH WOOD +322D ; [*0328.0020.0004][.FB40.0020.0004][.E728.0000.0000][*0329.0020.0004] # PARENTHESIZED IDEOGRAPH WOOD 328D ; [.FB40.0020.0006][.E728.0000.0000] # CIRCLED IDEOGRAPH WOOD -1F240 ; [*037A.0020.0004][.FB40.0020.0004][.E72C.0000.0000][*037B.0020.0004] # TORTOISE SHELL BRACKETED CJK UNIFIED IDEOGRAPH-672C +1F240 ; [*038A.0020.0004][.FB40.0020.0004][.E72C.0000.0000][*038B.0020.0004] # TORTOISE SHELL BRACKETED CJK UNIFIED IDEOGRAPH-672C F9E1 ; [.FB40.0020.0002][.E74E.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-F9E1 2F8DC ; [.FB40.0020.0002][.E753.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F8DC FA94 ; [.FB40.0020.0002][.E756.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-FA94 @@ -30378,7 +32145,7 @@ F9C9 ; [.FB40.0020.0002][.E7F3.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-F9C9 2F8DF ; [.FB40.0020.0002][.E7FA.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F8DF F9DA ; [.FB40.0020.0002][.E817.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-F9DA 2F8E5 ; [.FB40.0020.0002][.E81F.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F8E5 -3231 ; [*0318.0020.0004][.FB40.0020.0004][.E82A.0000.0000][*0319.0020.0004] # PARENTHESIZED IDEOGRAPH STOCK +3231 ; [*0328.0020.0004][.FB40.0020.0004][.E82A.0000.0000][*0329.0020.0004] # PARENTHESIZED IDEOGRAPH STOCK 3291 ; [.FB40.0020.0006][.E82A.0000.0000] # CIRCLED IDEOGRAPH STOCK 337F ; [.FB40.0020.001C][.E82A.0000.0000][.FB40.0020.001C][.DF0F.0000.0000][.FB40.0020.001C][.CF1A.0000.0000][.FB40.0020.001C][.F93E.0000.0000] # SQUARE CORPORATION 2F8E1 ; [.FB40.0020.0002][.E852.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F8E1 @@ -30408,7 +32175,7 @@ F91D ; [.FB40.0020.0002][.EB04.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-F91D F98C ; [.FB40.0020.0002][.EB77.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-F98C FA95 ; [.FB40.0020.0002][.EB79.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-FA95 2F4D ; [.FB40.0020.0004][.EB79.0000.0000] # KANGXI RADICAL DEATH -2E9E ; [.FB40.0020.0004][.EB7A.0000.0000][.0000.0111.0004] # CJK RADICAL DEATH +2E9E ; [.FB40.0020.0004][.EB7A.0000.0000][.0000.0118.0004] # CJK RADICAL DEATH 2F8F4 ; [.FB40.0020.0002][.EB9F.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F8F4 F9A5 ; [.FB40.0020.0002][.EBAE.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-F9A5 2F4E ; [.FB40.0020.0004][.EBB3.0000.0000] # KANGXI RADICAL WEAPON @@ -30424,7 +32191,7 @@ FA96 ; [.FB40.0020.0002][.EBBA.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-FA96 2EA0 ; [.FB40.0020.0004][.EC11.0000.0000] # CJK RADICAL CIVILIAN 2F53 ; [.FB40.0020.0004][.EC14.0000.0000] # KANGXI RADICAL STEAM 2F54 ; [.FB40.0020.0004][.EC34.0000.0000] # KANGXI RADICAL WATER -322C ; [*0318.0020.0004][.FB40.0020.0004][.EC34.0000.0000][*0319.0020.0004] # PARENTHESIZED IDEOGRAPH WATER +322C ; [*0328.0020.0004][.FB40.0020.0004][.EC34.0000.0000][*0329.0020.0004] # PARENTHESIZED IDEOGRAPH WATER 328C ; [.FB40.0020.0006][.EC34.0000.0000] # CIRCLED IDEOGRAPH WATER 2EA1 ; [.FB40.0020.0004][.EC35.0000.0000] # CJK RADICAL WATER ONE 2EA2 ; [.FB40.0020.0004][.EC3A.0000.0000] # CJK RADICAL WATER TWO @@ -30480,7 +32247,7 @@ FA9B ; [.FB40.0020.0002][.F01E.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-FA9B 2F913 ; [.FB40.0020.0002][.F039.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F913 2F917 ; [.FB40.0020.0002][.F04A.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F917 2F55 ; [.FB40.0020.0004][.F06B.0000.0000] # KANGXI RADICAL FIRE -322B ; [*0318.0020.0004][.FB40.0020.0004][.F06B.0000.0000][*0319.0020.0004] # PARENTHESIZED IDEOGRAPH FIRE +322B ; [*0328.0020.0004][.FB40.0020.0004][.F06B.0000.0000][*0329.0020.0004] # PARENTHESIZED IDEOGRAPH FIRE 328B ; [.FB40.0020.0006][.F06B.0000.0000] # CIRCLED IDEOGRAPH FIRE 2EA3 ; [.FB40.0020.0004][.F06C.0000.0000] # CJK RADICAL FIRE 2F835 ; [.FB40.0020.0002][.F070.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F835 @@ -30488,7 +32255,7 @@ FA9B ; [.FB40.0020.0002][.F01E.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-FA9B 2F918 ; [.FB40.0020.0002][.F07D.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F918 F9FB ; [.FB40.0020.0002][.F099.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-F9FB 2F91A ; [.FB40.0020.0002][.F0AD.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F91A -1F244 ; [*037A.0020.0004][.FB40.0020.0004][.F0B9.0000.0000][*037B.0020.0004] # TORTOISE SHELL BRACKETED CJK UNIFIED IDEOGRAPH-70B9 +1F244 ; [*038A.0020.0004][.FB40.0020.0004][.F0B9.0000.0000][*038B.0020.0004] # TORTOISE SHELL BRACKETED CJK UNIFIED IDEOGRAPH-70B9 F99F ; [.FB40.0020.0002][.F0C8.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-F99F F916 ; [.FB40.0020.0002][.F0D9.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-F916 1F21A ; [.FB40.0020.001C][.F121.0000.0000] # SQUARED CJK UNIFIED IDEOGRAPH-7121 @@ -30505,7 +32272,7 @@ F91E ; [.FB40.0020.0002][.F21B.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-F91E 2F56 ; [.FB40.0020.0004][.F22A.0000.0000] # KANGXI RADICAL CLAW FA49 ; [.FB40.0020.0002][.F22B.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-FA49 2EA4 ; [.FB40.0020.0004][.F22B.0000.0000] # CJK RADICAL PAW ONE -2EA5 ; [.FB40.0020.0004][.F22B.0000.0000][.0000.0111.0004] # CJK RADICAL PAW TWO +2EA5 ; [.FB40.0020.0004][.F22B.0000.0000][.0000.0118.0004] # CJK RADICAL PAW TWO FA9E ; [.FB40.0020.0002][.F235.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-FA9E 2F921 ; [.FB40.0020.0002][.F235.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F921 2F57 ; [.FB40.0020.0004][.F236.0000.0000] # KANGXI RADICAL FATHER @@ -30515,9 +32282,9 @@ FA9E ; [.FB40.0020.0002][.F235.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-FA9E 2F922 ; [.FB40.0020.0002][.F250.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F922 2F5B ; [.FB40.0020.0004][.F259.0000.0000] # KANGXI RADICAL FANG 2F5C ; [.FB40.0020.0004][.F25B.0000.0000] # KANGXI RADICAL COW -2EA7 ; [.FB40.0020.0004][.F25B.0000.0000][.0000.0111.0004] # CJK RADICAL COW +2EA7 ; [.FB40.0020.0004][.F25B.0000.0000][.0000.0118.0004] # CJK RADICAL COW F946 ; [.FB40.0020.0002][.F262.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-F946 -3235 ; [*0318.0020.0004][.FB40.0020.0004][.F279.0000.0000][*0319.0020.0004] # PARENTHESIZED IDEOGRAPH SPECIAL +3235 ; [*0328.0020.0004][.FB40.0020.0004][.F279.0000.0000][*0329.0020.0004] # PARENTHESIZED IDEOGRAPH SPECIAL 3295 ; [.FB40.0020.0006][.F279.0000.0000] # CIRCLED IDEOGRAPH SPECIAL 2F924 ; [.FB40.0020.0002][.F280.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F924 2F925 ; [.FB40.0020.0002][.F295.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F925 @@ -30535,7 +32302,7 @@ F961 ; [.FB40.0020.0002][.F387.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-F961 F9DB ; [.FB40.0020.0002][.F387.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-F9DB 2F5F ; [.FB40.0020.0004][.F389.0000.0000] # KANGXI RADICAL JADE 2F929 ; [.FB40.0020.0002][.F38B.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F929 -2EA9 ; [.FB40.0020.0004][.F38B.0000.0000][.0000.0111.0004] # CJK RADICAL JADE +2EA9 ; [.FB40.0020.0004][.F38B.0000.0000][.0000.0118.0004] # CJK RADICAL JADE 2F92B ; [.FB40.0020.0002][.F3A5.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F92B F9AD ; [.FB40.0020.0002][.F3B2.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-F9AD F917 ; [.FB40.0020.0002][.F3DE.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-F917 @@ -30570,7 +32337,7 @@ F976 ; [.FB40.0020.0002][.F565.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-F976 F962 ; [.FB40.0020.0002][.F570.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-F962 2F938 ; [.FB40.0020.0002][.F570.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F938 2F66 ; [.FB40.0020.0004][.F58B.0000.0000] # KANGXI RADICAL BOLT OF CLOTH -2EAA ; [.FB40.0020.0004][.F58B.0000.0000][.0000.0111.0004] # CJK RADICAL BOLT OF CLOTH +2EAA ; [.FB40.0020.0004][.F58B.0000.0000][.0000.0118.0004] # CJK RADICAL BOLT OF CLOTH 2F67 ; [.FB40.0020.0004][.F592.0000.0000] # KANGXI RADICAL SICKNESS F9E5 ; [.FB40.0020.0002][.F5E2.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-F9E5 2F93A ; [.FB40.0020.0002][.F610.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F93A @@ -30584,13 +32351,13 @@ F90E ; [.FB40.0020.0002][.F669.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-F90E 2F6B ; [.FB40.0020.0004][.F6BF.0000.0000] # KANGXI RADICAL DISH FA17 ; [.FB40.0020.0002][.F6CA.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-FA17 FAA6 ; [.FB40.0020.0002][.F6CA.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-FAA6 -1F246 ; [*037A.0020.0004][.FB40.0020.0004][.F6D7.0000.0000][*037B.0020.0004] # TORTOISE SHELL BRACKETED CJK UNIFIED IDEOGRAPH-76D7 +1F246 ; [*038A.0020.0004][.FB40.0020.0004][.F6D7.0000.0000][*038B.0020.0004] # TORTOISE SHELL BRACKETED CJK UNIFIED IDEOGRAPH-76D7 FAA7 ; [.FB40.0020.0002][.F6DB.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-FAA7 -323C ; [*0318.0020.0004][.FB40.0020.0004][.F6E3.0000.0000][*0319.0020.0004] # PARENTHESIZED IDEOGRAPH SUPERVISE +323C ; [*0328.0020.0004][.FB40.0020.0004][.F6E3.0000.0000][*0329.0020.0004] # PARENTHESIZED IDEOGRAPH SUPERVISE 32AC ; [.FB40.0020.0006][.F6E3.0000.0000] # CIRCLED IDEOGRAPH SUPERVISE F933 ; [.FB40.0020.0002][.F6E7.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-F933 2F6C ; [.FB40.0020.0004][.F6EE.0000.0000] # KANGXI RADICAL EYE -2EAB ; [.FB40.0020.0004][.F6EE.0000.0000][.0000.0111.0004] # CJK RADICAL EYE +2EAB ; [.FB40.0020.0004][.F6EE.0000.0000][.0000.0118.0004] # CJK RADICAL EYE FAA8 ; [.FB40.0020.0002][.F6F4.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-FAA8 2F940 ; [.FB40.0020.0002][.F6F4.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F940 F96D ; [.FB40.0020.0002][.F701.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-F96D @@ -30616,11 +32383,11 @@ FAAB ; [.FB40.0020.0002][.F8CC.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-FAAB F964 ; [.FB40.0020.0002][.F8FB.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-F964 F985 ; [.FB40.0020.0002][.F92A.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-F985 2F70 ; [.FB40.0020.0004][.F93A.0000.0000] # KANGXI RADICAL SPIRIT -2EAC ; [.FB40.0020.0004][.F93A.0000.0000][.0000.0111.0004] # CJK RADICAL SPIRIT ONE +2EAC ; [.FB40.0020.0004][.F93A.0000.0000][.0000.0118.0004] # CJK RADICAL SPIRIT ONE 2EAD ; [.FB40.0020.0004][.F93B.0000.0000] # CJK RADICAL SPIRIT TWO FA18 ; [.FB40.0020.0002][.F93C.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-FA18 FA4C ; [.FB40.0020.0002][.F93E.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-FA4C -3233 ; [*0318.0020.0004][.FB40.0020.0004][.F93E.0000.0000][*0319.0020.0004] # PARENTHESIZED IDEOGRAPH SOCIETY +3233 ; [*0328.0020.0004][.FB40.0020.0004][.F93E.0000.0000][*0329.0020.0004] # PARENTHESIZED IDEOGRAPH SOCIETY 3293 ; [.FB40.0020.0006][.F93E.0000.0000] # CIRCLED IDEOGRAPH SOCIETY FA4E ; [.FB40.0020.0002][.F948.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-FA4E FA4D ; [.FB40.0020.0002][.F949.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-FA4D @@ -30628,11 +32395,11 @@ FA4F ; [.FB40.0020.0002][.F950.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-FA4F FA50 ; [.FB40.0020.0002][.F956.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-FA50 2F953 ; [.FB40.0020.0002][.F956.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F953 FA51 ; [.FB40.0020.0002][.F95D.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-FA51 -3237 ; [*0318.0020.0004][.FB40.0020.0004][.F95D.0000.0000][*0319.0020.0004] # PARENTHESIZED IDEOGRAPH CONGRATULATION +3237 ; [*0328.0020.0004][.FB40.0020.0004][.F95D.0000.0000][*0329.0020.0004] # PARENTHESIZED IDEOGRAPH CONGRATULATION 3297 ; [.FB40.0020.0006][.F95D.0000.0000] # CIRCLED IDEOGRAPH CONGRATULATION FA19 ; [.FB40.0020.0002][.F95E.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-FA19 FA1A ; [.FB40.0020.0002][.F965.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-FA1A -3240 ; [*0318.0020.0004][.FB40.0020.0004][.F96D.0000.0000][*0319.0020.0004] # PARENTHESIZED IDEOGRAPH FESTIVAL +3240 ; [*0328.0020.0004][.FB40.0020.0004][.F96D.0000.0000][*0329.0020.0004] # PARENTHESIZED IDEOGRAPH FESTIVAL F93C ; [.FB40.0020.0002][.F97F.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-F93C 1F232 ; [.FB40.0020.001C][.F981.0000.0000] # SQUARED CJK UNIFIED IDEOGRAPH-7981 FA52 ; [.FB40.0020.0002][.F98D.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-FA52 @@ -30658,7 +32425,7 @@ F9F7 ; [.FB40.0020.0002][.FACB.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-F9F7 2F74 ; [.FB40.0020.0004][.FACB.0000.0000] # KANGXI RADICAL STAND 2F95F ; [.FB40.0020.0002][.FAEE.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F95F 2F75 ; [.FB40.0020.0004][.FAF9.0000.0000] # KANGXI RADICAL BAMBOO -2EAE ; [.FB40.0020.0004][.FAF9.0000.0000][.0000.0111.0004] # CJK RADICAL BAMBOO +2EAE ; [.FB40.0020.0004][.FAF9.0000.0000][.0000.0118.0004] # CJK RADICAL BAMBOO F9F8 ; [.FB40.0020.0002][.FB20.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-F9F8 3247 ; [.FB40.0020.0006][.FB8F.0000.0000] # CIRCLED IDEOGRAPH KOTO FA56 ; [.FB40.0020.0002][.FBC0.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-FA56 @@ -30701,17 +32468,17 @@ FA59 ; [.FB40.0020.0002][.FE41.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-FA59 FAB1 ; [.FB40.0020.0002][.FF3E.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-FAB1 2F79 ; [.FB40.0020.0004][.FF51.0000.0000] # KANGXI RADICAL NET 2EB2 ; [.FB40.0020.0004][.FF52.0000.0000] # CJK RADICAL NET TWO -2EB5 ; [.FB40.0020.0004][.FF52.0000.0000][.0000.0111.0004] # CJK RADICAL MESH +2EB5 ; [.FB40.0020.0004][.FF52.0000.0000][.0000.0118.0004] # CJK RADICAL MESH 2EB1 ; [.FB40.0020.0004][.FF53.0000.0000] # CJK RADICAL NET ONE -2EB3 ; [.FB40.0020.0004][.FF53.0000.0000][.0000.0111.0004] # CJK RADICAL NET THREE -2EB4 ; [.FB40.0020.0004][.FF53.0000.0000][.0000.0112.0004] # CJK RADICAL NET FOUR +2EB3 ; [.FB40.0020.0004][.FF53.0000.0000][.0000.0118.0004] # CJK RADICAL NET THREE +2EB4 ; [.FB40.0020.0004][.FF53.0000.0000][.0000.0119.0004] # CJK RADICAL NET FOUR FA5A ; [.FB40.0020.0002][.FF72.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-FA5A F9E6 ; [.FB40.0020.0002][.FF79.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-F9E6 2F976 ; [.FB40.0020.0002][.FF7A.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F976 F90F ; [.FB40.0020.0002][.FF85.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-F90F 2F7A ; [.FB40.0020.0004][.FF8A.0000.0000] # KANGXI RADICAL SHEEP -2EB6 ; [.FB40.0020.0004][.FF8A.0000.0000][.0000.0111.0004] # CJK RADICAL SHEEP -2EB7 ; [.FB40.0020.0004][.FF8A.0000.0000][.0000.0112.0004] # CJK RADICAL RAM +2EB6 ; [.FB40.0020.0004][.FF8A.0000.0000][.0000.0118.0004] # CJK RADICAL SHEEP +2EB7 ; [.FB40.0020.0004][.FF8A.0000.0000][.0000.0119.0004] # CJK RADICAL RAM 2EB8 ; [.FB40.0020.0004][.FF8B.0000.0000] # CJK RADICAL EWE 2F978 ; [.FB40.0020.0002][.FF95.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F978 F9AF ; [.FB40.0020.0002][.FF9A.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-F9AF @@ -30733,10 +32500,10 @@ F997 ; [.FB41.0020.0002][.806F.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-F997 2F97F ; [.FB41.0020.0002][.8070.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F97F F945 ; [.FB41.0020.0002][.807E.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-F945 2F80 ; [.FB41.0020.0004][.807F.0000.0000] # KANGXI RADICAL BRUSH -2EBB ; [.FB41.0020.0004][.807F.0000.0000][.0000.0111.0004] # CJK RADICAL BRUSH TWO +2EBB ; [.FB41.0020.0004][.807F.0000.0000][.0000.0118.0004] # CJK RADICAL BRUSH TWO 2EBA ; [.FB41.0020.0004][.8080.0000.0000] # CJK RADICAL BRUSH ONE 2F81 ; [.FB41.0020.0004][.8089.0000.0000] # KANGXI RADICAL MEAT -2EBC ; [.FB41.0020.0004][.8089.0000.0000][.0000.0111.0004] # CJK RADICAL MEAT +2EBC ; [.FB41.0020.0004][.8089.0000.0000][.0000.0118.0004] # CJK RADICAL MEAT F953 ; [.FB41.0020.0002][.808B.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-F953 2F8D6 ; [.FB41.0020.0002][.80AD.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F8D6 2F982 ; [.FB41.0020.0002][.80B2.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F982 @@ -30746,12 +32513,12 @@ F926 ; [.FB41.0020.0002][.81D8.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-F926 2F82 ; [.FB41.0020.0004][.81E3.0000.0000] # KANGXI RADICAL MINISTER F9F6 ; [.FB41.0020.0002][.81E8.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-F9F6 2F83 ; [.FB41.0020.0004][.81EA.0000.0000] # KANGXI RADICAL SELF -3242 ; [*0318.0020.0004][.FB41.0020.0004][.81EA.0000.0000][*0319.0020.0004] # PARENTHESIZED IDEOGRAPH SELF +3242 ; [*0328.0020.0004][.FB41.0020.0004][.81EA.0000.0000][*0329.0020.0004] # PARENTHESIZED IDEOGRAPH SELF FA5C ; [.FB41.0020.0002][.81ED.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-FA5C 2F84 ; [.FB41.0020.0004][.81F3.0000.0000] # KANGXI RADICAL ARRIVE -3243 ; [*0318.0020.0004][.FB41.0020.0004][.81F3.0000.0000][*0319.0020.0004] # PARENTHESIZED IDEOGRAPH REACH +3243 ; [*0328.0020.0004][.FB41.0020.0004][.81F3.0000.0000][*0329.0020.0004] # PARENTHESIZED IDEOGRAPH REACH 2F85 ; [.FB41.0020.0004][.81FC.0000.0000] # KANGXI RADICAL MORTAR -2EBD ; [.FB41.0020.0004][.81FC.0000.0000][.0000.0111.0004] # CJK RADICAL MORTAR +2EBD ; [.FB41.0020.0004][.81FC.0000.0000][.0000.0118.0004] # CJK RADICAL MORTAR 2F893 ; [.FB41.0020.0002][.8201.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F893 2F98B ; [.FB41.0020.0002][.8201.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F98B 2F98C ; [.FB41.0020.0002][.8204.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F98C @@ -30766,8 +32533,8 @@ F97C ; [.FB41.0020.0002][.826F.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-F97C FA5D ; [.FB41.0020.0002][.8279.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-FA5D FA5E ; [.FB41.0020.0002][.8279.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-FA5E 2EBE ; [.FB41.0020.0004][.8279.0000.0000] # CJK RADICAL GRASS ONE -2EBF ; [.FB41.0020.0004][.8279.0000.0000][.0000.0111.0004] # CJK RADICAL GRASS TWO -2EC0 ; [.FB41.0020.0004][.8279.0000.0000][.0000.0112.0004] # CJK RADICAL GRASS THREE +2EBF ; [.FB41.0020.0004][.8279.0000.0000][.0000.0118.0004] # CJK RADICAL GRASS TWO +2EC0 ; [.FB41.0020.0004][.8279.0000.0000][.0000.0119.0004] # CJK RADICAL GRASS THREE 2F990 ; [.FB41.0020.0002][.828B.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F990 2F98F ; [.FB41.0020.0002][.8291.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F98F 2F991 ; [.FB41.0020.0002][.829D.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F991 @@ -30857,7 +32624,7 @@ FAB8 ; [.FB41.0020.0002][.8996.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-FAB8 2EC5 ; [.FB41.0020.0004][.89C1.0000.0000] # CJK RADICAL C-SIMPLIFIED SEE 2EC6 ; [.FB41.0020.0004][.89D2.0000.0000] # CJK RADICAL SIMPLIFIED HORN 2F93 ; [.FB41.0020.0004][.89D2.0000.0000] # KANGXI RADICAL HORN -2EC7 ; [.FB41.0020.0004][.89D2.0000.0000][.0000.0111.0004] # CJK RADICAL HORN +2EC7 ; [.FB41.0020.0004][.89D2.0000.0000][.0000.0118.0004] # CJK RADICAL HORN 1F216 ; [.FB41.0020.001C][.89E3.0000.0000] # SQUARED CJK UNIFIED IDEOGRAPH-89E3 2F94 ; [.FB41.0020.0004][.8A00.0000.0000] # KANGXI RADICAL SPEECH 2F9CF ; [.FB41.0020.0002][.8AA0.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F9CF @@ -30889,13 +32656,13 @@ F900 ; [.FB41.0020.0002][.8C48.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-F900 2F97 ; [.FB41.0020.0004][.8C55.0000.0000] # KANGXI RADICAL PIG 2F98 ; [.FB41.0020.0004][.8C78.0000.0000] # KANGXI RADICAL BADGER 2F99 ; [.FB41.0020.0004][.8C9D.0000.0000] # KANGXI RADICAL SHELL -3236 ; [*0318.0020.0004][.FB41.0020.0004][.8CA1.0000.0000][*0319.0020.0004] # PARENTHESIZED IDEOGRAPH FINANCIAL +3236 ; [*0328.0020.0004][.FB41.0020.0004][.8CA1.0000.0000][*0329.0020.0004] # PARENTHESIZED IDEOGRAPH FINANCIAL 3296 ; [.FB41.0020.0006][.8CA1.0000.0000] # CIRCLED IDEOGRAPH FINANCIAL 1F223 ; [.FB41.0020.001C][.8CA9.0000.0000] # SQUARED CJK UNIFIED IDEOGRAPH-8CA9 2F9D4 ; [.FB41.0020.0002][.8CAB.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F9D4 2F9D5 ; [.FB41.0020.0002][.8CC1.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F9D5 F948 ; [.FB41.0020.0002][.8CC2.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-F948 -323E ; [*0318.0020.0004][.FB41.0020.0004][.8CC7.0000.0000][*0319.0020.0004] # PARENTHESIZED IDEOGRAPH RESOURCE +323E ; [*0328.0020.0004][.FB41.0020.0004][.8CC7.0000.0000][*0329.0020.0004] # PARENTHESIZED IDEOGRAPH RESOURCE 32AE ; [.FB41.0020.0006][.8CC7.0000.0000] # CIRCLED IDEOGRAPH RESOURCE F903 ; [.FB41.0020.0002][.8CC8.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-F903 FA64 ; [.FB41.0020.0002][.8CD3.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-FA64 @@ -30908,7 +32675,7 @@ FAC1 ; [.FB41.0020.0002][.8D08.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-FAC1 1F230 ; [.FB41.0020.001C][.8D70.0000.0000] # SQUARED CJK UNIFIED IDEOGRAPH-8D70 2F9D7 ; [.FB41.0020.0002][.8D77.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F9D7 2F9C ; [.FB41.0020.0004][.8DB3.0000.0000] # KANGXI RADICAL FOOT -2ECA ; [.FB41.0020.0004][.8DB3.0000.0000][.0000.0111.0004] # CJK RADICAL FOOT +2ECA ; [.FB41.0020.0004][.8DB3.0000.0000][.0000.0118.0004] # CJK RADICAL FOOT 2F9DB ; [.FB41.0020.0002][.8DBC.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F9DB 2F9DA ; [.FB41.0020.0002][.8DCB.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F9DA F937 ; [.FB41.0020.0002][.8DEF.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-F937 @@ -30931,8 +32698,8 @@ F971 ; [.FB41.0020.0002][.8FB0.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-F971 2FA1 ; [.FB41.0020.0004][.8FB5.0000.0000] # KANGXI RADICAL WALK FA66 ; [.FB41.0020.0002][.8FB6.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-FA66 2ECC ; [.FB41.0020.0004][.8FB6.0000.0000] # CJK RADICAL SIMPLIFIED WALK -2ECD ; [.FB41.0020.0004][.8FB6.0000.0000][.0000.0111.0004] # CJK RADICAL WALK ONE -2ECE ; [.FB41.0020.0004][.8FB6.0000.0000][.0000.0112.0004] # CJK RADICAL WALK TWO +2ECD ; [.FB41.0020.0004][.8FB6.0000.0000][.0000.0118.0004] # CJK RADICAL WALK ONE +2ECE ; [.FB41.0020.0004][.8FB6.0000.0000][.0000.0119.0004] # CJK RADICAL WALK TWO F99A ; [.FB41.0020.0002][.9023.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-F99A FA25 ; [.FB41.0020.0002][.9038.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-FA25 FA67 ; [.FB41.0020.0002][.9038.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-FA67 @@ -30942,7 +32709,7 @@ FAC3 ; [.FB41.0020.0002][.9072.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-FAC3 F9C3 ; [.FB41.0020.0002][.907C.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-F9C3 F913 ; [.FB41.0020.0002][.908F.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-F913 2FA2 ; [.FB41.0020.0004][.9091.0000.0000] # KANGXI RADICAL CITY -2ECF ; [.FB41.0020.0004][.9091.0000.0000][.0000.0111.0004] # CJK RADICAL CITY +2ECF ; [.FB41.0020.0004][.9091.0000.0000][.0000.0118.0004] # CJK RADICAL CITY 2F9E2 ; [.FB41.0020.0002][.9094.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F9E2 F92C ; [.FB41.0020.0002][.90CE.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-F92C FA2E ; [.FB41.0020.0002][.90DE.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-FA2E @@ -30961,7 +32728,7 @@ F9E9 ; [.FB41.0020.0002][.91CC.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-F9E9 F97E ; [.FB41.0020.0002][.91CF.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-F97E F90A ; [.FB41.0020.0002][.91D1.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-F90A 2FA6 ; [.FB41.0020.0004][.91D1.0000.0000] # KANGXI RADICAL GOLD -322E ; [*0318.0020.0004][.FB41.0020.0004][.91D1.0000.0000][*0319.0020.0004] # PARENTHESIZED IDEOGRAPH METAL +322E ; [*0328.0020.0004][.FB41.0020.0004][.91D1.0000.0000][*0329.0020.0004] # PARENTHESIZED IDEOGRAPH METAL 328E ; [.FB41.0020.0006][.91D1.0000.0000] # CIRCLED IDEOGRAPH METAL F9B1 ; [.FB41.0020.0002][.9234.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-F9B1 2F9E7 ; [.FB41.0020.0002][.9238.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F9E7 @@ -30984,7 +32751,7 @@ F986 ; [.FB41.0020.0002][.95AD.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-F986 2F9F0 ; [.FB41.0020.0002][.95B7.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F9F0 2ED4 ; [.FB41.0020.0004][.95E8.0000.0000] # CJK RADICAL C-SIMPLIFIED GATE 2FA9 ; [.FB41.0020.0004][.961C.0000.0000] # KANGXI RADICAL MOUND -2ED5 ; [.FB41.0020.0004][.961C.0000.0000][.0000.0111.0004] # CJK RADICAL MOUND ONE +2ED5 ; [.FB41.0020.0004][.961C.0000.0000][.0000.0118.0004] # CJK RADICAL MOUND ONE 2ED6 ; [.FB41.0020.0004][.961D.0000.0000] # CJK RADICAL MOUND TWO F9C6 ; [.FB41.0020.0002][.962E.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-F9C6 F951 ; [.FB41.0020.0002][.964B.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-F951 @@ -31003,7 +32770,7 @@ F9EA ; [.FB41.0020.0002][.96E2.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-F9EA FA68 ; [.FB41.0020.0002][.96E3.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-FA68 FAC7 ; [.FB41.0020.0002][.96E3.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-FAC7 2FAC ; [.FB41.0020.0004][.96E8.0000.0000] # KANGXI RADICAL RAIN -2ED7 ; [.FB41.0020.0004][.96E8.0000.0000][.0000.0111.0004] # CJK RADICAL RAIN +2ED7 ; [.FB41.0020.0004][.96E8.0000.0000][.0000.0118.0004] # CJK RADICAL RAIN F9B2 ; [.FB41.0020.0002][.96F6.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-F9B2 F949 ; [.FB41.0020.0002][.96F7.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-F949 2F9F5 ; [.FB41.0020.0002][.9723.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2F9F5 @@ -31042,7 +32809,7 @@ F9D0 ; [.FB41.0020.0002][.985E.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-F9D0 2EDD ; [.FB41.0020.0004][.98DF.0000.0000] # CJK RADICAL EAT ONE 2FB7 ; [.FB41.0020.0004][.98DF.0000.0000] # KANGXI RADICAL EAT 2EDF ; [.FB41.0020.0004][.98E0.0000.0000] # CJK RADICAL EAT THREE -2EDE ; [.FB41.0020.0004][.98E0.0000.0000][.0000.0111.0004] # CJK RADICAL EAT TWO +2EDE ; [.FB41.0020.0004][.98E0.0000.0000][.0000.0118.0004] # CJK RADICAL EAT TWO 2FA02 ; [.FB41.0020.0002][.98E2.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2FA02 FA2A ; [.FB41.0020.0002][.98EF.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-FA2A FA2B ; [.FB41.0020.0002][.98FC.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-FA2B @@ -31050,7 +32817,7 @@ FA2C ; [.FB41.0020.0002][.9928.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-FA2C 2FA04 ; [.FB41.0020.0002][.9929.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2FA04 2EE0 ; [.FB41.0020.0004][.9963.0000.0000] # CJK RADICAL C-SIMPLIFIED EAT 2FB8 ; [.FB41.0020.0004][.9996.0000.0000] # KANGXI RADICAL HEAD -2EE1 ; [.FB41.0020.0004][.9996.0000.0000][.0000.0111.0004] # CJK RADICAL HEAD +2EE1 ; [.FB41.0020.0004][.9996.0000.0000][.0000.0118.0004] # CJK RADICAL HEAD 2FB9 ; [.FB41.0020.0004][.9999.0000.0000] # KANGXI RADICAL FRAGRANT 2FA05 ; [.FB41.0020.0002][.99A7.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2FA05 2FBA ; [.FB41.0020.0004][.99AC.0000.0000] # KANGXI RADICAL HORSE @@ -31060,7 +32827,7 @@ F91A ; [.FB41.0020.0002][.99F1.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-F91A F987 ; [.FB41.0020.0002][.9A6A.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-F987 2EE2 ; [.FB41.0020.0004][.9A6C.0000.0000] # CJK RADICAL C-SIMPLIFIED HORSE 2FBB ; [.FB41.0020.0004][.9AA8.0000.0000] # KANGXI RADICAL BONE -2EE3 ; [.FB41.0020.0004][.9AA8.0000.0000][.0000.0111.0004] # CJK RADICAL BONE +2EE3 ; [.FB41.0020.0004][.9AA8.0000.0000][.0000.0118.0004] # CJK RADICAL BONE 2FBC ; [.FB41.0020.0004][.9AD8.0000.0000] # KANGXI RADICAL TALL 2FBD ; [.FB41.0020.0004][.9ADF.0000.0000] # KANGXI RADICAL HAIR FACD ; [.FB41.0020.0002][.9B12.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-FACD @@ -31069,7 +32836,7 @@ FACD ; [.FB41.0020.0002][.9B12.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-FACD 2FBF ; [.FB41.0020.0004][.9B2F.0000.0000] # KANGXI RADICAL SACRIFICIAL WINE 2FC0 ; [.FB41.0020.0004][.9B32.0000.0000] # KANGXI RADICAL CAULDRON 2FC1 ; [.FB41.0020.0004][.9B3C.0000.0000] # KANGXI RADICAL GHOST -2EE4 ; [.FB41.0020.0004][.9B3C.0000.0000][.0000.0111.0004] # CJK RADICAL GHOST +2EE4 ; [.FB41.0020.0004][.9B3C.0000.0000][.0000.0118.0004] # CJK RADICAL GHOST 2FC2 ; [.FB41.0020.0004][.9B5A.0000.0000] # KANGXI RADICAL FISH F939 ; [.FB41.0020.0002][.9B6F.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-F939 2FA0B ; [.FB41.0020.0002][.9C40.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-2FA0B @@ -31083,7 +32850,7 @@ F93A ; [.FB41.0020.0002][.9DFA.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-F93A F920 ; [.FB41.0020.0002][.9E1E.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-F920 2EE6 ; [.FB41.0020.0004][.9E1F.0000.0000] # CJK RADICAL C-SIMPLIFIED BIRD 2FC4 ; [.FB41.0020.0004][.9E75.0000.0000] # KANGXI RADICAL SALT -2EE7 ; [.FB41.0020.0004][.9E75.0000.0000][.0000.0111.0004] # CJK RADICAL C-SIMPLIFIED SALT +2EE7 ; [.FB41.0020.0004][.9E75.0000.0000][.0000.0118.0004] # CJK RADICAL C-SIMPLIFIED SALT F940 ; [.FB41.0020.0002][.9E7F.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-F940 2FC5 ; [.FB41.0020.0004][.9E7F.0000.0000] # KANGXI RADICAL DEER F988 ; [.FB41.0020.0002][.9E97.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-F988 @@ -31112,22 +32879,22 @@ F989 ; [.FB41.0020.0002][.9ECE.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-F989 2FD0 ; [.FB41.0020.0004][.9F3B.0000.0000] # KANGXI RADICAL NOSE FAD8 ; [.FB41.0020.0002][.9F43.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-FAD8 2FD1 ; [.FB41.0020.0004][.9F4A.0000.0000] # KANGXI RADICAL EVEN -2EEB ; [.FB41.0020.0004][.9F4A.0000.0000][.0000.0111.0004] # CJK RADICAL J-SIMPLIFIED EVEN +2EEB ; [.FB41.0020.0004][.9F4A.0000.0000][.0000.0118.0004] # CJK RADICAL J-SIMPLIFIED EVEN 2EEC ; [.FB41.0020.0004][.9F50.0000.0000] # CJK RADICAL C-SIMPLIFIED EVEN 2FD2 ; [.FB41.0020.0004][.9F52.0000.0000] # KANGXI RADICAL TOOTH -2EED ; [.FB41.0020.0004][.9F52.0000.0000][.0000.0111.0004] # CJK RADICAL J-SIMPLIFIED TOOTH +2EED ; [.FB41.0020.0004][.9F52.0000.0000][.0000.0118.0004] # CJK RADICAL J-SIMPLIFIED TOOTH 2EEE ; [.FB41.0020.0004][.9F7F.0000.0000] # CJK RADICAL C-SIMPLIFIED TOOTH F9C4 ; [.FB41.0020.0002][.9F8D.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-F9C4 2FD3 ; [.FB41.0020.0004][.9F8D.0000.0000] # KANGXI RADICAL DRAGON -2EEF ; [.FB41.0020.0004][.9F8D.0000.0000][.0000.0111.0004] # CJK RADICAL J-SIMPLIFIED DRAGON +2EEF ; [.FB41.0020.0004][.9F8D.0000.0000][.0000.0118.0004] # CJK RADICAL J-SIMPLIFIED DRAGON FAD9 ; [.FB41.0020.0002][.9F8E.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-FAD9 2EF0 ; [.FB41.0020.0004][.9F99.0000.0000] # CJK RADICAL C-SIMPLIFIED DRAGON F907 ; [.FB41.0020.0002][.9F9C.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-F907 F908 ; [.FB41.0020.0002][.9F9C.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-F908 FACE ; [.FB41.0020.0002][.9F9C.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-FACE 2FD4 ; [.FB41.0020.0004][.9F9C.0000.0000] # KANGXI RADICAL TURTLE -2EF1 ; [.FB41.0020.0004][.9F9C.0000.0000][.0000.0111.0004] # CJK RADICAL TURTLE -2EF2 ; [.FB41.0020.0004][.9F9C.0000.0000][.0000.0112.0004] # CJK RADICAL J-SIMPLIFIED TURTLE +2EF1 ; [.FB41.0020.0004][.9F9C.0000.0000][.0000.0118.0004] # CJK RADICAL TURTLE +2EF2 ; [.FB41.0020.0004][.9F9C.0000.0000][.0000.0119.0004] # CJK RADICAL J-SIMPLIFIED TURTLE 2EF3 ; [.FB41.0020.0004][.9F9F.0000.0000] # CJK RADICAL C-SIMPLIFIED TURTLE 2FD5 ; [.FB41.0020.0004][.9FA0.0000.0000] # KANGXI RADICAL FLUTE FA0E ; [.FB41.0020.0002][.FA0E.0000.0000] # CJK COMPATIBILITY IDEOGRAPH-FA0E diff --git a/gnu/usr.bin/perl/cpan/Unicode-Collate/Makefile.PL b/gnu/usr.bin/perl/cpan/Unicode-Collate/Makefile.PL index 1cb39a88e0d..dcc35a9dc40 100644 --- a/gnu/usr.bin/perl/cpan/Unicode-Collate/Makefile.PL +++ b/gnu/usr.bin/perl/cpan/Unicode-Collate/Makefile.PL @@ -1,4 +1,7 @@ require 5.006001; + +use strict; +use warnings; use ExtUtils::MakeMaker; my $clean = {}; @@ -21,11 +24,11 @@ WriteMakefile( 'VERSION_FROM' => 'Collate.pm', # finds $VERSION 'clean' => $clean, 'PREREQ_PM' => { - Carp => 0, - File::Spec => 0, - XSLoader => 0, - constant => 0, - strict => 0, - warnings => 0, + 'Carp' => 0, + 'File::Spec' => 0, + 'XSLoader' => 0, + 'constant' => 0, + 'strict' => 0, + 'warnings' => 0, }, ); diff --git a/gnu/usr.bin/perl/cpan/Unicode-Collate/mkheader b/gnu/usr.bin/perl/cpan/Unicode-Collate/mkheader index 8d4076f1837..398bdd51d7f 100644 --- a/gnu/usr.bin/perl/cpan/Unicode-Collate/mkheader +++ b/gnu/usr.bin/perl/cpan/Unicode-Collate/mkheader @@ -18,15 +18,6 @@ use warnings; use Carp; use File::Spec; -BEGIN { - unless ("A" eq pack('U', 0x41)) { - die "Unicode::Collate cannot stringify a Unicode code point\n"; - } - unless (0x41 == unpack('U', 'A')) { - die "Unicode::Collate cannot get a Unicode code point\n"; - } -} - use constant TRUE => 1; use constant FALSE => ""; use constant VCE_TEMPLATE => 'Cn4'; @@ -140,7 +131,8 @@ foreach my $tbl (@tripletable) { my $init = $tbl->{init}; open my $fh_h, ">$file" or croak "$PACKAGE: $file can't be made"; - binmode $fh_h; select $fh_h; + binmode $fh_h; + my $old_fh = select $fh_h; my %val; print << 'EOF'; @@ -195,6 +187,7 @@ EOF } print "};\n\n"; close $fh_h; + select $old_fh; } 1; diff --git a/gnu/usr.bin/perl/cpan/Unicode-Collate/t/contract.t b/gnu/usr.bin/perl/cpan/Unicode-Collate/t/contract.t index b8c55cabd78..8bc12a20613 100755 --- a/gnu/usr.bin/perl/cpan/Unicode-Collate/t/contract.t +++ b/gnu/usr.bin/perl/cpan/Unicode-Collate/t/contract.t @@ -1,13 +1,5 @@ BEGIN { - unless ('A' eq pack('U', 0x41)) { - print "1..0 # Unicode::Collate cannot pack a Unicode code point\n"; - exit 0; - } - unless (0x41 == unpack('U', 'A')) { - print "1..0 # Unicode::Collate cannot get a Unicode code point\n"; - exit 0; - } if ($ENV{PERL_CORE}) { chdir('t') if -d 't'; @INC = $^O eq 'MacOS' ? qw(::lib) : qw(../lib); @@ -31,6 +23,9 @@ use Unicode::Collate; ok(1); +sub _pack_U { Unicode::Collate::pack_U(@_) } +sub _unpack_U { Unicode::Collate::unpack_U(@_) } + ######################### our $kjeEntry = <<'ENTRIES'; @@ -103,7 +98,7 @@ ok($kjeNFD->eq("\x{45C}", "\x{43A}\x{301}\x{334}")); ok($aaNFD->lt("Z", "A\x{30A}\x{304}")); ok($aaNFD->eq("A", "A\x{304}\x{30A}")); -ok($aaNFD->eq(pack('U', 0xE5), "A\x{30A}\x{304}")); +ok($aaNFD->eq(_pack_U(0xE5), "A\x{30A}\x{304}")); ok($aaNFD->eq("A\x{304}", "A\x{304}\x{30A}")); ok($aaNFD->lt("Z", "A\x{327}\x{30A}")); ok($aaNFD->lt("Z", "A\x{30A}\x{327}")); @@ -120,7 +115,7 @@ ok($aaNFD->lt("Z", "A\x{30A}\x{31A}")); ok($aaPre->lt("Z", "A\x{30A}\x{304}")); ok($aaPre->eq("A", "A\x{304}\x{30A}")); -ok($aaPre->eq(pack('U', 0xE5), "A\x{30A}\x{304}")); +ok($aaPre->eq(_pack_U(0xE5), "A\x{30A}\x{304}")); ok($aaPre->eq("A\x{304}", "A\x{304}\x{30A}")); ok($aaPre->lt("Z", "A\x{327}\x{30A}")); ok($aaPre->lt("Z", "A\x{30A}\x{327}")); @@ -152,7 +147,7 @@ my $aaNoN = Unicode::Collate->new( ok($aaNoN->lt("Z", "A\x{30A}\x{304}")); ok($aaNoN->eq("A", "A\x{304}\x{30A}")); -ok($aaNoN->eq(pack('U', 0xE5), "A\x{30A}\x{304}")); +ok($aaNoN->eq(_pack_U(0xE5), "A\x{30A}\x{304}")); ok($aaNoN->eq("A\x{304}", "A\x{304}\x{30A}")); ok($aaNoN->eq("A", "A\x{327}\x{30A}")); ok($aaNoN->lt("Z", "A\x{30A}\x{327}")); diff --git a/gnu/usr.bin/perl/cpan/Unicode-Collate/t/ident.t b/gnu/usr.bin/perl/cpan/Unicode-Collate/t/ident.t index 4856ddea0d9..9f0d7be349e 100644 --- a/gnu/usr.bin/perl/cpan/Unicode-Collate/t/ident.t +++ b/gnu/usr.bin/perl/cpan/Unicode-Collate/t/ident.t @@ -1,13 +1,5 @@ BEGIN { - unless ('A' eq pack('U', 0x41)) { - print "1..0 # Unicode::Collate cannot pack a Unicode code point\n"; - exit 0; - } - unless (0x41 == unpack('U', 'A')) { - print "1..0 # Unicode::Collate cannot get a Unicode code point\n"; - exit 0; - } if ($ENV{PERL_CORE}) { chdir('t') if -d 't'; @INC = $^O eq 'MacOS' ? qw(::lib) : qw(../lib); @@ -31,6 +23,9 @@ use Unicode::Collate; ok(1); +sub _pack_U { Unicode::Collate::pack_U(@_) } +sub _unpack_U { Unicode::Collate::unpack_U(@_) } + ######################### my $Collator = Unicode::Collate->new( @@ -105,6 +100,8 @@ ok($Collator->viewSortKey("\x{200B}"), '[| | | | 0000 200B]'); ok($Collator->viewSortKey('a'), '[0A15 | 0020 | 0002 | FFFF | 0000 0061]'); +# 0061 FOR 'a' SHOULD BE A UNICODE CODE POINT, NOT A NATIVE CODE POINT. + ok($Collator->viewSortKey("\x{304C}"), '[1926 | 0020 013D | 000E 0002 | FFFF FFFF | 0000 304C]'); @@ -183,6 +180,8 @@ ok($Collator->viewSortKey("\x{200B}"), '[| | | | 0000 200B]'); ok($Collator->viewSortKey('a'), '[0A15 | 0020 | 0002 | FFFF | 0000 0061]'); +# 0061 FOR 'a' SHOULD BE A UNICODE CODE POINT, NOT A NATIVE CODE POINT. + ok($Collator->viewSortKey("\x{304C}"), '[1926 | 0020 013D | 000E 0002 | FFFF FFFF | 0000 304C]'); diff --git a/gnu/usr.bin/perl/cpan/Unicode-Collate/t/illegal.t b/gnu/usr.bin/perl/cpan/Unicode-Collate/t/illegal.t index c9ac7870168..9a85073dd83 100755 --- a/gnu/usr.bin/perl/cpan/Unicode-Collate/t/illegal.t +++ b/gnu/usr.bin/perl/cpan/Unicode-Collate/t/illegal.t @@ -1,36 +1,19 @@ BEGIN { - unless ('A' eq pack('U', 0x41)) { - print "1..0 # Unicode::Collate cannot pack a Unicode code point\n"; - exit 0; - } - unless (0x41 == unpack('U', 'A')) { - print "1..0 # Unicode::Collate cannot get a Unicode code point\n"; - exit 0; - } - if ($ENV{PERL_CORE}) { - chdir('t') if -d 't'; - @INC = $^O eq 'MacOS' ? qw(::lib) : qw(../lib); - } -} - - -BEGIN { - use Unicode::Collate; - -# unless (exists &Unicode::Collate::bootstrap or 5.008 <= $]) { -# print "1..0 # skipped: XSUB, or Perl 5.8.0 or later". -# " needed for this test\n"; unless (5.008 <= $]) { print "1..0 # skipped: Perl 5.8.0 or later needed for this test\n"; print $@; exit; } + if ($ENV{PERL_CORE}) { + chdir('t') if -d 't'; + @INC = $^O eq 'MacOS' ? qw(::lib) : qw(../lib); + } } use strict; use warnings; -BEGIN { $| = 1; print "1..156\n"; } # 81 + 5 x @Versions +BEGIN { $| = 1; print "1..176\n"; } # 81 + 5 x @Versions my $count = 0; sub ok ($;$) { my $p = my $r = shift; @@ -41,8 +24,13 @@ sub ok ($;$) { print $p ? "ok" : "not ok", ' ', ++$count, "\n"; } +use Unicode::Collate; + ok(1); +sub _pack_U { Unicode::Collate::pack_U(@_) } +sub _unpack_U { Unicode::Collate::unpack_U(@_) } + ######################### no warnings 'utf8'; @@ -192,7 +180,8 @@ my $out = Unicode::Collate->new( overrideOut => sub { 0xFFFD }, ); -my @Versions = (8, 9, 11, 14, 16, 18, 20, 22, 24, 26, 28, 30, 32, 34, 36); +my @Versions = ( 8, 9, 11, 14, 16, 18, 20, 22, 24, 26, + 28, 30, 32, 34, 36, 38, 40, 41, 43); for my $v (@Versions) { $out->change(UCA_Version => $v); diff --git a/gnu/usr.bin/perl/cpan/Unicode-Collate/t/loc_es.t b/gnu/usr.bin/perl/cpan/Unicode-Collate/t/loc_es.t index ef61cc620fb..96db8333682 100644 --- a/gnu/usr.bin/perl/cpan/Unicode-Collate/t/loc_es.t +++ b/gnu/usr.bin/perl/cpan/Unicode-Collate/t/loc_es.t @@ -1,13 +1,5 @@ BEGIN { - unless ('A' eq pack('U', 0x41)) { - print "1..0 # Unicode::Collate cannot pack a Unicode code point\n"; - exit 0; - } - unless (0x41 == unpack('U', 'A')) { - print "1..0 # Unicode::Collate cannot get a Unicode code point\n"; - exit 0; - } if ($ENV{PERL_CORE}) { chdir('t') if -d 't'; @INC = $^O eq 'MacOS' ? qw(::lib) : qw(../lib); @@ -31,13 +23,16 @@ use Unicode::Collate::Locale; ok(1); +sub _pack_U { Unicode::Collate::pack_U(@_) } +sub _unpack_U { Unicode::Collate::unpack_U(@_) } + ######################### my $objEs = Unicode::Collate::Locale-> new(locale => 'ES', normalization => undef); ok($objEs->getlocale, 'es'); -ok($objEs->locale_version, 1.27); +ok($objEs->locale_version, 1.31); $objEs->change(level => 1); @@ -78,8 +73,8 @@ ok($objEs->lt("Ch", "CH")); ok($objEs->lt("ll", "Ll")); ok($objEs->lt("Ll", "LL")); ok($objEs->lt("n\x{303}", "N\x{303}")); -ok($objEs->eq("n\x{303}", pack('U', 0xF1))); -ok($objEs->eq("N\x{303}", pack('U', 0xD1))); +ok($objEs->eq("n\x{303}", _pack_U(0xF1))); +ok($objEs->eq("N\x{303}", _pack_U(0xD1))); # 28 diff --git a/gnu/usr.bin/perl/cpan/Unicode-Collate/t/loc_estr.t b/gnu/usr.bin/perl/cpan/Unicode-Collate/t/loc_estr.t index d44620e165f..82b971b2779 100644 --- a/gnu/usr.bin/perl/cpan/Unicode-Collate/t/loc_estr.t +++ b/gnu/usr.bin/perl/cpan/Unicode-Collate/t/loc_estr.t @@ -1,13 +1,5 @@ BEGIN { - unless ('A' eq pack('U', 0x41)) { - print "1..0 # Unicode::Collate cannot pack a Unicode code point\n"; - exit 0; - } - unless (0x41 == unpack('U', 'A')) { - print "1..0 # Unicode::Collate cannot get a Unicode code point\n"; - exit 0; - } if ($ENV{PERL_CORE}) { chdir('t') if -d 't'; @INC = $^O eq 'MacOS' ? qw(::lib) : qw(../lib); @@ -31,13 +23,16 @@ use Unicode::Collate::Locale; ok(1); +sub _pack_U { Unicode::Collate::pack_U(@_) } +sub _unpack_U { Unicode::Collate::unpack_U(@_) } + ######################### my $objEsTrad = Unicode::Collate::Locale-> new(locale => 'ES-trad', normalization => undef); ok($objEsTrad->getlocale, 'es__traditional'); -ok($objEsTrad->locale_version, 1.27); +ok($objEsTrad->locale_version, 1.31); $objEsTrad->change(level => 1); @@ -78,7 +73,7 @@ ok($objEsTrad->lt("Ch", "CH")); ok($objEsTrad->lt("ll", "Ll")); ok($objEsTrad->lt("Ll", "LL")); ok($objEsTrad->lt("n\x{303}", "N\x{303}")); -ok($objEsTrad->eq("n\x{303}", pack('U', 0xF1))); -ok($objEsTrad->eq("N\x{303}", pack('U', 0xD1))); +ok($objEsTrad->eq("n\x{303}", _pack_U(0xF1))); +ok($objEsTrad->eq("N\x{303}", _pack_U(0xD1))); # 28 diff --git a/gnu/usr.bin/perl/cpan/Unicode-Collate/t/loc_fr.t b/gnu/usr.bin/perl/cpan/Unicode-Collate/t/loc_fr.t index a863805253f..5de744333de 100644 --- a/gnu/usr.bin/perl/cpan/Unicode-Collate/t/loc_fr.t +++ b/gnu/usr.bin/perl/cpan/Unicode-Collate/t/loc_fr.t @@ -1,13 +1,5 @@ BEGIN { - unless ('A' eq pack('U', 0x41)) { - print "1..0 # Unicode::Collate cannot pack a Unicode code point\n"; - exit 0; - } - unless (0x41 == unpack('U', 'A')) { - print "1..0 # Unicode::Collate cannot get a Unicode code point\n"; - exit 0; - } if ($ENV{PERL_CORE}) { chdir('t') if -d 't'; @INC = $^O eq 'MacOS' ? qw(::lib) : qw(../lib); @@ -31,10 +23,13 @@ use Unicode::Collate::Locale; ok(1); +sub _pack_U { Unicode::Collate::pack_U(@_) } +sub _unpack_U { Unicode::Collate::unpack_U(@_) } + ######################### -my $ae = pack 'U', 0xE6; -my $AE = pack 'U', 0xC6; +my $ae = _pack_U(0xE6); +my $AE = _pack_U(0xC6); my $objFr = Unicode::Collate::Locale-> new(locale => 'FR', normalization => undef); @@ -83,43 +78,43 @@ ok($objFr->eq("\x{1E2}", "$AE\x{304}")); # 27 -ok($objFr->eq("a\x{300}", pack('U', 0xE0))); -ok($objFr->eq("A\x{300}", pack('U', 0xC0))); -ok($objFr->eq("e\x{300}", pack('U', 0xE8))); -ok($objFr->eq("E\x{300}", pack('U', 0xC8))); -ok($objFr->eq("i\x{300}", pack('U', 0xEC))); -ok($objFr->eq("I\x{300}", pack('U', 0xCC))); -ok($objFr->eq("o\x{300}", pack('U', 0xF2))); -ok($objFr->eq("O\x{300}", pack('U', 0xD2))); -ok($objFr->eq("u\x{300}", pack('U', 0xF9))); -ok($objFr->eq("U\x{300}", pack('U', 0xD9))); +ok($objFr->eq("a\x{300}", _pack_U(0xE0))); +ok($objFr->eq("A\x{300}", _pack_U(0xC0))); +ok($objFr->eq("e\x{300}", _pack_U(0xE8))); +ok($objFr->eq("E\x{300}", _pack_U(0xC8))); +ok($objFr->eq("i\x{300}", _pack_U(0xEC))); +ok($objFr->eq("I\x{300}", _pack_U(0xCC))); +ok($objFr->eq("o\x{300}", _pack_U(0xF2))); +ok($objFr->eq("O\x{300}", _pack_U(0xD2))); +ok($objFr->eq("u\x{300}", _pack_U(0xF9))); +ok($objFr->eq("U\x{300}", _pack_U(0xD9))); ok($objFr->eq("y\x{300}", "\x{1EF3}")); ok($objFr->eq("Y\x{300}", "\x{1EF2}")); -ok($objFr->eq("a\x{301}", pack('U', 0xE1))); -ok($objFr->eq("A\x{301}", pack('U', 0xC1))); -ok($objFr->eq("e\x{301}", pack('U', 0xE9))); -ok($objFr->eq("E\x{301}", pack('U', 0xC9))); -ok($objFr->eq("i\x{301}", pack('U', 0xED))); -ok($objFr->eq("I\x{301}", pack('U', 0xCD))); -ok($objFr->eq("o\x{301}", pack('U', 0xF3))); -ok($objFr->eq("O\x{301}", pack('U', 0xD3))); -ok($objFr->eq("u\x{301}", pack('U', 0xFA))); -ok($objFr->eq("U\x{301}", pack('U', 0xDA))); -ok($objFr->eq("y\x{301}", pack('U', 0xFD))); -ok($objFr->eq("Y\x{301}", pack('U', 0xDD))); - -ok($objFr->eq("a\x{308}", pack('U', 0xE4))); -ok($objFr->eq("A\x{308}", pack('U', 0xC4))); -ok($objFr->eq("e\x{308}", pack('U', 0xEB))); -ok($objFr->eq("E\x{308}", pack('U', 0xCB))); -ok($objFr->eq("i\x{308}", pack('U', 0xEF))); -ok($objFr->eq("I\x{308}", pack('U', 0xCF))); -ok($objFr->eq("o\x{308}", pack('U', 0xF6))); -ok($objFr->eq("O\x{308}", pack('U', 0xD6))); -ok($objFr->eq("u\x{308}", pack('U', 0xFC))); -ok($objFr->eq("U\x{308}", pack('U', 0xDC))); -ok($objFr->eq("y\x{308}", pack('U', 0xFF))); +ok($objFr->eq("a\x{301}", _pack_U(0xE1))); +ok($objFr->eq("A\x{301}", _pack_U(0xC1))); +ok($objFr->eq("e\x{301}", _pack_U(0xE9))); +ok($objFr->eq("E\x{301}", _pack_U(0xC9))); +ok($objFr->eq("i\x{301}", _pack_U(0xED))); +ok($objFr->eq("I\x{301}", _pack_U(0xCD))); +ok($objFr->eq("o\x{301}", _pack_U(0xF3))); +ok($objFr->eq("O\x{301}", _pack_U(0xD3))); +ok($objFr->eq("u\x{301}", _pack_U(0xFA))); +ok($objFr->eq("U\x{301}", _pack_U(0xDA))); +ok($objFr->eq("y\x{301}", _pack_U(0xFD))); +ok($objFr->eq("Y\x{301}", _pack_U(0xDD))); + +ok($objFr->eq("a\x{308}", _pack_U(0xE4))); +ok($objFr->eq("A\x{308}", _pack_U(0xC4))); +ok($objFr->eq("e\x{308}", _pack_U(0xEB))); +ok($objFr->eq("E\x{308}", _pack_U(0xCB))); +ok($objFr->eq("i\x{308}", _pack_U(0xEF))); +ok($objFr->eq("I\x{308}", _pack_U(0xCF))); +ok($objFr->eq("o\x{308}", _pack_U(0xF6))); +ok($objFr->eq("O\x{308}", _pack_U(0xD6))); +ok($objFr->eq("u\x{308}", _pack_U(0xFC))); +ok($objFr->eq("U\x{308}", _pack_U(0xDC))); +ok($objFr->eq("y\x{308}", _pack_U(0xFF))); ok($objFr->eq("Y\x{308}", "\x{178}")); # 63 diff --git a/gnu/usr.bin/perl/cpan/Unicode-Collate/t/nonchar.t b/gnu/usr.bin/perl/cpan/Unicode-Collate/t/nonchar.t index 64989210eec..8fe8d21132d 100644 --- a/gnu/usr.bin/perl/cpan/Unicode-Collate/t/nonchar.t +++ b/gnu/usr.bin/perl/cpan/Unicode-Collate/t/nonchar.t @@ -1,31 +1,14 @@ BEGIN { - unless ('A' eq pack('U', 0x41)) { - print "1..0 # Unicode::Collate cannot pack a Unicode code point\n"; - exit 0; - } - unless (0x41 == unpack('U', 'A')) { - print "1..0 # Unicode::Collate cannot get a Unicode code point\n"; - exit 0; - } - if ($ENV{PERL_CORE}) { - chdir('t') if -d 't'; - @INC = $^O eq 'MacOS' ? qw(::lib) : qw(../lib); - } -} - - -BEGIN { - use Unicode::Collate; - -# unless (exists &Unicode::Collate::bootstrap or 5.008 <= $]) { -# print "1..0 # skipped: XSUB, or Perl 5.8.0 or later". -# " needed for this test\n"; unless (5.008 <= $]) { print "1..0 # skipped: Perl 5.8.0 or later needed for this test\n"; print $@; exit; } + if ($ENV{PERL_CORE}) { + chdir('t') if -d 't'; + @INC = $^O eq 'MacOS' ? qw(::lib) : qw(../lib); + } } use strict; @@ -41,8 +24,13 @@ sub ok ($;$) { print $p ? "ok" : "not ok", ' ', ++$count, "\n"; } +use Unicode::Collate; + ok(1); +sub _pack_U { Unicode::Collate::pack_U(@_) } +sub _unpack_U { Unicode::Collate::unpack_U(@_) } + ######################### no warnings 'utf8'; diff --git a/gnu/usr.bin/perl/cpan/Unicode-Collate/t/version.t b/gnu/usr.bin/perl/cpan/Unicode-Collate/t/version.t index 76186c9a013..ee2f986ce84 100755 --- a/gnu/usr.bin/perl/cpan/Unicode-Collate/t/version.t +++ b/gnu/usr.bin/perl/cpan/Unicode-Collate/t/version.t @@ -1,13 +1,5 @@ BEGIN { - unless ('A' eq pack('U', 0x41)) { - print "1..0 # Unicode::Collate cannot pack a Unicode code point\n"; - exit 0; - } - unless (0x41 == unpack('U', 'A')) { - print "1..0 # Unicode::Collate cannot get a Unicode code point\n"; - exit 0; - } if ($ENV{PERL_CORE}) { chdir('t') if -d 't'; @INC = $^O eq 'MacOS' ? qw(::lib) : qw(../lib); @@ -31,11 +23,14 @@ use Unicode::Collate; ok(1); +sub _pack_U { Unicode::Collate::pack_U(@_) } +sub _unpack_U { Unicode::Collate::unpack_U(@_) } + ######################### # Fix me when UCA and/or keys.txt is upgraded. -my $UCA_Version = "36"; -my $Base_Unicode_Version = "10.0.0"; +my $UCA_Version = "43"; +my $Base_Unicode_Version = "13.0.0"; my $Key_Version = "3.1.1"; ok(Unicode::Collate::UCA_Version, $UCA_Version); diff --git a/gnu/usr.bin/perl/cpan/Unicode-Collate/t/view.t b/gnu/usr.bin/perl/cpan/Unicode-Collate/t/view.t index 63a0e922be3..7c160a9d289 100755 --- a/gnu/usr.bin/perl/cpan/Unicode-Collate/t/view.t +++ b/gnu/usr.bin/perl/cpan/Unicode-Collate/t/view.t @@ -1,13 +1,5 @@ BEGIN { - unless ('A' eq pack('U', 0x41)) { - print "1..0 # Unicode::Collate cannot pack a Unicode code point\n"; - exit 0; - } - unless (0x41 == unpack('U', 'A')) { - print "1..0 # Unicode::Collate cannot get a Unicode code point\n"; - exit 0; - } if ($ENV{PERL_CORE}) { chdir('t') if -d 't'; @INC = $^O eq 'MacOS' ? qw(::lib) : qw(../lib); @@ -16,7 +8,7 @@ BEGIN { use strict; use warnings; -BEGIN { $| = 1; print "1..174\n"; } # 62 + 8 x @Versions +BEGIN { $| = 1; print "1..214\n"; } # 62 + 8 x @Versions my $count = 0; sub ok ($;$) { my $p = my $r = shift; @@ -31,6 +23,11 @@ use Unicode::Collate; ok(1); +sub _pack_U { Unicode::Collate::pack_U(@_) } +sub _unpack_U { Unicode::Collate::unpack_U(@_) } + +######################### + ##### 1 my $Collator = Unicode::Collate->new( @@ -268,35 +265,59 @@ ok($el->viewSortKey("L\x{FF2C}\x{216C}\x{2112}\x{24C1}"), ##### 62 -my @Versions = (9, 11, 14, 16, 18, 20, 22, 24, 26, 28, 30, 32, 34, 36); +my @Versions = ( 8, 9, 11, 14, 16, 18, 20, 22, 24, 26, + 28, 30, 32, 34, 36, 38, 40, 41, 43); for my $v (@Versions) { $Collator->change(UCA_Version => $v); + + # primary weights + my $pri1 = '0A0C 0A0D'; + my $pri2 = '0A0C 039F 0A0D'; + my $pri3 = $v >= 9 ? 'FB40 CE02' : '4E02'; + + # secondary weights + my $sec1 = '0020'; + my $sec2 = '0020 0020'; + my $sec3 = '0020 0020 0020'; + + # tertiary weights + my $ter1 = '0002'; + my $ter2 = '0002 0002'; + my $ter3 = '0002 0002 0002'; + + # quaternary weights + my $eququat = 'FFFF 039F FFFF'; + my $hanquat = $v >= 36 || $v == 8 ? 'FFFF' : 'FFFF FFFF'; + + # separators + my $sep1 = $v >= 9 ? ' |' : '|'; + my $sep2 = $v >= 9 ? ' | ' : '|'; + my $app = $v >= 26 ? ' |]' : ']'; - my $sec = $v >= 36 ? '' : ' FFFF'; $Collator->change(variable => 'Shifted', level => 4); ok($Collator->viewSortKey("1+2"), - '[0A0C 0A0D | 0020 0020 | 0002 0002 | FFFF 039F FFFF'.$app); + "[$pri1$sep2$sec2$sep2$ter2$sep2$eququat$app"); ok($Collator->viewSortKey("\x{4E02}"), - '[FB40 CE02 | 0020 | 0002 | FFFF'.$sec.$app); + "[$pri3$sep2$sec1$sep2$ter1$sep2$hanquat$app"); $Collator->change(variable => 'Shift-Trimmed'); ok($Collator->viewSortKey("1+2"), - '[0A0C 0A0D | 0020 0020 | 0002 0002 | 039F'.$app); + "[$pri1$sep2$sec2$sep2$ter2$sep2"."039F$app"); ok($Collator->viewSortKey("\x{4E02}"), - '[FB40 CE02 | 0020 | 0002 |'.$app); + "[$pri3$sep2$sec1$sep2$ter1$sep1$app"); $Collator->change(variable => 'Non-ignorable', level => 3); ok($Collator->viewSortKey("1+2"), - '[0A0C 039F 0A0D | 0020 0020 0020 | 0002 0002 0002 |]'); + "[$pri2$sep2$sec3$sep2$ter3$sep1]"); ok($Collator->viewSortKey("\x{4E02}"), - '[FB40 CE02 | 0020 | 0002 |]'); + "[$pri3$sep2$sec1$sep2$ter1$sep1]"); $Collator->change(variable => 'Blanked'); ok($Collator->viewSortKey("1+2"), - '[0A0C 0A0D | 0020 0020 | 0002 0002 |]'); + "[$pri1$sep2$sec2$sep2$ter2$sep1]"); ok($Collator->viewSortKey("\x{4E02}"), - '[FB40 CE02 | 0020 | 0002 |]'); + "[$pri3$sep2$sec1$sep2$ter1$sep1]"); } diff --git a/gnu/usr.bin/perl/cpan/Win32/Win32.pm b/gnu/usr.bin/perl/cpan/Win32/Win32.pm index 5a197e9e9e3..2ad726a99a4 100644 --- a/gnu/usr.bin/perl/cpan/Win32/Win32.pm +++ b/gnu/usr.bin/perl/cpan/Win32/Win32.pm @@ -8,7 +8,7 @@ package Win32; require DynaLoader; @ISA = qw|Exporter DynaLoader|; - $VERSION = '0.53'; + $VERSION = '0.59'; $XS_VERSION = $VERSION; $VERSION = eval $VERSION; @@ -174,6 +174,7 @@ sub VER_SUITE_STORAGE_SERVER () { 0x00002000 } # Windows Storage Serve sub VER_SUITE_TERMINAL () { 0x00000010 } # Terminal Services is installed. This value is always set. # If VER_SUITE_TERMINAL is set but VER_SUITE_SINGLEUSERTS is not set, the system is running in application server mode. sub VER_SUITE_WH_SERVER () { 0x00008000 } # Windows Home Server is installed. +sub VER_SUITE_MULTIUSERTS () { 0x00020000 } # AppServer mode is enabled. sub SM_TABLETPC () { 86 } @@ -305,6 +306,8 @@ sub PRODUCT_EDUCATION_N () { 0x7A } # Windows 10 Education sub PRODUCT_UNLICENSED () { 0xABCDABCD } # product has not been activated and is no longer in the grace period +sub PROCESSOR_ARCHITECTURE_ARM64 () { 12 } # ARM64 +sub PROCESSOR_ARCHITECTURE_ARM () { 5 } # ARM sub PROCESSOR_ARCHITECTURE_AMD64 () { 9 } # x64 (AMD or Intel) sub PROCESSOR_ARCHITECTURE_IA64 () { 6 } # Intel Itanium Processor Family (IPF) sub PROCESSOR_ARCHITECTURE_INTEL () { 0 } # x86 @@ -318,6 +321,14 @@ sub _GetProcessorArchitecture { 2200 => PROCESSOR_ARCHITECTURE_IA64, 8664 => PROCESSOR_ARCHITECTURE_AMD64, }->{Win32::GetChipName()}; + + if (!defined($arch)) { + $arch = { + 5 => PROCESSOR_ARCHITECTURE_ARM, + 12 => PROCESSOR_ARCHITECTURE_ARM64, + }->{Win32::GetChipArch()}; + } + return defined($arch) ? $arch : PROCESSOR_ARCHITECTURE_UNKNOWN; } @@ -359,7 +370,8 @@ sub GetOSDisplayName { $desc =~ s/^\s*//; s/(200.)/$name Server $1/; } - s/^Windows (20(03|08|12))/Windows Server $1/; + s/^Windows (20(03|08|12|16|19))/Windows Server $1/; + s/^Windows SAC/Windows Server/; } } $name .= " $desc" if length $desc; @@ -528,12 +540,12 @@ sub _GetOSName { } } elsif ($minor == 2) { - if ($producttype == VER_NT_WORKSTATION) { - $os = "8"; - } - else { - $os = "2012"; - } + if ($producttype == VER_NT_WORKSTATION) { + $os = "8"; + } + else { + $os = "2012"; + } } elsif ($minor == 3) { if ($producttype == VER_NT_WORKSTATION) { @@ -546,64 +558,130 @@ sub _GetOSName { } } elsif ($major == 10) { - $os = '10'; + if ($producttype == VER_NT_WORKSTATION) { + # Build numbers from https://en.wikipedia.org/wiki/Windows_10_version_history + $os = '10'; + if (9841 <= $build && $build <= 10240) { + $desc = " Version 1507"; + $desc .= " (Preview Build $build)" if $build < 10240; + $desc .= " (RTM)" if $build == 10240; + } + elsif (10525 <= $build && $build <= 10586) { + $desc = " Version 1511 (November Update)"; + $desc .= " (Preview Build $build)" if $build < 10586; + } + elsif (11082 <= $build && $build <= 14393) { + $desc = " Version 1607 (Anniversary Update)"; + $desc .= " (Preview Build $build)" if $build < 14393; + } + elsif (14901 <= $build && $build <= 15063) { + $desc = " Version 1703 (Creators Update)"; + $desc .= " (Preview Build $build)" if $build < 15063; + } + elsif (16170 <= $build && $build <= 16299) { + $desc = " Version 1709 (Fall Creators Update)"; + $desc .= " (Preview Build $build)" if $build < 16299; + } + elsif (16353 <= $build && $build <= 17134) { + $desc = " Version 1803 (April 2018 Update)"; + $desc .= " (Preview Build $build)" if $build < 17134; + } + elsif (17604 <= $build && $build <= 17763) { + $desc = " Version 1809 (October 2018 Update)"; + $desc .= " (Preview Build $build)" if $build < 17763; + } + elsif (18204 <= $build && $build <= 18362) { + $desc = " Version 1903 (May 2019 Update)"; + $desc .= " (Preview Build $build)" if $build < 18362; + } + else { + $desc = " Build $build"; + } + } + else { + if ($build == 14393) { + $os = "2016"; + $desc = "Version 1607"; + } + elsif ($build == 17763) { + $os = "2019"; + $desc = "Version 1809"; + } + else { + $os = "Server"; + if ($build == 16299) { + $desc = "Version 1709"; + } + elsif ($build == 17134) { + $desc = "Version 1803"; + } + elsif ($build == 18362) { + $desc = "Version 1903"; + } + else { + $desc = "Build $build"; + } + } + } } if ($major >= 6) { - if ($productinfo == PRODUCT_ULTIMATE) { - $desc .= " Ultimate"; - } - elsif ($productinfo == PRODUCT_HOME_PREMIUM) { - $desc .= " Home Premium"; - } - elsif ($productinfo == PRODUCT_HOME_BASIC) { - $desc .= " Home Basic"; - } - elsif ($productinfo == PRODUCT_ENTERPRISE) { - $desc .= " Enterprise"; - } - elsif ($productinfo == PRODUCT_BUSINESS) { - # "Windows 7 Business" had a name change to "Windows 7 Professional" - $desc .= $minor == 0 ? " Business" : " Professional"; - } - elsif ($productinfo == PRODUCT_STARTER) { - $desc .= " Starter"; - } - elsif ($productinfo == PRODUCT_CLUSTER_SERVER) { - $desc .= " HPC Server"; - } - elsif ($productinfo == PRODUCT_DATACENTER_SERVER) { - $desc .= " Datacenter"; - } - elsif ($productinfo == PRODUCT_DATACENTER_SERVER_CORE) { - $desc .= " Datacenter Edition (core installation)"; - } - elsif ($productinfo == PRODUCT_ENTERPRISE_SERVER) { - $desc .= " Enterprise"; - } - elsif ($productinfo == PRODUCT_ENTERPRISE_SERVER_CORE) { - $desc .= " Enterprise Edition (core installation)"; - } - elsif ($productinfo == PRODUCT_ENTERPRISE_SERVER_IA64) { - $desc .= " Enterprise Edition for Itanium-based Systems"; - } - elsif ($productinfo == PRODUCT_SMALLBUSINESS_SERVER) { - $desc .= " Small Business Server"; - } - elsif ($productinfo == PRODUCT_SMALLBUSINESS_SERVER_PREMIUM) { - $desc .= " Small Business Server Premium Edition"; - } - elsif ($productinfo == PRODUCT_STANDARD_SERVER) { - $desc .= " Standard"; - } - elsif ($productinfo == PRODUCT_STANDARD_SERVER_CORE) { - $desc .= " Standard Edition (core installation)"; - } - elsif ($productinfo == PRODUCT_WEB_SERVER) { - $desc .= " Web Server"; - } - elsif ($productinfo == PRODUCT_PROFESSIONAL) { - $desc .= " Professional"; + if ($major == 6) { + if ($productinfo == PRODUCT_ULTIMATE) { + $desc .= " Ultimate"; + } + elsif ($productinfo == PRODUCT_HOME_PREMIUM) { + $desc .= " Home Premium"; + } + elsif ($productinfo == PRODUCT_HOME_BASIC) { + $desc .= " Home Basic"; + } + elsif ($productinfo == PRODUCT_ENTERPRISE) { + $desc .= " Enterprise"; + } + elsif ($productinfo == PRODUCT_BUSINESS) { + # "Windows 7 Business" had a name change to "Windows 7 Professional" + $desc .= $minor == 0 ? " Business" : " Professional"; + } + elsif ($productinfo == PRODUCT_STARTER) { + $desc .= " Starter"; + } + elsif ($productinfo == PRODUCT_CLUSTER_SERVER) { + $desc .= " HPC Server"; + } + elsif ($productinfo == PRODUCT_DATACENTER_SERVER) { + $desc .= " Datacenter"; + } + elsif ($productinfo == PRODUCT_DATACENTER_SERVER_CORE) { + $desc .= " Datacenter Edition (core installation)"; + } + elsif ($productinfo == PRODUCT_ENTERPRISE_SERVER) { + $desc .= " Enterprise"; + } + elsif ($productinfo == PRODUCT_ENTERPRISE_SERVER_CORE) { + $desc .= " Enterprise Edition (core installation)"; + } + elsif ($productinfo == PRODUCT_ENTERPRISE_SERVER_IA64) { + $desc .= " Enterprise Edition for Itanium-based Systems"; + } + elsif ($productinfo == PRODUCT_SMALLBUSINESS_SERVER) { + $desc .= " Small Business Server"; + } + elsif ($productinfo == PRODUCT_SMALLBUSINESS_SERVER_PREMIUM) { + $desc .= " Small Business Server Premium Edition"; + } + elsif ($productinfo == PRODUCT_STANDARD_SERVER) { + $desc .= " Standard"; + } + elsif ($productinfo == PRODUCT_STANDARD_SERVER_CORE) { + $desc .= " Standard Edition (core installation)"; + } + elsif ($productinfo == PRODUCT_WEB_SERVER) { + $desc .= " Web Server"; + } + elsif ($productinfo == PRODUCT_PROFESSIONAL) { + $desc .= " Professional"; + } } if ($arch == PROCESSOR_ARCHITECTURE_INTEL) { @@ -612,7 +690,7 @@ sub _GetOSName { elsif ($arch == PROCESSOR_ARCHITECTURE_AMD64) { $desc .= " (64-bit)"; } - } + } } unless (defined $os) { @@ -645,6 +723,27 @@ sub _GetOSName { return ("Win$os", $desc); } +sub IsSymlinkCreationAllowed { + my(undef, $major, $minor, $build) = GetOSVersion(); + + # Vista was the first Windows version with symlink support + return !!0 if $major < 6; + + # Since Windows 10 1703, enabling the developer mode allows to create + # symlinks regardless of process privileges + if ($major > 10 || ($major == 10 && ($minor > 0 || $build > 15063))) { + return !!1 if IsDeveloperModeEnabled(); + } + + my $privs = GetProcessPrivileges(); + + return !!0 unless $privs; + + # It doesn't matter if the permission is enabled or not, it just has to + # exist. CreateSymbolicLink() will automatically enable it when needed. + return exists $privs->{SeCreateSymbolicLinkPrivilege}; +} + # "no warnings 'redefine';" doesn't work for 5.8.7 and earlier local $^W = 0; bootstrap Win32; @@ -801,10 +900,17 @@ $ENV{PROCESSOR_ARCHITECTURE}. This might not work on Win9X. =item Win32::GetChipName() -Returns the processor type: 386, 486 or 586 for x86 processors, 8664 -for the x64 processor and 2200 for the Itanium. Since it returns the -native processor type it will return a 64-bit processor type even when -called from a 32-bit Perl running on 64-bit Windows. +Returns the processor type: 386, 486 or 586 for x86 processors, 8664 for the x64 +processor and 2200 for the Itanium. For arm/arm64 processor, the value is marked +as "Reserved" (not specified, but usually 0) in Microsoft documentation, so it's +better to use GetChipArch(). Since it returns the native processor type it will +return a 64-bit processor type even when called from a 32-bit Perl running on +64-bit Windows. + +=item Win32::GetChipArch() + +Returns the processor architecture: 0 for x86 processors, 5 for arm, 6 for +Itanium, 9 for x64 and 12 for arm64, and 0xFFFF for unknown architecture. =item Win32::GetConsoleCP() @@ -998,6 +1104,10 @@ GetOSVersion() in list context. The description will also include tags for other special editions, like "R2", "Media Center", "Tablet PC", or "Starter Edition". +In the Windows 10 / Server Semi-Annual Channel era, the description may +contain the relevant ReleaseId value, but this is only inferred from +the build number, not determined absolutely. + Currently the possible values for the OS name are WinWin32s @@ -1013,6 +1123,12 @@ Currently the possible values for the OS name are WinVista Win2008 Win7 + Win8 + Win8.1 + Win10 + Win2016 + Win2019 + WinSAC This routine is just a simple interface into GetOSVersion(). More specific or demanding situations should use that instead. Another @@ -1038,30 +1154,36 @@ For the ID, the values are 0 for Win32s, 1 for Windows 9X/Me and 2 for Windows NT/2000/XP/2003/Vista/2008/7. In scalar context it returns just the ID. -Currently known values for ID MAJOR and MINOR are as follows: - - OS ID MAJOR MINOR - Win32s 0 - - - Windows 95 1 4 0 - Windows 98 1 4 10 - Windows Me 1 4 90 - - Windows NT 3.51 2 3 51 - Windows NT 4 2 4 0 - - Windows 2000 2 5 0 - Windows XP 2 5 1 - Windows Server 2003 2 5 2 - Windows Server 2003 R2 2 5 2 - Windows Home Server 2 5 2 - - Windows Vista 2 6 0 - Windows Server 2008 2 6 0 - Windows 7 2 6 1 - Windows Server 2008 R2 2 6 1 - Windows 8 2 6 2 - Windows Server 2012 2 6 2 - +Currently known values for ID MAJOR MINOR and BUILD are as follows: + + OS ID MAJOR MINOR BUILD + Win32s 0 - - - + Windows 95 1 4 0 - + Windows 98 1 4 10 - + Windows Me 1 4 90 - + + Windows NT 3.51 2 3 51 - + Windows NT 4 2 4 0 - + + Windows 2000 2 5 0 - + Windows XP 2 5 1 - + Windows Server 2003 2 5 2 - + Windows Server 2003 R2 2 5 2 - + Windows Home Server 2 5 2 - + + Windows Vista 2 6 0 - + Windows Server 2008 2 6 0 - + Windows 7 2 6 1 - + Windows Server 2008 R2 2 6 1 - + Windows 8 2 6 2 - + Windows Server 2012 2 6 2 - + Windows 8.1 2 6 2 - + Windows Server 2012 R2 2 6 2 - + + Windows 10 2 10 0 - + Windows Server 2016 2 10 0 14393 + Windows Server 2019 2 10 0 17677 + On Windows NT 4 SP6 and later this function returns the following additional values: SPMAJOR, SPMINOR, SUITEMASK, PRODUCTTYPE. @@ -1081,8 +1203,14 @@ The version numbers for Windows 8 and Windows Server 2012 are identical; the PRODUCTTYPE field must be used to differentiate between them. +For modern Windows releases, the major and minor version numbers are +identical. The PRODUCTTYPE field must be used to differentiate between +Windows 10 and Server releases. The BUILD field is used to +differentiate Windows Server versions: currently 2016, 2019, and +Semi-Annual Channel releases. + SPMAJOR and SPMINOR are the version numbers of the latest -installed service pack. +installed service pack. (In the Windows 10 era, these are unused.) SUITEMASK is a bitfield identifying the product suites available on the system. Known bits are: @@ -1103,6 +1231,7 @@ the system. Known bits are: VER_SUITE_STORAGE_SERVER 0x00002000 VER_SUITE_COMPUTE_SERVER 0x00004000 VER_SUITE_WH_SERVER 0x00008000 + VER_SUITE_MULTIUSERTS 0x00020000 The VER_SUITE_xxx names are listed here to cross reference the Microsoft documentation. The Win32 module does not provide symbolic names for these @@ -1142,6 +1271,25 @@ information about what you can do with this address has been lost in the mist of time. Use the Win32::API module instead of this deprecated function. +=item Win32::GetProcessPrivileges([PID]) + +Returns a reference to a hash holding the information about the privileges +held by the specified process. The keys are privilege names, and the values +are booleans indicating whether a given privilege is currently enabled or not. + +If the optional PID parameter is omitted, the function queries the current +process. + +Example return value: + + { + SeTimeZonePrivilege => 0, + SeShutdownPrivilege => 0, + SeUndockPrivilege => 0, + SeIncreaseWorkingSetPrivilege => 0, + SeChangeNotifyPrivilege => 1 + } + =item Win32::GetProductInfo(OSMAJOR, OSMINOR, SPMAJOR, SPMINOR) Retrieves the product type for the operating system on the local @@ -1174,11 +1322,52 @@ of hex digits with surrounding braces. For example: {09531CF1-D0C7-4860-840C-1C8C8735E2AD} +=item Win32::HttpGetFile(URL, FILENAME [, IGNORE_CERT_ERRORS]) + +Uses the WinHttp library to download the file specified by the URL +parameter to the local file specified by FILENAME. The optional third +parameter, if true, indicates that certficate errors are to be ignored +for https connections; please use with caution in a safe environment, +such as when testing locally using a self-signed certificate. + +Only http and https protocols are supported. Authentication is not +supported. The function is not available when building with gcc prior to +4.8.0 because the WinHttp library is not available. + +In scalar context returns a boolean success or failure, and in list +context also returns, in addition to the boolean status, a second +value containing message text related to the status. + +If the call fails, C will return a numeric +error code, which may be a system error, a WinHttp error, or a +user-defined error composed of 1e9 plus the HTTP status code. + +Scalar context example: + + print Win32::GetLastError() + unless Win32::HttpGetFile('http://example.com/somefile.tar.gz', + '.\file.tgz'); + +List context example: + + my ($ok, $msg) = Win32::HttpGetFile('http://example.com/somefile.tar.gz', + '.\file.tgz'); + if ($ok) { + print "Success!: $msg\n"; + } + else { + print "Failure!: $msg\n"; + my $err = Win32::GetLastError(); + if ($err > 1e9) { + printf "HTTP status: %d\n", ($err - 1e9); + } + } + =item Win32::InitiateSystemShutdown (MACHINE, MESSAGE, TIMEOUT, FORCECLOSE, REBOOT) -Shutsdown the specified MACHINE, notifying users with the +Shuts down the specified MACHINE, notifying users with the supplied MESSAGE, within the specified TIMEOUT interval. Forces closing of all documents without prompting the user if FORCECLOSE is true, and reboots the machine if REBOOT is true. This function works @@ -1194,6 +1383,17 @@ actually running with elevated privileges. Returns C and prints a warning if an error occurred. This function always returns 1 on Win9X. +=item Win32::IsDeveloperModeEnabled() + +Returns true if the developer mode is currently enabled. It always returns +false on Windows versions older than Windows 10. + +=item Win32::IsSymlinkCreationAllowed() + +Returns true if the current process is allowed to create symbolic links. This +function is a convenience wrapper around Win32::GetProcessPrivileges() and +Win32::IsDeveloperModeEnabled(). + =item Win32::IsWinNT() [CORE] Returns non zero if the Win32 subsystem is Windows NT. @@ -1332,4 +1532,37 @@ DllUnregisterServer. =back +=head1 CAVEATS + +=head2 Short Path Names + +There are many situations in which modern Windows systems will not have +the L +(also called 8.3 or MS-DOS) alias for long file names available. + +Short path support can be configured system-wide via the registry, +but the default on modern systems is to configure short path usage per +volume. The configuration for a volume can be queried in a number of ways, +but these may either be unreliable or require elevated (administrator) +privileges. + +Typically, the configuration for a volume can be queried using the C +utility, e.g. C. On the C level, it can be queried +with a C request to the +C API call, as described in +L. +However, both of these methods require administrator privileges to work. + +The Win32 module does not perform any per-volume check and simply fetches +short path names in the same manner as the underlying Windows API call it +uses: If short path names are disabled, the call will still succeed but the +long name will actually be returned. + +Note that on volumes where this happens, C usually cannot be +used to return useful filenames for files that contain unicode characters. +(In code page 65001, this may still work.) Handling unicode filenames in this +legacy manner relies upon C returning 8.3 filenames, but +without short name support, it will return the filename with all unicode +characters replaced by question mark characters. + =cut diff --git a/gnu/usr.bin/perl/cpan/Win32/Win32.xs b/gnu/usr.bin/perl/cpan/Win32/Win32.xs index 03519cbc3ad..3166c295be7 100644 --- a/gnu/usr.bin/perl/cpan/Win32/Win32.xs +++ b/gnu/usr.bin/perl/cpan/Win32/Win32.xs @@ -1,9 +1,15 @@ #define WIN32_LEAN_AND_MEAN +#define _WIN32_WINNT 0x0500 #include #include #include #include #include +#include +#include +#if !defined(__GNUC__) || (((100000 * __GNUC__) + (1000 * __GNUC_MINOR__)) >= 408000) +# include +#endif #define PERL_NO_GET_CONTEXT #include "EXTERN.h" @@ -22,27 +28,12 @@ #define GETPROC(fn) pfn##fn = (PFN##fn)GetProcAddress(module, #fn) -typedef BOOL (WINAPI *PFNSHGetSpecialFolderPathA)(HWND, char*, int, BOOL); -typedef BOOL (WINAPI *PFNSHGetSpecialFolderPathW)(HWND, WCHAR*, int, BOOL); -typedef HRESULT (WINAPI *PFNSHGetFolderPathA)(HWND, int, HANDLE, DWORD, LPTSTR); -typedef HRESULT (WINAPI *PFNSHGetFolderPathW)(HWND, int, HANDLE, DWORD, LPWSTR); -typedef BOOL (WINAPI *PFNCreateEnvironmentBlock)(void**, HANDLE, BOOL); -typedef BOOL (WINAPI *PFNDestroyEnvironmentBlock)(void*); typedef int (__stdcall *PFNDllRegisterServer)(void); typedef int (__stdcall *PFNDllUnregisterServer)(void); -typedef DWORD (__stdcall *PFNNetApiBufferFree)(void*); -typedef DWORD (__stdcall *PFNNetWkstaGetInfo)(LPWSTR, DWORD, void*); - -typedef BOOL (__stdcall *PFNOpenProcessToken)(HANDLE, DWORD, HANDLE*); -typedef BOOL (__stdcall *PFNOpenThreadToken)(HANDLE, DWORD, BOOL, HANDLE*); -typedef BOOL (__stdcall *PFNGetTokenInformation)(HANDLE, TOKEN_INFORMATION_CLASS, void*, DWORD, DWORD*); -typedef BOOL (__stdcall *PFNAllocateAndInitializeSid)(PSID_IDENTIFIER_AUTHORITY, BYTE, DWORD, DWORD, - DWORD, DWORD, DWORD, DWORD, DWORD, DWORD, PSID*); -typedef BOOL (__stdcall *PFNEqualSid)(PSID, PSID); -typedef void* (__stdcall *PFNFreeSid)(PSID); typedef BOOL (__stdcall *PFNIsUserAnAdmin)(void); typedef BOOL (WINAPI *PFNGetProductInfo)(DWORD, DWORD, DWORD, DWORD, DWORD*); typedef void (WINAPI *PFNGetNativeSystemInfo)(LPSYSTEM_INFO lpSystemInfo); +typedef LONG (WINAPI *PFNRegGetValueA)(HKEY, LPCSTR, LPCSTR, DWORD, LPDWORD, PVOID, LPDWORD); #ifndef CSIDL_MYMUSIC # define CSIDL_MYMUSIC 0x000D @@ -133,24 +124,6 @@ BOOL g_osver_ex = TRUE; #define ONE_K_BUFSIZE 1024 -int -IsWin95(void) -{ - return (g_osver.dwPlatformId == VER_PLATFORM_WIN32_WINDOWS); -} - -int -IsWinNT(void) -{ - return (g_osver.dwPlatformId == VER_PLATFORM_WIN32_NT); -} - -int -IsWin2000(void) -{ - return (g_osver.dwMajorVersion > 4); -} - /* Convert SV to wide character string. The return value must be * freed using Safefree(). */ @@ -208,70 +181,38 @@ get_unicode_env(pTHX_ const WCHAR *name) SV *sv = NULL; void *env; HANDLE token; - HMODULE module; - PFNOpenProcessToken pfnOpenProcessToken; /* Get security token for the current process owner */ - module = LoadLibrary("advapi32.dll"); - if (!module) - return NULL; - - GETPROC(OpenProcessToken); - - if (pfnOpenProcessToken == NULL || - !pfnOpenProcessToken(GetCurrentProcess(), TOKEN_QUERY | TOKEN_DUPLICATE, &token)) + if (!OpenProcessToken(GetCurrentProcess(), TOKEN_QUERY | TOKEN_DUPLICATE, &token)) { - FreeLibrary(module); return NULL; } - FreeLibrary(module); /* Create a Unicode environment block for this process */ - module = LoadLibrary("userenv.dll"); - if (module) { - PFNCreateEnvironmentBlock pfnCreateEnvironmentBlock; - PFNDestroyEnvironmentBlock pfnDestroyEnvironmentBlock; - - GETPROC(CreateEnvironmentBlock); - GETPROC(DestroyEnvironmentBlock); - - if (pfnCreateEnvironmentBlock && pfnDestroyEnvironmentBlock && - pfnCreateEnvironmentBlock(&env, token, FALSE)) - { - size_t name_len = wcslen(name); - WCHAR *entry = (WCHAR *)env; - while (*entry) { - size_t i; - size_t entry_len = wcslen(entry); - BOOL equal = (entry_len > name_len) && (entry[name_len] == '='); - - for (i=0; equal && i < name_len; ++i) - equal = (towupper(entry[i]) == towupper(name[i])); - - if (equal) { - sv = wstr_to_sv(aTHX_ entry+name_len+1); - break; - } - entry += entry_len+1; + if (CreateEnvironmentBlock(&env, token, FALSE)) + { + size_t name_len = wcslen(name); + WCHAR *entry = (WCHAR *)env; + while (*entry) { + size_t i; + size_t entry_len = wcslen(entry); + BOOL equal = (entry_len > name_len) && (entry[name_len] == '='); + + for (i=0; equal && i < name_len; ++i) + equal = (towupper(entry[i]) == towupper(name[i])); + + if (equal) { + sv = wstr_to_sv(aTHX_ entry+name_len+1); + break; } - pfnDestroyEnvironmentBlock(env); + entry += entry_len+1; } - FreeLibrary(module); + DestroyEnvironmentBlock(env); } CloseHandle(token); return sv; } -/* Define both an ANSI and a Wide version of win32_longpath */ - -#define CHAR_T char -#define WIN32_FIND_DATA_T WIN32_FIND_DATAA -#define FN_FINDFIRSTFILE FindFirstFileA -#define FN_STRLEN strlen -#define FN_STRCPY strcpy -#define LONGPATH my_longpathA -#include "longpath.inc" - #define CHAR_T WCHAR #define WIN32_FIND_DATA_T WIN32_FIND_DATAW #define FN_FINDFIRSTFILE FindFirstFileW @@ -347,20 +288,10 @@ char* get_childdir(void) { dTHX; - char* ptr; + WCHAR filename[MAX_PATH+1]; - if (IsWin2000()) { - WCHAR filename[MAX_PATH+1]; - GetCurrentDirectoryW(MAX_PATH+1, filename); - ptr = my_ansipath(filename); - } - else { - char filename[MAX_PATH+1]; - GetCurrentDirectoryA(MAX_PATH+1, filename); - New(0, ptr, strlen(filename)+1, char); - strcpy(ptr, filename); - } - return ptr; + GetCurrentDirectoryW(MAX_PATH+1, filename); + return my_ansipath(filename); } void @@ -389,23 +320,17 @@ free_childenv(void *d) XS(w32_ExpandEnvironmentStrings) { dXSARGS; + WCHAR value[31*1024]; + WCHAR *source; if (items != 1) croak("usage: Win32::ExpandEnvironmentStrings($String)"); - if (IsWin2000()) { - WCHAR value[31*1024]; - WCHAR *source = sv_to_wstr(aTHX_ ST(0)); - ExpandEnvironmentStringsW(source, value, countof(value)-1); - ST(0) = wstr_to_sv(aTHX_ value); - Safefree(source); - XSRETURN(1); - } - else { - char value[31*1024]; - ExpandEnvironmentStringsA(SvPV_nolen(ST(0)), value, countof(value)-2); - XSRETURN_PV(value); - } + source = sv_to_wstr(aTHX_ ST(0)); + ExpandEnvironmentStringsW(source, value, countof(value)-1); + ST(0) = wstr_to_sv(aTHX_ value); + Safefree(source); + XSRETURN(1); } XS(w32_IsAdminUser) @@ -413,12 +338,6 @@ XS(w32_IsAdminUser) dXSARGS; HMODULE module; PFNIsUserAnAdmin pfnIsUserAnAdmin; - PFNOpenThreadToken pfnOpenThreadToken; - PFNOpenProcessToken pfnOpenProcessToken; - PFNGetTokenInformation pfnGetTokenInformation; - PFNAllocateAndInitializeSid pfnAllocateAndInitializeSid; - PFNEqualSid pfnEqualSid; - PFNFreeSid pfnFreeSid; HANDLE hTok; DWORD dwTokInfoLen; TOKEN_GROUPS *lpTokInfo; @@ -430,97 +349,61 @@ XS(w32_IsAdminUser) if (items) croak("usage: Win32::IsAdminUser()"); - /* There is no concept of "Administrator" user accounts on Win9x systems, - so just return true. */ - if (IsWin95()) - XSRETURN_YES; - /* Use IsUserAnAdmin() when available. On Vista this will only return TRUE * if the process is running with elevated privileges and not just when the * process owner is a member of the "Administrators" group. */ - module = LoadLibrary("shell32.dll"); - if (module) { - GETPROC(IsUserAnAdmin); - if (pfnIsUserAnAdmin) { - EXTEND(SP, 1); - ST(0) = sv_2mortal(newSViv(pfnIsUserAnAdmin() ? 1 : 0)); - FreeLibrary(module); - XSRETURN(1); - } - FreeLibrary(module); - } - - module = LoadLibrary("advapi32.dll"); - if (!module) { - warn("Cannot load advapi32.dll library"); - XSRETURN_UNDEF; - } - - GETPROC(OpenThreadToken); - GETPROC(OpenProcessToken); - GETPROC(GetTokenInformation); - GETPROC(AllocateAndInitializeSid); - GETPROC(EqualSid); - GETPROC(FreeSid); - - if (!(pfnOpenThreadToken && pfnOpenProcessToken && - pfnGetTokenInformation && pfnAllocateAndInitializeSid && - pfnEqualSid && pfnFreeSid)) - { - warn("Cannot load functions from advapi32.dll library"); - FreeLibrary(module); - XSRETURN_UNDEF; + module = GetModuleHandleA("shell32.dll"); + GETPROC(IsUserAnAdmin); + if (pfnIsUserAnAdmin) { + EXTEND(SP, 1); + ST(0) = sv_2mortal(newSViv(pfnIsUserAnAdmin() ? 1 : 0)); + XSRETURN(1); } - if (!pfnOpenThreadToken(GetCurrentThread(), TOKEN_QUERY, FALSE, &hTok)) { - if (!pfnOpenProcessToken(GetCurrentProcess(), TOKEN_QUERY, &hTok)) { + if (!OpenThreadToken(GetCurrentThread(), TOKEN_QUERY, FALSE, &hTok)) { + if (!OpenProcessToken(GetCurrentProcess(), TOKEN_QUERY, &hTok)) { warn("Cannot open thread token or process token"); - FreeLibrary(module); XSRETURN_UNDEF; } } - pfnGetTokenInformation(hTok, TokenGroups, NULL, 0, &dwTokInfoLen); + GetTokenInformation(hTok, TokenGroups, NULL, 0, &dwTokInfoLen); if (!New(1, lpTokInfo, dwTokInfoLen, TOKEN_GROUPS)) { warn("Cannot allocate token information structure"); CloseHandle(hTok); - FreeLibrary(module); XSRETURN_UNDEF; } - if (!pfnGetTokenInformation(hTok, TokenGroups, lpTokInfo, dwTokInfoLen, + if (!GetTokenInformation(hTok, TokenGroups, lpTokInfo, dwTokInfoLen, &dwTokInfoLen)) { warn("Cannot get token information"); Safefree(lpTokInfo); CloseHandle(hTok); - FreeLibrary(module); XSRETURN_UNDEF; } - if (!pfnAllocateAndInitializeSid(&NtAuth, 2, SECURITY_BUILTIN_DOMAIN_RID, + if (!AllocateAndInitializeSid(&NtAuth, 2, SECURITY_BUILTIN_DOMAIN_RID, DOMAIN_ALIAS_RID_ADMINS, 0, 0, 0, 0, 0, 0, &pAdminSid)) { warn("Cannot allocate administrators' SID"); Safefree(lpTokInfo); CloseHandle(hTok); - FreeLibrary(module); XSRETURN_UNDEF; } iRetVal = 0; for (i = 0; i < lpTokInfo->GroupCount; ++i) { - if (pfnEqualSid(lpTokInfo->Groups[i].Sid, pAdminSid)) { + if (EqualSid(lpTokInfo->Groups[i].Sid, pAdminSid)) { iRetVal = 1; break; } } - pfnFreeSid(pAdminSid); + FreeSid(pAdminSid); Safefree(lpTokInfo); CloseHandle(hTok); - FreeLibrary(module); EXTEND(SP, 1); ST(0) = sv_2mortal(newSViv(iRetVal)); @@ -681,30 +564,23 @@ XS(w32_MsgBox) dXSARGS; DWORD flags = MB_ICONEXCLAMATION; I32 result; + WCHAR *title = NULL, *msg; if (items < 1 || items > 3) croak("usage: Win32::MsgBox($message [, $flags [, $title]])"); + msg = sv_to_wstr(aTHX_ ST(0)); if (items > 1) flags = (DWORD)SvIV(ST(1)); + if (items > 2) + title = sv_to_wstr(aTHX_ ST(2)); + + result = MessageBoxW(GetActiveWindow(), msg, title ? title : L"Perl", flags); + + Safefree(msg); + if (title) + Safefree(title); - if (IsWin2000()) { - WCHAR *title = NULL; - WCHAR *msg = sv_to_wstr(aTHX_ ST(0)); - if (items > 2) - title = sv_to_wstr(aTHX_ ST(2)); - result = MessageBoxW(GetActiveWindow(), msg, title ? title : L"Perl", flags); - Safefree(msg); - if (title) - Safefree(title); - } - else { - const char *title = "Perl"; - char *msg = SvPV_nolen(ST(0)); - if (items > 2) - title = SvPV_nolen(ST(2)); - result = MessageBoxA(GetActiveWindow(), msg, title, flags); - } XSRETURN_IV(result); } @@ -795,6 +671,26 @@ XS(w32_GetArchName) XSRETURN_PV(getenv("PROCESSOR_ARCHITECTURE")); } +XS(w32_GetChipArch) +{ + dXSARGS; + SYSTEM_INFO sysinfo; + HMODULE module; + PFNGetNativeSystemInfo pfnGetNativeSystemInfo; + if (items) + Perl_croak(aTHX_ "usage: Win32::GetChipArch()"); + + Zero(&sysinfo,1,SYSTEM_INFO); + module = GetModuleHandle("kernel32.dll"); + GETPROC(GetNativeSystemInfo); + if (pfnGetNativeSystemInfo) + pfnGetNativeSystemInfo(&sysinfo); + else + GetSystemInfo(&sysinfo); + + XSRETURN_IV(sysinfo.wProcessorArchitecture); +} + XS(w32_GetChipName) { dXSARGS; @@ -845,11 +741,9 @@ XS(w32_GuidGen) XS(w32_GetFolderPath) { dXSARGS; - char path[MAX_PATH+1]; WCHAR wpath[MAX_PATH+1]; int folder; int create = 0; - HMODULE module; if (items != 1 && items != 2) croak("usage: Win32::GetFolderPath($csidl [, $create])\n"); @@ -858,51 +752,21 @@ XS(w32_GetFolderPath) if (items == 2) create = SvTRUE(ST(1)) ? CSIDL_FLAG_CREATE : 0; - module = LoadLibrary("shfolder.dll"); - if (module) { - PFNSHGetFolderPathA pfna; - if (IsWin2000()) { - PFNSHGetFolderPathW pfnw; - pfnw = (PFNSHGetFolderPathW)GetProcAddress(module, "SHGetFolderPathW"); - if (pfnw && SUCCEEDED(pfnw(NULL, folder|create, NULL, 0, wpath))) { - FreeLibrary(module); - ST(0) = wstr_to_ansipath(aTHX_ wpath); - XSRETURN(1); - } - } - pfna = (PFNSHGetFolderPathA)GetProcAddress(module, "SHGetFolderPathA"); - if (pfna && SUCCEEDED(pfna(NULL, folder|create, NULL, 0, path))) { - FreeLibrary(module); - XSRETURN_PV(path); - } - FreeLibrary(module); + if (SUCCEEDED(SHGetFolderPathW(NULL, folder|create, NULL, 0, wpath))) { + ST(0) = wstr_to_ansipath(aTHX_ wpath); + XSRETURN(1); } - module = LoadLibrary("shell32.dll"); - if (module) { - PFNSHGetSpecialFolderPathA pfna; - if (IsWin2000()) { - PFNSHGetSpecialFolderPathW pfnw; - pfnw = (PFNSHGetSpecialFolderPathW)GetProcAddress(module, "SHGetSpecialFolderPathW"); - if (pfnw && pfnw(NULL, wpath, folder, !!create)) { - FreeLibrary(module); - ST(0) = wstr_to_ansipath(aTHX_ wpath); - XSRETURN(1); - } - } - pfna = (PFNSHGetSpecialFolderPathA)GetProcAddress(module, "SHGetSpecialFolderPathA"); - if (pfna && pfna(NULL, path, folder, !!create)) { - FreeLibrary(module); - XSRETURN_PV(path); - } - FreeLibrary(module); + if (SHGetSpecialFolderPathW(NULL, wpath, folder, !!create)) { + ST(0) = wstr_to_ansipath(aTHX_ wpath); + XSRETURN(1); } /* SHGetFolderPathW() and SHGetSpecialFolderPathW() may fail on older * Perl versions that have replaced the Unicode environment with an * ANSI version. Let's go spelunking in the registry now... */ - if (IsWin2000()) { + { SV *sv; HKEY hkey; HKEY root = HKEY_CURRENT_USER; @@ -1101,7 +965,7 @@ XS(w32_SetCwd) if (items != 1) Perl_croak(aTHX_ "usage: Win32::SetCwd($cwd)"); - if (IsWin2000() && SvUTF8(ST(0))) { + if (SvUTF8(ST(0))) { WCHAR *wide = sv_to_wstr(aTHX_ ST(0)); char *ansi = my_ansipath(wide); int rc = PerlDir_chdir(ansi); @@ -1158,26 +1022,19 @@ XS(w32_SetLastError) XS(w32_LoginName) { dXSARGS; + WCHAR name[128]; + DWORD size = countof(name); + if (items) Perl_croak(aTHX_ "usage: Win32::LoginName()"); + EXTEND(SP,1); - if (IsWin2000()) { - WCHAR name[128]; - DWORD size = countof(name); - if (GetUserNameW(name, &size)) { - ST(0) = wstr_to_sv(aTHX_ name); - XSRETURN(1); - } - } - else { - char name[128]; - DWORD size = countof(name); - if (GetUserNameA(name, &size)) { - /* size includes NULL */ - ST(0) = sv_2mortal(newSVpvn(name, size-1)); - XSRETURN(1); - } + + if (GetUserNameW(name, &size)) { + ST(0) = wstr_to_sv(aTHX_ name); + XSRETURN(1); } + XSRETURN_UNDEF; } @@ -1201,65 +1058,31 @@ XS(w32_NodeName) XS(w32_DomainName) { dXSARGS; - HMODULE module = LoadLibrary("netapi32.dll"); - PFNNetApiBufferFree pfnNetApiBufferFree = NULL; - PFNNetWkstaGetInfo pfnNetWkstaGetInfo = NULL; + char dname[256]; + DWORD dnamelen = sizeof(dname); + WKSTA_INFO_100 *pwi; + DWORD retval; if (items) Perl_croak(aTHX_ "usage: Win32::DomainName()"); - if (module) { - GETPROC(NetApiBufferFree); - GETPROC(NetWkstaGetInfo); - } + EXTEND(SP,1); - if (module && pfnNetWkstaGetInfo && pfnNetApiBufferFree) { - /* this way is more reliable, in case user has a local account. */ - char dname[256]; - DWORD dnamelen = sizeof(dname); - struct { - DWORD wki100_platform_id; - LPWSTR wki100_computername; - LPWSTR wki100_langroup; - DWORD wki100_ver_major; - DWORD wki100_ver_minor; - } *pwi; - DWORD retval; - retval = pfnNetWkstaGetInfo(NULL, 100, &pwi); - /* NERR_Success *is* 0*/ - if (retval == 0) { - if (pwi->wki100_langroup && *(pwi->wki100_langroup)) { - WideCharToMultiByte(CP_ACP, 0, pwi->wki100_langroup, - -1, (LPSTR)dname, dnamelen, NULL, NULL); - } - else { - WideCharToMultiByte(CP_ACP, 0, pwi->wki100_computername, - -1, (LPSTR)dname, dnamelen, NULL, NULL); - } - pfnNetApiBufferFree(pwi); - FreeLibrary(module); - XSRETURN_PV(dname); - } - FreeLibrary(module); - SetLastError(retval); - } - else { - /* Win95 doesn't have NetWksta*(), so do it the old way */ - char name[256]; - DWORD size = sizeof(name); - if (module) - FreeLibrary(module); - if (GetUserName(name,&size)) { - char sid[ONE_K_BUFSIZE]; - DWORD sidlen = sizeof(sid); - char dname[256]; - DWORD dnamelen = sizeof(dname); - SID_NAME_USE snu; - if (LookupAccountName(NULL, name, (PSID)&sid, &sidlen, - dname, &dnamelen, &snu)) { - XSRETURN_PV(dname); /* all that for this */ - } - } + + retval = NetWkstaGetInfo(NULL, 100, (LPBYTE*)&pwi); + /* NERR_Success *is* 0*/ + if (retval == 0) { + if (pwi->wki100_langroup && *(pwi->wki100_langroup)) { + WideCharToMultiByte(CP_ACP, 0, pwi->wki100_langroup, + -1, (LPSTR)dname, dnamelen, NULL, NULL); + } + else { + WideCharToMultiByte(CP_ACP, 0, pwi->wki100_computername, + -1, (LPSTR)dname, dnamelen, NULL, NULL); + } + NetApiBufferFree(pwi); + XSRETURN_PV(dname); } + SetLastError(retval); XSRETURN_UNDEF; } @@ -1315,7 +1138,7 @@ XS(w32_IsWinNT) if (items) Perl_croak(aTHX_ "usage: Win32::IsWinNT()"); EXTEND(SP,1); - XSRETURN_IV(IsWinNT()); + XSRETURN_IV(g_osver.dwPlatformId == VER_PLATFORM_WIN32_NT); } XS(w32_IsWin95) @@ -1324,7 +1147,7 @@ XS(w32_IsWin95) if (items) Perl_croak(aTHX_ "usage: Win32::IsWin95()"); EXTEND(SP,1); - XSRETURN_IV(IsWin95()); + XSRETURN_IV(g_osver.dwPlatformId == VER_PLATFORM_WIN32_WINDOWS); } XS(w32_FormatMessage) @@ -1383,8 +1206,6 @@ XS(w32_Spawn) &stProcInfo)) /* <- Process info (if OK) */ { int pid = (int)stProcInfo.dwProcessId; - if (IsWin95() && pid < 0) - pid = -pid; sv_setiv(ST(2), pid); CloseHandle(stProcInfo.hThread);/* library source code does this. */ bSuccess = TRUE; @@ -1409,41 +1230,21 @@ XS(w32_GetTickCount) XS(w32_GetShortPathName) { dXSARGS; - SV *shortpath; DWORD len; + WCHAR wshort[MAX_PATH+1], *wlong; if (items != 1) Perl_croak(aTHX_ "usage: Win32::GetShortPathName($longPathName)"); - if (IsWin2000()) { - WCHAR wshort[MAX_PATH+1]; - WCHAR *wlong = sv_to_wstr(aTHX_ ST(0)); - len = GetShortPathNameW(wlong, wshort, countof(wshort)); - Safefree(wlong); - if (len && len < sizeof(wshort)) { - ST(0) = wstr_to_sv(aTHX_ wshort); - XSRETURN(1); - } - XSRETURN_UNDEF; - } - - shortpath = sv_mortalcopy(ST(0)); - SvUPGRADE(shortpath, SVt_PV); - if (!SvPVX(shortpath) || !SvLEN(shortpath)) - XSRETURN_UNDEF; + wlong = sv_to_wstr(aTHX_ ST(0)); + len = GetShortPathNameW(wlong, wshort, countof(wshort)); + Safefree(wlong); - /* src == target is allowed */ - do { - len = GetShortPathName(SvPVX(shortpath), - SvPVX(shortpath), - (DWORD)SvLEN(shortpath)); - } while (len >= SvLEN(shortpath) && sv_grow(shortpath,len+1)); - if (len) { - SvCUR_set(shortpath,len); - *SvEND(shortpath) = '\0'; - ST(0) = shortpath; - XSRETURN(1); + if (len && len < sizeof(wshort)) { + ST(0) = wstr_to_sv(aTHX_ wshort); + XSRETURN(1); } + XSRETURN_UNDEF; } @@ -1467,7 +1268,7 @@ XS(w32_GetFullPathName) Perl_croak(aTHX_ "usage: Win32::GetFullPathName($filename)"); #if __CYGWIN__ || !defined(PERL_IMPLICIT_SYS) - if (IsWin2000()) { + { WCHAR *filename = sv_to_wstr(aTHX_ ST(0)); WCHAR full[2*MAX_PATH]; DWORD len = GetFullPathNameW(filename, countof(full), full, NULL); @@ -1476,12 +1277,6 @@ XS(w32_GetFullPathName) XSRETURN_EMPTY; ansi = fullname = my_ansipath(full); } - else { - DWORD len = GetFullPathNameA(SvPV_nolen(ST(0)), countof(buffer), buffer, NULL); - if (len == 0 || len >= countof(buffer)) - XSRETURN_EMPTY; - fullname = buffer; - } #else /* Don't use my_ansipath() unless the $filename argument is in Unicode. * If the relative path doesn't exist, GetShortPathName() will fail and @@ -1492,7 +1287,7 @@ XS(w32_GetFullPathName) * XXX The one missing case is where we could downgrade $filename * XXX from UTF8 into the current codepage. */ - if (IsWin2000() && SvUTF8(ST(0))) { + if (SvUTF8(ST(0))) { WCHAR *filename = sv_to_wstr(aTHX_ ST(0)); WCHAR *mappedname = PerlDir_mapW(filename); Safefree(filename); @@ -1552,43 +1347,23 @@ XS(w32_GetFullPathName) XS(w32_GetLongPathName) { dXSARGS; + WCHAR *wstr, *long_path, wide_path[MAX_PATH+1]; if (items != 1) Perl_croak(aTHX_ "usage: Win32::GetLongPathName($pathname)"); - if (IsWin2000()) { - WCHAR *wstr = sv_to_wstr(aTHX_ ST(0)); - WCHAR wide_path[MAX_PATH+1]; - WCHAR *long_path; - - if (wcslen(wstr) < (size_t)countof(wide_path)) { - wcscpy(wide_path, wstr); - long_path = my_longpathW(wide_path); - if (long_path) { - Safefree(wstr); - ST(0) = wstr_to_sv(aTHX_ long_path); - XSRETURN(1); - } - } - Safefree(wstr); - } - else { - SV *path; - char tmpbuf[MAX_PATH+1]; - char *pathstr; - STRLEN len; + wstr = sv_to_wstr(aTHX_ ST(0)); - path = ST(0); - pathstr = SvPV(path,len); - if (len < sizeof(tmpbuf)) { - strcpy(tmpbuf, pathstr); - pathstr = my_longpathA(tmpbuf); - if (pathstr) { - ST(0) = sv_2mortal(newSVpvn(pathstr, strlen(pathstr))); - XSRETURN(1); - } + if (wcslen(wstr) < (size_t)countof(wide_path)) { + wcscpy(wide_path, wstr); + long_path = my_longpathW(wide_path); + if (long_path) { + Safefree(wstr); + ST(0) = wstr_to_sv(aTHX_ long_path); + XSRETURN(1); } } + Safefree(wstr); XSRETURN_EMPTY; } @@ -1678,7 +1453,7 @@ XS(w32_CreateDirectory) if (items != 1) Perl_croak(aTHX_ "usage: Win32::CreateDirectory($dir)"); - if (IsWin2000() && SvUTF8(ST(0))) { + if (SvUTF8(ST(0))) { WCHAR *dir = sv_to_wstr(aTHX_ ST(0)); result = CreateDirectoryW(dir, NULL); Safefree(dir); @@ -1699,7 +1474,7 @@ XS(w32_CreateFile) if (items != 1) Perl_croak(aTHX_ "usage: Win32::CreateFile($file)"); - if (IsWin2000() && SvUTF8(ST(0))) { + if (SvUTF8(ST(0))) { WCHAR *file = sv_to_wstr(aTHX_ ST(0)); handle = CreateFileW(file, GENERIC_WRITE, FILE_SHARE_WRITE, NULL, CREATE_NEW, FILE_ATTRIBUTE_NORMAL, NULL); @@ -1806,6 +1581,437 @@ XS(w32_SetConsoleOutputCP) XSRETURN_IV(SetConsoleOutputCP((int)SvIV(ST(0)))); } +XS(w32_GetProcessPrivileges) +{ + dXSARGS; + BOOL ret; + HV *priv_hv; + HANDLE proc_handle, token; + char *priv_name = NULL; + TOKEN_PRIVILEGES *privs = NULL; + DWORD i, pid, priv_name_len = 100, privs_len = 300; + + if (items > 1) + Perl_croak(aTHX_ "usage: Win32::GetProcessPrivileges([$pid])"); + + if (items == 0) { + EXTEND(SP, 1); + pid = GetCurrentProcessId(); + } + else { + pid = (DWORD)SvUV(ST(0)); + } + + proc_handle = OpenProcess(PROCESS_QUERY_INFORMATION, FALSE, pid); + + if (!proc_handle) + XSRETURN_NO; + + ret = OpenProcessToken(proc_handle, TOKEN_QUERY, &token); + CloseHandle(proc_handle); + + if (!ret) + XSRETURN_NO; + + do { + Renewc(privs, privs_len, char, TOKEN_PRIVILEGES); + ret = GetTokenInformation( + token, TokenPrivileges, privs, privs_len, &privs_len + ); + } while (!ret && GetLastError() == ERROR_INSUFFICIENT_BUFFER); + + CloseHandle(token); + + if (!ret) { + Safefree(privs); + XSRETURN_NO; + } + + priv_hv = newHV(); + New(0, priv_name, priv_name_len, char); + + for (i = 0; i < privs->PrivilegeCount; ++i) { + DWORD ret_len = 0; + LUID_AND_ATTRIBUTES *priv = &privs->Privileges[i]; + BOOL is_enabled = !!(priv->Attributes & SE_PRIVILEGE_ENABLED); + + if (priv->Attributes & SE_PRIVILEGE_REMOVED) + continue; + + do { + ret_len = priv_name_len; + ret = LookupPrivilegeNameA( + NULL, &priv->Luid, priv_name, &ret_len + ); + + if (ret_len > priv_name_len) { + priv_name_len = ret_len + 1; + Renew(priv_name, priv_name_len, char); + } + } while (!ret && GetLastError() == ERROR_INSUFFICIENT_BUFFER); + + if (!ret) { + SvREFCNT_dec((SV*)priv_hv); + Safefree(privs); + Safefree(priv_name); + XSRETURN_NO; + } + + hv_store(priv_hv, priv_name, ret_len, newSViv(is_enabled), 0); + } + + Safefree(privs); + Safefree(priv_name); + + ST(0) = sv_2mortal(newRV_noinc((SV*)priv_hv)); + XSRETURN(1); +} + +XS(w32_IsDeveloperModeEnabled) +{ + dXSARGS; + LONG status; + DWORD val, val_size = sizeof(val); + PFNRegGetValueA pfnRegGetValueA; + HMODULE module; + + if (items) + Perl_croak(aTHX_ "usage: Win32::IsDeveloperModeEnabled()"); + + EXTEND(SP, 1); + + /* developer mode was introduced in Windows 10 */ + if (g_osver.dwMajorVersion < 10) + XSRETURN_NO; + + module = GetModuleHandleA("advapi32.dll"); + GETPROC(RegGetValueA); + if (!pfnRegGetValueA) + XSRETURN_NO; + + status = pfnRegGetValueA( + HKEY_LOCAL_MACHINE, + "SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\AppModelUnlock", + "AllowDevelopmentWithoutDevLicense", + RRF_RT_REG_DWORD | KEY_WOW64_64KEY, + NULL, + &val, + &val_size + ); + + if (status == ERROR_SUCCESS && val == 1) + XSRETURN_YES; + + XSRETURN_NO; +} + +#ifdef WINHTTPAPI + +XS(w32_HttpGetFile) +{ + dXSARGS; + WCHAR *url = NULL, *file = NULL, *hostName = NULL, *urlPath = NULL; + bool bIgnoreCertErrors = FALSE; + WCHAR msgbuf[ONE_K_BUFSIZE]; + BOOL bResults = FALSE; + HINTERNET hSession = NULL, + hConnect = NULL, + hRequest = NULL; + HANDLE hOut = INVALID_HANDLE_VALUE; + BOOL bParsed = FALSE, + bAborted = FALSE, + bFileError = FALSE, + bHttpError = FALSE; + DWORD error = 0; + URL_COMPONENTS urlComp; + LPCWSTR acceptTypes[] = { L"*/*", NULL }; + DWORD dwHttpStatusCode = 0, dwQuerySize = 0; + + if (items < 2 || items > 3) + croak("usage: Win32::HttpGetFile($url, $file[, $ignore_cert_errors])"); + + url = sv_to_wstr(aTHX_ ST(0)); + file = sv_to_wstr(aTHX_ ST(1)); + + if (items == 3) + bIgnoreCertErrors = (BOOL)SvIV(ST(2)); + + /* Initialize the URL_COMPONENTS structure, setting the required + * component lengths to non-zero so that they get populated. + */ + ZeroMemory(&urlComp, sizeof(urlComp)); + urlComp.dwStructSize = sizeof(urlComp); + urlComp.dwSchemeLength = (DWORD)-1; + urlComp.dwHostNameLength = (DWORD)-1; + urlComp.dwUrlPathLength = (DWORD)-1; + urlComp.dwExtraInfoLength = (DWORD)-1; + + /* Parse the URL. */ + bParsed = WinHttpCrackUrl(url, (DWORD)wcslen(url), 0, &urlComp); + + /* Only support http and htts, not ftp, gopher, etc. */ + if (bParsed + && !(urlComp.nScheme == INTERNET_SCHEME_HTTPS + || urlComp.nScheme == INTERNET_SCHEME_HTTP)) { + SetLastError(12006); /* not a recognized protocol */ + bParsed = FALSE; + } + + if (bParsed) { + New(0, hostName, urlComp.dwHostNameLength + 1, WCHAR); + wcsncpy(hostName, urlComp.lpszHostName, urlComp.dwHostNameLength); + hostName[urlComp.dwHostNameLength] = 0; + + New(0, urlPath, urlComp.dwUrlPathLength + urlComp.dwExtraInfoLength + 1, WCHAR); + wcsncpy(urlPath, urlComp.lpszUrlPath, urlComp.dwUrlPathLength + urlComp.dwExtraInfoLength); + urlPath[urlComp.dwUrlPathLength + urlComp.dwExtraInfoLength] = 0; + + /* Use WinHttpOpen to obtain a session handle. */ + hSession = WinHttpOpen(L"Perl", + WINHTTP_ACCESS_TYPE_NO_PROXY, + WINHTTP_NO_PROXY_NAME, + WINHTTP_NO_PROXY_BYPASS, + 0); + } + + /* Specify an HTTP server. */ + if (hSession) + hConnect = WinHttpConnect(hSession, + hostName, + urlComp.nPort, + 0); + + /* Create an HTTP request handle. */ + if (hConnect) + hRequest = WinHttpOpenRequest(hConnect, + L"GET", + urlPath, + NULL, + WINHTTP_NO_REFERER, + acceptTypes, + urlComp.nScheme == INTERNET_SCHEME_HTTPS + ? WINHTTP_FLAG_SECURE + : 0); + + /* If specified, disable certificate-related errors for https connections. */ + if (hRequest + && bIgnoreCertErrors + && urlComp.nScheme == INTERNET_SCHEME_HTTPS) { + DWORD secFlags = SECURITY_FLAG_IGNORE_CERT_CN_INVALID + | SECURITY_FLAG_IGNORE_CERT_DATE_INVALID + | SECURITY_FLAG_IGNORE_UNKNOWN_CA + | SECURITY_FLAG_IGNORE_CERT_WRONG_USAGE; + if(!WinHttpSetOption(hRequest, + WINHTTP_OPTION_SECURITY_FLAGS, + &secFlags, + sizeof(secFlags))) { + bAborted = TRUE; + } + } + + /* Call WinHttpGetProxyForUrl with our target URL. If auto-proxy succeeds, + * then set the proxy info on the request handle. If auto-proxy fails, + * ignore the error and attempt to send the HTTP request directly to the + * target server (using the default WINHTTP_ACCESS_TYPE_NO_PROXY + * configuration, which the request handle will inherit from the session). + */ + if (hRequest && !bAborted) { + WINHTTP_AUTOPROXY_OPTIONS AutoProxyOptions; + WINHTTP_PROXY_INFO ProxyInfo; + DWORD cbProxyInfoSize = sizeof(ProxyInfo); + + ZeroMemory(&AutoProxyOptions, sizeof(AutoProxyOptions)); + ZeroMemory(&ProxyInfo, sizeof(ProxyInfo)); + AutoProxyOptions.dwFlags = WINHTTP_AUTOPROXY_AUTO_DETECT; + AutoProxyOptions.dwAutoDetectFlags = + WINHTTP_AUTO_DETECT_TYPE_DHCP | + WINHTTP_AUTO_DETECT_TYPE_DNS_A; + AutoProxyOptions.fAutoLogonIfChallenged = TRUE; + + if(WinHttpGetProxyForUrl(hSession, + url, + &AutoProxyOptions, + &ProxyInfo)) { + if(!WinHttpSetOption(hRequest, + WINHTTP_OPTION_PROXY, + &ProxyInfo, + cbProxyInfoSize)) { + bAborted = TRUE; + Perl_warn(aTHX_ "Win32::HttpGetFile: setting proxy options failed"); + } + Safefree(ProxyInfo.lpszProxy); + Safefree(ProxyInfo.lpszProxyBypass); + } + } + + /* Send a request. */ + if (hRequest && !bAborted) + bResults = WinHttpSendRequest(hRequest, + WINHTTP_NO_ADDITIONAL_HEADERS, + 0, + WINHTTP_NO_REQUEST_DATA, + 0, + 0, + 0); + + /* End the request. */ + if (bResults) + bResults = WinHttpReceiveResponse(hRequest, NULL); + + /* Retrieve HTTP status code. */ + if (bResults) { + dwQuerySize = sizeof(dwHttpStatusCode); + bResults = WinHttpQueryHeaders(hRequest, + WINHTTP_QUERY_STATUS_CODE | WINHTTP_QUERY_FLAG_NUMBER, + WINHTTP_HEADER_NAME_BY_INDEX, + &dwHttpStatusCode, + &dwQuerySize, + WINHTTP_NO_HEADER_INDEX); + } + + /* Retrieve HTTP status text. Note this may be a success message. */ + if (bResults) { + dwQuerySize = ONE_K_BUFSIZE * 2 - 2; + ZeroMemory(&msgbuf, ONE_K_BUFSIZE * 2); + bResults = WinHttpQueryHeaders(hRequest, + WINHTTP_QUERY_STATUS_TEXT, + WINHTTP_HEADER_NAME_BY_INDEX, + msgbuf, + &dwQuerySize, + WINHTTP_NO_HEADER_INDEX); + } + + /* There is no point in successfully downloading an error page from + * the server, so consider HTTP errors to be failures. + */ + if (bResults) { + if (dwHttpStatusCode < 200 || dwHttpStatusCode > 299) { + bResults = FALSE; + bHttpError = TRUE; + } + } + + /* Create output file for download. */ + if (bResults) { + hOut = CreateFileW(file, + GENERIC_WRITE, + FILE_SHARE_READ | FILE_SHARE_WRITE, + NULL, + CREATE_ALWAYS, + FILE_ATTRIBUTE_NORMAL, + NULL); + + if (hOut == INVALID_HANDLE_VALUE) + bFileError = TRUE; + } + + if (!bFileError && bResults) { + DWORD dwDownloaded = 0; + DWORD dwBytesWritten = 0; + DWORD dwSize = 65536; + char *pszOutBuffer; + + New(0, pszOutBuffer, dwSize, char); + + /* Keep checking for data until there is nothing left. */ + while (1) { + if (!WinHttpReadData(hRequest, + (LPVOID)pszOutBuffer, + dwSize, + &dwDownloaded)) { + bAborted = TRUE; + break; + } + if (!dwDownloaded) + break; + + /* Write what we just read to the output file */ + if (!WriteFile(hOut, + pszOutBuffer, + dwDownloaded, + &dwBytesWritten, + NULL)) { + bAborted = TRUE; + bFileError = TRUE; + break; + } + + } + + Safefree(pszOutBuffer); + } + else { + bAborted = TRUE; + } + + /* Clean-up may lose this. */ + if (bAborted) + error = GetLastError(); + + /* If we successfully opened the output file but failed later, mark + * the file for deletion. + */ + if (bAborted && hOut != INVALID_HANDLE_VALUE) + (void) DeleteFileW(file); + + /* Close any open handles. */ + if (hOut != INVALID_HANDLE_VALUE) CloseHandle(hOut); + if (hRequest) WinHttpCloseHandle(hRequest); + if (hConnect) WinHttpCloseHandle(hConnect); + if (hSession) WinHttpCloseHandle(hSession); + + Safefree(url); + Safefree(file); + Safefree(hostName); + Safefree(urlPath); + + /* Retrieve system and WinHttp error messages, or compose a user-defined + * error code if we got a failed HTTP status text above. Conveniently, adding + * 1e9 to the HTTP status sets bit 29, denoting a user-defined error code, + * and also makes it easy to lop off the upper part and just get HTTP status. + */ + if (bAborted) { + if (bHttpError) { + SetLastError(dwHttpStatusCode + 1000000000); + } + else { + DWORD msgFlags = bFileError + ? FORMAT_MESSAGE_FROM_SYSTEM + : FORMAT_MESSAGE_FROM_HMODULE; + msgFlags |= FORMAT_MESSAGE_IGNORE_INSERTS; + + ZeroMemory(&msgbuf, ONE_K_BUFSIZE * 2); + if (!FormatMessageW(msgFlags, + GetModuleHandleW(L"winhttp.dll"), + error, + 0, + msgbuf, + ONE_K_BUFSIZE - 1, /* TCHARs, not bytes */ + NULL)) { + wcsncpy(msgbuf, L"unable to format error message", ONE_K_BUFSIZE - 1); + } + SetLastError(error); + } + } + + if (GIMME_V == G_SCALAR) { + EXTEND(SP, 1); + ST(0) = !bAborted ? &PL_sv_yes : &PL_sv_no; + XSRETURN(1); + } + else if (GIMME_V == G_ARRAY) { + EXTEND(SP, 2); + ST(0) = !bAborted ? &PL_sv_yes : &PL_sv_no; + ST(1) = wstr_to_sv(aTHX_ msgbuf); + XSRETURN(2); + } + else { + XSRETURN_EMPTY; + } +} + +#endif + MODULE = Win32 PACKAGE = Win32 PROTOTYPES: DISABLE @@ -1835,6 +2041,7 @@ BOOT: newXS("Win32::RegisterServer", w32_RegisterServer, file); newXS("Win32::UnregisterServer", w32_UnregisterServer, file); newXS("Win32::GetArchName", w32_GetArchName, file); + newXS("Win32::GetChipArch", w32_GetChipArch, file); newXS("Win32::GetChipName", w32_GetChipName, file); newXS("Win32::GuidGen", w32_GuidGen, file); newXS("Win32::GetFolderPath", w32_GetFolderPath, file); @@ -1875,8 +2082,13 @@ BOOT: newXS("Win32::GetOEMCP", w32_GetOEMCP, file); newXS("Win32::SetConsoleCP", w32_SetConsoleCP, file); newXS("Win32::SetConsoleOutputCP", w32_SetConsoleOutputCP, file); + newXS("Win32::GetProcessPrivileges", w32_GetProcessPrivileges, file); + newXS("Win32::IsDeveloperModeEnabled", w32_IsDeveloperModeEnabled, file); #ifdef __CYGWIN__ newXS("Win32::SetChildShowWindow", w32_SetChildShowWindow, file); +#endif +#ifdef WINHTTPAPI + newXS("Win32::HttpGetFile", w32_HttpGetFile, file); #endif XSRETURN_YES; } diff --git a/gnu/usr.bin/perl/cpan/Win32/t/GetOSName.t b/gnu/usr.bin/perl/cpan/Win32/t/GetOSName.t index fd9e5ec1259..219f39a6c17 100755 --- a/gnu/usr.bin/perl/cpan/Win32/t/GetOSName.t +++ b/gnu/usr.bin/perl/cpan/Win32/t/GetOSName.t @@ -100,14 +100,50 @@ my @dual_tests = ( ["7 [Ultimate]", "7", 2, 6, 1, 0x01 ], ["8", "8", 2, 6, 2 ], -["2008 [R2]", "2008", 2, 6, 1, 0x00, 2, 89 ], -["2012", "2012", 2, 6, 2, 0x00, 2, 89 ], +["2008 [R2 Standard]", "2008", 2, 6, 1, 0x07, 2, 89 ], +["2012 [Standard]", "2012", 2, 6, 2, 0x07, 2, 89 ], ["[Small Business Server] 2008 R2", "2008", 2, 6, 1, 0x09, 2, 89 ], ["8.1", "8.1", 2, 6, 3 ], ["2012 [R2]", "2012", 2, 6, 3, 0x00, 2, 89 ], +); + +my @win10_tests = ( +["10 [Build 9840]", "10", 2, 10, 0, 0x00, 0, 0, 9840], + +["10 [Version 1507 (Preview Build 9841)]", "10", 2, 10, 0, 0x00, 0, 0, 9841], +["10 [Version 1507 (RTM)]", "10", 2, 10, 0, 0x00, 0, 0, 10240], + +["10 [Version 1511 (November Update) (Preview Build 10525)]", "10", 2, 10, 0, 0x00, 0, 0, 10525], +["10 [Version 1511 (November Update)]", "10", 2, 10, 0, 0x00, 0, 0, 10586], + +["10 [Version 1607 (Anniversary Update) (Preview Build 11082)]", "10", 2, 10, 0, 0x00, 0, 0, 11082], +["10 [Version 1607 (Anniversary Update)]", "10", 2, 10, 0, 0x00, 0, 0, 14393], + +["10 [Version 1703 (Creators Update) (Preview Build 14901)]", "10", 2, 10, 0, 0x00, 0, 0, 14901], +["10 [Version 1703 (Creators Update)]", "10", 2, 10, 0, 0x00, 0, 0, 15063], -["10", "10", 2, 10, 0 ], +["10 [Version 1709 (Fall Creators Update) (Preview Build 16170)]", "10", 2, 10, 0, 0x00, 0, 0, 16170], +["10 [Version 1709 (Fall Creators Update)]", "10", 2, 10, 0, 0x00, 0, 0, 16299], + +["10 [Version 1803 (April 2018 Update) (Preview Build 16353)]", "10", 2, 10, 0, 0x00, 0, 0, 16353], +["10 [Version 1803 (April 2018 Update)]", "10", 2, 10, 0, 0x00, 0, 0, 17134], + +["10 [Version 1809 (October 2018 Update) (Preview Build 17604)]", "10", 2, 10, 0, 0x00, 0, 0, 17604], +["10 [Version 1809 (October 2018 Update)]", "10", 2, 10, 0, 0x00, 0, 0, 17763], + +["10 [Version 1903 (May 2019 Update) (Preview Build 18204)]", "10", 2, 10, 0, 0x00, 0, 0, 18204], +["10 [Version 1903 (May 2019 Update)]", "10", 2, 10, 0, 0x00, 0, 0, 18362], + +["2016 [Version 1607]", "2016", 2, 10, 0, 0x07, 2, 0, 14393], +["2019 [Version 1809]", "2019", 2, 10, 0, 0x07, 2, 0, 17763], + +["Server [Version 1709]", "Server", 2, 10, 0, 0x07, 2, 0, 16299], +["Server [Version 1803]", "Server", 2, 10, 0, 0x07, 2, 0, 17134], +# The 1809 version from the semi-annual channel will identify as "Windows Server 2019 Version 1809" +#["Server [Version 1809]", "Server", 2, 10, 0, 0x07, 2, 0, 17763], +["Server [Version 1903]", "Server", 2, 10, 0, 0x07, 2, 0, 18362], +["Server [Build 12345]", "Server", 2, 10, 0, 0x07, 2, 0, 12345], ); @@ -116,12 +152,12 @@ my @ia64_tests = ( ["2003 [Enterprise Edition for Itanium-based Systems]", "2003", 2, 5, 2, 0x0002, 2, 0], ); -plan tests => 6 * (@intel_tests + @amd64_tests + 2*@dual_tests + @ia64_tests); +plan tests => 6 * (@intel_tests + @amd64_tests + 2*@dual_tests + @ia64_tests) + 3 * @win10_tests; # Test internal implementation function sub check { my($test, $arch) = @_; - my($pretty, $expect, $id, $major, $minor, $sm, $pt, $metrics) = @$test; + my($pretty, $expect, $id, $major, $minor, $sm, $pt, $metrics, $build) = @$test; $metrics = [$metrics] if defined($metrics) && not ref $metrics; my $tag = ""; @@ -133,7 +169,7 @@ sub check { # and 2003/2008 start with "Windows Server" unless ($pretty eq "Win32s") { my $prefix = "Windows"; - $prefix .= " Server" if $pretty =~ /^20(03|08|12)/; + $prefix .= " Server" if $pretty =~ /^20(03|08|12|16|19)/; $pretty = "$prefix $pretty"; } @@ -148,7 +184,7 @@ sub check { # We pass the same value for $suitemask and $productinfo. The former is # used for Windows up to 2003, the latter is used for Vista and later. - my($os, $desc) = Win32::_GetOSName("", $major||0, $minor||0, 0, + my($os, $desc) = Win32::_GetOSName("", $major||0, $minor||0, $build, $id, $sm||0, $pt||1, $sm||0, $arch, $metrics); my $display = Win32::GetOSDisplayName($os, $desc); @@ -157,6 +193,8 @@ sub check { is($os, "Win$expect", "os: $os"); is($desc, $tag, "desc: $desc"); + next if $major == 10; + my $sp = "Service Pack 42"; ($os, $desc) = Win32::_GetOSName($sp, $major||0, $minor||0, 0, $id, $sm||0, $pt||1, $sm||0, $arch, $metrics); @@ -168,7 +206,7 @@ sub check { is($desc, $expect, "desc: $desc"); } -check($_, Win32::PROCESSOR_ARCHITECTURE_INTEL) for @intel_tests, @dual_tests; +check($_, Win32::PROCESSOR_ARCHITECTURE_INTEL) for @intel_tests, @dual_tests, @win10_tests; check($_, Win32::PROCESSOR_ARCHITECTURE_AMD64) for @amd64_tests, @dual_tests; check($_, Win32::PROCESSOR_ARCHITECTURE_IA64) for @ia64_tests; diff --git a/gnu/usr.bin/perl/cpan/autodie/lib/Fatal.pm b/gnu/usr.bin/perl/cpan/autodie/lib/Fatal.pm index 09abfb8536d..744ca7228b8 100644 --- a/gnu/usr.bin/perl/cpan/autodie/lib/Fatal.pm +++ b/gnu/usr.bin/perl/cpan/autodie/lib/Fatal.pm @@ -55,7 +55,7 @@ use constant ERROR_58_HINTS => q{Non-subroutine %s hints for %s are not supporte use constant MIN_IPC_SYS_SIMPLE_VER => 0.12; -our $VERSION = '2.32'; # VERSION: Generated by DZP::OurPkg::Version +our $VERSION = '2.34'; # VERSION: Generated by DZP::OurPkg::Version our $Debug ||= 0; @@ -168,6 +168,8 @@ my %TAGS = ( ':2.30' => [qw(:default)], ':2.31' => [qw(:default)], ':2.32' => [qw(:default)], + ':2.33' => [qw(:default)], + ':2.34' => [qw(:default)], ); diff --git a/gnu/usr.bin/perl/cpan/autodie/lib/autodie.pm b/gnu/usr.bin/perl/cpan/autodie/lib/autodie.pm index 8f62d670d80..0c1b9ac04c4 100644 --- a/gnu/usr.bin/perl/cpan/autodie/lib/autodie.pm +++ b/gnu/usr.bin/perl/cpan/autodie/lib/autodie.pm @@ -9,7 +9,7 @@ our $VERSION; # ABSTRACT: Replace functions with ones that succeed or die with lexical scope BEGIN { - our $VERSION = '2.32'; # VERSION: Generated by DZP::OurPkg::Version + our $VERSION = '2.34'; # VERSION: Generated by DZP::OurPkg::Version } use constant ERROR_WRONG_FATAL => q{ @@ -306,7 +306,7 @@ return an empty list, or a list consisting only of a single undef element. Some builtins (e.g. C or C) has a call signature that -cannot completely be representated with a Perl prototype. This means +cannot completely be represented with a Perl prototype. This means that some valid Perl code will be invalid under autodie. As an example: chdir(BAREWORD); @@ -392,8 +392,7 @@ C with block eval is considered good practice. =head2 REPORTING BUGS Please report bugs via the GitHub Issue Tracker at -L or via the CPAN Request -Tracker at L. +L. =head1 FEEDBACK diff --git a/gnu/usr.bin/perl/cpan/autodie/lib/autodie/Scope/Guard.pm b/gnu/usr.bin/perl/cpan/autodie/lib/autodie/Scope/Guard.pm index 8ee412bac4f..2be221d410b 100644 --- a/gnu/usr.bin/perl/cpan/autodie/lib/autodie/Scope/Guard.pm +++ b/gnu/usr.bin/perl/cpan/autodie/lib/autodie/Scope/Guard.pm @@ -4,7 +4,7 @@ use strict; use warnings; # ABSTRACT: Wrapper class for calling subs at end of scope -our $VERSION = '2.32'; # VERSION +our $VERSION = '2.34'; # VERSION # This code schedules the cleanup of subroutines at the end of # scope. It's directly inspired by chocolateboy's excellent diff --git a/gnu/usr.bin/perl/cpan/autodie/lib/autodie/Scope/GuardStack.pm b/gnu/usr.bin/perl/cpan/autodie/lib/autodie/Scope/GuardStack.pm index 9b0a906d962..8cb1be1fa21 100644 --- a/gnu/usr.bin/perl/cpan/autodie/lib/autodie/Scope/GuardStack.pm +++ b/gnu/usr.bin/perl/cpan/autodie/lib/autodie/Scope/GuardStack.pm @@ -6,7 +6,7 @@ use warnings; use autodie::Scope::Guard; # ABSTRACT: Hook stack for managing scopes via %^H -our $VERSION = '2.32'; # VERSION +our $VERSION = '2.34'; # VERSION my $H_KEY_STEM = __PACKAGE__ . '/guard'; my $COUNTER = 0; diff --git a/gnu/usr.bin/perl/cpan/autodie/lib/autodie/Util.pm b/gnu/usr.bin/perl/cpan/autodie/lib/autodie/Util.pm index 1a04a195c0b..95de13eb224 100644 --- a/gnu/usr.bin/perl/cpan/autodie/lib/autodie/Util.pm +++ b/gnu/usr.bin/perl/cpan/autodie/lib/autodie/Util.pm @@ -14,7 +14,7 @@ our @EXPORT_OK = qw( on_end_of_compile_scope ); -our $VERSION = '2.32'; # VERSION: Generated by DZP::OurPkg:Version +our $VERSION = '2.34'; # VERSION: Generated by DZP::OurPkg:Version # ABSTRACT: Internal Utility subroutines for autodie and Fatal diff --git a/gnu/usr.bin/perl/cpan/autodie/lib/autodie/exception.pm b/gnu/usr.bin/perl/cpan/autodie/lib/autodie/exception.pm index d4c14f9f7d9..f4035d28c7f 100644 --- a/gnu/usr.bin/perl/cpan/autodie/lib/autodie/exception.pm +++ b/gnu/usr.bin/perl/cpan/autodie/lib/autodie/exception.pm @@ -4,7 +4,9 @@ use strict; use warnings; use Carp qw(croak); -our $VERSION = '2.32'; # VERSION: Generated by DZP::OurPkg:Version +use Scalar::Util qw(blessed); + +our $VERSION = '2.34'; # VERSION: Generated by DZP::OurPkg:Version # ABSTRACT: Exceptions from autodying functions. our $DEBUG = 0; diff --git a/gnu/usr.bin/perl/cpan/autodie/lib/autodie/exception/system.pm b/gnu/usr.bin/perl/cpan/autodie/lib/autodie/exception/system.pm index b0e270c056a..afe1617c84a 100644 --- a/gnu/usr.bin/perl/cpan/autodie/lib/autodie/exception/system.pm +++ b/gnu/usr.bin/perl/cpan/autodie/lib/autodie/exception/system.pm @@ -5,7 +5,7 @@ use warnings; use parent 'autodie::exception'; use Carp qw(croak); -our $VERSION = '2.32'; # VERSION: Generated by DZP::OurPkg:Version +our $VERSION = '2.34'; # VERSION: Generated by DZP::OurPkg:Version # ABSTRACT: Exceptions from autodying system(). diff --git a/gnu/usr.bin/perl/cpan/autodie/lib/autodie/hints.pm b/gnu/usr.bin/perl/cpan/autodie/lib/autodie/hints.pm index c3f83ed0ece..3778cc75dd4 100644 --- a/gnu/usr.bin/perl/cpan/autodie/lib/autodie/hints.pm +++ b/gnu/usr.bin/perl/cpan/autodie/lib/autodie/hints.pm @@ -5,7 +5,7 @@ use warnings; use constant PERL58 => ( $] < 5.009 ); -our $VERSION = '2.32'; # VERSION: Generated by DZP::OurPkg:Version +our $VERSION = '2.34'; # VERSION: Generated by DZP::OurPkg:Version # ABSTRACT: Provide hints about user subroutines to autodie diff --git a/gnu/usr.bin/perl/cpan/autodie/lib/autodie/skip.pm b/gnu/usr.bin/perl/cpan/autodie/lib/autodie/skip.pm index ad9706caa0f..32aba04fa51 100644 --- a/gnu/usr.bin/perl/cpan/autodie/lib/autodie/skip.pm +++ b/gnu/usr.bin/perl/cpan/autodie/lib/autodie/skip.pm @@ -2,7 +2,7 @@ package autodie::skip; use strict; use warnings; -our $VERSION = '2.32'; # VERSION +our $VERSION = '2.34'; # VERSION # This package exists purely so people can inherit from it, # which isn't at all how roles are supposed to work, but it's diff --git a/gnu/usr.bin/perl/cpan/bignum/lib/Math/BigFloat/Trace.pm b/gnu/usr.bin/perl/cpan/bignum/lib/Math/BigFloat/Trace.pm index 2fc069370ad..8fc67e95c9f 100644 --- a/gnu/usr.bin/perl/cpan/bignum/lib/Math/BigFloat/Trace.pm +++ b/gnu/usr.bin/perl/cpan/bignum/lib/Math/BigFloat/Trace.pm @@ -1,58 +1,76 @@ -#!perl +# -*- mode: perl; -*- package Math::BigFloat::Trace; -require 5.010; use strict; use warnings; use Exporter; use Math::BigFloat; -our ($accuracy, $precision, $round_mode, $div_scale); - our @ISA = qw(Exporter Math::BigFloat); -our $VERSION = '0.51'; +our $VERSION = '0.65'; use overload; # inherit overload from Math::BigFloat # Globals -$accuracy = $precision = undef; -$round_mode = 'even'; -$div_scale = 40; +our $accuracy = undef; +our $precision = undef; +our $round_mode = 'even'; +our $div_scale = 40; sub new { my $proto = shift; my $class = ref($proto) || $proto; my $value = shift; + my $a = $accuracy; $a = $_[0] if defined $_[0]; + my $p = $precision; $p = $_[1] if defined $_[1]; - my $self = Math::BigFloat->new($value, $a, $p, $round_mode); - # remember, downgrading may return a BigInt, so don't meddle with class - # bless $self, $class; + my $self = $class -> SUPER::new($value, $a, $p, $round_mode); + + printf "Math::BigFloat new '%s' => '%s' (%s)\n", + $value, $self, ref($self); - print "MBF new '$value' => '$self' (", ref($self), ")"; return $self; } sub import { - print "MBF import ", join(' ', @_); - my $self = shift; + my $class = shift; + + printf "%s -> import(%s)\n", $class, join(", ", @_); + + # we catch the constants, the rest goes to parent + + my $constant = grep { $_ eq ':constant' } @_; + my @a = grep { $_ ne ':constant' } @_; + + if ($constant) { + overload::constant + + integer => sub { + $class -> new(shift); + }, + + float => sub { + $class -> new(shift); + }, - # we catch the constants, the rest goes go BigFloat - my @a = (); - foreach (@_) { - push @a, $_ if $_ ne ':constant'; + binary => sub { + # E.g., a literal 0377 shall result in an object whose value + # is decimal 255, but new("0377") returns decimal 377. + return $class -> from_oct($_[0]) if $_[0] =~ /^0_*[0-7]/; + $class -> new(shift); + }; } - overload::constant float => sub { $self->new(shift); }; - Math::BigFloat->import(@a); # need it for subclasses -# $self->export_to_level(1,$self,@_); # need this ? + $class -> SUPER::import(@a); # need it for subclasses + #$self -> export_to_level(1, $class, @_); # need this ? } 1; diff --git a/gnu/usr.bin/perl/cpan/bignum/lib/Math/BigInt/Trace.pm b/gnu/usr.bin/perl/cpan/bignum/lib/Math/BigInt/Trace.pm index 5517bedad99..8808ee69b65 100644 --- a/gnu/usr.bin/perl/cpan/bignum/lib/Math/BigInt/Trace.pm +++ b/gnu/usr.bin/perl/cpan/bignum/lib/Math/BigInt/Trace.pm @@ -1,48 +1,76 @@ -#!perl +# -*- mode: perl; -*- package Math::BigInt::Trace; -require 5.010; use strict; use warnings; use Exporter; use Math::BigInt; -our ($accuracy, $precision, $round_mode, $div_scale); - our @ISA = qw(Exporter Math::BigInt); -our $VERSION = '0.51'; +our $VERSION = '0.65'; use overload; # inherit overload from Math::BigInt # Globals -$accuracy = $precision = undef; -$round_mode = 'even'; -$div_scale = 40; +our $accuracy = undef; +our $precision = undef; +our $round_mode = 'even'; +our $div_scale = 40; sub new { my $proto = shift; my $class = ref($proto) || $proto; my $value = shift; + my $a = $accuracy; $a = $_[0] if defined $_[0]; + my $p = $precision; $p = $_[1] if defined $_[1]; - my $self = Math::BigInt->new($value, $a, $p, $round_mode); - bless $self, $class; - print "MBI new '$value' => '$self' (", ref($self), ")"; + + my $self = $class -> SUPER::new($value, $a, $p, $round_mode); + + printf "Math::BigInt new '%s' => '%s' (%s)\n", + $value, $self, ref($self); + return $self; } sub import { - print "MBI import ", join(' ', @_); - my $self = shift; - Math::BigInt::import($self, @_); # need it for subclasses -# $self->export_to_level(1, $self, @_); # need this ? - @_ = (); + my $class = shift; + + printf "%s -> import(%s)\n", $class, join(", ", @_); + + # we catch the constants, the rest goes to parent + + my $constant = grep { $_ eq ':constant' } @_; + my @a = grep { $_ ne ':constant' } @_; + + if ($constant) { + overload::constant + + integer => sub { + $class -> new(shift); + }, + + float => sub { + $class -> new(shift); + }, + + binary => sub { + # E.g., a literal 0377 shall result in an object whose value + # is decimal 255, but new("0377") returns decimal 377. + return $class -> from_oct($_[0]) if $_[0] =~ /^0_*[0-7]/; + $class -> new(shift); + }; + } + + $class -> SUPER::import(@a); # need it for subclasses + #$self -> export_to_level(1, $class, @_); # need this ? } 1; diff --git a/gnu/usr.bin/perl/cpan/bignum/lib/bigint.pm b/gnu/usr.bin/perl/cpan/bignum/lib/bigint.pm index 8d7048b5927..bb68d5183ac 100644 --- a/gnu/usr.bin/perl/cpan/bignum/lib/bigint.pm +++ b/gnu/usr.bin/perl/cpan/bignum/lib/bigint.pm @@ -1,10 +1,11 @@ package bigint; -use 5.010; use strict; use warnings; -our $VERSION = '0.51'; +use Carp qw< carp croak >; + +our $VERSION = '0.65'; use Exporter; our @ISA = qw( Exporter ); @@ -13,99 +14,106 @@ our @EXPORT = qw( inf NaN ); use overload; -############################################################################## +my $obj_class = "Math::BigInt"; -# These are all alike, and thus faked by AUTOLOAD - -my @faked = qw/round_mode accuracy precision div_scale/; -our ($AUTOLOAD, $_lite); # _lite for testsuite - -sub AUTOLOAD { - my $name = $AUTOLOAD; - - $name =~ s/.*:://; # split package - no strict 'refs'; - foreach my $n (@faked) { - if ($n eq $name) { - *{"bigint::$name"} = - sub { - my $self = shift; - no strict 'refs'; - if (defined $_[0]) { - return Math::BigInt->$name($_[0]); - } - return Math::BigInt->$name(); - }; - return &$name; - } - } +############################################################################## - # delayed load of Carp and avoid recursion - require Carp; - Carp::croak ("Can't call bigint\-\>$name, not a valid method"); +sub accuracy { + my $self = shift; + $obj_class -> accuracy(@_); } -sub upgrade { - $Math::BigInt::upgrade; +sub precision { + my $self = shift; + $obj_class -> precision(@_); } -sub _binary_constant { - # this takes a binary/hexadecimal/octal constant string and returns it - # as string suitable for new. Basically it converts octal to decimal, and - # passes every thing else unmodified back. - my $string = shift; +sub round_mode { + my $self = shift; + $obj_class -> round_mode(@_); +} - return Math::BigInt->new($string) if $string =~ /^0[bx]/; +sub div_scale { + my $self = shift; + $obj_class -> div_scale(@_); +} - # so it must be an octal constant - Math::BigInt->from_oct($string); +sub in_effect { + my $level = shift || 0; + my $hinthash = (caller($level))[10]; + $hinthash->{bigint}; } sub _float_constant { - # this takes a floating point constant string and returns it truncated to - # integer. For instance, '4.5' => '4', '1.234e2' => '123' etc - my $float = shift; - - # some simple cases first - return $float if ($float =~ /^[+-]?[0-9]+$/); # '+123','-1','0' etc - return $float - if ($float =~ /^[+-]?[0-9]+\.?[eE]\+?[0-9]+$/); # 123e2, 123.e+2 - return '0' if ($float =~ /^[+-]?[0]*\.[0-9]+$/); # .2, 0.2, -.1 - if ($float =~ /^[+-]?[0-9]+\.[0-9]*$/) { # 1., 1.23, -1.2 etc - $float =~ s/\..*//; - return $float; - } - my ($mis, $miv, $mfv, $es, $ev) = Math::BigInt::_split($float); - return $float if !defined $mis; # doesn't look like a number to me - my $ec = int($$ev); - my $sign = $$mis; - $sign = '' if $sign eq '+'; - if ($$es eq '-') { - # ignore fraction part entirely - if ($ec >= length($$miv)) { # 123.23E-4 - return '0'; + my $str = shift; + + # We can't pass input directly to new() because of the way it handles the + # combination of non-integers with no upgrading. Such cases are by + # Math::BigInt returned as NaN, but we truncate to an integer. + + # See if we can convert the input string to a string using a normalized form + # consisting of the significand as a signed integer, the character "e", and + # the exponent as a signed integer, e.g., "+0e+0", "+314e-2", and "-1e+3". + + my $nstr; + + if ( + # See if it is an octal number. An octal number like '0377' is also + # accepted by the functions parsing decimal and hexadecimal numbers, so + # handle octal numbers before decimal and hexadecimal numbers. + + $str =~ /^0(?:[Oo]|_*[0-7])/ and + $nstr = Math::BigInt -> oct_str_to_dec_flt_str($str) + + or + + # See if it is decimal number. + + $nstr = Math::BigInt -> dec_str_to_dec_flt_str($str) + + or + + # See if it is a hexadecimal number. Every hexadecimal number has a + # prefix, but the functions parsing numbers don't require it, so check + # to see if it actually is a hexadecimal number. + + $str =~ /^0[Xx]/ and + $nstr = Math::BigInt -> hex_str_to_dec_flt_str($str) + + or + + # See if it is a binary numbers. Every binary number has a prefix, but + # the functions parsing numbers don't require it, so check to see if it + # actually is a binary number. + + $str =~ /^0[Bb]/ and + $nstr = Math::BigInt -> bin_str_to_dec_flt_str($str)) + { + my $pos = index($nstr, 'e'); + my $expo_sgn = substr($nstr, $pos + 1, 1); + my $sign = substr($nstr, 0, 1); + my $mant = substr($nstr, 1, $pos - 1); + my $mant_len = CORE::length($mant); + my $expo = substr($nstr, $pos + 2); + + if ($expo_sgn eq '-') { + if ($mant_len <= $expo) { + return $obj_class -> bzero(); # underflow + } else { + $mant = substr $mant, 0, $mant_len - $expo; # truncate + return $obj_class -> new($sign . $mant); + } + } else { + $mant .= "0" x $expo; # pad with zeros + return $obj_class -> new($sign . $mant); } - return $sign . substr($$miv, 0, length($$miv) - $ec); # 1234.45E-2 = 12 } - # xE+y - if ($ec >= length($$mfv)) { - $ec -= length($$mfv); - return $sign.$$miv.$$mfv if $ec == 0; # 123.45E+2 => 12345 - return $sign.$$miv.$$mfv.'E'.$ec; # 123.45e+3 => 12345e1 - } - $mfv = substr($$mfv, 0, $ec); - $sign.$$miv.$mfv; # 123.45e+1 => 1234 -} -sub unimport { - $^H{bigint} = undef; # no longer in effect - overload::remove_constant('binary', '', 'float', '', 'integer'); -} + # If we get here, there is a bug in the code above this point. -sub in_effect { - my $level = shift || 0; - my $hinthash = (caller($level))[10]; - $hinthash->{bigint}; + warn "Internal error: unable to handle literal constant '$str'.", + " This is a bug, so please report this to the module author."; + return $obj_class -> bnan(); } ############################################################################# @@ -122,13 +130,13 @@ sub _hex_core { # Strip off, clean, and parse as much as we can from the beginning. my $x; - if ($str =~ s/ ^ (0?[xX])? ( [0-9a-fA-F]* ( _ [0-9a-fA-F]+ )* ) //x) { + if ($str =~ s/ ^ ( 0? [xX] )? ( [0-9a-fA-F]* ( _ [0-9a-fA-F]+ )* ) //x) { my $chrs = $2; $chrs =~ tr/_//d; $chrs = '0' unless CORE::length $chrs; - $x = Math::BigInt -> from_hex($chrs); + $x = $obj_class -> from_hex($chrs); } else { - $x = Math::BigInt -> bzero(); + $x = $obj_class -> bzero(); } # Warn about trailing garbage. @@ -162,11 +170,11 @@ sub _oct_core { # Strip off, clean, and parse as much as we can from the beginning. - if ($str =~ s/ ^ (0?[bB])? ( [01]* ( _ [01]+ )* ) //x) { + if ($str =~ s/ ^ ( 0? [bB] )? ( [01]* ( _ [01]+ )* ) //x) { my $chrs = $2; $chrs =~ tr/_//d; $chrs = '0' unless CORE::length $chrs; - $x = Math::BigInt -> from_bin($chrs); + $x = $obj_class -> from_bin($chrs); } # Warn about trailing garbage. @@ -183,21 +191,20 @@ sub _oct_core { # Octal input. Strip off, clean, and parse as much as we can from the # beginning. - if ($str =~ s/ ^ ( [0-7]* ( _ [0-7]+ )* ) //x) { - my $chrs = $1; + if ($str =~ s/ ^ ( 0? [oO] )? ( [0-7]* ( _ [0-7]+ )* ) //x) { + my $chrs = $2; $chrs =~ tr/_//d; $chrs = '0' unless CORE::length $chrs; - $x = Math::BigInt -> from_oct($chrs); + $x = $obj_class -> from_oct($chrs); } - # Warn about trailing garbage. CORE::oct() only warns about 8 and 9. + # Warn about trailing garbage. CORE::oct() only warns about 8 and 9, but it + # is more helpful to warn about all invalid digits. if (CORE::length($str)) { - my $chr = substr($str, 0, 1); - if ($chr eq '8' || $chr eq '9') { - require Carp; - Carp::carp(sprintf("Illegal octal digit '%s' ignored", $chr)); - } + require Carp; + Carp::carp(sprintf("Illegal octal digit '%s' ignored", + substr($str, 0, 1))); } return $x; @@ -228,16 +235,20 @@ my ($prev_oct, $prev_hex, $overridden); if (LEXICAL) { eval <<'.' } sub _hex(_) { my $hh = (caller 0)[10]; - return $prev_hex ? &$prev_hex($_[0]) : CORE::hex($_[0]) - unless $$hh{bigint}||$$hh{bignum}||$$hh{bigrat}; - _hex_core($_[0]); + return $$hh{bigint} ? bigint::_hex_core($_[0]) + : $$hh{bigfloat} ? bigfloat::_hex_core($_[0]) + : $$hh{bigrat} ? bigrat::_hex_core($_[0]) + : $prev_hex ? &$prev_hex($_[0]) + : CORE::hex($_[0]); } sub _oct(_) { my $hh = (caller 0)[10]; - return $prev_oct ? &$prev_oct($_[0]) : CORE::oct($_[0]) - unless $$hh{bigint}||$$hh{bignum}||$$hh{bigrat}; - _oct_core($_[0]); + return $$hh{bigint} ? bigint::_oct_core($_[0]) + : $$hh{bigfloat} ? bigfloat::_oct_core($_[0]) + : $$hh{bigrat} ? bigrat::_oct_core($_[0]) + : $prev_oct ? &$prev_oct($_[0]) + : CORE::oct($_[0]); } . @@ -248,128 +259,141 @@ sub _override { no warnings 'redefine'; *CORE::GLOBAL::oct = \&_oct; *CORE::GLOBAL::hex = \&_hex; - $overridden++; + $overridden = 1; +} + +sub unimport { + $^H{bigint} = undef; # no longer in effect + overload::remove_constant('binary', '', 'float', '', 'integer'); } sub import { - my $self = shift; + my $class = shift; - $^H{bigint} = 1; # we are in effect + $^H{bigint} = 1; # we are in effect + $^H{bigfloat} = undef; + $^H{bigrat} = undef; # for newer Perls always override hex() and oct() with a lexical version: if (LEXICAL) { _override(); } - # some defaults - my $lib = ''; - my $lib_kind = 'try'; - - my @import = (':constant'); # drive it w/ constant - my @a = @_; - my $l = scalar @_; - my $j = 0; - my ($ver, $trace); # version? trace? - my ($a, $p); # accuracy, precision - for (my $i = 0; $i < $l; $i++, $j++) { - if ($_[$i] =~ /^(l|lib|try|only)$/) { - # this causes a different low lib to take care... - $lib_kind = $1; - $lib_kind = 'lib' if $lib_kind eq 'l'; - $lib = $_[$i + 1] || ''; - my $s = 2; - $s = 1 if @a - $j < 2; # avoid "can not modify non-existent..." - splice @a, $j, $s; - $j -= $s; - $i++; - } elsif ($_[$i] =~ /^(a|accuracy)$/) { - $a = $_[$i + 1]; - my $s = 2; - $s = 1 if @a - $j < 2; # avoid "can not modify non-existent..." - splice @a, $j, $s; - $j -= $s; - $i++; - } elsif ($_[$i] =~ /^(p|precision)$/) { - $p = $_[$i + 1]; - my $s = 2; - $s = 1 if @a - $j < 2; # avoid "can not modify non-existent..." - splice @a, $j, $s; - $j -= $s; - $i++; - } elsif ($_[$i] =~ /^(v|version)$/) { + + my @import = (); + my @a = (); # unrecognized arguments + my $ver; # version? trace? + + while (@_) { + my $param = shift; + + # Accuracy. + + if ($param =~ /^a(ccuracy)?$/) { + push @import, 'accuracy', shift(); + next; + } + + # Precision. + + if ($param =~ /^p(recision)?$/) { + push @import, 'precision', shift(); + next; + } + + # Rounding mode. + + if ($param eq 'round_mode') { + push @import, 'round_mode', shift(); + next; + } + + # Backend library. + + if ($param =~ /^(l|lib|try|only)$/) { + push @import, $param eq 'l' ? 'lib' : $param; + push @import, shift() if @_; + next; + } + + if ($param =~ /^(v|version)$/) { $ver = 1; - splice @a, $j, 1; - $j--; - } elsif ($_[$i] =~ /^(t|trace)$/) { - $trace = 1; - splice @a, $j, 1; - $j--; - } elsif ($_[$i] !~ /^(PI|e|bpi|bexp|hex|oct)\z/) { - die ("unknown option $_[$i]"); + next; } - } - my $class; - $_lite = 0; # using M::BI::L ? - if ($trace) { - require Math::BigInt::Trace; - $class = 'Math::BigInt::Trace'; - } else { - # see if we can find Math::BigInt::Lite - if (!defined $a && !defined $p) { # rounding won't work to well - local @INC = @INC; - pop @INC if $INC[-1] eq '.'; - if (eval { require Math::BigInt::Lite; 1 }) { - @import = (); # :constant in Lite, not MBI - Math::BigInt::Lite->import(':constant'); - $_lite = 1; # signal okay - } + + if ($param =~ /^(t|trace)$/) { + $obj_class .= "::Trace"; + eval "require $obj_class"; + die $@ if $@; + next; + } + + if ($param =~ /^(PI|e|bexp|bpi|hex|oct)\z/) { + push @a, $param; + next; } - require Math::BigInt if $_lite == 0; # not already loaded? - $class = 'Math::BigInt'; # regardless of MBIL or not + + croak("Unknown option '$param'"); } - push @import, $lib_kind => $lib if $lib ne ''; - # Math::BigInt::Trace or plain Math::BigInt - $class->import(@import); - bigint->accuracy($a) if defined $a; - bigint->precision($p) if defined $p; + eval "require $obj_class"; + die $@ if $@; + $obj_class -> import(@import); + if ($ver) { - print "bigint\t\t\t v$VERSION\n"; - print "Math::BigInt::Lite\t v$Math::BigInt::Lite::VERSION\n" if $_lite; - print "Math::BigInt\t\t v$Math::BigInt::VERSION"; - my $config = Math::BigInt->config(); - print " lib => $config->{lib} v$config->{lib_version}\n"; + printf "%-31s v%s\n", $class, $class -> VERSION(); + printf " lib => %-23s v%s\n", + $obj_class -> config("lib"), $obj_class -> config("lib_version"); + printf "%-31s v%s\n", $obj_class, $obj_class -> VERSION(); exit; } - # we take care of floating point constants, since BigFloat isn't available - # and BigInt doesn't like them: - overload::constant float => - sub { - Math::BigInt->new(_float_constant(shift)); - }; - # Take care of octal/hexadecimal constants - overload::constant binary => - sub { - _binary_constant(shift); - }; - # if another big* was already loaded: - my ($package) = caller(); + $class -> export_to_level(1, $class, @a); # export inf, NaN, etc. - no strict 'refs'; - if (!defined *{"${package}::inf"}) { - $self->export_to_level(1, $self, @a); # export inf and NaN, e and PI - } + overload::constant + + # This takes care each number written as decimal integer and within the + # range of what perl can represent as an integer, e.g., "314", but not + # "3141592653589793238462643383279502884197169399375105820974944592307". + + integer => sub { + #printf "Value '%s' handled by the 'integer' sub.\n", $_[0]; + my $str = shift; + return $obj_class -> new($str); + }, + + # This takes care of each number written with a decimal point and/or + # using floating point notation, e.g., "3.", "3.0", "3.14e+2" (decimal), + # "0b1.101p+2" (binary), "03.14p+2" and "0o3.14p+2" (octal), and + # "0x3.14p+2" (hexadecimal). + + float => sub { + #printf "# Value '%s' handled by the 'float' sub.\n", $_[0]; + _float_constant(shift); + }, + + # Take care of each number written as an integer (no decimal point or + # exponent) using binary, octal, or hexadecimal notation, e.g., "0b101" + # (binary), "0314" and "0o314" (octal), and "0x314" (hexadecimal). + + binary => sub { + #printf "# Value '%s' handled by the 'binary' sub.\n", $_[0]; + my $str = shift; + return $obj_class -> new($str) if $str =~ /^0[XxBb]/; + $obj_class -> from_oct($str); + }; } -sub inf () { Math::BigInt->binf(); } -sub NaN () { Math::BigInt->bnan(); } +sub inf () { $obj_class -> binf(); } +sub NaN () { $obj_class -> bnan(); } + +sub PI () { $obj_class -> new(3); } +sub e () { $obj_class -> new(2); } + +sub bpi ($) { $obj_class -> new(3); } -sub PI () { Math::BigInt->new(3); } -sub e () { Math::BigInt->new(2); } -sub bpi ($) { Math::BigInt->new(3); } sub bexp ($$) { - my $x = Math::BigInt->new($_[0]); - $x->bexp($_[1]); + my $x = $obj_class -> new(shift); + $x -> bexp(@_); } 1; @@ -380,66 +404,104 @@ __END__ =head1 NAME -bigint - Transparent BigInteger support for Perl +bigint - transparent big integer support for Perl =head1 SYNOPSIS - use bigint; + use bigint; - $x = 2 + 4.5,"\n"; # BigInt 6 - print 2 ** 512,"\n"; # really is what you think it is - print inf + 42,"\n"; # inf - print NaN * 7,"\n"; # NaN - print hex("0x1234567890123490"),"\n"; # Perl v5.10.0 or later + $x = 2 + 4.5; # Math::BigInt 6 + print 2 ** 512; # Math::BigInt 134...096 + print inf + 42; # Math::BigInt inf + print NaN * 7; # Math::BigInt NaN + print hex("0x1234567890123490"); # Perl v5.10.0 or later - { - no bigint; - print 2 ** 256,"\n"; # a normal Perl scalar now - } + { + no bigint; + print 2 ** 256; # a normal Perl scalar now + } - # Import into current package: - use bigint qw/hex oct/; - print hex("0x1234567890123490"),"\n"; - print oct("01234567890123490"),"\n"; + # for older Perls, import into current package: + use bigint qw/hex oct/; + print hex("0x1234567890123490"); + print oct("01234567890123490"); =head1 DESCRIPTION +All numeric literal in the given scope are converted to Math::BigInt objects. +Numeric literal that represent non-integers are truncated to an integer. All +results of expressions are also truncated to integer. + All operators (including basic math operations) except the range operator C<..> -are overloaded. Integer constants are created as proper BigInts. +are overloaded. + +Unlike the L pragma, the C pragma creates integers that are +only limited in their size by the available memory. + +So, the following: + + use bigint; + $x = 1234; + +creates a Math::BigInt and stores a reference to in $x. This happens +transparently and behind your back, so to speak. + +You can see this with the following: + + perl -Mbigint -le 'print ref(1234)' + +Since numbers are actually objects, you can call all the usual methods from +Math::BigFloat on them. This even works to some extent on expressions: + + perl -Mbigint -le '$x = 1234; print $x->bdec()' + perl -Mbigint -le 'print 1234->copy()->binc();' + perl -Mbigint -le 'print 1234->copy()->binc->badd(6);' + perl -Mbigint -le 'print +(1234)->copy()->binc()' + +(Note that print doesn't do what you expect if the expression starts with +'(' hence the C<+>) + +You can even chain the operations together as usual: -Floating point constants are truncated to integer. All parts and results of -expressions are also truncated. + perl -Mbigint -le 'print 1234->copy()->binc->badd(6);' + 1241 -Unlike L, this pragma creates integer constants that are only -limited in their size by the available memory and CPU time. +Please note the following does not work as expected (prints nothing), since +overloading of '..' is not yet possible in Perl (as of v5.8.0): + + perl -Mbigint -le 'for (1..2) { print ref($_); }' =head2 use integer vs. use bigint -There is one small difference between C and C: the -former will not affect assignments to variables and the return value of -some functions. C truncates these results to integer too: - - # perl -Minteger -wle 'print 3.2' - 3.2 - # perl -Minteger -wle 'print 3.2 + 0' - 3 - # perl -Mbigint -wle 'print 3.2' - 3 - # perl -Mbigint -wle 'print 3.2 + 0' - 3 - - # perl -Mbigint -wle 'print exp(1) + 0' - 2 - # perl -Mbigint -wle 'print exp(1)' - 2 - # perl -Minteger -wle 'print exp(1)' - 2.71828182845905 - # perl -Minteger -wle 'print exp(1) + 0' - 2 - -In practice this makes seldom a difference as B of -expressions will be truncated anyway, but this can, for instance, affect the -return value of subroutines: +There are some difference between C and C. + +Whereas C is limited to what can be handled as a Perl scalar, C can handle arbitrarily large integers. + +Also, C does affect assignments to variables and the return value +of some functions. C truncates these results to integer: + + # perl -Minteger -wle 'print 3.2' + 3.2 + # perl -Minteger -wle 'print 3.2 + 0' + 3 + # perl -Mbigint -wle 'print 3.2' + 3 + # perl -Mbigint -wle 'print 3.2 + 0' + 3 + + # perl -Mbigint -wle 'print exp(1) + 0' + 2 + # perl -Mbigint -wle 'print exp(1)' + 2 + # perl -Minteger -wle 'print exp(1)' + 2.71828182845905 + # perl -Minteger -wle 'print exp(1) + 0' + 2 + +In practice this seldom makes a difference for small integers as B of expressions are truncated anyway, but this can, for instance, affect +the return value of subroutines: sub three_integer { use integer; return 3.2; } sub three_bigint { use bigint; return 3.2; } @@ -448,168 +510,135 @@ return value of subroutines: =head2 Options -bigint recognizes some options that can be passed while loading it via use. -The options can (currently) be either a single letter form, or the long form. -The following options exist: +C recognizes some options that can be passed while loading it via +C. The following options exist: -=over 2 +=over 4 =item a or accuracy This sets the accuracy for all math operations. The argument must be greater -than or equal to zero. See Math::BigInt's bround() function for details. +than or equal to zero. See Math::BigInt's bround() method for details. - perl -Mbigint=a,2 -le 'print 12345+1' + perl -Mbigint=a,2 -le 'print 12345+1' Note that setting precision and accuracy at the same time is not possible. =item p or precision This sets the precision for all math operations. The argument can be any -integer. Negative values mean a fixed number of digits after the dot, and -are ignored since all operations happen in integer space. -A positive value rounds to this digit left from the dot. 0 or 1 mean round to -integer and are ignore like negative values. - -See Math::BigInt's bfround() function for details. +integer. Negative values mean a fixed number of digits after the dot, and are +ignored since all operations happen in integer space. A positive value rounds to +this digit left from the dot. 0 means round to integer. See Math::BigInt's +bfround() method for details. - perl -Mbignum=p,5 -le 'print 123456789+123' + perl -mbigint=p,5 -le 'print 123456789+123' Note that setting precision and accuracy at the same time is not possible. =item t or trace -This enables a trace mode and is primarily for debugging bigint or -Math::BigInt. - -=item hex - -Override the built-in hex() method with a version that can handle big -integers. This overrides it by exporting it to the current package. Under -Perl v5.10.0 and higher, this is not so necessary, as hex() is lexically -overridden in the current scope whenever the bigint pragma is active. - -=item oct +This enables a trace mode and is primarily for debugging. -Override the built-in oct() method with a version that can handle big -integers. This overrides it by exporting it to the current package. Under -Perl v5.10.0 and higher, this is not so necessary, as oct() is lexically -overridden in the current scope whenever the bigint pragma is active. - -=item l, lib, try or only +=item l, lib, try, or only Load a different math lib, see L. - perl -Mbigint=lib,GMP -e 'print 2 ** 512' - perl -Mbigint=try,GMP -e 'print 2 ** 512' - perl -Mbigint=only,GMP -e 'print 2 ** 512' + perl -Mbigint=l,GMP -e 'print 2 ** 512' + perl -Mbigint=lib,GMP -e 'print 2 ** 512' + perl -Mbigint=try,GMP -e 'print 2 ** 512' + perl -Mbigint=only,GMP -e 'print 2 ** 512' + +=item hex -Currently there is no way to specify more than one library on the command -line. This means the following does not work: +Override the built-in hex() method with a version that can handle big numbers. +This overrides it by exporting it to the current package. Under Perl v5.10.0 and +higher, this is not so necessary, as hex() is lexically overridden in the +current scope whenever the C pragma is active. - perl -Mbignum=l,GMP,Pari -e 'print 2 ** 512' +=item oct -This will be hopefully fixed soon ;) +Override the built-in oct() method with a version that can handle big numbers. +This overrides it by exporting it to the current package. Under Perl v5.10.0 and +higher, this is not so necessary, as oct() is lexically overridden in the +current scope whenever the C pragma is active. =item v or version -This prints out the name and version of all modules used and then exits. +this prints out the name and version of the modules and then exits. - perl -Mbigint=v + perl -Mbigint=v =back =head2 Math Library -Math with the numbers is done (by default) by a module called -Math::BigInt::Calc. This is equivalent to saying: +Math with the numbers is done (by default) by a backend library module called +Math::BigInt::Calc. The default is equivalent to saying: - use bigint lib => 'Calc'; + use bigint lib => 'Calc'; -You can change this by using: +you can change this by using: - use bignum lib => 'GMP'; + use bigint lib => 'GMP'; -The following would first try to find Math::BigInt::Foo, then -Math::BigInt::Bar, and when this also fails, revert to Math::BigInt::Calc: +The following would first try to find Math::BigInt::Foo, then Math::BigInt::Bar, +and if this also fails, revert to Math::BigInt::Calc: - use bigint lib => 'Foo,Math::BigInt::Bar'; + use bigint lib => 'Foo,Math::BigInt::Bar'; -Using C warns if none of the specified libraries can be found and -L did fall back to one of the default libraries. -To suppress this warning, use C instead: +Using c warns if none of the specified libraries can be found and +L fell back to one of the default libraries. To suppress this +warning, use c instead: - use bignum try => 'GMP'; + use bigint try => 'GMP'; If you want the code to die instead of falling back, use C instead: - use bignum only => 'GMP'; - -Please see respective module documentation for further details. - -=head2 Internal Format - -The numbers are stored as objects, and their internals might change at anytime, -especially between math operations. The objects also might belong to different -classes, like Math::BigInt, or Math::BigInt::Lite. Mixing them together, even -with normal scalars is not extraordinary, but normal and expected. + use bigint only => 'GMP'; -You should not depend on the internal format, all accesses must go through -accessor methods. E.g. looking at $x->{sign} is not a good idea since there -is no guaranty that the object in question has such a hash key, nor is a hash -underneath at all. - -=head2 Sign - -The sign is either '+', '-', 'NaN', '+inf' or '-inf'. -You can access it with the sign() method. - -A sign of 'NaN' is used to represent the result when input arguments are not -numbers or as a result of 0/0. '+inf' and '-inf' represent plus respectively -minus infinity. You will get '+inf' when dividing a positive number by 0, and -'-inf' when dividing any negative number by 0. +Please see the respective module documentation for further details. =head2 Method calls -Since all numbers are now objects, you can use all functions that are part of -the BigInt API. You can only use the bxxx() notation, and not the fxxx() -notation, though. +Since all numbers are now objects, you can use all methods that are part of the +Math::BigInt API. But a warning is in order. When using the following to make a copy of a number, only a shallow copy will be made. - $x = 9; $y = $x; - $x = $y = 7; + $x = 9; $y = $x; + $x = $y = 7; -Using the copy or the original with overloaded math is okay, e.g. the -following work: +Using the copy or the original with overloaded math is okay, e.g., the following +work: - $x = 9; $y = $x; - print $x + 1, " ", $y,"\n"; # prints 10 9 + $x = 9; $y = $x; + print $x + 1, " ", $y,"\n"; # prints 10 9 -but calling any method that modifies the number directly will result in -B the original and the copy being destroyed: +but calling any method that modifies the number directly will result in B +the original and the copy being destroyed: - $x = 9; $y = $x; - print $x->badd(1), " ", $y,"\n"; # prints 10 10 + $x = 9; $y = $x; + print $x->badd(1), " ", $y,"\n"; # prints 10 10 - $x = 9; $y = $x; - print $x->binc(1), " ", $y,"\n"; # prints 10 10 + $x = 9; $y = $x; + print $x->binc(1), " ", $y,"\n"; # prints 10 10 - $x = 9; $y = $x; - print $x->bmul(2), " ", $y,"\n"; # prints 18 18 + $x = 9; $y = $x; + print $x->bmul(2), " ", $y,"\n"; # prints 18 18 Using methods that do not modify, but test that the contents works: - $x = 9; $y = $x; - $z = 9 if $x->is_zero(); # works fine + $x = 9; $y = $x; + $z = 9 if $x->is_zero(); # works fine -See the documentation about the copy constructor and C<=> in overload, as -well as the documentation in BigInt for further details. +See the documentation about the copy constructor and C<=> in overload, as well +as the documentation in Math::BigInt for further details. =head2 Methods -=over 2 +=over 4 =item inf() @@ -623,56 +652,66 @@ handle bareword C properly. =item e - # perl -Mbigint=e -wle 'print e' + # perl -Mbigint=e -wle 'print e' -Returns Euler's number C, aka exp(1). Note that under bigint, this is -truncated to an integer, and hence simple '2'. +Returns Euler's number C, aka exp(1). Note that under C, this is +truncated to an integer, i.e., 2. =item PI - # perl -Mbigint=PI -wle 'print PI' + # perl -Mbigint=PI -wle 'print PI' -Returns PI. Note that under bigint, this is truncated to an integer, and hence -simple '3'. +Returns PI. Note that under C, this is truncated to an integer, i.e., 3. =item bexp() - bexp($power,$accuracy); + bexp($power, $accuracy); -Returns Euler's number C raised to the appropriate power, to -the wanted accuracy. +Returns Euler's number C raised to the appropriate power, to the wanted +accuracy. -Note that under bigint, the result is truncated to an integer. +Note that under C, the result is truncated to an integer. Example: - # perl -Mbigint=bexp -wle 'print bexp(1,80)' + # perl -Mbigint=bexp -wle 'print bexp(1,80)' =item bpi() - bpi($accuracy); + bpi($accuracy); -Returns PI to the wanted accuracy. Note that under bigint, this is truncated -to an integer, and hence simple '3'. +Returns PI to the wanted accuracy. Note that under C, this is truncated +to an integer, i.e., 3. Example: - # perl -Mbigint=bpi -wle 'print bpi(80)' + # perl -Mbigint=bpi -wle 'print bpi(80)' + +=item accuracy() + +Set or get the accuracy. + +=item precision() + +Set or get the precision. + +=item round_mode() + +Set or get the rounding mode. -=item upgrade() +=item div_scale() -Return the class that numbers are upgraded to, is in fact returning -C<$Math::BigInt::upgrade>. +Set or get the division scale. =item in_effect() - use bigint; + use bigint; - print "in effect\n" if bigint::in_effect; # true - { - no bigint; - print "in effect\n" if bigint::in_effect; # false - } + print "in effect\n" if bigint::in_effect; # true + { + no bigint; + print "in effect\n" if bigint::in_effect; # false + } Returns true or false if C is in effect in the current scope. @@ -682,41 +721,47 @@ This method only works on Perl v5.9.4 or later. =head1 CAVEATS -=over 2 +=over 4 + +=item Hexadecimal, octal, and binary floating point literals + +Perl (and this module) accepts hexadecimal, octal, and binary floating point +literals, but use them with care with Perl versions before v5.32.0, because some +versions of Perl silently give the wrong result. =item Operator vs literal overloading -C works by overloading handling of integer and floating point -literals, converting them to L objects. +C works by overloading handling of integer and floating point literals, +converting them to L objects. -This means that arithmetic involving only string values or string -literals will be performed using Perl's built-in operators. +This means that arithmetic involving only string values or string literals are +performed using Perl's built-in operators. For example: - use bignum; + use bigint; my $x = "900000000000000009"; my $y = "900000000000000007"; print $x - $y; -will output C<0> on default 32-bit builds, since C never sees -the string literals. To ensure the expression is all treated as -C objects, use a literal number in the expression: +outputs C<0> on default 32-bit builds, since C never sees the string +literals. To ensure the expression is all treated as C objects, +use a literal number in the expression: print +(0+$x) - $y; -=item ranges +=item Ranges -Perl does not allow overloading of ranges, so you can neither safely use -ranges with bigint endpoints, nor is the iterator variable a bigint. +Perl does not allow overloading of ranges, so you can neither safely use ranges +with C endpoints, nor is the iterator variable a C. - use 5.010; - for my $i (12..13) { - for my $j (20..21) { - say $i ** $j; # produces a floating-point number, - # not a big integer - } - } + use 5.010; + for my $i (12..13) { + for my $j (20..21) { + say $i ** $j; # produces a floating-point number, + # not an object + } + } =item in_effect() @@ -724,63 +769,49 @@ This method only works on Perl v5.9.4 or later. =item hex()/oct() -C overrides these routines with versions that can also handle -big integer values. Under Perl prior to version v5.9.4, however, this -will not happen unless you specifically ask for it with the two -import tags "hex" and "oct" - and then it will be global and cannot be -disabled inside a scope with "no bigint": +C overrides these routines with versions that can also handle big +integer values. Under Perl prior to version v5.9.4, however, this will not +happen unless you specifically ask for it with the two import tags "hex" and +"oct" - and then it will be global and cannot be disabled inside a scope with +C: - use bigint qw/hex oct/; + use bigint qw/hex oct/; + print hex("0x1234567890123456"); + { + no bigint; print hex("0x1234567890123456"); - { - no bigint; - print hex("0x1234567890123456"); - } + } The second call to hex() will warn about a non-portable constant. Compare this to: - use bigint; + use bigint; - # will warn only under Perl older than v5.9.4 - print hex("0x1234567890123456"); + # will warn only under Perl older than v5.9.4 + print hex("0x1234567890123456"); =back -=head1 MODULES USED - -C is just a thin wrapper around various modules of the Math::BigInt -family. Think of it as the head of the family, who runs the shop, and orders -the others to do the work. - -The following modules are currently used by bigint: - - Math::BigInt::Lite (for speed, and only if it is loadable) - Math::BigInt - =head1 EXAMPLES Some cool command line examples to impress the Python crowd ;) You might want -to compare them to the results under -Mbignum or -Mbigrat: - - perl -Mbigint -le 'print sqrt(33)' - perl -Mbigint -le 'print 2*255' - perl -Mbigint -le 'print 4.5+2*255' - perl -Mbigint -le 'print 3/7 + 5/7 + 8/3' - perl -Mbigint -le 'print 123->is_odd()' - perl -Mbigint -le 'print log(2)' - perl -Mbigint -le 'print 2 ** 0.5' - perl -Mbigint=a,65 -le 'print 2 ** 0.2' - perl -Mbignum=a,65,l,GMP -le 'print 7 ** 7777' +to compare them to the results under -Mbigfloat or -Mbigrat: -=head1 BUGS + perl -Mbigint -le 'print sqrt(33)' + perl -Mbigint -le 'print 2*255' + perl -Mbigint -le 'print 4.5+2*255' + perl -Mbigint -le 'print 123->is_odd()' + perl -Mbigint=l,GMP -le 'print 7 ** 7777' -For information about bugs and how to report them, see the BUGS section in the -documentation available with the perldoc command. +=head1 BUGS - perldoc bignum +Please report any bugs or feature requests to +C, or through the web interface at +L (requires login). +We will be notified, and then you'll automatically be notified of +progress on your bug as I make changes. =head1 SUPPORT @@ -788,10 +819,31 @@ You can find documentation for this module with the perldoc command. perldoc bigint -For more information, see the SUPPORT section in the documentation available -with the perldoc command. +You can also look for information at: + +=over 4 + +=item * GitHub + +L - perldoc bignum +=item * RT: CPAN's request tracker + +L + +=item * MetaCPAN + +L + +=item * CPAN Testers Matrix + +L + +=item * CPAN Ratings + +L + +=back =head1 LICENSE @@ -815,7 +867,7 @@ L, L and L. =item * -Maintained by Peter John Acklam Epjacklam@gmail.com, 2014-. +Maintained by Peter John Acklam Epjacklam@gmail.comE, 2014-. =back diff --git a/gnu/usr.bin/perl/cpan/bignum/lib/bignum.pm b/gnu/usr.bin/perl/cpan/bignum/lib/bignum.pm index 55300c8273f..a0ef30bdbec 100644 --- a/gnu/usr.bin/perl/cpan/bignum/lib/bignum.pm +++ b/gnu/usr.bin/perl/cpan/bignum/lib/bignum.pm @@ -1,62 +1,60 @@ package bignum; -use 5.010; use strict; use warnings; -our $VERSION = '0.51'; +use Carp qw< carp croak >; + +our $VERSION = '0.65'; use Exporter; -our @ISA = qw( bigint ); +our @ISA = qw( Exporter ); our @EXPORT_OK = qw( PI e bpi bexp hex oct ); our @EXPORT = qw( inf NaN ); use overload; -use bigint (); + +# Defaults: When a constant is an integer, Inf or NaN, it is converted to an +# object of class $int_class. When a constant is a finite non-integer, it is +# converted to an object of class $float_class. + +my $int_class = 'Math::BigInt'; +my $float_class = 'Math::BigFloat'; ############################################################################## -BEGIN { - *inf = \&bigint::inf; - *NaN = \&bigint::NaN; - *hex = \&bigint::hex; - *oct = \&bigint::oct; +sub accuracy { + shift; + $int_class -> accuracy(@_); + $float_class -> accuracy(@_); } -# These are all alike, and thus faked by AUTOLOAD - -my @faked = qw/round_mode accuracy precision div_scale/; -our ($AUTOLOAD, $_lite); # _lite for testsuite - -sub AUTOLOAD { - my $name = $AUTOLOAD; - - $name =~ s/.*:://; # split package - no strict 'refs'; - foreach my $n (@faked) { - if ($n eq $name) { - *{"bignum::$name"} = - sub { - my $self = shift; - no strict 'refs'; - if (defined $_[0]) { - Math::BigInt->$name($_[0]); - return Math::BigFloat->$name($_[0]); - } - return Math::BigInt->$name(); - }; - return &$name; - } - } +sub precision { + shift; + $int_class -> precision(@_); + $float_class -> precision(@_); +} - # delayed load of Carp and avoid recursion - require Carp; - Carp::croak ("Can't call bignum\-\>$name, not a valid method"); +sub round_mode { + shift; + $int_class -> round_mode(@_); + $float_class -> round_mode(@_); } -sub unimport { - $^H{bignum} = undef; # no longer in effect - overload::remove_constant('binary', '', 'float', '', 'integer'); +sub div_scale { + shift; + $int_class -> div_scale(@_); + $float_class -> div_scale(@_); +} + +sub upgrade { + shift; + $int_class -> upgrade(@_); +} + +sub downgrade { + shift; + $float_class -> downgrade(@_); } sub in_effect { @@ -65,157 +63,386 @@ sub in_effect { $hinthash->{bignum}; } +sub _float_constant { + my $str = shift; + + # See if we can convert the input string to a string using a normalized form + # consisting of the significand as a signed integer, the character "e", and + # the exponent as a signed integer, e.g., "+0e+0", "+314e-2", and "-1e+3". + + my $nstr; + + if ( + # See if it is an octal number. An octal number like '0377' is also + # accepted by the functions parsing decimal and hexadecimal numbers, so + # handle octal numbers before decimal and hexadecimal numbers. + + $str =~ /^0(?:[Oo]|_*[0-7])/ and + $nstr = Math::BigInt -> oct_str_to_dec_flt_str($str) + + or + + # See if it is decimal number. + + $nstr = Math::BigInt -> dec_str_to_dec_flt_str($str) + + or + + # See if it is a hexadecimal number. Every hexadecimal number has a + # prefix, but the functions parsing numbers don't require it, so check + # to see if it actually is a hexadecimal number. + + $str =~ /^0[Xx]/ and + $nstr = Math::BigInt -> hex_str_to_dec_flt_str($str) + + or + + # See if it is a binary numbers. Every binary number has a prefix, but + # the functions parsing numbers don't require it, so check to see if it + # actually is a binary number. + + $str =~ /^0[Bb]/ and + $nstr = Math::BigInt -> bin_str_to_dec_flt_str($str)) + { + my $pos = index($nstr, 'e'); + my $expo_sgn = substr($nstr, $pos + 1, 1); + my $sign = substr($nstr, 0, 1); + my $mant = substr($nstr, 1, $pos - 1); + my $mant_len = CORE::length($mant); + my $expo = substr($nstr, $pos + 2); + + # The number is a non-integer if and only if the exponent is negative. + + if ($expo_sgn eq '-') { + return $float_class -> new($str); + + my $upgrade = $int_class -> upgrade(); + return $upgrade -> new($nstr) if defined $upgrade; + + if ($mant_len <= $expo) { + return $int_class -> bzero(); # underflow + } else { + $mant = substr $mant, 0, $mant_len - $expo; # truncate + return $int_class -> new($sign . $mant); + } + } else { + $mant .= "0" x $expo; # pad with zeros + return $int_class -> new($sign . $mant); + } + } + + # If we get here, there is a bug in the code above this point. + + warn "Internal error: unable to handle literal constant '$str'.", + " This is a bug, so please report this to the module author."; + return $int_class -> bnan(); +} + +############################################################################# +# the following two routines are for "use bignum qw/hex oct/;": + +use constant LEXICAL => $] > 5.009004; + +# Internal function with the same semantics as CORE::hex(). This function is +# not used directly, but rather by other front-end functions. + +sub _hex_core { + my $str = shift; + + # Strip off, clean, and parse as much as we can from the beginning. + + my $x; + if ($str =~ s/ ^ ( 0? [xX] )? ( [0-9a-fA-F]* ( _ [0-9a-fA-F]+ )* ) //x) { + my $chrs = $2; + $chrs =~ tr/_//d; + $chrs = '0' unless CORE::length $chrs; + $x = $int_class -> from_hex($chrs); + } else { + $x = $int_class -> bzero(); + } + + # Warn about trailing garbage. + + if (CORE::length($str)) { + require Carp; + Carp::carp(sprintf("Illegal hexadecimal digit '%s' ignored", + substr($str, 0, 1))); + } + + return $x; +} + +# Internal function with the same semantics as CORE::oct(). This function is +# not used directly, but rather by other front-end functions. + +sub _oct_core { + my $str = shift; + + $str =~ s/^\s*//; + + # Hexadecimal input. + + return _hex_core($str) if $str =~ /^0?[xX]/; + + my $x; + + # Binary input. + + if ($str =~ /^0?[bB]/) { + + # Strip off, clean, and parse as much as we can from the beginning. + + if ($str =~ s/ ^ ( 0? [bB] )? ( [01]* ( _ [01]+ )* ) //x) { + my $chrs = $2; + $chrs =~ tr/_//d; + $chrs = '0' unless CORE::length $chrs; + $x = $int_class -> from_bin($chrs); + } + + # Warn about trailing garbage. + + if (CORE::length($str)) { + require Carp; + Carp::carp(sprintf("Illegal binary digit '%s' ignored", + substr($str, 0, 1))); + } + + return $x; + } + + # Octal input. Strip off, clean, and parse as much as we can from the + # beginning. + + if ($str =~ s/ ^ ( 0? [oO] )? ( [0-7]* ( _ [0-7]+ )* ) //x) { + my $chrs = $2; + $chrs =~ tr/_//d; + $chrs = '0' unless CORE::length $chrs; + $x = $int_class -> from_oct($chrs); + } + + # Warn about trailing garbage. CORE::oct() only warns about 8 and 9, but it + # is more helpful to warn about all invalid digits. + + if (CORE::length($str)) { + require Carp; + Carp::carp(sprintf("Illegal octal digit '%s' ignored", + substr($str, 0, 1))); + } + + return $x; +} + +{ + my $proto = LEXICAL ? '_' : ';$'; + eval ' +sub hex(' . $proto . ') {' . <<'.'; + my $str = @_ ? $_[0] : $_; + _hex_core($str); +} +. + + eval ' +sub oct(' . $proto . ') {' . <<'.'; + my $str = @_ ? $_[0] : $_; + _oct_core($str); +} +. +} + ############################################################################# +# the following two routines are for Perl 5.9.4 or later and are lexical + +my ($prev_oct, $prev_hex, $overridden); + +if (LEXICAL) { eval <<'.' } +sub _hex(_) { + my $hh = (caller 0)[10]; + return $$hh{bignum} ? bignum::_hex_core($_[0]) + : $$hh{bigrat} ? bigrat::_hex_core($_[0]) + : $$hh{bigint} ? bigint::_hex_core($_[0]) + : $prev_hex ? &$prev_hex($_[0]) + : CORE::hex($_[0]); +} + +sub _oct(_) { + my $hh = (caller 0)[10]; + return $$hh{bignum} ? bignum::_oct_core($_[0]) + : $$hh{bigrat} ? bigrat::_oct_core($_[0]) + : $$hh{bigint} ? bigint::_oct_core($_[0]) + : $prev_oct ? &$prev_oct($_[0]) + : CORE::oct($_[0]); +} +. + +sub _override { + return if $overridden; + $prev_oct = *CORE::GLOBAL::oct{CODE}; + $prev_hex = *CORE::GLOBAL::hex{CODE}; + no warnings 'redefine'; + *CORE::GLOBAL::oct = \&_oct; + *CORE::GLOBAL::hex = \&_hex; + $overridden = 1; +} + +sub unimport { + $^H{bignum} = undef; # no longer in effect + overload::remove_constant('binary', '', 'float', '', 'integer'); +} sub import { - my $self = shift; + my $class = shift; - $^H{bignum} = 1; # we are in effect + $^H{bignum} = 1; # we are in effect + $^H{bigint} = undef; + $^H{bigrat} = undef; - # for newer Perls override hex() and oct() with a lexical version: - if ($] > 5.009004) { - bigint::_override(); + # for newer Perls always override hex() and oct() with a lexical version: + if (LEXICAL) { + _override(); } - # some defaults - my $lib = ''; - my $lib_kind = 'try'; - my $upgrade = 'Math::BigFloat'; - my $downgrade = 'Math::BigInt'; - - my @import = (':constant'); # drive it w/ constant - my @a = @_; - my $l = scalar @_; - my $j = 0; - my ($ver, $trace); # version? trace? - my ($a, $p); # accuracy, precision - for (my $i = 0; $i < $l; $i++, $j++) { - if ($_[$i] eq 'upgrade') { - # this causes upgrading - $upgrade = $_[$i + 1]; # or undef to disable - my $s = 2; - $s = 1 if @a - $j < 2; # avoid "can not modify non-existent..." - splice @a, $j, $s; - $j -= $s; - $i++; - } elsif ($_[$i] eq 'downgrade') { - # this causes downgrading - $downgrade = $_[$i + 1]; # or undef to disable - my $s = 2; - $s = 1 if @a - $j < 2; # avoid "can not modify non-existent..." - splice @a, $j, $s; - $j -= $s; - $i++; - } elsif ($_[$i] =~ /^(l|lib|try|only)$/) { - # this causes a different low lib to take care... - $lib_kind = $1; - $lib_kind = 'lib' if $lib_kind eq 'l'; - $lib = $_[$i + 1] || ''; - my $s = 2; - $s = 1 if @a - $j < 2; # avoid "can not modify non-existent..." - splice @a, $j, $s; - $j -= $s; - $i++; + my @import = (); # common options + my @int_import = (upgrade => $float_class); # int class only options + my @flt_import = (downgrade => $int_class); # float class only options + my @a = (); # unrecognized arguments + my $ver; # display version info? + + while (@_) { + my $param = shift; + + # Upgrading. + + if ($param eq 'upgrade') { + my $arg = shift; + $float_class = $arg if defined $arg; + push @int_import, 'upgrade', $arg; + next; + } + + # Downgrading. + + if ($param eq 'downgrade') { + my $arg = shift; + $int_class = $arg if defined $arg; + push @flt_import, 'downgrade', $arg; + next; } - elsif ($_[$i] =~ /^(a|accuracy)$/) { - $a = $_[$i + 1]; - my $s = 2; - $s = 1 if @a - $j < 2; # avoid "can not modify non-existent..." - splice @a, $j, $s; - $j -= $s; - $i++; + + # Accuracy. + + if ($param =~ /^a(ccuracy)?$/) { + push @import, 'accuracy', shift(); + next; } - elsif ($_[$i] =~ /^(p|precision)$/) { - $p = $_[$i + 1]; - my $s = 2; - $s = 1 if @a - $j < 2; # avoid "can not modify non-existent..." - splice @a, $j, $s; - $j -= $s; - $i++; + + # Precision. + + if ($param =~ /^p(recision)?$/) { + push @import, 'precision', shift(); + next; } - elsif ($_[$i] =~ /^(v|version)$/) { - $ver = 1; - splice @a, $j, 1; - $j--; + + # Rounding mode. + + if ($param eq 'round_mode') { + push @import, 'round_mode', shift(); + next; } - elsif ($_[$i] =~ /^(t|trace)$/) { - $trace = 1; - splice @a, $j, 1; - $j--; + + # Backend library. + + if ($param =~ /^(l|lib|try|only)$/) { + push @import, $param eq 'l' ? 'lib' : $param; + push @import, shift() if @_; + next; } - elsif ($_[$i] !~ /^(PI|e|bexp|bpi|hex|oct)\z/) { - die ("unknown option $_[$i]"); + + if ($param =~ /^(v|version)$/) { + $ver = 1; + next; } - } - my $class; - $_lite = 0; # using M::BI::L ? - if ($trace) { - require Math::BigInt::Trace; - $class = 'Math::BigInt::Trace'; - $upgrade = 'Math::BigFloat::Trace'; - } - else { - # see if we can find Math::BigInt::Lite - if (!defined $a && !defined $p) { # rounding won't work to well - local @INC = @INC; - pop @INC if $INC[-1] eq '.'; - if (eval { require Math::BigInt::Lite; 1 }) { - @import = (); # :constant in Lite, not MBI - Math::BigInt::Lite->import(':constant'); - $_lite = 1; # signal okay - } + + if ($param =~ /^(PI|e|bexp|bpi|hex|oct)\z/) { + push @a, $param; + next; } - require Math::BigInt if $_lite == 0; # not already loaded? - $class = 'Math::BigInt'; # regardless of MBIL or not - } - push @import, $lib_kind => $lib if $lib ne ''; - # Math::BigInt::Trace or plain Math::BigInt - $class->import(@import, upgrade => $upgrade); - - if ($trace) { - require Math::BigFloat::Trace; - $class = 'Math::BigFloat::Trace'; - $downgrade = 'Math::BigInt::Trace'; - } - else { - require Math::BigFloat; - $class = 'Math::BigFloat'; + + croak("Unknown option '$param'"); } - $class->import(':constant', 'downgrade', $downgrade); - bignum->accuracy($a) if defined $a; - bignum->precision($p) if defined $p; + eval "require $int_class"; + die $@ if $@; + $int_class -> import(@int_import, @import); + + eval "require $float_class"; + die $@ if $@; + $float_class -> import(@flt_import, @import); + if ($ver) { - print "bignum\t\t\t v$VERSION\n"; - print "Math::BigInt::Lite\t v$Math::BigInt::Lite::VERSION\n" if $_lite; - print "Math::BigInt\t\t v$Math::BigInt::VERSION"; - my $config = Math::BigInt->config(); - print " lib => $config->{lib} v$config->{lib_version}\n"; - print "Math::BigFloat\t\t v$Math::BigFloat::VERSION\n"; + printf "%-31s v%s\n", $class, $class -> VERSION(); + printf " lib => %-23s v%s\n", + $int_class -> config("lib"), $int_class -> config("lib_version"); + printf "%-31s v%s\n", $int_class, $int_class -> VERSION(); exit; } - # Take care of octal/hexadecimal constants - overload::constant binary => - sub { - bigint::_binary_constant(shift); + $class -> export_to_level(1, $class, @a); # export inf, NaN, etc. + + overload::constant + + # This takes care each number written as decimal integer and within the + # range of what perl can represent as an integer, e.g., "314", but not + # "3141592653589793238462643383279502884197169399375105820974944592307". + + integer => sub { + #printf "Value '%s' handled by the 'integer' sub.\n", $_[0]; + my $str = shift; + return $int_class -> new($str); + }, + + # This takes care of each number written with a decimal point and/or + # using floating point notation, e.g., "3.", "3.0", "3.14e+2" (decimal), + # "0b1.101p+2" (binary), "03.14p+2" and "0o3.14p+2" (octal), and + # "0x3.14p+2" (hexadecimal). + + float => sub { + #printf "# Value '%s' handled by the 'float' sub.\n", $_[0]; + _float_constant(shift); + }, + + # Take care of each number written as an integer (no decimal point or + # exponent) using binary, octal, or hexadecimal notation, e.g., "0b101" + # (binary), "0314" and "0o314" (octal), and "0x314" (hexadecimal). + + binary => sub { + #printf "# Value '%s' handled by the 'binary' sub.\n", $_[0]; + my $str = shift; + return $int_class -> new($str) if $str =~ /^0[XxBb]/; + $int_class -> from_oct($str); }; +} - # if another big* was already loaded: - my ($package) = caller(); +sub inf () { $int_class -> binf(); } +sub NaN () { $int_class -> bnan(); } - no strict 'refs'; - if (!defined *{"${package}::inf"}) { - $self->export_to_level(1, $self, @a); # export inf and NaN - } +# This should depend on the current accuracy/precision. Fixme! +sub PI () { $float_class -> new('3.141592653589793238462643383279502884197'); } +sub e () { $float_class -> new('2.718281828459045235360287471352662497757'); } + +sub bpi ($) { + my $up = Math::BigFloat -> upgrade(); # get current upgrading, if any ... + Math::BigFloat -> upgrade(undef); # ... and disable + my $x = Math::BigFloat -> bpi(@_); + Math::BigFloat -> upgrade($up); # reset the upgrading + return $x; } -sub PI () { Math::BigFloat->new('3.141592653589793238462643383279502884197'); } -sub e () { Math::BigFloat->new('2.718281828459045235360287471352662497757'); } -sub bpi ($) { Math::BigFloat->bpi(@_); } sub bexp ($$) { - my $x = Math::BigFloat->new($_[0]); - $x->bexp($_[1]); + my $up = Math::BigFloat -> upgrade(); # get current upgrading, if any ... + Math::BigFloat -> upgrade(undef); # ... and disable + my $x = Math::BigFloat -> new(shift) -> bexp(@_); + Math::BigFloat -> upgrade($up); # reset the upgrading + return $x; } 1; @@ -226,446 +453,478 @@ __END__ =head1 NAME -bignum - Transparent BigNumber support for Perl +bignum - transparent big number support for Perl =head1 SYNOPSIS - use bignum; + use bignum; - $x = 2 + 4.5,"\n"; # BigFloat 6.5 - print 2 ** 512 * 0.1,"\n"; # really is what you think it is - print inf * inf,"\n"; # prints inf - print NaN * 3,"\n"; # prints NaN + $x = 2 + 4.5; # Math::BigFloat 6.5 + print 2 ** 512 * 0.1; # Math::BigFloat 134...09.6 + print 2 ** 512; # Math::BigInt 134...096 + print inf + 42; # Math::BigInt inf + print NaN * 7; # Math::BigInt NaN + print hex("0x1234567890123490"); # Perl v5.10.0 or later - { - no bignum; - print 2 ** 256,"\n"; # a normal Perl scalar now - } + { + no bignum; + print 2 ** 256; # a normal Perl scalar now + } - # for older Perls, import into current package: - use bignum qw/hex oct/; - print hex("0x1234567890123490"),"\n"; - print oct("01234567890123490"),"\n"; + # for older Perls, import into current package: + use bignum qw/hex oct/; + print hex("0x1234567890123490"); + print oct("01234567890123490"); =head1 DESCRIPTION -All operators (including basic math operations) are overloaded. Integer and -floating-point constants are created as proper BigInts or BigFloats, -respectively. - -If you do - - use bignum; +=head2 Literal numeric constants -at the top of your script, Math::BigFloat and Math::BigInt will be loaded -and any constant number will be converted to an object (Math::BigFloat for -floats like 3.1415 and Math::BigInt for integers like 1234). +By default, every literal integer becomes a Math::BigInt object, and literal +non-integer becomes a Math::BigFloat object. Whether a numeric literal is +considered an integer or non-integers depends only on the value of the constant, +not on how it is represented. For instance, the constants 3.14e2 and 0x1.3ap8 +become Math::BigInt objects, because they both represent the integer value +decimal 314. -So, the following line: +The default C is equivalent to - $x = 1234; + use bignum downgrade => "Math::BigInt", upgrade => "Math::BigFloat"; -creates actually a Math::BigInt and stores a reference to in $x. -This happens transparently and behind your back, so to speak. +The classes used for integers and non-integers can be set at compile time with +the C and C options, for example -You can see this with the following: + # use Math::BigInt for integers and Math::BigRat for non-integers + use bignum upgrade => "Math::BigRat"; - perl -Mbignum -le 'print ref(1234)' +Note that disabling downgrading and upgrading does not affect how numeric +literals are converted to objects -Don't worry if it says Math::BigInt::Lite, bignum and friends will use Lite -if it is installed since it is faster for some operations. It will be -automatically upgraded to BigInt whenever necessary: + # disable both downgrading and upgrading + use bignum downgrade => undef, upgrade => undef; + $x = 2.4; # becomes 2.4 as a Math::BigFloat + $y = 2; # becomes 2 as a Math::BigInt - perl -Mbignum -le 'print ref(2**255)' +=head2 Upgrading and downgrading -This also means it is a bad idea to check for some specific package, since -the actual contents of $x might be something unexpected. Due to the -transparent way of bignum C should not be necessary, anyway. +By default, when the result of a computation is an integer, an Inf, or a NaN, +the result is downgraded even when all the operands are instances of the upgrade +class. -Since Math::BigInt and BigFloat also overload the normal math operations, -the following line will still work: + use bignum; + $x = 2.4; # becomes 2.4 as a Math::BigFloat + $y = 1.2; # becomes 1.2 as a Math::BigFloat + $z = $x / $y; # becomes 2 as a Math::BigInt due to downgrading - perl -Mbignum -le 'print ref(1234+1234)' +Equivalently, by default, when the result of a computation is a finite +non-integer, the result is upgraded even when all the operands are instances of +the downgrade class. -Since numbers are actually objects, you can call all the usual methods from -BigInt/BigFloat on them. This even works to some extent on expressions: + use bignum; + $x = 7; # becomes 7 as a Math::BigInt + $y = 2; # becomes 2 as a Math::BigInt + $z = $x / $y; # becomes 3.5 as a Math::BigFloat due to upgrading - perl -Mbignum -le '$x = 1234; print $x->bdec()' - perl -Mbignum -le 'print 1234->copy()->binc();' - perl -Mbignum -le 'print 1234->copy()->binc->badd(6);' - perl -Mbignum -le 'print +(1234)->copy()->binc()' +The classes used for downgrading and upgrading can be set at runtime with the +L and L methods, but see L below. -(Note that print doesn't do what you expect if the expression starts with -'(' hence the C<+>) +The upgrade and downgrade classes don't have to be Math::BigInt and +Math::BigFloat. For example, to use Math::BigRat as the upgrade class, use -You can even chain the operations together as usual: + use bignum upgrade => "Math::BigRat"; + $x = 2; # becomes 2 as a Math::BigInt + $y = 3.6; # becomes 18/5 as a Math::BigRat - perl -Mbignum -le 'print 1234->copy()->binc->badd(6);' - 1241 +The upgrade and downgrade classes can be modified at runtime -Under bignum (or bigint or bigrat), Perl will "upgrade" the numbers -appropriately. This means that: + use bignum; + $x = 3; # becomes 3 as a Math::BigInt + $y = 2; # becomes 2 as a Math::BigInt + $z = $x / $y; # becomes 1.5 as a Math::BigFlaot - perl -Mbignum -le 'print 1234+4.5' - 1238.5 + bignum -> upgrade("Math::BigRat"); + $w = $x / $y; # becomes 3/2 as a Math::BigRat -will work correctly. These mixed cases don't do always work when using -Math::BigInt or Math::BigFloat alone, or at least not in the way normal Perl -scalars work. +Disabling downgrading doesn't change the fact that literal constant integers are +converted to the downgrade class, it only prevents downgrading as a result of a +computation. E.g., -If you do want to work with large integers like under C, try -C: + use bignum downgrade => undef; + $x = 2; # becomes 2 as a Math::BigInt + $y = 2.4; # becomes 2.4 as a Math::BigFloat + $z = 1.2; # becomes 1.2 as a Math::BigFloat + $w = $x / $y; # becomes 2 as a Math::BigFloat due to no downgrading - perl -Mbigint -le 'print 1234.5+4.5' - 1238 +If you want all numeric literals, both integers and non-integers, to become +Math::BigFloat objects, use the L pragma. -There is also C which gives you big rationals: +Equivalently, disabling upgrading doesn't change the fact that literal constant +non-integers are converted to the upgrade class, it only prevents upgrading as a +result of a computation. E.g., - perl -Mbigrat -le 'print 1234+4.1' - 12381/10 + use bignum upgrade => undef; + $x = 2.5; # becomes 2.5 as a Math::BigFloat + $y = 7; # becomes 7 as a Math::BigInt + $z = 2; # becomes 2 as a Math::BigInt + $w = $x / $y; # becomes 3 as a Math::BigInt due to no upgrading -The entire upgrading/downgrading is still experimental and might not work -as you expect or may even have bugs. You might get errors like this: +If you want all numeric literals, both integers and non-integers, to become +Math::BigInt objects, use the L pragma. - Can't use an undefined value as an ARRAY reference at - /usr/local/lib/perl5/5.8.0/Math/BigInt/Calc.pm line 864 +You can even do -This means somewhere a routine got a BigFloat/Lite but expected a BigInt (or -vice versa) and the upgrade/downgrad path was missing. This is a bug, please -report it so that we can fix it. + use bignum upgrade => "Math::BigRat", upgrade => undef; -You might consider using just Math::BigInt or Math::BigFloat, since they -allow you finer control over what get's done in which module/space. For -instance, simple loop counters will be Math::BigInts under C and -this is slower than keeping them as Perl scalars: +which converts all integer literals to Math::BigInt objects and all non-integer +literals to Math::BigRat objects. However, when the result of a computation +involving two Math::BigInt objects results in a non-integer (e.g., 7/2), the +result will be truncted to a Math::BigInt rather than being upgraded to a +Math::BigRat, since upgrading is disabled. - perl -Mbignum -le 'for ($i = 0; $i < 10; $i++) { print ref($i); }' +=head2 Overloading -Please note the following does not work as expected (prints nothing), since -overloading of '..' is not yet possible in Perl (as of v5.8.0): +Since all numeric literals become objects, you can call all the usual methods +from Math::BigInt and Math::BigFloat on them. This even works to some extent on +expressions: - perl -Mbignum -le 'for (1..2) { print ref($_); }' + perl -Mbignum -le '$x = 1234; print $x->bdec()' + perl -Mbignum -le 'print 1234->copy()->binc();' + perl -Mbignum -le 'print 1234->copy()->binc()->badd(6);' =head2 Options -bignum recognizes some options that can be passed while loading it via use. -The options can (currently) be either a single letter form, or the long form. -The following options exist: +C recognizes some options that can be passed while loading it via via +C. The following options exist: -=over 2 +=over 4 =item a or accuracy This sets the accuracy for all math operations. The argument must be greater -than or equal to zero. See Math::BigInt's bround() function for details. +than or equal to zero. See Math::BigInt's bround() method for details. - perl -Mbignum=a,50 -le 'print sqrt(20)' + perl -Mbignum=a,50 -le 'print sqrt(20)' Note that setting precision and accuracy at the same time is not possible. =item p or precision This sets the precision for all math operations. The argument can be any -integer. Negative values mean a fixed number of digits after the dot, while -a positive value rounds to this digit left from the dot. 0 or 1 mean round to -integer. See Math::BigInt's bfround() function for details. +integer. Negative values mean a fixed number of digits after the dot, while a +positive value rounds to this digit left from the dot. 0 means round to integer. +See Math::BigInt's bfround() method for details. - perl -Mbignum=p,-50 -le 'print sqrt(20)' + perl -Mbignum=p,-50 -le 'print sqrt(20)' Note that setting precision and accuracy at the same time is not possible. -=item t or trace - -This enables a trace mode and is primarily for debugging bignum or -Math::BigInt/Math::BigFloat. - -=item l or lib +=item l, lib, try, or only Load a different math lib, see L. - perl -Mbignum=l,GMP -e 'print 2 ** 512' - -Currently there is no way to specify more than one library on the command -line. This means the following does not work: - - perl -Mbignum=l,GMP,Pari -e 'print 2 ** 512' - -This will be hopefully fixed soon ;) + perl -Mbignum=l,GMP -e 'print 2 ** 512' + perl -Mbignum=lib,GMP -e 'print 2 ** 512' + perl -Mbignum=try,GMP -e 'print 2 ** 512' + perl -Mbignum=only,GMP -e 'print 2 ** 512' =item hex -Override the built-in hex() method with a version that can handle big -numbers. This overrides it by exporting it to the current package. Under -Perl v5.10.0 and higher, this is not so necessary, as hex() is lexically -overridden in the current scope whenever the bignum pragma is active. +Override the built-in hex() method with a version that can handle big numbers. +This overrides it by exporting it to the current package. Under Perl v5.10.0 and +higher, this is not so necessary, as hex() is lexically overridden in the +current scope whenever the C pragma is active. =item oct -Override the built-in oct() method with a version that can handle big -numbers. This overrides it by exporting it to the current package. Under -Perl v5.10.0 and higher, this is not so necessary, as oct() is lexically -overridden in the current scope whenever the bigint pragma is active. +Override the built-in oct() method with a version that can handle big numbers. +This overrides it by exporting it to the current package. Under Perl v5.10.0 and +higher, this is not so necessary, as oct() is lexically overridden in the +current scope whenever the C pragma is active. =item v or version -This prints out the name and version of all modules used and then exits. +this prints out the name and version of the modules and then exits. - perl -Mbignum=v + perl -Mbignum=v =back -=head2 Methods +=head2 Math Library + +Math with the numbers is done (by default) by a backend library module called +Math::BigInt::Calc. The default is equivalent to saying: + + use bignum lib => 'Calc'; + +you can change this by using: + + use bignum lib => 'GMP'; + +The following would first try to find Math::BigInt::Foo, then Math::BigInt::Bar, +and if this also fails, revert to Math::BigInt::Calc: + + use bignum lib => 'Foo,Math::BigInt::Bar'; + +Using c warns if none of the specified libraries can be found and +L and L fell back to one of the default +libraries. To suppress this warning, use C instead: + + use bignum try => 'GMP'; + +If you want the code to die instead of falling back, use C instead: -Beside import() and AUTOLOAD() there are only a few other methods. + use bignum only => 'GMP'; -Since all numbers are now objects, you can use all functions that are part of -the BigInt or BigFloat API. It is wise to use only the bxxx() notation, and not -the fxxx() notation, though. This makes it possible that the underlying object -might morph into a different class than BigFloat. +Please see respective module documentation for further details. + +=head2 Method calls -=head2 Caveats +Since all numbers are now objects, you can use the methods that are part of the +Math::BigInt and Math::BigFloat API. But a warning is in order. When using the following to make a copy of a number, only a shallow copy will be made. - $x = 9; $y = $x; - $x = $y = 7; + $x = 9; $y = $x; + $x = $y = 7; -If you want to make a real copy, use the following: +Using the copy or the original with overloaded math is okay, e.g., the following +work: - $y = $x->copy(); + $x = 9; $y = $x; + print $x + 1, " ", $y,"\n"; # prints 10 9 -Using the copy or the original with overloaded math is okay, e.g. the -following work: +but calling any method that modifies the number directly will result in B +the original and the copy being destroyed: - $x = 9; $y = $x; - print $x + 1, " ", $y,"\n"; # prints 10 9 + $x = 9; $y = $x; + print $x->badd(1), " ", $y,"\n"; # prints 10 10 -but calling any method that modifies the number directly will result in -B the original and the copy being destroyed: + $x = 9; $y = $x; + print $x->binc(1), " ", $y,"\n"; # prints 10 10 - $x = 9; $y = $x; - print $x->badd(1), " ", $y,"\n"; # prints 10 10 + $x = 9; $y = $x; + print $x->bmul(2), " ", $y,"\n"; # prints 18 18 - $x = 9; $y = $x; - print $x->binc(1), " ", $y,"\n"; # prints 10 10 +Using methods that do not modify, but test that the contents works: - $x = 9; $y = $x; - print $x->bmul(2), " ", $y,"\n"; # prints 18 18 + $x = 9; $y = $x; + $z = 9 if $x->is_zero(); # works fine -Using methods that do not modify, but test the contents works: +See the documentation about the copy constructor and C<=> in overload, as well +as the documentation in Math::BigFloat for further details. - $x = 9; $y = $x; - $z = 9 if $x->is_zero(); # works fine - -See the documentation about the copy constructor and C<=> in overload, as -well as the documentation in BigInt for further details. +=head2 Methods -=over 2 +=over 4 =item inf() -A shortcut to return Math::BigInt->binf(). Useful because Perl does not always +A shortcut to return C as an object. Useful because Perl does not always handle bareword C properly. =item NaN() -A shortcut to return Math::BigInt->bnan(). Useful because Perl does not always +A shortcut to return C as an object. Useful because Perl does not always handle bareword C properly. =item e - # perl -Mbignum=e -wle 'print e' + # perl -Mbignum=e -wle 'print e' -Returns Euler's number C, aka exp(1). +Returns Euler's number C, aka exp(1) (= 2.7182818284...). -=item PI() +=item PI - # perl -Mbignum=PI -wle 'print PI' + # perl -Mbignum=PI -wle 'print PI' -Returns PI. +Returns PI (= 3.1415926532..). =item bexp() - bexp($power,$accuracy); + bexp($power, $accuracy); -Returns Euler's number C raised to the appropriate power, to -the wanted accuracy. +Returns Euler's number C raised to the appropriate power, to the wanted +accuracy. Example: - # perl -Mbignum=bexp -wle 'print bexp(1,80)' + # perl -Mbignum=bexp -wle 'print bexp(1,80)' =item bpi() - bpi($accuracy); + bpi($accuracy); Returns PI to the wanted accuracy. Example: - # perl -Mbignum=bpi -wle 'print bpi(80)' + # perl -Mbignum=bpi -wle 'print bpi(80)' -=item upgrade() +=item accuracy() -Return the class that numbers are upgraded to, is in fact returning -C<$Math::BigInt::upgrade>. +Set or get the accuracy. -=item in_effect() +=item precision() - use bignum; +Set or get the precision. - print "in effect\n" if bignum::in_effect; # true - { - no bignum; - print "in effect\n" if bignum::in_effect; # false - } +=item round_mode() -Returns true or false if C is in effect in the current scope. +Set or get the rounding mode. -This method only works on Perl v5.9.4 or later. +=item div_scale() -=back +Set or get the division scale. -=head2 Math Library +=item upgrade() -Math with the numbers is done (by default) by a module called -Math::BigInt::Calc. This is equivalent to saying: +Set or get the class that the downgrade class upgrades to, if any. Set the +upgrade class to C to disable upgrading. See C below. - use bignum lib => 'Calc'; +=item downgrade() -You can change this by using: +Set or get the class that the upgrade class downgrades to, if any. Set the +downgrade class to C to disable upgrading. See L below. - use bignum lib => 'GMP'; +=item in_effect() + + use bignum; -The following would first try to find Math::BigInt::Foo, then -Math::BigInt::Bar, and when this also fails, revert to Math::BigInt::Calc: + print "in effect\n" if bignum::in_effect; # true + { + no bignum; + print "in effect\n" if bignum::in_effect; # false + } - use bignum lib => 'Foo,Math::BigInt::Bar'; +Returns true or false if C is in effect in the current scope. -Please see respective module documentation for further details. +This method only works on Perl v5.9.4 or later. -Using C warns if none of the specified libraries can be found and -L did fall back to one of the default libraries. -To suppress this warning, use C instead: +=back - use bignum try => 'GMP'; +=head1 CAVEATS -If you want the code to die instead of falling back, use C instead: +=over 4 - use bignum only => 'GMP'; +=item The upgrade() and downgrade() methods -=head2 INTERNAL FORMAT +Note that setting both the upgrade and downgrade classes at runtime with the +L and L methods, might not do what you expect: -The numbers are stored as objects, and their internals might change at anytime, -especially between math operations. The objects also might belong to different -classes, like Math::BigInt, or Math::BigFloat. Mixing them together, even -with normal scalars is not extraordinary, but normal and expected. + # Assuming that downgrading and upgrading hasn't been modified so far, so + # the downgrade and upgrade classes are Math::BigInt and Math::BigFloat, + # respectively, the following sets the upgrade class to Math::BigRat, i.e., + # makes Math::BigInt upgrade to Math::BigRat: -You should not depend on the internal format, all accesses must go through -accessor methods. E.g. looking at $x->{sign} is not a bright idea since there -is no guaranty that the object in question has such a hashkey, nor is a hash -underneath at all. + bignum -> upgrade("Math::BigRat"); -=head2 SIGN + # The following sets the downgrade class to Math::BigInt::Lite, i.e., makes + # the new upgrade class Math::BigRat downgrade to Math::BigInt::Lite -The sign is either '+', '-', 'NaN', '+inf' or '-inf' and stored separately. -You can access it with the sign() method. + bignum -> downgrade("Math::BigInt::Lite"); -A sign of 'NaN' is used to represent the result when input arguments are not -numbers or as a result of 0/0. '+inf' and '-inf' represent plus respectively -minus infinity. You will get '+inf' when dividing a positive number by 0, and -'-inf' when dividing any negative number by 0. + # Note that at this point, it is still Math::BigInt, not Math::BigInt::Lite, + # that upgrades to Math::BigRat, so to get Math::BigInt::Lite to upgrade to + # Math::BigRat, we need to do the following (again): -=head1 CAVEATS + bignum -> upgrade("Math::BigRat"); -=over 2 +A simpler way to do this at runtime is to use import(), + + bignum -> import(upgrade => "Math::BigRat", + downgrade => "Math::BigInt::Lite"); + +=item Hexadecimal, octal, and binary floating point literals + +Perl (and this module) accepts hexadecimal, octal, and binary floating point +literals, but use them with care with Perl versions before v5.32.0, because some +versions of Perl silently give the wrong result. =item Operator vs literal overloading -C works by overloading handling of integer and floating point -literals, converting them to L or L -objects. +C works by overloading handling of integer and floating point literals, +converting them to L objects. -This means that arithmetic involving only string values or string -literals will be performed using Perl's built-in operators. +This means that arithmetic involving only string values or string literals are +performed using Perl's built-in operators. For example: - use bignum; + use bigrat; my $x = "900000000000000009"; my $y = "900000000000000007"; print $x - $y; -will output C<0> on default 32-bit builds, since C never sees -the string literals. To ensure the expression is all treated as -C or C objects, use a literal number in the -expression: +outputs C<0> on default 32-bit builds, since C never sees the string +literals. To ensure the expression is all treated as C objects, +use a literal number in the expression: print +(0+$x) - $y; +=item Ranges + +Perl does not allow overloading of ranges, so you can neither safely use ranges +with C endpoints, nor is the iterator variable a C. + + use 5.010; + for my $i (12..13) { + for my $j (20..21) { + say $i ** $j; # produces a floating-point number, + # not an object + } + } + =item in_effect() This method only works on Perl v5.9.4 or later. =item hex()/oct() -C overrides these routines with versions that can also handle -big integer values. Under Perl prior to version v5.9.4, however, this -will not happen unless you specifically ask for it with the two -import tags "hex" and "oct" - and then it will be global and cannot be -disabled inside a scope with "no bigint": +C overrides these routines with versions that can also handle big +integer values. Under Perl prior to version v5.9.4, however, this will not +happen unless you specifically ask for it with the two import tags "hex" and +"oct" - and then it will be global and cannot be disabled inside a scope with +C: - use bigint qw/hex oct/; + use bignum qw/hex oct/; + print hex("0x1234567890123456"); + { + no bignum; print hex("0x1234567890123456"); - { - no bigint; - print hex("0x1234567890123456"); - } + } The second call to hex() will warn about a non-portable constant. Compare this to: - use bigint; + use bignum; - # will warn only under older than v5.9.4 - print hex("0x1234567890123456"); + # will warn only under Perl older than v5.9.4 + print hex("0x1234567890123456"); =back -=head1 MODULES USED - -C is just a thin wrapper around various modules of the Math::BigInt -family. Think of it as the head of the family, who runs the shop, and orders -the others to do the work. - -The following modules are currently used by bignum: - - Math::BigInt::Lite (for speed, and only if it is loadable) - Math::BigInt - Math::BigFloat - =head1 EXAMPLES Some cool command line examples to impress the Python crowd ;) - perl -Mbignum -le 'print sqrt(33)' - perl -Mbignum -le 'print 2*255' - perl -Mbignum -le 'print 4.5+2*255' - perl -Mbignum -le 'print 3/7 + 5/7 + 8/3' - perl -Mbignum -le 'print 123->is_odd()' - perl -Mbignum -le 'print log(2)' - perl -Mbignum -le 'print exp(1)' - perl -Mbignum -le 'print 2 ** 0.5' - perl -Mbignum=a,65 -le 'print 2 ** 0.2' - perl -Mbignum=a,65,l,GMP -le 'print 7 ** 7777' + perl -Mbignum -le 'print sqrt(33)' + perl -Mbignum -le 'print 2**255' + perl -Mbignum -le 'print 4.5+2**255' + perl -Mbignum -le 'print 3/7 + 5/7 + 8/3' + perl -Mbignum -le 'print 123->is_odd()' + perl -Mbignum -le 'print log(2)' + perl -Mbignum -le 'print exp(1)' + perl -Mbignum -le 'print 2 ** 0.5' + perl -Mbignum=a,65 -le 'print 2 ** 0.2' + perl -Mbignum=l,GMP -le 'print 7 ** 7777' =head1 BUGS Please report any bugs or feature requests to -C, or through the web interface at +C, or through the web interface at L (requires login). We will be notified, and then you'll automatically be notified of progress on your bug as I make changes. @@ -680,26 +939,26 @@ You can also look for information at: =over 4 -=item * RT: CPAN's request tracker - -L +=item * GitHub -=item * AnnoCPAN: Annotated CPAN documentation +L -L - -=item * CPAN Ratings +=item * RT: CPAN's request tracker -L +L -=item * Search CPAN +=item * MetaCPAN -L +L =item * CPAN Testers Matrix L +=item * CPAN Ratings + +L + =back =head1 LICENSE @@ -724,7 +983,7 @@ L, L and L. =item * -Maintained by Peter John Acklam Epjacklam@gmail.com, 2014-. +Maintained by Peter John Acklam Epjacklam@gmail.comE, 2014-. =back diff --git a/gnu/usr.bin/perl/cpan/bignum/lib/bigrat.pm b/gnu/usr.bin/perl/cpan/bignum/lib/bigrat.pm index 0a981471b2c..371138d2b02 100644 --- a/gnu/usr.bin/perl/cpan/bignum/lib/bigrat.pm +++ b/gnu/usr.bin/perl/cpan/bignum/lib/bigrat.pm @@ -1,63 +1,41 @@ package bigrat; -use 5.010; use strict; use warnings; -our $VERSION = '0.51'; +use Carp qw< carp croak >; + +our $VERSION = '0.65'; use Exporter; -our @ISA = qw( bigint ); +our @ISA = qw( Exporter ); our @EXPORT_OK = qw( PI e bpi bexp hex oct ); our @EXPORT = qw( inf NaN ); use overload; -use bigint (); + +my $obj_class = "Math::BigRat"; ############################################################################## -BEGIN { - *inf = \&bigint::inf; - *NaN = \&bigint::NaN; - *hex = \&bigint::hex; - *oct = \&bigint::oct; +sub accuracy { + my $self = shift; + $obj_class -> accuracy(@_); } -# These are all alike, and thus faked by AUTOLOAD - -my @faked = qw/round_mode accuracy precision div_scale/; -our ($AUTOLOAD, $_lite); # _lite for testsuite - -sub AUTOLOAD { - my $name = $AUTOLOAD; - - $name =~ s/.*:://; # split package - no strict 'refs'; - foreach my $n (@faked) { - if ($n eq $name) { - *{"bigrat::$name"} = - sub { - my $self = shift; - no strict 'refs'; - if (defined $_[0]) { - Math::BigInt->$name($_[0]); - Math::BigFloat->$name($_[0]); - return Math::BigRat->$name($_[0]); - } - return Math::BigInt->$name(); - }; - return &$name; - } - } +sub precision { + my $self = shift; + $obj_class -> precision(@_); +} - # delayed load of Carp and avoid recursion - require Carp; - Carp::croak ("Can't call bigrat\-\>$name, not a valid method"); +sub round_mode { + my $self = shift; + $obj_class -> round_mode(@_); } -sub unimport { - $^H{bigrat} = undef; # no longer in effect - overload::remove_constant('binary', '', 'float', '', 'integer'); +sub div_scale { + my $self = shift; + $obj_class -> div_scale(@_); } sub in_effect { @@ -66,150 +44,346 @@ sub in_effect { $hinthash->{bigrat}; } +sub _float_constant { + my $str = shift; + + # See if we can convert the input string to a string using a normalized form + # consisting of the significand as a signed integer, the character "e", and + # the exponent as a signed integer, e.g., "+0e+0", "+314e-2", and "-1e+3". + + my $nstr; + + if ( + # See if it is an octal number. An octal number like '0377' is also + # accepted by the functions parsing decimal and hexadecimal numbers, so + # handle octal numbers before decimal and hexadecimal numbers. + + $str =~ /^0(?:[Oo]|_*[0-7])/ and + $nstr = Math::BigInt -> oct_str_to_dec_flt_str($str) + + or + + # See if it is decimal number. + + $nstr = Math::BigInt -> dec_str_to_dec_flt_str($str) + + or + + # See if it is a hexadecimal number. Every hexadecimal number has a + # prefix, but the functions parsing numbers don't require it, so check + # to see if it actually is a hexadecimal number. + + $str =~ /^0[Xx]/ and + $nstr = Math::BigInt -> hex_str_to_dec_flt_str($str) + + or + + # See if it is a binary numbers. Every binary number has a prefix, but + # the functions parsing numbers don't require it, so check to see if it + # actually is a binary number. + + $str =~ /^0[Bb]/ and + $nstr = Math::BigInt -> bin_str_to_dec_flt_str($str)) + { + return $obj_class -> new($nstr); + } + + # If we get here, there is a bug in the code above this point. + + warn "Internal error: unable to handle literal constant '$str'.", + " This is a bug, so please report this to the module author."; + return $obj_class -> bnan(); +} + ############################################################################# +# the following two routines are for "use bigrat qw/hex oct/;": -sub import { - my $self = shift; +use constant LEXICAL => $] > 5.009004; + +# Internal function with the same semantics as CORE::hex(). This function is +# not used directly, but rather by other front-end functions. + +sub _hex_core { + my $str = shift; + + # Strip off, clean, and parse as much as we can from the beginning. + + my $x; + if ($str =~ s/ ^ ( 0? [xX] )? ( [0-9a-fA-F]* ( _ [0-9a-fA-F]+ )* ) //x) { + my $chrs = $2; + $chrs =~ tr/_//d; + $chrs = '0' unless CORE::length $chrs; + $x = $obj_class -> from_hex($chrs); + } else { + $x = $obj_class -> bzero(); + } + + # Warn about trailing garbage. + + if (CORE::length($str)) { + require Carp; + Carp::carp(sprintf("Illegal hexadecimal digit '%s' ignored", + substr($str, 0, 1))); + } - # see also bignum->import() for additional comments + return $x; +} + +# Internal function with the same semantics as CORE::oct(). This function is +# not used directly, but rather by other front-end functions. + +sub _oct_core { + my $str = shift; + + $str =~ s/^\s*//; + + # Hexadecimal input. + + return _hex_core($str) if $str =~ /^0?[xX]/; + + my $x; - $^H{bigrat} = 1; # we are in effect + # Binary input. + + if ($str =~ /^0?[bB]/) { + + # Strip off, clean, and parse as much as we can from the beginning. + + if ($str =~ s/ ^ ( 0? [bB] )? ( [01]* ( _ [01]+ )* ) //x) { + my $chrs = $2; + $chrs =~ tr/_//d; + $chrs = '0' unless CORE::length $chrs; + $x = $obj_class -> from_bin($chrs); + } + + # Warn about trailing garbage. + + if (CORE::length($str)) { + require Carp; + Carp::carp(sprintf("Illegal binary digit '%s' ignored", + substr($str, 0, 1))); + } + + return $x; + } + + # Octal input. Strip off, clean, and parse as much as we can from the + # beginning. + + if ($str =~ s/ ^ ( 0? [oO] )? ( [0-7]* ( _ [0-7]+ )* ) //x) { + my $chrs = $2; + $chrs =~ tr/_//d; + $chrs = '0' unless CORE::length $chrs; + $x = $obj_class -> from_oct($chrs); + } + + # Warn about trailing garbage. CORE::oct() only warns about 8 and 9, but it + # is more helpful to warn about all invalid digits. + + if (CORE::length($str)) { + require Carp; + Carp::carp(sprintf("Illegal octal digit '%s' ignored", + substr($str, 0, 1))); + } + + return $x; +} + +{ + my $proto = LEXICAL ? '_' : ';$'; + eval ' +sub hex(' . $proto . ') {' . <<'.'; + my $str = @_ ? $_[0] : $_; + _hex_core($str); +} +. + + eval ' +sub oct(' . $proto . ') {' . <<'.'; + my $str = @_ ? $_[0] : $_; + _oct_core($str); +} +. +} + +############################################################################# +# the following two routines are for Perl 5.9.4 or later and are lexical + +my ($prev_oct, $prev_hex, $overridden); + +if (LEXICAL) { eval <<'.' } +sub _hex(_) { + my $hh = (caller 0)[10]; + return $$hh{bigrat} ? bigrat::_hex_core($_[0]) + : $$hh{bigfloat} ? bigfloat::_hex_core($_[0]) + : $$hh{bigint} ? bigint::_hex_core($_[0]) + : $prev_hex ? &$prev_hex($_[0]) + : CORE::hex($_[0]); +} + +sub _oct(_) { + my $hh = (caller 0)[10]; + return $$hh{bigrat} ? bigrat::_oct_core($_[0]) + : $$hh{bigfloat} ? bigfloat::_oct_core($_[0]) + : $$hh{bigint} ? bigint::_oct_core($_[0]) + : $prev_oct ? &$prev_oct($_[0]) + : CORE::oct($_[0]); +} +. + +sub _override { + return if $overridden; + $prev_oct = *CORE::GLOBAL::oct{CODE}; + $prev_hex = *CORE::GLOBAL::hex{CODE}; + no warnings 'redefine'; + *CORE::GLOBAL::oct = \&_oct; + *CORE::GLOBAL::hex = \&_hex; + $overridden = 1; +} + +sub unimport { + $^H{bigrat} = undef; # no longer in effect + overload::remove_constant('binary', '', 'float', '', 'integer'); +} + +sub import { + my $class = shift; + + $^H{bigrat} = 1; # we are in effect + $^H{bigint} = undef; + $^H{bigfloat} = undef; # for newer Perls always override hex() and oct() with a lexical version: - if ($] > 5.009004) { - bigint::_override(); + if (LEXICAL) { + _override(); } - # some defaults - my $lib = ''; - my $lib_kind = 'try'; - my $upgrade = 'Math::BigFloat'; - - my @import = (':constant'); # drive it w/ constant - my @a = @_; - my $l = scalar @_; - my $j = 0; - my ($a, $p); - my ($ver, $trace); # version? trace? - for (my $i = 0; $i < $l ; $i++, $j++) { - if ($_[$i] eq 'upgrade') { - # this causes upgrading - $upgrade = $_[$i + 1]; # or undef to disable - my $s = 2; - $s = 1 if @a - $j < 2; # avoid "can not modify non-existent..." - splice @a, $j, $s; - $j -= $s; + + my @import = (); + my @a = (); # unrecognized arguments + my $ver; # version? + + while (@_) { + my $param = shift; + + # Accuracy. + + if ($param =~ /^a(ccuracy)?$/) { + push @import, 'accuracy', shift(); + next; } - elsif ($_[$i] =~ /^(l|lib|try|only)$/) { - # this causes a different low lib to take care... - $lib_kind = $1; - $lib_kind = 'lib' if $lib_kind eq 'l'; - $lib = $_[$i + 1] || ''; - my $s = 2; - $s = 1 if @a - $j < 2; # avoid "can not modify non-existent..." - splice @a, $j, $s; - $j -= $s; - $i++; + + # Precision. + + if ($param =~ /^p(recision)?$/) { + push @import, 'precision', shift(); + next; } - elsif ($_[$i] =~ /^(a|accuracy)$/) { - $a = $_[$i + 1]; - my $s = 2; - $s = 1 if @a - $j < 2; # avoid "can not modify non-existent..." - splice @a, $j, $s; - $j -= $s; - $i++; + + # Rounding mode. + + if ($param eq 'round_mode') { + push @import, 'round_mode', shift(); + next; } - elsif ($_[$i] =~ /^(p|precision)$/) { - $p = $_[$i + 1]; - my $s = 2; - $s = 1 if @a - $j < 2; # avoid "can not modify non-existent..." - splice @a, $j, $s; - $j -= $s; - $i++; + + # Backend library. + + if ($param =~ /^(l|lib|try|only)$/) { + push @import, $param eq 'l' ? 'lib' : $param; + push @import, shift() if @_; + next; } - elsif ($_[$i] =~ /^(v|version)$/) { + + if ($param =~ /^(v|version)$/) { $ver = 1; - splice @a, $j, 1; - $j--; + next; } - elsif ($_[$i] =~ /^(t|trace)$/) { - $trace = 1; - splice @a, $j, 1; - $j--; - } - elsif ($_[$i] !~ /^(PI|e|bpi|bexp|hex|oct)\z/) { - die ("unknown option $_[$i]"); + + if ($param =~ /^(t|trace)$/) { + $obj_class .= "::Trace"; + eval "require $obj_class"; + die $@ if $@; + next; } - } - my $class; - $_lite = 0; # using M::BI::L ? - if ($trace) { - require Math::BigInt::Trace; - $class = 'Math::BigInt::Trace'; - $upgrade = 'Math::BigFloat::Trace'; - } - else { - # see if we can find Math::BigInt::Lite - if (!defined $a && !defined $p) { # rounding won't work to well - local @INC = @INC; - pop @INC if $INC[-1] eq '.'; - if (eval { require Math::BigInt::Lite; 1 }) { - @import = (); # :constant in Lite, not MBI - Math::BigInt::Lite->import(':constant'); - $_lite = 1; # signal okay - } + + if ($param =~ /^(PI|e|bexp|bpi|hex|oct)\z/) { + push @a, $param; + next; } - require Math::BigInt if $_lite == 0; # not already loaded? - $class = 'Math::BigInt'; # regardless of MBIL or not + + croak("Unknown option '$param'"); } - push @import, $lib_kind => $lib if $lib ne ''; - # Math::BigInt::Trace or plain Math::BigInt - $class->import(@import, upgrade => $upgrade); - require Math::BigFloat; - Math::BigFloat->import(upgrade => 'Math::BigRat', ':constant'); - require Math::BigRat; - Math::BigRat->import(@import); + eval "require $obj_class"; + die $@ if $@; + $obj_class -> import(@import); - bigrat->accuracy($a) if defined $a; - bigrat->precision($p) if defined $p; if ($ver) { - print "bigrat\t\t\t v$VERSION\n"; - print "Math::BigInt::Lite\t v$Math::BigInt::Lite::VERSION\n" if $_lite; - print "Math::BigInt\t\t v$Math::BigInt::VERSION"; - my $config = Math::BigInt->config(); - print " lib => $config->{lib} v$config->{lib_version}\n"; - print "Math::BigFloat\t\t v$Math::BigFloat::VERSION\n"; - print "Math::BigRat\t\t v$Math::BigRat::VERSION\n"; + printf "%-31s v%s\n", $class, $class -> VERSION(); + printf " lib => %-23s v%s\n", + $obj_class -> config("lib"), $obj_class -> config("lib_version"); + printf "%-31s v%s\n", $obj_class, $obj_class -> VERSION(); exit; } - # Take care of octal/hexadecimal constants - overload::constant binary => - sub { - bigint::_binary_constant(shift); - }; + $class -> export_to_level(1, $class, @a); # export inf, NaN, etc. - # if another big* was already loaded: - my ($package) = caller(); + overload::constant - no strict 'refs'; - if (!defined *{"${package}::inf"}) { - $self->export_to_level(1, $self, @a); # export inf and NaN - } + # This takes care each number written as decimal integer and within the + # range of what perl can represent as an integer, e.g., "314", but not + # "3141592653589793238462643383279502884197169399375105820974944592307". + + integer => sub { + #printf "Value '%s' handled by the 'integer' sub.\n", $_[0]; + my $str = shift; + return $obj_class -> new($str); + }, + + # This takes care of each number written with a decimal point and/or + # using floating point notation, e.g., "3.", "3.0", "3.14e+2" (decimal), + # "0b1.101p+2" (binary), "03.14p+2" and "0o3.14p+2" (octal), and + # "0x3.14p+2" (hexadecimal). + + float => sub { + #printf "# Value '%s' handled by the 'float' sub.\n", $_[0]; + _float_constant(shift); + }, + + # Take care of each number written as an integer (no decimal point or + # exponent) using binary, octal, or hexadecimal notation, e.g., "0b101" + # (binary), "0314" and "0o314" (octal), and "0x314" (hexadecimal). + + binary => sub { + #printf "# Value '%s' handled by the 'binary' sub.\n", $_[0]; + my $str = shift; + return $obj_class -> new($str) if $str =~ /^0[XxBb]/; + $obj_class -> from_oct($str); + }; } -sub PI () { Math::BigFloat->new('3.141592653589793238462643383279502884197'); } -sub e () { Math::BigFloat->new('2.718281828459045235360287471352662497757'); } +sub inf () { $obj_class -> binf(); } +sub NaN () { $obj_class -> bnan(); } + +# This should depend on the current accuracy/precision. Fixme! +sub PI () { $obj_class -> new('3.141592653589793238462643383279502884197'); } +sub e () { $obj_class -> new('2.718281828459045235360287471352662497757'); } sub bpi ($) { - local $Math::BigFloat::upgrade; - Math::BigFloat->bpi(@_); + my $up = Math::BigFloat -> upgrade(); # get current upgrading, if any ... + Math::BigFloat -> upgrade(undef); # ... and disable + my $x = Math::BigFloat -> bpi(@_); + Math::BigFloat -> upgrade($up); # reset the upgrading + return $obj_class -> new($x); } sub bexp ($$) { - local $Math::BigFloat::upgrade; - my $x = Math::BigFloat->new($_[0]); - $x->bexp($_[1]); + my $up = Math::BigFloat -> upgrade(); # get current upgrading, if any ... + Math::BigFloat -> upgrade(undef); # ... and disable + my $x = Math::BigFloat -> new(shift); + $x -> bexp(@_); + Math::BigFloat -> upgrade($up); # reset the upgrading + return $obj_class -> new($x); } 1; @@ -220,279 +394,291 @@ __END__ =head1 NAME -bigrat - Transparent BigNumber/BigRational support for Perl +bigrat - transparent big rational number support for Perl =head1 SYNOPSIS - use bigrat; + use bigrat; - print 2 + 4.5,"\n"; # BigFloat 6.5 - print 1/3 + 1/4,"\n"; # produces 7/12 + print 2 + 4.5; # Math::BigRat 13/2 + print 1/3 + 1/4; # Math::BigRat 7/12 + print inf + 42; # Math::BigRat inf + print NaN * 7; # Math::BigRat NaN + print hex("0x1234567890123490"); # Perl v5.10.0 or later - { - no bigrat; - print 1/3,"\n"; # 0.33333... - } + { + no bigrat; + print 1/3; # 0.33333... + } - # Import into current package: - use bigrat qw/hex oct/; - print hex("0x1234567890123490"),"\n"; - print oct("01234567890123490"),"\n"; + # for older Perls, import into current package: + use bigrat qw/hex oct/; + print hex("0x1234567890123490"); + print oct("01234567890123490"); =head1 DESCRIPTION -All operators (including basic math operations) are overloaded. Integer and -floating-point constants are created as proper BigInts or BigFloats, -respectively. +All numeric literal in the given scope are converted to Math::BigRat objects. -Other than L, this module upgrades to Math::BigRat, meaning that -instead of 2.5 you will get 2+1/2 as output. +All operators (including basic math operations) except the range operator C<..> +are overloaded. -=head2 Modules Used +So, the following: -C is just a thin wrapper around various modules of the Math::BigInt -family. Think of it as the head of the family, who runs the shop, and orders -the others to do the work. + use bigrat; + $x = 1234; -The following modules are currently used by bignum: +creates a Math::BigRat and stores a reference to in $x. This happens +transparently and behind your back, so to speak. - Math::BigInt::Lite (for speed, and only if it is loadable) - Math::BigInt - Math::BigFloat - Math::BigRat +You can see this with the following: -=head2 Math Library + perl -Mbigrat -le 'print ref(1234)' -Math with the numbers is done (by default) by a module called -Math::BigInt::Calc. This is equivalent to saying: +Since numbers are actually objects, you can call all the usual methods from +Math::BigRat on them. This even works to some extent on expressions: - use bigrat lib => 'Calc'; + perl -Mbigrat -le '$x = 1234; print $x->bdec()' + perl -Mbigrat -le 'print 1234->copy()->binc();' + perl -Mbigrat -le 'print 1234->copy()->binc->badd(6);' + perl -Mbigrat -le 'print +(1234)->copy()->binc()' -You can change this by using: +(Note that print doesn't do what you expect if the expression starts with +'(' hence the C<+>) - use bignum lib => 'GMP'; +You can even chain the operations together as usual: -The following would first try to find Math::BigInt::Foo, then -Math::BigInt::Bar, and when this also fails, revert to Math::BigInt::Calc: + perl -Mbigrat -le 'print 1234->copy()->binc->badd(6);' + 1241 - use bigrat lib => 'Foo,Math::BigInt::Bar'; +Please note the following does not work as expected (prints nothing), since +overloading of '..' is not yet possible in Perl (as of v5.8.0): -Using C warns if none of the specified libraries can be found and -L did fall back to one of the default libraries. -To suppress this warning, use C instead: + perl -Mbigrat -le 'for (1..2) { print ref($_); }' - use bignum try => 'GMP'; +=head2 Options -If you want the code to die instead of falling back, use C instead: +C recognizes some options that can be passed while loading it via +C. The following options exist: - use bignum only => 'GMP'; +=over 4 -Please see respective module documentation for further details. +=item a or accuracy -=head2 Sign +This sets the accuracy for all math operations. The argument must be greater +than or equal to zero. See Math::BigInt's bround() method for details. -The sign is either '+', '-', 'NaN', '+inf' or '-inf'. + perl -Mbigrat=a,50 -le 'print sqrt(20)' -A sign of 'NaN' is used to represent the result when input arguments are not -numbers or as a result of 0/0. '+inf' and '-inf' represent plus respectively -minus infinity. You will get '+inf' when dividing a positive number by 0, and -'-inf' when dividing any negative number by 0. +Note that setting precision and accuracy at the same time is not possible. -=head2 Methods +=item p or precision -Since all numbers are not objects, you can use all functions that are part of -the BigInt or BigFloat API. It is wise to use only the bxxx() notation, and not -the fxxx() notation, though. This makes you independent on the fact that the -underlying object might morph into a different class than BigFloat. +This sets the precision for all math operations. The argument can be any +integer. Negative values mean a fixed number of digits after the dot, while a +positive value rounds to this digit left from the dot. 0 means round to integer. +See Math::BigInt's bfround() method for details. -=over 2 + perl -Mbigrat=p,-50 -le 'print sqrt(20)' -=item inf() +Note that setting precision and accuracy at the same time is not possible. -A shortcut to return Math::BigInt->binf(). Useful because Perl does not always -handle bareword C properly. +=item t or trace -=item NaN() +This enables a trace mode and is primarily for debugging. -A shortcut to return Math::BigInt->bnan(). Useful because Perl does not always -handle bareword C properly. +=item l, lib, try, or only -=item e +Load a different math lib, see L. - # perl -Mbigrat=e -wle 'print e' + perl -Mbigrat=l,GMP -e 'print 2 ** 512' + perl -Mbigrat=lib,GMP -e 'print 2 ** 512' + perl -Mbigrat=try,GMP -e 'print 2 ** 512' + perl -Mbigrat=only,GMP -e 'print 2 ** 512' -Returns Euler's number C, aka exp(1). +=item hex -=item PI +Override the built-in hex() method with a version that can handle big numbers. +This overrides it by exporting it to the current package. Under Perl v5.10.0 and +higher, this is not so necessary, as hex() is lexically overridden in the +current scope whenever the C pragma is active. - # perl -Mbigrat=PI -wle 'print PI' +=item oct -Returns PI. +Override the built-in oct() method with a version that can handle big numbers. +This overrides it by exporting it to the current package. Under Perl v5.10.0 and +higher, this is not so necessary, as oct() is lexically overridden in the +current scope whenever the C pragma is active. -=item bexp() +=item v or version - bexp($power,$accuracy); +this prints out the name and version of the modules and then exits. -Returns Euler's number C raised to the appropriate power, to -the wanted accuracy. + perl -Mbigrat=v -Example: +=back - # perl -Mbigrat=bexp -wle 'print bexp(1,80)' +=head2 Math Library -=item bpi() +Math with the numbers is done (by default) by a backend library module called +Math::BigInt::Calc. The default is equivalent to saying: - bpi($accuracy); + use bigrat lib => 'Calc'; -Returns PI to the wanted accuracy. +you can change this by using: -Example: + use bigrat lib => 'GMP'; - # perl -Mbigrat=bpi -wle 'print bpi(80)' +The following would first try to find Math::BigInt::Foo, then Math::BigInt::Bar, +and if this also fails, revert to Math::BigInt::Calc: -=item upgrade() + use bigrat lib => 'Foo,Math::BigInt::Bar'; -Return the class that numbers are upgraded to, is in fact returning -C<$Math::BigInt::upgrade>. +Using c warns if none of the specified libraries can be found and +L fell back to one of the default libraries. To suppress this +warning, use c instead: -=item in_effect() + use bigrat try => 'GMP'; - use bigrat; +If you want the code to die instead of falling back, use C instead: - print "in effect\n" if bigrat::in_effect; # true - { - no bigrat; - print "in effect\n" if bigrat::in_effect; # false - } + use bigrat only => 'GMP'; -Returns true or false if C is in effect in the current scope. +Please see the respective module documentation for further details. -This method only works on Perl v5.9.4 or later. +=head2 Method calls -=back +Since all numbers are now objects, you can use all methods that are part of the +Math::BigRat API. -=head2 MATH LIBRARY +But a warning is in order. When using the following to make a copy of a number, +only a shallow copy will be made. -Math with the numbers is done (by default) by a module called + $x = 9; $y = $x; + $x = $y = 7; -=head2 Caveat +Using the copy or the original with overloaded math is okay, e.g., the following +work: -But a warning is in order. When using the following to make a copy of a number, -only a shallow copy will be made. + $x = 9; $y = $x; + print $x + 1, " ", $y,"\n"; # prints 10 9 - $x = 9; $y = $x; - $x = $y = 7; +but calling any method that modifies the number directly will result in B +the original and the copy being destroyed: -If you want to make a real copy, use the following: + $x = 9; $y = $x; + print $x->badd(1), " ", $y,"\n"; # prints 10 10 - $y = $x->copy(); + $x = 9; $y = $x; + print $x->binc(1), " ", $y,"\n"; # prints 10 10 -Using the copy or the original with overloaded math is okay, e.g. the -following work: + $x = 9; $y = $x; + print $x->bmul(2), " ", $y,"\n"; # prints 18 18 - $x = 9; $y = $x; - print $x + 1, " ", $y,"\n"; # prints 10 9 +Using methods that do not modify, but test that the contents works: -but calling any method that modifies the number directly will result in -B the original and the copy being destroyed: + $x = 9; $y = $x; + $z = 9 if $x->is_zero(); # works fine - $x = 9; $y = $x; - print $x->badd(1), " ", $y,"\n"; # prints 10 10 +See the documentation about the copy constructor and C<=> in overload, as well +as the documentation in Math::BigFloat for further details. - $x = 9; $y = $x; - print $x->binc(1), " ", $y,"\n"; # prints 10 10 +=head2 Methods - $x = 9; $y = $x; - print $x->bmul(2), " ", $y,"\n"; # prints 18 18 +=over 4 -Using methods that do not modify, but testthe contents works: +=item inf() - $x = 9; $y = $x; - $z = 9 if $x->is_zero(); # works fine +A shortcut to return Math::BigRat->binf(). Useful because Perl does not always +handle bareword C properly. -See the documentation about the copy constructor and C<=> in overload, as -well as the documentation in BigInt for further details. +=item NaN() -=head2 Options +A shortcut to return Math::BigRat->bnan(). Useful because Perl does not always +handle bareword C properly. -bignum recognizes some options that can be passed while loading it via use. -The options can (currently) be either a single letter form, or the long form. -The following options exist: +=item e -=over 2 + # perl -Mbigrat=e -wle 'print e' -=item a or accuracy +Returns Euler's number C, aka exp(1). -This sets the accuracy for all math operations. The argument must be greater -than or equal to zero. See Math::BigInt's bround() function for details. +=item PI - perl -Mbigrat=a,50 -le 'print sqrt(20)' + # perl -Mbigrat=PI -wle 'print PI' -Note that setting precision and accuracy at the same time is not possible. +Returns PI. -=item p or precision +=item bexp() -This sets the precision for all math operations. The argument can be any -integer. Negative values mean a fixed number of digits after the dot, while -a positive value rounds to this digit left from the dot. 0 or 1 mean round to -integer. See Math::BigInt's bfround() function for details. + bexp($power, $accuracy); - perl -Mbigrat=p,-50 -le 'print sqrt(20)' +Returns Euler's number C raised to the appropriate power, to the wanted +accuracy. -Note that setting precision and accuracy at the same time is not possible. +Example: -=item t or trace + # perl -Mbigrat=bexp -wle 'print bexp(1,80)' + +=item bpi() -This enables a trace mode and is primarily for debugging bignum or -Math::BigInt/Math::BigFloat. + bpi($accuracy); -=item l or lib +Returns PI to the wanted accuracy. -Load a different math lib, see L. +Example: - perl -Mbigrat=l,GMP -e 'print 2 ** 512' + # perl -Mbigrat=bpi -wle 'print bpi(80)' -Currently there is no way to specify more than one library on the command -line. This means the following does not work: +=item accuracy() - perl -Mbignum=l,GMP,Pari -e 'print 2 ** 512' +Set or get the accuracy. -This will be hopefully fixed soon ;) +=item precision() -=item hex +Set or get the precision. -Override the built-in hex() method with a version that can handle big -numbers. This overrides it by exporting it to the current package. Under -Perl v5.10.0 and higher, this is not so necessary, as hex() is lexically -overridden in the current scope whenever the bigrat pragma is active. +=item round_mode() -=item oct +Set or get the rounding mode. -Override the built-in oct() method with a version that can handle big -numbers. This overrides it by exporting it to the current package. Under -Perl v5.10.0 and higher, this is not so necessary, as oct() is lexically -overridden in the current scope whenever the bigrat pragma is active. +=item div_scale() -=item v or version +Set or get the division scale. -This prints out the name and version of all modules used and then exits. +=item in_effect() + + use bigrat; + + print "in effect\n" if bigrat::in_effect; # true + { + no bigrat; + print "in effect\n" if bigrat::in_effect; # false + } + +Returns true or false if C is in effect in the current scope. - perl -Mbigrat=v +This method only works on Perl v5.9.4 or later. =back =head1 CAVEATS -=over 2 +=over 4 + +=item Hexadecimal, octal, and binary floating point literals + +Perl (and this module) accepts hexadecimal, octal, and binary floating point +literals, but use them with care with Perl versions before v5.32.0, because some +versions of Perl silently give the wrong result. =item Operator vs literal overloading -C works by overloading handling of integer and floating point -literals, converting them to L or L -objects. +C works by overloading handling of integer and floating point literals, +converting them to L objects. -This means that arithmetic involving only string values or string -literals will be performed using Perl's built-in operators. +This means that arithmetic involving only string values or string literals are +performed using Perl's built-in operators. For example: @@ -501,59 +687,72 @@ For example: my $y = "900000000000000007"; print $x - $y; -will output C<0> on default 32-bit builds, since C never sees -the string literals. To ensure the expression is all treated as -C or C objects, use a literal number in -the expression: +outputs C<0> on default 32-bit builds, since C never sees the string +literals. To ensure the expression is all treated as C objects, +use a literal number in the expression: print +(0+$x) - $y; +=item Ranges + +Perl does not allow overloading of ranges, so you can neither safely use ranges +with C endpoints, nor is the iterator variable a C. + + use 5.010; + for my $i (12..13) { + for my $j (20..21) { + say $i ** $j; # produces a floating-point number, + # not an object + } + } + =item in_effect() This method only works on Perl v5.9.4 or later. =item hex()/oct() -C overrides these routines with versions that can also handle -big integer values. Under Perl prior to version v5.9.4, however, this -will not happen unless you specifically ask for it with the two -import tags "hex" and "oct" - and then it will be global and cannot be -disabled inside a scope with "no bigint": +C overrides these routines with versions that can also handle big +integer values. Under Perl prior to version v5.9.4, however, this will not +happen unless you specifically ask for it with the two import tags "hex" and +"oct" - and then it will be global and cannot be disabled inside a scope with +C: - use bigint qw/hex oct/; + use bigrat qw/hex oct/; + print hex("0x1234567890123456"); + { + no bigrat; print hex("0x1234567890123456"); - { - no bigint; - print hex("0x1234567890123456"); - } + } The second call to hex() will warn about a non-portable constant. Compare this to: - use bigint; + use bigrat; - # will warn only under Perl older than v5.9.4 - print hex("0x1234567890123456"); + # will warn only under Perl older than v5.9.4 + print hex("0x1234567890123456"); =back =head1 EXAMPLES - perl -Mbigrat -le 'print sqrt(33)' - perl -Mbigrat -le 'print 2*255' - perl -Mbigrat -le 'print 4.5+2*255' - perl -Mbigrat -le 'print 3/7 + 5/7 + 8/3' - perl -Mbigrat -le 'print 12->is_odd()'; - perl -Mbignum=l,GMP -le 'print 7 ** 7777' + perl -Mbigrat -le 'print sqrt(33)' + perl -Mbigrat -le 'print 2**255' + perl -Mbigrat -le 'print 4.5+2**255' + perl -Mbigrat -le 'print 3/7 + 5/7 + 8/3' + perl -Mbigrat -le 'print 12->is_odd()'; + perl -Mbigrat=l,GMP -le 'print 7 ** 7777' =head1 BUGS -For information about bugs and how to report them, see the BUGS section in the -documentation available with the perldoc command. - - perldoc bignum +Please report any bugs or feature requests to +C, or through the web interface at +L (requires login). +We will be notified, and then you'll automatically be notified of +progress on your bug as I make changes. =head1 SUPPORT @@ -561,10 +760,31 @@ You can find documentation for this module with the perldoc command. perldoc bigrat -For more information, see the SUPPORT section in the documentation available -with the perldoc command. +You can also look for information at: - perldoc bignum +=over 4 + +=item * GitHub + +L + +=item * RT: CPAN's request tracker + +L + +=item * MetaCPAN + +L + +=item * CPAN Testers Matrix + +L + +=item * CPAN Ratings + +L + +=back =head1 LICENSE @@ -588,7 +808,7 @@ L, L and L. =item * -Peter John Acklam Epjacklam@gmail.com, 2014-. +Maintained by Peter John Acklam Epjacklam@gmail.comE, 2014-. =back diff --git a/gnu/usr.bin/perl/cpan/bignum/t/big_e_pi.t b/gnu/usr.bin/perl/cpan/bignum/t/big_e_pi.t deleted file mode 100755 index 06b4b0860a7..00000000000 --- a/gnu/usr.bin/perl/cpan/bignum/t/big_e_pi.t +++ /dev/null @@ -1,17 +0,0 @@ -#!perl - -############################################################################### -# test for e() and PI() exports - -use strict; -use warnings; - -use Test::More tests => 4; - -use bignum qw/e PI bexp bpi/; - -is(e, "2.718281828459045235360287471352662497757", 'e'); -is(PI, "3.141592653589793238462643383279502884197", 'PI'); - -is(bexp(1, 10), "2.718281828", 'bexp(1, 10)'); -is(bpi(10), "3.141592654", 'bpi(10)'); diff --git a/gnu/usr.bin/perl/cpan/bignum/t/bigexp.t b/gnu/usr.bin/perl/cpan/bignum/t/bigexp.t index 61d39b2b82f..9ab565a557c 100755 --- a/gnu/usr.bin/perl/cpan/bignum/t/bigexp.t +++ b/gnu/usr.bin/perl/cpan/bignum/t/bigexp.t @@ -1,14 +1,14 @@ -#!perl +# -*- mode: perl; -*- ############################################################################### -# test for bug #18025: bignum/bigrat can lead to a number that is both 1 and 0 +# test for bug #18025: bigfloat/bigrat can lead to a number that is both 1 and 0 use strict; use warnings; use Test::More tests => 4; -use bignum; +use bigfloat; my $ln_ev = -7 / (10 ** 17); my $ev = exp($ln_ev); diff --git a/gnu/usr.bin/perl/cpan/bignum/t/bigint.t b/gnu/usr.bin/perl/cpan/bignum/t/bigint.t index 4af592f5c12..7447d8a4150 100755 --- a/gnu/usr.bin/perl/cpan/bignum/t/bigint.t +++ b/gnu/usr.bin/perl/cpan/bignum/t/bigint.t @@ -1,108 +1,50 @@ -#!perl +# -*- mode: perl; -*- ############################################################################### use strict; use warnings; -use Test::More tests => 51; +use Test::More tests => 17; -use bigint qw/hex oct/; - -############################################################################### -# _constant tests - -foreach (qw/ - 123:123 - 123.4:123 - 1.4:1 - 0.1:0 - -0.1:0 - -1.1:-1 - -123.4:-123 - -123:-123 - 123e2:123e2 - 123e-1:12 - 123e-4:0 - 123e-3:0 - 123.345e-1:12 - 123.456e+2:12345 - 1234.567e+3:1234567 - 1234.567e+4:1234567E1 - 1234.567e+6:1234567E3 - /) -{ - my ($x, $y) = split /:/; - is(bigint::_float_constant("$x"), "$y", - qq|bigint::_float_constant("$x") = $y|); -} - -foreach (qw/ - 0100:64 - 0200:128 - 0x100:256 - 0b1001:9 - /) -{ - my ($x, $y) = split /:/; - is(bigint::_binary_constant("$x"), "$y", - qq|bigint::_binary_constant("$x") = "$y")|); -} +use bigint; ############################################################################### # general tests my $x = 5; -like(ref($x), qr/^Math::BigInt/, '$x = 5 makes $x a Math::BigInt'); # :constant +is(ref($x), 'Math::BigInt', '$x = 5 makes $x a Math::BigInt'); -# todo: is(2 + 2.5, 4.5); # should still work -# todo: $x = 2 + 3.5; is(ref($x), 'Math::BigFloat'); +$x = 2 + 3.5; +is($x, 5.5, '2 + 3.5 = 5.5'); +is(ref($x), 'Math::BigInt', '$x = 2 + 3.5 makes $x a Math::BigInt'); $x = 2 ** 255; -like(ref($x), qr/^Math::BigInt/, '$x = 2 ** 255 makes $x a Math::BigInt'); +is(ref($x), 'Math::BigInt', '$x = 2 ** 255 makes $x a Math::BigInt'); is(12->bfac(), 479001600, '12->bfac() = 479001600'); is(9/4, 2, '9/4 = 2'); -is(4.5 + 4.5, 8, '4.5 + 4.5 = 2'); # truncate -like(ref(4.5 + 4.5), qr/^Math::BigInt/, '4.5 + 4.5 makes a Math::BigInt'); +is(4.5 + 4.5, 8, '4.5 + 4.5 = 8'); # truncate +is(ref(4.5 + 4.5), 'Math::BigInt', '4.5 + 4.5 makes a Math::BigInt'); ############################################################################### # accuracy and precision -is(bigint->accuracy(), undef, 'get accuracy'); -is(bigint->accuracy(12), 12, 'set accuracy to 12'); -is(bigint->accuracy(), 12, 'get accuracy again'); - -is(bigint->precision(), undef, 'get precision'); -is(bigint->precision(12), 12, 'set precision to 12'); -is(bigint->precision(), 12, 'get precision again'); - -is(bigint->round_mode(), 'even', 'get round mode'); -is(bigint->round_mode('odd'), 'odd', 'set round mode'); -is(bigint->round_mode(), 'odd', 'get round mode again'); - -############################################################################### -# hex() and oct() - -my $class = 'Math::BigInt'; - -is(ref(hex(1)), $class, qq|ref(hex(1)) = $class|); -is(ref(hex(0x1)), $class, qq|ref(hex(0x1)) = $class|); -is(ref(hex("af")), $class, qq|ref(hex("af")) = $class|); -is(ref(hex("0x1")), $class, qq|ref(hex("0x1")) = $class|); - -is(hex("af"), Math::BigInt->new(0xaf), - qq|hex("af") = Math::BigInt->new(0xaf)|); - -is(ref(oct("0x1")), $class, qq|ref(oct("0x1")) = $class|); -is(ref(oct("01")), $class, qq|ref(oct("01")) = $class|); -is(ref(oct("0b01")), $class, qq|ref(oct("0b01")) = $class|); -is(ref(oct("1")), $class, qq|ref(oct("1")) = $class|); -is(ref(oct(" 1")), $class, qq|ref(oct(" 1")) = $class|); -is(ref(oct(" 0x1")), $class, qq|ref(oct(" 0x1")) = $class|); - -is(ref(oct(0x1)), $class, qq|ref(oct(0x1)) = $class|); -is(ref(oct(01)), $class, qq|ref(oct(01)) = $class|); -is(ref(oct(0b01)), $class, qq|ref(oct(0b01)) = $class|); -is(ref(oct(1)), $class, qq|ref(oct(1)) = $class|); +is(bigint->accuracy(), undef, 'get accuracy'); +bigint->accuracy(12); +is(bigint->accuracy(), 12, 'get accuracy again'); +bigint->accuracy(undef); +is(bigint->accuracy(), undef, 'get accuracy again'); + +is(bigint->precision(), undef, 'get precision'); +bigint->precision(12); +is(bigint->precision(), 12, 'get precision again'); +bigint->precision(undef); +is(bigint->precision(), undef, 'get precision again'); + +is(bigint->round_mode(), 'even', 'get round mode'); +bigint->round_mode('odd'); +is(bigint->round_mode(), 'odd', 'get round mode again'); +bigint->round_mode('even'); +is(bigint->round_mode(), 'even', 'get round mode again'); diff --git a/gnu/usr.bin/perl/cpan/bignum/t/bignum.t b/gnu/usr.bin/perl/cpan/bignum/t/bignum.t index 6bdd5bb29bc..fe2f2f4d228 100755 --- a/gnu/usr.bin/perl/cpan/bignum/t/bignum.t +++ b/gnu/usr.bin/perl/cpan/bignum/t/bignum.t @@ -1,83 +1,49 @@ -#!/usr/bin/perl -w +# -*- mode: perl; -*- ############################################################################### use strict; -use Test::More tests => 35; +use warnings; -use bignum qw/oct hex/; +use Test::More tests => 15; + +use bignum; ############################################################################### # general tests my $x = 5; -like(ref($x), qr/^Math::BigInt/, '$x = 5 makes $x a Math::BigInt'); # :constant +is(ref($x), 'Math::BigInt', '$x = 5 makes $x a Math::BigInt'); -is(2 + 2.5, 4.5, '2 + 2.5 = 4.5'); $x = 2 + 3.5; +is($x, 5.5, '2 + 3.5 = 5.5'); is(ref($x), 'Math::BigFloat', '$x = 2 + 3.5 makes $x a Math::BigFloat'); -is(2 * 2.1, 4.2, '2 * 2.1 = 4.2'); -$x = 2 + 2.1; -is(ref($x), 'Math::BigFloat', '$x = 2 + 2.1 makes $x a Math::BigFloat'); - $x = 2 ** 255; -like(ref($x), qr/^Math::BigInt/, '$x = 2 ** 255 makes $x a Math::BigInt'); - -# see if Math::BigInt constant and upgrading works -is(Math::BigInt::bsqrt("12"), '3.464101615137754587054892683011744733886', - 'Math::BigInt::bsqrt("12")'); -is(sqrt(12), '3.464101615137754587054892683011744733886', - 'sqrt(12)'); - -is(2/3, "0.6666666666666666666666666666666666666667", '2/3'); +is(ref($x), 'Math::BigInt', '$x = 2 ** 255 makes $x a Math::BigInt'); -#is(2 ** 0.5, 'NaN'); # should be sqrt(2); +is(9/4, 2.25, '9/4 = 2.25 as a Math::BigFloat'); -is(12->bfac(), 479001600, '12->bfac() = 479001600'); - -# see if Math::BigFloat constant works - -# 0123456789 0123456789 <- default 40 -# 0123456789 0123456789 -is(1/3, '0.3333333333333333333333333333333333333333', '1/3'); +is(4.5 + 4.5, 9, '4.5 + 4.5 = 9'); +#is(ref(4.5 + 4.5), 'Math::BigInt', '4.5 + 4.5 makes a Math::BigInt'); ############################################################################### # accuracy and precision -is(bignum->accuracy(), undef, 'get accuracy'); -is(bignum->accuracy(12), 12, 'set accuracy to 12'); -is(bignum->accuracy(), 12, 'get accuracy again'); - -is(bignum->precision(), undef, 'get precision'); -is(bignum->precision(12), 12, 'set precision to 12'); -is(bignum->precision(), 12, 'get precision again'); - -is(bignum->round_mode(), 'even', 'get round mode'); -is(bignum->round_mode('odd'), 'odd', 'set round mode'); -is(bignum->round_mode(), 'odd', 'get round mode again'); - -############################################################################### -# hex() and oct() - -my $class = 'Math::BigInt'; - -is(ref(hex(1)), $class, qq|ref(hex(1)) = $class|); -is(ref(hex(0x1)), $class, qq|ref(hex(0x1)) = $class|); -is(ref(hex("af")), $class, qq|ref(hex("af")) = $class|); -is(ref(hex("0x1")), $class, qq|ref(hex("0x1")) = $class|); - -is(hex("af"), Math::BigInt->new(0xaf), - qq|hex("af") = Math::BigInt->new(0xaf)|); - -is(ref(oct("0x1")), $class, qq|ref(oct("0x1")) = $class|); -is(ref(oct("01")), $class, qq|ref(oct("01")) = $class|); -is(ref(oct("0b01")), $class, qq|ref(oct("0b01")) = $class|); -is(ref(oct("1")), $class, qq|ref(oct("1")) = $class|); -is(ref(oct(" 1")), $class, qq|ref(oct(" 1")) = $class|); -is(ref(oct(" 0x1")), $class, qq|ref(oct(" 0x1")) = $class|); - -is(ref(oct(0x1)), $class, qq|ref(oct(0x1)) = $class|); -is(ref(oct(01)), $class, qq|ref(oct(01)) = $class|); -is(ref(oct(0b01)), $class, qq|ref(oct(0b01)) = $class|); -is(ref(oct(1)), $class, qq|ref(oct(1)) = $class|); +is(bignum->accuracy(), undef, 'get accuracy'); +bignum->accuracy(12); +is(bignum->accuracy(), 12, 'get accuracy again'); +bignum->accuracy(undef); +is(bignum->accuracy(), undef, 'get accuracy again'); + +is(bignum->precision(), undef, 'get precision'); +bignum->precision(12); +is(bignum->precision(), 12, 'get precision again'); +bignum->precision(undef); +is(bignum->precision(), undef, 'get precision again'); + +is(bignum->round_mode(), 'even', 'get round mode'); +bignum->round_mode('odd'); +is(bignum->round_mode(), 'odd', 'get round mode again'); +bignum->round_mode('even'); +is(bignum->round_mode(), 'even', 'get round mode again'); diff --git a/gnu/usr.bin/perl/cpan/bignum/t/bigrat.t b/gnu/usr.bin/perl/cpan/bignum/t/bigrat.t index ac6fc0c6dba..ffa769c392e 100755 --- a/gnu/usr.bin/perl/cpan/bignum/t/bigrat.t +++ b/gnu/usr.bin/perl/cpan/bignum/t/bigrat.t @@ -1,27 +1,27 @@ -#!perl +# -*- mode: perl; -*- ############################################################################### use strict; use warnings; -use Test::More tests => 40; +use Test::More tests => 27; -use bigrat qw/oct hex/; +use bigrat; ############################################################################### # general tests my $x = 5; -like(ref($x), qr/^Math::BigInt/, '$x = 5 makes $x a Math::BigInt'); # :constant +is(ref($x), 'Math::BigRat', '$x = 5 makes $x a Math::BigRat'); -# todo: is(2 + 2.5, 4.5); # should still work -# todo: $x = 2 + 3.5; is(ref($x), 'Math::BigFloat'); +$x = 2 + 3.5; +is($x, 5.5, '2 + 3.5 = 5.5'); +is(ref($x), 'Math::BigRat', '$x = 2 + 3.5 makes $x a Math::BigRat'); $x = 2 ** 255; -like(ref($x), qr/^Math::BigInt/, '$x = 2 ** 255 makes $x a Math::BigInt'); +is(ref($x), 'Math::BigRat', '$x = 2 ** 255 makes $x a Math::BigRat'); -# see if Math::BigRat constant works is(1/3, '1/3', qq|1/3 = '1/3'|); is(1/4+1/3, '7/12', qq|1/4+1/3 = '7/12'|); is(5/7+3/7, '8/7', qq|5/7+3/7 = '8/7'|); @@ -46,39 +46,20 @@ is(3/7 / 1.5, '2/7', qq|3/7 / 1.5 = '2/7'|); ############################################################################### # accuracy and precision -is(bigrat->accuracy(), undef, 'get accuracy'); -is(bigrat->accuracy(12), 12, 'set accuracy to 12'); -is(bigrat->accuracy(), 12, 'get accuracy again'); - -is(bigrat->precision(), undef, 'get precision'); -is(bigrat->precision(12), 12, 'set precision to 12'); -is(bigrat->precision(), 12, 'get precision again'); - -is(bigrat->round_mode(), 'even', 'get round mode'); -is(bigrat->round_mode('odd'), 'odd', 'set round mode'); -is(bigrat->round_mode(), 'odd', 'get round mode again'); - -############################################################################### -# hex() and oct() - -my $class = 'Math::BigInt'; - -is(ref(hex(1)), $class, qq|ref(hex(1)) = $class|); -is(ref(hex(0x1)), $class, qq|ref(hex(0x1)) = $class|); -is(ref(hex("af")), $class, qq|ref(hex("af")) = $class|); -is(ref(hex("0x1")), $class, qq|ref(hex("0x1")) = $class|); - -is(hex("af"), Math::BigInt->new(0xaf), - qq|hex("af") = Math::BigInt->new(0xaf)|); - -is(ref(oct("0x1")), $class, qq|ref(oct("0x1")) = $class|); -is(ref(oct("01")), $class, qq|ref(oct("01")) = $class|); -is(ref(oct("0b01")), $class, qq|ref(oct("0b01")) = $class|); -is(ref(oct("1")), $class, qq|ref(oct("1")) = $class|); -is(ref(oct(" 1")), $class, qq|ref(oct(" 1")) = $class|); -is(ref(oct(" 0x1")), $class, qq|ref(oct(" 0x1")) = $class|); - -is(ref(oct(0x1)), $class, qq|ref(oct(0x1)) = $class|); -is(ref(oct(01)), $class, qq|ref(oct(01)) = $class|); -is(ref(oct(0b01)), $class, qq|ref(oct(0b01)) = $class|); -is(ref(oct(1)), $class, qq|ref(oct(1)) = $class|); +is(bigrat->accuracy(), undef, 'get accuracy'); +bigrat->accuracy(12); +is(bigrat->accuracy(), 12, 'get accuracy again'); +bigrat->accuracy(undef); +is(bigrat->accuracy(), undef, 'get accuracy again'); + +is(bigrat->precision(), undef, 'get precision'); +bigrat->precision(12); +is(bigrat->precision(), 12, 'get precision again'); +bigrat->precision(undef); +is(bigrat->precision(), undef, 'get precision again'); + +is(bigrat->round_mode(), 'even', 'get round mode'); +bigrat->round_mode('odd'); +is(bigrat->round_mode(), 'odd', 'get round mode again'); +bigrat->round_mode('even'); +is(bigrat->round_mode(), 'even', 'get round mode again'); diff --git a/gnu/usr.bin/perl/cpan/bignum/t/bii_e_pi.t b/gnu/usr.bin/perl/cpan/bignum/t/bii_e_pi.t deleted file mode 100755 index d9e20b56418..00000000000 --- a/gnu/usr.bin/perl/cpan/bignum/t/bii_e_pi.t +++ /dev/null @@ -1,18 +0,0 @@ -#!perl - -############################################################################### -# test for e() and PI() exports - -use strict; -use warnings; - -use Test::More tests => 5; - -use bigint qw/e PI bpi bexp/; - -is(e, "2", 'e'); -is(PI, "3", 'PI'); - -is(bexp(1, 10), "2", 'e'); -is(bexp(3, 10), "20", 'e'); -is(bpi(10), "3", 'PI'); diff --git a/gnu/usr.bin/perl/cpan/bignum/t/biinfnan.t b/gnu/usr.bin/perl/cpan/bignum/t/biinfnan.t deleted file mode 100755 index c3349173fc5..00000000000 --- a/gnu/usr.bin/perl/cpan/bignum/t/biinfnan.t +++ /dev/null @@ -1,22 +0,0 @@ -#!perl - -use strict; -use warnings; - -use Test::More tests => 66; - -use bigint; - -#require "t/infnan.inc"; - -# The 'bigint'/'bignum'/'bigrat' pragma is lexical, so we can't 'require' or -# 'do' the included file. Slurp the whole thing and 'eval' it. - -my $file = "t/infnan.inc"; - -open FILE, $file or die "$file: can't open file for reading: $!"; -my $data = do { local $/; }; -close FILE or die "$file: can't close file after reading: $!"; - -eval $data; -die $@ if $@; diff --git a/gnu/usr.bin/perl/cpan/bignum/t/bir_e_pi.t b/gnu/usr.bin/perl/cpan/bignum/t/bir_e_pi.t deleted file mode 100755 index 8305580b043..00000000000 --- a/gnu/usr.bin/perl/cpan/bignum/t/bir_e_pi.t +++ /dev/null @@ -1,20 +0,0 @@ -#!perl - -############################################################################### -# test for e() and PI() exports - -use strict; -use warnings; - -use Test::More tests => 4; - -use bigrat qw/e PI bexp bpi/; - -is(e, "2.718281828459045235360287471352662497757", 'e'); -is(PI, "3.141592653589793238462643383279502884197", 'PI'); - -# These tests should actually produce big rationals, but this is not yet -# implemented. - -is(bexp(1, 10), "2.718281828", 'bexp(1, 10)'); -is(bpi(10), "3.141592654", 'bpi(10)'); diff --git a/gnu/usr.bin/perl/cpan/bignum/t/bn_lite.t b/gnu/usr.bin/perl/cpan/bignum/t/bn_lite.t deleted file mode 100755 index d26fe5ceb7a..00000000000 --- a/gnu/usr.bin/perl/cpan/bignum/t/bn_lite.t +++ /dev/null @@ -1,20 +0,0 @@ -#!perl - -############################################################################### - -use strict; -use warnings; - -use Test::More; - -if (eval { require Math::BigInt::Lite; 1 }) { - plan tests => 1; - # can use Lite, so let bignum try it - require bignum; - bignum->import(); - # can't get to work a ref(1+1) here, presumable because :constant phase - # already done - is($bignum::_lite, 1, '$bignum::_lite is 1'); -} else { - plan skip_all => "no Math::BigInt::Lite"; -} diff --git a/gnu/usr.bin/perl/cpan/bignum/t/bninfnan.t b/gnu/usr.bin/perl/cpan/bignum/t/bninfnan.t deleted file mode 100755 index e437ca116bb..00000000000 --- a/gnu/usr.bin/perl/cpan/bignum/t/bninfnan.t +++ /dev/null @@ -1,22 +0,0 @@ -#!perl - -use strict; -use warnings; - -use Test::More tests => 66; - -use bignum; - -#require "t/infnan.inc"; - -# The 'bigint'/'bignum'/'bigrat' pragma is lexical, so we can't 'require' or -# 'do' the included file. Slurp the whole thing and 'eval' it. - -my $file = "t/infnan.inc"; - -open FILE, $file or die "$file: can't open file for reading: $!"; -my $data = do { local $/; }; -close FILE or die "$file: can't close file after reading: $!"; - -eval $data; -die $@ if $@; diff --git a/gnu/usr.bin/perl/cpan/bignum/t/br_lite.t b/gnu/usr.bin/perl/cpan/bignum/t/br_lite.t deleted file mode 100755 index 79ac2c655c9..00000000000 --- a/gnu/usr.bin/perl/cpan/bignum/t/br_lite.t +++ /dev/null @@ -1,20 +0,0 @@ -#!perl - -############################################################################### - -use strict; -use warnings; - -use Test::More; - -if (eval { require Math::BigInt::Lite; 1 }) { - plan tests => 1; - # can use Lite, so let bignum try it - require bigrat; - bigrat->import(); - # can't get to work a ref(1+1) here, presumable because :constant phase - # already done - is($bigrat::_lite, 1, '$bigrat::_lite is 1'); -} else { - plan skip_all => "no Math::BigInt::Lite"; -} diff --git a/gnu/usr.bin/perl/cpan/bignum/t/brinfnan.t b/gnu/usr.bin/perl/cpan/bignum/t/brinfnan.t deleted file mode 100755 index 1be81649ef2..00000000000 --- a/gnu/usr.bin/perl/cpan/bignum/t/brinfnan.t +++ /dev/null @@ -1,22 +0,0 @@ -#!perl - -use strict; -use warnings; - -use Test::More tests => 66; - -use bigrat; - -#require "t/infnan.inc"; - -# The 'bigint'/'bignum'/'bigrat' pragma is lexical, so we can't 'require' or -# 'do' the included file. Slurp the whole thing and 'eval' it. - -my $file = "t/infnan.inc"; - -open FILE, $file or die "$file: can't open file for reading: $!"; -my $data = do { local $/; }; -close FILE or die "$file: can't close file after reading: $!"; - -eval $data; -die $@ if $@; diff --git a/gnu/usr.bin/perl/cpan/bignum/t/in_effect.t b/gnu/usr.bin/perl/cpan/bignum/t/in_effect.t index b4507ea54aa..1b32baf5e01 100755 --- a/gnu/usr.bin/perl/cpan/bignum/t/in_effect.t +++ b/gnu/usr.bin/perl/cpan/bignum/t/in_effect.t @@ -1,4 +1,4 @@ -#!perl +# -*- mode: perl; -*- ############################################################################### # Test in_effect() @@ -6,30 +6,70 @@ use strict; use warnings; -use Test::More tests => 9; +use Test::More tests => 21; -use bigint; -use bignum; -use bigrat; +{ + use bigint; + + can_ok('bigint', qw/in_effect/); -can_ok('bigint', qw/in_effect/); -can_ok('bignum', qw/in_effect/); -can_ok('bigrat', qw/in_effect/); + SKIP: { + skip('Need at least Perl v5.9.4', 3) if $] < "5.009005"; -SKIP: { - skip('Need at least Perl v5.9.4', 3) if $] < "5.009005"; + is(bigint::in_effect(), 1, 'bigint in effect'); + is(bigfloat::in_effect(), undef, 'bigfloat not in effect'); + is(bigrat::in_effect(), undef, 'bigint not in effect'); + } - is(bigint::in_effect(), 1, 'bigint in effect'); - is(bignum::in_effect(), 1, 'bignum in effect'); - is(bigrat::in_effect(), 1, 'bigrat in effect'); + { + no bigint; + + is(bigint::in_effect(), undef, 'bigint not in effect'); + is(bigfloat::in_effect(), undef, 'bigfloat not in effect'); + is(bigrat::in_effect(), undef, 'bigrat not in effect'); + } } { - no bigint; - no bignum; - no bigrat; + use bigfloat; + + can_ok('bigfloat', qw/in_effect/); + + SKIP: { + skip('Need at least Perl v5.9.4', 3) if $] < "5.009005"; + + is(bigint::in_effect(), undef, 'bigint not in effect'); + is(bigfloat::in_effect(), 1, 'bigfloat in effect'); + is(bigrat::in_effect(), undef, 'bigint not in effect'); + } + + { + no bigfloat; + + is(bigint::in_effect(), undef, 'bigint not in effect'); + is(bigfloat::in_effect(), undef, 'bigfloat not in effect'); + is(bigrat::in_effect(), undef, 'bigrat not in effect'); + } +} + +{ + use bigrat; + + can_ok('bigrat', qw/in_effect/); + + SKIP: { + skip('Need at least Perl v5.9.4', 3) if $] < "5.009005"; + + is(bigint::in_effect(), undef, 'bigint not in effect'); + is(bigfloat::in_effect(), undef, 'bigfloat not in effect'); + is(bigrat::in_effect(), 1, 'bigint in effect'); + } + + { + no bigrat; - is(bigint::in_effect(), undef, 'bigint not in effect'); - is(bignum::in_effect(), undef, 'bignum not in effect'); - is(bigrat::in_effect(), undef, 'bigrat not in effect'); + is(bigint::in_effect(), undef, 'bigint not in effect'); + is(bigfloat::in_effect(), undef, 'bigfloat not in effect'); + is(bigrat::in_effect(), undef, 'bigrat not in effect'); + } } diff --git a/gnu/usr.bin/perl/cpan/bignum/t/infnan.inc b/gnu/usr.bin/perl/cpan/bignum/t/infnan.inc deleted file mode 100644 index 5ecc7b5936b..00000000000 --- a/gnu/usr.bin/perl/cpan/bignum/t/infnan.inc +++ /dev/null @@ -1,91 +0,0 @@ -#!perl - -use strict; -use warnings; - -my $x; - -############################################################################### -# inf tests - -$x = 1 + inf; -like(ref($x), qr/^Math::BigInt/, '$x = 1 + inf makes a Math::BigInt'); -is($x->bstr(), 'inf', qq|$x = 1 + inf; $x->bstr() = 'inf'|); - -$x = 1 * inf; -like(ref($x), qr/^Math::BigInt/, '$x = 1 * inf makes a Math::BigInt'); -is($x->bstr(), 'inf', qq|$x = 1 * inf; $x->bstr() = 'inf'|); - -# these don't work without exporting inf() -$x = inf; -like(ref($x), qr/^Math::BigInt/, '$x = inf makes a Math::BigInt'); -is($x->bstr(), 'inf', qq|$x = inf; $x->bstr() = 'inf'|); - -$x = inf + inf; -like(ref($x), qr/^Math::BigInt/, '$x = inf + inf makes a Math::BigInt'); -is($x->bstr(), 'inf', qq|$x = inf + inf; $x->bstr() = 'inf'|); - -$x = inf * inf; -like(ref($x), qr/^Math::BigInt/, '$x = inf * inf makes a Math::BigInt'); -is($x->bstr(), 'inf', qq|$x = inf * inf; $x->bstr() = 'inf'|); - -############################################################################### -# NaN tests - -$x = 1 + NaN; -like(ref($x), qr/^Math::BigInt/, '$x = 1 + NaN makes a Math::BigInt'); -is($x->bstr(), 'NaN', qq|$x = 1 + NaN; $x->bstr() = 'NaN'|); - -$x = 1 * NaN; -like(ref($x), qr/^Math::BigInt/, '$x = 1 * NaN makes a Math::BigInt'); -is($x->bstr(), 'NaN', qq|$x = 1 * NaN; $x->bstr() = 'NaN'|); - -# these don't work without exporting NaN() -$x = NaN; -like(ref($x), qr/^Math::BigInt/, '$x = NaN makes a Math::BigInt'); -is($x->bstr(), 'NaN', qq|$x = NaN; $x->bstr() = 'NaN'|); - -$x = NaN + NaN; -like(ref($x), qr/^Math::BigInt/, '$x = NaN + NaN makes a Math::BigInt'); -is($x->bstr(), 'NaN', qq|$x = NaN + NaN; $x->bstr() = 'NaN'|); - -$x = NaN * NaN; -like(ref($x), qr/^Math::BigInt/, '$x = NaN * NaN makes a Math::BigInt'); -is($x->bstr(), 'NaN', qq|$x = NaN * NaN; $x->bstr() = 'NaN'|); - -############################################################################### -# mixed tests - -# these don't work without exporting NaN() or inf() - -$x = NaN + inf; -like(ref($x), qr/^Math::BigInt/, '$x = NaN + inf makes a Math::BigInt'); -is($x->bstr(), 'NaN', qq|$x = NaN + inf; $x->bstr() = 'NaN'|); - -$x = NaN * inf; -like(ref($x), qr/^Math::BigInt/, '$x = NaN * inf makes a Math::BigInt'); -is($x->bstr(), 'NaN', qq|$x = NaN * inf; $x->bstr() = 'NaN'|); - -$x = inf * NaN; -like(ref($x), qr/^Math::BigInt/, '$x = inf * NaN makes a Math::BigInt'); -is($x->bstr(), 'NaN', qq|$x = inf * NaN; $x->bstr() = 'NaN'|); - -############################################################################### -# inf and NaN as strings. - -for my $nan (qw/ nan naN nAn nAN Nan NaN NAn NAN /) { - my $x = 1 + $nan; - is($x->bstr(), "NaN", qq|\$x = 1 + "$nan"; \$x->bstr() = "NaN"|); - isa_ok($x, "Math::BigInt"); -} - -for my $inf (qw/ inf inF iNf iNF Inf InF INf INF - infinity Infinity InFiNiTy iNfInItY - /) -{ - my $x = 1 + $inf; - is($x->bstr(), "inf", qq|\$x = 1 + "$inf"; \$x->bstr() = "inf"|); - isa_ok($x, "Math::BigInt"); -} - -1; diff --git a/gnu/usr.bin/perl/cpan/bignum/t/option_a.t b/gnu/usr.bin/perl/cpan/bignum/t/option_a.t index 2a9d17154d7..7d4f05da787 100755 --- a/gnu/usr.bin/perl/cpan/bignum/t/option_a.t +++ b/gnu/usr.bin/perl/cpan/bignum/t/option_a.t @@ -1,22 +1,36 @@ -#!perl - -############################################################################### +# -*- mode: perl; -*- use strict; use warnings; -use Test::More tests => 4; +use Test::More tests => 6; + +{ + my $class = "Math::BigInt"; + + use bigint a => "12"; + cmp_ok($class -> accuracy(), "==", 12, "$class accuracy = 12"); -use bignum a => '12'; + bigint -> import(accuracy => "23"); + cmp_ok($class -> accuracy(), "==", 23, "$class accuracy = 23"); +} + +{ + my $class = "Math::BigFloat"; -my @CLASSES = qw/Math::BigInt Math::BigFloat/; + use bigfloat a => "13"; + cmp_ok($class -> accuracy(), "==", 13, "$class accuracy = 12"); -foreach my $class (@CLASSES) { - is($class->accuracy(),12, "$class accuracy = 12"); + bigfloat -> import(accuracy => "24"); + cmp_ok($class -> accuracy(), "==", 24, "$class accuracy = 23"); } -bignum->import(accuracy => '23'); +{ + my $class = "Math::BigRat"; + + use bigrat a => "14"; + cmp_ok($class -> accuracy(), "==", 14, "$class accuracy = 12"); -foreach my $class (@CLASSES) { - is($class->accuracy(), 23, "$class accuracy = 23"); + bigrat -> import(accuracy => "25"); + cmp_ok($class -> accuracy(), "==", 25, "$class accuracy = 23"); } diff --git a/gnu/usr.bin/perl/cpan/bignum/t/option_l.t b/gnu/usr.bin/perl/cpan/bignum/t/option_l.t deleted file mode 100755 index c3a1d5d3282..00000000000 --- a/gnu/usr.bin/perl/cpan/bignum/t/option_l.t +++ /dev/null @@ -1,52 +0,0 @@ -#!perl - -# test the "l", "lib", "try" and "only" options: - -use strict; -use warnings; - -use Test::More tests => 19; - -use bignum; - -# Catch warnings. - -my @WARNINGS; -local $SIG{__WARN__} = sub { - push @WARNINGS, $_[0]; -}; - -my $rc; - -$rc = eval { bignum->import( "l" => "foo" ) }; -is($@, '', # shouldn't die - qq|eval { bignum->import( "l" => "foo" ) }|); -is(scalar(@WARNINGS), 1, 'one warning'); -like($WARNINGS[0], qr/fallback to Math::/, 'got fallback'); - -$rc = eval { bignum->import( "lib" => "foo" ) }; -is($@, '', # ditto - qq|eval { bignum->import( "lib" => "foo" ) }|); -is(scalar @WARNINGS, 2, 'two warnings'); -like($WARNINGS[1], qr/fallback to Math::/, 'got fallback'); - -$rc = eval { bignum->import( "try" => "foo" ) }; -is($@, '', # shouldn't die - qq|eval { bignum->import( "try" => "foo" ) }|); - -$rc = eval { bignum->import( "try" => "foo" ) }; -is($@, '', # ditto - qq|eval { bignum->import( "try" => "foo" ) }|); - -$rc = eval { bignum->import( "foo" => "bar" ) }; -like($@, qr/^Unknown option foo/i, 'died'); # should die - -$rc = eval { bignum->import( "only" => "bar" ) }; -like($@, qr/fallback disallowed/i, 'died'); # should die - -# test that options are only lowercase (don't see a reason why allow UPPER) - -foreach (qw/L LIB Lib T Trace TRACE V Version VERSION/) { - $rc = eval { bignum->import( $_ => "bar" ) }; - like($@, qr/^Unknown option $_/i, 'died'); # should die -} diff --git a/gnu/usr.bin/perl/cpan/bignum/t/option_p.t b/gnu/usr.bin/perl/cpan/bignum/t/option_p.t index 6f57c92c818..c1c16db0a9a 100755 --- a/gnu/usr.bin/perl/cpan/bignum/t/option_p.t +++ b/gnu/usr.bin/perl/cpan/bignum/t/option_p.t @@ -1,20 +1,36 @@ -#!perl +# -*- mode: perl; -*- use strict; use warnings; -use Test::More tests => 4; +use Test::More tests => 6; -my @CLASSES = qw/Math::BigInt Math::BigFloat/; +{ + my $class = "Math::BigInt"; -use bignum p => '12'; + use bigint p => "12"; + cmp_ok($class -> precision(), "==", 12, "$class precision = 12"); -foreach my $class (@CLASSES) { - is($class->precision(), 12, "$class precision = 12"); + bigint -> import(precision => "23"); + cmp_ok($class -> precision(), "==", 23, "$class precision = 23"); } -bignum->import(p => '42'); +{ + my $class = "Math::BigFloat"; -foreach my $class (@CLASSES) { - is($class->precision(), 42, "$class precision = 42"); + use bigfloat p => "13"; + cmp_ok($class -> precision(), "==", 13, "$class precision = 12"); + + bigfloat -> import(precision => "24"); + cmp_ok($class -> precision(), "==", 24, "$class precision = 23"); +} + +{ + my $class = "Math::BigRat"; + + use bigrat p => "14"; + cmp_ok($class -> precision(), "==", 14, "$class precision = 12"); + + bigrat -> import(precision => "25"); + cmp_ok($class -> precision(), "==", 25, "$class precision = 23"); } diff --git a/gnu/usr.bin/perl/cpan/bignum/t/ratopt_a.t b/gnu/usr.bin/perl/cpan/bignum/t/ratopt_a.t index e5ee13b9426..9a5ce7c0618 100755 --- a/gnu/usr.bin/perl/cpan/bignum/t/ratopt_a.t +++ b/gnu/usr.bin/perl/cpan/bignum/t/ratopt_a.t @@ -1,13 +1,13 @@ -#!perl +# -*- mode: perl; -*- ############################################################################### use strict; use warnings; -use Test::More tests => 7; +use Test::More tests => 3; -my @CLASSES = qw/Math::BigInt Math::BigFloat Math::BigRat/; +my @CLASSES = qw/Math::BigRat/; # bigrat (bug until v0.15) use bigrat a => 2; diff --git a/gnu/usr.bin/perl/cpan/bignum/t/scope_f.t b/gnu/usr.bin/perl/cpan/bignum/t/scope_f.t deleted file mode 100755 index e932ea2b9f7..00000000000 --- a/gnu/usr.bin/perl/cpan/bignum/t/scope_f.t +++ /dev/null @@ -1,34 +0,0 @@ -#!perl - -############################################################################### -# Test "no bignum;" and overloading of hex()/oct() for newer Perls - -use strict; -use warnings; - -use Test::More tests => 10; - -# no :hex and :oct means these do not get overloaded for older Perls: -use bignum; - -isnt (ref(1), '', 'is in effect'); -isnt (ref(2.0), '', 'is in effect'); -isnt (ref(0x20), '', 'is in effect'); - -SKIP: { - skip ('Need at least Perl v5.9.4', 2) if $] < 5.009004; - - is (ref(hex(9)), 'Math::BigInt', 'hex is overloaded'); - is (ref(oct(07)), 'Math::BigInt', 'oct is overloaded'); - } - -{ - no bignum; - - is (ref(1), '', 'is not in effect'); - is (ref(2.0), '', 'is not in effect'); - is (ref(0x20), '', 'is not in effect'); - - isnt (ref(hex(9)), 'Math::BigInt', 'hex is not overloaded'); - isnt (ref(oct(07)), 'Math::BigInt', 'oct is not overloaded'); -} diff --git a/gnu/usr.bin/perl/cpan/bignum/t/scope_i.t b/gnu/usr.bin/perl/cpan/bignum/t/scope_i.t deleted file mode 100755 index e76ceeee253..00000000000 --- a/gnu/usr.bin/perl/cpan/bignum/t/scope_i.t +++ /dev/null @@ -1,35 +0,0 @@ -#!perl - -############################################################################### -# Test "no bigint;" and overloading of hex()/oct() for newer Perls - -use strict; -use warnings; - -use Test::More tests => 10; - -# no :hex and :oct means these do not get overloaded for older Perls: -use bigint; - -isnt(ref(1), '', 'is in effect'); -isnt(ref(2.0), '', 'is in effect'); -isnt(ref(0x20), '', 'is in effect'); - -SKIP: { - # Quote version number due to "use bigint;" - skip('Need at least Perl v5.9.4', 2) if $] < "5.009004"; - - is(ref(hex(9)), 'Math::BigInt', 'hex is overloaded'); - is(ref(oct(07)), 'Math::BigInt', 'oct is overloaded'); -} - -{ - no bigint; - - is(ref(1), '', 'is not in effect'); - is(ref(2.0), '', 'is not in effect'); - is(ref(0x20), '', 'is not in effect'); - - isnt(ref(hex(9)), 'Math::BigInt', 'hex is not overloaded'); - isnt(ref(oct(07)), 'Math::BigInt', 'oct is not overloaded'); -} diff --git a/gnu/usr.bin/perl/cpan/bignum/t/scope_r.t b/gnu/usr.bin/perl/cpan/bignum/t/scope_r.t deleted file mode 100755 index 8ad2626bf8a..00000000000 --- a/gnu/usr.bin/perl/cpan/bignum/t/scope_r.t +++ /dev/null @@ -1,34 +0,0 @@ -#!perl - -############################################################################### -# Test "no bigrat;" and overloading of hex()/oct() for newer Perls - -use strict; -use warnings; - -use Test::More tests => 10; - -# no :hex and :oct means these do not get overloaded for older Perls: -use bigrat; - -isnt(ref(1), '', 'is in effect'); -isnt(ref(2.0), '', 'is in effect'); -isnt(ref(0x20), '', 'is in effect'); - -SKIP: { - skip('Need at least Perl v5.9.4', 2) if $] < 5.009004; - - is(ref(hex(9)), 'Math::BigInt', 'hex is overloaded'); - is(ref(oct(07)), 'Math::BigInt', 'oct is overloaded'); -} - -{ - no bigrat; - - is(ref(1), '', 'is not in effect'); - is(ref(2.0), '', 'is not in effect'); - is(ref(0x20), '', 'is not in effect'); - - isnt(ref(hex(9)), 'Math::BigInt', 'hex is not overloaded'); - isnt(ref(oct(07)), 'Math::BigInt', 'oct is not overloaded'); -} diff --git a/gnu/usr.bin/perl/cpan/experimental/lib/experimental.pm b/gnu/usr.bin/perl/cpan/experimental/lib/experimental.pm index c900771b9e2..ab8a2f06ac0 100644 --- a/gnu/usr.bin/perl/cpan/experimental/lib/experimental.pm +++ b/gnu/usr.bin/perl/cpan/experimental/lib/experimental.pm @@ -1,5 +1,5 @@ package experimental; -$experimental::VERSION = '0.020'; +$experimental::VERSION = '0.028'; use strict; use warnings; use version (); @@ -18,14 +18,20 @@ my %features = map { $_ => 1 } $] > 5.015006 ? keys %feature::feature : do { }; my %min_version = ( + args_array_with_signatures => '5.20.0', array_base => '5', autoderef => '5.14.0', bitwise => '5.22.0', + builtin => '5.35.7', const_attr => '5.22.0', current_sub => '5.16.0', declared_refs => '5.26.0', + defer => '5.35.4', evalbytes => '5.16.0', + extra_paired_delims => '5.35.9', fc => '5.16.0', + for_list => '5.35.5', + isa => '5.31.7', lexical_topic => '5.10.0', lexical_subs => '5.18.0', postderef => '5.20.0', @@ -37,16 +43,18 @@ my %min_version = ( signatures => '5.20.0', state => '5.10.0', switch => '5.10.0', + try => '5.34.0', unicode_eval => '5.16.0', unicode_strings => '5.12.0', ); -my %max_version = ( - autoderef => '5.23.1', - lexical_topic => '5.23.4', +my %removed_in_version = ( + array_base => '5.30.0', + autoderef => '5.24.0', + lexical_topic => '5.24.0', ); $_ = version->new($_) for values %min_version; -$_ = version->new($_) for values %max_version; +$_ = version->new($_) for values %removed_in_version; my %additional = ( postderef => ['postderef_qq'], @@ -69,16 +77,12 @@ sub _enable { croak "Can't enable unknown feature $pragma"; } elsif ($] < $min_version{$pragma}) { - my $stable = $min_version{$pragma}; - if ($stable->{version}[1] % 2) { - $stable = version->new( - "5.".($stable->{version}[1]+1).'.0' - ); - } + my $stable = $min_version{$pragma}->stringify; + $stable =~ s/^ 5\. ([0-9]?[13579]) \. \d+ $/"5." . ($1 + 1) . ".0"/xe; croak "Need perl $stable or later for feature $pragma"; } - elsif ($] >= ($max_version{$pragma} || 7)) { - croak "Experimental feature $pragma has been removed from perl in version $max_version{$pragma}"; + elsif ($] >= ($removed_in_version{$pragma} || 7)) { + croak "Experimental feature $pragma has been removed from perl in version $removed_in_version{$pragma}"; } } @@ -132,12 +136,12 @@ experimental - Experimental features made easy =head1 VERSION -version 0.020 +version 0.027 =head1 SYNOPSIS - use experimental 'lexical_subs', 'smartmatch'; - my sub foo { $_[0] ~~ 1 } + use experimental 'lexical_subs', 'signatures'; + my sub plus_one($value) { $value + 1 } =head1 DESCRIPTION @@ -165,34 +169,61 @@ The supported features, documented further below, are: =over 4 +=item * C - allow C<@_> to be used in signatured subs. + +This is supported on perl 5.20.0 and above, but is likely to be removed in the future. + =item * C - allow the use of C<$[> to change the starting index of C<@array>. -This is supported on all versions of perl. +This was removed in perl 5.30.0. =item * C - allow push, each, keys, and other built-ins on references. -This was added in perl 5.14.0 and removed in perl 5.23.1. +This was added in perl 5.14.0 and removed in perl 5.24.0. =item * C - allow the new stringwise bit operators This was added in perl 5.22.0. +=item * C - allow the use of the functions in the builtin:: namespace + +This was added in perl 5.36.0 + =item * C - allow the :const attribute on subs This was added in perl 5.22.0. +=item * C - enables aliasing via assignment to references + +This was added in perl 5.26.0. + +=item * C - enables the use of defer blocks + +This was added in perl 5.36.0 + +=item * C - allows iterating over multiple values at a time with C + +This was added in perl 5.36.0 + +=item * C - allow the use of the C infix operator + +This was added in perl 5.32.0. + =item * C - allow the use of lexical C<$_> via C. -This was added in perl 5.10.0 and removed in perl 5.23.4. +This was added in perl 5.10.0 and removed in perl 5.24.0. =item * C - allow the use of lexical subroutines. This was added in 5.18.0. -=item * C - allow the use of postfix dereferencing expressions, -including in interpolating strings +=item * C - allow the use of postfix dereferencing expressions -This was added in perl 5.20.0. +This was added in perl 5.20.0, and became non-experimental (and always enabled) in 5.24.0. + +=item * C - allow the use of postfix dereferencing expressions inside interpolating strings + +This was added in perl 5.20.0, and became non-experimental (and always enabled) in 5.24.0. =item * C - enables strict mode in regular expressions @@ -219,6 +250,10 @@ incompatibilities between 5.10.0 and 5.10.1. This was added in perl 5.10.0. +=item * C - allow the use of C and C + +This was added in perl 5.34.0 + =item * C - allows the use of the :win32 IO layer. This was added on perl 5.22.0. @@ -252,7 +287,7 @@ be guaranteed in any way. =head1 SEE ALSO -L contains more information about experimental features. +L contains more information about experimental features. =head1 AUTHOR diff --git a/gnu/usr.bin/perl/cpan/experimental/t/basic.t b/gnu/usr.bin/perl/cpan/experimental/t/basic.t index f39cc230ed3..248b56c5015 100644 --- a/gnu/usr.bin/perl/cpan/experimental/t/basic.t +++ b/gnu/usr.bin/perl/cpan/experimental/t/basic.t @@ -5,6 +5,8 @@ use warnings; use Test::More 0.89; +plan skip_all => 'This module is a no-op on perls earlier than 5.010' if "$]" < 5.010000; + local $SIG{__WARN__} = sub { fail("Got unexpected warning"); diag($_[0]) }; if ($] >= 5.010000) { @@ -17,45 +19,26 @@ END } if ($] >= 5.010001) { - if (eval ' - no warnings "experimental"; - use feature "switch"; - if(0) { when(3) {} } - 1; - ') { - is (eval <<'END', 1, 'switch compiles') or diag $@; - use experimental 'switch'; - sub bar { 1 }; - given(1) { - when (\&bar) { - pass("bar matches 1"); - } - default { - fail("bar matches 1"); - } + is (eval <<'END', 1, 'switch compiles') or diag $@; + use experimental 'switch'; + sub bar { 1 }; + given(1) { + when (\&bar) { + pass("bar matches 1"); } - 1; -END - } else { - is (eval <<'END', 1, 'switch compiles') or diag $@; - use experimental 'switch'; - sub bar { 1 }; - given(1) { - whereso (\&bar) { - pass("bar matches 1"); - } + default { fail("bar matches 1"); } - 1; -END } + 1; +END } if ($] >= 5.010001) { is (eval <<'END', 1, 'smartmatch compiles') or diag $@; use experimental 'smartmatch'; - { package Baz; use overload "~~" => sub { 1 }; } - is(1 ~~ bless({}, "Baz"), 1, "is 1"); + sub baz { 1 }; + is(1 ~~ \&baz, 1, "is 1"); 1; END } diff --git a/gnu/usr.bin/perl/cpan/libnet/Makefile.PL b/gnu/usr.bin/perl/cpan/libnet/Makefile.PL index 73be0a16544..df525269b21 100644 --- a/gnu/usr.bin/perl/cpan/libnet/Makefile.PL +++ b/gnu/usr.bin/perl/cpan/libnet/Makefile.PL @@ -7,7 +7,7 @@ # Makefile creation script. # # COPYRIGHT -# Copyright (C) 2014, 2015 Steve Hay. All rights reserved. +# Copyright (C) 2014-2015, 2020 Steve Hay. All rights reserved. # # LICENCE # This script is free software; you can redistribute it and/or modify it under @@ -66,7 +66,7 @@ MAIN: { ABSTRACT => 'Collection of network protocol modules', AUTHOR => 'Graham Barr , Steve Hay ', LICENSE => 'perl_5', - VERSION => '3.11', + VERSION => '3.13', META_MERGE => { 'meta-spec' => { @@ -76,7 +76,7 @@ MAIN: { resources => { repository => { type => 'git', - url => 'https://github.com/steve-m-hay/perl-libnet.git' + web => 'https://github.com/steve-m-hay/perl-libnet' } }, diff --git a/gnu/usr.bin/perl/cpan/libnet/lib/Net/Cmd.pm b/gnu/usr.bin/perl/cpan/libnet/lib/Net/Cmd.pm index b695f64dd05..b8dc7289377 100644 --- a/gnu/usr.bin/perl/cpan/libnet/lib/Net/Cmd.pm +++ b/gnu/usr.bin/perl/cpan/libnet/lib/Net/Cmd.pm @@ -1,7 +1,7 @@ # Net::Cmd.pm # # Copyright (C) 1995-2006 Graham Barr. All rights reserved. -# Copyright (C) 2013-2016 Steve Hay. All rights reserved. +# Copyright (C) 2013-2016, 2020 Steve Hay. All rights reserved. # This module is free software; you can redistribute it and/or modify it under # the same terms as Perl itself, i.e. under the terms of either the GNU General # Public License or the Artistic License, as specified in the F file. @@ -19,14 +19,14 @@ use Symbol 'gensym'; use Errno 'EINTR'; BEGIN { - if ($^O eq 'os390') { + if (ord "A" == 193) { require Convert::EBCDIC; # Convert::EBCDIC->import; } } -our $VERSION = "3.11"; +our $VERSION = "3.14"; our @ISA = qw(Exporter); our @EXPORT = qw(CMD_INFO CMD_OK CMD_MORE CMD_REJECT CMD_ERROR CMD_PENDING); @@ -41,7 +41,7 @@ use constant DEF_REPLY_CODE => 421; my %debug = (); -my $tr = $^O eq 'os390' ? Convert::EBCDIC->new() : undef; +my $tr = ord "A" == 193 ? Convert::EBCDIC->new() : undef; sub toebcdic { my $cmd = shift; @@ -100,7 +100,7 @@ sub _print_isa { sub debug { - @_ == 1 or @_ == 2 or croak 'usage: $obj->debug([LEVEL])'; + @_ == 1 or @_ == 2 or croak 'usage: $obj->debug([$level])'; my ($cmd, $level) = @_; my $pkg = ref($cmd) || $cmd; @@ -175,7 +175,7 @@ sub status { sub set_status { - @_ == 3 or croak 'usage: $obj->set_status(CODE, MESSAGE)'; + @_ == 3 or croak 'usage: $obj->set_status($code, $resp)'; my $cmd = shift; my ($code, $resp) = @_; @@ -661,59 +661,59 @@ C, C or C) then you must provide the following methods by other means yourself: C and C. -=head1 USER METHODS +=head2 Public Methods These methods provide a user interface to the C object. =over 4 -=item debug ( VALUE ) +=item C -Set the level of debug information for this object. If C is not given +Set the level of debug information for this object. If C<$level> is not given then the current state is returned. Otherwise the state is changed to -C and the previous state returned. +C<$level> and the previous state returned. Different packages may implement different levels of debug but a non-zero value results in copies of all commands and responses also being sent to STDERR. -If C is C then the debug level will be set to the default +If C<$level> is C then the debug level will be set to the default debug level for the class. This method can also be called as a I method to set/get the default debug level for a given class. -=item message () +=item C Returns the text message returned from the last command. In a scalar context it returns a single string, in a list context it will return each line as a separate element. (See L below.) -=item code () +=item C Returns the 3-digit code from the last command. If a command is pending then the value 0 is returned. (See L below.) -=item ok () +=item C Returns non-zero if the last code value was greater than zero and less than 400. This holds true for most command servers. Servers where this does not hold may override this method. -=item status () +=item C Returns the most significant digit of the current status code. If a command is pending then C is returned. -=item datasend ( DATA ) +=item C Send data to the remote server, converting LF to CRLF. Any line starting with a '.' will be prefixed with another '.'. -C may be an array or a reference to an array. -The C passed in must be encoded by the caller to octets of whatever +C<$data> may be an array or a reference to an array. +The C<$data> passed in must be encoded by the caller to octets of whatever encoding is required, e.g. by using the Encode module's C function. -=item dataend () +=item C End the sending of data to the remote server. This is done by ensuring that the data already sent ends with CRLF then sending '.CRLF' to end the @@ -722,28 +722,28 @@ returns true if C returns CMD_OK. =back -=head1 CLASS METHODS +=head2 Protected Methods These methods are not intended to be called by the user, but used or over-ridden by a sub-class of C =over 4 -=item debug_print ( DIR, TEXT ) +=item C -Print debugging information. C denotes the direction I being +Print debugging information. C<$dir> denotes the direction I being data being sent to the server. Calls C before printing to STDERR. -=item debug_text ( DIR, TEXT ) +=item C -This method is called to print debugging information. TEXT is +This method is called to print debugging information. C<$text> is the text being sent. The method should return the text to be printed. This is primarily meant for the use of modules such as FTP where passwords are sent, but we do not want to display them in the debugging information. -=item command ( CMD [, ARGS, ... ]) +=item C Send a command to the command server. All arguments are first joined with a space character and CRLF is appended, this string is then sent to the @@ -751,24 +751,24 @@ command server. Returns undef upon failure. -=item unsupported () +=item C Sets the status code to 580 and the response text to 'Unsupported command'. Returns zero. -=item response () +=item C Obtain a response from the server. Upon success the most significant digit of the status code is returned. Upon failure, timeout etc., I is returned. -=item parse_response ( TEXT ) +=item C This method is called by C as a method with one argument. It should return an array of 2 values, the 3-digit status code and a flag which is true when this is part of a multi-line response and this line is not the last. -=item getline () +=item C Retrieve one line, delimited by CRLF, from the remote server. Returns I upon failure. @@ -776,26 +776,26 @@ upon failure. B: If you do use this method for any reason, please remember to add some C calls into your method. -=item ungetline ( TEXT ) +=item C Unget a line of text from the server. -=item rawdatasend ( DATA ) +=item C -Send data to the remote server without performing any conversions. C +Send data to the remote server without performing any conversions. C<$data> is a scalar. -As with C, the C passed in must be encoded by the caller +As with C, the C<$data> passed in must be encoded by the caller to octets of whatever encoding is required, e.g. by using the Encode module's C function. -=item read_until_dot () +=item C Read data from the remote server until a line consisting of a single '.'. Any lines starting with '..' will have one of the '.'s removed. Returns a reference to a list containing the lines, or I upon failure. -=item tied_fh () +=item C Returns a filehandle tied to the Net::Cmd object. After issuing a command, you may read from this filehandle using read() or <>. The @@ -807,7 +807,7 @@ See the Net::POP3 and Net::SMTP modules for examples of this. =back -=head1 PSEUDO RESPONSES +=head2 Pseudo Responses Normally the values returned by C and C are obtained from the remote server, but in a few circumstances, as @@ -847,22 +847,47 @@ or otherwise trap this error. =head1 EXPORTS -C exports six subroutines, five of these, C, C, -C, C and C, correspond to possible results -of C and C. The sixth is C. +The following symbols are, or can be, exported by this module: + +=over 4 + +=item Default Exports + +C, +C, +C, +C, +C, +C. + +(These correspond to possible results of C and C.) + +=item Optional Exports + +I. + +=item Export Tags + +I. + +=back + +=head1 KNOWN BUGS + +See L. =head1 AUTHOR -Graham Barr EFE. +Graham Barr ELE. -Steve Hay EFE is now maintaining libnet as of version -1.22_02. +Steve Hay ELE is now maintaining +libnet as of version 1.22_02. =head1 COPYRIGHT Copyright (C) 1995-2006 Graham Barr. All rights reserved. -Copyright (C) 2013-2016 Steve Hay. All rights reserved. +Copyright (C) 2013-2016, 2020 Steve Hay. All rights reserved. =head1 LICENCE @@ -870,4 +895,16 @@ This module is free software; you can redistribute it and/or modify it under the same terms as Perl itself, i.e. under the terms of either the GNU General Public License or the Artistic License, as specified in the F file. +=head1 VERSION + +Version 3.14 + +=head1 DATE + +23 Dec 2020 + +=head1 HISTORY + +See the F file. + =cut diff --git a/gnu/usr.bin/perl/cpan/libnet/lib/Net/Config.pm b/gnu/usr.bin/perl/cpan/libnet/lib/Net/Config.pm index 4f822a40a45..b9eb82792bc 100644 --- a/gnu/usr.bin/perl/cpan/libnet/lib/Net/Config.pm +++ b/gnu/usr.bin/perl/cpan/libnet/lib/Net/Config.pm @@ -1,7 +1,7 @@ # Net::Config.pm # # Copyright (C) 2000 Graham Barr. All rights reserved. -# Copyright (C) 2013-2014, 2016 Steve Hay. All rights reserved. +# Copyright (C) 2013-2014, 2016, 2020 Steve Hay. All rights reserved. # This module is free software; you can redistribute it and/or modify it under # the same terms as Perl itself, i.e. under the terms of either the GNU General # Public License or the Artistic License, as specified in the F file. @@ -18,7 +18,7 @@ use Socket qw(inet_aton inet_ntoa); our @EXPORT = qw(%NetConfig); our @ISA = qw(Net::LocalCfg Exporter); -our $VERSION = "3.11"; +our $VERSION = "3.14"; our($CONFIGURE, $LIBNET_CFG); @@ -159,7 +159,7 @@ For example } __END__ -=head1 METHODS +=head2 Class Methods C defines the following methods. They are methods as they are invoked as class methods. This is because C inherits from @@ -167,7 +167,7 @@ C so you can override these methods if you want. =over 4 -=item requires_firewall ( HOST ) +=item C Attempts to determine if a given host is outside your firewall. Possible return values are. @@ -181,7 +181,7 @@ the configuration data. =back -=head1 NetConfig VALUES +=head2 NetConfig Values =over 4 @@ -323,18 +323,42 @@ If true then C will check each hostname given that it exists =back +=head1 EXPORTS + +The following symbols are, or can be, exported by this module: + +=over 4 + +=item Default Exports + +C<%NetConfig>. + +=item Optional Exports + +I. + +=item Export Tags + +I. + +=back + +=head1 KNOWN BUGS + +I. + =head1 AUTHOR -Graham Barr EFE. +Graham Barr ELE. -Steve Hay EFE is now maintaining libnet as of version -1.22_02. +Steve Hay ELE is now maintaining +libnet as of version 1.22_02. =head1 COPYRIGHT -Copyright (C) 1998-2011 Graham Barr. All rights reserved. +Copyright (C) 2000 Graham Barr. All rights reserved. -Copyright (C) 2013-2014, 2016 Steve Hay. All rights reserved. +Copyright (C) 2013-2014, 2016, 2020 Steve Hay. All rights reserved. =head1 LICENCE @@ -342,4 +366,16 @@ This module is free software; you can redistribute it and/or modify it under the same terms as Perl itself, i.e. under the terms of either the GNU General Public License or the Artistic License, as specified in the F file. +=head1 VERSION + +Version 3.14 + +=head1 DATE + +23 Dec 2020 + +=head1 HISTORY + +See the F file. + =cut diff --git a/gnu/usr.bin/perl/cpan/libnet/lib/Net/Domain.pm b/gnu/usr.bin/perl/cpan/libnet/lib/Net/Domain.pm index 556cc159807..7c017f24357 100644 --- a/gnu/usr.bin/perl/cpan/libnet/lib/Net/Domain.pm +++ b/gnu/usr.bin/perl/cpan/libnet/lib/Net/Domain.pm @@ -1,7 +1,7 @@ # Net::Domain.pm # # Copyright (C) 1995-1998 Graham Barr. All rights reserved. -# Copyright (C) 2013-2014 Steve Hay. All rights reserved. +# Copyright (C) 2013-2014, 2020 Steve Hay. All rights reserved. # This module is free software; you can redistribute it and/or modify it under # the same terms as Perl itself, i.e. under the terms of either the GNU General # Public License or the Artistic License, as specified in the F file. @@ -19,7 +19,7 @@ use Net::Config; our @ISA = qw(Exporter); our @EXPORT_OK = qw(hostname hostdomain hostfqdn domainname); -our $VERSION = "3.11"; +our $VERSION = "3.14"; my ($host, $domain, $fqdn) = (undef, undef, undef); @@ -321,40 +321,71 @@ of the current host. From this determine the host-name and the host-domain. Each of the functions will return I if the FQDN cannot be determined. +=head2 Functions + =over 4 -=item hostfqdn () +=item C Identify and return the FQDN of the current host. -=item domainname () +=item C -An alias for hostfqdn (). +An alias for hostfqdn(). -=item hostname () +=item C Returns the smallest part of the FQDN which can be used to identify the host. -=item hostdomain () +=item C Returns the remainder of the FQDN after the I has been removed. =back +=head1 EXPORTS + +The following symbols are, or can be, exported by this module: + +=over 4 + +=item Default Exports + +I. + +=item Optional Exports + +C, +C, +C, +C. + +=item Export Tags + +I. + +=back + + +=head1 KNOWN BUGS + +See L. + =head1 AUTHOR -Graham Barr EFE. +Graham Barr ELE. -Adapted from Sys::Hostname by David Sundstrom EFE. +Adapted from Sys::Hostname by David Sundstrom +ELE. -Steve Hay EFE is now maintaining libnet as of version -1.22_02. +Steve Hay ELE is now maintaining +libnet as of version 1.22_02. =head1 COPYRIGHT Copyright (C) 1995-1998 Graham Barr. All rights reserved. -Copyright (C) 2013-2014 Steve Hay. All rights reserved. +Copyright (C) 2013-2014, 2020 Steve Hay. All rights reserved. =head1 LICENCE @@ -362,4 +393,16 @@ This module is free software; you can redistribute it and/or modify it under the same terms as Perl itself, i.e. under the terms of either the GNU General Public License or the Artistic License, as specified in the F file. +=head1 VERSION + +Version 3.14 + +=head1 DATE + +23 Dec 2020 + +=head1 HISTORY + +See the F file. + =cut diff --git a/gnu/usr.bin/perl/cpan/libnet/lib/Net/FTP.pm b/gnu/usr.bin/perl/cpan/libnet/lib/Net/FTP.pm index 14153be0d0c..b6b220df1f3 100644 --- a/gnu/usr.bin/perl/cpan/libnet/lib/Net/FTP.pm +++ b/gnu/usr.bin/perl/cpan/libnet/lib/Net/FTP.pm @@ -1,7 +1,7 @@ # Net::FTP.pm # # Copyright (C) 1995-2004 Graham Barr. All rights reserved. -# Copyright (C) 2013-2017 Steve Hay. All rights reserved. +# Copyright (C) 2013-2017, 2020 Steve Hay. All rights reserved. # This module is free software; you can redistribute it and/or modify it under # the same terms as Perl itself, i.e. under the terms of either the GNU General # Public License or the Artistic License, as specified in the F file. @@ -23,7 +23,7 @@ use Net::Config; use Socket; use Time::Local; -our $VERSION = '3.11'; +our $VERSION = '3.14'; our $IOCLASS; my $family_key; @@ -66,7 +66,7 @@ use constant TELNET_IAC => 255; use constant TELNET_IP => 244; use constant TELNET_DM => 242; -use constant EBCDIC => $^O eq 'os390'; +use constant EBCDIC => ord 'A' == 193; sub new { my $pkg = shift; @@ -110,10 +110,13 @@ sub new { # use SNI if supported by IO::Socket::SSL $pkg->can_client_sni ? (SSL_hostname => $hostname):(), # reuse SSL session of control connection in data connections - SSL_session_cache => Net::FTP::_SSL_SingleSessionCache->new, + SSL_session_cache_size => 10, + SSL_session_key => $hostname, ); # user defined SSL arg $tlsargs{$_} = $arg{$_} for(grep { m{^SSL_} } keys %arg); + $tlsargs{SSL_reuse_ctx} = IO::Socket::SSL::SSL_Context->new(%tlsargs) + or return; } elsif ($arg{SSL}) { croak("IO::Socket::SSL >= 2.007 needed for SSL support"); @@ -262,7 +265,7 @@ sub mdtm { $ftp->_MDTM($file) && $ftp->message =~ /((\d\d)(\d\d\d?))(\d\d)(\d\d)(\d\d)(\d\d)(\d\d)/ - ? timegm($8, $7, $6, $5, $4 - 1, $2 eq '19' ? $3 : ($1 - 1900)) + ? timegm($8, $7, $6, $5, $4 - 1, $2 eq '19' ? ($3 + 1900) : $1) : undef; } @@ -426,7 +429,7 @@ sub login { sub account { - @_ == 2 or croak 'usage: $ftp->account( ACCT )'; + @_ == 2 or croak 'usage: $ftp->account($acct)'; my $ftp = shift; my $acct = shift; $ftp->_ACCT($acct) == CMD_OK; @@ -452,7 +455,7 @@ sub _auth_id { sub authorize { - @_ >= 1 || @_ <= 3 or croak 'usage: $ftp->authorize( [AUTH [, RESP]])'; + @_ >= 1 || @_ <= 3 or croak 'usage: $ftp->authorize([$auth[, $resp]])'; my ($ftp, $auth, $resp) = &_auth_id; @@ -466,12 +469,12 @@ sub authorize { sub rename { - @_ == 3 or croak 'usage: $ftp->rename(FROM, TO)'; + @_ == 3 or croak 'usage: $ftp->rename($oldname, $newname)'; - my ($ftp, $from, $to) = @_; + my ($ftp, $oldname, $newname) = @_; - $ftp->_RNFR($from) - && $ftp->_RNTO($to); + $ftp->_RNFR($oldname) + && $ftp->_RNTO($newname); } @@ -619,7 +622,7 @@ sub get { sub cwd { - @_ == 1 || @_ == 2 or croak 'usage: $ftp->cwd( [ DIR ] )'; + @_ == 1 || @_ == 2 or croak 'usage: $ftp->cwd([$dir])'; my ($ftp, $dir) = @_; @@ -656,7 +659,7 @@ sub pwd { # Initial version contributed by Dinkum Software # sub rmdir { - @_ == 2 || @_ == 3 or croak('usage: $ftp->rmdir( DIR [, RECURSE ] )'); + @_ == 2 || @_ == 3 or croak('usage: $ftp->rmdir($dir[, $recurse])'); # Pick off the args my ($ftp, $dir, $recurse) = @_; @@ -702,7 +705,7 @@ sub rmdir { sub restart { - @_ == 2 || croak 'usage: $ftp->restart( BYTE_OFFSET )'; + @_ == 2 || croak 'usage: $ftp->restart($where)'; my ($ftp, $where) = @_; @@ -713,7 +716,7 @@ sub restart { sub mkdir { - @_ == 2 || @_ == 3 or croak 'usage: $ftp->mkdir( DIR [, RECURSE ] )'; + @_ == 2 || @_ == 3 or croak 'usage: $ftp->mkdir($dir[, $recurse])'; my ($ftp, $dir, $recurse) = @_; @@ -758,7 +761,7 @@ sub mkdir { sub delete { - @_ == 2 || croak 'usage: $ftp->delete( FILENAME )'; + @_ == 2 || croak 'usage: $ftp->delete($filename)'; $_[0]->_DELE($_[1]); } @@ -881,12 +884,12 @@ sub _store_cmd { sub port { - @_ == 1 || @_ == 2 or croak 'usage: $self->port([PORT])'; + @_ == 1 || @_ == 2 or croak 'usage: $self->port([$port])'; return _eprt('PORT',@_); } sub eprt { - @_ == 1 || @_ == 2 or croak 'usage: $self->eprt([PORT])'; + @_ == 1 || @_ == 2 or croak 'usage: $self->eprt([$port])'; return _eprt('EPRT',@_); } @@ -959,7 +962,7 @@ sub unique_name { sub supported { - @_ == 2 or croak 'usage: $ftp->supported( CMD )'; + @_ == 2 or croak 'usage: $ftp->supported($cmd)'; my $ftp = shift; my $cmd = uc shift; my $hash = ${*$ftp}{'net_ftp_supported'} ||= {}; @@ -1282,36 +1285,36 @@ sub pasv_xfer { sub pasv_wait { - @_ == 2 or croak 'usage: $ftp->pasv_wait(NON_PASV_FTP)'; + @_ == 2 or croak 'usage: $ftp->pasv_wait($non_pasv_server)'; - my ($ftp, $non_pasv) = @_; + my ($ftp, $non_pasv_server) = @_; my ($file, $rin, $rout); vec($rin = '', fileno($ftp), 1) = 1; select($rout = $rin, undef, undef, undef); my $dres = $ftp->response(); - my $sres = $non_pasv->response(); + my $sres = $non_pasv_server->response(); return unless $dres == CMD_OK && $sres == CMD_OK; return - unless $ftp->ok() && $non_pasv->ok(); + unless $ftp->ok() && $non_pasv_server->ok(); return $1 if $ftp->message =~ /unique file name:\s*(\S*)\s*\)/; return $1 - if $non_pasv->message =~ /unique file name:\s*(\S*)\s*\)/; + if $non_pasv_server->message =~ /unique file name:\s*(\S*)\s*\)/; return 1; } sub feature { - @_ == 2 or croak 'usage: $ftp->feature( NAME )'; - my ($ftp, $feat) = @_; + @_ == 2 or croak 'usage: $ftp->feature($name)'; + my ($ftp, $name) = @_; my $feature = ${*$ftp}{net_ftp_feature} ||= do { my @feat; @@ -1329,7 +1332,7 @@ sub feature { \@feat; }; - return grep { /^\Q$feat\E\b/i } @$feature; + return grep { /^\Q$name\E\b/i } @$feature; } @@ -1397,25 +1400,6 @@ sub _SYST { shift->unsupported(@_) } sub _STRU { shift->unsupported(@_) } sub _REIN { shift->unsupported(@_) } -{ - # Session Cache with single entry - # used to make sure that we reuse same session for control and data channels - package Net::FTP::_SSL_SingleSessionCache; - sub new { my $x; return bless \$x,shift } - sub add_session { - my ($cache,$key,$session) = @_; - Net::SSLeay::SESSION_free($$cache) if $$cache; - $$cache = $session; - } - sub get_session { - my $cache = shift; - return $$cache - } - sub DESTROY { - my $cache = shift; - Net::SSLeay::SESSION_free($$cache) if $$cache; - } -} 1; @@ -1456,7 +1440,7 @@ and explicit FTPS as defined in RFC4217. The Net::FTP class is a subclass of Net::Cmd and (depending on avaibility) of IO::Socket::IP, IO::Socket::INET6 or IO::Socket::INET. -=head1 OVERVIEW +=head2 Overview FTP stands for File Transfer Protocol. It is a way of transferring files between networked machines. The protocol defines a client @@ -1487,19 +1471,19 @@ this if you really know what you're doing). This class does not support the EBCDIC or byte formats, and will default to binary instead if they are attempted. -=head1 CONSTRUCTOR +=head2 Class Methods =over 4 -=item new ([ HOST ] [, OPTIONS ]) +=item C -This is the constructor for a new Net::FTP object. C is the +This is the constructor for a new Net::FTP object. C<$host> is the name of the remote host to which an FTP connection is required. -C is optional. If C is not given then it may instead be +C<$host> is optional. If C<$host> is not given then it may instead be passed as the C option described below. -C are passed in a hash like fashion, using key and value pairs. +C<%options> are passed in a hash like fashion, using key and value pairs. Possible options are: B - FTP host to connect to. It may be a single scalar, as defined for @@ -1570,7 +1554,7 @@ be in $@ =back -=head1 METHODS +=head2 Object Methods Unless otherwise stated all methods return either a I or I value, with I meaning that the operation was a success. When a method @@ -1583,7 +1567,7 @@ documented here. =over 4 -=item login ([LOGIN [,PASSWORD [, ACCOUNT] ] ]) +=item C Log into the remote FTP server with the given login information. If no arguments are given then the C uses the C @@ -1595,114 +1579,114 @@ will be used for password. If the connection is via a firewall then the C method will be called with no arguments. -=item starttls () +=item C Upgrade existing plain connection to SSL. The SSL arguments have to be given in C already because they are needed for data connections too. -=item stoptls () +=item C Downgrade existing SSL connection back to plain. This is needed to work with some FTP helpers at firewalls, which need to see the PORT and PASV commands and responses to dynamically open the necessary ports. In this case C is usually only done to protect the authorization. -=item prot ( LEVEL ) +=item C Set what type of data channel protection the client and server will be using. -Only Cs "C" (clear) and "P" (private) are supported. +Only C<$level>s "C" (clear) and "P" (private) are supported. -=item host () +=item C Returns the value used by the constructor, and passed to the IO::Socket super class to connect to the host. -=item account( ACCT ) +=item C Set a string identifying the user's account. -=item authorize ( [AUTH [, RESP]]) +=item C This is a protocol used by some firewall ftp proxies. It is used to authorise the user to send data out. If both arguments are not specified then C uses C to do a lookup. -=item site (ARGS) +=item C Send a SITE command to the remote server and wait for a response. Returns most significant digit of the response code. -=item ascii () +=item C Transfer file in ASCII. CRLF translation will be done if required -=item binary () +=item C Transfer file in binary mode. No transformation will be done. B: If both server and client machines use the same line ending for text files, then it will be faster to transfer all files in binary mode. -=item type ( [ TYPE ] ) +=item C Set or get if files will be transferred in ASCII or binary mode. -=item rename ( OLDNAME, NEWNAME ) +=item C -Rename a file on the remote FTP server from C to C. This +Rename a file on the remote FTP server from C<$oldname> to C<$newname>. This is done by sending the RNFR and RNTO commands. -=item delete ( FILENAME ) +=item C -Send a request to the server to delete C. +Send a request to the server to delete C<$filename>. -=item cwd ( [ DIR ] ) +=item C Attempt to change directory to the directory given in C<$dir>. If C<$dir> is C<"..">, the FTP C command is used to attempt to move up one directory. If no directory is given then an attempt is made to change the directory to the root directory. -=item cdup () +=item C Change directory to the parent of the current directory. -=item passive ( [ PASSIVE ] ) +=item C Set or get if data connections will be initiated in passive mode. -=item pwd () +=item C Returns the full pathname of the current directory. -=item restart ( WHERE ) +=item C Set the byte offset at which to begin the next data transfer. Net::FTP simply records this value and uses it when during the next data transfer. For this reason this method will not return an error, but setting it may cause a subsequent data transfer to fail. -=item rmdir ( DIR [, RECURSE ]) +=item C -Remove the directory with the name C. If C is I then +Remove the directory with the name C<$dir>. If C<$recurse> is I then C will attempt to delete everything inside the directory. -=item mkdir ( DIR [, RECURSE ]) +=item C -Create a new directory with the name C. If C is I then +Create a new directory with the name C<$dir>. If C<$recurse> is I then C will attempt to create all the directories in the given path. Returns the full pathname to the new directory. -=item alloc ( SIZE [, RECORD_SIZE] ) +=item C The alloc command allows you to give the ftp server a hint about the size of the file about to be transferred using the ALLO ftp command. Some storage systems use this to make intelligent decisions about how to store the file. -The C argument represents the size of the file in bytes. The -C argument indicates a maximum record or page size for files +The C<$size> argument represents the size of the file in bytes. The +C<$record_size> argument indicates a maximum record or page size for files sent with a record or page structure. The size of the file will be determined, and sent to the server @@ -1710,70 +1694,70 @@ automatically for normal files so that this method need only be called if you are transferring data from a socket, named pipe, or other stream not associated with a normal file. -=item ls ( [ DIR ] ) +=item C -Get a directory listing of C, or the current directory. +Get a directory listing of C<$dir>, or the current directory. In an array context, returns a list of lines returned from the server. In a scalar context, returns a reference to a list. -=item dir ( [ DIR ] ) +=item C -Get a directory listing of C, or the current directory in long format. +Get a directory listing of C<$dir>, or the current directory in long format. In an array context, returns a list of lines returned from the server. In a scalar context, returns a reference to a list. -=item get ( REMOTE_FILE [, LOCAL_FILE [, WHERE]] ) +=item C -Get C from the server and store locally. C may be +Get C<$remote_file> from the server and store locally. C<$local_file> may be a filename or a filehandle. If not specified, the file will be stored in the current directory with the same leafname as the remote file. -If C is given then the first C bytes of the file will +If C<$where> is given then the first C<$where> bytes of the file will not be transferred, and the remaining bytes will be appended to the local file if it already exists. -Returns C, or the generated local file name if C +Returns C<$local_file>, or the generated local file name if C<$local_file> is not given. If an error was encountered undef is returned. -=item put ( LOCAL_FILE [, REMOTE_FILE ] ) +=item C -Put a file on the remote server. C may be a name or a filehandle. -If C is a filehandle then C must be specified. If -C is not specified then the file will be stored in the current -directory with the same leafname as C. +Put a file on the remote server. C<$local_file> may be a name or a filehandle. +If C<$local_file> is a filehandle then C<$remote_file> must be specified. If +C<$remote_file> is not specified then the file will be stored in the current +directory with the same leafname as C<$local_file>. -Returns C, or the generated remote filename if C +Returns C<$remote_file>, or the generated remote filename if C<$remote_file> is not given. B: If for some reason the transfer does not complete and an error is returned then the contents that had been transferred will not be remove automatically. -=item put_unique ( LOCAL_FILE [, REMOTE_FILE ] ) +=item C Same as put but uses the C command. Returns the name of the file on the server. -=item append ( LOCAL_FILE [, REMOTE_FILE ] ) +=item C Same as put but appends to the file on the remote server. -Returns C, or the generated remote filename if C +Returns C<$remote_file>, or the generated remote filename if C<$remote_file> is not given. -=item unique_name () +=item C Returns the name of the last file stored on the server using the C command. -=item mdtm ( FILE ) +=item C Returns the I of the given file -=item size ( FILE ) +=item C Returns the size in bytes for the given file as stored on the remote server. @@ -1783,11 +1767,11 @@ and the remote server and local machine have different ideas about "End Of Line" then the size of file on the local machine after transfer may be different. -=item supported ( CMD ) +=item C Returns TRUE if the remote server supports the given command. -=item hash ( [FILEHANDLE_GLOB_REF],[ BYTES_PER_HASH_MARK] ) +=item C Called without parameters, or with the first argument false, hash marks are suppressed. If the first argument is true but not a reference to a @@ -1796,7 +1780,7 @@ of bytes per hash mark printed, and defaults to 1024. In all cases the return value is a reference to an array of two: the filehandle glob reference and the bytes per hash mark. -=item feature ( NAME ) +=item C Determine if the server supports the specified feature. The return value is a list of lines the server responded with to describe the @@ -1822,33 +1806,33 @@ reference to a C based object. =over 4 -=item nlst ( [ DIR ] ) +=item C Send an C command to the server, with an optional parameter. -=item list ( [ DIR ] ) +=item C Same as C but using the C command -=item retr ( FILE ) +=item C -Begin the retrieval of a file called C from the remote server. +Begin the retrieval of a file called C<$file> from the remote server. -=item stor ( FILE ) +=item C -Tell the server that you wish to store a file. C is the +Tell the server that you wish to store a file. C<$file> is the name of the new file that should be created. -=item stou ( FILE ) +=item C Same as C but using the C command. The name of the unique file which was created on the server will be available via the C method after the data connection has been closed. -=item appe ( FILE ) +=item C Tell the server that we want to append some data to the end of a file -called C. If this file does not exist then create it. +called C<$file>. If this file does not exist then create it. =back @@ -1862,17 +1846,17 @@ C and those that do not require data connections. =over 4 -=item port ( [ PORT ] ) +=item C -=item eprt ( [ PORT ] ) +=item C -Send a C (IPv4) or C (IPv6) command to the server. If C is +Send a C (IPv4) or C (IPv6) command to the server. If C<$port> is specified then it is sent to the server. If not, then a listen socket is created and the correct information sent to the server. -=item pasv () +=item C -=item epsv () +=item C Tell the server to go into passive mode (C for IPv4, C for IPv6). Returns the text that represents the port on which the server is listening, this @@ -1886,38 +1870,38 @@ servers, providing that these two servers can connect directly to each other. =over 4 -=item pasv_xfer ( SRC_FILE, DEST_SERVER [, DEST_FILE ] ) +=item C This method will do a file transfer between two remote ftp servers. If -C is omitted then the leaf name of C will be used. +C<$dest_file> is omitted then the leaf name of C<$src_file> will be used. -=item pasv_xfer_unique ( SRC_FILE, DEST_SERVER [, DEST_FILE ] ) +=item C Like C but the file is stored on the remote server using the STOU command. -=item pasv_wait ( NON_PASV_SERVER ) +=item C This method can be used to wait for a transfer to complete between a passive server and a non-passive server. The method should be called on the passive server with the C object for the non-passive server passed as an argument. -=item abort () +=item C Abort the current data transfer. -=item quit () +=item C Send the QUIT command to the remote FTP server and close the socket connection. =back -=head2 Methods for the adventurous +=head2 Methods for the Adventurous =over 4 -=item quot (CMD [,ARGS]) +=item C Send a command, that Net::FTP does not directly support, to the remote server and wait for a response. @@ -1927,62 +1911,83 @@ Returns most significant digit of the response code. B This call should only be used on commands that do not require data connections. Misuse of this method can hang the connection. -=item can_inet6 () +=item C Returns whether we can use IPv6. -=item can_ssl () +=item C Returns whether we can use SSL. =back -=head1 THE dataconn CLASS +=head2 The dataconn Class Some of the methods defined in C return an object which will be derived from the C class. See L for more details. -=head1 UNIMPLEMENTED +=head2 Unimplemented The following RFC959 commands have not been implemented: =over 4 -=item B +=item C Mount a different file system structure without changing login or accounting information. -=item B +=item C Ask the server for "helpful information" (that's what the RFC says) on the commands it accepts. -=item B +=item C Specifies transfer mode (stream, block or compressed) for file to be transferred. -=item B +=item C Request remote server system identification. -=item B +=item C Request remote server status. -=item B +=item C Specifies file structure for file to be transferred. -=item B +=item C Reinitialize the connection, flushing all I/O and account information. =back -=head1 REPORTING BUGS +=head1 EXAMPLES + +For an example of the use of Net::FTP see + +=over 4 + +=item L + +C is a program that can retrieve, send, or list files via +the FTP protocol in a non-interactive manner. + +=back + +=head1 EXPORTS + +I. + +=head1 KNOWN BUGS + +See L. + +=head2 Reporting Bugs When reporting bugs/problems please include as much information as possible. It may be difficult for me to reproduce the problem as almost every setup @@ -1994,51 +1999,42 @@ passed to the constructor, and the output sent with the bug report. If you cannot include a small script then please include a Debug trace from a run of your program which does yield the problem. -=head1 AUTHOR - -Graham Barr EFE. - -Steve Hay EFE is now maintaining libnet as of version -1.22_02. - =head1 SEE ALSO L, L, -L +L; -ftp(1), ftpd(8), RFC 959, RFC 2428, RFC 4217 -http://www.ietf.org/rfc/rfc959.txt -http://www.ietf.org/rfc/rfc2428.txt -http://www.ietf.org/rfc/rfc4217.txt +L, +L; -=head1 USE EXAMPLES +L, +L, +L. -For an example of the use of Net::FTP see +=head1 ACKNOWLEDGEMENTS -=over 4 +Henry Gabryjelski ELE - for the +suggestion of creating directories recursively. -=item http://www.csh.rit.edu/~adam/Progs/ +Nathan Torkington ELE - for some +input on the documentation. -C is a program that can retrieve, send, or list files via -the FTP protocol in a non-interactive manner. +Roderick Schertler ELE - for +various inputs -=back - -=head1 CREDITS - -Henry Gabryjelski - for the suggestion of creating directories -recursively. +=head1 AUTHOR -Nathan Torkington - for some input on the documentation. +Graham Barr ELE. -Roderick Schertler - for various inputs +Steve Hay ELE is now maintaining +libnet as of version 1.22_02. =head1 COPYRIGHT Copyright (C) 1995-2004 Graham Barr. All rights reserved. -Copyright (C) 2013-2017 Steve Hay. All rights reserved. +Copyright (C) 2013-2017, 2020 Steve Hay. All rights reserved. =head1 LICENCE @@ -2046,4 +2042,16 @@ This module is free software; you can redistribute it and/or modify it under the same terms as Perl itself, i.e. under the terms of either the GNU General Public License or the Artistic License, as specified in the F file. +=head1 VERSION + +Version 3.14 + +=head1 DATE + +23 Dec 2020 + +=head1 HISTORY + +See the F file. + =cut diff --git a/gnu/usr.bin/perl/cpan/libnet/lib/Net/FTP/A.pm b/gnu/usr.bin/perl/cpan/libnet/lib/Net/FTP/A.pm index 0ea1ba2fbd2..1ea48310237 100644 --- a/gnu/usr.bin/perl/cpan/libnet/lib/Net/FTP/A.pm +++ b/gnu/usr.bin/perl/cpan/libnet/lib/Net/FTP/A.pm @@ -13,7 +13,7 @@ use Carp; use Net::FTP::dataconn; our @ISA = qw(Net::FTP::dataconn); -our $VERSION = "3.11"; +our $VERSION = "3.14"; our $buf; diff --git a/gnu/usr.bin/perl/cpan/libnet/lib/Net/FTP/E.pm b/gnu/usr.bin/perl/cpan/libnet/lib/Net/FTP/E.pm index 30b371a58b1..7b8c2ea8b13 100644 --- a/gnu/usr.bin/perl/cpan/libnet/lib/Net/FTP/E.pm +++ b/gnu/usr.bin/perl/cpan/libnet/lib/Net/FTP/E.pm @@ -8,6 +8,6 @@ use warnings; use Net::FTP::I; our @ISA = qw(Net::FTP::I); -our $VERSION = "3.11"; +our $VERSION = "3.14"; 1; diff --git a/gnu/usr.bin/perl/cpan/libnet/lib/Net/FTP/I.pm b/gnu/usr.bin/perl/cpan/libnet/lib/Net/FTP/I.pm index ec46ab0fdab..afcc51f71e2 100644 --- a/gnu/usr.bin/perl/cpan/libnet/lib/Net/FTP/I.pm +++ b/gnu/usr.bin/perl/cpan/libnet/lib/Net/FTP/I.pm @@ -13,7 +13,7 @@ use Carp; use Net::FTP::dataconn; our @ISA = qw(Net::FTP::dataconn); -our $VERSION = "3.11"; +our $VERSION = "3.14"; our $buf; diff --git a/gnu/usr.bin/perl/cpan/libnet/lib/Net/FTP/L.pm b/gnu/usr.bin/perl/cpan/libnet/lib/Net/FTP/L.pm index d9a88576d99..9dfe4912c94 100644 --- a/gnu/usr.bin/perl/cpan/libnet/lib/Net/FTP/L.pm +++ b/gnu/usr.bin/perl/cpan/libnet/lib/Net/FTP/L.pm @@ -8,6 +8,6 @@ use warnings; use Net::FTP::I; our @ISA = qw(Net::FTP::I); -our $VERSION = "3.11"; +our $VERSION = "3.14"; 1; diff --git a/gnu/usr.bin/perl/cpan/libnet/lib/Net/FTP/dataconn.pm b/gnu/usr.bin/perl/cpan/libnet/lib/Net/FTP/dataconn.pm index 337b0e999bc..979be7c9c28 100644 --- a/gnu/usr.bin/perl/cpan/libnet/lib/Net/FTP/dataconn.pm +++ b/gnu/usr.bin/perl/cpan/libnet/lib/Net/FTP/dataconn.pm @@ -13,7 +13,7 @@ use Carp; use Errno; use Net::Cmd; -our $VERSION = '3.11'; +our $VERSION = '3.14'; $Net::FTP::IOCLASS or die "please load Net::FTP before Net::FTP::dataconn"; our @ISA = $Net::FTP::IOCLASS; @@ -137,6 +137,22 @@ __END__ Net::FTP::dataconn - FTP Client data connection class +=head1 SYNOPSIS + + # Perform IO operations on an FTP client data connection object: + + $num_bytes_read = $obj->read($buffer, $size); + $num_bytes_read = $obj->read($buffer, $size, $timeout); + + $num_bytes_written = $obj->write($buffer, $size); + $num_bytes_written = $obj->write($buffer, $size, $timeout); + + $num_bytes_read_so_far = $obj->bytes_read(); + + $obj->abort(); + + $closed_successfully = $obj->close(); + =head1 DESCRIPTION Some of the methods defined in C return an object which will @@ -147,31 +163,31 @@ be performed using these. =over 4 -=item read ( BUFFER, SIZE [, TIMEOUT ] ) +=item C -Read C bytes of data from the server and place it into C, also -performing any translation necessary. C is optional, if not +Read C<$size> bytes of data from the server and place it into C<$buffer>, also +performing any translation necessary. C<$timeout> is optional, if not given, the timeout value from the command connection will be used. Returns the number of bytes read before any translation. -=item write ( BUFFER, SIZE [, TIMEOUT ] ) +=item C -Write C bytes of data from C to the server, also -performing any translation necessary. C is optional, if not +Write C<$size> bytes of data from C<$buffer> to the server, also +performing any translation necessary. C<$timeout> is optional, if not given, the timeout value from the command connection will be used. Returns the number of bytes written before any translation. -=item bytes_read () +=item C Returns the number of bytes read so far. -=item abort () +=item C Abort the current data transfer. -=item close () +=item C Close the data connection and get a response from the FTP server. Returns I if the connection was closed successfully and the first digit of @@ -179,4 +195,43 @@ the response from the server was a '2'. =back +=head1 EXPORTS + +I. + +=head1 KNOWN BUGS + +I. + +=head1 AUTHOR + +Graham Barr ELE. + +Steve Hay ELE is now maintaining +libnet as of version 1.22_02. + +=head1 COPYRIGHT + +Copyright (C) 1997-2010 Graham Barr. All rights reserved. + +Copyright (C) 2013-2014, 2020 Steve Hay. All rights reserved. + +=head1 LICENCE + +This module is free software; you can redistribute it and/or modify it under the +same terms as Perl itself, i.e. under the terms of either the GNU General Public +License or the Artistic License, as specified in the F file. + +=head1 VERSION + +Version 3.14 + +=head1 DATE + +23 Dec 2020 + +=head1 HISTORY + +See the F file. + =cut diff --git a/gnu/usr.bin/perl/cpan/libnet/lib/Net/NNTP.pm b/gnu/usr.bin/perl/cpan/libnet/lib/Net/NNTP.pm index 0c22930148a..bbdc8843d26 100644 --- a/gnu/usr.bin/perl/cpan/libnet/lib/Net/NNTP.pm +++ b/gnu/usr.bin/perl/cpan/libnet/lib/Net/NNTP.pm @@ -1,7 +1,7 @@ # Net::NNTP.pm # # Copyright (C) 1995-1997 Graham Barr. All rights reserved. -# Copyright (C) 2013-2016 Steve Hay. All rights reserved. +# Copyright (C) 2013-2016, 2020 Steve Hay. All rights reserved. # This module is free software; you can redistribute it and/or modify it under # the same terms as Perl itself, i.e. under the terms of either the GNU General # Public License or the Artistic License, as specified in the F file. @@ -19,7 +19,7 @@ use Net::Cmd; use Net::Config; use Time::Local; -our $VERSION = "3.11"; +our $VERSION = "3.14"; # Code for detecting if we can use SSL my $ssl_class = eval { @@ -96,7 +96,6 @@ sub new { if ($arg{SSL}) { Net::NNTP::_SSL->start_SSL($obj,%arg) or next; } - last: } return @@ -176,7 +175,7 @@ sub starttls { sub article { - @_ >= 1 && @_ <= 3 or croak 'usage: $nntp->article( [ MSGID ], [ FH ] )'; + @_ >= 1 && @_ <= 3 or croak 'usage: $nntp->article([{$msgid|$msgnum}[, $fh]])'; my $nntp = shift; my @fh; @@ -189,7 +188,7 @@ sub article { sub articlefh { - @_ >= 1 && @_ <= 2 or croak 'usage: $nntp->articlefh( [ MSGID ] )'; + @_ >= 1 && @_ <= 2 or croak 'usage: $nntp->articlefh([{$msgid|$msgnum}])'; my $nntp = shift; return unless $nntp->_ARTICLE(@_); @@ -198,7 +197,7 @@ sub articlefh { sub authinfo { - @_ == 3 or croak 'usage: $nntp->authinfo( USER, PASS )'; + @_ == 3 or croak 'usage: $nntp->authinfo($user, $pass)'; my ($nntp, $user, $pass) = @_; $nntp->_AUTHINFO("USER", $user) == CMD_MORE @@ -207,7 +206,7 @@ sub authinfo { sub authinfo_simple { - @_ == 3 or croak 'usage: $nntp->authinfo( USER, PASS )'; + @_ == 3 or croak 'usage: $nntp->authinfo_simple($user, $pass)'; my ($nntp, $user, $pass) = @_; $nntp->_AUTHINFO('SIMPLE') == CMD_MORE @@ -216,7 +215,7 @@ sub authinfo_simple { sub body { - @_ >= 1 && @_ <= 3 or croak 'usage: $nntp->body( [ MSGID ], [ FH ] )'; + @_ >= 1 && @_ <= 3 or croak 'usage: $nntp->body([{$msgid|$msgnum}[, $fh]])'; my $nntp = shift; my @fh; @@ -229,7 +228,7 @@ sub body { sub bodyfh { - @_ >= 1 && @_ <= 2 or croak 'usage: $nntp->bodyfh( [ MSGID ] )'; + @_ >= 1 && @_ <= 2 or croak 'usage: $nntp->bodyfh([{$msgid|$msgnum}])'; my $nntp = shift; return unless $nntp->_BODY(@_); return $nntp->tied_fh; @@ -237,7 +236,7 @@ sub bodyfh { sub head { - @_ >= 1 && @_ <= 3 or croak 'usage: $nntp->head( [ MSGID ], [ FH ] )'; + @_ >= 1 && @_ <= 3 or croak 'usage: $nntp->head([{$msgid|$msgnum}[, $fh]])'; my $nntp = shift; my @fh; @@ -250,7 +249,7 @@ sub head { sub headfh { - @_ >= 1 && @_ <= 2 or croak 'usage: $nntp->headfh( [ MSGID ] )'; + @_ >= 1 && @_ <= 2 or croak 'usage: $nntp->headfh([{$msgid|$msgnum}])'; my $nntp = shift; return unless $nntp->_HEAD(@_); return $nntp->tied_fh; @@ -258,7 +257,7 @@ sub headfh { sub nntpstat { - @_ == 1 || @_ == 2 or croak 'usage: $nntp->nntpstat( [ MSGID ] )'; + @_ == 1 || @_ == 2 or croak 'usage: $nntp->nntpstat([{$msgid|$msgnum}])'; my $nntp = shift; $nntp->_STAT(@_) && $nntp->message =~ /(<[^>]+>)/o @@ -268,7 +267,7 @@ sub nntpstat { sub group { - @_ == 1 || @_ == 2 or croak 'usage: $nntp->group( [ GROUP ] )'; + @_ == 1 || @_ == 2 or croak 'usage: $nntp->group([$group])'; my $nntp = shift; my $grp = ${*$nntp}{'net_nntp_group'}; @@ -308,11 +307,11 @@ sub help { sub ihave { - @_ >= 2 or croak 'usage: $nntp->ihave( MESSAGE-ID [, MESSAGE ])'; - my $nntp = shift; - my $mid = shift; + @_ >= 2 or croak 'usage: $nntp->ihave($msgid[, $message])'; + my $nntp = shift; + my $msgid = shift; - $nntp->_IHAVE($mid) && $nntp->datasend(@_) + $nntp->_IHAVE($msgid) && $nntp->datasend(@_) ? @_ == 0 || $nntp->dataend : undef; } @@ -339,15 +338,15 @@ sub list { sub newgroups { - @_ >= 2 or croak 'usage: $nntp->newgroups( SINCE [, DISTRIBUTIONS ])'; + @_ >= 2 or croak 'usage: $nntp->newgroups($since[, $distributions])'; my $nntp = shift; - my $time = _timestr(shift); - my $dist = shift || ""; + my $since = _timestr(shift); + my $distributions = shift || ""; - $dist = join(",", @{$dist}) - if ref($dist); + $distributions = join(",", @{$distributions}) + if ref($distributions); - $nntp->_NEWGROUPS($time, $dist) + $nntp->_NEWGROUPS($since, $distributions) ? $nntp->_grouplist : undef; } @@ -355,20 +354,20 @@ sub newgroups { sub newnews { @_ >= 2 && @_ <= 4 - or croak 'usage: $nntp->newnews( SINCE [, GROUPS [, DISTRIBUTIONS ]])'; + or croak 'usage: $nntp->newnews($since[, $groups[, $distributions]])'; my $nntp = shift; - my $time = _timestr(shift); - my $grp = @_ ? shift: $nntp->group; - my $dist = shift || ""; + my $since = _timestr(shift); + my $groups = @_ ? shift : $nntp->group; + my $distributions = shift || ""; - $grp ||= "*"; - $grp = join(",", @{$grp}) - if ref($grp); + $groups ||= "*"; + $groups = join(",", @{$groups}) + if ref($groups); - $dist = join(",", @{$dist}) - if ref($dist); + $distributions = join(",", @{$distributions}) + if ref($distributions); - $nntp->_NEWNEWS($grp, $time, $dist) + $nntp->_NEWNEWS($groups, $since, $distributions) ? $nntp->_articlelist : undef; } @@ -385,7 +384,7 @@ sub next { sub post { - @_ >= 1 or croak 'usage: $nntp->post( [ MESSAGE ] )'; + @_ >= 1 or croak 'usage: $nntp->post([$message])'; my $nntp = shift; $nntp->_POST() && $nntp->datasend(@_) @@ -423,7 +422,7 @@ sub slave { sub active { - @_ == 1 || @_ == 2 or croak 'usage: $nntp->active( [ PATTERN ] )'; + @_ == 1 || @_ == 2 or croak 'usage: $nntp->active([$pattern])'; my $nntp = shift; $nntp->_LIST('ACTIVE', @_) @@ -453,7 +452,7 @@ sub distributions { sub distribution_patterns { - @_ == 1 or croak 'usage: $nntp->distributions()'; + @_ == 1 or croak 'usage: $nntp->distribution_patterns()'; my $nntp = shift; my $arr; @@ -468,7 +467,7 @@ sub distribution_patterns { sub newsgroups { - @_ == 1 || @_ == 2 or croak 'usage: $nntp->newsgroups( [ PATTERN ] )'; + @_ == 1 || @_ == 2 or croak 'usage: $nntp->newsgroups([$pattern])'; my $nntp = shift; $nntp->_LIST('NEWSGROUPS', @_) @@ -498,7 +497,7 @@ sub subscriptions { sub listgroup { - @_ == 1 || @_ == 2 or croak 'usage: $nntp->listgroup( [ GROUP ] )'; + @_ == 1 || @_ == 2 or croak 'usage: $nntp->listgroup([$group])'; my $nntp = shift; $nntp->_LISTGROUP(@_) @@ -516,7 +515,7 @@ sub reader { sub xgtitle { - @_ == 1 || @_ == 2 or croak 'usage: $nntp->xgtitle( [ PATTERN ] )'; + @_ == 1 || @_ == 2 or croak 'usage: $nntp->xgtitle([$pattern])'; my $nntp = shift; $nntp->_XGTITLE(@_) @@ -526,19 +525,19 @@ sub xgtitle { sub xhdr { - @_ >= 2 && @_ <= 4 or croak 'usage: $nntp->xhdr( HEADER, [ MESSAGE-SPEC ] )'; + @_ >= 2 && @_ <= 4 or croak 'usage: $nntp->xhdr($header[, $message_spec])'; my $nntp = shift; - my $hdr = shift; - my $arg = _msg_arg(@_); + my $header = shift; + my $arg = _msg_arg(@_); - $nntp->_XHDR($hdr, $arg) + $nntp->_XHDR($header, $arg) ? $nntp->_description : undef; } sub xover { - @_ == 2 || @_ == 3 or croak 'usage: $nntp->xover( MESSAGE-SPEC )'; + @_ == 2 || @_ == 3 or croak 'usage: $nntp->xover($message_spec)'; my $nntp = shift; my $arg = _msg_arg(@_); @@ -549,27 +548,27 @@ sub xover { sub xpat { - @_ == 4 || @_ == 5 or croak '$nntp->xpat( HEADER, PATTERN, MESSAGE-SPEC )'; + @_ == 4 || @_ == 5 or croak 'usage: $nntp->xpat($header, $pattern, $message_spec )'; my $nntp = shift; - my $hdr = shift; - my $pat = shift; - my $arg = _msg_arg(@_); + my $header = shift; + my $pattern = shift; + my $arg = _msg_arg(@_); - $pat = join(" ", @$pat) - if ref($pat); + $pattern = join(" ", @$pattern) + if ref($pattern); - $nntp->_XPAT($hdr, $arg, $pat) + $nntp->_XPAT($header, $arg, $pattern) ? $nntp->_description : undef; } sub xpath { - @_ == 2 or croak 'usage: $nntp->xpath( MESSAGE-ID )'; - my ($nntp, $mid) = @_; + @_ == 2 or croak 'usage: $nntp->xpath($message_id)'; + my ($nntp, $message_id) = @_; return - unless $nntp->_XPATH($mid); + unless $nntp->_XPATH($message_id); my $m; ($m = $nntp->message) =~ s/^\d+\s+//o; @@ -580,7 +579,7 @@ sub xpath { sub xrover { - @_ == 2 || @_ == 3 or croak 'usage: $nntp->xrover( MESSAGE-SPEC )'; + @_ == 2 || @_ == 3 or croak 'usage: $nntp->xrover($message_spec)'; my $nntp = shift; my $arg = _msg_arg(@_); @@ -596,7 +595,7 @@ sub date { $nntp->_DATE && $nntp->message =~ /(\d{4})(\d\d)(\d\d)(\d\d)(\d\d)(\d\d)/ - ? timegm($6, $5, $4, $3, $2 - 1, $1 - 1900) + ? timegm($6, $5, $4, $3, $2 - 1, $1) : undef; } @@ -807,20 +806,20 @@ explicit TLS encryption, i.e. NNTPS or NNTP+STARTTLS. The Net::NNTP class is a subclass of Net::Cmd and (depending on avaibility) of IO::Socket::IP, IO::Socket::INET6 or IO::Socket::INET. -=head1 CONSTRUCTOR +=head2 Class Methods =over 4 -=item new ( [ HOST ] [, OPTIONS ]) +=item C -This is the constructor for a new Net::NNTP object. C is the +This is the constructor for a new Net::NNTP object. C<$host> is the name of the remote host to which a NNTP connection is required. If not given then it may be passed as the C option described below. If no host is passed then two environment variables are checked, first C then C, then C is checked, and if a host is not found then C is used. -C are passed in a hash like fashion, using key and value pairs. +C<%options> are passed in a hash like fashion, using key and value pairs. Possible options are: B - NNTP host to connect to. It may be a single scalar, as defined for @@ -857,7 +856,7 @@ class. Alternatively B can be used. =back -=head1 METHODS +=head2 Object Methods Unless otherwise stated all methods return either a I or I value, with I meaning that the operation was a success. When a method @@ -870,58 +869,58 @@ documented here. =over 4 -=item host () +=item C Returns the value used by the constructor, and passed to IO::Socket::INET, to connect to the host. -=item starttls () +=item C Upgrade existing plain connection to SSL. Any arguments necessary for SSL must be given in C already. -=item article ( [ MSGID|MSGNUM ], [FH] ) +=item C Retrieve the header, a blank line, then the body (text) of the specified article. -If C is specified then it is expected to be a valid filehandle +If C<$fh> is specified then it is expected to be a valid filehandle and the result will be printed to it, on success a true value will be -returned. If C is not specified then the return value, on success, +returned. If C<$fh> is not specified then the return value, on success, will be a reference to an array containing the article requested, each entry in the array will contain one line of the article. If no arguments are passed then the current article in the currently selected newsgroup is fetched. -C is a numeric id of an article in the current newsgroup, and -will change the current article pointer. C is the message id of +C<$msgnum> is a numeric id of an article in the current newsgroup, and +will change the current article pointer. C<$msgid> is the message id of an article as shown in that article's header. It is anticipated that the -client will obtain the C from a list provided by the C +client will obtain the C<$msgid> from a list provided by the C command, from references contained within another article, or from the message-id provided in the response to some other commands. If there is an error then C will be returned. -=item body ( [ MSGID|MSGNUM ], [FH] ) +=item C Like C
but only fetches the body of the article. -=item head ( [ MSGID|MSGNUM ], [FH] ) +=item C Like C
but only fetches the headers for the article. -=item articlefh ( [ MSGID|MSGNUM ] ) +=item C -=item bodyfh ( [ MSGID|MSGNUM ] ) +=item C -=item headfh ( [ MSGID|MSGNUM ] ) +=item C These are similar to article(), body() and head(), but rather than returning the requested data directly, they return a tied filehandle from which to read the article. -=item nntpstat ( [ MSGID|MSGNUM ] ) +=item C The C command is similar to the C
command except that no text is returned. When selecting by message number within a group, @@ -934,9 +933,9 @@ selection by message-id does B alter the "current article pointer". Returns the message-id of the "current article". -=item group ( [ GROUP ] ) +=item C -Set and/or get the current group. If C is not given then information +Set and/or get the current group. If C<$group> is not given then information is returned on the current group. In a scalar context it returns the group name. @@ -945,45 +944,45 @@ In an array context the return value is a list containing, the number of articles in the group, the number of the first article, the number of the last article and the group name. -=item help ( ) +=item C Request help text (a short summary of commands that are understood by this implementation) from the server. Returns the text or undef upon failure. -=item ihave ( MSGID [, MESSAGE ]) +=item C The C command informs the server that the client has an article -whose id is C. If the server desires a copy of that -article and C has been given then it will be sent. +whose id is C<$msgid>. If the server desires a copy of that +article and C<$message> has been given then it will be sent. -Returns I if the server desires the article and C was +Returns I if the server desires the article and C<$message> was successfully sent, if specified. -If C is not specified then the message must be sent using the +If C<$message> is not specified then the message must be sent using the C and C methods from L -C can be either an array of lines or a reference to an array +C<$message> can be either an array of lines or a reference to an array and must be encoded by the caller to octets of whatever encoding is required, e.g. by using the Encode module's C function. -=item last () +=item C Set the "current article pointer" to the previous article in the current newsgroup. Returns the message-id of the article. -=item date () +=item C Returns the date on the remote server. This date will be in a UNIX time format (seconds since 1970) -=item postok () +=item C C will return I if the servers initial response indicated that it will allow posting. -=item authinfo ( USER, PASS ) +=item C Authenticates to the server (using the original AUTHINFO USER / AUTHINFO PASS form, defined in RFC2980) using the supplied username and password. Please @@ -991,61 +990,61 @@ note that the password is sent in clear text to the server. This command should not be used with valuable passwords unless the connection to the server is somehow protected. -=item authinfo_simple ( USER, PASS ) +=item C Authenticates to the server (using the proposed NNTP V2 AUTHINFO SIMPLE form, defined and deprecated in RFC2980) using the supplied username and password. As with L the password is sent in clear text. -=item list () +=item C Obtain information about all the active newsgroups. The results is a reference to a hash where the key is a group name and each value is a reference to an array. The elements in this array are:- the last article number in the group, the first article number in the group and any information flags about the group. -=item newgroups ( SINCE [, DISTRIBUTIONS ]) +=item C -C is a time value and C is either a distribution +C<$since> is a time value and C<$distributions> is either a distribution pattern or a reference to a list of distribution patterns. The result is the same as C, but the -groups return will be limited to those created after C and, if -specified, in one of the distribution areas in C. +groups return will be limited to those created after C<$since> and, if +specified, in one of the distribution areas in C<$distributions>. -=item newnews ( SINCE [, GROUPS [, DISTRIBUTIONS ]]) +=item C -C is a time value. C is either a group pattern or a reference -to a list of group patterns. C is either a distribution +C<$since> is a time value. C<$groups> is either a group pattern or a reference +to a list of group patterns. C<$distributions> is either a distribution pattern or a reference to a list of distribution patterns. Returns a reference to a list which contains the message-ids of all news posted -after C, that are in a groups which matched C and a -distribution which matches C. +after C<$since>, that are in a groups which matched C<$groups> and a +distribution which matches C<$distributions>. -=item next () +=item C Set the "current article pointer" to the next article in the current newsgroup. Returns the message-id of the article. -=item post ( [ MESSAGE ] ) +=item C -Post a new article to the news server. If C is specified and posting +Post a new article to the news server. If C<$message> is specified and posting is allowed then the message will be sent. -If C is not specified then the message must be sent using the +If C<$message> is not specified then the message must be sent using the C and C methods from L -C can be either an array of lines or a reference to an array +C<$message> can be either an array of lines or a reference to an array and must be encoded by the caller to octets of whatever encoding is required, e.g. by using the Encode module's C function. -The message, either sent via C or as the C +The message, either sent via C or as the C<$message> parameter, must be in the format as described by RFC822 and must contain From:, Newsgroups: and Subject: headers. -=item postfh () +=item C Post a new article to the news server using a tied filehandle. If posting is allowed, this method will return a tied filehandle that you @@ -1054,85 +1053,85 @@ explicitly close() the filehandle when you are finished posting the article, and the return value from the close() call will indicate whether the message was successfully posted. -=item slave () +=item C Tell the remote server that I am not a user client, but probably another news server. -=item quit () +=item C Quit the remote server and close the socket connection. -=item can_inet6 () +=item C Returns whether we can use IPv6. -=item can_ssl () +=item C Returns whether we can use SSL. =back -=head2 Extension methods +=head2 Extension Methods These methods use commands that are not part of the RFC977 documentation. Some servers may not support all of them. =over 4 -=item newsgroups ( [ PATTERN ] ) +=item C Returns a reference to a hash where the keys are all the group names which -match C, or all of the groups if no pattern is specified, and +match C<$pattern>, or all of the groups if no pattern is specified, and each value contains the description text for the group. -=item distributions () +=item C Returns a reference to a hash where the keys are all the possible distribution names and the values are the distribution descriptions. -=item distribution_patterns () +=item C Returns a reference to an array where each element, itself an array reference, consists of the three fields of a line of the distrib.pats list maintained by some NNTP servers, namely: a weight, a wildmat and a value which the client may use to construct a Distribution header. -=item subscriptions () +=item C Returns a reference to a list which contains a list of groups which are recommended for a new user to subscribe to. -=item overview_fmt () +=item C Returns a reference to an array which contain the names of the fields returned by C. -=item active_times () +=item C Returns a reference to a hash where the keys are the group names and each value is a reference to an array containing the time the groups was created and an identifier, possibly an Email address, of the creator. -=item active ( [ PATTERN ] ) +=item C Similar to C but only active groups that match the pattern are returned. -C can be a group pattern. +C<$pattern> can be a group pattern. -=item xgtitle ( PATTERN ) +=item C Returns a reference to a hash where the keys are all the group names which -match C and each value is the description text for the group. +match C<$pattern> and each value is the description text for the group. -=item xhdr ( HEADER, MESSAGE-SPEC ) +=item C -Obtain the header field C
for all the messages specified. +Obtain the header field C<$header> for all the messages specified. The return value will be a reference to a hash where the keys are the message numbers and each value contains the text of the requested header for that message. -=item xover ( MESSAGE-SPEC ) +=item C The return value will be a reference to a hash where the keys are the message numbers and each value contains @@ -1141,17 +1140,17 @@ message. The names of the fields can be obtained by calling C. -=item xpath ( MESSAGE-ID ) +=item C Returns the path name to the file on the server which contains the specified message. -=item xpat ( HEADER, PATTERN, MESSAGE-SPEC) +=item C The result is the same as C except the is will be restricted to -headers where the text of the header matches C +headers where the text of the header matches C<$pattern> -=item xrover () +=item C The XROVER command returns reference information for the article(s) specified. @@ -1159,12 +1158,12 @@ specified. Returns a reference to a HASH where the keys are the message numbers and the values are the References: lines from the articles -=item listgroup ( [ GROUP ] ) +=item C -Returns a reference to a list of all the active messages in C, or -the current group if C is not specified. +Returns a reference to a list of all the active messages in C<$group>, or +the current group if C<$group> is not specified. -=item reader () +=item C Tell the server that you are a reader and not another server. @@ -1179,7 +1178,7 @@ the response is harmless. =back -=head1 UNSUPPORTED +=head2 Unsupported The following NNTP command are unsupported by the package, and there are no plans to do so. @@ -1189,16 +1188,16 @@ no plans to do so. XSEARCH XINDEX -=head1 DEFINITIONS +=head2 Definitions =over 4 -=item MESSAGE-SPEC +=item $message_spec -C is either a single message-id, a single message number, or +C<$message_spec> is either a single message-id, a single message number, or a reference to a list of two message numbers. -If C is a reference to a list of two message numbers and the +If C<$message_spec> is a reference to a list of two message numbers and the second number in a range is less than or equal to the first then the range represents all messages in the group after the first message number. @@ -1206,7 +1205,7 @@ B For compatibility reasons only with earlier versions of Net::NNTP a message spec can be passed as a list of two numbers, this is deprecated and a reference to the list should now be passed -=item PATTERN +=item $pattern The C protocol uses the C format for patterns. The WILDMAT format was first developed by Rich Salz based on @@ -1275,23 +1274,31 @@ with a and ends with d. =back +=head1 EXPORTS + +I. + +=head1 KNOWN BUGS + +See L. + =head1 SEE ALSO L, -L +L. =head1 AUTHOR -Graham Barr EFE. +Graham Barr ELE. -Steve Hay EFE is now maintaining libnet as of version -1.22_02. +Steve Hay ELE is now maintaining +libnet as of version 1.22_02. =head1 COPYRIGHT Copyright (C) 1995-1997 Graham Barr. All rights reserved. -Copyright (C) 2013-2016 Steve Hay. All rights reserved. +Copyright (C) 2013-2016, 2020 Steve Hay. All rights reserved. =head1 LICENCE @@ -1299,4 +1306,16 @@ This module is free software; you can redistribute it and/or modify it under the same terms as Perl itself, i.e. under the terms of either the GNU General Public License or the Artistic License, as specified in the F file. +=head1 VERSION + +Version 3.14 + +=head1 DATE + +23 Dec 2020 + +=head1 HISTORY + +See the F file. + =cut diff --git a/gnu/usr.bin/perl/cpan/libnet/lib/Net/Netrc.pm b/gnu/usr.bin/perl/cpan/libnet/lib/Net/Netrc.pm index 46fba2787c3..3dec11e733f 100644 --- a/gnu/usr.bin/perl/cpan/libnet/lib/Net/Netrc.pm +++ b/gnu/usr.bin/perl/cpan/libnet/lib/Net/Netrc.pm @@ -1,7 +1,7 @@ # Net::Netrc.pm # # Copyright (C) 1995-1998 Graham Barr. All rights reserved. -# Copyright (C) 2013-2014 Steve Hay. All rights reserved. +# Copyright (C) 2013-2014, 2020 Steve Hay. All rights reserved. # This module is free software; you can redistribute it and/or modify it under # the same terms as Perl itself, i.e. under the terms of either the GNU General # Public License or the Artistic License, as specified in the F file. @@ -16,7 +16,7 @@ use warnings; use Carp; use FileHandle; -our $VERSION = "3.11"; +our $VERSION = "3.14"; our $TESTING; @@ -224,7 +224,7 @@ second the ownership permissions should be such that only the owner has read and write access. If these conditions are not met then a warning is output and the .netrc file is not read. -=head1 THE .netrc FILE +=head2 The F<.netrc> File The .netrc file contains login and initialization information used by the auto-login process. It resides in the user's home directory. The following @@ -276,7 +276,7 @@ with I. =back -=head1 CONSTRUCTOR +=head2 Class Methods The constructor for a C object is not called new as it does not really create a new object. But instead is called C as this is @@ -284,11 +284,11 @@ essentially what it does. =over 4 -=item lookup ( MACHINE [, LOGIN ]) +=item C -Lookup and return a reference to the entry for C. If C is given -then the entry returned will have the given login. If C is not given then -the first entry in the .netrc file for C will be returned. +Lookup and return a reference to the entry for C<$machine>. If C<$login> is given +then the entry returned will have the given login. If C<$login> is not given then +the first entry in the .netrc file for C<$machine> will be returned. If a matching entry cannot be found, and a default entry exists, then a reference to the default entry is returned. @@ -298,45 +298,52 @@ no .netrc file is found, then C is returned. =back -=head1 METHODS +=head2 Object Methods =over 4 -=item login () +=item C Return the login id for the netrc entry -=item password () +=item C Return the password for the netrc entry -=item account () +=item C Return the account information for the netrc entry -=item lpa () +=item C Return a list of login, password and account information for the netrc entry =back -=head1 AUTHOR +=head1 EXPORTS + +I. -Graham Barr EFE. +=head1 KNOWN BUGS -Steve Hay EFE is now maintaining libnet as of version -1.22_02. +See L. =head1 SEE ALSO -L, -L +L. + +=head1 AUTHOR + +Graham Barr ELE. + +Steve Hay ELE is now maintaining +libnet as of version 1.22_02. =head1 COPYRIGHT Copyright (C) 1995-1998 Graham Barr. All rights reserved. -Copyright (C) 2013-2014 Steve Hay. All rights reserved. +Copyright (C) 2013-2014, 2020 Steve Hay. All rights reserved. =head1 LICENCE @@ -344,4 +351,16 @@ This module is free software; you can redistribute it and/or modify it under the same terms as Perl itself, i.e. under the terms of either the GNU General Public License or the Artistic License, as specified in the F file. +=head1 VERSION + +Version 3.14 + +=head1 DATE + +23 Dec 2020 + +=head1 HISTORY + +See the F file. + =cut diff --git a/gnu/usr.bin/perl/cpan/libnet/lib/Net/POP3.pm b/gnu/usr.bin/perl/cpan/libnet/lib/Net/POP3.pm index 0811025b0a2..a4ed8ebbe70 100644 --- a/gnu/usr.bin/perl/cpan/libnet/lib/Net/POP3.pm +++ b/gnu/usr.bin/perl/cpan/libnet/lib/Net/POP3.pm @@ -1,7 +1,7 @@ # Net::POP3.pm # # Copyright (C) 1995-2004 Graham Barr. All rights reserved. -# Copyright (C) 2013-2016 Steve Hay. All rights reserved. +# Copyright (C) 2013-2016, 2020 Steve Hay. All rights reserved. # This module is free software; you can redistribute it and/or modify it under # the same terms as Perl itself, i.e. under the terms of either the GNU General # Public License or the Artistic License, as specified in the F file. @@ -18,7 +18,7 @@ use IO::Socket; use Net::Cmd; use Net::Config; -our $VERSION = "3.11"; +our $VERSION = "3.14"; # Code for detecting if we can use SSL my $ssl_class = eval { @@ -124,7 +124,7 @@ sub debug_text { $_[2] =~ /^(pass|rpop)/i ? "$1 ....\n" : $_[2]; } sub login { - @_ >= 1 && @_ <= 3 or croak 'usage: $pop3->login( USER, PASS )'; + @_ >= 1 && @_ <= 3 or croak 'usage: $pop3->login([$user[, $pass]])'; my ($me, $user, $pass) = @_; if (@_ <= 2) { @@ -147,7 +147,7 @@ sub starttls { } sub apop { - @_ >= 1 && @_ <= 3 or croak 'usage: $pop3->apop( USER, PASS )'; + @_ >= 1 && @_ <= 3 or croak 'usage: $pop3->apop([$user[, $pass]])'; my ($me, $user, $pass) = @_; my $banner; my $md; @@ -180,13 +180,13 @@ sub apop { sub user { - @_ == 2 or croak 'usage: $pop3->user( USER )'; + @_ == 2 or croak 'usage: $pop3->user($user)'; $_[0]->_USER($_[1]) ? 1 : undef; } sub pass { - @_ == 2 or croak 'usage: $pop3->pass( PASS )'; + @_ == 2 or croak 'usage: $pop3->pass($pass)'; my ($me, $pass) = @_; @@ -225,7 +225,7 @@ sub last { sub top { - @_ == 2 || @_ == 3 or croak 'usage: $pop3->top( MSGNUM [, NUMLINES ])'; + @_ == 2 || @_ == 3 or croak 'usage: $pop3->top($msgnum[, $numlines])'; my $me = shift; return @@ -247,7 +247,7 @@ sub popstat { sub list { - @_ == 1 || @_ == 2 or croak 'usage: $pop3->list( [ MSGNUM ] )'; + @_ == 1 || @_ == 2 or croak 'usage: $pop3->list([$msgnum])'; my $me = shift; return @@ -268,7 +268,7 @@ sub list { sub get { - @_ == 2 or @_ == 3 or croak 'usage: $pop3->get( MSGNUM [, FH ])'; + @_ == 2 or @_ == 3 or croak 'usage: $pop3->get($msgnum[, $fh])'; my $me = shift; return @@ -279,7 +279,7 @@ sub get { sub getfh { - @_ == 2 or croak 'usage: $pop3->getfh( MSGNUM )'; + @_ == 2 or croak 'usage: $pop3->getfh($msgnum)'; my $me = shift; return unless $me->_RETR(shift); @@ -288,7 +288,7 @@ sub getfh { sub delete { - @_ == 2 or croak 'usage: $pop3->delete( MSGNUM )'; + @_ == 2 or croak 'usage: $pop3->delete($msgnum)'; my $me = shift; return 0 unless $me->_DELE(@_); ${*$me}{'net_pop3_deleted'} = 1; @@ -296,7 +296,7 @@ sub delete { sub uidl { - @_ == 1 || @_ == 2 or croak 'usage: $pop3->uidl( [ MSGNUM ] )'; + @_ == 1 || @_ == 2 or croak 'usage: $pop3->uidl([$msgnum])'; my $me = shift; my $uidl; @@ -319,7 +319,7 @@ sub uidl { sub ping { - @_ == 2 or croak 'usage: $pop3->ping( USER )'; + @_ == 2 or croak 'usage: $pop3->ping($user)'; my $me = shift; return () unless $me->_PING(@_) && $me->message =~ /(\d+)\D+(\d+)/; @@ -635,21 +635,20 @@ on the object. The Net::POP3 class is a subclass of Net::Cmd and (depending on avaibility) of IO::Socket::IP, IO::Socket::INET6 or IO::Socket::INET. - -=head1 CONSTRUCTOR +=head2 Class Methods =over 4 -=item new ( [ HOST ] [, OPTIONS ] ) +=item C -This is the constructor for a new Net::POP3 object. C is the +This is the constructor for a new Net::POP3 object. C<$host> is the name of the remote host to which an POP3 connection is required. -C is optional. If C is not given then it may instead be +C<$host> is optional. If C<$host> is not given then it may instead be passed as the C option described below. If neither is given then the C specified in C will be used. -C are passed in a hash like fashion, using key and value pairs. +C<%options> are passed in a hash like fashion, using key and value pairs. Possible options are: B - POP3 host to connect to. It may be a single scalar, as defined for @@ -681,7 +680,7 @@ B - Enable debugging information =back -=head1 METHODS +=head2 Object Methods Unless otherwise stated all methods return either a I or I value, with I meaning that the operation was a success. When a method @@ -694,26 +693,26 @@ documented here. =over 4 -=item host () +=item C Returns the value used by the constructor, and passed to IO::Socket::INET, to connect to the host. -=item auth ( USERNAME, PASSWORD ) +=item C Attempt SASL authentication. -=item user ( USER ) +=item C Send the USER command. -=item pass ( PASS ) +=item C Send the PASS command. Returns the number of messages in the mailbox. -=item login ( [ USER [, PASS ]] ) +=item C -Send both the USER and PASS commands. If C is not given the +Send both the USER and PASS commands. If C<$pass> is not given the C uses C to lookup the password using the host and username. If the username is not specified then the current user name will be used. @@ -724,25 +723,25 @@ will give a true value in a boolean context, but zero in a numeric context. If there was an error authenticating the user then I will be returned. -=item starttls ( SSLARGS ) +=item C Upgrade existing plain connection to SSL. You can use SSL arguments as documented in L, but it will usually use the right arguments already. -=item apop ( [ USER [, PASS ]] ) +=item C -Authenticate with the server identifying as C with password C. +Authenticate with the server identifying as C<$user> with password C<$pass>. Similar to L, but the password is not sent in clear text. To use this method you must have the Digest::MD5 or the MD5 module installed, otherwise this method will return I. -=item banner () +=item C Return the sever's connection banner -=item capa () +=item C Return a reference to a hash of the capabilities of the server. APOP is added as a pseudo capability. Note that I've been unable to @@ -750,109 +749,117 @@ find a list of the standard capability values, and some appear to be multi-word and some are not. We make an attempt at intelligently parsing them, but it may not be correct. -=item capabilities () +=item C Just like capa, but only uses a cache from the last time we asked the server, so as to avoid asking more than once. -=item top ( MSGNUM [, NUMLINES ] ) +=item C -Get the header and the first C of the body for the message -C. Returns a reference to an array which contains the lines of text +Get the header and the first C<$numlines> of the body for the message +C<$msgnum>. Returns a reference to an array which contains the lines of text read from the server. -=item list ( [ MSGNUM ] ) +=item C If called with an argument the C returns the size of the message in octets. If called without arguments a reference to a hash is returned. The -keys will be the C's of all undeleted messages and the values will +keys will be the C<$msgnum>'s of all undeleted messages and the values will be their size in octets. -=item get ( MSGNUM [, FH ] ) +=item C -Get the message C from the remote mailbox. If C is not given +Get the message C<$msgnum> from the remote mailbox. If C<$fh> is not given then get returns a reference to an array which contains the lines of -text read from the server. If C is given then the lines returned -from the server are printed to the filehandle C. +text read from the server. If C<$fh> is given then the lines returned +from the server are printed to the filehandle C<$fh>. -=item getfh ( MSGNUM ) +=item C As per get(), but returns a tied filehandle. Reading from this filehandle returns the requested message. The filehandle will return EOF at the end of the message and should not be reused. -=item last () +=item C -Returns the highest C of all the messages accessed. +Returns the highest C<$msgnum> of all the messages accessed. -=item popstat () +=item C Returns a list of two elements. These are the number of undeleted elements and the size of the mbox in octets. -=item ping ( USER ) +=item C Returns a list of two elements. These are the number of new messages -and the total number of messages for C. +and the total number of messages for C<$user>. -=item uidl ( [ MSGNUM ] ) +=item C -Returns a unique identifier for C if given. If C is not +Returns a unique identifier for C<$msgnum> if given. If C<$msgnum> is not given C returns a reference to a hash where the keys are the message numbers and the values are the unique identifiers. -=item delete ( MSGNUM ) +=item C -Mark message C to be deleted from the remote mailbox. All messages +Mark message C<$msgnum> to be deleted from the remote mailbox. All messages that are marked to be deleted will be removed from the remote mailbox when the server connection closed. -=item reset () +=item C Reset the status of the remote POP3 server. This includes resetting the status of all messages to not be deleted. -=item quit () +=item C Quit and close the connection to the remote POP3 server. Any messages marked as deleted will be deleted from the remote mailbox. -=item can_inet6 () +=item C Returns whether we can use IPv6. -=item can_ssl () +=item C Returns whether we can use SSL. =back -=head1 NOTES +=head2 Notes If a C object goes out of scope before C method is called then the C method will called before the connection is closed. This means that any messages marked to be deleted will not be. +=head1 EXPORTS + +I. + +=head1 KNOWN BUGS + +See L. + =head1 SEE ALSO L, L, -L +L. =head1 AUTHOR -Graham Barr EFE. +Graham Barr ELE. -Steve Hay EFE is now maintaining libnet as of version -1.22_02. +Steve Hay ELE is now maintaining +libnet as of version 1.22_02. =head1 COPYRIGHT Copyright (C) 1995-2004 Graham Barr. All rights reserved. -Copyright (C) 2013-2016 Steve Hay. All rights reserved. +Copyright (C) 2013-2016, 2020 Steve Hay. All rights reserved. =head1 LICENCE @@ -860,4 +867,16 @@ This module is free software; you can redistribute it and/or modify it under the same terms as Perl itself, i.e. under the terms of either the GNU General Public License or the Artistic License, as specified in the F file. +=head1 VERSION + +Version 3.14 + +=head1 DATE + +23 Dec 2020 + +=head1 HISTORY + +See the F file. + =cut diff --git a/gnu/usr.bin/perl/cpan/libnet/lib/Net/SMTP.pm b/gnu/usr.bin/perl/cpan/libnet/lib/Net/SMTP.pm index 5eaf4220b62..c04a362d195 100644 --- a/gnu/usr.bin/perl/cpan/libnet/lib/Net/SMTP.pm +++ b/gnu/usr.bin/perl/cpan/libnet/lib/Net/SMTP.pm @@ -1,7 +1,7 @@ # Net::SMTP.pm # # Copyright (C) 1995-2004 Graham Barr. All rights reserved. -# Copyright (C) 2013-2016 Steve Hay. All rights reserved. +# Copyright (C) 2013-2016, 2020 Steve Hay. All rights reserved. # This module is free software; you can redistribute it and/or modify it under # the same terms as Perl itself, i.e. under the terms of either the GNU General # Public License or the Artistic License, as specified in the F file. @@ -19,7 +19,7 @@ use Net::Cmd; use Net::Config; use Socket; -our $VERSION = "3.11"; +our $VERSION = "3.14"; # Code for detecting if we can use SSL my $ssl_class = eval { @@ -663,57 +663,23 @@ explicit TLS encryption, i.e. SMTPS or SMTP+STARTTLS. The Net::SMTP class is a subclass of Net::Cmd and (depending on avaibility) of IO::Socket::IP, IO::Socket::INET6 or IO::Socket::INET. -=head1 EXAMPLES - -This example prints the mail domain name of the SMTP server known as mailhost: - - #!/usr/local/bin/perl -w - - use Net::SMTP; - - $smtp = Net::SMTP->new('mailhost'); - print $smtp->domain,"\n"; - $smtp->quit; - -This example sends a small message to the postmaster at the SMTP server -known as mailhost: - - #!/usr/local/bin/perl -w - - use Net::SMTP; - - my $smtp = Net::SMTP->new('mailhost'); - - $smtp->mail($ENV{USER}); - if ($smtp->to('postmaster')) { - $smtp->data(); - $smtp->datasend("To: postmaster\n"); - $smtp->datasend("\n"); - $smtp->datasend("A simple test message\n"); - $smtp->dataend(); - } else { - print "Error: ", $smtp->message(); - } - - $smtp->quit; - -=head1 CONSTRUCTOR +=head2 Class Methods =over 4 -=item new ( [ HOST ] [, OPTIONS ] ) +=item C -This is the constructor for a new Net::SMTP object. C is the +This is the constructor for a new Net::SMTP object. C<$host> is the name of the remote host to which an SMTP connection is required. On failure C will be returned and C<$@> will contain the reason for the failure. -C is optional. If C is not given then it may instead be +C<$host> is optional. If C<$host> is not given then it may instead be passed as the C option described below. If neither is given then the C specified in C will be used. -C are passed in a hash like fashion, using key and value pairs. +C<%options> are passed in a hash like fashion, using key and value pairs. Possible options are: B - SMTP requires that you identify yourself. This option @@ -748,16 +714,14 @@ class. Alternatively B can be used. B - Maximum time, in seconds, to wait for a response from the SMTP server (default: 120) -B - If true the all ADDRESS arguments must be as +B - If true then all C<$address> arguments must be as defined by C in RFC2822. If not given, or false, then Net::SMTP will attempt to extract the address from the value passed. B - Enable debugging information - Example: - $smtp = Net::SMTP->new('mailhost', Hello => 'my.mail.domain', Timeout => 30, @@ -788,7 +752,7 @@ Example: =back -=head1 METHODS +=head1 Object Methods Unless otherwise stated all methods return either a I or I value, with I meaning that the operation was a success. When a method @@ -801,60 +765,60 @@ documented here. =over 4 -=item banner () +=item C Returns the banner message which the server replied with when the initial connection was made. -=item domain () +=item C Returns the domain that the remote SMTP server identified itself as during connection. -=item hello ( DOMAIN ) +=item C Tell the remote server the mail domain which you are in using the EHLO command (or HELO if EHLO fails). Since this method is invoked automatically when the Net::SMTP object is constructed the user should normally not have to call it manually. -=item host () +=item C Returns the value used by the constructor, and passed to IO::Socket::INET, to connect to the host. -=item etrn ( DOMAIN ) +=item C -Request a queue run for the DOMAIN given. +Request a queue run for the C<$domain> given. -=item starttls ( SSLARGS ) +=item C Upgrade existing plain connection to SSL. You can use SSL arguments as documented in L, but it will usually use the right arguments already. -=item auth ( USERNAME, PASSWORD ) +=item C -=item auth ( SASL ) +=item C Attempt SASL authentication. Requires Authen::SASL module. The first form constructs a new Authen::SASL object using the given username and password; the second form uses the given Authen::SASL object. -=item mail ( ADDRESS [, OPTIONS] ) +=item C -=item send ( ADDRESS ) +=item C -=item send_or_mail ( ADDRESS ) +=item C -=item send_and_mail ( ADDRESS ) +=item C -Send the appropriate command to the server MAIL, SEND, SOML or SAML. C
+Send the appropriate command to the server MAIL, SEND, SOML or SAML. C<$address> is the address of the sender. This initiates the sending of a message. The method C should be called for each address that the message is to be sent to. -The C method can some additional ESMTP OPTIONS which is passed +The C method can take some additional ESMTP C<%options> which is passed in hash like fashion, using key and value pairs. Possible options are: Size => @@ -872,13 +836,13 @@ Status Notification). The submitter address in C option is expected to be in a format as required by RFC 2554, in an RFC2821-quoted form and xtext-encoded, or <> . -=item reset () +=item C Reset the status of the server. This may be called after a message has been initiated, but before any data has been sent, to cancel the sending of the message. -=item recipient ( ADDRESS [, ADDRESS, [...]] [, OPTIONS ] ) +=item C Notify the server that the current message should be sent to all of the addresses given. Each address is sent as a separate command to the server. @@ -886,7 +850,7 @@ Should the sending of any address result in a failure then the process is aborted and a I value is returned. It is up to the user to call C if they so desire. -The C method can also pass additional case-sensitive OPTIONS as an +The C method can also pass additional case-sensitive C<%options> as an anonymous hash using key and value pairs. Possible options are: Notify => ['NEVER'] or ['SUCCESS','FAILURE','DELAY'] (see below) @@ -919,8 +883,9 @@ that a DSN not be returned to the sender under any conditions." $smtp->recipient(@recipients, { Notify => ['NEVER'], SkipBad => 1 }); # Good You may use any combination of these three values 'SUCCESS','FAILURE','DELAY' in -the anonymous array reference as defined by RFC3461 (see http://www.ietf.org/rfc/rfc3461.txt -for more information. Note: quotations in this topic from same.). +the anonymous array reference as defined by RFC3461 (see +L for more information. Note: quotations +in this topic from same.). A Notify parameter of 'SUCCESS' or 'FAILURE' "requests that a DSN be issued on successful delivery or delivery failure, respectively." @@ -943,67 +908,67 @@ sent to. The machine that generates a DSN will use this address to inform the sender, because he can't know if recipients get rewritten by mail servers. It is expected to be in a format as required by RFC3461, xtext-encoded. -=item to ( ADDRESS [, ADDRESS [...]] ) +=item C -=item cc ( ADDRESS [, ADDRESS [...]] ) +=item C -=item bcc ( ADDRESS [, ADDRESS [...]] ) +=item C Synonyms for C. -=item data ( [ DATA ] ) +=item C Initiate the sending of the data from the current message. -C may be a reference to a list or a list and must be encoded by the +C<$data> may be a reference to a list or a list and must be encoded by the caller to octets of whatever encoding is required, e.g. by using the Encode module's C function. -If specified the contents of C and a termination string C<".\r\n"> is +If specified the contents of C<$data> and a termination string C<".\r\n"> is sent to the server. The result will be true if the data was accepted. -If C is not specified then the result will indicate that the server +If C<$data> is not specified then the result will indicate that the server wishes the data to be sent. The data must then be sent using the C and C methods described in L. -=item bdat ( DATA ) +=item C -=item bdatlast ( DATA ) +=item C -Use the alternate DATA command "BDAT" of the data chunking service extension +Use the alternate C<$data> command "BDAT" of the data chunking service extension defined in RFC1830 for efficiently sending large MIME messages. -=item expand ( ADDRESS ) +=item C Request the server to expand the given address Returns an array which contains the text read from the server. -=item verify ( ADDRESS ) +=item C -Verify that C
is a legitimate mailing address. +Verify that C<$address> is a legitimate mailing address. Most sites usually disable this feature in their SMTP service configuration. Use "Debug => 1" option under new() to see if disabled. -=item help ( [ $subject ] ) +=item C Request help text from the server. Returns the text or undef upon failure -=item quit () +=item C Send the QUIT command to the remote SMTP server and close the socket connection. -=item can_inet6 () +=item C Returns whether we can use IPv6. -=item can_ssl () +=item C Returns whether we can use SSL. =back -=head1 ADDRESSES +=head2 Addresses Net::SMTP attempts to DWIM with addresses that are passed. For example an application might extract The From: line from an email @@ -1019,23 +984,65 @@ accept the address surrounded by angle brackets. "funny user"@domain RIGHT, recommended <"funny user"@domain> OK +=head1 EXAMPLES + +This example prints the mail domain name of the SMTP server known as mailhost: + + #!/usr/local/bin/perl -w + + use Net::SMTP; + + $smtp = Net::SMTP->new('mailhost'); + print $smtp->domain,"\n"; + $smtp->quit; + +This example sends a small message to the postmaster at the SMTP server +known as mailhost: + + #!/usr/local/bin/perl -w + + use Net::SMTP; + + my $smtp = Net::SMTP->new('mailhost'); + + $smtp->mail($ENV{USER}); + if ($smtp->to('postmaster')) { + $smtp->data(); + $smtp->datasend("To: postmaster\n"); + $smtp->datasend("\n"); + $smtp->datasend("A simple test message\n"); + $smtp->dataend(); + } else { + print "Error: ", $smtp->message(); + } + + $smtp->quit; + +=head1 EXPORTS + +I. + +=head1 KNOWN BUGS + +See L. + =head1 SEE ALSO L, -L +L. =head1 AUTHOR -Graham Barr EFE. +Graham Barr ELE. -Steve Hay EFE is now maintaining libnet as of version -1.22_02. +Steve Hay ELE is now maintaining +libnet as of version 1.22_02. =head1 COPYRIGHT Copyright (C) 1995-2004 Graham Barr. All rights reserved. -Copyright (C) 2013-2016 Steve Hay. All rights reserved. +Copyright (C) 2013-2016, 2020 Steve Hay. All rights reserved. =head1 LICENCE @@ -1043,4 +1050,16 @@ This module is free software; you can redistribute it and/or modify it under the same terms as Perl itself, i.e. under the terms of either the GNU General Public License or the Artistic License, as specified in the F file. +=head1 VERSION + +Version 3.14 + +=head1 DATE + +23 Dec 2020 + +=head1 HISTORY + +See the F file. + =cut diff --git a/gnu/usr.bin/perl/cpan/libnet/lib/Net/Time.pm b/gnu/usr.bin/perl/cpan/libnet/lib/Net/Time.pm index d049408538f..7906c1ad228 100644 --- a/gnu/usr.bin/perl/cpan/libnet/lib/Net/Time.pm +++ b/gnu/usr.bin/perl/cpan/libnet/lib/Net/Time.pm @@ -1,7 +1,7 @@ # Net::Time.pm # # Copyright (C) 1995-2004 Graham Barr. All rights reserved. -# Copyright (C) 2014 Steve Hay. All rights reserved. +# Copyright (C) 2014, 2020 Steve Hay. All rights reserved. # This module is free software; you can redistribute it and/or modify it under # the same terms as Perl itself, i.e. under the terms of either the GNU General # Public License or the Artistic License, as specified in the F file. @@ -22,7 +22,7 @@ use Net::Config; our @ISA = qw(Exporter); our @EXPORT_OK = qw(inet_time inet_daytime); -our $VERSION = "3.11"; +our $VERSION = "3.14"; our $TIMEOUT = 120; @@ -123,37 +123,64 @@ Net::Time - time and daytime network client interface C provides subroutines that obtain the time on a remote machine. +=head2 Functions + =over 4 -=item inet_time ( [HOST [, PROTOCOL [, TIMEOUT]]]) +=item C -Obtain the time on C, or some default host if C is not given +Obtain the time on C<$host>, or some default host if C<$host> is not given or not defined, using the protocol as defined in RFC868. The optional -argument C should define the protocol to use, either C or +argument C<$protocol> should define the protocol to use, either C or C. The result will be a time value in the same units as returned by time() or I upon failure. -=item inet_daytime ( [HOST [, PROTOCOL [, TIMEOUT]]]) +=item C -Obtain the time on C, or some default host if C is not given +Obtain the time on C<$host>, or some default host if C<$host> is not given or not defined, using the protocol as defined in RFC867. The optional -argument C should define the protocol to use, either C or +argument C<$protocol> should define the protocol to use, either C or C. The result will be an ASCII string or I upon failure. =back +=head1 EXPORTS + +The following symbols are, or can be, exported by this module: + +=over 4 + +=item Default Exports + +I. + +=item Optional Exports + +C, +C. + +=item Export Tags + +I. + +=back + +=head1 KNOWN BUGS + +I. + =head1 AUTHOR -Graham Barr EFE. +Graham Barr ELE. -Steve Hay EFE is now maintaining libnet as of version -1.22_02. +Steve Hay ELE is now maintaining +libnet as of version 1.22_02. =head1 COPYRIGHT Copyright (C) 1995-2004 Graham Barr. All rights reserved. -Copyright (C) 2014 Steve Hay. All rights reserved. +Copyright (C) 2014, 2020 Steve Hay. All rights reserved. =head1 LICENCE @@ -161,4 +188,16 @@ This module is free software; you can redistribute it and/or modify it under the same terms as Perl itself, i.e. under the terms of either the GNU General Public License or the Artistic License, as specified in the F file. +=head1 VERSION + +Version 3.14 + +=head1 DATE + +23 Dec 2020 + +=head1 HISTORY + +See the F file. + =cut diff --git a/gnu/usr.bin/perl/cpan/libnet/lib/Net/libnetFAQ.pod b/gnu/usr.bin/perl/cpan/libnet/lib/Net/libnetFAQ.pod index bcc53479ba9..4a3b183cd12 100644 --- a/gnu/usr.bin/perl/cpan/libnet/lib/Net/libnetFAQ.pod +++ b/gnu/usr.bin/perl/cpan/libnet/lib/Net/libnetFAQ.pod @@ -9,23 +9,25 @@ libnetFAQ - libnet Frequently Asked Questions This document is distributed with the libnet distribution, and is also available on the libnet web page at - http://search.cpan.org/dist/libnet/ +L =head2 How to contribute to this document You may report corrections, additions, and suggestions on the CPAN Request Tracker at - http://rt.cpan.org/Public/Bug/Report.html?Queue=libnet +L =head1 Author and Copyright Information Copyright (C) 1997-1998 Graham Barr. All rights reserved. -This document is free; you can redistribute it and/or modify it -under the terms of the Artistic License. +This document is free; you can redistribute it and/or modify it under +the same terms as Perl itself, i.e. under the terms of either the GNU +General Public License or the Artistic License, as specified in the +F file. -Steve Hay EFE is now maintaining libnet as of version -1.22_02. +Steve Hay ELE is now maintaining +libnet as of version 1.22_02. =head2 Disclaimer @@ -70,7 +72,7 @@ on any machine that perl runs on. The latest libnet release is always on CPAN, you will find it in - http://search.cpan.org/dist/libnet/ +L =head1 Using Net::FTP diff --git a/gnu/usr.bin/perl/cpan/libnet/t/config.t b/gnu/usr.bin/perl/cpan/libnet/t/config.t index 3c29a03d0dd..897ca211c0c 100755 --- a/gnu/usr.bin/perl/cpan/libnet/t/config.t +++ b/gnu/usr.bin/perl/cpan/libnet/t/config.t @@ -5,15 +5,21 @@ use 5.008001; use strict; use warnings; +use Test::More; + BEGIN { if (!eval { require Socket }) { - print "1..0 # no Socket\n"; exit 0; + plan skip_all => "no Socket"; + } + elsif (ord('A') == 193 && !eval { require Convert::EBCDIC }) { + plan skip_all => "EBCDIC but no Convert::EBCDIC"; + } + else { + plan tests => 10; } + undef *{Socket::inet_aton}; undef *{Socket::inet_ntoa}; - if (ord('A') == 193 && !eval { require Convert::EBCDIC }) { - print "1..0 # EBCDIC but no Convert::EBCDIC\n"; exit 0; - } $INC{'Socket.pm'} = 1; } @@ -45,13 +51,8 @@ sub inet_ntoa { return $names{$_[0]}; } -package main; - -(my $libnet_t = __FILE__) =~ s/config.t/libnet_t.pl/; -require $libnet_t; - -print "1..10\n"; +package main; use Net::Config; ok( exists $INC{'Net/Config.pm'}, 'Net::Config should have been used' ); diff --git a/gnu/usr.bin/perl/cpan/libnet/t/datasend.t b/gnu/usr.bin/perl/cpan/libnet/t/datasend.t index 0aea9d4a39d..7902c17d47e 100755 --- a/gnu/usr.bin/perl/cpan/libnet/t/datasend.t +++ b/gnu/usr.bin/perl/cpan/libnet/t/datasend.t @@ -5,12 +5,17 @@ use 5.008001; use strict; use warnings; +use Test::More; + BEGIN { if (!eval { require Socket }) { - print "1..0 # no Socket\n"; exit 0; + plan skip_all => "no Socket"; + } + elsif (ord('A') == 193 && !eval { require Convert::EBCDIC }) { + plan skip_all => "EBCDIC but no Convert::EBCDIC"; } - if (ord('A') == 193 && !eval { require Convert::EBCDIC }) { - print "1..0 # EBCDIC but no Convert::EBCDIC\n"; exit 0; + else { + plan tests => 54; } } @@ -41,11 +46,6 @@ BEGIN { } } -(my $libnet_t = __FILE__) =~ s/datasend.t/libnet_t.pl/; -require $libnet_t or die; - -print "1..54\n"; - sub check { my $expect = pop; my $cmd = Foo->new; diff --git a/gnu/usr.bin/perl/cpan/libnet/t/ftp.t b/gnu/usr.bin/perl/cpan/libnet/t/ftp.t index 16cb868460b..69af504a527 100755 --- a/gnu/usr.bin/perl/cpan/libnet/t/ftp.t +++ b/gnu/usr.bin/perl/cpan/libnet/t/ftp.t @@ -7,7 +7,7 @@ use warnings; BEGIN { if (!eval { require Socket }) { - print "1..0 # Skip: no Socket module\n"; exit 0; + print "1..0 # Skip: no Socket\n"; exit 0; } if (ord('A') == 193 && !eval { require Convert::EBCDIC }) { print "1..0 # Skip: EBCDIC but no Convert::EBCDIC\n"; exit 0; diff --git a/gnu/usr.bin/perl/cpan/libnet/t/hostname.t b/gnu/usr.bin/perl/cpan/libnet/t/hostname.t index 55031bf3450..5e20b819a9a 100755 --- a/gnu/usr.bin/perl/cpan/libnet/t/hostname.t +++ b/gnu/usr.bin/perl/cpan/libnet/t/hostname.t @@ -7,10 +7,10 @@ use warnings; BEGIN { if (!eval { require Socket }) { - print "1..0 # no Socket\n"; exit 0; + print "1..0 # Skip: no Socket\n"; exit 0; } if (ord('A') == 193 && !eval { require Convert::EBCDIC }) { - print "1..0 # EBCDIC but no Convert::EBCDIC\n"; exit 0; + print "1..0 # Skip: EBCDIC but no Convert::EBCDIC\n"; exit 0; } } @@ -18,7 +18,7 @@ use Net::Domain qw(hostname domainname hostdomain hostfqdn); use Net::Config; unless($NetConfig{test_hosts}) { - print "1..0\n"; + print "1..0 # Skip: test_hosts not enabled in config\n"; exit 0; } diff --git a/gnu/usr.bin/perl/cpan/libnet/t/libnet_t.pl b/gnu/usr.bin/perl/cpan/libnet/t/libnet_t.pl deleted file mode 100644 index cc512ca592c..00000000000 --- a/gnu/usr.bin/perl/cpan/libnet/t/libnet_t.pl +++ /dev/null @@ -1,41 +0,0 @@ -use 5.008001; - -use strict; -use warnings; - -my $number = 0; -sub ok { - my ($condition, $name) = @_; - - my $message = $condition ? "ok " : "not ok "; - $message .= ++$number; - $message .= " # $name" if defined $name; - print $message, "\n"; - return $condition; -} - -sub is { - my ($got, $expected, $name) = @_; - - for ($got, $expected) { - $_ = 'undef' unless defined $_; - } - - unless (ok($got eq $expected, $name)) { - warn "Got: '$got'\nExpected: '$expected'\n" . join(' ', caller) . "\n"; - } -} - -sub skip { - my ($reason, $num) = @_; - $reason ||= ''; - $number ||= 1; - - for (1 .. $num) { - $number++; - print "ok $number # skip $reason\n"; - } -} - -1; - diff --git a/gnu/usr.bin/perl/cpan/libnet/t/netrc.t b/gnu/usr.bin/perl/cpan/libnet/t/netrc.t index e270b368bc2..ba0183c1a5c 100755 --- a/gnu/usr.bin/perl/cpan/libnet/t/netrc.t +++ b/gnu/usr.bin/perl/cpan/libnet/t/netrc.t @@ -5,17 +5,21 @@ use 5.008001; use strict; use warnings; +use Test::More; + BEGIN { if (!eval { require Socket }) { - print "1..0 # no Socket\n"; exit 0; + plan skip_all => "no Socket"; + } + elsif (ord('A') == 193 && !eval { require Convert::EBCDIC }) { + plan skip_all => "EBCDIC but no Convert::EBCDIC"; } - if (ord('A') == 193 && !eval { require Convert::EBCDIC }) { - print "1..0 # EBCDIC but no Convert::EBCDIC\n"; exit 0; + else { + plan tests => 20; } } use Cwd; -print "1..20\n"; # for testing _readrc $ENV{HOME} = Cwd::cwd(); @@ -36,9 +40,6 @@ my @stat; # for testing _readrc $INC{'FileHandle.pm'} = 1; -(my $libnet_t = __FILE__) =~ s/\w+.t$/libnet_t.pl/; -require $libnet_t; - # now that the tricks are out of the way... eval { require Net::Netrc; }; ok( !$@, 'should be able to require() Net::Netrc safely' ); diff --git a/gnu/usr.bin/perl/cpan/libnet/t/nntp.t b/gnu/usr.bin/perl/cpan/libnet/t/nntp.t index 559f3985548..b346caaf533 100755 --- a/gnu/usr.bin/perl/cpan/libnet/t/nntp.t +++ b/gnu/usr.bin/perl/cpan/libnet/t/nntp.t @@ -7,10 +7,10 @@ use warnings; BEGIN { if (!eval { require Socket }) { - print "1..0 # no Socket\n"; exit 0; + print "1..0 # Skip: no Socket\n"; exit 0; } if (ord('A') == 193 && !eval { require Convert::EBCDIC }) { - print "1..0 # EBCDIC but no Convert::EBCDIC\n"; exit 0; + print "1..0 # Skip: EBCDIC but no Convert::EBCDIC\n"; exit 0; } } @@ -18,8 +18,13 @@ use Net::Config; use Net::NNTP; use Net::Cmd qw(CMD_REJECT); -unless(@{$NetConfig{nntp_hosts}} && $NetConfig{test_hosts}) { - print "1..0\n"; +unless(@{$NetConfig{nntp_hosts}}) { + print "1..0 # Skip: no nntp_hosts defined in config\n"; + exit; +} + +unless($NetConfig{test_hosts}) { + print "1..0 # Skip: test_hosts not enabled in config\n"; exit; } diff --git a/gnu/usr.bin/perl/cpan/libnet/t/nntp_ipv6.t b/gnu/usr.bin/perl/cpan/libnet/t/nntp_ipv6.t index 768489a1afd..af1ba1631ef 100644 --- a/gnu/usr.bin/perl/cpan/libnet/t/nntp_ipv6.t +++ b/gnu/usr.bin/perl/cpan/libnet/t/nntp_ipv6.t @@ -5,10 +5,20 @@ use 5.008001; use strict; use warnings; +use Test::More; + +BEGIN { + if (!eval { require Socket }) { + plan skip_all => "no Socket"; + } + elsif (ord('A') == 193 && !eval { require Convert::EBCDIC }) { + plan skip_all => "EBCDIC but no Convert::EBCDIC"; + } +} + use Config; use File::Temp 'tempfile'; use Net::NNTP; -use Test::More; my $debug = 0; # Net::NNTP->new( Debug => .. ) diff --git a/gnu/usr.bin/perl/cpan/libnet/t/pop3_ipv6.t b/gnu/usr.bin/perl/cpan/libnet/t/pop3_ipv6.t index db311283e06..e68412279ce 100644 --- a/gnu/usr.bin/perl/cpan/libnet/t/pop3_ipv6.t +++ b/gnu/usr.bin/perl/cpan/libnet/t/pop3_ipv6.t @@ -5,10 +5,20 @@ use 5.008001; use strict; use warnings; +use Test::More; + +BEGIN { + if (!eval { require Socket }) { + plan skip_all => "no Socket"; + } + elsif (ord('A') == 193 && !eval { require Convert::EBCDIC }) { + plan skip_all => "EBCDIC but no Convert::EBCDIC"; + } +} + use Config; use File::Temp 'tempfile'; use Net::POP3; -use Test::More; my $debug = 0; # Net::POP3->new( Debug => .. ) diff --git a/gnu/usr.bin/perl/cpan/libnet/t/require.t b/gnu/usr.bin/perl/cpan/libnet/t/require.t index 70ec1f67f09..cc14b4bc0d6 100755 --- a/gnu/usr.bin/perl/cpan/libnet/t/require.t +++ b/gnu/usr.bin/perl/cpan/libnet/t/require.t @@ -7,10 +7,10 @@ use warnings; BEGIN { if (!eval { require Socket }) { - print "1..0 # no Socket\n"; exit 0; + print "1..0 # Skip: no Socket\n"; exit 0; } if (ord('A') == 193 && !eval { require Convert::EBCDIC }) { - print "1..0 # EBCDIC but no Convert::EBCDIC\n"; exit 0; + print "1..0 # Skip: EBCDIC but no Convert::EBCDIC\n"; exit 0; } } diff --git a/gnu/usr.bin/perl/cpan/libnet/t/smtp.t b/gnu/usr.bin/perl/cpan/libnet/t/smtp.t index 9d6f65a484d..e2cd6eb83ef 100755 --- a/gnu/usr.bin/perl/cpan/libnet/t/smtp.t +++ b/gnu/usr.bin/perl/cpan/libnet/t/smtp.t @@ -7,18 +7,23 @@ use warnings; BEGIN { if (!eval { require Socket }) { - print "1..0 # no Socket\n"; exit 0; + print "1..0 # Skip: no Socket\n"; exit 0; } - if (ord('A') == 193 && eval { require Convert::EBCDIC }) { - print "1..0 # EBCDIC but no Convert::EBCDIC\n"; exit 0; + if (ord('A') == 193 && !eval { require Convert::EBCDIC }) { + print "1..0 # Skip: EBCDIC but no Convert::EBCDIC\n"; exit 0; } } use Net::Config; use Net::SMTP; -unless(@{$NetConfig{smtp_hosts}} && $NetConfig{test_hosts}) { - print "1..0\n"; +unless(@{$NetConfig{smtp_hosts}}) { + print "1..0 # Skip: no smtp_hosts defined in config\n"; + exit 0; +} + +unless($NetConfig{test_hosts}) { + print "1..0 # Skip: test_hosts not enabled in config\n"; exit 0; } diff --git a/gnu/usr.bin/perl/cpan/libnet/t/smtp_ipv6.t b/gnu/usr.bin/perl/cpan/libnet/t/smtp_ipv6.t index f430721dcc2..d0bdb906bba 100644 --- a/gnu/usr.bin/perl/cpan/libnet/t/smtp_ipv6.t +++ b/gnu/usr.bin/perl/cpan/libnet/t/smtp_ipv6.t @@ -5,10 +5,20 @@ use 5.008001; use strict; use warnings; +use Test::More; + +BEGIN { + if (!eval { require Socket }) { + plan skip_all => "no Socket"; + } + elsif (ord('A') == 193 && !eval { require Convert::EBCDIC }) { + plan skip_all => "EBCDIC but no Convert::EBCDIC"; + } +} + use Config; use File::Temp 'tempfile'; use Net::SMTP; -use Test::More; my $debug = 0; # Net::SMTP->new( Debug => .. ) diff --git a/gnu/usr.bin/perl/cpan/libnet/t/time.t b/gnu/usr.bin/perl/cpan/libnet/t/time.t index 6dcba3a3e05..1b02d606cf6 100755 --- a/gnu/usr.bin/perl/cpan/libnet/t/time.t +++ b/gnu/usr.bin/perl/cpan/libnet/t/time.t @@ -5,22 +5,24 @@ use 5.008001; use strict; use warnings; +use Test::More; + BEGIN { if (!eval { require Socket }) { - print "1..0 # no Socket\n"; exit 0; + plan skip_all => "no Socket"; + } + elsif (ord('A') == 193 && !eval { require Convert::EBCDIC }) { + plan skip_all => "EBCDIC but no Convert::EBCDIC"; } - if (ord('A') == 193 && !eval { require Convert::EBCDIC }) { - print "1..0 # EBCDIC but no Convert::EBCDIC\n"; exit 0; + else { + plan tests => 12; } + $INC{'IO/Socket.pm'} = 1; $INC{'IO/Select.pm'} = 1; $INC{'IO/Socket/INET.pm'} = 1; } -(my $libnet_t = __FILE__) =~ s/time.t/libnet_t.pl/; -require $libnet_t; - -print "1..12\n"; # cannot use(), otherwise it will use IO::Socket and IO::Select eval{ require Net::Time; }; ok( !$@, 'should be able to require() Net::Time safely' ); diff --git a/gnu/usr.bin/perl/cpan/perlfaq/lib/perlfaq.pm b/gnu/usr.bin/perl/cpan/perlfaq/lib/perlfaq.pm index c8016cf5233..b1d29115e99 100644 --- a/gnu/usr.bin/perl/cpan/perlfaq/lib/perlfaq.pm +++ b/gnu/usr.bin/perl/cpan/perlfaq/lib/perlfaq.pm @@ -2,6 +2,6 @@ use strict; use warnings; package perlfaq; -our $VERSION = '5.20200523'; +our $VERSION = '5.20210520'; 1; diff --git a/gnu/usr.bin/perl/cpan/perlfaq/lib/perlfaq.pod b/gnu/usr.bin/perl/cpan/perlfaq/lib/perlfaq.pod index 3b7345aa64a..69529dc1e3f 100644 --- a/gnu/usr.bin/perl/cpan/perlfaq/lib/perlfaq.pod +++ b/gnu/usr.bin/perl/cpan/perlfaq/lib/perlfaq.pod @@ -4,7 +4,7 @@ perlfaq - Frequently asked questions about Perl =head1 VERSION -version 5.20200523 +version 5.20210520 =head1 DESCRIPTION @@ -15,7 +15,7 @@ into nine major sections outlined in this document. =head2 Where to find the perlfaq The perlfaq is an evolving document. Read the latest version at -L. It is also included in the standard Perl +L. It is also included in the standard Perl distribution. =head2 How to use the perlfaq @@ -35,9 +35,8 @@ Review L. If you don't find your suggestion create an issue or pull request against L. -Once approved, changes are merged into L, the -repository which drives L, and they are -distributed with the next Perl 5 release. +Once approved, changes will be distributed with the next Perl release and +subsequently appear at L. =head2 What if my question isn't answered in the FAQ? @@ -476,6 +475,10 @@ How can I expand variables in text strings? =item * +Does Perl have anything like Ruby's #{} or Python's f string? + +=item * + What's wrong with always quoting "$vars"? =item * diff --git a/gnu/usr.bin/perl/cpan/perlfaq/lib/perlfaq1.pod b/gnu/usr.bin/perl/cpan/perlfaq/lib/perlfaq1.pod index 0ec9f16161c..0b9f057aa0a 100644 --- a/gnu/usr.bin/perl/cpan/perlfaq/lib/perlfaq1.pod +++ b/gnu/usr.bin/perl/cpan/perlfaq/lib/perlfaq1.pod @@ -4,7 +4,7 @@ perlfaq1 - General Questions About Perl =head1 VERSION -version 5.20200523 +version 5.20210520 =head1 DESCRIPTION diff --git a/gnu/usr.bin/perl/cpan/perlfaq/lib/perlfaq2.pod b/gnu/usr.bin/perl/cpan/perlfaq/lib/perlfaq2.pod index 447ad087eb6..8decd7b97bf 100644 --- a/gnu/usr.bin/perl/cpan/perlfaq/lib/perlfaq2.pod +++ b/gnu/usr.bin/perl/cpan/perlfaq/lib/perlfaq2.pod @@ -4,7 +4,7 @@ perlfaq2 - Obtaining and Learning about Perl =head1 VERSION -version 5.20200523 +version 5.20210520 =head1 DESCRIPTION @@ -230,7 +230,7 @@ wanted to report a bug in L, you could send a message to bug-Business-ISBN@rt.cpan.org . Some modules might have special reporting requirements, such as a -Github or Google Code tracking system, so you should check the +GitHub or Google Code tracking system, so you should check the module documentation too. =head1 AUTHOR AND COPYRIGHT diff --git a/gnu/usr.bin/perl/cpan/perlfaq/lib/perlfaq3.pod b/gnu/usr.bin/perl/cpan/perlfaq/lib/perlfaq3.pod index 481c3c94674..4d20af44343 100644 --- a/gnu/usr.bin/perl/cpan/perlfaq/lib/perlfaq3.pod +++ b/gnu/usr.bin/perl/cpan/perlfaq/lib/perlfaq3.pod @@ -4,7 +4,7 @@ perlfaq3 - Programming Tools =head1 VERSION -version 5.20200523 +version 5.20210520 =head1 DESCRIPTION diff --git a/gnu/usr.bin/perl/cpan/perlfaq/lib/perlfaq4.pod b/gnu/usr.bin/perl/cpan/perlfaq/lib/perlfaq4.pod index 1a20aba2e71..2ebcd2b43d4 100644 --- a/gnu/usr.bin/perl/cpan/perlfaq/lib/perlfaq4.pod +++ b/gnu/usr.bin/perl/cpan/perlfaq/lib/perlfaq4.pod @@ -4,7 +4,7 @@ perlfaq4 - Data Manipulation =head1 VERSION -version 5.20200523 +version 5.20210520 =head1 DESCRIPTION @@ -1120,6 +1120,53 @@ signal that I missed something: print $string; + +=head2 Does Perl have anything like Ruby's #{} or Python's f string? + +Unlike the others, Perl allows you to embed a variable naked in a double +quoted string, e.g. C<"variable $variable">. When there isn't whitespace or +other non-word characters following the variable name, you can add braces +(e.g. C<"foo ${foo}bar">) to ensure correct parsing. + +An array can also be embedded directly in a string, and will be expanded +by default with spaces between the elements. The default +L can be changed by assigning a +different string to the special variable C<$">, such as C. + +Perl also supports references within a string providing the equivalent of +the features in the other two languages. + +C<${\ ... }> embedded within a string will work for most simple statements +such as an object->method call. More complex code can be wrapped in a do +block C<${\ do{...} }>. + +When you want a list to be expanded per C<$">, use C<@{[ ... ]}>. + + use Time::Piece; + use Time::Seconds; + my $scalar = 'STRING'; + my @array = ( 'zorro', 'a', 1, 'B', 3 ); + + # Print the current date and time and then Tommorrow + my $t = Time::Piece->new; + say "Now is: ${\ $t->cdate() }"; + say "Tomorrow: ${\ do{ my $T=Time::Piece->new + ONE_DAY ; $T->fullday }}"; + + # some variables in strings + say "This is some scalar I have $scalar, this is an array @array."; + say "You can also write it like this ${scalar} @{array}."; + + # Change the $LIST_SEPARATOR + local $" = ':'; + say "Set \$\" to delimit with ':' and sort the Array @{[ sort @array ]}"; + +You may also want to look at the module +L, and templating tools such as L and +L. + +See also: L and +L in this FAQ. + =head2 What's wrong with always quoting "$vars"? The problem is that those double-quotes force diff --git a/gnu/usr.bin/perl/cpan/perlfaq/lib/perlfaq5.pod b/gnu/usr.bin/perl/cpan/perlfaq/lib/perlfaq5.pod index a7fc0eabd12..2dee8a28a92 100644 --- a/gnu/usr.bin/perl/cpan/perlfaq/lib/perlfaq5.pod +++ b/gnu/usr.bin/perl/cpan/perlfaq/lib/perlfaq5.pod @@ -4,7 +4,7 @@ perlfaq5 - Files and Formats =head1 VERSION -version 5.20200523 +version 5.20210520 =head1 DESCRIPTION @@ -1165,13 +1165,6 @@ You can also use a localized C<@ARGV> to eliminate the C: my $var = do { local( @ARGV, $/ ) = $file; <> }; -For ordinary files you can also use the C function. - - read( $fh, $var, -s $fh ); - -That third argument tests the byte size of the data on the C<$fh> filehandle -and reads that many bytes into the buffer C<$var>. - =head2 How can I read in a file by paragraphs? X diff --git a/gnu/usr.bin/perl/cpan/perlfaq/lib/perlfaq6.pod b/gnu/usr.bin/perl/cpan/perlfaq/lib/perlfaq6.pod index 9a45f0e6703..bb038952131 100644 --- a/gnu/usr.bin/perl/cpan/perlfaq/lib/perlfaq6.pod +++ b/gnu/usr.bin/perl/cpan/perlfaq/lib/perlfaq6.pod @@ -4,7 +4,7 @@ perlfaq6 - Regular Expressions =head1 VERSION -version 5.20200523 +version 5.20210520 =head1 DESCRIPTION @@ -692,47 +692,34 @@ X (contributed by brian d foy) -If you have Perl 5.10 or later, this is almost trivial. You just smart -match against an array of regular expression objects: - - my @patterns = ( qr/Fr.d/, qr/B.rn.y/, qr/W.lm./ ); - - if( $string ~~ @patterns ) { - ... - }; - -The smart match stops when it finds a match, so it doesn't have to try -every expression. - -Earlier than Perl 5.10, you have a bit of work to do. You want to +You want to avoid compiling a regular expression every time you want to match it. In this example, perl must recompile the regular expression for every -iteration of the C loop since it has no way to know what -C<$pattern> will be: +iteration of the C loop since C<$pattern> can change: - my @patterns = qw( foo bar baz ); + my @patterns = qw( fo+ ba[rz] ); - LINE: while( ) { - foreach $pattern ( @patterns ) { - if( /\b$pattern\b/i ) { - print; + LINE: while( my $line = <> ) { + foreach my $pattern ( @patterns ) { + if( $line =~ m/\b$pattern\b/i ) { + print $line; next LINE; } } } -The C operator showed up in perl 5.005. It compiles a regular +The C operator compiles a regular expression, but doesn't apply it. When you use the pre-compiled version of the regex, perl does less work. In this example, I inserted a C to turn each pattern into its pre-compiled form. The rest of the script is the same, but faster: - my @patterns = map { qr/\b$_\b/i } qw( foo bar baz ); + my @patterns = map { qr/\b$_\b/i } qw( fo+ ba[rz] ); - LINE: while( <> ) { - foreach $pattern ( @patterns ) { - if( /$pattern/ ) { - print; + LINE: while( my $line = <> ) { + foreach my $pattern ( @patterns ) { + if( $line =~ m/$pattern/ ) { + print $line; next LINE; } } @@ -740,14 +727,18 @@ the script is the same, but faster: In some cases, you may be able to make several patterns into a single regular expression. Beware of situations that require backtracking -though. +though. In this example, the regex is only compiled once because +C<$regex> doesn't change between iterations: - my $regex = join '|', qw( foo bar baz ); + my $regex = join '|', qw( fo+ ba[rz] ); - LINE: while( <> ) { - print if /\b(?:$regex)\b/i; + while( my $line = <> ) { + print if $line =~ m/\b(?:$regex)\b/i; } +The function L on CPAN can also be used to form +a single regex that matches a list of literal strings (not regexes). + For more details on regular expression efficiency, see I by Jeffrey Friedl. He explains how the regular expressions engine works and why some patterns are surprisingly diff --git a/gnu/usr.bin/perl/cpan/perlfaq/lib/perlfaq7.pod b/gnu/usr.bin/perl/cpan/perlfaq/lib/perlfaq7.pod index a69e0536f08..b8c17f5c3c9 100644 --- a/gnu/usr.bin/perl/cpan/perlfaq/lib/perlfaq7.pod +++ b/gnu/usr.bin/perl/cpan/perlfaq/lib/perlfaq7.pod @@ -4,7 +4,7 @@ perlfaq7 - General Perl Language Issues =head1 VERSION -version 5.20200523 +version 5.20210520 =head1 DESCRIPTION diff --git a/gnu/usr.bin/perl/cpan/perlfaq/lib/perlfaq8.pod b/gnu/usr.bin/perl/cpan/perlfaq/lib/perlfaq8.pod index 8ee088a3594..b5829ed5ef4 100644 --- a/gnu/usr.bin/perl/cpan/perlfaq/lib/perlfaq8.pod +++ b/gnu/usr.bin/perl/cpan/perlfaq/lib/perlfaq8.pod @@ -4,7 +4,7 @@ perlfaq8 - System Interaction =head1 VERSION -version 5.20200523 +version 5.20210520 =head1 DESCRIPTION diff --git a/gnu/usr.bin/perl/cpan/perlfaq/lib/perlfaq9.pod b/gnu/usr.bin/perl/cpan/perlfaq/lib/perlfaq9.pod index 15ca2d03b8b..a242fe1665c 100644 --- a/gnu/usr.bin/perl/cpan/perlfaq/lib/perlfaq9.pod +++ b/gnu/usr.bin/perl/cpan/perlfaq/lib/perlfaq9.pod @@ -4,7 +4,7 @@ perlfaq9 - Web, Email and Networking =head1 VERSION -version 5.20200523 +version 5.20210520 =head1 DESCRIPTION diff --git a/gnu/usr.bin/perl/cpan/perlfaq/lib/perlglossary.pod b/gnu/usr.bin/perl/cpan/perlfaq/lib/perlglossary.pod index 2e7eedad3c5..8c8701eb54e 100644 --- a/gnu/usr.bin/perl/cpan/perlfaq/lib/perlglossary.pod +++ b/gnu/usr.bin/perl/cpan/perlfaq/lib/perlglossary.pod @@ -7,7 +7,7 @@ perlglossary - Perl Glossary =head1 VERSION -version 5.20200523 +version 5.20210520 =head1 DESCRIPTION @@ -2642,7 +2642,7 @@ C
. Formerly, a reference XXto an array whose initial element happens to hold a reference to a hash. You used to be able to treat a pseudohash reference as either an array reference or a hash -reference. Pseduohashes are no longer supported. +reference. Pseudohashes are no longer supported. =item pseudoliteral diff --git a/gnu/usr.bin/perl/cpan/podlators/lib/Pod/Man.pm b/gnu/usr.bin/perl/cpan/podlators/lib/Pod/Man.pm index 45fd9bc0527..d7c029357a2 100644 --- a/gnu/usr.bin/perl/cpan/podlators/lib/Pod/Man.pm +++ b/gnu/usr.bin/perl/cpan/podlators/lib/Pod/Man.pm @@ -900,8 +900,6 @@ sub devise_title { $cut = $i + 1; $cut++ if ($dirs[$i + 1] && $dirs[$i + 1] eq 'lib'); last; - } elsif ($dirs[$i] eq 'lib' && $dirs[$i + 1] && $dirs[0] eq 'ext') { - $cut = $i + 1; } } if ($cut > 0) { diff --git a/gnu/usr.bin/perl/cpan/podlators/scripts/pod2man.PL b/gnu/usr.bin/perl/cpan/podlators/scripts/pod2man.PL index abaa1083b7b..d6e685d2010 100644 --- a/gnu/usr.bin/perl/cpan/podlators/scripts/pod2man.PL +++ b/gnu/usr.bin/perl/cpan/podlators/scripts/pod2man.PL @@ -71,13 +71,12 @@ my $stdin; # Parse our options, trying to retain backward compatibility with pod2man but # allowing short forms as well. --lax is currently ignored. my %options; -$options{utf8} = 1; Getopt::Long::config ('bundling_override'); GetOptions (\%options, 'center|c=s', 'date|d=s', 'errors=s', 'fixed=s', 'fixedbold=s', 'fixeditalic=s', 'fixedbolditalic=s', 'help|h', 'lax|l', 'lquote=s', 'name|n=s', 'nourls', 'official|o', 'quotes|q=s', 'release|r=s', 'rquote=s', 'section|s=s', 'stderr', - 'verbose|v', 'utf8|u!') + 'verbose|v', 'utf8|u') or exit 1; pod2usage (0) if $options{help}; @@ -127,7 +126,7 @@ exit $status; __END__ =for stopwords -en em --stderr stderr --no-utf8 UTF-8 overdo markup MT-LEVEL Allbery Solaris URL +en em --stderr stderr --utf8 UTF-8 overdo markup MT-LEVEL Allbery Solaris URL troff troff-specific formatters uppercased Christiansen --nourls UTC prepend lquote rquote @@ -142,7 +141,7 @@ pod2man [B<--center>=I] [B<--date>=I] [B<--errors>=I
; these require +special handling. + +=cut +*/ + void Perl_pmop_dump(pTHX_ PMOP *pm) { @@ -929,22 +983,21 @@ Perl_pmop_dump(pTHX_ PMOP *pm) STATIC UV S_sequence_num(pTHX_ const OP *o) { - dVAR; SV *op, **seq; const char *key; STRLEN len; if (!o) - return 0; + return 0; op = newSVuv(PTR2UV(o)); sv_2mortal(op); key = SvPV_const(op, len); if (!PL_op_sequence) - PL_op_sequence = newHV(); - seq = hv_fetch(PL_op_sequence, key, len, 0); - if (seq) - return SvUV(*seq); - (void)hv_store(PL_op_sequence, key, len, newSVuv(++PL_op_seq), 0); + PL_op_sequence = newHV(); + seq = hv_fetch(PL_op_sequence, key, len, TRUE); + if (SvOK(*seq)) + return SvUV(*seq); + sv_setuv(*seq, ++PL_op_seq); return PL_op_seq; } @@ -1040,7 +1093,7 @@ S_do_op_dump_bar(pTHX_ I32 level, UV bar, PerlIO *file, const OP *o) } if (o->op_targ && optype != OP_NULL) - S_opdump_indent(aTHX_ o, level, bar, file, "TARG = %ld\n", + S_opdump_indent(aTHX_ o, level, bar, file, "TARG = %ld\n", (long)o->op_targ); if (o->op_flags || o->op_slabbed || o->op_savefree || o->op_static) { @@ -1148,10 +1201,10 @@ S_do_op_dump_bar(pTHX_ I32 level, UV bar, PerlIO *file, const OP *o) Perl_sv_catpvf(aTHX_ tmpsv, "0x%" UVxf, (UV)oppriv); } } - if (tmpsv && SvCUR(tmpsv)) { + if (tmpsv && SvCUR(tmpsv)) { S_opdump_indent(aTHX_ o, level, bar, file, "PRIVATE = (%s)\n", SvPVX_const(tmpsv) + 1); - } else + } else S_opdump_indent(aTHX_ o, level, bar, file, "PRIVATE = (0x%" UVxf ")\n", (UV)oppriv); } @@ -1161,36 +1214,36 @@ S_do_op_dump_bar(pTHX_ I32 level, UV bar, PerlIO *file, const OP *o) case OP_GVSV: case OP_GV: #ifdef USE_ITHREADS - S_opdump_indent(aTHX_ o, level, bar, file, + S_opdump_indent(aTHX_ o, level, bar, file, "PADIX = %" IVdf "\n", (IV)cPADOPo->op_padix); #else S_opdump_indent(aTHX_ o, level, bar, file, "GV = %" SVf " (0x%" UVxf ")\n", SVfARG(S_gv_display(aTHX_ cGVOPo_gv)), PTR2UV(cGVOPo_gv)); #endif - break; + break; case OP_MULTIDEREF: { UNOP_AUX_item *items = cUNOP_AUXo->op_aux; UV i, count = items[-1].uv; - S_opdump_indent(aTHX_ o, level, bar, file, "ARGS = \n"); + S_opdump_indent(aTHX_ o, level, bar, file, "ARGS = \n"); for (i=0; i < count; i++) S_opdump_indent(aTHX_ o, level+1, (bar << 1), file, "%" UVuf " => 0x%" UVxf "\n", i, items[i].uv); - break; + break; } case OP_MULTICONCAT: - S_opdump_indent(aTHX_ o, level, bar, file, "NARGS = %" IVdf "\n", + S_opdump_indent(aTHX_ o, level, bar, file, "NARGS = %" IVdf "\n", (IV)cUNOP_AUXo->op_aux[PERL_MULTICONCAT_IX_NARGS].ssize); /* XXX really ought to dump each field individually, * but that's too much like hard work */ - S_opdump_indent(aTHX_ o, level, bar, file, "CONSTS = (%" SVf ")\n", + S_opdump_indent(aTHX_ o, level, bar, file, "CONSTS = (%" SVf ")\n", SVfARG(multiconcat_stringify(o))); - break; + break; case OP_CONST: case OP_HINTSEVAL: @@ -1199,21 +1252,21 @@ S_do_op_dump_bar(pTHX_ I32 level, UV bar, PerlIO *file, const OP *o) case OP_METHOD_REDIR: case OP_METHOD_REDIR_SUPER: #ifndef USE_ITHREADS - /* with ITHREADS, consts are stored in the pad, and the right pad - * may not be active here, so skip */ - S_opdump_indent(aTHX_ o, level, bar, file, "SV = %s\n", + /* with ITHREADS, consts are stored in the pad, and the right pad + * may not be active here, so skip */ + S_opdump_indent(aTHX_ o, level, bar, file, "SV = %s\n", SvPEEK(cMETHOPx_meth(o))); #endif - break; + break; case OP_NULL: - if (o->op_targ != OP_NEXTSTATE && o->op_targ != OP_DBSTATE) - break; - /* FALLTHROUGH */ + if (o->op_targ != OP_NEXTSTATE && o->op_targ != OP_DBSTATE) + break; + /* FALLTHROUGH */ case OP_NEXTSTATE: case OP_DBSTATE: - if (CopLINE(cCOPo)) - S_opdump_indent(aTHX_ o, level, bar, file, "LINE = %" UVuf "\n", - (UV)CopLINE(cCOPo)); + if (CopLINE(cCOPo)) + S_opdump_indent(aTHX_ o, level, bar, file, "LINE = %" UVuf "\n", + (UV)CopLINE(cCOPo)); if (CopSTASHPV(cCOPo)) { SV* tmpsv = newSVpvs_flags("", SVs_TEMP); @@ -1238,17 +1291,17 @@ S_do_op_dump_bar(pTHX_ I32 level, UV bar, PerlIO *file, const OP *o) S_opdump_indent(aTHX_ o, level, bar, file, "SEQ = %u\n", (unsigned int)cCOPo->cop_seq); - break; + break; case OP_ENTERITER: case OP_ENTERLOOP: - S_opdump_indent(aTHX_ o, level, bar, file, "REDO"); + S_opdump_indent(aTHX_ o, level, bar, file, "REDO"); S_opdump_link(aTHX_ o, cLOOPo->op_redoop, file); - S_opdump_indent(aTHX_ o, level, bar, file, "NEXT"); + S_opdump_indent(aTHX_ o, level, bar, file, "NEXT"); S_opdump_link(aTHX_ o, cLOOPo->op_nextop, file); - S_opdump_indent(aTHX_ o, level, bar, file, "LAST"); + S_opdump_indent(aTHX_ o, level, bar, file, "LAST"); S_opdump_link(aTHX_ o, cLOOPo->op_lastop, file); - break; + break; case OP_REGCOMP: case OP_SUBSTCONT: @@ -1267,33 +1320,33 @@ S_do_op_dump_bar(pTHX_ I32 level, UV bar, PerlIO *file, const OP *o) case OP_ENTERWHEN: case OP_ENTERTRY: case OP_ONCE: - S_opdump_indent(aTHX_ o, level, bar, file, "OTHER"); + S_opdump_indent(aTHX_ o, level, bar, file, "OTHER"); S_opdump_link(aTHX_ o, cLOGOPo->op_other, file); - break; + break; case OP_SPLIT: case OP_MATCH: case OP_QR: case OP_SUBST: - S_do_pmop_dump_bar(aTHX_ level, bar, file, cPMOPo); - break; + S_do_pmop_dump_bar(aTHX_ level, bar, file, cPMOPo); + break; case OP_LEAVE: case OP_LEAVEEVAL: case OP_LEAVESUB: case OP_LEAVESUBLV: case OP_LEAVEWRITE: case OP_SCOPE: - if (o->op_private & OPpREFCOUNTED) - S_opdump_indent(aTHX_ o, level, bar, file, + if (o->op_private & OPpREFCOUNTED) + S_opdump_indent(aTHX_ o, level, bar, file, "REFCNT = %" UVuf "\n", (UV)o->op_targ); - break; + break; case OP_DUMP: case OP_GOTO: case OP_NEXT: case OP_LAST: case OP_REDO: - if (o->op_flags & (OPf_SPECIAL|OPf_STACKED|OPf_KIDS)) - break; + if (o->op_flags & (OPf_SPECIAL|OPf_STACKED|OPf_KIDS)) + break; { SV * const label = newSVpvs_flags("", SVs_TEMP); generic_pv_escape(label, cPVOPo->op_pv, strlen(cPVOPo->op_pv), 0); @@ -1308,8 +1361,8 @@ S_do_op_dump_bar(pTHX_ I32 level, UV bar, PerlIO *file, const OP *o) if (o->op_private & OPpTRANS_USE_SVOP) { /* utf8: table stored as an inversion map */ #ifndef USE_ITHREADS - /* with ITHREADS, it is stored in the pad, and the right pad - * may not be active here, so skip */ + /* with ITHREADS, it is stored in the pad, and the right pad + * may not be active here, so skip */ S_opdump_indent(aTHX_ o, level, bar, file, "INVMAP = 0x%" UVxf "\n", PTR2UV(MUTABLE_SV(cSVOPo->op_sv))); @@ -1344,14 +1397,14 @@ S_do_op_dump_bar(pTHX_ I32 level, UV bar, PerlIO *file, const OP *o) default: - break; + break; } if (o->op_flags & OPf_KIDS) { - OP *kid; + OP *kid; level++; bar <<= 1; - for (kid = cUNOPo->op_first; kid; kid = OpSIBLING(kid)) - S_do_op_dump_bar(aTHX_ level, + for (kid = cUNOPo->op_first; kid; kid = OpSIBLING(kid)) + S_do_op_dump_bar(aTHX_ level, (bar | cBOOL(OpHAS_SIBLING(kid))), file, kid); } @@ -1380,6 +1433,15 @@ Perl_op_dump(pTHX_ const OP *o) do_op_dump(0, Perl_debug_log, o); } +/* +=for apidoc gv_dump + +Dump the name and, if they differ, the effective name of the GV C to +C. + +=cut +*/ + void Perl_gv_dump(pTHX_ GV *gv) { @@ -1388,8 +1450,8 @@ Perl_gv_dump(pTHX_ GV *gv) SV *sv, *tmp = newSVpvs_flags("", SVs_TEMP); if (!gv) { - PerlIO_printf(Perl_debug_log, "{}\n"); - return; + PerlIO_printf(Perl_debug_log, "{}\n"); + return; } sv = sv_newmortal(); PerlIO_printf(Perl_debug_log, "{\n"); @@ -1398,7 +1460,7 @@ Perl_gv_dump(pTHX_ GV *gv) Perl_dump_indent(aTHX_ 1, Perl_debug_log, "GV_NAME = %s", generic_pv_escape( tmp, name, len, SvUTF8(sv) )); if (gv != GvEGV(gv)) { - gv_efullname3(sv, GvEGV(gv), NULL); + gv_efullname3(sv, GvEGV(gv), NULL); name = SvPV_const(sv, len); Perl_dump_indent(aTHX_ 1, Perl_debug_log, "-> %s", generic_pv_escape( tmp, name, len, SvUTF8(sv) )); @@ -1414,8 +1476,8 @@ Perl_gv_dump(pTHX_ GV *gv) static const struct { const char type; const char *name; } magic_names[] = { #include "mg_names.inc" - /* this null string terminates the list */ - { 0, NULL }, + /* this null string terminates the list */ + { 0, NULL }, }; void @@ -1425,123 +1487,131 @@ Perl_do_magic_dump(pTHX_ I32 level, PerlIO *file, const MAGIC *mg, I32 nest, I32 for (; mg; mg = mg->mg_moremagic) { Perl_dump_indent(aTHX_ level, file, - " MAGIC = 0x%" UVxf "\n", PTR2UV(mg)); + " MAGIC = 0x%" UVxf "\n", PTR2UV(mg)); if (mg->mg_virtual) { const MGVTBL * const v = mg->mg_virtual; - if (v >= PL_magic_vtables - && v < PL_magic_vtables + magic_vtable_max) { - const U32 i = v - PL_magic_vtables; - Perl_dump_indent(aTHX_ level, file, " MG_VIRTUAL = &PL_vtbl_%s\n", PL_magic_vtable_names[i]); - } - else - Perl_dump_indent(aTHX_ level, file, " MG_VIRTUAL = 0x%" + if (v >= PL_magic_vtables + && v < PL_magic_vtables + magic_vtable_max) { + const U32 i = v - PL_magic_vtables; + Perl_dump_indent(aTHX_ level, file, " MG_VIRTUAL = &PL_vtbl_%s\n", PL_magic_vtable_names[i]); + } + else + Perl_dump_indent(aTHX_ level, file, " MG_VIRTUAL = 0x%" UVxf "\n", PTR2UV(v)); } - else - Perl_dump_indent(aTHX_ level, file, " MG_VIRTUAL = 0\n"); - - if (mg->mg_private) - Perl_dump_indent(aTHX_ level, file, " MG_PRIVATE = %d\n", mg->mg_private); - - { - int n; - const char *name = NULL; - for (n = 0; magic_names[n].name; n++) { - if (mg->mg_type == magic_names[n].type) { - name = magic_names[n].name; - break; - } - } - if (name) - Perl_dump_indent(aTHX_ level, file, - " MG_TYPE = PERL_MAGIC_%s\n", name); - else - Perl_dump_indent(aTHX_ level, file, - " MG_TYPE = UNKNOWN(\\%o)\n", mg->mg_type); - } + else + Perl_dump_indent(aTHX_ level, file, " MG_VIRTUAL = 0\n"); + + if (mg->mg_private) + Perl_dump_indent(aTHX_ level, file, " MG_PRIVATE = %d\n", mg->mg_private); + + { + int n; + const char *name = NULL; + for (n = 0; magic_names[n].name; n++) { + if (mg->mg_type == magic_names[n].type) { + name = magic_names[n].name; + break; + } + } + if (name) + Perl_dump_indent(aTHX_ level, file, + " MG_TYPE = PERL_MAGIC_%s\n", name); + else + Perl_dump_indent(aTHX_ level, file, + " MG_TYPE = UNKNOWN(\\%o)\n", mg->mg_type); + } if (mg->mg_flags) { Perl_dump_indent(aTHX_ level, file, " MG_FLAGS = 0x%02X\n", mg->mg_flags); - if (mg->mg_type == PERL_MAGIC_envelem && - mg->mg_flags & MGf_TAINTEDDIR) - Perl_dump_indent(aTHX_ level, file, " TAINTEDDIR\n"); - if (mg->mg_type == PERL_MAGIC_regex_global && - mg->mg_flags & MGf_MINMATCH) - Perl_dump_indent(aTHX_ level, file, " MINMATCH\n"); - if (mg->mg_flags & MGf_REFCOUNTED) - Perl_dump_indent(aTHX_ level, file, " REFCOUNTED\n"); + if (mg->mg_type == PERL_MAGIC_envelem && + mg->mg_flags & MGf_TAINTEDDIR) + Perl_dump_indent(aTHX_ level, file, " TAINTEDDIR\n"); + if (mg->mg_type == PERL_MAGIC_regex_global && + mg->mg_flags & MGf_MINMATCH) + Perl_dump_indent(aTHX_ level, file, " MINMATCH\n"); + if (mg->mg_flags & MGf_REFCOUNTED) + Perl_dump_indent(aTHX_ level, file, " REFCOUNTED\n"); if (mg->mg_flags & MGf_GSKIP) - Perl_dump_indent(aTHX_ level, file, " GSKIP\n"); - if (mg->mg_flags & MGf_COPY) - Perl_dump_indent(aTHX_ level, file, " COPY\n"); - if (mg->mg_flags & MGf_DUP) - Perl_dump_indent(aTHX_ level, file, " DUP\n"); - if (mg->mg_flags & MGf_LOCAL) - Perl_dump_indent(aTHX_ level, file, " LOCAL\n"); - if (mg->mg_type == PERL_MAGIC_regex_global && - mg->mg_flags & MGf_BYTES) - Perl_dump_indent(aTHX_ level, file, " BYTES\n"); + Perl_dump_indent(aTHX_ level, file, " GSKIP\n"); + if (mg->mg_flags & MGf_COPY) + Perl_dump_indent(aTHX_ level, file, " COPY\n"); + if (mg->mg_flags & MGf_DUP) + Perl_dump_indent(aTHX_ level, file, " DUP\n"); + if (mg->mg_flags & MGf_LOCAL) + Perl_dump_indent(aTHX_ level, file, " LOCAL\n"); + if (mg->mg_type == PERL_MAGIC_regex_global && + mg->mg_flags & MGf_BYTES) + Perl_dump_indent(aTHX_ level, file, " BYTES\n"); } - if (mg->mg_obj) { - Perl_dump_indent(aTHX_ level, file, " MG_OBJ = 0x%" UVxf "\n", - PTR2UV(mg->mg_obj)); + if (mg->mg_obj) { + Perl_dump_indent(aTHX_ level, file, " MG_OBJ = 0x%" UVxf "\n", + PTR2UV(mg->mg_obj)); if (mg->mg_type == PERL_MAGIC_qr) { - REGEXP* const re = (REGEXP *)mg->mg_obj; - SV * const dsv = sv_newmortal(); + REGEXP* const re = (REGEXP *)mg->mg_obj; + SV * const dsv = sv_newmortal(); const char * const s - = pv_pretty(dsv, RX_WRAPPED(re), RX_WRAPLEN(re), + = pv_pretty(dsv, RX_WRAPPED(re), RX_WRAPLEN(re), 60, NULL, NULL, ( PERL_PV_PRETTY_QUOTE | PERL_PV_ESCAPE_RE | PERL_PV_PRETTY_ELLIPSES | (RX_UTF8(re) ? PERL_PV_ESCAPE_UNI : 0)) ); - Perl_dump_indent(aTHX_ level+1, file, " PAT = %s\n", s); - Perl_dump_indent(aTHX_ level+1, file, " REFCNT = %" IVdf "\n", - (IV)RX_REFCNT(re)); + Perl_dump_indent(aTHX_ level+1, file, " PAT = %s\n", s); + Perl_dump_indent(aTHX_ level+1, file, " REFCNT = %" IVdf "\n", + (IV)RX_REFCNT(re)); } if (mg->mg_flags & MGf_REFCOUNTED) - do_sv_dump(level+2, file, mg->mg_obj, nest+1, maxnest, dumpops, pvlim); /* MG is already +1 */ - } + do_sv_dump(level+2, file, mg->mg_obj, nest+1, maxnest, dumpops, pvlim); /* MG is already +1 */ + } if (mg->mg_len) - Perl_dump_indent(aTHX_ level, file, " MG_LEN = %ld\n", (long)mg->mg_len); + Perl_dump_indent(aTHX_ level, file, " MG_LEN = %ld\n", (long)mg->mg_len); if (mg->mg_ptr) { - Perl_dump_indent(aTHX_ level, file, " MG_PTR = 0x%" UVxf, PTR2UV(mg->mg_ptr)); - if (mg->mg_len >= 0) { - if (mg->mg_type != PERL_MAGIC_utf8) { - SV * const sv = newSVpvs(""); - PerlIO_printf(file, " %s", pv_display(sv, mg->mg_ptr, mg->mg_len, 0, pvlim)); - SvREFCNT_dec_NN(sv); - } + Perl_dump_indent(aTHX_ level, file, " MG_PTR = 0x%" UVxf, PTR2UV(mg->mg_ptr)); + if (mg->mg_len >= 0) { + if (mg->mg_type != PERL_MAGIC_utf8) { + SV * const sv = newSVpvs(""); + PerlIO_printf(file, " %s", pv_display(sv, mg->mg_ptr, mg->mg_len, 0, pvlim)); + SvREFCNT_dec_NN(sv); + } + } + else if (mg->mg_len == HEf_SVKEY) { + PerlIO_puts(file, " => HEf_SVKEY\n"); + do_sv_dump(level+2, file, MUTABLE_SV(((mg)->mg_ptr)), nest+1, + maxnest, dumpops, pvlim); /* MG is already +1 */ + continue; } - else if (mg->mg_len == HEf_SVKEY) { - PerlIO_puts(file, " => HEf_SVKEY\n"); - do_sv_dump(level+2, file, MUTABLE_SV(((mg)->mg_ptr)), nest+1, - maxnest, dumpops, pvlim); /* MG is already +1 */ - continue; - } - else if (mg->mg_len == -1 && mg->mg_type == PERL_MAGIC_utf8); - else - PerlIO_puts( - file, - " ???? - " __FILE__ - " does not know how to handle this MG_LEN" - ); + else if (mg->mg_len == -1 && mg->mg_type == PERL_MAGIC_utf8); + else + PerlIO_puts( + file, + " ???? - " __FILE__ + " does not know how to handle this MG_LEN" + ); (void)PerlIO_putc(file, '\n'); } - if (mg->mg_type == PERL_MAGIC_utf8) { - const STRLEN * const cache = (STRLEN *) mg->mg_ptr; - if (cache) { - IV i; - for (i = 0; i < PERL_MAGIC_UTF8_CACHESIZE; i++) - Perl_dump_indent(aTHX_ level, file, - " %2" IVdf ": %" UVuf " -> %" UVuf "\n", - i, - (UV)cache[i * 2], - (UV)cache[i * 2 + 1]); - } - } + if (mg->mg_type == PERL_MAGIC_utf8) { + const STRLEN * const cache = (STRLEN *) mg->mg_ptr; + if (cache) { + IV i; + for (i = 0; i < PERL_MAGIC_UTF8_CACHESIZE; i++) + Perl_dump_indent(aTHX_ level, file, + " %2" IVdf ": %" UVuf " -> %" UVuf "\n", + i, + (UV)cache[i * 2], + (UV)cache[i * 2 + 1]); + } + } } } +/* +=for apidoc magic_dump + +Dumps the contents of the MAGIC C to C. + +=cut +*/ + void Perl_magic_dump(pTHX_ const MAGIC *mg) { @@ -1558,7 +1628,7 @@ Perl_do_hv_dump(pTHX_ I32 level, PerlIO *file, const char *name, HV *sv) Perl_dump_indent(aTHX_ level, file, "%s = 0x%" UVxf, name, PTR2UV(sv)); if (sv && (hvname = HvNAME_get(sv))) { - /* we have to use pv_display and HvNAMELEN_get() so that we display the real package + /* we have to use pv_display and HvNAMELEN_get() so that we display the real package name which quite legally could contain insane things like tabs, newlines, nulls or other scary crap - this should produce sane results - except maybe for unicode package names - but we will wait for someone to file a bug on that - demerphq */ @@ -1594,11 +1664,11 @@ Perl_do_gvgv_dump(pTHX_ I32 level, PerlIO *file, const char *name, GV *sv) Perl_dump_indent(aTHX_ level, file, "%s = 0x%" UVxf, name, PTR2UV(sv)); if (sv && GvNAME(sv)) { SV *tmp = newSVpvs_flags("", SVs_TEMP); - const char *hvname; + const char *hvname; HV * const stash = GvSTASH(sv); - PerlIO_printf(file, "\t"); + PerlIO_printf(file, "\t"); /* TODO might have an extra \" here */ - if (stash && (hvname = HvNAME_get(stash))) { + if (stash && (hvname = HvNAME_get(stash))) { PerlIO_printf(file, "\"%s\" :: \"", generic_pv_escape(tmp, hvname, HvNAMELEN(stash), HvNAMEUTF8(stash))); @@ -1720,6 +1790,33 @@ const struct flag_to_name regexp_core_intflags_names[] = { {PREGf_ANCH_GPOS, "ANCH_GPOS,"}, }; +/* Minimum number of decimal digits to preserve the significand of NV. */ +#ifdef USE_LONG_DOUBLE +# ifdef LDBL_DECIMAL_DIG +# define NV_DECIMAL_DIG LDBL_DECIMAL_DIG +# endif +#elif defined(USE_QUADMATH) && defined(I_QUADMATH) +# ifdef FLT128_DECIMAL_DIG +# define NV_DECIMAL_DIG FLT128_DECIMAL_DIG +# endif +#else /* NV is double */ +# ifdef DBL_DECIMAL_DIG +# define NV_DECIMAL_DIG DBL_DECIMAL_DIG +# endif +#endif + +#ifndef NV_DECIMAL_DIG +# if defined(NV_MANT_DIG) && FLT_RADIX == 2 +/* NV_DECIMAL_DIG = ceil(1 + NV_MANT_DIG * log10(2)), where log10(2) is + approx. 146/485. This is precise enough up to 2620 bits */ +# define NV_DECIMAL_DIG (1 + (NV_MANT_DIG * 146 + 484) / 485) +# endif +#endif + +#ifndef NV_DECIMAL_DIG +# define NV_DECIMAL_DIG (NV_DIG + 3) /* last resort */ +#endif + /* Perl_do_sv_dump(): * * level: amount to indent the output @@ -1733,7 +1830,6 @@ const struct flag_to_name regexp_core_intflags_names[] = { void Perl_do_sv_dump(pTHX_ I32 level, PerlIO *file, SV *sv, I32 nest, I32 maxnest, bool dumpops, STRLEN pvlim) { - dVAR; SV *d; const char *s; U32 flags; @@ -1742,8 +1838,8 @@ Perl_do_sv_dump(pTHX_ I32 level, PerlIO *file, SV *sv, I32 nest, I32 maxnest, bo PERL_ARGS_ASSERT_DO_SV_DUMP; if (!sv) { - Perl_dump_indent(aTHX_ level, file, "SV = 0\n"); - return; + Perl_dump_indent(aTHX_ level, file, "SV = 0\n"); + return; } flags = SvFLAGS(sv); @@ -1752,28 +1848,28 @@ Perl_do_sv_dump(pTHX_ I32 level, PerlIO *file, SV *sv, I32 nest, I32 maxnest, bo /* process general SV flags */ d = Perl_newSVpvf(aTHX_ - "(0x%" UVxf ") at 0x%" UVxf "\n%*s REFCNT = %" IVdf "\n%*s FLAGS = (", - PTR2UV(SvANY(sv)), PTR2UV(sv), - (int)(PL_dumpindent*level), "", (IV)SvREFCNT(sv), - (int)(PL_dumpindent*level), ""); + "(0x%" UVxf ") at 0x%" UVxf "\n%*s REFCNT = %" IVdf "\n%*s FLAGS = (", + PTR2UV(SvANY(sv)), PTR2UV(sv), + (int)(PL_dumpindent*level), "", (IV)SvREFCNT(sv), + (int)(PL_dumpindent*level), ""); if ((flags & SVs_PADSTALE)) - sv_catpvs(d, "PADSTALE,"); + sv_catpvs(d, "PADSTALE,"); if ((flags & SVs_PADTMP)) - sv_catpvs(d, "PADTMP,"); + sv_catpvs(d, "PADTMP,"); append_flags(d, flags, first_sv_flags_names); if (flags & SVf_ROK) { sv_catpvs(d, "ROK,"); - if (SvWEAKREF(sv)) sv_catpvs(d, "WEAKREF,"); + if (SvWEAKREF(sv)) sv_catpvs(d, "WEAKREF,"); } if (flags & SVf_IsCOW && type != SVt_PVHV) sv_catpvs(d, "IsCOW,"); append_flags(d, flags, second_sv_flags_names); if (flags & SVp_SCREAM && type != SVt_PVHV && !isGV_with_GP(sv) - && type != SVt_PVAV) { - if (SvPCS_IMPORTED(sv)) - sv_catpvs(d, "PCS_IMPORTED,"); - else - sv_catpvs(d, "SCREAM,"); + && type != SVt_PVAV) { + if (SvPCS_IMPORTED(sv)) + sv_catpvs(d, "PCS_IMPORTED,"); + else + sv_catpvs(d, "SCREAM,"); } /* process type-specific SV flags */ @@ -1781,34 +1877,34 @@ Perl_do_sv_dump(pTHX_ I32 level, PerlIO *file, SV *sv, I32 nest, I32 maxnest, bo switch (type) { case SVt_PVCV: case SVt_PVFM: - append_flags(d, CvFLAGS(sv), cv_flags_names); - break; + append_flags(d, CvFLAGS(sv), cv_flags_names); + break; case SVt_PVHV: - append_flags(d, flags, hv_flags_names); - break; + append_flags(d, flags, hv_flags_names); + break; case SVt_PVGV: case SVt_PVLV: - if (isGV_with_GP(sv)) { - append_flags(d, GvFLAGS(sv), gp_flags_names); - } - if (isGV_with_GP(sv) && GvIMPORTED(sv)) { - sv_catpvs(d, "IMPORT"); - if (GvIMPORTED(sv) == GVf_IMPORTED) - sv_catpvs(d, "ALL,"); - else { - sv_catpvs(d, "("); - append_flags(d, GvFLAGS(sv), gp_flags_imported_names); - sv_catpvs(d, " ),"); - } - } - /* FALLTHROUGH */ + if (isGV_with_GP(sv)) { + append_flags(d, GvFLAGS(sv), gp_flags_names); + } + if (isGV_with_GP(sv) && GvIMPORTED(sv)) { + sv_catpvs(d, "IMPORT"); + if (GvIMPORTED(sv) == GVf_IMPORTED) + sv_catpvs(d, "ALL,"); + else { + sv_catpvs(d, "("); + append_flags(d, GvFLAGS(sv), gp_flags_imported_names); + sv_catpvs(d, " ),"); + } + } + /* FALLTHROUGH */ case SVt_PVMG: default: - if (SvIsUV(sv) && !(flags & SVf_ROK)) sv_catpvs(d, "IsUV,"); - break; + if (SvIsUV(sv) && !(flags & SVf_ROK)) sv_catpvs(d, "IsUV,"); + break; case SVt_PVAV: - break; + break; } /* SVphv_SHAREKEYS is also 0x20000000 */ if ((type != SVt_PVHV) && SvUTF8(sv)) @@ -1816,7 +1912,7 @@ Perl_do_sv_dump(pTHX_ I32 level, PerlIO *file, SV *sv, I32 nest, I32 maxnest, bo if (*(SvEND(d) - 1) == ',') { SvCUR_set(d, SvCUR(d) - 1); - SvPVX(d)[SvCUR(d)] = '\0'; + SvPVX(d)[SvCUR(d)] = '\0'; } sv_catpvs(d, ")"); s = SvPVX_const(d); @@ -1825,13 +1921,13 @@ Perl_do_sv_dump(pTHX_ I32 level, PerlIO *file, SV *sv, I32 nest, I32 maxnest, bo #ifdef DEBUG_LEAKING_SCALARS Perl_dump_indent(aTHX_ level, file, - "ALLOCATED at %s:%d %s %s (parent 0x%" UVxf "); serial %" UVuf "\n", - sv->sv_debug_file ? sv->sv_debug_file : "(unknown)", - sv->sv_debug_line, - sv->sv_debug_inpad ? "for" : "by", - sv->sv_debug_optype ? PL_op_name[sv->sv_debug_optype]: "(none)", - PTR2UV(sv->sv_debug_parent), - sv->sv_debug_serial + "ALLOCATED at %s:%d %s %s (parent 0x%" UVxf "); serial %" UVuf "\n", + sv->sv_debug_file ? sv->sv_debug_file : "(unknown)", + sv->sv_debug_line, + sv->sv_debug_inpad ? "for" : "by", + sv->sv_debug_optype ? PL_op_name[sv->sv_debug_optype]: "(none)", + PTR2UV(sv->sv_debug_parent), + sv->sv_debug_serial ); #endif Perl_dump_indent(aTHX_ level, file, "SV = "); @@ -1839,224 +1935,227 @@ Perl_do_sv_dump(pTHX_ I32 level, PerlIO *file, SV *sv, I32 nest, I32 maxnest, bo /* Dump SV type */ if (type < SVt_LAST) { - PerlIO_printf(file, "%s%s\n", svtypenames[type], s); + PerlIO_printf(file, "%s%s\n", svtypenames[type], s); - if (type == SVt_NULL) { - SvREFCNT_dec_NN(d); - return; - } + if (type == SVt_NULL) { + SvREFCNT_dec_NN(d); + return; + } } else { - PerlIO_printf(file, "UNKNOWN(0x%" UVxf ") %s\n", (UV)type, s); - SvREFCNT_dec_NN(d); - return; + PerlIO_printf(file, "UNKNOWN(0x%" UVxf ") %s\n", (UV)type, s); + SvREFCNT_dec_NN(d); + return; } /* Dump general SV fields */ if ((type >= SVt_PVIV && type != SVt_PVAV && type != SVt_PVHV - && type != SVt_PVCV && type != SVt_PVFM && type != SVt_PVIO - && type != SVt_REGEXP && !isGV_with_GP(sv) && !SvVALID(sv)) - || (type == SVt_IV && !SvROK(sv))) { - if (SvIsUV(sv) - ) - Perl_dump_indent(aTHX_ level, file, " UV = %" UVuf, (UV)SvUVX(sv)); - else - Perl_dump_indent(aTHX_ level, file, " IV = %" IVdf, (IV)SvIVX(sv)); - (void)PerlIO_putc(file, '\n'); + && type != SVt_PVCV && type != SVt_PVFM && type != SVt_PVIO + && type != SVt_REGEXP && !isGV_with_GP(sv) && !SvVALID(sv)) + || (type == SVt_IV && !SvROK(sv))) { + if (SvIsUV(sv) + ) + Perl_dump_indent(aTHX_ level, file, " UV = %" UVuf, (UV)SvUVX(sv)); + else + Perl_dump_indent(aTHX_ level, file, " IV = %" IVdf, (IV)SvIVX(sv)); + (void)PerlIO_putc(file, '\n'); } if ((type >= SVt_PVNV && type != SVt_PVAV && type != SVt_PVHV - && type != SVt_PVCV && type != SVt_PVFM && type != SVt_REGEXP - && type != SVt_PVIO && !isGV_with_GP(sv) && !SvVALID(sv)) - || type == SVt_NV) { + && type != SVt_PVCV && type != SVt_PVFM && type != SVt_REGEXP + && type != SVt_PVIO && !isGV_with_GP(sv) && !SvVALID(sv)) + || type == SVt_NV) { DECLARATION_FOR_LC_NUMERIC_MANIPULATION; STORE_LC_NUMERIC_SET_STANDARD(); - Perl_dump_indent(aTHX_ level, file, " NV = %.*" NVgf "\n", NV_DIG, SvNVX(sv)); + Perl_dump_indent(aTHX_ level, file, " NV = %.*" NVgf "\n", NV_DECIMAL_DIG, SvNVX(sv)); RESTORE_LC_NUMERIC(); } if (SvROK(sv)) { - Perl_dump_indent(aTHX_ level, file, " RV = 0x%" UVxf "\n", + Perl_dump_indent(aTHX_ level, file, " RV = 0x%" UVxf "\n", PTR2UV(SvRV(sv))); - if (nest < maxnest) - do_sv_dump(level+1, file, SvRV(sv), nest+1, maxnest, dumpops, pvlim); + if (nest < maxnest) + do_sv_dump(level+1, file, SvRV(sv), nest+1, maxnest, dumpops, pvlim); } if (type < SVt_PV) { - SvREFCNT_dec_NN(d); - return; + SvREFCNT_dec_NN(d); + return; } if ((type <= SVt_PVLV && !isGV_with_GP(sv)) || (type == SVt_PVIO && IoFLAGS(sv) & IOf_FAKE_DIRP)) { - const bool re = isREGEXP(sv); - const char * const ptr = - re ? RX_WRAPPED((REGEXP*)sv) : SvPVX_const(sv); - if (ptr) { - STRLEN delta; - if (SvOOK(sv)) { - SvOOK_offset(sv, delta); - Perl_dump_indent(aTHX_ level, file," OFFSET = %" UVuf "\n", - (UV) delta); - } else { - delta = 0; - } - Perl_dump_indent(aTHX_ level, file," PV = 0x%" UVxf " ", + const bool re = isREGEXP(sv); + const char * const ptr = + re ? RX_WRAPPED((REGEXP*)sv) : SvPVX_const(sv); + if (ptr) { + STRLEN delta; + if (SvOOK(sv)) { + SvOOK_offset(sv, delta); + Perl_dump_indent(aTHX_ level, file," OFFSET = %" UVuf "\n", + (UV) delta); + } else { + delta = 0; + } + Perl_dump_indent(aTHX_ level, file," PV = 0x%" UVxf " ", PTR2UV(ptr)); - if (SvOOK(sv)) { - PerlIO_printf(file, "( %s . ) ", - pv_display(d, ptr - delta, delta, 0, - pvlim)); - } + if (SvOOK(sv)) { + PerlIO_printf(file, "( %s . ) ", + _pv_display_for_dump(d, ptr - delta, delta, 0, + pvlim)); + } if (type == SVt_INVLIST) { - PerlIO_printf(file, "\n"); + PerlIO_printf(file, "\n"); /* 4 blanks indents 2 beyond the PV, etc */ _invlist_dump(file, level, " ", sv); } else { - PerlIO_printf(file, "%s", pv_display(d, ptr, SvCUR(sv), + PerlIO_printf(file, "%s", _pv_display_for_dump(d, ptr, SvCUR(sv), re ? 0 : SvLEN(sv), pvlim)); if (SvUTF8(sv)) /* the 6? \x{....} */ PerlIO_printf(file, " [UTF8 \"%s\"]", sv_uni_display(d, sv, 6 * SvCUR(sv), UNI_DISPLAY_QQ)); + if (SvIsBOOL(sv)) + PerlIO_printf(file, " [BOOL %s]", ptr == PL_Yes ? "PL_Yes" : "PL_No"); PerlIO_printf(file, "\n"); } - Perl_dump_indent(aTHX_ level, file, " CUR = %" IVdf "\n", (IV)SvCUR(sv)); - if (re && type == SVt_PVLV) + Perl_dump_indent(aTHX_ level, file, " CUR = %" IVdf "\n", (IV)SvCUR(sv)); + if (re && type == SVt_PVLV) /* LV-as-REGEXP usurps len field to store pointer to * regexp struct */ - Perl_dump_indent(aTHX_ level, file, " REGEXP = 0x%" UVxf "\n", + Perl_dump_indent(aTHX_ level, file, " REGEXP = 0x%" UVxf "\n", PTR2UV(((XPV*)SvANY(sv))->xpv_len_u.xpvlenu_rx)); else - Perl_dump_indent(aTHX_ level, file, " LEN = %" IVdf "\n", - (IV)SvLEN(sv)); + Perl_dump_indent(aTHX_ level, file, " LEN = %" IVdf "\n", + (IV)SvLEN(sv)); #ifdef PERL_COPY_ON_WRITE - if (SvIsCOW(sv) && SvLEN(sv)) - Perl_dump_indent(aTHX_ level, file, " COW_REFCNT = %d\n", - CowREFCNT(sv)); + if (SvIsCOW(sv) && SvLEN(sv)) + Perl_dump_indent(aTHX_ level, file, " COW_REFCNT = %d\n", + CowREFCNT(sv)); #endif - } - else - Perl_dump_indent(aTHX_ level, file, " PV = 0\n"); + } + else + Perl_dump_indent(aTHX_ level, file, " PV = 0\n"); } if (type >= SVt_PVMG) { - if (SvMAGIC(sv)) - do_magic_dump(level, file, SvMAGIC(sv), nest+1, maxnest, dumpops, pvlim); - if (SvSTASH(sv)) - do_hv_dump(level, file, " STASH", SvSTASH(sv)); + if (SvMAGIC(sv)) + do_magic_dump(level, file, SvMAGIC(sv), nest+1, maxnest, dumpops, pvlim); + if (SvSTASH(sv)) + do_hv_dump(level, file, " STASH", SvSTASH(sv)); - if ((type == SVt_PVMG || type == SVt_PVLV) && SvVALID(sv)) { - Perl_dump_indent(aTHX_ level, file, " USEFUL = %" IVdf "\n", + if ((type == SVt_PVMG || type == SVt_PVLV) && SvVALID(sv)) { + Perl_dump_indent(aTHX_ level, file, " USEFUL = %" IVdf "\n", (IV)BmUSEFUL(sv)); - } + } } /* Dump type-specific SV fields */ switch (type) { case SVt_PVAV: - Perl_dump_indent(aTHX_ level, file, " ARRAY = 0x%" UVxf, + Perl_dump_indent(aTHX_ level, file, " ARRAY = 0x%" UVxf, PTR2UV(AvARRAY(sv))); - if (AvARRAY(sv) != AvALLOC(sv)) { - PerlIO_printf(file, " (offset=%" IVdf ")\n", + if (AvARRAY(sv) != AvALLOC(sv)) { + PerlIO_printf(file, " (offset=%" IVdf ")\n", (IV)(AvARRAY(sv) - AvALLOC(sv))); - Perl_dump_indent(aTHX_ level, file, " ALLOC = 0x%" UVxf "\n", + Perl_dump_indent(aTHX_ level, file, " ALLOC = 0x%" UVxf "\n", PTR2UV(AvALLOC(sv))); - } - else + } + else (void)PerlIO_putc(file, '\n'); - Perl_dump_indent(aTHX_ level, file, " FILL = %" IVdf "\n", + Perl_dump_indent(aTHX_ level, file, " FILL = %" IVdf "\n", (IV)AvFILLp(sv)); - Perl_dump_indent(aTHX_ level, file, " MAX = %" IVdf "\n", + Perl_dump_indent(aTHX_ level, file, " MAX = %" IVdf "\n", (IV)AvMAX(sv)); SvPVCLEAR(d); - if (AvREAL(sv)) sv_catpvs(d, ",REAL"); - if (AvREIFY(sv)) sv_catpvs(d, ",REIFY"); - Perl_dump_indent(aTHX_ level, file, " FLAGS = (%s)\n", - SvCUR(d) ? SvPVX_const(d) + 1 : ""); - if (nest < maxnest && AvARRAY(MUTABLE_AV(sv))) { - SSize_t count; + if (AvREAL(sv)) sv_catpvs(d, ",REAL"); + if (AvREIFY(sv)) sv_catpvs(d, ",REIFY"); + Perl_dump_indent(aTHX_ level, file, " FLAGS = (%s)\n", + SvCUR(d) ? SvPVX_const(d) + 1 : ""); + if (nest < maxnest && AvARRAY(MUTABLE_AV(sv))) { + SSize_t count; SV **svp = AvARRAY(MUTABLE_AV(sv)); - for (count = 0; + for (count = 0; count <= AvFILLp(MUTABLE_AV(sv)) && count < maxnest; count++, svp++) { - SV* const elt = *svp; - Perl_dump_indent(aTHX_ level + 1, file, "Elt No. %" IVdf "\n", + SV* const elt = *svp; + Perl_dump_indent(aTHX_ level + 1, file, "Elt No. %" IVdf "\n", (IV)count); do_sv_dump(level+1, file, elt, nest+1, maxnest, dumpops, pvlim); - } - } - break; + } + } + break; case SVt_PVHV: { - U32 usedkeys; + U32 totalkeys; if (SvOOK(sv)) { struct xpvhv_aux *const aux = HvAUX(sv); Perl_dump_indent(aTHX_ level, file, " AUX_FLAGS = %" UVuf "\n", (UV)aux->xhv_aux_flags); } - Perl_dump_indent(aTHX_ level, file, " ARRAY = 0x%" UVxf, PTR2UV(HvARRAY(sv))); - usedkeys = HvUSEDKEYS(MUTABLE_HV(sv)); - if (HvARRAY(sv) && usedkeys) { - /* Show distribution of HEs in the ARRAY */ - int freq[200]; + Perl_dump_indent(aTHX_ level, file, " ARRAY = 0x%" UVxf, PTR2UV(HvARRAY(sv))); + totalkeys = HvTOTALKEYS(MUTABLE_HV(sv)); + if (totalkeys) { + /* Show distribution of HEs in the ARRAY */ + int freq[200]; #define FREQ_MAX ((int)(C_ARRAY_LENGTH(freq) - 1)) - int i; - int max = 0; - U32 pow2 = 2, keys = usedkeys; - NV theoret, sum = 0; - - PerlIO_printf(file, " ("); - Zero(freq, FREQ_MAX + 1, int); - for (i = 0; (STRLEN)i <= HvMAX(sv); i++) { - HE* h; - int count = 0; + int i; + int max = 0; + U32 pow2 = 2; + U32 keys = totalkeys; + NV theoret, sum = 0; + + PerlIO_printf(file, " ("); + Zero(freq, FREQ_MAX + 1, int); + for (i = 0; (STRLEN)i <= HvMAX(sv); i++) { + HE* h; + int count = 0; for (h = HvARRAY(sv)[i]; h; h = HeNEXT(h)) - count++; - if (count > FREQ_MAX) - count = FREQ_MAX; - freq[count]++; - if (max < count) - max = count; - } - for (i = 0; i <= max; i++) { - if (freq[i]) { - PerlIO_printf(file, "%d%s:%d", i, - (i == FREQ_MAX) ? "+" : "", - freq[i]); - if (i != max) - PerlIO_printf(file, ", "); - } + count++; + if (count > FREQ_MAX) + count = FREQ_MAX; + freq[count]++; + if (max < count) + max = count; + } + for (i = 0; i <= max; i++) { + if (freq[i]) { + PerlIO_printf(file, "%d%s:%d", i, + (i == FREQ_MAX) ? "+" : "", + freq[i]); + if (i != max) + PerlIO_printf(file, ", "); + } } - (void)PerlIO_putc(file, ')'); - /* The "quality" of a hash is defined as the total number of - comparisons needed to access every element once, relative - to the expected number needed for a random hash. - - The total number of comparisons is equal to the sum of - the squares of the number of entries in each bucket. - For a random hash of n keys into k buckets, the expected - value is - n + n(n-1)/2k - */ - - for (i = max; i > 0; i--) { /* Precision: count down. */ - sum += freq[i] * i * i; + (void)PerlIO_putc(file, ')'); + /* The "quality" of a hash is defined as the total number of + comparisons needed to access every element once, relative + to the expected number needed for a random hash. + + The total number of comparisons is equal to the sum of + the squares of the number of entries in each bucket. + For a random hash of n keys into k buckets, the expected + value is + n + n(n-1)/2k + */ + + for (i = max; i > 0; i--) { /* Precision: count down. */ + sum += freq[i] * i * i; } - while ((keys = keys >> 1)) - pow2 = pow2 << 1; - theoret = usedkeys; - theoret += theoret * (theoret-1)/pow2; - (void)PerlIO_putc(file, '\n'); - Perl_dump_indent(aTHX_ level, file, " hash quality = %.1" + while ((keys = keys >> 1)) + pow2 = pow2 << 1; + theoret = totalkeys; + theoret += theoret * (theoret-1)/pow2; + (void)PerlIO_putc(file, '\n'); + Perl_dump_indent(aTHX_ level, file, " hash quality = %.1" NVff "%%", theoret/sum*100); - } - (void)PerlIO_putc(file, '\n'); - Perl_dump_indent(aTHX_ level, file, " KEYS = %" IVdf "\n", - (IV)usedkeys); + } + (void)PerlIO_putc(file, '\n'); + Perl_dump_indent(aTHX_ level, file, " KEYS = %" IVdf "\n", + (IV)totalkeys); { STRLEN count = 0; HE **ents = HvARRAY(sv); @@ -2074,15 +2173,15 @@ Perl_do_sv_dump(pTHX_ I32 level, PerlIO *file, SV *sv, I32 nest, I32 maxnest, bo Perl_dump_indent(aTHX_ level, file, " FILL = %" UVuf "\n", (UV)count); } - Perl_dump_indent(aTHX_ level, file, " MAX = %" IVdf "\n", + Perl_dump_indent(aTHX_ level, file, " MAX = %" IVdf "\n", (IV)HvMAX(sv)); if (SvOOK(sv)) { - Perl_dump_indent(aTHX_ level, file, " RITER = %" IVdf "\n", + Perl_dump_indent(aTHX_ level, file, " RITER = %" IVdf "\n", (IV)HvRITER_get(sv)); - Perl_dump_indent(aTHX_ level, file, " EITER = 0x%" UVxf "\n", + Perl_dump_indent(aTHX_ level, file, " EITER = 0x%" UVxf "\n", PTR2UV(HvEITER_get(sv))); #ifdef PERL_HASH_RANDOMIZE_KEYS - Perl_dump_indent(aTHX_ level, file, " RAND = 0x%" UVxf, + Perl_dump_indent(aTHX_ level, file, " RAND = 0x%" UVxf, (UV)HvRAND_get(sv)); if (HvRAND_get(sv) != HvLASTRAND_get(sv) && HvRITER_get(sv) != -1 ) { PerlIO_printf(file, " (LAST = 0x%" UVxf ")", @@ -2091,254 +2190,261 @@ Perl_do_sv_dump(pTHX_ I32 level, PerlIO *file, SV *sv, I32 nest, I32 maxnest, bo #endif (void)PerlIO_putc(file, '\n'); } - { - MAGIC * const mg = mg_find(sv, PERL_MAGIC_symtab); - if (mg && mg->mg_obj) { - Perl_dump_indent(aTHX_ level, file, " PMROOT = 0x%" UVxf "\n", PTR2UV(mg->mg_obj)); - } - } - { - const char * const hvname = HvNAME_get(sv); - if (hvname) { + { + MAGIC * const mg = mg_find(sv, PERL_MAGIC_symtab); + if (mg && mg->mg_obj) { + Perl_dump_indent(aTHX_ level, file, " PMROOT = 0x%" UVxf "\n", PTR2UV(mg->mg_obj)); + } + } + { + const char * const hvname = HvNAME_get(sv); + if (hvname) { SV* tmpsv = newSVpvs_flags("", SVs_TEMP); Perl_dump_indent(aTHX_ level, file, " NAME = \"%s\"\n", generic_pv_escape( tmpsv, hvname, HvNAMELEN(sv), HvNAMEUTF8(sv))); } - } - if (SvOOK(sv)) { - AV * const backrefs - = *Perl_hv_backreferences_p(aTHX_ MUTABLE_HV(sv)); - struct mro_meta * const meta = HvAUX(sv)->xhv_mro_meta; - if (HvAUX(sv)->xhv_name_count) - Perl_dump_indent(aTHX_ - level, file, " NAMECOUNT = %" IVdf "\n", - (IV)HvAUX(sv)->xhv_name_count - ); - if (HvAUX(sv)->xhv_name_u.xhvnameu_name && HvENAME_HEK_NN(sv)) { - const I32 count = HvAUX(sv)->xhv_name_count; - if (count) { - SV * const names = newSVpvs_flags("", SVs_TEMP); - /* The starting point is the first element if count is - positive and the second element if count is negative. */ - HEK *const *hekp = HvAUX(sv)->xhv_name_u.xhvnameu_names - + (count < 0 ? 1 : 0); - HEK *const *const endp = HvAUX(sv)->xhv_name_u.xhvnameu_names - + (count < 0 ? -count : count); - while (hekp < endp) { - if (*hekp) { + } + if (SvOOK(sv)) { + AV * const backrefs + = *Perl_hv_backreferences_p(aTHX_ MUTABLE_HV(sv)); + struct mro_meta * const meta = HvAUX(sv)->xhv_mro_meta; + if (HvAUX(sv)->xhv_name_count) + Perl_dump_indent(aTHX_ + level, file, " NAMECOUNT = %" IVdf "\n", + (IV)HvAUX(sv)->xhv_name_count + ); + if (HvAUX(sv)->xhv_name_u.xhvnameu_name && HvENAME_HEK_NN(sv)) { + const I32 count = HvAUX(sv)->xhv_name_count; + if (count) { + SV * const names = newSVpvs_flags("", SVs_TEMP); + /* The starting point is the first element if count is + positive and the second element if count is negative. */ + HEK *const *hekp = HvAUX(sv)->xhv_name_u.xhvnameu_names + + (count < 0 ? 1 : 0); + HEK *const *const endp = HvAUX(sv)->xhv_name_u.xhvnameu_names + + (count < 0 ? -count : count); + while (hekp < endp) { + if (*hekp) { SV *tmp = newSVpvs_flags("", SVs_TEMP); - Perl_sv_catpvf(aTHX_ names, ", \"%s\"", + Perl_sv_catpvf(aTHX_ names, ", \"%s\"", generic_pv_escape(tmp, HEK_KEY(*hekp), HEK_LEN(*hekp), HEK_UTF8(*hekp))); - } else { - /* This should never happen. */ - sv_catpvs(names, ", (null)"); - } - ++hekp; - } - Perl_dump_indent(aTHX_ - level, file, " ENAME = %s\n", SvPV_nolen(names)+2 - ); - } - else { + } else { + /* This should never happen. */ + sv_catpvs(names, ", (null)"); + } + ++hekp; + } + Perl_dump_indent(aTHX_ + level, file, " ENAME = %s\n", SvPV_nolen(names)+2 + ); + } + else { SV * const tmp = newSVpvs_flags("", SVs_TEMP); const char *const hvename = HvENAME_get(sv); - Perl_dump_indent(aTHX_ - level, file, " ENAME = \"%s\"\n", + Perl_dump_indent(aTHX_ + level, file, " ENAME = \"%s\"\n", generic_pv_escape(tmp, hvename, HvENAMELEN_get(sv), HvENAMEUTF8(sv))); } - } - if (backrefs) { - Perl_dump_indent(aTHX_ level, file, " BACKREFS = 0x%" UVxf "\n", - PTR2UV(backrefs)); - do_sv_dump(level+1, file, MUTABLE_SV(backrefs), nest+1, maxnest, - dumpops, pvlim); - } - if (meta) { - SV* tmpsv = newSVpvs_flags("", SVs_TEMP); - Perl_dump_indent(aTHX_ level, file, " MRO_WHICH = \"%s\" (0x%" + } + if (backrefs) { + Perl_dump_indent(aTHX_ level, file, " BACKREFS = 0x%" UVxf "\n", + PTR2UV(backrefs)); + do_sv_dump(level+1, file, MUTABLE_SV(backrefs), nest+1, maxnest, + dumpops, pvlim); + } + if (meta) { + SV* tmpsv = newSVpvs_flags("", SVs_TEMP); + Perl_dump_indent(aTHX_ level, file, " MRO_WHICH = \"%s\" (0x%" UVxf ")\n", - generic_pv_escape( tmpsv, meta->mro_which->name, + generic_pv_escape( tmpsv, meta->mro_which->name, meta->mro_which->length, (meta->mro_which->kflags & HVhek_UTF8)), - PTR2UV(meta->mro_which)); - Perl_dump_indent(aTHX_ level, file, " CACHE_GEN = 0x%" + PTR2UV(meta->mro_which)); + Perl_dump_indent(aTHX_ level, file, " CACHE_GEN = 0x%" UVxf "\n", - (UV)meta->cache_gen); - Perl_dump_indent(aTHX_ level, file, " PKG_GEN = 0x%" UVxf "\n", - (UV)meta->pkg_gen); - if (meta->mro_linear_all) { - Perl_dump_indent(aTHX_ level, file, " MRO_LINEAR_ALL = 0x%" + (UV)meta->cache_gen); + Perl_dump_indent(aTHX_ level, file, " PKG_GEN = 0x%" UVxf "\n", + (UV)meta->pkg_gen); + if (meta->mro_linear_all) { + Perl_dump_indent(aTHX_ level, file, " MRO_LINEAR_ALL = 0x%" UVxf "\n", - PTR2UV(meta->mro_linear_all)); - do_sv_dump(level+1, file, MUTABLE_SV(meta->mro_linear_all), nest+1, maxnest, - dumpops, pvlim); - } - if (meta->mro_linear_current) { - Perl_dump_indent(aTHX_ level, file, + PTR2UV(meta->mro_linear_all)); + do_sv_dump(level+1, file, MUTABLE_SV(meta->mro_linear_all), nest+1, maxnest, + dumpops, pvlim); + } + if (meta->mro_linear_current) { + Perl_dump_indent(aTHX_ level, file, " MRO_LINEAR_CURRENT = 0x%" UVxf "\n", - PTR2UV(meta->mro_linear_current)); - do_sv_dump(level+1, file, MUTABLE_SV(meta->mro_linear_current), nest+1, maxnest, - dumpops, pvlim); - } - if (meta->mro_nextmethod) { - Perl_dump_indent(aTHX_ level, file, + PTR2UV(meta->mro_linear_current)); + do_sv_dump(level+1, file, MUTABLE_SV(meta->mro_linear_current), nest+1, maxnest, + dumpops, pvlim); + } + if (meta->mro_nextmethod) { + Perl_dump_indent(aTHX_ level, file, " MRO_NEXTMETHOD = 0x%" UVxf "\n", - PTR2UV(meta->mro_nextmethod)); - do_sv_dump(level+1, file, MUTABLE_SV(meta->mro_nextmethod), nest+1, maxnest, - dumpops, pvlim); - } - if (meta->isa) { - Perl_dump_indent(aTHX_ level, file, " ISA = 0x%" UVxf "\n", - PTR2UV(meta->isa)); - do_sv_dump(level+1, file, MUTABLE_SV(meta->isa), nest+1, maxnest, - dumpops, pvlim); - } - } - } - if (nest < maxnest) { - HV * const hv = MUTABLE_HV(sv); - STRLEN i; - HE *he; - - if (HvARRAY(hv)) { - int count = maxnest - nest; - for (i=0; i <= HvMAX(hv); i++) { - for (he = HvARRAY(hv)[i]; he; he = HeNEXT(he)) { - U32 hash; - SV * keysv; - const char * keypv; - SV * elt; + PTR2UV(meta->mro_nextmethod)); + do_sv_dump(level+1, file, MUTABLE_SV(meta->mro_nextmethod), nest+1, maxnest, + dumpops, pvlim); + } + if (meta->isa) { + Perl_dump_indent(aTHX_ level, file, " ISA = 0x%" UVxf "\n", + PTR2UV(meta->isa)); + do_sv_dump(level+1, file, MUTABLE_SV(meta->isa), nest+1, maxnest, + dumpops, pvlim); + } + } + } + if (nest < maxnest) { + HV * const hv = MUTABLE_HV(sv); + + if (HvTOTALKEYS(hv)) { + STRLEN i; + int count = maxnest - nest; + for (i=0; i <= HvMAX(hv); i++) { + HE *he; + for (he = HvARRAY(hv)[i]; he; he = HeNEXT(he)) { + U32 hash; + SV * keysv; + const char * keypv; + SV * elt; STRLEN len; - if (count-- <= 0) goto DONEHV; + if (count-- <= 0) goto DONEHV; - hash = HeHASH(he); - keysv = hv_iterkeysv(he); - keypv = SvPV_const(keysv, len); - elt = HeVAL(he); + hash = HeHASH(he); + keysv = hv_iterkeysv(he); + keypv = SvPV_const(keysv, len); + elt = HeVAL(he); - Perl_dump_indent(aTHX_ level+1, file, "Elt %s ", pv_display(d, keypv, len, 0, pvlim)); + Perl_dump_indent(aTHX_ level+1, file, "Elt %s ", _pv_display_for_dump(d, keypv, len, 0, pvlim)); if (SvUTF8(keysv)) PerlIO_printf(file, "[UTF8 \"%s\"] ", sv_uni_display(d, keysv, 6 * SvCUR(keysv), UNI_DISPLAY_QQ)); - if (HvEITER_get(hv) == he) - PerlIO_printf(file, "[CURRENT] "); - PerlIO_printf(file, "HASH = 0x%" UVxf "\n", (UV) hash); - do_sv_dump(level+1, file, elt, nest+1, maxnest, dumpops, pvlim); + if (HvEITER_get(hv) == he) + PerlIO_printf(file, "[CURRENT] "); + PerlIO_printf(file, "HASH = 0x%" UVxf, (UV) hash); + + if (sv == (SV*)PL_strtab) + PerlIO_printf(file, " REFCNT = 0x%" UVxf "\n", + (UV)he->he_valu.hent_refcount ); + else { + (void)PerlIO_putc(file, '\n'); + do_sv_dump(level+1, file, elt, nest+1, maxnest, dumpops, pvlim); + } } - } - DONEHV:; - } - } - break; + } + DONEHV:; + } + } + break; } /* case SVt_PVHV */ case SVt_PVCV: - if (CvAUTOLOAD(sv)) { - SV* tmpsv = newSVpvs_flags("", SVs_TEMP); + if (CvAUTOLOAD(sv)) { + SV* tmpsv = newSVpvs_flags("", SVs_TEMP); STRLEN len; - const char *const name = SvPV_const(sv, len); - Perl_dump_indent(aTHX_ level, file, " AUTOLOAD = \"%s\"\n", - generic_pv_escape(tmpsv, name, len, SvUTF8(sv))); - } - if (SvPOK(sv)) { + const char *const name = SvPV_const(sv, len); + Perl_dump_indent(aTHX_ level, file, " AUTOLOAD = \"%s\"\n", + generic_pv_escape(tmpsv, name, len, SvUTF8(sv))); + } + if (SvPOK(sv)) { SV* tmpsv = newSVpvs_flags("", SVs_TEMP); const char *const proto = CvPROTO(sv); - Perl_dump_indent(aTHX_ level, file, " PROTOTYPE = \"%s\"\n", - generic_pv_escape(tmpsv, proto, CvPROTOLEN(sv), + Perl_dump_indent(aTHX_ level, file, " PROTOTYPE = \"%s\"\n", + generic_pv_escape(tmpsv, proto, CvPROTOLEN(sv), SvUTF8(sv))); - } - /* FALLTHROUGH */ + } + /* FALLTHROUGH */ case SVt_PVFM: - do_hv_dump(level, file, " COMP_STASH", CvSTASH(sv)); - if (!CvISXSUB(sv)) { - if (CvSTART(sv)) { + do_hv_dump(level, file, " COMP_STASH", CvSTASH(sv)); + if (!CvISXSUB(sv)) { + if (CvSTART(sv)) { if (CvSLABBED(sv)) Perl_dump_indent(aTHX_ level, file, - " SLAB = 0x%" UVxf "\n", - PTR2UV(CvSTART(sv))); + " SLAB = 0x%" UVxf "\n", + PTR2UV(CvSTART(sv))); else Perl_dump_indent(aTHX_ level, file, - " START = 0x%" UVxf " ===> %" IVdf "\n", - PTR2UV(CvSTART(sv)), - (IV)sequence_num(CvSTART(sv))); - } - Perl_dump_indent(aTHX_ level, file, " ROOT = 0x%" UVxf "\n", - PTR2UV(CvROOT(sv))); - if (CvROOT(sv) && dumpops) { - do_op_dump(level+1, file, CvROOT(sv)); - } - } else { - SV * const constant = cv_const_sv((const CV *)sv); - - Perl_dump_indent(aTHX_ level, file, " XSUB = 0x%" UVxf "\n", PTR2UV(CvXSUB(sv))); - - if (constant) { - Perl_dump_indent(aTHX_ level, file, " XSUBANY = 0x%" UVxf - " (CONST SV)\n", - PTR2UV(CvXSUBANY(sv).any_ptr)); - do_sv_dump(level+1, file, constant, nest+1, maxnest, dumpops, - pvlim); - } else { - Perl_dump_indent(aTHX_ level, file, " XSUBANY = %" IVdf "\n", - (IV)CvXSUBANY(sv).any_i32); - } - } - if (CvNAMED(sv)) - Perl_dump_indent(aTHX_ level, file, " NAME = \"%s\"\n", - HEK_KEY(CvNAME_HEK((CV *)sv))); - else do_gvgv_dump(level, file, " GVGV::GV", CvGV(sv)); - Perl_dump_indent(aTHX_ level, file, " FILE = \"%s\"\n", CvFILE(sv)); - Perl_dump_indent(aTHX_ level, file, " DEPTH = %" + " START = 0x%" UVxf " ===> %" IVdf "\n", + PTR2UV(CvSTART(sv)), + (IV)sequence_num(CvSTART(sv))); + } + Perl_dump_indent(aTHX_ level, file, " ROOT = 0x%" UVxf "\n", + PTR2UV(CvROOT(sv))); + if (CvROOT(sv) && dumpops) { + do_op_dump(level+1, file, CvROOT(sv)); + } + } else { + SV * const constant = cv_const_sv((const CV *)sv); + + Perl_dump_indent(aTHX_ level, file, " XSUB = 0x%" UVxf "\n", PTR2UV(CvXSUB(sv))); + + if (constant) { + Perl_dump_indent(aTHX_ level, file, " XSUBANY = 0x%" UVxf + " (CONST SV)\n", + PTR2UV(CvXSUBANY(sv).any_ptr)); + do_sv_dump(level+1, file, constant, nest+1, maxnest, dumpops, + pvlim); + } else { + Perl_dump_indent(aTHX_ level, file, " XSUBANY = %" IVdf "\n", + (IV)CvXSUBANY(sv).any_i32); + } + } + if (CvNAMED(sv)) + Perl_dump_indent(aTHX_ level, file, " NAME = \"%s\"\n", + HEK_KEY(CvNAME_HEK((CV *)sv))); + else do_gvgv_dump(level, file, " GVGV::GV", CvGV(sv)); + Perl_dump_indent(aTHX_ level, file, " FILE = \"%s\"\n", CvFILE(sv)); + Perl_dump_indent(aTHX_ level, file, " DEPTH = %" IVdf "\n", (IV)CvDEPTH(sv)); - Perl_dump_indent(aTHX_ level, file, " FLAGS = 0x%" UVxf "\n", + Perl_dump_indent(aTHX_ level, file, " FLAGS = 0x%" UVxf "\n", (UV)CvFLAGS(sv)); - Perl_dump_indent(aTHX_ level, file, " OUTSIDE_SEQ = %" UVuf "\n", (UV)CvOUTSIDE_SEQ(sv)); - if (!CvISXSUB(sv)) { - Perl_dump_indent(aTHX_ level, file, " PADLIST = 0x%" UVxf "\n", PTR2UV(CvPADLIST(sv))); - if (nest < maxnest) { - do_dump_pad(level+1, file, CvPADLIST(sv), 0); - } - } - else - Perl_dump_indent(aTHX_ level, file, " HSCXT = 0x%p\n", CvHSCXT(sv)); - { - const CV * const outside = CvOUTSIDE(sv); - Perl_dump_indent(aTHX_ level, file, " OUTSIDE = 0x%" UVxf " (%s)\n", - PTR2UV(outside), - (!outside ? "null" - : CvANON(outside) ? "ANON" - : (outside == PL_main_cv) ? "MAIN" - : CvUNIQUE(outside) ? "UNIQUE" - : CvGV(outside) ? - generic_pv_escape( - newSVpvs_flags("", SVs_TEMP), - GvNAME(CvGV(outside)), - GvNAMELEN(CvGV(outside)), - GvNAMEUTF8(CvGV(outside))) - : "UNDEFINED")); - } - if (CvOUTSIDE(sv) - && (nest < maxnest && (CvCLONE(sv) || CvCLONED(sv)))) - do_sv_dump(level+1, file, MUTABLE_SV(CvOUTSIDE(sv)), nest+1, maxnest, dumpops, pvlim); - break; + Perl_dump_indent(aTHX_ level, file, " OUTSIDE_SEQ = %" UVuf "\n", (UV)CvOUTSIDE_SEQ(sv)); + if (!CvISXSUB(sv)) { + Perl_dump_indent(aTHX_ level, file, " PADLIST = 0x%" UVxf "\n", PTR2UV(CvPADLIST(sv))); + if (nest < maxnest) { + do_dump_pad(level+1, file, CvPADLIST(sv), 0); + } + } + else + Perl_dump_indent(aTHX_ level, file, " HSCXT = 0x%p\n", CvHSCXT(sv)); + { + const CV * const outside = CvOUTSIDE(sv); + Perl_dump_indent(aTHX_ level, file, " OUTSIDE = 0x%" UVxf " (%s)\n", + PTR2UV(outside), + (!outside ? "null" + : CvANON(outside) ? "ANON" + : (outside == PL_main_cv) ? "MAIN" + : CvUNIQUE(outside) ? "UNIQUE" + : CvGV(outside) ? + generic_pv_escape( + newSVpvs_flags("", SVs_TEMP), + GvNAME(CvGV(outside)), + GvNAMELEN(CvGV(outside)), + GvNAMEUTF8(CvGV(outside))) + : "UNDEFINED")); + } + if (CvOUTSIDE(sv) + && (nest < maxnest && (CvCLONE(sv) || CvCLONED(sv)))) + do_sv_dump(level+1, file, MUTABLE_SV(CvOUTSIDE(sv)), nest+1, maxnest, dumpops, pvlim); + break; case SVt_PVGV: case SVt_PVLV: - if (type == SVt_PVLV) { - Perl_dump_indent(aTHX_ level, file, " TYPE = %c\n", LvTYPE(sv)); - Perl_dump_indent(aTHX_ level, file, " TARGOFF = %" IVdf "\n", (IV)LvTARGOFF(sv)); - Perl_dump_indent(aTHX_ level, file, " TARGLEN = %" IVdf "\n", (IV)LvTARGLEN(sv)); - Perl_dump_indent(aTHX_ level, file, " TARG = 0x%" UVxf "\n", PTR2UV(LvTARG(sv))); - Perl_dump_indent(aTHX_ level, file, " FLAGS = %" IVdf "\n", (IV)LvFLAGS(sv)); - if (isALPHA_FOLD_NE(LvTYPE(sv), 't')) - do_sv_dump(level+1, file, LvTARG(sv), nest+1, maxnest, - dumpops, pvlim); - } - if (isREGEXP(sv)) goto dumpregexp; - if (!isGV_with_GP(sv)) - break; + if (type == SVt_PVLV) { + Perl_dump_indent(aTHX_ level, file, " TYPE = %c\n", LvTYPE(sv)); + Perl_dump_indent(aTHX_ level, file, " TARGOFF = %" IVdf "\n", (IV)LvTARGOFF(sv)); + Perl_dump_indent(aTHX_ level, file, " TARGLEN = %" IVdf "\n", (IV)LvTARGLEN(sv)); + Perl_dump_indent(aTHX_ level, file, " TARG = 0x%" UVxf "\n", PTR2UV(LvTARG(sv))); + Perl_dump_indent(aTHX_ level, file, " FLAGS = %" IVdf "\n", (IV)LvFLAGS(sv)); + if (isALPHA_FOLD_NE(LvTYPE(sv), 't')) + do_sv_dump(level+1, file, LvTARG(sv), nest+1, maxnest, + dumpops, pvlim); + } + if (isREGEXP(sv)) goto dumpregexp; + if (!isGV_with_GP(sv)) + break; { SV* tmpsv = newSVpvs_flags("", SVs_TEMP); Perl_dump_indent(aTHX_ level, file, " NAME = \"%s\"\n", @@ -2346,78 +2452,78 @@ Perl_do_sv_dump(pTHX_ I32 level, PerlIO *file, SV *sv, I32 nest, I32 maxnest, bo GvNAMELEN(sv), GvNAMEUTF8(sv))); } - Perl_dump_indent(aTHX_ level, file, " NAMELEN = %" IVdf "\n", (IV)GvNAMELEN(sv)); - do_hv_dump (level, file, " GvSTASH", GvSTASH(sv)); - Perl_dump_indent(aTHX_ level, file, " FLAGS = 0x%" UVxf "\n", (UV)GvFLAGS(sv)); - Perl_dump_indent(aTHX_ level, file, " GP = 0x%" UVxf "\n", PTR2UV(GvGP(sv))); - if (!GvGP(sv)) - break; - Perl_dump_indent(aTHX_ level, file, " SV = 0x%" UVxf "\n", PTR2UV(GvSV(sv))); - Perl_dump_indent(aTHX_ level, file, " REFCNT = %" IVdf "\n", (IV)GvREFCNT(sv)); - Perl_dump_indent(aTHX_ level, file, " IO = 0x%" UVxf "\n", PTR2UV(GvIOp(sv))); - Perl_dump_indent(aTHX_ level, file, " FORM = 0x%" UVxf " \n", PTR2UV(GvFORM(sv))); - Perl_dump_indent(aTHX_ level, file, " AV = 0x%" UVxf "\n", PTR2UV(GvAV(sv))); - Perl_dump_indent(aTHX_ level, file, " HV = 0x%" UVxf "\n", PTR2UV(GvHV(sv))); - Perl_dump_indent(aTHX_ level, file, " CV = 0x%" UVxf "\n", PTR2UV(GvCV(sv))); - Perl_dump_indent(aTHX_ level, file, " CVGEN = 0x%" UVxf "\n", (UV)GvCVGEN(sv)); - Perl_dump_indent(aTHX_ level, file, " GPFLAGS = 0x%" UVxf - " (%s)\n", - (UV)GvGPFLAGS(sv), - ""); - Perl_dump_indent(aTHX_ level, file, " LINE = %" IVdf "\n", (IV)GvLINE(sv)); - Perl_dump_indent(aTHX_ level, file, " FILE = \"%s\"\n", GvFILE(sv)); - do_gv_dump (level, file, " EGV", GvEGV(sv)); - break; + Perl_dump_indent(aTHX_ level, file, " NAMELEN = %" IVdf "\n", (IV)GvNAMELEN(sv)); + do_hv_dump (level, file, " GvSTASH", GvSTASH(sv)); + Perl_dump_indent(aTHX_ level, file, " FLAGS = 0x%" UVxf "\n", (UV)GvFLAGS(sv)); + Perl_dump_indent(aTHX_ level, file, " GP = 0x%" UVxf "\n", PTR2UV(GvGP(sv))); + if (!GvGP(sv)) + break; + Perl_dump_indent(aTHX_ level, file, " SV = 0x%" UVxf "\n", PTR2UV(GvSV(sv))); + Perl_dump_indent(aTHX_ level, file, " REFCNT = %" IVdf "\n", (IV)GvREFCNT(sv)); + Perl_dump_indent(aTHX_ level, file, " IO = 0x%" UVxf "\n", PTR2UV(GvIOp(sv))); + Perl_dump_indent(aTHX_ level, file, " FORM = 0x%" UVxf " \n", PTR2UV(GvFORM(sv))); + Perl_dump_indent(aTHX_ level, file, " AV = 0x%" UVxf "\n", PTR2UV(GvAV(sv))); + Perl_dump_indent(aTHX_ level, file, " HV = 0x%" UVxf "\n", PTR2UV(GvHV(sv))); + Perl_dump_indent(aTHX_ level, file, " CV = 0x%" UVxf "\n", PTR2UV(GvCV(sv))); + Perl_dump_indent(aTHX_ level, file, " CVGEN = 0x%" UVxf "\n", (UV)GvCVGEN(sv)); + Perl_dump_indent(aTHX_ level, file, " GPFLAGS = 0x%" UVxf + " (%s)\n", + (UV)GvGPFLAGS(sv), + ""); + Perl_dump_indent(aTHX_ level, file, " LINE = %" IVdf "\n", (IV)GvLINE(sv)); + Perl_dump_indent(aTHX_ level, file, " FILE = \"%s\"\n", GvFILE(sv)); + do_gv_dump (level, file, " EGV", GvEGV(sv)); + break; case SVt_PVIO: - Perl_dump_indent(aTHX_ level, file, " IFP = 0x%" UVxf "\n", PTR2UV(IoIFP(sv))); - Perl_dump_indent(aTHX_ level, file, " OFP = 0x%" UVxf "\n", PTR2UV(IoOFP(sv))); - Perl_dump_indent(aTHX_ level, file, " DIRP = 0x%" UVxf "\n", PTR2UV(IoDIRP(sv))); - Perl_dump_indent(aTHX_ level, file, " LINES = %" IVdf "\n", (IV)IoLINES(sv)); - Perl_dump_indent(aTHX_ level, file, " PAGE = %" IVdf "\n", (IV)IoPAGE(sv)); - Perl_dump_indent(aTHX_ level, file, " PAGE_LEN = %" IVdf "\n", (IV)IoPAGE_LEN(sv)); - Perl_dump_indent(aTHX_ level, file, " LINES_LEFT = %" IVdf "\n", (IV)IoLINES_LEFT(sv)); + Perl_dump_indent(aTHX_ level, file, " IFP = 0x%" UVxf "\n", PTR2UV(IoIFP(sv))); + Perl_dump_indent(aTHX_ level, file, " OFP = 0x%" UVxf "\n", PTR2UV(IoOFP(sv))); + Perl_dump_indent(aTHX_ level, file, " DIRP = 0x%" UVxf "\n", PTR2UV(IoDIRP(sv))); + Perl_dump_indent(aTHX_ level, file, " LINES = %" IVdf "\n", (IV)IoLINES(sv)); + Perl_dump_indent(aTHX_ level, file, " PAGE = %" IVdf "\n", (IV)IoPAGE(sv)); + Perl_dump_indent(aTHX_ level, file, " PAGE_LEN = %" IVdf "\n", (IV)IoPAGE_LEN(sv)); + Perl_dump_indent(aTHX_ level, file, " LINES_LEFT = %" IVdf "\n", (IV)IoLINES_LEFT(sv)); if (IoTOP_NAME(sv)) Perl_dump_indent(aTHX_ level, file, " TOP_NAME = \"%s\"\n", IoTOP_NAME(sv)); - if (!IoTOP_GV(sv) || SvTYPE(IoTOP_GV(sv)) == SVt_PVGV) - do_gv_dump (level, file, " TOP_GV", IoTOP_GV(sv)); - else { - Perl_dump_indent(aTHX_ level, file, " TOP_GV = 0x%" UVxf "\n", - PTR2UV(IoTOP_GV(sv))); - do_sv_dump (level+1, file, MUTABLE_SV(IoTOP_GV(sv)), nest+1, - maxnest, dumpops, pvlim); - } - /* Source filters hide things that are not GVs in these three, so let's - be careful out there. */ + if (!IoTOP_GV(sv) || SvTYPE(IoTOP_GV(sv)) == SVt_PVGV) + do_gv_dump (level, file, " TOP_GV", IoTOP_GV(sv)); + else { + Perl_dump_indent(aTHX_ level, file, " TOP_GV = 0x%" UVxf "\n", + PTR2UV(IoTOP_GV(sv))); + do_sv_dump (level+1, file, MUTABLE_SV(IoTOP_GV(sv)), nest+1, + maxnest, dumpops, pvlim); + } + /* Source filters hide things that are not GVs in these three, so let's + be careful out there. */ if (IoFMT_NAME(sv)) Perl_dump_indent(aTHX_ level, file, " FMT_NAME = \"%s\"\n", IoFMT_NAME(sv)); - if (!IoFMT_GV(sv) || SvTYPE(IoFMT_GV(sv)) == SVt_PVGV) - do_gv_dump (level, file, " FMT_GV", IoFMT_GV(sv)); - else { - Perl_dump_indent(aTHX_ level, file, " FMT_GV = 0x%" UVxf "\n", - PTR2UV(IoFMT_GV(sv))); - do_sv_dump (level+1, file, MUTABLE_SV(IoFMT_GV(sv)), nest+1, - maxnest, dumpops, pvlim); - } + if (!IoFMT_GV(sv) || SvTYPE(IoFMT_GV(sv)) == SVt_PVGV) + do_gv_dump (level, file, " FMT_GV", IoFMT_GV(sv)); + else { + Perl_dump_indent(aTHX_ level, file, " FMT_GV = 0x%" UVxf "\n", + PTR2UV(IoFMT_GV(sv))); + do_sv_dump (level+1, file, MUTABLE_SV(IoFMT_GV(sv)), nest+1, + maxnest, dumpops, pvlim); + } if (IoBOTTOM_NAME(sv)) Perl_dump_indent(aTHX_ level, file, " BOTTOM_NAME = \"%s\"\n", IoBOTTOM_NAME(sv)); - if (!IoBOTTOM_GV(sv) || SvTYPE(IoBOTTOM_GV(sv)) == SVt_PVGV) - do_gv_dump (level, file, " BOTTOM_GV", IoBOTTOM_GV(sv)); - else { - Perl_dump_indent(aTHX_ level, file, " BOTTOM_GV = 0x%" UVxf "\n", - PTR2UV(IoBOTTOM_GV(sv))); - do_sv_dump (level+1, file, MUTABLE_SV(IoBOTTOM_GV(sv)), nest+1, - maxnest, dumpops, pvlim); - } - if (isPRINT(IoTYPE(sv))) + if (!IoBOTTOM_GV(sv) || SvTYPE(IoBOTTOM_GV(sv)) == SVt_PVGV) + do_gv_dump (level, file, " BOTTOM_GV", IoBOTTOM_GV(sv)); + else { + Perl_dump_indent(aTHX_ level, file, " BOTTOM_GV = 0x%" UVxf "\n", + PTR2UV(IoBOTTOM_GV(sv))); + do_sv_dump (level+1, file, MUTABLE_SV(IoBOTTOM_GV(sv)), nest+1, + maxnest, dumpops, pvlim); + } + if (isPRINT(IoTYPE(sv))) Perl_dump_indent(aTHX_ level, file, " TYPE = '%c'\n", IoTYPE(sv)); - else + else Perl_dump_indent(aTHX_ level, file, " TYPE = '\\%o'\n", IoTYPE(sv)); - Perl_dump_indent(aTHX_ level, file, " FLAGS = 0x%" UVxf "\n", (UV)IoFLAGS(sv)); - break; + Perl_dump_indent(aTHX_ level, file, " FLAGS = 0x%" UVxf "\n", (UV)IoFLAGS(sv)); + break; case SVt_REGEXP: dumpregexp: - { - struct regexp * const r = ReANY((REGEXP*)sv); + { + struct regexp * const r = ReANY((REGEXP*)sv); #define SV_SET_STRINGIFY_REGEXP_FLAGS(d,flags,names) STMT_START { \ sv_setpv(d,""); \ @@ -2432,7 +2538,7 @@ Perl_do_sv_dump(pTHX_ I32 level, PerlIO *file, SV *sv, I32 nest, I32 maxnest, bo (UV)(r->compflags), SvPVX_const(d)); SV_SET_STRINGIFY_REGEXP_FLAGS(d,r->extflags,regexp_extflags_names); - Perl_dump_indent(aTHX_ level, file, " EXTFLAGS = 0x%" UVxf " (%s)\n", + Perl_dump_indent(aTHX_ level, file, " EXTFLAGS = 0x%" UVxf " (%s)\n", (UV)(r->extflags), SvPVX_const(d)); Perl_dump_indent(aTHX_ level, file, " ENGINE = 0x%" UVxf " (%s)\n", @@ -2443,56 +2549,56 @@ Perl_do_sv_dump(pTHX_ I32 level, PerlIO *file, SV *sv, I32 nest, I32 maxnest, bo (UV)(r->intflags), SvPVX_const(d)); } else { Perl_dump_indent(aTHX_ level, file, " INTFLAGS = 0x%" UVxf "\n", - (UV)(r->intflags)); + (UV)(r->intflags)); } #undef SV_SET_STRINGIFY_REGEXP_FLAGS - Perl_dump_indent(aTHX_ level, file, " NPARENS = %" UVuf "\n", - (UV)(r->nparens)); - Perl_dump_indent(aTHX_ level, file, " LASTPAREN = %" UVuf "\n", - (UV)(r->lastparen)); - Perl_dump_indent(aTHX_ level, file, " LASTCLOSEPAREN = %" UVuf "\n", - (UV)(r->lastcloseparen)); - Perl_dump_indent(aTHX_ level, file, " MINLEN = %" IVdf "\n", - (IV)(r->minlen)); - Perl_dump_indent(aTHX_ level, file, " MINLENRET = %" IVdf "\n", - (IV)(r->minlenret)); - Perl_dump_indent(aTHX_ level, file, " GOFS = %" UVuf "\n", - (UV)(r->gofs)); - Perl_dump_indent(aTHX_ level, file, " PRE_PREFIX = %" UVuf "\n", - (UV)(r->pre_prefix)); - Perl_dump_indent(aTHX_ level, file, " SUBLEN = %" IVdf "\n", - (IV)(r->sublen)); - Perl_dump_indent(aTHX_ level, file, " SUBOFFSET = %" IVdf "\n", - (IV)(r->suboffset)); - Perl_dump_indent(aTHX_ level, file, " SUBCOFFSET = %" IVdf "\n", - (IV)(r->subcoffset)); - if (r->subbeg) - Perl_dump_indent(aTHX_ level, file, " SUBBEG = 0x%" UVxf " %s\n", - PTR2UV(r->subbeg), - pv_display(d, r->subbeg, r->sublen, 50, pvlim)); - else - Perl_dump_indent(aTHX_ level, file, " SUBBEG = 0x0\n"); - Perl_dump_indent(aTHX_ level, file, " MOTHER_RE = 0x%" UVxf "\n", - PTR2UV(r->mother_re)); - if (nest < maxnest && r->mother_re) - do_sv_dump(level+1, file, (SV *)r->mother_re, nest+1, - maxnest, dumpops, pvlim); - Perl_dump_indent(aTHX_ level, file, " PAREN_NAMES = 0x%" UVxf "\n", - PTR2UV(r->paren_names)); - Perl_dump_indent(aTHX_ level, file, " SUBSTRS = 0x%" UVxf "\n", - PTR2UV(r->substrs)); - Perl_dump_indent(aTHX_ level, file, " PPRIVATE = 0x%" UVxf "\n", - PTR2UV(r->pprivate)); - Perl_dump_indent(aTHX_ level, file, " OFFS = 0x%" UVxf "\n", - PTR2UV(r->offs)); - Perl_dump_indent(aTHX_ level, file, " QR_ANONCV = 0x%" UVxf "\n", - PTR2UV(r->qr_anoncv)); + Perl_dump_indent(aTHX_ level, file, " NPARENS = %" UVuf "\n", + (UV)(r->nparens)); + Perl_dump_indent(aTHX_ level, file, " LASTPAREN = %" UVuf "\n", + (UV)(r->lastparen)); + Perl_dump_indent(aTHX_ level, file, " LASTCLOSEPAREN = %" UVuf "\n", + (UV)(r->lastcloseparen)); + Perl_dump_indent(aTHX_ level, file, " MINLEN = %" IVdf "\n", + (IV)(r->minlen)); + Perl_dump_indent(aTHX_ level, file, " MINLENRET = %" IVdf "\n", + (IV)(r->minlenret)); + Perl_dump_indent(aTHX_ level, file, " GOFS = %" UVuf "\n", + (UV)(r->gofs)); + Perl_dump_indent(aTHX_ level, file, " PRE_PREFIX = %" UVuf "\n", + (UV)(r->pre_prefix)); + Perl_dump_indent(aTHX_ level, file, " SUBLEN = %" IVdf "\n", + (IV)(r->sublen)); + Perl_dump_indent(aTHX_ level, file, " SUBOFFSET = %" IVdf "\n", + (IV)(r->suboffset)); + Perl_dump_indent(aTHX_ level, file, " SUBCOFFSET = %" IVdf "\n", + (IV)(r->subcoffset)); + if (r->subbeg) + Perl_dump_indent(aTHX_ level, file, " SUBBEG = 0x%" UVxf " %s\n", + PTR2UV(r->subbeg), + pv_display(d, r->subbeg, r->sublen, 50, pvlim)); + else + Perl_dump_indent(aTHX_ level, file, " SUBBEG = 0x0\n"); + Perl_dump_indent(aTHX_ level, file, " MOTHER_RE = 0x%" UVxf "\n", + PTR2UV(r->mother_re)); + if (nest < maxnest && r->mother_re) + do_sv_dump(level+1, file, (SV *)r->mother_re, nest+1, + maxnest, dumpops, pvlim); + Perl_dump_indent(aTHX_ level, file, " PAREN_NAMES = 0x%" UVxf "\n", + PTR2UV(r->paren_names)); + Perl_dump_indent(aTHX_ level, file, " SUBSTRS = 0x%" UVxf "\n", + PTR2UV(r->substrs)); + Perl_dump_indent(aTHX_ level, file, " PPRIVATE = 0x%" UVxf "\n", + PTR2UV(r->pprivate)); + Perl_dump_indent(aTHX_ level, file, " OFFS = 0x%" UVxf "\n", + PTR2UV(r->offs)); + Perl_dump_indent(aTHX_ level, file, " QR_ANONCV = 0x%" UVxf "\n", + PTR2UV(r->qr_anoncv)); #ifdef PERL_ANY_COW - Perl_dump_indent(aTHX_ level, file, " SAVED_COPY = 0x%" UVxf "\n", - PTR2UV(r->saved_copy)); + Perl_dump_indent(aTHX_ level, file, " SAVED_COPY = 0x%" UVxf "\n", + PTR2UV(r->saved_copy)); #endif - } - break; + } + break; } SvREFCNT_dec_NN(d); } @@ -2511,9 +2617,9 @@ void Perl_sv_dump(pTHX_ SV *sv) { if (sv && SvROK(sv)) - do_sv_dump(0, Perl_debug_log, sv, 0, 4, 0, 0); + do_sv_dump(0, Perl_debug_log, sv, 0, 4, 0, 0); else - do_sv_dump(0, Perl_debug_log, sv, 0, 0, 0, 0); + do_sv_dump(0, Perl_debug_log, sv, 0, 0, 0, 0); } int @@ -2526,8 +2632,8 @@ Perl_runops_debug(pTHX) #endif if (!PL_op) { - Perl_ck_warner_d(aTHX_ packWARN(WARN_DEBUGGING), "NULL OP IN RUN"); - return 0; + Perl_ck_warner_d(aTHX_ packWARN(WARN_DEBUGGING), "NULL OP IN RUN"); + return 0; } DEBUG_l(Perl_deb(aTHX_ "Entering new RUNOPS level\n")); do { @@ -2543,29 +2649,29 @@ Perl_runops_debug(pTHX) PL_stack_base + PL_curstackinfo->si_stack_hwm); PL_curstackinfo->si_stack_hwm = PL_stack_sp - PL_stack_base; #endif - if (PL_debug) { + if (PL_debug) { ENTER; SAVETMPS; - if (PL_watchaddr && (*PL_watchaddr != PL_watchok)) - PerlIO_printf(Perl_debug_log, - "WARNING: %" UVxf " changed from %" UVxf " to %" UVxf "\n", - PTR2UV(PL_watchaddr), PTR2UV(PL_watchok), - PTR2UV(*PL_watchaddr)); - if (DEBUG_s_TEST_) { - if (DEBUG_v_TEST_) { - PerlIO_printf(Perl_debug_log, "\n"); - deb_stack_all(); - } - else - debstack(); - } - - - if (DEBUG_t_TEST_) debop(PL_op); - if (DEBUG_P_TEST_) debprof(PL_op); + if (PL_watchaddr && (*PL_watchaddr != PL_watchok)) + PerlIO_printf(Perl_debug_log, + "WARNING: %" UVxf " changed from %" UVxf " to %" UVxf "\n", + PTR2UV(PL_watchaddr), PTR2UV(PL_watchok), + PTR2UV(*PL_watchaddr)); + if (DEBUG_s_TEST_) { + if (DEBUG_v_TEST_) { + PerlIO_printf(Perl_debug_log, "\n"); + deb_stack_all(); + } + else + debstack(); + } + + + if (DEBUG_t_TEST_) debop(PL_op); + if (DEBUG_P_TEST_) debprof(PL_op); FREETMPS; LEAVE; - } + } PERL_DTRACE_PROBE_OP(PL_op); } while ((PL_op = PL_op->op_ppaddr(aTHX))); @@ -2657,7 +2763,7 @@ S_append_gv_name(pTHX_ GV *gv, SV *out) sv_catpvs_nomg(out, ""); return; } - sv = newSV(0); + sv = newSV_type(SVt_NULL); gv_fullname4(sv, gv, NULL, FALSE); Perl_sv_catpvf(aTHX_ out, "$%" SVf, SVfARG(sv)); SvREFCNT_dec_NN(sv); @@ -2854,32 +2960,40 @@ Perl_multiconcat_stringify(pTHX_ const OP *o) } +/* +=for apidoc debop + +Implements B<-Dt> perl command line option on OP C. + +=cut +*/ + I32 Perl_debop(pTHX_ const OP *o) { PERL_ARGS_ASSERT_DEBOP; if (CopSTASH_eq(PL_curcop, PL_debstash) && !DEBUG_J_TEST_) - return 0; + return 0; Perl_deb(aTHX_ "%s", OP_NAME(o)); switch (o->op_type) { case OP_CONST: case OP_HINTSEVAL: - /* With ITHREADS, consts are stored in the pad, and the right pad - * may not be active here, so check. - * Looks like only during compiling the pads are illegal. - */ + /* With ITHREADS, consts are stored in the pad, and the right pad + * may not be active here, so check. + * Looks like only during compiling the pads are illegal. + */ #ifdef USE_ITHREADS - if ((((SVOP*)o)->op_sv) || !IN_PERL_COMPILETIME) + if ((((SVOP*)o)->op_sv) || !IN_PERL_COMPILETIME) #endif - PerlIO_printf(Perl_debug_log, "(%s)", SvPEEK(cSVOPo_sv)); - break; + PerlIO_printf(Perl_debug_log, "(%s)", SvPEEK(cSVOPo_sv)); + break; case OP_GVSV: case OP_GV: PerlIO_printf(Perl_debug_log, "(%" SVf ")", SVfARG(S_gv_display(aTHX_ cGVOPo_gv))); - break; + break; case OP_PADSV: case OP_PADAV: @@ -2904,7 +3018,7 @@ Perl_debop(pTHX_ const OP *o) break; default: - break; + break; } PerlIO_printf(Perl_debug_log, "\n"); return 0; @@ -2927,29 +3041,29 @@ Perl_op_class(pTHX_ const OP *o) bool custom = 0; if (!o) - return OPclass_NULL; + return OPclass_NULL; if (o->op_type == 0) { - if (o->op_targ == OP_NEXTSTATE || o->op_targ == OP_DBSTATE) - return OPclass_COP; - return (o->op_flags & OPf_KIDS) ? OPclass_UNOP : OPclass_BASEOP; + if (o->op_targ == OP_NEXTSTATE || o->op_targ == OP_DBSTATE) + return OPclass_COP; + return (o->op_flags & OPf_KIDS) ? OPclass_UNOP : OPclass_BASEOP; } if (o->op_type == OP_SASSIGN) - return ((o->op_private & OPpASSIGN_BACKWARDS) ? OPclass_UNOP : OPclass_BINOP); + return ((o->op_private & OPpASSIGN_BACKWARDS) ? OPclass_UNOP : OPclass_BINOP); if (o->op_type == OP_AELEMFAST) { #ifdef USE_ITHREADS - return OPclass_PADOP; + return OPclass_PADOP; #else - return OPclass_SVOP; + return OPclass_SVOP; #endif } #ifdef USE_ITHREADS if (o->op_type == OP_GV || o->op_type == OP_GVSV || - o->op_type == OP_RCATLINE) - return OPclass_PADOP; + o->op_type == OP_RCATLINE) + return OPclass_PADOP; #endif if (o->op_type == OP_CUSTOM) @@ -2957,28 +3071,28 @@ Perl_op_class(pTHX_ const OP *o) switch (OP_CLASS(o)) { case OA_BASEOP: - return OPclass_BASEOP; + return OPclass_BASEOP; case OA_UNOP: - return OPclass_UNOP; + return OPclass_UNOP; case OA_BINOP: - return OPclass_BINOP; + return OPclass_BINOP; case OA_LOGOP: - return OPclass_LOGOP; + return OPclass_LOGOP; case OA_LISTOP: - return OPclass_LISTOP; + return OPclass_LISTOP; case OA_PMOP: - return OPclass_PMOP; + return OPclass_PMOP; case OA_SVOP: - return OPclass_SVOP; + return OPclass_SVOP; case OA_PADOP: - return OPclass_PADOP; + return OPclass_PADOP; case OA_PVOP_OR_SVOP: /* @@ -2988,70 +3102,70 @@ Perl_op_class(pTHX_ const OP *o) * the OP is an SVOP (or, under threads, a PADOP), * and the SV is an AV. */ - return (!custom && - (o->op_private & OPpTRANS_USE_SVOP) - ) + return (!custom && + (o->op_private & OPpTRANS_USE_SVOP) + ) #if defined(USE_ITHREADS) - ? OPclass_PADOP : OPclass_PVOP; + ? OPclass_PADOP : OPclass_PVOP; #else - ? OPclass_SVOP : OPclass_PVOP; + ? OPclass_SVOP : OPclass_PVOP; #endif case OA_LOOP: - return OPclass_LOOP; + return OPclass_LOOP; case OA_COP: - return OPclass_COP; + return OPclass_COP; case OA_BASEOP_OR_UNOP: - /* - * UNI(OP_foo) in toke.c returns token UNI or FUNC1 depending on - * whether parens were seen. perly.y uses OPf_SPECIAL to - * signal whether a BASEOP had empty parens or none. - * Some other UNOPs are created later, though, so the best - * test is OPf_KIDS, which is set in newUNOP. - */ - return (o->op_flags & OPf_KIDS) ? OPclass_UNOP : OPclass_BASEOP; + /* + * UNI(OP_foo) in toke.c returns token UNI or FUNC1 depending on + * whether parens were seen. perly.y uses OPf_SPECIAL to + * signal whether a BASEOP had empty parens or none. + * Some other UNOPs are created later, though, so the best + * test is OPf_KIDS, which is set in newUNOP. + */ + return (o->op_flags & OPf_KIDS) ? OPclass_UNOP : OPclass_BASEOP; case OA_FILESTATOP: - /* - * The file stat OPs are created via UNI(OP_foo) in toke.c but use - * the OPf_REF flag to distinguish between OP types instead of the - * usual OPf_SPECIAL flag. As usual, if OPf_KIDS is set, then we - * return OPclass_UNOP so that walkoptree can find our children. If - * OPf_KIDS is not set then we check OPf_REF. Without OPf_REF set - * (no argument to the operator) it's an OP; with OPf_REF set it's - * an SVOP (and op_sv is the GV for the filehandle argument). - */ - return ((o->op_flags & OPf_KIDS) ? OPclass_UNOP : + /* + * The file stat OPs are created via UNI(OP_foo) in toke.c but use + * the OPf_REF flag to distinguish between OP types instead of the + * usual OPf_SPECIAL flag. As usual, if OPf_KIDS is set, then we + * return OPclass_UNOP so that walkoptree can find our children. If + * OPf_KIDS is not set then we check OPf_REF. Without OPf_REF set + * (no argument to the operator) it's an OP; with OPf_REF set it's + * an SVOP (and op_sv is the GV for the filehandle argument). + */ + return ((o->op_flags & OPf_KIDS) ? OPclass_UNOP : #ifdef USE_ITHREADS - (o->op_flags & OPf_REF) ? OPclass_PADOP : OPclass_BASEOP); + (o->op_flags & OPf_REF) ? OPclass_PADOP : OPclass_BASEOP); #else - (o->op_flags & OPf_REF) ? OPclass_SVOP : OPclass_BASEOP); + (o->op_flags & OPf_REF) ? OPclass_SVOP : OPclass_BASEOP); #endif case OA_LOOPEXOP: - /* - * next, last, redo, dump and goto use OPf_SPECIAL to indicate that a - * label was omitted (in which case it's a BASEOP) or else a term was - * seen. In this last case, all except goto are definitely PVOP but - * goto is either a PVOP (with an ordinary constant label), an UNOP - * with OPf_STACKED (with a non-constant non-sub) or an UNOP for - * OP_REFGEN (with goto &sub) in which case OPf_STACKED also seems to - * get set. - */ - if (o->op_flags & OPf_STACKED) - return OPclass_UNOP; - else if (o->op_flags & OPf_SPECIAL) - return OPclass_BASEOP; - else - return OPclass_PVOP; + /* + * next, last, redo, dump and goto use OPf_SPECIAL to indicate that a + * label was omitted (in which case it's a BASEOP) or else a term was + * seen. In this last case, all except goto are definitely PVOP but + * goto is either a PVOP (with an ordinary constant label), an UNOP + * with OPf_STACKED (with a non-constant non-sub) or an UNOP for + * OP_REFGEN (with goto &sub) in which case OPf_STACKED also seems to + * get set. + */ + if (o->op_flags & OPf_STACKED) + return OPclass_UNOP; + else if (o->op_flags & OPf_SPECIAL) + return OPclass_BASEOP; + else + return OPclass_PVOP; case OA_METHOP: - return OPclass_METHOP; + return OPclass_METHOP; case OA_UNOP_AUX: - return OPclass_UNOP_AUX; + return OPclass_UNOP_AUX; } Perl_warn(aTHX_ "Can't determine class of operator %s, assuming BASEOP\n", - OP_NAME(o)); + OP_NAME(o)); return OPclass_BASEOP; } @@ -3066,7 +3180,7 @@ S_deb_curcv(pTHX_ I32 ix) if (CxTYPE(cx) == CXt_SUB || CxTYPE(cx) == CXt_FORMAT) return cx->blk_sub.cv; - else if (CxTYPE(cx) == CXt_EVAL && !CxTRYBLOCK(cx)) + else if (CxTYPE(cx) == CXt_EVAL && !CxEVALBLOCK(cx)) return cx->blk_eval.cv; else if (ix == 0 && si->si_type == PERLSI_MAIN) return PL_main_cv; @@ -3089,31 +3203,49 @@ Perl_watch(pTHX_ char **addr) PL_watchaddr = addr; PL_watchok = *addr; PerlIO_printf(Perl_debug_log, "WATCHING, %" UVxf " is currently %" UVxf "\n", - PTR2UV(PL_watchaddr), PTR2UV(PL_watchok)); + PTR2UV(PL_watchaddr), PTR2UV(PL_watchok)); } +/* +=for apidoc debprof + +Called to indicate that C was executed, for profiling purposes under the +C<-DP> command line option. + +=cut +*/ + STATIC void S_debprof(pTHX_ const OP *o) { PERL_ARGS_ASSERT_DEBPROF; if (!DEBUG_J_TEST_ && CopSTASH_eq(PL_curcop, PL_debstash)) - return; + return; if (!PL_profiledata) - Newxz(PL_profiledata, MAXO, U32); + Newxz(PL_profiledata, MAXO, U32); ++PL_profiledata[o->op_type]; } +/* +=for apidoc debprofdump + +Dumps the contents of the data collected by the C<-DP> perl command line +option. + +=cut +*/ + void Perl_debprofdump(pTHX) { unsigned i; if (!PL_profiledata) - return; + return; for (i = 0; i < MAXO; i++) { - if (PL_profiledata[i]) - PerlIO_printf(Perl_debug_log, - "%5lu %s\n", (unsigned long)PL_profiledata[i], + if (PL_profiledata[i]) + PerlIO_printf(Perl_debug_log, + "%5lu %s\n", (unsigned long)PL_profiledata[i], PL_op_name[i]); } } diff --git a/gnu/usr.bin/perl/ebcdic_tables.h b/gnu/usr.bin/perl/ebcdic_tables.h index cf1beeb85e2..9182d504f23 100644 --- a/gnu/usr.bin/perl/ebcdic_tables.h +++ b/gnu/usr.bin/perl/ebcdic_tables.h @@ -44,9 +44,9 @@ SOFTWARE. /* Index is ASCII platform code point; value is EBCDIC 1047 equivalent */ # ifndef DOINIT - EXTCONST U8 PL_a2e[]; + EXTCONST U8 PL_a2e[256]; # else - EXTCONST U8 PL_a2e[] = { + EXTCONST U8 PL_a2e[256] = { /* _0 _1 _2 _3 _4 _5 _6 _7 _8 _9 _A _B _C _D _E _F*/ /*0_*/0x00,0x01,0x02,0x03,0x37,0x2D,0x2E,0x2F,0x16,0x05,0x15,0x0B,0x0C,0x0D,0x0E,0x0F, /*1_*/0x10,0x11,0x12,0x13,0x3C,0x3D,0x32,0x26,0x18,0x19,0x3F,0x27,0x1C,0x1D,0x1E,0x1F, @@ -70,9 +70,9 @@ SOFTWARE. /* Index is EBCDIC 1047 code point; value is ASCII platform equivalent */ # ifndef DOINIT - EXTCONST U8 PL_e2a[]; + EXTCONST U8 PL_e2a[256]; # else - EXTCONST U8 PL_e2a[] = { + EXTCONST U8 PL_e2a[256] = { /* _0 _1 _2 _3 _4 _5 _6 _7 _8 _9 _A _B _C _D _E _F*/ /*0_*/0x00,0x01,0x02,0x03,0x9C,0x09,0x86,0x7F,0x97,0x8D,0x8E,0x0B,0x0C,0x0D,0x0E,0x0F, /*1_*/0x10,0x11,0x12,0x13,0x9D,0x0A,0x08,0x87,0x18,0x19,0x92,0x8F,0x1C,0x1D,0x1E,0x1F, @@ -97,9 +97,9 @@ SOFTWARE. /* (Confusingly named) Index is EBCDIC 1047 I8 byte; value is * EBCDIC 1047 UTF-EBCDIC equivalent */ # ifndef DOINIT - EXTCONST U8 PL_utf2e[]; + EXTCONST U8 PL_utf2e[256]; # else - EXTCONST U8 PL_utf2e[] = { + EXTCONST U8 PL_utf2e[256] = { /* _0 _1 _2 _3 _4 _5 _6 _7 _8 _9 _A _B _C _D _E _F*/ /*0_*/0x00,0x01,0x02,0x03,0x37,0x2D,0x2E,0x2F,0x16,0x05,0x15,0x0B,0x0C,0x0D,0x0E,0x0F, /*1_*/0x10,0x11,0x12,0x13,0x3C,0x3D,0x32,0x26,0x18,0x19,0x3F,0x27,0x1C,0x1D,0x1E,0x1F, @@ -124,9 +124,9 @@ SOFTWARE. /* (Confusingly named) Index is EBCDIC 1047 UTF-EBCDIC byte; value is * EBCDIC 1047 I8 equivalent */ # ifndef DOINIT - EXTCONST U8 PL_e2utf[]; + EXTCONST U8 PL_e2utf[256]; # else - EXTCONST U8 PL_e2utf[] = { + EXTCONST U8 PL_e2utf[256] = { /* _0 _1 _2 _3 _4 _5 _6 _7 _8 _9 _A _B _C _D _E _F*/ /*0_*/0x00,0x01,0x02,0x03,0x9C,0x09,0x86,0x7F,0x97,0x8D,0x8E,0x0B,0x0C,0x0D,0x0E,0x0F, /*1_*/0x10,0x11,0x12,0x13,0x9D,0x0A,0x08,0x87,0x18,0x19,0x92,0x8F,0x1C,0x1D,0x1E,0x1F, @@ -153,9 +153,9 @@ SOFTWARE. * flags table in tr16. The entries marked 9 in tr16 are continuation bytes * and are marked as length 1 here so that we can recover. */ # ifndef DOINIT - EXTCONST U8 PL_utf8skip[]; + EXTCONST U8 PL_utf8skip[256]; # else - EXTCONST U8 PL_utf8skip[] = { + EXTCONST U8 PL_utf8skip[256] = { /* _0 _1 _2 _3 _4 _5 _6 _7 _8 _9 _A _B _C _D _E _F*/ /*0_*/ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, /*1_*/ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, @@ -179,9 +179,9 @@ SOFTWARE. /* Index is EBCDIC 1047 code point; value is its lowercase equivalent */ # ifndef DOINIT - EXTCONST U8 PL_latin1_lc[]; + EXTCONST U8 PL_latin1_lc[256]; # else - EXTCONST U8 PL_latin1_lc[] = { + EXTCONST U8 PL_latin1_lc[256] = { /* _0 _1 _2 _3 _4 _5 _6 _7 _8 _9 _A _B _C _D _E _F*/ /*0_*/0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09,0x0A,0x0B,0x0C,0x0D,0x0E,0x0F, /*1_*/0x10,0x11,0x12,0x13,0x14,0x15,0x16,0x17,0x18,0x19,0x1A,0x1B,0x1C,0x1D,0x1E,0x1F, @@ -207,9 +207,9 @@ SOFTWARE. * The 'mod' in the name means that codepoints whose uppercase is above 255 or * longer than 1 character map to LATIN SMALL LETTER Y WITH DIARESIS */ # ifndef DOINIT - EXTCONST U8 PL_mod_latin1_uc[]; + EXTCONST U8 PL_mod_latin1_uc[256]; # else - EXTCONST U8 PL_mod_latin1_uc[] = { + EXTCONST U8 PL_mod_latin1_uc[256] = { /* _0 _1 _2 _3 _4 _5 _6 _7 _8 _9 _A _B _C _D _E _F*/ /*0_*/0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09,0x0A,0x0B,0x0C,0x0D,0x0E,0x0F, /*1_*/0x10,0x11,0x12,0x13,0x14,0x15,0x16,0x17,0x18,0x19,0x1A,0x1B,0x1C,0x1D,0x1E,0x1F, @@ -234,9 +234,34 @@ SOFTWARE. /* Index is EBCDIC 1047 code point; For A-Z, value is a-z; for a-z, value * is A-Z; all other code points map to themselves */ # ifndef DOINIT - EXTCONST U8 PL_fold[]; + EXTCONST U8 PL_fold[256]; # else - EXTCONST U8 PL_fold[] = { + EXTCONST U8 PL_fold[256] = { +/* _0 _1 _2 _3 _4 _5 _6 _7 _8 _9 _A _B _C _D _E _F*/ +/*0_*/0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09,0x0A,0x0B,0x0C,0x0D,0x0E,0x0F, +/*1_*/0x10,0x11,0x12,0x13,0x14,0x15,0x16,0x17,0x18,0x19,0x1A,0x1B,0x1C,0x1D,0x1E,0x1F, +/*2_*/0x20,0x21,0x22,0x23,0x24,0x25,0x26,0x27,0x28,0x29,0x2A,0x2B,0x2C,0x2D,0x2E,0x2F, +/*3_*/0x30,0x31,0x32,0x33,0x34,0x35,0x36,0x37,0x38,0x39,0x3A,0x3B,0x3C,0x3D,0x3E,0x3F, +/*4_*/0x40,0x41,0x42,0x43,0x44,0x45,0x46,0x47,0x48,0x49,0x4A,0x4B,0x4C,0x4D,0x4E,0x4F, +/*5_*/0x50,0x51,0x52,0x53,0x54,0x55,0x56,0x57,0x58,0x59,0x5A,0x5B,0x5C,0x5D,0x5E,0x5F, +/*6_*/0x60,0x61,0x62,0x63,0x64,0x65,0x66,0x67,0x68,0x69,0x6A,0x6B,0x6C,0x6D,0x6E,0x6F, +/*7_*/0x70,0x71,0x72,0x73,0x74,0x75,0x76,0x77,0x78,0x79,0x7A,0x7B,0x7C,0x7D,0x7E,0x7F, +/*8_*/0x80,0xC1,0xC2,0xC3,0xC4,0xC5,0xC6,0xC7,0xC8,0xC9,0x8A,0x8B,0x8C,0x8D,0x8E,0x8F, +/*9_*/0x90,0xD1,0xD2,0xD3,0xD4,0xD5,0xD6,0xD7,0xD8,0xD9,0x9A,0x9B,0x9C,0x9D,0x9E,0x9F, +/*A_*/0xA0,0xA1,0xE2,0xE3,0xE4,0xE5,0xE6,0xE7,0xE8,0xE9,0xAA,0xAB,0xAC,0xAD,0xAE,0xAF, +/*B_*/0xB0,0xB1,0xB2,0xB3,0xB4,0xB5,0xB6,0xB7,0xB8,0xB9,0xBA,0xBB,0xBC,0xBD,0xBE,0xBF, +/*C_*/0xC0,0x81,0x82,0x83,0x84,0x85,0x86,0x87,0x88,0x89,0xCA,0xCB,0xCC,0xCD,0xCE,0xCF, +/*D_*/0xD0,0x91,0x92,0x93,0x94,0x95,0x96,0x97,0x98,0x99,0xDA,0xDB,0xDC,0xDD,0xDE,0xDF, +/*E_*/0xE0,0xE1,0xA2,0xA3,0xA4,0xA5,0xA6,0xA7,0xA8,0xA9,0xEA,0xEB,0xEC,0xED,0xEE,0xEF, +/*F_*/0xF0,0xF1,0xF2,0xF3,0xF4,0xF5,0xF6,0xF7,0xF8,0xF9,0xFA,0xFB,0xFC,0xFD,0xFE,0xFF +/* _0 _1 _2 _3 _4 _5 _6 _7 _8 _9 _A _B _C _D _E _F*/ +}; +# endif + +# ifndef DOINIT + EXT U8 PL_fold_locale[256]; +# else + EXT U8 PL_fold_locale[256] = { /* _0 _1 _2 _3 _4 _5 _6 _7 _8 _9 _A _B _C _D _E _F*/ /*0_*/0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09,0x0A,0x0B,0x0C,0x0D,0x0E,0x0F, /*1_*/0x10,0x11,0x12,0x13,0x14,0x15,0x16,0x17,0x18,0x19,0x1A,0x1B,0x1C,0x1D,0x1E,0x1F, @@ -262,9 +287,9 @@ SOFTWARE. * (A => a; a => A, etc) in the 0-255 range. If no such equivalent, value is * the code point itself */ # ifndef DOINIT - EXTCONST U8 PL_fold_latin1[]; + EXTCONST U8 PL_fold_latin1[256]; # else - EXTCONST U8 PL_fold_latin1[] = { + EXTCONST U8 PL_fold_latin1[256] = { /* _0 _1 _2 _3 _4 _5 _6 _7 _8 _9 _A _B _C _D _E _F*/ /*0_*/0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09,0x0A,0x0B,0x0C,0x0D,0x0E,0x0F, /*1_*/0x10,0x11,0x12,0x13,0x14,0x15,0x16,0x17,0x18,0x19,0x1A,0x1B,0x1C,0x1D,0x1E,0x1F, @@ -293,9 +318,9 @@ SOFTWARE. */ # ifndef DOINIT - EXTCONST U8 PL_extended_utf8_dfa_tab[]; + EXTCONST U8 PL_extended_utf8_dfa_tab[416]; # else - EXTCONST U8 PL_extended_utf8_dfa_tab[] = { + EXTCONST U8 PL_extended_utf8_dfa_tab[416] = { /* _0 _1 _2 _3 _4 _5 _6 _7 _8 _9 _A _B _C _D _E _F*/ /*0_ */ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, /*1_ */ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -334,9 +359,9 @@ SOFTWARE. */ # ifndef DOINIT - EXTCONST U16 PL_strict_utf8_dfa_tab[]; + EXTCONST U16 PL_strict_utf8_dfa_tab[624]; # else - EXTCONST U16 PL_strict_utf8_dfa_tab[] = { + EXTCONST U16 PL_strict_utf8_dfa_tab[624] = { /* _0 _1 _2 _3 _4 _5 _6 _7 _8 _9 _A _B _C _D _E _F*/ /*0_ */ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, /*1_ */ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -381,9 +406,9 @@ SOFTWARE. */ # ifndef DOINIT - EXTCONST U8 PL_c9_utf8_dfa_tab[]; + EXTCONST U8 PL_c9_utf8_dfa_tab[368]; # else - EXTCONST U8 PL_c9_utf8_dfa_tab[] = { + EXTCONST U8 PL_c9_utf8_dfa_tab[368] = { /* _0 _1 _2 _3 _4 _5 _6 _7 _8 _9 _A _B _C _D _E _F*/ /*0_ */ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, /*1_ */ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -422,9 +447,9 @@ SOFTWARE. /* Index is ASCII platform code point; value is EBCDIC 037 equivalent */ # ifndef DOINIT - EXTCONST U8 PL_a2e[]; + EXTCONST U8 PL_a2e[256]; # else - EXTCONST U8 PL_a2e[] = { + EXTCONST U8 PL_a2e[256] = { /* _0 _1 _2 _3 _4 _5 _6 _7 _8 _9 _A _B _C _D _E _F*/ /*0_*/0x00,0x01,0x02,0x03,0x37,0x2D,0x2E,0x2F,0x16,0x05,0x25,0x0B,0x0C,0x0D,0x0E,0x0F, /*1_*/0x10,0x11,0x12,0x13,0x3C,0x3D,0x32,0x26,0x18,0x19,0x3F,0x27,0x1C,0x1D,0x1E,0x1F, @@ -448,9 +473,9 @@ SOFTWARE. /* Index is EBCDIC 037 code point; value is ASCII platform equivalent */ # ifndef DOINIT - EXTCONST U8 PL_e2a[]; + EXTCONST U8 PL_e2a[256]; # else - EXTCONST U8 PL_e2a[] = { + EXTCONST U8 PL_e2a[256] = { /* _0 _1 _2 _3 _4 _5 _6 _7 _8 _9 _A _B _C _D _E _F*/ /*0_*/0x00,0x01,0x02,0x03,0x9C,0x09,0x86,0x7F,0x97,0x8D,0x8E,0x0B,0x0C,0x0D,0x0E,0x0F, /*1_*/0x10,0x11,0x12,0x13,0x9D,0x85,0x08,0x87,0x18,0x19,0x92,0x8F,0x1C,0x1D,0x1E,0x1F, @@ -475,9 +500,9 @@ SOFTWARE. /* (Confusingly named) Index is EBCDIC 037 I8 byte; value is * EBCDIC 037 UTF-EBCDIC equivalent */ # ifndef DOINIT - EXTCONST U8 PL_utf2e[]; + EXTCONST U8 PL_utf2e[256]; # else - EXTCONST U8 PL_utf2e[] = { + EXTCONST U8 PL_utf2e[256] = { /* _0 _1 _2 _3 _4 _5 _6 _7 _8 _9 _A _B _C _D _E _F*/ /*0_*/0x00,0x01,0x02,0x03,0x37,0x2D,0x2E,0x2F,0x16,0x05,0x25,0x0B,0x0C,0x0D,0x0E,0x0F, /*1_*/0x10,0x11,0x12,0x13,0x3C,0x3D,0x32,0x26,0x18,0x19,0x3F,0x27,0x1C,0x1D,0x1E,0x1F, @@ -502,9 +527,9 @@ SOFTWARE. /* (Confusingly named) Index is EBCDIC 037 UTF-EBCDIC byte; value is * EBCDIC 037 I8 equivalent */ # ifndef DOINIT - EXTCONST U8 PL_e2utf[]; + EXTCONST U8 PL_e2utf[256]; # else - EXTCONST U8 PL_e2utf[] = { + EXTCONST U8 PL_e2utf[256] = { /* _0 _1 _2 _3 _4 _5 _6 _7 _8 _9 _A _B _C _D _E _F*/ /*0_*/0x00,0x01,0x02,0x03,0x9C,0x09,0x86,0x7F,0x97,0x8D,0x8E,0x0B,0x0C,0x0D,0x0E,0x0F, /*1_*/0x10,0x11,0x12,0x13,0x9D,0x85,0x08,0x87,0x18,0x19,0x92,0x8F,0x1C,0x1D,0x1E,0x1F, @@ -531,9 +556,9 @@ SOFTWARE. * flags table in tr16. The entries marked 9 in tr16 are continuation bytes * and are marked as length 1 here so that we can recover. */ # ifndef DOINIT - EXTCONST U8 PL_utf8skip[]; + EXTCONST U8 PL_utf8skip[256]; # else - EXTCONST U8 PL_utf8skip[] = { + EXTCONST U8 PL_utf8skip[256] = { /* _0 _1 _2 _3 _4 _5 _6 _7 _8 _9 _A _B _C _D _E _F*/ /*0_*/ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, /*1_*/ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, @@ -557,9 +582,9 @@ SOFTWARE. /* Index is EBCDIC 037 code point; value is its lowercase equivalent */ # ifndef DOINIT - EXTCONST U8 PL_latin1_lc[]; + EXTCONST U8 PL_latin1_lc[256]; # else - EXTCONST U8 PL_latin1_lc[] = { + EXTCONST U8 PL_latin1_lc[256] = { /* _0 _1 _2 _3 _4 _5 _6 _7 _8 _9 _A _B _C _D _E _F*/ /*0_*/0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09,0x0A,0x0B,0x0C,0x0D,0x0E,0x0F, /*1_*/0x10,0x11,0x12,0x13,0x14,0x15,0x16,0x17,0x18,0x19,0x1A,0x1B,0x1C,0x1D,0x1E,0x1F, @@ -585,9 +610,9 @@ SOFTWARE. * The 'mod' in the name means that codepoints whose uppercase is above 255 or * longer than 1 character map to LATIN SMALL LETTER Y WITH DIARESIS */ # ifndef DOINIT - EXTCONST U8 PL_mod_latin1_uc[]; + EXTCONST U8 PL_mod_latin1_uc[256]; # else - EXTCONST U8 PL_mod_latin1_uc[] = { + EXTCONST U8 PL_mod_latin1_uc[256] = { /* _0 _1 _2 _3 _4 _5 _6 _7 _8 _9 _A _B _C _D _E _F*/ /*0_*/0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09,0x0A,0x0B,0x0C,0x0D,0x0E,0x0F, /*1_*/0x10,0x11,0x12,0x13,0x14,0x15,0x16,0x17,0x18,0x19,0x1A,0x1B,0x1C,0x1D,0x1E,0x1F, @@ -612,9 +637,34 @@ SOFTWARE. /* Index is EBCDIC 037 code point; For A-Z, value is a-z; for a-z, value * is A-Z; all other code points map to themselves */ # ifndef DOINIT - EXTCONST U8 PL_fold[]; + EXTCONST U8 PL_fold[256]; +# else + EXTCONST U8 PL_fold[256] = { +/* _0 _1 _2 _3 _4 _5 _6 _7 _8 _9 _A _B _C _D _E _F*/ +/*0_*/0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09,0x0A,0x0B,0x0C,0x0D,0x0E,0x0F, +/*1_*/0x10,0x11,0x12,0x13,0x14,0x15,0x16,0x17,0x18,0x19,0x1A,0x1B,0x1C,0x1D,0x1E,0x1F, +/*2_*/0x20,0x21,0x22,0x23,0x24,0x25,0x26,0x27,0x28,0x29,0x2A,0x2B,0x2C,0x2D,0x2E,0x2F, +/*3_*/0x30,0x31,0x32,0x33,0x34,0x35,0x36,0x37,0x38,0x39,0x3A,0x3B,0x3C,0x3D,0x3E,0x3F, +/*4_*/0x40,0x41,0x42,0x43,0x44,0x45,0x46,0x47,0x48,0x49,0x4A,0x4B,0x4C,0x4D,0x4E,0x4F, +/*5_*/0x50,0x51,0x52,0x53,0x54,0x55,0x56,0x57,0x58,0x59,0x5A,0x5B,0x5C,0x5D,0x5E,0x5F, +/*6_*/0x60,0x61,0x62,0x63,0x64,0x65,0x66,0x67,0x68,0x69,0x6A,0x6B,0x6C,0x6D,0x6E,0x6F, +/*7_*/0x70,0x71,0x72,0x73,0x74,0x75,0x76,0x77,0x78,0x79,0x7A,0x7B,0x7C,0x7D,0x7E,0x7F, +/*8_*/0x80,0xC1,0xC2,0xC3,0xC4,0xC5,0xC6,0xC7,0xC8,0xC9,0x8A,0x8B,0x8C,0x8D,0x8E,0x8F, +/*9_*/0x90,0xD1,0xD2,0xD3,0xD4,0xD5,0xD6,0xD7,0xD8,0xD9,0x9A,0x9B,0x9C,0x9D,0x9E,0x9F, +/*A_*/0xA0,0xA1,0xE2,0xE3,0xE4,0xE5,0xE6,0xE7,0xE8,0xE9,0xAA,0xAB,0xAC,0xAD,0xAE,0xAF, +/*B_*/0xB0,0xB1,0xB2,0xB3,0xB4,0xB5,0xB6,0xB7,0xB8,0xB9,0xBA,0xBB,0xBC,0xBD,0xBE,0xBF, +/*C_*/0xC0,0x81,0x82,0x83,0x84,0x85,0x86,0x87,0x88,0x89,0xCA,0xCB,0xCC,0xCD,0xCE,0xCF, +/*D_*/0xD0,0x91,0x92,0x93,0x94,0x95,0x96,0x97,0x98,0x99,0xDA,0xDB,0xDC,0xDD,0xDE,0xDF, +/*E_*/0xE0,0xE1,0xA2,0xA3,0xA4,0xA5,0xA6,0xA7,0xA8,0xA9,0xEA,0xEB,0xEC,0xED,0xEE,0xEF, +/*F_*/0xF0,0xF1,0xF2,0xF3,0xF4,0xF5,0xF6,0xF7,0xF8,0xF9,0xFA,0xFB,0xFC,0xFD,0xFE,0xFF +/* _0 _1 _2 _3 _4 _5 _6 _7 _8 _9 _A _B _C _D _E _F*/ +}; +# endif + +# ifndef DOINIT + EXT U8 PL_fold_locale[256]; # else - EXTCONST U8 PL_fold[] = { + EXT U8 PL_fold_locale[256] = { /* _0 _1 _2 _3 _4 _5 _6 _7 _8 _9 _A _B _C _D _E _F*/ /*0_*/0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09,0x0A,0x0B,0x0C,0x0D,0x0E,0x0F, /*1_*/0x10,0x11,0x12,0x13,0x14,0x15,0x16,0x17,0x18,0x19,0x1A,0x1B,0x1C,0x1D,0x1E,0x1F, @@ -640,9 +690,9 @@ SOFTWARE. * (A => a; a => A, etc) in the 0-255 range. If no such equivalent, value is * the code point itself */ # ifndef DOINIT - EXTCONST U8 PL_fold_latin1[]; + EXTCONST U8 PL_fold_latin1[256]; # else - EXTCONST U8 PL_fold_latin1[] = { + EXTCONST U8 PL_fold_latin1[256] = { /* _0 _1 _2 _3 _4 _5 _6 _7 _8 _9 _A _B _C _D _E _F*/ /*0_*/0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09,0x0A,0x0B,0x0C,0x0D,0x0E,0x0F, /*1_*/0x10,0x11,0x12,0x13,0x14,0x15,0x16,0x17,0x18,0x19,0x1A,0x1B,0x1C,0x1D,0x1E,0x1F, @@ -671,9 +721,9 @@ SOFTWARE. */ # ifndef DOINIT - EXTCONST U8 PL_extended_utf8_dfa_tab[]; + EXTCONST U8 PL_extended_utf8_dfa_tab[416]; # else - EXTCONST U8 PL_extended_utf8_dfa_tab[] = { + EXTCONST U8 PL_extended_utf8_dfa_tab[416] = { /* _0 _1 _2 _3 _4 _5 _6 _7 _8 _9 _A _B _C _D _E _F*/ /*0_ */ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, /*1_ */ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -712,9 +762,9 @@ SOFTWARE. */ # ifndef DOINIT - EXTCONST U16 PL_strict_utf8_dfa_tab[]; + EXTCONST U16 PL_strict_utf8_dfa_tab[624]; # else - EXTCONST U16 PL_strict_utf8_dfa_tab[] = { + EXTCONST U16 PL_strict_utf8_dfa_tab[624] = { /* _0 _1 _2 _3 _4 _5 _6 _7 _8 _9 _A _B _C _D _E _F*/ /*0_ */ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, /*1_ */ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -759,9 +809,9 @@ SOFTWARE. */ # ifndef DOINIT - EXTCONST U8 PL_c9_utf8_dfa_tab[]; + EXTCONST U8 PL_c9_utf8_dfa_tab[368]; # else - EXTCONST U8 PL_c9_utf8_dfa_tab[] = { + EXTCONST U8 PL_c9_utf8_dfa_tab[368] = { /* _0 _1 _2 _3 _4 _5 _6 _7 _8 _9 _A _B _C _D _E _F*/ /*0_ */ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, /*1_ */ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, diff --git a/gnu/usr.bin/perl/embed.fnc b/gnu/usr.bin/perl/embed.fnc index 589ab1a59cb..7da9faa0d66 100644 --- a/gnu/usr.bin/perl/embed.fnc +++ b/gnu/usr.bin/perl/embed.fnc @@ -14,7 +14,7 @@ : real (full) name, with any appropriate thread context paramaters, thus hiding : that detail from the typical code. : -: Most macros listed here are the complete full name. +: Most macros (as opposed to function) listed here are the complete full name. : : All non-static functions defined by perl need to be listed in this file. : embed.pl uses the entries here to construct: @@ -22,9 +22,16 @@ : 2) embed.h to create short name macros : : Static functions internal to a file need not appear here, but there is -: benefit to declaring them here, as it generally handles the thread context -: parameter invisibly, as well as making sure a PERL_ARGS_ASSERT_foo macro is -: defined, which can save you debugging time. +: benefit to declaring them here: +: 1) It generally handles the thread context parameter invisibly making it +: trivial to add or remove needing thread context passed; +: 2) It defines a PERL_ARGS_ASSERT_foo macro, which can save you debugging +: time; +: 3) It is is automatically known to Devel::PPPort, making it quicker to +: later find out when it came into existence. For example +: perl ppport.h --api-info=/edit_distance/ +: yields +: Supported at least since perl-5.23.8, with or without ppport.h. : : Lines in this file are of the form: : flags|return_type|name|arg1|arg2|...|argN @@ -32,6 +39,7 @@ : 'flags' is a string of single letters. Most of the flags are meaningful only : to embed.pl; some only to autodoc.pl, and others only to makedef.pl. The : comments here mostly don't include how Devel::PPPort or diag.t use them: +: All the possible flags and their meanings are given below. : : A function taking no parameters will have no 'arg' elements. : A line may be continued onto the next by ending it with a backslash. @@ -89,7 +97,7 @@ : should be changed. : : The E flag is used instead for a function and its short name that is supposed -: to be used only in the core, and in extensions compiled with the +: to be used only in the core plus extensions compiled with the : PERL_EXT symbol defined. Again, on some platforms, the function : will be visible everywhere, so one of the 'p' or 'S' flags is : generally needed. Also note that an XS writer can always cheat @@ -106,49 +114,120 @@ : function in its full 'Perl_' form with any necessary thread : context parameter. : +: Just below is a description of the relevant parts of the automatic +: documentation generation system which heavily involves this file. Below that +: is a description of all the flags used in this file. +: : Scattered around the perl source are lines of the form: : : =for apidoc name +: =for apidoc_item name +: +: followed by pod for that function. The purpose of these lines and the text +: that immediately follows them is to furnish documentation for functions +: and macros listed here in embed.fnc. The lines tend to be placed near the +: source for the item they describe. autodoc.pl is run as part of the standard +: build process to extract this documentation and build perlapi.pod from the +: elements that are in the API (flagged as A in this file), and perlintern.pod +: from the other elements. +: +: 'name' in the apidoc line corresponds to an item listed in this file, so that +: the signature and flags need only be specified once, here, and automatically +: they get placed into the generated pod. +: +: 'apidoc_item' is used for subsidiary entries, which share the same pod as the +: plain apidoc one does. Thus the documentation for functions which do +: essentially the same thing, but with minor differences can all be placed in +: the same entry. This avoids needless repetition, making the pod shorter, and +: makes it easier to compare and contrast the different forms, and less jumping +: around the pod file for the person reading it. The apidoc_item lines must +: all come after the apidoc line and before the pod for the entry. +: +: The entries in this file that have corresponding '=for apidoc' entries must +: have the 'd' flag set in this file. +: +: In C files, the apidoc lines are inside comment blocks. They may also be +: placed in pod files. In those, the =for causes lines from there until the +: next line beginning with an '=' to not be considered part of that pod. +: +: The 'h' flag is used to hide (suppress) the pod associated with =apidoc lines +: from being placed in the generated perlapi or perlintern. There are several +: reasons you might want to do this, given in the 'h' flag description below, +: but one is for the case where the =apidoc occurs in a file that contains +: regular pod. Without that flag, the associated pod will be placed in both +: it, and perlapi or perlintern. That may be what you want, but it gives you +: the flexibility to choose that, or instead have just a link to the source pod +: inserted in perlapi or perlintern. This allows single-source browsing for +: someone; they don't have to scan multiple pods trying to find something +: suitable. +: +: There are also lines of this form scattered around the perl +: source: +: +: =for apidoc_section Section Name +: =head1 Section Name +: +: These aren't tied to this embed.fnc file, and so are documented in autodoc.pl. +: +: What goes into the documentation of a particular function ends with the next +: line that begins with an '='. In particular, an '=cut' line ends that +: documentation without introducing something new. +: +: Various macros and other elements aren't listed here in embed.fnc. They are +: documented in the same manner, but since they don't have this file to get +: information from, the defining lines have the syntax and meaning they do in +: this file, so it can be specified: : -: followed by pod for that function. The purpose of these is to tell -: autodoc.pl where the documentation is for a function listed in this file. It -: uses the prototype from here and the pod from there in generating the -: documentation in perlapi or perlintern. The entries in this file that have -: corresponding '=for apidoc' entries should have the 'd' flag set in this -: file. +: =for apidoc flags|return_type|name|arg1|arg2|...|argN +: =for apidoc_item flags|return_type|name|arg1|arg2|...|argN : -: There are also lines of this form scattered around: +: The 'name' in any such line must not be the same as any in this file (i.e., +: no redundant definitions), and one of the flags on the apidoc lines must be +: 'm' or 'y', indicating it is not a function. : -: =for apidoc flags|return_type|name|arg1|arg2|...|argN +: All but the name field of an apidoc_item line are optional, and if empty, +: inherits from the controlling plain apidoc line. The flags field is +: generally empty, and in fact, the only flags it can have are ones directly +: related to its display. For example it might have the T flag to indicate no +: thread context parameter is used, whereas the apidoc entry does have a thread +: context. Here is an example: +: +: =for apidoc Am|char* |SvPV |SV* sv|STRLEN len +: =for apidoc_item |const char*|SvPV_const |SV* sv|STRLEN len +: =for apidoc_item |char* |SvPV_nolen |SV* sv +: +: Since these are macros, the arguments need not be legal C parameters. To +: indicate this to downstream software that inspects these lines, there are a +: few conventions. An example would be: : -: and with the same meanings as the lines in this file. These are for -: documenting macros. The 'name' in any such line must not be the same as any -: in this file (i.e., no redundant definitions), and one of the flags must be -: 'm', indicating it is a macro. The lines following these are pod for the -: respective macro. Since these are macros, the arguments need not be legal C -: parameters. To indicate this to downstream software that inspects these -: lines, there are a few conventions: -: type should be the entire argument name if it names a type -: cast should be the entire argument name if it is a cast -: SP should be the entire argument name if it is the stack pointer SP -: block should be the entire argument name if it is a C brace-enclosed block -: -: The letters above are exact. For example, you have to have 't', 'y', 'p', -: and 'e' literally. Here is an example: : =for apidoc Am|void|Newxc|void* ptr|int nitems|type|cast : -: Additionally, an argument can be some word(s) enclosed in double quotes to -: indicate that it has to be a string, instead of a const char * const, like this -: =for apidoc Ama|SV*|newSVpvs|"string" +: In this example, a real call of Newxc, 'type' would be specified as something +: like 'int' or 'char', and 'cast' by perhaps 'struct foo'. : -: If any argument or return value is not one of the above, and isn't a legal C -: language one, the 'u' flag should be specified. +: The complete list of conventions is: +: type the argument names a type +: cast the argument names a type which the macro casts to +: SP the argument is the stack pointer, SP +: block the argument is a C brace-enclosed block +: number the argument is a C numeric constant, like 3 +: token the argument is a generic C preprocessor token, like abc +: "string" the argument is a literal C double-quoted string; what's important +: here are the quotes; for clarity, you can say whatever you want +: inside them : -: Again, autodoc uses these lines to construct perlapi. 'return_type' in these -: lines can be empty, unlike in this file. +: Unlike other arguments, none of these is of the form 'int name'. There is no +: name. +: +: If any argument or return value is not one of the above, and isn't legal C +: language, the entry still can be specified, using the 'u' flag. +: +: 'return_type' in these lines can be empty, unlike in this file: +: +: =for apidoc Amnu||START_EXTERN_C : : Devel::PPPort also looks at both this file and the '=for apidoc' lines. In -: part it is to construct lists of functions that are or are not backported. +: part it is to construct lists of elements that are or are not backported. : : makedef.pl uses this file for constructing the export list which lists the : symbols that should be available on all platforms. @@ -239,7 +318,7 @@ : into "#if defined(PERL_CORE) || defined(PERL_EXT)" : : To be usable from dynamically loaded extensions, either: -: 1) it must be static to its containing file ("i" or "s" flag); or +: 1) it must be static to its containing file ("i" or "S" flag); or : 2) be combined with the "X" flag. : : e Not exported @@ -276,33 +355,45 @@ : proto.h: PERL_ARGS_ASSERT macro is not defined unless the function : has NN arguments : -: h Hide any documentation. This is used when the documentation is atypical -: of the rest of perlapi and perlintern. In other words the item is -: documented, but just not the standard way. One reason would be if there -: are a bunch of macros which follow a common paradigm in their naming, so -: rather than having an entry for each slight variation, there is an -: overarchinge one. It is also used when the documentation is in another -: pod, such as perlguts or warnings.h. This flag is useful for downstream -: programs, such as Devel::PPPort. -: -: I This flag works exactly the same as 'i' but it also adds -: __attribute__((always_inline)) or __forceinline if either of them is -: supported by the compiler. -: -: proto.h: function is declared as PERL_STATIC_FORCE_INLINE and -: __attribute__always_inline__ is added +: h Hide any documentation that would normally go into perlapi or +: perlintern. This is typically used when the documentation is actually +: in another pod. If you don't use the 'h', that documentation is +: displayed in both places; with the flag, it stays in the pod, and a +: link to that pod is instead placed in perlapi or perlintern. This +: allows one to browse perlapi or perlintern and see all the potentially +: relevant elements. A good example is perlapio. It has documentation +: about PerlIO functions with other text giving context. There's no point +: in writing a second entry for perlapi, but it would be good if someone +: browsing perlapi knew about the function and where it is documented. By +: adding '=for apidoc' lines in perlapio, the appropriate text could be +: simply copied into perlapi if deemed appropriate, or just a link added +: there when the 'h' flag is specified. +: This flag is useful for symbolic names for flags. A single =for apidoc +: line can be added to the pod where the meaning is discussed, and perlapi +: will list the name, with a link to the pod. Another use would be if +: there are a bunch of macros which follow a common paradigm in their +: naming, so rather than having an entry for each slight variation, there +: is an overarching one. This flag is useful for downstream programs, +: such as Devel::PPPort. : : i inline static. This is used for functions that the compiler is being : requested to inline. If the function is in a header file its : definition will be visible (unless guarded by #if..#endif) to all : XS code. (A typical guard will be that it is being included in a : particular C file(s) or in the perl core.) Therefore, all -: non-guarded function should also have the 'p' flag specified to avoid +: non-guarded functions should also have the 'p' flag specified to avoid : polluting the XS code name space. Otherwise an error is generated if : the 'S' flag is not also specified. : : proto.h: function is declared as PERL_STATIC_INLINE : +: I This flag works exactly the same as 'i' but it also adds +: __attribute__((always_inline)) or __forceinline if either of them is +: supported by the compiler. +: +: proto.h: function is declared as PERL_STATIC_FORCE_INLINE and +: __attribute__always_inline__ is added +: : m Implemented as a macro; there is no function associated with this name, : and hence no long Perl_ or S_ name. However, if the macro name itself : begins with 'Perl_', autodoc.pl will show a thread context parameter @@ -333,11 +424,17 @@ : characters, and a warning is raised otherwise. This flag suppresses : that warning, so that weird things can be documented : -: n Has no arguments (used only in =for apidoc entries) +: n Has no arguments. Perhaps a better name would have been '0'. (used only +: in =for apidoc entries) : : The macro (it can't be a function) is used without any parameters nor : empty parentheses. : +: Perhaps a better name for this flag would have been '0'. The reason the +: flag was not changed to that from 'n', is if D:P were to be regenerated +: on an older perl, it still would use the new embed.fnc shipped with it, +: but would be using the flags from the older perl source code. +: : O Has a perl_ compatibility macro. : : The really OLD name for API funcs. @@ -355,7 +452,10 @@ : embed.h: suppress "#define foo Perl_foo" : : autodoc.pl adds a note that this function must be explicitly called as -: Perl_$name with an aTHX_ parameter. +: Perl_$name, and with an aTHX_ parameter unless the 'T' flag is also +: specified. + +: mnemonic: 'omit' generated macro : : P Pure function: : @@ -385,7 +485,8 @@ : : gcc has a bug (which they claim is a feature) in which casting the : result of one of these to (void) doesn't silence the warning that the -: result is ignored. +: result is ignored. (Perl has a workaround for this bug, see +: PERL_UNUSED_RESULT docs) : : proto.h: add __attribute__warn_unused_result__ : @@ -416,9 +517,11 @@ : : For example, the expansion of STR_WITH_LEN is a comma separated pair of : values, so would have this flag; or some macros take preprocessor -: tokens, so would have this flag. This flag is an indication to -: downstream tools, such as Devel::PPPort, that this requires special -: handling. +: tokens, so would have this flag. +: +: This also is used for entries that require processing for use, such as +: being compiled by xsubpp. This flag is an indication to downstream +: tools, such as Devel::PPPort, that this requires special handling. : : U autodoc.pl will not output a usage example : @@ -440,8 +543,11 @@ : : x Experimental, may change: : -: any doc entry is marked that it may change. Also used to suppress -: making a perlapi doc entry if it would just be a placeholder. +: Any doc entry is marked that it may change. An undocumented +: experimental function is listed in perlintern rather than perlapi, +: even if it is allegedly API. +: +: y Typedef. The element names a type rather than being a macro : : In this file, pointer parameters that must not be passed NULLs should be : prefixed with NN. @@ -456,7 +562,7 @@ CipRTX |char * |mortal_getenv |NN const char * str #if defined(PERL_IMPLICIT_SYS) -ATo |PerlInterpreter*|perl_alloc_using \ +CTo |PerlInterpreter*|perl_alloc_using \ |NN struct IPerlMem *ipM \ |NN struct IPerlMem *ipMS \ |NN struct IPerlMem *ipMP \ @@ -474,11 +580,11 @@ ATod |void |perl_free |NN PerlInterpreter *my_perl ATod |int |perl_run |NN PerlInterpreter *my_perl ATod |int |perl_parse |NN PerlInterpreter *my_perl|XSINIT_t xsinit \ |int argc|NULLOK char** argv|NULLOK char** env -ATpR |bool |doing_taint |int argc|NULLOK char** argv|NULLOK char** env +CTpR |bool |doing_taint |int argc|NULLOK char** argv|NULLOK char** env #if defined(USE_ITHREADS) ATod |PerlInterpreter*|perl_clone|NN PerlInterpreter *proto_perl|UV flags # if defined(PERL_IMPLICIT_SYS) -ATo |PerlInterpreter*|perl_clone_using \ +CTo |PerlInterpreter*|perl_clone_using \ |NN PerlInterpreter *proto_perl \ |UV flags \ |NN struct IPerlMem* ipM \ @@ -493,10 +599,10 @@ ATo |PerlInterpreter*|perl_clone_using \ # endif #endif -AaTophd |Malloc_t|malloc |MEM_SIZE nbytes -AaTophd |Malloc_t|calloc |MEM_SIZE elements|MEM_SIZE size -ARTophd |Malloc_t|realloc |Malloc_t where|MEM_SIZE nbytes -ATop |Free_t |mfree |Malloc_t where +CaTopd |Malloc_t|malloc |MEM_SIZE nbytes +CaTopd |Malloc_t|calloc |MEM_SIZE elements|MEM_SIZE size +CRTopd |Malloc_t|realloc |Malloc_t where|MEM_SIZE nbytes +CTopd |Free_t |mfree |Malloc_t where #if defined(MYMALLOC) TpR |MEM_SIZE|malloced_size |NN void *p TpR |MEM_SIZE|malloc_good_size |size_t nbytes @@ -505,16 +611,16 @@ TpR |MEM_SIZE|malloc_good_size |size_t nbytes ST |int |adjust_size_and_find_bucket |NN size_t *nbytes_p #endif -ATpR |void* |get_context -ATp |void |set_context |NN void *t +CTpdR |void* |get_context +CTpd |void |set_context |NN void *t XEop |bool |try_amagic_bin |int method|int flags XEop |bool |try_amagic_un |int method|int flags -Ap |SV* |amagic_call |NN SV* left|NN SV* right|int method|int dir -Ap |SV * |amagic_deref_call|NN SV *ref|int method +Apd |SV* |amagic_call |NN SV* left|NN SV* right|int method|int dir +Apd |SV * |amagic_deref_call|NN SV *ref|int method p |bool |amagic_is_enabled|int method -Ap |int |Gv_AMupdate |NN HV* stash|bool destructing -ApR |CV* |gv_handler |NULLOK HV* stash|I32 id +Apd |int |Gv_AMupdate |NN HV* stash|bool destructing +CpdR |CV* |gv_handler |NULLOK HV* stash|I32 id Apd |OP* |op_append_elem |I32 optype|NULLOK OP* first|NULLOK OP* last Apd |OP* |op_append_list |I32 optype|NULLOK OP* first|NULLOK OP* last Apd |OP* |op_linklist |NN OP *o @@ -530,24 +636,28 @@ p |void |av_extend_guts |NULLOK AV *av|SSize_t key \ |NN SSize_t *maxp \ |NN SV ***allocp|NN SV ***arrayp ApdR |SV** |av_fetch |NN AV *av|SSize_t key|I32 lval +CipdR |SV** |av_fetch_simple|NN AV *av|SSize_t key|I32 lval Apd |void |av_fill |NN AV *av|SSize_t fill ApdR |SSize_t|av_len |NN AV *av ApdR |AV* |av_make |SSize_t size|NN SV **strp +CpdR |AV* |av_new_alloc |SSize_t size|bool zeroflag p |SV* |av_nonelem |NN AV *av|SSize_t ix Apd |SV* |av_pop |NN AV *av -Apdoex |void |av_create_and_push|NN AV **const avp|NN SV *const val +Apdoe |void |av_create_and_push|NN AV **const avp|NN SV *const val Apd |void |av_push |NN AV *av|NN SV *val : Used in scope.c, and by Data::Alias EXp |void |av_reify |NN AV *av ApdR |SV* |av_shift |NN AV *av Apd |SV** |av_store |NN AV *av|SSize_t key|NULLOK SV *val -AidRp |SSize_t|av_top_index |NN AV *av +Cipd |SV** |av_store_simple|NN AV *av|SSize_t key|NULLOK SV *val +AmdR |SSize_t|av_top_index |NN AV *av +AidRp |Size_t |av_count |NN AV *av AmdR |SSize_t|av_tindex |NN AV *av Apd |void |av_undef |NN AV *av -Apdoex |SV** |av_create_and_unshift_one|NN AV **const avp|NN SV *const val +Apdoe |SV** |av_create_and_unshift_one|NN AV **const avp|NN SV *const val Apd |void |av_unshift |NN AV *av|SSize_t num -Apo |SV** |av_arylen_p |NN AV *av -Apo |IV* |av_iter_p |NN AV *av +Cpo |SV** |av_arylen_p |NN AV *av +Cpo |IV* |av_iter_p |NN AV *av #if defined(PERL_IN_AV_C) S |MAGIC* |get_aux_mg |NN AV *av #endif @@ -555,25 +665,26 @@ S |MAGIC* |get_aux_mg |NN AV *av pR |OP* |bind_match |I32 type|NN OP *left|NN OP *right : Used in perly.y ApdR |OP* |block_end |I32 floor|NULLOK OP* seq -ApR |U8 |block_gimme +CpR |U8 |block_gimme : Used in perly.y ApdR |int |block_start |int full Aodxp |void |blockhook_register |NN BHK *hk +p |void |boot_core_builtin : Used in perl.c p |void |boot_core_UNIVERSAL : Used in perl.c p |void |boot_core_PerlIO -Ap |void |call_list |I32 oldscope|NN AV *paramList +Cp |void |call_list |I32 oldscope|NN AV *paramList Apd |const PERL_CONTEXT * |caller_cx|I32 level \ |NULLOK const PERL_CONTEXT **dbcxp : Used in several source files pR |bool |cando |Mode_t mode|bool effective|NN const Stat_t* statbufp -ApRT |U32 |cast_ulong |NV f -ApRT |I32 |cast_i32 |NV f -ApRT |IV |cast_iv |NV f -ApRT |UV |cast_uv |NV f +CpRT |U32 |cast_ulong |NV f +CpRT |I32 |cast_i32 |NV f +CpRT |IV |cast_iv |NV f +CpRT |UV |cast_uv |NV f #if !defined(HAS_TRUNCATE) && !defined(HAS_CHSIZE) && defined(F_FREESP) -ApR |I32 |my_chsize |int fd|Off_t length +ApdR |I32 |my_chsize |int fd|Off_t length #endif p |const COP*|closest_cop |NN const COP *cop|NULLOK const OP *o \ |NULLOK const OP *curop|bool opnext @@ -595,20 +706,20 @@ fTpre |void |noperl_die|NN const char* pat|... #if defined(WIN32) Tore |void |win32_croak_not_implemented|NN const char * fname #endif -#if defined(PERL_IMPLICIT_CONTEXT) -AfTrp |void |croak_nocontext|NULLOK const char* pat|... -AfTrp |OP* |die_nocontext |NULLOK const char* pat|... -AfTp |void |deb_nocontext |NN const char* pat|... -AfTp |char* |form_nocontext |NN const char* pat|... -AFTp |void |load_module_nocontext|U32 flags|NN SV* name|NULLOK SV* ver|... -AfTp |SV* |mess_nocontext |NN const char* pat|... -AfTp |void |warn_nocontext |NN const char* pat|... -AfTp |void |warner_nocontext|U32 err|NN const char* pat|... -AfTp |SV* |newSVpvf_nocontext|NN const char *const pat|... -AfTp |void |sv_catpvf_nocontext|NN SV *const sv|NN const char *const pat|... -AfTp |void |sv_setpvf_nocontext|NN SV *const sv|NN const char *const pat|... -AfTp |void |sv_catpvf_mg_nocontext|NN SV *const sv|NN const char *const pat|... -AfTp |void |sv_setpvf_mg_nocontext|NN SV *const sv|NN const char *const pat|... +#if defined(MULTIPLICITY) +AdfTrp |void |croak_nocontext|NULLOK const char* pat|... +AdfTrp |OP* |die_nocontext |NULLOK const char* pat|... +AfTpd |void |deb_nocontext |NN const char* pat|... +AdfTp |char* |form_nocontext |NN const char* pat|... +AdFTp |void |load_module_nocontext|U32 flags|NN SV* name|NULLOK SV* ver|... +AdfTp |SV* |mess_nocontext |NN const char* pat|... +AdfTp |void |warn_nocontext |NN const char* pat|... +AdfTp |void |warner_nocontext|U32 err|NN const char* pat|... +AdfTp |SV* |newSVpvf_nocontext|NN const char *const pat|... +AdfTp |void |sv_catpvf_nocontext|NN SV *const sv|NN const char *const pat|... +AdfTp |void |sv_setpvf_nocontext|NN SV *const sv|NN const char *const pat|... +AdfTp |void |sv_catpvf_mg_nocontext|NN SV *const sv|NN const char *const pat|... +AdfTp |void |sv_setpvf_mg_nocontext|NN SV *const sv|NN const char *const pat|... AbfTpD |int |fprintf_nocontext|NN PerlIO *stream|NN const char *format|... AbfTpD |int |printf_nocontext|NN const char *format|... #endif @@ -630,43 +741,44 @@ Apd |SV * |cv_name |NN CV *cv|NULLOK SV *sv|U32 flags Apd |void |cv_undef |NN CV* cv p |void |cv_undef_flags |NN CV* cv|U32 flags pd |void |cv_forget_slab |NULLOK CV *cv -Ap |void |cx_dump |NN PERL_CONTEXT* cx -AiMp |GV * |CvGV |NN CV *sv -AiMTp |I32 * |CvDEPTH |NN const CV * const sv +Cp |void |cx_dump |NN PERL_CONTEXT* cx +AiMpd |GV * |CvGV |NN CV *sv +AdiMTp |I32 * |CvDEPTH |NN const CV * const sv Aphd |SV* |filter_add |NULLOK filter_t funcp|NULLOK SV* datasv -Ap |void |filter_del |NN filter_t funcp +Apd |void |filter_del |NN filter_t funcp ApRhd |I32 |filter_read |int idx|NN SV *buf_sv|int maxlen -ApPR |char** |get_op_descs -ApPR |char** |get_op_names +ApPRx |char** |get_op_descs +ApPRx |char** |get_op_names : FIXME discussion on p5p pPR |const char* |get_no_modify : FIXME discussion on p5p -pPR |U32* |get_opargs -ApPR |PPADDR_t*|get_ppaddr +pPRx |U32* |get_opargs +CpPRx |PPADDR_t*|get_ppaddr : Used by CXINC, which appears to be in widespread use -ApR |I32 |cxinc -Afp |void |deb |NN const char* pat|... -Ap |void |vdeb |NN const char* pat|NULLOK va_list* args -Ap |void |debprofdump +CpR |I32 |cxinc +Afpd |void |deb |NN const char* pat|... +Apd |void |vdeb |NN const char* pat|NULLOK va_list* args +Cpd |void |debprofdump EXp |SV* |multideref_stringify |NN const OP* o|NULLOK CV *cv EXp |SV* |multiconcat_stringify |NN const OP* o -Ap |I32 |debop |NN const OP* o -Ap |I32 |debstack -Ap |I32 |debstackptrs +Cpd |I32 |debop |NN const OP* o +Apd |I32 |debstack +Cp |I32 |debstackptrs pR |SV * |defelem_target |NN SV *sv|NULLOK MAGIC *mg -ATp |char* |delimcpy |NN char* to|NN const char* toend|NN const char* from \ - |NN const char* fromend|int delim|NN I32* retlen -Tp |char* |delimcpy_no_escape|NN char* to|NN const char* toend \ - |NN const char* from \ - |NN const char* fromend|int delim \ - |NN I32* retlen +ATpd |char* |delimcpy|NN char* to|NN const char* to_end \ + |NN const char* from|NN const char* from_end \ + |const int delim|NN I32* retlen +EXTpd |char* |delimcpy_no_escape|NN char* to|NN const char* to_end \ + |NN const char* from \ + |NN const char* from_end \ + |const int delim|NN I32* retlen : Used in op.c, perl.c px |void |delete_eval_scope Aprd |OP* |die_sv |NN SV *baseex Afrpd |OP* |die |NULLOK const char* pat|... : Used in util.c pr |void |die_unwind |NN SV* msv -Ap |void |dounwind |I32 cxix +Cpdh |void |dounwind |I32 cxix : FIXME pMb |bool|do_aexec |NULLOK SV* really|NN SV** mark|NN SV** sp : Used in pp_sys.c @@ -683,10 +795,10 @@ pM |bool|do_exec |NN const char* cmd p |bool|do_exec |NN const char* cmd #endif -#if defined(WIN32) || defined(__SYMBIAN32__) || defined(VMS) -Ap |int |do_aspawn |NULLOK SV* really|NN SV** mark|NN SV** sp -Ap |int |do_spawn |NN char* cmd -Ap |int |do_spawn_nowait|NN char* cmd +#if defined(WIN32) || defined(VMS) +Cp |int |do_aspawn |NULLOK SV* really|NN SV** mark|NN SV** sp +Cp |int |do_spawn |NN char* cmd +Cp |int |do_spawn_nowait|NN char* cmd #endif #if !defined(WIN32) p |bool|do_exec3 |NN const char *incmd|int fd|int do_report @@ -709,7 +821,7 @@ p |I32 |do_semop |NN SV** mark|NN SV** sp : Defined in doio.c, used only in pp_sys.c p |I32 |do_shmio |I32 optype|NN SV** mark|NN SV** sp #endif -Ap |void |do_join |NN SV *sv|NN SV *delim|NN SV **mark|NN SV **sp +Apd |void |do_join |NN SV *sv|NN SV *delim|NN SV **mark|NN SV **sp : Used in pp.c and pp_hot.c, prototype generated by regen/opcode.pl : p |OP* |do_kv : used in pp.c, pp_hot.c @@ -771,7 +883,7 @@ p |bool |do_print |NULLOK SV* sv|NN PerlIO* fp pR |OP* |do_readline : Defined in doio.c, used only in pp_sys.c p |bool |do_seek |NULLOK GV* gv|Off_t pos|int whence -Ap |void |do_sprintf |NN SV* sv|SSize_t len|NN SV** sarg +Apd |void |do_sprintf |NN SV* sv|SSize_t len|NN SV** sarg : Defined in doio.c, used only in pp_sys.c p |Off_t |do_sysseek |NN GV* gv|Off_t pos|int whence : Defined in doio.c, used only in pp_sys.c @@ -786,18 +898,18 @@ p |void |do_vecset |NN SV* sv p |void |do_vop |I32 optype|NN SV* sv|NN SV* left|NN SV* right : Used in perly.y p |OP* |dofile |NN OP* term|I32 force_builtin -ApR |U8 |dowantarray +CdpR |U8 |dowantarray Adp |void |dump_all p |void |dump_all_perl |bool justperl -Ap |void |dump_eval -Ap |void |dump_form |NN const GV* gv -Ap |void |gv_dump |NULLOK GV* gv +Apdh |void |dump_eval +Apd |void |dump_form |NN const GV* gv +Apd |void |gv_dump |NULLOK GV* gv Apd |OPclass|op_class |NULLOK const OP *o Apd |void |op_dump |NN const OP *o -Ap |void |pmop_dump |NULLOK PMOP* pm +Apd |void |pmop_dump |NULLOK PMOP* pm Apd |void |dump_packsubs |NN const HV* stash p |void |dump_packsubs_perl |NN const HV* stash|bool justperl -Ap |void |dump_sub |NN const GV* gv +Apdh |void |dump_sub |NN const GV* gv p |void |dump_sub_perl |NN const GV* gv|bool justperl Apd |void |fbm_compile |NN SV* sv|U32 flags ApdR |char* |fbm_instr |NN unsigned char* big|NN unsigned char* bigend \ @@ -821,8 +933,8 @@ S |OP* |fold_constants |NN OP * const o Sd |OP* |traverse_op_tree|NN OP* top|NN OP* o #endif Afpd |char* |form |NN const char* pat|... -Ap |char* |vform |NN const char* pat|NULLOK va_list* args -Ap |void |free_tmps +Adp |char* |vform |NN const char* pat|NULLOK va_list* args +Cp |void |free_tmps #if defined(PERL_IN_OP_C) S |void |gen_constant_list|NULLOK OP* o #endif @@ -832,25 +944,25 @@ p |char* |getenv_len |NN const char *env_elem|NN unsigned long *len #endif : Used in pp_ctl.c and pp_hot.c poe |void |get_db_sub |NULLOK SV **svp|NN CV *cv -Ap |void |gp_free |NULLOK GV* gv -Ap |GP* |gp_ref |NULLOK GP* gp -Ap |GV* |gv_add_by_type |NULLOK GV *gv|svtype type -ApMb |GV* |gv_AVadd |NULLOK GV *gv -ApMb |GV* |gv_HVadd |NULLOK GV *gv -ApMb |GV* |gv_IOadd |NULLOK GV* gv -AmR |GV* |gv_autoload4 |NULLOK HV* stash|NN const char* name \ +Cp |void |gp_free |NULLOK GV* gv +Cp |GP* |gp_ref |NULLOK GP* gp +Apd |GV* |gv_add_by_type |NULLOK GV *gv|svtype type +ApdMb |GV* |gv_AVadd |NULLOK GV *gv +ApdMb |GV* |gv_HVadd |NULLOK GV *gv +ApdMb |GV* |gv_IOadd |NULLOK GV* gv +AdmR |GV* |gv_autoload4 |NULLOK HV* stash|NN const char* name \ |STRLEN len|I32 method ApR |GV* |gv_autoload_sv |NULLOK HV* stash|NN SV* namesv|U32 flags ApR |GV* |gv_autoload_pv |NULLOK HV* stash|NN const char* namepv \ |U32 flags ApR |GV* |gv_autoload_pvn |NULLOK HV* stash|NN const char* name \ |STRLEN len|U32 flags -Ap |void |gv_check |NN HV* stash +Cp |void |gv_check |NN HV* stash AbpD |void |gv_efullname |NN SV* sv|NN const GV* gv -ApMb |void |gv_efullname3 |NN SV* sv|NN const GV* gv|NULLOK const char* prefix -Ap |void |gv_efullname4 |NN SV* sv|NN const GV* gv|NULLOK const char* prefix|bool keepmain -Ap |GV* |gv_fetchfile |NN const char* name -Ap |GV* |gv_fetchfile_flags|NN const char *const name|const STRLEN len\ +ApdMb |void |gv_efullname3 |NN SV* sv|NN const GV* gv|NULLOK const char* prefix +Apd |void |gv_efullname4 |NN SV* sv|NN const GV* gv|NULLOK const char* prefix|bool keepmain +Adp |GV* |gv_fetchfile |NN const char* name +Adp |GV* |gv_fetchfile_flags|NN const char *const name|const STRLEN len\ |const U32 flags Amd |GV* |gv_fetchmeth |NULLOK HV* stash|NN const char* name \ |STRLEN len|I32 level @@ -875,10 +987,10 @@ Apx |GV* |gv_fetchmethod_pv_flags|NN HV* stash|NN const char* name \ |U32 flags Apx |GV* |gv_fetchmethod_pvn_flags|NN HV* stash|NN const char* name \ |const STRLEN len|U32 flags -Ap |GV* |gv_fetchpv |NN const char *nambeg|I32 add|const svtype sv_type +Adp |GV* |gv_fetchpv |NN const char *nambeg|I32 flags|const svtype sv_type AbpD |void |gv_fullname |NN SV* sv|NN const GV* gv -ApMb |void |gv_fullname3 |NN SV* sv|NN const GV* gv|NULLOK const char* prefix -Ap |void |gv_fullname4 |NN SV* sv|NN const GV* gv|NULLOK const char* prefix|bool keepmain +ApdMb |void |gv_fullname3 |NN SV* sv|NN const GV* gv|NULLOK const char* prefix +Apd |void |gv_fullname4 |NN SV* sv|NN const GV* gv|NULLOK const char* prefix|bool keepmain : Used in scope.c pxoe |GP * |newGP |NN GV *const gv pX |void |cvgv_set |NN CV* cv|NULLOK GV* gv @@ -895,11 +1007,11 @@ Ap |void |gv_name_set |NN GV* gv|NN const char *name|U32 len|U32 flags pe |GV * |gv_override |NN const char * const name \ |const STRLEN len Xxpd |void |gv_try_downgrade|NN GV* gv -p |void |gv_setref |NN SV *const dstr|NN SV *const sstr +p |void |gv_setref |NN SV *const dsv|NN SV *const ssv Apd |HV* |gv_stashpv |NN const char* name|I32 flags Apd |HV* |gv_stashpvn |NN const char* name|U32 namelen|I32 flags #if defined(PERL_IN_GV_C) || defined(PERL_IN_UNIVERSAL_C) -EpG |HV* |gv_stashsvpvn_cached |NULLOK SV *namesv|NULLOK const char* name|U32 namelen|I32 flags +EpGd |HV* |gv_stashsvpvn_cached|SV *namesv|const char* name|U32 namelen|I32 flags #endif #if defined(PERL_IN_GV_C) i |HV* |gv_stashpvn_internal |NN const char* name|U32 namelen|I32 flags @@ -907,10 +1019,11 @@ i |GV* |gv_fetchmeth_internal |NULLOK HV* stash|NULLOK SV* meth|NULLOK const cha |STRLEN len|I32 level|U32 flags #endif Apd |HV* |gv_stashsv |NN SV* sv|I32 flags +po |struct xpvhv_aux*|hv_auxalloc|NN HV *hv Apd |void |hv_clear |NULLOK HV *hv : used in SAVEHINTS() and op.c ApdR |HV * |hv_copy_hints_hv|NULLOK HV *const ohv -Ap |void |hv_delayfree_ent|NN HV *hv|NULLOK HE *entry +Cp |void |hv_delayfree_ent|NULLOK HV *notused|NULLOK HE *entry AbMdp |SV* |hv_delete |NULLOK HV *hv|NN const char *key|I32 klen \ |I32 flags AbMdp |SV* |hv_delete_ent |NULLOK HV *hv|NN SV *keysv|I32 flags|U32 hash @@ -919,14 +1032,14 @@ AbMdRp |bool |hv_exists_ent |NULLOK HV *hv|NN SV *keysv|U32 hash AbMdp |SV** |hv_fetch |NULLOK HV *hv|NN const char *key|I32 klen \ |I32 lval AbMdp |HE* |hv_fetch_ent |NULLOK HV *hv|NN SV *keysv|I32 lval|U32 hash -Ap |void* |hv_common |NULLOK HV *hv|NULLOK SV *keysv \ +Cp |void* |hv_common |NULLOK HV *hv|NULLOK SV *keysv \ |NULLOK const char* key|STRLEN klen|int flags \ |int action|NULLOK SV *val|U32 hash -Ap |void* |hv_common_key_len|NULLOK HV *hv|NN const char *key \ +Cp |void* |hv_common_key_len|NULLOK HV *hv|NN const char *key \ |I32 klen_i32|const int action|NULLOK SV *val \ |const U32 hash -Apod |STRLEN |hv_fill |NN HV *const hv -Ap |void |hv_free_ent |NN HV *hv|NULLOK HE *entry +Cpod |STRLEN |hv_fill |NN HV *const hv +Ap |void |hv_free_ent |NULLOK HV *notused|NULLOK HE *entry Apd |I32 |hv_iterinit |NN HV *hv ApdR |char* |hv_iterkey |NN HE* entry|NN I32* retlen ApdR |SV* |hv_iterkeysv |NN HE* entry @@ -972,7 +1085,7 @@ AdmP |I32 |ibcmp |NN const char* a|NN const char* b|I32 len AdiTp |I32 |foldEQ |NN const char* a|NN const char* b|I32 len AdmP |I32 |ibcmp_locale |NN const char* a|NN const char* b|I32 len AiTpd |I32 |foldEQ_locale |NN const char* a|NN const char* b|I32 len -Am |I32 |ibcmp_utf8 |NN const char *s1|NULLOK char **pe1|UV l1 \ +Adm |I32 |ibcmp_utf8 |NN const char *s1|NULLOK char **pe1|UV l1 \ |bool u1|NN const char *s2|NULLOK char **pe2 \ |UV l2|bool u2 Amd |I32 |foldEQ_utf8 |NN const char *s1|NULLOK char **pe1|UV l1 \ @@ -981,7 +1094,7 @@ Amd |I32 |foldEQ_utf8 |NN const char *s1|NULLOK char **pe1|UV l1 \ Cp |I32 |foldEQ_utf8_flags |NN const char *s1|NULLOK char **pe1|UV l1 \ |bool u1|NN const char *s2|NULLOK char **pe2 \ |UV l2|bool u2|U32 flags -AiTp |I32 |foldEQ_latin1 |NN const char* a|NN const char* b|I32 len +CiTp |I32 |foldEQ_latin1 |NN const char* a|NN const char* b|I32 len #if defined(PERL_IN_DOIO_C) SR |bool |ingroup |Gid_t testgid|bool effective #endif @@ -991,8 +1104,8 @@ p |void |init_argv_symbols|int argc|NN char **argv po |void |init_dbargs : Used in mg.c p |void |init_debugger -Ap |void |init_stacks -Ap |void |init_tm |NN struct tm *ptm +Cp |void |init_stacks +Cp |void |init_tm |NN struct tm *ptm : Used in perly.y AbMTpPRd|char* |instr |NN const char* big|NN const char* little : Used in sv.c @@ -1004,21 +1117,19 @@ pR |OP* |cmpchain_start |I32 type|NULLOK OP* left \ |NULLOK OP* right pR |OP* |cmpchain_extend|I32 type|NN OP* ch|NULLOK OP* right pR |OP* |cmpchain_finish|NN OP* ch -ApR |I32 |is_lvalue_sub +ApdR |I32 |is_lvalue_sub : Used in cop.h XopR |I32 |was_lvalue_sub -CpRTP |STRLEN |is_utf8_char_helper|NN const U8 * const s|NN const U8 * e|const U32 flags +CpRTP |STRLEN |is_utf8_char_helper_|NN const U8 * const s|NN const U8 * e|const U32 flags +CpRTP |Size_t |is_utf8_FF_helper_|NN const U8 * const s0 \ + |NN const U8 * const e \ + |const bool require_partial Cp |UV |to_uni_upper |UV c|NN U8 *p|NN STRLEN *lenp Cp |UV |to_uni_title |UV c|NN U8 *p|NN STRLEN *lenp p |void |init_uniprops #ifdef PERL_IN_UTF8_C STR |U8 |to_lower_latin1|const U8 c|NULLOK U8 *p|NULLOK STRLEN *lenp \ |const char dummy -# ifndef UV_IS_QUAD -STR |int |is_utf8_cp_above_31_bits|NN const U8 * const s \ - |NN const U8 * const e \ - |const bool consider_overlongs -# endif #endif #if defined(PERL_IN_UTF8_C) || defined(PERL_IN_PP_C) p |UV |_to_upper_title_latin1|const U8 c|NN U8 *p|NN STRLEN *lenp|const char S_or_s @@ -1033,6 +1144,14 @@ ATdmoR |bool |is_utf8_invariant_string|NN const U8* const s \ ATidRp |bool |is_utf8_invariant_string_loc|NN const U8* const s \ |STRLEN len \ |NULLOK const U8 ** ep +CTiRp |unsigned|single_1bit_pos32|U32 word +CTiRp |unsigned|lsbit_pos32|U32 word +CTiRp |unsigned|msbit_pos32|U32 word +#ifdef U64TYPE /* HAS_QUAD undefined outside of core */ +CTiRp |unsigned|single_1bit_pos64|U64 word +CTiRp |unsigned|lsbit_pos64|U64 word +CTiRp |unsigned|msbit_pos64|U64 word +#endif #ifndef EBCDIC CTiRp |unsigned int|variant_byte_number|PERL_UINTMAX_T word #endif @@ -1050,6 +1169,9 @@ AbTpdD |STRLEN |is_utf8_char |NN const U8 *s AbMTpd |STRLEN |is_utf8_char_buf|NN const U8 *buf|NN const U8 *buf_end ATidRp |Size_t |isUTF8_CHAR|NN const U8 * const s0 \ |NN const U8 * const e +ATidRp |Size_t |isUTF8_CHAR_flags|NN const U8 * const s0 \ + |NN const U8 * const e \ + |const U32 flags ATidRp |Size_t |isSTRICT_UTF8_CHAR |NN const U8 * const s0 \ |NN const U8 * const e ATidRp |Size_t |isC9_STRICT_UTF8_CHAR |NN const U8 * const s0 \ @@ -1089,9 +1211,9 @@ ATidp |bool |is_utf8_fixed_width_buf_loclen_flags \ |NN const U8 * const s|STRLEN len \ |NULLOK const U8 **ep|NULLOK STRLEN *el|const U32 flags AmTdP |bool |is_utf8_valid_partial_char \ - |NN const U8 * const s|NN const U8 * const e + |NN const U8 * const s0|NN const U8 * const e ATidRp |bool |is_utf8_valid_partial_char_flags \ - |NN const U8 * const s|NN const U8 * const e|const U32 flags + |NN const U8 * const s0|NN const U8 * const e|const U32 flags CpR |bool |_is_uni_FOO|const U8 classnum|const UV c CpR |bool |_is_utf8_FOO|const U8 classnum|NN const U8 *p \ |NN const U8 * const e @@ -1109,7 +1231,7 @@ pP |I32 |keyword |NN const char *name|I32 len|bool all_keywords #if defined(PERL_IN_OP_C) S |void |inplace_aassign |NN OP* o #endif -Ap |void |leave_scope |I32 base +Cpd |void |leave_scope |I32 base p |void |notify_parser_that_changed_to_utf8 : Public lexer API Axpd |void |lex_start |NULLOK SV* line|NULLOK PerlIO *rsfp|U32 flags @@ -1140,8 +1262,8 @@ Axpd |OP* |parse_subsignature|U32 flags Apd |void |op_null |NN OP* o : FIXME. Used by Data::Alias EXp |void |op_clear |NN OP* o -Ap |void |op_refcnt_lock -Ap |void |op_refcnt_unlock +Cpd |void |op_refcnt_lock +Cpd |void |op_refcnt_unlock ApdT |OP* |op_sibling_splice|NULLOK OP *parent|NULLOK OP *start \ |int del_count|NULLOK OP* insert ApdT |OP* |op_parent|NN OP *o @@ -1150,7 +1272,7 @@ S |OP* |listkids |NULLOK OP* o #endif p |OP* |list |NULLOK OP* o AFpd |void |load_module|U32 flags|NN SV* name|NULLOK SV* ver|... -Ap |void |vload_module|U32 flags|NN SV* name|NULLOK SV* ver|NULLOK va_list* args +Adp |void |vload_module|U32 flags|NN SV* name|NULLOK SV* ver|NULLOK va_list* args : Used in perly.y p |OP* |localize |NN OP *o|I32 lex ApdR |I32 |looks_like_number|NN SV *const sv @@ -1171,7 +1293,7 @@ Cp |UV |grok_bin_oct_hex|NN const char* start \ #ifdef PERL_IN_NUMERIC_C S |void |output_non_portable|const U8 shift #endif -EXpdT |bool |grok_atoUV |NN const char* pv|NN UV* valptr|NULLOK const char** endptr +ApdT |bool |grok_atoUV |NN const char* pv|NN UV* valptr|NULLOK const char** endptr : These are all indirectly referenced by globals.c. This is somewhat annoying. p |int |magic_clearenv |NN SV* sv|NN MAGIC* mg p |int |magic_clear_all_env|NN SV* sv|NN MAGIC* mg @@ -1220,25 +1342,29 @@ dp |int |magic_sethint |NN SV* sv|NN MAGIC* mg p |int |magic_setisa |NN SV* sv|NN MAGIC* mg p |int |magic_setlvref |NN SV* sv|NN MAGIC* mg p |int |magic_setmglob |NN SV* sv|NN MAGIC* mg +p |int |magic_freemglob|NN SV* sv|NN MAGIC* mg p |int |magic_setnkeys |NN SV* sv|NN MAGIC* mg p |int |magic_setpack |NN SV* sv|NN MAGIC* mg p |int |magic_setpos |NN SV* sv|NN MAGIC* mg p |int |magic_setregexp|NN SV* sv|NN MAGIC* mg +p |int |magic_setsigall|NN SV* sv|NN MAGIC* mg p |int |magic_setsig |NULLOK SV* sv|NN MAGIC* mg p |int |magic_setsubstr|NN SV* sv|NN MAGIC* mg p |int |magic_settaint |NN SV* sv|NN MAGIC* mg p |int |magic_setuvar |NN SV* sv|NN MAGIC* mg p |int |magic_setvec |NN SV* sv|NN MAGIC* mg p |int |magic_setutf8 |NN SV* sv|NN MAGIC* mg +p |int |magic_freeutf8 |NN SV* sv|NN MAGIC* mg p |int |magic_set_all_env|NN SV* sv|NN MAGIC* mg p |U32 |magic_sizepack |NN SV* sv|NN MAGIC* mg p |int |magic_wipepack |NN SV* sv|NN MAGIC* mg Fpod |SV* |magic_methcall |NN SV *sv|NN const MAGIC *mg \ |NN SV *meth|U32 flags \ |U32 argc|... -Ap |I32 * |markstack_grow +Cp |I32 * |markstack_grow #if defined(USE_LOCALE_COLLATE) p |int |magic_setcollxfrm|NN SV* sv|NN MAGIC* mg +p |int |magic_freecollxfrm|NN SV* sv|NN MAGIC* mg pbD |char* |mem_collxfrm |NN const char* input_string|STRLEN len|NN STRLEN* xlen : Defined in locale.c, used only in sv.c # if defined(PERL_IN_LOCALE_C) || defined(PERL_IN_SV_C) || defined(PERL_IN_MATHOMS_C) @@ -1273,8 +1399,8 @@ Apd |int |mg_get |NN SV* sv ApdD |U32 |mg_length |NN SV* sv ApdT |void |mg_magical |NN SV* sv Apd |int |mg_set |NN SV* sv -Ap |I32 |mg_size |NN SV* sv -ApT |void |mini_mktime |NN struct tm *ptm +Cp |I32 |mg_size |NN SV* sv +AdpT |void |mini_mktime |NN struct tm *ptm Axmd |OP* |op_lvalue |NULLOK OP* o|I32 type poX |OP* |op_lvalue_flags|NULLOK OP* o|I32 type|U32 flags pd |void |finalize_optree |NN OP* o @@ -1287,29 +1413,29 @@ S |void |move_proto_attr|NN OP **proto|NN OP **attrs \ #endif : Used in op.c and pp_sys.c p |int |mode_from_discipline|NULLOK const char* s|STRLEN len -Ap |const char* |moreswitches |NN const char* s -Ap |NV |my_atof |NN const char *s +Cp |const char* |moreswitches |NN const char* s +Apd |NV |my_atof |NN const char *s ATdpR |NV |my_strtod |NN const char * const s|NULLOK char ** e Aprd |void |my_exit |U32 status Apr |void |my_failure_exit -Ap |I32 |my_fflush_all -ATp |Pid_t |my_fork -ATp |void |atfork_lock -ATp |void |atfork_unlock -ApMb |I32 |my_lstat +Cpd |I32 |my_fflush_all +CTpd |Pid_t |my_fork +CTp |void |atfork_lock +CTp |void |atfork_unlock +m |I32 |my_lstat pX |I32 |my_lstat_flags |NULLOK const U32 flags #if ! defined(HAS_MEMRCHR) && (defined(PERL_CORE) || defined(PERL_EXT)) EeiT |void * |my_memrchr |NN const char * s|const char c|const STRLEN len #endif #if !defined(PERL_IMPLICIT_SYS) -Ap |I32 |my_pclose |NULLOK PerlIO* ptr -Ap |PerlIO*|my_popen |NN const char* cmd|NN const char* mode +Adp |I32 |my_pclose |NULLOK PerlIO* ptr +Adp |PerlIO*|my_popen |NN const char* cmd|NN const char* mode #endif -Ap |PerlIO*|my_popen_list |NN const char* mode|int n|NN SV ** args +Cpd |PerlIO*|my_popen_list |NN const char* mode|int n|NN SV ** args Apd |void |my_setenv |NULLOK const char* nam|NULLOK const char* val -ApMb |I32 |my_stat +m |I32 |my_stat pX |I32 |my_stat_flags |NULLOK const U32 flags -Afp |char * |my_strftime |NN const char *fmt|int sec|int min|int hour|int mday|int mon|int year|int wday|int yday|int isdst +Adfp |char * |my_strftime |NN const char *fmt|int sec|int min|int hour|int mday|int mon|int year|int wday|int yday|int isdst : Used in pp_ctl.c p |void |my_unexec CbDTPR |UV |NATIVE_TO_NEED |const UV enc|const UV ch @@ -1323,7 +1449,7 @@ Apd |CV* |newCONSTSUB |NULLOK HV* stash|NULLOK const char* name|NULLOK SV* sv Apd |CV* |newCONSTSUB_flags|NULLOK HV* stash \ |NULLOK const char* name|STRLEN len \ |U32 flags|NULLOK SV* sv -Ap |void |newFORM |I32 floor|NULLOK OP* o|NULLOK OP* block +Cp |void |newFORM |I32 floor|NULLOK OP* o|NULLOK OP* block ApdR |OP* |newFOROP |I32 flags|NULLOK OP* sv|NN OP* expr|NULLOK OP* block|NULLOK OP* cont ApdR |OP* |newGIVENOP |NN OP* cond|NN OP* block|PADOFFSET defsv_off ApdR |OP* |newLOGOP |I32 optype|I32 flags|NN OP *first|NN OP *other @@ -1332,12 +1458,14 @@ ApdR |OP* |newLOOPEX |I32 type|NN OP* label ApdR |OP* |newLOOPOP |I32 flags|I32 debuggable|NULLOK OP* expr|NULLOK OP* block ApdR |OP* |newNULLLIST ApdR |OP* |newOP |I32 optype|I32 flags -Ap |void |newPROG |NN OP* o +Cp |void |newPROG |NN OP* o ApdR |OP* |newRANGE |I32 flags|NN OP* left|NN OP* right ApdR |OP* |newSLICEOP |I32 flags|NULLOK OP* subscript|NULLOK OP* listop ApdR |OP* |newSTATEOP |I32 flags|NULLOK char* label|NULLOK OP* o -ApbM |CV* |newSUB |I32 floor|NULLOK OP* o|NULLOK OP* proto \ +AdpbM |CV* |newSUB |I32 floor|NULLOK OP* o|NULLOK OP* proto \ |NULLOK OP* block +ApdRx |OP* |newTRYCATCHOP |I32 flags|NN OP* tryblock|NN OP *catchvar|NN OP* catchblock +ApdRx |OP* |newDEFEROP |I32 flags|NN OP *block pd |CV * |newXS_len_flags|NULLOK const char *name|STRLEN len \ |NN XSUBADDR_t subaddr\ |NULLOK const char *const filename \ @@ -1350,17 +1478,19 @@ Apx |CV * |newXS_flags |NULLOK const char *name|NN XSUBADDR_t subaddr\ ApdU |CV* |newXS |NULLOK const char *name|NN XSUBADDR_t subaddr\ |NN const char *filename ApMdbR |AV* |newAV +AmdR |AV* |newAV_alloc_x |SSize_t size +AmdR |AV* |newAV_alloc_xz |SSize_t size ApR |OP* |newAVREF |NN OP* o ApdR |OP* |newBINOP |I32 type|I32 flags|NULLOK OP* first|NULLOK OP* last ApR |OP* |newCVREF |I32 flags|NULLOK OP* o ApdR |OP* |newGVOP |I32 type|I32 flags|NN GV* gv -Am |GV* |newGVgen |NN const char* pack -ApR |GV* |newGVgen_flags |NN const char* pack|U32 flags +Amd |GV* |newGVgen |NN const char* pack +ApdR |GV* |newGVgen_flags |NN const char* pack|U32 flags ApR |OP* |newGVREF |I32 type|NULLOK OP* o ApR |OP* |newHVREF |NN OP* o ApMdbR |HV* |newHV -ApR |HV* |newHVhv |NULLOK HV *hv -ApRbM |IO* |newIO +ApRd |HV* |newHVhv |NULLOK HV *hv +ApRbMd |IO* |newIO ApdR |OP* |newLISTOP |I32 type|I32 flags|NULLOK OP* first|NULLOK OP* last AxpdRT |PADNAME *|newPADNAMEouter|NN PADNAME *outer AxpdRT |PADNAME *|newPADNAMEpvn|NN const char *s|STRLEN len @@ -1370,7 +1500,7 @@ ApdR |OP* |newPADOP |I32 type|I32 flags|NN SV* sv #endif ApdR |OP* |newPMOP |I32 type|I32 flags ApdR |OP* |newPVOP |I32 type|I32 flags|NULLOK char* pv -ApR |SV* |newRV |NN SV *const sv +ApdR |SV* |newRV |NN SV *const sv ApdR |SV* |newRV_noinc |NN SV *const tmpRef ApdR |SV* |newSV |const STRLEN len ApR |OP* |newSVREF |NN OP* o @@ -1387,12 +1517,13 @@ ApdR |SV* |newSVhek |NULLOK const HEK *const hek ApdR |SV* |newSVpvn_share |NULLOK const char* s|I32 len|U32 hash ApdR |SV* |newSVpv_share |NULLOK const char* s|U32 hash AfpdR |SV* |newSVpvf |NN const char *const pat|... -ApR |SV* |vnewSVpvf |NN const char *const pat|NULLOK va_list *const args +ApRd |SV* |vnewSVpvf |NN const char *const pat|NULLOK va_list *const args Apd |SV* |newSVrv |NN SV *const rv|NULLOK const char *const classname ApMbdR |SV* |newSVsv |NULLOK SV *const old AmdR |SV* |newSVsv_nomg |NULLOK SV *const old -ApR |SV* |newSVsv_flags |NULLOK SV *const old|I32 flags -ApdR |SV* |newSV_type |const svtype type +AdpR |SV* |newSVsv_flags |NULLOK SV *const old|I32 flags +ApdiR |SV* |newSV_type |const svtype type +ApdIR |SV* |newSV_type_mortal|const svtype type ApdR |OP* |newUNOP |I32 type|I32 flags|NULLOK OP* first ApdR |OP* |newUNOP_AUX |I32 type|I32 flags|NULLOK OP* first \ |NULLOK UNOP_AUX_item *aux @@ -1416,8 +1547,8 @@ Apd |void |cv_set_call_checker_flags|NN CV *cv \ |NN SV *ckobj|U32 ckflags Apd |void |wrap_op_checker|Optype opcode|NN Perl_check_t new_checker|NN Perl_check_t *old_checker_p Axpd |void |wrap_keyword_plugin|NN Perl_keyword_plugin_t new_plugin|NN Perl_keyword_plugin_t *old_plugin_p -ApR |PERL_SI*|new_stackinfo|I32 stitems|I32 cxitems -Ap |char* |scan_vstring |NN const char *s|NN const char *const e \ +CpR |PERL_SI*|new_stackinfo|I32 stitems|I32 cxitems +Apd |char* |scan_vstring |NN const char *s|NN const char *const e \ |NN SV *sv Apd |const char* |scan_version |NN const char *s|NN SV *rv|bool qv Apd |const char* |prescan_version |NN const char *s\ @@ -1462,20 +1593,20 @@ p |void |rpeep |NULLOK OP* o : Defined in doio.c, used only in pp_hot.c dopx |PerlIO*|start_glob |NN SV *tmpglob|NN IO *io -Ap |void |reentrant_size -Ap |void |reentrant_init -Ap |void |reentrant_free -AFTp |void* |reentrant_retry|NN const char *f|... +Cp |void |reentrant_size +Cp |void |reentrant_init +Cp |void |reentrant_free +CFTp |void* |reentrant_retry|NN const char *f|... : "Very" special - can't use the O flag for this one: : (The rename from perl_atexit to Perl_call_atexit was in 864dbfa3ca8032ef) -Ap |void |call_atexit |ATEXIT_t fn|NULLOK void *ptr +Apd |void |call_atexit |ATEXIT_t fn|NULLOK void *ptr ApdO |I32 |call_argv |NN const char* sub_name|I32 flags|NN char** argv ApdO |I32 |call_method |NN const char* methname|I32 flags ApdO |I32 |call_pv |NN const char* sub_name|I32 flags ApdO |I32 |call_sv |NN SV* sv|volatile I32 flags -Ap |void |despatch_signals -Ap |OP * |doref |NN OP *o|I32 type|bool set_op_ref +Cp |void |despatch_signals +Cp |OP * |doref |NN OP *o|I32 type|bool set_op_ref ApdO |SV* |eval_pv |NN const char* p|I32 croak_on_error ApdO |I32 |eval_sv |NN SV* sv|I32 flags ApdO |SV* |get_sv |NN const char *name|I32 flags @@ -1495,13 +1626,13 @@ p |char* |my_strerror |const int errnum XpT |void |_warn_problematic_locale Xp |void |set_numeric_underlying Xp |void |set_numeric_standard -Xp |bool |_is_in_locale_category|const bool compiling|const int category +Cp |bool |_is_in_locale_category|const bool compiling|const int category ApdT |void |switch_to_global_locale ApdT |bool |sync_locale ApxT |void |thread_locale_init ApxT |void |thread_locale_term ApdO |void |require_pv |NN const char* pv -AbpdM |void |pack_cat |NN SV *cat|NN const char *pat|NN const char *patend \ +AbpdD |void |pack_cat |NN SV *cat|NN const char *pat|NN const char *patend \ |NN SV **beglist|NN SV **endlist|NN SV ***next_in_list|U32 flags Apd |void |packlist |NN SV *cat|NN const char *pat|NN const char *patend|NN SV **beglist|NN SV **endlist #if defined(PERL_USES_PL_PIDSTATUS) && defined(PERL_IN_UTIL_C) @@ -1514,16 +1645,16 @@ p |OP* |pmruntime |NN OP *o|NN OP *expr|NULLOK OP *repl \ S |OP* |pmtrans |NN OP* o|NN OP* expr|NN OP* repl #endif p |void |invmap_dump |NN SV* invlist|NN UV * map -Ap |void |pop_scope -Ap |void |push_scope +Cpd |void |pop_scope +Cpd |void |push_scope #if defined(PERL_IN_PERLY_C) || defined(PERL_IN_OP_C) || defined(PERL_IN_TOKE_C) -ApMb |OP* |ref |NULLOK OP* o|I32 type +pMb |OP* |ref |NULLOK OP* o|I32 type #endif #if defined(PERL_IN_OP_C) S |OP* |refkids |NULLOK OP* o|I32 type #endif -ATp |void |repeatcpy |NN char* to|NN const char* from|I32 len|IV count +ATpd |void |repeatcpy |NN char* to|NN const char* from|I32 len|IV count AdTpP |char* |rninstr |NN const char* big|NN const char* bigend \ |NN const char* little|NN const char* lend Apd |Sighandler_t|rsignal |int i|Sighandler_t t @@ -1531,7 +1662,7 @@ Apd |Sighandler_t|rsignal |int i|Sighandler_t t p |int |rsignal_restore|int i|NULLOK Sigsave_t* t : Used in pp_sys.c p |int |rsignal_save |int i|Sighandler_t t1|NN Sigsave_t* save -Ap |Sighandler_t|rsignal_state|int i +Apd |Sighandler_t|rsignal_state|int i #if defined(PERL_IN_PP_CTL_C) S |void |rxres_free |NN void** rsp S |void |rxres_restore |NN void **rsp|NN REGEXP *rx @@ -1551,52 +1682,52 @@ Apda |char* |savesharedpvn |NULLOK const char *const pv \ |const STRLEN len Apda |char* |savesharedsvpv |NN SV *sv Apda |char* |savesvpv |NN SV* sv -Ap |void |savestack_grow -Ap |void |savestack_grow_cnt |I32 need +Cp |void |savestack_grow +Cp |void |savestack_grow_cnt |I32 need Am |void |save_aelem |NN AV* av|SSize_t idx|NN SV **sptr Ap |void |save_aelem_flags|NN AV* av|SSize_t idx|NN SV **sptr \ |const U32 flags -Ap |I32 |save_alloc |I32 size|I32 pad +Cpd |I32 |save_alloc |I32 size|I32 pad Apdh |void |save_aptr |NN AV** aptr Apdh |AV* |save_ary |NN GV* gv -Ap |void |save_bool |NN bool* boolp -Ap |void |save_clearsv |NN SV** svp -Ap |void |save_delete |NN HV *hv|NN char *key|I32 klen -Ap |void |save_hdelete |NN HV *hv|NN SV *keysv -Ap |void |save_adelete |NN AV *av|SSize_t key -Ap |void |save_destructor|DESTRUCTORFUNC_NOCONTEXT_t f|NN void* p -Ap |void |save_destructor_x|DESTRUCTORFUNC_t f|NULLOK void* p -ApMb |void |save_freesv |NULLOK SV* sv +Cp |void |save_bool |NN bool* boolp +Cp |void |save_clearsv |NN SV** svp +Cp |void |save_delete |NN HV *hv|NN char *key|I32 klen +Cpd |void |save_hdelete |NN HV *hv|NN SV *keysv +Cpd |void |save_adelete |NN AV *av|SSize_t key +Cp |void |save_destructor|DESTRUCTORFUNC_NOCONTEXT_t f|NN void* p +Cp |void |save_destructor_x|DESTRUCTORFUNC_t f|NULLOK void* p +CpMb |void |save_freesv |NULLOK SV* sv : Used in SAVEFREOP(), used in op.c, pp_ctl.c -ApMb |void |save_freeop |NULLOK OP* o -ApMb |void |save_freepv |NULLOK char* pv -Ap |void |save_generic_svref|NN SV** sptr -Ap |void |save_generic_pvref|NN char** str -Ap |void |save_shared_pvref|NN char** str +CpMb |void |save_freeop |NULLOK OP* o +CpMb |void |save_freepv |NULLOK char* pv +Cpd |void |save_generic_svref|NN SV** sptr +Cpd |void |save_generic_pvref|NN char** str +Cpd |void |save_shared_pvref|NN char** str Adp |void |save_gp |NN GV* gv|I32 empty Apdh |HV* |save_hash |NN GV* gv -Ap |void |save_hints +Cpd |void |save_hints Am |void |save_helem |NN HV *hv|NN SV *key|NN SV **sptr Ap |void |save_helem_flags|NN HV *hv|NN SV *key|NN SV **sptr|const U32 flags Apdh |void |save_hptr |NN HV** hptr -Ap |void |save_I16 |NN I16* intp -Ap |void |save_I32 |NN I32* intp -Ap |void |save_I8 |NN I8* bytep -Ap |void |save_int |NN int* intp +Cp |void |save_I16 |NN I16* intp +Cp |void |save_I32 |NN I32* intp +Cp |void |save_I8 |NN I8* bytep +Cp |void |save_int |NN int* intp Apdh |void |save_item |NN SV* item -Ap |void |save_iv |NN IV *ivp +Cp |void |save_iv |NN IV *ivp AbpDdh |void |save_list |NN SV** sarg|I32 maxsarg -AbpD |void |save_long |NN long* longp -ApMb |void |save_mortalizesv|NN SV* sv +CbpD |void |save_long |NN long* longp +CpMb |void |save_mortalizesv|NN SV* sv AbpD |void |save_nogv |NN GV* gv : Used in SAVEFREOP(), used in gv.c, op.c, perl.c, pp_ctl.c, pp_sort.c -ApMb |void |save_op +CpMbd |void |save_op Apdh |SV* |save_scalar |NN GV* gv -Ap |void |save_pptr |NN char** pptr -Ap |void |save_vptr |NN void *ptr -Ap |void |save_re_context -Ap |void |save_padsv_and_mortalize|PADOFFSET off -Ap |void |save_sptr |NN SV** sptr +Cp |void |save_pptr |NN char** pptr +Cpd |void |save_vptr |NN void *ptr +Cp |void |save_re_context +Cpd |void |save_padsv_and_mortalize|PADOFFSET off +Cp |void |save_sptr |NN SV** sptr Xp |void |save_strlen |NN STRLEN* ptr Apdh |SV* |save_svref |NN SV** sptr Axpo |void |savetmps @@ -1618,67 +1749,68 @@ Apd |OP* |op_contextualize|NN OP* o|I32 context p |OP* |scalar |NULLOK OP* o #if defined(PERL_IN_OP_C) S |OP* |scalarkids |NULLOK OP* o -S |OP* |scalarseq |NULLOK OP* o +S |OP* |voidnonfinal |NULLOK OP* o #endif : Used in pp_ctl.c p |OP* |scalarvoid |NN OP* o Apd |NV |scan_bin |NN const char* start|STRLEN len|NN STRLEN* retlen Apd |NV |scan_hex |NN const char* start|STRLEN len|NN STRLEN* retlen -Ap |char* |scan_num |NN const char* s|NN YYSTYPE *lvalp +Cp |char* |scan_num |NN const char* s|NN YYSTYPE *lvalp Apd |NV |scan_oct |NN const char* start|STRLEN len|NN STRLEN* retlen Axpd |OP* |op_scope |NULLOK OP* o +ApdRx |OP* |op_wrap_finally|NN OP *block|NN OP *finally : Only used by perl.c/miniperl.c, but defined in caretx.c pe |void |set_caret_X Apd |void |setdefout |NN GV* gv -Ap |HEK* |share_hek |NN const char* str|SSize_t len|U32 hash +Cp |HEK* |share_hek |NN const char* str|SSize_t len|U32 hash #ifdef PERL_USE_3ARG_SIGHANDLER : Used in perl.c Tp |Signal_t |sighandler |int sig|NULLOK Siginfo_t *info|NULLOK void *uap -ATp |Signal_t |csighandler |int sig|NULLOK Siginfo_t *info|NULLOK void *uap +CTp |Signal_t |csighandler |int sig|NULLOK Siginfo_t *info|NULLOK void *uap #else Tp |Signal_t |sighandler |int sig -ATp |Signal_t |csighandler |int sig +CTp |Signal_t |csighandler |int sig #endif Tp |Signal_t |sighandler1 |int sig -ATp |Signal_t |csighandler1 |int sig +CTp |Signal_t |csighandler1 |int sig Tp |Signal_t |sighandler3 |int sig|NULLOK Siginfo_t *info|NULLOK void *uap -ATp |Signal_t |csighandler3 |int sig|NULLOK Siginfo_t *info|NULLOK void *uap -ATp |Signal_t |perly_sighandler |int sig|NULLOK Siginfo_t *info|NULLOK void *uap|bool safe -Ap |SV** |stack_grow |NN SV** sp|NN SV** p|SSize_t n +CTp |Signal_t |csighandler3 |int sig|NULLOK Siginfo_t *info|NULLOK void *uap +CTp |Signal_t |perly_sighandler |int sig|NULLOK Siginfo_t *info|NULLOK void *uap|bool safe +Cp |SV** |stack_grow |NN SV** sp|NN SV** p|SSize_t n Ap |I32 |start_subparse |I32 is_format|U32 flags Xp |void |init_named_cv |NN CV *cv|NN OP *nameop : Used in pp_ctl.c p |void |sub_crush_depth|NN CV* cv -ApbMd |bool |sv_2bool |NN SV *const sv -Apd |bool |sv_2bool_flags |NN SV *sv|I32 flags +CpbMd |bool |sv_2bool |NN SV *const sv +Cpd |bool |sv_2bool_flags |NN SV *sv|I32 flags Apd |CV* |sv_2cv |NULLOK SV* sv|NN HV **const st|NN GV **const gvp \ |const I32 lref Apd |IO* |sv_2io |NN SV *const sv #if defined(PERL_IN_SV_C) S |bool |glob_2number |NN GV* const gv #endif -ApMb |IV |sv_2iv |NN SV *sv +CpMb |IV |sv_2iv |NN SV *sv Apd |IV |sv_2iv_flags |NN SV *const sv|const I32 flags Apd |SV* |sv_2mortal |NULLOK SV *const sv Apd |NV |sv_2nv_flags |NN SV *const sv|const I32 flags : Used in pp.c, pp_hot.c, sv.c pxd |SV* |sv_2num |NN SV *const sv -ApMb |char* |sv_2pv |NN SV *sv|NULLOK STRLEN *lp -Apd |char* |sv_2pv_flags |NN SV *const sv|NULLOK STRLEN *const lp|const I32 flags +ApdMb |char* |sv_2pv |NN SV *sv|NULLOK STRLEN *lp +Apd |char* |sv_2pv_flags |NN SV *const sv|NULLOK STRLEN *const lp|const U32 flags ApdMb |char* |sv_2pvutf8 |NN SV *sv|NULLOK STRLEN *const lp -Ap |char* |sv_2pvutf8_flags |NN SV *sv|NULLOK STRLEN *const lp|const U32 flags +Apd |char* |sv_2pvutf8_flags |NN SV *sv|NULLOK STRLEN *const lp|const U32 flags ApdMb |char* |sv_2pvbyte |NN SV *sv|NULLOK STRLEN *const lp -Ap |char* |sv_2pvbyte_flags |NN SV *sv|NULLOK STRLEN *const lp|const U32 flags +Apd |char* |sv_2pvbyte_flags |NN SV *sv|NULLOK STRLEN *const lp|const U32 flags AbpD |char* |sv_pvn_nomg |NN SV* sv|NULLOK STRLEN* lp -ApMb |UV |sv_2uv |NN SV *sv +CpMb |UV |sv_2uv |NN SV *sv Apd |UV |sv_2uv_flags |NN SV *const sv|const I32 flags -AbpdD |IV |sv_iv |NN SV* sv -AbpdD |UV |sv_uv |NN SV* sv -AbpdD |NV |sv_nv |NN SV* sv -AbpdD |char* |sv_pvn |NN SV *sv|NN STRLEN *lp -AbpdD |char* |sv_pvutf8n |NN SV *sv|NN STRLEN *lp -AbpdD |char* |sv_pvbyten |NN SV *sv|NN STRLEN *lp -Apd |I32 |sv_true |NULLOK SV *const sv +CbpdD |IV |sv_iv |NN SV* sv +CbpdD |UV |sv_uv |NN SV* sv +CbpdD |NV |sv_nv |NN SV* sv +CbpdD |char* |sv_pvn |NN SV *sv|NN STRLEN *lp +CbpdD |char* |sv_pvutf8n |NN SV *sv|NN STRLEN *lp +CbpdD |char* |sv_pvbyten |NN SV *sv|NN STRLEN *lp +Cpd |I32 |sv_true |NULLOK SV *const sv #if defined(PERL_IN_SV_C) Sd |void |sv_add_arena |NN char *const ptr|const U32 size \ |const U32 flags @@ -1694,9 +1826,9 @@ S |void |sv_buf_to_rw |NN SV *sv Afpd |void |sv_catpvf |NN SV *const sv|NN const char *const pat|... Apd |void |sv_vcatpvf |NN SV *const sv|NN const char *const pat \ |NULLOK va_list *const args -Apd |void |sv_catpv |NN SV *const sv|NULLOK const char* ptr +Apd |void |sv_catpv |NN SV *const dsv|NULLOK const char* sstr ApMdb |void |sv_catpvn |NN SV *dsv|NN const char *sstr|STRLEN len -ApMdb |void |sv_catsv |NN SV *dstr|NULLOK SV *sstr +ApMdb |void |sv_catsv |NN SV *dsv|NULLOK SV *sstr Apd |void |sv_chop |NN SV *const sv|NULLOK const char *const ptr : Used only in perl.c pd |I32 |sv_clean_all @@ -1738,7 +1870,8 @@ poxX |void |sv_free2 |NN SV *const sv|const U32 refcnt : Used only in perl.c pd |void |sv_free_arenas Apd |char* |sv_gets |NN SV *const sv|NN PerlIO *const fp|I32 append -Apd |char* |sv_grow |NN SV *const sv|STRLEN newlen +Cpd |char* |sv_grow |NN SV *const sv|STRLEN newlen +Cpd |char* |sv_grow_fresh |NN SV *const sv|STRLEN newlen Apd |void |sv_inc |NULLOK SV *const sv Apd |void |sv_inc_nomg |NULLOK SV *const sv ApMdb |void |sv_insert |NN SV *const bigstr|const STRLEN offset \ @@ -1750,7 +1883,7 @@ Apd |int |sv_isa |NULLOK SV* sv|NN const char *const name Apd |int |sv_isobject |NULLOK SV* sv Apd |STRLEN |sv_len |NULLOK SV *const sv Apd |STRLEN |sv_len_utf8 |NULLOK SV *const sv -p |STRLEN |sv_len_utf8_nomg|NN SV *const sv +Apd |STRLEN |sv_len_utf8_nomg|NN SV *const sv Apd |void |sv_magic |NN SV *const sv|NULLOK SV *const obj|const int how \ |NULLOK const char *const name|const I32 namlen Apd |MAGIC *|sv_magicext |NN SV *const sv|NULLOK SV *const obj|const int how \ @@ -1762,17 +1895,19 @@ EXp |MAGIC *|sv_magicext_mglob|NN SV *sv ApdbMR |SV* |sv_mortalcopy |NULLOK SV *const oldsv ApdR |SV* |sv_mortalcopy_flags|NULLOK SV *const oldsv|U32 flags ApdR |SV* |sv_newmortal -Apd |SV* |sv_newref |NULLOK SV *const sv -Ap |char* |sv_peek |NULLOK SV* sv +Cpd |SV* |sv_newref |NULLOK SV *const sv +Amd |bool |sv_numeq |NULLOK SV* sv1|NULLOK SV* sv2 +Apd |bool |sv_numeq_flags |NULLOK SV* sv1|NULLOK SV* sv2|const U32 flags +Cpd |char* |sv_peek |NULLOK SV* sv Apd |void |sv_pos_u2b |NULLOK SV *const sv|NN I32 *const offsetp|NULLOK I32 *const lenp Apd |STRLEN |sv_pos_u2b_flags|NN SV *const sv|STRLEN uoffset \ |NULLOK STRLEN *const lenp|U32 flags Apd |void |sv_pos_b2u |NULLOK SV *const sv|NN I32 *const offsetp Apd |STRLEN |sv_pos_b2u_flags|NN SV *const sv|STRLEN const offset \ |U32 flags -ApMdb |char* |sv_pvn_force |NN SV* sv|NULLOK STRLEN* lp -Apd |char* |sv_pvutf8n_force|NN SV *const sv|NULLOK STRLEN *const lp -Apd |char* |sv_pvbyten_force|NN SV *const sv|NULLOK STRLEN *const lp +CpMdb |char* |sv_pvn_force |NN SV* sv|NULLOK STRLEN* lp +Cpd |char* |sv_pvutf8n_force|NN SV *const sv|NULLOK STRLEN *const lp +Cpd |char* |sv_pvbyten_force|NN SV *const sv|NULLOK STRLEN *const lp Apd |char* |sv_recode_to_utf8 |NN SV* sv|NN SV *encoding Apd |bool |sv_cat_decode |NN SV* dsv|NN SV *encoding|NN SV *ssv|NN int *offset \ |NN char* tstr|int tlen @@ -1798,16 +1933,23 @@ Apd |SV* |sv_setref_pvn |NN SV *const rv|NULLOK const char *const classname \ |NN const char *const pv|const STRLEN n Apd |void |sv_setpv |NN SV *const sv|NULLOK const char *const ptr Apd |void |sv_setpvn |NN SV *const sv|NULLOK const char *const ptr|const STRLEN len +Apd |void |sv_setpvn_fresh|NN SV *const sv|NULLOK const char *const ptr|const STRLEN len Apd |char *|sv_setpv_bufsize|NN SV *const sv|const STRLEN cur|const STRLEN len Xp |void |sv_sethek |NN SV *const sv|NULLOK const HEK *const hek -ApMdb |void |sv_setsv |NN SV *dstr|NULLOK SV *sstr -ApMdb |void |sv_taint |NN SV* sv -ApdR |bool |sv_tainted |NN SV *const sv +Apd |void |sv_setrv_noinc |NN SV *const sv|NN SV *const ref +Apd |void |sv_setrv_inc |NN SV *const sv|NN SV *const ref +Apd |void |sv_setrv_noinc_mg |NN SV *const sv|NN SV *const ref +Apd |void |sv_setrv_inc_mg |NN SV *const sv|NN SV *const ref +ApMdb |void |sv_setsv |NN SV *dsv|NULLOK SV *ssv +Amd |bool |sv_streq |NULLOK SV* sv1|NULLOK SV* sv2 +Apd |bool |sv_streq_flags |NULLOK SV* sv1|NULLOK SV* sv2|const U32 flags +CpMdb |void |sv_taint |NN SV* sv +CpdR |bool |sv_tainted |NN SV *const sv Apd |int |sv_unmagic |NN SV *const sv|const int type Apd |int |sv_unmagicext |NN SV *const sv|const int type|NULLOK MGVTBL *vtbl ApdMb |void |sv_unref |NN SV* sv Apd |void |sv_unref_flags |NN SV *const ref|const U32 flags -Apd |void |sv_untaint |NN SV *const sv +Cpd |void |sv_untaint |NN SV *const sv Apd |void |sv_upgrade |NN SV *const sv|svtype new_type ApdMb |void |sv_usepvn |NN SV* sv|NULLOK char* ptr|STRLEN len Apd |void |sv_usepvn_flags|NN SV *const sv|NULLOK char* ptr|const STRLEN len\ @@ -1821,29 +1963,29 @@ Apd |void |sv_vcatpvfn_flags|NN SV *const sv|NN const char *const pat|const STRL Apd |void |sv_vsetpvfn |NN SV *const sv|NN const char *const pat|const STRLEN patlen \ |NULLOK va_list *const args|NULLOK SV **const svargs \ |const Size_t sv_count|NULLOK bool *const maybe_tainted -ApR |NV |str_to_version |NN SV *sv -Ap |void |regdump |NN const regexp* r +CpR |NV |str_to_version |NN SV *sv +Cp |void |regdump |NN const regexp* r CiTop |struct regexp *|ReANY |NN const REGEXP * const re -Ap |I32 |pregexec |NN REGEXP * const prog|NN char* stringarg \ +Apdh |I32 |pregexec |NN REGEXP * const prog|NN char* stringarg \ |NN char* strend|NN char* strbeg \ |SSize_t minend |NN SV* screamer|U32 nosave -Ap |void |pregfree |NULLOK REGEXP* r -Ap |void |pregfree2 |NN REGEXP *rx +Cp |void |pregfree |NULLOK REGEXP* r +Cp |void |pregfree2 |NN REGEXP *rx : FIXME - is anything in re using this now? EXp |REGEXP*|reg_temp_copy |NULLOK REGEXP* dsv|NN REGEXP* ssv -Ap |void |regfree_internal|NN REGEXP *const rx +Cp |void |regfree_internal|NN REGEXP *const rx #if defined(USE_ITHREADS) -Ap |void* |regdupe_internal|NN REGEXP * const r|NN CLONE_PARAMS* param +Cp |void* |regdupe_internal|NN REGEXP * const r|NN CLONE_PARAMS* param #endif EXp |regexp_engine const *|current_re_engine -Ap |REGEXP*|pregcomp |NN SV * const pattern|const U32 flags +Apdh |REGEXP*|pregcomp |NN SV * const pattern|const U32 flags p |REGEXP*|re_op_compile |NULLOK SV ** const patternp \ |int pat_count|NULLOK OP *expr \ |NN const regexp_engine* eng \ |NULLOK REGEXP *old_re \ |NULLOK bool *is_bare_re \ |const U32 rx_flags|const U32 pm_flags -Ap |REGEXP*|re_compile |NN SV * const pattern|U32 orig_rx_flags +Apd |REGEXP*|re_compile |NN SV * const pattern|U32 orig_rx_flags Cp |char* |re_intuit_start|NN REGEXP * const rx \ |NULLOK SV* sv \ |NN const char* const strbeg \ @@ -1852,21 +1994,21 @@ Cp |char* |re_intuit_start|NN REGEXP * const rx \ |const U32 flags \ |NULLOK re_scream_pos_data *data Cp |SV* |re_intuit_string|NN REGEXP *const r -Ap |I32 |regexec_flags |NN REGEXP *const rx|NN char *stringarg \ +Cp |I32 |regexec_flags |NN REGEXP *const rx|NN char *stringarg \ |NN char *strend|NN char *strbeg \ |SSize_t minend|NN SV *sv \ |NULLOK void *data|U32 flags -ApR |regnode*|regnext |NULLOK regnode* p +CpR |regnode*|regnext |NULLOK regnode* p EXp |SV*|reg_named_buff |NN REGEXP * const rx|NULLOK SV * const key \ |NULLOK SV * const value|const U32 flags EXp |SV*|reg_named_buff_iter |NN REGEXP * const rx|NULLOK const SV * const lastkey \ |const U32 flags -Ap |SV*|reg_named_buff_fetch |NN REGEXP * const rx|NN SV * const namesv|const U32 flags -Ap |bool|reg_named_buff_exists |NN REGEXP * const rx|NN SV * const key|const U32 flags -Ap |SV*|reg_named_buff_firstkey |NN REGEXP * const rx|const U32 flags -Ap |SV*|reg_named_buff_nextkey |NN REGEXP * const rx|const U32 flags -Ap |SV*|reg_named_buff_scalar |NN REGEXP * const rx|const U32 flags -Ap |SV*|reg_named_buff_all |NN REGEXP * const rx|const U32 flags +Cp |SV*|reg_named_buff_fetch |NN REGEXP * const rx|NN SV * const namesv|const U32 flags +Cp |bool|reg_named_buff_exists |NN REGEXP * const rx|NN SV * const key|const U32 flags +Cp |SV*|reg_named_buff_firstkey |NN REGEXP * const rx|const U32 flags +Cp |SV*|reg_named_buff_nextkey |NN REGEXP * const rx|const U32 flags +Cp |SV*|reg_named_buff_scalar |NN REGEXP * const rx|const U32 flags +Cp |SV*|reg_named_buff_all |NN REGEXP * const rx|const U32 flags : FIXME - is anything in re using this now? EXp |void|reg_numbered_buff_fetch|NN REGEXP * const rx|const I32 paren|NULLOK SV * const sv @@ -1882,19 +2024,25 @@ EXpRT |const char * const *|get_prop_values|const int table_index EXpR |SV * |get_prop_definition|const int table_index EXpRT |const char *|get_deprecated_property_msg|const Size_t warning_offset #if defined(PERL_IN_REGCOMP_C) -EiRT |bool |invlist_is_iterating|NN SV* const invlist +EiRT |bool |invlist_is_iterating|NN const SV* const invlist EiR |SV* |invlist_contents|NN SV* const invlist \ |const bool traditional_style EixRT |UV |invlist_lowest|NN SV* const invlist -ESRT |bool |new_regcurly |NN const char *s|NN const char *e ERS |SV* |make_exactf_invlist |NN RExC_state_t *pRExC_state \ |NN regnode *node +ES |regnode_offset|reg_la_NOTHING |NN RExC_state_t *pRExC_state \ + |U32 flags|NN const char *type +ES |regnode_offset|reg_la_OPFAIL |NN RExC_state_t *pRExC_state \ + |U32 flags|NN const char *type ES |regnode_offset|reg |NN RExC_state_t *pRExC_state \ |I32 paren|NN I32 *flagp|U32 depth ES |regnode_offset|regnode_guts|NN RExC_state_t *pRExC_state \ - |const U8 op \ - |const STRLEN extra_len \ - |NN const char* const name + |const STRLEN extra_len +#ifdef DEBUGGING +ES |regnode_offset|regnode_guts_debug|NN RExC_state_t *pRExC_state \ + |const U8 op \ + |const STRLEN extra_len +#endif ES |void |change_engine_size|NN RExC_state_t *pRExC_state|const Ptrdiff_t size ES |regnode_offset|reganode|NN RExC_state_t *pRExC_state|U8 op \ |U32 arg @@ -1927,6 +2075,16 @@ ES |regnode_offset|regclass|NN RExC_state_t *pRExC_state \ |const bool strict \ |bool optimizable \ |NULLOK SV** ret_invlist +ES |U8|optimize_regclass |NN RExC_state_t *pRExC_state \ + |NULLOK SV* cp_list \ + |NULLOK SV* only_utf8_locale_list \ + |NULLOK SV* upper_latin1_only_utf8_matches \ + |const U32 has_runtime_dependency \ + |const U32 posixl \ + |NN U8 * anyof_flags \ + |NN bool * invert \ + |NN regnode_offset * ret \ + |NN I32 *flagp ES |SV * |parse_uniprop_string|NN const char * const name \ |Size_t name_len \ |const bool is_utf8 \ @@ -1961,13 +2119,12 @@ ES |void|add_above_Latin1_folds|NN RExC_state_t *pRExC_state|const U8 cp \ |NN SV** invlist ES |regnode_offset|handle_named_backref|NN RExC_state_t *pRExC_state \ |NN I32 *flagp \ - |NN char * parse_start \ + |NN char * backref_parse_start \ |char ch ESTR |unsigned int|regex_set_precedence|const U8 my_operator ES |regnode_offset|handle_regex_sets|NN RExC_state_t *pRExC_state \ |NULLOK SV ** return_invlist \ - |NN I32 *flagp|U32 depth \ - |NN char * const oregcomp_parse + |NN I32 *flagp|U32 depth ES |void |set_regex_pv |NN RExC_state_t *pRExC_state|NN REGEXP *Rx # if defined(DEBUGGING) && defined(ENABLE_REGEX_SETS_DEBUGGING) ES |void |dump_regex_sets_structures \ @@ -1977,6 +2134,8 @@ ES |void |dump_regex_sets_structures \ # endif ES |void|parse_lparen_question_flags|NN RExC_state_t *pRExC_state ES |regnode_offset|reg_node|NN RExC_state_t *pRExC_state|U8 op +ES |U32 |get_quantifier_value|NN RExC_state_t *pRExC_state \ + |NN const char * start|NN const char * end ES |regnode_offset|regpiece|NN RExC_state_t *pRExC_state \ |NN I32 *flagp|U32 depth ES |bool |grok_bslash_N |NN RExC_state_t *pRExC_state \ @@ -2111,7 +2270,7 @@ ESR |bool |regtail_study |NN RExC_state_t *pRExC_state \ # endif # ifndef PERL_EXT_RE_BUILD EiRT |UV* |_invlist_array_init |NN SV* const invlist|const bool will_have_0 -EiRT |UV |invlist_max |NN SV* const invlist +EiRT |UV |invlist_max |NN const SV* const invlist EiRT |IV* |get_invlist_previous_index_addr|NN SV* invlist EiT |void |invlist_set_previous_index|NN SV* const invlist|const IV index EiRT |IV |invlist_previous_index|NN SV* const invlist @@ -2200,7 +2359,7 @@ EiT |const char *|get_regex_charset_name|const U32 flags|NN STRLEN* const lenp || defined(PERL_IN_TOKE_C) || defined(PERL_IN_UTF8_C) \ || defined(PERL_IN_DOOP_C) EiRT |UV* |invlist_array |NN SV* const invlist -EiRT |bool |is_invlist |NULLOK SV* const invlist +EiRT |bool |is_invlist |NULLOK const SV* const invlist EiRT |bool* |get_invlist_offset_addr|NN SV* invlist EiRT |UV |_invlist_len |NN SV* const invlist EiRT |bool |_invlist_contains_cp|NN SV* const invlist|const UV cp @@ -2238,7 +2397,7 @@ EXTp |UV |_to_fold_latin1|const U8 c|NN U8 *p|NN STRLEN *lenp|const unsigned int EpX |SV* |invlist_clone |NN SV* const invlist|NULLOK SV* newlist #endif #if defined(PERL_IN_REGCOMP_C) || defined(PERL_IN_TOKE_C) -EiRT |bool |regcurly |NN const char *s +EXpRT |bool |regcurly |NN const char *s|NN const char *e|NULLOK const char * result[5] #endif #if defined(PERL_IN_REGEXEC_C) ERS |bool |isFOO_utf8_lc |const U8 classnum|NN const U8* character|NN const U8* e @@ -2333,12 +2492,12 @@ ES |void |debug_start_match|NN const REGEXP *prog|const bool do_utf8\ EFp |int |re_exec_indentf|NN const char *fmt|U32 depth|... # endif #endif -#if defined(PERL_IN_REGEXEC_C) || defined(PERL_IN_UTF8_C) -EXRp |bool |isFOO_lc |const U8 classnum|const U8 character +#if defined(PERL_IN_REGEXEC_C) +ESR |bool |isFOO_lc |const U8 classnum|const U8 character #endif -Ap |void |taint_env -Ap |void |taint_proper |NULLOK const char* f|NN const char *const s +Cpd |void |taint_env +Cpd |void |taint_proper |NULLOK const char* f|NN const char *const s EXp |char * |_byte_dump_string \ |NN const U8 * const start \ |const STRLEN len \ @@ -2348,9 +2507,9 @@ EXp |char * |_byte_dump_string \ iTR |int |does_utf8_overflow|NN const U8 * const s \ |NN const U8 * e \ |const bool consider_overlongs -iTR |int |is_utf8_overlong_given_start_byte_ok|NN const U8 * const s \ - |const STRLEN len -iTR |int |isFF_OVERLONG |NN const U8 * const s|const STRLEN len +iTR |int |is_utf8_overlong|NN const U8 * const s \ + |const STRLEN len +iTR |int |isFF_overlong |NN const U8 * const s|const STRLEN len SR |char * |unexpected_non_continuation_text \ |NN const U8 * const s \ |STRLEN print_len \ @@ -2364,7 +2523,15 @@ S |void |warn_on_first_deprecated_use \ |NN const char * const file \ |const unsigned line #endif -S |UV |_to_utf8_case |const UV uv1 \ +S |UV |to_case_cp_list|const UV original \ + |NULLOK const U32 ** const remaining_list \ + |NULLOK Size_t * remaining_count \ + |NN SV *invlist \ + |NN const I32 * const invmap \ + |NULLOK const U32 * const * const aux_tables \ + |NULLOK const U8 * const aux_table_lengths \ + |NN const char * const normal +S |UV |_to_utf8_case |const UV original \ |NULLOK const U8 *p \ |NN U8* ustrp \ |NN STRLEN *lenp \ @@ -2392,14 +2559,14 @@ pT |bool |translate_substr_offsets|STRLEN curlen|IV pos1_iv \ |NN STRLEN *lenp #endif #if defined(UNLINK_ALL_VERSIONS) -Ap |I32 |unlnk |NN const char* f +Cp |I32 |unlnk |NN const char* f #endif AbpdD |SSize_t|unpack_str |NN const char *pat|NN const char *patend|NN const char *s \ |NULLOK const char *strbeg|NN const char *strend|NULLOK char **new_s \ |I32 ocnt|U32 flags Apd |SSize_t|unpackstring |NN const char *pat|NN const char *patend|NN const char *s \ |NN const char *strend|U32 flags -Ap |void |unsharepvn |NULLOK const char* sv|I32 len|U32 hash +Cpd |void |unsharepvn |NULLOK const char* sv|I32 len|U32 hash : Used in gv.c, hv.c p |void |unshare_hek |NULLOK HEK* hek : Used in perly.y @@ -2407,8 +2574,12 @@ p |void |utilize |int aver|I32 floor|NULLOK OP* version|NN OP* idop|NULLOK OP* a Cp |void |_force_out_malformed_utf8_message \ |NN const U8 *const p|NN const U8 * const e|const U32 flags \ |const bool die_here -EXp |U8* |utf16_to_utf8 |NN U8* p|NN U8 *d|Size_t bytelen|NN Size_t *newlen -EXp |U8* |utf16_to_utf8_reversed|NN U8* p|NN U8 *d|Size_t bytelen|NN Size_t *newlen +EXp |U8* |utf16_to_utf8_base|NN U8* p|NN U8 *d|Size_t bytelen|NN Size_t *newlen \ + |const bool high|const bool low +EMXp |U8* |utf16_to_utf8 |NN U8* p|NN U8 *d|Size_t bytelen|NN Size_t *newlen +EMXp |U8* |utf16_to_utf8_reversed|NN U8* p|NN U8 *d|Size_t bytelen|NN Size_t *newlen +EXpx |U8* |utf8_to_utf16_base|NN U8* s|NN U8 *d|Size_t bytelen|NN Size_t *newlen \ + |const bool high|const bool low AdpR |STRLEN |utf8_length |NN const U8* s|NN const U8 *e AipdR |IV |utf8_distance |NN const U8 *a|NN const U8 *b AipdRT |U8* |utf8_hop |NN const U8 *s|SSize_t off @@ -2419,7 +2590,7 @@ Apxd |U8* |utf8_to_bytes |NN U8 *s|NN STRLEN *lenp Apd |int |bytes_cmp_utf8 |NN const U8 *b|STRLEN blen|NN const U8 *u \ |STRLEN ulen AMxdp |U8* |bytes_from_utf8|NN const U8 *s|NN STRLEN *lenp|NN bool *is_utf8p -AxTp |U8* |bytes_from_utf8_loc|NN const U8 *s \ +CxTdp |U8* |bytes_from_utf8_loc|NN const U8 *s \ |NN STRLEN *lenp \ |NN bool *is_utf8p \ |NULLOK const U8 ** first_unconverted @@ -2441,7 +2612,7 @@ AdMTp |UV |utf8n_to_uvchr_error|NN const U8 *s \ |NULLOK STRLEN *retlen \ |const U32 flags \ |NULLOK U32 * errors -AxTdip |UV |utf8n_to_uvchr_msgs|NN const U8 *s \ +ATdip |UV |utf8n_to_uvchr_msgs|NN const U8 *s \ |STRLEN curlen \ |NULLOK STRLEN *retlen \ |const U32 flags \ @@ -2460,9 +2631,9 @@ CdbDp |UV |utf8n_to_uvuni|NN const U8 *s|STRLEN curlen|NULLOK STRLEN *retlen|U32 Adm |U8* |uvchr_to_utf8 |NN U8 *d|UV uv Cp |U8* |uvuni_to_utf8 |NN U8 *d|UV uv Adm |U8* |uvchr_to_utf8_flags |NN U8 *d|UV uv|UV flags -Admx |U8* |uvchr_to_utf8_flags_msgs|NN U8 *d|UV uv|UV flags|NULLOK HV ** msgs -CMpd |U8* |uvoffuni_to_utf8_flags |NN U8 *d|UV uv|const UV flags -Cp |U8* |uvoffuni_to_utf8_flags_msgs|NN U8 *d|UV uv|const UV flags|NULLOK HV** msgs +Adm |U8* |uvchr_to_utf8_flags_msgs|NN U8 *d|UV uv|UV flags|NULLOK HV ** msgs +CMpd |U8* |uvoffuni_to_utf8_flags |NN U8 *d|UV uv|UV flags +Cp |U8* |uvoffuni_to_utf8_flags_msgs|NN U8 *d|UV input_uv|const UV flags|NULLOK HV** msgs CdpbD |U8* |uvuni_to_utf8_flags |NN U8 *d|UV uv|UV flags Apd |char* |pv_uni_display |NN SV *dsv|NN const U8 *spv|STRLEN len|STRLEN pvlim|UV flags ApdR |char* |sv_uni_display |NN SV *dsv|NN SV *ssv|STRLEN pvlim|UV flags @@ -2477,11 +2648,12 @@ pR |SV* |vivify_ref |NN SV* sv|U32 to_what p |I32 |wait4pid |Pid_t pid|NN int* statusp|int flags : Used in locale.c and perl.c p |U32 |parse_unicode_opts|NN const char **popt -Ap |U32 |seed +Cp |U32 |seed XpTo |double |drand48_r |NN perl_drand48_t *random_state XpTo |void |drand48_init_r |NN perl_drand48_t *random_state|U32 seed : Only used in perl.c -p |void |get_hash_seed |NN unsigned char * const seed_buffer +p |void |get_hash_seed |NN unsigned char * const seed_buffer +p |void |debug_hash_seed|bool via_debug_h : Used in doio.c, pp_hot.c, pp_sys.c p |void |report_evil_fh |NULLOK const GV *gv : Used in doio.c, pp_hot.c, pp_sys.c @@ -2496,10 +2668,10 @@ p |void |report_redefined_cv|NN const SV *name \ Apd |void |warn_sv |NN SV *baseex Afpd |void |warn |NN const char* pat|... Apd |void |vwarn |NN const char* pat|NULLOK va_list* args -Afp |void |warner |U32 err|NN const char* pat|... -Afp |void |ck_warner |U32 err|NN const char* pat|... -Afp |void |ck_warner_d |U32 err|NN const char* pat|... -Ap |void |vwarner |U32 err|NN const char* pat|NULLOK va_list* args +Adfp |void |warner |U32 err|NN const char* pat|... +Adfp |void |ck_warner |U32 err|NN const char* pat|... +Adfp |void |ck_warner_d |U32 err|NN const char* pat|... +Adp |void |vwarner |U32 err|NN const char* pat|NULLOK va_list* args #ifdef USE_C_BACKTRACE pd |Perl_c_backtrace*|get_c_backtrace|int max_depth|int skip dm |void |free_c_backtrace|NN Perl_c_backtrace* bt @@ -2508,10 +2680,10 @@ Apd |bool |dump_c_backtrace|NN PerlIO* fp|int max_depth|int skip #endif : FIXME p |void |watch |NN char** addr -Am |I32 |whichsig |NN const char* sig -Ap |I32 |whichsig_sv |NN SV* sigsv -Ap |I32 |whichsig_pv |NN const char* sig -Ap |I32 |whichsig_pvn |NN const char* sig|STRLEN len +Amd |I32 |whichsig |NN const char* sig +Apd |I32 |whichsig_sv |NN SV* sigsv +Apd |I32 |whichsig_pv |NN const char* sig +Apd |I32 |whichsig_pvn |NN const char* sig|STRLEN len : used to check for NULs in pathnames and other names AiRdp |bool |is_safe_syscall|NN const char *pv|STRLEN len|NN const char *what|NN const char *op_name #ifdef PERL_CORE @@ -2540,27 +2712,22 @@ p |void |parser_free_nexttoke_ops|NN yy_parser *parser \ S |int |yywarn |NN const char *const s|U32 flags #endif #if defined(MYMALLOC) -Ap |void |dump_mstats |NN const char* s -Ap |int |get_mstats |NN perl_mstats_t *buf|int buflen|int level +Apd |void |dump_mstats |NN const char* s +Cp |int |get_mstats |NN perl_mstats_t *buf|int buflen|int level #endif -ATpa |Malloc_t|safesysmalloc |MEM_SIZE nbytes -ATpa |Malloc_t|safesyscalloc |MEM_SIZE elements|MEM_SIZE size -ATpR |Malloc_t|safesysrealloc|Malloc_t where|MEM_SIZE nbytes -ATp |Free_t |safesysfree |Malloc_t where +ATdpa |Malloc_t|safesysmalloc |MEM_SIZE nbytes +ATdpa |Malloc_t|safesyscalloc |MEM_SIZE elements|MEM_SIZE size +ATdpR |Malloc_t|safesysrealloc|Malloc_t where|MEM_SIZE nbytes +AdTp |Free_t |safesysfree |Malloc_t where CrTp |void |croak_memory_wrap -#if defined(PERL_GLOBAL_STRUCT) -Ap |struct perl_vars *|GetVars -Ap |struct perl_vars*|init_global_struct -Ap |void |free_global_struct|NN struct perl_vars *plvarsp -#endif -Ap |int |runops_standard -Ap |int |runops_debug +Cpdh |int |runops_standard +Cpdh |int |runops_debug Afpd |void |sv_catpvf_mg |NN SV *const sv|NN const char *const pat|... Apd |void |sv_vcatpvf_mg |NN SV *const sv|NN const char *const pat \ |NULLOK va_list *const args -Apd |void |sv_catpv_mg |NN SV *const sv|NULLOK const char *const ptr -ApdbM |void |sv_catpvn_mg |NN SV *sv|NN const char *ptr|STRLEN len -ApdbM |void |sv_catsv_mg |NN SV *dsv|NULLOK SV *ssv +Apd |void |sv_catpv_mg |NN SV *const dsv|NULLOK const char *const sstr +ApdbM |void |sv_catpvn_mg |NN SV *dsv|NN const char *sstr|STRLEN len +ApdbM |void |sv_catsv_mg |NN SV *dsv|NULLOK SV *sstr Afpd |void |sv_setpvf_mg |NN SV *const sv|NN const char *const pat|... Apd |void |sv_vsetpvf_mg |NN SV *const sv|NN const char *const pat \ |NULLOK va_list *const args @@ -2570,9 +2737,9 @@ Apd |void |sv_setuv_mg |NN SV *const sv|const UV u Apd |void |sv_setnv_mg |NN SV *const sv|const NV num Apd |void |sv_setpv_mg |NN SV *const sv|NULLOK const char *const ptr Apd |void |sv_setpvn_mg |NN SV *const sv|NN const char *const ptr|const STRLEN len -Apd |void |sv_setsv_mg |NN SV *const dstr|NULLOK SV *const sstr +Apd |void |sv_setsv_mg |NN SV *const dsv|NULLOK SV *const ssv ApdbM |void |sv_usepvn_mg |NN SV *sv|NULLOK char *ptr|STRLEN len -ApR |MGVTBL*|get_vtbl |int vtbl_id +CpRx |MGVTBL*|get_vtbl |int vtbl_id Apd |char* |pv_display |NN SV *dsv|NN const char *pv|STRLEN cur|STRLEN len \ |STRLEN pvlim Apd |char* |pv_escape |NULLOK SV *dsv|NN char const * const str\ @@ -2584,29 +2751,29 @@ Apd |char* |pv_pretty |NN SV *dsv|NN char const * const str\ |NULLOK char const * const start_color\ |NULLOK char const * const end_color\ |const U32 flags -Afp |void |dump_indent |I32 level|NN PerlIO *file|NN const char* pat|... -Ap |void |dump_vindent |I32 level|NN PerlIO *file|NN const char* pat \ +Cfp |void |dump_indent |I32 level|NN PerlIO *file|NN const char* pat|... +Cp |void |dump_vindent |I32 level|NN PerlIO *file|NN const char* pat \ |NULLOK va_list *args -Ap |void |do_gv_dump |I32 level|NN PerlIO *file|NN const char *name\ +Cp |void |do_gv_dump |I32 level|NN PerlIO *file|NN const char *name\ |NULLOK GV *sv -Ap |void |do_gvgv_dump |I32 level|NN PerlIO *file|NN const char *name\ +Cp |void |do_gvgv_dump |I32 level|NN PerlIO *file|NN const char *name\ |NULLOK GV *sv -Ap |void |do_hv_dump |I32 level|NN PerlIO *file|NN const char *name\ +Cp |void |do_hv_dump |I32 level|NN PerlIO *file|NN const char *name\ |NULLOK HV *sv -Ap |void |do_magic_dump |I32 level|NN PerlIO *file|NULLOK const MAGIC *mg|I32 nest \ +Cp |void |do_magic_dump |I32 level|NN PerlIO *file|NULLOK const MAGIC *mg|I32 nest \ |I32 maxnest|bool dumpops|STRLEN pvlim -Ap |void |do_op_dump |I32 level|NN PerlIO *file|NULLOK const OP *o -Ap |void |do_pmop_dump |I32 level|NN PerlIO *file|NULLOK const PMOP *pm -Ap |void |do_sv_dump |I32 level|NN PerlIO *file|NULLOK SV *sv|I32 nest \ +Cp |void |do_op_dump |I32 level|NN PerlIO *file|NULLOK const OP *o +Cp |void |do_pmop_dump |I32 level|NN PerlIO *file|NULLOK const PMOP *pm +Cp |void |do_sv_dump |I32 level|NN PerlIO *file|NULLOK SV *sv|I32 nest \ |I32 maxnest|bool dumpops|STRLEN pvlim -Ap |void |magic_dump |NULLOK const MAGIC *mg -Ap |void |reginitcolors -ApdRMb |char* |sv_2pv_nolen |NN SV* sv -ApdRMb |char* |sv_2pvutf8_nolen|NN SV* sv -ApdRMb |char* |sv_2pvbyte_nolen|NN SV* sv -ApMdbR |char* |sv_pv |NN SV *sv -ApMdbR |char* |sv_pvutf8 |NN SV *sv -ApMdbR |char* |sv_pvbyte |NN SV *sv +Apd |void |magic_dump |NULLOK const MAGIC *mg +Cp |void |reginitcolors +CpdRMb |char* |sv_2pv_nolen |NN SV* sv +CpdRMb |char* |sv_2pvutf8_nolen|NN SV* sv +CpdRMb |char* |sv_2pvbyte_nolen|NN SV* sv +CpMdbR |char* |sv_pv |NN SV *sv +CpMdbR |char* |sv_pvutf8 |NN SV *sv +CpMdbR |char* |sv_pvbyte |NN SV *sv ApMdb |STRLEN |sv_utf8_upgrade|NN SV *sv Amd |STRLEN |sv_utf8_upgrade_nomg|NN SV *sv ApdMb |bool |sv_utf8_downgrade|NN SV *const sv|const bool fail_ok @@ -2625,57 +2792,60 @@ AiTMdp |SV * |SvREFCNT_inc_NN|NN SV *sv AiTMdp |void |SvREFCNT_inc_void|NULLOK SV *sv AiMdp |void |SvREFCNT_dec |NULLOK SV *sv AiMdp |void |SvREFCNT_dec_NN|NN SV *sv -AiTp |void |SvAMAGIC_on |NN SV *sv -AiTp |void |SvAMAGIC_off |NN SV *sv +AiTpd |void |SvAMAGIC_on |NN SV *sv +AiTpd |void |SvAMAGIC_off |NN SV *sv +Aipd |bool |SvTRUE |NULLOK SV *sv +Aipd |bool |SvTRUE_nomg |NULLOK SV *sv +Aipd |bool |SvTRUE_NN |NN SV *sv +Cip |bool |SvTRUE_common |NN SV *sv|const bool sv_2bool_is_fallback : This is indirectly referenced by globals.c. This is somewhat annoying. p |int |magic_killbackrefs|NN SV *sv|NN MAGIC *mg Ap |OP* |newANONATTRSUB |I32 floor|NULLOK OP *proto|NULLOK OP *attrs|NULLOK OP *block -Am |CV* |newATTRSUB |I32 floor|NULLOK OP *o|NULLOK OP *proto|NULLOK OP *attrs|NULLOK OP *block +Adm |CV* |newATTRSUB |I32 floor|NULLOK OP *o|NULLOK OP *proto|NULLOK OP *attrs|NULLOK OP *block pdX |CV* |newATTRSUB_x |I32 floor|NULLOK OP *o|NULLOK OP *proto \ |NULLOK OP *attrs|NULLOK OP *block \ |bool o_is_gv -Ap |CV * |newMYSUB |I32 floor|NN OP *o|NULLOK OP *proto \ +Cp |CV * |newMYSUB |I32 floor|NN OP *o|NULLOK OP *proto \ |NULLOK OP *attrs|NULLOK OP *block p |CV* |newSTUB |NN GV *gv|bool fake : Used in perly.y p |OP * |my_attrs |NN OP *o|NULLOK OP *attrs #if defined(USE_ITHREADS) -ApR |PERL_CONTEXT*|cx_dup |NULLOK PERL_CONTEXT* cx|I32 ix|I32 max|NN CLONE_PARAMS* param -ApR |PERL_SI*|si_dup |NULLOK PERL_SI* si|NN CLONE_PARAMS* param -ApR |ANY* |ss_dup |NN PerlInterpreter* proto_perl|NN CLONE_PARAMS* param -ApR |void* |any_dup |NULLOK void* v|NN const PerlInterpreter* proto_perl -ApR |HE* |he_dup |NULLOK const HE* e|bool shared|NN CLONE_PARAMS* param -ApR |HEK* |hek_dup |NULLOK HEK* e|NN CLONE_PARAMS* param -Ap |void |re_dup_guts |NN const REGEXP *sstr|NN REGEXP *dstr \ +CpR |PERL_CONTEXT*|cx_dup |NULLOK PERL_CONTEXT* cx|I32 ix|I32 max|NN CLONE_PARAMS* param +CpdR |PERL_SI*|si_dup |NULLOK PERL_SI* si|NN CLONE_PARAMS* param +CpdR |ANY* |ss_dup |NN PerlInterpreter* proto_perl|NN CLONE_PARAMS* param +CpR |void* |any_dup |NULLOK void* v|NN const PerlInterpreter* proto_perl +CpR |HE* |he_dup |NULLOK const HE* e|bool shared|NN CLONE_PARAMS* param +CpR |HEK* |hek_dup |NULLOK HEK* e|NN CLONE_PARAMS* param +Adp |void |re_dup_guts |NN const REGEXP *sstr|NN REGEXP *dstr \ |NN CLONE_PARAMS* param -Ap |PerlIO*|fp_dup |NULLOK PerlIO *const fp|const char type|NN CLONE_PARAMS *const param -ApR |DIR* |dirp_dup |NULLOK DIR *const dp|NN CLONE_PARAMS *const param -ApR |GP* |gp_dup |NULLOK GP *const gp|NN CLONE_PARAMS *const param -ApR |MAGIC* |mg_dup |NULLOK MAGIC *mg|NN CLONE_PARAMS *const param +Cpd |PerlIO*|fp_dup |NULLOK PerlIO *const fp|const char type|NN CLONE_PARAMS *const param +CpdR |DIR* |dirp_dup |NULLOK DIR *const dp|NN CLONE_PARAMS *const param +CpdR |GP* |gp_dup |NULLOK GP *const gp|NN CLONE_PARAMS *const param +CpdR |MAGIC* |mg_dup |NULLOK MAGIC *mg|NN CLONE_PARAMS *const param #if defined(PERL_IN_SV_C) S |SV ** |sv_dup_inc_multiple|NN SV *const *source|NN SV **dest \ |SSize_t items|NN CLONE_PARAMS *const param -SR |SV* |sv_dup_common |NN const SV *const sstr \ +SR |SV* |sv_dup_common |NN const SV *const ssv \ |NN CLONE_PARAMS *const param #endif -ApR |SV* |sv_dup |NULLOK const SV *const sstr|NN CLONE_PARAMS *const param -ApR |SV* |sv_dup_inc |NULLOK const SV *const sstr \ +ApR |SV* |sv_dup |NULLOK const SV *const ssv|NN CLONE_PARAMS *const param +ApR |SV* |sv_dup_inc |NULLOK const SV *const ssv \ |NN CLONE_PARAMS *const param -Ap |void |rvpv_dup |NN SV *const dstr|NN const SV *const sstr|NN CLONE_PARAMS *const param -Ap |yy_parser*|parser_dup |NULLOK const yy_parser *const proto|NN CLONE_PARAMS *const param +Cp |void |rvpv_dup |NN SV *const dsv|NN const SV *const ssv|NN CLONE_PARAMS *const param +Cp |yy_parser*|parser_dup |NULLOK const yy_parser *const proto|NN CLONE_PARAMS *const param #endif -ApR |PTR_TBL_t*|ptr_table_new -ApR |void* |ptr_table_fetch|NN PTR_TBL_t *const tbl|NULLOK const void *const sv -Ap |void |ptr_table_store|NN PTR_TBL_t *const tbl|NULLOK const void *const oldsv \ +ApdR |PTR_TBL_t*|ptr_table_new +ApdR |void* |ptr_table_fetch|NN PTR_TBL_t *const tbl|NULLOK const void *const sv +Apd |void |ptr_table_store|NN PTR_TBL_t *const tbl|NULLOK const void *const oldsv \ |NN void *const newsv -Ap |void |ptr_table_split|NN PTR_TBL_t *const tbl -ApD |void |ptr_table_clear|NULLOK PTR_TBL_t *const tbl -Ap |void |ptr_table_free|NULLOK PTR_TBL_t *const tbl +Apd |void |ptr_table_split|NN PTR_TBL_t *const tbl +Apd |void |ptr_table_free|NULLOK PTR_TBL_t *const tbl #if defined(HAVE_INTERP_INTERN) -Ap |void |sys_intern_clear -Ap |void |sys_intern_init +Cp |void |sys_intern_clear +Cp |void |sys_intern_init # if defined(USE_ITHREADS) -Ap |void |sys_intern_dup |NN struct interp_intern* src|NN struct interp_intern* dst +Cp |void |sys_intern_dup |NN struct interp_intern* src|NN struct interp_intern* dst # endif #endif @@ -2731,16 +2901,16 @@ po |SV* |hfree_next_entry |NN HV *hv|NN STRLEN *indexp #if defined(PERL_IN_HV_C) S |void |hsplit |NN HV *hv|STRLEN const oldsize|STRLEN newsize S |void |hv_free_entries|NN HV *hv -S |SV* |hv_free_ent_ret|NN HV *hv|NN HE *entry +S |SV* |hv_free_ent_ret|NN HE *entry +#if !defined(PURIFY) SR |HE* |new_he +#endif SaTR |HEK* |save_hek_flags |NN const char *str|I32 len|U32 hash|int flags ST |void |hv_magic_check |NN HV *hv|NN bool *needs_copy|NN bool *needs_store S |void |unshare_hek_or_pvn|NULLOK const HEK* hek|NULLOK const char* str|I32 len|U32 hash SR |HEK* |share_hek_flags|NN const char *str|STRLEN len|U32 hash|int flags rS |void |hv_notallowed |int flags|NN const char *key|I32 klen|NN const char *msg -iT |U32|ptr_hash|PTRV u S |struct xpvhv_aux*|hv_auxinit|NN HV *hv -ST |struct xpvhv_aux*|hv_auxinit_internal|NN struct xpvhv_aux *iter Sx |SV* |hv_delete_common|NULLOK HV *hv|NULLOK SV *keysv \ |NULLOK const char *key|STRLEN klen|int k_flags|I32 d_flags \ |U32 hash @@ -2759,6 +2929,10 @@ S |void |fixup_errno_string|NN SV* sv #endif +#if defined(USE_ITHREADS) +Cip |AV* |cop_file_avn |NN const COP *cop +#endif + #if defined(PERL_IN_OP_C) SRT |bool |is_handle_constructor|NN const OP *o|I32 numargs SR |I32 |assignment_type|NULLOK const OP *o @@ -2792,6 +2966,7 @@ S |bool |process_special_blocks |I32 floor \ S |void |clear_special_blocks |NN const char *const fullname\ |NN GV *const gv|NN CV *const cv #endif +p |void |no_bareword_filehandle|NN const char *fhname XpR |void* |Slab_Alloc |size_t sz Xp |void |Slab_Free |NN void *op #if defined(PERL_DEBUG_READONLY_OPS) @@ -2939,7 +3114,7 @@ Fp |OP * |tied_method|NN SV *methname|NN SV **sp \ #if defined(PERL_IN_DUMP_C) S |CV* |deb_curcv |I32 ix -S |void |debprof |NN const OP *o +Sd |void |debprof |NN const OP *o S |UV |sequence_num |NULLOK const OP *o S |SV* |pm_description |NN const PMOP *pm #endif @@ -2985,7 +3160,7 @@ S |int |sv_2iuv_non_preserve |NN SV *const sv SR |STRLEN |expect_number |NN const char **const pattern ST |STRLEN |sv_pos_u2b_forwards|NN const U8 *const start \ |NN const U8 *const send|NN STRLEN *const uoffset \ - |NN bool *const at_end + |NN bool *const at_end|NN bool *canonical_position ST |STRLEN |sv_pos_u2b_midway|NN const U8 *const start \ |NN const U8 *send|STRLEN uoffset|const STRLEN uend S |STRLEN |sv_pos_u2b_cached|NN SV *const sv|NN MAGIC **const mgp \ @@ -3000,19 +3175,19 @@ S |STRLEN |sv_pos_b2u_midway|NN const U8 *const s|NN const U8 *const target \ S |void |assert_uft8_cache_coherent|NN const char *const func \ |STRLEN from_cache|STRLEN real|NN SV *const sv ST |char * |F0convert |NV nv|NN char *const endbuf|NN STRLEN *const len -S |SV * |more_sv +Cp |SV * |more_sv S |bool |sv_2iuv_common |NN SV *const sv -S |void |glob_assign_glob|NN SV *const dstr|NN SV *const sstr \ +S |void |glob_assign_glob|NN SV *const dsv|NN SV *const ssv \ |const int dtype SRT |PTR_TBL_ENT_t *|ptr_table_find|NN PTR_TBL_t *const tbl|NULLOK const void *const sv S |void |anonymise_cv_maybe |NN GV *gv|NN CV *cv #endif : Used in sv.c and hv.c -po |void * |more_bodies |const svtype sv_type|const size_t body_size \ +Cpo |void * |more_bodies |const svtype sv_type|const size_t body_size \ |const size_t arena_size EXpR |SV* |get_and_check_backslash_N_name|NN const char* s \ - |NN const char* const e \ + |NN const char* e \ |const bool is_utf8 \ |NN const char** error_msg EXpR |HV* |load_charnames |NN SV * char_name \ @@ -3161,13 +3336,13 @@ Cp |bool |_is_cur_LC_category_utf8|int category S |SV* |mess_alloc S |SV * |with_queued_errors|NN SV *ex S |bool |invoke_exception_hook|NULLOK SV *ex|bool warn -#if defined(PERL_MEM_LOG) && !defined(PERL_MEM_LOG_NOIMPL) +# if defined(PERL_MEM_LOG) && !defined(PERL_MEM_LOG_NOIMPL) ST |void |mem_log_common |enum mem_log_type mlt|const UV n|const UV typesize \ |NN const char *type_name|NULLOK const SV *sv \ |Malloc_t oldalloc|Malloc_t newalloc \ |NN const char *filename|const int linenumber \ |NN const char *funcname -#endif +# endif #endif #if defined(PERL_MEM_LOG) @@ -3193,60 +3368,58 @@ iR |bool |is_utf8_common |NN const U8 *const p \ EXiTp |void |append_utf8_from_native_byte|const U8 byte|NN U8** dest Apd |void |sv_set_undef |NN SV *sv -Apd |void |sv_setsv_flags |NN SV *dstr|NULLOK SV *sstr|const I32 flags -Apd |void |sv_catpvn_flags|NN SV *const dstr|NN const char *sstr|const STRLEN len \ +Apd |void |sv_setsv_flags |NN SV *dsv|NULLOK SV *ssv|const I32 flags +Apd |void |sv_catpvn_flags|NN SV *const dsv|NN const char *sstr|const STRLEN len \ |const I32 flags -Apd |void |sv_catpv_flags |NN SV *dstr|NN const char *sstr \ +Apd |void |sv_catpv_flags |NN SV *dsv|NN const char *sstr \ |const I32 flags -Apd |void |sv_catsv_flags |NN SV *const dsv|NULLOK SV *const ssv|const I32 flags +Apd |void |sv_catsv_flags |NN SV *const dsv|NULLOK SV *const sstr|const I32 flags Amd |STRLEN |sv_utf8_upgrade_flags|NN SV *const sv|const I32 flags Adp |STRLEN |sv_utf8_upgrade_flags_grow|NN SV *const sv|const I32 flags|STRLEN extra -Apd |char* |sv_pvn_force_flags|NN SV *const sv|NULLOK STRLEN *const lp|const I32 flags +Apd |char* |sv_pvn_force_flags|NN SV *const sv|NULLOK STRLEN *const lp|const U32 flags AdpMb |void |sv_copypv |NN SV *const dsv|NN SV *const ssv Amd |void |sv_copypv_nomg |NN SV *const dsv|NN SV *const ssv Apd |void |sv_copypv_flags |NN SV *const dsv|NN SV *const ssv|const I32 flags Cpo |char* |my_atof2 |NN const char *orig|NN NV* value Cp |char* |my_atof3 |NN const char *orig|NN NV* value|const STRLEN len -ApT |int |my_socketpair |int family|int type|int protocol|int fd[2] -ApT |int |my_dirfd |NULLOK DIR* dir +CpdT |int |my_socketpair |int family|int type|int protocol|int fd[2] +ApTd |int |my_dirfd |NULLOK DIR* dir #ifdef PERL_ANY_COW : Used in regexec.c -pxXE |SV* |sv_setsv_cow |NULLOK SV* dstr|NN SV* sstr +pxXE |SV* |sv_setsv_cow |NULLOK SV* dsv|NN SV* ssv #endif -Aop |const char *|PerlIO_context_layers|NULLOK const char *mode +Cop |const char *|PerlIO_context_layers|NULLOK const char *mode #if defined(USE_PERLIO) +Apdh |void |PerlIO_clearerr |NULLOK PerlIO *f Apdh |int |PerlIO_close |NULLOK PerlIO *f -Ap |int |PerlIO_fill |NULLOK PerlIO *f -Apdh |int |PerlIO_fileno |NULLOK PerlIO *f Apdh |int |PerlIO_eof |NULLOK PerlIO *f Apdh |int |PerlIO_error |NULLOK PerlIO *f +Apdh |int |PerlIO_fileno |NULLOK PerlIO *f +Apd |int |PerlIO_fill |NULLOK PerlIO *f Apdh |int |PerlIO_flush |NULLOK PerlIO *f -Apdh |void |PerlIO_clearerr |NULLOK PerlIO *f -Apdh |void |PerlIO_set_cnt |NULLOK PerlIO *f|SSize_t cnt -Apdh |void |PerlIO_set_ptrcnt |NULLOK PerlIO *f|NULLOK STDCHAR *ptr \ - |SSize_t cnt -Apdh |void |PerlIO_setlinebuf |NULLOK PerlIO *f -Apdh |SSize_t|PerlIO_read |NULLOK PerlIO *f|NN void *vbuf \ - |Size_t count -Apdh |SSize_t|PerlIO_write |NULLOK PerlIO *f|NN const void *vbuf \ - |Size_t count -Ap |SSize_t|PerlIO_unread |NULLOK PerlIO *f|NN const void *vbuf \ - |Size_t count -Apdh |Off_t |PerlIO_tell |NULLOK PerlIO *f -Apdh |int |PerlIO_seek |NULLOK PerlIO *f|Off_t offset|int whence -Xp |void |PerlIO_save_errno |NULLOK PerlIO *f -Xp |void |PerlIO_restore_errno |NULLOK PerlIO *f - Apdh |STDCHAR *|PerlIO_get_base |NULLOK PerlIO *f +ApRdh |SSize_t |PerlIO_get_bufsiz |NULLOK PerlIO *f +ApRdh |SSize_t |PerlIO_get_cnt |NULLOK PerlIO *f Apdh |STDCHAR *|PerlIO_get_ptr |NULLOK PerlIO *f -ApRdh |SSize_t |PerlIO_get_bufsiz |NULLOK PerlIO *f -ApRdh |SSize_t |PerlIO_get_cnt |NULLOK PerlIO *f - +Apdh |SSize_t|PerlIO_read |NULLOK PerlIO *f|NN void *vbuf \ + |Size_t count +Xp |void |PerlIO_restore_errno |NULLOK PerlIO *f +Xp |void |PerlIO_save_errno |NULLOK PerlIO *f +Apdh |int |PerlIO_seek |NULLOK PerlIO *f|Off_t offset|int whence +Apdh |void |PerlIO_set_cnt |NULLOK PerlIO *f|SSize_t cnt +Apdh |void |PerlIO_setlinebuf |NULLOK PerlIO *f +Apdh |void |PerlIO_set_ptrcnt |NULLOK PerlIO *f|NULLOK STDCHAR *ptr \ + |SSize_t cnt +ApRdh |PerlIO *|PerlIO_stderr ApRdh |PerlIO *|PerlIO_stdin ApRdh |PerlIO *|PerlIO_stdout -ApRdh |PerlIO *|PerlIO_stderr +Apdh |Off_t |PerlIO_tell |NULLOK PerlIO *f +Apd |SSize_t|PerlIO_unread |NULLOK PerlIO *f|NN const void *vbuf \ + |Size_t count +Apdh |SSize_t|PerlIO_write |NULLOK PerlIO *f|NN const void *vbuf \ + |Size_t count #endif /* USE_PERLIO */ : Only used in dump.c @@ -3293,8 +3466,8 @@ Sd |PADOFFSET|pad_findlex |NN const char *namepv|STRLEN namelen|U32 flags \ |NN PADNAME** out_name|NN int *out_flags #endif #ifdef DEBUGGING -Apd |SV* |pad_sv |PADOFFSET po -Apd |void |pad_setsv |PADOFFSET po|NN SV* sv +Cpd |SV* |pad_sv |PADOFFSET po +Cpd |void |pad_setsv |PADOFFSET po|NN SV* sv #endif pd |void |pad_block_start|int full Apd |U32 |intro_my @@ -3318,7 +3491,7 @@ Apd |CV* |cv_clone |NN CV* proto p |CV* |cv_clone_into |NN CV* proto|NN CV *target pd |void |pad_fixup_inner_anons|NN PADLIST *padlist|NN CV *old_cv|NN CV *new_cv pdX |void |pad_push |NN PADLIST *padlist|int depth -ApbdRM |HV* |pad_compname_type|const PADOFFSET po +ApbdDR |HV* |pad_compname_type|const PADOFFSET po AxpdRT |PADNAME *|padnamelist_fetch|NN PADNAMELIST *pnl|SSize_t key Xop |void |padnamelist_free|NN PADNAMELIST *pnl Axpd |PADNAME **|padnamelist_store|NN PADNAMELIST *pnl|SSize_t key \ @@ -3343,7 +3516,7 @@ p |void |free_tied_hv_pool : Used in mg.c pR |int |get_debug_opts |NN const char **s|bool givehelp #endif -Ap |void |save_set_svflags|NN SV *sv|U32 mask|U32 val +Cpd |void |save_set_svflags|NN SV *sv|U32 mask|U32 val #ifdef DEBUGGING Apod |void |hv_assert |NN HV *hv #endif @@ -3351,11 +3524,11 @@ Apod |void |hv_assert |NN HV *hv ApdR |SV* |hv_scalar |NN HV *hv p |void |hv_pushkv |NN HV *hv|U32 flags ApdRx |SV* |hv_bucket_ratio|NN HV *hv -ApoR |I32* |hv_riter_p |NN HV *hv -ApoR |HE** |hv_eiter_p |NN HV *hv -Apo |void |hv_riter_set |NN HV *hv|I32 riter -Apo |void |hv_eiter_set |NN HV *hv|NULLOK HE *eiter -Ap |void |hv_rand_set |NN HV *hv|U32 new_xhv_rand +CpdoR |I32* |hv_riter_p |NN HV *hv +CpdoR |HE** |hv_eiter_p |NN HV *hv +Cpdo |void |hv_riter_set |NN HV *hv|I32 riter +Cpdo |void |hv_eiter_set |NN HV *hv|NULLOK HE *eiter +Cp |void |hv_rand_set |NN HV *hv|U32 new_xhv_rand Ap |void |hv_name_set |NN HV *hv|NULLOK const char *name|U32 len|U32 flags pd |void |hv_ename_add |NN HV *hv|NN const char *name|U32 len \ |U32 flags @@ -3368,8 +3541,8 @@ pox |void |hv_kill_backrefs |NN HV *hv #endif Apd |void |hv_clear_placeholders |NN HV *hv XpoR |SSize_t*|hv_placeholders_p |NN HV *hv -ApoR |I32 |hv_placeholders_get |NN const HV *hv -Apo |void |hv_placeholders_set |NN HV *hv|I32 ph +CpdoR |I32 |hv_placeholders_get |NN const HV *hv +Cpdo |void |hv_placeholders_set |NN HV *hv|I32 ph : This is indirectly referenced by globals.c. This is somewhat annoying. p |SV* |magic_scalarpack|NN HV *hv|NN MAGIC *mg @@ -3384,8 +3557,8 @@ Sxd |SV* |find_uninit_var|NULLOK const OP *const obase \ |NN const char **desc_p #endif -Ap |GV* |gv_fetchpvn_flags|NN const char* name|STRLEN len|I32 flags|const svtype sv_type -Ap |GV* |gv_fetchsv|NN SV *name|I32 flags|const svtype sv_type +Adp |GV* |gv_fetchpvn_flags|NN const char* name|STRLEN len|I32 flags|const svtype sv_type +Adp |GV* |gv_fetchsv|NN SV *name|I32 flags|const svtype sv_type #ifdef DEBUG_LEAKING_SCALARS_FORK_DUMP : Used in sv.c @@ -3393,13 +3566,13 @@ p |void |dump_sv_child |NN SV *sv #endif #ifdef PERL_DONT_CREATE_GVSV -ApbM |GV* |gv_SVadd |NULLOK GV *gv +ApdbM |GV* |gv_SVadd |NULLOK GV *gv #endif #if defined(PERL_IN_UTIL_C) S |bool |ckwarn_common |U32 w #endif -ApoP |bool |ckwarn |U32 w -ApoP |bool |ckwarn_d |U32 w +CpoP |bool |ckwarn |U32 w +CpoP |bool |ckwarn_d |U32 w : FIXME - exported for ByteLoader - public or private? XEopxR |STRLEN *|new_warnings_bitfield|NULLOK STRLEN *buffer \ |NN const char *const bits|STRLEN size @@ -3414,13 +3587,8 @@ pTd |bool|quadmath_format_needed|NN const char* format : Used in mg.c, sv.c pe |void |my_clearenv -#ifdef PERL_IMPLICIT_CONTEXT -#ifdef PERL_GLOBAL_STRUCT_PRIVATE -Apo |void* |my_cxt_init |NN const char *my_cxt_key|size_t size -Apo |int |my_cxt_index |NN const char *my_cxt_key -#else -Apo |void* |my_cxt_init |NN int *indexp|size_t size -#endif +#ifdef MULTIPLICITY +Cpod |void* |my_cxt_init |NN int *indexp|size_t size #endif #if defined(PERL_IN_UTIL_C) So |void |xs_version_bootcheck|U32 items|U32 ax|NN const char *xs_p \ @@ -3442,10 +3610,10 @@ AipTd |Size_t |my_strnlen |NN const char *str|Size_t maxlen #endif #ifndef HAS_MKOSTEMP -pTo |int |my_mkostemp |NN char *templte|int flags +pTod |int |my_mkostemp |NN char *templte|int flags #endif #ifndef HAS_MKSTEMP -pTo |int |my_mkstemp |NN char *templte +pTod |int |my_mkstemp |NN char *templte #endif APpdT |bool |isinfnan |NV nv @@ -3460,14 +3628,14 @@ XExop |void |emulate_cop_io |NN const COP *const c|NN SV *const sv : Used by SvRX and SvRXOK XExop |REGEXP *|get_re_arg|NULLOK SV *sv -Aopdh |SV* |mro_get_private_data|NN struct mro_meta *const smeta \ +Coph |SV* |mro_get_private_data|NN struct mro_meta *const smeta \ |NN const struct mro_alg *const which Aopdh |SV* |mro_set_private_data|NN struct mro_meta *const smeta \ |NN const struct mro_alg *const which \ |NN SV *const data -Aop |const struct mro_alg *|mro_get_from_name|NN SV *name +Aopd |const struct mro_alg *|mro_get_from_name|NN SV *name Aopd |void |mro_register |NN const struct mro_alg *mro -Aop |void |mro_set_mro |NN struct mro_meta *const meta \ +Aopd |void |mro_set_mro |NN struct mro_meta *const meta \ |NN SV *const name : Used in HvMROMETA(), which is public. Xpo |struct mro_meta* |mro_meta_init |NN HV* stash @@ -3495,9 +3663,9 @@ Apd |void |mro_method_changed_in |NN HV* stash pde |void |mro_package_moved |NULLOK HV * const stash|NULLOK HV * const oldstash|NN const GV * const gv|U32 flags : Only used in perl.c p |void |boot_core_mro -ApoT |void |sys_init |NN int* argc|NN char*** argv -ApoT |void |sys_init3 |NN int* argc|NN char*** argv|NN char*** env -ApoT |void |sys_term +CpoT |void |sys_init |NN int* argc|NN char*** argv +CpoT |void |sys_init3 |NN int* argc|NN char*** argv|NN char*** env +CpoT |void |sys_term Apxd |const char *|cop_fetch_label|NN COP *const cop \ |NULLOK STRLEN *len|NULLOK U32 *flags : Only used in op.c and the perl compiler @@ -3525,35 +3693,36 @@ Ei |STRLEN |sv_or_pv_pos_u2b|NN SV *sv|NN const char *pv|STRLEN pos \ |NULLOK STRLEN *lenp #endif -Ap |void |clear_defarray |NN AV* av|bool abandon +Cp |void |clear_defarray |NN AV* av|bool abandon Apx |void |leave_adjust_stacks|NN SV **from_sp|NN SV **to_sp \ |U8 gimme|int filter #ifndef PERL_NO_INLINE_FUNCTIONS -Aixp |U8 |gimme_V | -Aixp |PERL_CONTEXT * |cx_pushblock|U8 type|U8 gimme|NN SV** sp|I32 saveix -Aixp |void |cx_popblock|NN PERL_CONTEXT *cx -Aixp |void |cx_topblock|NN PERL_CONTEXT *cx -Aixp |void |cx_pushsub |NN PERL_CONTEXT *cx|NN CV *cv \ +Cixp |U8 |gimme_V | +Cixp |PERL_CONTEXT * |cx_pushblock|U8 type|U8 gimme|NN SV** sp|I32 saveix +Cixp |void |cx_popblock|NN PERL_CONTEXT *cx +Cixp |void |cx_topblock|NN PERL_CONTEXT *cx +Cixp |void |cx_pushsub |NN PERL_CONTEXT *cx|NN CV *cv \ |NULLOK OP *retop|bool hasargs -Aixp |void |cx_popsub_common|NN PERL_CONTEXT *cx -Aixp |void |cx_popsub_args |NN PERL_CONTEXT *cx -Aixp |void |cx_popsub |NN PERL_CONTEXT *cx -Aixp |void |cx_pushformat |NN PERL_CONTEXT *cx|NN CV *cv \ +Cixp |void |cx_popsub_common|NN PERL_CONTEXT *cx +Cixp |void |cx_popsub_args |NN PERL_CONTEXT *cx +Cixp |void |cx_popsub |NN PERL_CONTEXT *cx +Cixp |void |cx_pushformat |NN PERL_CONTEXT *cx|NN CV *cv \ |NULLOK OP *retop|NULLOK GV *gv -Aixp |void |cx_popformat |NN PERL_CONTEXT *cx -Aixp |void |cx_pusheval |NN PERL_CONTEXT *cx \ +Cixp |void |cx_popformat |NN PERL_CONTEXT *cx +Cixp |void |cx_pusheval |NN PERL_CONTEXT *cx \ |NULLOK OP *retop|NULLOK SV *namesv -Aixp |void |cx_popeval |NN PERL_CONTEXT *cx -Aixp |void |cx_pushloop_plain|NN PERL_CONTEXT *cx -Aixp |void |cx_pushloop_for |NN PERL_CONTEXT *cx \ +Cixp |void |cx_pushtry |NN PERL_CONTEXT *cx|NULLOK OP *retop +Cixp |void |cx_popeval |NN PERL_CONTEXT *cx +Cixp |void |cx_pushloop_plain|NN PERL_CONTEXT *cx +Cixp |void |cx_pushloop_for |NN PERL_CONTEXT *cx \ |NN void *itervarp|NULLOK SV *itersave -Aixp |void |cx_poploop |NN PERL_CONTEXT *cx -Aixp |void |cx_pushwhen |NN PERL_CONTEXT *cx -Aixp |void |cx_popwhen |NN PERL_CONTEXT *cx -Aixp |void |cx_pushgiven |NN PERL_CONTEXT *cx|NULLOK SV *orig_defsv -Aixp |void |cx_popgiven |NN PERL_CONTEXT *cx +Cixp |void |cx_poploop |NN PERL_CONTEXT *cx +Cixp |void |cx_pushwhen |NN PERL_CONTEXT *cx +Cixp |void |cx_popwhen |NN PERL_CONTEXT *cx +Cixp |void |cx_pushgiven |NN PERL_CONTEXT *cx|NULLOK SV *orig_defsv +Cixp |void |cx_popgiven |NN PERL_CONTEXT *cx #endif #ifdef USE_DTRACE @@ -3565,4 +3734,10 @@ XEop |void |dtrace_probe_phase|enum perl_phase phase XEop |STRLEN*|dup_warnings |NULLOK STRLEN* warnings +#ifndef USE_ITHREADS +Amd |void |CopFILEGV_set |NN COP * c|NN GV * gv +#endif + +Amd|const char *const|phase_name|enum perl_phase + : ex: set ts=8 sts=4 sw=4 noet: diff --git a/gnu/usr.bin/perl/embed.h b/gnu/usr.bin/perl/embed.h index 182b12aa937..c221a8e2d1c 100644 --- a/gnu/usr.bin/perl/embed.h +++ b/gnu/usr.bin/perl/embed.h @@ -20,7 +20,9 @@ /* By defining PERL_NO_SHORT_NAMES (not done by default) the short forms * (like warn instead of Perl_warn) for the API are not defined. - * Not defining the short forms is a good thing for cleaner embedding. */ + * Not defining the short forms is a good thing for cleaner embedding. + * BEWARE that a bunch of macros don't have long names, so either must be + * added or don't use them if you define this symbol */ #ifndef PERL_NO_SHORT_NAMES @@ -29,7 +31,12 @@ #define Gv_AMupdate(a,b) Perl_Gv_AMupdate(aTHX_ a,b) #define SvAMAGIC_off Perl_SvAMAGIC_off #define SvAMAGIC_on Perl_SvAMAGIC_on +#define SvTRUE(a) Perl_SvTRUE(aTHX_ a) +#define SvTRUE_NN(a) Perl_SvTRUE_NN(aTHX_ a) +#define SvTRUE_common(a,b) Perl_SvTRUE_common(aTHX_ a,b) +#define SvTRUE_nomg(a) Perl_SvTRUE_nomg(aTHX_ a) #define _force_out_malformed_utf8_message(a,b,c,d) Perl__force_out_malformed_utf8_message(aTHX_ a,b,c,d) +#define _is_in_locale_category(a,b) Perl__is_in_locale_category(aTHX_ a,b) #define _is_uni_FOO(a,b) Perl__is_uni_FOO(aTHX_ a,b) #define _is_uni_perl_idcont(a) Perl__is_uni_perl_idcont(aTHX_ a) #define _is_uni_perl_idstart(a) Perl__is_uni_perl_idstart(aTHX_ a) @@ -48,18 +55,21 @@ #define atfork_lock Perl_atfork_lock #define atfork_unlock Perl_atfork_unlock #define av_clear(a) Perl_av_clear(aTHX_ a) +#define av_count(a) Perl_av_count(aTHX_ a) #define av_delete(a,b,c) Perl_av_delete(aTHX_ a,b,c) #define av_exists(a,b) Perl_av_exists(aTHX_ a,b) #define av_extend(a,b) Perl_av_extend(aTHX_ a,b) #define av_fetch(a,b,c) Perl_av_fetch(aTHX_ a,b,c) +#define av_fetch_simple(a,b,c) Perl_av_fetch_simple(aTHX_ a,b,c) #define av_fill(a,b) Perl_av_fill(aTHX_ a,b) #define av_len(a) Perl_av_len(aTHX_ a) #define av_make(a,b) Perl_av_make(aTHX_ a,b) +#define av_new_alloc(a,b) Perl_av_new_alloc(aTHX_ a,b) #define av_pop(a) Perl_av_pop(aTHX_ a) #define av_push(a,b) Perl_av_push(aTHX_ a,b) #define av_shift(a) Perl_av_shift(aTHX_ a) #define av_store(a,b,c) Perl_av_store(aTHX_ a,b,c) -#define av_top_index(a) Perl_av_top_index(aTHX_ a) +#define av_store_simple(a,b,c) Perl_av_store_simple(aTHX_ a,b,c) #define av_undef(a) Perl_av_undef(aTHX_ a) #define av_unshift(a,b) Perl_av_unshift(aTHX_ a,b) #define block_end(a,b) Perl_block_end(aTHX_ a,b) @@ -82,14 +92,14 @@ #define ck_entersub_args_list(a) Perl_ck_entersub_args_list(aTHX_ a) #define ck_entersub_args_proto(a,b,c) Perl_ck_entersub_args_proto(aTHX_ a,b,c) #define ck_entersub_args_proto_or_list(a,b,c) Perl_ck_entersub_args_proto_or_list(aTHX_ a,b,c) -#ifndef PERL_IMPLICIT_CONTEXT +#ifndef MULTIPLICITY #define ck_warner Perl_ck_warner #define ck_warner_d Perl_ck_warner_d #endif #define clear_defarray(a,b) Perl_clear_defarray(aTHX_ a,b) #define cop_fetch_label(a,b,c) Perl_cop_fetch_label(aTHX_ a,b,c) #define cop_store_label(a,b,c,d) Perl_cop_store_label(aTHX_ a,b,c,d) -#ifndef PERL_IMPLICIT_CONTEXT +#ifndef MULTIPLICITY #define croak Perl_croak #endif #define croak_memory_wrap Perl_croak_memory_wrap @@ -114,7 +124,7 @@ #define cv_undef(a) Perl_cv_undef(aTHX_ a) #define cx_dump(a) Perl_cx_dump(aTHX_ a) #define cxinc() Perl_cxinc(aTHX) -#ifndef PERL_IMPLICIT_CONTEXT +#ifndef MULTIPLICITY #define deb Perl_deb #endif #define debop(a) Perl_debop(aTHX_ a) @@ -123,7 +133,7 @@ #define debstackptrs() Perl_debstackptrs(aTHX) #define delimcpy Perl_delimcpy #define despatch_signals() Perl_despatch_signals(aTHX) -#ifndef PERL_IMPLICIT_CONTEXT +#ifndef MULTIPLICITY #define die Perl_die #endif #define die_sv(a) Perl_die_sv(aTHX_ a) @@ -151,7 +161,7 @@ #define dump_all() Perl_dump_all(aTHX) #define dump_eval() Perl_dump_eval(aTHX) #define dump_form(a) Perl_dump_form(aTHX_ a) -#ifndef PERL_IMPLICIT_CONTEXT +#ifndef MULTIPLICITY #define dump_indent Perl_dump_indent #endif #define dump_packsubs(a) Perl_dump_packsubs(aTHX_ a) @@ -171,7 +181,7 @@ #define foldEQ_latin1 Perl_foldEQ_latin1 #define foldEQ_locale Perl_foldEQ_locale #define foldEQ_utf8_flags(a,b,c,d,e,f,g,h,i) Perl_foldEQ_utf8_flags(aTHX_ a,b,c,d,e,f,g,h,i) -#ifndef PERL_IMPLICIT_CONTEXT +#ifndef MULTIPLICITY #define form Perl_form #endif #define free_tmps() Perl_free_tmps(aTHX) @@ -188,6 +198,7 @@ #define getcwd_sv(a) Perl_getcwd_sv(aTHX_ a) #define gp_free(a) Perl_gp_free(aTHX_ a) #define gp_ref(a) Perl_gp_ref(aTHX_ a) +#define grok_atoUV Perl_grok_atoUV #define grok_bin_oct_hex(a,b,c,d,e,f,g) Perl_grok_bin_oct_hex(aTHX_ a,b,c,d,e,f,g) #define grok_infnan(a,b) Perl_grok_infnan(aTHX_ a,b) #define grok_number(a,b,c) Perl_grok_number(aTHX_ a,b,c) @@ -259,14 +270,16 @@ #define isC9_STRICT_UTF8_CHAR Perl_isC9_STRICT_UTF8_CHAR #define isSTRICT_UTF8_CHAR Perl_isSTRICT_UTF8_CHAR #define isUTF8_CHAR Perl_isUTF8_CHAR +#define isUTF8_CHAR_flags Perl_isUTF8_CHAR_flags #define is_c9strict_utf8_string_loclen Perl_is_c9strict_utf8_string_loclen #define is_lvalue_sub() Perl_is_lvalue_sub(aTHX) #define is_safe_syscall(a,b,c,d) Perl_is_safe_syscall(aTHX_ a,b,c,d) #define is_strict_utf8_string_loclen Perl_is_strict_utf8_string_loclen +#define is_utf8_FF_helper_ Perl_is_utf8_FF_helper_ #ifndef NO_MATHOMS #define is_utf8_char Perl_is_utf8_char #endif -#define is_utf8_char_helper Perl_is_utf8_char_helper +#define is_utf8_char_helper_ Perl_is_utf8_char_helper_ #define is_utf8_fixed_width_buf_loclen_flags Perl_is_utf8_fixed_width_buf_loclen_flags #define is_utf8_invariant_string_loc Perl_is_utf8_invariant_string_loc #define is_utf8_string_flags Perl_is_utf8_string_flags @@ -289,13 +302,14 @@ #define lex_stuff_pvn(a,b,c) Perl_lex_stuff_pvn(aTHX_ a,b,c) #define lex_stuff_sv(a,b) Perl_lex_stuff_sv(aTHX_ a,b) #define lex_unstuff(a) Perl_lex_unstuff(aTHX_ a) -#ifndef PERL_IMPLICIT_CONTEXT +#ifndef MULTIPLICITY #define load_module Perl_load_module #endif #define looks_like_number(a) Perl_looks_like_number(aTHX_ a) +#define lsbit_pos32 Perl_lsbit_pos32 #define magic_dump(a) Perl_magic_dump(aTHX_ a) #define markstack_grow() Perl_markstack_grow(aTHX) -#ifndef PERL_IMPLICIT_CONTEXT +#ifndef MULTIPLICITY #define mess Perl_mess #endif #define mess_sv(a,b) Perl_mess_sv(aTHX_ a,b) @@ -316,6 +330,7 @@ #define mortal_getenv Perl_mortal_getenv #define mro_get_linear_isa(a) Perl_mro_get_linear_isa(aTHX_ a) #define mro_method_changed_in(a) Perl_mro_method_changed_in(aTHX_ a) +#define msbit_pos32 Perl_msbit_pos32 #define my_atof(a) Perl_my_atof(aTHX_ a) #define my_atof3(a,b,c) Perl_my_atof3(aTHX_ a,b,c) #define my_dirfd Perl_my_dirfd @@ -339,6 +354,7 @@ #define newCONSTSUB(a,b,c) Perl_newCONSTSUB(aTHX_ a,b,c) #define newCONSTSUB_flags(a,b,c,d,e) Perl_newCONSTSUB_flags(aTHX_ a,b,c,d,e) #define newCVREF(a,b) Perl_newCVREF(aTHX_ a,b) +#define newDEFEROP(a,b) Perl_newDEFEROP(aTHX_ a,b) #define newDEFSVOP() Perl_newDEFSVOP(aTHX) #define newFORM(a,b,c) Perl_newFORM(aTHX_ a,b,c) #define newFOROP(a,b,c,d,e) Perl_newFOROP(aTHX_ a,b,c,d,e) @@ -372,12 +388,13 @@ #define newSVOP(a,b,c) Perl_newSVOP(aTHX_ a,b,c) #define newSVREF(a) Perl_newSVREF(aTHX_ a) #define newSV_type(a) Perl_newSV_type(aTHX_ a) +#define newSV_type_mortal(a) Perl_newSV_type_mortal(aTHX_ a) #define newSVhek(a) Perl_newSVhek(aTHX_ a) #define newSViv(a) Perl_newSViv(aTHX_ a) #define newSVnv(a) Perl_newSVnv(aTHX_ a) #define newSVpv(a,b) Perl_newSVpv(aTHX_ a,b) #define newSVpv_share(a,b) Perl_newSVpv_share(aTHX_ a,b) -#ifndef PERL_IMPLICIT_CONTEXT +#ifndef MULTIPLICITY #define newSVpvf Perl_newSVpvf #endif #define newSVpvn(a,b) Perl_newSVpvn(aTHX_ a,b) @@ -386,6 +403,7 @@ #define newSVrv(a,b) Perl_newSVrv(aTHX_ a,b) #define newSVsv_flags(a,b) Perl_newSVsv_flags(aTHX_ a,b) #define newSVuv(a) Perl_newSVuv(aTHX_ a) +#define newTRYCATCHOP(a,b,c,d) Perl_newTRYCATCHOP(aTHX_ a,b,c,d) #define newUNOP(a,b,c) Perl_newUNOP(aTHX_ a,b,c) #define newUNOP_AUX(a,b,c,d) Perl_newUNOP_AUX(aTHX_ a,b,c,d) #define newWHENOP(a,b) Perl_newWHENOP(aTHX_ a,b) @@ -410,12 +428,19 @@ #define op_refcnt_unlock() Perl_op_refcnt_unlock(aTHX) #define op_scope(a) Perl_op_scope(aTHX_ a) #define op_sibling_splice Perl_op_sibling_splice +#define op_wrap_finally(a,b) Perl_op_wrap_finally(aTHX_ a,b) +#ifndef NO_MATHOMS +#define pack_cat(a,b,c,d,e,f,g) Perl_pack_cat(aTHX_ a,b,c,d,e,f,g) +#endif #define packlist(a,b,c,d,e) Perl_packlist(aTHX_ a,b,c,d,e) #define pad_add_anon(a,b) Perl_pad_add_anon(aTHX_ a,b) #define pad_add_name_pv(a,b,c,d) Perl_pad_add_name_pv(aTHX_ a,b,c,d) #define pad_add_name_pvn(a,b,c,d,e) Perl_pad_add_name_pvn(aTHX_ a,b,c,d,e) #define pad_add_name_sv(a,b,c,d) Perl_pad_add_name_sv(aTHX_ a,b,c,d) #define pad_alloc(a,b) Perl_pad_alloc(aTHX_ a,b) +#ifndef NO_MATHOMS +#define pad_compname_type(a) Perl_pad_compname_type(aTHX_ a) +#endif #define pad_findmy_pv(a,b) Perl_pad_findmy_pv(aTHX_ a,b) #define pad_findmy_pvn(a,b,c) Perl_pad_findmy_pvn(aTHX_ a,b,c) #define pad_findmy_sv(a,b) Perl_pad_findmy_sv(aTHX_ a,b) @@ -441,7 +466,6 @@ #define pregfree(a) Perl_pregfree(aTHX_ a) #define pregfree2(a) Perl_pregfree2(aTHX_ a) #define prescan_version(a,b,c,d,e,f,g) Perl_prescan_version(aTHX_ a,b,c,d,e,f,g) -#define ptr_table_clear(a) Perl_ptr_table_clear(aTHX_ a) #define ptr_table_fetch(a,b) Perl_ptr_table_fetch(aTHX_ a,b) #define ptr_table_free(a) Perl_ptr_table_free(aTHX_ a) #define ptr_table_new() Perl_ptr_table_new(aTHX) @@ -545,6 +569,7 @@ #define set_context Perl_set_context #define setdefout(a) Perl_setdefout(aTHX_ a) #define share_hek(a,b,c) Perl_share_hek(aTHX_ a,b,c) +#define single_1bit_pos32 Perl_single_1bit_pos32 #define sortsv(a,b,c) Perl_sortsv(aTHX_ a,b,c) #define sortsv_flags(a,b,c,d) Perl_sortsv_flags(aTHX_ a,b,c,d) #define stack_grow(a,b,c) Perl_stack_grow(aTHX_ a,b,c) @@ -566,7 +591,7 @@ #define sv_catpv(a,b) Perl_sv_catpv(aTHX_ a,b) #define sv_catpv_flags(a,b,c) Perl_sv_catpv_flags(aTHX_ a,b,c) #define sv_catpv_mg(a,b) Perl_sv_catpv_mg(aTHX_ a,b) -#ifndef PERL_IMPLICIT_CONTEXT +#ifndef MULTIPLICITY #define sv_catpvf Perl_sv_catpvf #define sv_catpvf_mg Perl_sv_catpvf_mg #endif @@ -595,6 +620,7 @@ #define sv_get_backrefs Perl_sv_get_backrefs #define sv_gets(a,b,c) Perl_sv_gets(aTHX_ a,b,c) #define sv_grow(a,b) Perl_sv_grow(aTHX_ a,b) +#define sv_grow_fresh(a,b) Perl_sv_grow_fresh(aTHX_ a,b) #define sv_inc(a) Perl_sv_inc(aTHX_ a) #define sv_inc_nomg(a) Perl_sv_inc_nomg(aTHX_ a) #define sv_insert_flags(a,b,c,d,e,f) Perl_sv_insert_flags(aTHX_ a,b,c,d,e,f) @@ -606,6 +632,7 @@ #endif #define sv_len(a) Perl_sv_len(aTHX_ a) #define sv_len_utf8(a) Perl_sv_len_utf8(aTHX_ a) +#define sv_len_utf8_nomg(a) Perl_sv_len_utf8_nomg(aTHX_ a) #define sv_magic(a,b,c,d,e) Perl_sv_magic(aTHX_ a,b,c,d,e) #define sv_magicext(a,b,c,d,e,f) Perl_sv_magicext(aTHX_ a,b,c,d,e,f) #define sv_mortalcopy_flags(a,b) Perl_sv_mortalcopy_flags(aTHX_ a,b) @@ -618,6 +645,7 @@ #ifndef NO_MATHOMS #define sv_nounlocking(a) Perl_sv_nounlocking(aTHX_ a) #endif +#define sv_numeq_flags(a,b,c) Perl_sv_numeq_flags(aTHX_ a,b,c) #ifndef NO_MATHOMS #define sv_nv(a) Perl_sv_nv(aTHX_ a) #endif @@ -657,7 +685,7 @@ #define sv_setpv(a,b) Perl_sv_setpv(aTHX_ a,b) #define sv_setpv_bufsize(a,b,c) Perl_sv_setpv_bufsize(aTHX_ a,b,c) #define sv_setpv_mg(a,b) Perl_sv_setpv_mg(aTHX_ a,b) -#ifndef PERL_IMPLICIT_CONTEXT +#ifndef MULTIPLICITY #define sv_setpvf Perl_sv_setpvf #define sv_setpvf_mg Perl_sv_setpvf_mg #endif @@ -668,16 +696,22 @@ #define sv_setpviv_mg(a,b) Perl_sv_setpviv_mg(aTHX_ a,b) #endif #define sv_setpvn(a,b,c) Perl_sv_setpvn(aTHX_ a,b,c) +#define sv_setpvn_fresh(a,b,c) Perl_sv_setpvn_fresh(aTHX_ a,b,c) #define sv_setpvn_mg(a,b,c) Perl_sv_setpvn_mg(aTHX_ a,b,c) #define sv_setref_iv(a,b,c) Perl_sv_setref_iv(aTHX_ a,b,c) #define sv_setref_nv(a,b,c) Perl_sv_setref_nv(aTHX_ a,b,c) #define sv_setref_pv(a,b,c) Perl_sv_setref_pv(aTHX_ a,b,c) #define sv_setref_pvn(a,b,c,d) Perl_sv_setref_pvn(aTHX_ a,b,c,d) #define sv_setref_uv(a,b,c) Perl_sv_setref_uv(aTHX_ a,b,c) +#define sv_setrv_inc(a,b) Perl_sv_setrv_inc(aTHX_ a,b) +#define sv_setrv_inc_mg(a,b) Perl_sv_setrv_inc_mg(aTHX_ a,b) +#define sv_setrv_noinc(a,b) Perl_sv_setrv_noinc(aTHX_ a,b) +#define sv_setrv_noinc_mg(a,b) Perl_sv_setrv_noinc_mg(aTHX_ a,b) #define sv_setsv_flags(a,b,c) Perl_sv_setsv_flags(aTHX_ a,b,c) #define sv_setsv_mg(a,b) Perl_sv_setsv_mg(aTHX_ a,b) #define sv_setuv(a,b) Perl_sv_setuv(aTHX_ a,b) #define sv_setuv_mg(a,b) Perl_sv_setuv_mg(aTHX_ a,b) +#define sv_streq_flags(a,b,c) Perl_sv_streq_flags(aTHX_ a,b,c) #define sv_string_from_errnum(a,b) Perl_sv_string_from_errnum(aTHX_ a,b) #define sv_tainted(a) Perl_sv_tainted(aTHX_ a) #define sv_true(a) Perl_sv_true(aTHX_ a) @@ -758,11 +792,11 @@ #define vverify(a) Perl_vverify(aTHX_ a) #define vwarn(a,b) Perl_vwarn(aTHX_ a,b) #define vwarner(a,b,c) Perl_vwarner(aTHX_ a,b,c) -#ifndef PERL_IMPLICIT_CONTEXT +#ifndef MULTIPLICITY #define warn Perl_warn #endif #define warn_sv(a) Perl_warn_sv(aTHX_ a) -#ifndef PERL_IMPLICIT_CONTEXT +#ifndef MULTIPLICITY #define warner Perl_warner #endif #define whichsig_pv(a) Perl_whichsig_pv(aTHX_ a) @@ -809,6 +843,7 @@ #define cx_pushloop_for(a,b,c) Perl_cx_pushloop_for(aTHX_ a,b,c) #define cx_pushloop_plain(a) Perl_cx_pushloop_plain(aTHX_ a) #define cx_pushsub(a,b,c,d) Perl_cx_pushsub(aTHX_ a,b,c,d) +#define cx_pushtry(a,b) Perl_cx_pushtry(aTHX_ a,b) #define cx_pushwhen(a) Perl_cx_pushwhen(aTHX_ a) #define cx_topblock(a) Perl_cx_topblock(aTHX_ a) #define gimme_V() Perl_gimme_V(aTHX) @@ -824,16 +859,7 @@ #define sys_intern_dup(a,b) Perl_sys_intern_dup(aTHX_ a,b) # endif #endif -#if defined(MYMALLOC) -#define dump_mstats(a) Perl_dump_mstats(aTHX_ a) -#define get_mstats(a,b,c) Perl_get_mstats(aTHX_ a,b,c) -#endif -#if defined(PERL_GLOBAL_STRUCT) -#define GetVars() Perl_GetVars(aTHX) -#define free_global_struct(a) Perl_free_global_struct(aTHX_ a) -#define init_global_struct() Perl_init_global_struct(aTHX) -#endif -#if defined(PERL_IMPLICIT_CONTEXT) +#if defined(MULTIPLICITY) #define croak_nocontext Perl_croak_nocontext #define deb_nocontext Perl_deb_nocontext #define die_nocontext Perl_die_nocontext @@ -854,9 +880,21 @@ #define warn_nocontext Perl_warn_nocontext #define warner_nocontext Perl_warner_nocontext #endif +#if defined(MYMALLOC) +#define dump_mstats(a) Perl_dump_mstats(aTHX_ a) +#define get_mstats(a,b,c) Perl_get_mstats(aTHX_ a,b,c) +#endif +#if defined(PERL_IN_SV_C) +#define more_sv() Perl_more_sv(aTHX) +#endif #if defined(PERL_USE_3ARG_SIGHANDLER) #define csighandler Perl_csighandler #endif +#if defined(U64TYPE) /* HAS_QUAD undefined outside of core */ +#define lsbit_pos64 Perl_lsbit_pos64 +#define msbit_pos64 Perl_msbit_pos64 +#define single_1bit_pos64 Perl_single_1bit_pos64 +#endif #if defined(UNLINK_ALL_VERSIONS) #define unlnk(a) Perl_unlnk(aTHX_ a) #endif @@ -867,6 +905,7 @@ #if defined(USE_ITHREADS) #define alloccopstash(a) Perl_alloccopstash(aTHX_ a) #define any_dup(a,b) Perl_any_dup(aTHX_ a,b) +#define cop_file_avn(a) Perl_cop_file_avn(aTHX_ a) #define cx_dup(a,b,c,d) Perl_cx_dup(aTHX_ a,b,c,d) #define dirp_dup(a,b) Perl_dirp_dup(aTHX_ a,b) #define fp_dup(a,b,c) Perl_fp_dup(aTHX_ a,b,c) @@ -914,7 +953,7 @@ #define PerlIO_unread(a,b,c) Perl_PerlIO_unread(aTHX_ a,b,c) #define PerlIO_write(a,b,c) Perl_PerlIO_write(aTHX_ a,b,c) #endif -#if defined(WIN32) || defined(__SYMBIAN32__) || defined(VMS) +#if defined(WIN32) || defined(VMS) #define do_aspawn(a,b,c) Perl_do_aspawn(aTHX_ a,b,c) #define do_spawn(a) Perl_do_spawn(aTHX_ a) #define do_spawn_nowait(a) Perl_do_spawn_nowait(aTHX_ a) @@ -927,12 +966,12 @@ #define cntrl_to_mnemonic Perl_cntrl_to_mnemonic #define current_re_engine() Perl_current_re_engine(aTHX) #define cv_ckproto_len_flags(a,b,c,d,e) Perl_cv_ckproto_len_flags(aTHX_ a,b,c,d,e) +#define delimcpy_no_escape Perl_delimcpy_no_escape #define do_uniprop_match Perl_do_uniprop_match #define get_and_check_backslash_N_name(a,b,c,d) Perl_get_and_check_backslash_N_name(aTHX_ a,b,c,d) #define get_deprecated_property_msg Perl_get_deprecated_property_msg #define get_prop_definition(a) Perl_get_prop_definition(aTHX_ a) #define get_prop_values Perl_get_prop_values -#define grok_atoUV Perl_grok_atoUV #define load_charnames(a,b,c,d) Perl_load_charnames(aTHX_ a,b,c,d) #define mg_find_mglob(a) Perl_mg_find_mglob(aTHX_ a) #define multiconcat_stringify(a) Perl_multiconcat_stringify(aTHX_ a) @@ -952,8 +991,8 @@ #define skipspace_flags(a,b) Perl_skipspace_flags(aTHX_ a,b) #define sv_magicext_mglob(a) Perl_sv_magicext_mglob(aTHX_ a) #define sv_only_taint_gmagic Perl_sv_only_taint_gmagic -#define utf16_to_utf8(a,b,c,d) Perl_utf16_to_utf8(aTHX_ a,b,c,d) -#define utf16_to_utf8_reversed(a,b,c,d) Perl_utf16_to_utf8_reversed(aTHX_ a,b,c,d) +#define utf16_to_utf8_base(a,b,c,d,e,f) Perl_utf16_to_utf8_base(aTHX_ a,b,c,d,e,f) +#define utf8_to_utf16_base(a,b,c,d,e,f) Perl_utf8_to_utf16_base(aTHX_ a,b,c,d,e,f) #define validate_proto(a,b,c,d) Perl_validate_proto(aTHX_ a,b,c,d) #define vivify_defelem(a) Perl_vivify_defelem(aTHX_ a) #define yylex() Perl_yylex(aTHX) @@ -992,17 +1031,18 @@ #define put_charclass_bitmap_innards_invlist(a,b) S_put_charclass_bitmap_innards_invlist(aTHX_ a,b) #define put_code_point(a,b) S_put_code_point(aTHX_ a,b) #define put_range(a,b,c,d) S_put_range(aTHX_ a,b,c,d) -#ifndef PERL_IMPLICIT_CONTEXT +#ifndef MULTIPLICITY #define re_indentf Perl_re_indentf #endif #define regdump_extflags(a,b) S_regdump_extflags(aTHX_ a,b) #define regdump_intflags(a,b) S_regdump_intflags(aTHX_ a,b) +#define regnode_guts_debug(a,b,c) S_regnode_guts_debug(aTHX_ a,b,c) #define regtail_study(a,b,c,d) S_regtail_study(aTHX_ a,b,c,d) # endif # if defined(PERL_IN_REGEXEC_C) #define debug_start_match(a,b,c,d,e) S_debug_start_match(aTHX_ a,b,c,d,e) #define dump_exec_pos(a,b,c,d,e,f,g) S_dump_exec_pos(aTHX_ a,b,c,d,e,f,g) -#ifndef PERL_IMPLICIT_CONTEXT +#ifndef MULTIPLICITY #define re_exec_indentf Perl_re_exec_indentf #endif # endif @@ -1039,11 +1079,12 @@ #define find_first_differing_byte_pos S_find_first_differing_byte_pos #define get_ANYOFM_contents(a) S_get_ANYOFM_contents(aTHX_ a) #define get_ANYOF_cp_list_for_ssc(a,b) S_get_ANYOF_cp_list_for_ssc(aTHX_ a,b) +#define get_quantifier_value(a,b,c) S_get_quantifier_value(aTHX_ a,b,c) #define grok_bslash_N(a,b,c,d,e,f,g) S_grok_bslash_N(aTHX_ a,b,c,d,e,f,g) #define handle_named_backref(a,b,c,d) S_handle_named_backref(aTHX_ a,b,c,d) #define handle_names_wildcard(a,b,c,d) S_handle_names_wildcard(aTHX_ a,b,c,d) #define handle_possible_posix(a,b,c,d,e) S_handle_possible_posix(aTHX_ a,b,c,d,e) -#define handle_regex_sets(a,b,c,d,e) S_handle_regex_sets(aTHX_ a,b,c,d,e) +#define handle_regex_sets(a,b,c,d) S_handle_regex_sets(aTHX_ a,b,c,d) #define handle_user_defined_property(a,b,c,d,e,f,g,h,i,j) S_handle_user_defined_property(aTHX_ a,b,c,d,e,f,g,h,i,j) #define invlist_contents(a,b) S_invlist_contents(aTHX_ a,b) #define invlist_is_iterating S_invlist_is_iterating @@ -1052,8 +1093,8 @@ #define join_exact(a,b,c,d,e,f,g) S_join_exact(aTHX_ a,b,c,d,e,f,g) #define make_exactf_invlist(a,b) S_make_exactf_invlist(aTHX_ a,b) #define make_trie(a,b,c,d,e,f,g,h) S_make_trie(aTHX_ a,b,c,d,e,f,g,h) -#define new_regcurly S_new_regcurly #define nextchar(a) S_nextchar(aTHX_ a) +#define optimize_regclass(a,b,c,d,e,f,g,h,i,j) S_optimize_regclass(aTHX_ a,b,c,d,e,f,g,h,i,j) #define output_posix_warnings(a,b) S_output_posix_warnings(aTHX_ a,b) #define parse_lparen_question_flags(a) S_parse_lparen_question_flags(aTHX_ a) #define parse_uniprop_string(a,b,c,d,e,f,g,h,i,j) S_parse_uniprop_string(aTHX_ a,b,c,d,e,f,g,h,i,j) @@ -1061,6 +1102,8 @@ #define rck_elide_nothing(a) S_rck_elide_nothing(aTHX_ a) #define reg(a,b,c,d) S_reg(aTHX_ a,b,c,d) #define reg2Lanode(a,b,c,d) S_reg2Lanode(aTHX_ a,b,c,d) +#define reg_la_NOTHING(a,b,c) S_reg_la_NOTHING(aTHX_ a,b,c) +#define reg_la_OPFAIL(a,b,c) S_reg_la_OPFAIL(aTHX_ a,b,c) #define reg_node(a,b) S_reg_node(aTHX_ a,b) #define reg_scan_name(a,b) S_reg_scan_name(aTHX_ a,b) #define reg_skipcomment S_reg_skipcomment @@ -1070,7 +1113,7 @@ #define regclass(a,b,c,d,e,f,g,h,i) S_regclass(aTHX_ a,b,c,d,e,f,g,h,i) #define regex_set_precedence S_regex_set_precedence #define reginsert(a,b,c,d) S_reginsert(aTHX_ a,b,c,d) -#define regnode_guts(a,b,c,d) S_regnode_guts(aTHX_ a,b,c,d) +#define regnode_guts(a,b) S_regnode_guts(aTHX_ a,b) #define regpiece(a,b,c) S_regpiece(aTHX_ a,b,c) #define regpnode(a,b,c) S_regpnode(aTHX_ a,b,c) #define regtail(a,b,c,d) S_regtail(aTHX_ a,b,c,d) @@ -1132,7 +1175,7 @@ #define get_regex_charset_name S_get_regex_charset_name # endif # if defined(PERL_IN_REGCOMP_C) || defined(PERL_IN_REGEXEC_C) -#ifndef PERL_IMPLICIT_CONTEXT +#ifndef MULTIPLICITY #define re_printf Perl_re_printf #endif #define regprop(a,b,c,d,e) Perl_regprop(aTHX_ a,b,c,d,e) @@ -1155,7 +1198,7 @@ #define invlist_clone(a,b) Perl_invlist_clone(aTHX_ a,b) # endif # if defined(PERL_IN_REGCOMP_C) || defined(PERL_IN_TOKE_C) -#define regcurly S_regcurly +#define regcurly Perl_regcurly # endif # if defined(PERL_IN_REGEXEC_C) #define advance_one_LB(a,b,c) S_advance_one_LB(aTHX_ a,b,c) @@ -1170,6 +1213,7 @@ #define find_span_end S_find_span_end #define find_span_end_mask S_find_span_end_mask #define foldEQ_latin1_s2_folded S_foldEQ_latin1_s2_folded +#define isFOO_lc(a,b) S_isFOO_lc(aTHX_ a,b) #define isFOO_utf8_lc(a,b,c) S_isFOO_utf8_lc(aTHX_ a,b,c) #define isGCB(a,b,c,d,e) S_isGCB(aTHX_ a,b,c,d,e) #define isLB(a,b,c,d,e,f) S_isLB(aTHX_ a,b,c,d,e,f) @@ -1189,9 +1233,6 @@ #define to_byte_substr(a) S_to_byte_substr(aTHX_ a) #define to_utf8_substr(a) S_to_utf8_substr(aTHX_ a) # endif -# if defined(PERL_IN_REGEXEC_C) || defined(PERL_IN_UTF8_C) -#define isFOO_lc(a,b) Perl_isFOO_lc(aTHX_ a,b) -# endif #endif #ifdef PERL_CORE #define PerlLIO_dup2_cloexec(a,b) Perl_PerlLIO_dup2_cloexec(aTHX_ a,b) @@ -1200,7 +1241,6 @@ #define PerlLIO_open_cloexec(a,b) Perl_PerlLIO_open_cloexec(aTHX_ a,b) #define Slab_Alloc(a) Perl_Slab_Alloc(aTHX_ a) #define Slab_Free(a) Perl_Slab_Free(aTHX_ a) -#define _is_in_locale_category(a,b) Perl__is_in_locale_category(aTHX_ a,b) #define _warn_problematic_locale Perl__warn_problematic_locale #define abort_execution(a,b) Perl_abort_execution(aTHX_ a,b) #define alloc_LOGOP(a,b,c) Perl_alloc_LOGOP(aTHX_ a,b,c) @@ -1212,6 +1252,7 @@ #define bind_match(a,b,c) Perl_bind_match(aTHX_ a,b,c) #define boot_core_PerlIO() Perl_boot_core_PerlIO(aTHX) #define boot_core_UNIVERSAL() Perl_boot_core_UNIVERSAL(aTHX) +#define boot_core_builtin() Perl_boot_core_builtin(aTHX) #define boot_core_mro() Perl_boot_core_mro(aTHX) #define cando(a,b,c) Perl_cando(aTHX_ a,b,c) #define check_utf8_print(a,b) Perl_check_utf8_print(aTHX_ a,b) @@ -1262,6 +1303,7 @@ #define ck_svconst(a) Perl_ck_svconst(aTHX_ a) #define ck_tell(a) Perl_ck_tell(aTHX_ a) #define ck_trunc(a) Perl_ck_trunc(aTHX_ a) +#define ck_trycatch(a) Perl_ck_trycatch(aTHX_ a) #define closest_cop(a,b,c,d) Perl_closest_cop(aTHX_ a,b,c,d) #define cmpchain_extend(a,b,c) Perl_cmpchain_extend(aTHX_ a,b,c) #define cmpchain_finish(a) Perl_cmpchain_finish(aTHX_ a) @@ -1280,9 +1322,9 @@ #define cvgv_set(a,b) Perl_cvgv_set(aTHX_ a,b) #define cvstash_set(a,b) Perl_cvstash_set(aTHX_ a,b) #define deb_stack_all() Perl_deb_stack_all(aTHX) +#define debug_hash_seed(a) Perl_debug_hash_seed(aTHX_ a) #define defelem_target(a,b) Perl_defelem_target(aTHX_ a,b) #define delete_eval_scope() Perl_delete_eval_scope(aTHX) -#define delimcpy_no_escape Perl_delimcpy_no_escape #define die_unwind(a) Perl_die_unwind(aTHX_ a) #define do_aexec5(a,b,c,d,e) Perl_do_aexec5(aTHX_ a,b,c,d,e) #define do_dump_pad(a,b,c,d) Perl_do_dump_pad(aTHX_ a,b,c,d) @@ -1341,7 +1383,9 @@ #define magic_copycallchecker(a,b,c,d,e) Perl_magic_copycallchecker(aTHX_ a,b,c,d,e) #define magic_existspack(a,b) Perl_magic_existspack(aTHX_ a,b) #define magic_freearylen_p(a,b) Perl_magic_freearylen_p(aTHX_ a,b) +#define magic_freemglob(a,b) Perl_magic_freemglob(aTHX_ a,b) #define magic_freeovrld(a,b) Perl_magic_freeovrld(aTHX_ a,b) +#define magic_freeutf8(a,b) Perl_magic_freeutf8(aTHX_ a,b) #define magic_get(a,b) Perl_magic_get(aTHX_ a,b) #define magic_getarylen(a,b) Perl_magic_getarylen(aTHX_ a,b) #define magic_getdebugvar(a,b) Perl_magic_getdebugvar(aTHX_ a,b) @@ -1376,6 +1420,7 @@ #define magic_setpos(a,b) Perl_magic_setpos(aTHX_ a,b) #define magic_setregexp(a,b) Perl_magic_setregexp(aTHX_ a,b) #define magic_setsig(a,b) Perl_magic_setsig(aTHX_ a,b) +#define magic_setsigall(a,b) Perl_magic_setsigall(aTHX_ a,b) #define magic_setsubstr(a,b) Perl_magic_setsubstr(aTHX_ a,b) #define magic_settaint(a,b) Perl_magic_settaint(aTHX_ a,b) #define magic_setutf8(a,b) Perl_magic_setutf8(aTHX_ a,b) @@ -1399,6 +1444,7 @@ #define newXS_deffile(a,b) Perl_newXS_deffile(aTHX_ a,b) #define newXS_len_flags(a,b,c,d,e,f,g) Perl_newXS_len_flags(aTHX_ a,b,c,d,e,f,g) #define nextargv(a,b) Perl_nextargv(aTHX_ a,b) +#define no_bareword_filehandle(a) Perl_no_bareword_filehandle(aTHX_ a) #define noperl_die Perl_noperl_die #define notify_parser_that_changed_to_utf8() Perl_notify_parser_that_changed_to_utf8(aTHX) #define oopsAV(a) Perl_oopsAV(aTHX_ a) @@ -1455,10 +1501,9 @@ #define sv_clean_objs() Perl_sv_clean_objs(aTHX) #define sv_del_backref(a,b) Perl_sv_del_backref(aTHX_ a,b) #define sv_free_arenas() Perl_sv_free_arenas(aTHX) -#define sv_len_utf8_nomg(a) Perl_sv_len_utf8_nomg(aTHX_ a) #define sv_resetpvn(a,b,c) Perl_sv_resetpvn(aTHX_ a,b,c) #define sv_sethek(a,b) Perl_sv_sethek(aTHX_ a,b) -#ifndef PERL_IMPLICIT_CONTEXT +#ifndef MULTIPLICITY #define tied_method Perl_tied_method #endif #define tmps_grow_p(a) Perl_tmps_grow_p(aTHX_ a) @@ -1535,9 +1580,9 @@ #define utf16_textfilter(a,b,c) S_utf16_textfilter(aTHX_ a,b,c) # endif # endif -# if !defined(UV_IS_QUAD) -# if defined(PERL_IN_UTF8_C) -#define is_utf8_cp_above_31_bits S_is_utf8_cp_above_31_bits +# if !defined(PURIFY) +# if defined(PERL_IN_HV_C) +#define new_he() S_new_he(aTHX) # endif # endif # if !defined(WIN32) @@ -1664,14 +1709,11 @@ #define clear_placeholders(a,b) S_clear_placeholders(aTHX_ a,b) #define hsplit(a,b,c) S_hsplit(aTHX_ a,b,c) #define hv_auxinit(a) S_hv_auxinit(aTHX_ a) -#define hv_auxinit_internal S_hv_auxinit_internal #define hv_delete_common(a,b,c,d,e,f,g) S_hv_delete_common(aTHX_ a,b,c,d,e,f,g) -#define hv_free_ent_ret(a,b) S_hv_free_ent_ret(aTHX_ a,b) +#define hv_free_ent_ret(a) S_hv_free_ent_ret(aTHX_ a) #define hv_free_entries(a) S_hv_free_entries(aTHX_ a) #define hv_magic_check S_hv_magic_check #define hv_notallowed(a,b,c,d) S_hv_notallowed(aTHX_ a,b,c,d) -#define new_he() S_new_he(aTHX) -#define ptr_hash S_ptr_hash #define refcounted_he_value(a) S_refcounted_he_value(aTHX_ a) #define save_hek_flags S_save_hek_flags #define share_hek_flags(a,b,c,d) S_share_hek_flags(aTHX_ a,b,c,d) @@ -1760,12 +1802,12 @@ #define scalar_mod_type S_scalar_mod_type #define scalarboolean(a) S_scalarboolean(aTHX_ a) #define scalarkids(a) S_scalarkids(aTHX_ a) -#define scalarseq(a) S_scalarseq(aTHX_ a) #define search_const(a) S_search_const(aTHX_ a) #define simplify_sort(a) S_simplify_sort(aTHX_ a) #define too_few_arguments_pv(a,b,c) S_too_few_arguments_pv(aTHX_ a,b,c) #define too_many_arguments_pv(a,b,c) S_too_many_arguments_pv(aTHX_ a,b,c) #define traverse_op_tree(a,b) S_traverse_op_tree(aTHX_ a,b) +#define voidnonfinal(a) S_voidnonfinal(aTHX_ a) # if defined(USE_ITHREADS) #define op_relocate_sv(a,b) S_op_relocate_sv(aTHX_ a,b) # endif @@ -1894,7 +1936,6 @@ #define find_uninit_var(a,b,c,d) S_find_uninit_var(aTHX_ a,b,c,d) #define glob_2number(a) S_glob_2number(aTHX_ a) #define glob_assign_glob(a,b,c) S_glob_assign_glob(aTHX_ a,b,c) -#define more_sv() S_more_sv(aTHX) #define not_a_number(a) S_not_a_number(aTHX_ a) #define not_incrementable(a) S_not_incrementable(aTHX_ a) #define ptr_table_find S_ptr_table_find @@ -1965,10 +2006,11 @@ #define _to_utf8_case(a,b,c,d,e,f,g,h,i) S__to_utf8_case(aTHX_ a,b,c,d,e,f,g,h,i) #define check_locale_boundary_crossing(a,b,c,d) S_check_locale_boundary_crossing(aTHX_ a,b,c,d) #define does_utf8_overflow S_does_utf8_overflow -#define isFF_OVERLONG S_isFF_OVERLONG +#define isFF_overlong S_isFF_overlong #define is_utf8_common(a,b,c) S_is_utf8_common(aTHX_ a,b,c) -#define is_utf8_overlong_given_start_byte_ok S_is_utf8_overlong_given_start_byte_ok +#define is_utf8_overlong S_is_utf8_overlong #define new_msg_hv(a,b,c) S_new_msg_hv(aTHX_ a,b,c) +#define to_case_cp_list(a,b,c,d,e,f,g,h) S_to_case_cp_list(aTHX_ a,b,c,d,e,f,g,h) #define to_lower_latin1 S_to_lower_latin1 #define turkic_fc(a,b,c,d) S_turkic_fc(aTHX_ a,b,c,d) #define turkic_lc(a,b,c,d) S_turkic_lc(aTHX_ a,b,c,d) @@ -2008,6 +2050,7 @@ #define padnamelist_dup(a,b) Perl_padnamelist_dup(aTHX_ a,b) # endif # if defined(USE_LOCALE_COLLATE) +#define magic_freecollxfrm(a,b) Perl_magic_freecollxfrm(aTHX_ a,b) #define magic_setcollxfrm(a,b) Perl_magic_setcollxfrm(aTHX_ a,b) #ifndef NO_MATHOMS #define mem_collxfrm(a,b,c) Perl_mem_collxfrm(aTHX_ a,b,c) @@ -2065,7 +2108,7 @@ an extra argument but grab the context pointer using the macro dTHX. */ -#if defined(PERL_IMPLICIT_CONTEXT) && !defined(PERL_NO_SHORT_NAMES) +#if defined(MULTIPLICITY) && !defined(PERL_NO_SHORT_NAMES) # define croak Perl_croak_nocontext # define deb Perl_deb_nocontext # define die Perl_die_nocontext @@ -2083,7 +2126,7 @@ #endif /* !defined(PERL_CORE) && !defined(PERL_NOCOMPAT) */ -#if !defined(PERL_IMPLICIT_CONTEXT) +#if !defined(MULTIPLICITY) /* undefined symbols, point them back at the usual ones */ # define Perl_croak_nocontext Perl_croak # define Perl_deb_nocontext Perl_deb diff --git a/gnu/usr.bin/perl/embedvar.h b/gnu/usr.bin/perl/embedvar.h index 04a739e2681..11989eb894a 100644 --- a/gnu/usr.bin/perl/embedvar.h +++ b/gnu/usr.bin/perl/embedvar.h @@ -16,30 +16,8 @@ * Edit those files and run 'make regen_headers' to effect changes. */ -/* (Doing namespace management portably in C is really gross.) */ - -/* - The following combinations of MULTIPLICITY and PERL_IMPLICIT_CONTEXT - are supported: - 1) none - 2) MULTIPLICITY # supported for compatibility - 3) MULTIPLICITY && PERL_IMPLICIT_CONTEXT - - All other combinations of these flags are errors. - - only #3 is supported directly, while #2 is a special - case of #3 (supported by redefining vTHX appropriately). -*/ - #if defined(MULTIPLICITY) -/* cases 2 and 3 above */ - -# if defined(PERL_IMPLICIT_CONTEXT) -# define vTHX aTHX -# else -# define vTHX PERL_GET_INTERP -# endif - +# define vTHX aTHX #define PL_AboveLatin1 (vTHX->IAboveLatin1) #define PL_Assigned_invlist (vTHX->IAssigned_invlist) #define PL_CCC_non0_non230 (vTHX->ICCC_non0_non230) @@ -107,7 +85,6 @@ #define PL_comppad_name_floor (vTHX->Icomppad_name_floor) #define PL_constpadix (vTHX->Iconstpadix) #define PL_cop_seqmax (vTHX->Icop_seqmax) -#define PL_cryptseen (vTHX->Icryptseen) #define PL_curcop (vTHX->Icurcop) #define PL_curcopdb (vTHX->Icurcopdb) #define PL_curlocales (vTHX->Icurlocales) @@ -205,6 +182,7 @@ #define PL_maxsysfd (vTHX->Imaxsysfd) #define PL_mbrlen_ps (vTHX->Imbrlen_ps) #define PL_mbrtowc_ps (vTHX->Imbrtowc_ps) +#define PL_mem_log (vTHX->Imem_log) #define PL_memory_debug_header (vTHX->Imemory_debug_header) #define PL_mess_sv (vTHX->Imess_sv) #define PL_min_intro_pending (vTHX->Imin_intro_pending) @@ -255,6 +233,7 @@ #define PL_phase (vTHX->Iphase) #define PL_pidstatus (vTHX->Ipidstatus) #define PL_preambleav (vTHX->Ipreambleav) +#define PL_prevailing_version (vTHX->Iprevailing_version) #define PL_profiledata (vTHX->Iprofiledata) #define PL_psig_name (vTHX->Ipsig_name) #define PL_psig_pend (vTHX->Ipsig_pend) @@ -376,133 +355,4 @@ #endif /* MULTIPLICITY */ -#if defined(PERL_GLOBAL_STRUCT) - -#define PL_C_locale_obj (my_vars->GC_locale_obj) -#define PL_GC_locale_obj (my_vars->GC_locale_obj) -#define PL_appctx (my_vars->Gappctx) -#define PL_Gappctx (my_vars->Gappctx) -#define PL_check (my_vars->Gcheck) -#define PL_Gcheck (my_vars->Gcheck) -#define PL_check_mutex (my_vars->Gcheck_mutex) -#define PL_Gcheck_mutex (my_vars->Gcheck_mutex) -#define PL_csighandler1p (my_vars->Gcsighandler1p) -#define PL_Gcsighandler1p (my_vars->Gcsighandler1p) -#define PL_csighandler3p (my_vars->Gcsighandler3p) -#define PL_Gcsighandler3p (my_vars->Gcsighandler3p) -#define PL_csighandlerp (my_vars->Gcsighandlerp) -#define PL_Gcsighandlerp (my_vars->Gcsighandlerp) -#define PL_curinterp (my_vars->Gcurinterp) -#define PL_Gcurinterp (my_vars->Gcurinterp) -#define PL_do_undump (my_vars->Gdo_undump) -#define PL_Gdo_undump (my_vars->Gdo_undump) -#define PL_dollarzero_mutex (my_vars->Gdollarzero_mutex) -#define PL_Gdollarzero_mutex (my_vars->Gdollarzero_mutex) -#define PL_env_mutex (my_vars->Genv_mutex) -#define PL_Genv_mutex (my_vars->Genv_mutex) -#define PL_fold_locale (my_vars->Gfold_locale) -#define PL_Gfold_locale (my_vars->Gfold_locale) -#define PL_hash_chars (my_vars->Ghash_chars) -#define PL_Ghash_chars (my_vars->Ghash_chars) -#define PL_hash_seed_set (my_vars->Ghash_seed_set) -#define PL_Ghash_seed_set (my_vars->Ghash_seed_set) -#define PL_hash_seed_w (my_vars->Ghash_seed_w) -#define PL_Ghash_seed_w (my_vars->Ghash_seed_w) -#define PL_hash_state_w (my_vars->Ghash_state_w) -#define PL_Ghash_state_w (my_vars->Ghash_state_w) -#define PL_hints_mutex (my_vars->Ghints_mutex) -#define PL_Ghints_mutex (my_vars->Ghints_mutex) -#define PL_keyword_plugin (my_vars->Gkeyword_plugin) -#define PL_Gkeyword_plugin (my_vars->Gkeyword_plugin) -#define PL_keyword_plugin_mutex (my_vars->Gkeyword_plugin_mutex) -#define PL_Gkeyword_plugin_mutex (my_vars->Gkeyword_plugin_mutex) -#define PL_lc_numeric_mutex (my_vars->Glc_numeric_mutex) -#define PL_Glc_numeric_mutex (my_vars->Glc_numeric_mutex) -#define PL_locale_mutex (my_vars->Glocale_mutex) -#define PL_Glocale_mutex (my_vars->Glocale_mutex) -#define PL_malloc_mutex (my_vars->Gmalloc_mutex) -#define PL_Gmalloc_mutex (my_vars->Gmalloc_mutex) -#define PL_mmap_page_size (my_vars->Gmmap_page_size) -#define PL_Gmmap_page_size (my_vars->Gmmap_page_size) -#define PL_my_ctx_mutex (my_vars->Gmy_ctx_mutex) -#define PL_Gmy_ctx_mutex (my_vars->Gmy_ctx_mutex) -#define PL_my_cxt_index (my_vars->Gmy_cxt_index) -#define PL_Gmy_cxt_index (my_vars->Gmy_cxt_index) -#define PL_my_cxt_keys (my_vars->Gmy_cxt_keys) -#define PL_Gmy_cxt_keys (my_vars->Gmy_cxt_keys) -#define PL_my_cxt_keys_size (my_vars->Gmy_cxt_keys_size) -#define PL_Gmy_cxt_keys_size (my_vars->Gmy_cxt_keys_size) -#define PL_op_mutex (my_vars->Gop_mutex) -#define PL_Gop_mutex (my_vars->Gop_mutex) -#define PL_op_seq (my_vars->Gop_seq) -#define PL_Gop_seq (my_vars->Gop_seq) -#define PL_op_sequence (my_vars->Gop_sequence) -#define PL_Gop_sequence (my_vars->Gop_sequence) -#define PL_perlio_debug_fd (my_vars->Gperlio_debug_fd) -#define PL_Gperlio_debug_fd (my_vars->Gperlio_debug_fd) -#define PL_perlio_fd_refcnt (my_vars->Gperlio_fd_refcnt) -#define PL_Gperlio_fd_refcnt (my_vars->Gperlio_fd_refcnt) -#define PL_perlio_fd_refcnt_size (my_vars->Gperlio_fd_refcnt_size) -#define PL_Gperlio_fd_refcnt_size (my_vars->Gperlio_fd_refcnt_size) -#define PL_perlio_mutex (my_vars->Gperlio_mutex) -#define PL_Gperlio_mutex (my_vars->Gperlio_mutex) -#ifdef __VMS -#define PL_perllib_sep (my_vars->Gperllib_sep) -#define PL_Gperllib_sep (my_vars->Gperllib_sep) -#endif -#define PL_ppaddr (my_vars->Gppaddr) -#define PL_Gppaddr (my_vars->Gppaddr) -#ifdef OS2 -#define PL_sh_path (my_vars->Gsh_path) -#define PL_Gsh_path (my_vars->Gsh_path) -#endif -#define PL_sig_defaulting (my_vars->Gsig_defaulting) -#define PL_Gsig_defaulting (my_vars->Gsig_defaulting) -#define PL_sig_handlers_initted (my_vars->Gsig_handlers_initted) -#define PL_Gsig_handlers_initted (my_vars->Gsig_handlers_initted) -#define PL_sig_ignoring (my_vars->Gsig_ignoring) -#define PL_Gsig_ignoring (my_vars->Gsig_ignoring) -#define PL_sig_trapped (my_vars->Gsig_trapped) -#define PL_Gsig_trapped (my_vars->Gsig_trapped) -#define PL_sigfpe_saved (my_vars->Gsigfpe_saved) -#define PL_Gsigfpe_saved (my_vars->Gsigfpe_saved) -#define PL_strategy_accept (my_vars->Gstrategy_accept) -#define PL_Gstrategy_accept (my_vars->Gstrategy_accept) -#define PL_strategy_dup (my_vars->Gstrategy_dup) -#define PL_Gstrategy_dup (my_vars->Gstrategy_dup) -#define PL_strategy_dup2 (my_vars->Gstrategy_dup2) -#define PL_Gstrategy_dup2 (my_vars->Gstrategy_dup2) -#define PL_strategy_mkstemp (my_vars->Gstrategy_mkstemp) -#define PL_Gstrategy_mkstemp (my_vars->Gstrategy_mkstemp) -#define PL_strategy_open (my_vars->Gstrategy_open) -#define PL_Gstrategy_open (my_vars->Gstrategy_open) -#define PL_strategy_open3 (my_vars->Gstrategy_open3) -#define PL_Gstrategy_open3 (my_vars->Gstrategy_open3) -#define PL_strategy_pipe (my_vars->Gstrategy_pipe) -#define PL_Gstrategy_pipe (my_vars->Gstrategy_pipe) -#define PL_strategy_socket (my_vars->Gstrategy_socket) -#define PL_Gstrategy_socket (my_vars->Gstrategy_socket) -#define PL_strategy_socketpair (my_vars->Gstrategy_socketpair) -#define PL_Gstrategy_socketpair (my_vars->Gstrategy_socketpair) -#define PL_sv_placeholder (my_vars->Gsv_placeholder) -#define PL_Gsv_placeholder (my_vars->Gsv_placeholder) -#define PL_thr_key (my_vars->Gthr_key) -#define PL_Gthr_key (my_vars->Gthr_key) -#define PL_timesbase (my_vars->Gtimesbase) -#define PL_Gtimesbase (my_vars->Gtimesbase) -#define PL_use_safe_putenv (my_vars->Guse_safe_putenv) -#define PL_Guse_safe_putenv (my_vars->Guse_safe_putenv) -#define PL_user_def_props (my_vars->Guser_def_props) -#define PL_Guser_def_props (my_vars->Guser_def_props) -#define PL_user_def_props_aTHX (my_vars->Guser_def_props_aTHX) -#define PL_Guser_def_props_aTHX (my_vars->Guser_def_props_aTHX) -#define PL_user_prop_mutex (my_vars->Guser_prop_mutex) -#define PL_Guser_prop_mutex (my_vars->Guser_prop_mutex) -#define PL_veto_cleanup (my_vars->Gveto_cleanup) -#define PL_Gveto_cleanup (my_vars->Gveto_cleanup) -#define PL_watch_pvx (my_vars->Gwatch_pvx) -#define PL_Gwatch_pvx (my_vars->Gwatch_pvx) - -#endif /* PERL_GLOBAL_STRUCT */ - /* ex: set ro: */ diff --git a/gnu/usr.bin/perl/ext/B/B.pm b/gnu/usr.bin/perl/ext/B/B.pm index 80c7f858eea..9e6f2897c86 100644 --- a/gnu/usr.bin/perl/ext/B/B.pm +++ b/gnu/usr.bin/perl/ext/B/B.pm @@ -20,7 +20,7 @@ sub import { # walkoptree comes from B.xs BEGIN { - $B::VERSION = '1.80'; + $B::VERSION = '1.83'; @B::EXPORT_OK = (); # Our BOOT code needs $VERSION set, and will append to @EXPORT_OK. @@ -559,9 +559,9 @@ The inheritance hierarchy mimics the underlying C "inheritance": +------------+------------+ | | | B::PV B::IV B::NV - \ / / - \ / / - B::PVIV / + / \ / / + / \ / / + B::INVLIST B::PVIV / \ / \ / \ / @@ -735,6 +735,32 @@ in the MAGIC. =back +=head2 B::INVLIST Methods + +=over 4 + +=item prev_index + +Returns the cache result of previous invlist_search() (internal usage) + +=item is_offset + +Returns a boolean value (0 or 1) to know if the invlist is using an offset. +When false the list begins with the code point U+0000. +When true the list begins with the following elements. + +=item array_len + +Returns an integer with the size of the array used to define the invlist. + +=item get_invlist_array + +This method returns a list of integers representing the array used by the +invlist. +Note: this cannot be used while in middle of iterating on an invlist and croaks. + +=back + =head2 B::PVLV Methods =over 4 diff --git a/gnu/usr.bin/perl/ext/B/B.xs b/gnu/usr.bin/perl/ext/B/B.xs index 8a4126545bf..7cdd0f9c6a9 100644 --- a/gnu/usr.bin/perl/ext/B/B.xs +++ b/gnu/usr.bin/perl/ext/B/B.xs @@ -13,6 +13,9 @@ #include "perl.h" #include "XSUB.h" +/* #include "invlist_inline.h" */ +#define FROM_INTERNAL_SIZE(x) ((x)/ sizeof(UV)) + #ifdef PerlIO typedef PerlIO * InputStream; #else @@ -472,6 +475,7 @@ typedef PADLIST *B__PADLIST; typedef PADNAMELIST *B__PADNAMELIST; typedef PADNAME *B__PADNAME; +typedef INVLIST *B__INVLIST; #ifdef MULTIPLICITY # define ASSIGN_COMMON_ALIAS(prefix, var) \ @@ -486,7 +490,6 @@ typedef PADNAME *B__PADNAME; static XSPROTO(intrpvar_sv_common); /* prototype to pass -Wmissing-prototypes */ static XSPROTO(intrpvar_sv_common) { - dVAR; dXSARGS; SV *ret; if (items != 0) @@ -635,7 +638,7 @@ BOOT: cv = newXS("B::diehook", intrpvar_sv_common, file); ASSIGN_COMMON_ALIAS(I, diehook); sv = get_sv("B::OP::does_parent", GV_ADDMULTI); - sv_setsv(sv, &PL_sv_yes); + sv_setbool(sv, TRUE); } void @@ -1632,6 +1635,71 @@ REGEX(sv) PUSHi(PTR2IV(sv)); } +MODULE = B PACKAGE = B::INVLIST PREFIX = Invlist + +int +prev_index(invlist) + B::INVLIST invlist + CODE: + RETVAL = ((XINVLIST*) SvANY(invlist))->prev_index; + OUTPUT: + RETVAL + +int +is_offset(invlist) + B::INVLIST invlist + CODE: + RETVAL = ((XINVLIST*) SvANY(invlist))->is_offset == TRUE ? 1 : 0; + OUTPUT: + RETVAL + +unsigned int +array_len(invlist) + B::INVLIST invlist + CODE: + { + if (SvCUR(invlist) > 0) + RETVAL = FROM_INTERNAL_SIZE(SvCUR(invlist)); /* - ((XINVLIST*) SvANY(invlist))->is_offset; */ /* <- for iteration */ + else + RETVAL = 0; + } + OUTPUT: + RETVAL + +void +get_invlist_array(invlist) + B::INVLIST invlist +PPCODE: + { + /* should use invlist_is_iterating but not public for now */ + bool is_iterating = ( (XINVLIST*) SvANY(invlist) )->iterator < (STRLEN) UV_MAX; + + if (is_iterating) { + croak( "Can't access inversion list: in middle of iterating" ); + } + + { + UV pos; + UV len; + + len = 0; + /* should use _invlist_len (or not) */ + if (SvCUR(invlist) > 0) + len = FROM_INTERNAL_SIZE(SvCUR(invlist)); /* - ((XINVLIST*) SvANY(invlist))->is_offset; */ /* <- for iteration */ + + if ( len > 0 ) { + UV *array = (UV*) SvPVX( invlist ); /* invlist_array */ + + EXTEND(SP, (int) len); + + for ( pos = 0; pos < len; ++pos ) { + PUSHs( sv_2mortal( newSVuv(array[pos]) ) ); + } + } + } + + } + MODULE = B PACKAGE = B::PV void @@ -2207,7 +2275,7 @@ PadnameTYPE(pn) B::PADLIST::outid = PL_outid_ix PREINIT: char *ptr; - SV *ret; + SV *ret = NULL; PPCODE: ptr = (ix & 0xFFFF) + (char *)pn; switch ((U8)(ix >> 16)) { diff --git a/gnu/usr.bin/perl/ext/B/B/Concise.pm b/gnu/usr.bin/perl/ext/B/B/Concise.pm index 729fcd95f48..a7419d75e04 100644 --- a/gnu/usr.bin/perl/ext/B/B/Concise.pm +++ b/gnu/usr.bin/perl/ext/B/B/Concise.pm @@ -12,10 +12,9 @@ package B::Concise; use strict; # use #2 use warnings; # uses #3 and #4, since warnings uses Carp -use Exporter (); # use #5 +use Exporter 'import'; # use #5 -our $VERSION = "1.004"; -our @ISA = qw(Exporter); +our $VERSION = "1.006"; our @EXPORT_OK = qw( set_style set_style_standard add_callback concise_subref concise_cv concise_main add_style walk_output compile reset_sequence ); @@ -853,9 +852,14 @@ sub concise_op { # targ holds a reference count my $refs = "ref" . ($h{targ} != 1 ? "s" : ""); $h{targarglife} = $h{targarg} = "$h{targ} $refs"; - } elsif ($h{targ}) { + } elsif ($h{targ} && $h{name} ne 'iter') { + # for my ($q, $r, $s) () {} syntax hijacks the targ of the iter op, + # (which is the ->next of the enteriter) hence the special cases above + # and just below: my $count = $h{name} eq 'padrange' ? ($op->private & $B::Op_private::defines{'OPpPADRANGE_COUNTMASK'}) + : $h{name} eq 'enteriter' + ? $op->next->targ + 1 : 1; my (@targarg, @targarglife); for my $i (0..$count-1) { diff --git a/gnu/usr.bin/perl/ext/B/Makefile.PL b/gnu/usr.bin/perl/ext/B/Makefile.PL index e34b86714f0..1b30ffd08f7 100644 --- a/gnu/usr.bin/perl/ext/B/Makefile.PL +++ b/gnu/usr.bin/perl/ext/B/Makefile.PL @@ -40,7 +40,7 @@ foreach my $tuple (['cop.h'], push @depend, $path; open my $fh, '<', $path or die "Cannot open $path: $!"; while (<$fh>) { - push @names, $1 if (/ \#define \s+ ( $pfx \w+ ) \s+ + push @names, $1 if (/ ^ \s* \# \s* define \s+ ( $pfx \w+ ) \s+ ( [()|\dx]+ [UuLl]{0,2} # Parens, '|', digits, 'x', # followed by optional long, # unsigned qualifiers diff --git a/gnu/usr.bin/perl/ext/B/t/OptreeCheck.pm b/gnu/usr.bin/perl/ext/B/t/OptreeCheck.pm index 53236c91d4e..54c4211f406 100644 --- a/gnu/usr.bin/perl/ext/B/t/OptreeCheck.pm +++ b/gnu/usr.bin/perl/ext/B/t/OptreeCheck.pm @@ -5,7 +5,7 @@ use warnings; our ($TODO, $Level, $using_open); require "test.pl"; -our $VERSION = '0.16'; +our $VERSION = '0.17'; # now export checkOptree, and those test.pl functions used by tests our @EXPORT = qw( checkOptree plan skip skip_all pass is like unlike @@ -314,21 +314,7 @@ our %gOpts = # values are replaced at runtime !! ); -# Not sure if this is too much cheating. Officially we say that -# $Config::Config{usethreads} is true if some sort of threading is in -# use, in which case we ought to be able to use it in place of the || -# below. However, it is now possible to Configure perl with "threads" -# but neither ithreads or 5005threads, which forces the re-entrant -# APIs, but no perl user visible threading. - -# This seems to have the side effect that most of perl doesn't think -# that it's threaded, hence the ops aren't threaded either. Not sure -# if this is actually a "supported" configuration, but given that -# ponie uses it, it's going to be used by something official at least -# in the interim. So it's nice for tests to all pass. - -our $threaded = 1 - if $Config::Config{useithreads} || $Config::Config{use5005threads}; +our $threaded = 1 if $Config::Config{usethreads}; our $platform = ($threaded) ? "threaded" : "plain"; our $thrstat = ($threaded) ? "threaded" : "nonthreaded"; diff --git a/gnu/usr.bin/perl/ext/B/t/concise-xs.t b/gnu/usr.bin/perl/ext/B/t/concise-xs.t index 217a44e9f4a..2bf3895f9e4 100755 --- a/gnu/usr.bin/perl/ext/B/t/concise-xs.t +++ b/gnu/usr.bin/perl/ext/B/t/concise-xs.t @@ -10,10 +10,6 @@ BEGIN { print "1..0 # Skip -- Perl configured without B module\n"; exit 0; } - unless ($Config::Config{useperlio}) { - print "1..0 # Skip -- Perl configured without perlio\n"; - exit 0; - } } use Carp; diff --git a/gnu/usr.bin/perl/ext/B/t/concise.t b/gnu/usr.bin/perl/ext/B/t/concise.t index 3541ce3504b..58d01034049 100644 --- a/gnu/usr.bin/perl/ext/B/t/concise.t +++ b/gnu/usr.bin/perl/ext/B/t/concise.t @@ -42,7 +42,6 @@ like($out, qr/print/, "'-exec' option output has print opcode"); ######## API tests v.60 -use Config; # used for perlio check B::Concise->import(qw( set_style set_style_standard add_callback add_style walk_output reset_sequence )); @@ -70,23 +69,18 @@ eval { walk_output($foo) }; is ($@, '', "walk_output() accepts obj that can print"); # test that walk_output accepts a HANDLE arg -SKIP: { - skip("no perlio in this build", 4) - unless $Config::Config{useperlio}; - - foreach my $foo (\*STDOUT, \*STDERR) { - eval { walk_output($foo) }; - is ($@, '', "walk_output() accepts STD* " . ref $foo); - } +foreach my $foo (\*STDOUT, \*STDERR) { + eval { walk_output($foo) }; + is ($@, '', "walk_output() accepts STD* " . ref $foo); +} - # now test a ref to scalar - eval { walk_output(\my $junk) }; - is ($@, '', "walk_output() accepts ref-to-sprintf target"); +# now test a ref to scalar +eval { walk_output(\my $junk) }; +is ($@, '', "walk_output() accepts ref-to-sprintf target"); - $junk = "non-empty"; - eval { walk_output(\$junk) }; - is ($@, '', "walk_output() accepts ref-to-non-empty-scalar"); -} +$junk = "non-empty"; +eval { walk_output(\$junk) }; +is ($@, '', "walk_output() accepts ref-to-non-empty-scalar"); ## add_style my @stylespec; @@ -129,229 +123,224 @@ sub render { return $out; } -SKIP: { - # tests output to GLOB, using perlio feature directly - skip "no perlio on this build", 127 - unless $Config::Config{useperlio}; - - set_style_standard('concise'); # MUST CALL before output needed - - @options = qw( - -basic -exec -tree -compact -loose -vt -ascii - -base10 -bigendian -littleendian - ); - foreach $opt (@options) { - ($out) = render($opt, $func); - isnt($out, '', "got output with option $opt"); - } - - ## test output control via walk_output - - my $treegen = B::Concise::compile('-basic', $func); # reused - - { # test output into a package global string (sprintf-ish) - our $thing; - walk_output(\$thing); - $treegen->(); - ok($thing, "walk_output to our SCALAR, output seen"); - } - - # test walkoutput acceptance of a scalar-bound IO handle - open (my $fh, '>', \my $buf); - walk_output($fh); +# tests output to GLOB, using perlio feature directly +set_style_standard('concise'); # MUST CALL before output needed + +@options = qw( + -basic -exec -tree -compact -loose -vt -ascii + -base10 -bigendian -littleendian + ); +foreach $opt (@options) { + ($out) = render($opt, $func); + isnt($out, '', "got output with option $opt"); +} + +## test output control via walk_output + +my $treegen = B::Concise::compile('-basic', $func); # reused + +{ # test output into a package global string (sprintf-ish) + our $thing; + walk_output(\$thing); $treegen->(); - ok($buf, "walk_output to GLOB, output seen"); - - ## test B::Concise::compile error checking - - # call compile on non-CODE ref items - if (0) { - # pending STASH splaying - - foreach my $ref ([], {}) { - my $typ = ref $ref; - walk_output(\my $out); - eval { B::Concise::compile('-basic', $ref)->() }; - like ($@, qr/^err: not a coderef: $typ/, - "compile detects $typ-ref where expecting subref"); - is($out,'', "no output when errd"); # announcement prints - } + ok($thing, "walk_output to our SCALAR, output seen"); +} + +# test walkoutput acceptance of a scalar-bound IO handle +open (my $fh, '>', \my $buf); +walk_output($fh); +$treegen->(); +ok($buf, "walk_output to GLOB, output seen"); + +## test B::Concise::compile error checking + +# call compile on non-CODE ref items +if (0) { + # pending STASH splaying + + foreach my $ref ([], {}) { + my $typ = ref $ref; + walk_output(\my $out); + eval { B::Concise::compile('-basic', $ref)->() }; + like ($@, qr/^err: not a coderef: $typ/, + "compile detects $typ-ref where expecting subref"); + is($out,'', "no output when errd"); # announcement prints } - - # test against a bogus autovivified subref. - # in debugger, it should look like: - # 1 CODE(0x84840cc) - # -> &CODE(0x84840cc) in ??? - - my ($res,$err); - TODO: { - #local $TODO = "\tdoes this handling make sense ?"; - - sub declared_only; - ($res,$err) = render('-basic', \&declared_only); - like ($res, qr/coderef CODE\(0x[0-9a-fA-F]+\) has no START/, - "'sub decl_only' seen as having no START"); - - sub defd_empty {}; - ($res,$err) = render('-basic', \&defd_empty); - my @lines = split(/\n/, $res); - is(scalar @lines, 3, - "'sub defd_empty {}' seen as 3 liner"); - - is(1, $res =~ /leavesub/ && $res =~ /(next|db)state/, - "'sub defd_empty {}' seen as 2 ops: leavesub,nextstate"); - - ($res,$err) = render('-basic', \¬_even_declared); - like ($res, qr/coderef CODE\(0x[0-9a-fA-F]+\) has no START/, - "'\¬_even_declared' seen as having no START"); - - { - package Bar; - our $AUTOLOAD = 'garbage'; - sub AUTOLOAD { print "# in AUTOLOAD body: $AUTOLOAD\n" } - } - ($res,$err) = render('-basic', Bar::auto_func); - like ($res, qr/unknown function \(Bar::auto_func\)/, - "Bar::auto_func seen as unknown function"); - - ($res,$err) = render('-basic', \&Bar::auto_func); - like ($res, qr/coderef CODE\(0x[0-9a-fA-F]+\) has no START/, - "'\&Bar::auto_func' seen as having no START"); - - ($res,$err) = render('-basic', \&Bar::AUTOLOAD); - like ($res, qr/in AUTOLOAD body: /, "found body of Bar::AUTOLOAD"); +} +# test against a bogus autovivified subref. +# in debugger, it should look like: +# 1 CODE(0x84840cc) +# -> &CODE(0x84840cc) in ??? + +my ($res,$err); +TODO: { + #local $TODO = "\tdoes this handling make sense ?"; + + sub declared_only; + ($res,$err) = render('-basic', \&declared_only); + like ($res, qr/coderef CODE\(0x[0-9a-fA-F]+\) has no START/, + "'sub decl_only' seen as having no START"); + + sub defd_empty {}; + ($res,$err) = render('-basic', \&defd_empty); + my @lines = split(/\n/, $res); + is(scalar @lines, 3, + "'sub defd_empty {}' seen as 3 liner"); + + is(1, $res =~ /leavesub/ && $res =~ /(next|db)state/, + "'sub defd_empty {}' seen as 2 ops: leavesub,nextstate"); + + ($res,$err) = render('-basic', \¬_even_declared); + like ($res, qr/coderef CODE\(0x[0-9a-fA-F]+\) has no START/, + "'\¬_even_declared' seen as having no START"); + + { + package Bar; + our $AUTOLOAD = 'garbage'; + sub AUTOLOAD { print "# in AUTOLOAD body: $AUTOLOAD\n" } } - ($res,$err) = render('-basic', Foo::bar); - like ($res, qr/unknown function \(Foo::bar\)/, - "BC::compile detects fn-name as unknown function"); + ($res,$err) = render('-basic', Bar::auto_func); + like ($res, qr/unknown function \(Bar::auto_func\)/, + "Bar::auto_func seen as unknown function"); - # v.62 tests + ($res,$err) = render('-basic', \&Bar::auto_func); + like ($res, qr/coderef CODE\(0x[0-9a-fA-F]+\) has no START/, + "'\&Bar::auto_func' seen as having no START"); - pass ("TEST POST-COMPILE OPTION-HANDLING IN WALKER SUBROUTINE"); - - my $sample; + ($res,$err) = render('-basic', \&Bar::AUTOLOAD); + like ($res, qr/in AUTOLOAD body: /, "found body of Bar::AUTOLOAD"); - my $walker = B::Concise::compile('-basic', $func); - walk_output(\$sample); - $walker->('-exec'); - like($sample, qr/goto/m, "post-compile -exec"); +} +($res,$err) = render('-basic', Foo::bar); +like ($res, qr/unknown function \(Foo::bar\)/, + "BC::compile detects fn-name as unknown function"); - walk_output(\$sample); - $walker->('-basic'); - unlike($sample, qr/goto/m, "post-compile -basic"); +# v.62 tests +pass ("TEST POST-COMPILE OPTION-HANDLING IN WALKER SUBROUTINE"); - # bang at it combinatorically - my %combos; - my @modes = qw( -basic -exec ); - my @styles = qw( -concise -debug -linenoise -terse ); +my $sample; - # prep samples - for $style (@styles) { - for $mode (@modes) { - walk_output(\$sample); - reset_sequence(); - $walker->($style, $mode); - $combos{"$style$mode"} = $sample; - } - } - # crosscheck that samples are all text-different - @list = sort keys %combos; - for $i (0..$#list) { - for $j ($i+1..$#list) { - isnt ($combos{$list[$i]}, $combos{$list[$j]}, - "combos for $list[$i] and $list[$j] are different, as expected"); - } - } - - # add samples with styles in different order +my $walker = B::Concise::compile('-basic', $func); +walk_output(\$sample); +$walker->('-exec'); +like($sample, qr/goto/m, "post-compile -exec"); + +walk_output(\$sample); +$walker->('-basic'); +unlike($sample, qr/goto/m, "post-compile -basic"); + + +# bang at it combinatorically +my %combos; +my @modes = qw( -basic -exec ); +my @styles = qw( -concise -debug -linenoise -terse ); + +# prep samples +for $style (@styles) { for $mode (@modes) { - for $style (@styles) { - reset_sequence(); - walk_output(\$sample); - $walker->($mode, $style); - $combos{"$mode$style"} = $sample; - } + walk_output(\$sample); + reset_sequence(); + $walker->($style, $mode); + $combos{"$style$mode"} = $sample; } - # test commutativity of flags, ie that AB == BA - for $mode (@modes) { - for $style (@styles) { - is ( $combos{"$style$mode"}, - $combos{"$mode$style"}, - "results for $style$mode vs $mode$style are the same" ); - } +} +# crosscheck that samples are all text-different +@list = sort keys %combos; +for $i (0..$#list) { + for $j ($i+1..$#list) { + isnt ($combos{$list[$i]}, $combos{$list[$j]}, + "combos for $list[$i] and $list[$j] are different, as expected"); } +} - my %save = %combos; - %combos = (); # outputs for $mode=any($order) and any($style) - - # add more samples with switching modes & sticky styles +# add samples with styles in different order +for $mode (@modes) { for $style (@styles) { - walk_output(\$sample); - reset_sequence(); - $walker->($style); - for $mode (@modes) { - walk_output(\$sample); - reset_sequence(); - $walker->($mode); - $combos{"$style/$mode"} = $sample; - } + reset_sequence(); + walk_output(\$sample); + $walker->($mode, $style); + $combos{"$mode$style"} = $sample; } - # crosscheck that samples are all text-different - @nm = sort keys %combos; - for $i (0..$#nm) { - for $j ($i+1..$#nm) { - isnt ($combos{$nm[$i]}, $combos{$nm[$j]}, - "results for $nm[$i] and $nm[$j] are different, as expected"); - } +} +# test commutativity of flags, ie that AB == BA +for $mode (@modes) { + for $style (@styles) { + is ( $combos{"$style$mode"}, + $combos{"$mode$style"}, + "results for $style$mode vs $mode$style are the same" ); } - - # add samples with switching styles & sticky modes +} + +my %save = %combos; +%combos = (); # outputs for $mode=any($order) and any($style) + +# add more samples with switching modes & sticky styles +for $style (@styles) { + walk_output(\$sample); + reset_sequence(); + $walker->($style); for $mode (@modes) { - walk_output(\$sample); - reset_sequence(); - $walker->($mode); - for $style (@styles) { - walk_output(\$sample); - reset_sequence(); - $walker->($style); - $combos{"$mode/$style"} = $sample; - } + walk_output(\$sample); + reset_sequence(); + $walker->($mode); + $combos{"$style/$mode"} = $sample; } - # test commutativity of flags, ie that AB == BA - for $mode (@modes) { - for $style (@styles) { - is ( $combos{"$style/$mode"}, - $combos{"$mode/$style"}, - "results for $style/$mode vs $mode/$style are the same" ); - } +} +# crosscheck that samples are all text-different +@nm = sort keys %combos; +for $i (0..$#nm) { + for $j ($i+1..$#nm) { + isnt ($combos{$nm[$i]}, $combos{$nm[$j]}, + "results for $nm[$i] and $nm[$j] are different, as expected"); + } +} + +# add samples with switching styles & sticky modes +for $mode (@modes) { + walk_output(\$sample); + reset_sequence(); + $walker->($mode); + for $style (@styles) { + walk_output(\$sample); + reset_sequence(); + $walker->($style); + $combos{"$mode/$style"} = $sample; } +} +# test commutativity of flags, ie that AB == BA +for $mode (@modes) { + for $style (@styles) { + is ( $combos{"$style/$mode"}, + $combos{"$mode/$style"}, + "results for $style/$mode vs $mode/$style are the same" ); + } +} - #now do double crosschecks: commutativity across stick / nostick - %combos = (%combos, %save); +#now do double crosschecks: commutativity across stick / nostick +%combos = (%combos, %save); - # test commutativity of flags, ie that AB == BA - for $mode (@modes) { - for $style (@styles) { +# test commutativity of flags, ie that AB == BA +for $mode (@modes) { + for $style (@styles) { - is ( $combos{"$style$mode"}, - $combos{"$style/$mode"}, - "$style$mode VS $style/$mode are the same" ); + is ( $combos{"$style$mode"}, + $combos{"$style/$mode"}, + "$style$mode VS $style/$mode are the same" ); - is ( $combos{"$mode$style"}, - $combos{"$mode/$style"}, - "$mode$style VS $mode/$style are the same" ); + is ( $combos{"$mode$style"}, + $combos{"$mode/$style"}, + "$mode$style VS $mode/$style are the same" ); - is ( $combos{"$style$mode"}, - $combos{"$mode/$style"}, - "$style$mode VS $mode/$style are the same" ); + is ( $combos{"$style$mode"}, + $combos{"$mode/$style"}, + "$style$mode VS $mode/$style are the same" ); - is ( $combos{"$mode$style"}, - $combos{"$style/$mode"}, - "$mode$style VS $style/$mode are the same" ); - } + is ( $combos{"$mode$style"}, + $combos{"$style/$mode"}, + "$mode$style VS $style/$mode are the same" ); } } @@ -413,7 +402,7 @@ $out = runperl ( switches => ["-MO=Concise,-stash=Data::Dumper,-src,-exec"], SKIP: { skip "Data::Dumper is statically linked", 1 - if $Config{static_ext} =~ m|\bData/Dumper\b|; + if $Config::Config{static_ext} =~ m|\bData/Dumper\b|; like($out, qr/FUNC: \*Data::Dumper::format_refaddr/, "stash rendering loads package as needed"); } @@ -521,7 +510,7 @@ like $out, qr/$end/, 'OP_AND->op_other points correctly'; is(scalar(@hints), 3, "3 hints"); is($hints[0], 'v:{', "hints[0]"); is($hints[1], 'v:*,&,{,x*,x&,x$,$', "hints[1]"); - is($hints[2], 'v:us,*,&,{,x*,x&,x$,$,fea=7', "hints[2]"); + is($hints[2], 'v:us,*,&,{,x*,x&,x$,$,fea=15', "hints[2]"); } __END__ diff --git a/gnu/usr.bin/perl/ext/B/t/f_map.t b/gnu/usr.bin/perl/ext/B/t/f_map.t index 221f2926e2a..d561cb79844 100755 --- a/gnu/usr.bin/perl/ext/B/t/f_map.t +++ b/gnu/usr.bin/perl/ext/B/t/f_map.t @@ -7,10 +7,6 @@ BEGIN { print "1..0 # Skip -- Perl configured without B module\n"; exit 0; } - if (!$Config::Config{useperlio}) { - print "1..0 # Skip -- need perlio to walk the optree\n"; - exit 0; - } } use OptreeCheck; plan tests => 18; @@ -20,14 +16,6 @@ plan tests => 18; Code test snippets here are adapted from `perldoc -f map` -Due to a bleadperl optimization (Dave Mitchell, circa may 04), the -(map|grep)(start|while) opcodes have different flags in 5.9, their -private flags /1, /2 are gone in blead (for the cases covered) - -When the optree stuff was integrated into 5.8.6, these tests failed, -and were todo'd. They're now done, by version-specific tweaking in -mkCheckRex(), therefore the skip is removed too. - =for gentest # chunk: #!perl diff --git a/gnu/usr.bin/perl/ext/B/t/f_sort.t b/gnu/usr.bin/perl/ext/B/t/f_sort.t index 24a9f2e38c6..278e4cc0946 100755 --- a/gnu/usr.bin/perl/ext/B/t/f_sort.t +++ b/gnu/usr.bin/perl/ext/B/t/f_sort.t @@ -7,10 +7,6 @@ BEGIN { print "1..0 # Skip -- Perl configured without B module\n"; exit 0; } - if (!$Config::Config{useperlio}) { - print "1..0 # Skip -- need perlio to walk the optree\n"; - exit 0; - } } use OptreeCheck; plan tests => 38; @@ -19,14 +15,6 @@ plan tests => 38; Code test snippets here are adapted from `perldoc -f map` -Due to a bleadperl optimization (Dave Mitchell, circa apr 04), the -(map|grep)(start|while) opcodes have different flags in 5.9, their -private flags /1, /2 are gone in blead (for the cases covered) - -When the optree stuff was integrated into 5.8.6, these tests failed, -and were todo'd. They're now done, by version-specific tweaking in -mkCheckRex(), therefore the skip is removed too. - =head1 Test Notes # chunk: #!perl @@ -653,7 +641,7 @@ my ($expect, $expect_nt) = (<<'EOT_EOT', <<'EONT_EONT'); # 3 <0> pushmark s # 4 <#> gv[*old] s # 5 <1> rv2av[t9] lKM/1 -# 6 <@> sort lKS*/STABLE +# 6 <@> sort lKS* # 7 <0> pushmark s # 8 <#> gv[*new] s # 9 <1> rv2av[t2] lKRM*/1 @@ -665,7 +653,7 @@ EOT_EOT # 3 <0> pushmark s # 4 <$> gv(*old) s # 5 <1> rv2av[t5] lKM/1 -# 6 <@> sort lKS*/STABLE +# 6 <@> sort lKS* # 7 <0> pushmark s # 8 <$> gv(*new) s # 9 <1> rv2av[t1] lKRM*/1 diff --git a/gnu/usr.bin/perl/ext/B/t/optree_check.t b/gnu/usr.bin/perl/ext/B/t/optree_check.t index 9daf5221b73..1b87839f01c 100755 --- a/gnu/usr.bin/perl/ext/B/t/optree_check.t +++ b/gnu/usr.bin/perl/ext/B/t/optree_check.t @@ -7,10 +7,6 @@ BEGIN { print "1..0 # Skip -- Perl configured without B module\n"; exit 0; } - if (!$Config::Config{useperlio}) { - print "1..0 # Skip -- need perlio to walk the optree\n"; - exit 0; - } } use OptreeCheck; diff --git a/gnu/usr.bin/perl/ext/B/t/optree_concise.t b/gnu/usr.bin/perl/ext/B/t/optree_concise.t index 86280ac4888..cf93bd10565 100755 --- a/gnu/usr.bin/perl/ext/B/t/optree_concise.t +++ b/gnu/usr.bin/perl/ext/B/t/optree_concise.t @@ -7,15 +7,10 @@ BEGIN { print "1..0 # Skip -- Perl configured without B module\n"; exit 0; } - if (!$Config::Config{useperlio}) { - print "1..0 # Skip -- need perlio to walk the optree\n"; - exit 0; - } } # import checkOptree(), and %gOpts (containing test state) use OptreeCheck; # ALSO DOES @ARGV HANDLING !!!!!! -use Config; plan tests => 41; diff --git a/gnu/usr.bin/perl/ext/B/t/optree_misc.t b/gnu/usr.bin/perl/ext/B/t/optree_misc.t index 490abb33d4d..44c4b564cd7 100644 --- a/gnu/usr.bin/perl/ext/B/t/optree_misc.t +++ b/gnu/usr.bin/perl/ext/B/t/optree_misc.t @@ -9,12 +9,8 @@ BEGIN { } } use OptreeCheck; -use Config; plan tests => 18; -SKIP: { -skip "no perlio in this build", 4 unless $Config::Config{useperlio}; - # The regression this was testing is that the first aelemfast, derived # from a lexical array, is supposed to be a BASEOP "<0>", while the # second, from a global, is an SVOP "<$>" or a PADOP "<#>" depending @@ -85,8 +81,6 @@ EOT_EOT # 3 <$> gvsv(*1) s ->4 EONT_EONT -} #skip - my $t = <<'EOT_EOT'; # 8 <@> leave[1 ref] vKP/REFC ->(end) # 1 <0> enter v ->2 diff --git a/gnu/usr.bin/perl/ext/B/t/optree_samples.t b/gnu/usr.bin/perl/ext/B/t/optree_samples.t index 0a498a9e528..5e489d698d7 100755 --- a/gnu/usr.bin/perl/ext/B/t/optree_samples.t +++ b/gnu/usr.bin/perl/ext/B/t/optree_samples.t @@ -7,13 +7,8 @@ BEGIN { print "1..0 # Skip -- Perl configured without B module\n"; exit 0; } - if (!$Config::Config{useperlio}) { - print "1..0 # Skip -- need perlio to walk the optree\n"; - exit 0; - } } use OptreeCheck; -use Config; plan tests => 46; pass("GENERAL OPTREE EXAMPLES"); diff --git a/gnu/usr.bin/perl/ext/B/t/optree_sort.t b/gnu/usr.bin/perl/ext/B/t/optree_sort.t index 2c661f67650..f2a8f5c2ca4 100755 --- a/gnu/usr.bin/perl/ext/B/t/optree_sort.t +++ b/gnu/usr.bin/perl/ext/B/t/optree_sort.t @@ -7,13 +7,8 @@ BEGIN { print "1..0 # Skip -- Perl configured without B module\n"; exit 0; } - if (!$Config::Config{useperlio}) { - print "1..0 # Skip -- need perlio to walk the optree\n"; - exit 0; - } } use OptreeCheck; -use Config; plan tests => 21; pass("SORT OPTIMIZATION"); diff --git a/gnu/usr.bin/perl/ext/B/t/optree_specials.t b/gnu/usr.bin/perl/ext/B/t/optree_specials.t index 96e430e3030..a6dc206a4b6 100755 --- a/gnu/usr.bin/perl/ext/B/t/optree_specials.t +++ b/gnu/usr.bin/perl/ext/B/t/optree_specials.t @@ -24,7 +24,6 @@ BEGIN { # import checkOptree(), and %gOpts (containing test state) use OptreeCheck; # ALSO DOES @ARGV HANDLING !!!!!! -use Config; plan tests => 15; @@ -45,52 +44,54 @@ checkOptree ( name => 'BEGIN', prog => $src, strip_open_hints => 1, expect => <<'EOT_EOT', expect_nt => <<'EONT_EONT'); -# - <@> lineseq KP ->7 -# 1 <;> nextstate(B::Concise -1151 Concise.pm:116) v:*,&,{,x*,x&,x$,$ ->2 -# 6 <2> sassign sKS/2 ->7 -# 4 <1> srefgen sK/1 ->5 -# - <1> ex-list lKRM ->4 -# 3 <1> rv2gv sKRM/STRICT,1 ->4 -# 2 <#> gv[*STDOUT] s ->3 -# - <1> ex-rv2sv sKRM*/STRICT,1 ->6 -# 5 <#> gvsv[*B::Concise::walkHandle] s ->6 +# BEGIN 1: +# a <1> leavesub[1 ref] K/REFC,1 ->(end) +# - <@> lineseq KP ->a +# 1 <;> nextstate(Exporter::Heavy -1410 Heavy.pm:4) v:*,&,{,x*,x&,x$,$ ->2 +# 3 <1> require sK/1 ->4 +# 2 <$> const[PV "strict.pm"] s/BARE ->3 +# - <;> ex-nextstate(Exporter::Heavy -1410 Heavy.pm:4) v:*,&,{,x*,x&,x$,$ ->4 +# - <@> lineseq K ->- +# 4 <;> nextstate(Exporter::Heavy -1410 Heavy.pm:4) :*,&,{,x*,x&,x$,$ ->5 +# 9 <1> entersub[t1] KRS*/TARG,STRICT ->a +# 5 <0> pushmark s ->6 +# 6 <$> const[PV "strict"] sM ->7 +# 7 <$> const[PV "refs"] sM ->8 +# 8 <.> method_named[PV "unimport"] ->9 # BEGIN 2: -# h <1> leavesub[1 ref] K/REFC,1 ->(end) -# - <@> lineseq K ->h -# 8 <;> nextstate(B::Concise -1113 Concise.pm:181) v:*,&,x*,x&,x$,$ ->9 -# a <1> require sK/1 ->b -# 9 <$> const[PV "strict.pm"] s/BARE ->a -# - <;> ex-nextstate(B::Concise -1113 Concise.pm:181) v:*,&,x*,x&,x$,$ ->b +# k <1> leavesub[1 ref] K/REFC,1 ->(end) +# - <@> lineseq KP ->k +# b <;> nextstate(Exporter::Heavy -1251 Heavy.pm:202) v:*,&,{,x*,x&,x$ ->c +# d <1> require sK/1 ->e +# c <$> const[PV "warnings.pm"] s/BARE ->d +# - <;> ex-nextstate(Exporter::Heavy -1251 Heavy.pm:202) v:*,&,{,x*,x&,x$ ->e # - <@> lineseq K ->- -# b <;> nextstate(B::Concise -1113 Concise.pm:181) :*,&,x*,x&,x$,$ ->c -# g <1> entersub[t1] KRS*/TARG,STRICT ->h -# c <0> pushmark s ->d -# d <$> const[PV "strict"] sM ->e -# e <$> const[PV "refs"] sM ->f -# f <.> method_named[PV "unimport"] ->g +# e <;> nextstate(Exporter::Heavy -1251 Heavy.pm:202) :*,&,{,x*,x&,x$ ->f +# j <1> entersub[t1] KRS*/TARG ->k +# f <0> pushmark s ->g +# g <$> const[PV "warnings"] sM ->h +# h <$> const[PV "once"] sM ->i +# i <.> method_named[PV "unimport"] ->j # BEGIN 3: # r <1> leavesub[1 ref] K/REFC,1 ->(end) -# - <@> lineseq K ->r -# i <;> nextstate(B::Concise -1010 Concise.pm:303) v:*,&,x*,x&,x$,$ ->j -# k <1> require sK/1 ->l -# j <$> const[PV "strict.pm"] s/BARE ->k -# - <;> ex-nextstate(B::Concise -1010 Concise.pm:303) v:*,&,x*,x&,x$,$ ->l -# - <@> lineseq K ->- -# l <;> nextstate(B::Concise -1010 Concise.pm:303) :*,&,x*,x&,x$,$ ->m -# q <1> entersub[t1] KRS*/TARG,STRICT ->r -# m <0> pushmark s ->n -# n <$> const[PV "strict"] sM ->o -# o <$> const[PV "refs"] sM ->p -# p <.> method_named[PV "unimport"] ->q +# - <@> lineseq KP ->r +# l <;> nextstate(B::Concise -1175 Concise.pm:117) v:*,&,{,x*,x&,x$,$ ->m +# q <2> sassign sKS/2 ->r +# o <1> srefgen sK/1 ->p +# - <1> ex-list lKRM ->o +# n <1> rv2gv sKRM/STRICT,1 ->o +# m <#> gv[*STDOUT] s ->n +# - <1> ex-rv2sv sKRM*/STRICT,1 ->q +# p <#> gvsv[*B::Concise::walkHandle] s ->q # BEGIN 4: # 11 <1> leavesub[1 ref] K/REFC,1 ->(end) -# - <@> lineseq KP ->11 -# s <;> nextstate(B::Concise -963 Concise.pm:368) v:*,&,{,x*,x&,x$,$ ->t +# - <@> lineseq K ->11 +# s <;> nextstate(B::Concise -1134 Concise.pm:183) v:*,&,x*,x&,x$,$ ->t # u <1> require sK/1 ->v # t <$> const[PV "strict.pm"] s/BARE ->u -# - <;> ex-nextstate(B::Concise -963 Concise.pm:368) v:*,&,{,x*,x&,x$,$ ->v +# - <;> ex-nextstate(B::Concise -1134 Concise.pm:183) v:*,&,x*,x&,x$,$ ->v # - <@> lineseq K ->- -# v <;> nextstate(B::Concise -963 Concise.pm:368) :*,&,{,x*,x&,x$,$ ->w +# v <;> nextstate(B::Concise -1134 Concise.pm:183) :*,&,x*,x&,x$,$ ->w # 10 <1> entersub[t1] KRS*/TARG,STRICT ->11 # w <0> pushmark s ->x # x <$> const[PV "strict"] sM ->y @@ -99,12 +100,12 @@ checkOptree ( name => 'BEGIN', # BEGIN 5: # 1b <1> leavesub[1 ref] K/REFC,1 ->(end) # - <@> lineseq K ->1b -# 12 <;> nextstate(B::Concise -938 Concise.pm:388) v:*,&,x*,x&,x$,$ ->13 +# 12 <;> nextstate(B::Concise -1031 Concise.pm:305) v:*,&,x*,x&,x$,$ ->13 # 14 <1> require sK/1 ->15 # 13 <$> const[PV "strict.pm"] s/BARE ->14 -# - <;> ex-nextstate(B::Concise -938 Concise.pm:388) v:*,&,x*,x&,x$,$ ->15 +# - <;> ex-nextstate(B::Concise -1031 Concise.pm:305) v:*,&,x*,x&,x$,$ ->15 # - <@> lineseq K ->- -# 15 <;> nextstate(B::Concise -938 Concise.pm:388) :*,&,x*,x&,x$,$ ->16 +# 15 <;> nextstate(B::Concise -1031 Concise.pm:305) :*,&,x*,x&,x$,$ ->16 # 1a <1> entersub[t1] KRS*/TARG,STRICT ->1b # 16 <0> pushmark s ->17 # 17 <$> const[PV "strict"] sM ->18 @@ -113,73 +114,101 @@ checkOptree ( name => 'BEGIN', # BEGIN 6: # 1l <1> leavesub[1 ref] K/REFC,1 ->(end) # - <@> lineseq KP ->1l -# 1c <;> nextstate(B::Concise -924 Concise.pm:408) v:*,&,{,x*,x&,x$,$ ->1d +# 1c <;> nextstate(B::Concise -984 Concise.pm:370) v:*,&,{,x*,x&,x$,$ ->1d # 1e <1> require sK/1 ->1f -# 1d <$> const[PV "warnings.pm"] s/BARE ->1e -# - <;> ex-nextstate(B::Concise -924 Concise.pm:408) v:*,&,{,x*,x&,x$,$ ->1f +# 1d <$> const[PV "strict.pm"] s/BARE ->1e +# - <;> ex-nextstate(B::Concise -984 Concise.pm:370) v:*,&,{,x*,x&,x$,$ ->1f # - <@> lineseq K ->- -# 1f <;> nextstate(B::Concise -924 Concise.pm:408) :*,&,{,x*,x&,x$,$ ->1g +# 1f <;> nextstate(B::Concise -984 Concise.pm:370) :*,&,{,x*,x&,x$,$ ->1g # 1k <1> entersub[t1] KRS*/TARG,STRICT ->1l # 1g <0> pushmark s ->1h -# 1h <$> const[PV "warnings"] sM ->1i -# 1i <$> const[PV "qw"] sM ->1j +# 1h <$> const[PV "strict"] sM ->1i +# 1i <$> const[PV "refs"] sM ->1j # 1j <.> method_named[PV "unimport"] ->1k # BEGIN 7: -# 1p <1> leavesub[1 ref] K/REFC,1 ->(end) -# - <@> lineseq KP ->1p -# 1m <;> nextstate(main 3 -e:1) v:>,<,%,{ ->1n -# 1o <1> postinc[t3] sK/1 ->1p -# - <1> ex-rv2sv sKRM/1 ->1o -# 1n <#> gvsv[*beg] s ->1o +# 1v <1> leavesub[1 ref] K/REFC,1 ->(end) +# - <@> lineseq K ->1v +# 1m <;> nextstate(B::Concise -959 Concise.pm:390) v:*,&,x*,x&,x$,$ ->1n +# 1o <1> require sK/1 ->1p +# 1n <$> const[PV "strict.pm"] s/BARE ->1o +# - <;> ex-nextstate(B::Concise -959 Concise.pm:390) v:*,&,x*,x&,x$,$ ->1p +# - <@> lineseq K ->- +# 1p <;> nextstate(B::Concise -959 Concise.pm:390) :*,&,x*,x&,x$,$ ->1q +# 1u <1> entersub[t1] KRS*/TARG,STRICT ->1v +# 1q <0> pushmark s ->1r +# 1r <$> const[PV "strict"] sM ->1s +# 1s <$> const[PV "refs"] sM ->1t +# 1t <.> method_named[PV "unimport"] ->1u +# BEGIN 8: +# 25 <1> leavesub[1 ref] K/REFC,1 ->(end) +# - <@> lineseq KP ->25 +# 1w <;> nextstate(B::Concise -945 Concise.pm:410) v:*,&,{,x*,x&,x$,$ ->1x +# 1y <1> require sK/1 ->1z +# 1x <$> const[PV "warnings.pm"] s/BARE ->1y +# - <;> ex-nextstate(B::Concise -945 Concise.pm:410) v:*,&,{,x*,x&,x$,$ ->1z +# - <@> lineseq K ->- +# 1z <;> nextstate(B::Concise -945 Concise.pm:410) :*,&,{,x*,x&,x$,$ ->20 +# 24 <1> entersub[t1] KRS*/TARG,STRICT ->25 +# 20 <0> pushmark s ->21 +# 21 <$> const[PV "warnings"] sM ->22 +# 22 <$> const[PV "qw"] sM ->23 +# 23 <.> method_named[PV "unimport"] ->24 +# BEGIN 9: +# 29 <1> leavesub[1 ref] K/REFC,1 ->(end) +# - <@> lineseq KP ->29 +# 26 <;> nextstate(main 3 -e:1) v:{ ->27 +# 28 <1> postinc[t3] sK/1 ->29 +# - <1> ex-rv2sv sKRM/1 ->28 +# 27 <#> gvsv[*beg] s ->28 EOT_EOT # BEGIN 1: -# 7 <1> leavesub[1 ref] K/REFC,1 ->(end) -# - <@> lineseq KP ->7 -# 1 <;> nextstate(B::Concise -1151 Concise.pm:116) v:*,&,{,x*,x&,x$,$ ->2 -# 6 <2> sassign sKS/2 ->7 -# 4 <1> srefgen sK/1 ->5 -# - <1> ex-list lKRM ->4 -# 3 <1> rv2gv sKRM/STRICT,1 ->4 -# 2 <$> gv(*STDOUT) s ->3 -# - <1> ex-rv2sv sKRM*/STRICT,1 ->6 -# 5 <$> gvsv(*B::Concise::walkHandle) s ->6 +# a <1> leavesub[1 ref] K/REFC,1 ->(end) +# - <@> lineseq KP ->a +# 1 <;> nextstate(Exporter::Heavy -1410 Heavy.pm:4) v:*,&,{,x*,x&,x$,$ ->2 +# 3 <1> require sK/1 ->4 +# 2 <$> const(PV "strict.pm") s/BARE ->3 +# - <;> ex-nextstate(Exporter::Heavy -1410 Heavy.pm:4) v:*,&,{,x*,x&,x$,$ ->4 +# - <@> lineseq K ->- +# 4 <;> nextstate(Exporter::Heavy -1410 Heavy.pm:4) :*,&,{,x*,x&,x$,$ ->5 +# 9 <1> entersub[t1] KRS*/TARG,STRICT ->a +# 5 <0> pushmark s ->6 +# 6 <$> const(PV "strict") sM ->7 +# 7 <$> const(PV "refs") sM ->8 +# 8 <.> method_named(PV "unimport") ->9 # BEGIN 2: -# h <1> leavesub[1 ref] K/REFC,1 ->(end) -# - <@> lineseq K ->h -# 8 <;> nextstate(B::Concise -1113 Concise.pm:181) v:*,&,x*,x&,x$,$ ->9 -# a <1> require sK/1 ->b -# 9 <$> const(PV "strict.pm") s/BARE ->a -# - <;> ex-nextstate(B::Concise -1113 Concise.pm:181) v:*,&,x*,x&,x$,$ ->b +# k <1> leavesub[1 ref] K/REFC,1 ->(end) +# - <@> lineseq KP ->k +# b <;> nextstate(Exporter::Heavy -1251 Heavy.pm:202) v:*,&,{,x*,x&,x$ ->c +# d <1> require sK/1 ->e +# c <$> const(PV "warnings.pm") s/BARE ->d +# - <;> ex-nextstate(Exporter::Heavy -1251 Heavy.pm:202) v:*,&,{,x*,x&,x$ ->e # - <@> lineseq K ->- -# b <;> nextstate(B::Concise -1113 Concise.pm:181) :*,&,x*,x&,x$,$ ->c -# g <1> entersub[t1] KRS*/TARG,STRICT ->h -# c <0> pushmark s ->d -# d <$> const(PV "strict") sM ->e -# e <$> const(PV "refs") sM ->f -# f <.> method_named(PV "unimport") ->g +# e <;> nextstate(Exporter::Heavy -1251 Heavy.pm:202) :*,&,{,x*,x&,x$ ->f +# j <1> entersub[t1] KRS*/TARG ->k +# f <0> pushmark s ->g +# g <$> const(PV "warnings") sM ->h +# h <$> const(PV "once") sM ->i +# i <.> method_named(PV "unimport") ->j # BEGIN 3: # r <1> leavesub[1 ref] K/REFC,1 ->(end) -# - <@> lineseq K ->r -# i <;> nextstate(B::Concise -1010 Concise.pm:303) v:*,&,x*,x&,x$,$ ->j -# k <1> require sK/1 ->l -# j <$> const(PV "strict.pm") s/BARE ->k -# - <;> ex-nextstate(B::Concise -1010 Concise.pm:303) v:*,&,x*,x&,x$,$ ->l -# - <@> lineseq K ->- -# l <;> nextstate(B::Concise -1010 Concise.pm:303) :*,&,x*,x&,x$,$ ->m -# q <1> entersub[t1] KRS*/TARG,STRICT ->r -# m <0> pushmark s ->n -# n <$> const(PV "strict") sM ->o -# o <$> const(PV "refs") sM ->p -# p <.> method_named(PV "unimport") ->q +# - <@> lineseq KP ->r +# l <;> nextstate(B::Concise -1175 Concise.pm:117) v:*,&,{,x*,x&,x$,$ ->m +# q <2> sassign sKS/2 ->r +# o <1> srefgen sK/1 ->p +# - <1> ex-list lKRM ->o +# n <1> rv2gv sKRM/STRICT,1 ->o +# m <$> gv(*STDOUT) s ->n +# - <1> ex-rv2sv sKRM*/STRICT,1 ->q +# p <$> gvsv(*B::Concise::walkHandle) s ->q # BEGIN 4: # 11 <1> leavesub[1 ref] K/REFC,1 ->(end) -# - <@> lineseq KP ->11 -# s <;> nextstate(B::Concise -963 Concise.pm:368) v:*,&,{,x*,x&,x$,$ ->t +# - <@> lineseq K ->11 +# s <;> nextstate(B::Concise -1134 Concise.pm:183) v:*,&,x*,x&,x$,$ ->t # u <1> require sK/1 ->v # t <$> const(PV "strict.pm") s/BARE ->u -# - <;> ex-nextstate(B::Concise -963 Concise.pm:368) v:*,&,{,x*,x&,x$,$ ->v +# - <;> ex-nextstate(B::Concise -1134 Concise.pm:183) v:*,&,x*,x&,x$,$ ->v # - <@> lineseq K ->- -# v <;> nextstate(B::Concise -963 Concise.pm:368) :*,&,{,x*,x&,x$,$ ->w +# v <;> nextstate(B::Concise -1134 Concise.pm:183) :*,&,x*,x&,x$,$ ->w # 10 <1> entersub[t1] KRS*/TARG,STRICT ->11 # w <0> pushmark s ->x # x <$> const(PV "strict") sM ->y @@ -188,12 +217,12 @@ EOT_EOT # BEGIN 5: # 1b <1> leavesub[1 ref] K/REFC,1 ->(end) # - <@> lineseq K ->1b -# 12 <;> nextstate(B::Concise -938 Concise.pm:388) v:*,&,x*,x&,x$,$ ->13 +# 12 <;> nextstate(B::Concise -1031 Concise.pm:305) v:*,&,x*,x&,x$,$ ->13 # 14 <1> require sK/1 ->15 # 13 <$> const(PV "strict.pm") s/BARE ->14 -# - <;> ex-nextstate(B::Concise -938 Concise.pm:388) v:*,&,x*,x&,x$,$ ->15 +# - <;> ex-nextstate(B::Concise -1031 Concise.pm:305) v:*,&,x*,x&,x$,$ ->15 # - <@> lineseq K ->- -# 15 <;> nextstate(B::Concise -938 Concise.pm:388) :*,&,x*,x&,x$,$ ->16 +# 15 <;> nextstate(B::Concise -1031 Concise.pm:305) :*,&,x*,x&,x$,$ ->16 # 1a <1> entersub[t1] KRS*/TARG,STRICT ->1b # 16 <0> pushmark s ->17 # 17 <$> const(PV "strict") sM ->18 @@ -202,24 +231,52 @@ EOT_EOT # BEGIN 6: # 1l <1> leavesub[1 ref] K/REFC,1 ->(end) # - <@> lineseq KP ->1l -# 1c <;> nextstate(B::Concise -924 Concise.pm:408) v:*,&,{,x*,x&,x$,$ ->1d +# 1c <;> nextstate(B::Concise -984 Concise.pm:370) v:*,&,{,x*,x&,x$,$ ->1d # 1e <1> require sK/1 ->1f -# 1d <$> const(PV "warnings.pm") s/BARE ->1e -# - <;> ex-nextstate(B::Concise -924 Concise.pm:408) v:*,&,{,x*,x&,x$,$ ->1f +# 1d <$> const(PV "strict.pm") s/BARE ->1e +# - <;> ex-nextstate(B::Concise -984 Concise.pm:370) v:*,&,{,x*,x&,x$,$ ->1f # - <@> lineseq K ->- -# 1f <;> nextstate(B::Concise -924 Concise.pm:408) :*,&,{,x*,x&,x$,$ ->1g +# 1f <;> nextstate(B::Concise -984 Concise.pm:370) :*,&,{,x*,x&,x$,$ ->1g # 1k <1> entersub[t1] KRS*/TARG,STRICT ->1l # 1g <0> pushmark s ->1h -# 1h <$> const(PV "warnings") sM ->1i -# 1i <$> const(PV "qw") sM ->1j +# 1h <$> const(PV "strict") sM ->1i +# 1i <$> const(PV "refs") sM ->1j # 1j <.> method_named(PV "unimport") ->1k # BEGIN 7: -# 1p <1> leavesub[1 ref] K/REFC,1 ->(end) -# - <@> lineseq KP ->1p -# 1m <;> nextstate(main 3 -e:1) v:>,<,%,{ ->1n -# 1o <1> postinc[t2] sK/1 ->1p -# - <1> ex-rv2sv sKRM/1 ->1o -# 1n <$> gvsv(*beg) s ->1o +# 1v <1> leavesub[1 ref] K/REFC,1 ->(end) +# - <@> lineseq K ->1v +# 1m <;> nextstate(B::Concise -959 Concise.pm:390) v:*,&,x*,x&,x$,$ ->1n +# 1o <1> require sK/1 ->1p +# 1n <$> const(PV "strict.pm") s/BARE ->1o +# - <;> ex-nextstate(B::Concise -959 Concise.pm:390) v:*,&,x*,x&,x$,$ ->1p +# - <@> lineseq K ->- +# 1p <;> nextstate(B::Concise -959 Concise.pm:390) :*,&,x*,x&,x$,$ ->1q +# 1u <1> entersub[t1] KRS*/TARG,STRICT ->1v +# 1q <0> pushmark s ->1r +# 1r <$> const(PV "strict") sM ->1s +# 1s <$> const(PV "refs") sM ->1t +# 1t <.> method_named(PV "unimport") ->1u +# BEGIN 8: +# 25 <1> leavesub[1 ref] K/REFC,1 ->(end) +# - <@> lineseq KP ->25 +# 1w <;> nextstate(B::Concise -945 Concise.pm:410) v:*,&,{,x*,x&,x$,$ ->1x +# 1y <1> require sK/1 ->1z +# 1x <$> const(PV "warnings.pm") s/BARE ->1y +# - <;> ex-nextstate(B::Concise -945 Concise.pm:410) v:*,&,{,x*,x&,x$,$ ->1z +# - <@> lineseq K ->- +# 1z <;> nextstate(B::Concise -945 Concise.pm:410) :*,&,{,x*,x&,x$,$ ->20 +# 24 <1> entersub[t1] KRS*/TARG,STRICT ->25 +# 20 <0> pushmark s ->21 +# 21 <$> const(PV "warnings") sM ->22 +# 22 <$> const(PV "qw") sM ->23 +# 23 <.> method_named(PV "unimport") ->24 +# BEGIN 9: +# 29 <1> leavesub[1 ref] K/REFC,1 ->(end) +# - <@> lineseq KP ->29 +# 26 <;> nextstate(main 3 -e:1) v:{ ->27 +# 28 <1> postinc[t2] sK/1 ->29 +# - <1> ex-rv2sv sKRM/1 ->28 +# 27 <$> gvsv(*beg) s ->28 EONT_EONT checkOptree ( name => 'END', @@ -317,40 +374,40 @@ checkOptree ( name => 'all of BEGIN END INIT CHECK UNITCHECK -exec', strip_open_hints => 1, expect => <<'EOT_EOT', expect_nt => <<'EONT_EONT'); # BEGIN 1: -# 1 <;> nextstate(B::Concise -1151 Concise.pm:116) v:*,&,{,x*,x&,x$,$ -# 2 <#> gv[*STDOUT] s -# 3 <1> rv2gv sKRM/STRICT,1 -# 4 <1> srefgen sK/1 -# 5 <#> gvsv[*B::Concise::walkHandle] s -# 6 <2> sassign sKS/2 -# 7 <1> leavesub[1 ref] K/REFC,1 +# 1 <;> nextstate(Exporter::Heavy -1410 Heavy.pm:4) v:*,&,{,x*,x&,x$,$ +# 2 <$> const[PV "strict.pm"] s/BARE +# 3 <1> require sK/1 +# 4 <;> nextstate(Exporter::Heavy -1410 Heavy.pm:4) :*,&,{,x*,x&,x$,$ +# 5 <0> pushmark s +# 6 <$> const[PV "strict"] sM +# 7 <$> const[PV "refs"] sM +# 8 <.> method_named[PV "unimport"] +# 9 <1> entersub[t1] KRS*/TARG,STRICT +# a <1> leavesub[1 ref] K/REFC,1 # BEGIN 2: -# 8 <;> nextstate(B::Concise -1113 Concise.pm:181) v:*,&,x*,x&,x$,$ -# 9 <$> const[PV "strict.pm"] s/BARE -# a <1> require sK/1 -# b <;> nextstate(B::Concise -1113 Concise.pm:181) :*,&,x*,x&,x$,$ -# c <0> pushmark s -# d <$> const[PV "strict"] sM -# e <$> const[PV "refs"] sM -# f <.> method_named[PV "unimport"] -# g <1> entersub[t1] KRS*/TARG,STRICT -# h <1> leavesub[1 ref] K/REFC,1 +# b <;> nextstate(Exporter::Heavy -1251 Heavy.pm:202) v:*,&,{,x*,x&,x$ +# c <$> const[PV "warnings.pm"] s/BARE +# d <1> require sK/1 +# e <;> nextstate(Exporter::Heavy -1251 Heavy.pm:202) :*,&,{,x*,x&,x$ +# f <0> pushmark s +# g <$> const[PV "warnings"] sM +# h <$> const[PV "once"] sM +# i <.> method_named[PV "unimport"] +# j <1> entersub[t1] KRS*/TARG +# k <1> leavesub[1 ref] K/REFC,1 # BEGIN 3: -# i <;> nextstate(B::Concise -1010 Concise.pm:303) v:*,&,x*,x&,x$,$ -# j <$> const[PV "strict.pm"] s/BARE -# k <1> require sK/1 -# l <;> nextstate(B::Concise -1010 Concise.pm:303) :*,&,x*,x&,x$,$ -# m <0> pushmark s -# n <$> const[PV "strict"] sM -# o <$> const[PV "refs"] sM -# p <.> method_named[PV "unimport"] -# q <1> entersub[t1] KRS*/TARG,STRICT +# l <;> nextstate(B::Concise -1175 Concise.pm:117) v:*,&,{,x*,x&,x$,$ +# m <#> gv[*STDOUT] s +# n <1> rv2gv sKRM/STRICT,1 +# o <1> srefgen sK/1 +# p <#> gvsv[*B::Concise::walkHandle] s +# q <2> sassign sKS/2 # r <1> leavesub[1 ref] K/REFC,1 # BEGIN 4: -# s <;> nextstate(B::Concise -963 Concise.pm:368) v:*,&,{,x*,x&,x$,$ +# s <;> nextstate(B::Concise -1134 Concise.pm:183) v:*,&,x*,x&,x$,$ # t <$> const[PV "strict.pm"] s/BARE # u <1> require sK/1 -# v <;> nextstate(B::Concise -963 Concise.pm:368) :*,&,{,x*,x&,x$,$ +# v <;> nextstate(B::Concise -1134 Concise.pm:183) :*,&,x*,x&,x$,$ # w <0> pushmark s # x <$> const[PV "strict"] sM # y <$> const[PV "refs"] sM @@ -358,10 +415,10 @@ checkOptree ( name => 'all of BEGIN END INIT CHECK UNITCHECK -exec', # 10 <1> entersub[t1] KRS*/TARG,STRICT # 11 <1> leavesub[1 ref] K/REFC,1 # BEGIN 5: -# 12 <;> nextstate(B::Concise -938 Concise.pm:388) v:*,&,x*,x&,x$,$ +# 12 <;> nextstate(B::Concise -1031 Concise.pm:305) v:*,&,x*,x&,x$,$ # 13 <$> const[PV "strict.pm"] s/BARE # 14 <1> require sK/1 -# 15 <;> nextstate(B::Concise -938 Concise.pm:388) :*,&,x*,x&,x$,$ +# 15 <;> nextstate(B::Concise -1031 Concise.pm:305) :*,&,x*,x&,x$,$ # 16 <0> pushmark s # 17 <$> const[PV "strict"] sM # 18 <$> const[PV "refs"] sM @@ -369,77 +426,99 @@ checkOptree ( name => 'all of BEGIN END INIT CHECK UNITCHECK -exec', # 1a <1> entersub[t1] KRS*/TARG,STRICT # 1b <1> leavesub[1 ref] K/REFC,1 # BEGIN 6: -# 1c <;> nextstate(B::Concise -924 Concise.pm:408) v:*,&,{,x*,x&,x$,$ -# 1d <$> const[PV "warnings.pm"] s/BARE +# 1c <;> nextstate(B::Concise -984 Concise.pm:370) v:*,&,{,x*,x&,x$,$ +# 1d <$> const[PV "strict.pm"] s/BARE # 1e <1> require sK/1 -# 1f <;> nextstate(B::Concise -924 Concise.pm:408) :*,&,{,x*,x&,x$,$ +# 1f <;> nextstate(B::Concise -984 Concise.pm:370) :*,&,{,x*,x&,x$,$ # 1g <0> pushmark s -# 1h <$> const[PV "warnings"] sM -# 1i <$> const[PV "qw"] sM +# 1h <$> const[PV "strict"] sM +# 1i <$> const[PV "refs"] sM # 1j <.> method_named[PV "unimport"] # 1k <1> entersub[t1] KRS*/TARG,STRICT # 1l <1> leavesub[1 ref] K/REFC,1 # BEGIN 7: -# 1m <;> nextstate(main 3 -e:1) v:>,<,%,{ -# 1n <#> gvsv[*beg] s -# 1o <1> postinc[t3] sK/1 -# 1p <1> leavesub[1 ref] K/REFC,1 +# 1m <;> nextstate(B::Concise -959 Concise.pm:390) v:*,&,x*,x&,x$,$ +# 1n <$> const[PV "strict.pm"] s/BARE +# 1o <1> require sK/1 +# 1p <;> nextstate(B::Concise -959 Concise.pm:390) :*,&,x*,x&,x$,$ +# 1q <0> pushmark s +# 1r <$> const[PV "strict"] sM +# 1s <$> const[PV "refs"] sM +# 1t <.> method_named[PV "unimport"] +# 1u <1> entersub[t1] KRS*/TARG,STRICT +# 1v <1> leavesub[1 ref] K/REFC,1 +# BEGIN 8: +# 1w <;> nextstate(B::Concise -945 Concise.pm:410) v:*,&,{,x*,x&,x$,$ +# 1x <$> const[PV "warnings.pm"] s/BARE +# 1y <1> require sK/1 +# 1z <;> nextstate(B::Concise -945 Concise.pm:410) :*,&,{,x*,x&,x$,$ +# 20 <0> pushmark s +# 21 <$> const[PV "warnings"] sM +# 22 <$> const[PV "qw"] sM +# 23 <.> method_named[PV "unimport"] +# 24 <1> entersub[t1] KRS*/TARG,STRICT +# 25 <1> leavesub[1 ref] K/REFC,1 +# BEGIN 9: +# 26 <;> nextstate(main 3 -e:1) v:{ +# 27 <#> gvsv[*beg] s +# 28 <1> postinc[t3] sK/1 +# 29 <1> leavesub[1 ref] K/REFC,1 # END 1: -# 1q <;> nextstate(main 9 -e:1) v:>,<,%,{ -# 1r <#> gvsv[*end] s -# 1s <1> postinc[t3] sK/1 -# 1t <1> leavesub[1 ref] K/REFC,1 +# 2a <;> nextstate(main 9 -e:1) v:{ +# 2b <#> gvsv[*end] s +# 2c <1> postinc[t3] sK/1 +# 2d <1> leavesub[1 ref] K/REFC,1 # INIT 1: -# 1u <;> nextstate(main 7 -e:1) v:>,<,%,{ -# 1v <#> gvsv[*init] s -# 1w <1> postinc[t3] sK/1 -# 1x <1> leavesub[1 ref] K/REFC,1 +# 2e <;> nextstate(main 7 -e:1) v:{ +# 2f <#> gvsv[*init] s +# 2g <1> postinc[t3] sK/1 +# 2h <1> leavesub[1 ref] K/REFC,1 # CHECK 1: -# 1y <;> nextstate(main 5 -e:1) v:>,<,%,{ -# 1z <#> gvsv[*chk] s -# 20 <1> postinc[t3] sK/1 -# 21 <1> leavesub[1 ref] K/REFC,1 +# 2i <;> nextstate(main 5 -e:1) v:{ +# 2j <#> gvsv[*chk] s +# 2k <1> postinc[t3] sK/1 +# 2l <1> leavesub[1 ref] K/REFC,1 # UNITCHECK 1: -# 22 <;> nextstate(main 11 -e:1) v:>,<,%,{ -# 23 <#> gvsv[*uc] s -# 24 <1> postinc[t3] sK/1 -# 25 <1> leavesub[1 ref] K/REFC,1 +# 2m <;> nextstate(main 11 -e:1) v:{ +# 2n <#> gvsv[*uc] s +# 2o <1> postinc[t3] sK/1 +# 2p <1> leavesub[1 ref] K/REFC,1 EOT_EOT # BEGIN 1: -# 1 <;> nextstate(B::Concise -1151 Concise.pm:116) v:*,&,{,x*,x&,x$,$ -# 2 <$> gv(*STDOUT) s -# 3 <1> rv2gv sKRM/STRICT,1 -# 4 <1> srefgen sK/1 -# 5 <$> gvsv(*B::Concise::walkHandle) s -# 6 <2> sassign sKS/2 -# 7 <1> leavesub[1 ref] K/REFC,1 +# 1 <;> nextstate(Exporter::Heavy -1410 Heavy.pm:4) v:*,&,{,x*,x&,x$,$ +# 2 <$> const(PV "strict.pm") s/BARE +# 3 <1> require sK/1 +# 4 <;> nextstate(Exporter::Heavy -1410 Heavy.pm:4) :*,&,{,x*,x&,x$,$ +# 5 <0> pushmark s +# 6 <$> const(PV "strict") sM +# 7 <$> const(PV "refs") sM +# 8 <.> method_named(PV "unimport") +# 9 <1> entersub[t1] KRS*/TARG,STRICT +# a <1> leavesub[1 ref] K/REFC,1 # BEGIN 2: -# 8 <;> nextstate(B::Concise -1113 Concise.pm:181) v:*,&,x*,x&,x$,$ -# 9 <$> const(PV "strict.pm") s/BARE -# a <1> require sK/1 -# b <;> nextstate(B::Concise -1113 Concise.pm:181) :*,&,x*,x&,x$,$ -# c <0> pushmark s -# d <$> const(PV "strict") sM -# e <$> const(PV "refs") sM -# f <.> method_named(PV "unimport") -# g <1> entersub[t1] KRS*/TARG,STRICT -# h <1> leavesub[1 ref] K/REFC,1 +# b <;> nextstate(Exporter::Heavy -1251 Heavy.pm:202) v:*,&,{,x*,x&,x$ +# c <$> const(PV "warnings.pm") s/BARE +# d <1> require sK/1 +# e <;> nextstate(Exporter::Heavy -1251 Heavy.pm:202) :*,&,{,x*,x&,x$ +# f <0> pushmark s +# g <$> const(PV "warnings") sM +# h <$> const(PV "once") sM +# i <.> method_named(PV "unimport") +# j <1> entersub[t1] KRS*/TARG +# k <1> leavesub[1 ref] K/REFC,1 # BEGIN 3: -# i <;> nextstate(B::Concise -1010 Concise.pm:303) v:*,&,x*,x&,x$,$ -# j <$> const(PV "strict.pm") s/BARE -# k <1> require sK/1 -# l <;> nextstate(B::Concise -1010 Concise.pm:303) :*,&,x*,x&,x$,$ -# m <0> pushmark s -# n <$> const(PV "strict") sM -# o <$> const(PV "refs") sM -# p <.> method_named(PV "unimport") -# q <1> entersub[t1] KRS*/TARG,STRICT +# l <;> nextstate(B::Concise -1175 Concise.pm:117) v:*,&,{,x*,x&,x$,$ +# m <$> gv(*STDOUT) s +# n <1> rv2gv sKRM/STRICT,1 +# o <1> srefgen sK/1 +# p <$> gvsv(*B::Concise::walkHandle) s +# q <2> sassign sKS/2 # r <1> leavesub[1 ref] K/REFC,1 # BEGIN 4: -# s <;> nextstate(B::Concise -963 Concise.pm:368) v:*,&,{,x*,x&,x$,$ +# s <;> nextstate(B::Concise -1134 Concise.pm:183) v:*,&,x*,x&,x$,$ # t <$> const(PV "strict.pm") s/BARE # u <1> require sK/1 -# v <;> nextstate(B::Concise -963 Concise.pm:368) :*,&,{,x*,x&,x$,$ +# v <;> nextstate(B::Concise -1134 Concise.pm:183) :*,&,x*,x&,x$,$ # w <0> pushmark s # x <$> const(PV "strict") sM # y <$> const(PV "refs") sM @@ -447,10 +526,10 @@ EOT_EOT # 10 <1> entersub[t1] KRS*/TARG,STRICT # 11 <1> leavesub[1 ref] K/REFC,1 # BEGIN 5: -# 12 <;> nextstate(B::Concise -938 Concise.pm:388) v:*,&,x*,x&,x$,$ +# 12 <;> nextstate(B::Concise -1031 Concise.pm:305) v:*,&,x*,x&,x$,$ # 13 <$> const(PV "strict.pm") s/BARE # 14 <1> require sK/1 -# 15 <;> nextstate(B::Concise -938 Concise.pm:388) :*,&,x*,x&,x$,$ +# 15 <;> nextstate(B::Concise -1031 Concise.pm:305) :*,&,x*,x&,x$,$ # 16 <0> pushmark s # 17 <$> const(PV "strict") sM # 18 <$> const(PV "refs") sM @@ -458,41 +537,63 @@ EOT_EOT # 1a <1> entersub[t1] KRS*/TARG,STRICT # 1b <1> leavesub[1 ref] K/REFC,1 # BEGIN 6: -# 1c <;> nextstate(B::Concise -924 Concise.pm:408) v:*,&,{,x*,x&,x$,$ -# 1d <$> const(PV "warnings.pm") s/BARE +# 1c <;> nextstate(B::Concise -984 Concise.pm:370) v:*,&,{,x*,x&,x$,$ +# 1d <$> const(PV "strict.pm") s/BARE # 1e <1> require sK/1 -# 1f <;> nextstate(B::Concise -924 Concise.pm:408) :*,&,{,x*,x&,x$,$ +# 1f <;> nextstate(B::Concise -984 Concise.pm:370) :*,&,{,x*,x&,x$,$ # 1g <0> pushmark s -# 1h <$> const(PV "warnings") sM -# 1i <$> const(PV "qw") sM +# 1h <$> const(PV "strict") sM +# 1i <$> const(PV "refs") sM # 1j <.> method_named(PV "unimport") # 1k <1> entersub[t1] KRS*/TARG,STRICT # 1l <1> leavesub[1 ref] K/REFC,1 # BEGIN 7: -# 1m <;> nextstate(main 3 -e:1) v:>,<,%,{ -# 1n <$> gvsv(*beg) s -# 1o <1> postinc[t2] sK/1 -# 1p <1> leavesub[1 ref] K/REFC,1 +# 1m <;> nextstate(B::Concise -959 Concise.pm:390) v:*,&,x*,x&,x$,$ +# 1n <$> const(PV "strict.pm") s/BARE +# 1o <1> require sK/1 +# 1p <;> nextstate(B::Concise -959 Concise.pm:390) :*,&,x*,x&,x$,$ +# 1q <0> pushmark s +# 1r <$> const(PV "strict") sM +# 1s <$> const(PV "refs") sM +# 1t <.> method_named(PV "unimport") +# 1u <1> entersub[t1] KRS*/TARG,STRICT +# 1v <1> leavesub[1 ref] K/REFC,1 +# BEGIN 8: +# 1w <;> nextstate(B::Concise -945 Concise.pm:410) v:*,&,{,x*,x&,x$,$ +# 1x <$> const(PV "warnings.pm") s/BARE +# 1y <1> require sK/1 +# 1z <;> nextstate(B::Concise -945 Concise.pm:410) :*,&,{,x*,x&,x$,$ +# 20 <0> pushmark s +# 21 <$> const(PV "warnings") sM +# 22 <$> const(PV "qw") sM +# 23 <.> method_named(PV "unimport") +# 24 <1> entersub[t1] KRS*/TARG,STRICT +# 25 <1> leavesub[1 ref] K/REFC,1 +# BEGIN 9: +# 26 <;> nextstate(main 3 -e:1) v:{ +# 27 <$> gvsv(*beg) s +# 28 <1> postinc[t2] sK/1 +# 29 <1> leavesub[1 ref] K/REFC,1 # END 1: -# 1q <;> nextstate(main 9 -e:1) v:>,<,%,{ -# 1r <$> gvsv(*end) s -# 1s <1> postinc[t2] sK/1 -# 1t <1> leavesub[1 ref] K/REFC,1 +# 2a <;> nextstate(main 9 -e:1) v:{ +# 2b <$> gvsv(*end) s +# 2c <1> postinc[t2] sK/1 +# 2d <1> leavesub[1 ref] K/REFC,1 # INIT 1: -# 1u <;> nextstate(main 7 -e:1) v:>,<,%,{ -# 1v <$> gvsv(*init) s -# 1w <1> postinc[t2] sK/1 -# 1x <1> leavesub[1 ref] K/REFC,1 +# 2e <;> nextstate(main 7 -e:1) v:{ +# 2f <$> gvsv(*init) s +# 2g <1> postinc[t2] sK/1 +# 2h <1> leavesub[1 ref] K/REFC,1 # CHECK 1: -# 1y <;> nextstate(main 5 -e:1) v:>,<,%,{ -# 1z <$> gvsv(*chk) s -# 20 <1> postinc[t2] sK/1 -# 21 <1> leavesub[1 ref] K/REFC,1 +# 2i <;> nextstate(main 5 -e:1) v:{ +# 2j <$> gvsv(*chk) s +# 2k <1> postinc[t2] sK/1 +# 2l <1> leavesub[1 ref] K/REFC,1 # UNITCHECK 1: -# 22 <;> nextstate(main 11 -e:1) v:>,<,%,{ -# 23 <$> gvsv(*uc) s -# 24 <1> postinc[t2] sK/1 -# 25 <1> leavesub[1 ref] K/REFC,1 +# 2m <;> nextstate(main 11 -e:1) v:{ +# 2n <$> gvsv(*uc) s +# 2o <1> postinc[t2] sK/1 +# 2p <1> leavesub[1 ref] K/REFC,1 EONT_EONT # perl "-I../lib" -MO=Concise,BEGIN,CHECK,INIT,END,-exec -e '$a=$b && print q/foo/' @@ -502,40 +603,40 @@ checkOptree ( name => 'regression test for patch 25352', prog => 'print q/foo/', expect => <<'EOT_EOT', expect_nt => <<'EONT_EONT'); # BEGIN 1: -# 1 <;> nextstate(B::Concise -275 Concise.pm:356) v:*,&,{,x*,x&,x$,$ -# 2 <#> gv[*STDOUT] s -# 3 <1> rv2gv sKRM/STRICT,1 -# 4 <1> srefgen sK/1 -# 5 <#> gvsv[*B::Concise::walkHandle] s -# 6 <2> sassign sKS/2 -# 7 <1> leavesub[1 ref] K/REFC,1 +# 1 <;> nextstate(Exporter::Heavy -1410 Heavy.pm:4) v:*,&,{,x*,x&,x$,$ +# 2 <$> const[PV "strict.pm"] s/BARE +# 3 <1> require sK/1 +# 4 <;> nextstate(Exporter::Heavy -1410 Heavy.pm:4) :*,&,{,x*,x&,x$,$ +# 5 <0> pushmark s +# 6 <$> const[PV "strict"] sM +# 7 <$> const[PV "refs"] sM +# 8 <.> method_named[PV "unimport"] +# 9 <1> entersub[t1] KRS*/TARG,STRICT +# a <1> leavesub[1 ref] K/REFC,1 # BEGIN 2: -# 8 <;> nextstate(B::Concise -1113 Concise.pm:181) v:*,&,x*,x&,x$,$ -# 9 <$> const[PV "strict.pm"] s/BARE -# a <1> require sK/1 -# b <;> nextstate(B::Concise -1113 Concise.pm:181) :*,&,x*,x&,x$,$ -# c <0> pushmark s -# d <$> const[PV "strict"] sM -# e <$> const[PV "refs"] sM -# f <.> method_named[PV "unimport"] -# g <1> entersub[t1] KRS*/TARG,STRICT -# h <1> leavesub[1 ref] K/REFC,1 +# b <;> nextstate(Exporter::Heavy -1251 Heavy.pm:202) v:*,&,{,x*,x&,x$ +# c <$> const[PV "warnings.pm"] s/BARE +# d <1> require sK/1 +# e <;> nextstate(Exporter::Heavy -1251 Heavy.pm:202) :*,&,{,x*,x&,x$ +# f <0> pushmark s +# g <$> const[PV "warnings"] sM +# h <$> const[PV "once"] sM +# i <.> method_named[PV "unimport"] +# j <1> entersub[t1] KRS*/TARG +# k <1> leavesub[1 ref] K/REFC,1 # BEGIN 3: -# i <;> nextstate(B::Concise -1010 Concise.pm:303) v:*,&,x*,x&,x$,$ -# j <$> const[PV "strict.pm"] s/BARE -# k <1> require sK/1 -# l <;> nextstate(B::Concise -1010 Concise.pm:303) :*,&,x*,x&,x$,$ -# m <0> pushmark s -# n <$> const[PV "strict"] sM -# o <$> const[PV "refs"] sM -# p <.> method_named[PV "unimport"] -# q <1> entersub[t1] KRS*/TARG,STRICT +# l <;> nextstate(B::Concise -1175 Concise.pm:117) v:*,&,{,x*,x&,x$,$ +# m <#> gv[*STDOUT] s +# n <1> rv2gv sKRM/STRICT,1 +# o <1> srefgen sK/1 +# p <#> gvsv[*B::Concise::walkHandle] s +# q <2> sassign sKS/2 # r <1> leavesub[1 ref] K/REFC,1 # BEGIN 4: -# s <;> nextstate(B::Concise -963 Concise.pm:368) v:*,&,{,x*,x&,x$,$ +# s <;> nextstate(B::Concise -1134 Concise.pm:183) v:*,&,x*,x&,x$,$ # t <$> const[PV "strict.pm"] s/BARE # u <1> require sK/1 -# v <;> nextstate(B::Concise -963 Concise.pm:368) :*,&,{,x*,x&,x$,$ +# v <;> nextstate(B::Concise -1134 Concise.pm:183) :*,&,x*,x&,x$,$ # w <0> pushmark s # x <$> const[PV "strict"] sM # y <$> const[PV "refs"] sM @@ -543,10 +644,10 @@ checkOptree ( name => 'regression test for patch 25352', # 10 <1> entersub[t1] KRS*/TARG,STRICT # 11 <1> leavesub[1 ref] K/REFC,1 # BEGIN 5: -# 12 <;> nextstate(B::Concise -938 Concise.pm:388) v:*,&,x*,x&,x$,$ +# 12 <;> nextstate(B::Concise -1031 Concise.pm:305) v:*,&,x*,x&,x$,$ # 13 <$> const[PV "strict.pm"] s/BARE # 14 <1> require sK/1 -# 15 <;> nextstate(B::Concise -938 Concise.pm:388) :*,&,x*,x&,x$,$ +# 15 <;> nextstate(B::Concise -1031 Concise.pm:305) :*,&,x*,x&,x$,$ # 16 <0> pushmark s # 17 <$> const[PV "strict"] sM # 18 <$> const[PV "refs"] sM @@ -554,52 +655,74 @@ checkOptree ( name => 'regression test for patch 25352', # 1a <1> entersub[t1] KRS*/TARG,STRICT # 1b <1> leavesub[1 ref] K/REFC,1 # BEGIN 6: -# 1c <;> nextstate(B::Concise -924 Concise.pm:408) v:*,&,{,x*,x&,x$,$ -# 1d <$> const[PV "warnings.pm"] s/BARE +# 1c <;> nextstate(B::Concise -984 Concise.pm:370) v:*,&,{,x*,x&,x$,$ +# 1d <$> const[PV "strict.pm"] s/BARE # 1e <1> require sK/1 -# 1f <;> nextstate(B::Concise -924 Concise.pm:408) :*,&,{,x*,x&,x$,$ +# 1f <;> nextstate(B::Concise -984 Concise.pm:370) :*,&,{,x*,x&,x$,$ # 1g <0> pushmark s -# 1h <$> const[PV "warnings"] sM -# 1i <$> const[PV "qw"] sM +# 1h <$> const[PV "strict"] sM +# 1i <$> const[PV "refs"] sM # 1j <.> method_named[PV "unimport"] # 1k <1> entersub[t1] KRS*/TARG,STRICT # 1l <1> leavesub[1 ref] K/REFC,1 +# BEGIN 7: +# 1m <;> nextstate(B::Concise -959 Concise.pm:390) v:*,&,x*,x&,x$,$ +# 1n <$> const[PV "strict.pm"] s/BARE +# 1o <1> require sK/1 +# 1p <;> nextstate(B::Concise -959 Concise.pm:390) :*,&,x*,x&,x$,$ +# 1q <0> pushmark s +# 1r <$> const[PV "strict"] sM +# 1s <$> const[PV "refs"] sM +# 1t <.> method_named[PV "unimport"] +# 1u <1> entersub[t1] KRS*/TARG,STRICT +# 1v <1> leavesub[1 ref] K/REFC,1 +# BEGIN 8: +# 1w <;> nextstate(B::Concise -945 Concise.pm:410) v:*,&,{,x*,x&,x$,$ +# 1x <$> const[PV "warnings.pm"] s/BARE +# 1y <1> require sK/1 +# 1z <;> nextstate(B::Concise -945 Concise.pm:410) :*,&,{,x*,x&,x$,$ +# 20 <0> pushmark s +# 21 <$> const[PV "warnings"] sM +# 22 <$> const[PV "qw"] sM +# 23 <.> method_named[PV "unimport"] +# 24 <1> entersub[t1] KRS*/TARG,STRICT +# 25 <1> leavesub[1 ref] K/REFC,1 EOT_EOT # BEGIN 1: -# 1 <;> nextstate(B::Concise -1151 Concise.pm:116) v:*,&,{,x*,x&,x$,$ -# 2 <$> gv(*STDOUT) s -# 3 <1> rv2gv sKRM/STRICT,1 -# 4 <1> srefgen sK/1 -# 5 <$> gvsv(*B::Concise::walkHandle) s -# 6 <2> sassign sKS/2 -# 7 <1> leavesub[1 ref] K/REFC,1 +# 1 <;> nextstate(Exporter::Heavy -1410 Heavy.pm:4) v:*,&,{,x*,x&,x$,$ +# 2 <$> const(PV "strict.pm") s/BARE +# 3 <1> require sK/1 +# 4 <;> nextstate(Exporter::Heavy -1410 Heavy.pm:4) :*,&,{,x*,x&,x$,$ +# 5 <0> pushmark s +# 6 <$> const(PV "strict") sM +# 7 <$> const(PV "refs") sM +# 8 <.> method_named(PV "unimport") +# 9 <1> entersub[t1] KRS*/TARG,STRICT +# a <1> leavesub[1 ref] K/REFC,1 # BEGIN 2: -# 8 <;> nextstate(B::Concise -1113 Concise.pm:181) v:*,&,x*,x&,x$,$ -# 9 <$> const(PV "strict.pm") s/BARE -# a <1> require sK/1 -# b <;> nextstate(B::Concise -1113 Concise.pm:181) :*,&,x*,x&,x$,$ -# c <0> pushmark s -# d <$> const(PV "strict") sM -# e <$> const(PV "refs") sM -# f <.> method_named(PV "unimport") -# g <1> entersub[t1] KRS*/TARG,STRICT -# h <1> leavesub[1 ref] K/REFC,1 +# b <;> nextstate(Exporter::Heavy -1251 Heavy.pm:202) v:*,&,{,x*,x&,x$ +# c <$> const(PV "warnings.pm") s/BARE +# d <1> require sK/1 +# e <;> nextstate(Exporter::Heavy -1251 Heavy.pm:202) :*,&,{,x*,x&,x$ +# f <0> pushmark s +# g <$> const(PV "warnings") sM +# h <$> const(PV "once") sM +# i <.> method_named(PV "unimport") +# j <1> entersub[t1] KRS*/TARG +# k <1> leavesub[1 ref] K/REFC,1 # BEGIN 3: -# i <;> nextstate(B::Concise -1010 Concise.pm:303) v:*,&,x*,x&,x$,$ -# j <$> const(PV "strict.pm") s/BARE -# k <1> require sK/1 -# l <;> nextstate(B::Concise -1010 Concise.pm:303) :*,&,x*,x&,x$,$ -# m <0> pushmark s -# n <$> const(PV "strict") sM -# o <$> const(PV "refs") sM -# p <.> method_named(PV "unimport") -# q <1> entersub[t1] KRS*/TARG,STRICT +# l <;> nextstate(B::Concise -1175 Concise.pm:117) v:*,&,{,x*,x&,x$,$ +# m <$> gv(*STDOUT) s +# n <1> rv2gv sKRM/STRICT,1 +# o <1> srefgen sK/1 +# p <$> gvsv(*B::Concise::walkHandle) s +# q <2> sassign sKS/2 # r <1> leavesub[1 ref] K/REFC,1 # BEGIN 4: -# s <;> nextstate(B::Concise -963 Concise.pm:368) v:*,&,{,x*,x&,x$,$ +# s <;> nextstate(B::Concise -1134 Concise.pm:183) v:*,&,x*,x&,x$,$ # t <$> const(PV "strict.pm") s/BARE # u <1> require sK/1 -# v <;> nextstate(B::Concise -963 Concise.pm:368) :*,&,{,x*,x&,x$,$ +# v <;> nextstate(B::Concise -1134 Concise.pm:183) :*,&,x*,x&,x$,$ # w <0> pushmark s # x <$> const(PV "strict") sM # y <$> const(PV "refs") sM @@ -607,10 +730,10 @@ EOT_EOT # 10 <1> entersub[t1] KRS*/TARG,STRICT # 11 <1> leavesub[1 ref] K/REFC,1 # BEGIN 5: -# 12 <;> nextstate(B::Concise -938 Concise.pm:388) v:*,&,x*,x&,x$,$ +# 12 <;> nextstate(B::Concise -1031 Concise.pm:305) v:*,&,x*,x&,x$,$ # 13 <$> const(PV "strict.pm") s/BARE # 14 <1> require sK/1 -# 15 <;> nextstate(B::Concise -938 Concise.pm:388) :*,&,x*,x&,x$,$ +# 15 <;> nextstate(B::Concise -1031 Concise.pm:305) :*,&,x*,x&,x$,$ # 16 <0> pushmark s # 17 <$> const(PV "strict") sM # 18 <$> const(PV "refs") sM @@ -618,14 +741,36 @@ EOT_EOT # 1a <1> entersub[t1] KRS*/TARG,STRICT # 1b <1> leavesub[1 ref] K/REFC,1 # BEGIN 6: -# 1c <;> nextstate(B::Concise -924 Concise.pm:408) v:*,&,{,x*,x&,x$,$ -# 1d <$> const(PV "warnings.pm") s/BARE +# 1c <;> nextstate(B::Concise -984 Concise.pm:370) v:*,&,{,x*,x&,x$,$ +# 1d <$> const(PV "strict.pm") s/BARE # 1e <1> require sK/1 -# 1f <;> nextstate(B::Concise -924 Concise.pm:408) :*,&,{,x*,x&,x$,$ +# 1f <;> nextstate(B::Concise -984 Concise.pm:370) :*,&,{,x*,x&,x$,$ # 1g <0> pushmark s -# 1h <$> const(PV "warnings") sM -# 1i <$> const(PV "qw") sM +# 1h <$> const(PV "strict") sM +# 1i <$> const(PV "refs") sM # 1j <.> method_named(PV "unimport") # 1k <1> entersub[t1] KRS*/TARG,STRICT # 1l <1> leavesub[1 ref] K/REFC,1 +# BEGIN 7: +# 1m <;> nextstate(B::Concise -959 Concise.pm:390) v:*,&,x*,x&,x$,$ +# 1n <$> const(PV "strict.pm") s/BARE +# 1o <1> require sK/1 +# 1p <;> nextstate(B::Concise -959 Concise.pm:390) :*,&,x*,x&,x$,$ +# 1q <0> pushmark s +# 1r <$> const(PV "strict") sM +# 1s <$> const(PV "refs") sM +# 1t <.> method_named(PV "unimport") +# 1u <1> entersub[t1] KRS*/TARG,STRICT +# 1v <1> leavesub[1 ref] K/REFC,1 +# BEGIN 8: +# 1w <;> nextstate(B::Concise -945 Concise.pm:410) v:*,&,{,x*,x&,x$,$ +# 1x <$> const(PV "warnings.pm") s/BARE +# 1y <1> require sK/1 +# 1z <;> nextstate(B::Concise -945 Concise.pm:410) :*,&,{,x*,x&,x$,$ +# 20 <0> pushmark s +# 21 <$> const(PV "warnings") sM +# 22 <$> const(PV "qw") sM +# 23 <.> method_named(PV "unimport") +# 24 <1> entersub[t1] KRS*/TARG,STRICT +# 25 <1> leavesub[1 ref] K/REFC,1 EONT_EONT diff --git a/gnu/usr.bin/perl/ext/B/t/optree_varinit.t b/gnu/usr.bin/perl/ext/B/t/optree_varinit.t index 8312df029d0..d89afc24f33 100755 --- a/gnu/usr.bin/perl/ext/B/t/optree_varinit.t +++ b/gnu/usr.bin/perl/ext/B/t/optree_varinit.t @@ -7,13 +7,8 @@ BEGIN { print "1..0 # Skip -- Perl configured without B module\n"; exit 0; } - if (!$Config::Config{useperlio}) { - print "1..0 # Skip -- need perlio to walk the optree\n"; - exit 0; - } } use OptreeCheck; -use Config; plan tests => 42; pass("OPTIMIZER TESTS - VAR INITIALIZATION"); diff --git a/gnu/usr.bin/perl/ext/B/t/showlex.t b/gnu/usr.bin/perl/ext/B/t/showlex.t index f92ac9ea7ea..9d835dd3b37 100644 --- a/gnu/usr.bin/perl/ext/B/t/showlex.t +++ b/gnu/usr.bin/perl/ext/B/t/showlex.t @@ -13,25 +13,17 @@ BEGIN { $| = 1; use warnings; use strict; -use Config; use B::Showlex (); plan tests => 15; my $verbose = @ARGV; # set if ANY ARGS -my $a; - my $path = join " ", map { qq["-I$_"] } @INC; -my $is_thread = $Config{use5005threads} && $Config{use5005threads} eq 'define'; - -if ($is_thread) { - ok "# use5005threads: test skipped\n"; -} else { - $a = `$^X $path "-MO=Showlex" -e "my \@one" 2>&1`; - like ($a, qr/undef.*: \([^)]*\) \@one.*Nullsv.*AV/s, - "canonical usage works"); -} + +my $o = `$^X $path "-MO=Showlex" -e "my \@one" 2>&1`; +like ($o, qr/undef.*: \([^)]*\) \@one.*Nullsv.*AV/s, + "canonical usage works"); # v1.01 tests @@ -56,10 +48,6 @@ for $newlex ('', '-newlex') { print $out if $verbose; -SKIP: { - skip "no perlio in this build", 5 - unless $Config::Config{useperlio}; - our $buf = 'arb startval'; my $ak = B::Showlex::walk_output (\$buf); @@ -109,4 +97,3 @@ SKIP: { $walker->(); } -} diff --git a/gnu/usr.bin/perl/ext/B/typemap b/gnu/usr.bin/perl/ext/B/typemap index 045d6a0f717..d891f9d7d50 100644 --- a/gnu/usr.bin/perl/ext/B/typemap +++ b/gnu/usr.bin/perl/ext/B/typemap @@ -27,6 +27,7 @@ B::HV T_SV_OBJ B::AV T_SV_OBJ B::IO T_SV_OBJ B::FM T_SV_OBJ +B::INVLIST T_SV_OBJ B::MAGIC T_MG_OBJ SSize_t T_IV diff --git a/gnu/usr.bin/perl/ext/Devel-Peek/Peek.pm b/gnu/usr.bin/perl/ext/Devel-Peek/Peek.pm index bd56b86a60c..68e6768ebf0 100644 --- a/gnu/usr.bin/perl/ext/Devel-Peek/Peek.pm +++ b/gnu/usr.bin/perl/ext/Devel-Peek/Peek.pm @@ -3,14 +3,13 @@ package Devel::Peek; -$VERSION = '1.28'; +$VERSION = '1.32'; $XS_VERSION = $VERSION; $VERSION = eval $VERSION; require Exporter; require XSLoader; -@ISA = qw(Exporter); @EXPORT = qw(Dump mstat DeadCode DumpArray DumpWithOP DumpProg fill_mstats mstats_fillhash mstats2hash runops_debug debug_flags); @EXPORT_OK = qw(SvREFCNT CvGV); @@ -119,7 +118,7 @@ All output is to STDERR. The C function takes one or two arguments: something to dump, and an optional limit for recursion and array elements (default is 4). The -first argument is evaluted in rvalue scalar context, with exceptions for +first argument is evaluated in rvalue scalar context, with exceptions for @array and %hash, which dump the array or hash itself. So C works, as does C. And C will call C in rvalue context, whereas C will call it in lvalue context. diff --git a/gnu/usr.bin/perl/ext/Devel-Peek/Peek.xs b/gnu/usr.bin/perl/ext/Devel-Peek/Peek.xs index 8a8c0b96d76..0befd9ee421 100644 --- a/gnu/usr.bin/perl/ext/Devel-Peek/Peek.xs +++ b/gnu/usr.bin/perl/ext/Devel-Peek/Peek.xs @@ -239,9 +239,7 @@ _mstats_to_hv(HV *hv, const struct mstats_buffer *b, int level) croak("Unexpected value for the key '%s' in the mstats hash", types[type]); if (!SvOK(*svp)) { av = newAV(); - (void)SvUPGRADE(*svp, SVt_RV); - SvRV_set(*svp, (SV*)av); - SvROK_on(*svp); + sv_setrv_noinc(*svp, (SV*)av); } else av = (AV*)SvRV(*svp); @@ -328,7 +326,6 @@ mstats2hash(SV *sv, SV *rv, int level) static void S_do_dump(pTHX_ SV *const sv, I32 lim) { - dVAR; SV *pv_lim_sv = perl_get_sv("Devel::Peek::pv_limit", 0); const STRLEN pv_lim = pv_lim_sv ? SvIV(pv_lim_sv) : 0; SV *dumpop = perl_get_sv("Devel::Peek::dump_ops", 0); diff --git a/gnu/usr.bin/perl/ext/Devel-Peek/t/Peek.t b/gnu/usr.bin/perl/ext/Devel-Peek/t/Peek.t index ef41b62c5a3..6ad108754f9 100755 --- a/gnu/usr.bin/perl/ext/Devel-Peek/t/Peek.t +++ b/gnu/usr.bin/perl/ext/Devel-Peek/t/Peek.t @@ -8,14 +8,24 @@ BEGIN { } { package t; - my $core = !!$ENV{PERL_CORE}; - require($core ? '../../t/test.pl' : './t/test.pl'); + my $core = !!$ENV{PERL_CORE}; + if ($core) { + require '../../t/test.pl'; + require '../../t/charset_tools.pl'; + } + else { + require './t/test.pl'; + require './t/charset_tools.pl'; + } } } use Test::More; -use Devel::Peek; +BEGIN { + use_ok 'Devel::Peek'; +} +require Tie::Hash; our $DEBUG = 0; open(SAVERR, ">&STDERR") or die "Can't dup STDERR: $!"; @@ -38,9 +48,11 @@ sub do_test { my $pattern = $_[2]; my $do_eval = $_[5]; if (open(OUT,'>', "peek$$")) { - open(STDERR, ">&OUT") or die "Can't dup OUT: $!"; + my $setup_stderr = sub { open(STDERR, ">&OUT") or die "Can't dup OUT: $!" }; if ($do_eval) { my $sub = eval "sub { Dump $_[1] }"; + die $@ if $@; + $setup_stderr->(); $sub->(); print STDERR "*****\n"; # second dump to compare with the first to make sure nothing @@ -48,6 +60,7 @@ sub do_test { $sub->(); } else { + $setup_stderr->(); Dump($_[1]); print STDERR "*****\n"; # second dump to compare with the first to make sure nothing @@ -92,6 +105,11 @@ sub do_test { if $Config{ccflags} =~ /-DPERL_(?:OLD_COPY_ON_WRITE|NO_COW)\b/ || $] < 5.019003; + if ($Config::Config{ccflags} =~ /-DNODEFAULT_SHAREKEYS\b/) { + $pattern =~ s/,SHAREKEYS\b//g; + $pattern =~ s/\bSHAREKEYS,//g; + $pattern =~ s/\bSHAREKEYS\b//g; + } print $pattern, "\n" if $DEBUG; my ($dump, $dump2) = split m/\*\*\*\*\*\n/, scalar ; print $dump, "\n" if $DEBUG; @@ -234,6 +252,30 @@ do_test('reference to scalar', COW_REFCNT = 1 '); +do_test('immediate boolean', + !!0, +'SV = PVNV\\($ADDR\\) at $ADDR + REFCNT = \d+ + FLAGS = \\(.*\\) + IV = 0 + NV = 0 + PV = $ADDR "" \[BOOL PL_No\] + CUR = 0 + LEN = 0 +') if $] >= 5.035004; + +do_test('assignment of boolean', + do { my $tmp = !!1 }, +'SV = PVNV\\($ADDR\\) at $ADDR + REFCNT = \d+ + FLAGS = \\(.*\\) + IV = 1 + NV = 1 + PV = $ADDR "1" \[BOOL PL_Yes\] + CUR = 1 + LEN = 0 +') if $] >= 5.035004; + my $c_pattern; if ($type eq 'N') { $c_pattern = ' @@ -342,6 +384,8 @@ do_test('reference to named subroutine without prototype', \\d+\\. $ADDR<\\d+> \\(\\d+,\\d+\\) "\\$repeat_todo" \\d+\\. $ADDR<\\d+> \\(\\d+,\\d+\\) "\\$pattern" \\d+\\. $ADDR<\\d+> \\(\\d+,\\d+\\) "\\$do_eval" +\s+\\d+\\. $ADDR<\\d+> \\(\\d+,\\d+\\) "\\$setup_stderr" +\s+\\d+\\. $ADDR<\\d+> \\(\\d+,\\d+\\) "&" \\d+\\. $ADDR<\\d+> \\(\\d+,\\d+\\) "\\$sub" \\d+\\. $ADDR<\\d+> FAKE "\\$DEBUG" flags=0x0 index=0 \\d+\\. $ADDR<\\d+> \\(\\d+,\\d+\\) "\\$dump" @@ -483,60 +527,33 @@ do_test('typeglob', FLAGS = $ADDR # $] < 5.021004 EGV = $ADDR\\t"a"'); -if (ord('A') == 193) { -do_test('string with Unicode', - chr(256).chr(0).chr(512), -'SV = PV\\($ADDR\\) at $ADDR - REFCNT = 1 - FLAGS = \\((?:PADTMP,)?POK,READONLY,pPOK,UTF8\\) # $] < 5.019003 - FLAGS = \\((?:PADTMP,)?POK,(?:IsCOW,)?pPOK,UTF8\\) # $] >=5.019003 - PV = $ADDR "\\\214\\\101\\\0\\\235\\\101"\\\0 \[UTF8 "\\\x\{100\}\\\x\{0\}\\\x\{200\}"\] - CUR = 5 - LEN = \\d+ - COW_REFCNT = 1 # $] < 5.019007 -'); -} else { +# Get native character set representations for these code points +my $cp100_bytes = t::byte_utf8a_to_utf8n("\xC4\x80"); +my $cp0_bytes = t::byte_utf8a_to_utf8n("\x00"); +my $cp200_bytes = t::byte_utf8a_to_utf8n("\xC8\x80"); + +# Convert to e.g., \\\\xC4 +my $prefix = '\\\\x'; +foreach my $ref (\$cp100_bytes, \$cp0_bytes, \$cp200_bytes) { + my $revised = ""; + $$ref =~ s/(.)/sprintf("$prefix%02X", ord $1)/eg; +} + do_test('string with Unicode', chr(256).chr(0).chr(512), 'SV = PV\\($ADDR\\) at $ADDR REFCNT = 1 FLAGS = \\((?:PADTMP,)?POK,READONLY,pPOK,UTF8\\) # $] < 5.019003 FLAGS = \\((?:PADTMP,)?POK,(?:IsCOW,)?pPOK,UTF8\\) # $] >=5.019003 - PV = $ADDR "\\\304\\\200\\\0\\\310\\\200"\\\0 \[UTF8 "\\\x\{100\}\\\x\{0\}\\\x\{200\}"\] + PV = $ADDR "' . $cp100_bytes + . $cp0_bytes + . $cp200_bytes + . '"\\\0 \[UTF8 "\\\x\{100\}\\\x\{0\}\\\x\{200\}"\] CUR = 5 LEN = \\d+ COW_REFCNT = 1 # $] < 5.019007 '); -} -if (ord('A') == 193) { -do_test('reference to hash containing Unicode', - {chr(256)=>chr(512)}, -'SV = $RV\\($ADDR\\) at $ADDR - REFCNT = 1 - FLAGS = \\(ROK\\) - RV = $ADDR - SV = PVHV\\($ADDR\\) at $ADDR - REFCNT = [12] - FLAGS = \\(SHAREKEYS,HASKFLAGS\\) - ARRAY = $ADDR \\(0:7, 1:1\\) - hash quality = 100.0% - KEYS = 1 - FILL = 1 - MAX = 7 - Elt "\\\214\\\101" \[UTF8 "\\\x\{100\}"\] HASH = $ADDR - SV = PV\\($ADDR\\) at $ADDR - REFCNT = 1 - FLAGS = \\(POK,(?:IsCOW,)?pPOK,UTF8\\) - PV = $ADDR "\\\235\\\101"\\\0 \[UTF8 "\\\x\{200\}"\] - CUR = 2 - LEN = \\d+ - COW_REFCNT = 1 # $] < 5.019007 -', '', - $] >= 5.015 - ? undef - : 'The hash iterator used in dump.c sets the OOK flag'); -} else { do_test('reference to hash containing Unicode', {chr(256)=>chr(512)}, 'SV = $RV\\($ADDR\\) at $ADDR @@ -551,11 +568,11 @@ do_test('reference to hash containing Unicode', KEYS = 1 FILL = 1 MAX = 7 - Elt "\\\304\\\200" \[UTF8 "\\\x\{100\}"\] HASH = $ADDR + Elt "' . $cp100_bytes . '" \[UTF8 "\\\x\{100\}"\] HASH = $ADDR SV = PV\\($ADDR\\) at $ADDR REFCNT = 1 FLAGS = \\(POK,(?:IsCOW,)?pPOK,UTF8\\) - PV = $ADDR "\\\310\\\200"\\\0 \[UTF8 "\\\x\{200\}"\] + PV = $ADDR "' . $cp200_bytes . '"\\\0 \[UTF8 "\\\x\{200\}"\] CUR = 2 LEN = \\d+ COW_REFCNT = 1 # $] < 5.019007 @@ -563,7 +580,6 @@ do_test('reference to hash containing Unicode', $] >= 5.015 ? undef : 'The hash iterator used in dump.c sets the OOK flag'); -} my $x=""; $x=~/.??/g; @@ -588,7 +604,7 @@ do_test('scalar with pos magic', '); # -# TAINTEDDIR is not set on: OS2, AMIGAOS, WIN32, MSDOS +# TAINTEDDIR is not set on: OS2, AMIGAOS, WIN32 # environment variables may be invisibly case-forced, hence the (?i:PATH) # C is turned into an IV on VMS hence the (?:IV)? # Perl 5.18 ensures all env vars end up as strings only, hence the (?:,pIOK)? @@ -984,6 +1000,35 @@ SV = PVHV\($ADDR\) at $ADDR IV = 2 HASH +tie %tied, "Tie::StdHash"; +do_test('Dump %tied', '%tied', <<'HASH', "", undef, 1); +SV = PVHV\($ADDR\) at $ADDR + REFCNT = 1 + FLAGS = \(RMG,SHAREKEYS\) + MAGIC = $ADDR + MG_VIRTUAL = &PL_vtbl_pack + MG_TYPE = PERL_MAGIC_tied\(P\) + MG_FLAGS = 0x02 + REFCOUNTED + MG_OBJ = $ADDR + SV = $RV\($ADDR\) at $ADDR + REFCNT = 1 + FLAGS = \(ROK\) + RV = $ADDR + SV = PVHV\($ADDR\) at $ADDR + REFCNT = 1 + FLAGS = \(OBJECT,SHAREKEYS\) + STASH = $ADDR "Tie::StdHash" + ARRAY = 0x0 + KEYS = 0 + FILL = 0 + MAX = 7 + ARRAY = 0x0 + KEYS = 0 + FILL = 0 + MAX = 7 +HASH + $_ = "hello"; do_test('rvalue substr', 'substr $_, 1, 2', <<'SUBSTR', '', undef, 1); SV = PV\($ADDR\) at $ADDR @@ -1503,4 +1548,58 @@ EODUMP $out =~ s/\(0x[0-9a-f]{3,}\)/(0xNNN)/g; is $out, $e, "DumpProg() has no 'Attempt to free X prematurely' warning"; } + +{ + my $epsilon_p = 1.0; + my $epsilon_n = 1.0; + if($Config{nvtype} eq 'long double' && + $Config{longdblkind} >= 5 && $Config{longdblkind} <= 8) { + # For this (doubledouble) kind of NV we need to use a separate + # method for assigning values to $epsilon_p and $epsilon_n. + # Theoretically, $epsilon_p should be set to 2 ** -107, and + # $epsilon_n to 2 ** -110. However, a known possible bug in "%.33g" + # formatting will render those values inaccurately, thereby + # incorrectly influencing the results of the "NV 1.0 + epsilon" + # and "NV 1.0 - epsilon" tests. So we test for the presence of + # the bug, and set both of those "epsilon" variables to + # 2 ** -105 if the bug is detected. + # See the discussion at https://github.com/Perl/perl5/issues/19585. + + if( sprintf("%.33g", 1.0 + (2 ** -108)) == 1 + && + sprintf("%.33g", 1.0 + (2 ** -107)) > 1 ) { + + $epsilon_p = 2 ** -107; + } + else { $epsilon_p = 2 ** -105 } # Avoids the formatting bug. + + if( sprintf("%.33g", 1.0 - (2 ** -111)) == 1 + && + sprintf("%.33g", 1.0 - (2 ** -110)) < 1 ) { + + $epsilon_n = 2 ** -110; + } + else { $epsilon_n = 2 ** -105 } # Avoids the formatting bug. + + } + else { + $epsilon_p /= 2 while 1.0 != 1.0 + $epsilon_p / 2; + $epsilon_n /= 2 while 1.0 != 1.0 - $epsilon_n / 2; + } + + my $head = 'SV = NV\($ADDR\) at $ADDR +(?:.+ +)* '; + my $tail = ' +(?:.+ +)*'; + + do_test('NV 1.0', 1.0, + $head . 'NV = 1' . $tail); + do_test('NV 1.0 + epsilon', 1.0 + $epsilon_p, + $head . 'NV = 1\.00000000\d+' . $tail); + do_test('NV 1.0 - epsilon', 1.0 - $epsilon_n, + $head . 'NV = 0\.99999999\d+' . $tail); +} + done_testing(); diff --git a/gnu/usr.bin/perl/ext/DynaLoader/DynaLoader_pm.PL b/gnu/usr.bin/perl/ext/DynaLoader/DynaLoader_pm.PL index 49d449976a7..93a858a0b34 100644 --- a/gnu/usr.bin/perl/ext/DynaLoader/DynaLoader_pm.PL +++ b/gnu/usr.bin/perl/ext/DynaLoader/DynaLoader_pm.PL @@ -73,6 +73,8 @@ print OUT <<'EOT'; # Generated from DynaLoader_pm.PL, this file is unique for every OS +use strict; + package DynaLoader; # And Gandalf said: 'Many folk like to know beforehand what is to @@ -88,9 +90,17 @@ package DynaLoader; # Tim.Bunce@ig.co.uk, August 1994 BEGIN { - $VERSION = '1.47_01'; + our $VERSION = '1.52'; } +# Note: in almost any other piece of code "our" would have been a better +# option than "use vars", but DynaLoader's bootstrap files need the +# side effect of the variable being declared in any scope whose current +# package is DynaLoader, not just the current lexical one. +use vars qw(@dl_library_path @dl_resolve_using @dl_require_symbols + $dl_debug @dl_librefs @dl_modules @dl_shared_objects + $dl_dlext $dl_so $dlsrc @args $module @dirs $file $bscode); + EOT if (!$ENV{PERL_BUILD_EXPAND_CONFIG_VARS}) { @@ -134,14 +144,11 @@ my @dl_library_path; print OUT expand_os_specific(<<'EOT'); -<<$^O-eq-VMS>> # Some systems need special handling to expand file specifications # (VMS support by Charles Bailey ) # See dl_expandspec() for more details. Should be harmless but # inefficient to define on systems that don't need it. -$Is_VMS = $^O eq 'VMS'; -<> -$do_expand = <<$^O-eq-VMS>>1<<|$^O-eq-VMS>>0<>; +my $do_expand = <<$^O-eq-VMS>>1<<|$^O-eq-VMS>>0<>; @dl_require_symbols = (); # names of symbols we need<<$^O-eq-freemint>> @dl_resolve_using = (); # names of files to link with<><<$^O-eq-hpux>> @@ -292,6 +299,8 @@ sub croak { require Carp; Carp::croak(@_) } sub bootstrap_inherit { my $module = $_[0]; + + no strict qw/refs vars/; local *isa = *{"$module\::ISA"}; local @isa = (@isa, 'DynaLoader'); # Cannot goto due to delocalization. Will report errors on a wrong line? @@ -331,13 +340,6 @@ sub bootstrap { # It may also edit @modparts if required. $modfname = &mod2fname(\@modparts) if defined &mod2fname; - <<$^O-eq-NetWare>> - # Truncate the module name to 8.3 format for NetWare - if ((length($modfname) > 8)) { - $modfname = substr($modfname, 0, 8); - } - <> - my $modpname = join('/',@modparts); print STDERR "DynaLoader::bootstrap for $module ", @@ -486,14 +488,6 @@ sub dl_findfile { push(@names, $_); } my $dirsep = '/'; - <<$^O-eq-symbian>> - $dirsep = '\\'; - if ($0 =~ /^([a-z]):/i) { - my $drive = $1; - @dirs = map { "$drive:$_" } @dirs; - @dl_library_path = map { "$drive:$_" } @dl_library_path; - } - <> foreach $dir (@dirs, @dl_library_path) { next unless -d $dir; <<$^O-eq-VMS>> diff --git a/gnu/usr.bin/perl/ext/DynaLoader/Makefile.PL b/gnu/usr.bin/perl/ext/DynaLoader/Makefile.PL index 864af3ed8e2..9e9a109ea2a 100644 --- a/gnu/usr.bin/perl/ext/DynaLoader/Makefile.PL +++ b/gnu/usr.bin/perl/ext/DynaLoader/Makefile.PL @@ -1,8 +1,9 @@ use strict; +use warnings; + use ExtUtils::MakeMaker; my $is_mswin = $^O eq 'MSWin32'; -my $is_netware = $^O eq 'NetWare'; my $is_vms = $^O eq 'VMS'; WriteMakefile( @@ -31,7 +32,7 @@ sub MY::cflags { sub MY::postamble { my $test_xs; - if ($is_mswin || $is_netware || $is_vms) { + if ($is_mswin || $is_vms) { $test_xs = ''; } else { $test_xs = <<'EOT'; @@ -54,7 +55,7 @@ DynaLoader.xs: $(DLSRC) sub MY::static { my $object; - if ($is_mswin || $is_netware) { + if ($is_mswin) { $object = '$(PERL_SRC)\\$(OBJECT)'; } elsif ($is_vms) { $object = '$(PERL_SRC)$(OBJECT)'; diff --git a/gnu/usr.bin/perl/ext/DynaLoader/dl_symbian.xs b/gnu/usr.bin/perl/ext/DynaLoader/dl_symbian.xs deleted file mode 100644 index c2d1094aeda..00000000000 --- a/gnu/usr.bin/perl/ext/DynaLoader/dl_symbian.xs +++ /dev/null @@ -1,245 +0,0 @@ -/* dl_symbian.xs - * - * Platform: Symbian 7.0s - * Author: Jarkko Hietaniemi - * Copyright: 2004, Nokia - * License: Artistic/GPL - * - */ - -/* - * In Symbian DLLs there is no name information, one can only access - * the functions by their ordinals. Perl, however, very much would like - * to load functions by their names. We fake this by having a special - * setup function at the ordinal 1 (this is arranged by building the DLLs - * in a special way). The setup function builds a Perl hash mapping the - * names to the ordinals, and the hash is then used by dlsym(). - * - */ - -#include -#include -#include - -/* This is a useful pattern: first include the Symbian headers, - * only after that the Perl ones. Otherwise you will get a lot - * trouble because of Symbian's New(), Copy(), etc definitions. */ - -#define PERL_EXT -#define PERL_IN_DL_SYMBIAN_XS - -#include "EXTERN.h" -#include "perl.h" -#include "XSUB.h" - -START_EXTERN_C - -void *dlopen(const char *filename, int flag); -void *dlsym(void *handle, const char *symbol); -int dlclose(void *handle); -const char *dlerror(void); - -extern void* memset(void *s, int c, size_t n); -extern size_t strlen(const char *s); - -END_EXTERN_C - -#include "dlutils.c" - -#define RTLD_LAZY 0x0001 -#define RTLD_NOW 0x0002 -#define RTLD_GLOBAL 0x0004 - -#ifndef NULL -# define NULL 0 -#endif - -/* No need to pull in symbian_dll.cpp for this. */ -#define symbian_get_vars() ((void*)Dll::Tls()) - -const TInt KPerlDllSetupFunction = 1; - -typedef struct { - RLibrary handle; - TInt error; - HV* symbols; -} PerlSymbianLibHandle; - -typedef void (*PerlSymbianLibInit)(void *); - -void* dlopen(const char *filename, int flags) { - TBuf16 utf16fn; - const TUint8* utf8fn = (const TUint8*)filename; - PerlSymbianLibHandle* h = NULL; - TInt error; - - error = - CnvUtfConverter::ConvertToUnicodeFromUtf8(utf16fn, TPtrC8(utf8fn)); - if (error == KErrNone) { - h = new PerlSymbianLibHandle; - if (h) { - h->error = KErrNone; - h->symbols = (HV *)NULL; - } else - error = KErrNoMemory; - } - - if (h && error == KErrNone) { - error = (h->handle).Load(utf16fn); - if (error == KErrNone) { - TLibraryFunction init = (h->handle).Lookup(KPerlDllSetupFunction); - ((PerlSymbianLibInit)init)(h); - } else { - free(h); - h = NULL; - } - } - - if (h) - h->error = error; - - return h; -} - -void* dlsym(void *handle, const char *symbol) { - if (handle) { - dTHX; - PerlSymbianLibHandle* h = (PerlSymbianLibHandle*)handle; - HV* symbols = h->symbols; - if (symbols) { - SV** svp = hv_fetch(symbols, symbol, strlen(symbol), FALSE); - if (svp && *svp && SvIOK(*svp)) { - IV ord = SvIV(*svp); - if (ord > 0) - return (void*)((h->handle).Lookup(ord)); - } - } - } - return NULL; -} - -int dlclose(void *handle) { - PerlSymbianLibHandle* h = (PerlSymbianLibHandle*)handle; - if (h) { - (h->handle).Close(); - if (h->symbols) { - dTHX; - hv_undef(h->symbols); - h->symbols = NULL; - } - return 0; - } else - return 1; -} - -const char* dlerror(void) { - return 0; /* Bad interface: assumes static data. */ -} - -static void -dl_private_init(pTHX) -{ - (void)dl_generic_private_init(aTHX); -} - -MODULE = DynaLoader PACKAGE = DynaLoader - -PROTOTYPES: ENABLE - -BOOT: - (void)dl_private_init(aTHX); - - -void -dl_load_file(filename, flags=0) - char * filename - int flags - PREINIT: - PerlSymbianLibHandle* h; - CODE: -{ - ST(0) = sv_newmortal(); - h = (PerlSymbianLibHandle*)dlopen(filename, flags); - if (h && h->error == KErrNone) - sv_setiv(ST(0), PTR2IV(h)); - else - SaveError(aTHX_ "(dl_load_file %s %d)" - filename, h ? h->error : -1); -} - - -int -dl_unload_file(libhandle) - void * libhandle - CODE: - RETVAL = (dlclose(libhandle) == 0 ? 1 : 0); - OUTPUT: - RETVAL - - -void -dl_find_symbol(libhandle, symbolname, ign_err=0) - void * libhandle - char * symbolname - int ign_err - PREINIT: - void *sym; - CODE: - PerlSymbianLibHandle* h = (PerlSymbianLibHandle*)libhandle; - sym = dlsym(libhandle, symbolname); - ST(0) = sv_newmortal(); - if (sym) { - sv_setiv(ST(0), PTR2IV(sym)); - } else { - if (!ign_err) - SaveError(aTHX_ "(dl_find_symbol %s %d)", - symbolname, h ? h->error : -1); - } - - -void -dl_undef_symbols() - CODE: - - - -# These functions should not need changing on any platform: - -void -dl_install_xsub(perl_name, symref, filename="$Package") - char * perl_name - void * symref - const char * filename - CODE: - ST(0) = sv_2mortal(newRV((SV*)newXS_flags(perl_name, - (void(*)(pTHX_ CV *))symref, - filename, NULL, - XS_DYNAMIC_FILENAME))); - - -SV * -dl_error() - CODE: - dMY_CXT; - RETVAL = newSVsv(MY_CXT.x_dl_last_error); - OUTPUT: - RETVAL - -#if defined(USE_ITHREADS) - -void -CLONE(...) - CODE: - MY_CXT_CLONE; - - PERL_UNUSED_VAR(items); - - /* MY_CXT_CLONE just does a memcpy on the whole structure, so to avoid - * using Perl variables that belong to another thread, we create our - * own for this thread. - */ - MY_CXT.x_dl_last_error = newSVpvs(""); - -#endif - -# end. diff --git a/gnu/usr.bin/perl/ext/DynaLoader/dlutils.c b/gnu/usr.bin/perl/ext/DynaLoader/dlutils.c index 8584f89e6bb..a818e7ac5cc 100644 --- a/gnu/usr.bin/perl/ext/DynaLoader/dlutils.c +++ b/gnu/usr.bin/perl/ext/DynaLoader/dlutils.c @@ -27,10 +27,10 @@ typedef struct { SV* x_dl_last_error; /* pointer to allocated memory for - last error message */ + last error message */ #if defined(PERL_IN_DL_HPUX_XS) || defined(PERL_IN_DL_DLOPEN_XS) int x_dl_nonlazy; /* flag for immediate rather than lazy - linking (spots unresolved symbol) */ + linking (spots unresolved symbol) */ #endif #ifdef DL_LOADONCEONLY HV * x_dl_loaded_files; /* only needed on a few systems */ @@ -62,8 +62,8 @@ START_MY_CXT #ifdef DEBUGGING #define DLDEBUG(level,code) \ STMT_START { \ - dMY_CXT; \ - if (dl_debug>=level) { code; } \ + dMY_CXT; \ + if (dl_debug>=level) { code; } \ } STMT_END #else #define DLDEBUG(level,code) NOOP @@ -109,25 +109,25 @@ dl_generic_private_init(pTHX) /* called by dl_*.xs dl_private_init() */ #endif #ifdef DEBUGGING { - SV *sv = get_sv("DynaLoader::dl_debug", 0); - dl_debug = sv ? SvIV(sv) : 0; + SV *sv = get_sv("DynaLoader::dl_debug", 0); + dl_debug = sv ? SvIV(sv) : 0; } #endif #if defined(PERL_IN_DL_HPUX_XS) || defined(PERL_IN_DL_DLOPEN_XS) - if ( (perl_dl_nonlazy = getenv("PERL_DL_NONLAZY")) != NULL - && grok_atoUV(perl_dl_nonlazy, &uv, NULL) - && uv <= INT_MAX + if ( (perl_dl_nonlazy = PerlEnv_getenv("PERL_DL_NONLAZY")) != NULL + && grok_atoUV(perl_dl_nonlazy, &uv, NULL) + && uv <= INT_MAX ) { - dl_nonlazy = (int)uv; + dl_nonlazy = (int)uv; } else - dl_nonlazy = 0; + dl_nonlazy = 0; if (dl_nonlazy) - DLDEBUG(1,PerlIO_printf(Perl_debug_log, "DynaLoader bind mode is 'non-lazy'\n")); + DLDEBUG(1,PerlIO_printf(Perl_debug_log, "DynaLoader bind mode is 'non-lazy'\n")); #endif #ifdef DL_LOADONCEONLY if (!dl_loaded_files) - dl_loaded_files = newHV(); /* provide cache for dl_*.xs if needed */ + dl_loaded_files = newHV(); /* provide cache for dl_*.xs if needed */ #endif #ifdef DL_UNLOAD_ALL_AT_EXIT call_atexit(&dl_unload_all_files, (void*)0); @@ -155,10 +155,10 @@ SaveError(pTHX_ const char* pat, ...) len++; /* include terminating null char */ { - dMY_CXT; + dMY_CXT; /* Copy message into dl_last_error (including terminating null char) */ - sv_setpvn(MY_CXT.x_dl_last_error, message, len) ; - DLDEBUG(2,PerlIO_printf(Perl_debug_log, "DynaLoader: stored error msg '%s'\n",dl_last_error)); + sv_setpvn(MY_CXT.x_dl_last_error, message, len) ; + DLDEBUG(2,PerlIO_printf(Perl_debug_log, "DynaLoader: stored error msg '%s'\n",dl_last_error)); } } #endif diff --git a/gnu/usr.bin/perl/ext/DynaLoader/t/DynaLoader.t b/gnu/usr.bin/perl/ext/DynaLoader/t/DynaLoader.t index bb836861ab9..11b37b5c4e6 100644 --- a/gnu/usr.bin/perl/ext/DynaLoader/t/DynaLoader.t +++ b/gnu/usr.bin/perl/ext/DynaLoader/t/DynaLoader.t @@ -1,6 +1,8 @@ #!/usr/bin/perl -wT use strict; +use warnings; + use Config; push @INC, '.'; if (-f 't/test.pl') { @@ -148,18 +150,14 @@ is( scalar @DynaLoader::dl_modules, scalar keys %modules, "checking number of it my @loaded_modules = @DynaLoader::dl_modules; for my $libref (reverse @DynaLoader::dl_librefs) { - TODO: { - todo_skip( "Can't safely unload with -DPERL_GLOBAL_STRUCT_PRIVATE (RT #119409)", 2 ) - if $Config{ccflags} =~ /(?:^|\s)-DPERL_GLOBAL_STRUCT_PRIVATE\b/; - SKIP: { - skip( "unloading unsupported on $^O", 2 ) - if ($old_darwin || $^O eq 'VMS'); - my $module = pop @loaded_modules; - skip( "File::Glob sets PL_opfreehook", 2 ) if $module eq 'File::Glob'; - my $r = eval { DynaLoader::dl_unload_file($libref) }; - is( $@, '', "calling dl_unload_file() for $module" ); - is( $r, 1, " - unload was successful" ); - } +SKIP: { + skip( "unloading unsupported on $^O", 2 ) + if ($old_darwin || $^O eq 'VMS'); + my $module = pop @loaded_modules; + skip( "File::Glob sets PL_opfreehook", 2 ) if $module eq 'File::Glob'; + my $r = eval { DynaLoader::dl_unload_file($libref) }; + is( $@, '', "calling dl_unload_file() for $module" ); + is( $r, 1, " - unload was successful" ); } } diff --git a/gnu/usr.bin/perl/ext/Errno/Errno_pm.PL b/gnu/usr.bin/perl/ext/Errno/Errno_pm.PL index 84fd151d276..ee2f4a3a928 100644 --- a/gnu/usr.bin/perl/ext/Errno/Errno_pm.PL +++ b/gnu/usr.bin/perl/ext/Errno/Errno_pm.PL @@ -2,14 +2,11 @@ use ExtUtils::MakeMaker; use Config; use strict; -our $VERSION = "1.30"; +our $VERSION = "1.36"; my %err = (); -# Symbian cross-compiling environment. -my $IsSymbian = exists $ENV{SDK} && -d "$ENV{SDK}\\epoc32"; - -my $IsMSWin32 = $^O eq 'MSWin32' && !$IsSymbian; +my $IsMSWin32 = $^O eq 'MSWin32'; unlink "Errno.pm" if -f "Errno.pm"; unlink "Errno.tmp" if -f "Errno.tmp"; @@ -21,11 +18,18 @@ if ($Config{gccversion} ne '' && $^O eq 'MSWin32') { # MinGW complains "warning: #pragma system_header ignored outside include # file" if the header files are processed individually, so include them # all in .c file and process that instead. + my %seen; open INCS, '>', 'includes.c' or die "Cannot open includes.c"; foreach $file (@files) { next if $file eq 'errno.c'; next unless -f $file; + if ( $file eq 'avx512vpopcntdqvlintrin.h' || $file eq 'avx512bwintrin.h' ) { + # "Never use directly; include instead." + # "Never use directly; include instead." + $file = 'immintrin.h'; + } + next if ++$seen{$file} > 1; print INCS qq[#include "$file"\n]; } close INCS; @@ -127,7 +131,11 @@ sub get_files { $file{'Sys$Library:DECC$RTLDEF.TLB'} = 1; } elsif ($^O eq 'os390') { # OS/390 C compiler doesn't generate #file or #line directives - $file{'/usr/include/errno.h'} = 1; + # and it does not tag the header as 1047 (EBCDIC), so make a local + # copy and tag it + my $cp = `cp /usr/include/errno.h ./errno.h`; + my $chtag = `chtag -t -cIBM-1047 ./errno.h`; + $file{'./errno.h'} = 1; } elsif ($Config{archname} eq 'arm-riscos') { # Watch out for cross compiling for RISC OS my $dep = `echo "#include " | gcc -E -M -`; @@ -143,32 +151,24 @@ sub get_files { $file{$linux_errno_h} = 1; } elsif ($^O eq 'haiku') { # hidden in a special place - $file{'/boot/develop/headers/posix/errno.h'} = 1; + $file{'/boot/system/develop/headers/posix/errno.h'} = 1; } elsif ($^O eq 'vos') { # avoid problem where cpp returns non-POSIX pathnames $file{'/system/include_library/errno.h'} = 1; - } elsif ($IsSymbian) { - my $SDK = $ENV{SDK}; - $SDK =~ s!\\!/!g; - $file{"$SDK/epoc32/include/libc/sys/errno.h"} = 1; } else { open(CPPI, '>', 'errno.c') or die "Cannot open errno.c"; - if ($^O eq 'NetWare') { - print CPPI "#include \n"; - } else { - print CPPI "#include \n"; - if ($IsMSWin32) { - print CPPI qq[#include "../../win32/include/sys/errno2.h"\n]; - } - } + print CPPI "#include \n"; + if ($IsMSWin32) { + print CPPI qq[#include "../../win32/include/sys/errno2.h"\n]; + } close(CPPI); # invoke CPP and read the output - if ($IsMSWin32 || $^O eq 'NetWare') { + if ($IsMSWin32) { open(CPPO,"$Config{cpprun} $Config{cppflags} errno.c |") or die "Cannot run '$Config{cpprun} $Config{cppflags} errno.c'"; } else { @@ -179,7 +179,7 @@ sub get_files { my $pat = '^#\s*(?:line)?\s*\d+\s+"([^"]+)"'; while() { - if ($^O eq 'os2' or $IsMSWin32 or $^O eq 'NetWare') { + if ($^O eq 'os2' or $IsMSWin32) { if (/$pat/o) { my $f = $1; $f =~ s,\\\\,/,g; @@ -207,12 +207,8 @@ sub write_errno_pm { open(CPPI, '>', 'errno.c') or die "Cannot open errno.c"; - if ($^O eq 'NetWare') { - print CPPI "#include \n"; - } - else { - print CPPI "#include \n"; - } + print CPPI "#include \n"; + if ($IsMSWin32) { print CPPI qq[#include "../../win32/include/sys/errno2.h"\n]; } @@ -239,17 +235,12 @@ sub write_errno_pm { $cpp =~ s/sys\$input//i; open(CPPO,"$cpp errno.c |") or die "Cannot exec $Config{cppstdin}"; - } elsif ($IsMSWin32 || $^O eq 'NetWare') { + } elsif ($IsMSWin32) { my $cpp = "$Config{cpprun} $Config{cppflags}" . $inhibit_linemarkers; open(CPPO,"$cpp errno.c |") or die "Cannot run '$cpp errno.c'"; - } elsif ($IsSymbian) { - my $cpp = "gcc -E -I$ENV{SDK}\\epoc32\\include\\libc" . - $inhibit_linemarkers ." -"; - open(CPPO,"$cpp < errno.c |") - or die "Cannot exec $cpp"; - } else { + } else { my $cpp = default_cpp() . $inhibit_linemarkers; open(CPPO,"$cpp < errno.c |") or die "Cannot exec $cpp"; @@ -289,7 +280,7 @@ sub write_errno_pm { # package Errno; -require Exporter; +use Exporter 'import'; use strict; EDQ @@ -310,7 +301,6 @@ CONFIG_CHECK_END print <<"EDQ"; our \$VERSION = "$VERSION"; \$VERSION = eval \$VERSION; -our \@ISA = 'Exporter'; my %err; diff --git a/gnu/usr.bin/perl/ext/ExtUtils-Miniperl/lib/ExtUtils/Miniperl.pm b/gnu/usr.bin/perl/ext/ExtUtils-Miniperl/lib/ExtUtils/Miniperl.pm index 46af2a60739..e90b4aeb092 100644 --- a/gnu/usr.bin/perl/ext/ExtUtils-Miniperl/lib/ExtUtils/Miniperl.pm +++ b/gnu/usr.bin/perl/ext/ExtUtils-Miniperl/lib/ExtUtils/Miniperl.pm @@ -1,12 +1,11 @@ #!./perl -w package ExtUtils::Miniperl; use strict; -require Exporter; +use Exporter 'import'; use ExtUtils::Embed 1.31, qw(xsi_header xsi_protos xsi_body); -our @ISA = qw(Exporter); our @EXPORT = qw(writemain); -our $VERSION = '1.09'; +our $VERSION = '1.11'; # blead will run this with miniperl, hence we can't use autodie or File::Temp my $temp; @@ -87,15 +86,6 @@ sub writemain{ static void xs_init (pTHX); static PerlInterpreter *my_perl; -#if defined(PERL_GLOBAL_STRUCT_PRIVATE) -/* The static struct perl_vars* may seem counterproductive since the - * whole idea PERL_GLOBAL_STRUCT_PRIVATE was to avoid statics, but note - * that this static is not in the shared perl library, the globals PL_Vars - * and PL_VarsPtr will stay away. */ -static struct perl_vars* my_plvarsp; -struct perl_vars* Perl_GetVarsPrivate(void) { return my_plvarsp; } -#endif - #ifdef NO_ENV_ARRAY_IN_MAIN extern char **environ; int @@ -106,14 +96,6 @@ main(int argc, char **argv, char **env) #endif { int exitstatus, i; -#ifdef PERL_GLOBAL_STRUCT - struct perl_vars *my_vars = init_global_struct(); -# ifdef PERL_GLOBAL_STRUCT_PRIVATE - int veto; - - my_plvarsp = my_vars; -# endif -#endif /* PERL_GLOBAL_STRUCT */ #ifndef NO_ENV_ARRAY_IN_MAIN PERL_UNUSED_ARG(env); #endif @@ -187,20 +169,6 @@ main(int argc, char **argv, char **env) PERL_SYS_TERM(); -#ifdef PERL_GLOBAL_STRUCT -# ifdef PERL_GLOBAL_STRUCT_PRIVATE - veto = my_plvarsp->Gveto_cleanup; -# endif - free_global_struct(my_vars); -# ifdef PERL_GLOBAL_STRUCT_PRIVATE - if (!veto) - my_plvarsp = NULL; - /* Remember, functions registered with atexit() can run after this point, - and may access "global" variables, and hence end up calling - Perl_GetVarsPrivate() */ -#endif -#endif /* PERL_GLOBAL_STRUCT */ - exit(exitstatus); } diff --git a/gnu/usr.bin/perl/ext/Fcntl/Fcntl.pm b/gnu/usr.bin/perl/ext/Fcntl/Fcntl.pm index fa5f3935025..57687e62889 100644 --- a/gnu/usr.bin/perl/ext/Fcntl/Fcntl.pm +++ b/gnu/usr.bin/perl/ext/Fcntl/Fcntl.pm @@ -56,17 +56,15 @@ See L about the S_I* constants. =cut use strict; -our($VERSION, @ISA, @EXPORT, @EXPORT_OK, %EXPORT_TAGS); -require Exporter; +use Exporter 'import'; require XSLoader; -@ISA = qw(Exporter); -$VERSION = '1.13'; +our $VERSION = '1.15'; XSLoader::load(); # Named groups of exports -%EXPORT_TAGS = ( +our %EXPORT_TAGS = ( 'flock' => [qw(LOCK_SH LOCK_EX LOCK_NB LOCK_UN)], 'Fcompat' => [qw(FAPPEND FASYNC FCREAT FDEFER FDSYNC FEXCL FLARGEFILE FNDELAY FNONBLOCK FRSYNC FSYNC FTRUNC)], @@ -87,7 +85,7 @@ XSLoader::load(); # Items to export into callers namespace by default # (move infrequently used names to @EXPORT_OK below) -@EXPORT = +our @EXPORT = qw( FD_CLOEXEC F_ALLOCSP @@ -160,7 +158,7 @@ XSLoader::load(); ); # Other items we are prepared to export if requested -@EXPORT_OK = (qw( +our @EXPORT_OK = (qw( DN_ACCESS DN_ATTRIB DN_CREATE diff --git a/gnu/usr.bin/perl/ext/Fcntl/Fcntl.xs b/gnu/usr.bin/perl/ext/Fcntl/Fcntl.xs index 36703a8545e..62bd2b11be1 100644 --- a/gnu/usr.bin/perl/ext/Fcntl/Fcntl.xs +++ b/gnu/usr.bin/perl/ext/Fcntl/Fcntl.xs @@ -36,7 +36,6 @@ static void XS_Fcntl_S_ISREG(pTHX_ CV* cv) { - dVAR; dXSARGS; dXSI32; /* Preserve the semantics of the perl code, which was: diff --git a/gnu/usr.bin/perl/ext/File-Find/lib/File/Find.pm b/gnu/usr.bin/perl/ext/File-Find/lib/File/Find.pm index 4c67e882a5e..ae58d00b71e 100644 --- a/gnu/usr.bin/perl/ext/File-Find/lib/File/Find.pm +++ b/gnu/usr.bin/perl/ext/File-Find/lib/File/Find.pm @@ -3,11 +3,10 @@ use 5.006; use strict; use warnings; use warnings::register; -our $VERSION = '1.37'; -require Exporter; +our $VERSION = '1.40'; +use Exporter 'import'; require Cwd; -our @ISA = qw(Exporter); our @EXPORT = qw(find finddepth); @@ -161,9 +160,8 @@ sub _find_opt { $pre_process = $wanted->{preprocess}; $post_process = $wanted->{postprocess}; $no_chdir = $wanted->{no_chdir}; - $full_check = $Is_Win32 ? 0 : $wanted->{follow}; - $follow = $Is_Win32 ? 0 : - $full_check || $wanted->{follow_fast}; + $full_check = $wanted->{follow}; + $follow = $full_check || $wanted->{follow_fast}; $follow_skip = $wanted->{follow_skip}; $untaint = $wanted->{untaint}; $untaint_pat = $wanted->{untaint_pattern}; @@ -324,7 +322,7 @@ sub _find_dir($$$) { $dir_pref= ( $p_dir eq '/' ? '/' : "$p_dir/" ); } - local ($dir, $name, $prune, *DIR); + local ($dir, $name, $prune); unless ( $no_chdir || ($p_dir eq $File::Find::current_dir)) { my $udir = $p_dir; @@ -383,12 +381,13 @@ sub _find_dir($$$) { $dir= $dir_name; # $File::Find::dir # Get the list of files in the current directory. - unless (opendir DIR, ($no_chdir ? $dir_name : $File::Find::current_dir)) { + my $dh; + unless (opendir $dh, ($no_chdir ? $dir_name : $File::Find::current_dir)) { warnings::warnif "Can't opendir($dir_name): $!\n"; next; } - @filenames = readdir DIR; - closedir(DIR); + @filenames = readdir $dh; + closedir($dh); @filenames = $pre_process->(@filenames) if $pre_process; push @Stack,[$CdLvl,$dir_name,"",-2] if $post_process; @@ -544,7 +543,7 @@ sub _find_dir_symlnk($$$) { $dir_pref = ( $p_dir eq '/' ? '/' : "$p_dir/" ); $loc_pref = ( $dir_loc eq '/' ? '/' : "$dir_loc/" ); - local ($dir, $name, $fullname, $prune, *DIR); + local ($dir, $name, $fullname, $prune); unless ($no_chdir) { # untaint the topdir @@ -616,12 +615,13 @@ sub _find_dir_symlnk($$$) { $dir = $dir_name; # $File::Find::dir # Get the list of files in the current directory. - unless (opendir DIR, ($no_chdir ? $dir_loc : $File::Find::current_dir)) { + my $dh; + unless (opendir $dh, ($no_chdir ? $dir_loc : $File::Find::current_dir)) { warnings::warnif "Can't opendir($dir_loc): $!\n"; next; } - @filenames = readdir DIR; - closedir(DIR); + @filenames = readdir $dh; + closedir($dh); for my $FN (@filenames) { if ($Is_VMS) { @@ -840,6 +840,9 @@ where C works from the top of the tree down. =back +Despite the name of the C function, both C and +C perform a depth-first search of the directory hierarchy. + =head2 %options The first argument to C is either a code reference to your @@ -849,7 +852,7 @@ code reference is described in L below. Here are the possible keys for the hash: -=over 3 +=over 4 =item C @@ -893,7 +896,7 @@ This might be expensive both in space and time for a large directory tree. See L and L below. If either I or I is in effect: -=over 6 +=over 4 =item * @@ -1080,9 +1083,9 @@ situations. You can disable these warnings by putting the statement in the appropriate scope. See L for more info about lexical warnings. -=head1 CAVEAT +=head1 BUGS AND CAVEATS -=over 2 +=over 4 =item $dont_use_nlink @@ -1108,12 +1111,6 @@ in an unknown directory. =back -=head1 BUGS AND CAVEATS - -Despite the name of the C function, both C and -C perform a depth-first search of the directory -hierarchy. - =head1 HISTORY File::Find used to produce incorrect results if called recursively. diff --git a/gnu/usr.bin/perl/ext/File-Find/t/find.t b/gnu/usr.bin/perl/ext/File-Find/t/find.t index 40d14db0c68..add20c26839 100644 --- a/gnu/usr.bin/perl/ext/File-Find/t/find.t +++ b/gnu/usr.bin/perl/ext/File-Find/t/find.t @@ -24,13 +24,8 @@ BEGIN { } my $symlink_exists = eval { symlink("",""); 1 }; -my $test_count = 111; -$test_count += 127 if $symlink_exists; -$test_count += 26 if $^O eq 'MSWin32'; -$test_count += 2 if $^O eq 'MSWin32' and $symlink_exists; use Test::More; -plan tests => $test_count; use lib qw( ./t/lib ); use Testing qw( create_file_ok @@ -39,6 +34,7 @@ use Testing qw( dir_path file_path ); +use Errno (); my %Expect_File = (); # what we expect for $_ my %Expect_Name = (); # what we expect for $File::Find::name/fullname @@ -252,7 +248,17 @@ create_file_ok( file_path('fb', $testing_basenames[0]) ); mkdir_ok( dir_path('fb', 'fba'), 0770 ); create_file_ok( file_path('fb', 'fba', $testing_basenames[1]) ); if ($symlink_exists) { - symlink_ok('../fb','fa/fsl'); + if (symlink('../fb','fa/fsl')) { + pass("able to symlink from ../fb to fa/fsl"); + } + else { + if ($^O eq "MSWin32" && ($! == &Errno::ENOSYS || $! == &Errno::EPERM)) { + $symlink_exists = 0; + } + else { + fail("able to symlink from ../fb to fa/fsl"); + } + } } create_file_ok( file_path('fa', $testing_basenames[2]) ); @@ -885,6 +891,7 @@ if ($^O eq 'MSWin32') { dir_path('fb') => 1, dir_path('fba') => 1); + $FastFileTests_OK = 0; File::Find::find( {wanted => \&wanted_File_Dir}, topdir('fa')); is( scalar(keys %Expect_File), 0, "Got no files, as expected" ); @@ -1104,3 +1111,5 @@ if ($^O eq 'MSWin32') { like($@, qr/invalid top directory/, "find() correctly died due to undefined top directory"); } + +done_testing(); diff --git a/gnu/usr.bin/perl/ext/File-Glob/Glob.pm b/gnu/usr.bin/perl/ext/File-Glob/Glob.pm index b7e71abcd3f..74b6af7504e 100644 --- a/gnu/usr.bin/perl/ext/File-Glob/Glob.pm +++ b/gnu/usr.bin/perl/ext/File-Glob/Glob.pm @@ -1,16 +1,14 @@ package File::Glob; use strict; -our($VERSION, @ISA, @EXPORT_OK, @EXPORT_FAIL, %EXPORT_TAGS, $DEFAULT_FLAGS); +our($DEFAULT_FLAGS); require XSLoader; -@ISA = qw(Exporter); - # NOTE: The glob() export is only here for compatibility with 5.6.0. # csh_glob() should not be used directly, unless you know what you're doing. -%EXPORT_TAGS = ( +our %EXPORT_TAGS = ( 'glob' => [ qw( GLOB_ABEND GLOB_ALPHASORT @@ -33,9 +31,9 @@ require XSLoader; ); $EXPORT_TAGS{bsd_glob} = [@{$EXPORT_TAGS{glob}}]; -@EXPORT_OK = (@{$EXPORT_TAGS{'glob'}}, 'csh_glob'); +our @EXPORT_OK = (@{$EXPORT_TAGS{'glob'}}, 'csh_glob'); -$VERSION = '1.33'; +our $VERSION = '1.37'; sub import { require Exporter; @@ -66,7 +64,7 @@ sub import { XSLoader::load(); $DEFAULT_FLAGS = GLOB_CSH(); -if ($^O =~ /^(?:MSWin32|VMS|os2|dos|riscos)$/) { +if ($^O =~ /^(?:MSWin32|VMS|os2|riscos)$/) { $DEFAULT_FLAGS |= GLOB_NOCASE(); } diff --git a/gnu/usr.bin/perl/ext/File-Glob/Glob.xs b/gnu/usr.bin/perl/ext/File-Glob/Glob.xs index 9779d54ca6a..4e1ae80b722 100644 --- a/gnu/usr.bin/perl/ext/File-Glob/Glob.xs +++ b/gnu/usr.bin/perl/ext/File-Glob/Glob.xs @@ -108,7 +108,7 @@ iterate(pTHX_ bool(*globber)(pTHX_ AV *entries, const char *pat, STRLEN len, boo } if (!IS_SAFE_SYSCALL(pat, len, "pattern", "glob")) { - if (gimme != G_ARRAY) + if (gimme != G_LIST) PUSHs(&PL_sv_undef); PUTBACK; return; @@ -120,7 +120,7 @@ iterate(pTHX_ bool(*globber)(pTHX_ AV *entries, const char *pat, STRLEN len, boo } /* chuck it all out, quick or slow */ - if (gimme == G_ARRAY) { + if (gimme == G_LIST) { if (!on_stack && AvFILLp(entries) + 1) { EXTEND(SP, AvFILLp(entries)+1); Copy(AvARRAY(entries), SP+1, AvFILLp(entries)+1, SV *); @@ -286,7 +286,7 @@ csh_glob(pTHX_ AV *entries, const char *pat, STRLEN len, bool is_utf8) dMARK; dORIGMARK; /* short-circuit here for a fairly common case */ - if (!patav && gimme == G_ARRAY) { PUTBACK; return TRUE; } + if (!patav && gimme == G_LIST) { PUTBACK; return TRUE; } while (++MARK <= SP) av_push(entries, SvREFCNT_inc_simple_NN(*MARK)); @@ -323,7 +323,7 @@ doglob_iter_wrapper(pTHX_ AV *entries, const char *pattern, STRLEN len, bool is_ { dMARK; dORIGMARK; - if (GIMME_V == G_ARRAY) { PUTBACK; return TRUE; } + if (GIMME_V == G_LIST) { PUTBACK; return TRUE; } sv_upgrade((SV *)entries, SVt_PVAV); while (++MARK <= SP) av_push(entries, SvREFCNT_inc_simple_NN(*MARK)); diff --git a/gnu/usr.bin/perl/ext/File-Glob/bsd_glob.c b/gnu/usr.bin/perl/ext/File-Glob/bsd_glob.c index b038dd117a3..8fab443d2c6 100644 --- a/gnu/usr.bin/perl/ext/File-Glob/bsd_glob.c +++ b/gnu/usr.bin/perl/ext/File-Glob/bsd_glob.c @@ -74,8 +74,8 @@ static char sscsid[]= "$OpenBSD: glob.c,v 1.8.10.1 2001/04/10 jason Exp $"; # include #else #if defined(HAS_PASSWD) && !defined(VMS) - struct passwd *getpwnam(char *); - struct passwd *getpwuid(Uid_t); + struct passwd *getpwnam(char *); + struct passwd *getpwuid(Uid_t); #endif #endif @@ -168,12 +168,12 @@ static int g_stat(Char *, Stat_t *, glob_t *); static int glob0(const Char *, glob_t *); static int glob1(Char *, Char *, glob_t *, size_t *); static int glob2(Char *, Char *, Char *, Char *, Char *, Char *, - glob_t *, size_t *); + glob_t *, size_t *); static int glob3(Char *, Char *, Char *, Char *, Char *, - Char *, Char *, glob_t *, size_t *); + Char *, Char *, glob_t *, size_t *); static int globextend(const Char *, glob_t *, size_t *); static const Char * - globtilde(const Char *, Char *, size_t, glob_t *); + globtilde(const Char *, Char *, size_t, glob_t *); static int globexp1(const Char *, glob_t *); static int globexp2(const Char *, const Char *, glob_t *, int *); static int match(Char *, Char *, Char *, int); @@ -181,17 +181,13 @@ static int match(Char *, Char *, Char *, int); static void qprintf(const char *, Char *); #endif /* GLOB_DEBUG */ -#ifdef PERL_IMPLICIT_CONTEXT +#ifdef MULTIPLICITY static Direntry_t * my_readdir(DIR*); static Direntry_t * my_readdir(DIR *d) { -#ifndef NETWARE return PerlDir_read(d); -#else - return (DIR *)PerlDir_read(d); -#endif } #else @@ -216,82 +212,82 @@ my_readdir(DIR *d) int bsd_glob(const char *pattern, int flags, - int (*errfunc)(const char *, int), glob_t *pglob) + int (*errfunc)(const char *, int), glob_t *pglob) { - const U8 *patnext; - int c; - Char *bufnext, *bufend, patbuf[MAXPATHLEN]; - patnext = (U8 *) pattern; - /* TODO: GLOB_APPEND / GLOB_DOOFFS aren't supported yet */ + const U8 *patnext; + int c; + Char *bufnext, *bufend, patbuf[MAXPATHLEN]; + patnext = (U8 *) pattern; + /* TODO: GLOB_APPEND / GLOB_DOOFFS aren't supported yet */ #if 0 - if (!(flags & GLOB_APPEND)) { - pglob->gl_pathc = 0; - pglob->gl_pathv = NULL; - if (!(flags & GLOB_DOOFFS)) - pglob->gl_offs = 0; - } + if (!(flags & GLOB_APPEND)) { + pglob->gl_pathc = 0; + pglob->gl_pathv = NULL; + if (!(flags & GLOB_DOOFFS)) + pglob->gl_offs = 0; + } #else - pglob->gl_pathc = 0; - pglob->gl_pathv = NULL; - pglob->gl_offs = 0; + pglob->gl_pathc = 0; + pglob->gl_pathv = NULL; + pglob->gl_offs = 0; #endif - pglob->gl_flags = flags & ~GLOB_MAGCHAR; - pglob->gl_errfunc = errfunc; - pglob->gl_matchc = 0; + pglob->gl_flags = flags & ~GLOB_MAGCHAR; + pglob->gl_errfunc = errfunc; + pglob->gl_matchc = 0; - bufnext = patbuf; - bufend = bufnext + MAXPATHLEN - 1; + bufnext = patbuf; + bufend = bufnext + MAXPATHLEN - 1; #ifdef DOSISH - /* Nasty hack to treat patterns like "C:*" correctly. In this - * case, the * should match any file in the current directory - * on the C: drive. However, the glob code does not treat the - * colon specially, so it looks for files beginning "C:" in - * the current directory. To fix this, change the pattern to - * add an explicit "./" at the start (just after the drive - * letter and colon - ie change to "C:./"). - */ - if (isalpha(pattern[0]) && pattern[1] == ':' && - pattern[2] != BG_SEP && pattern[2] != BG_SEP2 && - bufend - bufnext > 4) { - *bufnext++ = pattern[0]; - *bufnext++ = ':'; - *bufnext++ = '.'; - *bufnext++ = BG_SEP; - patnext += 2; - } + /* Nasty hack to treat patterns like "C:*" correctly. In this + * case, the * should match any file in the current directory + * on the C: drive. However, the glob code does not treat the + * colon specially, so it looks for files beginning "C:" in + * the current directory. To fix this, change the pattern to + * add an explicit "./" at the start (just after the drive + * letter and colon - ie change to "C:./"). + */ + if (isalpha(pattern[0]) && pattern[1] == ':' && + pattern[2] != BG_SEP && pattern[2] != BG_SEP2 && + bufend - bufnext > 4) { + *bufnext++ = pattern[0]; + *bufnext++ = ':'; + *bufnext++ = '.'; + *bufnext++ = BG_SEP; + patnext += 2; + } #endif - if (flags & GLOB_QUOTE) { - /* Protect the quoted characters. */ - while (bufnext < bufend && (c = *patnext++) != BG_EOS) - if (c == BG_QUOTE) { + if (flags & GLOB_QUOTE) { + /* Protect the quoted characters. */ + while (bufnext < bufend && (c = *patnext++) != BG_EOS) + if (c == BG_QUOTE) { #ifdef DOSISH - /* To avoid backslashitis on Win32, - * we only treat \ as a quoting character - * if it precedes one of the - * metacharacters []-{}~\ - */ - if ((c = *patnext++) != '[' && c != ']' && - c != '-' && c != '{' && c != '}' && - c != '~' && c != '\\') { + /* To avoid backslashitis on Win32, + * we only treat \ as a quoting character + * if it precedes one of the + * metacharacters []-{}~\ + */ + if ((c = *patnext++) != '[' && c != ']' && + c != '-' && c != '{' && c != '}' && + c != '~' && c != '\\') { #else - if ((c = *patnext++) == BG_EOS) { + if ((c = *patnext++) == BG_EOS) { #endif - c = BG_QUOTE; - --patnext; - } - *bufnext++ = c | M_PROTECT; - } else - *bufnext++ = c; - } else - while (bufnext < bufend && (c = *patnext++) != BG_EOS) - *bufnext++ = c; - *bufnext = BG_EOS; - - if (flags & GLOB_BRACE) - return globexp1(patbuf, pglob); - else - return glob0(patbuf, pglob); + c = BG_QUOTE; + --patnext; + } + *bufnext++ = c | M_PROTECT; + } else + *bufnext++ = c; + } else + while (bufnext < bufend && (c = *patnext++) != BG_EOS) + *bufnext++ = c; + *bufnext = BG_EOS; + + if (flags & GLOB_BRACE) + return globexp1(patbuf, pglob); + else + return glob0(patbuf, pglob); } /* @@ -302,18 +298,18 @@ bsd_glob(const char *pattern, int flags, static int globexp1(const Char *pattern, glob_t *pglob) { - const Char* ptr = pattern; - int rv; + const Char* ptr = pattern; + int rv; - /* Protect a single {}, for find(1), like csh */ - if (pattern[0] == BG_LBRACE && pattern[1] == BG_RBRACE && pattern[2] == BG_EOS) - return glob0(pattern, pglob); + /* Protect a single {}, for find(1), like csh */ + if (pattern[0] == BG_LBRACE && pattern[1] == BG_RBRACE && pattern[2] == BG_EOS) + return glob0(pattern, pglob); - while ((ptr = (const Char *) g_strchr((Char *) ptr, BG_LBRACE)) != NULL) - if (!globexp2(ptr, pattern, pglob, &rv)) - return rv; + while ((ptr = (const Char *) g_strchr((Char *) ptr, BG_LBRACE)) != NULL) + if (!globexp2(ptr, pattern, pglob, &rv)) + return rv; - return glob0(pattern, pglob); + return glob0(pattern, pglob); } @@ -324,103 +320,103 @@ globexp1(const Char *pattern, glob_t *pglob) */ static int globexp2(const Char *ptr, const Char *pattern, - glob_t *pglob, int *rv) + glob_t *pglob, int *rv) { - int i; - Char *lm, *ls; - const Char *pe, *pm, *pm1, *pl; - Char patbuf[MAXPATHLEN]; - - /* copy part up to the brace */ - for (lm = patbuf, pm = pattern; pm != ptr; *lm++ = *pm++) - ; - *lm = BG_EOS; - ls = lm; - - /* Find the balanced brace */ - for (i = 0, pe = ++ptr; *pe; pe++) - if (*pe == BG_LBRACKET) { - /* Ignore everything between [] */ - for (pm = pe++; *pe != BG_RBRACKET && *pe != BG_EOS; pe++) - ; - if (*pe == BG_EOS) { - /* - * We could not find a matching BG_RBRACKET. - * Ignore and just look for BG_RBRACE - */ - pe = pm; - } - } else if (*pe == BG_LBRACE) - i++; - else if (*pe == BG_RBRACE) { - if (i == 0) - break; - i--; - } - - /* Non matching braces; just glob the pattern */ - if (i != 0 || *pe == BG_EOS) { - *rv = glob0(patbuf, pglob); - return 0; - } - - for (i = 0, pl = pm = ptr; pm <= pe; pm++) { - switch (*pm) { - case BG_LBRACKET: - /* Ignore everything between [] */ - for (pm1 = pm++; *pm != BG_RBRACKET && *pm != BG_EOS; pm++) - ; - if (*pm == BG_EOS) { - /* - * We could not find a matching BG_RBRACKET. - * Ignore and just look for BG_RBRACE - */ - pm = pm1; - } - break; - - case BG_LBRACE: - i++; - break; - - case BG_RBRACE: - if (i) { - i--; - break; - } - /* FALLTHROUGH */ - case BG_COMMA: - if (i && *pm == BG_COMMA) - break; - else { - /* Append the current string */ - for (lm = ls; (pl < pm); *lm++ = *pl++) - ; - - /* - * Append the rest of the pattern after the - * closing brace - */ - for (pl = pe + 1; (*lm++ = *pl++) != BG_EOS; ) - ; - - /* Expand the current pattern */ + int i; + Char *lm, *ls; + const Char *pe, *pm, *pm1, *pl; + Char patbuf[MAXPATHLEN]; + + /* copy part up to the brace */ + for (lm = patbuf, pm = pattern; pm != ptr; *lm++ = *pm++) + ; + *lm = BG_EOS; + ls = lm; + + /* Find the balanced brace */ + for (i = 0, pe = ++ptr; *pe; pe++) + if (*pe == BG_LBRACKET) { + /* Ignore everything between [] */ + for (pm = pe++; *pe != BG_RBRACKET && *pe != BG_EOS; pe++) + ; + if (*pe == BG_EOS) { + /* + * We could not find a matching BG_RBRACKET. + * Ignore and just look for BG_RBRACE + */ + pe = pm; + } + } else if (*pe == BG_LBRACE) + i++; + else if (*pe == BG_RBRACE) { + if (i == 0) + break; + i--; + } + + /* Non matching braces; just glob the pattern */ + if (i != 0 || *pe == BG_EOS) { + *rv = glob0(patbuf, pglob); + return 0; + } + + for (i = 0, pl = pm = ptr; pm <= pe; pm++) { + switch (*pm) { + case BG_LBRACKET: + /* Ignore everything between [] */ + for (pm1 = pm++; *pm != BG_RBRACKET && *pm != BG_EOS; pm++) + ; + if (*pm == BG_EOS) { + /* + * We could not find a matching BG_RBRACKET. + * Ignore and just look for BG_RBRACE + */ + pm = pm1; + } + break; + + case BG_LBRACE: + i++; + break; + + case BG_RBRACE: + if (i) { + i--; + break; + } + /* FALLTHROUGH */ + case BG_COMMA: + if (i && *pm == BG_COMMA) + break; + else { + /* Append the current string */ + for (lm = ls; (pl < pm); *lm++ = *pl++) + ; + + /* + * Append the rest of the pattern after the + * closing brace + */ + for (pl = pe + 1; (*lm++ = *pl++) != BG_EOS; ) + ; + + /* Expand the current pattern */ #ifdef GLOB_DEBUG - qprintf("globexp2:", patbuf); + qprintf("globexp2:", patbuf); #endif /* GLOB_DEBUG */ - *rv = globexp1(patbuf, pglob); - - /* move after the comma, to the next string */ - pl = pm + 1; - } - break; - - default: - break; - } - } - *rv = 0; - return 0; + *rv = globexp1(patbuf, pglob); + + /* move after the comma, to the next string */ + pl = pm + 1; + } + break; + + default: + break; + } + } + *rv = 0; + return 0; } @@ -431,76 +427,76 @@ globexp2(const Char *ptr, const Char *pattern, static const Char * globtilde(const Char *pattern, Char *patbuf, size_t patbuf_len, glob_t *pglob) { - char *h; - const Char *p; - Char *b, *eb; + char *h; + const Char *p; + Char *b, *eb; - if (*pattern != BG_TILDE || !(pglob->gl_flags & GLOB_TILDE)) - return pattern; + if (*pattern != BG_TILDE || !(pglob->gl_flags & GLOB_TILDE)) + return pattern; - /* Copy up to the end of the string or / */ - eb = &patbuf[patbuf_len - 1]; - for (p = pattern + 1, h = (char *) patbuf; - h < (char*)eb && *p && *p != BG_SLASH; *h++ = (char)*p++) - ; + /* Copy up to the end of the string or / */ + eb = &patbuf[patbuf_len - 1]; + for (p = pattern + 1, h = (char *) patbuf; + h < (char*)eb && *p && *p != BG_SLASH; *h++ = (char)*p++) + ; - *h = BG_EOS; + *h = BG_EOS; #if 0 - if (h == (char *)eb) - return what; + if (h == (char *)eb) + return what; #endif - if (((char *) patbuf)[0] == BG_EOS) { - /* - * handle a plain ~ or ~/ by expanding $HOME - * first and then trying the password file - * or $USERPROFILE on DOSISH systems - */ - if ((h = PerlEnv_getenv("HOME")) == NULL) { + if (((char *) patbuf)[0] == BG_EOS) { + /* + * handle a plain ~ or ~/ by expanding $HOME + * first and then trying the password file + * or $USERPROFILE on DOSISH systems + */ + if ((h = PerlEnv_getenv("HOME")) == NULL) { #ifdef HAS_PASSWD - struct passwd *pwd; - if ((pwd = getpwuid(getuid())) == NULL) - return pattern; - else - h = pwd->pw_dir; + struct passwd *pwd; + if ((pwd = getpwuid(getuid())) == NULL) + return pattern; + else + h = pwd->pw_dir; #elif DOSISH - /* - * When no passwd file, fallback to the USERPROFILE - * environment variable on DOSish systems. - */ - if ((h = PerlEnv_getenv("USERPROFILE")) == NULL) { - return pattern; - } + /* + * When no passwd file, fallback to the USERPROFILE + * environment variable on DOSish systems. + */ + if ((h = PerlEnv_getenv("USERPROFILE")) == NULL) { + return pattern; + } #else return pattern; #endif - } - } else { - /* - * Expand a ~user - */ + } + } else { + /* + * Expand a ~user + */ #ifdef HAS_PASSWD - struct passwd *pwd; - if ((pwd = getpwnam((char*) patbuf)) == NULL) - return pattern; - else - h = pwd->pw_dir; + struct passwd *pwd; + if ((pwd = getpwnam((char*) patbuf)) == NULL) + return pattern; + else + h = pwd->pw_dir; #else return pattern; #endif - } + } - /* Copy the home directory */ - for (b = patbuf; b < eb && *h; *b++ = *h++) - ; + /* Copy the home directory */ + for (b = patbuf; b < eb && *h; *b++ = *h++) + ; - /* Append the rest of the pattern */ - while (b < eb && (*b++ = *p++) != BG_EOS) - ; - *b = BG_EOS; + /* Append the rest of the pattern */ + while (b < eb && (*b++ = *p++) != BG_EOS) + ; + *b = BG_EOS; - return patbuf; + return patbuf; } @@ -514,142 +510,142 @@ globtilde(const Char *pattern, Char *patbuf, size_t patbuf_len, glob_t *pglob) static int glob0(const Char *pattern, glob_t *pglob) { - const Char *qpat, *qpatnext; - int c, err, oldflags, oldpathc; - Char *bufnext, patbuf[MAXPATHLEN]; - size_t limit = 0; - - qpat = globtilde(pattern, patbuf, MAXPATHLEN, pglob); - qpatnext = qpat; - oldflags = pglob->gl_flags; - oldpathc = pglob->gl_pathc; - bufnext = patbuf; - - /* We don't need to check for buffer overflow any more. */ - while ((c = *qpatnext++) != BG_EOS) { - switch (c) { - case BG_LBRACKET: - c = *qpatnext; - if (c == BG_NOT) - ++qpatnext; - if (*qpatnext == BG_EOS || - g_strchr((Char *) qpatnext+1, BG_RBRACKET) == NULL) { - *bufnext++ = BG_LBRACKET; - if (c == BG_NOT) - --qpatnext; - break; - } - *bufnext++ = M_SET; - if (c == BG_NOT) - *bufnext++ = M_NOT; - c = *qpatnext++; - do { - *bufnext++ = CHAR(c); - if (*qpatnext == BG_RANGE && - (c = qpatnext[1]) != BG_RBRACKET) { - *bufnext++ = M_RNG; - *bufnext++ = CHAR(c); - qpatnext += 2; - } - } while ((c = *qpatnext++) != BG_RBRACKET); - pglob->gl_flags |= GLOB_MAGCHAR; - *bufnext++ = M_END; - break; - case BG_QUESTION: - pglob->gl_flags |= GLOB_MAGCHAR; - *bufnext++ = M_ONE; - break; - case BG_STAR: - pglob->gl_flags |= GLOB_MAGCHAR; + const Char *qpat, *qpatnext; + int c, err, oldflags, oldpathc; + Char *bufnext, patbuf[MAXPATHLEN]; + size_t limit = 0; + + qpat = globtilde(pattern, patbuf, MAXPATHLEN, pglob); + qpatnext = qpat; + oldflags = pglob->gl_flags; + oldpathc = pglob->gl_pathc; + bufnext = patbuf; + + /* We don't need to check for buffer overflow any more. */ + while ((c = *qpatnext++) != BG_EOS) { + switch (c) { + case BG_LBRACKET: + c = *qpatnext; + if (c == BG_NOT) + ++qpatnext; + if (*qpatnext == BG_EOS || + g_strchr((Char *) qpatnext+1, BG_RBRACKET) == NULL) { + *bufnext++ = BG_LBRACKET; + if (c == BG_NOT) + --qpatnext; + break; + } + *bufnext++ = M_SET; + if (c == BG_NOT) + *bufnext++ = M_NOT; + c = *qpatnext++; + do { + *bufnext++ = CHAR(c); + if (*qpatnext == BG_RANGE && + (c = qpatnext[1]) != BG_RBRACKET) { + *bufnext++ = M_RNG; + *bufnext++ = CHAR(c); + qpatnext += 2; + } + } while ((c = *qpatnext++) != BG_RBRACKET); + pglob->gl_flags |= GLOB_MAGCHAR; + *bufnext++ = M_END; + break; + case BG_QUESTION: + pglob->gl_flags |= GLOB_MAGCHAR; + *bufnext++ = M_ONE; + break; + case BG_STAR: + pglob->gl_flags |= GLOB_MAGCHAR; /* Collapse adjacent stars to one. * This is required to ensure that a pattern like * "a**" matches a name like "a", as without this * check when the first star matched everything it would * cause the second star to return a match fail. * As long ** is folded here this does not happen. - */ - if (bufnext == patbuf || bufnext[-1] != M_ALL) - *bufnext++ = M_ALL; - break; - default: - *bufnext++ = CHAR(c); - break; - } - } - *bufnext = BG_EOS; + */ + if (bufnext == patbuf || bufnext[-1] != M_ALL) + *bufnext++ = M_ALL; + break; + default: + *bufnext++ = CHAR(c); + break; + } + } + *bufnext = BG_EOS; #ifdef GLOB_DEBUG - qprintf("glob0:", patbuf); + qprintf("glob0:", patbuf); #endif /* GLOB_DEBUG */ - if ((err = glob1(patbuf, patbuf+MAXPATHLEN-1, pglob, &limit)) != 0) { - pglob->gl_flags = oldflags; - return(err); - } - - /* - * If there was no match we are going to append the pattern - * if GLOB_NOCHECK was specified or if GLOB_NOMAGIC was specified - * and the pattern did not contain any magic characters - * GLOB_NOMAGIC is there just for compatibility with csh. - */ - if (pglob->gl_pathc == oldpathc && - ((pglob->gl_flags & GLOB_NOCHECK) || - ((pglob->gl_flags & GLOB_NOMAGIC) && - !(pglob->gl_flags & GLOB_MAGCHAR)))) - { + if ((err = glob1(patbuf, patbuf+MAXPATHLEN-1, pglob, &limit)) != 0) { + pglob->gl_flags = oldflags; + return(err); + } + + /* + * If there was no match we are going to append the pattern + * if GLOB_NOCHECK was specified or if GLOB_NOMAGIC was specified + * and the pattern did not contain any magic characters + * GLOB_NOMAGIC is there just for compatibility with csh. + */ + if (pglob->gl_pathc == oldpathc && + ((pglob->gl_flags & GLOB_NOCHECK) || + ((pglob->gl_flags & GLOB_NOMAGIC) && + !(pglob->gl_flags & GLOB_MAGCHAR)))) + { #ifdef GLOB_DEBUG - printf("calling globextend from glob0\n"); + printf("calling globextend from glob0\n"); #endif /* GLOB_DEBUG */ - pglob->gl_flags = oldflags; - return(globextend(qpat, pglob, &limit)); + pglob->gl_flags = oldflags; + return(globextend(qpat, pglob, &limit)); } - else if (!(pglob->gl_flags & GLOB_NOSORT)) + else if (!(pglob->gl_flags & GLOB_NOSORT)) if (pglob->gl_pathv) - qsort(pglob->gl_pathv + pglob->gl_offs + oldpathc, - pglob->gl_pathc - oldpathc, sizeof(char *), - (pglob->gl_flags & (GLOB_ALPHASORT|GLOB_NOCASE)) - ? ci_compare : compare); - pglob->gl_flags = oldflags; - return(0); + qsort(pglob->gl_pathv + pglob->gl_offs + oldpathc, + pglob->gl_pathc - oldpathc, sizeof(char *), + (pglob->gl_flags & (GLOB_ALPHASORT|GLOB_NOCASE)) + ? ci_compare : compare); + pglob->gl_flags = oldflags; + return(0); } static int ci_compare(const void *p, const void *q) { - const char *pp = *(const char **)p; - const char *qq = *(const char **)q; - int ci; - while (*pp && *qq) { - if (toFOLD(*pp) != toFOLD(*qq)) - break; - ++pp; - ++qq; - } - ci = toFOLD(*pp) - toFOLD(*qq); - if (ci == 0) - return compare(p, q); - return ci; + const char *pp = *(const char **)p; + const char *qq = *(const char **)q; + int ci; + while (*pp && *qq) { + if (toFOLD(*pp) != toFOLD(*qq)) + break; + ++pp; + ++qq; + } + ci = toFOLD(*pp) - toFOLD(*qq); + if (ci == 0) + return compare(p, q); + return ci; } static int compare(const void *p, const void *q) { - return(strcmp(*(char **)p, *(char **)q)); + return(strcmp(*(char **)p, *(char **)q)); } static int glob1(Char *pattern, Char *pattern_last, glob_t *pglob, size_t *limitp) { - Char pathbuf[MAXPATHLEN]; + Char pathbuf[MAXPATHLEN]; assert(pattern < pattern_last); - /* A null pathname is invalid -- POSIX 1003.1 sect. 2.4. */ - if (*pattern == BG_EOS) - return(0); - return(glob2(pathbuf, pathbuf+MAXPATHLEN-1, - pathbuf, pathbuf+MAXPATHLEN-1, - pattern, pattern_last, pglob, limitp)); + /* A null pathname is invalid -- POSIX 1003.1 sect. 2.4. */ + if (*pattern == BG_EOS) + return(0); + return(glob2(pathbuf, pathbuf+MAXPATHLEN-1, + pathbuf, pathbuf+MAXPATHLEN-1, + pattern, pattern_last, pglob, limitp)); } /* @@ -661,79 +657,79 @@ static int glob2(Char *pathbuf, Char *pathbuf_last, Char *pathend, Char *pathend_last, Char *pattern, Char *pattern_last, glob_t *pglob, size_t *limitp) { - Stat_t sb; - Char *p, *q; - int anymeta; + Stat_t sb; + Char *p, *q; + int anymeta; assert(pattern < pattern_last); - /* - * Loop over pattern segments until end of pattern or until - * segment with meta character found. - */ - for (anymeta = 0;;) { - if (*pattern == BG_EOS) { /* End of pattern? */ - *pathend = BG_EOS; - if (g_lstat(pathbuf, &sb, pglob)) - return(0); - - if (((pglob->gl_flags & GLOB_MARK) && - pathend[-1] != BG_SEP + /* + * Loop over pattern segments until end of pattern or until + * segment with meta character found. + */ + for (anymeta = 0;;) { + if (*pattern == BG_EOS) { /* End of pattern? */ + *pathend = BG_EOS; + if (g_lstat(pathbuf, &sb, pglob)) + return(0); + + if (((pglob->gl_flags & GLOB_MARK) && + pathend[-1] != BG_SEP #ifdef DOSISH - && pathend[-1] != BG_SEP2 + && pathend[-1] != BG_SEP2 #endif - ) && (S_ISDIR(sb.st_mode) || - (S_ISLNK(sb.st_mode) && - (g_stat(pathbuf, &sb, pglob) == 0) && - S_ISDIR(sb.st_mode)))) { - if (pathend+1 > pathend_last) - return (1); - *pathend++ = BG_SEP; - *pathend = BG_EOS; - } - ++pglob->gl_matchc; + ) && (S_ISDIR(sb.st_mode) || + (S_ISLNK(sb.st_mode) && + (g_stat(pathbuf, &sb, pglob) == 0) && + S_ISDIR(sb.st_mode)))) { + if (pathend+1 > pathend_last) + return (1); + *pathend++ = BG_SEP; + *pathend = BG_EOS; + } + ++pglob->gl_matchc; #ifdef GLOB_DEBUG printf("calling globextend from glob2\n"); #endif /* GLOB_DEBUG */ - return(globextend(pathbuf, pglob, limitp)); - } + return(globextend(pathbuf, pglob, limitp)); + } - /* Find end of next segment, copy tentatively to pathend. */ - q = pathend; - p = pattern; - while (*p != BG_EOS && *p != BG_SEP + /* Find end of next segment, copy tentatively to pathend. */ + q = pathend; + p = pattern; + while (*p != BG_EOS && *p != BG_SEP #ifdef DOSISH - && *p != BG_SEP2 + && *p != BG_SEP2 #endif - ) { + ) { assert(p < pattern_last); - if (ismeta(*p)) - anymeta = 1; - if (q+1 > pathend_last) - return (1); - *q++ = *p++; - } - - if (!anymeta) { /* No expansion, do next segment. */ - pathend = q; - pattern = p; - while (*pattern == BG_SEP + if (ismeta(*p)) + anymeta = 1; + if (q+1 > pathend_last) + return (1); + *q++ = *p++; + } + + if (!anymeta) { /* No expansion, do next segment. */ + pathend = q; + pattern = p; + while (*pattern == BG_SEP #ifdef DOSISH - || *pattern == BG_SEP2 + || *pattern == BG_SEP2 #endif - ) { + ) { assert(p < pattern_last); - if (pathend+1 > pathend_last) - return (1); - *pathend++ = *pattern++; - } - } else - /* Need expansion, recurse. */ - return(glob3(pathbuf, pathbuf_last, pathend, - pathend_last, pattern, - p, pattern_last, pglob, limitp)); - } - /* NOTREACHED */ + if (pathend+1 > pathend_last) + return (1); + *pathend++ = *pattern++; + } + } else + /* Need expansion, recurse. */ + return(glob3(pathbuf, pathbuf_last, pathend, + pathend_last, pattern, + p, pattern_last, pglob, limitp)); + } + /* NOTREACHED */ } static int @@ -741,97 +737,97 @@ glob3(Char *pathbuf, Char *pathbuf_last, Char *pathend, Char *pathend_last, Char *pattern, Char *restpattern, Char *restpattern_last, glob_t *pglob, size_t *limitp) { - Direntry_t *dp; - DIR *dirp; - int err; - int nocase; - char buf[MAXPATHLEN]; - - /* - * The readdirfunc declaration can't be prototyped, because it is - * assigned, below, to two functions which are prototyped in glob.h - * and dirent.h as taking pointers to differently typed opaque - * structures. - */ - Direntry_t *(*readdirfunc)(DIR*); + Direntry_t *dp; + DIR *dirp; + int err; + int nocase; + char buf[MAXPATHLEN]; + + /* + * The readdirfunc declaration can't be prototyped, because it is + * assigned, below, to two functions which are prototyped in glob.h + * and dirent.h as taking pointers to differently typed opaque + * structures. + */ + Direntry_t *(*readdirfunc)(DIR*); assert(pattern < restpattern_last); assert(restpattern < restpattern_last); - if (pathend > pathend_last) - return (1); - *pathend = BG_EOS; - errno = 0; + if (pathend > pathend_last) + return (1); + *pathend = BG_EOS; + errno = 0; #ifdef VMS { - Char *q = pathend; - if (q - pathbuf > 5) { - q -= 5; - if (q[0] == '.' && - tolower(q[1]) == 'd' && tolower(q[2]) == 'i' && - tolower(q[3]) == 'r' && q[4] == '/') - { - q[0] = '/'; - q[1] = BG_EOS; - pathend = q+1; - } - } + Char *q = pathend; + if (q - pathbuf > 5) { + q -= 5; + if (q[0] == '.' && + tolower(q[1]) == 'd' && tolower(q[2]) == 'i' && + tolower(q[3]) == 'r' && q[4] == '/') + { + q[0] = '/'; + q[1] = BG_EOS; + pathend = q+1; + } + } } #endif - if ((dirp = g_opendir(pathbuf, pglob)) == NULL) { - /* TODO: don't call for ENOENT or ENOTDIR? */ - if (pglob->gl_errfunc) { - if (g_Ctoc(pathbuf, buf, sizeof(buf))) - return (GLOB_ABEND); - if (pglob->gl_errfunc(buf, errno) || - (pglob->gl_flags & GLOB_ERR)) - return (GLOB_ABEND); - } - return(0); - } - - err = 0; - nocase = ((pglob->gl_flags & GLOB_NOCASE) != 0); - - /* Search directory for matching names. */ - if (pglob->gl_flags & GLOB_ALTDIRFUNC) - readdirfunc = (Direntry_t *(*)(DIR *))pglob->gl_readdir; - else - readdirfunc = (Direntry_t *(*)(DIR *))my_readdir; - while ((dp = (*readdirfunc)(dirp))) { - U8 *sc; - Char *dc; - - /* Initial BG_DOT must be matched literally. */ - if (dp->d_name[0] == BG_DOT && *pattern != BG_DOT) - continue; - dc = pathend; - sc = (U8 *) dp->d_name; - while (dc < pathend_last && (*dc++ = *sc++) != BG_EOS) - ; - if (dc >= pathend_last) { - *dc = BG_EOS; - err = 1; - break; - } - - if (!match(pathend, pattern, restpattern, nocase)) { - *pathend = BG_EOS; - continue; - } - err = glob2(pathbuf, pathbuf_last, --dc, pathend_last, - restpattern, restpattern_last, pglob, limitp); - if (err) - break; - } - - if (pglob->gl_flags & GLOB_ALTDIRFUNC) - (*pglob->gl_closedir)(dirp); - else - PerlDir_close(dirp); - return(err); + if ((dirp = g_opendir(pathbuf, pglob)) == NULL) { + /* TODO: don't call for ENOENT or ENOTDIR? */ + if (pglob->gl_errfunc) { + if (g_Ctoc(pathbuf, buf, sizeof(buf))) + return (GLOB_ABEND); + if (pglob->gl_errfunc(buf, errno) || + (pglob->gl_flags & GLOB_ERR)) + return (GLOB_ABEND); + } + return(0); + } + + err = 0; + nocase = ((pglob->gl_flags & GLOB_NOCASE) != 0); + + /* Search directory for matching names. */ + if (pglob->gl_flags & GLOB_ALTDIRFUNC) + readdirfunc = (Direntry_t *(*)(DIR *))pglob->gl_readdir; + else + readdirfunc = (Direntry_t *(*)(DIR *))my_readdir; + while ((dp = (*readdirfunc)(dirp))) { + U8 *sc; + Char *dc; + + /* Initial BG_DOT must be matched literally. */ + if (dp->d_name[0] == BG_DOT && *pattern != BG_DOT) + continue; + dc = pathend; + sc = (U8 *) dp->d_name; + while (dc < pathend_last && (*dc++ = *sc++) != BG_EOS) + ; + if (dc >= pathend_last) { + *dc = BG_EOS; + err = 1; + break; + } + + if (!match(pathend, pattern, restpattern, nocase)) { + *pathend = BG_EOS; + continue; + } + err = glob2(pathbuf, pathbuf_last, --dc, pathend_last, + restpattern, restpattern_last, pglob, limitp); + if (err) + break; + } + + if (pglob->gl_flags & GLOB_ALTDIRFUNC) + (*pglob->gl_closedir)(dirp); + else + PerlDir_close(dirp); + return(err); } @@ -852,61 +848,61 @@ glob3(Char *pathbuf, Char *pathbuf_last, Char *pathend, Char *pathend_last, static int globextend(const Char *path, glob_t *pglob, size_t *limitp) { - char **pathv; - int i; - STRLEN newsize, len; - char *copy; - const Char *p; + char **pathv; + int i; + STRLEN newsize, len; + char *copy; + const Char *p; #ifdef GLOB_DEBUG - printf("Adding "); + printf("Adding "); for (p = path; *p; p++) (void)printf("%c", CHAR(*p)); printf("\n"); #endif /* GLOB_DEBUG */ - newsize = sizeof(*pathv) * (2 + pglob->gl_pathc + pglob->gl_offs); - if (pglob->gl_pathv) - pathv = Renew(pglob->gl_pathv,newsize,char*); - else - Newx(pathv,newsize,char*); - if (pathv == NULL) { - if (pglob->gl_pathv) { - Safefree(pglob->gl_pathv); - pglob->gl_pathv = NULL; - } - return(GLOB_NOSPACE); - } - - if (pglob->gl_pathv == NULL && pglob->gl_offs > 0) { - /* first time around -- clear initial gl_offs items */ - pathv += pglob->gl_offs; - for (i = pglob->gl_offs; --i >= 0; ) - *--pathv = NULL; - } - pglob->gl_pathv = pathv; - - for (p = path; *p++;) - ; - len = (STRLEN)(p - path); - *limitp += len; - Newx(copy, p-path, char); - if (copy != NULL) { - if (g_Ctoc(path, copy, len)) { - Safefree(copy); - return(GLOB_NOSPACE); - } - pathv[pglob->gl_offs + pglob->gl_pathc++] = copy; - } - pathv[pglob->gl_offs + pglob->gl_pathc] = NULL; - - if ((pglob->gl_flags & GLOB_LIMIT) && - newsize + *limitp >= (unsigned long)ARG_MAX) { - errno = 0; - return(GLOB_NOSPACE); - } - - return(copy == NULL ? GLOB_NOSPACE : 0); + newsize = sizeof(*pathv) * (2 + pglob->gl_pathc + pglob->gl_offs); + if (pglob->gl_pathv) + pathv = Renew(pglob->gl_pathv,newsize,char*); + else + Newx(pathv,newsize,char*); + if (pathv == NULL) { + if (pglob->gl_pathv) { + Safefree(pglob->gl_pathv); + pglob->gl_pathv = NULL; + } + return(GLOB_NOSPACE); + } + + if (pglob->gl_pathv == NULL && pglob->gl_offs > 0) { + /* first time around -- clear initial gl_offs items */ + pathv += pglob->gl_offs; + for (i = pglob->gl_offs; --i >= 0; ) + *--pathv = NULL; + } + pglob->gl_pathv = pathv; + + for (p = path; *p++;) + ; + len = (STRLEN)(p - path); + *limitp += len; + Newx(copy, p-path, char); + if (copy != NULL) { + if (g_Ctoc(path, copy, len)) { + Safefree(copy); + return(GLOB_NOSPACE); + } + pathv[pglob->gl_offs + pglob->gl_pathc++] = copy; + } + pathv[pglob->gl_offs + pglob->gl_pathc] = NULL; + + if ((pglob->gl_flags & GLOB_LIMIT) && + newsize + *limitp >= (unsigned long)ARG_MAX) { + errno = 0; + return(GLOB_NOSPACE); + } + + return(copy == NULL ? GLOB_NOSPACE : 0); } @@ -930,171 +926,171 @@ globextend(const Char *path, glob_t *pglob, size_t *limitp) static int match(Char *name, Char *pat, Char *patend, int nocase) { - int ok, negate_range; - Char c, k; - Char *nextp = NULL; - Char *nextn = NULL; + int ok, negate_range; + Char c, k; + Char *nextp = NULL; + Char *nextn = NULL; redo: - while (pat < patend) { - c = *pat++; - switch (c & M_MASK) { - case M_ALL: - if (pat == patend) - return(1); - if (*name == BG_EOS) - return 0; - nextn = name + 1; - nextp = pat - 1; - break; - case M_ONE: + while (pat < patend) { + c = *pat++; + switch (c & M_MASK) { + case M_ALL: + if (pat == patend) + return(1); + if (*name == BG_EOS) + return 0; + nextn = name + 1; + nextp = pat - 1; + break; + case M_ONE: /* since * matches leftmost-shortest first * * if we encounter the EOS then backtracking * * will not help, so we can exit early here. */ - if (*name++ == BG_EOS) + if (*name++ == BG_EOS) return 0; - break; - case M_SET: - ok = 0; + break; + case M_SET: + ok = 0; /* since * matches leftmost-shortest first * * if we encounter the EOS then backtracking * * will not help, so we can exit early here. */ - if ((k = *name++) == BG_EOS) + if ((k = *name++) == BG_EOS) return 0; - if ((negate_range = ((*pat & M_MASK) == M_NOT)) != BG_EOS) - ++pat; - while (((c = *pat++) & M_MASK) != M_END) - if ((*pat & M_MASK) == M_RNG) { - if (nocase) { - if (tolower(c) <= tolower(k) && tolower(k) <= tolower(pat[1])) - ok = 1; - } else { - if (c <= k && k <= pat[1]) - ok = 1; - } - pat += 2; - } else if (nocase ? (tolower(c) == tolower(k)) : (c == k)) - ok = 1; - if (ok == negate_range) - goto fail; - break; - default: - k = *name++; - if (nocase ? (tolower(k) != tolower(c)) : (k != c)) - goto fail; - break; - } - } - if (*name == BG_EOS) - return 1; + if ((negate_range = ((*pat & M_MASK) == M_NOT)) != BG_EOS) + ++pat; + while (((c = *pat++) & M_MASK) != M_END) + if ((*pat & M_MASK) == M_RNG) { + if (nocase) { + if (tolower(c) <= tolower(k) && tolower(k) <= tolower(pat[1])) + ok = 1; + } else { + if (c <= k && k <= pat[1]) + ok = 1; + } + pat += 2; + } else if (nocase ? (tolower(c) == tolower(k)) : (c == k)) + ok = 1; + if (ok == negate_range) + goto fail; + break; + default: + k = *name++; + if (nocase ? (tolower(k) != tolower(c)) : (k != c)) + goto fail; + break; + } + } + if (*name == BG_EOS) + return 1; fail: - if (nextn) { - pat = nextp; - name = nextn; - goto redo; - } - return 0; + if (nextn) { + pat = nextp; + name = nextn; + goto redo; + } + return 0; } /* Free allocated data belonging to a glob_t structure. */ void bsd_globfree(glob_t *pglob) { - int i; - char **pp; - - if (pglob->gl_pathv != NULL) { - pp = pglob->gl_pathv + pglob->gl_offs; - for (i = pglob->gl_pathc; i--; ++pp) - if (*pp) - Safefree(*pp); - Safefree(pglob->gl_pathv); - pglob->gl_pathv = NULL; - } + int i; + char **pp; + + if (pglob->gl_pathv != NULL) { + pp = pglob->gl_pathv + pglob->gl_offs; + for (i = pglob->gl_pathc; i--; ++pp) + if (*pp) + Safefree(*pp); + Safefree(pglob->gl_pathv); + pglob->gl_pathv = NULL; + } } static DIR * g_opendir(Char *str, glob_t *pglob) { - char buf[MAXPATHLEN]; + char buf[MAXPATHLEN]; - if (!*str) { - my_strlcpy(buf, ".", sizeof(buf)); - } else { - if (g_Ctoc(str, buf, sizeof(buf))) - return(NULL); - } + if (!*str) { + my_strlcpy(buf, ".", sizeof(buf)); + } else { + if (g_Ctoc(str, buf, sizeof(buf))) + return(NULL); + } - if (pglob->gl_flags & GLOB_ALTDIRFUNC) - return((DIR*)(*pglob->gl_opendir)(buf)); + if (pglob->gl_flags & GLOB_ALTDIRFUNC) + return((DIR*)(*pglob->gl_opendir)(buf)); - return(PerlDir_open(buf)); + return(PerlDir_open(buf)); } static int g_lstat(Char *fn, Stat_t *sb, glob_t *pglob) { - char buf[MAXPATHLEN]; + char buf[MAXPATHLEN]; - if (g_Ctoc(fn, buf, sizeof(buf))) - return(-1); - if (pglob->gl_flags & GLOB_ALTDIRFUNC) - return((*pglob->gl_lstat)(buf, sb)); + if (g_Ctoc(fn, buf, sizeof(buf))) + return(-1); + if (pglob->gl_flags & GLOB_ALTDIRFUNC) + return((*pglob->gl_lstat)(buf, sb)); #ifdef HAS_LSTAT - return(PerlLIO_lstat(buf, sb)); + return(PerlLIO_lstat(buf, sb)); #else - return(PerlLIO_stat(buf, sb)); + return(PerlLIO_stat(buf, sb)); #endif /* HAS_LSTAT */ } static int g_stat(Char *fn, Stat_t *sb, glob_t *pglob) { - char buf[MAXPATHLEN]; + char buf[MAXPATHLEN]; - if (g_Ctoc(fn, buf, sizeof(buf))) - return(-1); - if (pglob->gl_flags & GLOB_ALTDIRFUNC) - return((*pglob->gl_stat)(buf, sb)); - return(PerlLIO_stat(buf, sb)); + if (g_Ctoc(fn, buf, sizeof(buf))) + return(-1); + if (pglob->gl_flags & GLOB_ALTDIRFUNC) + return((*pglob->gl_stat)(buf, sb)); + return(PerlLIO_stat(buf, sb)); } static Char * g_strchr(Char *str, int ch) { - do { - if (*str == ch) - return (str); - } while (*str++); - return (NULL); + do { + if (*str == ch) + return (str); + } while (*str++); + return (NULL); } static int g_Ctoc(const Char *str, char *buf, STRLEN len) { - while (len--) { - if ((*buf++ = (char)*str++) == BG_EOS) - return (0); - } - return (1); + while (len--) { + if ((*buf++ = (char)*str++) == BG_EOS) + return (0); + } + return (1); } #ifdef GLOB_DEBUG static void qprintf(const char *str, Char *s) { - Char *p; - - (void)printf("%s:\n", str); - for (p = s; *p; p++) - (void)printf("%c", CHAR(*p)); - (void)printf("\n"); - for (p = s; *p; p++) - (void)printf("%c", *p & M_PROTECT ? '"' : ' '); - (void)printf("\n"); - for (p = s; *p; p++) - (void)printf("%c", ismeta(*p) ? '_' : ' '); - (void)printf("\n"); + Char *p; + + (void)printf("%s:\n", str); + for (p = s; *p; p++) + (void)printf("%c", CHAR(*p)); + (void)printf("\n"); + for (p = s; *p; p++) + (void)printf("%c", *p & M_PROTECT ? '"' : ' '); + (void)printf("\n"); + for (p = s; *p; p++) + (void)printf("%c", ismeta(*p) ? '_' : ' '); + (void)printf("\n"); } #endif /* GLOB_DEBUG */ diff --git a/gnu/usr.bin/perl/ext/GDBM_File/GDBM_File.pm b/gnu/usr.bin/perl/ext/GDBM_File/GDBM_File.pm index b4fc49f42e8..fe422a592ae 100644 --- a/gnu/usr.bin/perl/ext/GDBM_File/GDBM_File.pm +++ b/gnu/usr.bin/perl/ext/GDBM_File/GDBM_File.pm @@ -6,24 +6,612 @@ GDBM_File - Perl5 access to the gdbm library. =head1 SYNOPSIS - use GDBM_File ; - tie %hash, 'GDBM_File', $filename, &GDBM_WRCREAT, 0640; - # Use the %hash array. + use GDBM_File; + [$db =] tie %hash, 'GDBM_File', $filename, GDBM_WRCREAT, 0640 + or die "$GDBM_File::gdbm_errno"; + # Use the %hash... + + $e = $db->errno; + $e = $db->syserrno; + $str = $db->strerror; + $bool = $db->needs_recovery; + + $db->clear_error; + + $db->reorganize; + $db->sync; + + $n = $db->count; + + $n = $db->flags; + + $str = $db->dbname; + + $db->cache_size; + $db->cache_size($newsize); + + $n = $db->block_size; + + $bool = $db->sync_mode; + $db->sync_mode($bool); + + $bool = $db->centfree; + $db->centfree($bool); + + $bool = $db->coalesce; + $db->coalesce($bool); + + $bool = $db->mmap; + + $size = $db->mmapsize; + $db->mmapsize($newsize); + + $db->recover(%args); + untie %hash ; =head1 DESCRIPTION B is a module which allows Perl programs to make use of the facilities provided by the GNU gdbm library. If you intend to use this -module you should really have a copy of the gdbm manualpage at hand. +module you should really have a copy of the B at hand. +The manual is avaialble online at +L. -Most of the libgdbm.a functions are available through the GDBM_File +Most of the B functions are available through the B interface. Unlike Perl's built-in hashes, it is not safe to C the current item from a GDBM_File tied hash while iterating over it with C. This is a limitation of the gdbm library. +=head2 Tie + +Use the Perl built-in B to associate a B database with a Perl +hash: + + tie %hash, 'GDBM_File', $filename, $flags, $mode; + +Here, I<$filename> is the name of the database file to open or create. +I<$flags> is a bitwise OR of I and optional I. +Access mode is one of: + +=over 4 + +=item B + +Open existing database file in read-only mode. + +=item B + +Open existing database file in read-write mode. + +=item B + +If the database file exists, open it in read-write mode. If it doesn't, +create it first and open read-write. + +=item B + +Create new database and open it read-write. If the database already exists, +truncate it first. + +=back + +A number of modifiers can be OR'd to the access mode. Most of them are +rarely needed (see L +for a complete list), but one is worth mentioning. The B +modifier, when used with B, instructs B to create the +database in I (so called I) format. This format is +best suited for crash-tolerant implementations. See B +below for more information. + +The I<$mode> parameter is the file mode for creating new database +file. Use an octal constant or a combination of C constants +from the B module. This parameter is used if I<$flags> is +B or B. + +On success, B returns an object of class B. On failure, +it returns B. It is recommended to always check the return value, +to make sure your hash is successfully associated with the database file. +See B below for examples. + +=head1 STATIC METHODS + +=head2 GDBM_version + + $str = GDBM_File->GDBM_version; + @ar = GDBM_File->GDBM_version; + +Returns the version number of the underlying B library. In scalar +context, returns the library version formatted as string: + + MINOR.MAJOR[.PATCH][ (GUESS)] + +where I, I, and I are version numbers, and I is +a guess level (see below). + +In list context, returns a list: + + ( MINOR, MAJOR, PATCH [, GUESS] ) + +The I component is present only if B version is 1.8.3 or +earlier. This is because earlier releases of B did not include +information about their version and the B module has to implement +certain guesswork in order to determine it. I is a textual description +in string context, and a positive number indicating how rough the guess is +in list context. Possible values are: + +=over 4 + +=item 1 - exact guess + +The major and minor version numbers are guaranteed to be correct. The actual +patchlevel is most probably guessed right, but can be 1-2 less than indicated. + +=item 2 - approximate + +The major and minor number are guaranteed to be correct. The patchlevel is +set to the upper bound. + +=item 3 - rough guess + +The version is guaranteed to be not newer than B.I>. + +=back + +=head1 ERROR HANDLING + +=head2 $GDBM_File::gdbm_errno + +When referenced in numeric context, retrieves the current value of the +B variable, i.e. a numeric code describing the state of the +most recent operation on any B database. Each numeric code has a +symbolic name associated with it. For a comprehensive list of these, see +L. Notice, +that this list includes all error codes defined for the most recent +version of B. Depending on the actual version of the library +B is built with, some of these may be missing. + +In string context, B<$gdbm_errno> returns a human-readable description of +the error. If necessary, this description includes the value of B<$!>. +This makes it possible to use it in diagnostic messages. For example, +the usual tying sequence is + + tie %hash, 'GDBM_File', $filename, GDBM_WRCREAT, 0640 + or die "$GDBM_File::gdbm_errno"; + +The following, more complex, example illustrates how you can fall back +to read-only mode if the database file permissions forbid read-write +access: + + use Errno qw(EACCES); + unless (tie(%hash, 'GDBM_File', $filename, GDBM_WRCREAT, 0640)) { + if ($GDBM_File::gdbm_errno == GDBM_FILE_OPEN_ERROR + && $!{EACCES}) { + if (tie(%hash, 'GDBM_File', $filename, GDBM_READER, 0640)) { + die "$GDBM_File::gdbm_errno"; + } + } else { + die "$GDBM_File::gdbm_errno"; + } + } + +=head2 gdbm_check_syserr + + if (gdbm_check_syserr(gdbm_errno)) ... + +Returns true if the system error number (B<$!>) gives more information on +the cause of the error. + +=head1 DATABASE METHODS + +=head2 close + + $db->close; + +Closes the database. Normally you would just do B. However, you +will need to use this function if you have explicitly assigned the result +of B to a variable, and wish to release the database to another +users. Consider the following code: + + $db = tie %hash, 'GDBM_File', $filename, GDBM_WRCREAT, 0640; + # Do something with %hash or $db... + untie %hash; + $db->close; + +In this example, doing B alone is not enough, since the database +would remain referenced by B<$db>, and, as a consequence, the database file +would remain locked. Calling B<$db-Eclose> ensures the database file is +closed and unlocked. + +=head2 errno + + $db->errno + +Returns the last error status associated with this database. In string +context, returns a human-readable description of the error. See also +B<$GDBM_File::gdbm_errno> variable above. + +=head2 syserrno + + $db->syserrno + +Returns the last system error status (C C variable), associated with +this database, + +=head2 strerror + + $db->strerror + +Returns textual description of the last error that occurred in this database. + +=head2 clear_error + + $db->clear_error + +Clear error status. + +=head2 needs_recovery + + $db->needs_recovery + +Returns true if the database needs recovery. + +=head2 reorganize + + $db->reorganize; + +Reorganizes the database. + +=head2 sync + + $db->sync; + +Synchronizes recent changes to the database with its disk copy. + +=head2 count + + $n = $db->count; + +Returns number of keys in the database. + +=head2 flags + + $db->flags; + +Returns flags passed as 4th argument to B. + +=head2 dbname + + $db->dbname; + +Returns the database name (i.e. 3rd argument to B. + +=head2 cache_size + + $db->cache_size; + $db->cache_size($newsize); + +Returns the size of the internal B cache for that database. + +Called with argument, sets the size to I<$newsize>. + +=head2 block_size + + $db->block_size; + +Returns the block size of the database. + +=head2 sync_mode + + $db->sync_mode; + $db->sync_mode($bool); + +Returns the status of the automatic synchronization mode. Called with argument, +enables or disables the sync mode, depending on whether $bool is B or +B. + +When synchronization mode is on (B), any changes to the database are +immediately written to the disk. This ensures database consistency in case +of any unforeseen errors (e.g. power failures), at the expense of considerable +slowdown of operation. + +Synchronization mode is off by default. + +=head2 centfree + + $db->centfree; + $db->centfree($bool); + +Returns status of the central free block pool (B<0> - disabled, +B<1> - enabled). + +With argument, changes its status. + +By default, central free block pool is disabled. + +=head2 coalesce + + $db->coalesce; + $db->coalesce($bool); + +=head2 mmap + + $db->mmap; + +Returns true if memory mapping is enabled. + +This method will B if the B library is complied without +memory mapping support. + +=head2 mmapsize + + $db->mmapsize; + $db->mmapsize($newsize); + +If memory mapping is enabled, returns the size of memory mapping. With +argument, sets the size to B<$newsize>. + +This method will B if the B library is complied without +memory mapping support. + +=head2 recover + + $db->recover(%args); + +Recovers data from a failed database. B<%args> is optional and can contain +following keys: + +=over 4 + +=item err => sub { ... } + +Reference to code for detailed error reporting. Upon encountering an error, +B will call this sub with a single argument - a description of the +error. + +=item backup => \$str + +Creates a backup copy of the database before recovery and returns its +filename in B<$str>. + +=item max_failed_keys => $n + +Maximum allowed number of failed keys. If the actual number becomes equal +to I<$n>, B aborts and returns error. + +=item max_failed_buckets => $n + +Maximum allowed number of failed buckets. If the actual number becomes equal +to I<$n>, B aborts and returns error. + +=item max_failures => $n + +Maximum allowed number of failures during recovery. + +=item stat => \%hash + +Return recovery statistics in I<%hash>. Upon return, the following keys will +be present: + +=over 8 + +=item recovered_keys + +Number of successfully recovered keys. + +=item recovered_buckets + +Number of successfully recovered buckets. + +=item failed_keys + +Number of keys that failed to be retrieved. + +=item failed_buckets + +Number of buckets that failed to be retrieved. + +=back + +=back + +=head2 convert + + $db->convert($format); + +Changes the format of the database file referred to by B<$db>. + +Starting from version 1.20, B supports two database file formats: +I and I. The former is the traditional database +format, used by previous B versions. The I format contains +additional data and is recommended for use in crash tolerant applications. + +L, for the +discussion of both formats. + +The B<$format> argument sets the new desired database format. It is +B to convert the database from standard to extended format, and +B<0> to convert it from extended to standard format. + +If the database is already in the requested format, the function returns +success without doing anything. + +=head2 dump + + $db->dump($filename, %options) + +Creates a dump of the database file in I<$filename>. Such file can be used +as a backup copy or sent over a wire to recreate the database on another +machine. To create a database from the dump file, use the B method. + +B supports two dump formats: old I and new I. The +binary format is not portable across architectures and is deprecated. It +is supported for backward compatibility. The ascii format is portable and +stores additional meta-data about the file. It was introduced with the +B version 1.11 and is the preferred dump format. The B method +creates ascii dumps by default. + +If the named file already exists, the function will refuse to overwrite and +will croak an error. If it doesn't exist, it will be created with the +mode B<0666> modified by the current B. + +These defaults can be altered using the following I<%options>: + +=over 4 + +=item B => 1 + +Create dump in I format. + +=item B => I + +Set file mode to I. + +=item B => 1 + +Silently overwrite existing files. + +=back + +=head2 load + + $db->load($filename, %options) + +Load the data from the dump file I<$filename> into the database I<$db>. +The file must have been previously created using the B method. File +format is recognized automatically. By default, the function will croak +if the dump contains a key that already exists in the database. It will +silently ignore the failure to restore database mode and/or ownership. +These defaults can be altered using the following I<%options>: + +=over 4 + +=item B => 1 + +Replace existing keys. + +=item B => 0 | 1 + +If I<0>, don't try to restore the mode of the database file to that stored +in the dump. + +=item B => 0 | 1 + +If I<0>, don't try to restore the owner of the database file to that stored +in the dump. + +=item B => 1 + +Croak if failed to restore ownership and/or mode. + +=back + +The usual sequence to recreate a database from the dump file is: + + my %hash; + my $db = tie %hash, 'GDBM_File', 'a.db', GDBM_NEWDB, 0640; + $db->load('a.dump'); + +=head1 CRASH TOLERANCE + +Crash tolerance is a new feature that, given appropriate support from the OS +and the filesystem, guarantees that a logically consistent recent state of the +database can be recovered following a crash, such as power outage, OS kernel +panic, or the like. + +Crash tolerance support appeared in B version 1.21. The theory behind +it is explained in "Crashproofing the Original NoSQL Key-Value Store", +by Terence Kelly (L). A +detailed discussion of the B implementation is available in the +B (L). The information below describes the Perl interface. + +For maximum robustness, we recommend to use I +for crash tolerant databases. To create a database in extended format, +use the B when opening the database, e.g.: + + $db = tie %hash, 'GDBM_File', $filename, + GDBM_NEWDB|GDBM_NUMSYNC, 0640; + +To convert existing database to the extended format, use the B +method, described above, e.g.: + + $db->convert(GDBM_NUMSYNC); + +=head2 crash_tolerance_status + + GDBM_File->crash_tolerance_status; + +This static method returns the status of crash tolerance support. A +non-zero value means crash tolerance is compiled in and supported by +the operating system. + +=head2 failure_atomic + + $db->failure_atomic($even, $odd) + +Enables crash tolerance for the database B<$db>, Arguments are +the pathnames of two files that will be created and filled with +I of the database file. The two files must not exist +when this method is called and must reside on the same filesystem +as the database file. This filesystem must be support the I +operation (https://www.gnu.org.ua/software/gdbm/manual/Filesystems-supporting-crash-tolerance.html>. + +After a successful call to B, every call to B<$db->sync> +method will make an efficient reflink snapshot of the database file in +one of these files; consecutive calls to B alternate between the +two, hence the names. + +The most recent of these files can be used to recover the database after +a crash. To select the right snapshot, use the B +static method. + +=head2 latest_snapshot + + $file = GDBM_File->latest_snapshot($even, $odd); + + ($file, $error) = GDBM_File->latest_snapshot($even, $odd); + +Given the two snapshot names (the ones used previously in a call to +B), this method selects the one suitable for database +recovery, i.e. the file which contains the most recent database snapshot. + +In scalar context, it returns the selected file name or B in case +of failure. + +In array context, the returns a list of two elements: the file name +and status code. On success, the file name is defined and the code +is B. On error, the file name is B, and +the status is one of the following: + +=over 4 + +=item GDBM_SNAPSHOT_BAD + +Neither snapshot file is applicable. This means that the crash has occurred +before a call to B completed. In this case, it is best to +fall back on a safe backup copy of the data file. + +=item GDBM_SNAPSHOT_ERR + +A system error occurred. Examine B<$!> for details. See + for +a comprehensive list of error codes and their meaning. + +=item GDBM_SNAPSHOT_SAME + +The file modes and modification dates of both snapshot files are exactly the +same. This can happen only for databases in standard format. + +=item GDBM_SNAPSHOT_SUSPICIOUS + +The I counters of the two snapshots differ by more than one. The +most probable reason is programmer's error: the two parameters refer to +snapshots belonging to different database files. + +=back + =head1 AVAILABILITY gdbm is available from any GNU archive. The master site is @@ -33,25 +621,25 @@ L. =head1 SECURITY AND PORTABILITY -B +GDBM files are not portable across platforms. If you wish to transfer +a GDBM file over the wire, dump it to a portable format first. -GDBM files are not portable across platforms. - -The GDBM documentation doesn't imply that files from untrusted sources -can be safely used with C. - -A maliciously crafted file might cause perl to crash or even expose a -security vulnerability. - -=head1 BUGS - -The available functions and the gdbm/perl interface need to be documented. +B -The GDBM error number and error message interface needs to be added. +Robustness of GDBM against corrupted databases depends highly on its +version. Versions prior to 1.15 did not implement any validity +checking, so that a corrupted or maliciously crafted database file +could cause perl to crash or even expose a security vulnerability. +Versions between 1.15 and 1.20 were progressively strengthened against +invalid inputs. Finally, version 1.21 had undergone extensive fuzzy +checking which proved its ability to withstand any kinds of inputs +without crashing. =head1 SEE ALSO -L, L, L. +L, L, L, +L, +L. =cut @@ -63,29 +651,91 @@ our($VERSION, @ISA, @EXPORT); require Carp; require Tie::Hash; -require Exporter; +use Exporter 'import'; require XSLoader; -@ISA = qw(Tie::Hash Exporter); +@ISA = qw(Tie::Hash); @EXPORT = qw( - GDBM_CACHESIZE - GDBM_CENTFREE - GDBM_COALESCEBLKS - GDBM_FAST - GDBM_FASTMODE - GDBM_INSERT - GDBM_NEWDB - GDBM_NOLOCK - GDBM_OPENMASK - GDBM_READER - GDBM_REPLACE - GDBM_SYNC - GDBM_SYNCMODE - GDBM_WRCREAT - GDBM_WRITER + GDBM_CACHESIZE + GDBM_CENTFREE + GDBM_COALESCEBLKS + GDBM_FAST + GDBM_FASTMODE + GDBM_INSERT + GDBM_NEWDB + GDBM_NOLOCK + GDBM_OPENMASK + GDBM_READER + GDBM_REPLACE + GDBM_SYNC + GDBM_SYNCMODE + GDBM_WRCREAT + GDBM_WRITER + GDBM_NOMMAP + GDBM_CLOEXEC + GDBM_BSEXACT + GDBM_XVERIFY + GDBM_PREREAD + GDBM_NUMSYNC + GDBM_SNAPSHOT_OK + GDBM_SNAPSHOT_BAD + GDBM_SNAPSHOT_ERR + GDBM_SNAPSHOT_SAME + GDBM_SNAPSHOT_SUSPICIOUS + GDBM_NO_ERROR + GDBM_MALLOC_ERROR + GDBM_BLOCK_SIZE_ERROR + GDBM_FILE_OPEN_ERROR + GDBM_FILE_WRITE_ERROR + GDBM_FILE_SEEK_ERROR + GDBM_FILE_READ_ERROR + GDBM_BAD_MAGIC_NUMBER + GDBM_EMPTY_DATABASE + GDBM_CANT_BE_READER + GDBM_CANT_BE_WRITER + GDBM_READER_CANT_DELETE + GDBM_READER_CANT_STORE + GDBM_READER_CANT_REORGANIZE + GDBM_UNKNOWN_UPDATE + GDBM_ITEM_NOT_FOUND + GDBM_REORGANIZE_FAILED + GDBM_CANNOT_REPLACE + GDBM_ILLEGAL_DATA + GDBM_OPT_ALREADY_SET + GDBM_OPT_ILLEGAL + GDBM_BYTE_SWAPPED + GDBM_BAD_FILE_OFFSET + GDBM_BAD_OPEN_FLAGS + GDBM_FILE_STAT_ERROR + GDBM_FILE_EOF + GDBM_NO_DBNAME + GDBM_ERR_FILE_OWNER + GDBM_ERR_FILE_MODE + GDBM_UNKNOWN_ERROR + GDBM_NEED_RECOVERY + GDBM_BACKUP_FAILED + GDBM_DIR_OVERFLOW + GDBM_BAD_BUCKET + GDBM_BAD_HEADER + GDBM_BAD_AVAIL + GDBM_BAD_HASH_TABLE + GDBM_BAD_DIR_ENTRY + GDBM_FILE_CLOSE_ERROR + GDBM_FILE_SYNC_ERROR + GDBM_FILE_TRUNCATE_ERROR + GDBM_BUCKET_CACHE_CORRUPTED + GDBM_BAD_HASH_ENTRY + GDBM_MALFORMED_DATA + GDBM_OPT_BADVAL + GDBM_ERR_SNAPSHOT_CLONE + GDBM_ERR_REALPATH + GDBM_ERR_USAGE + gdbm_check_syserr ); # This module isn't dual life, so no need for dev version numbers. -$VERSION = '1.18'; +$VERSION = '1.23'; + +our $gdbm_errno; XSLoader::load(); diff --git a/gnu/usr.bin/perl/ext/GDBM_File/typemap b/gnu/usr.bin/perl/ext/GDBM_File/typemap index 8d6edeed355..7bc475daf63 100644 --- a/gnu/usr.bin/perl/ext/GDBM_File/typemap +++ b/gnu/usr.bin/perl/ext/GDBM_File/typemap @@ -11,6 +11,7 @@ SDBM_File T_PTROBJ ODBM_File T_PTROBJ DB_File T_PTROBJ DBZ_File T_PTROBJ +gdbm_count_t T_UV INPUT T_DATUM_K diff --git a/gnu/usr.bin/perl/ext/Hash-Util-FieldHash/FieldHash.xs b/gnu/usr.bin/perl/ext/Hash-Util-FieldHash/FieldHash.xs index 9cfd87a694b..80ef639265c 100644 --- a/gnu/usr.bin/perl/ext/Hash-Util-FieldHash/FieldHash.xs +++ b/gnu/usr.bin/perl/ext/Hash-Util-FieldHash/FieldHash.xs @@ -289,7 +289,8 @@ HUF_fix_trigger(pTHX_ SV *trigger, SV *new_id) { HV* new_tab = newHV(); HE* ent; SV* old_id = *av_fetch(cont, 0, 0); - hv_iterinit(field_tab); + I32 entries = hv_iterinit(field_tab); + hv_ksplit(new_tab, entries); while ((ent = hv_iternext(field_tab))) { SV* field_ref = HeVAL(ent); HV* field = (HV*)SvRV(field_ref); @@ -318,8 +319,8 @@ HUF_fix_objects(pTHX) { hv_iterinit(MY_CXT.ob_reg); while((ent = hv_iternext(MY_CXT.ob_reg))) av_push(oblist, SvREFCNT_inc(hv_iterkeysv(ent))); - len = av_tindex(oblist); - for (i = 0; i <= len; ++i) { + len = av_count(oblist); + for (i = 0; i < len; ++i) { SV* old_id = *av_fetch(oblist, i, 0); SV* trigger = hv_delete_ent(MY_CXT.ob_reg, old_id, 0, 0); SV* obj = SvRV(trigger); diff --git a/gnu/usr.bin/perl/ext/Hash-Util-FieldHash/lib/Hash/Util/FieldHash.pm b/gnu/usr.bin/perl/ext/Hash-Util-FieldHash/lib/Hash/Util/FieldHash.pm index 7b39cca450a..f010b2d03c7 100644 --- a/gnu/usr.bin/perl/ext/Hash-Util-FieldHash/lib/Hash/Util/FieldHash.pm +++ b/gnu/usr.bin/perl/ext/Hash-Util-FieldHash/lib/Hash/Util/FieldHash.pm @@ -1,14 +1,13 @@ package Hash::Util::FieldHash; -use 5.009004; use strict; use warnings; -use Scalar::Util qw( reftype); +no warnings 'experimental::builtin'; +use builtin qw(reftype); -our $VERSION = '1.20'; +our $VERSION = '1.26'; -require Exporter; -our @ISA = qw(Exporter); +use Exporter 'import'; our %EXPORT_TAGS = ( 'all' => [ qw( fieldhash diff --git a/gnu/usr.bin/perl/ext/Hash-Util-FieldHash/t/05_perlhook.t b/gnu/usr.bin/perl/ext/Hash-Util-FieldHash/t/05_perlhook.t index ab3d74ba57e..8c1ccb447c9 100755 --- a/gnu/usr.bin/perl/ext/Hash-Util-FieldHash/t/05_perlhook.t +++ b/gnu/usr.bin/perl/ext/Hash-Util-FieldHash/t/05_perlhook.t @@ -1,10 +1,10 @@ -#!perl -use strict; use warnings; +use strict; +use warnings; use Test::More; -my $n_tests; use Hash::Util::FieldHash; -use Scalar::Util qw( weaken); +no warnings 'experimental::builtin'; +use builtin qw(weaken); sub numbers_first { # Sort helper: All digit entries sort in front of others # Makes sorting portable across ASCII/EBCDIC @@ -38,7 +38,7 @@ sub numbers_first { # Sort helper: All digit entries sort in front of others weaken $magref; is( $counter, 1, "weaken doesn't trigger magic"); - + { my $x = $magref } is( $counter, 1, "read doesn't trigger magic"); @@ -54,13 +54,11 @@ sub numbers_first { # Sort helper: All digit entries sort in front of others $magref = my $other_ref = []; is( $counter, 2, "overwrite triggers"); - + undef $ref; is( $counter, 2, "ref expiry doesn't trigger after overwrite"); is( $magref, $other_ref, "weak ref doesn't kill overwritten value"); - - BEGIN { $n_tests += 10 } } # magical hash (patches to mg.c and hv.c) @@ -175,7 +173,7 @@ sub numbers_first { # Sort helper: All digit entries sort in front of others () = values %i; $x = each %i; () = each %i; - + is( $counter, 0, "normal set magic never triggers"); bless \ %i, 'abc'; @@ -206,9 +204,6 @@ sub numbers_first { # Sort helper: All digit entries sort in front of others bless \ %j, 'abc'; is( $counter, 1, "...except for bless"); - - BEGIN { $n_tests += 43 } } -BEGIN { plan tests => $n_tests } - +done_testing; diff --git a/gnu/usr.bin/perl/ext/Hash-Util/Changes b/gnu/usr.bin/perl/ext/Hash-Util/Changes index beb3f7eb409..7d405a2b537 100644 --- a/gnu/usr.bin/perl/ext/Hash-Util/Changes +++ b/gnu/usr.bin/perl/ext/Hash-Util/Changes @@ -1,5 +1,14 @@ Revision history for Perl extension Hash::Util. +0.25, 0.24 + Build fixes. + +0.23 + Doc Fixes. + +0.22, 0.21 + Build Fixes. + 0.20 Add bucket_ratio, num_buckets, used_buckets as a back-compat shin for 5.25 where we remove the bucket data from scalar(%hash) diff --git a/gnu/usr.bin/perl/ext/Hash-Util/Util.xs b/gnu/usr.bin/perl/ext/Hash-Util/Util.xs index 095a78c6e6d..4e49a095e32 100644 --- a/gnu/usr.bin/perl/ext/Hash-Util/Util.xs +++ b/gnu/usr.bin/perl/ext/Hash-Util/Util.xs @@ -95,8 +95,8 @@ hash_value(string,...) U8 *seedbuf= (U8 *)SvPV(ST(1),seedlen); if ( seedlen < PERL_HASH_SEED_BYTES ) { sv_dump(ST(1)); - Perl_croak(aTHX_ "seed len must be at least %d long only got %" - UVuf " bytes", PERL_HASH_SEED_BYTES, (UV)seedlen); + Perl_croak(aTHX_ "seed len must be at least %" UVuf " long only got %" + UVuf " bytes", (UV)PERL_HASH_SEED_BYTES, (UV)seedlen); } PERL_HASH_WITH_SEED(seedbuf, uv, pv, len); @@ -284,7 +284,7 @@ bucket_ratio(rhv) if (SvROK(rhv)) { rhv= SvRV(rhv); if ( SvTYPE(rhv)==SVt_PVHV ) { -#if PERL_VERSION < 25 +#if PERL_VERSION_LT(5,25,0) SV *ret= Perl_hv_scalar(aTHX_ (HV*)rhv); #else SV *ret= Perl_hv_bucket_ratio(aTHX_ (HV*)rhv); diff --git a/gnu/usr.bin/perl/ext/Hash-Util/lib/Hash/Util.pm b/gnu/usr.bin/perl/ext/Hash-Util/lib/Hash/Util.pm index 4224239d91d..0b42922c966 100644 --- a/gnu/usr.bin/perl/ext/Hash-Util/lib/Hash/Util.pm +++ b/gnu/usr.bin/perl/ext/Hash-Util/lib/Hash/Util.pm @@ -6,10 +6,10 @@ use Carp; use warnings; no warnings 'uninitialized'; use warnings::register; -use Scalar::Util qw(reftype); +no warnings 'experimental::builtin'; +use builtin qw(reftype); require Exporter; -our @ISA = qw(Exporter); our @EXPORT_OK = qw( fieldhash fieldhashes @@ -42,7 +42,7 @@ our @EXPORT_OK = qw( BEGIN { # make sure all our XS routines are available early so their prototypes # are correctly applied in the following code. - our $VERSION = '0.23'; + our $VERSION = '0.28'; require XSLoader; XSLoader::load(); } @@ -510,13 +510,22 @@ Perl has been built with. Possible sizes may be but are not limited to =item B my $hash_value = hash_value($string); - -hash_value() returns the current perl's internal hash value for a given -string. - -Returns a 32 bit integer representing the hash value of the string passed -in. This value is only reliable for the lifetime of the process. It may -be different depending on invocation, environment variables, perl version, + my $hash_value = hash_value($string, $seed); + +C +returns +the current perl's internal hash value for a given string. +C +returns the hash value as if computed with a different seed. +If the custom seed is too short, the function errors out. +The minimum length of the seed is implementation-dependent. + +Returns a 32-bit integer +representing the hash value of the string passed in. +The 1-parameter value is only reliable +for the lifetime of the process. +It may be different +depending on invocation, environment variables, perl version, architectures, and build options. B: @@ -833,6 +842,9 @@ hv_store() is from Array::RefElem, Copyright 2000 Gisle Aas. Additional code by Yves Orton. +Description of C +by Christopher Yeleighton + =head1 SEE ALSO L, L and L. diff --git a/gnu/usr.bin/perl/ext/Hash-Util/t/Util.t b/gnu/usr.bin/perl/ext/Hash-Util/t/Util.t index c52a8e4b884..33d99679a21 100755 --- a/gnu/usr.bin/perl/ext/Hash-Util/t/Util.t +++ b/gnu/usr.bin/perl/ext/Hash-Util/t/Util.t @@ -46,7 +46,7 @@ BEGIN { lock_hash_recurse unlock_hash_recurse lock_hashref_recurse unlock_hashref_recurse ); - plan tests => 244 + @Exported_Funcs; + plan tests => 250 + @Exported_Funcs; use_ok 'Hash::Util', @Exported_Funcs; } foreach my $func (@Exported_Funcs) { @@ -597,7 +597,27 @@ ok(defined($hash_seed) && $hash_seed ne '', "hash_seed $hash_seed"); my $h2= hash_value("bar"); is( $h1, hash_value("foo") ); is( $h2, hash_value("bar") ); + + my $seed= hash_seed(); + my $h1s= hash_value("foo",$seed); + my $h2s= hash_value("bar",$seed); + + is( $h1s, hash_value("foo",$seed) ); + is( $h2s, hash_value("bar",$seed) ); + + $seed= join "", map { chr $_ } 1..length($seed); + + my $h1s2= hash_value("foo",$seed); + my $h2s2= hash_value("bar",$seed); + + is( $h1s2, hash_value("foo",$seed) ); + is( $h2s2, hash_value("bar",$seed) ); + + isnt($h1s,$h1s2); + isnt($h1s,$h1s2); + } + { my @info1= bucket_info({}); my @info2= bucket_info({1..10}); diff --git a/gnu/usr.bin/perl/ext/I18N-Langinfo/Langinfo.pm b/gnu/usr.bin/perl/ext/I18N-Langinfo/Langinfo.pm index 7206e1ce859..fd34a8a29ff 100644 --- a/gnu/usr.bin/perl/ext/I18N-Langinfo/Langinfo.pm +++ b/gnu/usr.bin/perl/ext/I18N-Langinfo/Langinfo.pm @@ -5,11 +5,9 @@ use strict; use warnings; use Carp; -require Exporter; +use Exporter 'import'; require XSLoader; -our @ISA = qw(Exporter); - our @EXPORT = qw(langinfo); our @EXPORT_OK = qw( @@ -72,7 +70,7 @@ our @EXPORT_OK = qw( YESSTR ); -our $VERSION = '0.19'; +our $VERSION = '0.21'; XSLoader::load(); @@ -226,15 +224,14 @@ representation. =item C The return may be incorrect for those rare locales where the currency symbol -replaces the radix character. -Send email to L if you have examples of it needing -to work differently. +replaces the radix character. If you have examples of it needing to work +differently, please file a report at L. =item C -Currently this gives the same results as Linux does. -Send email to L if you have examples of it needing -to work differently. +Currently this gives the same results as Linux does. If you have examples of +it needing to work differently, please file a report at +L. =item C diff --git a/gnu/usr.bin/perl/ext/IPC-Open3/lib/IPC/Open3.pm b/gnu/usr.bin/perl/ext/IPC-Open3/lib/IPC/Open3.pm index ce39d78f1ea..b74609db62f 100644 --- a/gnu/usr.bin/perl/ext/IPC-Open3/lib/IPC/Open3.pm +++ b/gnu/usr.bin/perl/ext/IPC-Open3/lib/IPC/Open3.pm @@ -2,16 +2,14 @@ package IPC::Open3; use strict; no strict 'refs'; # because users pass me bareword filehandles -our ($VERSION, @ISA, @EXPORT); -require Exporter; +use Exporter 'import'; use Carp; use Symbol qw(gensym qualify); -$VERSION = '1.21'; -@ISA = qw(Exporter); -@EXPORT = qw(open3); +our $VERSION = '1.22'; +our @EXPORT = qw(open3); =head1 NAME diff --git a/gnu/usr.bin/perl/ext/IPC-Open3/t/IPC-Open3.t b/gnu/usr.bin/perl/ext/IPC-Open3/t/IPC-Open3.t index aa196e5cf20..29fe8999056 100755 --- a/gnu/usr.bin/perl/ext/IPC-Open3/t/IPC-Open3.t +++ b/gnu/usr.bin/perl/ext/IPC-Open3/t/IPC-Open3.t @@ -4,7 +4,7 @@ BEGIN { require Config; import Config; if (!$Config{'d_fork'} # open2/3 supported on win32 - && $^O ne 'MSWin32' && $^O ne 'NetWare') + && $^O ne 'MSWin32') { print "1..0\n"; exit 0; @@ -23,7 +23,7 @@ use POSIX ":sys_wait_h"; my $perl = $^X; sub cmd_line { - if ($^O eq 'MSWin32' || $^O eq 'NetWare') { + if ($^O eq 'MSWin32') { my $cmd = shift; $cmd =~ tr/\r\n//d; $cmd =~ s/"/\\"/g; diff --git a/gnu/usr.bin/perl/ext/NDBM_File/Makefile.PL b/gnu/usr.bin/perl/ext/NDBM_File/Makefile.PL index 539a377488f..fe2cb407f57 100644 --- a/gnu/usr.bin/perl/ext/NDBM_File/Makefile.PL +++ b/gnu/usr.bin/perl/ext/NDBM_File/Makefile.PL @@ -1,7 +1,7 @@ use ExtUtils::MakeMaker; WriteMakefile( NAME => 'NDBM_File', - #LIBS => ["-L/usr/local/lib -lndbm", "-ldbm -lucb"], + LIBS => ["-L/usr/local/lib -lndbm", "-ldbm -lucb"], XSPROTOARG => '-noprototypes', # XXX remove later? VERSION_FROM => 'NDBM_File.pm', ); diff --git a/gnu/usr.bin/perl/ext/ODBM_File/ODBM_File.pm b/gnu/usr.bin/perl/ext/ODBM_File/ODBM_File.pm index 7bdbecc73cc..1b49440f3a0 100644 --- a/gnu/usr.bin/perl/ext/ODBM_File/ODBM_File.pm +++ b/gnu/usr.bin/perl/ext/ODBM_File/ODBM_File.pm @@ -7,7 +7,7 @@ require Tie::Hash; require XSLoader; our @ISA = qw(Tie::Hash); -our $VERSION = "1.16"; +our $VERSION = "1.17"; XSLoader::load(); diff --git a/gnu/usr.bin/perl/ext/ODBM_File/ODBM_File.xs b/gnu/usr.bin/perl/ext/ODBM_File/ODBM_File.xs index 9b708119aee..38e6dbf446a 100644 --- a/gnu/usr.bin/perl/ext/ODBM_File/ODBM_File.xs +++ b/gnu/usr.bin/perl/ext/ODBM_File/ODBM_File.xs @@ -181,6 +181,14 @@ int odbm_DELETE(db, key) ODBM_File db datum_key key + CODE: + /* don't warn about 'delete' being a C++ keyword */ + GCC_DIAG_IGNORE_STMT(-Wc++-compat); + RETVAL = odbm_DELETE(db, key); + GCC_DIAG_RESTORE_STMT; + OUTPUT: + RETVAL + datum_key odbm_FIRSTKEY(db) diff --git a/gnu/usr.bin/perl/ext/Opcode/Opcode.pm b/gnu/usr.bin/perl/ext/Opcode/Opcode.pm index 9351c3ba207..051fad78912 100644 --- a/gnu/usr.bin/perl/ext/Opcode/Opcode.pm +++ b/gnu/usr.bin/perl/ext/Opcode/Opcode.pm @@ -6,14 +6,13 @@ use strict; our($VERSION, @ISA, @EXPORT_OK); -$VERSION = "1.48"; +$VERSION = "1.57"; use Carp; -use Exporter (); +use Exporter 'import'; use XSLoader; BEGIN { - @ISA = qw(Exporter); @EXPORT_OK = qw( opset ops_to_opset opset_to_ops opset_to_hex invert_opset @@ -354,6 +353,9 @@ invert_opset function. cmpchain_and cmpchain_dup + is_bool + is_weak weaken unweaken + leaveeval -- needed for Safe to operate, is safe without entereval @@ -415,6 +417,7 @@ These are a hotchpotch of opcodes still waiting to be considered once rv2gv refgen srefgen ref refassign lvref lvrefslice lvavref + blessed refaddr reftype bless -- could be used to change ownership of objects (reblessing) @@ -435,14 +438,19 @@ These are a hotchpotch of opcodes still waiting to be considered localtime gmtime entertry leavetry -- can be used to 'hide' fatal errors + entertrycatch poptry catch leavetrycatch -- similar entergiven leavegiven enterwhen leavewhen break continue smartmatch + pushdefer + custom -- where should this go + ceil floor + =item :base_math These ops are not included in :base_core because of the risk of them being @@ -610,4 +618,3 @@ Split out from Safe module version 1, named opcode tags and other changes added by Tim Bunce. =cut - diff --git a/gnu/usr.bin/perl/ext/Opcode/Opcode.xs b/gnu/usr.bin/perl/ext/Opcode/Opcode.xs index 121b14f8e37..44a6d7c3543 100644 --- a/gnu/usr.bin/perl/ext/Opcode/Opcode.xs +++ b/gnu/usr.bin/perl/ext/Opcode/Opcode.xs @@ -55,6 +55,7 @@ op_names_init(pTHX) dMY_CXT; op_named_bits = newHV(); + hv_ksplit(op_named_bits, PL_maxo); op_names = get_op_names(); for(i=0; i < PL_maxo; ++i) { SV * const sv = newSViv(i); @@ -68,7 +69,7 @@ op_names_init(pTHX) bitmap = (U8*)SvPV(opset_all, len); memset(bitmap, 0xFF, len-1); /* deal with last byte specially, see below */ /* Take care to set the right number of bits in the last byte */ - bitmap[len-1] = (PL_maxo & 0x07) ? ((~(0xFF << (PL_maxo & 0x07))) & 0xFF) + bitmap[len-1] = (PL_maxo & 0x07) ? ((U8) (~(0xFF << (PL_maxo & 0x07)))) : 0xFF; put_op_bitspec(aTHX_ STR_WITH_LEN(":all"), opset_all); /* don't mortalise */ } @@ -237,7 +238,8 @@ opmask_addlocal(pTHX_ SV *opset, char *op_mask_buf) /* Localise PL_op_mask then * is disallowed by Borland */ if (opcode_debug >= 2) - SAVEDESTRUCTOR((void(*)(void*))Perl_warn,"PL_op_mask restored"); + SAVEDESTRUCTOR((void(*)(void*))Perl_warn_nocontext, + "PL_op_mask restored"); PL_op_mask = &op_mask_buf[0]; if (orig_op_mask) Copy(orig_op_mask, PL_op_mask, PL_maxo, char); @@ -535,7 +537,7 @@ CODE: void opcodes() PPCODE: - if (GIMME_V == G_ARRAY) { + if (GIMME_V == G_LIST) { croak("opcodes in list context not yet implemented"); /* XXX */ } else { diff --git a/gnu/usr.bin/perl/ext/POSIX/Makefile.PL b/gnu/usr.bin/perl/ext/POSIX/Makefile.PL index 5d5c009c3c9..462b8ede017 100644 --- a/gnu/usr.bin/perl/ext/POSIX/Makefile.PL +++ b/gnu/usr.bin/perl/ext/POSIX/Makefile.PL @@ -82,7 +82,6 @@ my @names = {name=>"NULL", value=>"0"}, {name=>"_POSIX_JOB_CONTROL", type=>"YES", default=>["IV", "0"]}, {name=>"_POSIX_SAVED_IDS", type=>"YES", default=>["IV", "0"]}, - {name=>'FLT_ROUNDS', type=>"NV", not_constant=>1}, {name=>"HUGE_VAL", type=>"NV", not_constant=>1, macro=>[<<'END', "#endif\n"], #if (defined(USE_LONG_DOUBLE) && defined(HUGE_VALL)) || defined(HUGE_VAL) @@ -95,17 +94,19 @@ END #else HUGE_VAL #endif - '}); + '}, + # POSIX says these are constant expressions, but if these are not available + # we might fallback to NV_INF/NV_NAN which may be not constants. + {name=>"INFINITY", type=>"NV", not_constant=>1}, + {name=>"NAN", type=>"NV", not_constant=>1}); if ($Config{d_double_has_inf}) { push @names, - {name=>"INFINITY", type=>"NV", value=>"NV_INF", not_constant=>1}, {name=>"Inf", type=>"NV", value=>"NV_INF", not_constant=>1}, } if ($Config{d_double_has_nan}) { push @names, - {name=>"NAN", type=>"NV", value=>"NV_NAN", not_constant=>1}, {name=>"NaN", type=>"NV", value=>"NV_NAN", not_constant=>1}; } @@ -116,15 +117,18 @@ push @names, {name=>$_, type=>"NV", not_constant=>1} foreach (qw(DBL_MAX FLT_MAX LDBL_MAX LDBL_MIN LDBL_EPSILON DBL_EPSILON DBL_MIN FLT_EPSILON FLT_MIN)); -push @names, {name=>$_, type=>"NV"} +push @names, {name=>$_, type=>"IV"} foreach (qw(DBL_DIG DBL_MANT_DIG DBL_MAX_10_EXP DBL_MAX_EXP DBL_MIN_10_EXP DBL_MIN_EXP FLT_DIG FLT_MANT_DIG FLT_MAX_10_EXP FLT_MAX_EXP FLT_MIN_10_EXP FLT_MIN_EXP FLT_RADIX LDBL_DIG LDBL_MANT_DIG LDBL_MAX_10_EXP LDBL_MAX_EXP LDBL_MIN_10_EXP LDBL_MIN_EXP)); -push @names, {name=>$_, type=>"NV"} +push @names, {name=>$_, type=>"IV"} foreach (qw(FP_ILOGB0 FP_ILOGBNAN FP_INFINITE FP_NAN FP_NORMAL - FP_SUBNORMAL FP_ZERO M_1_PI M_2_PI M_2_SQRTPI M_E M_LN10 M_LN2 + FP_SUBNORMAL FP_ZERO)); + +push @names, {name=>$_, type=>"NV"} + foreach (qw(M_1_PI M_2_PI M_2_SQRTPI M_E M_LN10 M_LN2 M_LOG10E M_LOG2E M_PI M_PI_2 M_PI_4 M_SQRT1_2 M_SQRT2)); push @names, {name=>$_, type=>"IV"} diff --git a/gnu/usr.bin/perl/ext/POSIX/POSIX.xs b/gnu/usr.bin/perl/ext/POSIX/POSIX.xs index 77bb829849c..0f004cbbcfd 100644 --- a/gnu/usr.bin/perl/ext/POSIX/POSIX.xs +++ b/gnu/usr.bin/perl/ext/POSIX/POSIX.xs @@ -1,17 +1,6 @@ #define PERL_EXT_POSIX #define PERL_EXT -#ifdef NETWARE - #define _POSIX_ - /* - * Ideally this should be somewhere down in the includes - * but putting it in other places is giving compiler errors. - * Also here I am unable to check for HAS_UNAME since it wouldn't have - * yet come into the file at this stage - sgp 18th Oct 2000 - */ - #include -#endif /* NETWARE */ - #define PERL_NO_GET_CONTEXT #include "EXTERN.h" @@ -280,7 +269,7 @@ static int not_here(const char *s); # define c99_rint rintq # define c99_round roundq # define c99_scalbn scalbnq -# define c99_signbit signbitq +/* We already define Perl_signbit to signbitq in perl.h. */ # define c99_tgamma tgammaq # define c99_trunc truncq # define bessel_j0 j0q @@ -331,9 +320,7 @@ static int not_here(const char *s); # define c99_rint rintl # define c99_round roundl # define c99_scalbn scalbnl -# ifdef HAS_SIGNBIT /* possibly bad assumption */ -# define c99_signbit signbitl -# endif +/* We already define Perl_signbit in perl.h. */ # define c99_tgamma tgammal # define c99_trunc truncl #else @@ -376,9 +363,6 @@ static int not_here(const char *s); # define c99_round round # define c99_scalbn scalbn /* We already define Perl_signbit in perl.h. */ -# ifdef HAS_SIGNBIT -# define c99_signbit signbit -# endif # define c99_tgamma tgamma # define c99_trunc trunc #endif @@ -422,6 +406,22 @@ static int not_here(const char *s); # undef c99_trunc #endif +/* The cc with NetBSD 8.0 and 9.0 claims to be a C11 hosted compiler, + * but doesn't define several functions required by C99, let alone C11. + * http://gnats.netbsd.org/53234 + */ +#if defined(USE_LONG_DOUBLE) && defined(__NetBSD__) \ + && !defined(NETBSD_HAVE_FIXED_LONG_DOUBLE_MATH) +# undef c99_expm1 +# undef c99_lgamma +# undef c99_log1p +# undef c99_log2 +# undef c99_nexttoward +# undef c99_remainder +# undef c99_remquo +# undef c99_tgamma +#endif + #ifndef isunordered # ifdef Perl_isnan # define isunordered(x, y) (Perl_isnan(x) || Perl_isnan(y)) @@ -562,9 +562,6 @@ static int not_here(const char *s); #ifndef HAS_SCALBN # undef c99_scalbn #endif -#ifndef HAS_SIGNBIT -# undef c99_signbit -#endif #ifndef HAS_TGAMMA # undef c99_tgamma #endif @@ -1020,6 +1017,11 @@ static NV my_log2(NV x) /* XXX nexttoward */ +/* GCC's FLT_ROUNDS is (wrongly) hardcoded to 1 (at least up to 11.x) */ +#if defined(PERL_IS_GCC) /* && __GNUC__ < XXX */ +# define BROKEN_FLT_ROUNDS +#endif + static int my_fegetround() { #ifdef HAS_FEGETROUND @@ -1317,7 +1319,7 @@ static NV_PAYLOAD_TYPE S_getpayload(NV nv) #ifdef NV_PAYLOAD_DEBUG Perl_warn(aTHX_ "a[%d] = %" UVxf "\n", i, a[i]); #endif - payload *= UV_MAX; + payload *= (NV) UV_MAX; payload += a[i]; } #ifdef NV_PAYLOAD_DEBUG @@ -1351,11 +1353,11 @@ static NV_PAYLOAD_TYPE S_getpayload(NV nv) #include #ifdef HAS_TZNAME -# if !defined(WIN32) && !defined(__CYGWIN__) && !defined(NETWARE) && !defined(__UWIN__) +# if !defined(WIN32) && !defined(__CYGWIN__) extern char *tzname[]; # endif #else -#if !defined(WIN32) && !defined(__UWIN__) || (defined(__MINGW32__) && !defined(tzname)) +#if !defined(WIN32) || (defined(__MINGW32__) && !defined(tzname)) char *tzname[] = { "" , "" }; #endif #endif @@ -1375,7 +1377,7 @@ char *tzname[] = { "" , "" }; #if defined (__CYGWIN__) # define tzname _tzname #endif -#if defined (WIN32) || defined (NETWARE) +#if defined (WIN32) # undef mkfifo # define mkfifo(a,b) not_here("mkfifo") # define ttyname(a) (char*)not_here("ttyname") @@ -1402,15 +1404,13 @@ char *tzname[] = { "" , "" }; # define sigdelset(a,b) not_here("sigdelset") # define sigfillset(a) not_here("sigfillset") # define sigismember(a,b) not_here("sigismember") -#ifndef NETWARE # undef setuid # undef setgid # define setuid(a) not_here("setuid") # define setgid(a) not_here("setgid") -#endif /* NETWARE */ -#ifndef USE_LONG_DOUBLE +#if !defined(USE_LONG_DOUBLE) && !defined(USE_QUADMATH) # define strtold(s1,s2) not_here("strtold") -#endif /* USE_LONG_DOUBLE */ +#endif /* !(USE_LONG_DOUBLE) && !(USE_QUADMATH) */ #else # ifndef HAS_MKFIFO @@ -1436,7 +1436,7 @@ char *tzname[] = { "" , "" }; # ifdef I_UTIME # include # endif -#endif /* WIN32 || NETWARE */ +#endif /* WIN32 */ #endif /* __VMS */ typedef int SysRet; @@ -1531,9 +1531,7 @@ END_EXTERN_C #define tcsetpgrp(a,b) not_here("tcsetpgrp") #endif #ifndef HAS_TIMES -#ifndef NETWARE #define times(a) not_here("times") -#endif /* NETWARE */ #endif #ifndef HAS_UNAME #define uname(a) not_here("uname") @@ -1543,13 +1541,13 @@ END_EXTERN_C #endif #if ! defined(HAS_MBLEN) && ! defined(HAS_MBRLEN) -#define mblen(a,b) not_here("mblen") +# define mblen(a,b) not_here("mblen") #endif #if ! defined(HAS_MBTOWC) && ! defined(HAS_MBRTOWC) -#define mbtowc(pwc, s, n) not_here("mbtowc") +# define mbtowc(pwc, s, n) not_here("mbtowc") #endif -#ifndef HAS_WCTOMB -#define wctomb(s, wchar) not_here("wctomb") +#if ! defined(HAS_WCTOMB) && ! defined(HAS_WCRTOMB) +# define wctomb(s, wchar) not_here("wctomb") #endif #if !defined(HAS_MBLEN) && !defined(HAS_MBSTOWCS) && !defined(HAS_MBTOWC) && !defined(HAS_WCSTOMBS) && !defined(HAS_WCTOMB) /* If we don't have these functions, then we wouldn't have gotten a typedef @@ -1562,7 +1560,7 @@ END_EXTERN_C #endif #endif -#ifndef HAS_LOCALECONV +#if ! defined(HAS_LOCALECONV) && ! defined(HAS_LOCALECONV_L) # define localeconv() not_here("localeconv") #else struct lconv_offset { @@ -1670,7 +1668,7 @@ static const struct lconv_offset lconv_integers[] = { * in the first place, though. -- Ingo Weinhold */ #if defined(__HAIKU__) -# define WMUNGE(x) (((x) & 0xFF00) >> 8 | ((x) & 0x00FF) << 8) +# define WMUNGE(x) (((x) & 0xFF00) >> 8 | (((U8) (x)) << 8)) #else # define WMUNGE(x) (x) #endif @@ -1788,6 +1786,7 @@ fix_win32_tzenv(void) char* newenv; const char* perl_tz_env = win32_getenv("TZ"); const char* crt_tz_env = getenv("TZ"); + if (perl_tz_env == NULL) perl_tz_env = ""; if (crt_tz_env == NULL) @@ -2158,8 +2157,7 @@ localeconv() sv_2mortal((SV*)RETVAL); # if defined(USE_ITHREADS) \ && defined(HAS_POSIX_2008_LOCALE) \ - && defined(HAS_LOCALECONV_L) \ - && defined(HAS_DUPLOCALE) + && defined(HAS_LOCALECONV_L) cur = uselocale((locale_t) 0); if (cur == LC_GLOBAL_LOCALE) { @@ -2169,8 +2167,8 @@ localeconv() lcbuf = localeconv_l(cur); # else - LOCALE_LOCK_V; /* Prevent interference with other threads using - localeconv() */ + LOCALECONV_LOCK; /* Prevent interference with other threads using + localeconv() */ # ifdef TS_W32_BROKEN_LOCALECONV /* This is a workaround for a Windows bug prior to VS 15, in which * localeconv only looks at the global locale. We toggle to the global @@ -2255,7 +2253,7 @@ localeconv() Safefree(save_global); Safefree(save_thread); # endif - LOCALE_UNLOCK_V; + LOCALECONV_UNLOCK; # endif RESTORE_LC_NUMERIC(); #endif /* HAS_LOCALECONV */ @@ -2508,13 +2506,47 @@ acos(x) IV fegetround() + PROTOTYPE: + ALIAS: + FLT_ROUNDS = 1 CODE: + switch (ix) { + case 0: + default: #ifdef HAS_FEGETROUND - RETVAL = my_fegetround(); + RETVAL = my_fegetround(); #else - RETVAL = -1; - not_here("fegetround"); + RETVAL = -1; + not_here("fegetround"); +#endif + break; + case 1: +#if defined(FLT_ROUNDS) && !defined(BROKEN_FLT_ROUNDS) + RETVAL = FLT_ROUNDS; +#elif defined(HAS_FEGETROUND) || defined(HAS_FPGETROUND) || defined(__osf__) + switch (my_fegetround()) { + /* C standard seems to say that each of the FE_* macros is + defined if and only if the implementation supports it. */ +# ifdef FE_TOWARDZERO + case FE_TOWARDZERO: RETVAL = 0; break; +# endif +# ifdef FE_TONEAREST + case FE_TONEAREST: RETVAL = 1; break; +# endif +# ifdef FE_UPWARD + case FE_UPWARD: RETVAL = 2; break; +# endif +# ifdef FE_DOWNWARD + case FE_DOWNWARD: RETVAL = 3; break; +# endif + default: RETVAL = -1; break; + } +#else + RETVAL = -1; + not_here("FLT_ROUNDS"); #endif + break; + } OUTPUT: RETVAL @@ -2610,16 +2642,7 @@ fpclassify(x) break; case 8: default: -#ifdef Perl_signbit RETVAL = Perl_signbit(x); -#else - RETVAL = (x < 0); -#ifdef DOUBLE_IS_IEEE_FORMAT - if (x == -0.0) { - RETVAL = TRUE; - } -#endif -#endif break; } OUTPUT: @@ -2968,14 +2991,13 @@ sigaction(sig, optaction, oldaction = 0) SV * optaction POSIX::SigAction oldaction CODE: -#if defined(WIN32) || defined(NETWARE) || (defined(__amigaos4__) && defined(__NEWLIB__)) +#if defined(WIN32) || (defined(__amigaos4__) && defined(__NEWLIB__)) RETVAL = not_here("sigaction"); #else # This code is really grody because we are trying to make the signal # interface look beautiful, which is hard. { - dVAR; POSIX__SigAction action; GV *siggv = gv_fetchpvs("SIG", GV_ADD, SVt_PVHV); struct sigaction act; @@ -3361,9 +3383,9 @@ mblen(s, n = ~0) memzero(&PL_mbrlen_ps, sizeof(PL_mbrlen_ps)); RETVAL = 0; #else - LOCALE_LOCK; + MBLEN_LOCK; RETVAL = mblen(NULL, 0); - LOCALE_UNLOCK; + MBLEN_UNLOCK; #endif } else { /* Not resetting state */ @@ -3383,9 +3405,9 @@ mblen(s, n = ~0) #else /* Locking prevents races, but locales can be switched out * without locking, so this isn't a cure all */ - LOCALE_LOCK; + MBLEN_LOCK; RETVAL = mblen(string, len); - LOCALE_UNLOCK; + MBLEN_UNLOCK; #endif } } @@ -3412,9 +3434,9 @@ mbtowc(pwc, s, n = ~0) memzero(&PL_mbrtowc_ps, sizeof(PL_mbrtowc_ps)); RETVAL = 0; #else - LOCALE_LOCK; + MBTOWC_LOCK; RETVAL = mbtowc(NULL, NULL, 0); - LOCALE_UNLOCK; + MBTOWC_UNLOCK; #endif } else { /* Not resetting state */ @@ -3433,9 +3455,9 @@ mbtowc(pwc, s, n = ~0) #else /* Locking prevents races, but locales can be switched out * without locking, so this isn't a cure all */ - LOCALE_LOCK; + MBTOWC_LOCK; RETVAL = mbtowc(&wc, string, len); - LOCALE_UNLOCK; + MBTOWC_UNLOCK; #endif if (RETVAL >= 0) { sv_setiv_mg(pwc, wc); @@ -3467,9 +3489,9 @@ wctomb(s, wchar) * But probably memzero would too */ RETVAL = wcrtomb(NULL, L'\0', &PL_wcrtomb_ps); #else - LOCALE_LOCK; + WCTOMB_LOCK; RETVAL = wctomb(NULL, L'\0'); - LOCALE_UNLOCK; + WCTOMB_UNLOCK; #endif } else { /* Not resetting state */ @@ -3479,9 +3501,9 @@ wctomb(s, wchar) #else /* Locking prevents races, but locales can be switched out without * locking, so this isn't a cure all */ - LOCALE_LOCK; + WCTOMB_LOCK; RETVAL = wctomb(buffer, wchar); - LOCALE_UNLOCK; + WCTOMB_UNLOCK; #endif if (RETVAL >= 0) { sv_setpvn_mg(s, buffer, RETVAL); @@ -3507,7 +3529,7 @@ strtod(str) num = strtod(str, &unparsed); RESTORE_LC_NUMERIC(); PUSHs(sv_2mortal(newSVnv(num))); - if (GIMME_V == G_ARRAY) { + if (GIMME_V == G_LIST) { EXTEND(SP, 1); if (unparsed) PUSHs(sv_2mortal(newSViv(strlen(unparsed)))); @@ -3529,7 +3551,7 @@ strtold(str) num = strtold(str, &unparsed); RESTORE_LC_NUMERIC(); PUSHs(sv_2mortal(newSVnv(num))); - if (GIMME_V == G_ARRAY) { + if (GIMME_V == G_LIST) { EXTEND(SP, 1); if (unparsed) PUSHs(sv_2mortal(newSViv(strlen(unparsed)))); @@ -3551,11 +3573,11 @@ strtol(str, base = 0) num = strtol(str, &unparsed, base); #if IVSIZE < LONGSIZE if (num < IV_MIN || num > IV_MAX) - PUSHs(sv_2mortal(newSVnv((double)num))); + PUSHs(sv_2mortal(newSVnv((NV)num))); else #endif PUSHs(sv_2mortal(newSViv((IV)num))); - if (GIMME_V == G_ARRAY) { + if (GIMME_V == G_LIST) { EXTEND(SP, 1); if (unparsed) PUSHs(sv_2mortal(newSViv(strlen(unparsed)))); @@ -3565,7 +3587,7 @@ strtol(str, base = 0) } else { SETERRNO(EINVAL, LIB_INVARG); PUSHs(&PL_sv_undef); - if (GIMME_V == G_ARRAY) { + if (GIMME_V == G_LIST) { EXTEND(SP, 1); PUSHs(&PL_sv_undef); } @@ -3583,13 +3605,13 @@ strtoul(str, base = 0) PERL_UNUSED_VAR(base); if (base == 0 || inRANGE(base, 2, 36)) { num = strtoul(str, &unparsed, base); -#if IVSIZE <= LONGSIZE - if (num > IV_MAX) - PUSHs(sv_2mortal(newSVnv((double)num))); +#if UVSIZE < LONGSIZE + if (num > UV_MAX) + PUSHs(sv_2mortal(newSVnv((NV)num))); else #endif - PUSHs(sv_2mortal(newSViv((IV)num))); - if (GIMME_V == G_ARRAY) { + PUSHs(sv_2mortal(newSVuv((UV)num))); + if (GIMME_V == G_LIST) { EXTEND(SP, 1); if (unparsed) PUSHs(sv_2mortal(newSViv(strlen(unparsed)))); @@ -3599,7 +3621,7 @@ strtoul(str, base = 0) } else { SETERRNO(EINVAL, LIB_INVARG); PUSHs(&PL_sv_undef); - if (GIMME_V == G_ARRAY) { + if (GIMME_V == G_LIST) { EXTEND(SP, 1); PUSHs(&PL_sv_undef); } diff --git a/gnu/usr.bin/perl/ext/POSIX/lib/POSIX.pm b/gnu/usr.bin/perl/ext/POSIX/lib/POSIX.pm index 6c4cc547ba2..b8a6257944f 100644 --- a/gnu/usr.bin/perl/ext/POSIX/lib/POSIX.pm +++ b/gnu/usr.bin/perl/ext/POSIX/lib/POSIX.pm @@ -4,7 +4,7 @@ use warnings; our ($AUTOLOAD, %SIGRT); -our $VERSION = '1.94'; +our $VERSION = '2.03'; require XSLoader; @@ -176,7 +176,7 @@ sub import { load_imports() unless $loaded++; - # Grandfather old foo_h form to new :foo_h form + # Rewrite legacy foo_h form to new :foo_h form s/^(?=\w+_h$)/:/ for my @list = @_; my @unimpl = sort grep { exists $replacement{$_} } @list; @@ -307,7 +307,8 @@ my %default_export_tags = ( # cf. exports policy below locale_h => [qw(LC_ALL LC_COLLATE LC_CTYPE LC_MESSAGES LC_MONETARY LC_NUMERIC LC_TIME LC_IDENTIFICATION - LC_MEASUREMENT LC_PAPER LC_TELEPHONE LC_ADDRESS NULL + LC_MEASUREMENT LC_PAPER LC_TELEPHONE LC_ADDRESS + LC_SYNTAX LC_TOD NULL localeconv setlocale)], math_h => [qw(FP_ILOGB0 FP_ILOGBNAN FP_INFINITE FP_NAN FP_NORMAL diff --git a/gnu/usr.bin/perl/ext/POSIX/lib/POSIX.pod b/gnu/usr.bin/perl/ext/POSIX/lib/POSIX.pod index 53209c9731e..75113b1e47b 100644 --- a/gnu/usr.bin/perl/ext/POSIX/lib/POSIX.pod +++ b/gnu/usr.bin/perl/ext/POSIX/lib/POSIX.pod @@ -32,6 +32,11 @@ and other miscellaneous objects. The remaining sections list various constants and macros in an organization which roughly follows IEEE Std 1003.1b-1993. +The notation C<[C99]> indicates functions that were added in the ISO/IEC +9899:1999 version of the C language standard. Some may not be available +on your system if it adheres to an earlier standard. Attempts to use +any missing one will result in a fatal runtime error message. + =head1 CAVEATS I (with a handful of exceptions). @@ -111,7 +116,7 @@ the arcus cosine of its numerical argument. See also L. This is identical to the C function C, returning the hyperbolic arcus cosine of its numerical argument [C99]. See also -L. +L. Added in Perl v5.22. =item C @@ -139,6 +144,10 @@ The C<$mon> is zero-based: January equals C<0>. The C<$year> is 1900-based: 2001 equals C<101>. C<$wday> and C<$yday> default to zero (and are usually ignored anyway), and C<$isdst> defaults to -1. +Note the result is always in English. Use C> instead to +get a result suitable for the current locale. That function's C<%c> +format yields the locale's preferred representation. + =item C This is identical to the C function C, returning @@ -148,7 +157,7 @@ the arcus sine of its numerical argument. See also L. This is identical to the C function C, returning the hyperbolic arcus sine of its numerical argument [C99]. See also -L. +L. Added in Perl v5.22. =item C @@ -164,7 +173,7 @@ arcus tangent of its numerical argument. See also L. This is identical to the C function C, returning the hyperbolic arcus tangent of its numerical argument [C99]. See also -L. +L. Added in Perl v5.22. =item C @@ -204,7 +213,7 @@ Not implemented. C is C-specific. Perl does memory management transp =item C -The cube root [C99]. +The cube root [C99]. Added in Perl v5.22. =item C @@ -283,7 +292,7 @@ the hyperbolic cosine of its numeric argument. See also L. =item C -Returns C but with the sign of C [C99]. +Returns C but with the sign of C [C99]. Added in Perl v5.22. $x_with_sign_of_y = POSIX::copysign($x, $y); @@ -352,11 +361,11 @@ Returns C on failure. =item C -The error function [C99]. +The error function [C99]. Added in Perl v5.22. =item C -The complementary error function [C99]. +The complementary error function [C99]. Added in Perl v5.22. =item C @@ -404,6 +413,7 @@ see L. =item C Equivalent to C, but more precise for small argument values [C99]. +Added in Perl v5.22. See also L. @@ -463,6 +473,7 @@ integer value less than or equal to the numerical argument. =item C "Positive difference", S> if S y>>, zero otherwise [C99]. +Added in Perl v5.22. =item C @@ -471,27 +482,31 @@ Returns the current floating point rounding mode, one of FE_TONEAREST FE_TOWARDZERO FE_UPWARD FE_DOWNWARD C is like L, C is like L [C99]. +Added in Perl v5.22. =item C -Sets the floating point rounding mode, see L [C99]. +Sets the floating point rounding mode, see L [C99]. Added in +Perl v5.22. =item C "Fused multiply-add", S>, possibly faster (and less lossy) -than the explicit two operations [C99]. +than the explicit two operations [C99]. Added in Perl v5.22. my $fused = POSIX::fma($x, $y, $z); =item C Maximum of C and C, except when either is C, returns the other [C99]. +Added in Perl v5.22. my $min = POSIX::fmax($x, $y); =item C Minimum of C and C, except when either is C, returns the other [C99]. +Added in Perl v5.22. my $min = POSIX::fmin($x, $y); @@ -538,6 +553,7 @@ telling the class of the argument [C99]. C is positive or negative infinity, C is not-a-number. C means subnormal numbers (also known as denormals), very small numbers with low precision. C is zero. C is all the rest. +Added in Perl v5.22. =item C @@ -664,7 +680,7 @@ L. use POSIX ':nan_payload'; getpayload($var) -Returns the C payload. +Returns the C payload. Added in Perl v5.24. Note the API instability warning in L. @@ -721,11 +737,11 @@ see L. =item C Equivalent to C> except more stable on very large -or very small arguments [C99]. +or very small arguments [C99]. Added in Perl v5.22. =item C -Integer binary logarithm [C99] +Integer binary logarithm [C99]. Added in Perl v5.22. For example C is 4, as an integer. @@ -743,13 +759,13 @@ See also L, and L. =item C -This function has been removed as of v5.24. It was very similar to +This function has been removed as of Perl v5.24. It was very similar to matching against S>, which you should convert to use instead. See L. =item C -This function has been removed as of v5.24. It was very similar to +This function has been removed as of Perl v5.24. It was very similar to matching against S>, which you should convert to use instead. See L. @@ -760,26 +776,26 @@ to a tty. Similar to the C<-t> operator, see L. =item C -This function has been removed as of v5.24. It was very similar to +This function has been removed as of Perl v5.24. It was very similar to matching against S>, which you should convert to use instead. See L. =item C -This function has been removed as of v5.24. It was very similar to +This function has been removed as of Perl v5.24. It was very similar to matching against S>, which you should convert to use instead. See L. =item C Returns true if the argument is a finite number (that is, not an -infinity, or the not-a-number) [C99]. +infinity, or the not-a-number) [C99]. Added in Perl v5.22. See also L, L, and L. =item C -This function has been removed as of v5.24. It was very similar to +This function has been removed as of Perl v5.24. It was very similar to matching against S>, which you should convert to use instead. See L. @@ -788,48 +804,52 @@ to use instead. See L. (Also C, C, C, C, C) -Floating point comparisons which handle the C [C99]. +Floating point comparisons which handle the C [C99]. Added in Perl +v5.22. =item C Returns true if the argument is an infinity (positive or negative) [C99]. +Added in Perl v5.22. See also L, L, L, and L. =item C -This function has been removed as of v5.24. It was very similar to +This function has been removed as of Perl v5.24. It was very similar to matching against S>, which you should convert to use instead. See L. =item C -Returns true if the argument is C (not-a-number) [C99]. +Returns true if the argument is C (not-a-number) [C99]. Added in +Perl v5.22. -Note that you cannot test for "C-ness" with +Note that you can also test for "C-ness" with +L (C<==> or C), as in - $x == $x + print "x is not a NaN\n" if $x == $x; -since the C is not equivalent to anything, B. +since the C is not equal to anything, B. See also L, L, L, and L. =item C Returns true if the argument is normal (that is, not a subnormal/denormal, -and not an infinity, or a not-a-number) [C99]. +and not an infinity, or a not-a-number) [C99]. Added in Perl v5.22. See also L, and L. =item C -This function has been removed as of v5.24. It was very similar to +This function has been removed as of Perl v5.24. It was very similar to matching against S>, which you should convert to use instead. See L. =item C -This function has been removed as of v5.24. It was very similar to +This function has been removed as of Perl v5.24. It was very similar to matching against S>, which you should convert to use instead. See L. @@ -838,7 +858,7 @@ to use instead. See L. use POSIX ':nan_payload'; issignaling($var, $payload) -Return true if the argument is a I NaN. +Return true if the argument is a I NaN. Added in Perl v5.24. Note the API instability warning in L. @@ -846,19 +866,19 @@ See L for more discussion about C. =item C -This function has been removed as of v5.24. It was very similar to +This function has been removed as of Perl v5.24. It was very similar to matching against S>, which you should convert to use instead. See L. =item C -This function has been removed as of v5.24. It was very similar to +This function has been removed as of Perl v5.24. It was very similar to matching against S>, which you should convert to use instead. See L. =item C -This function has been removed as of v5.24. It was very similar to +This function has been removed as of Perl v5.24. It was very similar to matching against S>, which you should convert to use instead. See L. @@ -910,24 +930,24 @@ C is C-specific, use C and C instead. =item C -The logarithm of the Gamma function [C99]. +The logarithm of the Gamma function [C99]. Added in Perl v5.22. See also L. =item C Equivalent to S>, but more stable results for small argument -values [C99]. +values [C99]. Added in Perl v5.22. =item C -Logarithm base two [C99]. +Logarithm base two [C99]. Added in Perl v5.22. See also L. =item C -Integer binary logarithm [C99]. +Integer binary logarithm [C99]. Added in Perl v5.22. For example C is 4, as a floating point number. @@ -953,7 +973,7 @@ the underlying locale is C or POSIX. This is because it otherwise changes the locale, which globally affects all threads simultaneously. Windows platforms starting with Visual Studio 2005 are mostly thread-safe, but use of this function in those prior to Visual Studio -2015 can interfere with a thread that has called +2015 can have a race with a thread that has called L. Here is how to query the database for the B (Deutsch or German) locale. @@ -1049,13 +1069,14 @@ Returns C on failure. Depending on the current floating point rounding mode, rounds the argument either toward nearest (like L), toward zero (like L), downward (toward negative infinity), or upward (toward -positive infinity) [C99]. +positive infinity) [C99]. Added in Perl v5.22. For the rounding mode, see L. =item C -Like L, but as integer, as opposed to floating point [C99]. +Like L, but as integer, as opposed to floating point [C99]. Added +in Perl v5.22. See also L, L, L. @@ -1207,7 +1228,7 @@ See also L, C, and L. my $nan = nan(); -Returns C, not-a-number [C99]. +Returns C, not-a-number [C99]. Added in Perl v5.22. The returned NaN is always a I NaN, as opposed to I. @@ -1243,12 +1264,12 @@ See also L, L, L and L. =item C Returns the nearest integer to the argument, according to the current -rounding mode (see L) [C99]. +rounding mode (see L) [C99]. Added in Perl v5.22. =item C Returns the next representable floating point number after C in the -direction of C [C99]. +direction of C [C99]. Added in Perl v5.22. my $nextafter = POSIX::nextafter($x, $y); @@ -1257,7 +1278,7 @@ Like L, but potentially less accurate. =item C Returns the next representable floating point number after C in the -direction of C [C99]. +direction of C [C99]. Added in Perl v5.22. my $nexttoward = POSIX::nexttoward($x, $y); @@ -1416,7 +1437,7 @@ Not implemented. C is C-specific. Perl does memory management trans =item C Given C and C, returns the value S>, where C is the integer -closest to C/C. [C99] +closest to C/C [C99]. Added in Perl v5.22. my $remainder = POSIX::remainder($x, $y) @@ -1430,7 +1451,7 @@ files and L for directories. =item C Like L but also returns the low-order bits of the quotient (n) -[C99] +[C99]. Added in Perl v5.22. (This is quite esoteric interface, mainly used to implement numerical algorithms.) @@ -1461,13 +1482,13 @@ for removing (empty) directories, see L. =item C Returns the integer (but still as floating point) nearest to the -argument [C99]. +argument [C99]. Added in Perl v5.22. See also L, L, L, L, and L. =item C -Returns S> [C99]. +Returns S> [C99]. Added in Perl v5.22. See also L and L. @@ -1551,7 +1572,7 @@ out which locales are available in your system. use POSIX ':nan_payload'; setpayload($var, $payload); -Sets the C payload of var. +Sets the C payload of var. Added in Perl v5.24. NOTE: the NaN payload APIs are based on the latest (as of June 2015) proposed ISO C interfaces, but they are not yet a standard. Things @@ -1566,7 +1587,8 @@ See also L, L, L, and L. use POSIX ':nan_payload'; setpayloadsig($var, $payload); -Like L but also makes the NaN I. +Like L but also makes the NaN I. Added in Perl +v5.24. Depending on the platform the NaN may or may not behave differently. @@ -1602,7 +1624,7 @@ will change only the real user identifier. Detailed signal management. This uses C objects for the C and C arguments (the oldaction can also be just a hash reference). Consult your system's C manpage -for details, see also C. +for details, see also L. Synopsis: @@ -1624,7 +1646,7 @@ semantics, as defined by POSIX/SUSv3: otherwise the signal was sent by the kernel The constants for specific C values can be imported individually -or using the C<:signal_h_si_code> tag. +or using the C<:signal_h_si_code> tag, since Perl v5.24. The following are also defined by POSIX/SUSv3, but unfortunately not very widely implemented: @@ -1653,6 +1675,7 @@ Not implemented. C is C-specific: use L instead. =item C Returns zero for positive arguments, non-zero for negative arguments [C99]. +Added in Perl v5.22. =item C @@ -1769,6 +1792,10 @@ Beware that in a UTF-8 locale, anything you pass to this function must be in UTF-8; and when not in a UTF-8 locale, anything passed must not be UTF-8 encoded. +Note also that it doesn't make sense for a string to be encoded in one +locale (say, ISO-8859-6, Arabic) and to collate it based on another +(like ISO-8859-7, Greek). The results will be essentially meaningless. + =item C Not implemented. C is C-specific, use C<=> instead, see L. @@ -1940,7 +1967,7 @@ String transformation. Returns the transformed string. $dst = POSIX::strxfrm( $src ); -Used in conjunction with the C function, see L. +Used with C or C as an alternative to C>. Not really needed since Perl can do this transparently, see L. @@ -2018,7 +2045,7 @@ Returns C on failure. =item C -The Gamma function [C99]. +The Gamma function [C99]. Added in Perl v5.22. See also L. @@ -2049,11 +2076,11 @@ Not implemented. Use method C instead, or see L function, this interface -is no longer available; instead use L. +is no longer available since Perl v5.26; instead use L. =item C -This function has been removed as of v5.26. +This function has been removed as of Perl v5.26. This is identical to the C function, except that it can apply to a single character or to a whole string, and currently operates as if the locale always is "C". Consider using the C function, see L, @@ -2062,7 +2089,7 @@ strings. =item C -This function has been removed as of v5.26. +This function has been removed as of Perl v5.26. This is similar to the C function, except that it can apply to a single character or to a whole string, and currently operates as if the locale always is "C". Consider using the C function, see L, @@ -2070,7 +2097,8 @@ or the equivalent C<\U> operator inside doublequotish strings. =item C -Returns the integer toward zero from the argument [C99]. +Returns the integer toward zero from the argument [C99]. Added in Perl +v5.22. See also L, L, and L. @@ -2561,6 +2589,8 @@ Imported with the C<:sys_resource_h> tag. =item Constants +Added in Perl v5.28: + C C C =back @@ -2666,6 +2696,8 @@ on systems that support them. C +Added in Perl v5.22: + C C C C C C C C C C C C C C C C C C C C @@ -2685,6 +2717,9 @@ C C C C C C C C< C C C C C C C C C C C C C C C C C + +Added in Perl v5.24: + C C C C C C C C C C C C C C C C C C C C @@ -2824,6 +2859,8 @@ is true) =item Constants +Added in Perl v5.24: + C C C C C C C C C C C C C C C C diff --git a/gnu/usr.bin/perl/ext/POSIX/t/export.t b/gnu/usr.bin/perl/ext/POSIX/t/export.t index 50648c8b336..12eac2d2113 100644 --- a/gnu/usr.bin/perl/ext/POSIX/t/export.t +++ b/gnu/usr.bin/perl/ext/POSIX/t/export.t @@ -48,7 +48,7 @@ my %expect = ( INT_MAX INT_MIN ISIG ISTRIP IXOFF IXON LC_ADDRESS LC_ALL LC_COLLATE LC_CTYPE LC_IDENTIFICATION LC_MEASUREMENT LC_MESSAGES LC_MONETARY LC_NUMERIC LC_PAPER - LC_TELEPHONE LC_TIME LDBL_DIG + LC_TELEPHONE LC_TIME LC_SYNTAX LC_TOD LDBL_DIG LDBL_EPSILON LDBL_MANT_DIG LDBL_MAX LDBL_MAX_10_EXP LDBL_MAX_EXP LDBL_MIN LDBL_MIN_10_EXP LDBL_MIN_EXP LINK_MAX LONG_MAX LONG_MIN L_ctermid L_cuserid MAX_CANON diff --git a/gnu/usr.bin/perl/ext/POSIX/t/math.t b/gnu/usr.bin/perl/ext/POSIX/t/math.t index abcdb3d2409..f3a162a99bf 100644 --- a/gnu/usr.bin/perl/ext/POSIX/t/math.t +++ b/gnu/usr.bin/perl/ext/POSIX/t/math.t @@ -110,17 +110,15 @@ SKIP: { ok(!isinf(42), "isinf 42"); ok(!isnan(42), "isnan Inf"); SKIP: { - skip("no inf", 4) unless $Config{d_double_has_inf}; + skip("no inf", 3) unless $Config{d_double_has_inf}; ok(!isfinite(Inf), "isfinite Inf"); - ok(isinf(INFINITY), "isinf INFINITY"); ok(isinf(Inf), "isinf Inf"); ok(!isnan(Inf), "isnan Inf"); } SKIP: { - skip("no nan", 5) unless $Config{d_double_has_nan}; + skip("no nan", 4) unless $Config{d_double_has_nan}; ok(!isfinite(NaN), "isfinite NaN"); ok(!isinf(NaN), "isinf NaN"); - ok(isnan(NAN), "isnan NAN"); ok(isnan(NaN), "isnan NaN"); cmp_ok(nan(), '!=', nan(), 'nan'); } @@ -275,4 +273,27 @@ SKIP: { } } # SKIP +SKIP: { + skip('no INFINITY', 4) unless defined &INFINITY; + # Note that if INFINITY were a bareword, it would be numified to +Inf, + # which might confuse following tests. + # But this cannot happen as long as "use strict" is effective. + ok(isinf(INFINITY), "isinf INFINITY"); + is(INFINITY, 'Inf', "INFINITY is Perl's Inf"); + cmp_ok(INFINITY, '>', ($Config{uselongdouble} ? POSIX::LDBL_MAX : POSIX::DBL_MAX), + "INFINITY > DBL_MAX"); + ok(!signbit(INFINITY), "signbit(INFINITY)"); +} + +SKIP: { + skip('no NAN', 5) unless defined &NAN; + ok(isnan(NAN()), "isnan NAN"); + # Using like() rather than is() is to deal with non-zero payload + # (currently this is not the case, but someday Perl might stringify it...) + like(NAN, qr/^NaN/, "NAN is Perl's NaN"); + cmp_ok(NAN, '!=', NAN, "NAN != NAN"); + ok(!(NAN == NAN), "NAN == NAN"); + ok(!signbit(NAN), "signbit(NAN)"); +} + done_testing(); diff --git a/gnu/usr.bin/perl/ext/POSIX/t/posix.t b/gnu/usr.bin/perl/ext/POSIX/t/posix.t index 25099ea54a9..f200a895bde 100644 --- a/gnu/usr.bin/perl/ext/POSIX/t/posix.t +++ b/gnu/usr.bin/perl/ext/POSIX/t/posix.t @@ -10,11 +10,12 @@ BEGIN { require 'loc_tools.pl'; } -use Test::More tests => 96; +use Test::More tests => 98; use POSIX qw(fcntl_h signal_h limits_h _exit getcwd open read strftime write errno localeconv dup dup2 lseek access); use strict 'subs'; +use warnings; sub next_test { my $builder = Test::More->builder; @@ -24,10 +25,8 @@ sub next_test { $| = 1; $Is_W32 = $^O eq 'MSWin32'; -$Is_Dos = $^O eq 'dos'; $Is_VMS = $^O eq 'VMS'; $Is_OS2 = $^O eq 'os2'; -$Is_UWin = $^O eq 'uwin'; $Is_OS390 = $^O eq 'os390'; my $vms_unix_rpt = 0; @@ -67,14 +66,12 @@ TODO: my $test = next_test(); write(1,"ok $test\nnot ok $test\n", 5); -SKIP: { - skip("no pipe() support on DOS", 2) if $Is_Dos; - +{ @fds = POSIX::pipe(); cmp_ok($fds[0], '>', $testfd, 'POSIX::pipe'); - CORE::open($reader = \*READER, "<&=".$fds[0]); - CORE::open($writer = \*WRITER, ">&=".$fds[1]); + CORE::open(my $reader, "<&=".$fds[0]); + CORE::open(my $writer, ">&=".$fds[1]); my $test = next_test(); print $writer "ok $test\n"; close $writer; @@ -83,7 +80,7 @@ SKIP: { } SKIP: { - skip("no sigaction support on win32/dos", 6) if $Is_W32 || $Is_Dos; + skip("no sigaction support on win32", 6) if $Is_W32; my $sigset = new POSIX::SigSet 1, 3; $sigset->delset(1); @@ -113,8 +110,9 @@ SKIP: { } sleep 1; - $todo = 1 if ($^O eq 'freebsd' && $Config{osvers} < 8) - || ($^O eq 'darwin' && $Config{osvers} < '6.6'); + my ($major, $minor) = $Config{osvers} =~ / (\d+) \. (\d+) .* /x; + $todo = 1 if ($^O eq 'freebsd' && $major < 8) + || ($^O eq 'darwin' && "${major}.${minor}" < '6.6'); printf "%s 11 - masked SIGINT received %s\n", $sigint_called ? "ok" : "not ok", $todo ? $why_todo : ''; @@ -247,11 +245,18 @@ SKIP: { } SKIP: { - skip("strtoul() not present", 2) unless $Config{d_strtoul}; + skip("strtoul() not present", 4) unless $Config{d_strtoul}; ($n, $x) = &POSIX::strtoul('88_TEARS'); is($n, 88, 'strtoul() number'); is($x, 6, ' unparsed chars'); + + skip("'long' is not 64-bit", 2) + unless $Config{uvsize} >= $Config{longsize} && $Config{longsize} >= 8; + ($n, $x) = &POSIX::strtoul('abcdef0123456789', 16); + # Expected value is specified by a string to avoid unwanted NV conversion + is($n, '12379813738877118345', 'strtoul() 64-bit number'); + is($x, 0, ' unparsed chars'); } # Pick up whether we're really able to dynamically load everything. @@ -350,11 +355,16 @@ is ($result, undef, "fgets should fail"); like ($@, qr/^Unimplemented: POSIX::fgets\(\): Use method IO::Handle::gets\(\) instead/, "check its redef message"); -eval { use strict; POSIX->import("S_ISBLK"); my $x = S_ISBLK }; +eval { + use strict; + no warnings 'uninitialized'; # S_ISBLK normally has an arg + POSIX->import("S_ISBLK"); + my $x = S_ISBLK +}; unlike( $@, qr/Can't use string .* as a symbol ref/, "Can import autoloaded constants" ); SKIP: { - skip("locales not available", 26) unless locales_enabled(qw(NUMERIC MONETARY)); + skip("locales not available", 26) unless locales_enabled([ qw(NUMERIC MONETARY) ]); skip("localeconv() not available", 26) unless $Config{d_locconv}; my $conv = localeconv; is(ref $conv, 'HASH', 'localeconv returns a hash reference'); @@ -457,7 +467,7 @@ if ($^O eq 'vos') { } else { $| = 0; # The following line assumes buffered output, which may be not true: - print '@#!*$@(!@#$' unless ($Is_OS2 || $Is_UWin || $Is_OS390 || + print '@#!*$@(!@#$' unless ($Is_OS2 || $Is_OS390 || $Is_VMS || (defined $ENV{PERLIO} && $ENV{PERLIO} eq 'unix' && diff --git a/gnu/usr.bin/perl/ext/POSIX/t/sigaction.t b/gnu/usr.bin/perl/ext/POSIX/t/sigaction.t index 73c66f9404d..024c66a1470 100644 --- a/gnu/usr.bin/perl/ext/POSIX/t/sigaction.t +++ b/gnu/usr.bin/perl/ext/POSIX/t/sigaction.t @@ -4,7 +4,7 @@ BEGIN{ # Don't do anything if POSIX is missing, or sigaction missing. use Config; eval 'use POSIX'; - if($@ || $^O eq 'MSWin32' || $^O eq 'NetWare' || $^O eq 'dos' || + if($@ || $^O eq 'MSWin32' || ($^O eq 'VMS' && !$Config{'d_sigaction'})) { print "1..0\n"; exit 0; @@ -202,7 +202,7 @@ SKIP: { $skip{pid}{$^O} = $skip{uid}{$^O} = "not set for kill()" if (($^O.$Config{osvers}) =~ /^darwin[0-8]\./ || - ($^O.$Config{osvers}) =~ /^openbsd[0-6]\./ + ($^O.$Config{osvers}) =~ /^openbsd[0-7]\./ || ($^O eq 'gnu') || diff --git a/gnu/usr.bin/perl/ext/POSIX/t/time.t b/gnu/usr.bin/perl/ext/POSIX/t/time.t index 5e71d27f66b..6190e389a57 100644 --- a/gnu/usr.bin/perl/ext/POSIX/t/time.t +++ b/gnu/usr.bin/perl/ext/POSIX/t/time.t @@ -22,8 +22,8 @@ SKIP: { # actually do anything. Cygwin works in some places, but not others. The # other Win32's below are guesses. skip "No tzset()", 2 - if $^O eq "VMS" || $^O eq "cygwin" || $^O eq "djgpp" || - $^O eq "MSWin32" || $^O eq "dos" || $^O eq "interix"; + if $^O eq "VMS" || $^O eq "cygwin" || + $^O eq "MSWin32" || $^O eq "interix"; tzset(); my @tzname = tzname(); like($tzname[0], qr/(GMT|UTC)/i, "tzset() to GMT/UTC"); diff --git a/gnu/usr.bin/perl/ext/PerlIO-encoding/encoding.pm b/gnu/usr.bin/perl/ext/PerlIO-encoding/encoding.pm index daf44571880..bd5553ffe6c 100644 --- a/gnu/usr.bin/perl/ext/PerlIO-encoding/encoding.pm +++ b/gnu/usr.bin/perl/ext/PerlIO-encoding/encoding.pm @@ -1,7 +1,7 @@ package PerlIO::encoding; use strict; -our $VERSION = '0.28'; +our $VERSION = '0.30'; our $DEBUG = 0; $DEBUG and warn __PACKAGE__, " called by ", join(", ", caller), "\n"; @@ -13,8 +13,7 @@ $DEBUG and warn __PACKAGE__, " called by ", join(", ", caller), "\n"; require XSLoader; XSLoader::load(); -our $fallback = - Encode::PERLQQ()|Encode::WARN_ON_ERR()|Encode::ONLY_PRAGMA_WARNINGS()|Encode::STOP_AT_PARTIAL(); +our $fallback = Encode::PERLQQ()|Encode::WARN_ON_ERR()|Encode::ONLY_PRAGMA_WARNINGS(); 1; __END__ diff --git a/gnu/usr.bin/perl/ext/PerlIO-encoding/encoding.xs b/gnu/usr.bin/perl/ext/PerlIO-encoding/encoding.xs index 9d98d878db2..380721e6426 100644 --- a/gnu/usr.bin/perl/ext/PerlIO-encoding/encoding.xs +++ b/gnu/usr.bin/perl/ext/PerlIO-encoding/encoding.xs @@ -5,6 +5,12 @@ #define U8 U8 #define OUR_DEFAULT_FB "Encode::PERLQQ" +#define OUR_STOP_AT_PARTIAL "Encode::STOP_AT_PARTIAL" +#define OUR_LEAVE_SRC "Encode::LEAVE_SRC" + +/* This will be set during BOOT */ +static unsigned int encode_stop_at_partial = 0; +static unsigned int encode_leave_src = 0; #if defined(USE_PERLIO) @@ -164,6 +170,9 @@ PerlIOEncode_pushed(pTHX_ PerlIO * f, const char *mode, SV * arg, PerlIO_funcs * } e->chk = newSVsv(get_sv("PerlIO::encoding::fallback", 0)); + if (SvROK(e->chk)) + Perl_croak(aTHX_ "PerlIO::encoding::fallback must be an integer"); + SvUV_set(e->chk, ((SvUV(e->chk) & ~encode_leave_src) | encode_stop_at_partial)); e->inEncodeCall = 0; FREETMPS; @@ -638,30 +647,36 @@ PROTOTYPES: ENABLE BOOT: { - SV *chk = get_sv("PerlIO::encoding::fallback", GV_ADD|GV_ADDMULTI); /* * we now "use Encode ()" here instead of * PerlIO/encoding.pm. This avoids SEGV when ":encoding()" * is invoked without prior "use Encode". -- dankogai */ PUSHSTACKi(PERLSI_MAGIC); - if (!get_cvs(OUR_DEFAULT_FB, 0)) { -#if 0 - /* This would just be an irritant now loading works */ - Perl_warner(aTHX_ packWARN(WARN_IO), ":encoding without 'use Encode'"); -#endif + if (!get_cvs(OUR_STOP_AT_PARTIAL, 0)) { /* The SV is magically freed by load_module */ load_module(PERL_LOADMOD_NOIMPORT, newSVpvs("Encode"), Nullsv, Nullsv); assert(sp == PL_stack_sp); } + + PUSHMARK(sp); + PUTBACK; + if (call_pv(OUR_STOP_AT_PARTIAL, G_SCALAR) != 1) { + /* should never happen */ + Perl_die(aTHX_ "%s did not return a value", OUR_STOP_AT_PARTIAL); + } + SPAGAIN; + encode_stop_at_partial = POPu; + PUSHMARK(sp); PUTBACK; - if (call_pv(OUR_DEFAULT_FB, G_SCALAR) != 1) { + if (call_pv(OUR_LEAVE_SRC, G_SCALAR) != 1) { /* should never happen */ - Perl_die(aTHX_ "%s did not return a value",OUR_DEFAULT_FB); + Perl_die(aTHX_ "%s did not return a value", OUR_LEAVE_SRC); } SPAGAIN; - sv_setsv(chk, POPs); + encode_leave_src = POPu; + PUTBACK; #ifdef PERLIO_LAYERS PerlIO_define_layer(aTHX_ PERLIO_FUNCS_CAST(&PerlIO_encode)); diff --git a/gnu/usr.bin/perl/ext/PerlIO-encoding/t/encoding.t b/gnu/usr.bin/perl/ext/PerlIO-encoding/t/encoding.t index 367b0cf4f21..77e7abce630 100755 --- a/gnu/usr.bin/perl/ext/PerlIO-encoding/t/encoding.t +++ b/gnu/usr.bin/perl/ext/PerlIO-encoding/t/encoding.t @@ -1,10 +1,6 @@ #!./perl -w BEGIN { - unless (find PerlIO::Layer 'perlio') { - print "1..0 # Skip: not perlio\n"; - exit 0; - } unless (eval { require Encode } ) { print "1..0 # Skip: not Encode\n"; exit 0; diff --git a/gnu/usr.bin/perl/ext/PerlIO-encoding/t/nolooping.t b/gnu/usr.bin/perl/ext/PerlIO-encoding/t/nolooping.t index 5e262be7f4e..b86fcf074b9 100755 --- a/gnu/usr.bin/perl/ext/PerlIO-encoding/t/nolooping.t +++ b/gnu/usr.bin/perl/ext/PerlIO-encoding/t/nolooping.t @@ -8,12 +8,9 @@ BEGIN { } } -use Config; - -use Test::More (ord("A") == 65 && $Config{useperlio}) +use Test::More ord("A") == 65 ? (tests => 1) - : (skip_all => '(No PerlIO enabled;' - . ' or is EBCDIC platform which doesnt have' + : (skip_all => 'EBCDIC platform which doesnt have' . ' "use encoding" used by open ":locale")'); BEGIN { $SIG{__WARN__} = sub { $warn .= $_[0] }; diff --git a/gnu/usr.bin/perl/ext/PerlIO-mmap/mmap.pm b/gnu/usr.bin/perl/ext/PerlIO-mmap/mmap.pm index 0ed59d2db49..fee7191effa 100644 --- a/gnu/usr.bin/perl/ext/PerlIO-mmap/mmap.pm +++ b/gnu/usr.bin/perl/ext/PerlIO-mmap/mmap.pm @@ -1,7 +1,7 @@ package PerlIO::mmap; use strict; use warnings; -our $VERSION = '0.016'; +our $VERSION = '0.017'; use XSLoader; XSLoader::load(__PACKAGE__, __PACKAGE__->VERSION); diff --git a/gnu/usr.bin/perl/ext/PerlIO-mmap/mmap.xs b/gnu/usr.bin/perl/ext/PerlIO-mmap/mmap.xs index b3f1c4fd50e..dd7f552b7ee 100644 --- a/gnu/usr.bin/perl/ext/PerlIO-mmap/mmap.xs +++ b/gnu/usr.bin/perl/ext/PerlIO-mmap/mmap.xs @@ -26,7 +26,6 @@ typedef struct { static IV PerlIOMmap_map(pTHX_ PerlIO *f) { - dVAR; PerlIOMmap * const m = PerlIOSelf(f, PerlIOMmap); const IV flags = PerlIOBase(f)->flags; IV code = 0; diff --git a/gnu/usr.bin/perl/ext/PerlIO-scalar/scalar.pm b/gnu/usr.bin/perl/ext/PerlIO-scalar/scalar.pm index 6f4fa176be9..40fe4af5bc5 100644 --- a/gnu/usr.bin/perl/ext/PerlIO-scalar/scalar.pm +++ b/gnu/usr.bin/perl/ext/PerlIO-scalar/scalar.pm @@ -1,5 +1,5 @@ package PerlIO::scalar; -our $VERSION = '0.30'; +our $VERSION = '0.31'; require XSLoader; XSLoader::load(); 1; @@ -32,6 +32,9 @@ on a scalar variable. All the normal file operations can be performed on the handle. The scalar is considered a stream of bytes. Currently fileno($fh) returns -1. +Attempting to open a read-only scalar for writing will fail, and if +warnings are enabled, produce a warning. + =head1 IMPLEMENTATION NOTE C only exists to use XSLoader to load C code that diff --git a/gnu/usr.bin/perl/ext/PerlIO-scalar/t/scalar.t b/gnu/usr.bin/perl/ext/PerlIO-scalar/t/scalar.t index bd06d641cd2..ed623b3aa93 100755 --- a/gnu/usr.bin/perl/ext/PerlIO-scalar/t/scalar.t +++ b/gnu/usr.bin/perl/ext/PerlIO-scalar/t/scalar.t @@ -1,10 +1,6 @@ #!./perl BEGIN { - unless (find PerlIO::Layer 'perlio') { - print "1..0 # Skip: not perlio\n"; - exit 0; - } require Config; if (($Config::Config{'extensions'} !~ m!\bPerlIO/scalar\b!) ){ print "1..0 # Skip -- Perl configured without PerlIO::scalar module\n"; @@ -17,7 +13,7 @@ use Errno qw(EACCES); $| = 1; -use Test::More tests => 123; +use Test::More tests => 125; my $fh; my $var = "aaa\n"; @@ -181,12 +177,19 @@ EOF # [perl #40267] PerlIO::scalar doesn't respect readonly-ness { + my $warn; + local $SIG{__WARN__} = sub { $warn = "@_" }; ok(!(defined open(F, '>', \undef)), "[perl #40267] - $!"); + is($warn, undef, "no warning with warnings off"); close F; + use warnings 'layer'; + undef $warn; my $ro = \43; ok(!(defined open(F, '>', $ro)), $!); is($!+0, EACCES, "check we get a read-onlyish error code"); + like($warn, qr/Modification of a read-only value attempted/, + "check we did warn"); close F; # but we can read from it ok(open(F, '<', $ro), $!); @@ -346,7 +349,7 @@ sub has_trailing_nul(\$) { return $trailing eq "\0"; } SKIP: { - if ($Config::Config{'extensions'} !~ m!\bPerlIO/scalar\b!) { + if ($Config::Config{'extensions'} !~ m!\bB\b!) { skip "no B", 4; } require B; diff --git a/gnu/usr.bin/perl/ext/Pod-Functions/Functions_pm.PL b/gnu/usr.bin/perl/ext/Pod-Functions/Functions_pm.PL index 04b1a90e3cc..5de15694b5d 100644 --- a/gnu/usr.bin/perl/ext/Pod-Functions/Functions_pm.PL +++ b/gnu/usr.bin/perl/ext/Pod-Functions/Functions_pm.PL @@ -207,11 +207,10 @@ L section. =cut -our $VERSION = '1.13'; +our $VERSION = '1.14'; -require Exporter; +use Exporter 'import'; -our @ISA = qw(Exporter); our @EXPORT = qw(%Kinds %Type %Flavor %Type_Description @Type_Order); our(%Kinds, %Type, %Flavor, %Type_Description, @Type_Order); diff --git a/gnu/usr.bin/perl/ext/Pod-Functions/t/Functions.t b/gnu/usr.bin/perl/ext/Pod-Functions/t/Functions.t index 2beccc1ac62..959bff45a74 100644 --- a/gnu/usr.bin/perl/ext/Pod-Functions/t/Functions.t +++ b/gnu/usr.bin/perl/ext/Pod-Functions/t/Functions.t @@ -35,12 +35,12 @@ my @categories = qw( Modules Objects Socket SysV User Network Time ); -ok( eq_array( \@Type_Order, \@categories ), +is_deeply( \@Type_Order, \@categories, '@Type_Order' ); my @cat_keys = grep exists $Type_Description{ $_ } => @Type_Order; -ok( eq_array( \@cat_keys, \@categories ), +is_deeply( \@cat_keys, \@categories, 'keys() %Type_Description' ); SKIP: { diff --git a/gnu/usr.bin/perl/ext/Pod-Html/lib/Pod/Html.pm b/gnu/usr.bin/perl/ext/Pod-Html/lib/Pod/Html.pm index 71555e723ca..a9b0d5e77c3 100644 --- a/gnu/usr.bin/perl/ext/Pod-Html/lib/Pod/Html.pm +++ b/gnu/usr.bin/perl/ext/Pod-Html/lib/Pod/Html.pm @@ -1,21 +1,28 @@ package Pod::Html; use strict; -require Exporter; +use Exporter 'import'; -our $VERSION = 1.25; -our @ISA = qw(Exporter); +our $VERSION = 1.33; +$VERSION = eval $VERSION; our @EXPORT = qw(pod2html htmlify); our @EXPORT_OK = qw(anchorify relativize_url); -use Carp; use Config; use Cwd; use File::Basename; use File::Spec; -use File::Spec::Unix; -use Getopt::Long; use Pod::Simple::Search; use Pod::Simple::SimpleTree (); +use Pod::Html::Util qw( + html_escape + process_command_line + trim_leading_whitespace + unixify + usage + htmlify + anchorify + relativize_url +); use locale; # make \w work right in non-ASCII lands =head1 NAME @@ -188,20 +195,28 @@ Display progress messages. By default, they won't be displayed. =back -=head2 htmlify +=head2 Auxiliary Functions - htmlify($heading); +Prior to perl-5.36, the following three functions were exported by +F, either by default or on request: + +=over 4 -Converts a pod section specification to a suitable section specification -for HTML. Note that we keep spaces and special characters except -C<", ?> (Netscape problem) and the hyphen (writer's problem...). +=item * C (by default) -=head2 anchorify +=item * C (upon request) + +=item * C (upon request) + +=back - anchorify(@heading); +The definition and documentation of these functions have been moved to +F, viewable via C. -Similar to C, but turns non-alphanumerics into underscores. Note -that C is not exported by default. +In perl-5.36, these functions will be importable from either F or +F. However, beginning with perl-5.38 they will only be +importable, upon request, from F. Please modify your code as +needed. =head1 ENVIRONMENT @@ -223,386 +238,234 @@ This program is distributed under the Artistic License. =cut -# This sub duplicates the guts of Pod::Simple::FromTree. We could have -# used that module, except that it would have been a non-core dependency. -sub feed_tree_to_parser { - my($parser, $tree) = @_; - if(ref($tree) eq "") { - $parser->_handle_text($tree); - } elsif(!($tree->[0] eq "X" && $parser->nix_X_codes)) { - $parser->_handle_element_start($tree->[0], $tree->[1]); - feed_tree_to_parser($parser, $_) foreach @{$tree}[2..$#$tree]; - $parser->_handle_element_end($tree->[0]); - } -} - -my $Cachedir; -my $Dircache; -my($Htmlroot, $Htmldir, $Htmlfile, $Htmlfileurl); -my($Podfile, @Podpath, $Podroot); -my $Poderrors; -my $Css; - -my $Recurse; -my $Quiet; -my $Verbose; -my $Doindex; - -my $Backlink; - -my($Title, $Header); - -my %Pages = (); # associative array used to find the location - # of pages referenced by L<> links. - -my $Curdir = File::Spec->curdir; - -init_globals(); - -sub init_globals { - $Cachedir = "."; # The directory to which directory caches - # will be written. - - $Dircache = "pod2htmd.tmp"; - - $Htmlroot = "/"; # http-server base directory from which all - # relative paths in $podpath stem. - $Htmldir = ""; # The directory to which the html pages - # will (eventually) be written. - $Htmlfile = ""; # write to stdout by default - $Htmlfileurl = ""; # The url that other files would use to - # refer to this file. This is only used - # to make relative urls that point to - # other files. - - $Poderrors = 1; - $Podfile = ""; # read from stdin by default - @Podpath = (); # list of directories containing library pods. - $Podroot = $Curdir; # filesystem base directory from which all - # relative paths in $podpath stem. - $Css = ''; # Cascading style sheet - $Recurse = 1; # recurse on subdirectories in $podpath. - $Quiet = 0; # not quiet by default - $Verbose = 0; # not verbose by default - $Doindex = 1; # non-zero if we should generate an index - $Backlink = 0; # no backlinks added by default - $Header = 0; # produce block header/footer - $Title = undef; # title to give the pod(s) +sub new { + my $class = shift; + return bless {}, $class; } sub pod2html { local(@ARGV) = @_; local $_; - init_globals(); - parse_command_line(); + my $self = Pod::Html->new(); + $self->init_globals(); - # prevent '//' in urls - $Htmlroot = "" if $Htmlroot eq "/"; - $Htmldir =~ s#/\z##; + my $opts = process_command_line; + $self->process_options($opts); - if ( $Htmlroot eq '' - && defined( $Htmldir ) - && $Htmldir ne '' - && substr( $Htmlfile, 0, length( $Htmldir ) ) eq $Htmldir - ) { - # Set the 'base' url for this file, so that we can use it - # as the location from which to calculate relative links - # to other files. If this is '', then absolute links will - # be used throughout. - #$Htmlfileurl = "$Htmldir/" . substr( $Htmlfile, length( $Htmldir ) + 1); - # Is the above not just "$Htmlfileurl = $Htmlfile"? - $Htmlfileurl = Pod::Html::_unixify($Htmlfile); - - } + $self->refine_globals(); # load or generate/cache %Pages - unless (get_cache($Dircache, \@Podpath, $Podroot, $Recurse)) { + unless ($self->get_cache()) { # generate %Pages - my $pwd = getcwd(); - chdir($Podroot) || - die "$0: error changing to directory $Podroot: $!\n"; - - # find all pod modules/pages in podpath, store in %Pages - # - callback used to remove Podroot and extension from each file - # - laborious to allow '.' in dirnames (e.g., /usr/share/perl/5.14.1) - Pod::Simple::Search->new->inc(0)->verbose($Verbose)->laborious(1) - ->callback(\&_save_page)->recurse($Recurse)->survey(@Podpath); - - chdir($pwd) || die "$0: error changing to directory $pwd: $!\n"; - - # cache the directory list for later use - warn "caching directories for later use\n" if $Verbose; - open my $cache, '>', $Dircache - or die "$0: error open $Dircache for writing: $!\n"; - - print $cache join(":", @Podpath) . "\n$Podroot\n"; - my $_updirs_only = ($Podroot =~ /\.\./) && !($Podroot =~ /[^\.\\\/]/); - foreach my $key (keys %Pages) { - if($_updirs_only) { - my $_dirlevel = $Podroot; - while($_dirlevel =~ /\.\./) { - $_dirlevel =~ s/\.\.//; - # Assume $Pages{$key} has '/' separators (html dir separators). - $Pages{$key} =~ s/^[\w\s\-\.]+\///; - } - } - print $cache "$key $Pages{$key}\n"; - } - - close $cache or die "error closing $Dircache: $!"; - } - - my $input; - unless (@ARGV && $ARGV[0]) { - if ($Podfile and $Podfile ne '-') { - $input = $Podfile; - } else { - $input = '-'; # XXX: make a test case for this - } - } else { - $Podfile = $ARGV[0]; - $input = *ARGV; - } - - # set options for input parser - my $parser = Pod::Simple::SimpleTree->new; - $parser->codes_in_verbatim(0); - $parser->accept_targets(qw(html HTML)); - $parser->no_errata_section(!$Poderrors); # note the inverse - - warn "Converting input file $Podfile\n" if $Verbose; - my $podtree = $parser->parse_file($input)->root; - - unless(defined $Title) { - if($podtree->[0] eq "Document" && ref($podtree->[2]) eq "ARRAY" && - $podtree->[2]->[0] eq "head1" && @{$podtree->[2]} == 3 && - ref($podtree->[2]->[2]) eq "" && $podtree->[2]->[2] eq "NAME" && - ref($podtree->[3]) eq "ARRAY" && $podtree->[3]->[0] eq "Para" && - @{$podtree->[3]} >= 3 && - !(grep { ref($_) ne "" } - @{$podtree->[3]}[2..$#{$podtree->[3]}]) && - (@$podtree == 4 || - (ref($podtree->[4]) eq "ARRAY" && - $podtree->[4]->[0] eq "head1"))) { - $Title = join("", @{$podtree->[3]}[2..$#{$podtree->[3]}]); - } + #%Pages = $self->generate_cache(\%Pages); + $self->generate_cache($self->{Pages}); } - - $Title //= ""; - $Title = html_escape($Title); + my $input = $self->identify_input(); + my $podtree = $self->parse_input_for_podtree($input); + $self->set_Title_from_podtree($podtree); # set options for the HTML generator - $parser = Pod::Simple::XHTML::LocalPodLinks->new(); + my $parser = Pod::Simple::XHTML::LocalPodLinks->new(); $parser->codes_in_verbatim(0); $parser->anchor_items(1); # the old Pod::Html always did - $parser->backlink($Backlink); # linkify =head1 directives - $parser->force_title($Title); - $parser->htmldir($Htmldir); - $parser->htmlfileurl($Htmlfileurl); - $parser->htmlroot($Htmlroot); - $parser->index($Doindex); - $parser->output_string(\my $output); # written to file later - $parser->pages(\%Pages); - $parser->quiet($Quiet); - $parser->verbose($Verbose); + $parser->backlink($self->{Backlink}); # linkify =head1 directives + $parser->force_title($self->{Title}); + $parser->htmldir($self->{Htmldir}); + $parser->htmlfileurl($self->{Htmlfileurl}); + $parser->htmlroot($self->{Htmlroot}); + $parser->index($self->{Doindex}); + $parser->output_string(\$self->{output}); # written to file later + #$parser->pages(\%Pages); + $parser->pages($self->{Pages}); + $parser->quiet($self->{Quiet}); + $parser->verbose($self->{Verbose}); + + $parser = $self->refine_parser($parser); + $self->feed_tree_to_parser($parser, $podtree); + $self->write_file(); +} - # We need to add this ourselves because we use our own header, not - # ::XHTML's header. We need to set $parser->backlink to linkify - # the =head1 directives - my $bodyid = $Backlink ? ' id="_podtop_"' : ''; +sub init_globals { + my $self = shift; + $self->{Cachedir} = "."; # The directory to which directory caches + # will be written. + + $self->{Dircache} = "pod2htmd.tmp"; + + $self->{Htmlroot} = "/"; # http-server base directory from which all + # relative paths in $podpath stem. + $self->{Htmldir} = ""; # The directory to which the html pages + # will (eventually) be written. + $self->{Htmlfile} = ""; # write to stdout by default + $self->{Htmlfileurl} = ""; # The url that other files would use to + # refer to this file. This is only used + # to make relative urls that point to + # other files. + + $self->{Poderrors} = 1; + $self->{Podfile} = ""; # read from stdin by default + $self->{Podpath} = []; # list of directories containing library pods. + $self->{Podroot} = $self->{Curdir} = File::Spec->curdir; + # filesystem base directory from which all + # relative paths in $podpath stem. + $self->{Css} = ''; # Cascading style sheet + $self->{Recurse} = 1; # recurse on subdirectories in $podpath. + $self->{Quiet} = 0; # not quiet by default + $self->{Verbose} = 0; # not verbose by default + $self->{Doindex} = 1; # non-zero if we should generate an index + $self->{Backlink} = 0; # no backlinks added by default + $self->{Header} = 0; # produce block header/footer + $self->{Title} = undef; # title to give the pod(s) + $self->{Saved_Cache_Key} = ''; + $self->{Pages} = {}; + return $self; +} - my $csslink = ''; - my $tdstyle = ' style="background-color: #cccccc; color: #000"'; +sub process_options { + my ($self, $opts) = @_; + + $self->{Podpath} = (defined $opts->{podpath}) + ? [ split(":", $opts->{podpath}) ] + : []; + + $self->{Backlink} = $opts->{backlink} if defined $opts->{backlink}; + $self->{Cachedir} = unixify($opts->{cachedir}) if defined $opts->{cachedir}; + $self->{Css} = $opts->{css} if defined $opts->{css}; + $self->{Header} = $opts->{header} if defined $opts->{header}; + $self->{Htmldir} = unixify($opts->{htmldir}) if defined $opts->{htmldir}; + $self->{Htmlroot} = unixify($opts->{htmlroot}) if defined $opts->{htmlroot}; + $self->{Doindex} = $opts->{index} if defined $opts->{index}; + $self->{Podfile} = unixify($opts->{infile}) if defined $opts->{infile}; + $self->{Htmlfile} = unixify($opts->{outfile}) if defined $opts->{outfile}; + $self->{Poderrors} = $opts->{poderrors} if defined $opts->{poderrors}; + $self->{Podroot} = unixify($opts->{podroot}) if defined $opts->{podroot}; + $self->{Quiet} = $opts->{quiet} if defined $opts->{quiet}; + $self->{Recurse} = $opts->{recurse} if defined $opts->{recurse}; + $self->{Title} = $opts->{title} if defined $opts->{title}; + $self->{Verbose} = $opts->{verbose} if defined $opts->{verbose}; - if ($Css) { - $csslink = qq(\n); - $csslink =~ s,\\,/,g; - $csslink =~ s,(/.):,$1|,; - $tdstyle= ''; + warn "Flushing directory caches\n" + if $opts->{verbose} && defined $opts->{flush}; + $self->{Dircache} = "$self->{Cachedir}/pod2htmd.tmp"; + if (defined $opts->{flush}) { + 1 while unlink($self->{Dircache}); } + return $self; +} - # header/footer block - my $block = $Header ? < - - $Title - - -END_OF_BLOCK - - # create own header/footer because of --header - $parser->html_header(<<"HTMLHEAD"); - - - - -$Title$csslink - - - - - -$block -HTMLHEAD - - $parser->html_footer(<<"HTMLFOOT"); -$block - - - -HTMLFOOT +sub refine_globals { + my $self = shift; - feed_tree_to_parser($parser, $podtree); + # prevent '//' in urls + $self->{Htmlroot} = "" if $self->{Htmlroot} eq "/"; + $self->{Htmldir} =~ s#/\z##; - # Write output to file - $Htmlfile = "-" unless $Htmlfile; # stdout - my $fhout; - if($Htmlfile and $Htmlfile ne '-') { - open $fhout, ">", $Htmlfile - or die "$0: cannot open $Htmlfile file for output: $!\n"; - } else { - open $fhout, ">-"; + if ( $self->{Htmlroot} eq '' + && defined( $self->{Htmldir} ) + && $self->{Htmldir} ne '' + && substr( $self->{Htmlfile}, 0, length( $self->{Htmldir} ) ) eq $self->{Htmldir} + ) { + # Set the 'base' url for this file, so that we can use it + # as the location from which to calculate relative links + # to other files. If this is '', then absolute links will + # be used throughout. + #$self->{Htmlfileurl} = "$self->{Htmldir}/" . substr( $self->{Htmlfile}, length( $self->{Htmldir} ) + 1); + # Is the above not just "$self->{Htmlfileurl} = $self->{Htmlfile}"? + $self->{Htmlfileurl} = unixify($self->{Htmlfile}); } - binmode $fhout, ":utf8"; - print $fhout $output; - close $fhout or die "Failed to close $Htmlfile: $!"; - chmod 0644, $Htmlfile unless $Htmlfile eq '-'; + return $self; } -############################################################################## - -sub usage { - my $podfile = shift; - warn "$0: $podfile: @_\n" if @_; - die < --htmlroot= - --infile= --outfile= - --podpath=:...: --podroot= - --cachedir= --flush --recurse --norecurse - --quiet --noquiet --verbose --noverbose - --index --noindex --backlink --nobacklink - --header --noheader --poderrors --nopoderrors - --css= --title= - - --[no]backlink - turn =head1 directives into links pointing to the top of - the page (off by default). - --cachedir - directory for the directory cache files. - --css - stylesheet URL - --flush - flushes the directory cache. - --[no]header - produce block header/footer (default is no headers). - --help - prints this message. - --htmldir - directory for resulting HTML files. - --htmlroot - http-server base directory from which all relative paths - in podpath stem (default is /). - --[no]index - generate an index at the top of the resulting html - (default behaviour). - --infile - filename for the pod to convert (input taken from stdin - by default). - --outfile - filename for the resulting html file (output sent to - stdout by default). - --[no]poderrors - include a POD ERRORS section in the output if there were - any POD errors in the input (default behavior). - --podpath - colon-separated list of directories containing library - pods (empty by default). - --podroot - filesystem base directory from which all relative paths - in podpath stem (default is .). - --[no]quiet - suppress some benign warning messages (default is off). - --[no]recurse - recurse on those subdirectories listed in podpath - (default behaviour). - --title - title that will appear in resulting html file. - --[no]verbose - self-explanatory (off by default). - -END_OF_USAGE +sub generate_cache { + my $self = shift; + my $pwd = getcwd(); + chdir($self->{Podroot}) || + die "$0: error changing to directory $self->{Podroot}: $!\n"; + + # find all pod modules/pages in podpath, store in %Pages + # - inc(0): do not prepend directories in @INC to search list; + # limit search to those in @{$self->{Podpath}} + # - verbose: report (via 'warn') what search is doing + # - laborious: to allow '.' in dirnames (e.g., /usr/share/perl/5.14.1) + # - recurse: go into subdirectories + # - survey: search for POD files in PodPath + my ($name2path, $path2name) = + Pod::Simple::Search->new->inc(0)->verbose($self->{Verbose})->laborious(1) + ->recurse($self->{Recurse})->survey(@{$self->{Podpath}}); + # remove Podroot and extension from each file + for my $k (keys %{$name2path}) { + $self->{Pages}{$k} = _transform($self, $name2path->{$k}); + } + chdir($pwd) || die "$0: error changing to directory $pwd: $!\n"; + + # cache the directory list for later use + warn "caching directories for later use\n" if $self->{Verbose}; + open my $cache, '>', $self->{Dircache} + or die "$0: error open $self->{Dircache} for writing: $!\n"; + + print $cache join(":", @{$self->{Podpath}}) . "\n$self->{Podroot}\n"; + my $_updirs_only = ($self->{Podroot} =~ /\.\./) && !($self->{Podroot} =~ /[^\.\\\/]/); + foreach my $key (keys %{$self->{Pages}}) { + if($_updirs_only) { + my $_dirlevel = $self->{Podroot}; + while($_dirlevel =~ /\.\./) { + $_dirlevel =~ s/\.\.//; + # Assume $Pagesref->{$key} has '/' separators (html dir separators). + $self->{Pages}->{$key} =~ s/^[\w\s\-\.]+\///; + } + } + print $cache "$key $self->{Pages}->{$key}\n"; + } + close $cache or die "error closing $self->{Dircache}: $!"; } -sub parse_command_line { - my ($opt_backlink,$opt_cachedir,$opt_css,$opt_flush,$opt_header, - $opt_help,$opt_htmldir,$opt_htmlroot,$opt_index,$opt_infile, - $opt_outfile,$opt_poderrors,$opt_podpath,$opt_podroot, - $opt_quiet,$opt_recurse,$opt_title,$opt_verbose); - - unshift @ARGV, split ' ', $Config{pod2html} if $Config{pod2html}; - my $result = GetOptions( - 'backlink!' => \$opt_backlink, - 'cachedir=s' => \$opt_cachedir, - 'css=s' => \$opt_css, - 'flush' => \$opt_flush, - 'help' => \$opt_help, - 'header!' => \$opt_header, - 'htmldir=s' => \$opt_htmldir, - 'htmlroot=s' => \$opt_htmlroot, - 'index!' => \$opt_index, - 'infile=s' => \$opt_infile, - 'outfile=s' => \$opt_outfile, - 'poderrors!' => \$opt_poderrors, - 'podpath=s' => \$opt_podpath, - 'podroot=s' => \$opt_podroot, - 'quiet!' => \$opt_quiet, - 'recurse!' => \$opt_recurse, - 'title=s' => \$opt_title, - 'verbose!' => \$opt_verbose, - ); - usage("-", "invalid parameters") if not $result; - - usage("-") if defined $opt_help; # see if the user asked for help - $opt_help = ""; # just to make -w shut-up. - - @Podpath = split(":", $opt_podpath) if defined $opt_podpath; - - $Backlink = $opt_backlink if defined $opt_backlink; - $Cachedir = _unixify($opt_cachedir) if defined $opt_cachedir; - $Css = $opt_css if defined $opt_css; - $Header = $opt_header if defined $opt_header; - $Htmldir = _unixify($opt_htmldir) if defined $opt_htmldir; - $Htmlroot = _unixify($opt_htmlroot) if defined $opt_htmlroot; - $Doindex = $opt_index if defined $opt_index; - $Podfile = _unixify($opt_infile) if defined $opt_infile; - $Htmlfile = _unixify($opt_outfile) if defined $opt_outfile; - $Poderrors = $opt_poderrors if defined $opt_poderrors; - $Podroot = _unixify($opt_podroot) if defined $opt_podroot; - $Quiet = $opt_quiet if defined $opt_quiet; - $Recurse = $opt_recurse if defined $opt_recurse; - $Title = $opt_title if defined $opt_title; - $Verbose = $opt_verbose if defined $opt_verbose; +sub _transform { + my ($self, $v) = @_; + $v = $self->{Podroot} eq File::Spec->curdir + ? File::Spec->abs2rel($v) + : File::Spec->abs2rel($v, + File::Spec->canonpath($self->{Podroot})); - warn "Flushing directory caches\n" - if $opt_verbose && defined $opt_flush; - $Dircache = "$Cachedir/pod2htmd.tmp"; - if (defined $opt_flush) { - 1 while unlink($Dircache); - } -} + # Convert path to unix style path + $v = unixify($v); -my $Saved_Cache_Key; + my ($file, $dir) = fileparse($v, qr/\.[^.]*/); # strip .ext + return $dir.$file; +} sub get_cache { - my($dircache, $podpath, $podroot, $recurse) = @_; - my @cache_key_args = @_; + my $self = shift; # A first-level cache: # Don't bother reading the cache files if they still apply # and haven't changed since we last read them. - my $this_cache_key = cache_key(@cache_key_args); - return 1 if $Saved_Cache_Key and $this_cache_key eq $Saved_Cache_Key; - $Saved_Cache_Key = $this_cache_key; + my $this_cache_key = $self->cache_key(); + return 1 if $self->{Saved_Cache_Key} and $this_cache_key eq $self->{Saved_Cache_Key}; + $self->{Saved_Cache_Key} = $this_cache_key; # load the cache of %Pages if possible. $tests will be # non-zero if successful. my $tests = 0; - if (-f $dircache) { - warn "scanning for directory cache\n" if $Verbose; - $tests = load_cache($dircache, $podpath, $podroot); + if (-f $self->{Dircache}) { + warn "scanning for directory cache\n" if $self->{Verbose}; + $tests = $self->load_cache(); } return $tests; } sub cache_key { - my($dircache, $podpath, $podroot, $recurse) = @_; - return join('!',$dircache,$recurse,@$podpath,$podroot,stat($dircache)); + my $self = shift; + return join('!', + $self->{Dircache}, + $self->{Recurse}, + @{$self->{Podpath}}, + $self->{Podroot}, + stat($self->{Dircache}), + ); } # @@ -610,24 +473,24 @@ sub cache_key { # cache of %Pages. if so, it loads them and returns a non-zero value. # sub load_cache { - my($dircache, $podpath, $podroot) = @_; + my $self = shift; my $tests = 0; local $_; - warn "scanning for directory cache\n" if $Verbose; - open(my $cachefh, '<', $dircache) || - die "$0: error opening $dircache for reading: $!\n"; + warn "scanning for directory cache\n" if $self->{Verbose}; + open(my $cachefh, '<', $self->{Dircache}) || + die "$0: error opening $self->{Dircache} for reading: $!\n"; $/ = "\n"; # is it the same podpath? $_ = <$cachefh>; chomp($_); - $tests++ if (join(":", @$podpath) eq $_); + $tests++ if (join(":", @{$self->{Podpath}}) eq $_); # is it the same podroot? $_ = <$cachefh>; chomp($_); - $tests++ if ($podroot eq $_); + $tests++ if ($self->{Podroot} eq $_); # load the cache if its good if ($tests != 2) { @@ -635,96 +498,147 @@ sub load_cache { return 0; } - warn "loading directory cache\n" if $Verbose; + warn "loading directory cache\n" if $self->{Verbose}; while (<$cachefh>) { /(.*?) (.*)$/; - $Pages{$1} = $2; + $self->{Pages}->{$1} = $2; } close($cachefh); return 1; } - -# -# html_escape: make text safe for HTML -# -sub html_escape { - my $rest = $_[0]; - $rest =~ s/&/&/g; - $rest =~ s//>/g; - $rest =~ s/"/"/g; - $rest =~ s/([[:^print:]])/sprintf("&#x%x;", ord($1))/aeg; - return $rest; +sub identify_input { + my $self = shift; + my $input; + unless (@ARGV && $ARGV[0]) { + if ($self->{Podfile} and $self->{Podfile} ne '-') { + $input = $self->{Podfile}; + } else { + $input = '-'; # XXX: make a test case for this + } + } else { + $self->{Podfile} = $ARGV[0]; + $input = *ARGV; + } + return $input; } -# -# htmlify - converts a pod section specification to a suitable section -# specification for HTML. We adopt the mechanism used by the formatter -# that we use. -# -sub htmlify { - my( $heading) = @_; - return Pod::Simple::XHTML->can("idify")->(undef, $heading, 1); +sub parse_input_for_podtree { + my ($self, $input) = @_; + # set options for input parser + my $input_parser = Pod::Simple::SimpleTree->new; + # Normalize whitespace indenting + $input_parser->strip_verbatim_indent(\&trim_leading_whitespace); + + $input_parser->codes_in_verbatim(0); + $input_parser->accept_targets(qw(html HTML)); + $input_parser->no_errata_section(!$self->{Poderrors}); # note the inverse + + warn "Converting input file $self->{Podfile}\n" if $self->{Verbose}; + my $podtree = $input_parser->parse_file($input)->root; + return $podtree; } -# -# similar to htmlify, but turns non-alphanumerics into underscores -# -sub anchorify { - my ($anchor) = @_; - $anchor = htmlify($anchor); - $anchor =~ s/\W/_/g; - return $anchor; +sub set_Title_from_podtree { + my ($self, $podtree) = @_; + unless(defined $self->{Title}) { + if($podtree->[0] eq "Document" && ref($podtree->[2]) eq "ARRAY" && + $podtree->[2]->[0] eq "head1" && @{$podtree->[2]} == 3 && + ref($podtree->[2]->[2]) eq "" && $podtree->[2]->[2] eq "NAME" && + ref($podtree->[3]) eq "ARRAY" && $podtree->[3]->[0] eq "Para" && + @{$podtree->[3]} >= 3 && + !(grep { ref($_) ne "" } + @{$podtree->[3]}[2..$#{$podtree->[3]}]) && + (@$podtree == 4 || + (ref($podtree->[4]) eq "ARRAY" && + $podtree->[4]->[0] eq "head1"))) { + $self->{Title} = join("", @{$podtree->[3]}[2..$#{$podtree->[3]}]); + } + } + + $self->{Title} //= ""; + $self->{Title} = html_escape($self->{Title}); + return $self; } -# -# store POD files in %Pages -# -sub _save_page { - my ($modspec, $modname) = @_; +sub refine_parser { + my ($self, $parser) = @_; + # We need to add this ourselves because we use our own header, not + # ::XHTML's header. We need to set $parser->backlink to linkify + # the =head1 directives + my $bodyid = $self->{Backlink} ? ' id="_podtop_"' : ''; + + my $csslink = ''; + my $tdstyle = ' style="background-color: #cccccc; color: #000"'; - # Remove Podroot from path - $modspec = $Podroot eq File::Spec->curdir - ? File::Spec->abs2rel($modspec) - : File::Spec->abs2rel($modspec, - File::Spec->canonpath($Podroot)); + if ($self->{Css}) { + $csslink = qq(\n); + $csslink =~ s,\\,/,g; + $csslink =~ s,(/.):,$1|,; + $tdstyle= ''; + } - # Convert path to unix style path - $modspec = Pod::Html::_unixify($modspec); + # header/footer block + my $block = $self->{Header} ? < + + $self->{Title} + + +END_OF_BLOCK - my ($file, $dir) = fileparse($modspec, qr/\.[^.]*/); # strip .ext - $Pages{$modname} = $dir.$file; + # create own header/footer because of --header + $parser->html_header(<<"HTMLHEAD"); + + + + +$self->{Title}$csslink + + + + + +$block +HTMLHEAD + + $parser->html_footer(<<"HTMLFOOT"); +$block + + + +HTMLFOOT + return $parser; } -sub _unixify { - my $full_path = shift; - return '' unless $full_path; - return $full_path if $full_path eq '/'; - - my ($vol, $dirs, $file) = File::Spec->splitpath($full_path); - my @dirs = $dirs eq File::Spec->curdir() - ? (File::Spec::Unix->curdir()) - : File::Spec->splitdir($dirs); - if (defined($vol) && $vol) { - $vol =~ s/:$// if $^O eq 'VMS'; - $vol = uc $vol if $^O eq 'MSWin32'; - - if( $dirs[0] ) { - unshift @dirs, $vol; - } - else { - $dirs[0] = $vol; - } +# This sub duplicates the guts of Pod::Simple::FromTree. We could have +# used that module, except that it would have been a non-core dependency. +sub feed_tree_to_parser { + my($self, $parser, $tree) = @_; + if(ref($tree) eq "") { + $parser->_handle_text($tree); + } elsif(!($tree->[0] eq "X" && $parser->nix_X_codes)) { + $parser->_handle_element_start($tree->[0], $tree->[1]); + $self->feed_tree_to_parser($parser, $_) foreach @{$tree}[2..$#$tree]; + $parser->_handle_element_end($tree->[0]); + } +} + +sub write_file { + my $self = shift; + $self->{Htmlfile} = "-" unless $self->{Htmlfile}; # stdout + my $fhout; + if($self->{Htmlfile} and $self->{Htmlfile} ne '-') { + open $fhout, ">", $self->{Htmlfile} + or die "$0: cannot open $self->{Htmlfile} file for output: $!\n"; + } else { + open $fhout, ">-"; } - unshift @dirs, '' if File::Spec->file_name_is_absolute($full_path); - return $file unless scalar(@dirs); - $full_path = File::Spec::Unix->catfile(File::Spec::Unix->catdir(@dirs), - $file); - $full_path =~ s|^\/|| if $^O eq 'MSWin32'; # C:/foo works, /C:/foo doesn't - $full_path =~ s/\^\././g if $^O eq 'VMS'; # unescape dots - return $full_path; + binmode $fhout, ":utf8"; + print $fhout $self->{output}; + close $fhout or die "Failed to close $self->{Htmlfile}: $!"; + chmod 0644, $self->{Htmlfile} unless $self->{Htmlfile} eq '-'; } package Pod::Simple::XHTML::LocalPodLinks; @@ -794,15 +708,15 @@ sub resolve_pod_page_link { $path = $self->pages->{$to}; } - my $url = File::Spec::Unix->catfile(Pod::Html::_unixify($self->htmlroot), + my $url = File::Spec::Unix->catfile(Pod::Html::Util::unixify($self->htmlroot), $path); if ($self->htmlfileurl ne '') { # then $self->htmlroot eq '' (by definition of htmlfileurl) so # $self->htmldir needs to be prepended to link to get the absolute path # that will be relativized - $url = Pod::Html::relativize_url( - File::Spec::Unix->catdir(Pod::Html::_unixify($self->htmldir), $url), + $url = Pod::Html::Util::relativize_url( + File::Spec::Unix->catdir(Pod::Html::Util::unixify($self->htmldir), $url), $self->htmlfileurl # already unixified ); } @@ -810,36 +724,4 @@ sub resolve_pod_page_link { return $url . ".html$section"; } -package Pod::Html; - -# -# relativize_url - convert an absolute URL to one relative to a base URL. -# Assumes both end in a filename. -# -sub relativize_url { - my ($dest, $source) = @_; - - # Remove each file from its path - my ($dest_volume, $dest_directory, $dest_file) = - File::Spec::Unix->splitpath( $dest ); - $dest = File::Spec::Unix->catpath( $dest_volume, $dest_directory, '' ); - - my ($source_volume, $source_directory, $source_file) = - File::Spec::Unix->splitpath( $source ); - $source = File::Spec::Unix->catpath( $source_volume, $source_directory, '' ); - - my $rel_path = ''; - if ($dest ne '') { - $rel_path = File::Spec::Unix->abs2rel( $dest, $source ); - } - - if ($rel_path ne '' && substr( $rel_path, -1 ) ne '/') { - $rel_path .= "/$dest_file"; - } else { - $rel_path .= "$dest_file"; - } - - return $rel_path; -} - 1; diff --git a/gnu/usr.bin/perl/ext/Pod-Html/t/crossref.t b/gnu/usr.bin/perl/ext/Pod-Html/t/crossref.t index 74e04e042f4..c6e84356571 100644 --- a/gnu/usr.bin/perl/ext/Pod-Html/t/crossref.t +++ b/gnu/usr.bin/perl/ext/Pod-Html/t/crossref.t @@ -1,34 +1,44 @@ -#!/usr/bin/perl -w # -*- perl -*- - BEGIN { - require "./t/pod2html-lib.pl"; -} - -END { - rem_test_dir(); + use File::Spec::Functions ':ALL'; + @INC = map { rel2abs($_) } + (qw| ./lib ./t/lib ../../lib |); } use strict; +use warnings; +use Test::More; +use Testing qw( setup_testing_dir xconvert ); use Cwd; -use File::Spec::Functions; -use Test::More tests => 1; -SKIP: { - my $output = make_test_dir(); - skip "$output", 1 if $output; +my $debug = 0; +my $startdir = cwd(); +END { chdir($startdir) or die("Cannot change back to $startdir: $!"); } +my ($expect_raw, $args); +{ local $/; $expect_raw = ; } + +my $tdir = setup_testing_dir( { + debug => $debug, +} ); + +my ($v, $d) = splitpath(cwd(), 1); +my @dirs = splitdir($d); +shift @dirs if $dirs[0] eq ''; +my $relcwd = join '/', @dirs; - my ($v, $d) = splitpath(cwd(), 1); - my @dirs = splitdir($d); - shift @dirs if $dirs[0] eq ''; - my $relcwd = join '/', @dirs; - - convert_n_test("crossref", "cross references", - "--podpath=". File::Spec::Unix->catdir($relcwd, 't') . ":" - . File::Spec::Unix->catdir($relcwd, 'testdir/test.lib'), - "--podroot=". catpath($v, '/', ''), - "--quiet", - ); -} +$args = { + podstub => "crossref", + description => "cross references", + expect => $expect_raw, + p2h => { + podpath => File::Spec::Unix->catdir($relcwd, 't') . ":" . File::Spec::Unix->catdir($relcwd, 'corpus/test.lib'), + podroot => catpath($v, '/', ''), + quiet => 1, + }, + debug => $debug, +}; +xconvert($args); + +done_testing; __DATA__ @@ -68,15 +78,15 @@ __DATA__

"non existent section"

-

var-copy

+

var-copy

-

"$"" in var-copy

+

"$"" in var-copy

var-copy

var-copy/$"

-

"First:" in podspec-copy

+

"First:" in podspec-copy

podspec-copy/First:

diff --git a/gnu/usr.bin/perl/ext/Pod-Html/t/crossref2.t b/gnu/usr.bin/perl/ext/Pod-Html/t/crossref2.t index 4e1b9233332..776c021f8a4 100644 --- a/gnu/usr.bin/perl/ext/Pod-Html/t/crossref2.t +++ b/gnu/usr.bin/perl/ext/Pod-Html/t/crossref2.t @@ -1,30 +1,45 @@ -#!/usr/bin/perl -w # -*- perl -*- - BEGIN { - require "./t/pod2html-lib.pl"; -} - -END { - rem_test_dir(); + use File::Spec::Functions ':ALL'; + @INC = map { rel2abs($_) } + (qw| ./lib ./t/lib ../../lib |); } use strict; +use warnings; +use Test::More; +use Testing qw( setup_testing_dir xconvert ); use Cwd; -use Test::More tests => 1; - -SKIP: { - my $output = make_test_dir(); - skip "$output", 1 if $output; - - my $cwd = Pod::Html::_unixify(cwd()); - - convert_n_test("crossref", "cross references", - "--podpath=t:testdir/test.lib", - "--podroot=$cwd", - "--htmldir=$cwd", - "--quiet", - ); -} +use Pod::Html::Util qw( + unixify +); + +my $debug = 0; +my $startdir = cwd(); +END { chdir($startdir) or die("Cannot change back to $startdir: $!"); } +my ($expect_raw, $args); +{ local $/; $expect_raw = ; } + +my $tdir = setup_testing_dir( { + debug => $debug, +} ); + +my $cwd = unixify(cwd()); + +$args = { + podstub => "crossref", + description => "cross references", + expect => $expect_raw, + p2h => { + podpath => 't:corpus/test.lib', + podroot => $cwd, + htmldir => $cwd, + quiet => 1, + }, + debug => $debug, +}; +xconvert($args); + +done_testing; __DATA__ @@ -64,15 +79,15 @@ __DATA__

"non existent section"

-

var-copy

+

var-copy

-

"$"" in var-copy

+

"$"" in var-copy

var-copy

var-copy/$"

-

"First:" in podspec-copy

+

"First:" in podspec-copy

podspec-copy/First:

diff --git a/gnu/usr.bin/perl/ext/Pod-Html/t/crossref3.t b/gnu/usr.bin/perl/ext/Pod-Html/t/crossref3.t index 5edab486d02..c8a8bf60635 100644 --- a/gnu/usr.bin/perl/ext/Pod-Html/t/crossref3.t +++ b/gnu/usr.bin/perl/ext/Pod-Html/t/crossref3.t @@ -1,30 +1,42 @@ -#!/usr/bin/perl -w # -*- perl -*- - BEGIN { - require "./t/pod2html-lib.pl"; -} - -END { - rem_test_dir(); + use File::Spec::Functions ':ALL'; + @INC = map { rel2abs($_) } + (qw| ./lib ./t/lib ../../lib |); } use strict; +use warnings; +use Test::More; +use Testing qw( setup_testing_dir xconvert ); use Cwd; -use Test::More tests => 1; - -SKIP: { - my $output = make_test_dir(); - skip "$output", 1 if $output; - - my $cwd = cwd(); - - convert_n_test("crossref", "cross references", - "--podpath=t:testdir/test.lib", - "--podroot=$cwd", - "--htmlroot=$cwd", - "--quiet", - ); -} + +my $debug = 0; +my $startdir = cwd(); +END { chdir($startdir) or die("Cannot change back to $startdir: $!"); } +my ($expect_raw, $args); +{ local $/; $expect_raw = ; } + +my $tdir = setup_testing_dir( { + debug => $debug, +} ); + +my $cwd = cwd(); + +$args = { + podstub => "crossref", + description => "cross references", + expect => $expect_raw, + p2h => { + podpath => 't:corpus/test.lib', + podroot => $cwd, + htmlroot => $cwd, + quiet => 1, + }, + debug => $debug, +}; +xconvert($args); + +done_testing; __DATA__ @@ -64,15 +76,15 @@ __DATA__

"non existent section"

-

var-copy

+

var-copy

-

"$"" in var-copy

+

"$"" in var-copy

var-copy

var-copy/$"

-

"First:" in podspec-copy

+

"First:" in podspec-copy

podspec-copy/First:

diff --git a/gnu/usr.bin/perl/ext/Pod-Html/t/htmlview.t b/gnu/usr.bin/perl/ext/Pod-Html/t/htmlview.t index 1e3a304b368..30c9b54de99 100644 --- a/gnu/usr.bin/perl/ext/Pod-Html/t/htmlview.t +++ b/gnu/usr.bin/perl/ext/Pod-Html/t/htmlview.t @@ -1,13 +1,38 @@ -#!/usr/bin/perl -w # -*- perl -*- - BEGIN { - require "./t/pod2html-lib.pl"; + use File::Spec::Functions ':ALL'; + @INC = map { rel2abs($_) } + (qw| ./lib ./t/lib ../../lib |); } use strict; -use Test::More tests => 1; - -convert_n_test("htmlview", "html rendering", "--quiet"); +use warnings; +use Test::More; +use Testing qw( setup_testing_dir xconvert ); +use Cwd; + +my $debug = 0; +my $startdir = cwd(); +END { chdir($startdir) or die("Cannot change back to $startdir: $!"); } +my ($expect_raw, $args); +{ local $/; $expect_raw = ; } + +my $tdir = setup_testing_dir( { + debug => $debug, +} ); + +$args = { + podstub => "htmlview", + description => "html rendering", + expect => $expect_raw, + p2h => { + podpath => 't', + quiet => 1, + }, +}; + +xconvert($args); + +done_testing; __DATA__ @@ -45,15 +70,15 @@ __DATA__

SYNOPSIS

-
    use My::Module;
+
use My::Module;
 
-    my $module = My::Module->new();
+my $module = My::Module->new();

DESCRIPTION

This is the description.

-
    Here is a verbatim section.
+
Here is a verbatim section.

This is some more regular text.

@@ -207,7 +232,7 @@ some text

This is an email link: mailto:foo@bar.com

-
    This is a link in a verbatim block <a href="http://perl.org"> Perl </a>
+
This is a link in a verbatim block <a href="http://perl.org"> Perl </a>

SEE ALSO

diff --git a/gnu/usr.bin/perl/ext/Pod-Html/t/pod2html-lib.pl b/gnu/usr.bin/perl/ext/Pod-Html/t/pod2html-lib.pl deleted file mode 100644 index dfe309ab84f..00000000000 --- a/gnu/usr.bin/perl/ext/Pod-Html/t/pod2html-lib.pl +++ /dev/null @@ -1,107 +0,0 @@ -require Cwd; -require Pod::Html; -require Config; -use File::Spec::Functions ':ALL'; -use File::Path 'remove_tree'; -use File::Copy; - -# make_test_dir and rem_test_dir dynamically create and remove testdir/test.lib. -# it is created dynamically to pass t/filenames.t, which does not allow '.'s in -# filenames as '.' is the directory separator on VMS. All tests that require -# testdir/test.lib to be present are skipped if test.lib cannot be created. -sub make_test_dir { - if (-d 'testdir/test.lib') { - warn "Directory 'test.lib' exists (it shouldn't yet) - removing it"; - rem_test_dir(); - } - mkdir('testdir/test.lib') or return "Could not make test.lib directory: $!\n"; - copy('testdir/perlpodspec-copy.pod', 'testdir/test.lib/podspec-copy.pod') - or return "Could not copy perlpodspec-copy: $!"; - copy('testdir/perlvar-copy.pod', 'testdir/test.lib/var-copy.pod') - or return "Could not copy perlvar-copy: $!"; - return 0; -} - -sub rem_test_dir { - return unless -d 'testdir/test.lib'; - remove_tree('testdir/test.lib') - or warn "Error removing temporary directory 'testdir/test.lib'"; -} - -sub convert_n_test { - my($podfile, $testname, @p2h_args) = @_; - - my $cwd = Pod::Html::_unixify( Cwd::cwd() ); - my ($vol, $dir) = splitpath($cwd, 1); - my @dirs = splitdir($dir); - shift @dirs if $dirs[0] eq ''; - my $relcwd = join '/', @dirs; - - my $new_dir = catdir $dir, "t"; - my $infile = catpath $vol, $new_dir, "$podfile.pod"; - my $outfile = catpath $vol, $new_dir, "$podfile.html"; - - # To add/modify args to p2h, use @p2h_args - Pod::Html::pod2html( - "--infile=$infile", - "--outfile=$outfile", - "--podpath=t", - "--htmlroot=/", - "--podroot=$cwd", - @p2h_args, - ); - - $cwd =~ s|\/$||; - - my ($expect, $result); - { - local $/; - # expected - $expect = ; - $expect =~ s/\[PERLADMIN\]/$Config::Config{perladmin}/; - $expect =~ s/\[RELCURRENTWORKINGDIRECTORY\]/$relcwd/g; - $expect =~ s/\[ABSCURRENTWORKINGDIRECTORY\]/$cwd/g; - if (ord("A") == 193) { # EBCDIC. - $expect =~ s/item_mat_3c_21_3e/item_mat_4c_5a_6e/; - } - if (Pod::Simple->VERSION > 3.28) { - $expect =~ s/\n\n(some html)/$1/m; - $expect =~ s{(TESTING FOR AND BEGIN

)\n\n}{$1}m; - } - - # result - open my $in, '<', $outfile or die "cannot open $outfile: $!"; - $result = <$in>; - close $in; - } - - my $diff = '/bin/diff'; - -x $diff or $diff = '/usr/bin/diff'; - -x $diff or $diff = undef; - my $diffopt = $diff ? $^O =~ m/(linux|darwin)/ ? '-u' : '-c' - : ''; - $diff = 'fc/n' if $^O =~ /^MSWin/; - $diff = 'differences' if $^O eq 'VMS'; - if ($diff) { - ok($expect eq $result, $testname) or do { - my $expectfile = "${podfile}_expected.tmp"; - open my $tmpfile, ">", $expectfile or die $!; - print $tmpfile $expect; - close $tmpfile; - open my $diff_fh, "-|", "$diff $diffopt $expectfile $outfile" or die $!; - print STDERR "# $_" while <$diff_fh>; - close $diff_fh; - unlink $expectfile; - }; - } else { - # This is fairly evil, but lets us get detailed failure modes - # anywhere that we've failed to identify a diff program. - is($expect, $result, $testname); - } - - # pod2html creates these - 1 while unlink $outfile; - 1 while unlink "pod2htmd.tmp"; -} - -1; diff --git a/gnu/usr.bin/perl/ext/Pod-Html/testdir/perlpodspec-copy.pod b/gnu/usr.bin/perl/ext/Pod-Html/testdir/perlpodspec-copy.pod deleted file mode 100644 index 593a4e21aad..00000000000 --- a/gnu/usr.bin/perl/ext/Pod-Html/testdir/perlpodspec-copy.pod +++ /dev/null @@ -1,1904 +0,0 @@ - -=head1 NAME - -perlpodspeccopy - Plain Old Documentation: format specification and notes - -=head1 DISCLAIMER - -This is a pod file used for testing purposes by the test suite, please -see L. - -=head1 DESCRIPTION - -This document is detailed notes on the Pod markup language. Most -people will only have to read L to know how to write -in Pod, but this document may answer some incidental questions to do -with parsing and rendering Pod. - -In this document, "must" / "must not", "should" / -"should not", and "may" have their conventional (cf. RFC 2119) -meanings: "X must do Y" means that if X doesn't do Y, it's against -this specification, and should really be fixed. "X should do Y" -means that it's recommended, but X may fail to do Y, if there's a -good reason. "X may do Y" is merely a note that X can do Y at -will (although it is up to the reader to detect any connotation of -"and I think it would be I if X did Y" versus "it wouldn't -really I me if X did Y"). - -Notably, when I say "the parser should do Y", the -parser may fail to do Y, if the calling application explicitly -requests that the parser I do Y. I often phrase this as -"the parser should, by default, do Y." This doesn't I -the parser to provide an option for turning off whatever -feature Y is (like expanding tabs in verbatim paragraphs), although -it implicates that such an option I be provided. - -=head1 Pod Definitions - -Pod is embedded in files, typically Perl source files -- although you -can write a file that's nothing but Pod. - -A B in a file consists of zero or more non-newline characters, -terminated by either a newline or the end of the file. - -A B is usually a platform-dependent concept, but -Pod parsers should understand it to mean any of CR (ASCII 13), LF -(ASCII 10), or a CRLF (ASCII 13 followed immediately by ASCII 10), in -addition to any other system-specific meaning. The first CR/CRLF/LF -sequence in the file may be used as the basis for identifying the -newline sequence for parsing the rest of the file. - -A B is a line consisting entirely of zero or more spaces -(ASCII 32) or tabs (ASCII 9), and terminated by a newline or end-of-file. -A B is a line containing one or more characters other -than space or tab (and terminated by a newline or end-of-file). - -(I Many older Pod parsers did not accept a line consisting of -spaces/tabs and then a newline as a blank line -- the only lines they -considered blank were lines consisting of I, -terminated by a newline.) - -B is used in this document as a blanket term for spaces, -tabs, and newline sequences. (By itself, this term usually refers -to literal whitespace. That is, sequences of whitespace characters -in Pod source, as opposed to "EE32>", which is a formatting -code that I a whitespace character.) - -A B is a module meant for parsing Pod (regardless of -whether this involves calling callbacks or building a parse tree or -directly formatting it). A B (or B) -is a module or program that converts Pod to some other format (HTML, -plaintext, TeX, PostScript, RTF). A B might be a -formatter or translator, or might be a program that does something -else with the Pod (like counting words, scanning for index points, -etc.). - -Pod content is contained in B. A Pod block starts with a -line that matches , and continues up to the next line -that matches C -- or up to the end of the file, if there is -no C line. - -=for comment - The current perlsyn says: - [beginquote] - Note that pod translators should look at only paragraphs beginning - with a pod directive (it makes parsing easier), whereas the compiler - actually knows to look for pod escapes even in the middle of a - paragraph. This means that the following secret stuff will be ignored - by both the compiler and the translators. - $a=3; - =secret stuff - warn "Neither POD nor CODE!?" - =cut back - print "got $a\n"; - You probably shouldn't rely upon the warn() being podded out forever. - Not all pod translators are well-behaved in this regard, and perhaps - the compiler will become pickier. - [endquote] - I think that those paragraphs should just be removed; paragraph-based - parsing seems to have been largely abandoned, because of the hassle - with non-empty blank lines messing up what people meant by "paragraph". - Even if the "it makes parsing easier" bit were especially true, - it wouldn't be worth the confusion of having perl and pod2whatever - actually disagree on what can constitute a Pod block. - -Within a Pod block, there are B. A Pod paragraph -consists of non-blank lines of text, separated by one or more blank -lines. - -For purposes of Pod processing, there are four types of paragraphs in -a Pod block: - -=over - -=item * - -A command paragraph (also called a "directive"). The first line of -this paragraph must match C. Command paragraphs are -typically one line, as in: - - =head1 NOTES - - =item * - -But they may span several (non-blank) lines: - - =for comment - Hm, I wonder what it would look like if - you tried to write a BNF for Pod from this. - - =head3 Dr. Strangelove, or: How I Learned to - Stop Worrying and Love the Bomb - -I command paragraphs allow formatting codes in their content -(i.e., after the part that matches C), as in: - - =head1 Did You Remember to C? - -In other words, the Pod processing handler for "head1" will apply the -same processing to "Did You Remember to CEuse strict;>?" that it -would to an ordinary paragraph -- i.e., formatting codes (like -"CE...>") are parsed and presumably formatted appropriately, and -whitespace in the form of literal spaces and/or tabs is not -significant. - -=item * - -A B. The first line of this paragraph must be a -literal space or tab, and this paragraph must not be inside a "=begin -I", ... "=end I" sequence unless -"I" begins with a colon (":"). That is, if a paragraph -starts with a literal space or tab, but I inside a -"=begin I", ... "=end I" region, then it's -a data paragraph, unless "I" begins with a colon. - -Whitespace I significant in verbatim paragraphs (although, in -processing, tabs are probably expanded). - -=item * - -An B. A paragraph is an ordinary paragraph -if its first line matches neither C nor -C, I if it's not inside a "=begin I", -... "=end I" sequence unless "I" begins with -a colon (":"). - -=item * - -A B. This is a paragraph that I inside a "=begin -I" ... "=end I" sequence where -"I" does I begin with a literal colon (":"). In -some sense, a data paragraph is not part of Pod at all (i.e., -effectively it's "out-of-band"), since it's not subject to most kinds -of Pod parsing; but it is specified here, since Pod -parsers need to be able to call an event for it, or store it in some -form in a parse tree, or at least just parse I it. - -=back - -For example: consider the following paragraphs: - - # <- that's the 0th column - - =head1 Foo - - Stuff - - $foo->bar - - =cut - -Here, "=head1 Foo" and "=cut" are command paragraphs because the first -line of each matches C. "I<[space][space]>$foo->bar" -is a verbatim paragraph, because its first line starts with a literal -whitespace character (and there's no "=begin"..."=end" region around). - -The "=begin I" ... "=end I" commands stop -paragraphs that they surround from being parsed as ordinary or verbatim -paragraphs, if I doesn't begin with a colon. This -is discussed in detail in the section -L=end" Regions>. - -=head1 Pod Commands - -This section is intended to supplement and clarify the discussion in -L. These are the currently recognized -Pod commands: - -=over - -=item "=head1", "=head2", "=head3", "=head4" - -This command indicates that the text in the remainder of the paragraph -is a heading. That text may contain formatting codes. Examples: - - =head1 Object Attributes - - =head3 What B to Do! - -=item "=pod" - -This command indicates that this paragraph begins a Pod block. (If we -are already in the middle of a Pod block, this command has no effect at -all.) If there is any text in this command paragraph after "=pod", -it must be ignored. Examples: - - =pod - - This is a plain Pod paragraph. - - =pod This text is ignored. - -=item "=cut" - -This command indicates that this line is the end of this previously -started Pod block. If there is any text after "=cut" on the line, it must be -ignored. Examples: - - =cut - - =cut The documentation ends here. - - =cut - # This is the first line of program text. - sub foo { # This is the second. - -It is an error to try to I a Pod block with a "=cut" command. In -that case, the Pod processor must halt parsing of the input file, and -must by default emit a warning. - -=item "=over" - -This command indicates that this is the start of a list/indent -region. If there is any text following the "=over", it must consist -of only a nonzero positive numeral. The semantics of this numeral is -explained in the L section, further -below. Formatting codes are not expanded. Examples: - - =over 3 - - =over 3.5 - - =over - -=item "=item" - -This command indicates that an item in a list begins here. Formatting -codes are processed. The semantics of the (optional) text in the -remainder of this paragraph are -explained in the L section, further -below. Examples: - - =item - - =item * - - =item * - - =item 14 - - =item 3. - - =item C<< $thing->stuff(I) >> - - =item For transporting us beyond seas to be tried for pretended - offenses - - =item He is at this time transporting large armies of foreign - mercenaries to complete the works of death, desolation and - tyranny, already begun with circumstances of cruelty and perfidy - scarcely paralleled in the most barbarous ages, and totally - unworthy the head of a civilized nation. - -=item "=back" - -This command indicates that this is the end of the region begun -by the most recent "=over" command. It permits no text after the -"=back" command. - -=item "=begin formatname" - -This marks the following paragraphs (until the matching "=end -formatname") as being for some special kind of processing. Unless -"formatname" begins with a colon, the contained non-command -paragraphs are data paragraphs. But if "formatname" I begin -with a colon, then non-command paragraphs are ordinary paragraphs -or data paragraphs. This is discussed in detail in the section -L=end" Regions>. - -It is advised that formatnames match the regexp -C. Implementors should anticipate future -expansion in the semantics and syntax of the first parameter -to "=begin"/"=end"/"=for". - -=item "=end formatname" - -This marks the end of the region opened by the matching -"=begin formatname" region. If "formatname" is not the formatname -of the most recent open "=begin formatname" region, then this -is an error, and must generate an error message. This -is discussed in detail in the section -L=end" Regions>. - -=item "=for formatname text..." - -This is synonymous with: - - =begin formatname - - text... - - =end formatname - -That is, it creates a region consisting of a single paragraph; that -paragraph is to be treated as a normal paragraph if "formatname" -begins with a ":"; if "formatname" I begin with a colon, -then "text..." will constitute a data paragraph. There is no way -to use "=for formatname text..." to express "text..." as a verbatim -paragraph. - -=item "=encoding encodingname" - -This command, which should occur early in the document (at least -before any non-US-ASCII data!), declares that this document is -encoded in the encoding I, which must be -an encoding name that L recognizes. (Encode's list -of supported encodings, in L, is useful here.) -If the Pod parser cannot decode the declared encoding, it -should emit a warning and may abort parsing the document -altogether. - -A document having more than one "=encoding" line should be -considered an error. Pod processors may silently tolerate this if -the not-first "=encoding" lines are just duplicates of the -first one (e.g., if there's a "=encoding utf8" line, and later on -another "=encoding utf8" line). But Pod processors should complain if -there are contradictory "=encoding" lines in the same document -(e.g., if there is a "=encoding utf8" early in the document and -"=encoding big5" later). Pod processors that recognize BOMs -may also complain if they see an "=encoding" line -that contradicts the BOM (e.g., if a document with a UTF-16LE -BOM has an "=encoding shiftjis" line). - -=back - -If a Pod processor sees any command other than the ones listed -above (like "=head", or "=haed1", or "=stuff", or "=cuttlefish", -or "=w123"), that processor must by default treat this as an -error. It must not process the paragraph beginning with that -command, must by default warn of this as an error, and may -abort the parse. A Pod parser may allow a way for particular -applications to add to the above list of known commands, and to -stipulate, for each additional command, whether formatting -codes should be processed. - -Future versions of this specification may add additional -commands. - - - -=head1 Pod Formatting Codes - -(Note that in previous drafts of this document and of perlpod, -formatting codes were referred to as "interior sequences", and -this term may still be found in the documentation for Pod parsers, -and in error messages from Pod processors.) - -There are two syntaxes for formatting codes: - -=over - -=item * - -A formatting code starts with a capital letter (just US-ASCII [A-Z]) -followed by a "<", any number of characters, and ending with the first -matching ">". Examples: - - That's what I think! - - What's C for? - - X and C Under Different Operating Systems> - -=item * - -A formatting code starts with a capital letter (just US-ASCII [A-Z]) -followed by two or more "<"'s, one or more whitespace characters, -any number of characters, one or more whitespace characters, -and ending with the first matching sequence of two or more ">"'s, where -the number of ">"'s equals the number of "<"'s in the opening of this -formatting code. Examples: - - That's what I<< you >> think! - - C<<< open(X, ">>thing.dat") || die $! >>> - - B<< $foo->bar(); >> - -With this syntax, the whitespace character(s) after the "CE<<" -and before the ">>" (or whatever letter) are I renderable -- they -do not signify whitespace, are merely part of the formatting codes -themselves. That is, these are all synonymous: - - C - C<< thing >> - C<< thing >> - C<<< thing >>> - C<<<< - thing - >>>> - -and so on. - -=back - -In parsing Pod, a notably tricky part is the correct parsing of -(potentially nested!) formatting codes. Implementors should -consult the code in the C routine in Pod::Parser as an -example of a correct implementation. - -=over - -=item CtextE> -- italic text - -See the brief discussion in L. - -=item CtextE> -- bold text - -See the brief discussion in L. - -=item CcodeE> -- code text - -See the brief discussion in L. - -=item CfilenameE> -- style for filenames - -See the brief discussion in L. - -=item Ctopic nameE> -- an index entry - -See the brief discussion in L. - -This code is unusual in that most formatters completely discard -this code and its content. Other formatters will render it with -invisible codes that can be used in building an index of -the current document. - -=item CE> -- a null (zero-effect) formatting code - -Discussed briefly in L. - -This code is unusual is that it should have no content. That is, -a processor may complain if it sees CpotatoesE>. Whether -or not it complains, the I text should ignored. - -=item CnameE> -- a hyperlink - -The complicated syntaxes of this code are discussed at length in -L, and implementation details are -discussed below, in L...E Codes">. Parsing the -contents of LEcontent> is tricky. Notably, the content has to be -checked for whether it looks like a URL, or whether it has to be split -on literal "|" and/or "/" (in the right order!), and so on, -I EE...> codes are resolved. - -=item CescapeE> -- a character escape - -See L, and several points in -L. - -=item CtextE> -- text contains non-breaking spaces - -This formatting code is syntactically simple, but semantically -complex. What it means is that each space in the printable -content of this code signifies a non-breaking space. - -Consider: - - C<$x ? $y : $z> - - S> - -Both signify the monospace (c[ode] style) text consisting of -"$x", one space, "?", one space, ":", one space, "$z". The -difference is that in the latter, with the S code, those spaces -are not "normal" spaces, but instead are non-breaking spaces. - -=back - - -If a Pod processor sees any formatting code other than the ones -listed above (as in "NE...>", or "QE...>", etc.), that -processor must by default treat this as an error. -A Pod parser may allow a way for particular -applications to add to the above list of known formatting codes; -a Pod parser might even allow a way to stipulate, for each additional -command, whether it requires some form of special processing, as -LE...> does. - -Future versions of this specification may add additional -formatting codes. - -Historical note: A few older Pod processors would not see a ">" as -closing a "CE" code, if the ">" was immediately preceded by -a "-". This was so that this: - - C<$foo->bar> - -would parse as equivalent to this: - - C<$foo-Ebar> - -instead of as equivalent to a "C" formatting code containing -only "$foo-", and then a "bar>" outside the "C" formatting code. This -problem has since been solved by the addition of syntaxes like this: - - C<< $foo->bar >> - -Compliant parsers must not treat "->" as special. - -Formatting codes absolutely cannot span paragraphs. If a code is -opened in one paragraph, and no closing code is found by the end of -that paragraph, the Pod parser must close that formatting code, -and should complain (as in "Unterminated I code in the paragraph -starting at line 123: 'Time objects are not...'"). So these -two paragraphs: - - I - -...must I be parsed as two paragraphs in italics (with the I -code starting in one paragraph and starting in another.) Instead, -the first paragraph should generate a warning, but that aside, the -above code must parse as if it were: - - I - - Don't make me say it again!E - -(In SGMLish jargon, all Pod commands are like block-level -elements, whereas all Pod formatting codes are like inline-level -elements.) - - - -=head1 Notes on Implementing Pod Processors - -The following is a long section of miscellaneous requirements -and suggestions to do with Pod processing. - -=over - -=item * - -Pod formatters should tolerate lines in verbatim blocks that are of -any length, even if that means having to break them (possibly several -times, for very long lines) to avoid text running off the side of the -page. Pod formatters may warn of such line-breaking. Such warnings -are particularly appropriate for lines are over 100 characters long, which -are usually not intentional. - -=item * - -Pod parsers must recognize I of the three well-known newline -formats: CR, LF, and CRLF. See L. - -=item * - -Pod parsers should accept input lines that are of any length. - -=item * - -Since Perl recognizes a Unicode Byte Order Mark at the start of files -as signaling that the file is Unicode encoded as in UTF-16 (whether -big-endian or little-endian) or UTF-8, Pod parsers should do the -same. Otherwise, the character encoding should be understood as -being UTF-8 if the first highbit byte sequence in the file seems -valid as a UTF-8 sequence, or otherwise as Latin-1. - -Future versions of this specification may specify -how Pod can accept other encodings. Presumably treatment of other -encodings in Pod parsing would be as in XML parsing: whatever the -encoding declared by a particular Pod file, content is to be -stored in memory as Unicode characters. - -=item * - -The well known Unicode Byte Order Marks are as follows: if the -file begins with the two literal byte values 0xFE 0xFF, this is -the BOM for big-endian UTF-16. If the file begins with the two -literal byte value 0xFF 0xFE, this is the BOM for little-endian -UTF-16. If the file begins with the three literal byte values -0xEF 0xBB 0xBF, this is the BOM for UTF-8. - -=for comment - use bytes; print map sprintf(" 0x%02X", ord $_), split '', "\x{feff}"; - 0xEF 0xBB 0xBF - -=for comment - If toke.c is modified to support UTF-32, add mention of those here. - -=item * - -A naive but sufficient heuristic for testing the first highbit -byte-sequence in a BOM-less file (whether in code or in Pod!), to see -whether that sequence is valid as UTF-8 (RFC 2279) is to check whether -that the first byte in the sequence is in the range 0xC0 - 0xFD -I whether the next byte is in the range -0x80 - 0xBF. If so, the parser may conclude that this file is in -UTF-8, and all highbit sequences in the file should be assumed to -be UTF-8. Otherwise the parser should treat the file as being -in Latin-1. In the unlikely circumstance that the first highbit -sequence in a truly non-UTF-8 file happens to appear to be UTF-8, one -can cater to our heuristic (as well as any more intelligent heuristic) -by prefacing that line with a comment line containing a highbit -sequence that is clearly I valid as UTF-8. A line consisting -of simply "#", an e-acute, and any non-highbit byte, -is sufficient to establish this file's encoding. - -=for comment - If/WHEN some brave soul makes these heuristics into a generic - text-file class (or PerlIO layer?), we can presumably delete - mention of these icky details from this file, and can instead - tell people to just use appropriate class/layer. - Auto-recognition of newline sequences would be another desirable - feature of such a class/layer. - HINT HINT HINT. - -=for comment - "The probability that a string of characters - in any other encoding appears as valid UTF-8 is low" - RFC2279 - -=item * - -This document's requirements and suggestions about encodings -do not apply to Pod processors running on non-ASCII platforms, -notably EBCDIC platforms. - -=item * - -Pod processors must treat a "=for [label] [content...]" paragraph as -meaning the same thing as a "=begin [label]" paragraph, content, and -an "=end [label]" paragraph. (The parser may conflate these two -constructs, or may leave them distinct, in the expectation that the -formatter will nevertheless treat them the same.) - -=item * - -When rendering Pod to a format that allows comments (i.e., to nearly -any format other than plaintext), a Pod formatter must insert comment -text identifying its name and version number, and the name and -version numbers of any modules it might be using to process the Pod. -Minimal examples: - - %% POD::Pod2PS v3.14159, using POD::Parser v1.92 - - - - {\doccomm generated by Pod::Tree::RTF 3.14159 using Pod::Tree 1.08} - - .\" Pod::Man version 3.14159, using POD::Parser version 1.92 - -Formatters may also insert additional comments, including: the -release date of the Pod formatter program, the contact address for -the author(s) of the formatter, the current time, the name of input -file, the formatting options in effect, version of Perl used, etc. - -Formatters may also choose to note errors/warnings as comments, -besides or instead of emitting them otherwise (as in messages to -STDERR, or Cing). - -=item * - -Pod parsers I emit warnings or error messages ("Unknown E code -EEzslig>!") to STDERR (whether through printing to STDERR, or -Cing/Cing, or Cing/Cing), but I allow -suppressing all such STDERR output, and instead allow an option for -reporting errors/warnings -in some other way, whether by triggering a callback, or noting errors -in some attribute of the document object, or some similarly unobtrusive -mechanism -- or even by appending a "Pod Errors" section to the end of -the parsed form of the document. - -=item * - -In cases of exceptionally aberrant documents, Pod parsers may abort the -parse. Even then, using Cing/Cing is to be avoided; where -possible, the parser library may simply close the input file -and add text like "*** Formatting Aborted ***" to the end of the -(partial) in-memory document. - -=item * - -In paragraphs where formatting codes (like EE...>, BE...>) -are understood (i.e., I verbatim paragraphs, but I -ordinary paragraphs, and command paragraphs that produce renderable -text, like "=head1"), literal whitespace should generally be considered -"insignificant", in that one literal space has the same meaning as any -(nonzero) number of literal spaces, literal newlines, and literal tabs -(as long as this produces no blank lines, since those would terminate -the paragraph). Pod parsers should compact literal whitespace in each -processed paragraph, but may provide an option for overriding this -(since some processing tasks do not require it), or may follow -additional special rules (for example, specially treating -period-space-space or period-newline sequences). - -=item * - -Pod parsers should not, by default, try to coerce apostrophe (') and -quote (") into smart quotes (little 9's, 66's, 99's, etc), nor try to -turn backtick (`) into anything else but a single backtick character -(distinct from an open quote character!), nor "--" into anything but -two minus signs. They I do any of those things to text -in CE...> formatting codes, and never I to text in verbatim -paragraphs. - -=item * - -When rendering Pod to a format that has two kinds of hyphens (-), one -that's a non-breaking hyphen, and another that's a breakable hyphen -(as in "object-oriented", which can be split across lines as -"object-", newline, "oriented"), formatters are encouraged to -generally translate "-" to non-breaking hyphen, but may apply -heuristics to convert some of these to breaking hyphens. - -=item * - -Pod formatters should make reasonable efforts to keep words of Perl -code from being broken across lines. For example, "Foo::Bar" in some -formatting systems is seen as eligible for being broken across lines -as "Foo::" newline "Bar" or even "Foo::-" newline "Bar". This should -be avoided where possible, either by disabling all line-breaking in -mid-word, or by wrapping particular words with internal punctuation -in "don't break this across lines" codes (which in some formats may -not be a single code, but might be a matter of inserting non-breaking -zero-width spaces between every pair of characters in a word.) - -=item * - -Pod parsers should, by default, expand tabs in verbatim paragraphs as -they are processed, before passing them to the formatter or other -processor. Parsers may also allow an option for overriding this. - -=item * - -Pod parsers should, by default, remove newlines from the end of -ordinary and verbatim paragraphs before passing them to the -formatter. For example, while the paragraph you're reading now -could be considered, in Pod source, to end with (and contain) -the newline(s) that end it, it should be processed as ending with -(and containing) the period character that ends this sentence. - -=item * - -Pod parsers, when reporting errors, should make some effort to report -an approximate line number ("Nested EE>'s in Paragraph #52, near -line 633 of Thing/Foo.pm!"), instead of merely noting the paragraph -number ("Nested EE>'s in Paragraph #52 of Thing/Foo.pm!"). Where -this is problematic, the paragraph number should at least be -accompanied by an excerpt from the paragraph ("Nested EE>'s in -Paragraph #52 of Thing/Foo.pm, which begins 'Read/write accessor for -the CEinterest rate> attribute...'"). - -=item * - -Pod parsers, when processing a series of verbatim paragraphs one -after another, should consider them to be one large verbatim -paragraph that happens to contain blank lines. I.e., these two -lines, which have a blank line between them: - - use Foo; - - print Foo->VERSION - -should be unified into one paragraph ("\tuse Foo;\n\n\tprint -Foo->VERSION") before being passed to the formatter or other -processor. Parsers may also allow an option for overriding this. - -While this might be too cumbersome to implement in event-based Pod -parsers, it is straightforward for parsers that return parse trees. - -=item * - -Pod formatters, where feasible, are advised to avoid splitting short -verbatim paragraphs (under twelve lines, say) across pages. - -=item * - -Pod parsers must treat a line with only spaces and/or tabs on it as a -"blank line" such as separates paragraphs. (Some older parsers -recognized only two adjacent newlines as a "blank line" but would not -recognize a newline, a space, and a newline, as a blank line. This -is noncompliant behavior.) - -=item * - -Authors of Pod formatters/processors should make every effort to -avoid writing their own Pod parser. There are already several in -CPAN, with a wide range of interface styles -- and one of them, -Pod::Parser, comes with modern versions of Perl. - -=item * - -Characters in Pod documents may be conveyed either as literals, or by -number in EEn> codes, or by an equivalent mnemonic, as in -EEeacute> which is exactly equivalent to EE233>. - -Characters in the range 32-126 refer to those well known US-ASCII -characters (also defined there by Unicode, with the same meaning), -which all Pod formatters must render faithfully. Characters -in the ranges 0-31 and 127-159 should not be used (neither as -literals, nor as EEnumber> codes), except for the -literal byte-sequences for newline (13, 13 10, or 10), and tab (9). - -Characters in the range 160-255 refer to Latin-1 characters (also -defined there by Unicode, with the same meaning). Characters above -255 should be understood to refer to Unicode characters. - -=item * - -Be warned -that some formatters cannot reliably render characters outside 32-126; -and many are able to handle 32-126 and 160-255, but nothing above -255. - -=item * - -Besides the well-known "EElt>" and "EEgt>" codes for -less-than and greater-than, Pod parsers must understand "EEsol>" -for "/" (solidus, slash), and "EEverbar>" for "|" (vertical bar, -pipe). Pod parsers should also understand "EElchevron>" and -"EErchevron>" as legacy codes for characters 171 and 187, i.e., -"left-pointing double angle quotation mark" = "left pointing -guillemet" and "right-pointing double angle quotation mark" = "right -pointing guillemet". (These look like little "<<" and ">>", and they -are now preferably expressed with the HTML/XHTML codes "EElaquo>" -and "EEraquo>".) - -=item * - -Pod parsers should understand all "EEhtml>" codes as defined -in the entity declarations in the most recent XHTML specification at -C. Pod parsers must understand at least the entities -that define characters in the range 160-255 (Latin-1). Pod parsers, -when faced with some unknown "EEI>" code, -shouldn't simply replace it with nullstring (by default, at least), -but may pass it through as a string consisting of the literal characters -E, less-than, I, greater-than. Or Pod parsers may offer the -alternative option of processing such unknown -"EEI>" codes by firing an event especially -for such codes, or by adding a special node-type to the in-memory -document tree. Such "EEI>" may have special meaning -to some processors, or some processors may choose to add them to -a special error report. - -=item * - -Pod parsers must also support the XHTML codes "EEquot>" for -character 34 (doublequote, "), "EEamp>" for character 38 -(ampersand, &), and "EEapos>" for character 39 (apostrophe, '). - -=item * - -Note that in all cases of "EEwhatever>", I (whether -an htmlname, or a number in any base) must consist only of -alphanumeric characters -- that is, I must watch -C. So "EE 0 1 2 3 >" is invalid, because -it contains spaces, which aren't alphanumeric characters. This -presumably does not I special treatment by a Pod processor; -" 0 1 2 3 " doesn't look like a number in any base, so it would -presumably be looked up in the table of HTML-like names. Since -there isn't (and cannot be) an HTML-like entity called " 0 1 2 3 ", -this will be treated as an error. However, Pod processors may -treat "EE 0 1 2 3 >" or "EEe-acute>" as I -invalid, potentially earning a different error message than the -error message (or warning, or event) generated by a merely unknown -(but theoretically valid) htmlname, as in "EEqacute>" -[sic]. However, Pod parsers are not required to make this -distinction. - -=item * - -Note that EEnumber> I be interpreted as simply -"codepoint I in the current/native character set". It always -means only "the character represented by codepoint I in -Unicode." (This is identical to the semantics of &#I; in XML.) - -This will likely require many formatters to have tables mapping from -treatable Unicode codepoints (such as the "\xE9" for the e-acute -character) to the escape sequences or codes necessary for conveying -such sequences in the target output format. A converter to *roff -would, for example know that "\xE9" (whether conveyed literally, or via -a EE...> sequence) is to be conveyed as "e\\*'". -Similarly, a program rendering Pod in a Mac OS application window, would -presumably need to know that "\xE9" maps to codepoint 142 in MacRoman -encoding that (at time of writing) is native for Mac OS. Such -Unicode2whatever mappings are presumably already widely available for -common output formats. (Such mappings may be incomplete! Implementers -are not expected to bend over backwards in an attempt to render -Cherokee syllabics, Etruscan runes, Byzantine musical symbols, or any -of the other weird things that Unicode can encode.) And -if a Pod document uses a character not found in such a mapping, the -formatter should consider it an unrenderable character. - -=item * - -If, surprisingly, the implementor of a Pod formatter can't find a -satisfactory pre-existing table mapping from Unicode characters to -escapes in the target format (e.g., a decent table of Unicode -characters to *roff escapes), it will be necessary to build such a -table. If you are in this circumstance, you should begin with the -characters in the range 0x00A0 - 0x00FF, which is mostly the heavily -used accented characters. Then proceed (as patience permits and -fastidiousness compels) through the characters that the (X)HTML -standards groups judged important enough to merit mnemonics -for. These are declared in the (X)HTML specifications at the -www.W3.org site. At time of writing (September 2001), the most recent -entity declaration files are: - - http://www.w3.org/TR/xhtml1/DTD/xhtml-lat1.ent - http://www.w3.org/TR/xhtml1/DTD/xhtml-special.ent - http://www.w3.org/TR/xhtml1/DTD/xhtml-symbol.ent - -Then you can progress through any remaining notable Unicode characters -in the range 0x2000-0x204D (consult the character tables at -www.unicode.org), and whatever else strikes your fancy. For example, -in F, there is the entry: - - - -While the mapping "infin" to the character "\x{221E}" will (hopefully) -have been already handled by the Pod parser, the presence of the -character in this file means that it's reasonably important enough to -include in a formatter's table that maps from notable Unicode characters -to the codes necessary for rendering them. So for a Unicode-to-*roff -mapping, for example, this would merit the entry: - - "\x{221E}" => '\(in', - -It is eagerly hoped that in the future, increasing numbers of formats -(and formatters) will support Unicode characters directly (as (X)HTML -does with C<∞>, C<∞>, or C<∞>), reducing the need -for idiosyncratic mappings of Unicode-to-I. - -=item * - -It is up to individual Pod formatter to display good judgement when -confronted with an unrenderable character (which is distinct from an -unknown EEthing> sequence that the parser couldn't resolve to -anything, renderable or not). It is good practice to map Latin letters -with diacritics (like "EEeacute>"/"EE233>") to the corresponding -unaccented US-ASCII letters (like a simple character 101, "e"), but -clearly this is often not feasible, and an unrenderable character may -be represented as "?", or the like. In attempting a sane fallback -(as from EE233> to "e"), Pod formatters may use the -%Latin1Code_to_fallback table in L, or -L, if available. - -For example, this Pod text: - - magic is enabled if you set C<$Currency> to 'E'. - -may be rendered as: -"magic is enabled if you set C<$Currency> to 'I'" or as -"magic is enabled if you set C<$Currency> to 'B<[euro]>'", or as -"magic is enabled if you set C<$Currency> to '[x20AC]', etc. - -A Pod formatter may also note, in a comment or warning, a list of what -unrenderable characters were encountered. - -=item * - -EE...> may freely appear in any formatting code (other than -in another EE...> or in an ZE>). That is, "XEThe -EEeuro>1,000,000 Solution>" is valid, as is "LEThe -EEeuro>1,000,000 Solution|Million::Euros>". - -=item * - -Some Pod formatters output to formats that implement non-breaking -spaces as an individual character (which I'll call "NBSP"), and -others output to formats that implement non-breaking spaces just as -spaces wrapped in a "don't break this across lines" code. Note that -at the level of Pod, both sorts of codes can occur: Pod can contain a -NBSP character (whether as a literal, or as a "EE160>" or -"EEnbsp>" code); and Pod can contain "SEfoo -IEbarE baz>" codes, where "mere spaces" (character 32) in -such codes are taken to represent non-breaking spaces. Pod -parsers should consider supporting the optional parsing of "SEfoo -IEbarE baz>" as if it were -"fooIIEbarEIbaz", and, going the other way, the -optional parsing of groups of words joined by NBSP's as if each group -were in a SE...> code, so that formatters may use the -representation that maps best to what the output format demands. - -=item * - -Some processors may find that the C...E> code is easiest to -implement by replacing each space in the parse tree under the content -of the S, with an NBSP. But note: the replacement should apply I to -spaces in I text, but I to spaces in I text. (This -distinction may or may not be evident in the particular tree/event -model implemented by the Pod parser.) For example, consider this -unusual case: - - S> - -This means that the space in the middle of the visible link text must -not be broken across lines. In other words, it's the same as this: - - L<"AutoloadedE<160>Functions"/Autoloaded Functions> - -However, a misapplied space-to-NBSP replacement could (wrongly) -produce something equivalent to this: - - L<"AutoloadedE<160>Functions"/AutoloadedE<160>Functions> - -...which is almost definitely not going to work as a hyperlink (assuming -this formatter outputs a format supporting hypertext). - -Formatters may choose to just not support the S format code, -especially in cases where the output format simply has no NBSP -character/code and no code for "don't break this stuff across lines". - -=item * - -Besides the NBSP character discussed above, implementors are reminded -of the existence of the other "special" character in Latin-1, the -"soft hyphen" character, also known as "discretionary hyphen", -i.e. C173E> = C0xADE> = -CshyE>). This character expresses an optional hyphenation -point. That is, it normally renders as nothing, but may render as a -"-" if a formatter breaks the word at that point. Pod formatters -should, as appropriate, do one of the following: 1) render this with -a code with the same meaning (e.g., "\-" in RTF), 2) pass it through -in the expectation that the formatter understands this character as -such, or 3) delete it. - -For example: - - sigEaction - manuEscript - JarkEko HieEtaEnieEmi - -These signal to a formatter that if it is to hyphenate "sigaction" -or "manuscript", then it should be done as -"sig-I<[linebreak]>action" or "manu-I<[linebreak]>script" -(and if it doesn't hyphenate it, then the CshyE> doesn't -show up at all). And if it is -to hyphenate "Jarkko" and/or "Hietaniemi", it can do -so only at the points where there is a CshyE> code. - -In practice, it is anticipated that this character will not be used -often, but formatters should either support it, or delete it. - -=item * - -If you think that you want to add a new command to Pod (like, say, a -"=biblio" command), consider whether you could get the same -effect with a for or begin/end sequence: "=for biblio ..." or "=begin -biblio" ... "=end biblio". Pod processors that don't understand -"=for biblio", etc, will simply ignore it, whereas they may complain -loudly if they see "=biblio". - -=item * - -Throughout this document, "Pod" has been the preferred spelling for -the name of the documentation format. One may also use "POD" or -"pod". For the documentation that is (typically) in the Pod -format, you may use "pod", or "Pod", or "POD". Understanding these -distinctions is useful; but obsessing over how to spell them, usually -is not. - -=back - - - - - -=head1 About LE...E Codes - -As you can tell from a glance at L, the LE...> -code is the most complex of the Pod formatting codes. The points below -will hopefully clarify what it means and how processors should deal -with it. - -=over - -=item * - -In parsing an LE...> code, Pod parsers must distinguish at least -four attributes: - -=over - -=item First: - -The link-text. If there is none, this must be undef. (E.g., in -"LEPerl Functions|perlfunc>", the link-text is "Perl Functions". -In "LETime::HiRes>" and even "LE|Time::HiRes>", there is no -link text. Note that link text may contain formatting.) - -=item Second: - -The possibly inferred link-text -- i.e., if there was no real link -text, then this is the text that we'll infer in its place. (E.g., for -"LEGetopt::Std>", the inferred link text is "Getopt::Std".) - -=item Third: - -The name or URL, or undef if none. (E.g., in "LEPerl -Functions|perlfunc>", the name -- also sometimes called the page -- -is "perlfunc". In "LE/CAVEATS>", the name is undef.) - -=item Fourth: - -The section (AKA "item" in older perlpods), or undef if none. E.g., -in "LEGetopt::Std/DESCRIPTIONE", "DESCRIPTION" is the section. (Note -that this is not the same as a manpage section like the "5" in "man 5 -crontab". "Section Foo" in the Pod sense means the part of the text -that's introduced by the heading or item whose text is "Foo".) - -=back - -Pod parsers may also note additional attributes including: - -=over - -=item Fifth: - -A flag for whether item 3 (if present) is a URL (like -"http://lists.perl.org" is), in which case there should be no section -attribute; a Pod name (like "perldoc" and "Getopt::Std" are); or -possibly a man page name (like "crontab(5)" is). - -=item Sixth: - -The raw original LE...> content, before text is split on -"|", "/", etc, and before EE...> codes are expanded. - -=back - -(The above were numbered only for concise reference below. It is not -a requirement that these be passed as an actual list or array.) - -For example: - - L - => undef, # link text - "Foo::Bar", # possibly inferred link text - "Foo::Bar", # name - undef, # section - 'pod', # what sort of link - "Foo::Bar" # original content - - L - => "Perlport's section on NL's", # link text - "Perlport's section on NL's", # possibly inferred link text - "perlport", # name - "Newlines", # section - 'pod', # what sort of link - "Perlport's section on NL's|perlport/Newlines" # orig. content - - L - => undef, # link text - '"Newlines" in perlport', # possibly inferred link text - "perlport", # name - "Newlines", # section - 'pod', # what sort of link - "perlport/Newlines" # original content - - L - => undef, # link text - '"DESCRIPTION" in crontab(5)', # possibly inferred link text - "crontab(5)", # name - "DESCRIPTION", # section - 'man', # what sort of link - 'crontab(5)/"DESCRIPTION"' # original content - - L - => undef, # link text - '"Object Attributes"', # possibly inferred link text - undef, # name - "Object Attributes", # section - 'pod', # what sort of link - "/Object Attributes" # original content - - L - => undef, # link text - "http://www.perl.org/", # possibly inferred link text - "http://www.perl.org/", # name - undef, # section - 'url', # what sort of link - "http://www.perl.org/" # original content - -Note that you can distinguish URL-links from anything else by the -fact that they match C. So -Chttp://www.perl.comE> is a URL, but -CHTTP::ResponseE> isn't. - -=item * - -In case of LE...> codes with no "text|" part in them, -older formatters have exhibited great variation in actually displaying -the link or cross reference. For example, LEcrontab(5)> would render -as "the C manpage", or "in the C manpage" -or just "C". - -Pod processors must now treat "text|"-less links as follows: - - L => L - L => L<"section"|/section> - L => L<"section" in name|name/section> - -=item * - -Note that section names might contain markup. I.e., if a section -starts with: - - =head2 About the C<-M> Operator - -or with: - - =item About the C<-M> Operator - -then a link to it would look like this: - - L Operator> - -Formatters may choose to ignore the markup for purposes of resolving -the link and use only the renderable characters in the section name, -as in: - -

About the -M - Operator

- - ... - - About the -M - Operator" in somedoc - -=item * - -Previous versions of perlpod distinguished Cname/"section"E> -links from Cname/itemE> links (and their targets). These -have been merged syntactically and semantically in the current -specification, and I
can refer either to a "=headI Heading -Content" command or to a "=item Item Content" command. This -specification does not specify what behavior should be in the case -of a given document having several things all seeming to produce the -same I
identifier (e.g., in HTML, several things all producing -the same I in ... -elements). Where Pod processors can control this behavior, they should -use the first such anchor. That is, CFoo/BarE> refers to the -I "Bar" section in Foo. - -But for some processors/formats this cannot be easily controlled; as -with the HTML example, the behavior of multiple ambiguous -... is most easily just left up to -browsers to decide. - -=item * - -Authors wanting to link to a particular (absolute) URL, must do so -only with "LEscheme:...>" codes (like -LEhttp://www.perl.org>), and must not attempt "LESome Site -Name|scheme:...>" codes. This restriction avoids many problems -in parsing and rendering LE...> codes. - -=item * - -In a Ctext|...E> code, text may contain formatting codes -for formatting or for EE...> escapes, as in: - - Lstuff>|...> - -For C...E> codes without a "name|" part, only -C...E> and CE> codes may occur -- no -other formatting codes. That is, authors should not use -"CBEFoo::BarEE>". - -Note, however, that formatting codes and ZE>'s can occur in any -and all parts of an LE...> (i.e., in I, I
, I, -and I). - -Authors must not nest LE...> codes. For example, "LEThe -LEFoo::Bar> man page>" should be treated as an error. - -=item * - -Note that Pod authors may use formatting codes inside the "text" -part of "LEtext|name>" (and so on for LEtext|/"sec">). - -In other words, this is valid: - - Go read L|perlvar-copy/"$."> - -Some output formats that do allow rendering "LE...>" codes as -hypertext, might not allow the link-text to be formatted; in -that case, formatters will have to just ignore that formatting. - -=item * - -At time of writing, CnameE> values are of two types: -either the name of a Pod page like CFoo::BarE> (which -might be a real Perl module or program in an @INC / PATH -directory, or a .pod file in those places); or the name of a UNIX -man page, like Ccrontab(5)E>. In theory, CchmodE> -in ambiguous between a Pod page called "chmod", or the Unix man page -"chmod" (in whatever man-section). However, the presence of a string -in parens, as in "crontab(5)", is sufficient to signal that what -is being discussed is not a Pod page, and so is presumably a -UNIX man page. The distinction is of no importance to many -Pod processors, but some processors that render to hypertext formats -may need to distinguish them in order to know how to render a -given CfooE> code. - -=item * - -Previous versions of perlpod allowed for a CsectionE> syntax -(as in CObject AttributesE>), which was not easily distinguishable -from CnameE> syntax. This syntax is no longer in the -specification, and has been replaced by the C"section"E> syntax -(where the quotes were formerly optional). Pod parsers should tolerate -the CsectionE> syntax, for a while at least. The suggested -heuristic for distinguishing CsectionE> from CnameE> -is that if it contains any whitespace, it's a I
. Pod processors -may warn about this being deprecated syntax. - -=back - -=head1 About =over...=back Regions - -"=over"..."=back" regions are used for various kinds of list-like -structures. (I use the term "region" here simply as a collective -term for everything from the "=over" to the matching "=back".) - -=over - -=item * - -The non-zero numeric I in "=over I" ... -"=back" is used for giving the formatter a clue as to how many -"spaces" (ems, or roughly equivalent units) it should tab over, -although many formatters will have to convert this to an absolute -measurement that may not exactly match with the size of spaces (or M's) -in the document's base font. Other formatters may have to completely -ignore the number. The lack of any explicit I parameter is -equivalent to an I value of 4. Pod processors may -complain if I is present but is not a positive number -matching C. - -=item * - -Authors of Pod formatters are reminded that "=over" ... "=back" may -map to several different constructs in your output format. For -example, in converting Pod to (X)HTML, it can map to any of -
    ...
,
    ...
,
...
, or -
...
. Similarly, "=item" can map to
  • or -
    . - -=item * - -Each "=over" ... "=back" region should be one of the following: - -=over - -=item * - -An "=over" ... "=back" region containing only "=item *" commands, -each followed by some number of ordinary/verbatim paragraphs, other -nested "=over" ... "=back" regions, "=for..." paragraphs, and -"=begin"..."=end" regions. - -(Pod processors must tolerate a bare "=item" as if it were "=item -*".) Whether "*" is rendered as a literal asterisk, an "o", or as -some kind of real bullet character, is left up to the Pod formatter, -and may depend on the level of nesting. - -=item * - -An "=over" ... "=back" region containing only -C paragraphs, each one (or each group of them) -followed by some number of ordinary/verbatim paragraphs, other nested -"=over" ... "=back" regions, "=for..." paragraphs, and/or -"=begin"..."=end" codes. Note that the numbers must start at 1 -in each section, and must proceed in order and without skipping -numbers. - -(Pod processors must tolerate lines like "=item 1" as if they were -"=item 1.", with the period.) - -=item * - -An "=over" ... "=back" region containing only "=item [text]" -commands, each one (or each group of them) followed by some number of -ordinary/verbatim paragraphs, other nested "=over" ... "=back" -regions, or "=for..." paragraphs, and "=begin"..."=end" regions. - -The "=item [text]" paragraph should not match -C or C, nor should it -match just C. - -=item * - -An "=over" ... "=back" region containing no "=item" paragraphs at -all, and containing only some number of -ordinary/verbatim paragraphs, and possibly also some nested "=over" -... "=back" regions, "=for..." paragraphs, and "=begin"..."=end" -regions. Such an itemless "=over" ... "=back" region in Pod is -equivalent in meaning to a "
    ...
    " element in -HTML. - -=back - -Note that with all the above cases, you can determine which type of -"=over" ... "=back" you have, by examining the first (non-"=cut", -non-"=pod") Pod paragraph after the "=over" command. - -=item * - -Pod formatters I tolerate arbitrarily large amounts of text -in the "=item I" paragraph. In practice, most such -paragraphs are short, as in: - - =item For cutting off our trade with all parts of the world - -But they may be arbitrarily long: - - =item For transporting us beyond seas to be tried for pretended - offenses - - =item He is at this time transporting large armies of foreign - mercenaries to complete the works of death, desolation and - tyranny, already begun with circumstances of cruelty and perfidy - scarcely paralleled in the most barbarous ages, and totally - unworthy the head of a civilized nation. - -=item * - -Pod processors should tolerate "=item *" / "=item I" commands -with no accompanying paragraph. The middle item is an example: - - =over - - =item 1 - - Pick up dry cleaning. - - =item 2 - - =item 3 - - Stop by the store. Get Abba Zabas, Stoli, and cheap lawn chairs. - - =back - -=item * - -No "=over" ... "=back" region can contain headings. Processors may -treat such a heading as an error. - -=item * - -Note that an "=over" ... "=back" region should have some -content. That is, authors should not have an empty region like this: - - =over - - =back - -Pod processors seeing such a contentless "=over" ... "=back" region, -may ignore it, or may report it as an error. - -=item * - -Processors must tolerate an "=over" list that goes off the end of the -document (i.e., which has no matching "=back"), but they may warn -about such a list. - -=item * - -Authors of Pod formatters should note that this construct: - - =item Neque - - =item Porro - - =item Quisquam Est - - Qui dolorem ipsum quia dolor sit amet, consectetur, adipisci - velit, sed quia non numquam eius modi tempora incidunt ut - labore et dolore magnam aliquam quaerat voluptatem. - - =item Ut Enim - -is semantically ambiguous, in a way that makes formatting decisions -a bit difficult. On the one hand, it could be mention of an item -"Neque", mention of another item "Porro", and mention of another -item "Quisquam Est", with just the last one requiring the explanatory -paragraph "Qui dolorem ipsum quia dolor..."; and then an item -"Ut Enim". In that case, you'd want to format it like so: - - Neque - - Porro - - Quisquam Est - Qui dolorem ipsum quia dolor sit amet, consectetur, adipisci - velit, sed quia non numquam eius modi tempora incidunt ut - labore et dolore magnam aliquam quaerat voluptatem. - - Ut Enim - -But it could equally well be a discussion of three (related or equivalent) -items, "Neque", "Porro", and "Quisquam Est", followed by a paragraph -explaining them all, and then a new item "Ut Enim". In that case, you'd -probably want to format it like so: - - Neque - Porro - Quisquam Est - Qui dolorem ipsum quia dolor sit amet, consectetur, adipisci - velit, sed quia non numquam eius modi tempora incidunt ut - labore et dolore magnam aliquam quaerat voluptatem. - - Ut Enim - -But (for the foreseeable future), Pod does not provide any way for Pod -authors to distinguish which grouping is meant by the above -"=item"-cluster structure. So formatters should format it like so: - - Neque - - Porro - - Quisquam Est - - Qui dolorem ipsum quia dolor sit amet, consectetur, adipisci - velit, sed quia non numquam eius modi tempora incidunt ut - labore et dolore magnam aliquam quaerat voluptatem. - - Ut Enim - -That is, there should be (at least roughly) equal spacing between -items as between paragraphs (although that spacing may well be less -than the full height of a line of text). This leaves it to the reader -to use (con)textual cues to figure out whether the "Qui dolorem -ipsum..." paragraph applies to the "Quisquam Est" item or to all three -items "Neque", "Porro", and "Quisquam Est". While not an ideal -situation, this is preferable to providing formatting cues that may -be actually contrary to the author's intent. - -=back - - - -=head1 About Data Paragraphs and "=begin/=end" Regions - -Data paragraphs are typically used for inlining non-Pod data that is -to be used (typically passed through) when rendering the document to -a specific format: - - =begin rtf - - \par{\pard\qr\sa4500{\i Printed\~\chdate\~\chtime}\par} - - =end rtf - -The exact same effect could, incidentally, be achieved with a single -"=for" paragraph: - - =for rtf \par{\pard\qr\sa4500{\i Printed\~\chdate\~\chtime}\par} - -(Although that is not formally a data paragraph, it has the same -meaning as one, and Pod parsers may parse it as one.) - -Another example of a data paragraph: - - =begin html - - I like PIE! - -
    Especially pecan pie! - - =end html - -If these were ordinary paragraphs, the Pod parser would try to -expand the "EE/em>" (in the first paragraph) as a formatting -code, just like "EElt>" or "EEeacute>". But since this -is in a "=begin I"..."=end I" region I -the identifier "html" doesn't begin have a ":" prefix, the contents -of this region are stored as data paragraphs, instead of being -processed as ordinary paragraphs (or if they began with a spaces -and/or tabs, as verbatim paragraphs). - -As a further example: At time of writing, no "biblio" identifier is -supported, but suppose some processor were written to recognize it as -a way of (say) denoting a bibliographic reference (necessarily -containing formatting codes in ordinary paragraphs). The fact that -"biblio" paragraphs were meant for ordinary processing would be -indicated by prefacing each "biblio" identifier with a colon: - - =begin :biblio - - Wirth, Niklaus. 1976. I Prentice-Hall, Englewood Cliffs, NJ. - - =end :biblio - -This would signal to the parser that paragraphs in this begin...end -region are subject to normal handling as ordinary/verbatim paragraphs -(while still tagged as meant only for processors that understand the -"biblio" identifier). The same effect could be had with: - - =for :biblio - Wirth, Niklaus. 1976. I Prentice-Hall, Englewood Cliffs, NJ. - -The ":" on these identifiers means simply "process this stuff -normally, even though the result will be for some special target". -I suggest that parser APIs report "biblio" as the target identifier, -but also report that it had a ":" prefix. (And similarly, with the -above "html", report "html" as the target identifier, and note the -I of a ":" prefix.) - -Note that a "=begin I"..."=end I" region where -I begins with a colon, I contain commands. For example: - - =begin :biblio - - Wirth's classic is available in several editions, including: - - =for comment - hm, check abebooks.com for how much used copies cost. - - =over - - =item - - Wirth, Niklaus. 1975. I - Teubner, Stuttgart. [Yes, it's in German.] - - =item - - Wirth, Niklaus. 1976. I Prentice-Hall, Englewood Cliffs, NJ. - - =back - - =end :biblio - -Note, however, a "=begin I"..."=end I" -region where I does I begin with a colon, should not -directly contain "=head1" ... "=head4" commands, nor "=over", nor "=back", -nor "=item". For example, this may be considered invalid: - - =begin somedata - - This is a data paragraph. - - =head1 Don't do this! - - This is a data paragraph too. - - =end somedata - -A Pod processor may signal that the above (specifically the "=head1" -paragraph) is an error. Note, however, that the following should -I be treated as an error: - - =begin somedata - - This is a data paragraph. - - =cut - - # Yup, this isn't Pod anymore. - sub excl { (rand() > .5) ? "hoo!" : "hah!" } - - =pod - - This is a data paragraph too. - - =end somedata - -And this too is valid: - - =begin someformat - - This is a data paragraph. - - And this is a data paragraph. - - =begin someotherformat - - This is a data paragraph too. - - And this is a data paragraph too. - - =begin :yetanotherformat - - =head2 This is a command paragraph! - - This is an ordinary paragraph! - - And this is a verbatim paragraph! - - =end :yetanotherformat - - =end someotherformat - - Another data paragraph! - - =end someformat - -The contents of the above "=begin :yetanotherformat" ... -"=end :yetanotherformat" region I data paragraphs, because -the immediately containing region's identifier (":yetanotherformat") -begins with a colon. In practice, most regions that contain -data paragraphs will contain I data paragraphs; however, -the above nesting is syntactically valid as Pod, even if it is -rare. However, the handlers for some formats, like "html", -will accept only data paragraphs, not nested regions; and they may -complain if they see (targeted for them) nested regions, or commands, -other than "=end", "=pod", and "=cut". - -Also consider this valid structure: - - =begin :biblio - - Wirth's classic is available in several editions, including: - - =over - - =item - - Wirth, Niklaus. 1975. I - Teubner, Stuttgart. [Yes, it's in German.] - - =item - - Wirth, Niklaus. 1976. I Prentice-Hall, Englewood Cliffs, NJ. - - =back - - Buy buy buy! - - =begin html - - - -
    - - =end html - - Now now now! - - =end :biblio - -There, the "=begin html"..."=end html" region is nested inside -the larger "=begin :biblio"..."=end :biblio" region. Note that the -content of the "=begin html"..."=end html" region is data -paragraph(s), because the immediately containing region's identifier -("html") I begin with a colon. - -Pod parsers, when processing a series of data paragraphs one -after another (within a single region), should consider them to -be one large data paragraph that happens to contain blank lines. So -the content of the above "=begin html"..."=end html" I be stored -as two data paragraphs (one consisting of -"\n" -and another consisting of "
    \n"), but I be stored as -a single data paragraph (consisting of -"\n\n
    \n"). - -Pod processors should tolerate empty -"=begin I"..."=end I" regions, -empty "=begin :I"..."=end :I" regions, and -contentless "=for I" and "=for :I" -paragraphs. I.e., these should be tolerated: - - =for html - - =begin html - - =end html - - =begin :biblio - - =end :biblio - -Incidentally, note that there's no easy way to express a data -paragraph starting with something that looks like a command. Consider: - - =begin stuff - - =shazbot - - =end stuff - -There, "=shazbot" will be parsed as a Pod command "shazbot", not as a data -paragraph "=shazbot\n". However, you can express a data paragraph consisting -of "=shazbot\n" using this code: - - =for stuff =shazbot - -The situation where this is necessary, is presumably quite rare. - -Note that =end commands must match the currently open =begin command. That -is, they must properly nest. For example, this is valid: - - =begin outer - - X - - =begin inner - - Y - - =end inner - - Z - - =end outer - -while this is invalid: - - =begin outer - - X - - =begin inner - - Y - - =end outer - - Z - - =end inner - -This latter is improper because when the "=end outer" command is seen, the -currently open region has the formatname "inner", not "outer". (It just -happens that "outer" is the format name of a higher-up region.) This is -an error. Processors must by default report this as an error, and may halt -processing the document containing that error. A corollary of this is that -regions cannot "overlap" -- i.e., the latter block above does not represent -a region called "outer" which contains X and Y, overlapping a region called -"inner" which contains Y and Z. But because it is invalid (as all -apparently overlapping regions would be), it doesn't represent that, or -anything at all. - -Similarly, this is invalid: - - =begin thing - - =end hting - -This is an error because the region is opened by "thing", and the "=end" -tries to close "hting" [sic]. - -This is also invalid: - - =begin thing - - =end - -This is invalid because every "=end" command must have a formatname -parameter. - -=head1 SEE ALSO - -L, L, -L - -=head1 AUTHOR - -Sean M. Burke - -=cut - - diff --git a/gnu/usr.bin/perl/ext/Pod-Html/testdir/perlvar-copy.pod b/gnu/usr.bin/perl/ext/Pod-Html/testdir/perlvar-copy.pod deleted file mode 100644 index efb00a012dc..00000000000 --- a/gnu/usr.bin/perl/ext/Pod-Html/testdir/perlvar-copy.pod +++ /dev/null @@ -1,1742 +0,0 @@ -=head1 NAME - -perlvarcopy - Perl predefined variables - -=head1 DISCLAIMER - -This is a pod file used for testing purposes by the test suite, please -see L. - -=head1 DESCRIPTION - -=head2 Predefined Names - -The following names have special meaning to Perl. Most -punctuation names have reasonable mnemonics, or analogs in the -shells. Nevertheless, if you wish to use long variable names, -you need only say - - use English; - -at the top of your program. This aliases all the short names to the long -names in the current package. Some even have medium names, generally -borrowed from B. In general, it's best to use the - - use English '-no_match_vars'; - -invocation if you don't need $PREMATCH, $MATCH, or $POSTMATCH, as it avoids -a certain performance hit with the use of regular expressions. See -L. - -Variables that depend on the currently selected filehandle may be set by -calling an appropriate object method on the IO::Handle object, although -this is less efficient than using the regular built-in variables. (Summary -lines below for this contain the word HANDLE.) First you must say - - use IO::Handle; - -after which you may use either - - method HANDLE EXPR - -or more safely, - - HANDLE->method(EXPR) - -Each method returns the old value of the IO::Handle attribute. -The methods each take an optional EXPR, which, if supplied, specifies the -new value for the IO::Handle attribute in question. If not supplied, -most methods do nothing to the current value--except for -autoflush(), which will assume a 1 for you, just to be different. - -Because loading in the IO::Handle class is an expensive operation, you should -learn how to use the regular built-in variables. - -A few of these variables are considered "read-only". This means that if -you try to assign to this variable, either directly or indirectly through -a reference, you'll raise a run-time exception. - -You should be very careful when modifying the default values of most -special variables described in this document. In most cases you want -to localize these variables before changing them, since if you don't, -the change may affect other modules which rely on the default values -of the special variables that you have changed. This is one of the -correct ways to read the whole file at once: - - open my $fh, "<", "foo" or die $!; - local $/; # enable localized slurp mode - my $content = <$fh>; - close $fh; - -But the following code is quite bad: - - open my $fh, "<", "foo" or die $!; - undef $/; # enable slurp mode - my $content = <$fh>; - close $fh; - -since some other module, may want to read data from some file in the -default "line mode", so if the code we have just presented has been -executed, the global value of C<$/> is now changed for any other code -running inside the same Perl interpreter. - -Usually when a variable is localized you want to make sure that this -change affects the shortest scope possible. So unless you are already -inside some short C<{}> block, you should create one yourself. For -example: - - my $content = ''; - open my $fh, "<", "foo" or die $!; - { - local $/; - $content = <$fh>; - } - close $fh; - -Here is an example of how your own code can go broken: - - for (1..5){ - nasty_break(); - print "$_ "; - } - sub nasty_break { - $_ = 5; - # do something with $_ - } - -You probably expect this code to print: - - 1 2 3 4 5 - -but instead you get: - - 5 5 5 5 5 - -Why? Because nasty_break() modifies C<$_> without localizing it -first. The fix is to add local(): - - local $_ = 5; - -It's easy to notice the problem in such a short example, but in more -complicated code you are looking for trouble if you don't localize -changes to the special variables. - -The following list is ordered by scalar variables first, then the -arrays, then the hashes. - -=over 8 - -=item $ARG - -=item $_ -X<$_> X<$ARG> - -The default input and pattern-searching space. The following pairs are -equivalent: - - while (<>) {...} # equivalent only in while! - while (defined($_ = <>)) {...} - - /^Subject:/ - $_ =~ /^Subject:/ - - tr/a-z/A-Z/ - $_ =~ tr/a-z/A-Z/ - - chomp - chomp($_) - -Here are the places where Perl will assume $_ even if you -don't use it: - -=over 3 - -=item * - -The following functions: - -abs, alarm, chomp, chop, chr, chroot, cos, defined, eval, exp, glob, -hex, int, lc, lcfirst, length, log, lstat, mkdir, oct, ord, pos, print, -quotemeta, readlink, readpipe, ref, require, reverse (in scalar context only), -rmdir, sin, split (on its second argument), sqrt, stat, study, uc, ucfirst, -unlink, unpack. - -=item * - -All file tests (C<-f>, C<-d>) except for C<-t>, which defaults to STDIN. -See L - - -=item * - -The pattern matching operations C, C and C (aka C) -when used without an C<=~> operator. - -=item * - -The default iterator variable in a C loop if no other -variable is supplied. - -=item * - -The implicit iterator variable in the grep() and map() functions. - -=item * - -The implicit variable of given(). - -=item * - -The default place to put an input record when a C<< >> -operation's result is tested by itself as the sole criterion of a C -test. Outside a C test, this will not happen. - -=back - -As C<$_> is a global variable, this may lead in some cases to unwanted -side-effects. As of perl 5.9.1, you can now use a lexical version of -C<$_> by declaring it in a file or in a block with C. Moreover, -declaring C restores the global C<$_> in the current scope. - -(Mnemonic: underline is understood in certain operations.) - -=back - -=over 8 - -=item $a - -=item $b -X<$a> X<$b> - -Special package variables when using sort(), see L. -Because of this specialness $a and $b don't need to be declared -(using use vars, or our()) even when using the C pragma. -Don't lexicalize them with C or C if you want to be -able to use them in the sort() comparison block or function. - -=back - -=over 8 - -=item $> -X<$1> X<$2> X<$3> - -Contains the subpattern from the corresponding set of capturing -parentheses from the last pattern match, not counting patterns -matched in nested blocks that have been exited already. (Mnemonic: -like \digits.) These variables are all read-only and dynamically -scoped to the current BLOCK. - -=item $MATCH - -=item $& -X<$&> X<$MATCH> - -The string matched by the last successful pattern match (not counting -any matches hidden within a BLOCK or eval() enclosed by the current -BLOCK). (Mnemonic: like & in some editors.) This variable is read-only -and dynamically scoped to the current BLOCK. - -The use of this variable anywhere in a program imposes a considerable -performance penalty on all regular expression matches. See L. - -See L for a replacement. - -=item ${^MATCH} -X<${^MATCH}> - -This is similar to C<$&> (C<$MATCH>) except that it does not incur the -performance penalty associated with that variable, and is only guaranteed -to return a defined value when the pattern was compiled or executed with -the C

    modifier. - -=item $PREMATCH - -=item $` -X<$`> X<$PREMATCH> - -The string preceding whatever was matched by the last successful -pattern match (not counting any matches hidden within a BLOCK or eval -enclosed by the current BLOCK). (Mnemonic: C<`> often precedes a quoted -string.) This variable is read-only. - -The use of this variable anywhere in a program imposes a considerable -performance penalty on all regular expression matches. See L. - -See L for a replacement. - -=item ${^PREMATCH} -X<${^PREMATCH}> - -This is similar to C<$`> ($PREMATCH) except that it does not incur the -performance penalty associated with that variable, and is only guaranteed -to return a defined value when the pattern was compiled or executed with -the C

    modifier. - -=item $POSTMATCH - -=item $' -X<$'> X<$POSTMATCH> - -The string following whatever was matched by the last successful -pattern match (not counting any matches hidden within a BLOCK or eval() -enclosed by the current BLOCK). (Mnemonic: C<'> often follows a quoted -string.) Example: - - local $_ = 'abcdefghi'; - /def/; - print "$`:$&:$'\n"; # prints abc:def:ghi - -This variable is read-only and dynamically scoped to the current BLOCK. - -The use of this variable anywhere in a program imposes a considerable -performance penalty on all regular expression matches. See L. - -See L for a replacement. - -=item ${^POSTMATCH} -X<${^POSTMATCH}> - -This is similar to C<$'> (C<$POSTMATCH>) except that it does not incur the -performance penalty associated with that variable, and is only guaranteed -to return a defined value when the pattern was compiled or executed with -the C

    modifier. - -=item $LAST_PAREN_MATCH - -=item $+ -X<$+> X<$LAST_PAREN_MATCH> - -The text matched by the last bracket of the last successful search pattern. -This is useful if you don't know which one of a set of alternative patterns -matched. For example: - - /Version: (.*)|Revision: (.*)/ && ($rev = $+); - -(Mnemonic: be positive and forward looking.) -This variable is read-only and dynamically scoped to the current BLOCK. - -=item $LAST_SUBMATCH_RESULT - -=item $^N -X<$^N> - -The text matched by the used group most-recently closed (i.e. the group -with the rightmost closing parenthesis) of the last successful search -pattern. (Mnemonic: the (possibly) Nested parenthesis that most -recently closed.) - -This is primarily used inside C<(?{...})> blocks for examining text -recently matched. For example, to effectively capture text to a variable -(in addition to C<$1>, C<$2>, etc.), replace C<(...)> with - - (?:(...)(?{ $var = $^N })) - -By setting and then using C<$var> in this way relieves you from having to -worry about exactly which numbered set of parentheses they are. - -This variable is dynamically scoped to the current BLOCK. - -=item @LAST_MATCH_END - -=item @+ -X<@+> X<@LAST_MATCH_END> - -This array holds the offsets of the ends of the last successful -submatches in the currently active dynamic scope. C<$+[0]> is -the offset into the string of the end of the entire match. This -is the same value as what the C function returns when called -on the variable that was matched against. The Ith element -of this array holds the offset of the Ith submatch, so -C<$+[1]> is the offset past where $1 ends, C<$+[2]> the offset -past where $2 ends, and so on. You can use C<$#+> to determine -how many subgroups were in the last successful match. See the -examples given for the C<@-> variable. - -=item %LAST_PAREN_MATCH - -=item %+ -X<%+> - -Similar to C<@+>, the C<%+> hash allows access to the named capture -buffers, should they exist, in the last successful match in the -currently active dynamic scope. - -For example, C<$+{foo}> is equivalent to C<$1> after the following match: - - 'foo' =~ /(?foo)/; - -The keys of the C<%+> hash list only the names of buffers that have -captured (and that are thus associated to defined values). - -The underlying behaviour of C<%+> is provided by the -L module. - -B C<%-> and C<%+> are tied views into a common internal hash -associated with the last successful regular expression. Therefore mixing -iterative access to them via C may have unpredictable results. -Likewise, if the last successful match changes, then the results may be -surprising. - -=item HANDLE->input_line_number(EXPR) - -=item $INPUT_LINE_NUMBER - -=item $NR - -=item $. -X<$.> X<$NR> X<$INPUT_LINE_NUMBER> X - -Current line number for the last filehandle accessed. - -Each filehandle in Perl counts the number of lines that have been read -from it. (Depending on the value of C<$/>, Perl's idea of what -constitutes a line may not match yours.) When a line is read from a -filehandle (via readline() or C<< <> >>), or when tell() or seek() is -called on it, C<$.> becomes an alias to the line counter for that -filehandle. - -You can adjust the counter by assigning to C<$.>, but this will not -actually move the seek pointer. I will not localize -the filehandle's line count>. Instead, it will localize perl's notion -of which filehandle C<$.> is currently aliased to. - -C<$.> is reset when the filehandle is closed, but B when an open -filehandle is reopened without an intervening close(). For more -details, see LO Operators">. Because C<< <> >> never does -an explicit close, line numbers increase across ARGV files (but see -examples in L). - -You can also use C<< HANDLE->input_line_number(EXPR) >> to access the -line counter for a given filehandle without having to worry about -which handle you last accessed. - -(Mnemonic: many programs use "." to mean the current line number.) - -=item IO::Handle->input_record_separator(EXPR) - -=item $INPUT_RECORD_SEPARATOR - -=item $RS - -=item $/ -X<$/> X<$RS> X<$INPUT_RECORD_SEPARATOR> - -The input record separator, newline by default. This -influences Perl's idea of what a "line" is. Works like B's RS -variable, including treating empty lines as a terminator if set to -the null string. (An empty line cannot contain any spaces -or tabs.) You may set it to a multi-character string to match a -multi-character terminator, or to C to read through the end -of file. Setting it to C<"\n\n"> means something slightly -different than setting to C<"">, if the file contains consecutive -empty lines. Setting to C<""> will treat two or more consecutive -empty lines as a single empty line. Setting to C<"\n\n"> will -blindly assume that the next input character belongs to the next -paragraph, even if it's a newline. (Mnemonic: / delimits -line boundaries when quoting poetry.) - - local $/; # enable "slurp" mode - local $_ = ; # whole file now here - s/\n[ \t]+/ /g; - -Remember: the value of C<$/> is a string, not a regex. B has to be -better for something. :-) - -Setting C<$/> to a reference to an integer, scalar containing an integer, or -scalar that's convertible to an integer will attempt to read records -instead of lines, with the maximum record size being the referenced -integer. So this: - - local $/ = \32768; # or \"32768", or \$var_containing_32768 - open my $fh, "<", $myfile or die $!; - local $_ = <$fh>; - -will read a record of no more than 32768 bytes from FILE. If you're -not reading from a record-oriented file (or your OS doesn't have -record-oriented files), then you'll likely get a full chunk of data -with every read. If a record is larger than the record size you've -set, you'll get the record back in pieces. Trying to set the record -size to zero or less will cause reading in the (rest of the) whole file. - -On VMS, record reads are done with the equivalent of C, -so it's best not to mix record and non-record reads on the same -file. (This is unlikely to be a problem, because any file you'd -want to read in record mode is probably unusable in line mode.) -Non-VMS systems do normal I/O, so it's safe to mix record and -non-record reads of a file. - -See also L. Also see C<$.>. - -=item HANDLE->autoflush(EXPR) - -=item $OUTPUT_AUTOFLUSH - -=item $| -X<$|> X X X<$OUTPUT_AUTOFLUSH> - -If set to nonzero, forces a flush right away and after every write -or print on the currently selected output channel. Default is 0 -(regardless of whether the channel is really buffered by the -system or not; C<$|> tells you only whether you've asked Perl -explicitly to flush after each write). STDOUT will -typically be line buffered if output is to the terminal and block -buffered otherwise. Setting this variable is useful primarily when -you are outputting to a pipe or socket, such as when you are running -a Perl program under B and want to see the output as it's -happening. This has no effect on input buffering. See L -for that. See L on how to select the output channel. -See also L. (Mnemonic: when you want your pipes to be piping hot.) - -=item IO::Handle->output_field_separator EXPR - -=item $OUTPUT_FIELD_SEPARATOR - -=item $OFS - -=item $, -X<$,> X<$OFS> X<$OUTPUT_FIELD_SEPARATOR> - -The output field separator for the print operator. If defined, this -value is printed between each of print's arguments. Default is C. -(Mnemonic: what is printed when there is a "," in your print statement.) - -=item IO::Handle->output_record_separator EXPR - -=item $OUTPUT_RECORD_SEPARATOR - -=item $ORS - -=item $\ -X<$\> X<$ORS> X<$OUTPUT_RECORD_SEPARATOR> - -The output record separator for the print operator. If defined, this -value is printed after the last of print's arguments. Default is C. -(Mnemonic: you set C<$\> instead of adding "\n" at the end of the print. -Also, it's just like C<$/>, but it's what you get "back" from Perl.) - -=item $LIST_SEPARATOR - -=item $" -X<$"> X<$LIST_SEPARATOR> - -This is like C<$,> except that it applies to array and slice values -interpolated into a double-quoted string (or similar interpreted -string). Default is a space. (Mnemonic: obvious, I think.) - -=item $SUBSCRIPT_SEPARATOR - -=item $SUBSEP - -=item $; -X<$;> X<$SUBSEP> X - -The subscript separator for multidimensional array emulation. If you -refer to a hash element as - - $foo{$a,$b,$c} - -it really means - - $foo{join($;, $a, $b, $c)} - -But don't put - - @foo{$a,$b,$c} # a slice--note the @ - -which means - - ($foo{$a},$foo{$b},$foo{$c}) - -Default is "\034", the same as SUBSEP in B. If your -keys contain binary data there might not be any safe value for C<$;>. -(Mnemonic: comma (the syntactic subscript separator) is a -semi-semicolon. Yeah, I know, it's pretty lame, but C<$,> is already -taken for something more important.) - -Consider using "real" multidimensional arrays as described -in L. - -=item HANDLE->format_page_number(EXPR) - -=item $FORMAT_PAGE_NUMBER - -=item $% -X<$%> X<$FORMAT_PAGE_NUMBER> - -The current page number of the currently selected output channel. -Used with formats. -(Mnemonic: % is page number in B.) - -=item HANDLE->format_lines_per_page(EXPR) - -=item $FORMAT_LINES_PER_PAGE - -=item $= -X<$=> X<$FORMAT_LINES_PER_PAGE> - -The current page length (printable lines) of the currently selected -output channel. Default is 60. -Used with formats. -(Mnemonic: = has horizontal lines.) - -=item HANDLE->format_lines_left(EXPR) - -=item $FORMAT_LINES_LEFT - -=item $- -X<$-> X<$FORMAT_LINES_LEFT> - -The number of lines left on the page of the currently selected output -channel. -Used with formats. -(Mnemonic: lines_on_page - lines_printed.) - -=item @LAST_MATCH_START - -=item @- -X<@-> X<@LAST_MATCH_START> - -$-[0] is the offset of the start of the last successful match. -C<$-[>IC<]> is the offset of the start of the substring matched by -I-th subpattern, or undef if the subpattern did not match. - -Thus after a match against $_, $& coincides with C. Similarly, $I coincides with C if C<$-[n]> is defined, and $+ coincides with -C. One can use C<$#-> to find the last -matched subgroup in the last successful match. Contrast with -C<$#+>, the number of subgroups in the regular expression. Compare -with C<@+>. - -This array holds the offsets of the beginnings of the last -successful submatches in the currently active dynamic scope. -C<$-[0]> is the offset into the string of the beginning of the -entire match. The Ith element of this array holds the offset -of the Ith submatch, so C<$-[1]> is the offset where $1 -begins, C<$-[2]> the offset where $2 begins, and so on. - -After a match against some variable $var: - -=over 5 - -=item C<$`> is the same as C - -=item C<$&> is the same as C - -=item C<$'> is the same as C - -=item C<$1> is the same as C - -=item C<$2> is the same as C - -=item C<$3> is the same as C - -=back - -=item %- -X<%-> - -Similar to C<%+>, this variable allows access to the named capture buffers -in the last successful match in the currently active dynamic scope. To -each capture buffer name found in the regular expression, it associates a -reference to an array containing the list of values captured by all -buffers with that name (should there be several of them), in the order -where they appear. - -Here's an example: - - if ('1234' =~ /(?1)(?2)(?3)(?4)/) { - foreach my $bufname (sort keys %-) { - my $ary = $-{$bufname}; - foreach my $idx (0..$#$ary) { - print "\$-{$bufname}[$idx] : ", - (defined($ary->[$idx]) ? "'$ary->[$idx]'" : "undef"), - "\n"; - } - } - } - -would print out: - - $-{A}[0] : '1' - $-{A}[1] : '3' - $-{B}[0] : '2' - $-{B}[1] : '4' - -The keys of the C<%-> hash correspond to all buffer names found in -the regular expression. - -The behaviour of C<%-> is implemented via the -L module. - -B C<%-> and C<%+> are tied views into a common internal hash -associated with the last successful regular expression. Therefore mixing -iterative access to them via C may have unpredictable results. -Likewise, if the last successful match changes, then the results may be -surprising. - -=item HANDLE->format_name(EXPR) - -=item $FORMAT_NAME - -=item $~ -X<$~> X<$FORMAT_NAME> - -The name of the current report format for the currently selected output -channel. Default is the name of the filehandle. (Mnemonic: brother to -C<$^>.) - -=item HANDLE->format_top_name(EXPR) - -=item $FORMAT_TOP_NAME - -=item $^ -X<$^> X<$FORMAT_TOP_NAME> - -The name of the current top-of-page format for the currently selected -output channel. Default is the name of the filehandle with _TOP -appended. (Mnemonic: points to top of page.) - -=item IO::Handle->format_line_break_characters EXPR - -=item $FORMAT_LINE_BREAK_CHARACTERS - -=item $: -X<$:> X - -The current set of characters after which a string may be broken to -fill continuation fields (starting with ^) in a format. Default is -S<" \n-">, to break on whitespace or hyphens. (Mnemonic: a "colon" in -poetry is a part of a line.) - -=item IO::Handle->format_formfeed EXPR - -=item $FORMAT_FORMFEED - -=item $^L -X<$^L> X<$FORMAT_FORMFEED> - -What formats output as a form feed. Default is \f. - -=item $ACCUMULATOR - -=item $^A -X<$^A> X<$ACCUMULATOR> - -The current value of the write() accumulator for format() lines. A format -contains formline() calls that put their result into C<$^A>. After -calling its format, write() prints out the contents of C<$^A> and empties. -So you never really see the contents of C<$^A> unless you call -formline() yourself and then look at it. See L and -L. - -=item $CHILD_ERROR - -=item $? -X<$?> X<$CHILD_ERROR> - -The status returned by the last pipe close, backtick (C<``>) command, -successful call to wait() or waitpid(), or from the system() -operator. This is just the 16-bit status word returned by the -traditional Unix wait() system call (or else is made up to look like it). Thus, the -exit value of the subprocess is really (C<<< $? >> 8 >>>), and -C<$? & 127> gives which signal, if any, the process died from, and -C<$? & 128> reports whether there was a core dump. (Mnemonic: -similar to B and B.) - -Additionally, if the C variable is supported in C, its value -is returned via $? if any C function fails. - -If you have installed a signal handler for C, the -value of C<$?> will usually be wrong outside that handler. - -Inside an C subroutine C<$?> contains the value that is going to be -given to C. You can modify C<$?> in an C subroutine to -change the exit status of your program. For example: - - END { - $? = 1 if $? == 255; # die would make it 255 - } - -Under VMS, the pragma C makes C<$?> reflect the -actual VMS exit status, instead of the default emulation of POSIX -status; see L for details. - -Also see L. - -=item ${^CHILD_ERROR_NATIVE} -X<$^CHILD_ERROR_NATIVE> - -The native status returned by the last pipe close, backtick (C<``>) -command, successful call to wait() or waitpid(), or from the system() -operator. On POSIX-like systems this value can be decoded with the -WIFEXITED, WEXITSTATUS, WIFSIGNALED, WTERMSIG, WIFSTOPPED, WSTOPSIG -and WIFCONTINUED functions provided by the L module. - -Under VMS this reflects the actual VMS exit status; i.e. it is the same -as $? when the pragma C is in effect. - -=item ${^ENCODING} -X<$^ENCODING> - -The I to the Encode object that is used to convert -the source code to Unicode. Thanks to this variable your perl script -does not have to be written in UTF-8. Default is I. The direct -manipulation of this variable is highly discouraged. - -=item $OS_ERROR - -=item $ERRNO - -=item $! -X<$!> X<$ERRNO> X<$OS_ERROR> - -If used numerically, yields the current value of the C C -variable, or in other words, if a system or library call fails, it -sets this variable. This means that the value of C<$!> is meaningful -only I after a B: - - if (open my $fh, "<", $filename) { - # Here $! is meaningless. - ... - } else { - # ONLY here is $! meaningful. - ... - # Already here $! might be meaningless. - } - # Since here we might have either success or failure, - # here $! is meaningless. - -In the above I stands for anything: zero, non-zero, -C. A successful system or library call does B set -the variable to zero. - -If used as a string, yields the corresponding system error string. -You can assign a number to C<$!> to set I if, for instance, -you want C<"$!"> to return the string for error I, or you want -to set the exit value for the die() operator. (Mnemonic: What just -went bang?) - -Also see L. - -=item %OS_ERROR - -=item %ERRNO - -=item %! -X<%!> - -Each element of C<%!> has a true value only if C<$!> is set to that -value. For example, C<$!{ENOENT}> is true if and only if the current -value of C<$!> is C; that is, if the most recent error was -"No such file or directory" (or its moral equivalent: not all operating -systems give that exact error, and certainly not all languages). -To check if a particular key is meaningful on your system, use -C; for a list of legal keys, use C. -See L for more information, and also see above for the -validity of C<$!>. - -=item $EXTENDED_OS_ERROR - -=item $^E -X<$^E> X<$EXTENDED_OS_ERROR> - -Error information specific to the current operating system. At -the moment, this differs from C<$!> under only VMS, OS/2, and Win32 -(and for MacPerl). On all other platforms, C<$^E> is always just -the same as C<$!>. - -Under VMS, C<$^E> provides the VMS status value from the last -system error. This is more specific information about the last -system error than that provided by C<$!>. This is particularly -important when C<$!> is set to B. - -Under OS/2, C<$^E> is set to the error code of the last call to -OS/2 API either via CRT, or directly from perl. - -Under Win32, C<$^E> always returns the last error information -reported by the Win32 call C which describes -the last error from within the Win32 API. Most Win32-specific -code will report errors via C<$^E>. ANSI C and Unix-like calls -set C and so most portable Perl code will report errors -via C<$!>. - -Caveats mentioned in the description of C<$!> generally apply to -C<$^E>, also. (Mnemonic: Extra error explanation.) - -Also see L. - -=item $EVAL_ERROR - -=item $@ -X<$@> X<$EVAL_ERROR> - -The Perl syntax error message from the last eval() operator. -If $@ is the null string, the last eval() parsed and executed -correctly (although the operations you invoked may have failed in the -normal fashion). (Mnemonic: Where was the syntax error "at"?) - -Warning messages are not collected in this variable. You can, -however, set up a routine to process warnings by setting C<$SIG{__WARN__}> -as described below. - -Also see L. - -=item $PROCESS_ID - -=item $PID - -=item $$ -X<$$> X<$PID> X<$PROCESS_ID> - -The process number of the Perl running this script. You should -consider this variable read-only, although it will be altered -across fork() calls. (Mnemonic: same as shells.) - -Note for Linux users: on Linux, the C functions C and -C return different values from different threads. In order to -be portable, this behavior is not reflected by C<$$>, whose value remains -consistent across threads. If you want to call the underlying C, -you may use the CPAN module C. - -=item $REAL_USER_ID - -=item $UID - -=item $< -X<< $< >> X<$UID> X<$REAL_USER_ID> - -The real uid of this process. (Mnemonic: it's the uid you came I, -if you're running setuid.) You can change both the real uid and -the effective uid at the same time by using POSIX::setuid(). Since -changes to $< require a system call, check $! after a change attempt to -detect any possible errors. - -=item $EFFECTIVE_USER_ID - -=item $EUID - -=item $> -X<< $> >> X<$EUID> X<$EFFECTIVE_USER_ID> - -The effective uid of this process. Example: - - $< = $>; # set real to effective uid - ($<,$>) = ($>,$<); # swap real and effective uid - -You can change both the effective uid and the real uid at the same -time by using POSIX::setuid(). Changes to $> require a check to $! -to detect any possible errors after an attempted change. - -(Mnemonic: it's the uid you went I, if you're running setuid.) -C<< $< >> and C<< $> >> can be swapped only on machines -supporting setreuid(). - -=item $REAL_GROUP_ID - -=item $GID - -=item $( -X<$(> X<$GID> X<$REAL_GROUP_ID> - -The real gid of this process. If you are on a machine that supports -membership in multiple groups simultaneously, gives a space separated -list of groups you are in. The first number is the one returned by -getgid(), and the subsequent ones by getgroups(), one of which may be -the same as the first number. - -However, a value assigned to C<$(> must be a single number used to -set the real gid. So the value given by C<$(> should I be assigned -back to C<$(> without being forced numeric, such as by adding zero. Note -that this is different to the effective gid (C<$)>) which does take a -list. - -You can change both the real gid and the effective gid at the same -time by using POSIX::setgid(). Changes to $( require a check to $! -to detect any possible errors after an attempted change. - -(Mnemonic: parentheses are used to I things. The real gid is the -group you I, if you're running setgid.) - -=item $EFFECTIVE_GROUP_ID - -=item $EGID - -=item $) -X<$)> X<$EGID> X<$EFFECTIVE_GROUP_ID> - -The effective gid of this process. If you are on a machine that -supports membership in multiple groups simultaneously, gives a space -separated list of groups you are in. The first number is the one -returned by getegid(), and the subsequent ones by getgroups(), one of -which may be the same as the first number. - -Similarly, a value assigned to C<$)> must also be a space-separated -list of numbers. The first number sets the effective gid, and -the rest (if any) are passed to setgroups(). To get the effect of an -empty list for setgroups(), just repeat the new effective gid; that is, -to force an effective gid of 5 and an effectively empty setgroups() -list, say C< $) = "5 5" >. - -You can change both the effective gid and the real gid at the same -time by using POSIX::setgid() (use only a single numeric argument). -Changes to $) require a check to $! to detect any possible errors -after an attempted change. - -(Mnemonic: parentheses are used to I things. The effective gid -is the group that's I for you, if you're running setgid.) - -C<< $< >>, C<< $> >>, C<$(> and C<$)> can be set only on -machines that support the corresponding I routine. C<$(> -and C<$)> can be swapped only on machines supporting setregid(). - -=item $PROGRAM_NAME - -=item $0 -X<$0> X<$PROGRAM_NAME> - -Contains the name of the program being executed. - -On some (read: not all) operating systems assigning to C<$0> modifies -the argument area that the C program sees. On some platforms you -may have to use special C options or a different C to see the -changes. Modifying the $0 is more useful as a way of indicating the -current program state than it is for hiding the program you're -running. (Mnemonic: same as B and B.) - -Note that there are platform specific limitations on the maximum -length of C<$0>. In the most extreme case it may be limited to the -space occupied by the original C<$0>. - -In some platforms there may be arbitrary amount of padding, for -example space characters, after the modified name as shown by C. -In some platforms this padding may extend all the way to the original -length of the argument area, no matter what you do (this is the case -for example with Linux 2.2). - -Note for BSD users: setting C<$0> does not completely remove "perl" -from the ps(1) output. For example, setting C<$0> to C<"foobar"> may -result in C<"perl: foobar (perl)"> (whether both the C<"perl: "> prefix -and the " (perl)" suffix are shown depends on your exact BSD variant -and version). This is an operating system feature, Perl cannot help it. - -In multithreaded scripts Perl coordinates the threads so that any -thread may modify its copy of the C<$0> and the change becomes visible -to ps(1) (assuming the operating system plays along). Note that -the view of C<$0> the other threads have will not change since they -have their own copies of it. - -If the program has been given to perl via the switches C<-e> or C<-E>, -C<$0> will contain the string C<"-e">. - -=item $[ -X<$[> - -The index of the first element in an array, and of the first character -in a substring. Default is 0, but you could theoretically set it -to 1 to make Perl behave more like B (or Fortran) when -subscripting and when evaluating the index() and substr() functions. -(Mnemonic: [ begins subscripts.) - -As of release 5 of Perl, assignment to C<$[> is treated as a compiler -directive, and cannot influence the behavior of any other file. -(That's why you can only assign compile-time constants to it.) -Its use is highly discouraged. - -Note that, unlike other compile-time directives (such as L), -assignment to C<$[> can be seen from outer lexical scopes in the same file. -However, you can use local() on it to strictly bind its value to a -lexical block. - -=item $] -X<$]> - -The version + patchlevel / 1000 of the Perl interpreter. This variable -can be used to determine whether the Perl interpreter executing a -script is in the right range of versions. (Mnemonic: Is this version -of perl in the right bracket?) Example: - - warn "No checksumming!\n" if $] < 3.019; - -See also the documentation of C and C -for a convenient way to fail if the running Perl interpreter is too old. - -The floating point representation can sometimes lead to inaccurate -numeric comparisons. See C<$^V> for a more modern representation of -the Perl version that allows accurate string comparisons. - -=item $COMPILING - -=item $^C -X<$^C> X<$COMPILING> - -The current value of the flag associated with the B<-c> switch. -Mainly of use with B<-MO=...> to allow code to alter its behavior -when being compiled, such as for example to AUTOLOAD at compile -time rather than normal, deferred loading. Setting -C<$^C = 1> is similar to calling C. - -=item $DEBUGGING - -=item $^D -X<$^D> X<$DEBUGGING> - -The current value of the debugging flags. (Mnemonic: value of B<-D> -switch.) May be read or set. Like its command-line equivalent, you can use -numeric or symbolic values, eg C<$^D = 10> or C<$^D = "st">. - -=item ${^RE_DEBUG_FLAGS} - -The current value of the regex debugging flags. Set to 0 for no debug output -even when the re 'debug' module is loaded. See L for details. - -=item ${^RE_TRIE_MAXBUF} - -Controls how certain regex optimisations are applied and how much memory they -utilize. This value by default is 65536 which corresponds to a 512kB temporary -cache. Set this to a higher value to trade memory for speed when matching -large alternations. Set it to a lower value if you want the optimisations to -be as conservative of memory as possible but still occur, and set it to a -negative value to prevent the optimisation and conserve the most memory. -Under normal situations this variable should be of no interest to you. - -=item $SYSTEM_FD_MAX - -=item $^F -X<$^F> X<$SYSTEM_FD_MAX> - -The maximum system file descriptor, ordinarily 2. System file -descriptors are passed to exec()ed processes, while higher file -descriptors are not. Also, during an open(), system file descriptors are -preserved even if the open() fails. (Ordinary file descriptors are -closed before the open() is attempted.) The close-on-exec -status of a file descriptor will be decided according to the value of -C<$^F> when the corresponding file, pipe, or socket was opened, not the -time of the exec(). - -=item $^H - -WARNING: This variable is strictly for internal use only. Its availability, -behavior, and contents are subject to change without notice. - -This variable contains compile-time hints for the Perl interpreter. At the -end of compilation of a BLOCK the value of this variable is restored to the -value when the interpreter started to compile the BLOCK. - -When perl begins to parse any block construct that provides a lexical scope -(e.g., eval body, required file, subroutine body, loop body, or conditional -block), the existing value of $^H is saved, but its value is left unchanged. -When the compilation of the block is completed, it regains the saved value. -Between the points where its value is saved and restored, code that -executes within BEGIN blocks is free to change the value of $^H. - -This behavior provides the semantic of lexical scoping, and is used in, -for instance, the C pragma. - -The contents should be an integer; different bits of it are used for -different pragmatic flags. Here's an example: - - sub add_100 { $^H |= 0x100 } - - sub foo { - BEGIN { add_100() } - bar->baz($boon); - } - -Consider what happens during execution of the BEGIN block. At this point -the BEGIN block has already been compiled, but the body of foo() is still -being compiled. The new value of $^H will therefore be visible only while -the body of foo() is being compiled. - -Substitution of the above BEGIN block with: - - BEGIN { require strict; strict->import('vars') } - -demonstrates how C is implemented. Here's a conditional -version of the same lexical pragma: - - BEGIN { require strict; strict->import('vars') if $condition } - -=item %^H - -The %^H hash provides the same scoping semantic as $^H. This makes it -useful for implementation of lexically scoped pragmas. See L. - -=item $INPLACE_EDIT - -=item $^I -X<$^I> X<$INPLACE_EDIT> - -The current value of the inplace-edit extension. Use C to disable -inplace editing. (Mnemonic: value of B<-i> switch.) - -=item $^M -X<$^M> - -By default, running out of memory is an untrappable, fatal error. -However, if suitably built, Perl can use the contents of C<$^M> -as an emergency memory pool after die()ing. Suppose that your Perl -were compiled with C<-DPERL_EMERGENCY_SBRK> and used Perl's malloc. -Then - - $^M = 'a' x (1 << 16); - -would allocate a 64K buffer for use in an emergency. See the -F file in the Perl distribution for information on how to -add custom C compilation flags when compiling perl. To discourage casual -use of this advanced feature, there is no L long name for -this variable. - -=item $OSNAME - -=item $^O -X<$^O> X<$OSNAME> - -The name of the operating system under which this copy of Perl was -built, as determined during the configuration process. The value -is identical to C<$Config{'osname'}>. See also L and the -B<-V> command-line switch documented in L. - -In Windows platforms, $^O is not very helpful: since it is always -C, it doesn't tell the difference between -95/98/ME/NT/2000/XP/CE/.NET. Use Win32::GetOSName() or -Win32::GetOSVersion() (see L and L) to distinguish -between the variants. - -=item ${^OPEN} - -An internal variable used by PerlIO. A string in two parts, separated -by a C<\0> byte, the first part describes the input layers, the second -part describes the output layers. - -=item $PERLDB - -=item $^P -X<$^P> X<$PERLDB> - -The internal variable for debugging support. The meanings of the -various bits are subject to change, but currently indicate: - -=over 6 - -=item 0x01 - -Debug subroutine enter/exit. - -=item 0x02 - -Line-by-line debugging. Causes DB::DB() subroutine to be called for each -statement executed. Also causes saving source code lines (like 0x400). - -=item 0x04 - -Switch off optimizations. - -=item 0x08 - -Preserve more data for future interactive inspections. - -=item 0x10 - -Keep info about source lines on which a subroutine is defined. - -=item 0x20 - -Start with single-step on. - -=item 0x40 - -Use subroutine address instead of name when reporting. - -=item 0x80 - -Report C as well. - -=item 0x100 - -Provide informative "file" names for evals based on the place they were compiled. - -=item 0x200 - -Provide informative names to anonymous subroutines based on the place they -were compiled. - -=item 0x400 - -Save source code lines into C<@{"_<$filename"}>. - -=back - -Some bits may be relevant at compile-time only, some at -run-time only. This is a new mechanism and the details may change. -See also L. - -=item $LAST_REGEXP_CODE_RESULT - -=item $^R -X<$^R> X<$LAST_REGEXP_CODE_RESULT> - -The result of evaluation of the last successful C<(?{ code })> -regular expression assertion (see L). May be written to. - -=item $EXCEPTIONS_BEING_CAUGHT - -=item $^S -X<$^S> X<$EXCEPTIONS_BEING_CAUGHT> - -Current state of the interpreter. - - $^S State - --------- ------------------- - undef Parsing module/eval - true (1) Executing an eval - false (0) Otherwise - -The first state may happen in $SIG{__DIE__} and $SIG{__WARN__} handlers. - -=item $BASETIME - -=item $^T -X<$^T> X<$BASETIME> - -The time at which the program began running, in seconds since the -epoch (beginning of 1970). The values returned by the B<-M>, B<-A>, -and B<-C> filetests are based on this value. - -=item ${^TAINT} - -Reflects if taint mode is on or off. 1 for on (the program was run with -B<-T>), 0 for off, -1 when only taint warnings are enabled (i.e. with -B<-t> or B<-TU>). This variable is read-only. - -=item ${^UNICODE} - -Reflects certain Unicode settings of Perl. See L -documentation for the C<-C> switch for more information about -the possible values. This variable is set during Perl startup -and is thereafter read-only. - -=item ${^UTF8CACHE} - -This variable controls the state of the internal UTF-8 offset caching code. -1 for on (the default), 0 for off, -1 to debug the caching code by checking -all its results against linear scans, and panicking on any discrepancy. - -=item ${^UTF8LOCALE} - -This variable indicates whether an UTF-8 locale was detected by perl at -startup. This information is used by perl when it's in -adjust-utf8ness-to-locale mode (as when run with the C<-CL> command-line -switch); see L for more info on this. - -=item $PERL_VERSION - -=item $^V -X<$^V> X<$PERL_VERSION> - -The revision, version, and subversion of the Perl interpreter, represented -as a C object. - -This variable first appeared in perl 5.6.0; earlier versions of perl will -see an undefined value. Before perl 5.10.0 $^V was represented as a v-string. - -$^V can be used to determine whether the Perl interpreter executing a -script is in the right range of versions. (Mnemonic: use ^V for Version -Control.) Example: - - warn "Hashes not randomized!\n" if !$^V or $^V lt v5.8.1 - -To convert C<$^V> into its string representation use sprintf()'s -C<"%vd"> conversion: - - printf "version is v%vd\n", $^V; # Perl's version - -See the documentation of C and C -for a convenient way to fail if the running Perl interpreter is too old. - -See also C<$]> for an older representation of the Perl version. - -=item $WARNING - -=item $^W -X<$^W> X<$WARNING> - -The current value of the warning switch, initially true if B<-w> -was used, false otherwise, but directly modifiable. (Mnemonic: -related to the B<-w> switch.) See also L. - -=item ${^WARNING_BITS} - -The current set of warning checks enabled by the C pragma. -See the documentation of C for more details. - -=item ${^WIN32_SLOPPY_STAT} - -If this variable is set to a true value, then stat() on Windows will -not try to open the file. This means that the link count cannot be -determined and file attributes may be out of date if additional -hardlinks to the file exist. On the other hand, not opening the file -is considerably faster, especially for files on network drives. - -This variable could be set in the F file to -configure the local Perl installation to use "sloppy" stat() by -default. See L for more information about site -customization. - -=item $EXECUTABLE_NAME - -=item $^X -X<$^X> X<$EXECUTABLE_NAME> - -The name used to execute the current copy of Perl, from C's -C or (where supported) F. - -Depending on the host operating system, the value of $^X may be -a relative or absolute pathname of the perl program file, or may -be the string used to invoke perl but not the pathname of the -perl program file. Also, most operating systems permit invoking -programs that are not in the PATH environment variable, so there -is no guarantee that the value of $^X is in PATH. For VMS, the -value may or may not include a version number. - -You usually can use the value of $^X to re-invoke an independent -copy of the same perl that is currently running, e.g., - - @first_run = `$^X -le "print int rand 100 for 1..100"`; - -But recall that not all operating systems support forking or -capturing of the output of commands, so this complex statement -may not be portable. - -It is not safe to use the value of $^X as a path name of a file, -as some operating systems that have a mandatory suffix on -executable files do not require use of the suffix when invoking -a command. To convert the value of $^X to a path name, use the -following statements: - - # Build up a set of file names (not command names). - use Config; - $this_perl = $^X; - if ($^O ne 'VMS') - {$this_perl .= $Config{_exe} - unless $this_perl =~ m/$Config{_exe}$/i;} - -Because many operating systems permit anyone with read access to -the Perl program file to make a copy of it, patch the copy, and -then execute the copy, the security-conscious Perl programmer -should take care to invoke the installed copy of perl, not the -copy referenced by $^X. The following statements accomplish -this goal, and produce a pathname that can be invoked as a -command or referenced as a file. - - use Config; - $secure_perl_path = $Config{perlpath}; - if ($^O ne 'VMS') - {$secure_perl_path .= $Config{_exe} - unless $secure_perl_path =~ m/$Config{_exe}$/i;} - -=item ARGV -X - -The special filehandle that iterates over command-line filenames in -C<@ARGV>. Usually written as the null filehandle in the angle operator -C<< <> >>. Note that currently C only has its magical effect -within the C<< <> >> operator; elsewhere it is just a plain filehandle -corresponding to the last file opened by C<< <> >>. In particular, -passing C<\*ARGV> as a parameter to a function that expects a filehandle -may not cause your function to automatically read the contents of all the -files in C<@ARGV>. - -=item $ARGV -X<$ARGV> - -contains the name of the current file when reading from <>. - -=item @ARGV -X<@ARGV> - -The array @ARGV contains the command-line arguments intended for -the script. C<$#ARGV> is generally the number of arguments minus -one, because C<$ARGV[0]> is the first argument, I the program's -command name itself. See C<$0> for the command name. - -=item ARGVOUT -X - -The special filehandle that points to the currently open output file -when doing edit-in-place processing with B<-i>. Useful when you have -to do a lot of inserting and don't want to keep modifying $_. See -L for the B<-i> switch. - -=item @F -X<@F> - -The array @F contains the fields of each line read in when autosplit -mode is turned on. See L for the B<-a> switch. This array -is package-specific, and must be declared or given a full package name -if not in package main when running under C. - -=item @INC -X<@INC> - -The array @INC contains the list of places that the C, -C, or C constructs look for their library files. It -initially consists of the arguments to any B<-I> command-line -switches, followed by the default Perl library, probably -F, followed by ".", to represent the current -directory. ("." will not be appended if taint checks are enabled, either by -C<-T> or by C<-t>.) If you need to modify this at runtime, you should use -the C pragma to get the machine-dependent library properly -loaded also: - - use lib '/mypath/libdir/'; - use SomeMod; - -You can also insert hooks into the file inclusion system by putting Perl -code directly into @INC. Those hooks may be subroutine references, array -references or blessed objects. See L for details. - -=item @ARG - -=item @_ -X<@_> X<@ARG> - -Within a subroutine the array @_ contains the parameters passed to that -subroutine. See L. - -=item %INC -X<%INC> - -The hash %INC contains entries for each filename included via the -C, C, or C operators. The key is the filename -you specified (with module names converted to pathnames), and the -value is the location of the file found. The C -operator uses this hash to determine whether a particular file has -already been included. - -If the file was loaded via a hook (e.g. a subroutine reference, see -L for a description of these hooks), this hook is -by default inserted into %INC in place of a filename. Note, however, -that the hook may have set the %INC entry by itself to provide some more -specific info. - -=item %ENV - -=item $ENV{expr} -X<%ENV> - -The hash %ENV contains your current environment. Setting a -value in C changes the environment for any child processes -you subsequently fork() off. - -=item %SIG - -=item $SIG{expr} -X<%SIG> - -The hash C<%SIG> contains signal handlers for signals. For example: - - sub handler { # 1st argument is signal name - my($sig) = @_; - print "Caught a SIG$sig--shutting down\n"; - close(LOG); - exit(0); - } - - $SIG{'INT'} = \&handler; - $SIG{'QUIT'} = \&handler; - ... - $SIG{'INT'} = 'DEFAULT'; # restore default action - $SIG{'QUIT'} = 'IGNORE'; # ignore SIGQUIT - -Using a value of C<'IGNORE'> usually has the effect of ignoring the -signal, except for the C signal. See L for more about -this special case. - -Here are some other examples: - - $SIG{"PIPE"} = "Plumber"; # assumes main::Plumber (not recommended) - $SIG{"PIPE"} = \&Plumber; # just fine; assume current Plumber - $SIG{"PIPE"} = *Plumber; # somewhat esoteric - $SIG{"PIPE"} = Plumber(); # oops, what did Plumber() return?? - -Be sure not to use a bareword as the name of a signal handler, -lest you inadvertently call it. - -If your system has the sigaction() function then signal handlers are -installed using it. This means you get reliable signal handling. - -The default delivery policy of signals changed in Perl 5.8.0 from -immediate (also known as "unsafe") to deferred, also known as -"safe signals". See L for more information. - -Certain internal hooks can be also set using the %SIG hash. The -routine indicated by C<$SIG{__WARN__}> is called when a warning message is -about to be printed. The warning message is passed as the first -argument. The presence of a C<__WARN__> hook causes the ordinary printing -of warnings to C to be suppressed. You can use this to save warnings -in a variable, or turn warnings into fatal errors, like this: - - local $SIG{__WARN__} = sub { die $_[0] }; - eval $proggie; - -As the C<'IGNORE'> hook is not supported by C<__WARN__>, you can -disable warnings using the empty subroutine: - - local $SIG{__WARN__} = sub {}; - -The routine indicated by C<$SIG{__DIE__}> is called when a fatal exception -is about to be thrown. The error message is passed as the first -argument. When a C<__DIE__> hook routine returns, the exception -processing continues as it would have in the absence of the hook, -unless the hook routine itself exits via a C, a loop exit, or a C. -The C<__DIE__> handler is explicitly disabled during the call, so that you -can die from a C<__DIE__> handler. Similarly for C<__WARN__>. - -Due to an implementation glitch, the C<$SIG{__DIE__}> hook is called -even inside an eval(). Do not use this to rewrite a pending exception -in C<$@>, or as a bizarre substitute for overriding C. -This strange action at a distance may be fixed in a future release -so that C<$SIG{__DIE__}> is only called if your program is about -to exit, as was the original intent. Any other use is deprecated. - -C<__DIE__>/C<__WARN__> handlers are very special in one respect: -they may be called to report (probable) errors found by the parser. -In such a case the parser may be in inconsistent state, so any -attempt to evaluate Perl code from such a handler will probably -result in a segfault. This means that warnings or errors that -result from parsing Perl should be used with extreme caution, like -this: - - require Carp if defined $^S; - Carp::confess("Something wrong") if defined &Carp::confess; - die "Something wrong, but could not load Carp to give backtrace... - To see backtrace try starting Perl with -MCarp switch"; - -Here the first line will load Carp I it is the parser who -called the handler. The second line will print backtrace and die if -Carp was available. The third line will be executed only if Carp was -not available. - -See L, L, L, and -L for additional information. - -=back - -=head2 Error Indicators -X X - -The variables C<$@>, C<$!>, C<$^E>, and C<$?> contain information -about different types of error conditions that may appear during -execution of a Perl program. The variables are shown ordered by -the "distance" between the subsystem which reported the error and -the Perl process. They correspond to errors detected by the Perl -interpreter, C library, operating system, or an external program, -respectively. - -To illustrate the differences between these variables, consider the -following Perl expression, which uses a single-quoted string: - - eval q{ - open my $pipe, "/cdrom/install |" or die $!; - my @res = <$pipe>; - close $pipe or die "bad pipe: $?, $!"; - }; - -After execution of this statement all 4 variables may have been set. - -C<$@> is set if the string to be C-ed did not compile (this -may happen if C or C were imported with bad prototypes), -or if Perl code executed during evaluation die()d . In these cases -the value of $@ is the compile error, or the argument to C -(which will interpolate C<$!> and C<$?>). (See also L, -though.) - -When the eval() expression above is executed, open(), C<< >>, -and C are translated to calls in the C run-time library and -thence to the operating system kernel. C<$!> is set to the C library's -C if one of these calls fails. - -Under a few operating systems, C<$^E> may contain a more verbose -error indicator, such as in this case, "CDROM tray not closed." -Systems that do not support extended error messages leave C<$^E> -the same as C<$!>. - -Finally, C<$?> may be set to non-0 value if the external program -F fails. The upper eight bits reflect specific -error conditions encountered by the program (the program's exit() -value). The lower eight bits reflect mode of failure, like signal -death and core dump information See wait(2) for details. In -contrast to C<$!> and C<$^E>, which are set only if error condition -is detected, the variable C<$?> is set on each C or pipe -C, overwriting the old value. This is more like C<$@>, which -on every eval() is always set on failure and cleared on success. - -For more details, see the individual descriptions at C<$@>, C<$!>, C<$^E>, -and C<$?>. - -=head2 Technical Note on the Syntax of Variable Names - -Variable names in Perl can have several formats. Usually, they -must begin with a letter or underscore, in which case they can be -arbitrarily long (up to an internal limit of 251 characters) and -may contain letters, digits, underscores, or the special sequence -C<::> or C<'>. In this case, the part before the last C<::> or -C<'> is taken to be a I; see L. - -Perl variable names may also be a sequence of digits or a single -punctuation or control character. These names are all reserved for -special uses by Perl; for example, the all-digits names are used -to hold data captured by backreferences after a regular expression -match. Perl has a special syntax for the single-control-character -names: It understands C<^X> (caret C) to mean the control-C -character. For example, the notation C<$^W> (dollar-sign caret -C) is the scalar variable whose name is the single character -control-C. This is better than typing a literal control-C -into your program. - -Finally, new in Perl 5.6, Perl variable names may be alphanumeric -strings that begin with control characters (or better yet, a caret). -These variables must be written in the form C<${^Foo}>; the braces -are not optional. C<${^Foo}> denotes the scalar variable whose -name is a control-C followed by two C's. These variables are -reserved for future special uses by Perl, except for the ones that -begin with C<^_> (control-underscore or caret-underscore). No -control-character name that begins with C<^_> will acquire a special -meaning in any future version of Perl; such names may therefore be -used safely in programs. C<$^_> itself, however, I reserved. - -Perl identifiers that begin with digits, control characters, or -punctuation characters are exempt from the effects of the C -declaration and are always forced to be in package C
    ; they are -also exempt from C errors. A few other names are also -exempt in these ways: - - ENV STDIN - INC STDOUT - ARGV STDERR - ARGVOUT _ - SIG - -In particular, the new special C<${^_XYZ}> variables are always taken -to be in package C
    , regardless of any C declarations -presently in scope. - -=head1 BUGS - -Due to an unfortunate accident of Perl's implementation, C imposes a considerable performance penalty on all regular -expression matches in a program, regardless of whether they occur -in the scope of C. For that reason, saying C in libraries is strongly discouraged. See the -Devel::SawAmpersand module documentation from CPAN -( http://www.cpan.org/modules/by-module/Devel/ ) -for more information. Writing C -avoids the performance penalty. - -Having to even think about the C<$^S> variable in your exception -handlers is simply wrong. C<$SIG{__DIE__}> as currently implemented -invites grievous and difficult to track down errors. Avoid it -and use an C or CORE::GLOBAL::die override instead. diff --git a/gnu/usr.bin/perl/ext/SDBM_File/dbe.c b/gnu/usr.bin/perl/ext/SDBM_File/dbe.c index d1e3bd5e77c..a53346b67e9 100644 --- a/gnu/usr.bin/perl/ext/SDBM_File/dbe.c +++ b/gnu/usr.bin/perl/ext/SDBM_File/dbe.c @@ -51,381 +51,381 @@ char *optarg; /* Global argument pointer. */ char getopt(int argc, char **argv, char *optstring) { - int c; - char *place; - static int optind = 0; - static char *scan = NULL; - - optarg = NULL; - - if (scan == NULL || *scan == '\0') { - - if (optind == 0) - optind++; - if (optind >= argc) - return ':'; - - optarg = place = argv[optind++]; - if (place[0] != '-' || place[1] == '\0') - return '?'; - if (place[1] == '-' && place[2] == '\0') - return '?'; - scan = place + 1; - } - - c = *scan++; - place = strchr(optstring, c); - if (place == NULL || c == ':' || c == ';') { - - (void) fprintf(stderr, "%s: unknown option %c\n", argv[0], c); - scan = NULL; - return '!'; - } - if (*++place == ':') { - - if (*scan != '\0') { - - optarg = scan; - scan = NULL; - - } - else { - - if (optind >= argc) { - - (void) fprintf(stderr, "%s: %c requires an argument\n", - argv[0], c); - return '!'; - } - optarg = argv[optind]; - optind++; - } - } - else if (*place == ';') { - - if (*scan != '\0') { - - optarg = scan; - scan = NULL; - - } - else { - - if (optind >= argc || *argv[optind] == '-') - optarg = NULL; - else { - optarg = argv[optind]; - optind++; - } - } - } - return c; + int c; + char *place; + static int optind = 0; + static char *scan = NULL; + + optarg = NULL; + + if (scan == NULL || *scan == '\0') { + + if (optind == 0) + optind++; + if (optind >= argc) + return ':'; + + optarg = place = argv[optind++]; + if (place[0] != '-' || place[1] == '\0') + return '?'; + if (place[1] == '-' && place[2] == '\0') + return '?'; + scan = place + 1; + } + + c = *scan++; + place = strchr(optstring, c); + if (place == NULL || c == ':' || c == ';') { + + (void) fprintf(stderr, "%s: unknown option %c\n", argv[0], c); + scan = NULL; + return '!'; + } + if (*++place == ':') { + + if (*scan != '\0') { + + optarg = scan; + scan = NULL; + + } + else { + + if (optind >= argc) { + + (void) fprintf(stderr, "%s: %c requires an argument\n", + argv[0], c); + return '!'; + } + optarg = argv[optind]; + optind++; + } + } + else if (*place == ';') { + + if (*scan != '\0') { + + optarg = scan; + scan = NULL; + + } + else { + + if (optind >= argc || *argv[optind] == '-') + optarg = NULL; + else { + optarg = argv[optind]; + optind++; + } + } + } + return c; } void print_datum(datum db) { - int i; - - putchar('"'); - for (i = 0; i < db.dsize; i++) { - if (isprint((unsigned char)db.dptr[i])) - putchar(db.dptr[i]); - else { - putchar('\\'); - putchar('0' + ((db.dptr[i] >> 6) & 0x07)); - putchar('0' + ((db.dptr[i] >> 3) & 0x07)); - putchar('0' + (db.dptr[i] & 0x07)); - } - } - putchar('"'); + int i; + + putchar('"'); + for (i = 0; i < db.dsize; i++) { + if (isprint((unsigned char)db.dptr[i])) + putchar(db.dptr[i]); + else { + putchar('\\'); + putchar('0' + ((db.dptr[i] >> 6) & 0x07)); + putchar('0' + ((db.dptr[i] >> 3) & 0x07)); + putchar('0' + (db.dptr[i] & 0x07)); + } + } + putchar('"'); } datum read_datum(char *s) { - datum db; - char *p; - int i; - - db.dsize = 0; - db.dptr = (char *) malloc(strlen(s) * sizeof(char)); - if (!db.dptr) - oops("cannot get memory"); - - for (p = db.dptr; *s != '\0'; p++, db.dsize++, s++) { - if (*s == '\\') { - if (*++s == 'n') - *p = '\n'; - else if (*s == 'r') - *p = '\r'; - else if (*s == 'f') - *p = '\f'; - else if (*s == 't') - *p = '\t'; - else if (isdigit((unsigned char)*s) - && isdigit((unsigned char)*(s + 1)) - && isdigit((unsigned char)*(s + 2))) - { - i = (*s++ - '0') << 6; - i |= (*s++ - '0') << 3; - i |= *s - '0'; - *p = i; - } - else if (*s == '0') - *p = '\0'; - else - *p = *s; - } - else - *p = *s; - } - - return db; + datum db; + char *p; + int i; + + db.dsize = 0; + db.dptr = (char *) malloc(strlen(s) * sizeof(char)); + if (!db.dptr) + oops("cannot get memory"); + + for (p = db.dptr; *s != '\0'; p++, db.dsize++, s++) { + if (*s == '\\') { + if (*++s == 'n') + *p = '\n'; + else if (*s == 'r') + *p = '\r'; + else if (*s == 'f') + *p = '\f'; + else if (*s == 't') + *p = '\t'; + else if (isdigit((unsigned char)*s) + && isdigit((unsigned char)*(s + 1)) + && isdigit((unsigned char)*(s + 2))) + { + i = (*s++ - '0') << 6; + i |= (*s++ - '0') << 3; + i |= *s - '0'; + *p = i; + } + else if (*s == '0') + *p = '\0'; + else + *p = *s; + } + else + *p = *s; + } + + return db; } char * key2s(datum db) { - char *buf; - char *p1, *p2; - - buf = (char *) malloc((db.dsize + 1) * sizeof(char)); - if (!buf) - oops("cannot get memory"); - for (p1 = buf, p2 = db.dptr; *p2 != '\0'; *p1++ = *p2++); - *p1 = '\0'; - return buf; + char *buf; + char *p1, *p2; + + buf = (char *) malloc((db.dsize + 1) * sizeof(char)); + if (!buf) + oops("cannot get memory"); + for (p1 = buf, p2 = db.dptr; *p2 != '\0'; *p1++ = *p2++); + *p1 = '\0'; + return buf; } int main(int argc, char **argv) { - typedef enum { - YOW, FETCH, STORE, DELETE, SCAN, REGEXP - } commands; - char opt; - int flags; - int giveusage = 0; - int verbose = 0; - commands what = YOW; - char *comarg[3]; - int st_flag = DBM_INSERT; - int argn; - DBM *db; - datum key; - datum content; - - flags = O_RDWR; - argn = 0; - - while ((opt = getopt(argc, argv, "acdfFm:rstvx")) != ':') { - switch (opt) { - case 'a': - what = SCAN; - break; - case 'c': - flags |= O_CREAT; - break; - case 'd': - what = DELETE; - break; - case 'f': - what = FETCH; - break; - case 'F': - what = REGEXP; - break; - case 'm': - flags &= ~(000007); - if (strcmp(optarg, "r") == 0) - flags |= O_RDONLY; - else if (strcmp(optarg, "w") == 0) - flags |= O_WRONLY; - else if (strcmp(optarg, "rw") == 0) - flags |= O_RDWR; - else { - fprintf(stderr, "Invalid mode: \"%s\"\n", optarg); - giveusage = 1; - } - break; - case 'r': - st_flag = DBM_REPLACE; - break; - case 's': - what = STORE; - break; - case 't': - flags |= O_TRUNC; - break; - case 'v': - verbose = 1; - break; - case 'x': - flags |= O_EXCL; - break; - case '!': - giveusage = 1; - break; - case '?': - if (argn < 3) - comarg[argn++] = optarg; - else { - fprintf(stderr, "Too many arguments.\n"); - giveusage = 1; - } - break; - } - } - - if (giveusage || what == YOW || argn < 1) { - fprintf(stderr, "Usage: %s database [-m r|w|rw] [-crtx] -a|-d|-f|-F|-s [key [content]]\n", argv[0]); - exit(-1); - } - - if ((db = dbm_open(comarg[0], flags, 0777)) == NULL) { - fprintf(stderr, "Error opening database \"%s\"\n", comarg[0]); - exit(-1); - } - - if (argn > 1) - key = read_datum(comarg[1]); - if (argn > 2) - content = read_datum(comarg[2]); - - switch (what) { - - case SCAN: - key = dbm_firstkey(db); - if (dbm_error(db)) { - fprintf(stderr, "Error when fetching first key\n"); - goto db_exit; - } - while (key.dptr != NULL) { - content = dbm_fetch(db, key); - if (dbm_error(db)) { - fprintf(stderr, "Error when fetching "); - print_datum(key); - printf("\n"); - goto db_exit; - } - print_datum(key); - printf(": "); - print_datum(content); - printf("\n"); - if (dbm_error(db)) { - fprintf(stderr, "Error when fetching next key\n"); - goto db_exit; - } - key = dbm_nextkey(db); - } - break; - - case REGEXP: - if (argn < 2) { - fprintf(stderr, "Missing regular expression.\n"); - goto db_exit; - } - if (re_comp(comarg[1])) { - fprintf(stderr, "Invalid regular expression\n"); - goto db_exit; - } - key = dbm_firstkey(db); - if (dbm_error(db)) { - fprintf(stderr, "Error when fetching first key\n"); - goto db_exit; - } - while (key.dptr != NULL) { - if (re_exec(key2s(key))) { - content = dbm_fetch(db, key); - if (dbm_error(db)) { - fprintf(stderr, "Error when fetching "); - print_datum(key); - printf("\n"); - goto db_exit; - } - print_datum(key); - printf(": "); - print_datum(content); - printf("\n"); - if (dbm_error(db)) { - fprintf(stderr, "Error when fetching next key\n"); - goto db_exit; - } - } - key = dbm_nextkey(db); - } - break; - - case FETCH: - if (argn < 2) { - fprintf(stderr, "Missing fetch key.\n"); - goto db_exit; - } - content = dbm_fetch(db, key); - if (dbm_error(db)) { - fprintf(stderr, "Error when fetching "); - print_datum(key); - printf("\n"); - goto db_exit; - } - if (content.dptr == NULL) { - fprintf(stderr, "Cannot find "); - print_datum(key); - printf("\n"); - goto db_exit; - } - print_datum(key); - printf(": "); - print_datum(content); - printf("\n"); - break; - - case DELETE: - if (argn < 2) { - fprintf(stderr, "Missing delete key.\n"); - goto db_exit; - } - if (dbm_delete(db, key) || dbm_error(db)) { - fprintf(stderr, "Error when deleting "); - print_datum(key); - printf("\n"); - goto db_exit; - } - if (verbose) { - print_datum(key); - printf(": DELETED\n"); - } - break; - - case STORE: - if (argn < 3) { - fprintf(stderr, "Missing key and/or content.\n"); - goto db_exit; - } - if (dbm_store(db, key, content, st_flag) || dbm_error(db)) { - fprintf(stderr, "Error when storing "); - print_datum(key); - printf("\n"); - goto db_exit; - } - if (verbose) { - print_datum(key); - printf(": "); - print_datum(content); - printf(" STORED\n"); - } - break; - } + typedef enum { + YOW, FETCH, STORE, DELETE, SCAN, REGEXP + } commands; + char opt; + int flags; + int giveusage = 0; + int verbose = 0; + commands what = YOW; + char *comarg[3]; + int st_flag = DBM_INSERT; + int argn; + DBM *db; + datum key; + datum content; + + flags = O_RDWR; + argn = 0; + + while ((opt = getopt(argc, argv, "acdfFm:rstvx")) != ':') { + switch (opt) { + case 'a': + what = SCAN; + break; + case 'c': + flags |= O_CREAT; + break; + case 'd': + what = DELETE; + break; + case 'f': + what = FETCH; + break; + case 'F': + what = REGEXP; + break; + case 'm': + flags &= ~(000007); + if (strcmp(optarg, "r") == 0) + flags |= O_RDONLY; + else if (strcmp(optarg, "w") == 0) + flags |= O_WRONLY; + else if (strcmp(optarg, "rw") == 0) + flags |= O_RDWR; + else { + fprintf(stderr, "Invalid mode: \"%s\"\n", optarg); + giveusage = 1; + } + break; + case 'r': + st_flag = DBM_REPLACE; + break; + case 's': + what = STORE; + break; + case 't': + flags |= O_TRUNC; + break; + case 'v': + verbose = 1; + break; + case 'x': + flags |= O_EXCL; + break; + case '!': + giveusage = 1; + break; + case '?': + if (argn < 3) + comarg[argn++] = optarg; + else { + fprintf(stderr, "Too many arguments.\n"); + giveusage = 1; + } + break; + } + } + + if (giveusage || what == YOW || argn < 1) { + fprintf(stderr, "Usage: %s database [-m r|w|rw] [-crtx] -a|-d|-f|-F|-s [key [content]]\n", argv[0]); + exit(-1); + } + + if ((db = dbm_open(comarg[0], flags, 0777)) == NULL) { + fprintf(stderr, "Error opening database \"%s\"\n", comarg[0]); + exit(-1); + } + + if (argn > 1) + key = read_datum(comarg[1]); + if (argn > 2) + content = read_datum(comarg[2]); + + switch (what) { + + case SCAN: + key = dbm_firstkey(db); + if (dbm_error(db)) { + fprintf(stderr, "Error when fetching first key\n"); + goto db_exit; + } + while (key.dptr != NULL) { + content = dbm_fetch(db, key); + if (dbm_error(db)) { + fprintf(stderr, "Error when fetching "); + print_datum(key); + printf("\n"); + goto db_exit; + } + print_datum(key); + printf(": "); + print_datum(content); + printf("\n"); + if (dbm_error(db)) { + fprintf(stderr, "Error when fetching next key\n"); + goto db_exit; + } + key = dbm_nextkey(db); + } + break; + + case REGEXP: + if (argn < 2) { + fprintf(stderr, "Missing regular expression.\n"); + goto db_exit; + } + if (re_comp(comarg[1])) { + fprintf(stderr, "Invalid regular expression\n"); + goto db_exit; + } + key = dbm_firstkey(db); + if (dbm_error(db)) { + fprintf(stderr, "Error when fetching first key\n"); + goto db_exit; + } + while (key.dptr != NULL) { + if (re_exec(key2s(key))) { + content = dbm_fetch(db, key); + if (dbm_error(db)) { + fprintf(stderr, "Error when fetching "); + print_datum(key); + printf("\n"); + goto db_exit; + } + print_datum(key); + printf(": "); + print_datum(content); + printf("\n"); + if (dbm_error(db)) { + fprintf(stderr, "Error when fetching next key\n"); + goto db_exit; + } + } + key = dbm_nextkey(db); + } + break; + + case FETCH: + if (argn < 2) { + fprintf(stderr, "Missing fetch key.\n"); + goto db_exit; + } + content = dbm_fetch(db, key); + if (dbm_error(db)) { + fprintf(stderr, "Error when fetching "); + print_datum(key); + printf("\n"); + goto db_exit; + } + if (content.dptr == NULL) { + fprintf(stderr, "Cannot find "); + print_datum(key); + printf("\n"); + goto db_exit; + } + print_datum(key); + printf(": "); + print_datum(content); + printf("\n"); + break; + + case DELETE: + if (argn < 2) { + fprintf(stderr, "Missing delete key.\n"); + goto db_exit; + } + if (dbm_delete(db, key) || dbm_error(db)) { + fprintf(stderr, "Error when deleting "); + print_datum(key); + printf("\n"); + goto db_exit; + } + if (verbose) { + print_datum(key); + printf(": DELETED\n"); + } + break; + + case STORE: + if (argn < 3) { + fprintf(stderr, "Missing key and/or content.\n"); + goto db_exit; + } + if (dbm_store(db, key, content, st_flag) || dbm_error(db)) { + fprintf(stderr, "Error when storing "); + print_datum(key); + printf("\n"); + goto db_exit; + } + if (verbose) { + print_datum(key); + printf(": "); + print_datum(content); + printf(" STORED\n"); + } + break; + } db_exit: - dbm_clearerr(db); - dbm_close(db); - if (dbm_error(db)) { - fprintf(stderr, "Error closing database \"%s\"\n", comarg[0]); - exit(-1); - } + dbm_clearerr(db); + dbm_close(db); + if (dbm_error(db)) { + fprintf(stderr, "Error closing database \"%s\"\n", comarg[0]); + exit(-1); + } } diff --git a/gnu/usr.bin/perl/ext/SDBM_File/dbu.c b/gnu/usr.bin/perl/ext/SDBM_File/dbu.c index ef1963d3501..9cf48fa3977 100644 --- a/gnu/usr.bin/perl/ext/SDBM_File/dbu.c +++ b/gnu/usr.bin/perl/ext/SDBM_File/dbu.c @@ -28,30 +28,30 @@ static char *usage = "%s [-R] cat | look |... dbmname"; #define LINEMAX 8192 typedef struct { - char *sname; - int scode; - int flags; + char *sname; + int scode; + int flags; } cmd; static cmd cmds[] = { - "fetch", DLOOK, O_RDONLY, - "get", DLOOK, O_RDONLY, - "look", DLOOK, O_RDONLY, - "add", DINSERT, O_RDWR, - "insert", DINSERT, O_RDWR, - "store", DINSERT, O_RDWR, - "delete", DDELETE, O_RDWR, - "remove", DDELETE, O_RDWR, - "dump", DCAT, O_RDONLY, - "list", DCAT, O_RDONLY, - "cat", DCAT, O_RDONLY, - "creat", DCREAT, O_RDWR | O_CREAT | O_TRUNC, - "new", DCREAT, O_RDWR | O_CREAT | O_TRUNC, - "build", DBUILD, O_RDWR | O_CREAT, - "squash", DPRESS, O_RDWR, - "compact", DPRESS, O_RDWR, - "compress", DPRESS, O_RDWR + "fetch", DLOOK, O_RDONLY, + "get", DLOOK, O_RDONLY, + "look", DLOOK, O_RDONLY, + "add", DINSERT, O_RDWR, + "insert", DINSERT, O_RDWR, + "store", DINSERT, O_RDWR, + "delete", DDELETE, O_RDWR, + "remove", DDELETE, O_RDWR, + "dump", DCAT, O_RDONLY, + "list", DCAT, O_RDONLY, + "cat", DCAT, O_RDONLY, + "creat", DCREAT, O_RDWR | O_CREAT | O_TRUNC, + "new", DCREAT, O_RDWR | O_CREAT | O_TRUNC, + "build", DBUILD, O_RDWR | O_CREAT, + "squash", DPRESS, O_RDWR, + "compact", DPRESS, O_RDWR, + "compress", DPRESS, O_RDWR }; #define CTABSIZ (sizeof (cmds)/sizeof (cmd)) @@ -62,173 +62,173 @@ static void badk(), doit(), prdatum(); int main(int argc, char **argv) { - int c; - cmd *act; - extern int optind; - extern char *optarg; - - progname = argv[0]; - - while ((c = getopt(argc, argv, "R")) != EOF) - switch (c) { - case 'R': /* raw processing */ - rflag++; - break; - - default: - oops("usage: %s", usage); - break; - } - - if ((argc -= optind) < 2) - oops("usage: %s", usage); - - if ((act = parse(argv[optind])) == NULL) - badk(argv[optind]); - optind++; - doit(act, argv[optind]); - return 0; + int c; + cmd *act; + extern int optind; + extern char *optarg; + + progname = argv[0]; + + while ((c = getopt(argc, argv, "R")) != EOF) + switch (c) { + case 'R': /* raw processing */ + rflag++; + break; + + default: + oops("usage: %s", usage); + break; + } + + if ((argc -= optind) < 2) + oops("usage: %s", usage); + + if ((act = parse(argv[optind])) == NULL) + badk(argv[optind]); + optind++; + doit(act, argv[optind]); + return 0; } static void doit(cmd *act, char *file) { - datum key; - datum val; - DBM *db; - char *op; - int n; - char *line; + datum key; + datum val; + DBM *db; + char *op; + int n; + char *line; #ifdef TIME - long start; - extern long time(); + long start; + extern long time(); #endif - if ((db = dbm_open(file, act->flags, 0644)) == NULL) - oops("cannot open: %s", file); - - if ((line = (char *) malloc(LINEMAX)) == NULL) - oops("%s: cannot get memory", "line alloc"); - - switch (act->scode) { - - case DLOOK: - while (fgets(line, LINEMAX, stdin) != NULL) { - n = strlen(line) - 1; - line[n] = 0; - key.dptr = line; - key.dsize = n; - val = dbm_fetch(db, key); - if (val.dptr != NULL) { - prdatum(stdout, val); - putchar('\n'); - continue; - } - prdatum(stderr, key); - fprintf(stderr, ": not found.\n"); - } - break; - case DINSERT: - break; - case DDELETE: - while (fgets(line, LINEMAX, stdin) != NULL) { - n = strlen(line) - 1; - line[n] = 0; - key.dptr = line; - key.dsize = n; - if (dbm_delete(db, key) == -1) { - prdatum(stderr, key); - fprintf(stderr, ": not found.\n"); - } - } - break; - case DCAT: - for (key = dbm_firstkey(db); key.dptr != 0; - key = dbm_nextkey(db)) { - prdatum(stdout, key); - putchar('\t'); - prdatum(stdout, dbm_fetch(db, key)); - putchar('\n'); - } - break; - case DBUILD: + if ((db = dbm_open(file, act->flags, 0644)) == NULL) + oops("cannot open: %s", file); + + if ((line = (char *) malloc(LINEMAX)) == NULL) + oops("%s: cannot get memory", "line alloc"); + + switch (act->scode) { + + case DLOOK: + while (fgets(line, LINEMAX, stdin) != NULL) { + n = strlen(line) - 1; + line[n] = 0; + key.dptr = line; + key.dsize = n; + val = dbm_fetch(db, key); + if (val.dptr != NULL) { + prdatum(stdout, val); + putchar('\n'); + continue; + } + prdatum(stderr, key); + fprintf(stderr, ": not found.\n"); + } + break; + case DINSERT: + break; + case DDELETE: + while (fgets(line, LINEMAX, stdin) != NULL) { + n = strlen(line) - 1; + line[n] = 0; + key.dptr = line; + key.dsize = n; + if (dbm_delete(db, key) == -1) { + prdatum(stderr, key); + fprintf(stderr, ": not found.\n"); + } + } + break; + case DCAT: + for (key = dbm_firstkey(db); key.dptr != 0; + key = dbm_nextkey(db)) { + prdatum(stdout, key); + putchar('\t'); + prdatum(stdout, dbm_fetch(db, key)); + putchar('\n'); + } + break; + case DBUILD: #ifdef TIME - start = time(0); + start = time(0); #endif - while (fgets(line, LINEMAX, stdin) != NULL) { - n = strlen(line) - 1; - line[n] = 0; - key.dptr = line; - if ((op = strchr(line, '\t')) != 0) { - key.dsize = op - line; - *op++ = 0; - val.dptr = op; - val.dsize = line + n - op; - } - else - oops("bad input; %s", line); - - if (dbm_store(db, key, val, DBM_REPLACE) < 0) { - prdatum(stderr, key); - fprintf(stderr, ": "); - oops("store: %s", "failed"); - } - } + while (fgets(line, LINEMAX, stdin) != NULL) { + n = strlen(line) - 1; + line[n] = 0; + key.dptr = line; + if ((op = strchr(line, '\t')) != 0) { + key.dsize = op - line; + *op++ = 0; + val.dptr = op; + val.dsize = line + n - op; + } + else + oops("bad input; %s", line); + + if (dbm_store(db, key, val, DBM_REPLACE) < 0) { + prdatum(stderr, key); + fprintf(stderr, ": "); + oops("store: %s", "failed"); + } + } #ifdef TIME - printf("done: %d seconds.\n", time(0) - start); + printf("done: %d seconds.\n", time(0) - start); #endif - break; - case DPRESS: - break; - case DCREAT: - break; - } - - dbm_close(db); + break; + case DPRESS: + break; + case DCREAT: + break; + } + + dbm_close(db); } static void badk(char *word) { - int i; - - if (progname) - fprintf(stderr, "%s: ", progname); - fprintf(stderr, "bad keywd %s. use one of\n", word); - for (i = 0; i < (int)CTABSIZ; i++) - fprintf(stderr, "%-8s%c", cmds[i].sname, - ((i + 1) % 6 == 0) ? '\n' : ' '); - fprintf(stderr, "\n"); - exit(1); - /*NOTREACHED*/ + int i; + + if (progname) + fprintf(stderr, "%s: ", progname); + fprintf(stderr, "bad keywd %s. use one of\n", word); + for (i = 0; i < (int)CTABSIZ; i++) + fprintf(stderr, "%-8s%c", cmds[i].sname, + ((i + 1) % 6 == 0) ? '\n' : ' '); + fprintf(stderr, "\n"); + exit(1); + /*NOTREACHED*/ } static cmd * parse(char *str) { - int i = CTABSIZ; - cmd *p; - - for (p = cmds; i--; p++) - if (strcmp(p->sname, str) == 0) - return p; - return NULL; + int i = CTABSIZ; + cmd *p; + + for (p = cmds; i--; p++) + if (strcmp(p->sname, str) == 0) + return p; + return NULL; } static void prdatum(FILE *stream, datum d) { - int c; - U8 *p = (U8 *) d.dptr; - int n = d.dsize; + int c; + U8 *p = (U8 *) d.dptr; + int n = d.dsize; - while (n--) { - c = *p++; + while (n--) { + c = *p++; #ifndef EBCDIC /* Meta notation doesn't make sense on EBCDIC systems*/ - if (c & 0200) { + if (c & 0200) { fprintf(stream, "M-"); c &= 0177; - } + } #endif /* \c notation applies for \0 . \x1f, plus \c? */ if (c <= 0x1F || c == QUESTION_MARK_CTRL) { @@ -237,12 +237,12 @@ prdatum(FILE *stream, datum d) #ifdef EBCDIC /* Instead of meta, use \x{} for non-printables */ else if (! isPRINT_A(c)) { fprintf(stream, "\\x{%02x}", c); - } + } #endif - else { /* must be an ASCII printable */ + else { /* must be an ASCII printable */ putc(c, stream); } - } + } } diff --git a/gnu/usr.bin/perl/ext/SDBM_File/sdbm.c b/gnu/usr.bin/perl/ext/SDBM_File/sdbm.c index d7839aa8c20..7cf07d7599c 100644 --- a/gnu/usr.bin/perl/ext/SDBM_File/sdbm.c +++ b/gnu/usr.bin/perl/ext/SDBM_File/sdbm.c @@ -29,7 +29,7 @@ */ #include /* See notes in perl.h about avoiding - extern int errno; */ + extern int errno; */ #ifdef __cplusplus extern "C" { #endif @@ -63,58 +63,58 @@ static int makroom(DBM *, long, int); #define OFF_DIR(off) (long) (off) * DBLKSIZ static const long masks[] = { - 000000000000, 000000000001, 000000000003, 000000000007, - 000000000017, 000000000037, 000000000077, 000000000177, - 000000000377, 000000000777, 000000001777, 000000003777, - 000000007777, 000000017777, 000000037777, 000000077777, - 000000177777, 000000377777, 000000777777, 000001777777, - 000003777777, 000007777777, 000017777777, 000037777777, - 000077777777, 000177777777, 000377777777, 000777777777, - 001777777777, 003777777777, 007777777777, 017777777777 + 000000000000, 000000000001, 000000000003, 000000000007, + 000000000017, 000000000037, 000000000077, 000000000177, + 000000000377, 000000000777, 000000001777, 000000003777, + 000000007777, 000000017777, 000000037777, 000000077777, + 000000177777, 000000377777, 000000777777, 000001777777, + 000003777777, 000007777777, 000017777777, 000037777777, + 000077777777, 000177777777, 000377777777, 000777777777, + 001777777777, 003777777777, 007777777777, 017777777777 }; DBM * sdbm_open(char *file, int flags, int mode) { - DBM *db; - char *dirname; - char *pagname; - size_t filelen; - const size_t dirfext_size = sizeof(DIRFEXT ""); - const size_t pagfext_size = sizeof(PAGFEXT ""); - - if (file == NULL || !*file) - return errno = EINVAL, (DBM *) NULL; + DBM *db; + char *dirname; + char *pagname; + size_t filelen; + const size_t dirfext_size = sizeof(DIRFEXT ""); + const size_t pagfext_size = sizeof(PAGFEXT ""); + + if (file == NULL || !*file) + return errno = EINVAL, (DBM *) NULL; /* * need space for two separate filenames */ - filelen = strlen(file); + filelen = strlen(file); - if ((dirname = (char *) malloc(filelen + dirfext_size - + filelen + pagfext_size)) == NULL) - return errno = ENOMEM, (DBM *) NULL; + if ((dirname = (char *) malloc(filelen + dirfext_size + + filelen + pagfext_size)) == NULL) + return errno = ENOMEM, (DBM *) NULL; /* * build the file names */ - memcpy(dirname, file, filelen); - memcpy(dirname + filelen, DIRFEXT, dirfext_size); - pagname = dirname + filelen + dirfext_size; - memcpy(pagname, file, filelen); - memcpy(pagname + filelen, PAGFEXT, pagfext_size); - - db = sdbm_prep(dirname, pagname, flags, mode); - free((char *) dirname); - return db; + memcpy(dirname, file, filelen); + memcpy(dirname + filelen, DIRFEXT, dirfext_size); + pagname = dirname + filelen + dirfext_size; + memcpy(pagname, file, filelen); + memcpy(pagname + filelen, PAGFEXT, pagfext_size); + + db = sdbm_prep(dirname, pagname, flags, mode); + free((char *) dirname); + return db; } DBM * sdbm_prep(char *dirname, char *pagname, int flags, int mode) { - DBM *db; - struct stat dstat; + DBM *db; + struct stat dstat; - if ((db = (DBM *) malloc(sizeof(DBM))) == NULL) - return errno = ENOMEM, (DBM *) NULL; + if ((db = (DBM *) malloc(sizeof(DBM))) == NULL) + return errno = ENOMEM, (DBM *) NULL; db->flags = 0; db->hmask = 0; @@ -125,158 +125,158 @@ sdbm_prep(char *dirname, char *pagname, int flags, int mode) * as required by this package. Also set our internal * flag for RDONLY if needed. */ - if (flags & O_WRONLY) - flags = (flags & ~O_WRONLY) | O_RDWR; + if (flags & O_WRONLY) + flags = (flags & ~O_WRONLY) | O_RDWR; - else if ((flags & 03) == O_RDONLY) - db->flags = DBM_RDONLY; + else if ((flags & 03) == O_RDONLY) + db->flags = DBM_RDONLY; /* * open the files in sequence, and stat the dirfile. * If we fail anywhere, undo everything, return NULL. */ -#if defined(OS2) || defined(MSDOS) || defined(WIN32) || defined(__CYGWIN__) - flags |= O_BINARY; +#if defined(OS2) || defined(WIN32) || defined(__CYGWIN__) + flags |= O_BINARY; # endif - if ((db->pagf = open(pagname, flags, mode)) > -1) { - if ((db->dirf = open(dirname, flags, mode)) > -1) { + if ((db->pagf = open(pagname, flags, mode)) > -1) { + if ((db->dirf = open(dirname, flags, mode)) > -1) { /* * need the dirfile size to establish max bit number. */ - if (fstat(db->dirf, &dstat) == 0) { + if (fstat(db->dirf, &dstat) == 0) { /* * zero size: either a fresh database, or one with a single, * unsplit data page: dirpage is all zeros. */ - db->dirbno = (!dstat.st_size) ? 0 : -1; - db->pagbno = -1; - db->maxbno = dstat.st_size * BYTESIZ; - - (void) memset(db->pagbuf, 0, PBLKSIZ); - (void) memset(db->dirbuf, 0, DBLKSIZ); - /* - * success - */ - return db; - } - (void) close(db->dirf); - } - (void) close(db->pagf); - } - free((char *) db); - return (DBM *) NULL; + db->dirbno = (!dstat.st_size) ? 0 : -1; + db->pagbno = -1; + db->maxbno = dstat.st_size * BYTESIZ; + + (void) memset(db->pagbuf, 0, PBLKSIZ); + (void) memset(db->dirbuf, 0, DBLKSIZ); + /* + * success + */ + return db; + } + (void) close(db->dirf); + } + (void) close(db->pagf); + } + free((char *) db); + return (DBM *) NULL; } void sdbm_close(DBM *db) { - if (db == NULL) - errno = EINVAL; - else { - (void) close(db->dirf); - (void) close(db->pagf); - free((char *) db); - } + if (db == NULL) + errno = EINVAL; + else { + (void) close(db->dirf); + (void) close(db->pagf); + free((char *) db); + } } datum sdbm_fetch(DBM *db, datum key) { - if (db == NULL || bad(key)) - return errno = EINVAL, nullitem; + if (db == NULL || bad(key)) + return errno = EINVAL, nullitem; - if (getpage(db, exhash(key))) - return getpair(db->pagbuf, key); + if (getpage(db, exhash(key))) + return getpair(db->pagbuf, key); - return ioerr(db), nullitem; + return ioerr(db), nullitem; } int sdbm_exists(DBM *db, datum key) { - if (db == NULL || bad(key)) - return errno = EINVAL, -1; + if (db == NULL || bad(key)) + return errno = EINVAL, -1; - if (getpage(db, exhash(key))) - return exipair(db->pagbuf, key); + if (getpage(db, exhash(key))) + return exipair(db->pagbuf, key); - return ioerr(db), -1; + return ioerr(db), -1; } int sdbm_delete(DBM *db, datum key) { - if (db == NULL || bad(key)) - return errno = EINVAL, -1; - if (sdbm_rdonly(db)) - return errno = EPERM, -1; - - if (getpage(db, exhash(key))) { - if (!delpair(db->pagbuf, key)) - return -1; + if (db == NULL || bad(key)) + return errno = EINVAL, -1; + if (sdbm_rdonly(db)) + return errno = EPERM, -1; + + if (getpage(db, exhash(key))) { + if (!delpair(db->pagbuf, key)) + return -1; /* * update the page file */ - if (lseek(db->pagf, OFF_PAG(db->pagbno), SEEK_SET) < 0 - || write(db->pagf, db->pagbuf, PBLKSIZ) < 0) - return ioerr(db), -1; + if (lseek(db->pagf, OFF_PAG(db->pagbno), SEEK_SET) < 0 + || write(db->pagf, db->pagbuf, PBLKSIZ) < 0) + return ioerr(db), -1; - return 0; - } + return 0; + } - return ioerr(db), -1; + return ioerr(db), -1; } int sdbm_store(DBM *db, datum key, datum val, int flags) { - int need; - long hash; + int need; + long hash; - if (db == NULL || bad(key)) - return errno = EINVAL, -1; - if (sdbm_rdonly(db)) - return errno = EPERM, -1; + if (db == NULL || bad(key)) + return errno = EINVAL, -1; + if (sdbm_rdonly(db)) + return errno = EPERM, -1; - need = key.dsize + val.dsize; + need = key.dsize + val.dsize; /* * is the pair too big (or too small) for this database ?? */ - if (need < 0 || need > PAIRMAX) - return errno = EINVAL, -1; + if (need < 0 || need > PAIRMAX) + return errno = EINVAL, -1; - if (getpage(db, (hash = exhash(key)))) { + if (getpage(db, (hash = exhash(key)))) { /* * if we need to replace, delete the key/data pair * first. If it is not there, ignore. */ - if (flags == DBM_REPLACE) - (void) delpair(db->pagbuf, key); + if (flags == DBM_REPLACE) + (void) delpair(db->pagbuf, key); #ifdef SEEDUPS - else if (duppair(db->pagbuf, key)) - return 1; + else if (duppair(db->pagbuf, key)) + return 1; #endif /* * if we do not have enough room, we have to split. */ - if (!fitpair(db->pagbuf, need)) - if (!makroom(db, hash, need)) - return ioerr(db), -1; + if (!fitpair(db->pagbuf, need)) + if (!makroom(db, hash, need)) + return ioerr(db), -1; /* * we have enough room or split is successful. insert the key, * and update the page file. */ - (void) putpair(db->pagbuf, key, val); - - if (lseek(db->pagf, OFF_PAG(db->pagbno), SEEK_SET) < 0 - || write(db->pagf, db->pagbuf, PBLKSIZ) < 0) - return ioerr(db), -1; - /* - * success - */ - return 0; - } - - return ioerr(db), -1; + (void) putpair(db->pagbuf, key, val); + + if (lseek(db->pagf, OFF_PAG(db->pagbno), SEEK_SET) < 0 + || write(db->pagf, db->pagbuf, PBLKSIZ) < 0) + return ioerr(db), -1; + /* + * success + */ + return 0; + } + + return ioerr(db), -1; } /* @@ -287,28 +287,28 @@ sdbm_store(DBM *db, datum key, datum val, int flags) static int makroom(DBM *db, long int hash, int need) { - long newp; - char twin[PBLKSIZ]; + long newp; + char twin[PBLKSIZ]; #if defined(DOSISH) || defined(WIN32) - char zer[PBLKSIZ]; - long oldtail; + char zer[PBLKSIZ]; + long oldtail; #endif - char *pag = db->pagbuf; - char *New = twin; - int smax = SPLTMAX; + char *pag = db->pagbuf; + char *New = twin; + int smax = SPLTMAX; #ifdef BADMESS - int rc; + int rc; #endif - do { + do { /* * split the current page */ - (void) splpage(pag, New, db->hmask + 1); + (void) splpage(pag, New, db->hmask + 1); /* * address of the new page */ - newp = (hash & db->hmask) | (db->hmask + 1); + newp = (hash & db->hmask) | (db->hmask + 1); /* * write delay, read avoidance/cache shuffle: @@ -320,65 +320,65 @@ makroom(DBM *db, long int hash, int need) */ #if defined(DOSISH) || defined(WIN32) - /* - * Fill hole with 0 if made it. - * (hole is NOT read as 0) - */ - oldtail = lseek(db->pagf, 0L, SEEK_END); - memset(zer, 0, PBLKSIZ); - while (OFF_PAG(newp) > oldtail) { - if (lseek(db->pagf, 0L, SEEK_END) < 0 || - write(db->pagf, zer, PBLKSIZ) < 0) { - - return 0; - } - oldtail += PBLKSIZ; - } + /* + * Fill hole with 0 if made it. + * (hole is NOT read as 0) + */ + oldtail = lseek(db->pagf, 0L, SEEK_END); + memset(zer, 0, PBLKSIZ); + while (OFF_PAG(newp) > oldtail) { + if (lseek(db->pagf, 0L, SEEK_END) < 0 || + write(db->pagf, zer, PBLKSIZ) < 0) { + + return 0; + } + oldtail += PBLKSIZ; + } #endif - if (hash & (db->hmask + 1)) { - if (lseek(db->pagf, OFF_PAG(db->pagbno), SEEK_SET) < 0 - || write(db->pagf, db->pagbuf, PBLKSIZ) < 0) - return 0; - db->pagbno = newp; - (void) memcpy(pag, New, PBLKSIZ); - } - else if (lseek(db->pagf, OFF_PAG(newp), SEEK_SET) < 0 - || write(db->pagf, New, PBLKSIZ) < 0) - return 0; - - if (!setdbit(db, db->curbit)) - return 0; + if (hash & (db->hmask + 1)) { + if (lseek(db->pagf, OFF_PAG(db->pagbno), SEEK_SET) < 0 + || write(db->pagf, db->pagbuf, PBLKSIZ) < 0) + return 0; + db->pagbno = newp; + (void) memcpy(pag, New, PBLKSIZ); + } + else if (lseek(db->pagf, OFF_PAG(newp), SEEK_SET) < 0 + || write(db->pagf, New, PBLKSIZ) < 0) + return 0; + + if (!setdbit(db, db->curbit)) + return 0; /* * see if we have enough room now */ - if (fitpair(pag, need)) - return 1; + if (fitpair(pag, need)) + return 1; /* * try again... update curbit and hmask as getpage would have * done. because of our update of the current page, we do not * need to read in anything. BUT we have to write the current * [deferred] page out, as the window of failure is too great. */ - db->curbit = 2 * db->curbit + - ((hash & (db->hmask + 1)) ? 2 : 1); - db->hmask |= db->hmask + 1; + db->curbit = 2 * db->curbit + + ((hash & (db->hmask + 1)) ? 2 : 1); + db->hmask |= db->hmask + 1; - if (lseek(db->pagf, OFF_PAG(db->pagbno), SEEK_SET) < 0 - || write(db->pagf, db->pagbuf, PBLKSIZ) < 0) - return 0; + if (lseek(db->pagf, OFF_PAG(db->pagbno), SEEK_SET) < 0 + || write(db->pagf, db->pagbuf, PBLKSIZ) < 0) + return 0; - } while (--smax); + } while (--smax); /* * if we are here, this is real bad news. After SPLTMAX splits, * we still cannot fit the key. say goodnight. */ #ifdef BADMESS - rc = write(2, "sdbm: cannot insert after SPLTMAX attempts.\n", 44); - /* PERL_UNUSED_VAR() or PERL_UNUSED_RESULT() would be - * useful here but that would mean pulling in perl.h */ - (void)rc; + rc = write(2, "sdbm: cannot insert after SPLTMAX attempts.\n", 44); + /* PERL_UNUSED_VAR() or PERL_UNUSED_RESULT() would be + * useful here but that would mean pulling in perl.h */ + (void)rc; #endif - return 0; + return 0; } @@ -389,33 +389,33 @@ makroom(DBM *db, long int hash, int need) datum sdbm_firstkey(DBM *db) { - if (db == NULL) - return errno = EINVAL, nullitem; + if (db == NULL) + return errno = EINVAL, nullitem; /* * start at page 0 */ - if (lseek(db->pagf, OFF_PAG(0), SEEK_SET) < 0 - || read(db->pagf, db->pagbuf, PBLKSIZ) < 0) - return ioerr(db), nullitem; + if (lseek(db->pagf, OFF_PAG(0), SEEK_SET) < 0 + || read(db->pagf, db->pagbuf, PBLKSIZ) < 0) + return ioerr(db), nullitem; if (!chkpage(db->pagbuf)) { errno = EINVAL; ioerr(db); db->pagbno = -1; return nullitem; } - db->pagbno = 0; - db->blkptr = 0; - db->keyptr = 0; + db->pagbno = 0; + db->blkptr = 0; + db->keyptr = 0; - return getnext(db); + return getnext(db); } datum sdbm_nextkey(DBM *db) { - if (db == NULL) - return errno = EINVAL, nullitem; - return getnext(db); + if (db == NULL) + return errno = EINVAL, nullitem; + return getnext(db); } /* @@ -424,106 +424,106 @@ sdbm_nextkey(DBM *db) static int getpage(DBM *db, long int hash) { - int hbit; - long dbit; - long pagb; + int hbit; + long dbit; + long pagb; - dbit = 0; - hbit = 0; - while (dbit < db->maxbno && getdbit(db, dbit)) - dbit = 2 * dbit + ((hash & (1 << hbit++)) ? 2 : 1); + dbit = 0; + hbit = 0; + while (dbit < db->maxbno && getdbit(db, dbit)) + dbit = 2 * dbit + ((hash & (1 << hbit++)) ? 2 : 1); - debug(("dbit: %d...", dbit)); + debug(("dbit: %d...", dbit)); - db->curbit = dbit; - db->hmask = masks[hbit]; + db->curbit = dbit; + db->hmask = masks[hbit]; - pagb = hash & db->hmask; + pagb = hash & db->hmask; /* * see if the block we need is already in memory. * note: this lookaside cache has about 10% hit rate. */ - if (pagb != db->pagbno) { + if (pagb != db->pagbno) { /* * note: here, we assume a "hole" is read as 0s. * if not, must zero pagbuf first. */ - if (lseek(db->pagf, OFF_PAG(pagb), SEEK_SET) < 0 - || read(db->pagf, db->pagbuf, PBLKSIZ) < 0) - return 0; - if (!chkpage(db->pagbuf)) { + if (lseek(db->pagf, OFF_PAG(pagb), SEEK_SET) < 0 + || read(db->pagf, db->pagbuf, PBLKSIZ) < 0) + return 0; + if (!chkpage(db->pagbuf)) { errno = EINVAL; db->pagbno = -1; ioerr(db); return 0; } - db->pagbno = pagb; + db->pagbno = pagb; - debug(("pag read: %d\n", pagb)); - } - return 1; + debug(("pag read: %d\n", pagb)); + } + return 1; } static int getdbit(DBM *db, long int dbit) { - long c; - long dirb; - - c = dbit / BYTESIZ; - dirb = c / DBLKSIZ; - - if (dirb != db->dirbno) { - int got; - if (lseek(db->dirf, OFF_DIR(dirb), SEEK_SET) < 0 - || (got=read(db->dirf, db->dirbuf, DBLKSIZ)) < 0) - return 0; - if (got==0) - memset(db->dirbuf,0,DBLKSIZ); - db->dirbno = dirb; - - debug(("dir read: %d\n", dirb)); - } + long c; + long dirb; + + c = dbit / BYTESIZ; + dirb = c / DBLKSIZ; + + if (dirb != db->dirbno) { + int got; + if (lseek(db->dirf, OFF_DIR(dirb), SEEK_SET) < 0 + || (got=read(db->dirf, db->dirbuf, DBLKSIZ)) < 0) + return 0; + if (got==0) + memset(db->dirbuf,0,DBLKSIZ); + db->dirbno = dirb; + + debug(("dir read: %d\n", dirb)); + } - return db->dirbuf[c % DBLKSIZ] & (1 << dbit % BYTESIZ); + return db->dirbuf[c % DBLKSIZ] & (1 << dbit % BYTESIZ); } static int setdbit(DBM *db, long int dbit) { - long c; - long dirb; - - c = dbit / BYTESIZ; - dirb = c / DBLKSIZ; - - if (dirb != db->dirbno) { - int got; - if (lseek(db->dirf, OFF_DIR(dirb), SEEK_SET) < 0 - || (got=read(db->dirf, db->dirbuf, DBLKSIZ)) < 0) - return 0; - if (got==0) - memset(db->dirbuf,0,DBLKSIZ); - db->dirbno = dirb; - - debug(("dir read: %d\n", dirb)); - } + long c; + long dirb; + + c = dbit / BYTESIZ; + dirb = c / DBLKSIZ; + + if (dirb != db->dirbno) { + int got; + if (lseek(db->dirf, OFF_DIR(dirb), SEEK_SET) < 0 + || (got=read(db->dirf, db->dirbuf, DBLKSIZ)) < 0) + return 0; + if (got==0) + memset(db->dirbuf,0,DBLKSIZ); + db->dirbno = dirb; + + debug(("dir read: %d\n", dirb)); + } - db->dirbuf[c % DBLKSIZ] |= (1 << dbit % BYTESIZ); + db->dirbuf[c % DBLKSIZ] |= (1 << dbit % BYTESIZ); #if 0 - if (dbit >= db->maxbno) - db->maxbno += DBLKSIZ * BYTESIZ; + if (dbit >= db->maxbno) + db->maxbno += DBLKSIZ * BYTESIZ; #else - if (OFF_DIR((dirb+1))*BYTESIZ > db->maxbno) - db->maxbno=OFF_DIR((dirb+1))*BYTESIZ; + if (OFF_DIR((dirb+1))*BYTESIZ > db->maxbno) + db->maxbno=OFF_DIR((dirb+1))*BYTESIZ; #endif - if (lseek(db->dirf, OFF_DIR(dirb), SEEK_SET) < 0 - || write(db->dirf, db->dirbuf, DBLKSIZ) < 0) - return 0; + if (lseek(db->dirf, OFF_DIR(dirb), SEEK_SET) < 0 + || write(db->dirf, db->dirbuf, DBLKSIZ) < 0) + return 0; - return 1; + return 1; } /* @@ -533,33 +533,33 @@ setdbit(DBM *db, long int dbit) static datum getnext(DBM *db) { - datum key; + datum key; - for (;;) { - db->keyptr++; - key = getnkey(db->pagbuf, db->keyptr); - if (key.dptr != NULL) - return key; + for (;;) { + db->keyptr++; + key = getnkey(db->pagbuf, db->keyptr); + if (key.dptr != NULL) + return key; /* * we either run out, or there is nothing on this page.. * try the next one... If we lost our position on the * file, we will have to seek. */ - db->keyptr = 0; - if (db->pagbno != db->blkptr++) - if (lseek(db->pagf, OFF_PAG(db->blkptr), SEEK_SET) < 0) - break; - db->pagbno = db->blkptr; - if (read(db->pagf, db->pagbuf, PBLKSIZ) <= 0) - break; - if (!chkpage(db->pagbuf)) { + db->keyptr = 0; + if (db->pagbno != db->blkptr++) + if (lseek(db->pagf, OFF_PAG(db->blkptr), SEEK_SET) < 0) + break; + db->pagbno = db->blkptr; + if (read(db->pagf, db->pagbuf, PBLKSIZ) <= 0) + break; + if (!chkpage(db->pagbuf)) { errno = EINVAL; db->pagbno = -1; ioerr(db); break; } - } + } - return ioerr(db), nullitem; + return ioerr(db), nullitem; } diff --git a/gnu/usr.bin/perl/ext/SDBM_File/sdbm.h b/gnu/usr.bin/perl/ext/SDBM_File/sdbm.h index 428303d3072..e150fe59011 100644 --- a/gnu/usr.bin/perl/ext/SDBM_File/sdbm.h +++ b/gnu/usr.bin/perl/ext/SDBM_File/sdbm.h @@ -11,7 +11,7 @@ #define PBLKSIZ 1024 #define PAIRMAX 1008 /* arbitrary on PBLKSIZ-N */ #define SPLTMAX 10 /* maximum allowed splits */ - /* for a single insertion */ + /* for a single insertion */ #ifdef VMS #define DIRFEXT ".sdbm_dir" #else @@ -20,19 +20,19 @@ #define PAGFEXT ".pag" typedef struct { - int dirf; /* directory file descriptor */ - int pagf; /* page file descriptor */ - int flags; /* status/error flags, see below */ - long maxbno; /* size of dirfile in bits */ - long curbit; /* current bit number */ - long hmask; /* current hash mask */ - long blkptr; /* current block for nextkey */ - int keyptr; /* current key for nextkey */ - long blkno; /* current page to read/write */ - long pagbno; /* current page in pagbuf */ - char pagbuf[PBLKSIZ]; /* page file block buffer */ - long dirbno; /* current block in dirbuf */ - char dirbuf[DBLKSIZ]; /* directory file block buffer */ + int dirf; /* directory file descriptor */ + int pagf; /* page file descriptor */ + int flags; /* status/error flags, see below */ + long maxbno; /* size of dirfile in bits */ + long curbit; /* current bit number */ + long hmask; /* current hash mask */ + long blkptr; /* current block for nextkey */ + int keyptr; /* current key for nextkey */ + long blkno; /* current page to read/write */ + long pagbno; /* current page in pagbuf */ + char pagbuf[PBLKSIZ]; /* page file block buffer */ + long dirbno; /* current block in dirbuf */ + char dirbuf[DBLKSIZ]; /* directory file block buffer */ } DBM; #define DBM_RDONLY 0x1 /* data base open read-only */ @@ -50,8 +50,8 @@ typedef struct { #define sdbm_pagfno(db) ((db)->pagf) typedef struct { - const char *dptr; - int dsize; + const char *dptr; + int dsize; } datum; extern const datum nullitem; @@ -128,7 +128,7 @@ extern long sdbm_hash(const char *, int); #endif #ifdef I_SYS_PARAM -# if !defined(MSDOS) && !defined(WIN32) && !defined(VMS) +# if !defined(WIN32) && !defined(VMS) # ifdef PARAM_NEEDS_TYPES # include # endif diff --git a/gnu/usr.bin/perl/ext/Sys-Hostname/Hostname.pm b/gnu/usr.bin/perl/ext/Sys-Hostname/Hostname.pm index 2284e1f81cc..ffecefd59fd 100644 --- a/gnu/usr.bin/perl/ext/Sys-Hostname/Hostname.pm +++ b/gnu/usr.bin/perl/ext/Sys-Hostname/Hostname.pm @@ -4,9 +4,8 @@ use strict; use Carp; -require Exporter; +use Exporter 'import'; -our @ISA = qw/ Exporter /; our @EXPORT = qw/ hostname /; our $VERSION; @@ -16,7 +15,7 @@ use warnings (); our $host; BEGIN { - $VERSION = '1.23'; + $VERSION = '1.24'; { local $SIG{__DIE__}; eval { diff --git a/gnu/usr.bin/perl/ext/Win32CORE/Win32CORE.c b/gnu/usr.bin/perl/ext/Win32CORE/Win32CORE.c index 6e5e1cec013..6784e460fee 100644 --- a/gnu/usr.bin/perl/ext/Win32CORE/Win32CORE.c +++ b/gnu/usr.bin/perl/ext/Win32CORE/Win32CORE.c @@ -64,78 +64,78 @@ init_Win32CORE(pTHX) */ static const struct { - char Win32__GetCwd [sizeof("Win32::GetCwd")]; - char Win32__SetCwd [sizeof("Win32::SetCwd")]; - char Win32__GetNextAvailDrive [sizeof("Win32::GetNextAvailDrive")]; - char Win32__GetLastError [sizeof("Win32::GetLastError")]; - char Win32__SetLastError [sizeof("Win32::SetLastError")]; - char Win32__LoginName [sizeof("Win32::LoginName")]; - char Win32__NodeName [sizeof("Win32::NodeName")]; - char Win32__DomainName [sizeof("Win32::DomainName")]; - char Win32__FsType [sizeof("Win32::FsType")]; - char Win32__GetOSVersion [sizeof("Win32::GetOSVersion")]; - char Win32__IsWinNT [sizeof("Win32::IsWinNT")]; - char Win32__IsWin95 [sizeof("Win32::IsWin95")]; - char Win32__FormatMessage [sizeof("Win32::FormatMessage")]; - char Win32__Spawn [sizeof("Win32::Spawn")]; - char Win32__GetTickCount [sizeof("Win32::GetTickCount")]; - char Win32__GetShortPathName [sizeof("Win32::GetShortPathName")]; - char Win32__GetFullPathName [sizeof("Win32::GetFullPathName")]; - char Win32__GetLongPathName [sizeof("Win32::GetLongPathName")]; - char Win32__CopyFile [sizeof("Win32::CopyFile")]; - char Win32__Sleep [sizeof("Win32::Sleep")]; + char Win32__GetCwd [sizeof("Win32::GetCwd")]; + char Win32__SetCwd [sizeof("Win32::SetCwd")]; + char Win32__GetNextAvailDrive [sizeof("Win32::GetNextAvailDrive")]; + char Win32__GetLastError [sizeof("Win32::GetLastError")]; + char Win32__SetLastError [sizeof("Win32::SetLastError")]; + char Win32__LoginName [sizeof("Win32::LoginName")]; + char Win32__NodeName [sizeof("Win32::NodeName")]; + char Win32__DomainName [sizeof("Win32::DomainName")]; + char Win32__FsType [sizeof("Win32::FsType")]; + char Win32__GetOSVersion [sizeof("Win32::GetOSVersion")]; + char Win32__IsWinNT [sizeof("Win32::IsWinNT")]; + char Win32__IsWin95 [sizeof("Win32::IsWin95")]; + char Win32__FormatMessage [sizeof("Win32::FormatMessage")]; + char Win32__Spawn [sizeof("Win32::Spawn")]; + char Win32__GetTickCount [sizeof("Win32::GetTickCount")]; + char Win32__GetShortPathName [sizeof("Win32::GetShortPathName")]; + char Win32__GetFullPathName [sizeof("Win32::GetFullPathName")]; + char Win32__GetLongPathName [sizeof("Win32::GetLongPathName")]; + char Win32__CopyFile [sizeof("Win32::CopyFile")]; + char Win32__Sleep [sizeof("Win32::Sleep")]; } fnname_table = { - "Win32::GetCwd", - "Win32::SetCwd", - "Win32::GetNextAvailDrive", - "Win32::GetLastError", - "Win32::SetLastError", - "Win32::LoginName", - "Win32::NodeName", - "Win32::DomainName", - "Win32::FsType", - "Win32::GetOSVersion", - "Win32::IsWinNT", - "Win32::IsWin95", - "Win32::FormatMessage", - "Win32::Spawn", - "Win32::GetTickCount", - "Win32::GetShortPathName", - "Win32::GetFullPathName", - "Win32::GetLongPathName", - "Win32::CopyFile", - "Win32::Sleep" + "Win32::GetCwd", + "Win32::SetCwd", + "Win32::GetNextAvailDrive", + "Win32::GetLastError", + "Win32::SetLastError", + "Win32::LoginName", + "Win32::NodeName", + "Win32::DomainName", + "Win32::FsType", + "Win32::GetOSVersion", + "Win32::IsWinNT", + "Win32::IsWin95", + "Win32::FormatMessage", + "Win32::Spawn", + "Win32::GetTickCount", + "Win32::GetShortPathName", + "Win32::GetFullPathName", + "Win32::GetLongPathName", + "Win32::CopyFile", + "Win32::Sleep" }; static const unsigned char fnname_lens [] = { - sizeof("Win32::GetCwd"), - sizeof("Win32::SetCwd"), - sizeof("Win32::GetNextAvailDrive"), - sizeof("Win32::GetLastError"), - sizeof("Win32::SetLastError"), - sizeof("Win32::LoginName"), - sizeof("Win32::NodeName"), - sizeof("Win32::DomainName"), - sizeof("Win32::FsType"), - sizeof("Win32::GetOSVersion"), - sizeof("Win32::IsWinNT"), - sizeof("Win32::IsWin95"), - sizeof("Win32::FormatMessage"), - sizeof("Win32::Spawn"), - sizeof("Win32::GetTickCount"), - sizeof("Win32::GetShortPathName"), - sizeof("Win32::GetFullPathName"), - sizeof("Win32::GetLongPathName"), - sizeof("Win32::CopyFile"), - sizeof("Win32::Sleep") + sizeof("Win32::GetCwd"), + sizeof("Win32::SetCwd"), + sizeof("Win32::GetNextAvailDrive"), + sizeof("Win32::GetLastError"), + sizeof("Win32::SetLastError"), + sizeof("Win32::LoginName"), + sizeof("Win32::NodeName"), + sizeof("Win32::DomainName"), + sizeof("Win32::FsType"), + sizeof("Win32::GetOSVersion"), + sizeof("Win32::IsWinNT"), + sizeof("Win32::IsWin95"), + sizeof("Win32::FormatMessage"), + sizeof("Win32::Spawn"), + sizeof("Win32::GetTickCount"), + sizeof("Win32::GetShortPathName"), + sizeof("Win32::GetFullPathName"), + sizeof("Win32::GetLongPathName"), + sizeof("Win32::CopyFile"), + sizeof("Win32::Sleep") }; const unsigned char * len = (const unsigned char *)&fnname_lens; const char * function = (char *)&fnname_table; while (function < (char *)&fnname_table + sizeof(fnname_table)) { - const char * const file = __FILE__; - CV * const cv = newXS(function, w32_CORE_all, file); - XSANY.any_ptr = (void *)function; - function += *len++; + const char * const file = __FILE__; + CV * const cv = newXS(function, w32_CORE_all, file); + XSANY.any_ptr = (void *)function; + function += *len++; } diff --git a/gnu/usr.bin/perl/ext/XS-APItest/APItest.pm b/gnu/usr.bin/perl/ext/XS-APItest/APItest.pm index 8d0a7fddac4..85787d1c949 100644 --- a/gnu/usr.bin/perl/ext/XS-APItest/APItest.pm +++ b/gnu/usr.bin/perl/ext/XS-APItest/APItest.pm @@ -1,11 +1,10 @@ package XS::APItest; -{ use 5.011001; } # 5.11 is a long long time ago... What gives with this? use strict; use warnings; use Carp; -our $VERSION = '1.09'; +our $VERSION = '1.22'; require XSLoader; @@ -57,14 +56,6 @@ sub import { use vars '$WARNINGS_ON_BOOTSTRAP'; use vars map "\$${_}_called_PP", qw(BEGIN UNITCHECK CHECK INIT END); -BEGIN { - # This is arguably a hack, but it disposes of the UNITCHECK block without - # needing to preprocess the source code - if ($] < 5.009) { - eval 'sub UNITCHECK (&) {}; 1' or die $@; - } -} - # Do these here to verify that XS code and Perl code get called at the same # times BEGIN { @@ -226,7 +217,7 @@ arg is passed as the args to the called function. They return whatever the C function itself pushed onto the stack, plus the return value from the function; for example - call_sv( sub { @_, 'c' }, G_ARRAY, 'a', 'b'); + call_sv( sub { @_, 'c' }, G_LIST, 'a', 'b'); # returns 'a', 'b', 'c', 3 call_sv( sub { @_ }, G_SCALAR, 'a', 'b'); # returns 'b', 1 diff --git a/gnu/usr.bin/perl/ext/XS-APItest/APItest.xs b/gnu/usr.bin/perl/ext/XS-APItest/APItest.xs index 1aab7a7cd8d..4cdcc2abc78 100644 --- a/gnu/usr.bin/perl/ext/XS-APItest/APItest.xs +++ b/gnu/usr.bin/perl/ext/XS-APItest/APItest.xs @@ -78,7 +78,7 @@ cat_utf8a2n(SV* sv, const char * const ascii_utf8, STRLEN len) } char_end = uvchr_to_utf8(native_utf8, code_point); - sv_catpvn(sv, (char *) native_utf8, char_end - native_utf8); + sv_catpvn(sv, (char *) native_utf8, char_end - native_utf8); } } @@ -105,7 +105,7 @@ typedef struct { START_MY_CXT -int +static int S_myset_set(pTHX_ SV* sv, MAGIC* mg) { SV *isv = (SV*)mg->mg_ptr; @@ -115,9 +115,25 @@ S_myset_set(pTHX_ SV* sv, MAGIC* mg) return 0; } -MGVTBL vtbl_foo, vtbl_bar; -MGVTBL vtbl_myset = { 0, S_myset_set, 0, 0, 0, 0, 0, 0 }; +static MGVTBL vtbl_foo, vtbl_bar; +static MGVTBL vtbl_myset = { 0, S_myset_set, 0, 0, 0, 0, 0, 0 }; + +static int +S_mycopy_copy(pTHX_ SV *sv, MAGIC* mg, SV *nsv, const char *name, I32 namlen) { + PERL_UNUSED_ARG(sv); + PERL_UNUSED_ARG(nsv); + PERL_UNUSED_ARG(name); + PERL_UNUSED_ARG(namlen); + + /* Count that we were called to "copy". + There's actually no point in copying *this* magic onto nsv, as it's a + SCALAR, whereas mg_copy is only triggered for ARRAYs and HASHes. + It's not *exactly* generic. :-( */ + ++mg->mg_private; + return 0; +} +STATIC MGVTBL vtbl_mycopy = { 0, 0, 0, 0, 0, S_mycopy_copy, 0, 0 }; /* indirect functions to test the [pa]MY_CXT macros */ @@ -186,10 +202,14 @@ test_freeent(freeent_function *f) { /* We need to "inline" new_he here as it's static, and the functions we test expect to be able to call del_HE on the HE */ - if (!PL_body_roots[HE_SVSLOT]) - croak("PL_he_root is 0"); - victim = (HE*) PL_body_roots[HE_SVSLOT]; - PL_body_roots[HE_SVSLOT] = HeNEXT(victim); + if (!PL_body_roots[HE_ARENA_ROOT_IX]) + croak("PL_he_root is 0"); + victim = (HE*) PL_body_roots[HE_ARENA_ROOT_IX]; + PL_body_roots[HE_ARENA_ROOT_IX] = HeNEXT(victim); +#endif + +#ifdef NODEFAULT_SHAREKEYS + HvSHAREKEYS_on(test_hash); #endif victim->hent_hek = Perl_share_hek(aTHX_ "", 0, 0); @@ -209,7 +229,7 @@ test_freeent(freeent_function *f) { i = 0; do { - mXPUSHu(results[i]); + mXPUSHu(results[i]); } while (++i < (int)(sizeof(results)/sizeof(results[0]))); /* Goodbye to our extra reference. */ @@ -226,41 +246,41 @@ bitflip_key(pTHX_ IV action, SV *field) { SV *keysv; PERL_UNUSED_ARG(action); if (mg && (keysv = mg->mg_obj)) { - STRLEN len; - const char *p = SvPV(keysv, len); + STRLEN len; + const char *p = SvPV(keysv, len); - if (len) { + if (len) { /* Allow for the flipped val to be longer than the original. This * is just for testing, so can afford to have some slop */ const STRLEN newlen = len * 2; - SV *newkey = newSV(newlen); - const char * const new_p_orig = SvPVX(newkey); - char *new_p = (char *) new_p_orig; + SV *newkey = newSV(newlen); + const char * const new_p_orig = SvPVX(newkey); + char *new_p = (char *) new_p_orig; - if (SvUTF8(keysv)) { - const char *const end = p + len; - while (p < end) { - STRLEN curlen; - UV chr = utf8_to_uvchr_buf((U8 *)p, (U8 *) end, &curlen); + if (SvUTF8(keysv)) { + const char *const end = p + len; + while (p < end) { + STRLEN curlen; + UV chr = utf8_to_uvchr_buf((U8 *)p, (U8 *) end, &curlen); /* Make sure don't exceed bounds */ assert(new_p - new_p_orig + curlen < newlen); - new_p = (char *)uvchr_to_utf8((U8 *)new_p, chr ^ FLIP_BIT); - p += curlen; - } - SvUTF8_on(newkey); - } else { - while (len--) - *new_p++ = *p++ ^ FLIP_BIT; - } - *new_p = '\0'; - SvCUR_set(newkey, new_p - new_p_orig); - SvPOK_on(newkey); - - mg->mg_obj = newkey; - } + new_p = (char *)uvchr_to_utf8((U8 *)new_p, chr ^ FLIP_BIT); + p += curlen; + } + SvUTF8_on(newkey); + } else { + while (len--) + *new_p++ = *p++ ^ FLIP_BIT; + } + *new_p = '\0'; + SvCUR_set(newkey, new_p - new_p_orig); + SvPOK_on(newkey); + + mg->mg_obj = newkey; + } } return 0; } @@ -271,81 +291,81 @@ rot13_key(pTHX_ IV action, SV *field) { SV *keysv; PERL_UNUSED_ARG(action); if (mg && (keysv = mg->mg_obj)) { - STRLEN len; - const char *p = SvPV(keysv, len); - - if (len) { - SV *newkey = newSV(len); - char *new_p = SvPVX(newkey); - - /* There's a deliberate fencepost error here to loop len + 1 times - to copy the trailing \0 */ - do { - char new_c = *p++; - /* Try doing this cleanly and clearly in EBCDIC another way: */ - switch (new_c) { - case 'A': new_c = 'N'; break; - case 'B': new_c = 'O'; break; - case 'C': new_c = 'P'; break; - case 'D': new_c = 'Q'; break; - case 'E': new_c = 'R'; break; - case 'F': new_c = 'S'; break; - case 'G': new_c = 'T'; break; - case 'H': new_c = 'U'; break; - case 'I': new_c = 'V'; break; - case 'J': new_c = 'W'; break; - case 'K': new_c = 'X'; break; - case 'L': new_c = 'Y'; break; - case 'M': new_c = 'Z'; break; - case 'N': new_c = 'A'; break; - case 'O': new_c = 'B'; break; - case 'P': new_c = 'C'; break; - case 'Q': new_c = 'D'; break; - case 'R': new_c = 'E'; break; - case 'S': new_c = 'F'; break; - case 'T': new_c = 'G'; break; - case 'U': new_c = 'H'; break; - case 'V': new_c = 'I'; break; - case 'W': new_c = 'J'; break; - case 'X': new_c = 'K'; break; - case 'Y': new_c = 'L'; break; - case 'Z': new_c = 'M'; break; - case 'a': new_c = 'n'; break; - case 'b': new_c = 'o'; break; - case 'c': new_c = 'p'; break; - case 'd': new_c = 'q'; break; - case 'e': new_c = 'r'; break; - case 'f': new_c = 's'; break; - case 'g': new_c = 't'; break; - case 'h': new_c = 'u'; break; - case 'i': new_c = 'v'; break; - case 'j': new_c = 'w'; break; - case 'k': new_c = 'x'; break; - case 'l': new_c = 'y'; break; - case 'm': new_c = 'z'; break; - case 'n': new_c = 'a'; break; - case 'o': new_c = 'b'; break; - case 'p': new_c = 'c'; break; - case 'q': new_c = 'd'; break; - case 'r': new_c = 'e'; break; - case 's': new_c = 'f'; break; - case 't': new_c = 'g'; break; - case 'u': new_c = 'h'; break; - case 'v': new_c = 'i'; break; - case 'w': new_c = 'j'; break; - case 'x': new_c = 'k'; break; - case 'y': new_c = 'l'; break; - case 'z': new_c = 'm'; break; - } - *new_p++ = new_c; - } while (len--); - SvCUR_set(newkey, SvCUR(keysv)); - SvPOK_on(newkey); - if (SvUTF8(keysv)) - SvUTF8_on(newkey); - - mg->mg_obj = newkey; - } + STRLEN len; + const char *p = SvPV(keysv, len); + + if (len) { + SV *newkey = newSV(len); + char *new_p = SvPVX(newkey); + + /* There's a deliberate fencepost error here to loop len + 1 times + to copy the trailing \0 */ + do { + char new_c = *p++; + /* Try doing this cleanly and clearly in EBCDIC another way: */ + switch (new_c) { + case 'A': new_c = 'N'; break; + case 'B': new_c = 'O'; break; + case 'C': new_c = 'P'; break; + case 'D': new_c = 'Q'; break; + case 'E': new_c = 'R'; break; + case 'F': new_c = 'S'; break; + case 'G': new_c = 'T'; break; + case 'H': new_c = 'U'; break; + case 'I': new_c = 'V'; break; + case 'J': new_c = 'W'; break; + case 'K': new_c = 'X'; break; + case 'L': new_c = 'Y'; break; + case 'M': new_c = 'Z'; break; + case 'N': new_c = 'A'; break; + case 'O': new_c = 'B'; break; + case 'P': new_c = 'C'; break; + case 'Q': new_c = 'D'; break; + case 'R': new_c = 'E'; break; + case 'S': new_c = 'F'; break; + case 'T': new_c = 'G'; break; + case 'U': new_c = 'H'; break; + case 'V': new_c = 'I'; break; + case 'W': new_c = 'J'; break; + case 'X': new_c = 'K'; break; + case 'Y': new_c = 'L'; break; + case 'Z': new_c = 'M'; break; + case 'a': new_c = 'n'; break; + case 'b': new_c = 'o'; break; + case 'c': new_c = 'p'; break; + case 'd': new_c = 'q'; break; + case 'e': new_c = 'r'; break; + case 'f': new_c = 's'; break; + case 'g': new_c = 't'; break; + case 'h': new_c = 'u'; break; + case 'i': new_c = 'v'; break; + case 'j': new_c = 'w'; break; + case 'k': new_c = 'x'; break; + case 'l': new_c = 'y'; break; + case 'm': new_c = 'z'; break; + case 'n': new_c = 'a'; break; + case 'o': new_c = 'b'; break; + case 'p': new_c = 'c'; break; + case 'q': new_c = 'd'; break; + case 'r': new_c = 'e'; break; + case 's': new_c = 'f'; break; + case 't': new_c = 'g'; break; + case 'u': new_c = 'h'; break; + case 'v': new_c = 'i'; break; + case 'w': new_c = 'j'; break; + case 'x': new_c = 'k'; break; + case 'y': new_c = 'l'; break; + case 'z': new_c = 'm'; break; + } + *new_p++ = new_c; + } while (len--); + SvCUR_set(newkey, SvCUR(keysv)); + SvPOK_on(newkey); + if (SvUTF8(keysv)) + SvUTF8_on(newkey); + + mg->mg_obj = newkey; + } } return 0; } @@ -374,10 +394,10 @@ blockhook_csc_start(pTHX_ int full) SAVEGENERICSV(GvAV(MY_CXT.cscgv)); if (cur) { - I32 i; + Size_t i; AV *const new_av = newAV(); - for (i = 0; i <= av_tindex(cur); i++) { + for (i = 0; i < av_count(cur); i++) { av_store(new_av, i, newSVsv(*av_fetch(cur, i, 0))); } @@ -404,7 +424,7 @@ blockhook_test_start(pTHX_ int full) { dMY_CXT; AV *av; - + if (MY_CXT.bhk_record) { av = newAV(); av_push(av, newSVpvs("start")); @@ -455,37 +475,43 @@ my_peep (pTHX_ OP *o) dMY_CXT; if (!o) - return; + return; MY_CXT.orig_peep(aTHX_ o); if (!MY_CXT.peep_recording) - return; + return; for (; o; o = o->op_next) { - if (o->op_type == OP_CONST && cSVOPx_sv(o) && SvPOK(cSVOPx_sv(o))) { - av_push(MY_CXT.peep_recorder, newSVsv(cSVOPx_sv(o))); - } + if (o->op_type == OP_CONST && cSVOPx_sv(o) && SvPOK(cSVOPx_sv(o))) { + av_push(MY_CXT.peep_recorder, newSVsv(cSVOPx_sv(o))); + } } } STATIC void -my_rpeep (pTHX_ OP *o) +my_rpeep (pTHX_ OP *first) { dMY_CXT; + OP *o, *t; - if (!o) - return; + if (!first) + return; - MY_CXT.orig_rpeep(aTHX_ o); + MY_CXT.orig_rpeep(aTHX_ first); if (!MY_CXT.peep_recording) - return; + return; - for (; o; o = o->op_next) { - if (o->op_type == OP_CONST && cSVOPx_sv(o) && SvPOK(cSVOPx_sv(o))) { - av_push(MY_CXT.rpeep_recorder, newSVsv(cSVOPx_sv(o))); - } + for (o = first, t = first; o; o = o->op_next, t = t->op_next) { + if (o->op_type == OP_CONST && cSVOPx_sv(o) && SvPOK(cSVOPx_sv(o))) { + av_push(MY_CXT.rpeep_recorder, newSVsv(cSVOPx_sv(o))); + } + o = o->op_next; + if (!o || o == t) break; + if (o->op_type == OP_CONST && cSVOPx_sv(o) && SvPOK(cSVOPx_sv(o))) { + av_push(MY_CXT.rpeep_recorder, newSVsv(cSVOPx_sv(o))); + } } } @@ -504,9 +530,9 @@ THX_ck_entersub_args_scalars(pTHX_ OP *entersubop, GV *namegv, SV *ckobj) PERL_UNUSED_ARG(namegv); PERL_UNUSED_ARG(ckobj); if (!OpHAS_SIBLING(aop)) - aop = cUNOPx(aop)->op_first; + aop = cUNOPx(aop)->op_first; for (aop = OpSIBLING(aop); OpHAS_SIBLING(aop); aop = OpSIBLING(aop)) { - op_contextualize(aop, G_SCALAR); + op_contextualize(aop, G_SCALAR); } return entersubop; } @@ -521,23 +547,23 @@ THX_ck_entersub_multi_sum(pTHX_ OP *entersubop, GV *namegv, SV *ckobj) PERL_UNUSED_ARG(ckobj); if (!OpHAS_SIBLING(pushop)) { parent = pushop; - pushop = cUNOPx(pushop)->op_first; + pushop = cUNOPx(pushop)->op_first; } while (1) { - OP *aop = OpSIBLING(pushop); - if (!OpHAS_SIBLING(aop)) - break; + OP *aop = OpSIBLING(pushop); + if (!OpHAS_SIBLING(aop)) + break; /* cut out first arg */ op_sibling_splice(parent, pushop, 1, NULL); - op_contextualize(aop, G_SCALAR); - if (sumop) { - sumop = newBINOP(OP_ADD, 0, sumop, aop); - } else { - sumop = aop; - } + op_contextualize(aop, G_SCALAR); + if (sumop) { + sumop = newBINOP(OP_ADD, 0, sumop, aop); + } else { + sumop = aop; + } } if (!sumop) - sumop = newSVOP(OP_CONST, 0, newSViv(0)); + sumop = newSVOP(OP_CONST, 0, newSViv(0)); op_free(entersubop); return sumop; } @@ -548,18 +574,18 @@ test_op_list_describe_part(SV *res, OP *o) { sv_catpv(res, PL_op_name[o->op_type]); switch (o->op_type) { - case OP_CONST: { - sv_catpvf(res, "(%d)", (int)SvIV(cSVOPx(o)->op_sv)); - } break; + case OP_CONST: { + sv_catpvf(res, "(%d)", (int)SvIV(cSVOPx(o)->op_sv)); + } break; } if (o->op_flags & OPf_KIDS) { - OP *k; - sv_catpvs(res, "["); - for (k = cUNOPx(o)->op_first; k; k = OpSIBLING(k)) - test_op_list_describe_part(res, k); - sv_catpvs(res, "]"); + OP *k; + sv_catpvs(res, "["); + for (k = cUNOPx(o)->op_first; k; k = OpSIBLING(k)) + test_op_list_describe_part(res, k); + sv_catpvs(res, "]"); } else { - sv_catpvs(res, "."); + sv_catpvs(res, "."); } } @@ -568,7 +594,7 @@ test_op_list_describe(OP *o) { SV *res = sv_2mortal(newSVpvs("")); if (o) - test_op_list_describe_part(res, o); + test_op_list_describe_part(res, o); return SvPVX(res); } @@ -692,7 +718,7 @@ THX_ck_entersub_postinc(pTHX_ OP *entersubop, GV *namegv, SV *ckobj) op_sibling_splice(parent, pushop, 1, NULL); op_free(entersubop); return newUNOP(OP_POSTINC, 0, - op_lvalue(op_contextualize(argop, G_SCALAR), OP_POSTINC)); + op_lvalue(op_contextualize(argop, G_SCALAR), OP_POSTINC)); } STATIC OP * @@ -707,44 +733,44 @@ THX_ck_entersub_pad_scalar(pTHX_ OP *entersubop, GV *namegv, SV *ckobj) pushop = cUNOPx(pushop)->op_first; argop = OpSIBLING(pushop); if(argop->op_type != OP_CONST || OpSIBLING(argop)->op_type != OP_CONST) - croak("bad argument expression type for pad_scalar()"); + croak("bad argument expression type for pad_scalar()"); a0 = cSVOPx_sv(argop); a1 = cSVOPx_sv(OpSIBLING(argop)); switch(SvIV(a0)) { - case 1: { - SV *namesv = sv_2mortal(newSVpvs("$")); - sv_catsv(namesv, a1); - padoff = pad_findmy_sv(namesv, 0); - } break; - case 2: { - char *namepv; - STRLEN namelen; - SV *namesv = sv_2mortal(newSVpvs("$")); - sv_catsv(namesv, a1); - namepv = SvPV(namesv, namelen); - padoff = pad_findmy_pvn(namepv, namelen, SvUTF8(namesv)); - } break; - case 3: { - char *namepv; - SV *namesv = sv_2mortal(newSVpvs("$")); - sv_catsv(namesv, a1); - namepv = SvPV_nolen(namesv); - padoff = pad_findmy_pv(namepv, SvUTF8(namesv)); - } break; - case 4: { - padoff = pad_findmy_pvs("$foo", 0); - } break; - default: croak("bad type value for pad_scalar()"); + case 1: { + SV *namesv = sv_2mortal(newSVpvs("$")); + sv_catsv(namesv, a1); + padoff = pad_findmy_sv(namesv, 0); + } break; + case 2: { + char *namepv; + STRLEN namelen; + SV *namesv = sv_2mortal(newSVpvs("$")); + sv_catsv(namesv, a1); + namepv = SvPV(namesv, namelen); + padoff = pad_findmy_pvn(namepv, namelen, SvUTF8(namesv)); + } break; + case 3: { + char *namepv; + SV *namesv = sv_2mortal(newSVpvs("$")); + sv_catsv(namesv, a1); + namepv = SvPV_nolen(namesv); + padoff = pad_findmy_pv(namepv, SvUTF8(namesv)); + } break; + case 4: { + padoff = pad_findmy_pvs("$foo", 0); + } break; + default: croak("bad type value for pad_scalar()"); } op_free(entersubop); if(padoff == NOT_IN_PAD) { - return newSVOP(OP_CONST, 0, newSVpvs("NOT_IN_PAD")); + return newSVOP(OP_CONST, 0, newSVpvs("NOT_IN_PAD")); } else if(PAD_COMPNAME_FLAGS_isOUR(padoff)) { - return newSVOP(OP_CONST, 0, newSVpvs("NOT_MY")); + return newSVOP(OP_CONST, 0, newSVpvs("NOT_MY")); } else { - OP *padop = newOP(OP_PADSV, 0); - padop->op_targ = padoff; - return padop; + OP *padop = newOP(OP_PADSV, 0); + padop->op_targ = padoff; + return padop; } } @@ -787,14 +813,14 @@ static OP *THX_parse_var(pTHX) OP *padop; if(*s != '$') croak("RPN syntax error"); while(1) { - char c = *++s; - if(!isALNUM(c)) break; + char c = *++s; + if(!isALNUM(c)) break; } if(s-start < 2) croak("RPN syntax error"); lex_read_to(s); varpos = pad_findmy_pvn(start, s-start, 0); if(varpos == NOT_IN_PAD || PAD_COMPNAME_FLAGS_isOUR(varpos)) - croak("RPN only supports \"my\" variables"); + croak("RPN only supports \"my\" variables"); padop = newOP(OP_PADSV, 0); padop->op_targ = varpos; return padop; @@ -814,64 +840,64 @@ static OP *THX_parse_rpn_expr(pTHX) OP *parent = mkBINOP(OP_NULL, NULL, NULL); while(1) { - I32 c; - lex_read_space(0); - c = lex_peek_unichar(0); - switch(c) { - case /*(*/')': case /*{*/'}': { - OP *result = pop_rpn_item(); - if(cLISTOPx(parent)->op_first) + I32 c; + lex_read_space(0); + c = lex_peek_unichar(0); + switch(c) { + case /*(*/')': case /*{*/'}': { + OP *result = pop_rpn_item(); + if(cLISTOPx(parent)->op_first) croak("RPN expression must return a single value"); op_free(parent); - return result; - } break; - case '0': case '1': case '2': case '3': case '4': - case '5': case '6': case '7': case '8': case '9': { - UV val = 0; - do { - lex_read_unichar(0); - val = 10*val + (c - '0'); - c = lex_peek_unichar(0); - } while(c >= '0' && c <= '9'); - push_rpn_item(newSVOP(OP_CONST, 0, newSVuv(val))); - } break; - case '$': { - push_rpn_item(parse_var()); - } break; - case '+': { - OP *b = pop_rpn_item(); - OP *a = pop_rpn_item(); - lex_read_unichar(0); - push_rpn_item(newBINOP(OP_I_ADD, 0, a, b)); - } break; - case '-': { - OP *b = pop_rpn_item(); - OP *a = pop_rpn_item(); - lex_read_unichar(0); - push_rpn_item(newBINOP(OP_I_SUBTRACT, 0, a, b)); - } break; - case '*': { - OP *b = pop_rpn_item(); - OP *a = pop_rpn_item(); - lex_read_unichar(0); - push_rpn_item(newBINOP(OP_I_MULTIPLY, 0, a, b)); - } break; - case '/': { - OP *b = pop_rpn_item(); - OP *a = pop_rpn_item(); - lex_read_unichar(0); - push_rpn_item(newBINOP(OP_I_DIVIDE, 0, a, b)); - } break; - case '%': { - OP *b = pop_rpn_item(); - OP *a = pop_rpn_item(); - lex_read_unichar(0); - push_rpn_item(newBINOP(OP_I_MODULO, 0, a, b)); - } break; - default: { - croak("RPN syntax error"); - } break; - } + return result; + } break; + case '0': case '1': case '2': case '3': case '4': + case '5': case '6': case '7': case '8': case '9': { + UV val = 0; + do { + lex_read_unichar(0); + val = 10*val + (c - '0'); + c = lex_peek_unichar(0); + } while(c >= '0' && c <= '9'); + push_rpn_item(newSVOP(OP_CONST, 0, newSVuv(val))); + } break; + case '$': { + push_rpn_item(parse_var()); + } break; + case '+': { + OP *b = pop_rpn_item(); + OP *a = pop_rpn_item(); + lex_read_unichar(0); + push_rpn_item(newBINOP(OP_I_ADD, 0, a, b)); + } break; + case '-': { + OP *b = pop_rpn_item(); + OP *a = pop_rpn_item(); + lex_read_unichar(0); + push_rpn_item(newBINOP(OP_I_SUBTRACT, 0, a, b)); + } break; + case '*': { + OP *b = pop_rpn_item(); + OP *a = pop_rpn_item(); + lex_read_unichar(0); + push_rpn_item(newBINOP(OP_I_MULTIPLY, 0, a, b)); + } break; + case '/': { + OP *b = pop_rpn_item(); + OP *a = pop_rpn_item(); + lex_read_unichar(0); + push_rpn_item(newBINOP(OP_I_DIVIDE, 0, a, b)); + } break; + case '%': { + OP *b = pop_rpn_item(); + OP *a = pop_rpn_item(); + lex_read_unichar(0); + push_rpn_item(newBINOP(OP_I_MODULO, 0, a, b)); + } break; + default: { + croak("RPN syntax error"); + } break; + } } } @@ -881,11 +907,11 @@ static OP *THX_parse_keyword_rpn(pTHX) OP *op; lex_read_space(0); if(lex_peek_unichar(0) != '('/*)*/) - croak("RPN expression must be parenthesised"); + croak("RPN expression must be parenthesised"); lex_read_unichar(0); op = parse_rpn_expr(); if(lex_peek_unichar(0) != /*(*/')') - croak("RPN expression must be parenthesised"); + croak("RPN expression must be parenthesised"); lex_read_unichar(0); return op; } @@ -898,11 +924,11 @@ static OP *THX_parse_keyword_calcrpn(pTHX) varop = parse_var(); lex_read_space(0); if(lex_peek_unichar(0) != '{'/*}*/) - croak("RPN expression must be braced"); + croak("RPN expression must be braced"); lex_read_unichar(0); exprop = parse_rpn_expr(); if(lex_peek_unichar(0) != /*{*/'}') - croak("RPN expression must be braced"); + croak("RPN expression must be braced"); lex_read_unichar(0); return newASSIGNOP(OPf_STACKED, varop, 0, exprop); } @@ -915,14 +941,14 @@ static OP *THX_parse_keyword_stufftest(pTHX) lex_read_space(0); do_stuff = lex_peek_unichar(0) == '+'; if(do_stuff) { - lex_read_unichar(0); - lex_read_space(0); + lex_read_unichar(0); + lex_read_space(0); } c = lex_peek_unichar(0); if(c == ';') { - lex_read_unichar(0); + lex_read_unichar(0); } else if(c != /*{*/'}') { - croak("syntax error"); + croak("syntax error"); } if(do_stuff) lex_stuff_pvs(" ", 0); return newOP(OP_NULL, 0); @@ -935,7 +961,7 @@ static OP *THX_parse_keyword_swaptwostmts(pTHX) a = parse_fullstmt(0); b = parse_fullstmt(0); if(a && b) - PL_hints |= HINT_BLOCK_SCOPE; + PL_hints |= HINT_BLOCK_SCOPE; return op_append_list(OP_LINESEQ, b, a); } @@ -943,7 +969,7 @@ static OP *THX_parse_keyword_swaptwostmts(pTHX) static OP *THX_parse_keyword_looprest(pTHX) { return newWHILEOP(0, 1, NULL, newSVOP(OP_CONST, 0, &PL_sv_yes), - parse_stmtseq(0), NULL, 1); + parse_stmtseq(0), NULL, 1); } #define parse_keyword_scopelessblock() THX_parse_keyword_scopelessblock(aTHX) @@ -990,7 +1016,7 @@ static OP *THX_parse_keyword_stmtsasexpr(pTHX) static OP *THX_parse_keyword_loopblock(pTHX) { return newWHILEOP(0, 1, NULL, newSVOP(OP_CONST, 0, &PL_sv_yes), - parse_block(0), NULL, 1); + parse_block(0), NULL, 1); } #define parse_keyword_blockasexpr() THX_parse_keyword_blockasexpr(aTHX) @@ -1072,47 +1098,47 @@ static OP *THX_parse_keyword_subsignature(pTHX) * OP_NEXTSTATE-separated OP_ARGCHECK and OP_ARGELEMs */ if(sigop->op_type != OP_NULL) - croak("Expected parse_subsignature() to yield an OP_NULL"); - + croak("Expected parse_subsignature() to yield an OP_NULL"); + if(!(sigop->op_flags & OPf_KIDS)) - croak("Expected parse_subsignature() to yield an OP_NULL with kids"); + croak("Expected parse_subsignature() to yield an OP_NULL with kids"); listop = cUNOPx(sigop)->op_first; if(listop->op_type != OP_LINESEQ) - croak("Expected parse_subsignature() to yield an OP_LINESEQ"); + croak("Expected parse_subsignature() to yield an OP_LINESEQ"); for(kid = cLISTOPx(listop)->op_first; kid; kid = OpSIBLING(kid)) { - switch(kid->op_type) { - case OP_NEXTSTATE: - /* Only emit the first one otherwise they get boring */ - if(seen_nextstate) - break; - seen_nextstate++; - retop = op_append_list(OP_LIST, retop, newSVOP(OP_CONST, 0, - /* newSVpvf("nextstate:%s:%d", CopFILE(cCOPx(kid)), cCOPx(kid)->cop_line))); */ - newSVpvf("nextstate:%u", (unsigned int)cCOPx(kid)->cop_line))); - break; - case OP_ARGCHECK: { + switch(kid->op_type) { + case OP_NEXTSTATE: + /* Only emit the first one otherwise they get boring */ + if(seen_nextstate) + break; + seen_nextstate++; + retop = op_append_list(OP_LIST, retop, newSVOP(OP_CONST, 0, + /* newSVpvf("nextstate:%s:%d", CopFILE(cCOPx(kid)), cCOPx(kid)->cop_line))); */ + newSVpvf("nextstate:%u", (unsigned int)cCOPx(kid)->cop_line))); + break; + case OP_ARGCHECK: { struct op_argcheck_aux *p = (struct op_argcheck_aux*)(cUNOP_AUXx(kid)->op_aux); - retop = op_append_list(OP_LIST, retop, newSVOP(OP_CONST, 0, - newSVpvf("argcheck:%" UVuf ":%" UVuf ":%c", + retop = op_append_list(OP_LIST, retop, newSVOP(OP_CONST, 0, + newSVpvf("argcheck:%" UVuf ":%" UVuf ":%c", p->params, p->opt_params, p->slurpy ? p->slurpy : '-'))); - break; - } - case OP_ARGELEM: { - PADOFFSET padix = kid->op_targ; - PADNAMELIST *names = PadlistNAMES(CvPADLIST(find_runcv(0))); - char *namepv = PadnamePV(padnamelist_fetch(names, padix)); - retop = op_append_list(OP_LIST, retop, newSVOP(OP_CONST, 0, - newSVpvf(kid->op_flags & OPf_KIDS ? "argelem:%s:d" : "argelem:%s", namepv))); - break; - } - default: - fprintf(stderr, "TODO: examine kid %p (optype=%s)\n", kid, PL_op_name[kid->op_type]); - break; - } + break; + } + case OP_ARGELEM: { + PADOFFSET padix = kid->op_targ; + PADNAMELIST *names = PadlistNAMES(CvPADLIST(find_runcv(0))); + char *namepv = PadnamePV(padnamelist_fetch(names, padix)); + retop = op_append_list(OP_LIST, retop, newSVOP(OP_CONST, 0, + newSVpvf(kid->op_flags & OPf_KIDS ? "argelem:%s:d" : "argelem:%s", namepv))); + break; + } + default: + fprintf(stderr, "TODO: examine kid %p (optype=%s)\n", kid, PL_op_name[kid->op_type]); + break; + } } op_free(sigop); @@ -1227,7 +1253,7 @@ static int THX_keyword_active(pTHX_ SV *hintkey_sv) HE *he; if(!GvHV(PL_hintgv)) return 0; he = hv_fetch_ent(GvHV(PL_hintgv), hintkey_sv, 0, - SvSHARED_HASH(hintkey_sv)); + SvSHARED_HASH(hintkey_sv)); return he && SvTRUE(HeVAL(he)); } @@ -1235,92 +1261,92 @@ static int my_keyword_plugin(pTHX_ char *keyword_ptr, STRLEN keyword_len, OP **op_ptr) { if (memEQs(keyword_ptr, keyword_len, "rpn") && - keyword_active(hintkey_rpn_sv)) { - *op_ptr = parse_keyword_rpn(); - return KEYWORD_PLUGIN_EXPR; + keyword_active(hintkey_rpn_sv)) { + *op_ptr = parse_keyword_rpn(); + return KEYWORD_PLUGIN_EXPR; } else if (memEQs(keyword_ptr, keyword_len, "calcrpn") && - keyword_active(hintkey_calcrpn_sv)) { - *op_ptr = parse_keyword_calcrpn(); - return KEYWORD_PLUGIN_STMT; + keyword_active(hintkey_calcrpn_sv)) { + *op_ptr = parse_keyword_calcrpn(); + return KEYWORD_PLUGIN_STMT; } else if (memEQs(keyword_ptr, keyword_len, "stufftest") && - keyword_active(hintkey_stufftest_sv)) { - *op_ptr = parse_keyword_stufftest(); - return KEYWORD_PLUGIN_STMT; + keyword_active(hintkey_stufftest_sv)) { + *op_ptr = parse_keyword_stufftest(); + return KEYWORD_PLUGIN_STMT; } else if (memEQs(keyword_ptr, keyword_len, "swaptwostmts") && - keyword_active(hintkey_swaptwostmts_sv)) { - *op_ptr = parse_keyword_swaptwostmts(); - return KEYWORD_PLUGIN_STMT; + keyword_active(hintkey_swaptwostmts_sv)) { + *op_ptr = parse_keyword_swaptwostmts(); + return KEYWORD_PLUGIN_STMT; } else if (memEQs(keyword_ptr, keyword_len, "looprest") && - keyword_active(hintkey_looprest_sv)) { - *op_ptr = parse_keyword_looprest(); - return KEYWORD_PLUGIN_STMT; + keyword_active(hintkey_looprest_sv)) { + *op_ptr = parse_keyword_looprest(); + return KEYWORD_PLUGIN_STMT; } else if (memEQs(keyword_ptr, keyword_len, "scopelessblock") && - keyword_active(hintkey_scopelessblock_sv)) { - *op_ptr = parse_keyword_scopelessblock(); - return KEYWORD_PLUGIN_STMT; + keyword_active(hintkey_scopelessblock_sv)) { + *op_ptr = parse_keyword_scopelessblock(); + return KEYWORD_PLUGIN_STMT; } else if (memEQs(keyword_ptr, keyword_len, "stmtasexpr") && - keyword_active(hintkey_stmtasexpr_sv)) { - *op_ptr = parse_keyword_stmtasexpr(); - return KEYWORD_PLUGIN_EXPR; + keyword_active(hintkey_stmtasexpr_sv)) { + *op_ptr = parse_keyword_stmtasexpr(); + return KEYWORD_PLUGIN_EXPR; } else if (memEQs(keyword_ptr, keyword_len, "stmtsasexpr") && - keyword_active(hintkey_stmtsasexpr_sv)) { - *op_ptr = parse_keyword_stmtsasexpr(); - return KEYWORD_PLUGIN_EXPR; + keyword_active(hintkey_stmtsasexpr_sv)) { + *op_ptr = parse_keyword_stmtsasexpr(); + return KEYWORD_PLUGIN_EXPR; } else if (memEQs(keyword_ptr, keyword_len, "loopblock") && - keyword_active(hintkey_loopblock_sv)) { - *op_ptr = parse_keyword_loopblock(); - return KEYWORD_PLUGIN_STMT; + keyword_active(hintkey_loopblock_sv)) { + *op_ptr = parse_keyword_loopblock(); + return KEYWORD_PLUGIN_STMT; } else if (memEQs(keyword_ptr, keyword_len, "blockasexpr") && - keyword_active(hintkey_blockasexpr_sv)) { - *op_ptr = parse_keyword_blockasexpr(); - return KEYWORD_PLUGIN_EXPR; + keyword_active(hintkey_blockasexpr_sv)) { + *op_ptr = parse_keyword_blockasexpr(); + return KEYWORD_PLUGIN_EXPR; } else if (memEQs(keyword_ptr, keyword_len, "swaplabel") && - keyword_active(hintkey_swaplabel_sv)) { - *op_ptr = parse_keyword_swaplabel(); - return KEYWORD_PLUGIN_STMT; + keyword_active(hintkey_swaplabel_sv)) { + *op_ptr = parse_keyword_swaplabel(); + return KEYWORD_PLUGIN_STMT; } else if (memEQs(keyword_ptr, keyword_len, "labelconst") && - keyword_active(hintkey_labelconst_sv)) { - *op_ptr = parse_keyword_labelconst(); - return KEYWORD_PLUGIN_EXPR; + keyword_active(hintkey_labelconst_sv)) { + *op_ptr = parse_keyword_labelconst(); + return KEYWORD_PLUGIN_EXPR; } else if (memEQs(keyword_ptr, keyword_len, "arrayfullexpr") && - keyword_active(hintkey_arrayfullexpr_sv)) { - *op_ptr = parse_keyword_arrayfullexpr(); - return KEYWORD_PLUGIN_EXPR; + keyword_active(hintkey_arrayfullexpr_sv)) { + *op_ptr = parse_keyword_arrayfullexpr(); + return KEYWORD_PLUGIN_EXPR; } else if (memEQs(keyword_ptr, keyword_len, "arraylistexpr") && - keyword_active(hintkey_arraylistexpr_sv)) { - *op_ptr = parse_keyword_arraylistexpr(); - return KEYWORD_PLUGIN_EXPR; + keyword_active(hintkey_arraylistexpr_sv)) { + *op_ptr = parse_keyword_arraylistexpr(); + return KEYWORD_PLUGIN_EXPR; } else if (memEQs(keyword_ptr, keyword_len, "arraytermexpr") && - keyword_active(hintkey_arraytermexpr_sv)) { - *op_ptr = parse_keyword_arraytermexpr(); - return KEYWORD_PLUGIN_EXPR; + keyword_active(hintkey_arraytermexpr_sv)) { + *op_ptr = parse_keyword_arraytermexpr(); + return KEYWORD_PLUGIN_EXPR; } else if (memEQs(keyword_ptr, keyword_len, "arrayarithexpr") && - keyword_active(hintkey_arrayarithexpr_sv)) { - *op_ptr = parse_keyword_arrayarithexpr(); - return KEYWORD_PLUGIN_EXPR; + keyword_active(hintkey_arrayarithexpr_sv)) { + *op_ptr = parse_keyword_arrayarithexpr(); + return KEYWORD_PLUGIN_EXPR; } else if (memEQs(keyword_ptr, keyword_len, "arrayexprflags") && - keyword_active(hintkey_arrayexprflags_sv)) { - *op_ptr = parse_keyword_arrayexprflags(); - return KEYWORD_PLUGIN_EXPR; + keyword_active(hintkey_arrayexprflags_sv)) { + *op_ptr = parse_keyword_arrayexprflags(); + return KEYWORD_PLUGIN_EXPR; } else if (memEQs(keyword_ptr, keyword_len, "DEFSV") && - keyword_active(hintkey_DEFSV_sv)) { - *op_ptr = parse_keyword_DEFSV(); - return KEYWORD_PLUGIN_EXPR; + keyword_active(hintkey_DEFSV_sv)) { + *op_ptr = parse_keyword_DEFSV(); + return KEYWORD_PLUGIN_EXPR; } else if (memEQs(keyword_ptr, keyword_len, "with_vars") && - keyword_active(hintkey_with_vars_sv)) { - *op_ptr = parse_keyword_with_vars(); - return KEYWORD_PLUGIN_STMT; + keyword_active(hintkey_with_vars_sv)) { + *op_ptr = parse_keyword_with_vars(); + return KEYWORD_PLUGIN_STMT; } else if (memEQs(keyword_ptr, keyword_len, "join_with_space") && - keyword_active(hintkey_join_with_space_sv)) { - *op_ptr = parse_join_with_space(); - return KEYWORD_PLUGIN_EXPR; + keyword_active(hintkey_join_with_space_sv)) { + *op_ptr = parse_join_with_space(); + return KEYWORD_PLUGIN_EXPR; } else if (memEQs(keyword_ptr, keyword_len, "subsignature") && - keyword_active(hintkey_subsignature_sv)) { - *op_ptr = parse_keyword_subsignature(); - return KEYWORD_PLUGIN_EXPR; + keyword_active(hintkey_subsignature_sv)) { + *op_ptr = parse_keyword_subsignature(); + return KEYWORD_PLUGIN_EXPR; } else { assert(next_keyword_plugin != my_keyword_plugin); - return next_keyword_plugin(aTHX_ keyword_ptr, keyword_len, op_ptr); + return next_keyword_plugin(aTHX_ keyword_ptr, keyword_len, op_ptr); } } @@ -1352,8 +1378,8 @@ filter_call(pTHX_ int idx, SV *buf_sv, int maxlen) p = SvPV_force_nolen(buf_sv); end = p + SvCUR(buf_sv); while (p < end) { - if (*p == 'o') *p = 'e'; - p++; + if (*p == 'o') *p = 'e'; + p++; } return SvCUR(buf_sv); } @@ -1363,8 +1389,8 @@ myget_linear_isa(pTHX_ HV *stash, U32 level) { GV **gvp = (GV **)hv_fetchs(stash, "ISA", 0); PERL_UNUSED_ARG(level); return gvp && *gvp && GvAV(*gvp) - ? GvAV(*gvp) - : (AV *)sv_2mortal((SV *)newAV()); + ? GvAV(*gvp) + : (AV *)sv_2mortal((SV *)newAV()); } @@ -1383,9 +1409,9 @@ addissub_myck_add(pTHX_ OP *op) OP *aop, *bop; U8 flags; if (!(flag_svp && SvTRUE(*flag_svp) && (op->op_flags & OPf_KIDS) && - (aop = cBINOPx(op)->op_first) && (bop = OpSIBLING(aop)) && - !OpHAS_SIBLING(bop))) - return addissub_nxck_add(aTHX_ op); + (aop = cBINOPx(op)->op_first) && (bop = OpSIBLING(aop)) && + !OpHAS_SIBLING(bop))) + return addissub_nxck_add(aTHX_ op); flags = op->op_flags; op_sibling_splice(op, NULL, 1, NULL); /* excise aop */ op_sibling_splice(op, NULL, 1, NULL); /* excise bop */ @@ -1409,17 +1435,17 @@ my_ck_rv2cv(pTHX_ OP *o) && (ref = cSVOPx(aop)->op_sv) && SvPOK(ref) && SvCUR(ref) && *(SvEND(ref)-1) == 'o') { - SvGROW(ref, SvCUR(ref)+2); - *SvEND(ref) = '_'; - SvCUR(ref)++; /* Not _set, so we don't accidentally break non-PERL_CORE */ - *SvEND(ref) = '\0'; + SvGROW(ref, SvCUR(ref)+2); + *SvEND(ref) = '_'; + SvCUR(ref)++; /* Not _set, so we don't accidentally break non-PERL_CORE */ + *SvEND(ref) = '\0'; } return old_ck_rv2cv(aTHX_ o); } #include "const-c.inc" -MODULE = XS::APItest PACKAGE = XS::APItest +MODULE = XS::APItest PACKAGE = XS::APItest INCLUDE: const-xs.inc @@ -1430,26 +1456,26 @@ assertx(int x) CODE: /* this only needs to compile and checks that assert() can be used this way syntactically */ - (void)(assert(x), 1); - (void)(x); + (void)(assert(x), 1); + (void)(x); -MODULE = XS::APItest::utf8 PACKAGE = XS::APItest::utf8 +MODULE = XS::APItest::utf8 PACKAGE = XS::APItest::utf8 int bytes_cmp_utf8(bytes, utf8) - SV *bytes - SV *utf8 + SV *bytes + SV *utf8 PREINIT: - const U8 *b; - STRLEN blen; - const U8 *u; - STRLEN ulen; + const U8 *b; + STRLEN blen; + const U8 *u; + STRLEN ulen; CODE: - b = (const U8 *)SvPVbyte(bytes, blen); - u = (const U8 *)SvPVbyte(utf8, ulen); - RETVAL = bytes_cmp_utf8(b, blen, u, ulen); + b = (const U8 *)SvPVbyte(bytes, blen); + u = (const U8 *)SvPVbyte(utf8, ulen); + RETVAL = bytes_cmp_utf8(b, blen, u, ulen); OUTPUT: - RETVAL + RETVAL AV * test_utf8_to_bytes(bytes, len) @@ -1629,50 +1655,50 @@ test_uvchr_to_utf8_flags_msgs(uv, flags) OUTPUT: RETVAL -MODULE = XS::APItest:Overload PACKAGE = XS::APItest::Overload +MODULE = XS::APItest:Overload PACKAGE = XS::APItest::Overload void amagic_deref_call(sv, what) - SV *sv - int what + SV *sv + int what PPCODE: - /* The reference is owned by something else. */ - PUSHs(amagic_deref_call(sv, what)); + /* The reference is owned by something else. */ + PUSHs(amagic_deref_call(sv, what)); # I'd certainly like to discourage the use of this macro, given that we now # have amagic_deref_call void tryAMAGICunDEREF_var(sv, what) - SV *sv - int what + SV *sv + int what PPCODE: - { - SV **sp = &sv; - switch(what) { - case to_av_amg: - tryAMAGICunDEREF(to_av); - break; - case to_cv_amg: - tryAMAGICunDEREF(to_cv); - break; - case to_gv_amg: - tryAMAGICunDEREF(to_gv); - break; - case to_hv_amg: - tryAMAGICunDEREF(to_hv); - break; - case to_sv_amg: - tryAMAGICunDEREF(to_sv); - break; - default: - croak("Invalid value %d passed to tryAMAGICunDEREF_var", what); - } - } - /* The reference is owned by something else. */ - PUSHs(sv); - -MODULE = XS::APItest PACKAGE = XS::APItest::XSUB + { + SV **sp = &sv; + switch(what) { + case to_av_amg: + tryAMAGICunDEREF(to_av); + break; + case to_cv_amg: + tryAMAGICunDEREF(to_cv); + break; + case to_gv_amg: + tryAMAGICunDEREF(to_gv); + break; + case to_hv_amg: + tryAMAGICunDEREF(to_hv); + break; + case to_sv_amg: + tryAMAGICunDEREF(to_sv); + break; + default: + croak("Invalid value %d passed to tryAMAGICunDEREF_var", what); + } + } + /* The reference is owned by something else. */ + PUSHs(sv); + +MODULE = XS::APItest PACKAGE = XS::APItest::XSUB BOOT: newXS("XS::APItest::XSUB::XS_VERSION_undef", XS_XS__APItest__XSUB_XS_VERSION_undef, __FILE__); @@ -1746,310 +1772,302 @@ xsreturn_empty() PPCODE: XSRETURN_EMPTY; -MODULE = XS::APItest:Hash PACKAGE = XS::APItest::Hash +MODULE = XS::APItest:Hash PACKAGE = XS::APItest::Hash void rot13_hash(hash) - HV *hash - CODE: - { - struct ufuncs uf; - uf.uf_val = rot13_key; - uf.uf_set = 0; - uf.uf_index = 0; + HV *hash + CODE: + { + struct ufuncs uf; + uf.uf_val = rot13_key; + uf.uf_set = 0; + uf.uf_index = 0; - sv_magic((SV*)hash, NULL, PERL_MAGIC_uvar, (char*)&uf, sizeof(uf)); - } + sv_magic((SV*)hash, NULL, PERL_MAGIC_uvar, (char*)&uf, sizeof(uf)); + } void bitflip_hash(hash) - HV *hash - CODE: - { - struct ufuncs uf; - uf.uf_val = bitflip_key; - uf.uf_set = 0; - uf.uf_index = 0; + HV *hash + CODE: + { + struct ufuncs uf; + uf.uf_val = bitflip_key; + uf.uf_set = 0; + uf.uf_index = 0; - sv_magic((SV*)hash, NULL, PERL_MAGIC_uvar, (char*)&uf, sizeof(uf)); - } + sv_magic((SV*)hash, NULL, PERL_MAGIC_uvar, (char*)&uf, sizeof(uf)); + } #define UTF8KLEN(sv, len) (SvUTF8(sv) ? -(I32)len : (I32)len) bool exists(hash, key_sv) - PREINIT: - STRLEN len; - const char *key; - INPUT: - HV *hash - SV *key_sv - CODE: - key = SvPV(key_sv, len); - RETVAL = hv_exists(hash, key, UTF8KLEN(key_sv, len)); + PREINIT: + STRLEN len; + const char *key; + INPUT: + HV *hash + SV *key_sv + CODE: + key = SvPV(key_sv, len); + RETVAL = hv_exists(hash, key, UTF8KLEN(key_sv, len)); OUTPUT: RETVAL bool exists_ent(hash, key_sv) - PREINIT: - INPUT: - HV *hash - SV *key_sv - CODE: - RETVAL = hv_exists_ent(hash, key_sv, 0); + PREINIT: + INPUT: + HV *hash + SV *key_sv + CODE: + RETVAL = hv_exists_ent(hash, key_sv, 0); OUTPUT: RETVAL SV * delete(hash, key_sv, flags = 0) - PREINIT: - STRLEN len; - const char *key; - INPUT: - HV *hash - SV *key_sv - I32 flags; - CODE: - key = SvPV(key_sv, len); - /* It's already mortal, so need to increase reference count. */ - RETVAL - = SvREFCNT_inc(hv_delete(hash, key, UTF8KLEN(key_sv, len), flags)); + PREINIT: + STRLEN len; + const char *key; + INPUT: + HV *hash + SV *key_sv + I32 flags; + CODE: + key = SvPV(key_sv, len); + /* It's already mortal, so need to increase reference count. */ + RETVAL + = SvREFCNT_inc(hv_delete(hash, key, UTF8KLEN(key_sv, len), flags)); OUTPUT: RETVAL SV * delete_ent(hash, key_sv, flags = 0) - INPUT: - HV *hash - SV *key_sv - I32 flags; - CODE: - /* It's already mortal, so need to increase reference count. */ - RETVAL = SvREFCNT_inc(hv_delete_ent(hash, key_sv, flags, 0)); + INPUT: + HV *hash + SV *key_sv + I32 flags; + CODE: + /* It's already mortal, so need to increase reference count. */ + RETVAL = SvREFCNT_inc(hv_delete_ent(hash, key_sv, flags, 0)); OUTPUT: RETVAL SV * store_ent(hash, key, value) - PREINIT: - SV *copy; - HE *result; - INPUT: - HV *hash - SV *key - SV *value - CODE: - copy = newSV(0); - result = hv_store_ent(hash, key, copy, 0); - SvSetMagicSV(copy, value); - if (!result) { - SvREFCNT_dec(copy); - XSRETURN_EMPTY; - } - /* It's about to become mortal, so need to increase reference count. - */ - RETVAL = SvREFCNT_inc(HeVAL(result)); + PREINIT: + SV *copy; + HE *result; + INPUT: + HV *hash + SV *key + SV *value + CODE: + copy = newSV(0); + result = hv_store_ent(hash, key, copy, 0); + SvSetMagicSV(copy, value); + if (!result) { + SvREFCNT_dec(copy); + XSRETURN_EMPTY; + } + /* It's about to become mortal, so need to increase reference count. + */ + RETVAL = SvREFCNT_inc(HeVAL(result)); OUTPUT: RETVAL SV * store(hash, key_sv, value) - PREINIT: - STRLEN len; - const char *key; - SV *copy; - SV **result; - INPUT: - HV *hash - SV *key_sv - SV *value - CODE: - key = SvPV(key_sv, len); - copy = newSV(0); - result = hv_store(hash, key, UTF8KLEN(key_sv, len), copy, 0); - SvSetMagicSV(copy, value); - if (!result) { - SvREFCNT_dec(copy); - XSRETURN_EMPTY; - } - /* It's about to become mortal, so need to increase reference count. - */ - RETVAL = SvREFCNT_inc(*result); + PREINIT: + STRLEN len; + const char *key; + SV *copy; + SV **result; + INPUT: + HV *hash + SV *key_sv + SV *value + CODE: + key = SvPV(key_sv, len); + copy = newSV(0); + result = hv_store(hash, key, UTF8KLEN(key_sv, len), copy, 0); + SvSetMagicSV(copy, value); + if (!result) { + SvREFCNT_dec(copy); + XSRETURN_EMPTY; + } + /* It's about to become mortal, so need to increase reference count. + */ + RETVAL = SvREFCNT_inc(*result); OUTPUT: RETVAL SV * fetch_ent(hash, key_sv) - PREINIT: - HE *result; - INPUT: - HV *hash - SV *key_sv - CODE: - result = hv_fetch_ent(hash, key_sv, 0, 0); - if (!result) { - XSRETURN_EMPTY; - } - /* Force mg_get */ - RETVAL = newSVsv(HeVAL(result)); + PREINIT: + HE *result; + INPUT: + HV *hash + SV *key_sv + CODE: + result = hv_fetch_ent(hash, key_sv, 0, 0); + if (!result) { + XSRETURN_EMPTY; + } + /* Force mg_get */ + RETVAL = newSVsv(HeVAL(result)); OUTPUT: RETVAL SV * fetch(hash, key_sv) - PREINIT: - STRLEN len; - const char *key; - SV **result; - INPUT: - HV *hash - SV *key_sv - CODE: - key = SvPV(key_sv, len); - result = hv_fetch(hash, key, UTF8KLEN(key_sv, len), 0); - if (!result) { - XSRETURN_EMPTY; - } - /* Force mg_get */ - RETVAL = newSVsv(*result); + PREINIT: + STRLEN len; + const char *key; + SV **result; + INPUT: + HV *hash + SV *key_sv + CODE: + key = SvPV(key_sv, len); + result = hv_fetch(hash, key, UTF8KLEN(key_sv, len), 0); + if (!result) { + XSRETURN_EMPTY; + } + /* Force mg_get */ + RETVAL = newSVsv(*result); OUTPUT: RETVAL -#if defined (hv_common) - SV * common(params) - INPUT: - HV *params - PREINIT: - HE *result; - HV *hv = NULL; - SV *keysv = NULL; - const char *key = NULL; - STRLEN klen = 0; - int flags = 0; - int action = 0; - SV *val = NULL; - U32 hash = 0; - SV **svp; - CODE: - if ((svp = hv_fetchs(params, "hv", 0))) { - SV *const rv = *svp; - if (!SvROK(rv)) - croak("common passed a non-reference for parameter hv"); - hv = (HV *)SvRV(rv); - } - if ((svp = hv_fetchs(params, "keysv", 0))) - keysv = *svp; - if ((svp = hv_fetchs(params, "keypv", 0))) { - key = SvPV_const(*svp, klen); - if (SvUTF8(*svp)) - flags = HVhek_UTF8; - } - if ((svp = hv_fetchs(params, "action", 0))) - action = SvIV(*svp); - if ((svp = hv_fetchs(params, "val", 0))) - val = newSVsv(*svp); - if ((svp = hv_fetchs(params, "hash", 0))) - hash = SvUV(*svp); - - if (hv_fetchs(params, "hash_pv", 0)) { + INPUT: + HV *params + PREINIT: + HE *result; + HV *hv = NULL; + SV *keysv = NULL; + const char *key = NULL; + STRLEN klen = 0; + int flags = 0; + int action = 0; + SV *val = NULL; + U32 hash = 0; + SV **svp; + CODE: + if ((svp = hv_fetchs(params, "hv", 0))) { + SV *const rv = *svp; + if (!SvROK(rv)) + croak("common passed a non-reference for parameter hv"); + hv = (HV *)SvRV(rv); + } + if ((svp = hv_fetchs(params, "keysv", 0))) + keysv = *svp; + if ((svp = hv_fetchs(params, "keypv", 0))) { + key = SvPV_const(*svp, klen); + if (SvUTF8(*svp)) + flags = HVhek_UTF8; + } + if ((svp = hv_fetchs(params, "action", 0))) + action = SvIV(*svp); + if ((svp = hv_fetchs(params, "val", 0))) + val = newSVsv(*svp); + if ((svp = hv_fetchs(params, "hash", 0))) + hash = SvUV(*svp); + + if (hv_fetchs(params, "hash_pv", 0)) { assert(key); - PERL_HASH(hash, key, klen); - } - if (hv_fetchs(params, "hash_sv", 0)) { + PERL_HASH(hash, key, klen); + } + if (hv_fetchs(params, "hash_sv", 0)) { assert(keysv); { STRLEN len; const char *const p = SvPV(keysv, len); PERL_HASH(hash, p, len); } - } - - result = (HE *)hv_common(hv, keysv, key, klen, flags, action, val, hash); - if (!result) { - XSRETURN_EMPTY; - } - /* Force mg_get */ - RETVAL = newSVsv(HeVAL(result)); + } + + result = (HE *)hv_common(hv, keysv, key, klen, flags, action, val, hash); + if (!result) { + XSRETURN_EMPTY; + } + /* Force mg_get */ + RETVAL = newSVsv(HeVAL(result)); OUTPUT: RETVAL -#endif - void test_hv_free_ent() - PPCODE: - test_freeent(&Perl_hv_free_ent); - XSRETURN(4); + PPCODE: + test_freeent(&Perl_hv_free_ent); + XSRETURN(4); void test_hv_delayfree_ent() - PPCODE: - test_freeent(&Perl_hv_delayfree_ent); - XSRETURN(4); + PPCODE: + test_freeent(&Perl_hv_delayfree_ent); + XSRETURN(4); SV * test_share_unshare_pvn(input) - PREINIT: - STRLEN len; - U32 hash; - char *pvx; - char *p; - INPUT: - SV *input - CODE: - pvx = SvPV(input, len); - PERL_HASH(hash, pvx, len); - p = sharepvn(pvx, len, hash); - RETVAL = newSVpvn(p, len); - unsharepvn(p, len, hash); - OUTPUT: - RETVAL - -#if PERL_VERSION >= 9 + PREINIT: + STRLEN len; + U32 hash; + char *pvx; + char *p; + INPUT: + SV *input + CODE: + pvx = SvPV(input, len); + PERL_HASH(hash, pvx, len); + p = sharepvn(pvx, len, hash); + RETVAL = newSVpvn(p, len); + unsharepvn(p, len, hash); + OUTPUT: + RETVAL bool refcounted_he_exists(key, level=0) - SV *key - IV level - CODE: - if (level) { - croak("level must be zero, not %" IVdf, level); - } - RETVAL = (cop_hints_fetch_sv(PL_curcop, key, 0, 0) != &PL_sv_placeholder); - OUTPUT: - RETVAL + SV *key + IV level + CODE: + if (level) { + croak("level must be zero, not %" IVdf, level); + } + RETVAL = (cop_hints_fetch_sv(PL_curcop, key, 0, 0) != &PL_sv_placeholder); + OUTPUT: + RETVAL SV * refcounted_he_fetch(key, level=0) - SV *key - IV level - CODE: - if (level) { - croak("level must be zero, not %" IVdf, level); - } - RETVAL = cop_hints_fetch_sv(PL_curcop, key, 0, 0); - SvREFCNT_inc(RETVAL); - OUTPUT: - RETVAL - -#endif + SV *key + IV level + CODE: + if (level) { + croak("level must be zero, not %" IVdf, level); + } + RETVAL = cop_hints_fetch_sv(PL_curcop, key, 0, 0); + SvREFCNT_inc(RETVAL); + OUTPUT: + RETVAL void test_force_keys(HV *hv) PREINIT: HE *he; - SSize_t count = 0; + SSize_t count = 0; PPCODE: hv_iterinit(hv); he = hv_iternext(hv); while (he) { - SV *sv = HeSVKEY_force(he); - ++count; - EXTEND(SP, count); - PUSHs(sv_mortalcopy(sv)); + SV *sv = HeSVKEY_force(he); + ++count; + EXTEND(SP, count); + PUSHs(sv_mortalcopy(sv)); he = hv_iternext(hv); } @@ -2066,29 +2084,29 @@ sub CLEAR { %{$_[0]} = () } =cut -MODULE = XS::APItest:TempLv PACKAGE = XS::APItest::TempLv +MODULE = XS::APItest:TempLv PACKAGE = XS::APItest::TempLv void make_temp_mg_lv(sv) SV* sv PREINIT: - SV * const lv = newSV_type(SVt_PVLV); - STRLEN len; + SV * const lv = newSV_type(SVt_PVLV); + STRLEN len; PPCODE: SvPV(sv, len); - sv_magic(lv, NULL, PERL_MAGIC_substr, NULL, 0); - LvTYPE(lv) = 'x'; - LvTARG(lv) = SvREFCNT_inc_simple(sv); - LvTARGOFF(lv) = len == 0 ? 0 : 1; - LvTARGLEN(lv) = len < 2 ? 0 : len-2; + sv_magic(lv, NULL, PERL_MAGIC_substr, NULL, 0); + LvTYPE(lv) = 'x'; + LvTARG(lv) = SvREFCNT_inc_simple(sv); + LvTARGOFF(lv) = len == 0 ? 0 : 1; + LvTARGLEN(lv) = len < 2 ? 0 : len-2; - EXTEND(SP, 1); - ST(0) = sv_2mortal(lv); - XSRETURN(1); + EXTEND(SP, 1); + ST(0) = sv_2mortal(lv); + XSRETURN(1); -MODULE = XS::APItest::PtrTable PACKAGE = XS::APItest::PtrTable PREFIX = ptr_table_ +MODULE = XS::APItest::PtrTable PACKAGE = XS::APItest::PtrTable PREFIX = ptr_table_ void ptr_table_new(classname) @@ -2123,30 +2141,26 @@ void ptr_table_split(table) XS::APItest::PtrTable table -void -ptr_table_clear(table) -XS::APItest::PtrTable table - -MODULE = XS::APItest::AutoLoader PACKAGE = XS::APItest::AutoLoader +MODULE = XS::APItest::AutoLoader PACKAGE = XS::APItest::AutoLoader SV * AUTOLOAD() CODE: - RETVAL = newSVpvn_flags(SvPVX(cv), SvCUR(cv), SvUTF8(cv)); + RETVAL = newSVpvn_flags(SvPVX(cv), SvCUR(cv), SvUTF8(cv)); OUTPUT: - RETVAL + RETVAL SV * AUTOLOADp(...) PROTOTYPE: *$ CODE: PERL_UNUSED_ARG(items); - RETVAL = newSVpvn_flags(SvPVX(cv), SvCUR(cv), SvUTF8(cv)); + RETVAL = newSVpvn_flags(SvPVX(cv), SvCUR(cv), SvUTF8(cv)); OUTPUT: - RETVAL + RETVAL -MODULE = XS::APItest PACKAGE = XS::APItest +MODULE = XS::APItest PACKAGE = XS::APItest PROTOTYPES: DISABLE @@ -2229,7 +2243,7 @@ xop_build_optree () MY_CXT.xop_record = newAV(); kid = newSVOP(OP_CONST, 0, newSViv(42)); - + unop = (UNOP*)mkUNOP(OP_CUSTOM, kid); unop->op_ppaddr = pp_xop; unop->op_private = 0; @@ -2349,6 +2363,18 @@ print_long_double() # endif #endif +void +print_long_doubleL() + CODE: +#ifdef HAS_LONG_DOUBLE + /* used to test we allow the length modifier required by the standard */ + long double val = 7.0; + printf("%5.3Lf\n",val); +#else + double val = 7.0; + printf("%5.3f\n",val); +#endif + void print_int(val) int val @@ -2366,79 +2392,79 @@ print_float(val) float val CODE: printf("%5.3f\n",val); - + void print_flush() - CODE: - fflush(stdout); + CODE: + fflush(stdout); void mpushp() - PPCODE: - EXTEND(SP, 3); - mPUSHp("one", 3); - mPUSHp("two", 3); - mPUSHp("three", 5); - XSRETURN(3); + PPCODE: + EXTEND(SP, 3); + mPUSHp("one", 3); + mPUSHp("two", 3); + mPUSHp("three", 5); + XSRETURN(3); void mpushn() - PPCODE: - EXTEND(SP, 3); - mPUSHn(0.5); - mPUSHn(-0.25); - mPUSHn(0.125); - XSRETURN(3); + PPCODE: + EXTEND(SP, 3); + mPUSHn(0.5); + mPUSHn(-0.25); + mPUSHn(0.125); + XSRETURN(3); void mpushi() - PPCODE: - EXTEND(SP, 3); - mPUSHi(-1); - mPUSHi(2); - mPUSHi(-3); - XSRETURN(3); + PPCODE: + EXTEND(SP, 3); + mPUSHi(-1); + mPUSHi(2); + mPUSHi(-3); + XSRETURN(3); void mpushu() - PPCODE: - EXTEND(SP, 3); - mPUSHu(1); - mPUSHu(2); - mPUSHu(3); - XSRETURN(3); + PPCODE: + EXTEND(SP, 3); + mPUSHu(1); + mPUSHu(2); + mPUSHu(3); + XSRETURN(3); void mxpushp() - PPCODE: - mXPUSHp("one", 3); - mXPUSHp("two", 3); - mXPUSHp("three", 5); - XSRETURN(3); + PPCODE: + mXPUSHp("one", 3); + mXPUSHp("two", 3); + mXPUSHp("three", 5); + XSRETURN(3); void mxpushn() - PPCODE: - mXPUSHn(0.5); - mXPUSHn(-0.25); - mXPUSHn(0.125); - XSRETURN(3); + PPCODE: + mXPUSHn(0.5); + mXPUSHn(-0.25); + mXPUSHn(0.125); + XSRETURN(3); void mxpushi() - PPCODE: - mXPUSHi(-1); - mXPUSHi(2); - mXPUSHi(-3); - XSRETURN(3); + PPCODE: + mXPUSHi(-1); + mXPUSHi(2); + mXPUSHi(-3); + XSRETURN(3); void mxpushu() - PPCODE: - mXPUSHu(1); - mXPUSHu(2); - mXPUSHu(3); - XSRETURN(3); + PPCODE: + mXPUSHu(1); + mXPUSHu(2); + mXPUSHu(3); + XSRETURN(3); # test_EXTEND(): excerise the EXTEND() macro. @@ -2560,68 +2586,68 @@ call_sv(sv, flags, ...) SV* sv I32 flags PREINIT: - I32 i; + I32 i; PPCODE: - for (i=0; iblk_oldcop, "foo", 0); ST(5) = cop_hints_fetch_pvn(cx->blk_oldcop, "foo", 3, 0, 0); - ST(6) = cop_hints_fetch_sv(cx->blk_oldcop, + ST(6) = cop_hints_fetch_sv(cx->blk_oldcop, sv_2mortal(newSVpvs("foo")), 0, 0); hv = cop_hints_2hv(cx->blk_oldcop, 0); @@ -3022,57 +3048,85 @@ DPeek (sv) void BEGIN() CODE: - sv_inc(get_sv("XS::APItest::BEGIN_called", GV_ADD|GV_ADDMULTI)); + sv_inc(get_sv("XS::APItest::BEGIN_called", GV_ADD|GV_ADDMULTI)); void CHECK() CODE: - sv_inc(get_sv("XS::APItest::CHECK_called", GV_ADD|GV_ADDMULTI)); + sv_inc(get_sv("XS::APItest::CHECK_called", GV_ADD|GV_ADDMULTI)); void UNITCHECK() CODE: - sv_inc(get_sv("XS::APItest::UNITCHECK_called", GV_ADD|GV_ADDMULTI)); + sv_inc(get_sv("XS::APItest::UNITCHECK_called", GV_ADD|GV_ADDMULTI)); void INIT() CODE: - sv_inc(get_sv("XS::APItest::INIT_called", GV_ADD|GV_ADDMULTI)); + sv_inc(get_sv("XS::APItest::INIT_called", GV_ADD|GV_ADDMULTI)); void END() CODE: - sv_inc(get_sv("XS::APItest::END_called", GV_ADD|GV_ADDMULTI)); + sv_inc(get_sv("XS::APItest::END_called", GV_ADD|GV_ADDMULTI)); void utf16_to_utf8 (sv, ...) SV* sv - ALIAS: - utf16_to_utf8_reversed = 1 + ALIAS: + utf16_to_utf8_reversed = 1 + PREINIT: + STRLEN len; + U8 *source; + SV *dest; + Size_t got; + CODE: + source = (U8 *)SvPVbyte(sv, len); + /* Optionally only convert part of the buffer. */ + if (items > 1) { + len = SvUV(ST(1)); + } + /* Mortalise this right now, as we'll be testing croak()s */ + dest = sv_2mortal(newSV(len * 2 + 1)); + if (ix) { + utf16_to_utf8_reversed(source, (U8 *)SvPVX(dest), len, &got); + } else { + utf16_to_utf8(source, (U8 *)SvPVX(dest), len, &got); + } + SvCUR_set(dest, got); + SvPVX(dest)[got] = '\0'; + SvPOK_on(dest); + ST(0) = dest; + XSRETURN(1); + +void +utf8_to_utf16 (sv, ...) + SV* sv + ALIAS: + utf8_to_utf16_reversed = 1 PREINIT: STRLEN len; - U8 *source; - SV *dest; - Size_t got; - CODE: - if (ix) (void)SvPV_force_nolen(sv); - source = (U8 *)SvPVbyte(sv, len); - /* Optionally only convert part of the buffer. */ - if (items > 1) { - len = SvUV(ST(1)); - } - /* Mortalise this right now, as we'll be testing croak()s */ - dest = sv_2mortal(newSV(len * 2 + 1)); - if (ix) { - utf16_to_utf8_reversed(source, (U8 *)SvPVX(dest), len, &got); - } else { - utf16_to_utf8(source, (U8 *)SvPVX(dest), len, &got); - } - SvCUR_set(dest, got); - SvPVX(dest)[got] = '\0'; - SvPOK_on(dest); - ST(0) = dest; - XSRETURN(1); + U8 *source; + SV *dest; + Size_t got; + CODE: + source = (U8 *)SvPV(sv, len); + /* Optionally only convert part of the buffer. */ + if (items > 1) { + len = SvUV(ST(1)); + } + /* Mortalise this right now, as we'll be testing croak()s */ + dest = sv_2mortal(newSV(len * 2 + 1)); + if (ix) { + utf8_to_utf16_reversed(source, (U8 *)SvPVX(dest), len, &got); + } else { + utf8_to_utf16(source, (U8 *)SvPVX(dest), len, &got); + } + SvCUR_set(dest, got); + SvPVX(dest)[got] = '\0'; + SvPOK_on(dest); + ST(0) = dest; + XSRETURN(1); void my_exit(int exitcode) @@ -3081,21 +3135,21 @@ my_exit(int exitcode) U8 first_byte(sv) - SV *sv + SV *sv CODE: char *s; STRLEN len; - s = SvPVbyte(sv, len); - RETVAL = s[0]; + s = SvPVbyte(sv, len); + RETVAL = s[0]; OUTPUT: RETVAL I32 sv_count() CODE: - RETVAL = PL_sv_count; - OUTPUT: - RETVAL + RETVAL = PL_sv_count; + OUTPUT: + RETVAL void bhk_record(bool on) @@ -3108,248 +3162,248 @@ bhk_record(bool on) void test_magic_chain() PREINIT: - SV *sv; - MAGIC *callmg, *uvarmg; - CODE: - sv = sv_2mortal(newSV(0)); - if (SvTYPE(sv) >= SVt_PVMG) croak_fail(); - if (SvMAGICAL(sv)) croak_fail(); - sv_magic(sv, &PL_sv_yes, PERL_MAGIC_checkcall, (char*)&callmg, 0); - if (SvTYPE(sv) < SVt_PVMG) croak_fail(); - if (!SvMAGICAL(sv)) croak_fail(); - if (mg_find(sv, PERL_MAGIC_uvar)) croak_fail(); - callmg = mg_find(sv, PERL_MAGIC_checkcall); - if (!callmg) croak_fail(); - if (callmg->mg_obj != &PL_sv_yes || callmg->mg_ptr != (char*)&callmg) - croak_fail(); - sv_magic(sv, &PL_sv_no, PERL_MAGIC_uvar, (char*)&uvarmg, 0); - if (SvTYPE(sv) < SVt_PVMG) croak_fail(); - if (!SvMAGICAL(sv)) croak_fail(); - if (mg_find(sv, PERL_MAGIC_checkcall) != callmg) croak_fail(); - uvarmg = mg_find(sv, PERL_MAGIC_uvar); - if (!uvarmg) croak_fail(); - if (callmg->mg_obj != &PL_sv_yes || callmg->mg_ptr != (char*)&callmg) - croak_fail(); - if (uvarmg->mg_obj != &PL_sv_no || uvarmg->mg_ptr != (char*)&uvarmg) - croak_fail(); - mg_free_type(sv, PERL_MAGIC_vec); - if (SvTYPE(sv) < SVt_PVMG) croak_fail(); - if (!SvMAGICAL(sv)) croak_fail(); - if (mg_find(sv, PERL_MAGIC_checkcall) != callmg) croak_fail(); - if (mg_find(sv, PERL_MAGIC_uvar) != uvarmg) croak_fail(); - if (callmg->mg_obj != &PL_sv_yes || callmg->mg_ptr != (char*)&callmg) - croak_fail(); - if (uvarmg->mg_obj != &PL_sv_no || uvarmg->mg_ptr != (char*)&uvarmg) - croak_fail(); - mg_free_type(sv, PERL_MAGIC_uvar); - if (SvTYPE(sv) < SVt_PVMG) croak_fail(); - if (!SvMAGICAL(sv)) croak_fail(); - if (mg_find(sv, PERL_MAGIC_checkcall) != callmg) croak_fail(); - if (mg_find(sv, PERL_MAGIC_uvar)) croak_fail(); - if (callmg->mg_obj != &PL_sv_yes || callmg->mg_ptr != (char*)&callmg) - croak_fail(); - sv_magic(sv, &PL_sv_no, PERL_MAGIC_uvar, (char*)&uvarmg, 0); - if (SvTYPE(sv) < SVt_PVMG) croak_fail(); - if (!SvMAGICAL(sv)) croak_fail(); - if (mg_find(sv, PERL_MAGIC_checkcall) != callmg) croak_fail(); - uvarmg = mg_find(sv, PERL_MAGIC_uvar); - if (!uvarmg) croak_fail(); - if (callmg->mg_obj != &PL_sv_yes || callmg->mg_ptr != (char*)&callmg) - croak_fail(); - if (uvarmg->mg_obj != &PL_sv_no || uvarmg->mg_ptr != (char*)&uvarmg) - croak_fail(); - mg_free_type(sv, PERL_MAGIC_checkcall); - if (SvTYPE(sv) < SVt_PVMG) croak_fail(); - if (!SvMAGICAL(sv)) croak_fail(); - if (mg_find(sv, PERL_MAGIC_uvar) != uvarmg) croak_fail(); - if (mg_find(sv, PERL_MAGIC_checkcall)) croak_fail(); - if (uvarmg->mg_obj != &PL_sv_no || uvarmg->mg_ptr != (char*)&uvarmg) - croak_fail(); - mg_free_type(sv, PERL_MAGIC_uvar); - if (SvMAGICAL(sv)) croak_fail(); - if (mg_find(sv, PERL_MAGIC_checkcall)) croak_fail(); - if (mg_find(sv, PERL_MAGIC_uvar)) croak_fail(); + SV *sv; + MAGIC *callmg, *uvarmg; + CODE: + sv = sv_2mortal(newSV(0)); + if (SvTYPE(sv) >= SVt_PVMG) croak_fail(); + if (SvMAGICAL(sv)) croak_fail(); + sv_magic(sv, &PL_sv_yes, PERL_MAGIC_checkcall, (char*)&callmg, 0); + if (SvTYPE(sv) < SVt_PVMG) croak_fail(); + if (!SvMAGICAL(sv)) croak_fail(); + if (mg_find(sv, PERL_MAGIC_uvar)) croak_fail(); + callmg = mg_find(sv, PERL_MAGIC_checkcall); + if (!callmg) croak_fail(); + if (callmg->mg_obj != &PL_sv_yes || callmg->mg_ptr != (char*)&callmg) + croak_fail(); + sv_magic(sv, &PL_sv_no, PERL_MAGIC_uvar, (char*)&uvarmg, 0); + if (SvTYPE(sv) < SVt_PVMG) croak_fail(); + if (!SvMAGICAL(sv)) croak_fail(); + if (mg_find(sv, PERL_MAGIC_checkcall) != callmg) croak_fail(); + uvarmg = mg_find(sv, PERL_MAGIC_uvar); + if (!uvarmg) croak_fail(); + if (callmg->mg_obj != &PL_sv_yes || callmg->mg_ptr != (char*)&callmg) + croak_fail(); + if (uvarmg->mg_obj != &PL_sv_no || uvarmg->mg_ptr != (char*)&uvarmg) + croak_fail(); + mg_free_type(sv, PERL_MAGIC_vec); + if (SvTYPE(sv) < SVt_PVMG) croak_fail(); + if (!SvMAGICAL(sv)) croak_fail(); + if (mg_find(sv, PERL_MAGIC_checkcall) != callmg) croak_fail(); + if (mg_find(sv, PERL_MAGIC_uvar) != uvarmg) croak_fail(); + if (callmg->mg_obj != &PL_sv_yes || callmg->mg_ptr != (char*)&callmg) + croak_fail(); + if (uvarmg->mg_obj != &PL_sv_no || uvarmg->mg_ptr != (char*)&uvarmg) + croak_fail(); + mg_free_type(sv, PERL_MAGIC_uvar); + if (SvTYPE(sv) < SVt_PVMG) croak_fail(); + if (!SvMAGICAL(sv)) croak_fail(); + if (mg_find(sv, PERL_MAGIC_checkcall) != callmg) croak_fail(); + if (mg_find(sv, PERL_MAGIC_uvar)) croak_fail(); + if (callmg->mg_obj != &PL_sv_yes || callmg->mg_ptr != (char*)&callmg) + croak_fail(); + sv_magic(sv, &PL_sv_no, PERL_MAGIC_uvar, (char*)&uvarmg, 0); + if (SvTYPE(sv) < SVt_PVMG) croak_fail(); + if (!SvMAGICAL(sv)) croak_fail(); + if (mg_find(sv, PERL_MAGIC_checkcall) != callmg) croak_fail(); + uvarmg = mg_find(sv, PERL_MAGIC_uvar); + if (!uvarmg) croak_fail(); + if (callmg->mg_obj != &PL_sv_yes || callmg->mg_ptr != (char*)&callmg) + croak_fail(); + if (uvarmg->mg_obj != &PL_sv_no || uvarmg->mg_ptr != (char*)&uvarmg) + croak_fail(); + mg_free_type(sv, PERL_MAGIC_checkcall); + if (SvTYPE(sv) < SVt_PVMG) croak_fail(); + if (!SvMAGICAL(sv)) croak_fail(); + if (mg_find(sv, PERL_MAGIC_uvar) != uvarmg) croak_fail(); + if (mg_find(sv, PERL_MAGIC_checkcall)) croak_fail(); + if (uvarmg->mg_obj != &PL_sv_no || uvarmg->mg_ptr != (char*)&uvarmg) + croak_fail(); + mg_free_type(sv, PERL_MAGIC_uvar); + if (SvMAGICAL(sv)) croak_fail(); + if (mg_find(sv, PERL_MAGIC_checkcall)) croak_fail(); + if (mg_find(sv, PERL_MAGIC_uvar)) croak_fail(); void test_op_contextualize() PREINIT: - OP *o; - CODE: - o = newSVOP(OP_CONST, 0, newSViv(0)); - o->op_flags &= ~OPf_WANT; - o = op_contextualize(o, G_SCALAR); - if (o->op_type != OP_CONST || - (o->op_flags & OPf_WANT) != OPf_WANT_SCALAR) - croak_fail(); - op_free(o); - o = newSVOP(OP_CONST, 0, newSViv(0)); - o->op_flags &= ~OPf_WANT; - o = op_contextualize(o, G_ARRAY); - if (o->op_type != OP_CONST || - (o->op_flags & OPf_WANT) != OPf_WANT_LIST) - croak_fail(); - op_free(o); - o = newSVOP(OP_CONST, 0, newSViv(0)); - o->op_flags &= ~OPf_WANT; - o = op_contextualize(o, G_VOID); - if (o->op_type != OP_NULL) croak_fail(); - op_free(o); + OP *o; + CODE: + o = newSVOP(OP_CONST, 0, newSViv(0)); + o->op_flags &= ~OPf_WANT; + o = op_contextualize(o, G_SCALAR); + if (o->op_type != OP_CONST || + (o->op_flags & OPf_WANT) != OPf_WANT_SCALAR) + croak_fail(); + op_free(o); + o = newSVOP(OP_CONST, 0, newSViv(0)); + o->op_flags &= ~OPf_WANT; + o = op_contextualize(o, G_LIST); + if (o->op_type != OP_CONST || + (o->op_flags & OPf_WANT) != OPf_WANT_LIST) + croak_fail(); + op_free(o); + o = newSVOP(OP_CONST, 0, newSViv(0)); + o->op_flags &= ~OPf_WANT; + o = op_contextualize(o, G_VOID); + if (o->op_type != OP_NULL) croak_fail(); + op_free(o); void test_rv2cv_op_cv() PROTOTYPE: PREINIT: - GV *troc_gv; - CV *troc_cv; - OP *o; - CODE: - troc_gv = gv_fetchpv("XS::APItest::test_rv2cv_op_cv", 0, SVt_PVGV); - troc_cv = get_cv("XS::APItest::test_rv2cv_op_cv", 0); - o = newCVREF(0, newGVOP(OP_GV, 0, troc_gv)); - if (rv2cv_op_cv(o, 0) != troc_cv) croak_fail(); - if (rv2cv_op_cv(o, RV2CVOPCV_RETURN_NAME_GV) != (CV*)troc_gv) - croak_fail(); - o->op_private |= OPpENTERSUB_AMPER; - if (rv2cv_op_cv(o, 0)) croak_fail(); - if (rv2cv_op_cv(o, RV2CVOPCV_RETURN_NAME_GV)) croak_fail(); - o->op_private &= ~OPpENTERSUB_AMPER; - if (cUNOPx(o)->op_first->op_private & OPpEARLY_CV) croak_fail(); - if (rv2cv_op_cv(o, RV2CVOPCV_MARK_EARLY) != troc_cv) croak_fail(); - if (cUNOPx(o)->op_first->op_private & OPpEARLY_CV) croak_fail(); - op_free(o); - o = newSVOP(OP_CONST, 0, newSVpv("XS::APItest::test_rv2cv_op_cv", 0)); - o->op_private = OPpCONST_BARE; - o = newCVREF(0, o); - if (rv2cv_op_cv(o, 0) != troc_cv) croak_fail(); - if (rv2cv_op_cv(o, RV2CVOPCV_RETURN_NAME_GV) != (CV*)troc_gv) - croak_fail(); - o->op_private |= OPpENTERSUB_AMPER; - if (rv2cv_op_cv(o, 0)) croak_fail(); - if (rv2cv_op_cv(o, RV2CVOPCV_RETURN_NAME_GV)) croak_fail(); - op_free(o); - o = newCVREF(0, newSVOP(OP_CONST, 0, newRV_inc((SV*)troc_cv))); - if (rv2cv_op_cv(o, 0) != troc_cv) croak_fail(); - if (rv2cv_op_cv(o, RV2CVOPCV_RETURN_NAME_GV) != (CV*)troc_gv) - croak_fail(); - o->op_private |= OPpENTERSUB_AMPER; - if (rv2cv_op_cv(o, 0)) croak_fail(); - if (rv2cv_op_cv(o, RV2CVOPCV_RETURN_NAME_GV)) croak_fail(); - o->op_private &= ~OPpENTERSUB_AMPER; - if (cUNOPx(o)->op_first->op_private & OPpEARLY_CV) croak_fail(); - if (rv2cv_op_cv(o, RV2CVOPCV_MARK_EARLY) != troc_cv) croak_fail(); - if (cUNOPx(o)->op_first->op_private & OPpEARLY_CV) croak_fail(); - op_free(o); - o = newCVREF(0, newUNOP(OP_RAND, 0, newSVOP(OP_CONST, 0, newSViv(0)))); - if (rv2cv_op_cv(o, 0)) croak_fail(); - if (rv2cv_op_cv(o, RV2CVOPCV_RETURN_NAME_GV)) croak_fail(); - o->op_private |= OPpENTERSUB_AMPER; - if (rv2cv_op_cv(o, 0)) croak_fail(); - if (rv2cv_op_cv(o, RV2CVOPCV_RETURN_NAME_GV)) croak_fail(); - o->op_private &= ~OPpENTERSUB_AMPER; - if (cUNOPx(o)->op_first->op_private & OPpEARLY_CV) croak_fail(); - if (rv2cv_op_cv(o, RV2CVOPCV_MARK_EARLY)) croak_fail(); - if (cUNOPx(o)->op_first->op_private & OPpEARLY_CV) croak_fail(); - op_free(o); - o = newUNOP(OP_RAND, 0, newSVOP(OP_CONST, 0, newSViv(0))); - if (rv2cv_op_cv(o, 0)) croak_fail(); - if (rv2cv_op_cv(o, RV2CVOPCV_RETURN_NAME_GV)) croak_fail(); - op_free(o); + GV *troc_gv; + CV *troc_cv; + OP *o; + CODE: + troc_gv = gv_fetchpv("XS::APItest::test_rv2cv_op_cv", 0, SVt_PVGV); + troc_cv = get_cv("XS::APItest::test_rv2cv_op_cv", 0); + o = newCVREF(0, newGVOP(OP_GV, 0, troc_gv)); + if (rv2cv_op_cv(o, 0) != troc_cv) croak_fail(); + if (rv2cv_op_cv(o, RV2CVOPCV_RETURN_NAME_GV) != (CV*)troc_gv) + croak_fail(); + o->op_private |= OPpENTERSUB_AMPER; + if (rv2cv_op_cv(o, 0)) croak_fail(); + if (rv2cv_op_cv(o, RV2CVOPCV_RETURN_NAME_GV)) croak_fail(); + o->op_private &= ~OPpENTERSUB_AMPER; + if (cUNOPx(o)->op_first->op_private & OPpEARLY_CV) croak_fail(); + if (rv2cv_op_cv(o, RV2CVOPCV_MARK_EARLY) != troc_cv) croak_fail(); + if (cUNOPx(o)->op_first->op_private & OPpEARLY_CV) croak_fail(); + op_free(o); + o = newSVOP(OP_CONST, 0, newSVpv("XS::APItest::test_rv2cv_op_cv", 0)); + o->op_private = OPpCONST_BARE; + o = newCVREF(0, o); + if (rv2cv_op_cv(o, 0) != troc_cv) croak_fail(); + if (rv2cv_op_cv(o, RV2CVOPCV_RETURN_NAME_GV) != (CV*)troc_gv) + croak_fail(); + o->op_private |= OPpENTERSUB_AMPER; + if (rv2cv_op_cv(o, 0)) croak_fail(); + if (rv2cv_op_cv(o, RV2CVOPCV_RETURN_NAME_GV)) croak_fail(); + op_free(o); + o = newCVREF(0, newSVOP(OP_CONST, 0, newRV_inc((SV*)troc_cv))); + if (rv2cv_op_cv(o, 0) != troc_cv) croak_fail(); + if (rv2cv_op_cv(o, RV2CVOPCV_RETURN_NAME_GV) != (CV*)troc_gv) + croak_fail(); + o->op_private |= OPpENTERSUB_AMPER; + if (rv2cv_op_cv(o, 0)) croak_fail(); + if (rv2cv_op_cv(o, RV2CVOPCV_RETURN_NAME_GV)) croak_fail(); + o->op_private &= ~OPpENTERSUB_AMPER; + if (cUNOPx(o)->op_first->op_private & OPpEARLY_CV) croak_fail(); + if (rv2cv_op_cv(o, RV2CVOPCV_MARK_EARLY) != troc_cv) croak_fail(); + if (cUNOPx(o)->op_first->op_private & OPpEARLY_CV) croak_fail(); + op_free(o); + o = newCVREF(0, newUNOP(OP_RAND, 0, newSVOP(OP_CONST, 0, newSViv(0)))); + if (rv2cv_op_cv(o, 0)) croak_fail(); + if (rv2cv_op_cv(o, RV2CVOPCV_RETURN_NAME_GV)) croak_fail(); + o->op_private |= OPpENTERSUB_AMPER; + if (rv2cv_op_cv(o, 0)) croak_fail(); + if (rv2cv_op_cv(o, RV2CVOPCV_RETURN_NAME_GV)) croak_fail(); + o->op_private &= ~OPpENTERSUB_AMPER; + if (cUNOPx(o)->op_first->op_private & OPpEARLY_CV) croak_fail(); + if (rv2cv_op_cv(o, RV2CVOPCV_MARK_EARLY)) croak_fail(); + if (cUNOPx(o)->op_first->op_private & OPpEARLY_CV) croak_fail(); + op_free(o); + o = newUNOP(OP_RAND, 0, newSVOP(OP_CONST, 0, newSViv(0))); + if (rv2cv_op_cv(o, 0)) croak_fail(); + if (rv2cv_op_cv(o, RV2CVOPCV_RETURN_NAME_GV)) croak_fail(); + op_free(o); void test_cv_getset_call_checker() PREINIT: - CV *troc_cv, *tsh_cv; - Perl_call_checker ckfun; - SV *ckobj; - U32 ckflags; + CV *troc_cv, *tsh_cv; + Perl_call_checker ckfun; + SV *ckobj; + U32 ckflags; CODE: #define check_cc(cv, xckfun, xckobj, xckflags) \ do { \ - cv_get_call_checker((cv), &ckfun, &ckobj); \ - if (ckfun != (xckfun)) croak_fail_nep(FPTR2DPTR(void *, ckfun), xckfun); \ - if (ckobj != (xckobj)) croak_fail_nep(FPTR2DPTR(void *, ckobj), xckobj); \ - cv_get_call_checker_flags((cv), CALL_CHECKER_REQUIRE_GV, &ckfun, &ckobj, &ckflags); \ - if (ckfun != (xckfun)) croak_fail_nep(FPTR2DPTR(void *, ckfun), xckfun); \ - if (ckobj != (xckobj)) croak_fail_nep(FPTR2DPTR(void *, ckobj), xckobj); \ - if (ckflags != CALL_CHECKER_REQUIRE_GV) croak_fail_nei(ckflags, CALL_CHECKER_REQUIRE_GV); \ - cv_get_call_checker_flags((cv), 0, &ckfun, &ckobj, &ckflags); \ - if (ckfun != (xckfun)) croak_fail_nep(FPTR2DPTR(void *, ckfun), xckfun); \ - if (ckobj != (xckobj)) croak_fail_nep(FPTR2DPTR(void *, ckobj), xckobj); \ - if (ckflags != (xckflags)) croak_fail_nei(ckflags, (xckflags)); \ + cv_get_call_checker((cv), &ckfun, &ckobj); \ + if (ckfun != (xckfun)) croak_fail_nep(FPTR2DPTR(void *, ckfun), xckfun); \ + if (ckobj != (xckobj)) croak_fail_nep(FPTR2DPTR(void *, ckobj), xckobj); \ + cv_get_call_checker_flags((cv), CALL_CHECKER_REQUIRE_GV, &ckfun, &ckobj, &ckflags); \ + if (ckfun != (xckfun)) croak_fail_nep(FPTR2DPTR(void *, ckfun), xckfun); \ + if (ckobj != (xckobj)) croak_fail_nep(FPTR2DPTR(void *, ckobj), xckobj); \ + if (ckflags != CALL_CHECKER_REQUIRE_GV) croak_fail_nei(ckflags, CALL_CHECKER_REQUIRE_GV); \ + cv_get_call_checker_flags((cv), 0, &ckfun, &ckobj, &ckflags); \ + if (ckfun != (xckfun)) croak_fail_nep(FPTR2DPTR(void *, ckfun), xckfun); \ + if (ckobj != (xckobj)) croak_fail_nep(FPTR2DPTR(void *, ckobj), xckobj); \ + if (ckflags != (xckflags)) croak_fail_nei(ckflags, (xckflags)); \ } while(0) - troc_cv = get_cv("XS::APItest::test_rv2cv_op_cv", 0); - tsh_cv = get_cv("XS::APItest::test_savehints", 0); - check_cc(troc_cv, Perl_ck_entersub_args_proto_or_list, (SV*)troc_cv, 0); - check_cc(tsh_cv, Perl_ck_entersub_args_proto_or_list, (SV*)tsh_cv, 0); - cv_set_call_checker(tsh_cv, Perl_ck_entersub_args_proto_or_list, - &PL_sv_yes); - check_cc(troc_cv, Perl_ck_entersub_args_proto_or_list, (SV*)troc_cv, 0); - check_cc(tsh_cv, Perl_ck_entersub_args_proto_or_list, &PL_sv_yes, CALL_CHECKER_REQUIRE_GV); - cv_set_call_checker(troc_cv, THX_ck_entersub_args_scalars, &PL_sv_no); - check_cc(troc_cv, THX_ck_entersub_args_scalars, &PL_sv_no, CALL_CHECKER_REQUIRE_GV); - check_cc(tsh_cv, Perl_ck_entersub_args_proto_or_list, &PL_sv_yes, CALL_CHECKER_REQUIRE_GV); - cv_set_call_checker(tsh_cv, Perl_ck_entersub_args_proto_or_list, - (SV*)tsh_cv); - check_cc(troc_cv, THX_ck_entersub_args_scalars, &PL_sv_no, CALL_CHECKER_REQUIRE_GV); - check_cc(tsh_cv, Perl_ck_entersub_args_proto_or_list, (SV*)tsh_cv, 0); - cv_set_call_checker(troc_cv, Perl_ck_entersub_args_proto_or_list, - (SV*)troc_cv); - check_cc(troc_cv, Perl_ck_entersub_args_proto_or_list, (SV*)troc_cv, 0); - check_cc(tsh_cv, Perl_ck_entersub_args_proto_or_list, (SV*)tsh_cv, 0); - if (SvMAGICAL((SV*)troc_cv) || SvMAGIC((SV*)troc_cv)) croak_fail(); - if (SvMAGICAL((SV*)tsh_cv) || SvMAGIC((SV*)tsh_cv)) croak_fail(); - cv_set_call_checker_flags(tsh_cv, Perl_ck_entersub_args_proto_or_list, - &PL_sv_yes, 0); - check_cc(tsh_cv, Perl_ck_entersub_args_proto_or_list, &PL_sv_yes, 0); - cv_set_call_checker_flags(tsh_cv, Perl_ck_entersub_args_proto_or_list, - &PL_sv_yes, CALL_CHECKER_REQUIRE_GV); - check_cc(tsh_cv, Perl_ck_entersub_args_proto_or_list, &PL_sv_yes, CALL_CHECKER_REQUIRE_GV); - cv_set_call_checker_flags(tsh_cv, Perl_ck_entersub_args_proto_or_list, - (SV*)tsh_cv, 0); - check_cc(tsh_cv, Perl_ck_entersub_args_proto_or_list, (SV*)tsh_cv, 0); - if (SvMAGICAL((SV*)tsh_cv) || SvMAGIC((SV*)tsh_cv)) croak_fail(); - cv_set_call_checker_flags(tsh_cv, Perl_ck_entersub_args_proto_or_list, - &PL_sv_yes, CALL_CHECKER_REQUIRE_GV); - check_cc(tsh_cv, Perl_ck_entersub_args_proto_or_list, &PL_sv_yes, CALL_CHECKER_REQUIRE_GV); - cv_set_call_checker_flags(tsh_cv, Perl_ck_entersub_args_proto_or_list, - (SV*)tsh_cv, CALL_CHECKER_REQUIRE_GV); - check_cc(tsh_cv, Perl_ck_entersub_args_proto_or_list, (SV*)tsh_cv, 0); - if (SvMAGICAL((SV*)tsh_cv) || SvMAGIC((SV*)tsh_cv)) croak_fail(); + troc_cv = get_cv("XS::APItest::test_rv2cv_op_cv", 0); + tsh_cv = get_cv("XS::APItest::test_savehints", 0); + check_cc(troc_cv, Perl_ck_entersub_args_proto_or_list, (SV*)troc_cv, 0); + check_cc(tsh_cv, Perl_ck_entersub_args_proto_or_list, (SV*)tsh_cv, 0); + cv_set_call_checker(tsh_cv, Perl_ck_entersub_args_proto_or_list, + &PL_sv_yes); + check_cc(troc_cv, Perl_ck_entersub_args_proto_or_list, (SV*)troc_cv, 0); + check_cc(tsh_cv, Perl_ck_entersub_args_proto_or_list, &PL_sv_yes, CALL_CHECKER_REQUIRE_GV); + cv_set_call_checker(troc_cv, THX_ck_entersub_args_scalars, &PL_sv_no); + check_cc(troc_cv, THX_ck_entersub_args_scalars, &PL_sv_no, CALL_CHECKER_REQUIRE_GV); + check_cc(tsh_cv, Perl_ck_entersub_args_proto_or_list, &PL_sv_yes, CALL_CHECKER_REQUIRE_GV); + cv_set_call_checker(tsh_cv, Perl_ck_entersub_args_proto_or_list, + (SV*)tsh_cv); + check_cc(troc_cv, THX_ck_entersub_args_scalars, &PL_sv_no, CALL_CHECKER_REQUIRE_GV); + check_cc(tsh_cv, Perl_ck_entersub_args_proto_or_list, (SV*)tsh_cv, 0); + cv_set_call_checker(troc_cv, Perl_ck_entersub_args_proto_or_list, + (SV*)troc_cv); + check_cc(troc_cv, Perl_ck_entersub_args_proto_or_list, (SV*)troc_cv, 0); + check_cc(tsh_cv, Perl_ck_entersub_args_proto_or_list, (SV*)tsh_cv, 0); + if (SvMAGICAL((SV*)troc_cv) || SvMAGIC((SV*)troc_cv)) croak_fail(); + if (SvMAGICAL((SV*)tsh_cv) || SvMAGIC((SV*)tsh_cv)) croak_fail(); + cv_set_call_checker_flags(tsh_cv, Perl_ck_entersub_args_proto_or_list, + &PL_sv_yes, 0); + check_cc(tsh_cv, Perl_ck_entersub_args_proto_or_list, &PL_sv_yes, 0); + cv_set_call_checker_flags(tsh_cv, Perl_ck_entersub_args_proto_or_list, + &PL_sv_yes, CALL_CHECKER_REQUIRE_GV); + check_cc(tsh_cv, Perl_ck_entersub_args_proto_or_list, &PL_sv_yes, CALL_CHECKER_REQUIRE_GV); + cv_set_call_checker_flags(tsh_cv, Perl_ck_entersub_args_proto_or_list, + (SV*)tsh_cv, 0); + check_cc(tsh_cv, Perl_ck_entersub_args_proto_or_list, (SV*)tsh_cv, 0); + if (SvMAGICAL((SV*)tsh_cv) || SvMAGIC((SV*)tsh_cv)) croak_fail(); + cv_set_call_checker_flags(tsh_cv, Perl_ck_entersub_args_proto_or_list, + &PL_sv_yes, CALL_CHECKER_REQUIRE_GV); + check_cc(tsh_cv, Perl_ck_entersub_args_proto_or_list, &PL_sv_yes, CALL_CHECKER_REQUIRE_GV); + cv_set_call_checker_flags(tsh_cv, Perl_ck_entersub_args_proto_or_list, + (SV*)tsh_cv, CALL_CHECKER_REQUIRE_GV); + check_cc(tsh_cv, Perl_ck_entersub_args_proto_or_list, (SV*)tsh_cv, 0); + if (SvMAGICAL((SV*)tsh_cv) || SvMAGIC((SV*)tsh_cv)) croak_fail(); #undef check_cc void cv_set_call_checker_lists(CV *cv) CODE: - cv_set_call_checker(cv, THX_ck_entersub_args_lists, &PL_sv_undef); + cv_set_call_checker(cv, THX_ck_entersub_args_lists, &PL_sv_undef); void cv_set_call_checker_scalars(CV *cv) CODE: - cv_set_call_checker(cv, THX_ck_entersub_args_scalars, &PL_sv_undef); + cv_set_call_checker(cv, THX_ck_entersub_args_scalars, &PL_sv_undef); void cv_set_call_checker_proto(CV *cv, SV *proto) CODE: - if (SvROK(proto)) - proto = SvRV(proto); - cv_set_call_checker(cv, Perl_ck_entersub_args_proto, proto); + if (SvROK(proto)) + proto = SvRV(proto); + cv_set_call_checker(cv, Perl_ck_entersub_args_proto, proto); void cv_set_call_checker_proto_or_list(CV *cv, SV *proto) CODE: - if (SvROK(proto)) - proto = SvRV(proto); - cv_set_call_checker(cv, Perl_ck_entersub_args_proto_or_list, proto); + if (SvROK(proto)) + proto = SvRV(proto); + cv_set_call_checker(cv, Perl_ck_entersub_args_proto_or_list, proto); void cv_set_call_checker_multi_sum(CV *cv) CODE: - cv_set_call_checker(cv, THX_ck_entersub_multi_sum, &PL_sv_undef); + cv_set_call_checker(cv, THX_ck_entersub_multi_sum, &PL_sv_undef); void test_cophh() PREINIT: - COPHH *a, *b; + COPHH *a, *b; #ifdef EBCDIC SV* key_sv; char * key_name; @@ -3357,71 +3411,71 @@ test_cophh() #endif CODE: #define check_ph(EXPR) \ - do { if((EXPR) != &PL_sv_placeholder) croak("fail"); } while(0) + do { if((EXPR) != &PL_sv_placeholder) croak("fail"); } while(0) #define check_iv(EXPR, EXPECT) \ - do { if(SvIV(EXPR) != (EXPECT)) croak("fail"); } while(0) + do { if(SvIV(EXPR) != (EXPECT)) croak("fail"); } while(0) #define msvpvs(STR) sv_2mortal(newSVpvs(STR)) #define msviv(VALUE) sv_2mortal(newSViv(VALUE)) - a = cophh_new_empty(); - check_ph(cophh_fetch_pvn(a, "foo_1", 5, 0, 0)); - check_ph(cophh_fetch_pvs(a, "foo_1", 0)); - check_ph(cophh_fetch_pv(a, "foo_1", 0, 0)); - check_ph(cophh_fetch_sv(a, msvpvs("foo_1"), 0, 0)); - a = cophh_store_pvn(a, "foo_1abc", 5, 0, msviv(111), 0); - a = cophh_store_pvs(a, "foo_2", msviv(222), 0); - a = cophh_store_pv(a, "foo_3", 0, msviv(333), 0); - a = cophh_store_sv(a, msvpvs("foo_4"), 0, msviv(444), 0); - check_iv(cophh_fetch_pvn(a, "foo_1xyz", 5, 0, 0), 111); - check_iv(cophh_fetch_pvs(a, "foo_1", 0), 111); - check_iv(cophh_fetch_pv(a, "foo_1", 0, 0), 111); - check_iv(cophh_fetch_sv(a, msvpvs("foo_1"), 0, 0), 111); - check_iv(cophh_fetch_pvs(a, "foo_2", 0), 222); - check_iv(cophh_fetch_pvs(a, "foo_3", 0), 333); - check_iv(cophh_fetch_pvs(a, "foo_4", 0), 444); - check_ph(cophh_fetch_pvs(a, "foo_5", 0)); - b = cophh_copy(a); - b = cophh_store_pvs(b, "foo_1", msviv(1111), 0); - check_iv(cophh_fetch_pvs(a, "foo_1", 0), 111); - check_iv(cophh_fetch_pvs(a, "foo_2", 0), 222); - check_iv(cophh_fetch_pvs(a, "foo_3", 0), 333); - check_iv(cophh_fetch_pvs(a, "foo_4", 0), 444); - check_ph(cophh_fetch_pvs(a, "foo_5", 0)); - check_iv(cophh_fetch_pvs(b, "foo_1", 0), 1111); - check_iv(cophh_fetch_pvs(b, "foo_2", 0), 222); - check_iv(cophh_fetch_pvs(b, "foo_3", 0), 333); - check_iv(cophh_fetch_pvs(b, "foo_4", 0), 444); - check_ph(cophh_fetch_pvs(b, "foo_5", 0)); - a = cophh_delete_pvn(a, "foo_1abc", 5, 0, 0); - a = cophh_delete_pvs(a, "foo_2", 0); - b = cophh_delete_pv(b, "foo_3", 0, 0); - b = cophh_delete_sv(b, msvpvs("foo_4"), 0, 0); - check_ph(cophh_fetch_pvs(a, "foo_1", 0)); - check_ph(cophh_fetch_pvs(a, "foo_2", 0)); - check_iv(cophh_fetch_pvs(a, "foo_3", 0), 333); - check_iv(cophh_fetch_pvs(a, "foo_4", 0), 444); - check_ph(cophh_fetch_pvs(a, "foo_5", 0)); - check_iv(cophh_fetch_pvs(b, "foo_1", 0), 1111); - check_iv(cophh_fetch_pvs(b, "foo_2", 0), 222); - check_ph(cophh_fetch_pvs(b, "foo_3", 0)); - check_ph(cophh_fetch_pvs(b, "foo_4", 0)); - check_ph(cophh_fetch_pvs(b, "foo_5", 0)); - b = cophh_delete_pvs(b, "foo_3", 0); - b = cophh_delete_pvs(b, "foo_5", 0); - check_iv(cophh_fetch_pvs(b, "foo_1", 0), 1111); - check_iv(cophh_fetch_pvs(b, "foo_2", 0), 222); - check_ph(cophh_fetch_pvs(b, "foo_3", 0)); - check_ph(cophh_fetch_pvs(b, "foo_4", 0)); - check_ph(cophh_fetch_pvs(b, "foo_5", 0)); - cophh_free(b); - check_ph(cophh_fetch_pvs(a, "foo_1", 0)); - check_ph(cophh_fetch_pvs(a, "foo_2", 0)); - check_iv(cophh_fetch_pvs(a, "foo_3", 0), 333); - check_iv(cophh_fetch_pvs(a, "foo_4", 0), 444); - check_ph(cophh_fetch_pvs(a, "foo_5", 0)); + a = cophh_new_empty(); + check_ph(cophh_fetch_pvn(a, "foo_1", 5, 0, 0)); + check_ph(cophh_fetch_pvs(a, "foo_1", 0)); + check_ph(cophh_fetch_pv(a, "foo_1", 0, 0)); + check_ph(cophh_fetch_sv(a, msvpvs("foo_1"), 0, 0)); + a = cophh_store_pvn(a, "foo_1abc", 5, 0, msviv(111), 0); + a = cophh_store_pvs(a, "foo_2", msviv(222), 0); + a = cophh_store_pv(a, "foo_3", 0, msviv(333), 0); + a = cophh_store_sv(a, msvpvs("foo_4"), 0, msviv(444), 0); + check_iv(cophh_fetch_pvn(a, "foo_1xyz", 5, 0, 0), 111); + check_iv(cophh_fetch_pvs(a, "foo_1", 0), 111); + check_iv(cophh_fetch_pv(a, "foo_1", 0, 0), 111); + check_iv(cophh_fetch_sv(a, msvpvs("foo_1"), 0, 0), 111); + check_iv(cophh_fetch_pvs(a, "foo_2", 0), 222); + check_iv(cophh_fetch_pvs(a, "foo_3", 0), 333); + check_iv(cophh_fetch_pvs(a, "foo_4", 0), 444); + check_ph(cophh_fetch_pvs(a, "foo_5", 0)); + b = cophh_copy(a); + b = cophh_store_pvs(b, "foo_1", msviv(1111), 0); + check_iv(cophh_fetch_pvs(a, "foo_1", 0), 111); + check_iv(cophh_fetch_pvs(a, "foo_2", 0), 222); + check_iv(cophh_fetch_pvs(a, "foo_3", 0), 333); + check_iv(cophh_fetch_pvs(a, "foo_4", 0), 444); + check_ph(cophh_fetch_pvs(a, "foo_5", 0)); + check_iv(cophh_fetch_pvs(b, "foo_1", 0), 1111); + check_iv(cophh_fetch_pvs(b, "foo_2", 0), 222); + check_iv(cophh_fetch_pvs(b, "foo_3", 0), 333); + check_iv(cophh_fetch_pvs(b, "foo_4", 0), 444); + check_ph(cophh_fetch_pvs(b, "foo_5", 0)); + a = cophh_delete_pvn(a, "foo_1abc", 5, 0, 0); + a = cophh_delete_pvs(a, "foo_2", 0); + b = cophh_delete_pv(b, "foo_3", 0, 0); + b = cophh_delete_sv(b, msvpvs("foo_4"), 0, 0); + check_ph(cophh_fetch_pvs(a, "foo_1", 0)); + check_ph(cophh_fetch_pvs(a, "foo_2", 0)); + check_iv(cophh_fetch_pvs(a, "foo_3", 0), 333); + check_iv(cophh_fetch_pvs(a, "foo_4", 0), 444); + check_ph(cophh_fetch_pvs(a, "foo_5", 0)); + check_iv(cophh_fetch_pvs(b, "foo_1", 0), 1111); + check_iv(cophh_fetch_pvs(b, "foo_2", 0), 222); + check_ph(cophh_fetch_pvs(b, "foo_3", 0)); + check_ph(cophh_fetch_pvs(b, "foo_4", 0)); + check_ph(cophh_fetch_pvs(b, "foo_5", 0)); + b = cophh_delete_pvs(b, "foo_3", 0); + b = cophh_delete_pvs(b, "foo_5", 0); + check_iv(cophh_fetch_pvs(b, "foo_1", 0), 1111); + check_iv(cophh_fetch_pvs(b, "foo_2", 0), 222); + check_ph(cophh_fetch_pvs(b, "foo_3", 0)); + check_ph(cophh_fetch_pvs(b, "foo_4", 0)); + check_ph(cophh_fetch_pvs(b, "foo_5", 0)); + cophh_free(b); + check_ph(cophh_fetch_pvs(a, "foo_1", 0)); + check_ph(cophh_fetch_pvs(a, "foo_2", 0)); + check_iv(cophh_fetch_pvs(a, "foo_3", 0), 333); + check_iv(cophh_fetch_pvs(a, "foo_4", 0), 444); + check_ph(cophh_fetch_pvs(a, "foo_5", 0)); a = cophh_store_pvs(a, "foo_1", msviv(11111), COPHH_KEY_UTF8); - a = cophh_store_pvs(a, "foo_\xaa", msviv(123), 0); + a = cophh_store_pvs(a, "foo_\xaa", msviv(123), 0); #ifndef EBCDIC - a = cophh_store_pvs(a, "foo_\xc2\xbb", msviv(456), COPHH_KEY_UTF8); + a = cophh_store_pvs(a, "foo_\xc2\xbb", msviv(456), COPHH_KEY_UTF8); #else /* On EBCDIC, we need to translate the UTF-8 in the ASCII test to the * equivalent UTF-EBCDIC for the code page. This is done at runtime @@ -3429,73 +3483,73 @@ test_cophh() * cophhh_store_pvs(), as we don't have literal string */ key_sv = sv_2mortal(newSVpvs("foo_")); cat_utf8a2n(key_sv, STR_WITH_LEN("\xc2\xbb")); - key_name = SvPV(key_sv, key_len); - a = cophh_store_pvn(a, key_name, key_len, 0, msviv(456), COPHH_KEY_UTF8); + key_name = SvPV(key_sv, key_len); + a = cophh_store_pvn(a, key_name, key_len, 0, msviv(456), COPHH_KEY_UTF8); #endif #ifndef EBCDIC - a = cophh_store_pvs(a, "foo_\xc3\x8c", msviv(789), COPHH_KEY_UTF8); + a = cophh_store_pvs(a, "foo_\xc3\x8c", msviv(789), COPHH_KEY_UTF8); #else sv_setpvs(key_sv, "foo_"); cat_utf8a2n(key_sv, STR_WITH_LEN("\xc3\x8c")); - key_name = SvPV(key_sv, key_len); - a = cophh_store_pvn(a, key_name, key_len, 0, msviv(789), COPHH_KEY_UTF8); + key_name = SvPV(key_sv, key_len); + a = cophh_store_pvn(a, key_name, key_len, 0, msviv(789), COPHH_KEY_UTF8); #endif #ifndef EBCDIC - a = cophh_store_pvs(a, "foo_\xd9\xa6", msviv(666), COPHH_KEY_UTF8); + a = cophh_store_pvs(a, "foo_\xd9\xa6", msviv(666), COPHH_KEY_UTF8); #else sv_setpvs(key_sv, "foo_"); cat_utf8a2n(key_sv, STR_WITH_LEN("\xd9\xa6")); - key_name = SvPV(key_sv, key_len); - a = cophh_store_pvn(a, key_name, key_len, 0, msviv(666), COPHH_KEY_UTF8); + key_name = SvPV(key_sv, key_len); + a = cophh_store_pvn(a, key_name, key_len, 0, msviv(666), COPHH_KEY_UTF8); #endif - check_iv(cophh_fetch_pvs(a, "foo_1", 0), 11111); - check_iv(cophh_fetch_pvs(a, "foo_1", COPHH_KEY_UTF8), 11111); - check_iv(cophh_fetch_pvs(a, "foo_\xaa", 0), 123); + check_iv(cophh_fetch_pvs(a, "foo_1", 0), 11111); + check_iv(cophh_fetch_pvs(a, "foo_1", COPHH_KEY_UTF8), 11111); + check_iv(cophh_fetch_pvs(a, "foo_\xaa", 0), 123); #ifndef EBCDIC - check_iv(cophh_fetch_pvs(a, "foo_\xc2\xaa", COPHH_KEY_UTF8), 123); - check_ph(cophh_fetch_pvs(a, "foo_\xc2\xaa", 0)); + check_iv(cophh_fetch_pvs(a, "foo_\xc2\xaa", COPHH_KEY_UTF8), 123); + check_ph(cophh_fetch_pvs(a, "foo_\xc2\xaa", 0)); #else sv_setpvs(key_sv, "foo_"); cat_utf8a2n(key_sv, STR_WITH_LEN("\xc2\xaa")); - key_name = SvPV(key_sv, key_len); - check_iv(cophh_fetch_pvn(a, key_name, key_len, 0, COPHH_KEY_UTF8), 123); - check_ph(cophh_fetch_pvn(a, key_name, key_len, 0, 0)); + key_name = SvPV(key_sv, key_len); + check_iv(cophh_fetch_pvn(a, key_name, key_len, 0, COPHH_KEY_UTF8), 123); + check_ph(cophh_fetch_pvn(a, key_name, key_len, 0, 0)); #endif - check_iv(cophh_fetch_pvs(a, "foo_\xbb", 0), 456); + check_iv(cophh_fetch_pvs(a, "foo_\xbb", 0), 456); #ifndef EBCDIC - check_iv(cophh_fetch_pvs(a, "foo_\xc2\xbb", COPHH_KEY_UTF8), 456); - check_ph(cophh_fetch_pvs(a, "foo_\xc2\xbb", 0)); + check_iv(cophh_fetch_pvs(a, "foo_\xc2\xbb", COPHH_KEY_UTF8), 456); + check_ph(cophh_fetch_pvs(a, "foo_\xc2\xbb", 0)); #else sv_setpvs(key_sv, "foo_"); cat_utf8a2n(key_sv, STR_WITH_LEN("\xc2\xbb")); - key_name = SvPV(key_sv, key_len); - check_iv(cophh_fetch_pvn(a, key_name, key_len, 0, COPHH_KEY_UTF8), 456); - check_ph(cophh_fetch_pvn(a, key_name, key_len, 0, 0)); + key_name = SvPV(key_sv, key_len); + check_iv(cophh_fetch_pvn(a, key_name, key_len, 0, COPHH_KEY_UTF8), 456); + check_ph(cophh_fetch_pvn(a, key_name, key_len, 0, 0)); #endif - check_iv(cophh_fetch_pvs(a, "foo_\xcc", 0), 789); + check_iv(cophh_fetch_pvs(a, "foo_\xcc", 0), 789); #ifndef EBCDIC - check_iv(cophh_fetch_pvs(a, "foo_\xc3\x8c", COPHH_KEY_UTF8), 789); - check_ph(cophh_fetch_pvs(a, "foo_\xc2\x8c", 0)); + check_iv(cophh_fetch_pvs(a, "foo_\xc3\x8c", COPHH_KEY_UTF8), 789); + check_ph(cophh_fetch_pvs(a, "foo_\xc2\x8c", 0)); #else sv_setpvs(key_sv, "foo_"); cat_utf8a2n(key_sv, STR_WITH_LEN("\xc3\x8c")); - key_name = SvPV(key_sv, key_len); - check_iv(cophh_fetch_pvn(a, key_name, key_len, 0, COPHH_KEY_UTF8), 789); - check_ph(cophh_fetch_pvn(a, key_name, key_len, 0, 0)); + key_name = SvPV(key_sv, key_len); + check_iv(cophh_fetch_pvn(a, key_name, key_len, 0, COPHH_KEY_UTF8), 789); + check_ph(cophh_fetch_pvn(a, key_name, key_len, 0, 0)); #endif #ifndef EBCDIC - check_iv(cophh_fetch_pvs(a, "foo_\xd9\xa6", COPHH_KEY_UTF8), 666); - check_ph(cophh_fetch_pvs(a, "foo_\xd9\xa6", 0)); + check_iv(cophh_fetch_pvs(a, "foo_\xd9\xa6", COPHH_KEY_UTF8), 666); + check_ph(cophh_fetch_pvs(a, "foo_\xd9\xa6", 0)); #else sv_setpvs(key_sv, "foo_"); cat_utf8a2n(key_sv, STR_WITH_LEN("\xd9\xa6")); - key_name = SvPV(key_sv, key_len); - check_iv(cophh_fetch_pvn(a, key_name, key_len, 0, COPHH_KEY_UTF8), 666); - check_ph(cophh_fetch_pvn(a, key_name, key_len, 0, 0)); + key_name = SvPV(key_sv, key_len); + check_iv(cophh_fetch_pvn(a, key_name, key_len, 0, COPHH_KEY_UTF8), 666); + check_ph(cophh_fetch_pvn(a, key_name, key_len, 0, 0)); #endif - ENTER; - SAVEFREECOPHH(a); - LEAVE; + ENTER; + SAVEFREECOPHH(a); + LEAVE; #undef check_ph #undef check_iv #undef msvpvs @@ -3526,7 +3580,7 @@ test_coplabel() HV * example_cophh_2hv() PREINIT: - COPHH *a; + COPHH *a; #ifdef EBCDIC SV* key_sv; char * key_name; @@ -3534,86 +3588,86 @@ example_cophh_2hv() #endif CODE: #define msviv(VALUE) sv_2mortal(newSViv(VALUE)) - a = cophh_new_empty(); - a = cophh_store_pvs(a, "foo_0", msviv(999), 0); - a = cophh_store_pvs(a, "foo_1", msviv(111), 0); - a = cophh_store_pvs(a, "foo_\xaa", msviv(123), 0); + a = cophh_new_empty(); + a = cophh_store_pvs(a, "foo_0", msviv(999), 0); + a = cophh_store_pvs(a, "foo_1", msviv(111), 0); + a = cophh_store_pvs(a, "foo_\xaa", msviv(123), 0); #ifndef EBCDIC - a = cophh_store_pvs(a, "foo_\xc2\xbb", msviv(456), COPHH_KEY_UTF8); + a = cophh_store_pvs(a, "foo_\xc2\xbb", msviv(456), COPHH_KEY_UTF8); #else key_sv = sv_2mortal(newSVpvs("foo_")); cat_utf8a2n(key_sv, STR_WITH_LEN("\xc2\xbb")); - key_name = SvPV(key_sv, key_len); - a = cophh_store_pvn(a, key_name, key_len, 0, msviv(456), COPHH_KEY_UTF8); + key_name = SvPV(key_sv, key_len); + a = cophh_store_pvn(a, key_name, key_len, 0, msviv(456), COPHH_KEY_UTF8); #endif #ifndef EBCDIC - a = cophh_store_pvs(a, "foo_\xc3\x8c", msviv(789), COPHH_KEY_UTF8); + a = cophh_store_pvs(a, "foo_\xc3\x8c", msviv(789), COPHH_KEY_UTF8); #else sv_setpvs(key_sv, "foo_"); cat_utf8a2n(key_sv, STR_WITH_LEN("\xc3\x8c")); - key_name = SvPV(key_sv, key_len); - a = cophh_store_pvn(a, key_name, key_len, 0, msviv(789), COPHH_KEY_UTF8); + key_name = SvPV(key_sv, key_len); + a = cophh_store_pvn(a, key_name, key_len, 0, msviv(789), COPHH_KEY_UTF8); #endif #ifndef EBCDIC - a = cophh_store_pvs(a, "foo_\xd9\xa6", msviv(666), COPHH_KEY_UTF8); + a = cophh_store_pvs(a, "foo_\xd9\xa6", msviv(666), COPHH_KEY_UTF8); #else sv_setpvs(key_sv, "foo_"); cat_utf8a2n(key_sv, STR_WITH_LEN("\xd9\xa6")); - key_name = SvPV(key_sv, key_len); - a = cophh_store_pvn(a, key_name, key_len, 0, msviv(666), COPHH_KEY_UTF8); + key_name = SvPV(key_sv, key_len); + a = cophh_store_pvn(a, key_name, key_len, 0, msviv(666), COPHH_KEY_UTF8); #endif - a = cophh_delete_pvs(a, "foo_0", 0); - a = cophh_delete_pvs(a, "foo_2", 0); - RETVAL = cophh_2hv(a, 0); - cophh_free(a); + a = cophh_delete_pvs(a, "foo_0", 0); + a = cophh_delete_pvs(a, "foo_2", 0); + RETVAL = cophh_2hv(a, 0); + cophh_free(a); #undef msviv OUTPUT: - RETVAL + RETVAL void test_savehints() PREINIT: - SV **svp, *sv; + SV **svp, *sv; CODE: #define store_hint(KEY, VALUE) \ - sv_setiv_mg(*hv_fetchs(GvHV(PL_hintgv), KEY, 1), (VALUE)) + sv_setiv_mg(*hv_fetchs(GvHV(PL_hintgv), KEY, 1), (VALUE)) #define hint_ok(KEY, EXPECT) \ - ((svp = hv_fetchs(GvHV(PL_hintgv), KEY, 0)) && \ - (sv = *svp) && SvIV(sv) == (EXPECT) && \ - (sv = cop_hints_fetch_pvs(&PL_compiling, KEY, 0)) && \ - SvIV(sv) == (EXPECT)) + ((svp = hv_fetchs(GvHV(PL_hintgv), KEY, 0)) && \ + (sv = *svp) && SvIV(sv) == (EXPECT) && \ + (sv = cop_hints_fetch_pvs(&PL_compiling, KEY, 0)) && \ + SvIV(sv) == (EXPECT)) #define check_hint(KEY, EXPECT) \ - do { if (!hint_ok(KEY, EXPECT)) croak_fail(); } while(0) - PL_hints |= HINT_LOCALIZE_HH; - ENTER; - SAVEHINTS(); - PL_hints &= HINT_INTEGER; - store_hint("t0", 123); - store_hint("t1", 456); - if (PL_hints & HINT_INTEGER) croak_fail(); - check_hint("t0", 123); check_hint("t1", 456); - ENTER; - SAVEHINTS(); - if (PL_hints & HINT_INTEGER) croak_fail(); - check_hint("t0", 123); check_hint("t1", 456); - PL_hints |= HINT_INTEGER; - store_hint("t0", 321); - if (!(PL_hints & HINT_INTEGER)) croak_fail(); - check_hint("t0", 321); check_hint("t1", 456); - LEAVE; - if (PL_hints & HINT_INTEGER) croak_fail(); - check_hint("t0", 123); check_hint("t1", 456); - ENTER; - SAVEHINTS(); - if (PL_hints & HINT_INTEGER) croak_fail(); - check_hint("t0", 123); check_hint("t1", 456); - store_hint("t1", 654); - if (PL_hints & HINT_INTEGER) croak_fail(); - check_hint("t0", 123); check_hint("t1", 654); - LEAVE; - if (PL_hints & HINT_INTEGER) croak_fail(); - check_hint("t0", 123); check_hint("t1", 456); - LEAVE; + do { if (!hint_ok(KEY, EXPECT)) croak_fail(); } while(0) + PL_hints |= HINT_LOCALIZE_HH; + ENTER; + SAVEHINTS(); + PL_hints &= HINT_INTEGER; + store_hint("t0", 123); + store_hint("t1", 456); + if (PL_hints & HINT_INTEGER) croak_fail(); + check_hint("t0", 123); check_hint("t1", 456); + ENTER; + SAVEHINTS(); + if (PL_hints & HINT_INTEGER) croak_fail(); + check_hint("t0", 123); check_hint("t1", 456); + PL_hints |= HINT_INTEGER; + store_hint("t0", 321); + if (!(PL_hints & HINT_INTEGER)) croak_fail(); + check_hint("t0", 321); check_hint("t1", 456); + LEAVE; + if (PL_hints & HINT_INTEGER) croak_fail(); + check_hint("t0", 123); check_hint("t1", 456); + ENTER; + SAVEHINTS(); + if (PL_hints & HINT_INTEGER) croak_fail(); + check_hint("t0", 123); check_hint("t1", 456); + store_hint("t1", 654); + if (PL_hints & HINT_INTEGER) croak_fail(); + check_hint("t0", 123); check_hint("t1", 654); + LEAVE; + if (PL_hints & HINT_INTEGER) croak_fail(); + check_hint("t0", 123); check_hint("t1", 456); + LEAVE; #undef store_hint #undef hint_ok #undef check_hint @@ -3621,140 +3675,140 @@ test_savehints() void test_copyhints() PREINIT: - HV *a, *b; - CODE: - PL_hints |= HINT_LOCALIZE_HH; - ENTER; - SAVEHINTS(); - sv_setiv_mg(*hv_fetchs(GvHV(PL_hintgv), "t0", 1), 123); - if (SvIV(cop_hints_fetch_pvs(&PL_compiling, "t0", 0)) != 123) - croak_fail(); - a = newHVhv(GvHV(PL_hintgv)); - sv_2mortal((SV*)a); - sv_setiv_mg(*hv_fetchs(a, "t0", 1), 456); - if (SvIV(cop_hints_fetch_pvs(&PL_compiling, "t0", 0)) != 123) - croak_fail(); - b = hv_copy_hints_hv(a); - sv_2mortal((SV*)b); - sv_setiv_mg(*hv_fetchs(b, "t0", 1), 789); - if (SvIV(cop_hints_fetch_pvs(&PL_compiling, "t0", 0)) != 789) - croak_fail(); - LEAVE; + HV *a, *b; + CODE: + PL_hints |= HINT_LOCALIZE_HH; + ENTER; + SAVEHINTS(); + sv_setiv_mg(*hv_fetchs(GvHV(PL_hintgv), "t0", 1), 123); + if (SvIV(cop_hints_fetch_pvs(&PL_compiling, "t0", 0)) != 123) + croak_fail(); + a = newHVhv(GvHV(PL_hintgv)); + sv_2mortal((SV*)a); + sv_setiv_mg(*hv_fetchs(a, "t0", 1), 456); + if (SvIV(cop_hints_fetch_pvs(&PL_compiling, "t0", 0)) != 123) + croak_fail(); + b = hv_copy_hints_hv(a); + sv_2mortal((SV*)b); + sv_setiv_mg(*hv_fetchs(b, "t0", 1), 789); + if (SvIV(cop_hints_fetch_pvs(&PL_compiling, "t0", 0)) != 789) + croak_fail(); + LEAVE; void test_op_list() PREINIT: - OP *a; + OP *a; CODE: #define iv_op(iv) newSVOP(OP_CONST, 0, newSViv(iv)) #define check_op(o, expect) \ do { \ - if (strNE(test_op_list_describe(o), (expect))) \ - croak("fail %s %s", test_op_list_describe(o), (expect)); \ + if (strNE(test_op_list_describe(o), (expect))) \ + croak("fail %s %s", test_op_list_describe(o), (expect)); \ } while(0) - a = op_append_elem(OP_LIST, NULL, NULL); - check_op(a, ""); - a = op_append_elem(OP_LIST, iv_op(1), a); - check_op(a, "const(1)."); - a = op_append_elem(OP_LIST, NULL, a); - check_op(a, "const(1)."); - a = op_append_elem(OP_LIST, a, iv_op(2)); - check_op(a, "list[pushmark.const(1).const(2).]"); - a = op_append_elem(OP_LIST, a, iv_op(3)); - check_op(a, "list[pushmark.const(1).const(2).const(3).]"); - a = op_append_elem(OP_LIST, a, NULL); - check_op(a, "list[pushmark.const(1).const(2).const(3).]"); - a = op_append_elem(OP_LIST, NULL, a); - check_op(a, "list[pushmark.const(1).const(2).const(3).]"); - a = op_append_elem(OP_LIST, iv_op(4), a); - check_op(a, "list[pushmark.const(4)." - "list[pushmark.const(1).const(2).const(3).]]"); - a = op_append_elem(OP_LIST, a, iv_op(5)); - check_op(a, "list[pushmark.const(4)." - "list[pushmark.const(1).const(2).const(3).]const(5).]"); - a = op_append_elem(OP_LIST, a, - op_append_elem(OP_LIST, iv_op(7), iv_op(6))); - check_op(a, "list[pushmark.const(4)." - "list[pushmark.const(1).const(2).const(3).]const(5)." - "list[pushmark.const(7).const(6).]]"); - op_free(a); - a = op_append_elem(OP_LINESEQ, iv_op(1), iv_op(2)); - check_op(a, "lineseq[const(1).const(2).]"); - a = op_append_elem(OP_LINESEQ, a, iv_op(3)); - check_op(a, "lineseq[const(1).const(2).const(3).]"); - op_free(a); - a = op_append_elem(OP_LINESEQ, - op_append_elem(OP_LIST, iv_op(1), iv_op(2)), - iv_op(3)); - check_op(a, "lineseq[list[pushmark.const(1).const(2).]const(3).]"); - op_free(a); - a = op_prepend_elem(OP_LIST, NULL, NULL); - check_op(a, ""); - a = op_prepend_elem(OP_LIST, a, iv_op(1)); - check_op(a, "const(1)."); - a = op_prepend_elem(OP_LIST, a, NULL); - check_op(a, "const(1)."); - a = op_prepend_elem(OP_LIST, iv_op(2), a); - check_op(a, "list[pushmark.const(2).const(1).]"); - a = op_prepend_elem(OP_LIST, iv_op(3), a); - check_op(a, "list[pushmark.const(3).const(2).const(1).]"); - a = op_prepend_elem(OP_LIST, NULL, a); - check_op(a, "list[pushmark.const(3).const(2).const(1).]"); - a = op_prepend_elem(OP_LIST, a, NULL); - check_op(a, "list[pushmark.const(3).const(2).const(1).]"); - a = op_prepend_elem(OP_LIST, a, iv_op(4)); - check_op(a, "list[pushmark." - "list[pushmark.const(3).const(2).const(1).]const(4).]"); - a = op_prepend_elem(OP_LIST, iv_op(5), a); - check_op(a, "list[pushmark.const(5)." - "list[pushmark.const(3).const(2).const(1).]const(4).]"); - a = op_prepend_elem(OP_LIST, - op_prepend_elem(OP_LIST, iv_op(6), iv_op(7)), a); - check_op(a, "list[pushmark.list[pushmark.const(6).const(7).]const(5)." - "list[pushmark.const(3).const(2).const(1).]const(4).]"); - op_free(a); - a = op_prepend_elem(OP_LINESEQ, iv_op(2), iv_op(1)); - check_op(a, "lineseq[const(2).const(1).]"); - a = op_prepend_elem(OP_LINESEQ, iv_op(3), a); - check_op(a, "lineseq[const(3).const(2).const(1).]"); - op_free(a); - a = op_prepend_elem(OP_LINESEQ, iv_op(3), - op_prepend_elem(OP_LIST, iv_op(2), iv_op(1))); - check_op(a, "lineseq[const(3).list[pushmark.const(2).const(1).]]"); - op_free(a); - a = op_append_list(OP_LINESEQ, NULL, NULL); - check_op(a, ""); - a = op_append_list(OP_LINESEQ, iv_op(1), a); - check_op(a, "const(1)."); - a = op_append_list(OP_LINESEQ, NULL, a); - check_op(a, "const(1)."); - a = op_append_list(OP_LINESEQ, a, iv_op(2)); - check_op(a, "lineseq[const(1).const(2).]"); - a = op_append_list(OP_LINESEQ, a, iv_op(3)); - check_op(a, "lineseq[const(1).const(2).const(3).]"); - a = op_append_list(OP_LINESEQ, iv_op(4), a); - check_op(a, "lineseq[const(4).const(1).const(2).const(3).]"); - a = op_append_list(OP_LINESEQ, a, NULL); - check_op(a, "lineseq[const(4).const(1).const(2).const(3).]"); - a = op_append_list(OP_LINESEQ, NULL, a); - check_op(a, "lineseq[const(4).const(1).const(2).const(3).]"); - a = op_append_list(OP_LINESEQ, a, - op_append_list(OP_LINESEQ, iv_op(5), iv_op(6))); - check_op(a, "lineseq[const(4).const(1).const(2).const(3)." - "const(5).const(6).]"); - op_free(a); - a = op_append_list(OP_LINESEQ, - op_append_list(OP_LINESEQ, iv_op(1), iv_op(2)), - op_append_list(OP_LIST, iv_op(3), iv_op(4))); - check_op(a, "lineseq[const(1).const(2)." - "list[pushmark.const(3).const(4).]]"); - op_free(a); - a = op_append_list(OP_LINESEQ, - op_append_list(OP_LIST, iv_op(1), iv_op(2)), - op_append_list(OP_LINESEQ, iv_op(3), iv_op(4))); - check_op(a, "lineseq[list[pushmark.const(1).const(2).]" - "const(3).const(4).]"); - op_free(a); + a = op_append_elem(OP_LIST, NULL, NULL); + check_op(a, ""); + a = op_append_elem(OP_LIST, iv_op(1), a); + check_op(a, "const(1)."); + a = op_append_elem(OP_LIST, NULL, a); + check_op(a, "const(1)."); + a = op_append_elem(OP_LIST, a, iv_op(2)); + check_op(a, "list[pushmark.const(1).const(2).]"); + a = op_append_elem(OP_LIST, a, iv_op(3)); + check_op(a, "list[pushmark.const(1).const(2).const(3).]"); + a = op_append_elem(OP_LIST, a, NULL); + check_op(a, "list[pushmark.const(1).const(2).const(3).]"); + a = op_append_elem(OP_LIST, NULL, a); + check_op(a, "list[pushmark.const(1).const(2).const(3).]"); + a = op_append_elem(OP_LIST, iv_op(4), a); + check_op(a, "list[pushmark.const(4)." + "list[pushmark.const(1).const(2).const(3).]]"); + a = op_append_elem(OP_LIST, a, iv_op(5)); + check_op(a, "list[pushmark.const(4)." + "list[pushmark.const(1).const(2).const(3).]const(5).]"); + a = op_append_elem(OP_LIST, a, + op_append_elem(OP_LIST, iv_op(7), iv_op(6))); + check_op(a, "list[pushmark.const(4)." + "list[pushmark.const(1).const(2).const(3).]const(5)." + "list[pushmark.const(7).const(6).]]"); + op_free(a); + a = op_append_elem(OP_LINESEQ, iv_op(1), iv_op(2)); + check_op(a, "lineseq[const(1).const(2).]"); + a = op_append_elem(OP_LINESEQ, a, iv_op(3)); + check_op(a, "lineseq[const(1).const(2).const(3).]"); + op_free(a); + a = op_append_elem(OP_LINESEQ, + op_append_elem(OP_LIST, iv_op(1), iv_op(2)), + iv_op(3)); + check_op(a, "lineseq[list[pushmark.const(1).const(2).]const(3).]"); + op_free(a); + a = op_prepend_elem(OP_LIST, NULL, NULL); + check_op(a, ""); + a = op_prepend_elem(OP_LIST, a, iv_op(1)); + check_op(a, "const(1)."); + a = op_prepend_elem(OP_LIST, a, NULL); + check_op(a, "const(1)."); + a = op_prepend_elem(OP_LIST, iv_op(2), a); + check_op(a, "list[pushmark.const(2).const(1).]"); + a = op_prepend_elem(OP_LIST, iv_op(3), a); + check_op(a, "list[pushmark.const(3).const(2).const(1).]"); + a = op_prepend_elem(OP_LIST, NULL, a); + check_op(a, "list[pushmark.const(3).const(2).const(1).]"); + a = op_prepend_elem(OP_LIST, a, NULL); + check_op(a, "list[pushmark.const(3).const(2).const(1).]"); + a = op_prepend_elem(OP_LIST, a, iv_op(4)); + check_op(a, "list[pushmark." + "list[pushmark.const(3).const(2).const(1).]const(4).]"); + a = op_prepend_elem(OP_LIST, iv_op(5), a); + check_op(a, "list[pushmark.const(5)." + "list[pushmark.const(3).const(2).const(1).]const(4).]"); + a = op_prepend_elem(OP_LIST, + op_prepend_elem(OP_LIST, iv_op(6), iv_op(7)), a); + check_op(a, "list[pushmark.list[pushmark.const(6).const(7).]const(5)." + "list[pushmark.const(3).const(2).const(1).]const(4).]"); + op_free(a); + a = op_prepend_elem(OP_LINESEQ, iv_op(2), iv_op(1)); + check_op(a, "lineseq[const(2).const(1).]"); + a = op_prepend_elem(OP_LINESEQ, iv_op(3), a); + check_op(a, "lineseq[const(3).const(2).const(1).]"); + op_free(a); + a = op_prepend_elem(OP_LINESEQ, iv_op(3), + op_prepend_elem(OP_LIST, iv_op(2), iv_op(1))); + check_op(a, "lineseq[const(3).list[pushmark.const(2).const(1).]]"); + op_free(a); + a = op_append_list(OP_LINESEQ, NULL, NULL); + check_op(a, ""); + a = op_append_list(OP_LINESEQ, iv_op(1), a); + check_op(a, "const(1)."); + a = op_append_list(OP_LINESEQ, NULL, a); + check_op(a, "const(1)."); + a = op_append_list(OP_LINESEQ, a, iv_op(2)); + check_op(a, "lineseq[const(1).const(2).]"); + a = op_append_list(OP_LINESEQ, a, iv_op(3)); + check_op(a, "lineseq[const(1).const(2).const(3).]"); + a = op_append_list(OP_LINESEQ, iv_op(4), a); + check_op(a, "lineseq[const(4).const(1).const(2).const(3).]"); + a = op_append_list(OP_LINESEQ, a, NULL); + check_op(a, "lineseq[const(4).const(1).const(2).const(3).]"); + a = op_append_list(OP_LINESEQ, NULL, a); + check_op(a, "lineseq[const(4).const(1).const(2).const(3).]"); + a = op_append_list(OP_LINESEQ, a, + op_append_list(OP_LINESEQ, iv_op(5), iv_op(6))); + check_op(a, "lineseq[const(4).const(1).const(2).const(3)." + "const(5).const(6).]"); + op_free(a); + a = op_append_list(OP_LINESEQ, + op_append_list(OP_LINESEQ, iv_op(1), iv_op(2)), + op_append_list(OP_LIST, iv_op(3), iv_op(4))); + check_op(a, "lineseq[const(1).const(2)." + "list[pushmark.const(3).const(4).]]"); + op_free(a); + a = op_append_list(OP_LINESEQ, + op_append_list(OP_LIST, iv_op(1), iv_op(2)), + op_append_list(OP_LINESEQ, iv_op(3), iv_op(4))); + check_op(a, "lineseq[list[pushmark.const(1).const(2).]" + "const(3).const(4).]"); + op_free(a); #undef check_op void @@ -3764,8 +3818,8 @@ test_op_linklist () CODE: #define check_ll(o, expect) \ STMT_START { \ - if (strNE(test_op_linklist_describe(o), (expect))) \ - croak("fail %s %s", test_op_linklist_describe(o), (expect)); \ + if (strNE(test_op_linklist_describe(o), (expect))) \ + croak("fail %s %s", test_op_linklist_describe(o), (expect)); \ } STMT_END o = iv_op(1); check_ll(o, ".const1"); @@ -3814,36 +3868,36 @@ test_op_linklist () void peep_enable () PREINIT: - dMY_CXT; + dMY_CXT; CODE: - av_clear(MY_CXT.peep_recorder); - av_clear(MY_CXT.rpeep_recorder); - MY_CXT.peep_recording = 1; + av_clear(MY_CXT.peep_recorder); + av_clear(MY_CXT.rpeep_recorder); + MY_CXT.peep_recording = 1; void peep_disable () PREINIT: - dMY_CXT; + dMY_CXT; CODE: - MY_CXT.peep_recording = 0; + MY_CXT.peep_recording = 0; SV * peep_record () PREINIT: - dMY_CXT; + dMY_CXT; CODE: - RETVAL = newRV_inc((SV *)MY_CXT.peep_recorder); + RETVAL = newRV_inc((SV *)MY_CXT.peep_recorder); OUTPUT: - RETVAL + RETVAL SV * rpeep_record () PREINIT: - dMY_CXT; + dMY_CXT; CODE: - RETVAL = newRV_inc((SV *)MY_CXT.rpeep_recorder); + RETVAL = newRV_inc((SV *)MY_CXT.rpeep_recorder); OUTPUT: - RETVAL + RETVAL =pod @@ -3866,7 +3920,7 @@ CODE: CV *cv; if(items <= 1) { - XSRETURN_UNDEF; + XSRETURN_UNDEF; } cv = sv_2cv(block, &stash, &gv, 0); if (cv == Nullcv) { @@ -3876,8 +3930,8 @@ CODE: SAVESPTR(GvSV(PL_defgv)); for(index = 1 ; index < items ; index++) { - GvSV(PL_defgv) = args[index]; - MULTICALL; + GvSV(PL_defgv) = args[index]; + MULTICALL; } POP_MULTICALL; XSRETURN_UNDEF; @@ -3929,7 +3983,7 @@ CODE: av_push(av, SvREFCNT_inc(TOPs)); break; - case G_ARRAY: + case G_LIST: for (p = PL_stack_base + 1; p <= SP; p++) av_push(av, SvREFCNT_inc(*p)); break; @@ -3978,7 +4032,7 @@ CODE: /* continue after 'clone_with_stack' */ if (interp_dup->Iop) - interp_dup->Iop = interp_dup->Iop->op_next; + interp_dup->Iop = interp_dup->Iop->op_next; /* run with new perl */ Perl_runops_standard(interp_dup); @@ -4002,7 +4056,7 @@ CODE: exit(0); } -#endif /* USE_ITHREDS */ +#endif /* USE_ITHREADS */ SV* take_svref(SVREF sv) @@ -4035,18 +4089,18 @@ OUTPUT: BOOT: - { - HV* stash; - SV** meth = NULL; - CV* cv; - stash = gv_stashpv("XS::APItest::TempLv", 0); - if (stash) - meth = hv_fetchs(stash, "make_temp_mg_lv", 0); - if (!meth) - croak("lost method 'make_temp_mg_lv'"); - cv = GvCV(*meth); - CvLVALUE_on(cv); - } + { + HV* stash; + SV** meth = NULL; + CV* cv; + stash = gv_stashpv("XS::APItest::TempLv", 0); + if (stash) + meth = hv_fetchs(stash, "make_temp_mg_lv", 0); + if (!meth) + croak("lost method 'make_temp_mg_lv'"); + cv = GvCV(*meth); + CvLVALUE_on(cv); + } BOOT: { @@ -4109,10 +4163,10 @@ SV * lv_temp_object() CODE: RETVAL = - sv_bless( - newRV_noinc(newSV(0)), - gv_stashpvs("XS::APItest::TempObj",GV_ADD) - ); /* Package defined in test script */ + sv_bless( + newRV_noinc(newSV(0)), + gv_stashpvs("XS::APItest::TempObj",GV_ADD) + ); /* Package defined in test script */ OUTPUT: RETVAL @@ -4122,9 +4176,9 @@ PREINIT: UV i = 0; CODE: for(; i < 1000; ++i) { - HE *entry = hv_fetch_ent(hv, sv_2mortal(newSVuv(i)), 1, 0); - SvREFCNT_dec(HeVAL(entry)); - HeVAL(entry) = NULL; + HE *entry = hv_fetch_ent(hv, sv_2mortal(newSVuv(i)), 1, 0); + SvREFCNT_dec(HeVAL(entry)); + HeVAL(entry) = NULL; } HV * @@ -4198,11 +4252,11 @@ SV * HvENAME(HV *hv) CODE: RETVAL = hv && HvENAME(hv) - ? newSVpvn_flags( - HvENAME(hv),HvENAMELEN(hv), - (HvENAMEUTF8(hv) ? SVf_UTF8 : 0) - ) - : NULL; + ? newSVpvn_flags( + HvENAME(hv),HvENAMELEN(hv), + (HvENAMEUTF8(hv) ? SVf_UTF8 : 0) + ) + : NULL; OUTPUT: RETVAL @@ -4212,8 +4266,8 @@ CODE: /* Odd sorting (odd numbers first), to make sure we are actually being called */ RETVAL = a % 2 != b % 2 - ? a % 2 ? -1 : 1 - : a < b ? -1 : a == b ? 0 : 1; + ? a % 2 ? -1 : 1 + : a < b ? -1 : a == b ? 0 : 1; OUTPUT: RETVAL @@ -4254,6 +4308,13 @@ CODE: OUTPUT: RETVAL +bool +SvIsBOOL(SV *sv) +CODE: + RETVAL = SvIsBOOL(sv); +OUTPUT: + RETVAL + void setup_addissub() CODE: @@ -4279,24 +4340,24 @@ bool test_newFOROP_without_slab() CODE: { - const I32 floor = start_subparse(0,0); - OP *o; - /* The slab allocator does not like CvROOT being set. */ - CvROOT(PL_compcv) = (OP *)1; - o = newFOROP(0, 0, newOP(OP_PUSHMARK, 0), 0, 0); - if (cLOOPx(cUNOPo->op_first)->op_last->op_sibparent - != cUNOPo->op_first) - { - Perl_warn(aTHX_ "Op parent pointer is stale"); - RETVAL = FALSE; - } - else - /* If we do not crash before returning, the test passes. */ - RETVAL = TRUE; - op_free(o); - CvROOT(PL_compcv) = NULL; - SvREFCNT_dec(PL_compcv); - LEAVE_SCOPE(floor); + const I32 floor = start_subparse(0,0); + OP *o; + /* The slab allocator does not like CvROOT being set. */ + CvROOT(PL_compcv) = (OP *)1; + o = newFOROP(0, 0, newOP(OP_PUSHMARK, 0), 0, 0); + if (cLOOPx(cUNOPo->op_first)->op_last->op_sibparent + != cUNOPo->op_first) + { + Perl_warn(aTHX_ "Op parent pointer is stale"); + RETVAL = FALSE; + } + else + /* If we do not crash before returning, the test passes. */ + RETVAL = TRUE; + op_free(o); + CvROOT(PL_compcv) = NULL; + SvREFCNT_dec(PL_compcv); + LEAVE_SCOPE(floor); } OUTPUT: RETVAL @@ -4308,19 +4369,19 @@ I32 callregexec(SV *prog, STRLEN stringarg, STRLEN strend, I32 minend, SV *sv, U32 nosave) CODE: { - STRLEN len; - char *strbeg; - if (SvROK(prog)) - prog = SvRV(prog); - strbeg = SvPV_force(sv, len); - RETVAL = CALLREGEXEC((REGEXP *)prog, - strbeg + stringarg, - strbeg + strend, - strbeg, - minend, - sv, - NULL, /* data */ - nosave); + STRLEN len; + char *strbeg; + if (SvROK(prog)) + prog = SvRV(prog); + strbeg = SvPV_force(sv, len); + RETVAL = CALLREGEXEC((REGEXP *)prog, + strbeg + stringarg, + strbeg + strend, + strbeg, + minend, + sv, + NULL, /* data */ + nosave); } OUTPUT: RETVAL @@ -4329,30 +4390,30 @@ void lexical_import(SV *name, CV *cv) CODE: { - PADLIST *pl; - PADOFFSET off; - if (!PL_compcv) - Perl_croak(aTHX_ - "lexical_import can only be called at compile time"); - pl = CvPADLIST(PL_compcv); - ENTER; - SAVESPTR(PL_comppad_name); PL_comppad_name = PadlistNAMES(pl); - SAVESPTR(PL_comppad); PL_comppad = PadlistARRAY(pl)[1]; - SAVESPTR(PL_curpad); PL_curpad = PadARRAY(PL_comppad); - off = pad_add_name_sv(sv_2mortal(newSVpvf("&%" SVf,name)), - padadd_STATE, 0, 0); - SvREFCNT_dec(PL_curpad[off]); - PL_curpad[off] = SvREFCNT_inc(cv); - intro_my(); - LEAVE; + PADLIST *pl; + PADOFFSET off; + if (!PL_compcv) + Perl_croak(aTHX_ + "lexical_import can only be called at compile time"); + pl = CvPADLIST(PL_compcv); + ENTER; + SAVESPTR(PL_comppad_name); PL_comppad_name = PadlistNAMES(pl); + SAVESPTR(PL_comppad); PL_comppad = PadlistARRAY(pl)[1]; + SAVESPTR(PL_curpad); PL_curpad = PadARRAY(PL_comppad); + off = pad_add_name_sv(sv_2mortal(newSVpvf("&%" SVf,name)), + padadd_STATE, 0, 0); + SvREFCNT_dec(PL_curpad[off]); + PL_curpad[off] = SvREFCNT_inc(cv); + intro_my(); + LEAVE; } SV * sv_mortalcopy(SV *sv) CODE: - RETVAL = SvREFCNT_inc(sv_mortalcopy(sv)); + RETVAL = SvREFCNT_inc(sv_mortalcopy(sv)); OUTPUT: - RETVAL + RETVAL SV * newRV(SV *sv) @@ -4360,71 +4421,71 @@ newRV(SV *sv) void alias_av(AV *av, IV ix, SV *sv) CODE: - av_store(av, ix, SvREFCNT_inc(sv)); + av_store(av, ix, SvREFCNT_inc(sv)); SV * cv_name(SVREF ref, ...) CODE: - RETVAL = SvREFCNT_inc(cv_name((CV *)ref, - items>1 && ST(1) != &PL_sv_undef - ? ST(1) - : NULL, - items>2 ? SvUV(ST(2)) : 0)); + RETVAL = SvREFCNT_inc(cv_name((CV *)ref, + items>1 && ST(1) != &PL_sv_undef + ? ST(1) + : NULL, + items>2 ? SvUV(ST(2)) : 0)); OUTPUT: - RETVAL + RETVAL void sv_catpvn(SV *sv, SV *sv2) CODE: { - STRLEN len; - const char *s = SvPV(sv2,len); - sv_catpvn_flags(sv,s,len, SvUTF8(sv2) ? SV_CATUTF8 : SV_CATBYTES); + STRLEN len; + const char *s = SvPV(sv2,len); + sv_catpvn_flags(sv,s,len, SvUTF8(sv2) ? SV_CATUTF8 : SV_CATBYTES); } bool test_newOP_CUSTOM() CODE: { - OP *o = newLISTOP(OP_CUSTOM, 0, NULL, NULL); - op_free(o); - o = newOP(OP_CUSTOM, 0); - op_free(o); - o = newUNOP(OP_CUSTOM, 0, NULL); - op_free(o); - o = newUNOP_AUX(OP_CUSTOM, 0, NULL, NULL); - op_free(o); - o = newMETHOP(OP_CUSTOM, 0, newOP(OP_NULL,0)); - op_free(o); - o = newMETHOP_named(OP_CUSTOM, 0, newSV(0)); - op_free(o); - o = newBINOP(OP_CUSTOM, 0, NULL, NULL); - op_free(o); - o = newPMOP(OP_CUSTOM, 0); - op_free(o); - o = newSVOP(OP_CUSTOM, 0, newSV(0)); - op_free(o); + OP *o = newLISTOP(OP_CUSTOM, 0, NULL, NULL); + op_free(o); + o = newOP(OP_CUSTOM, 0); + op_free(o); + o = newUNOP(OP_CUSTOM, 0, NULL); + op_free(o); + o = newUNOP_AUX(OP_CUSTOM, 0, NULL, NULL); + op_free(o); + o = newMETHOP(OP_CUSTOM, 0, newOP(OP_NULL,0)); + op_free(o); + o = newMETHOP_named(OP_CUSTOM, 0, newSV(0)); + op_free(o); + o = newBINOP(OP_CUSTOM, 0, NULL, NULL); + op_free(o); + o = newPMOP(OP_CUSTOM, 0); + op_free(o); + o = newSVOP(OP_CUSTOM, 0, newSV(0)); + op_free(o); #ifdef USE_ITHREADS - ENTER; - lex_start(NULL, NULL, 0); - { - I32 ix = start_subparse(FALSE,0); - o = newPADOP(OP_CUSTOM, 0, newSV(0)); - op_free(o); - LEAVE_SCOPE(ix); - } - LEAVE; + ENTER; + lex_start(NULL, NULL, 0); + { + I32 ix = start_subparse(FALSE,0); + o = newPADOP(OP_CUSTOM, 0, newSV(0)); + op_free(o); + LEAVE_SCOPE(ix); + } + LEAVE; #endif - o = newPVOP(OP_CUSTOM, 0, NULL); - op_free(o); - o = newLOGOP(OP_CUSTOM, 0, newOP(OP_NULL,0), newOP(OP_NULL,0)); - op_free(o); - o = newLOOPEX(OP_CUSTOM, newOP(OP_NULL,0)); - op_free(o); - RETVAL = TRUE; + o = newPVOP(OP_CUSTOM, 0, NULL); + op_free(o); + o = newLOGOP(OP_CUSTOM, 0, newOP(OP_NULL,0), newOP(OP_NULL,0)); + op_free(o); + o = newLOOPEX(OP_CUSTOM, newOP(OP_NULL,0)); + op_free(o); + RETVAL = TRUE; } OUTPUT: - RETVAL + RETVAL void test_sv_catpvf(SV *fmtsv) @@ -4442,9 +4503,9 @@ load_module(flags, name, ...) SV *name CODE: if (items == 2) { - Perl_load_module(aTHX_ flags, SvREFCNT_inc(name), NULL); + Perl_load_module(aTHX_ flags, SvREFCNT_inc(name), NULL); } else if (items == 3) { - Perl_load_module(aTHX_ flags, SvREFCNT_inc(name), SvREFCNT_inc(ST(2))); + Perl_load_module(aTHX_ flags, SvREFCNT_inc(name), SvREFCNT_inc(ST(2))); } else Perl_croak(aTHX_ "load_module can't yet support %" IVdf " items", (IV)items); @@ -4486,9 +4547,9 @@ get_cv_flags(SV *sv, UV flags) void unshift_and_set_defav(SV *sv,...) CODE: - av_unshift(GvAVn(PL_defgv), 1); - av_store(GvAV(PL_defgv), 0, newSVuv(42)); - sv_setuv(sv, 43); + av_unshift(GvAVn(PL_defgv), 1); + av_store(GvAV(PL_defgv), 0, newSVuv(42)); + sv_setuv(sv, 43); PerlIO * PerlIO_stderr() @@ -4514,7 +4575,35 @@ test_MAX_types() */ RETVAL = newSVpvf("iv %" IVdf " uv %" UVuf, IV_MAX, UV_MAX); OUTPUT: - RETVAL + RETVAL + +bool +sv_numeq(SV *sv1, SV *sv2) + CODE: + RETVAL = sv_numeq(sv1, sv2); + OUTPUT: + RETVAL + +bool +sv_numeq_flags(SV *sv1, SV *sv2, U32 flags) + CODE: + RETVAL = sv_numeq_flags(sv1, sv2, flags); + OUTPUT: + RETVAL + +bool +sv_streq(SV *sv1, SV *sv2) + CODE: + RETVAL = sv_streq(sv1, sv2); + OUTPUT: + RETVAL + +bool +sv_streq_flags(SV *sv1, SV *sv2, U32 flags) + CODE: + RETVAL = sv_streq_flags(sv1, sv2, flags); + OUTPUT: + RETVAL MODULE = XS::APItest PACKAGE = XS::APItest::AUTOLOADtest @@ -4540,7 +4629,7 @@ AUTOLOAD(...) OUTPUT: RETVAL -MODULE = XS::APItest PACKAGE = XS::APItest::Magic +MODULE = XS::APItest PACKAGE = XS::APItest::Magic PROTOTYPES: DISABLE @@ -4576,47 +4665,47 @@ CODE: UV test_get_vtbl() PREINIT: - MGVTBL *have; - MGVTBL *want; + MGVTBL *have; + MGVTBL *want; CODE: #define test_get_this_vtable(name) \ - want = (MGVTBL*)CAT2(&PL_vtbl_, name); \ - have = get_vtbl(CAT2(want_vtbl_, name)); \ - if (have != want) \ - croak("fail %p!=%p for get_vtbl(want_vtbl_" STRINGIFY(name) ") at " __FILE__ " line %d", have, want, __LINE__) - - test_get_this_vtable(sv); - test_get_this_vtable(env); - test_get_this_vtable(envelem); - test_get_this_vtable(sigelem); - test_get_this_vtable(pack); - test_get_this_vtable(packelem); - test_get_this_vtable(dbline); - test_get_this_vtable(isa); - test_get_this_vtable(isaelem); - test_get_this_vtable(arylen); - test_get_this_vtable(mglob); - test_get_this_vtable(nkeys); - test_get_this_vtable(taint); - test_get_this_vtable(substr); - test_get_this_vtable(vec); - test_get_this_vtable(pos); - test_get_this_vtable(bm); - test_get_this_vtable(fm); - test_get_this_vtable(uvar); - test_get_this_vtable(defelem); - test_get_this_vtable(regexp); - test_get_this_vtable(regdata); - test_get_this_vtable(regdatum); + want = (MGVTBL*)CAT2(&PL_vtbl_, name); \ + have = get_vtbl(CAT2(want_vtbl_, name)); \ + if (have != want) \ + croak("fail %p!=%p for get_vtbl(want_vtbl_" STRINGIFY(name) ") at " __FILE__ " line %d", have, want, __LINE__) + + test_get_this_vtable(sv); + test_get_this_vtable(env); + test_get_this_vtable(envelem); + test_get_this_vtable(sigelem); + test_get_this_vtable(pack); + test_get_this_vtable(packelem); + test_get_this_vtable(dbline); + test_get_this_vtable(isa); + test_get_this_vtable(isaelem); + test_get_this_vtable(arylen); + test_get_this_vtable(mglob); + test_get_this_vtable(nkeys); + test_get_this_vtable(taint); + test_get_this_vtable(substr); + test_get_this_vtable(vec); + test_get_this_vtable(pos); + test_get_this_vtable(bm); + test_get_this_vtable(fm); + test_get_this_vtable(uvar); + test_get_this_vtable(defelem); + test_get_this_vtable(regexp); + test_get_this_vtable(regdata); + test_get_this_vtable(regdatum); #ifdef USE_LOCALE_COLLATE - test_get_this_vtable(collxfrm); + test_get_this_vtable(collxfrm); #endif - test_get_this_vtable(backref); - test_get_this_vtable(utf8); + test_get_this_vtable(backref); + test_get_this_vtable(utf8); - RETVAL = PTR2UV(get_vtbl(-1)); + RETVAL = PTR2UV(get_vtbl(-1)); OUTPUT: - RETVAL + RETVAL # attach ext magic to the SV pointed to by rsv that only has set magic, @@ -4628,8 +4717,28 @@ CODE: sv_magicext(SvRV(rsv), NULL, PERL_MAGIC_ext, &vtbl_myset, (const char *)thingy, 0); +void +sv_magic_mycopy(SV *rsv) + PREINIT: + MAGIC *mg; + CODE: + /* It's only actually useful to attach this to arrays and hashes. */ + mg = sv_magicext(SvRV(rsv), NULL, PERL_MAGIC_ext, &vtbl_mycopy, NULL, 0); + mg->mg_flags = MGf_COPY; + +SV * +sv_magic_mycopy_count(SV *rsv) + PREINIT: + MAGIC *mg; + CODE: + mg = mg_findext(SvRV(rsv), PERL_MAGIC_ext, &vtbl_mycopy); + RETVAL = mg ? newSViv(mg->mg_private) : &PL_sv_undef; + OUTPUT: + RETVAL +MODULE = XS::APItest PACKAGE = XS::APItest + bool test_isBLANK_uni(UV ord) CODE: @@ -4682,7 +4791,7 @@ test_isBLANK_LC(UV ord) bool test_isBLANK_utf8(U8 * p, int type) PREINIT: - const U8 * e; + const U8 * e; CODE: /* In this function and those that follow, the boolean 'type' @@ -4701,7 +4810,7 @@ test_isBLANK_utf8(U8 * p, int type) bool test_isBLANK_LC_utf8(U8 * p, int type) PREINIT: - const U8 * e; + const U8 * e; CODE: if (type >= 0) { e = p + UTF8SKIP(p) - type; @@ -4730,7 +4839,7 @@ test_isVERTWS_uvchr(UV ord) bool test_isVERTWS_utf8(U8 * p, int type) PREINIT: - const U8 * e; + const U8 * e; CODE: if (type >= 0) { e = p + UTF8SKIP(p) - type; @@ -4794,7 +4903,7 @@ test_isUPPER_LC(UV ord) bool test_isUPPER_utf8(U8 * p, int type) PREINIT: - const U8 * e; + const U8 * e; CODE: if (type >= 0) { e = p + UTF8SKIP(p) - type; @@ -4809,7 +4918,7 @@ test_isUPPER_utf8(U8 * p, int type) bool test_isUPPER_LC_utf8(U8 * p, int type) PREINIT: - const U8 * e; + const U8 * e; CODE: if (type >= 0) { e = p + UTF8SKIP(p) - type; @@ -4873,7 +4982,7 @@ test_isLOWER_LC(UV ord) bool test_isLOWER_utf8(U8 * p, int type) PREINIT: - const U8 * e; + const U8 * e; CODE: if (type >= 0) { e = p + UTF8SKIP(p) - type; @@ -4888,7 +4997,7 @@ test_isLOWER_utf8(U8 * p, int type) bool test_isLOWER_LC_utf8(U8 * p, int type) PREINIT: - const U8 * e; + const U8 * e; CODE: if (type >= 0) { e = p + UTF8SKIP(p) - type; @@ -4952,7 +5061,7 @@ test_isALPHA_LC(UV ord) bool test_isALPHA_utf8(U8 * p, int type) PREINIT: - const U8 * e; + const U8 * e; CODE: if (type >= 0) { e = p + UTF8SKIP(p) - type; @@ -4967,7 +5076,7 @@ test_isALPHA_utf8(U8 * p, int type) bool test_isALPHA_LC_utf8(U8 * p, int type) PREINIT: - const U8 * e; + const U8 * e; CODE: if (type >= 0) { e = p + UTF8SKIP(p) - type; @@ -5031,7 +5140,7 @@ test_isWORDCHAR_LC(UV ord) bool test_isWORDCHAR_utf8(U8 * p, int type) PREINIT: - const U8 * e; + const U8 * e; CODE: if (type >= 0) { e = p + UTF8SKIP(p) - type; @@ -5046,7 +5155,7 @@ test_isWORDCHAR_utf8(U8 * p, int type) bool test_isWORDCHAR_LC_utf8(U8 * p, int type) PREINIT: - const U8 * e; + const U8 * e; CODE: if (type >= 0) { e = p + UTF8SKIP(p) - type; @@ -5110,7 +5219,7 @@ test_isALPHANUMERIC_LC(UV ord) bool test_isALPHANUMERIC_utf8(U8 * p, int type) PREINIT: - const U8 * e; + const U8 * e; CODE: if (type >= 0) { e = p + UTF8SKIP(p) - type; @@ -5125,7 +5234,7 @@ test_isALPHANUMERIC_utf8(U8 * p, int type) bool test_isALPHANUMERIC_LC_utf8(U8 * p, int type) PREINIT: - const U8 * e; + const U8 * e; CODE: if (type >= 0) { e = p + UTF8SKIP(p) - type; @@ -5168,7 +5277,7 @@ test_isALNUM_LC(UV ord) bool test_isALNUM_utf8(U8 * p, int type) PREINIT: - const U8 * e; + const U8 * e; CODE: if (type >= 0) { e = p + UTF8SKIP(p) - type; @@ -5183,7 +5292,7 @@ test_isALNUM_utf8(U8 * p, int type) bool test_isALNUM_LC_utf8(U8 * p, int type) PREINIT: - const U8 * e; + const U8 * e; CODE: if (type >= 0) { e = p + UTF8SKIP(p) - type; @@ -5219,7 +5328,7 @@ test_isDIGIT_LC_uvchr(UV ord) bool test_isDIGIT_utf8(U8 * p, int type) PREINIT: - const U8 * e; + const U8 * e; CODE: if (type >= 0) { e = p + UTF8SKIP(p) - type; @@ -5234,7 +5343,7 @@ test_isDIGIT_utf8(U8 * p, int type) bool test_isDIGIT_LC_utf8(U8 * p, int type) PREINIT: - const U8 * e; + const U8 * e; CODE: if (type >= 0) { e = p + UTF8SKIP(p) - type; @@ -5347,7 +5456,7 @@ test_isIDFIRST_LC(UV ord) bool test_isIDFIRST_utf8(U8 * p, int type) PREINIT: - const U8 * e; + const U8 * e; CODE: if (type >= 0) { e = p + UTF8SKIP(p) - type; @@ -5362,7 +5471,7 @@ test_isIDFIRST_utf8(U8 * p, int type) bool test_isIDFIRST_LC_utf8(U8 * p, int type) PREINIT: - const U8 * e; + const U8 * e; CODE: if (type >= 0) { e = p + UTF8SKIP(p) - type; @@ -5426,7 +5535,7 @@ test_isIDCONT_LC(UV ord) bool test_isIDCONT_utf8(U8 * p, int type) PREINIT: - const U8 * e; + const U8 * e; CODE: if (type >= 0) { e = p + UTF8SKIP(p) - type; @@ -5441,7 +5550,7 @@ test_isIDCONT_utf8(U8 * p, int type) bool test_isIDCONT_LC_utf8(U8 * p, int type) PREINIT: - const U8 * e; + const U8 * e; CODE: if (type >= 0) { e = p + UTF8SKIP(p) - type; @@ -5505,7 +5614,7 @@ test_isSPACE_LC(UV ord) bool test_isSPACE_utf8(U8 * p, int type) PREINIT: - const U8 * e; + const U8 * e; CODE: if (type >= 0) { e = p + UTF8SKIP(p) - type; @@ -5520,7 +5629,7 @@ test_isSPACE_utf8(U8 * p, int type) bool test_isSPACE_LC_utf8(U8 * p, int type) PREINIT: - const U8 * e; + const U8 * e; CODE: if (type >= 0) { e = p + UTF8SKIP(p) - type; @@ -5584,7 +5693,7 @@ test_isASCII_LC(UV ord) bool test_isASCII_utf8(U8 * p, int type) PREINIT: - const U8 * e; + const U8 * e; CODE: #ifndef DEBUGGING PERL_UNUSED_VAR(e); @@ -5602,7 +5711,7 @@ test_isASCII_utf8(U8 * p, int type) bool test_isASCII_LC_utf8(U8 * p, int type) PREINIT: - const U8 * e; + const U8 * e; CODE: #ifndef DEBUGGING PERL_UNUSED_VAR(e); @@ -5669,7 +5778,7 @@ test_isCNTRL_LC(UV ord) bool test_isCNTRL_utf8(U8 * p, int type) PREINIT: - const U8 * e; + const U8 * e; CODE: if (type >= 0) { e = p + UTF8SKIP(p) - type; @@ -5684,7 +5793,7 @@ test_isCNTRL_utf8(U8 * p, int type) bool test_isCNTRL_LC_utf8(U8 * p, int type) PREINIT: - const U8 * e; + const U8 * e; CODE: if (type >= 0) { e = p + UTF8SKIP(p) - type; @@ -5748,7 +5857,7 @@ test_isPRINT_LC(UV ord) bool test_isPRINT_utf8(U8 * p, int type) PREINIT: - const U8 * e; + const U8 * e; CODE: if (type >= 0) { e = p + UTF8SKIP(p) - type; @@ -5763,7 +5872,7 @@ test_isPRINT_utf8(U8 * p, int type) bool test_isPRINT_LC_utf8(U8 * p, int type) PREINIT: - const U8 * e; + const U8 * e; CODE: if (type >= 0) { e = p + UTF8SKIP(p) - type; @@ -5827,7 +5936,7 @@ test_isGRAPH_LC(UV ord) bool test_isGRAPH_utf8(U8 * p, int type) PREINIT: - const U8 * e; + const U8 * e; CODE: if (type >= 0) { e = p + UTF8SKIP(p) - type; @@ -5842,7 +5951,7 @@ test_isGRAPH_utf8(U8 * p, int type) bool test_isGRAPH_LC_utf8(U8 * p, int type) PREINIT: - const U8 * e; + const U8 * e; CODE: if (type >= 0) { e = p + UTF8SKIP(p) - type; @@ -5906,7 +6015,7 @@ test_isPUNCT_LC(UV ord) bool test_isPUNCT_utf8(U8 * p, int type) PREINIT: - const U8 * e; + const U8 * e; CODE: if (type >= 0) { e = p + UTF8SKIP(p) - type; @@ -5921,7 +6030,7 @@ test_isPUNCT_utf8(U8 * p, int type) bool test_isPUNCT_LC_utf8(U8 * p, int type) PREINIT: - const U8 * e; + const U8 * e; CODE: if (type >= 0) { e = p + UTF8SKIP(p) - type; @@ -5985,7 +6094,7 @@ test_isXDIGIT_LC(UV ord) bool test_isXDIGIT_utf8(U8 * p, int type) PREINIT: - const U8 * e; + const U8 * e; CODE: if (type >= 0) { e = p + UTF8SKIP(p) - type; @@ -6000,7 +6109,7 @@ test_isXDIGIT_utf8(U8 * p, int type) bool test_isXDIGIT_LC_utf8(U8 * p, int type) PREINIT: - const U8 * e; + const U8 * e; CODE: if (type >= 0) { e = p + UTF8SKIP(p) - type; @@ -6064,7 +6173,7 @@ test_isPSXSPC_LC(UV ord) bool test_isPSXSPC_utf8(U8 * p, int type) PREINIT: - const U8 * e; + const U8 * e; CODE: if (type >= 0) { e = p + UTF8SKIP(p) - type; @@ -6079,7 +6188,7 @@ test_isPSXSPC_utf8(U8 * p, int type) bool test_isPSXSPC_LC_utf8(U8 * p, int type) PREINIT: - const U8 * e; + const U8 * e; CODE: if (type >= 0) { e = p + UTF8SKIP(p) - type; @@ -6091,6 +6200,13 @@ test_isPSXSPC_LC_utf8(U8 * p, int type) OUTPUT: RETVAL +STRLEN +test_UTF8_IS_REPLACEMENT(char *s, STRLEN len) + CODE: + RETVAL = UTF8_IS_REPLACEMENT(s, s + len); + OUTPUT: + RETVAL + bool test_isQUOTEMETA(UV ord) CODE: @@ -6518,7 +6634,7 @@ test_toLOWER_utf8(SV * p, int type) STRLEN len; AV *av; SV *utf8; - const U8 * e; + const U8 * e; UV resultant_cp = UV_MAX; /* Initialized because of dumb compilers */ CODE: input = (U8 *) SvPV(p, len); @@ -6603,7 +6719,7 @@ test_toFOLD_utf8(SV * p, int type) STRLEN len; AV *av; SV *utf8; - const U8 * e; + const U8 * e; UV resultant_cp = UV_MAX; CODE: input = (U8 *) SvPV(p, len); @@ -6688,7 +6804,7 @@ test_toUPPER_utf8(SV * p, int type) STRLEN len; AV *av; SV *utf8; - const U8 * e; + const U8 * e; UV resultant_cp = UV_MAX; CODE: input = (U8 *) SvPV(p, len); @@ -6766,7 +6882,7 @@ test_toTITLE_utf8(SV * p, int type) STRLEN len; AV *av; SV *utf8; - const U8 * e; + const U8 * e; UV resultant_cp = UV_MAX; CODE: input = (U8 *) SvPV(p, len); @@ -6789,15 +6905,79 @@ test_toTITLE_utf8(SV * p, int type) OUTPUT: RETVAL +AV * +test_delimcpy(SV * from_sv, STRLEN trunc_from, char delim, STRLEN to_len, STRLEN trunc_to, char poison = '?') + PREINIT: + char * from; + I32 retlen; + char * from_pos_after_copy; + char * to; + CODE: + from = SvPV_nolen(from_sv); + Newx(to, to_len, char); + PoisonWith(to, to_len, char, poison); + assert(trunc_from <= SvCUR(from_sv)); + /* trunc_to allows us to throttle the output size available */ + assert(trunc_to <= to_len); + from_pos_after_copy = delimcpy(to, to + trunc_to, + from, from + trunc_from, + delim, &retlen); + RETVAL = newAV(); + sv_2mortal((SV*)RETVAL); + av_push(RETVAL, newSVpvn(to, to_len)); + av_push(RETVAL, newSVuv(retlen)); + av_push(RETVAL, newSVuv(from_pos_after_copy - from)); + Safefree(to); + OUTPUT: + RETVAL + +AV * +test_delimcpy_no_escape(SV * from_sv, STRLEN trunc_from, char delim, STRLEN to_len, STRLEN trunc_to, char poison = '?') + PREINIT: + char * from; + AV *av; + I32 retlen; + char * from_pos_after_copy; + char * to; + CODE: + from = SvPV_nolen(from_sv); + Newx(to, to_len, char); + PoisonWith(to, to_len, char, poison); + assert(trunc_from <= SvCUR(from_sv)); + /* trunc_to allows us to throttle the output size available */ + assert(trunc_to <= to_len); + from_pos_after_copy = delimcpy_no_escape(to, to + trunc_to, + from, from + trunc_from, + delim, &retlen); + av = newAV(); + av_push(av, newSVpvn(to, to_len)); + av_push(av, newSVuv(retlen)); + av_push(av, newSVuv(from_pos_after_copy - from)); + Safefree(to); + RETVAL = av; + OUTPUT: + RETVAL + SV * test_Gconvert(SV * number, SV * num_digits) PREINIT: char buffer[100]; int len; + int extras; CODE: len = (int) SvIV(num_digits); - if (len > 99) croak("Too long a number for test_Gconvert"); - if (len < 0) croak("Too short a number for test_Gconvert"); + /* To silence a -Wformat-overflow compiler warning we * + * make allowance for the following characters that may * + * appear, in addition to the digits of the significand: * + * a leading "-", a single byte radix point, "e-", the * + * terminating NULL, and a 3 or 4 digit exponent. * + * Ie, allow 8 bytes if nvtype is "double", otherwise 9 * + * bytes (as the exponent could then contain 4 digits ). */ + extras = sizeof(NV) == 8 ? 8 : 9; + if(len > 100 - extras) + croak("Too long a number for test_Gconvert"); + if (len < 0) + croak("Too short a number for test_Gconvert"); PERL_UNUSED_RESULT(Gconvert(SvNV(number), len, 0, /* No trailing zeroes */ buffer)); @@ -6812,7 +6992,7 @@ test_Perl_langinfo(SV * item) OUTPUT: RETVAL -MODULE = XS::APItest PACKAGE = XS::APItest::Backrefs +MODULE = XS::APItest PACKAGE = XS::APItest::Backrefs void apitest_weaken(SV *sv) @@ -6877,6 +7057,31 @@ Comctl32Version() #endif +MODULE = XS::APItest PACKAGE = XS::APItest::RWMacro + +#if defined(USE_ITHREADS) + +void +compile_macros() + PREINIT: + perl_RnW1_mutex_t m; + perl_RnW1_mutex_t *pm = &m; + CODE: + PERL_RW_MUTEX_INIT(&m); + PERL_WRITE_LOCK(&m); + PERL_WRITE_UNLOCK(&m); + PERL_READ_LOCK(&m); + PERL_READ_UNLOCK(&m); + PERL_RW_MUTEX_DESTROY(&m); + PERL_RW_MUTEX_INIT(pm); + PERL_WRITE_LOCK(pm); + PERL_WRITE_UNLOCK(pm); + PERL_READ_LOCK(pm); + PERL_READ_UNLOCK(pm); + PERL_RW_MUTEX_DESTROY(pm); + +#endif + MODULE = XS::APItest PACKAGE = XS::APItest::HvMacro @@ -6911,6 +7116,7 @@ u8_to_u16_le(SV *sv, STRLEN ofs) u64= U8TO64_LE(pv+ofs); RETVAL= (UV)u64; #else + PERL_UNUSED_VAR(u64); croak("not a 64 bit perl IVSIZE=%d",IVSIZE); #endif break; @@ -6998,7 +7204,7 @@ siphash24(SV *state_sv, SV *str_sv) U8 state_pv[32]; int i; if (state_len!=32) croak("siphash state should be exactly 32 bytes"); - for( i = 0; i < 32; i++ ) { + for( i = 0; i < 32; i++ ) { if (i < 8) state_pv[ 7 - i] = temp_pv[i]; else if(i < 16) state_pv[23 - i] = temp_pv[i]; else if(i < 24) state_pv[39 - i] = temp_pv[i]; diff --git a/gnu/usr.bin/perl/ext/XS-APItest/Makefile.PL b/gnu/usr.bin/perl/ext/XS-APItest/Makefile.PL index 3fe5e397a8b..b666a3d1372 100644 --- a/gnu/usr.bin/perl/ext/XS-APItest/Makefile.PL +++ b/gnu/usr.bin/perl/ext/XS-APItest/Makefile.PL @@ -22,15 +22,16 @@ WriteMakefile( my @names = (qw(HV_DELETE HV_DISABLE_UVAR_XKEY HV_FETCH_ISSTORE HV_FETCH_ISEXISTS HV_FETCH_LVALUE HV_FETCH_JUST_SV - G_SCALAR G_ARRAY G_VOID G_DISCARD G_EVAL G_NOARGS + G_SCALAR G_LIST G_VOID G_DISCARD G_EVAL G_NOARGS G_KEEPERR G_NODEBUG G_METHOD G_FAKINGEVAL G_RETHROW GV_NOADD_NOINIT + SV_GMAGIC SV_SKIP_OVERLOAD IS_NUMBER_IN_UV IS_NUMBER_GREATER_THAN_UV_MAX IS_NUMBER_NOT_INT IS_NUMBER_NEG IS_NUMBER_INFINITY IS_NUMBER_NAN IS_NUMBER_TRAILING PERL_SCAN_TRAILING PERL_LOADMOD_DENY PERL_LOADMOD_NOIMPORT PERL_LOADMOD_IMPORT_OPS ), - {name=>"G_WANT", default=>["IV", "G_ARRAY|G_VOID"]}); + {name=>"G_WANT", default=>["IV", "G_LIST|G_VOID"]}); open my $fh, '<', '../../overload.h' or die "Can't open ../../overload.h: $!"; while (<$fh>) { diff --git a/gnu/usr.bin/perl/ext/XS-APItest/numeric.xs b/gnu/usr.bin/perl/ext/XS-APItest/numeric.xs index 847eb75d7cd..fb5073272f2 100644 --- a/gnu/usr.bin/perl/ext/XS-APItest/numeric.xs +++ b/gnu/usr.bin/perl/ext/XS-APItest/numeric.xs @@ -59,3 +59,18 @@ grok_atoUV(number, endsv) PUSHs(sv_2mortal(newSViv(0))); } } + +void +my_strtod(s) + SV *s + PREINIT: + SV *sv = newSVsv(s); + char *endptr = NULL; + NV nv; + PPCODE: + nv = my_strtod(SvPV_force_nolen(sv), &endptr); + PUSHs(sv_2mortal(newSVnv(nv))); + if (endptr) { + sv_chop(sv, endptr); + PUSHs(sv_2mortal(sv)); + } diff --git a/gnu/usr.bin/perl/ext/XS-APItest/t/call.t b/gnu/usr.bin/perl/ext/XS-APItest/t/call.t index e4228077cbd..390ed8de938 100755 --- a/gnu/usr.bin/perl/ext/XS-APItest/t/call.t +++ b/gnu/usr.bin/perl/ext/XS-APItest/t/call.t @@ -60,8 +60,8 @@ for my $test ( [ G_VOID, [ qw(a p q) ], [ 0 ], '3 args, G_VOID' ], [ G_SCALAR, [ ], [ qw(y 1) ], '0 args, G_SCALAR' ], [ G_SCALAR, [ qw(a p q) ], [ qw(y 1) ], '3 args, G_SCALAR' ], - [ G_ARRAY, [ ], [ qw(x 1) ], '0 args, G_ARRAY' ], - [ G_ARRAY, [ qw(a p q) ], [ qw(b p x 3) ], '3 args, G_ARRAY' ], + [ G_LIST, [ ], [ qw(x 1) ], '0 args, G_LIST' ], + [ G_LIST, [ qw(a p q) ], [ qw(b p x 3) ], '3 args, G_LIST' ], [ G_DISCARD, [ ], [ qw(0) ], '0 args, G_DISCARD' ], [ G_DISCARD, [ qw(a p q) ], [ qw(0) ], '3 args, G_DISCARD' ], ) @@ -89,7 +89,7 @@ for my $test ( ok(eq_array( [ call_method('meth', $flags, $obj, @$args) ], $expected), "$description call_method('meth')"); - my $returnval = ((($flags & G_WANT) == G_ARRAY) || ($flags & G_DISCARD)) + my $returnval = ((($flags & G_WANT) == G_LIST) || ($flags & G_DISCARD)) ? [0] : [ undef, 1 ]; for my $keep (0, G_KEEPERR) { my $desc = $description . ($keep ? ' G_KEEPERR' : ''); @@ -313,12 +313,12 @@ for my $fn_type (qw(eval_pv eval_sv call_sv)) { } } elsif ($fn_type eq 'eval_sv') { - $desc = "eval_sv('$code', G_ARRAY|$keep_desc)"; - @ret = eval_sv($code, G_ARRAY|$keep); + $desc = "eval_sv('$code', G_LIST|$keep_desc)"; + @ret = eval_sv($code, G_LIST|$keep); } elsif ($fn_type eq 'call_sv') { - $desc = "call_sv('$code', G_EVAL|G_ARRAY|$keep_desc)"; - @ret = call_sv($code, G_EVAL|G_ARRAY|$keep); + $desc = "call_sv('$code', G_EVAL|G_LIST|$keep_desc)"; + @ret = call_sv($code, G_EVAL|G_LIST|$keep); } is(scalar @ret, ($expect_success && $fn_type ne 'eval_pv') ? 2 : 1, "$desc - number of returned args"); diff --git a/gnu/usr.bin/perl/ext/XS-APItest/t/clone-with-stack.t b/gnu/usr.bin/perl/ext/XS-APItest/t/clone-with-stack.t index 10fa036dc73..2f95d2dd55d 100644 --- a/gnu/usr.bin/perl/ext/XS-APItest/t/clone-with-stack.t +++ b/gnu/usr.bin/perl/ext/XS-APItest/t/clone-with-stack.t @@ -10,7 +10,7 @@ use XS::APItest; # clone_with_stack creates a clone of the perl interpreter including # the stack, then destroys the original interpreter and runs the # remaining code using the new one. -# This is like doing a psuedo-fork and exiting the parent. +# This is like doing a pseudo-fork and exiting the parent. use Config; if (not $Config{'useithreads'}) { diff --git a/gnu/usr.bin/perl/ext/XS-APItest/t/grok.t b/gnu/usr.bin/perl/ext/XS-APItest/t/grok.t index b6ad905b60a..617e8368da3 100644 --- a/gnu/usr.bin/perl/ext/XS-APItest/t/grok.t +++ b/gnu/usr.bin/perl/ext/XS-APItest/t/grok.t @@ -68,33 +68,42 @@ foreach my $leader ('', ' ', ' ') { } # format tests -my @groks = - ( - # input, in flags, out uv, out flags - [ "1", 0, 1, IS_NUMBER_IN_UV ], - [ "1x", 0, undef, 0 ], - [ "1x", PERL_SCAN_TRAILING, 1, IS_NUMBER_IN_UV | IS_NUMBER_TRAILING ], - [ "3.1", 0, 3, IS_NUMBER_IN_UV | IS_NUMBER_NOT_INT ], - [ "3.1a", 0, undef, 0 ], - [ "3.1a", PERL_SCAN_TRAILING, 3, - IS_NUMBER_IN_UV | IS_NUMBER_NOT_INT | IS_NUMBER_TRAILING ], - [ "3e5", 0, undef, IS_NUMBER_NOT_INT ], - [ "3e", 0, undef, 0 ], - [ "3e", PERL_SCAN_TRAILING, 3, IS_NUMBER_IN_UV | IS_NUMBER_TRAILING ], - [ "3e+", 0, undef, 0 ], - [ "3e+", PERL_SCAN_TRAILING, 3, IS_NUMBER_IN_UV | IS_NUMBER_TRAILING ], - [ "Inf", 0, undef, - IS_NUMBER_INFINITY | IS_NUMBER_NOT_INT ], - [ "In", 0, undef, 0 ], - [ "Infin",0, undef, IS_NUMBER_INFINITY | IS_NUMBER_NOT_INT | IS_NUMBER_TRAILING ], - # this doesn't work and hasn't been needed yet - #[ "Infin",PERL_SCAN_TRAILING, undef, - # IS_NUMBER_INFINITY | IS_NUMBER_NOT_INT | IS_NUMBER_TRAILING ], - [ "nan", 0, undef, IS_NUMBER_NAN | IS_NUMBER_NOT_INT ], - # even without PERL_SCAN_TRAILING nan can have weird stuff trailing - [ "nanx", 0, undef, IS_NUMBER_NAN | IS_NUMBER_NOT_INT | IS_NUMBER_TRAILING ], - [ "nanx", PERL_SCAN_TRAILING, undef, IS_NUMBER_NAN | IS_NUMBER_NOT_INT | IS_NUMBER_TRAILING ], - ); +my @groks = ( + # input, in flags, out uv, out flags + (map { + # Expect the same answer with or without SCAN_TRAILING + [ $_->[0], 0, $_->[1], $_->[2] ], + [ $_->[0], PERL_SCAN_TRAILING, $_->[1], $_->[2] ], + } ( + [ "1", 1, IS_NUMBER_IN_UV ], + [ "3.1", 3, IS_NUMBER_IN_UV | IS_NUMBER_NOT_INT ], + [ "3e5", undef, IS_NUMBER_NOT_INT ], + [ "Inf", undef, IS_NUMBER_INFINITY | IS_NUMBER_NOT_INT ], + [ "nan", undef, IS_NUMBER_NAN | IS_NUMBER_NOT_INT ], + [ "nanq", undef, IS_NUMBER_NAN | IS_NUMBER_NOT_INT ], + [ "nan(123)", undef, IS_NUMBER_NAN | IS_NUMBER_NOT_INT ], + # trailing whitespace is ok though + [ "1 ", 1, IS_NUMBER_IN_UV ], + [ "nan(123 ) ", undef, IS_NUMBER_NAN | IS_NUMBER_NOT_INT ], + )), + (map { + # Trailing stuff should cause failure unless SCAN_TRAILING + [ $_->[0], 0, undef, 0 ], + [ $_->[0], PERL_SCAN_TRAILING, $_->[1], $_->[2] | IS_NUMBER_TRAILING ], + } ( + [ "1x", 1, IS_NUMBER_IN_UV ], + [ "3.1a", 3, IS_NUMBER_IN_UV | IS_NUMBER_NOT_INT ], + [ "3e", 3, IS_NUMBER_IN_UV ], + [ "3e+", 3, IS_NUMBER_IN_UV ], + [ "Infin", undef, IS_NUMBER_INFINITY | IS_NUMBER_NOT_INT ], + [ "nanx", undef, IS_NUMBER_NAN | IS_NUMBER_NOT_INT ], + [ "nan(123 x)", undef, IS_NUMBER_NAN | IS_NUMBER_NOT_INT ], + [ "nan(123) x", undef, IS_NUMBER_NAN | IS_NUMBER_NOT_INT ], + # TODO: this should probably be in the preceding section, parsed + # as invalid with or without SCAN_TRAILING. See GH #19464. + [ "In", undef, 0 ], + )), +); my $non_ieee_fp = ($Config{doublekind} == 9 || $Config{doublekind} == 10 || diff --git a/gnu/usr.bin/perl/ext/XS-APItest/t/hash.t b/gnu/usr.bin/perl/ext/XS-APItest/t/hash.t index 77a23aad238..4a593961160 100755 --- a/gnu/usr.bin/perl/ext/XS-APItest/t/hash.t +++ b/gnu/usr.bin/perl/ext/XS-APItest/t/hash.t @@ -191,7 +191,8 @@ sub test_precomputed_hashes { } { - use Scalar::Util 'weaken'; + no warnings 'experimental::builtin'; + use builtin 'weaken'; my %h; fill_hash_with_nulls(\%h); my @objs; @@ -291,6 +292,59 @@ pass("hv_store works on the hint hash"); is_deeply(\@keys, [ sort keys %hash ], "check HeSVKEY_force()"); } +# Test that mg_copy is called when expected (and not called when not) +# No (other) tests in core will fail if the implementation of `keys %tied_hash` +# is (accidentally) changed to also call hv_iterval() and trigger mg_copy. +# However, this behaviour is visible, and tested by Variable::Magic on CPAN. + +{ + my %h; + my $obj = tie %h, 'Tie::StdHash'; + sv_magic_mycopy(\%h); + + is(sv_magic_mycopy_count(\%h), 0); + + $h{perl} = "rules"; + + is(sv_magic_mycopy_count(\%h), 1); + + is($h{perl}, "rules", "found key"); + + is(sv_magic_mycopy_count(\%h), 2); + + # keys *doesn't* trigger copy magic, so the count is still 2 + my @flat = keys %h; + + is(sv_magic_mycopy_count(\%h), 2); + + @flat = values %h; + + is(sv_magic_mycopy_count(\%h), 3); + + @flat = each %h; + + is(sv_magic_mycopy_count(\%h), 4); +} + +{ + # There are two API variants - hv_delete and hv_delete_ent. The Perl + # interpreter exclusively uses hv_delete_ent. Only XS code uses hv_delete. + # Hence the problem case could only be triggered by XS code called on + # symbol tables, and with particular non-ASCII keys: + + # Deleting a key with WASUTF from a stash used to trigger a use-after free: + my $key = "\xFF\x{100}"; + chop $key; + ++$main::{$key}; + is(XS::APItest::Hash::delete(\%main::, $key), 1, + "hv_delete doesn't trigger a use-after free"); + + # Perl code has always used this API, which never had the problem: + ++$main::{$key}; + is(XS::APItest::Hash::delete_ent(\%main::, $key), 1, + "hv_delete_ent never triggered a use-after free, but test it anyway"); +} + done_testing; exit; diff --git a/gnu/usr.bin/perl/ext/XS-APItest/t/locale.t b/gnu/usr.bin/perl/ext/XS-APItest/t/locale.t index 9d338323c2c..2827b3602ae 100644 --- a/gnu/usr.bin/perl/ext/XS-APItest/t/locale.t +++ b/gnu/usr.bin/perl/ext/XS-APItest/t/locale.t @@ -128,6 +128,7 @@ SKIP: { I18N::Langinfo->import(keys %items) if $has_nl_langinfo; foreach my $formal_item (sort keys %items) { + SKIP: if (exists $correct_C_responses{$formal_item}) { my $correct = $correct_C_responses{$formal_item}; my $item = eval $items{$formal_item}; @@ -137,9 +138,11 @@ SKIP: { is ($result, $correct, "Returns expected value" . "('$correct') for $formal_item"); } + elsif (defined $result) { + pass("Returns a value (in this case '$result') for $formal_item"); + } else { - ok (defined $result, - "Returns a value (in this case '$result') for $formal_item"); + fail("Returned undef for $formal_item"); } } } diff --git a/gnu/usr.bin/perl/ext/XS-APItest/t/magic.t b/gnu/usr.bin/perl/ext/XS-APItest/t/magic.t index e47cd887cbd..46feb7ab074 100644 --- a/gnu/usr.bin/perl/ext/XS-APItest/t/magic.t +++ b/gnu/usr.bin/perl/ext/XS-APItest/t/magic.t @@ -29,7 +29,6 @@ ok !mg_find_bar($sv), '... and bar magic is removed too'; is(test_get_vtbl(), 0, 'get_vtbl(-1) returns NULL'); -use Scalar::Util 'weaken'; eval { sv_magic(\!0, $foo) }; is $@, "", 'PERL_MAGIC_ext is permitted on read-only things'; diff --git a/gnu/usr.bin/perl/ext/XS-APItest/t/multicall.t b/gnu/usr.bin/perl/ext/XS-APItest/t/multicall.t index 8630df751fe..65d3ff00b76 100644 --- a/gnu/usr.bin/perl/ext/XS-APItest/t/multicall.t +++ b/gnu/usr.bin/perl/ext/XS-APItest/t/multicall.t @@ -75,7 +75,7 @@ use XS::APItest; { package Ret; - use XS::APItest qw(multicall_return G_VOID G_SCALAR G_ARRAY); + use XS::APItest qw(multicall_return G_VOID G_SCALAR G_LIST); # Helper function for the block that follows: # check that @$got matches what would be expected if a function returned @@ -93,11 +93,11 @@ use XS::APItest; "G_SCALAR: $desc: correct arg"); } else { - ::is (join('-',@$got), join('-', @$args), "G_ARRAY: $desc"); + ::is (join('-',@$got), join('-', @$args), "G_LIST: $desc"); } } - for my $gimme (G_VOID, G_SCALAR, G_ARRAY) { + for my $gimme (G_VOID, G_SCALAR, G_LIST) { my @a; # zero args diff --git a/gnu/usr.bin/perl/ext/XS-APItest/t/printf.t b/gnu/usr.bin/perl/ext/XS-APItest/t/printf.t index 28f21e35e17..927802377f9 100755 --- a/gnu/usr.bin/perl/ext/XS-APItest/t/printf.t +++ b/gnu/usr.bin/perl/ext/XS-APItest/t/printf.t @@ -1,12 +1,4 @@ -BEGIN { - require Config; import Config; - if ($Config{usequadmath}) { - print "1..0 # Skip: usequadmath\n"; - exit(0); - } -} - -use Test::More tests => 12; +use Test::More tests => 13; BEGIN { use_ok('XS::APItest') }; @@ -29,6 +21,7 @@ print_int(3); print_long(4); print_float(4); print_long_double() if $ldok; # val=7 hardwired +print_long_doubleL() if $ldok; # val=7 hardwired print_flush(); @@ -47,8 +40,9 @@ is($output[2], "4", "print_long"); is($output[3], "4.000", "print_float"); SKIP: { - skip "No long doubles", 1 unless $ldok; + skip "No long doubles", 2 unless $ldok; is($output[4], "7.000", "print_long_double"); + is($output[5], "7.000", "print_long_doubleL"); } { diff --git a/gnu/usr.bin/perl/ext/XS-APItest/t/utf8.t b/gnu/usr.bin/perl/ext/XS-APItest/t/utf8.t index 1edc02d6434..50d1a4e0fd6 100644 --- a/gnu/usr.bin/perl/ext/XS-APItest/t/utf8.t +++ b/gnu/usr.bin/perl/ext/XS-APItest/t/utf8.t @@ -1227,4 +1227,13 @@ SKIP: } } +{ + my $replacement = chr(0xFFFD); + use bytes; + is(test_UTF8_IS_REPLACEMENT($replacement, length $replacement), 1, + "UTF8_IS_REPLACEMENT returns 1 on a REPLACEMENT character"); + is(test_UTF8_IS_REPLACEMENT($replacement, length $replacement) - 1, 0, + "UTF8_IS_REPLACEMENT returns 0 on too short an input"); +} + done_testing; diff --git a/gnu/usr.bin/perl/ext/XS-APItest/t/xsub_h.t b/gnu/usr.bin/perl/ext/XS-APItest/t/xsub_h.t index a7e2541e425..51b3d706042 100644 --- a/gnu/usr.bin/perl/ext/XS-APItest/t/xsub_h.t +++ b/gnu/usr.bin/perl/ext/XS-APItest/t/xsub_h.t @@ -117,7 +117,7 @@ foreach $XS_VERSION (undef, @versions) { is_deeply([XS_APIVERSION_valid("Pie")], [], "XS_APIVERSION_BOOTCHECK passes"); is(eval {XS_APIVERSION_invalid("Pie"); 1}, undef, "XS_APIVERSION_BOOTCHECK croaks for an invalid version"); -like($@, qr/Perl API version v1.0.16 of Pie does not match v5\.\d+\.\d+/, +like($@, qr/Perl API version v1.0.16 of Pie does not match \Q$^V\E/a, "expected error"); my @xsreturn; diff --git a/gnu/usr.bin/perl/ext/XS-Typemap/Typemap.pm b/gnu/usr.bin/perl/ext/XS-Typemap/Typemap.pm index 320e9b89419..3a4ee1cc3c0 100644 --- a/gnu/usr.bin/perl/ext/XS-Typemap/Typemap.pm +++ b/gnu/usr.bin/perl/ext/XS-Typemap/Typemap.pm @@ -34,18 +34,23 @@ to the test script. use parent qw/ Exporter /; require XSLoader; -our $VERSION = '0.17'; +our $VERSION = '0.19'; our @EXPORT = (qw/ T_SV + T_SV_output T_SVREF T_SVREF_REFCOUNT_FIXED + T_SVREF_REFCOUNT_FIXED_output T_AVREF T_AVREF_REFCOUNT_FIXED + T_AVREF_REFCOUNT_FIXED_output T_HVREF T_HVREF_REFCOUNT_FIXED + T_HVREF_REFCOUNT_FIXED_output T_CVREF T_CVREF_REFCOUNT_FIXED + T_CVREF_REFCOUNT_FIXED_output T_SYSRET_fail T_SYSRET_pass T_UV T_IV diff --git a/gnu/usr.bin/perl/ext/XS-Typemap/Typemap.xs b/gnu/usr.bin/perl/ext/XS-Typemap/Typemap.xs index 1c54d1ad1b4..9250e3e1108 100644 --- a/gnu/usr.bin/perl/ext/XS-Typemap/Typemap.xs +++ b/gnu/usr.bin/perl/ext/XS-Typemap/Typemap.xs @@ -157,7 +157,7 @@ XS_unpack_anotherstructPtrPtr(SV *in) else Perl_croak(aTHX_ "Argument is not an ARRAY reference"); - nitems = av_tindex(inary) + 1; + nitems = av_count(inary); /* FIXME dunno if supposed to use perl mallocs here */ /* N+1 elements so we know the last one is NULL */ @@ -267,6 +267,13 @@ T_SV( sv ) OUTPUT: RETVAL +void +T_SV_output(sv) + SV *sv + CODE: + sv = sv_2mortal(newSVpvn("test", 4)); + OUTPUT: + sv ## T_SVREF @@ -290,6 +297,11 @@ T_SVREF_REFCOUNT_FIXED( svref ) OUTPUT: RETVAL +void +T_SVREF_REFCOUNT_FIXED_output( OUT svref ) + SVREF_FIXED svref + CODE: + svref = newSVpvn("test", 4); ## T_AVREF @@ -313,6 +325,12 @@ T_AVREF_REFCOUNT_FIXED( av ) OUTPUT: RETVAL +void +T_AVREF_REFCOUNT_FIXED_output( OUT avref) + AV_FIXED *avref; + CODE: + avref = newAV(); + av_push(avref, newSVpvs("test")); ## T_HVREF @@ -336,6 +354,12 @@ T_HVREF_REFCOUNT_FIXED( hv ) OUTPUT: RETVAL +void +T_HVREF_REFCOUNT_FIXED_output( OUT hvref) + HV_FIXED *hvref; + CODE: + hvref = newHV(); + hv_stores(hvref, "test", newSVpvs("value")); ## T_CVREF @@ -359,6 +383,12 @@ T_CVREF_REFCOUNT_FIXED( cv ) OUTPUT: RETVAL +void +T_CVREF_REFCOUNT_FIXED_output( OUT cvref) + CV_FIXED *cvref; + CODE: + cvref = get_cv("XSLoader::load", 0); + SvREFCNT_inc(cvref); ## T_SYSRET diff --git a/gnu/usr.bin/perl/ext/XS-Typemap/t/Typemap.t b/gnu/usr.bin/perl/ext/XS-Typemap/t/Typemap.t index 3e56b573d6c..93a67bf031f 100755 --- a/gnu/usr.bin/perl/ext/XS-Typemap/t/Typemap.t +++ b/gnu/usr.bin/perl/ext/XS-Typemap/t/Typemap.t @@ -6,7 +6,7 @@ BEGIN { } } -use Test::More tests => 156; +use Test::More tests => 170; use strict; #catch WARN_INTERNAL type errors, and anything else unexpected @@ -33,6 +33,10 @@ note("T_SV"); my $sv = "Testing T_SV"; is( T_SV($sv), $sv); +# T_SV with output +is_deeply([ T_SV_output($sv) ], [], "T_SV_output: no return value"); +is($sv, "test", "T_SV_output: output written to"); + # T_SVREF - reference to Scalar note("T_SVREF"); $sv .= "REF"; @@ -51,6 +55,14 @@ is( ${ T_SVREF_REFCOUNT_FIXED($svref) }, $$svref ); eval { T_SVREF_REFCOUNT_FIXED( "fail - not ref" ) }; ok( $@ ); +# output only +SKIP:{ + my $svr; + is_deeply([ T_SVREF_REFCOUNT_FIXED_output($svr) ], [ ], "call with non-ref lvalue, no return value"); + ok(ref $svr, "output parameter now a reference") + or skip "Not a reference", 1; + is($$svr, "test", "reference to correct value"); +} # T_AVREF - reference to a perl Array note("T_AVREF"); @@ -67,6 +79,14 @@ is( T_AVREF_REFCOUNT_FIXED(\@array), \@array); eval { T_AVREF_REFCOUNT_FIXED( \$sv ) }; ok( $@ ); +# output only +SKIP:{ + my $avr; + is_deeply([ T_AVREF_REFCOUNT_FIXED_output($avr) ], [ ], "call with non-ref lvalue, no return value"); + ok(ref $avr, "output parameter now a reference") + or skip "Not a reference", 1; + is_deeply($avr, [ "test" ], "has expected entry"); +} # T_HVREF - reference to a perl Hash note("T_HVREF"); @@ -84,6 +104,14 @@ is( T_HVREF_REFCOUNT_FIXED(\%hash), \%hash); eval { T_HVREF_REFCOUNT_FIXED( \@array ) }; ok( $@ ); +# output only +SKIP:{ + my $hvr; + is_deeply([ T_HVREF_REFCOUNT_FIXED_output($hvr) ], [ ], "call with non-ref lvalue, no return value"); + ok(ref $hvr, "output parameter now a reference") + or skip "Not a reference", 1; + is($hvr->{test}, "value", "has expected key"); +} # T_CVREF - reference to perl subroutine note("T_CVREF"); @@ -98,6 +126,14 @@ is( T_CVREF_REFCOUNT_FIXED($sub), $sub ); eval { T_CVREF_REFCOUNT_FIXED( \@array ) }; ok( $@ ); +# output only +SKIP:{ + my $cvr; + is_deeply([ T_CVREF_REFCOUNT_FIXED_output($cvr) ], [ ], "call with non-ref lvalue, no return value"); + ok(ref $cvr, "output parameter now a reference") + or skip "Not a reference", 1; + is($cvr, \&XSLoader::load, "ref to expected sub"); +} # T_SYSRET - system return values note("T_SYSRET"); diff --git a/gnu/usr.bin/perl/ext/attributes/attributes.pm b/gnu/usr.bin/perl/ext/attributes/attributes.pm index c60f9406b99..4f613f40847 100644 --- a/gnu/usr.bin/perl/ext/attributes/attributes.pm +++ b/gnu/usr.bin/perl/ext/attributes/attributes.pm @@ -1,6 +1,6 @@ package attributes; -our $VERSION = 0.33; +our $VERSION = 0.34; @EXPORT_OK = qw(get reftype); @EXPORT = (); diff --git a/gnu/usr.bin/perl/ext/attributes/attributes.xs b/gnu/usr.bin/perl/ext/attributes/attributes.xs index 07b7b8dfe82..f2f28df9380 100644 --- a/gnu/usr.bin/perl/ext/attributes/attributes.xs +++ b/gnu/usr.bin/perl/ext/attributes/attributes.xs @@ -204,7 +204,7 @@ usage: Perl_sv_sethek(aTHX_ TARG, HvNAME_HEK(SvSTASH(sv))); #if 0 /* this was probably a bad idea */ else if (SvPADMY(sv)) - sv_setsv(TARG, &PL_sv_no); /* unblessed lexical */ + sv_setbool(TARG, FALSE); /* unblessed lexical */ #endif else { const HV *stash = NULL; diff --git a/gnu/usr.bin/perl/ext/mro/mro.pm b/gnu/usr.bin/perl/ext/mro/mro.pm index d094c020809..39ade22efe8 100644 --- a/gnu/usr.bin/perl/ext/mro/mro.pm +++ b/gnu/usr.bin/perl/ext/mro/mro.pm @@ -12,7 +12,7 @@ use warnings; # mro.pm versions < 1.00 reserved for MRO::Compat # for partial back-compat to 5.[68].x -our $VERSION = '1.23'; +our $VERSION = '1.26'; require XSLoader; XSLoader::load('mro'); @@ -89,8 +89,7 @@ resolution order under multiple inheritance. It was first introduced in the language Dylan (see links in the L section), and then later adopted as the preferred MRO (Method Resolution Order) for the new-style classes in Python 2.3. Most recently it has been adopted as the -"canonical" MRO for Perl 6 classes, and the default MRO for Parrot objects -as well. +"canonical" MRO for Raku classes. =head2 How does C3 work diff --git a/gnu/usr.bin/perl/ext/mro/mro.xs b/gnu/usr.bin/perl/ext/mro/mro.xs index 80bce9a6ad1..6bedd039a13 100644 --- a/gnu/usr.bin/perl/ext/mro/mro.xs +++ b/gnu/usr.bin/perl/ext/mro/mro.xs @@ -63,8 +63,9 @@ S_mro_get_linear_isa_c3(pTHX_ HV* stash, U32 level) /* For a better idea how the rest of this works, see the much clearer pure perl version in Algorithm::C3 0.01: - http://search.cpan.org/src/STEVAN/Algorithm-C3-0.01/lib/Algorithm/C3.pm - (later versions go about it differently than this code for speed reasons) + https://fastapi.metacpan.org/source/STEVAN/Algorithm-C3-0.01/lib/Algorithm/C3.pm + (later versions of this module go about it differently than this code + for speed reasons) */ if(isa && AvFILLp(isa) >= 0) { @@ -162,16 +163,7 @@ S_mro_get_linear_isa_c3(pTHX_ HV* stash, U32 level) */ HE* const he = hv_fetch_ent(tails, seqitem, 1, 0); if(he) { - SV* const val = HeVAL(he); - /* For 5.8.0 and later, sv_inc() with increment undef to - an IV of 1, which is what we want for a newly created - entry. However, for 5.6.x it will become an NV of - 1.0, which confuses the SvIVX() checks above. */ - if(SvIOK(val)) { - SvIV_set(val, SvIVX(val) + 1); - } else { - sv_setiv(val, 1); - } + sv_inc_nomg(HeVAL(he)); } } } @@ -253,13 +245,13 @@ S_mro_get_linear_isa_c3(pTHX_ HV* stash, U32 level) hierarchy is not C3-incompatible */ if(!winner) { SV *errmsg; - I32 i; + Size_t i; errmsg = newSVpvf( "Inconsistent hierarchy during C3 merge of class '%" HEKf "':\n\t" "current merge results [\n", HEKfARG(stashhek)); - for (i = 0; i <= av_tindex(retval); i++) { + for (i = 0; i < av_count(retval); i++) { SV **elem = av_fetch(retval, i, 0); sv_catpvf(errmsg, "\t\t%" SVf ",\n", SVfARG(*elem)); } diff --git a/gnu/usr.bin/perl/ext/re/re.pm b/gnu/usr.bin/perl/ext/re/re.pm index e2eddc09b91..cf1f7421a2c 100644 --- a/gnu/usr.bin/perl/ext/re/re.pm +++ b/gnu/usr.bin/perl/ext/re/re.pm @@ -4,11 +4,13 @@ package re; use strict; use warnings; -our $VERSION = "0.40"; +our $VERSION = "0.43"; our @ISA = qw(Exporter); -our @EXPORT_OK = ('regmust', - qw(is_regexp regexp_pattern - regname regnames regnames_count)); +our @EXPORT_OK = qw{ + is_regexp regexp_pattern + regname regnames regnames_count + regmust optimization +}; our %EXPORT_OK = map { $_ => 1 } @EXPORT_OK; my %bitmask = ( @@ -69,8 +71,6 @@ my %flags = ( EXTRA => 0x3FF0000, TRIEM => 0x0010000, - OFFSETS => 0x0020000, - OFFSETSDBG => 0x0040000, STATE => 0x0080000, OPTIMISEM => 0x0100000, STACK => 0x0280000, @@ -79,9 +79,7 @@ my %flags = ( DUMP_PRE_OPTIMIZE => 0x1000000, WILDCARD => 0x2000000, ); -$flags{ALL} = -1 & ~($flags{OFFSETS} - |$flags{OFFSETSDBG} - |$flags{BUFFERS} +$flags{ALL} = -1 & ~($flags{BUFFERS} |$flags{DUMP_PRE_OPTIMIZE} |$flags{WILDCARD} ); @@ -515,6 +513,12 @@ comma-separated list of C properties to use for highlighting strings on/off, pre-point part on/off. See L for additional info. +B that the exact format of the C mode is B considered +to be an officially supported API of Perl. It is intended for debugging +only and may change as the core development team deems appropriate +without notice or deprecation in any release of Perl, major or minor. +Any documentation of the output is purely advisory. + As of 5.9.5 the directive C and its equivalents are lexically scoped, as the other directives are. However they have both compile-time and run-time effects. @@ -527,7 +531,17 @@ Similarly C produces debugging output, the difference being that it allows the fine tuning of what debugging output will be emitted. Options are divided into three groups, those related to compilation, those related to execution and those related to special -purposes. The options are as follows: +purposes. + +B that the options provided under the C mode and the exact +format of the output they create is B considered to be an +officially supported API of Perl. It is intended for debugging only and +may change as the core development team deems appropriate without notice +or deprecation in any release of Perl, major or minor. Any documentation +of the format or options available is advisory only and is subject to +change without notice. + +The options are as follows: =over 4 @@ -624,26 +638,6 @@ Enable debugging of the \G modifier. Enable enhanced optimisation debugging and start-point optimisations. Probably not useful except when debugging the regexp engine itself. -=item OFFSETS - -Dump offset information. This can be used to see how regops correlate -to the pattern. Output format is - - NODENUM:POSITION[LENGTH] - -Where 1 is the position of the first char in the string. Note that position -can be 0, or larger than the actual length of the pattern, likewise length -can be zero. - -=item OFFSETSDBG - -Enable debugging of offsets information. This emits copious -amounts of trace information and doesn't mesh well with other -debug options. - -Almost definitely only useful to people hacking -on the offsets part of the debug engine. - =item DUMP_PRE_OPTIMIZE Enable the dumping of the compiled pattern before the optimization phase. @@ -685,8 +679,7 @@ These are useful shortcuts to save on the typing. =item ALL -Enable all options at once except OFFSETS, OFFSETSDBG, BUFFERS, WILDCARD, and -DUMP_PRE_OPTIMIZE. +Enable all options at once except BUFFERS, WILDCARD, and DUMP_PRE_OPTIMIZE. (To get every single option without exception, use both ALL and EXTRA, or starting in 5.30 on a C<-DDEBUGGING>-enabled perl interpreter, use the B<-Drv> command-line switches.) @@ -751,6 +744,28 @@ will be warning free regardless of what $ref actually is. Like C this function will not be confused by overloading or blessing of the object. +=item regname($name,$all) + +Returns the contents of a named buffer of the last successful match. If +$all is true, then returns an array ref containing one entry per buffer, +otherwise returns the first defined buffer. + +=item regnames($all) + +Returns a list of all of the named buffers defined in the last successful +match. If $all is true, then it returns all names defined, if not it returns +only names which were involved in the match. + +=item regnames_count() + +Returns the number of distinct names defined in the pattern used +for the last successful match. + +B this result is always the actual number of distinct +named buffers defined, it may not actually match that which is +returned by C and related routines when those routines +have not been called with the $all parameter set. + =item regmust($ref) If the argument is a compiled regular expression as returned by C, @@ -783,27 +798,115 @@ floating string. This will be what the optimiser of the Perl that you are using thinks is the longest. If you believe that the result is wrong please report it via the L utility. -=item regname($name,$all) +=item optimization($ref) -Returns the contents of a named buffer of the last successful match. If -$all is true, then returns an array ref containing one entry per buffer, -otherwise returns the first defined buffer. +If the argument is a compiled regular expression as returned by C, +then this function returns a hashref of the optimization information +discovered at compile time, so we can write tests around it. If any +other argument is given, returns C. -=item regnames($all) +The hash contents are expected to change from time to time as we develop +new ways to optimize - no assumption of stability should be made, not +even between minor versions of perl. -Returns a list of all of the named buffers defined in the last successful -match. If $all is true, then it returns all names defined, if not it returns -only names which were involved in the match. +For the current version, the hash will have the following contents: -=item regnames_count() +=over 4 -Returns the number of distinct names defined in the pattern used -for the last successful match. +=item minlen -B this result is always the actual number of distinct -named buffers defined, it may not actually match that which is -returned by C and related routines when those routines -have not been called with the $all parameter set. +An integer, the least number of characters in any string that can match. + +=item minlenret + +An integer, the least number of characters that can be in C<$&> after a +match. (Consider eg C< /ns(?=\d)/ >.) + +=item gofs + +An integer, the number of characters before C to start match at. + +=item noscan + +A boolean, C to indicate that any anchored/floating substrings +found should not be used. (CHECKME: apparently this is set for an +anchored pattern with no floating substring, but never used.) + +=item isall + +A boolean, C to indicate that the optimizer information is all +that the regular expression contains, and thus one does not need to +enter the regexp runtime engine at all. + +=item anchor SBOL + +A boolean, C if the pattern is anchored to start of string. + +=item anchor MBOL + +A boolean, C if the pattern is anchored to any start of line +within the string. + +=item anchor GPOS + +A boolean, C if the pattern is anchored to the end of the previous +match. + +=item skip + +A boolean, C if the start class can match only the first of a run. + +=item implicit + +A boolean, C if a C has been turned implicitly into a C. + +=item anchored/floating + +A byte string representing an anchored or floating substring respectively +that any match must contain, or undef if no such substring was found, or +if the substring would require utf8 to represent. + +=item anchored utf8/floating utf8 + +A utf8 string representing an anchored or floating substring respectively +that any match must contain, or undef if no such substring was found, or +if the substring contains only 7-bit ASCII characters. + +=item anchored min offset/floating min offset + +An integer, the first offset in characters from a match location at which +we should look for the corresponding substring. + +=item anchored max offset/floating max offset + +An integer, the last offset in characters from a match location at which +we should look for the corresponding substring. + +Ignored for anchored, so may be 0 or same as min. + +=item anchored end shift/floating end shift + +FIXME: not sure what this is, something to do with lookbehind. regcomp.c +says: + When the final pattern is compiled and the data is moved from the + scan_data_t structure into the regexp structure the information + about lookbehind is factored in, with the information that would + have been lost precalculated in the end_shift field for the + associated string. + +=item checking + +A constant string, one of "anchored", "floating" or "none" to indicate +which substring (if any) should be checked for first. + +=item stclass + +A string representation of a character class ("start class") that must +be the first character of any match. + +TODO: explain the representations. + +=back =back diff --git a/gnu/usr.bin/perl/ext/re/re.xs b/gnu/usr.bin/perl/ext/re/re.xs index f8d77dd988e..90f079008b6 100644 --- a/gnu/usr.bin/perl/ext/re/re.xs +++ b/gnu/usr.bin/perl/ext/re/re.xs @@ -11,7 +11,7 @@ #undef dXSBOOTARGSXSAPIVERCHK /* skip API version checking due to different interp struct size but, - this hack is until #123007 is resolved */ + this hack is until GitHub issue #14169 is resolved */ #define dXSBOOTARGSXSAPIVERCHK dXSBOOTARGSNOVERCHK START_EXTERN_C @@ -54,6 +54,10 @@ extern SV* my_reg_qr_package(pTHX_ REGEXP * const rx); #if defined(USE_ITHREADS) extern void* my_regdupe (pTHX_ REGEXP * const r, CLONE_PARAMS *param); #endif +extern void my_regprop(pTHX_ + const regexp *prog, SV* sv, const regnode* o, + const regmatch_info *reginfo, const RExC_state_t *pRExC_state +); EXTERN_C const struct regexp_engine my_reg_engine; EXTERN_C const struct regexp_engine wild_reg_engine; @@ -100,6 +104,8 @@ const struct regexp_engine wild_reg_engine = { my_re_op_compile, }; +#define newSVbool_(x) newSViv((x) ? 1 : 0) + MODULE = re PACKAGE = re void @@ -143,3 +149,94 @@ PPCODE: XSRETURN_UNDEF; } +SV * +optimization(sv) + SV * sv +PROTOTYPE: $ +PREINIT: + REGEXP *re; + regexp *r; + struct reg_substr_datum * data; + HV *hv; +CODE: +{ + re = SvRX(sv); + if (!re) { + XSRETURN_UNDEF; + } + + /* only for re engines we know about */ + if ( RX_ENGINE(re) != &my_reg_engine + && RX_ENGINE(re) != &wild_reg_engine + && RX_ENGINE(re) != &PL_core_reg_engine) + { + XSRETURN_UNDEF; + } + + if (!PL_colorset) { + reginitcolors(); + } + + r = ReANY(re); + hv = newHV(); + + hv_stores(hv, "minlen", newSViv(r->minlen)); + hv_stores(hv, "minlenret", newSViv(r->minlenret)); + hv_stores(hv, "gofs", newSViv(r->gofs)); + + data = &r->substrs->data[0]; + hv_stores(hv, "anchored", data->substr + ? newSVsv(data->substr) : &PL_sv_undef); + hv_stores(hv, "anchored utf8", data->utf8_substr + ? newSVsv(data->utf8_substr) : &PL_sv_undef); + hv_stores(hv, "anchored min offset", newSViv(data->min_offset)); + hv_stores(hv, "anchored max offset", newSViv(data->max_offset)); + hv_stores(hv, "anchored end shift", newSViv(data->end_shift)); + + data = &r->substrs->data[1]; + hv_stores(hv, "floating", data->substr + ? newSVsv(data->substr) : &PL_sv_undef); + hv_stores(hv, "floating utf8", data->utf8_substr + ? newSVsv(data->utf8_substr) : &PL_sv_undef); + hv_stores(hv, "floating min offset", newSViv(data->min_offset)); + hv_stores(hv, "floating max offset", newSViv(data->max_offset)); + hv_stores(hv, "floating end shift", newSViv(data->end_shift)); + + hv_stores(hv, "checking", newSVpv( + (!r->check_substr && !r->check_utf8) + ? "none" + : ( r->check_substr == r->substrs->data[1].substr + && r->check_utf8 == r->substrs->data[1].utf8_substr + ) + ? "floating" + : "anchored" + , 0)); + + hv_stores(hv, "noscan", newSVbool_(r->intflags & PREGf_NOSCAN)); + hv_stores(hv, "isall", newSVbool_(r->extflags & RXf_CHECK_ALL)); + hv_stores(hv, "anchor SBOL", newSVbool_(r->intflags & PREGf_ANCH_SBOL)); + hv_stores(hv, "anchor MBOL", newSVbool_(r->intflags & PREGf_ANCH_MBOL)); + hv_stores(hv, "anchor GPOS", newSVbool_(r->intflags & PREGf_ANCH_GPOS)); + hv_stores(hv, "skip", newSVbool_(r->intflags & PREGf_SKIP)); + hv_stores(hv, "implicit", newSVbool_(r->intflags & PREGf_IMPLICIT)); + + { + RXi_GET_DECL(r, ri); + if (ri->regstclass) { + SV* sv = newSV(0); + /* not Perl_regprop, we must have the DEBUGGING version */ + my_regprop(aTHX_ r, sv, ri->regstclass, NULL, NULL); + hv_stores(hv, "stclass", sv); + } else { + hv_stores(hv, "stclass", &PL_sv_undef); + } + } + + RETVAL = newRV_noinc((SV *)hv); +} +OUTPUT: + RETVAL + +# +# ex: set ts=8 sts=4 sw=4 et: +# diff --git a/gnu/usr.bin/perl/ext/re/t/regop.pl b/gnu/usr.bin/perl/ext/re/t/regop.pl index 86976ee0da3..c725b73a9e6 100644 --- a/gnu/usr.bin/perl/ext/re/t/regop.pl +++ b/gnu/usr.bin/perl/ext/re/t/regop.pl @@ -1,4 +1,4 @@ -use re Debug=>qw(DUMP EXECUTE OFFSETS TRIEC TEST); +use re Debug=>qw(DUMP EXECUTE TRIEC TEST); my @tests=( XY => 'X(A|[B]Q||C|D)Y' , foobar => '[f][o][o][b][a][r]', diff --git a/gnu/usr.bin/perl/ext/re/t/regop.t b/gnu/usr.bin/perl/ext/re/t/regop.t index cf35d71fb09..20e9586c332 100644 --- a/gnu/usr.bin/perl/ext/re/t/regop.t +++ b/gnu/usr.bin/perl/ext/re/t/regop.t @@ -140,7 +140,6 @@ Freeing REx: "[f][o][o][b][a][r]" minlen 3 --- # Compiling REx "(?:ABCP|ABCG|ABCE|ABCB|ABCA|ABCD)" -# Got 164 bytes for offset annotations. # TRIE(NATIVE): W:6 C:24 Uq:7 Min:4 Max:4 # Char : Match Base Ofs A B C P G E D # State|--------------------------------------------------- @@ -166,8 +165,6 @@ minlen 3 # # 20: END (0) # anchored "ABC" at 0 (checking anchored) minlen 4 -# Offsets: [20] -# 1:4[3] 3:4[15] 19:32[0] 20:34[0] # Guessing start of match in sv for REx "(?:ABCP|ABCG|ABCE|ABCB|ABCA|ABCD)" against "ABCD" # Found anchored substr "ABC" at offset 0... # Guessed: match at offset 0 @@ -210,8 +207,6 @@ anchored "ABC" at 0 # 47: EOL(48) # 48: END(0) #floating ""$ at 3..4 (checking floating) stclass "EXACTF <.>" minlen 3 -#Offsets: [48] -# 1:1[1] 3:2[1] 5:2[81] 45:83[1] 47:84[1] 48:85[0] #Guessing start of match, REx "(\.COM|\.EXE|\.BAT|\.CMD|\.VBS|\.VBE|\.JS|\.JSE|\.WSF|\.WSH|..." against "D:dev/perl/ver/28321_/perl.exe"... #Found floating substr ""$ at offset 30... #Starting position does not contradict /^/m... @@ -233,7 +228,6 @@ anchored "ABC" at 0 #Freeing REx: "(\\.COM|\\.EXE|\\.BAT|\\.CMD|\\.VBS|\\.VBE|\\.JS|\\.JSE|\\."...... %MATCHED% floating ""$ at 3..4 (checking floating) -#1:1[1] 3:2[1] 5:2[64] 45:83[1] 47:84[1] 48:85[0] #stclass EXACTF <.> minlen 3 #Found floating substr ""$ at offset 30... #Does not contradict STCLASS... @@ -241,22 +235,16 @@ floating ""$ at 3..4 (checking floating) #Matching stclass EXACTF <.> against ".exe" --- #Compiling REx "[q]" -#size 3 nodes Got 7 bytes for offset annotations. #first at 1 #Final program: # 1: EXACT (3) # 3: END(0) #anchored "q" at 0 (checking anchored isall) minlen 1 -#Offsets: [3] -# 1:1[3] 3:4[0] #Guessing start of match, REx "[q]" against "q"... #Found anchored substr "q" at offset 0... #Guessed: match at offset 0 #%MATCHED% #Freeing REx: "[q]" -Got 7 bytes for offset annotations. -Offsets: [3] -1:1[3] 3:4[0] %MATCHED% Freeing REx: "[q]" --- @@ -281,7 +269,6 @@ Freeing REx: "[q]" Freeing REx: "^(\S{1,9}):\s*(\d+)$" --- #Compiling REx "(?(DEFINE)(?foo))(?(DEFINE)(?(?&foo)bar))(?(DEFINE"... -#Got 532 bytes for offset annotations. study_chunk_recursed_count: 5 #Final program: # 1: DEFINEP (3) @@ -317,8 +304,6 @@ study_chunk_recursed_count: 5 # 61: TAIL (62) # 62: END (0) minlen 0 -#Offsets: [66] -# 1:3[0] 3:10[0] 5:17[1] 7:18[3] 9:21[1] 11:21[0] 13:22[0] 14:25[0] 16:32[0] 18:39[1] 20:41[3] 23:47[3] 25:50[1] 27:50[0] 29:51[0] 30:54[0] 32:61[0] 34:68[1] 36:70[3] 39:76[3] 41:79[1] 43:79[0] 45:80[0] 46:83[0] 48:90[0] 50:97[1] 52:99[3] 55:105[3] 57:108[1] 59:108[0] 61:109[0] 62:110[0] #Matching REx "(?(DEFINE)(?foo))(?(DEFINE)(?(?&foo)bar))(?(DEFINE"... against "" # 0 <> <> | 1:DEFINEP(3) # 0 <> <> | 3:IFTHEN(14) diff --git a/gnu/usr.bin/perl/feature.h b/gnu/usr.bin/perl/feature.h index 2f2f23c4da7..53be5b3a720 100644 --- a/gnu/usr.bin/perl/feature.h +++ b/gnu/usr.bin/perl/feature.h @@ -12,21 +12,26 @@ #define HINT_FEATURE_SHIFT 26 -#define FEATURE_BITWISE_BIT 0x0001 -#define FEATURE___SUB___BIT 0x0002 -#define FEATURE_MYREF_BIT 0x0004 -#define FEATURE_EVALBYTES_BIT 0x0008 -#define FEATURE_FC_BIT 0x0010 -#define FEATURE_INDIRECT_BIT 0x0020 -#define FEATURE_ISA_BIT 0x0040 -#define FEATURE_POSTDEREF_QQ_BIT 0x0080 -#define FEATURE_REFALIASING_BIT 0x0100 -#define FEATURE_SAY_BIT 0x0200 -#define FEATURE_SIGNATURES_BIT 0x0400 -#define FEATURE_STATE_BIT 0x0800 -#define FEATURE_SWITCH_BIT 0x1000 -#define FEATURE_UNIEVAL_BIT 0x2000 -#define FEATURE_UNICODE_BIT 0x4000 +#define FEATURE_BAREWORD_FILEHANDLES_BIT 0x0001 +#define FEATURE_BITWISE_BIT 0x0002 +#define FEATURE___SUB___BIT 0x0004 +#define FEATURE_MYREF_BIT 0x0008 +#define FEATURE_DEFER_BIT 0x0010 +#define FEATURE_EVALBYTES_BIT 0x0020 +#define FEATURE_MORE_DELIMS_BIT 0x0040 +#define FEATURE_FC_BIT 0x0080 +#define FEATURE_INDIRECT_BIT 0x0100 +#define FEATURE_ISA_BIT 0x0200 +#define FEATURE_MULTIDIMENSIONAL_BIT 0x0400 +#define FEATURE_POSTDEREF_QQ_BIT 0x0800 +#define FEATURE_REFALIASING_BIT 0x1000 +#define FEATURE_SAY_BIT 0x2000 +#define FEATURE_SIGNATURES_BIT 0x4000 +#define FEATURE_STATE_BIT 0x8000 +#define FEATURE_SWITCH_BIT 0x10000 +#define FEATURE_TRY_BIT 0x20000 +#define FEATURE_UNIEVAL_BIT 0x40000 +#define FEATURE_UNICODE_BIT 0x80000 #define FEATURE_BUNDLE_DEFAULT 0 #define FEATURE_BUNDLE_510 1 @@ -34,6 +39,7 @@ #define FEATURE_BUNDLE_515 3 #define FEATURE_BUNDLE_523 4 #define FEATURE_BUNDLE_527 5 +#define FEATURE_BUNDLE_535 6 #define FEATURE_BUNDLE_CUSTOM (HINT_FEATURE_MASK >> HINT_FEATURE_SHIFT) #define CURRENT_HINTS \ @@ -46,34 +52,47 @@ ? (PL_curcop->cop_features & (mask)) : FALSE) /* The longest string we pass in. */ -#define MAX_FEATURE_LEN (sizeof("postderef_qq")-1) +#define MAX_FEATURE_LEN (sizeof("bareword_filehandles")-1) #define FEATURE_FC_IS_ENABLED \ ( \ (CURRENT_FEATURE_BUNDLE >= FEATURE_BUNDLE_515 && \ - CURRENT_FEATURE_BUNDLE <= FEATURE_BUNDLE_527) \ + CURRENT_FEATURE_BUNDLE <= FEATURE_BUNDLE_535) \ || (CURRENT_FEATURE_BUNDLE == FEATURE_BUNDLE_CUSTOM && \ FEATURE_IS_ENABLED_MASK(FEATURE_FC_BIT)) \ ) #define FEATURE_ISA_IS_ENABLED \ ( \ - CURRENT_FEATURE_BUNDLE == FEATURE_BUNDLE_CUSTOM && \ - FEATURE_IS_ENABLED_MASK(FEATURE_ISA_BIT) \ + CURRENT_FEATURE_BUNDLE == FEATURE_BUNDLE_535 \ + || (CURRENT_FEATURE_BUNDLE == FEATURE_BUNDLE_CUSTOM && \ + FEATURE_IS_ENABLED_MASK(FEATURE_ISA_BIT)) \ ) #define FEATURE_SAY_IS_ENABLED \ ( \ (CURRENT_FEATURE_BUNDLE >= FEATURE_BUNDLE_510 && \ - CURRENT_FEATURE_BUNDLE <= FEATURE_BUNDLE_527) \ + CURRENT_FEATURE_BUNDLE <= FEATURE_BUNDLE_535) \ || (CURRENT_FEATURE_BUNDLE == FEATURE_BUNDLE_CUSTOM && \ FEATURE_IS_ENABLED_MASK(FEATURE_SAY_BIT)) \ ) +#define FEATURE_TRY_IS_ENABLED \ + ( \ + CURRENT_FEATURE_BUNDLE == FEATURE_BUNDLE_CUSTOM && \ + FEATURE_IS_ENABLED_MASK(FEATURE_TRY_BIT) \ + ) + +#define FEATURE_DEFER_IS_ENABLED \ + ( \ + CURRENT_FEATURE_BUNDLE == FEATURE_BUNDLE_CUSTOM && \ + FEATURE_IS_ENABLED_MASK(FEATURE_DEFER_BIT) \ + ) + #define FEATURE_STATE_IS_ENABLED \ ( \ (CURRENT_FEATURE_BUNDLE >= FEATURE_BUNDLE_510 && \ - CURRENT_FEATURE_BUNDLE <= FEATURE_BUNDLE_527) \ + CURRENT_FEATURE_BUNDLE <= FEATURE_BUNDLE_535) \ || (CURRENT_FEATURE_BUNDLE == FEATURE_BUNDLE_CUSTOM && \ FEATURE_IS_ENABLED_MASK(FEATURE_STATE_BIT)) \ ) @@ -88,7 +107,8 @@ #define FEATURE_BITWISE_IS_ENABLED \ ( \ - CURRENT_FEATURE_BUNDLE == FEATURE_BUNDLE_527 \ + (CURRENT_FEATURE_BUNDLE >= FEATURE_BUNDLE_527 && \ + CURRENT_FEATURE_BUNDLE <= FEATURE_BUNDLE_535) \ || (CURRENT_FEATURE_BUNDLE == FEATURE_BUNDLE_CUSTOM && \ FEATURE_IS_ENABLED_MASK(FEATURE_BITWISE_BIT)) \ ) @@ -103,21 +123,22 @@ #define FEATURE_EVALBYTES_IS_ENABLED \ ( \ (CURRENT_FEATURE_BUNDLE >= FEATURE_BUNDLE_515 && \ - CURRENT_FEATURE_BUNDLE <= FEATURE_BUNDLE_527) \ + CURRENT_FEATURE_BUNDLE <= FEATURE_BUNDLE_535) \ || (CURRENT_FEATURE_BUNDLE == FEATURE_BUNDLE_CUSTOM && \ FEATURE_IS_ENABLED_MASK(FEATURE_EVALBYTES_BIT)) \ ) #define FEATURE_SIGNATURES_IS_ENABLED \ ( \ - CURRENT_FEATURE_BUNDLE == FEATURE_BUNDLE_CUSTOM && \ - FEATURE_IS_ENABLED_MASK(FEATURE_SIGNATURES_BIT) \ + CURRENT_FEATURE_BUNDLE == FEATURE_BUNDLE_535 \ + || (CURRENT_FEATURE_BUNDLE == FEATURE_BUNDLE_CUSTOM && \ + FEATURE_IS_ENABLED_MASK(FEATURE_SIGNATURES_BIT)) \ ) #define FEATURE___SUB___IS_ENABLED \ ( \ (CURRENT_FEATURE_BUNDLE >= FEATURE_BUNDLE_515 && \ - CURRENT_FEATURE_BUNDLE <= FEATURE_BUNDLE_527) \ + CURRENT_FEATURE_BUNDLE <= FEATURE_BUNDLE_535) \ || (CURRENT_FEATURE_BUNDLE == FEATURE_BUNDLE_CUSTOM && \ FEATURE_IS_ENABLED_MASK(FEATURE___SUB___BIT)) \ ) @@ -131,7 +152,7 @@ #define FEATURE_POSTDEREF_QQ_IS_ENABLED \ ( \ (CURRENT_FEATURE_BUNDLE >= FEATURE_BUNDLE_523 && \ - CURRENT_FEATURE_BUNDLE <= FEATURE_BUNDLE_527) \ + CURRENT_FEATURE_BUNDLE <= FEATURE_BUNDLE_535) \ || (CURRENT_FEATURE_BUNDLE == FEATURE_BUNDLE_CUSTOM && \ FEATURE_IS_ENABLED_MASK(FEATURE_POSTDEREF_QQ_BIT)) \ ) @@ -139,7 +160,7 @@ #define FEATURE_UNIEVAL_IS_ENABLED \ ( \ (CURRENT_FEATURE_BUNDLE >= FEATURE_BUNDLE_515 && \ - CURRENT_FEATURE_BUNDLE <= FEATURE_BUNDLE_527) \ + CURRENT_FEATURE_BUNDLE <= FEATURE_BUNDLE_535) \ || (CURRENT_FEATURE_BUNDLE == FEATURE_BUNDLE_CUSTOM && \ FEATURE_IS_ENABLED_MASK(FEATURE_UNIEVAL_BIT)) \ ) @@ -153,11 +174,31 @@ #define FEATURE_UNICODE_IS_ENABLED \ ( \ (CURRENT_FEATURE_BUNDLE >= FEATURE_BUNDLE_511 && \ - CURRENT_FEATURE_BUNDLE <= FEATURE_BUNDLE_527) \ + CURRENT_FEATURE_BUNDLE <= FEATURE_BUNDLE_535) \ || (CURRENT_FEATURE_BUNDLE == FEATURE_BUNDLE_CUSTOM && \ FEATURE_IS_ENABLED_MASK(FEATURE_UNICODE_BIT)) \ ) +#define FEATURE_MULTIDIMENSIONAL_IS_ENABLED \ + ( \ + CURRENT_FEATURE_BUNDLE <= FEATURE_BUNDLE_527 \ + || (CURRENT_FEATURE_BUNDLE == FEATURE_BUNDLE_CUSTOM && \ + FEATURE_IS_ENABLED_MASK(FEATURE_MULTIDIMENSIONAL_BIT)) \ + ) + +#define FEATURE_BAREWORD_FILEHANDLES_IS_ENABLED \ + ( \ + CURRENT_FEATURE_BUNDLE <= FEATURE_BUNDLE_535 \ + || (CURRENT_FEATURE_BUNDLE == FEATURE_BUNDLE_CUSTOM && \ + FEATURE_IS_ENABLED_MASK(FEATURE_BAREWORD_FILEHANDLES_BIT)) \ + ) + +#define FEATURE_MORE_DELIMS_IS_ENABLED \ + ( \ + CURRENT_FEATURE_BUNDLE == FEATURE_BUNDLE_CUSTOM && \ + FEATURE_IS_ENABLED_MASK(FEATURE_MORE_DELIMS_BIT) \ + ) + #define SAVEFEATUREBITS() SAVEI32(PL_compiling.cop_features) @@ -181,6 +222,9 @@ S_enable_feature_bundle(pTHX_ SV *ver) SV *comp_ver = sv_newmortal(); PL_hints = (PL_hints &~ HINT_FEATURE_MASK) | ( + (sv_setnv(comp_ver, 5.035), + vcmp(ver, upg_version(comp_ver, FALSE)) >= 0) + ? FEATURE_BUNDLE_535 : (sv_setnv(comp_ver, 5.027), vcmp(ver, upg_version(comp_ver, FALSE)) >= 0) ? FEATURE_BUNDLE_527 : @@ -228,13 +272,26 @@ S_magic_sethint_feature(pTHX_ SV *keysv, const char *keypv, STRLEN keylen, return; case 'b': - if (keylen == sizeof("feature_bitwise")-1 + if (keylen == sizeof("feature_bareword_filehandles")-1 + && memcmp(subf+1, "areword_filehandles", keylen - sizeof("feature_")) == 0) { + mask = FEATURE_BAREWORD_FILEHANDLES_BIT; + break; + } + else if (keylen == sizeof("feature_bitwise")-1 && memcmp(subf+1, "itwise", keylen - sizeof("feature_")) == 0) { mask = FEATURE_BITWISE_BIT; break; } return; + case 'd': + if (keylen == sizeof("feature_defer")-1 + && memcmp(subf+1, "efer", keylen - sizeof("feature_")) == 0) { + mask = FEATURE_DEFER_BIT; + break; + } + return; + case 'e': if (keylen == sizeof("feature_evalbytes")-1 && memcmp(subf+1, "valbytes", keylen - sizeof("feature_")) == 0) { @@ -265,7 +322,17 @@ S_magic_sethint_feature(pTHX_ SV *keysv, const char *keypv, STRLEN keylen, return; case 'm': - if (keylen == sizeof("feature_myref")-1 + if (keylen == sizeof("feature_more_delims")-1 + && memcmp(subf+1, "ore_delims", keylen - sizeof("feature_")) == 0) { + mask = FEATURE_MORE_DELIMS_BIT; + break; + } + else if (keylen == sizeof("feature_multidimensional")-1 + && memcmp(subf+1, "ultidimensional", keylen - sizeof("feature_")) == 0) { + mask = FEATURE_MULTIDIMENSIONAL_BIT; + break; + } + else if (keylen == sizeof("feature_myref")-1 && memcmp(subf+1, "yref", keylen - sizeof("feature_")) == 0) { mask = FEATURE_MYREF_BIT; break; @@ -311,6 +378,14 @@ S_magic_sethint_feature(pTHX_ SV *keysv, const char *keypv, STRLEN keylen, } return; + case 't': + if (keylen == sizeof("feature_try")-1 + && memcmp(subf+1, "ry", keylen - sizeof("feature_")) == 0) { + mask = FEATURE_TRY_BIT; + break; + } + return; + case 'u': if (keylen == sizeof("feature_unicode")-1 && memcmp(subf+1, "nicode", keylen - sizeof("feature_")) == 0) { diff --git a/gnu/usr.bin/perl/generate_uudmap.c b/gnu/usr.bin/perl/generate_uudmap.c index 4c7d56c6d42..b5f84a76959 100644 --- a/gnu/usr.bin/perl/generate_uudmap.c +++ b/gnu/usr.bin/perl/generate_uudmap.c @@ -1,7 +1,38 @@ -/* Originally this program just generated uudmap.h +/* generate_uudmap.c: + + Create three .h files, whose names are specified as argv[1..3], + but are usually uudmap.h, bitcount.h and mg_data.h. + + It uses mg_raw.h as input, plus it relies on the C compiler knowing + the ord value of character literals under EBCDIC, to generate output + tables on an order which are platform-specific. + + The outputs are: + + uudmap.h: + The values which will populate PL_uumap[], as used by + unpack('u'). + + bitcount.h + The values which will populate PL_bitcount[]: + this is a count of bits for each U8 value 0..255. + (I'm not sure why this has to be generated - surely it's + platform-independent - DAPM.) + + mg_data.h + Takes the input from mg_raw.h and sorts by it magic char; + the values will populate PL_magic_data[]: this is an array of + per-magic U8 values containing an index into PL_magic_vtables[] + plus two flags: + PERL_MAGIC_READONLY_ACCEPTABLE + PERL_MAGIC_VALUE_MAGIC + + Originally this program just generated uudmap.h However, when we later wanted to generate bitcount.h, it was easier to refactor it and keep the same name, than either alternative - rename it, - or duplicate all of the Makefile logic for a second program. */ + or duplicate all of the Makefile logic for a second program. + Ditto when mg_data.h was added. +*/ #include #include @@ -40,13 +71,13 @@ format_mg_data(FILE *out, const void *thing, size_t count) { while (1) { if (p->value) { - fprintf(out, " %s\n %s", p->comment, p->value); + fprintf(out, " %s\n %s", p->comment, p->value); } else { - fputs(" 0", out); + fputs(" 0", out); } ++p; if (!--count) - break; + break; fputs(",\n", out); } fputc('\n', out); @@ -63,7 +94,7 @@ format_char_block(FILE *out, const void *thing, size_t count) { if (count) { fputs(", ", out); if (!(count & 15)) { - fputs("\n ", out); + fputs("\n ", out); } } } @@ -72,23 +103,28 @@ format_char_block(FILE *out, const void *thing, size_t count) { static void output_to_file(const char *progname, const char *filename, - void (format_function)(FILE *out, const void *thing, size_t count), - const void *thing, size_t count) { + void (format_function)(FILE *out, const void *thing, size_t count), + const void *thing, size_t count, + const char *header +) { FILE *const out = fopen(filename, "w"); if (!out) { fprintf(stderr, "%s: Could not open '%s': %s\n", progname, filename, - strerror(errno)); + strerror(errno)); exit(1); } - fputs("{\n", out); + fprintf(out, "/* %s:\n", filename); + fprintf(out, " * THIS FILE IS AUTO-GENERATED DURING THE BUILD by: %s\n", + progname); + fprintf(out, " *\n%s\n*/\n{\n", header); format_function(out, thing, count); fputs("}\n", out); if (fclose(out)) { fprintf(stderr, "%s: Could not close '%s': %s\n", progname, filename, - strerror(errno)); + strerror(errno)); exit(1); } } @@ -123,7 +159,9 @@ int main(int argc, char **argv) { PL_uudmap[(U8)' '] = 0; output_to_file(argv[0], argv[1], &format_char_block, - (const void *)PL_uudmap, sizeof(PL_uudmap)); + (const void *)PL_uudmap, sizeof(PL_uudmap), + " * These values will populate PL_uumap[], as used by unpack('u')" + ); for (bits = 1; bits < 256; bits++) { if (bits & 1) PL_bitcount[bits]++; @@ -137,7 +175,10 @@ int main(int argc, char **argv) { } output_to_file(argv[0], argv[2], &format_char_block, - (const void *)PL_bitcount, sizeof(PL_bitcount)); + (const void *)PL_bitcount, sizeof(PL_bitcount), + " * These values will populate PL_bitcount[]:\n" + " * this is a count of bits for each U8 value 0..255" + ); while (p->value) { mg_data[p->type].value = p->value; @@ -146,7 +187,13 @@ int main(int argc, char **argv) { } output_to_file(argv[0], argv[3], &format_mg_data, - (const void *)mg_data, sizeof(mg_data)/sizeof(mg_data[0])); + (const void *)mg_data, sizeof(mg_data)/sizeof(mg_data[0]), + " * These values will populate PL_magic_data[]: this is an array of\n" + " * per-magic U8 values containing an index into PL_magic_vtables[]\n" + " * plus two flags:\n" + " * PERL_MAGIC_READONLY_ACCEPTABLE\n" + " * PERL_MAGIC_VALUE_MAGIC" + ); return 0; } diff --git a/gnu/usr.bin/perl/globals.c b/gnu/usr.bin/perl/globals.c index 8d6f2b19682..5a78c811669 100644 --- a/gnu/usr.bin/perl/globals.c +++ b/gnu/usr.bin/perl/globals.c @@ -15,30 +15,29 @@ */ /* This file exists to #include "perl.h" _ONCE_ with - * PERL_IN_GLOBALS_C defined. That causes various global varaiables + * PERL_IN_GLOBALS_C defined. That causes various global variables * in perl.h and other files it includes to be _defined_ (and initialized) * rather than just declared. - * - * There is a #include "perlapi.h" which makes use of the fact - * that the object file created from this file will be included by linker - * (to resolve global variables). perlapi.h mention various other "API" - * functions not used by perl itself, but the functions get - * pulled into the perl executable via the refrerence here. - * */ #include "INTERN.h" #define PERL_IN_GLOBALS_C #include "perl.h" -#include "perlapi.h" /* bring in PL_force_link_funcs */ - /* regcomp.h * isn't #included in perl.h, as its only included within a * few specific files such as regcomp.c, regexec.c. So include it * explicitly to process any data declarations within it. */ #include "regcomp.h" +/* We need somewhere to declare this. This file seems a good place. + * This is not a regular "global" in that we don't know whether it needs to + * exist until we include threads.h, and we don't want it as part of any + * global struct (if that or something similar is re-introduced. */ + +#if defined(USE_ITHREADS) && defined(PERL_THREAD_LOCAL) +PERL_THREAD_LOCAL void *PL_current_context; +#endif /* * ex: set ts=8 sts=4 sw=4 et: diff --git a/gnu/usr.bin/perl/globvar.sym b/gnu/usr.bin/perl/globvar.sym index 0462026cc83..22e353f34d3 100644 --- a/gnu/usr.bin/perl/globvar.sym +++ b/gnu/usr.bin/perl/globvar.sym @@ -12,12 +12,14 @@ PL_c9_utf8_dfa_tab PL_charclass PL_check PL_core_reg_engine +PL_deBruijn_bitpos_tab32 +PL_deBruijn_bitpos_tab64 +PL_EXACTFish_bitmask +PL_EXACT_REQ8_bitmask PL_extended_utf8_dfa_tab PL_fold PL_fold_latin1 PL_fold_locale -PL_freq -PL_global_struct_size PL_hexdigit PL_inf PL_interp_size diff --git a/gnu/usr.bin/perl/gv.c b/gnu/usr.bin/perl/gv.c index a90ce9b122e..82825d1dab2 100644 --- a/gnu/usr.bin/perl/gv.c +++ b/gnu/usr.bin/perl/gv.c @@ -20,7 +20,7 @@ */ /* -=head1 GV Functions +=head1 GV Handling and Stashes A GV is a structure which corresponds to to a Perl typeglob, ie *foo. It is a structure that holds a pointer to a scalar, an array, a hash etc, corresponding to $foo, @foo, %foo. @@ -28,6 +28,11 @@ corresponding to $foo, @foo, %foo. GVs are usually found as values in stashes (symbol table hashes) where Perl stores its global variables. +A B is a hash that contains all variables that are defined +within a package. See L + +=for apidoc Ayh||GV + =cut */ @@ -41,6 +46,14 @@ Perl stores its global variables. static const char S_autoload[] = "AUTOLOAD"; #define S_autolen (sizeof("AUTOLOAD")-1) +/* +=for apidoc gv_add_by_type + +Make sure there is a slot of type C in the GV C. + +=cut +*/ + GV * Perl_gv_add_by_type(pTHX_ GV *gv, svtype type) { @@ -53,43 +66,66 @@ Perl_gv_add_by_type(pTHX_ GV *gv, svtype type) && SvTYPE((const SV *)gv) != SVt_PVLV ) ) { - const char *what; - if (type == SVt_PVIO) { - /* - * if it walks like a dirhandle, then let's assume that - * this is a dirhandle. - */ - what = OP_IS_DIRHOP(PL_op->op_type) ? - "dirhandle" : "filehandle"; - } else if (type == SVt_PVHV) { - what = "hash"; - } else { - what = type == SVt_PVAV ? "array" : "scalar"; - } - /* diag_listed_as: Bad symbol for filehandle */ - Perl_croak(aTHX_ "Bad symbol for %s", what); + const char *what; + if (type == SVt_PVIO) { + /* + * if it walks like a dirhandle, then let's assume that + * this is a dirhandle. + */ + what = OP_IS_DIRHOP(PL_op->op_type) ? + "dirhandle" : "filehandle"; + } else if (type == SVt_PVHV) { + what = "hash"; + } else { + what = type == SVt_PVAV ? "array" : "scalar"; + } + /* diag_listed_as: Bad symbol for filehandle */ + Perl_croak(aTHX_ "Bad symbol for %s", what); } if (type == SVt_PVHV) { - where = (SV **)&GvHV(gv); + where = (SV **)&GvHV(gv); } else if (type == SVt_PVAV) { - where = (SV **)&GvAV(gv); + where = (SV **)&GvAV(gv); } else if (type == SVt_PVIO) { - where = (SV **)&GvIOp(gv); + where = (SV **)&GvIOp(gv); } else { - where = &GvSV(gv); + where = &GvSV(gv); } if (!*where) { - *where = newSV_type(type); - if (type == SVt_PVAV - && memEQs(GvNAME(gv), GvNAMELEN(gv), "ISA")) - sv_magic(*where, (SV *)gv, PERL_MAGIC_isa, NULL, 0); + *where = newSV_type(type); + if ( type == SVt_PVAV + && memEQs(GvNAME(gv), GvNAMELEN(gv), "ISA")) + { + sv_magic(*where, (SV *)gv, PERL_MAGIC_isa, NULL, 0); + } } return gv; } +/* +=for apidoc gv_fetchfile +=for apidoc_item gv_fetchfile_flags + +These return the debugger glob for the file (compiled by Perl) whose name is +given by the C parameter. + +There are currently exactly two differences between these functions. + +The C parameter to C is a C string, meaning it is +C-terminated; whereas the C parameter to C is a +Perl string, whose length (in bytes) is passed in via the C parameter +This means the name may contain embedded C characters. +C doesn't exist in plain C). + +The other difference is that C has an extra C +parameter, which is currently completely ignored, but allows for possible +future extensions. + +=cut +*/ GV * Perl_gv_fetchfile(pTHX_ const char *name) { @@ -99,7 +135,7 @@ Perl_gv_fetchfile(pTHX_ const char *name) GV * Perl_gv_fetchfile_flags(pTHX_ const char *const name, const STRLEN namelen, - const U32 flags) + const U32 flags) { char smallbuf[128]; char *tmpbuf; @@ -110,29 +146,35 @@ Perl_gv_fetchfile_flags(pTHX_ const char *const name, const STRLEN namelen, PERL_UNUSED_ARG(flags); if (!PL_defstash) - return NULL; + return NULL; if (tmplen <= sizeof smallbuf) - tmpbuf = smallbuf; + tmpbuf = smallbuf; else - Newx(tmpbuf, tmplen, char); + Newx(tmpbuf, tmplen, char); /* This is where the debugger's %{"::_<$filename"} hash is created */ tmpbuf[0] = '_'; tmpbuf[1] = '<'; memcpy(tmpbuf + 2, name, namelen); - gv = *(GV**)hv_fetch(PL_defstash, tmpbuf, tmplen, TRUE); - if (!isGV(gv)) { - gv_init(gv, PL_defstash, tmpbuf, tmplen, FALSE); + GV **gvp = (GV**)hv_fetch(PL_defstash, tmpbuf, tmplen, (flags & GVF_NOADD) ? FALSE : TRUE); + if (gvp) { + gv = *gvp; + if (!isGV(gv)) { + gv_init(gv, PL_defstash, tmpbuf, tmplen, FALSE); #ifdef PERL_DONT_CREATE_GVSV - GvSV(gv) = newSVpvn(name, namelen); + GvSV(gv) = newSVpvn(name, namelen); #else - sv_setpvn(GvSV(gv), name, namelen); + sv_setpvn(GvSV(gv), name, namelen); #endif + } + if (PERLDB_LINE_OR_SAVESRC && !GvAV(gv)) + hv_magic(GvHVn(gv), GvAVn(gv), PERL_MAGIC_dbfile); + } + else { + gv = NULL; } - if (PERLDB_LINE_OR_SAVESRC && !GvAV(gv)) - hv_magic(GvHVn(gv), GvAVn(gv), PERL_MAGIC_dbfile); if (tmpbuf != smallbuf) - Safefree(tmpbuf); + Safefree(tmpbuf); return gv; } @@ -154,7 +196,7 @@ Perl_gv_const_sv(pTHX_ GV *gv) PERL_UNUSED_CONTEXT; if (SvTYPE(gv) == SVt_PVGV) - return cv_const_sv(GvCVu(gv)); + return cv_const_sv(GvCVu(gv)); return SvROK(gv) && SvTYPE(SvRV(gv)) != SVt_PVAV && SvTYPE(SvRV(gv)) != SVt_PVCV ? SvRV(gv) : NULL; } @@ -168,39 +210,38 @@ Perl_newGP(pTHX_ GV *const gv) #ifndef USE_ITHREADS GV *filegv; #endif - dVAR; PERL_ARGS_ASSERT_NEWGP; Newxz(gp, 1, GP); gp->gp_egv = gv; /* allow compiler to reuse gv after this */ #ifndef PERL_DONT_CREATE_GVSV - gp->gp_sv = newSV(0); + gp->gp_sv = newSV_type(SVt_NULL); #endif /* PL_curcop may be null here. E.g., - INIT { bless {} and exit } + INIT { bless {} and exit } frees INIT before looking up DESTROY (and creating *DESTROY) */ if (PL_curcop) { - gp->gp_line = CopLINE(PL_curcop); /* 0 otherwise Newxz */ + gp->gp_line = CopLINE(PL_curcop); /* 0 otherwise Newxz */ #ifdef USE_ITHREADS - if (CopFILE(PL_curcop)) { - file = CopFILE(PL_curcop); - len = strlen(file); - } + if (CopFILE(PL_curcop)) { + file = CopFILE(PL_curcop); + len = strlen(file); + } #else - filegv = CopFILEGV(PL_curcop); - if (filegv) { - file = GvNAME(filegv)+2; - len = GvNAMELEN(filegv)-2; - } + filegv = CopFILEGV(PL_curcop); + if (filegv) { + file = GvNAME(filegv)+2; + len = GvNAMELEN(filegv)-2; + } #endif - else goto no_file; + else goto no_file; } else { - no_file: - file = ""; - len = 0; + no_file: + file = ""; + len = 0; } PERL_HASH(hash, file, len); @@ -221,20 +262,20 @@ Perl_cvgv_set(pTHX_ CV* cv, GV* gv) PERL_ARGS_ASSERT_CVGV_SET; if (oldgv == gv) - return; + return; if (oldgv) { - if (CvCVGV_RC(cv)) { - SvREFCNT_dec_NN(oldgv); - CvCVGV_RC_off(cv); - } - else { - sv_del_backref(MUTABLE_SV(oldgv), MUTABLE_SV(cv)); - } + if (CvCVGV_RC(cv)) { + SvREFCNT_dec_NN(oldgv); + CvCVGV_RC_off(cv); + } + else { + sv_del_backref(MUTABLE_SV(oldgv), MUTABLE_SV(cv)); + } } else if ((hek = CvNAME_HEK(cv))) { - unshare_hek(hek); - CvLEXICAL_off(cv); + unshare_hek(hek); + CvLEXICAL_off(cv); } CvNAMED_off(cv); @@ -242,13 +283,13 @@ Perl_cvgv_set(pTHX_ CV* cv, GV* gv) assert(!CvCVGV_RC(cv)); if (!gv) - return; + return; if (isGV_with_GP(gv) && GvGP(gv) && (GvCV(gv) == cv || GvFORM(gv) == cv)) - Perl_sv_add_backref(aTHX_ MUTABLE_SV(gv), MUTABLE_SV(cv)); + Perl_sv_add_backref(aTHX_ MUTABLE_SV(gv), MUTABLE_SV(cv)); else { - CvCVGV_RC_on(cv); - SvREFCNT_inc_simple_void_NN(gv); + CvCVGV_RC_on(cv); + SvREFCNT_inc_simple_void_NN(gv); } } @@ -266,14 +307,14 @@ Perl_cvgv_from_hek(pTHX_ CV *cv) if (!CvSTASH(cv)) return NULL; ASSUME(CvNAME_HEK(cv)); svp = hv_fetchhek(CvSTASH(cv), CvNAME_HEK(cv), 0); - gv = MUTABLE_GV(svp && *svp ? *svp : newSV(0)); + gv = MUTABLE_GV(svp && *svp ? *svp : newSV_type(SVt_NULL)); if (!isGV(gv)) - gv_init_pvn(gv, CvSTASH(cv), HEK_KEY(CvNAME_HEK(cv)), - HEK_LEN(CvNAME_HEK(cv)), - SVf_UTF8 * !!HEK_UTF8(CvNAME_HEK(cv))); + gv_init_pvn(gv, CvSTASH(cv), HEK_KEY(CvNAME_HEK(cv)), + HEK_LEN(CvNAME_HEK(cv)), + SVf_UTF8 * !!HEK_UTF8(CvNAME_HEK(cv))); if (!CvNAMED(cv)) { /* gv_init took care of it */ - assert (SvANY(cv)->xcv_gv_u.xcv_gv == gv); - return gv; + assert (SvANY(cv)->xcv_gv_u.xcv_gv == gv); + return gv; } unshare_hek(CvNAME_HEK(cv)); CvNAMED_off(cv); @@ -291,12 +332,12 @@ Perl_cvstash_set(pTHX_ CV *cv, HV *st) HV *oldst = CvSTASH(cv); PERL_ARGS_ASSERT_CVSTASH_SET; if (oldst == st) - return; + return; if (oldst) - sv_del_backref(MUTABLE_SV(oldst), MUTABLE_SV(cv)); + sv_del_backref(MUTABLE_SV(oldst), MUTABLE_SV(cv)); SvANY(cv)->xcv_stash = st; if (st) - Perl_sv_add_backref(aTHX_ MUTABLE_SV(st), MUTABLE_SV(cv)); + Perl_sv_add_backref(aTHX_ MUTABLE_SV(st), MUTABLE_SV(cv)); } /* @@ -363,108 +404,161 @@ Perl_gv_init_pv(pTHX_ GV *gv, HV *stash, const char *name, U32 flags) gv_init_pvn(gv, stash, name, strlen(name), flags); } +/* Packages in the symbol table are "stashes" - hashes where the keys are symbol + names and the values are typeglobs. The value $foo::bar is actually found + by looking up the typeglob *foo::{bar} and then reading its SCALAR slot. + + At least, that's what you see in Perl space if you use typeglob syntax. + Usually it's also what's actually stored in the stash, but for some cases + different values are stored (as a space optimisation) and converted to full + typeglobs "on demand" - if a typeglob syntax is used to read a value. It's + the job of this function, Perl_gv_init_pvn(), to undo any trickery and + replace the SV stored in the stash with the regular PVGV structure that it is + a shorthand for. This has to be done "in-place" by upgrading the actual SV + that is already stored in the stash to a PVGV. + + As the public documentation above says: + Converting any scalar that is C may produce unpredictable + results and is reserved for perl's internal use. + + Values that can be stored: + + * plain scalar - a subroutine declaration + The scalar's string value is the subroutine prototype; the integer -1 is + "no prototype". ie shorthand for sub foo ($$); or sub bar; + * reference to a scalar - a constant. ie shorthand for sub PI() { 4; } + * reference to a sub - a subroutine (avoids allocating a PVGV) + + The earliest optimisation was subroutine declarations, implemented in 1998 + by commit 8472ac73d6d80294: + "Sub declaration cost reduced from ~500 to ~100 bytes" + + This space optimisation needs to be invisible to regular Perl code. For this + code: + + sub foo ($$); + *foo = []; + + When the first line is compiled, the optimisation is used, and $::{foo} is + assigned the scalar '$$'. No PVGV or PVCV is created. + + When the second line encountered, the typeglob lookup on foo needs to + "upgrade" the symbol table entry to a PVGV, and then create a PVCV in the + {CODE} slot with the prototype $$ and no body. The typeglob is then available + so that [] can be assigned to the {ARRAY} slot. For the code above the + upgrade happens at compile time, the assignment at runtime. + + Analogous code unwinds the other optimisations. +*/ void Perl_gv_init_pvn(pTHX_ GV *gv, HV *stash, const char *name, STRLEN len, U32 flags) { const U32 old_type = SvTYPE(gv); const bool doproto = old_type > SVt_NULL; char * const proto = (doproto && SvPOK(gv)) - ? ((void)(SvIsCOW(gv) && (sv_force_normal((SV *)gv), 0)), SvPVX(gv)) - : NULL; + ? ((void)(SvIsCOW(gv) && (sv_force_normal((SV *)gv), 0)), SvPVX(gv)) + : NULL; const STRLEN protolen = proto ? SvCUR(gv) : 0; const U32 proto_utf8 = proto ? SvUTF8(gv) : 0; SV *const has_constant = doproto && SvROK(gv) ? SvRV(gv) : NULL; const U32 exported_constant = has_constant ? SvPCS_IMPORTED(gv) : 0; const bool really_sub = - has_constant && SvTYPE(has_constant) == SVt_PVCV; + has_constant && SvTYPE(has_constant) == SVt_PVCV; COP * const old = PL_curcop; PERL_ARGS_ASSERT_GV_INIT_PVN; assert (!(proto && has_constant)); if (has_constant) { - /* The constant has to be a scalar, array or subroutine. */ - switch (SvTYPE(has_constant)) { - case SVt_PVHV: - case SVt_PVFM: - case SVt_PVIO: + /* The constant has to be a scalar, array or subroutine. */ + switch (SvTYPE(has_constant)) { + case SVt_PVHV: + case SVt_PVFM: + case SVt_PVIO: Perl_croak(aTHX_ "Cannot convert a reference to %s to typeglob", - sv_reftype(has_constant, 0)); + sv_reftype(has_constant, 0)); NOT_REACHED; /* NOTREACHED */ break; - default: NOOP; - } - SvRV_set(gv, NULL); - SvROK_off(gv); + default: NOOP; + } + SvRV_set(gv, NULL); + SvROK_off(gv); } if (old_type < SVt_PVGV) { - if (old_type >= SVt_PV) - SvCUR_set(gv, 0); - sv_upgrade(MUTABLE_SV(gv), SVt_PVGV); + if (old_type >= SVt_PV) + SvCUR_set(gv, 0); + sv_upgrade(MUTABLE_SV(gv), SVt_PVGV); } if (SvLEN(gv)) { - if (proto) { - SvPV_set(gv, NULL); - SvLEN_set(gv, 0); - SvPOK_off(gv); - } else - Safefree(SvPVX_mutable(gv)); + if (proto) { + /* For this case, we are "stealing" the buffer from the SvPV and + re-attaching to an SV below with the call to sv_usepvn_flags(). + Hence we don't free it. */ + SvPV_set(gv, NULL); + } + else { + /* There is no valid prototype. (SvPOK() must be true for a valid + prototype.) Hence we free the memory. */ + Safefree(SvPVX_mutable(gv)); + } + SvLEN_set(gv, 0); + SvPOK_off(gv); } SvIOK_off(gv); isGV_with_GP_on(gv); if (really_sub && !CvISXSUB(has_constant) && CvSTART(has_constant) && ( CvSTART(has_constant)->op_type == OP_NEXTSTATE - || CvSTART(has_constant)->op_type == OP_DBSTATE)) - PL_curcop = (COP *)CvSTART(has_constant); + || CvSTART(has_constant)->op_type == OP_DBSTATE)) + PL_curcop = (COP *)CvSTART(has_constant); GvGP_set(gv, Perl_newGP(aTHX_ gv)); PL_curcop = old; GvSTASH(gv) = stash; if (stash) - Perl_sv_add_backref(aTHX_ MUTABLE_SV(stash), MUTABLE_SV(gv)); + Perl_sv_add_backref(aTHX_ MUTABLE_SV(stash), MUTABLE_SV(gv)); gv_name_set(gv, name, len, GV_ADD | ( flags & SVf_UTF8 ? SVf_UTF8 : 0 )); if (flags & GV_ADDMULTI || doproto) /* doproto means it */ - GvMULTI_on(gv); /* _was_ mentioned */ + GvMULTI_on(gv); /* _was_ mentioned */ if (really_sub) { - /* Not actually a constant. Just a regular sub. */ - CV * const cv = (CV *)has_constant; - GvCV_set(gv,cv); - if (CvNAMED(cv) && CvSTASH(cv) == stash && ( - CvNAME_HEK(cv) == GvNAME_HEK(gv) - || ( HEK_LEN(CvNAME_HEK(cv)) == HEK_LEN(GvNAME_HEK(gv)) - && HEK_FLAGS(CvNAME_HEK(cv)) != HEK_FLAGS(GvNAME_HEK(gv)) - && HEK_UTF8(CvNAME_HEK(cv)) == HEK_UTF8(GvNAME_HEK(gv)) - && memEQ(HEK_KEY(CvNAME_HEK(cv)), GvNAME(gv), GvNAMELEN(gv)) - ) - )) - CvGV_set(cv,gv); + /* Not actually a constant. Just a regular sub. */ + CV * const cv = (CV *)has_constant; + GvCV_set(gv,cv); + if (CvNAMED(cv) && CvSTASH(cv) == stash && ( + CvNAME_HEK(cv) == GvNAME_HEK(gv) + || ( HEK_LEN(CvNAME_HEK(cv)) == HEK_LEN(GvNAME_HEK(gv)) + && HEK_FLAGS(CvNAME_HEK(cv)) != HEK_FLAGS(GvNAME_HEK(gv)) + && HEK_UTF8(CvNAME_HEK(cv)) == HEK_UTF8(GvNAME_HEK(gv)) + && memEQ(HEK_KEY(CvNAME_HEK(cv)), GvNAME(gv), GvNAMELEN(gv)) + ) + )) + CvGV_set(cv,gv); } else if (doproto) { - CV *cv; - if (has_constant) { - /* newCONSTSUB takes ownership of the reference from us. */ - cv = newCONSTSUB_flags(stash, name, len, flags, has_constant); - /* In case op.c:S_process_special_blocks stole it: */ - if (!GvCV(gv)) - GvCV_set(gv, (CV *)SvREFCNT_inc_simple_NN(cv)); - assert(GvCV(gv) == cv); /* newCONSTSUB should have set this */ - /* If this reference was a copy of another, then the subroutine - must have been "imported", by a Perl space assignment to a GV - from a reference to CV. */ - if (exported_constant) - GvIMPORTED_CV_on(gv); - CvSTASH_set(cv, PL_curstash); /* XXX Why is this needed? */ - } else { - cv = newSTUB(gv,1); - } - if (proto) { - sv_usepvn_flags(MUTABLE_SV(cv), proto, protolen, - SV_HAS_TRAILING_NUL); + CV *cv; + if (has_constant) { + /* newCONSTSUB takes ownership of the reference from us. */ + cv = newCONSTSUB_flags(stash, name, len, flags, has_constant); + /* In case op.c:S_process_special_blocks stole it: */ + if (!GvCV(gv)) + GvCV_set(gv, (CV *)SvREFCNT_inc_simple_NN(cv)); + assert(GvCV(gv) == cv); /* newCONSTSUB should have set this */ + /* If this reference was a copy of another, then the subroutine + must have been "imported", by a Perl space assignment to a GV + from a reference to CV. */ + if (exported_constant) + GvIMPORTED_CV_on(gv); + CvSTASH_set(cv, PL_curstash); /* XXX Why is this needed? */ + } else { + cv = newSTUB(gv,1); + } + if (proto) { + sv_usepvn_flags(MUTABLE_SV(cv), proto, protolen, + SV_HAS_TRAILING_NUL); if ( proto_utf8 ) SvUTF8_on(MUTABLE_SV(cv)); - } + } } } @@ -475,26 +569,26 @@ S_gv_init_svtype(pTHX_ GV *gv, const svtype sv_type) switch (sv_type) { case SVt_PVIO: - (void)GvIOn(gv); - break; + (void)GvIOn(gv); + break; case SVt_PVAV: - (void)GvAVn(gv); - break; + (void)GvAVn(gv); + break; case SVt_PVHV: - (void)GvHVn(gv); - break; + (void)GvHVn(gv); + break; #ifdef PERL_DONT_CREATE_GVSV case SVt_NULL: case SVt_PVCV: case SVt_PVFM: case SVt_PVGV: - break; + break; default: - if(GvSVn(gv)) { - /* Work round what appears to be a bug in Sun C++ 5.8 2005/10/13 - If we just cast GvSVn(gv) to void, it ignores evaluating it for - its side effect */ - } + if(GvSVn(gv)) { + /* Work round what appears to be a bug in Sun C++ 5.8 2005/10/13 + If we just cast GvSVn(gv) to void, it ignores evaluating it for + its side effect */ + } #endif } } @@ -522,10 +616,10 @@ S_maybe_add_coresub(pTHX_ HV * const stash, GV *gv, /* no support for \&CORE::infix; no support for funcs that do not parse like funcs */ case KEY___DATA__: case KEY___END__: case KEY_and: case KEY_AUTOLOAD: - case KEY_BEGIN : case KEY_CHECK : case KEY_cmp: - case KEY_default : case KEY_DESTROY: + case KEY_BEGIN : case KEY_CHECK : case KEY_catch : case KEY_cmp: + case KEY_default : case KEY_defer : case KEY_DESTROY: case KEY_do : case KEY_dump : case KEY_else : case KEY_elsif : - case KEY_END : case KEY_eq : case KEY_eval : + case KEY_END : case KEY_eq : case KEY_eval : case KEY_finally: case KEY_for : case KEY_foreach: case KEY_format: case KEY_ge : case KEY_given : case KEY_goto : case KEY_grep : case KEY_gt : case KEY_if : case KEY_isa : case KEY_INIT : case KEY_last : @@ -537,10 +631,10 @@ S_maybe_add_coresub(pTHX_ HV * const stash, GV *gv, case KEY_qx : case KEY_redo : case KEY_require: case KEY_return: case KEY_s : case KEY_say : case KEY_sort : case KEY_state: case KEY_sub : - case KEY_tr : case KEY_UNITCHECK: case KEY_unless: + case KEY_tr : case KEY_try : case KEY_UNITCHECK: case KEY_unless: case KEY_until: case KEY_use : case KEY_when : case KEY_while : case KEY_x : case KEY_xor : case KEY_y : - return NULL; + return NULL; case KEY_chdir: case KEY_chomp: case KEY_chop: case KEY_defined: case KEY_delete: case KEY_eof : case KEY_exec: case KEY_exists : @@ -549,33 +643,33 @@ S_maybe_add_coresub(pTHX_ HV * const stash, GV *gv, case KEY_stat: case KEY_system: case KEY_truncate: case KEY_unlink: - ampable = FALSE; + ampable = FALSE; } if (!gv) { - gv = (GV *)newSV(0); - gv_init(gv, stash, name, len, TRUE); + gv = (GV *)newSV_type(SVt_NULL); + gv_init(gv, stash, name, len, TRUE); } GvMULTI_on(gv); if (ampable) { - ENTER; - oldcurcop = PL_curcop; - oldparser = PL_parser; - lex_start(NULL, NULL, 0); - oldcompcv = PL_compcv; - PL_compcv = NULL; /* Prevent start_subparse from setting - CvOUTSIDE. */ - oldsavestack_ix = start_subparse(FALSE,0); - cv = PL_compcv; + ENTER; + oldcurcop = PL_curcop; + oldparser = PL_parser; + lex_start(NULL, NULL, 0); + oldcompcv = PL_compcv; + PL_compcv = NULL; /* Prevent start_subparse from setting + CvOUTSIDE. */ + oldsavestack_ix = start_subparse(FALSE,0); + cv = PL_compcv; } else { - /* Avoid calling newXS, as it calls us, and things start to - get hairy. */ - cv = MUTABLE_CV(newSV_type(SVt_PVCV)); - GvCV_set(gv,cv); - GvCVGEN(gv) = 0; - CvISXSUB_on(cv); - CvXSUB(cv) = core_xsub; - PoisonPADLIST(cv); + /* Avoid calling newXS, as it calls us, and things start to + get hairy. */ + cv = MUTABLE_CV(newSV_type(SVt_PVCV)); + GvCV_set(gv,cv); + GvCVGEN(gv) = 0; + CvISXSUB_on(cv); + CvXSUB(cv) = core_xsub; + PoisonPADLIST(cv); } CvGV_set(cv, gv); /* This stops new ATTRSUB from setting CvFILE from PL_curcop. */ @@ -589,42 +683,42 @@ S_maybe_add_coresub(pTHX_ HV * const stash, GV *gv, new ATTRSUB. */ (void)core_prototype((SV *)cv, name, code, &opnum); if (stash) - (void)hv_store(stash,name,len,(SV *)gv,0); + (void)hv_store(stash,name,len,(SV *)gv,0); if (ampable) { #ifdef DEBUGGING CV *orig_cv = cv; #endif - CvLVALUE_on(cv); + CvLVALUE_on(cv); /* newATTRSUB will free the CV and return NULL if we're still compiling after a syntax error */ - if ((cv = newATTRSUB_x( - oldsavestack_ix, (OP *)gv, - NULL,NULL, - coresub_op( - opnum - ? newSVuv((UV)opnum) - : newSVpvn(name,len), - code, opnum - ), - TRUE + if ((cv = newATTRSUB_x( + oldsavestack_ix, (OP *)gv, + NULL,NULL, + coresub_op( + opnum + ? newSVuv((UV)opnum) + : newSVpvn(name,len), + code, opnum + ), + TRUE )) != NULL) { assert(GvCV(gv) == orig_cv); if (opnum != OP_VEC && opnum != OP_SUBSTR && opnum != OP_POS && opnum != OP_UNDEF && opnum != OP_KEYS) CvLVALUE_off(cv); /* Now *that* was a neat trick. */ } - LEAVE; - PL_parser = oldparser; - PL_curcop = oldcurcop; - PL_compcv = oldcompcv; + LEAVE; + PL_parser = oldparser; + PL_curcop = oldcurcop; + PL_compcv = oldcompcv; } if (cv) { - SV *opnumsv = newSViv( - (opnum == OP_ENTEREVAL && len == 9 && memEQ(name, "evalbytes", 9)) ? - (OP_ENTEREVAL | (1<<16)) - : opnum ? opnum : (((I32)name[2]) << 16)); + SV *opnumsv = newSViv( + (opnum == OP_ENTEREVAL && len == 9 && memEQ(name, "evalbytes", 9)) ? + (OP_ENTEREVAL | (1<<16)) + : opnum ? opnum : (((I32)name[2]) << 16)); cv_set_call_checker_flags(cv, Perl_ck_entersub_args_core, opnumsv, 0); - SvREFCNT_dec_NN(opnumsv); + SvREFCNT_dec_NN(opnumsv); } return gv; @@ -660,7 +754,7 @@ Perl_gv_fetchmeth_sv(pTHX_ HV *stash, SV *namesv, I32 level, U32 flags) /* =for apidoc gv_fetchmeth_pv -Exactly like L, but takes a nul-terminated string +Exactly like L, but takes a nul-terminated string instead of a string/length pair. =cut @@ -685,11 +779,15 @@ side-effect creates a glob with the given C in the given C which in the case of success contains an alias for the subroutine, and sets up caching info for this glob. -The only significant values for C are C and C. +The only significant values for C are C, C, and +C. C indicates that we want to look up the method in the superclasses of the C. +C indicates that we do not want to look up the method in +the stash accessible by C. + The GV returned from C may be a method cache entry, which is not visible to Perl code. So when calling C, you should not use @@ -724,9 +822,9 @@ S_gv_fetchmeth_internal(pTHX_ HV* stash, SV* meth, const char* name, STRLEN len, /* UNIVERSAL methods should be callable without a stash */ if (!stash) { - create = 0; /* probably appropriate */ - if(!(stash = gv_stashpvs("UNIVERSAL", 0))) - return 0; + create = 0; /* probably appropriate */ + if(!(stash = gv_stashpvs("UNIVERSAL", 0))) + return 0; } assert(stash); @@ -740,15 +838,15 @@ S_gv_fetchmeth_internal(pTHX_ HV* stash, SV* meth, const char* name, STRLEN len, assert(name || meth); DEBUG_o( Perl_deb(aTHX_ "Looking for %smethod %s in package %s\n", - flags & GV_SUPER ? "SUPER " : "", - name ? name : SvPV_nolen(meth), hvname) ); + flags & GV_SUPER ? "SUPER " : "", + name ? name : SvPV_nolen(meth), hvname) ); topgen_cmp = HvMROMETA(stash)->cache_gen + PL_sub_generation; if (flags & GV_SUPER) { - if (!HvAUX(stash)->xhv_mro_meta->super) - HvAUX(stash)->xhv_mro_meta->super = newHV(); - cachestash = HvAUX(stash)->xhv_mro_meta->super; + if (!HvAUX(stash)->xhv_mro_meta->super) + HvAUX(stash)->xhv_mro_meta->super = newHV(); + cachestash = HvAUX(stash)->xhv_mro_meta->super; } else cachestash = stash; @@ -776,21 +874,21 @@ S_gv_fetchmeth_internal(pTHX_ HV* stash, SV* meth, const char* name, STRLEN len, } else { /* stale cache entry, junk it and move on */ - SvREFCNT_dec_NN(cand_cv); - GvCV_set(topgv, NULL); - cand_cv = NULL; - GvCVGEN(topgv) = 0; + SvREFCNT_dec_NN(cand_cv); + GvCV_set(topgv, NULL); + cand_cv = NULL; + GvCVGEN(topgv) = 0; } } else if (GvCVGEN(topgv) == topgen_cmp) { /* cache indicates no such method definitively */ return 0; } - else if (stash == cachestash - && len > 1 /* shortest is uc */ + else if (stash == cachestash + && len > 1 /* shortest is uc */ && memEQs(hvname, HvNAMELEN_get(stash), "CORE") && S_maybe_add_coresub(aTHX_ NULL,topgv,name,len)) - goto have_gv; + goto have_gv; } linear_av = mro_get_linear_isa(stash); /* has ourselves at the top of the list */ @@ -863,12 +961,12 @@ S_gv_fetchmeth_internal(pTHX_ HV* stash, SV* meth, const char* name, STRLEN len, GvCV_set(topgv, cand_cv); GvCVGEN(topgv) = topgen_cmp; } - return candidate; + return candidate; } } /* Check UNIVERSAL without caching */ - if(level == 0 || level == -1) { + if((level == 0 || level == -1) && !(flags & GV_NOUNIVERSAL)) { candidate = gv_fetchmeth_internal(NULL, meth, name, len, 1, flags &~GV_SUPER); if(candidate) { @@ -964,26 +1062,26 @@ Perl_gv_fetchmeth_pvn_autoload(pTHX_ HV *stash, const char *name, STRLEN len, I3 PERL_ARGS_ASSERT_GV_FETCHMETH_PVN_AUTOLOAD; if (!gv) { - CV *cv; - GV **gvp; - - if (!stash) - return NULL; /* UNIVERSAL::AUTOLOAD could cause trouble */ - if (len == S_autolen && memEQ(name, S_autoload, S_autolen)) - return NULL; - if (!(gv = gv_fetchmeth_pvn(stash, S_autoload, S_autolen, FALSE, flags))) - return NULL; - cv = GvCV(gv); - if (!(CvROOT(cv) || CvXSUB(cv))) - return NULL; - /* Have an autoload */ - if (level < 0) /* Cannot do without a stub */ - gv_fetchmeth_pvn(stash, name, len, 0, flags); - gvp = (GV**)hv_fetch(stash, name, + CV *cv; + GV **gvp; + + if (!stash) + return NULL; /* UNIVERSAL::AUTOLOAD could cause trouble */ + if (len == S_autolen && memEQ(name, S_autoload, S_autolen)) + return NULL; + if (!(gv = gv_fetchmeth_pvn(stash, S_autoload, S_autolen, FALSE, flags))) + return NULL; + cv = GvCV(gv); + if (!(CvROOT(cv) || CvXSUB(cv))) + return NULL; + /* Have an autoload */ + if (level < 0) /* Cannot do without a stub */ + gv_fetchmeth_pvn(stash, name, len, 0, flags); + gvp = (GV**)hv_fetch(stash, name, (flags & SVf_UTF8) ? -(I32)len : (I32)len, (level >= 0)); - if (!gvp) - return NULL; - return *gvp; + if (!gvp) + return NULL; + return *gvp; } return gv; } @@ -1059,11 +1157,11 @@ Perl_gv_fetchmethod_pvn_flags(pTHX_ HV *stash, const char *name, const STRLEN le PERL_ARGS_ASSERT_GV_FETCHMETHOD_PVN_FLAGS; if (SvTYPE(stash) < SVt_PVHV) - stash = NULL; + stash = NULL; else { - /* The only way stash can become NULL later on is if last_separator is set, - which in turn means that there is no need for a SVt_PVHV case - the error reporting code. */ + /* The only way stash can become NULL later on is if last_separator is set, + which in turn means that there is no need for a SVt_PVHV case + the error reporting code. */ } { @@ -1096,100 +1194,100 @@ Perl_gv_fetchmethod_pvn_flags(pTHX_ HV *stash, const char *name, const STRLEN le if (last_separator) { STRLEN sep_len= last_separator - origname; if ( memEQs(origname, sep_len, "SUPER")) { - /* ->SUPER::method should really be looked up in original stash */ - stash = CopSTASH(PL_curcop); - flags |= GV_SUPER; - DEBUG_o( Perl_deb(aTHX_ "Treating %s as %s::%s\n", - origname, HvENAME_get(stash), name) ); - } + /* ->SUPER::method should really be looked up in original stash */ + stash = CopSTASH(PL_curcop); + flags |= GV_SUPER; + DEBUG_o( Perl_deb(aTHX_ "Treating %s as %s::%s\n", + origname, HvENAME_get(stash), name) ); + } else if ( sep_len >= 7 && - strBEGINs(last_separator - 7, "::SUPER")) { + strBEGINs(last_separator - 7, "::SUPER")) { /* don't autovifify if ->NoSuchStash::SUPER::method */ stash = gv_stashpvn(origname, sep_len - 7, is_utf8); - if (stash) flags |= GV_SUPER; - } - else { + if (stash) flags |= GV_SUPER; + } + else { /* don't autovifify if ->NoSuchStash::method */ stash = gv_stashpvn(origname, sep_len, is_utf8); - } - ostash = stash; + } + ostash = stash; } gv = gv_fetchmeth_pvn(stash, name, name_end - name, 0, flags); if (!gv) { - /* This is the special case that exempts Foo->import and - Foo->unimport from being an error even if there's no - import/unimport subroutine */ - if (strEQ(name,"import") || strEQ(name,"unimport")) { - gv = (GV*)sv_2mortal((SV*)newCONSTSUB_flags(NULL, - NULL, 0, 0, NULL)); - } else if (autoload) - gv = gv_autoload_pvn( - ostash, name, name_end - name, GV_AUTOLOAD_ISMETHOD|flags - ); - if (!gv && do_croak) { - /* Right now this is exclusively for the benefit of S_method_common - in pp_hot.c */ - if (stash) { - /* If we can't find an IO::File method, it might be a call on - * a filehandle. If IO:File has not been loaded, try to - * require it first instead of croaking */ - const char *stash_name = HvNAME_get(stash); - if (stash_name && memEQs(stash_name, HvNAMELEN_get(stash), "IO::File") - && !Perl_hv_common(aTHX_ GvHVn(PL_incgv), NULL, - STR_WITH_LEN("IO/File.pm"), 0, - HV_FETCH_ISEXISTS, NULL, 0) - ) { - require_pv("IO/File.pm"); - gv = gv_fetchmeth_pvn(stash, name, name_end - name, 0, flags); - if (gv) - return gv; - } - Perl_croak(aTHX_ - "Can't locate object method \"%" UTF8f - "\" via package \"%" HEKf "\"", - UTF8fARG(is_utf8, name_end - name, name), + /* This is the special case that exempts Foo->import and + Foo->unimport from being an error even if there's no + import/unimport subroutine */ + if (strEQ(name,"import") || strEQ(name,"unimport")) { + gv = (GV*)sv_2mortal((SV*)newCONSTSUB_flags(NULL, + NULL, 0, 0, NULL)); + } else if (autoload) + gv = gv_autoload_pvn( + ostash, name, name_end - name, GV_AUTOLOAD_ISMETHOD|flags + ); + if (!gv && do_croak) { + /* Right now this is exclusively for the benefit of S_method_common + in pp_hot.c */ + if (stash) { + /* If we can't find an IO::File method, it might be a call on + * a filehandle. If IO:File has not been loaded, try to + * require it first instead of croaking */ + const char *stash_name = HvNAME_get(stash); + if (stash_name && memEQs(stash_name, HvNAMELEN_get(stash), "IO::File") + && !Perl_hv_common(aTHX_ GvHVn(PL_incgv), NULL, + STR_WITH_LEN("IO/File.pm"), 0, + HV_FETCH_ISEXISTS, NULL, 0) + ) { + require_pv("IO/File.pm"); + gv = gv_fetchmeth_pvn(stash, name, name_end - name, 0, flags); + if (gv) + return gv; + } + Perl_croak(aTHX_ + "Can't locate object method \"%" UTF8f + "\" via package \"%" HEKf "\"", + UTF8fARG(is_utf8, name_end - name, name), HEKfARG(HvNAME_HEK(stash))); - } - else { + } + else { SV* packnamesv; - if (last_separator) { - packnamesv = newSVpvn_flags(origname, last_separator - origname, + if (last_separator) { + packnamesv = newSVpvn_flags(origname, last_separator - origname, SVs_TEMP | is_utf8); - } else { - packnamesv = error_report; - } - - Perl_croak(aTHX_ - "Can't locate object method \"%" UTF8f - "\" via package \"%" SVf "\"" - " (perhaps you forgot to load \"%" SVf "\"?)", - UTF8fARG(is_utf8, name_end - name, name), + } else { + packnamesv = error_report; + } + + Perl_croak(aTHX_ + "Can't locate object method \"%" UTF8f + "\" via package \"%" SVf "\"" + " (perhaps you forgot to load \"%" SVf "\"?)", + UTF8fARG(is_utf8, name_end - name, name), SVfARG(packnamesv), SVfARG(packnamesv)); - } - } + } + } } else if (autoload) { - CV* const cv = GvCV(gv); - if (!CvROOT(cv) && !CvXSUB(cv)) { - GV* stubgv; - GV* autogv; - - if (CvANON(cv) || CvLEXICAL(cv)) - stubgv = gv; - else { - stubgv = CvGV(cv); - if (GvCV(stubgv) != cv) /* orphaned import */ - stubgv = gv; - } + CV* const cv = GvCV(gv); + if (!CvROOT(cv) && !CvXSUB(cv)) { + GV* stubgv; + GV* autogv; + + if (CvANON(cv) || CvLEXICAL(cv)) + stubgv = gv; + else { + stubgv = CvGV(cv); + if (GvCV(stubgv) != cv) /* orphaned import */ + stubgv = gv; + } autogv = gv_autoload_pvn(GvSTASH(stubgv), GvNAME(stubgv), GvNAMELEN(stubgv), GV_AUTOLOAD_ISMETHOD | (GvNAMEUTF8(stubgv) ? SVf_UTF8 : 0)); - if (autogv) - gv = autogv; - } + if (autogv) + gv = autogv; + } } return gv; @@ -1228,26 +1326,26 @@ Perl_gv_autoload_pvn(pTHX_ HV *stash, const char *name, STRLEN len, U32 flags) PERL_ARGS_ASSERT_GV_AUTOLOAD_PVN; if (len == S_autolen && memEQ(name, S_autoload, S_autolen)) - return NULL; + return NULL; if (stash) { - if (SvTYPE(stash) < SVt_PVHV) { + if (SvTYPE(stash) < SVt_PVHV) { STRLEN packname_len = 0; const char * const packname_ptr = SvPV_const(MUTABLE_SV(stash), packname_len); packname = newSVpvn_flags(packname_ptr, packname_len, SVs_TEMP | SvUTF8(stash)); - stash = NULL; - } - else - packname = sv_2mortal(newSVhek(HvNAME_HEK(stash))); - if (flags & GV_SUPER) sv_catpvs(packname, "::SUPER"); + stash = NULL; + } + else + packname = sv_2mortal(newSVhek(HvNAME_HEK(stash))); + if (flags & GV_SUPER) sv_catpvs(packname, "::SUPER"); } if (!(gv = gv_fetchmeth_pvn(stash, S_autoload, S_autolen, FALSE, - is_utf8 | (flags & GV_SUPER)))) - return NULL; + is_utf8 | (flags & GV_SUPER)))) + return NULL; cv = GvCV(gv); if (!(CvROOT(cv) || CvXSUB(cv))) - return NULL; + return NULL; /* * Inheriting AUTOLOAD for non-methods no longer works @@ -1258,7 +1356,7 @@ Perl_gv_autoload_pvn(pTHX_ HV *stash, const char *name, STRLEN len, U32 flags) ) Perl_croak(aTHX_ "Use of inherited AUTOLOAD for non-method %" SVf "::%" UTF8f "() is no longer allowed", - SVfARG(packname), + SVfARG(packname), UTF8fARG(is_utf8, len, name)); if (CvISXSUB(cv)) { @@ -1284,34 +1382,34 @@ Perl_gv_autoload_pvn(pTHX_ HV *stash, const char *name, STRLEN len, U32 flags) * We use SvUTF8 for both prototypes and sub names, so if one is * UTF8, the other must be upgraded. */ - CvSTASH_set(cv, stash); - if (SvPOK(cv)) { /* Ouch! */ - SV * const tmpsv = newSVpvn_flags(name, len, is_utf8); - STRLEN ulen; - const char *proto = CvPROTO(cv); - assert(proto); - if (SvUTF8(cv)) - sv_utf8_upgrade_flags_grow(tmpsv, 0, CvPROTOLEN(cv) + 2); - ulen = SvCUR(tmpsv); - SvCUR_set(tmpsv, SvCUR(tmpsv) + 1); /* include null in string */ - sv_catpvn_flags( - tmpsv, proto, CvPROTOLEN(cv), SV_CATBYTES*!SvUTF8(cv) - ); - SvTEMP_on(tmpsv); /* Allow theft */ - sv_setsv_nomg((SV *)cv, tmpsv); - SvTEMP_off(tmpsv); - SvREFCNT_dec_NN(tmpsv); - SvLEN_set(cv, SvCUR(cv) + 1); - SvCUR_set(cv, ulen); - } - else { - sv_setpvn((SV *)cv, name, len); - SvPOK_off(cv); - if (is_utf8) + CvSTASH_set(cv, stash); + if (SvPOK(cv)) { /* Ouch! */ + SV * const tmpsv = newSVpvn_flags(name, len, is_utf8); + STRLEN ulen; + const char *proto = CvPROTO(cv); + assert(proto); + if (SvUTF8(cv)) + sv_utf8_upgrade_flags_grow(tmpsv, 0, CvPROTOLEN(cv) + 2); + ulen = SvCUR(tmpsv); + SvCUR_set(tmpsv, SvCUR(tmpsv) + 1); /* include null in string */ + sv_catpvn_flags( + tmpsv, proto, CvPROTOLEN(cv), SV_CATBYTES*!SvUTF8(cv) + ); + SvTEMP_on(tmpsv); /* Allow theft */ + sv_setsv_nomg((SV *)cv, tmpsv); + SvTEMP_off(tmpsv); + SvREFCNT_dec_NN(tmpsv); + SvLEN_set(cv, SvCUR(cv) + 1); + SvCUR_set(cv, ulen); + } + else { + sv_setpvn((SV *)cv, name, len); + SvPOK_off(cv); + if (is_utf8) SvUTF8_on(cv); - else SvUTF8_off(cv); - } - CvAUTOLOAD_on(cv); + else SvUTF8_off(cv); + } + CvAUTOLOAD_on(cv); } /* @@ -1325,9 +1423,9 @@ Perl_gv_autoload_pvn(pTHX_ HV *stash, const char *name, STRLEN len, U32 flags) ENTER; if (!isGV(vargv)) { - gv_init_pvn(vargv, varstash, S_autoload, S_autolen, 0); + gv_init_pvn(vargv, varstash, S_autoload, S_autolen, 0); #ifdef PERL_DONT_CREATE_GVSV - GvSV(vargv) = newSV(0); + GvSV(vargv) = newSV_type(SVt_NULL); #endif } LEAVE; @@ -1339,8 +1437,8 @@ Perl_gv_autoload_pvn(pTHX_ HV *stash, const char *name, STRLEN len, U32 flags) /* Ensure SvSETMAGIC() is called if necessary. In particular, to clear tainting if $FOO::AUTOLOAD was previously tainted, but is not now. */ sv_catpvn_flags( - varsv, name, len, - SV_SMAGIC|(is_utf8 ? SV_CATUTF8 : SV_CATBYTES) + varsv, name, len, + SV_SMAGIC|(is_utf8 ? SV_CATUTF8 : SV_CATBYTES) ); if (is_utf8) SvUTF8_on(varsv); @@ -1391,19 +1489,19 @@ S_require_tie_mod(pTHX_ GV *gv, const char varname, const char * name, if (!(stash = gv_stashpvn(name, len, 0)) || ! GET_HV_FETCH_TIE_FUNC) { - SV * const module = newSVpvn(name, len); - const char type = varname == '[' ? '$' : '%'; - if ( flags & 1 ) - save_scalar(gv); - Perl_load_module(aTHX_ PERL_LOADMOD_NOIMPORT, module, NULL); - assert(sp == PL_stack_sp); - stash = gv_stashpvn(name, len, 0); - if (!stash) - Perl_croak(aTHX_ "panic: Can't use %c%c because %s is not available", - type, varname, name); - else if (! GET_HV_FETCH_TIE_FUNC) - Perl_croak(aTHX_ "panic: Can't use %c%c because %s does not define _tie_it", - type, varname, name); + SV * const module = newSVpvn(name, len); + const char type = varname == '[' ? '$' : '%'; + if ( flags & 1 ) + save_scalar(gv); + Perl_load_module(aTHX_ PERL_LOADMOD_NOIMPORT, module, NULL); + assert(sp == PL_stack_sp); + stash = gv_stashpvn(name, len, 0); + if (!stash) + Perl_croak(aTHX_ "panic: Can't use %c%c because %s is not available", + type, varname, name); + else if (! GET_HV_FETCH_TIE_FUNC) + Perl_croak(aTHX_ "panic: Can't use %c%c because %s does not define _tie_it", + type, varname, name); } /* Now call the tie function. It should be in *gvp. */ assert(gvp); assert(*gvp); @@ -1451,12 +1549,13 @@ is returned. Flags may be one of: - GV_ADD - SVf_UTF8 - GV_NOADD_NOINIT - GV_NOINIT - GV_NOEXPAND - GV_ADDMG + GV_ADD Create and initialize the package if doesn't + already exist + GV_NOADD_NOINIT Don't create the package, + GV_ADDMG GV_ADD iff the GV is magical + GV_NOINIT GV_ADD, but don't initialize + GV_NOEXPAND Don't expand SvOK() entries to PVGV + SVf_UTF8 The name is in UTF-8 The most important of which are probably C and C. @@ -1493,44 +1592,50 @@ S_gv_stashpvn_internal(pTHX_ const char *name, U32 namelen, I32 flags) PERL_ARGS_ASSERT_GV_STASHPVN_INTERNAL; if (tmplen <= sizeof smallbuf) - tmpbuf = smallbuf; + tmpbuf = smallbuf; else - Newx(tmpbuf, tmplen, char); + Newx(tmpbuf, tmplen, char); Copy(name, tmpbuf, namelen, char); tmpbuf[namelen] = ':'; tmpbuf[namelen+1] = ':'; tmpgv = gv_fetchpvn_flags(tmpbuf, tmplen, flags, SVt_PVHV); if (tmpbuf != smallbuf) - Safefree(tmpbuf); + Safefree(tmpbuf); if (!tmpgv || !isGV_with_GP(tmpgv)) - return NULL; + return NULL; stash = GvHV(tmpgv); if (!(flags & ~GV_NOADD_MASK) && !stash) return NULL; assert(stash); if (!HvNAME_get(stash)) { - hv_name_set(stash, name, namelen, flags & SVf_UTF8 ? SVf_UTF8 : 0 ); - - /* FIXME: This is a repeat of logic in gv_fetchpvn_flags */ - /* If the containing stash has multiple effective - names, see that this one gets them, too. */ - if (HvAUX(GvSTASH(tmpgv))->xhv_name_count) - mro_package_moved(stash, NULL, tmpgv, 1); + hv_name_set(stash, name, namelen, flags & SVf_UTF8 ? SVf_UTF8 : 0 ); + + /* FIXME: This is a repeat of logic in gv_fetchpvn_flags */ + /* If the containing stash has multiple effective + names, see that this one gets them, too. */ + if (HvAUX(GvSTASH(tmpgv))->xhv_name_count) + mro_package_moved(stash, NULL, tmpgv, 1); } return stash; } /* -gv_stashsvpvn_cached +=for apidoc gv_stashsvpvn_cached Returns a pointer to the stash for a specified package, possibly -cached. Implements both C and C. +cached. Implements both L> and +L>. -Requires one of either namesv or namepv to be non-null. +Requires one of either C or C to be non-null. -See C> for details on "flags". +If the flag C is set, return the stash only if found in the +cache; see L> for details on the other C. + +Note it is strongly preferred for C to be non-null, for performance +reasons. -Note the sv interface is strongly preferred for performance reasons. +=for apidoc Emnh||GV_CACHE_ONLY +=cut */ #define PERL_ARGS_ASSERT_GV_STASHSVPVN_CACHED \ @@ -1605,12 +1710,10 @@ Perl_gv_stashsv(pTHX_ SV *sv, I32 flags) PERL_ARGS_ASSERT_GV_STASHSV; return gv_stashsvpvn_cached(sv, NULL, 0, flags); } - - GV * -Perl_gv_fetchpv(pTHX_ const char *nambeg, I32 add, const svtype sv_type) { +Perl_gv_fetchpv(pTHX_ const char *nambeg, I32 flags, const svtype sv_type) { PERL_ARGS_ASSERT_GV_FETCHPV; - return gv_fetchpvn_flags(nambeg, strlen(nambeg), add, sv_type); + return gv_fetchpvn_flags(nambeg, strlen(nambeg), flags, sv_type); } GV * @@ -1632,12 +1735,12 @@ S_gv_magicalize_isa(pTHX_ GV *gv) av = GvAVn(gv); GvMULTI_on(gv); sv_magic(MUTABLE_SV(av), MUTABLE_SV(gv), PERL_MAGIC_isa, - NULL, 0); + NULL, 0); } /* This function grabs name and tries to split a stash and glob * from its contents. TODO better description, comments - * + * * If the function returns TRUE and 'name == name_end', then * 'gv' can be directly returned to the caller of gv_fetchpvn_flags */ @@ -1653,7 +1756,7 @@ S_parse_gv_stash_name(pTHX_ HV **stash, GV **gv, const char **name, char smallbuf[64]; /* small buffer to avoid a malloc when possible */ PERL_ARGS_ASSERT_PARSE_GV_STASH_NAME; - + if ( full_len > 2 && **name == '*' && isIDFIRST_lazy_if_safe(*name + 1, name_end, is_utf8)) @@ -1732,14 +1835,14 @@ S_parse_gv_stash_name(pTHX_ HV **stash, GV **gv, const char **name, *name = name_cursor+1; if (*name == name_end) { if (!*gv) { - *gv = MUTABLE_GV(*hv_fetchs(PL_defstash, "main::", TRUE)); - if (SvTYPE(*gv) != SVt_PVGV) { - gv_init_pvn(*gv, PL_defstash, "main::", 6, - GV_ADDMULTI); - GvHV(*gv) = - MUTABLE_HV(SvREFCNT_inc_simple(PL_defstash)); - } - } + *gv = MUTABLE_GV(*hv_fetchs(PL_defstash, "main::", TRUE)); + if (SvTYPE(*gv) != SVt_PVGV) { + gv_init_pvn(*gv, PL_defstash, "main::", 6, + GV_ADDMULTI); + GvHV(*gv) = + MUTABLE_HV(SvREFCNT_inc_simple(PL_defstash)); + } + } goto ok; } } @@ -1759,7 +1862,7 @@ PERL_STATIC_INLINE bool S_gv_is_in_main(pTHX_ const char *name, STRLEN len, const U32 is_utf8) { PERL_ARGS_ASSERT_GV_IS_IN_MAIN; - + /* If it's an alphanumeric variable */ if ( len && isIDFIRST_lazy_if_safe(name, name + len, is_utf8) ) { /* Some "normal" variables are always in main::, @@ -1803,7 +1906,7 @@ S_gv_is_in_main(pTHX_ const char *name, STRLEN len, const U32 is_utf8) /* *{""}, or a special variable like $@ */ else return TRUE; - + return FALSE; } @@ -1811,7 +1914,7 @@ S_gv_is_in_main(pTHX_ const char *name, STRLEN len, const U32 is_utf8) /* This function is called if parse_gv_stash_name() failed to * find a stash, or if GV_NOTQUAL or an empty name was passed * to gv_fetchpvn_flags. - * + * * It returns FALSE if the default stash can't be found nor created, * which might happen during global destruction. */ @@ -1821,7 +1924,7 @@ S_find_default_stash(pTHX_ HV **stash, const char *name, STRLEN len, const svtype sv_type) { PERL_ARGS_ASSERT_FIND_DEFAULT_STASH; - + /* No stash in name, so see how we can default */ if ( gv_is_in_main(name, len, is_utf8) ) { @@ -1920,7 +2023,7 @@ S_find_default_stash(pTHX_ HV **stash, const char *name, STRLEN len, * magicalization, which some variables require need in order * to work (like %+, %-, %!), so callers must take care of * that. - * + * * It returns true if the gv did turn out to be magical one; i.e., * if gv_magicalize actually did something. */ @@ -1931,14 +2034,14 @@ S_gv_magicalize(pTHX_ GV *gv, HV *stash, const char *name, STRLEN len, SSize_t paren; PERL_ARGS_ASSERT_GV_MAGICALIZE; - + if (stash != PL_defstash) { /* not the main stash */ - /* We only have to check for a few names here: a, b, EXPORT, ISA - and VERSION. All the others apply only to the main stash or to - CORE (which is checked right after this). */ - if (len) { - switch (*name) { - case 'E': + /* We only have to check for a few names here: a, b, EXPORT, ISA + and VERSION. All the others apply only to the main stash or to + CORE (which is checked right after this). */ + if (len) { + switch (*name) { + case 'E': if ( len >= 6 && name[1] == 'X' && (memEQs(name, len, "EXPORT") @@ -1946,46 +2049,46 @@ S_gv_magicalize(pTHX_ GV *gv, HV *stash, const char *name, STRLEN len, ||memEQs(name, len, "EXPORT_FAIL") ||memEQs(name, len, "EXPORT_TAGS")) ) - GvMULTI_on(gv); - break; - case 'I': + GvMULTI_on(gv); + break; + case 'I': if (memEQs(name, len, "ISA")) - gv_magicalize_isa(gv); - break; - case 'V': + gv_magicalize_isa(gv); + break; + case 'V': if (memEQs(name, len, "VERSION")) - GvMULTI_on(gv); - break; - case 'a': + GvMULTI_on(gv); + break; + case 'a': if (stash == PL_debstash && memEQs(name, len, "args")) { - GvMULTI_on(gv_AVadd(gv)); - break; + GvMULTI_on(gv_AVadd(gv)); + break; } /* FALLTHROUGH */ - case 'b': - if (len == 1 && sv_type == SVt_PV) - GvMULTI_on(gv); - /* FALLTHROUGH */ - default: - goto try_core; - } - goto ret; - } + case 'b': + if (len == 1 && sv_type == SVt_PV) + GvMULTI_on(gv); + /* FALLTHROUGH */ + default: + goto try_core; + } + goto ret; + } try_core: - if (len > 1 /* shortest is uc */ && HvNAMELEN_get(stash) == 4) { - /* Avoid null warning: */ - const char * const stashname = HvNAME(stash); assert(stashname); - if (strBEGINs(stashname, "CORE")) - S_maybe_add_coresub(aTHX_ 0, gv, name, len); - } + if (len > 1 /* shortest is uc */ && HvNAMELEN_get(stash) == 4) { + /* Avoid null warning: */ + const char * const stashname = HvNAME(stash); assert(stashname); + if (strBEGINs(stashname, "CORE")) + S_maybe_add_coresub(aTHX_ 0, gv, name, len); + } } else if (len > 1) { #ifndef EBCDIC - if (*name > 'V' ) { - NOOP; - /* Nothing else to do. - The compiler will probably turn the switch statement into a - branch table. Make sure we avoid even that small overhead for + if (*name > 'V' ) { + NOOP; + /* Nothing else to do. + The compiler will probably turn the switch statement into a + branch table. Make sure we avoid even that small overhead for the common case of lower case variable names. (On EBCDIC platforms, we can't just do: if (NATIVE_TO_ASCII(*name) > NATIVE_TO_ASCII('V') ) { @@ -1993,19 +2096,19 @@ S_gv_magicalize(pTHX_ GV *gv, HV *stash, const char *name, STRLEN len, C1 (non-ASCII) controls on those platforms, so the remapping would make them larger than 'V') */ - } else + } else #endif - { - switch (*name) { - case 'A': + { + switch (*name) { + case 'A': if (memEQs(name, len, "ARGV")) { - IoFLAGS(GvIOn(gv)) |= IOf_ARGV|IOf_START; - } + IoFLAGS(GvIOn(gv)) |= IOf_ARGV|IOf_START; + } else if (memEQs(name, len, "ARGVOUT")) { - GvMULTI_on(gv); - } - break; - case 'E': + GvMULTI_on(gv); + } + break; + case 'E': if ( len >= 6 && name[1] == 'X' && (memEQs(name, len, "EXPORT") @@ -2013,51 +2116,51 @@ S_gv_magicalize(pTHX_ GV *gv, HV *stash, const char *name, STRLEN len, ||memEQs(name, len, "EXPORT_FAIL") ||memEQs(name, len, "EXPORT_TAGS")) ) - GvMULTI_on(gv); - break; - case 'I': + GvMULTI_on(gv); + break; + case 'I': if (memEQs(name, len, "ISA")) { - gv_magicalize_isa(gv); - } - break; - case 'S': + gv_magicalize_isa(gv); + } + break; + case 'S': if (memEQs(name, len, "SIG")) { - HV *hv; - I32 i; - if (!PL_psig_name) { - Newxz(PL_psig_name, 2 * SIG_SIZE, SV*); - Newxz(PL_psig_pend, SIG_SIZE, int); - PL_psig_ptr = PL_psig_name + SIG_SIZE; - } else { - /* I think that the only way to get here is to re-use an - embedded perl interpreter, where the previous - use didn't clean up fully because - PL_perl_destruct_level was 0. I'm not sure that we - "support" that, in that I suspect in that scenario - there are sufficient other garbage values left in the - interpreter structure that something else will crash - before we get here. I suspect that this is one of - those "doctor, it hurts when I do this" bugs. */ - Zero(PL_psig_name, 2 * SIG_SIZE, SV*); - Zero(PL_psig_pend, SIG_SIZE, int); - } - GvMULTI_on(gv); - hv = GvHVn(gv); - hv_magic(hv, NULL, PERL_MAGIC_sig); - for (i = 1; i < SIG_SIZE; i++) { - SV * const * const init = hv_fetch(hv, PL_sig_name[i], strlen(PL_sig_name[i]), 1); - if (init) - sv_setsv(*init, &PL_sv_undef); - } - } - break; - case 'V': + HV *hv; + I32 i; + if (!PL_psig_name) { + Newxz(PL_psig_name, 2 * SIG_SIZE, SV*); + Newxz(PL_psig_pend, SIG_SIZE, int); + PL_psig_ptr = PL_psig_name + SIG_SIZE; + } else { + /* I think that the only way to get here is to re-use an + embedded perl interpreter, where the previous + use didn't clean up fully because + PL_perl_destruct_level was 0. I'm not sure that we + "support" that, in that I suspect in that scenario + there are sufficient other garbage values left in the + interpreter structure that something else will crash + before we get here. I suspect that this is one of + those "doctor, it hurts when I do this" bugs. */ + Zero(PL_psig_name, 2 * SIG_SIZE, SV*); + Zero(PL_psig_pend, SIG_SIZE, int); + } + GvMULTI_on(gv); + hv = GvHVn(gv); + hv_magic(hv, NULL, PERL_MAGIC_sig); + for (i = 1; i < SIG_SIZE; i++) { + SV * const * const init = hv_fetch(hv, PL_sig_name[i], strlen(PL_sig_name[i]), 1); + if (init) + sv_setsv(*init, &PL_sv_undef); + } + } + break; + case 'V': if (memEQs(name, len, "VERSION")) - GvMULTI_on(gv); - break; + GvMULTI_on(gv); + break; case '\003': /* $^CHILD_ERROR_NATIVE */ if (memEQs(name, len, "\003HILD_ERROR_NATIVE")) - goto magicalize; + goto magicalize; /* @{^CAPTURE} %{^CAPTURE} */ if (memEQs(name, len, "\003APTURE")) { AV* const av = GvAVn(gv); @@ -2072,30 +2175,30 @@ S_gv_magicalize(pTHX_ GV *gv, HV *stash, const char *name, STRLEN len, if (memEQs(name, len, "\003APTURE_ALL")) { require_tie_mod_s(gv, '-', "Tie::Hash::NamedCapture",0); } - break; - case '\005': /* $^ENCODING */ + break; + case '\005': /* $^ENCODING */ if (memEQs(name, len, "\005NCODING")) - goto magicalize; - break; - case '\007': /* $^GLOBAL_PHASE */ + goto magicalize; + break; + case '\007': /* $^GLOBAL_PHASE */ if (memEQs(name, len, "\007LOBAL_PHASE")) - goto ro_magicalize; - break; - case '\014': /* $^LAST_FH */ + goto ro_magicalize; + break; + case '\014': /* $^LAST_FH */ if (memEQs(name, len, "\014AST_FH")) - goto ro_magicalize; - break; + goto ro_magicalize; + break; case '\015': /* $^MATCH */ if (memEQs(name, len, "\015ATCH")) { paren = RX_BUFF_IDX_CARET_FULLMATCH; goto storeparen; } break; - case '\017': /* $^OPEN */ + case '\017': /* $^OPEN */ if (memEQs(name, len, "\017PEN")) - goto magicalize; - break; - case '\020': /* $^PREMATCH $^POSTMATCH */ + goto magicalize; + break; + case '\020': /* $^PREMATCH $^POSTMATCH */ if (memEQs(name, len, "\020REMATCH")) { paren = RX_BUFF_IDX_CARET_PREMATCH; goto storeparen; @@ -2104,73 +2207,73 @@ S_gv_magicalize(pTHX_ GV *gv, HV *stash, const char *name, STRLEN len, paren = RX_BUFF_IDX_CARET_POSTMATCH; goto storeparen; } - break; + break; case '\023': if (memEQs(name, len, "\023AFE_LOCALES")) - goto ro_magicalize; - break; - case '\024': /* ${^TAINT} */ + goto ro_magicalize; + break; + case '\024': /* ${^TAINT} */ if (memEQs(name, len, "\024AINT")) - goto ro_magicalize; - break; - case '\025': /* ${^UNICODE}, ${^UTF8LOCALE} */ + goto ro_magicalize; + break; + case '\025': /* ${^UNICODE}, ${^UTF8LOCALE} */ if (memEQs(name, len, "\025NICODE")) - goto ro_magicalize; + goto ro_magicalize; if (memEQs(name, len, "\025TF8LOCALE")) - goto ro_magicalize; + goto ro_magicalize; if (memEQs(name, len, "\025TF8CACHE")) - goto magicalize; - break; - case '\027': /* $^WARNING_BITS */ + goto magicalize; + break; + case '\027': /* $^WARNING_BITS */ if (memEQs(name, len, "\027ARNING_BITS")) - goto magicalize; + goto magicalize; #ifdef WIN32 else if (memEQs(name, len, "\027IN32_SLOPPY_STAT")) - goto magicalize; + goto magicalize; #endif - break; - case '1': - case '2': - case '3': - case '4': - case '5': - case '6': - case '7': - case '8': - case '9': - { - /* Ensures that we have an all-digit variable, ${"1foo"} fails - this test */ + break; + case '1': + case '2': + case '3': + case '4': + case '5': + case '6': + case '7': + case '8': + case '9': + { + /* Ensures that we have an all-digit variable, ${"1foo"} fails + this test */ UV uv; if (!grok_atoUV(name, &uv, NULL) || uv > I32_MAX) goto ret; /* XXX why are we using a SSize_t? */ paren = (SSize_t)(I32)uv; goto storeparen; - } - } - } + } + } + } } else { - /* Names of length 1. (Or 0. But name is NUL terminated, so that will - be case '\0' in this switch statement (ie a default case) */ - switch (*name) { - case '&': /* $& */ + /* Names of length 1. (Or 0. But name is NUL terminated, so that will + be case '\0' in this switch statement (ie a default case) */ + switch (*name) { + case '&': /* $& */ paren = RX_BUFF_IDX_FULLMATCH; goto sawampersand; - case '`': /* $` */ + case '`': /* $` */ paren = RX_BUFF_IDX_PREMATCH; goto sawampersand; - case '\'': /* $' */ + case '\'': /* $' */ paren = RX_BUFF_IDX_POSTMATCH; sawampersand: #ifdef PERL_SAWAMPERSAND - if (!( - sv_type == SVt_PVAV || - sv_type == SVt_PVHV || - sv_type == SVt_PVCV || - sv_type == SVt_PVFM || - sv_type == SVt_PVIO - )) { PL_sawampersand |= + if (!( + sv_type == SVt_PVAV || + sv_type == SVt_PVHV || + sv_type == SVt_PVCV || + sv_type == SVt_PVFM || + sv_type == SVt_PVIO + )) { PL_sawampersand |= (*name == '`') ? SAWAMPERSAND_LEFT : (*name == '&') @@ -2196,29 +2299,29 @@ S_gv_magicalize(pTHX_ GV *gv, HV *stash, const char *name, STRLEN len, sv_magic(GvSVn(gv), MUTABLE_SV(gv), PERL_MAGIC_sv, NULL, paren); break; - case ':': /* $: */ - sv_setpv(GvSVn(gv),PL_chopset); - goto magicalize; + case ':': /* $: */ + sv_setpv(GvSVn(gv),PL_chopset); + goto magicalize; - case '?': /* $? */ + case '?': /* $? */ #ifdef COMPLEX_STATUS - SvUPGRADE(GvSVn(gv), SVt_PVLV); + SvUPGRADE(GvSVn(gv), SVt_PVLV); #endif - goto magicalize; + goto magicalize; - case '!': /* $! */ - GvMULTI_on(gv); - /* If %! has been used, automatically load Errno.pm. */ + case '!': /* $! */ + GvMULTI_on(gv); + /* If %! has been used, automatically load Errno.pm. */ - sv_magic(GvSVn(gv), MUTABLE_SV(gv), PERL_MAGIC_sv, name, len); + sv_magic(GvSVn(gv), MUTABLE_SV(gv), PERL_MAGIC_sv, name, len); /* magicalization must be done before require_tie_mod_s is called */ - if (sv_type == SVt_PVHV || sv_type == SVt_PVGV) + if (sv_type == SVt_PVHV || sv_type == SVt_PVGV) require_tie_mod_s(gv, '!', "Errno", 1); - break; - case '-': /* $-, %-, @- */ - case '+': /* $+, %+, @+ */ + break; + case '-': /* $-, %-, @- */ + case '+': /* $+, %+, @+ */ GvMULTI_on(gv); /* no used once warnings here */ { /* $- $+ */ sv_magic(GvSVn(gv), MUTABLE_SV(gv), PERL_MAGIC_sv, name, len); @@ -2237,81 +2340,81 @@ S_gv_magicalize(pTHX_ GV *gv, HV *stash, const char *name, STRLEN len, SvREADONLY_on(av); } break; - case '*': /* $* */ - case '#': /* $# */ + case '*': /* $* */ + case '#': /* $# */ if (sv_type == SVt_PV) /* diag_listed_as: $* is no longer supported as of Perl 5.30 */ Perl_croak(aTHX_ "$%c is no longer supported as of Perl 5.30", *name); break; - case '\010': /* $^H */ - { - HV *const hv = GvHVn(gv); - hv_magic(hv, NULL, PERL_MAGIC_hints); - } - goto magicalize; - case '\023': /* $^S */ - ro_magicalize: - SvREADONLY_on(GvSVn(gv)); - /* FALLTHROUGH */ - case '0': /* $0 */ - case '^': /* $^ */ - case '~': /* $~ */ - case '=': /* $= */ - case '%': /* $% */ - case '.': /* $. */ - case '(': /* $( */ - case ')': /* $) */ - case '<': /* $< */ - case '>': /* $> */ - case '\\': /* $\ */ - case '/': /* $/ */ - case '|': /* $| */ - case '$': /* $$ */ - case '[': /* $[ */ - case '\001': /* $^A */ - case '\003': /* $^C */ - case '\004': /* $^D */ - case '\005': /* $^E */ - case '\006': /* $^F */ - case '\011': /* $^I, NOT \t in EBCDIC */ - case '\016': /* $^N */ - case '\017': /* $^O */ - case '\020': /* $^P */ - case '\024': /* $^T */ - case '\027': /* $^W */ - magicalize: - sv_magic(GvSVn(gv), MUTABLE_SV(gv), PERL_MAGIC_sv, name, len); - break; - - case '\014': /* $^L */ - sv_setpvs(GvSVn(gv),"\f"); - break; - case ';': /* $; */ - sv_setpvs(GvSVn(gv),"\034"); - break; - case ']': /* $] */ - { - SV * const sv = GvSV(gv); - if (!sv_derived_from(PL_patchlevel, "version")) - upg_version(PL_patchlevel, TRUE); - GvSV(gv) = vnumify(PL_patchlevel); - SvREADONLY_on(GvSV(gv)); - SvREFCNT_dec(sv); - } - break; - case '\026': /* $^V */ - { - SV * const sv = GvSV(gv); - GvSV(gv) = new_version(PL_patchlevel); - SvREADONLY_on(GvSV(gv)); - SvREFCNT_dec(sv); - } - break; - case 'a': - case 'b': - if (sv_type == SVt_PV) - GvMULTI_on(gv); - } + case '\010': /* $^H */ + { + HV *const hv = GvHVn(gv); + hv_magic(hv, NULL, PERL_MAGIC_hints); + } + goto magicalize; + case '\023': /* $^S */ + ro_magicalize: + SvREADONLY_on(GvSVn(gv)); + /* FALLTHROUGH */ + case '0': /* $0 */ + case '^': /* $^ */ + case '~': /* $~ */ + case '=': /* $= */ + case '%': /* $% */ + case '.': /* $. */ + case '(': /* $( */ + case ')': /* $) */ + case '<': /* $< */ + case '>': /* $> */ + case '\\': /* $\ */ + case '/': /* $/ */ + case '|': /* $| */ + case '$': /* $$ */ + case '[': /* $[ */ + case '\001': /* $^A */ + case '\003': /* $^C */ + case '\004': /* $^D */ + case '\005': /* $^E */ + case '\006': /* $^F */ + case '\011': /* $^I, NOT \t in EBCDIC */ + case '\016': /* $^N */ + case '\017': /* $^O */ + case '\020': /* $^P */ + case '\024': /* $^T */ + case '\027': /* $^W */ + magicalize: + sv_magic(GvSVn(gv), MUTABLE_SV(gv), PERL_MAGIC_sv, name, len); + break; + + case '\014': /* $^L */ + sv_setpvs(GvSVn(gv),"\f"); + break; + case ';': /* $; */ + sv_setpvs(GvSVn(gv),"\034"); + break; + case ']': /* $] */ + { + SV * const sv = GvSV(gv); + if (!sv_derived_from(PL_patchlevel, "version")) + upg_version(PL_patchlevel, TRUE); + GvSV(gv) = vnumify(PL_patchlevel); + SvREADONLY_on(GvSV(gv)); + SvREFCNT_dec(sv); + } + break; + case '\026': /* $^V */ + { + SV * const sv = GvSV(gv); + GvSV(gv) = new_version(PL_patchlevel); + SvREADONLY_on(GvSV(gv)); + SvREFCNT_dec(sv); + } + break; + case 'a': + case 'b': + if (sv_type == SVt_PV) + GvMULTI_on(gv); + } } ret: @@ -2369,9 +2472,78 @@ S_maybe_multimagic_gv(pTHX_ GV *gv, const char *name, const svtype sv_type) } } +/* +=for apidoc gv_fetchpv +=for apidoc_item |GV *|gv_fetchpvn|const char * nambeg|STRLEN full_len|I32 flags|const svtype sv_type +=for apidoc_item ||gv_fetchpvn_flags +=for apidoc_item |GV *|gv_fetchpvs|"name"|I32 flags|const svtype sv_type +=for apidoc_item ||gv_fetchsv +=for apidoc_item |GV *|gv_fetchsv_nomg|SV *name|I32 flags|const svtype sv_type + +These all return the GV of type C whose name is given by the inputs, +or NULL if no GV of that name and type could be found. See L. + +The only differences are how the input name is specified, and if 'get' magic is +normally used in getting that name. + +Don't be fooled by the fact that only one form has C in its name. They +all have a C parameter in fact, and all the flag bits have the same +meanings for all + +If any of the flags C, C, C, C, or +C is set, a GV is created if none already exists for the input name +and type. However, C will only do the creation for magical GV's. +For all of these flags except C, C> is called after +the addition. C is used when the caller expects that adding won't +be necessary because the symbol should already exist; but if not, add it +anyway, with a warning that it was unexpectedly absent. The C +flag means to pretend that the GV has been seen before (I, suppress "Used +once" warnings). + +The flag C causes C> not be to called if the +GV existed but isn't PVGV. + +If the C bit is set, the name is treated as being encoded in UTF-8; +otherwise the name won't be considered to be UTF-8 in the C-named forms, +and the UTF-8ness of the underlying SVs will be used in the C forms. + +If the flag C is set, the caller warrants that the input name is a +plain symbol name, not qualified with a package, otherwise the name is checked +for being a qualified one. + +In C, C is a C string, NUL-terminated with no intermediate +NULs. + +In C, C is a literal C string, hence is enclosed in +double quotes. + +C and C are identical. In these, is +a Perl string whose byte length is given by C, and may contain +embedded NULs. + +In C and C, the name is extracted from the PV of +the input C SV. The only difference between these two forms is that +'get' magic is normally done on C in C, and always skipped +with C. Including C in the C parameter +to C makes it behave identically to C. + +=for apidoc Amnh||GV_ADD +=for apidoc Amnh||GV_ADDMG +=for apidoc Amnh||GV_ADDMULTI +=for apidoc Amnh||GV_ADDWARN +=for apidoc Amnh||GV_NOADD_NOINIT +=for apidoc Amnh||GV_NOINIT +=for apidoc Amnh||GV_NOTQUAL +=for apidoc Amnh||GV_NO_SVGMAGIC +=for apidoc Amnh||SVf_UTF8 + +=cut +*/ + GV * Perl_gv_fetchpvn_flags(pTHX_ const char *nambeg, STRLEN full_len, I32 flags, - const svtype sv_type) + const svtype sv_type) { const char *name = nambeg; GV *gv = NULL; @@ -2406,12 +2578,12 @@ Perl_gv_fetchpvn_flags(pTHX_ const char *nambeg, STRLEN full_len, I32 flags, if (!stash && !find_default_stash(&stash, name, len, is_utf8, add, sv_type)) { return NULL; } - + /* By this point we should have a stash and a name */ gvp = (GV**)hv_fetch(stash,name,is_utf8 ? -(I32)len : (I32)len,add); if (!gvp || *gvp == (const GV *)&PL_sv_undef) { - if (addmg) gv = (GV *)newSV(0); - else return NULL; + if (addmg) gv = (GV *)newSV_type(SVt_NULL); /* tentatively */ + else return NULL; } else gv = *gvp, addmg = 0; /* From this point on, addmg means gv has not been inserted in the @@ -2421,7 +2593,7 @@ Perl_gv_fetchpvn_flags(pTHX_ const char *nambeg, STRLEN full_len, I32 flags, /* The GV already exists, so return it, but check if we need to do * anything else with it before that. */ - if (add) { + if (add) { /* This is the heuristic that handles if a variable triggers the * 'used only once' warning. If there's already a GV in the stash * with this name, then we assume that the variable has been used @@ -2430,24 +2602,24 @@ Perl_gv_fetchpvn_flags(pTHX_ const char *nambeg, STRLEN full_len, I32 flags, * BEGIN { $a = 1; $::{foo} = *a }; () = $foo * not warning about $main::foo being used just once */ - GvMULTI_on(gv); - gv_init_svtype(gv, sv_type); + GvMULTI_on(gv); + gv_init_svtype(gv, sv_type); /* You reach this path once the typeglob has already been created, either by the same or a different sigil. If this path didn't exist, then (say) referencing $! first, and %! second would mean that %! was not handled correctly. */ - if (len == 1 && stash == PL_defstash) { + if (len == 1 && stash == PL_defstash) { maybe_multimagic_gv(gv, name, sv_type); - } + } else if (sv_type == SVt_PVAV - && memEQs(name, len, "ISA") - && (!GvAV(gv) || !SvSMAGICAL(GvAV(gv)))) - gv_magicalize_isa(gv); - } - return gv; + && memEQs(name, len, "ISA") + && (!GvAV(gv) || !SvSMAGICAL(GvAV(gv)))) + gv_magicalize_isa(gv); + } + return gv; } else if (no_init) { - assert(!addmg); - return gv; + assert(!addmg); + return gv; } /* If GV_NOEXPAND is true and what we got off the stash is a ref, * don't expand it to a glob. This is an optimization so that things @@ -2456,8 +2628,8 @@ Perl_gv_fetchpvn_flags(pTHX_ const char *nambeg, STRLEN full_len, I32 flags, * stashes. */ else if (no_expand && SvROK(gv)) { - assert(!addmg); - return gv; + assert(!addmg); + return gv; } /* Adding a new symbol. @@ -2470,9 +2642,9 @@ Perl_gv_fetchpvn_flags(pTHX_ const char *nambeg, STRLEN full_len, I32 flags, faking_it = SvOK(gv); if (add & GV_ADDWARN) - Perl_ck_warner_d(aTHX_ packWARN(WARN_INTERNAL), - "Had to create %" UTF8f " unexpectedly", - UTF8fARG(is_utf8, name_end-nambeg, nambeg)); + Perl_ck_warner_d(aTHX_ packWARN(WARN_INTERNAL), + "Had to create %" UTF8f " unexpectedly", + UTF8fARG(is_utf8, name_end-nambeg, nambeg)); gv_init_pvn(gv, stash, name, len, (add & GV_ADDMULTI)|is_utf8); if ( full_len != 0 @@ -2488,7 +2660,7 @@ Perl_gv_fetchpvn_flags(pTHX_ const char *nambeg, STRLEN full_len, I32 flags, if (addmg) { /* gv_magicalize magicalised this gv, so we want it * stored in the symtab. - * Effectively the caller is asking, ‘Does this gv exist?’ + * Effectively the caller is asking, ‘Does this gv exist?’ * And we respond, ‘Er, *now* it does!’ */ (void)hv_store(stash,name,len,(SV *)gv,0); @@ -2499,11 +2671,30 @@ Perl_gv_fetchpvn_flags(pTHX_ const char *nambeg, STRLEN full_len, I32 flags, SvREFCNT_dec_NN(gv); gv = NULL; } - + if (gv) gv_init_svtype(gv, faking_it ? SVt_PVCV : sv_type); return gv; } +/* +=for apidoc gv_fullname3 +=for apidoc_item gv_fullname4 +=for apidoc_item gv_efullname3 +=for apidoc_item gv_efullname4 + +Place the full package name of C into C. The C forms return +instead the effective package name (see L). + +If C is non-NULL, it is considered to be a C language NUL-terminated +string, and the stored name will be prefaced with it. + +The other difference between the functions is that the C<*4> forms have an +extra parameter, C. If C an initial C in the name is +kept; if C it is stripped. With the C<*3> forms, it is always kept. + +=cut +*/ + void Perl_gv_fullname4(pTHX_ SV *sv, const GV *gv, const char *prefix, bool keepmain) { @@ -2517,8 +2708,8 @@ Perl_gv_fullname4(pTHX_ SV *sv, const GV *gv, const char *prefix, bool keepmain) if (hv && (name = HvNAME(hv))) { const STRLEN len = HvNAMELEN(hv); if (keepmain || ! memBEGINs(name, len, "main")) { - sv_catpvn_flags(sv,name,len,HvNAMEUTF8(hv)?SV_CATUTF8:SV_CATBYTES); - sv_catpvs(sv,"::"); + sv_catpvn_flags(sv,name,len,HvNAMEUTF8(hv)?SV_CATUTF8:SV_CATBYTES); + sv_catpvs(sv,"::"); } } else sv_catpvs(sv,"__ANON__::"); @@ -2548,29 +2739,29 @@ Perl_gv_check(pTHX_ HV *stash) PERL_ARGS_ASSERT_GV_CHECK; if (!SvOOK(stash)) - return; + return; assert(HvARRAY(stash)); + /* mark stash is being scanned, to avoid recursing */ + HvAUX(stash)->xhv_aux_flags |= HvAUXf_SCAN_STASH; for (i = 0; i <= (I32) HvMAX(stash); i++) { const HE *entry; - /* mark stash is being scanned, to avoid recursing */ - HvAUX(stash)->xhv_aux_flags |= HvAUXf_SCAN_STASH; - for (entry = HvARRAY(stash)[i]; entry; entry = HeNEXT(entry)) { + for (entry = HvARRAY(stash)[i]; entry; entry = HeNEXT(entry)) { GV *gv; HV *hv; - STRLEN keylen = HeKLEN(entry); + STRLEN keylen = HeKLEN(entry); const char * const key = HeKEY(entry); - if (keylen >= 2 && key[keylen-2] == ':' && key[keylen-1] == ':' && - (gv = MUTABLE_GV(HeVAL(entry))) && isGV(gv) && (hv = GvHV(gv))) - { - if (hv != PL_defstash && hv != stash + if (keylen >= 2 && key[keylen-2] == ':' && key[keylen-1] == ':' && + (gv = MUTABLE_GV(HeVAL(entry))) && isGV(gv) && (hv = GvHV(gv))) + { + if (hv != PL_defstash && hv != stash && !(SvOOK(hv) && (HvAUX(hv)->xhv_aux_flags & HvAUXf_SCAN_STASH)) ) - gv_check(hv); /* nested package */ - } + gv_check(hv); /* nested package */ + } else if ( HeKLEN(entry) != 0 && *HeKEY(entry) != '_' && isIDFIRST_lazy_if_safe(HeKEY(entry), @@ -2578,28 +2769,43 @@ Perl_gv_check(pTHX_ HV *stash) HeUTF8(entry)) ) { const char *file; - gv = MUTABLE_GV(HeVAL(entry)); - if (SvTYPE(gv) != SVt_PVGV || GvMULTI(gv)) - continue; - file = GvFILE(gv); - CopLINE_set(PL_curcop, GvLINE(gv)); + gv = MUTABLE_GV(HeVAL(entry)); + if (SvTYPE(gv) != SVt_PVGV || GvMULTI(gv)) + continue; + file = GvFILE(gv); + CopLINE_set(PL_curcop, GvLINE(gv)); #ifdef USE_ITHREADS - CopFILE(PL_curcop) = (char *)file; /* set for warning */ + CopFILE(PL_curcop) = (char *)file; /* set for warning */ #else - CopFILEGV(PL_curcop) - = gv_fetchfile_flags(file, HEK_LEN(GvFILE_HEK(gv)), 0); + CopFILEGV(PL_curcop) + = gv_fetchfile_flags(file, HEK_LEN(GvFILE_HEK(gv)), 0); #endif - Perl_warner(aTHX_ packWARN(WARN_ONCE), - "Name \"%" HEKf "::%" HEKf - "\" used only once: possible typo", + Perl_warner(aTHX_ packWARN(WARN_ONCE), + "Name \"%" HEKf "::%" HEKf + "\" used only once: possible typo", HEKfARG(HvNAME_HEK(stash)), HEKfARG(GvNAME_HEK(gv))); - } - } - HvAUX(stash)->xhv_aux_flags &= ~HvAUXf_SCAN_STASH; + } + } } + HvAUX(stash)->xhv_aux_flags &= ~HvAUXf_SCAN_STASH; } +/* +=for apidoc newGVgen +=for apidoc_item newGVgen_flags + +Create a new, guaranteed to be unique, GV in the package given by the +NUL-terminated C language string C, and return a pointer to it. + +For C or if C in C is 0, C is to be +considered to be encoded in Latin-1. The only other legal C value is +C, which indicates C is to be considered to be encoded in +UTF-8. + +=cut +*/ + GV * Perl_newGVgen_flags(pTHX_ const char *pack, U32 flags) { @@ -2618,17 +2824,17 @@ GP* Perl_gp_ref(pTHX_ GP *gp) { if (!gp) - return NULL; + return NULL; gp->gp_refcnt++; if (gp->gp_cv) { - if (gp->gp_cvgen) { - /* If the GP they asked for a reference to contains + if (gp->gp_cvgen) { + /* If the GP they asked for a reference to contains a method cache entry, clear it first, so that we don't infect them with our cached entry */ - SvREFCNT_dec_NN(gp->gp_cv); - gp->gp_cv = NULL; - gp->gp_cvgen = 0; - } + SvREFCNT_dec_NN(gp->gp_cv); + gp->gp_cv = NULL; + gp->gp_cvgen = 0; + } } return gp; } @@ -2638,21 +2844,22 @@ Perl_gp_free(pTHX_ GV *gv) { GP* gp; int attempts = 100; + bool in_global_destruction = PL_phase == PERL_PHASE_DESTRUCT; if (!gv || !isGV_with_GP(gv) || !(gp = GvGP(gv))) - return; + return; if (gp->gp_refcnt == 0) { - Perl_ck_warner_d(aTHX_ packWARN(WARN_INTERNAL), - "Attempt to free unreferenced glob pointers" - pTHX__FORMAT pTHX__VALUE); + Perl_ck_warner_d(aTHX_ packWARN(WARN_INTERNAL), + "Attempt to free unreferenced glob pointers" + pTHX__FORMAT pTHX__VALUE); return; } if (gp->gp_refcnt > 1) { borrowed: - if (gp->gp_egv == gv) - gp->gp_egv = 0; - gp->gp_refcnt--; - GvGP_set(gv, NULL); + if (gp->gp_egv == gv) + gp->gp_egv = 0; + gp->gp_refcnt--; + GvGP_set(gv, NULL); return; } @@ -2660,12 +2867,14 @@ Perl_gp_free(pTHX_ GV *gv) /* Copy and null out all the glob slots, so destructors do not see freed SVs. */ HEK * const file_hek = gp->gp_file_hek; - SV * const sv = gp->gp_sv; - AV * const av = gp->gp_av; - HV * const hv = gp->gp_hv; - IO * const io = gp->gp_io; - CV * const cv = gp->gp_cv; - CV * const form = gp->gp_form; + SV * sv = gp->gp_sv; + AV * av = gp->gp_av; + HV * hv = gp->gp_hv; + IO * io = gp->gp_io; + CV * cv = gp->gp_cv; + CV * form = gp->gp_form; + + int need = 0; gp->gp_file_hek = NULL; gp->gp_sv = NULL; @@ -2676,10 +2885,56 @@ Perl_gp_free(pTHX_ GV *gv) gp->gp_form = NULL; if (file_hek) - unshare_hek(file_hek); - - SvREFCNT_dec(sv); - SvREFCNT_dec(av); + unshare_hek(file_hek); + + /* Storing the SV on the temps stack (instead of freeing it immediately) + is an admitted bodge that attempt to compensate for the lack of + reference counting on the stack. The motivation is that typeglob syntax + is extremely short hence programs such as '$a += (*a = 2)' are often + found randomly by researchers running fuzzers. Previously these + programs would trigger errors, that the researchers would + (legitimately) report, and then we would spend time figuring out that + the cause was "stack not reference counted" and so not a dangerous + security hole. This consumed a lot of researcher time, our time, and + prevents "interesting" security holes being uncovered. + + Typeglob assignment is rarely used in performance critical production + code, so we aren't causing much slowdown by doing extra work here. + + In turn, the need to check for SvOBJECT (and references to objects) is + because we have regression tests that rely on timely destruction that + happens *within this while loop* to demonstrate behaviour, and + potentially there is also *working* code in the wild that relies on + such behaviour. + + And we need to avoid doing this in global destruction else we can end + up with "Attempt to free temp prematurely ... Unbalanced string table + refcount". + + Hence the whole thing is a heuristic intended to mitigate against + simple problems likely found by fuzzers but never written by humans, + whilst leaving working code unchanged. */ + if (sv) { + SV *referant; + if (SvREFCNT(sv) > 1 || SvOBJECT(sv) || UNLIKELY(in_global_destruction)) { + SvREFCNT_dec_NN(sv); + sv = NULL; + } else if (SvROK(sv) && (referant = SvRV(sv)) + && (SvREFCNT(referant) > 1 || SvOBJECT(referant))) { + SvREFCNT_dec_NN(sv); + sv = NULL; + } else { + ++need; + } + } + if (av) { + if (SvREFCNT(av) > 1 || SvOBJECT(av) || UNLIKELY(in_global_destruction)) { + SvREFCNT_dec_NN(av); + av = NULL; + } else { + ++need; + } + } /* FIXME - another reference loop GV -> symtab -> GV ? Somehow gp->gp_hv can end up pointing at freed garbage. */ if (hv && SvTYPE(hv) == SVt_PVHV) { @@ -2690,21 +2945,84 @@ Perl_gp_free(pTHX_ GV *gv) HEKfARG(hvname_hek))); (void)hv_deletehek(PL_stashcache, hvname_hek, G_DISCARD); } - SvREFCNT_dec(hv); + if (SvREFCNT(hv) > 1 || SvOBJECT(hv) || UNLIKELY(in_global_destruction)) { + SvREFCNT_dec_NN(hv); + hv = NULL; + } else { + ++need; + } } if (io && SvREFCNT(io) == 1 && IoIFP(io) - && (IoTYPE(io) == IoTYPE_WRONLY || - IoTYPE(io) == IoTYPE_RDWR || - IoTYPE(io) == IoTYPE_APPEND) - && ckWARN_d(WARN_IO) - && IoIFP(io) != PerlIO_stdin() - && IoIFP(io) != PerlIO_stdout() - && IoIFP(io) != PerlIO_stderr() - && !(IoFLAGS(io) & IOf_FAKE_DIRP)) - io_close(io, gv, FALSE, TRUE); - SvREFCNT_dec(io); - SvREFCNT_dec(cv); - SvREFCNT_dec(form); + && (IoTYPE(io) == IoTYPE_WRONLY || + IoTYPE(io) == IoTYPE_RDWR || + IoTYPE(io) == IoTYPE_APPEND) + && ckWARN_d(WARN_IO) + && IoIFP(io) != PerlIO_stdin() + && IoIFP(io) != PerlIO_stdout() + && IoIFP(io) != PerlIO_stderr() + && !(IoFLAGS(io) & IOf_FAKE_DIRP)) + io_close(io, gv, FALSE, TRUE); + if (io) { + if (SvREFCNT(io) > 1 || SvOBJECT(io) || UNLIKELY(in_global_destruction)) { + SvREFCNT_dec_NN(io); + io = NULL; + } else { + ++need; + } + } + if (cv) { + if (SvREFCNT(cv) > 1 || SvOBJECT(cv) || UNLIKELY(in_global_destruction)) { + SvREFCNT_dec_NN(cv); + cv = NULL; + } else { + ++need; + } + } + if (form) { + if (SvREFCNT(form) > 1 || SvOBJECT(form) || UNLIKELY(in_global_destruction)) { + SvREFCNT_dec_NN(form); + form = NULL; + } else { + ++need; + } + } + + if (need) { + /* We don't strictly need to defer all this to the end, but it's + easiest to do so. The subtle problems we have are + 1) any of the actions triggered by the various SvREFCNT_dec()s in + any of the intermediate blocks can cause more items to be added + to the temps stack. So we can't "cache" its state locally + 2) We'd have to re-check the "extend by 1?" for each time. + Whereas if we don't NULL out the values that we want to put onto + the save stack until here, we can do it in one go, with one + one size check. */ + + SSize_t max_ix = PL_tmps_ix + need; + + if (max_ix >= PL_tmps_max) { + tmps_grow_p(max_ix); + } + + if (sv) { + PL_tmps_stack[++PL_tmps_ix] = sv; + } + if (av) { + PL_tmps_stack[++PL_tmps_ix] = (SV *) av; + } + if (hv) { + PL_tmps_stack[++PL_tmps_ix] = (SV *) hv; + } + if (io) { + PL_tmps_stack[++PL_tmps_ix] = (SV *) io; + } + if (cv) { + PL_tmps_stack[++PL_tmps_ix] = (SV *) cv; + } + if (form) { + PL_tmps_stack[++PL_tmps_ix] = (SV *) form; + } + } /* Possibly reallocated by a destructor */ gp = GvGP(gv); @@ -2718,10 +3036,10 @@ Perl_gp_free(pTHX_ GV *gv) && !gp->gp_form) break; if (--attempts == 0) { - Perl_die(aTHX_ - "panic: gp_free failed to free glob pointer - " - "something is repeatedly re-creating entries" - ); + Perl_die(aTHX_ + "panic: gp_free failed to free glob pointer - " + "something is repeatedly re-creating entries" + ); } } @@ -2740,24 +3058,38 @@ Perl_magic_freeovrld(pTHX_ SV *sv, MAGIC *mg) PERL_ARGS_ASSERT_MAGIC_FREEOVRLD; if (amtp && AMT_AMAGIC(amtp)) { - int i; - for (i = 1; i < NofAMmeth; i++) { - CV * const cv = amtp->table[i]; - if (cv) { - SvREFCNT_dec_NN(MUTABLE_SV(cv)); - amtp->table[i] = NULL; - } - } + int i; + for (i = 1; i < NofAMmeth; i++) { + CV * const cv = amtp->table[i]; + if (cv) { + SvREFCNT_dec_NN(MUTABLE_SV(cv)); + amtp->table[i] = NULL; + } + } } return 0; } -/* Updates and caches the CV's */ -/* Returns: - * 1 on success and there is some overload - * 0 if there is no overload - * -1 if some error occurred and it couldn't croak - */ +/* +=for apidoc Gv_AMupdate + +Recalculates overload magic in the package given by C. + +Returns: + +=over + +=item 1 on success and there is some overload + +=item 0 if there is no overload + +=item -1 if some error occurred and it couldn't croak (because C +is true). + +=back + +=cut +*/ int Perl_Gv_AMupdate(pTHX_ HV *stash, bool destructing) @@ -2773,7 +3105,7 @@ Perl_Gv_AMupdate(pTHX_ HV *stash, bool destructing) if (mg) { const AMT * const amtp = (AMT*)mg->mg_ptr; if (amtp->was_ok_sub == newgen) { - return AMT_AMAGIC(amtp) ? 1 : 0; + return AMT_AMAGIC(amtp) ? 1 : 0; } sv_unmagic(MUTABLE_SV(stash), PERL_MAGIC_overload_table); } @@ -2801,19 +3133,19 @@ Perl_Gv_AMupdate(pTHX_ HV *stash, bool destructing) if (!gv) { if (!gv_fetchmeth_pvn(stash, "((", 2, -1, 0)) - goto no_table; + goto no_table; } #ifdef PERL_DONT_CREATE_GVSV else if (!sv) { - NOOP; /* Equivalent to !SvTRUE and !SvOK */ + NOOP; /* Equivalent to !SvTRUE and !SvOK */ } #endif else if (SvTRUE(sv)) /* don't need to set overloading here because fallback => 1 * is the default setting for classes without overloading */ - amt.fallback=AMGfallYES; + amt.fallback=AMGfallYES; else if (SvOK(sv)) { - amt.fallback=AMGfallNEVER; + amt.fallback=AMGfallNEVER; filled = 1; } else { @@ -2825,21 +3157,21 @@ Perl_Gv_AMupdate(pTHX_ HV *stash, bool destructing) HvAUX(stash)->xhv_aux_flags &= ~HvAUXf_NO_DEREF; for (i = 1; i < NofAMmeth; i++) { - const char * const cooky = PL_AMG_names[i]; - /* Human-readable form, for debugging: */ - const char * const cp = AMG_id2name(i); - const STRLEN l = PL_AMG_namelens[i]; - - DEBUG_o( Perl_deb(aTHX_ "Checking overloading of \"%s\" in package \"%.256s\"\n", - cp, HvNAME_get(stash)) ); - /* don't fill the cache while looking up! - Creation of inheritance stubs in intermediate packages may - conflict with the logic of runtime method substitution. - Indeed, for inheritance A -> B -> C, if C overloads "+0", - then we could have created stubs for "(+0" in A and C too. - But if B overloads "bool", we may want to use it for - numifying instead of C's "+0". */ - gv = Perl_gv_fetchmeth_pvn(aTHX_ stash, cooky, l, -1, 0); + const char * const cooky = PL_AMG_names[i]; + /* Human-readable form, for debugging: */ + const char * const cp = AMG_id2name(i); + const STRLEN l = PL_AMG_namelens[i]; + + DEBUG_o( Perl_deb(aTHX_ "Checking overloading of \"%s\" in package \"%.256s\"\n", + cp, HvNAME_get(stash)) ); + /* don't fill the cache while looking up! + Creation of inheritance stubs in intermediate packages may + conflict with the logic of runtime method substitution. + Indeed, for inheritance A -> B -> C, if C overloads "+0", + then we could have created stubs for "(+0" in A and C too. + But if B overloads "bool", we may want to use it for + numifying instead of C's "+0". */ + gv = Perl_gv_fetchmeth_pvn(aTHX_ stash, cooky, l, -1, 0); cv = 0; if (gv && (cv = GvCV(gv)) && CvHASGV(cv)) { const HEK * const gvhek = CvGvNAME_HEK(cv); @@ -2848,49 +3180,49 @@ Perl_Gv_AMupdate(pTHX_ HV *stash, bool destructing) if (memEQs(HEK_KEY(gvhek), HEK_LEN(gvhek), "nil") && stashek && memEQs(HEK_KEY(stashek), HEK_LEN(stashek), "overload")) { - /* This is a hack to support autoloading..., while - knowing *which* methods were declared as overloaded. */ - /* GvSV contains the name of the method. */ - GV *ngv = NULL; - SV *gvsv = GvSV(gv); - - DEBUG_o( Perl_deb(aTHX_ "Resolving method \"%" SVf256\ - "\" for overloaded \"%s\" in package \"%.256s\"\n", - (void*)GvSV(gv), cp, HvNAME(stash)) ); - if (!gvsv || !SvPOK(gvsv) - || !(ngv = gv_fetchmethod_sv_flags(stash, gvsv, 0))) - { - /* Can be an import stub (created by "can"). */ - if (destructing) { - return -1; - } - else { - const SV * const name = (gvsv && SvPOK(gvsv)) + /* This is a hack to support autoloading..., while + knowing *which* methods were declared as overloaded. */ + /* GvSV contains the name of the method. */ + GV *ngv = NULL; + SV *gvsv = GvSV(gv); + + DEBUG_o( Perl_deb(aTHX_ "Resolving method \"%" SVf256\ + "\" for overloaded \"%s\" in package \"%.256s\"\n", + (void*)GvSV(gv), cp, HvNAME(stash)) ); + if (!gvsv || !SvPOK(gvsv) + || !(ngv = gv_fetchmethod_sv_flags(stash, gvsv, 0))) + { + /* Can be an import stub (created by "can"). */ + if (destructing) { + return -1; + } + else { + const SV * const name = (gvsv && SvPOK(gvsv)) ? gvsv : newSVpvs_flags("???", SVs_TEMP); - /* diag_listed_as: Can't resolve method "%s" overloading "%s" in package "%s" */ - Perl_croak(aTHX_ "%s method \"%" SVf256 - "\" overloading \"%s\" "\ - "in package \"%" HEKf256 "\"", - (GvCVGEN(gv) ? "Stub found while resolving" - : "Can't resolve"), - SVfARG(name), cp, + /* diag_listed_as: Can't resolve method "%s" overloading "%s" in package "%s" */ + Perl_croak(aTHX_ "%s method \"%" SVf256 + "\" overloading \"%s\" "\ + "in package \"%" HEKf256 "\"", + (GvCVGEN(gv) ? "Stub found while resolving" + : "Can't resolve"), + SVfARG(name), cp, HEKfARG( - HvNAME_HEK(stash) - )); - } - } - cv = GvCV(gv = ngv); - } - DEBUG_o( Perl_deb(aTHX_ "Overloading \"%s\" in package \"%.256s\" via \"%.256s::%.256s\"\n", - cp, HvNAME_get(stash), HvNAME_get(GvSTASH(CvGV(cv))), - GvNAME(CvGV(cv))) ); - filled = 1; - } else if (gv) { /* Autoloaded... */ - cv = MUTABLE_CV(gv); - filled = 1; - } - amt.table[i]=MUTABLE_CV(SvREFCNT_inc_simple(cv)); + HvNAME_HEK(stash) + )); + } + } + cv = GvCV(gv = ngv); + } + DEBUG_o( Perl_deb(aTHX_ "Overloading \"%s\" in package \"%.256s\" via \"%.256s::%.256s\"\n", + cp, HvNAME_get(stash), HvNAME_get(GvSTASH(CvGV(cv))), + GvNAME(CvGV(cv))) ); + filled = 1; + } else if (gv) { /* Autoloaded... */ + cv = MUTABLE_CV(gv); + filled = 1; + } + amt.table[i]=MUTABLE_CV(SvREFCNT_inc_simple(cv)); if (gv) { switch (i) { @@ -2914,7 +3246,7 @@ Perl_Gv_AMupdate(pTHX_ HV *stash, bool destructing) if (filled) { AMT_AMAGIC_on(&amt); sv_magic(MUTABLE_SV(stash), 0, PERL_MAGIC_overload_table, - (char*)&amt, sizeof(AMT)); + (char*)&amt, sizeof(AMT)); return TRUE; } } @@ -2922,10 +3254,17 @@ Perl_Gv_AMupdate(pTHX_ HV *stash, bool destructing) no_table: AMT_AMAGIC_off(&amt); sv_magic(MUTABLE_SV(stash), 0, PERL_MAGIC_overload_table, - (char*)&amt, sizeof(AMTS)); + (char*)&amt, sizeof(AMTS)); return 0; } +/* +=for apidoc gv_handler + +Implements C, which you should use instead + +=cut +*/ CV* Perl_gv_handler(pTHX_ HV *stash, I32 id) @@ -2944,27 +3283,27 @@ Perl_gv_handler(pTHX_ HV *stash, I32 id) mg = mg_find((const SV *)stash, PERL_MAGIC_overload_table); if (!mg) { do_update: - if (Gv_AMupdate(stash, 0) == -1) - return NULL; - mg = mg_find((const SV *)stash, PERL_MAGIC_overload_table); + if (Gv_AMupdate(stash, 0) == -1) + return NULL; + mg = mg_find((const SV *)stash, PERL_MAGIC_overload_table); } assert(mg); amtp = (AMT*)mg->mg_ptr; if ( amtp->was_ok_sub != newgen ) - goto do_update; + goto do_update; if (AMT_AMAGIC(amtp)) { - CV * const ret = amtp->table[id]; - if (ret && isGV(ret)) { /* Autoloading stab */ - /* Passing it through may have resulted in a warning - "Inherited AUTOLOAD for a non-method deprecated", since - our caller is going through a function call, not a method call. - So return the CV for AUTOLOAD, setting $AUTOLOAD. */ - GV * const gv = gv_fetchmethod(stash, PL_AMG_names[id]); - - if (gv && GvCV(gv)) - return GvCV(gv); - } - return ret; + CV * const ret = amtp->table[id]; + if (ret && isGV(ret)) { /* Autoloading stab */ + /* Passing it through may have resulted in a warning + "Inherited AUTOLOAD for a non-method deprecated", since + our caller is going through a function call, not a method call. + So return the CV for AUTOLOAD, setting $AUTOLOAD. */ + GV * const gv = gv_fetchmethod(stash, PL_AMG_names[id]); + + if (gv && GvCV(gv)) + return GvCV(gv); + } + return ret; } return NULL; @@ -2974,7 +3313,7 @@ Perl_gv_handler(pTHX_ HV *stash, I32 id) /* Implement tryAMAGICun_MG macro. Do get magic, then see if the stack arg is overloaded and if so call it. Flags: - AMGf_numeric apply sv_2num to the stack arg. + AMGf_numeric apply sv_2num to the stack arg. */ bool @@ -2986,8 +3325,8 @@ Perl_try_amagic_un(pTHX_ int method, int flags) { SvGETMAGIC(arg); if (SvAMAGIC(arg) && (tmpsv = amagic_call(arg, &PL_sv_undef, method, - AMGf_noright | AMGf_unary - | (flags & AMGf_numarg)))) + AMGf_noright | AMGf_unary + | (flags & AMGf_numarg)))) { /* where the op is of the form: * $lex = $x op $y (where the assign is optimised away) @@ -3004,12 +3343,12 @@ Perl_try_amagic_un(pTHX_ int method, int flags) { else SETs(tmpsv); - PUTBACK; - return TRUE; + PUTBACK; + return TRUE; } if ((flags & AMGf_numeric) && SvROK(arg)) - *sp = sv_2num(arg); + *sp = sv_2num(arg); return FALSE; } @@ -3018,8 +3357,8 @@ Perl_try_amagic_un(pTHX_ int method, int flags) { Do get magic, then see if the two stack args are overloaded and if so call it. Flags: - AMGf_assign op may be called as mutator (eg +=) - AMGf_numeric apply sv_2num to the stack arg. + AMGf_assign op may be called as mutator (eg +=) + AMGf_numeric apply sv_2num to the stack arg. */ bool @@ -3030,17 +3369,17 @@ Perl_try_amagic_bin(pTHX_ int method, int flags) { SvGETMAGIC(left); if (left != right) - SvGETMAGIC(right); + SvGETMAGIC(right); if (SvAMAGIC(left) || SvAMAGIC(right)) { - SV * tmpsv; + SV * tmpsv; /* STACKED implies mutator variant, e.g. $x += 1 */ bool mutator = (flags & AMGf_assign) && (PL_op->op_flags & OPf_STACKED); - tmpsv = amagic_call(left, right, method, - (mutator ? AMGf_assign: 0) - | (flags & AMGf_numarg)); - if (tmpsv) { + tmpsv = amagic_call(left, right, method, + (mutator ? AMGf_assign: 0) + | (flags & AMGf_numarg)); + if (tmpsv) { (void)POPs; /* where the op is one of the two forms: * $x op= $y @@ -3060,32 +3399,44 @@ Perl_try_amagic_bin(pTHX_ int method, int flags) { else SETs(tmpsv); - PUTBACK; - return TRUE; - } + PUTBACK; + return TRUE; + } } if(left==right && SvGMAGICAL(left)) { - SV * const left = sv_newmortal(); - *(sp-1) = left; - /* Print the uninitialized warning now, so it includes the vari- - able name. */ - if (!SvOK(right)) { - if (ckWARN(WARN_UNINITIALIZED)) report_uninit(right); - sv_setsv_flags(left, &PL_sv_no, 0); - } - else sv_setsv_flags(left, right, 0); - SvGETMAGIC(right); + SV * const left = sv_newmortal(); + *(sp-1) = left; + /* Print the uninitialized warning now, so it includes the vari- + able name. */ + if (!SvOK(right)) { + if (ckWARN(WARN_UNINITIALIZED)) report_uninit(right); + sv_setbool(left, FALSE); + } + else sv_setsv_flags(left, right, 0); + SvGETMAGIC(right); } if (flags & AMGf_numeric) { - if (SvROK(TOPm1s)) - *(sp-1) = sv_2num(TOPm1s); - if (SvROK(right)) - *sp = sv_2num(right); + if (SvROK(TOPm1s)) + *(sp-1) = sv_2num(TOPm1s); + if (SvROK(right)) + *sp = sv_2num(right); } return FALSE; } +/* +=for apidoc amagic_deref_call + +Perform C overloading dereferencing on C, returning the +dereferenced result. C must be one of the dereference operations given +in F. + +If overloading is inactive on C, returns C itself. + +=cut +*/ + SV * Perl_amagic_deref_call(pTHX_ SV *ref, int method) { SV *tmpsv = NULL; @@ -3102,14 +3453,14 @@ Perl_amagic_deref_call(pTHX_ SV *ref, int method) { return ref; while ((tmpsv = amagic_call(ref, &PL_sv_undef, method, - AMGf_noright | AMGf_unary))) { - if (!SvROK(tmpsv)) - Perl_croak(aTHX_ "Overloaded dereference did not return a reference"); - if (tmpsv == ref || SvRV(tmpsv) == SvRV(ref)) { - /* Bail out if it returns us the same reference. */ - return tmpsv; - } - ref = tmpsv; + AMGf_noright | AMGf_unary))) { + if (!SvROK(tmpsv)) + Perl_croak(aTHX_ "Overloaded dereference did not return a reference"); + if (tmpsv == ref || SvRV(tmpsv) == SvRV(ref)) { + /* Bail out if it returns us the same reference. */ + return tmpsv; + } + ref = tmpsv; if (!SvAMAGIC(ref)) break; } @@ -3124,27 +3475,57 @@ Perl_amagic_is_enabled(pTHX_ int method) assert(PL_curcop->cop_hints & HINT_NO_AMAGIC); if ( !lex_mask || !SvOK(lex_mask) ) - /* overloading lexically disabled */ - return FALSE; + /* overloading lexically disabled */ + return FALSE; else if ( lex_mask && SvPOK(lex_mask) ) { - /* we have an entry in the hints hash, check if method has been - * masked by overloading.pm */ - STRLEN len; - const int offset = method / 8; - const int bit = method % 8; - char *pv = SvPV(lex_mask, len); - - /* Bit set, so this overloading operator is disabled */ - if ( (STRLEN)offset < len && pv[offset] & ( 1 << bit ) ) - return FALSE; + /* we have an entry in the hints hash, check if method has been + * masked by overloading.pm */ + STRLEN len; + const int offset = method / 8; + const int bit = method % 8; + char *pv = SvPV(lex_mask, len); + + /* Bit set, so this overloading operator is disabled */ + if ( (STRLEN)offset < len && pv[offset] & ( 1 << bit ) ) + return FALSE; } return TRUE; } +/* +=for apidoc amagic_call + +Perform the overloaded (active magic) operation given by C. +C is one of the values found in F. + +C affects how the operation is performed, as follows: + +=over + +=item C + +C is not to be used in this operation. + +=item C + +C is not to be used in this operation. + +=item C + +The operation is done only on just one operand. + +=item C + +The operation changes one of the operands, e.g., $x += 1 + +=back + +=cut +*/ + SV* Perl_amagic_call(pTHX_ SV *left, SV *right, int method, int flags) { - dVAR; MAGIC *mg; CV *cv=NULL; CV **cvp=NULL, **ocvp=NULL; @@ -3170,16 +3551,16 @@ Perl_amagic_call(pTHX_ SV *left, SV *right, int method, int flags) && (stash = SvSTASH(SvRV(left))) && Gv_AMG(stash) && (mg = mg_find((const SV *)stash, PERL_MAGIC_overload_table)) && (ocvp = cvp = (AMT_AMAGIC((AMT*)mg->mg_ptr) - ? (oamtp = amtp = (AMT*)mg->mg_ptr)->table - : NULL)) + ? (oamtp = amtp = (AMT*)mg->mg_ptr)->table + : NULL)) && ((cv = cvp[off=method+assignshift]) - || (assign && amtp->fallback > AMGfallNEVER && /* fallback to - * usual method */ - ( + || (assign && amtp->fallback > AMGfallNEVER && /* fallback to + * usual method */ + ( #ifdef DEBUGGING - fl = 1, + fl = 1, #endif - cv = cvp[off=method])))) { + cv = cvp[off=method])))) { lr = -1; /* Call method for left argument */ } else { if (cvp && amtp->fallback > AMGfallNEVER && flags & AMGf_unary) { @@ -3187,30 +3568,32 @@ Perl_amagic_call(pTHX_ SV *left, SV *right, int method, int flags) /* look for substituted methods */ /* In all the covered cases we should be called with assign==0. */ - switch (method) { - case inc_amg: - force_cpy = 1; - if ((cv = cvp[off=add_ass_amg]) - || ((cv = cvp[off = add_amg]) && (force_cpy = 0, postpr = 1))) { - right = &PL_sv_yes; lr = -1; assign = 1; - } - break; - case dec_amg: - force_cpy = 1; - if ((cv = cvp[off = subtr_ass_amg]) - || ((cv = cvp[off = subtr_amg]) && (force_cpy = 0, postpr=1))) { - right = &PL_sv_yes; lr = -1; assign = 1; - } - break; - case bool__amg: - (void)((cv = cvp[off=numer_amg]) || (cv = cvp[off=string_amg])); - break; - case numer_amg: - (void)((cv = cvp[off=string_amg]) || (cv = cvp[off=bool__amg])); - break; - case string_amg: - (void)((cv = cvp[off=numer_amg]) || (cv = cvp[off=bool__amg])); - break; + switch (method) { + case inc_amg: + force_cpy = 1; + if ((cv = cvp[off=add_ass_amg]) + || ((cv = cvp[off = add_amg]) + && (force_cpy = 0, (postpr = 1)))) { + right = &PL_sv_yes; lr = -1; assign = 1; + } + break; + case dec_amg: + force_cpy = 1; + if ((cv = cvp[off = subtr_ass_amg]) + || ((cv = cvp[off = subtr_amg]) + && (force_cpy = 0, (postpr=1)))) { + right = &PL_sv_yes; lr = -1; assign = 1; + } + break; + case bool__amg: + (void)((cv = cvp[off=numer_amg]) || (cv = cvp[off=string_amg])); + break; + case numer_amg: + (void)((cv = cvp[off=string_amg]) || (cv = cvp[off=bool__amg])); + break; + case string_amg: + (void)((cv = cvp[off=numer_amg]) || (cv = cvp[off=bool__amg])); + break; case not_amg: (void)((cv = cvp[off=bool__amg]) || (cv = cvp[off=numer_amg]) @@ -3218,115 +3601,115 @@ Perl_amagic_call(pTHX_ SV *left, SV *right, int method, int flags) if (cv) postpr = 1; break; - case copy_amg: - { - /* - * SV* ref causes confusion with the interpreter variable of - * the same name - */ - SV* const tmpRef=SvRV(left); - if (!SvROK(tmpRef) && SvTYPE(tmpRef) <= SVt_PVMG) { - /* - * Just to be extra cautious. Maybe in some - * additional cases sv_setsv is safe, too. - */ - SV* const newref = newSVsv(tmpRef); - SvOBJECT_on(newref); - /* No need to do SvAMAGIC_on here, as SvAMAGIC macros - delegate to the stash. */ - SvSTASH_set(newref, MUTABLE_HV(SvREFCNT_inc(SvSTASH(tmpRef)))); - return newref; - } - } - break; - case abs_amg: - if ((cvp[off1=lt_amg] || cvp[off1=ncmp_amg]) - && ((cv = cvp[off=neg_amg]) || (cv = cvp[off=subtr_amg]))) { - SV* const nullsv=&PL_sv_zero; - if (off1==lt_amg) { - SV* const lessp = amagic_call(left,nullsv, - lt_amg,AMGf_noright); - logic = SvTRUE_NN(lessp); - } else { - SV* const lessp = amagic_call(left,nullsv, - ncmp_amg,AMGf_noright); - logic = (SvNV(lessp) < 0); - } - if (logic) { - if (off==subtr_amg) { - right = left; - left = nullsv; - lr = 1; - } - } else { - return left; - } - } - break; - case neg_amg: - if ((cv = cvp[off=subtr_amg])) { - right = left; - left = &PL_sv_zero; - lr = 1; - } - break; - case int_amg: - case iter_amg: /* XXXX Eventually should do to_gv. */ - case ftest_amg: /* XXXX Eventually should do to_gv. */ - case regexp_amg: - /* FAIL safe */ - return NULL; /* Delegate operation to standard mechanisms. */ - - case to_sv_amg: - case to_av_amg: - case to_hv_amg: - case to_gv_amg: - case to_cv_amg: - /* FAIL safe */ - return left; /* Delegate operation to standard mechanisms. */ - - default: - goto not_found; - } - if (!cv) goto not_found; + case copy_amg: + { + /* + * SV* ref causes confusion with the interpreter variable of + * the same name + */ + SV* const tmpRef=SvRV(left); + if (!SvROK(tmpRef) && SvTYPE(tmpRef) <= SVt_PVMG) { + /* + * Just to be extra cautious. Maybe in some + * additional cases sv_setsv is safe, too. + */ + SV* const newref = newSVsv(tmpRef); + SvOBJECT_on(newref); + /* No need to do SvAMAGIC_on here, as SvAMAGIC macros + delegate to the stash. */ + SvSTASH_set(newref, MUTABLE_HV(SvREFCNT_inc(SvSTASH(tmpRef)))); + return newref; + } + } + break; + case abs_amg: + if ((cvp[off1=lt_amg] || cvp[off1=ncmp_amg]) + && ((cv = cvp[off=neg_amg]) || (cv = cvp[off=subtr_amg]))) { + SV* const nullsv=&PL_sv_zero; + if (off1==lt_amg) { + SV* const lessp = amagic_call(left,nullsv, + lt_amg,AMGf_noright); + logic = SvTRUE_NN(lessp); + } else { + SV* const lessp = amagic_call(left,nullsv, + ncmp_amg,AMGf_noright); + logic = (SvNV(lessp) < 0); + } + if (logic) { + if (off==subtr_amg) { + right = left; + left = nullsv; + lr = 1; + } + } else { + return left; + } + } + break; + case neg_amg: + if ((cv = cvp[off=subtr_amg])) { + right = left; + left = &PL_sv_zero; + lr = 1; + } + break; + case int_amg: + case iter_amg: /* XXXX Eventually should do to_gv. */ + case ftest_amg: /* XXXX Eventually should do to_gv. */ + case regexp_amg: + /* FAIL safe */ + return NULL; /* Delegate operation to standard mechanisms. */ + + case to_sv_amg: + case to_av_amg: + case to_hv_amg: + case to_gv_amg: + case to_cv_amg: + /* FAIL safe */ + return left; /* Delegate operation to standard mechanisms. */ + + default: + goto not_found; + } + if (!cv) goto not_found; } else if (!(AMGf_noright & flags) && SvAMAGIC(right) - && (stash = SvSTASH(SvRV(right))) && Gv_AMG(stash) - && (mg = mg_find((const SV *)stash, PERL_MAGIC_overload_table)) - && (cvp = (AMT_AMAGIC((AMT*)mg->mg_ptr) - ? (amtp = (AMT*)mg->mg_ptr)->table - : NULL)) - && (cv = cvp[off=method])) { /* Method for right - * argument found */ + && (stash = SvSTASH(SvRV(right))) && Gv_AMG(stash) + && (mg = mg_find((const SV *)stash, PERL_MAGIC_overload_table)) + && (cvp = (AMT_AMAGIC((AMT*)mg->mg_ptr) + ? (amtp = (AMT*)mg->mg_ptr)->table + : NULL)) + && (cv = cvp[off=method])) { /* Method for right + * argument found */ lr=1; } else if (((cvp && amtp->fallback > AMGfallNEVER) || (ocvp && oamtp->fallback > AMGfallNEVER)) - && !(flags & AMGf_unary)) { - /* We look for substitution for - * comparison operations and - * concatenation */ + && !(flags & AMGf_unary)) { + /* We look for substitution for + * comparison operations and + * concatenation */ if (method==concat_amg || method==concat_ass_amg - || method==repeat_amg || method==repeat_ass_amg) { - return NULL; /* Delegate operation to string conversion */ + || method==repeat_amg || method==repeat_ass_amg) { + return NULL; /* Delegate operation to string conversion */ } off = -1; switch (method) { - case lt_amg: - case le_amg: - case gt_amg: - case ge_amg: - case eq_amg: - case ne_amg: + case lt_amg: + case le_amg: + case gt_amg: + case ge_amg: + case eq_amg: + case ne_amg: off = ncmp_amg; break; - case slt_amg: - case sle_amg: - case sgt_amg: - case sge_amg: - case seq_amg: - case sne_amg: + case slt_amg: + case sle_amg: + case sgt_amg: + case sge_amg: + case seq_amg: + case sne_amg: off = scmp_amg; break; - } + } if (off != -1) { if (ocvp && (oamtp->fallback > AMGfallNEVER)) { cv = ocvp[off]; @@ -3344,51 +3727,51 @@ Perl_amagic_call(pTHX_ SV *left, SV *right, int method, int flags) } else { not_found: /* No method found, either report or croak */ switch (method) { - case to_sv_amg: - case to_av_amg: - case to_hv_amg: - case to_gv_amg: - case to_cv_amg: - /* FAIL safe */ - return left; /* Delegate operation to standard mechanisms. */ + case to_sv_amg: + case to_av_amg: + case to_hv_amg: + case to_gv_amg: + case to_cv_amg: + /* FAIL safe */ + return left; /* Delegate operation to standard mechanisms. */ } if (ocvp && (cv=ocvp[nomethod_amg])) { /* Call report method */ - notfound = 1; lr = -1; + notfound = 1; lr = -1; } else if (cvp && (cv=cvp[nomethod_amg])) { - notfound = 1; lr = 1; + notfound = 1; lr = 1; } else if ((use_default_op = (!ocvp || oamtp->fallback >= AMGfallYES) && (!cvp || amtp->fallback >= AMGfallYES)) && !DEBUG_o_TEST) { - /* Skip generating the "no method found" message. */ - return NULL; + /* Skip generating the "no method found" message. */ + return NULL; } else { - SV *msg; - if (off==-1) off=method; - msg = sv_2mortal(Perl_newSVpvf(aTHX_ - "Operation \"%s\": no method found,%sargument %s%" SVf "%s%" SVf, - AMG_id2name(method + assignshift), - (flags & AMGf_unary ? " " : "\n\tleft "), - SvAMAGIC(left)? - "in overloaded package ": - "has no overloaded magic", - SvAMAGIC(left)? - SVfARG(sv_2mortal(newSVhek(HvNAME_HEK(SvSTASH(SvRV(left)))))): - SVfARG(&PL_sv_no), - SvAMAGIC(right)? - ",\n\tright argument in overloaded package ": - (flags & AMGf_unary - ? "" - : ",\n\tright argument has no overloaded magic"), - SvAMAGIC(right)? - SVfARG(sv_2mortal(newSVhek(HvNAME_HEK(SvSTASH(SvRV(right)))))): - SVfARG(&PL_sv_no))); + SV *msg; + if (off==-1) off=method; + msg = sv_2mortal(Perl_newSVpvf(aTHX_ + "Operation \"%s\": no method found,%sargument %s%" SVf "%s%" SVf, + AMG_id2name(method + assignshift), + (flags & AMGf_unary ? " " : "\n\tleft "), + SvAMAGIC(left)? + "in overloaded package ": + "has no overloaded magic", + SvAMAGIC(left)? + SVfARG(sv_2mortal(newSVhek(HvNAME_HEK(SvSTASH(SvRV(left)))))): + SVfARG(&PL_sv_no), + SvAMAGIC(right)? + ",\n\tright argument in overloaded package ": + (flags & AMGf_unary + ? "" + : ",\n\tright argument has no overloaded magic"), + SvAMAGIC(right)? + SVfARG(sv_2mortal(newSVhek(HvNAME_HEK(SvSTASH(SvRV(right)))))): + SVfARG(&PL_sv_no))); if (use_default_op) { - DEBUG_o( Perl_deb(aTHX_ "%" SVf, SVfARG(msg)) ); - } else { - Perl_croak(aTHX_ "%" SVf, SVfARG(msg)); - } - return NULL; + DEBUG_o( Perl_deb(aTHX_ "%" SVf, SVfARG(msg)) ); + } else { + Perl_croak(aTHX_ "%" SVf, SVfARG(msg)); + } + return NULL; } force_cpy = force_cpy || assign; } @@ -3457,18 +3840,18 @@ Perl_amagic_call(pTHX_ SV *left, SV *right, int method, int flags) #ifdef DEBUGGING if (!notfound) { DEBUG_o(Perl_deb(aTHX_ - "Overloaded operator \"%s\"%s%s%s:\n\tmethod%s found%s in package %" SVf "%s\n", - AMG_id2name(off), - method+assignshift==off? "" : - " (initially \"", - method+assignshift==off? "" : - AMG_id2name(method+assignshift), - method+assignshift==off? "" : "\")", - flags & AMGf_unary? "" : - lr==1 ? " for right argument": " for left argument", - flags & AMGf_unary? " for argument" : "", - stash ? SVfARG(sv_2mortal(newSVhek(HvNAME_HEK(stash)))) : SVfARG(newSVpvs_flags("null", SVs_TEMP)), - fl? ",\n\tassignment variant used": "") ); + "Overloaded operator \"%s\"%s%s%s:\n\tmethod%s found%s in package %" SVf "%s\n", + AMG_id2name(off), + method+assignshift==off? "" : + " (initially \"", + method+assignshift==off? "" : + AMG_id2name(method+assignshift), + method+assignshift==off? "" : "\")", + flags & AMGf_unary? "" : + lr==1 ? " for right argument": " for left argument", + flags & AMGf_unary? " for argument" : "", + stash ? SVfARG(sv_2mortal(newSVhek(HvNAME_HEK(stash)))) : SVfARG(newSVpvs_flags("null", SVs_TEMP)), + fl? ",\n\tassignment variant used": "") ); } #endif /* Since we use shallow copy during assignment, we need @@ -3494,7 +3877,7 @@ Perl_amagic_call(pTHX_ SV *left, SV *right, int method, int flags) * In the latter case assignshift==0, so only notfound case is important. */ if ( (lr == -1) && ( ( (method + assignshift == off) - && (assign || (method == inc_amg) || (method == dec_amg))) + && (assign || (method == inc_amg) || (method == dec_amg))) || force_cpy) ) { /* newSVsv does not behave as advertised, so we copy missing @@ -3502,9 +3885,9 @@ Perl_amagic_call(pTHX_ SV *left, SV *right, int method, int flags) SV *tmpRef = SvRV(left); SV *rv_copy; if (SvREFCNT(tmpRef) > 1 && (rv_copy = AMG_CALLunary(left,copy_amg))) { - SvRV_set(left, rv_copy); - SvSETMAGIC(left); - SvREFCNT_dec_NN(tmpRef); + SvRV_set(left, rv_copy); + SvSETMAGIC(left); + SvREFCNT_dec_NN(tmpRef); } } @@ -3531,7 +3914,7 @@ Perl_amagic_call(pTHX_ SV *left, SV *right, int method, int flags) case G_VOID: myop.op_flags |= OPf_WANT_VOID; break; - case G_ARRAY: + case G_LIST: if (flags & AMGf_want_list) { myop.op_flags |= OPf_WANT_LIST; break; @@ -3547,7 +3930,7 @@ Perl_amagic_call(pTHX_ SV *left, SV *right, int method, int flags) SAVEOP(); PL_op = (OP *) &myop; if (PERLDB_SUB && PL_curstash != PL_debstash) - PL_op->op_private |= OPpENTERSUB_DB; + PL_op->op_private |= OPpENTERSUB_DB; Perl_pp_pushmark(aTHX); EXTEND(SP, notfound + 5); @@ -3556,7 +3939,7 @@ Perl_amagic_call(pTHX_ SV *left, SV *right, int method, int flags) PUSHs( lr > 0 ? &PL_sv_yes : ( assign ? &PL_sv_undef : &PL_sv_no )); if (notfound) { PUSHs(newSVpvn_flags(AMG_id2name(method + assignshift), - AMG_id2namelen(method + assignshift), SVs_TEMP)); + AMG_id2namelen(method + assignshift), SVs_TEMP)); } else if (flags & AMGf_numarg) PUSHs(&PL_sv_undef); @@ -3580,9 +3963,9 @@ Perl_amagic_call(pTHX_ SV *left, SV *right, int method, int flags) res = &PL_sv_undef; SP = PL_stack_base + oldmark; break; - case G_ARRAY: + case G_LIST: if (flags & AMGf_want_list) { - res = sv_2mortal((SV *)newAV()); + res = newSV_type_mortal(SVt_PVAV); av_extend((AV *)res, nret); while (nret--) av_store((AV *)res, nret, POPs); @@ -3603,34 +3986,34 @@ Perl_amagic_call(pTHX_ SV *left, SV *right, int method, int flags) switch (method) { case le_amg: case sle_amg: - ans=SvIV(res)<=0; break; + ans=SvIV(res)<=0; break; case lt_amg: case slt_amg: - ans=SvIV(res)<0; break; + ans=SvIV(res)<0; break; case ge_amg: case sge_amg: - ans=SvIV(res)>=0; break; + ans=SvIV(res)>=0; break; case gt_amg: case sgt_amg: - ans=SvIV(res)>0; break; + ans=SvIV(res)>0; break; case eq_amg: case seq_amg: - ans=SvIV(res)==0; break; + ans=SvIV(res)==0; break; case ne_amg: case sne_amg: - ans=SvIV(res)!=0; break; + ans=SvIV(res)!=0; break; case inc_amg: case dec_amg: - SvSetSV(left,res); return left; + SvSetSV(left,res); return left; case not_amg: - ans=!SvTRUE_NN(res); break; + ans=!SvTRUE_NN(res); break; default: ans=0; break; } return boolSV(ans); } else if (method==copy_amg) { if (!SvROK(res)) { - Perl_croak(aTHX_ "Copy method did not return a reference"); + Perl_croak(aTHX_ "Copy method did not return a reference"); } return SvREFCNT_inc(SvRV(res)); } else { @@ -3642,16 +4025,15 @@ Perl_amagic_call(pTHX_ SV *left, SV *right, int method, int flags) void Perl_gv_name_set(pTHX_ GV *gv, const char *name, U32 len, U32 flags) { - dVAR; U32 hash; PERL_ARGS_ASSERT_GV_NAME_SET; if (len > I32_MAX) - Perl_croak(aTHX_ "panic: gv name too long (%" UVuf ")", (UV) len); + Perl_croak(aTHX_ "panic: gv name too long (%" UVuf ")", (UV) len); if (!(flags & GV_ADD) && GvNAME_HEK(gv)) { - unshare_hek(GvNAME_HEK(gv)); + unshare_hek(GvNAME_HEK(gv)); } PERL_HASH(hash, name, len); @@ -3692,47 +4074,47 @@ Perl_gv_try_downgrade(pTHX_ GV *gv) if (PL_phase == PERL_PHASE_DESTRUCT) return; if (!(SvREFCNT(gv) == 1 && SvTYPE(gv) == SVt_PVGV && !SvFAKE(gv) && - !SvOBJECT(gv) && !SvREADONLY(gv) && - isGV_with_GP(gv) && GvGP(gv) && - !GvINTRO(gv) && GvREFCNT(gv) == 1 && - !GvSV(gv) && !GvAV(gv) && !GvHV(gv) && !GvIOp(gv) && !GvFORM(gv) && - GvEGVx(gv) == gv && (stash = GvSTASH(gv)))) - return; + !SvOBJECT(gv) && !SvREADONLY(gv) && + isGV_with_GP(gv) && GvGP(gv) && + !GvINTRO(gv) && GvREFCNT(gv) == 1 && + !GvSV(gv) && !GvAV(gv) && !GvHV(gv) && !GvIOp(gv) && !GvFORM(gv) && + GvEGVx(gv) == gv && (stash = GvSTASH(gv)))) + return; if (gv == PL_statgv || gv == PL_last_in_gv || gv == PL_stderrgv) - return; + return; if (SvMAGICAL(gv)) { MAGIC *mg; - /* only backref magic is allowed */ - if (SvGMAGICAL(gv) || SvSMAGICAL(gv)) - return; + /* only backref magic is allowed */ + if (SvGMAGICAL(gv) || SvSMAGICAL(gv)) + return; for (mg = SvMAGIC(gv); mg; mg = mg->mg_moremagic) { if (mg->mg_type != PERL_MAGIC_backref) return; - } + } } cv = GvCV(gv); if (!cv) { - HEK *gvnhek = GvNAME_HEK(gv); - (void)hv_deletehek(stash, gvnhek, G_DISCARD); + HEK *gvnhek = GvNAME_HEK(gv); + (void)hv_deletehek(stash, gvnhek, G_DISCARD); } else if (GvMULTI(gv) && cv && SvREFCNT(cv) == 1 && - !SvOBJECT(cv) && !SvMAGICAL(cv) && !SvREADONLY(cv) && - CvSTASH(cv) == stash && !CvNAMED(cv) && CvGV(cv) == gv && - CvCONST(cv) && !CvMETHOD(cv) && !CvLVALUE(cv) && !CvUNIQUE(cv) && - !CvNODEBUG(cv) && !CvCLONE(cv) && !CvCLONED(cv) && !CvANON(cv) && - (namehek = GvNAME_HEK(gv)) && - (gvp = hv_fetchhek(stash, namehek, 0)) && - *gvp == (SV*)gv) { - SV *value = SvREFCNT_inc(CvXSUBANY(cv).any_ptr); - const bool imported = !!GvIMPORTED_CV(gv); - SvREFCNT(gv) = 0; - sv_clear((SV*)gv); - SvREFCNT(gv) = 1; - SvFLAGS(gv) = SVt_IV|SVf_ROK|SVprv_PCS_IMPORTED * imported; + !SvOBJECT(cv) && !SvMAGICAL(cv) && !SvREADONLY(cv) && + CvSTASH(cv) == stash && !CvNAMED(cv) && CvGV(cv) == gv && + CvCONST(cv) && !CvMETHOD(cv) && !CvLVALUE(cv) && !CvUNIQUE(cv) && + !CvNODEBUG(cv) && !CvCLONE(cv) && !CvCLONED(cv) && !CvANON(cv) && + (namehek = GvNAME_HEK(gv)) && + (gvp = hv_fetchhek(stash, namehek, 0)) && + *gvp == (SV*)gv) { + SV *value = SvREFCNT_inc(CvXSUBANY(cv).any_ptr); + const bool imported = !!GvIMPORTED_CV(gv); + SvREFCNT(gv) = 0; + sv_clear((SV*)gv); + SvREFCNT(gv) = 1; + SvFLAGS(gv) = SVt_IV|SVf_ROK|SVprv_PCS_IMPORTED * imported; /* See also: 'SET_SVANY_FOR_BODYLESS_IV' in sv.c */ - SvANY(gv) = (XPVGV*)((char*)&(gv->sv_u.svu_iv) - - STRUCT_OFFSET(XPVIV, xiv_iv)); - SvRV_set(gv, value); + SvANY(gv) = (XPVGV*)((char*)&(gv->sv_u.svu_iv) - + STRUCT_OFFSET(XPVIV, xiv_iv)); + SvRV_set(gv, value); } } @@ -3746,9 +4128,9 @@ Perl_gv_override(pTHX_ const char * const name, const STRLEN len) gvp = (GV**)hv_fetch(PL_globalstash, name, len, FALSE); gv = gvp ? *gvp : NULL; if (gv && !isGV(gv)) { - if (!SvPCS_IMPORTED(gv)) return NULL; - gv_init(gv, PL_globalstash, name, len, 0); - return gv; + if (!SvPCS_IMPORTED(gv)) return NULL; + gv_init(gv, PL_globalstash, name, len, 0); + return gv; } return gv && GvCVu(gv) && GvIMPORTED_CV(gv) ? gv : NULL; } diff --git a/gnu/usr.bin/perl/gv.h b/gnu/usr.bin/perl/gv.h index 488f2cc87fe..f3dbaab57e8 100644 --- a/gnu/usr.bin/perl/gv.h +++ b/gnu/usr.bin/perl/gv.h @@ -26,34 +26,34 @@ struct gp { #define GvXPVGV(gv) ((XPVGV*)SvANY(gv)) -#if defined (DEBUGGING) && defined(__GNUC__) && !defined(PERL_GCC_BRACE_GROUPS_FORBIDDEN) && !defined(__INTEL_COMPILER) +#if defined (DEBUGGING) && defined(PERL_USE_GCC_BRACE_GROUPS) && !defined(__INTEL_COMPILER) # define GvGP(gv) \ - (0+(*({GV *const _gvgp = (GV *) (gv); \ - assert(SvTYPE(_gvgp) == SVt_PVGV || SvTYPE(_gvgp) == SVt_PVLV); \ - assert(isGV_with_GP(_gvgp)); \ - &((_gvgp)->sv_u.svu_gp);}))) + (0+(*({GV *const _gvgp = (GV *) (gv); \ + assert(SvTYPE(_gvgp) == SVt_PVGV || SvTYPE(_gvgp) == SVt_PVLV); \ + assert(isGV_with_GP(_gvgp)); \ + &((_gvgp)->sv_u.svu_gp);}))) # define GvGP_set(gv,gp) \ - {GV *const _gvgp = (GV *) (gv); \ - assert(SvTYPE(_gvgp) == SVt_PVGV || SvTYPE(_gvgp) == SVt_PVLV); \ - assert(isGV_with_GP(_gvgp)); \ - (_gvgp)->sv_u.svu_gp = (gp); } + {GV *const _gvgp = (GV *) (gv); \ + assert(SvTYPE(_gvgp) == SVt_PVGV || SvTYPE(_gvgp) == SVt_PVLV); \ + assert(isGV_with_GP(_gvgp)); \ + (_gvgp)->sv_u.svu_gp = (gp); } # define GvFLAGS(gv) \ - (*({GV *const _gvflags = (GV *) (gv); \ - assert(SvTYPE(_gvflags) == SVt_PVGV || SvTYPE(_gvflags) == SVt_PVLV); \ - assert(isGV_with_GP(_gvflags)); \ - &(GvXPVGV(_gvflags)->xpv_cur);})) + (*({GV *const _gvflags = (GV *) (gv); \ + assert(SvTYPE(_gvflags) == SVt_PVGV || SvTYPE(_gvflags) == SVt_PVLV); \ + assert(isGV_with_GP(_gvflags)); \ + &(GvXPVGV(_gvflags)->xpv_cur);})) # define GvSTASH(gv) \ - (*({ GV * const _gvstash = (GV *) (gv); \ - assert(isGV_with_GP(_gvstash)); \ - assert(SvTYPE(_gvstash) == SVt_PVGV || SvTYPE(_gvstash) >= SVt_PVLV); \ - &(GvXPVGV(_gvstash)->xnv_u.xgv_stash); \ - })) + (*({ GV * const _gvstash = (GV *) (gv); \ + assert(isGV_with_GP(_gvstash)); \ + assert(SvTYPE(_gvstash) == SVt_PVGV || SvTYPE(_gvstash) >= SVt_PVLV); \ + &(GvXPVGV(_gvstash)->xnv_u.xgv_stash); \ + })) # define GvNAME_HEK(gv) \ (*({ GV * const _gvname_hek = (GV *) (gv); \ - assert(isGV_with_GP(_gvname_hek)); \ - assert(SvTYPE(_gvname_hek) == SVt_PVGV || SvTYPE(_gvname_hek) >= SVt_PVLV); \ - &(GvXPVGV(_gvname_hek)->xiv_u.xivu_namehek); \ - })) + assert(isGV_with_GP(_gvname_hek)); \ + assert(SvTYPE(_gvname_hek) == SVt_PVGV || SvTYPE(_gvname_hek) >= SVt_PVLV); \ + &(GvXPVGV(_gvname_hek)->xiv_u.xivu_namehek); \ + })) # define GvNAME_get(gv) ({ assert(GvNAME_HEK(gv)); (char *)HEK_KEY(GvNAME_HEK(gv)); }) # define GvNAMELEN_get(gv) ({ assert(GvNAME_HEK(gv)); HEK_LEN(GvNAME_HEK(gv)); }) # define GvNAMEUTF8(gv) ({ assert(GvNAME_HEK(gv)); HEK_UTF8(GvNAME_HEK(gv)); }) @@ -72,12 +72,17 @@ struct gp { #define GvNAMELEN(gv) GvNAMELEN_get(gv) /* -=head1 GV Functions - =for apidoc Am|SV*|GvSV|GV* gv Return the SV from the GV. +Prior to Perl v5.9.3, this would add a scalar if none existed. Nowadays, use +C> for that, or compile perl with S>. See +L. + +=for apidoc Am|SV*|GvSVn|GV* gv +Like C>, but creates an empty scalar if none already exists. + =for apidoc Am|AV*|GvAV|GV* gv Return the AV from the GV. @@ -96,8 +101,8 @@ Return the CV from the GV. #define GvSV(gv) (GvGP(gv)->gp_sv) #ifdef PERL_DONT_CREATE_GVSV #define GvSVn(gv) (*(GvGP(gv)->gp_sv ? \ - &(GvGP(gv)->gp_sv) : \ - &(GvGP(gv_SVadd(gv))->gp_sv))) + &(GvGP(gv)->gp_sv) : \ + &(GvGP(gv_SVadd(gv))->gp_sv))) #else #define GvSVn(gv) GvSV(gv) #endif @@ -121,13 +126,13 @@ Return the CV from the GV. #define GvAV(gv) (GvGP(gv)->gp_av) #define GvAVn(gv) (GvGP(gv)->gp_av ? \ - GvGP(gv)->gp_av : \ - GvGP(gv_AVadd(gv))->gp_av) + GvGP(gv)->gp_av : \ + GvGP(gv_AVadd(gv))->gp_av) #define GvHV(gv) ((GvGP(gv))->gp_hv) #define GvHVn(gv) (GvGP(gv)->gp_hv ? \ - GvGP(gv)->gp_hv : \ - GvGP(gv_HVadd(gv))->gp_hv) + GvGP(gv)->gp_hv : \ + GvGP(gv_HVadd(gv))->gp_hv) #define GvCV(gv) (0+GvGP(gv)->gp_cv) #define GvCV_set(gv,cv) (GvGP(gv)->gp_cv = (cv)) @@ -216,37 +221,38 @@ Return the CV from the GV. * symbol creation flags, for use in gv_fetchpv() and get_*v() */ #define GV_ADD 0x01 /* add, if symbol not already there - For gv_name_set, adding a HEK for the first - time, so don't try to free what's there. */ + For gv_name_set, adding a HEK for the first + time, so don't try to free what's there. */ #define GV_ADDMULTI 0x02 /* add, pretending it has been added - already; used also by gv_init_* */ + already; used also by gv_init_* */ #define GV_ADDWARN 0x04 /* add, but warn if symbol wasn't already there */ - /* 0x08 UNUSED */ + /* 0x08 UNUSED */ #define GV_NOINIT 0x10 /* add, but don't init symbol, if type != PVGV */ /* This is used by toke.c to avoid turing placeholder constants in the symbol table into full PVGVs with attached constant subroutines. */ #define GV_NOADD_NOINIT 0x20 /* Don't add the symbol if it's not there. - Don't init it if it is there but ! PVGV */ + Don't init it if it is there but ! PVGV */ #define GV_NOEXPAND 0x40 /* Don't expand SvOK() entries to PVGV */ #define GV_NOTQUAL 0x80 /* A plain symbol name, not qualified with a - package (so skip checks for :: and ') */ + package (so skip checks for :: and ') */ #define GV_AUTOLOAD 0x100 /* gv_fetchmethod_flags() should AUTOLOAD */ #define GV_CROAK 0x200 /* gv_fetchmethod_flags() should croak */ #define GV_ADDMG 0x400 /* add if magical */ #define GV_NO_SVGMAGIC 0x800 /* Skip get-magic on an SV argument; - used only by gv_fetchsv(_nomg) */ + used only by gv_fetchsv(_nomg) */ #define GV_CACHE_ONLY 0x1000 /* return stash only if found in cache; - used only in flags parameter to gv_stash* family */ + used only in flags parameter to gv_stash* family */ /* Flags for gv_fetchmeth_pvn and gv_autoload_pvn*/ #define GV_SUPER 0x1000 /* SUPER::method */ +#define GV_NOUNIVERSAL 0x2000 /* Skip UNIVERSAL lookup */ /* Flags for gv_autoload_*/ #define GV_AUTOLOAD_ISMETHOD 1 /* autoloading a method? */ /* SVf_UTF8 (more accurately the return value from SvUTF8) is also valid - as a flag to various gv_* functions, so ensure it lies - outside this range. + as a flag to various gv_* functions, so ensure it lies + outside this range. */ #define GV_NOADD_MASK \ @@ -255,26 +261,47 @@ Return the CV from the GV. found (with the exception GV_ADDMG, which *might* cause the symbol to be added) */ +/* gv_fetchfile_flags() */ +#define GVF_NOADD 0x01 /* don't add the glob if it doesn't exist */ + #define gv_fullname3(sv,gv,prefix) gv_fullname4(sv,gv,prefix,TRUE) #define gv_efullname3(sv,gv,prefix) gv_efullname4(sv,gv,prefix,TRUE) #define gv_fetchmethod(stash, name) gv_fetchmethod_autoload(stash, name, TRUE) #define gv_fetchsv_nomg(n,f,t) gv_fetchsv(n,(f)|GV_NO_SVGMAGIC,t) #define gv_init(gv,stash,name,len,multi) \ - gv_init_pvn(gv,stash,name,len,GV_ADDMULTI*!!(multi)) + gv_init_pvn(gv,stash,name,len,GV_ADDMULTI*!!(multi)) #define gv_fetchmeth(stash,name,len,level) gv_fetchmeth_pvn(stash, name, len, level, 0) #define gv_fetchmeth_autoload(stash,name,len,level) gv_fetchmeth_pvn_autoload(stash, name, len, level, 0) #define gv_fetchmethod_flags(stash,name,flags) gv_fetchmethod_pv_flags(stash, name, flags) -#define gv_autoload4(stash, name, len, method) \ - gv_autoload_pvn(stash, name, len, !!(method)) + +/* +=for apidoc gv_autoload4 +Equivalent to C>. + +=cut +*/ +#define gv_autoload4(stash, name, len, autoload) \ + gv_autoload_pvn(stash, name, len, !!(autoload)) #define newGVgen(pack) newGVgen_flags(pack, 0) #define gv_method_changed(gv) \ ( \ - assert_(isGV_with_GP(gv)) \ - GvREFCNT(gv) > 1 \ - ? (void)++PL_sub_generation \ - : mro_method_changed_in(GvSTASH(gv)) \ + assert_(isGV_with_GP(gv)) \ + GvREFCNT(gv) > 1 \ + ? (void)++PL_sub_generation \ + : mro_method_changed_in(GvSTASH(gv)) \ ) +/* +=for apidoc gv_AVadd +=for apidoc_item gv_HVadd +=for apidoc_item gv_IOadd +=for apidoc_item gv_SVadd + +Make sure there is a slot of the given type (AV, HV, IO, SV) in the GV C. + +=cut +*/ + #define gv_AVadd(gv) gv_add_by_type((gv), SVt_PVAV) #define gv_HVadd(gv) gv_add_by_type((gv), SVt_PVHV) #define gv_IOadd(gv) gv_add_by_type((gv), SVt_PVIO) diff --git a/gnu/usr.bin/perl/handy.h b/gnu/usr.bin/perl/handy.h index fd0866828c4..32e4da5f781 100644 --- a/gnu/usr.bin/perl/handy.h +++ b/gnu/usr.bin/perl/handy.h @@ -18,15 +18,39 @@ # define Null(type) ((type)NULL) /* -=head1 Handy Values - +=for apidoc_section $string =for apidoc AmnU||Nullch Null character pointer. (No longer available when C is defined.) +=for apidoc_section $SV =for apidoc AmnU||Nullsv Null SV pointer. (No longer available when C is defined.) +=cut + +Below are signatures of functions from config.h which can't easily be gleaned +from it, and are very unlikely to change + +=for apidoc_section $signals +=for apidoc Am|int|Sigsetjmp|jmp_buf env|int savesigs +=for apidoc Am|void|Siglongjmp|jmp_buf env|int val + +=for apidoc_section $filesystem +=for apidoc Am|void *|FILE_ptr|FILE * f +=for apidoc Am|Size_t|FILE_cnt|FILE * f +=for apidoc Am|void *|FILE_base|FILE * f +=for apidoc Am|Size_t|FILE_bufsiz|FILE *f + +=for apidoc_section $string +=for apidoc Amu|token|CAT2|token x|token y +=for apidoc Amu|string|STRINGIFY|token x + +=for apidoc_section $numeric +=for apidoc Am|double|Drand01 +=for apidoc Am|void|seedDrand01|Rand_seed_t x +=for apidoc Am|char *|Gconvert|double x|Size_t n|bool t|char * b + =cut */ @@ -44,17 +68,33 @@ Null SV pointer. (No longer available when C is defined.) #define TRUE (1) #define FALSE (0) -/* The MUTABLE_*() macros cast pointers to the types shown, in such a way - * (compiler permitting) that casting away const-ness will give a warning; - * e.g.: - * - * const SV *sv = ...; - * AV *av1 = (AV*)sv; <== BAD: the const has been silently cast away - * AV *av2 = MUTABLE_AV(sv); <== GOOD: it may warn +/* +=for apidoc_section $SV +=for apidoc Am|void *|MUTABLE_PTR|void * p +=for apidoc_item |AV *|MUTABLE_AV|AV * p +=for apidoc_item |CV *|MUTABLE_CV|CV * p +=for apidoc_item |GV *|MUTABLE_GV|GV * p +=for apidoc_item |HV *|MUTABLE_HV|HV * p +=for apidoc_item |IO *|MUTABLE_IO|IO * p +=for apidoc_item |SV *|MUTABLE_SV|SV * p + +The C>() macros cast pointers to the types shown, in such a way +(compiler permitting) that casting away const-ness will give a warning; +e.g.: + + const SV *sv = ...; + AV *av1 = (AV*)sv; <== BAD: the const has been silently + cast away + AV *av2 = MUTABLE_AV(sv); <== GOOD: it may warn + +C is the base macro used to derive new casts. The other +already-built-in ones return pointers to what their names indicate. + +=cut */ -#if defined(__GNUC__) && !defined(PERL_GCC_BRACE_GROUPS_FORBIDDEN) -# define MUTABLE_PTR(p) ({ void *_p = (p); _p; }) +#if defined(PERL_USE_GCC_BRACE_GROUPS) +# define MUTABLE_PTR(p) ({ void *p_ = (p); p_; }) #else # define MUTABLE_PTR(p) ((void *) (p)) #endif @@ -66,49 +106,23 @@ Null SV pointer. (No longer available when C is defined.) #define MUTABLE_IO(p) ((IO *)MUTABLE_PTR(p)) #define MUTABLE_SV(p) ((SV *)MUTABLE_PTR(p)) -#if defined(I_STDBOOL) && !defined(PERL_BOOL_AS_CHAR) +#ifndef __cplusplus # include -# ifndef HAS_BOOL -# define HAS_BOOL 1 -# endif -#endif - -/* bool is built-in for g++-2.6.3 and later, which might be used - for extensions. <_G_config.h> defines _G_HAVE_BOOL, but we can't - be sure _G_config.h will be included before this file. _G_config.h - also defines _G_HAVE_BOOL for both gcc and g++, but only g++ - actually has bool. Hence, _G_HAVE_BOOL is pretty useless for us. - g++ can be identified by __GNUG__. - Andy Dougherty February 2000 -*/ -#ifdef __GNUG__ /* GNU g++ has bool built-in */ -# ifndef PERL_BOOL_AS_CHAR -# ifndef HAS_BOOL -# define HAS_BOOL 1 -# endif -# endif -#endif - -#ifndef HAS_BOOL -# ifdef bool -# undef bool -# endif -# define bool char -# define HAS_BOOL 1 #endif /* +=for apidoc_section $casting =for apidoc Am|bool|cBOOL|bool expr -Cast-to-bool. A simple S>> cast may not do the right thing: -if C is defined as C, for example, then the cast from C is -implementation-defined. - -C<(bool)!!(cbool)> in a ternary triggers a bug in xlc on AIX +Cast-to-bool. When Perl was able to be compiled on pre-C99 compilers, a +C<(bool)> cast didn't necessarily do the right thing, so this macro was +created (and made somewhat complicated to work around bugs in old +compilers). Now, many years later, and C99 is used, this is no longer +required, but is kept for backwards compatibility. =cut */ -#define cBOOL(cbool) ((cbool) ? (bool)1 : (bool)0) +#define cBOOL(cbool) ((bool) (cbool)) /* Try to figure out __func__ or __FUNCTION__ equivalent, if any. * XXX Should really be a Configure probe, with HAS__FUNCTION__ @@ -142,13 +156,13 @@ C<(bool)!!(cbool)> in a ternary triggers a bug in xlc on AIX For dealing with issues that may arise from various 32/64-bit systems, we will ask Configure to check out - SHORTSIZE == sizeof(short) - INTSIZE == sizeof(int) - LONGSIZE == sizeof(long) - LONGLONGSIZE == sizeof(long long) (if HAS_LONG_LONG) - PTRSIZE == sizeof(void *) - DOUBLESIZE == sizeof(double) - LONG_DOUBLESIZE == sizeof(long double) (if HAS_LONG_DOUBLE). + SHORTSIZE == sizeof(short) + INTSIZE == sizeof(int) + LONGSIZE == sizeof(long) + LONGLONGSIZE == sizeof(long long) (if HAS_LONG_LONG) + PTRSIZE == sizeof(void *) + DOUBLESIZE == sizeof(double) + LONG_DOUBLESIZE == sizeof(long double) (if HAS_LONG_DOUBLE). */ @@ -176,60 +190,86 @@ typedef I64TYPE I64; typedef U64TYPE U64; #endif -#if defined(UINT8_MAX) && defined(INT16_MAX) && defined(INT32_MAX) - /* I8_MAX and I8_MIN constants are not defined, as I8 is an ambiguous type. Please search CHAR_MAX in perl.h for further details. */ -#define U8_MAX UINT8_MAX -#define U8_MIN UINT8_MIN - -#define I16_MAX INT16_MAX -#define I16_MIN INT16_MIN -#define U16_MAX UINT16_MAX -#define U16_MIN UINT16_MIN - -#define I32_MAX INT32_MAX -#define I32_MIN INT32_MIN -#ifndef UINT32_MAX_BROKEN /* e.g. HP-UX with gcc messes this up */ -# define U32_MAX UINT32_MAX +#ifdef UINT8_MAX +# define U8_MAX UINT8_MAX #else -# define U32_MAX 4294967295U +# define U8_MAX PERL_UCHAR_MAX #endif -#define U32_MIN UINT32_MIN - +#ifdef UINT8_MIN +# define U8_MIN UINT8_MIN #else +# define U8_MIN PERL_UCHAR_MIN +#endif -/* I8_MAX and I8_MIN constants are not defined, as I8 is an ambiguous type. - Please search CHAR_MAX in perl.h for further details. */ -#define U8_MAX PERL_UCHAR_MAX -#define U8_MIN PERL_UCHAR_MIN - -#define I16_MAX PERL_SHORT_MAX -#define I16_MIN PERL_SHORT_MIN -#define U16_MAX PERL_USHORT_MAX -#define U16_MIN PERL_USHORT_MIN - -#if LONGSIZE > 4 -# define I32_MAX PERL_INT_MAX -# define I32_MIN PERL_INT_MIN -# define U32_MAX PERL_UINT_MAX -# define U32_MIN PERL_UINT_MIN +#ifdef INT16_MAX +# define I16_MAX INT16_MAX +#else +# define I16_MAX PERL_SHORT_MAX +#endif +#ifdef INT16_MIN +# define I16_MIN INT16_MIN #else -# define I32_MAX PERL_LONG_MAX -# define I32_MIN PERL_LONG_MIN -# define U32_MAX PERL_ULONG_MAX -# define U32_MIN PERL_ULONG_MIN +# define I16_MIN PERL_SHORT_MIN +#endif +#ifdef UINT16_MAX +# define U16_MAX UINT16_MAX +#else +# define U16_MAX PERL_USHORT_MAX +#endif +#ifdef UINT16_MIN +# define U16_MIN UINT16_MIN +#else +# define U16_MIN PERL_USHORT_MIN #endif +#ifdef INT32_MAX +# define I32_MAX INT32_MAX +#elif LONGSIZE > 4 +# define I32_MAX PERL_INT_MAX +#else +# define I32_MAX PERL_LONG_MAX +#endif +#ifdef INT32_MIN +# define I32_MIN INT32_MIN +#elif LONGSIZE > 4 +# define I32_MIN PERL_INT_MIN +#else +# define I32_MIN PERL_LONG_MIN +#endif +#ifdef UINT32_MAX +# ifndef UINT32_MAX_BROKEN /* e.g. HP-UX with gcc messes this up */ +# define U32_MAX UINT_MAX +# else +# define U32_MAX 4294967295U +# endif +#elif LONGSIZE > 4 +# define U32_MAX PERL_UINT_MAX +#else +# define U32_MAX PERL_ULONG_MAX +#endif +#ifdef UINT32_MIN +# define U32_MIN UINT32_MIN +#elif LONGSIZE > 4 +# define U32_MIN PERL_UINT_MIN +#else +# define U32_MIN PERL_ULONG_MIN #endif -/* These C99 typedefs are useful sometimes for, say, loop variables whose - * maximum values are small, but for which speed trumps size. If we have a C99 - * compiler, use that. Otherwise, a plain 'int' should be good enough. - * - * Restrict these to core for now until we are more certain this is a good - * idea. */ -#if defined(PERL_CORE) || defined(PERL_EXT) +/* +=for apidoc_section $integer +=for apidoc Ay|| PERL_INT_FAST8_T +=for apidoc_item PERL_INT_FAST16_T +=for apidoc_item PERL_UINT_FAST8_T +=for apidoc_item PERL_UINT_FAST16_T + +These are equivalent to the correspondingly-named C99 typedefs on platforms +that have those; they evaluate to C and C on platforms that +don't, so that you can portably take advantage of this C99 feature. + +=cut +*/ # ifdef I_STDINT typedef int_fast8_t PERL_INT_FAST8_T; typedef uint_fast8_t PERL_UINT_FAST8_T; @@ -241,10 +281,12 @@ typedef U64TYPE U64; typedef int PERL_INT_FAST16_T; typedef unsigned int PERL_UINT_FAST16_T; # endif -#endif /* log(2) (i.e., log base 10 of 2) is pretty close to 0.30103, just in case - * anyone is grepping for it */ + * anyone is grepping for it. So BIT_DIGITS gives the number of decimal digits + * required to represent any possible unsigned number containing N bits. + * TYPE_DIGITS gives the number of decimal digits required to represent any + * possible unsigned number of type T. */ #define BIT_DIGITS(N) (((N)*146)/485 + 1) /* log10(2) =~ 146/485 */ #define TYPE_DIGITS(T) BIT_DIGITS(sizeof(T) * 8) #define TYPE_CHARS(T) (TYPE_DIGITS(T) + 2) /* sign, NUL */ @@ -269,8 +311,15 @@ typedef U64TYPE U64; # define isPOWER_OF_2(n) ((n) && ((n) & ((n)-1)) == 0) #endif +/* Returns a mask with the lowest n bits set */ +#define nBIT_MASK(n) ((UINTMAX_C(1) << (n)) - 1) + +/* The largest unsigned number that will fit into n bits */ +#define nBIT_UMAX(n) nBIT_MASK(n) + /* -=for apidoc Am|void|__ASSERT_|bool expr +=for apidoc_section $directives +=for apidoc Am||__ASSERT_|bool expr This is a helper macro to avoid preprocessor issues, replaced by nothing unless under DEBUGGING, where it expands to an assert of its argument, @@ -279,7 +328,7 @@ assert(), we would get a comma with nothing before it when not DEBUGGING. =cut -We also use empty definition under Coverity since the __ASSERT__ +We also use empty definition under Coverity since the __ASSERT_ checks often check for things that Really Cannot Happen, and Coverity detects that and gets all excited. */ @@ -291,7 +340,7 @@ detects that and gets all excited. */ #endif /* -=head1 SV Manipulation Functions +=for apidoc_section $SV =for apidoc Ama|SV*|newSVpvs|"literal string" Like C, but takes a literal string instead of a @@ -321,19 +370,11 @@ string/length pair. Like C, but takes a literal string instead of a string/length pair. -=for apidoc Am|void|sv_setpvs|SV* sv|"literal string" -Like C, but takes a literal string instead of a -string/length pair. - -=for apidoc Am|void|sv_setpvs_mg|SV* sv|"literal string" -Like C, but takes a literal string instead of a -string/length pair. - =for apidoc Am|SV *|sv_setref_pvs|SV *const rv|const char *const classname|"literal string" Like C, but takes a literal string instead of a string/length pair. -=head1 Memory Management +=for apidoc_section $string =for apidoc Ama|char*|savepvs|"literal string" Like C, but takes a literal string instead of a @@ -343,13 +384,13 @@ string/length pair. A version of C which allocates the duplicate string in memory which is shared between threads. -=head1 GV Functions +=for apidoc_section $GV =for apidoc Am|HV*|gv_stashpvs|"name"|I32 create Like C, but takes a literal string instead of a string/length pair. -=head1 Hash Manipulation Functions +=for apidoc_section $HV =for apidoc Am|SV**|hv_fetchs|HV* tb|"key"|I32 lval Like C, but takes a literal string instead of a @@ -360,7 +401,7 @@ Like C, but takes a literal string instead of a string/length pair and omits the hash parameter. -=head1 Lexer interface +=for apidoc_section $lexer =for apidoc Amx|void|lex_stuff_pvs|"pv"|U32 flags @@ -370,8 +411,10 @@ a string/length pair. =cut */ +#define ASSERT_IS_LITERAL(s) ("" s "") + /* -=head1 Handy Values +=for apidoc_section $string =for apidoc Amu|pair|STR_WITH_LEN|"literal string" @@ -384,8 +427,7 @@ Perl_xxx(aTHX_ ...) form for any API calls where it's used. =cut */ - -#define STR_WITH_LEN(s) ("" s ""), (sizeof(s)-1) +#define STR_WITH_LEN(s) ASSERT_IS_LITERAL(s), (sizeof(s)-1) /* STR_WITH_LEN() shortcuts */ #define newSVpvs(str) Perl_newSVpvn(aTHX_ STR_WITH_LEN(str)) @@ -408,10 +450,10 @@ Perl_xxx(aTHX_ ...) form for any API calls where it's used. #define savesharedpvs(str) Perl_savesharedpvn(aTHX_ STR_WITH_LEN(str)) #define gv_stashpvs(str, create) \ Perl_gv_stashpvn(aTHX_ STR_WITH_LEN(str), create) -#define gv_fetchpvs(namebeg, add, sv_type) \ - Perl_gv_fetchpvn_flags(aTHX_ STR_WITH_LEN(namebeg), add, sv_type) -#define gv_fetchpvn(namebeg, len, add, sv_type) \ - Perl_gv_fetchpvn_flags(aTHX_ namebeg, len, add, sv_type) + +#define gv_fetchpvs(namebeg, flags, sv_type) \ + Perl_gv_fetchpvn_flags(aTHX_ STR_WITH_LEN(namebeg), flags, sv_type) +#define gv_fetchpvn gv_fetchpvn_flags #define sv_catxmlpvs(dsv, str, utf8) \ Perl_sv_catxmlpvn(aTHX_ dsv, STR_WITH_LEN(str), utf8) @@ -419,10 +461,105 @@ Perl_xxx(aTHX_ ...) form for any API calls where it's used. #define lex_stuff_pvs(pv,flags) Perl_lex_stuff_pvn(aTHX_ STR_WITH_LEN(pv), flags) #define get_cvs(str, flags) \ - Perl_get_cvn_flags(aTHX_ STR_WITH_LEN(str), (flags)) + Perl_get_cvn_flags(aTHX_ STR_WITH_LEN(str), (flags)) + +/* internal helpers */ +/* Transitional */ +#ifndef PERL_VERSION_MAJOR +# define PERL_VERSION_MAJOR PERL_REVISION +#else +# undef PERL_REVISION /* We don't want code to be using these */ +#endif +#ifndef PERL_VERSION_MINOR +# define PERL_VERSION_MINOR PERL_VERSION +#else +# undef PERL_VERSION +#endif +#ifndef PERL_VERSION_PATCH +# define PERL_VERSION_PATCH PERL_SUBVERSION +#else +# undef PERL_SUBVERSION +#endif + +#define PERL_JNP_TO_DECIMAL_(maJor,miNor,Patch) \ + /* '10*' leaves room for things like alpha, beta, releases */ \ + (10 * ((maJor) * 1000000) + ((miNor) * 1000) + (Patch)) +#define PERL_DECIMAL_VERSION_ \ + PERL_JNP_TO_DECIMAL_(PERL_VERSION_MAJOR, PERL_VERSION_MINOR, \ + PERL_VERSION_PATCH) /* -=head1 Miscellaneous Functions +=for apidoc_section $versioning +=for apidoc AmR|bool|PERL_VERSION_EQ|const U8 major|const U8 minor|const U8 patch +=for apidoc_item PERL_VERSION_NE +=for apidoc_item PERL_VERSION_LT +=for apidoc_item PERL_VERSION_LE +=for apidoc_item PERL_VERSION_GT +=for apidoc_item PERL_VERSION_GE + +Returns whether or not the perl currently being compiled has the specified +relationship to the perl given by the parameters. For example, + + #if PERL_VERSION_GT(5,24,2) + code that will only be compiled on perls after v5.24.2 + #else + fallback code + #endif + +Note that this is usable in making compile-time decisions + +You may use the special value '*' for the final number to mean ALL possible +values for it. Thus, + + #if PERL_VERSION_EQ(5,31,'*') + +means all perls in the 5.31 series. And + + #if PERL_VERSION_NE(5,24,'*') + +means all perls EXCEPT 5.24 ones. And + + #if PERL_VERSION_LE(5,9,'*') + +is effectively + + #if PERL_VERSION_LT(5,10,0) + +This means you don't have to think so much when converting from the existing +deprecated C to using this macro: + + #if PERL_VERSION <= 9 + +becomes + + #if PERL_VERSION_LE(5,9,'*') + +=cut +*/ + +/* N.B. These don't work if the patch version is 42 or 92, as those are what + * '*' is in ASCII and EBCDIC respectively */ +# define PERL_VERSION_EQ(j,n,p) \ + (((p) == '*') \ + ? ( (j) == PERL_VERSION_MAJOR \ + && (n) == PERL_VERSION_MINOR) \ + : (PERL_DECIMAL_VERSION_ == PERL_JNP_TO_DECIMAL_(j,n,p))) +# define PERL_VERSION_NE(j,n,p) (! PERL_VERSION_EQ(j,n,p)) + +# define PERL_VERSION_LT(j,n,p) /* < '*' effectively means < 0 */ \ + (PERL_DECIMAL_VERSION_ < PERL_JNP_TO_DECIMAL_( (j), \ + (n), \ + (((p) == '*') ? 0 : p))) +# define PERL_VERSION_GE(j,n,p) (! PERL_VERSION_LT(j,n,p)) + +# define PERL_VERSION_LE(j,n,p) /* <= '*' effectively means < n+1 */ \ + (PERL_DECIMAL_VERSION_ < PERL_JNP_TO_DECIMAL_( (j), \ + (((p) == '*') ? ((n)+1) : (n)), \ + (((p) == '*') ? 0 : p))) +# define PERL_VERSION_GT(j,n,p) (! PERL_VERSION_LE(j,n,p)) + +/* +=for apidoc_section $string =for apidoc Am|bool|strNE|char* s1|char* s2 Test two C-terminated strings to see if they are different. Returns true @@ -461,22 +598,24 @@ wrapper for C). =for apidoc Am|bool|memEQ|char* s1|char* s2|STRLEN len Test two buffers (which may contain embedded C characters, to see if they are equal. The C parameter indicates the number of bytes to compare. -Returns zero if equal, or non-zero if non-equal. +Returns true or false. It is undefined behavior if either of the buffers +doesn't contain at least C bytes. =for apidoc Am|bool|memEQs|char* s1|STRLEN l1|"s2" Like L, but the second string is a literal enclosed in double quotes, C gives the number of bytes in C. -Returns zero if equal, or non-zero if non-equal. +Returns true or false. =for apidoc Am|bool|memNE|char* s1|char* s2|STRLEN len Test two buffers (which may contain embedded C characters, to see if they are not equal. The C parameter indicates the number of bytes to compare. -Returns zero if non-equal, or non-zero if equal. +Returns true or false. It is undefined behavior if either of the buffers +doesn't contain at least C bytes. =for apidoc Am|bool|memNEs|char* s1|STRLEN l1|"s2" Like L, but the second string is a literal enclosed in double quotes, C gives the number of bytes in C. -Returns zero if non-equal, or zero if non-equal. +Returns true or false. =for apidoc Am|bool|memCHRs|"list"|char c Returns the position of the first occurence of the byte C in the literal @@ -549,26 +688,26 @@ based on the underlying C library functions): /* memEQ and memNE where second comparand is a string constant */ #define memEQs(s1, l, s2) \ - (((sizeof(s2)-1) == (l)) && memEQ((s1), ("" s2 ""), (sizeof(s2)-1))) + (((sizeof(s2)-1) == (l)) && memEQ((s1), ASSERT_IS_LITERAL(s2), (sizeof(s2)-1))) #define memNEs(s1, l, s2) (! memEQs(s1, l, s2)) /* Keep these private until we decide it was a good idea */ #if defined(PERL_CORE) || defined(PERL_EXT) || defined(PERL_EXT_POSIX) -#define strBEGINs(s1,s2) (strncmp(s1,"" s2 "", sizeof(s2)-1) == 0) +#define strBEGINs(s1,s2) (strncmp(s1,ASSERT_IS_LITERAL(s2), sizeof(s2)-1) == 0) #define memBEGINs(s1, l, s2) \ ( (Ptrdiff_t) (l) >= (Ptrdiff_t) sizeof(s2) - 1 \ - && memEQ(s1, "" s2 "", sizeof(s2)-1)) + && memEQ(s1, ASSERT_IS_LITERAL(s2), sizeof(s2)-1)) #define memBEGINPs(s1, l, s2) \ ( (Ptrdiff_t) (l) > (Ptrdiff_t) sizeof(s2) - 1 \ - && memEQ(s1, "" s2 "", sizeof(s2)-1)) + && memEQ(s1, ASSERT_IS_LITERAL(s2), sizeof(s2)-1)) #define memENDs(s1, l, s2) \ ( (Ptrdiff_t) (l) >= (Ptrdiff_t) sizeof(s2) - 1 \ - && memEQ(s1 + (l) - (sizeof(s2) - 1), "" s2 "", sizeof(s2)-1)) + && memEQ(s1 + (l) - (sizeof(s2) - 1), ASSERT_IS_LITERAL(s2), sizeof(s2)-1)) #define memENDPs(s1, l, s2) \ ( (Ptrdiff_t) (l) > (Ptrdiff_t) sizeof(s2) \ - && memEQ(s1 + (l) - (sizeof(s2) - 1), "" s2 "", sizeof(s2)-1)) + && memEQ(s1 + (l) - (sizeof(s2) - 1), ASSERT_IS_LITERAL(s2), sizeof(s2)-1)) #endif /* End of making macros private */ #define memLT(s1,s2,l) (memcmp(s1,s2,l) < 0) @@ -576,7 +715,7 @@ based on the underlying C library functions): #define memGT(s1,s2,l) (memcmp(s1,s2,l) > 0) #define memGE(s1,s2,l) (memcmp(s1,s2,l) >= 0) -#define memCHRs(s1,c) ((const char *) memchr("" s1 "" , c, sizeof(s1)-1)) +#define memCHRs(s1,c) ((const char *) memchr(ASSERT_IS_LITERAL(s1) , c, sizeof(s1)-1)) /* * Character classes. @@ -591,7 +730,7 @@ based on the underlying C library functions): * the current locale will use the tests that begin with "lc". */ -#ifdef HAS_SETLOCALE /* XXX Is there a better test for this? */ +#ifdef USE_LOCALE # ifndef CTYPE256 # define CTYPE256 # endif @@ -673,38 +812,43 @@ character is malformed in some way, the program may croak, or the function may return FALSE, at the discretion of the implementation, and subject to change in future releases. -=for apidoc Am|bool|isALPHA|int ch +=for apidoc Am|bool|isALPHA|UV ch +=for apidoc_item ||isALPHA_A|UV ch +=for apidoc_item ||isALPHA_L1|UV ch +=for apidoc_item ||isALPHA_uvchr|UV ch +=for apidoc_item ||isALPHA_utf8_safe|U8 * s|U8 * end +=for apidoc_item ||isALPHA_utf8|U8 * s|U8 * end +=for apidoc_item ||isALPHA_LC|UV ch +=for apidoc_item ||isALPHA_LC_uvchr|UV ch +=for apidoc_item ||isALPHA_LC_utf8_safe|U8 * s| U8 *end Returns a boolean indicating whether the specified input is one of C<[A-Za-z]>, analogous to C. See the L for an explanation of -variants -C, C, C, C, -C, C, C, C, -and C. +the variants. =cut -Here and below, we add the protoypes of these macros for downstream programs +Here and below, we add the prototypes of these macros for downstream programs that would be interested in them, such as Devel::PPPort -=for apidoc Amh|bool|isALPHA_A|int ch -=for apidoc Amh|bool|isALPHA_L1|int ch -=for apidoc Amh|bool|isALPHA_uvchr|int ch -=for apidoc Amh|bool|isALPHA_utf8_safe|U8 * s|U8 * end -=for apidoc Amh|bool|isALPHA_utf8|U8 * s|U8 * end -=for apidoc Amh|bool|isALPHA_LC|int ch -=for apidoc Amh|bool|isALPHA_LC_uvchr|int ch -=for apidoc Amh|bool|isALPHA_LC_utf8_safe|U8 * s| U8 *end - -=for apidoc Am|bool|isALPHANUMERIC|int ch +=for apidoc Am|bool|isALPHANUMERIC|UV ch +=for apidoc_item ||isALPHANUMERIC_A|UV ch +=for apidoc_item ||isALPHANUMERIC_L1|UV ch +=for apidoc_item ||isALPHANUMERIC_uvchr|UV ch +=for apidoc_item ||isALPHANUMERIC_utf8_safe|U8 * s|U8 * end +=for apidoc_item ||isALPHANUMERIC_utf8|U8 * s|U8 * end +=for apidoc_item ||isALPHANUMERIC_LC|UV ch +=for apidoc_item ||isALPHANUMERIC_LC_uvchr|UV ch +=for apidoc_item ||isALPHANUMERIC_LC_utf8_safe|U8 * s| U8 *end +=for apidoc_item ||isALNUMC|UV ch +=for apidoc_item ||isALNUMC_A|UV ch +=for apidoc_item ||isALNUMC_L1|UV ch +=for apidoc_item ||isALNUMC_LC|UV ch +=for apidoc_item ||isALNUMC_LC_uvchr|UV ch Returns a boolean indicating whether the specified character is one of C<[A-Za-z0-9]>, analogous to C. See the L for an explanation of -variants -C, C, C, -C, C, C, -C, C, and -C. +the variants. A (discouraged from use) synonym is C (where the C suffix means this corresponds to the C language alphanumeric definition). Also @@ -712,172 +856,144 @@ there are the variants C, C C, and C. -=for apidoc Amh|bool|isALPHANUMERIC_A|int ch -=for apidoc Amh|bool|isALPHANUMERIC_L1|int ch -=for apidoc Amh|bool|isALPHANUMERIC_uvchr|int ch -=for apidoc Amh|bool|isALPHANUMERIC_utf8_safe|U8 * s|U8 * end -=for apidoc Amh|bool|isALPHANUMERIC_utf8|U8 * s|U8 * end -=for apidoc Amh|bool|isALPHANUMERIC_LC|int ch -=for apidoc Amh|bool|isALPHANUMERIC_LC_uvchr|int ch -=for apidoc Amh|bool|isALPHANUMERIC_LC_utf8_safe|U8 * s| U8 *end -=for apidoc Amh|bool|isALNUMC|int ch -=for apidoc Amh|bool|isALNUMC_A|int ch -=for apidoc Amh|bool|isALNUMC_L1|int ch -=for apidoc Amh|bool|isALNUMC_LC|int ch -=for apidoc Amh|bool|isALNUMC_LC_uvchr|int ch - -=for apidoc Am|bool|isASCII|int ch +=for apidoc Am|bool|isASCII|UV ch +=for apidoc_item ||isASCII_A|UV ch +=for apidoc_item ||isASCII_L1|UV ch +=for apidoc_item ||isASCII_uvchr|UV ch +=for apidoc_item ||isASCII_utf8_safe|U8 * s|U8 * end +=for apidoc_item ||isASCII_utf8|U8 * s|U8 * end +=for apidoc_item ||isASCII_LC|UV ch +=for apidoc_item ||isASCII_LC_uvchr|UV ch +=for apidoc_item ||isASCII_LC_utf8_safe|U8 * s| U8 *end Returns a boolean indicating whether the specified character is one of the 128 characters in the ASCII character set, analogous to C. On non-ASCII platforms, it returns TRUE iff this character corresponds to an ASCII character. Variants C and C are identical to C. See the L for an explanation of -variants -C, C, C, C, -C, C, and C. +the variants. Note, however, that some platforms do not have the C library routine C. In these cases, the variants whose names contain C are the same as the corresponding ones without. -=for apidoc Amh|bool|isASCII_A|int ch -=for apidoc Amh|bool|isASCII_L1|int ch -=for apidoc Amh|bool|isASCII_uvchr|int ch -=for apidoc Amh|bool|isASCII_utf8_safe|U8 * s|U8 * end -=for apidoc Amh|bool|isASCII_utf8|U8 * s|U8 * end -=for apidoc Amh|bool|isASCII_LC|int ch -=for apidoc Amh|bool|isASCII_LC_uvchr|int ch -=for apidoc Amh|bool|isASCII_LC_utf8_safe|U8 * s| U8 *end - Also note, that because all ASCII characters are UTF-8 invariant (meaning they have the exact same representation (always a single byte) whether encoded in UTF-8 or not), C will give the correct results when called with any byte in any string encoded or not in UTF-8. And similarly C and C will work properly on any string encoded or not in UTF-8. -=for apidoc Am|bool|isBLANK|char ch +=for apidoc Am|bool|isBLANK|UV ch +=for apidoc_item ||isBLANK_A|UV ch +=for apidoc_item ||isBLANK_L1|UV ch +=for apidoc_item ||isBLANK_uvchr|UV ch +=for apidoc_item ||isBLANK_utf8_safe|U8 * s|U8 * end +=for apidoc_item ||isBLANK_utf8|U8 * s|U8 * end +=for apidoc_item ||isBLANK_LC|UV ch +=for apidoc_item ||isBLANK_LC_uvchr|UV ch +=for apidoc_item ||isBLANK_LC_utf8_safe|U8 * s| U8 *end Returns a boolean indicating whether the specified character is a character considered to be a blank, analogous to C. See the L for an explanation of -variants -C, C, C, C, -C, C, C, C, -and C. Note, +the variants. +Note, however, that some platforms do not have the C library routine C. In these cases, the variants whose names contain C are the same as the corresponding ones without. -=for apidoc Amh|bool|isBLANK_A|int ch -=for apidoc Amh|bool|isBLANK_L1|int ch -=for apidoc Amh|bool|isBLANK_uvchr|int ch -=for apidoc Amh|bool|isBLANK_utf8_safe|U8 * s|U8 * end -=for apidoc Amh|bool|isBLANK_utf8|U8 * s|U8 * end -=for apidoc Amh|bool|isBLANK_LC|int ch -=for apidoc Amh|bool|isBLANK_LC_uvchr|int ch -=for apidoc Amh|bool|isBLANK_LC_utf8_safe|U8 * s| U8 *end +=for apidoc Am|bool|isCNTRL|UV ch +=for apidoc_item ||isCNTRL_A|UV ch +=for apidoc_item ||isCNTRL_L1|UV ch +=for apidoc_item ||isCNTRL_uvchr|UV ch +=for apidoc_item ||isCNTRL_utf8_safe|U8 * s|U8 * end +=for apidoc_item ||isCNTRL_utf8|U8 * s|U8 * end +=for apidoc_item ||isCNTRL_LC|UV ch +=for apidoc_item ||isCNTRL_LC_uvchr|UV ch +=for apidoc_item ||isCNTRL_LC_utf8_safe|U8 * s| U8 *end -=for apidoc Am|bool|isCNTRL|char ch Returns a boolean indicating whether the specified character is a control character, analogous to C. See the L for an explanation of -variants -C, C, C, C, -C, C, C, C -and C. On EBCDIC -platforms, you almost always want to use the C variant. - -=for apidoc Amh|bool|isCNTRL_A|int ch -=for apidoc Amh|bool|isCNTRL_L1|int ch -=for apidoc Amh|bool|isCNTRL_uvchr|int ch -=for apidoc Amh|bool|isCNTRL_utf8_safe|U8 * s|U8 * end -=for apidoc Amh|bool|isCNTRL_utf8|U8 * s|U8 * end -=for apidoc Amh|bool|isCNTRL_LC|int ch -=for apidoc Amh|bool|isCNTRL_LC_uvchr|int ch -=for apidoc Amh|bool|isCNTRL_LC_utf8_safe|U8 * s| U8 *end - -=for apidoc Am|bool|isDIGIT|char ch +the variants. +On EBCDIC platforms, you almost always want to use the C variant. + +=for apidoc Am|bool|isDIGIT|UV ch +=for apidoc_item ||isDIGIT_A|UV ch +=for apidoc_item ||isDIGIT_L1|UV ch +=for apidoc_item ||isDIGIT_uvchr|UV ch +=for apidoc_item ||isDIGIT_utf8_safe|U8 * s|U8 * end +=for apidoc_item ||isDIGIT_utf8|U8 * s|U8 * end +=for apidoc_item ||isDIGIT_LC|UV ch +=for apidoc_item ||isDIGIT_LC_uvchr|UV ch +=for apidoc_item ||isDIGIT_LC_utf8_safe|U8 * s| U8 *end + Returns a boolean indicating whether the specified character is a digit, analogous to C. Variants C and C are identical to C. See the L for an explanation of -variants -C, C, C, C, -C, C, and C. - -=for apidoc Amh|bool|isDIGIT_A|int ch -=for apidoc Amh|bool|isDIGIT_L1|int ch -=for apidoc Amh|bool|isDIGIT_uvchr|int ch -=for apidoc Amh|bool|isDIGIT_utf8_safe|U8 * s|U8 * end -=for apidoc Amh|bool|isDIGIT_utf8|U8 * s|U8 * end -=for apidoc Amh|bool|isDIGIT_LC|int ch -=for apidoc Amh|bool|isDIGIT_LC_uvchr|int ch -=for apidoc Amh|bool|isDIGIT_LC_utf8_safe|U8 * s| U8 *end - -=for apidoc Am|bool|isGRAPH|char ch +the variants. + +=for apidoc Am|bool|isGRAPH|UV ch +=for apidoc_item ||isGRAPH_A|UV ch +=for apidoc_item ||isGRAPH_L1|UV ch +=for apidoc_item ||isGRAPH_uvchr|UV ch +=for apidoc_item ||isGRAPH_utf8_safe|U8 * s|U8 * end +=for apidoc_item ||isGRAPH_utf8|U8 * s|U8 * end +=for apidoc_item ||isGRAPH_LC|UV ch +=for apidoc_item ||isGRAPH_LC_uvchr|UV ch +=for apidoc_item ||isGRAPH_LC_utf8_safe|U8 * s| U8 *end Returns a boolean indicating whether the specified character is a graphic character, analogous to C. See the L for an explanation of -variants C, C, C, C, -C, C, C, -C, and C. - -=for apidoc Amh|bool|isGRAPH_A|int ch -=for apidoc Amh|bool|isGRAPH_L1|int ch -=for apidoc Amh|bool|isGRAPH_uvchr|int ch -=for apidoc Amh|bool|isGRAPH_utf8_safe|U8 * s|U8 * end -=for apidoc Amh|bool|isGRAPH_utf8|U8 * s|U8 * end -=for apidoc Amh|bool|isGRAPH_LC|int ch -=for apidoc Amh|bool|isGRAPH_LC_uvchr|int ch -=for apidoc Amh|bool|isGRAPH_LC_utf8_safe|U8 * s| U8 *end - -=for apidoc Am|bool|isLOWER|char ch +the variants. + +=for apidoc Am|bool|isLOWER|UV ch +=for apidoc_item ||isLOWER_A|UV ch +=for apidoc_item ||isLOWER_L1|UV ch +=for apidoc_item ||isLOWER_uvchr|UV ch +=for apidoc_item ||isLOWER_utf8_safe|U8 * s|U8 * end +=for apidoc_item ||isLOWER_utf8|U8 * s|U8 * end +=for apidoc_item ||isLOWER_LC|UV ch +=for apidoc_item ||isLOWER_LC_uvchr|UV ch +=for apidoc_item ||isLOWER_LC_utf8_safe|U8 * s| U8 *end Returns a boolean indicating whether the specified character is a lowercase character, analogous to C. See the L for an explanation of -variants -C, C, C, C, -C, C, C, C, -and C. - -=for apidoc Amh|bool|isLOWER_A|int ch -=for apidoc Amh|bool|isLOWER_L1|int ch -=for apidoc Amh|bool|isLOWER_uvchr|int ch -=for apidoc Amh|bool|isLOWER_utf8_safe|U8 * s|U8 * end -=for apidoc Amh|bool|isLOWER_utf8|U8 * s|U8 * end -=for apidoc Amh|bool|isLOWER_LC|int ch -=for apidoc Amh|bool|isLOWER_LC_uvchr|int ch -=for apidoc Amh|bool|isLOWER_LC_utf8_safe|U8 * s| U8 *end - -=for apidoc Am|bool|isOCTAL|char ch +the variants + +=for apidoc Am|bool|isOCTAL|UV ch +=for apidoc_item ||isOCTAL_A|UV ch +=for apidoc_item ||isOCTAL_L1|UV ch Returns a boolean indicating whether the specified character is an octal digit, [0-7]. The only two variants are C and C; each is identical to C. -=for apidoc Amh|bool|isOCTAL_A|int ch -=for apidoc Amh|bool|isOCTAL_L1|int ch - -=for apidoc Am|bool|isPUNCT|char ch +=for apidoc Am|bool|isPUNCT|UV ch +=for apidoc_item ||isPUNCT_A|UV ch +=for apidoc_item ||isPUNCT_L1|UV ch +=for apidoc_item ||isPUNCT_uvchr|UV ch +=for apidoc_item ||isPUNCT_utf8_safe|U8 * s|U8 * end +=for apidoc_item ||isPUNCT_utf8|U8 * s|U8 * end +=for apidoc_item ||isPUNCT_LC|UV ch +=for apidoc_item ||isPUNCT_LC_uvchr|UV ch +=for apidoc_item ||isPUNCT_LC_utf8_safe|U8 * s| U8 *end Returns a boolean indicating whether the specified character is a punctuation character, analogous to C. Note that the definition of what is punctuation isn't as straightforward as one might desire. See L for details. See the L for an explanation of -variants C, C, C, C, -C, C, C, C, -and C. - -=for apidoc Amh|bool|isPUNCT_A|int ch -=for apidoc Amh|bool|isPUNCT_L1|int ch -=for apidoc Amh|bool|isPUNCT_uvchr|int ch -=for apidoc Amh|bool|isPUNCT_utf8_safe|U8 * s|U8 * end -=for apidoc Amh|bool|isPUNCT_utf8|U8 * s|U8 * end -=for apidoc Amh|bool|isPUNCT_LC|int ch -=for apidoc Amh|bool|isPUNCT_LC_uvchr|int ch -=for apidoc Amh|bool|isPUNCT_LC_utf8_safe|U8 * s| U8 *end - -=for apidoc Am|bool|isSPACE|char ch +the variants. + +=for apidoc Am|bool|isSPACE|UV ch +=for apidoc_item ||isSPACE_A|UV ch +=for apidoc_item ||isSPACE_L1|UV ch +=for apidoc_item ||isSPACE_uvchr|UV ch +=for apidoc_item ||isSPACE_utf8_safe|U8 * s|U8 * end +=for apidoc_item ||isSPACE_utf8|U8 * s|U8 * end +=for apidoc_item ||isSPACE_LC|UV ch +=for apidoc_item ||isSPACE_LC_uvchr|UV ch +=for apidoc_item ||isSPACE_LC_utf8_safe|U8 * s| U8 *end Returns a boolean indicating whether the specified character is a whitespace character. This is analogous to what C matches in a regular expression. Starting in Perl 5.18 @@ -887,21 +1003,17 @@ precisely what C does. In those releases, the only difference, in the non-locale variants, was that C did not match a vertical tab. (See L for a macro that matches a vertical tab in all releases.) See the L for an explanation of -variants -C, C, C, C, -C, C, C, C, -and C. - -=for apidoc Amh|bool|isSPACE_A|int ch -=for apidoc Amh|bool|isSPACE_L1|int ch -=for apidoc Amh|bool|isSPACE_uvchr|int ch -=for apidoc Amh|bool|isSPACE_utf8_safe|U8 * s|U8 * end -=for apidoc Amh|bool|isSPACE_utf8|U8 * s|U8 * end -=for apidoc Amh|bool|isSPACE_LC|int ch -=for apidoc Amh|bool|isSPACE_LC_uvchr|int ch -=for apidoc Amh|bool|isSPACE_LC_utf8_safe|U8 * s| U8 *end - -=for apidoc Am|bool|isPSXSPC|char ch +the variants. + +=for apidoc Am|bool|isPSXSPC|UV ch +=for apidoc_item ||isPSXSPC_A|UV ch +=for apidoc_item ||isPSXSPC_L1|UV ch +=for apidoc_item ||isPSXSPC_uvchr|UV ch +=for apidoc_item ||isPSXSPC_utf8_safe|U8 * s|U8 * end +=for apidoc_item ||isPSXSPC_utf8|U8 * s|U8 * end +=for apidoc_item ||isPSXSPC_LC|UV ch +=for apidoc_item ||isPSXSPC_LC_uvchr|UV ch +=for apidoc_item ||isPSXSPC_LC_utf8_safe|U8 * s| U8 *end (short for Posix Space) Starting in 5.18, this is identical in all its forms to the corresponding C macros. @@ -912,55 +1024,49 @@ C forms don't match a Vertical Tab, and the C forms do. Otherwise they are identical. Thus this macro is analogous to what C matches in a regular expression. See the L for an explanation of -variants C, C, C, C, -C, C, C, -C, and C. - -=for apidoc Amh|bool|isPSXSPC_A|int ch -=for apidoc Amh|bool|isPSXSPC_L1|int ch -=for apidoc Amh|bool|isPSXSPC_uvchr|int ch -=for apidoc Amh|bool|isPSXSPC_utf8_safe|U8 * s|U8 * end -=for apidoc Amh|bool|isPSXSPC_utf8|U8 * s|U8 * end -=for apidoc Amh|bool|isPSXSPC_LC|int ch -=for apidoc Amh|bool|isPSXSPC_LC_uvchr|int ch -=for apidoc Amh|bool|isPSXSPC_LC_utf8_safe|U8 * s| U8 *end - -=for apidoc Am|bool|isUPPER|char ch +the variants. + +=for apidoc Am|bool|isUPPER|UV ch +=for apidoc_item ||isUPPER_A|UV ch +=for apidoc_item ||isUPPER_L1|UV ch +=for apidoc_item ||isUPPER_uvchr|UV ch +=for apidoc_item ||isUPPER_utf8_safe|U8 * s|U8 * end +=for apidoc_item ||isUPPER_utf8|U8 * s|U8 * end +=for apidoc_item ||isUPPER_LC|UV ch +=for apidoc_item ||isUPPER_LC_uvchr|UV ch +=for apidoc_item ||isUPPER_LC_utf8_safe|U8 * s| U8 *end Returns a boolean indicating whether the specified character is an uppercase character, analogous to C. See the L for an explanation of -variants C, C, C, C, -C, C, C, C, -and C. - -=for apidoc Amh|bool|isUPPER_A|int ch -=for apidoc Amh|bool|isUPPER_L1|int ch -=for apidoc Amh|bool|isUPPER_uvchr|int ch -=for apidoc Amh|bool|isUPPER_utf8_safe|U8 * s|U8 * end -=for apidoc Amh|bool|isUPPER_utf8|U8 * s|U8 * end -=for apidoc Amh|bool|isUPPER_LC|int ch -=for apidoc Amh|bool|isUPPER_LC_uvchr|int ch -=for apidoc Amh|bool|isUPPER_LC_utf8_safe|U8 * s| U8 *end - -=for apidoc Am|bool|isPRINT|char ch +the variants. + +=for apidoc Am|bool|isPRINT|UV ch +=for apidoc_item ||isPRINT_A|UV ch +=for apidoc_item ||isPRINT_L1|UV ch +=for apidoc_item ||isPRINT_uvchr|UV ch +=for apidoc_item ||isPRINT_utf8_safe|U8 * s|U8 * end +=for apidoc_item ||isPRINT_utf8|U8 * s|U8 * end +=for apidoc_item ||isPRINT_LC|UV ch +=for apidoc_item ||isPRINT_LC_uvchr|UV ch +=for apidoc_item ||isPRINT_LC_utf8_safe|U8 * s| U8 *end Returns a boolean indicating whether the specified character is a printable character, analogous to C. See the L for an explanation of -variants -C, C, C, C, -C, C, C, C, -and C. - -=for apidoc Amh|bool|isPRINT_A|int ch -=for apidoc Amh|bool|isPRINT_L1|int ch -=for apidoc Amh|bool|isPRINT_uvchr|int ch -=for apidoc Amh|bool|isPRINT_utf8_safe|U8 * s|U8 * end -=for apidoc Amh|bool|isPRINT_utf8|U8 * s|U8 * end -=for apidoc Amh|bool|isPRINT_LC|int ch -=for apidoc Amh|bool|isPRINT_LC_uvchr|int ch -=for apidoc Amh|bool|isPRINT_LC_utf8_safe|U8 * s| U8 *end - -=for apidoc Am|bool|isWORDCHAR|char ch +the variants. + +=for apidoc Am|bool|isWORDCHAR|UV ch +=for apidoc_item ||isWORDCHAR_A|UV ch +=for apidoc_item ||isWORDCHAR_L1|UV ch +=for apidoc_item ||isWORDCHAR_uvchr|UV ch +=for apidoc_item ||isWORDCHAR_utf8_safe|U8 * s|U8 * end +=for apidoc_item ||isWORDCHAR_utf8|U8 * s|U8 * end +=for apidoc_item ||isWORDCHAR_LC|UV ch +=for apidoc_item ||isWORDCHAR_LC_uvchr|UV ch +=for apidoc_item ||isWORDCHAR_LC_utf8_safe|U8 * s| U8 *end +=for apidoc_item ||isALNUM|UV ch +=for apidoc_item ||isALNUM_A|UV ch +=for apidoc_item ||isALNUM_LC|UV ch +=for apidoc_item ||isALNUM_LC_uvchr|UV ch Returns a boolean indicating whether the specified character is a character that is a word character, analogous to what C and C match in a regular expression. A word character is an alphabetic character, a @@ -970,83 +1076,60 @@ C is a synonym provided for backward compatibility, even though a word character includes more than the standard C language meaning of alphanumeric. See the L for an explanation of -variants C, C, C, -C, and C. C, -C, C, and C -are also as described there, but additionally include the platform's native -underscore. - -=for apidoc Amh|bool|isWORDCHAR_A|int ch -=for apidoc Amh|bool|isWORDCHAR_L1|int ch -=for apidoc Amh|bool|isWORDCHAR_uvchr|int ch -=for apidoc Amh|bool|isWORDCHAR_utf8_safe|U8 * s|U8 * end -=for apidoc Amh|bool|isWORDCHAR_utf8|U8 * s|U8 * end -=for apidoc Amh|bool|isWORDCHAR_LC|int ch -=for apidoc Amh|bool|isWORDCHAR_LC_uvchr|int ch -=for apidoc Amh|bool|isWORDCHAR_LC_utf8_safe|U8 * s| U8 *end -=for apidoc Amh|bool|isALNUM|int ch -=for apidoc Amh|bool|isALNUM_A|int ch -=for apidoc Amh|bool|isALNUM_LC|int ch -=for apidoc Amh|bool|isALNUM_LC_uvchr|int ch - -=for apidoc Am|bool|isXDIGIT|char ch +the variants. +C, C, C, +C, C, C, and +C are also as described there, but additionally +include the platform's native underscore. + +=for apidoc Am|bool|isXDIGIT|UV ch +=for apidoc_item ||isXDIGIT_A|UV ch +=for apidoc_item ||isXDIGIT_L1|UV ch +=for apidoc_item ||isXDIGIT_uvchr|UV ch +=for apidoc_item ||isXDIGIT_utf8_safe|U8 * s|U8 * end +=for apidoc_item ||isXDIGIT_utf8|U8 * s|U8 * end +=for apidoc_item ||isXDIGIT_LC|UV ch +=for apidoc_item ||isXDIGIT_LC_uvchr|UV ch +=for apidoc_item ||isXDIGIT_LC_utf8_safe|U8 * s| U8 *end Returns a boolean indicating whether the specified character is a hexadecimal digit. In the ASCII range these are C<[0-9A-Fa-f]>. Variants C and C are identical to C. See the L for an explanation of -variants -C, C, C, C, -C, C, and C. - -=for apidoc Amh|bool|isXDIGIT_A|int ch -=for apidoc Amh|bool|isXDIGIT_L1|int ch -=for apidoc Amh|bool|isXDIGIT_uvchr|int ch -=for apidoc Amh|bool|isXDIGIT_utf8_safe|U8 * s|U8 * end -=for apidoc Amh|bool|isXDIGIT_utf8|U8 * s|U8 * end -=for apidoc Amh|bool|isXDIGIT_LC|int ch -=for apidoc Amh|bool|isXDIGIT_LC_uvchr|int ch -=for apidoc Amh|bool|isXDIGIT_LC_utf8_safe|U8 * s| U8 *end - -=for apidoc Am|bool|isIDFIRST|char ch +the variants. + +=for apidoc Am|bool|isIDFIRST|UV ch +=for apidoc_item ||isIDFIRST_A|UV ch +=for apidoc_item ||isIDFIRST_L1|UV ch +=for apidoc_item ||isIDFIRST_uvchr|UV ch +=for apidoc_item ||isIDFIRST_utf8_safe|U8 * s|U8 * end +=for apidoc_item ||isIDFIRST_utf8|U8 * s|U8 * end +=for apidoc_item ||isIDFIRST_LC|UV ch +=for apidoc_item ||isIDFIRST_LC_uvchr|UV ch +=for apidoc_item ||isIDFIRST_LC_utf8_safe|U8 * s| U8 *end Returns a boolean indicating whether the specified character can be the first character of an identifier. This is very close to, but not quite the same as the official Unicode property C. The difference is that this returns true only if the input character also matches L. See the L for an explanation of -variants -C, C, C, C, -C, C, C, -C, and C. - -=for apidoc Amh|bool|isIDFIRST_A|int ch -=for apidoc Amh|bool|isIDFIRST_L1|int ch -=for apidoc Amh|bool|isIDFIRST_uvchr|int ch -=for apidoc Amh|bool|isIDFIRST_utf8_safe|U8 * s|U8 * end -=for apidoc Amh|bool|isIDFIRST_utf8|U8 * s|U8 * end -=for apidoc Amh|bool|isIDFIRST_LC|int ch -=for apidoc Amh|bool|isIDFIRST_LC_uvchr|int ch -=for apidoc Amh|bool|isIDFIRST_LC_utf8_safe|U8 * s| U8 *end - -=for apidoc Am|bool|isIDCONT|char ch +the variants. + +=for apidoc Am|bool|isIDCONT|UV ch +=for apidoc_item ||isIDCONT_A|UV ch +=for apidoc_item ||isIDCONT_L1|UV ch +=for apidoc_item ||isIDCONT_uvchr|UV ch +=for apidoc_item ||isIDCONT_utf8_safe|U8 * s|U8 * end +=for apidoc_item ||isIDCONT_utf8|U8 * s|U8 * end +=for apidoc_item ||isIDCONT_LC|UV ch +=for apidoc_item ||isIDCONT_LC_uvchr|UV ch +=for apidoc_item ||isIDCONT_LC_utf8_safe|U8 * s| U8 *end Returns a boolean indicating whether the specified character can be the second or succeeding character of an identifier. This is very close to, but not quite the same as the official Unicode property C. The difference is that this returns true only if the input character also matches L. See the L for -an explanation of variants C, C, C, -C, C, C, C, -C, and C. +an explanation of the variants. -=for apidoc Amh|bool|isIDCONT_A|int ch -=for apidoc Amh|bool|isIDCONT_L1|int ch -=for apidoc Amh|bool|isIDCONT_uvchr|int ch -=for apidoc Amh|bool|isIDCONT_utf8_safe|U8 * s|U8 * end -=for apidoc Amh|bool|isIDCONT_utf8|U8 * s|U8 * end -=for apidoc Amh|bool|isIDCONT_LC|int ch -=for apidoc Amh|bool|isIDCONT_LC_uvchr|int ch -=for apidoc Amh|bool|isIDCONT_LC_utf8_safe|U8 * s| U8 *end - -=head1 Miscellaneous Functions +=for apidoc_section $numeric =for apidoc Am|U8|READ_XDIGIT|char str* Returns the value of an ASCII-range hex digit and advances the string pointer. @@ -1064,161 +1147,215 @@ an API that does allow every possible legal result to be returned.) Likewise no other function that is crippled by not being able to give the correct results for the full range of possible inputs has been implemented here. -=for apidoc Am|U8|toUPPER|int ch -Converts the specified character to uppercase. If the input is anything but an -ASCII lowercase character, that input character itself is returned. Variant -C is equivalent. - -=for apidoc Am|UV|toUPPER_uvchr|UV cp|U8* s|STRLEN* lenp -Converts the code point C to its uppercase version, and -stores that in UTF-8 in C, and its length in bytes in C. The code -point is interpreted as native if less than 256; otherwise as Unicode. Note -that the buffer pointed to by C needs to be at least C -bytes since the uppercase version may be longer than the original character. - -The first code point of the uppercased version is returned -(but note, as explained at L, that there may be more.) - -=for apidoc Am|UV|toUPPER_utf8|U8* p|U8* e|U8* s|STRLEN* lenp -Converts the first UTF-8 encoded character in the sequence starting at C

    and -extending no further than S> to its uppercase version, and -stores that in UTF-8 in C, and its length in bytes in C. Note -that the buffer pointed to by C needs to be at least C -bytes since the uppercase version may be longer than the original character. - -The first code point of the uppercased version is returned -(but note, as explained at L, that there may be more). - -It will not attempt to read beyond S>, provided that the constraint -S e>> is true (this is asserted for in C<-DDEBUGGING> builds). If -the UTF-8 for the input character is malformed in some way, the program may -croak, or the function may return the REPLACEMENT CHARACTER, at the discretion -of the implementation, and subject to change in future releases. - -=for apidoc Am|UV|toUPPER_utf8_safe|U8* p|U8* e|U8* s|STRLEN* lenp -Same as L. - -=for apidoc Am|U8|toFOLD|U8 ch -Converts the specified character to foldcase. If the input is anything but an -ASCII uppercase character, that input character itself is returned. Variant -C is equivalent. (There is no equivalent C for the full -Latin1 range, as the full generality of L is needed there.) - -=for apidoc Am|UV|toFOLD_uvchr|UV cp|U8* s|STRLEN* lenp -Converts the code point C to its foldcase version, and -stores that in UTF-8 in C, and its length in bytes in C. The code -point is interpreted as native if less than 256; otherwise as Unicode. Note -that the buffer pointed to by C needs to be at least C -bytes since the foldcase version may be longer than the original character. - -The first code point of the foldcased version is returned -(but note, as explained at L, that there may be more). - -=for apidoc Am|UV|toFOLD_utf8|U8* p|U8* e|U8* s|STRLEN* lenp -Converts the first UTF-8 encoded character in the sequence starting at C

    and -extending no further than S> to its foldcase version, and -stores that in UTF-8 in C, and its length in bytes in C. Note -that the buffer pointed to by C needs to be at least C -bytes since the foldcase version may be longer than the original character. - -The first code point of the foldcased version is returned -(but note, as explained at L, that there may be more). - -It will not attempt -to read beyond S>, provided that the constraint S e>> is -true (this is asserted for in C<-DDEBUGGING> builds). If the UTF-8 for the -input character is malformed in some way, the program may croak, or the -function may return the REPLACEMENT CHARACTER, at the discretion of the -implementation, and subject to change in future releases. - -=for apidoc Am|UV|toFOLD_utf8_safe|U8* p|U8* e|U8* s|STRLEN* lenp -Same as L. - -=for apidoc Am|U8|toLOWER|U8 ch -Converts the specified character to lowercase. If the input is anything but an -ASCII uppercase character, that input character itself is returned. Variant -C is equivalent. - -=for apidoc Am|U8|toLOWER_L1|U8 ch -Converts the specified Latin1 character to lowercase. The results are -undefined if the input doesn't fit in a byte. - -=for apidoc Am|U8|toLOWER_LC|U8 ch -Converts the specified character to lowercase using the current locale's rules, -if possible; otherwise returns the input character itself. - -=for apidoc Am|UV|toLOWER_uvchr|UV cp|U8* s|STRLEN* lenp -Converts the code point C to its lowercase version, and -stores that in UTF-8 in C, and its length in bytes in C. The code -point is interpreted as native if less than 256; otherwise as Unicode. Note -that the buffer pointed to by C needs to be at least C -bytes since the lowercase version may be longer than the original character. - -The first code point of the lowercased version is returned -(but note, as explained at L, that there may be more). - -=for apidoc Am|UV|toLOWER_utf8|U8* p|U8* e|U8* s|STRLEN* lenp -Converts the first UTF-8 encoded character in the sequence starting at C

    and -extending no further than S> to its lowercase version, and -stores that in UTF-8 in C, and its length in bytes in C. Note -that the buffer pointed to by C needs to be at least C -bytes since the lowercase version may be longer than the original character. - -The first code point of the lowercased version is returned -(but note, as explained at L, that there may be more). -It will not attempt to read beyond S>, provided that the constraint -S e>> is true (this is asserted for in C<-DDEBUGGING> builds). If -the UTF-8 for the input character is malformed in some way, the program may -croak, or the function may return the REPLACEMENT CHARACTER, at the discretion -of the implementation, and subject to change in future releases. - -=for apidoc Am|UV|toLOWER_utf8_safe|U8* p|U8* e|U8* s|STRLEN* lenp -Same as L. - -=for apidoc Am|U8|toTITLE|U8 ch -Converts the specified character to titlecase. If the input is anything but an -ASCII lowercase character, that input character itself is returned. Variant -C is equivalent. (There is no C for the full Latin1 -range, as the full generality of L is needed there. Titlecase is -not a concept used in locale handling, so there is no functionality for that.) - -=for apidoc Am|UV|toTITLE_uvchr|UV cp|U8* s|STRLEN* lenp -Converts the code point C to its titlecase version, and -stores that in UTF-8 in C, and its length in bytes in C. The code -point is interpreted as native if less than 256; otherwise as Unicode. Note -that the buffer pointed to by C needs to be at least C -bytes since the titlecase version may be longer than the original character. - -The first code point of the titlecased version is returned -(but note, as explained at L, that there may be more). - -=for apidoc Am|UV|toTITLE_utf8|U8* p|U8* e|U8* s|STRLEN* lenp -Converts the first UTF-8 encoded character in the sequence starting at C

    and -extending no further than S> to its titlecase version, and -stores that in UTF-8 in C, and its length in bytes in C. Note -that the buffer pointed to by C needs to be at least C -bytes since the titlecase version may be longer than the original character. - -The first code point of the titlecased version is returned -(but note, as explained at L, that there may be more). - -It will not attempt -to read beyond S>, provided that the constraint S e>> is -true (this is asserted for in C<-DDEBUGGING> builds). If the UTF-8 for the -input character is malformed in some way, the program may croak, or the -function may return the REPLACEMENT CHARACTER, at the discretion of the -implementation, and subject to change in future releases. - -=for apidoc Am|UV|toTITLE_utf8_safe|U8* p|U8* e|U8* s|STRLEN* lenp -Same as L. +=for apidoc Am|UV|toUPPER|UV cp +=for apidoc_item |UV|toUPPER_A|UV cp +=for apidoc_item |UV|toUPPER_uvchr|UV cp|U8* s|STRLEN* lenp +=for apidoc_item |UV|toUPPER_utf8|U8* p|U8* e|U8* s|STRLEN* lenp +=for apidoc_item |UV|toUPPER_utf8_safe|U8* p|U8* e|U8* s|STRLEN* lenp + +These all return the uppercase of a character. The differences are what domain +they operate on, and whether the input is specified as a code point (those +forms with a C parameter) or as a UTF-8 string (the others). In the latter +case, the code point to use is the first one in the buffer of UTF-8 encoded +code points, delineated by the arguments S>. + +C and C are synonyms of each other. They return the +uppercase of any lowercase ASCII-range code point. All other inputs are +returned unchanged. Since these are macros, the input type may be any integral +one, and the output will occupy the same number of bits as the input. + +There is no C nor C as the uppercase of some code +points in the 0..255 range is above that range or consists of multiple +characters. Instead use C. + +C returns the uppercase of any Unicode code point. The return +value is identical to that of C for input code points in the ASCII +range. The uppercase of the vast majority of Unicode code points is the same +as the code point itself. For these, and for code points above the legal +Unicode maximum, this returns the input code point unchanged. It additionally +stores the UTF-8 of the result into the buffer beginning at C, and its +length in bytes into C<*lenp>. The caller must have made C large enough to +contain at least C bytes to avoid possible overflow. + +NOTE: the uppercase of a code point may be more than one code point. The +return value of this function is only the first of these. The entire uppercase +is returned in C. To determine if the result is more than a single code +point, you can do something like this: + + uc = toUPPER_uvchr(cp, s, &len); + if (len > UTF8SKIP(s)) { is multiple code points } + else { is a single code point } + +C and C are synonyms of each other. The only +difference between these and C is that the source for these is +encoded in UTF-8, instead of being a code point. It is passed as a buffer +starting at C

    , with C pointing to one byte beyond its end. The C

    +buffer may certainly contain more than one code point; but only the first one +(up through S>) is examined. If the UTF-8 for the input character is +malformed in some way, the program may croak, or the function may return the +REPLACEMENT CHARACTER, at the discretion of the implementation, and subject to +change in future releases. + +=for apidoc Am|UV|toFOLD|UV cp +=for apidoc_item |UV|toFOLD_A|UV cp +=for apidoc_item |UV|toFOLD_uvchr|UV cp|U8* s|STRLEN* lenp +=for apidoc_item |UV|toFOLD_utf8|U8* p|U8* e|U8* s|STRLEN* lenp +=for apidoc_item |UV|toFOLD_utf8_safe|U8* p|U8* e|U8* s|STRLEN* lenp + +These all return the foldcase of a character. "foldcase" is an internal case +for C pattern matching. If the foldcase of character A and the foldcase of +character B are the same, they match caselessly; otherwise they don't. + +The differences in the forms are what domain they operate on, and whether the +input is specified as a code point (those forms with a C parameter) or as a +UTF-8 string (the others). In the latter case, the code point to use is the +first one in the buffer of UTF-8 encoded code points, delineated by the +arguments S>. + +C and C are synonyms of each other. They return the +foldcase of any ASCII-range code point. In this range, the foldcase is +identical to the lowercase. All other inputs are returned unchanged. Since +these are macros, the input type may be any integral one, and the output will +occupy the same number of bits as the input. + +There is no C nor C as the foldcase of some code +points in the 0..255 range is above that range or consists of multiple +characters. Instead use C. + +C returns the foldcase of any Unicode code point. The return +value is identical to that of C for input code points in the ASCII +range. The foldcase of the vast majority of Unicode code points is the same +as the code point itself. For these, and for code points above the legal +Unicode maximum, this returns the input code point unchanged. It additionally +stores the UTF-8 of the result into the buffer beginning at C, and its +length in bytes into C<*lenp>. The caller must have made C large enough to +contain at least C bytes to avoid possible overflow. + +NOTE: the foldcase of a code point may be more than one code point. The +return value of this function is only the first of these. The entire foldcase +is returned in C. To determine if the result is more than a single code +point, you can do something like this: + + uc = toFOLD_uvchr(cp, s, &len); + if (len > UTF8SKIP(s)) { is multiple code points } + else { is a single code point } + +C and C are synonyms of each other. The only +difference between these and C is that the source for these is +encoded in UTF-8, instead of being a code point. It is passed as a buffer +starting at C

    , with C pointing to one byte beyond its end. The C

    +buffer may certainly contain more than one code point; but only the first one +(up through S>) is examined. If the UTF-8 for the input character is +malformed in some way, the program may croak, or the function may return the +REPLACEMENT CHARACTER, at the discretion of the implementation, and subject to +change in future releases. + +=for apidoc Am|UV|toLOWER|UV cp +=for apidoc_item |UV|toLOWER_A|UV cp +=for apidoc_item |UV|toLOWER_L1|UV cp +=for apidoc_item |UV|toLOWER_LATIN1|UV cp +=for apidoc_item |UV|toLOWER_LC|UV cp +=for apidoc_item |UV|toLOWER_uvchr|UV cp|U8* s|STRLEN* lenp +=for apidoc_item |UV|toLOWER_utf8|U8* p|U8* e|U8* s|STRLEN* lenp +=for apidoc_item |UV|toLOWER_utf8_safe|U8* p|U8* e|U8* s|STRLEN* lenp + +These all return the lowercase of a character. The differences are what domain +they operate on, and whether the input is specified as a code point (those +forms with a C parameter) or as a UTF-8 string (the others). In the latter +case, the code point to use is the first one in the buffer of UTF-8 encoded +code points, delineated by the arguments S>. + +C and C are synonyms of each other. They return the +lowercase of any uppercase ASCII-range code point. All other inputs are +returned unchanged. Since these are macros, the input type may be any integral +one, and the output will occupy the same number of bits as the input. + +C and C are synonyms of each other. They behave +identically as C for ASCII-range input. But additionally will return +the lowercase of any uppercase code point in the entire 0..255 range, assuming +a Latin-1 encoding (or the EBCDIC equivalent on such platforms). + +C returns the lowercase of the input code point according to the +rules of the current POSIX locale. Input code points outside the range 0..255 +are returned unchanged. + +C returns the lowercase of any Unicode code point. The return +value is identical to that of C for input code points in the 0..255 +range. The lowercase of the vast majority of Unicode code points is the same +as the code point itself. For these, and for code points above the legal +Unicode maximum, this returns the input code point unchanged. It additionally +stores the UTF-8 of the result into the buffer beginning at C, and its +length in bytes into C<*lenp>. The caller must have made C large enough to +contain at least C bytes to avoid possible overflow. + +NOTE: the lowercase of a code point may be more than one code point. The +return value of this function is only the first of these. The entire lowercase +is returned in C. To determine if the result is more than a single code +point, you can do something like this: + + uc = toLOWER_uvchr(cp, s, &len); + if (len > UTF8SKIP(s)) { is multiple code points } + else { is a single code point } + +C and C are synonyms of each other. The only +difference between these and C is that the source for these is +encoded in UTF-8, instead of being a code point. It is passed as a buffer +starting at C

    , with C pointing to one byte beyond its end. The C

    +buffer may certainly contain more than one code point; but only the first one +(up through S>) is examined. If the UTF-8 for the input character is +malformed in some way, the program may croak, or the function may return the +REPLACEMENT CHARACTER, at the discretion of the implementation, and subject to +change in future releases. + +=for apidoc Am|UV|toTITLE|UV cp +=for apidoc_item |UV|toTITLE_A|UV cp +=for apidoc_item |UV|toTITLE_uvchr|UV cp|U8* s|STRLEN* lenp +=for apidoc_item |UV|toTITLE_utf8|U8* p|U8* e|U8* s|STRLEN* lenp +=for apidoc_item |UV|toTITLE_utf8_safe|U8* p|U8* e|U8* s|STRLEN* lenp + +These all return the titlecase of a character. The differences are what domain +they operate on, and whether the input is specified as a code point (those +forms with a C parameter) or as a UTF-8 string (the others). In the latter +case, the code point to use is the first one in the buffer of UTF-8 encoded +code points, delineated by the arguments S>. + +C and C are synonyms of each other. They return the +titlecase of any lowercase ASCII-range code point. In this range, the +titlecase is identical to the uppercase. All other inputs are returned +unchanged. Since these are macros, the input type may be any integral one, and +the output will occupy the same number of bits as the input. + +There is no C nor C as the titlecase of some code +points in the 0..255 range is above that range or consists of multiple +characters. Instead use C. + +C returns the titlecase of any Unicode code point. The return +value is identical to that of C for input code points in the ASCII +range. The titlecase of the vast majority of Unicode code points is the same +as the code point itself. For these, and for code points above the legal +Unicode maximum, this returns the input code point unchanged. It additionally +stores the UTF-8 of the result into the buffer beginning at C, and its +length in bytes into C<*lenp>. The caller must have made C large enough to +contain at least C bytes to avoid possible overflow. + +NOTE: the titlecase of a code point may be more than one code point. The +return value of this function is only the first of these. The entire titlecase +is returned in C. To determine if the result is more than a single code +point, you can do something like this: + + uc = toTITLE_uvchr(cp, s, &len); + if (len > UTF8SKIP(s)) { is multiple code points } + else { is a single code point } + +C and C are synonyms of each other. The only +difference between these and C is that the source for these is +encoded in UTF-8, instead of being a code point. It is passed as a buffer +starting at C

    , with C pointing to one byte beyond its end. The C

    +buffer may certainly contain more than one code point; but only the first one +(up through S>) is examined. If the UTF-8 for the input character is +malformed in some way, the program may croak, or the function may return the +REPLACEMENT CHARACTER, at the discretion of the implementation, and subject to +change in future releases. =cut @@ -1233,10 +1370,11 @@ patched there. The file as of this writing is cpan/Devel-PPPort/parts/inc/misc /* void below because that's the best fit, and works for Devel::PPPort -=for apidoc AmnU|void|WIDEST_UTYPE +=for apidoc_section $integer +=for apidoc AyT||WIDEST_UTYPE Yields the widest unsigned integer type on the platform, currently either -C or C<64>. This can be used in declarations such as +C or C. This can be used in declarations such as WIDEST_UTYPE my_uv; @@ -1253,6 +1391,21 @@ or casts # define WIDEST_UTYPE U32 #endif +/* Where there could be some confusion, use this as a static assert in macros + * to make sure that a parameter isn't a pointer. But some compilers can't + * handle this. The only one known so far that doesn't is gcc 3.3.6; the check + * below isn't thorough for such an old compiler, so may have to be revised if + * experience so dictates. */ +#if ! PERL_IS_GCC || PERL_GCC_VERSION_GT(3,3,6) +# define ASSERT_NOT_PTR(x) ((x) | 0) +#else +# define ASSERT_NOT_PTR(x) (x) +#endif + +/* Likewise, this is effectively a static assert to be used to guarantee the + * parameter is a pointer */ +#define ASSERT_IS_PTR(x) (__ASSERT_(sizeof(*(x))) (x)) + /* FITS_IN_8_BITS(c) returns true if c doesn't have a bit set other than in * the lower 8. It is designed to be hopefully bomb-proof, making sure that no * bits of information are lost even on a 64-bit machine, but to get the @@ -1265,12 +1418,12 @@ or casts * of operands. Well, they are, but that is kind of the point. */ #ifndef __COVERITY__ - /* The '| 0' part ensures a compiler error if c is not integer (like e.g., a - * pointer) */ -#define FITS_IN_8_BITS(c) ( (sizeof(c) == 1) \ - || !(((WIDEST_UTYPE)((c) | 0)) & ~0xFF)) + /* The '| 0' part in ASSERT_NOT_PTR ensures a compiler error if c is not + * integer (like e.g., a pointer) */ +# define FITS_IN_8_BITS(c) ( (sizeof(c) == 1) \ + || (((WIDEST_UTYPE) ASSERT_NOT_PTR(c)) >> 8) == 0) #else -#define FITS_IN_8_BITS(c) (1) +# define FITS_IN_8_BITS(c) (1) #endif /* Returns true if l <= c <= (l + n), where 'l' and 'n' are non-negative @@ -1278,18 +1431,34 @@ or casts * needed. (The NV casts stop any warnings about comparison always being true * if called with an unsigned. The cast preserves the sign, which is all we * care about.) */ -#define withinCOUNT(c, l, n) (__ASSERT_((NV) (l) >= 0) \ - __ASSERT_((NV) (n) >= 0) \ - (((WIDEST_UTYPE) (((c)) - ((l) | 0))) <= (((WIDEST_UTYPE) ((n) | 0))))) +#define withinCOUNT(c, l, n) (__ASSERT_((NV) (l) >= 0) \ + __ASSERT_((NV) (n) >= 0) \ + withinCOUNT_KNOWN_VALID_((c), (l), (n))) + +/* For internal use only, this can be used in places where it is known that the + * parameters to withinCOUNT() are valid, to avoid the asserts. For example, + * inRANGE() below, calls this several times, but does all the necessary + * asserts itself, once. The reason that this is necessary is that the + * duplicate asserts were exceeding the internal limits of some compilers */ +#define withinCOUNT_KNOWN_VALID_(c, l, n) \ + ((((WIDEST_UTYPE) (c)) - ASSERT_NOT_PTR(l)) \ + <= ((WIDEST_UTYPE) ASSERT_NOT_PTR(n))) /* Returns true if c is in the range l..u, where 'l' is non-negative * Written this way so that after optimization, only one conditional test is * needed. */ -#define inRANGE(c, l, u) (__ASSERT_((u) >= (l)) \ - ( (sizeof(c) == sizeof(U8)) ? withinCOUNT(((U8) (c)), (l), ((u) - (l))) \ - : (sizeof(c) == sizeof(U32)) ? withinCOUNT(((U32) (c)), (l), ((u) - (l))) \ - : (__ASSERT_(sizeof(c) == sizeof(WIDEST_UTYPE)) \ - withinCOUNT(((WIDEST_UTYPE) (c)), (l), ((u) - (l)))))) +#define inRANGE(c, l, u) (__ASSERT_((NV) (l) >= 0) __ASSERT_((u) >= (l)) \ + ( (sizeof(c) == sizeof(U8)) ? inRANGE_helper_(U8, (c), (l), ((u))) \ + : (sizeof(c) == sizeof(U16)) ? inRANGE_helper_(U16,(c), (l), ((u))) \ + : (sizeof(c) == sizeof(U32)) ? inRANGE_helper_(U32,(c), (l), ((u))) \ + : (__ASSERT_(sizeof(c) == sizeof(WIDEST_UTYPE)) \ + inRANGE_helper_(WIDEST_UTYPE,(c), (l), ((u)))))) + +/* For internal use, this is used by machine-generated code which generates + * known valid calls, with a known sizeof(). This avoids the extra code and + * asserts that were exceeding internal limits of some compilers. */ +#define inRANGE_helper_(cast, c, l, u) \ + withinCOUNT_KNOWN_VALID_(((cast) (c)), (l), ((u) - (l))) #ifdef EBCDIC # ifndef _ALL_SOURCE @@ -1307,17 +1476,14 @@ or casts * unsigned type. khw supposes that it could be written as * && ((c) == '\0' || (c) > 0) * to avoid the message, but the cast will likely avoid extra branches even - * with stupid compilers. - * - * The '| 0' part ensures a compiler error if c is not integer (like e.g., - * a pointer) */ -# define isASCII(c) ((WIDEST_UTYPE)((c) | 0) < 128) + * with stupid compilers. */ +# define isASCII(c) (((WIDEST_UTYPE) ASSERT_NOT_PTR(c)) < 128) #endif /* Take the eight possible bit patterns of the lower 3 bits and you get the * lower 3 bits of the 8 octal digits, in both ASCII and EBCDIC, so those bits * can be ignored. If the rest match '0', we have an octal */ -#define isOCTAL_A(c) (((WIDEST_UTYPE)((c) | 0) & ~7) == '0') +#define isOCTAL_A(c) ((((WIDEST_UTYPE) ASSERT_NOT_PTR(c)) & ~7) == '0') #ifdef H_PERL /* If have access to perl.h, lookup in its table */ @@ -1369,10 +1535,7 @@ or casts # define _CC_OCTDIGIT 24 # define _CC_MNEMONIC_CNTRL 25 -/* This next group is only used on EBCDIC platforms, so theoretically could be - * shared with something entirely different that's only on ASCII platforms */ -# define _CC_UTF8_START_BYTE_IS_FOR_AT_LEAST_SURROGATE 31 -/* Unused: 24-30 +/* Unused: 26-31 * If more bits are needed, one could add a second word for non-64bit * QUAD_IS_INT systems, using some #ifdefs to distinguish between having a 2nd * word or not. The IS_IN_SOME_FOLD bit is the most easily expendable, as it @@ -1487,16 +1650,21 @@ END_EXTERN_C # endif /* Participates in a single-character fold with a character above 255 */ -# define _HAS_NONLATIN1_SIMPLE_FOLD_CLOSURE_ONLY_FOR_USE_BY_REGCOMP_DOT_C_AND_REGEXEC_DOT_C(c) ((! cBOOL(FITS_IN_8_BITS(c))) || (PL_charclass[(U8) (c)] & _CC_mask(_CC_NONLATIN1_SIMPLE_FOLD))) +# if defined(PERL_IN_REGCOMP_C) || defined(PERL_IN_REGEXEC_C) +# define HAS_NONLATIN1_SIMPLE_FOLD_CLOSURE(c) \ + (( ! cBOOL(FITS_IN_8_BITS(c))) \ + || (PL_charclass[(U8) (c)] & _CC_mask(_CC_NONLATIN1_SIMPLE_FOLD))) + +# define IS_NON_FINAL_FOLD(c) _generic_isCC(c, _CC_NON_FINAL_FOLD) +# define IS_IN_SOME_FOLD_L1(c) _generic_isCC(c, _CC_IS_IN_SOME_FOLD) +# endif /* Like the above, but also can be part of a multi-char fold */ -# define _HAS_NONLATIN1_FOLD_CLOSURE_ONLY_FOR_USE_BY_REGCOMP_DOT_C_AND_REGEXEC_DOT_C(c) ((! cBOOL(FITS_IN_8_BITS(c))) || (PL_charclass[(U8) (c)] & _CC_mask(_CC_NONLATIN1_FOLD))) +# define HAS_NONLATIN1_FOLD_CLOSURE(c) \ + ( (! cBOOL(FITS_IN_8_BITS(c))) \ + || (PL_charclass[(U8) (c)] & _CC_mask(_CC_NONLATIN1_FOLD))) # define _isQUOTEMETA(c) _generic_isCC(c, _CC_QUOTEMETA) -# define _IS_NON_FINAL_FOLD_ONLY_FOR_USE_BY_REGCOMP_DOT_C(c) \ - _generic_isCC(c, _CC_NON_FINAL_FOLD) -# define _IS_IN_SOME_FOLD_ONLY_FOR_USE_BY_REGCOMP_DOT_C(c) \ - _generic_isCC(c, _CC_IS_IN_SOME_FOLD) /* is c a control character for which we have a mnemonic? */ # if defined(PERL_CORE) || defined(PERL_EXT) @@ -1840,7 +2008,12 @@ END_EXTERN_C # define isALPHANUMERIC_LC(c) _generic_LC(c, _CC_ALPHANUMERIC, isalnum) # define isCNTRL_LC(c) _generic_LC(c, _CC_CNTRL, iscntrl) # define isDIGIT_LC(c) _generic_LC(c, _CC_DIGIT, isdigit) -# define isGRAPH_LC(c) _generic_LC(c, _CC_GRAPH, isgraph) +# ifdef OS390 /* This system considers NBSP to be a graph */ +# define isGRAPH_LC(c) _generic_LC(c, _CC_GRAPH, isgraph) \ + && ! isSPACE_LC(c) +# else +# define isGRAPH_LC(c) _generic_LC(c, _CC_GRAPH, isgraph) +# endif # define isIDFIRST_LC(c) _generic_LC_underscore(c, _CC_IDFIRST, isalpha) # define isLOWER_LC(c) _generic_LC(c, _CC_LOWER, islower) # define isPRINT_LC(c) _generic_LC(c, _CC_PRINT, isprint) @@ -2049,7 +2222,7 @@ END_EXTERN_C * 'above_latin1' should include its arguments */ #define _generic_utf8_safe_no_upper_latin1(classnum, p, e, above_latin1) \ (__ASSERT_(_utf8_safe_assert(p, e)) \ - (UTF8_IS_INVARIANT(*(p))) \ + (isASCII(*(p))) \ ? _generic_isCC(*(p), classnum) \ : (UTF8_IS_DOWNGRADEABLE_START(*(p))) \ ? 0 /* Note that doesn't check validity for latin1 */ \ @@ -2278,22 +2451,29 @@ END_EXTERN_C : (LATIN1_TO_NATIVE(((U8) (c)) ^ 64))))) #endif -/* Line numbers are unsigned, 32 bits. */ +/* +=for apidoc Ay||line_t +The typedef to use to declare variables that are to hold line numbers. + +=cut + + Line numbers are unsigned, 32 bits. +*/ typedef U32 line_t; #define NOLINE ((line_t) 4294967295UL) /* = FFFFFFFF */ /* Helpful alias for version prescan */ #define is_LAX_VERSION(a,b) \ - (a != Perl_prescan_version(aTHX_ a, FALSE, b, NULL, NULL, NULL, NULL)) + (a != Perl_prescan_version(aTHX_ a, FALSE, b, NULL, NULL, NULL, NULL)) #define is_STRICT_VERSION(a,b) \ - (a != Perl_prescan_version(aTHX_ a, TRUE, b, NULL, NULL, NULL, NULL)) + (a != Perl_prescan_version(aTHX_ a, TRUE, b, NULL, NULL, NULL, NULL)) #define BADVERSION(a,b,c) \ - if (b) { \ - *b = c; \ - } \ - return a; + if (b) { \ + *b = c; \ + } \ + return a; /* Converts a character KNOWN to represent a hexadecimal digit (0-9, A-F, or * a-f) to its numeric value without using any branches. The input is @@ -2318,7 +2498,7 @@ typedef U32 line_t; #define OCTAL_VALUE(c) (__ASSERT_(isOCTAL(c)) (7 & (c))) /* Efficiently returns a boolean as to if two native characters are equivalent - * case-insenstively. At least one of the characters must be one of [A-Za-z]; + * case-insensitively. At least one of the characters must be one of [A-Za-z]; * the ALPHA in the name is to remind you of that. This is asserted() in * DEBUGGING builds. Because [A-Za-z] are invariant under UTF-8, this macro * works (on valid input) for both non- and UTF-8-encoded bytes. @@ -2337,9 +2517,11 @@ typedef U32 line_t; #define isALPHA_FOLD_NE(c1, c2) (! isALPHA_FOLD_EQ((c1), (c2))) /* -=head1 Memory Management +=for apidoc_section $memory =for apidoc Am|void|Newx|void* ptr|int nitems|type +=for apidoc_item |void*|safemalloc|size_t size + The XSUB-writer's interface to the C C function. Memory obtained by this should B be freed with L. @@ -2357,12 +2539,16 @@ cast. See also C>. Memory obtained by this should B be freed with L. =for apidoc Am|void|Newxz|void* ptr|int nitems|type +=for apidoc_item |void*|safecalloc|size_t nitems|size_t item_size + The XSUB-writer's interface to the C C function. The allocated memory is zeroed with C. See also C>. Memory obtained by this should B be freed with L. =for apidoc Am|void|Renew|void* ptr|int nitems|type +=for apidoc_item |void*|saferealloc|void *ptr|size_t size + The XSUB-writer's interface to the C C function. Memory obtained by this should B be freed with L. @@ -2378,39 +2564,39 @@ The XSUB-writer's interface to the C C function. This should B be used on memory obtained using L and friends. -=for apidoc Am|void|Move|void* src|void* dest|int nitems|type +=for apidoc_section $string +=for apidoc Am|void |Move |void* src|void* dest|int nitems|type +=for apidoc_item |void *|MoveD|void* src|void* dest|int nitems|type The XSUB-writer's interface to the C C function. The C is the source, C is the destination, C is the number of items, and C is the type. Can do overlapping moves. See also C>. -=for apidoc Am|void *|MoveD|void* src|void* dest|int nitems|type -Like C but returns C. Useful +C is like C but returns C. Useful for encouraging compilers to tail-call optimise. -=for apidoc Am|void|Copy|void* src|void* dest|int nitems|type +=for apidoc Am|void |Copy |void* src|void* dest|int nitems|type +=for apidoc_item |void *|CopyD|void* src|void* dest|int nitems|type The XSUB-writer's interface to the C C function. The C is the source, C is the destination, C is the number of items, and C is the type. May fail on overlapping copies. See also C>. -=for apidoc Am|void *|CopyD|void* src|void* dest|int nitems|type - -Like C but returns C. Useful +C is like C but returns C. Useful for encouraging compilers to tail-call optimise. -=for apidoc Am|void|Zero|void* dest|int nitems|type +=for apidoc Am|void |Zero |void* dest|int nitems|type +=for apidoc_item |void *|ZeroD|void* dest|int nitems|type The XSUB-writer's interface to the C C function. The C is the destination, C is the number of items, and C is the type. -=for apidoc Am|void *|ZeroD|void* dest|int nitems|type - -Like C but returns dest. Useful +C is like C but returns C. Useful for encouraging compilers to tail-call optimise. -=for apidoc Am|void|StructCopy|type *src|type *dest|type +=for apidoc_section $utility +=for apidoc Amu|void|StructCopy|type *src|type *dest|type This is an architecture-independent macro to copy one structure to another. =for apidoc Am|void|PoisonWith|void* dest|int nitems|type|U8 byte @@ -2479,17 +2665,17 @@ PoisonWith(0xEF) for catching access to freed memory. MEM_SIZE_MAX/sizeof(t)) > MEM_SIZE_MAX/sizeof(t)) # define MEM_WRAP_CHECK(n,t) \ - (void)(UNLIKELY(_MEM_WRAP_WILL_WRAP(n,t)) \ + (void)(UNLIKELY(_MEM_WRAP_WILL_WRAP(n,t)) \ && (croak_memory_wrap(),0)) # define MEM_WRAP_CHECK_1(n,t,a) \ - (void)(UNLIKELY(_MEM_WRAP_WILL_WRAP(n,t)) \ - && (Perl_croak_nocontext("%s",(a)),0)) + (void)(UNLIKELY(_MEM_WRAP_WILL_WRAP(n,t)) \ + && (Perl_croak_nocontext("%s",(a)),0)) /* "a" arg must be a string literal */ # define MEM_WRAP_CHECK_s(n,t,a) \ - (void)(UNLIKELY(_MEM_WRAP_WILL_WRAP(n,t)) \ - && (Perl_croak_nocontext("" a ""),0)) + ( (void) (UNLIKELY(_MEM_WRAP_WILL_WRAP(n,t)) \ + && (Perl_croak_nocontext(ASSERT_IS_LITERAL(a)), 0))) #define MEM_WRAP_CHECK_(n,t) MEM_WRAP_CHECK(n,t), @@ -2584,9 +2770,9 @@ void Perl_mem_log_del_sv(const SV *sv, const char *filename, const int linenumbe #endif #define Renew(v,n,t) \ - (v = (MEM_WRAP_CHECK_(n,t) (t*)MEM_LOG_REALLOC(n,t,v,saferealloc((Malloc_t)(v),(MEM_SIZE)((n)*sizeof(t)))))) + (v = (MEM_WRAP_CHECK_(n,t) (t*)MEM_LOG_REALLOC(n,t,v,saferealloc((Malloc_t)(v),(MEM_SIZE)((n)*sizeof(t)))))) #define Renewc(v,n,t,c) \ - (v = (MEM_WRAP_CHECK_(n,t) (c*)MEM_LOG_REALLOC(n,t,v,saferealloc((Malloc_t)(v),(MEM_SIZE)((n)*sizeof(t)))))) + (v = (MEM_WRAP_CHECK_(n,t) (c*)MEM_LOG_REALLOC(n,t,v,saferealloc((Malloc_t)(v),(MEM_SIZE)((n)*sizeof(t)))))) #ifdef PERL_POISON #define Safefree(d) \ @@ -2621,10 +2807,11 @@ void Perl_mem_log_del_sv(const SV *sv, const char *filename, const int linenumbe # define PERL_POISON_EXPR(x) #endif +/* Shallow copy */ #define StructCopy(s,d,t) (*((t*)(d)) = *((t*)(s))) /* -=head1 Handy Values +=for apidoc_section $utility =for apidoc Am|STRLEN|C_ARRAY_LENGTH|void *a @@ -2678,10 +2865,10 @@ last-inclusive range. "Use of " s " is deprecated") # define deprecate_disappears_in(when,message) \ Perl_ck_warner_d(aTHX_ packWARN(WARN_DEPRECATED), \ - message ", and will disappear in Perl " when) + message " is deprecated, and will disappear in Perl " when) # define deprecate_fatal_in(when,message) \ Perl_ck_warner_d(aTHX_ packWARN(WARN_DEPRECATED), \ - message ". Its use will be fatal in Perl " when) + message " is deprecated, and will become fatal in Perl " when) #endif /* Internal macros to deal with gids and uids */ diff --git a/gnu/usr.bin/perl/hints/aix.sh b/gnu/usr.bin/perl/hints/aix.sh index 7880ed3c806..9f9b32c9746 100644 --- a/gnu/usr.bin/perl/hints/aix.sh +++ b/gnu/usr.bin/perl/hints/aix.sh @@ -566,7 +566,7 @@ fi # * Does not fully support the IEEE special numbers NaN and INF. # * Does not support IEEE status flags for overflow, underflow, # and other conditions. These flags have no meaning for the 128-bit -# long double inplementation. +# long double implementation. # * The 128-bit long double data type does not support the following math # APIs: atanhl, cbrtl, copysignl, exp2l, expm1l, fdiml, fmal, fmaxl, # fminl, hypotl, ilogbl, llrintl, llroundl, log1pl, log2l, logbl, diff --git a/gnu/usr.bin/perl/hints/amigaos.sh b/gnu/usr.bin/perl/hints/amigaos.sh index c7b9e5e609b..8b34d897080 100644 --- a/gnu/usr.bin/perl/hints/amigaos.sh +++ b/gnu/usr.bin/perl/hints/amigaos.sh @@ -6,3 +6,5 @@ for f in amigaos4/*.h amigaos4/*.c do cp -f $f . done + +ccflags="$ccflags -fno-stack-protector" diff --git a/gnu/usr.bin/perl/hints/catamount.sh b/gnu/usr.bin/perl/hints/catamount.sh index fd9538fdf2b..8c5fce6dee6 100644 --- a/gnu/usr.bin/perl/hints/catamount.sh +++ b/gnu/usr.bin/perl/hints/catamount.sh @@ -31,11 +31,11 @@ # mkdir -p /opt/perl-catamount # mkdir -p /opt/perl-catamount/include # mkdir -p /opt/perl-catamount/lib -# mkdir -p /opt/perl-catamount/lib/perl5/5.32.1 +# mkdir -p /opt/perl-catamount/lib/perl5/5.36.0 # mkdir -p /opt/perl-catamount/bin # cp *.h /opt/perl-catamount/include # cp libperl.a /opt/perl-catamount/lib -# cp -pr lib/* /opt/perl-catamount/lib/perl5/5.32.1 +# cp -pr lib/* /opt/perl-catamount/lib/perl5/5.36.0 # cp miniperl perl run.sh cc.sh /opt/perl-catamount/lib # # With the headers and the libperl.a you can embed Perl to your Catamount diff --git a/gnu/usr.bin/perl/hints/darwin.sh b/gnu/usr.bin/perl/hints/darwin.sh index fdfbdd4a3b9..ea521003c3b 100644 --- a/gnu/usr.bin/perl/hints/darwin.sh +++ b/gnu/usr.bin/perl/hints/darwin.sh @@ -535,3 +535,7 @@ esac # mkostemp() was autodetected as present but found to not be linkable # on 15.6.0. Unknown what other OS versions are affected. d_mkostemp=undef + +# Apparently the MACH-O format can't support _Thread_local in shared objects, +# but clang isn't wise to this, so our probe works but the build fails... +d_thread_local=undef diff --git a/gnu/usr.bin/perl/hints/dos_djgpp.sh b/gnu/usr.bin/perl/hints/dos_djgpp.sh deleted file mode 100644 index 8f5fa337829..00000000000 --- a/gnu/usr.bin/perl/hints/dos_djgpp.sh +++ /dev/null @@ -1,81 +0,0 @@ -# hints file for dos/djgpp v2.xx -# Original by Laszlo Molnar - -# 971015 - archname changed from 'djgpp' to 'dos-djgpp' -# 971210 - threads support -# 000222 - added -DPERL_EXTERNAL_GLOB to ccflags - -archname='dos-djgpp' -archobjs='djgpp.o' -path_sep=\; -startsh="#! /bin/sh" - -cc='gcc' -ld='gcc' -usrinc="$DJDIR/include" - -libpth="$DJDIR/lib" -libc="$libpth/libc.a" - -so='none' -usedl='n' - -firstmakefile='GNUmakefile' -exe_ext='.exe' - -randbits=31 -lns='cp' - -usenm='true' - -# this reportedly causes compile errors in system includes -i_ieeefp='undef' - -d_link='undef' # these are empty functions in libc.a -d_symlink='undef' -d_fork='undef' -d_pipe='undef' - -startperl='#!perl' - -case "X$optimize" in - X) - case `gcc -v 2>&1|grep "gcc version"` in - "gcc version 1."*|"gcc version 2."*) - optimize="-O2 -malign-loops=2 -malign-jumps=2 -malign-functions=2" ;; - *) - optimize="-O2 -falign-loops=2 -falign-jumps=2 -falign-functions=2" ;; - esac - ldflags='-s' - ;; - X*) - ldflags=' ' - ;; -esac -ccflags="$ccflags -DPERL_EXTERNAL_GLOB" -usemymalloc='n' -timetype='time_t' - -prefix=$DJDIR -privlib=$prefix/lib/perl5 -archlib=$privlib -sitelib=$privlib/site -sitearch=$sitelib - -eagain='EAGAIN' -rd_nodata='-1' - -# This script UU/usethreads.cbu will get 'called-back' by Configure -# after it has prompted the user for whether to use threads. -cat > UU/usethreads.cbu <<'EOCBU' -case "$usethreads" in -$define|true|[yY]*) - set `echo X "$libswanted "| sed -e 's/ c / gthreads c /'` - shift - libswanted="$*" - ;; -esac -EOCBU - -useperlio='undef' -uselargefiles='undef' diff --git a/gnu/usr.bin/perl/hints/haiku.sh b/gnu/usr.bin/perl/hints/haiku.sh index fa8ebe51eab..0ec7479bc07 100644 --- a/gnu/usr.bin/perl/hints/haiku.sh +++ b/gnu/usr.bin/perl/hints/haiku.sh @@ -2,15 +2,15 @@ # $Id$ case "$prefix" in -'') prefix="/boot/common" ;; +'') prefix="$(finddir B_COMMON_DIRECTORY)" ;; *) ;; # pass the user supplied value through esac -libpth='/boot/home/config/lib /boot/common/lib /system/lib' -usrinc='/boot/develop/headers/posix' -locinc='/boot/home/config/include /boot/common/include /boot/develop/headers' +libpth="$(finddir B_USER_DEVELOP_DIRECTORY)/lib $(finddir B_SYSTEM_DEVELOP_DIRECTORY)/lib $(finddir B_COMMON_DIRECTORY)/lib /system/lib" +usrinc="$(finddir B_SYSTEM_DEVELOP_DIRECTORY)/headers/posix" +locinc="$(finddir B_USER_CONFIG_DIRECTORY)/develop/headers $(finddir B_COMMON_DIRECTORY)/headers $(finddir B_SYSTEM_DEVELOP_DIRECTORY)/headers" -libc='/system/lib/libroot.so' +libc="$(finddir B_SYSTEM_LIB_DIRECTORY)/libroot.so" libs='-lnetwork' # Use Haiku's malloc() by default. @@ -31,6 +31,8 @@ d_syserrlst='undef' cc="gcc" ld='gcc' +ccflags="$ccflags -fno-stack-protector" + # The runtime loader library path variable is LIBRARY_PATH. case "$ldlibpthname" in '') ldlibpthname=LIBRARY_PATH ;; diff --git a/gnu/usr.bin/perl/hints/openbsd.sh b/gnu/usr.bin/perl/hints/openbsd.sh index 5f96a4d5a7d..dd8df2ffed8 100644 --- a/gnu/usr.bin/perl/hints/openbsd.sh +++ b/gnu/usr.bin/perl/hints/openbsd.sh @@ -31,14 +31,6 @@ case "$osvers" in d_setruid=$undef esac -# OpenBSD 5.5 on has 64 bit time_t -case "$osvers" in -[0-4].*|5.[0-4]) ;; -*) - cppflags="$cppflags -DBIG_TIME" - ;; -esac - # # Not all platforms support dynamic loading... # For the case of "$openbsd_distribution", the hints file @@ -55,11 +47,7 @@ alpha-2.[0-8]|mips-2.[0-8]|powerpc-2.[0-7]|m88k-[2-4].*|m88k-5.[0-2]|hppa-3.[0-5 test -z "$usedl" && usedl=$define # We use -fPIC here because -fpic is *NOT* enough for some of the # extensions like Tk on some OpenBSD platforms (ie: sparc) - PICFLAG=-fPIC - if [ -e /usr/share/mk/bsd.own.mk ]; then - PICFLAG=`make -f /usr/share/mk/bsd.own.mk -V PICFLAG` - fi - cccdlflags="-DPIC ${PICFLAG} $cccdlflags" + cccdlflags="-DPIC -fPIC $cccdlflags" case "$osvers" in [01].*|2.[0-7]|2.[0-7].*) lddlflags="-Bshareable $lddlflags" @@ -70,7 +58,7 @@ alpha-2.[0-8]|mips-2.[0-8]|powerpc-2.[0-7]|m88k-[2-4].*|m88k-5.[0-2]|hppa-3.[0-5 ;; *) # from 3.1 onwards ld=${cc:-cc} - lddlflags="-shared ${PICFLAG} $lddlflags" + lddlflags="-shared -fPIC $lddlflags" libswanted=`echo $libswanted | sed 's/ dl / /'` ;; esac @@ -96,9 +84,6 @@ esac # around for old NetBSD binaries. libswanted=`echo $libswanted | sed 's/ crypt / /'` -# OpenBSD hasn't ever needed linking to libutil -libswanted=`echo $libswanted | sed 's/ util / /'` - # Configure can't figure this out non-interactively d_suidsafe=$define @@ -116,25 +101,6 @@ m88k-3.4) ;; esac -# -# Unaligned access on alpha with -ftree-ter -# http://gcc.gnu.org/bugzilla/show_bug.cgi?id=59679 -# More details -# https://rt.perl.org/Public/Bug/Display.html?id=120888 -# -case "${ARCH}-${osvers}" in - alpha-*) - ccflags="-fno-tree-ter $ccflags" - ;; -esac - -# Special per-arch specific ccflags -case "${ARCH}-${osvers}" in - vax-*) - ccflags="-DUSE_PERL_ATOF=0 $ccflags" - ;; -esac - # This script UU/usethreads.cbu will get 'called-back' by Configure # after it has prompted the user for whether to use threads. cat > UU/usethreads.cbu <<'EOCBU' @@ -156,9 +122,6 @@ $define|true|[yY]*) # Broken up to OpenBSD 3.6, fixed in OpenBSD 3.7 d_getservbyname_r=$undef ;; esac - ;; -*) - libswanted=`echo $libswanted | sed 's/ pthread / /'` esac EOCBU @@ -177,12 +140,12 @@ case "$openbsd_distribution" in siteprefix='/usr/local' siteprefixexp='/usr/local' # Ports installs non-std libs in /usr/local/lib so look there too - locincpth='' - loclibpth='' + locincpth='/usr/local/include' + loclibpth='/usr/local/lib' # Link perl with shared libperl - if [ "$usedl" = "$define" -a -r $src/shlib_version ]; then + if [ "$usedl" = "$define" -a -r shlib_version ]; then useshrplib=true - libperl=`. $src/shlib_version; echo libperl.so.${major}.${minor}` + libperl=`. ./shlib_version; echo libperl.so.${major}.${minor}` fi ;; esac @@ -192,7 +155,8 @@ esac # which is being fixed. In the meantime, forbid POSIX 2008 locales d_newlocale="$undef" -# OpenBSD's locale support is not that complete yet -ccflags="-DNO_LOCALE_NUMERIC -DNO_LOCALE_COLLATE $ccflags" +# Seems that OpenBSD returns bogus values in _Thread_local variables in code in +# shared objects, so we need to disable it. See GH #19109 +d_thread_local=undef # end diff --git a/gnu/usr.bin/perl/hints/os390.sh b/gnu/usr.bin/perl/hints/os390.sh index 56703033ae4..8995d8c353d 100644 --- a/gnu/usr.bin/perl/hints/os390.sh +++ b/gnu/usr.bin/perl/hints/os390.sh @@ -1,9 +1,9 @@ -# hints/os390.sh +# hints/os390.sh <-- keep the # character here # # OS/390 hints by David J. Fiander # # OS/390 OpenEdition Release 3 Mon Sep 22 1997 thanks to: -# +# # John Goodyear # John Pfuntner # Len Johnson @@ -14,9 +14,14 @@ # # as well as the authors of the aix.sh file # - -# To get ANSI C, we need to use c89, and ld doesn't exist -# You can override this with Configure -Dcc=gcc -Dld=ld. +# z/OS 2.4 Support added thanks to: +# Mike Fulton +# Karl Williamson +# +# The z/OS 'cc' and 'ld' are insufficient for our needs, so we use c99 instead +# c99 has compiler options specified via standard Unix-style options, but some +# options need to be specified using -Wc, or -Wl, +me=$0 case "$cc" in '') cc='c99' ;; esac @@ -24,24 +29,81 @@ case "$ld" in '') ld='c99' ;; esac -# -DMAXSIG=39 maximum signal number -# -DOEMVS is used in place of #ifdef __MVS__ in certain places. -# -D_OE_SOCKETS alters system headers. -# -D_XOPEN_SOURCE_EXTENDEDA alters system headers. -# c89 hides most of the useful header stuff, _ALL_SOURCE turns it on again. -# YYDYNAMIC ensures that the OS/390 yacc generated parser is reentrant. -# -DEBCDIC should come from Configure and need not be mentioned here. # Prepend your favorites with Configure -Dccflags=your_favorites - def_os390_cflags='-qlanglvl=extended:extc89:extc99 -qlongname -qxplink -qdll -qfloat=ieee -qexportall -qhaltonmsg=3296:4108' - def_os390_cflags="$def_os390_cflags -Wc,XPLINK,dll,EXPORTALL -Wl,XPLINK,dll" - def_os390_defs='-DMAXSIG=39 -DOEMVS -D_OE_SOCKETS -D_XOPEN_SOURCE_EXTENDED -D_ALL_SOURCE -DYYDYNAMIC -D_POSIX_SOURCE=1' + +# This overrides the name the compiler was called with. 'ext' is required for +# "unicode literals" to be enabled +def_os390_cflags='-qlanglvl=extc1x'; + +# For #ifdefs in code +def_os390_defs="-DOS390 -DZOS"; + +# Turn on POSIX compatibility modes +# https://www.ibm.com/support/knowledgecenter/SSLTBW_2.4.0/com.ibm.zos.v2r4.bpxbd00/ftms.htm +def_os390_defs="$def_os390_defs -D_ALL_SOURCE"; + +# For 31-bit addressing mode, we should use xplink (eXtended Performance linking) +# For 64-bit addressing mode, the standard linkage works well + +case "$use64bitall" in +'') + def_os390_cflags="$def_os390_cflags -qxplink" + def_os390_cccdlflags="-qxplink" + def_os390_ldflags="-qxplink" +# defines a BSD-like socket interface for the function prototypes and structures involved (not required with 64-bit) + def_os390_defs="$def_os390_defs -D_OE_SOCKETS"; + ;; +*) + def_os390_cflags="$def_os390_cflags -Wc,lp64" + def_os390_cccdlflags="$def_os390_cflags -Wl,lp64" + def_os390_ldflags="-Wl,lp64" +esac + +myfirstchar=$(od -A n -N 1 -t x $me | xargs | tr [:lower:] [:upper:] | tr -d 0) +if [ "${myfirstchar}" = "23" ]; then # 23 is '#' in ASCII + unset ebcdic + def_os390_cflags="$def_os390_cflags -qascii" + # ensure that 'safe' putenv is used and avoid direct environ manipulation + def_os390_defs="$def_os390_defs -DPERL_USE_SAFE_PUTENV"; +else + ebcdic=true +fi + +# Export all externally defined functions and variables in the compilation +# unit so that a DLL application can use them. +def_os390_cflags="$def_os390_cflags -qexportall"; +def_os390_cccdlflags="$def_os390_cccdlflags -qexportall" + +# 3296= #include file not found; +# 4108= The use of keyword &1 is non-portable +# We care about this because it +# actually means it didn't do what we expected. e.g., +# INFORMATIONAL CCN4108 ./proto.h:4534 The use of keyword '__attribute__' is non-portable. +# 3159= Bit field type specified for &1 is not valid. Type &2 assumed. +# We do not care about this warning - the bit field is 1 bit and is being specified on something smaller than an int +def_os390_cflags="$def_os390_cflags -qhaltonmsg=3296:4108 -qsuppress=CCN3159 -qfloat=ieee" + +def_os390_defs="$def_os390_defs -DMAXSIG=39 -DNSIG=39"; # maximum signal number; not furnished by IBM +def_os390_defs="$def_os390_defs -DOEMVS"; # is used in place of #ifdef __MVS__ + +# ensure that the OS/390 yacc generated parser is reentrant. +def_os390_defs="$def_os390_defs -DYYDYNAMIC"; + +# LC_MESSAGES only affects the yes/no strings in langinfo; not the things we +# expect it to +def_os390_defs="$def_os390_defs -DNO_LOCALE_MESSAGES" + +# Set up feature test macros required for features available on supported z/OS systems +def_os390_defs="$def_os390_defs -D_OPEN_THREADS=3 -D_UNIX03_SOURCE=1 -D_AE_BIMODAL=1 -D_XOPEN_SOURCE_EXTENDED -D_ALL_SOURCE -D_ENHANCED_ASCII_EXT=0xFFFFFFFF -D_OPEN_SYS_FILE_EXT=1 -D_OPEN_SYS_SOCK_IPV6 -D_XOPEN_SOURCE=600 -D_XOPEN_SOURCE_EXTENDED" + +# Combine -D with cflags case "$ccflags" in '') ccflags="$def_os390_cflags $def_os390_defs" ;; *) ccflags="$ccflags $def_os390_cflags $def_os390_defs" ;; esac -# Turning on optimization breaks perl. -# You can override this with Configure -Doptimize='-O' or somesuch. +# Turning on optimization causes perl to not even compile from miniperl. You +# can override this with Configure -Doptimize='-O2' or somesuch. case "$optimize" in '') optimize=' ' ;; esac @@ -49,7 +111,7 @@ esac # To link via definition side decks we need the dll option # You can override this with Configure -Ucccdlflags or somesuch. case "$cccdlflags" in -'') cccdlflags='-qxplink -qdll -qexportall -Wc,XPLINK,dll,EXPORTALL -Wl,XPLINK,dll' ;; +'') cccdlflags="$def_os390_cccdlflags -Wl,dll";; esac case "$so" in @@ -71,66 +133,73 @@ case "$usenm" in '') usenm='false' ;; esac -# Setting ldflags='-Wl,EDIT=NO' will get rid of the symbol -# information at the end of the executable (=> smaller binaries). -# Override this option with -Dldflags='whatever else you wanted'. case "$ldflags" in -'') ldflags='-qxplink -qdll -Wl,XPLINK,dll' ;; -esac -case "$optimize" in -*-g*) ;; -*) ldflags="$ldflags -Wl,EDIT=NO" +'') ldflags="$def_os390_ldflags";; esac +# msf symbol information is now in NOLOAD section and so, while on disk, +# does not require time to load but is useful in problem determination if required, +# so it is no longer necessary to link with -Wl,EDIT=NO + # In order to build with dynamic be sure to specify: # Configure -Dusedl -# Do not forget to add $archlibexp/CORE to your LIBPATH. +# Do not forget to add $archlibexp/CORE to your LIBPATH, e.g. blead/perl5 # You might want to override some of this with things like: # Configure -Dusedl -Ddlext=so -Ddlsrc=dl_dllload.xs. case "$usedl" in '') - usedl='n' - case "$dlext" in - '') dlext='none' ;; - esac - ;; + usedl='n' + case "$dlext" in + '') dlext='none' ;; + esac + ;; define) - case "$useshrplib" in - '') useshrplib='true' ;; - esac - case "$dlsrc" in - '') dlsrc='dl_dllload.xs' ;; - esac - # For performance use 'so' at or beyond v2.8, 'dll' for 2.7 and prior versions - case "`uname -v`x`uname -r`" in - 02x0[89].*|02x1[0-9].*|[0-9][3-9]x*) - so='so' - case "$dlext" in - '') dlext='so' ;; - esac - ;; - *) - so='dll' - case "$dlext" in - '') dlext='dll' ;; - esac - ;; - esac - libperl="libperl.$so" - ccflags="$ccflags -D_SHR_ENVIRON -DPERL_EXTERNAL_GLOB -qexportall -qdll -qxplink" - cccdlflags='-c -qexportall -qxplink -qdll -Wc,XPLINK,dll,EXPORTALL -Wl,XPLINK,dll' - # The following will need to be modified for the installed libperl.x. - # The modification to Config.pm is done by the installperl script after the build and test. - ccdlflags="-qxplink -qdll -Wl,XPLINK,dll `pwd`/libperl.x" - lddlflags="-qxplink -qdll -Wl,XPLINK,dll `pwd`/libperl.x" - ;; + case "$useshrplib" in + '') useshrplib='true' ;; + esac + case "$dlsrc" in + '') dlsrc='dl_dllload.xs' ;; + esac + so='so' + case "$dlext" in + '') dlext='so' ;; + esac + libperl="libperl.$so" + + # Allows char **environ to be accessed from a dynamically loaded + # module such as a DLL + ccflags="$ccflags -D_SHR_ENVIRON" + + cccdlflags="-c $def_os390_cccdlflags" + lddlflags="$def_os390_cccdlflags" + + # The following will need to be modified for the installed libperl.x. + # The modification to Config.pm is done by the installperl script after the + # build and test. These are written to a CBU so that the libperl.x file + # comes after all the dash-options in the flags. Configure takes the + # lddlflags we give it and looks for paths to libraries to append -L options + # to lddlflags. But this causes the file libperl.x to appear in the final + # command line after the -L options. And z/OS doesn't like filenames after + # options. This CBU defers the adding of libperl.x until after any munging + # that Configure does. + cat >config.arch <<' EOCBU' + case "ccdlflags" in + '') ccdlflags="`pwd`/libperl.x" ;; + *) ccdlflags="$ccdlflags `pwd`/libperl.x" ;; + esac + lddlflags="$lddlflags `pwd`/libperl.x" + EOCBU + ;; esac + # even on static builds using LIBPATH should be OK. case "$ldlibpthname" in '') ldlibpthname=LIBPATH ;; esac -# The following should always be used +# The following should always be used. Perhaps newer threads will work, but +# when khw tried, other things would have had to be changed to get it to work, +# so left as-is. d_oldpthreads='define' # Header files to include. @@ -144,9 +213,6 @@ esac case "$d_pthread_atfork" in '') d_pthread_atfork='undef' ;; esac -case "$d_pthread_atfork" in -'') d_pthread_atfork='undef' ;; -esac # (from aix.sh) # uname -m output is too specific and not appropriate here @@ -156,110 +222,105 @@ case "$archname" in '') archname="$osname" ;; esac -# We have our own cppstdin script. This is not a variable since +# We have our own cppstdin script. This is not a variable since # Configure sees the presence of the script file. # We put system header -D definitions in so that Configure # can find the shmat() prototype in and various -# other things. Unfortunately, cppflags occurs too late to be of -# value external to the script. This may need to be revisited -# under a compiler other than c89. +# other things. Unfortunately, cppflags occurs too late to be of +# value external to the script. This may need to be revisited +# +# khw believes some of this is obsolete. DOLLARINNAMES allows '$' in variable +# names, for whatever reason +# NOLOC says to use the 1047 code page, and no locale case "$usedl" in define) -echo 'cat >.$$.c; '"$cc"' -D_OE_SOCKETS -D_XOPEN_SOURCE_EXTENDED -D_ALL_SOURCE -D_SHR_ENVIRON -E -Wc,"LANGLVL(DOLLARINNAMES)",NOLOC ${1+"$@"} .$$.c | fgrep -v "??="; rm .$$.c' > cppstdin - ;; +echo 'cat >.$$.c; '"$cc"' -D_OE_SOCKETS -D_ALL_SOURCE -D_SHR_ENVIRON -E -Wc,"LANGLVL(DOLLARINNAMES)",NOLOC ${1+"$@"} .$$.c | fgrep -v "??="; rm .$$.c' > cppstdin + ;; *) -echo 'cat >.$$.c; '"$cc"' -D_OE_SOCKETS -D_XOPEN_SOURCE_EXTENDED -D_ALL_SOURCE -E -Wc,"LANGLVL(DOLLARINNAMES)",NOLOC ${1+"$@"} .$$.c | fgrep -v "??="; rm .$$.c' > cppstdin - ;; +echo 'cat >.$$.c; '"$cc"' -D_OE_SOCKETS -D_ALL_SOURCE -E -Wc,"LANGLVL(DOLLARINNAMES)",NOLOC ${1+"$@"} .$$.c | fgrep -v "??="; rm .$$.c' > cppstdin + ;; esac # -# Note that Makefile.SH employs a bare yacc command to generate +# Note that Makefile.SH employs a bare yacc command to generate # perly.[hc], hence you may wish to: # # alias yacc='myyacc' # # Then if you would like to use myyacc and skip past the -# following warnings try invoking Configure like so: +# following warnings try invoking Configure like so: # # sh Configure -Dbyacc=yacc # # This trick ought to work even if your yacc is byacc. # +# msf - need to check but I think /etc/yyparse.c is always around now if test "X$byacc" = "Xbyacc" ; then - if test -e /etc/yyparse.c ; then - : we should be OK - perhaps do a test -r? - else - cat <&4 + if test -e /etc/yyparse.c ; then + : we should be OK - perhaps do a test -r? + else + cat <&4 -Warning. You do not have a copy of yyparse.c, the default +Warning. You do not have a copy of yyparse.c, the default yacc parser template file, in place in /etc. EOWARN - if test -e /samples/yyparse.c ; then - cat <&4 + if test -e /samples/yyparse.c ; then + cat <&4 There does appear to be a template file in /samples though. Please run: - cp /samples/yyparse.c /etc + cp /samples/yyparse.c /etc before attempting to Configure the build of $package. EOWARN - else - cat <&4 + else + cat <&4 -There does not appear to be one in /samples either. -If you feel you can make use of an alternate yacc-like +There does not appear to be one in /samples either. +If you feel you can make use of an alternate yacc-like parser generator then please read the comments in the hints/os390.sh file carefully. EOWARN - fi - exit 1 - fi + fi + exit 1 + fi fi -# Most of the time gcvt() seems to work fine but -# sometimes values like 0.1, 0.2, come out as "10", "20", -# a trivial Perl demonstration snippet is 'print 0.1'. -# The -W 0,float(ieee) seems to be the switch breaking gcvt(). -# sprintf() seems to get things right(er). -gconvert_preference=sprintf - -# Configure gets these wrong for some reason. +# These exist, but there is something wrong with either them, or our reentr.[ch], +# and no one has felt it important enough to investigate/fix. The +# non-reentrant versions seem to work, but will have races in threads. d_gethostbyaddr_r='undef' d_gethostbyname_r='undef' d_gethostent_r='undef' -# The z/OS C compiler supports the attribute keyword, but in a -# limited manner. -# -# Ideally, Configure's tests should test the attributes as they are expected -# to be used in perl, and, ideally, those tests would fail on z/OS. -# Until then, just tell Configure to ignore the attributes. Currently, -# Configure thinks attributes are supported because it does not recognize -# warning messages like this: -# -# INFORMATIONAL CCN4108 ./proto.h:4534  The use of keyword '__attribute__' is non-portable. - -d_attribute_deprecated='undef' -d_attribute_format='undef' -d_attribute_malloc='undef' -d_attribute_nonnull='undef' -d_attribute_noreturn='undef' -d_attribute_pure='undef' -d_attribute_unused='undef' -d_attribute_warn_unused_result='undef' - -# nan() is in libm but doesn't work as expected: nan("") or nan("0") -# returns zero, not a nan: +# nan() used to not work as expected: nan("") or nan("0") returned zero, not a +# nan. This may have been a C89 issue. # http://www-01.ibm.com/support/knowledgecenter/SSLTBW_1.12.0/com.ibm.zos.r12.bpxbd00/nan.htm%23nan?lang=en -# contrast with e.g. -# http://www.cplusplus.com/reference/cmath/nan-function/ -# (C++ but C99 math agrees) -# XXX: Configure scan for proper behavior -d_nan='undef' +#d_nan='undef' -# Configures says this exists, but it doesn't work properly. See +# Configure says this exists, but it doesn't work properly. See # <54DCE073.4010100@khwilliamson.com> d_dir_dd_fd='undef' + +############################################################################ +# Thread support +# use Configure -Dusethreads to enable +# This script UU/usethreads.cbu will get 'called-back' by Configure +# after it has prompted the user for whether to use threads. +# setlocale() returns NULL if a thread has been created, so we can't use it +# generally. (It would be possible to have it work for initialization, so that +# the user could specify a locale for the whole program; but deferring doing +# that work until someone wants it) Maybe IBM will support POSIX 2008 at some +# point. There are hooks that make it look like they were working on it. +cat > UU/usethreads.cbu <<'EOCBU' +case "$usethreads" in +$define|true|[yY]*) + echo "Your system's setlocale() is broken under threads; marking it as unavailable" >&4 + d_setlocale="undef" + d_setlocale_accepts_any_locale_name="undef" + d_has_C_UTF8="false" +esac +EOCBU diff --git a/gnu/usr.bin/perl/hints/uwin.sh b/gnu/usr.bin/perl/hints/uwin.sh deleted file mode 100644 index 0c70b529cbd..00000000000 --- a/gnu/usr.bin/perl/hints/uwin.sh +++ /dev/null @@ -1,134 +0,0 @@ -# -# The lines starting with #b that follow are the uwin.sh -# file from Joe Buehler. Some lines are, themselves, -# commented out. If an uncommented line disappears -# altogether, it means it didn't seem to be needed any more, -# to get a proper build on the following machine. -# UWIN-NT korn-7200 3.19-5.0 2195 i686 -# But maybe they'll be useful to others on different machines. - -#b # hint file for U/WIN (UNIX for Windows 95/NT) -#b # -#b # created for U/WIN version 1.55 -#b # running under Windows NT 4.0 SP 3 -#b # using MSVC++ 5.0 for the compiler -#b # -#b # created by Joe Buehler (jbuehler@hekimian.com) -#b # -#b # for information about U/WIN see www.gtlinc.com -#b # -#b -#b #ccflags=-D_BSDCOMPAT -#b # confusion in Configure over preprocessor -#b cppstdin=`pwd`/cppstdin -#b cpprun=`pwd`/cppstdin -#b # pwd.h confuses Configure -#b d_pwcomment=undef -#b d_pwgecos=define -#b # work around case-insensitive file names -#b firstmakefile=GNUmakefile -#b # avoid compilation error -#b i_utime=undef -#b # compile/link flags -#b ldflags=-g -#b optimize=-g -#b static_ext="B Data/Dumper Digest/MD5 Errno Fcntl Filter::Util::Call IO IPC/SysV MIME::Base64 Opcode PerlIO::scalar POSIX SDBM_File Socket Storable Unicode::Collate Unicode::Normalize attributes re" -#b #static_ext=none -#b # dynamic loading needs work -#b usedl=undef -#b # perl malloc will not work -#b usemymalloc=n -#b # cannot use nm -#b usenm=undef -#b # vfork() is buggy (as of 1.55 anyway) -#b usevfork=false - -# __UWIN__ added so it could be used in ext/POSIX/POSIX.xs -# to protect against either tzname definition. According to Dave Korn - -#dgk gcc on uwin also predefined _UWIN as does the digital mars compiler. -#dgk -#dgk Only ncc does not define _UWIN and this is intentional. ncc is used -#dgk to build binaries that do not require the uwin runtime. -#dgk This could be used for building a native win32 perl using unix -#dgk makefiles. However, in this case you don't wan't _UWIN defined. -#dgk -#dgk I have used _UWIN everywhere else in any uwin specific changes. -#dgk and _WIN32 on windows specific changes, and _MSVC on any compiler -#dgk Visual C specific changes. We also define _WINIX for any unix -#dgk on windows implementation so that _UWIN or __cygwin__ imply _WINIX. - -# I left __UWIN__ as is, since I had already filed a patch, -# and it might be useful to distinguish perl-specific tweaks -# from generic uwin ones. - -ccflags="$ccflags -D__UWIN__" - -# This from Dave Korn -#dgk Windows splits shared libraries into two parts; the part used -#dgk for linking and the part that is used for running. -#dgk Given a library foo, then the part you link with is named -#dgk foo.lib -#dgk and is in the lib directory. The part that you run with -#dgk is named -#dgk foo.dll or foo#.dll -#dgk and is in the bin directory. This way when you set you PATH -#dgk variable, it automatically does the library search. -#dgk -#dgk Static libraries use libfoo.a. -#dgk By the way if you specify -lfoo, then it will first look for foo.lib -#dgk and then libfoo.a. If you specify +lfoo, it will only look for -#dgk static versions of the library. - -# So we use .lib as the extension, and put -lm in, because it is a .a -# This probably accounts for the comment about dynamic libraries -# needing work, and indeed, the build failed if I didn't undef it. - -lib_ext=".lib" -libs="-lm" -so=dll -# dynamic loading still needs work -usedl=undef - -# confusion in Configure over preprocessor -cppstdin=`pwd`/cppstdin -cpprun=`pwd`/cppstdin - -# lest it default to .exe, and then there's no perl in the test directory, -# t, just a perl.exe, and make test promptly dies. _exe gets set to .exe -# by Configure (on 5/23/2003) if exe_ext is merely null, so clean it out, too. -exe_ext='' -_exe='' - -# work around case-insensitive file names -firstmakefile=GNUmakefile -# compile/link flags -ldflags=-g -optimize=-g - -# Original, with :: separators, cause make to choke. -# No longer seems to be necessary at all. -# static_ext="B Data/Dumper Digest/MD5 Errno Fcntl Filter/Util/Call IO IPC/SysV MIME/Base64 Opcode PerlIO/scalar POSIX SDBM_File Socket Storable Unicode/Collate Unicode/Normalize attributes re" - -# perl malloc will not work -usemymalloc=n -# cannot use nm -usenm=undef -# vfork() is buggy (as of 1.55 anyway) -usevfork=false - -# Some other comments: -# If you see something like - -# got: '/E/users/jpl/src/cmd/perl/t' -# expected: '/e/users/jpl/src/cmd/perl/t' -# Failed test (../dist/Cwd/t/cwd.t at line 88) - -# when running tests under harness, try the simple expedient of -# changing to directory -# /E/users/jpl/src/cmd/perl/t # note the leading capital /E -# before running the tests. UWIN is a bit schizophrenic about case. -# It likes to return an uppercase "disk" letter for the leading directory, -# but your home directory may well have that in lower case. -# In most cases, they are entirely interchangeable, but the perl tests -# don't ignore case. If they fail, change to the directory they expect. diff --git a/gnu/usr.bin/perl/hv.c b/gnu/usr.bin/perl/hv.c index eccae6294c3..93b147491bb 100644 --- a/gnu/usr.bin/perl/hv.c +++ b/gnu/usr.bin/perl/hv.c @@ -17,7 +17,7 @@ */ /* -=head1 Hash Manipulation Functions +=head1 HV Handling A HV structure represents a Perl hash. It consists mainly of an array of pointers, each of which points to a linked list of HE structures. The array is indexed by the hash function of the key, so each linked list @@ -38,12 +38,123 @@ holds the key and hash value. * NOTE if you change this formula so we split earlier than previously * you MUST change the logic in hv_ksplit() */ -#define DO_HSPLIT(xhv) ( ((xhv)->xhv_keys + ((xhv)->xhv_keys >> 1)) > (xhv)->xhv_max ) -#define HV_FILL_THRESHOLD 31 + +/* MAX_BUCKET_MAX is the maximum max bucket index, at which point we stop growing the + * number of buckets, + */ +#define MAX_BUCKET_MAX ((1<<26)-1) +#define DO_HSPLIT(xhv) ( ( ((xhv)->xhv_keys + ((xhv)->xhv_keys >> 1)) > (xhv)->xhv_max ) && \ + ((xhv)->xhv_max < MAX_BUCKET_MAX) ) static const char S_strtab_error[] = "Cannot modify shared string table in hv_%s"; +#define DEBUG_HASH_RAND_BITS (DEBUG_h_TEST) + +/* Algorithm "xor" from p. 4 of Marsaglia, "Xorshift RNGs" + * See also https://en.wikipedia.org/wiki/Xorshift + */ +#if IVSIZE == 8 +/* 64 bit version */ +#define XORSHIFT_RAND_BITS(x) \ +STMT_START { \ + (x) ^= (x) << 13; \ + (x) ^= (x) >> 17; \ + (x) ^= (x) << 5; \ +} STMT_END +#else +/* 32 bit version */ +#define XORSHIFT_RAND_BITS(x) \ +STMT_START { \ + (x) ^= (x) << 13; \ + (x) ^= (x) >> 7; \ + (x) ^= (x) << 17; \ +} STMT_END +#endif + +#define UPDATE_HASH_RAND_BITS_KEY(key,klen) \ +STMT_START { \ + XORSHIFT_RAND_BITS(PL_hash_rand_bits); \ + if (DEBUG_HASH_RAND_BITS) { \ + PerlIO_printf( Perl_debug_log, \ + "PL_hash_rand_bits=%016" UVxf" @ %s:%-4d", \ + (UV)PL_hash_rand_bits, __FILE__, __LINE__ \ + ); \ + if (DEBUG_v_TEST && key) { \ + PerlIO_printf( Perl_debug_log, " key:'%.*s' %" UVuf"\n", \ + (int)klen, \ + key ? key : "", /* silence warning */ \ + (UV)klen \ + ); \ + } else { \ + PerlIO_printf( Perl_debug_log, "\n"); \ + } \ + } \ +} STMT_END + +#define MAYBE_UPDATE_HASH_RAND_BITS_KEY(key,klen) \ +STMT_START { \ + if (PL_HASH_RAND_BITS_ENABLED) \ + UPDATE_HASH_RAND_BITS_KEY(key,klen); \ +} STMT_END + + +#define UPDATE_HASH_RAND_BITS() \ + UPDATE_HASH_RAND_BITS_KEY(NULL,0) + +#define MAYBE_UPDATE_HASH_RAND_BITS() \ + MAYBE_UPDATE_HASH_RAND_BITS_KEY(NULL,0) + +/* HeKFLAGS(entry) is a single U8, so only provides 8 flags bits. + We currently use 3. All 3 we have behave differently, so if we find a use for + more flags it's hard to predict which they group with. + + Hash keys are stored as flat octet sequences, not SVs. Hence we need a flag + bit to say whether those octet sequences represent ISO-8859-1 or UTF-8 - + HVhek_UTF8. The value of this flag bit matters for (regular) hash key + lookups. + + To speed up comparisons, keys are normalised to octets. But we (also) + preserve whether the key was supplied, so we need another flag bit to say + whether to reverse the normalisation when iterating the keys (converting them + back to SVs) - HVhek_WASUTF8. The value of this flag bit must be ignored for + (regular) hash key lookups. + + But for the shared string table (the private "hash" that manages shared hash + keys and their reference counts), we need to be able to store both variants + (HVhek_WASUTF8 set and clear), so the code performing lookups in this hash + must be different and consider both keys. + + However, regular hashes (now) can have a mix of shared and unshared keys. + (This avoids the need to reallocate all the keys into unshared storage at + the point where hash passes the "large" hash threshold, and no longer uses + the shared string table - existing keys remain shared, to avoid makework.) + + Meaning that HVhek_NOTSHARED *may* be set in regular hashes (but should be + ignored for hash lookups) but must always be clear in the keys in the shared + string table (because the pointers to these keys are directly copied into + regular hashes - this is how shared keys work.) + + Hence all 3 are different, and it's hard to predict the best way to future + proof what is needed next. + + We also have HVhek_ENABLEHVKFLAGS, which is used as a mask within the code + below to determine whether to set HvHASKFLAGS() true on the hash as a whole. + This is a public "optimisation" flag provided to serealisers, to indicate + (up front) that a hash contains non-8-bit keys, if they want to use different + storage formats for hashes where all keys are simple octet sequences + (avoiding needing to store an extra byte per hash key), and they need to know + that this holds *before* iterating the hash keys. Only Storable seems to use + this. (For this use case, HVhek_NOTSHARED doesn't matter) + + For now, we assume that any future flag bits will need to be distinguished + in the shared string table, hence we create this mask for the shared string + table code. It happens to be the same as HVhek_ENABLEHVKFLAGS, but that might + change if we add a flag bit that matters to the shared string table but not + to Storable (or similar). */ + +#define HVhek_STORAGE_MASK (0xFF & ~HVhek_NOTSHARED) + #ifdef PURIFY #define new_HE() (HE*)safemalloc(sizeof(HE)) @@ -55,10 +166,10 @@ STATIC HE* S_new_he(pTHX) { HE* he; - void ** const root = &PL_body_roots[HE_SVSLOT]; + void ** const root = &PL_body_roots[HE_ARENA_ROOT_IX]; if (!*root) - Perl_more_bodies(aTHX_ HE_SVSLOT, sizeof(HE), PERL_ARENA_SIZE); + Perl_more_bodies(aTHX_ HE_ARENA_ROOT_IX, sizeof(HE), PERL_ARENA_SIZE); he = (HE*) *root; assert(he); *root = HeNEXT(he); @@ -68,8 +179,8 @@ S_new_he(pTHX) #define new_HE() new_he() #define del_HE(p) \ STMT_START { \ - HeNEXT(p) = (HE*)(PL_body_roots[HE_SVSLOT]); \ - PL_body_roots[HE_SVSLOT] = p; \ + HeNEXT(p) = (HE*)(PL_body_roots[HE_ARENA_ROOT_IX]); \ + PL_body_roots[HE_ARENA_ROOT_IX] = p; \ } STMT_END @@ -79,7 +190,6 @@ S_new_he(pTHX) STATIC HEK * S_save_hek_flags(const char *str, I32 len, U32 hash, int flags) { - const int flags_masked = flags & HVhek_MASK; char *k; HEK *hek; @@ -91,10 +201,10 @@ S_save_hek_flags(const char *str, I32 len, U32 hash, int flags) HEK_KEY(hek)[len] = 0; HEK_LEN(hek) = len; HEK_HASH(hek) = hash; - HEK_FLAGS(hek) = (unsigned char)flags_masked | HVhek_UNSHARED; + HEK_FLAGS(hek) = HVhek_NOTSHARED | (flags & HVhek_STORAGE_MASK); if (flags & HVhek_FREEKEY) - Safefree(str); + Safefree(str); return hek; } @@ -106,10 +216,10 @@ Perl_free_tied_hv_pool(pTHX) { HE *he = PL_hv_fetch_ent_mh; while (he) { - HE * const ohe = he; - Safefree(HeKEY_hek(he)); - he = HeNEXT(he); - del_HE(ohe); + HE * const ohe = he; + Safefree(HeKEY_hek(he)); + he = HeNEXT(he); + del_HE(ohe); } PL_hv_fetch_ent_mh = NULL; } @@ -124,18 +234,18 @@ Perl_hek_dup(pTHX_ HEK *source, CLONE_PARAMS* param) PERL_UNUSED_ARG(param); if (!source) - return NULL; + return NULL; shared = (HEK*)ptr_table_fetch(PL_ptr_table, source); if (shared) { - /* We already shared this hash key. */ - (void)share_hek_hek(shared); + /* We already shared this hash key. */ + (void)share_hek_hek(shared); } else { - shared - = share_hek_flags(HEK_KEY(source), HEK_LEN(source), - HEK_HASH(source), HEK_FLAGS(source)); - ptr_table_store(PL_ptr_table, source, shared); + shared + = share_hek_flags(HEK_KEY(source), HEK_LEN(source), + HEK_HASH(source), HEK_FLAGS(source)); + ptr_table_store(PL_ptr_table, source, shared); } return shared; } @@ -147,68 +257,78 @@ Perl_he_dup(pTHX_ const HE *e, bool shared, CLONE_PARAMS* param) PERL_ARGS_ASSERT_HE_DUP; + /* All the *_dup functions are deemed to be API, despite most being deeply + tied to the internals. Hence we can't simply remove the parameter + "shared" from this function. */ + /* sv_dup and sv_dup_inc seem to be the only two that are used by XS code. + Probably the others should be dropped from the API. See #19409 */ + PERL_UNUSED_ARG(shared); + if (!e) - return NULL; + return NULL; /* look for it in the table first */ ret = (HE*)ptr_table_fetch(PL_ptr_table, e); if (ret) - return ret; + return ret; /* create anew and remember what it is */ ret = new_HE(); ptr_table_store(PL_ptr_table, e, ret); - HeNEXT(ret) = he_dup(HeNEXT(e),shared, param); if (HeKLEN(e) == HEf_SVKEY) { - char *k; - Newx(k, HEK_BASESIZE + sizeof(const SV *), char); - HeKEY_hek(ret) = (HEK*)k; - HeKEY_sv(ret) = sv_dup_inc(HeKEY_sv(e), param); - } - else if (shared) { - /* This is hek_dup inlined, which seems to be important for speed - reasons. */ - HEK * const source = HeKEY_hek(e); - HEK *shared = (HEK*)ptr_table_fetch(PL_ptr_table, source); - - if (shared) { - /* We already shared this hash key. */ - (void)share_hek_hek(shared); - } - else { - shared - = share_hek_flags(HEK_KEY(source), HEK_LEN(source), - HEK_HASH(source), HEK_FLAGS(source)); - ptr_table_store(PL_ptr_table, source, shared); - } - HeKEY_hek(ret) = shared; + char *k; + Newx(k, HEK_BASESIZE + sizeof(const SV *), char); + HeKEY_hek(ret) = (HEK*)k; + HeKEY_sv(ret) = sv_dup_inc(HeKEY_sv(e), param); + } + else if (!(HeKFLAGS(e) & HVhek_NOTSHARED)) { + /* This is hek_dup inlined, which seems to be important for speed + reasons. */ + HEK * const source = HeKEY_hek(e); + HEK *shared = (HEK*)ptr_table_fetch(PL_ptr_table, source); + + if (shared) { + /* We already shared this hash key. */ + (void)share_hek_hek(shared); + } + else { + shared + = share_hek_flags(HEK_KEY(source), HEK_LEN(source), + HEK_HASH(source), HEK_FLAGS(source)); + ptr_table_store(PL_ptr_table, source, shared); + } + HeKEY_hek(ret) = shared; } else - HeKEY_hek(ret) = save_hek_flags(HeKEY(e), HeKLEN(e), HeHASH(e), + HeKEY_hek(ret) = save_hek_flags(HeKEY(e), HeKLEN(e), HeHASH(e), HeKFLAGS(e)); HeVAL(ret) = sv_dup_inc(HeVAL(e), param); + + HeNEXT(ret) = he_dup(HeNEXT(e), FALSE, param); return ret; } #endif /* USE_ITHREADS */ static void S_hv_notallowed(pTHX_ int flags, const char *key, I32 klen, - const char *msg) + const char *msg) { - SV * const sv = sv_newmortal(); + /* Straight to SVt_PVN here, as needed by sv_setpvn_fresh and + * sv_usepvn would otherwise call it */ + SV * const sv = newSV_type_mortal(SVt_PV); PERL_ARGS_ASSERT_HV_NOTALLOWED; if (!(flags & HVhek_FREEKEY)) { - sv_setpvn(sv, key, klen); + sv_setpvn_fresh(sv, key, klen); } else { - /* Need to free saved eventually assign to mortal SV */ - /* XXX is this line an error ???: SV *sv = sv_newmortal(); */ - sv_usepvn(sv, (char *) key, klen); + /* Need to free saved eventually assign to mortal SV */ + /* XXX is this line an error ???: SV *sv = sv_newmortal(); */ + sv_usepvn(sv, (char *) key, klen); } if (flags & HVhek_UTF8) { - SvUTF8_on(sv); + SvUTF8_on(sv); } Perl_croak(aTHX_ msg, SVfARG(sv)); } @@ -322,7 +442,7 @@ information on how to use this function on tied hashes. /* Common code for hv_delete()/hv_exists()/hv_fetch()/hv_store() */ void * Perl_hv_common_key_len(pTHX_ HV *hv, const char *key, I32 klen_i32, - const int action, SV *val, const U32 hash) + const int action, SV *val, const U32 hash) { STRLEN klen; int flags; @@ -330,300 +450,313 @@ Perl_hv_common_key_len(pTHX_ HV *hv, const char *key, I32 klen_i32, PERL_ARGS_ASSERT_HV_COMMON_KEY_LEN; if (klen_i32 < 0) { - klen = -klen_i32; - flags = HVhek_UTF8; + klen = -klen_i32; + flags = HVhek_UTF8; } else { - klen = klen_i32; - flags = 0; + klen = klen_i32; + flags = 0; } return hv_common(hv, NULL, key, klen, flags, action, val, hash); } void * Perl_hv_common(pTHX_ HV *hv, SV *keysv, const char *key, STRLEN klen, - int flags, int action, SV *val, U32 hash) + int flags, int action, SV *val, U32 hash) { - dVAR; XPVHV* xhv; HE *entry; HE **oentry; SV *sv; bool is_utf8; bool in_collision; - int masked_flags; const int return_svp = action & HV_FETCH_JUST_SV; HEK *keysv_hek = NULL; if (!hv) - return NULL; + return NULL; if (SvTYPE(hv) == (svtype)SVTYPEMASK) - return NULL; + return NULL; assert(SvTYPE(hv) == SVt_PVHV); if (SvSMAGICAL(hv) && SvGMAGICAL(hv) && !(action & HV_DISABLE_UVAR_XKEY)) { - MAGIC* mg; - if ((mg = mg_find((const SV *)hv, PERL_MAGIC_uvar))) { - struct ufuncs * const uf = (struct ufuncs *)mg->mg_ptr; - if (uf->uf_set == NULL) { - SV* obj = mg->mg_obj; - - if (!keysv) { - keysv = newSVpvn_flags(key, klen, SVs_TEMP | - ((flags & HVhek_UTF8) - ? SVf_UTF8 : 0)); - } - - mg->mg_obj = keysv; /* pass key */ - uf->uf_index = action; /* pass action */ - magic_getuvar(MUTABLE_SV(hv), mg); - keysv = mg->mg_obj; /* may have changed */ - mg->mg_obj = obj; - - /* If the key may have changed, then we need to invalidate - any passed-in computed hash value. */ - hash = 0; - } - } + MAGIC* mg; + if ((mg = mg_find((const SV *)hv, PERL_MAGIC_uvar))) { + struct ufuncs * const uf = (struct ufuncs *)mg->mg_ptr; + if (uf->uf_set == NULL) { + SV* obj = mg->mg_obj; + + if (!keysv) { + keysv = newSVpvn_flags(key, klen, SVs_TEMP | + ((flags & HVhek_UTF8) + ? SVf_UTF8 : 0)); + } + + mg->mg_obj = keysv; /* pass key */ + uf->uf_index = action; /* pass action */ + magic_getuvar(MUTABLE_SV(hv), mg); + keysv = mg->mg_obj; /* may have changed */ + mg->mg_obj = obj; + + /* If the key may have changed, then we need to invalidate + any passed-in computed hash value. */ + hash = 0; + } + } } + + /* flags might have HVhek_NOTSHARED set. If so, we need to ignore that. + Some callers to hv_common() pass the flags value from an existing HEK, + and if that HEK is not shared, then it has the relevant flag bit set, + which must not be passed into share_hek_flags(). + + It would be "purer" to insist that all callers clear it, but we'll end up + with subtle bugs if we leave it to them, or runtime assertion failures if + we try to enforce our documentation with landmines. + + If keysv is true, all code paths assign a new value to flags with that + bit clear, so we're always "good". Hence we only need to explicitly clear + this bit in the else block. */ if (keysv) { - if (flags & HVhek_FREEKEY) - Safefree(key); - key = SvPV_const(keysv, klen); - is_utf8 = (SvUTF8(keysv) != 0); - if (SvIsCOW_shared_hash(keysv)) { - flags = HVhek_KEYCANONICAL | (is_utf8 ? HVhek_UTF8 : 0); - } else { - flags = is_utf8 ? HVhek_UTF8 : 0; - } + if (flags & HVhek_FREEKEY) + Safefree(key); + key = SvPV_const(keysv, klen); + is_utf8 = (SvUTF8(keysv) != 0); + if (SvIsCOW_shared_hash(keysv)) { + flags = HVhek_KEYCANONICAL | (is_utf8 ? HVhek_UTF8 : 0); + } else { + flags = 0; + } } else { - is_utf8 = cBOOL(flags & HVhek_UTF8); + is_utf8 = cBOOL(flags & HVhek_UTF8); + flags &= ~HVhek_NOTSHARED; } if (action & HV_DELETE) { - return (void *) hv_delete_common(hv, keysv, key, klen, - flags, action, hash); + return (void *) hv_delete_common(hv, keysv, key, klen, + flags | (is_utf8 ? HVhek_UTF8 : 0), + action, hash); } xhv = (XPVHV*)SvANY(hv); if (SvMAGICAL(hv)) { - if (SvRMAGICAL(hv) && !(action & (HV_FETCH_ISSTORE|HV_FETCH_ISEXISTS))) { - if (mg_find((const SV *)hv, PERL_MAGIC_tied) - || SvGMAGICAL((const SV *)hv)) - { - /* FIXME should be able to skimp on the HE/HEK here when - HV_FETCH_JUST_SV is true. */ - if (!keysv) { - keysv = newSVpvn_utf8(key, klen, is_utf8); - } else { - keysv = newSVsv(keysv); - } + if (SvRMAGICAL(hv) && !(action & (HV_FETCH_ISSTORE|HV_FETCH_ISEXISTS))) { + if (mg_find((const SV *)hv, PERL_MAGIC_tied) + || SvGMAGICAL((const SV *)hv)) + { + /* FIXME should be able to skimp on the HE/HEK here when + HV_FETCH_JUST_SV is true. */ + if (!keysv) { + keysv = newSVpvn_utf8(key, klen, is_utf8); + } else { + keysv = newSVsv(keysv); + } sv = sv_newmortal(); mg_copy(MUTABLE_SV(hv), sv, (char *)keysv, HEf_SVKEY); - /* grab a fake HE/HEK pair from the pool or make a new one */ - entry = PL_hv_fetch_ent_mh; - if (entry) - PL_hv_fetch_ent_mh = HeNEXT(entry); - else { - char *k; - entry = new_HE(); - Newx(k, HEK_BASESIZE + sizeof(const SV *), char); - HeKEY_hek(entry) = (HEK*)k; - } - HeNEXT(entry) = NULL; - HeSVKEY_set(entry, keysv); - HeVAL(entry) = sv; - sv_upgrade(sv, SVt_PVLV); - LvTYPE(sv) = 'T'; - /* so we can free entry when freeing sv */ - LvTARG(sv) = MUTABLE_SV(entry); - - /* XXX remove at some point? */ - if (flags & HVhek_FREEKEY) - Safefree(key); - - if (return_svp) { - return entry ? (void *) &HeVAL(entry) : NULL; - } - return (void *) entry; - } + /* grab a fake HE/HEK pair from the pool or make a new one */ + entry = PL_hv_fetch_ent_mh; + if (entry) + PL_hv_fetch_ent_mh = HeNEXT(entry); + else { + char *k; + entry = new_HE(); + Newx(k, HEK_BASESIZE + sizeof(const SV *), char); + HeKEY_hek(entry) = (HEK*)k; + } + HeNEXT(entry) = NULL; + HeSVKEY_set(entry, keysv); + HeVAL(entry) = sv; + sv_upgrade(sv, SVt_PVLV); + LvTYPE(sv) = 'T'; + /* so we can free entry when freeing sv */ + LvTARG(sv) = MUTABLE_SV(entry); + + /* XXX remove at some point? */ + if (flags & HVhek_FREEKEY) + Safefree(key); + + if (return_svp) { + return entry ? (void *) &HeVAL(entry) : NULL; + } + return (void *) entry; + } #ifdef ENV_IS_CASELESS - else if (mg_find((const SV *)hv, PERL_MAGIC_env)) { - U32 i; - for (i = 0; i < klen; ++i) - if (isLOWER(key[i])) { - /* Would be nice if we had a routine to do the - copy and upercase in a single pass through. */ - const char * const nkey = strupr(savepvn(key,klen)); - /* Note that this fetch is for nkey (the uppercased - key) whereas the store is for key (the original) */ - void *result = hv_common(hv, NULL, nkey, klen, - HVhek_FREEKEY, /* free nkey */ - 0 /* non-LVAL fetch */ - | HV_DISABLE_UVAR_XKEY - | return_svp, - NULL /* no value */, - 0 /* compute hash */); - if (!result && (action & HV_FETCH_LVALUE)) { - /* This call will free key if necessary. - Do it this way to encourage compiler to tail - call optimise. */ - result = hv_common(hv, keysv, key, klen, flags, - HV_FETCH_ISSTORE - | HV_DISABLE_UVAR_XKEY - | return_svp, - newSV(0), hash); - } else { - if (flags & HVhek_FREEKEY) - Safefree(key); - } - return result; - } - } + else if (mg_find((const SV *)hv, PERL_MAGIC_env)) { + U32 i; + for (i = 0; i < klen; ++i) + if (isLOWER(key[i])) { + /* Would be nice if we had a routine to do the + copy and upercase in a single pass through. */ + const char * const nkey = strupr(savepvn(key,klen)); + /* Note that this fetch is for nkey (the uppercased + key) whereas the store is for key (the original) */ + void *result = hv_common(hv, NULL, nkey, klen, + HVhek_FREEKEY, /* free nkey */ + 0 /* non-LVAL fetch */ + | HV_DISABLE_UVAR_XKEY + | return_svp, + NULL /* no value */, + 0 /* compute hash */); + if (!result && (action & HV_FETCH_LVALUE)) { + /* This call will free key if necessary. + Do it this way to encourage compiler to tail + call optimise. */ + result = hv_common(hv, keysv, key, klen, flags, + HV_FETCH_ISSTORE + | HV_DISABLE_UVAR_XKEY + | return_svp, + newSV_type(SVt_NULL), hash); + } else { + if (flags & HVhek_FREEKEY) + Safefree(key); + } + return result; + } + } #endif - } /* ISFETCH */ - else if (SvRMAGICAL(hv) && (action & HV_FETCH_ISEXISTS)) { - if (mg_find((const SV *)hv, PERL_MAGIC_tied) - || SvGMAGICAL((const SV *)hv)) { - /* I don't understand why hv_exists_ent has svret and sv, - whereas hv_exists only had one. */ - SV * const svret = sv_newmortal(); - sv = sv_newmortal(); - - if (keysv || is_utf8) { - if (!keysv) { - keysv = newSVpvn_utf8(key, klen, TRUE); - } else { - keysv = newSVsv(keysv); - } - mg_copy(MUTABLE_SV(hv), sv, (char *)sv_2mortal(keysv), HEf_SVKEY); - } else { - mg_copy(MUTABLE_SV(hv), sv, key, klen); - } - if (flags & HVhek_FREEKEY) - Safefree(key); - { + } /* ISFETCH */ + else if (SvRMAGICAL(hv) && (action & HV_FETCH_ISEXISTS)) { + if (mg_find((const SV *)hv, PERL_MAGIC_tied) + || SvGMAGICAL((const SV *)hv)) { + /* I don't understand why hv_exists_ent has svret and sv, + whereas hv_exists only had one. */ + SV * const svret = sv_newmortal(); + sv = sv_newmortal(); + + if (keysv || is_utf8) { + if (!keysv) { + keysv = newSVpvn_utf8(key, klen, TRUE); + } else { + keysv = newSVsv(keysv); + } + mg_copy(MUTABLE_SV(hv), sv, (char *)sv_2mortal(keysv), HEf_SVKEY); + } else { + mg_copy(MUTABLE_SV(hv), sv, key, klen); + } + if (flags & HVhek_FREEKEY) + Safefree(key); + { MAGIC * const mg = mg_find(sv, PERL_MAGIC_tiedelem); if (mg) magic_existspack(svret, mg); - } - /* This cast somewhat evil, but I'm merely using NULL/ - not NULL to return the boolean exists. - And I know hv is not NULL. */ - return SvTRUE_NN(svret) ? (void *)hv : NULL; - } + } + /* This cast somewhat evil, but I'm merely using NULL/ + not NULL to return the boolean exists. + And I know hv is not NULL. */ + return SvTRUE_NN(svret) ? (void *)hv : NULL; + } #ifdef ENV_IS_CASELESS - else if (mg_find((const SV *)hv, PERL_MAGIC_env)) { - /* XXX This code isn't UTF8 clean. */ - char * const keysave = (char * const)key; - /* Will need to free this, so set FREEKEY flag. */ - key = savepvn(key,klen); - key = (const char*)strupr((char*)key); - is_utf8 = FALSE; - hash = 0; - keysv = 0; - - if (flags & HVhek_FREEKEY) { - Safefree(keysave); - } - flags |= HVhek_FREEKEY; - } + else if (mg_find((const SV *)hv, PERL_MAGIC_env)) { + /* XXX This code isn't UTF8 clean. */ + char * const keysave = (char * const)key; + /* Will need to free this, so set FREEKEY flag. */ + key = savepvn(key,klen); + key = (const char*)strupr((char*)key); + is_utf8 = FALSE; + hash = 0; + keysv = 0; + + if (flags & HVhek_FREEKEY) { + Safefree(keysave); + } + flags |= HVhek_FREEKEY; + } #endif - } /* ISEXISTS */ - else if (action & HV_FETCH_ISSTORE) { - bool needs_copy; - bool needs_store; - hv_magic_check (hv, &needs_copy, &needs_store); - if (needs_copy) { - const bool save_taint = TAINT_get; - if (keysv || is_utf8) { - if (!keysv) { - keysv = newSVpvn_utf8(key, klen, TRUE); - } - if (TAINTING_get) - TAINT_set(SvTAINTED(keysv)); - keysv = sv_2mortal(newSVsv(keysv)); - mg_copy(MUTABLE_SV(hv), val, (char*)keysv, HEf_SVKEY); - } else { - mg_copy(MUTABLE_SV(hv), val, key, klen); - } - - TAINT_IF(save_taint); + } /* ISEXISTS */ + else if (action & HV_FETCH_ISSTORE) { + bool needs_copy; + bool needs_store; + hv_magic_check (hv, &needs_copy, &needs_store); + if (needs_copy) { + const bool save_taint = TAINT_get; + if (keysv || is_utf8) { + if (!keysv) { + keysv = newSVpvn_utf8(key, klen, TRUE); + } + if (TAINTING_get) + TAINT_set(SvTAINTED(keysv)); + keysv = sv_2mortal(newSVsv(keysv)); + mg_copy(MUTABLE_SV(hv), val, (char*)keysv, HEf_SVKEY); + } else { + mg_copy(MUTABLE_SV(hv), val, key, klen); + } + + TAINT_IF(save_taint); #ifdef NO_TAINT_SUPPORT PERL_UNUSED_VAR(save_taint); #endif - if (!needs_store) { - if (flags & HVhek_FREEKEY) - Safefree(key); - return NULL; - } + if (!needs_store) { + if (flags & HVhek_FREEKEY) + Safefree(key); + return NULL; + } #ifdef ENV_IS_CASELESS - else if (mg_find((const SV *)hv, PERL_MAGIC_env)) { - /* XXX This code isn't UTF8 clean. */ - const char *keysave = key; - /* Will need to free this, so set FREEKEY flag. */ - key = savepvn(key,klen); - key = (const char*)strupr((char*)key); - is_utf8 = FALSE; - hash = 0; - keysv = 0; - - if (flags & HVhek_FREEKEY) { - Safefree(keysave); - } - flags |= HVhek_FREEKEY; - } + else if (mg_find((const SV *)hv, PERL_MAGIC_env)) { + /* XXX This code isn't UTF8 clean. */ + const char *keysave = key; + /* Will need to free this, so set FREEKEY flag. */ + key = savepvn(key,klen); + key = (const char*)strupr((char*)key); + is_utf8 = FALSE; + hash = 0; + keysv = 0; + + if (flags & HVhek_FREEKEY) { + Safefree(keysave); + } + flags |= HVhek_FREEKEY; + } #endif - } - } /* ISSTORE */ + } + } /* ISSTORE */ } /* SvMAGICAL */ if (!HvARRAY(hv)) { - if ((action & (HV_FETCH_LVALUE | HV_FETCH_ISSTORE)) + if ((action & (HV_FETCH_LVALUE | HV_FETCH_ISSTORE)) #ifdef DYNAMIC_ENV_FETCH /* if it's an %ENV lookup, we may get it on the fly */ - || (SvRMAGICAL((const SV *)hv) - && mg_find((const SV *)hv, PERL_MAGIC_env)) + || (SvRMAGICAL((const SV *)hv) + && mg_find((const SV *)hv, PERL_MAGIC_env)) #endif - ) { - char *array; - Newxz(array, - PERL_HV_ARRAY_ALLOC_BYTES(xhv->xhv_max+1 /* HvMAX(hv)+1 */), - char); - HvARRAY(hv) = (HE**)array; - } + ) { + char *array; + Newxz(array, + PERL_HV_ARRAY_ALLOC_BYTES(xhv->xhv_max+1 /* HvMAX(hv)+1 */), + char); + HvARRAY(hv) = (HE**)array; + } #ifdef DYNAMIC_ENV_FETCH - else if (action & HV_FETCH_ISEXISTS) { - /* for an %ENV exists, if we do an insert it's by a recursive - store call, so avoid creating HvARRAY(hv) right now. */ - } + else if (action & HV_FETCH_ISEXISTS) { + /* for an %ENV exists, if we do an insert it's by a recursive + store call, so avoid creating HvARRAY(hv) right now. */ + } #endif - else { - /* XXX remove at some point? */ + else { + /* XXX remove at some point? */ if (flags & HVhek_FREEKEY) Safefree(key); - return NULL; - } + return NULL; + } } if (is_utf8 && !(flags & HVhek_KEYCANONICAL)) { - char * const keysave = (char *)key; - key = (char*)bytes_from_utf8((U8*)key, &klen, &is_utf8); + char * const keysave = (char *)key; + key = (char*)bytes_from_utf8((U8*)key, &klen, &is_utf8); if (is_utf8) - flags |= HVhek_UTF8; - else - flags &= ~HVhek_UTF8; + flags |= HVhek_UTF8; + else + flags &= ~HVhek_UTF8; if (key != keysave) { - if (flags & HVhek_FREEKEY) - Safefree(keysave); + if (flags & HVhek_FREEKEY) + Safefree(keysave); flags |= HVhek_WASUTF8 | HVhek_FREEKEY; - /* If the caller calculated a hash, it was on the sequence of - octets that are the UTF-8 form. We've now changed the sequence - of octets stored to that of the equivalent byte representation, - so the hash we need is different. */ - hash = 0; - } + /* If the caller calculated a hash, it was on the sequence of + octets that are the UTF-8 form. We've now changed the sequence + of octets stored to that of the equivalent byte representation, + so the hash we need is different. */ + hash = 0; + } } if (keysv && (SvIsCOW_shared_hash(keysv))) { @@ -634,14 +767,12 @@ Perl_hv_common(pTHX_ HV *hv, SV *keysv, const char *key, STRLEN klen, else if (!hash) PERL_HASH(hash, key, klen); - masked_flags = (flags & HVhek_MASK); - #ifdef DYNAMIC_ENV_FETCH if (!HvARRAY(hv)) entry = NULL; else #endif { - entry = (HvARRAY(hv))[hash & (I32) HvMAX(hv)]; + entry = (HvARRAY(hv))[hash & (I32) HvMAX(hv)]; } if (!entry) @@ -675,166 +806,175 @@ Perl_hv_common(pTHX_ HV *hv, SV *keysv, const char *key, STRLEN klen, } for (; entry; entry = HeNEXT(entry)) { - if (HeHASH(entry) != hash) /* strings can't be equal */ - continue; - if (HeKLEN(entry) != (I32)klen) - continue; - if (memNE(HeKEY(entry),key,klen)) /* is this it? */ - continue; - if ((HeKFLAGS(entry) ^ masked_flags) & HVhek_UTF8) - continue; + if (HeHASH(entry) != hash) /* strings can't be equal */ + continue; + if (HeKLEN(entry) != (I32)klen) + continue; + if (memNE(HeKEY(entry),key,klen)) /* is this it? */ + continue; + if ((HeKFLAGS(entry) ^ flags) & HVhek_UTF8) + continue; found: if (action & (HV_FETCH_LVALUE|HV_FETCH_ISSTORE)) { - if (HeKFLAGS(entry) != masked_flags) { - /* We match if HVhek_UTF8 bit in our flags and hash key's - match. But if entry was set previously with HVhek_WASUTF8 - and key now doesn't (or vice versa) then we should change - the key's flag, as this is assignment. */ - if (HvSHAREKEYS(hv)) { - /* Need to swap the key we have for a key with the flags we - need. As keys are shared we can't just write to the - flag, so we share the new one, unshare the old one. */ - HEK * const new_hek = share_hek_flags(key, klen, hash, - masked_flags); - unshare_hek (HeKEY_hek(entry)); - HeKEY_hek(entry) = new_hek; - } - else if (hv == PL_strtab) { - /* PL_strtab is usually the only hash without HvSHAREKEYS, - so putting this test here is cheap */ - if (flags & HVhek_FREEKEY) - Safefree(key); - Perl_croak(aTHX_ S_strtab_error, - action & HV_FETCH_LVALUE ? "fetch" : "store"); - } - else - HeKFLAGS(entry) = masked_flags; - if (masked_flags & HVhek_ENABLEHVKFLAGS) - HvHASKFLAGS_on(hv); - } - if (HeVAL(entry) == &PL_sv_placeholder) { - /* yes, can store into placeholder slot */ - if (action & HV_FETCH_LVALUE) { - if (SvMAGICAL(hv)) { - /* This preserves behaviour with the old hv_fetch - implementation which at this point would bail out - with a break; (at "if we find a placeholder, we - pretend we haven't found anything") - - That break mean that if a placeholder were found, it - caused a call into hv_store, which in turn would - check magic, and if there is no magic end up pretty - much back at this point (in hv_store's code). */ - break; - } - /* LVAL fetch which actually needs a store. */ - val = newSV(0); - HvPLACEHOLDERS(hv)--; - } else { - /* store */ - if (val != &PL_sv_placeholder) - HvPLACEHOLDERS(hv)--; - } - HeVAL(entry) = val; - } else if (action & HV_FETCH_ISSTORE) { - SvREFCNT_dec(HeVAL(entry)); - HeVAL(entry) = val; - } - } else if (HeVAL(entry) == &PL_sv_placeholder) { - /* if we find a placeholder, we pretend we haven't found - anything */ - break; - } - if (flags & HVhek_FREEKEY) - Safefree(key); - if (return_svp) { + if ((HeKFLAGS(entry) ^ flags) & HVhek_WASUTF8) { + /* We match if HVhek_UTF8 bit in our flags and hash key's + match. But if entry was set previously with HVhek_WASUTF8 + and key now doesn't (or vice versa) then we should change + the key's flag, as this is assignment. */ + if ((HeKFLAGS(entry) & HVhek_NOTSHARED) == 0) { + /* Need to swap the key we have for a key with the flags we + need. As keys are shared we can't just write to the + flag, so we share the new one, unshare the old one. */ + HEK * const new_hek + = share_hek_flags(key, klen, hash, flags & ~HVhek_FREEKEY); + unshare_hek (HeKEY_hek(entry)); + HeKEY_hek(entry) = new_hek; + } + else if (hv == PL_strtab) { + /* PL_strtab is usually the only hash without HvSHAREKEYS, + so putting this test here is cheap */ + if (flags & HVhek_FREEKEY) + Safefree(key); + Perl_croak(aTHX_ S_strtab_error, + action & HV_FETCH_LVALUE ? "fetch" : "store"); + } + else { + /* Effectively this is save_hek_flags() for a new version + of the HEK and Safefree() of the old rolled together. */ + HeKFLAGS(entry) ^= HVhek_WASUTF8; + } + if (flags & HVhek_ENABLEHVKFLAGS) + HvHASKFLAGS_on(hv); + } + if (HeVAL(entry) == &PL_sv_placeholder) { + /* yes, can store into placeholder slot */ + if (action & HV_FETCH_LVALUE) { + if (SvMAGICAL(hv)) { + /* This preserves behaviour with the old hv_fetch + implementation which at this point would bail out + with a break; (at "if we find a placeholder, we + pretend we haven't found anything") + + That break mean that if a placeholder were found, it + caused a call into hv_store, which in turn would + check magic, and if there is no magic end up pretty + much back at this point (in hv_store's code). */ + break; + } + /* LVAL fetch which actually needs a store. */ + val = newSV_type(SVt_NULL); + HvPLACEHOLDERS(hv)--; + } else { + /* store */ + if (val != &PL_sv_placeholder) + HvPLACEHOLDERS(hv)--; + } + HeVAL(entry) = val; + } else if (action & HV_FETCH_ISSTORE) { + SvREFCNT_dec(HeVAL(entry)); + HeVAL(entry) = val; + } + } else if (HeVAL(entry) == &PL_sv_placeholder) { + /* if we find a placeholder, we pretend we haven't found + anything */ + break; + } + if (flags & HVhek_FREEKEY) + Safefree(key); + if (return_svp) { return (void *) &HeVAL(entry); - } - return entry; + } + return entry; } not_found: #ifdef DYNAMIC_ENV_FETCH /* %ENV lookup? If so, try to fetch the value now */ if (!(action & HV_FETCH_ISSTORE) - && SvRMAGICAL((const SV *)hv) - && mg_find((const SV *)hv, PERL_MAGIC_env)) { - unsigned long len; - const char * const env = PerlEnv_ENVgetenv_len(key,&len); - if (env) { - sv = newSVpvn(env,len); - SvTAINTED_on(sv); - return hv_common(hv, keysv, key, klen, flags, - HV_FETCH_ISSTORE|HV_DISABLE_UVAR_XKEY|return_svp, - sv, hash); - } + && SvRMAGICAL((const SV *)hv) + && mg_find((const SV *)hv, PERL_MAGIC_env)) { + unsigned long len; + const char * const env = PerlEnv_ENVgetenv_len(key,&len); + if (env) { + sv = newSVpvn(env,len); + SvTAINTED_on(sv); + return hv_common(hv, keysv, key, klen, flags, + HV_FETCH_ISSTORE|HV_DISABLE_UVAR_XKEY|return_svp, + sv, hash); + } } #endif if (!entry && SvREADONLY(hv) && !(action & HV_FETCH_ISEXISTS)) { - hv_notallowed(flags, key, klen, - "Attempt to access disallowed key '%" SVf "' in" - " a restricted hash"); + hv_notallowed(flags, key, klen, + "Attempt to access disallowed key '%" SVf "' in" + " a restricted hash"); } if (!(action & (HV_FETCH_LVALUE|HV_FETCH_ISSTORE))) { - /* Not doing some form of store, so return failure. */ - if (flags & HVhek_FREEKEY) - Safefree(key); - return NULL; + /* Not doing some form of store, so return failure. */ + if (flags & HVhek_FREEKEY) + Safefree(key); + return NULL; } if (action & HV_FETCH_LVALUE) { - val = action & HV_FETCH_EMPTY_HE ? NULL : newSV(0); - if (SvMAGICAL(hv)) { - /* At this point the old hv_fetch code would call to hv_store, - which in turn might do some tied magic. So we need to make that - magic check happen. */ - /* gonna assign to this, so it better be there */ - /* If a fetch-as-store fails on the fetch, then the action is to - recurse once into "hv_store". If we didn't do this, then that - recursive call would call the key conversion routine again. - However, as we replace the original key with the converted - key, this would result in a double conversion, which would show - up as a bug if the conversion routine is not idempotent. - Hence the use of HV_DISABLE_UVAR_XKEY. */ - return hv_common(hv, keysv, key, klen, flags, - HV_FETCH_ISSTORE|HV_DISABLE_UVAR_XKEY|return_svp, - val, hash); - /* XXX Surely that could leak if the fetch-was-store fails? - Just like the hv_fetch. */ - } + val = action & HV_FETCH_EMPTY_HE ? NULL : newSV_type(SVt_NULL); + if (SvMAGICAL(hv)) { + /* At this point the old hv_fetch code would call to hv_store, + which in turn might do some tied magic. So we need to make that + magic check happen. */ + /* gonna assign to this, so it better be there */ + /* If a fetch-as-store fails on the fetch, then the action is to + recurse once into "hv_store". If we didn't do this, then that + recursive call would call the key conversion routine again. + However, as we replace the original key with the converted + key, this would result in a double conversion, which would show + up as a bug if the conversion routine is not idempotent. + Hence the use of HV_DISABLE_UVAR_XKEY. */ + return hv_common(hv, keysv, key, klen, flags, + HV_FETCH_ISSTORE|HV_DISABLE_UVAR_XKEY|return_svp, + val, hash); + /* XXX Surely that could leak if the fetch-was-store fails? + Just like the hv_fetch. */ + } } /* Welcome to hv_store... */ if (!HvARRAY(hv)) { - /* Not sure if we can get here. I think the only case of oentry being - NULL is for %ENV with dynamic env fetch. But that should disappear - with magic in the previous code. */ - char *array; - Newxz(array, - PERL_HV_ARRAY_ALLOC_BYTES(xhv->xhv_max+1 /* HvMAX(hv)+1 */), - char); - HvARRAY(hv) = (HE**)array; + /* Not sure if we can get here. I think the only case of oentry being + NULL is for %ENV with dynamic env fetch. But that should disappear + with magic in the previous code. */ + char *array; + Newxz(array, + PERL_HV_ARRAY_ALLOC_BYTES(xhv->xhv_max+1 /* HvMAX(hv)+1 */), + char); + HvARRAY(hv) = (HE**)array; } oentry = &(HvARRAY(hv))[hash & (I32) xhv->xhv_max]; - entry = new_HE(); /* share_hek_flags will do the free for us. This might be considered bad API design. */ - if (HvSHAREKEYS(hv)) - HeKEY_hek(entry) = share_hek_flags(key, klen, hash, flags); - else if (hv == PL_strtab) { - /* PL_strtab is usually the only hash without HvSHAREKEYS, so putting - this test here is cheap */ - if (flags & HVhek_FREEKEY) - Safefree(key); - Perl_croak(aTHX_ S_strtab_error, - action & HV_FETCH_LVALUE ? "fetch" : "store"); - } - else /* gotta do the real thing */ - HeKEY_hek(entry) = save_hek_flags(key, klen, hash, flags); + if (LIKELY(HvSHAREKEYS(hv))) { + entry = new_HE(); + HeKEY_hek(entry) = share_hek_flags(key, klen, hash, flags); + } + else if (UNLIKELY(hv == PL_strtab)) { + /* PL_strtab is usually the only hash without HvSHAREKEYS, so putting + this test here is cheap */ + if (flags & HVhek_FREEKEY) + Safefree(key); + Perl_croak(aTHX_ S_strtab_error, + action & HV_FETCH_LVALUE ? "fetch" : "store"); + } + else { + /* gotta do the real thing */ + entry = new_HE(); + HeKEY_hek(entry) = save_hek_flags(key, klen, hash, flags); + } HeVAL(entry) = val; + in_collision = cBOOL(*oentry != NULL); + #ifdef PERL_HASH_RANDOMIZE_KEYS /* This logic semi-randomizes the insert order in a bucket. @@ -842,10 +982,10 @@ Perl_hv_common(pTHX_ HV *hv, SV *keysv, const char *key, STRLEN klen, * making it harder to see if there is a collision. We also * reset the iterator randomizer if there is one. */ - in_collision = *oentry != NULL; + + if ( *oentry && PL_HASH_RAND_BITS_ENABLED) { - PL_hash_rand_bits++; - PL_hash_rand_bits= ROTL_UV(PL_hash_rand_bits,1); + UPDATE_HASH_RAND_BITS_KEY(key,klen); if ( PL_hash_rand_bits & 1 ) { HeNEXT(entry) = HeNEXT(*oentry); HeNEXT(*oentry) = entry; @@ -870,19 +1010,15 @@ Perl_hv_common(pTHX_ HV *hv, SV *keysv, const char *key, STRLEN klen, pTHX__VALUE); } */ - if (PL_HASH_RAND_BITS_ENABLED) { - if (PL_HASH_RAND_BITS_ENABLED == 1) - PL_hash_rand_bits += (PTRV)entry + 1; /* we don't bother to use ptr_hash here */ - PL_hash_rand_bits= ROTL_UV(PL_hash_rand_bits,1); - } + MAYBE_UPDATE_HASH_RAND_BITS_KEY(key,klen); HvAUX(hv)->xhv_rand= (U32)PL_hash_rand_bits; } #endif if (val == &PL_sv_placeholder) - HvPLACEHOLDERS(hv)++; - if (masked_flags & HVhek_ENABLEHVKFLAGS) - HvHASKFLAGS_on(hv); + HvPLACEHOLDERS(hv)++; + if (flags & HVhek_ENABLEHVKFLAGS) + HvHASKFLAGS_on(hv); xhv->xhv_keys++; /* HvTOTALKEYS(hv)++ */ if ( in_collision && DO_HSPLIT(xhv) ) { @@ -909,7 +1045,7 @@ Perl_hv_common(pTHX_ HV *hv, SV *keysv, const char *key, STRLEN klen, } if (return_svp) { - return entry ? (void *) &HeVAL(entry) : NULL; + return entry ? (void *) &HeVAL(entry) : NULL; } return (void *) entry; } @@ -924,14 +1060,14 @@ S_hv_magic_check(HV *hv, bool *needs_copy, bool *needs_store) *needs_copy = FALSE; *needs_store = TRUE; while (mg) { - if (isUPPER(mg->mg_type)) { - *needs_copy = TRUE; - if (mg->mg_type == PERL_MAGIC_tied) { - *needs_store = FALSE; - return; /* We've set all there is to set. */ - } - } - mg = mg->mg_moremagic; + if (isUPPER(mg->mg_type)) { + *needs_copy = TRUE; + if (mg->mg_type == PERL_MAGIC_tied) { + *needs_store = FALSE; + return; /* We've set all there is to set. */ + } + } + mg = mg->mg_moremagic; } } @@ -954,17 +1090,31 @@ SV * Perl_hv_scalar(pTHX_ HV *hv) { SV *sv; + UV u; PERL_ARGS_ASSERT_HV_SCALAR; if (SvRMAGICAL(hv)) { - MAGIC * const mg = mg_find((const SV *)hv, PERL_MAGIC_tied); - if (mg) - return magic_scalarpack(hv, mg); + MAGIC * const mg = mg_find((const SV *)hv, PERL_MAGIC_tied); + if (mg) + return magic_scalarpack(hv, mg); } - sv = sv_newmortal(); - sv_setuv(sv, HvUSEDKEYS(hv)); + sv = newSV_type_mortal(SVt_IV); + + /* Inlined sv_setuv(sv, HvUSEDKEYS(hv)) follows:*/ + u = HvUSEDKEYS(hv); + + if (u <= (UV)IV_MAX) { + SvIV_set(sv, (IV)u); + (void)SvIOK_only(sv); + SvTAINT(sv); + } else { + SvIV_set(sv, 0); + SvUV_set(sv, u); + (void)SvIOK_only_UV(sv); + SvTAINT(sv); + } return sv; } @@ -1104,82 +1254,79 @@ value, or 0 to ask for it to be computed. STATIC SV * S_hv_delete_common(pTHX_ HV *hv, SV *keysv, const char *key, STRLEN klen, - int k_flags, I32 d_flags, U32 hash) + int k_flags, I32 d_flags, U32 hash) { - dVAR; XPVHV* xhv; HE *entry; HE **oentry; HE **first_entry; bool is_utf8 = cBOOL(k_flags & HVhek_UTF8); - int masked_flags; HEK *keysv_hek = NULL; U8 mro_changes = 0; /* 1 = isa; 2 = package moved */ SV *sv; GV *gv = NULL; HV *stash = NULL; - if (SvRMAGICAL(hv)) { - bool needs_copy; - bool needs_store; - hv_magic_check (hv, &needs_copy, &needs_store); - - if (needs_copy) { - SV *sv; - entry = (HE *) hv_common(hv, keysv, key, klen, - k_flags & ~HVhek_FREEKEY, - HV_FETCH_LVALUE|HV_DISABLE_UVAR_XKEY, - NULL, hash); - sv = entry ? HeVAL(entry) : NULL; - if (sv) { - if (SvMAGICAL(sv)) { - mg_clear(sv); - } - if (!needs_store) { - if (mg_find(sv, PERL_MAGIC_tiedelem)) { - /* No longer an element */ - sv_unmagic(sv, PERL_MAGIC_tiedelem); - return sv; - } - return NULL; /* element cannot be deleted */ - } + if (SvMAGICAL(hv)) { + bool needs_copy; + bool needs_store; + hv_magic_check (hv, &needs_copy, &needs_store); + + if (needs_copy) { + SV *sv; + entry = (HE *) hv_common(hv, keysv, key, klen, + k_flags & ~HVhek_FREEKEY, + HV_FETCH_LVALUE|HV_DISABLE_UVAR_XKEY, + NULL, hash); + sv = entry ? HeVAL(entry) : NULL; + if (sv) { + if (SvMAGICAL(sv)) { + mg_clear(sv); + } + if (!needs_store) { + if (mg_find(sv, PERL_MAGIC_tiedelem)) { + /* No longer an element */ + sv_unmagic(sv, PERL_MAGIC_tiedelem); + return sv; + } + return NULL; /* element cannot be deleted */ + } #ifdef ENV_IS_CASELESS - else if (mg_find((const SV *)hv, PERL_MAGIC_env)) { - /* XXX This code isn't UTF8 clean. */ - keysv = newSVpvn_flags(key, klen, SVs_TEMP); - if (k_flags & HVhek_FREEKEY) { - Safefree(key); - } - key = strupr(SvPVX(keysv)); - is_utf8 = 0; - k_flags = 0; - hash = 0; - } + else if (mg_find((const SV *)hv, PERL_MAGIC_env)) { + /* XXX This code isn't UTF8 clean. */ + keysv = newSVpvn_flags(key, klen, SVs_TEMP); + if (k_flags & HVhek_FREEKEY) { + Safefree(key); + } + key = strupr(SvPVX(keysv)); + is_utf8 = 0; + k_flags = 0; + hash = 0; + } #endif - } - } + } + } } xhv = (XPVHV*)SvANY(hv); - if (!HvARRAY(hv)) - return NULL; + if (!HvTOTALKEYS(hv)) + return NULL; if (is_utf8 && !(k_flags & HVhek_KEYCANONICAL)) { - const char * const keysave = key; - key = (char*)bytes_from_utf8((U8*)key, &klen, &is_utf8); + const char * const keysave = key; + key = (char*)bytes_from_utf8((U8*)key, &klen, &is_utf8); if (is_utf8) k_flags |= HVhek_UTF8; - else + else k_flags &= ~HVhek_UTF8; if (key != keysave) { - if (k_flags & HVhek_FREEKEY) { - /* This shouldn't happen if our caller does what we expect, - but strictly the API allows it. */ - Safefree(keysave); - } - k_flags |= HVhek_WASUTF8 | HVhek_FREEKEY; - } - HvHASKFLAGS_on(MUTABLE_SV(hv)); + if (k_flags & HVhek_FREEKEY) { + /* This shouldn't happen if our caller does what we expect, + but strictly the API allows it. */ + Safefree(keysave); + } + k_flags |= HVhek_WASUTF8 | HVhek_FREEKEY; + } } if (keysv && (SvIsCOW_shared_hash(keysv))) { @@ -1190,8 +1337,6 @@ S_hv_delete_common(pTHX_ HV *hv, SV *keysv, const char *key, STRLEN klen, else if (!hash) PERL_HASH(hash, key, klen); - masked_flags = (k_flags & HVhek_MASK); - first_entry = oentry = &(HvARRAY(hv))[hash & (I32) HvMAX(hv)]; entry = *oentry; @@ -1226,66 +1371,94 @@ S_hv_delete_common(pTHX_ HV *hv, SV *keysv, const char *key, STRLEN klen, } for (; entry; oentry = &HeNEXT(entry), entry = *oentry) { - if (HeHASH(entry) != hash) /* strings can't be equal */ - continue; - if (HeKLEN(entry) != (I32)klen) - continue; - if (memNE(HeKEY(entry),key,klen)) /* is this it? */ - continue; - if ((HeKFLAGS(entry) ^ masked_flags) & HVhek_UTF8) - continue; + if (HeHASH(entry) != hash) /* strings can't be equal */ + continue; + if (HeKLEN(entry) != (I32)klen) + continue; + if (memNE(HeKEY(entry),key,klen)) /* is this it? */ + continue; + if ((HeKFLAGS(entry) ^ k_flags) & HVhek_UTF8) + continue; found: - if (hv == PL_strtab) { - if (k_flags & HVhek_FREEKEY) - Safefree(key); - Perl_croak(aTHX_ S_strtab_error, "delete"); - } - - /* if placeholder is here, it's already been deleted.... */ - if (HeVAL(entry) == &PL_sv_placeholder) { - if (k_flags & HVhek_FREEKEY) - Safefree(key); - return NULL; - } - if (SvREADONLY(hv) && HeVAL(entry) && SvREADONLY(HeVAL(entry))) { - hv_notallowed(k_flags, key, klen, - "Attempt to delete readonly key '%" SVf "' from" - " a restricted hash"); - } - if (k_flags & HVhek_FREEKEY) - Safefree(key); + if (hv == PL_strtab) { + if (k_flags & HVhek_FREEKEY) + Safefree(key); + Perl_croak(aTHX_ S_strtab_error, "delete"); + } - /* If this is a stash and the key ends with ::, then someone is - * deleting a package. - */ - if (HeVAL(entry) && HvENAME_get(hv)) { - gv = (GV *)HeVAL(entry); - if (keysv) key = SvPV(keysv, klen); - if (( - (klen > 1 && key[klen-2] == ':' && key[klen-1] == ':') - || - (klen == 1 && key[0] == ':') - ) - && (klen != 6 || hv!=PL_defstash || memNE(key,"main::",6)) - && SvTYPE(gv) == SVt_PVGV && (stash = GvHV((GV *)gv)) - && HvENAME_get(stash)) { - /* A previous version of this code checked that the - * GV was still in the symbol table by fetching the - * GV with its name. That is not necessary (and - * sometimes incorrect), as HvENAME cannot be set - * on hv if it is not in the symtab. */ - mro_changes = 2; - /* Hang on to it for a bit. */ - SvREFCNT_inc_simple_void_NN( - sv_2mortal((SV *)gv) - ); - } - else if (memEQs(key, klen, "ISA") && GvAV(gv)) { + sv = HeVAL(entry); + + /* if placeholder is here, it's already been deleted.... */ + if (sv == &PL_sv_placeholder) { + if (k_flags & HVhek_FREEKEY) + Safefree(key); + return NULL; + } + if (SvREADONLY(hv) && sv && SvREADONLY(sv)) { + hv_notallowed(k_flags, key, klen, + "Attempt to delete readonly key '%" SVf "' from" + " a restricted hash"); + } + + /* + * If a restricted hash, rather than really deleting the entry, put + * a placeholder there. This marks the key as being "approved", so + * we can still access via not-really-existing key without raising + * an error. + */ + if (SvREADONLY(hv)) { + /* We'll be saving this slot, so the number of allocated keys + * doesn't go down, but the number placeholders goes up */ + HeVAL(entry) = &PL_sv_placeholder; + HvPLACEHOLDERS(hv)++; + } + else { + HeVAL(entry) = NULL; + *oentry = HeNEXT(entry); + if (SvOOK(hv) && entry == HvAUX(hv)->xhv_eiter /* HvEITER(hv) */) { + HvLAZYDEL_on(hv); + } + else { + if (SvOOK(hv) && HvLAZYDEL(hv) && + entry == HeNEXT(HvAUX(hv)->xhv_eiter)) + HeNEXT(HvAUX(hv)->xhv_eiter) = HeNEXT(entry); + hv_free_ent(NULL, entry); + } + xhv->xhv_keys--; /* HvTOTALKEYS(hv)-- */ + if (xhv->xhv_keys == 0) + HvHASKFLAGS_off(hv); + } + + /* If this is a stash and the key ends with ::, then someone is + * deleting a package. + */ + if (sv && SvTYPE(sv) == SVt_PVGV && HvENAME_get(hv)) { + gv = (GV *)sv; + if (( + (klen > 1 && key[klen-2] == ':' && key[klen-1] == ':') + || + (klen == 1 && key[0] == ':') + ) + && (klen != 6 || hv!=PL_defstash || memNE(key,"main::",6)) + && (stash = GvHV((GV *)gv)) + && HvENAME_get(stash)) { + /* A previous version of this code checked that the + * GV was still in the symbol table by fetching the + * GV with its name. That is not necessary (and + * sometimes incorrect), as HvENAME cannot be set + * on hv if it is not in the symtab. */ + mro_changes = 2; + /* Hang on to it for a bit. */ + SvREFCNT_inc_simple_void_NN( + sv_2mortal((SV *)gv) + ); + } + else if (memEQs(key, klen, "ISA") && GvAV(gv)) { AV *isa = GvAV(gv); MAGIC *mg = mg_find((SV*)isa, PERL_MAGIC_isa); - mro_changes = 1; + mro_changes = 1; if (mg) { if (mg->mg_obj == (SV*)gv) { /* This is the only stash this ISA was used for. @@ -1348,66 +1521,79 @@ S_hv_delete_common(pTHX_ HV *hv, SV *keysv, const char *key, STRLEN klen, } } } - } - - sv = d_flags & G_DISCARD ? HeVAL(entry) : sv_2mortal(HeVAL(entry)); - HeVAL(entry) = &PL_sv_placeholder; - if (sv) { - /* deletion of method from stash */ - if (isGV(sv) && isGV_with_GP(sv) && GvCVu(sv) - && HvENAME_get(hv)) - mro_method_changed_in(hv); - } - - /* - * If a restricted hash, rather than really deleting the entry, put - * a placeholder there. This marks the key as being "approved", so - * we can still access via not-really-existing key without raising - * an error. - */ - if (SvREADONLY(hv)) - /* We'll be saving this slot, so the number of allocated keys - * doesn't go down, but the number placeholders goes up */ - HvPLACEHOLDERS(hv)++; - else { - *oentry = HeNEXT(entry); - if (SvOOK(hv) && entry == HvAUX(hv)->xhv_eiter /* HvEITER(hv) */) - HvLAZYDEL_on(hv); - else { - if (SvOOK(hv) && HvLAZYDEL(hv) && - entry == HeNEXT(HvAUX(hv)->xhv_eiter)) - HeNEXT(HvAUX(hv)->xhv_eiter) = HeNEXT(entry); - hv_free_ent(hv, entry); - } - xhv->xhv_keys--; /* HvTOTALKEYS(hv)-- */ - if (xhv->xhv_keys == 0) - HvHASKFLAGS_off(hv); - } - - if (d_flags & G_DISCARD) { - SvREFCNT_dec(sv); - sv = NULL; - } - - if (mro_changes == 1) mro_isa_changed_in(hv); - else if (mro_changes == 2) - mro_package_moved(NULL, stash, gv, 1); - - return sv; + } + + if (k_flags & HVhek_FREEKEY) + Safefree(key); + + if (sv) { + /* deletion of method from stash */ + if (isGV(sv) && isGV_with_GP(sv) && GvCVu(sv) + && HvENAME_get(hv)) + mro_method_changed_in(hv); + + if (d_flags & G_DISCARD) { + SvREFCNT_dec(sv); + sv = NULL; + } + else { + sv_2mortal(sv); + } + } + + if (mro_changes == 1) mro_isa_changed_in(hv); + else if (mro_changes == 2) + mro_package_moved(NULL, stash, gv, 1); + + return sv; } not_found: if (SvREADONLY(hv)) { - hv_notallowed(k_flags, key, klen, - "Attempt to delete disallowed key '%" SVf "' from" - " a restricted hash"); + hv_notallowed(k_flags, key, klen, + "Attempt to delete disallowed key '%" SVf "' from" + " a restricted hash"); } if (k_flags & HVhek_FREEKEY) - Safefree(key); + Safefree(key); return NULL; } +/* HVs are used for (at least) three things + 1) objects + 2) symbol tables + 3) associative arrays + + shared hash keys benefit the first two greatly, because keys are likely + to be re-used between objects, or for constants in the optree + + However, for large associative arrays (lookup tables, "seen" hashes) keys are + unlikely to be re-used. Hence having those keys in the shared string table as + well as the hash is a memory hit, if they are never actually shared with a + second hash. Hence we turn off shared hash keys if a (regular) hash gets + large. + + This is a heuristic. There might be a better answer than 42, but for now + we'll use it. + + NOTE: Configure with -Accflags='-DPERL_USE_UNSHARED_KEYS_IN_LARGE_HASHES' + to enable this new functionality. +*/ + +#ifdef PERL_USE_UNSHARED_KEYS_IN_LARGE_HASHES +static bool +S_large_hash_heuristic(pTHX_ HV *hv, STRLEN size) { + if (size > 42 + && !SvOBJECT(hv) + && !(SvOOK(hv) && HvENAME_get(hv))) { + /* This hash appears to be growing quite large. + We gamble that it is not sharing keys with other hashes. */ + return TRUE; + } + return FALSE; +} +#endif STATIC void S_hsplit(pTHX_ HV *hv, STRLEN const oldsize, STRLEN newsize) @@ -1416,20 +1602,12 @@ S_hsplit(pTHX_ HV *hv, STRLEN const oldsize, STRLEN newsize) char *a = (char*) HvARRAY(hv); HE **aep; - bool do_aux= ( - /* already have an HvAUX(hv) so we have to move it */ - SvOOK(hv) || - /* no HvAUX() but array we are going to allocate is large enough - * there is no point in saving the space for the iterator, and - * speeds up later traversals. */ - ( ( hv != PL_strtab ) && ( newsize >= PERL_HV_ALLOC_AUX_SIZE ) ) - ); - PERL_ARGS_ASSERT_HSPLIT; + if (newsize > MAX_BUCKET_MAX+1) + return; PL_nomemok = TRUE; - Renew(a, PERL_HV_ARRAY_ALLOC_BYTES(newsize) - + (do_aux ? sizeof(struct xpvhv_aux) : 0), char); + Renew(a, PERL_HV_ARRAY_ALLOC_BYTES(newsize), char); PL_nomemok = FALSE; if (!a) { return; @@ -1441,67 +1619,40 @@ S_hsplit(pTHX_ HV *hv, STRLEN const oldsize, STRLEN newsize) * second from top. After each such insert we rotate the hashed value. So we can * use the same hashed value over and over, and in normal build environments use * very few ops to do so. ROTL32() should produce a single machine operation. */ - if (PL_HASH_RAND_BITS_ENABLED) { - if (PL_HASH_RAND_BITS_ENABLED == 1) - PL_hash_rand_bits += ptr_hash((PTRV)a); - PL_hash_rand_bits = ROTL_UV(PL_hash_rand_bits,1); - } + MAYBE_UPDATE_HASH_RAND_BITS(); #endif HvARRAY(hv) = (HE**) a; HvMAX(hv) = newsize - 1; - /* before we zero the newly added memory, we - * need to deal with the aux struct that may be there - * or have been allocated by us*/ - if (do_aux) { - struct xpvhv_aux *const dest - = (struct xpvhv_aux*) &a[newsize * sizeof(HE*)]; - if (SvOOK(hv)) { - /* alread have an aux, copy the old one in place. */ - Move(&a[oldsize * sizeof(HE*)], dest, 1, struct xpvhv_aux); - /* we reset the iterator's xhv_rand as well, so they get a totally new ordering */ -#ifdef PERL_HASH_RANDOMIZE_KEYS - dest->xhv_rand = (U32)PL_hash_rand_bits; -#endif - } else { - /* no existing aux structure, but we allocated space for one - * so initialize it properly. This unrolls hv_auxinit() a bit, - * since we have to do the realloc anyway. */ - /* first we set the iterator's xhv_rand so it can be copied into lastrand below */ -#ifdef PERL_HASH_RANDOMIZE_KEYS - dest->xhv_rand = (U32)PL_hash_rand_bits; -#endif - /* this is the "non realloc" part of the hv_auxinit() */ - (void)hv_auxinit_internal(dest); - /* Turn on the OOK flag */ - SvOOK_on(hv); - } - } /* now we can safely clear the second half */ Zero(&a[oldsize * sizeof(HE*)], (newsize-oldsize) * sizeof(HE*), char); /* zero 2nd half*/ if (!HvTOTALKEYS(hv)) /* skip rest if no entries */ return; + /* don't share keys in large simple hashes */ + if (LARGE_HASH_HEURISTIC(hv, HvTOTALKEYS(hv))) + HvSHAREKEYS_off(hv); + + newsize--; aep = (HE**)a; do { - HE **oentry = aep + i; - HE *entry = aep[i]; + HE **oentry = aep + i; + HE *entry = aep[i]; - if (!entry) /* non-existent */ - continue; - do { + if (!entry) /* non-existent */ + continue; + do { U32 j = (HeHASH(entry) & newsize); - if (j != (U32)i) { - *oentry = HeNEXT(entry); + if (j != (U32)i) { + *oentry = HeNEXT(entry); #ifdef PERL_HASH_RANDOMIZE_KEYS /* if the target cell is empty or PL_HASH_RAND_BITS_ENABLED is false * insert to top, otherwise rotate the bucket rand 1 bit, * and use the new low bit to decide if we insert at top, * or next from top. IOW, we only rotate on a collision.*/ if (aep[j] && PL_HASH_RAND_BITS_ENABLED) { - PL_hash_rand_bits+= ROTL32(HeHASH(entry), 17); - PL_hash_rand_bits= ROTL_UV(PL_hash_rand_bits,1); + UPDATE_HASH_RAND_BITS(); if (PL_hash_rand_bits & 1) { HeNEXT(entry)= HeNEXT(aep[j]); HeNEXT(aep[j])= entry; @@ -1519,12 +1670,12 @@ S_hsplit(pTHX_ HV *hv, STRLEN const oldsize, STRLEN newsize) HeNEXT(entry) = aep[j]; aep[j] = entry; } - } - else { - oentry = &HeNEXT(entry); - } - entry = *oentry; - } while (entry); + } + else { + oentry = &HeNEXT(entry); + } + entry = *oentry; + } while (entry); } while (i++ < oldsize); } @@ -1542,7 +1693,7 @@ Perl_hv_ksplit(pTHX_ HV *hv, IV newmax) wantsize = (I32) newmax; /* possible truncation here */ if (wantsize != newmax) - return; + return; wantsize= wantsize + (wantsize >> 1); /* wantsize *= 1.5 */ if (wantsize < newmax) /* overflow detection */ @@ -1564,8 +1715,19 @@ Perl_hv_ksplit(pTHX_ HV *hv, IV newmax) a = (char *) HvARRAY(hv); if (a) { +#ifdef PERL_HASH_RANDOMIZE_KEYS + U32 was_ook = SvOOK(hv); +#endif hsplit(hv, oldsize, newsize); +#ifdef PERL_HASH_RANDOMIZE_KEYS + if (was_ook && SvOOK(hv) && HvTOTALKEYS(hv)) { + MAYBE_UPDATE_HASH_RAND_BITS(); + HvAUX(hv)->xhv_rand = (U32)PL_hash_rand_bits; + } +#endif } else { + if (LARGE_HASH_HEURISTIC(hv, newmax)) + HvSHAREKEYS_off(hv); Newxz(a, PERL_HV_ARRAY_ALLOC_BYTES(newsize), char); xhv->xhv_max = newsize - 1; HvARRAY(hv) = (HE **) a; @@ -1587,84 +1749,106 @@ Perl_hv_ksplit(pTHX_ HV *hv, IV newmax) } STMT_END +/* +=for apidoc newHVhv + +The content of C is copied to a new hash. A pointer to the new hash is +returned. + +=cut +*/ + HV * Perl_newHVhv(pTHX_ HV *ohv) { - dVAR; HV * const hv = newHV(); STRLEN hv_max; if (!ohv || (!HvTOTALKEYS(ohv) && !SvMAGICAL((const SV *)ohv))) - return hv; + return hv; hv_max = HvMAX(ohv); if (!SvMAGICAL((const SV *)ohv)) { - /* It's an ordinary hash, so copy it fast. AMS 20010804 */ - STRLEN i; - const bool shared = !!HvSHAREKEYS(ohv); - HE **ents, ** const oents = (HE **)HvARRAY(ohv); - char *a; - Newx(a, PERL_HV_ARRAY_ALLOC_BYTES(hv_max+1), char); - ents = (HE**)a; - - /* In each bucket... */ - for (i = 0; i <= hv_max; i++) { - HE *prev = NULL; - HE *oent = oents[i]; - - if (!oent) { - ents[i] = NULL; - continue; - } - - /* Copy the linked list of entries. */ - for (; oent; oent = HeNEXT(oent)) { - const U32 hash = HeHASH(oent); - const char * const key = HeKEY(oent); - const STRLEN len = HeKLEN(oent); - const int flags = HeKFLAGS(oent); - HE * const ent = new_HE(); - SV *const val = HeVAL(oent); - - HeVAL(ent) = SvIMMORTAL(val) ? val : newSVsv(val); - HeKEY_hek(ent) - = shared ? share_hek_flags(key, len, hash, flags) - : save_hek_flags(key, len, hash, flags); - if (prev) - HeNEXT(prev) = ent; - else - ents[i] = ent; - prev = ent; - HeNEXT(ent) = NULL; - } - } - - HvMAX(hv) = hv_max; - HvTOTALKEYS(hv) = HvTOTALKEYS(ohv); - HvARRAY(hv) = ents; + /* It's an ordinary hash, so copy it fast. AMS 20010804 */ + STRLEN i; + HE **ents, ** const oents = (HE **)HvARRAY(ohv); + char *a; + Newx(a, PERL_HV_ARRAY_ALLOC_BYTES(hv_max+1), char); + ents = (HE**)a; + + if (HvSHAREKEYS(ohv)) { +#ifdef NODEFAULT_SHAREKEYS + HvSHAREKEYS_on(hv); +#else + /* Shared is the default - it should have been set by newHV(). */ + assert(HvSHAREKEYS(hv)); +#endif + } + else { + HvSHAREKEYS_off(hv); + } + + /* In each bucket... */ + for (i = 0; i <= hv_max; i++) { + HE *prev = NULL; + HE *oent = oents[i]; + + if (!oent) { + ents[i] = NULL; + continue; + } + + /* Copy the linked list of entries. */ + for (; oent; oent = HeNEXT(oent)) { + HE * const ent = new_HE(); + SV *const val = HeVAL(oent); + const int flags = HeKFLAGS(oent); + + HeVAL(ent) = SvIMMORTAL(val) ? val : newSVsv(val); + if ((flags & HVhek_NOTSHARED) == 0) { + HeKEY_hek(ent) = share_hek_hek(HeKEY_hek(oent)); + } + else { + const U32 hash = HeHASH(oent); + const char * const key = HeKEY(oent); + const STRLEN len = HeKLEN(oent); + HeKEY_hek(ent) = save_hek_flags(key, len, hash, flags); + } + if (prev) + HeNEXT(prev) = ent; + else + ents[i] = ent; + prev = ent; + HeNEXT(ent) = NULL; + } + } + + HvMAX(hv) = hv_max; + HvTOTALKEYS(hv) = HvTOTALKEYS(ohv); + HvARRAY(hv) = ents; } /* not magical */ else { - /* Iterate over ohv, copying keys and values one at a time. */ - HE *entry; - const I32 riter = HvRITER_get(ohv); - HE * const eiter = HvEITER_get(ohv); + /* Iterate over ohv, copying keys and values one at a time. */ + HE *entry; + const I32 riter = HvRITER_get(ohv); + HE * const eiter = HvEITER_get(ohv); STRLEN hv_keys = HvTOTALKEYS(ohv); HV_SET_MAX_ADJUSTED_FOR_KEYS(hv,hv_max,hv_keys); - hv_iterinit(ohv); - while ((entry = hv_iternext_flags(ohv, 0))) { - SV *val = hv_iterval(ohv,entry); - SV * const keysv = HeSVKEY(entry); - val = SvIMMORTAL(val) ? val : newSVsv(val); - if (keysv) - (void)hv_store_ent(hv, keysv, val, 0); - else - (void)hv_store_flags(hv, HeKEY(entry), HeKLEN(entry), val, - HeHASH(entry), HeKFLAGS(entry)); - } - HvRITER_set(ohv, riter); - HvEITER_set(ohv, eiter); + hv_iterinit(ohv); + while ((entry = hv_iternext_flags(ohv, 0))) { + SV *val = hv_iterval(ohv,entry); + SV * const keysv = HeSVKEY(entry); + val = SvIMMORTAL(val) ? val : newSVsv(val); + if (keysv) + (void)hv_store_ent(hv, keysv, val, 0); + else + (void)hv_store_flags(hv, HeKEY(entry), HeKLEN(entry), val, + HeHASH(entry), HeKFLAGS(entry)); + } + HvRITER_set(ohv, riter); + HvEITER_set(ohv, eiter); } return hv; @@ -1688,37 +1872,37 @@ Perl_hv_copy_hints_hv(pTHX_ HV *const ohv) HV * const hv = newHV(); if (ohv) { - STRLEN hv_max = HvMAX(ohv); + STRLEN hv_max = HvMAX(ohv); STRLEN hv_keys = HvTOTALKEYS(ohv); - HE *entry; - const I32 riter = HvRITER_get(ohv); - HE * const eiter = HvEITER_get(ohv); + HE *entry; + const I32 riter = HvRITER_get(ohv); + HE * const eiter = HvEITER_get(ohv); - ENTER; - SAVEFREESV(hv); + ENTER; + SAVEFREESV(hv); HV_SET_MAX_ADJUSTED_FOR_KEYS(hv,hv_max,hv_keys); - hv_iterinit(ohv); - while ((entry = hv_iternext_flags(ohv, 0))) { - SV *const sv = newSVsv(hv_iterval(ohv,entry)); - SV *heksv = HeSVKEY(entry); - if (!heksv && sv) heksv = newSVhek(HeKEY_hek(entry)); - if (sv) sv_magic(sv, NULL, PERL_MAGIC_hintselem, - (char *)heksv, HEf_SVKEY); - if (heksv == HeSVKEY(entry)) - (void)hv_store_ent(hv, heksv, sv, 0); - else { - (void)hv_common(hv, heksv, HeKEY(entry), HeKLEN(entry), - HeKFLAGS(entry), HV_FETCH_ISSTORE|HV_FETCH_JUST_SV, sv, HeHASH(entry)); - SvREFCNT_dec_NN(heksv); - } - } - HvRITER_set(ohv, riter); - HvEITER_set(ohv, eiter); - - SvREFCNT_inc_simple_void_NN(hv); - LEAVE; + hv_iterinit(ohv); + while ((entry = hv_iternext_flags(ohv, 0))) { + SV *const sv = newSVsv(hv_iterval(ohv,entry)); + SV *heksv = HeSVKEY(entry); + if (!heksv && sv) heksv = newSVhek(HeKEY_hek(entry)); + if (sv) sv_magic(sv, NULL, PERL_MAGIC_hintselem, + (char *)heksv, HEf_SVKEY); + if (heksv == HeSVKEY(entry)) + (void)hv_store_ent(hv, heksv, sv, 0); + else { + (void)hv_common(hv, heksv, HeKEY(entry), HeKLEN(entry), + HeKFLAGS(entry), HV_FETCH_ISSTORE|HV_FETCH_JUST_SV, sv, HeHASH(entry)); + SvREFCNT_dec_NN(heksv); + } + } + HvRITER_set(ohv, riter); + HvEITER_set(ohv, eiter); + + SvREFCNT_inc_simple_void_NN(hv); + LEAVE; } hv_magic(hv, NULL, PERL_MAGIC_hints); return hv; @@ -1727,59 +1911,58 @@ Perl_hv_copy_hints_hv(pTHX_ HV *const ohv) /* like hv_free_ent, but returns the SV rather than freeing it */ STATIC SV* -S_hv_free_ent_ret(pTHX_ HV *hv, HE *entry) +S_hv_free_ent_ret(pTHX_ HE *entry) { - SV *val; - PERL_ARGS_ASSERT_HV_FREE_ENT_RET; - val = HeVAL(entry); + SV *val = HeVAL(entry); if (HeKLEN(entry) == HEf_SVKEY) { - SvREFCNT_dec(HeKEY_sv(entry)); - Safefree(HeKEY_hek(entry)); + SvREFCNT_dec(HeKEY_sv(entry)); + Safefree(HeKEY_hek(entry)); + } + else if ((HeKFLAGS(entry) & HVhek_NOTSHARED) == 0) { + unshare_hek(HeKEY_hek(entry)); + } + else { + Safefree(HeKEY_hek(entry)); } - else if (HvSHAREKEYS(hv)) - unshare_hek(HeKEY_hek(entry)); - else - Safefree(HeKEY_hek(entry)); del_HE(entry); return val; } void -Perl_hv_free_ent(pTHX_ HV *hv, HE *entry) +Perl_hv_free_ent(pTHX_ HV *notused, HE *entry) { - SV *val; - - PERL_ARGS_ASSERT_HV_FREE_ENT; + PERL_UNUSED_ARG(notused); if (!entry) - return; - val = hv_free_ent_ret(hv, entry); + return; + + SV *val = hv_free_ent_ret(entry); SvREFCNT_dec(val); } void -Perl_hv_delayfree_ent(pTHX_ HV *hv, HE *entry) +Perl_hv_delayfree_ent(pTHX_ HV *notused, HE *entry) { - PERL_ARGS_ASSERT_HV_DELAYFREE_ENT; + PERL_UNUSED_ARG(notused); if (!entry) - return; + return; /* SvREFCNT_inc to counter the SvREFCNT_dec in hv_free_ent */ sv_2mortal(SvREFCNT_inc(HeVAL(entry))); /* free between statements */ if (HeKLEN(entry) == HEf_SVKEY) { - sv_2mortal(SvREFCNT_inc(HeKEY_sv(entry))); + sv_2mortal(SvREFCNT_inc(HeKEY_sv(entry))); } - hv_free_ent(hv, entry); + hv_free_ent(NULL, entry); } /* =for apidoc hv_clear -Frees the all the elements of a hash, leaving it empty. +Frees all the elements of a hash, leaving it empty. The XS equivalent of C<%hash = ()>. See also L. See L for a note about the hash possibly being invalid on @@ -1791,57 +1974,54 @@ return. void Perl_hv_clear(pTHX_ HV *hv) { - dVAR; SSize_t orig_ix; - XPVHV* xhv; if (!hv) - return; + return; DEBUG_A(Perl_hv_assert(aTHX_ hv)); - xhv = (XPVHV*)SvANY(hv); - /* avoid hv being freed when calling destructors below */ EXTEND_MORTAL(1); PL_tmps_stack[++PL_tmps_ix] = SvREFCNT_inc_simple_NN(hv); orig_ix = PL_tmps_ix; - if (SvREADONLY(hv) && HvARRAY(hv) != NULL) { - /* restricted hash: convert all keys to placeholders */ - STRLEN i; - for (i = 0; i <= xhv->xhv_max; i++) { - HE *entry = (HvARRAY(hv))[i]; - for (; entry; entry = HeNEXT(entry)) { - /* not already placeholder */ - if (HeVAL(entry) != &PL_sv_placeholder) { - if (HeVAL(entry)) { - if (SvREADONLY(HeVAL(entry))) { - SV* const keysv = hv_iterkeysv(entry); - Perl_croak_nocontext( - "Attempt to delete readonly key '%" SVf "' from a restricted hash", - (void*)keysv); - } - SvREFCNT_dec_NN(HeVAL(entry)); - } - HeVAL(entry) = &PL_sv_placeholder; - HvPLACEHOLDERS(hv)++; - } - } - } + if (SvREADONLY(hv) && HvTOTALKEYS(hv)) { + /* restricted hash: convert all keys to placeholders */ + STRLEN max = HvMAX(hv); + STRLEN i; + for (i = 0; i <= max; i++) { + HE *entry = (HvARRAY(hv))[i]; + for (; entry; entry = HeNEXT(entry)) { + /* not already placeholder */ + if (HeVAL(entry) != &PL_sv_placeholder) { + if (HeVAL(entry)) { + if (SvREADONLY(HeVAL(entry))) { + SV* const keysv = hv_iterkeysv(entry); + Perl_croak_nocontext( + "Attempt to delete readonly key '%" SVf "' from a restricted hash", + (void*)keysv); + } + SvREFCNT_dec_NN(HeVAL(entry)); + } + HeVAL(entry) = &PL_sv_placeholder; + HvPLACEHOLDERS(hv)++; + } + } + } } else { - hv_free_entries(hv); - HvPLACEHOLDERS_set(hv, 0); + hv_free_entries(hv); + HvPLACEHOLDERS_set(hv, 0); - if (SvRMAGICAL(hv)) - mg_clear(MUTABLE_SV(hv)); + if (SvRMAGICAL(hv)) + mg_clear(MUTABLE_SV(hv)); - HvHASKFLAGS_off(hv); + HvHASKFLAGS_off(hv); } if (SvOOK(hv)) { if(HvENAME_get(hv)) mro_isa_changed_in(hv); - HvEITER_set(hv, NULL); + HvEITER_set(hv, NULL); } /* disarm hv's premature free guard */ if (LIKELY(PL_tmps_ix == orig_ix)) @@ -1874,55 +2054,52 @@ Perl_hv_clear_placeholders(pTHX_ HV *hv) PERL_ARGS_ASSERT_HV_CLEAR_PLACEHOLDERS; if (items) - clear_placeholders(hv, items); + clear_placeholders(hv, items); } static void -S_clear_placeholders(pTHX_ HV *hv, U32 items) +S_clear_placeholders(pTHX_ HV *hv, const U32 placeholders) { - dVAR; I32 i; + U32 to_find = placeholders; PERL_ARGS_ASSERT_CLEAR_PLACEHOLDERS; - if (items == 0) - return; + assert(to_find); i = HvMAX(hv); do { - /* Loop down the linked list heads */ - HE **oentry = &(HvARRAY(hv))[i]; - HE *entry; - - while ((entry = *oentry)) { - if (HeVAL(entry) == &PL_sv_placeholder) { - *oentry = HeNEXT(entry); - if (entry == HvEITER_get(hv)) - HvLAZYDEL_on(hv); - else { - if (SvOOK(hv) && HvLAZYDEL(hv) && - entry == HeNEXT(HvAUX(hv)->xhv_eiter)) - HeNEXT(HvAUX(hv)->xhv_eiter) = HeNEXT(entry); - hv_free_ent(hv, entry); - } - - if (--items == 0) { - /* Finished. */ - I32 placeholders = HvPLACEHOLDERS_get(hv); - HvTOTALKEYS(hv) -= (IV)placeholders; - /* HvUSEDKEYS expanded */ - if ((HvTOTALKEYS(hv) - placeholders) == 0) - HvHASKFLAGS_off(hv); - HvPLACEHOLDERS_set(hv, 0); - return; - } - } else { - oentry = &HeNEXT(entry); - } - } + /* Loop down the linked list heads */ + HE **oentry = &(HvARRAY(hv))[i]; + HE *entry; + + while ((entry = *oentry)) { + if (HeVAL(entry) == &PL_sv_placeholder) { + *oentry = HeNEXT(entry); + if (entry == HvEITER_get(hv)) + HvLAZYDEL_on(hv); + else { + if (SvOOK(hv) && HvLAZYDEL(hv) && + entry == HeNEXT(HvAUX(hv)->xhv_eiter)) + HeNEXT(HvAUX(hv)->xhv_eiter) = HeNEXT(entry); + hv_free_ent(NULL, entry); + } + + if (--to_find == 0) { + /* Finished. */ + HvTOTALKEYS(hv) -= (IV)placeholders; + if (HvTOTALKEYS(hv) == 0) + HvHASKFLAGS_off(hv); + HvPLACEHOLDERS_set(hv, 0); + return; + } + } else { + oentry = &HeNEXT(entry); + } + } } while (--i >= 0); /* You can't get here, hence assertion should always fail. */ - assert (items == 0); + assert (to_find == 0); NOT_REACHED; /* NOTREACHED */ } @@ -1930,13 +2107,12 @@ STATIC void S_hv_free_entries(pTHX_ HV *hv) { STRLEN index = 0; - XPVHV * const xhv = (XPVHV*)SvANY(hv); SV *sv; PERL_ARGS_ASSERT_HV_FREE_ENTRIES; - while ((sv = Perl_hfree_next_entry(aTHX_ hv, &index))||xhv->xhv_keys) { - SvREFCNT_dec(sv); + while ((sv = Perl_hfree_next_entry(aTHX_ hv, &index)) || HvTOTALKEYS(hv)) { + SvREFCNT_dec(sv); } } @@ -1963,16 +2139,15 @@ Perl_hfree_next_entry(pTHX_ HV *hv, STRLEN *indexp) PERL_ARGS_ASSERT_HFREE_NEXT_ENTRY; if (SvOOK(hv) && ((iter = HvAUX(hv)))) { - if ((entry = iter->xhv_eiter)) { + if ((entry = iter->xhv_eiter)) { /* the iterator may get resurrected after each * destructor call, so check each time */ if (entry && HvLAZYDEL(hv)) { /* was deleted earlier? */ HvLAZYDEL_off(hv); - hv_free_ent(hv, entry); + hv_free_ent(NULL, entry); /* warning: at this point HvARRAY may have been * re-allocated, HvMAX changed etc */ } - iter = HvAUX(hv); /* may have been realloced */ iter->xhv_riter = -1; /* HvRITER(hv) = -1 */ iter->xhv_eiter = NULL; /* HvEITER(hv) = NULL */ #ifdef PERL_HASH_RANDOMIZE_KEYS @@ -1982,33 +2157,33 @@ Perl_hfree_next_entry(pTHX_ HV *hv, STRLEN *indexp) } if (!((XPVHV*)SvANY(hv))->xhv_keys) - return NULL; + return NULL; array = HvARRAY(hv); assert(array); while ( ! ((entry = array[*indexp])) ) { - if ((*indexp)++ >= HvMAX(hv)) - *indexp = 0; - assert(*indexp != orig_index); + if ((*indexp)++ >= HvMAX(hv)) + *indexp = 0; + assert(*indexp != orig_index); } array[*indexp] = HeNEXT(entry); ((XPVHV*) SvANY(hv))->xhv_keys--; if ( PL_phase != PERL_PHASE_DESTRUCT && HvENAME(hv) - && HeVAL(entry) && isGV(HeVAL(entry)) - && GvHV(HeVAL(entry)) && HvENAME(GvHV(HeVAL(entry))) + && HeVAL(entry) && isGV(HeVAL(entry)) + && GvHV(HeVAL(entry)) && HvENAME(GvHV(HeVAL(entry))) ) { - STRLEN klen; - const char * const key = HePV(entry,klen); - if ((klen > 1 && key[klen-1]==':' && key[klen-2]==':') - || (klen == 1 && key[0] == ':')) { - mro_package_moved( - NULL, GvHV(HeVAL(entry)), - (GV *)HeVAL(entry), 0 - ); - } + STRLEN klen; + const char * const key = HePV(entry,klen); + if ((klen > 1 && key[klen-1]==':' && key[klen-2]==':') + || (klen == 1 && key[0] == ':')) { + mro_package_moved( + NULL, GvHV(HeVAL(entry)), + (GV *)HeVAL(entry), 0 + ); + } } - return hv_free_ent_ret(hv, entry); + return hv_free_ent_ret(entry); } @@ -2029,15 +2204,13 @@ return. void Perl_hv_undef_flags(pTHX_ HV *hv, U32 flags) { - XPVHV* xhv; bool save; SSize_t orig_ix = PL_tmps_ix; /* silence compiler warning about unitialized vars */ if (!hv) - return; + return; save = cBOOL(SvREFCNT(hv)); DEBUG_A(Perl_hv_assert(aTHX_ hv)); - xhv = (XPVHV*)SvANY(hv); /* The name must be deleted before the call to hv_free_entries so that CVs are anonymised properly. But the effective name must be pre- @@ -2053,9 +2226,9 @@ Perl_hv_undef_flags(pTHX_ HV *hv, U32 flags) if (PL_stashcache) { DEBUG_o(Perl_deb(aTHX_ "hv_undef_flags clearing PL_stashcache for '%" HEKf "'\n", HEKfARG(HvNAME_HEK(hv)))); - (void)hv_deletehek(PL_stashcache, HvNAME_HEK(hv), G_DISCARD); + (void)hv_deletehek(PL_stashcache, HvNAME_HEK(hv), G_DISCARD); } - hv_name_set(hv, NULL, 0, 0); + hv_name_set(hv, NULL, 0, 0); } if (save) { /* avoid hv being freed when calling destructors below */ @@ -2063,18 +2236,37 @@ Perl_hv_undef_flags(pTHX_ HV *hv, U32 flags) PL_tmps_stack[++PL_tmps_ix] = SvREFCNT_inc_simple_NN(hv); orig_ix = PL_tmps_ix; } + + /* As well as any/all HE*s in HvARRAY(), this call also ensures that + xhv_eiter is NULL, including handling the case of a tied hash partway + through iteration where HvLAZYDEL() is true and xhv_eiter points to an + HE* that needs to be explicitly freed. */ hv_free_entries(hv); + + /* SvOOK() is true for a hash if it has struct xpvhv_aux allocated. That + structure has several other pieces of allocated memory - hence those must + be freed before the structure itself can be freed. Some can be freed when + a hash is "undefined" (this function), but some must persist until it is + destroyed (which might be this function's immediate caller). + + Hence the code in this block frees what it is logical to free (and NULLs + out anything freed) so that the structure is left in a logically + consistent state - pointers are NULL or point to valid memory, and + non-pointer values are correct for an empty hash. The structure state + must remain consistent, because this code can no longer clear SVf_OOK, + meaning that this structure might be read again at any point in the + future without further checks or reinitialisation. */ if (SvOOK(hv)) { struct mro_meta *meta; const char *name; if (HvENAME_get(hv)) { - if (PL_phase != PERL_PHASE_DESTRUCT) - mro_isa_changed_in(hv); + if (PL_phase != PERL_PHASE_DESTRUCT) + mro_isa_changed_in(hv); if (PL_stashcache) { DEBUG_o(Perl_deb(aTHX_ "hv_undef_flags clearing PL_stashcache for effective name '%" HEKf "'\n", HEKfARG(HvENAME_HEK(hv)))); - (void)hv_deletehek(PL_stashcache, HvENAME_HEK(hv), G_DISCARD); + (void)hv_deletehek(PL_stashcache, HvENAME_HEK(hv), G_DISCARD); } } @@ -2085,41 +2277,39 @@ Perl_hv_undef_flags(pTHX_ HV *hv, U32 flags) if (name && PL_stashcache) { DEBUG_o(Perl_deb(aTHX_ "hv_undef_flags clearing PL_stashcache for name '%" HEKf "'\n", HEKfARG(HvNAME_HEK(hv)))); - (void)hv_deletehek(PL_stashcache, HvNAME_HEK(hv), G_DISCARD); + (void)hv_deletehek(PL_stashcache, HvNAME_HEK(hv), G_DISCARD); } - hv_name_set(hv, NULL, 0, flags); + hv_name_set(hv, NULL, 0, flags); } if((meta = HvAUX(hv)->xhv_mro_meta)) { - if (meta->mro_linear_all) { - SvREFCNT_dec_NN(meta->mro_linear_all); - /* mro_linear_current is just acting as a shortcut pointer, - hence the else. */ - } - else - /* Only the current MRO is stored, so this owns the data. - */ - SvREFCNT_dec(meta->mro_linear_current); - SvREFCNT_dec(meta->mro_nextmethod); - SvREFCNT_dec(meta->isa); - SvREFCNT_dec(meta->super); - Safefree(meta); - HvAUX(hv)->xhv_mro_meta = NULL; + if (meta->mro_linear_all) { + SvREFCNT_dec_NN(meta->mro_linear_all); + /* mro_linear_current is just acting as a shortcut pointer, + hence the else. */ + } + else + /* Only the current MRO is stored, so this owns the data. + */ + SvREFCNT_dec(meta->mro_linear_current); + SvREFCNT_dec(meta->mro_nextmethod); + SvREFCNT_dec(meta->isa); + SvREFCNT_dec(meta->super); + Safefree(meta); + HvAUX(hv)->xhv_mro_meta = NULL; } - if (!HvAUX(hv)->xhv_name_u.xhvnameu_name && ! HvAUX(hv)->xhv_backreferences) - SvFLAGS(hv) &= ~SVf_OOK; - } - if (!SvOOK(hv)) { - Safefree(HvARRAY(hv)); - xhv->xhv_max = PERL_HASH_DEFAULT_HvMAX; /* HvMAX(hv) = 7 (it's a normal hash) */ - HvARRAY(hv) = 0; } + + Safefree(HvARRAY(hv)); + HvMAX(hv) = PERL_HASH_DEFAULT_HvMAX; /* 7 (it's a normal hash) */ + HvARRAY(hv) = 0; + /* if we're freeing the HV, the SvMAGIC field has been reused for * other purposes, and so there can't be any placeholder magic */ if (SvREFCNT(hv)) - HvPLACEHOLDERS_set(hv, 0); + HvPLACEHOLDERS_set(hv, 0); if (SvRMAGICAL(hv)) - mg_clear(MUTABLE_SV(hv)); + mg_clear(MUTABLE_SV(hv)); if (save) { /* disarm hv's premature free guard */ @@ -2136,7 +2326,8 @@ Perl_hv_undef_flags(pTHX_ HV *hv, U32 flags) Returns the number of hash buckets that happen to be in use. -This function is wrapped by the macro C. +This function implements the L macro|perlapi/HvFILL> which you should +use instead. As of perl 5.25 this function is used only for debugging purposes, and the number of used hash buckets is not @@ -2167,100 +2358,49 @@ Perl_hv_fill(pTHX_ HV *const hv) * I would have thought counting up was better. * - Yves */ - HE *const *const last = ents + HvMAX(hv); - count = last + 1 - ents; + HE *const *const last = ents + HvMAX(hv); + count = last + 1 - ents; - do { - if (!*ents) - --count; - } while (++ents <= last); + do { + if (!*ents) + --count; + } while (++ents <= last); } return count; } -/* hash a pointer to a U32 - Used in the hash traversal randomization - * and bucket order randomization code - * - * this code was derived from Sereal, which was derived from autobox. - */ - -PERL_STATIC_INLINE U32 S_ptr_hash(PTRV u) { -#if PTRSIZE == 8 - /* - * This is one of Thomas Wang's hash functions for 64-bit integers from: - * http://www.concentric.net/~Ttwang/tech/inthash.htm - */ - u = (~u) + (u << 18); - u = u ^ (u >> 31); - u = u * 21; - u = u ^ (u >> 11); - u = u + (u << 6); - u = u ^ (u >> 22); -#else - /* - * This is one of Bob Jenkins' hash functions for 32-bit integers - * from: http://burtleburtle.net/bob/hash/integer.html - */ - u = (u + 0x7ed55d16) + (u << 12); - u = (u ^ 0xc761c23c) ^ (u >> 19); - u = (u + 0x165667b1) + (u << 5); - u = (u + 0xd3a2646c) ^ (u << 9); - u = (u + 0xfd7046c5) + (u << 3); - u = (u ^ 0xb55a4f09) ^ (u >> 16); -#endif - return (U32)u; -} - -static struct xpvhv_aux* -S_hv_auxinit_internal(struct xpvhv_aux *iter) { - PERL_ARGS_ASSERT_HV_AUXINIT_INTERNAL; - iter->xhv_riter = -1; /* HvRITER(hv) = -1 */ - iter->xhv_eiter = NULL; /* HvEITER(hv) = NULL */ -#ifdef PERL_HASH_RANDOMIZE_KEYS - iter->xhv_last_rand = iter->xhv_rand; -#endif - iter->xhv_name_u.xhvnameu_name = 0; - iter->xhv_name_count = 0; - iter->xhv_backreferences = 0; - iter->xhv_mro_meta = NULL; - iter->xhv_aux_flags = 0; - return iter; -} - - static struct xpvhv_aux* S_hv_auxinit(pTHX_ HV *hv) { struct xpvhv_aux *iter; - char *array; PERL_ARGS_ASSERT_HV_AUXINIT; if (!SvOOK(hv)) { - if (!HvARRAY(hv)) { - Newxz(array, PERL_HV_ARRAY_ALLOC_BYTES(HvMAX(hv) + 1) - + sizeof(struct xpvhv_aux), char); - } else { - array = (char *) HvARRAY(hv); - Renew(array, PERL_HV_ARRAY_ALLOC_BYTES(HvMAX(hv) + 1) - + sizeof(struct xpvhv_aux), char); + char *array = (char *) HvARRAY(hv); + if (!array) { + Newxz(array, PERL_HV_ARRAY_ALLOC_BYTES(HvMAX(hv) + 1), char); + HvARRAY(hv) = (HE**)array; } - HvARRAY(hv) = (HE**)array; - SvOOK_on(hv); - iter = HvAUX(hv); + iter = Perl_hv_auxalloc(aTHX_ hv); #ifdef PERL_HASH_RANDOMIZE_KEYS - if (PL_HASH_RAND_BITS_ENABLED) { - /* mix in some new state to PL_hash_rand_bits to "randomize" the traversal order*/ - if (PL_HASH_RAND_BITS_ENABLED == 1) - PL_hash_rand_bits += ptr_hash((PTRV)array); - PL_hash_rand_bits = ROTL_UV(PL_hash_rand_bits,1); - } + MAYBE_UPDATE_HASH_RAND_BITS(); iter->xhv_rand = (U32)PL_hash_rand_bits; #endif } else { iter = HvAUX(hv); } - return hv_auxinit_internal(iter); + iter->xhv_riter = -1; /* HvRITER(hv) = -1 */ + iter->xhv_eiter = NULL; /* HvEITER(hv) = NULL */ +#ifdef PERL_HASH_RANDOMIZE_KEYS + iter->xhv_last_rand = iter->xhv_rand; +#endif + iter->xhv_name_u.xhvnameu_name = 0; + iter->xhv_name_count = 0; + iter->xhv_backreferences = 0; + iter->xhv_mro_meta = NULL; + iter->xhv_aux_flags = 0; + return iter; } /* @@ -2284,26 +2424,33 @@ Perl_hv_iterinit(pTHX_ HV *hv) PERL_ARGS_ASSERT_HV_ITERINIT; if (SvOOK(hv)) { - struct xpvhv_aux * iter = HvAUX(hv); - HE * const entry = iter->xhv_eiter; /* HvEITER(hv) */ - if (entry && HvLAZYDEL(hv)) { /* was deleted earlier? */ - HvLAZYDEL_off(hv); - hv_free_ent(hv, entry); - } - iter = HvAUX(hv); /* may have been reallocated */ - iter->xhv_riter = -1; /* HvRITER(hv) = -1 */ - iter->xhv_eiter = NULL; /* HvEITER(hv) = NULL */ + struct xpvhv_aux * iter = HvAUX(hv); + HE * const entry = iter->xhv_eiter; /* HvEITER(hv) */ + if (entry && HvLAZYDEL(hv)) { /* was deleted earlier? */ + HvLAZYDEL_off(hv); + hv_free_ent(NULL, entry); + } + iter->xhv_riter = -1; /* HvRITER(hv) = -1 */ + iter->xhv_eiter = NULL; /* HvEITER(hv) = NULL */ #ifdef PERL_HASH_RANDOMIZE_KEYS iter->xhv_last_rand = iter->xhv_rand; #endif } else { - hv_auxinit(hv); + hv_auxinit(hv); } /* note this includes placeholders! */ return HvTOTALKEYS(hv); } +/* +=for apidoc hv_riter_p + +Implements C which you should use instead. + +=cut +*/ + I32 * Perl_hv_riter_p(pTHX_ HV *hv) { struct xpvhv_aux *iter; @@ -2314,6 +2461,14 @@ Perl_hv_riter_p(pTHX_ HV *hv) { return &(iter->xhv_riter); } +/* +=for apidoc hv_eiter_p + +Implements C which you should use instead. + +=cut +*/ + HE ** Perl_hv_eiter_p(pTHX_ HV *hv) { struct xpvhv_aux *iter; @@ -2324,6 +2479,14 @@ Perl_hv_eiter_p(pTHX_ HV *hv) { return &(iter->xhv_eiter); } +/* +=for apidoc hv_riter_set + +Implements C which you should use instead. + +=cut +*/ + void Perl_hv_riter_set(pTHX_ HV *hv, I32 riter) { struct xpvhv_aux *iter; @@ -2331,12 +2494,12 @@ Perl_hv_riter_set(pTHX_ HV *hv, I32 riter) { PERL_ARGS_ASSERT_HV_RITER_SET; if (SvOOK(hv)) { - iter = HvAUX(hv); + iter = HvAUX(hv); } else { - if (riter == -1) - return; + if (riter == -1) + return; - iter = hv_auxinit(hv); + iter = hv_auxinit(hv); } iter->xhv_riter = riter; } @@ -2359,6 +2522,14 @@ Perl_hv_rand_set(pTHX_ HV *hv, U32 new_xhv_rand) { #endif } +/* +=for apidoc hv_eiter_set + +Implements C which you should use instead. + +=cut +*/ + void Perl_hv_eiter_set(pTHX_ HV *hv, HE *eiter) { struct xpvhv_aux *iter; @@ -2366,14 +2537,14 @@ Perl_hv_eiter_set(pTHX_ HV *hv, HE *eiter) { PERL_ARGS_ASSERT_HV_EITER_SET; if (SvOOK(hv)) { - iter = HvAUX(hv); + iter = HvAUX(hv); } else { - /* 0 is the default so don't go malloc()ing a new structure just to - hold 0. */ - if (!eiter) - return; + /* 0 is the default so don't go malloc()ing a new structure just to + hold 0. */ + if (!eiter) + return; - iter = hv_auxinit(hv); + iter = hv_auxinit(hv); } iter->xhv_eiter = eiter; } @@ -2381,7 +2552,6 @@ Perl_hv_eiter_set(pTHX_ HV *hv, HE *eiter) { void Perl_hv_name_set(pTHX_ HV *hv, const char *name, U32 len, U32 flags) { - dVAR; struct xpvhv_aux *iter; U32 hash; HEK **spot; @@ -2389,64 +2559,62 @@ Perl_hv_name_set(pTHX_ HV *hv, const char *name, U32 len, U32 flags) PERL_ARGS_ASSERT_HV_NAME_SET; if (len > I32_MAX) - Perl_croak(aTHX_ "panic: hv name too long (%" UVuf ")", (UV) len); + Perl_croak(aTHX_ "panic: hv name too long (%" UVuf ")", (UV) len); if (SvOOK(hv)) { - iter = HvAUX(hv); - if (iter->xhv_name_u.xhvnameu_name) { - if(iter->xhv_name_count) { - if(flags & HV_NAME_SETALL) { - HEK ** const this_name = HvAUX(hv)->xhv_name_u.xhvnameu_names; - HEK **hekp = this_name + ( - iter->xhv_name_count < 0 - ? -iter->xhv_name_count - : iter->xhv_name_count - ); - while(hekp-- > this_name+1) - unshare_hek_or_pvn(*hekp, 0, 0, 0); - /* The first elem may be null. */ - if(*this_name) unshare_hek_or_pvn(*this_name, 0, 0, 0); - Safefree(this_name); - iter = HvAUX(hv); /* may been realloced */ - spot = &iter->xhv_name_u.xhvnameu_name; - iter->xhv_name_count = 0; - } - else { - if(iter->xhv_name_count > 0) { - /* shift some things over */ - Renew( - iter->xhv_name_u.xhvnameu_names, iter->xhv_name_count + 1, HEK * - ); - spot = iter->xhv_name_u.xhvnameu_names; - spot[iter->xhv_name_count] = spot[1]; - spot[1] = spot[0]; - iter->xhv_name_count = -(iter->xhv_name_count + 1); - } - else if(*(spot = iter->xhv_name_u.xhvnameu_names)) { - unshare_hek_or_pvn(*spot, 0, 0, 0); - } - } - } - else if (flags & HV_NAME_SETALL) { - unshare_hek_or_pvn(iter->xhv_name_u.xhvnameu_name, 0, 0, 0); - iter = HvAUX(hv); /* may been realloced */ - spot = &iter->xhv_name_u.xhvnameu_name; - } - else { - HEK * const existing_name = iter->xhv_name_u.xhvnameu_name; - Newx(iter->xhv_name_u.xhvnameu_names, 2, HEK *); - iter->xhv_name_count = -2; - spot = iter->xhv_name_u.xhvnameu_names; - spot[1] = existing_name; - } - } - else { spot = &iter->xhv_name_u.xhvnameu_name; iter->xhv_name_count = 0; } + iter = HvAUX(hv); + if (iter->xhv_name_u.xhvnameu_name) { + if(iter->xhv_name_count) { + if(flags & HV_NAME_SETALL) { + HEK ** const this_name = HvAUX(hv)->xhv_name_u.xhvnameu_names; + HEK **hekp = this_name + ( + iter->xhv_name_count < 0 + ? -iter->xhv_name_count + : iter->xhv_name_count + ); + while(hekp-- > this_name+1) + unshare_hek_or_pvn(*hekp, 0, 0, 0); + /* The first elem may be null. */ + if(*this_name) unshare_hek_or_pvn(*this_name, 0, 0, 0); + Safefree(this_name); + spot = &iter->xhv_name_u.xhvnameu_name; + iter->xhv_name_count = 0; + } + else { + if(iter->xhv_name_count > 0) { + /* shift some things over */ + Renew( + iter->xhv_name_u.xhvnameu_names, iter->xhv_name_count + 1, HEK * + ); + spot = iter->xhv_name_u.xhvnameu_names; + spot[iter->xhv_name_count] = spot[1]; + spot[1] = spot[0]; + iter->xhv_name_count = -(iter->xhv_name_count + 1); + } + else if(*(spot = iter->xhv_name_u.xhvnameu_names)) { + unshare_hek_or_pvn(*spot, 0, 0, 0); + } + } + } + else if (flags & HV_NAME_SETALL) { + unshare_hek_or_pvn(iter->xhv_name_u.xhvnameu_name, 0, 0, 0); + spot = &iter->xhv_name_u.xhvnameu_name; + } + else { + HEK * const existing_name = iter->xhv_name_u.xhvnameu_name; + Newx(iter->xhv_name_u.xhvnameu_names, 2, HEK *); + iter->xhv_name_count = -2; + spot = iter->xhv_name_u.xhvnameu_names; + spot[1] = existing_name; + } + } + else { spot = &iter->xhv_name_u.xhvnameu_name; iter->xhv_name_count = 0; } } else { - if (name == 0) - return; + if (name == 0) + return; - iter = hv_auxinit(hv); - spot = &iter->xhv_name_u.xhvnameu_name; + iter = hv_auxinit(hv); + spot = &iter->xhv_name_u.xhvnameu_name; } PERL_HASH(hash, name, len); *spot = name ? share_hek(name, flags & SVf_UTF8 ? -(I32)len : (I32)len, hash) : NULL; @@ -2463,11 +2631,11 @@ hek_eq_pvn_flags(pTHX_ const HEK *hek, const char* pv, const I32 pvlen, const U3 if (flags & SVf_UTF8) return (bytes_cmp_utf8( (const U8*)HEK_KEY(hek), HEK_LEN(hek), - (const U8*)pv, pvlen) == 0); + (const U8*)pv, pvlen) == 0); else return (bytes_cmp_utf8( (const U8*)pv, pvlen, - (const U8*)HEK_KEY(hek), HEK_LEN(hek)) == 0); + (const U8*)HEK_KEY(hek), HEK_LEN(hek)) == 0); } else return HEK_LEN(hek) == pvlen && ((HEK_KEY(hek) == pv) @@ -2489,52 +2657,51 @@ table. void Perl_hv_ename_add(pTHX_ HV *hv, const char *name, U32 len, U32 flags) { - dVAR; struct xpvhv_aux *aux = SvOOK(hv) ? HvAUX(hv) : hv_auxinit(hv); U32 hash; PERL_ARGS_ASSERT_HV_ENAME_ADD; if (len > I32_MAX) - Perl_croak(aTHX_ "panic: hv name too long (%" UVuf ")", (UV) len); + Perl_croak(aTHX_ "panic: hv name too long (%" UVuf ")", (UV) len); PERL_HASH(hash, name, len); if (aux->xhv_name_count) { - I32 count = aux->xhv_name_count; - HEK ** const xhv_name = aux->xhv_name_u.xhvnameu_names + (count<0); - HEK **hekp = xhv_name + (count < 0 ? -count - 1 : count); - while (hekp-- > xhv_name) - { - assert(*hekp); - if ( + I32 count = aux->xhv_name_count; + HEK ** const xhv_name = aux->xhv_name_u.xhvnameu_names + (count<0); + HEK **hekp = xhv_name + (count < 0 ? -count - 1 : count); + while (hekp-- > xhv_name) + { + assert(*hekp); + if ( (HEK_UTF8(*hekp) || (flags & SVf_UTF8)) ? hek_eq_pvn_flags(aTHX_ *hekp, name, (I32)len, flags) - : (HEK_LEN(*hekp) == (I32)len && memEQ(HEK_KEY(*hekp), name, len)) + : (HEK_LEN(*hekp) == (I32)len && memEQ(HEK_KEY(*hekp), name, len)) ) { - if (hekp == xhv_name && count < 0) - aux->xhv_name_count = -count; - return; - } - } - if (count < 0) aux->xhv_name_count--, count = -count; - else aux->xhv_name_count++; - Renew(aux->xhv_name_u.xhvnameu_names, count + 1, HEK *); - (aux->xhv_name_u.xhvnameu_names)[count] = share_hek(name, (flags & SVf_UTF8 ? -(I32)len : (I32)len), hash); + if (hekp == xhv_name && count < 0) + aux->xhv_name_count = -count; + return; + } + } + if (count < 0) aux->xhv_name_count--, count = -count; + else aux->xhv_name_count++; + Renew(aux->xhv_name_u.xhvnameu_names, count + 1, HEK *); + (aux->xhv_name_u.xhvnameu_names)[count] = share_hek(name, (flags & SVf_UTF8 ? -(I32)len : (I32)len), hash); } else { - HEK *existing_name = aux->xhv_name_u.xhvnameu_name; - if ( - existing_name && ( + HEK *existing_name = aux->xhv_name_u.xhvnameu_name; + if ( + existing_name && ( (HEK_UTF8(existing_name) || (flags & SVf_UTF8)) ? hek_eq_pvn_flags(aTHX_ existing_name, name, (I32)len, flags) - : (HEK_LEN(existing_name) == (I32)len && memEQ(HEK_KEY(existing_name), name, len)) - ) - ) return; - Newx(aux->xhv_name_u.xhvnameu_names, 2, HEK *); - aux->xhv_name_count = existing_name ? 2 : -2; - *aux->xhv_name_u.xhvnameu_names = existing_name; - (aux->xhv_name_u.xhvnameu_names)[1] = share_hek(name, (flags & SVf_UTF8 ? -(I32)len : (I32)len), hash); + : (HEK_LEN(existing_name) == (I32)len && memEQ(HEK_KEY(existing_name), name, len)) + ) + ) return; + Newx(aux->xhv_name_u.xhvnameu_names, 2, HEK *); + aux->xhv_name_count = existing_name ? 2 : -2; + *aux->xhv_name_u.xhvnameu_names = existing_name; + (aux->xhv_name_u.xhvnameu_names)[1] = share_hek(name, (flags & SVf_UTF8 ? -(I32)len : (I32)len), hash); } } @@ -2558,7 +2725,7 @@ Perl_hv_ename_delete(pTHX_ HV *hv, const char *name, U32 len, U32 flags) PERL_ARGS_ASSERT_HV_ENAME_DELETE; if (len > I32_MAX) - Perl_croak(aTHX_ "panic: hv name too long (%" UVuf ")", (UV) len); + Perl_croak(aTHX_ "panic: hv name too long (%" UVuf ")", (UV) len); if (!SvOOK(hv)) return; @@ -2566,53 +2733,52 @@ Perl_hv_ename_delete(pTHX_ HV *hv, const char *name, U32 len, U32 flags) if (!aux->xhv_name_u.xhvnameu_name) return; if (aux->xhv_name_count) { - HEK ** const namep = aux->xhv_name_u.xhvnameu_names; - I32 const count = aux->xhv_name_count; - HEK **victim = namep + (count < 0 ? -count : count); - while (victim-- > namep + 1) - if ( + HEK ** const namep = aux->xhv_name_u.xhvnameu_names; + I32 const count = aux->xhv_name_count; + HEK **victim = namep + (count < 0 ? -count : count); + while (victim-- > namep + 1) + if ( (HEK_UTF8(*victim) || (flags & SVf_UTF8)) ? hek_eq_pvn_flags(aTHX_ *victim, name, (I32)len, flags) - : (HEK_LEN(*victim) == (I32)len && memEQ(HEK_KEY(*victim), name, len)) - ) { - unshare_hek_or_pvn(*victim, 0, 0, 0); - aux = HvAUX(hv); /* may been realloced */ - if (count < 0) ++aux->xhv_name_count; - else --aux->xhv_name_count; - if ( - (aux->xhv_name_count == 1 || aux->xhv_name_count == -1) - && !*namep - ) { /* if there are none left */ - Safefree(namep); - aux->xhv_name_u.xhvnameu_names = NULL; - aux->xhv_name_count = 0; - } - else { - /* Move the last one back to fill the empty slot. It - does not matter what order they are in. */ - *victim = *(namep + (count < 0 ? -count : count) - 1); - } - return; - } - if ( - count > 0 && ((HEK_UTF8(*namep) || (flags & SVf_UTF8)) + : (HEK_LEN(*victim) == (I32)len && memEQ(HEK_KEY(*victim), name, len)) + ) { + unshare_hek_or_pvn(*victim, 0, 0, 0); + if (count < 0) ++aux->xhv_name_count; + else --aux->xhv_name_count; + if ( + (aux->xhv_name_count == 1 || aux->xhv_name_count == -1) + && !*namep + ) { /* if there are none left */ + Safefree(namep); + aux->xhv_name_u.xhvnameu_names = NULL; + aux->xhv_name_count = 0; + } + else { + /* Move the last one back to fill the empty slot. It + does not matter what order they are in. */ + *victim = *(namep + (count < 0 ? -count : count) - 1); + } + return; + } + if ( + count > 0 && ((HEK_UTF8(*namep) || (flags & SVf_UTF8)) ? hek_eq_pvn_flags(aTHX_ *namep, name, (I32)len, flags) - : (HEK_LEN(*namep) == (I32)len && memEQ(HEK_KEY(*namep), name, len)) + : (HEK_LEN(*namep) == (I32)len && memEQ(HEK_KEY(*namep), name, len)) ) - ) { - aux->xhv_name_count = -count; - } + ) { + aux->xhv_name_count = -count; + } } else if( (HEK_UTF8(aux->xhv_name_u.xhvnameu_name) || (flags & SVf_UTF8)) ? hek_eq_pvn_flags(aTHX_ aux->xhv_name_u.xhvnameu_name, name, (I32)len, flags) - : (HEK_LEN(aux->xhv_name_u.xhvnameu_name) == (I32)len && + : (HEK_LEN(aux->xhv_name_u.xhvnameu_name) == (I32)len && memEQ(HEK_KEY(aux->xhv_name_u.xhvnameu_name), name, len)) ) { - HEK * const namehek = aux->xhv_name_u.xhvnameu_name; - Newx(aux->xhv_name_u.xhvnameu_names, 1, HEK *); - *aux->xhv_name_u.xhvnameu_names = namehek; - aux->xhv_name_count = -1; + HEK * const namehek = aux->xhv_name_u.xhvnameu_name; + Newx(aux->xhv_name_u.xhvnameu_names, 1, HEK *); + *aux->xhv_name_u.xhvnameu_names = namehek; + aux->xhv_name_count = -1; } } @@ -2633,15 +2799,15 @@ Perl_hv_kill_backrefs(pTHX_ HV *hv) { PERL_ARGS_ASSERT_HV_KILL_BACKREFS; if (!SvOOK(hv)) - return; + return; av = HvAUX(hv)->xhv_backreferences; if (av) { - HvAUX(hv)->xhv_backreferences = 0; - Perl_sv_kill_backrefs(aTHX_ MUTABLE_SV(hv), av); - if (SvTYPE(av) == SVt_PVAV) - SvREFCNT_dec_NN(av); + HvAUX(hv)->xhv_backreferences = 0; + Perl_sv_kill_backrefs(aTHX_ MUTABLE_SV(hv), av); + if (SvTYPE(av) == SVt_PVAV) + SvREFCNT_dec_NN(av); } } @@ -2680,8 +2846,6 @@ insufficiently abstracted for any change to be tidy. HE * Perl_hv_iternext_flags(pTHX_ HV *hv, I32 flags) { - dVAR; - XPVHV* xhv; HE *entry; HE *oldentry; MAGIC* mg; @@ -2689,24 +2853,69 @@ Perl_hv_iternext_flags(pTHX_ HV *hv, I32 flags) PERL_ARGS_ASSERT_HV_ITERNEXT_FLAGS; - xhv = (XPVHV*)SvANY(hv); - if (!SvOOK(hv)) { - /* Too many things (well, pp_each at least) merrily assume that you can - call hv_iternext without calling hv_iterinit, so we'll have to deal - with it. */ - hv_iterinit(hv); + /* Too many things (well, pp_each at least) merrily assume that you can + call hv_iternext without calling hv_iterinit, so we'll have to deal + with it. */ + hv_iterinit(hv); } + else if (!HvARRAY(hv)) { + /* Since 5.002 calling hv_iternext() has ensured that HvARRAY() is + non-NULL. There was explicit code for this added as part of commit + 4633a7c4bad06b47, without any explicit comment as to why, but from + code inspection it seems to be a fix to ensure that the later line + entry = ((HE**)xhv->xhv_array)[xhv->xhv_riter]; + was accessing a valid address, because that lookup in the loop was + always reached even if the hash had no keys. + + That explicit code was removed in 2005 as part of b79f7545f218479c: + Store the xhv_aux structure after the main array. + This reduces the size of HV bodies from 24 to 20 bytes on a 32 bit + build. It has the side effect of defined %symbol_table:: now always + being true. defined %hash is already deprecated. + + with a comment and assertion added to note that after the call to + hv_iterinit() HvARRAY() will now always be non-NULL. + + In turn, that potential NULL-pointer access within the loop was made + unreachable in 2009 by commit 9eb4ebd1619c0362 + In Perl_hv_iternext_flags(), clarify and generalise the empty hash bailout code. + + which skipped the entire while loop if the hash had no keys. + (If the hash has any keys, HvARRAY() cannot be NULL.) + Hence the code in hv_iternext_flags() has long been able to handle + HvARRAY() being NULL because no keys are allocated. + + Now that we have decoupled the aux structure from HvARRAY(), + HvARRAY() can now be NULL even when SVf_OOK is true (and the aux + struct is allocated and correction initialised). + + Is this actually a guarantee that we need to make? We should check + whether anything is actually relying on this, or if we are simply + making work for ourselves. + + For now, keep the behaviour as-was - after calling hv_iternext_flags + ensure that HvARRAY() is non-NULL. Many (other) things are changing - + no need to add risk by changing this too. But in the future we should + consider changing hv_iternext_flags() to avoid allocating HvARRAY() + here, and potentially also we avoid allocating HvARRAY() + automatically in hv_auxinit() */ + + char *array; + Newxz(array, PERL_HV_ARRAY_ALLOC_BYTES(HvMAX(hv) + 1), char); + HvARRAY(hv) = (HE**)array; + } + iter = HvAUX(hv); oldentry = entry = iter->xhv_eiter; /* HvEITER(hv) */ if (SvMAGICAL(hv) && SvRMAGICAL(hv)) { - if ( ( mg = mg_find((const SV *)hv, PERL_MAGIC_tied) ) ) { + if ( ( mg = mg_find((const SV *)hv, PERL_MAGIC_tied) ) ) { SV * const key = sv_newmortal(); if (entry) { sv_setsv(key, HeSVKEY_force(entry)); SvREFCNT_dec(HeSVKEY(entry)); /* get rid of previous key */ - HeSVKEY_set(entry, NULL); + HeSVKEY_set(entry, NULL); } else { char *k; @@ -2714,7 +2923,7 @@ Perl_hv_iternext_flags(pTHX_ HV *hv, I32 flags) /* one HE per MAGICAL hash */ iter->xhv_eiter = entry = new_HE(); /* HvEITER(hv) = new_HE() */ - HvLAZYDEL_on(hv); /* make sure entry gets freed */ + HvLAZYDEL_on(hv); /* make sure entry gets freed */ Zero(entry, 1, HE); Newxz(k, HEK_BASESIZE + sizeof(const SV *), char); hek = (HEK*)k; @@ -2730,24 +2939,15 @@ Perl_hv_iternext_flags(pTHX_ HV *hv, I32 flags) SvREFCNT_dec(HeVAL(entry)); Safefree(HeKEY_hek(entry)); del_HE(entry); - iter = HvAUX(hv); /* may been realloced */ iter->xhv_eiter = NULL; /* HvEITER(hv) = NULL */ - HvLAZYDEL_off(hv); + HvLAZYDEL_off(hv); return NULL; } } -#if defined(DYNAMIC_ENV_FETCH) && !defined(__riscos__) /* set up %ENV for iteration */ +#if defined(DYNAMIC_ENV_FETCH) && defined(VMS) /* set up %ENV for iteration */ if (!entry && SvRMAGICAL((const SV *)hv) - && mg_find((const SV *)hv, PERL_MAGIC_env)) { - prime_env_iter(); -#ifdef VMS - /* The prime_env_iter() on VMS just loaded up new hash values - * so the iteration count needs to be reset back to the beginning - */ - hv_iterinit(hv); - iter = HvAUX(hv); - oldentry = entry = iter->xhv_eiter; /* HvEITER(hv) */ -#endif + && mg_find((const SV *)hv, PERL_MAGIC_env)) { + prime_env_iter(); } #endif @@ -2757,7 +2957,7 @@ Perl_hv_iternext_flags(pTHX_ HV *hv, I32 flags) /* At start of hash, entry is NULL. */ if (entry) { - entry = HeNEXT(entry); + entry = HeNEXT(entry); if (!(flags & HV_ITERNEXT_WANTPLACEHOLDERS)) { /* * Skip past any placeholders -- don't want to include them in @@ -2766,7 +2966,7 @@ Perl_hv_iternext_flags(pTHX_ HV *hv, I32 flags) while (entry && HeVAL(entry) == &PL_sv_placeholder) { entry = HeNEXT(entry); } - } + } } #ifdef PERL_HASH_RANDOMIZE_KEYS @@ -2777,38 +2977,38 @@ Perl_hv_iternext_flags(pTHX_ HV *hv, I32 flags) pTHX__FORMAT pTHX__VALUE); } - iter = HvAUX(hv); /* may been realloced */ iter->xhv_last_rand = iter->xhv_rand; } #endif /* Skip the entire loop if the hash is empty. */ if ((flags & HV_ITERNEXT_WANTPLACEHOLDERS) - ? HvTOTALKEYS(hv) : HvUSEDKEYS(hv)) { - while (!entry) { - /* OK. Come to the end of the current list. Grab the next one. */ - - iter->xhv_riter++; /* HvRITER(hv)++ */ - if (iter->xhv_riter > (I32)xhv->xhv_max /* HvRITER(hv) > HvMAX(hv) */) { - /* There is no next one. End of the hash. */ - iter->xhv_riter = -1; /* HvRITER(hv) = -1 */ + ? HvTOTALKEYS(hv) : HvUSEDKEYS(hv)) { + STRLEN max = HvMAX(hv); + while (!entry) { + /* OK. Come to the end of the current list. Grab the next one. */ + + iter->xhv_riter++; /* HvRITER(hv)++ */ + if (iter->xhv_riter > (I32)max /* HvRITER(hv) > HvMAX(hv) */) { + /* There is no next one. End of the hash. */ + iter->xhv_riter = -1; /* HvRITER(hv) = -1 */ #ifdef PERL_HASH_RANDOMIZE_KEYS iter->xhv_last_rand = iter->xhv_rand; /* reset xhv_last_rand so we can detect inserts during traversal */ #endif - break; - } - entry = (HvARRAY(hv))[ PERL_HASH_ITER_BUCKET(iter) & xhv->xhv_max ]; - - if (!(flags & HV_ITERNEXT_WANTPLACEHOLDERS)) { - /* If we have an entry, but it's a placeholder, don't count it. - Try the next. */ - while (entry && HeVAL(entry) == &PL_sv_placeholder) - entry = HeNEXT(entry); - } - /* Will loop again if this linked list starts NULL - (for HV_ITERNEXT_WANTPLACEHOLDERS) - or if we run through it and find only placeholders. */ - } + break; + } + entry = (HvARRAY(hv))[ PERL_HASH_ITER_BUCKET(iter) & max ]; + + if (!(flags & HV_ITERNEXT_WANTPLACEHOLDERS)) { + /* If we have an entry, but it's a placeholder, don't count it. + Try the next. */ + while (entry && HeVAL(entry) == &PL_sv_placeholder) + entry = HeNEXT(entry); + } + /* Will loop again if this linked list starts NULL + (for HV_ITERNEXT_WANTPLACEHOLDERS) + or if we run through it and find only placeholders. */ + } } else { iter->xhv_riter = -1; @@ -2818,11 +3018,10 @@ Perl_hv_iternext_flags(pTHX_ HV *hv, I32 flags) } if (oldentry && HvLAZYDEL(hv)) { /* was deleted earlier? */ - HvLAZYDEL_off(hv); - hv_free_ent(hv, oldentry); + HvLAZYDEL_off(hv); + hv_free_ent(NULL, oldentry); } - iter = HvAUX(hv); /* may been realloced */ iter->xhv_eiter = entry; /* HvEITER(hv) = entry */ return entry; } @@ -2842,14 +3041,14 @@ Perl_hv_iterkey(pTHX_ HE *entry, I32 *retlen) PERL_ARGS_ASSERT_HV_ITERKEY; if (HeKLEN(entry) == HEf_SVKEY) { - STRLEN len; - char * const p = SvPV(HeKEY_sv(entry), len); - *retlen = len; - return p; + STRLEN len; + char * const p = SvPV(HeKEY_sv(entry), len); + *retlen = len; + return p; } else { - *retlen = HeKLEN(entry); - return HeKEY(entry); + *retlen = HeKLEN(entry); + return HeKEY(entry); } } @@ -2887,14 +3086,14 @@ Perl_hv_iterval(pTHX_ HV *hv, HE *entry) PERL_ARGS_ASSERT_HV_ITERVAL; if (SvRMAGICAL(hv)) { - if (mg_find((const SV *)hv, PERL_MAGIC_tied)) { - SV* const sv = sv_newmortal(); - if (HeKLEN(entry) == HEf_SVKEY) - mg_copy(MUTABLE_SV(hv), sv, (char*)HeKEY_sv(entry), HEf_SVKEY); - else - mg_copy(MUTABLE_SV(hv), sv, HeKEY(entry), HeKLEN(entry)); - return sv; - } + if (mg_find((const SV *)hv, PERL_MAGIC_tied)) { + SV* const sv = sv_newmortal(); + if (HeKLEN(entry) == HEf_SVKEY) + mg_copy(MUTABLE_SV(hv), sv, (char*)HeKEY_sv(entry), HEf_SVKEY); + else + mg_copy(MUTABLE_SV(hv), sv, HeKEY(entry), HeKLEN(entry)); + return sv; + } } return HeVAL(entry); } @@ -2916,7 +3115,7 @@ Perl_hv_iternextsv(pTHX_ HV *hv, char **key, I32 *retlen) PERL_ARGS_ASSERT_HV_ITERNEXTSV; if (!he) - return NULL; + return NULL; *key = hv_iterkey(he, retlen); return hv_iterval(hv, he); } @@ -2929,12 +3128,15 @@ Now a macro in hv.h Adds magic to a hash. See C>. +=for apidoc unsharepvn + +If no one has access to shared string C with length C, free it. + +C and C must both be valid for C. + =cut */ -/* possibly free a shared string if no one has access to it - * len and hash must both be valid for str. - */ void Perl_unsharepvn(pTHX_ const char *str, I32 len, U32 hash) { @@ -2956,7 +3158,6 @@ Perl_unshare_hek(pTHX_ HEK *hek) STATIC void S_unshare_hek_or_pvn(pTHX_ const HEK *hek, const char *str, I32 len, U32 hash) { - XPVHV* xhv; HE *entry; HE **oentry; bool is_utf8 = FALSE; @@ -2965,19 +3166,20 @@ S_unshare_hek_or_pvn(pTHX_ const HEK *hek, const char *str, I32 len, U32 hash) struct shared_he *he = NULL; if (hek) { - /* Find the shared he which is just before us in memory. */ - he = (struct shared_he *)(((char *)hek) - - STRUCT_OFFSET(struct shared_he, - shared_he_hek)); - - /* Assert that the caller passed us a genuine (or at least consistent) - shared hek */ - assert (he->shared_he_he.hent_hek == hek); - - if (he->shared_he_he.he_valu.hent_refcount - 1) { - --he->shared_he_he.he_valu.hent_refcount; - return; - } + assert((HEK_FLAGS(hek) & HVhek_NOTSHARED) == 0); + /* Find the shared he which is just before us in memory. */ + he = (struct shared_he *)(((char *)hek) + - STRUCT_OFFSET(struct shared_he, + shared_he_hek)); + + /* Assert that the caller passed us a genuine (or at least consistent) + shared hek */ + assert (he->shared_he_he.hent_hek == hek); + + if (he->shared_he_he.he_valu.hent_refcount - 1) { + --he->shared_he_he.he_valu.hent_refcount; + return; + } hash = HEK_HASH(hek); } else if (len < 0) { @@ -2994,20 +3196,20 @@ S_unshare_hek_or_pvn(pTHX_ const HEK *hek, const char *str, I32 len, U32 hash) /* what follows was the moral equivalent of: if ((Svp = hv_fetch(PL_strtab, tmpsv, FALSE, hash))) { - if (--*Svp == NULL) - hv_delete(PL_strtab, str, len, G_DISCARD, hash); + if (--*Svp == NULL) + hv_delete(PL_strtab, str, len, G_DISCARD, hash); } */ - xhv = (XPVHV*)SvANY(PL_strtab); + /* assert(xhv_array != 0) */ oentry = &(HvARRAY(PL_strtab))[hash & (I32) HvMAX(PL_strtab)]; if (he) { - const HE *const he_he = &(he->shared_he_he); + const HE *const he_he = &(he->shared_he_he); for (entry = *oentry; entry; oentry = &HeNEXT(entry), entry = *oentry) { if (entry == he_he) break; } } else { - const int flags_masked = k_flags & HVhek_MASK; + const U8 flags_masked = k_flags & HVhek_STORAGE_MASK; for (entry = *oentry; entry; oentry = &HeNEXT(entry), entry = *oentry) { if (HeHASH(entry) != hash) /* strings can't be equal */ continue; @@ -3025,18 +3227,18 @@ S_unshare_hek_or_pvn(pTHX_ const HEK *hek, const char *str, I32 len, U32 hash) if (--entry->he_valu.hent_refcount == 0) { *oentry = HeNEXT(entry); Safefree(entry); - xhv->xhv_keys--; /* HvTOTALKEYS(hv)-- */ + HvTOTALKEYS(PL_strtab)--; } } if (!entry) - Perl_ck_warner_d(aTHX_ packWARN(WARN_INTERNAL), - "Attempt to free nonexistent shared string '%s'%s" - pTHX__FORMAT, - hek ? HEK_KEY(hek) : str, - ((k_flags & HVhek_UTF8) ? " (utf8)" : "") pTHX__VALUE); + Perl_ck_warner_d(aTHX_ packWARN(WARN_INTERNAL), + "Attempt to free nonexistent shared string '%s'%s" + pTHX__FORMAT, + hek ? HEK_KEY(hek) : str, + ((k_flags & HVhek_UTF8) ? " (utf8)" : "") pTHX__VALUE); if (k_flags & HVhek_FREEKEY) - Safefree(str); + Safefree(str); } /* get a (constant) string ptr from the global string table @@ -3066,7 +3268,6 @@ Perl_share_hek(pTHX_ const char *str, SSize_t len, U32 hash) we should flag that it needs upgrading on keys or each. Also flag that we need share_hek_flags to free the string. */ if (str != save) { - dVAR; PERL_HASH(hash, str, len); flags |= HVhek_WASUTF8 | HVhek_FREEKEY; } @@ -3079,11 +3280,11 @@ STATIC HEK * S_share_hek_flags(pTHX_ const char *str, STRLEN len, U32 hash, int flags) { HE *entry; - const int flags_masked = flags & HVhek_MASK; + const U8 flags_masked = flags & HVhek_STORAGE_MASK; const U32 hindex = hash & (I32) HvMAX(PL_strtab); - XPVHV * const xhv = (XPVHV*)SvANY(PL_strtab); PERL_ARGS_ASSERT_SHARE_HEK_FLAGS; + assert(!(flags & HVhek_NOTSHARED)); if (UNLIKELY(len > (STRLEN) I32_MAX)) { Perl_croak_nocontext("Sorry, hash keys must be smaller than 2**31 bytes"); @@ -3092,73 +3293,74 @@ S_share_hek_flags(pTHX_ const char *str, STRLEN len, U32 hash, int flags) /* what follows is the moral equivalent of: if (!(Svp = hv_fetch(PL_strtab, str, len, FALSE))) - hv_store(PL_strtab, str, len, NULL, hash); + hv_store(PL_strtab, str, len, NULL, hash); - Can't rehash the shared string table, so not sure if it's worth - counting the number of entries in the linked list + Can't rehash the shared string table, so not sure if it's worth + counting the number of entries in the linked list */ /* assert(xhv_array != 0) */ entry = (HvARRAY(PL_strtab))[hindex]; for (;entry; entry = HeNEXT(entry)) { - if (HeHASH(entry) != hash) /* strings can't be equal */ - continue; - if (HeKLEN(entry) != (SSize_t) len) - continue; - if (HeKEY(entry) != str && memNE(HeKEY(entry),str,len)) /* is this it? */ - continue; - if (HeKFLAGS(entry) != flags_masked) - continue; - break; + if (HeHASH(entry) != hash) /* strings can't be equal */ + continue; + if (HeKLEN(entry) != (SSize_t) len) + continue; + if (HeKEY(entry) != str && memNE(HeKEY(entry),str,len)) /* is this it? */ + continue; + if (HeKFLAGS(entry) != flags_masked) + continue; + break; } if (!entry) { - /* What used to be head of the list. - If this is NULL, then we're the first entry for this slot, which - means we need to increate fill. */ - struct shared_he *new_entry; - HEK *hek; - char *k; - HE **const head = &HvARRAY(PL_strtab)[hindex]; - HE *const next = *head; - - /* We don't actually store a HE from the arena and a regular HEK. - Instead we allocate one chunk of memory big enough for both, - and put the HEK straight after the HE. This way we can find the - HE directly from the HEK. - */ - - Newx(k, STRUCT_OFFSET(struct shared_he, - shared_he_hek.hek_key[0]) + len + 2, char); - new_entry = (struct shared_he *)k; - entry = &(new_entry->shared_he_he); - hek = &(new_entry->shared_he_hek); - - Copy(str, HEK_KEY(hek), len, char); - HEK_KEY(hek)[len] = 0; - HEK_LEN(hek) = len; - HEK_HASH(hek) = hash; - HEK_FLAGS(hek) = (unsigned char)flags_masked; - - /* Still "point" to the HEK, so that other code need not know what - we're up to. */ - HeKEY_hek(entry) = hek; - entry->he_valu.hent_refcount = 0; - HeNEXT(entry) = next; - *head = entry; - - xhv->xhv_keys++; /* HvTOTALKEYS(hv)++ */ - if (!next) { /* initial entry? */ - } else if ( DO_HSPLIT(xhv) ) { + /* What used to be head of the list. + If this is NULL, then we're the first entry for this slot, which + means we need to increate fill. */ + struct shared_he *new_entry; + HEK *hek; + char *k; + HE **const head = &HvARRAY(PL_strtab)[hindex]; + HE *const next = *head; + XPVHV * const xhv = (XPVHV*)SvANY(PL_strtab); + + /* We don't actually store a HE from the arena and a regular HEK. + Instead we allocate one chunk of memory big enough for both, + and put the HEK straight after the HE. This way we can find the + HE directly from the HEK. + */ + + Newx(k, STRUCT_OFFSET(struct shared_he, + shared_he_hek.hek_key[0]) + len + 2, char); + new_entry = (struct shared_he *)k; + entry = &(new_entry->shared_he_he); + hek = &(new_entry->shared_he_hek); + + Copy(str, HEK_KEY(hek), len, char); + HEK_KEY(hek)[len] = 0; + HEK_LEN(hek) = len; + HEK_HASH(hek) = hash; + HEK_FLAGS(hek) = (unsigned char)flags_masked; + + /* Still "point" to the HEK, so that other code need not know what + we're up to. */ + HeKEY_hek(entry) = hek; + entry->he_valu.hent_refcount = 0; + HeNEXT(entry) = next; + *head = entry; + + xhv->xhv_keys++; /* HvTOTALKEYS(hv)++ */ + if (!next) { /* initial entry? */ + } else if ( DO_HSPLIT(xhv) ) { const STRLEN oldsize = xhv->xhv_max + 1; hsplit(PL_strtab, oldsize, oldsize * 2); - } + } } ++entry->he_valu.hent_refcount; if (flags & HVhek_FREEKEY) - Safefree(str); + Safefree(str); return HeKEY_hek(entry); } @@ -3171,15 +3373,22 @@ Perl_hv_placeholders_p(pTHX_ HV *hv) PERL_ARGS_ASSERT_HV_PLACEHOLDERS_P; if (!mg) { - mg = sv_magicext(MUTABLE_SV(hv), 0, PERL_MAGIC_rhash, 0, 0, 0); + mg = sv_magicext(MUTABLE_SV(hv), 0, PERL_MAGIC_rhash, 0, 0, 0); - if (!mg) { - Perl_die(aTHX_ "panic: hv_placeholders_p"); - } + if (!mg) { + Perl_die(aTHX_ "panic: hv_placeholders_p"); + } } return &(mg->mg_len); } +/* +=for apidoc hv_placeholders_get + +Implements C, which you should use instead. + +=cut +*/ I32 Perl_hv_placeholders_get(pTHX_ const HV *hv) @@ -3192,6 +3401,14 @@ Perl_hv_placeholders_get(pTHX_ const HV *hv) return mg ? mg->mg_len : 0; } +/* +=for apidoc hv_placeholders_set + +Implements C, which you should use instead. + +=cut +*/ + void Perl_hv_placeholders_set(pTHX_ HV *hv, I32 ph) { @@ -3200,10 +3417,10 @@ Perl_hv_placeholders_set(pTHX_ HV *hv, I32 ph) PERL_ARGS_ASSERT_HV_PLACEHOLDERS_SET; if (mg) { - mg->mg_len = ph; + mg->mg_len = ph; } else if (ph) { - if (!sv_magicext(MUTABLE_SV(hv), 0, PERL_MAGIC_rhash, 0, 0, ph)) - Perl_die(aTHX_ "panic: hv_placeholders_set"); + if (!sv_magicext(MUTABLE_SV(hv), 0, PERL_MAGIC_rhash, 0, 0, ph)) + Perl_die(aTHX_ "panic: hv_placeholders_set"); } /* else we don't need to add magic to record 0 placeholders. */ } @@ -3211,41 +3428,40 @@ Perl_hv_placeholders_set(pTHX_ HV *hv, I32 ph) STATIC SV * S_refcounted_he_value(pTHX_ const struct refcounted_he *he) { - dVAR; SV *value; PERL_ARGS_ASSERT_REFCOUNTED_HE_VALUE; switch(he->refcounted_he_data[0] & HVrhek_typemask) { case HVrhek_undef: - value = newSV(0); - break; + value = newSV_type(SVt_NULL); + break; case HVrhek_delete: - value = &PL_sv_placeholder; - break; + value = &PL_sv_placeholder; + break; case HVrhek_IV: - value = newSViv(he->refcounted_he_val.refcounted_he_u_iv); - break; + value = newSViv(he->refcounted_he_val.refcounted_he_u_iv); + break; case HVrhek_UV: - value = newSVuv(he->refcounted_he_val.refcounted_he_u_uv); - break; + value = newSVuv(he->refcounted_he_val.refcounted_he_u_uv); + break; case HVrhek_PV: case HVrhek_PV_UTF8: - /* Create a string SV that directly points to the bytes in our - structure. */ - value = newSV_type(SVt_PV); - SvPV_set(value, (char *) he->refcounted_he_data + 1); - SvCUR_set(value, he->refcounted_he_val.refcounted_he_u_len); - /* This stops anything trying to free it */ - SvLEN_set(value, 0); - SvPOK_on(value); - SvREADONLY_on(value); - if ((he->refcounted_he_data[0] & HVrhek_typemask) == HVrhek_PV_UTF8) - SvUTF8_on(value); - break; + /* Create a string SV that directly points to the bytes in our + structure. */ + value = newSV_type(SVt_PV); + SvPV_set(value, (char *) he->refcounted_he_data + 1); + SvCUR_set(value, he->refcounted_he_val.refcounted_he_u_len); + /* This stops anything trying to free it */ + SvLEN_set(value, 0); + SvPOK_on(value); + SvREADONLY_on(value); + if ((he->refcounted_he_data[0] & HVrhek_typemask) == HVrhek_PV_UTF8) + SvUTF8_on(value); + break; default: - Perl_croak(aTHX_ "panic: refcounted_he_value bad flags %" UVxf, - (UV)he->refcounted_he_data[0]); + Perl_croak(aTHX_ "panic: refcounted_he_value bad flags %" UVxf, + (UV)he->refcounted_he_data[0]); } return value; } @@ -3262,91 +3478,94 @@ C is currently unused and must be zero. HV * Perl_refcounted_he_chain_2hv(pTHX_ const struct refcounted_he *chain, U32 flags) { - dVAR; HV *hv; U32 placeholders, max; if (flags) - Perl_croak(aTHX_ "panic: refcounted_he_chain_2hv bad flags %" UVxf, - (UV)flags); + Perl_croak(aTHX_ "panic: refcounted_he_chain_2hv bad flags %" UVxf, + (UV)flags); /* We could chase the chain once to get an idea of the number of keys, and call ksplit. But for now we'll make a potentially inefficient hash with only 8 entries in its array. */ hv = newHV(); +#ifdef NODEFAULT_SHAREKEYS + /* We share keys in the COP, so it's much easier to keep sharing keys in + the hash we build from it. */ + HvSHAREKEYS_on(hv); +#endif max = HvMAX(hv); if (!HvARRAY(hv)) { - char *array; - Newxz(array, PERL_HV_ARRAY_ALLOC_BYTES(max + 1), char); - HvARRAY(hv) = (HE**)array; + char *array; + Newxz(array, PERL_HV_ARRAY_ALLOC_BYTES(max + 1), char); + HvARRAY(hv) = (HE**)array; } placeholders = 0; while (chain) { #ifdef USE_ITHREADS - U32 hash = chain->refcounted_he_hash; + U32 hash = chain->refcounted_he_hash; #else - U32 hash = HEK_HASH(chain->refcounted_he_hek); + U32 hash = HEK_HASH(chain->refcounted_he_hek); #endif - HE **oentry = &((HvARRAY(hv))[hash & max]); - HE *entry = *oentry; - SV *value; - - for (; entry; entry = HeNEXT(entry)) { - if (HeHASH(entry) == hash) { - /* We might have a duplicate key here. If so, entry is older - than the key we've already put in the hash, so if they are - the same, skip adding entry. */ + HE **oentry = &((HvARRAY(hv))[hash & max]); + HE *entry = *oentry; + SV *value; + + for (; entry; entry = HeNEXT(entry)) { + if (HeHASH(entry) == hash) { + /* We might have a duplicate key here. If so, entry is older + than the key we've already put in the hash, so if they are + the same, skip adding entry. */ #ifdef USE_ITHREADS - const STRLEN klen = HeKLEN(entry); - const char *const key = HeKEY(entry); - if (klen == chain->refcounted_he_keylen - && (!!HeKUTF8(entry) - == !!(chain->refcounted_he_data[0] & HVhek_UTF8)) - && memEQ(key, REF_HE_KEY(chain), klen)) - goto next_please; + const STRLEN klen = HeKLEN(entry); + const char *const key = HeKEY(entry); + if (klen == chain->refcounted_he_keylen + && (!!HeKUTF8(entry) + == !!(chain->refcounted_he_data[0] & HVhek_UTF8)) + && memEQ(key, REF_HE_KEY(chain), klen)) + goto next_please; #else - if (HeKEY_hek(entry) == chain->refcounted_he_hek) - goto next_please; - if (HeKLEN(entry) == HEK_LEN(chain->refcounted_he_hek) - && HeKUTF8(entry) == HEK_UTF8(chain->refcounted_he_hek) - && memEQ(HeKEY(entry), HEK_KEY(chain->refcounted_he_hek), - HeKLEN(entry))) - goto next_please; + if (HeKEY_hek(entry) == chain->refcounted_he_hek) + goto next_please; + if (HeKLEN(entry) == HEK_LEN(chain->refcounted_he_hek) + && HeKUTF8(entry) == HEK_UTF8(chain->refcounted_he_hek) + && memEQ(HeKEY(entry), HEK_KEY(chain->refcounted_he_hek), + HeKLEN(entry))) + goto next_please; #endif - } - } - assert (!entry); - entry = new_HE(); + } + } + assert (!entry); + entry = new_HE(); #ifdef USE_ITHREADS - HeKEY_hek(entry) - = share_hek_flags(REF_HE_KEY(chain), - chain->refcounted_he_keylen, - chain->refcounted_he_hash, - (chain->refcounted_he_data[0] - & (HVhek_UTF8|HVhek_WASUTF8))); + HeKEY_hek(entry) + = share_hek_flags(REF_HE_KEY(chain), + chain->refcounted_he_keylen, + chain->refcounted_he_hash, + (chain->refcounted_he_data[0] + & (HVhek_UTF8|HVhek_WASUTF8))); #else - HeKEY_hek(entry) = share_hek_hek(chain->refcounted_he_hek); + HeKEY_hek(entry) = share_hek_hek(chain->refcounted_he_hek); #endif - value = refcounted_he_value(chain); - if (value == &PL_sv_placeholder) - placeholders++; - HeVAL(entry) = value; + value = refcounted_he_value(chain); + if (value == &PL_sv_placeholder) + placeholders++; + HeVAL(entry) = value; - /* Link it into the chain. */ - HeNEXT(entry) = *oentry; - *oentry = entry; + /* Link it into the chain. */ + HeNEXT(entry) = *oentry; + *oentry = entry; - HvTOTALKEYS(hv)++; + HvTOTALKEYS(hv)++; next_please: - chain = chain->refcounted_he_next; + chain = chain->refcounted_he_next; } if (placeholders) { - clear_placeholders(hv, placeholders); - HvTOTALKEYS(hv) -= placeholders; + clear_placeholders(hv, placeholders); } /* We could check in the loop to see if we encounter any keys with key @@ -3374,39 +3593,38 @@ if there is no value associated with the key. SV * Perl_refcounted_he_fetch_pvn(pTHX_ const struct refcounted_he *chain, - const char *keypv, STRLEN keylen, U32 hash, U32 flags) + const char *keypv, STRLEN keylen, U32 hash, U32 flags) { - dVAR; U8 utf8_flag; PERL_ARGS_ASSERT_REFCOUNTED_HE_FETCH_PVN; if (flags & ~(REFCOUNTED_HE_KEY_UTF8|REFCOUNTED_HE_EXISTS)) - Perl_croak(aTHX_ "panic: refcounted_he_fetch_pvn bad flags %" UVxf, - (UV)flags); + Perl_croak(aTHX_ "panic: refcounted_he_fetch_pvn bad flags %" UVxf, + (UV)flags); if (!chain) - goto ret; + goto ret; if (flags & REFCOUNTED_HE_KEY_UTF8) { - /* For searching purposes, canonicalise to Latin-1 where possible. */ - const char *keyend = keypv + keylen, *p; - STRLEN nonascii_count = 0; - for (p = keypv; p != keyend; p++) { - if (! UTF8_IS_INVARIANT(*p)) { - if (! UTF8_IS_NEXT_CHAR_DOWNGRADEABLE(p, keyend)) { - goto canonicalised_key; + /* For searching purposes, canonicalise to Latin-1 where possible. */ + const char *keyend = keypv + keylen, *p; + STRLEN nonascii_count = 0; + for (p = keypv; p != keyend; p++) { + if (! UTF8_IS_INVARIANT(*p)) { + if (! UTF8_IS_NEXT_CHAR_DOWNGRADEABLE(p, keyend)) { + goto canonicalised_key; } - nonascii_count++; + nonascii_count++; p++; - } - } - if (nonascii_count) { - char *q; - const char *p = keypv, *keyend = keypv + keylen; - keylen -= nonascii_count; - Newx(q, keylen, char); - SAVEFREEPV(q); - keypv = q; - for (; p != keyend; p++, q++) { - U8 c = (U8)*p; + } + } + if (nonascii_count) { + char *q; + const char *p = keypv, *keyend = keypv + keylen; + keylen -= nonascii_count; + Newx(q, keylen, char); + SAVEFREEPV(q); + keypv = q; + for (; p != keyend; p++, q++) { + U8 c = (U8)*p; if (UTF8_IS_INVARIANT(c)) { *q = (char) c; } @@ -3414,35 +3632,35 @@ Perl_refcounted_he_fetch_pvn(pTHX_ const struct refcounted_he *chain, p++; *q = (char) EIGHT_BIT_UTF8_TO_NATIVE(c, *p); } - } - } - flags &= ~REFCOUNTED_HE_KEY_UTF8; - canonicalised_key: ; + } + } + flags &= ~REFCOUNTED_HE_KEY_UTF8; + canonicalised_key: ; } utf8_flag = (flags & REFCOUNTED_HE_KEY_UTF8) ? HVhek_UTF8 : 0; if (!hash) - PERL_HASH(hash, keypv, keylen); + PERL_HASH(hash, keypv, keylen); for (; chain; chain = chain->refcounted_he_next) { - if ( + if ( #ifdef USE_ITHREADS - hash == chain->refcounted_he_hash && - keylen == chain->refcounted_he_keylen && - memEQ(REF_HE_KEY(chain), keypv, keylen) && - utf8_flag == (chain->refcounted_he_data[0] & HVhek_UTF8) + hash == chain->refcounted_he_hash && + keylen == chain->refcounted_he_keylen && + memEQ(REF_HE_KEY(chain), keypv, keylen) && + utf8_flag == (chain->refcounted_he_data[0] & HVhek_UTF8) #else - hash == HEK_HASH(chain->refcounted_he_hek) && - keylen == (STRLEN)HEK_LEN(chain->refcounted_he_hek) && - memEQ(HEK_KEY(chain->refcounted_he_hek), keypv, keylen) && - utf8_flag == (HEK_FLAGS(chain->refcounted_he_hek) & HVhek_UTF8) + hash == HEK_HASH(chain->refcounted_he_hek) && + keylen == (STRLEN)HEK_LEN(chain->refcounted_he_hek) && + memEQ(HEK_KEY(chain->refcounted_he_hek), keypv, keylen) && + utf8_flag == (HEK_FLAGS(chain->refcounted_he_hek) & HVhek_UTF8) #endif - ) { - if (flags & REFCOUNTED_HE_EXISTS) - return (chain->refcounted_he_data[0] & HVrhek_typemask) - == HVrhek_delete - ? NULL : &PL_sv_yes; - return sv_2mortal(refcounted_he_value(chain)); - } + ) { + if (flags & REFCOUNTED_HE_EXISTS) + return (chain->refcounted_he_data[0] & HVrhek_typemask) + == HVrhek_delete + ? NULL : &PL_sv_yes; + return sv_2mortal(refcounted_he_value(chain)); + } } ret: return flags & REFCOUNTED_HE_EXISTS ? NULL : &PL_sv_placeholder; @@ -3459,7 +3677,7 @@ instead of a string/length pair. SV * Perl_refcounted_he_fetch_pv(pTHX_ const struct refcounted_he *chain, - const char *key, U32 hash, U32 flags) + const char *key, U32 hash, U32 flags) { PERL_ARGS_ASSERT_REFCOUNTED_HE_FETCH_PV; return refcounted_he_fetch_pvn(chain, key, strlen(key), hash, flags); @@ -3476,19 +3694,19 @@ string/length pair. SV * Perl_refcounted_he_fetch_sv(pTHX_ const struct refcounted_he *chain, - SV *key, U32 hash, U32 flags) + SV *key, U32 hash, U32 flags) { const char *keypv; STRLEN keylen; PERL_ARGS_ASSERT_REFCOUNTED_HE_FETCH_SV; if (flags & REFCOUNTED_HE_KEY_UTF8) - Perl_croak(aTHX_ "panic: refcounted_he_fetch_sv bad flags %" UVxf, - (UV)flags); + Perl_croak(aTHX_ "panic: refcounted_he_fetch_sv bad flags %" UVxf, + (UV)flags); keypv = SvPV_const(key, keylen); if (SvUTF8(key)) - flags |= REFCOUNTED_HE_KEY_UTF8; + flags |= REFCOUNTED_HE_KEY_UTF8; if (!hash && SvIsCOW_shared_hash(key)) - hash = SvSHARED_HASH(key); + hash = SvSHARED_HASH(key); return refcounted_he_fetch_pvn(chain, keypv, keylen, hash, flags); } @@ -3527,9 +3745,8 @@ C. struct refcounted_he * Perl_refcounted_he_new_pvn(pTHX_ struct refcounted_he *parent, - const char *keypv, STRLEN keylen, U32 hash, SV *value, U32 flags) + const char *keypv, STRLEN keylen, U32 hash, SV *value, U32 flags) { - dVAR; STRLEN value_len = 0; const char *value_p = NULL; bool is_pv; @@ -3540,49 +3757,49 @@ Perl_refcounted_he_new_pvn(pTHX_ struct refcounted_he *parent, PERL_ARGS_ASSERT_REFCOUNTED_HE_NEW_PVN; if (!value || value == &PL_sv_placeholder) { - value_type = HVrhek_delete; + value_type = HVrhek_delete; } else if (SvPOK(value)) { - value_type = HVrhek_PV; + value_type = HVrhek_PV; } else if (SvIOK(value)) { - value_type = SvUOK((const SV *)value) ? HVrhek_UV : HVrhek_IV; + value_type = SvUOK((const SV *)value) ? HVrhek_UV : HVrhek_IV; } else if (!SvOK(value)) { - value_type = HVrhek_undef; + value_type = HVrhek_undef; } else { - value_type = HVrhek_PV; + value_type = HVrhek_PV; } is_pv = value_type == HVrhek_PV; if (is_pv) { - /* Do it this way so that the SvUTF8() test is after the SvPV, in case - the value is overloaded, and doesn't yet have the UTF-8flag set. */ - value_p = SvPV_const(value, value_len); - if (SvUTF8(value)) - value_type = HVrhek_PV_UTF8; - key_offset = value_len + 2; + /* Do it this way so that the SvUTF8() test is after the SvPV, in case + the value is overloaded, and doesn't yet have the UTF-8flag set. */ + value_p = SvPV_const(value, value_len); + if (SvUTF8(value)) + value_type = HVrhek_PV_UTF8; + key_offset = value_len + 2; } hekflags = value_type; if (flags & REFCOUNTED_HE_KEY_UTF8) { - /* Canonicalise to Latin-1 where possible. */ - const char *keyend = keypv + keylen, *p; - STRLEN nonascii_count = 0; - for (p = keypv; p != keyend; p++) { - if (! UTF8_IS_INVARIANT(*p)) { - if (! UTF8_IS_NEXT_CHAR_DOWNGRADEABLE(p, keyend)) { - goto canonicalised_key; + /* Canonicalise to Latin-1 where possible. */ + const char *keyend = keypv + keylen, *p; + STRLEN nonascii_count = 0; + for (p = keypv; p != keyend; p++) { + if (! UTF8_IS_INVARIANT(*p)) { + if (! UTF8_IS_NEXT_CHAR_DOWNGRADEABLE(p, keyend)) { + goto canonicalised_key; } - nonascii_count++; + nonascii_count++; p++; - } - } - if (nonascii_count) { - char *q; - const char *p = keypv, *keyend = keypv + keylen; - keylen -= nonascii_count; - Newx(q, keylen, char); - SAVEFREEPV(q); - keypv = q; - for (; p != keyend; p++, q++) { - U8 c = (U8)*p; + } + } + if (nonascii_count) { + char *q; + const char *p = keypv, *keyend = keypv + keylen; + keylen -= nonascii_count; + Newx(q, keylen, char); + SAVEFREEPV(q); + keypv = q; + for (; p != keyend; p++, q++) { + U8 c = (U8)*p; if (UTF8_IS_INVARIANT(c)) { *q = (char) c; } @@ -3590,36 +3807,36 @@ Perl_refcounted_he_new_pvn(pTHX_ struct refcounted_he *parent, p++; *q = (char) EIGHT_BIT_UTF8_TO_NATIVE(c, *p); } - } - } - flags &= ~REFCOUNTED_HE_KEY_UTF8; - canonicalised_key: ; + } + } + flags &= ~REFCOUNTED_HE_KEY_UTF8; + canonicalised_key: ; } if (flags & REFCOUNTED_HE_KEY_UTF8) - hekflags |= HVhek_UTF8; + hekflags |= HVhek_UTF8; if (!hash) - PERL_HASH(hash, keypv, keylen); + PERL_HASH(hash, keypv, keylen); #ifdef USE_ITHREADS he = (struct refcounted_he*) - PerlMemShared_malloc(sizeof(struct refcounted_he) - 1 - + keylen - + key_offset); + PerlMemShared_malloc(sizeof(struct refcounted_he) - 1 + + keylen + + key_offset); #else he = (struct refcounted_he*) - PerlMemShared_malloc(sizeof(struct refcounted_he) - 1 - + key_offset); + PerlMemShared_malloc(sizeof(struct refcounted_he) - 1 + + key_offset); #endif he->refcounted_he_next = parent; if (is_pv) { - Copy(value_p, he->refcounted_he_data + 1, value_len + 1, char); - he->refcounted_he_val.refcounted_he_u_len = value_len; + Copy(value_p, he->refcounted_he_data + 1, value_len + 1, char); + he->refcounted_he_val.refcounted_he_u_len = value_len; } else if (value_type == HVrhek_IV) { - he->refcounted_he_val.refcounted_he_u_iv = SvIVX(value); + he->refcounted_he_val.refcounted_he_u_iv = SvIVX(value); } else if (value_type == HVrhek_UV) { - he->refcounted_he_val.refcounted_he_u_uv = SvUVX(value); + he->refcounted_he_val.refcounted_he_u_uv = SvUVX(value); } #ifdef USE_ITHREADS @@ -3647,7 +3864,7 @@ of a string/length pair. struct refcounted_he * Perl_refcounted_he_new_pv(pTHX_ struct refcounted_he *parent, - const char *key, U32 hash, SV *value, U32 flags) + const char *key, U32 hash, SV *value, U32 flags) { PERL_ARGS_ASSERT_REFCOUNTED_HE_NEW_PV; return refcounted_he_new_pvn(parent, key, strlen(key), hash, value, flags); @@ -3664,19 +3881,19 @@ string/length pair. struct refcounted_he * Perl_refcounted_he_new_sv(pTHX_ struct refcounted_he *parent, - SV *key, U32 hash, SV *value, U32 flags) + SV *key, U32 hash, SV *value, U32 flags) { const char *keypv; STRLEN keylen; PERL_ARGS_ASSERT_REFCOUNTED_HE_NEW_SV; if (flags & REFCOUNTED_HE_KEY_UTF8) - Perl_croak(aTHX_ "panic: refcounted_he_new_sv bad flags %" UVxf, - (UV)flags); + Perl_croak(aTHX_ "panic: refcounted_he_new_sv bad flags %" UVxf, + (UV)flags); keypv = SvPV_const(key, keylen); if (SvUTF8(key)) - flags |= REFCOUNTED_HE_KEY_UTF8; + flags |= REFCOUNTED_HE_KEY_UTF8; if (!hash && SvIsCOW_shared_hash(key)) - hash = SvSHARED_HASH(key); + hash = SvSHARED_HASH(key); return refcounted_he_new_pvn(parent, keypv, keylen, hash, value, flags); } @@ -3694,29 +3911,26 @@ no action occurs in this case. void Perl_refcounted_he_free(pTHX_ struct refcounted_he *he) { -#ifdef USE_ITHREADS - dVAR; -#endif PERL_UNUSED_CONTEXT; while (he) { - struct refcounted_he *copy; - U32 new_count; - - HINTS_REFCNT_LOCK; - new_count = --he->refcounted_he_refcnt; - HINTS_REFCNT_UNLOCK; - - if (new_count) { - return; - } + struct refcounted_he *copy; + U32 new_count; + + HINTS_REFCNT_LOCK; + new_count = --he->refcounted_he_refcnt; + HINTS_REFCNT_UNLOCK; + + if (new_count) { + return; + } #ifndef USE_ITHREADS - unshare_hek_or_pvn (he->refcounted_he_hek, 0, 0, 0); + unshare_hek_or_pvn (he->refcounted_he_hek, 0, 0, 0); #endif - copy = he; - he = he->refcounted_he_next; - PerlMemShared_free(copy); + copy = he; + he = he->refcounted_he_next; + PerlMemShared_free(copy); } } @@ -3733,29 +3947,27 @@ to this function: no action occurs and a null pointer is returned. struct refcounted_he * Perl_refcounted_he_inc(pTHX_ struct refcounted_he *he) { -#ifdef USE_ITHREADS - dVAR; -#endif PERL_UNUSED_CONTEXT; if (he) { - HINTS_REFCNT_LOCK; - he->refcounted_he_refcnt++; - HINTS_REFCNT_UNLOCK; + HINTS_REFCNT_LOCK; + he->refcounted_he_refcnt++; + HINTS_REFCNT_UNLOCK; } return he; } /* +=for apidoc_section $COP =for apidoc cop_fetch_label Returns the label attached to a cop, and stores its length in bytes into C<*len>. Upon return, C<*flags> will be set to either C or 0. -Alternatively, use the macro L>; +Alternatively, use the macro C>; or if you don't need to know if the label is UTF-8 or not, the macro -L>; -or if you additionally dont need to know the length, L>. +C>; +or if you additionally dont need to know the length, C>. =cut */ @@ -3770,29 +3982,29 @@ Perl_cop_fetch_label(pTHX_ COP *const cop, STRLEN *len, U32 *flags) { PERL_UNUSED_CONTEXT; if (!chain) - return NULL; + return NULL; #ifdef USE_ITHREADS if (chain->refcounted_he_keylen != 1) - return NULL; + return NULL; if (*REF_HE_KEY(chain) != ':') - return NULL; + return NULL; #else if ((STRLEN)HEK_LEN(chain->refcounted_he_hek) != 1) - return NULL; + return NULL; if (*HEK_KEY(chain->refcounted_he_hek) != ':') - return NULL; + return NULL; #endif /* Stop anyone trying to really mess us up by adding their own value for ':' into %^H */ if ((chain->refcounted_he_data[0] & HVrhek_typemask) != HVrhek_PV - && (chain->refcounted_he_data[0] & HVrhek_typemask) != HVrhek_PV_UTF8) - return NULL; + && (chain->refcounted_he_data[0] & HVrhek_typemask) != HVrhek_PV_UTF8) + return NULL; if (len) - *len = chain->refcounted_he_val.refcounted_he_u_len; + *len = chain->refcounted_he_val.refcounted_he_u_len; if (flags) { - *flags = ((chain->refcounted_he_data[0] & HVrhek_typemask) - == HVrhek_PV_UTF8) ? SVf_UTF8 : 0; + *flags = ((chain->refcounted_he_data[0] & HVrhek_typemask) + == HVrhek_PV_UTF8) ? SVf_UTF8 : 0; } return chain->refcounted_he_data + 1; } @@ -3809,22 +4021,23 @@ for a UTF-8 label. Any other flag is ignored. void Perl_cop_store_label(pTHX_ COP *const cop, const char *label, STRLEN len, - U32 flags) + U32 flags) { SV *labelsv; PERL_ARGS_ASSERT_COP_STORE_LABEL; if (flags & ~(SVf_UTF8)) - Perl_croak(aTHX_ "panic: cop_store_label illegal flag bits 0x%" UVxf, - (UV)flags); + Perl_croak(aTHX_ "panic: cop_store_label illegal flag bits 0x%" UVxf, + (UV)flags); labelsv = newSVpvn_flags(label, len, SVs_TEMP); if (flags & SVf_UTF8) - SvUTF8_on(labelsv); + SvUTF8_on(labelsv); cop->cop_hints_hash - = refcounted_he_new_pvs(cop->cop_hints_hash, ":", labelsv, 0); + = refcounted_he_new_pvs(cop->cop_hints_hash, ":", labelsv, 0); } /* +=for apidoc_section $HV =for apidoc hv_assert Check that a hash is in an internally consistent state. @@ -3837,7 +4050,6 @@ Check that a hash is in an internally consistent state. void Perl_hv_assert(pTHX_ HV *hv) { - dVAR; HE* entry; int withflags = 0; int placeholders = 0; @@ -3851,47 +4063,47 @@ Perl_hv_assert(pTHX_ HV *hv) (void)hv_iterinit(hv); while ((entry = hv_iternext_flags(hv, HV_ITERNEXT_WANTPLACEHOLDERS))) { - /* sanity check the values */ - if (HeVAL(entry) == &PL_sv_placeholder) - placeholders++; - else - real++; - /* sanity check the keys */ - if (HeSVKEY(entry)) { - NOOP; /* Don't know what to check on SV keys. */ - } else if (HeKUTF8(entry)) { - withflags++; - if (HeKWASUTF8(entry)) { - PerlIO_printf(Perl_debug_log, - "hash key has both WASUTF8 and UTF8: '%.*s'\n", - (int) HeKLEN(entry), HeKEY(entry)); - bad = 1; - } - } else if (HeKWASUTF8(entry)) - withflags++; + /* sanity check the values */ + if (HeVAL(entry) == &PL_sv_placeholder) + placeholders++; + else + real++; + /* sanity check the keys */ + if (HeSVKEY(entry)) { + NOOP; /* Don't know what to check on SV keys. */ + } else if (HeKUTF8(entry)) { + withflags++; + if (HeKWASUTF8(entry)) { + PerlIO_printf(Perl_debug_log, + "hash key has both WASUTF8 and UTF8: '%.*s'\n", + (int) HeKLEN(entry), HeKEY(entry)); + bad = 1; + } + } else if (HeKWASUTF8(entry)) + withflags++; } if (!SvTIED_mg((const SV *)hv, PERL_MAGIC_tied)) { - static const char bad_count[] = "Count %d %s(s), but hash reports %d\n"; - const int nhashkeys = HvUSEDKEYS(hv); - const int nhashplaceholders = HvPLACEHOLDERS_get(hv); - - if (nhashkeys != real) { - PerlIO_printf(Perl_debug_log, bad_count, real, "keys", nhashkeys ); - bad = 1; - } - if (nhashplaceholders != placeholders) { - PerlIO_printf(Perl_debug_log, bad_count, placeholders, "placeholder", nhashplaceholders ); - bad = 1; - } + static const char bad_count[] = "Count %d %s(s), but hash reports %d\n"; + const int nhashkeys = HvUSEDKEYS(hv); + const int nhashplaceholders = HvPLACEHOLDERS_get(hv); + + if (nhashkeys != real) { + PerlIO_printf(Perl_debug_log, bad_count, real, "keys", nhashkeys ); + bad = 1; + } + if (nhashplaceholders != placeholders) { + PerlIO_printf(Perl_debug_log, bad_count, placeholders, "placeholder", nhashplaceholders ); + bad = 1; + } } if (withflags && ! HvHASKFLAGS(hv)) { - PerlIO_printf(Perl_debug_log, - "Hash has HASKFLAGS off but I count %d key(s) with flags\n", - withflags); - bad = 1; + PerlIO_printf(Perl_debug_log, + "Hash has HASKFLAGS off but I count %d key(s) with flags\n", + withflags); + bad = 1; } if (bad) { - sv_dump(MUTABLE_SV(hv)); + sv_dump(MUTABLE_SV(hv)); } HvRITER_set(hv, riter); /* Restore hash iterator state */ HvEITER_set(hv, eiter); diff --git a/gnu/usr.bin/perl/hv.h b/gnu/usr.bin/perl/hv.h index 607152c840b..82e9c833962 100644 --- a/gnu/usr.bin/perl/hv.h +++ b/gnu/usr.bin/perl/hv.h @@ -28,6 +28,13 @@ # define PERL_HASH_ITER_BUCKET(iter) (((iter)->xhv_riter) ^ ((iter)->xhv_rand)) #endif +#ifdef PERL_USE_UNSHARED_KEYS_IN_LARGE_HASHES +#define LARGE_HASH_HEURISTIC(hv,new_max) S_large_hash_heuristic(aTHX_ (hv), (new_max)) +#else +#define LARGE_HASH_HEURISTIC(hv,new_max) 0 +#endif + + /* entry in hash value chain */ struct he { /* Keep hent_next first in this structure, because sv_free_arenas take @@ -36,8 +43,8 @@ struct he { HE *hent_next; /* next entry in chain */ HEK *hent_hek; /* hash key */ union { - SV *hent_val; /* scalar value that was hashed */ - Size_t hent_refcount; /* references for this shared hash key */ + SV *hent_val; /* scalar value that was hashed */ + Size_t hent_refcount; /* references for this shared hash key */ } he_valu; }; @@ -139,23 +146,25 @@ struct xpvhv { STRLEN xhv_max; /* subscript of last element of xhv_array */ }; -/* -=head1 Hash Manipulation Functions +struct xpvhv_with_aux { + HV *xmg_stash; /* class package */ + union _xmgu xmg_u; + STRLEN xhv_keys; /* total keys, including placeholders */ + STRLEN xhv_max; /* subscript of last element of xhv_array */ + struct xpvhv_aux xhv_aux; +}; +/* =for apidoc AmnU||HEf_SVKEY This flag, used in the length slot of hash entries and magic structures, specifies the structure contains an C pointer where a C pointer is to be expected. (For information only--not to be used). -=head1 Handy Values - =for apidoc ADmnU||Nullhv Null HV pointer. (deprecated - use C<(HV *)NULL> instead) -=head1 Hash Manipulation Functions - =for apidoc Am|char*|HvNAME|HV* stash Returns the package name of a stash, or C if C isn't a stash. See C>, C>. @@ -163,6 +172,10 @@ See C>, C>. =for apidoc Am|STRLEN|HvNAMELEN|HV *stash Returns the length of the stash's name. +Disfavored forms of HvNAME and HvNAMELEN; suppress mention of them +=for apidoc Cmh|char*|HvNAME_get|HV* stash +=for apidoc Amh|I32|HvNAMELEN_get|HV* stash + =for apidoc Am|unsigned char|HvNAMEUTF8|HV *stash Returns true if the name is in UTF-8 encoding. @@ -244,18 +257,6 @@ C. #define PERL_HASH_DEFAULT_HvMAX 7 -/* During hsplit(), if HvMAX(hv)+1 (the new bucket count) is >= this value, - * we preallocate the HvAUX() struct. - * The assumption being that we are using so much space anyway we might - * as well allocate the extra bytes and speed up later keys() - * or each() operations. We don't do this to small hashes as we assume - * that a) it will be easy/fast to resize them to add the iterator, and b) that - * many of them will be objects which won't be traversed. Larger hashes however - * will take longer to extend, and the size of the aux struct is swamped by the - * overall length of the bucket array. - * */ -#define PERL_HV_ALLOC_AUX_SIZE (1 << 9) - /* these hash entry flags ride on hent_klen (for use only in magic/tied HVs) */ #define HEf_SVKEY -2 /* hent_key is an SV* */ @@ -268,7 +269,13 @@ C. =for apidoc Am|STRLEN|HvFILL|HV *const hv -See L. +Returns the number of hash buckets that happen to be in use. + +As of perl 5.25 this function is used only for debugging +purposes, and the number of used hash buckets is not +in any way cached, thus this function can be costly +to execute as it must iterate over all the buckets in the +hash. =cut @@ -277,7 +284,7 @@ See L. #define HvMAX(hv) ((XPVHV*) SvANY(hv))->xhv_max /* This quite intentionally does no flag checking first. That's your responsibility. */ -#define HvAUX(hv) ((struct xpvhv_aux*)&(HvARRAY(hv)[HvMAX(hv)+1])) +#define HvAUX(hv) (&(((struct xpvhv_with_aux*) SvANY(hv))->xhv_aux)) #define HvRITER(hv) (*Perl_hv_riter_p(aTHX_ MUTABLE_HV(hv))) #define HvEITER(hv) (*Perl_hv_eiter_p(aTHX_ MUTABLE_HV(hv))) #define HvRITER_set(hv,r) Perl_hv_riter_set(aTHX_ MUTABLE_HV(hv), r) @@ -306,16 +313,16 @@ See L. ) /* This macro may go away without notice. */ #define HvNAME_HEK(hv) \ - (SvOOK(hv) && HvAUX(hv)->xhv_name_u.xhvnameu_name ? HvNAME_HEK_NN(hv) : NULL) + (SvOOK(hv) && HvAUX(hv)->xhv_name_u.xhvnameu_name ? HvNAME_HEK_NN(hv) : NULL) #define HvNAME_get(hv) \ - ((SvOOK(hv) && HvAUX(hv)->xhv_name_u.xhvnameu_name && HvNAME_HEK_NN(hv)) \ - ? HEK_KEY(HvNAME_HEK_NN(hv)) : NULL) + ((SvOOK(hv) && HvAUX(hv)->xhv_name_u.xhvnameu_name && HvNAME_HEK_NN(hv)) \ + ? HEK_KEY(HvNAME_HEK_NN(hv)) : NULL) #define HvNAMELEN_get(hv) \ - ((SvOOK(hv) && HvAUX(hv)->xhv_name_u.xhvnameu_name && HvNAME_HEK_NN(hv)) \ - ? HEK_LEN(HvNAME_HEK_NN(hv)) : 0) + ((SvOOK(hv) && HvAUX(hv)->xhv_name_u.xhvnameu_name && HvNAME_HEK_NN(hv)) \ + ? HEK_LEN(HvNAME_HEK_NN(hv)) : 0) #define HvNAMEUTF8(hv) \ - ((SvOOK(hv) && HvAUX(hv)->xhv_name_u.xhvnameu_name && HvNAME_HEK_NN(hv)) \ - ? HEK_UTF8(HvNAME_HEK_NN(hv)) : 0) + ((SvOOK(hv) && HvAUX(hv)->xhv_name_u.xhvnameu_name && HvNAME_HEK_NN(hv)) \ + ? HEK_UTF8(HvNAME_HEK_NN(hv)) : 0) #define HvENAME_HEK_NN(hv) \ ( \ HvAUX(hv)->xhv_name_count > 0 ? HvAUX(hv)->xhv_name_u.xhvnameu_names[0] : \ @@ -324,19 +331,16 @@ See L. HvAUX(hv)->xhv_name_u.xhvnameu_name \ ) #define HvENAME_HEK(hv) \ - (SvOOK(hv) && HvAUX(hv)->xhv_name_u.xhvnameu_name ? HvENAME_HEK_NN(hv) : NULL) + (SvOOK(hv) && HvAUX(hv)->xhv_name_u.xhvnameu_name ? HvENAME_HEK_NN(hv) : NULL) #define HvENAME_get(hv) \ ((SvOOK(hv) && HvAUX(hv)->xhv_name_u.xhvnameu_name && HvAUX(hv)->xhv_name_count != -1) \ - ? HEK_KEY(HvENAME_HEK_NN(hv)) : NULL) + ? HEK_KEY(HvENAME_HEK_NN(hv)) : NULL) #define HvENAMELEN_get(hv) \ ((SvOOK(hv) && HvAUX(hv)->xhv_name_u.xhvnameu_name && HvAUX(hv)->xhv_name_count != -1) \ - ? HEK_LEN(HvENAME_HEK_NN(hv)) : 0) + ? HEK_LEN(HvENAME_HEK_NN(hv)) : 0) #define HvENAMEUTF8(hv) \ ((SvOOK(hv) && HvAUX(hv)->xhv_name_u.xhvnameu_name && HvAUX(hv)->xhv_name_count != -1) \ - ? HEK_UTF8(HvENAME_HEK_NN(hv)) : 0) - -/* the number of keys (including any placeholders) - NOT PART OF THE API */ -#define XHvTOTALKEYS(xhv) ((xhv)->xhv_keys) + ? HEK_UTF8(HvENAME_HEK_NN(hv)) : 0) /* * HvKEYS gets the number of keys that actually exist(), and is provided @@ -345,11 +349,18 @@ See L. */ #define HvKEYS(hv) HvUSEDKEYS(hv) #define HvUSEDKEYS(hv) (HvTOTALKEYS(hv) - HvPLACEHOLDERS_get(hv)) -#define HvTOTALKEYS(hv) XHvTOTALKEYS((XPVHV*) SvANY(hv)) +#define HvTOTALKEYS(hv) (((XPVHV*) SvANY(hv))->xhv_keys) #define HvPLACEHOLDERS(hv) (*Perl_hv_placeholders_p(aTHX_ MUTABLE_HV(hv))) #define HvPLACEHOLDERS_get(hv) (SvMAGIC(hv) ? Perl_hv_placeholders_get(aTHX_ (const HV *)hv) : 0) #define HvPLACEHOLDERS_set(hv,p) Perl_hv_placeholders_set(aTHX_ MUTABLE_HV(hv), p) +/* This (now) flags whether *new* keys in the hash will be allocated from the + * shared string table. We have a heuristic to call HvSHAREKEYS_off() if a hash + * is "getting large". After which, the first keys in that hash will be from + * the shared string table, but subsequent keys will not be. + * + * If we didn't do this, we'd have to reallocate all keys when we switched this + * flag, which would be work for no real gain. */ #define HvSHAREKEYS(hv) (SvFLAGS(hv) & SVphv_SHAREKEYS) #define HvSHAREKEYS_on(hv) (SvFLAGS(hv) |= SVphv_SHAREKEYS) #define HvSHAREKEYS_off(hv) (SvFLAGS(hv) &= ~SVphv_SHAREKEYS) @@ -385,24 +396,24 @@ See L. #define HeVAL(he) (he)->he_valu.hent_val #define HeHASH(he) HEK_HASH(HeKEY_hek(he)) #define HePV(he,lp) ((HeKLEN(he) == HEf_SVKEY) ? \ - SvPV(HeKEY_sv(he),lp) : \ - ((lp = HeKLEN(he)), HeKEY(he))) + SvPV(HeKEY_sv(he),lp) : \ + ((lp = HeKLEN(he)), HeKEY(he))) #define HeUTF8(he) ((HeKLEN(he) == HEf_SVKEY) ? \ - SvUTF8(HeKEY_sv(he)) : \ - (U32)HeKUTF8(he)) + SvUTF8(HeKEY_sv(he)) : \ + (U32)HeKUTF8(he)) #define HeSVKEY(he) ((HeKEY(he) && \ - HeKLEN(he) == HEf_SVKEY) ? \ - HeKEY_sv(he) : NULL) + HeKLEN(he) == HEf_SVKEY) ? \ + HeKEY_sv(he) : NULL) #define HeSVKEY_force(he) (HeKEY(he) ? \ - ((HeKLEN(he) == HEf_SVKEY) ? \ - HeKEY_sv(he) : \ - newSVpvn_flags(HeKEY(he), \ + ((HeKLEN(he) == HEf_SVKEY) ? \ + HeKEY_sv(he) : \ + newSVpvn_flags(HeKEY(he), \ HeKLEN(he), \ SVs_TEMP | \ ( HeKUTF8(he) ? SVf_UTF8 : 0 ))) : \ - &PL_sv_undef) + &PL_sv_undef) #define HeSVKEY_set(he,sv) ((HeKLEN(he) = HEf_SVKEY), (HeKEY_sv(he) = sv)) #ifndef PERL_CORE @@ -416,17 +427,15 @@ See L. #define HVhek_UTF8 0x01 /* Key is utf8 encoded. */ #define HVhek_WASUTF8 0x02 /* Key is bytes here, but was supplied as utf8. */ -#define HVhek_UNSHARED 0x08 /* This key isn't a shared hash key. */ +#define HVhek_NOTSHARED 0x04 /* This key isn't a shared hash key. */ /* the following flags are options for functions, they are not stored in heks */ #define HVhek_FREEKEY 0x100 /* Internal flag to say key is Newx()ed. */ #define HVhek_PLACEHOLD 0x200 /* Internal flag to create placeholder. * (may change, but Storable is a core module) */ #define HVhek_KEYCANONICAL 0x400 /* Internal flag - key is in canonical form. - If the string is UTF-8, it cannot be - converted to bytes. */ -#define HVhek_MASK 0xFF - -#define HVhek_ENABLEHVKFLAGS (HVhek_MASK & ~(HVhek_UNSHARED)) + If the string is UTF-8, it cannot be + converted to bytes. */ +#define HVhek_ENABLEHVKFLAGS (HVhek_UTF8|HVhek_WASUTF8) #define HEK_UTF8(hek) (HEK_FLAGS(hek) & HVhek_UTF8) #define HEK_UTF8_on(hek) (HEK_FLAGS(hek) |= HVhek_UTF8) @@ -444,9 +453,9 @@ See L. #else # define MALLOC_OVERHEAD 16 # define PERL_HV_ARRAY_ALLOC_BYTES(size) \ - (((size) < 64) \ - ? (size) * sizeof(HE*) \ - : (size) * sizeof(HE*) * 2 - MALLOC_OVERHEAD) + (((size) < 64) \ + ? (size) * sizeof(HE*) \ + : (size) * sizeof(HE*) * 2 - MALLOC_OVERHEAD) #endif /* Flags for hv_iternext_flags. */ @@ -461,33 +470,33 @@ See L. #define share_hek_hek(hek) \ (++(((struct shared_he *)(((char *)hek) \ - - STRUCT_OFFSET(struct shared_he, \ - shared_he_hek))) \ - ->shared_he_he.he_valu.hent_refcount), \ + - STRUCT_OFFSET(struct shared_he, \ + shared_he_hek))) \ + ->shared_he_he.he_valu.hent_refcount), \ hek) #define hv_store_ent(hv, keysv, val, hash) \ ((HE *) hv_common((hv), (keysv), NULL, 0, 0, HV_FETCH_ISSTORE, \ - (val), (hash))) + (val), (hash))) #define hv_exists_ent(hv, keysv, hash) \ cBOOL(hv_common((hv), (keysv), NULL, 0, 0, HV_FETCH_ISEXISTS, 0, (hash))) #define hv_fetch_ent(hv, keysv, lval, hash) \ ((HE *) hv_common((hv), (keysv), NULL, 0, 0, \ - ((lval) ? HV_FETCH_LVALUE : 0), NULL, (hash))) + ((lval) ? HV_FETCH_LVALUE : 0), NULL, (hash))) #define hv_delete_ent(hv, key, flags, hash) \ (MUTABLE_SV(hv_common((hv), (key), NULL, 0, 0, (flags) | HV_DELETE, \ - NULL, (hash)))) + NULL, (hash)))) #define hv_store_flags(hv, key, klen, val, hash, flags) \ ((SV**) hv_common((hv), NULL, (key), (klen), (flags), \ - (HV_FETCH_ISSTORE|HV_FETCH_JUST_SV), (val), \ - (hash))) + (HV_FETCH_ISSTORE|HV_FETCH_JUST_SV), (val), \ + (hash))) #define hv_store(hv, key, klen, val, hash) \ ((SV**) hv_common_key_len((hv), (key), (klen), \ - (HV_FETCH_ISSTORE|HV_FETCH_JUST_SV), \ - (val), (hash))) + (HV_FETCH_ISSTORE|HV_FETCH_JUST_SV), \ + (val), (hash))) @@ -496,45 +505,48 @@ See L. #define hv_fetch(hv, key, klen, lval) \ ((SV**) hv_common_key_len((hv), (key), (klen), (lval) \ - ? (HV_FETCH_JUST_SV | HV_FETCH_LVALUE) \ - : HV_FETCH_JUST_SV, NULL, 0)) + ? (HV_FETCH_JUST_SV | HV_FETCH_LVALUE) \ + : HV_FETCH_JUST_SV, NULL, 0)) #define hv_delete(hv, key, klen, flags) \ (MUTABLE_SV(hv_common_key_len((hv), (key), (klen), \ - (flags) | HV_DELETE, NULL, 0))) + (flags) | HV_DELETE, NULL, 0))) /* Provide 's' suffix subs for constant strings (and avoid needing to count * chars). See STR_WITH_LEN in handy.h - because these are macros we cant use * STR_WITH_LEN to do the work, we have to unroll it. */ #define hv_existss(hv, key) \ - hv_exists((hv), ("" key ""), (sizeof(key)-1)) + hv_exists((hv), ASSERT_IS_LITERAL(key), (sizeof(key)-1)) #define hv_fetchs(hv, key, lval) \ - hv_fetch((hv), ("" key ""), (sizeof(key)-1), (lval)) + hv_fetch((hv), ASSERT_IS_LITERAL(key), (sizeof(key)-1), (lval)) #define hv_deletes(hv, key, flags) \ - hv_delete((hv), ("" key ""), (sizeof(key)-1), (flags)) + hv_delete((hv), ASSERT_IS_LITERAL(key), (sizeof(key)-1), (flags)) #define hv_name_sets(hv, name, flags) \ - hv_name_set((hv),("" name ""),(sizeof(name)-1), flags) + hv_name_set((hv),ASSERT_IS_LITERAL(name),(sizeof(name)-1), flags) #define hv_stores(hv, key, val) \ - hv_store((hv), ("" key ""), (sizeof(key)-1), (val), 0) + hv_store((hv), ASSERT_IS_LITERAL(key), (sizeof(key)-1), (val), 0) #ifdef PERL_CORE # define hv_storehek(hv, hek, val) \ hv_common((hv), NULL, HEK_KEY(hek), HEK_LEN(hek), HEK_UTF8(hek), \ - HV_FETCH_ISSTORE|HV_FETCH_JUST_SV, (val), HEK_HASH(hek)) + HV_FETCH_ISSTORE|HV_FETCH_JUST_SV, (val), HEK_HASH(hek)) # define hv_fetchhek(hv, hek, lval) \ ((SV **) \ hv_common((hv), NULL, HEK_KEY(hek), HEK_LEN(hek), HEK_UTF8(hek), \ - (lval) \ - ? (HV_FETCH_JUST_SV | HV_FETCH_LVALUE) \ - : HV_FETCH_JUST_SV, \ - NULL, HEK_HASH(hek))) + (lval) \ + ? (HV_FETCH_JUST_SV | HV_FETCH_LVALUE) \ + : HV_FETCH_JUST_SV, \ + NULL, HEK_HASH(hek))) # define hv_deletehek(hv, hek, flags) \ hv_common((hv), NULL, HEK_KEY(hek), HEK_LEN(hek), HEK_UTF8(hek), \ - (flags)|HV_DELETE, NULL, HEK_HASH(hek)) + (flags)|HV_DELETE, NULL, HEK_HASH(hek)) +#define hv_existshek(hv, hek) \ + cBOOL(hv_common((hv), NULL, HEK_KEY(hek), HEK_LEN(hek), HEK_UTF8(hek), \ + HV_FETCH_ISEXISTS, NULL, HEK_HASH(hek))) #endif /* This refcounted he structure is used for storing the hints used for lexical @@ -547,9 +559,7 @@ struct refcounted_he; /* flags for the refcounted_he API */ #define REFCOUNTED_HE_KEY_UTF8 0x00000001 -#ifdef PERL_CORE -# define REFCOUNTED_HE_EXISTS 0x00000002 -#endif +#define REFCOUNTED_HE_EXISTS 0x00000002 #ifdef PERL_CORE @@ -563,10 +573,10 @@ struct refcounted_he { HEK *refcounted_he_hek; /* hint key */ #endif union { - IV refcounted_he_u_iv; - UV refcounted_he_u_uv; - STRLEN refcounted_he_u_len; - void *refcounted_he_u_ptr; /* Might be useful in future */ + IV refcounted_he_u_iv; + UV refcounted_he_u_uv; + STRLEN refcounted_he_u_len; + void *refcounted_he_u_ptr; /* Might be useful in future */ } refcounted_he_val; U32 refcounted_he_refcnt; /* reference count */ /* First byte is flags. Then NUL-terminated value. Then for ithreads, @@ -612,9 +622,9 @@ instead of a string/length pair, and no precomputed hash. #ifdef USE_ITHREADS /* A big expression to find the key offset */ #define REF_HE_KEY(chain) \ - ((((chain->refcounted_he_data[0] & 0x60) == 0x40) \ - ? chain->refcounted_he_val.refcounted_he_u_len + 1 : 0) \ - + 1 + chain->refcounted_he_data) + ((((chain->refcounted_he_data[0] & 0x60) == 0x40) \ + ? chain->refcounted_he_val.refcounted_he_u_len + 1 : 0) \ + + 1 + chain->refcounted_he_data) #endif # ifdef USE_ITHREADS diff --git a/gnu/usr.bin/perl/hv_func.h b/gnu/usr.bin/perl/hv_func.h index 144488205a5..340d94a1356 100644 --- a/gnu/usr.bin/perl/hv_func.h +++ b/gnu/usr.bin/perl/hv_func.h @@ -6,18 +6,17 @@ * If USE_HASH_SEED is defined, hash randomisation is done by default * (see also perl.c:perl_parse() and S_init_tls_and_interp() and util.c:get_hash_seed()) */ -#ifndef PERL_SEEN_HV_FUNC_H /* compile once */ -#define PERL_SEEN_HV_FUNC_H +#ifndef PERL_SEEN_HV_FUNC_H_ /* compile once */ +#define PERL_SEEN_HV_FUNC_H_ #include "hv_macro.h" #if !( 0 \ || defined(PERL_HASH_FUNC_SIPHASH) \ || defined(PERL_HASH_FUNC_SIPHASH13) \ - || defined(PERL_HASH_FUNC_STADTX) \ || defined(PERL_HASH_FUNC_ZAPHOD32) \ ) # ifdef CAN64BITHASH -# define PERL_HASH_FUNC_STADTX +# define PERL_HASH_FUNC_SIPHASH13 # else # define PERL_HASH_FUNC_ZAPHOD32 # endif @@ -50,15 +49,6 @@ # define __PERL_HASH_STATE_BYTES (__PERL_HASH_WORD_SIZE * 4) # define __PERL_HASH_SEED_STATE(seed,state) S_perl_siphash_seed_state(seed,state) # define __PERL_HASH_WITH_STATE(state,str,len) S_perl_hash_siphash_1_3_with_state((state),(U8*)(str),(len)) -#elif defined(PERL_HASH_FUNC_STADTX) -# define __PERL_HASH_FUNC "STADTX" -# define __PERL_HASH_WORD_TYPE U64 -# define __PERL_HASH_WORD_SIZE sizeof(__PERL_HASH_WORD_TYPE) -# define __PERL_HASH_SEED_BYTES (__PERL_HASH_WORD_SIZE * 2) -# define __PERL_HASH_STATE_BYTES (__PERL_HASH_WORD_SIZE * 4) -# define __PERL_HASH_SEED_STATE(seed,state) stadtx_seed_state(seed,state) -# define __PERL_HASH_WITH_STATE(state,str,len) (U32)stadtx_hash_with_state((state),(U8*)(str),(len)) -# include "stadtx_hash.h" #elif defined(PERL_HASH_FUNC_ZAPHOD32) # define __PERL_HASH_FUNC "ZAPHOD32" # define __PERL_HASH_WORD_TYPE U32 @@ -80,6 +70,11 @@ #error "__PERL_HASH_FUNC not defined" #endif +/* Some siphash static functions are needed by XS::APItest even when + siphash isn't the current hash. For SipHash builds this needs to + be before the S_perl_hash_with_seed() definition. +*/ +#include "perl_siphash.h" #define __PERL_HASH_SEED_roundup(x, y) ( ( ( (x) + ( (y) - 1 ) ) / (y) ) * (y) ) #define _PERL_HASH_SEED_roundup(x) __PERL_HASH_SEED_roundup(x,__PERL_HASH_WORD_SIZE) @@ -96,15 +91,15 @@ #else #define _PERL_HASH_FUNC "SBOX32_WITH_" __PERL_HASH_FUNC -/* note the 3 in the below code comes from the fact the seed to initialize the SBOX is 96 bits */ -#define _PERL_HASH_SEED_BYTES ( __PERL_HASH_SEED_BYTES + (int)( 3 * sizeof(U32)) ) +/* note the 4 in the below code comes from the fact the seed to initialize the SBOX is 128 bits */ +#define _PERL_HASH_SEED_BYTES ( __PERL_HASH_SEED_BYTES + (int)( 4 * sizeof(U32)) ) #define _PERL_HASH_STATE_BYTES \ ( __PERL_HASH_STATE_BYTES + ( ( 1 + ( 256 * SBOX32_MAX_LEN ) ) * sizeof(U32) ) ) #define _PERL_HASH_SEED_STATE(seed,state) STMT_START { \ __PERL_HASH_SEED_STATE(seed,state); \ - sbox32_seed_state96(seed + __PERL_HASH_SEED_BYTES, state + __PERL_HASH_STATE_BYTES); \ + sbox32_seed_state128(seed + __PERL_HASH_SEED_BYTES, state + __PERL_HASH_STATE_BYTES); \ } STMT_END #define _PERL_HASH_WITH_STATE(state,str,len) \ @@ -165,135 +160,6 @@ #define PERL_HASH_INTERNAL(hash,str,len) PERL_HASH(hash,str,len) #endif -/* This is SipHash by Jean-Philippe Aumasson and Daniel J. Bernstein. - * The authors claim it is relatively secure compared to the alternatives - * and that performance wise it is a suitable hash for languages like Perl. - * See: - * - * https://www.131002.net/siphash/ - * - * This implementation seems to perform slightly slower than one-at-a-time for - * short keys, but degrades slower for longer keys. Murmur Hash outperforms it - * regardless of keys size. - * - * It is 64 bit only. - */ - -#ifdef CAN64BITHASH - -#define SIPROUND \ - STMT_START { \ - v0 += v1; v1=ROTL64(v1,13); v1 ^= v0; v0=ROTL64(v0,32); \ - v2 += v3; v3=ROTL64(v3,16); v3 ^= v2; \ - v0 += v3; v3=ROTL64(v3,21); v3 ^= v0; \ - v2 += v1; v1=ROTL64(v1,17); v1 ^= v2; v2=ROTL64(v2,32); \ - } STMT_END - -#define SIPHASH_SEED_STATE(key,v0,v1,v2,v3) \ -do { \ - v0 = v2 = U8TO64_LE(key + 0); \ - v1 = v3 = U8TO64_LE(key + 8); \ - /* "somepseudorandomlygeneratedbytes" */ \ - v0 ^= UINT64_C(0x736f6d6570736575); \ - v1 ^= UINT64_C(0x646f72616e646f6d); \ - v2 ^= UINT64_C(0x6c7967656e657261); \ - v3 ^= UINT64_C(0x7465646279746573); \ -} while (0) - -PERL_STATIC_INLINE -void S_perl_siphash_seed_state(const unsigned char * const seed_buf, unsigned char * state_buf) { - U64 *v= (U64*) state_buf; - SIPHASH_SEED_STATE(seed_buf, v[0],v[1],v[2],v[3]); -} - -#define PERL_SIPHASH_FNC(FNC,SIP_ROUNDS,SIP_FINAL_ROUNDS) \ -PERL_STATIC_INLINE U64 \ -FNC ## _with_state_64 \ - (const unsigned char * const state, const unsigned char *in, const STRLEN inlen) \ -{ \ - const int left = inlen & 7; \ - const U8 *end = in + inlen - left; \ - \ - U64 b = ( ( U64 )(inlen) ) << 56; \ - U64 m; \ - U64 v0 = U8TO64_LE(state); \ - U64 v1 = U8TO64_LE(state+8); \ - U64 v2 = U8TO64_LE(state+16); \ - U64 v3 = U8TO64_LE(state+24); \ - \ - for ( ; in != end; in += 8 ) \ - { \ - m = U8TO64_LE( in ); \ - v3 ^= m; \ - \ - SIP_ROUNDS; \ - \ - v0 ^= m; \ - } \ - \ - switch( left ) \ - { \ - case 7: b |= ( ( U64 )in[ 6] ) << 48; /*FALLTHROUGH*/ \ - case 6: b |= ( ( U64 )in[ 5] ) << 40; /*FALLTHROUGH*/ \ - case 5: b |= ( ( U64 )in[ 4] ) << 32; /*FALLTHROUGH*/ \ - case 4: b |= ( ( U64 )in[ 3] ) << 24; /*FALLTHROUGH*/ \ - case 3: b |= ( ( U64 )in[ 2] ) << 16; /*FALLTHROUGH*/ \ - case 2: b |= ( ( U64 )in[ 1] ) << 8; /*FALLTHROUGH*/ \ - case 1: b |= ( ( U64 )in[ 0] ); break; \ - case 0: break; \ - } \ - \ - v3 ^= b; \ - \ - SIP_ROUNDS; \ - \ - v0 ^= b; \ - \ - v2 ^= 0xff; \ - \ - SIP_FINAL_ROUNDS \ - \ - b = v0 ^ v1 ^ v2 ^ v3; \ - return b; \ -} \ - \ -PERL_STATIC_INLINE U32 \ -FNC ## _with_state \ - (const unsigned char * const state, const unsigned char *in, const STRLEN inlen) \ -{ \ - union { \ - U64 h64; \ - U32 h32[2]; \ - } h; \ - h.h64= FNC ## _with_state_64(state,in,inlen); \ - return h.h32[0] ^ h.h32[1]; \ -} \ - \ - \ -PERL_STATIC_INLINE U32 \ -FNC (const unsigned char * const seed, const unsigned char *in, const STRLEN inlen) \ -{ \ - U64 state[4]; \ - SIPHASH_SEED_STATE(seed,state[0],state[1],state[2],state[3]); \ - return FNC ## _with_state((U8*)state,in,inlen); \ -} - - -PERL_SIPHASH_FNC( - S_perl_hash_siphash_1_3 - ,SIPROUND; - ,SIPROUND;SIPROUND;SIPROUND; -) - -PERL_SIPHASH_FNC( - S_perl_hash_siphash_2_4 - ,SIPROUND;SIPROUND; - ,SIPROUND;SIPROUND;SIPROUND;SIPROUND; -) - -#endif /* defined(CAN64BITHASH) */ - - PERL_STATIC_INLINE U32 S_perl_hash_with_seed(const U8 * seed, const U8 *str, STRLEN len) { __PERL_HASH_WORD_TYPE state[PERL_HASH_STATE_WORDS]; diff --git a/gnu/usr.bin/perl/inline.h b/gnu/usr.bin/perl/inline.h index bb0cdb0e542..436f8eb3ac4 100644 --- a/gnu/usr.bin/perl/inline.h +++ b/gnu/usr.bin/perl/inline.h @@ -39,27 +39,133 @@ SOFTWARE. /* ------------------------------- av.h ------------------------------- */ -PERL_STATIC_INLINE SSize_t -Perl_av_top_index(pTHX_ AV *av) +/* +=for apidoc_section $AV +=for apidoc av_count +Returns the number of elements in the array C. This is the true length of +the array, including any undefined elements. It is always the same as +S>. + +=cut +*/ +PERL_STATIC_INLINE Size_t +Perl_av_count(pTHX_ AV *av) { - PERL_ARGS_ASSERT_AV_TOP_INDEX; + PERL_ARGS_ASSERT_AV_COUNT; assert(SvTYPE(av) == SVt_PVAV); - return AvFILL(av); + return AvFILL(av) + 1; +} + +/* ------------------------------- av.c ------------------------------- */ + +/* +=for apidoc av_store_simple + +This is a cut-down version of av_store that assumes that the array is +very straightforward - no magic, not readonly, and AvREAL - and that +C is not negative. This function MUST NOT be used in situations +where any of those assumptions may not hold. + +Stores an SV in an array. The array index is specified as C. It +can be dereferenced to get the C that was stored there (= C)). + +Note that the caller is responsible for suitably incrementing the reference +count of C before the call. + +Approximate Perl equivalent: C. + +=cut +*/ + +PERL_STATIC_INLINE SV** +Perl_av_store_simple(pTHX_ AV *av, SSize_t key, SV *val) +{ + SV** ary; + + PERL_ARGS_ASSERT_AV_STORE_SIMPLE; + assert(SvTYPE(av) == SVt_PVAV); + assert(!SvMAGICAL(av)); + assert(!SvREADONLY(av)); + assert(AvREAL(av)); + assert(key > -1); + + ary = AvARRAY(av); + + if (AvFILLp(av) < key) { + if (key > AvMAX(av)) { + av_extend(av,key); + ary = AvARRAY(av); + } + AvFILLp(av) = key; + } else + SvREFCNT_dec(ary[key]); + + ary[key] = val; + return &ary[key]; +} + +/* +=for apidoc av_fetch_simple + +This is a cut-down version of av_fetch that assumes that the array is +very straightforward - no magic, not readonly, and AvREAL - and that +C is not negative. This function MUST NOT be used in situations +where any of those assumptions may not hold. + +Returns the SV at the specified index in the array. The C is the +index. If lval is true, you are guaranteed to get a real SV back (in case +it wasn't real before), which you can then modify. Check that the return +value is non-null before dereferencing it to a C. + +The rough perl equivalent is C<$myarray[$key]>. + +=cut +*/ + +PERL_STATIC_INLINE SV** +Perl_av_fetch_simple(pTHX_ AV *av, SSize_t key, I32 lval) +{ + PERL_ARGS_ASSERT_AV_FETCH_SIMPLE; + assert(SvTYPE(av) == SVt_PVAV); + assert(!SvMAGICAL(av)); + assert(!SvREADONLY(av)); + assert(AvREAL(av)); + assert(key > -1); + + if ( (key > AvFILLp(av)) || !AvARRAY(av)[key]) { + return lval ? av_store_simple(av,key,newSV_type(SVt_NULL)) : NULL; + } else { + return &AvARRAY(av)[key]; + } } /* ------------------------------- cv.h ------------------------------- */ +/* +=for apidoc_section $CV +=for apidoc CvGV +Returns the GV associated with the CV C, reifying it if necessary. + +=cut +*/ PERL_STATIC_INLINE GV * Perl_CvGV(pTHX_ CV *sv) { PERL_ARGS_ASSERT_CVGV; return CvNAMED(sv) - ? Perl_cvgv_from_hek(aTHX_ sv) - : ((XPVCV*)MUTABLE_PTR(SvANY(sv)))->xcv_gv_u.xcv_gv; + ? Perl_cvgv_from_hek(aTHX_ sv) + : ((XPVCV*)MUTABLE_PTR(SvANY(sv)))->xcv_gv_u.xcv_gv; } +/* +=for apidoc CvDEPTH +Returns the recursion level of the CV C. Hence >= 2 indicates we are in a +recursive call. + +=cut +*/ PERL_STATIC_INLINE I32 * Perl_CvDEPTH(const CV * const sv) { @@ -89,13 +195,13 @@ S_strip_spaces(pTHX_ const char * orig, STRLEN * const len) tmpsv = newSVpvn_flags(orig, *len, SVs_TEMP); tmps = SvPVX(tmpsv); while ((*len)--) { - if (!isSPACE(*orig)) - *tmps++ = *orig; - orig++; + if (!isSPACE(*orig)) + *tmps++ = *orig; + orig++; } *tmps = '\0'; *len = tmps - SvPVX(tmpsv); - return SvPVX(tmpsv); + return SvPVX(tmpsv); } #endif @@ -109,12 +215,12 @@ S_MgBYTEPOS(pTHX_ MAGIC *mg, SV *sv, const char *s, STRLEN len) assert(mg->mg_type == PERL_MAGIC_regex_global); assert(mg->mg_len != -1); if (mg->mg_flags & MGf_BYTES || !DO_UTF8(sv)) - return (STRLEN)mg->mg_len; + return (STRLEN)mg->mg_len; else { - const STRLEN pos = (STRLEN)mg->mg_len; - /* Without this check, we may read past the end of the buffer: */ - if (pos > sv_or_pv_len_utf8(sv, s, len)) return len+1; - return sv_or_pv_pos_u2b(sv, s, pos, NULL); + const STRLEN pos = (STRLEN)mg->mg_len; + /* Without this check, we may read past the end of the buffer: */ + if (pos > sv_or_pv_len_utf8(sv, s, len)) return len+1; + return sv_or_pv_pos_u2b(sv, s, pos, NULL); } } #endif @@ -131,27 +237,27 @@ S_PadnameIN_SCOPE(const PADNAME * const pn, const U32 seq) * This is complicated by the fact that PL_cop_seqmax * may have wrapped around at some point */ if (COP_SEQ_RANGE_LOW(pn) == PERL_PADSEQ_INTRO) - return FALSE; /* not yet introduced */ + return FALSE; /* not yet introduced */ if (COP_SEQ_RANGE_HIGH(pn) == PERL_PADSEQ_INTRO) { /* in compiling scope */ - if ( - (seq > COP_SEQ_RANGE_LOW(pn)) - ? (seq - COP_SEQ_RANGE_LOW(pn) < (U32_MAX >> 1)) - : (COP_SEQ_RANGE_LOW(pn) - seq > (U32_MAX >> 1)) - ) - return TRUE; + if ( + (seq > COP_SEQ_RANGE_LOW(pn)) + ? (seq - COP_SEQ_RANGE_LOW(pn) < (U32_MAX >> 1)) + : (COP_SEQ_RANGE_LOW(pn) - seq > (U32_MAX >> 1)) + ) + return TRUE; } else if ( - (COP_SEQ_RANGE_LOW(pn) > COP_SEQ_RANGE_HIGH(pn)) - ? - ( seq > COP_SEQ_RANGE_LOW(pn) - || seq <= COP_SEQ_RANGE_HIGH(pn)) + (COP_SEQ_RANGE_LOW(pn) > COP_SEQ_RANGE_HIGH(pn)) + ? + ( seq > COP_SEQ_RANGE_LOW(pn) + || seq <= COP_SEQ_RANGE_HIGH(pn)) - : ( seq > COP_SEQ_RANGE_LOW(pn) - && seq <= COP_SEQ_RANGE_HIGH(pn)) + : ( seq > COP_SEQ_RANGE_LOW(pn) + && seq <= COP_SEQ_RANGE_HIGH(pn)) ) - return TRUE; + return TRUE; return FALSE; } #endif @@ -162,9 +268,9 @@ PERL_STATIC_INLINE I32 Perl_TOPMARK(pTHX) { DEBUG_s(DEBUG_v(PerlIO_printf(Perl_debug_log, - "MARK top %p %" IVdf "\n", - PL_markstack_ptr, - (IV)*PL_markstack_ptr))); + "MARK top %p %" IVdf "\n", + PL_markstack_ptr, + (IV)*PL_markstack_ptr))); return *PL_markstack_ptr; } @@ -172,15 +278,30 @@ PERL_STATIC_INLINE I32 Perl_POPMARK(pTHX) { DEBUG_s(DEBUG_v(PerlIO_printf(Perl_debug_log, - "MARK pop %p %" IVdf "\n", - (PL_markstack_ptr-1), - (IV)*(PL_markstack_ptr-1)))); + "MARK pop %p %" IVdf "\n", + (PL_markstack_ptr-1), + (IV)*(PL_markstack_ptr-1)))); assert((PL_markstack_ptr > PL_markstack) || !"MARK underflow"); return *PL_markstack_ptr--; } /* ----------------------------- regexp.h ----------------------------- */ +/* PVLVs need to act as a superset of all scalar types - they are basically + * PVMGs with a few extra fields. + * REGEXPs are first class scalars, but have many fields that can't be copied + * into a PVLV body. + * + * Hence we take a different approach - instead of a copy, PVLVs store a pointer + * back to the original body. To avoid increasing the size of PVLVs just for the + * rare case of REGEXP assignment, this pointer is stored in the memory usually + * used for SvLEN(). Hence the check for SVt_PVLV below, and the ? : ternary to + * read the pointer from the two possible locations. The macro SvLEN() wraps the + * access to the union's member xpvlenu_len, but there is no equivalent macro + * for wrapping the union's member xpvlenu_rx, hence the direct reference here. + * + * See commit df6b4bd56551f2d3 for more details. */ + PERL_STATIC_INLINE struct regexp * Perl_ReANY(const REGEXP * const re) { @@ -196,18 +317,67 @@ Perl_ReANY(const REGEXP * const re) /* ------------------------------- sv.h ------------------------------- */ PERL_STATIC_INLINE bool -Perl_SvTRUE(pTHX_ SV *sv) { - if (!LIKELY(sv)) +Perl_SvTRUE(pTHX_ SV *sv) +{ + PERL_ARGS_ASSERT_SVTRUE; + + if (UNLIKELY(sv == NULL)) + return FALSE; + SvGETMAGIC(sv); + return SvTRUE_nomg_NN(sv); +} + +PERL_STATIC_INLINE bool +Perl_SvTRUE_nomg(pTHX_ SV *sv) +{ + PERL_ARGS_ASSERT_SVTRUE_NOMG; + + if (UNLIKELY(sv == NULL)) return FALSE; + return SvTRUE_nomg_NN(sv); +} + +PERL_STATIC_INLINE bool +Perl_SvTRUE_NN(pTHX_ SV *sv) +{ + PERL_ARGS_ASSERT_SVTRUE_NN; + SvGETMAGIC(sv); return SvTRUE_nomg_NN(sv); } +PERL_STATIC_INLINE bool +Perl_SvTRUE_common(pTHX_ SV * sv, const bool sv_2bool_is_fallback) +{ + PERL_ARGS_ASSERT_SVTRUE_COMMON; + + if (UNLIKELY(SvIMMORTAL_INTERP(sv))) + return SvIMMORTAL_TRUE(sv); + + if (! SvOK(sv)) + return FALSE; + + if (SvPOK(sv)) + return SvPVXtrue(sv); + + if (SvIOK(sv)) + return SvIVX(sv) != 0; /* casts to bool */ + + if (SvROK(sv) && !(SvOBJECT(SvRV(sv)) && HvAMAGIC(SvSTASH(SvRV(sv))))) + return TRUE; + + if (sv_2bool_is_fallback) + return sv_2bool_nomg(sv); + + return isGV_with_GP(sv); +} + + PERL_STATIC_INLINE SV * Perl_SvREFCNT_inc(SV *sv) { if (LIKELY(sv != NULL)) - SvREFCNT(sv)++; + SvREFCNT(sv)++; return sv; } PERL_STATIC_INLINE SV * @@ -222,17 +392,17 @@ PERL_STATIC_INLINE void Perl_SvREFCNT_inc_void(SV *sv) { if (LIKELY(sv != NULL)) - SvREFCNT(sv)++; + SvREFCNT(sv)++; } PERL_STATIC_INLINE void Perl_SvREFCNT_dec(pTHX_ SV *sv) { if (LIKELY(sv != NULL)) { - U32 rc = SvREFCNT(sv); - if (LIKELY(rc > 1)) - SvREFCNT(sv) = rc - 1; - else - Perl_sv_free2(aTHX_ sv, rc); + U32 rc = SvREFCNT(sv); + if (LIKELY(rc > 1)) + SvREFCNT(sv) = rc - 1; + else + Perl_sv_free2(aTHX_ sv, rc); } } @@ -244,11 +414,19 @@ Perl_SvREFCNT_dec_NN(pTHX_ SV *sv) PERL_ARGS_ASSERT_SVREFCNT_DEC_NN; if (LIKELY(rc > 1)) - SvREFCNT(sv) = rc - 1; + SvREFCNT(sv) = rc - 1; else - Perl_sv_free2(aTHX_ sv, rc); + Perl_sv_free2(aTHX_ sv, rc); } +/* +=for apidoc SvAMAGIC_on + +Indicate that C has overloading (active magic) enabled. + +=cut +*/ + PERL_STATIC_INLINE void Perl_SvAMAGIC_on(SV *sv) { @@ -257,13 +435,22 @@ Perl_SvAMAGIC_on(SV *sv) if (SvOBJECT(SvRV(sv))) HvAMAGIC_on(SvSTASH(SvRV(sv))); } + +/* +=for apidoc SvAMAGIC_off + +Indicate that C has overloading (active magic) disabled. + +=cut +*/ + PERL_STATIC_INLINE void Perl_SvAMAGIC_off(SV *sv) { PERL_ARGS_ASSERT_SVAMAGIC_OFF; if (SvROK(sv) && SvOBJECT(SvRV(sv))) - HvAMAGIC_off(SvSTASH(SvRV(sv))); + HvAMAGIC_off(SvSTASH(SvRV(sv))); } PERL_STATIC_INLINE U32 @@ -284,9 +471,9 @@ S_sv_or_pv_pos_u2b(pTHX_ SV *sv, const char *pv, STRLEN pos, STRLEN *lenp) { PERL_ARGS_ASSERT_SV_OR_PV_POS_U2B; if (SvGAMAGIC(sv)) { - U8 *hopped = utf8_hop((U8 *)pv, pos); - if (lenp) *lenp = (STRLEN)(utf8_hop(hopped, *lenp) - hopped); - return (STRLEN)(hopped - (U8 *)pv); + U8 *hopped = utf8_hop((U8 *)pv, pos); + if (lenp) *lenp = (STRLEN)(utf8_hop(hopped, *lenp) - hopped); + return (STRLEN)(hopped - (U8 *)pv); } return sv_pos_u2b_flags(sv,pos,lenp,SV_CONST_RETURN); } @@ -295,7 +482,7 @@ S_sv_or_pv_pos_u2b(pTHX_ SV *sv, const char *pv, STRLEN pos, STRLEN *lenp) /* ------------------------------- utf8.h ------------------------------- */ /* -=head1 Unicode Support +=for apidoc_section $unicode */ PERL_STATIC_INLINE void @@ -340,7 +527,7 @@ Perl_valid_utf8_to_uvchr(const U8 *s, STRLEN *retlen) /* An invariant is trivially returned */ if (expectlen == 1) { - return uv; + return uv; } /* Remove the leading bits that indicate the number of bytes, leaving just @@ -502,7 +689,7 @@ Perl_is_utf8_invariant_string_loc(const U8* const s, STRLEN len, const U8 ** ep) /* Process per-byte */ while (x < send) { - if (! UTF8_IS_INVARIANT(*x)) { + if (! UTF8_IS_INVARIANT(*x)) { if (ep) { *ep = x; } @@ -516,96 +703,420 @@ Perl_is_utf8_invariant_string_loc(const U8* const s, STRLEN len, const U8 ** ep) return TRUE; } -#ifndef EBCDIC +/* See if the platform has builtins for finding the most/least significant bit, + * and which one is right for using on 32 and 64 bit operands */ +#if (__has_builtin(__builtin_clz) || PERL_GCC_VERSION_GE(3,4,0)) +# if U32SIZE == INTSIZE +# define PERL_CLZ_32 __builtin_clz +# endif +# if defined(U64TYPE) && U64SIZE == INTSIZE +# define PERL_CLZ_64 __builtin_clz +# endif +#endif +#if (__has_builtin(__builtin_ctz) || PERL_GCC_VERSION_GE(3,4,0)) +# if U32SIZE == INTSIZE +# define PERL_CTZ_32 __builtin_ctz +# endif +# if defined(U64TYPE) && U64SIZE == INTSIZE +# define PERL_CTZ_64 __builtin_ctz +# endif +#endif -PERL_STATIC_INLINE unsigned int -Perl_variant_byte_number(PERL_UINTMAX_T word) +#if (__has_builtin(__builtin_clzl) || PERL_GCC_VERSION_GE(3,4,0)) +# if U32SIZE == LONGSIZE && ! defined(PERL_CLZ_32) +# define PERL_CLZ_32 __builtin_clzl +# endif +# if defined(U64TYPE) && U64SIZE == LONGSIZE && ! defined(PERL_CLZ_64) +# define PERL_CLZ_64 __builtin_clzl +# endif +#endif +#if (__has_builtin(__builtin_ctzl) || PERL_GCC_VERSION_GE(3,4,0)) +# if U32SIZE == LONGSIZE && ! defined(PERL_CTZ_32) +# define PERL_CTZ_32 __builtin_ctzl +# endif +# if defined(U64TYPE) && U64SIZE == LONGSIZE && ! defined(PERL_CTZ_64) +# define PERL_CTZ_64 __builtin_ctzl +# endif +#endif + +#if (__has_builtin(__builtin_clzll) || PERL_GCC_VERSION_GE(3,4,0)) +# if U32SIZE == LONGLONGSIZE && ! defined(PERL_CLZ_32) +# define PERL_CLZ_32 __builtin_clzll +# endif +# if defined(U64TYPE) && U64SIZE == LONGLONGSIZE && ! defined(PERL_CLZ_64) +# define PERL_CLZ_64 __builtin_clzll +# endif +#endif +#if (__has_builtin(__builtin_ctzll) || PERL_GCC_VERSION_GE(3,4,0)) +# if U32SIZE == LONGLONGSIZE && ! defined(PERL_CTZ_32) +# define PERL_CTZ_32 __builtin_ctzll +# endif +# if defined(U64TYPE) && U64SIZE == LONGLONGSIZE && ! defined(PERL_CTZ_64) +# define PERL_CTZ_64 __builtin_ctzll +# endif +#endif + +#if defined(_MSC_VER) +# include +# pragma intrinsic(_BitScanForward) +# pragma intrinsic(_BitScanReverse) +# ifdef _WIN64 +# pragma intrinsic(_BitScanForward64) +# pragma intrinsic(_BitScanReverse64) +# endif +#endif + +/* The reason there are not checks to see if ffs() and ffsl() are available for + * determining the lsb, is because these don't improve on the deBruijn method + * fallback, which is just a branchless integer multiply, array element + * retrieval, and shift. The others, even if the function call overhead is + * optimized out, have to cope with the possibility of the input being all + * zeroes, and almost certainly will have conditionals for this eventuality. + * khw, at the time of this commit, looked at the source for both gcc and clang + * to verify this. (gcc used a method inferior to deBruijn.) */ + +/* Below are functions to find the first, last, or only set bit in a word. On + * platforms with 64-bit capability, there is a pair for each operation; the + * first taking a 64 bit operand, and the second a 32 bit one. The logic is + * the same in each pair, so the second is stripped of most comments. */ + +#ifdef U64TYPE /* HAS_QUAD not usable outside the core */ + +PERL_STATIC_INLINE unsigned +Perl_lsbit_pos64(U64 word) { + /* Find the position (0..63) of the least significant set bit in the input + * word */ - /* This returns the position in a word (0..7) of the first variant byte in - * it. This is a helper function. Note that there are no branches */ + ASSUME(word != 0); - assert(word); + /* If we can determine that the platform has a usable fast method to get + * this info, use that */ - /* Get just the msb bits of each byte */ - word &= PERL_VARIANTS_WORD_MASK; +# if defined(PERL_CTZ_64) +# define PERL_HAS_FAST_GET_LSB_POS64 -# if BYTEORDER == 0x1234 || BYTEORDER == 0x12345678 + return (unsigned) PERL_CTZ_64(word); - /* Bytes are stored like - * Byte8 ... Byte2 Byte1 - * 63..56...15...8 7...0 +# elif U64SIZE == 8 && defined(_WIN64) && defined(_MSC_VER) +# define PERL_HAS_FAST_GET_LSB_POS64 + + { + unsigned long index; + _BitScanForward64(&index, word); + return (unsigned)index; + } + +# else + + /* Here, we didn't find a fast method for finding the lsb. Fall back to + * making the lsb the only set bit in the word, and use our function that + * works on words with a single bit set. * - * Isolate the lsb; + * Isolate the lsb; * https://stackoverflow.com/questions/757059/position-of-least-significant-bit-that-is-set * * The word will look like this, with a rightmost set bit in position 's': - * ('x's are don't cares) + * ('x's are don't cares, and 'y's are their complements) * s - * x..x100..0 - * x..xx10..0 Right shift (rightmost 0 is shifted off) - * x..xx01..1 Subtract 1, turns all the trailing zeros into 1's and - * the 1 just to their left into a 0; the remainder is - * untouched - * 0..0011..1 The xor with the original, x..xx10..0, clears that - * remainder, sets the bottom to all 1 - * 0..0100..0 Add 1 to clear the word except for the bit in 's' + * x..x100..00 + * y..y011..11 Complement + * y..y100..00 Add 1 + * 0..0100..00 And with the original * - * Another method is to do 'word &= -word'; but it generates a compiler - * message on some platforms about taking the negative of an unsigned */ + * (Yes, complementing and adding 1 is just taking the negative on 2's + * complement machines, but not on 1's complement ones, and some compilers + * complain about negating an unsigned.) + */ + return single_1bit_pos64(word & (~word + 1)); - word >>= 1; - word = 1 + (word ^ (word - 1)); +# endif -# elif BYTEORDER == 0x4321 || BYTEORDER == 0x87654321 +} - /* Bytes are stored like - * Byte1 Byte2 ... Byte8 - * 63..56 55..47 ... 7...0 +# define lsbit_pos_uintmax_(word) lsbit_pos64(word) +#else /* ! QUAD */ +# define lsbit_pos_uintmax_(word) lsbit_pos32(word) +#endif + +PERL_STATIC_INLINE unsigned /* Like above for 32 bit word */ +Perl_lsbit_pos32(U32 word) +{ + /* Find the position (0..31) of the least significant set bit in the input + * word */ + + ASSUME(word != 0); + +#if defined(PERL_CTZ_32) +# define PERL_HAS_FAST_GET_LSB_POS32 + + return (unsigned) PERL_CTZ_32(word); + +#elif U32SIZE == 4 && defined(_MSC_VER) +# define PERL_HAS_FAST_GET_LSB_POS32 + + { + unsigned long index; + _BitScanForward(&index, word); + return (unsigned)index; + } + +#else + + return single_1bit_pos32(word & (~word + 1)); + +#endif + +} + + +/* Convert the leading zeros count to the bit position of the first set bit. + * This just subtracts from the highest position, 31 or 63. But some compilers + * don't optimize this optimally, and so a bit of bit twiddling encourages them + * to do the right thing. It turns out that subtracting a smaller non-negative + * number 'x' from 2**n-1 for any n is the same as taking the exclusive-or of + * the two numbers. To see why, first note that the sum of any number, x, and + * its complement, x', is all ones. So all ones minus x is x'. Then note that + * the xor of x and all ones is x'. */ +#define LZC_TO_MSBIT_POS_(size, lzc) ((size##SIZE * CHARBITS - 1) ^ (lzc)) + +#ifdef U64TYPE /* HAS_QUAD not usable outside the core */ + +PERL_STATIC_INLINE unsigned +Perl_msbit_pos64(U64 word) +{ + /* Find the position (0..63) of the most significant set bit in the input + * word */ + + ASSUME(word != 0); + + /* If we can determine that the platform has a usable fast method to get + * this, use that */ + +# if defined(PERL_CLZ_64) +# define PERL_HAS_FAST_GET_MSB_POS64 + + return (unsigned) LZC_TO_MSBIT_POS_(U64, PERL_CLZ_64(word)); + +# elif U64SIZE == 8 && defined(_WIN64) && defined(_MSC_VER) +# define PERL_HAS_FAST_GET_MSB_POS64 + + { + unsigned long index; + _BitScanReverse64(&index, word); + return (unsigned)index; + } + +# else + + /* Here, we didn't find a fast method for finding the msb. Fall back to + * making the msb the only set bit in the word, and use our function that + * works on words with a single bit set. * * Isolate the msb; http://codeforces.com/blog/entry/10330 * * Only the most significant set bit matters. Or'ing word with its right - * shift of 1 makes that bit and the next one to its right both 1. Then - * right shifting by 2 makes for 4 1-bits in a row. ... We end with the - * msb and all to the right being 1. */ - word |= word >> 1; - word |= word >> 2; - word |= word >> 4; - word |= word >> 8; - word |= word >> 16; - word |= word >> 32; /* This should get optimized out on 32-bit systems. */ + * shift of 1 makes that bit and the next one to its right both 1. + * Repeating that with the right shift of 2 makes for 4 1-bits in a row. + * ... We end with the msb and all to the right being 1. */ + word |= (word >> 1); + word |= (word >> 2); + word |= (word >> 4); + word |= (word >> 8); + word |= (word >> 16); + word |= (word >> 32); /* Then subtracting the right shift by 1 clears all but the left-most of * the 1 bits, which is our desired result */ word -= (word >> 1); + /* Now we have a single bit set */ + return single_1bit_pos64(word); + +# endif + +} + +# define msbit_pos_uintmax_(word) msbit_pos64(word) +#else /* ! QUAD */ +# define msbit_pos_uintmax_(word) msbit_pos32(word) +#endif + +PERL_STATIC_INLINE unsigned +Perl_msbit_pos32(U32 word) +{ + /* Find the position (0..31) of the most significant set bit in the input + * word */ + + ASSUME(word != 0); + +#if defined(PERL_CLZ_32) +# define PERL_HAS_FAST_GET_MSB_POS32 + + return (unsigned) LZC_TO_MSBIT_POS_(U32, PERL_CLZ_32(word)); + +#elif U32SIZE == 4 && defined(_MSC_VER) +# define PERL_HAS_FAST_GET_MSB_POS32 + + { + unsigned long index; + _BitScanReverse(&index, word); + return (unsigned)index; + } + +#else + + word |= (word >> 1); + word |= (word >> 2); + word |= (word >> 4); + word |= (word >> 8); + word |= (word >> 16); + word -= (word >> 1); + return single_1bit_pos32(word); + +#endif + +} + +#if UVSIZE == U64SIZE +# define msbit_pos(word) msbit_pos64(word) +# define lsbit_pos(word) lsbit_pos64(word) +#elif UVSIZE == U32SIZE +# define msbit_pos(word) msbit_pos32(word) +# define lsbit_pos(word) lsbit_pos32(word) +#endif + +#ifdef U64TYPE /* HAS_QUAD not usable outside the core */ + +PERL_STATIC_INLINE unsigned +Perl_single_1bit_pos64(U64 word) +{ + /* Given a 64-bit word known to contain all zero bits except one 1 bit, + * find and return the 1's position: 0..63 */ + +# ifdef PERL_CORE /* macro not exported */ + ASSUME(isPOWER_OF_2(word)); # else -# error Unexpected byte order + ASSUME(word && (word & (word-1)) == 0); # endif - /* Here 'word' has a single bit set: the msb of the first byte in which it - * is set. Calculate that position in the word. We can use this - * specialized solution: https://stackoverflow.com/a/32339674/1626653, - * assumes an 8-bit byte. (On a 32-bit machine, the larger numbers should - * just get shifted off at compile time) */ - word = (word >> 7) * ((UINTMAX_C( 7) << 56) | (UINTMAX_C(15) << 48) - | (UINTMAX_C(23) << 40) | (UINTMAX_C(31) << 32) - | (39 << 24) | (47 << 16) - | (55 << 8) | (63 << 0)); - word >>= PERL_WORDSIZE * 7; /* >> by either 56 or 24 */ - - /* Here, word contains the position 7..63 of that bit. Convert to 0..7 */ - word = ((word + 1) >> 3) - 1; + /* The only set bit is both the most and least significant bit. If we have + * a fast way of finding either one, use that. + * + * It may appear at first glance that those functions call this one, but + * they don't if the corresponding #define is set */ -# if BYTEORDER == 0x4321 || BYTEORDER == 0x87654321 +# ifdef PERL_HAS_FAST_GET_MSB_POS64 - /* And invert the result */ - word = CHARBITS - word - 1; + return msbit_pos64(word); + +# elif defined(PERL_HAS_FAST_GET_LSB_POS64) + + return lsbit_pos64(word); +# else + + /* The position of the only set bit in a word can be quickly calculated + * using deBruijn sequences. See for example + * https://en.wikipedia.org/wiki/De_Bruijn_sequence */ + return PL_deBruijn_bitpos_tab64[(word * PERL_deBruijnMagic64_) + >> PERL_deBruijnShift64_]; # endif +} + +#endif + +PERL_STATIC_INLINE unsigned +Perl_single_1bit_pos32(U32 word) +{ + /* Given a 32-bit word known to contain all zero bits except one 1 bit, + * find and return the 1's position: 0..31 */ + +#ifdef PERL_CORE /* macro not exported */ + ASSUME(isPOWER_OF_2(word)); +#else + ASSUME(word && (word & (word-1)) == 0); +#endif +#ifdef PERL_HAS_FAST_GET_MSB_POS32 + + return msbit_pos32(word); + +#elif defined(PERL_HAS_FAST_GET_LSB_POS32) + + return lsbit_pos32(word); + +/* Unlikely, but possible for the platform to have a wider fast operation but + * not a narrower one. But easy enough to handle the case by widening the + * parameter size. (Going the other way, emulating 64 bit by two 32 bit ops + * would be slower than the deBruijn method.) */ +#elif defined(PERL_HAS_FAST_GET_MSB_POS64) + + return msbit_pos64(word); + +#elif defined(PERL_HAS_FAST_GET_LSB_POS64) + + return lsbit_pos64(word); + +#else + + return PL_deBruijn_bitpos_tab32[(word * PERL_deBruijnMagic32_) + >> PERL_deBruijnShift32_]; +#endif + +} + +#ifndef EBCDIC + +PERL_STATIC_INLINE unsigned int +Perl_variant_byte_number(PERL_UINTMAX_T word) +{ + /* This returns the position in a word (0..7) of the first variant byte in + * it. This is a helper function. Note that there are no branches */ + + /* Get just the msb bits of each byte */ + word &= PERL_VARIANTS_WORD_MASK; + + /* This should only be called if we know there is a variant byte in the + * word */ + assert(word); + +# if BYTEORDER == 0x1234 || BYTEORDER == 0x12345678 + + /* Bytes are stored like + * Byte8 ... Byte2 Byte1 + * 63..56...15...8 7...0 + * so getting the lsb of the whole modified word is getting the msb of the + * first byte that has its msb set */ + word = lsbit_pos_uintmax_(word); + + /* Here, word contains the position 7,15,23,...55,63 of that bit. Convert + * to 0..7 */ + return (unsigned int) ((word + 1) >> 3) - 1; + +# elif BYTEORDER == 0x4321 || BYTEORDER == 0x87654321 + + /* Bytes are stored like + * Byte1 Byte2 ... Byte8 + * 63..56 55..47 ... 7...0 + * so getting the msb of the whole modified word is getting the msb of the + * first byte that has its msb set */ + word = msbit_pos_uintmax_(word); + + /* Here, word contains the position 63,55,...,23,15,7 of that bit. Convert + * to 0..7 */ + word = ((word + 1) >> 3) - 1; + + /* And invert the result because of the reversed byte order on this + * platform */ + word = CHARBITS - word - 1; + return (unsigned int) word; + +# else +# error Unexpected byte order +# endif + } #endif @@ -677,7 +1188,7 @@ S_variant_under_utf8_count(const U8* const s, const U8* const e) /* Process per-byte */ while (x < e) { - if (! UTF8_IS_INVARIANT(*x)) { + if (! UTF8_IS_INVARIANT(*x)) { count++; } @@ -1009,6 +1520,107 @@ Perl_is_utf8_string_loclen(const U8 *s, STRLEN len, const U8 **ep, STRLEN *el) } } +/* The perl core arranges to never call the DFA below without there being at + * least one byte available to look at. This allows the DFA to use a do {} + * while loop which means that calling it with a UTF-8 invariant has a single + * conditional, same as the calling code checking for invariance ahead of time. + * And having the calling code remove that conditional speeds up by that + * conditional, the case where it wasn't invariant. So there's no reason to + * check before caling this. + * + * But we don't know this for non-core calls, so have to retain the check for + * them. */ +#ifdef PERL_CORE +# define PERL_NON_CORE_CHECK_EMPTY(s,e) assert((e) > (s)) +#else +# define PERL_NON_CORE_CHECK_EMPTY(s,e) if ((e) <= (s)) return FALSE +#endif + +/* + * DFA for checking input is valid UTF-8 syntax. + * + * This uses adaptations of the table and algorithm given in + * https://bjoern.hoehrmann.de/utf-8/decoder/dfa/, which provides comprehensive + * documentation of the original version. A copyright notice for the original + * version is given at the beginning of this file. The Perl adapations are + * documented at the definition of PL_extended_utf8_dfa_tab[]. + * + * This dfa is fast. There are three exit conditions: + * 1) a well-formed code point, acceptable to the table + * 2) the beginning bytes of an incomplete character, whose completion might + * or might not be acceptable + * 3) unacceptable to the table. Some of the adaptations have certain, + * hopefully less likely to occur, legal inputs be unacceptable to the + * table, so these must be sorted out afterwards. + * + * This macro is a complete implementation of the code executing the DFA. It + * is passed the input sequence bounds and the table to use, and what to do + * for each of the exit conditions. There are three canned actions, likely to + * be the ones you want: + * DFA_RETURN_SUCCESS_ + * DFA_RETURN_FAILURE_ + * DFA_GOTO_TEASE_APART_FF_ + * + * You pass a parameter giving the action to take for each of the three + * possible exit conditions: + * + * 'accept_action' This is executed when the DFA accepts the input. + * DFA_RETURN_SUCCESS_ is the most likely candidate. + * 'reject_action' This is executed when the DFA rejects the input. + * DFA_RETURN_FAILURE_ is a candidate, or 'goto label' where + * you have written code to distinguish the rejecting state + * results. Because it happens in several places, and + * involves #ifdefs, the special action + * DFA_GOTO_TEASE_APART_FF_ is what you want with + * PL_extended_utf8_dfa_tab. On platforms without + * EXTRA_LONG_UTF8, there is no need to tease anything apart, + * so this evaluates to DFA_RETURN_FAILURE_; otherwise you + * need to have a label 'tease_apart_FF' that it will transfer + * to. + * 'incomplete_char_action' This is executed when the DFA ran off the end + * before accepting or rejecting the input. + * DFA_RETURN_FAILURE_ is the likely action, but you could + * have a 'goto', or NOOP. In the latter case the DFA drops + * off the end, and you place your code to handle this case + * immediately after it. + */ + +#define DFA_RETURN_SUCCESS_ return s - s0 +#define DFA_RETURN_FAILURE_ return 0 +#ifdef HAS_EXTRA_LONG_UTF8 +# define DFA_TEASE_APART_FF_ goto tease_apart_FF +#else +# define DFA_TEASE_APART_FF_ DFA_RETURN_FAILURE_ +#endif + +#define PERL_IS_UTF8_CHAR_DFA(s0, e, dfa_tab, \ + accept_action, \ + reject_action, \ + incomplete_char_action) \ + STMT_START { \ + const U8 * s = s0; \ + UV state = 0; \ + \ + PERL_NON_CORE_CHECK_EMPTY(s,e); \ + \ + do { \ + state = dfa_tab[256 + state + dfa_tab[*s]]; \ + s++; \ + \ + if (state == 0) { /* Accepting state */ \ + accept_action; \ + } \ + \ + if (UNLIKELY(state == 1)) { /* Rejecting state */ \ + reject_action; \ + } \ + } while (s < e); \ + \ + /* Here, dropped out of loop before end-of-char */ \ + incomplete_char_action; \ + } STMT_END + + /* =for apidoc isUTF8_CHAR @@ -1044,44 +1656,39 @@ https://bjoern.hoehrmann.de/utf-8/decoder/dfa/, which provides comprehensive documentation of the original version. A copyright notice for the original version is given at the beginning of this file. The Perl adapation is documented at the definition of PL_extended_utf8_dfa_tab[]. - */ PERL_STATIC_INLINE Size_t Perl_isUTF8_CHAR(const U8 * const s0, const U8 * const e) { - const U8 * s = s0; - UV state = 0; - PERL_ARGS_ASSERT_ISUTF8_CHAR; - /* This dfa is fast. If it accepts the input, it was for a well-formed, - * code point, which can be returned immediately. Otherwise, it is either - * malformed, or for the start byte FF which the dfa doesn't handle (except - * on 32-bit ASCII platforms where it trivially is an error). Call a - * helper function for the other platforms. */ - - while (s < e && LIKELY(state != 1)) { - state = PL_extended_utf8_dfa_tab[256 - + state - + PL_extended_utf8_dfa_tab[*s]]; - if (state != 0) { - s++; - continue; - } + PERL_IS_UTF8_CHAR_DFA(s0, e, PL_extended_utf8_dfa_tab, + DFA_RETURN_SUCCESS_, + DFA_TEASE_APART_FF_, + DFA_RETURN_FAILURE_); - return s - s0 + 1; - } + /* Here, we didn't return success, but dropped out of the loop. In the + * case of PL_extended_utf8_dfa_tab, this means the input is either + * malformed, or the start byte was FF on a platform that the dfa doesn't + * handle FF's. Call a helper function. */ -#if defined(UV_IS_QUAD) || defined(EBCDIC) +#ifdef HAS_EXTRA_LONG_UTF8 - if (NATIVE_UTF8_TO_I8(*s0) == 0xFF && e - s0 >= UTF8_MAXBYTES) { - return is_utf8_char_helper(s0, e, 0); + tease_apart_FF: + + /* In the case of PL_extended_utf8_dfa_tab, getting here means the input is + * either malformed, or was for the largest possible start byte, which we + * now check, not inline */ + if (*s0 != I8_TO_NATIVE_UTF8(0xFF)) { + return 0; } + return is_utf8_FF_helper_(s0, e, + FALSE /* require full, not partial char */ + ); #endif - return 0; } /* @@ -1124,32 +1731,21 @@ documented at the definition of strict_extended_utf8_dfa_tab[]. PERL_STATIC_INLINE Size_t Perl_isSTRICT_UTF8_CHAR(const U8 * const s0, const U8 * const e) { - const U8 * s = s0; - UV state = 0; - PERL_ARGS_ASSERT_ISSTRICT_UTF8_CHAR; - while (s < e && LIKELY(state != 1)) { - state = PL_strict_utf8_dfa_tab[256 + state + PL_strict_utf8_dfa_tab[*s]]; - - if (state != 0) { - s++; - continue; - } - - return s - s0 + 1; - } - -#ifndef EBCDIC - - /* The dfa above drops out for certain Hanguls; handle them specially */ - if (is_HANGUL_ED_utf8_safe(s0, e)) { - return 3; - } + PERL_IS_UTF8_CHAR_DFA(s0, e, PL_strict_utf8_dfa_tab, + DFA_RETURN_SUCCESS_, + goto check_hanguls, + DFA_RETURN_FAILURE_); + check_hanguls: -#endif + /* Here, we didn't return success, but dropped out of the loop. In the + * case of PL_strict_utf8_dfa_tab, this means the input is either + * malformed, or was for certain Hanguls; handle them specially */ - return 0; + /* The dfa above drops out for incomplete or illegal inputs, and certain + * legal Hanguls; check and return accordingly */ + return is_HANGUL_ED_utf8_safe(s0, e); } /* @@ -1190,23 +1786,12 @@ documented at the definition of PL_c9_utf8_dfa_tab[]. PERL_STATIC_INLINE Size_t Perl_isC9_STRICT_UTF8_CHAR(const U8 * const s0, const U8 * const e) { - const U8 * s = s0; - UV state = 0; - PERL_ARGS_ASSERT_ISC9_STRICT_UTF8_CHAR; - while (s < e && LIKELY(state != 1)) { - state = PL_c9_utf8_dfa_tab[256 + state + PL_c9_utf8_dfa_tab[*s]]; - - if (state != 0) { - s++; - continue; - } - - return s - s0 + 1; - } - - return 0; + PERL_IS_UTF8_CHAR_DFA(s0, e, PL_c9_utf8_dfa_tab, + DFA_RETURN_SUCCESS_, + DFA_RETURN_FAILURE_, + DFA_RETURN_FAILURE_); } /* @@ -1506,15 +2091,15 @@ Perl_utf8_hop(const U8 *s, SSize_t off) * In other words: in Perl UTF-8 is not just for Unicode. */ if (off >= 0) { - while (off--) - s += UTF8SKIP(s); + while (off--) + s += UTF8SKIP(s); } else { - while (off++) { - s--; - while (UTF8_IS_CONTINUATION(*s)) - s--; - } + while (off++) { + s--; + while (UTF8_IS_CONTINUATION(*s)) + s--; + } } GCC_DIAG_IGNORE(-Wcast-qual) return (U8 *)s; @@ -1641,6 +2226,73 @@ Perl_utf8_hop_safe(const U8 *s, SSize_t off, const U8 *start, const U8 *end) /* +=for apidoc isUTF8_CHAR_flags + +Evaluates to non-zero if the first few bytes of the string starting at C and +looking no further than S> are well-formed UTF-8, as extended by Perl, +that represents some code point, subject to the restrictions given by C; +otherwise it evaluates to 0. If non-zero, the value gives how many bytes +starting at C comprise the code point's representation. Any bytes remaining +before C, but beyond the ones needed to form the first code point in C, +are not examined. + +If C is 0, this gives the same results as C>; +if C is C, this gives the same results +as C>; +and if C is C, this gives +the same results as C>. +Otherwise C may be any combination of the C> flags +understood by C>, with the same meanings. + +The three alternative macros are for the most commonly needed validations; they +are likely to run somewhat faster than this more general one, as they can be +inlined into your code. + +Use L, L, and +L to check entire strings. + +=cut +*/ + +PERL_STATIC_INLINE STRLEN +Perl_isUTF8_CHAR_flags(const U8 * const s0, const U8 * const e, const U32 flags) +{ + PERL_ARGS_ASSERT_ISUTF8_CHAR_FLAGS; + assert(0 == (flags & ~(UTF8_DISALLOW_ILLEGAL_INTERCHANGE + |UTF8_DISALLOW_PERL_EXTENDED))); + + PERL_IS_UTF8_CHAR_DFA(s0, e, PL_extended_utf8_dfa_tab, + goto check_success, + DFA_TEASE_APART_FF_, + DFA_RETURN_FAILURE_); + + check_success: + + return is_utf8_char_helper_(s0, e, flags); + +#ifdef HAS_EXTRA_LONG_UTF8 + + tease_apart_FF: + + /* In the case of PL_extended_utf8_dfa_tab, getting here means the input is + * either malformed, or was for the largest possible start byte, which + * indicates perl extended UTF-8, well above the Unicode maximum */ + if ( *s0 != I8_TO_NATIVE_UTF8(0xFF) + || (flags & (UTF8_DISALLOW_SUPER|UTF8_DISALLOW_PERL_EXTENDED))) + { + return 0; + } + + /* Otherwise examine the sequence not inline */ + return is_utf8_FF_helper_(s0, e, + FALSE /* require full, not partial char */ + ); +#endif + +} + +/* + =for apidoc is_utf8_valid_partial_char Returns 0 if the sequence of bytes starting at C and looking no further than @@ -1689,18 +2341,47 @@ determined from just the first one or two bytes. */ PERL_STATIC_INLINE bool -Perl_is_utf8_valid_partial_char_flags(const U8 * const s, const U8 * const e, const U32 flags) +Perl_is_utf8_valid_partial_char_flags(const U8 * const s0, const U8 * const e, const U32 flags) { PERL_ARGS_ASSERT_IS_UTF8_VALID_PARTIAL_CHAR_FLAGS; - assert(0 == (flags & ~(UTF8_DISALLOW_ILLEGAL_INTERCHANGE |UTF8_DISALLOW_PERL_EXTENDED))); - if (s >= e || s + UTF8SKIP(s) <= e) { - return FALSE; + PERL_IS_UTF8_CHAR_DFA(s0, e, PL_extended_utf8_dfa_tab, + DFA_RETURN_FAILURE_, + DFA_TEASE_APART_FF_, + NOOP); + + /* The NOOP above causes the DFA to drop down here iff the input was a + * partial character. flags=0 => can return TRUE immediately; otherwise we + * need to check (not inline) if the partial character is the beginning of + * a disallowed one */ + if (flags == 0) { + return TRUE; + } + + return cBOOL(is_utf8_char_helper_(s0, e, flags)); + +#ifdef HAS_EXTRA_LONG_UTF8 + + tease_apart_FF: + + /* Getting here means the input is either malformed, or, in the case of + * PL_extended_utf8_dfa_tab, was for the largest possible start byte. The + * latter case has to be extended UTF-8, so can fail immediately if that is + * forbidden */ + + if ( *s0 != I8_TO_NATIVE_UTF8(0xFF) + || (flags & (UTF8_DISALLOW_SUPER|UTF8_DISALLOW_PERL_EXTENDED))) + { + return 0; } - return cBOOL(is_utf8_char_helper(s, e, flags)); + return is_utf8_FF_helper_(s0, e, + TRUE /* Require to be a partial character */ + ); +#endif + } /* @@ -1800,8 +2481,8 @@ Perl_utf8n_to_uvchr_msgs(const U8 *s, const U8 * const s0 = s; const U8 * send = s0 + curlen; - UV uv = 0; /* The 0 silences some stupid compilers */ - UV state = 0; + UV type; + UV uv; PERL_ARGS_ASSERT_UTF8N_TO_UVCHR_MSGS; @@ -1810,34 +2491,60 @@ Perl_utf8n_to_uvchr_msgs(const U8 *s, * Otherwise we call a helper function to figure out the more complicated * cases. */ - while (s < send && LIKELY(state != 1)) { - UV type = PL_strict_utf8_dfa_tab[*s]; + /* No calls from core pass in an empty string; non-core need a check */ +#ifdef PERL_CORE + assert(curlen > 0); +#else + if (curlen == 0) return _utf8n_to_uvchr_msgs_helper(s0, 0, retlen, + flags, errors, msgs); +#endif - uv = (state == 0) - ? ((0xff >> type) & NATIVE_UTF8_TO_I8(*s)) - : UTF8_ACCUMULATE(uv, *s); - state = PL_strict_utf8_dfa_tab[256 + state + type]; + type = PL_strict_utf8_dfa_tab[*s]; - if (state != 0) { - s++; - continue; - } + /* The table is structured so that 'type' is 0 iff the input byte is + * represented identically regardless of the UTF-8ness of the string */ + if (type == 0) { /* UTF-8 invariants are returned unchanged */ + uv = *s; + } + else { + UV state = PL_strict_utf8_dfa_tab[256 + type]; + uv = (0xff >> type) & NATIVE_UTF8_TO_I8(*s); - if (retlen) { - *retlen = s - s0 + 1; - } - if (errors) { - *errors = 0; - } - if (msgs) { - *msgs = NULL; + while (++s < send) { + type = PL_strict_utf8_dfa_tab[*s]; + state = PL_strict_utf8_dfa_tab[256 + state + type]; + + uv = UTF8_ACCUMULATE(uv, *s); + + if (state == 0) { +#ifdef EBCDIC + uv = UNI_TO_NATIVE(uv); +#endif + goto success; + } + + if (UNLIKELY(state == 1)) { + break; + } } - return UNI_TO_NATIVE(uv); + /* Here is potentially problematic. Use the full mechanism */ + return _utf8n_to_uvchr_msgs_helper(s0, curlen, retlen, flags, + errors, msgs); + } + + success: + if (retlen) { + *retlen = s - s0 + 1; + } + if (errors) { + *errors = 0; + } + if (msgs) { + *msgs = NULL; } - /* Here is potentially problematic. Use the full mechanism */ - return _utf8n_to_uvchr_msgs_helper(s0, curlen, retlen, flags, errors, msgs); + return uv; } PERL_STATIC_INLINE UV @@ -1857,7 +2564,7 @@ Perl_utf8_to_uvchr_buf_helper(pTHX_ const U8 *s, const U8 *send, STRLEN *retlen) } else { UV ret = utf8n_to_uvchr(s, send - s, retlen, 0); - if (retlen && ret == 0 && *s != '\0') { + if (retlen && ret == 0 && (send <= s || *s != '\0')) { *retlen = (STRLEN) -1; } @@ -1868,7 +2575,7 @@ Perl_utf8_to_uvchr_buf_helper(pTHX_ const U8 *s, const U8 *send, STRLEN *retlen) /* ------------------------------- perl.h ----------------------------- */ /* -=head1 Miscellaneous Functions +=for apidoc_section $utility =for apidoc is_safe_syscall @@ -1954,15 +2661,17 @@ S_lossless_NV_to_IV(const NV nv, IV *ivp) PERL_ARGS_ASSERT_LOSSLESS_NV_TO_IV; -# if defined(Perl_isnan) - +# if defined(NAN_COMPARE_BROKEN) && defined(Perl_isnan) + /* Normally any comparison with a NaN returns false; if we can't rely + * on that behaviour, check explicitly */ if (UNLIKELY(Perl_isnan(nv))) { return FALSE; } - # endif - if (UNLIKELY(nv < IV_MIN) || UNLIKELY(nv > IV_MAX)) { + /* Written this way so that with an always-false NaN comparison we + * return false */ + if (!(LIKELY(nv >= (NV) IV_MIN) && LIKELY(nv < IV_MAX_P1))) { return FALSE; } @@ -1976,36 +2685,6 @@ S_lossless_NV_to_IV(const NV nv, IV *ivp) #endif -/* ------------------ regcomp.c, toke.c ------------ */ - -#if defined(PERL_IN_REGCOMP_C) || defined(PERL_IN_TOKE_C) - -/* - - regcurly - a little FSA that accepts {\d+,?\d*} - Pulled from reg.c. - */ -PERL_STATIC_INLINE bool -S_regcurly(const char *s) -{ - PERL_ARGS_ASSERT_REGCURLY; - - if (*s++ != '{') - return FALSE; - if (!isDIGIT(*s)) - return FALSE; - while (isDIGIT(*s)) - s++; - if (*s == ',') { - s++; - while (isDIGIT(*s)) - s++; - } - - return *s == '}'; -} - -#endif - /* ------------------ pp.c, regcomp.c, toke.c, universal.c ------------ */ #if defined(PERL_IN_PP_C) || defined(PERL_IN_REGCOMP_C) || defined(PERL_IN_TOKE_C) || defined(PERL_IN_UNIVERSAL_C) @@ -2026,10 +2705,10 @@ S_get_regex_charset_name(const U32 flags, STRLEN* const lenp) case REGEX_DEPENDS_CHARSET: return DEPENDS_PAT_MODS; case REGEX_LOCALE_CHARSET: return LOCALE_PAT_MODS; case REGEX_UNICODE_CHARSET: return UNICODE_PAT_MODS; - case REGEX_ASCII_RESTRICTED_CHARSET: return ASCII_RESTRICT_PAT_MODS; - case REGEX_ASCII_MORE_RESTRICTED_CHARSET: - *lenp = 2; - return ASCII_MORE_RESTRICT_PAT_MODS; + case REGEX_ASCII_RESTRICTED_CHARSET: return ASCII_RESTRICT_PAT_MODS; + case REGEX_ASCII_MORE_RESTRICTED_CHARSET: + *lenp = 2; + return ASCII_MORE_RESTRICT_PAT_MODS; } /* The NOT_REACHED; hides an assert() which has a rather complex * definition in perl.h. */ @@ -2078,7 +2757,7 @@ Perl_gimme_V(pTHX) return gimme; cxix = PL_curstackinfo->si_cxsubix; if (cxix < 0) - return G_VOID; + return PL_curstackinfo->si_type == PERLSI_SORT ? G_SCALAR: G_VOID; assert(cxstack[cxix].blk_gimme & G_WANT); return (cxstack[cxix].blk_gimme & G_WANT); } @@ -2276,12 +2955,8 @@ Perl_cx_popformat(pTHX_ PERL_CONTEXT *cx) PERL_STATIC_INLINE void -Perl_cx_pusheval(pTHX_ PERL_CONTEXT *cx, OP *retop, SV *namesv) +Perl_push_evalortry_common(pTHX_ PERL_CONTEXT *cx, OP *retop, SV *namesv) { - PERL_ARGS_ASSERT_CX_PUSHEVAL; - - cx->blk_eval.old_cxsubix = PL_curstackinfo->si_cxsubix; - PL_curstackinfo->si_cxsubix= cx - PL_curstackinfo->si_cxstack; cx->blk_eval.retop = retop; cx->blk_eval.old_namesv = namesv; cx->blk_eval.old_eval_root = PL_eval_root; @@ -2294,6 +2969,29 @@ Perl_cx_pusheval(pTHX_ PERL_CONTEXT *cx, OP *retop, SV *namesv) cx->blk_u16 = (PL_in_eval & 0x3F) | ((U16)PL_op->op_type << 7); } +PERL_STATIC_INLINE void +Perl_cx_pusheval(pTHX_ PERL_CONTEXT *cx, OP *retop, SV *namesv) +{ + PERL_ARGS_ASSERT_CX_PUSHEVAL; + + Perl_push_evalortry_common(aTHX_ cx, retop, namesv); + + cx->blk_eval.old_cxsubix = PL_curstackinfo->si_cxsubix; + PL_curstackinfo->si_cxsubix = cx - PL_curstackinfo->si_cxstack; +} + +PERL_STATIC_INLINE void +Perl_cx_pushtry(pTHX_ PERL_CONTEXT *cx, OP *retop) +{ + PERL_ARGS_ASSERT_CX_PUSHTRY; + + Perl_push_evalortry_common(aTHX_ cx, retop, NULL); + + /* Don't actually change it, just store the current value so it's restored + * by the common popeval */ + cx->blk_eval.old_cxsubix = PL_curstackinfo->si_cxsubix; +} + PERL_STATIC_INLINE void Perl_cx_popeval(pTHX_ PERL_CONTEXT *cx) @@ -2439,7 +3137,7 @@ Perl_cx_popgiven(pTHX_ PERL_CONTEXT *cx) /* ------------------ util.h ------------------------------------------- */ /* -=head1 Miscellaneous Functions +=for apidoc_section $string =for apidoc foldEQ @@ -2463,9 +3161,9 @@ Perl_foldEQ(const char *s1, const char *s2, I32 len) assert(len >= 0); while (len--) { - if (*a != *b && *a != PL_fold[*b]) - return 0; - a++,b++; + if (*a != *b && *a != PL_fold[*b]) + return 0; + a++,b++; } return 1; } @@ -2486,15 +3184,16 @@ Perl_foldEQ_latin1(const char *s1, const char *s2, I32 len) assert(len >= 0); while (len--) { - if (*a != *b && *a != PL_fold_latin1[*b]) { - return 0; - } - a++, b++; + if (*a != *b && *a != PL_fold_latin1[*b]) { + return 0; + } + a++, b++; } return 1; } /* +=for apidoc_section $locale =for apidoc foldEQ_locale Returns true if the leading C bytes of the strings C and C are the @@ -2506,7 +3205,6 @@ same case-insensitively in the current locale; false otherwise. PERL_STATIC_INLINE I32 Perl_foldEQ_locale(const char *s1, const char *s2, I32 len) { - dVAR; const U8 *a = (const U8 *)s1; const U8 *b = (const U8 *)s2; @@ -2515,14 +3213,15 @@ Perl_foldEQ_locale(const char *s1, const char *s2, I32 len) assert(len >= 0); while (len--) { - if (*a != *b && *a != PL_fold_locale[*b]) - return 0; - a++,b++; + if (*a != *b && *a != PL_fold_locale[*b]) + return 0; + a++,b++; } return 1; } /* +=for apidoc_section $string =for apidoc my_strnlen The C library C if available, or a Perl implementation of it. @@ -2580,23 +3279,31 @@ Perl_mortal_getenv(const char * str) { /* This implements a (mostly) thread-safe, sequential-call-safe getenv(). * - * It's (mostly) thread-safe because it uses a mutex to prevent - * simultaneous access from other threads that use the same mutex, and - * makes a copy of the result before releasing that mutex. All of the Perl - * core uses that mutex, but, like all mutexes, everything has to cooperate - * for it to completely work. It is possible for code from, say XS, to not - * use this mutex, defeating the safety. + * It's (mostly) thread-safe because it uses a mutex to prevent other + * threads (that look at this mutex) from destroying the result before this + * routine has a chance to copy the result to a place that won't be + * destroyed before the caller gets a chance to handle it. That place is a + * mortal SV. khw chose this over SAVEFREEPV because he is under the + * impression that the SV will hang around longer under more circumstances * - * On some platforms, getenv() is not sequential-call-safe, because - * subsequent calls destroy the static storage inside the C library - * returned by an earlier call. The result must be copied or completely - * acted upon before a subsequent getenv call. Those calls could come from - * another thread. Again, making a copy while controlling the mutex - * prevents these problems.. + * The reason it isn't completely thread-safe is that other code could + * simply not pay attention to the mutex. All of the Perl core uses the + * mutex, but it is possible for code from, say XS, to not use this mutex, + * defeating the safety. * - * To prevent leaks, the copy is made by creating a new SV containing it, - * mortalizing the SV, and returning the SV's string (the copy). Thus this - * is a drop-in replacement for getenv(). + * getenv() returns, in some implementations, a pointer to a spot in the + * **environ array, which could be invalidated at any time by this or + * another thread changing the environment. Other implementations copy the + * **environ value to a static buffer, returning a pointer to that. That + * buffer might or might not be invalidated by a getenv() call in another + * thread. If it does get zapped, we need an exclusive lock. Otherwise, + * many getenv() calls can safely be running simultaneously, so a + * many-reader (but no simultaneous writers) lock is ok. There is a + * Configure probe to see if another thread destroys the buffer, and the + * mutex is defined accordingly. + * + * But in all cases, using the mutex prevents these problems, as long as + * all code uses the same mutex. * * A complication is that this can be called during phases where the * mortalization process isn't available. These are in interpreter @@ -2616,18 +3323,184 @@ Perl_mortal_getenv(const char * str) return getenv(str); } - ENV_LOCK; +#ifdef PERL_MEM_LOG + + /* A major complication arises under PERL_MEM_LOG. When that is active, + * every memory allocation may result in logging, depending on the value of + * ENV{PERL_MEM_LOG} at the moment. That means, as we create the SV for + * saving ENV{foo}'s value (but before saving it), the logging code will + * call us recursively to find out what ENV{PERL_MEM_LOG} is. Without some + * care that could lead to: 1) infinite recursion; or 2) deadlock (trying to + * lock a boolean mutex recursively); 3) destroying the getenv() static + * buffer; or 4) destroying the temporary created by this for the copy + * causes a log entry to be made which could cause a new temporary to be + * created, which will need to be destroyed at some point, leading to an + * infinite loop. + * + * The solution adopted here (after some gnashing of teeth) is to detect + * the recursive calls and calls from the logger, and treat them specially. + * Let's say we want to do getenv("foo"). We first find + * getenv(PERL_MEM_LOG) and save it to a fixed-length per-interpreter + * variable, so no temporary is required. Then we do getenv(foo}, and in + * the process of creating a temporary to save it, this function will be + * called recursively to do a getenv(PERL_MEM_LOG). On the recursed call, + * we detect that it is such a call and return our saved value instead of + * locking and doing a new getenv(). This solves all of problems 1), 2), + * and 3). Because all the getenv()s are done while the mutex is locked, + * the state cannot have changed. To solve 4), we don't create a temporary + * when this is called from the logging code. That code disposes of the + * return value while the mutex is still locked. + * + * The value of getenv(PERL_MEM_LOG) can be anything, but only initial + * digits and 3 particular letters are significant; the rest are ignored by + * the memory logging code. Thus the per-interpreter variable only needs + * to be large enough to save the significant information, the size of + * which is known at compile time. The first byte is extra, reserved for + * flags for our use. To protect against overflowing, only the reserved + * byte, as many digits as don't overflow, and the three letters are + * stored. + * + * The reserved byte has two bits: + * 0x1 if set indicates that if we get here, it is a recursive call of + * getenv() + * 0x2 if set indicates that the call is from the logging code. + * + * If the flag indicates this is a recursive call, just return the stored + * value of PL_mem_log; An empty value gets turned into NULL. */ + if (strEQ(str, "PERL_MEM_LOG") && PL_mem_log[0] & 0x1) { + if (PL_mem_log[1] == '\0') { + return NULL; + } else { + return PL_mem_log + 1; + } + } + +#endif + + GETENV_LOCK; + +#ifdef PERL_MEM_LOG + + /* Here we are in a critical section. As explained above, we do our own + * getenv(PERL_MEM_LOG), saving the result safely. */ + ret = getenv("PERL_MEM_LOG"); + if (ret == NULL) { /* No logging active */ + + /* Return that immediately if called from the logging code */ + if (PL_mem_log[0] & 0x2) { + GETENV_UNLOCK; + return NULL; + } + + PL_mem_log[1] = '\0'; + } + else { + char *mem_log_meat = PL_mem_log + 1; /* first byte reserved */ + + /* There is nothing to prevent the value of PERL_MEM_LOG from being an + * extremely long string. But we want only a few characters from it. + * PL_mem_log has been made large enough to hold just the ones we need. + * First the file descriptor. */ + if (isDIGIT(*ret)) { + const char * s = ret; + if (UNLIKELY(*s == '0')) { + + /* Reduce multiple leading zeros to a single one. This is to + * allow the caller to change what to do with leading zeros. */ + *mem_log_meat++ = '0'; + s++; + while (*s == '0') { + s++; + } + } + + /* If the input overflows, copy just enough for the result to also + * overflow, plus 1 to make sure */ + while (isDIGIT(*s) && s < ret + TYPE_DIGITS(UV) + 1) { + *mem_log_meat++ = *s++; + } + } + + /* Then each of the three significant characters */ + if (strchr(ret, 'm')) { + *mem_log_meat++ = 'm'; + } + if (strchr(ret, 's')) { + *mem_log_meat++ = 's'; + } + if (strchr(ret, 't')) { + *mem_log_meat++ = 't'; + } + *mem_log_meat = '\0'; + + assert(mem_log_meat < PL_mem_log + sizeof(PL_mem_log)); + } + + /* If we are being called from the logger, it only needs the significant + * portion of PERL_MEM_LOG, and doesn't need a safe copy */ + if (PL_mem_log[0] & 0x2) { + assert(strEQ(str, "PERL_MEM_LOG")); + GETENV_UNLOCK; + return PL_mem_log + 1; + } + + /* Here is a generic getenv(). This could be a getenv("PERL_MEM_LOG") that + * is coming from other than the logging code, so it should be treated the + * same as any other getenv(), returning the full value, not just the + * significant part, and having its value saved. Set the flag that + * indicates any call to this routine will be a recursion from here */ + PL_mem_log[0] = 0x1; + +#endif + /* Now get the value of the real desired variable, and save a copy */ ret = getenv(str); if (ret != NULL) { - ret = SvPVX(sv_2mortal(newSVpv(ret, 0))); + ret = SvPVX( newSVpvn_flags(ret, strlen(ret) ,SVs_TEMP) ); } - ENV_UNLOCK; + GETENV_UNLOCK; + +#ifdef PERL_MEM_LOG + + /* Clear the buffer */ + Zero(PL_mem_log, sizeof(PL_mem_log), char); + +#endif + return ret; } +PERL_STATIC_INLINE bool +Perl_sv_isbool(pTHX_ const SV *sv) +{ + return SvIOK(sv) && SvPOK(sv) && SvIsCOW_static(sv) && + (SvPVX_const(sv) == PL_Yes || SvPVX_const(sv) == PL_No); +} + +#ifdef USE_ITHREADS + +PERL_STATIC_INLINE AV * +Perl_cop_file_avn(pTHX_ const COP *cop) { + + PERL_ARGS_ASSERT_COP_FILE_AVN; + + const char *file = CopFILE(cop); + if (file) { + GV *gv = gv_fetchfile_flags(file, strlen(file), GVF_NOADD); + if (gv) { + return GvAVn(gv); + } + else + return NULL; + } + else + return NULL; +} + +#endif + /* * ex: set ts=8 sts=4 sw=4 et: */ diff --git a/gnu/usr.bin/perl/install_lib.pl b/gnu/usr.bin/perl/install_lib.pl index 8ca801b00a6..1c4d7defe9f 100644 --- a/gnu/usr.bin/perl/install_lib.pl +++ b/gnu/usr.bin/perl/install_lib.pl @@ -4,9 +4,9 @@ # Probably installhtml needs to join the club. use strict; -use vars qw($Is_VMS $Is_W32 $Is_OS2 $Is_Cygwin $Is_Darwin $Is_NetWare $Is_AmigaOS +use vars qw($Is_VMS $Is_W32 $Is_OS2 $Is_Cygwin $Is_Darwin $Is_AmigaOS %opts $packlist); -use subs qw(unlink link chmod chown); +use subs qw(unlink link chmod); require File::Path; require File::Copy; @@ -48,7 +48,6 @@ $Is_W32 = $^O eq 'MSWin32'; $Is_OS2 = $^O eq 'os2'; $Is_Cygwin = $^O eq 'cygwin'; $Is_Darwin = $^O eq 'darwin'; -$Is_NetWare = $Config{osname} eq 'NetWare'; $Is_AmigaOS = $^O eq 'amigaos'; sub unlink { @@ -59,7 +58,7 @@ sub unlink { foreach my $name (@names) { next unless -e $name; - chmod 0777, $name if ($Is_OS2 || $Is_W32 || $Is_Cygwin || $Is_NetWare || $Is_AmigaOS); + chmod 0777, $name if ($Is_OS2 || $Is_W32 || $Is_Cygwin || $Is_AmigaOS); print " unlink $name\n" if $opts{verbose}; ( CORE::unlink($name) and ++$cnt or warn "Couldn't unlink $name: $!\n" ) unless $opts{notify}; @@ -99,9 +98,6 @@ sub link { unless -f $to and (chmod(0666, $to), unlink $to) and File::Copy::copy($from, $to) and ++$success; } - if (defined($opts{uid}) || defined($opts{gid})) { - chown($opts{uid}, $opts{gid}, $to) if $success; - } $packlist->{$xto} = { type => 'file' }; } $success; @@ -110,27 +106,16 @@ sub link { sub chmod { my($mode,$name) = @_; - return if ($^O eq 'dos'); printf " chmod %o %s\n", $mode, $name if $opts{verbose}; CORE::chmod($mode,$name) || warn sprintf("Couldn't chmod %o %s: $!\n", $mode, $name) unless $opts{notify}; } -sub chown { - my($uid,$gid,$name) = @_; - - return if ($^O eq 'dos'); - printf " chown %s:%s %s\n", $uid, $gid, $name if $opts{verbose}; - CORE::chown($uid,$gid,$name) - || warn sprintf("Couldn't chown %s:%s %s: $!\n", $uid, $gid, $name) - unless $opts{notify}; -} - sub samepath { my($p1, $p2) = @_; - return (lc($p1) eq lc($p2)) if ($Is_W32 || $Is_NetWare); + return (lc($p1) eq lc($p2)) if ($Is_W32); return 1 if $p1 eq $p2; @@ -158,8 +143,7 @@ sub safe_rename { } sub mkpath { - File::Path::make_path(shift, {owner=>$opts{uid}, group=>$opts{gid}, - mode=>0777, verbose=>$opts{verbose}}) unless $opts{notify}; + File::Path::mkpath(shift , $opts{verbose}, 0777) unless $opts{notify}; } sub unixtoamiga diff --git a/gnu/usr.bin/perl/installhtml b/gnu/usr.bin/perl/installhtml index 9f6ef7e60a6..13d811fc989 100644 --- a/gnu/usr.bin/perl/installhtml +++ b/gnu/usr.bin/perl/installhtml @@ -2,13 +2,15 @@ # This file should really be extracted from a .PL file +$| = 1; use strict; use Config; # for config options in the makefile use File::Path qw(remove_tree); use File::Spec::Functions qw(rel2abs no_upwards); use Getopt::Long; # for command-line parsing use Cwd; -use Pod::Html 1.23 qw(anchorify relativize_url); +use Pod::Html 1.32; +use Pod::Html::Util 1.32 qw(anchorify relativize_url); =head1 NAME @@ -44,7 +46,7 @@ Default is current directory. =item B<--podpath> POD search path The list of directories to search for .pod and .pm files to be converted. -Default is 'podroot/.'. +Default is 'podroot/lib'. =item B<--recurse> recurse on subdirectories @@ -120,7 +122,7 @@ Usage: $0 --help --podpath=:...: --podroot= --help - this message --podpath - colon-separated list of directories containing .pod and - .pm files to be converted (. by default). + .pm files to be converted ('lib/' by default). --podroot - filesystem base directory from which all relative paths in podpath stem (default is .). --htmldir - directory to store resulting html files in relative @@ -145,7 +147,7 @@ END_OF_USAGE my (@podpath, $podroot, $htmldir, $htmlroot, $recurse, @splithead, @splititem, $splitpod, $verbose, $pod2html, @ignore); -@podpath = ( "." ); # colon-separated list of directories containing .pod +@podpath = ( "lib" ); # colon-separated list of directories containing .pod # and .pm files to be converted. $podroot = "."; # assume the pods we want are here $htmldir = ""; # nothing for now... diff --git a/gnu/usr.bin/perl/installman b/gnu/usr.bin/perl/installman index 0154be4d68c..686862d8c4d 100644 --- a/gnu/usr.bin/perl/installman +++ b/gnu/usr.bin/perl/installman @@ -154,7 +154,7 @@ sub pod2man { next; } - if ($^O eq 'os2' || $^O eq 'amigaos' || $^O eq 'uwin' || $^O eq 'cygwin') { + if ($^O eq 'os2' || $^O eq 'amigaos' || $^O eq 'cygwin') { $manpage =~ s#::#.#g; } my $tmp = "${mandir}/${manpage}.tmp"; diff --git a/gnu/usr.bin/perl/installperl b/gnu/usr.bin/perl/installperl index 7b7538cd1be..3c8af53bef6 100644 --- a/gnu/usr.bin/perl/installperl +++ b/gnu/usr.bin/perl/installperl @@ -11,7 +11,7 @@ BEGIN { } use strict; -our ($Is_VMS, $Is_W32, $Is_OS2, $Is_Cygwin, $Is_Darwin, $Is_NetWare, $Is_AmigaOS, +our ($Is_VMS, $Is_W32, $Is_OS2, $Is_Cygwin, $Is_Darwin, $Is_AmigaOS, %opts, $packlist); my $versiononly; @@ -39,11 +39,6 @@ use Getopt::Long qw(:config nogetopt_compat no_auto_abbrev noignorecase); require './Porting/pod_lib.pl'; -if ($Is_NetWare) { - $Is_W32 = 0; - $scr_ext = '.pl'; -} - my $mainperldir = "/usr/bin"; my $exe_ext = $Config{exe_ext}; @@ -77,8 +72,8 @@ $opts{destdir} = ''; my $usage = 0; if (!GetOptions(\%opts, 'notify|n', 'strip|s', 'silent|S', 'skip-otherperls|o', 'force|f', 'verbose|V', 'archname|A', - 'netware', 'nopods|p', 'destdir:s', 'help|h|?', 'user|u:s', - 'group|g:s', 'versiononly|v' => \$versiononly, '<>' => sub { + 'nopods|p', 'destdir:s', 'help|h|?', + 'versiononly|v' => \$versiononly, '<>' => sub { if ($_[0] eq '+v') { $versiononly = 0; } else { @@ -107,17 +102,12 @@ Usage $0: [switches] -A Also install perl with the architecture's name in the perl binary's name. -p Don't install the pod files. [This will break use diagnostics;] - -g group install files with the specified group - -u user install files with the specified user - -netware Install correctly on a Netware server. -destdir Prefix installation directories by this string. -h Display this help message. EOT exit $usage; } } -$opts{'uid'} = getpwnam($opts{'user'}) if exists($opts{'user'}); -$opts{'gid'} = getgrnam($opts{'group'}) if exists($opts{'group'}); $versiononly = 1 if $Config{versiononly} && !defined $versiononly; my (@scripts, @tolink); @@ -147,17 +137,12 @@ my %archpms = ( lib => 1, ); -if ($^O eq 'dos') { - push(@scripts,'djgpp/fixpmain'); - $archpms{config} = $archpms{filehand} = 1; -} - if ((-e "testcompile") && (defined($ENV{'COMPILE'}))) { push(@scripts, map("$_.exe", @scripts)); } # Exclude nonxs extensions that are not architecture dependent -my @nonxs = grep(!/^(Errno|IO\/Compress)$/, split(' ', $Config{'nonxs_ext'})); +my @nonxs = grep(!/^Errno$/, split(' ', $Config{'nonxs_ext'})); my @ext_dirs = qw(cpan dist ext); foreach my $ext_dir (@ext_dirs) { @@ -203,7 +188,7 @@ my $installprivlib = "$opts{destdir}$Config{installprivlib}"; my $installarchlib = "$opts{destdir}$Config{installarchlib}"; my $installsitelib = "$opts{destdir}$Config{installsitelib}"; my $installsitearch = "$opts{destdir}$Config{installsitearch}"; -my $installman1dir = "none"; +my $installman1dir = "$opts{destdir}$Config{installman1dir}"; my $man1ext = $Config{man1ext}; my $libperl = $Config{libperl}; # Shared library and dynamic loading suffixes. @@ -220,14 +205,6 @@ if ($^O eq 'os390') { } } -if ($opts{netware}) { - # This is required only if we are installing on a NetWare server - $installscript = $Config{installnwscripts}; - $installprivlib = $Config{installnwlib}; - $installarchlib = $Config{installnwlib}; - $installsitelib = $Config{installnwlib}; -} - my $binexp = $Config{binexp}; if ($Is_VMS) { # Hang in there until File::Spec hits the big time @@ -243,8 +220,9 @@ if ($Is_VMS) { # Hang in there until File::Spec hits the big time $installbin || die "No installbin directory in config.sh\n"; -d $installbin || mkpath($installbin); -d $installbin || $opts{notify} || die "$installbin is not a directory\n"; +-w $installbin || $opts{notify} || die "$installbin is not writable by you\n" + unless $installbin =~ m#^/afs/# || $opts{notify}; -if (!$Is_NetWare) { if (!$Is_VMS) { -x 'perl' . $exe_ext || die "perl isn't executable!\n"; } @@ -255,15 +233,14 @@ else { } } -#-f 't/rantests' || $Is_W32 -# || warn "WARNING: You've never run 'make test' or", -# " some tests failed! (Installing anyway.)\n"; -} #if (!$Is_NetWare) +-f 't/rantests' || $Is_W32 + || warn "WARNING: You've never run 'make test' or", + " some tests failed! (Installing anyway.)\n"; # This will be used to store the packlist $packlist = ExtUtils::Packlist->new("$installarchlib/.packlist"); -if (($Is_W32 and ! $Is_NetWare) or $Is_Cygwin) { +if ($Is_W32 or $Is_Cygwin) { my $perldll; if ($Is_Cygwin) { @@ -281,11 +258,7 @@ if (($Is_W32 and ! $Is_NetWare) or $Is_Cygwin) { copy("$perldll", "$installbin/$perldll"); chmod(0755, "$installbin/$perldll"); $packlist->{"$Config{installbin}/$perldll"} = { type => 'file' }; -} # if (($Is_W32 and ! $Is_NetWare) or $Is_Cygwin) - -# Get the install command and flags from the environment -my @installcmd = $ENV{"INSTALL"} || "install"; -push(@installcmd, $ENV{"INSTALL_COPY"} || "-c"); +} # if ($Is_W32 or $Is_Cygwin) # First we install the version-numbered executables. @@ -305,28 +278,13 @@ if ($Is_VMS) { chmod(0755, "$installbin/$ndbg$perl$exe_ext"); } } -elsif ($^O ne 'dos') { - if (!$Is_NetWare) { - my $ver = ''; # don't install a versioned perl binary - install("perl$exe_ext", "$installbin/$perl_verbase$ver$exe_ext", "0755"); - } - else { - # If installing onto a NetWare server - if ($opts{netware}) { - # Copy perl.nlm, echo.nlm, type.nlm & cgi2perl.nlm - mkpath($Config{installnwsystem}); - copy("netware\\".$ENV{'MAKE_TYPE'}."\\perl.nlm", $Config{installnwsystem}); - copy("netware\\testnlm\\echo\\echo.nlm", $Config{installnwsystem}); - copy("netware\\testnlm\\type\\type.nlm", $Config{installnwsystem}); - chmod(0755, "$Config{installnwsystem}\\perl.nlm"); - mkpath($Config{installnwlcgi}); - copy("lib\\auto\\cgi2perl\\cgi2perl.nlm", $Config{installnwlcgi}); - } - } #if (!$Is_NetWare) -} else { - safe_unlink("$installbin/$perl.exe"); - copy("perl.exe", "$installbin/$perl.exe"); + safe_unlink("$installbin/$perl_verbase$ver$exe_ext"); + copy("perl$exe_ext", "$installbin/$perl_verbase$ver$exe_ext"); + strip("$installbin/$perl_verbase$ver$exe_ext"); + fix_dep_names("$installbin/$perl_verbase$ver$exe_ext"); + chmod(0755, "$installbin/$perl_verbase$ver$exe_ext"); + `chtag -r "$installbin/$perl_verbase$ver$exe_ext"` if ($^O eq 'os390'); } # Install library files. @@ -381,9 +339,7 @@ elsif ($Is_Cygwin) { # On Cygwin symlink it to CORE to make Makefile happy @corefiles = <*.h>; } else { # [als] hard-coded 'libperl' name... not good! - #@corefiles = <*.h libperl*.* perl*$Config{lib_ext}>; - @corefiles = <*.h *.inc perl*$Config{lib_ext}>; - install($libperl, "$opts{destdir}$Config{glibpth}/$libperl", "0444"); + @corefiles = <*.h libperl*.* perl*$Config{lib_ext}>; # AIX needs perl.exp installed as well. push(@corefiles,'perl.exp') if $^O eq 'aix'; @@ -399,6 +355,7 @@ foreach my $file (@corefiles) { } else { chmod($NON_SO_MODE, "$installarchlib/CORE/$file"); } + `chtag -r "$installarchlib/CORE/$file"` if ($^O eq 'os390'); } } @@ -412,8 +369,7 @@ if ($Is_W32) { #linking lib isn't made in root but in CORE on Win32 # Install main perl executables # Make links to ordinary names if installbin directory isn't current directory. -if (0) { # don't install a versioned perl binary -#if (! $versiononly && ! samepath($installbin, '.') && ($^O ne 'dos') && ! $Is_VMS && ! $Is_NetWare) { +if (! $versiononly && ! samepath($installbin, '.') && ! $Is_VMS) { safe_unlink("$installbin/$perl$exe_ext", "$installbin/suid$perl$exe_ext"); if ($^O eq 'vos') { # VOS doesn't support hard links, so use a symlink. @@ -427,7 +383,7 @@ if (0) { # don't install a versioned perl binary # For development purposes it can be very useful to have multiple perls # build for different "architectures" (eg threading or not) simultaneously. -if ($opts{archname} && ! samepath($installbin, '.') && ($^O ne 'dos') && ! $Is_VMS) { +if ($opts{archname} && ! samepath($installbin, '.') && ! $Is_VMS) { my $archperl = "$perl_verbase$ver-$Config{archname}$exe_ext"; safe_unlink("$installbin/$archperl"); if ($^O eq 'vos') { @@ -444,7 +400,7 @@ if ($opts{archname} && ! samepath($installbin, '.') && ($^O ne 'dos') && ! $Is_V my $mainperl_is_instperl = 0; if ($Config{installusrbinperl} && $Config{installusrbinperl} eq 'define' && - !$versiononly && !$opts{notify} && !$Is_W32 && !$Is_NetWare && !$Is_VMS && -t STDIN && -t STDERR + !$versiononly && !$opts{notify} && !$Is_W32 && !$Is_VMS && -t STDIN && -t STDERR && -w $mainperldir && ! samepath($mainperldir, $installbin)) { my($usrbinperl) = "$mainperldir/$perl$exe_ext"; my($instperl) = "$installbin/$perl$exe_ext"; @@ -468,6 +424,7 @@ if ($Config{installusrbinperl} && $Config{installusrbinperl} eq 'define' && eval { CORE::link $instperl, $usrbinperl } ) || eval { symlink $expinstperl, $usrbinperl } || copy($instperl, $usrbinperl); + `chtag -r "$usrbinperl"` if ($^O eq 'os390'); $mainperl_is_instperl = 1; } @@ -487,7 +444,7 @@ sub script_alias { my ($installscript, $orig, $alias, $scr_ext) = @_; safe_unlink("$installscript/$alias$scr_ext"); - if ($^O eq 'dos' or $Is_VMS or $^O eq 'transit') { + if ($Is_VMS or $^O eq 'transit') { copy("$installscript/$orig$scr_ext", "$installscript/$alias$scr_ext"); } elsif ($^O eq 'vos') { @@ -551,9 +508,6 @@ if (!$opts{nopods} && (!$versiononly || ($installprivlib =~ m/\Q$vershort/))) { $packlist->write() unless $opts{notify}; -if (defined($opts{uid}) || defined($opts{gid})) { - chown($opts{uid}, $opts{gid}, $packlist->packlist_file()); -} print " Installation complete\n" if $opts{verbose}; exit 0; @@ -578,7 +532,7 @@ sub safe_unlink { my @names = @_; foreach my $name (@names) { next unless -e $name; - chmod 0777, $name if ($Is_OS2 || $Is_W32 || $Is_NetWare); + chmod 0777, $name if ($Is_OS2 || $Is_W32); print " unlink $name\n" if $opts{verbose}; next if CORE::unlink($name); warn "Couldn't unlink $name: $!\n"; @@ -592,7 +546,6 @@ sub safe_unlink { sub copy { my($from,$to) = @_; - my($success) = 0; my $xto = $to; $xto =~ s/^\Q$opts{destdir}\E//; @@ -600,35 +553,15 @@ sub copy { unless $opts{silent}; print " creating new version of $xto\n" if $Is_VMS and -e $to and !$opts{silent}; - unless ($opts{notify} or File::Copy::copy($from, $to) and ++$success) { + unless ($opts{notify} or File::Copy::copy($from, $to)) { # Might have been that F::C::c can't overwrite the target warn "Couldn't copy $from to $to: $!\n" unless -f $to and (chmod(0666, $to), unlink $to) - and File::Copy::copy($from, $to) and ++$success; - } - if (defined($opts{uid}) || defined($opts{gid})) { - chown($opts{uid}, $opts{gid}, $to) if $success; + and File::Copy::copy($from, $to); } $packlist->{$xto} = { type => 'file' }; } -sub install { - my($from,$to,$mode) = @_; - - my $xto = $to; - my $cmd = join(' ', @installcmd); - $cmd .= " -m $mode" if $mode; - $cmd .= " -s" if $opts{strip}; - $cmd .= " -o $opts{uid}" if defined($opts{uid}); - $cmd .= " -g $opts{gid}" if defined($opts{gid}); - $cmd .= " $from $to"; - $xto =~ s/^\Q$opts{destdir}\E// if $opts{destdir}; - print $opts{verbose} ? " install $from $xto\n" : " $xto\n" unless $opts{silent}; - system($cmd); - warn "Couldn't $cmd\n" if $?; - $packlist->{$xto} = { type => 'file' }; -} - sub installlib { my $dir = $File::Find::dir; $dir =~ s!\Alib/?!!; @@ -657,10 +590,6 @@ sub installlib { return; } - # If we have different install version, install that instead - return if -e "$_.install"; - $name =~ s/\.install$//; - # ignore patch backups, RCS files, emacs backup & temp files and the # .exists files, .PL files, and test files. return if $name =~ m{\.orig$|\.rej$|~$|^#.+#$|,v$|^\.exists|\.PL$|\.plc$|\.t$|^test\.pl$|^dbm_filter_util\.pl$|^filter-util\.pl$|^uupacktool\.pl$|^\.gitignore$} || @@ -723,7 +652,7 @@ sub installlib { my $installlib = $installprivlib; if ($dir =~ /^auto\// || ($name =~ /^(.*)\.(?:pm|pod)$/ && $archpms{$1}) || - ($name =~ /^(.*)\.(?:h|lib)$/i && ($Is_W32 || $Is_NetWare)) || + ($name =~ /^(.*)\.(?:h|lib)$/i && $Is_W32) || $name=~/^Config_(heavy|git)\.pl\z/ ) { $installlib = $installarchlib; @@ -732,14 +661,6 @@ sub installlib { return unless $do_installprivlib; } - if ($Is_NetWare && !$opts{netware} && /\.(?:nlp|nlm|bs)$/) { - # Don't copy .nlp,.nlm files, doesn't make sense on Windows and also - # if copied will give problems when building new extensions. - # Has to be copied if we are installing on a NetWare server and - # hence the check !$opts{netware} - return; - } - if (-f $_) { my $xname = "$installlib/$name"; $xname =~ s/^\Q$opts{destdir}\E//; @@ -798,6 +719,7 @@ sub copy_if_diff { my ($atime, $mtime) = (stat $from)[8,9]; utime $atime, $mtime, $to; } + `chtag -r "$to"` if ($^O eq "os390"); 1; } } diff --git a/gnu/usr.bin/perl/intrpvar.h b/gnu/usr.bin/perl/intrpvar.h index 23de9d9cee9..94ddbf672be 100644 --- a/gnu/usr.bin/perl/intrpvar.h +++ b/gnu/usr.bin/perl/intrpvar.h @@ -10,10 +10,6 @@ #include "handy.h" -/* -=head1 Per-Interpreter Variables -*/ - /* These variables are per-interpreter in threaded/multiplicity builds, * global otherwise. @@ -40,7 +36,7 @@ PERLVAR(I, stack_base, SV **) PERLVAR(I, stack_max, SV **) PERLVAR(I, savestack, ANY *) /* items that need to be restored when - LEAVEing scopes we've ENTERed */ + LEAVEing scopes we've ENTERed */ PERLVAR(I, savestack_ix, I32) PERLVAR(I, savestack_max, I32) @@ -53,13 +49,13 @@ PERLVARI(I, tmps_ix, SSize_t, -1) PERLVARI(I, tmps_floor, SSize_t, -1) PERLVAR(I, tmps_max, SSize_t) /* first unalloced slot in tmps stack */ -PERLVARI(I, sub_generation, U32, 1) /* incr to invalidate method cache */ - PERLVAR(I, markstack, I32 *) /* stack_sp locations we're - remembering */ + remembering */ PERLVAR(I, markstack_ptr, I32 *) PERLVAR(I, markstack_max, I32 *) +PERLVARI(I, sub_generation, U32, 1) /* incr to invalidate method cache */ + #ifdef PERL_HASH_RANDOMIZE_KEYS #ifdef USE_PERL_PERTURB_KEYS PERLVARI(I, hash_rand_bits_enabled, U8, 1) /* used to randomize hash stuff 0 == no-random, 1 == random, 2 == determinsitic */ @@ -94,24 +90,17 @@ PERLVARI(I, tainted, bool, FALSE) /* using variables controlled by $< */ PERLVAR(I, delaymagic, U16) /* ($<,$>) = ... */ /* -=for apidoc Amn|GV *|PL_defgv - -The GV representing C<*_>. Useful for access to C<$_>. - -=cut -*/ - -PERLVAR(I, localizing, U8) /* are we processing a local() list? */ -PERLVAR(I, in_eval, U8) /* trap "fatal" errors? */ -PERLVAR(I, defgv, GV *) /* the *_ glob */ -/* - +=for apidoc_section $warning =for apidoc mn|U8|PL_dowarn The C variable that roughly corresponds to Perl's C<$^W> warning variable. However, C<$^W> is treated as a boolean, whereas C is a collection of flag bits. +On threaded perls, each thread has an independent copy of this variable; +each initialized at creation time with the current value of the creating +thread's copy. + =cut */ @@ -126,10 +115,32 @@ PERLVARI(I, utf8cache, I8, PERL___I) /* Is the utf8 caching code enabled? */ #undef PERL___I /* +=for apidoc_section $GV +=for apidoc Amn|GV *|PL_defgv + +The GV representing C<*_>. Useful for access to C<$_>. + +On threaded perls, each thread has an independent copy of this variable; +each initialized at creation time with the current value of the creating +thread's copy. + +=cut +*/ + +PERLVAR(I, localizing, U8) /* are we processing a local() list? */ +PERLVAR(I, in_eval, U8) /* trap "fatal" errors? */ +PERLVAR(I, defgv, GV *) /* the *_ glob */ + +/* +=for apidoc_section $GV =for apidoc Amn|HV*|PL_curstash The stash for the package code will be compiled into. +On threaded perls, each thread has an independent copy of this variable; +each initialized at creation time with the current value of the creating +thread's copy. + =cut */ @@ -138,11 +149,16 @@ PERLVAR(I, defstash, HV *) /* main symbol table */ PERLVAR(I, curstash, HV *) /* symbol table for current package */ /* +=for apidoc_section $COP =for apidoc Amn|COP*|PL_curcop The currently active COP (control op) roughly representing the current statement in the source. +On threaded perls, each thread has an independent copy of this variable; +each initialized at creation time with the current value of the creating +thread's copy. + =cut */ @@ -150,7 +166,7 @@ PERLVAR(I, curcop, COP *) PERLVAR(I, curstack, AV *) /* THE STACK */ PERLVAR(I, curstackinfo, PERL_SI *) /* current stack + context */ PERLVAR(I, mainstack, AV *) /* the stack when nothing funny is - happening */ + happening */ /* memory management */ PERLVAR(I, sv_count, IV) /* how many SV* are currently allocated */ @@ -171,16 +187,18 @@ PERLVAR(I, regmatch_state, regmatch_state *) PERLVAR(I, comppad, PAD *) /* storage for lexically scoped temporaries */ /* +=for apidoc_section $SV =for apidoc Amn|SV|PL_sv_undef -This is the C SV. Always refer to this as C<&PL_sv_undef>. +This is the C SV. It is readonly. Always refer to this as +C<&PL_sv_undef>. =for apidoc Amn|SV|PL_sv_no -This is the C SV. See C>. Always refer to this as -C<&PL_sv_no>. +This is the C SV. It is readonly. See C>. Always refer +to this as C<&PL_sv_no>. =for apidoc Amn|SV|PL_sv_yes -This is the C SV. See C>. Always refer to this as -C<&PL_sv_yes>. +This is the C SV. It is readonly. See C>. Always refer to +this as C<&PL_sv_yes>. =for apidoc Amn|SV|PL_sv_zero This readonly SV has a zero numeric value and a C<"0"> string value. It's @@ -204,25 +222,44 @@ PERLVARA(I, sv_immortals, 4, SV) PERLVAR(I, padname_undef, PADNAME) PERLVAR(I, padname_const, PADNAME) -PERLVAR(I, Sv, SV *) /* used to hold temporary values */ + +/* +=for apidoc_section $SV +=for apidoc Cmn||PL_Sv + +A scratch pad SV for whatever temporary use you need. Chiefly used as a +fallback by macros on platforms where L> is +unavailable, and which would otherwise evaluate their SV parameter more than +once. + +=cut +*/ +PERLVAR(I, Sv, SV *) + PERLVAR(I, parser, yy_parser *) /* current parser state */ PERLVAR(I, stashcache, HV *) /* Cache to speed up S_method_common */ /* +=for apidoc_section $string =for apidoc Amn|STRLEN|PL_na -A convenience variable which is typically used with C when one -doesn't care about the length of the string. It is usually more efficient -to either declare a local variable and use that instead or to use the -C macro. +A scratch pad variable in which to store a C value. If would have been +better named something like C. + +It is is typically used with C when one is actually planning to discard +the returned length, (hence the length is "Not Applicable", which is how this +variable got its name). + +It is usually more efficient to either declare a local variable and use that +instead, or to use the C macro. =cut */ PERLVAR(I, na, STRLEN) /* for use in SvPV when length is - Not Applicable */ + Not Applicable */ /* stat stuff */ PERLVAR(I, statcache, Stat_t) /* _ */ @@ -230,18 +267,33 @@ PERLVAR(I, statgv, GV *) PERLVARI(I, statname, SV *, NULL) /* +=for apidoc_section $io =for apidoc mn|SV*|PL_rs The input record separator - C<$/> in Perl space. +On threaded perls, each thread has an independent copy of this variable; +each initialized at creation time with the current value of the creating +thread's copy. + +=for apidoc_section $io =for apidoc mn|GV*|PL_last_in_gv The GV which was last used for a filehandle input operation. (C<< >>) +On threaded perls, each thread has an independent copy of this variable; +each initialized at creation time with the current value of the creating +thread's copy. + +=for apidoc_section $io =for apidoc mn|GV*|PL_ofsgv The glob containing the output field separator - C<*,> in Perl space. +On threaded perls, each thread has an independent copy of this variable; +each initialized at creation time with the current value of the creating +thread's copy. + =cut */ @@ -278,9 +330,10 @@ PERLVAR(I, efloatbuf, char *) PERLVAR(I, efloatsize, STRLEN) PERLVARI(I, dumpindent, U16, 4) /* number of blanks per dump - indentation level */ + indentation level */ /* +=for apidoc_section $embedding =for apidoc Amn|U8|PL_exit_flags Contains flags controlling perl's behaviour on exit(): @@ -313,6 +366,10 @@ Set by the L operator. =for apidoc Amnh||PERL_EXIT_DESTRUCT_END =for apidoc Amnh||PERL_EXIT_WARN +On threaded perls, each thread has an independent copy of this variable; +each initialized at creation time with the current value of the creating +thread's copy. + =cut */ @@ -334,6 +391,7 @@ PERLVARA(I, locale_utf8ness, 256, char) PERLVARA(I, colors,6, char *) /* values from PERL_RE_COLORS env var */ /* +=for apidoc_section $optree_construction =for apidoc Amn|peep_t|PL_peepp Pointer to the per-subroutine peephole optimiser. This is a function @@ -351,12 +409,17 @@ If the new code wishes to operate on ops throughout the subroutine's structure, rather than just at the top level, it is likely to be more convenient to wrap the L hook. +On threaded perls, each thread has an independent copy of this variable; +each initialized at creation time with the current value of the creating +thread's copy. + =cut */ PERLVARI(I, peepp, peep_t, Perl_peep) /* +=for apidoc_section $optree_construction =for apidoc Amn|peep_t|PL_rpeepp Pointer to the recursive peephole optimiser. This is a function @@ -375,12 +438,17 @@ If the new code wishes to operate only on ops at a subroutine's top level, rather than throughout the structure, it is likely to be more convenient to wrap the L hook. +On threaded perls, each thread has an independent copy of this variable; +each initialized at creation time with the current value of the creating +thread's copy. + =cut */ PERLVARI(I, rpeepp, peep_t, Perl_rpeep) /* +=for apidoc_section $optrees =for apidoc Amn|Perl_ophook_t|PL_opfreehook When non-C, the function pointed by this variable will be called each time an OP is freed with the corresponding OP as the argument. @@ -389,6 +457,10 @@ It is also assured to first fire for the parent OP and then for its kids. When you replace this variable, it is considered a good practice to store the possibly previously installed hook and that you recall it inside your own. +On threaded perls, each thread has an independent copy of this variable; +each initialized at creation time with the current value of the creating +thread's copy. + =cut */ @@ -434,7 +506,7 @@ PERLVAR(I, e_script, SV *) PERLVAR(I, basetime, Time_t) /* $^T */ PERLVARI(I, maxsysfd, I32, MAXSYSFD) - /* top fd to pass to subprocesses */ + /* top fd to pass to subprocesses */ PERLVAR(I, statusvalue, I32) /* $? */ #ifdef VMS PERLVAR(I, statusvalue_vms, U32) @@ -463,12 +535,17 @@ PERLVAR(I, DBgv, GV *) /* *DB::DB */ PERLVAR(I, DBline, GV *) /* *DB::line */ /* +=for apidoc_section $debugging =for apidoc mn|GV *|PL_DBsub When Perl is run in debugging mode, with the B<-d> switch, this GV contains the SV which holds the name of the sub being debugged. This is the C variable which corresponds to Perl's $DB::sub variable. See C>. +On threaded perls, each thread has an independent copy of this variable; +each initialized at creation time with the current value of the creating +thread's copy. + =for apidoc mn|SV *|PL_DBsingle When Perl is run in debugging mode, with the B<-d> switch, this SV is a boolean which indicates whether subs are being single-stepped. @@ -476,11 +553,19 @@ Single-stepping is automatically turned on after every step. This is the C variable which corresponds to Perl's $DB::single variable. See C>. +On threaded perls, each thread has an independent copy of this variable; +each initialized at creation time with the current value of the creating +thread's copy. + =for apidoc mn|SV *|PL_DBtrace Trace variable used when Perl is run in debugging mode, with the B<-d> switch. This is the C variable which corresponds to Perl's $DB::trace variable. See C>. +On threaded perls, each thread has an independent copy of this variable; +each initialized at creation time with the current value of the creating +thread's copy. + =cut */ @@ -541,14 +626,15 @@ PERLVARI(I, laststype, U16, OP_STAT) PERLVARI(I, laststatval, int, -1) PERLVAR(I, modcount, I32) /* how much op_lvalue()ification in - assignment? */ + assignment? */ /* interpreter atexit processing */ PERLVARI(I, exitlistlen, I32, 0) /* length of same */ PERLVARI(I, exitlist, PerlExitListEntry *, NULL) - /* list of exit functions */ + /* list of exit functions */ /* +=for apidoc_section $HV =for apidoc Amn|HV*|PL_modglobal C is a general purpose, interpreter global HV for use by @@ -557,6 +643,10 @@ In a pinch, it can also be used as a symbol table for extensions to share data among each other. It is a good idea to use keys prefixed by the package name of the extension that owns the data. +On threaded perls, each thread has an independent copy of this variable; +each initialized at creation time with the current value of the creating +thread's copy. + =cut */ @@ -574,7 +664,7 @@ PERLVAR(I, comppad_name_floor, PADOFFSET)/* start of vars in innermost block */ #ifdef HAVE_INTERP_INTERN PERLVAR(I, sys_intern, struct interp_intern) - /* platform internals */ + /* platform internals */ #endif /* more statics moved here */ @@ -628,14 +718,6 @@ PERLVAR(I, debug, volatile U32) /* flags given to -D switch */ PERLVARI(I, padlist_generation, U32, 1) /* id to identify padlist clones */ -/* -=for apidoc Amn|runops_proc_t|PL_runops - -See L. - -=cut -*/ - PERLVARI(I, runops, runops_proc_t, RUNOPS_DEFAULT) PERLVAR(I, subname, SV *) /* name of current subroutine */ @@ -645,7 +727,7 @@ PERLVAR(I, min_intro_pending, PADOFFSET)/* start of vars to introduce */ PERLVAR(I, max_intro_pending, PADOFFSET)/* end of vars to introduce */ PERLVAR(I, padix, PADOFFSET) /* lowest unused index - 1 - in current "register" pad */ + in current "register" pad */ PERLVAR(I, constpadix, PADOFFSET) /* lowest unused for constants */ PERLVAR(I, padix_floor, PADOFFSET) /* how low may inner block reset padix */ @@ -654,6 +736,8 @@ PERLVAR(I, padix_floor, PADOFFSET) /* how low may inner block reset padix */ && defined(USE_THREAD_SAFE_LOCALE) \ && ! defined(HAS_QUERYLOCALE) +/* This is the most number of categories we've encountered so far on any + * platform */ PERLVARA(I, curlocales, 12, char *) #endif @@ -668,7 +752,7 @@ PERLVARI(I, strxfrm_is_behaved, bool, TRUE) /* Assume until proven otherwise that it works */ PERLVARI(I, strxfrm_max_cp, U8, 0) /* Highest collating cp in locale */ PERLVARI(I, collation_standard, bool, TRUE) - /* Assume simple collation */ + /* Assume simple collation */ #endif /* USE_LOCALE_COLLATE */ PERLVARI(I, langinfo_buf, char *, NULL) @@ -680,9 +764,6 @@ PERLVARI(I, setlocale_bufsize, Size_t, 0) PERLVAR(I, sawampersand, U8) /* must save all match strings */ #endif -PERLVAR(I, unsafe, bool) -PERLVAR(I, colorset, bool) /* PERL_RE_COLORS env var is in use */ - /* current phase the interpreter is in for ordering this structure to remove holes, we're assuming that this is 4 bytes. */ @@ -690,7 +771,11 @@ PERLVARI(I, phase, enum perl_phase, PERL_PHASE_CONSTRUCT) PERLVARI(I, in_load_module, bool, FALSE) /* to prevent recursions in PerlIO_find_layer */ +PERLVAR(I, unsafe, bool) +PERLVAR(I, colorset, bool) /* PERL_RE_COLORS env var is in use */ + /* +=for apidoc_section $embedding =for apidoc Amn|signed char|PL_perl_destruct_level This value may be set when embedding for full cleanup. @@ -710,18 +795,27 @@ Possible values: If C<$ENV{PERL_DESTRUCT_LEVEL}> is set to an integer greater than the value of C its value is used instead. +On threaded perls, each thread has an independent copy of this variable; +each initialized at creation time with the current value of the creating +thread's copy. + =cut */ /* mod_perl is special, and also assigns a meaning -1 */ PERLVARI(I, perl_destruct_level, signed char, 0) +PERLVAR(I, pad_reset_pending, bool) /* reset pad on next attempted alloc */ + +PERLVAR(I, srand_called, bool) + #ifdef USE_LOCALE_NUMERIC -PERLVARI(I, numeric_standard, int, TRUE) - /* Assume C locale numerics */ PERLVARI(I, numeric_underlying, bool, TRUE) - /* Assume underlying locale numerics */ + /* Assume underlying locale numerics */ PERLVARI(I, numeric_underlying_is_standard, bool, TRUE) + +PERLVARI(I, numeric_standard, int, TRUE) + /* Assume C locale numerics */ PERLVAR(I, numeric_name, char *) /* Name of current numeric locale */ PERLVAR(I, numeric_radix_sv, SV *) /* The radix separator if not '.' */ @@ -732,15 +826,6 @@ PERLVARI(I, underlying_numeric_obj, locale_t, NULL) # endif #endif /* !USE_LOCALE_NUMERIC */ -#ifdef FCRYPT -PERLVARI(I, cryptseen, bool, FALSE) /* has fast crypt() been initialized? */ -#else -/* One byte hole in the interpreter structure. */ -#endif - -PERLVAR(I, pad_reset_pending, bool) /* reset pad on next attempted alloc */ -PERLVAR(I, srand_called, bool) - /* Array of signal handlers, indexed by signal number, through which the C signal handler dispatches. */ PERLVAR(I, psig_ptr, SV **) @@ -769,12 +854,12 @@ PERLVAR(I, body_arenas, void *) /* pointer to list of body-arenas */ #if defined(USE_ITHREADS) PERLVAR(I, regex_pad, SV **) /* Shortcut into the array of - regex_padav */ + regex_padav */ PERLVAR(I, regex_padav, AV *) /* All regex objects, indexed via the - values in op_pmoffset of pmop. - Entry 0 is an SV whose PV is a - "packed" list of IVs listing - the now-free slots in the array */ + values in op_pmoffset of pmop. + Entry 0 is an SV whose PV is a + "packed" list of IVs listing + the now-free slots in the array */ PERLVAR(I, stashpad, HV **) /* for CopSTASH */ PERLVARI(I, stashpadmax, PADOFFSET, 64) PERLVARI(I, stashpadix, PADOFFSET, 0) @@ -795,7 +880,7 @@ PERLVARI(I, def_layerlist, PerlIO_list_t *, NULL) PERLVARI(I, checkav_save, AV *, NULL) /* save CHECK{}s when compiling */ PERLVARI(I, unitcheckav_save, AV *, NULL) - /* save UNITCHECK{}s when compiling */ + /* save UNITCHECK{}s when compiling */ PERLVARI(I, clocktick, long, 0) /* this many times() ticks in a second */ @@ -847,18 +932,20 @@ PERLVAR(I, debug_pad, struct perl_debug_pad) /* always needed because of the re /* Hook for File::Glob */ PERLVARI(I, globhook, globhook_t, NULL) +#if defined(MULTIPLICITY) /* The last unconditional member of the interpreter structure when 5.18.0 was released. The offset of the end of this is baked into a global variable in any shared perl library which will allow a sanity test in future perl releases. */ -#define PERL_LAST_5_18_0_INTERP_MEMBER Iglobhook +# define PERL_LAST_5_18_0_INTERP_MEMBER Iglobhook +#endif -#ifdef PERL_IMPLICIT_CONTEXT +#ifdef MULTIPLICITY PERLVARI(I, my_cxt_list, void **, NULL) /* per-module array of MY_CXT pointers */ PERLVARI(I, my_cxt_size, int, 0) /* size of PL_my_cxt_list */ #endif -#if defined(PERL_IMPLICIT_CONTEXT) || defined(PERL_DEBUG_READONLY_COW) +#if defined(MULTIPLICITY) || defined(PERL_DEBUG_READONLY_COW) /* For use with the memory debugging code in util.c. This is used only in * DEBUGGING builds (as long as the relevant structure is defined), but * defining it in non-debug builds too means that we retain binary @@ -949,6 +1036,18 @@ PERLVAR(I, mbrtowc_ps, mbstate_t) #ifdef HAS_WCRTOMB PERLVAR(I, wcrtomb_ps, mbstate_t) #endif +#ifdef PERL_MEM_LOG +/* Enough space for the reserved byte, 1 for a potential leading 0, then enough + * for the longest representable integer plus an extra, the 3 flag characters, + * and NUL */ +PERLVARA(I, mem_log, 1 + 1 + TYPE_DIGITS(UV) + 1 + 3 + 1, char) +#endif + +/* The most recently seen `use VERSION` declaration, encoded in a single + * U16 as (major << 8) | minor. We do this rather than store an entire SV + * version object so we can fit the U16 into the uv of a SAVEHINTS and not + * have to worry about SV refcounts during scope enter/exit. */ +PERLVAR(I, prevailing_version, U16) /* If you are adding a U8 or U16, check to see if there are 'Space' comments * above on where there are gaps which currently will be structure padding. */ @@ -957,6 +1056,4 @@ PERLVAR(I, wcrtomb_ps, mbstate_t) * this comment, for binary compatibility (the offsets of the old members must * not change). * (Don't forget to add your variable also to perl_clone()!) - * XSUB.h provides wrapper functions via perlapi.h that make this - * irrelevant, but not all code may be expected to #include XSUB.h. */ diff --git a/gnu/usr.bin/perl/invlist_inline.h b/gnu/usr.bin/perl/invlist_inline.h index f6ac8195335..9c6ee603afd 100644 --- a/gnu/usr.bin/perl/invlist_inline.h +++ b/gnu/usr.bin/perl/invlist_inline.h @@ -27,7 +27,7 @@ #define FROM_INTERNAL_SIZE(x) ((x)/ sizeof(UV)) PERL_STATIC_INLINE bool -S_is_invlist(SV* const invlist) +S_is_invlist(const SV* const invlist) { return invlist != NULL && SvTYPE(invlist) == SVt_INVLIST; } @@ -145,7 +145,7 @@ S_invlist_highest(SV* const invlist) PERL_ARGS_ASSERT_INVLIST_HIGHEST; if (len == 0) { - return 0; + return 0; } array = invlist_array(invlist); @@ -218,8 +218,8 @@ S_invlist_iternext(SV* invlist, UV* start, UV* end) PERL_ARGS_ASSERT_INVLIST_ITERNEXT; if (*pos >= len) { - *pos = (STRLEN) UV_MAX; /* Force iterinit() to be required next time */ - return FALSE; + *pos = (STRLEN) UV_MAX; /* Force iterinit() to be required next time */ + return FALSE; } array = invlist_array(invlist); @@ -227,10 +227,10 @@ S_invlist_iternext(SV* invlist, UV* start, UV* end) *start = array[(*pos)++]; if (*pos >= len) { - *end = UV_MAX; + *end = UV_MAX; } else { - *end = array[(*pos)++] - 1; + *end = array[(*pos)++] - 1; } return TRUE; diff --git a/gnu/usr.bin/perl/iperlsys.h b/gnu/usr.bin/perl/iperlsys.h index c176ad5c559..b922af0e658 100644 --- a/gnu/usr.bin/perl/iperlsys.h +++ b/gnu/usr.bin/perl/iperlsys.h @@ -13,7 +13,7 @@ #define __Inc__IPerl___ /* - * PerlXXX_YYY explained - DickH and DougL @ ActiveState.com + * PerlXXX_YYY explained - DickH and DougL @ ActiveState.com * * XXX := functional group * YYY := stdlib/OS function name @@ -49,6 +49,7 @@ */ #include "perlio.h" + typedef Signal_t (*Sighandler1_t) (int); typedef Signal_t (*Sighandler3_t) (int, Siginfo_t*, void*); @@ -62,304 +63,300 @@ typedef Sighandler1_t Sighandler_t; #if defined(PERL_IMPLICIT_SYS) -/* IPerlStdIO */ +/* IPerlStdIO */ struct IPerlStdIO; struct IPerlStdIOInfo; typedef FILE* (*LPStdin)(struct IPerlStdIO*); -typedef FILE* (*LPStdout)(struct IPerlStdIO*); -typedef FILE* (*LPStderr)(struct IPerlStdIO*); -typedef FILE* (*LPOpen)(struct IPerlStdIO*, const char*, - const char*); -typedef int (*LPClose)(struct IPerlStdIO*, FILE*); -typedef int (*LPEof)(struct IPerlStdIO*, FILE*); -typedef int (*LPError)(struct IPerlStdIO*, FILE*); -typedef void (*LPClearerr)(struct IPerlStdIO*, FILE*); -typedef int (*LPGetc)(struct IPerlStdIO*, FILE*); -typedef STDCHAR* (*LPGetBase)(struct IPerlStdIO*, FILE*); -typedef int (*LPGetBufsiz)(struct IPerlStdIO*, FILE*); -typedef int (*LPGetCnt)(struct IPerlStdIO*, FILE*); -typedef STDCHAR* (*LPGetPtr)(struct IPerlStdIO*, FILE*); -typedef char* (*LPGets)(struct IPerlStdIO*, char*, int, FILE*); -typedef int (*LPPutc)(struct IPerlStdIO*, int, FILE*); -typedef int (*LPPuts)(struct IPerlStdIO*, const char *, FILE*); -typedef int (*LPFlush)(struct IPerlStdIO*, FILE*); -typedef int (*LPUngetc)(struct IPerlStdIO*, int,FILE*); -typedef int (*LPFileno)(struct IPerlStdIO*, FILE*); -typedef FILE* (*LPFdopen)(struct IPerlStdIO*, int, const char*); -typedef FILE* (*LPReopen)(struct IPerlStdIO*, const char*, - const char*, FILE*); -typedef SSize_t (*LPRead)(struct IPerlStdIO*, void*, Size_t, Size_t, FILE *); -typedef SSize_t (*LPWrite)(struct IPerlStdIO*, const void*, Size_t, Size_t, FILE *); -typedef void (*LPSetBuf)(struct IPerlStdIO*, FILE*, char*); -typedef int (*LPSetVBuf)(struct IPerlStdIO*, FILE*, char*, int, - Size_t); -typedef void (*LPSetCnt)(struct IPerlStdIO*, FILE*, int); - -#ifndef NETWARE -typedef void (*LPSetPtr)(struct IPerlStdIO*, FILE*, STDCHAR*); -#elif defined(NETWARE) -typedef void (*LPSetPtr)(struct IPerlStdIO*, FILE*, STDCHAR*, int); -#endif - -typedef void (*LPSetlinebuf)(struct IPerlStdIO*, FILE*); -typedef int (*LPPrintf)(struct IPerlStdIO*, FILE*, const char*, - ...); -typedef int (*LPVprintf)(struct IPerlStdIO*, FILE*, const char*, - va_list); -typedef Off_t (*LPTell)(struct IPerlStdIO*, FILE*); -typedef int (*LPSeek)(struct IPerlStdIO*, FILE*, Off_t, int); -typedef void (*LPRewind)(struct IPerlStdIO*, FILE*); -typedef FILE* (*LPTmpfile)(struct IPerlStdIO*); -typedef int (*LPGetpos)(struct IPerlStdIO*, FILE*, Fpos_t*); -typedef int (*LPSetpos)(struct IPerlStdIO*, FILE*, - const Fpos_t*); -typedef void (*LPInit)(struct IPerlStdIO*); -typedef void (*LPInitOSExtras)(struct IPerlStdIO*); -typedef FILE* (*LPFdupopen)(struct IPerlStdIO*, FILE*); +typedef FILE* (*LPStdout)(struct IPerlStdIO*); +typedef FILE* (*LPStderr)(struct IPerlStdIO*); +typedef FILE* (*LPOpen)(struct IPerlStdIO*, const char*, + const char*); +typedef int (*LPClose)(struct IPerlStdIO*, FILE*); +typedef int (*LPEof)(struct IPerlStdIO*, FILE*); +typedef int (*LPError)(struct IPerlStdIO*, FILE*); +typedef void (*LPClearerr)(struct IPerlStdIO*, FILE*); +typedef int (*LPGetc)(struct IPerlStdIO*, FILE*); +typedef STDCHAR* (*LPGetBase)(struct IPerlStdIO*, FILE*); +typedef int (*LPGetBufsiz)(struct IPerlStdIO*, FILE*); +typedef int (*LPGetCnt)(struct IPerlStdIO*, FILE*); +typedef STDCHAR* (*LPGetPtr)(struct IPerlStdIO*, FILE*); +typedef char* (*LPGets)(struct IPerlStdIO*, char*, int, FILE*); +typedef int (*LPPutc)(struct IPerlStdIO*, int, FILE*); +typedef int (*LPPuts)(struct IPerlStdIO*, const char *, FILE*); +typedef int (*LPFlush)(struct IPerlStdIO*, FILE*); +typedef int (*LPUngetc)(struct IPerlStdIO*, int,FILE*); +typedef int (*LPFileno)(struct IPerlStdIO*, FILE*); +typedef FILE* (*LPFdopen)(struct IPerlStdIO*, int, const char*); +typedef FILE* (*LPReopen)(struct IPerlStdIO*, const char*, + const char*, FILE*); +typedef SSize_t (*LPRead)(struct IPerlStdIO*, void*, Size_t, Size_t, FILE *); +typedef SSize_t (*LPWrite)(struct IPerlStdIO*, const void*, Size_t, Size_t, FILE *); +typedef void (*LPSetBuf)(struct IPerlStdIO*, FILE*, char*); +typedef int (*LPSetVBuf)(struct IPerlStdIO*, FILE*, char*, int, + Size_t); +typedef void (*LPSetCnt)(struct IPerlStdIO*, FILE*, int); + +typedef void (*LPSetPtr)(struct IPerlStdIO*, FILE*, STDCHAR*); + +typedef void (*LPSetlinebuf)(struct IPerlStdIO*, FILE*); +typedef int (*LPPrintf)(struct IPerlStdIO*, FILE*, const char*, + ...); +typedef int (*LPVprintf)(struct IPerlStdIO*, FILE*, const char*, + va_list); +typedef Off_t (*LPTell)(struct IPerlStdIO*, FILE*); +typedef int (*LPSeek)(struct IPerlStdIO*, FILE*, Off_t, int); +typedef void (*LPRewind)(struct IPerlStdIO*, FILE*); +typedef FILE* (*LPTmpfile)(struct IPerlStdIO*); +typedef int (*LPGetpos)(struct IPerlStdIO*, FILE*, Fpos_t*); +typedef int (*LPSetpos)(struct IPerlStdIO*, FILE*, + const Fpos_t*); +typedef void (*LPInit)(struct IPerlStdIO*); +typedef void (*LPInitOSExtras)(struct IPerlStdIO*); +typedef FILE* (*LPFdupopen)(struct IPerlStdIO*, FILE*); struct IPerlStdIO { - LPStdin pStdin; - LPStdout pStdout; - LPStderr pStderr; - LPOpen pOpen; - LPClose pClose; - LPEof pEof; - LPError pError; - LPClearerr pClearerr; - LPGetc pGetc; - LPGetBase pGetBase; - LPGetBufsiz pGetBufsiz; - LPGetCnt pGetCnt; - LPGetPtr pGetPtr; - LPGets pGets; - LPPutc pPutc; - LPPuts pPuts; - LPFlush pFlush; - LPUngetc pUngetc; - LPFileno pFileno; - LPFdopen pFdopen; - LPReopen pReopen; - LPRead pRead; - LPWrite pWrite; - LPSetBuf pSetBuf; - LPSetVBuf pSetVBuf; - LPSetCnt pSetCnt; - LPSetPtr pSetPtr; - LPSetlinebuf pSetlinebuf; - LPPrintf pPrintf; - LPVprintf pVprintf; - LPTell pTell; - LPSeek pSeek; - LPRewind pRewind; - LPTmpfile pTmpfile; - LPGetpos pGetpos; - LPSetpos pSetpos; - LPInit pInit; - LPInitOSExtras pInitOSExtras; - LPFdupopen pFdupopen; + LPStdin pStdin; + LPStdout pStdout; + LPStderr pStderr; + LPOpen pOpen; + LPClose pClose; + LPEof pEof; + LPError pError; + LPClearerr pClearerr; + LPGetc pGetc; + LPGetBase pGetBase; + LPGetBufsiz pGetBufsiz; + LPGetCnt pGetCnt; + LPGetPtr pGetPtr; + LPGets pGets; + LPPutc pPutc; + LPPuts pPuts; + LPFlush pFlush; + LPUngetc pUngetc; + LPFileno pFileno; + LPFdopen pFdopen; + LPReopen pReopen; + LPRead pRead; + LPWrite pWrite; + LPSetBuf pSetBuf; + LPSetVBuf pSetVBuf; + LPSetCnt pSetCnt; + LPSetPtr pSetPtr; + LPSetlinebuf pSetlinebuf; + LPPrintf pPrintf; + LPVprintf pVprintf; + LPTell pTell; + LPSeek pSeek; + LPRewind pRewind; + LPTmpfile pTmpfile; + LPGetpos pGetpos; + LPSetpos pSetpos; + LPInit pInit; + LPInitOSExtras pInitOSExtras; + LPFdupopen pFdupopen; }; struct IPerlStdIOInfo { - unsigned long nCount; /* number of entries expected */ - struct IPerlStdIO perlStdIOList; + unsigned long nCount; /* number of entries expected */ + struct IPerlStdIO perlStdIOList; }; /* These do not belong here ... NI-S, 14 Nov 2000 */ -#ifdef USE_STDIO_PTR -# define PerlSIO_has_cntptr(f) 1 -# ifdef STDIO_PTR_LVALUE -# ifdef STDIO_CNT_LVALUE -# define PerlSIO_canset_cnt(f) 1 -# ifdef STDIO_PTR_LVAL_NOCHANGE_CNT -# define PerlSIO_fast_gets(f) 1 +# ifdef USE_STDIO_PTR +# define PerlSIO_has_cntptr(f) 1 +# ifdef STDIO_PTR_LVALUE +# ifdef STDIO_CNT_LVALUE +# define PerlSIO_canset_cnt(f) 1 +# ifdef STDIO_PTR_LVAL_NOCHANGE_CNT +# define PerlSIO_fast_gets(f) 1 +# endif +# else /* STDIO_CNT_LVALUE */ +# define PerlSIO_canset_cnt(f) 0 +# endif +# else /* STDIO_PTR_LVALUE */ +# ifdef STDIO_PTR_LVAL_SETS_CNT +# define PerlSIO_fast_gets(f) 1 # endif -# else /* STDIO_CNT_LVALUE */ -# define PerlSIO_canset_cnt(f) 0 -# endif -# else /* STDIO_PTR_LVALUE */ -# ifdef STDIO_PTR_LVAL_SETS_CNT -# define PerlSIO_fast_gets(f) 1 # endif -# endif -#else /* USE_STDIO_PTR */ -# define PerlSIO_has_cntptr(f) 0 -# define PerlSIO_canset_cnt(f) 0 -#endif /* USE_STDIO_PTR */ +# else /* USE_STDIO_PTR */ +# define PerlSIO_has_cntptr(f) 0 +# define PerlSIO_canset_cnt(f) 0 +# endif /* USE_STDIO_PTR */ -#ifndef PerlSIO_fast_gets -#define PerlSIO_fast_gets(f) 0 -#endif +# ifndef PerlSIO_fast_gets +# define PerlSIO_fast_gets(f) 0 +# endif -#ifdef FILE_base -#define PerlSIO_has_base(f) 1 -#else -#define PerlSIO_has_base(f) 0 -#endif +# ifdef FILE_base +# define PerlSIO_has_base(f) 1 +# else +# define PerlSIO_has_base(f) 0 +# endif /* Now take FILE * via function table */ -#define PerlSIO_stdin \ - (*PL_StdIO->pStdin)(PL_StdIO) -#define PerlSIO_stdout \ - (*PL_StdIO->pStdout)(PL_StdIO) -#define PerlSIO_stderr \ - (*PL_StdIO->pStderr)(PL_StdIO) -#define PerlSIO_fopen(x,y) \ - (*PL_StdIO->pOpen)(PL_StdIO, (x),(y)) -#define PerlSIO_fclose(f) \ - (*PL_StdIO->pClose)(PL_StdIO, (f)) -#define PerlSIO_feof(f) \ - (*PL_StdIO->pEof)(PL_StdIO, (f)) -#define PerlSIO_ferror(f) \ - (*PL_StdIO->pError)(PL_StdIO, (f)) -#define PerlSIO_clearerr(f) \ - (*PL_StdIO->pClearerr)(PL_StdIO, (f)) -#define PerlSIO_fgetc(f) \ - (*PL_StdIO->pGetc)(PL_StdIO, (f)) -#define PerlSIO_get_base(f) \ - (*PL_StdIO->pGetBase)(PL_StdIO, (f)) -#define PerlSIO_get_bufsiz(f) \ - (*PL_StdIO->pGetBufsiz)(PL_StdIO, (f)) -#define PerlSIO_get_cnt(f) \ - (*PL_StdIO->pGetCnt)(PL_StdIO, (f)) -#define PerlSIO_get_ptr(f) \ - (*PL_StdIO->pGetPtr)(PL_StdIO, (f)) -#define PerlSIO_fputc(c,f) \ - (*PL_StdIO->pPutc)(PL_StdIO, (c),(f)) -#define PerlSIO_fputs(s,f) \ - (*PL_StdIO->pPuts)(PL_StdIO, (s),(f)) -#define PerlSIO_fflush(f) \ - (*PL_StdIO->pFlush)(PL_StdIO, (f)) -#define PerlSIO_fgets(s, n, f) \ - (*PL_StdIO->pGets)(PL_StdIO, s, n, (f)) -#define PerlSIO_ungetc(c,f) \ - (*PL_StdIO->pUngetc)(PL_StdIO, (c),(f)) -#define PerlSIO_fileno(f) \ - (*PL_StdIO->pFileno)(PL_StdIO, (f)) -#define PerlSIO_fdopen(f, s) \ - (*PL_StdIO->pFdopen)(PL_StdIO, (f),(s)) -#define PerlSIO_freopen(p, m, f) \ - (*PL_StdIO->pReopen)(PL_StdIO, (p), (m), (f)) -#define PerlSIO_fread(buf,sz,count,f) \ - (*PL_StdIO->pRead)(PL_StdIO, (buf), (sz), (count), (f)) -#define PerlSIO_fwrite(buf,sz,count,f) \ - (*PL_StdIO->pWrite)(PL_StdIO, (buf), (sz), (count), (f)) -#define PerlSIO_setbuf(f,b) \ - (*PL_StdIO->pSetBuf)(PL_StdIO, (f), (b)) -#define PerlSIO_setvbuf(f,b,t,s) \ - (*PL_StdIO->pSetVBuf)(PL_StdIO, (f),(b),(t),(s)) -#define PerlSIO_set_cnt(f,c) \ - (*PL_StdIO->pSetCnt)(PL_StdIO, (f), (c)) -#define PerlSIO_set_ptr(f,p) \ - (*PL_StdIO->pSetPtr)(PL_StdIO, (f), (p)) -#define PerlSIO_setlinebuf(f) \ - (*PL_StdIO->pSetlinebuf)(PL_StdIO, (f)) -#define PerlSIO_printf Perl_fprintf_nocontext -#define PerlSIO_stdoutf Perl_printf_nocontext -#define PerlSIO_vprintf(f,fmt,a) \ - (*PL_StdIO->pVprintf)(PL_StdIO, (f),(fmt),a) -#define PerlSIO_ftell(f) \ - (*PL_StdIO->pTell)(PL_StdIO, (f)) -#define PerlSIO_fseek(f,o,w) \ - (*PL_StdIO->pSeek)(PL_StdIO, (f),(o),(w)) -#define PerlSIO_fgetpos(f,p) \ - (*PL_StdIO->pGetpos)(PL_StdIO, (f),(p)) -#define PerlSIO_fsetpos(f,p) \ - (*PL_StdIO->pSetpos)(PL_StdIO, (f),(p)) -#define PerlSIO_rewind(f) \ - (*PL_StdIO->pRewind)(PL_StdIO, (f)) -#define PerlSIO_tmpfile() \ - (*PL_StdIO->pTmpfile)(PL_StdIO) -#define PerlSIO_init() \ - (*PL_StdIO->pInit)(PL_StdIO) -#undef init_os_extras -#define init_os_extras() \ - (*PL_StdIO->pInitOSExtras)(PL_StdIO) -#define PerlSIO_fdupopen(f) \ - (*PL_StdIO->pFdupopen)(PL_StdIO, (f)) - -#else /* PERL_IMPLICIT_SYS */ - -#define PerlSIO_stdin stdin -#define PerlSIO_stdout stdout -#define PerlSIO_stderr stderr -#define PerlSIO_fopen(x,y) fopen(x,y) -#ifdef __VOS__ -/* Work around VOS bug posix-979, wrongly setting errno when at end of file. */ -#define PerlSIO_fclose(f) (((errno==1025)?errno=0:0),fclose(f)) -#define PerlSIO_feof(f) (((errno==1025)?errno=0:0),feof(f)) -#define PerlSIO_ferror(f) (((errno==1025)?errno=0:0),ferror(f)) -#else -#define PerlSIO_fclose(f) fclose(f) -#define PerlSIO_feof(f) feof(f) -#define PerlSIO_ferror(f) ferror(f) -#endif -#define PerlSIO_clearerr(f) clearerr(f) -#define PerlSIO_fgetc(f) fgetc(f) -#ifdef FILE_base -#define PerlSIO_get_base(f) FILE_base(f) -#define PerlSIO_get_bufsiz(f) FILE_bufsiz(f) -#else -#define PerlSIO_get_base(f) NULL -#define PerlSIO_get_bufsiz(f) 0 -#endif -#ifdef USE_STDIO_PTR -#define PerlSIO_get_cnt(f) FILE_cnt(f) -#define PerlSIO_get_ptr(f) FILE_ptr(f) -#else -#define PerlSIO_get_cnt(f) 0 -#define PerlSIO_get_ptr(f) NULL -#endif -#define PerlSIO_fputc(c,f) fputc(c,f) -#define PerlSIO_fputs(s,f) fputs(s,f) -#define PerlSIO_fflush(f) Fflush(f) -#define PerlSIO_fgets(s, n, f) fgets(s,n,f) -#if defined(__VMS) +# define PerlSIO_stdin \ + (*PL_StdIO->pStdin)(PL_StdIO) +# define PerlSIO_stdout \ + (*PL_StdIO->pStdout)(PL_StdIO) +# define PerlSIO_stderr \ + (*PL_StdIO->pStderr)(PL_StdIO) +# define PerlSIO_fopen(x,y) \ + (*PL_StdIO->pOpen)(PL_StdIO, (x),(y)) +# define PerlSIO_fclose(f) \ + (*PL_StdIO->pClose)(PL_StdIO, (f)) +# define PerlSIO_feof(f) \ + (*PL_StdIO->pEof)(PL_StdIO, (f)) +# define PerlSIO_ferror(f) \ + (*PL_StdIO->pError)(PL_StdIO, (f)) +# define PerlSIO_clearerr(f) \ + (*PL_StdIO->pClearerr)(PL_StdIO, (f)) +# define PerlSIO_fgetc(f) \ + (*PL_StdIO->pGetc)(PL_StdIO, (f)) +# define PerlSIO_get_base(f) \ + (*PL_StdIO->pGetBase)(PL_StdIO, (f)) +# define PerlSIO_get_bufsiz(f) \ + (*PL_StdIO->pGetBufsiz)(PL_StdIO, (f)) +# define PerlSIO_get_cnt(f) \ + (*PL_StdIO->pGetCnt)(PL_StdIO, (f)) +# define PerlSIO_get_ptr(f) \ + (*PL_StdIO->pGetPtr)(PL_StdIO, (f)) +# define PerlSIO_fputc(c,f) \ + (*PL_StdIO->pPutc)(PL_StdIO, (c),(f)) +# define PerlSIO_fputs(s,f) \ + (*PL_StdIO->pPuts)(PL_StdIO, (s),(f)) +# define PerlSIO_fflush(f) \ + (*PL_StdIO->pFlush)(PL_StdIO, (f)) +# define PerlSIO_fgets(s, n, f) \ + (*PL_StdIO->pGets)(PL_StdIO, s, n, (f)) +# define PerlSIO_ungetc(c,f) \ + (*PL_StdIO->pUngetc)(PL_StdIO, (c),(f)) +# define PerlSIO_fileno(f) \ + (*PL_StdIO->pFileno)(PL_StdIO, (f)) +# define PerlSIO_fdopen(f, s) \ + (*PL_StdIO->pFdopen)(PL_StdIO, (f),(s)) +# define PerlSIO_freopen(p, m, f) \ + (*PL_StdIO->pReopen)(PL_StdIO, (p), (m), (f)) +# define PerlSIO_fread(buf,sz,count,f) \ + (*PL_StdIO->pRead)(PL_StdIO, (buf), (sz), (count), (f)) +# define PerlSIO_fwrite(buf,sz,count,f) \ + (*PL_StdIO->pWrite)(PL_StdIO, (buf), (sz), (count), (f)) +# define PerlSIO_setbuf(f,b) \ + (*PL_StdIO->pSetBuf)(PL_StdIO, (f), (b)) +# define PerlSIO_setvbuf(f,b,t,s) \ + (*PL_StdIO->pSetVBuf)(PL_StdIO, (f),(b),(t),(s)) +# define PerlSIO_set_cnt(f,c) \ + (*PL_StdIO->pSetCnt)(PL_StdIO, (f), (c)) +# define PerlSIO_set_ptr(f,p) \ + (*PL_StdIO->pSetPtr)(PL_StdIO, (f), (p)) +# define PerlSIO_setlinebuf(f) \ + (*PL_StdIO->pSetlinebuf)(PL_StdIO, (f)) +# define PerlSIO_printf Perl_fprintf_nocontext +# define PerlSIO_stdoutf Perl_printf_nocontext +# define PerlSIO_vprintf(f,fmt,a) \ + (*PL_StdIO->pVprintf)(PL_StdIO, (f),(fmt),a) +# define PerlSIO_ftell(f) \ + (*PL_StdIO->pTell)(PL_StdIO, (f)) +# define PerlSIO_fseek(f,o,w) \ + (*PL_StdIO->pSeek)(PL_StdIO, (f),(o),(w)) +# define PerlSIO_fgetpos(f,p) \ + (*PL_StdIO->pGetpos)(PL_StdIO, (f),(p)) +# define PerlSIO_fsetpos(f,p) \ + (*PL_StdIO->pSetpos)(PL_StdIO, (f),(p)) +# define PerlSIO_rewind(f) \ + (*PL_StdIO->pRewind)(PL_StdIO, (f)) +# define PerlSIO_tmpfile() \ + (*PL_StdIO->pTmpfile)(PL_StdIO) +# define PerlSIO_init() \ + (*PL_StdIO->pInit)(PL_StdIO) +# undef init_os_extras +# define init_os_extras() \ + (*PL_StdIO->pInitOSExtras)(PL_StdIO) +# define PerlSIO_fdupopen(f) \ + (*PL_StdIO->pFdupopen)(PL_StdIO, (f)) + +#else /* ! PERL_IMPLICIT_SYS */ + +# define PerlSIO_stdin stdin +# define PerlSIO_stdout stdout +# define PerlSIO_stderr stderr +# define PerlSIO_fopen(x,y) fopen(x,y) +# ifdef __VOS__ + /* Work around VOS bug posix-979, wrongly setting errno when at end of file. */ +# define PerlSIO_fclose(f) (((errno==1025)?errno=0:0),fclose(f)) +# define PerlSIO_feof(f) (((errno==1025)?errno=0:0),feof(f)) +# define PerlSIO_ferror(f) (((errno==1025)?errno=0:0),ferror(f)) +# else +# define PerlSIO_fclose(f) fclose(f) +# define PerlSIO_feof(f) feof(f) +# define PerlSIO_ferror(f) ferror(f) +# endif +# define PerlSIO_clearerr(f) clearerr(f) +# define PerlSIO_fgetc(f) fgetc(f) +# ifdef FILE_base +# define PerlSIO_get_base(f) FILE_base(f) +# define PerlSIO_get_bufsiz(f) FILE_bufsiz(f) +# else +# define PerlSIO_get_base(f) NULL +# define PerlSIO_get_bufsiz(f) 0 +# endif +# ifdef USE_STDIO_PTR +# define PerlSIO_get_cnt(f) FILE_cnt(f) +# define PerlSIO_get_ptr(f) FILE_ptr(f) +# else +# define PerlSIO_get_cnt(f) 0 +# define PerlSIO_get_ptr(f) NULL +# endif +# define PerlSIO_fputc(c,f) fputc(c,f) +# define PerlSIO_fputs(s,f) fputs(s,f) +# define PerlSIO_fflush(f) Fflush(f) +# define PerlSIO_fgets(s, n, f) fgets(s,n,f) +# if defined(__VMS) /* Unusual definition of ungetc() here to accommodate fast_sv_gets()' * belief that it can mix getc/ungetc with reads from stdio buffer */ START_EXTERN_C int decc$ungetc(int __c, FILE *__stream); END_EXTERN_C -# define PerlSIO_ungetc(c,f) ((c) == EOF ? EOF : \ - ((*(f) && !((*(f))->_flag & _IONBF) && \ - ((*(f))->_ptr > (*(f))->_base)) ? \ +# define PerlSIO_ungetc(c,f) ((c) == EOF ? EOF : \ + ((*(f) && !((*(f))->_flag & _IONBF) && \ + ((*(f))->_ptr > (*(f))->_base)) ? \ ((*(f))->_cnt++, *(--(*(f))->_ptr) = (c)) : decc$ungetc(c,f))) -#else -# define PerlSIO_ungetc(c,f) ungetc(c,f) -#endif -#define PerlSIO_fileno(f) fileno(f) -#define PerlSIO_fdopen(f, s) fdopen(f,s) -#define PerlSIO_freopen(p, m, f) freopen(p,m,f) -#define PerlSIO_fread(buf,sz,count,f) fread(buf,sz,count,f) -#define PerlSIO_fwrite(buf,sz,count,f) fwrite(buf,sz,count,f) -#define PerlSIO_setbuf(f,b) setbuf(f,b) -#define PerlSIO_setvbuf(f,b,t,s) setvbuf(f,b,t,s) -#if defined(USE_STDIO_PTR) && defined(STDIO_CNT_LVALUE) -#define PerlSIO_set_cnt(f,c) FILE_cnt(f) = (c) -#else -#define PerlSIO_set_cnt(f,c) PerlIOProc_abort() -#endif -#if defined(USE_STDIO_PTR) && defined(STDIO_PTR_LVALUE) -#define PerlSIO_set_ptr(f,p) (FILE_ptr(f) = (p)) -#else -#define PerlSIO_set_ptr(f,p) PerlIOProc_abort() -#endif -#define PerlSIO_setlinebuf(f) setlinebuf(f) -#define PerlSIO_printf fprintf -#define PerlSIO_stdoutf printf -#define PerlSIO_vprintf(f,fmt,a) vfprintf(f,fmt,a) -#define PerlSIO_ftell(f) ftell(f) -#define PerlSIO_fseek(f,o,w) fseek(f,o,w) -#define PerlSIO_fgetpos(f,p) fgetpos(f,p) -#define PerlSIO_fsetpos(f,p) fsetpos(f,p) -#define PerlSIO_rewind(f) rewind(f) -#define PerlSIO_tmpfile() tmpfile() -#define PerlSIO_fdupopen(f) (f) - -#endif /* PERL_IMPLICIT_SYS */ +# else +# define PerlSIO_ungetc(c,f) ungetc(c,f) +# endif +# define PerlSIO_fileno(f) fileno(f) +# define PerlSIO_fdopen(f, s) fdopen(f,s) +# define PerlSIO_freopen(p, m, f) freopen(p,m,f) +# define PerlSIO_fread(buf,sz,count,f) fread(buf,sz,count,f) +# define PerlSIO_fwrite(buf,sz,count,f) fwrite(buf,sz,count,f) +# define PerlSIO_setbuf(f,b) setbuf(f,b) +# define PerlSIO_setvbuf(f,b,t,s) setvbuf(f,b,t,s) +# if defined(USE_STDIO_PTR) && defined(STDIO_CNT_LVALUE) +# define PerlSIO_set_cnt(f,c) FILE_cnt(f) = (c) +# else +# define PerlSIO_set_cnt(f,c) PerlIOProc_abort() +# endif +# if defined(USE_STDIO_PTR) && defined(STDIO_PTR_LVALUE) +# define PerlSIO_set_ptr(f,p) (FILE_ptr(f) = (p)) +# else +# define PerlSIO_set_ptr(f,p) PerlIOProc_abort() +# endif +# define PerlSIO_setlinebuf(f) setlinebuf(f) +# define PerlSIO_printf fprintf +# define PerlSIO_stdoutf printf +# define PerlSIO_vprintf(f,fmt,a) vfprintf(f,fmt,a) +# define PerlSIO_ftell(f) ftell(f) +# define PerlSIO_fseek(f,o,w) fseek(f,o,w) +# define PerlSIO_fgetpos(f,p) fgetpos(f,p) +# define PerlSIO_fsetpos(f,p) fsetpos(f,p) +# define PerlSIO_rewind(f) rewind(f) +# define PerlSIO_tmpfile() tmpfile() +# define PerlSIO_fdupopen(f) (f) + +#endif /* PERL_IMPLICIT_SYS */ /* * Interface for directory functions @@ -367,92 +364,92 @@ END_EXTERN_C #if defined(PERL_IMPLICIT_SYS) -/* IPerlDir */ +/* IPerlDir */ struct IPerlDir; struct IPerlDirInfo; -typedef int (*LPMakedir)(struct IPerlDir*, const char*, int); -typedef int (*LPChdir)(struct IPerlDir*, const char*); -typedef int (*LPRmdir)(struct IPerlDir*, const char*); -typedef int (*LPDirClose)(struct IPerlDir*, DIR*); -typedef DIR* (*LPDirOpen)(struct IPerlDir*, const char*); -typedef struct direct* (*LPDirRead)(struct IPerlDir*, DIR*); -typedef void (*LPDirRewind)(struct IPerlDir*, DIR*); -typedef void (*LPDirSeek)(struct IPerlDir*, DIR*, long); -typedef long (*LPDirTell)(struct IPerlDir*, DIR*); -#ifdef WIN32 -typedef char* (*LPDirMapPathA)(struct IPerlDir*, const char*); -typedef WCHAR* (*LPDirMapPathW)(struct IPerlDir*, const WCHAR*); -#endif +typedef int (*LPMakedir)(struct IPerlDir*, const char*, int); +typedef int (*LPChdir)(struct IPerlDir*, const char*); +typedef int (*LPRmdir)(struct IPerlDir*, const char*); +typedef int (*LPDirClose)(struct IPerlDir*, DIR*); +typedef DIR* (*LPDirOpen)(struct IPerlDir*, const char*); +typedef struct direct* (*LPDirRead)(struct IPerlDir*, DIR*); +typedef void (*LPDirRewind)(struct IPerlDir*, DIR*); +typedef void (*LPDirSeek)(struct IPerlDir*, DIR*, long); +typedef long (*LPDirTell)(struct IPerlDir*, DIR*); +# ifdef WIN32 +typedef char* (*LPDirMapPathA)(struct IPerlDir*, const char*); +typedef WCHAR* (*LPDirMapPathW)(struct IPerlDir*, const WCHAR*); +# endif struct IPerlDir { - LPMakedir pMakedir; - LPChdir pChdir; - LPRmdir pRmdir; - LPDirClose pClose; - LPDirOpen pOpen; - LPDirRead pRead; - LPDirRewind pRewind; - LPDirSeek pSeek; - LPDirTell pTell; -#ifdef WIN32 - LPDirMapPathA pMapPathA; - LPDirMapPathW pMapPathW; -#endif + LPMakedir pMakedir; + LPChdir pChdir; + LPRmdir pRmdir; + LPDirClose pClose; + LPDirOpen pOpen; + LPDirRead pRead; + LPDirRewind pRewind; + LPDirSeek pSeek; + LPDirTell pTell; +# ifdef WIN32 + LPDirMapPathA pMapPathA; + LPDirMapPathW pMapPathW; +# endif }; struct IPerlDirInfo { - unsigned long nCount; /* number of entries expected */ - struct IPerlDir perlDirList; + unsigned long nCount; /* number of entries expected */ + struct IPerlDir perlDirList; }; -#define PerlDir_mkdir(name, mode) \ - (*PL_Dir->pMakedir)(PL_Dir, (name), (mode)) -#define PerlDir_chdir(name) \ - (*PL_Dir->pChdir)(PL_Dir, (name)) -#define PerlDir_rmdir(name) \ - (*PL_Dir->pRmdir)(PL_Dir, (name)) -#define PerlDir_close(dir) \ - (*PL_Dir->pClose)(PL_Dir, (dir)) -#define PerlDir_open(name) \ - (*PL_Dir->pOpen)(PL_Dir, (name)) -#define PerlDir_read(dir) \ - (*PL_Dir->pRead)(PL_Dir, (dir)) -#define PerlDir_rewind(dir) \ - (*PL_Dir->pRewind)(PL_Dir, (dir)) -#define PerlDir_seek(dir, loc) \ - (*PL_Dir->pSeek)(PL_Dir, (dir), (loc)) -#define PerlDir_tell(dir) \ - (*PL_Dir->pTell)(PL_Dir, (dir)) -#ifdef WIN32 -#define PerlDir_mapA(dir) \ - (*PL_Dir->pMapPathA)(PL_Dir, (dir)) -#define PerlDir_mapW(dir) \ - (*PL_Dir->pMapPathW)(PL_Dir, (dir)) -#endif +# define PerlDir_mkdir(name, mode) \ + (*PL_Dir->pMakedir)(PL_Dir, (name), (mode)) +# define PerlDir_chdir(name) \ + (*PL_Dir->pChdir)(PL_Dir, (name)) +# define PerlDir_rmdir(name) \ + (*PL_Dir->pRmdir)(PL_Dir, (name)) +# define PerlDir_close(dir) \ + (*PL_Dir->pClose)(PL_Dir, (dir)) +# define PerlDir_open(name) \ + (*PL_Dir->pOpen)(PL_Dir, (name)) +# define PerlDir_read(dir) \ + (*PL_Dir->pRead)(PL_Dir, (dir)) +# define PerlDir_rewind(dir) \ + (*PL_Dir->pRewind)(PL_Dir, (dir)) +# define PerlDir_seek(dir, loc) \ + (*PL_Dir->pSeek)(PL_Dir, (dir), (loc)) +# define PerlDir_tell(dir) \ + (*PL_Dir->pTell)(PL_Dir, (dir)) +# ifdef WIN32 +# define PerlDir_mapA(dir) \ + (*PL_Dir->pMapPathA)(PL_Dir, (dir)) +# define PerlDir_mapW(dir) \ + (*PL_Dir->pMapPathW)(PL_Dir, (dir)) +# endif -#else /* PERL_IMPLICIT_SYS */ +# else /* ! PERL_IMPLICIT_SYS */ -#define PerlDir_mkdir(name, mode) Mkdir((name), (mode)) -#ifdef VMS -# define PerlDir_chdir(n) Chdir((n)) -#else -# define PerlDir_chdir(name) chdir((name)) -#endif -#define PerlDir_rmdir(name) rmdir((name)) -#define PerlDir_close(dir) closedir((dir)) -#define PerlDir_open(name) opendir((name)) -#define PerlDir_read(dir) readdir((dir)) -#define PerlDir_rewind(dir) rewinddir((dir)) -#define PerlDir_seek(dir, loc) seekdir((dir), (loc)) -#define PerlDir_tell(dir) telldir((dir)) -#ifdef WIN32 -#define PerlDir_mapA(dir) dir -#define PerlDir_mapW(dir) dir -#endif +# define PerlDir_mkdir(name, mode) Mkdir((name), (mode)) +# ifdef VMS +# define PerlDir_chdir(n) Chdir((n)) +# else +# define PerlDir_chdir(name) chdir((name)) +# endif +# define PerlDir_rmdir(name) rmdir((name)) +# define PerlDir_close(dir) closedir((dir)) +# define PerlDir_open(name) opendir((name)) +# define PerlDir_read(dir) readdir((dir)) +# define PerlDir_rewind(dir) rewinddir((dir)) +# define PerlDir_seek(dir, loc) seekdir((dir), (loc)) +# define PerlDir_tell(dir) telldir((dir)) +# ifdef WIN32 +# define PerlDir_mapA(dir) dir +# define PerlDir_mapW(dir) dir +# endif -#endif /* PERL_IMPLICIT_SYS */ +#endif /* PERL_IMPLICIT_SYS */ /* Interface for perl environment functions @@ -460,151 +457,151 @@ struct IPerlDirInfo #if defined(PERL_IMPLICIT_SYS) -/* IPerlEnv */ +/* IPerlEnv */ struct IPerlEnv; struct IPerlEnvInfo; -typedef char* (*LPEnvGetenv)(struct IPerlEnv*, const char*); -typedef int (*LPEnvPutenv)(struct IPerlEnv*, const char*); -typedef char* (*LPEnvGetenv_len)(struct IPerlEnv*, - const char *varname, unsigned long *len); -typedef int (*LPEnvUname)(struct IPerlEnv*, struct utsname *name); -typedef void (*LPEnvClearenv)(struct IPerlEnv*); -typedef void* (*LPEnvGetChildenv)(struct IPerlEnv*); -typedef void (*LPEnvFreeChildenv)(struct IPerlEnv*, void* env); -typedef char* (*LPEnvGetChilddir)(struct IPerlEnv*); -typedef void (*LPEnvFreeChilddir)(struct IPerlEnv*, char* dir); -#ifdef HAS_ENVGETENV -typedef char* (*LPENVGetenv)(struct IPerlEnv*, const char *varname); -typedef char* (*LPENVGetenv_len)(struct IPerlEnv*, - const char *varname, unsigned long *len); -#endif -#ifdef WIN32 -typedef unsigned long (*LPEnvOsID)(struct IPerlEnv*); -typedef char* (*LPEnvLibPath)(struct IPerlEnv*, WIN32_NO_REGISTRY_M_(const char*) - STRLEN *const len); -typedef char* (*LPEnvSiteLibPath)(struct IPerlEnv*, const char*, - STRLEN *const len); -typedef char* (*LPEnvVendorLibPath)(struct IPerlEnv*, const char*, - STRLEN *const len); -typedef void (*LPEnvGetChildIO)(struct IPerlEnv*, child_IO_table*); -#endif +typedef char* (*LPEnvGetenv)(struct IPerlEnv*, const char*); +typedef int (*LPEnvPutenv)(struct IPerlEnv*, const char*); +typedef char* (*LPEnvGetenv_len)(struct IPerlEnv*, + const char *varname, unsigned long *len); +typedef int (*LPEnvUname)(struct IPerlEnv*, struct utsname *name); +typedef void (*LPEnvClearenv)(struct IPerlEnv*); +typedef void* (*LPEnvGetChildenv)(struct IPerlEnv*); +typedef void (*LPEnvFreeChildenv)(struct IPerlEnv*, void* env); +typedef char* (*LPEnvGetChilddir)(struct IPerlEnv*); +typedef void (*LPEnvFreeChilddir)(struct IPerlEnv*, char* dir); +# ifdef HAS_ENVGETENV +typedef char* (*LPENVGetenv)(struct IPerlEnv*, const char *varname); +typedef char* (*LPENVGetenv_len)(struct IPerlEnv*, + const char *varname, unsigned long *len); +# endif +# ifdef WIN32 +typedef unsigned long (*LPEnvOsID)(struct IPerlEnv*); +typedef char* (*LPEnvLibPath)(struct IPerlEnv*, WIN32_NO_REGISTRY_M_(const char*) + STRLEN *const len); +typedef char* (*LPEnvSiteLibPath)(struct IPerlEnv*, const char*, + STRLEN *const len); +typedef char* (*LPEnvVendorLibPath)(struct IPerlEnv*, const char*, + STRLEN *const len); +typedef void (*LPEnvGetChildIO)(struct IPerlEnv*, child_IO_table*); +# endif struct IPerlEnv { - LPEnvGetenv pGetenv; - LPEnvPutenv pPutenv; - LPEnvGetenv_len pGetenv_len; - LPEnvUname pEnvUname; - LPEnvClearenv pClearenv; - LPEnvGetChildenv pGetChildenv; - LPEnvFreeChildenv pFreeChildenv; - LPEnvGetChilddir pGetChilddir; - LPEnvFreeChilddir pFreeChilddir; -#ifdef HAS_ENVGETENV - LPENVGetenv pENVGetenv; - LPENVGetenv_len pENVGetenv_len; -#endif -#ifdef WIN32 - LPEnvOsID pEnvOsID; - LPEnvLibPath pLibPath; - LPEnvSiteLibPath pSiteLibPath; - LPEnvVendorLibPath pVendorLibPath; - LPEnvGetChildIO pGetChildIO; -#endif + LPEnvGetenv pGetenv; + LPEnvPutenv pPutenv; + LPEnvGetenv_len pGetenv_len; + LPEnvUname pEnvUname; + LPEnvClearenv pClearenv; + LPEnvGetChildenv pGetChildenv; + LPEnvFreeChildenv pFreeChildenv; + LPEnvGetChilddir pGetChilddir; + LPEnvFreeChilddir pFreeChilddir; +# ifdef HAS_ENVGETENV + LPENVGetenv pENVGetenv; + LPENVGetenv_len pENVGetenv_len; +# endif +# ifdef WIN32 + LPEnvOsID pEnvOsID; + LPEnvLibPath pLibPath; + LPEnvSiteLibPath pSiteLibPath; + LPEnvVendorLibPath pVendorLibPath; + LPEnvGetChildIO pGetChildIO; +# endif }; struct IPerlEnvInfo { - unsigned long nCount; /* number of entries expected */ - struct IPerlEnv perlEnvList; + unsigned long nCount; /* number of entries expected */ + struct IPerlEnv perlEnvList; }; -#define PerlEnv_putenv(str) \ - (*PL_Env->pPutenv)(PL_Env,(str)) -#define PerlEnv_getenv(str) \ - (*PL_Env->pGetenv)(PL_Env,(str)) -#define PerlEnv_getenv_len(str,l) \ - (*PL_Env->pGetenv_len)(PL_Env,(str), (l)) -#define PerlEnv_clearenv() \ - (*PL_Env->pClearenv)(PL_Env) -#define PerlEnv_get_childenv() \ - (*PL_Env->pGetChildenv)(PL_Env) -#define PerlEnv_free_childenv(e) \ - (*PL_Env->pFreeChildenv)(PL_Env, (e)) -#define PerlEnv_get_childdir() \ - (*PL_Env->pGetChilddir)(PL_Env) -#define PerlEnv_free_childdir(d) \ - (*PL_Env->pFreeChilddir)(PL_Env, (d)) -#ifdef HAS_ENVGETENV -# define PerlEnv_ENVgetenv(str) \ - (*PL_Env->pENVGetenv)(PL_Env,(str)) -# define PerlEnv_ENVgetenv_len(str,l) \ - (*PL_Env->pENVGetenv_len)(PL_Env,(str), (l)) -#else -# define PerlEnv_ENVgetenv(str) \ - PerlEnv_getenv((str)) -# define PerlEnv_ENVgetenv_len(str,l) \ - PerlEnv_getenv_len((str),(l)) -#endif -#define PerlEnv_uname(name) \ - (*PL_Env->pEnvUname)(PL_Env,(name)) -#ifdef WIN32 -#define PerlEnv_os_id() \ - (*PL_Env->pEnvOsID)(PL_Env) -#define PerlEnv_lib_path(str, lenp) \ - (*PL_Env->pLibPath)(PL_Env,WIN32_NO_REGISTRY_M_(str)(lenp)) -#define PerlEnv_sitelib_path(str, lenp) \ - (*PL_Env->pSiteLibPath)(PL_Env,(str),(lenp)) -#define PerlEnv_vendorlib_path(str, lenp) \ - (*PL_Env->pVendorLibPath)(PL_Env,(str),(lenp)) -#define PerlEnv_get_child_IO(ptr) \ - (*PL_Env->pGetChildIO)(PL_Env, ptr) -#endif +# define PerlEnv_putenv(str) \ + (*PL_Env->pPutenv)(PL_Env,(str)) +# define PerlEnv_getenv(str) \ + (*PL_Env->pGetenv)(PL_Env,(str)) +# define PerlEnv_getenv_len(str,l) \ + (*PL_Env->pGetenv_len)(PL_Env,(str), (l)) +# define PerlEnv_clearenv() \ + (*PL_Env->pClearenv)(PL_Env) +# define PerlEnv_get_childenv() \ + (*PL_Env->pGetChildenv)(PL_Env) +# define PerlEnv_free_childenv(e) \ + (*PL_Env->pFreeChildenv)(PL_Env, (e)) +# define PerlEnv_get_childdir() \ + (*PL_Env->pGetChilddir)(PL_Env) +# define PerlEnv_free_childdir(d) \ + (*PL_Env->pFreeChilddir)(PL_Env, (d)) +# ifdef HAS_ENVGETENV +# define PerlEnv_ENVgetenv(str) \ + (*PL_Env->pENVGetenv)(PL_Env,(str)) +# define PerlEnv_ENVgetenv_len(str,l) \ + (*PL_Env->pENVGetenv_len)(PL_Env,(str), (l)) +# else +# define PerlEnv_ENVgetenv(str) \ + PerlEnv_getenv((str)) +# define PerlEnv_ENVgetenv_len(str,l) \ + PerlEnv_getenv_len((str),(l)) +# endif +# define PerlEnv_uname(name) \ + (*PL_Env->pEnvUname)(PL_Env,(name)) +# ifdef WIN32 +# define PerlEnv_os_id() \ + (*PL_Env->pEnvOsID)(PL_Env) +# define PerlEnv_lib_path(str, lenp) \ + (*PL_Env->pLibPath)(PL_Env,WIN32_NO_REGISTRY_M_(str)(lenp)) +# define PerlEnv_sitelib_path(str, lenp) \ + (*PL_Env->pSiteLibPath)(PL_Env,(str),(lenp)) +# define PerlEnv_vendorlib_path(str, lenp) \ + (*PL_Env->pVendorLibPath)(PL_Env,(str),(lenp)) +# define PerlEnv_get_child_IO(ptr) \ + (*PL_Env->pGetChildIO)(PL_Env, ptr) +# endif -#else /* below is ! PERL_IMPLICIT_SYS */ +#else /* below is ! PERL_IMPLICIT_SYS */ # ifdef USE_ITHREADS /* Use the comma operator to return 0/non-zero, while avoiding putting * this in an inline function */ -# define PerlEnv_putenv(str) (ENV_LOCK, (putenv(str) \ - ? (ENV_UNLOCK, 1) \ +# define PerlEnv_putenv(str) (ENV_LOCK, (putenv(str) \ + ? (ENV_UNLOCK, 1) \ : (ENV_UNLOCK, 0))) # else -# define PerlEnv_putenv(str) putenv(str) +# define PerlEnv_putenv(str) putenv(str) # endif -#define PerlEnv_getenv(str) mortal_getenv(str) -#define PerlEnv_getenv_len(str,l) getenv_len((str), (l)) -#ifdef HAS_ENVGETENV -# define PerlEnv_ENVgetenv(str) ENVgetenv((str)) -# define PerlEnv_ENVgetenv_len(str,l) ENVgetenv_len((str), (l)) -#else -# define PerlEnv_ENVgetenv(str) PerlEnv_getenv((str)) -# define PerlEnv_ENVgetenv_len(str,l) PerlEnv_getenv_len((str), (l)) -#endif -#define PerlEnv_uname(name) uname((name)) - -#ifdef WIN32 -#define PerlEnv_os_id() win32_os_id() -#define PerlEnv_lib_path(str, lenp) win32_get_privlib(WIN32_NO_REGISTRY_M_(str) lenp) -#define PerlEnv_sitelib_path(str, lenp) win32_get_sitelib(str, lenp) -#define PerlEnv_vendorlib_path(str, lenp) win32_get_vendorlib(str, lenp) -#define PerlEnv_get_child_IO(ptr) win32_get_child_IO(ptr) -#define PerlEnv_clearenv() win32_clearenv() -#define PerlEnv_get_childenv() win32_get_childenv() -#define PerlEnv_free_childenv(e) win32_free_childenv((e)) -#define PerlEnv_get_childdir() win32_get_childdir() -#define PerlEnv_free_childdir(d) win32_free_childdir((d)) -#else -#define PerlEnv_clearenv(str) (ENV_LOCK, (clearenv(str) \ +# define PerlEnv_getenv(str) mortal_getenv(str) +# define PerlEnv_getenv_len(str,l) getenv_len((str), (l)) +# ifdef HAS_ENVGETENV +# define PerlEnv_ENVgetenv(str) ENVgetenv((str)) +# define PerlEnv_ENVgetenv_len(str,l) ENVgetenv_len((str), (l)) +# else +# define PerlEnv_ENVgetenv(str) PerlEnv_getenv((str)) +# define PerlEnv_ENVgetenv_len(str,l) PerlEnv_getenv_len((str), (l)) +# endif +# define PerlEnv_uname(name) uname((name)) + +# ifdef WIN32 +# define PerlEnv_os_id() win32_os_id() +# define PerlEnv_lib_path(str, lenp) win32_get_privlib(WIN32_NO_REGISTRY_M_(str) lenp) +# define PerlEnv_sitelib_path(str, lenp) win32_get_sitelib(str, lenp) +# define PerlEnv_vendorlib_path(str, lenp) win32_get_vendorlib(str, lenp) +# define PerlEnv_get_child_IO(ptr) win32_get_child_IO(ptr) +# define PerlEnv_clearenv() win32_clearenv() +# define PerlEnv_get_childenv() win32_get_childenv() +# define PerlEnv_free_childenv(e) win32_free_childenv((e)) +# define PerlEnv_get_childdir() win32_get_childdir() +# define PerlEnv_free_childdir(d) win32_free_childdir((d)) +# else +# define PerlEnv_clearenv(str) (ENV_LOCK, (clearenv(str) \ ? (ENV_UNLOCK, 1) \ : (ENV_UNLOCK, 0))) -#define PerlEnv_get_childenv() get_childenv() -#define PerlEnv_free_childenv(e) free_childenv((e)) -#define PerlEnv_get_childdir() get_childdir() -#define PerlEnv_free_childdir(d) free_childdir((d)) -#endif +# define PerlEnv_get_childenv() get_childenv() +# define PerlEnv_free_childenv(e) free_childenv((e)) +# define PerlEnv_get_childdir() get_childdir() +# define PerlEnv_free_childdir(d) free_childdir((d)) +# endif -#endif /* PERL_IMPLICIT_SYS */ +#endif /* PERL_IMPLICIT_SYS */ /* Interface for perl low-level IO functions @@ -614,176 +611,197 @@ struct IPerlEnvInfo struct utimbuf; /* prevent gcc warning about the use below */ -/* IPerlLIO */ +/* IPerlLIO */ struct IPerlLIO; struct IPerlLIOInfo; -typedef int (*LPLIOAccess)(struct IPerlLIO*, const char*, int); -typedef int (*LPLIOChmod)(struct IPerlLIO*, const char*, int); -typedef int (*LPLIOChown)(struct IPerlLIO*, const char*, uid_t, - gid_t); -typedef int (*LPLIOChsize)(struct IPerlLIO*, int, Off_t); -typedef int (*LPLIOClose)(struct IPerlLIO*, int); -typedef int (*LPLIODup)(struct IPerlLIO*, int); -typedef int (*LPLIODup2)(struct IPerlLIO*, int, int); -typedef int (*LPLIOFlock)(struct IPerlLIO*, int, int); -typedef int (*LPLIOFileStat)(struct IPerlLIO*, int, Stat_t*); -typedef int (*LPLIOIOCtl)(struct IPerlLIO*, int, unsigned int, - char*); -typedef int (*LPLIOIsatty)(struct IPerlLIO*, int); -typedef int (*LPLIOLink)(struct IPerlLIO*, const char*, - const char *); -typedef Off_t (*LPLIOLseek)(struct IPerlLIO*, int, Off_t, int); -typedef int (*LPLIOLstat)(struct IPerlLIO*, const char*, - Stat_t*); -typedef char* (*LPLIOMktemp)(struct IPerlLIO*, char*); -typedef int (*LPLIOOpen)(struct IPerlLIO*, const char*, int); -typedef int (*LPLIOOpen3)(struct IPerlLIO*, const char*, int, int); -typedef int (*LPLIORead)(struct IPerlLIO*, int, void*, unsigned int); -typedef int (*LPLIORename)(struct IPerlLIO*, const char*, - const char*); -#ifdef NETWARE -typedef int (*LPLIOSetmode)(struct IPerlLIO*, FILE*, int); -#else -typedef int (*LPLIOSetmode)(struct IPerlLIO*, int, int); -#endif /* NETWARE */ -typedef int (*LPLIONameStat)(struct IPerlLIO*, const char*, - Stat_t*); -typedef char* (*LPLIOTmpnam)(struct IPerlLIO*, char*); -typedef int (*LPLIOUmask)(struct IPerlLIO*, int); -typedef int (*LPLIOUnlink)(struct IPerlLIO*, const char*); -typedef int (*LPLIOUtime)(struct IPerlLIO*, const char*, struct utimbuf*); -typedef int (*LPLIOWrite)(struct IPerlLIO*, int, const void*, - unsigned int); +typedef int (*LPLIOAccess)(struct IPerlLIO*, const char*, int); +typedef int (*LPLIOChmod)(struct IPerlLIO*, const char*, int); +typedef int (*LPLIOChown)(struct IPerlLIO*, const char*, uid_t, + gid_t); +typedef int (*LPLIOChsize)(struct IPerlLIO*, int, Off_t); +typedef int (*LPLIOClose)(struct IPerlLIO*, int); +typedef int (*LPLIODup)(struct IPerlLIO*, int); +typedef int (*LPLIODup2)(struct IPerlLIO*, int, int); +typedef int (*LPLIOFlock)(struct IPerlLIO*, int, int); +typedef int (*LPLIOFileStat)(struct IPerlLIO*, int, Stat_t*); +typedef int (*LPLIOIOCtl)(struct IPerlLIO*, int, unsigned int, + char*); +typedef int (*LPLIOIsatty)(struct IPerlLIO*, int); +typedef int (*LPLIOLink)(struct IPerlLIO*, const char*, + const char *); +typedef Off_t (*LPLIOLseek)(struct IPerlLIO*, int, Off_t, int); +typedef int (*LPLIOLstat)(struct IPerlLIO*, const char*, + Stat_t*); +typedef char* (*LPLIOMktemp)(struct IPerlLIO*, char*); +typedef int (*LPLIOOpen)(struct IPerlLIO*, const char*, int); +typedef int (*LPLIOOpen3)(struct IPerlLIO*, const char*, int, int); +typedef int (*LPLIORead)(struct IPerlLIO*, int, void*, unsigned int); +typedef int (*LPLIORename)(struct IPerlLIO*, const char*, + const char*); +typedef int (*LPLIOSetmode)(struct IPerlLIO*, int, int); +typedef int (*LPLIONameStat)(struct IPerlLIO*, const char*, + Stat_t*); +typedef char* (*LPLIOTmpnam)(struct IPerlLIO*, char*); +typedef int (*LPLIOUmask)(struct IPerlLIO*, int); +typedef int (*LPLIOUnlink)(struct IPerlLIO*, const char*); +typedef int (*LPLIOUtime)(struct IPerlLIO*, const char*, struct utimbuf*); +typedef int (*LPLIOWrite)(struct IPerlLIO*, int, const void*, + unsigned int); +typedef int (*LPLIOSymLink)(struct IPerlLIO*, const char*, + const char *); +typedef int (*LPLIOReadLink)(struct IPerlLIO*, const char*, + char *, size_t); struct IPerlLIO { - LPLIOAccess pAccess; - LPLIOChmod pChmod; - LPLIOChown pChown; - LPLIOChsize pChsize; - LPLIOClose pClose; - LPLIODup pDup; - LPLIODup2 pDup2; - LPLIOFlock pFlock; - LPLIOFileStat pFileStat; - LPLIOIOCtl pIOCtl; - LPLIOIsatty pIsatty; - LPLIOLink pLink; - LPLIOLseek pLseek; - LPLIOLstat pLstat; - LPLIOMktemp pMktemp; - LPLIOOpen pOpen; - LPLIOOpen3 pOpen3; - LPLIORead pRead; - LPLIORename pRename; - LPLIOSetmode pSetmode; - LPLIONameStat pNameStat; - LPLIOTmpnam pTmpnam; - LPLIOUmask pUmask; - LPLIOUnlink pUnlink; - LPLIOUtime pUtime; - LPLIOWrite pWrite; + LPLIOAccess pAccess; + LPLIOChmod pChmod; + LPLIOChown pChown; + LPLIOChsize pChsize; + LPLIOClose pClose; + LPLIODup pDup; + LPLIODup2 pDup2; + LPLIOFlock pFlock; + LPLIOFileStat pFileStat; + LPLIOIOCtl pIOCtl; + LPLIOIsatty pIsatty; + LPLIOLink pLink; + LPLIOLseek pLseek; + LPLIOLstat pLstat; + LPLIOMktemp pMktemp; + LPLIOOpen pOpen; + LPLIOOpen3 pOpen3; + LPLIORead pRead; + LPLIORename pRename; + LPLIOSetmode pSetmode; + LPLIONameStat pNameStat; + LPLIOTmpnam pTmpnam; + LPLIOUmask pUmask; + LPLIOUnlink pUnlink; + LPLIOUtime pUtime; + LPLIOWrite pWrite; + LPLIOSymLink pSymLink; + LPLIOReadLink pReadLink; }; struct IPerlLIOInfo { - unsigned long nCount; /* number of entries expected */ - struct IPerlLIO perlLIOList; + unsigned long nCount; /* number of entries expected */ + struct IPerlLIO perlLIOList; }; -#define PerlLIO_access(file, mode) \ - (*PL_LIO->pAccess)(PL_LIO, (file), (mode)) -#define PerlLIO_chmod(file, mode) \ - (*PL_LIO->pChmod)(PL_LIO, (file), (mode)) -#define PerlLIO_chown(file, owner, group) \ - (*PL_LIO->pChown)(PL_LIO, (file), (owner), (group)) -#define PerlLIO_chsize(fd, size) \ - (*PL_LIO->pChsize)(PL_LIO, (fd), (size)) -#define PerlLIO_close(fd) \ - (*PL_LIO->pClose)(PL_LIO, (fd)) -#define PerlLIO_dup(fd) \ - (*PL_LIO->pDup)(PL_LIO, (fd)) -#define PerlLIO_dup2(fd1, fd2) \ - (*PL_LIO->pDup2)(PL_LIO, (fd1), (fd2)) -#define PerlLIO_flock(fd, op) \ - (*PL_LIO->pFlock)(PL_LIO, (fd), (op)) -#define PerlLIO_fstat(fd, buf) \ - (*PL_LIO->pFileStat)(PL_LIO, (fd), (buf)) -#define PerlLIO_ioctl(fd, u, buf) \ - (*PL_LIO->pIOCtl)(PL_LIO, (fd), (u), (buf)) -#define PerlLIO_isatty(fd) \ - (*PL_LIO->pIsatty)(PL_LIO, (fd)) -#define PerlLIO_link(oldname, newname) \ - (*PL_LIO->pLink)(PL_LIO, (oldname), (newname)) -#define PerlLIO_lseek(fd, offset, mode) \ - (*PL_LIO->pLseek)(PL_LIO, (fd), (offset), (mode)) -#define PerlLIO_lstat(name, buf) \ - (*PL_LIO->pLstat)(PL_LIO, (name), (buf)) -#define PerlLIO_mktemp(file) \ - (*PL_LIO->pMktemp)(PL_LIO, (file)) -#define PerlLIO_open(file, flag) \ - (*PL_LIO->pOpen)(PL_LIO, (file), (flag)) -#define PerlLIO_open3(file, flag, perm) \ - (*PL_LIO->pOpen3)(PL_LIO, (file), (flag), (perm)) -#define PerlLIO_read(fd, buf, count) \ - (*PL_LIO->pRead)(PL_LIO, (fd), (buf), (count)) -#define PerlLIO_rename(oname, newname) \ - (*PL_LIO->pRename)(PL_LIO, (oname), (newname)) -#define PerlLIO_setmode(fd, mode) \ - (*PL_LIO->pSetmode)(PL_LIO, (fd), (mode)) -#define PerlLIO_stat(name, buf) \ - (*PL_LIO->pNameStat)(PL_LIO, (name), (buf)) -#define PerlLIO_tmpnam(str) \ - (*PL_LIO->pTmpnam)(PL_LIO, (str)) -#define PerlLIO_umask(mode) \ - (*PL_LIO->pUmask)(PL_LIO, (mode)) -#define PerlLIO_unlink(file) \ - (*PL_LIO->pUnlink)(PL_LIO, (file)) -#define PerlLIO_utime(file, time) \ - (*PL_LIO->pUtime)(PL_LIO, (file), (time)) -#define PerlLIO_write(fd, buf, count) \ - (*PL_LIO->pWrite)(PL_LIO, (fd), (buf), (count)) - -#else /* PERL_IMPLICIT_SYS */ - -#define PerlLIO_access(file, mode) access((file), (mode)) -#define PerlLIO_chmod(file, mode) chmod((file), (mode)) -#define PerlLIO_chown(file, owner, grp) chown((file), (owner), (grp)) -#if defined(HAS_TRUNCATE) -# define PerlLIO_chsize(fd, size) ftruncate((fd), (size)) -#elif defined(HAS_CHSIZE) -# define PerlLIO_chsize(fd, size) chsize((fd), (size)) -#else -# define PerlLIO_chsize(fd, size) my_chsize((fd), (size)) -#endif -#define PerlLIO_close(fd) close((fd)) -#define PerlLIO_dup(fd) dup((fd)) -#define PerlLIO_dup2(fd1, fd2) dup2((fd1), (fd2)) -#define PerlLIO_flock(fd, op) FLOCK((fd), (op)) -#define PerlLIO_fstat(fd, buf) Fstat((fd), (buf)) -#define PerlLIO_ioctl(fd, u, buf) ioctl((fd), (u), (buf)) -#define PerlLIO_isatty(fd) isatty((fd)) -#define PerlLIO_link(oldname, newname) link((oldname), (newname)) -#define PerlLIO_lseek(fd, offset, mode) lseek((fd), (offset), (mode)) -#define PerlLIO_stat(name, buf) Stat((name), (buf)) -#ifdef HAS_LSTAT -# define PerlLIO_lstat(name, buf) lstat((name), (buf)) -#else -# define PerlLIO_lstat(name, buf) PerlLIO_stat((name), (buf)) -#endif -#define PerlLIO_mktemp(file) mktemp((file)) -#define PerlLIO_open(file, flag) open((file), (flag)) -#define PerlLIO_open3(file, flag, perm) open((file), (flag), (perm)) -#define PerlLIO_read(fd, buf, count) read((fd), (buf), (count)) -#define PerlLIO_rename(old, new) rename((old), (new)) -#define PerlLIO_setmode(fd, mode) setmode((fd), (mode)) -#define PerlLIO_tmpnam(str) tmpnam((str)) -#define PerlLIO_umask(mode) umask((mode)) -#define PerlLIO_unlink(file) unlink((file)) -#define PerlLIO_utime(file, time) utime((file), (time)) -#define PerlLIO_write(fd, buf, count) write((fd), (buf), (count)) - -#endif /* PERL_IMPLICIT_SYS */ +# define PerlLIO_access(file, mode) \ + (*PL_LIO->pAccess)(PL_LIO, (file), (mode)) +# define PerlLIO_chmod(file, mode) \ + (*PL_LIO->pChmod)(PL_LIO, (file), (mode)) +# define PerlLIO_chown(file, owner, group) \ + (*PL_LIO->pChown)(PL_LIO, (file), (owner), (group)) +# define PerlLIO_chsize(fd, size) \ + (*PL_LIO->pChsize)(PL_LIO, (fd), (size)) +# define PerlLIO_close(fd) \ + (*PL_LIO->pClose)(PL_LIO, (fd)) +# define PerlLIO_dup(fd) \ + (*PL_LIO->pDup)(PL_LIO, (fd)) +# define PerlLIO_dup2(fd1, fd2) \ + (*PL_LIO->pDup2)(PL_LIO, (fd1), (fd2)) +# define PerlLIO_flock(fd, op) \ + (*PL_LIO->pFlock)(PL_LIO, (fd), (op)) +# define PerlLIO_fstat(fd, buf) \ + (*PL_LIO->pFileStat)(PL_LIO, (fd), (buf)) +# define PerlLIO_ioctl(fd, u, buf) \ + (*PL_LIO->pIOCtl)(PL_LIO, (fd), (u), (buf)) +# define PerlLIO_isatty(fd) \ + (*PL_LIO->pIsatty)(PL_LIO, (fd)) +# define PerlLIO_link(oldname, newname) \ + (*PL_LIO->pLink)(PL_LIO, (oldname), (newname)) +# define PerlLIO_symlink(oldname, newname) \ + (*PL_LIO->pSymLink)(PL_LIO, (oldname), (newname)) +# define PerlLIO_readlink(path, buf, bufsiz) \ + (*PL_LIO->pReadLink)(PL_LIO, (path), (buf), (bufsiz)) +# define PerlLIO_lseek(fd, offset, mode) \ + (*PL_LIO->pLseek)(PL_LIO, (fd), (offset), (mode)) +# define PerlLIO_lstat(name, buf) \ + (*PL_LIO->pLstat)(PL_LIO, (name), (buf)) +# define PerlLIO_mktemp(file) \ + (*PL_LIO->pMktemp)(PL_LIO, (file)) +# define PerlLIO_open(file, flag) \ + (*PL_LIO->pOpen)(PL_LIO, (file), (flag)) +# define PerlLIO_open3(file, flag, perm) \ + (*PL_LIO->pOpen3)(PL_LIO, (file), (flag), (perm)) +# define PerlLIO_read(fd, buf, count) \ + (*PL_LIO->pRead)(PL_LIO, (fd), (buf), (count)) +# define PerlLIO_rename(oname, newname) \ + (*PL_LIO->pRename)(PL_LIO, (oname), (newname)) +# define PerlLIO_setmode(fd, mode) \ + (*PL_LIO->pSetmode)(PL_LIO, (fd), (mode)) +# define PerlLIO_stat(name, buf) \ + (*PL_LIO->pNameStat)(PL_LIO, (name), (buf)) +# define PerlLIO_tmpnam(str) \ + (*PL_LIO->pTmpnam)(PL_LIO, (str)) +# define PerlLIO_umask(mode) \ + (*PL_LIO->pUmask)(PL_LIO, (mode)) +# define PerlLIO_unlink(file) \ + (*PL_LIO->pUnlink)(PL_LIO, (file)) +# define PerlLIO_utime(file, time) \ + (*PL_LIO->pUtime)(PL_LIO, (file), (time)) +# define PerlLIO_write(fd, buf, count) \ + (*PL_LIO->pWrite)(PL_LIO, (fd), (buf), (count)) + +#else /* ! PERL_IMPLICIT_SYS */ + +# define PerlLIO_access(file, mode) access((file), (mode)) +# define PerlLIO_chmod(file, mode) chmod((file), (mode)) +# define PerlLIO_chown(file, owner, grp) chown((file), (owner), (grp)) +# if defined(HAS_TRUNCATE) +# define PerlLIO_chsize(fd, size) ftruncate((fd), (size)) +# elif defined(HAS_CHSIZE) +# define PerlLIO_chsize(fd, size) chsize((fd), (size)) +# else +# define PerlLIO_chsize(fd, size) my_chsize((fd), (size)) +# endif +# define PerlLIO_close(fd) close((fd)) +# define PerlLIO_dup(fd) dup((fd)) +# define PerlLIO_dup2(fd1, fd2) dup2((fd1), (fd2)) +# define PerlLIO_flock(fd, op) FLOCK((fd), (op)) +# define PerlLIO_fstat(fd, buf) Fstat((fd), (buf)) +# define PerlLIO_ioctl(fd, u, buf) ioctl((fd), (u), (buf)) +# define PerlLIO_isatty(fd) isatty((fd)) +# define PerlLIO_link(oldname, newname) link((oldname), (newname)) +# define PerlLIO_symlink(oldname, newname) symlink((oldname), (newname)) +# define PerlLIO_readlink(path, buf, bufsiz) readlink((path), (buf), (bufsiz)) +# define PerlLIO_lseek(fd, offset, mode) lseek((fd), (offset), (mode)) +# define PerlLIO_stat(name, buf) Stat((name), (buf)) +# ifdef HAS_LSTAT +# define PerlLIO_lstat(name, buf) lstat((name), (buf)) +# else +# define PerlLIO_lstat(name, buf) PerlLIO_stat((name), (buf)) +# endif +# define PerlLIO_mktemp(file) mktemp((file)) +# if defined(OEMVS) +# if (__CHARSET_LIB == 1) + int asciiopen(const char* path, int oflag); + int asciiopen3(const char* path, int oflag, int perm); + +# define PerlLIO_open(file, flag) asciiopen((file), (flag)) +# define PerlLIO_open3(file, flag, perm) asciiopen3((file), (flag), (perm)) +# else +# define PerlLIO_open(file, flag) open((file), (flag)) +# define PerlLIO_open3(file, flag, perm) open((file), (flag), (perm)) +# endif +# else +# define PerlLIO_open(file, flag) open((file), (flag)) +# define PerlLIO_open3(file, flag, perm) open((file), (flag), (perm)) +# endif +# define PerlLIO_read(fd, buf, count) read((fd), (buf), (count)) +# define PerlLIO_rename(old, new) rename((old), (new)) +# define PerlLIO_setmode(fd, mode) setmode((fd), (mode)) +# define PerlLIO_tmpnam(str) tmpnam((str)) +# define PerlLIO_umask(mode) umask((mode)) +# define PerlLIO_unlink(file) unlink((file)) +# define PerlLIO_utime(file, time) utime((file), (time)) +# define PerlLIO_write(fd, buf, count) write((fd), (buf), (count)) + +#endif /* PERL_IMPLICIT_SYS */ /* Interface for perl memory allocation @@ -791,134 +809,113 @@ struct IPerlLIOInfo #if defined(PERL_IMPLICIT_SYS) -/* IPerlMem */ +/* IPerlMem */ struct IPerlMem; struct IPerlMemInfo; -typedef void* (*LPMemMalloc)(struct IPerlMem*, size_t); -typedef void* (*LPMemRealloc)(struct IPerlMem*, void*, size_t); -typedef void (*LPMemFree)(struct IPerlMem*, void*); -typedef void* (*LPMemCalloc)(struct IPerlMem*, size_t, size_t); -typedef void (*LPMemGetLock)(struct IPerlMem*); -typedef void (*LPMemFreeLock)(struct IPerlMem*); -typedef int (*LPMemIsLocked)(struct IPerlMem*); +typedef void* (*LPMemMalloc)(struct IPerlMem*, size_t); +typedef void* (*LPMemRealloc)(struct IPerlMem*, void*, size_t); +typedef void (*LPMemFree)(struct IPerlMem*, void*); +typedef void* (*LPMemCalloc)(struct IPerlMem*, size_t, size_t); +typedef void (*LPMemGetLock)(struct IPerlMem*); +typedef void (*LPMemFreeLock)(struct IPerlMem*); +typedef int (*LPMemIsLocked)(struct IPerlMem*); struct IPerlMem { - LPMemMalloc pMalloc; - LPMemRealloc pRealloc; - LPMemFree pFree; - LPMemCalloc pCalloc; - LPMemGetLock pGetLock; - LPMemFreeLock pFreeLock; - LPMemIsLocked pIsLocked; + LPMemMalloc pMalloc; + LPMemRealloc pRealloc; + LPMemFree pFree; + LPMemCalloc pCalloc; + LPMemGetLock pGetLock; + LPMemFreeLock pFreeLock; + LPMemIsLocked pIsLocked; }; struct IPerlMemInfo { - unsigned long nCount; /* number of entries expected */ - struct IPerlMem perlMemList; + unsigned long nCount; /* number of entries expected */ + struct IPerlMem perlMemList; }; /* Interpreter specific memory macros */ -#define PerlMem_malloc(size) \ - (*PL_Mem->pMalloc)(PL_Mem, (size)) -#define PerlMem_realloc(buf, size) \ - (*PL_Mem->pRealloc)(PL_Mem, (buf), (size)) -#define PerlMem_free(buf) \ - (*PL_Mem->pFree)(PL_Mem, (buf)) -#define PerlMem_calloc(num, size) \ - (*PL_Mem->pCalloc)(PL_Mem, (num), (size)) -#define PerlMem_get_lock() \ - (*PL_Mem->pGetLock)(PL_Mem) -#define PerlMem_free_lock() \ - (*PL_Mem->pFreeLock)(PL_Mem) -#define PerlMem_is_locked() \ - (*PL_Mem->pIsLocked)(PL_Mem) +# define PerlMem_malloc(size) \ + (*PL_Mem->pMalloc)(PL_Mem, (size)) +# define PerlMem_realloc(buf, size) \ + (*PL_Mem->pRealloc)(PL_Mem, (buf), (size)) +# define PerlMem_free(buf) \ + (*PL_Mem->pFree)(PL_Mem, (buf)) +# define PerlMem_calloc(num, size) \ + (*PL_Mem->pCalloc)(PL_Mem, (num), (size)) +# define PerlMem_get_lock() \ + (*PL_Mem->pGetLock)(PL_Mem) +# define PerlMem_free_lock() \ + (*PL_Mem->pFreeLock)(PL_Mem) +# define PerlMem_is_locked() \ + (*PL_Mem->pIsLocked)(PL_Mem) /* Shared memory macros */ -#ifdef NETWARE - -#define PerlMemShared_malloc(size) \ - (*PL_Mem->pMalloc)(PL_Mem, (size)) -#define PerlMemShared_realloc(buf, size) \ - (*PL_Mem->pRealloc)(PL_Mem, (buf), (size)) -#define PerlMemShared_free(buf) \ - (*PL_Mem->pFree)(PL_Mem, (buf)) -#define PerlMemShared_calloc(num, size) \ - (*PL_Mem->pCalloc)(PL_Mem, (num), (size)) -#define PerlMemShared_get_lock() \ - (*PL_Mem->pGetLock)(PL_Mem) -#define PerlMemShared_free_lock() \ - (*PL_Mem->pFreeLock)(PL_Mem) -#define PerlMemShared_is_locked() \ - (*PL_Mem->pIsLocked)(PL_Mem) - -#else - -#define PerlMemShared_malloc(size) \ - (*PL_MemShared->pMalloc)(PL_MemShared, (size)) -#define PerlMemShared_realloc(buf, size) \ - (*PL_MemShared->pRealloc)(PL_MemShared, (buf), (size)) -#define PerlMemShared_free(buf) \ - (*PL_MemShared->pFree)(PL_MemShared, (buf)) -#define PerlMemShared_calloc(num, size) \ - (*PL_MemShared->pCalloc)(PL_MemShared, (num), (size)) -#define PerlMemShared_get_lock() \ - (*PL_MemShared->pGetLock)(PL_MemShared) -#define PerlMemShared_free_lock() \ - (*PL_MemShared->pFreeLock)(PL_MemShared) -#define PerlMemShared_is_locked() \ - (*PL_MemShared->pIsLocked)(PL_MemShared) - -#endif +# define PerlMemShared_malloc(size) \ + (*PL_MemShared->pMalloc)(PL_MemShared, (size)) +# define PerlMemShared_realloc(buf, size) \ + (*PL_MemShared->pRealloc)(PL_MemShared, (buf), (size)) +# define PerlMemShared_free(buf) \ + (*PL_MemShared->pFree)(PL_MemShared, (buf)) +# define PerlMemShared_calloc(num, size) \ + (*PL_MemShared->pCalloc)(PL_MemShared, (num), (size)) +# define PerlMemShared_get_lock() \ + (*PL_MemShared->pGetLock)(PL_MemShared) +# define PerlMemShared_free_lock() \ + (*PL_MemShared->pFreeLock)(PL_MemShared) +# define PerlMemShared_is_locked() \ + (*PL_MemShared->pIsLocked)(PL_MemShared) /* Parse tree memory macros */ -#define PerlMemParse_malloc(size) \ - (*PL_MemParse->pMalloc)(PL_MemParse, (size)) -#define PerlMemParse_realloc(buf, size) \ - (*PL_MemParse->pRealloc)(PL_MemParse, (buf), (size)) -#define PerlMemParse_free(buf) \ - (*PL_MemParse->pFree)(PL_MemParse, (buf)) -#define PerlMemParse_calloc(num, size) \ - (*PL_MemParse->pCalloc)(PL_MemParse, (num), (size)) -#define PerlMemParse_get_lock() \ - (*PL_MemParse->pGetLock)(PL_MemParse) -#define PerlMemParse_free_lock() \ - (*PL_MemParse->pFreeLock)(PL_MemParse) -#define PerlMemParse_is_locked() \ - (*PL_MemParse->pIsLocked)(PL_MemParse) - - -#else /* PERL_IMPLICIT_SYS */ +# define PerlMemParse_malloc(size) \ + (*PL_MemParse->pMalloc)(PL_MemParse, (size)) +# define PerlMemParse_realloc(buf, size) \ + (*PL_MemParse->pRealloc)(PL_MemParse, (buf), (size)) +# define PerlMemParse_free(buf) \ + (*PL_MemParse->pFree)(PL_MemParse, (buf)) +# define PerlMemParse_calloc(num, size) \ + (*PL_MemParse->pCalloc)(PL_MemParse, (num), (size)) +# define PerlMemParse_get_lock() \ + (*PL_MemParse->pGetLock)(PL_MemParse) +# define PerlMemParse_free_lock() \ + (*PL_MemParse->pFreeLock)(PL_MemParse) +# define PerlMemParse_is_locked() \ + (*PL_MemParse->pIsLocked)(PL_MemParse) + + +#else /* ! PERL_IMPLICIT_SYS */ /* Interpreter specific memory macros */ -#define PerlMem_malloc(size) malloc((size)) -#define PerlMem_realloc(buf, size) realloc((buf), (size)) -#define PerlMem_free(buf) free((buf)) -#define PerlMem_calloc(num, size) calloc((num), (size)) -#define PerlMem_get_lock() -#define PerlMem_free_lock() -#define PerlMem_is_locked() 0 +# define PerlMem_malloc(size) malloc((size)) +# define PerlMem_realloc(buf, size) realloc((buf), (size)) +# define PerlMem_free(buf) free((buf)) +# define PerlMem_calloc(num, size) calloc((num), (size)) +# define PerlMem_get_lock() +# define PerlMem_free_lock() +# define PerlMem_is_locked() 0 /* Shared memory macros */ -#define PerlMemShared_malloc(size) malloc((size)) -#define PerlMemShared_realloc(buf, size) realloc((buf), (size)) -#define PerlMemShared_free(buf) free((buf)) -#define PerlMemShared_calloc(num, size) calloc((num), (size)) -#define PerlMemShared_get_lock() -#define PerlMemShared_free_lock() -#define PerlMemShared_is_locked() 0 +# define PerlMemShared_malloc(size) malloc((size)) +# define PerlMemShared_realloc(buf, size) realloc((buf), (size)) +# define PerlMemShared_free(buf) free((buf)) +# define PerlMemShared_calloc(num, size) calloc((num), (size)) +# define PerlMemShared_get_lock() +# define PerlMemShared_free_lock() +# define PerlMemShared_is_locked() 0 /* Parse tree memory macros */ -#define PerlMemParse_malloc(size) malloc((size)) -#define PerlMemParse_realloc(buf, size) realloc((buf), (size)) -#define PerlMemParse_free(buf) free((buf)) -#define PerlMemParse_calloc(num, size) calloc((num), (size)) -#define PerlMemParse_get_lock() -#define PerlMemParse_free_lock() -#define PerlMemParse_is_locked() 0 +# define PerlMemParse_malloc(size) malloc((size)) +# define PerlMemParse_realloc(buf, size) realloc((buf), (size)) +# define PerlMemParse_free(buf) free((buf)) +# define PerlMemParse_calloc(num, size) calloc((num), (size)) +# define PerlMemParse_get_lock() +# define PerlMemParse_free_lock() +# define PerlMemParse_is_locked() 0 -#endif /* PERL_IMPLICIT_SYS */ +#endif /* PERL_IMPLICIT_SYS */ /* Interface for perl process functions @@ -927,224 +924,224 @@ struct IPerlMemInfo #if defined(PERL_IMPLICIT_SYS) -#ifndef jmp_buf -#include -#endif +# ifndef jmp_buf +# include +# endif -/* IPerlProc */ +/* IPerlProc */ struct IPerlProc; struct IPerlProcInfo; -typedef void (*LPProcAbort)(struct IPerlProc*); -typedef char* (*LPProcCrypt)(struct IPerlProc*, const char*, - const char*); -typedef void (*LPProcExit)(struct IPerlProc*, int) - __attribute__noreturn__; -typedef void (*LPProc_Exit)(struct IPerlProc*, int) - __attribute__noreturn__; -typedef int (*LPProcExecl)(struct IPerlProc*, const char*, - const char*, const char*, const char*, - const char*); -typedef int (*LPProcExecv)(struct IPerlProc*, const char*, - const char*const*); -typedef int (*LPProcExecvp)(struct IPerlProc*, const char*, - const char*const*); -typedef Uid_t (*LPProcGetuid)(struct IPerlProc*); -typedef Uid_t (*LPProcGeteuid)(struct IPerlProc*); -typedef Gid_t (*LPProcGetgid)(struct IPerlProc*); -typedef Gid_t (*LPProcGetegid)(struct IPerlProc*); -typedef char* (*LPProcGetlogin)(struct IPerlProc*); -typedef int (*LPProcKill)(struct IPerlProc*, int, int); -typedef int (*LPProcKillpg)(struct IPerlProc*, int, int); -typedef int (*LPProcPauseProc)(struct IPerlProc*); -typedef PerlIO* (*LPProcPopen)(struct IPerlProc*, const char*, - const char*); -typedef PerlIO* (*LPProcPopenList)(struct IPerlProc*, const char*, - IV narg, SV **args); -typedef int (*LPProcPclose)(struct IPerlProc*, PerlIO*); -typedef int (*LPProcPipe)(struct IPerlProc*, int*); -typedef int (*LPProcSetuid)(struct IPerlProc*, uid_t); -typedef int (*LPProcSetgid)(struct IPerlProc*, gid_t); -typedef int (*LPProcSleep)(struct IPerlProc*, unsigned int); -typedef int (*LPProcTimes)(struct IPerlProc*, struct tms*); -typedef int (*LPProcWait)(struct IPerlProc*, int*); -typedef int (*LPProcWaitpid)(struct IPerlProc*, int, int*, int); -typedef Sighandler_t (*LPProcSignal)(struct IPerlProc*, int, Sighandler_t); -typedef int (*LPProcFork)(struct IPerlProc*); -typedef int (*LPProcGetpid)(struct IPerlProc*); -#ifdef WIN32 -typedef void* (*LPProcDynaLoader)(struct IPerlProc*, const char*); -typedef void (*LPProcGetOSError)(struct IPerlProc*, - SV* sv, DWORD dwErr); -typedef int (*LPProcSpawnvp)(struct IPerlProc*, int, const char*, - const char*const*); -#endif -typedef int (*LPProcLastHost)(struct IPerlProc*); -typedef int (*LPProcGetTimeOfDay)(struct IPerlProc*, - struct timeval*, void*); +typedef void (*LPProcAbort)(struct IPerlProc*); +typedef char* (*LPProcCrypt)(struct IPerlProc*, const char*, + const char*); +typedef void (*LPProcExit)(struct IPerlProc*, int) + __attribute__noreturn__; +typedef void (*LPProc_Exit)(struct IPerlProc*, int) + __attribute__noreturn__; +typedef int (*LPProcExecl)(struct IPerlProc*, const char*, + const char*, const char*, const char*, + const char*); +typedef int (*LPProcExecv)(struct IPerlProc*, const char*, + const char*const*); +typedef int (*LPProcExecvp)(struct IPerlProc*, const char*, + const char*const*); +typedef Uid_t (*LPProcGetuid)(struct IPerlProc*); +typedef Uid_t (*LPProcGeteuid)(struct IPerlProc*); +typedef Gid_t (*LPProcGetgid)(struct IPerlProc*); +typedef Gid_t (*LPProcGetegid)(struct IPerlProc*); +typedef char* (*LPProcGetlogin)(struct IPerlProc*); +typedef int (*LPProcKill)(struct IPerlProc*, int, int); +typedef int (*LPProcKillpg)(struct IPerlProc*, int, int); +typedef int (*LPProcPauseProc)(struct IPerlProc*); +typedef PerlIO* (*LPProcPopen)(struct IPerlProc*, const char*, + const char*); +typedef PerlIO* (*LPProcPopenList)(struct IPerlProc*, const char*, + IV narg, SV **args); +typedef int (*LPProcPclose)(struct IPerlProc*, PerlIO*); +typedef int (*LPProcPipe)(struct IPerlProc*, int*); +typedef int (*LPProcSetuid)(struct IPerlProc*, uid_t); +typedef int (*LPProcSetgid)(struct IPerlProc*, gid_t); +typedef int (*LPProcSleep)(struct IPerlProc*, unsigned int); +typedef int (*LPProcTimes)(struct IPerlProc*, struct tms*); +typedef int (*LPProcWait)(struct IPerlProc*, int*); +typedef int (*LPProcWaitpid)(struct IPerlProc*, int, int*, int); +typedef Sighandler_t (*LPProcSignal)(struct IPerlProc*, int, Sighandler_t); +typedef int (*LPProcFork)(struct IPerlProc*); +typedef int (*LPProcGetpid)(struct IPerlProc*); +# ifdef WIN32 +typedef void* (*LPProcDynaLoader)(struct IPerlProc*, const char*); +typedef void (*LPProcGetOSError)(struct IPerlProc*, + SV* sv, DWORD dwErr); +typedef int (*LPProcSpawnvp)(struct IPerlProc*, int, const char*, + const char*const*); +# endif +typedef int (*LPProcLastHost)(struct IPerlProc*); +typedef int (*LPProcGetTimeOfDay)(struct IPerlProc*, + struct timeval*, void*); struct IPerlProc { - LPProcAbort pAbort; - LPProcCrypt pCrypt; - LPProcExit pExit; - LPProc_Exit p_Exit; - LPProcExecl pExecl; - LPProcExecv pExecv; - LPProcExecvp pExecvp; - LPProcGetuid pGetuid; - LPProcGeteuid pGeteuid; - LPProcGetgid pGetgid; - LPProcGetegid pGetegid; - LPProcGetlogin pGetlogin; - LPProcKill pKill; - LPProcKillpg pKillpg; - LPProcPauseProc pPauseProc; - LPProcPopen pPopen; - LPProcPclose pPclose; - LPProcPipe pPipe; - LPProcSetuid pSetuid; - LPProcSetgid pSetgid; - LPProcSleep pSleep; - LPProcTimes pTimes; - LPProcWait pWait; - LPProcWaitpid pWaitpid; - LPProcSignal pSignal; - LPProcFork pFork; - LPProcGetpid pGetpid; -#ifdef WIN32 - LPProcDynaLoader pDynaLoader; - LPProcGetOSError pGetOSError; - LPProcSpawnvp pSpawnvp; -#endif + LPProcAbort pAbort; + LPProcCrypt pCrypt; + LPProcExit pExit; + LPProc_Exit p_Exit; + LPProcExecl pExecl; + LPProcExecv pExecv; + LPProcExecvp pExecvp; + LPProcGetuid pGetuid; + LPProcGeteuid pGeteuid; + LPProcGetgid pGetgid; + LPProcGetegid pGetegid; + LPProcGetlogin pGetlogin; + LPProcKill pKill; + LPProcKillpg pKillpg; + LPProcPauseProc pPauseProc; + LPProcPopen pPopen; + LPProcPclose pPclose; + LPProcPipe pPipe; + LPProcSetuid pSetuid; + LPProcSetgid pSetgid; + LPProcSleep pSleep; + LPProcTimes pTimes; + LPProcWait pWait; + LPProcWaitpid pWaitpid; + LPProcSignal pSignal; + LPProcFork pFork; + LPProcGetpid pGetpid; +# ifdef WIN32 + LPProcDynaLoader pDynaLoader; + LPProcGetOSError pGetOSError; + LPProcSpawnvp pSpawnvp; +# endif LPProcLastHost pLastHost; - LPProcPopenList pPopenList; - LPProcGetTimeOfDay pGetTimeOfDay; + LPProcPopenList pPopenList; + LPProcGetTimeOfDay pGetTimeOfDay; }; struct IPerlProcInfo { - unsigned long nCount; /* number of entries expected */ - struct IPerlProc perlProcList; + unsigned long nCount; /* number of entries expected */ + struct IPerlProc perlProcList; }; -#define PerlProc_abort() \ - (*PL_Proc->pAbort)(PL_Proc) -#define PerlProc_crypt(c,s) \ - (*PL_Proc->pCrypt)(PL_Proc, (c), (s)) -#define PerlProc_exit(s) \ - (*PL_Proc->pExit)(PL_Proc, (s)) -#define PerlProc__exit(s) \ - (*PL_Proc->p_Exit)(PL_Proc, (s)) -#define PerlProc_execl(c, w, x, y, z) \ - (*PL_Proc->pExecl)(PL_Proc, (c), (w), (x), (y), (z)) -#define PerlProc_execv(c, a) \ - (*PL_Proc->pExecv)(PL_Proc, (c), (a)) -#define PerlProc_execvp(c, a) \ - (*PL_Proc->pExecvp)(PL_Proc, (c), (a)) -#define PerlProc_getuid() \ - (*PL_Proc->pGetuid)(PL_Proc) -#define PerlProc_geteuid() \ - (*PL_Proc->pGeteuid)(PL_Proc) -#define PerlProc_getgid() \ - (*PL_Proc->pGetgid)(PL_Proc) -#define PerlProc_getegid() \ - (*PL_Proc->pGetegid)(PL_Proc) -#define PerlProc_getlogin() \ - (*PL_Proc->pGetlogin)(PL_Proc) -#define PerlProc_kill(i, a) \ - (*PL_Proc->pKill)(PL_Proc, (i), (a)) -#define PerlProc_killpg(i, a) \ - (*PL_Proc->pKillpg)(PL_Proc, (i), (a)) -#define PerlProc_pause() \ - (*PL_Proc->pPauseProc)(PL_Proc) -#define PerlProc_popen(c, m) \ - (*PL_Proc->pPopen)(PL_Proc, (c), (m)) -#define PerlProc_popen_list(m, n, a) \ - (*PL_Proc->pPopenList)(PL_Proc, (m), (n), (a)) -#define PerlProc_pclose(f) \ - (*PL_Proc->pPclose)(PL_Proc, (f)) -#define PerlProc_pipe(fd) \ - (*PL_Proc->pPipe)(PL_Proc, (fd)) -#define PerlProc_setuid(u) \ - (*PL_Proc->pSetuid)(PL_Proc, (u)) -#define PerlProc_setgid(g) \ - (*PL_Proc->pSetgid)(PL_Proc, (g)) -#define PerlProc_sleep(t) \ - (*PL_Proc->pSleep)(PL_Proc, (t)) -#define PerlProc_times(t) \ - (*PL_Proc->pTimes)(PL_Proc, (t)) -#define PerlProc_wait(t) \ - (*PL_Proc->pWait)(PL_Proc, (t)) -#define PerlProc_waitpid(p,s,f) \ - (*PL_Proc->pWaitpid)(PL_Proc, (p), (s), (f)) -#define PerlProc_signal(n, h) \ - (*PL_Proc->pSignal)(PL_Proc, (n), (h)) -#define PerlProc_fork() \ - (*PL_Proc->pFork)(PL_Proc) -#define PerlProc_getpid() \ - (*PL_Proc->pGetpid)(PL_Proc) -#define PerlProc_setjmp(b, n) Sigsetjmp((b), (n)) -#define PerlProc_longjmp(b, n) Siglongjmp((b), (n)) - -#ifdef WIN32 -#define PerlProc_DynaLoad(f) \ - (*PL_Proc->pDynaLoader)(PL_Proc, (f)) -#define PerlProc_GetOSError(s,e) \ - (*PL_Proc->pGetOSError)(PL_Proc, (s), (e)) -#define PerlProc_spawnvp(m, c, a) \ - (*PL_Proc->pSpawnvp)(PL_Proc, (m), (c), (a)) -#endif -#define PerlProc_lasthost() \ - (*PL_Proc->pLastHost)(PL_Proc) -#define PerlProc_gettimeofday(t,z) \ - (*PL_Proc->pGetTimeOfDay)(PL_Proc,(t),(z)) - -#else /* PERL_IMPLICIT_SYS */ - -#define PerlProc_abort() abort() -#define PerlProc_crypt(c,s) crypt((c), (s)) -#define PerlProc_exit(s) exit((s)) -#define PerlProc__exit(s) _exit((s)) -#define PerlProc_execl(c,w,x,y,z) \ - execl((c), (w), (x), (y), (z)) -#define PerlProc_execv(c, a) execv((c), (a)) -#define PerlProc_execvp(c, a) execvp((c), (a)) -#define PerlProc_getuid() getuid() -#define PerlProc_geteuid() geteuid() -#define PerlProc_getgid() getgid() -#define PerlProc_getegid() getegid() -#define PerlProc_getlogin() getlogin() -#define PerlProc_kill(i, a) kill((i), (a)) -#define PerlProc_killpg(i, a) killpg((i), (a)) -#define PerlProc_pause() Pause() -#define PerlProc_popen(c, m) my_popen((c), (m)) -#define PerlProc_popen_list(m,n,a) my_popen_list((m),(n),(a)) -#define PerlProc_pclose(f) my_pclose((f)) -#define PerlProc_pipe(fd) pipe((fd)) -#define PerlProc_setuid(u) setuid((u)) -#define PerlProc_setgid(g) setgid((g)) -#define PerlProc_sleep(t) sleep((t)) -#define PerlProc_times(t) times((t)) -#define PerlProc_wait(t) wait((t)) -#define PerlProc_waitpid(p,s,f) waitpid((p), (s), (f)) -#define PerlProc_setjmp(b, n) Sigsetjmp((b), (n)) -#define PerlProc_longjmp(b, n) Siglongjmp((b), (n)) -#define PerlProc_signal(n, h) signal((n), (h)) -#define PerlProc_fork() my_fork() -#define PerlProc_getpid() getpid() -#define PerlProc_gettimeofday(t,z) gettimeofday((t),(z)) - -#ifdef WIN32 -#define PerlProc_DynaLoad(f) \ - win32_dynaload((f)) -#define PerlProc_GetOSError(s,e) \ - win32_str_os_error((s), (e)) -#define PerlProc_spawnvp(m, c, a) \ - win32_spawnvp((m), (c), (a)) -#undef PerlProc_signal -#define PerlProc_signal(n, h) win32_signal((n), (h)) -#endif -#endif /* PERL_IMPLICIT_SYS */ +# define PerlProc_abort() \ + (*PL_Proc->pAbort)(PL_Proc) +# define PerlProc_crypt(c,s) \ + (*PL_Proc->pCrypt)(PL_Proc, (c), (s)) +# define PerlProc_exit(s) \ + (*PL_Proc->pExit)(PL_Proc, (s)) +# define PerlProc__exit(s) \ + (*PL_Proc->p_Exit)(PL_Proc, (s)) +# define PerlProc_execl(c, w, x, y, z) \ + (*PL_Proc->pExecl)(PL_Proc, (c), (w), (x), (y), (z)) +# define PerlProc_execv(c, a) \ + (*PL_Proc->pExecv)(PL_Proc, (c), (a)) +# define PerlProc_execvp(c, a) \ + (*PL_Proc->pExecvp)(PL_Proc, (c), (a)) +# define PerlProc_getuid() \ + (*PL_Proc->pGetuid)(PL_Proc) +# define PerlProc_geteuid() \ + (*PL_Proc->pGeteuid)(PL_Proc) +# define PerlProc_getgid() \ + (*PL_Proc->pGetgid)(PL_Proc) +# define PerlProc_getegid() \ + (*PL_Proc->pGetegid)(PL_Proc) +# define PerlProc_getlogin() \ + (*PL_Proc->pGetlogin)(PL_Proc) +# define PerlProc_kill(i, a) \ + (*PL_Proc->pKill)(PL_Proc, (i), (a)) +# define PerlProc_killpg(i, a) \ + (*PL_Proc->pKillpg)(PL_Proc, (i), (a)) +# define PerlProc_pause() \ + (*PL_Proc->pPauseProc)(PL_Proc) +# define PerlProc_popen(c, m) \ + (*PL_Proc->pPopen)(PL_Proc, (c), (m)) +# define PerlProc_popen_list(m, n, a) \ + (*PL_Proc->pPopenList)(PL_Proc, (m), (n), (a)) +# define PerlProc_pclose(f) \ + (*PL_Proc->pPclose)(PL_Proc, (f)) +# define PerlProc_pipe(fd) \ + (*PL_Proc->pPipe)(PL_Proc, (fd)) +# define PerlProc_setuid(u) \ + (*PL_Proc->pSetuid)(PL_Proc, (u)) +# define PerlProc_setgid(g) \ + (*PL_Proc->pSetgid)(PL_Proc, (g)) +# define PerlProc_sleep(t) \ + (*PL_Proc->pSleep)(PL_Proc, (t)) +# define PerlProc_times(t) \ + (*PL_Proc->pTimes)(PL_Proc, (t)) +# define PerlProc_wait(t) \ + (*PL_Proc->pWait)(PL_Proc, (t)) +# define PerlProc_waitpid(p,s,f) \ + (*PL_Proc->pWaitpid)(PL_Proc, (p), (s), (f)) +# define PerlProc_signal(n, h) \ + (*PL_Proc->pSignal)(PL_Proc, (n), (h)) +# define PerlProc_fork() \ + (*PL_Proc->pFork)(PL_Proc) +# define PerlProc_getpid() \ + (*PL_Proc->pGetpid)(PL_Proc) +# define PerlProc_setjmp(b, n) Sigsetjmp((b), (n)) +# define PerlProc_longjmp(b, n) Siglongjmp((b), (n)) + +# ifdef WIN32 +# define PerlProc_DynaLoad(f) \ + (*PL_Proc->pDynaLoader)(PL_Proc, (f)) +# define PerlProc_GetOSError(s,e) \ + (*PL_Proc->pGetOSError)(PL_Proc, (s), (e)) +# define PerlProc_spawnvp(m, c, a) \ + (*PL_Proc->pSpawnvp)(PL_Proc, (m), (c), (a)) +# endif +# define PerlProc_lasthost() \ + (*PL_Proc->pLastHost)(PL_Proc) +# define PerlProc_gettimeofday(t,z) \ + (*PL_Proc->pGetTimeOfDay)(PL_Proc,(t),(z)) + +#else /* ! PERL_IMPLICIT_SYS */ + +# define PerlProc_abort() abort() +# define PerlProc_crypt(c,s) crypt((c), (s)) +# define PerlProc_exit(s) exit((s)) +# define PerlProc__exit(s) _exit((s)) +# define PerlProc_execl(c,w,x,y,z) \ + execl((c), (w), (x), (y), (z)) +# define PerlProc_execv(c, a) execv((c), (a)) +# define PerlProc_execvp(c, a) execvp((c), (a)) +# define PerlProc_getuid() getuid() +# define PerlProc_geteuid() geteuid() +# define PerlProc_getgid() getgid() +# define PerlProc_getegid() getegid() +# define PerlProc_getlogin() getlogin() +# define PerlProc_kill(i, a) kill((i), (a)) +# define PerlProc_killpg(i, a) killpg((i), (a)) +# define PerlProc_pause() Pause() +# define PerlProc_popen(c, m) my_popen((c), (m)) +# define PerlProc_popen_list(m,n,a) my_popen_list((m),(n),(a)) +# define PerlProc_pclose(f) my_pclose((f)) +# define PerlProc_pipe(fd) pipe((fd)) +# define PerlProc_setuid(u) setuid((u)) +# define PerlProc_setgid(g) setgid((g)) +# define PerlProc_sleep(t) sleep((t)) +# define PerlProc_times(t) times((t)) +# define PerlProc_wait(t) wait((t)) +# define PerlProc_waitpid(p,s,f) waitpid((p), (s), (f)) +# define PerlProc_setjmp(b, n) Sigsetjmp((b), (n)) +# define PerlProc_longjmp(b, n)Siglongjmp((b), (n)) +# define PerlProc_signal(n, h) signal((n), (h)) +# define PerlProc_fork() my_fork() +# define PerlProc_getpid() getpid() +# define PerlProc_gettimeofday(t,z) gettimeofday((t),(z)) + +# ifdef WIN32 +# define PerlProc_DynaLoad(f) \ + win32_dynaload((f)) +# define PerlProc_GetOSError(s,e) \ + win32_str_os_error((s), (e)) +# define PerlProc_spawnvp(m, c, a) \ + win32_spawnvp((m), (c), (a)) +# undef PerlProc_signal +# define PerlProc_signal(n, h) win32_signal((n), (h)) +# endif +#endif /* PERL_IMPLICIT_SYS */ /* Interface for perl socket functions @@ -1152,280 +1149,280 @@ struct IPerlProcInfo #if defined(PERL_IMPLICIT_SYS) -/* PerlSock */ +/* PerlSock */ struct IPerlSock; struct IPerlSockInfo; -typedef u_long (*LPHtonl)(struct IPerlSock*, u_long); -typedef u_short (*LPHtons)(struct IPerlSock*, u_short); -typedef u_long (*LPNtohl)(struct IPerlSock*, u_long); -typedef u_short (*LPNtohs)(struct IPerlSock*, u_short); -typedef SOCKET (*LPAccept)(struct IPerlSock*, SOCKET, - struct sockaddr*, int*); -typedef int (*LPBind)(struct IPerlSock*, SOCKET, - const struct sockaddr*, int); -typedef int (*LPConnect)(struct IPerlSock*, SOCKET, - const struct sockaddr*, int); -typedef void (*LPEndhostent)(struct IPerlSock*); -typedef void (*LPEndnetent)(struct IPerlSock*); -typedef void (*LPEndprotoent)(struct IPerlSock*); -typedef void (*LPEndservent)(struct IPerlSock*); -typedef int (*LPGethostname)(struct IPerlSock*, char*, int); -typedef int (*LPGetpeername)(struct IPerlSock*, SOCKET, - struct sockaddr*, int*); -typedef struct hostent* (*LPGethostbyaddr)(struct IPerlSock*, const char*, - int, int); -typedef struct hostent* (*LPGethostbyname)(struct IPerlSock*, const char*); -typedef struct hostent* (*LPGethostent)(struct IPerlSock*); -typedef struct netent* (*LPGetnetbyaddr)(struct IPerlSock*, long, int); -typedef struct netent* (*LPGetnetbyname)(struct IPerlSock*, const char*); -typedef struct netent* (*LPGetnetent)(struct IPerlSock*); +typedef u_long (*LPHtonl)(struct IPerlSock*, u_long); +typedef u_short (*LPHtons)(struct IPerlSock*, u_short); +typedef u_long (*LPNtohl)(struct IPerlSock*, u_long); +typedef u_short (*LPNtohs)(struct IPerlSock*, u_short); +typedef SOCKET (*LPAccept)(struct IPerlSock*, SOCKET, + struct sockaddr*, int*); +typedef int (*LPBind)(struct IPerlSock*, SOCKET, + const struct sockaddr*, int); +typedef int (*LPConnect)(struct IPerlSock*, SOCKET, + const struct sockaddr*, int); +typedef void (*LPEndhostent)(struct IPerlSock*); +typedef void (*LPEndnetent)(struct IPerlSock*); +typedef void (*LPEndprotoent)(struct IPerlSock*); +typedef void (*LPEndservent)(struct IPerlSock*); +typedef int (*LPGethostname)(struct IPerlSock*, char*, int); +typedef int (*LPGetpeername)(struct IPerlSock*, SOCKET, + struct sockaddr*, int*); +typedef struct hostent* (*LPGethostbyaddr)(struct IPerlSock*, const char*, + int, int); +typedef struct hostent* (*LPGethostbyname)(struct IPerlSock*, const char*); +typedef struct hostent* (*LPGethostent)(struct IPerlSock*); +typedef struct netent* (*LPGetnetbyaddr)(struct IPerlSock*, long, int); +typedef struct netent* (*LPGetnetbyname)(struct IPerlSock*, const char*); +typedef struct netent* (*LPGetnetent)(struct IPerlSock*); typedef struct protoent*(*LPGetprotobyname)(struct IPerlSock*, const char*); typedef struct protoent*(*LPGetprotobynumber)(struct IPerlSock*, int); typedef struct protoent*(*LPGetprotoent)(struct IPerlSock*); -typedef struct servent* (*LPGetservbyname)(struct IPerlSock*, const char*, - const char*); -typedef struct servent* (*LPGetservbyport)(struct IPerlSock*, int, - const char*); -typedef struct servent* (*LPGetservent)(struct IPerlSock*); -typedef int (*LPGetsockname)(struct IPerlSock*, SOCKET, - struct sockaddr*, int*); -typedef int (*LPGetsockopt)(struct IPerlSock*, SOCKET, int, int, - char*, int*); -typedef unsigned long (*LPInetAddr)(struct IPerlSock*, const char*); -typedef char* (*LPInetNtoa)(struct IPerlSock*, struct in_addr); -typedef int (*LPListen)(struct IPerlSock*, SOCKET, int); -typedef int (*LPRecv)(struct IPerlSock*, SOCKET, char*, int, int); -typedef int (*LPRecvfrom)(struct IPerlSock*, SOCKET, char*, int, - int, struct sockaddr*, int*); -typedef int (*LPSelect)(struct IPerlSock*, int, char*, char*, - char*, const struct timeval*); -typedef int (*LPSend)(struct IPerlSock*, SOCKET, const char*, int, - int); -typedef int (*LPSendto)(struct IPerlSock*, SOCKET, const char*, - int, int, const struct sockaddr*, int); -typedef void (*LPSethostent)(struct IPerlSock*, int); -typedef void (*LPSetnetent)(struct IPerlSock*, int); -typedef void (*LPSetprotoent)(struct IPerlSock*, int); -typedef void (*LPSetservent)(struct IPerlSock*, int); -typedef int (*LPSetsockopt)(struct IPerlSock*, SOCKET, int, int, - const char*, int); -typedef int (*LPShutdown)(struct IPerlSock*, SOCKET, int); -typedef SOCKET (*LPSocket)(struct IPerlSock*, int, int, int); -typedef int (*LPSocketpair)(struct IPerlSock*, int, int, int, - int*); -#ifdef WIN32 -typedef int (*LPClosesocket)(struct IPerlSock*, SOCKET s); -#endif +typedef struct servent* (*LPGetservbyname)(struct IPerlSock*, const char*, + const char*); +typedef struct servent* (*LPGetservbyport)(struct IPerlSock*, int, + const char*); +typedef struct servent* (*LPGetservent)(struct IPerlSock*); +typedef int (*LPGetsockname)(struct IPerlSock*, SOCKET, + struct sockaddr*, int*); +typedef int (*LPGetsockopt)(struct IPerlSock*, SOCKET, int, int, + char*, int*); +typedef unsigned long (*LPInetAddr)(struct IPerlSock*, const char*); +typedef char* (*LPInetNtoa)(struct IPerlSock*, struct in_addr); +typedef int (*LPListen)(struct IPerlSock*, SOCKET, int); +typedef int (*LPRecv)(struct IPerlSock*, SOCKET, char*, int, int); +typedef int (*LPRecvfrom)(struct IPerlSock*, SOCKET, char*, int, + int, struct sockaddr*, int*); +typedef int (*LPSelect)(struct IPerlSock*, int, char*, char*, + char*, const struct timeval*); +typedef int (*LPSend)(struct IPerlSock*, SOCKET, const char*, int, + int); +typedef int (*LPSendto)(struct IPerlSock*, SOCKET, const char*, + int, int, const struct sockaddr*, int); +typedef void (*LPSethostent)(struct IPerlSock*, int); +typedef void (*LPSetnetent)(struct IPerlSock*, int); +typedef void (*LPSetprotoent)(struct IPerlSock*, int); +typedef void (*LPSetservent)(struct IPerlSock*, int); +typedef int (*LPSetsockopt)(struct IPerlSock*, SOCKET, int, int, + const char*, int); +typedef int (*LPShutdown)(struct IPerlSock*, SOCKET, int); +typedef SOCKET (*LPSocket)(struct IPerlSock*, int, int, int); +typedef int (*LPSocketpair)(struct IPerlSock*, int, int, int, + int*); +# ifdef WIN32 +typedef int (*LPClosesocket)(struct IPerlSock*, SOCKET s); +# endif struct IPerlSock { - LPHtonl pHtonl; - LPHtons pHtons; - LPNtohl pNtohl; - LPNtohs pNtohs; - LPAccept pAccept; - LPBind pBind; - LPConnect pConnect; - LPEndhostent pEndhostent; - LPEndnetent pEndnetent; - LPEndprotoent pEndprotoent; - LPEndservent pEndservent; - LPGethostname pGethostname; - LPGetpeername pGetpeername; - LPGethostbyaddr pGethostbyaddr; - LPGethostbyname pGethostbyname; - LPGethostent pGethostent; - LPGetnetbyaddr pGetnetbyaddr; - LPGetnetbyname pGetnetbyname; - LPGetnetent pGetnetent; - LPGetprotobyname pGetprotobyname; - LPGetprotobynumber pGetprotobynumber; - LPGetprotoent pGetprotoent; - LPGetservbyname pGetservbyname; - LPGetservbyport pGetservbyport; - LPGetservent pGetservent; - LPGetsockname pGetsockname; - LPGetsockopt pGetsockopt; - LPInetAddr pInetAddr; - LPInetNtoa pInetNtoa; - LPListen pListen; - LPRecv pRecv; - LPRecvfrom pRecvfrom; - LPSelect pSelect; - LPSend pSend; - LPSendto pSendto; - LPSethostent pSethostent; - LPSetnetent pSetnetent; - LPSetprotoent pSetprotoent; - LPSetservent pSetservent; - LPSetsockopt pSetsockopt; - LPShutdown pShutdown; - LPSocket pSocket; - LPSocketpair pSocketpair; -#ifdef WIN32 - LPClosesocket pClosesocket; -#endif + LPHtonl pHtonl; + LPHtons pHtons; + LPNtohl pNtohl; + LPNtohs pNtohs; + LPAccept pAccept; + LPBind pBind; + LPConnect pConnect; + LPEndhostent pEndhostent; + LPEndnetent pEndnetent; + LPEndprotoent pEndprotoent; + LPEndservent pEndservent; + LPGethostname pGethostname; + LPGetpeername pGetpeername; + LPGethostbyaddr pGethostbyaddr; + LPGethostbyname pGethostbyname; + LPGethostent pGethostent; + LPGetnetbyaddr pGetnetbyaddr; + LPGetnetbyname pGetnetbyname; + LPGetnetent pGetnetent; + LPGetprotobyname pGetprotobyname; + LPGetprotobynumber pGetprotobynumber; + LPGetprotoent pGetprotoent; + LPGetservbyname pGetservbyname; + LPGetservbyport pGetservbyport; + LPGetservent pGetservent; + LPGetsockname pGetsockname; + LPGetsockopt pGetsockopt; + LPInetAddr pInetAddr; + LPInetNtoa pInetNtoa; + LPListen pListen; + LPRecv pRecv; + LPRecvfrom pRecvfrom; + LPSelect pSelect; + LPSend pSend; + LPSendto pSendto; + LPSethostent pSethostent; + LPSetnetent pSetnetent; + LPSetprotoent pSetprotoent; + LPSetservent pSetservent; + LPSetsockopt pSetsockopt; + LPShutdown pShutdown; + LPSocket pSocket; + LPSocketpair pSocketpair; +# ifdef WIN32 + LPClosesocket pClosesocket; +# endif }; struct IPerlSockInfo { - unsigned long nCount; /* number of entries expected */ - struct IPerlSock perlSockList; + unsigned long nCount; /* number of entries expected */ + struct IPerlSock perlSockList; }; -#define PerlSock_htonl(x) \ - (*PL_Sock->pHtonl)(PL_Sock, x) -#define PerlSock_htons(x) \ - (*PL_Sock->pHtons)(PL_Sock, x) -#define PerlSock_ntohl(x) \ - (*PL_Sock->pNtohl)(PL_Sock, x) -#define PerlSock_ntohs(x) \ - (*PL_Sock->pNtohs)(PL_Sock, x) -#define PerlSock_accept(s, a, l) \ - (*PL_Sock->pAccept)(PL_Sock, s, a, l) -#define PerlSock_bind(s, n, l) \ - (*PL_Sock->pBind)(PL_Sock, s, n, l) -#define PerlSock_connect(s, n, l) \ - (*PL_Sock->pConnect)(PL_Sock, s, n, l) -#define PerlSock_endhostent() \ - (*PL_Sock->pEndhostent)(PL_Sock) -#define PerlSock_endnetent() \ - (*PL_Sock->pEndnetent)(PL_Sock) -#define PerlSock_endprotoent() \ - (*PL_Sock->pEndprotoent)(PL_Sock) -#define PerlSock_endservent() \ - (*PL_Sock->pEndservent)(PL_Sock) -#define PerlSock_gethostbyaddr(a, l, t) \ - (*PL_Sock->pGethostbyaddr)(PL_Sock, a, l, t) -#define PerlSock_gethostbyname(n) \ - (*PL_Sock->pGethostbyname)(PL_Sock, n) -#define PerlSock_gethostent() \ - (*PL_Sock->pGethostent)(PL_Sock) -#define PerlSock_gethostname(n, l) \ - (*PL_Sock->pGethostname)(PL_Sock, n, l) -#define PerlSock_getnetbyaddr(n, t) \ - (*PL_Sock->pGetnetbyaddr)(PL_Sock, n, t) -#define PerlSock_getnetbyname(c) \ - (*PL_Sock->pGetnetbyname)(PL_Sock, c) -#define PerlSock_getnetent() \ - (*PL_Sock->pGetnetent)(PL_Sock) -#define PerlSock_getpeername(s, n, l) \ - (*PL_Sock->pGetpeername)(PL_Sock, s, n, l) -#define PerlSock_getprotobyname(n) \ - (*PL_Sock->pGetprotobyname)(PL_Sock, n) -#define PerlSock_getprotobynumber(n) \ - (*PL_Sock->pGetprotobynumber)(PL_Sock, n) -#define PerlSock_getprotoent() \ - (*PL_Sock->pGetprotoent)(PL_Sock) -#define PerlSock_getservbyname(n, p) \ - (*PL_Sock->pGetservbyname)(PL_Sock, n, p) -#define PerlSock_getservbyport(port, p) \ - (*PL_Sock->pGetservbyport)(PL_Sock, port, p) -#define PerlSock_getservent() \ - (*PL_Sock->pGetservent)(PL_Sock) -#define PerlSock_getsockname(s, n, l) \ - (*PL_Sock->pGetsockname)(PL_Sock, s, n, l) -#define PerlSock_getsockopt(s,l,n,v,i) \ - (*PL_Sock->pGetsockopt)(PL_Sock, s, l, n, v, i) -#define PerlSock_inet_addr(c) \ - (*PL_Sock->pInetAddr)(PL_Sock, c) -#define PerlSock_inet_ntoa(i) \ - (*PL_Sock->pInetNtoa)(PL_Sock, i) -#define PerlSock_listen(s, b) \ - (*PL_Sock->pListen)(PL_Sock, s, b) -#define PerlSock_recv(s, b, l, f) \ - (*PL_Sock->pRecv)(PL_Sock, s, b, l, f) -#define PerlSock_recvfrom(s,b,l,f,from,fromlen) \ - (*PL_Sock->pRecvfrom)(PL_Sock, s, b, l, f, from, fromlen) -#define PerlSock_select(n, r, w, e, t) \ - (*PL_Sock->pSelect)(PL_Sock, n, (char*)r, (char*)w, (char*)e, t) -#define PerlSock_send(s, b, l, f) \ - (*PL_Sock->pSend)(PL_Sock, s, b, l, f) -#define PerlSock_sendto(s, b, l, f, t, tlen) \ - (*PL_Sock->pSendto)(PL_Sock, s, b, l, f, t, tlen) -#define PerlSock_sethostent(f) \ - (*PL_Sock->pSethostent)(PL_Sock, f) -#define PerlSock_setnetent(f) \ - (*PL_Sock->pSetnetent)(PL_Sock, f) -#define PerlSock_setprotoent(f) \ - (*PL_Sock->pSetprotoent)(PL_Sock, f) -#define PerlSock_setservent(f) \ - (*PL_Sock->pSetservent)(PL_Sock, f) -#define PerlSock_setsockopt(s, l, n, v, len) \ - (*PL_Sock->pSetsockopt)(PL_Sock, s, l, n, v, len) -#define PerlSock_shutdown(s, h) \ - (*PL_Sock->pShutdown)(PL_Sock, s, h) -#define PerlSock_socket(a, t, p) \ - (*PL_Sock->pSocket)(PL_Sock, a, t, p) -#define PerlSock_socketpair(a, t, p, f) \ - (*PL_Sock->pSocketpair)(PL_Sock, a, t, p, f) - -#ifdef WIN32 -#define PerlSock_closesocket(s) \ - (*PL_Sock->pClosesocket)(PL_Sock, s) -#endif +# define PerlSock_htonl(x) \ + (*PL_Sock->pHtonl)(PL_Sock, x) +# define PerlSock_htons(x) \ + (*PL_Sock->pHtons)(PL_Sock, x) +# define PerlSock_ntohl(x) \ + (*PL_Sock->pNtohl)(PL_Sock, x) +# define PerlSock_ntohs(x) \ + (*PL_Sock->pNtohs)(PL_Sock, x) +# define PerlSock_accept(s, a, l) \ + (*PL_Sock->pAccept)(PL_Sock, s, a, l) +# define PerlSock_bind(s, n, l) \ + (*PL_Sock->pBind)(PL_Sock, s, n, l) +# define PerlSock_connect(s, n, l) \ + (*PL_Sock->pConnect)(PL_Sock, s, n, l) +# define PerlSock_endhostent() \ + (*PL_Sock->pEndhostent)(PL_Sock) +# define PerlSock_endnetent() \ + (*PL_Sock->pEndnetent)(PL_Sock) +# define PerlSock_endprotoent() \ + (*PL_Sock->pEndprotoent)(PL_Sock) +# define PerlSock_endservent() \ + (*PL_Sock->pEndservent)(PL_Sock) +# define PerlSock_gethostbyaddr(a, l, t) \ + (*PL_Sock->pGethostbyaddr)(PL_Sock, a, l, t) +# define PerlSock_gethostbyname(n) \ + (*PL_Sock->pGethostbyname)(PL_Sock, n) +# define PerlSock_gethostent() \ + (*PL_Sock->pGethostent)(PL_Sock) +# define PerlSock_gethostname(n, l) \ + (*PL_Sock->pGethostname)(PL_Sock, n, l) +# define PerlSock_getnetbyaddr(n, t) \ + (*PL_Sock->pGetnetbyaddr)(PL_Sock, n, t) +# define PerlSock_getnetbyname(c) \ + (*PL_Sock->pGetnetbyname)(PL_Sock, c) +# define PerlSock_getnetent() \ + (*PL_Sock->pGetnetent)(PL_Sock) +# define PerlSock_getpeername(s, n, l) \ + (*PL_Sock->pGetpeername)(PL_Sock, s, n, l) +# define PerlSock_getprotobyname(n) \ + (*PL_Sock->pGetprotobyname)(PL_Sock, n) +# define PerlSock_getprotobynumber(n) \ + (*PL_Sock->pGetprotobynumber)(PL_Sock, n) +# define PerlSock_getprotoent() \ + (*PL_Sock->pGetprotoent)(PL_Sock) +# define PerlSock_getservbyname(n, p) \ + (*PL_Sock->pGetservbyname)(PL_Sock, n, p) +# define PerlSock_getservbyport(port, p) \ + (*PL_Sock->pGetservbyport)(PL_Sock, port, p) +# define PerlSock_getservent() \ + (*PL_Sock->pGetservent)(PL_Sock) +# define PerlSock_getsockname(s, n, l) \ + (*PL_Sock->pGetsockname)(PL_Sock, s, n, l) +# define PerlSock_getsockopt(s,l,n,v,i) \ + (*PL_Sock->pGetsockopt)(PL_Sock, s, l, n, v, i) +# define PerlSock_inet_addr(c) \ + (*PL_Sock->pInetAddr)(PL_Sock, c) +# define PerlSock_inet_ntoa(i) \ + (*PL_Sock->pInetNtoa)(PL_Sock, i) +# define PerlSock_listen(s, b) \ + (*PL_Sock->pListen)(PL_Sock, s, b) +# define PerlSock_recv(s, b, l, f) \ + (*PL_Sock->pRecv)(PL_Sock, s, b, l, f) +# define PerlSock_recvfrom(s,b,l,f,from,fromlen) \ + (*PL_Sock->pRecvfrom)(PL_Sock, s, b, l, f, from, fromlen) +# define PerlSock_select(n, r, w, e, t) \ + (*PL_Sock->pSelect)(PL_Sock, n, (char*)r, (char*)w, (char*)e, t) +# define PerlSock_send(s, b, l, f) \ + (*PL_Sock->pSend)(PL_Sock, s, b, l, f) +# define PerlSock_sendto(s, b, l, f, t, tlen) \ + (*PL_Sock->pSendto)(PL_Sock, s, b, l, f, t, tlen) +# define PerlSock_sethostent(f) \ + (*PL_Sock->pSethostent)(PL_Sock, f) +# define PerlSock_setnetent(f) \ + (*PL_Sock->pSetnetent)(PL_Sock, f) +# define PerlSock_setprotoent(f) \ + (*PL_Sock->pSetprotoent)(PL_Sock, f) +# define PerlSock_setservent(f) \ + (*PL_Sock->pSetservent)(PL_Sock, f) +# define PerlSock_setsockopt(s, l, n, v, len) \ + (*PL_Sock->pSetsockopt)(PL_Sock, s, l, n, v, len) +# define PerlSock_shutdown(s, h) \ + (*PL_Sock->pShutdown)(PL_Sock, s, h) +# define PerlSock_socket(a, t, p) \ + (*PL_Sock->pSocket)(PL_Sock, a, t, p) +# define PerlSock_socketpair(a, t, p, f) \ + (*PL_Sock->pSocketpair)(PL_Sock, a, t, p, f) + +# ifdef WIN32 +# define PerlSock_closesocket(s) \ + (*PL_Sock->pClosesocket)(PL_Sock, s) +# endif -#else /* PERL_IMPLICIT_SYS */ - -#define PerlSock_htonl(x) htonl(x) -#define PerlSock_htons(x) htons(x) -#define PerlSock_ntohl(x) ntohl(x) -#define PerlSock_ntohs(x) ntohs(x) -#define PerlSock_accept(s, a, l) accept(s, a, l) -#define PerlSock_bind(s, n, l) bind(s, n, l) -#define PerlSock_connect(s, n, l) connect(s, n, l) - -#define PerlSock_gethostbyaddr(a, l, t) gethostbyaddr(a, l, t) -#define PerlSock_gethostbyname(n) gethostbyname(n) -#define PerlSock_gethostent gethostent -#define PerlSock_endhostent endhostent -#define PerlSock_gethostname(n, l) gethostname(n, l) - -#define PerlSock_getnetbyaddr(n, t) getnetbyaddr(n, t) -#define PerlSock_getnetbyname(n) getnetbyname(n) -#define PerlSock_getnetent getnetent -#define PerlSock_endnetent endnetent -#define PerlSock_getpeername(s, n, l) getpeername(s, n, l) - -#define PerlSock_getprotobyname(n) getprotobyname(n) -#define PerlSock_getprotobynumber(n) getprotobynumber(n) -#define PerlSock_getprotoent getprotoent -#define PerlSock_endprotoent endprotoent - -#define PerlSock_getservbyname(n, p) getservbyname(n, p) -#define PerlSock_getservbyport(port, p) getservbyport(port, p) -#define PerlSock_getservent getservent -#define PerlSock_endservent endservent - -#define PerlSock_getsockname(s, n, l) getsockname(s, n, l) -#define PerlSock_getsockopt(s,l,n,v,i) getsockopt(s, l, n, v, i) -#define PerlSock_inet_addr(c) inet_addr(c) -#define PerlSock_inet_ntoa(i) inet_ntoa(i) -#define PerlSock_listen(s, b) listen(s, b) -#define PerlSock_recv(s, b, l, f) recv(s, b, l, f) -#define PerlSock_recvfrom(s, b, l, f, from, fromlen) \ - recvfrom(s, b, l, f, from, fromlen) -#define PerlSock_select(n, r, w, e, t) select(n, r, w, e, t) -#define PerlSock_send(s, b, l, f) send(s, b, l, f) -#define PerlSock_sendto(s, b, l, f, t, tlen) \ - sendto(s, b, l, f, t, tlen) -#define PerlSock_sethostent(f) sethostent(f) -#define PerlSock_setnetent(f) setnetent(f) -#define PerlSock_setprotoent(f) setprotoent(f) -#define PerlSock_setservent(f) setservent(f) -#define PerlSock_setsockopt(s, l, n, v, len) \ - setsockopt(s, l, n, v, len) -#define PerlSock_shutdown(s, h) shutdown(s, h) -#define PerlSock_socket(a, t, p) socket(a, t, p) -#define PerlSock_socketpair(a, t, p, f) socketpair(a, t, p, f) - -#ifdef WIN32 -#define PerlSock_closesocket(s) closesocket(s) -#endif +#else /* ! PERL_IMPLICIT_SYS below */ + +# define PerlSock_htonl(x) htonl(x) +# define PerlSock_htons(x) htons(x) +# define PerlSock_ntohl(x) ntohl(x) +# define PerlSock_ntohs(x) ntohs(x) +# define PerlSock_accept(s, a, l) accept(s, a, l) +# define PerlSock_bind(s, n, l) bind(s, n, l) +# define PerlSock_connect(s, n, l) connect(s, n, l) + +# define PerlSock_gethostbyaddr(a, l, t) gethostbyaddr(a, l, t) +# define PerlSock_gethostbyname(n) gethostbyname(n) +# define PerlSock_gethostent gethostent +# define PerlSock_endhostent endhostent +# define PerlSock_gethostname(n, l) gethostname(n, l) + +# define PerlSock_getnetbyaddr(n, t) getnetbyaddr(n, t) +# define PerlSock_getnetbyname(n) getnetbyname(n) +# define PerlSock_getnetent getnetent +# define PerlSock_endnetent endnetent +# define PerlSock_getpeername(s, n, l) getpeername(s, n, l) + +# define PerlSock_getprotobyname(n) getprotobyname(n) +# define PerlSock_getprotobynumber(n) getprotobynumber(n) +# define PerlSock_getprotoent getprotoent +# define PerlSock_endprotoent endprotoent + +# define PerlSock_getservbyname(n, p) getservbyname(n, p) +# define PerlSock_getservbyport(port, p) getservbyport(port, p) +# define PerlSock_getservent getservent +# define PerlSock_endservent endservent + +# define PerlSock_getsockname(s, n, l) getsockname(s, n, l) +# define PerlSock_getsockopt(s,l,n,v,i) getsockopt(s, l, n, v, i) +# define PerlSock_inet_addr(c) inet_addr(c) +# define PerlSock_inet_ntoa(i) inet_ntoa(i) +# define PerlSock_listen(s, b) listen(s, b) +# define PerlSock_recv(s, b, l, f) recv(s, b, l, f) +# define PerlSock_recvfrom(s, b, l, f, from, fromlen) \ + recvfrom(s, b, l, f, from, fromlen) +# define PerlSock_select(n, r, w, e, t) select(n, r, w, e, t) +# define PerlSock_send(s, b, l, f) send(s, b, l, f) +# define PerlSock_sendto(s, b, l, f, t, tlen) \ + sendto(s, b, l, f, t, tlen) +# define PerlSock_sethostent(f) sethostent(f) +# define PerlSock_setnetent(f) setnetent(f) +# define PerlSock_setprotoent(f) setprotoent(f) +# define PerlSock_setservent(f) setservent(f) +# define PerlSock_setsockopt(s, l, n, v, len) \ + setsockopt(s, l, n, v, len) +# define PerlSock_shutdown(s, h) shutdown(s, h) +# define PerlSock_socket(a, t, p) socket(a, t, p) +# define PerlSock_socketpair(a, t, p, f) socketpair(a, t, p, f) + +# ifdef WIN32 +# define PerlSock_closesocket(s) closesocket(s) +# endif -#endif /* PERL_IMPLICIT_SYS */ +#endif /* PERL_IMPLICIT_SYS */ -#endif /* __Inc__IPerl___ */ +#endif /* __Inc__IPerl___ */ /* * ex: set ts=8 sts=4 sw=4 et: diff --git a/gnu/usr.bin/perl/keywords.c b/gnu/usr.bin/perl/keywords.c index d503bc9c2d9..ed26717ba05 100644 --- a/gnu/usr.bin/perl/keywords.c +++ b/gnu/usr.bin/perl/keywords.c @@ -203,7 +203,7 @@ Perl_keyword (pTHX_ const char *name, I32 len, bool all_keywords) goto unknown; } - case 3: /* 29 tokens of length 3 */ + case 3: /* 30 tokens of length 3 */ switch (name[0]) { case 'E': @@ -463,13 +463,27 @@ Perl_keyword (pTHX_ const char *name, I32 len, bool all_keywords) } case 't': - if (name[1] == 'i' && - name[2] == 'e') - { /* tie */ - return -KEY_tie; - } + switch (name[1]) + { + case 'i': + if (name[2] == 'e') + { /* tie */ + return -KEY_tie; + } - goto unknown; + goto unknown; + + case 'r': + if (name[2] == 'y') + { /* try */ + return (all_keywords || FEATURE_TRY_IS_ENABLED ? KEY_try : 0); + } + + goto unknown; + + default: + goto unknown; + } case 'u': if (name[1] == 's' && @@ -964,7 +978,7 @@ Perl_keyword (pTHX_ const char *name, I32 len, bool all_keywords) goto unknown; } - case 5: /* 39 tokens of length 5 */ + case 5: /* 41 tokens of length 5 */ switch (name[0]) { case 'B': @@ -1046,6 +1060,16 @@ Perl_keyword (pTHX_ const char *name, I32 len, bool all_keywords) case 'c': switch (name[1]) { + case 'a': + if (name[2] == 't' && + name[3] == 'c' && + name[4] == 'h') + { /* catch */ + return (all_keywords || FEATURE_TRY_IS_ENABLED ? KEY_catch : 0); + } + + goto unknown; + case 'h': switch (name[2]) { @@ -1118,6 +1142,17 @@ Perl_keyword (pTHX_ const char *name, I32 len, bool all_keywords) goto unknown; } + case 'd': + if (name[1] == 'e' && + name[2] == 'f' && + name[3] == 'e' && + name[4] == 'r') + { /* defer */ + return (all_keywords || FEATURE_DEFER_IS_ENABLED ? KEY_defer : 0); + } + + goto unknown; + case 'e': if (name[1] == 'l' && name[2] == 's' && @@ -1917,7 +1952,7 @@ Perl_keyword (pTHX_ const char *name, I32 len, bool all_keywords) goto unknown; } - case 7: /* 30 tokens of length 7 */ + case 7: /* 31 tokens of length 7 */ switch (name[0]) { case 'D': @@ -2045,17 +2080,35 @@ Perl_keyword (pTHX_ const char *name, I32 len, bool all_keywords) } case 'f': - if (name[1] == 'o' && - name[2] == 'r' && - name[3] == 'e' && - name[4] == 'a' && - name[5] == 'c' && - name[6] == 'h') - { /* foreach */ - return KEY_foreach; - } + switch (name[1]) + { + case 'i': + if (name[2] == 'n' && + name[3] == 'a' && + name[4] == 'l' && + name[5] == 'l' && + name[6] == 'y') + { /* finally */ + return (all_keywords || FEATURE_TRY_IS_ENABLED ? KEY_finally : 0); + } - goto unknown; + goto unknown; + + case 'o': + if (name[2] == 'r' && + name[3] == 'e' && + name[4] == 'a' && + name[5] == 'c' && + name[6] == 'h') + { /* foreach */ + return KEY_foreach; + } + + goto unknown; + + default: + goto unknown; + } case 'g': if (name[1] == 'e' && @@ -3451,5 +3504,5 @@ unknown: } /* Generated from: - * f77998a5bc995c1b42d3d080de227ef5f11638bcd329367431d8f193aef2d3cc regen/keywords.pl + * b680fb3a27b173b65d9c4e534ad92897c925e336476879a6be1da18ac55cbe8b regen/keywords.pl * ex: set ro: */ diff --git a/gnu/usr.bin/perl/keywords.h b/gnu/usr.bin/perl/keywords.h index 23fa6944d89..f2304ba9cf2 100644 --- a/gnu/usr.bin/perl/keywords.h +++ b/gnu/usr.bin/perl/keywords.h @@ -37,239 +37,243 @@ #define KEY_bless 21 #define KEY_break 22 #define KEY_caller 23 -#define KEY_chdir 24 -#define KEY_chmod 25 -#define KEY_chomp 26 -#define KEY_chop 27 -#define KEY_chown 28 -#define KEY_chr 29 -#define KEY_chroot 30 -#define KEY_close 31 -#define KEY_closedir 32 -#define KEY_cmp 33 -#define KEY_connect 34 -#define KEY_continue 35 -#define KEY_cos 36 -#define KEY_crypt 37 -#define KEY_dbmclose 38 -#define KEY_dbmopen 39 -#define KEY_default 40 -#define KEY_defined 41 -#define KEY_delete 42 -#define KEY_die 43 -#define KEY_do 44 -#define KEY_dump 45 -#define KEY_each 46 -#define KEY_else 47 -#define KEY_elsif 48 -#define KEY_endgrent 49 -#define KEY_endhostent 50 -#define KEY_endnetent 51 -#define KEY_endprotoent 52 -#define KEY_endpwent 53 -#define KEY_endservent 54 -#define KEY_eof 55 -#define KEY_eq 56 -#define KEY_eval 57 -#define KEY_evalbytes 58 -#define KEY_exec 59 -#define KEY_exists 60 -#define KEY_exit 61 -#define KEY_exp 62 -#define KEY_fc 63 -#define KEY_fcntl 64 -#define KEY_fileno 65 -#define KEY_flock 66 -#define KEY_for 67 -#define KEY_foreach 68 -#define KEY_fork 69 -#define KEY_format 70 -#define KEY_formline 71 -#define KEY_ge 72 -#define KEY_getc 73 -#define KEY_getgrent 74 -#define KEY_getgrgid 75 -#define KEY_getgrnam 76 -#define KEY_gethostbyaddr 77 -#define KEY_gethostbyname 78 -#define KEY_gethostent 79 -#define KEY_getlogin 80 -#define KEY_getnetbyaddr 81 -#define KEY_getnetbyname 82 -#define KEY_getnetent 83 -#define KEY_getpeername 84 -#define KEY_getpgrp 85 -#define KEY_getppid 86 -#define KEY_getpriority 87 -#define KEY_getprotobyname 88 -#define KEY_getprotobynumber 89 -#define KEY_getprotoent 90 -#define KEY_getpwent 91 -#define KEY_getpwnam 92 -#define KEY_getpwuid 93 -#define KEY_getservbyname 94 -#define KEY_getservbyport 95 -#define KEY_getservent 96 -#define KEY_getsockname 97 -#define KEY_getsockopt 98 -#define KEY_given 99 -#define KEY_glob 100 -#define KEY_gmtime 101 -#define KEY_goto 102 -#define KEY_grep 103 -#define KEY_gt 104 -#define KEY_hex 105 -#define KEY_if 106 -#define KEY_index 107 -#define KEY_int 108 -#define KEY_ioctl 109 -#define KEY_isa 110 -#define KEY_join 111 -#define KEY_keys 112 -#define KEY_kill 113 -#define KEY_last 114 -#define KEY_lc 115 -#define KEY_lcfirst 116 -#define KEY_le 117 -#define KEY_length 118 -#define KEY_link 119 -#define KEY_listen 120 -#define KEY_local 121 -#define KEY_localtime 122 -#define KEY_lock 123 -#define KEY_log 124 -#define KEY_lstat 125 -#define KEY_lt 126 -#define KEY_m 127 -#define KEY_map 128 -#define KEY_mkdir 129 -#define KEY_msgctl 130 -#define KEY_msgget 131 -#define KEY_msgrcv 132 -#define KEY_msgsnd 133 -#define KEY_my 134 -#define KEY_ne 135 -#define KEY_next 136 -#define KEY_no 137 -#define KEY_not 138 -#define KEY_oct 139 -#define KEY_open 140 -#define KEY_opendir 141 -#define KEY_or 142 -#define KEY_ord 143 -#define KEY_our 144 -#define KEY_pack 145 -#define KEY_package 146 -#define KEY_pipe 147 -#define KEY_pop 148 -#define KEY_pos 149 -#define KEY_print 150 -#define KEY_printf 151 -#define KEY_prototype 152 -#define KEY_push 153 -#define KEY_q 154 -#define KEY_qq 155 -#define KEY_qr 156 -#define KEY_quotemeta 157 -#define KEY_qw 158 -#define KEY_qx 159 -#define KEY_rand 160 -#define KEY_read 161 -#define KEY_readdir 162 -#define KEY_readline 163 -#define KEY_readlink 164 -#define KEY_readpipe 165 -#define KEY_recv 166 -#define KEY_redo 167 -#define KEY_ref 168 -#define KEY_rename 169 -#define KEY_require 170 -#define KEY_reset 171 -#define KEY_return 172 -#define KEY_reverse 173 -#define KEY_rewinddir 174 -#define KEY_rindex 175 -#define KEY_rmdir 176 -#define KEY_s 177 -#define KEY_say 178 -#define KEY_scalar 179 -#define KEY_seek 180 -#define KEY_seekdir 181 -#define KEY_select 182 -#define KEY_semctl 183 -#define KEY_semget 184 -#define KEY_semop 185 -#define KEY_send 186 -#define KEY_setgrent 187 -#define KEY_sethostent 188 -#define KEY_setnetent 189 -#define KEY_setpgrp 190 -#define KEY_setpriority 191 -#define KEY_setprotoent 192 -#define KEY_setpwent 193 -#define KEY_setservent 194 -#define KEY_setsockopt 195 -#define KEY_shift 196 -#define KEY_shmctl 197 -#define KEY_shmget 198 -#define KEY_shmread 199 -#define KEY_shmwrite 200 -#define KEY_shutdown 201 -#define KEY_sin 202 -#define KEY_sleep 203 -#define KEY_socket 204 -#define KEY_socketpair 205 -#define KEY_sort 206 -#define KEY_splice 207 -#define KEY_split 208 -#define KEY_sprintf 209 -#define KEY_sqrt 210 -#define KEY_srand 211 -#define KEY_stat 212 -#define KEY_state 213 -#define KEY_study 214 -#define KEY_sub 215 -#define KEY_substr 216 -#define KEY_symlink 217 -#define KEY_syscall 218 -#define KEY_sysopen 219 -#define KEY_sysread 220 -#define KEY_sysseek 221 -#define KEY_system 222 -#define KEY_syswrite 223 -#define KEY_tell 224 -#define KEY_telldir 225 -#define KEY_tie 226 -#define KEY_tied 227 -#define KEY_time 228 -#define KEY_times 229 -#define KEY_tr 230 -#define KEY_truncate 231 -#define KEY_uc 232 -#define KEY_ucfirst 233 -#define KEY_umask 234 -#define KEY_undef 235 -#define KEY_unless 236 -#define KEY_unlink 237 -#define KEY_unpack 238 -#define KEY_unshift 239 -#define KEY_untie 240 -#define KEY_until 241 -#define KEY_use 242 -#define KEY_utime 243 -#define KEY_values 244 -#define KEY_vec 245 -#define KEY_wait 246 -#define KEY_waitpid 247 -#define KEY_wantarray 248 -#define KEY_warn 249 -#define KEY_when 250 -#define KEY_while 251 -#define KEY_write 252 -#define KEY_x 253 -#define KEY_xor 254 -#define KEY_y 255 +#define KEY_catch 24 +#define KEY_chdir 25 +#define KEY_chmod 26 +#define KEY_chomp 27 +#define KEY_chop 28 +#define KEY_chown 29 +#define KEY_chr 30 +#define KEY_chroot 31 +#define KEY_close 32 +#define KEY_closedir 33 +#define KEY_cmp 34 +#define KEY_connect 35 +#define KEY_continue 36 +#define KEY_cos 37 +#define KEY_crypt 38 +#define KEY_dbmclose 39 +#define KEY_dbmopen 40 +#define KEY_default 41 +#define KEY_defer 42 +#define KEY_defined 43 +#define KEY_delete 44 +#define KEY_die 45 +#define KEY_do 46 +#define KEY_dump 47 +#define KEY_each 48 +#define KEY_else 49 +#define KEY_elsif 50 +#define KEY_endgrent 51 +#define KEY_endhostent 52 +#define KEY_endnetent 53 +#define KEY_endprotoent 54 +#define KEY_endpwent 55 +#define KEY_endservent 56 +#define KEY_eof 57 +#define KEY_eq 58 +#define KEY_eval 59 +#define KEY_evalbytes 60 +#define KEY_exec 61 +#define KEY_exists 62 +#define KEY_exit 63 +#define KEY_exp 64 +#define KEY_fc 65 +#define KEY_fcntl 66 +#define KEY_fileno 67 +#define KEY_finally 68 +#define KEY_flock 69 +#define KEY_for 70 +#define KEY_foreach 71 +#define KEY_fork 72 +#define KEY_format 73 +#define KEY_formline 74 +#define KEY_ge 75 +#define KEY_getc 76 +#define KEY_getgrent 77 +#define KEY_getgrgid 78 +#define KEY_getgrnam 79 +#define KEY_gethostbyaddr 80 +#define KEY_gethostbyname 81 +#define KEY_gethostent 82 +#define KEY_getlogin 83 +#define KEY_getnetbyaddr 84 +#define KEY_getnetbyname 85 +#define KEY_getnetent 86 +#define KEY_getpeername 87 +#define KEY_getpgrp 88 +#define KEY_getppid 89 +#define KEY_getpriority 90 +#define KEY_getprotobyname 91 +#define KEY_getprotobynumber 92 +#define KEY_getprotoent 93 +#define KEY_getpwent 94 +#define KEY_getpwnam 95 +#define KEY_getpwuid 96 +#define KEY_getservbyname 97 +#define KEY_getservbyport 98 +#define KEY_getservent 99 +#define KEY_getsockname 100 +#define KEY_getsockopt 101 +#define KEY_given 102 +#define KEY_glob 103 +#define KEY_gmtime 104 +#define KEY_goto 105 +#define KEY_grep 106 +#define KEY_gt 107 +#define KEY_hex 108 +#define KEY_if 109 +#define KEY_index 110 +#define KEY_int 111 +#define KEY_ioctl 112 +#define KEY_isa 113 +#define KEY_join 114 +#define KEY_keys 115 +#define KEY_kill 116 +#define KEY_last 117 +#define KEY_lc 118 +#define KEY_lcfirst 119 +#define KEY_le 120 +#define KEY_length 121 +#define KEY_link 122 +#define KEY_listen 123 +#define KEY_local 124 +#define KEY_localtime 125 +#define KEY_lock 126 +#define KEY_log 127 +#define KEY_lstat 128 +#define KEY_lt 129 +#define KEY_m 130 +#define KEY_map 131 +#define KEY_mkdir 132 +#define KEY_msgctl 133 +#define KEY_msgget 134 +#define KEY_msgrcv 135 +#define KEY_msgsnd 136 +#define KEY_my 137 +#define KEY_ne 138 +#define KEY_next 139 +#define KEY_no 140 +#define KEY_not 141 +#define KEY_oct 142 +#define KEY_open 143 +#define KEY_opendir 144 +#define KEY_or 145 +#define KEY_ord 146 +#define KEY_our 147 +#define KEY_pack 148 +#define KEY_package 149 +#define KEY_pipe 150 +#define KEY_pop 151 +#define KEY_pos 152 +#define KEY_print 153 +#define KEY_printf 154 +#define KEY_prototype 155 +#define KEY_push 156 +#define KEY_q 157 +#define KEY_qq 158 +#define KEY_qr 159 +#define KEY_quotemeta 160 +#define KEY_qw 161 +#define KEY_qx 162 +#define KEY_rand 163 +#define KEY_read 164 +#define KEY_readdir 165 +#define KEY_readline 166 +#define KEY_readlink 167 +#define KEY_readpipe 168 +#define KEY_recv 169 +#define KEY_redo 170 +#define KEY_ref 171 +#define KEY_rename 172 +#define KEY_require 173 +#define KEY_reset 174 +#define KEY_return 175 +#define KEY_reverse 176 +#define KEY_rewinddir 177 +#define KEY_rindex 178 +#define KEY_rmdir 179 +#define KEY_s 180 +#define KEY_say 181 +#define KEY_scalar 182 +#define KEY_seek 183 +#define KEY_seekdir 184 +#define KEY_select 185 +#define KEY_semctl 186 +#define KEY_semget 187 +#define KEY_semop 188 +#define KEY_send 189 +#define KEY_setgrent 190 +#define KEY_sethostent 191 +#define KEY_setnetent 192 +#define KEY_setpgrp 193 +#define KEY_setpriority 194 +#define KEY_setprotoent 195 +#define KEY_setpwent 196 +#define KEY_setservent 197 +#define KEY_setsockopt 198 +#define KEY_shift 199 +#define KEY_shmctl 200 +#define KEY_shmget 201 +#define KEY_shmread 202 +#define KEY_shmwrite 203 +#define KEY_shutdown 204 +#define KEY_sin 205 +#define KEY_sleep 206 +#define KEY_socket 207 +#define KEY_socketpair 208 +#define KEY_sort 209 +#define KEY_splice 210 +#define KEY_split 211 +#define KEY_sprintf 212 +#define KEY_sqrt 213 +#define KEY_srand 214 +#define KEY_stat 215 +#define KEY_state 216 +#define KEY_study 217 +#define KEY_sub 218 +#define KEY_substr 219 +#define KEY_symlink 220 +#define KEY_syscall 221 +#define KEY_sysopen 222 +#define KEY_sysread 223 +#define KEY_sysseek 224 +#define KEY_system 225 +#define KEY_syswrite 226 +#define KEY_tell 227 +#define KEY_telldir 228 +#define KEY_tie 229 +#define KEY_tied 230 +#define KEY_time 231 +#define KEY_times 232 +#define KEY_tr 233 +#define KEY_try 234 +#define KEY_truncate 235 +#define KEY_uc 236 +#define KEY_ucfirst 237 +#define KEY_umask 238 +#define KEY_undef 239 +#define KEY_unless 240 +#define KEY_unlink 241 +#define KEY_unpack 242 +#define KEY_unshift 243 +#define KEY_untie 244 +#define KEY_until 245 +#define KEY_use 246 +#define KEY_utime 247 +#define KEY_values 248 +#define KEY_vec 249 +#define KEY_wait 250 +#define KEY_waitpid 251 +#define KEY_wantarray 252 +#define KEY_warn 253 +#define KEY_when 254 +#define KEY_while 255 +#define KEY_write 256 +#define KEY_x 257 +#define KEY_xor 258 +#define KEY_y 259 /* Generated from: - * f77998a5bc995c1b42d3d080de227ef5f11638bcd329367431d8f193aef2d3cc regen/keywords.pl + * b680fb3a27b173b65d9c4e534ad92897c925e336476879a6be1da18ac55cbe8b regen/keywords.pl * ex: set ro: */ diff --git a/gnu/usr.bin/perl/l1_char_class_tab.h b/gnu/usr.bin/perl/l1_char_class_tab.h index 83469a0ba17..ce668f04411 100644 --- a/gnu/usr.bin/perl/l1_char_class_tab.h +++ b/gnu/usr.bin/perl/l1_char_class_tab.h @@ -492,11 +492,11 @@ /* 0xDA U+B9 I8=EE SUPERSCRIPT 1 */ (1U<<_CC_GRAPH)|(1U<<_CC_PRINT), /* 0xDB U+FB I8=EF u with '^' */ (1U<<_CC_ALPHA)|(1U<<_CC_ALPHANUMERIC)|(1U<<_CC_CASED)|(1U<<_CC_CHARNAME_CONT)|(1U<<_CC_GRAPH)|(1U<<_CC_IDFIRST)|(1U<<_CC_IS_IN_SOME_FOLD)|(1U<<_CC_LOWER)|(1U<<_CC_PRINT)|(1U<<_CC_WORDCHAR), /* 0xDC U+FC I8=F0 u with diaeresis */ (1U<<_CC_ALPHA)|(1U<<_CC_ALPHANUMERIC)|(1U<<_CC_CASED)|(1U<<_CC_CHARNAME_CONT)|(1U<<_CC_GRAPH)|(1U<<_CC_IDFIRST)|(1U<<_CC_IS_IN_SOME_FOLD)|(1U<<_CC_LOWER)|(1U<<_CC_PRINT)|(1U<<_CC_WORDCHAR), -/* 0xDD U+F9 I8=F1 u with grave */ (1U<<_CC_ALPHA)|(1U<<_CC_ALPHANUMERIC)|(1U<<_CC_CASED)|(1U<<_CC_CHARNAME_CONT)|(1U<<_CC_GRAPH)|(1U<<_CC_IDFIRST)|(1U<<_CC_IS_IN_SOME_FOLD)|(1U<<_CC_LOWER)|(1U<<_CC_PRINT)|(1U<<_CC_WORDCHAR)|(1U<<_CC_UTF8_START_BYTE_IS_FOR_AT_LEAST_SURROGATE), -/* 0xDE U+FA I8=F2 u with acute */ (1U<<_CC_ALPHA)|(1U<<_CC_ALPHANUMERIC)|(1U<<_CC_CASED)|(1U<<_CC_CHARNAME_CONT)|(1U<<_CC_GRAPH)|(1U<<_CC_IDFIRST)|(1U<<_CC_IS_IN_SOME_FOLD)|(1U<<_CC_LOWER)|(1U<<_CC_PRINT)|(1U<<_CC_WORDCHAR)|(1U<<_CC_UTF8_START_BYTE_IS_FOR_AT_LEAST_SURROGATE), -/* 0xDF U+FF I8=F3 y with diaeresis */ (1U<<_CC_ALPHA)|(1U<<_CC_ALPHANUMERIC)|(1U<<_CC_CASED)|(1U<<_CC_CHARNAME_CONT)|(1U<<_CC_GRAPH)|(1U<<_CC_IDFIRST)|(1U<<_CC_IS_IN_SOME_FOLD)|(1U<<_CC_LOWER)|(1U<<_CC_NONLATIN1_FOLD)|(1U<<_CC_NONLATIN1_SIMPLE_FOLD)|(1U<<_CC_PRINT)|(1U<<_CC_WORDCHAR)|(1U<<_CC_UTF8_START_BYTE_IS_FOR_AT_LEAST_SURROGATE), +/* 0xDD U+F9 I8=F1 u with grave */ (1U<<_CC_ALPHA)|(1U<<_CC_ALPHANUMERIC)|(1U<<_CC_CASED)|(1U<<_CC_CHARNAME_CONT)|(1U<<_CC_GRAPH)|(1U<<_CC_IDFIRST)|(1U<<_CC_IS_IN_SOME_FOLD)|(1U<<_CC_LOWER)|(1U<<_CC_PRINT)|(1U<<_CC_WORDCHAR), +/* 0xDE U+FA I8=F2 u with acute */ (1U<<_CC_ALPHA)|(1U<<_CC_ALPHANUMERIC)|(1U<<_CC_CASED)|(1U<<_CC_CHARNAME_CONT)|(1U<<_CC_GRAPH)|(1U<<_CC_IDFIRST)|(1U<<_CC_IS_IN_SOME_FOLD)|(1U<<_CC_LOWER)|(1U<<_CC_PRINT)|(1U<<_CC_WORDCHAR), +/* 0xDF U+FF I8=F3 y with diaeresis */ (1U<<_CC_ALPHA)|(1U<<_CC_ALPHANUMERIC)|(1U<<_CC_CASED)|(1U<<_CC_CHARNAME_CONT)|(1U<<_CC_GRAPH)|(1U<<_CC_IDFIRST)|(1U<<_CC_IS_IN_SOME_FOLD)|(1U<<_CC_LOWER)|(1U<<_CC_NONLATIN1_FOLD)|(1U<<_CC_NONLATIN1_SIMPLE_FOLD)|(1U<<_CC_PRINT)|(1U<<_CC_WORDCHAR), /* 0xE0 U+5C '\' */ (1U<<_CC_ASCII)|(1U<<_CC_GRAPH)|(1U<<_CC_PRINT)|(1U<<_CC_PUNCT)|(1U<<_CC_QUOTEMETA), -/* 0xE1 U+F7 I8=F4 DIVISION */ (1U<<_CC_GRAPH)|(1U<<_CC_PRINT)|(1U<<_CC_QUOTEMETA)|(1U<<_CC_UTF8_START_BYTE_IS_FOR_AT_LEAST_SURROGATE), +/* 0xE1 U+F7 I8=F4 DIVISION */ (1U<<_CC_GRAPH)|(1U<<_CC_PRINT)|(1U<<_CC_QUOTEMETA), /* 0xE2 U+53 'S' */ (1U<<_CC_ALPHA)|(1U<<_CC_ALPHANUMERIC)|(1U<<_CC_ASCII)|(1U<<_CC_CASED)|(1U<<_CC_CHARNAME_CONT)|(1U<<_CC_GRAPH)|(1U<<_CC_IDFIRST)|(1U<<_CC_IS_IN_SOME_FOLD)|(1U<<_CC_NONLATIN1_FOLD)|(1U<<_CC_NONLATIN1_SIMPLE_FOLD)|(1U<<_CC_NON_FINAL_FOLD)|(1U<<_CC_PRINT)|(1U<<_CC_UPPER)|(1U<<_CC_WORDCHAR), /* 0xE3 U+54 'T' */ (1U<<_CC_ALPHA)|(1U<<_CC_ALPHANUMERIC)|(1U<<_CC_ASCII)|(1U<<_CC_CASED)|(1U<<_CC_CHARNAME_CONT)|(1U<<_CC_GRAPH)|(1U<<_CC_IDFIRST)|(1U<<_CC_IS_IN_SOME_FOLD)|(1U<<_CC_NONLATIN1_FOLD)|(1U<<_CC_NON_FINAL_FOLD)|(1U<<_CC_PRINT)|(1U<<_CC_UPPER)|(1U<<_CC_WORDCHAR), /* 0xE4 U+55 'U' */ (1U<<_CC_ALPHA)|(1U<<_CC_ALPHANUMERIC)|(1U<<_CC_ASCII)|(1U<<_CC_CASED)|(1U<<_CC_CHARNAME_CONT)|(1U<<_CC_GRAPH)|(1U<<_CC_IDFIRST)|(1U<<_CC_IS_IN_SOME_FOLD)|(1U<<_CC_PRINT)|(1U<<_CC_UPPER)|(1U<<_CC_WORDCHAR), @@ -505,12 +505,12 @@ /* 0xE7 U+58 'X' */ (1U<<_CC_ALPHA)|(1U<<_CC_ALPHANUMERIC)|(1U<<_CC_ASCII)|(1U<<_CC_CASED)|(1U<<_CC_CHARNAME_CONT)|(1U<<_CC_GRAPH)|(1U<<_CC_IDFIRST)|(1U<<_CC_IS_IN_SOME_FOLD)|(1U<<_CC_PRINT)|(1U<<_CC_UPPER)|(1U<<_CC_WORDCHAR), /* 0xE8 U+59 'Y' */ (1U<<_CC_ALPHA)|(1U<<_CC_ALPHANUMERIC)|(1U<<_CC_ASCII)|(1U<<_CC_CASED)|(1U<<_CC_CHARNAME_CONT)|(1U<<_CC_GRAPH)|(1U<<_CC_IDFIRST)|(1U<<_CC_IS_IN_SOME_FOLD)|(1U<<_CC_NONLATIN1_FOLD)|(1U<<_CC_NON_FINAL_FOLD)|(1U<<_CC_PRINT)|(1U<<_CC_UPPER)|(1U<<_CC_WORDCHAR), /* 0xE9 U+5A 'Z' */ (1U<<_CC_ALPHA)|(1U<<_CC_ALPHANUMERIC)|(1U<<_CC_ASCII)|(1U<<_CC_CASED)|(1U<<_CC_CHARNAME_CONT)|(1U<<_CC_GRAPH)|(1U<<_CC_IDFIRST)|(1U<<_CC_IS_IN_SOME_FOLD)|(1U<<_CC_PRINT)|(1U<<_CC_UPPER)|(1U<<_CC_WORDCHAR), -/* 0xEA U+B2 I8=F5 SUPERSCRIPT 2 */ (1U<<_CC_GRAPH)|(1U<<_CC_PRINT)|(1U<<_CC_UTF8_START_BYTE_IS_FOR_AT_LEAST_SURROGATE), -/* 0xEB U+D4 I8=F6 O with '^' */ (1U<<_CC_ALPHA)|(1U<<_CC_ALPHANUMERIC)|(1U<<_CC_CASED)|(1U<<_CC_CHARNAME_CONT)|(1U<<_CC_GRAPH)|(1U<<_CC_IDFIRST)|(1U<<_CC_IS_IN_SOME_FOLD)|(1U<<_CC_PRINT)|(1U<<_CC_UPPER)|(1U<<_CC_WORDCHAR)|(1U<<_CC_UTF8_START_BYTE_IS_FOR_AT_LEAST_SURROGATE), -/* 0xEC U+D6 I8=F7 O with DIAERESIS */ (1U<<_CC_ALPHA)|(1U<<_CC_ALPHANUMERIC)|(1U<<_CC_CASED)|(1U<<_CC_CHARNAME_CONT)|(1U<<_CC_GRAPH)|(1U<<_CC_IDFIRST)|(1U<<_CC_IS_IN_SOME_FOLD)|(1U<<_CC_PRINT)|(1U<<_CC_UPPER)|(1U<<_CC_WORDCHAR)|(1U<<_CC_UTF8_START_BYTE_IS_FOR_AT_LEAST_SURROGATE), -/* 0xED U+D2 I8=F8 O with GRAVE */ (1U<<_CC_ALPHA)|(1U<<_CC_ALPHANUMERIC)|(1U<<_CC_CASED)|(1U<<_CC_CHARNAME_CONT)|(1U<<_CC_GRAPH)|(1U<<_CC_IDFIRST)|(1U<<_CC_IS_IN_SOME_FOLD)|(1U<<_CC_PRINT)|(1U<<_CC_UPPER)|(1U<<_CC_WORDCHAR)|(1U<<_CC_UTF8_START_BYTE_IS_FOR_AT_LEAST_SURROGATE), -/* 0xEE U+D3 I8=F9 O with ACUTE */ (1U<<_CC_ALPHA)|(1U<<_CC_ALPHANUMERIC)|(1U<<_CC_CASED)|(1U<<_CC_CHARNAME_CONT)|(1U<<_CC_GRAPH)|(1U<<_CC_IDFIRST)|(1U<<_CC_IS_IN_SOME_FOLD)|(1U<<_CC_PRINT)|(1U<<_CC_UPPER)|(1U<<_CC_WORDCHAR)|(1U<<_CC_UTF8_START_BYTE_IS_FOR_AT_LEAST_SURROGATE), -/* 0xEF U+D5 I8=FA O with '~' */ (1U<<_CC_ALPHA)|(1U<<_CC_ALPHANUMERIC)|(1U<<_CC_CASED)|(1U<<_CC_CHARNAME_CONT)|(1U<<_CC_GRAPH)|(1U<<_CC_IDFIRST)|(1U<<_CC_IS_IN_SOME_FOLD)|(1U<<_CC_PRINT)|(1U<<_CC_UPPER)|(1U<<_CC_WORDCHAR)|(1U<<_CC_UTF8_START_BYTE_IS_FOR_AT_LEAST_SURROGATE), +/* 0xEA U+B2 I8=F5 SUPERSCRIPT 2 */ (1U<<_CC_GRAPH)|(1U<<_CC_PRINT), +/* 0xEB U+D4 I8=F6 O with '^' */ (1U<<_CC_ALPHA)|(1U<<_CC_ALPHANUMERIC)|(1U<<_CC_CASED)|(1U<<_CC_CHARNAME_CONT)|(1U<<_CC_GRAPH)|(1U<<_CC_IDFIRST)|(1U<<_CC_IS_IN_SOME_FOLD)|(1U<<_CC_PRINT)|(1U<<_CC_UPPER)|(1U<<_CC_WORDCHAR), +/* 0xEC U+D6 I8=F7 O with DIAERESIS */ (1U<<_CC_ALPHA)|(1U<<_CC_ALPHANUMERIC)|(1U<<_CC_CASED)|(1U<<_CC_CHARNAME_CONT)|(1U<<_CC_GRAPH)|(1U<<_CC_IDFIRST)|(1U<<_CC_IS_IN_SOME_FOLD)|(1U<<_CC_PRINT)|(1U<<_CC_UPPER)|(1U<<_CC_WORDCHAR), +/* 0xED U+D2 I8=F8 O with GRAVE */ (1U<<_CC_ALPHA)|(1U<<_CC_ALPHANUMERIC)|(1U<<_CC_CASED)|(1U<<_CC_CHARNAME_CONT)|(1U<<_CC_GRAPH)|(1U<<_CC_IDFIRST)|(1U<<_CC_IS_IN_SOME_FOLD)|(1U<<_CC_PRINT)|(1U<<_CC_UPPER)|(1U<<_CC_WORDCHAR), +/* 0xEE U+D3 I8=F9 O with ACUTE */ (1U<<_CC_ALPHA)|(1U<<_CC_ALPHANUMERIC)|(1U<<_CC_CASED)|(1U<<_CC_CHARNAME_CONT)|(1U<<_CC_GRAPH)|(1U<<_CC_IDFIRST)|(1U<<_CC_IS_IN_SOME_FOLD)|(1U<<_CC_PRINT)|(1U<<_CC_UPPER)|(1U<<_CC_WORDCHAR), +/* 0xEF U+D5 I8=FA O with '~' */ (1U<<_CC_ALPHA)|(1U<<_CC_ALPHANUMERIC)|(1U<<_CC_CASED)|(1U<<_CC_CHARNAME_CONT)|(1U<<_CC_GRAPH)|(1U<<_CC_IDFIRST)|(1U<<_CC_IS_IN_SOME_FOLD)|(1U<<_CC_PRINT)|(1U<<_CC_UPPER)|(1U<<_CC_WORDCHAR), /* 0xF0 U+30 '0' */ (1U<<_CC_ALPHANUMERIC)|(1U<<_CC_ASCII)|(1U<<_CC_BINDIGIT)|(1U<<_CC_CHARNAME_CONT)|(1U<<_CC_DIGIT)|(1U<<_CC_GRAPH)|(1U<<_CC_OCTDIGIT)|(1U<<_CC_PRINT)|(1U<<_CC_WORDCHAR)|(1U<<_CC_XDIGIT), /* 0xF1 U+31 '1' */ (1U<<_CC_ALPHANUMERIC)|(1U<<_CC_ASCII)|(1U<<_CC_BINDIGIT)|(1U<<_CC_CHARNAME_CONT)|(1U<<_CC_DIGIT)|(1U<<_CC_GRAPH)|(1U<<_CC_OCTDIGIT)|(1U<<_CC_PRINT)|(1U<<_CC_WORDCHAR)|(1U<<_CC_XDIGIT), /* 0xF2 U+32 '2' */ (1U<<_CC_ALPHANUMERIC)|(1U<<_CC_ASCII)|(1U<<_CC_CHARNAME_CONT)|(1U<<_CC_DIGIT)|(1U<<_CC_GRAPH)|(1U<<_CC_OCTDIGIT)|(1U<<_CC_PRINT)|(1U<<_CC_WORDCHAR)|(1U<<_CC_XDIGIT), @@ -521,11 +521,11 @@ /* 0xF7 U+37 '7' */ (1U<<_CC_ALPHANUMERIC)|(1U<<_CC_ASCII)|(1U<<_CC_CHARNAME_CONT)|(1U<<_CC_DIGIT)|(1U<<_CC_GRAPH)|(1U<<_CC_OCTDIGIT)|(1U<<_CC_PRINT)|(1U<<_CC_WORDCHAR)|(1U<<_CC_XDIGIT), /* 0xF8 U+38 '8' */ (1U<<_CC_ALPHANUMERIC)|(1U<<_CC_ASCII)|(1U<<_CC_CHARNAME_CONT)|(1U<<_CC_DIGIT)|(1U<<_CC_GRAPH)|(1U<<_CC_PRINT)|(1U<<_CC_WORDCHAR)|(1U<<_CC_XDIGIT), /* 0xF9 U+39 '9' */ (1U<<_CC_ALPHANUMERIC)|(1U<<_CC_ASCII)|(1U<<_CC_CHARNAME_CONT)|(1U<<_CC_DIGIT)|(1U<<_CC_GRAPH)|(1U<<_CC_PRINT)|(1U<<_CC_WORDCHAR)|(1U<<_CC_XDIGIT), -/* 0xFA U+B3 I8=FB SUPERSCRIPT 3 */ (1U<<_CC_GRAPH)|(1U<<_CC_PRINT)|(1U<<_CC_UTF8_START_BYTE_IS_FOR_AT_LEAST_SURROGATE), -/* 0xFB U+DB I8=FC U with '^' */ (1U<<_CC_ALPHA)|(1U<<_CC_ALPHANUMERIC)|(1U<<_CC_CASED)|(1U<<_CC_CHARNAME_CONT)|(1U<<_CC_GRAPH)|(1U<<_CC_IDFIRST)|(1U<<_CC_IS_IN_SOME_FOLD)|(1U<<_CC_PRINT)|(1U<<_CC_UPPER)|(1U<<_CC_WORDCHAR)|(1U<<_CC_UTF8_START_BYTE_IS_FOR_AT_LEAST_SURROGATE), -/* 0xFC U+DC I8=FD U with DIAERESIS */ (1U<<_CC_ALPHA)|(1U<<_CC_ALPHANUMERIC)|(1U<<_CC_CASED)|(1U<<_CC_CHARNAME_CONT)|(1U<<_CC_GRAPH)|(1U<<_CC_IDFIRST)|(1U<<_CC_IS_IN_SOME_FOLD)|(1U<<_CC_PRINT)|(1U<<_CC_UPPER)|(1U<<_CC_WORDCHAR)|(1U<<_CC_UTF8_START_BYTE_IS_FOR_AT_LEAST_SURROGATE), -/* 0xFD U+D9 I8=FE U with GRAVE */ (1U<<_CC_ALPHA)|(1U<<_CC_ALPHANUMERIC)|(1U<<_CC_CASED)|(1U<<_CC_CHARNAME_CONT)|(1U<<_CC_GRAPH)|(1U<<_CC_IDFIRST)|(1U<<_CC_IS_IN_SOME_FOLD)|(1U<<_CC_PRINT)|(1U<<_CC_UPPER)|(1U<<_CC_WORDCHAR)|(1U<<_CC_UTF8_START_BYTE_IS_FOR_AT_LEAST_SURROGATE), -/* 0xFE U+DA I8=FF U with ACUTE */ (1U<<_CC_ALPHA)|(1U<<_CC_ALPHANUMERIC)|(1U<<_CC_CASED)|(1U<<_CC_CHARNAME_CONT)|(1U<<_CC_GRAPH)|(1U<<_CC_IDFIRST)|(1U<<_CC_IS_IN_SOME_FOLD)|(1U<<_CC_PRINT)|(1U<<_CC_UPPER)|(1U<<_CC_WORDCHAR)|(1U<<_CC_UTF8_START_BYTE_IS_FOR_AT_LEAST_SURROGATE), +/* 0xFA U+B3 I8=FB SUPERSCRIPT 3 */ (1U<<_CC_GRAPH)|(1U<<_CC_PRINT), +/* 0xFB U+DB I8=FC U with '^' */ (1U<<_CC_ALPHA)|(1U<<_CC_ALPHANUMERIC)|(1U<<_CC_CASED)|(1U<<_CC_CHARNAME_CONT)|(1U<<_CC_GRAPH)|(1U<<_CC_IDFIRST)|(1U<<_CC_IS_IN_SOME_FOLD)|(1U<<_CC_PRINT)|(1U<<_CC_UPPER)|(1U<<_CC_WORDCHAR), +/* 0xFC U+DC I8=FD U with DIAERESIS */ (1U<<_CC_ALPHA)|(1U<<_CC_ALPHANUMERIC)|(1U<<_CC_CASED)|(1U<<_CC_CHARNAME_CONT)|(1U<<_CC_GRAPH)|(1U<<_CC_IDFIRST)|(1U<<_CC_IS_IN_SOME_FOLD)|(1U<<_CC_PRINT)|(1U<<_CC_UPPER)|(1U<<_CC_WORDCHAR), +/* 0xFD U+D9 I8=FE U with GRAVE */ (1U<<_CC_ALPHA)|(1U<<_CC_ALPHANUMERIC)|(1U<<_CC_CASED)|(1U<<_CC_CHARNAME_CONT)|(1U<<_CC_GRAPH)|(1U<<_CC_IDFIRST)|(1U<<_CC_IS_IN_SOME_FOLD)|(1U<<_CC_PRINT)|(1U<<_CC_UPPER)|(1U<<_CC_WORDCHAR), +/* 0xFE U+DA I8=FF U with ACUTE */ (1U<<_CC_ALPHA)|(1U<<_CC_ALPHANUMERIC)|(1U<<_CC_CASED)|(1U<<_CC_CHARNAME_CONT)|(1U<<_CC_GRAPH)|(1U<<_CC_IDFIRST)|(1U<<_CC_IS_IN_SOME_FOLD)|(1U<<_CC_PRINT)|(1U<<_CC_UPPER)|(1U<<_CC_WORDCHAR), /* 0xFF U+9F APC */ (1U<<_CC_CNTRL)|(1U<<_CC_QUOTEMETA) #endif /* EBCDIC 1047 */ @@ -755,11 +755,11 @@ /* 0xDA U+B9 I8=EE SUPERSCRIPT 1 */ (1U<<_CC_GRAPH)|(1U<<_CC_PRINT), /* 0xDB U+FB I8=EF u with '^' */ (1U<<_CC_ALPHA)|(1U<<_CC_ALPHANUMERIC)|(1U<<_CC_CASED)|(1U<<_CC_CHARNAME_CONT)|(1U<<_CC_GRAPH)|(1U<<_CC_IDFIRST)|(1U<<_CC_IS_IN_SOME_FOLD)|(1U<<_CC_LOWER)|(1U<<_CC_PRINT)|(1U<<_CC_WORDCHAR), /* 0xDC U+FC I8=F0 u with diaeresis */ (1U<<_CC_ALPHA)|(1U<<_CC_ALPHANUMERIC)|(1U<<_CC_CASED)|(1U<<_CC_CHARNAME_CONT)|(1U<<_CC_GRAPH)|(1U<<_CC_IDFIRST)|(1U<<_CC_IS_IN_SOME_FOLD)|(1U<<_CC_LOWER)|(1U<<_CC_PRINT)|(1U<<_CC_WORDCHAR), -/* 0xDD U+F9 I8=F1 u with grave */ (1U<<_CC_ALPHA)|(1U<<_CC_ALPHANUMERIC)|(1U<<_CC_CASED)|(1U<<_CC_CHARNAME_CONT)|(1U<<_CC_GRAPH)|(1U<<_CC_IDFIRST)|(1U<<_CC_IS_IN_SOME_FOLD)|(1U<<_CC_LOWER)|(1U<<_CC_PRINT)|(1U<<_CC_WORDCHAR)|(1U<<_CC_UTF8_START_BYTE_IS_FOR_AT_LEAST_SURROGATE), -/* 0xDE U+FA I8=F2 u with acute */ (1U<<_CC_ALPHA)|(1U<<_CC_ALPHANUMERIC)|(1U<<_CC_CASED)|(1U<<_CC_CHARNAME_CONT)|(1U<<_CC_GRAPH)|(1U<<_CC_IDFIRST)|(1U<<_CC_IS_IN_SOME_FOLD)|(1U<<_CC_LOWER)|(1U<<_CC_PRINT)|(1U<<_CC_WORDCHAR)|(1U<<_CC_UTF8_START_BYTE_IS_FOR_AT_LEAST_SURROGATE), -/* 0xDF U+FF I8=F3 y with diaeresis */ (1U<<_CC_ALPHA)|(1U<<_CC_ALPHANUMERIC)|(1U<<_CC_CASED)|(1U<<_CC_CHARNAME_CONT)|(1U<<_CC_GRAPH)|(1U<<_CC_IDFIRST)|(1U<<_CC_IS_IN_SOME_FOLD)|(1U<<_CC_LOWER)|(1U<<_CC_NONLATIN1_FOLD)|(1U<<_CC_NONLATIN1_SIMPLE_FOLD)|(1U<<_CC_PRINT)|(1U<<_CC_WORDCHAR)|(1U<<_CC_UTF8_START_BYTE_IS_FOR_AT_LEAST_SURROGATE), +/* 0xDD U+F9 I8=F1 u with grave */ (1U<<_CC_ALPHA)|(1U<<_CC_ALPHANUMERIC)|(1U<<_CC_CASED)|(1U<<_CC_CHARNAME_CONT)|(1U<<_CC_GRAPH)|(1U<<_CC_IDFIRST)|(1U<<_CC_IS_IN_SOME_FOLD)|(1U<<_CC_LOWER)|(1U<<_CC_PRINT)|(1U<<_CC_WORDCHAR), +/* 0xDE U+FA I8=F2 u with acute */ (1U<<_CC_ALPHA)|(1U<<_CC_ALPHANUMERIC)|(1U<<_CC_CASED)|(1U<<_CC_CHARNAME_CONT)|(1U<<_CC_GRAPH)|(1U<<_CC_IDFIRST)|(1U<<_CC_IS_IN_SOME_FOLD)|(1U<<_CC_LOWER)|(1U<<_CC_PRINT)|(1U<<_CC_WORDCHAR), +/* 0xDF U+FF I8=F3 y with diaeresis */ (1U<<_CC_ALPHA)|(1U<<_CC_ALPHANUMERIC)|(1U<<_CC_CASED)|(1U<<_CC_CHARNAME_CONT)|(1U<<_CC_GRAPH)|(1U<<_CC_IDFIRST)|(1U<<_CC_IS_IN_SOME_FOLD)|(1U<<_CC_LOWER)|(1U<<_CC_NONLATIN1_FOLD)|(1U<<_CC_NONLATIN1_SIMPLE_FOLD)|(1U<<_CC_PRINT)|(1U<<_CC_WORDCHAR), /* 0xE0 U+5C '\' */ (1U<<_CC_ASCII)|(1U<<_CC_GRAPH)|(1U<<_CC_PRINT)|(1U<<_CC_PUNCT)|(1U<<_CC_QUOTEMETA), -/* 0xE1 U+F7 I8=F4 DIVISION */ (1U<<_CC_GRAPH)|(1U<<_CC_PRINT)|(1U<<_CC_QUOTEMETA)|(1U<<_CC_UTF8_START_BYTE_IS_FOR_AT_LEAST_SURROGATE), +/* 0xE1 U+F7 I8=F4 DIVISION */ (1U<<_CC_GRAPH)|(1U<<_CC_PRINT)|(1U<<_CC_QUOTEMETA), /* 0xE2 U+53 'S' */ (1U<<_CC_ALPHA)|(1U<<_CC_ALPHANUMERIC)|(1U<<_CC_ASCII)|(1U<<_CC_CASED)|(1U<<_CC_CHARNAME_CONT)|(1U<<_CC_GRAPH)|(1U<<_CC_IDFIRST)|(1U<<_CC_IS_IN_SOME_FOLD)|(1U<<_CC_NONLATIN1_FOLD)|(1U<<_CC_NONLATIN1_SIMPLE_FOLD)|(1U<<_CC_NON_FINAL_FOLD)|(1U<<_CC_PRINT)|(1U<<_CC_UPPER)|(1U<<_CC_WORDCHAR), /* 0xE3 U+54 'T' */ (1U<<_CC_ALPHA)|(1U<<_CC_ALPHANUMERIC)|(1U<<_CC_ASCII)|(1U<<_CC_CASED)|(1U<<_CC_CHARNAME_CONT)|(1U<<_CC_GRAPH)|(1U<<_CC_IDFIRST)|(1U<<_CC_IS_IN_SOME_FOLD)|(1U<<_CC_NONLATIN1_FOLD)|(1U<<_CC_NON_FINAL_FOLD)|(1U<<_CC_PRINT)|(1U<<_CC_UPPER)|(1U<<_CC_WORDCHAR), /* 0xE4 U+55 'U' */ (1U<<_CC_ALPHA)|(1U<<_CC_ALPHANUMERIC)|(1U<<_CC_ASCII)|(1U<<_CC_CASED)|(1U<<_CC_CHARNAME_CONT)|(1U<<_CC_GRAPH)|(1U<<_CC_IDFIRST)|(1U<<_CC_IS_IN_SOME_FOLD)|(1U<<_CC_PRINT)|(1U<<_CC_UPPER)|(1U<<_CC_WORDCHAR), @@ -768,12 +768,12 @@ /* 0xE7 U+58 'X' */ (1U<<_CC_ALPHA)|(1U<<_CC_ALPHANUMERIC)|(1U<<_CC_ASCII)|(1U<<_CC_CASED)|(1U<<_CC_CHARNAME_CONT)|(1U<<_CC_GRAPH)|(1U<<_CC_IDFIRST)|(1U<<_CC_IS_IN_SOME_FOLD)|(1U<<_CC_PRINT)|(1U<<_CC_UPPER)|(1U<<_CC_WORDCHAR), /* 0xE8 U+59 'Y' */ (1U<<_CC_ALPHA)|(1U<<_CC_ALPHANUMERIC)|(1U<<_CC_ASCII)|(1U<<_CC_CASED)|(1U<<_CC_CHARNAME_CONT)|(1U<<_CC_GRAPH)|(1U<<_CC_IDFIRST)|(1U<<_CC_IS_IN_SOME_FOLD)|(1U<<_CC_NONLATIN1_FOLD)|(1U<<_CC_NON_FINAL_FOLD)|(1U<<_CC_PRINT)|(1U<<_CC_UPPER)|(1U<<_CC_WORDCHAR), /* 0xE9 U+5A 'Z' */ (1U<<_CC_ALPHA)|(1U<<_CC_ALPHANUMERIC)|(1U<<_CC_ASCII)|(1U<<_CC_CASED)|(1U<<_CC_CHARNAME_CONT)|(1U<<_CC_GRAPH)|(1U<<_CC_IDFIRST)|(1U<<_CC_IS_IN_SOME_FOLD)|(1U<<_CC_PRINT)|(1U<<_CC_UPPER)|(1U<<_CC_WORDCHAR), -/* 0xEA U+B2 I8=F5 SUPERSCRIPT 2 */ (1U<<_CC_GRAPH)|(1U<<_CC_PRINT)|(1U<<_CC_UTF8_START_BYTE_IS_FOR_AT_LEAST_SURROGATE), -/* 0xEB U+D4 I8=F6 O with '^' */ (1U<<_CC_ALPHA)|(1U<<_CC_ALPHANUMERIC)|(1U<<_CC_CASED)|(1U<<_CC_CHARNAME_CONT)|(1U<<_CC_GRAPH)|(1U<<_CC_IDFIRST)|(1U<<_CC_IS_IN_SOME_FOLD)|(1U<<_CC_PRINT)|(1U<<_CC_UPPER)|(1U<<_CC_WORDCHAR)|(1U<<_CC_UTF8_START_BYTE_IS_FOR_AT_LEAST_SURROGATE), -/* 0xEC U+D6 I8=F7 O with DIAERESIS */ (1U<<_CC_ALPHA)|(1U<<_CC_ALPHANUMERIC)|(1U<<_CC_CASED)|(1U<<_CC_CHARNAME_CONT)|(1U<<_CC_GRAPH)|(1U<<_CC_IDFIRST)|(1U<<_CC_IS_IN_SOME_FOLD)|(1U<<_CC_PRINT)|(1U<<_CC_UPPER)|(1U<<_CC_WORDCHAR)|(1U<<_CC_UTF8_START_BYTE_IS_FOR_AT_LEAST_SURROGATE), -/* 0xED U+D2 I8=F8 O with GRAVE */ (1U<<_CC_ALPHA)|(1U<<_CC_ALPHANUMERIC)|(1U<<_CC_CASED)|(1U<<_CC_CHARNAME_CONT)|(1U<<_CC_GRAPH)|(1U<<_CC_IDFIRST)|(1U<<_CC_IS_IN_SOME_FOLD)|(1U<<_CC_PRINT)|(1U<<_CC_UPPER)|(1U<<_CC_WORDCHAR)|(1U<<_CC_UTF8_START_BYTE_IS_FOR_AT_LEAST_SURROGATE), -/* 0xEE U+D3 I8=F9 O with ACUTE */ (1U<<_CC_ALPHA)|(1U<<_CC_ALPHANUMERIC)|(1U<<_CC_CASED)|(1U<<_CC_CHARNAME_CONT)|(1U<<_CC_GRAPH)|(1U<<_CC_IDFIRST)|(1U<<_CC_IS_IN_SOME_FOLD)|(1U<<_CC_PRINT)|(1U<<_CC_UPPER)|(1U<<_CC_WORDCHAR)|(1U<<_CC_UTF8_START_BYTE_IS_FOR_AT_LEAST_SURROGATE), -/* 0xEF U+D5 I8=FA O with '~' */ (1U<<_CC_ALPHA)|(1U<<_CC_ALPHANUMERIC)|(1U<<_CC_CASED)|(1U<<_CC_CHARNAME_CONT)|(1U<<_CC_GRAPH)|(1U<<_CC_IDFIRST)|(1U<<_CC_IS_IN_SOME_FOLD)|(1U<<_CC_PRINT)|(1U<<_CC_UPPER)|(1U<<_CC_WORDCHAR)|(1U<<_CC_UTF8_START_BYTE_IS_FOR_AT_LEAST_SURROGATE), +/* 0xEA U+B2 I8=F5 SUPERSCRIPT 2 */ (1U<<_CC_GRAPH)|(1U<<_CC_PRINT), +/* 0xEB U+D4 I8=F6 O with '^' */ (1U<<_CC_ALPHA)|(1U<<_CC_ALPHANUMERIC)|(1U<<_CC_CASED)|(1U<<_CC_CHARNAME_CONT)|(1U<<_CC_GRAPH)|(1U<<_CC_IDFIRST)|(1U<<_CC_IS_IN_SOME_FOLD)|(1U<<_CC_PRINT)|(1U<<_CC_UPPER)|(1U<<_CC_WORDCHAR), +/* 0xEC U+D6 I8=F7 O with DIAERESIS */ (1U<<_CC_ALPHA)|(1U<<_CC_ALPHANUMERIC)|(1U<<_CC_CASED)|(1U<<_CC_CHARNAME_CONT)|(1U<<_CC_GRAPH)|(1U<<_CC_IDFIRST)|(1U<<_CC_IS_IN_SOME_FOLD)|(1U<<_CC_PRINT)|(1U<<_CC_UPPER)|(1U<<_CC_WORDCHAR), +/* 0xED U+D2 I8=F8 O with GRAVE */ (1U<<_CC_ALPHA)|(1U<<_CC_ALPHANUMERIC)|(1U<<_CC_CASED)|(1U<<_CC_CHARNAME_CONT)|(1U<<_CC_GRAPH)|(1U<<_CC_IDFIRST)|(1U<<_CC_IS_IN_SOME_FOLD)|(1U<<_CC_PRINT)|(1U<<_CC_UPPER)|(1U<<_CC_WORDCHAR), +/* 0xEE U+D3 I8=F9 O with ACUTE */ (1U<<_CC_ALPHA)|(1U<<_CC_ALPHANUMERIC)|(1U<<_CC_CASED)|(1U<<_CC_CHARNAME_CONT)|(1U<<_CC_GRAPH)|(1U<<_CC_IDFIRST)|(1U<<_CC_IS_IN_SOME_FOLD)|(1U<<_CC_PRINT)|(1U<<_CC_UPPER)|(1U<<_CC_WORDCHAR), +/* 0xEF U+D5 I8=FA O with '~' */ (1U<<_CC_ALPHA)|(1U<<_CC_ALPHANUMERIC)|(1U<<_CC_CASED)|(1U<<_CC_CHARNAME_CONT)|(1U<<_CC_GRAPH)|(1U<<_CC_IDFIRST)|(1U<<_CC_IS_IN_SOME_FOLD)|(1U<<_CC_PRINT)|(1U<<_CC_UPPER)|(1U<<_CC_WORDCHAR), /* 0xF0 U+30 '0' */ (1U<<_CC_ALPHANUMERIC)|(1U<<_CC_ASCII)|(1U<<_CC_BINDIGIT)|(1U<<_CC_CHARNAME_CONT)|(1U<<_CC_DIGIT)|(1U<<_CC_GRAPH)|(1U<<_CC_OCTDIGIT)|(1U<<_CC_PRINT)|(1U<<_CC_WORDCHAR)|(1U<<_CC_XDIGIT), /* 0xF1 U+31 '1' */ (1U<<_CC_ALPHANUMERIC)|(1U<<_CC_ASCII)|(1U<<_CC_BINDIGIT)|(1U<<_CC_CHARNAME_CONT)|(1U<<_CC_DIGIT)|(1U<<_CC_GRAPH)|(1U<<_CC_OCTDIGIT)|(1U<<_CC_PRINT)|(1U<<_CC_WORDCHAR)|(1U<<_CC_XDIGIT), /* 0xF2 U+32 '2' */ (1U<<_CC_ALPHANUMERIC)|(1U<<_CC_ASCII)|(1U<<_CC_CHARNAME_CONT)|(1U<<_CC_DIGIT)|(1U<<_CC_GRAPH)|(1U<<_CC_OCTDIGIT)|(1U<<_CC_PRINT)|(1U<<_CC_WORDCHAR)|(1U<<_CC_XDIGIT), @@ -784,11 +784,11 @@ /* 0xF7 U+37 '7' */ (1U<<_CC_ALPHANUMERIC)|(1U<<_CC_ASCII)|(1U<<_CC_CHARNAME_CONT)|(1U<<_CC_DIGIT)|(1U<<_CC_GRAPH)|(1U<<_CC_OCTDIGIT)|(1U<<_CC_PRINT)|(1U<<_CC_WORDCHAR)|(1U<<_CC_XDIGIT), /* 0xF8 U+38 '8' */ (1U<<_CC_ALPHANUMERIC)|(1U<<_CC_ASCII)|(1U<<_CC_CHARNAME_CONT)|(1U<<_CC_DIGIT)|(1U<<_CC_GRAPH)|(1U<<_CC_PRINT)|(1U<<_CC_WORDCHAR)|(1U<<_CC_XDIGIT), /* 0xF9 U+39 '9' */ (1U<<_CC_ALPHANUMERIC)|(1U<<_CC_ASCII)|(1U<<_CC_CHARNAME_CONT)|(1U<<_CC_DIGIT)|(1U<<_CC_GRAPH)|(1U<<_CC_PRINT)|(1U<<_CC_WORDCHAR)|(1U<<_CC_XDIGIT), -/* 0xFA U+B3 I8=FB SUPERSCRIPT 3 */ (1U<<_CC_GRAPH)|(1U<<_CC_PRINT)|(1U<<_CC_UTF8_START_BYTE_IS_FOR_AT_LEAST_SURROGATE), -/* 0xFB U+DB I8=FC U with '^' */ (1U<<_CC_ALPHA)|(1U<<_CC_ALPHANUMERIC)|(1U<<_CC_CASED)|(1U<<_CC_CHARNAME_CONT)|(1U<<_CC_GRAPH)|(1U<<_CC_IDFIRST)|(1U<<_CC_IS_IN_SOME_FOLD)|(1U<<_CC_PRINT)|(1U<<_CC_UPPER)|(1U<<_CC_WORDCHAR)|(1U<<_CC_UTF8_START_BYTE_IS_FOR_AT_LEAST_SURROGATE), -/* 0xFC U+DC I8=FD U with DIAERESIS */ (1U<<_CC_ALPHA)|(1U<<_CC_ALPHANUMERIC)|(1U<<_CC_CASED)|(1U<<_CC_CHARNAME_CONT)|(1U<<_CC_GRAPH)|(1U<<_CC_IDFIRST)|(1U<<_CC_IS_IN_SOME_FOLD)|(1U<<_CC_PRINT)|(1U<<_CC_UPPER)|(1U<<_CC_WORDCHAR)|(1U<<_CC_UTF8_START_BYTE_IS_FOR_AT_LEAST_SURROGATE), -/* 0xFD U+D9 I8=FE U with GRAVE */ (1U<<_CC_ALPHA)|(1U<<_CC_ALPHANUMERIC)|(1U<<_CC_CASED)|(1U<<_CC_CHARNAME_CONT)|(1U<<_CC_GRAPH)|(1U<<_CC_IDFIRST)|(1U<<_CC_IS_IN_SOME_FOLD)|(1U<<_CC_PRINT)|(1U<<_CC_UPPER)|(1U<<_CC_WORDCHAR)|(1U<<_CC_UTF8_START_BYTE_IS_FOR_AT_LEAST_SURROGATE), -/* 0xFE U+DA I8=FF U with ACUTE */ (1U<<_CC_ALPHA)|(1U<<_CC_ALPHANUMERIC)|(1U<<_CC_CASED)|(1U<<_CC_CHARNAME_CONT)|(1U<<_CC_GRAPH)|(1U<<_CC_IDFIRST)|(1U<<_CC_IS_IN_SOME_FOLD)|(1U<<_CC_PRINT)|(1U<<_CC_UPPER)|(1U<<_CC_WORDCHAR)|(1U<<_CC_UTF8_START_BYTE_IS_FOR_AT_LEAST_SURROGATE), +/* 0xFA U+B3 I8=FB SUPERSCRIPT 3 */ (1U<<_CC_GRAPH)|(1U<<_CC_PRINT), +/* 0xFB U+DB I8=FC U with '^' */ (1U<<_CC_ALPHA)|(1U<<_CC_ALPHANUMERIC)|(1U<<_CC_CASED)|(1U<<_CC_CHARNAME_CONT)|(1U<<_CC_GRAPH)|(1U<<_CC_IDFIRST)|(1U<<_CC_IS_IN_SOME_FOLD)|(1U<<_CC_PRINT)|(1U<<_CC_UPPER)|(1U<<_CC_WORDCHAR), +/* 0xFC U+DC I8=FD U with DIAERESIS */ (1U<<_CC_ALPHA)|(1U<<_CC_ALPHANUMERIC)|(1U<<_CC_CASED)|(1U<<_CC_CHARNAME_CONT)|(1U<<_CC_GRAPH)|(1U<<_CC_IDFIRST)|(1U<<_CC_IS_IN_SOME_FOLD)|(1U<<_CC_PRINT)|(1U<<_CC_UPPER)|(1U<<_CC_WORDCHAR), +/* 0xFD U+D9 I8=FE U with GRAVE */ (1U<<_CC_ALPHA)|(1U<<_CC_ALPHANUMERIC)|(1U<<_CC_CASED)|(1U<<_CC_CHARNAME_CONT)|(1U<<_CC_GRAPH)|(1U<<_CC_IDFIRST)|(1U<<_CC_IS_IN_SOME_FOLD)|(1U<<_CC_PRINT)|(1U<<_CC_UPPER)|(1U<<_CC_WORDCHAR), +/* 0xFE U+DA I8=FF U with ACUTE */ (1U<<_CC_ALPHA)|(1U<<_CC_ALPHANUMERIC)|(1U<<_CC_CASED)|(1U<<_CC_CHARNAME_CONT)|(1U<<_CC_GRAPH)|(1U<<_CC_IDFIRST)|(1U<<_CC_IS_IN_SOME_FOLD)|(1U<<_CC_PRINT)|(1U<<_CC_UPPER)|(1U<<_CC_WORDCHAR), /* 0xFF U+9F APC */ (1U<<_CC_CNTRL)|(1U<<_CC_QUOTEMETA) #endif /* EBCDIC 037 */ diff --git a/gnu/usr.bin/perl/lib/AnyDBM_File.pm b/gnu/usr.bin/perl/lib/AnyDBM_File.pm index 3b41a4a100b..4153af2de2d 100644 --- a/gnu/usr.bin/perl/lib/AnyDBM_File.pm +++ b/gnu/usr.bin/perl/lib/AnyDBM_File.pm @@ -22,6 +22,8 @@ __END__ AnyDBM_File - provide framework for multiple DBMs +NDBM_File, DB_File, GDBM_File, SDBM_File, ODBM_File - various DBM implementations + =head1 SYNOPSIS use AnyDBM_File; diff --git a/gnu/usr.bin/perl/lib/B/Deparse-core.t b/gnu/usr.bin/perl/lib/B/Deparse-core.t index 991412a1dda..48d23f7dced 100644 --- a/gnu/usr.bin/perl/lib/B/Deparse-core.t +++ b/gnu/usr.bin/perl/lib/B/Deparse-core.t @@ -36,18 +36,19 @@ BEGIN { use strict; use Test::More; -plan tests => 3904; use feature (sprintf(":%vd", $^V)); # to avoid relying on the feature # logic to add CORE:: use B::Deparse; -my $deparse = new B::Deparse; +my $deparse = B::Deparse->new(); my %SEEN; -my %SEEN_STRENGH; +my %SEEN_STRENGTH; -# for a given keyword, create a sub of that name, then -# deparse "() = $expr", and see if it matches $expected_expr +# For a given keyword, create a sub of that name, +# then deparse 3 different assignment expressions +# using that keyword. See if the $expr we get back +# matches $expected_expr. sub testit { my ($keyword, $expr, $expected_expr, $lexsub) = @_; @@ -55,56 +56,52 @@ sub testit { $expected_expr //= $expr; $SEEN{$keyword} = 1; - # lex=0: () = foo($a,$b,$c) # lex=1: my ($a,$b); () = foo($a,$b,$c) # lex=2: () = foo(my $a,$b,$c) for my $lex (0, 1, 2) { - if ($lex) { - next if $keyword =~ /local|our|state|my/; - } - my $vars = $lex == 1 ? 'my($a, $b, $c, $d, $e);' . "\n " : ""; - - if ($lex == 2) { - my $repl = 'my $a'; - if ($expr =~ 'CORE::do') { - # do foo() is a syntax error, so B::Deparse emits - # do (foo()), but does not distinguish between foo and my, - # because it is too complicated. - $repl = '(my $a)'; - } - s/\$a/$repl/ for $expr, $expected_expr; - } - - my $desc = "$keyword: lex=$lex $expr => $expected_expr"; - $desc .= " (lex sub)" if $lexsub; + next if ($lex and $keyword =~ /local|our|state|my/); + my $vars = $lex == 1 ? 'my($a, $b, $c, $d, $e);' . "\n " : ""; + + if ($lex == 2) { + my $repl = 'my $a'; + if ($expr =~ 'CORE::do') { + # do foo() is a syntax error, so B::Deparse emits + # do (foo()), but does not distinguish between foo and my, + # because it is too complicated. + $repl = '(my $a)'; + } + s/\$a/$repl/ for $expr, $expected_expr; + } + + my $desc = "$keyword: lex=$lex $expr => $expected_expr"; + $desc .= " (lex sub)" if $lexsub; my $code; - my $code_ref; - if ($lexsub) { - package lexsubtest; - no warnings 'experimental::lexical_subs', 'experimental::isa'; - use feature 'lexical_subs'; - no strict 'vars'; + my $code_ref; + if ($lexsub) { + package lexsubtest; + no warnings 'experimental::lexical_subs'; + use feature 'lexical_subs'; + no strict 'vars'; $code = "sub { state sub $keyword; ${vars}() = $expr }"; - $code = "use feature 'isa';\n$code" if $keyword eq "isa"; - $code_ref = eval $code - or die "$@ in $expr"; - } - else { - package test; - no warnings 'experimental::isa'; - use subs (); - import subs $keyword; - $code = "no strict 'vars'; sub { ${vars}() = $expr }"; - $code = "use feature 'isa';\n$code" if $keyword eq "isa"; - $code_ref = eval $code - or die "$@ in $expr"; - } - - my $got_text = $deparse->coderef2text($code_ref); - - unless ($got_text =~ / + $code = "use feature 'isa';\n$code" if $keyword eq "isa"; + $code = "use feature 'switch';\n$code" if $keyword eq "break"; + $code_ref = eval $code or die "$@ in $expr"; + } + else { + package test; + use subs (); + import subs $keyword; + $code = "no strict 'vars'; sub { ${vars}() = $expr }"; + $code = "use feature 'isa';\n$code" if $keyword eq "isa"; + $code = "use feature 'switch';\n$code" if $keyword eq "break"; + $code_ref = eval $code or die "$@ in $expr"; + } + + my $got_text = $deparse->coderef2text($code_ref); + + unless ($got_text =~ / package (?:lexsub)?test; (?: BEGIN \{\$\{\^WARNING_BITS\} = "[^"]+"\} )? use strict 'refs', 'subs'; @@ -112,14 +109,14 @@ sub testit { (?: (?:CORE::)?state sub \w+; )? \Q$vars\E\(\) = (.*) \}/s) { - ::fail($desc); - ::diag("couldn't extract line from boilerplate\n"); - ::diag($got_text); - return; - } - - my $got_expr = $1; - is $got_expr, $expected_expr, $desc + ::fail($desc); + ::diag("couldn't extract line from boilerplate\n"); + ::diag($got_text); + return; + } + + my $got_expr = $1; + is $got_expr, $expected_expr, $desc or ::diag("ORIGINAL CODE:\n$code");; } } @@ -128,14 +125,13 @@ sub testit { # Deparse can't distinguish 'and' from '&&' etc my %infix_map = qw(and && or ||); - -# test a keyword that is a binary infix operator, like 'cmp'. +# Test a keyword that is a binary infix operator, like 'cmp'. # $parens - "$a op $b" is deparsed as "($a op $b)" # $strong - keyword is strong sub do_infix_keyword { my ($keyword, $parens, $strong) = @_; - $SEEN_STRENGH{$keyword} = $strong; + $SEEN_STRENGTH{$keyword} = $strong; my $expr = "(\$a $keyword \$b)"; my $nkey = $infix_map{$keyword} // $keyword; my $expr = "(\$a $keyword \$b)"; @@ -149,17 +145,17 @@ sub do_infix_keyword { testit $keyword, "(\$a CORE::$keyword \$b)", $exp, 1; testit $keyword, "(\$a $keyword \$b)", $exp, 1; if (!$strong) { - # B::Deparse fully qualifies any sub whose name is a keyword, - # imported or not, since the importedness may not be reproduced by - # the deparsed code. x is special. - my $pre = "test::" x ($keyword ne 'x'); - testit $keyword, "$keyword(\$a, \$b)", "$pre$keyword(\$a, \$b);"; + # B::Deparse fully qualifies any sub whose name is a keyword, + # imported or not, since the importedness may not be reproduced by + # the deparsed code. x is special. + my $pre = "test::" x ($keyword ne 'x'); + testit $keyword, "$keyword(\$a, \$b)", "$pre$keyword(\$a, \$b);"; } testit $keyword, "$keyword(\$a, \$b)", "$keyword(\$a, \$b);", 1; } -# test a keyword that is as tandard op/function, like 'index(...)'. -# narg - how many args to test it with +# Test a keyword that is a standard op/function, like 'index(...)'. +# $narg - how many args to test it with # $parens - "foo $a, $b" is deparsed as "foo($a, $b)" # $dollar - an extra '$_' arg will appear in the deparsed output # $strong - keyword is strong @@ -168,33 +164,38 @@ sub do_infix_keyword { sub do_std_keyword { my ($keyword, $narg, $parens, $dollar, $strong) = @_; - $SEEN_STRENGH{$keyword} = $strong; + $SEEN_STRENGTH{$keyword} = $strong; for my $core (0,1) { # if true, add CORE:: to keyword being deparsed - for my $lexsub (0,1) { # if true, define lex sub - my @code; - for my $do_exp(0, 1) { # first create expr, then expected-expr - my @args = map "\$$_", (undef,"a".."z")[1..$narg]; - push @args, '$_' - if $dollar && $do_exp && ($strong && !$lexsub or $core); - my $args = join(', ', @args); - # XXX $lex_parens is temporary, until lex subs are - # deparsed properly. - my $lex_parens = - !$core && $do_exp && $lexsub && $keyword ne 'map'; - $args = ((!$core && !$strong) || $parens || $lex_parens) - ? "($args)" - : @args ? " $args" : ""; - push @code, (($core && !($do_exp && $strong)) - ? "CORE::" - : $lexsub && $do_exp - ? "CORE::" x $core - : $do_exp && !$core && !$strong ? "test::" : "") - . "$keyword$args;"; - } - # code[0]: to run; code[1]: expected - testit $keyword, @code, $lexsub; - } + for my $lexsub (0,1) { # if true, define lex sub + my @code; + for my $do_exp(0, 1) { # first create expr, then expected-expr + my @args = map "\$$_", (undef,"a".."z")[1..$narg]; + push @args, '$_' + if $dollar && $do_exp && ($strong && !$lexsub or $core); + my $args = join(', ', @args); + # XXX $lex_parens is temporary, until lex subs are + # deparsed properly. + my $lex_parens = + !$core && $do_exp && $lexsub && $keyword ne 'map'; + $args = ((!$core && !$strong) || $parens || $lex_parens) + ? "($args)" + : @args + ? " $args" + : ""; + push @code, ( + ($core && !($do_exp && $strong)) + ? "CORE::" + : $lexsub && $do_exp + ? "CORE::" x $core + : $do_exp && !$core && !$strong + ? "test::" + : "" + ) . "$keyword$args;"; + } + # code[0]: to run; code[1]: expected + testit $keyword, @code, $lexsub; + } } } @@ -217,18 +218,18 @@ while () { die "unrecognised flag(s): '$flags'" unless $flags =~ /^-?$/; if ($args eq 'B') { # binary infix - die "$keyword: binary (B) op can't have '\$' flag\\n" if $dollar; - die "$keyword: binary (B) op can't have '1' flag\\n" if $invert1; - do_infix_keyword($keyword, $parens, $strong); + die "$keyword: binary (B) op can't have '\$' flag\\n" if $dollar; + die "$keyword: binary (B) op can't have '1' flag\\n" if $invert1; + do_infix_keyword($keyword, $parens, $strong); } else { - my @narg = split //, $args; - for my $n (0..$#narg) { - my $narg = $narg[$n]; - my $p = $parens; - $p = !$p if ($n == 0 && $invert1); - do_std_keyword($keyword, $narg, $p, (!$n && $dollar), $strong); - } + my @narg = split //, $args; + for my $n (0..$#narg) { + my $narg = $narg[$n]; + my $p = $parens; + $p = !$p if ($n == 0 && $invert1); + do_std_keyword($keyword, $narg, $p, (!$n && $dollar), $strong); + } } } @@ -361,9 +362,12 @@ my %not_tested = map { $_ => 1} qw( END INIT UNITCHECK + catch default + defer else elsif + finally for foreach format @@ -380,6 +384,7 @@ my %not_tested = map { $_ => 1} qw( require s tr + try unless until use @@ -388,8 +393,6 @@ my %not_tested = map { $_ => 1} qw( y ); - - # Sanity check against keyword data: # make sure we haven't missed any keywords, # and that we got the strength right. @@ -413,7 +416,7 @@ SKIP: diag("keyword '$key' seen in $file, but not tested here!!"); $pass = 0; } - if (exists $SEEN_STRENGH{$key} and $SEEN_STRENGH{$key} != $strength) { + if (exists $SEEN_STRENGTH{$key} and $SEEN_STRENGTH{$key} != $strength) { diag("keyword '$key' strengh as seen in $file doen't match here!!"); $pass = 0; } @@ -431,7 +434,7 @@ SKIP: ok($pass, "sanity checks"); } - +done_testing(); __DATA__ # @@ -638,7 +641,7 @@ sin 01 $ sleep 01 - socket 4 p socketpair 5 p -sort @ p1+ +sort 12 p+ # split handled specially # splice handled specially sprintf 123 p diff --git a/gnu/usr.bin/perl/lib/B/Deparse.pm b/gnu/usr.bin/perl/lib/B/Deparse.pm index 7bf1cd51c36..7c2ecf992c0 100644 --- a/gnu/usr.bin/perl/lib/B/Deparse.pm +++ b/gnu/usr.bin/perl/lib/B/Deparse.pm @@ -8,6 +8,7 @@ # but essentially none of his code remains. package B::Deparse; +use strict; use Carp; use B qw(class main_root main_start main_cv svref_2object opnumber perlstring OPf_WANT OPf_WANT_VOID OPf_WANT_SCALAR OPf_WANT_LIST @@ -21,7 +22,7 @@ use B qw(class main_root main_start main_cv svref_2object opnumber perlstring OPpPADHV_ISKEYS OPpRV2HV_ISKEYS OPpCONCAT_NESTED OPpMULTICONCAT_APPEND OPpMULTICONCAT_STRINGIFY OPpMULTICONCAT_FAKE - OPpTRUEBOOL OPpINDEX_BOOLNEG + OPpTRUEBOOL OPpINDEX_BOOLNEG OPpDEFER_FINALLY SVf_IOK SVf_NOK SVf_ROK SVf_POK SVpad_OUR SVf_FAKE SVs_RMG SVs_SMG SVs_PADTMP SVpad_TYPED CVf_METHOD CVf_LVALUE @@ -52,8 +53,7 @@ use B qw(class main_root main_start main_cv svref_2object opnumber perlstring MDEREF_SHIFT ); -$VERSION = '1.54'; -use strict; +our $VERSION = '1.64'; our $AUTOLOAD; use warnings (); require feature; @@ -272,7 +272,8 @@ BEGIN { BEGIN { for (qw[ const stringify rv2sv list glob pushmark null aelem kvaslice kvhslice padsv argcheck - nextstate dbstate rv2av rv2hv helem custom ]) { + nextstate dbstate rv2av rv2hv helem pushdefer leavetrycatch + custom ]) { eval "sub OP_\U$_ () { " . opnumber($_) . "}" }} @@ -280,6 +281,7 @@ BEGIN { for (qw[ const stringify rv2sv list glob pushmark null aelem # possibly undoing optimisations along the way. sub DEBUG { 0 } +use if DEBUG, 'Data::Dumper'; sub _pessimise_walk { my ($self, $startop) = @_; @@ -446,7 +448,7 @@ sub next_todo { # emit the sub. my @text; my $flags = $name->FLAGS; - push @text, + my $category = !$cv || $seq <= $name->COP_SEQ_RANGE_LOW ? $self->keyword($flags & SVpad_OUR ? "our" @@ -454,6 +456,24 @@ sub next_todo { ? "state" : "my") . " " : ""; + + # Skip lexical 'state' subs imported from the builtin:: + # package, since they are created automatically by + # use builtin "foo" + if ($cv && $category =~ /\bstate\b/) { + my $globname; + my $gv = $cv->GV; + if ( + $gv + && defined (($globname = $gv->object_2svref)) + && $$globname =~ /^\*builtin::/ + ) { + return ''; + } + } + + push @text, $category; + # XXX We would do $self->keyword("sub"), but ‘my CORE::sub’ # doesn’t work and ‘my sub’ ignores a &sub in scope. I.e., # we have a core bug here. @@ -821,16 +841,6 @@ sub new { return $self; } -{ - # Mask out the bits that L uses - my $WARN_MASK; - BEGIN { - $WARN_MASK = $warnings::Bits{all} | $warnings::DeadBits{all}; - } - sub WARN_MASK () { - return $WARN_MASK; - } -} # Initialise the contextual information, either from # defaults provided with the ambient_pragmas method, @@ -838,9 +848,7 @@ sub new { sub init { my $self = shift; - $self->{'warnings'} = defined ($self->{'ambient_warnings'}) - ? $self->{'ambient_warnings'} & WARN_MASK - : undef; + $self->{'warnings'} = $self->{'ambient_warnings'}; $self->{'hints'} = $self->{'ambient_hints'}; $self->{'hinthash'} = $self->{'ambient_hinthash'}; @@ -1731,6 +1739,12 @@ sub scopeop { $body = $self->deparse($body, 1); return "$body $name $cond"; } + elsif($kid->type == OP_PUSHDEFER && + $kid->private & OPpDEFER_FINALLY && + $kid->sibling->type == OP_LEAVETRYCATCH && + null($kid->sibling->sibling)) { + return $self->pp_leavetrycatch_with_finally($kid->sibling, $kid, $cx); + } } else { $kid = $op->first; } @@ -2074,7 +2088,7 @@ sub pragmata { my $warnings = $op->warnings; my $warning_bits; if ($warnings->isa("B::SPECIAL") && $$warnings == 4) { - $warning_bits = $warnings::Bits{"all"} & WARN_MASK; + $warning_bits = $warnings::Bits{"all"}; } elsif ($warnings->isa("B::SPECIAL") && $$warnings == 5) { $warning_bits = $warnings::NONE; @@ -2083,14 +2097,24 @@ sub pragmata { $warning_bits = undef; } else { - $warning_bits = $warnings->PV & WARN_MASK; + $warning_bits = $warnings->PV; } - if (defined ($warning_bits) and - !defined($self->{warnings}) || $self->{'warnings'} ne $warning_bits) { - push @text, - $self->declare_warnings($self->{'warnings'}, $warning_bits); - $self->{'warnings'} = $warning_bits; + my ($w1, $w2); + # The number of valid bit positions may have grown (by a byte or + # more) since the last warnings state, by custom warnings + # categories being registered in the meantime. Normalise the + # bitmasks first so they may be fairly compared. + $w1 = defined($self->{warnings}) + ? warnings::_expand_bits($self->{warnings}) + : undef; + $w2 = defined($warning_bits) + ? warnings::_expand_bits($warning_bits) + : undef; + + if (defined($w2) and !defined($w1) || $w1 ne $w2) { + push @text, $self->declare_warnings($w1, $w2); + $self->{'warnings'} = $w2; } my $hints = $op->hints; @@ -2175,13 +2199,13 @@ sub pp_nextstate { sub declare_warnings { my ($self, $from, $to) = @_; $from //= ''; - my $all = (warnings::bits("all") & WARN_MASK); - unless ((($from & WARN_MASK) & ~$all) =~ /[^\0]/) { + my $all = warnings::bits("all"); + unless (($from & ~$all) =~ /[^\0]/) { # no FATAL bits need turning off - if ( ($to & WARN_MASK) eq $all) { + if ( $to eq $all) { return $self->keyword("use") . " warnings;\n"; } - elsif (($to & WARN_MASK) eq ("\0"x length($to) & WARN_MASK)) { + elsif ($to eq ("\0"x length($to))) { return $self->keyword("no") . " warnings;\n"; } } @@ -2303,6 +2327,10 @@ my %feature_keywords = ( evalbytes=>'evalbytes', __SUB__ => '__SUB__', fc => 'fc', + try => 'try', + catch => 'try', + finally => 'try', + defer => 'defer', ); # keywords that are strong and also have a prototype @@ -2471,7 +2499,7 @@ sub unop { return $self->maybe_parens( $self->keyword($name) . " $kid", $cx, 16 ); - } + } return $self->maybe_parens_unop($name, $kid, $cx); } else { return $self->maybe_parens( @@ -2511,7 +2539,7 @@ sub pp_each { unop(@_, "each") } sub pp_values { unop(@_, "values") } sub pp_keys { unop(@_, "keys") } { no strict 'refs'; *{"pp_r$_"} = *{"pp_$_"} for qw< keys each values >; } -sub pp_boolkeys { +sub pp_boolkeys { # no name because its an optimisation op that has no keyword unop(@_,""); } @@ -3950,7 +3978,21 @@ sub loop_common { } else { $ary = $self->deparse($ary, 1); } - if (null $var) { + + if ($enter->flags & OPf_PARENS) { + # for my ($x, $y, ...) ... + # for my ($foo, $bar) () stores the count (less 1) in the targ of + # the ITER op. For the degenerate case of 1 var ($x), the + # TARG is zero, so it works anyway + my $iter_targ = $kid->first->first->targ; + my @vars; + my $targ = $enter->targ; + while ($iter_targ-- >= 0) { + push @vars, $self->padname_sv($targ)->PVX; + ++$targ; + } + $var = 'my (' . join(', ', @vars) . ')'; + } elsif (null $var) { $var = $self->pp_padsv($enter, 1, 1); } elsif ($var->name eq "rv2gv") { $var = $self->pp_rv2sv($var, 1); @@ -4054,6 +4096,47 @@ sub pp_leavetry { return "eval {\n\t" . $self->pp_leave(@_) . "\n\b}"; } +sub pp_leavetrycatch_with_finally { + my $self = shift; + my ($op, $finallyop) = @_; + + # Expect that the first three kids should be (entertrycatch, poptry, catch) + my $entertrycatch = $op->first; + $entertrycatch->name eq "entertrycatch" or die "Expected entertrycatch as first child of leavetrycatch"; + + my $tryblock = $entertrycatch->sibling; + $tryblock->name eq "poptry" or die "Expected poptry as second child of leavetrycatch"; + + my $catch = $tryblock->sibling; + $catch->name eq "catch" or die "Expected catch as third child of leavetrycatch"; + + my $catchblock = $catch->first->sibling; + my $name = $catchblock->name; + unless ($name eq "scope" || $name eq "leave") { + die "Expected scope or leave as second child of catch, got $name instead"; + } + + my $trycode = scopeop(0, $self, $tryblock); + my $catchvar = $self->padname($catch->targ); + my $catchcode = $name eq 'scope' ? scopeop(0, $self, $catchblock) + : scopeop(1, $self, $catchblock); + + my $finallycode = ""; + if($finallyop) { + my $body = $self->deparse($finallyop->first->first); + $finallycode = "\nfinally {\n\t$body\n\b}"; + } + + return "try {\n\t$trycode\n\b}\n" . + "catch($catchvar) {\n\t$catchcode\n\b}$finallycode\cK"; +} + +sub pp_leavetrycatch { + my $self = shift; + my ($op, @args) = @_; + return $self->pp_leavetrycatch_with_finally($op, undef, @args); +} + sub _op_is_or_was { my ($op, $expect_type) = @_; my $type = $op->type; @@ -5267,7 +5350,7 @@ sub re_unback { # the insane complexity here is due to the behaviour of "\c\" $str =~ s/ # these two lines ensure that the backslash we're about to - # remove isn't preceeded by something which makes it part + # remove isn't preceded by something which makes it part # of a \c (^ | [^\\] | \\c\\) # $1 @@ -5380,9 +5463,15 @@ sub const { return $self->const_dumper($sv, $cx); } if (class($sv) eq "SPECIAL") { - # sv_undef, sv_yes, sv_no - return $$sv == 3 ? $self->maybe_parens("!1", $cx, 21) - : ('undef', '1')[$$sv-1]; + # PL_sv_undef etc + # return yes/no as boolean expressions rather than integers to + # preserve their boolean-ness + return + $$sv == 1 ? 'undef' : # PL_sv_undef + $$sv == 2 ? $self->maybe_parens("!0", $cx, 21) : # PL_sv_yes + $$sv == 3 ? $self->maybe_parens("!1", $cx, 21) : # PL_sv_no + $$sv == 7 ? '0' : # PL_sv_zero + '"???"'; } if (class($sv) eq "NULL") { return 'undef'; @@ -5403,10 +5492,10 @@ sub const { if ($nv == 0) { if (pack("F", $nv) eq pack("F", 0)) { # positive zero - return "0"; + return "0.0"; } else { # negative zero - return $self->maybe_parens("-.0", $cx, 21); + return $self->maybe_parens("-0.0", $cx, 21); } } elsif (1/$nv == 0) { if ($nv > 0) { @@ -5443,6 +5532,10 @@ sub const { return $self->maybe_parens("$mant * 2**$exp", $cx, 19); } } + + # preserve NV-ness: output as NNN.0 rather than NNN + $str .= ".0" if $str =~ /^-?[0-9]+$/; + $str = $self->maybe_parens($str, $cx, 21) if $nv < 0; return $str; } elsif ($sv->FLAGS & SVf_ROK && $sv->can("RV")) { @@ -5658,38 +5751,24 @@ sub double_delim { # Escape a characrter. # Only used by tr///, so backslashes hyphens -sub pchr { # ASCII +sub pchr { my($n) = @_; - if ($n == ord '\\') { - return '\\\\'; - } elsif ($n == ord "-") { - return "\\-"; - } elsif (utf8::native_to_unicode($n) >= utf8::native_to_unicode(ord(' ')) - and utf8::native_to_unicode($n) <= utf8::native_to_unicode(ord('~'))) - { - # I'm presuming a regex is not ok here, otherwise we could have used - # /[[:print:]]/a to get here - return chr($n); - } elsif ($n == ord "\a") { - return '\\a'; - } elsif ($n == ord "\b") { - return '\\b'; - } elsif ($n == ord "\t") { - return '\\t'; - } elsif ($n == ord "\n") { - return '\\n'; - } elsif ($n == ord "\e") { - return '\\e'; - } elsif ($n == ord "\f") { - return '\\f'; - } elsif ($n == ord "\r") { - return '\\r'; - } elsif ($n >= ord("\cA") and $n <= ord("\cZ")) { - return '\\c' . $unctrl{chr $n}; - } else { -# return '\x' . sprintf("%02x", $n); - return '\\' . sprintf("%03o", $n); - } + return sprintf("\\x{%X}", $n) if $n > 255; + return '\\\\' if $n == ord '\\'; + return "\\-" if $n == ord "-"; + # I'm presuming a regex is not ok here, otherwise we could have used + # /[[:print:]]/a to get here + return chr($n) if ( utf8::native_to_unicode($n) + >= utf8::native_to_unicode(ord(' ')) + and utf8::native_to_unicode($n) + <= utf8::native_to_unicode(ord('~'))); + + my $mnemonic_pos = index("\a\b\e\f\n\r\t", chr($n)); + return "\\" . substr("abefnrt", $mnemonic_pos, 1) if $mnemonic_pos >= 0; + + return '\\c' . $unctrl{chr $n} if $n >= ord("\cA") and $n <= ord("\cZ"); +# return '\x' . sprintf("%02x", $n); + return '\\' . sprintf("%03o", $n); } # Convert a list of characters into a string suitable for tr/// search or @@ -5765,92 +5844,170 @@ sub tr_decode_byte { return ($from, $to); } -sub tr_chr { - my $x = shift; - if ($x == ord "-") { - return "\\-"; - } elsif ($x == ord "\\") { - return "\\\\"; - } else { - return chr $x; +my $infinity = ~0 >> 1; # IV_MAX + +sub tr_append_to_invlist { + my ($list_ref, $current, $next) = @_; + + # Appends the range $current..$next-1 to the inversion list $list_ref + + printf STDERR "%d: %d..%d %s", __LINE__, $current, $next, Dumper $list_ref if DEBUG; + + if (@$list_ref && $list_ref->[-1] == $current) { + + # The new range extends the current final one. If it is a finite + # rane, replace the current final by the new ending. + if (defined $next) { + $list_ref->[-1] = $next; + } + else { + # The new range extends to infinity, which means the current end + # of the inversion list is dangling. Removing it causes things to + # work. + pop @$list_ref; + } + } + else { # The new range starts after the current final one; add it as a + # new range + push @$list_ref, $current; + push @$list_ref, $next if defined $next; } + + print STDERR __LINE__, ": ", Dumper $list_ref if DEBUG; } -sub tr_invmap { - my ($invlist_ref, $map_ref) = @_; +sub tr_invlist_to_string { + my ($list_ref, $to_complement) = @_; - my $infinity = ~0 >> 1; # IV_MAX - my $from = ""; - my $to = ""; + # Stringify the inversion list $list_ref, possibly complementing it first. + # CAUTION: this can modify $list_ref. - for my $i (0.. @$invlist_ref - 1) { - my $this_from = $invlist_ref->[$i]; - my $map = $map_ref->[$i]; - my $upper = ($i < @$invlist_ref - 1) - ? $invlist_ref->[$i+1] - : $infinity; - my $range = $upper - $this_from - 1; - if (DEBUG) { - print STDERR "i=$i, from=$this_from, upper=$upper, range=$range\n"; + print STDERR __LINE__, ": ", Dumper $list_ref if DEBUG; + + if ($to_complement) { + + # Complementing an inversion list is done by prepending a 0 if it + # doesn't have one there already; otherwise removing the leading 0. + if ($list_ref->[0] == 0) { + shift @$list_ref; } - next if $map == ~0; - next if $map == ~0 - 1; - $from .= tr_chr($this_from); - $to .= tr_chr($map); - next if $range == 0; # Single code point - if ($range == 1) { # Adjacent code points - $from .= tr_chr($this_from + 1); - $to .= tr_chr($map + 1); + else { + unshift @$list_ref, 0; } - elsif ($upper != $infinity) { - $from .= "-" . tr_chr($this_from + $range); - $to .= "-" . tr_chr($map + $range); + + print STDERR __LINE__, ": ", Dumper $list_ref if DEBUG; + } + + my $output = ""; + + # Every other element is in the list. + for (my $i = 0; $i < @$list_ref; $i += 2) { + my $base = $list_ref->[$i]; + $output .= pchr($base); + last unless defined $list_ref->[$i+1]; + + # The beginning of the next element starts the range of items not in + # the list. + my $upper = $list_ref->[$i+1] - 1; + my $range = $upper - $base; + $output .= '-' if $range > 1; # Adjacent characters don't have a + # minus, though it would be legal to do + # so + $output .= pchr($upper) if $range > 0; + } + + print STDERR __LINE__, ": tr_invlist_to_string() returning '$output'\n" + if DEBUG; + return $output; +} + +my $unmapped = ~0; +my $special_handling = ~0 - 1; + +sub dump_invmap { + my ($invlist_ref, $map_ref) = @_; + + for my $i (0 .. @$invlist_ref - 1) { + printf STDERR "[%d]\t%x\t", $i, $invlist_ref->[$i]; + my $map = $map_ref->[$i]; + if ($map == $unmapped) { + print STDERR "TR_UNMAPPED\n"; + } + elsif ($map == $special_handling) { + print STDERR "TR_SPECIAL\n"; } else { - $from .= "-INFTY"; - $to .= "-INFTY"; + printf STDERR "%x\n", $map; } } - - return ($from, $to); } sub tr_decode_utf8 { my($tr_av, $flags) = @_; - printf STDERR "flags=0x%x\n", $flags if DEBUG; + + printf STDERR "\n%s: %d: flags=0x%x\n", __FILE__, __LINE__, $flags if DEBUG; + my $invlist = $tr_av->ARRAYelt(0); my @invlist = unpack("J*", $invlist->PV); my @map = unpack("J*", $tr_av->ARRAYelt(1)->PV); - if (DEBUG) { - for my $i (0 .. @invlist - 1) { - printf STDERR "[%d]\t%x\t", $i, $invlist[$i]; - my $map = $map[$i]; - if ($map == ~0) { - print STDERR "TR_UNMAPPED\n"; - } - elsif ($map == ~0 - 1) { - print STDERR "TR_SPECIAL\n"; - } - else { - printf STDERR "%x\n", $map; - } + dump_invmap(\@invlist, \@map) if DEBUG; + + my @from; + my @to; + + # Go through the whole map + for (my $i = 0; $i < @invlist; $i++) { + my $map = $map[$i]; + printf STDERR "%d: i=%d, source=%x, map=%x\n", + __LINE__, $i, $invlist[$i], $map if DEBUG; + + # Ignore any lines that are unmapped + next if $map == $unmapped; + + # Calculate this component of the mapping; First the lhs + my $this_from = $invlist[$i]; + my $next_from = $invlist[$i+1] if $i < @invlist - 1; + + # The length of the rhs is the same as the lhs, except when special + my $next_map = $map - $this_from + $next_from + if $map != $special_handling && defined $next_from; + + if (DEBUG) { + printf STDERR "%d: i=%d, from=%x, to=%x", + __LINE__, $i, $this_from, $map; + printf STDERR ", next_from=%x,", $next_from if defined $next_from; + printf STDERR ", next_map=%x", $next_map if defined $next_map; + print STDERR "\n"; } - } - my ($from, $to) = tr_invmap(\@invlist, \@map); + # Add the lhs. + tr_append_to_invlist(\@from, $this_from, $next_from); - if ($flags & OPpTRANS_COMPLEMENT) { - shift @map; - pop @invlist; - my $throw_away; - ($from, $throw_away) = tr_invmap(\@invlist, \@map); + # And, the rhs; special handling doesn't get output as it really is an + # unmatched rhs + tr_append_to_invlist(\@to, $map, $next_map) if $map != $special_handling; } - if (DEBUG) { - print STDERR "Returning ", escape_str($from), "/", - escape_str($to), "\n"; + # Done with the input. + + my $to; + if (join("", @from) eq join("", @to)) { + + # the rhs is suppressed if identical to the left. That's because + # tr/ABC/ABC/ can be written as tr/ABC//. (Do this comparison before + # any complementing) + $to = ""; + } + else { + $to = tr_invlist_to_string(\@to, 0); # rhs not complemented } + + my $from = tr_invlist_to_string(\@from, + ($flags & OPpTRANS_COMPLEMENT) != 0); + + print STDERR "Returning ", escape_str($from), "/", + escape_str($to), "\n" if DEBUG; return (escape_str($from), escape_str($to)); } @@ -6486,6 +6643,33 @@ sub pp_argdefelem { } +sub pp_pushdefer { + my $self = shift; + my($op, $cx) = @_; + # defer block body is stored in the ->first of an OP_NULL that is + # ->first of OP_PUSHDEFER + my $body = $self->deparse($op->first->first); + return "defer {\n\t$body\n\b}\cK"; +} + +sub builtin1 { + my $self = shift; + my ($op, $cx, $name) = @_; + my $arg = $self->deparse($op->first); + # TODO: work out if lexical alias is present somehow... + return "builtin::$name($arg)"; +} + +sub pp_is_bool { $_[0]->maybe_targmy(@_[1,2], \&builtin1, "is_bool"); } +sub pp_is_weak { $_[0]->maybe_targmy(@_[1,2], \&builtin1, "is_weak"); } +sub pp_weaken { builtin1(@_, "weaken"); } +sub pp_unweaken { builtin1(@_, "unweaken"); } +sub pp_blessed { builtin1(@_, "blessed"); } +sub pp_refaddr { $_[0]->maybe_targmy(@_[1,2], \&builtin1, "refaddr"); } +sub pp_reftype { $_[0]->maybe_targmy(@_[1,2], \&builtin1, "reftype"); } +sub pp_ceil { $_[0]->maybe_targmy(@_[1,2], \&builtin1, "ceil"); } +sub pp_floor { $_[0]->maybe_targmy(@_[1,2], \&builtin1, "floor"); } + 1; __END__ diff --git a/gnu/usr.bin/perl/lib/B/Deparse.t b/gnu/usr.bin/perl/lib/B/Deparse.t index 4b7601d365e..e7a76c81fee 100644 --- a/gnu/usr.bin/perl/lib/B/Deparse.t +++ b/gnu/usr.bin/perl/lib/B/Deparse.t @@ -413,9 +413,8 @@ like runperl(stderr => 1, switches => [ '-MO=-qq,Deparse', $path ], qr/sub f\s*\(\$\)\s*\{\s*\}/, 'predeclared prototyped subs'; like runperl(stderr => 1, switches => [ '-MO=-qq,Deparse', $path ], - prog => 'use Scalar::Util q-weaken-; - sub f($); - BEGIN { weaken($_=\$::{f}) }'), + prog => 'sub f($); + BEGIN { use builtin q-weaken-; weaken($_=\$::{f}) }'), qr/sub f\s*\(\$\)\s*;/, 'prototyped stub with weak reference to the stash entry'; like runperl(stderr => 1, switches => [ '-MO=-qq,Deparse', $path ], @@ -535,7 +534,7 @@ like runperl(stderr => 1, switches => [ '-MO=-qq,Deparse', $path ], is runperl(stderr => 1, switches => [ '-MO=-qq,Deparse', $path ], prog => 'BEGIN { $::{f}=\!0 }'), - "sub BEGIN {\n \$main::{'f'} = \\1;\n}\n", + "sub BEGIN {\n \$main::{'f'} = \\!0;\n}\n", '&PL_sv_yes constant (used to croak)'; is runperl(stderr => 1, switches => [ '-MO=-qq,Deparse', $path, '-T' ], @@ -1496,6 +1495,49 @@ tr/\000-\375/A-C/cds; tr/\000-\375/A-D/cds; tr/\000-\375/A-I/cds; #### +# tr/// with all the flags: empty replacement +tr/\x{101}-\x{106}//; +tr/\x{101}-\x{106}//c; +tr/\x{101}-\x{106}//d; +tr/\x{101}-\x{106}//s; +tr/\x{101}-\x{106}//cd; +tr/\x{101}-\x{106}//ds; +tr/\x{101}-\x{106}//cs; +tr/\x{101}-\x{106}//cds; +tr/\x{101}-\x{106}//r; +#### +# tr/// with all the flags: short replacement +tr/\x{101}-\x{106}/\x{111}/; +tr/\x{101}-\x{106}/\x{111}/c; +tr/\x{101}-\x{106}/\x{111}/d; +tr/\x{101}-\x{106}/\x{111}/s; +tr/\x{101}-\x{106}/\x{111}/cd; +tr/\x{101}-\x{106}/\x{111}/ds; +tr/\x{101}-\x{106}/\x{111}/cs; +tr/\x{101}-\x{106}/\x{111}/cds; +tr/\x{101}-\x{106}/\x{111}/r; +#### +# tr/// with all the flags: equal length replacement +tr/\x{101}-\x{106}/\x{111}-\x{116}/; +tr/\x{101}-\x{106}/\x{111}-\x{116}/c; +tr/\x{101}-\x{106}/\x{111}-\x{116}/s; +tr/\x{101}-\x{106}/\x{111}-\x{116}/cs; +tr/\x{101}-\x{106}/\x{111}-\x{116}/r; +#### +# tr across 255/256 boundary, complemented +tr/\cA-\x{100}/AB/c; +tr/\cA-\x{100}/A-C/c; +tr/\cA-\x{100}/A-D/c; +tr/\cA-\x{100}/A-I/c; +tr/\cA-\x{100}/AB/cd; +tr/\cA-\x{100}/A-C/cd; +tr/\cA-\x{100}/A-D/cd; +tr/\cA-\x{100}/A-I/cd; +tr/\cA-\x{100}/AB/cds; +tr/\cA-\x{100}/A-C/cds; +tr/\cA-\x{100}/A-D/cds; +tr/\cA-\x{100}/A-I/cds; +#### # [perl #119807] s//\(3)/ge should not warn when deparsed (\3 warns) s/foo/\(3);/eg; #### @@ -2059,7 +2101,7 @@ no warnings "experimental::lexical_subs"; my sub f {} print f(); >>>> -BEGIN {${^WARNING_BITS} = "\x55\x55\x55\x55\x55\x55\x55\x55\x55\x55\x55\x55\x55\x54\x55\x55\x55\x55\x55"} +BEGIN {${^WARNING_BITS} = "\x55\x55\x55\x55\x55\x55\x55\x55\x55\x55\x55\x55\x55\x54\x55\x55\x55\x55\x55\x55\x55"} my sub f { } @@ -2072,7 +2114,7 @@ no warnings 'experimental::lexical_subs'; state sub f {} print f(); >>>> -BEGIN {${^WARNING_BITS} = "\x55\x55\x55\x55\x55\x55\x55\x55\x55\x55\x55\x55\x55\x54\x55\x55\x55\x55\x55"} +BEGIN {${^WARNING_BITS} = "\x55\x55\x55\x55\x55\x55\x55\x55\x55\x55\x55\x55\x55\x54\x55\x55\x55\x55\x55\x55\x55"} state sub f { } @@ -2487,6 +2529,18 @@ foreach \&a (sub { 9; } , sub { 10; } ) { die; } #### +# CONTEXT no warnings 'experimental::for_list'; +my %hash; +foreach my ($key, $value) (%hash) { + study $_; +} +#### +# CONTEXT no warnings 'experimental::for_list'; +my @ducks; +foreach my ($tick, $trick, $track) (@ducks) { + study $_; +} +#### # join $foo, pos my $foo; $_ = join $foo, pos @@ -3119,3 +3173,60 @@ $a = int($c == $d != $e); $a = $b < ($c == $d != $e); $a = $b == ($c == $d != $e); $a = $b & $c == $d != $e; +#### +# try/catch +# CONTEXT use feature 'try'; no warnings 'experimental::try'; +try { + FIRST(); +} +catch($var) { + SECOND(); +} +#### +# CONTEXT use feature 'try'; no warnings 'experimental::try'; +try { + FIRST(); +} +catch($var) { + my $x; + SECOND(); +} +#### +# CONTEXT use feature 'try'; no warnings 'experimental::try'; +try { + FIRST(); +} +catch($var) { + SECOND(); +} +finally { + THIRD(); +} +#### +# defer blocks +# CONTEXT use feature "defer"; no warnings 'experimental::defer'; +defer { + $a = 123; +} +#### +# builtin:: functions +# CONTEXT no warnings 'experimental::builtin'; +my $x; +$x = builtin::is_bool(undef); +$x = builtin::is_weak(undef); +builtin::weaken($x); +builtin::unweaken($x); +$x = builtin::blessed(undef); +$x = builtin::refaddr(undef); +$x = builtin::reftype(undef); +$x = builtin::ceil($x); +$x = builtin::floor($x); +#### +# boolean true preserved +my $x = !0; +#### +# boolean false preserved +my $x = !1; +#### +# const NV: NV-ness preserved +my(@x) = (-2.0, -1.0, -0.0, 0.0, 1.0, 2.0); diff --git a/gnu/usr.bin/perl/lib/B/Op_private.pm b/gnu/usr.bin/perl/lib/B/Op_private.pm index f30a6922a2e..73a5b817524 100644 --- a/gnu/usr.bin/perl/lib/B/Op_private.pm +++ b/gnu/usr.bin/perl/lib/B/Op_private.pm @@ -118,7 +118,7 @@ package B::Op_private; our %bits; -our $VERSION = "5.032001"; +our $VERSION = "5.036000"; $bits{$_}{3} = 'OPpENTERSUB_AMPER' for qw(entersub rv2cv); $bits{$_}{6} = 'OPpENTERSUB_DB' for qw(entersub rv2cv); @@ -138,7 +138,7 @@ $bits{$_}{7} = 'OPpLVAL_INTRO' for qw(aelem aslice cond_expr delete enteriter en $bits{$_}{2} = 'OPpLVREF_ELEM' for qw(lvref refassign); $bits{$_}{3} = 'OPpLVREF_ITER' for qw(lvref refassign); $bits{$_}{3} = 'OPpMAYBE_LVSUB' for qw(aassign aelem akeys aslice av2arylen avhvswitch helem hslice keys kvaslice kvhslice multideref padav padhv pos rv2av rv2gv rv2hv substr values vec); -$bits{$_}{4} = 'OPpMAYBE_TRUEBOOL' for qw(padhv ref rv2hv); +$bits{$_}{4} = 'OPpMAYBE_TRUEBOOL' for qw(blessed padhv ref rv2hv); $bits{$_}{7} = 'OPpOFFBYONE' for qw(caller runcv wantarray); $bits{$_}{5} = 'OPpOPEN_IN_CRLF' for qw(backtick open); $bits{$_}{4} = 'OPpOPEN_IN_RAW' for qw(backtick open); @@ -149,7 +149,7 @@ $bits{$_}{6} = 'OPpPAD_STATE' for qw(lvavref lvref padav padhv padsv pushmark re $bits{$_}{7} = 'OPpPV_IS_UTF8' for qw(dump goto last next redo); $bits{$_}{6} = 'OPpREFCOUNTED' for qw(leave leaveeval leavesub leavesublv leavewrite); $bits{$_}{2} = 'OPpSLICEWARNING' for qw(aslice hslice padav padhv rv2av rv2hv); -$bits{$_}{4} = 'OPpTARGET_MY' for qw(abs add atan2 chdir chmod chomp chown chr chroot concat cos crypt divide exec exp flock getpgrp getppid getpriority hex i_add i_divide i_modulo i_multiply i_subtract index int kill left_shift length link log mkdir modulo multiconcat multiply nbit_and nbit_or nbit_xor ncomplement oct ord pow push rand rename right_shift rindex rmdir schomp scomplement setpgrp setpriority sin sleep sqrt srand stringify subtract symlink system time unlink unshift utime wait waitpid); +$bits{$_}{4} = 'OPpTARGET_MY' for qw(abs add atan2 ceil chdir chmod chomp chown chr chroot concat cos crypt divide exec exp flock floor getpgrp getppid getpriority hex i_add i_divide i_modulo i_multiply i_subtract index int is_bool is_weak kill left_shift length link log mkdir modulo multiconcat multiply nbit_and nbit_or nbit_xor ncomplement oct ord pow push rand refaddr reftype rename right_shift rindex rmdir schomp scomplement setpgrp setpriority sin sleep sqrt srand stringify subtract symlink system time unlink unshift utime wait waitpid); $bits{$_}{0} = 'OPpTRANS_CAN_FORCE_UTF8' for qw(trans transr); $bits{$_}{5} = 'OPpTRANS_COMPLEMENT' for qw(trans transr); $bits{$_}{7} = 'OPpTRANS_DELETE' for qw(trans transr); @@ -157,7 +157,8 @@ $bits{$_}{6} = 'OPpTRANS_GROWS' for qw(trans transr); $bits{$_}{2} = 'OPpTRANS_IDENTICAL' for qw(trans transr); $bits{$_}{3} = 'OPpTRANS_SQUASH' for qw(trans transr); $bits{$_}{1} = 'OPpTRANS_USE_SVOP' for qw(trans transr); -$bits{$_}{5} = 'OPpTRUEBOOL' for qw(grepwhile index length padav padhv pos ref rindex rv2av rv2hv subst); +$bits{$_}{5} = 'OPpTRUEBOOL' for qw(blessed grepwhile index length padav padhv pos ref rindex rv2av rv2hv subst); +$bits{$_}{2} = 'OPpUSEINT' for qw(bit_and bit_or bit_xor complement left_shift nbit_and nbit_or nbit_xor ncomplement right_shift sbit_and sbit_or sbit_xor); my @bf = ( { @@ -270,11 +271,11 @@ $bits{avalues}{0} = $bf[0]; $bits{backtick}{0} = $bf[0]; @{$bits{bind}}{3,2,1,0} = ($bf[4], $bf[4], $bf[4], $bf[4]); @{$bits{binmode}}{3,2,1,0} = ($bf[4], $bf[4], $bf[4], $bf[4]); -@{$bits{bit_and}}{1,0} = ($bf[1], $bf[1]); -@{$bits{bit_or}}{1,0} = ($bf[1], $bf[1]); -@{$bits{bit_xor}}{1,0} = ($bf[1], $bf[1]); @{$bits{bless}}{3,2,1,0} = ($bf[4], $bf[4], $bf[4], $bf[4]); +$bits{blessed}{0} = $bf[0]; @{$bits{caller}}{3,2,1,0} = ($bf[4], $bf[4], $bf[4], $bf[4]); +$bits{catch}{0} = $bf[0]; +$bits{ceil}{0} = $bf[0]; @{$bits{chdir}}{3,2,1,0} = ($bf[4], $bf[4], $bf[4], $bf[4]); @{$bits{chmod}}{3,2,1,0} = ($bf[4], $bf[4], $bf[4], $bf[4]); $bits{chomp}{0} = $bf[0]; @@ -286,7 +287,6 @@ $bits{chroot}{0} = $bf[0]; $bits{closedir}{0} = $bf[0]; $bits{cmpchain_and}{0} = $bf[0]; $bits{cmpchain_dup}{0} = $bf[0]; -$bits{complement}{0} = $bf[0]; @{$bits{concat}}{6,1,0} = ('OPpCONCAT_NESTED', $bf[1], $bf[1]); $bits{cond_expr}{0} = $bf[0]; @{$bits{connect}}{3,2,1,0} = ($bf[4], $bf[4], $bf[4], $bf[4]); @@ -310,6 +310,7 @@ $bits{entergiven}{0} = $bf[0]; $bits{enteriter}{3} = 'OPpITER_DEF'; @{$bits{entersub}}{5,4,0} = ($bf[8], $bf[8], 'OPpENTERSUB_INARGS'); $bits{entertry}{0} = $bf[0]; +$bits{entertrycatch}{0} = $bf[0]; $bits{enterwhen}{0} = $bf[0]; @{$bits{enterwrite}}{3,2,1,0} = ($bf[4], $bf[4], $bf[4], $bf[4]); @{$bits{eof}}{3,2,1,0} = ($bf[4], $bf[4], $bf[4], $bf[4]); @@ -323,6 +324,7 @@ $bits{fc}{0} = $bf[0]; @{$bits{fileno}}{3,2,1,0} = ($bf[4], $bf[4], $bf[4], $bf[4]); $bits{flip}{0} = $bf[0]; @{$bits{flock}}{3,2,1,0} = ($bf[4], $bf[4], $bf[4], $bf[4]); +$bits{floor}{0} = $bf[0]; $bits{flop}{0} = $bf[0]; @{$bits{formline}}{3,2,1,0} = ($bf[4], $bf[4], $bf[4], $bf[4]); $bits{ftatime}{0} = $bf[0]; @@ -401,6 +403,8 @@ $bits{i_preinc}{0} = $bf[0]; @{$bits{index}}{3,2,1,0} = ($bf[4], $bf[4], $bf[4], $bf[4]); $bits{int}{0} = $bf[0]; @{$bits{ioctl}}{3,2,1,0} = ($bf[4], $bf[4], $bf[4], $bf[4]); +$bits{is_bool}{0} = $bf[0]; +$bits{is_weak}{0} = $bf[0]; @{$bits{isa}}{1,0} = ($bf[1], $bf[1]); @{$bits{join}}{3,2,1,0} = ($bf[4], $bf[4], $bf[4], $bf[4]); $bits{keys}{0} = $bf[0]; @@ -416,7 +420,6 @@ $bits{leavesub}{0} = $bf[0]; $bits{leavesublv}{0} = $bf[0]; $bits{leavewhen}{0} = $bf[0]; $bits{leavewrite}{0} = $bf[0]; -@{$bits{left_shift}}{1,0} = ($bf[1], $bf[1]); $bits{length}{0} = $bf[0]; @{$bits{link}}{3,2,1,0} = ($bf[4], $bf[4], $bf[4], $bf[4]); $bits{list}{6} = 'OPpLIST_GUESSED'; @@ -445,11 +448,7 @@ $bits{method_super}{0} = $bf[0]; @{$bits{multiconcat}}{6,5,3,0} = ('OPpMULTICONCAT_APPEND', 'OPpMULTICONCAT_FAKE', 'OPpMULTICONCAT_STRINGIFY', $bf[0]); @{$bits{multideref}}{5,4,0} = ('OPpMULTIDEREF_DELETE', 'OPpMULTIDEREF_EXISTS', $bf[0]); @{$bits{multiply}}{1,0} = ($bf[1], $bf[1]); -@{$bits{nbit_and}}{1,0} = ($bf[1], $bf[1]); -@{$bits{nbit_or}}{1,0} = ($bf[1], $bf[1]); -@{$bits{nbit_xor}}{1,0} = ($bf[1], $bf[1]); @{$bits{ncmp}}{1,0} = ($bf[1], $bf[1]); -$bits{ncomplement}{0} = $bf[0]; @{$bits{ne}}{1,0} = ($bf[1], $bf[1]); $bits{negate}{0} = $bf[0]; $bits{next}{0} = $bf[0]; @@ -475,6 +474,7 @@ $bits{predec}{0} = $bf[0]; $bits{preinc}{0} = $bf[0]; $bits{prototype}{0} = $bf[0]; @{$bits{push}}{3,2,1,0} = ($bf[4], $bf[4], $bf[4], $bf[4]); +@{$bits{pushdefer}}{7,0} = ('OPpDEFER_FINALLY', $bf[0]); $bits{quotemeta}{0} = $bf[0]; @{$bits{rand}}{3,2,1,0} = ($bf[4], $bf[4], $bf[4], $bf[4]); $bits{range}{0} = $bf[0]; @@ -485,8 +485,10 @@ $bits{readlink}{0} = $bf[0]; @{$bits{recv}}{3,2,1,0} = ($bf[4], $bf[4], $bf[4], $bf[4]); $bits{redo}{0} = $bf[0]; $bits{ref}{0} = $bf[0]; +$bits{refaddr}{0} = $bf[0]; @{$bits{refassign}}{5,4,1,0} = ($bf[9], $bf[9], $bf[1], $bf[1]); $bits{refgen}{0} = $bf[0]; +$bits{reftype}{0} = $bf[0]; $bits{regcmaybe}{0} = $bf[0]; $bits{regcomp}{0} = $bf[0]; $bits{regcreset}{0} = $bf[0]; @@ -496,7 +498,6 @@ $bits{require}{0} = $bf[0]; @{$bits{reset}}{3,2,1,0} = ($bf[4], $bf[4], $bf[4], $bf[4]); @{$bits{reverse}}{3,0} = ('OPpREVERSE_INPLACE', $bf[0]); $bits{rewinddir}{0} = $bf[0]; -@{$bits{right_shift}}{1,0} = ($bf[1], $bf[1]); @{$bits{rindex}}{3,2,1,0} = ($bf[4], $bf[4], $bf[4], $bf[4]); $bits{rmdir}{0} = $bf[0]; $bits{rv2av}{0} = $bf[0]; @@ -505,9 +506,6 @@ $bits{rv2av}{0} = $bf[0]; $bits{rv2hv}{0} = 'OPpRV2HV_ISKEYS'; @{$bits{rv2sv}}{5,4,0} = ($bf[8], $bf[8], $bf[0]); @{$bits{sassign}}{7,6,1,0} = ('OPpASSIGN_CV_TO_GV', 'OPpASSIGN_BACKWARDS', $bf[1], $bf[1]); -@{$bits{sbit_and}}{1,0} = ($bf[1], $bf[1]); -@{$bits{sbit_or}}{1,0} = ($bf[1], $bf[1]); -@{$bits{sbit_xor}}{1,0} = ($bf[1], $bf[1]); $bits{scalar}{0} = $bf[0]; $bits{schomp}{0} = $bf[0]; $bits{schop}{0} = $bf[0]; @@ -541,7 +539,7 @@ $bits{sin}{0} = $bf[0]; $bits{snetent}{0} = $bf[0]; @{$bits{socket}}{3,2,1,0} = ($bf[4], $bf[4], $bf[4], $bf[4]); @{$bits{sockpair}}{3,2,1,0} = ($bf[4], $bf[4], $bf[4], $bf[4]); -@{$bits{sort}}{7,6,4,3,2,1,0} = ('OPpSORT_UNSTABLE', 'OPpSORT_STABLE', 'OPpSORT_DESCEND', 'OPpSORT_INPLACE', 'OPpSORT_REVERSE', 'OPpSORT_INTEGER', 'OPpSORT_NUMERIC'); +@{$bits{sort}}{4,3,2,1,0} = ('OPpSORT_DESCEND', 'OPpSORT_INPLACE', 'OPpSORT_REVERSE', 'OPpSORT_INTEGER', 'OPpSORT_NUMERIC'); @{$bits{splice}}{3,2,1,0} = ($bf[4], $bf[4], $bf[4], $bf[4]); @{$bits{split}}{4,3,2} = ('OPpSPLIT_ASSIGN', 'OPpSPLIT_LEX', 'OPpSPLIT_IMPLIM'); @{$bits{sprintf}}{3,2,1,0} = ($bf[4], $bf[4], $bf[4], $bf[4]); @@ -578,11 +576,13 @@ $bits{undef}{0} = $bf[0]; @{$bits{unpack}}{3,2,1,0} = ($bf[4], $bf[4], $bf[4], $bf[4]); @{$bits{unshift}}{3,2,1,0} = ($bf[4], $bf[4], $bf[4], $bf[4]); $bits{untie}{0} = $bf[0]; +$bits{unweaken}{0} = $bf[0]; @{$bits{utime}}{3,2,1,0} = ($bf[4], $bf[4], $bf[4], $bf[4]); $bits{values}{0} = $bf[0]; @{$bits{vec}}{1,0} = ($bf[1], $bf[1]); @{$bits{waitpid}}{3,2,1,0} = ($bf[4], $bf[4], $bf[4], $bf[4]); @{$bits{warn}}{3,2,1,0} = ($bf[4], $bf[4], $bf[4], $bf[4]); +$bits{weaken}{0} = $bf[0]; @{$bits{xor}}{1,0} = ($bf[1], $bf[1]); @@ -613,6 +613,7 @@ our %defines = ( OPpCOREARGS_DEREF2 => 2, OPpCOREARGS_PUSHMARK => 128, OPpCOREARGS_SCALARMOD => 64, + OPpDEFER_FINALLY => 128, OPpDEREF => 48, OPpDEREF_AV => 16, OPpDEREF_HV => 32, @@ -682,8 +683,6 @@ our %defines = ( OPpSORT_INTEGER => 2, OPpSORT_NUMERIC => 1, OPpSORT_REVERSE => 4, - OPpSORT_STABLE => 64, - OPpSORT_UNSTABLE => 128, OPpSPLIT_ASSIGN => 16, OPpSPLIT_IMPLIM => 4, OPpSPLIT_LEX => 8, @@ -697,6 +696,7 @@ our %defines = ( OPpTRANS_SQUASH => 8, OPpTRANS_USE_SVOP => 2, OPpTRUEBOOL => 32, + OPpUSEINT => 4, ); our %labels = ( @@ -720,6 +720,7 @@ our %labels = ( OPpCOREARGS_DEREF2 => 'DEREF2', OPpCOREARGS_PUSHMARK => 'MARK', OPpCOREARGS_SCALARMOD => '$MOD', + OPpDEFER_FINALLY => 'FINALLY', OPpDEREF_AV => 'DREFAV', OPpDEREF_HV => 'DREFHV', OPpDEREF_SV => 'DREFSV', @@ -785,8 +786,6 @@ our %labels = ( OPpSORT_INTEGER => 'INT', OPpSORT_NUMERIC => 'NUM', OPpSORT_REVERSE => 'REV', - OPpSORT_STABLE => 'STABLE', - OPpSORT_UNSTABLE => 'UNSTABLE', OPpSPLIT_ASSIGN => 'ASSIGN', OPpSPLIT_IMPLIM => 'IMPLIM', OPpSPLIT_LEX => 'LEX', @@ -800,6 +799,7 @@ our %labels = ( OPpTRANS_SQUASH => 'SQUASH', OPpTRANS_USE_SVOP => 'USE_SVOP', OPpTRUEBOOL => 'BOOL', + OPpUSEINT => 'USEINT', ); @@ -810,6 +810,7 @@ our %ops_using = ( OPpCONCAT_NESTED => [qw(concat)], OPpCONST_BARE => [qw(const)], OPpCOREARGS_DEREF1 => [qw(coreargs)], + OPpDEFER_FINALLY => [qw(pushdefer)], OPpEARLY_CV => [qw(gv)], OPpENTERSUB_AMPER => [qw(entersub rv2cv)], OPpENTERSUB_INARGS => [qw(entersub)], @@ -831,7 +832,7 @@ our %ops_using = ( OPpLVAL_INTRO => [qw(aelem aslice cond_expr delete enteriter entersub gvsv helem hslice list lvavref lvref lvrefslice multiconcat multideref padav padhv padrange padsv pushmark refassign rv2av rv2gv rv2hv rv2sv split)], OPpLVREF_ELEM => [qw(lvref refassign)], OPpMAYBE_LVSUB => [qw(aassign aelem akeys aslice av2arylen avhvswitch helem hslice keys kvaslice kvhslice multideref padav padhv pos rv2av rv2gv rv2hv substr values vec)], - OPpMAYBE_TRUEBOOL => [qw(padhv ref rv2hv)], + OPpMAYBE_TRUEBOOL => [qw(blessed padhv ref rv2hv)], OPpMULTICONCAT_APPEND => [qw(multiconcat)], OPpMULTIDEREF_DELETE => [qw(multideref)], OPpOFFBYONE => [qw(caller runcv wantarray)], @@ -848,9 +849,10 @@ our %ops_using = ( OPpSORT_DESCEND => [qw(sort)], OPpSPLIT_ASSIGN => [qw(split)], OPpSUBSTR_REPL_FIRST => [qw(substr)], - OPpTARGET_MY => [qw(abs add atan2 chdir chmod chomp chown chr chroot concat cos crypt divide exec exp flock getpgrp getppid getpriority hex i_add i_divide i_modulo i_multiply i_subtract index int kill left_shift length link log mkdir modulo multiconcat multiply nbit_and nbit_or nbit_xor ncomplement oct ord pow push rand rename right_shift rindex rmdir schomp scomplement setpgrp setpriority sin sleep sqrt srand stringify subtract symlink system time unlink unshift utime wait waitpid)], + OPpTARGET_MY => [qw(abs add atan2 ceil chdir chmod chomp chown chr chroot concat cos crypt divide exec exp flock floor getpgrp getppid getpriority hex i_add i_divide i_modulo i_multiply i_subtract index int is_bool is_weak kill left_shift length link log mkdir modulo multiconcat multiply nbit_and nbit_or nbit_xor ncomplement oct ord pow push rand refaddr reftype rename right_shift rindex rmdir schomp scomplement setpgrp setpriority sin sleep sqrt srand stringify subtract symlink system time unlink unshift utime wait waitpid)], OPpTRANS_CAN_FORCE_UTF8 => [qw(trans transr)], - OPpTRUEBOOL => [qw(grepwhile index length padav padhv pos ref rindex rv2av rv2hv subst)], + OPpTRUEBOOL => [qw(blessed grepwhile index length padav padhv pos ref rindex rv2av rv2hv subst)], + OPpUSEINT => [qw(bit_and bit_or bit_xor complement left_shift nbit_and nbit_or nbit_xor ncomplement right_shift sbit_and sbit_or sbit_xor)], ); $ops_using{OPpASSIGN_COMMON_RC1} = $ops_using{OPpASSIGN_COMMON_AGG}; @@ -886,8 +888,6 @@ $ops_using{OPpSORT_INPLACE} = $ops_using{OPpSORT_DESCEND}; $ops_using{OPpSORT_INTEGER} = $ops_using{OPpSORT_DESCEND}; $ops_using{OPpSORT_NUMERIC} = $ops_using{OPpSORT_DESCEND}; $ops_using{OPpSORT_REVERSE} = $ops_using{OPpSORT_DESCEND}; -$ops_using{OPpSORT_STABLE} = $ops_using{OPpSORT_DESCEND}; -$ops_using{OPpSORT_UNSTABLE} = $ops_using{OPpSORT_DESCEND}; $ops_using{OPpSPLIT_IMPLIM} = $ops_using{OPpSPLIT_ASSIGN}; $ops_using{OPpSPLIT_LEX} = $ops_using{OPpSPLIT_ASSIGN}; $ops_using{OPpTRANS_COMPLEMENT} = $ops_using{OPpTRANS_CAN_FORCE_UTF8}; diff --git a/gnu/usr.bin/perl/lib/Benchmark.t b/gnu/usr.bin/perl/lib/Benchmark.t index 523618f5763..7d9a6c8d8ec 100644 --- a/gnu/usr.bin/perl/lib/Benchmark.t +++ b/gnu/usr.bin/perl/lib/Benchmark.t @@ -8,7 +8,7 @@ BEGIN { use warnings; use strict; our ($foo, $bar, $baz, $ballast); -use Test::More tests => 213; +use Test::More; use Benchmark qw(:all); @@ -138,7 +138,7 @@ is ($auto, $default, 'timestr ($diff, "auto") matches timestr ($diff)'); is ($auto, $all, '"auto" isn\'t "noc", so should be eq to "all"'); } - like (timestr ($diff, 'all', 'E'), + like (timestr ($diff, 'all', 'E'), qr/(\d+) +wallclock secs? +\( *\d\.\d+E[-+]?\d\d\d? +usr +\d\.\d+E[-+]?\d\d\d? +sys +\+ +\d\.\d+E[-+]?\d\d\d? +cusr +\d\.\d+E[-+]?\d\d\d? +csys += +\d\.\d+E[-+]?\d\d\d? +CPU\)/, 'timestr ($diff, "all", "E") [sprintf format of "E"]'); } @@ -221,7 +221,7 @@ is(ref ($got), 'HASH', "timethese should return a hashref"); isa_ok($got->{Foo}, 'Benchmark', "Foo value"); isa_ok($got->{Bar}, 'Benchmark', "Bar value"); isa_ok($got->{Baz}, 'Benchmark', "Baz value"); -eq_set([keys %$got], [qw(Foo Bar Baz)], 'should be exactly three objects'); +is_deeply([sort keys %$got], [sort qw(Foo Bar Baz)], 'should be exactly three objects'); is ($foo, $iterations, "Foo code was run $iterations times"); is ($bar, $iterations, "Bar code was run $iterations times"); is ($baz, $iterations, "Baz code was run $iterations times"); @@ -243,7 +243,7 @@ like ($got, $Default_Pattern, 'should find default format somewhere'); select OUT; eval { - timethese( 1, + timethese( 1, { undeclared_var => q{ $i++; $i-- }, symbolic_ref => q{ $bar = 42; $foo = 'bar'; @@ -287,7 +287,7 @@ my $results; is(ref ($results), 'HASH', "timethese should return a hashref"); isa_ok($results->{Foo}, 'Benchmark', "Foo value"); isa_ok($results->{Bar}, 'Benchmark', "Bar value"); - eq_set([keys %$results], [qw(Foo Bar)], 'should be exactly two objects'); + is_deeply([sort keys %$results], [sort qw(Foo Bar)], 'should be exactly two objects'); cmp_ok($foo, '>', 0, "Foo code was run"); cmp_ok($bar, '>', 0, "Bar code was run"); @@ -584,7 +584,7 @@ my @after5_keys = keys %Benchmark::Cache; $bar = 0; isa_ok(timeit(10, '++$bar'), 'Benchmark', "timeit eval"); is ($bar, 10, "benchmarked code was run 10 times"); -ok (!eq_array ([keys %Benchmark::Cache], \@after5_keys), "10 differs from 5"); +cmp_ok (scalar keys %Benchmark::Cache, '>', scalar @after5_keys, "10 differs from 5"); clearcache(10); # Hash key order will be the same if there are the same keys. @@ -634,6 +634,7 @@ is_deeply ([keys %Benchmark::Cache], \@before_keys, } } +done_testing(); package TieOut; diff --git a/gnu/usr.bin/perl/lib/Config.t b/gnu/usr.bin/perl/lib/Config.t index abd93169ff8..4a07ff58af2 100644 --- a/gnu/usr.bin/perl/lib/Config.t +++ b/gnu/usr.bin/perl/lib/Config.t @@ -14,11 +14,11 @@ use strict; # Some (safe?) bets. -ok(keys %Config > 500, "Config has more than 500 entries"); +cmp_ok(keys %Config, '>', 500, "Config has more than 500 entries"); my ($first) = Config::config_sh() =~ /^(\S+)=/m; die "Can't find first entry in Config::config_sh()" unless defined $first; -print "# First entry is '$first'\n"; +note("First entry is '$first'"); # It happens that the we know what the first key should be. This is somewhat # cheating, but there was briefly a bug where the key got a bonus newline. @@ -31,11 +31,12 @@ ok(!exists($Config{"\n$first"}), is($Config{PERL_REVISION}, 5, "PERL_REVISION is 5"); # Check that old config variable names are aliased to their new ones. -my %grandfathers = ( PERL_VERSION => 'PATCHLEVEL', - PERL_SUBVERSION => 'SUBVERSION', - PERL_CONFIG_SH => 'CONFIG' - ); -while( my($new, $old) = each %grandfathers ) { +my %legacy = ( + PERL_VERSION => 'PATCHLEVEL', + PERL_SUBVERSION => 'SUBVERSION', + PERL_CONFIG_SH => 'CONFIG' +); +while( my($new, $old) = each %legacy ) { isnt($Config{$new}, undef, "$new is defined"); is($Config{$new}, $Config{$old}, "$new is aliased to $old"); } @@ -150,7 +151,7 @@ my @api; my @rev = @Config{qw(PERL_API_REVISION PERL_API_VERSION PERL_API_SUBVERSION)}; -print ("# test tagged responses, multi-line and single-line\n"); +note("test tagged responses, multi-line and single-line"); foreach my $api ($out3, $out4) { @api = $api =~ /PERL_API_(\w+)=(.*?)(?:;\n|\s)/mg; is($api[0], "REVISION", "REVISION tag"); @@ -161,7 +162,7 @@ foreach my $api ($out3, $out4) { is($api[3], "'$rev[2]'", "SUBVERSION is $rev[2]"); } -print("# test non-tagged responses, multi-line and single-line\n"); +note("test non-tagged responses, multi-line and single-line"); foreach my $api ($out5, $out6) { @api = split /(?: |;\n)/, $api; is($api[0], "'$rev[0]'", "revision is $rev[0]"); diff --git a/gnu/usr.bin/perl/lib/DB.t b/gnu/usr.bin/perl/lib/DB.t index e4ee074e71b..6a8093268b9 100644 --- a/gnu/usr.bin/perl/lib/DB.t +++ b/gnu/usr.bin/perl/lib/DB.t @@ -18,7 +18,7 @@ use Scalar::Util qw( dualvar ); my $dualfalse = dualvar(0, 'false'); my $dualtrue = dualvar(1, 'true'); -use Test::More tests => 106; +use Test::More; # must happen at compile time for DB:: package variable localizations to work BEGIN { @@ -171,7 +171,7 @@ sub three { two(@_) } my @subs = DB->subs( 'foo', 'boo', 'bar' ); is( scalar @subs, 2, '... should report only for requested subs' ); my @expected = ( [ 'foo', 23, 45 ], [ 'ba:r', 7, 890 ] ); - ok( eq_array( \@subs, \@expected ), '... find file, start, end for subs' ); + is_deeply( \@subs, \@expected, '... find file, start, end for subs' ); } # test DB::filesubs() @@ -498,6 +498,8 @@ for my $method (qw( cprestop cpoststop awaken init stop idle cleanup output )) { ok( defined &{ "DB::$method" }, "DB::$method() should be defined" ); } +done_testing(); + # DB::skippkg() uses lexical # DB::ready() uses lexical diff --git a/gnu/usr.bin/perl/lib/DBM_Filter/t/encode.t b/gnu/usr.bin/perl/lib/DBM_Filter/t/encode.t index c7ef60428f7..e8c9a8c4d91 100644 --- a/gnu/usr.bin/perl/lib/DBM_Filter/t/encode.t +++ b/gnu/usr.bin/perl/lib/DBM_Filter/t/encode.t @@ -19,7 +19,7 @@ BEGIN require "dbm_filter_util.pl"; -use Test::More tests => 26; +use Test::More; BEGIN { use_ok('DBM_Filter') }; my $db_file; @@ -122,3 +122,5 @@ undef $db2; } } + +done_testing(); diff --git a/gnu/usr.bin/perl/lib/DBM_Filter/t/utf8.t b/gnu/usr.bin/perl/lib/DBM_Filter/t/utf8.t index fb290e956b8..e322049d654 100644 --- a/gnu/usr.bin/perl/lib/DBM_Filter/t/utf8.t +++ b/gnu/usr.bin/perl/lib/DBM_Filter/t/utf8.t @@ -18,7 +18,7 @@ BEGIN require "dbm_filter_util.pl"; -use Test::More tests => 20; +use Test::More; BEGIN { use_ok('DBM_Filter') }; my $db_file; @@ -96,3 +96,4 @@ undef $db2; is $@, '', "untie without inner references" ; } +done_testing(); diff --git a/gnu/usr.bin/perl/lib/ExtUtils/t/Embed.t b/gnu/usr.bin/perl/lib/ExtUtils/t/Embed.t index a5cf2060e12..51c3ef2b84f 100644 --- a/gnu/usr.bin/perl/lib/ExtUtils/t/Embed.t +++ b/gnu/usr.bin/perl/lib/ExtUtils/t/Embed.t @@ -175,11 +175,6 @@ __END__ static const char * cmds [] = { "perl", "-e", "$|=1; print qq[ok 5\\n]; $SIG{__WARN__} = sub { print qq[ok 6\\n] if $_[0] =~ /Unexpected exit/; }; exit 5;", NULL }; -#ifdef PERL_GLOBAL_STRUCT_PRIVATE -static struct perl_vars *my_plvarsp; -struct perl_vars* Perl_GetVarsPrivate(void) { return my_plvarsp; } -#endif - #ifdef NO_ENV_ARRAY_IN_MAIN int main(int argc, char **argv) { char **env; @@ -187,14 +182,6 @@ int main(int argc, char **argv) { int main(int argc, char **argv, char **env) { #endif PerlInterpreter *my_perl; -#ifdef PERL_GLOBAL_STRUCT - struct perl_vars *my_vars = init_global_struct(); -# ifdef PERL_GLOBAL_STRUCT_PRIVATE - int veto; - - my_plvarsp = my_vars; -# endif -#endif /* PERL_GLOBAL_STRUCT */ (void)argc; /* PERL_SYS_INIT3 may #define away their use */ (void)argv; @@ -229,19 +216,5 @@ int main(int argc, char **argv, char **env) { PERL_SYS_TERM(); -#ifdef PERL_GLOBAL_STRUCT -# ifdef PERL_GLOBAL_STRUCT_PRIVATE - veto = my_plvarsp->Gveto_cleanup; -# endif - free_global_struct(my_vars); -# ifdef PERL_GLOBAL_STRUCT_PRIVATE - if (!veto) - my_plvarsp = NULL; - /* Remember, functions registered with atexit() can run after this point, - and may access "global" variables, and hence end up calling - Perl_GetVarsPrivate() */ -#endif -#endif /* PERL_GLOBAL_STRUCT */ - return 0; } diff --git a/gnu/usr.bin/perl/lib/ExtUtils/typemap b/gnu/usr.bin/perl/lib/ExtUtils/typemap index db700b75bf6..a07e83f9012 100644 --- a/gnu/usr.bin/perl/lib/ExtUtils/typemap +++ b/gnu/usr.bin/perl/lib/ExtUtils/typemap @@ -217,38 +217,54 @@ T_REF_IV_REF IV tmp = SvIV((SV*)SvRV($arg)); $var = *INT2PTR($type *, tmp); } - else - Perl_croak_nocontext(\"%s: %s is not of type %s\", + else { + const char* refstr = SvROK($arg) ? \"\" : SvOK($arg) ? \"scalar \" : \"undef\"; + Perl_croak_nocontext(\"%s: Expected %s to be of type %s; got %s%\" SVf \" instead\", ${$ALIAS?\q[GvNAME(CvGV(cv))]:\qq[\"$pname\"]}, - \"$var\", \"$ntype\") + \"$var\", \"$ntype\", + refstr, $arg + ); + } T_REF_IV_PTR if (sv_isa($arg, \"${ntype}\")) { IV tmp = SvIV((SV*)SvRV($arg)); $var = INT2PTR($type, tmp); } - else - Perl_croak_nocontext(\"%s: %s is not of type %s\", + else { + const char* refstr = SvROK($arg) ? \"\" : SvOK($arg) ? \"scalar \" : \"undef\"; + Perl_croak_nocontext(\"%s: Expected %s to be of type %s; got %s%\" SVf \" instead\", ${$ALIAS?\q[GvNAME(CvGV(cv))]:\qq[\"$pname\"]}, - \"$var\", \"$ntype\") + \"$var\", \"$ntype\", + refstr, $arg + ); + } T_PTROBJ if (SvROK($arg) && sv_derived_from($arg, \"${ntype}\")) { IV tmp = SvIV((SV*)SvRV($arg)); $var = INT2PTR($type,tmp); } - else - Perl_croak_nocontext(\"%s: %s is not of type %s\", + else { + const char* refstr = SvROK($arg) ? \"\" : SvOK($arg) ? \"scalar \" : \"undef\"; + Perl_croak_nocontext(\"%s: Expected %s to be of type %s; got %s%\" SVf \" instead\", ${$ALIAS?\q[GvNAME(CvGV(cv))]:\qq[\"$pname\"]}, - \"$var\", \"$ntype\") + \"$var\", \"$ntype\", + refstr, $arg + ); + } T_PTRDESC if (sv_isa($arg, \"${ntype}\")) { IV tmp = SvIV((SV*)SvRV($arg)); ${type}_desc = (\U${type}_DESC\E*) tmp; $var = ${type}_desc->ptr; } - else - Perl_croak_nocontext(\"%s: %s is not of type %s\", + else { + const char* refstr = SvROK($arg) ? \"\" : SvOK($arg) ? \"scalar \" : \"undef\"; + Perl_croak_nocontext(\"%s: Expected %s to be of type %s; got %s%\" SVf \" instead\", ${$ALIAS?\q[GvNAME(CvGV(cv))]:\qq[\"$pname\"]}, - \"$var\", \"$ntype\") + \"$var\", \"$ntype\", + refstr, $arg + ); + } T_REFREF if (SvROK($arg)) { IV tmp = SvIV((SV*)SvRV($arg)); @@ -263,10 +279,14 @@ T_REFOBJ IV tmp = SvIV((SV*)SvRV($arg)); $var = *INT2PTR($type,tmp); } - else - Perl_croak_nocontext(\"%s: %s is not of type %s\", + else { + const char* refstr = SvROK($arg) ? \"\" : SvOK($arg) ? \"scalar \" : \"undef\"; + Perl_croak_nocontext(\"%s: Expected %s to be of type %s; got %s%\" SVf \" instead\", ${$ALIAS?\q[GvNAME(CvGV(cv))]:\qq[\"$pname\"]}, - \"$var\", \"$ntype\") + \"$var\", \"$ntype\", + refstr, $arg + ); + } T_OPAQUE $var = *($type *)SvPV_nolen($arg) T_OPAQUEPTR @@ -295,23 +315,23 @@ T_OUT ############################################################################# OUTPUT T_SV - $arg = $var; + ${ "$var" eq "RETVAL" ? \"$arg = $var;" : \"sv_setsv_mg($arg, $var);" } T_SVREF $arg = newRV((SV*)$var); T_SVREF_REFCOUNT_FIXED - $arg = newRV_noinc((SV*)$var); + ${ "$var" eq "RETVAL" ? \"$arg = newRV_noinc((SV*)$var);" : \"sv_setrv_noinc($arg, (SV*)$var);" } T_AVREF $arg = newRV((SV*)$var); T_AVREF_REFCOUNT_FIXED - $arg = newRV_noinc((SV*)$var); + ${ "$var" eq "RETVAL" ? \"$arg = newRV_noinc((SV*)$var);" : \"sv_setrv_noinc($arg, (SV*)$var);" } T_HVREF $arg = newRV((SV*)$var); T_HVREF_REFCOUNT_FIXED - $arg = newRV_noinc((SV*)$var); + ${ "$var" eq "RETVAL" ? \"$arg = newRV_noinc((SV*)$var);" : \"sv_setrv_noinc($arg, (SV*)$var);" } T_CVREF $arg = newRV((SV*)$var); T_CVREF_REFCOUNT_FIXED - $arg = newRV_noinc((SV*)$var); + ${ "$var" eq "RETVAL" ? \"$arg = newRV_noinc((SV*)$var);" : \"sv_setrv_noinc($arg, (SV*)$var);" } T_IV sv_setiv($arg, (IV)$var); T_UV diff --git a/gnu/usr.bin/perl/lib/File/Compare.pm b/gnu/usr.bin/perl/lib/File/Compare.pm index 05e1c41d211..d6940d333b9 100644 --- a/gnu/usr.bin/perl/lib/File/Compare.pm +++ b/gnu/usr.bin/perl/lib/File/Compare.pm @@ -1,18 +1,14 @@ -package File::Compare; +package File::Compare 1.1007; -use 5.006; -use strict; +use v5.12; use warnings; -our($VERSION, @ISA, @EXPORT, @EXPORT_OK, $Too_Big); -require Exporter; +use Exporter 'import'; -$VERSION = '1.1006'; -@ISA = qw(Exporter); -@EXPORT = qw(compare); -@EXPORT_OK = qw(cmp compare_text); +our @EXPORT = qw(compare); +our @EXPORT_OK = qw(cmp compare_text); -$Too_Big = 1024 * 1024 * 2; +our $Too_Big = 1024 * 1024 * 2; sub croak { require Carp; @@ -127,8 +123,7 @@ sub compare_text { if @_ == 3 && ref($cmp) ne 'CODE'; # Using a negative buffer size puts compare into text_mode too - $cmp = -1 unless defined $cmp; - compare($from, $to, $cmp); + compare($from, $to, $cmp // -1); } 1; @@ -177,6 +172,3 @@ are equal, 1 if the files are unequal, or -1 if an error was encountered. File::Compare was written by Nick Ing-Simmons. Its original documentation was written by Chip Salzenberg. - -=cut - diff --git a/gnu/usr.bin/perl/lib/File/Copy.pm b/gnu/usr.bin/perl/lib/File/Copy.pm index 63609cc28e6..ce659a02035 100644 --- a/gnu/usr.bin/perl/lib/File/Copy.pm +++ b/gnu/usr.bin/perl/lib/File/Copy.pm @@ -7,15 +7,14 @@ package File::Copy; -use 5.006; +use 5.035007; use strict; use warnings; no warnings 'newline'; +no warnings 'experimental::builtin'; +use builtin 'blessed'; +use overload; use File::Spec; use Config; -# During perl build, we need File::Copy but Scalar::Util might not be built yet -# And then we need these games to avoid loading overload, as that will -# confuse miniperl during the bootstrap of perl. -my $Scalar_Util_loaded = eval q{ require Scalar::Util; require overload; 1 }; # We want HiRes stat and utime if available BEGIN { eval q{ use Time::HiRes qw( stat utime ) } }; our(@ISA, @EXPORT, @EXPORT_OK, $VERSION, $Too_Big, $Syscopy_is_copy); @@ -24,7 +23,7 @@ sub syscopy; sub cp; sub mv; -$VERSION = '2.34'; +$VERSION = '2.39'; require Exporter; @ISA = qw(Exporter); @@ -46,8 +45,8 @@ sub carp { sub _catname { my($from, $to) = @_; if (not defined &basename) { - require File::Basename; - import File::Basename 'basename'; + require File::Basename; + File::Basename->import( 'basename' ); } return File::Spec->catfile($to, basename($from)); @@ -56,8 +55,7 @@ sub _catname { # _eq($from, $to) tells whether $from and $to are identical sub _eq { my ($from, $to) = map { - $Scalar_Util_loaded && Scalar::Util::blessed($_) - && overload::Method($_, q{""}) + blessed($_) && overload::Method($_, q{""}) ? "$_" : $_ } (@_); @@ -100,11 +98,11 @@ sub copy { } if ((($Config{d_symlink} && $Config{d_readlink}) || $Config{d_link}) && - !($^O eq 'MSWin32' || $^O eq 'os2')) { + !($^O eq 'os2')) { my @fs = stat($from); if (@fs) { my @ts = stat($to); - if (@ts && $fs[0] == $ts[0] && $fs[1] == $ts[1] && !-p $from) { + if (@ts && $fs[0] == $ts[0] && $fs[1] eq $ts[1] && !-p $from) { carp("'$from' and '$to' are identical (not copied)"); return 0; } @@ -119,7 +117,6 @@ sub copy { && !$to_a_handle && !($from_a_handle && $^O eq 'os2' ) # OS/2 cannot handle handles && !($from_a_handle && $^O eq 'MSWin32') - && !($from_a_handle && $^O eq 'NetWare') ) { if ($^O eq 'VMS' && -e $from diff --git a/gnu/usr.bin/perl/lib/File/Copy.t b/gnu/usr.bin/perl/lib/File/Copy.t index 57d9478a68b..57b86c1cc4f 100644 --- a/gnu/usr.bin/perl/lib/File/Copy.t +++ b/gnu/usr.bin/perl/lib/File/Copy.t @@ -14,8 +14,6 @@ use Test::More; my $TB = Test::More->builder; -plan tests => 466; - # We are going to override rename() later on but Perl has to see an override # at compile time to honor it. BEGIN { *CORE::GLOBAL::rename = sub { CORE::rename($_[0], $_[1]) }; } @@ -164,7 +162,10 @@ for my $cross_partition_test (0..1) { open(F, ">", "file-$$") or die $!; print F "dummy content\n"; close F; - symlink("file-$$", "symlink-$$") or die $!; + if (!symlink("file-$$", "symlink-$$")) { + unlink "file-$$"; + skip "Can't create symlink", 3; + } my $warnings = ''; local $SIG{__WARN__} = sub { $warnings .= join '', @_ }; @@ -518,6 +519,7 @@ SKIP: { "copy with buffer above normal size"; } +done_testing(); END { 1 while unlink "copy-$$"; diff --git a/gnu/usr.bin/perl/lib/File/stat.pm b/gnu/usr.bin/perl/lib/File/stat.pm index 863092c93dc..7b430d79ea9 100644 --- a/gnu/usr.bin/perl/lib/File/stat.pm +++ b/gnu/usr.bin/perl/lib/File/stat.pm @@ -11,7 +11,7 @@ BEGIN { *warnif = \&warnings::warnif } our(@EXPORT, @EXPORT_OK, %EXPORT_TAGS); -our $VERSION = '1.09'; +our $VERSION = '1.12'; our @fields; our ( $st_dev, $st_ino, $st_mode, @@ -83,7 +83,7 @@ sub _ingroup { # component (at which point we might as well just call Perl_cando and # have done with it). -if (grep $^O eq $_, qw/os2 MSWin32 dos/) { +if (grep $^O eq $_, qw/os2 MSWin32/) { # from doio.c *cando = sub { ($_[0][2] & $_[1]) ? 1 : "" }; @@ -234,7 +234,7 @@ File::stat - by-name interface to Perl's built-in stat() functions use File::stat; $st = stat($file) or die "No $file: $!"; - if ( ($st->mode & 0111) && $st->nlink > 1) ) { + if ( ($st->mode & 0111) && ($st->nlink > 1) ) { print "$file is executable with lotsa links\n"; } diff --git a/gnu/usr.bin/perl/lib/File/stat.t b/gnu/usr.bin/perl/lib/File/stat.t index fc9bb12cef2..b5475f9d89f 100644 --- a/gnu/usr.bin/perl/lib/File/stat.t +++ b/gnu/usr.bin/perl/lib/File/stat.t @@ -84,12 +84,20 @@ sub test_X_ops { } is($@, '', "Overload succeeds $desc"); - if ($^O eq "VMS" && $op =~ /[rwxRWX]/) { - is($vwarn, 1, "warning about VMS ACLs $desc"); - } else { - is($rv, eval "-$op \$file", "correct overload $desc") - unless $access; - is($vwarn, undef, "no warnings about VMS ACLs $desc"); + SKIP : { + if ($^O eq "haiku" && $op =~ /A/) { + # atime is not stored on Haiku BFS + # and stat always returns local time instead + skip "testing -A $desc_tail on Haiku", 1; + } + + if ($^O eq "VMS" && $op =~ /[rwxRWX]/) { + is($vwarn, 1, "warning about VMS ACLs $desc"); + } else { + is($rv, eval "-$op \$file", "correct overload $desc") + unless $access; + is($vwarn, undef, "no warnings about VMS ACLs $desc"); + } } # 111640 - File::stat bogus index check in overload @@ -164,7 +172,6 @@ SKIP: { } main::skip("Win32: different stat-info on filehandle", 1) if $^O eq 'MSWin32'; - main::skip("dos: inode number is fake on dos", 1) if $^O eq 'dos'; main::skip("OS/2: inode number is not constant on os/2", 1) if $^O eq 'os2'; diff --git a/gnu/usr.bin/perl/lib/Getopt/Std.pm b/gnu/usr.bin/perl/lib/Getopt/Std.pm index 5b8878dbb86..7ce625f4b97 100644 --- a/gnu/usr.bin/perl/lib/Getopt/Std.pm +++ b/gnu/usr.bin/perl/lib/Getopt/Std.pm @@ -1,5 +1,8 @@ package Getopt::Std; -require 5.000; + +use strict; +use warnings; + require Exporter; =head1 NAME @@ -79,9 +82,9 @@ and version_mess() with the switches string as an argument. =cut -@ISA = qw(Exporter); -@EXPORT = qw(getopt getopts); -$VERSION = '1.12'; +our @ISA = qw(Exporter); +our @EXPORT = qw(getopt getopts); +our $VERSION = '1.13'; # uncomment the next line to disable 1.03-backward compatibility paranoia # $STANDARD_HELP_VERSION = 1; @@ -119,6 +122,7 @@ sub getopt (;$$) { $$hash{$first} = $rest; } else { + no strict 'refs'; ${"opt_$first"} = $rest; push( @EXPORT, "\$opt_$first" ); } @@ -128,6 +132,7 @@ sub getopt (;$$) { $$hash{$first} = 1; } else { + no strict 'refs'; ${"opt_$first"} = 1; push( @EXPORT, "\$opt_$first" ); } @@ -145,6 +150,7 @@ sub getopt (;$$) { } } +our ($OUTPUT_HELP_VERSION, $STANDARD_HELP_VERSION); sub output_h () { return $OUTPUT_HELP_VERSION if defined $OUTPUT_HELP_VERSION; return \*STDOUT if $STANDARD_HELP_VERSION; @@ -251,6 +257,7 @@ sub getopts ($;$) { $$hash{$first} = $rest; } else { + no strict 'refs'; ${"opt_$first"} = $rest; push( @EXPORT, "\$opt_$first" ); } @@ -260,6 +267,7 @@ sub getopts ($;$) { $$hash{$first} = 1; } else { + no strict 'refs'; ${"opt_$first"} = 1; push( @EXPORT, "\$opt_$first" ); } diff --git a/gnu/usr.bin/perl/lib/Net/hostent.pm b/gnu/usr.bin/perl/lib/Net/hostent.pm index 8831919fb43..babcdc165a8 100644 --- a/gnu/usr.bin/perl/lib/Net/hostent.pm +++ b/gnu/usr.bin/perl/lib/Net/hostent.pm @@ -2,7 +2,7 @@ package Net::hostent; use strict; use 5.006_001; -our $VERSION = '1.02'; +our $VERSION = '1.03'; our (@EXPORT, @EXPORT_OK, %EXPORT_TAGS); our ( $h_name, @h_aliases, @@ -58,13 +58,14 @@ sub gethostbyaddr ($;$) { } sub gethost($) { - if ($_[0] =~ /^\d+(?:\.\d+(?:\.\d+(?:\.\d+)?)?)?$/) { - require Socket; - &gethostbyaddr(Socket::inet_aton(shift)); + my $addr = shift; + if ($addr =~ /^\d+(?:\.\d+(?:\.\d+(?:\.\d+)?)?)?$/) { + require Socket; + &gethostbyaddr(Socket::inet_aton($addr)); } else { - &gethostbyname; - } -} + &gethostbyname($addr); + } +} 1; __END__ diff --git a/gnu/usr.bin/perl/lib/Symbol.pm b/gnu/usr.bin/perl/lib/Symbol.pm index 0e8d67fffd9..0ae79a22743 100644 --- a/gnu/usr.bin/perl/lib/Symbol.pm +++ b/gnu/usr.bin/perl/lib/Symbol.pm @@ -1,5 +1,8 @@ package Symbol; +use strict; +use warnings; + =head1 NAME Symbol - manipulate Perl symbols and their names @@ -78,14 +81,12 @@ you reload the C module afterwards. =cut -BEGIN { require 5.005; } - require Exporter; -@ISA = qw(Exporter); -@EXPORT = qw(gensym ungensym qualify qualify_to_ref); -@EXPORT_OK = qw(delete_package geniosym); +our @ISA = qw(Exporter); +our @EXPORT = qw(gensym ungensym qualify qualify_to_ref); +our @EXPORT_OK = qw(delete_package geniosym); -$VERSION = '1.08'; +our $VERSION = '1.09'; my $genpkg = "Symbol::"; my $genseq = 0; @@ -99,6 +100,7 @@ my %global = map {$_ => 1} qw(ARGV ARGVOUT ENV INC SIG STDERR STDIN STDOUT); # sub gensym () { my $name = "GEN" . $genseq++; + no strict 'refs'; my $ref = \*{$genpkg . $name}; delete $$genpkg{$name}; $ref; @@ -132,6 +134,7 @@ sub qualify ($;$) { } sub qualify_to_ref ($;$) { + no strict 'refs'; return \*{ qualify $_[0], @_ > 1 ? $_[1] : caller }; } @@ -150,6 +153,7 @@ sub delete_package ($) { } my($stem, $leaf) = $pkg =~ m/(.*::)(\w+::)$/; + no strict 'refs'; my $stem_symtab = *{$stem}{HASH}; return unless defined $stem_symtab and exists $stem_symtab->{$leaf}; @@ -160,6 +164,7 @@ sub delete_package ($) { foreach my $name (keys %$leaf_symtab) { undef *{$pkg . $name}; } + use strict 'refs'; # delete the symbol table diff --git a/gnu/usr.bin/perl/lib/Tie/Hash.pm b/gnu/usr.bin/perl/lib/Tie/Hash.pm index 89a6181a335..03493e06509 100644 --- a/gnu/usr.bin/perl/lib/Tie/Hash.pm +++ b/gnu/usr.bin/perl/lib/Tie/Hash.pm @@ -1,6 +1,6 @@ package Tie::Hash; -our $VERSION = '1.05'; +our $VERSION = '1.06'; =head1 NAME @@ -60,7 +60,7 @@ as methods C, C and C. The B and B packages provide most methods for hashes described in L (the exceptions are C and C). They cause tied hashes to behave exactly like standard hashes, -and allow for selective overwriting of methods. B grandfathers the +and allow for selective overwriting of methods. B has legacy support for the C method: it is used if C is not defined in the case a class forgets to include a C method. @@ -195,7 +195,7 @@ sub new { $pkg->TIEHASH(@_); } -# Grandfather "new" +# Legacy support for new() sub TIEHASH { my $pkg = shift; diff --git a/gnu/usr.bin/perl/lib/Tie/Scalar.pm b/gnu/usr.bin/perl/lib/Tie/Scalar.pm index 62f89f88c88..b8d6e8ffcee 100644 --- a/gnu/usr.bin/perl/lib/Tie/Scalar.pm +++ b/gnu/usr.bin/perl/lib/Tie/Scalar.pm @@ -1,6 +1,6 @@ package Tie::Scalar; -our $VERSION = '1.05'; +our $VERSION = '1.06'; =head1 NAME @@ -41,7 +41,7 @@ as methods C, C and C. The B package provides all the methods specified in L. It inherits from B and causes scalars tied to it to behave exactly like the built-in scalars, allowing for selective overloading of methods. The C -method is provided as a means of grandfathering, for classes that forget to +method is provided as a means of legacy support for classes that forget to provide their own C method. For developers wishing to write their own tied-scalar classes, the methods @@ -101,7 +101,7 @@ sub new { $pkg->TIESCALAR(@_); } -# "Grandfather" the new, a la Tie::Hash +# Legacy support for new(), a la Tie::Hash sub TIESCALAR { my $pkg = shift; diff --git a/gnu/usr.bin/perl/lib/Tie/SubstrHash.pm b/gnu/usr.bin/perl/lib/Tie/SubstrHash.pm index 476dd686787..f2677a616f8 100644 --- a/gnu/usr.bin/perl/lib/Tie/SubstrHash.pm +++ b/gnu/usr.bin/perl/lib/Tie/SubstrHash.pm @@ -1,6 +1,4 @@ -package Tie::SubstrHash; - -our $VERSION = '1.00'; +package Tie::SubstrHash 1.01; =head1 NAME @@ -39,114 +37,116 @@ The hash does not support exists(). =cut +use strict; +use warnings; +no warnings 'experimental::builtin'; + use Carp; sub TIEHASH { - my $pack = shift; - my ($klen, $vlen, $tsize) = @_; + my ($pack, $klen, $vlen, $tsize) = @_; my $rlen = 1 + $klen + $vlen; - $tsize = [$tsize, - findgteprime($tsize * 1.1)]; # Allow 10% empty. - local $self = bless ["\0", $klen, $vlen, $tsize, $rlen, 0, -1]; - $$self[0] x= $rlen * $tsize->[1]; + $tsize = [$tsize, findgteprime($tsize * 1.1)]; # Allow 10% empty. + my $self = bless ["\0", $klen, $vlen, $tsize, $rlen, 0, -1]; + $self->[0] x= $rlen * $tsize->[1]; $self; } sub CLEAR { - local($self) = @_; - $$self[0] = "\0" x ($$self[4] * $$self[3]->[1]); - $$self[5] = 0; - $$self[6] = -1; + my ($self) = @_; + $self->[0] = "\0" x ($self->[4] * $self->[3][1]); + $self->[5] = 0; + $self->[6] = -1; } sub FETCH { - local($self,$key) = @_; - local($klen, $vlen, $tsize, $rlen) = @$self[1..4]; - &hashkey; - for (;;) { - $offset = $hash * $rlen; - $record = substr($$self[0], $offset, $rlen); - if (ord($record) == 0) { - return undef; - } - elsif (ord($record) == 1) { - } - elsif (substr($record, 1, $klen) eq $key) { - return substr($record, 1+$klen, $vlen); - } - &rehash; + my ($self, $key) = @_; + my (undef, $klen, $vlen, $tsize, $rlen) = @$self; + my $hashbase = my $hash = hashkey($key, $klen, $tsize); + while (1) { + my $offset = $hash * $rlen; + my $record = substr($self->[0], $offset, $rlen); + if (ord($record) == 0) { + return undef; + } + elsif (ord($record) == 1) { + } + elsif (substr($record, 1, $klen) eq $key) { + return substr($record, 1+$klen, $vlen); + } + $hash = rehash($hash, $hashbase, $tsize); } } sub STORE { - local($self,$key,$val) = @_; - local($klen, $vlen, $tsize, $rlen) = @$self[1..4]; - croak("Table is full ($tsize->[0] elements)") if $$self[5] > $tsize->[0]; + my ($self, $key, $val) = @_; + my (undef, $klen, $vlen, $tsize, $rlen) = @$self; + croak("Table is full ($tsize->[0] elements)") if $self->[5] > $tsize->[0]; croak(qq/Value "$val" is not $vlen characters long/) - if length($val) != $vlen; + if length($val) != $vlen; my $writeoffset; - &hashkey; - for (;;) { - $offset = $hash * $rlen; - $record = substr($$self[0], $offset, $rlen); - if (ord($record) == 0) { - $record = "\2". $key . $val; - die "panic" unless length($record) == $rlen; - $writeoffset = $offset unless defined $writeoffset; - substr($$self[0], $writeoffset, $rlen) = $record; - ++$$self[5]; - return; - } - elsif (ord($record) == 1) { - $writeoffset = $offset unless defined $writeoffset; - } - elsif (substr($record, 1, $klen) eq $key) { - $record = "\2". $key . $val; - die "panic" unless length($record) == $rlen; - substr($$self[0], $offset, $rlen) = $record; - return; - } - &rehash; + my $hashbase = my $hash = hashkey($key, $klen, $tsize); + while (1) { + my $offset = $hash * $rlen; + my $record = substr($self->[0], $offset, $rlen); + if (ord($record) == 0) { + $record = "\2". $key . $val; + die "panic" unless length($record) == $rlen; + $writeoffset //= $offset; + substr($self->[0], $writeoffset, $rlen) = $record; + ++$self->[5]; + return; + } + elsif (ord($record) == 1) { + $writeoffset //= $offset; + } + elsif (substr($record, 1, $klen) eq $key) { + $record = "\2". $key . $val; + die "panic" unless length($record) == $rlen; + substr($self->[0], $offset, $rlen) = $record; + return; + } + $hash = rehash($hash, $hashbase, $tsize); } } sub DELETE { - local($self,$key) = @_; - local($klen, $vlen, $tsize, $rlen) = @$self[1..4]; - &hashkey; - for (;;) { - $offset = $hash * $rlen; - $record = substr($$self[0], $offset, $rlen); - if (ord($record) == 0) { - return undef; - } - elsif (ord($record) == 1) { - } - elsif (substr($record, 1, $klen) eq $key) { - substr($$self[0], $offset, 1) = "\1"; - return substr($record, 1+$klen, $vlen); - --$$self[5]; - } - &rehash; + my ($self, $key) = @_; + my (undef, $klen, $vlen, $tsize, $rlen) = @$self; + my $hashbase = my $hash = hashkey($key, $klen, $tsize); + while (1) { + my $offset = $hash * $rlen; + my $record = substr($self->[0], $offset, $rlen); + if (ord($record) == 0) { + return undef; + } + elsif (ord($record) == 1) { + } + elsif (substr($record, 1, $klen) eq $key) { + substr($self->[0], $offset, 1) = "\1"; + return substr($record, 1+$klen, $vlen); + --$self->[5]; + } + $hash = rehash($hash, $hashbase, $tsize); } } sub FIRSTKEY { - local($self) = @_; - $$self[6] = -1; - &NEXTKEY; + my ($self) = @_; + $self->[6] = -1; + goto &NEXTKEY; } sub NEXTKEY { - local($self) = @_; - local($klen, $vlen, $tsize, $rlen, $entries, $iterix) = @$self[1..6]; + my ($self) = @_; + my (undef, $klen, $vlen, $tsize, $rlen, $entries, $iterix) = @$self; for (++$iterix; $iterix < $tsize->[1]; ++$iterix) { - next unless substr($$self[0], $iterix * $rlen, 1) eq "\2"; - $$self[6] = $iterix; - return substr($$self[0], $iterix * $rlen + 1, $klen); + next unless substr($self->[0], $iterix * $rlen, 1) eq "\2"; + $self->[6] = $iterix; + return substr($self->[0], $iterix * $rlen + 1, $klen); } - $$self[6] = -1; + $self->[6] = -1; undef; } @@ -155,32 +155,29 @@ sub EXISTS { } sub hashkey { + my ($key, $klen, $tsize) = @_; croak(qq/Key "$key" is not $klen characters long/) - if length($key) != $klen; - $hash = 2; + if length($key) != $klen; + my $hash = 2; for (unpack('C*', $key)) { - $hash = $hash * 33 + $_; - &_hashwrap if $hash >= 1e13; + $hash = $hash * 33 + $_; + $hash = _hashwrap($hash, $tsize) if $hash >= 1e13; } - &_hashwrap if $hash >= $tsize->[1]; - $hash = 1 unless $hash; - $hashbase = $hash; + $hash = _hashwrap($hash, $tsize) if $hash >= $tsize->[1]; + $hash ||= 1; + return $hash; } sub _hashwrap { - $hash -= int($hash / $tsize->[1]) * $tsize->[1]; + my ($hash, $tsize) = @_; + return $hash - int($hash / $tsize->[1]) * $tsize->[1]; } sub rehash { + my ($hash, $hashbase, $tsize) = @_; $hash += $hashbase; $hash -= $tsize->[1] if $hash >= $tsize->[1]; -} - -# using POSIX::ceil() would be too heavy, and not all platforms have it. -sub ceil { - my $num = shift; - $num = int($num + 1) unless $num == int $num; - return $num; + return $hash; } # See: @@ -191,21 +188,20 @@ sub ceil { sub findgteprime { # find the smallest prime integer greater than or equal to use integer; - my $num = ceil(shift); + my $num = builtin::ceil(shift); return 2 if $num <= 2; $num++ unless $num % 2; - my $i; my $sqrtnum = int sqrt $num; my $sqrtnumsquared = $sqrtnum * $sqrtnum; NUM: for (;; $num += 2) { - if ($sqrtnumsquared < $num) { - $sqrtnum++; - $sqrtnumsquared = $sqrtnum * $sqrtnum; - } - for ($i = 3; $i <= $sqrtnum; $i += 2) { + if ($sqrtnumsquared < $num) { + $sqrtnum++; + $sqrtnumsquared = $sqrtnum * $sqrtnum; + } + for (my $i = 3; $i <= $sqrtnum; $i += 2) { next NUM unless $num % $i; } return $num; diff --git a/gnu/usr.bin/perl/lib/UNIVERSAL.pm b/gnu/usr.bin/perl/lib/UNIVERSAL.pm index 12800fb54cc..e73c988abaa 100644 --- a/gnu/usr.bin/perl/lib/UNIVERSAL.pm +++ b/gnu/usr.bin/perl/lib/UNIVERSAL.pm @@ -1,6 +1,6 @@ package UNIVERSAL; -our $VERSION = '1.13'; +our $VERSION = '1.14'; # UNIVERSAL should not contain any extra subs/methods beyond those # that it exists to define. The existence of import() below is a historical @@ -87,7 +87,10 @@ inherits from (or is itself) the name of the package C or inherits from package C. If you're not sure what you have (the C case), wrap the method call in an -C block to catch the exception if C is undefined. +C block to catch the exception if C is undefined or an unblessed +reference. The L operator|perlop/"Class Instance Operator"> is an +alternative that simply returns false in this case, so the C is not +needed. If you want to be sure that you're calling C as a method, not a class, check the invocand with C from L first: diff --git a/gnu/usr.bin/perl/lib/Unicode/UCD.pm b/gnu/usr.bin/perl/lib/Unicode/UCD.pm index 11fa2bef6a4..6f4c4b25028 100644 --- a/gnu/usr.bin/perl/lib/Unicode/UCD.pm +++ b/gnu/usr.bin/perl/lib/Unicode/UCD.pm @@ -5,7 +5,7 @@ use warnings; no warnings 'surrogate'; # surrogates can be inputs to this use charnames (); -our $VERSION = '0.75'; +our $VERSION = '0.78'; sub DEBUG () { 0 } $|=1 if DEBUG; @@ -1972,7 +1972,7 @@ Locale is not completely independent. The I field contains results to use when the locale is a Turkic language. For more information about case mappings see -L +L =cut @@ -2219,7 +2219,7 @@ hash will not have any of the base keys, like C, C, etc., but will contain only locale keys. For more information about case mappings see -L +L =cut @@ -2346,25 +2346,23 @@ my %NAMEDSEQ; sub _namedseq { unless (%NAMEDSEQ) { - my $namedseqfh = openunicode("Name.pl"); - local $_; - local $/ = "\n"; - while (<$namedseqfh>) { - next if m/ ^ \s* \# /x; - - # Each entry is currently two lines. The first contains the code + my @list = split "\n", do "unicore/Name.pl"; + for (my $i = 0; $i < @list; $i += 3) { + # Each entry is currently three lines. The first contains the code # points in the sequence separated by spaces. If this entry # doesn't have spaces, it isn't a named sequence. - if (/^ [0-9A-F]{4,5} (?: \ [0-9A-F]{4,5} )+ $ /x) { - my $sequence = $_; - chomp $sequence; - - # And the second is the name - my $name = <$namedseqfh>; - chomp $name; - my @s = map { chr(hex($_)) } split(' ', $sequence); - $NAMEDSEQ{$name} = join("", @s); - } + next unless $list[$i] =~ /^ [0-9A-F]{4,5} (?: \ [0-9A-F]{4,5} )+ $ /x; + + my $sequence = $list[$i]; + chomp $sequence; + + # And the second is the name + my $name = $list[$i+1]; + chomp $name; + my @s = map { chr(hex($_)) } split(' ', $sequence); + $NAMEDSEQ{$name} = join("", @s); + + # And the third is empty } } } @@ -2448,7 +2446,7 @@ sub _numeric { use Unicode::UCD 'num'; my $val = num("123"); - my $one_quarter = num("\N{VULGAR FRACTION 1/4}"); + my $one_quarter = num("\N{VULGAR FRACTION ONE QUARTER}"); my $val = num("12a", \$valid_length); # $valid_length contains 2 C returns the numeric value of the input Unicode string; or C if it @@ -3473,7 +3471,7 @@ points 97 through 122. To get the mapping for any code point in this range, you take the offset it has from the beginning code point of the range, and add that to the mapping for that first code point. So, the mapping for 122 ("z") is derived by taking the offset of 122 from 97 (=25) and adding that to 65, -yielding 90 ("z"). Likewise for everything in between. +yielding 90 ("Z"). Likewise for everything in between. Requiring this simple adjustment allows the returned arrays to be significantly smaller than otherwise, up to a factor of 10, speeding up @@ -4727,7 +4725,7 @@ nor the punctuation. For blocks see L -For scripts see UTR #24: L +For scripts see UTR #24: L =head2 B diff --git a/gnu/usr.bin/perl/lib/Unicode/UCD.t b/gnu/usr.bin/perl/lib/Unicode/UCD.t index eb7fbd8f353..3d391212171 100644 --- a/gnu/usr.bin/perl/lib/Unicode/UCD.t +++ b/gnu/usr.bin/perl/lib/Unicode/UCD.t @@ -19,7 +19,7 @@ use Test::More; use Unicode::UCD qw(charinfo charprop charprops_all); -my $expected_version = '13.0.0'; +my $expected_version = '14.0.0'; my $current_version = Unicode::UCD::UnicodeVersion; my $v_unicode_version = pack "C*", split /\./, $current_version; my $unknown_script = ($v_unicode_version lt v5.0.0) @@ -786,7 +786,7 @@ SKIP: skip("Latin range count will be wrong when using older Unicode release", 2) if $current_version lt $expected_version; my $n1 = @$r1; - is($n1, 32, "number of ranges in Latin script (Unicode $expected_version)") if $::IS_ASCII; + is($n1, 38, "number of ranges in Latin script (Unicode $expected_version)") if $::IS_ASCII; shift @$r1 while @$r1; my $r2 = charscript('Latin'); is(@$r2, $n1, "modifying results should not mess up internal caches"); @@ -800,6 +800,8 @@ SKIP: if ($v_unicode_version ge v4.1.0) { use Unicode::UCD qw(namedseq); + is(namedseq("KEYCAP DIGIT ZERO"), "0\x{FE0F}\x{20E3}", + "namedseq with char that varies under EBCDIC"); is(namedseq("KATAKANA LETTER AINU P"), "\x{31F7}\x{309A}", "namedseq"); is(namedseq("KATAKANA LETTER AINU Q"), undef); is(namedseq(), undef); @@ -1596,45 +1598,9 @@ is(@list, 0, "prop_invmap('Perl_Charnames') returns since internal-Perl- @list = prop_invmap("Is_Is_Any"); is(@list, 0, "prop_invmap('Is_Is_Any') returns since two is's"); -# The files for these properties are not used by Perl, but are retained for -# backwards compatibility with applications that read them directly, with -# comments in them that their use is deprecated. Until such time as we remove -# them completely, we test that they exist, are correct, and that their -# formats haven't changed. This hash contains the info needed to test them as -# if they were regular properties. 'replaced_by' gives the equivalent -# property now used by Perl. -my %legacy_props = ( - Legacy_Case_Folding => { replaced_by => 'cf', - file => 'To/Fold', - swash_name => 'ToFold' - }, - Legacy_Lowercase_Mapping => { replaced_by => 'lc', - file => 'To/Lower', - swash_name => 'ToLower' - }, - Legacy_Titlecase_Mapping => { replaced_by => 'tc', - file => 'To/Title', - swash_name => 'ToTitle' - }, - Legacy_Uppercase_Mapping => { replaced_by => 'uc', - file => 'To/Upper', - swash_name => 'ToUpper' - }, - Legacy_Perl_Decimal_Digit => { replaced_by => 'Perl_Decimal_Digit', - file => 'To/Digit', - swash_name => 'ToDigit' - }, - ); - -foreach my $legacy_prop (keys %legacy_props) { - @list = prop_invmap($legacy_prop); - is(@list, 0, "'$legacy_prop' is unknown to prop_invmap"); -} - # The files for these properties shouldn't have their formats changed in case # applications use them (though such use is deprecated). -my @legacy_file_format = (keys %legacy_props, - qw( Bidi_Mirroring_Glyph +my @legacy_file_format = (qw( Bidi_Mirroring_Glyph NFKC_Casefold ) ); @@ -1658,8 +1624,7 @@ my %tested_invmaps; # lists returned by prop_invlist(), which has already been tested. PROPERTY: -foreach my $prop (sort(keys %props), sort keys %legacy_props) { - my $is_legacy = 0; +foreach my $prop (sort(keys %props)) { my $loose_prop = &Unicode::UCD::loose_name(lc $prop); my $suppressed = grep { $_ eq $loose_prop } @Unicode::UCD::suppressed_properties; @@ -1673,39 +1638,12 @@ foreach my $prop (sort(keys %props), sort keys %legacy_props) { if (! $name) { # Here, Perl doesn't know about this property. It could be a - # suppressed one, or a legacy one. - if (grep { $prop eq $_ } keys %legacy_props) { - - # For legacy properties, we look up the modern equivalent - # property instead; later massaging the results to look like the - # known format of the legacy property. We add info about the - # legacy property to the data structures for the rest of the - # properties; this is to avoid more special cases for the legacies - # in the code below - $full_name = $name = $prop; - $actual_lookup_prop = $legacy_props{$prop}->{'replaced_by'}; - my $base_file = $legacy_props{$prop}->{'file'}; - - # This legacy property is otherwise unknown to Perl; so shouldn't - # have any information about it already. - ok(! exists $Unicode::UCD::loose_property_to_file_of{$loose_prop}, - "There isn't a hash entry for file lookup of $prop"); - $Unicode::UCD::loose_property_to_file_of{$loose_prop} = $base_file; - - ok(! exists $Unicode::UCD::file_to_swash_name{$loose_prop}, - "There isn't a hash entry for swash lookup of $prop"); - $Unicode::UCD::file_to_swash_name{$base_file} - = $legacy_props{$prop}->{'swash_name'}; - $display_prop = $prop; - $is_legacy = 1; - } - else { + # suppressed one if (! $suppressed) { fail("prop_invmap('$prop')"); diag("is unknown to prop_aliases(), and we need it in order to test prop_invmap"); } next PROPERTY; - } } # Normalize the short name, as it is stored in the hashes under the @@ -1728,49 +1666,6 @@ foreach my $prop (sort(keys %props), sort keys %legacy_props) { my ($invlist_ref, $invmap_ref, $format, $missing) = prop_invmap($actual_lookup_prop); my $return_ref = [ $invlist_ref, $invmap_ref, $format, $missing ]; - - # The legacy property files all are expanded out so that each range is 1 - # element long. That isn't true of the modern equivalent we use to check - # those files for correctness against. So take the output of the proxy - # and expand it to match the legacy file. - if ($is_legacy) { - my @expanded_list; - my @expanded_map; - for my $i (0 .. @$invlist_ref - 1 - 1) { - if (ref $invmap_ref->[$i] || $invmap_ref->[$i] eq $missing) { - - # No adjustments should be done for the default mapping and - # the multi-char ones. - push @expanded_list, $invlist_ref->[$i]; - push @expanded_map, $invmap_ref->[$i]; - } - else { - - # Expand the range into separate elements for each item. - my $offset = 0; - for my $j ($invlist_ref->[$i] .. $invlist_ref->[$i+1] -1) { - push @expanded_list, $j; - push @expanded_map, $invmap_ref->[$i] + $offset; - - # The 'ae' format is for Legacy_Perl_Decimal_Digit; the - # other 4 are kept with leading zeros in the file, so - # convert to that. - $expanded_map[-1] = sprintf("%04X", $expanded_map[-1]) - if $format ne 'ae'; - $offset++; - } - } - } - - # Final element is taken as is. The map should always be to the - # default value, so don't do a sprintf like we did above. - push @expanded_list, $invlist_ref->[-1]; - push @expanded_map, $invmap_ref->[-1]; - - $invlist_ref = \@expanded_list; - $invmap_ref = \@expanded_map; - } - # If have already tested this property under a different name, merely # compare the return from now with the saved one from before. if (exists $tested_invmaps{$name}) { @@ -1861,11 +1756,6 @@ foreach my $prop (sort(keys %props), sort keys %legacy_props) { next PROPERTY; } } - elsif ($missing ne "0" && ! grep { $prop eq $_ } keys %legacy_props) { - fail("prop_invmap('$display_prop')"); - diag("The missings should be '0'; got '$missing'"); - next PROPERTY; - } } elsif ($missing =~ /[<>]/) { fail("prop_invmap('$display_prop')"); @@ -2060,21 +1950,18 @@ foreach my $prop (sort(keys %props), sort keys %legacy_props) { ? "%04X" : $file_range_format; - # Certain of the proxy properties have to be adjusted to match the - # real ones. - if ($full_name - =~ /^(Legacy_)?(Case_Folding|(Lower|Title|Upper)case_Mapping)/) + # Combination properties, where the same file contains mappings to both + # the simple and full versions, have to be adjusted when looking at + # the full versions. + if ($full_name =~ /^ ( Case_Folding + | (Lower|Title|Upper) case_Mapping ) + $ /x) { - - # Here we have either - # 1) Case_Folding; or - # 2) a proxy that is a full mapping, which means that what the - # real property is is the equivalent simple mapping. - # In both cases, the file will have a standard list containing - # simple mappings (to a single code point), and a specials hash - # which contains all the mappings that are to multiple code - # points. First, extract a list containing all the file's simple - # mappings. + # The file will have a standard list containing simple mappings + # (to a single code point), and a specials hash which contains all + # the mappings that are to multiple code points. + # + # First, extract a list containing all the file's simple mappings. my @list; for (split "\n", $official) { my ($start, $end, $value) = / ^ (.+?) \t (.*?) \t (.+?) diff --git a/gnu/usr.bin/perl/lib/_charnames.pm b/gnu/usr.bin/perl/lib/_charnames.pm index b38028d24a7..909109d624b 100644 --- a/gnu/usr.bin/perl/lib/_charnames.pm +++ b/gnu/usr.bin/perl/lib/_charnames.pm @@ -6,7 +6,7 @@ package _charnames; use strict; use warnings; -our $VERSION = '1.48'; +our $VERSION = '1.50'; use unicore::Name; # mktables-generated algorithmically-defined names use bytes (); # for $bytes::hint_bits @@ -484,6 +484,7 @@ sub lookup_name ($$$;$) { # Keep in mind that $lookup_name has had the metas quoted. my $scripts_trie = ""; my $name_has_uppercase; + my @scripts; if (($^H{charnames_short}) && $lookup_name =~ /^ (?: \\ \s)* # Quoted space (.+?) # $1 = the script @@ -506,18 +507,33 @@ sub lookup_name ($$$;$) { $name_has_uppercase = $name =~ /[[:upper:]]/; } else { # Otherwise look in allowed scripts - $scripts_trie = $^H{charnames_scripts}; + # We want to search first by script name then by letter name, so that + # if the user imported `use charnames qw(arabic hebrew)` and asked for + # \N{alef} they get ARABIC LETTER ALEF, and if they imported + # `... (hebrew arabic)` and ask for \N{alef} they get HEBREW LETTER ALEF. + # We can't rely on the regex engine to preserve ordering like that, so + # pick the pipe-seperated string apart so we can iterate over it. + @scripts = split(/\|/, $^H{charnames_scripts}); # Use original name to find its input casing $name_has_uppercase = $name =~ /[[:upper:]]/; } - my $case = $name_has_uppercase ? "CAPITAL" : "SMALL"; - return if (! $scripts_trie || $txt !~ - /^ (?: $scripts_trie ) \ (?:$case\ )? LETTER \ \U$lookup_name $/xm); - # Here have found the input name in the table. - @off = ($-[0], $+[0]); + if(@scripts) { + SCRIPTS: foreach my $script (@scripts) { + if($txt =~ /^ (?: $script ) \ (?:$case\ )? LETTER \ \U$lookup_name $/xm) { + @off = ($-[0], $+[0]); + last SCRIPTS; + } + } + return unless(@off); + } + else { + return if (! $scripts_trie || $txt !~ + /^ (?: $scripts_trie ) \ (?:$case\ )? LETTER \ \U$lookup_name $/xm); + @off = ($-[0], $+[0]); + } } # Here, the input name has been found; we haven't set up the output, @@ -653,6 +669,8 @@ sub import { shift; ## ignore class name + populate_txt() unless $txt; + if (not @_) { carp("'use charnames' needs explicit imports list"); } @@ -704,15 +722,13 @@ sub import $^H{charnames_full} = delete $h{':full'} || 0; $^H{charnames_loose} = delete $h{':loose'} || 0; $^H{charnames_short} = delete $h{':short'} || 0; - my @scripts = map { uc quotemeta } keys %h; + my @scripts = map { uc quotemeta } grep { /^[^:]/ } @args; ## ## If utf8? warnings are enabled, and some scripts were given, ## see if at least we can find one letter from each script. ## if (warnings::enabled('utf8') && @scripts) { - populate_txt() unless $txt; - for my $script (@scripts) { if (not $txt =~ m/^$script (?:CAPITAL |SMALL )?LETTER /m) { warnings::warn('utf8', "No such script: '$script'"); @@ -740,6 +756,23 @@ sub import } } + my %letters_by_script = map { + $_ => [ + ($txt =~ m/$_(?: (?:small|capital))? letter (.*)/ig) + ] + } @scripts; + SCRIPTS: foreach my $this_script (@scripts) { + my @other_scripts = grep { $_ ne $this_script } @scripts; + my @this_script_letters = @{$letters_by_script{$this_script}}; + my @other_script_letters = map { @{$letters_by_script{$_}} } @other_scripts; + foreach my $this_letter (@this_script_letters) { + if(grep { $_ eq $this_letter } @other_script_letters) { + warn "charnames: some short character names may clash in [".join(', ', sort @scripts)."], for example $this_letter\n"; + last SCRIPTS; + } + } + } + $^H{charnames_scripts} = join "|", @scripts; # Stringifiy them as a trie } # import diff --git a/gnu/usr.bin/perl/lib/bytes.pm b/gnu/usr.bin/perl/lib/bytes.pm index 8c7a2620a59..febb85c3ca5 100644 --- a/gnu/usr.bin/perl/lib/bytes.pm +++ b/gnu/usr.bin/perl/lib/bytes.pm @@ -1,6 +1,9 @@ package bytes; -our $VERSION = '1.07'; +use strict; +use warnings; + +our $VERSION = '1.08'; $bytes::hint_bits = 0x00000008; @@ -12,6 +15,7 @@ sub unimport { $^H &= ~$bytes::hint_bits; } +our $AUTOLOAD; sub AUTOLOAD { require "bytes_heavy.pl"; goto &$AUTOLOAD if defined &$AUTOLOAD; diff --git a/gnu/usr.bin/perl/lib/bytes.t b/gnu/usr.bin/perl/lib/bytes.t index 4e50ff33611..4025d9db945 100644 --- a/gnu/usr.bin/perl/lib/bytes.t +++ b/gnu/usr.bin/perl/lib/bytes.t @@ -1,3 +1,7 @@ +#!perl + +use strict; +use warnings; BEGIN { chdir 't' if -d 't'; @@ -14,8 +18,11 @@ is(length($a), 1, "length sanity check"); is(substr($a, 0, 1), "\x{100}", "substr sanity check"); is(index($a, "\x{100}"), 0, "index sanity check"); is(rindex($a, "\x{100}"), 0, "rindex sanity check"); -is(bytes::length($a), 2, "bytes::length sanity check"); -is(bytes::chr(0x100), chr(0), "bytes::chr sanity check"); +{ + no warnings 'prototype'; # bytes::length() called too early to check prototype at... + is(bytes::length($a), 2, "bytes::length sanity check"); + is(bytes::chr(0x100), chr(0), "bytes::chr sanity check"); +} { use bytes; diff --git a/gnu/usr.bin/perl/lib/charnames.pm b/gnu/usr.bin/perl/lib/charnames.pm index 0fb341fd1dd..472773dece4 100644 --- a/gnu/usr.bin/perl/lib/charnames.pm +++ b/gnu/usr.bin/perl/lib/charnames.pm @@ -1,7 +1,7 @@ package charnames; use strict; use warnings; -our $VERSION = '1.48'; +our $VERSION = '1.50'; use unicore::Name; # mktables-generated algorithmically-defined names use _charnames (); # The submodule for this where most of the work gets done @@ -50,7 +50,8 @@ sub vianame # can't change it because of backward compatibility. New code can use # string_vianame() instead. my $ord = CORE::hex $1; - return pack("U", $ord) if $ord <= 255 || ! ((caller 0)[8] & $bytes::hint_bits); + return chr utf8::unicode_to_native($ord) if $ord <= 255 + || ! ((caller 0)[8] & $bytes::hint_bits); _charnames::carp _charnames::not_legal_use_bytes_msg($arg, chr $ord); return; } @@ -76,7 +77,8 @@ sub string_vianame { if ($arg =~ /^U\+([0-9a-fA-F]+)$/) { my $ord = CORE::hex $1; - return pack("U", $ord) if $ord <= 255 || ! ((caller 0)[8] & $bytes::hint_bits); + return chr utf8::unicode_to_native($ord) if $ord <= 255 + || ! ((caller 0)[8] & $bytes::hint_bits); _charnames::carp _charnames::not_legal_use_bytes_msg($arg, chr $ord); return; diff --git a/gnu/usr.bin/perl/lib/charnames.t b/gnu/usr.bin/perl/lib/charnames.t index 01e1fd7d92b..be260af2900 100644 --- a/gnu/usr.bin/perl/lib/charnames.t +++ b/gnu/usr.bin/perl/lib/charnames.t @@ -153,7 +153,7 @@ sub test_vianame ($$$) { # \p{name=} is always loose matching $all_pass &= like(chr($i), qr/^\p{name=$loose_name}$/, - "Verify /\p{name=$loose_name}/ matches chr(0x$hex)"); + "Verify /\\p{name=$loose_name}/ matches chr(0x$hex)"); $wildcard_count++; @@ -181,7 +181,7 @@ sub test_vianame ($$$) { # \p{name=/.../} is always full matching $all_pass &= like(chr($i), qr!^\p{name=/$assembled/}!, - "Verify /\p{name=/$assembled/} matches chr(0x$hex)"); + "Verify /\\p{name=/$assembled/} matches chr(0x$hex)"); } return $all_pass; @@ -200,6 +200,42 @@ sub test_vianame ($$$) { 'Verify using scripts gives the correct UTF8'); } +{ + my $caught_error; + local $SIG{__WARN__} = sub { $caught_error = shift; }; + eval q{ + use charnames qw(runic greek); + is($caught_error, undef, "no letter name clashes between runic and greek"); + }; +} + +{ + my $caught_error; + local $SIG{__WARN__} = sub { $caught_error = shift; }; + eval q{ + use charnames qw(hebrew arabic :full); + like( + $caught_error, + qr/charnames: some short character names may clash in \[ARABIC, HEBREW\], for example ALEF/, + "warned about potential character name clashes when asking for 'hebrew' and 'arabic'" + ); + ok("\N{alef}" eq "\N{HEBREW LETTER ALEF}", '\N{alef} gives HEBREW LETTER ALEF because we asked for Hebrew first'); + ok("\N{bet}" eq "\N{HEBREW LETTER BET}", '\N{bet} gives HEBREW LETTER BET'); + ok("\N{sheen}" eq "\N{ARABIC LETTER SHEEN}", 'and \N{sheen} gives ARABIC LETTER SHEEN'); + }; + eval q{ + use charnames qw(arabic hebrew :full); + like( + $caught_error, + qr/charnames: some short character names may clash in \[ARABIC, HEBREW\], for example ALEF/, + "warned about potential character name clashes when asking for 'arabic' and 'hebrew'" + ); + ok("\N{alef}" eq "\N{ARABIC LETTER ALEF}", '\N{alef} gives ARABIC LETTER ALEF because we asked for Arabic first'); + ok("\N{bet}" eq "\N{HEBREW LETTER BET}", '\N{bet} gives HEBREW LETTER BET'); + ok("\N{sheen}" eq "\N{ARABIC LETTER SHEEN}", 'and \N{sheen} gives ARABIC LETTER SHEEN'); + }; +} + { use charnames ':full'; is("\x{263a}", "\N{WHITE SMILING FACE}", 'Verify "\x{263a}" eq "\N{WHITE SMILING FACE}"'); @@ -1348,9 +1384,9 @@ is("\N{U+1D0C5}", "\N{BYZANTINE MUSICAL SYMBOL FTHORA SKLIRON CHROMA VASIS}", 'V use charnames ":loose"; is(charnames::string_vianame($loose_name), $utf8, "Verify string_vianame(\"$loose_name\") is the proper utf8"); - like($utf8, qr/^\p{name=$name}$/, "Verify /\p{name=$name}\$/ is the proper utf8"); - like($utf8, qr/^\p{name=$loose_name}$/, "Verify /\p{name=$loose_name}\$/ is the proper utf8"); - like($utf8, qr!^\p{name=/\A$name\z/}!, "Verify /\p{name=/$\A$name\z/} is the proper utf8"); + like($utf8, qr/^\p{name=$name}$/, "Verify /\\p{name=$name}\$/ is the proper utf8"); + like($utf8, qr/^\p{name=$loose_name}$/, "Verify /\\p{name=$loose_name}\$/ is the proper utf8"); + like($utf8, qr!^\p{name=/\A$name\z/}!, "Verify /\\p{name=/$\A$name\z/} is the proper utf8"); #diag("$name, $utf8"); } close $fh; diff --git a/gnu/usr.bin/perl/lib/diagnostics.pm b/gnu/usr.bin/perl/lib/diagnostics.pm index a9de570adab..7074be6e2e1 100644 --- a/gnu/usr.bin/perl/lib/diagnostics.pm +++ b/gnu/usr.bin/perl/lib/diagnostics.pm @@ -72,7 +72,7 @@ trace. =head2 The I Program -While apparently a whole nuther program, I is actually nothing +Another program, I is actually nothing more than a link to the (executable) F module, as well as a link to the F documentation. The B<-v> flag is like the C directive. @@ -186,7 +186,7 @@ use 5.009001; use Carp; $Carp::Internal{__PACKAGE__.""}++; -our $VERSION = '1.37'; +our $VERSION = '1.39'; our $DEBUG; our $VERBOSE; our $PRETTY; @@ -281,7 +281,8 @@ if (eof(POD_DIAG)) { 'sol' => '/', # Forward slash / solidus 'verbar' => '|', # vertical bar - "Aacute" => "\xC1" # capital A, acute accent + # # capital A, acute accent + "Aacute" => chr utf8::unicode_to_native(0xC1) # etc ); diff --git a/gnu/usr.bin/perl/lib/feature.pm b/gnu/usr.bin/perl/lib/feature.pm index e6f467e9e48..a73bca6e618 100644 --- a/gnu/usr.bin/perl/lib/feature.pm +++ b/gnu/usr.bin/perl/lib/feature.pm @@ -5,34 +5,40 @@ package feature; -our $VERSION = '1.58'; +our $VERSION = '1.72'; our %feature = ( - fc => 'feature_fc', - isa => 'feature_isa', - say => 'feature_say', - state => 'feature_state', - switch => 'feature_switch', - bitwise => 'feature_bitwise', - indirect => 'feature_indirect', - evalbytes => 'feature_evalbytes', - signatures => 'feature_signatures', - current_sub => 'feature___SUB__', - refaliasing => 'feature_refaliasing', - postderef_qq => 'feature_postderef_qq', - unicode_eval => 'feature_unieval', - declared_refs => 'feature_myref', - unicode_strings => 'feature_unicode', + fc => 'feature_fc', + isa => 'feature_isa', + say => 'feature_say', + try => 'feature_try', + defer => 'feature_defer', + state => 'feature_state', + switch => 'feature_switch', + bitwise => 'feature_bitwise', + indirect => 'feature_indirect', + evalbytes => 'feature_evalbytes', + signatures => 'feature_signatures', + current_sub => 'feature___SUB__', + refaliasing => 'feature_refaliasing', + postderef_qq => 'feature_postderef_qq', + unicode_eval => 'feature_unieval', + declared_refs => 'feature_myref', + unicode_strings => 'feature_unicode', + multidimensional => 'feature_multidimensional', + bareword_filehandles => 'feature_bareword_filehandles', + extra_paired_delimiters => 'feature_more_delims', ); our %feature_bundle = ( - "5.10" => [qw(indirect say state switch)], - "5.11" => [qw(indirect say state switch unicode_strings)], - "5.15" => [qw(current_sub evalbytes fc indirect say state switch unicode_eval unicode_strings)], - "5.23" => [qw(current_sub evalbytes fc indirect postderef_qq say state switch unicode_eval unicode_strings)], - "5.27" => [qw(bitwise current_sub evalbytes fc indirect postderef_qq say state switch unicode_eval unicode_strings)], - "all" => [qw(bitwise current_sub declared_refs evalbytes fc indirect isa postderef_qq refaliasing say signatures state switch unicode_eval unicode_strings)], - "default" => [qw(indirect)], + "5.10" => [qw(bareword_filehandles indirect multidimensional say state switch)], + "5.11" => [qw(bareword_filehandles indirect multidimensional say state switch unicode_strings)], + "5.15" => [qw(bareword_filehandles current_sub evalbytes fc indirect multidimensional say state switch unicode_eval unicode_strings)], + "5.23" => [qw(bareword_filehandles current_sub evalbytes fc indirect multidimensional postderef_qq say state switch unicode_eval unicode_strings)], + "5.27" => [qw(bareword_filehandles bitwise current_sub evalbytes fc indirect multidimensional postderef_qq say state switch unicode_eval unicode_strings)], + "5.35" => [qw(bareword_filehandles bitwise current_sub evalbytes fc isa postderef_qq say signatures state unicode_eval unicode_strings)], + "all" => [qw(bareword_filehandles bitwise current_sub declared_refs defer evalbytes extra_paired_delimiters fc indirect isa multidimensional postderef_qq refaliasing say signatures state switch try unicode_eval unicode_strings)], + "default" => [qw(bareword_filehandles indirect multidimensional)], ); $feature_bundle{"5.12"} = $feature_bundle{"5.11"}; @@ -53,6 +59,9 @@ $feature_bundle{"5.29"} = $feature_bundle{"5.27"}; $feature_bundle{"5.30"} = $feature_bundle{"5.27"}; $feature_bundle{"5.31"} = $feature_bundle{"5.27"}; $feature_bundle{"5.32"} = $feature_bundle{"5.27"}; +$feature_bundle{"5.33"} = $feature_bundle{"5.27"}; +$feature_bundle{"5.34"} = $feature_bundle{"5.27"}; +$feature_bundle{"5.36"} = $feature_bundle{"5.35"}; $feature_bundle{"5.9.5"} = $feature_bundle{"5.10"}; my %noops = ( postderef => 1, @@ -63,8 +72,8 @@ my %removed = ( ); our $hint_shift = 26; -our $hint_mask = 0x1c000000; -our @hint_bundles = qw( default 5.10 5.11 5.15 5.23 5.27 ); +our $hint_mask = 0x3c000000; +our @hint_bundles = qw( default 5.10 5.11 5.15 5.23 5.27 5.35 ); # This gets set (for now) in $^H as well as in %^H, # for runtime speed of the uc/lc/ucfirst/lcfirst functions. @@ -74,24 +83,28 @@ our $hint_uni8bit = 0x00000800; # TODO: # - think about versioned features (use feature switch => 2) +=encoding utf8 + =head1 NAME feature - Perl pragma to enable new features =head1 SYNOPSIS - use feature qw(say switch); - given ($foo) { - when (1) { say "\$foo == 1" } - when ([2,3]) { say "\$foo == 2 || \$foo == 3" } - when (/^a[bc]d$/) { say "\$foo eq 'abd' || \$foo eq 'acd'" } - when ($_ > 100) { say "\$foo > 100" } - default { say "None of the above" } - } + use feature qw(fc say); + + # Without the "use feature" above, this code would not be able to find + # the built-ins "say" or "fc": + say "The case-folded version of $x is: " . fc $x; + + + # set features to match the :5.10 bundle, which may turn off or on + # multiple features (see below) + use feature ':5.10'; - use feature ':5.10'; # loads all features available in perl 5.10 - use v5.10; # implicitly loads :5.10 feature bundle + # implicitly loads :5.10 feature bundle + use v5.10; =head1 DESCRIPTION @@ -135,7 +148,7 @@ disable I features (an unusual request!) use C. =head2 The 'say' feature -C tells the compiler to enable the Perl 6 style +C tells the compiler to enable the Raku-inspired C function. See L for details. @@ -153,13 +166,13 @@ This feature is available starting with Perl 5.10. =head2 The 'switch' feature -B: Because the L is -experimental, Perl will warn when you use this feature, unless you have -explicitly disabled the warning: +B: This feature is still experimental and the implementation may +change or be removed in future versions of Perl. For this reason, Perl will +warn when you use the feature, unless you have explicitly disabled the warning: no warnings "experimental::smartmatch"; -C tells the compiler to enable the Perl 6 +C tells the compiler to enable the Raku given/when construct. See L for details. @@ -202,8 +215,8 @@ couldn't be changed without breaking some things that had come to rely on them, so the feature can be enabled and disabled. Details are at L. -C is like string C, but operating on a byte stream that is -not UTF-8 encoded. Details are at L. Without a +C is like string C, but it treats its argument as a byte +string. Details are at L. Without a S> nor a S> (or higher) declaration in the current scope, you can still access it by instead writing C. @@ -281,30 +294,33 @@ regardless of what feature declarations are in scope. =head2 The 'signatures' feature -B: This feature is still experimental and the implementation may -change in future versions of Perl. For this reason, Perl will -warn when you use the feature, unless you have explicitly disabled the -warning: - - no warnings "experimental::signatures"; - -This enables unpacking of subroutine arguments into lexical variables -by syntax such as +This enables syntax for declaring subroutine arguments as lexical variables. +For example, for this subroutine: sub foo ($left, $right) { - return $left + $right; + return $left + $right; } +Calling C will assign C<3> into C<$left> and C<7> into C<$right>. + See L for details. -This feature is available from Perl 5.20 onwards. +This feature is available from Perl 5.20 onwards. From Perl 5.20 to 5.34, +it was classed as experimental, and Perl emitted a warning for its usage, +except when explicitly disabled: + + no warnings "experimental::signatures"; + +As of Perl 5.36, use of this feature no longer triggers a warning, though the +C warning category still exists (for compatibility +with code that disables it). This feature is now considered stable, and is +enabled automatically by C (or higher). =head2 The 'refaliasing' feature B: This feature is still experimental and the implementation may -change in future versions of Perl. For this reason, Perl will -warn when you use the feature, unless you have explicitly disabled the -warning: +change or be removed in future versions of Perl. For this reason, Perl will +warn when you use the feature, unless you have explicitly disabled the warning: no warnings "experimental::refaliasing"; @@ -339,9 +355,8 @@ category. =head2 The 'declared_refs' feature B: This feature is still experimental and the implementation may -change in future versions of Perl. For this reason, Perl will -warn when you use the feature, unless you have explicitly disabled the -warning: +change or be removed in future versions of Perl. For this reason, Perl will +warn when you use the feature, unless you have explicitly disabled the warning: no warnings "experimental::declared_refs"; @@ -358,7 +373,16 @@ This allows the use of the C infix operator, which tests whether the scalar given by the left operand is an object of the class given by the right operand. See L for more details. -This feature is available from Perl 5.32 onwards. +This feature is available from Perl 5.32 onwards. From Perl 5.32 to 5.34, +it was classed as experimental, and Perl emitted a warning for its usage, +except when explicitly disabled: + + no warnings "experimental::isa"; + +As of Perl 5.36, use of this feature no longer triggers a warning (though the +C warning category stilll exists for compatibility with +code that disables it). This feature is now considered stable, and is enabled +automatically by C (or higher). =head2 The 'indirect' feature @@ -372,61 +396,544 @@ previous versions, it was simply on all the time. To disallow (or warn on) indirect object syntax on older Perls, see the L CPAN module. -=head1 FEATURE BUNDLES +=head2 The 'multidimensional' feature -It's possible to load multiple features together, using -a I. The name of a feature bundle is prefixed with -a colon, to distinguish it from an actual feature. +This feature enables multidimensional array emulation, a perl 4 (or +earlier) feature that was used to emulate multidimensional arrays with +hashes. This works by converting code like C<< $foo{$x, $y} >> into +C<< $foo{join($;, $x, $y)} >>. It is enabled by default, but can be +turned off to disable multidimensional array emulation. - use feature ":5.10"; +When this feature is disabled the syntax that is normally replaced +will report a compilation error. -The following feature bundles are available: +This feature is available under this name from Perl 5.34 onwards. In +previous versions, it was simply on all the time. - bundle features included - --------- ----------------- - :default indirect +You can use the L module on CPAN to disable +multidimensional array emulation for older versions of Perl. + +=head2 The 'bareword_filehandles' feature. + +This feature enables bareword filehandles for builtin functions +operations, a generally discouraged practice. It is enabled by +default, but can be turned off to disable bareword filehandles, except +for the exceptions listed below. - :5.10 say state switch indirect +The perl built-in filehandles C, C, C, C, +C, C and the special C<_> are always enabled. - :5.12 say state switch unicode_strings indirect +This feature is enabled under this name from Perl 5.34 onwards. In +previous versions it was simply on all the time. - :5.14 say state switch unicode_strings indirect +You can use the L module on CPAN to disable +bareword filehandles for older versions of perl. - :5.16 say state switch unicode_strings - unicode_eval evalbytes current_sub fc - indirect +=head2 The 'try' feature. - :5.18 say state switch unicode_strings - unicode_eval evalbytes current_sub fc - indirect +B: This feature is still experimental and the implementation may +change or be removed in future versions of Perl. For this reason, Perl will +warn when you use the feature, unless you have explicitly disabled the warning: + + no warnings "experimental::try"; - :5.20 say state switch unicode_strings - unicode_eval evalbytes current_sub fc - indirect +This feature enables the C and C syntax, which allows exception +handling, where exceptions thrown from the body of the block introduced with +C are caught by executing the body of the C block. - :5.22 say state switch unicode_strings - unicode_eval evalbytes current_sub fc - indirect +For more information, see L. - :5.24 say state switch unicode_strings - unicode_eval evalbytes current_sub fc - postderef_qq indirect +=head2 The 'defer' feature - :5.26 say state switch unicode_strings - unicode_eval evalbytes current_sub fc - postderef_qq indirect +B: This feature is still experimental and the implementation may +change or be removed in future versions of Perl. For this reason, Perl will +warn when you use the feature, unless you have explicitly disabled the warning: - :5.28 say state switch unicode_strings - unicode_eval evalbytes current_sub fc - postderef_qq bitwise indirect + no warnings "experimental::defer"; - :5.30 say state switch unicode_strings - unicode_eval evalbytes current_sub fc - postderef_qq bitwise indirect +This feature enables the C block syntax, which allows a block of code +to be deferred until when the flow of control leaves the block which contained +it. For more details, see L. + +=head2 The 'extra_paired_delimiters' feature + +B: This feature is still experimental and the implementation may +change or be removed in future versions of Perl. For this reason, Perl will +warn when you use the feature, unless you have explicitly disabled the warning: + + no warnings "experimental::extra_paired_delimiters"; + +This feature enables the use of more paired string delimiters than the +traditional four, S >>>, S>, S>, and S>. When +this feature is on, for example, you can say SpatE<187>>>. + +This feature is available starting in Perl 5.36. + +The complete list of accepted paired delimiters as of Unicode 14.0 is: + + ( ) U+0028, U+0029 LEFT/RIGHT PARENTHESIS + < > U+003C, U+003E LESS-THAN/GREATER-THAN SIGN + [ ] U+005B, U+005D LEFT/RIGHT SQUARE BRACKET + { } U+007B, U+007D LEFT/RIGHT CURLY BRACKET + « » U+00AB, U+00BB LEFT/RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK + » « U+00BB, U+00AB RIGHT/LEFT-POINTING DOUBLE ANGLE QUOTATION MARK + ܆ ܇ U+0706, U+0707 SYRIAC COLON SKEWED LEFT/RIGHT + ༺ ༻ U+0F3A, U+0F3B TIBETAN MARK GUG RTAGS GYON, TIBETAN MARK GUG + RTAGS GYAS + ༼ ༽ U+0F3C, U+0F3D TIBETAN MARK ANG KHANG GYON, TIBETAN MARK ANG + KHANG GYAS + ᚛ ᚜ U+169B, U+169C OGHAM FEATHER MARK, OGHAM REVERSED FEATHER MARK + ‘ ’ U+2018, U+2019 LEFT/RIGHT SINGLE QUOTATION MARK + ’ ‘ U+2019, U+2018 RIGHT/LEFT SINGLE QUOTATION MARK + “ ” U+201C, U+201D LEFT/RIGHT DOUBLE QUOTATION MARK + ” “ U+201D, U+201C RIGHT/LEFT DOUBLE QUOTATION MARK + ‵ ′ U+2035, U+2032 REVERSED PRIME, PRIME + ‶ ″ U+2036, U+2033 REVERSED DOUBLE PRIME, DOUBLE PRIME + ‷ ‴ U+2037, U+2034 REVERSED TRIPLE PRIME, TRIPLE PRIME + ‹ › U+2039, U+203A SINGLE LEFT/RIGHT-POINTING ANGLE QUOTATION MARK + › ‹ U+203A, U+2039 SINGLE RIGHT/LEFT-POINTING ANGLE QUOTATION MARK + ⁅ ⁆ U+2045, U+2046 LEFT/RIGHT SQUARE BRACKET WITH QUILL + ⁍ ⁌ U+204D, U+204C BLACK RIGHT/LEFTWARDS BULLET + ⁽ ⁾ U+207D, U+207E SUPERSCRIPT LEFT/RIGHT PARENTHESIS + ₍ ₎ U+208D, U+208E SUBSCRIPT LEFT/RIGHT PARENTHESIS + → ← U+2192, U+2190 RIGHT/LEFTWARDS ARROW + ↛ ↚ U+219B, U+219A RIGHT/LEFTWARDS ARROW WITH STROKE + ↝ ↜ U+219D, U+219C RIGHT/LEFTWARDS WAVE ARROW + ↠ ↞ U+21A0, U+219E RIGHT/LEFTWARDS TWO HEADED ARROW + ↣ ↢ U+21A3, U+21A2 RIGHT/LEFTWARDS ARROW WITH TAIL + ↦ ↤ U+21A6, U+21A4 RIGHT/LEFTWARDS ARROW FROM BAR + ↪ ↩ U+21AA, U+21A9 RIGHT/LEFTWARDS ARROW WITH HOOK + ↬ ↫ U+21AC, U+21AB RIGHT/LEFTWARDS ARROW WITH LOOP + ↱ ↰ U+21B1, U+21B0 UPWARDS ARROW WITH TIP RIGHT/LEFTWARDS + ↳ ↲ U+21B3, U+21B2 DOWNWARDS ARROW WITH TIP RIGHT/LEFTWARDS + ⇀ ↼ U+21C0, U+21BC RIGHT/LEFTWARDS HARPOON WITH BARB UPWARDS + ⇁ ↽ U+21C1, U+21BD RIGHT/LEFTWARDS HARPOON WITH BARB DOWNWARDS + ⇉ ⇇ U+21C9, U+21C7 RIGHT/LEFTWARDS PAIRED ARROWS + ⇏ ⇍ U+21CF, U+21CD RIGHT/LEFTWARDS DOUBLE ARROW WITH STROKE + ⇒ ⇐ U+21D2, U+21D0 RIGHT/LEFTWARDS DOUBLE ARROW + ⇛ ⇚ U+21DB, U+21DA RIGHT/LEFTWARDS TRIPLE ARROW + ⇝ ⇜ U+21DD, U+21DC RIGHT/LEFTWARDS SQUIGGLE ARROW + ⇢ ⇠ U+21E2, U+21E0 RIGHT/LEFTWARDS DASHED ARROW + ⇥ ⇤ U+21E5, U+21E4 RIGHT/LEFTWARDS ARROW TO BAR + ⇨ ⇦ U+21E8, U+21E6 RIGHT/LEFTWARDS WHITE ARROW + ⇴ ⬰ U+21F4, U+2B30 RIGHT/LEFT ARROW WITH SMALL CIRCLE + ⇶ ⬱ U+21F6, U+2B31 THREE RIGHT/LEFTWARDS ARROWS + ⇸ ⇷ U+21F8, U+21F7 RIGHT/LEFTWARDS ARROW WITH VERTICAL STROKE + ⇻ ⇺ U+21FB, U+21FA RIGHT/LEFTWARDS ARROW WITH DOUBLE VERTICAL + STROKE + ⇾ ⇽ U+21FE, U+21FD RIGHT/LEFTWARDS OPEN-HEADED ARROW + ∈ ∋ U+2208, U+220B ELEMENT OF, CONTAINS AS MEMBER + ∉ ∌ U+2209, U+220C NOT AN ELEMENT OF, DOES NOT CONTAIN AS MEMBER + ∊ ∍ U+220A, U+220D SMALL ELEMENT OF, SMALL CONTAINS AS MEMBER + ≤ ≥ U+2264, U+2265 LESS-THAN/GREATER-THAN OR EQUAL TO + ≦ ≧ U+2266, U+2267 LESS-THAN/GREATER-THAN OVER EQUAL TO + ≨ ≩ U+2268, U+2269 LESS-THAN/GREATER-THAN BUT NOT EQUAL TO + ≪ ≫ U+226A, U+226B MUCH LESS-THAN/GREATER-THAN + ≮ ≯ U+226E, U+226F NOT LESS-THAN/GREATER-THAN + ≰ ≱ U+2270, U+2271 NEITHER LESS-THAN/GREATER-THAN NOR EQUAL TO + ≲ ≳ U+2272, U+2273 LESS-THAN/GREATER-THAN OR EQUIVALENT TO + ≴ ≵ U+2274, U+2275 NEITHER LESS-THAN/GREATER-THAN NOR EQUIVALENT TO + ≺ ≻ U+227A, U+227B PRECEDES/SUCCEEDS + ≼ ≽ U+227C, U+227D PRECEDES/SUCCEEDS OR EQUAL TO + ≾ ≿ U+227E, U+227F PRECEDES/SUCCEEDS OR EQUIVALENT TO + ⊀ ⊁ U+2280, U+2281 DOES NOT PRECEDE/SUCCEED + ⊂ ⊃ U+2282, U+2283 SUBSET/SUPERSET OF + ⊄ ⊅ U+2284, U+2285 NOT A SUBSET/SUPERSET OF + ⊆ ⊇ U+2286, U+2287 SUBSET/SUPERSET OF OR EQUAL TO + ⊈ ⊉ U+2288, U+2289 NEITHER A SUBSET/SUPERSET OF NOR EQUAL TO + ⊊ ⊋ U+228A, U+228B SUBSET/SUPERSET OF WITH NOT EQUAL TO + ⊣ ⊢ U+22A3, U+22A2 LEFT/RIGHT TACK + ⊦ ⫞ U+22A6, U+2ADE ASSERTION, SHORT LEFT TACK + ⊨ ⫤ U+22A8, U+2AE4 TRUE, VERTICAL BAR DOUBLE LEFT TURNSTILE + ⊩ ⫣ U+22A9, U+2AE3 FORCES, DOUBLE VERTICAL BAR LEFT TURNSTILE + ⊰ ⊱ U+22B0, U+22B1 PRECEDES/SUCCEEDS UNDER RELATION + ⋐ ⋑ U+22D0, U+22D1 DOUBLE SUBSET/SUPERSET + ⋖ ⋗ U+22D6, U+22D7 LESS-THAN/GREATER-THAN WITH DOT + ⋘ ⋙ U+22D8, U+22D9 VERY MUCH LESS-THAN/GREATER-THAN + ⋜ ⋝ U+22DC, U+22DD EQUAL TO OR LESS-THAN/GREATER-THAN + ⋞ ⋟ U+22DE, U+22DF EQUAL TO OR PRECEDES/SUCCEEDS + ⋠ ⋡ U+22E0, U+22E1 DOES NOT PRECEDE/SUCCEED OR EQUAL + ⋦ ⋧ U+22E6, U+22E7 LESS-THAN/GREATER-THAN BUT NOT EQUIVALENT TO + ⋨ ⋩ U+22E8, U+22E9 PRECEDES/SUCCEEDS BUT NOT EQUIVALENT TO + ⋲ ⋺ U+22F2, U+22FA ELEMENT OF/CONTAINS WITH LONG HORIZONTAL STROKE + ⋳ ⋻ U+22F3, U+22FB ELEMENT OF/CONTAINS WITH VERTICAL BAR AT END OF + HORIZONTAL STROKE + ⋴ ⋼ U+22F4, U+22FC SMALL ELEMENT OF/CONTAINS WITH VERTICAL BAR AT + END OF HORIZONTAL STROKE + ⋶ ⋽ U+22F6, U+22FD ELEMENT OF/CONTAINS WITH OVERBAR + ⋷ ⋾ U+22F7, U+22FE SMALL ELEMENT OF/CONTAINS WITH OVERBAR + ⌈ ⌉ U+2308, U+2309 LEFT/RIGHT CEILING + ⌊ ⌋ U+230A, U+230B LEFT/RIGHT FLOOR + ⌦ ⌫ U+2326, U+232B ERASE TO THE RIGHT/LEFT + 〈 〉 U+2329, U+232A LEFT/RIGHT-POINTING ANGLE BRACKET + ⍈ ⍇ U+2348, U+2347 APL FUNCTIONAL SYMBOL QUAD RIGHT/LEFTWARDS ARROW + ⏩ ⏪ U+23E9, U+23EA BLACK RIGHT/LEFT-POINTING DOUBLE TRIANGLE + ⏭ ⏮ U+23ED, U+23EE BLACK RIGHT/LEFT-POINTING DOUBLE TRIANGLE WITH + VERTICAL BAR + ☛ ☚ U+261B, U+261A BLACK RIGHT/LEFT POINTING INDEX + ☞ ☜ U+261E, U+261C WHITE RIGHT/LEFT POINTING INDEX + ⚞ ⚟ U+269E, U+269F THREE LINES CONVERGING RIGHT/LEFT + ❨ ❩ U+2768, U+2769 MEDIUM LEFT/RIGHT PARENTHESIS ORNAMENT + ❪ ❫ U+276A, U+276B MEDIUM FLATTENED LEFT/RIGHT PARENTHESIS ORNAMENT + ❬ ❭ U+276C, U+276D MEDIUM LEFT/RIGHT-POINTING ANGLE BRACKET + ORNAMENT + ❮ ❯ U+276E, U+276F HEAVY LEFT/RIGHT-POINTING ANGLE QUOTATION MARK + ORNAMENT + ❰ ❱ U+2770, U+2771 HEAVY LEFT/RIGHT-POINTING ANGLE BRACKET ORNAMENT + ❲ ❳ U+2772, U+2773 LIGHT LEFT/RIGHT TORTOISE SHELL BRACKET ORNAMENT + ❴ ❵ U+2774, U+2775 MEDIUM LEFT/RIGHT CURLY BRACKET ORNAMENT + ⟃ ⟄ U+27C3, U+27C4 OPEN SUBSET/SUPERSET + ⟅ ⟆ U+27C5, U+27C6 LEFT/RIGHT S-SHAPED BAG DELIMITER + ⟈ ⟉ U+27C8, U+27C9 REVERSE SOLIDUS PRECEDING SUBSET, SUPERSET + PRECEDING SOLIDUS + ⟞ ⟝ U+27DE, U+27DD LONG LEFT/RIGHT TACK + ⟦ ⟧ U+27E6, U+27E7 MATHEMATICAL LEFT/RIGHT WHITE SQUARE BRACKET + ⟨ ⟩ U+27E8, U+27E9 MATHEMATICAL LEFT/RIGHT ANGLE BRACKET + ⟪ ⟫ U+27EA, U+27EB MATHEMATICAL LEFT/RIGHT DOUBLE ANGLE BRACKET + ⟬ ⟭ U+27EC, U+27ED MATHEMATICAL LEFT/RIGHT WHITE TORTOISE SHELL + BRACKET + ⟮ ⟯ U+27EE, U+27EF MATHEMATICAL LEFT/RIGHT FLATTENED PARENTHESIS + ⟴ ⬲ U+27F4, U+2B32 RIGHT/LEFT ARROW WITH CIRCLED PLUS + ⟶ ⟵ U+27F6, U+27F5 LONG RIGHT/LEFTWARDS ARROW + ⟹ ⟸ U+27F9, U+27F8 LONG RIGHT/LEFTWARDS DOUBLE ARROW + ⟼ ⟻ U+27FC, U+27FB LONG RIGHT/LEFTWARDS ARROW FROM BAR + ⟾ ⟽ U+27FE, U+27FD LONG RIGHT/LEFTWARDS DOUBLE ARROW FROM BAR + ⟿ ⬳ U+27FF, U+2B33 LONG RIGHT/LEFTWARDS SQUIGGLE ARROW + ⤀ ⬴ U+2900, U+2B34 RIGHT/LEFTWARDS TWO-HEADED ARROW WITH VERTICAL + STROKE + ⤁ ⬵ U+2901, U+2B35 RIGHT/LEFTWARDS TWO-HEADED ARROW WITH DOUBLE + VERTICAL STROKE + ⤃ ⤂ U+2903, U+2902 RIGHT/LEFTWARDS DOUBLE ARROW WITH VERTICAL + STROKE + ⤅ ⬶ U+2905, U+2B36 RIGHT/LEFTWARDS TWO-HEADED ARROW FROM BAR + ⤇ ⤆ U+2907, U+2906 RIGHT/LEFTWARDS DOUBLE ARROW FROM BAR + ⤍ ⤌ U+290D, U+290C RIGHT/LEFTWARDS DOUBLE DASH ARROW + ⤏ ⤎ U+290F, U+290E RIGHT/LEFTWARDS TRIPLE DASH ARROW + ⤐ ⬷ U+2910, U+2B37 RIGHT/LEFTWARDS TWO-HEADED TRIPLE DASH ARROW + ⤑ ⬸ U+2911, U+2B38 RIGHT/LEFTWARDS ARROW WITH DOTTED STEM + ⤔ ⬹ U+2914, U+2B39 RIGHT/LEFTWARDS ARROW WITH TAIL WITH VERTICAL + STROKE + ⤕ ⬺ U+2915, U+2B3A RIGHT/LEFTWARDS ARROW WITH TAIL WITH DOUBLE + VERTICAL STROKE + ⤖ ⬻ U+2916, U+2B3B RIGHT/LEFTWARDS TWO-HEADED ARROW WITH TAIL + ⤗ ⬼ U+2917, U+2B3C RIGHT/LEFTWARDS TWO-HEADED ARROW WITH TAIL WITH + VERTICAL STROKE + ⤘ ⬽ U+2918, U+2B3D RIGHT/LEFTWARDS TWO-HEADED ARROW WITH TAIL WITH + DOUBLE VERTICAL STROKE + ⤚ ⤙ U+291A, U+2919 RIGHT/LEFTWARDS ARROW-TAIL + ⤜ ⤛ U+291C, U+291B RIGHT/LEFTWARDS DOUBLE ARROW-TAIL + ⤞ ⤝ U+291E, U+291D RIGHT/LEFTWARDS ARROW TO BLACK DIAMOND + ⤠ ⤟ U+2920, U+291F RIGHT/LEFTWARDS ARROW FROM BAR TO BLACK DIAMOND + ⤳ ⬿ U+2933, U+2B3F WAVE ARROW POINTING DIRECTLY RIGHT/LEFT + ⤷ ⤶ U+2937, U+2936 ARROW POINTING DOWNWARDS THEN CURVING RIGHT/ + LEFTWARDS + ⥅ ⥆ U+2945, U+2946 RIGHT/LEFTWARDS ARROW WITH PLUS BELOW + ⥇ ⬾ U+2947, U+2B3E RIGHT/LEFTWARDS ARROW THROUGH X + ⥓ ⥒ U+2953, U+2952 RIGHT/LEFTWARDS HARPOON WITH BARB UP TO BAR + ⥗ ⥖ U+2957, U+2956 RIGHT/LEFTWARDS HARPOON WITH BARB DOWN TO BAR + ⥛ ⥚ U+295B, U+295A RIGHT/LEFTWARDS HARPOON WITH BARB UP FROM BAR + ⥟ ⥞ U+295F, U+295E RIGHT/LEFTWARDS HARPOON WITH BARB DOWN FROM BAR + ⥤ ⥢ U+2964, U+2962 RIGHT/LEFTWARDS HARPOON WITH BARB UP ABOVE + RIGHT/LEFTWARDS HARPOON WITH BARB DOWN + ⥬ ⥪ U+296C, U+296A RIGHT/LEFTWARDS HARPOON WITH BARB UP ABOVE LONG + DASH + ⥭ ⥫ U+296D, U+296B RIGHT/LEFTWARDS HARPOON WITH BARB DOWN BELOW + LONG DASH + ⥱ ⭀ U+2971, U+2B40 EQUALS SIGN ABOVE RIGHT/LEFTWARDS ARROW + ⥲ ⭁ U+2972, U+2B41 TILDE OPERATOR ABOVE RIGHTWARDS ARROW, REVERSE + TILDE OPERATOR ABOVE LEFTWARDS ARROW + ⥴ ⭋ U+2974, U+2B4B RIGHTWARDS ARROW ABOVE TILDE OPERATOR, + LEFTWARDS ARROW ABOVE REVERSE TILDE OPERATOR + ⥵ ⭂ U+2975, U+2B42 RIGHTWARDS ARROW ABOVE ALMOST EQUAL TO, + LEFTWARDS ARROW ABOVE REVERSE ALMOST EQUAL TO + ⥹ ⥻ U+2979, U+297B SUBSET/SUPERSET ABOVE RIGHT/LEFTWARDS ARROW + ⦃ ⦄ U+2983, U+2984 LEFT/RIGHT WHITE CURLY BRACKET + ⦅ ⦆ U+2985, U+2986 LEFT/RIGHT WHITE PARENTHESIS + ⦇ ⦈ U+2987, U+2988 Z NOTATION LEFT/RIGHT IMAGE BRACKET + ⦉ ⦊ U+2989, U+298A Z NOTATION LEFT/RIGHT BINDING BRACKET + ⦋ ⦌ U+298B, U+298C LEFT/RIGHT SQUARE BRACKET WITH UNDERBAR + ⦍ ⦐ U+298D, U+2990 LEFT/RIGHT SQUARE BRACKET WITH TICK IN TOP + CORNER + ⦏ ⦎ U+298F, U+298E LEFT/RIGHT SQUARE BRACKET WITH TICK IN BOTTOM + CORNER + ⦑ ⦒ U+2991, U+2992 LEFT/RIGHT ANGLE BRACKET WITH DOT + ⦓ ⦔ U+2993, U+2994 LEFT/RIGHT ARC LESS-THAN/GREATER-THAN BRACKET + ⦕ ⦖ U+2995, U+2996 DOUBLE LEFT/RIGHT ARC GREATER-THAN/LESS-THAN + BRACKET + ⦗ ⦘ U+2997, U+2998 LEFT/RIGHT BLACK TORTOISE SHELL BRACKET + ⦨ ⦩ U+29A8, U+29A9 MEASURED ANGLE WITH OPEN ARM ENDING IN ARROW + POINTING UP AND RIGHT/LEFT + ⦪ ⦫ U+29AA, U+29AB MEASURED ANGLE WITH OPEN ARM ENDING IN ARROW + POINTING DOWN AND RIGHT/LEFT + ⦳ ⦴ U+29B3, U+29B4 EMPTY SET WITH RIGHT/LEFT ARROW ABOVE + ⧀ ⧁ U+29C0, U+29C1 CIRCLED LESS-THAN/GREATER-THAN + ⧘ ⧙ U+29D8, U+29D9 LEFT/RIGHT WIGGLY FENCE + ⧚ ⧛ U+29DA, U+29DB LEFT/RIGHT DOUBLE WIGGLY FENCE + ⧼ ⧽ U+29FC, U+29FD LEFT/RIGHT-POINTING CURVED ANGLE BRACKET + ⩹ ⩺ U+2A79, U+2A7A LESS-THAN/GREATER-THAN WITH CIRCLE INSIDE + ⩻ ⩼ U+2A7B, U+2A7C LESS-THAN/GREATER-THAN WITH QUESTION MARK ABOVE + ⩽ ⩾ U+2A7D, U+2A7E LESS-THAN/GREATER-THAN OR SLANTED EQUAL TO + ⩿ ⪀ U+2A7F, U+2A80 LESS-THAN/GREATER-THAN OR SLANTED EQUAL TO WITH + DOT INSIDE + ⪁ ⪂ U+2A81, U+2A82 LESS-THAN/GREATER-THAN OR SLANTED EQUAL TO WITH + DOT ABOVE + ⪃ ⪄ U+2A83, U+2A84 LESS-THAN/GREATER-THAN OR SLANTED EQUAL TO WITH + DOT ABOVE RIGHT/LEFT + ⪅ ⪆ U+2A85, U+2A86 LESS-THAN/GREATER-THAN OR APPROXIMATE + ⪇ ⪈ U+2A87, U+2A88 LESS-THAN/GREATER-THAN AND SINGLE-LINE NOT + EQUAL TO + ⪉ ⪊ U+2A89, U+2A8A LESS-THAN/GREATER-THAN AND NOT APPROXIMATE + ⪍ ⪎ U+2A8D, U+2A8E LESS-THAN/GREATER-THAN ABOVE SIMILAR OR EQUAL + ⪕ ⪖ U+2A95, U+2A96 SLANTED EQUAL TO OR LESS-THAN/GREATER-THAN + ⪗ ⪘ U+2A97, U+2A98 SLANTED EQUAL TO OR LESS-THAN/GREATER-THAN WITH + DOT INSIDE + ⪙ ⪚ U+2A99, U+2A9A DOUBLE-LINE EQUAL TO OR LESS-THAN/GREATER-THAN + ⪛ ⪜ U+2A9B, U+2A9C DOUBLE-LINE SLANTED EQUAL TO OR LESS-THAN/ + GREATER-THAN + ⪝ ⪞ U+2A9D, U+2A9E SIMILAR OR LESS-THAN/GREATER-THAN + ⪟ ⪠ U+2A9F, U+2AA0 SIMILAR ABOVE LESS-THAN/GREATER-THAN ABOVE + EQUALS SIGN + ⪡ ⪢ U+2AA1, U+2AA2 DOUBLE NESTED LESS-THAN/GREATER-THAN + ⪦ ⪧ U+2AA6, U+2AA7 LESS-THAN/GREATER-THAN CLOSED BY CURVE + ⪨ ⪩ U+2AA8, U+2AA9 LESS-THAN/GREATER-THAN CLOSED BY CURVE ABOVE + SLANTED EQUAL + ⪪ ⪫ U+2AAA, U+2AAB SMALLER THAN/LARGER THAN + ⪬ ⪭ U+2AAC, U+2AAD SMALLER THAN/LARGER THAN OR EQUAL TO + ⪯ ⪰ U+2AAF, U+2AB0 PRECEDES/SUCCEEDS ABOVE SINGLE-LINE EQUALS SIGN + ⪱ ⪲ U+2AB1, U+2AB2 PRECEDES/SUCCEEDS ABOVE SINGLE-LINE NOT EQUAL TO + ⪳ ⪴ U+2AB3, U+2AB4 PRECEDES/SUCCEEDS ABOVE EQUALS SIGN + ⪵ ⪶ U+2AB5, U+2AB6 PRECEDES/SUCCEEDS ABOVE NOT EQUAL TO + ⪷ ⪸ U+2AB7, U+2AB8 PRECEDES/SUCCEEDS ABOVE ALMOST EQUAL TO + ⪹ ⪺ U+2AB9, U+2ABA PRECEDES/SUCCEEDS ABOVE NOT ALMOST EQUAL TO + ⪻ ⪼ U+2ABB, U+2ABC DOUBLE PRECEDES/SUCCEEDS + ⪽ ⪾ U+2ABD, U+2ABE SUBSET/SUPERSET WITH DOT + ⪿ ⫀ U+2ABF, U+2AC0 SUBSET/SUPERSET WITH PLUS SIGN BELOW + ⫁ ⫂ U+2AC1, U+2AC2 SUBSET/SUPERSET WITH MULTIPLICATION SIGN BELOW + ⫃ ⫄ U+2AC3, U+2AC4 SUBSET/SUPERSET OF OR EQUAL TO WITH DOT ABOVE + ⫅ ⫆ U+2AC5, U+2AC6 SUBSET/SUPERSET OF ABOVE EQUALS SIGN + ⫇ ⫈ U+2AC7, U+2AC8 SUBSET/SUPERSET OF ABOVE TILDE OPERATOR + ⫉ ⫊ U+2AC9, U+2ACA SUBSET/SUPERSET OF ABOVE ALMOST EQUAL TO + ⫋ ⫌ U+2ACB, U+2ACC SUBSET/SUPERSET OF ABOVE NOT EQUAL TO + ⫏ ⫐ U+2ACF, U+2AD0 CLOSED SUBSET/SUPERSET + ⫑ ⫒ U+2AD1, U+2AD2 CLOSED SUBSET/SUPERSET OR EQUAL TO + ⫕ ⫖ U+2AD5, U+2AD6 SUBSET/SUPERSET ABOVE SUBSET/SUPERSET + ⫥ ⊫ U+2AE5, U+22AB DOUBLE VERTICAL BAR DOUBLE LEFT/RIGHT TURNSTILE + ⫷ ⫸ U+2AF7, U+2AF8 TRIPLE NESTED LESS-THAN/GREATER-THAN + ⫹ ⫺ U+2AF9, U+2AFA DOUBLE-LINE SLANTED LESS-THAN/GREATER-THAN OR + EQUAL TO + ⭆ ⭅ U+2B46, U+2B45 RIGHT/LEFTWARDS QUADRUPLE ARROW + ⭇ ⭉ U+2B47, U+2B49 REVERSE TILDE OPERATOR ABOVE RIGHTWARDS ARROW, + TILDE OPERATOR ABOVE LEFTWARDS ARROW + ⭈ ⭊ U+2B48, U+2B4A RIGHTWARDS ARROW ABOVE REVERSE ALMOST EQUAL + TO, LEFTWARDS ARROW ABOVE ALMOST EQUAL TO + ⭌ ⥳ U+2B4C, U+2973 RIGHTWARDS ARROW ABOVE REVERSE TILDE OPERATOR, + LEFTWARDS ARROW ABOVE TILDE OPERATOR + ⭢ ⭠ U+2B62, U+2B60 RIGHT/LEFTWARDS TRIANGLE-HEADED ARROW + ⭬ ⭪ U+2B6C, U+2B6A RIGHT/LEFTWARDS TRIANGLE-HEADED DASHED ARROW + ⭲ ⭰ U+2B72, U+2B70 RIGHT/LEFTWARDS TRIANGLE-HEADED ARROW TO BAR + ⭼ ⭺ U+2B7C, U+2B7A RIGHT/LEFTWARDS TRIANGLE-HEADED ARROW WITH + DOUBLE VERTICAL STROKE + ⮆ ⮄ U+2B86, U+2B84 RIGHT/LEFTWARDS TRIANGLE-HEADED PAIRED ARROWS + ⮊ ⮈ U+2B8A, U+2B88 RIGHT/LEFTWARDS BLACK CIRCLED WHITE ARROW + ⮕ ⬅ U+2B95, U+2B05 RIGHT/LEFTWARDS BLACK ARROW + ⮚ ⮘ U+2B9A, U+2B98 THREE-D TOP-LIGHTED RIGHT/LEFTWARDS EQUILATERAL + ARROWHEAD + ⮞ ⮜ U+2B9E, U+2B9C BLACK RIGHT/LEFTWARDS EQUILATERAL ARROWHEAD + ⮡ ⮠ U+2BA1, U+2BA0 DOWNWARDS TRIANGLE-HEADED ARROW WITH LONG TIP + RIGHT/LEFTWARDS + ⮣ ⮢ U+2BA3, U+2BA2 UPWARDS TRIANGLE-HEADED ARROW WITH LONG TIP + RIGHT/LEFTWARDS + ⮩ ⮨ U+2BA9, U+2BA8 BLACK CURVED DOWNWARDS AND RIGHT/LEFTWARDS ARROW + ⮫ ⮪ U+2BAB, U+2BAA BLACK CURVED UPWARDS AND RIGHT/LEFTWARDS ARROW + ⮱ ⮰ U+2BB1, U+2BB0 RIBBON ARROW DOWN RIGHT/LEFT + ⮳ ⮲ U+2BB3, U+2BB2 RIBBON ARROW UP RIGHT/LEFT + ⯮ ⯬ U+2BEE, U+2BEC RIGHT/LEFTWARDS TWO-HEADED ARROW WITH TRIANGLE + ARROWHEADS + ⸂ ⸃ U+2E02, U+2E03 LEFT/RIGHT SUBSTITUTION BRACKET + ⸃ ⸂ U+2E03, U+2E02 RIGHT/LEFT SUBSTITUTION BRACKET + ⸄ ⸅ U+2E04, U+2E05 LEFT/RIGHT DOTTED SUBSTITUTION BRACKET + ⸅ ⸄ U+2E05, U+2E04 RIGHT/LEFT DOTTED SUBSTITUTION BRACKET + ⸉ ⸊ U+2E09, U+2E0A LEFT/RIGHT TRANSPOSITION BRACKET + ⸊ ⸉ U+2E0A, U+2E09 RIGHT/LEFT TRANSPOSITION BRACKET + ⸌ ⸍ U+2E0C, U+2E0D LEFT/RIGHT RAISED OMISSION BRACKET + ⸍ ⸌ U+2E0D, U+2E0C RIGHT/LEFT RAISED OMISSION BRACKET + ⸑ ⸐ U+2E11, U+2E10 REVERSED FORKED PARAGRAPHOS, FORKED PARAGRAPHOS + ⸜ ⸝ U+2E1C, U+2E1D LEFT/RIGHT LOW PARAPHRASE BRACKET + ⸝ ⸜ U+2E1D, U+2E1C RIGHT/LEFT LOW PARAPHRASE BRACKET + ⸠ ⸡ U+2E20, U+2E21 LEFT/RIGHT VERTICAL BAR WITH QUILL + ⸡ ⸠ U+2E21, U+2E20 RIGHT/LEFT VERTICAL BAR WITH QUILL + ⸢ ⸣ U+2E22, U+2E23 TOP LEFT/RIGHT HALF BRACKET + ⸤ ⸥ U+2E24, U+2E25 BOTTOM LEFT/RIGHT HALF BRACKET + ⸦ ⸧ U+2E26, U+2E27 LEFT/RIGHT SIDEWAYS U BRACKET + ⸨ ⸩ U+2E28, U+2E29 LEFT/RIGHT DOUBLE PARENTHESIS + ⸶ ⸷ U+2E36, U+2E37 DAGGER WITH LEFT/RIGHT GUARD + ⹂ „ U+2E42, U+201E DOUBLE LOW-REVERSED-9 QUOTATION MARK, DOUBLE + LOW-9 QUOTATION MARK + ⹕ ⹖ U+2E55, U+2E56 LEFT/RIGHT SQUARE BRACKET WITH STROKE + ⹗ ⹘ U+2E57, U+2E58 LEFT/RIGHT SQUARE BRACKET WITH DOUBLE STROKE + ⹙ ⹚ U+2E59, U+2E5A TOP HALF LEFT/RIGHT PARENTHESIS + ⹛ ⹜ U+2E5B, U+2E5C BOTTOM HALF LEFT/RIGHT PARENTHESIS + 〈 〉 U+3008, U+3009 LEFT/RIGHT ANGLE BRACKET + 《 》 U+300A, U+300B LEFT/RIGHT DOUBLE ANGLE BRACKET + 「 」 U+300C, U+300D LEFT/RIGHT CORNER BRACKET + 『 』 U+300E, U+300F LEFT/RIGHT WHITE CORNER BRACKET + 【 】 U+3010, U+3011 LEFT/RIGHT BLACK LENTICULAR BRACKET + 〔 〕 U+3014, U+3015 LEFT/RIGHT TORTOISE SHELL BRACKET + 〖 〗 U+3016, U+3017 LEFT/RIGHT WHITE LENTICULAR BRACKET + 〘 〙 U+3018, U+3019 LEFT/RIGHT WHITE TORTOISE SHELL BRACKET + 〚 〛 U+301A, U+301B LEFT/RIGHT WHITE SQUARE BRACKET + 〝 〞 U+301D, U+301E REVERSED DOUBLE PRIME QUOTATION MARK, DOUBLE + PRIME QUOTATION MARK + ꧁ ꧂ U+A9C1, U+A9C2 JAVANESE LEFT/RIGHT RERENGGAN + ﴾ ﴿ U+FD3E, U+FD3F ORNATE LEFT/RIGHT PARENTHESIS + ﹙ ﹚ U+FE59, U+FE5A SMALL LEFT/RIGHT PARENTHESIS + ﹛ ﹜ U+FE5B, U+FE5C SMALL LEFT/RIGHT CURLY BRACKET + ﹝ ﹞ U+FE5D, U+FE5E SMALL LEFT/RIGHT TORTOISE SHELL BRACKET + ﹤ ﹥ U+FE64, U+FE65 SMALL LESS-THAN/GREATER-THAN SIGN + ( ) U+FF08, U+FF09 FULLWIDTH LEFT/RIGHT PARENTHESIS + < > U+FF1C, U+FF1E FULLWIDTH LESS-THAN/GREATER-THAN SIGN + [ ] U+FF3B, U+FF3D FULLWIDTH LEFT/RIGHT SQUARE BRACKET + { } U+FF5B, U+FF5D FULLWIDTH LEFT/RIGHT CURLY BRACKET + ⦅ ⦆ U+FF5F, U+FF60 FULLWIDTH LEFT/RIGHT WHITE PARENTHESIS + 「 」 U+FF62, U+FF63 HALFWIDTH LEFT/RIGHT CORNER BRACKET + → ← U+FFEB, U+FFE9 HALFWIDTH RIGHT/LEFTWARDS ARROW + 𝄃 𝄂 U+1D103, U+1D102 MUSICAL SYMBOL REVERSE FINAL BARLINE, MUSICAL + SYMBOL FINAL BARLINE + 𝄆 𝄇 U+1D106, U+1D107 MUSICAL SYMBOL LEFT/RIGHT REPEAT SIGN + 👉 👈 U+1F449, U+1F448 WHITE RIGHT/LEFT POINTING BACKHAND INDEX + 🔈 🕨 U+1F508, U+1F568 SPEAKER, RIGHT SPEAKER + 🔉 🕩 U+1F509, U+1F569 SPEAKER WITH ONE SOUND WAVE, RIGHT SPEAKER WITH + ONE SOUND WAVE + 🔊 🕪 U+1F50A, U+1F56A SPEAKER WITH THREE SOUND WAVES, RIGHT SPEAKER + WITH THREE SOUND WAVES + 🕻 🕽 U+1F57B, U+1F57D LEFT/RIGHT HAND TELEPHONE RECEIVER + 🖙 🖘 U+1F599, U+1F598 SIDEWAYS WHITE RIGHT/LEFT POINTING INDEX + 🖛 🖚 U+1F59B, U+1F59A SIDEWAYS BLACK RIGHT/LEFT POINTING INDEX + 🖝 🖜 U+1F59D, U+1F59C BLACK RIGHT/LEFT POINTING BACKHAND INDEX + 🗦 🗧 U+1F5E6, U+1F5E7 THREE RAYS LEFT/RIGHT + 🠂 🠀 U+1F802, U+1F800 RIGHT/LEFTWARDS ARROW WITH SMALL TRIANGLE + ARROWHEAD + 🠆 🠄 U+1F806, U+1F804 RIGHT/LEFTWARDS ARROW WITH MEDIUM TRIANGLE + ARROWHEAD + 🠊 🠈 U+1F80A, U+1F808 RIGHT/LEFTWARDS ARROW WITH LARGE TRIANGLE + ARROWHEAD + 🠒 🠐 U+1F812, U+1F810 RIGHT/LEFTWARDS ARROW WITH SMALL EQUILATERAL + ARROWHEAD + 🠖 🠔 U+1F816, U+1F814 RIGHT/LEFTWARDS ARROW WITH EQUILATERAL ARROWHEAD + 🠚 🠘 U+1F81A, U+1F818 HEAVY RIGHT/LEFTWARDS ARROW WITH EQUILATERAL + ARROWHEAD + 🠞 🠜 U+1F81E, U+1F81C HEAVY RIGHT/LEFTWARDS ARROW WITH LARGE + EQUILATERAL ARROWHEAD + 🠢 🠠 U+1F822, U+1F820 RIGHT/LEFTWARDS TRIANGLE-HEADED ARROW WITH + NARROW SHAFT + 🠦 🠤 U+1F826, U+1F824 RIGHT/LEFTWARDS TRIANGLE-HEADED ARROW WITH + MEDIUM SHAFT + 🠪 🠨 U+1F82A, U+1F828 RIGHT/LEFTWARDS TRIANGLE-HEADED ARROW WITH BOLD + SHAFT + 🠮 🠬 U+1F82E, U+1F82C RIGHT/LEFTWARDS TRIANGLE-HEADED ARROW WITH + HEAVY SHAFT + 🠲 🠰 U+1F832, U+1F830 RIGHT/LEFTWARDS TRIANGLE-HEADED ARROW WITH VERY + HEAVY SHAFT + 🠶 🠴 U+1F836, U+1F834 RIGHT/LEFTWARDS FINGER-POST ARROW + 🠺 🠸 U+1F83A, U+1F838 RIGHT/LEFTWARDS SQUARED ARROW + 🠾 🠼 U+1F83E, U+1F83C RIGHT/LEFTWARDS COMPRESSED ARROW + 🡂 🡀 U+1F842, U+1F840 RIGHT/LEFTWARDS HEAVY COMPRESSED ARROW + 🡆 🡄 U+1F846, U+1F844 RIGHT/LEFTWARDS HEAVY ARROW + 🡒 🡐 U+1F852, U+1F850 RIGHT/LEFTWARDS SANS-SERIF ARROW + 🡢 🡠 U+1F862, U+1F860 WIDE-HEADED RIGHT/LEFTWARDS LIGHT BARB ARROW + 🡪 🡨 U+1F86A, U+1F868 WIDE-HEADED RIGHT/LEFTWARDS BARB ARROW + 🡲 🡰 U+1F872, U+1F870 WIDE-HEADED RIGHT/LEFTWARDS MEDIUM BARB ARROW + 🡺 🡸 U+1F87A, U+1F878 WIDE-HEADED RIGHT/LEFTWARDS HEAVY BARB ARROW + 🢂 🢀 U+1F882, U+1F880 WIDE-HEADED RIGHT/LEFTWARDS VERY HEAVY BARB + ARROW + 🢒 🢐 U+1F892, U+1F890 RIGHT/LEFTWARDS TRIANGLE ARROWHEAD + 🢖 🢔 U+1F896, U+1F894 RIGHT/LEFTWARDS WHITE ARROW WITHIN TRIANGLE + ARROWHEAD + 🢚 🢘 U+1F89A, U+1F898 RIGHT/LEFTWARDS ARROW WITH NOTCHED TAIL + 🢡 🢠 U+1F8A1, U+1F8A0 RIGHTWARDS BOTTOM SHADED WHITE ARROW, + LEFTWARDS BOTTOM-SHADED WHITE ARROW + 🢣 🢢 U+1F8A3, U+1F8A2 RIGHT/LEFTWARDS TOP SHADED WHITE ARROW + 🢥 🢦 U+1F8A5, U+1F8A6 RIGHT/LEFTWARDS RIGHT-SHADED WHITE ARROW + 🢧 🢤 U+1F8A7, U+1F8A4 RIGHT/LEFTWARDS LEFT-SHADED WHITE ARROW + 🢩 🢨 U+1F8A9, U+1F8A8 RIGHT/LEFTWARDS BACK-TILTED SHADOWED WHITE ARROW + 🢫 🢪 U+1F8AB, U+1F8AA RIGHT/LEFTWARDS FRONT-TILTED SHADOWED WHITE + ARROW + +=head1 FEATURE BUNDLES - :5.32 say state switch unicode_strings - unicode_eval evalbytes current_sub fc - postderef_qq bitwise indirect +It's possible to load multiple features together, using +a I. The name of a feature bundle is prefixed with +a colon, to distinguish it from an actual feature. + + use feature ":5.10"; + +The following feature bundles are available: + + bundle features included + --------- ----------------- + :default indirect multidimensional + bareword_filehandles + + :5.10 bareword_filehandles indirect + multidimensional say state switch + + :5.12 bareword_filehandles indirect + multidimensional say state switch + unicode_strings + + :5.14 bareword_filehandles indirect + multidimensional say state switch + unicode_strings + + :5.16 bareword_filehandles current_sub evalbytes + fc indirect multidimensional say state + switch unicode_eval unicode_strings + + :5.18 bareword_filehandles current_sub evalbytes + fc indirect multidimensional say state + switch unicode_eval unicode_strings + + :5.20 bareword_filehandles current_sub evalbytes + fc indirect multidimensional say state + switch unicode_eval unicode_strings + + :5.22 bareword_filehandles current_sub evalbytes + fc indirect multidimensional say state + switch unicode_eval unicode_strings + + :5.24 bareword_filehandles current_sub evalbytes + fc indirect multidimensional postderef_qq + say state switch unicode_eval + unicode_strings + + :5.26 bareword_filehandles current_sub evalbytes + fc indirect multidimensional postderef_qq + say state switch unicode_eval + unicode_strings + + :5.28 bareword_filehandles bitwise current_sub + evalbytes fc indirect multidimensional + postderef_qq say state switch unicode_eval + unicode_strings + + :5.30 bareword_filehandles bitwise current_sub + evalbytes fc indirect multidimensional + postderef_qq say state switch unicode_eval + unicode_strings + + :5.32 bareword_filehandles bitwise current_sub + evalbytes fc indirect multidimensional + postderef_qq say state switch unicode_eval + unicode_strings + + :5.34 bareword_filehandles bitwise current_sub + evalbytes fc indirect multidimensional + postderef_qq say state switch unicode_eval + unicode_strings + + :5.36 bareword_filehandles bitwise current_sub + evalbytes fc isa postderef_qq say signatures + state unicode_eval unicode_strings The C<:default> bundle represents the feature set that is enabled before any C or C declaration. @@ -482,6 +989,76 @@ also does the equivalent of C; see L for details. =back +=head1 CHECKING FEATURES + +C provides some simple APIs to check which features are enabled. + +These functions cannot be imported and must be called by their fully +qualified names. If you don't otherwise need to set a feature you will +need to ensure C is loaded with: + + use feature (); + +=over + +=item feature_enabled($feature) + +=item feature_enabled($feature, $depth) + + package MyStandardEnforcer; + use feature (); + use Carp "croak"; + sub import { + croak "disable indirect!" if feature::feature_enabled("indirect"); + } + +Test whether a named feature is enabled at a given level in the call +stack, returning a true value if it is. C<$depth> defaults to 1, +which checks the scope that called the scope calling +feature::feature_enabled(). + +croaks for an unknown feature name. + +=item features_enabled() + +=item features_enabled($depth) + + package ReportEnabledFeatures; + use feature "say"; + sub import { + say STDERR join " ", feature::features_enabled(); + } + +Returns a list of the features enabled at a given level in the call +stack. C<$depth> defaults to 1, which checks the scope that called +the scope calling feature::features_enabled(). + +=item feature_bundle() + +=item feature_bundle($depth) + +Returns the feature bundle, if any, selected at a given level in the +call stack. C<$depth> defaults to 1, which checks the scope that called +the scope calling feature::feature_bundle(). + +Returns an undefined value if no feature bundle is selected in the +scope. + +The bundle name returned will be for the earliest bundle matching the +selected bundle, so: + + use feature (); + use v5.12; + BEGIN { print feature::feature_bundle(0); } + +will print C<5.11>. + +This returns internal state, at this point C sets the +feature bundle, but C< use feature ":5.12"; > does not set the feature +bundle. This may change in a future release of perl. + +=back + =cut sub import { @@ -571,6 +1148,67 @@ sub croak { Carp::croak(@_); } +sub features_enabled { + my ($depth) = @_; + + $depth //= 1; + my @frame = caller($depth+1) + or return; + my ($hints, $hinthash) = @frame[8, 10]; + + my $bundle_number = $hints & $hint_mask; + if ($bundle_number != $hint_mask) { + return $feature_bundle{$hint_bundles[$bundle_number >> $hint_shift]}->@*; + } + else { + my @features; + for my $feature (sort keys %feature) { + if ($hinthash->{$feature{$feature}}) { + push @features, $feature; + } + } + return @features; + } +} + +sub feature_enabled { + my ($feature, $depth) = @_; + + $depth //= 1; + my @frame = caller($depth+1) + or return; + my ($hints, $hinthash) = @frame[8, 10]; + + my $hint_feature = $feature{$feature} + or croak "Unknown feature $feature"; + my $bundle_number = $hints & $hint_mask; + if ($bundle_number != $hint_mask) { + my $bundle = $hint_bundles[$bundle_number >> $hint_shift]; + for my $bundle_feature ($feature_bundle{$bundle}->@*) { + return 1 if $bundle_feature eq $feature; + } + return 0; + } + else { + return $hinthash->{$hint_feature} // 0; + } +} + +sub feature_bundle { + my $depth = shift; + + $depth //= 1; + my @frame = caller($depth+1) + or return; + my $bundle_number = $frame[8] & $hint_mask; + if ($bundle_number != $hint_mask) { + return $hint_bundles[$bundle_number >> $hint_shift]; + } + else { + return undef; + } +} + 1; # ex: set ro: diff --git a/gnu/usr.bin/perl/lib/h2xs.t b/gnu/usr.bin/perl/lib/h2xs.t index 69746a52b30..426a7bc8709 100644 --- a/gnu/usr.bin/perl/lib/h2xs.t +++ b/gnu/usr.bin/perl/lib/h2xs.t @@ -154,19 +154,6 @@ Writing $name/MANIFEST EOXSFILES ); -my $total_tests = 3; # opening, closing and deleting the header file. -for (my $i = $#tests; $i > 0; $i-=3) { - # 1 test for running it, 1 test for the expected result, and 1 for each file - # plus 1 to open and 1 to check for the use in lib/$name.pm and Makefile.PL - # And 1 more for our check for "bonus" files, 2 more for ExtUtil::Manifest. - # And 1 more to examine const-c.inc contents in tests that use $header. - # use the () to force list context and hence count the number of matches. - $total_tests += 9 + (() = $tests[$i] =~ /(Writing)/sg); - $total_tests++ if $tests[$i-2] =~ / \Q$header\E$/; -} - -plan tests => $total_tests; - ok (open (HEADER, '>', $header), "open '$header'"); print HEADER <

    "+ - * / % ** << >> x .", assign => "+= -= *= /= %= **= <<= >>= x= .=", num_comparison => "< <= > >= == !=", @@ -26,7 +30,7 @@ my %ops_seen; sub nil {} sub OVERLOAD { - $package = shift; + my $package = shift; my %arg = @_; my $sub; *{$package . "::(("} = \&nil; # Make it findable via fetchmethod. @@ -51,14 +55,14 @@ sub OVERLOAD { } sub import { - $package = (caller())[0]; + my $package = (caller())[0]; # *{$package . "::OVERLOAD"} = \&OVERLOAD; shift; $package->overload::OVERLOAD(@_); } sub unimport { - $package = (caller())[0]; + my $package = (caller())[0]; shift; *{$package . "::(("} = \&nil; for (@_) { @@ -98,8 +102,7 @@ sub Method { if(ref $package) { local $@; local $!; - require Scalar::Util; - $package = Scalar::Util::blessed($package); + $package = builtin::blessed($package); return undef if !defined $package; } #my $meth = $package->can('(' . shift); @@ -131,7 +134,7 @@ sub mycan { # Real can would leave stubs. return undef; } -%constants = ( +my %constants = ( 'integer' => 0x1000, # HINT_NEW_INTEGER 'float' => 0x2000, # HINT_NEW_FLOAT 'binary' => 0x4000, # HINT_NEW_BINARY @@ -969,7 +972,7 @@ Gives the string value of C as in the absence of stringify overloading. If you are using this to get the address of a reference (useful for checking if two references point to the same thing) then you may be better off using -C, which is faster. +C or C, which are faster. =item overload::Overloaded(arg) @@ -979,6 +982,9 @@ Returns true if C is subject to overloading of some operations. Returns C or a reference to the method that implements C. +Such a method always takes three arguments, which will be enforced if +it is an XS method. + =back =head2 Overloading Constants @@ -1239,7 +1245,7 @@ Put this in F in your Perl library directory: This module is very unusual as overloaded modules go: it does not provide any usual overloaded operators, instead it provides an -implementation for L>. In this example the C +implementation for C>. In this example the C subroutine returns an object which encapsulates operations done over the objects: C<< symbolic->new(3) >> contains C<['n', 3]>, C<< 2 + symbolic->new(3) >> contains C<['+', 2, ['n', 3]]>. diff --git a/gnu/usr.bin/perl/lib/overload.t b/gnu/usr.bin/perl/lib/overload.t index 1a641a28637..b1a75e513a4 100644 --- a/gnu/usr.bin/perl/lib/overload.t +++ b/gnu/usr.bin/perl/lib/overload.t @@ -10,6 +10,29 @@ BEGIN { } } +my $no_taint_support = exists($Config::Config{taint_support}) + && !$Config::Config{taint_support}; + +my %skip_fetch_count_when_no_taint = ( + '<${$ts}> RT57012_OV' => 1, + ' RT57012_OV' => 1, + ' RT57012_OV' => 1, + ' RT57012_OV' => 1, + '<*RT57012B = *{$ts}; our $RT57012B> RT57012_OV' => 1, + ' RT57012_OV' => 1, +); + +sub is_if_taint_supported { + my ($got, $expected, $name, @mess) = @_; + if ($expected && $no_taint_support) { + return skip("your perl was built without taint support"); + } + else { + return is($got, $expected, $name, @mess); + } +} + + package Oscalar; use overload ( # Anonymous subroutines: @@ -1390,7 +1413,8 @@ foreach my $op (qw(<=> == != < <= > >=)) { } { - use Scalar::Util 'weaken'; + no warnings 'experimental::builtin'; + use builtin 'weaken'; package Shklitza; use overload '""' => sub {"CLiK KLAK"}; @@ -1977,8 +2001,10 @@ foreach my $op (qw(<=> == != < <= > >=)) { my $plain_term = $int . sprintf $sub_term, '$plain'; my $exp = do {no warnings 'experimental::smartmatch'; eval $plain_term }; diag("eval of plain_term <$plain_term> gave <$@>") if $@; - is(tainted($exp), $exp_taint, - "<$plain_term> taint of expected return"); + SKIP: { + is_if_taint_supported(tainted($exp), $exp_taint, + "<$plain_term> taint of expected return"); + } for my $ov_pkg (qw(RT57012_OV RT57012_OV_FB)) { next if $ov_pkg eq 'RT57012_OV_FB' @@ -2009,8 +2035,10 @@ foreach my $op (qw(<=> == != < <= > >=)) { # ref rather than a copy, so stringify it to # find out if its tainted $res = "$res" if $res_term =~ /\+\+|--/; - is(tainted($res), $exp_taint, + SKIP: { + is_if_taint_supported(tainted($res), $exp_taint, "$desc taint of result return"); + } is($res, $exp, "$desc return value"); my $fns =($ov_pkg eq 'RT57012_OV_FB') ? $exp_fb_funcs : $exp_funcs; @@ -2023,7 +2051,14 @@ foreach my $op (qw(<=> == != < <= > >=)) { next if $var eq '$oload'; my $exp_fetch = ($var eq '$ts') ? $exp_fetch_s : $exp_fetch_a; - is($fetches, $exp_fetch, "$desc FETCH count"); + SKIP: { + if ($skip_fetch_count_when_no_taint{$desc} && $no_taint_support) { + skip("your perl was built without taint support"); + } + else { + is($fetches, $exp_fetch, "$desc FETCH count"); + } + } is($stores, $exp_store, "$desc STORE count"); } diff --git a/gnu/usr.bin/perl/lib/perl5db.pl b/gnu/usr.bin/perl/lib/perl5db.pl index b4025116be4..64f7fcb262f 100644 --- a/gnu/usr.bin/perl/lib/perl5db.pl +++ b/gnu/usr.bin/perl/lib/perl5db.pl @@ -10,10 +10,12 @@ perl5db.pl - the perl debugger =head1 DESCRIPTION C is the perl debugger. It is loaded automatically by Perl when -you invoke a script with C. This documentation tries to outline the +you invoke a script with S>. This documentation tries to outline the structure and services provided by C, and to describe how you can use them. +See L for an overview of how to use the debugger. + =head1 GENERAL NOTES The debugger can look pretty forbidding to many Perl programmers. There are @@ -135,7 +137,7 @@ it? =item * First, doing an arithmetical or bitwise operation on a scalar is -just about the fastest thing you can do in Perl: C actually +just about the fastest thing you can do in Perl: S> actually creates a subroutine call, and array and hash lookups are much slower. Is this over-optimization at the expense of readability? Possibly, but the debugger accesses these variables a I. Any rewrite of the code will @@ -189,7 +191,7 @@ Values are magical in numeric context: 1 if the line is breakable, 0 if not. The scalar C<${"_<$filename"}> simply contains the string C<$filename>. This is also the case for evaluated strings that contain subroutines, or which are currently being executed. The $filename for Ced strings looks -like C<(eval 34)>. +like S>. =head1 DEBUGGER STARTUP @@ -322,7 +324,7 @@ is entered or exited. =back -To get everything, use C<$frame=30> (or C as a debugger command). +To get everything, use C<$frame=30> (or S> as a debugger command). The debugger internally juggles the value of C<$frame> during execution to protect external modules that the debugger uses from getting traced. @@ -391,9 +393,10 @@ Controls the output of trace information. =back -=head4 C<$slave_editor> +=head4 C<$client_editor> -1 if C was directed to a pipe; 0 otherwise. +1 if C was directed to a pipe; 0 otherwise. (The term +C<$slave_editor> was formerly used here.) =head4 C<@cmdfhs> @@ -529,7 +532,7 @@ BEGIN { use vars qw($VERSION $header); # bump to X.XX in blead, only use X.XX_XX in maint -$VERSION = '1.57'; +$VERSION = '1.73'; $header = "perl5db.pl version $VERSION"; @@ -643,6 +646,7 @@ use vars qw( $filename $histfile $histsize + $histitemminlength $IN $inhibit_exit @ini_INC @@ -854,7 +858,8 @@ in a currently executing thread, you will stay there until it completes. With the current implementation it is not currently possible to hop from one thread to another. -The C and C commands are currently fairly minimal - see C and C. +The C and C commands are currently fairly minimal - see +S> and S>. Note that threading support was built into the debugger as of Perl version C<5.8.6> and debugger version C<1.2.8>. @@ -872,8 +877,8 @@ BEGIN { lock($DBGR); print "Threads support enabled\n"; } else { - *lock = sub(*) {}; - *share = sub(\[$@%]) {}; + *lock = sub :prototype(*) {}; + *share = sub :prototype(\[$@%]) {}; } } @@ -938,6 +943,7 @@ are to be accepted. @options = qw( CommandSet HistFile HistSize + HistItemMinLength hashDepth arrayDepth dumpDepth DumpDBFiles DumpPackages DumpReused compactDump veryCompact quote @@ -986,6 +992,7 @@ use vars qw(%optionVars); windowSize => \$window, HistFile => \$histfile, HistSize => \$histsize, + HistItemMinLength => \$histitemminlength ); =pod @@ -1086,7 +1093,6 @@ share($signalLevel); share($pre); share($post); share($pretype); -share($rl); share($CreateTTY); share($CommandSet); @@ -1217,9 +1223,9 @@ else { use vars qw($pidprompt); $pidprompt = ''; -# Sets up $emacs as a synonym for $slave_editor. -our ($slave_editor); -*emacs = $slave_editor if $slave_editor; # May be used in afterinit()... +# Sets up $emacs as a synonym for $client_editor. +our ($client_editor); +*emacs = $client_editor if $client_editor; # May be used in afterinit()... =head2 READING THE RC FILE @@ -1500,7 +1506,7 @@ if ($notty) { =pod If there is a TTY, we have to determine who it belongs to before we can -proceed. If this is a slave editor or graphical debugger (denoted by +proceed. If this is a client editor or graphical debugger (denoted by the first command-line switch being '-emacs'), we shift this off and set C<$rl> to 0 (XXX ostensibly to do straight reads). @@ -1508,9 +1514,9 @@ set C<$rl> to 0 (XXX ostensibly to do straight reads). else { - # Is Perl being run from a slave editor or graphical debugger? - # If so, don't use readline, and set $slave_editor = 1. - if ($slave_editor = ( @main::ARGV && ( $main::ARGV[0] eq '-emacs' ) )) { + # Is Perl being run from a client editor or graphical debugger? + # If so, don't use readline, and set $client_editor = 1. + if ($client_editor = ( @main::ARGV && ( $main::ARGV[0] eq '-emacs' ) )) { $rl = 0; shift(@main::ARGV); } @@ -1533,11 +1539,11 @@ We then determine what the console should be on various systems: undef $console; } -=item * Windows or MSDOS - use C. +=item * Windows - use C. =cut - elsif ( $^O eq 'dos' or -e "con" or $^O eq 'MSWin32' ) { + elsif ( $^O eq 'MSWin32' and -e "con" ) { $console = "con"; } @@ -1579,19 +1585,13 @@ We then determine what the console should be on various systems: =back -Several other systems don't use a specific console. We C -for those (Windows using a slave editor/graphical debugger, NetWare, OS/2 -with a slave editor). +Several other systems don't use a specific console. We S> +for those (Windows using a client editor/graphical debugger, OS/2 +with a client editor). =cut - if ( ( $^O eq 'MSWin32' ) and ( $slave_editor or defined $ENV{EMACS} ) ) { - - # /dev/tty is binary. use stdin for textmode - $console = undef; - } - - if ( $^O eq 'NetWare' ) { + if ( ( $^O eq 'MSWin32' ) and ( $client_editor or defined $ENV{EMACS} ) ) { # /dev/tty is binary. use stdin for textmode $console = undef; @@ -1599,7 +1599,7 @@ with a slave editor). # In OS/2, we need to use STDIN to get textmode too, even though # it pretty much looks like Unix otherwise. - if ( defined $ENV{OS2_SHELL} and ( $slave_editor or $ENV{WINDOWID} ) ) + if ( defined $ENV{OS2_SHELL} and ( $client_editor or $ENV{WINDOWID} ) ) { # In OS/2 $console = undef; } @@ -1694,7 +1694,7 @@ and if we can. _autoflush($OUT); # Line info goes to debugger output unless pointed elsewhere. - # Pointing elsewhere makes it possible for slave editors to + # Pointing elsewhere makes it possible for client editors to # keep track of file and position. We have both a filehandle # and a I/O description to keep track of. $LINEINFO = $OUT unless defined $LINEINFO; @@ -1721,7 +1721,7 @@ and then call the C subroutine if there is one. print $OUT "\nLoading DB routines from $header\n"; print $OUT ( "Editor support ", - $slave_editor ? "enabled" : "available", ".\n" + $client_editor ? "enabled" : "available", ".\n" ); print $OUT "\nEnter h or 'h h' for help, or '$doccmd perldebug' for more help.\n\n"; @@ -1799,15 +1799,6 @@ our ( @old_watch, ); -sub _DB__use_full_path -{ - local @INC = @INC; - eval { require Config; }; - unshift(@INC, - @Config::Config{qw(archlibexp privlibexp sitearchexp sitelibexp)}); - &{$_[0]}; -} - sub _DB__determine_if_we_should_break { # if we have something here, see if we should break. @@ -1883,7 +1874,7 @@ sub _DB__trim_command_and_return_first_component { # A single-character debugger command can be immediately followed by its # argument if they aren't both alphanumeric; otherwise require space # between commands and arguments: - my ($verb, $args) = $cmd =~ m{\A(.\b|\S*)\s*(.*)}s; + my ($verb, $args) = $cmd =~ m{\A([^\.-]\b|\S*)\s*(.*)}s; $obj->cmd_verb($verb); $obj->cmd_args($args); @@ -1970,10 +1961,7 @@ sub _DB__handle_y_command { if (!eval { local @INC = @INC; pop @INC if $INC[-1] eq '.'; - _DB__use_full_path(sub { - require PadWalker; - }); - PadWalker->VERSION(0.08) }) { + require PadWalker; PadWalker->VERSION(0.08) }) { my $Err = $@; _db_warn( $Err =~ /locate/ @@ -2129,6 +2117,9 @@ sub _DB__handle_c_command { return; } +my $sub_twice = chr utf8::unicode_to_native(032); +$sub_twice = $sub_twice x 2; + sub _DB__handle_forward_slash_command { my ($obj) = @_; @@ -2190,9 +2181,9 @@ sub _DB__handle_forward_slash_command { # expression would be better, so the user could # do case-sensitive matching if desired. if ($dbline[$start] =~ m/$pat/i) { - if ($slave_editor) { - # Handle proper escaping in the slave. - print {$OUT} "\032\032$filename:$start:0\n"; + if ($client_editor) { + # Handle proper escaping in the client. + print {$OUT} "$sub_twice$filename:$start:0\n"; } else { # Just print the line normally. @@ -2268,9 +2259,9 @@ sub _DB__handle_question_mark_command { # Match? if ($dbline[$start] =~ m/$pat/i) { - if ($slave_editor) { - # Yep, follow slave editor requirements. - print $OUT "\032\032$filename:$start:0\n"; + if ($client_editor) { + # Yep, follow client editor requirements. + print $OUT "$sub_twice$filename:$start:0\n"; } else { # Yep, just print normally. @@ -2521,177 +2512,484 @@ EOP return; } -# 't' is type. -# 'm' is method. -# 'v' is the value (i.e: method name or subroutine ref). -# 's' is subroutine. -my %cmd_lookup; +=head3 C<_DB__handle_i_command> - inheritance display -BEGIN -{ - %cmd_lookup = -( - '-' => { t => 'm', v => '_handle_dash_command', }, - '.' => { t => 's', v => \&_DB__handle_dot_command, }, - '=' => { t => 'm', v => '_handle_equal_sign_command', }, - 'H' => { t => 'm', v => '_handle_H_command', }, - 'S' => { t => 'm', v => '_handle_S_command', }, - 'T' => { t => 'm', v => '_handle_T_command', }, - 'W' => { t => 'm', v => '_handle_W_command', }, - 'c' => { t => 's', v => \&_DB__handle_c_command, }, - 'f' => { t => 's', v => \&_DB__handle_f_command, }, - 'm' => { t => 's', v => \&_DB__handle_m_command, }, - 'n' => { t => 'm', v => '_handle_n_command', }, - 'p' => { t => 'm', v => '_handle_p_command', }, - 'q' => { t => 'm', v => '_handle_q_command', }, - 'r' => { t => 'm', v => '_handle_r_command', }, - 's' => { t => 'm', v => '_handle_s_command', }, - 'save' => { t => 'm', v => '_handle_save_command', }, - 'source' => { t => 'm', v => '_handle_source_command', }, - 't' => { t => 'm', v => '_handle_t_command', }, - 'w' => { t => 'm', v => '_handle_w_command', }, - 'x' => { t => 'm', v => '_handle_x_command', }, - 'y' => { t => 's', v => \&_DB__handle_y_command, }, - (map { $_ => { t => 'm', v => '_handle_V_command_and_X_command', }, } - ('X', 'V')), - (map { $_ => { t => 'm', v => '_handle_enable_disable_commands', }, } - qw(enable disable)), - (map { $_ => - { t => 's', v => \&_DB__handle_restart_and_rerun_commands, }, - } qw(R rerun)), - (map { $_ => {t => 'm', v => '_handle_cmd_wrapper_commands' }, } - qw(a A b B e E h i l L M o O v w W)), -); -}; +Display the (nested) parentage of the module or object given. -sub DB { +=cut - # lock the debugger and get the thread id for the prompt - lock($DBGR); - my $tid; - my $position; - my ($prefix, $after, $infix); - my $pat; - my $explicit_stop; - my $piped; - my $selected; +sub _DB__handle_i_command { + my $self = shift; - if ($ENV{PERL5DB_THREADED}) { - $tid = eval { "[".threads->tid."]" }; + my $line = $self->cmd_args; + require mro; + foreach my $isa ( split( /\s+/, $line ) ) { + $evalarg = "$isa"; + # The &-call is here to ascertain the mutability of @_. + ($isa) = &DB::eval; + no strict 'refs'; + print join( + ', ', + map { + "$_" + . ( + defined( ${"$_\::VERSION"} ) + ? ' ' . ${"$_\::VERSION"} + : undef ) + } @{mro::get_linear_isa(ref($isa) || $isa)} + ); + print "\n"; } + next CMD; +} - my $cmd_verb; - my $cmd_args; - - my $obj = DB::Obj->new( - { - position => \$position, - prefix => \$prefix, - after => \$after, - explicit_stop => \$explicit_stop, - infix => \$infix, - cmd_args => \$cmd_args, - cmd_verb => \$cmd_verb, - pat => \$pat, - piped => \$piped, - selected => \$selected, - }, - ); - - $obj->_DB_on_init__initialize_globals(@_); +=head3 C<_cmd_l_main> - list lines (command) - # Preserve current values of $@, $!, $^E, $,, $/, $\, $^W. - # The code being debugged may have altered them. - DB::save(); +Most of the command is taken up with transforming all the different line +specification syntaxes into 'start-stop'. After that is done, the command +runs a loop over C<@dbline> for the specified range of lines. It handles +the printing of each line and any markers (C<==E> for current line, +C for break on this line, C for action on this line, C<:> for this +line breakable). - # Since DB::DB gets called after every line, we can use caller() to - # figure out where we last were executing. Sneaky, eh? This works because - # caller is returning all the extra information when called from the - # debugger. - local ( $package, $filename, $line ) = caller; - $filename_ini = $filename; +We save the last line listed in the C<$start> global for further listing +later. - # set up the context for DB::eval, so it can properly execute - # code on behalf of the user. We add the package in so that the - # code is eval'ed in the proper package (not in the debugger!). - local $usercontext = _calc_usercontext($package); +=cut - # Create an alias to the active file magical array to simplify - # the code here. - local (*dbline) = $main::{ '_<' . $filename }; +sub _min { + my $min = shift; + foreach my $v (@_) { + if ($min > $v) { + $min = $v; + } + } + return $min; +} - # Last line in the program. - $max = $#dbline; +sub _max { + my $max = shift; + foreach my $v (@_) { + if ($max < $v) { + $max = $v; + } + } + return $max; +} - # The &-call is here to ascertain the mutability of @_. - &_DB__determine_if_we_should_break; +sub _minify_to_max { + my $ref = shift; - # Preserve the current stop-or-not, and see if any of the W - # (watch expressions) has changed. - my $was_signal = $signal; + $$ref = _min($$ref, $max); - # If we have any watch expressions ... - _DB__handle_watch_expressions($obj); + return; +} -=head2 C +sub _cmd_l_handle_var_name { + my $var_name = shift; -C is a function that can be defined by the user; it is a -function which will be run on each entry to C; it gets the -current package, filename, and line as its parameters. + $evalarg = $var_name; -The watchfunction can do anything it likes; it is executing in the -debugger's context, so it has access to all of the debugger's internal -data structures and functions. + my ($s) = DB::eval(); -C can control the debugger's actions. Any of the following -will cause the debugger to return control to the user's program after -C executes: + # Ooops. Bad scalar. + if ($@) { + print {$OUT} "Error: $@\n"; + next CMD; + } -=over 4 + # Good scalar. If it's a reference, find what it points to. + $s = CvGV_name($s); + print {$OUT} "Interpreted as: $1 $s\n"; + $line = "$1 $s"; -=item * + # Call self recursively to really do the command. + return _cmd_l_main( $s ); +} -Returning a false value from the C itself. +sub _cmd_l_handle_subname { -=item * + my $s = $subname; -Altering C<$single> to a false value. + # De-Perl4. + $subname =~ s/\'/::/; -=item * + # Put it in this package unless it starts with ::. + $subname = $package . "::" . $subname unless $subname =~ /::/; -Altering C<$signal> to a false value. + # Put it in CORE::GLOBAL if t doesn't start with :: and + # it doesn't live in this package and it lives in CORE::GLOBAL. + $subname = "CORE::GLOBAL::$s" + if not defined &$subname + and $s !~ /::/ + and defined &{"CORE::GLOBAL::$s"}; -=item * + # Put leading '::' names into 'main::'. + $subname = "main" . $subname if substr( $subname, 0, 2 ) eq "::"; -Turning off the C<4> bit in C<$trace> (this also disables the -check for C. This can be done with + # Get name:start-stop from find_sub, and break this up at + # colons. + my @pieces = split( /:/, find_sub($subname) || $sub{$subname} ); - $trace &= ~4; + # Pull off start-stop. + my $subrange = pop @pieces; -=back + # If the name contained colons, the split broke it up. + # Put it back together. + $file = join( ':', @pieces ); -=cut + # If we're not in that file, switch over to it. + if ( $file ne $filename ) { + if (! $client_editor) { + print {$OUT} "Switching to file '$file'.\n"; + } - # If there's a user-defined DB::watchfunction, call it with the - # current package, filename, and line. The function executes in - # the DB:: package. - if ( $trace & 4 ) { # User-installed watch - return - if watchfunction( $package, $filename, $line ) - and not $single - and not $was_signal - and not( $trace & ~4 ); - } ## end if ($trace & 4) + # Switch debugger's magic structures. + *dbline = $main::{ '_<' . $file }; + $max = $#dbline; + $filename = $file; + } ## end if ($file ne $filename) - # Pick up any alteration to $signal in the watchfunction, and - # turn off the signal now. - $was_signal = $signal; - $signal = 0; + # Subrange is 'start-stop'. If this is less than a window full, + # swap it to 'start+', which will list a window from the start point. + if ($subrange) { + if ( eval($subrange) < -$window ) { + $subrange =~ s/-.*/+/; + } -=head2 GETTING READY TO EXECUTE COMMANDS + # Call self recursively to list the range. + return _cmd_l_main( $subrange ); + } ## end if ($subrange) -The debugger decides to take control if single-step mode is on, the -C command was entered, or the user generated a signal. If the program + # Couldn't find it. + else { + print {$OUT} "Subroutine $subname not found.\n"; + return; + } +} + +sub _cmd_l_empty { + # Compute new range to list. + $incr = $window - 1; + + # Recurse to do it. + return _cmd_l_main( $start . '-' . ( $start + $incr ) ); +} + +sub _cmd_l_plus { + my ($new_start, $new_incr) = @_; + + # Don't reset start for 'l +nnn'. + $start = $new_start if $new_start; + + # Increment for list. Use window size if not specified. + # (Allows 'l +' to work.) + $incr = $new_incr || ($window - 1); + + # Create a line range we'll understand, and recurse to do it. + return _cmd_l_main( $start . '-' . ( $start + $incr ) ); +} + +sub _cmd_l_calc_initial_end_and_i { + my ($spec, $start_match, $end_match) = @_; + + # Determine end point; use end of file if not specified. + my $end = ( !defined $start_match ) ? $max : + ( $end_match ? $end_match : $start_match ); + + # Go on to the end, and then stop. + _minify_to_max(\$end); + + # Determine start line. + my $i = $start_match; + + if ($i eq '.') { + $i = $spec; + } + + $i = _max($i, 1); + + $incr = $end - $i; + + return ($end, $i); +} + +sub _cmd_l_range { + my ($spec, $current_line, $start_match, $end_match) = @_; + + my ($end, $i) = + _cmd_l_calc_initial_end_and_i($spec, $start_match, $end_match); + + # If we're running under a client editor, force it to show the lines. + if ($client_editor) { + print {$OUT} "$sub_twice$filename:$i:0\n"; + $i = $end; + } + # We're doing it ourselves. We want to show the line and special + # markers for: + # - the current line in execution + # - whether a line is breakable or not + # - whether a line has a break or not + # - whether a line has an action or not + else { + I_TO_END: + for ( ; $i <= $end ; $i++ ) { + + # Check for breakpoints and actions. + my ( $stop, $action ); + if ($dbline{$i}) { + ( $stop, $action ) = split( /\0/, $dbline{$i} ); + } + + # ==> if this is the current line in execution, + # : if it's breakable. + my $arrow = + ( $i == $current_line and $filename eq $filename_ini ) + ? '==>' + : ( $dbline[$i] + 0 ? ':' : ' ' ); + + # Add break and action indicators. + $arrow .= 'b' if $stop; + $arrow .= 'a' if $action; + + # Print the line. + print {$OUT} "$i$arrow\t", $dbline[$i]; + + # Move on to the next line. Drop out on an interrupt. + if ($signal) { + $i++; + last I_TO_END; + } + } ## end for (; $i <= $end ; $i++) + + # Line the prompt up; print a newline if the last line listed + # didn't have a newline. + if ($dbline[ $i - 1 ] !~ /\n\z/) { + print {$OUT} "\n"; + } + } ## end else [ if ($client_editor) + + # Save the point we last listed to in case another relative 'l' + # command is desired. Don't let it run off the end. + $start = $i; + _minify_to_max(\$start); + + return; +} + +sub _cmd_l_main { + my $spec = shift; + + # If this is '-something', delete any spaces after the dash. + $spec =~ s/\A-\s*\z/-/; + + # If the line is '$something', assume this is a scalar containing a + # line number. + # Set up for DB::eval() - evaluate in *user* context. + if ( my ($var_name) = $spec =~ /\A(\$.*)/s ) { + return _cmd_l_handle_var_name($var_name); + } + # l name. Try to find a sub by that name. + elsif ( ($subname) = $spec =~ /\A([\':A-Za-z_][\':\w]*(?:\[.*\])?)/s ) { + return _cmd_l_handle_subname(); + } + # Bare 'l' command. + elsif ( $spec !~ /\S/ ) { + return _cmd_l_empty(); + } + # l [start]+number_of_lines + elsif ( my ($new_start, $new_incr) = $spec =~ /\A(\d*)\+(\d*)\z/ ) { + return _cmd_l_plus($new_start, $new_incr); + } + # l start-stop or l start,stop + elsif (my ($s, $e) = $spec =~ /^(?:(-?[\d\$\.]+)(?:[-,]([\d\$\.]+))?)?/ ) { + return _cmd_l_range($spec, $line, $s, $e); + } + + return; +} ## end sub _cmd_l_main + +sub _DB__handle_l_command { + my $self = shift; + + _cmd_l_main($self->cmd_args); + next CMD; +} + + +# 't' is type. +# 'm' is method. +# 'v' is the value (i.e: method name or subroutine ref). +# 's' is subroutine. +my %cmd_lookup; + +BEGIN +{ + %cmd_lookup = +( + '-' => { t => 'm', v => '_handle_dash_command', }, + '.' => { t => 's', v => \&_DB__handle_dot_command, }, + '=' => { t => 'm', v => '_handle_equal_sign_command', }, + 'H' => { t => 'm', v => '_handle_H_command', }, + 'S' => { t => 'm', v => '_handle_S_command', }, + 'T' => { t => 'm', v => '_handle_T_command', }, + 'W' => { t => 'm', v => '_handle_W_command', }, + 'c' => { t => 's', v => \&_DB__handle_c_command, }, + 'f' => { t => 's', v => \&_DB__handle_f_command, }, + 'i' => { t => 's', v => \&_DB__handle_i_command, }, + 'l' => { t => 's', v => \&_DB__handle_l_command, }, + 'm' => { t => 's', v => \&_DB__handle_m_command, }, + 'n' => { t => 'm', v => '_handle_n_command', }, + 'p' => { t => 'm', v => '_handle_p_command', }, + 'q' => { t => 'm', v => '_handle_q_command', }, + 'r' => { t => 'm', v => '_handle_r_command', }, + 's' => { t => 'm', v => '_handle_s_command', }, + 'save' => { t => 'm', v => '_handle_save_command', }, + 'source' => { t => 'm', v => '_handle_source_command', }, + 't' => { t => 'm', v => '_handle_t_command', }, + 'w' => { t => 'm', v => '_handle_w_command', }, + 'x' => { t => 'm', v => '_handle_x_command', }, + 'y' => { t => 's', v => \&_DB__handle_y_command, }, + (map { $_ => { t => 'm', v => '_handle_V_command_and_X_command', }, } + ('X', 'V')), + (map { $_ => { t => 'm', v => '_handle_enable_disable_commands', }, } + qw(enable disable)), + (map { $_ => + { t => 's', v => \&_DB__handle_restart_and_rerun_commands, }, + } qw(R rerun)), + (map { $_ => {t => 'm', v => '_handle_cmd_wrapper_commands' }, } + qw(a A b B e E h L M o O v w W)), +); +}; + +sub DB { + + # lock the debugger and get the thread id for the prompt + lock($DBGR); + my $tid; + my $position; + my ($prefix, $after, $infix); + my $pat; + my $explicit_stop; + my $piped; + my $selected; + + if ($ENV{PERL5DB_THREADED}) { + $tid = eval { "[".threads->tid."]" }; + } + + my $cmd_verb; + my $cmd_args; + + my $obj = DB::Obj->new( + { + position => \$position, + prefix => \$prefix, + after => \$after, + explicit_stop => \$explicit_stop, + infix => \$infix, + cmd_args => \$cmd_args, + cmd_verb => \$cmd_verb, + pat => \$pat, + piped => \$piped, + selected => \$selected, + }, + ); + + $obj->_DB_on_init__initialize_globals(@_); + + # Preserve current values of $@, $!, $^E, $,, $/, $\, $^W. + # The code being debugged may have altered them. + DB::save(); + + # Since DB::DB gets called after every line, we can use caller() to + # figure out where we last were executing. Sneaky, eh? This works because + # caller is returning all the extra information when called from the + # debugger. + local ( $package, $filename, $line ) = caller; + $filename_ini = $filename; + + # set up the context for DB::eval, so it can properly execute + # code on behalf of the user. We add the package in so that the + # code is eval'ed in the proper package (not in the debugger!). + local $usercontext = _calc_usercontext($package); + + # Create an alias to the active file magical array to simplify + # the code here. + local (*dbline) = $main::{ '_<' . $filename }; + + # Last line in the program. + $max = $#dbline; + + # The &-call is here to ascertain the mutability of @_. + &_DB__determine_if_we_should_break; + + # Preserve the current stop-or-not, and see if any of the W + # (watch expressions) has changed. + my $was_signal = $signal; + + # If we have any watch expressions ... + _DB__handle_watch_expressions($obj); + +=head2 C + +C is a function that can be defined by the user; it is a +function which will be run on each entry to C; it gets the +current package, filename, and line as its parameters. + +The watchfunction can do anything it likes; it is executing in the +debugger's context, so it has access to all of the debugger's internal +data structures and functions. + +C can control the debugger's actions. Any of the following +will cause the debugger to return control to the user's program after +C executes: + +=over 4 + +=item * + +Returning a false value from the C itself. + +=item * + +Altering C<$single> to a false value. + +=item * + +Altering C<$signal> to a false value. + +=item * + +Turning off the C<4> bit in C<$trace> (this also disables the +check for C. This can be done with + + $trace &= ~4; + +=back + +=cut + + # If there's a user-defined DB::watchfunction, call it with the + # current package, filename, and line. The function executes in + # the DB:: package. + if ( $trace & 4 ) { # User-installed watch + return + if watchfunction( $package, $filename, $line ) + and not $single + and not $was_signal + and not( $trace & ~4 ); + } ## end if ($trace & 4) + + # Pick up any alteration to $signal in the watchfunction, and + # turn off the signal now. + $was_signal = $signal; + $signal = 0; + +=head2 GETTING READY TO EXECUTE COMMANDS + +The debugger decides to take control if single-step mode is on, the +C command was entered, or the user generated a signal. If the program has fallen off the end, we set things up so that entering further commands won't cause trouble, and we say that the program is over. @@ -2720,6 +3018,7 @@ If there are any preprompt actions, execute those as well. # The &-call is here to ascertain the mutability of @_. &DB::eval; } + undef $action; # Are we nested another level (e.g., did we evaluate a function # that had a breakpoint in it at the debugger prompt)? @@ -2832,7 +3131,7 @@ it up. $cmd = $laststep; } chomp($cmd); # get rid of the annoying extra newline - if (length($cmd) >= 2) { + if (length($cmd) >= option_val('HistItemMinLength', 2)) { push( @hist, $cmd ); } push( @truehist, $cmd ); @@ -2944,7 +3243,7 @@ and then we look up the line in the magical C<%dbline> hash. We change C<$start> to be one window back; if we go back past the first line, we set it to be the first line. We set C<$incr> to put us back at the -currently-executing line, and then put a C (list one window from +currently-executing line, and then put a S> (list one window from C<$start>) in C<$cmd> to be executed later. =head3 PRE-580 COMMANDS VS. NEW COMMANDS: C, EE, E<0x7B>, E<0x7B>E<0x7B>> @@ -2972,7 +3271,9 @@ they can't. =head4 C - single step, but don't trace down into subs Done by setting C<$single> to 2, which forces subs to execute straight through -when entered (see C). We also save the C command in C<$laststep>, +when entered (see C in L). We also +save the C command in C<$laststep>, + so a null command knows what to re-execute. =head4 C - single-step, entering subs @@ -3330,10 +3631,10 @@ sub _DB__grab_control my $self = shift; # Yes, grab control. - if ($slave_editor) { + if ($client_editor) { # Tell the editor to update its position. - $self->position("\032\032${DB::filename}:$line:0\n"); + $self->position("$sub_twice${DB::filename}:$line:0\n"); DB::print_lineinfo($self->position()); } @@ -3355,13 +3656,9 @@ to enter commands and have a valid context to be in. DB::print_help(< to quit or B to restart, use B I to avoid stopping after program termination, -B, B or B to get additional info. +S>, S> or S> to get additional info. EOP - # Set the DB::eval context appropriately. - # At program termination disable any user actions. - $DB::action = undef; - $DB::package = 'main'; $DB::usercontext = DB::_calc_usercontext($DB::package); } ## end elsif ($package eq 'DB::fake') @@ -3428,7 +3725,7 @@ number information, and print that. $self->append_to_position($incr_pos); $self->_my_print_lineinfo($i, $incr_pos); } ## end for ($i = $line + 1 ; $i... - } ## end else [ if ($slave_editor) + } ## end else [ if ($client_editor) return; } @@ -3746,10 +4043,7 @@ sub _handle_H_command { my $i; for ( $i = $#hist ; $i > $end ; $i-- ) { - - # Print the command unless it has no arguments. - print $OUT "$i: ", $hist[$i], "\n" - unless $hist[$i] =~ /^.?$/; + print $OUT "$i: ", $hist[$i], "\n"; } next CMD; @@ -4097,7 +4391,7 @@ The subroutine name; C<(eval)> if an C(). =item * C<$evaltext> -The C() text, if any (undefined for C) +The C() text, if any (undefined for S>) =item * C<$is_require> @@ -4844,8 +5138,10 @@ to the actual current file (the one we're executing in) and C<$filename_error> is restored to C<"">. This restores everything to the way it was before the second function was called at all. -See the comments in C and C for more -details. +See the comments in L>|/breakable_line(from, to) (API)> +and +L>|/breakable_line_in_filename(file, from, to) (API)> +for more details. =back @@ -5164,627 +5460,324 @@ sub cmd_b_sub { # if it really is in CORE::GLOBAL. my $core_name = "CORE::GLOBAL::$s"; if ((!defined(&$subname)) - and ($s !~ /::/) - and (defined &{$core_name})) - { - $subname = $core_name; - } - - # Put it in package 'main' if it has a leading ::. - if ($subname =~ /\A::/) - { - $subname = "main" . $subname; - } - } ## end if ( ref($subname) ne 'CODE' ) { - - # Try to set the breakpoint. - if (not eval { break_subroutine( $subname, $cond ); 1 }) { - local $\ = ''; - print {$OUT} $@; - return; - } - - return; -} ## end sub cmd_b_sub - -=head3 C - delete breakpoint(s) (command) - -The command mostly parses the command line and tries to turn the argument -into a line spec. If it can't, it uses the current line. It then calls -C to actually do the work. - -If C<*> is specified, C calls C with no arguments, -thereby deleting all the breakpoints. - -=cut - -sub cmd_B { - my $cmd = shift; - - # No line spec? Use dbline. - # If there is one, use it if it's non-zero, or wipe it out if it is. - my $line = ( $_[0] =~ /\A\./ ) ? $dbline : (shift || ''); - my $dbline = shift; - - # If the line was dot, make the line the current one. - $line =~ s/^\./$dbline/; - - # If it's * we're deleting all the breakpoints. - if ( $line eq '*' ) { - if (not eval { delete_breakpoint(); 1 }) { - print {$OUT} $@; - } - } - - # If there is a line spec, delete the breakpoint on that line. - elsif ( $line =~ /\A(\S.*)/ ) { - if (not eval { delete_breakpoint( $line || $dbline ); 1 }) { - local $\ = ''; - print {$OUT} $@; - } - } ## end elsif ($line =~ /^(\S.*)/) - - # No line spec. - else { - print {$OUT} - "Deleting a breakpoint requires a line number, or '*' for all\n" - ; # hint - } - - return; -} ## end sub cmd_B - -=head3 delete_breakpoint([line]) (API) - -This actually does the work of deleting either a single breakpoint, or all -of them. - -For a single line, we look for it in C<@dbline>. If it's nonbreakable, we -just drop out with a message saying so. If it is, we remove the condition -part of the 'condition\0action' that says there's a breakpoint here. If, -after we've done that, there's nothing left, we delete the corresponding -line in C<%dbline> to signal that no action needs to be taken for this line. - -For all breakpoints, we iterate through the keys of C<%had_breakpoints>, -which lists all currently-loaded files which have breakpoints. We then look -at each line in each of these files, temporarily switching the C<%dbline> -and C<@dbline> structures to point to the files in question, and do what -we did in the single line case: delete the condition in C<@dbline>, and -delete the key in C<%dbline> if nothing's left. - -We then wholesale delete C<%postponed>, C<%postponed_file>, and -C<%break_on_load>, because these structures contain breakpoints for files -and code that haven't been loaded yet. We can just kill these off because there -are no magical debugger structures associated with them. - -=cut - -sub _remove_breakpoint_entry { - my ($fn, $i) = @_; - - delete $dbline{$i}; - _delete_breakpoint_data_ref($fn, $i); - - return; -} - -sub _delete_all_breakpoints { - print {$OUT} "Deleting all breakpoints...\n"; - - # %had_breakpoints lists every file that had at least one - # breakpoint in it. - for my $fn ( keys %had_breakpoints ) { - - # Switch to the desired file temporarily. - local *dbline = $main::{ '_<' . $fn }; - - $max = $#dbline; - - # For all lines in this file ... - for my $i (1 .. $max) { - - # If there's a breakpoint or action on this line ... - if ( defined $dbline{$i} ) { - - # ... remove the breakpoint. - $dbline{$i} =~ s/\A[^\0]+//; - if ( $dbline{$i} =~ s/\A\0?\z// ) { - # Remove the entry altogether if no action is there. - _remove_breakpoint_entry($fn, $i); - } - } ## end if (defined $dbline{$i... - } ## end for $i (1 .. $max) - - # If, after we turn off the "there were breakpoints in this file" - # bit, the entry in %had_breakpoints for this file is zero, - # we should remove this file from the hash. - if ( not $had_breakpoints{$fn} &= (~1) ) { - delete $had_breakpoints{$fn}; - } - } ## end for my $fn (keys %had_breakpoints) - - # Kill off all the other breakpoints that are waiting for files that - # haven't been loaded yet. - undef %postponed; - undef %postponed_file; - undef %break_on_load; - - return; -} - -sub _delete_breakpoint_from_line { - my ($i) = @_; - - # Woops. This line wasn't breakable at all. - die "Line $i not breakable.\n" if $dbline[$i] == 0; - - # Kill the condition, but leave any action. - $dbline{$i} =~ s/\A[^\0]*//; - - # Remove the entry entirely if there's no action left. - if ($dbline{$i} eq '') { - _remove_breakpoint_entry($filename, $i); - } - - return; -} - -sub delete_breakpoint { - my $i = shift; - - # If we got a line, delete just that one. - if ( defined($i) ) { - _delete_breakpoint_from_line($i); - } - # No line; delete them all. - else { - _delete_all_breakpoints(); - } - - return; -} - -=head3 cmd_stop (command) - -This is meant to be part of the new command API, but it isn't called or used -anywhere else in the debugger. XXX It is probably meant for use in development -of new commands. - -=cut - -sub cmd_stop { # As on ^C, but not signal-safy. - $signal = 1; -} - -=head3 C - threads - -Display the current thread id: - - e - -This could be how (when implemented) to send commands to this thread id (e cmd) -or that thread id (e tid cmd). - -=cut - -sub cmd_e { - my $cmd = shift; - my $line = shift; - unless (exists($INC{'threads.pm'})) { - print "threads not loaded($ENV{PERL5DB_THREADED}) - please run the debugger with PERL5DB_THREADED=1 set in the environment\n"; - } else { - my $tid = threads->tid; - print "thread id: $tid\n"; - } -} ## end sub cmd_e - -=head3 C - list of thread ids - -Display the list of available thread ids: - - E - -This could be used (when implemented) to send commands to all threads (E cmd). - -=cut - -sub cmd_E { - my $cmd = shift; - my $line = shift; - unless (exists($INC{'threads.pm'})) { - print "threads not loaded($ENV{PERL5DB_THREADED}) - please run the debugger with PERL5DB_THREADED=1 set in the environment\n"; - } else { - my $tid = threads->tid; - print "thread ids: ".join(', ', - map { ($tid == $_->tid ? '<'.$_->tid.'>' : $_->tid) } threads->list - )."\n"; - } -} ## end sub cmd_E - -=head3 C - help command (command) - -Does the work of either + and ($s !~ /::/) + and (defined &{$core_name})) + { + $subname = $core_name; + } -=over 4 + # Put it in package 'main' if it has a leading ::. + if ($subname =~ /\A::/) + { + $subname = "main" . $subname; + } + } ## end if ( ref($subname) ne 'CODE' ) { -=item * + # Try to set the breakpoint. + if (not eval { break_subroutine( $subname, $cond ); 1 }) { + local $\ = ''; + print {$OUT} $@; + return; + } -Showing all the debugger help + return; +} ## end sub cmd_b_sub -=item * +=head3 C - delete breakpoint(s) (command) -Showing help for a specific command +The command mostly parses the command line and tries to turn the argument +into a line spec. If it can't, it uses the current line. It then calls +C to actually do the work. -=back +If C<*> is specified, C calls C with no arguments, +thereby deleting all the breakpoints. =cut -use vars qw($help); -use vars qw($summary); - -sub cmd_h { +sub cmd_B { my $cmd = shift; - # If we have no operand, assume null. - my $line = shift || ''; - - # 'h h'. Print the long-format help. - if ( $line =~ /\Ah\s*\z/ ) { - print_help($help); - } - - # 'h '. Search for the command and print only its help. - elsif ( my ($asked) = $line =~ /\A(\S.*)\z/ ) { - - # support long commands; otherwise bogus errors - # happen when you ask for h on for example - my $qasked = quotemeta($asked); # for searching; we don't - # want to use it as a pattern. - # XXX: finds CR but not + # No line spec? Use dbline. + # If there is one, use it if it's non-zero, or wipe it out if it is. + my $line = ( $_[0] =~ /\A\./ ) ? $dbline : (shift || ''); + my $dbline = shift; - # Search the help string for the command. - if ( - $help =~ /^ # Start of a line - is not a debugger command.\n"); + # If there is a line spec, delete the breakpoint on that line. + elsif ( $line =~ /\A(\S.*)/ ) { + if (not eval { delete_breakpoint( $line || $dbline ); 1 }) { + local $\ = ''; + print {$OUT} $@; } - } ## end elsif ($line =~ /^(\S.*)$/) + } ## end elsif ($line =~ /^(\S.*)/) - # 'h' - print the summary help. + # No line spec. else { - print_help($summary); + print {$OUT} + "Deleting a breakpoint requires a line number, or '*' for all\n" + ; # hint } -} ## end sub cmd_h -=head3 C - inheritance display - -Display the (nested) parentage of the module or object given. - -=cut - -sub cmd_i { - my $cmd = shift; - my $line = shift; + return; +} ## end sub cmd_B - require mro; +=head3 delete_breakpoint([line]) (API) - foreach my $isa ( split( /\s+/, $line ) ) { - $evalarg = $isa; - # The &-call is here to ascertain the mutability of @_. - ($isa) = &DB::eval; - no strict 'refs'; - print join( - ', ', - map { - "$_" - . ( - defined( ${"$_\::VERSION"} ) - ? ' ' . ${"$_\::VERSION"} - : undef ) - } @{mro::get_linear_isa(ref($isa) || $isa)} - ); - print "\n"; - } -} ## end sub cmd_i +This actually does the work of deleting either a single breakpoint, or all +of them. -=head3 C - list lines (command) +For a single line, we look for it in C<@dbline>. If it's nonbreakable, we +just drop out with a message saying so. If it is, we remove the condition +part of the 'condition\0action' that says there's a breakpoint here. If, +after we've done that, there's nothing left, we delete the corresponding +line in C<%dbline> to signal that no action needs to be taken for this line. -Most of the command is taken up with transforming all the different line -specification syntaxes into 'start-stop'. After that is done, the command -runs a loop over C<@dbline> for the specified range of lines. It handles -the printing of each line and any markers (C<==E> for current line, -C for break on this line, C for action on this line, C<:> for this -line breakable). +For all breakpoints, we iterate through the keys of C<%had_breakpoints>, +which lists all currently-loaded files which have breakpoints. We then look +at each line in each of these files, temporarily switching the C<%dbline> +and C<@dbline> structures to point to the files in question, and do what +we did in the single line case: delete the condition in C<@dbline>, and +delete the key in C<%dbline> if nothing's left. -We save the last line listed in the C<$start> global for further listing -later. +We then wholesale delete C<%postponed>, C<%postponed_file>, and +C<%break_on_load>, because these structures contain breakpoints for files +and code that haven't been loaded yet. We can just kill these off because there +are no magical debugger structures associated with them. =cut -sub _min { - my $min = shift; - foreach my $v (@_) { - if ($min > $v) { - $min = $v; - } - } - return $min; -} - -sub _max { - my $max = shift; - foreach my $v (@_) { - if ($max < $v) { - $max = $v; - } - } - return $max; -} - -sub _minify_to_max { - my $ref = shift; +sub _remove_breakpoint_entry { + my ($fn, $i) = @_; - $$ref = _min($$ref, $max); + delete $dbline{$i}; + _delete_breakpoint_data_ref($fn, $i); return; } -sub _cmd_l_handle_var_name { - my $var_name = shift; - - $evalarg = $var_name; - - my ($s) = DB::eval(); - - # Ooops. Bad scalar. - if ($@) { - print {$OUT} "Error: $@\n"; - next CMD; - } +sub _delete_all_breakpoints { + print {$OUT} "Deleting all breakpoints...\n"; - # Good scalar. If it's a reference, find what it points to. - $s = CvGV_name($s); - print {$OUT} "Interpreted as: $1 $s\n"; - $line = "$1 $s"; + # %had_breakpoints lists every file that had at least one + # breakpoint in it. + for my $fn ( keys %had_breakpoints ) { - # Call self recursively to really do the command. - return _cmd_l_main( $s ); -} + # Switch to the desired file temporarily. + local *dbline = $main::{ '_<' . $fn }; -sub _cmd_l_handle_subname { + $max = $#dbline; - my $s = $subname; + # For all lines in this file ... + for my $i (1 .. $max) { - # De-Perl4. - $subname =~ s/\'/::/; + # If there's a breakpoint or action on this line ... + if ( defined $dbline{$i} ) { - # Put it in this package unless it starts with ::. - $subname = $package . "::" . $subname unless $subname =~ /::/; + # ... remove the breakpoint. + $dbline{$i} =~ s/\A[^\0]+//; + if ( $dbline{$i} =~ s/\A\0?\z// ) { + # Remove the entry altogether if no action is there. + _remove_breakpoint_entry($fn, $i); + } + } ## end if (defined $dbline{$i... + } ## end for $i (1 .. $max) - # Put it in CORE::GLOBAL if t doesn't start with :: and - # it doesn't live in this package and it lives in CORE::GLOBAL. - $subname = "CORE::GLOBAL::$s" - if not defined &$subname - and $s !~ /::/ - and defined &{"CORE::GLOBAL::$s"}; + # If, after we turn off the "there were breakpoints in this file" + # bit, the entry in %had_breakpoints for this file is zero, + # we should remove this file from the hash. + if ( not $had_breakpoints{$fn} &= (~1) ) { + delete $had_breakpoints{$fn}; + } + } ## end for my $fn (keys %had_breakpoints) - # Put leading '::' names into 'main::'. - $subname = "main" . $subname if substr( $subname, 0, 2 ) eq "::"; + # Kill off all the other breakpoints that are waiting for files that + # haven't been loaded yet. + undef %postponed; + undef %postponed_file; + undef %break_on_load; - # Get name:start-stop from find_sub, and break this up at - # colons. - my @pieces = split( /:/, find_sub($subname) || $sub{$subname} ); + return; +} - # Pull off start-stop. - my $subrange = pop @pieces; +sub _delete_breakpoint_from_line { + my ($i) = @_; - # If the name contained colons, the split broke it up. - # Put it back together. - $file = join( ':', @pieces ); + # Woops. This line wasn't breakable at all. + die "Line $i not breakable.\n" if $dbline[$i] == 0; - # If we're not in that file, switch over to it. - if ( $file ne $filename ) { - if (! $slave_editor) { - print {$OUT} "Switching to file '$file'.\n"; - } + # Kill the condition, but leave any action. + $dbline{$i} =~ s/\A[^\0]*//; - # Switch debugger's magic structures. - *dbline = $main::{ '_<' . $file }; - $max = $#dbline; - $filename = $file; - } ## end if ($file ne $filename) + # Remove the entry entirely if there's no action left. + if ($dbline{$i} eq '') { + _remove_breakpoint_entry($filename, $i); + } - # Subrange is 'start-stop'. If this is less than a window full, - # swap it to 'start+', which will list a window from the start point. - if ($subrange) { - if ( eval($subrange) < -$window ) { - $subrange =~ s/-.*/+/; - } + return; +} - # Call self recursively to list the range. - return _cmd_l_main( $subrange ); - } ## end if ($subrange) +sub delete_breakpoint { + my $i = shift; - # Couldn't find it. + # If we got a line, delete just that one. + if ( defined($i) ) { + _delete_breakpoint_from_line($i); + } + # No line; delete them all. else { - print {$OUT} "Subroutine $subname not found.\n"; - return; + _delete_all_breakpoints(); } -} - -sub _cmd_l_empty { - # Compute new range to list. - $incr = $window - 1; - # Recurse to do it. - return _cmd_l_main( $start . '-' . ( $start + $incr ) ); + return; } -sub _cmd_l_plus { - my ($new_start, $new_incr) = @_; +=head3 cmd_stop (command) - # Don't reset start for 'l +nnn'. - $start = $new_start if $new_start; +This is meant to be part of the new command API, but it isn't called or used +anywhere else in the debugger. XXX It is probably meant for use in development +of new commands. - # Increment for list. Use window size if not specified. - # (Allows 'l +' to work.) - $incr = $new_incr || ($window - 1); +=cut - # Create a line range we'll understand, and recurse to do it. - return _cmd_l_main( $start . '-' . ( $start + $incr ) ); +sub cmd_stop { # As on ^C, but not signal-safy. + $signal = 1; } -sub _cmd_l_calc_initial_end_and_i { - my ($spec, $start_match, $end_match) = @_; +=head3 C - threads - # Determine end point; use end of file if not specified. - my $end = ( !defined $start_match ) ? $max : - ( $end_match ? $end_match : $start_match ); +Display the current thread id: - # Go on to the end, and then stop. - _minify_to_max(\$end); + e - # Determine start line. - my $i = $start_match; +This could be how (when implemented) to send commands to this thread id (e cmd) +or that thread id (e tid cmd). - if ($i eq '.') { - $i = $spec; +=cut + +sub cmd_e { + my $cmd = shift; + my $line = shift; + unless (exists($INC{'threads.pm'})) { + print "threads not loaded($ENV{PERL5DB_THREADED}) + please run the debugger with PERL5DB_THREADED=1 set in the environment\n"; + } else { + my $tid = threads->tid; + print "thread id: $tid\n"; } +} ## end sub cmd_e - $i = _max($i, 1); +=head3 C - list of thread ids - $incr = $end - $i; +Display the list of available thread ids: - return ($end, $i); -} + E -sub _cmd_l_range { - my ($spec, $current_line, $start_match, $end_match) = @_; +This could be used (when implemented) to send commands to all threads (E cmd). - my ($end, $i) = - _cmd_l_calc_initial_end_and_i($spec, $start_match, $end_match); +=cut - # If we're running under a slave editor, force it to show the lines. - if ($slave_editor) { - print {$OUT} "\032\032$filename:$i:0\n"; - $i = $end; +sub cmd_E { + my $cmd = shift; + my $line = shift; + unless (exists($INC{'threads.pm'})) { + print "threads not loaded($ENV{PERL5DB_THREADED}) + please run the debugger with PERL5DB_THREADED=1 set in the environment\n"; + } else { + my $tid = threads->tid; + print "thread ids: ".join(', ', + map { ($tid == $_->tid ? '<'.$_->tid.'>' : $_->tid) } threads->list + )."\n"; } - # We're doing it ourselves. We want to show the line and special - # markers for: - # - the current line in execution - # - whether a line is breakable or not - # - whether a line has a break or not - # - whether a line has an action or not - else { - I_TO_END: - for ( ; $i <= $end ; $i++ ) { +} ## end sub cmd_E - # Check for breakpoints and actions. - my ( $stop, $action ); - if ($dbline{$i}) { - ( $stop, $action ) = split( /\0/, $dbline{$i} ); - } +=head3 C - help command (command) - # ==> if this is the current line in execution, - # : if it's breakable. - my $arrow = - ( $i == $current_line and $filename eq $filename_ini ) - ? '==>' - : ( $dbline[$i] + 0 ? ':' : ' ' ); +Does the work of either - # Add break and action indicators. - $arrow .= 'b' if $stop; - $arrow .= 'a' if $action; +=over 4 - # Print the line. - print {$OUT} "$i$arrow\t", $dbline[$i]; +=item * - # Move on to the next line. Drop out on an interrupt. - if ($signal) { - $i++; - last I_TO_END; - } - } ## end for (; $i <= $end ; $i++) +Showing all the debugger help - # Line the prompt up; print a newline if the last line listed - # didn't have a newline. - if ($dbline[ $i - 1 ] !~ /\n\z/) { - print {$OUT} "\n"; - } - } ## end else [ if ($slave_editor) +=item * - # Save the point we last listed to in case another relative 'l' - # command is desired. Don't let it run off the end. - $start = $i; - _minify_to_max(\$start); +Showing help for a specific command - return; -} +=back -sub _cmd_l_main { - my $spec = shift; +=cut - # If this is '-something', delete any spaces after the dash. - $spec =~ s/\A-\s*\z/-/; +use vars qw($help); +use vars qw($summary); - # If the line is '$something', assume this is a scalar containing a - # line number. - # Set up for DB::eval() - evaluate in *user* context. - if ( my ($var_name) = $spec =~ /\A(\$.*)/s ) { - return _cmd_l_handle_var_name($var_name); - } - # l name. Try to find a sub by that name. - elsif ( ($subname) = $spec =~ /\A([\':A-Za-z_][\':\w]*(?:\[.*\])?)/s ) { - return _cmd_l_handle_subname(); - } - # Bare 'l' command. - elsif ( $spec !~ /\S/ ) { - return _cmd_l_empty(); - } - # l [start]+number_of_lines - elsif ( my ($new_start, $new_incr) = $spec =~ /\A(\d*)\+(\d*)\z/ ) { - return _cmd_l_plus($new_start, $new_incr); - } - # l start-stop or l start,stop - elsif (my ($s, $e) = $spec =~ /^(?:(-?[\d\$\.]+)(?:[-,]([\d\$\.]+))?)?/ ) { - return _cmd_l_range($spec, $line, $s, $e); +sub cmd_h { + my $cmd = shift; + + # If we have no operand, assume null. + my $line = shift || ''; + + # 'h h'. Print the long-format help. + if ( $line =~ /\Ah\s*\z/ ) { + print_help($help); } - return; -} ## end sub cmd_l + # 'h '. Search for the command and print only its help. + elsif ( my ($asked) = $line =~ /\A(\S.*)\z/ ) { -sub cmd_l { - my (undef, $line) = @_; + # support long commands; otherwise bogus errors + # happen when you ask for h on for example + my $qasked = quotemeta($asked); # for searching; we don't + # want to use it as a pattern. + # XXX: finds CR but not - return _cmd_l_main($line); -} + # Search the help string for the command. + if ( + $help =~ /^ # Start of a line + is not a debugger command.\n"); + } + } ## end elsif ($line =~ /^(\S.*)$/) + + # 'h' - print the summary help. + else { + print_help($summary); + } +} ## end sub cmd_h =head3 C - list breakpoints, actions, and watch expressions (command) @@ -6011,7 +6004,7 @@ sub cmd_O { =head3 C - view window (command) Uses the C<$preview> variable set in the second C block (q.v.) to -move back a few lines to list the selected line in context. Uses C +move back a few lines to list the selected line in context. Uses C<_cmd_l_main> to do the actual listing after figuring out the range of line to request. =cut @@ -6037,11 +6030,11 @@ sub cmd_v { # Back up by the context amount. $start -= $preview; - # Put together a linespec that cmd_l will like. + # Put together a linespec that _cmd_l_main will like. $line = $start . '-' . ( $start + $incr ); # List the lines. - cmd_l( 'l', $line ); + _cmd_l_main( $line ); } ## end if ($line =~ /^(\d*)$/) } ## end sub cmd_v @@ -6195,7 +6188,7 @@ sub save { print_lineinfo prints whatever it is that it is handed; it prints it to the C<$LINEINFO> filehandle instead of just printing it to STDOUT. This allows -us to feed line information to a slave editor without messing up the +us to feed line information to a client editor without messing up the debugger output. =cut @@ -6282,8 +6275,8 @@ sub postponed_sub { Called after each required file is compiled, but before it is executed; also called if the name of a just-compiled subroutine is a key of -C<%postponed>. Propagates saved breakpoints (from C, C, -etc.) into the just-compiled code. +C<%postponed>. Propagates saved breakpoints (from S>, +S>, etc.) into the just-compiled code. If this is a C'd file, the incoming parameter is the glob C<*{"_<$filename"}>, with C<$filename> the name of the C'd file. @@ -6469,10 +6462,10 @@ sub print_trace { local $\ = ''; my $fh = shift; - # If this is going to a slave editor, but we're not the primary + # If this is going to a client editor, but we're not the primary # debugger, reset it first. resetterm(1) - if $fh eq $LINEINFO # slave editor + if $fh eq $LINEINFO # client editor and $LINEINFO eq $OUT # normal output and $term_pid != $$; # not the primary @@ -6830,15 +6823,13 @@ the appropriate attributes. We then use vars qw($ornaments); use vars qw($rl_attribs); + sub setterm { # Load Term::Readline, but quietly; don't debug it and don't trace it. local $frame = 0; local $doret = -2; - _DB__use_full_path(sub { - require Term::ReadLine; - }); - + require Term::ReadLine; # If noTTY is set, but we have a TTY name, go ahead and hook up to it. if ($notty) { @@ -7013,9 +7004,7 @@ qq[3>&1 xterm -title "Daughter Perl debugger $pids $name" -e sh -c 'tty 1>&3;\ # We need $term defined or we can not switch to the newly created xterm if ($tty ne '' && !defined $term) { - _DB__use_full_path(sub { - require Term::ReadLine; - }); + require Term::ReadLine; if ( !$rl ) { $term = Term::ReadLine::Stub->new( 'perldb', $IN, $OUT ); } @@ -7231,7 +7220,7 @@ EOP B returning this. On I-like systems one can get the name of a I for the given window - by typing B, and disconnect the I from I by B. + by typing B, and disconnect the I from I by S>. EOP } ## end if (not defined $in) @@ -7346,7 +7335,7 @@ sub readline { # Add it to the terminal history (if possible). $term->AddHistory($got) - if length($got) > 1 + if length($got) >= option_val("HistItemMinLength", 2) and defined $term->Features->{addHistory}; return $got; } ## end if (@typeahead) @@ -7633,7 +7622,6 @@ sub set_list { for my $i ( 0 .. $#list ) { $val = $list[$i]; $val =~ s/\\/\\\\/g; - no warnings 'experimental::regex_sets'; $val =~ s/ ( (?[ [\000-\xFF] & [:^print:] ]) ) / "\\0x" . unpack('H2',$1)/xaeg; $ENV{"${stem}_$i"} = $val; @@ -7997,8 +7985,8 @@ sub LineInfo { # '>' onto the front. my $stream = ( $lineinfo =~ /^(\+?\>|\|)/ ) ? $lineinfo : ">$lineinfo"; - # If this is a pipe, the stream points to a slave editor. - $slave_editor = ( $stream =~ /^\|/ ); + # If this is a pipe, the stream points to a client editor. + $client_editor = ( $stream =~ /^\|/ ); my $new_lineinfo_fh; # Open it up and unbuffer it. @@ -8849,7 +8837,7 @@ sub CvGV_name_or_bust { return if $skipCvGV; # Backdoor to avoid problems if XS broken... return unless ref $in; $in = \&$in; # Hard reference... - eval { _DB__use__full_path(sub { require Devel::Peek; 1;}); } or return; + eval { require Devel::Peek; 1 } or return; my $gv = Devel::Peek::CvGV($in) or return; *$gv{PACKAGE} . '::' . *$gv{NAME}; } ## end sub CvGV_name_or_bust @@ -8989,7 +8977,7 @@ Just checks the contents of C<$^O> and sets the C<$doccmd> global accordingly. =cut sub setman { - $doccmd = $^O !~ /^(?:MSWin32|VMS|os2|dos|amigaos|riscos|NetWare)\z/s + $doccmd = $^O !~ /^(?:MSWin32|VMS|os2|amigaos|riscos)\z/s ? "man" # O Happy Day! : "perldoc"; # Alas, poor unfortunates } ## end sub setman @@ -9920,10 +9908,10 @@ from the environment. # And run Perl again. Add the "-d" flag, all the # flags we built up, the script (whether a one-liner - # or a file), add on the -emacs flag for a slave editor, + # or a file), add on the -emacs flag for a client editor, # and then the old arguments. - return ($^X, '-d', @flags, @script, ($slave_editor ? '-emacs' : ()), @ARGS); + return ($^X, '-d', @flags, @script, ($client_editor ? '-emacs' : ()), @ARGS); }; # end restart diff --git a/gnu/usr.bin/perl/lib/perl5db.t b/gnu/usr.bin/perl/lib/perl5db.t index 421229a54ab..8ab456c8812 100644 --- a/gnu/usr.bin/perl/lib/perl5db.t +++ b/gnu/usr.bin/perl/lib/perl5db.t @@ -219,6 +219,19 @@ sub _contents return $self->{_contents}; } +# object for prog temporary file +sub _tempprog +{ + my $self = shift; + + if (@_) + { + $self->{_tempprog} = shift; + } + + return $self->{_tempprog}; +} + sub _init { my ($self, $args) = @_; @@ -233,7 +246,14 @@ sub _init my $prog = $args->{prog}; - if (ref($prog) ne '' or !defined($prog)) { + if (ref($prog) eq 'SCALAR') { + use File::Temp; + my $fh = File::Temp->new; + $self->_tempprog($fh); + print $fh $$prog; + $prog = $fh->filename; + } + elsif (ref($prog) ne '' or !defined($prog)) { die "prog should be a path to a program file."; } @@ -323,6 +343,10 @@ sub output_unlike { ::unlike($self->_output(), $re, $msg); } +sub get_contents { + return shift->_contents(); +} + sub contents_like { my ($self, $re, $msg) = @_; @@ -337,6 +361,146 @@ sub contents_unlike { ::unlike($self->_contents(), $re, $msg); } +=head1 NAME + +DebugWrap - wrapper to execute code under the debugger and examine the +results. + +=head1 SYNOPSIS + + my $wrapper = DebugWrap->new( + { + cmds => + [ + # list of commands supplied to the debugger + ], + prog => 'filename_of_code_to_debug.pl', + # and some optional arguments + } + ); + + my $wrapper = DebugWrap->new( + { + cmds => + [ + # list of commands supplied to the debugger + ], + prog => \<<'EOS', + # perl code to debug + EOS + # and some optional arguments + } + ); + + # test the output from the program being debugged + $wrapper->output_like(qr/.../, "describe the test"); + $wrapper->output_unlike(qr/.../, "describe the test"); + my $output = $wrapper->get_output; # for more sophisticated checks + + # test the output from the debugger + $wrapper->contents_like(qr/.../, "describe the test"); + $wrapper->contents_unlike(qr/.../, "describe the test"); + my $contents = $wrapper->get_contents; # for more sophisticated checks + +=head1 DESCRIPTION + +DebugWrap is a simple class that executes a set of debugger commands +against a program under the debugger and provides some simple methods +to examine the results. + +=head2 Creating a DebugWrap object + +The constructor new() accepts a hash of arguments, with the following +possible members: + +=over + +=item cmds + +An array of commands to execute, one command per element. Required. + +=item prog + +Either the name of a perl program to test under the debugger, or a +reference to a scalar containing the text of the program to test. +Required. + +=item stderr + +If this is a true value capture standard error, which is the default. +Optional. + +=item include_t + +Add F to the perl search path, as with C<-I> + +=item switches + +An arrayref of switches to supply to perl. This should include the +C<-d> switch needed to invoke the debugger. If C is not +supplied then C<-d> only is supplied. The C<-I> for C is +added after these switches. + +=back + +=head2 Other methods + +The other methods intended for test usage are: + +=over + +=item $wrapper->get_contents + +Fetch the debugger output from the debugger run. This does not +include the output from the program under test. + +=item $wrapper->contents_like($re, $test_name) + +Test that the debugger output matches the given regular expression +object (as with qr//). + +Equivelent to: + + like($wrapper->get_contents, $re, $test_name); + +=item $wrapper->contents_unlike($re, $test_name) + +Test that the debugger output does not match the given regular +expression object (as with qr//). + +Equivelent to: + + unlike($wrapper->get_contents, $re, $test_name); + +=item $wrapper->get_output + +Fetch the program output from the debugger run. This does not include +the output from the debugger itself, it does include the output +generated by C or ASAN, assuming you haven't disabled +capturing stderr. + +=item $wrapper->output_like($re, $test_name); + +Test that the program output matches the given regular expression +object (as with qr//). + +Equivelent to: + + like($wrapper->get_output, $re, $test_name); + +=item $wrapper->output_unlike($re, $test_name); + +Test that the program output does not match the given regular +expression object (as with qr//). + +Equivelent to: + + unlike($wrapper->get_output, $re, $test_name); + +=back + +=cut + package main; { @@ -521,6 +685,7 @@ sub _calc_trace_wrapper } # taint tests +if (!exists($Config{taint_support}) || $Config{taint_support}) { my $wrapper = _calc_trace_wrapper( { @@ -1181,6 +1346,60 @@ DebugWrap->new({ ); } +{ + my $wrapper = DebugWrap->new( + { + cmds => + [ + 'v', + 'q', + ], + prog => '../lib/perl5db/t/test-l-statement-1', + } + ); + $wrapper->contents_like( + qr/ + 1==>\s+\$x\ =\ 1;\n + 2:\s+print\ "1\\n";\n + 3\s+\n + 4:\s+\$x\ =\ 2;\n + 5:\s+print\ "2\\n";\n + 6\s*\n + 7:\s+\$x\ =\ 3;\n + /msx, + "test plain v" + ); +} + +{ + my $wrapper = DebugWrap->new( + { + cmds => + [ + 'v 10', + 'q', + ], + prog => '../lib/perl5db/t/test-l-statement-1', + } + ); + + $wrapper->contents_like( + qr/ + 7:\s+\$x\ =\ 3;\n + 8:\s+print\ "3\\n";\n + 9\s*\n + 10:\s+\$x\ =\ 4;\n + 11:\s+print\ "4\\n";\n + 12\s*\n + 13:\s+\$x\ =\ 5;\n + 14:\s+print\ "5\\n";\n + 15\s*\n + 16:\s+\$x\ =\ 6;\n + /msx, + "test v with line" + ); +} + { my $wrapper = DebugWrap->new( { @@ -2144,7 +2363,11 @@ DebugWrap->new({ [ '= quit q', '= foobar l', + '= .hello print "hellox\n"', + '= -goodbye print "goodbyex\n"', 'foobar', + '.hello', + '-goodbye', 'quit', ], prog => '../lib/perl5db/t/test-l-statement-1', @@ -2160,7 +2383,9 @@ DebugWrap->new({ 5:\s+print\ "2\\n";\n /msx, 'Test the = (command alias) command.', - ); + ); + $wrapper->output_like(qr/hellox.*goodbyex/xs, + "check . and - can start alias name"); } # Test the m statement. @@ -2799,6 +3024,28 @@ SKIP: ); } +{ + # GitHub #17901 + my $wrapper = DebugWrap->new( + { + cmds => + [ + 'a 4 $s++', + ('s') x 5, + 'x $s', + 'q' + ], + prog => '../lib/perl5db/t/test-a-statement-3', + switches => [ '-d' ], + stderr => 0, + } + ); + $wrapper->contents_like( + qr/^0 +2$/m, + 'Test that the a command runs only on the given lines.', + ); +} + { # perl 5 RT #126735 regression bug. local $ENV{PERLDB_OPTS} = "NonStop=0 RemotePort=non-existent-host.tld:9001"; @@ -2924,6 +3171,51 @@ SKIP: ); } +{ + # gh #17661 + my $wrapper = DebugWrap->new( + { + cmds => + [ + 'c', + 'i $obj', + 'q', + ], + prog => '../lib/perl5db/t/gh-17661', + } + ); + + $wrapper->output_like( + qr/C5, C1, C2, C3, C4/, + q/check for reasonable result/, + ); +} + +{ + # gh #17661 related - C where $var is lexical + my $wrapper = DebugWrap->new( + { + cmds => + [ + 'c', + 'l $x', + 'l $y', + 'q', + ], + prog => '../lib/perl5db/t/gh-17661b', + } + ); + + $wrapper->contents_like( + qr/sub bar/, + q/check bar was listed/, + ); + $wrapper->contents_like( + qr/sub foo/, + q/check foo was listed/, + ); +} + SKIP: { $Config{usethreads} @@ -2959,6 +3251,49 @@ SKIP: $wrapper->output_like(qr/Finished One/, "[perl #124203] debugger didn't deadlock (lvalue)"); } +{ + # https://github.com/Perl/perl5/issues/19198 + # this isn't a debugger bug, but a bug in the way perl itself stores cop + # information for lines + my $wrapper = DebugWrap->new( + { + cmds => + [ + 'b Test::AUTOLOAD', # this would crash on ASAN + 'c', # this would fail to stop at the breakpoint + 'q' + ], + prog => \<<'EOS', +package Test; + +sub AUTOLOAD { + use vars '$AUTOLOAD'; + my $sub = $AUTOLOAD; + return 1; +} + +package main; + + +sub test +{ + Test::test(); +} + +sub test_test +{ + eval { test() }; +} + +test_test(); +EOS + } + ); + $wrapper->output_unlike(qr/AddressSanitizer/, "[github #19198] no bad access"); + $wrapper->contents_like(qr/^Test::AUTOLOAD\(.*?\):\s+\d+:\s+my \$sub = \$AUTOLOAD;/m, + "[github #19198] check we stopped correctly"); +} + done_testing(); END { diff --git a/gnu/usr.bin/perl/lib/sigtrap.pm b/gnu/usr.bin/perl/lib/sigtrap.pm index 11d670942bb..4e5be44e855 100644 --- a/gnu/usr.bin/perl/lib/sigtrap.pm +++ b/gnu/usr.bin/perl/lib/sigtrap.pm @@ -8,7 +8,7 @@ sigtrap - Perl pragma to enable simple signal handling use Carp; -$VERSION = 1.09; +$VERSION = '1.10'; $Verbose ||= 0; sub import { @@ -184,7 +184,7 @@ handlers. You can have it install one of two handlers supplied by B itself (one which provides a Perl stack trace and one which simply Cs), or alternately you can supply your own handler for it to install. It can be told only to install a handler for signals which -are either untrapped or ignored. It has a couple of lists of signals to +are either untrapped or ignored. It has three lists of signals to trap, plus you can supply your own list of signals. The arguments passed to the C statement which invokes B @@ -307,7 +307,7 @@ signals which are already trapped or ignored: use sigtrap qw(die untrapped normal-signals); -Die on receipt one of an of the B which is currently +Die on receipt one of any of the B which is currently B, provide a stack trace on receipt of B of the B: diff --git a/gnu/usr.bin/perl/lib/sort.t b/gnu/usr.bin/perl/lib/sort.t index e0ef9d3faca..1ba06647779 100644 --- a/gnu/usr.bin/perl/lib/sort.t +++ b/gnu/usr.bin/perl/lib/sort.t @@ -25,9 +25,7 @@ BEGIN { use strict; use warnings; -use Test::More tests => @TestSizes * 2 # sort() tests - * 3 # number of pragmas to test - + 2; # tests for sort::current +use Test::More; # Generate array of specified size for testing sort. # @@ -148,7 +146,13 @@ main(sub { sort {&{$_[0]}} @{$_[1]} }, 0); { use sort qw(stable); - my $sort_current; BEGIN { $sort_current = sort::current(); } + my $sort_current; + BEGIN { + my $a = "" ; + local $SIG{__WARN__} = sub {$a = $_[0]}; + $sort_current = sort::current(); + like($a, qr/\Asort::current is deprecated\b/, "sort::current warns"); + } is($sort_current, 'stable', 'sort::current for stable'); main(sub { sort {&{$_[0]}} @{$_[1]} }, 0); } @@ -157,7 +161,55 @@ main(sub { sort {&{$_[0]}} @{$_[1]} }, 0); { use sort qw(defaults stable); - my $sort_current; BEGIN { $sort_current = sort::current(); } + my $sort_current; + BEGIN { + my $a = "" ; + local $SIG{__WARN__} = sub {$a = $_[0]}; + $sort_current = sort::current(); + like($a, qr/\Asort::current is deprecated\b/, "sort::current warns"); + } is($sort_current, 'stable', 'sort::current after defaults stable'); main(sub { sort {&{$_[0]}} @{$_[1]} }, 0); } + +# Tests added to check how sort::current is deprecated + +{ + no sort qw(stable); + my $sort_current; + BEGIN { + my $a = "" ; + local $SIG{__WARN__} = sub {$a = $_[0]}; + $sort_current = sort::current(); + like($a, qr/\Asort::current is deprecated\b/, "sort::current warns"); + } + is($sort_current, 'stable', 'sort::current *always* stable'); +} + +{ + use sort qw(defaults); + my $sort_current; + BEGIN { + no warnings qw(deprecated); + my $a = "" ; + local $SIG{__WARN__} = sub {$a = $_[0]}; + $sort_current = sort::current(); + is($a, "", "sort::current warning can be disabled"); + } + is($sort_current, 'stable', 'sort::current *always* stable'); +} + +{ + use sort qw(stable); + my $sort_current; + BEGIN { + no warnings qw(deprecated); + my $a = "" ; + local $SIG{__WARN__} = sub {$a = $_[0]}; + $sort_current = sort::current(); + is($a, "", "sort::current warning can be disabled"); + } + is($sort_current, 'stable', 'sort::current for stable'); +} + +done_testing(); diff --git a/gnu/usr.bin/perl/lib/strict.pm b/gnu/usr.bin/perl/lib/strict.pm index 923c921363d..71713a2da53 100644 --- a/gnu/usr.bin/perl/lib/strict.pm +++ b/gnu/usr.bin/perl/lib/strict.pm @@ -1,6 +1,6 @@ package strict; -$strict::VERSION = "1.11"; +$strict::VERSION = "1.12"; my ( %bitmask, %explicit_bitmask ); @@ -154,8 +154,9 @@ exempted from this check. This disables the poetry optimization, generating a compile-time error if you try to use a bareword identifier that's not a subroutine, unless it -is a simple identifier (no colons) and that it appears in curly braces or -on the left hand side of the C<< => >> symbol. +is a simple identifier (no colons) and that it appears in curly braces, +on the left hand side of the C<< => >> symbol, or has the unary minus +operator applied to it. use strict 'subs'; $SIG{PIPE} = Plumber; # blows up diff --git a/gnu/usr.bin/perl/lib/strict.t b/gnu/usr.bin/perl/lib/strict.t index bfee7620c27..a9b851b5759 100644 --- a/gnu/usr.bin/perl/lib/strict.t +++ b/gnu/usr.bin/perl/lib/strict.t @@ -3,7 +3,7 @@ chdir 't' if -d 't'; @INC = ( '.', '../lib' ); -our $local_tests = 6; +our $local_tests = 7; require "../t/lib/common.pl"; eval qq(use strict 'garbage'); @@ -18,8 +18,15 @@ like($@, qr/^Unknown 'strict' tag\(s\) 'foo bar'/); eval qq(no strict qw(foo bar)); like($@, qr/^Unknown 'strict' tag\(s\) 'foo bar'/); -eval 'use v5.12; use v5.10; ${"c"}'; -is($@, '', 'use v5.10 disables implicit strict refs'); +{ + my $warnings = ""; + local $SIG{__WARN__} = sub { $warnings .= $_[0] }; + eval 'use v5.12; use v5.10; ${"c"}'; + is($@, '', 'use v5.10 disables implicit strict refs'); + like($warnings, + qr/^Downgrading a use VERSION declaration to below v5.11 is deprecated, and will become fatal in Perl 5.40 at /, + 'use v5.10 after use v5.12 provokes deprecation warning'); +} eval 'use strict; use v5.10; ${"c"}'; like($@, diff --git a/gnu/usr.bin/perl/lib/subs.pm b/gnu/usr.bin/perl/lib/subs.pm index 24814596baa..9e01b4e67b2 100644 --- a/gnu/usr.bin/perl/lib/subs.pm +++ b/gnu/usr.bin/perl/lib/subs.pm @@ -1,6 +1,9 @@ package subs; -our $VERSION = '1.03'; +use strict; +use warnings; + +our $VERSION = '1.04'; =head1 NAME @@ -27,14 +30,13 @@ See L and L. =cut -require 5.000; - sub import { my $callpack = caller; my $pack = shift; my @imports = @_; foreach my $sym (@imports) { - *{"${callpack}::$sym"} = \&{"${callpack}::$sym"}; + no strict 'refs'; + *{"${callpack}::$sym"} = \&{"${callpack}::$sym"}; } }; diff --git a/gnu/usr.bin/perl/lib/unicore/ArabicShaping.txt b/gnu/usr.bin/perl/lib/unicore/ArabicShaping.txt index 9a93adc12fb..bfb6b47a558 100644 --- a/gnu/usr.bin/perl/lib/unicore/ArabicShaping.txt +++ b/gnu/usr.bin/perl/lib/unicore/ArabicShaping.txt @@ -1,6 +1,6 @@ -# ArabicShaping-13.0.0.txt -# Date: 2020-01-31, 23:55:00 GMT [KW, RP] -# © 2020 Unicode®, Inc. +# ArabicShaping-14.0.0.txt +# Date: 2021-05-21, 01:54:00 GMT [KW, RP] +# © 2021 Unicode®, Inc. # Unicode and the Unicode Logo are registered trademarks of Unicode, Inc. in the U.S. and other countries. # For terms of use, see http://www.unicode.org/terms_of_use.html # @@ -13,11 +13,12 @@ # exemplified in Tables 9-3, 9-8, 9-9, 9-10, 9-14, 9-15, 9-16, 9-19, # 9-20, 10-4, 10-5, 10-6, 10-7, and 19-5 of The Unicode Standard core # specification. This file also defines Joining_Type values for -# Mongolian, Phags-pa, Psalter Pahlavi, Sogdian, Chorasmian, and Adlam positional shaping, +# Mongolian, Phags-pa, Psalter Pahlavi, Sogdian, Old Uyghur, Chorasmian, +# and Adlam positional shaping, # and Joining_Type and Joining_Group values for Hanifi Rohingya positional shaping, # which are not listed in tables in the standard. # -# See Sections 9.2, 9.3, 9.5, 10.5, 10.6, 13.4, 14.3, 14.10, 16.14, 19.4, and 19.9 +# See Sections 9.2, 9.3, 9.5, 10.5, 10.6, 13.5, 14.4, 14.10, 14.11, 16.14, 19.4, and 19.9 # of The Unicode Standard core specification for more information. # # Each line contains four fields, separated by a semicolon. @@ -44,7 +45,7 @@ # Note that for cursive joining scripts which are typically rendered # top-to-bottom, rather than right-to-left, Joining_Type=L conventionally # refers to bottom joining, and Joining_Type=R conventionally refers -# to top joining. See Section 14.3, Phags-pa for more information on the +# to top joining. See Section 14.4, Phags-pa for more information on the # interpretation of joining types in vertical layout. # # Field 3: defines the joining group (property name: Joining_Group) @@ -79,7 +80,7 @@ # joining group values will be defined only if an explicit proposal # to define those values exactly has been approved by the UTC. This # is the convention exemplified by the N'Ko, Mandaic, Mongolian, -# Phags-pa, Psalter Pahlavi, Sogdian, Chorasmian, and Adlam scripts. +# Phags-pa, Psalter Pahlavi, Sogdian, Old Uyghur, Chorasmian, and Adlam scripts. # Only the Arabic, Manichaean, and Syriac scripts currently have # explicit joining group values defined for all characters, including # those which have only a single character in a particular Joining_Group @@ -162,7 +163,7 @@ 0674; HIGH HAMZA; U; No_Joining_Group 0675; HIGH HAMZA ALEF; R; ALEF 0676; HIGH HAMZA WAW; R; WAW -0677; HIGH HAMZA WAW WITH DAMMA ABOVE; R; WAW +0677; HIGH HAMZA WAW WITH COMMA ABOVE; R; WAW 0678; HIGH HAMZA DOTLESS YEH; D; YEH 0679; DOTLESS BEH WITH TAH ABOVE; D; BEH 067A; DOTLESS BEH WITH VERTICAL 2 DOTS ABOVE; D; BEH @@ -240,9 +241,9 @@ 06C2; HEH GOAL WITH HAMZA ABOVE; D; HEH GOAL 06C3; TEH MARBUTA GOAL; R; TEH MARBUTA GOAL 06C4; WAW WITH ATTACHED RING WITHIN; R; WAW -06C5; WAW WITH BAR; R; WAW +06C5; WAW WITH LOOP; R; WAW 06C6; WAW WITH V ABOVE; R; WAW -06C7; WAW WITH DAMMA ABOVE; R; WAW +06C7; WAW WITH COMMA ABOVE; R; WAW 06C8; WAW WITH ALEF ABOVE; R; WAW 06C9; WAW WITH INVERTED V ABOVE; R; WAW 06CA; WAW WITH 2 DOTS ABOVE; R; WAW @@ -432,6 +433,42 @@ 0869; MALAYALAM LLLA; R; MALAYALAM LLLA 086A; MALAYALAM SSA; R; MALAYALAM SSA +# Arabic Extended-B Characters + +0870; ALEF WITH ATTACHED FATHA; R; ALEF +0871; ALEF WITH ATTACHED TOP RIGHT FATHA; R; ALEF +0872; ALEF WITH RIGHT MIDDLE STROKE; R; ALEF +0873; ALEF WITH LEFT MIDDLE STROKE; R; ALEF +0874; ALEF WITH ATTACHED KASRA; R; ALEF +0875; ALEF WITH ATTACHED BOTTOM RIGHT KASRA; R; ALEF +0876; ALEF WITH ATTACHED ROUND DOT ABOVE; R; ALEF +0877; ALEF WITH ATTACHED RIGHT ROUND DOT; R; ALEF +0878; ALEF WITH ATTACHED LEFT ROUND DOT; R; ALEF +0879; ALEF WITH ATTACHED ROUND DOT BELOW; R; ALEF +087A; ALEF WITH DOT ABOVE; R; ALEF +087B; ALEF WITH ATTACHED TOP RIGHT FATHA AND DOT ABOVE; R; ALEF +087C; ALEF WITH RIGHT MIDDLE STROKE AND DOT ABOVE; R; ALEF +087D; ALEF WITH ATTACHED BOTTOM RIGHT KASRA AND DOT ABOVE; R; ALEF +087E; ALEF WITH ATTACHED TOP RIGHT FATHA AND LEFT RING; R; ALEF +087F; ALEF WITH RIGHT MIDDLE STROKE AND LEFT RING; R; ALEF +0880; ALEF WITH ATTACHED BOTTOM RIGHT KASRA AND LEFT RING; R; ALEF +0881; ALEF WITH ATTACHED RIGHT HAMZA; R; ALEF +0882; ALEF WITH ATTACHED LEFT HAMZA; R; ALEF +0883; TATWEEL WITH OVERSTRUCK HAMZA; C; No_Joining_Group +0884; TATWEEL WITH OVERSTRUCK WAW; C; No_Joining_Group +0885; TATWEEL WITH TWO DOTS BELOW; C; No_Joining_Group +0886; THIN YEH; D; THIN YEH +0887; ARABIC BASELINE ROUND DOT; U; No_Joining_Group +0888; ARABIC RAISED ROUND DOT; U; No_Joining_Group +0889; DOTLESS NOON WITH INVERTED V ABOVE; D; NOON +088A; HAH WITH INVERTED V BELOW; D; HAH +088B; TAH WITH DOT BELOW; D; TAH +088C; TAH WITH 3 DOTS BELOW; D; TAH +088D; KEHEH WITH VERTICAL 2 DOTS BELOW; D; GAF +088E; VERTICAL TAIL; R; VERTICAL TAIL +0890; ARABIC POUND MARK ABOVE; U; No_Joining_Group +0891; ARABIC PIASTRE MARK ABOVE; U; No_Joining_Group + # Arabic Extended-A Characters 08A0; DOTLESS BEH WITH V BELOW; D; BEH @@ -455,6 +492,7 @@ 08B2; REH WITH DOT AND INVERTED V ABOVE; R; REH 08B3; AIN WITH 3 DOTS BELOW; D; AIN 08B4; KAF WITH DOT BELOW; D; KAF +08B5; DOTLESS QAF WITH DOT BELOW; D; QAF 08B6; BEH WITH MEEM ABOVE; D; BEH 08B7; DOTLESS BEH WITH 3 DOTS BELOW AND MEEM ABOVE; D; BEH 08B8; DOTLESS BEH WITH TEH ABOVE; D; BEH @@ -473,6 +511,7 @@ 08C5; HAH WITH DOT BELOW AND 3 DOTS ABOVE; D; HAH 08C6; HAH WITH DIAMOND 4 DOTS BELOW; D; HAH 08C7; LAM WITH TAH ABOVE; D; LAM +08C8; KEHEH WITH ELONGATED HAMZA ABOVE; D; GAF 08E2; ARABIC DISPUTED END OF AYAH; U; No_Joining_Group # Mongolian Characters @@ -819,6 +858,27 @@ A873; PHAGS-PA CANDRABINDU; U; No_Joining_Group 10F53; SOGDIAN TWENTY; D; No_Joining_Group 10F54; SOGDIAN ONE HUNDRED; R; No_Joining_Group +# Old Uyghur Characters + +10F70; OLD UYGHUR ALEPH; D; No_Joining_Group +10F71; OLD UYGHUR BETH; D; No_Joining_Group +10F72; OLD UYGHUR GIMEL-HETH; D; No_Joining_Group +10F73; OLD UYGHUR WAW; D; No_Joining_Group +10F74; OLD UYGHUR ZAYIN; R; No_Joining_Group +10F75; OLD UYGHUR FINAL HETH; R; No_Joining_Group +10F76; OLD UYGHUR YODH; D; No_Joining_Group +10F77; OLD UYGHUR KAPH; D; No_Joining_Group +10F78; OLD UYGHUR LAMEDH; D; No_Joining_Group +10F79; OLD UYGHUR MEM; D; No_Joining_Group +10F7A; OLD UYGHUR NUN; D; No_Joining_Group +10F7B; OLD UYGHUR SAMEKH; D; No_Joining_Group +10F7C; OLD UYGHUR PE; D; No_Joining_Group +10F7D; OLD UYGHUR SADHE; D; No_Joining_Group +10F7E; OLD UYGHUR RESH; D; No_Joining_Group +10F7F; OLD UYGHUR SHIN; D; No_Joining_Group +10F80; OLD UYGHUR TAW; D; No_Joining_Group +10F81; OLD UYGHUR LESH; D; No_Joining_Group + # Chorasmian Characters 10FB0; CHORASMIAN ALEPH; D; No_Joining_Group diff --git a/gnu/usr.bin/perl/lib/unicore/BidiBrackets.txt b/gnu/usr.bin/perl/lib/unicore/BidiBrackets.txt index a95e5ca5ca7..89698f588ae 100644 --- a/gnu/usr.bin/perl/lib/unicore/BidiBrackets.txt +++ b/gnu/usr.bin/perl/lib/unicore/BidiBrackets.txt @@ -1,11 +1,11 @@ -# BidiBrackets-13.0.0.txt -# Date: 2019-09-09, 19:31:00 GMT [AG, LI, KW] -# © 2019 Unicode®, Inc. +# BidiBrackets-14.0.0.txt +# Date: 2021-06-30, 23:59:00 GMT [AG, LI, KW] +# © 2021 Unicode®, Inc. # Unicode and the Unicode Logo are registered trademarks of Unicode, Inc. in the U.S. and other countries. -# For terms of use, see http://www.unicode.org/terms_of_use.html +# For terms of use, see https://www.unicode.org/terms_of_use.html # # Unicode Character Database -# For documentation, see http://www.unicode.org/reports/tr44/ +# For documentation, see https://www.unicode.org/reports/tr44/ # # Bidi_Paired_Bracket and Bidi_Paired_Bracket_Type Properties # @@ -56,7 +56,7 @@ # of each line. # # For information on bidirectional paired brackets, see UAX #9: Unicode -# Bidirectional Algorithm, at http://www.unicode.org/unicode/reports/tr9/ +# Bidirectional Algorithm, at https://www.unicode.org/reports/tr9/ # # This file was originally created by Andrew Glass and Laurentiu Iancu # for Unicode 6.3. @@ -147,6 +147,14 @@ 2E27; 2E26; c # RIGHT SIDEWAYS U BRACKET 2E28; 2E29; o # LEFT DOUBLE PARENTHESIS 2E29; 2E28; c # RIGHT DOUBLE PARENTHESIS +2E55; 2E56; o # LEFT SQUARE BRACKET WITH STROKE +2E56; 2E55; c # RIGHT SQUARE BRACKET WITH STROKE +2E57; 2E58; o # LEFT SQUARE BRACKET WITH DOUBLE STROKE +2E58; 2E57; c # RIGHT SQUARE BRACKET WITH DOUBLE STROKE +2E59; 2E5A; o # TOP HALF LEFT PARENTHESIS +2E5A; 2E59; c # TOP HALF RIGHT PARENTHESIS +2E5B; 2E5C; o # BOTTOM HALF LEFT PARENTHESIS +2E5C; 2E5B; c # BOTTOM HALF RIGHT PARENTHESIS 3008; 3009; o # LEFT ANGLE BRACKET 3009; 3008; c # RIGHT ANGLE BRACKET 300A; 300B; o # LEFT DOUBLE ANGLE BRACKET diff --git a/gnu/usr.bin/perl/lib/unicore/BidiMirroring.txt b/gnu/usr.bin/perl/lib/unicore/BidiMirroring.txt index 34e42ae8dc3..bd8e2c5d001 100644 --- a/gnu/usr.bin/perl/lib/unicore/BidiMirroring.txt +++ b/gnu/usr.bin/perl/lib/unicore/BidiMirroring.txt @@ -1,10 +1,10 @@ -# BidiMirroring-13.0.0.txt -# Date: 2019-09-09, 19:34:00 GMT [KW, LI, RP] -# © 2019 Unicode®, Inc. -# For terms of use, see http://www.unicode.org/terms_of_use.html +# BidiMirroring-14.0.0.txt +# Date: 2021-08-08, 22:55:00 GMT [KW, RP] +# © 2021 Unicode®, Inc. +# For terms of use, see https://www.unicode.org/terms_of_use.html # # Unicode Character Database -# For documentation, see http://www.unicode.org/reports/tr44/ +# For documentation, see https://www.unicode.org/reports/tr44/ # # Bidi_Mirroring_Glyph Property # @@ -15,7 +15,7 @@ # value, for which there is another Unicode character that typically has a glyph # that is the mirror image of the original character's glyph. # -# The repertoire covered by the file is Unicode 13.0.0. +# The repertoire covered by the file is Unicode 14.0.0. # # The file contains a list of lines with mappings from one code point # to another one for character-based mirroring. @@ -40,7 +40,7 @@ # for character-based mirroring. # # For information on bidi mirroring, see UAX #9: Unicode Bidirectional Algorithm, -# at http://www.unicode.org/unicode/reports/tr9/ +# at https://www.unicode.org/reports/tr9/ # # This file was originally created by Markus Scherer. # Extended for Unicode 3.2, 4.0, 4.1, 5.0, 5.1, 5.2, and 6.0 by Ken Whistler, @@ -96,10 +96,10 @@ 208D; 208E # SUBSCRIPT LEFT PARENTHESIS 208E; 208D # SUBSCRIPT RIGHT PARENTHESIS 2208; 220B # ELEMENT OF -2209; 220C # NOT AN ELEMENT OF +2209; 220C # [BEST FIT] NOT AN ELEMENT OF 220A; 220D # SMALL ELEMENT OF 220B; 2208 # CONTAINS AS MEMBER -220C; 2209 # DOES NOT CONTAIN AS MEMBER +220C; 2209 # [BEST FIT] DOES NOT CONTAIN AS MEMBER 220D; 220A # SMALL CONTAINS AS MEMBER 2215; 29F5 # DIVISION SLASH 221F; 2BFE # RIGHT ANGLE @@ -453,6 +453,14 @@ 2E27; 2E26 # RIGHT SIDEWAYS U BRACKET 2E28; 2E29 # LEFT DOUBLE PARENTHESIS 2E29; 2E28 # RIGHT DOUBLE PARENTHESIS +2E55; 2E56 # LEFT SQUARE BRACKET WITH STROKE +2E56; 2E55 # RIGHT SQUARE BRACKET WITH STROKE +2E57; 2E58 # LEFT SQUARE BRACKET WITH DOUBLE STROKE +2E58; 2E57 # RIGHT SQUARE BRACKET WITH DOUBLE STROKE +2E59; 2E5A # TOP HALF LEFT PARENTHESIS +2E5A; 2E59 # TOP HALF RIGHT PARENTHESIS +2E5B; 2E5C # BOTTOM HALF LEFT PARENTHESIS +2E5C; 2E5B # BOTTOM HALF RIGHT PARENTHESIS 3008; 3009 # LEFT ANGLE BRACKET 3009; 3008 # RIGHT ANGLE BRACKET 300A; 300B # LEFT DOUBLE ANGLE BRACKET diff --git a/gnu/usr.bin/perl/lib/unicore/Blocks.txt b/gnu/usr.bin/perl/lib/unicore/Blocks.txt index 56877db10f3..cc5d61988bb 100644 --- a/gnu/usr.bin/perl/lib/unicore/Blocks.txt +++ b/gnu/usr.bin/perl/lib/unicore/Blocks.txt @@ -1,6 +1,6 @@ -# Blocks-13.0.0.txt -# Date: 2019-07-10, 19:06:00 GMT [KW] -# © 2019 Unicode®, Inc. +# Blocks-14.0.0.txt +# Date: 2021-01-22, 23:29:00 GMT [KW] +# © 2021 Unicode®, Inc. # For terms of use, see http://www.unicode.org/terms_of_use.html # # Unicode Character Database @@ -52,6 +52,7 @@ 0800..083F; Samaritan 0840..085F; Mandaic 0860..086F; Syriac Supplement +0870..089F; Arabic Extended-B 08A0..08FF; Arabic Extended-A 0900..097F; Devanagari 0980..09FF; Bengali @@ -215,7 +216,9 @@ FFF0..FFFF; Specials 104B0..104FF; Osage 10500..1052F; Elbasan 10530..1056F; Caucasian Albanian +10570..105BF; Vithkuqi 10600..1077F; Linear A +10780..107BF; Latin Extended-F 10800..1083F; Cypriot Syllabary 10840..1085F; Imperial Aramaic 10860..1087F; Palmyrene @@ -240,6 +243,7 @@ FFF0..FFFF; Specials 10E80..10EBF; Yezidi 10F00..10F2F; Old Sogdian 10F30..10F6F; Sogdian +10F70..10FAF; Old Uyghur 10FB0..10FDF; Chorasmian 10FE0..10FFF; Elymaic 11000..1107F; Brahmi @@ -259,13 +263,14 @@ FFF0..FFFF; Specials 11600..1165F; Modi 11660..1167F; Mongolian Supplement 11680..116CF; Takri -11700..1173F; Ahom +11700..1174F; Ahom 11800..1184F; Dogra 118A0..118FF; Warang Citi 11900..1195F; Dives Akuru 119A0..119FF; Nandinagari 11A00..11A4F; Zanabazar Square 11A50..11AAF; Soyombo +11AB0..11ABF; Unified Canadian Aboriginal Syllabics Extended-A 11AC0..11AFF; Pau Cin Hau 11C00..11C6F; Bhaiksuki 11C70..11CBF; Marchen @@ -277,11 +282,13 @@ FFF0..FFFF; Specials 12000..123FF; Cuneiform 12400..1247F; Cuneiform Numbers and Punctuation 12480..1254F; Early Dynastic Cuneiform +12F90..12FFF; Cypro-Minoan 13000..1342F; Egyptian Hieroglyphs 13430..1343F; Egyptian Hieroglyph Format Controls 14400..1467F; Anatolian Hieroglyphs 16800..16A3F; Bamum Supplement 16A40..16A6F; Mro +16A70..16ACF; Tangsa 16AD0..16AFF; Bassa Vah 16B00..16B8F; Pahawh Hmong 16E40..16E9F; Medefaidrin @@ -290,13 +297,15 @@ FFF0..FFFF; Specials 17000..187FF; Tangut 18800..18AFF; Tangut Components 18B00..18CFF; Khitan Small Script -18D00..18D8F; Tangut Supplement +18D00..18D7F; Tangut Supplement +1AFF0..1AFFF; Kana Extended-B 1B000..1B0FF; Kana Supplement 1B100..1B12F; Kana Extended-A 1B130..1B16F; Small Kana Extension 1B170..1B2FF; Nushu 1BC00..1BC9F; Duployan 1BCA0..1BCAF; Shorthand Format Controls +1CF00..1CFCF; Znamenny Musical Notation 1D000..1D0FF; Byzantine Musical Symbols 1D100..1D1FF; Musical Symbols 1D200..1D24F; Ancient Greek Musical Notation @@ -305,9 +314,12 @@ FFF0..FFFF; Specials 1D360..1D37F; Counting Rod Numerals 1D400..1D7FF; Mathematical Alphanumeric Symbols 1D800..1DAAF; Sutton SignWriting +1DF00..1DFFF; Latin Extended-G 1E000..1E02F; Glagolitic Supplement 1E100..1E14F; Nyiakeng Puachue Hmong +1E290..1E2BF; Toto 1E2C0..1E2FF; Wancho +1E7E0..1E7FF; Ethiopic Extended-B 1E800..1E8DF; Mende Kikakui 1E900..1E95F; Adlam 1EC70..1ECBF; Indic Siyaq Numbers diff --git a/gnu/usr.bin/perl/lib/unicore/CJKRadicals.txt b/gnu/usr.bin/perl/lib/unicore/CJKRadicals.txt index 231361591fd..61a45878efa 100644 --- a/gnu/usr.bin/perl/lib/unicore/CJKRadicals.txt +++ b/gnu/usr.bin/perl/lib/unicore/CJKRadicals.txt @@ -1,6 +1,6 @@ -# CJKRadicals-13.0.0.txt -# Date: 2019-09-09, 19:38:00 GMT [RC, KW, LI] -# © 2019 Unicode®, Inc. +# CJKRadicals-14.0.0.txt +# Date: 2021-03-16, 21:39:00 GMT [RC, KW, LI] +# © 2021 Unicode®, Inc. # For terms of use, see http://www.unicode.org/terms_of_use.html # # Unicode Character Database diff --git a/gnu/usr.bin/perl/lib/unicore/CaseFolding.txt b/gnu/usr.bin/perl/lib/unicore/CaseFolding.txt index 033788b253f..932ace29e6d 100644 --- a/gnu/usr.bin/perl/lib/unicore/CaseFolding.txt +++ b/gnu/usr.bin/perl/lib/unicore/CaseFolding.txt @@ -1,6 +1,6 @@ -# CaseFolding-13.0.0.txt -# Date: 2019-09-08, 23:30:59 GMT -# © 2019 Unicode®, Inc. +# CaseFolding-14.0.0.txt +# Date: 2021-03-08, 19:35:41 GMT +# © 2021 Unicode®, Inc. # Unicode and the Unicode Logo are registered trademarks of Unicode, Inc. in the U.S. and other countries. # For terms of use, see http://www.unicode.org/terms_of_use.html # @@ -1050,6 +1050,7 @@ 2C2C; C; 2C5C; # GLAGOLITIC CAPITAL LETTER SHTAPIC 2C2D; C; 2C5D; # GLAGOLITIC CAPITAL LETTER TROKUTASTI A 2C2E; C; 2C5E; # GLAGOLITIC CAPITAL LETTER LATINATE MYSLITE +2C2F; C; 2C5F; # GLAGOLITIC CAPITAL LETTER CAUDATE CHRIVI 2C60; C; 2C61; # LATIN CAPITAL LETTER L WITH DOUBLE BAR 2C62; C; 026B; # LATIN CAPITAL LETTER L WITH MIDDLE TILDE 2C63; C; 1D7D; # LATIN CAPITAL LETTER P WITH STROKE @@ -1230,12 +1231,16 @@ A7B8; C; A7B9; # LATIN CAPITAL LETTER U WITH STROKE A7BA; C; A7BB; # LATIN CAPITAL LETTER GLOTTAL A A7BC; C; A7BD; # LATIN CAPITAL LETTER GLOTTAL I A7BE; C; A7BF; # LATIN CAPITAL LETTER GLOTTAL U +A7C0; C; A7C1; # LATIN CAPITAL LETTER OLD POLISH O A7C2; C; A7C3; # LATIN CAPITAL LETTER ANGLICANA W A7C4; C; A794; # LATIN CAPITAL LETTER C WITH PALATAL HOOK A7C5; C; 0282; # LATIN CAPITAL LETTER S WITH HOOK A7C6; C; 1D8E; # LATIN CAPITAL LETTER Z WITH PALATAL HOOK A7C7; C; A7C8; # LATIN CAPITAL LETTER D WITH SHORT STROKE OVERLAY A7C9; C; A7CA; # LATIN CAPITAL LETTER S WITH SHORT STROKE OVERLAY +A7D0; C; A7D1; # LATIN CAPITAL LETTER CLOSED INSULAR G +A7D6; C; A7D7; # LATIN CAPITAL LETTER MIDDLE SCOTS S +A7D8; C; A7D9; # LATIN CAPITAL LETTER SIGMOID S A7F5; C; A7F6; # LATIN CAPITAL LETTER REVERSED HALF H AB70; C; 13A0; # CHEROKEE SMALL LETTER A AB71; C; 13A1; # CHEROKEE SMALL LETTER E @@ -1431,6 +1436,41 @@ FF3A; C; FF5A; # FULLWIDTH LATIN CAPITAL LETTER Z 104D1; C; 104F9; # OSAGE CAPITAL LETTER GHA 104D2; C; 104FA; # OSAGE CAPITAL LETTER ZA 104D3; C; 104FB; # OSAGE CAPITAL LETTER ZHA +10570; C; 10597; # VITHKUQI CAPITAL LETTER A +10571; C; 10598; # VITHKUQI CAPITAL LETTER BBE +10572; C; 10599; # VITHKUQI CAPITAL LETTER BE +10573; C; 1059A; # VITHKUQI CAPITAL LETTER CE +10574; C; 1059B; # VITHKUQI CAPITAL LETTER CHE +10575; C; 1059C; # VITHKUQI CAPITAL LETTER DE +10576; C; 1059D; # VITHKUQI CAPITAL LETTER DHE +10577; C; 1059E; # VITHKUQI CAPITAL LETTER EI +10578; C; 1059F; # VITHKUQI CAPITAL LETTER E +10579; C; 105A0; # VITHKUQI CAPITAL LETTER FE +1057A; C; 105A1; # VITHKUQI CAPITAL LETTER GA +1057C; C; 105A3; # VITHKUQI CAPITAL LETTER HA +1057D; C; 105A4; # VITHKUQI CAPITAL LETTER HHA +1057E; C; 105A5; # VITHKUQI CAPITAL LETTER I +1057F; C; 105A6; # VITHKUQI CAPITAL LETTER IJE +10580; C; 105A7; # VITHKUQI CAPITAL LETTER JE +10581; C; 105A8; # VITHKUQI CAPITAL LETTER KA +10582; C; 105A9; # VITHKUQI CAPITAL LETTER LA +10583; C; 105AA; # VITHKUQI CAPITAL LETTER LLA +10584; C; 105AB; # VITHKUQI CAPITAL LETTER ME +10585; C; 105AC; # VITHKUQI CAPITAL LETTER NE +10586; C; 105AD; # VITHKUQI CAPITAL LETTER NJE +10587; C; 105AE; # VITHKUQI CAPITAL LETTER O +10588; C; 105AF; # VITHKUQI CAPITAL LETTER PE +10589; C; 105B0; # VITHKUQI CAPITAL LETTER QA +1058A; C; 105B1; # VITHKUQI CAPITAL LETTER RE +1058C; C; 105B3; # VITHKUQI CAPITAL LETTER SE +1058D; C; 105B4; # VITHKUQI CAPITAL LETTER SHE +1058E; C; 105B5; # VITHKUQI CAPITAL LETTER TE +1058F; C; 105B6; # VITHKUQI CAPITAL LETTER THE +10590; C; 105B7; # VITHKUQI CAPITAL LETTER U +10591; C; 105B8; # VITHKUQI CAPITAL LETTER VE +10592; C; 105B9; # VITHKUQI CAPITAL LETTER XE +10594; C; 105BB; # VITHKUQI CAPITAL LETTER Y +10595; C; 105BC; # VITHKUQI CAPITAL LETTER ZE 10C80; C; 10CC0; # OLD HUNGARIAN CAPITAL LETTER A 10C81; C; 10CC1; # OLD HUNGARIAN CAPITAL LETTER AA 10C82; C; 10CC2; # OLD HUNGARIAN CAPITAL LETTER EB diff --git a/gnu/usr.bin/perl/lib/unicore/CompositionExclusions.txt b/gnu/usr.bin/perl/lib/unicore/CompositionExclusions.txt index 52bbb465bcd..74e425e2a0f 100644 --- a/gnu/usr.bin/perl/lib/unicore/CompositionExclusions.txt +++ b/gnu/usr.bin/perl/lib/unicore/CompositionExclusions.txt @@ -1,10 +1,10 @@ -# CompositionExclusions-13.0.0.txt -# Date: 2019-10-15, 18:27:00 GMT [KW, LI] -# © 2019 Unicode®, Inc. -# For terms of use, see http://www.unicode.org/terms_of_use.html +# CompositionExclusions-14.0.0.txt +# Date: 2021-03-30, 23:59:00 GMT [KW, LI] +# © 2021 Unicode®, Inc. +# For terms of use, see https://www.unicode.org/terms_of_use.html # # Unicode Character Database -# For documentation, see http://www.unicode.org/reports/tr44/ +# For documentation, see https://www.unicode.org/reports/tr44/ # # This file lists the characters for the Composition Exclusion Table # defined in UAX #15, Unicode Normalization Forms. @@ -13,7 +13,7 @@ # Unicode Character Database. # # For more information, see -# http://www.unicode.org/unicode/reports/tr15/#Primary_Exclusion_List_Table +# https://www.unicode.org/reports/tr15/#Primary_Exclusion_List_Table # # For a full derivation of composition exclusions, see the derived property # Full_Composition_Exclusion in DerivedNormalizationProps.txt diff --git a/gnu/usr.bin/perl/lib/unicore/DAge.txt b/gnu/usr.bin/perl/lib/unicore/DAge.txt index 0d2bd10f8d7..c8ee531b8af 100644 --- a/gnu/usr.bin/perl/lib/unicore/DAge.txt +++ b/gnu/usr.bin/perl/lib/unicore/DAge.txt @@ -1,6 +1,6 @@ -# DerivedAge-13.0.0.txt -# Date: 2019-09-08, 23:30:59 GMT -# © 2019 Unicode®, Inc. +# DerivedAge-14.0.0.txt +# Date: 2021-07-10, 00:35:00 GMT +# © 2021 Unicode®, Inc. # Unicode and the Unicode Logo are registered trademarks of Unicode, Inc. in the U.S. and other countries. # For terms of use, see http://www.unicode.org/terms_of_use.html # @@ -40,7 +40,7 @@ # an expression such as "\p{age=3.0}" matches all of the code points # assigned in Version 3.0--that is, all the code points with a value # less than or equal to 3.0 for the Age property. -# For more information, see [http://www.unicode.org/reports/tr18/]. +# For more information, see [https://www.unicode.org/reports/tr18/]. # All code points not explicitly listed for Age # have the value Unassigned (NA). @@ -1862,4 +1862,91 @@ AB68..AB6B ; 13.0 # [4] LATIN SMALL LETTER TURNED R WITH MIDDLE TILDE..MODI # Total code points: 5930 +# ================================================ + +# Age=V14_0 + +# Newly assigned in Unicode 14.0.0 (September, 2021) + +061D ; 14.0 # ARABIC END OF TEXT MARK +0870..088E ; 14.0 # [31] ARABIC LETTER ALEF WITH ATTACHED FATHA..ARABIC VERTICAL TAIL +0890..0891 ; 14.0 # [2] ARABIC POUND MARK ABOVE..ARABIC PIASTRE MARK ABOVE +0898..089F ; 14.0 # [8] ARABIC SMALL HIGH WORD AL-JUZ..ARABIC HALF MADDA OVER MADDA +08B5 ; 14.0 # ARABIC LETTER QAF WITH DOT BELOW AND NO DOTS ABOVE +08C8..08D2 ; 14.0 # [11] ARABIC LETTER GRAF..ARABIC LARGE ROUND DOT INSIDE CIRCLE BELOW +0C3C ; 14.0 # TELUGU SIGN NUKTA +0C5D ; 14.0 # TELUGU LETTER NAKAARA POLLU +0CDD ; 14.0 # KANNADA LETTER NAKAARA POLLU +170D ; 14.0 # TAGALOG LETTER RA +1715 ; 14.0 # TAGALOG SIGN PAMUDPOD +171F ; 14.0 # TAGALOG LETTER ARCHAIC RA +180F ; 14.0 # MONGOLIAN FREE VARIATION SELECTOR FOUR +1AC1..1ACE ; 14.0 # [14] COMBINING LEFT PARENTHESIS ABOVE LEFT..COMBINING LATIN SMALL LETTER INSULAR T +1B4C ; 14.0 # BALINESE LETTER ARCHAIC JNYA +1B7D..1B7E ; 14.0 # [2] BALINESE PANTI LANTANG..BALINESE PAMADA LANTANG +1DFA ; 14.0 # COMBINING DOT BELOW LEFT +20C0 ; 14.0 # SOM SIGN +2C2F ; 14.0 # GLAGOLITIC CAPITAL LETTER CAUDATE CHRIVI +2C5F ; 14.0 # GLAGOLITIC SMALL LETTER CAUDATE CHRIVI +2E53..2E5D ; 14.0 # [11] MEDIEVAL EXCLAMATION MARK..OBLIQUE HYPHEN +9FFD..9FFF ; 14.0 # [3] CJK UNIFIED IDEOGRAPH-9FFD..CJK UNIFIED IDEOGRAPH-9FFF +A7C0..A7C1 ; 14.0 # [2] LATIN CAPITAL LETTER OLD POLISH O..LATIN SMALL LETTER OLD POLISH O +A7D0..A7D1 ; 14.0 # [2] LATIN CAPITAL LETTER CLOSED INSULAR G..LATIN SMALL LETTER CLOSED INSULAR G +A7D3 ; 14.0 # LATIN SMALL LETTER DOUBLE THORN +A7D5..A7D9 ; 14.0 # [5] LATIN SMALL LETTER DOUBLE WYNN..LATIN SMALL LETTER SIGMOID S +A7F2..A7F4 ; 14.0 # [3] MODIFIER LETTER CAPITAL C..MODIFIER LETTER CAPITAL Q +FBC2 ; 14.0 # ARABIC SYMBOL WASLA ABOVE +FD40..FD4F ; 14.0 # [16] ARABIC LIGATURE RAHIMAHU ALLAAH..ARABIC LIGATURE RAHIMAHUM ALLAAH +FDCF ; 14.0 # ARABIC LIGATURE SALAAMUHU ALAYNAA +FDFE..FDFF ; 14.0 # [2] ARABIC LIGATURE SUBHAANAHU WA TAAALAA..ARABIC LIGATURE AZZA WA JALL +10570..1057A ; 14.0 # [11] VITHKUQI CAPITAL LETTER A..VITHKUQI CAPITAL LETTER GA +1057C..1058A ; 14.0 # [15] VITHKUQI CAPITAL LETTER HA..VITHKUQI CAPITAL LETTER RE +1058C..10592 ; 14.0 # [7] VITHKUQI CAPITAL LETTER SE..VITHKUQI CAPITAL LETTER XE +10594..10595 ; 14.0 # [2] VITHKUQI CAPITAL LETTER Y..VITHKUQI CAPITAL LETTER ZE +10597..105A1 ; 14.0 # [11] VITHKUQI SMALL LETTER A..VITHKUQI SMALL LETTER GA +105A3..105B1 ; 14.0 # [15] VITHKUQI SMALL LETTER HA..VITHKUQI SMALL LETTER RE +105B3..105B9 ; 14.0 # [7] VITHKUQI SMALL LETTER SE..VITHKUQI SMALL LETTER XE +105BB..105BC ; 14.0 # [2] VITHKUQI SMALL LETTER Y..VITHKUQI SMALL LETTER ZE +10780..10785 ; 14.0 # [6] MODIFIER LETTER SMALL CAPITAL AA..MODIFIER LETTER SMALL B WITH HOOK +10787..107B0 ; 14.0 # [42] MODIFIER LETTER SMALL DZ DIGRAPH..MODIFIER LETTER SMALL V WITH RIGHT HOOK +107B2..107BA ; 14.0 # [9] MODIFIER LETTER SMALL CAPITAL Y..MODIFIER LETTER SMALL S WITH CURL +10F70..10F89 ; 14.0 # [26] OLD UYGHUR LETTER ALEPH..OLD UYGHUR PUNCTUATION FOUR DOTS +11070..11075 ; 14.0 # [6] BRAHMI SIGN OLD TAMIL VIRAMA..BRAHMI LETTER OLD TAMIL LLA +110C2 ; 14.0 # KAITHI VOWEL SIGN VOCALIC R +116B9 ; 14.0 # TAKRI ABBREVIATION SIGN +11740..11746 ; 14.0 # [7] AHOM LETTER CA..AHOM LETTER LLA +11AB0..11ABF ; 14.0 # [16] CANADIAN SYLLABICS NATTILIK HI..CANADIAN SYLLABICS SPA +12F90..12FF2 ; 14.0 # [99] CYPRO-MINOAN SIGN CM001..CYPRO-MINOAN SIGN CM302 +16A70..16ABE ; 14.0 # [79] TANGSA LETTER OZ..TANGSA LETTER ZA +16AC0..16AC9 ; 14.0 # [10] TANGSA DIGIT ZERO..TANGSA DIGIT NINE +1AFF0..1AFF3 ; 14.0 # [4] KATAKANA LETTER MINNAN TONE-2..KATAKANA LETTER MINNAN TONE-5 +1AFF5..1AFFB ; 14.0 # [7] KATAKANA LETTER MINNAN TONE-7..KATAKANA LETTER MINNAN NASALIZED TONE-5 +1AFFD..1AFFE ; 14.0 # [2] KATAKANA LETTER MINNAN NASALIZED TONE-7..KATAKANA LETTER MINNAN NASALIZED TONE-8 +1B11F..1B122 ; 14.0 # [4] HIRAGANA LETTER ARCHAIC WU..KATAKANA LETTER ARCHAIC WU +1CF00..1CF2D ; 14.0 # [46] ZNAMENNY COMBINING MARK GORAZDO NIZKO S KRYZHEM ON LEFT..ZNAMENNY COMBINING MARK KRYZH ON LEFT +1CF30..1CF46 ; 14.0 # [23] ZNAMENNY COMBINING TONAL RANGE MARK MRACHNO..ZNAMENNY PRIZNAK MODIFIER ROG +1CF50..1CFC3 ; 14.0 # [116] ZNAMENNY NEUME KRYUK..ZNAMENNY NEUME PAUK +1D1E9..1D1EA ; 14.0 # [2] MUSICAL SYMBOL SORI..MUSICAL SYMBOL KORON +1DF00..1DF1E ; 14.0 # [31] LATIN SMALL LETTER FENG DIGRAPH WITH TRILL..LATIN SMALL LETTER S WITH CURL +1E290..1E2AE ; 14.0 # [31] TOTO LETTER PA..TOTO SIGN RISING TONE +1E7E0..1E7E6 ; 14.0 # [7] ETHIOPIC SYLLABLE HHYA..ETHIOPIC SYLLABLE HHYO +1E7E8..1E7EB ; 14.0 # [4] ETHIOPIC SYLLABLE GURAGE HHWA..ETHIOPIC SYLLABLE HHWE +1E7ED..1E7EE ; 14.0 # [2] ETHIOPIC SYLLABLE GURAGE MWI..ETHIOPIC SYLLABLE GURAGE MWEE +1E7F0..1E7FE ; 14.0 # [15] ETHIOPIC SYLLABLE GURAGE QWI..ETHIOPIC SYLLABLE GURAGE PWEE +1F6DD..1F6DF ; 14.0 # [3] PLAYGROUND SLIDE..RING BUOY +1F7F0 ; 14.0 # HEAVY EQUALS SIGN +1F979 ; 14.0 # FACE HOLDING BACK TEARS +1F9CC ; 14.0 # TROLL +1FA7B..1FA7C ; 14.0 # [2] X-RAY..CRUTCH +1FAA9..1FAAC ; 14.0 # [4] MIRROR BALL..HAMSA +1FAB7..1FABA ; 14.0 # [4] LOTUS..NEST WITH EGGS +1FAC3..1FAC5 ; 14.0 # [3] PREGNANT MAN..PERSON WITH CROWN +1FAD7..1FAD9 ; 14.0 # [3] POURING LIQUID..JAR +1FAE0..1FAE7 ; 14.0 # [8] MELTING FACE..BUBBLES +1FAF0..1FAF6 ; 14.0 # [7] HAND WITH INDEX FINGER AND THUMB CROSSED..HEART HANDS +2A6DE..2A6DF ; 14.0 # [2] CJK UNIFIED IDEOGRAPH-2A6DE..CJK UNIFIED IDEOGRAPH-2A6DF +2B735..2B738 ; 14.0 # [4] CJK UNIFIED IDEOGRAPH-2B735..CJK UNIFIED IDEOGRAPH-2B738 + +# Total code points: 838 + # EOF diff --git a/gnu/usr.bin/perl/lib/unicore/DCoreProperties.txt b/gnu/usr.bin/perl/lib/unicore/DCoreProperties.txt index bc97e2173df..afc2abd97ec 100644 --- a/gnu/usr.bin/perl/lib/unicore/DCoreProperties.txt +++ b/gnu/usr.bin/perl/lib/unicore/DCoreProperties.txt @@ -1,6 +1,6 @@ -# DerivedCoreProperties-13.0.0.txt -# Date: 2020-01-22, 00:07:19 GMT -# © 2020 Unicode®, Inc. +# DerivedCoreProperties-14.0.0.txt +# Date: 2021-08-12, 23:12:53 GMT +# © 2021 Unicode®, Inc. # Unicode and the Unicode Logo are registered trademarks of Unicode, Inc. in the U.S. and other countries. # For terms of use, see http://www.unicode.org/terms_of_use.html # @@ -341,8 +341,10 @@ FFE9..FFEC ; Math # Sm [4] HALFWIDTH LEFTWARDS ARROW..HALFWIDTH DOWNWARDS A 0829..082C ; Alphabetic # Mn [4] SAMARITAN VOWEL SIGN LONG I..SAMARITAN VOWEL SIGN SUKUN 0840..0858 ; Alphabetic # Lo [25] MANDAIC LETTER HALQA..MANDAIC LETTER AIN 0860..086A ; Alphabetic # Lo [11] SYRIAC LETTER MALAYALAM NGA..SYRIAC LETTER MALAYALAM SSA -08A0..08B4 ; Alphabetic # Lo [21] ARABIC LETTER BEH WITH SMALL V BELOW..ARABIC LETTER KAF WITH DOT BELOW -08B6..08C7 ; Alphabetic # Lo [18] ARABIC LETTER BEH WITH SMALL MEEM ABOVE..ARABIC LETTER LAM WITH SMALL ARABIC LETTER TAH ABOVE +0870..0887 ; Alphabetic # Lo [24] ARABIC LETTER ALEF WITH ATTACHED FATHA..ARABIC BASELINE ROUND DOT +0889..088E ; Alphabetic # Lo [6] ARABIC LETTER NOON WITH INVERTED SMALL V..ARABIC VERTICAL TAIL +08A0..08C8 ; Alphabetic # Lo [41] ARABIC LETTER BEH WITH SMALL V BELOW..ARABIC LETTER GRAF +08C9 ; Alphabetic # Lm ARABIC SMALL FARSI YEH 08D4..08DF ; Alphabetic # Mn [12] ARABIC SMALL HIGH WORD AR-RUB..ARABIC SMALL HIGH WORD WAQFA 08E3..08E9 ; Alphabetic # Mn [7] ARABIC TURNED DAMMA BELOW..ARABIC CURLY KASRATAN 08F0..0902 ; Alphabetic # Mn [19] ARABIC OPEN FATHATAN..DEVANAGARI SIGN ANUSVARA @@ -471,6 +473,7 @@ FFE9..FFEC ; Math # Sm [4] HALFWIDTH LEFTWARDS ARROW..HALFWIDTH DOWNWARDS A 0C4A..0C4C ; Alphabetic # Mn [3] TELUGU VOWEL SIGN O..TELUGU VOWEL SIGN AU 0C55..0C56 ; Alphabetic # Mn [2] TELUGU LENGTH MARK..TELUGU AI LENGTH MARK 0C58..0C5A ; Alphabetic # Lo [3] TELUGU LETTER TSA..TELUGU LETTER RRRA +0C5D ; Alphabetic # Lo TELUGU LETTER NAKAARA POLLU 0C60..0C61 ; Alphabetic # Lo [2] TELUGU LETTER VOCALIC RR..TELUGU LETTER VOCALIC LL 0C62..0C63 ; Alphabetic # Mn [2] TELUGU VOWEL SIGN VOCALIC L..TELUGU VOWEL SIGN VOCALIC LL 0C80 ; Alphabetic # Lo KANNADA SIGN SPACING CANDRABINDU @@ -490,7 +493,7 @@ FFE9..FFEC ; Math # Sm [4] HALFWIDTH LEFTWARDS ARROW..HALFWIDTH DOWNWARDS A 0CCA..0CCB ; Alphabetic # Mc [2] KANNADA VOWEL SIGN O..KANNADA VOWEL SIGN OO 0CCC ; Alphabetic # Mn KANNADA VOWEL SIGN AU 0CD5..0CD6 ; Alphabetic # Mc [2] KANNADA LENGTH MARK..KANNADA AI LENGTH MARK -0CDE ; Alphabetic # Lo KANNADA LETTER FA +0CDD..0CDE ; Alphabetic # Lo [2] KANNADA LETTER NAKAARA POLLU..KANNADA LETTER FA 0CE0..0CE1 ; Alphabetic # Lo [2] KANNADA LETTER VOCALIC RR..KANNADA LETTER VOCALIC LL 0CE2..0CE3 ; Alphabetic # Mn [2] KANNADA VOWEL SIGN VOCALIC L..KANNADA VOWEL SIGN VOCALIC LL 0CF1..0CF2 ; Alphabetic # Lo [2] KANNADA SIGN JIHVAMULIYA..KANNADA SIGN UPADHMANIYA @@ -614,10 +617,9 @@ FFE9..FFEC ; Math # Sm [4] HALFWIDTH LEFTWARDS ARROW..HALFWIDTH DOWNWARDS A 16A0..16EA ; Alphabetic # Lo [75] RUNIC LETTER FEHU FEOH FE F..RUNIC LETTER X 16EE..16F0 ; Alphabetic # Nl [3] RUNIC ARLAUG SYMBOL..RUNIC BELGTHOR SYMBOL 16F1..16F8 ; Alphabetic # Lo [8] RUNIC LETTER K..RUNIC LETTER FRANKS CASKET AESC -1700..170C ; Alphabetic # Lo [13] TAGALOG LETTER A..TAGALOG LETTER YA -170E..1711 ; Alphabetic # Lo [4] TAGALOG LETTER LA..TAGALOG LETTER HA +1700..1711 ; Alphabetic # Lo [18] TAGALOG LETTER A..TAGALOG LETTER HA 1712..1713 ; Alphabetic # Mn [2] TAGALOG VOWEL SIGN I..TAGALOG VOWEL SIGN U -1720..1731 ; Alphabetic # Lo [18] HANUNOO LETTER A..HANUNOO LETTER HA +171F..1731 ; Alphabetic # Lo [19] TAGALOG LETTER ARCHAIC RA..HANUNOO LETTER HA 1732..1733 ; Alphabetic # Mn [2] HANUNOO VOWEL SIGN I..HANUNOO VOWEL SIGN U 1740..1751 ; Alphabetic # Lo [18] BUHID LETTER A..BUHID LETTER HA 1752..1753 ; Alphabetic # Mn [2] BUHID VOWEL SIGN I..BUHID VOWEL SIGN U @@ -670,6 +672,7 @@ FFE9..FFEC ; Math # Sm [4] HALFWIDTH LEFTWARDS ARROW..HALFWIDTH DOWNWARDS A 1A73..1A74 ; Alphabetic # Mn [2] TAI THAM VOWEL SIGN OA ABOVE..TAI THAM SIGN MAI KANG 1AA7 ; Alphabetic # Lm TAI THAM SIGN MAI YAMOK 1ABF..1AC0 ; Alphabetic # Mn [2] COMBINING LATIN SMALL LETTER W BELOW..COMBINING LATIN SMALL LETTER TURNED W BELOW +1ACC..1ACE ; Alphabetic # Mn [3] COMBINING LATIN SMALL LETTER INSULAR G..COMBINING LATIN SMALL LETTER INSULAR T 1B00..1B03 ; Alphabetic # Mn [4] BALINESE SIGN ULU RICEM..BALINESE SIGN SURANG 1B04 ; Alphabetic # Mc BALINESE SIGN BISAH 1B05..1B33 ; Alphabetic # Lo [47] BALINESE LETTER AKARA..BALINESE LETTER HA @@ -680,7 +683,7 @@ FFE9..FFEC ; Math # Sm [4] HALFWIDTH LEFTWARDS ARROW..HALFWIDTH DOWNWARDS A 1B3D..1B41 ; Alphabetic # Mc [5] BALINESE VOWEL SIGN LA LENGA TEDUNG..BALINESE VOWEL SIGN TALING REPA TEDUNG 1B42 ; Alphabetic # Mn BALINESE VOWEL SIGN PEPET 1B43 ; Alphabetic # Mc BALINESE VOWEL SIGN PEPET TEDUNG -1B45..1B4B ; Alphabetic # Lo [7] BALINESE LETTER KAF SASAK..BALINESE LETTER ASYURA SASAK +1B45..1B4C ; Alphabetic # Lo [8] BALINESE LETTER KAF SASAK..BALINESE LETTER ARCHAIC JNYA 1B80..1B81 ; Alphabetic # Mn [2] SUNDANESE SIGN PANYECEK..SUNDANESE SIGN PANGLAYAR 1B82 ; Alphabetic # Mc SUNDANESE SIGN PANGWISAD 1B83..1BA0 ; Alphabetic # Lo [30] SUNDANESE LETTER A..SUNDANESE LETTER HA @@ -760,9 +763,7 @@ FFE9..FFEC ; Math # Sm [4] HALFWIDTH LEFTWARDS ARROW..HALFWIDTH DOWNWARDS A 2183..2184 ; Alphabetic # L& [2] ROMAN NUMERAL REVERSED ONE HUNDRED..LATIN SMALL LETTER REVERSED C 2185..2188 ; Alphabetic # Nl [4] ROMAN NUMERAL SIX LATE FORM..ROMAN NUMERAL ONE HUNDRED THOUSAND 24B6..24E9 ; Alphabetic # So [52] CIRCLED LATIN CAPITAL LETTER A..CIRCLED LATIN SMALL LETTER Z -2C00..2C2E ; Alphabetic # L& [47] GLAGOLITIC CAPITAL LETTER AZU..GLAGOLITIC CAPITAL LETTER LATINATE MYSLITE -2C30..2C5E ; Alphabetic # L& [47] GLAGOLITIC SMALL LETTER AZU..GLAGOLITIC SMALL LETTER LATINATE MYSLITE -2C60..2C7B ; Alphabetic # L& [28] LATIN CAPITAL LETTER L WITH DOUBLE BAR..LATIN LETTER SMALL CAPITAL TURNED E +2C00..2C7B ; Alphabetic # L& [124] GLAGOLITIC CAPITAL LETTER AZU..LATIN LETTER SMALL CAPITAL TURNED E 2C7C..2C7D ; Alphabetic # Lm [2] LATIN SUBSCRIPT SMALL LETTER J..MODIFIER LETTER CAPITAL V 2C7E..2CE4 ; Alphabetic # L& [103] LATIN CAPITAL LETTER S WITH SWASH TAIL..COPTIC SYMBOL KAI 2CEB..2CEE ; Alphabetic # L& [4] COPTIC CAPITAL LETTER CRYPTOGRAMMIC SHEI..COPTIC SMALL LETTER CRYPTOGRAMMIC GANGIA @@ -802,8 +803,7 @@ FFE9..FFEC ; Math # Sm [4] HALFWIDTH LEFTWARDS ARROW..HALFWIDTH DOWNWARDS A 31A0..31BF ; Alphabetic # Lo [32] BOPOMOFO LETTER BU..BOPOMOFO LETTER AH 31F0..31FF ; Alphabetic # Lo [16] KATAKANA LETTER SMALL KU..KATAKANA LETTER SMALL RO 3400..4DBF ; Alphabetic # Lo [6592] CJK UNIFIED IDEOGRAPH-3400..CJK UNIFIED IDEOGRAPH-4DBF -4E00..9FFC ; Alphabetic # Lo [20989] CJK UNIFIED IDEOGRAPH-4E00..CJK UNIFIED IDEOGRAPH-9FFC -A000..A014 ; Alphabetic # Lo [21] YI SYLLABLE IT..YI SYLLABLE E +4E00..A014 ; Alphabetic # Lo [21013] CJK UNIFIED IDEOGRAPH-4E00..YI SYLLABLE E A015 ; Alphabetic # Lm YI SYLLABLE WU A016..A48C ; Alphabetic # Lo [1143] YI SYLLABLE BIT..YI SYLLABLE YYR A4D0..A4F7 ; Alphabetic # Lo [40] LISU LETTER BA..LISU LETTER OE @@ -828,8 +828,11 @@ A771..A787 ; Alphabetic # L& [23] LATIN SMALL LETTER DUM..LATIN SMALL LETTER A788 ; Alphabetic # Lm MODIFIER LETTER LOW CIRCUMFLEX ACCENT A78B..A78E ; Alphabetic # L& [4] LATIN CAPITAL LETTER SALTILLO..LATIN SMALL LETTER L WITH RETROFLEX HOOK AND BELT A78F ; Alphabetic # Lo LATIN LETTER SINOLOGICAL DOT -A790..A7BF ; Alphabetic # L& [48] LATIN CAPITAL LETTER N WITH DESCENDER..LATIN SMALL LETTER GLOTTAL U -A7C2..A7CA ; Alphabetic # L& [9] LATIN CAPITAL LETTER ANGLICANA W..LATIN SMALL LETTER S WITH SHORT STROKE OVERLAY +A790..A7CA ; Alphabetic # L& [59] LATIN CAPITAL LETTER N WITH DESCENDER..LATIN SMALL LETTER S WITH SHORT STROKE OVERLAY +A7D0..A7D1 ; Alphabetic # L& [2] LATIN CAPITAL LETTER CLOSED INSULAR G..LATIN SMALL LETTER CLOSED INSULAR G +A7D3 ; Alphabetic # L& LATIN SMALL LETTER DOUBLE THORN +A7D5..A7D9 ; Alphabetic # L& [5] LATIN SMALL LETTER DOUBLE WYNN..LATIN SMALL LETTER SIGMOID S +A7F2..A7F4 ; Alphabetic # Lm [3] MODIFIER LETTER CAPITAL C..MODIFIER LETTER CAPITAL Q A7F5..A7F6 ; Alphabetic # L& [2] LATIN CAPITAL LETTER REVERSED HALF H..LATIN SMALL LETTER REVERSED HALF H A7F7 ; Alphabetic # Lo LATIN EPIGRAPHIC LETTER SIDEWAYS I A7F8..A7F9 ; Alphabetic # Lm [2] MODIFIER LETTER CAPITAL H WITH STROKE..MODIFIER LETTER SMALL LIGATURE OE @@ -985,9 +988,20 @@ FFDA..FFDC ; Alphabetic # Lo [3] HALFWIDTH HANGUL LETTER EU..HALFWIDTH HANG 104D8..104FB ; Alphabetic # L& [36] OSAGE SMALL LETTER A..OSAGE SMALL LETTER ZHA 10500..10527 ; Alphabetic # Lo [40] ELBASAN LETTER A..ELBASAN LETTER KHE 10530..10563 ; Alphabetic # Lo [52] CAUCASIAN ALBANIAN LETTER ALT..CAUCASIAN ALBANIAN LETTER KIW +10570..1057A ; Alphabetic # L& [11] VITHKUQI CAPITAL LETTER A..VITHKUQI CAPITAL LETTER GA +1057C..1058A ; Alphabetic # L& [15] VITHKUQI CAPITAL LETTER HA..VITHKUQI CAPITAL LETTER RE +1058C..10592 ; Alphabetic # L& [7] VITHKUQI CAPITAL LETTER SE..VITHKUQI CAPITAL LETTER XE +10594..10595 ; Alphabetic # L& [2] VITHKUQI CAPITAL LETTER Y..VITHKUQI CAPITAL LETTER ZE +10597..105A1 ; Alphabetic # L& [11] VITHKUQI SMALL LETTER A..VITHKUQI SMALL LETTER GA +105A3..105B1 ; Alphabetic # L& [15] VITHKUQI SMALL LETTER HA..VITHKUQI SMALL LETTER RE +105B3..105B9 ; Alphabetic # L& [7] VITHKUQI SMALL LETTER SE..VITHKUQI SMALL LETTER XE +105BB..105BC ; Alphabetic # L& [2] VITHKUQI SMALL LETTER Y..VITHKUQI SMALL LETTER ZE 10600..10736 ; Alphabetic # Lo [311] LINEAR A SIGN AB001..LINEAR A SIGN A664 10740..10755 ; Alphabetic # Lo [22] LINEAR A SIGN A701 A..LINEAR A SIGN A732 JE 10760..10767 ; Alphabetic # Lo [8] LINEAR A SIGN A800..LINEAR A SIGN A807 +10780..10785 ; Alphabetic # Lm [6] MODIFIER LETTER SMALL CAPITAL AA..MODIFIER LETTER SMALL B WITH HOOK +10787..107B0 ; Alphabetic # Lm [42] MODIFIER LETTER SMALL DZ DIGRAPH..MODIFIER LETTER SMALL V WITH RIGHT HOOK +107B2..107BA ; Alphabetic # Lm [9] MODIFIER LETTER SMALL CAPITAL Y..MODIFIER LETTER SMALL S WITH CURL 10800..10805 ; Alphabetic # Lo [6] CYPRIOT SYLLABLE A..CYPRIOT SYLLABLE JA 10808 ; Alphabetic # Lo CYPRIOT SYLLABLE JO 1080A..10835 ; Alphabetic # Lo [44] CYPRIOT SYLLABLE KA..CYPRIOT SYLLABLE WO @@ -1028,6 +1042,7 @@ FFDA..FFDC ; Alphabetic # Lo [3] HALFWIDTH HANGUL LETTER EU..HALFWIDTH HANG 10F00..10F1C ; Alphabetic # Lo [29] OLD SOGDIAN LETTER ALEPH..OLD SOGDIAN LETTER FINAL TAW WITH VERTICAL TAIL 10F27 ; Alphabetic # Lo OLD SOGDIAN LIGATURE AYIN-DALETH 10F30..10F45 ; Alphabetic # Lo [22] SOGDIAN LETTER ALEPH..SOGDIAN INDEPENDENT SHIN +10F70..10F81 ; Alphabetic # Lo [18] OLD UYGHUR LETTER ALEPH..OLD UYGHUR LETTER LESH 10FB0..10FC4 ; Alphabetic # Lo [21] CHORASMIAN LETTER ALEPH..CHORASMIAN LETTER TAW 10FE0..10FF6 ; Alphabetic # Lo [23] ELYMAIC LETTER ALEPH..ELYMAIC LIGATURE ZAYIN-YODH 11000 ; Alphabetic # Mc BRAHMI SIGN CANDRABINDU @@ -1035,11 +1050,15 @@ FFDA..FFDC ; Alphabetic # Lo [3] HALFWIDTH HANGUL LETTER EU..HALFWIDTH HANG 11002 ; Alphabetic # Mc BRAHMI SIGN VISARGA 11003..11037 ; Alphabetic # Lo [53] BRAHMI SIGN JIHVAMULIYA..BRAHMI LETTER OLD TAMIL NNNA 11038..11045 ; Alphabetic # Mn [14] BRAHMI VOWEL SIGN AA..BRAHMI VOWEL SIGN AU +11071..11072 ; Alphabetic # Lo [2] BRAHMI LETTER OLD TAMIL SHORT E..BRAHMI LETTER OLD TAMIL SHORT O +11073..11074 ; Alphabetic # Mn [2] BRAHMI VOWEL SIGN OLD TAMIL SHORT E..BRAHMI VOWEL SIGN OLD TAMIL SHORT O +11075 ; Alphabetic # Lo BRAHMI LETTER OLD TAMIL LLA 11082 ; Alphabetic # Mc KAITHI SIGN VISARGA 11083..110AF ; Alphabetic # Lo [45] KAITHI LETTER A..KAITHI LETTER HA 110B0..110B2 ; Alphabetic # Mc [3] KAITHI VOWEL SIGN AA..KAITHI VOWEL SIGN II 110B3..110B6 ; Alphabetic # Mn [4] KAITHI VOWEL SIGN U..KAITHI VOWEL SIGN AI 110B7..110B8 ; Alphabetic # Mc [2] KAITHI VOWEL SIGN O..KAITHI VOWEL SIGN AU +110C2 ; Alphabetic # Mn KAITHI VOWEL SIGN VOCALIC R 110D0..110E8 ; Alphabetic # Lo [25] SORA SOMPENG LETTER SAH..SORA SOMPENG LETTER MAE 11100..11102 ; Alphabetic # Mn [3] CHAKMA SIGN CANDRABINDU..CHAKMA SIGN VISARGA 11103..11126 ; Alphabetic # Lo [36] CHAKMA LETTER AA..CHAKMA LETTER HAA @@ -1144,6 +1163,7 @@ FFDA..FFDC ; Alphabetic # Lo [3] HALFWIDTH HANGUL LETTER EU..HALFWIDTH HANG 11722..11725 ; Alphabetic # Mn [4] AHOM VOWEL SIGN I..AHOM VOWEL SIGN UU 11726 ; Alphabetic # Mc AHOM VOWEL SIGN E 11727..1172A ; Alphabetic # Mn [4] AHOM VOWEL SIGN AW..AHOM VOWEL SIGN AM +11740..11746 ; Alphabetic # Lo [7] AHOM LETTER CA..AHOM LETTER LLA 11800..1182B ; Alphabetic # Lo [44] DOGRA LETTER A..DOGRA LETTER RRA 1182C..1182E ; Alphabetic # Mc [3] DOGRA VOWEL SIGN AA..DOGRA VOWEL SIGN II 1182F..11837 ; Alphabetic # Mn [9] DOGRA VOWEL SIGN U..DOGRA SIGN ANUSVARA @@ -1185,7 +1205,7 @@ FFDA..FFDC ; Alphabetic # Lo [3] HALFWIDTH HANGUL LETTER EU..HALFWIDTH HANG 11A8A..11A96 ; Alphabetic # Mn [13] SOYOMBO FINAL CONSONANT SIGN G..SOYOMBO SIGN ANUSVARA 11A97 ; Alphabetic # Mc SOYOMBO SIGN VISARGA 11A9D ; Alphabetic # Lo SOYOMBO MARK PLUTA -11AC0..11AF8 ; Alphabetic # Lo [57] PAU CIN HAU LETTER PA..PAU CIN HAU GLOTTAL STOP FINAL +11AB0..11AF8 ; Alphabetic # Lo [73] CANADIAN SYLLABICS NATTILIK HI..PAU CIN HAU GLOTTAL STOP FINAL 11C00..11C08 ; Alphabetic # Lo [9] BHAIKSUKI LETTER A..BHAIKSUKI LETTER VOCALIC L 11C0A..11C2E ; Alphabetic # Lo [37] BHAIKSUKI LETTER E..BHAIKSUKI LETTER HA 11C2F ; Alphabetic # Mc BHAIKSUKI VOWEL SIGN AA @@ -1227,10 +1247,12 @@ FFDA..FFDC ; Alphabetic # Lo [3] HALFWIDTH HANGUL LETTER EU..HALFWIDTH HANG 12000..12399 ; Alphabetic # Lo [922] CUNEIFORM SIGN A..CUNEIFORM SIGN U U 12400..1246E ; Alphabetic # Nl [111] CUNEIFORM NUMERIC SIGN TWO ASH..CUNEIFORM NUMERIC SIGN NINE U VARIANT FORM 12480..12543 ; Alphabetic # Lo [196] CUNEIFORM SIGN AB TIMES NUN TENU..CUNEIFORM SIGN ZU5 TIMES THREE DISH TENU +12F90..12FF0 ; Alphabetic # Lo [97] CYPRO-MINOAN SIGN CM001..CYPRO-MINOAN SIGN CM114 13000..1342E ; Alphabetic # Lo [1071] EGYPTIAN HIEROGLYPH A001..EGYPTIAN HIEROGLYPH AA032 14400..14646 ; Alphabetic # Lo [583] ANATOLIAN HIEROGLYPH A001..ANATOLIAN HIEROGLYPH A530 16800..16A38 ; Alphabetic # Lo [569] BAMUM LETTER PHASE-A NGKUE MFON..BAMUM LETTER PHASE-F VUEQ 16A40..16A5E ; Alphabetic # Lo [31] MRO LETTER TA..MRO LETTER TEK +16A70..16ABE ; Alphabetic # Lo [79] TANGSA LETTER OZ..TANGSA LETTER ZA 16AD0..16AED ; Alphabetic # Lo [30] BASSA VAH LETTER ENNI..BASSA VAH LETTER I 16B00..16B2F ; Alphabetic # Lo [48] PAHAWH HMONG VOWEL KEEB..PAHAWH HMONG CONSONANT CAU 16B40..16B43 ; Alphabetic # Lm [4] PAHAWH HMONG SIGN VOS SEEV..PAHAWH HMONG SIGN IB YAM @@ -1249,7 +1271,10 @@ FFDA..FFDC ; Alphabetic # Lo [3] HALFWIDTH HANGUL LETTER EU..HALFWIDTH HANG 17000..187F7 ; Alphabetic # Lo [6136] TANGUT IDEOGRAPH-17000..TANGUT IDEOGRAPH-187F7 18800..18CD5 ; Alphabetic # Lo [1238] TANGUT COMPONENT-001..KHITAN SMALL SCRIPT CHARACTER-18CD5 18D00..18D08 ; Alphabetic # Lo [9] TANGUT IDEOGRAPH-18D00..TANGUT IDEOGRAPH-18D08 -1B000..1B11E ; Alphabetic # Lo [287] KATAKANA LETTER ARCHAIC E..HENTAIGANA LETTER N-MU-MO-2 +1AFF0..1AFF3 ; Alphabetic # Lm [4] KATAKANA LETTER MINNAN TONE-2..KATAKANA LETTER MINNAN TONE-5 +1AFF5..1AFFB ; Alphabetic # Lm [7] KATAKANA LETTER MINNAN TONE-7..KATAKANA LETTER MINNAN NASALIZED TONE-5 +1AFFD..1AFFE ; Alphabetic # Lm [2] KATAKANA LETTER MINNAN NASALIZED TONE-7..KATAKANA LETTER MINNAN NASALIZED TONE-8 +1B000..1B122 ; Alphabetic # Lo [291] KATAKANA LETTER ARCHAIC E..KATAKANA LETTER ARCHAIC WU 1B150..1B152 ; Alphabetic # Lo [3] HIRAGANA LETTER SMALL WI..HIRAGANA LETTER SMALL WO 1B164..1B167 ; Alphabetic # Lo [4] KATAKANA LETTER SMALL WI..KATAKANA LETTER SMALL N 1B170..1B2FB ; Alphabetic # Lo [396] NUSHU CHARACTER-1B170..NUSHU CHARACTER-1B2FB @@ -1288,6 +1313,9 @@ FFDA..FFDC ; Alphabetic # Lo [3] HALFWIDTH HANGUL LETTER EU..HALFWIDTH HANG 1D78A..1D7A8 ; Alphabetic # L& [31] MATHEMATICAL SANS-SERIF BOLD EPSILON SYMBOL..MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL OMEGA 1D7AA..1D7C2 ; Alphabetic # L& [25] MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL ALPHA..MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL OMEGA 1D7C4..1D7CB ; Alphabetic # L& [8] MATHEMATICAL SANS-SERIF BOLD ITALIC EPSILON SYMBOL..MATHEMATICAL BOLD SMALL DIGAMMA +1DF00..1DF09 ; Alphabetic # L& [10] LATIN SMALL LETTER FENG DIGRAPH WITH TRILL..LATIN SMALL LETTER T WITH HOOK AND RETROFLEX HOOK +1DF0A ; Alphabetic # Lo LATIN LETTER RETROFLEX CLICK WITH RETROFLEX HOOK +1DF0B..1DF1E ; Alphabetic # L& [20] LATIN SMALL LETTER ESH WITH DOUBLE BAR..LATIN SMALL LETTER S WITH CURL 1E000..1E006 ; Alphabetic # Mn [7] COMBINING GLAGOLITIC LETTER AZU..COMBINING GLAGOLITIC LETTER ZHIVETE 1E008..1E018 ; Alphabetic # Mn [17] COMBINING GLAGOLITIC LETTER ZEMLJA..COMBINING GLAGOLITIC LETTER HERU 1E01B..1E021 ; Alphabetic # Mn [7] COMBINING GLAGOLITIC LETTER SHTA..COMBINING GLAGOLITIC LETTER YATI @@ -1296,7 +1324,12 @@ FFDA..FFDC ; Alphabetic # Lo [3] HALFWIDTH HANGUL LETTER EU..HALFWIDTH HANG 1E100..1E12C ; Alphabetic # Lo [45] NYIAKENG PUACHUE HMONG LETTER MA..NYIAKENG PUACHUE HMONG LETTER W 1E137..1E13D ; Alphabetic # Lm [7] NYIAKENG PUACHUE HMONG SIGN FOR PERSON..NYIAKENG PUACHUE HMONG SYLLABLE LENGTHENER 1E14E ; Alphabetic # Lo NYIAKENG PUACHUE HMONG LOGOGRAM NYAJ +1E290..1E2AD ; Alphabetic # Lo [30] TOTO LETTER PA..TOTO LETTER A 1E2C0..1E2EB ; Alphabetic # Lo [44] WANCHO LETTER AA..WANCHO LETTER YIH +1E7E0..1E7E6 ; Alphabetic # Lo [7] ETHIOPIC SYLLABLE HHYA..ETHIOPIC SYLLABLE HHYO +1E7E8..1E7EB ; Alphabetic # Lo [4] ETHIOPIC SYLLABLE GURAGE HHWA..ETHIOPIC SYLLABLE HHWE +1E7ED..1E7EE ; Alphabetic # Lo [2] ETHIOPIC SYLLABLE GURAGE MWI..ETHIOPIC SYLLABLE GURAGE MWEE +1E7F0..1E7FE ; Alphabetic # Lo [15] ETHIOPIC SYLLABLE GURAGE QWI..ETHIOPIC SYLLABLE GURAGE PWEE 1E800..1E8C4 ; Alphabetic # Lo [197] MENDE KIKAKUI SYLLABLE M001 KI..MENDE KIKAKUI SYLLABLE M060 NYON 1E900..1E943 ; Alphabetic # L& [68] ADLAM CAPITAL LETTER ALIF..ADLAM SMALL LETTER SHA 1E947 ; Alphabetic # Mn ADLAM HAMZA @@ -1337,15 +1370,15 @@ FFDA..FFDC ; Alphabetic # Lo [3] HALFWIDTH HANGUL LETTER EU..HALFWIDTH HANG 1F130..1F149 ; Alphabetic # So [26] SQUARED LATIN CAPITAL LETTER A..SQUARED LATIN CAPITAL LETTER Z 1F150..1F169 ; Alphabetic # So [26] NEGATIVE CIRCLED LATIN CAPITAL LETTER A..NEGATIVE CIRCLED LATIN CAPITAL LETTER Z 1F170..1F189 ; Alphabetic # So [26] NEGATIVE SQUARED LATIN CAPITAL LETTER A..NEGATIVE SQUARED LATIN CAPITAL LETTER Z -20000..2A6DD ; Alphabetic # Lo [42718] CJK UNIFIED IDEOGRAPH-20000..CJK UNIFIED IDEOGRAPH-2A6DD -2A700..2B734 ; Alphabetic # Lo [4149] CJK UNIFIED IDEOGRAPH-2A700..CJK UNIFIED IDEOGRAPH-2B734 +20000..2A6DF ; Alphabetic # Lo [42720] CJK UNIFIED IDEOGRAPH-20000..CJK UNIFIED IDEOGRAPH-2A6DF +2A700..2B738 ; Alphabetic # Lo [4153] CJK UNIFIED IDEOGRAPH-2A700..CJK UNIFIED IDEOGRAPH-2B738 2B740..2B81D ; Alphabetic # Lo [222] CJK UNIFIED IDEOGRAPH-2B740..CJK UNIFIED IDEOGRAPH-2B81D 2B820..2CEA1 ; Alphabetic # Lo [5762] CJK UNIFIED IDEOGRAPH-2B820..CJK UNIFIED IDEOGRAPH-2CEA1 2CEB0..2EBE0 ; Alphabetic # Lo [7473] CJK UNIFIED IDEOGRAPH-2CEB0..CJK UNIFIED IDEOGRAPH-2EBE0 2F800..2FA1D ; Alphabetic # Lo [542] CJK COMPATIBILITY IDEOGRAPH-2F800..CJK COMPATIBILITY IDEOGRAPH-2FA1D 30000..3134A ; Alphabetic # Lo [4939] CJK UNIFIED IDEOGRAPH-30000..CJK UNIFIED IDEOGRAPH-3134A -# Total code points: 132875 +# Total code points: 133396 # ================================================ @@ -1798,7 +1831,7 @@ FFDA..FFDC ; Alphabetic # Lo [3] HALFWIDTH HANGUL LETTER EU..HALFWIDTH HANG 2170..217F ; Lowercase # Nl [16] SMALL ROMAN NUMERAL ONE..SMALL ROMAN NUMERAL ONE THOUSAND 2184 ; Lowercase # L& LATIN SMALL LETTER REVERSED C 24D0..24E9 ; Lowercase # So [26] CIRCLED LATIN SMALL LETTER A..CIRCLED LATIN SMALL LETTER Z -2C30..2C5E ; Lowercase # L& [47] GLAGOLITIC SMALL LETTER AZU..GLAGOLITIC SMALL LETTER LATINATE MYSLITE +2C30..2C5F ; Lowercase # L& [48] GLAGOLITIC SMALL LETTER AZU..GLAGOLITIC SMALL LETTER CAUDATE CHRIVI 2C61 ; Lowercase # L& LATIN SMALL LETTER L WITH DOUBLE BAR 2C65..2C66 ; Lowercase # L& [2] LATIN SMALL LETTER A WITH STROKE..LATIN SMALL LETTER T WITH DIAGONAL STROKE 2C68 ; Lowercase # L& LATIN SMALL LETTER H WITH DESCENDER @@ -1970,9 +2003,15 @@ A7B9 ; Lowercase # L& LATIN SMALL LETTER U WITH STROKE A7BB ; Lowercase # L& LATIN SMALL LETTER GLOTTAL A A7BD ; Lowercase # L& LATIN SMALL LETTER GLOTTAL I A7BF ; Lowercase # L& LATIN SMALL LETTER GLOTTAL U +A7C1 ; Lowercase # L& LATIN SMALL LETTER OLD POLISH O A7C3 ; Lowercase # L& LATIN SMALL LETTER ANGLICANA W A7C8 ; Lowercase # L& LATIN SMALL LETTER D WITH SHORT STROKE OVERLAY A7CA ; Lowercase # L& LATIN SMALL LETTER S WITH SHORT STROKE OVERLAY +A7D1 ; Lowercase # L& LATIN SMALL LETTER CLOSED INSULAR G +A7D3 ; Lowercase # L& LATIN SMALL LETTER DOUBLE THORN +A7D5 ; Lowercase # L& LATIN SMALL LETTER DOUBLE WYNN +A7D7 ; Lowercase # L& LATIN SMALL LETTER MIDDLE SCOTS S +A7D9 ; Lowercase # L& LATIN SMALL LETTER SIGMOID S A7F6 ; Lowercase # L& LATIN SMALL LETTER REVERSED HALF H A7F8..A7F9 ; Lowercase # Lm [2] MODIFIER LETTER CAPITAL H WITH STROKE..MODIFIER LETTER SMALL LIGATURE OE A7FA ; Lowercase # L& LATIN LETTER SMALL CAPITAL TURNED M @@ -1985,6 +2024,14 @@ FB13..FB17 ; Lowercase # L& [5] ARMENIAN SMALL LIGATURE MEN NOW..ARMENIAN S FF41..FF5A ; Lowercase # L& [26] FULLWIDTH LATIN SMALL LETTER A..FULLWIDTH LATIN SMALL LETTER Z 10428..1044F ; Lowercase # L& [40] DESERET SMALL LETTER LONG I..DESERET SMALL LETTER EW 104D8..104FB ; Lowercase # L& [36] OSAGE SMALL LETTER A..OSAGE SMALL LETTER ZHA +10597..105A1 ; Lowercase # L& [11] VITHKUQI SMALL LETTER A..VITHKUQI SMALL LETTER GA +105A3..105B1 ; Lowercase # L& [15] VITHKUQI SMALL LETTER HA..VITHKUQI SMALL LETTER RE +105B3..105B9 ; Lowercase # L& [7] VITHKUQI SMALL LETTER SE..VITHKUQI SMALL LETTER XE +105BB..105BC ; Lowercase # L& [2] VITHKUQI SMALL LETTER Y..VITHKUQI SMALL LETTER ZE +10780 ; Lowercase # Lm MODIFIER LETTER SMALL CAPITAL AA +10783..10785 ; Lowercase # Lm [3] MODIFIER LETTER SMALL AE..MODIFIER LETTER SMALL B WITH HOOK +10787..107B0 ; Lowercase # Lm [42] MODIFIER LETTER SMALL DZ DIGRAPH..MODIFIER LETTER SMALL V WITH RIGHT HOOK +107B2..107BA ; Lowercase # Lm [9] MODIFIER LETTER SMALL CAPITAL Y..MODIFIER LETTER SMALL S WITH CURL 10CC0..10CF2 ; Lowercase # L& [51] OLD HUNGARIAN SMALL LETTER A..OLD HUNGARIAN SMALL LETTER US 118C0..118DF ; Lowercase # L& [32] WARANG CITI SMALL LETTER NGAA..WARANG CITI SMALL LETTER VIYO 16E60..16E7F ; Lowercase # L& [32] MEDEFAIDRIN SMALL LETTER M..MEDEFAIDRIN SMALL LETTER Y @@ -2016,9 +2063,11 @@ FF41..FF5A ; Lowercase # L& [26] FULLWIDTH LATIN SMALL LETTER A..FULLWIDTH L 1D7AA..1D7C2 ; Lowercase # L& [25] MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL ALPHA..MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL OMEGA 1D7C4..1D7C9 ; Lowercase # L& [6] MATHEMATICAL SANS-SERIF BOLD ITALIC EPSILON SYMBOL..MATHEMATICAL SANS-SERIF BOLD ITALIC PI SYMBOL 1D7CB ; Lowercase # L& MATHEMATICAL BOLD SMALL DIGAMMA +1DF00..1DF09 ; Lowercase # L& [10] LATIN SMALL LETTER FENG DIGRAPH WITH TRILL..LATIN SMALL LETTER T WITH HOOK AND RETROFLEX HOOK +1DF0B..1DF1E ; Lowercase # L& [20] LATIN SMALL LETTER ESH WITH DOUBLE BAR..LATIN SMALL LETTER S WITH CURL 1E922..1E943 ; Lowercase # L& [34] ADLAM SMALL LETTER ALIF..ADLAM SMALL LETTER SHA -# Total code points: 2344 +# Total code points: 2471 # ================================================ @@ -2458,7 +2507,7 @@ FF41..FF5A ; Lowercase # L& [26] FULLWIDTH LATIN SMALL LETTER A..FULLWIDTH L 2160..216F ; Uppercase # Nl [16] ROMAN NUMERAL ONE..ROMAN NUMERAL ONE THOUSAND 2183 ; Uppercase # L& ROMAN NUMERAL REVERSED ONE HUNDRED 24B6..24CF ; Uppercase # So [26] CIRCLED LATIN CAPITAL LETTER A..CIRCLED LATIN CAPITAL LETTER Z -2C00..2C2E ; Uppercase # L& [47] GLAGOLITIC CAPITAL LETTER AZU..GLAGOLITIC CAPITAL LETTER LATINATE MYSLITE +2C00..2C2F ; Uppercase # L& [48] GLAGOLITIC CAPITAL LETTER AZU..GLAGOLITIC CAPITAL LETTER CAUDATE CHRIVI 2C60 ; Uppercase # L& LATIN CAPITAL LETTER L WITH DOUBLE BAR 2C62..2C64 ; Uppercase # L& [3] LATIN CAPITAL LETTER L WITH MIDDLE TILDE..LATIN CAPITAL LETTER R WITH TAIL 2C67 ; Uppercase # L& LATIN CAPITAL LETTER H WITH DESCENDER @@ -2623,13 +2672,21 @@ A7B8 ; Uppercase # L& LATIN CAPITAL LETTER U WITH STROKE A7BA ; Uppercase # L& LATIN CAPITAL LETTER GLOTTAL A A7BC ; Uppercase # L& LATIN CAPITAL LETTER GLOTTAL I A7BE ; Uppercase # L& LATIN CAPITAL LETTER GLOTTAL U +A7C0 ; Uppercase # L& LATIN CAPITAL LETTER OLD POLISH O A7C2 ; Uppercase # L& LATIN CAPITAL LETTER ANGLICANA W A7C4..A7C7 ; Uppercase # L& [4] LATIN CAPITAL LETTER C WITH PALATAL HOOK..LATIN CAPITAL LETTER D WITH SHORT STROKE OVERLAY A7C9 ; Uppercase # L& LATIN CAPITAL LETTER S WITH SHORT STROKE OVERLAY +A7D0 ; Uppercase # L& LATIN CAPITAL LETTER CLOSED INSULAR G +A7D6 ; Uppercase # L& LATIN CAPITAL LETTER MIDDLE SCOTS S +A7D8 ; Uppercase # L& LATIN CAPITAL LETTER SIGMOID S A7F5 ; Uppercase # L& LATIN CAPITAL LETTER REVERSED HALF H FF21..FF3A ; Uppercase # L& [26] FULLWIDTH LATIN CAPITAL LETTER A..FULLWIDTH LATIN CAPITAL LETTER Z 10400..10427 ; Uppercase # L& [40] DESERET CAPITAL LETTER LONG I..DESERET CAPITAL LETTER EW 104B0..104D3 ; Uppercase # L& [36] OSAGE CAPITAL LETTER A..OSAGE CAPITAL LETTER ZHA +10570..1057A ; Uppercase # L& [11] VITHKUQI CAPITAL LETTER A..VITHKUQI CAPITAL LETTER GA +1057C..1058A ; Uppercase # L& [15] VITHKUQI CAPITAL LETTER HA..VITHKUQI CAPITAL LETTER RE +1058C..10592 ; Uppercase # L& [7] VITHKUQI CAPITAL LETTER SE..VITHKUQI CAPITAL LETTER XE +10594..10595 ; Uppercase # L& [2] VITHKUQI CAPITAL LETTER Y..VITHKUQI CAPITAL LETTER ZE 10C80..10CB2 ; Uppercase # L& [51] OLD HUNGARIAN CAPITAL LETTER A..OLD HUNGARIAN CAPITAL LETTER US 118A0..118BF ; Uppercase # L& [32] WARANG CITI CAPITAL LETTER NGAA..WARANG CITI CAPITAL LETTER VIYO 16E40..16E5F ; Uppercase # L& [32] MEDEFAIDRIN CAPITAL LETTER M..MEDEFAIDRIN CAPITAL LETTER Y @@ -2669,7 +2726,7 @@ FF21..FF3A ; Uppercase # L& [26] FULLWIDTH LATIN CAPITAL LETTER A..FULLWIDTH 1F150..1F169 ; Uppercase # So [26] NEGATIVE CIRCLED LATIN CAPITAL LETTER A..NEGATIVE CIRCLED LATIN CAPITAL LETTER Z 1F170..1F189 ; Uppercase # So [26] NEGATIVE SQUARED LATIN CAPITAL LETTER A..NEGATIVE SQUARED LATIN CAPITAL LETTER Z -# Total code points: 1911 +# Total code points: 1951 # ================================================ @@ -2761,9 +2818,7 @@ FF21..FF3A ; Uppercase # L& [26] FULLWIDTH LATIN CAPITAL LETTER A..FULLWIDTH 2160..217F ; Cased # Nl [32] ROMAN NUMERAL ONE..SMALL ROMAN NUMERAL ONE THOUSAND 2183..2184 ; Cased # L& [2] ROMAN NUMERAL REVERSED ONE HUNDRED..LATIN SMALL LETTER REVERSED C 24B6..24E9 ; Cased # So [52] CIRCLED LATIN CAPITAL LETTER A..CIRCLED LATIN SMALL LETTER Z -2C00..2C2E ; Cased # L& [47] GLAGOLITIC CAPITAL LETTER AZU..GLAGOLITIC CAPITAL LETTER LATINATE MYSLITE -2C30..2C5E ; Cased # L& [47] GLAGOLITIC SMALL LETTER AZU..GLAGOLITIC SMALL LETTER LATINATE MYSLITE -2C60..2C7B ; Cased # L& [28] LATIN CAPITAL LETTER L WITH DOUBLE BAR..LATIN LETTER SMALL CAPITAL TURNED E +2C00..2C7B ; Cased # L& [124] GLAGOLITIC CAPITAL LETTER AZU..LATIN LETTER SMALL CAPITAL TURNED E 2C7C..2C7D ; Cased # Lm [2] LATIN SUBSCRIPT SMALL LETTER J..MODIFIER LETTER CAPITAL V 2C7E..2CE4 ; Cased # L& [103] LATIN CAPITAL LETTER S WITH SWASH TAIL..COPTIC SYMBOL KAI 2CEB..2CEE ; Cased # L& [4] COPTIC CAPITAL LETTER CRYPTOGRAMMIC SHEI..COPTIC SMALL LETTER CRYPTOGRAMMIC GANGIA @@ -2778,8 +2833,10 @@ A722..A76F ; Cased # L& [78] LATIN CAPITAL LETTER EGYPTOLOGICAL ALEF..LATIN A770 ; Cased # Lm MODIFIER LETTER US A771..A787 ; Cased # L& [23] LATIN SMALL LETTER DUM..LATIN SMALL LETTER INSULAR T A78B..A78E ; Cased # L& [4] LATIN CAPITAL LETTER SALTILLO..LATIN SMALL LETTER L WITH RETROFLEX HOOK AND BELT -A790..A7BF ; Cased # L& [48] LATIN CAPITAL LETTER N WITH DESCENDER..LATIN SMALL LETTER GLOTTAL U -A7C2..A7CA ; Cased # L& [9] LATIN CAPITAL LETTER ANGLICANA W..LATIN SMALL LETTER S WITH SHORT STROKE OVERLAY +A790..A7CA ; Cased # L& [59] LATIN CAPITAL LETTER N WITH DESCENDER..LATIN SMALL LETTER S WITH SHORT STROKE OVERLAY +A7D0..A7D1 ; Cased # L& [2] LATIN CAPITAL LETTER CLOSED INSULAR G..LATIN SMALL LETTER CLOSED INSULAR G +A7D3 ; Cased # L& LATIN SMALL LETTER DOUBLE THORN +A7D5..A7D9 ; Cased # L& [5] LATIN SMALL LETTER DOUBLE WYNN..LATIN SMALL LETTER SIGMOID S A7F5..A7F6 ; Cased # L& [2] LATIN CAPITAL LETTER REVERSED HALF H..LATIN SMALL LETTER REVERSED HALF H A7F8..A7F9 ; Cased # Lm [2] MODIFIER LETTER CAPITAL H WITH STROKE..MODIFIER LETTER SMALL LIGATURE OE A7FA ; Cased # L& LATIN LETTER SMALL CAPITAL TURNED M @@ -2794,6 +2851,18 @@ FF41..FF5A ; Cased # L& [26] FULLWIDTH LATIN SMALL LETTER A..FULLWIDTH LATIN 10400..1044F ; Cased # L& [80] DESERET CAPITAL LETTER LONG I..DESERET SMALL LETTER EW 104B0..104D3 ; Cased # L& [36] OSAGE CAPITAL LETTER A..OSAGE CAPITAL LETTER ZHA 104D8..104FB ; Cased # L& [36] OSAGE SMALL LETTER A..OSAGE SMALL LETTER ZHA +10570..1057A ; Cased # L& [11] VITHKUQI CAPITAL LETTER A..VITHKUQI CAPITAL LETTER GA +1057C..1058A ; Cased # L& [15] VITHKUQI CAPITAL LETTER HA..VITHKUQI CAPITAL LETTER RE +1058C..10592 ; Cased # L& [7] VITHKUQI CAPITAL LETTER SE..VITHKUQI CAPITAL LETTER XE +10594..10595 ; Cased # L& [2] VITHKUQI CAPITAL LETTER Y..VITHKUQI CAPITAL LETTER ZE +10597..105A1 ; Cased # L& [11] VITHKUQI SMALL LETTER A..VITHKUQI SMALL LETTER GA +105A3..105B1 ; Cased # L& [15] VITHKUQI SMALL LETTER HA..VITHKUQI SMALL LETTER RE +105B3..105B9 ; Cased # L& [7] VITHKUQI SMALL LETTER SE..VITHKUQI SMALL LETTER XE +105BB..105BC ; Cased # L& [2] VITHKUQI SMALL LETTER Y..VITHKUQI SMALL LETTER ZE +10780 ; Cased # Lm MODIFIER LETTER SMALL CAPITAL AA +10783..10785 ; Cased # Lm [3] MODIFIER LETTER SMALL AE..MODIFIER LETTER SMALL B WITH HOOK +10787..107B0 ; Cased # Lm [42] MODIFIER LETTER SMALL DZ DIGRAPH..MODIFIER LETTER SMALL V WITH RIGHT HOOK +107B2..107BA ; Cased # Lm [9] MODIFIER LETTER SMALL CAPITAL Y..MODIFIER LETTER SMALL S WITH CURL 10C80..10CB2 ; Cased # L& [51] OLD HUNGARIAN CAPITAL LETTER A..OLD HUNGARIAN CAPITAL LETTER US 10CC0..10CF2 ; Cased # L& [51] OLD HUNGARIAN SMALL LETTER A..OLD HUNGARIAN SMALL LETTER US 118A0..118DF ; Cased # L& [64] WARANG CITI CAPITAL LETTER NGAA..WARANG CITI SMALL LETTER VIYO @@ -2828,12 +2897,14 @@ FF41..FF5A ; Cased # L& [26] FULLWIDTH LATIN SMALL LETTER A..FULLWIDTH LATIN 1D78A..1D7A8 ; Cased # L& [31] MATHEMATICAL SANS-SERIF BOLD EPSILON SYMBOL..MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL OMEGA 1D7AA..1D7C2 ; Cased # L& [25] MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL ALPHA..MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL OMEGA 1D7C4..1D7CB ; Cased # L& [8] MATHEMATICAL SANS-SERIF BOLD ITALIC EPSILON SYMBOL..MATHEMATICAL BOLD SMALL DIGAMMA +1DF00..1DF09 ; Cased # L& [10] LATIN SMALL LETTER FENG DIGRAPH WITH TRILL..LATIN SMALL LETTER T WITH HOOK AND RETROFLEX HOOK +1DF0B..1DF1E ; Cased # L& [20] LATIN SMALL LETTER ESH WITH DOUBLE BAR..LATIN SMALL LETTER S WITH CURL 1E900..1E943 ; Cased # L& [68] ADLAM CAPITAL LETTER ALIF..ADLAM SMALL LETTER SHA 1F130..1F149 ; Cased # So [26] SQUARED LATIN CAPITAL LETTER A..SQUARED LATIN CAPITAL LETTER Z 1F150..1F169 ; Cased # So [26] NEGATIVE CIRCLED LATIN CAPITAL LETTER A..NEGATIVE CIRCLED LATIN CAPITAL LETTER Z 1F170..1F189 ; Cased # So [26] NEGATIVE SQUARED LATIN CAPITAL LETTER A..NEGATIVE SQUARED LATIN CAPITAL LETTER Z -# Total code points: 4286 +# Total code points: 4453 # ================================================ @@ -2908,7 +2979,11 @@ FF41..FF5A ; Cased # L& [26] FULLWIDTH LATIN SMALL LETTER A..FULLWIDTH LATIN 0828 ; Case_Ignorable # Lm SAMARITAN MODIFIER LETTER I 0829..082D ; Case_Ignorable # Mn [5] SAMARITAN VOWEL SIGN LONG I..SAMARITAN MARK NEQUDAA 0859..085B ; Case_Ignorable # Mn [3] MANDAIC AFFRICATION MARK..MANDAIC GEMINATION MARK -08D3..08E1 ; Case_Ignorable # Mn [15] ARABIC SMALL LOW WAW..ARABIC SMALL HIGH SIGN SAFHA +0888 ; Case_Ignorable # Sk ARABIC RAISED ROUND DOT +0890..0891 ; Case_Ignorable # Cf [2] ARABIC POUND MARK ABOVE..ARABIC PIASTRE MARK ABOVE +0898..089F ; Case_Ignorable # Mn [8] ARABIC SMALL HIGH WORD AL-JUZ..ARABIC HALF MADDA OVER MADDA +08C9 ; Case_Ignorable # Lm ARABIC SMALL FARSI YEH +08CA..08E1 ; Case_Ignorable # Mn [24] ARABIC SMALL HIGH FARSI YEH..ARABIC SMALL HIGH SIGN SAFHA 08E2 ; Case_Ignorable # Cf ARABIC DISPUTED END OF AYAH 08E3..0902 ; Case_Ignorable # Mn [32] ARABIC TURNED DAMMA BELOW..DEVANAGARI SIGN ANUSVARA 093A ; Case_Ignorable # Mn DEVANAGARI VOWEL SIGN OE @@ -2951,6 +3026,7 @@ FF41..FF5A ; Cased # L& [26] FULLWIDTH LATIN SMALL LETTER A..FULLWIDTH LATIN 0BCD ; Case_Ignorable # Mn TAMIL SIGN VIRAMA 0C00 ; Case_Ignorable # Mn TELUGU SIGN COMBINING CANDRABINDU ABOVE 0C04 ; Case_Ignorable # Mn TELUGU SIGN COMBINING ANUSVARA ABOVE +0C3C ; Case_Ignorable # Mn TELUGU SIGN NUKTA 0C3E..0C40 ; Case_Ignorable # Mn [3] TELUGU VOWEL SIGN AA..TELUGU VOWEL SIGN II 0C46..0C48 ; Case_Ignorable # Mn [3] TELUGU VOWEL SIGN E..TELUGU VOWEL SIGN AI 0C4A..0C4D ; Case_Ignorable # Mn [4] TELUGU VOWEL SIGN O..TELUGU SIGN VIRAMA @@ -3003,7 +3079,7 @@ FF41..FF5A ; Cased # L& [26] FULLWIDTH LATIN SMALL LETTER A..FULLWIDTH LATIN 10FC ; Case_Ignorable # Lm MODIFIER LETTER GEORGIAN NAR 135D..135F ; Case_Ignorable # Mn [3] ETHIOPIC COMBINING GEMINATION AND VOWEL LENGTH MARK..ETHIOPIC COMBINING GEMINATION MARK 1712..1714 ; Case_Ignorable # Mn [3] TAGALOG VOWEL SIGN I..TAGALOG SIGN VIRAMA -1732..1734 ; Case_Ignorable # Mn [3] HANUNOO VOWEL SIGN I..HANUNOO SIGN PAMUDPOD +1732..1733 ; Case_Ignorable # Mn [2] HANUNOO VOWEL SIGN I..HANUNOO VOWEL SIGN U 1752..1753 ; Case_Ignorable # Mn [2] BUHID VOWEL SIGN I..BUHID VOWEL SIGN U 1772..1773 ; Case_Ignorable # Mn [2] TAGBANWA VOWEL SIGN I..TAGBANWA VOWEL SIGN U 17B4..17B5 ; Case_Ignorable # Mn [2] KHMER VOWEL INHERENT AQ..KHMER VOWEL INHERENT AA @@ -3014,6 +3090,7 @@ FF41..FF5A ; Cased # L& [26] FULLWIDTH LATIN SMALL LETTER A..FULLWIDTH LATIN 17DD ; Case_Ignorable # Mn KHMER SIGN ATTHACAN 180B..180D ; Case_Ignorable # Mn [3] MONGOLIAN FREE VARIATION SELECTOR ONE..MONGOLIAN FREE VARIATION SELECTOR THREE 180E ; Case_Ignorable # Cf MONGOLIAN VOWEL SEPARATOR +180F ; Case_Ignorable # Mn MONGOLIAN FREE VARIATION SELECTOR FOUR 1843 ; Case_Ignorable # Lm MONGOLIAN LETTER TODO LONG VOWEL SIGN 1885..1886 ; Case_Ignorable # Mn [2] MONGOLIAN LETTER ALI GALI BALUDA..MONGOLIAN LETTER ALI GALI THREE BALUDA 18A9 ; Case_Ignorable # Mn MONGOLIAN LETTER ALI GALI DAGALGA @@ -3033,7 +3110,7 @@ FF41..FF5A ; Cased # L& [26] FULLWIDTH LATIN SMALL LETTER A..FULLWIDTH LATIN 1AA7 ; Case_Ignorable # Lm TAI THAM SIGN MAI YAMOK 1AB0..1ABD ; Case_Ignorable # Mn [14] COMBINING DOUBLED CIRCUMFLEX ACCENT..COMBINING PARENTHESES BELOW 1ABE ; Case_Ignorable # Me COMBINING PARENTHESES OVERLAY -1ABF..1AC0 ; Case_Ignorable # Mn [2] COMBINING LATIN SMALL LETTER W BELOW..COMBINING LATIN SMALL LETTER TURNED W BELOW +1ABF..1ACE ; Case_Ignorable # Mn [16] COMBINING LATIN SMALL LETTER W BELOW..COMBINING LATIN SMALL LETTER INSULAR T 1B00..1B03 ; Case_Ignorable # Mn [4] BALINESE SIGN ULU RICEM..BALINESE SIGN SURANG 1B34 ; Case_Ignorable # Mn BALINESE SIGN REREKAN 1B36..1B3A ; Case_Ignorable # Mn [5] BALINESE VOWEL SIGN ULU..BALINESE VOWEL SIGN RA REPA @@ -3060,8 +3137,7 @@ FF41..FF5A ; Cased # L& [26] FULLWIDTH LATIN SMALL LETTER A..FULLWIDTH LATIN 1D2C..1D6A ; Case_Ignorable # Lm [63] MODIFIER LETTER CAPITAL A..GREEK SUBSCRIPT SMALL LETTER CHI 1D78 ; Case_Ignorable # Lm MODIFIER LETTER CYRILLIC EN 1D9B..1DBF ; Case_Ignorable # Lm [37] MODIFIER LETTER SMALL TURNED ALPHA..MODIFIER LETTER SMALL THETA -1DC0..1DF9 ; Case_Ignorable # Mn [58] COMBINING DOTTED GRAVE ACCENT..COMBINING WIDE INVERTED BRIDGE BELOW -1DFB..1DFF ; Case_Ignorable # Mn [5] COMBINING DELETION MARK..COMBINING RIGHT ARROWHEAD AND DOWN ARROWHEAD BELOW +1DC0..1DFF ; Case_Ignorable # Mn [64] COMBINING DOTTED GRAVE ACCENT..COMBINING RIGHT ARROWHEAD AND DOWN ARROWHEAD BELOW 1FBD ; Case_Ignorable # Sk GREEK KORONIS 1FBF..1FC1 ; Case_Ignorable # Sk [3] GREEK PSILI..GREEK DIALYTIKA AND PERISPOMENI 1FCD..1FCF ; Case_Ignorable # Sk [3] GREEK PSILI AND VARIA..GREEK PSILI AND PERISPOMENI @@ -3114,6 +3190,7 @@ A720..A721 ; Case_Ignorable # Sk [2] MODIFIER LETTER STRESS AND HIGH TONE.. A770 ; Case_Ignorable # Lm MODIFIER LETTER US A788 ; Case_Ignorable # Lm MODIFIER LETTER LOW CIRCUMFLEX ACCENT A789..A78A ; Case_Ignorable # Sk [2] MODIFIER LETTER COLON..MODIFIER LETTER SHORT EQUALS SIGN +A7F2..A7F4 ; Case_Ignorable # Lm [3] MODIFIER LETTER CAPITAL C..MODIFIER LETTER CAPITAL Q A7F8..A7F9 ; Case_Ignorable # Lm [2] MODIFIER LETTER CAPITAL H WITH STROKE..MODIFIER LETTER SMALL LIGATURE OE A802 ; Case_Ignorable # Mn SYLOTI NAGRI SIGN DVISVARA A806 ; Case_Ignorable # Mn SYLOTI NAGRI SIGN HASANTA @@ -3156,7 +3233,7 @@ ABE5 ; Case_Ignorable # Mn MEETEI MAYEK VOWEL SIGN ANAP ABE8 ; Case_Ignorable # Mn MEETEI MAYEK VOWEL SIGN UNAP ABED ; Case_Ignorable # Mn MEETEI MAYEK APUN IYEK FB1E ; Case_Ignorable # Mn HEBREW POINT JUDEO-SPANISH VARIKA -FBB2..FBC1 ; Case_Ignorable # Sk [16] ARABIC SYMBOL DOT ABOVE..ARABIC SYMBOL SMALL TAH BELOW +FBB2..FBC2 ; Case_Ignorable # Sk [17] ARABIC SYMBOL DOT ABOVE..ARABIC SYMBOL WASLA ABOVE FE00..FE0F ; Case_Ignorable # Mn [16] VARIATION SELECTOR-1..VARIATION SELECTOR-16 FE13 ; Case_Ignorable # Po PRESENTATION FORM FOR VERTICAL COLON FE20..FE2F ; Case_Ignorable # Mn [16] COMBINING LIGATURE LEFT HALF..COMBINING CYRILLIC TITLO RIGHT HALF @@ -3175,6 +3252,9 @@ FFF9..FFFB ; Case_Ignorable # Cf [3] INTERLINEAR ANNOTATION ANCHOR..INTERLI 101FD ; Case_Ignorable # Mn PHAISTOS DISC SIGN COMBINING OBLIQUE STROKE 102E0 ; Case_Ignorable # Mn COPTIC EPACT THOUSANDS MARK 10376..1037A ; Case_Ignorable # Mn [5] COMBINING OLD PERMIC LETTER AN..COMBINING OLD PERMIC LETTER SII +10780..10785 ; Case_Ignorable # Lm [6] MODIFIER LETTER SMALL CAPITAL AA..MODIFIER LETTER SMALL B WITH HOOK +10787..107B0 ; Case_Ignorable # Lm [42] MODIFIER LETTER SMALL DZ DIGRAPH..MODIFIER LETTER SMALL V WITH RIGHT HOOK +107B2..107BA ; Case_Ignorable # Lm [9] MODIFIER LETTER SMALL CAPITAL Y..MODIFIER LETTER SMALL S WITH CURL 10A01..10A03 ; Case_Ignorable # Mn [3] KHAROSHTHI VOWEL SIGN I..KHAROSHTHI VOWEL SIGN VOCALIC R 10A05..10A06 ; Case_Ignorable # Mn [2] KHAROSHTHI VOWEL SIGN E..KHAROSHTHI VOWEL SIGN O 10A0C..10A0F ; Case_Ignorable # Mn [4] KHAROSHTHI VOWEL LENGTH MARK..KHAROSHTHI SIGN VISARGA @@ -3184,12 +3264,16 @@ FFF9..FFFB ; Case_Ignorable # Cf [3] INTERLINEAR ANNOTATION ANCHOR..INTERLI 10D24..10D27 ; Case_Ignorable # Mn [4] HANIFI ROHINGYA SIGN HARBAHAY..HANIFI ROHINGYA SIGN TASSI 10EAB..10EAC ; Case_Ignorable # Mn [2] YEZIDI COMBINING HAMZA MARK..YEZIDI COMBINING MADDA MARK 10F46..10F50 ; Case_Ignorable # Mn [11] SOGDIAN COMBINING DOT BELOW..SOGDIAN COMBINING STROKE BELOW +10F82..10F85 ; Case_Ignorable # Mn [4] OLD UYGHUR COMBINING DOT ABOVE..OLD UYGHUR COMBINING TWO DOTS BELOW 11001 ; Case_Ignorable # Mn BRAHMI SIGN ANUSVARA 11038..11046 ; Case_Ignorable # Mn [15] BRAHMI VOWEL SIGN AA..BRAHMI VIRAMA +11070 ; Case_Ignorable # Mn BRAHMI SIGN OLD TAMIL VIRAMA +11073..11074 ; Case_Ignorable # Mn [2] BRAHMI VOWEL SIGN OLD TAMIL SHORT E..BRAHMI VOWEL SIGN OLD TAMIL SHORT O 1107F..11081 ; Case_Ignorable # Mn [3] BRAHMI NUMBER JOINER..KAITHI SIGN ANUSVARA 110B3..110B6 ; Case_Ignorable # Mn [4] KAITHI VOWEL SIGN U..KAITHI VOWEL SIGN AI 110B9..110BA ; Case_Ignorable # Mn [2] KAITHI SIGN VIRAMA..KAITHI SIGN NUKTA 110BD ; Case_Ignorable # Cf KAITHI NUMBER SIGN +110C2 ; Case_Ignorable # Mn KAITHI VOWEL SIGN VOCALIC R 110CD ; Case_Ignorable # Cf KAITHI NUMBER SIGN ABOVE 11100..11102 ; Case_Ignorable # Mn [3] CHAKMA SIGN CANDRABINDU..CHAKMA SIGN VISARGA 11127..1112B ; Case_Ignorable # Mn [5] CHAKMA VOWEL SIGN A..CHAKMA VOWEL SIGN UU @@ -3274,8 +3358,13 @@ FFF9..FFFB ; Case_Ignorable # Cf [3] INTERLINEAR ANNOTATION ANCHOR..INTERLI 16FE0..16FE1 ; Case_Ignorable # Lm [2] TANGUT ITERATION MARK..NUSHU ITERATION MARK 16FE3 ; Case_Ignorable # Lm OLD CHINESE ITERATION MARK 16FE4 ; Case_Ignorable # Mn KHITAN SMALL SCRIPT FILLER +1AFF0..1AFF3 ; Case_Ignorable # Lm [4] KATAKANA LETTER MINNAN TONE-2..KATAKANA LETTER MINNAN TONE-5 +1AFF5..1AFFB ; Case_Ignorable # Lm [7] KATAKANA LETTER MINNAN TONE-7..KATAKANA LETTER MINNAN NASALIZED TONE-5 +1AFFD..1AFFE ; Case_Ignorable # Lm [2] KATAKANA LETTER MINNAN NASALIZED TONE-7..KATAKANA LETTER MINNAN NASALIZED TONE-8 1BC9D..1BC9E ; Case_Ignorable # Mn [2] DUPLOYAN THICK LETTER SELECTOR..DUPLOYAN DOUBLE MARK 1BCA0..1BCA3 ; Case_Ignorable # Cf [4] SHORTHAND FORMAT LETTER OVERLAP..SHORTHAND FORMAT UP STEP +1CF00..1CF2D ; Case_Ignorable # Mn [46] ZNAMENNY COMBINING MARK GORAZDO NIZKO S KRYZHEM ON LEFT..ZNAMENNY COMBINING MARK KRYZH ON LEFT +1CF30..1CF46 ; Case_Ignorable # Mn [23] ZNAMENNY COMBINING TONAL RANGE MARK MRACHNO..ZNAMENNY PRIZNAK MODIFIER ROG 1D167..1D169 ; Case_Ignorable # Mn [3] MUSICAL SYMBOL COMBINING TREMOLO-1..MUSICAL SYMBOL COMBINING TREMOLO-3 1D173..1D17A ; Case_Ignorable # Cf [8] MUSICAL SYMBOL BEGIN BEAM..MUSICAL SYMBOL END PHRASE 1D17B..1D182 ; Case_Ignorable # Mn [8] MUSICAL SYMBOL COMBINING ACCENT..MUSICAL SYMBOL COMBINING LOURE @@ -3295,6 +3384,7 @@ FFF9..FFFB ; Case_Ignorable # Cf [3] INTERLINEAR ANNOTATION ANCHOR..INTERLI 1E026..1E02A ; Case_Ignorable # Mn [5] COMBINING GLAGOLITIC LETTER YO..COMBINING GLAGOLITIC LETTER FITA 1E130..1E136 ; Case_Ignorable # Mn [7] NYIAKENG PUACHUE HMONG TONE-B..NYIAKENG PUACHUE HMONG TONE-D 1E137..1E13D ; Case_Ignorable # Lm [7] NYIAKENG PUACHUE HMONG SIGN FOR PERSON..NYIAKENG PUACHUE HMONG SYLLABLE LENGTHENER +1E2AE ; Case_Ignorable # Mn TOTO SIGN RISING TONE 1E2EC..1E2EF ; Case_Ignorable # Mn [4] WANCHO TONE TUP..WANCHO TONE KOINI 1E8D0..1E8D6 ; Case_Ignorable # Mn [7] MENDE KIKAKUI COMBINING NUMBER TEENS..MENDE KIKAKUI COMBINING NUMBER MILLIONS 1E944..1E94A ; Case_Ignorable # Mn [7] ADLAM ALIF LENGTHENER..ADLAM NUKTA @@ -3304,7 +3394,7 @@ E0001 ; Case_Ignorable # Cf LANGUAGE TAG E0020..E007F ; Case_Ignorable # Cf [96] TAG SPACE..CANCEL TAG E0100..E01EF ; Case_Ignorable # Mn [240] VARIATION SELECTOR-17..VARIATION SELECTOR-256 -# Total code points: 2413 +# Total code points: 2602 # ================================================ @@ -3738,7 +3828,7 @@ E0100..E01EF ; Case_Ignorable # Mn [240] VARIATION SELECTOR-17..VARIATION SELEC 2160..216F ; Changes_When_Lowercased # Nl [16] ROMAN NUMERAL ONE..ROMAN NUMERAL ONE THOUSAND 2183 ; Changes_When_Lowercased # L& ROMAN NUMERAL REVERSED ONE HUNDRED 24B6..24CF ; Changes_When_Lowercased # So [26] CIRCLED LATIN CAPITAL LETTER A..CIRCLED LATIN CAPITAL LETTER Z -2C00..2C2E ; Changes_When_Lowercased # L& [47] GLAGOLITIC CAPITAL LETTER AZU..GLAGOLITIC CAPITAL LETTER LATINATE MYSLITE +2C00..2C2F ; Changes_When_Lowercased # L& [48] GLAGOLITIC CAPITAL LETTER AZU..GLAGOLITIC CAPITAL LETTER CAUDATE CHRIVI 2C60 ; Changes_When_Lowercased # L& LATIN CAPITAL LETTER L WITH DOUBLE BAR 2C62..2C64 ; Changes_When_Lowercased # L& [3] LATIN CAPITAL LETTER L WITH MIDDLE TILDE..LATIN CAPITAL LETTER R WITH TAIL 2C67 ; Changes_When_Lowercased # L& LATIN CAPITAL LETTER H WITH DESCENDER @@ -3903,19 +3993,27 @@ A7B8 ; Changes_When_Lowercased # L& LATIN CAPITAL LETTER U WITH S A7BA ; Changes_When_Lowercased # L& LATIN CAPITAL LETTER GLOTTAL A A7BC ; Changes_When_Lowercased # L& LATIN CAPITAL LETTER GLOTTAL I A7BE ; Changes_When_Lowercased # L& LATIN CAPITAL LETTER GLOTTAL U +A7C0 ; Changes_When_Lowercased # L& LATIN CAPITAL LETTER OLD POLISH O A7C2 ; Changes_When_Lowercased # L& LATIN CAPITAL LETTER ANGLICANA W A7C4..A7C7 ; Changes_When_Lowercased # L& [4] LATIN CAPITAL LETTER C WITH PALATAL HOOK..LATIN CAPITAL LETTER D WITH SHORT STROKE OVERLAY A7C9 ; Changes_When_Lowercased # L& LATIN CAPITAL LETTER S WITH SHORT STROKE OVERLAY +A7D0 ; Changes_When_Lowercased # L& LATIN CAPITAL LETTER CLOSED INSULAR G +A7D6 ; Changes_When_Lowercased # L& LATIN CAPITAL LETTER MIDDLE SCOTS S +A7D8 ; Changes_When_Lowercased # L& LATIN CAPITAL LETTER SIGMOID S A7F5 ; Changes_When_Lowercased # L& LATIN CAPITAL LETTER REVERSED HALF H FF21..FF3A ; Changes_When_Lowercased # L& [26] FULLWIDTH LATIN CAPITAL LETTER A..FULLWIDTH LATIN CAPITAL LETTER Z 10400..10427 ; Changes_When_Lowercased # L& [40] DESERET CAPITAL LETTER LONG I..DESERET CAPITAL LETTER EW 104B0..104D3 ; Changes_When_Lowercased # L& [36] OSAGE CAPITAL LETTER A..OSAGE CAPITAL LETTER ZHA +10570..1057A ; Changes_When_Lowercased # L& [11] VITHKUQI CAPITAL LETTER A..VITHKUQI CAPITAL LETTER GA +1057C..1058A ; Changes_When_Lowercased # L& [15] VITHKUQI CAPITAL LETTER HA..VITHKUQI CAPITAL LETTER RE +1058C..10592 ; Changes_When_Lowercased # L& [7] VITHKUQI CAPITAL LETTER SE..VITHKUQI CAPITAL LETTER XE +10594..10595 ; Changes_When_Lowercased # L& [2] VITHKUQI CAPITAL LETTER Y..VITHKUQI CAPITAL LETTER ZE 10C80..10CB2 ; Changes_When_Lowercased # L& [51] OLD HUNGARIAN CAPITAL LETTER A..OLD HUNGARIAN CAPITAL LETTER US 118A0..118BF ; Changes_When_Lowercased # L& [32] WARANG CITI CAPITAL LETTER NGAA..WARANG CITI CAPITAL LETTER VIYO 16E40..16E5F ; Changes_When_Lowercased # L& [32] MEDEFAIDRIN CAPITAL LETTER M..MEDEFAIDRIN CAPITAL LETTER Y 1E900..1E921 ; Changes_When_Lowercased # L& [34] ADLAM CAPITAL LETTER ALIF..ADLAM CAPITAL LETTER SHA -# Total code points: 1393 +# Total code points: 1433 # ================================================ @@ -4363,7 +4461,7 @@ FF21..FF3A ; Changes_When_Lowercased # L& [26] FULLWIDTH LATIN CAPITAL LETTE 2170..217F ; Changes_When_Uppercased # Nl [16] SMALL ROMAN NUMERAL ONE..SMALL ROMAN NUMERAL ONE THOUSAND 2184 ; Changes_When_Uppercased # L& LATIN SMALL LETTER REVERSED C 24D0..24E9 ; Changes_When_Uppercased # So [26] CIRCLED LATIN SMALL LETTER A..CIRCLED LATIN SMALL LETTER Z -2C30..2C5E ; Changes_When_Uppercased # L& [47] GLAGOLITIC SMALL LETTER AZU..GLAGOLITIC SMALL LETTER LATINATE MYSLITE +2C30..2C5F ; Changes_When_Uppercased # L& [48] GLAGOLITIC SMALL LETTER AZU..GLAGOLITIC SMALL LETTER CAUDATE CHRIVI 2C61 ; Changes_When_Uppercased # L& LATIN SMALL LETTER L WITH DOUBLE BAR 2C65..2C66 ; Changes_When_Uppercased # L& [2] LATIN SMALL LETTER A WITH STROKE..LATIN SMALL LETTER T WITH DIAGONAL STROKE 2C68 ; Changes_When_Uppercased # L& LATIN SMALL LETTER H WITH DESCENDER @@ -4528,9 +4626,13 @@ A7B9 ; Changes_When_Uppercased # L& LATIN SMALL LETTER U WITH STR A7BB ; Changes_When_Uppercased # L& LATIN SMALL LETTER GLOTTAL A A7BD ; Changes_When_Uppercased # L& LATIN SMALL LETTER GLOTTAL I A7BF ; Changes_When_Uppercased # L& LATIN SMALL LETTER GLOTTAL U +A7C1 ; Changes_When_Uppercased # L& LATIN SMALL LETTER OLD POLISH O A7C3 ; Changes_When_Uppercased # L& LATIN SMALL LETTER ANGLICANA W A7C8 ; Changes_When_Uppercased # L& LATIN SMALL LETTER D WITH SHORT STROKE OVERLAY A7CA ; Changes_When_Uppercased # L& LATIN SMALL LETTER S WITH SHORT STROKE OVERLAY +A7D1 ; Changes_When_Uppercased # L& LATIN SMALL LETTER CLOSED INSULAR G +A7D7 ; Changes_When_Uppercased # L& LATIN SMALL LETTER MIDDLE SCOTS S +A7D9 ; Changes_When_Uppercased # L& LATIN SMALL LETTER SIGMOID S A7F6 ; Changes_When_Uppercased # L& LATIN SMALL LETTER REVERSED HALF H AB53 ; Changes_When_Uppercased # L& LATIN SMALL LETTER CHI AB70..ABBF ; Changes_When_Uppercased # L& [80] CHEROKEE SMALL LETTER A..CHEROKEE SMALL LETTER YA @@ -4539,12 +4641,16 @@ FB13..FB17 ; Changes_When_Uppercased # L& [5] ARMENIAN SMALL LIGATURE MEN N FF41..FF5A ; Changes_When_Uppercased # L& [26] FULLWIDTH LATIN SMALL LETTER A..FULLWIDTH LATIN SMALL LETTER Z 10428..1044F ; Changes_When_Uppercased # L& [40] DESERET SMALL LETTER LONG I..DESERET SMALL LETTER EW 104D8..104FB ; Changes_When_Uppercased # L& [36] OSAGE SMALL LETTER A..OSAGE SMALL LETTER ZHA +10597..105A1 ; Changes_When_Uppercased # L& [11] VITHKUQI SMALL LETTER A..VITHKUQI SMALL LETTER GA +105A3..105B1 ; Changes_When_Uppercased # L& [15] VITHKUQI SMALL LETTER HA..VITHKUQI SMALL LETTER RE +105B3..105B9 ; Changes_When_Uppercased # L& [7] VITHKUQI SMALL LETTER SE..VITHKUQI SMALL LETTER XE +105BB..105BC ; Changes_When_Uppercased # L& [2] VITHKUQI SMALL LETTER Y..VITHKUQI SMALL LETTER ZE 10CC0..10CF2 ; Changes_When_Uppercased # L& [51] OLD HUNGARIAN SMALL LETTER A..OLD HUNGARIAN SMALL LETTER US 118C0..118DF ; Changes_When_Uppercased # L& [32] WARANG CITI SMALL LETTER NGAA..WARANG CITI SMALL LETTER VIYO 16E60..16E7F ; Changes_When_Uppercased # L& [32] MEDEFAIDRIN SMALL LETTER M..MEDEFAIDRIN SMALL LETTER Y 1E922..1E943 ; Changes_When_Uppercased # L& [34] ADLAM SMALL LETTER ALIF..ADLAM SMALL LETTER SHA -# Total code points: 1485 +# Total code points: 1525 # ================================================ @@ -4991,7 +5097,7 @@ FF41..FF5A ; Changes_When_Uppercased # L& [26] FULLWIDTH LATIN SMALL LETTER 2170..217F ; Changes_When_Titlecased # Nl [16] SMALL ROMAN NUMERAL ONE..SMALL ROMAN NUMERAL ONE THOUSAND 2184 ; Changes_When_Titlecased # L& LATIN SMALL LETTER REVERSED C 24D0..24E9 ; Changes_When_Titlecased # So [26] CIRCLED LATIN SMALL LETTER A..CIRCLED LATIN SMALL LETTER Z -2C30..2C5E ; Changes_When_Titlecased # L& [47] GLAGOLITIC SMALL LETTER AZU..GLAGOLITIC SMALL LETTER LATINATE MYSLITE +2C30..2C5F ; Changes_When_Titlecased # L& [48] GLAGOLITIC SMALL LETTER AZU..GLAGOLITIC SMALL LETTER CAUDATE CHRIVI 2C61 ; Changes_When_Titlecased # L& LATIN SMALL LETTER L WITH DOUBLE BAR 2C65..2C66 ; Changes_When_Titlecased # L& [2] LATIN SMALL LETTER A WITH STROKE..LATIN SMALL LETTER T WITH DIAGONAL STROKE 2C68 ; Changes_When_Titlecased # L& LATIN SMALL LETTER H WITH DESCENDER @@ -5156,9 +5262,13 @@ A7B9 ; Changes_When_Titlecased # L& LATIN SMALL LETTER U WITH STR A7BB ; Changes_When_Titlecased # L& LATIN SMALL LETTER GLOTTAL A A7BD ; Changes_When_Titlecased # L& LATIN SMALL LETTER GLOTTAL I A7BF ; Changes_When_Titlecased # L& LATIN SMALL LETTER GLOTTAL U +A7C1 ; Changes_When_Titlecased # L& LATIN SMALL LETTER OLD POLISH O A7C3 ; Changes_When_Titlecased # L& LATIN SMALL LETTER ANGLICANA W A7C8 ; Changes_When_Titlecased # L& LATIN SMALL LETTER D WITH SHORT STROKE OVERLAY A7CA ; Changes_When_Titlecased # L& LATIN SMALL LETTER S WITH SHORT STROKE OVERLAY +A7D1 ; Changes_When_Titlecased # L& LATIN SMALL LETTER CLOSED INSULAR G +A7D7 ; Changes_When_Titlecased # L& LATIN SMALL LETTER MIDDLE SCOTS S +A7D9 ; Changes_When_Titlecased # L& LATIN SMALL LETTER SIGMOID S A7F6 ; Changes_When_Titlecased # L& LATIN SMALL LETTER REVERSED HALF H AB53 ; Changes_When_Titlecased # L& LATIN SMALL LETTER CHI AB70..ABBF ; Changes_When_Titlecased # L& [80] CHEROKEE SMALL LETTER A..CHEROKEE SMALL LETTER YA @@ -5167,12 +5277,16 @@ FB13..FB17 ; Changes_When_Titlecased # L& [5] ARMENIAN SMALL LIGATURE MEN N FF41..FF5A ; Changes_When_Titlecased # L& [26] FULLWIDTH LATIN SMALL LETTER A..FULLWIDTH LATIN SMALL LETTER Z 10428..1044F ; Changes_When_Titlecased # L& [40] DESERET SMALL LETTER LONG I..DESERET SMALL LETTER EW 104D8..104FB ; Changes_When_Titlecased # L& [36] OSAGE SMALL LETTER A..OSAGE SMALL LETTER ZHA +10597..105A1 ; Changes_When_Titlecased # L& [11] VITHKUQI SMALL LETTER A..VITHKUQI SMALL LETTER GA +105A3..105B1 ; Changes_When_Titlecased # L& [15] VITHKUQI SMALL LETTER HA..VITHKUQI SMALL LETTER RE +105B3..105B9 ; Changes_When_Titlecased # L& [7] VITHKUQI SMALL LETTER SE..VITHKUQI SMALL LETTER XE +105BB..105BC ; Changes_When_Titlecased # L& [2] VITHKUQI SMALL LETTER Y..VITHKUQI SMALL LETTER ZE 10CC0..10CF2 ; Changes_When_Titlecased # L& [51] OLD HUNGARIAN SMALL LETTER A..OLD HUNGARIAN SMALL LETTER US 118C0..118DF ; Changes_When_Titlecased # L& [32] WARANG CITI SMALL LETTER NGAA..WARANG CITI SMALL LETTER VIYO 16E60..16E7F ; Changes_When_Titlecased # L& [32] MEDEFAIDRIN SMALL LETTER M..MEDEFAIDRIN SMALL LETTER Y 1E922..1E943 ; Changes_When_Titlecased # L& [34] ADLAM SMALL LETTER ALIF..ADLAM SMALL LETTER SHA -# Total code points: 1412 +# Total code points: 1452 # ================================================ @@ -5616,7 +5730,7 @@ FF41..FF5A ; Changes_When_Titlecased # L& [26] FULLWIDTH LATIN SMALL LETTER 2160..216F ; Changes_When_Casefolded # Nl [16] ROMAN NUMERAL ONE..ROMAN NUMERAL ONE THOUSAND 2183 ; Changes_When_Casefolded # L& ROMAN NUMERAL REVERSED ONE HUNDRED 24B6..24CF ; Changes_When_Casefolded # So [26] CIRCLED LATIN CAPITAL LETTER A..CIRCLED LATIN CAPITAL LETTER Z -2C00..2C2E ; Changes_When_Casefolded # L& [47] GLAGOLITIC CAPITAL LETTER AZU..GLAGOLITIC CAPITAL LETTER LATINATE MYSLITE +2C00..2C2F ; Changes_When_Casefolded # L& [48] GLAGOLITIC CAPITAL LETTER AZU..GLAGOLITIC CAPITAL LETTER CAUDATE CHRIVI 2C60 ; Changes_When_Casefolded # L& LATIN CAPITAL LETTER L WITH DOUBLE BAR 2C62..2C64 ; Changes_When_Casefolded # L& [3] LATIN CAPITAL LETTER L WITH MIDDLE TILDE..LATIN CAPITAL LETTER R WITH TAIL 2C67 ; Changes_When_Casefolded # L& LATIN CAPITAL LETTER H WITH DESCENDER @@ -5781,9 +5895,13 @@ A7B8 ; Changes_When_Casefolded # L& LATIN CAPITAL LETTER U WITH S A7BA ; Changes_When_Casefolded # L& LATIN CAPITAL LETTER GLOTTAL A A7BC ; Changes_When_Casefolded # L& LATIN CAPITAL LETTER GLOTTAL I A7BE ; Changes_When_Casefolded # L& LATIN CAPITAL LETTER GLOTTAL U +A7C0 ; Changes_When_Casefolded # L& LATIN CAPITAL LETTER OLD POLISH O A7C2 ; Changes_When_Casefolded # L& LATIN CAPITAL LETTER ANGLICANA W A7C4..A7C7 ; Changes_When_Casefolded # L& [4] LATIN CAPITAL LETTER C WITH PALATAL HOOK..LATIN CAPITAL LETTER D WITH SHORT STROKE OVERLAY A7C9 ; Changes_When_Casefolded # L& LATIN CAPITAL LETTER S WITH SHORT STROKE OVERLAY +A7D0 ; Changes_When_Casefolded # L& LATIN CAPITAL LETTER CLOSED INSULAR G +A7D6 ; Changes_When_Casefolded # L& LATIN CAPITAL LETTER MIDDLE SCOTS S +A7D8 ; Changes_When_Casefolded # L& LATIN CAPITAL LETTER SIGMOID S A7F5 ; Changes_When_Casefolded # L& LATIN CAPITAL LETTER REVERSED HALF H AB70..ABBF ; Changes_When_Casefolded # L& [80] CHEROKEE SMALL LETTER A..CHEROKEE SMALL LETTER YA FB00..FB06 ; Changes_When_Casefolded # L& [7] LATIN SMALL LIGATURE FF..LATIN SMALL LIGATURE ST @@ -5791,12 +5909,16 @@ FB13..FB17 ; Changes_When_Casefolded # L& [5] ARMENIAN SMALL LIGATURE MEN N FF21..FF3A ; Changes_When_Casefolded # L& [26] FULLWIDTH LATIN CAPITAL LETTER A..FULLWIDTH LATIN CAPITAL LETTER Z 10400..10427 ; Changes_When_Casefolded # L& [40] DESERET CAPITAL LETTER LONG I..DESERET CAPITAL LETTER EW 104B0..104D3 ; Changes_When_Casefolded # L& [36] OSAGE CAPITAL LETTER A..OSAGE CAPITAL LETTER ZHA +10570..1057A ; Changes_When_Casefolded # L& [11] VITHKUQI CAPITAL LETTER A..VITHKUQI CAPITAL LETTER GA +1057C..1058A ; Changes_When_Casefolded # L& [15] VITHKUQI CAPITAL LETTER HA..VITHKUQI CAPITAL LETTER RE +1058C..10592 ; Changes_When_Casefolded # L& [7] VITHKUQI CAPITAL LETTER SE..VITHKUQI CAPITAL LETTER XE +10594..10595 ; Changes_When_Casefolded # L& [2] VITHKUQI CAPITAL LETTER Y..VITHKUQI CAPITAL LETTER ZE 10C80..10CB2 ; Changes_When_Casefolded # L& [51] OLD HUNGARIAN CAPITAL LETTER A..OLD HUNGARIAN CAPITAL LETTER US 118A0..118BF ; Changes_When_Casefolded # L& [32] WARANG CITI CAPITAL LETTER NGAA..WARANG CITI CAPITAL LETTER VIYO 16E40..16E5F ; Changes_When_Casefolded # L& [32] MEDEFAIDRIN CAPITAL LETTER M..MEDEFAIDRIN CAPITAL LETTER Y 1E900..1E921 ; Changes_When_Casefolded # L& [34] ADLAM CAPITAL LETTER ALIF..ADLAM CAPITAL LETTER SHA -# Total code points: 1466 +# Total code points: 1506 # ================================================ @@ -5893,9 +6015,7 @@ FF21..FF3A ; Changes_When_Casefolded # L& [26] FULLWIDTH LATIN CAPITAL LETTE 2160..217F ; Changes_When_Casemapped # Nl [32] ROMAN NUMERAL ONE..SMALL ROMAN NUMERAL ONE THOUSAND 2183..2184 ; Changes_When_Casemapped # L& [2] ROMAN NUMERAL REVERSED ONE HUNDRED..LATIN SMALL LETTER REVERSED C 24B6..24E9 ; Changes_When_Casemapped # So [52] CIRCLED LATIN CAPITAL LETTER A..CIRCLED LATIN SMALL LETTER Z -2C00..2C2E ; Changes_When_Casemapped # L& [47] GLAGOLITIC CAPITAL LETTER AZU..GLAGOLITIC CAPITAL LETTER LATINATE MYSLITE -2C30..2C5E ; Changes_When_Casemapped # L& [47] GLAGOLITIC SMALL LETTER AZU..GLAGOLITIC SMALL LETTER LATINATE MYSLITE -2C60..2C70 ; Changes_When_Casemapped # L& [17] LATIN CAPITAL LETTER L WITH DOUBLE BAR..LATIN CAPITAL LETTER TURNED ALPHA +2C00..2C70 ; Changes_When_Casemapped # L& [113] GLAGOLITIC CAPITAL LETTER AZU..LATIN CAPITAL LETTER TURNED ALPHA 2C72..2C73 ; Changes_When_Casemapped # L& [2] LATIN CAPITAL LETTER W WITH HOOK..LATIN SMALL LETTER W WITH HOOK 2C75..2C76 ; Changes_When_Casemapped # L& [2] LATIN CAPITAL LETTER HALF H..LATIN SMALL LETTER HALF H 2C7E..2CE3 ; Changes_When_Casemapped # L& [102] LATIN CAPITAL LETTER S WITH SWASH TAIL..COPTIC SMALL LETTER OLD NUBIAN WAU @@ -5912,8 +6032,9 @@ A779..A787 ; Changes_When_Casemapped # L& [15] LATIN CAPITAL LETTER INSULAR A78B..A78D ; Changes_When_Casemapped # L& [3] LATIN CAPITAL LETTER SALTILLO..LATIN CAPITAL LETTER TURNED H A790..A794 ; Changes_When_Casemapped # L& [5] LATIN CAPITAL LETTER N WITH DESCENDER..LATIN SMALL LETTER C WITH PALATAL HOOK A796..A7AE ; Changes_When_Casemapped # L& [25] LATIN CAPITAL LETTER B WITH FLOURISH..LATIN CAPITAL LETTER SMALL CAPITAL I -A7B0..A7BF ; Changes_When_Casemapped # L& [16] LATIN CAPITAL LETTER TURNED K..LATIN SMALL LETTER GLOTTAL U -A7C2..A7CA ; Changes_When_Casemapped # L& [9] LATIN CAPITAL LETTER ANGLICANA W..LATIN SMALL LETTER S WITH SHORT STROKE OVERLAY +A7B0..A7CA ; Changes_When_Casemapped # L& [27] LATIN CAPITAL LETTER TURNED K..LATIN SMALL LETTER S WITH SHORT STROKE OVERLAY +A7D0..A7D1 ; Changes_When_Casemapped # L& [2] LATIN CAPITAL LETTER CLOSED INSULAR G..LATIN SMALL LETTER CLOSED INSULAR G +A7D6..A7D9 ; Changes_When_Casemapped # L& [4] LATIN CAPITAL LETTER MIDDLE SCOTS S..LATIN SMALL LETTER SIGMOID S A7F5..A7F6 ; Changes_When_Casemapped # L& [2] LATIN CAPITAL LETTER REVERSED HALF H..LATIN SMALL LETTER REVERSED HALF H AB53 ; Changes_When_Casemapped # L& LATIN SMALL LETTER CHI AB70..ABBF ; Changes_When_Casemapped # L& [80] CHEROKEE SMALL LETTER A..CHEROKEE SMALL LETTER YA @@ -5924,13 +6045,21 @@ FF41..FF5A ; Changes_When_Casemapped # L& [26] FULLWIDTH LATIN SMALL LETTER 10400..1044F ; Changes_When_Casemapped # L& [80] DESERET CAPITAL LETTER LONG I..DESERET SMALL LETTER EW 104B0..104D3 ; Changes_When_Casemapped # L& [36] OSAGE CAPITAL LETTER A..OSAGE CAPITAL LETTER ZHA 104D8..104FB ; Changes_When_Casemapped # L& [36] OSAGE SMALL LETTER A..OSAGE SMALL LETTER ZHA +10570..1057A ; Changes_When_Casemapped # L& [11] VITHKUQI CAPITAL LETTER A..VITHKUQI CAPITAL LETTER GA +1057C..1058A ; Changes_When_Casemapped # L& [15] VITHKUQI CAPITAL LETTER HA..VITHKUQI CAPITAL LETTER RE +1058C..10592 ; Changes_When_Casemapped # L& [7] VITHKUQI CAPITAL LETTER SE..VITHKUQI CAPITAL LETTER XE +10594..10595 ; Changes_When_Casemapped # L& [2] VITHKUQI CAPITAL LETTER Y..VITHKUQI CAPITAL LETTER ZE +10597..105A1 ; Changes_When_Casemapped # L& [11] VITHKUQI SMALL LETTER A..VITHKUQI SMALL LETTER GA +105A3..105B1 ; Changes_When_Casemapped # L& [15] VITHKUQI SMALL LETTER HA..VITHKUQI SMALL LETTER RE +105B3..105B9 ; Changes_When_Casemapped # L& [7] VITHKUQI SMALL LETTER SE..VITHKUQI SMALL LETTER XE +105BB..105BC ; Changes_When_Casemapped # L& [2] VITHKUQI SMALL LETTER Y..VITHKUQI SMALL LETTER ZE 10C80..10CB2 ; Changes_When_Casemapped # L& [51] OLD HUNGARIAN CAPITAL LETTER A..OLD HUNGARIAN CAPITAL LETTER US 10CC0..10CF2 ; Changes_When_Casemapped # L& [51] OLD HUNGARIAN SMALL LETTER A..OLD HUNGARIAN SMALL LETTER US 118A0..118DF ; Changes_When_Casemapped # L& [64] WARANG CITI CAPITAL LETTER NGAA..WARANG CITI SMALL LETTER VIYO 16E40..16E7F ; Changes_When_Casemapped # L& [64] MEDEFAIDRIN CAPITAL LETTER M..MEDEFAIDRIN SMALL LETTER Y 1E900..1E943 ; Changes_When_Casemapped # L& [68] ADLAM CAPITAL LETTER ALIF..ADLAM SMALL LETTER SHA -# Total code points: 2847 +# Total code points: 2927 # ================================================ @@ -6003,8 +6132,10 @@ FF41..FF5A ; Changes_When_Casemapped # L& [26] FULLWIDTH LATIN SMALL LETTER 0828 ; ID_Start # Lm SAMARITAN MODIFIER LETTER I 0840..0858 ; ID_Start # Lo [25] MANDAIC LETTER HALQA..MANDAIC LETTER AIN 0860..086A ; ID_Start # Lo [11] SYRIAC LETTER MALAYALAM NGA..SYRIAC LETTER MALAYALAM SSA -08A0..08B4 ; ID_Start # Lo [21] ARABIC LETTER BEH WITH SMALL V BELOW..ARABIC LETTER KAF WITH DOT BELOW -08B6..08C7 ; ID_Start # Lo [18] ARABIC LETTER BEH WITH SMALL MEEM ABOVE..ARABIC LETTER LAM WITH SMALL ARABIC LETTER TAH ABOVE +0870..0887 ; ID_Start # Lo [24] ARABIC LETTER ALEF WITH ATTACHED FATHA..ARABIC BASELINE ROUND DOT +0889..088E ; ID_Start # Lo [6] ARABIC LETTER NOON WITH INVERTED SMALL V..ARABIC VERTICAL TAIL +08A0..08C8 ; ID_Start # Lo [41] ARABIC LETTER BEH WITH SMALL V BELOW..ARABIC LETTER GRAF +08C9 ; ID_Start # Lm ARABIC SMALL FARSI YEH 0904..0939 ; ID_Start # Lo [54] DEVANAGARI LETTER SHORT A..DEVANAGARI LETTER HA 093D ; ID_Start # Lo DEVANAGARI SIGN AVAGRAHA 0950 ; ID_Start # Lo DEVANAGARI OM @@ -6070,6 +6201,7 @@ FF41..FF5A ; Changes_When_Casemapped # L& [26] FULLWIDTH LATIN SMALL LETTER 0C2A..0C39 ; ID_Start # Lo [16] TELUGU LETTER PA..TELUGU LETTER HA 0C3D ; ID_Start # Lo TELUGU SIGN AVAGRAHA 0C58..0C5A ; ID_Start # Lo [3] TELUGU LETTER TSA..TELUGU LETTER RRRA +0C5D ; ID_Start # Lo TELUGU LETTER NAKAARA POLLU 0C60..0C61 ; ID_Start # Lo [2] TELUGU LETTER VOCALIC RR..TELUGU LETTER VOCALIC LL 0C80 ; ID_Start # Lo KANNADA SIGN SPACING CANDRABINDU 0C85..0C8C ; ID_Start # Lo [8] KANNADA LETTER A..KANNADA LETTER VOCALIC L @@ -6078,7 +6210,7 @@ FF41..FF5A ; Changes_When_Casemapped # L& [26] FULLWIDTH LATIN SMALL LETTER 0CAA..0CB3 ; ID_Start # Lo [10] KANNADA LETTER PA..KANNADA LETTER LLA 0CB5..0CB9 ; ID_Start # Lo [5] KANNADA LETTER VA..KANNADA LETTER HA 0CBD ; ID_Start # Lo KANNADA SIGN AVAGRAHA -0CDE ; ID_Start # Lo KANNADA LETTER FA +0CDD..0CDE ; ID_Start # Lo [2] KANNADA LETTER NAKAARA POLLU..KANNADA LETTER FA 0CE0..0CE1 ; ID_Start # Lo [2] KANNADA LETTER VOCALIC RR..KANNADA LETTER VOCALIC LL 0CF1..0CF2 ; ID_Start # Lo [2] KANNADA SIGN JIHVAMULIYA..KANNADA SIGN UPADHMANIYA 0D04..0D0C ; ID_Start # Lo [9] MALAYALAM LETTER VEDIC ANUSVARA..MALAYALAM LETTER VOCALIC L @@ -6153,9 +6285,8 @@ FF41..FF5A ; Changes_When_Casemapped # L& [26] FULLWIDTH LATIN SMALL LETTER 16A0..16EA ; ID_Start # Lo [75] RUNIC LETTER FEHU FEOH FE F..RUNIC LETTER X 16EE..16F0 ; ID_Start # Nl [3] RUNIC ARLAUG SYMBOL..RUNIC BELGTHOR SYMBOL 16F1..16F8 ; ID_Start # Lo [8] RUNIC LETTER K..RUNIC LETTER FRANKS CASKET AESC -1700..170C ; ID_Start # Lo [13] TAGALOG LETTER A..TAGALOG LETTER YA -170E..1711 ; ID_Start # Lo [4] TAGALOG LETTER LA..TAGALOG LETTER HA -1720..1731 ; ID_Start # Lo [18] HANUNOO LETTER A..HANUNOO LETTER HA +1700..1711 ; ID_Start # Lo [18] TAGALOG LETTER A..TAGALOG LETTER HA +171F..1731 ; ID_Start # Lo [19] TAGALOG LETTER ARCHAIC RA..HANUNOO LETTER HA 1740..1751 ; ID_Start # Lo [18] BUHID LETTER A..BUHID LETTER HA 1760..176C ; ID_Start # Lo [13] TAGBANWA LETTER A..TAGBANWA LETTER YA 176E..1770 ; ID_Start # Lo [3] TAGBANWA LETTER LA..TAGBANWA LETTER SA @@ -6179,7 +6310,7 @@ FF41..FF5A ; Changes_When_Casemapped # L& [26] FULLWIDTH LATIN SMALL LETTER 1A20..1A54 ; ID_Start # Lo [53] TAI THAM LETTER HIGH KA..TAI THAM LETTER GREAT SA 1AA7 ; ID_Start # Lm TAI THAM SIGN MAI YAMOK 1B05..1B33 ; ID_Start # Lo [47] BALINESE LETTER AKARA..BALINESE LETTER HA -1B45..1B4B ; ID_Start # Lo [7] BALINESE LETTER KAF SASAK..BALINESE LETTER ASYURA SASAK +1B45..1B4C ; ID_Start # Lo [8] BALINESE LETTER KAF SASAK..BALINESE LETTER ARCHAIC JNYA 1B83..1BA0 ; ID_Start # Lo [30] SUNDANESE LETTER A..SUNDANESE LETTER HA 1BAE..1BAF ; ID_Start # Lo [2] SUNDANESE LETTER KHA..SUNDANESE LETTER SYA 1BBA..1BE5 ; ID_Start # Lo [44] SUNDANESE AVAGRAHA..BATAK LETTER U @@ -6242,9 +6373,7 @@ FF41..FF5A ; Changes_When_Casemapped # L& [26] FULLWIDTH LATIN SMALL LETTER 2160..2182 ; ID_Start # Nl [35] ROMAN NUMERAL ONE..ROMAN NUMERAL TEN THOUSAND 2183..2184 ; ID_Start # L& [2] ROMAN NUMERAL REVERSED ONE HUNDRED..LATIN SMALL LETTER REVERSED C 2185..2188 ; ID_Start # Nl [4] ROMAN NUMERAL SIX LATE FORM..ROMAN NUMERAL ONE HUNDRED THOUSAND -2C00..2C2E ; ID_Start # L& [47] GLAGOLITIC CAPITAL LETTER AZU..GLAGOLITIC CAPITAL LETTER LATINATE MYSLITE -2C30..2C5E ; ID_Start # L& [47] GLAGOLITIC SMALL LETTER AZU..GLAGOLITIC SMALL LETTER LATINATE MYSLITE -2C60..2C7B ; ID_Start # L& [28] LATIN CAPITAL LETTER L WITH DOUBLE BAR..LATIN LETTER SMALL CAPITAL TURNED E +2C00..2C7B ; ID_Start # L& [124] GLAGOLITIC CAPITAL LETTER AZU..LATIN LETTER SMALL CAPITAL TURNED E 2C7C..2C7D ; ID_Start # Lm [2] LATIN SUBSCRIPT SMALL LETTER J..MODIFIER LETTER CAPITAL V 2C7E..2CE4 ; ID_Start # L& [103] LATIN CAPITAL LETTER S WITH SWASH TAIL..COPTIC SYMBOL KAI 2CEB..2CEE ; ID_Start # L& [4] COPTIC CAPITAL LETTER CRYPTOGRAMMIC SHEI..COPTIC SMALL LETTER CRYPTOGRAMMIC GANGIA @@ -6283,8 +6412,7 @@ FF41..FF5A ; Changes_When_Casemapped # L& [26] FULLWIDTH LATIN SMALL LETTER 31A0..31BF ; ID_Start # Lo [32] BOPOMOFO LETTER BU..BOPOMOFO LETTER AH 31F0..31FF ; ID_Start # Lo [16] KATAKANA LETTER SMALL KU..KATAKANA LETTER SMALL RO 3400..4DBF ; ID_Start # Lo [6592] CJK UNIFIED IDEOGRAPH-3400..CJK UNIFIED IDEOGRAPH-4DBF -4E00..9FFC ; ID_Start # Lo [20989] CJK UNIFIED IDEOGRAPH-4E00..CJK UNIFIED IDEOGRAPH-9FFC -A000..A014 ; ID_Start # Lo [21] YI SYLLABLE IT..YI SYLLABLE E +4E00..A014 ; ID_Start # Lo [21013] CJK UNIFIED IDEOGRAPH-4E00..YI SYLLABLE E A015 ; ID_Start # Lm YI SYLLABLE WU A016..A48C ; ID_Start # Lo [1143] YI SYLLABLE BIT..YI SYLLABLE YYR A4D0..A4F7 ; ID_Start # Lo [40] LISU LETTER BA..LISU LETTER OE @@ -6307,8 +6435,11 @@ A771..A787 ; ID_Start # L& [23] LATIN SMALL LETTER DUM..LATIN SMALL LETTER I A788 ; ID_Start # Lm MODIFIER LETTER LOW CIRCUMFLEX ACCENT A78B..A78E ; ID_Start # L& [4] LATIN CAPITAL LETTER SALTILLO..LATIN SMALL LETTER L WITH RETROFLEX HOOK AND BELT A78F ; ID_Start # Lo LATIN LETTER SINOLOGICAL DOT -A790..A7BF ; ID_Start # L& [48] LATIN CAPITAL LETTER N WITH DESCENDER..LATIN SMALL LETTER GLOTTAL U -A7C2..A7CA ; ID_Start # L& [9] LATIN CAPITAL LETTER ANGLICANA W..LATIN SMALL LETTER S WITH SHORT STROKE OVERLAY +A790..A7CA ; ID_Start # L& [59] LATIN CAPITAL LETTER N WITH DESCENDER..LATIN SMALL LETTER S WITH SHORT STROKE OVERLAY +A7D0..A7D1 ; ID_Start # L& [2] LATIN CAPITAL LETTER CLOSED INSULAR G..LATIN SMALL LETTER CLOSED INSULAR G +A7D3 ; ID_Start # L& LATIN SMALL LETTER DOUBLE THORN +A7D5..A7D9 ; ID_Start # L& [5] LATIN SMALL LETTER DOUBLE WYNN..LATIN SMALL LETTER SIGMOID S +A7F2..A7F4 ; ID_Start # Lm [3] MODIFIER LETTER CAPITAL C..MODIFIER LETTER CAPITAL Q A7F5..A7F6 ; ID_Start # L& [2] LATIN CAPITAL LETTER REVERSED HALF H..LATIN SMALL LETTER REVERSED HALF H A7F7 ; ID_Start # Lo LATIN EPIGRAPHIC LETTER SIDEWAYS I A7F8..A7F9 ; ID_Start # Lm [2] MODIFIER LETTER CAPITAL H WITH STROKE..MODIFIER LETTER SMALL LIGATURE OE @@ -6418,9 +6549,20 @@ FFDA..FFDC ; ID_Start # Lo [3] HALFWIDTH HANGUL LETTER EU..HALFWIDTH HANGUL 104D8..104FB ; ID_Start # L& [36] OSAGE SMALL LETTER A..OSAGE SMALL LETTER ZHA 10500..10527 ; ID_Start # Lo [40] ELBASAN LETTER A..ELBASAN LETTER KHE 10530..10563 ; ID_Start # Lo [52] CAUCASIAN ALBANIAN LETTER ALT..CAUCASIAN ALBANIAN LETTER KIW +10570..1057A ; ID_Start # L& [11] VITHKUQI CAPITAL LETTER A..VITHKUQI CAPITAL LETTER GA +1057C..1058A ; ID_Start # L& [15] VITHKUQI CAPITAL LETTER HA..VITHKUQI CAPITAL LETTER RE +1058C..10592 ; ID_Start # L& [7] VITHKUQI CAPITAL LETTER SE..VITHKUQI CAPITAL LETTER XE +10594..10595 ; ID_Start # L& [2] VITHKUQI CAPITAL LETTER Y..VITHKUQI CAPITAL LETTER ZE +10597..105A1 ; ID_Start # L& [11] VITHKUQI SMALL LETTER A..VITHKUQI SMALL LETTER GA +105A3..105B1 ; ID_Start # L& [15] VITHKUQI SMALL LETTER HA..VITHKUQI SMALL LETTER RE +105B3..105B9 ; ID_Start # L& [7] VITHKUQI SMALL LETTER SE..VITHKUQI SMALL LETTER XE +105BB..105BC ; ID_Start # L& [2] VITHKUQI SMALL LETTER Y..VITHKUQI SMALL LETTER ZE 10600..10736 ; ID_Start # Lo [311] LINEAR A SIGN AB001..LINEAR A SIGN A664 10740..10755 ; ID_Start # Lo [22] LINEAR A SIGN A701 A..LINEAR A SIGN A732 JE 10760..10767 ; ID_Start # Lo [8] LINEAR A SIGN A800..LINEAR A SIGN A807 +10780..10785 ; ID_Start # Lm [6] MODIFIER LETTER SMALL CAPITAL AA..MODIFIER LETTER SMALL B WITH HOOK +10787..107B0 ; ID_Start # Lm [42] MODIFIER LETTER SMALL DZ DIGRAPH..MODIFIER LETTER SMALL V WITH RIGHT HOOK +107B2..107BA ; ID_Start # Lm [9] MODIFIER LETTER SMALL CAPITAL Y..MODIFIER LETTER SMALL S WITH CURL 10800..10805 ; ID_Start # Lo [6] CYPRIOT SYLLABLE A..CYPRIOT SYLLABLE JA 10808 ; ID_Start # Lo CYPRIOT SYLLABLE JO 1080A..10835 ; ID_Start # Lo [44] CYPRIOT SYLLABLE KA..CYPRIOT SYLLABLE WO @@ -6456,9 +6598,12 @@ FFDA..FFDC ; ID_Start # Lo [3] HALFWIDTH HANGUL LETTER EU..HALFWIDTH HANGUL 10F00..10F1C ; ID_Start # Lo [29] OLD SOGDIAN LETTER ALEPH..OLD SOGDIAN LETTER FINAL TAW WITH VERTICAL TAIL 10F27 ; ID_Start # Lo OLD SOGDIAN LIGATURE AYIN-DALETH 10F30..10F45 ; ID_Start # Lo [22] SOGDIAN LETTER ALEPH..SOGDIAN INDEPENDENT SHIN +10F70..10F81 ; ID_Start # Lo [18] OLD UYGHUR LETTER ALEPH..OLD UYGHUR LETTER LESH 10FB0..10FC4 ; ID_Start # Lo [21] CHORASMIAN LETTER ALEPH..CHORASMIAN LETTER TAW 10FE0..10FF6 ; ID_Start # Lo [23] ELYMAIC LETTER ALEPH..ELYMAIC LIGATURE ZAYIN-YODH 11003..11037 ; ID_Start # Lo [53] BRAHMI SIGN JIHVAMULIYA..BRAHMI LETTER OLD TAMIL NNNA +11071..11072 ; ID_Start # Lo [2] BRAHMI LETTER OLD TAMIL SHORT E..BRAHMI LETTER OLD TAMIL SHORT O +11075 ; ID_Start # Lo BRAHMI LETTER OLD TAMIL LLA 11083..110AF ; ID_Start # Lo [45] KAITHI LETTER A..KAITHI LETTER HA 110D0..110E8 ; ID_Start # Lo [25] SORA SOMPENG LETTER SAH..SORA SOMPENG LETTER MAE 11103..11126 ; ID_Start # Lo [36] CHAKMA LETTER AA..CHAKMA LETTER HAA @@ -6500,6 +6645,7 @@ FFDA..FFDC ; ID_Start # Lo [3] HALFWIDTH HANGUL LETTER EU..HALFWIDTH HANGUL 11680..116AA ; ID_Start # Lo [43] TAKRI LETTER A..TAKRI LETTER RRA 116B8 ; ID_Start # Lo TAKRI LETTER ARCHAIC KHA 11700..1171A ; ID_Start # Lo [27] AHOM LETTER KA..AHOM LETTER ALTERNATE BA +11740..11746 ; ID_Start # Lo [7] AHOM LETTER CA..AHOM LETTER LLA 11800..1182B ; ID_Start # Lo [44] DOGRA LETTER A..DOGRA LETTER RRA 118A0..118DF ; ID_Start # L& [64] WARANG CITI CAPITAL LETTER NGAA..WARANG CITI SMALL LETTER VIYO 118FF..11906 ; ID_Start # Lo [8] WARANG CITI OM..DIVES AKURU LETTER E @@ -6519,7 +6665,7 @@ FFDA..FFDC ; ID_Start # Lo [3] HALFWIDTH HANGUL LETTER EU..HALFWIDTH HANGUL 11A50 ; ID_Start # Lo SOYOMBO LETTER A 11A5C..11A89 ; ID_Start # Lo [46] SOYOMBO LETTER KA..SOYOMBO CLUSTER-INITIAL LETTER SA 11A9D ; ID_Start # Lo SOYOMBO MARK PLUTA -11AC0..11AF8 ; ID_Start # Lo [57] PAU CIN HAU LETTER PA..PAU CIN HAU GLOTTAL STOP FINAL +11AB0..11AF8 ; ID_Start # Lo [73] CANADIAN SYLLABICS NATTILIK HI..PAU CIN HAU GLOTTAL STOP FINAL 11C00..11C08 ; ID_Start # Lo [9] BHAIKSUKI LETTER A..BHAIKSUKI LETTER VOCALIC L 11C0A..11C2E ; ID_Start # Lo [37] BHAIKSUKI LETTER E..BHAIKSUKI LETTER HA 11C40 ; ID_Start # Lo BHAIKSUKI SIGN AVAGRAHA @@ -6537,10 +6683,12 @@ FFDA..FFDC ; ID_Start # Lo [3] HALFWIDTH HANGUL LETTER EU..HALFWIDTH HANGUL 12000..12399 ; ID_Start # Lo [922] CUNEIFORM SIGN A..CUNEIFORM SIGN U U 12400..1246E ; ID_Start # Nl [111] CUNEIFORM NUMERIC SIGN TWO ASH..CUNEIFORM NUMERIC SIGN NINE U VARIANT FORM 12480..12543 ; ID_Start # Lo [196] CUNEIFORM SIGN AB TIMES NUN TENU..CUNEIFORM SIGN ZU5 TIMES THREE DISH TENU +12F90..12FF0 ; ID_Start # Lo [97] CYPRO-MINOAN SIGN CM001..CYPRO-MINOAN SIGN CM114 13000..1342E ; ID_Start # Lo [1071] EGYPTIAN HIEROGLYPH A001..EGYPTIAN HIEROGLYPH AA032 14400..14646 ; ID_Start # Lo [583] ANATOLIAN HIEROGLYPH A001..ANATOLIAN HIEROGLYPH A530 16800..16A38 ; ID_Start # Lo [569] BAMUM LETTER PHASE-A NGKUE MFON..BAMUM LETTER PHASE-F VUEQ 16A40..16A5E ; ID_Start # Lo [31] MRO LETTER TA..MRO LETTER TEK +16A70..16ABE ; ID_Start # Lo [79] TANGSA LETTER OZ..TANGSA LETTER ZA 16AD0..16AED ; ID_Start # Lo [30] BASSA VAH LETTER ENNI..BASSA VAH LETTER I 16B00..16B2F ; ID_Start # Lo [48] PAHAWH HMONG VOWEL KEEB..PAHAWH HMONG CONSONANT CAU 16B40..16B43 ; ID_Start # Lm [4] PAHAWH HMONG SIGN VOS SEEV..PAHAWH HMONG SIGN IB YAM @@ -6555,7 +6703,10 @@ FFDA..FFDC ; ID_Start # Lo [3] HALFWIDTH HANGUL LETTER EU..HALFWIDTH HANGUL 17000..187F7 ; ID_Start # Lo [6136] TANGUT IDEOGRAPH-17000..TANGUT IDEOGRAPH-187F7 18800..18CD5 ; ID_Start # Lo [1238] TANGUT COMPONENT-001..KHITAN SMALL SCRIPT CHARACTER-18CD5 18D00..18D08 ; ID_Start # Lo [9] TANGUT IDEOGRAPH-18D00..TANGUT IDEOGRAPH-18D08 -1B000..1B11E ; ID_Start # Lo [287] KATAKANA LETTER ARCHAIC E..HENTAIGANA LETTER N-MU-MO-2 +1AFF0..1AFF3 ; ID_Start # Lm [4] KATAKANA LETTER MINNAN TONE-2..KATAKANA LETTER MINNAN TONE-5 +1AFF5..1AFFB ; ID_Start # Lm [7] KATAKANA LETTER MINNAN TONE-7..KATAKANA LETTER MINNAN NASALIZED TONE-5 +1AFFD..1AFFE ; ID_Start # Lm [2] KATAKANA LETTER MINNAN NASALIZED TONE-7..KATAKANA LETTER MINNAN NASALIZED TONE-8 +1B000..1B122 ; ID_Start # Lo [291] KATAKANA LETTER ARCHAIC E..KATAKANA LETTER ARCHAIC WU 1B150..1B152 ; ID_Start # Lo [3] HIRAGANA LETTER SMALL WI..HIRAGANA LETTER SMALL WO 1B164..1B167 ; ID_Start # Lo [4] KATAKANA LETTER SMALL WI..KATAKANA LETTER SMALL N 1B170..1B2FB ; ID_Start # Lo [396] NUSHU CHARACTER-1B170..NUSHU CHARACTER-1B2FB @@ -6593,10 +6744,18 @@ FFDA..FFDC ; ID_Start # Lo [3] HALFWIDTH HANGUL LETTER EU..HALFWIDTH HANGUL 1D78A..1D7A8 ; ID_Start # L& [31] MATHEMATICAL SANS-SERIF BOLD EPSILON SYMBOL..MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL OMEGA 1D7AA..1D7C2 ; ID_Start # L& [25] MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL ALPHA..MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL OMEGA 1D7C4..1D7CB ; ID_Start # L& [8] MATHEMATICAL SANS-SERIF BOLD ITALIC EPSILON SYMBOL..MATHEMATICAL BOLD SMALL DIGAMMA +1DF00..1DF09 ; ID_Start # L& [10] LATIN SMALL LETTER FENG DIGRAPH WITH TRILL..LATIN SMALL LETTER T WITH HOOK AND RETROFLEX HOOK +1DF0A ; ID_Start # Lo LATIN LETTER RETROFLEX CLICK WITH RETROFLEX HOOK +1DF0B..1DF1E ; ID_Start # L& [20] LATIN SMALL LETTER ESH WITH DOUBLE BAR..LATIN SMALL LETTER S WITH CURL 1E100..1E12C ; ID_Start # Lo [45] NYIAKENG PUACHUE HMONG LETTER MA..NYIAKENG PUACHUE HMONG LETTER W 1E137..1E13D ; ID_Start # Lm [7] NYIAKENG PUACHUE HMONG SIGN FOR PERSON..NYIAKENG PUACHUE HMONG SYLLABLE LENGTHENER 1E14E ; ID_Start # Lo NYIAKENG PUACHUE HMONG LOGOGRAM NYAJ +1E290..1E2AD ; ID_Start # Lo [30] TOTO LETTER PA..TOTO LETTER A 1E2C0..1E2EB ; ID_Start # Lo [44] WANCHO LETTER AA..WANCHO LETTER YIH +1E7E0..1E7E6 ; ID_Start # Lo [7] ETHIOPIC SYLLABLE HHYA..ETHIOPIC SYLLABLE HHYO +1E7E8..1E7EB ; ID_Start # Lo [4] ETHIOPIC SYLLABLE GURAGE HHWA..ETHIOPIC SYLLABLE HHWE +1E7ED..1E7EE ; ID_Start # Lo [2] ETHIOPIC SYLLABLE GURAGE MWI..ETHIOPIC SYLLABLE GURAGE MWEE +1E7F0..1E7FE ; ID_Start # Lo [15] ETHIOPIC SYLLABLE GURAGE QWI..ETHIOPIC SYLLABLE GURAGE PWEE 1E800..1E8C4 ; ID_Start # Lo [197] MENDE KIKAKUI SYLLABLE M001 KI..MENDE KIKAKUI SYLLABLE M060 NYON 1E900..1E943 ; ID_Start # L& [68] ADLAM CAPITAL LETTER ALIF..ADLAM SMALL LETTER SHA 1E94B ; ID_Start # Lm ADLAM NASALIZATION MARK @@ -6633,15 +6792,15 @@ FFDA..FFDC ; ID_Start # Lo [3] HALFWIDTH HANGUL LETTER EU..HALFWIDTH HANGUL 1EEA1..1EEA3 ; ID_Start # Lo [3] ARABIC MATHEMATICAL DOUBLE-STRUCK BEH..ARABIC MATHEMATICAL DOUBLE-STRUCK DAL 1EEA5..1EEA9 ; ID_Start # Lo [5] ARABIC MATHEMATICAL DOUBLE-STRUCK WAW..ARABIC MATHEMATICAL DOUBLE-STRUCK YEH 1EEAB..1EEBB ; ID_Start # Lo [17] ARABIC MATHEMATICAL DOUBLE-STRUCK LAM..ARABIC MATHEMATICAL DOUBLE-STRUCK GHAIN -20000..2A6DD ; ID_Start # Lo [42718] CJK UNIFIED IDEOGRAPH-20000..CJK UNIFIED IDEOGRAPH-2A6DD -2A700..2B734 ; ID_Start # Lo [4149] CJK UNIFIED IDEOGRAPH-2A700..CJK UNIFIED IDEOGRAPH-2B734 +20000..2A6DF ; ID_Start # Lo [42720] CJK UNIFIED IDEOGRAPH-20000..CJK UNIFIED IDEOGRAPH-2A6DF +2A700..2B738 ; ID_Start # Lo [4153] CJK UNIFIED IDEOGRAPH-2A700..CJK UNIFIED IDEOGRAPH-2B738 2B740..2B81D ; ID_Start # Lo [222] CJK UNIFIED IDEOGRAPH-2B740..CJK UNIFIED IDEOGRAPH-2B81D 2B820..2CEA1 ; ID_Start # Lo [5762] CJK UNIFIED IDEOGRAPH-2B820..CJK UNIFIED IDEOGRAPH-2CEA1 2CEB0..2EBE0 ; ID_Start # Lo [7473] CJK UNIFIED IDEOGRAPH-2CEB0..CJK UNIFIED IDEOGRAPH-2EBE0 2F800..2FA1D ; ID_Start # Lo [542] CJK COMPATIBILITY IDEOGRAPH-2F800..CJK COMPATIBILITY IDEOGRAPH-2FA1D 30000..3134A ; ID_Start # Lo [4939] CJK UNIFIED IDEOGRAPH-30000..CJK UNIFIED IDEOGRAPH-3134A -# Total code points: 131482 +# Total code points: 131997 # ================================================ @@ -6746,9 +6905,12 @@ FFDA..FFDC ; ID_Start # Lo [3] HALFWIDTH HANGUL LETTER EU..HALFWIDTH HANGUL 0840..0858 ; ID_Continue # Lo [25] MANDAIC LETTER HALQA..MANDAIC LETTER AIN 0859..085B ; ID_Continue # Mn [3] MANDAIC AFFRICATION MARK..MANDAIC GEMINATION MARK 0860..086A ; ID_Continue # Lo [11] SYRIAC LETTER MALAYALAM NGA..SYRIAC LETTER MALAYALAM SSA -08A0..08B4 ; ID_Continue # Lo [21] ARABIC LETTER BEH WITH SMALL V BELOW..ARABIC LETTER KAF WITH DOT BELOW -08B6..08C7 ; ID_Continue # Lo [18] ARABIC LETTER BEH WITH SMALL MEEM ABOVE..ARABIC LETTER LAM WITH SMALL ARABIC LETTER TAH ABOVE -08D3..08E1 ; ID_Continue # Mn [15] ARABIC SMALL LOW WAW..ARABIC SMALL HIGH SIGN SAFHA +0870..0887 ; ID_Continue # Lo [24] ARABIC LETTER ALEF WITH ATTACHED FATHA..ARABIC BASELINE ROUND DOT +0889..088E ; ID_Continue # Lo [6] ARABIC LETTER NOON WITH INVERTED SMALL V..ARABIC VERTICAL TAIL +0898..089F ; ID_Continue # Mn [8] ARABIC SMALL HIGH WORD AL-JUZ..ARABIC HALF MADDA OVER MADDA +08A0..08C8 ; ID_Continue # Lo [41] ARABIC LETTER BEH WITH SMALL V BELOW..ARABIC LETTER GRAF +08C9 ; ID_Continue # Lm ARABIC SMALL FARSI YEH +08CA..08E1 ; ID_Continue # Mn [24] ARABIC SMALL HIGH FARSI YEH..ARABIC SMALL HIGH SIGN SAFHA 08E3..0902 ; ID_Continue # Mn [32] ARABIC TURNED DAMMA BELOW..DEVANAGARI SIGN ANUSVARA 0903 ; ID_Continue # Mc DEVANAGARI SIGN VISARGA 0904..0939 ; ID_Continue # Lo [54] DEVANAGARI LETTER SHORT A..DEVANAGARI LETTER HA @@ -6886,6 +7048,7 @@ FFDA..FFDC ; ID_Start # Lo [3] HALFWIDTH HANGUL LETTER EU..HALFWIDTH HANGUL 0C0E..0C10 ; ID_Continue # Lo [3] TELUGU LETTER E..TELUGU LETTER AI 0C12..0C28 ; ID_Continue # Lo [23] TELUGU LETTER O..TELUGU LETTER NA 0C2A..0C39 ; ID_Continue # Lo [16] TELUGU LETTER PA..TELUGU LETTER HA +0C3C ; ID_Continue # Mn TELUGU SIGN NUKTA 0C3D ; ID_Continue # Lo TELUGU SIGN AVAGRAHA 0C3E..0C40 ; ID_Continue # Mn [3] TELUGU VOWEL SIGN AA..TELUGU VOWEL SIGN II 0C41..0C44 ; ID_Continue # Mc [4] TELUGU VOWEL SIGN U..TELUGU VOWEL SIGN VOCALIC RR @@ -6893,6 +7056,7 @@ FFDA..FFDC ; ID_Start # Lo [3] HALFWIDTH HANGUL LETTER EU..HALFWIDTH HANGUL 0C4A..0C4D ; ID_Continue # Mn [4] TELUGU VOWEL SIGN O..TELUGU SIGN VIRAMA 0C55..0C56 ; ID_Continue # Mn [2] TELUGU LENGTH MARK..TELUGU AI LENGTH MARK 0C58..0C5A ; ID_Continue # Lo [3] TELUGU LETTER TSA..TELUGU LETTER RRRA +0C5D ; ID_Continue # Lo TELUGU LETTER NAKAARA POLLU 0C60..0C61 ; ID_Continue # Lo [2] TELUGU LETTER VOCALIC RR..TELUGU LETTER VOCALIC LL 0C62..0C63 ; ID_Continue # Mn [2] TELUGU VOWEL SIGN VOCALIC L..TELUGU VOWEL SIGN VOCALIC LL 0C66..0C6F ; ID_Continue # Nd [10] TELUGU DIGIT ZERO..TELUGU DIGIT NINE @@ -6914,7 +7078,7 @@ FFDA..FFDC ; ID_Start # Lo [3] HALFWIDTH HANGUL LETTER EU..HALFWIDTH HANGUL 0CCA..0CCB ; ID_Continue # Mc [2] KANNADA VOWEL SIGN O..KANNADA VOWEL SIGN OO 0CCC..0CCD ; ID_Continue # Mn [2] KANNADA VOWEL SIGN AU..KANNADA SIGN VIRAMA 0CD5..0CD6 ; ID_Continue # Mc [2] KANNADA LENGTH MARK..KANNADA AI LENGTH MARK -0CDE ; ID_Continue # Lo KANNADA LETTER FA +0CDD..0CDE ; ID_Continue # Lo [2] KANNADA LETTER NAKAARA POLLU..KANNADA LETTER FA 0CE0..0CE1 ; ID_Continue # Lo [2] KANNADA LETTER VOCALIC RR..KANNADA LETTER VOCALIC LL 0CE2..0CE3 ; ID_Continue # Mn [2] KANNADA VOWEL SIGN VOCALIC L..KANNADA VOWEL SIGN VOCALIC LL 0CE6..0CEF ; ID_Continue # Nd [10] KANNADA DIGIT ZERO..KANNADA DIGIT NINE @@ -7058,11 +7222,12 @@ FFDA..FFDC ; ID_Start # Lo [3] HALFWIDTH HANGUL LETTER EU..HALFWIDTH HANGUL 16A0..16EA ; ID_Continue # Lo [75] RUNIC LETTER FEHU FEOH FE F..RUNIC LETTER X 16EE..16F0 ; ID_Continue # Nl [3] RUNIC ARLAUG SYMBOL..RUNIC BELGTHOR SYMBOL 16F1..16F8 ; ID_Continue # Lo [8] RUNIC LETTER K..RUNIC LETTER FRANKS CASKET AESC -1700..170C ; ID_Continue # Lo [13] TAGALOG LETTER A..TAGALOG LETTER YA -170E..1711 ; ID_Continue # Lo [4] TAGALOG LETTER LA..TAGALOG LETTER HA +1700..1711 ; ID_Continue # Lo [18] TAGALOG LETTER A..TAGALOG LETTER HA 1712..1714 ; ID_Continue # Mn [3] TAGALOG VOWEL SIGN I..TAGALOG SIGN VIRAMA -1720..1731 ; ID_Continue # Lo [18] HANUNOO LETTER A..HANUNOO LETTER HA -1732..1734 ; ID_Continue # Mn [3] HANUNOO VOWEL SIGN I..HANUNOO SIGN PAMUDPOD +1715 ; ID_Continue # Mc TAGALOG SIGN PAMUDPOD +171F..1731 ; ID_Continue # Lo [19] TAGALOG LETTER ARCHAIC RA..HANUNOO LETTER HA +1732..1733 ; ID_Continue # Mn [2] HANUNOO VOWEL SIGN I..HANUNOO VOWEL SIGN U +1734 ; ID_Continue # Mc HANUNOO SIGN PAMUDPOD 1740..1751 ; ID_Continue # Lo [18] BUHID LETTER A..BUHID LETTER HA 1752..1753 ; ID_Continue # Mn [2] BUHID VOWEL SIGN I..BUHID VOWEL SIGN U 1760..176C ; ID_Continue # Lo [13] TAGBANWA LETTER A..TAGBANWA LETTER YA @@ -7081,6 +7246,7 @@ FFDA..FFDC ; ID_Start # Lo [3] HALFWIDTH HANGUL LETTER EU..HALFWIDTH HANGUL 17DD ; ID_Continue # Mn KHMER SIGN ATTHACAN 17E0..17E9 ; ID_Continue # Nd [10] KHMER DIGIT ZERO..KHMER DIGIT NINE 180B..180D ; ID_Continue # Mn [3] MONGOLIAN FREE VARIATION SELECTOR ONE..MONGOLIAN FREE VARIATION SELECTOR THREE +180F ; ID_Continue # Mn MONGOLIAN FREE VARIATION SELECTOR FOUR 1810..1819 ; ID_Continue # Nd [10] MONGOLIAN DIGIT ZERO..MONGOLIAN DIGIT NINE 1820..1842 ; ID_Continue # Lo [35] MONGOLIAN LETTER A..MONGOLIAN LETTER CHI 1843 ; ID_Continue # Lm MONGOLIAN LETTER TODO LONG VOWEL SIGN @@ -7128,7 +7294,7 @@ FFDA..FFDC ; ID_Start # Lo [3] HALFWIDTH HANGUL LETTER EU..HALFWIDTH HANGUL 1A90..1A99 ; ID_Continue # Nd [10] TAI THAM THAM DIGIT ZERO..TAI THAM THAM DIGIT NINE 1AA7 ; ID_Continue # Lm TAI THAM SIGN MAI YAMOK 1AB0..1ABD ; ID_Continue # Mn [14] COMBINING DOUBLED CIRCUMFLEX ACCENT..COMBINING PARENTHESES BELOW -1ABF..1AC0 ; ID_Continue # Mn [2] COMBINING LATIN SMALL LETTER W BELOW..COMBINING LATIN SMALL LETTER TURNED W BELOW +1ABF..1ACE ; ID_Continue # Mn [16] COMBINING LATIN SMALL LETTER W BELOW..COMBINING LATIN SMALL LETTER INSULAR T 1B00..1B03 ; ID_Continue # Mn [4] BALINESE SIGN ULU RICEM..BALINESE SIGN SURANG 1B04 ; ID_Continue # Mc BALINESE SIGN BISAH 1B05..1B33 ; ID_Continue # Lo [47] BALINESE LETTER AKARA..BALINESE LETTER HA @@ -7140,7 +7306,7 @@ FFDA..FFDC ; ID_Start # Lo [3] HALFWIDTH HANGUL LETTER EU..HALFWIDTH HANGUL 1B3D..1B41 ; ID_Continue # Mc [5] BALINESE VOWEL SIGN LA LENGA TEDUNG..BALINESE VOWEL SIGN TALING REPA TEDUNG 1B42 ; ID_Continue # Mn BALINESE VOWEL SIGN PEPET 1B43..1B44 ; ID_Continue # Mc [2] BALINESE VOWEL SIGN PEPET TEDUNG..BALINESE ADEG ADEG -1B45..1B4B ; ID_Continue # Lo [7] BALINESE LETTER KAF SASAK..BALINESE LETTER ASYURA SASAK +1B45..1B4C ; ID_Continue # Lo [8] BALINESE LETTER KAF SASAK..BALINESE LETTER ARCHAIC JNYA 1B50..1B59 ; ID_Continue # Nd [10] BALINESE DIGIT ZERO..BALINESE DIGIT NINE 1B6B..1B73 ; ID_Continue # Mn [9] BALINESE MUSICAL SYMBOL COMBINING TEGEH..BALINESE MUSICAL SYMBOL COMBINING GONG 1B80..1B81 ; ID_Continue # Mn [2] SUNDANESE SIGN PANYECEK..SUNDANESE SIGN PANGLAYAR @@ -7194,8 +7360,7 @@ FFDA..FFDC ; ID_Start # Lo [3] HALFWIDTH HANGUL LETTER EU..HALFWIDTH HANGUL 1D78 ; ID_Continue # Lm MODIFIER LETTER CYRILLIC EN 1D79..1D9A ; ID_Continue # L& [34] LATIN SMALL LETTER INSULAR G..LATIN SMALL LETTER EZH WITH RETROFLEX HOOK 1D9B..1DBF ; ID_Continue # Lm [37] MODIFIER LETTER SMALL TURNED ALPHA..MODIFIER LETTER SMALL THETA -1DC0..1DF9 ; ID_Continue # Mn [58] COMBINING DOTTED GRAVE ACCENT..COMBINING WIDE INVERTED BRIDGE BELOW -1DFB..1DFF ; ID_Continue # Mn [5] COMBINING DELETION MARK..COMBINING RIGHT ARROWHEAD AND DOWN ARROWHEAD BELOW +1DC0..1DFF ; ID_Continue # Mn [64] COMBINING DOTTED GRAVE ACCENT..COMBINING RIGHT ARROWHEAD AND DOWN ARROWHEAD BELOW 1E00..1F15 ; ID_Continue # L& [278] LATIN CAPITAL LETTER A WITH RING BELOW..GREEK SMALL LETTER EPSILON WITH DASIA AND OXIA 1F18..1F1D ; ID_Continue # L& [6] GREEK CAPITAL LETTER EPSILON WITH PSILI..GREEK CAPITAL LETTER EPSILON WITH DASIA AND OXIA 1F20..1F45 ; ID_Continue # L& [38] GREEK SMALL LETTER ETA WITH PSILI..GREEK SMALL LETTER OMICRON WITH DASIA AND OXIA @@ -7243,9 +7408,7 @@ FFDA..FFDC ; ID_Start # Lo [3] HALFWIDTH HANGUL LETTER EU..HALFWIDTH HANGUL 2160..2182 ; ID_Continue # Nl [35] ROMAN NUMERAL ONE..ROMAN NUMERAL TEN THOUSAND 2183..2184 ; ID_Continue # L& [2] ROMAN NUMERAL REVERSED ONE HUNDRED..LATIN SMALL LETTER REVERSED C 2185..2188 ; ID_Continue # Nl [4] ROMAN NUMERAL SIX LATE FORM..ROMAN NUMERAL ONE HUNDRED THOUSAND -2C00..2C2E ; ID_Continue # L& [47] GLAGOLITIC CAPITAL LETTER AZU..GLAGOLITIC CAPITAL LETTER LATINATE MYSLITE -2C30..2C5E ; ID_Continue # L& [47] GLAGOLITIC SMALL LETTER AZU..GLAGOLITIC SMALL LETTER LATINATE MYSLITE -2C60..2C7B ; ID_Continue # L& [28] LATIN CAPITAL LETTER L WITH DOUBLE BAR..LATIN LETTER SMALL CAPITAL TURNED E +2C00..2C7B ; ID_Continue # L& [124] GLAGOLITIC CAPITAL LETTER AZU..LATIN LETTER SMALL CAPITAL TURNED E 2C7C..2C7D ; ID_Continue # Lm [2] LATIN SUBSCRIPT SMALL LETTER J..MODIFIER LETTER CAPITAL V 2C7E..2CE4 ; ID_Continue # L& [103] LATIN CAPITAL LETTER S WITH SWASH TAIL..COPTIC SYMBOL KAI 2CEB..2CEE ; ID_Continue # L& [4] COPTIC CAPITAL LETTER CRYPTOGRAMMIC SHEI..COPTIC SMALL LETTER CRYPTOGRAMMIC GANGIA @@ -7290,8 +7453,7 @@ FFDA..FFDC ; ID_Start # Lo [3] HALFWIDTH HANGUL LETTER EU..HALFWIDTH HANGUL 31A0..31BF ; ID_Continue # Lo [32] BOPOMOFO LETTER BU..BOPOMOFO LETTER AH 31F0..31FF ; ID_Continue # Lo [16] KATAKANA LETTER SMALL KU..KATAKANA LETTER SMALL RO 3400..4DBF ; ID_Continue # Lo [6592] CJK UNIFIED IDEOGRAPH-3400..CJK UNIFIED IDEOGRAPH-4DBF -4E00..9FFC ; ID_Continue # Lo [20989] CJK UNIFIED IDEOGRAPH-4E00..CJK UNIFIED IDEOGRAPH-9FFC -A000..A014 ; ID_Continue # Lo [21] YI SYLLABLE IT..YI SYLLABLE E +4E00..A014 ; ID_Continue # Lo [21013] CJK UNIFIED IDEOGRAPH-4E00..YI SYLLABLE E A015 ; ID_Continue # Lm YI SYLLABLE WU A016..A48C ; ID_Continue # Lo [1143] YI SYLLABLE BIT..YI SYLLABLE YYR A4D0..A4F7 ; ID_Continue # Lo [40] LISU LETTER BA..LISU LETTER OE @@ -7319,8 +7481,11 @@ A771..A787 ; ID_Continue # L& [23] LATIN SMALL LETTER DUM..LATIN SMALL LETTE A788 ; ID_Continue # Lm MODIFIER LETTER LOW CIRCUMFLEX ACCENT A78B..A78E ; ID_Continue # L& [4] LATIN CAPITAL LETTER SALTILLO..LATIN SMALL LETTER L WITH RETROFLEX HOOK AND BELT A78F ; ID_Continue # Lo LATIN LETTER SINOLOGICAL DOT -A790..A7BF ; ID_Continue # L& [48] LATIN CAPITAL LETTER N WITH DESCENDER..LATIN SMALL LETTER GLOTTAL U -A7C2..A7CA ; ID_Continue # L& [9] LATIN CAPITAL LETTER ANGLICANA W..LATIN SMALL LETTER S WITH SHORT STROKE OVERLAY +A790..A7CA ; ID_Continue # L& [59] LATIN CAPITAL LETTER N WITH DESCENDER..LATIN SMALL LETTER S WITH SHORT STROKE OVERLAY +A7D0..A7D1 ; ID_Continue # L& [2] LATIN CAPITAL LETTER CLOSED INSULAR G..LATIN SMALL LETTER CLOSED INSULAR G +A7D3 ; ID_Continue # L& LATIN SMALL LETTER DOUBLE THORN +A7D5..A7D9 ; ID_Continue # L& [5] LATIN SMALL LETTER DOUBLE WYNN..LATIN SMALL LETTER SIGMOID S +A7F2..A7F4 ; ID_Continue # Lm [3] MODIFIER LETTER CAPITAL C..MODIFIER LETTER CAPITAL Q A7F5..A7F6 ; ID_Continue # L& [2] LATIN CAPITAL LETTER REVERSED HALF H..LATIN SMALL LETTER REVERSED HALF H A7F7 ; ID_Continue # Lo LATIN EPIGRAPHIC LETTER SIDEWAYS I A7F8..A7F9 ; ID_Continue # Lm [2] MODIFIER LETTER CAPITAL H WITH STROKE..MODIFIER LETTER SMALL LIGATURE OE @@ -7499,9 +7664,20 @@ FFDA..FFDC ; ID_Continue # Lo [3] HALFWIDTH HANGUL LETTER EU..HALFWIDTH HAN 104D8..104FB ; ID_Continue # L& [36] OSAGE SMALL LETTER A..OSAGE SMALL LETTER ZHA 10500..10527 ; ID_Continue # Lo [40] ELBASAN LETTER A..ELBASAN LETTER KHE 10530..10563 ; ID_Continue # Lo [52] CAUCASIAN ALBANIAN LETTER ALT..CAUCASIAN ALBANIAN LETTER KIW +10570..1057A ; ID_Continue # L& [11] VITHKUQI CAPITAL LETTER A..VITHKUQI CAPITAL LETTER GA +1057C..1058A ; ID_Continue # L& [15] VITHKUQI CAPITAL LETTER HA..VITHKUQI CAPITAL LETTER RE +1058C..10592 ; ID_Continue # L& [7] VITHKUQI CAPITAL LETTER SE..VITHKUQI CAPITAL LETTER XE +10594..10595 ; ID_Continue # L& [2] VITHKUQI CAPITAL LETTER Y..VITHKUQI CAPITAL LETTER ZE +10597..105A1 ; ID_Continue # L& [11] VITHKUQI SMALL LETTER A..VITHKUQI SMALL LETTER GA +105A3..105B1 ; ID_Continue # L& [15] VITHKUQI SMALL LETTER HA..VITHKUQI SMALL LETTER RE +105B3..105B9 ; ID_Continue # L& [7] VITHKUQI SMALL LETTER SE..VITHKUQI SMALL LETTER XE +105BB..105BC ; ID_Continue # L& [2] VITHKUQI SMALL LETTER Y..VITHKUQI SMALL LETTER ZE 10600..10736 ; ID_Continue # Lo [311] LINEAR A SIGN AB001..LINEAR A SIGN A664 10740..10755 ; ID_Continue # Lo [22] LINEAR A SIGN A701 A..LINEAR A SIGN A732 JE 10760..10767 ; ID_Continue # Lo [8] LINEAR A SIGN A800..LINEAR A SIGN A807 +10780..10785 ; ID_Continue # Lm [6] MODIFIER LETTER SMALL CAPITAL AA..MODIFIER LETTER SMALL B WITH HOOK +10787..107B0 ; ID_Continue # Lm [42] MODIFIER LETTER SMALL DZ DIGRAPH..MODIFIER LETTER SMALL V WITH RIGHT HOOK +107B2..107BA ; ID_Continue # Lm [9] MODIFIER LETTER SMALL CAPITAL Y..MODIFIER LETTER SMALL S WITH CURL 10800..10805 ; ID_Continue # Lo [6] CYPRIOT SYLLABLE A..CYPRIOT SYLLABLE JA 10808 ; ID_Continue # Lo CYPRIOT SYLLABLE JO 1080A..10835 ; ID_Continue # Lo [44] CYPRIOT SYLLABLE KA..CYPRIOT SYLLABLE WO @@ -7547,6 +7723,8 @@ FFDA..FFDC ; ID_Continue # Lo [3] HALFWIDTH HANGUL LETTER EU..HALFWIDTH HAN 10F27 ; ID_Continue # Lo OLD SOGDIAN LIGATURE AYIN-DALETH 10F30..10F45 ; ID_Continue # Lo [22] SOGDIAN LETTER ALEPH..SOGDIAN INDEPENDENT SHIN 10F46..10F50 ; ID_Continue # Mn [11] SOGDIAN COMBINING DOT BELOW..SOGDIAN COMBINING STROKE BELOW +10F70..10F81 ; ID_Continue # Lo [18] OLD UYGHUR LETTER ALEPH..OLD UYGHUR LETTER LESH +10F82..10F85 ; ID_Continue # Mn [4] OLD UYGHUR COMBINING DOT ABOVE..OLD UYGHUR COMBINING TWO DOTS BELOW 10FB0..10FC4 ; ID_Continue # Lo [21] CHORASMIAN LETTER ALEPH..CHORASMIAN LETTER TAW 10FE0..10FF6 ; ID_Continue # Lo [23] ELYMAIC LETTER ALEPH..ELYMAIC LIGATURE ZAYIN-YODH 11000 ; ID_Continue # Mc BRAHMI SIGN CANDRABINDU @@ -7555,6 +7733,10 @@ FFDA..FFDC ; ID_Continue # Lo [3] HALFWIDTH HANGUL LETTER EU..HALFWIDTH HAN 11003..11037 ; ID_Continue # Lo [53] BRAHMI SIGN JIHVAMULIYA..BRAHMI LETTER OLD TAMIL NNNA 11038..11046 ; ID_Continue # Mn [15] BRAHMI VOWEL SIGN AA..BRAHMI VIRAMA 11066..1106F ; ID_Continue # Nd [10] BRAHMI DIGIT ZERO..BRAHMI DIGIT NINE +11070 ; ID_Continue # Mn BRAHMI SIGN OLD TAMIL VIRAMA +11071..11072 ; ID_Continue # Lo [2] BRAHMI LETTER OLD TAMIL SHORT E..BRAHMI LETTER OLD TAMIL SHORT O +11073..11074 ; ID_Continue # Mn [2] BRAHMI VOWEL SIGN OLD TAMIL SHORT E..BRAHMI VOWEL SIGN OLD TAMIL SHORT O +11075 ; ID_Continue # Lo BRAHMI LETTER OLD TAMIL LLA 1107F..11081 ; ID_Continue # Mn [3] BRAHMI NUMBER JOINER..KAITHI SIGN ANUSVARA 11082 ; ID_Continue # Mc KAITHI SIGN VISARGA 11083..110AF ; ID_Continue # Lo [45] KAITHI LETTER A..KAITHI LETTER HA @@ -7562,6 +7744,7 @@ FFDA..FFDC ; ID_Continue # Lo [3] HALFWIDTH HANGUL LETTER EU..HALFWIDTH HAN 110B3..110B6 ; ID_Continue # Mn [4] KAITHI VOWEL SIGN U..KAITHI VOWEL SIGN AI 110B7..110B8 ; ID_Continue # Mc [2] KAITHI VOWEL SIGN O..KAITHI VOWEL SIGN AU 110B9..110BA ; ID_Continue # Mn [2] KAITHI SIGN VIRAMA..KAITHI SIGN NUKTA +110C2 ; ID_Continue # Mn KAITHI VOWEL SIGN VOCALIC R 110D0..110E8 ; ID_Continue # Lo [25] SORA SOMPENG LETTER SAH..SORA SOMPENG LETTER MAE 110F0..110F9 ; ID_Continue # Nd [10] SORA SOMPENG DIGIT ZERO..SORA SOMPENG DIGIT NINE 11100..11102 ; ID_Continue # Mn [3] CHAKMA SIGN CANDRABINDU..CHAKMA SIGN VISARGA @@ -7687,6 +7870,7 @@ FFDA..FFDC ; ID_Continue # Lo [3] HALFWIDTH HANGUL LETTER EU..HALFWIDTH HAN 11726 ; ID_Continue # Mc AHOM VOWEL SIGN E 11727..1172B ; ID_Continue # Mn [5] AHOM VOWEL SIGN AW..AHOM SIGN KILLER 11730..11739 ; ID_Continue # Nd [10] AHOM DIGIT ZERO..AHOM DIGIT NINE +11740..11746 ; ID_Continue # Lo [7] AHOM LETTER CA..AHOM LETTER LLA 11800..1182B ; ID_Continue # Lo [44] DOGRA LETTER A..DOGRA LETTER RRA 1182C..1182E ; ID_Continue # Mc [3] DOGRA VOWEL SIGN AA..DOGRA VOWEL SIGN II 1182F..11837 ; ID_Continue # Mn [9] DOGRA VOWEL SIGN U..DOGRA SIGN ANUSVARA @@ -7737,7 +7921,7 @@ FFDA..FFDC ; ID_Continue # Lo [3] HALFWIDTH HANGUL LETTER EU..HALFWIDTH HAN 11A97 ; ID_Continue # Mc SOYOMBO SIGN VISARGA 11A98..11A99 ; ID_Continue # Mn [2] SOYOMBO GEMINATION MARK..SOYOMBO SUBJOINER 11A9D ; ID_Continue # Lo SOYOMBO MARK PLUTA -11AC0..11AF8 ; ID_Continue # Lo [57] PAU CIN HAU LETTER PA..PAU CIN HAU GLOTTAL STOP FINAL +11AB0..11AF8 ; ID_Continue # Lo [73] CANADIAN SYLLABICS NATTILIK HI..PAU CIN HAU GLOTTAL STOP FINAL 11C00..11C08 ; ID_Continue # Lo [9] BHAIKSUKI LETTER A..BHAIKSUKI LETTER VOCALIC L 11C0A..11C2E ; ID_Continue # Lo [37] BHAIKSUKI LETTER E..BHAIKSUKI LETTER HA 11C2F ; ID_Continue # Mc BHAIKSUKI VOWEL SIGN AA @@ -7783,11 +7967,14 @@ FFDA..FFDC ; ID_Continue # Lo [3] HALFWIDTH HANGUL LETTER EU..HALFWIDTH HAN 12000..12399 ; ID_Continue # Lo [922] CUNEIFORM SIGN A..CUNEIFORM SIGN U U 12400..1246E ; ID_Continue # Nl [111] CUNEIFORM NUMERIC SIGN TWO ASH..CUNEIFORM NUMERIC SIGN NINE U VARIANT FORM 12480..12543 ; ID_Continue # Lo [196] CUNEIFORM SIGN AB TIMES NUN TENU..CUNEIFORM SIGN ZU5 TIMES THREE DISH TENU +12F90..12FF0 ; ID_Continue # Lo [97] CYPRO-MINOAN SIGN CM001..CYPRO-MINOAN SIGN CM114 13000..1342E ; ID_Continue # Lo [1071] EGYPTIAN HIEROGLYPH A001..EGYPTIAN HIEROGLYPH AA032 14400..14646 ; ID_Continue # Lo [583] ANATOLIAN HIEROGLYPH A001..ANATOLIAN HIEROGLYPH A530 16800..16A38 ; ID_Continue # Lo [569] BAMUM LETTER PHASE-A NGKUE MFON..BAMUM LETTER PHASE-F VUEQ 16A40..16A5E ; ID_Continue # Lo [31] MRO LETTER TA..MRO LETTER TEK 16A60..16A69 ; ID_Continue # Nd [10] MRO DIGIT ZERO..MRO DIGIT NINE +16A70..16ABE ; ID_Continue # Lo [79] TANGSA LETTER OZ..TANGSA LETTER ZA +16AC0..16AC9 ; ID_Continue # Nd [10] TANGSA DIGIT ZERO..TANGSA DIGIT NINE 16AD0..16AED ; ID_Continue # Lo [30] BASSA VAH LETTER ENNI..BASSA VAH LETTER I 16AF0..16AF4 ; ID_Continue # Mn [5] BASSA VAH COMBINING HIGH TONE..BASSA VAH COMBINING HIGH-LOW TONE 16B00..16B2F ; ID_Continue # Lo [48] PAHAWH HMONG VOWEL KEEB..PAHAWH HMONG CONSONANT CAU @@ -7810,7 +7997,10 @@ FFDA..FFDC ; ID_Continue # Lo [3] HALFWIDTH HANGUL LETTER EU..HALFWIDTH HAN 17000..187F7 ; ID_Continue # Lo [6136] TANGUT IDEOGRAPH-17000..TANGUT IDEOGRAPH-187F7 18800..18CD5 ; ID_Continue # Lo [1238] TANGUT COMPONENT-001..KHITAN SMALL SCRIPT CHARACTER-18CD5 18D00..18D08 ; ID_Continue # Lo [9] TANGUT IDEOGRAPH-18D00..TANGUT IDEOGRAPH-18D08 -1B000..1B11E ; ID_Continue # Lo [287] KATAKANA LETTER ARCHAIC E..HENTAIGANA LETTER N-MU-MO-2 +1AFF0..1AFF3 ; ID_Continue # Lm [4] KATAKANA LETTER MINNAN TONE-2..KATAKANA LETTER MINNAN TONE-5 +1AFF5..1AFFB ; ID_Continue # Lm [7] KATAKANA LETTER MINNAN TONE-7..KATAKANA LETTER MINNAN NASALIZED TONE-5 +1AFFD..1AFFE ; ID_Continue # Lm [2] KATAKANA LETTER MINNAN NASALIZED TONE-7..KATAKANA LETTER MINNAN NASALIZED TONE-8 +1B000..1B122 ; ID_Continue # Lo [291] KATAKANA LETTER ARCHAIC E..KATAKANA LETTER ARCHAIC WU 1B150..1B152 ; ID_Continue # Lo [3] HIRAGANA LETTER SMALL WI..HIRAGANA LETTER SMALL WO 1B164..1B167 ; ID_Continue # Lo [4] KATAKANA LETTER SMALL WI..KATAKANA LETTER SMALL N 1B170..1B2FB ; ID_Continue # Lo [396] NUSHU CHARACTER-1B170..NUSHU CHARACTER-1B2FB @@ -7819,6 +8009,8 @@ FFDA..FFDC ; ID_Continue # Lo [3] HALFWIDTH HANGUL LETTER EU..HALFWIDTH HAN 1BC80..1BC88 ; ID_Continue # Lo [9] DUPLOYAN AFFIX HIGH ACUTE..DUPLOYAN AFFIX HIGH VERTICAL 1BC90..1BC99 ; ID_Continue # Lo [10] DUPLOYAN AFFIX LOW ACUTE..DUPLOYAN AFFIX LOW ARROW 1BC9D..1BC9E ; ID_Continue # Mn [2] DUPLOYAN THICK LETTER SELECTOR..DUPLOYAN DOUBLE MARK +1CF00..1CF2D ; ID_Continue # Mn [46] ZNAMENNY COMBINING MARK GORAZDO NIZKO S KRYZHEM ON LEFT..ZNAMENNY COMBINING MARK KRYZH ON LEFT +1CF30..1CF46 ; ID_Continue # Mn [23] ZNAMENNY COMBINING TONAL RANGE MARK MRACHNO..ZNAMENNY PRIZNAK MODIFIER ROG 1D165..1D166 ; ID_Continue # Mc [2] MUSICAL SYMBOL COMBINING STEM..MUSICAL SYMBOL COMBINING SPRECHGESANG STEM 1D167..1D169 ; ID_Continue # Mn [3] MUSICAL SYMBOL COMBINING TREMOLO-1..MUSICAL SYMBOL COMBINING TREMOLO-3 1D16D..1D172 ; ID_Continue # Mc [6] MUSICAL SYMBOL COMBINING AUGMENTATION DOT..MUSICAL SYMBOL COMBINING FLAG-5 @@ -7863,6 +8055,9 @@ FFDA..FFDC ; ID_Continue # Lo [3] HALFWIDTH HANGUL LETTER EU..HALFWIDTH HAN 1DA84 ; ID_Continue # Mn SIGNWRITING LOCATION HEAD NECK 1DA9B..1DA9F ; ID_Continue # Mn [5] SIGNWRITING FILL MODIFIER-2..SIGNWRITING FILL MODIFIER-6 1DAA1..1DAAF ; ID_Continue # Mn [15] SIGNWRITING ROTATION MODIFIER-2..SIGNWRITING ROTATION MODIFIER-16 +1DF00..1DF09 ; ID_Continue # L& [10] LATIN SMALL LETTER FENG DIGRAPH WITH TRILL..LATIN SMALL LETTER T WITH HOOK AND RETROFLEX HOOK +1DF0A ; ID_Continue # Lo LATIN LETTER RETROFLEX CLICK WITH RETROFLEX HOOK +1DF0B..1DF1E ; ID_Continue # L& [20] LATIN SMALL LETTER ESH WITH DOUBLE BAR..LATIN SMALL LETTER S WITH CURL 1E000..1E006 ; ID_Continue # Mn [7] COMBINING GLAGOLITIC LETTER AZU..COMBINING GLAGOLITIC LETTER ZHIVETE 1E008..1E018 ; ID_Continue # Mn [17] COMBINING GLAGOLITIC LETTER ZEMLJA..COMBINING GLAGOLITIC LETTER HERU 1E01B..1E021 ; ID_Continue # Mn [7] COMBINING GLAGOLITIC LETTER SHTA..COMBINING GLAGOLITIC LETTER YATI @@ -7873,9 +8068,15 @@ FFDA..FFDC ; ID_Continue # Lo [3] HALFWIDTH HANGUL LETTER EU..HALFWIDTH HAN 1E137..1E13D ; ID_Continue # Lm [7] NYIAKENG PUACHUE HMONG SIGN FOR PERSON..NYIAKENG PUACHUE HMONG SYLLABLE LENGTHENER 1E140..1E149 ; ID_Continue # Nd [10] NYIAKENG PUACHUE HMONG DIGIT ZERO..NYIAKENG PUACHUE HMONG DIGIT NINE 1E14E ; ID_Continue # Lo NYIAKENG PUACHUE HMONG LOGOGRAM NYAJ +1E290..1E2AD ; ID_Continue # Lo [30] TOTO LETTER PA..TOTO LETTER A +1E2AE ; ID_Continue # Mn TOTO SIGN RISING TONE 1E2C0..1E2EB ; ID_Continue # Lo [44] WANCHO LETTER AA..WANCHO LETTER YIH 1E2EC..1E2EF ; ID_Continue # Mn [4] WANCHO TONE TUP..WANCHO TONE KOINI 1E2F0..1E2F9 ; ID_Continue # Nd [10] WANCHO DIGIT ZERO..WANCHO DIGIT NINE +1E7E0..1E7E6 ; ID_Continue # Lo [7] ETHIOPIC SYLLABLE HHYA..ETHIOPIC SYLLABLE HHYO +1E7E8..1E7EB ; ID_Continue # Lo [4] ETHIOPIC SYLLABLE GURAGE HHWA..ETHIOPIC SYLLABLE HHWE +1E7ED..1E7EE ; ID_Continue # Lo [2] ETHIOPIC SYLLABLE GURAGE MWI..ETHIOPIC SYLLABLE GURAGE MWEE +1E7F0..1E7FE ; ID_Continue # Lo [15] ETHIOPIC SYLLABLE GURAGE QWI..ETHIOPIC SYLLABLE GURAGE PWEE 1E800..1E8C4 ; ID_Continue # Lo [197] MENDE KIKAKUI SYLLABLE M001 KI..MENDE KIKAKUI SYLLABLE M060 NYON 1E8D0..1E8D6 ; ID_Continue # Mn [7] MENDE KIKAKUI COMBINING NUMBER TEENS..MENDE KIKAKUI COMBINING NUMBER MILLIONS 1E900..1E943 ; ID_Continue # L& [68] ADLAM CAPITAL LETTER ALIF..ADLAM SMALL LETTER SHA @@ -7916,8 +8117,8 @@ FFDA..FFDC ; ID_Continue # Lo [3] HALFWIDTH HANGUL LETTER EU..HALFWIDTH HAN 1EEA5..1EEA9 ; ID_Continue # Lo [5] ARABIC MATHEMATICAL DOUBLE-STRUCK WAW..ARABIC MATHEMATICAL DOUBLE-STRUCK YEH 1EEAB..1EEBB ; ID_Continue # Lo [17] ARABIC MATHEMATICAL DOUBLE-STRUCK LAM..ARABIC MATHEMATICAL DOUBLE-STRUCK GHAIN 1FBF0..1FBF9 ; ID_Continue # Nd [10] SEGMENTED DIGIT ZERO..SEGMENTED DIGIT NINE -20000..2A6DD ; ID_Continue # Lo [42718] CJK UNIFIED IDEOGRAPH-20000..CJK UNIFIED IDEOGRAPH-2A6DD -2A700..2B734 ; ID_Continue # Lo [4149] CJK UNIFIED IDEOGRAPH-2A700..CJK UNIFIED IDEOGRAPH-2B734 +20000..2A6DF ; ID_Continue # Lo [42720] CJK UNIFIED IDEOGRAPH-20000..CJK UNIFIED IDEOGRAPH-2A6DF +2A700..2B738 ; ID_Continue # Lo [4153] CJK UNIFIED IDEOGRAPH-2A700..CJK UNIFIED IDEOGRAPH-2B738 2B740..2B81D ; ID_Continue # Lo [222] CJK UNIFIED IDEOGRAPH-2B740..CJK UNIFIED IDEOGRAPH-2B81D 2B820..2CEA1 ; ID_Continue # Lo [5762] CJK UNIFIED IDEOGRAPH-2B820..CJK UNIFIED IDEOGRAPH-2CEA1 2CEB0..2EBE0 ; ID_Continue # Lo [7473] CJK UNIFIED IDEOGRAPH-2CEB0..CJK UNIFIED IDEOGRAPH-2EBE0 @@ -7925,7 +8126,7 @@ FFDA..FFDC ; ID_Continue # Lo [3] HALFWIDTH HANGUL LETTER EU..HALFWIDTH HAN 30000..3134A ; ID_Continue # Lo [4939] CJK UNIFIED IDEOGRAPH-30000..CJK UNIFIED IDEOGRAPH-3134A E0100..E01EF ; ID_Continue # Mn [240] VARIATION SELECTOR-17..VARIATION SELECTOR-256 -# Total code points: 134434 +# Total code points: 135072 # ================================================ @@ -7995,8 +8196,10 @@ E0100..E01EF ; ID_Continue # Mn [240] VARIATION SELECTOR-17..VARIATION SELECTOR 0828 ; XID_Start # Lm SAMARITAN MODIFIER LETTER I 0840..0858 ; XID_Start # Lo [25] MANDAIC LETTER HALQA..MANDAIC LETTER AIN 0860..086A ; XID_Start # Lo [11] SYRIAC LETTER MALAYALAM NGA..SYRIAC LETTER MALAYALAM SSA -08A0..08B4 ; XID_Start # Lo [21] ARABIC LETTER BEH WITH SMALL V BELOW..ARABIC LETTER KAF WITH DOT BELOW -08B6..08C7 ; XID_Start # Lo [18] ARABIC LETTER BEH WITH SMALL MEEM ABOVE..ARABIC LETTER LAM WITH SMALL ARABIC LETTER TAH ABOVE +0870..0887 ; XID_Start # Lo [24] ARABIC LETTER ALEF WITH ATTACHED FATHA..ARABIC BASELINE ROUND DOT +0889..088E ; XID_Start # Lo [6] ARABIC LETTER NOON WITH INVERTED SMALL V..ARABIC VERTICAL TAIL +08A0..08C8 ; XID_Start # Lo [41] ARABIC LETTER BEH WITH SMALL V BELOW..ARABIC LETTER GRAF +08C9 ; XID_Start # Lm ARABIC SMALL FARSI YEH 0904..0939 ; XID_Start # Lo [54] DEVANAGARI LETTER SHORT A..DEVANAGARI LETTER HA 093D ; XID_Start # Lo DEVANAGARI SIGN AVAGRAHA 0950 ; XID_Start # Lo DEVANAGARI OM @@ -8062,6 +8265,7 @@ E0100..E01EF ; ID_Continue # Mn [240] VARIATION SELECTOR-17..VARIATION SELECTOR 0C2A..0C39 ; XID_Start # Lo [16] TELUGU LETTER PA..TELUGU LETTER HA 0C3D ; XID_Start # Lo TELUGU SIGN AVAGRAHA 0C58..0C5A ; XID_Start # Lo [3] TELUGU LETTER TSA..TELUGU LETTER RRRA +0C5D ; XID_Start # Lo TELUGU LETTER NAKAARA POLLU 0C60..0C61 ; XID_Start # Lo [2] TELUGU LETTER VOCALIC RR..TELUGU LETTER VOCALIC LL 0C80 ; XID_Start # Lo KANNADA SIGN SPACING CANDRABINDU 0C85..0C8C ; XID_Start # Lo [8] KANNADA LETTER A..KANNADA LETTER VOCALIC L @@ -8070,7 +8274,7 @@ E0100..E01EF ; ID_Continue # Mn [240] VARIATION SELECTOR-17..VARIATION SELECTOR 0CAA..0CB3 ; XID_Start # Lo [10] KANNADA LETTER PA..KANNADA LETTER LLA 0CB5..0CB9 ; XID_Start # Lo [5] KANNADA LETTER VA..KANNADA LETTER HA 0CBD ; XID_Start # Lo KANNADA SIGN AVAGRAHA -0CDE ; XID_Start # Lo KANNADA LETTER FA +0CDD..0CDE ; XID_Start # Lo [2] KANNADA LETTER NAKAARA POLLU..KANNADA LETTER FA 0CE0..0CE1 ; XID_Start # Lo [2] KANNADA LETTER VOCALIC RR..KANNADA LETTER VOCALIC LL 0CF1..0CF2 ; XID_Start # Lo [2] KANNADA SIGN JIHVAMULIYA..KANNADA SIGN UPADHMANIYA 0D04..0D0C ; XID_Start # Lo [9] MALAYALAM LETTER VEDIC ANUSVARA..MALAYALAM LETTER VOCALIC L @@ -8145,9 +8349,8 @@ E0100..E01EF ; ID_Continue # Mn [240] VARIATION SELECTOR-17..VARIATION SELECTOR 16A0..16EA ; XID_Start # Lo [75] RUNIC LETTER FEHU FEOH FE F..RUNIC LETTER X 16EE..16F0 ; XID_Start # Nl [3] RUNIC ARLAUG SYMBOL..RUNIC BELGTHOR SYMBOL 16F1..16F8 ; XID_Start # Lo [8] RUNIC LETTER K..RUNIC LETTER FRANKS CASKET AESC -1700..170C ; XID_Start # Lo [13] TAGALOG LETTER A..TAGALOG LETTER YA -170E..1711 ; XID_Start # Lo [4] TAGALOG LETTER LA..TAGALOG LETTER HA -1720..1731 ; XID_Start # Lo [18] HANUNOO LETTER A..HANUNOO LETTER HA +1700..1711 ; XID_Start # Lo [18] TAGALOG LETTER A..TAGALOG LETTER HA +171F..1731 ; XID_Start # Lo [19] TAGALOG LETTER ARCHAIC RA..HANUNOO LETTER HA 1740..1751 ; XID_Start # Lo [18] BUHID LETTER A..BUHID LETTER HA 1760..176C ; XID_Start # Lo [13] TAGBANWA LETTER A..TAGBANWA LETTER YA 176E..1770 ; XID_Start # Lo [3] TAGBANWA LETTER LA..TAGBANWA LETTER SA @@ -8171,7 +8374,7 @@ E0100..E01EF ; ID_Continue # Mn [240] VARIATION SELECTOR-17..VARIATION SELECTOR 1A20..1A54 ; XID_Start # Lo [53] TAI THAM LETTER HIGH KA..TAI THAM LETTER GREAT SA 1AA7 ; XID_Start # Lm TAI THAM SIGN MAI YAMOK 1B05..1B33 ; XID_Start # Lo [47] BALINESE LETTER AKARA..BALINESE LETTER HA -1B45..1B4B ; XID_Start # Lo [7] BALINESE LETTER KAF SASAK..BALINESE LETTER ASYURA SASAK +1B45..1B4C ; XID_Start # Lo [8] BALINESE LETTER KAF SASAK..BALINESE LETTER ARCHAIC JNYA 1B83..1BA0 ; XID_Start # Lo [30] SUNDANESE LETTER A..SUNDANESE LETTER HA 1BAE..1BAF ; XID_Start # Lo [2] SUNDANESE LETTER KHA..SUNDANESE LETTER SYA 1BBA..1BE5 ; XID_Start # Lo [44] SUNDANESE AVAGRAHA..BATAK LETTER U @@ -8234,9 +8437,7 @@ E0100..E01EF ; ID_Continue # Mn [240] VARIATION SELECTOR-17..VARIATION SELECTOR 2160..2182 ; XID_Start # Nl [35] ROMAN NUMERAL ONE..ROMAN NUMERAL TEN THOUSAND 2183..2184 ; XID_Start # L& [2] ROMAN NUMERAL REVERSED ONE HUNDRED..LATIN SMALL LETTER REVERSED C 2185..2188 ; XID_Start # Nl [4] ROMAN NUMERAL SIX LATE FORM..ROMAN NUMERAL ONE HUNDRED THOUSAND -2C00..2C2E ; XID_Start # L& [47] GLAGOLITIC CAPITAL LETTER AZU..GLAGOLITIC CAPITAL LETTER LATINATE MYSLITE -2C30..2C5E ; XID_Start # L& [47] GLAGOLITIC SMALL LETTER AZU..GLAGOLITIC SMALL LETTER LATINATE MYSLITE -2C60..2C7B ; XID_Start # L& [28] LATIN CAPITAL LETTER L WITH DOUBLE BAR..LATIN LETTER SMALL CAPITAL TURNED E +2C00..2C7B ; XID_Start # L& [124] GLAGOLITIC CAPITAL LETTER AZU..LATIN LETTER SMALL CAPITAL TURNED E 2C7C..2C7D ; XID_Start # Lm [2] LATIN SUBSCRIPT SMALL LETTER J..MODIFIER LETTER CAPITAL V 2C7E..2CE4 ; XID_Start # L& [103] LATIN CAPITAL LETTER S WITH SWASH TAIL..COPTIC SYMBOL KAI 2CEB..2CEE ; XID_Start # L& [4] COPTIC CAPITAL LETTER CRYPTOGRAMMIC SHEI..COPTIC SMALL LETTER CRYPTOGRAMMIC GANGIA @@ -8274,8 +8475,7 @@ E0100..E01EF ; ID_Continue # Mn [240] VARIATION SELECTOR-17..VARIATION SELECTOR 31A0..31BF ; XID_Start # Lo [32] BOPOMOFO LETTER BU..BOPOMOFO LETTER AH 31F0..31FF ; XID_Start # Lo [16] KATAKANA LETTER SMALL KU..KATAKANA LETTER SMALL RO 3400..4DBF ; XID_Start # Lo [6592] CJK UNIFIED IDEOGRAPH-3400..CJK UNIFIED IDEOGRAPH-4DBF -4E00..9FFC ; XID_Start # Lo [20989] CJK UNIFIED IDEOGRAPH-4E00..CJK UNIFIED IDEOGRAPH-9FFC -A000..A014 ; XID_Start # Lo [21] YI SYLLABLE IT..YI SYLLABLE E +4E00..A014 ; XID_Start # Lo [21013] CJK UNIFIED IDEOGRAPH-4E00..YI SYLLABLE E A015 ; XID_Start # Lm YI SYLLABLE WU A016..A48C ; XID_Start # Lo [1143] YI SYLLABLE BIT..YI SYLLABLE YYR A4D0..A4F7 ; XID_Start # Lo [40] LISU LETTER BA..LISU LETTER OE @@ -8298,8 +8498,11 @@ A771..A787 ; XID_Start # L& [23] LATIN SMALL LETTER DUM..LATIN SMALL LETTER A788 ; XID_Start # Lm MODIFIER LETTER LOW CIRCUMFLEX ACCENT A78B..A78E ; XID_Start # L& [4] LATIN CAPITAL LETTER SALTILLO..LATIN SMALL LETTER L WITH RETROFLEX HOOK AND BELT A78F ; XID_Start # Lo LATIN LETTER SINOLOGICAL DOT -A790..A7BF ; XID_Start # L& [48] LATIN CAPITAL LETTER N WITH DESCENDER..LATIN SMALL LETTER GLOTTAL U -A7C2..A7CA ; XID_Start # L& [9] LATIN CAPITAL LETTER ANGLICANA W..LATIN SMALL LETTER S WITH SHORT STROKE OVERLAY +A790..A7CA ; XID_Start # L& [59] LATIN CAPITAL LETTER N WITH DESCENDER..LATIN SMALL LETTER S WITH SHORT STROKE OVERLAY +A7D0..A7D1 ; XID_Start # L& [2] LATIN CAPITAL LETTER CLOSED INSULAR G..LATIN SMALL LETTER CLOSED INSULAR G +A7D3 ; XID_Start # L& LATIN SMALL LETTER DOUBLE THORN +A7D5..A7D9 ; XID_Start # L& [5] LATIN SMALL LETTER DOUBLE WYNN..LATIN SMALL LETTER SIGMOID S +A7F2..A7F4 ; XID_Start # Lm [3] MODIFIER LETTER CAPITAL C..MODIFIER LETTER CAPITAL Q A7F5..A7F6 ; XID_Start # L& [2] LATIN CAPITAL LETTER REVERSED HALF H..LATIN SMALL LETTER REVERSED HALF H A7F7 ; XID_Start # Lo LATIN EPIGRAPHIC LETTER SIDEWAYS I A7F8..A7F9 ; XID_Start # Lm [2] MODIFIER LETTER CAPITAL H WITH STROKE..MODIFIER LETTER SMALL LIGATURE OE @@ -8414,9 +8617,20 @@ FFDA..FFDC ; XID_Start # Lo [3] HALFWIDTH HANGUL LETTER EU..HALFWIDTH HANGU 104D8..104FB ; XID_Start # L& [36] OSAGE SMALL LETTER A..OSAGE SMALL LETTER ZHA 10500..10527 ; XID_Start # Lo [40] ELBASAN LETTER A..ELBASAN LETTER KHE 10530..10563 ; XID_Start # Lo [52] CAUCASIAN ALBANIAN LETTER ALT..CAUCASIAN ALBANIAN LETTER KIW +10570..1057A ; XID_Start # L& [11] VITHKUQI CAPITAL LETTER A..VITHKUQI CAPITAL LETTER GA +1057C..1058A ; XID_Start # L& [15] VITHKUQI CAPITAL LETTER HA..VITHKUQI CAPITAL LETTER RE +1058C..10592 ; XID_Start # L& [7] VITHKUQI CAPITAL LETTER SE..VITHKUQI CAPITAL LETTER XE +10594..10595 ; XID_Start # L& [2] VITHKUQI CAPITAL LETTER Y..VITHKUQI CAPITAL LETTER ZE +10597..105A1 ; XID_Start # L& [11] VITHKUQI SMALL LETTER A..VITHKUQI SMALL LETTER GA +105A3..105B1 ; XID_Start # L& [15] VITHKUQI SMALL LETTER HA..VITHKUQI SMALL LETTER RE +105B3..105B9 ; XID_Start # L& [7] VITHKUQI SMALL LETTER SE..VITHKUQI SMALL LETTER XE +105BB..105BC ; XID_Start # L& [2] VITHKUQI SMALL LETTER Y..VITHKUQI SMALL LETTER ZE 10600..10736 ; XID_Start # Lo [311] LINEAR A SIGN AB001..LINEAR A SIGN A664 10740..10755 ; XID_Start # Lo [22] LINEAR A SIGN A701 A..LINEAR A SIGN A732 JE 10760..10767 ; XID_Start # Lo [8] LINEAR A SIGN A800..LINEAR A SIGN A807 +10780..10785 ; XID_Start # Lm [6] MODIFIER LETTER SMALL CAPITAL AA..MODIFIER LETTER SMALL B WITH HOOK +10787..107B0 ; XID_Start # Lm [42] MODIFIER LETTER SMALL DZ DIGRAPH..MODIFIER LETTER SMALL V WITH RIGHT HOOK +107B2..107BA ; XID_Start # Lm [9] MODIFIER LETTER SMALL CAPITAL Y..MODIFIER LETTER SMALL S WITH CURL 10800..10805 ; XID_Start # Lo [6] CYPRIOT SYLLABLE A..CYPRIOT SYLLABLE JA 10808 ; XID_Start # Lo CYPRIOT SYLLABLE JO 1080A..10835 ; XID_Start # Lo [44] CYPRIOT SYLLABLE KA..CYPRIOT SYLLABLE WO @@ -8452,9 +8666,12 @@ FFDA..FFDC ; XID_Start # Lo [3] HALFWIDTH HANGUL LETTER EU..HALFWIDTH HANGU 10F00..10F1C ; XID_Start # Lo [29] OLD SOGDIAN LETTER ALEPH..OLD SOGDIAN LETTER FINAL TAW WITH VERTICAL TAIL 10F27 ; XID_Start # Lo OLD SOGDIAN LIGATURE AYIN-DALETH 10F30..10F45 ; XID_Start # Lo [22] SOGDIAN LETTER ALEPH..SOGDIAN INDEPENDENT SHIN +10F70..10F81 ; XID_Start # Lo [18] OLD UYGHUR LETTER ALEPH..OLD UYGHUR LETTER LESH 10FB0..10FC4 ; XID_Start # Lo [21] CHORASMIAN LETTER ALEPH..CHORASMIAN LETTER TAW 10FE0..10FF6 ; XID_Start # Lo [23] ELYMAIC LETTER ALEPH..ELYMAIC LIGATURE ZAYIN-YODH 11003..11037 ; XID_Start # Lo [53] BRAHMI SIGN JIHVAMULIYA..BRAHMI LETTER OLD TAMIL NNNA +11071..11072 ; XID_Start # Lo [2] BRAHMI LETTER OLD TAMIL SHORT E..BRAHMI LETTER OLD TAMIL SHORT O +11075 ; XID_Start # Lo BRAHMI LETTER OLD TAMIL LLA 11083..110AF ; XID_Start # Lo [45] KAITHI LETTER A..KAITHI LETTER HA 110D0..110E8 ; XID_Start # Lo [25] SORA SOMPENG LETTER SAH..SORA SOMPENG LETTER MAE 11103..11126 ; XID_Start # Lo [36] CHAKMA LETTER AA..CHAKMA LETTER HAA @@ -8496,6 +8713,7 @@ FFDA..FFDC ; XID_Start # Lo [3] HALFWIDTH HANGUL LETTER EU..HALFWIDTH HANGU 11680..116AA ; XID_Start # Lo [43] TAKRI LETTER A..TAKRI LETTER RRA 116B8 ; XID_Start # Lo TAKRI LETTER ARCHAIC KHA 11700..1171A ; XID_Start # Lo [27] AHOM LETTER KA..AHOM LETTER ALTERNATE BA +11740..11746 ; XID_Start # Lo [7] AHOM LETTER CA..AHOM LETTER LLA 11800..1182B ; XID_Start # Lo [44] DOGRA LETTER A..DOGRA LETTER RRA 118A0..118DF ; XID_Start # L& [64] WARANG CITI CAPITAL LETTER NGAA..WARANG CITI SMALL LETTER VIYO 118FF..11906 ; XID_Start # Lo [8] WARANG CITI OM..DIVES AKURU LETTER E @@ -8515,7 +8733,7 @@ FFDA..FFDC ; XID_Start # Lo [3] HALFWIDTH HANGUL LETTER EU..HALFWIDTH HANGU 11A50 ; XID_Start # Lo SOYOMBO LETTER A 11A5C..11A89 ; XID_Start # Lo [46] SOYOMBO LETTER KA..SOYOMBO CLUSTER-INITIAL LETTER SA 11A9D ; XID_Start # Lo SOYOMBO MARK PLUTA -11AC0..11AF8 ; XID_Start # Lo [57] PAU CIN HAU LETTER PA..PAU CIN HAU GLOTTAL STOP FINAL +11AB0..11AF8 ; XID_Start # Lo [73] CANADIAN SYLLABICS NATTILIK HI..PAU CIN HAU GLOTTAL STOP FINAL 11C00..11C08 ; XID_Start # Lo [9] BHAIKSUKI LETTER A..BHAIKSUKI LETTER VOCALIC L 11C0A..11C2E ; XID_Start # Lo [37] BHAIKSUKI LETTER E..BHAIKSUKI LETTER HA 11C40 ; XID_Start # Lo BHAIKSUKI SIGN AVAGRAHA @@ -8533,10 +8751,12 @@ FFDA..FFDC ; XID_Start # Lo [3] HALFWIDTH HANGUL LETTER EU..HALFWIDTH HANGU 12000..12399 ; XID_Start # Lo [922] CUNEIFORM SIGN A..CUNEIFORM SIGN U U 12400..1246E ; XID_Start # Nl [111] CUNEIFORM NUMERIC SIGN TWO ASH..CUNEIFORM NUMERIC SIGN NINE U VARIANT FORM 12480..12543 ; XID_Start # Lo [196] CUNEIFORM SIGN AB TIMES NUN TENU..CUNEIFORM SIGN ZU5 TIMES THREE DISH TENU +12F90..12FF0 ; XID_Start # Lo [97] CYPRO-MINOAN SIGN CM001..CYPRO-MINOAN SIGN CM114 13000..1342E ; XID_Start # Lo [1071] EGYPTIAN HIEROGLYPH A001..EGYPTIAN HIEROGLYPH AA032 14400..14646 ; XID_Start # Lo [583] ANATOLIAN HIEROGLYPH A001..ANATOLIAN HIEROGLYPH A530 16800..16A38 ; XID_Start # Lo [569] BAMUM LETTER PHASE-A NGKUE MFON..BAMUM LETTER PHASE-F VUEQ 16A40..16A5E ; XID_Start # Lo [31] MRO LETTER TA..MRO LETTER TEK +16A70..16ABE ; XID_Start # Lo [79] TANGSA LETTER OZ..TANGSA LETTER ZA 16AD0..16AED ; XID_Start # Lo [30] BASSA VAH LETTER ENNI..BASSA VAH LETTER I 16B00..16B2F ; XID_Start # Lo [48] PAHAWH HMONG VOWEL KEEB..PAHAWH HMONG CONSONANT CAU 16B40..16B43 ; XID_Start # Lm [4] PAHAWH HMONG SIGN VOS SEEV..PAHAWH HMONG SIGN IB YAM @@ -8551,7 +8771,10 @@ FFDA..FFDC ; XID_Start # Lo [3] HALFWIDTH HANGUL LETTER EU..HALFWIDTH HANGU 17000..187F7 ; XID_Start # Lo [6136] TANGUT IDEOGRAPH-17000..TANGUT IDEOGRAPH-187F7 18800..18CD5 ; XID_Start # Lo [1238] TANGUT COMPONENT-001..KHITAN SMALL SCRIPT CHARACTER-18CD5 18D00..18D08 ; XID_Start # Lo [9] TANGUT IDEOGRAPH-18D00..TANGUT IDEOGRAPH-18D08 -1B000..1B11E ; XID_Start # Lo [287] KATAKANA LETTER ARCHAIC E..HENTAIGANA LETTER N-MU-MO-2 +1AFF0..1AFF3 ; XID_Start # Lm [4] KATAKANA LETTER MINNAN TONE-2..KATAKANA LETTER MINNAN TONE-5 +1AFF5..1AFFB ; XID_Start # Lm [7] KATAKANA LETTER MINNAN TONE-7..KATAKANA LETTER MINNAN NASALIZED TONE-5 +1AFFD..1AFFE ; XID_Start # Lm [2] KATAKANA LETTER MINNAN NASALIZED TONE-7..KATAKANA LETTER MINNAN NASALIZED TONE-8 +1B000..1B122 ; XID_Start # Lo [291] KATAKANA LETTER ARCHAIC E..KATAKANA LETTER ARCHAIC WU 1B150..1B152 ; XID_Start # Lo [3] HIRAGANA LETTER SMALL WI..HIRAGANA LETTER SMALL WO 1B164..1B167 ; XID_Start # Lo [4] KATAKANA LETTER SMALL WI..KATAKANA LETTER SMALL N 1B170..1B2FB ; XID_Start # Lo [396] NUSHU CHARACTER-1B170..NUSHU CHARACTER-1B2FB @@ -8589,10 +8812,18 @@ FFDA..FFDC ; XID_Start # Lo [3] HALFWIDTH HANGUL LETTER EU..HALFWIDTH HANGU 1D78A..1D7A8 ; XID_Start # L& [31] MATHEMATICAL SANS-SERIF BOLD EPSILON SYMBOL..MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL OMEGA 1D7AA..1D7C2 ; XID_Start # L& [25] MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL ALPHA..MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL OMEGA 1D7C4..1D7CB ; XID_Start # L& [8] MATHEMATICAL SANS-SERIF BOLD ITALIC EPSILON SYMBOL..MATHEMATICAL BOLD SMALL DIGAMMA +1DF00..1DF09 ; XID_Start # L& [10] LATIN SMALL LETTER FENG DIGRAPH WITH TRILL..LATIN SMALL LETTER T WITH HOOK AND RETROFLEX HOOK +1DF0A ; XID_Start # Lo LATIN LETTER RETROFLEX CLICK WITH RETROFLEX HOOK +1DF0B..1DF1E ; XID_Start # L& [20] LATIN SMALL LETTER ESH WITH DOUBLE BAR..LATIN SMALL LETTER S WITH CURL 1E100..1E12C ; XID_Start # Lo [45] NYIAKENG PUACHUE HMONG LETTER MA..NYIAKENG PUACHUE HMONG LETTER W 1E137..1E13D ; XID_Start # Lm [7] NYIAKENG PUACHUE HMONG SIGN FOR PERSON..NYIAKENG PUACHUE HMONG SYLLABLE LENGTHENER 1E14E ; XID_Start # Lo NYIAKENG PUACHUE HMONG LOGOGRAM NYAJ +1E290..1E2AD ; XID_Start # Lo [30] TOTO LETTER PA..TOTO LETTER A 1E2C0..1E2EB ; XID_Start # Lo [44] WANCHO LETTER AA..WANCHO LETTER YIH +1E7E0..1E7E6 ; XID_Start # Lo [7] ETHIOPIC SYLLABLE HHYA..ETHIOPIC SYLLABLE HHYO +1E7E8..1E7EB ; XID_Start # Lo [4] ETHIOPIC SYLLABLE GURAGE HHWA..ETHIOPIC SYLLABLE HHWE +1E7ED..1E7EE ; XID_Start # Lo [2] ETHIOPIC SYLLABLE GURAGE MWI..ETHIOPIC SYLLABLE GURAGE MWEE +1E7F0..1E7FE ; XID_Start # Lo [15] ETHIOPIC SYLLABLE GURAGE QWI..ETHIOPIC SYLLABLE GURAGE PWEE 1E800..1E8C4 ; XID_Start # Lo [197] MENDE KIKAKUI SYLLABLE M001 KI..MENDE KIKAKUI SYLLABLE M060 NYON 1E900..1E943 ; XID_Start # L& [68] ADLAM CAPITAL LETTER ALIF..ADLAM SMALL LETTER SHA 1E94B ; XID_Start # Lm ADLAM NASALIZATION MARK @@ -8629,15 +8860,15 @@ FFDA..FFDC ; XID_Start # Lo [3] HALFWIDTH HANGUL LETTER EU..HALFWIDTH HANGU 1EEA1..1EEA3 ; XID_Start # Lo [3] ARABIC MATHEMATICAL DOUBLE-STRUCK BEH..ARABIC MATHEMATICAL DOUBLE-STRUCK DAL 1EEA5..1EEA9 ; XID_Start # Lo [5] ARABIC MATHEMATICAL DOUBLE-STRUCK WAW..ARABIC MATHEMATICAL DOUBLE-STRUCK YEH 1EEAB..1EEBB ; XID_Start # Lo [17] ARABIC MATHEMATICAL DOUBLE-STRUCK LAM..ARABIC MATHEMATICAL DOUBLE-STRUCK GHAIN -20000..2A6DD ; XID_Start # Lo [42718] CJK UNIFIED IDEOGRAPH-20000..CJK UNIFIED IDEOGRAPH-2A6DD -2A700..2B734 ; XID_Start # Lo [4149] CJK UNIFIED IDEOGRAPH-2A700..CJK UNIFIED IDEOGRAPH-2B734 +20000..2A6DF ; XID_Start # Lo [42720] CJK UNIFIED IDEOGRAPH-20000..CJK UNIFIED IDEOGRAPH-2A6DF +2A700..2B738 ; XID_Start # Lo [4153] CJK UNIFIED IDEOGRAPH-2A700..CJK UNIFIED IDEOGRAPH-2B738 2B740..2B81D ; XID_Start # Lo [222] CJK UNIFIED IDEOGRAPH-2B740..CJK UNIFIED IDEOGRAPH-2B81D 2B820..2CEA1 ; XID_Start # Lo [5762] CJK UNIFIED IDEOGRAPH-2B820..CJK UNIFIED IDEOGRAPH-2CEA1 2CEB0..2EBE0 ; XID_Start # Lo [7473] CJK UNIFIED IDEOGRAPH-2CEB0..CJK UNIFIED IDEOGRAPH-2EBE0 2F800..2FA1D ; XID_Start # Lo [542] CJK COMPATIBILITY IDEOGRAPH-2F800..CJK COMPATIBILITY IDEOGRAPH-2FA1D 30000..3134A ; XID_Start # Lo [4939] CJK UNIFIED IDEOGRAPH-30000..CJK UNIFIED IDEOGRAPH-3134A -# Total code points: 131459 +# Total code points: 131974 # ================================================ @@ -8738,9 +8969,12 @@ FFDA..FFDC ; XID_Start # Lo [3] HALFWIDTH HANGUL LETTER EU..HALFWIDTH HANGU 0840..0858 ; XID_Continue # Lo [25] MANDAIC LETTER HALQA..MANDAIC LETTER AIN 0859..085B ; XID_Continue # Mn [3] MANDAIC AFFRICATION MARK..MANDAIC GEMINATION MARK 0860..086A ; XID_Continue # Lo [11] SYRIAC LETTER MALAYALAM NGA..SYRIAC LETTER MALAYALAM SSA -08A0..08B4 ; XID_Continue # Lo [21] ARABIC LETTER BEH WITH SMALL V BELOW..ARABIC LETTER KAF WITH DOT BELOW -08B6..08C7 ; XID_Continue # Lo [18] ARABIC LETTER BEH WITH SMALL MEEM ABOVE..ARABIC LETTER LAM WITH SMALL ARABIC LETTER TAH ABOVE -08D3..08E1 ; XID_Continue # Mn [15] ARABIC SMALL LOW WAW..ARABIC SMALL HIGH SIGN SAFHA +0870..0887 ; XID_Continue # Lo [24] ARABIC LETTER ALEF WITH ATTACHED FATHA..ARABIC BASELINE ROUND DOT +0889..088E ; XID_Continue # Lo [6] ARABIC LETTER NOON WITH INVERTED SMALL V..ARABIC VERTICAL TAIL +0898..089F ; XID_Continue # Mn [8] ARABIC SMALL HIGH WORD AL-JUZ..ARABIC HALF MADDA OVER MADDA +08A0..08C8 ; XID_Continue # Lo [41] ARABIC LETTER BEH WITH SMALL V BELOW..ARABIC LETTER GRAF +08C9 ; XID_Continue # Lm ARABIC SMALL FARSI YEH +08CA..08E1 ; XID_Continue # Mn [24] ARABIC SMALL HIGH FARSI YEH..ARABIC SMALL HIGH SIGN SAFHA 08E3..0902 ; XID_Continue # Mn [32] ARABIC TURNED DAMMA BELOW..DEVANAGARI SIGN ANUSVARA 0903 ; XID_Continue # Mc DEVANAGARI SIGN VISARGA 0904..0939 ; XID_Continue # Lo [54] DEVANAGARI LETTER SHORT A..DEVANAGARI LETTER HA @@ -8878,6 +9112,7 @@ FFDA..FFDC ; XID_Start # Lo [3] HALFWIDTH HANGUL LETTER EU..HALFWIDTH HANGU 0C0E..0C10 ; XID_Continue # Lo [3] TELUGU LETTER E..TELUGU LETTER AI 0C12..0C28 ; XID_Continue # Lo [23] TELUGU LETTER O..TELUGU LETTER NA 0C2A..0C39 ; XID_Continue # Lo [16] TELUGU LETTER PA..TELUGU LETTER HA +0C3C ; XID_Continue # Mn TELUGU SIGN NUKTA 0C3D ; XID_Continue # Lo TELUGU SIGN AVAGRAHA 0C3E..0C40 ; XID_Continue # Mn [3] TELUGU VOWEL SIGN AA..TELUGU VOWEL SIGN II 0C41..0C44 ; XID_Continue # Mc [4] TELUGU VOWEL SIGN U..TELUGU VOWEL SIGN VOCALIC RR @@ -8885,6 +9120,7 @@ FFDA..FFDC ; XID_Start # Lo [3] HALFWIDTH HANGUL LETTER EU..HALFWIDTH HANGU 0C4A..0C4D ; XID_Continue # Mn [4] TELUGU VOWEL SIGN O..TELUGU SIGN VIRAMA 0C55..0C56 ; XID_Continue # Mn [2] TELUGU LENGTH MARK..TELUGU AI LENGTH MARK 0C58..0C5A ; XID_Continue # Lo [3] TELUGU LETTER TSA..TELUGU LETTER RRRA +0C5D ; XID_Continue # Lo TELUGU LETTER NAKAARA POLLU 0C60..0C61 ; XID_Continue # Lo [2] TELUGU LETTER VOCALIC RR..TELUGU LETTER VOCALIC LL 0C62..0C63 ; XID_Continue # Mn [2] TELUGU VOWEL SIGN VOCALIC L..TELUGU VOWEL SIGN VOCALIC LL 0C66..0C6F ; XID_Continue # Nd [10] TELUGU DIGIT ZERO..TELUGU DIGIT NINE @@ -8906,7 +9142,7 @@ FFDA..FFDC ; XID_Start # Lo [3] HALFWIDTH HANGUL LETTER EU..HALFWIDTH HANGU 0CCA..0CCB ; XID_Continue # Mc [2] KANNADA VOWEL SIGN O..KANNADA VOWEL SIGN OO 0CCC..0CCD ; XID_Continue # Mn [2] KANNADA VOWEL SIGN AU..KANNADA SIGN VIRAMA 0CD5..0CD6 ; XID_Continue # Mc [2] KANNADA LENGTH MARK..KANNADA AI LENGTH MARK -0CDE ; XID_Continue # Lo KANNADA LETTER FA +0CDD..0CDE ; XID_Continue # Lo [2] KANNADA LETTER NAKAARA POLLU..KANNADA LETTER FA 0CE0..0CE1 ; XID_Continue # Lo [2] KANNADA LETTER VOCALIC RR..KANNADA LETTER VOCALIC LL 0CE2..0CE3 ; XID_Continue # Mn [2] KANNADA VOWEL SIGN VOCALIC L..KANNADA VOWEL SIGN VOCALIC LL 0CE6..0CEF ; XID_Continue # Nd [10] KANNADA DIGIT ZERO..KANNADA DIGIT NINE @@ -9050,11 +9286,12 @@ FFDA..FFDC ; XID_Start # Lo [3] HALFWIDTH HANGUL LETTER EU..HALFWIDTH HANGU 16A0..16EA ; XID_Continue # Lo [75] RUNIC LETTER FEHU FEOH FE F..RUNIC LETTER X 16EE..16F0 ; XID_Continue # Nl [3] RUNIC ARLAUG SYMBOL..RUNIC BELGTHOR SYMBOL 16F1..16F8 ; XID_Continue # Lo [8] RUNIC LETTER K..RUNIC LETTER FRANKS CASKET AESC -1700..170C ; XID_Continue # Lo [13] TAGALOG LETTER A..TAGALOG LETTER YA -170E..1711 ; XID_Continue # Lo [4] TAGALOG LETTER LA..TAGALOG LETTER HA +1700..1711 ; XID_Continue # Lo [18] TAGALOG LETTER A..TAGALOG LETTER HA 1712..1714 ; XID_Continue # Mn [3] TAGALOG VOWEL SIGN I..TAGALOG SIGN VIRAMA -1720..1731 ; XID_Continue # Lo [18] HANUNOO LETTER A..HANUNOO LETTER HA -1732..1734 ; XID_Continue # Mn [3] HANUNOO VOWEL SIGN I..HANUNOO SIGN PAMUDPOD +1715 ; XID_Continue # Mc TAGALOG SIGN PAMUDPOD +171F..1731 ; XID_Continue # Lo [19] TAGALOG LETTER ARCHAIC RA..HANUNOO LETTER HA +1732..1733 ; XID_Continue # Mn [2] HANUNOO VOWEL SIGN I..HANUNOO VOWEL SIGN U +1734 ; XID_Continue # Mc HANUNOO SIGN PAMUDPOD 1740..1751 ; XID_Continue # Lo [18] BUHID LETTER A..BUHID LETTER HA 1752..1753 ; XID_Continue # Mn [2] BUHID VOWEL SIGN I..BUHID VOWEL SIGN U 1760..176C ; XID_Continue # Lo [13] TAGBANWA LETTER A..TAGBANWA LETTER YA @@ -9073,6 +9310,7 @@ FFDA..FFDC ; XID_Start # Lo [3] HALFWIDTH HANGUL LETTER EU..HALFWIDTH HANGU 17DD ; XID_Continue # Mn KHMER SIGN ATTHACAN 17E0..17E9 ; XID_Continue # Nd [10] KHMER DIGIT ZERO..KHMER DIGIT NINE 180B..180D ; XID_Continue # Mn [3] MONGOLIAN FREE VARIATION SELECTOR ONE..MONGOLIAN FREE VARIATION SELECTOR THREE +180F ; XID_Continue # Mn MONGOLIAN FREE VARIATION SELECTOR FOUR 1810..1819 ; XID_Continue # Nd [10] MONGOLIAN DIGIT ZERO..MONGOLIAN DIGIT NINE 1820..1842 ; XID_Continue # Lo [35] MONGOLIAN LETTER A..MONGOLIAN LETTER CHI 1843 ; XID_Continue # Lm MONGOLIAN LETTER TODO LONG VOWEL SIGN @@ -9120,7 +9358,7 @@ FFDA..FFDC ; XID_Start # Lo [3] HALFWIDTH HANGUL LETTER EU..HALFWIDTH HANGU 1A90..1A99 ; XID_Continue # Nd [10] TAI THAM THAM DIGIT ZERO..TAI THAM THAM DIGIT NINE 1AA7 ; XID_Continue # Lm TAI THAM SIGN MAI YAMOK 1AB0..1ABD ; XID_Continue # Mn [14] COMBINING DOUBLED CIRCUMFLEX ACCENT..COMBINING PARENTHESES BELOW -1ABF..1AC0 ; XID_Continue # Mn [2] COMBINING LATIN SMALL LETTER W BELOW..COMBINING LATIN SMALL LETTER TURNED W BELOW +1ABF..1ACE ; XID_Continue # Mn [16] COMBINING LATIN SMALL LETTER W BELOW..COMBINING LATIN SMALL LETTER INSULAR T 1B00..1B03 ; XID_Continue # Mn [4] BALINESE SIGN ULU RICEM..BALINESE SIGN SURANG 1B04 ; XID_Continue # Mc BALINESE SIGN BISAH 1B05..1B33 ; XID_Continue # Lo [47] BALINESE LETTER AKARA..BALINESE LETTER HA @@ -9132,7 +9370,7 @@ FFDA..FFDC ; XID_Start # Lo [3] HALFWIDTH HANGUL LETTER EU..HALFWIDTH HANGU 1B3D..1B41 ; XID_Continue # Mc [5] BALINESE VOWEL SIGN LA LENGA TEDUNG..BALINESE VOWEL SIGN TALING REPA TEDUNG 1B42 ; XID_Continue # Mn BALINESE VOWEL SIGN PEPET 1B43..1B44 ; XID_Continue # Mc [2] BALINESE VOWEL SIGN PEPET TEDUNG..BALINESE ADEG ADEG -1B45..1B4B ; XID_Continue # Lo [7] BALINESE LETTER KAF SASAK..BALINESE LETTER ASYURA SASAK +1B45..1B4C ; XID_Continue # Lo [8] BALINESE LETTER KAF SASAK..BALINESE LETTER ARCHAIC JNYA 1B50..1B59 ; XID_Continue # Nd [10] BALINESE DIGIT ZERO..BALINESE DIGIT NINE 1B6B..1B73 ; XID_Continue # Mn [9] BALINESE MUSICAL SYMBOL COMBINING TEGEH..BALINESE MUSICAL SYMBOL COMBINING GONG 1B80..1B81 ; XID_Continue # Mn [2] SUNDANESE SIGN PANYECEK..SUNDANESE SIGN PANGLAYAR @@ -9186,8 +9424,7 @@ FFDA..FFDC ; XID_Start # Lo [3] HALFWIDTH HANGUL LETTER EU..HALFWIDTH HANGU 1D78 ; XID_Continue # Lm MODIFIER LETTER CYRILLIC EN 1D79..1D9A ; XID_Continue # L& [34] LATIN SMALL LETTER INSULAR G..LATIN SMALL LETTER EZH WITH RETROFLEX HOOK 1D9B..1DBF ; XID_Continue # Lm [37] MODIFIER LETTER SMALL TURNED ALPHA..MODIFIER LETTER SMALL THETA -1DC0..1DF9 ; XID_Continue # Mn [58] COMBINING DOTTED GRAVE ACCENT..COMBINING WIDE INVERTED BRIDGE BELOW -1DFB..1DFF ; XID_Continue # Mn [5] COMBINING DELETION MARK..COMBINING RIGHT ARROWHEAD AND DOWN ARROWHEAD BELOW +1DC0..1DFF ; XID_Continue # Mn [64] COMBINING DOTTED GRAVE ACCENT..COMBINING RIGHT ARROWHEAD AND DOWN ARROWHEAD BELOW 1E00..1F15 ; XID_Continue # L& [278] LATIN CAPITAL LETTER A WITH RING BELOW..GREEK SMALL LETTER EPSILON WITH DASIA AND OXIA 1F18..1F1D ; XID_Continue # L& [6] GREEK CAPITAL LETTER EPSILON WITH PSILI..GREEK CAPITAL LETTER EPSILON WITH DASIA AND OXIA 1F20..1F45 ; XID_Continue # L& [38] GREEK SMALL LETTER ETA WITH PSILI..GREEK SMALL LETTER OMICRON WITH DASIA AND OXIA @@ -9235,9 +9472,7 @@ FFDA..FFDC ; XID_Start # Lo [3] HALFWIDTH HANGUL LETTER EU..HALFWIDTH HANGU 2160..2182 ; XID_Continue # Nl [35] ROMAN NUMERAL ONE..ROMAN NUMERAL TEN THOUSAND 2183..2184 ; XID_Continue # L& [2] ROMAN NUMERAL REVERSED ONE HUNDRED..LATIN SMALL LETTER REVERSED C 2185..2188 ; XID_Continue # Nl [4] ROMAN NUMERAL SIX LATE FORM..ROMAN NUMERAL ONE HUNDRED THOUSAND -2C00..2C2E ; XID_Continue # L& [47] GLAGOLITIC CAPITAL LETTER AZU..GLAGOLITIC CAPITAL LETTER LATINATE MYSLITE -2C30..2C5E ; XID_Continue # L& [47] GLAGOLITIC SMALL LETTER AZU..GLAGOLITIC SMALL LETTER LATINATE MYSLITE -2C60..2C7B ; XID_Continue # L& [28] LATIN CAPITAL LETTER L WITH DOUBLE BAR..LATIN LETTER SMALL CAPITAL TURNED E +2C00..2C7B ; XID_Continue # L& [124] GLAGOLITIC CAPITAL LETTER AZU..LATIN LETTER SMALL CAPITAL TURNED E 2C7C..2C7D ; XID_Continue # Lm [2] LATIN SUBSCRIPT SMALL LETTER J..MODIFIER LETTER CAPITAL V 2C7E..2CE4 ; XID_Continue # L& [103] LATIN CAPITAL LETTER S WITH SWASH TAIL..COPTIC SYMBOL KAI 2CEB..2CEE ; XID_Continue # L& [4] COPTIC CAPITAL LETTER CRYPTOGRAMMIC SHEI..COPTIC SMALL LETTER CRYPTOGRAMMIC GANGIA @@ -9281,8 +9516,7 @@ FFDA..FFDC ; XID_Start # Lo [3] HALFWIDTH HANGUL LETTER EU..HALFWIDTH HANGU 31A0..31BF ; XID_Continue # Lo [32] BOPOMOFO LETTER BU..BOPOMOFO LETTER AH 31F0..31FF ; XID_Continue # Lo [16] KATAKANA LETTER SMALL KU..KATAKANA LETTER SMALL RO 3400..4DBF ; XID_Continue # Lo [6592] CJK UNIFIED IDEOGRAPH-3400..CJK UNIFIED IDEOGRAPH-4DBF -4E00..9FFC ; XID_Continue # Lo [20989] CJK UNIFIED IDEOGRAPH-4E00..CJK UNIFIED IDEOGRAPH-9FFC -A000..A014 ; XID_Continue # Lo [21] YI SYLLABLE IT..YI SYLLABLE E +4E00..A014 ; XID_Continue # Lo [21013] CJK UNIFIED IDEOGRAPH-4E00..YI SYLLABLE E A015 ; XID_Continue # Lm YI SYLLABLE WU A016..A48C ; XID_Continue # Lo [1143] YI SYLLABLE BIT..YI SYLLABLE YYR A4D0..A4F7 ; XID_Continue # Lo [40] LISU LETTER BA..LISU LETTER OE @@ -9310,8 +9544,11 @@ A771..A787 ; XID_Continue # L& [23] LATIN SMALL LETTER DUM..LATIN SMALL LETT A788 ; XID_Continue # Lm MODIFIER LETTER LOW CIRCUMFLEX ACCENT A78B..A78E ; XID_Continue # L& [4] LATIN CAPITAL LETTER SALTILLO..LATIN SMALL LETTER L WITH RETROFLEX HOOK AND BELT A78F ; XID_Continue # Lo LATIN LETTER SINOLOGICAL DOT -A790..A7BF ; XID_Continue # L& [48] LATIN CAPITAL LETTER N WITH DESCENDER..LATIN SMALL LETTER GLOTTAL U -A7C2..A7CA ; XID_Continue # L& [9] LATIN CAPITAL LETTER ANGLICANA W..LATIN SMALL LETTER S WITH SHORT STROKE OVERLAY +A790..A7CA ; XID_Continue # L& [59] LATIN CAPITAL LETTER N WITH DESCENDER..LATIN SMALL LETTER S WITH SHORT STROKE OVERLAY +A7D0..A7D1 ; XID_Continue # L& [2] LATIN CAPITAL LETTER CLOSED INSULAR G..LATIN SMALL LETTER CLOSED INSULAR G +A7D3 ; XID_Continue # L& LATIN SMALL LETTER DOUBLE THORN +A7D5..A7D9 ; XID_Continue # L& [5] LATIN SMALL LETTER DOUBLE WYNN..LATIN SMALL LETTER SIGMOID S +A7F2..A7F4 ; XID_Continue # Lm [3] MODIFIER LETTER CAPITAL C..MODIFIER LETTER CAPITAL Q A7F5..A7F6 ; XID_Continue # L& [2] LATIN CAPITAL LETTER REVERSED HALF H..LATIN SMALL LETTER REVERSED HALF H A7F7 ; XID_Continue # Lo LATIN EPIGRAPHIC LETTER SIDEWAYS I A7F8..A7F9 ; XID_Continue # Lm [2] MODIFIER LETTER CAPITAL H WITH STROKE..MODIFIER LETTER SMALL LIGATURE OE @@ -9496,9 +9733,20 @@ FFDA..FFDC ; XID_Continue # Lo [3] HALFWIDTH HANGUL LETTER EU..HALFWIDTH HA 104D8..104FB ; XID_Continue # L& [36] OSAGE SMALL LETTER A..OSAGE SMALL LETTER ZHA 10500..10527 ; XID_Continue # Lo [40] ELBASAN LETTER A..ELBASAN LETTER KHE 10530..10563 ; XID_Continue # Lo [52] CAUCASIAN ALBANIAN LETTER ALT..CAUCASIAN ALBANIAN LETTER KIW +10570..1057A ; XID_Continue # L& [11] VITHKUQI CAPITAL LETTER A..VITHKUQI CAPITAL LETTER GA +1057C..1058A ; XID_Continue # L& [15] VITHKUQI CAPITAL LETTER HA..VITHKUQI CAPITAL LETTER RE +1058C..10592 ; XID_Continue # L& [7] VITHKUQI CAPITAL LETTER SE..VITHKUQI CAPITAL LETTER XE +10594..10595 ; XID_Continue # L& [2] VITHKUQI CAPITAL LETTER Y..VITHKUQI CAPITAL LETTER ZE +10597..105A1 ; XID_Continue # L& [11] VITHKUQI SMALL LETTER A..VITHKUQI SMALL LETTER GA +105A3..105B1 ; XID_Continue # L& [15] VITHKUQI SMALL LETTER HA..VITHKUQI SMALL LETTER RE +105B3..105B9 ; XID_Continue # L& [7] VITHKUQI SMALL LETTER SE..VITHKUQI SMALL LETTER XE +105BB..105BC ; XID_Continue # L& [2] VITHKUQI SMALL LETTER Y..VITHKUQI SMALL LETTER ZE 10600..10736 ; XID_Continue # Lo [311] LINEAR A SIGN AB001..LINEAR A SIGN A664 10740..10755 ; XID_Continue # Lo [22] LINEAR A SIGN A701 A..LINEAR A SIGN A732 JE 10760..10767 ; XID_Continue # Lo [8] LINEAR A SIGN A800..LINEAR A SIGN A807 +10780..10785 ; XID_Continue # Lm [6] MODIFIER LETTER SMALL CAPITAL AA..MODIFIER LETTER SMALL B WITH HOOK +10787..107B0 ; XID_Continue # Lm [42] MODIFIER LETTER SMALL DZ DIGRAPH..MODIFIER LETTER SMALL V WITH RIGHT HOOK +107B2..107BA ; XID_Continue # Lm [9] MODIFIER LETTER SMALL CAPITAL Y..MODIFIER LETTER SMALL S WITH CURL 10800..10805 ; XID_Continue # Lo [6] CYPRIOT SYLLABLE A..CYPRIOT SYLLABLE JA 10808 ; XID_Continue # Lo CYPRIOT SYLLABLE JO 1080A..10835 ; XID_Continue # Lo [44] CYPRIOT SYLLABLE KA..CYPRIOT SYLLABLE WO @@ -9544,6 +9792,8 @@ FFDA..FFDC ; XID_Continue # Lo [3] HALFWIDTH HANGUL LETTER EU..HALFWIDTH HA 10F27 ; XID_Continue # Lo OLD SOGDIAN LIGATURE AYIN-DALETH 10F30..10F45 ; XID_Continue # Lo [22] SOGDIAN LETTER ALEPH..SOGDIAN INDEPENDENT SHIN 10F46..10F50 ; XID_Continue # Mn [11] SOGDIAN COMBINING DOT BELOW..SOGDIAN COMBINING STROKE BELOW +10F70..10F81 ; XID_Continue # Lo [18] OLD UYGHUR LETTER ALEPH..OLD UYGHUR LETTER LESH +10F82..10F85 ; XID_Continue # Mn [4] OLD UYGHUR COMBINING DOT ABOVE..OLD UYGHUR COMBINING TWO DOTS BELOW 10FB0..10FC4 ; XID_Continue # Lo [21] CHORASMIAN LETTER ALEPH..CHORASMIAN LETTER TAW 10FE0..10FF6 ; XID_Continue # Lo [23] ELYMAIC LETTER ALEPH..ELYMAIC LIGATURE ZAYIN-YODH 11000 ; XID_Continue # Mc BRAHMI SIGN CANDRABINDU @@ -9552,6 +9802,10 @@ FFDA..FFDC ; XID_Continue # Lo [3] HALFWIDTH HANGUL LETTER EU..HALFWIDTH HA 11003..11037 ; XID_Continue # Lo [53] BRAHMI SIGN JIHVAMULIYA..BRAHMI LETTER OLD TAMIL NNNA 11038..11046 ; XID_Continue # Mn [15] BRAHMI VOWEL SIGN AA..BRAHMI VIRAMA 11066..1106F ; XID_Continue # Nd [10] BRAHMI DIGIT ZERO..BRAHMI DIGIT NINE +11070 ; XID_Continue # Mn BRAHMI SIGN OLD TAMIL VIRAMA +11071..11072 ; XID_Continue # Lo [2] BRAHMI LETTER OLD TAMIL SHORT E..BRAHMI LETTER OLD TAMIL SHORT O +11073..11074 ; XID_Continue # Mn [2] BRAHMI VOWEL SIGN OLD TAMIL SHORT E..BRAHMI VOWEL SIGN OLD TAMIL SHORT O +11075 ; XID_Continue # Lo BRAHMI LETTER OLD TAMIL LLA 1107F..11081 ; XID_Continue # Mn [3] BRAHMI NUMBER JOINER..KAITHI SIGN ANUSVARA 11082 ; XID_Continue # Mc KAITHI SIGN VISARGA 11083..110AF ; XID_Continue # Lo [45] KAITHI LETTER A..KAITHI LETTER HA @@ -9559,6 +9813,7 @@ FFDA..FFDC ; XID_Continue # Lo [3] HALFWIDTH HANGUL LETTER EU..HALFWIDTH HA 110B3..110B6 ; XID_Continue # Mn [4] KAITHI VOWEL SIGN U..KAITHI VOWEL SIGN AI 110B7..110B8 ; XID_Continue # Mc [2] KAITHI VOWEL SIGN O..KAITHI VOWEL SIGN AU 110B9..110BA ; XID_Continue # Mn [2] KAITHI SIGN VIRAMA..KAITHI SIGN NUKTA +110C2 ; XID_Continue # Mn KAITHI VOWEL SIGN VOCALIC R 110D0..110E8 ; XID_Continue # Lo [25] SORA SOMPENG LETTER SAH..SORA SOMPENG LETTER MAE 110F0..110F9 ; XID_Continue # Nd [10] SORA SOMPENG DIGIT ZERO..SORA SOMPENG DIGIT NINE 11100..11102 ; XID_Continue # Mn [3] CHAKMA SIGN CANDRABINDU..CHAKMA SIGN VISARGA @@ -9684,6 +9939,7 @@ FFDA..FFDC ; XID_Continue # Lo [3] HALFWIDTH HANGUL LETTER EU..HALFWIDTH HA 11726 ; XID_Continue # Mc AHOM VOWEL SIGN E 11727..1172B ; XID_Continue # Mn [5] AHOM VOWEL SIGN AW..AHOM SIGN KILLER 11730..11739 ; XID_Continue # Nd [10] AHOM DIGIT ZERO..AHOM DIGIT NINE +11740..11746 ; XID_Continue # Lo [7] AHOM LETTER CA..AHOM LETTER LLA 11800..1182B ; XID_Continue # Lo [44] DOGRA LETTER A..DOGRA LETTER RRA 1182C..1182E ; XID_Continue # Mc [3] DOGRA VOWEL SIGN AA..DOGRA VOWEL SIGN II 1182F..11837 ; XID_Continue # Mn [9] DOGRA VOWEL SIGN U..DOGRA SIGN ANUSVARA @@ -9734,7 +9990,7 @@ FFDA..FFDC ; XID_Continue # Lo [3] HALFWIDTH HANGUL LETTER EU..HALFWIDTH HA 11A97 ; XID_Continue # Mc SOYOMBO SIGN VISARGA 11A98..11A99 ; XID_Continue # Mn [2] SOYOMBO GEMINATION MARK..SOYOMBO SUBJOINER 11A9D ; XID_Continue # Lo SOYOMBO MARK PLUTA -11AC0..11AF8 ; XID_Continue # Lo [57] PAU CIN HAU LETTER PA..PAU CIN HAU GLOTTAL STOP FINAL +11AB0..11AF8 ; XID_Continue # Lo [73] CANADIAN SYLLABICS NATTILIK HI..PAU CIN HAU GLOTTAL STOP FINAL 11C00..11C08 ; XID_Continue # Lo [9] BHAIKSUKI LETTER A..BHAIKSUKI LETTER VOCALIC L 11C0A..11C2E ; XID_Continue # Lo [37] BHAIKSUKI LETTER E..BHAIKSUKI LETTER HA 11C2F ; XID_Continue # Mc BHAIKSUKI VOWEL SIGN AA @@ -9780,11 +10036,14 @@ FFDA..FFDC ; XID_Continue # Lo [3] HALFWIDTH HANGUL LETTER EU..HALFWIDTH HA 12000..12399 ; XID_Continue # Lo [922] CUNEIFORM SIGN A..CUNEIFORM SIGN U U 12400..1246E ; XID_Continue # Nl [111] CUNEIFORM NUMERIC SIGN TWO ASH..CUNEIFORM NUMERIC SIGN NINE U VARIANT FORM 12480..12543 ; XID_Continue # Lo [196] CUNEIFORM SIGN AB TIMES NUN TENU..CUNEIFORM SIGN ZU5 TIMES THREE DISH TENU +12F90..12FF0 ; XID_Continue # Lo [97] CYPRO-MINOAN SIGN CM001..CYPRO-MINOAN SIGN CM114 13000..1342E ; XID_Continue # Lo [1071] EGYPTIAN HIEROGLYPH A001..EGYPTIAN HIEROGLYPH AA032 14400..14646 ; XID_Continue # Lo [583] ANATOLIAN HIEROGLYPH A001..ANATOLIAN HIEROGLYPH A530 16800..16A38 ; XID_Continue # Lo [569] BAMUM LETTER PHASE-A NGKUE MFON..BAMUM LETTER PHASE-F VUEQ 16A40..16A5E ; XID_Continue # Lo [31] MRO LETTER TA..MRO LETTER TEK 16A60..16A69 ; XID_Continue # Nd [10] MRO DIGIT ZERO..MRO DIGIT NINE +16A70..16ABE ; XID_Continue # Lo [79] TANGSA LETTER OZ..TANGSA LETTER ZA +16AC0..16AC9 ; XID_Continue # Nd [10] TANGSA DIGIT ZERO..TANGSA DIGIT NINE 16AD0..16AED ; XID_Continue # Lo [30] BASSA VAH LETTER ENNI..BASSA VAH LETTER I 16AF0..16AF4 ; XID_Continue # Mn [5] BASSA VAH COMBINING HIGH TONE..BASSA VAH COMBINING HIGH-LOW TONE 16B00..16B2F ; XID_Continue # Lo [48] PAHAWH HMONG VOWEL KEEB..PAHAWH HMONG CONSONANT CAU @@ -9807,7 +10066,10 @@ FFDA..FFDC ; XID_Continue # Lo [3] HALFWIDTH HANGUL LETTER EU..HALFWIDTH HA 17000..187F7 ; XID_Continue # Lo [6136] TANGUT IDEOGRAPH-17000..TANGUT IDEOGRAPH-187F7 18800..18CD5 ; XID_Continue # Lo [1238] TANGUT COMPONENT-001..KHITAN SMALL SCRIPT CHARACTER-18CD5 18D00..18D08 ; XID_Continue # Lo [9] TANGUT IDEOGRAPH-18D00..TANGUT IDEOGRAPH-18D08 -1B000..1B11E ; XID_Continue # Lo [287] KATAKANA LETTER ARCHAIC E..HENTAIGANA LETTER N-MU-MO-2 +1AFF0..1AFF3 ; XID_Continue # Lm [4] KATAKANA LETTER MINNAN TONE-2..KATAKANA LETTER MINNAN TONE-5 +1AFF5..1AFFB ; XID_Continue # Lm [7] KATAKANA LETTER MINNAN TONE-7..KATAKANA LETTER MINNAN NASALIZED TONE-5 +1AFFD..1AFFE ; XID_Continue # Lm [2] KATAKANA LETTER MINNAN NASALIZED TONE-7..KATAKANA LETTER MINNAN NASALIZED TONE-8 +1B000..1B122 ; XID_Continue # Lo [291] KATAKANA LETTER ARCHAIC E..KATAKANA LETTER ARCHAIC WU 1B150..1B152 ; XID_Continue # Lo [3] HIRAGANA LETTER SMALL WI..HIRAGANA LETTER SMALL WO 1B164..1B167 ; XID_Continue # Lo [4] KATAKANA LETTER SMALL WI..KATAKANA LETTER SMALL N 1B170..1B2FB ; XID_Continue # Lo [396] NUSHU CHARACTER-1B170..NUSHU CHARACTER-1B2FB @@ -9816,6 +10078,8 @@ FFDA..FFDC ; XID_Continue # Lo [3] HALFWIDTH HANGUL LETTER EU..HALFWIDTH HA 1BC80..1BC88 ; XID_Continue # Lo [9] DUPLOYAN AFFIX HIGH ACUTE..DUPLOYAN AFFIX HIGH VERTICAL 1BC90..1BC99 ; XID_Continue # Lo [10] DUPLOYAN AFFIX LOW ACUTE..DUPLOYAN AFFIX LOW ARROW 1BC9D..1BC9E ; XID_Continue # Mn [2] DUPLOYAN THICK LETTER SELECTOR..DUPLOYAN DOUBLE MARK +1CF00..1CF2D ; XID_Continue # Mn [46] ZNAMENNY COMBINING MARK GORAZDO NIZKO S KRYZHEM ON LEFT..ZNAMENNY COMBINING MARK KRYZH ON LEFT +1CF30..1CF46 ; XID_Continue # Mn [23] ZNAMENNY COMBINING TONAL RANGE MARK MRACHNO..ZNAMENNY PRIZNAK MODIFIER ROG 1D165..1D166 ; XID_Continue # Mc [2] MUSICAL SYMBOL COMBINING STEM..MUSICAL SYMBOL COMBINING SPRECHGESANG STEM 1D167..1D169 ; XID_Continue # Mn [3] MUSICAL SYMBOL COMBINING TREMOLO-1..MUSICAL SYMBOL COMBINING TREMOLO-3 1D16D..1D172 ; XID_Continue # Mc [6] MUSICAL SYMBOL COMBINING AUGMENTATION DOT..MUSICAL SYMBOL COMBINING FLAG-5 @@ -9860,6 +10124,9 @@ FFDA..FFDC ; XID_Continue # Lo [3] HALFWIDTH HANGUL LETTER EU..HALFWIDTH HA 1DA84 ; XID_Continue # Mn SIGNWRITING LOCATION HEAD NECK 1DA9B..1DA9F ; XID_Continue # Mn [5] SIGNWRITING FILL MODIFIER-2..SIGNWRITING FILL MODIFIER-6 1DAA1..1DAAF ; XID_Continue # Mn [15] SIGNWRITING ROTATION MODIFIER-2..SIGNWRITING ROTATION MODIFIER-16 +1DF00..1DF09 ; XID_Continue # L& [10] LATIN SMALL LETTER FENG DIGRAPH WITH TRILL..LATIN SMALL LETTER T WITH HOOK AND RETROFLEX HOOK +1DF0A ; XID_Continue # Lo LATIN LETTER RETROFLEX CLICK WITH RETROFLEX HOOK +1DF0B..1DF1E ; XID_Continue # L& [20] LATIN SMALL LETTER ESH WITH DOUBLE BAR..LATIN SMALL LETTER S WITH CURL 1E000..1E006 ; XID_Continue # Mn [7] COMBINING GLAGOLITIC LETTER AZU..COMBINING GLAGOLITIC LETTER ZHIVETE 1E008..1E018 ; XID_Continue # Mn [17] COMBINING GLAGOLITIC LETTER ZEMLJA..COMBINING GLAGOLITIC LETTER HERU 1E01B..1E021 ; XID_Continue # Mn [7] COMBINING GLAGOLITIC LETTER SHTA..COMBINING GLAGOLITIC LETTER YATI @@ -9870,9 +10137,15 @@ FFDA..FFDC ; XID_Continue # Lo [3] HALFWIDTH HANGUL LETTER EU..HALFWIDTH HA 1E137..1E13D ; XID_Continue # Lm [7] NYIAKENG PUACHUE HMONG SIGN FOR PERSON..NYIAKENG PUACHUE HMONG SYLLABLE LENGTHENER 1E140..1E149 ; XID_Continue # Nd [10] NYIAKENG PUACHUE HMONG DIGIT ZERO..NYIAKENG PUACHUE HMONG DIGIT NINE 1E14E ; XID_Continue # Lo NYIAKENG PUACHUE HMONG LOGOGRAM NYAJ +1E290..1E2AD ; XID_Continue # Lo [30] TOTO LETTER PA..TOTO LETTER A +1E2AE ; XID_Continue # Mn TOTO SIGN RISING TONE 1E2C0..1E2EB ; XID_Continue # Lo [44] WANCHO LETTER AA..WANCHO LETTER YIH 1E2EC..1E2EF ; XID_Continue # Mn [4] WANCHO TONE TUP..WANCHO TONE KOINI 1E2F0..1E2F9 ; XID_Continue # Nd [10] WANCHO DIGIT ZERO..WANCHO DIGIT NINE +1E7E0..1E7E6 ; XID_Continue # Lo [7] ETHIOPIC SYLLABLE HHYA..ETHIOPIC SYLLABLE HHYO +1E7E8..1E7EB ; XID_Continue # Lo [4] ETHIOPIC SYLLABLE GURAGE HHWA..ETHIOPIC SYLLABLE HHWE +1E7ED..1E7EE ; XID_Continue # Lo [2] ETHIOPIC SYLLABLE GURAGE MWI..ETHIOPIC SYLLABLE GURAGE MWEE +1E7F0..1E7FE ; XID_Continue # Lo [15] ETHIOPIC SYLLABLE GURAGE QWI..ETHIOPIC SYLLABLE GURAGE PWEE 1E800..1E8C4 ; XID_Continue # Lo [197] MENDE KIKAKUI SYLLABLE M001 KI..MENDE KIKAKUI SYLLABLE M060 NYON 1E8D0..1E8D6 ; XID_Continue # Mn [7] MENDE KIKAKUI COMBINING NUMBER TEENS..MENDE KIKAKUI COMBINING NUMBER MILLIONS 1E900..1E943 ; XID_Continue # L& [68] ADLAM CAPITAL LETTER ALIF..ADLAM SMALL LETTER SHA @@ -9913,8 +10186,8 @@ FFDA..FFDC ; XID_Continue # Lo [3] HALFWIDTH HANGUL LETTER EU..HALFWIDTH HA 1EEA5..1EEA9 ; XID_Continue # Lo [5] ARABIC MATHEMATICAL DOUBLE-STRUCK WAW..ARABIC MATHEMATICAL DOUBLE-STRUCK YEH 1EEAB..1EEBB ; XID_Continue # Lo [17] ARABIC MATHEMATICAL DOUBLE-STRUCK LAM..ARABIC MATHEMATICAL DOUBLE-STRUCK GHAIN 1FBF0..1FBF9 ; XID_Continue # Nd [10] SEGMENTED DIGIT ZERO..SEGMENTED DIGIT NINE -20000..2A6DD ; XID_Continue # Lo [42718] CJK UNIFIED IDEOGRAPH-20000..CJK UNIFIED IDEOGRAPH-2A6DD -2A700..2B734 ; XID_Continue # Lo [4149] CJK UNIFIED IDEOGRAPH-2A700..CJK UNIFIED IDEOGRAPH-2B734 +20000..2A6DF ; XID_Continue # Lo [42720] CJK UNIFIED IDEOGRAPH-20000..CJK UNIFIED IDEOGRAPH-2A6DF +2A700..2B738 ; XID_Continue # Lo [4153] CJK UNIFIED IDEOGRAPH-2A700..CJK UNIFIED IDEOGRAPH-2B738 2B740..2B81D ; XID_Continue # Lo [222] CJK UNIFIED IDEOGRAPH-2B740..CJK UNIFIED IDEOGRAPH-2B81D 2B820..2CEA1 ; XID_Continue # Lo [5762] CJK UNIFIED IDEOGRAPH-2B820..CJK UNIFIED IDEOGRAPH-2CEA1 2CEB0..2EBE0 ; XID_Continue # Lo [7473] CJK UNIFIED IDEOGRAPH-2CEB0..CJK UNIFIED IDEOGRAPH-2EBE0 @@ -9922,7 +10195,7 @@ FFDA..FFDC ; XID_Continue # Lo [3] HALFWIDTH HANGUL LETTER EU..HALFWIDTH HA 30000..3134A ; XID_Continue # Lo [4939] CJK UNIFIED IDEOGRAPH-30000..CJK UNIFIED IDEOGRAPH-3134A E0100..E01EF ; XID_Continue # Mn [240] VARIATION SELECTOR-17..VARIATION SELECTOR-256 -# Total code points: 134415 +# Total code points: 135053 # ================================================ @@ -9943,6 +10216,7 @@ E0100..E01EF ; XID_Continue # Mn [240] VARIATION SELECTOR-17..VARIATION SELECTO 17B4..17B5 ; Default_Ignorable_Code_Point # Mn [2] KHMER VOWEL INHERENT AQ..KHMER VOWEL INHERENT AA 180B..180D ; Default_Ignorable_Code_Point # Mn [3] MONGOLIAN FREE VARIATION SELECTOR ONE..MONGOLIAN FREE VARIATION SELECTOR THREE 180E ; Default_Ignorable_Code_Point # Cf MONGOLIAN VOWEL SEPARATOR +180F ; Default_Ignorable_Code_Point # Mn MONGOLIAN FREE VARIATION SELECTOR FOUR 200B..200F ; Default_Ignorable_Code_Point # Cf [5] ZERO WIDTH SPACE..RIGHT-TO-LEFT MARK 202A..202E ; Default_Ignorable_Code_Point # Cf [5] LEFT-TO-RIGHT EMBEDDING..RIGHT-TO-LEFT OVERRIDE 2060..2064 ; Default_Ignorable_Code_Point # Cf [5] WORD JOINER..INVISIBLE PLUS @@ -9963,7 +10237,7 @@ E0080..E00FF ; Default_Ignorable_Code_Point # Cn [128] .... -# Total code points: 4173 +# Total code points: 4174 # ================================================ @@ -9997,7 +10271,8 @@ E01F0..E0FFF ; Default_Ignorable_Code_Point # Cn [3600] ............ @@ -3523,6 +3534,7 @@ FFE3 ; Expands_On_NFKC # Sk FULLWIDTH MACRON 17B4..17B5 ; NFKC_CF; # Mn [2] KHMER VOWEL INHERENT AQ..KHMER VOWEL INHERENT AA 180B..180D ; NFKC_CF; # Mn [3] MONGOLIAN FREE VARIATION SELECTOR ONE..MONGOLIAN FREE VARIATION SELECTOR THREE 180E ; NFKC_CF; # Cf MONGOLIAN VOWEL SEPARATOR +180F ; NFKC_CF; # Mn MONGOLIAN FREE VARIATION SELECTOR FOUR 1C80 ; NFKC_CF; 0432 # L& CYRILLIC SMALL LETTER ROUNDED VE 1C81 ; NFKC_CF; 0434 # L& CYRILLIC SMALL LETTER LONG-LEGGED DE 1C82 ; NFKC_CF; 043E # L& CYRILLIC SMALL LETTER NARROW O @@ -4318,6 +4330,7 @@ FFE3 ; Expands_On_NFKC # Sk FULLWIDTH MACRON 2C2C ; NFKC_CF; 2C5C # L& GLAGOLITIC CAPITAL LETTER SHTAPIC 2C2D ; NFKC_CF; 2C5D # L& GLAGOLITIC CAPITAL LETTER TROKUTASTI A 2C2E ; NFKC_CF; 2C5E # L& GLAGOLITIC CAPITAL LETTER LATINATE MYSLITE +2C2F ; NFKC_CF; 2C5F # L& GLAGOLITIC CAPITAL LETTER CAUDATE CHRIVI 2C60 ; NFKC_CF; 2C61 # L& LATIN CAPITAL LETTER L WITH DOUBLE BAR 2C62 ; NFKC_CF; 026B # L& LATIN CAPITAL LETTER L WITH MIDDLE TILDE 2C63 ; NFKC_CF; 1D7D # L& LATIN CAPITAL LETTER P WITH STROKE @@ -5339,12 +5352,19 @@ A7B8 ; NFKC_CF; A7B9 # L& LATIN CAPITAL LETTER U WITH S A7BA ; NFKC_CF; A7BB # L& LATIN CAPITAL LETTER GLOTTAL A A7BC ; NFKC_CF; A7BD # L& LATIN CAPITAL LETTER GLOTTAL I A7BE ; NFKC_CF; A7BF # L& LATIN CAPITAL LETTER GLOTTAL U +A7C0 ; NFKC_CF; A7C1 # L& LATIN CAPITAL LETTER OLD POLISH O A7C2 ; NFKC_CF; A7C3 # L& LATIN CAPITAL LETTER ANGLICANA W A7C4 ; NFKC_CF; A794 # L& LATIN CAPITAL LETTER C WITH PALATAL HOOK A7C5 ; NFKC_CF; 0282 # L& LATIN CAPITAL LETTER S WITH HOOK A7C6 ; NFKC_CF; 1D8E # L& LATIN CAPITAL LETTER Z WITH PALATAL HOOK A7C7 ; NFKC_CF; A7C8 # L& LATIN CAPITAL LETTER D WITH SHORT STROKE OVERLAY A7C9 ; NFKC_CF; A7CA # L& LATIN CAPITAL LETTER S WITH SHORT STROKE OVERLAY +A7D0 ; NFKC_CF; A7D1 # L& LATIN CAPITAL LETTER CLOSED INSULAR G +A7D6 ; NFKC_CF; A7D7 # L& LATIN CAPITAL LETTER MIDDLE SCOTS S +A7D8 ; NFKC_CF; A7D9 # L& LATIN CAPITAL LETTER SIGMOID S +A7F2 ; NFKC_CF; 0063 # Lm MODIFIER LETTER CAPITAL C +A7F3 ; NFKC_CF; 0066 # Lm MODIFIER LETTER CAPITAL F +A7F4 ; NFKC_CF; 0071 # Lm MODIFIER LETTER CAPITAL Q A7F5 ; NFKC_CF; A7F6 # L& LATIN CAPITAL LETTER REVERSED HALF H A7F8 ; NFKC_CF; 0127 # Lm MODIFIER LETTER CAPITAL H WITH STROKE A7F9 ; NFKC_CF; 0153 # Lm MODIFIER LETTER SMALL LIGATURE OE @@ -6845,6 +6865,97 @@ FFF0..FFF8 ; NFKC_CF; # Cn [9] ...... -# Total code points: 10329 +# Total code points: 10429 # ================================================ @@ -9164,6 +9275,7 @@ E01F0..E0FFF ; NFKC_CF; # Cn [3600] ...... 10400..10427 ; Changes_When_NFKC_Casefolded # L& [40] DESERET CAPITAL LETTER LONG I..DESERET CAPITAL LETTER EW 104B0..104D3 ; Changes_When_NFKC_Casefolded # L& [36] OSAGE CAPITAL LETTER A..OSAGE CAPITAL LETTER ZHA +10570..1057A ; Changes_When_NFKC_Casefolded # L& [11] VITHKUQI CAPITAL LETTER A..VITHKUQI CAPITAL LETTER GA +1057C..1058A ; Changes_When_NFKC_Casefolded # L& [15] VITHKUQI CAPITAL LETTER HA..VITHKUQI CAPITAL LETTER RE +1058C..10592 ; Changes_When_NFKC_Casefolded # L& [7] VITHKUQI CAPITAL LETTER SE..VITHKUQI CAPITAL LETTER XE +10594..10595 ; Changes_When_NFKC_Casefolded # L& [2] VITHKUQI CAPITAL LETTER Y..VITHKUQI CAPITAL LETTER ZE +10781..10785 ; Changes_When_NFKC_Casefolded # Lm [5] MODIFIER LETTER SUPERSCRIPT TRIANGULAR COLON..MODIFIER LETTER SMALL B WITH HOOK +10787..107B0 ; Changes_When_NFKC_Casefolded # Lm [42] MODIFIER LETTER SMALL DZ DIGRAPH..MODIFIER LETTER SMALL V WITH RIGHT HOOK +107B2..107BA ; Changes_When_NFKC_Casefolded # Lm [9] MODIFIER LETTER SMALL CAPITAL Y..MODIFIER LETTER SMALL S WITH CURL 10C80..10CB2 ; Changes_When_NFKC_Casefolded # L& [51] OLD HUNGARIAN CAPITAL LETTER A..OLD HUNGARIAN CAPITAL LETTER US 118A0..118BF ; Changes_When_NFKC_Casefolded # L& [32] WARANG CITI CAPITAL LETTER NGAA..WARANG CITI CAPITAL LETTER VIYO 16E40..16E5F ; Changes_When_NFKC_Casefolded # L& [32] MEDEFAIDRIN CAPITAL LETTER M..MEDEFAIDRIN CAPITAL LETTER Y @@ -9824,6 +9948,6 @@ E0080..E00FF ; Changes_When_NFKC_Casefolded # Cn [128] .... -# Total code points: 10329 +# Total code points: 10429 # EOF diff --git a/gnu/usr.bin/perl/lib/unicore/EastAsianWidth.txt b/gnu/usr.bin/perl/lib/unicore/EastAsianWidth.txt index b43aec92738..e04f7051783 100644 --- a/gnu/usr.bin/perl/lib/unicore/EastAsianWidth.txt +++ b/gnu/usr.bin/perl/lib/unicore/EastAsianWidth.txt @@ -1,11 +1,11 @@ -# EastAsianWidth-13.0.0.txt -# Date: 2029-01-21, 18:14:00 GMT [KW, LI] -# © 2020 Unicode®, Inc. +# EastAsianWidth-14.0.0.txt +# Date: 2021-07-06, 09:58:53 GMT [KW, LI] +# © 2021 Unicode®, Inc. # Unicode and the Unicode Logo are registered trademarks of Unicode, Inc. in the U.S. and other countries. -# For terms of use, see http://www.unicode.org/terms_of_use.html +# For terms of use, see https://www.unicode.org/terms_of_use.html # # Unicode Character Database -# For documentation, see http://www.unicode.org/reports/tr44/ +# For documentation, see https://www.unicode.org/reports/tr44/ # # East_Asian_Width Property # @@ -37,7 +37,7 @@ # with ranges of code points, the code point count in square brackets. # # For more information, see UAX #11: East Asian Width, -# at http://www.unicode.org/reports/tr11/ +# at https://www.unicode.org/reports/tr11/ # # @missing: 0000..10FFFF; N 0000..001F;N # Cc [32] .. @@ -273,7 +273,7 @@ 0610..061A;N # Mn [11] ARABIC SIGN SALLALLAHOU ALAYHE WASSALLAM..ARABIC SMALL KASRA 061B;N # Po ARABIC SEMICOLON 061C;N # Cf ARABIC LETTER MARK -061E..061F;N # Po [2] ARABIC TRIPLE DOT PUNCTUATION MARK..ARABIC QUESTION MARK +061D..061F;N # Po [3] ARABIC END OF TEXT MARK..ARABIC QUESTION MARK 0620..063F;N # Lo [32] ARABIC LETTER KASHMIRI YEH..ARABIC LETTER FARSI YEH WITH THREE DOTS ABOVE 0640;N # Lm ARABIC TATWEEL 0641..064A;N # Lo [10] ARABIC LETTER FEH..ARABIC LETTER YEH @@ -331,9 +331,14 @@ 0859..085B;N # Mn [3] MANDAIC AFFRICATION MARK..MANDAIC GEMINATION MARK 085E;N # Po MANDAIC PUNCTUATION 0860..086A;N # Lo [11] SYRIAC LETTER MALAYALAM NGA..SYRIAC LETTER MALAYALAM SSA -08A0..08B4;N # Lo [21] ARABIC LETTER BEH WITH SMALL V BELOW..ARABIC LETTER KAF WITH DOT BELOW -08B6..08C7;N # Lo [18] ARABIC LETTER BEH WITH SMALL MEEM ABOVE..ARABIC LETTER LAM WITH SMALL ARABIC LETTER TAH ABOVE -08D3..08E1;N # Mn [15] ARABIC SMALL LOW WAW..ARABIC SMALL HIGH SIGN SAFHA +0870..0887;N # Lo [24] ARABIC LETTER ALEF WITH ATTACHED FATHA..ARABIC BASELINE ROUND DOT +0888;N # Sk ARABIC RAISED ROUND DOT +0889..088E;N # Lo [6] ARABIC LETTER NOON WITH INVERTED SMALL V..ARABIC VERTICAL TAIL +0890..0891;N # Cf [2] ARABIC POUND MARK ABOVE..ARABIC PIASTRE MARK ABOVE +0898..089F;N # Mn [8] ARABIC SMALL HIGH WORD AL-JUZ..ARABIC HALF MADDA OVER MADDA +08A0..08C8;N # Lo [41] ARABIC LETTER BEH WITH SMALL V BELOW..ARABIC LETTER GRAF +08C9;N # Lm ARABIC SMALL FARSI YEH +08CA..08E1;N # Mn [24] ARABIC SMALL HIGH FARSI YEH..ARABIC SMALL HIGH SIGN SAFHA 08E2;N # Cf ARABIC DISPUTED END OF AYAH 08E3..08FF;N # Mn [29] ARABIC TURNED DAMMA BELOW..ARABIC MARK SIDEWAYS NOON GHUNNA 0900..0902;N # Mn [3] DEVANAGARI SIGN INVERTED CANDRABINDU..DEVANAGARI SIGN ANUSVARA @@ -490,6 +495,7 @@ 0C0E..0C10;N # Lo [3] TELUGU LETTER E..TELUGU LETTER AI 0C12..0C28;N # Lo [23] TELUGU LETTER O..TELUGU LETTER NA 0C2A..0C39;N # Lo [16] TELUGU LETTER PA..TELUGU LETTER HA +0C3C;N # Mn TELUGU SIGN NUKTA 0C3D;N # Lo TELUGU SIGN AVAGRAHA 0C3E..0C40;N # Mn [3] TELUGU VOWEL SIGN AA..TELUGU VOWEL SIGN II 0C41..0C44;N # Mc [4] TELUGU VOWEL SIGN U..TELUGU VOWEL SIGN VOCALIC RR @@ -497,6 +503,7 @@ 0C4A..0C4D;N # Mn [4] TELUGU VOWEL SIGN O..TELUGU SIGN VIRAMA 0C55..0C56;N # Mn [2] TELUGU LENGTH MARK..TELUGU AI LENGTH MARK 0C58..0C5A;N # Lo [3] TELUGU LETTER TSA..TELUGU LETTER RRRA +0C5D;N # Lo TELUGU LETTER NAKAARA POLLU 0C60..0C61;N # Lo [2] TELUGU LETTER VOCALIC RR..TELUGU LETTER VOCALIC LL 0C62..0C63;N # Mn [2] TELUGU VOWEL SIGN VOCALIC L..TELUGU VOWEL SIGN VOCALIC LL 0C66..0C6F;N # Nd [10] TELUGU DIGIT ZERO..TELUGU DIGIT NINE @@ -522,7 +529,7 @@ 0CCA..0CCB;N # Mc [2] KANNADA VOWEL SIGN O..KANNADA VOWEL SIGN OO 0CCC..0CCD;N # Mn [2] KANNADA VOWEL SIGN AU..KANNADA SIGN VIRAMA 0CD5..0CD6;N # Mc [2] KANNADA LENGTH MARK..KANNADA AI LENGTH MARK -0CDE;N # Lo KANNADA LETTER FA +0CDD..0CDE;N # Lo [2] KANNADA LETTER NAKAARA POLLU..KANNADA LETTER FA 0CE0..0CE1;N # Lo [2] KANNADA LETTER VOCALIC RR..KANNADA LETTER VOCALIC LL 0CE2..0CE3;N # Mn [2] KANNADA VOWEL SIGN VOCALIC L..KANNADA VOWEL SIGN VOCALIC LL 0CE6..0CEF;N # Nd [10] KANNADA DIGIT ZERO..KANNADA DIGIT NINE @@ -709,11 +716,13 @@ 16EB..16ED;N # Po [3] RUNIC SINGLE PUNCTUATION..RUNIC CROSS PUNCTUATION 16EE..16F0;N # Nl [3] RUNIC ARLAUG SYMBOL..RUNIC BELGTHOR SYMBOL 16F1..16F8;N # Lo [8] RUNIC LETTER K..RUNIC LETTER FRANKS CASKET AESC -1700..170C;N # Lo [13] TAGALOG LETTER A..TAGALOG LETTER YA -170E..1711;N # Lo [4] TAGALOG LETTER LA..TAGALOG LETTER HA +1700..1711;N # Lo [18] TAGALOG LETTER A..TAGALOG LETTER HA 1712..1714;N # Mn [3] TAGALOG VOWEL SIGN I..TAGALOG SIGN VIRAMA +1715;N # Mc TAGALOG SIGN PAMUDPOD +171F;N # Lo TAGALOG LETTER ARCHAIC RA 1720..1731;N # Lo [18] HANUNOO LETTER A..HANUNOO LETTER HA -1732..1734;N # Mn [3] HANUNOO VOWEL SIGN I..HANUNOO SIGN PAMUDPOD +1732..1733;N # Mn [2] HANUNOO VOWEL SIGN I..HANUNOO VOWEL SIGN U +1734;N # Mc HANUNOO SIGN PAMUDPOD 1735..1736;N # Po [2] PHILIPPINE SINGLE PUNCTUATION..PHILIPPINE DOUBLE PUNCTUATION 1740..1751;N # Lo [18] BUHID LETTER A..BUHID LETTER HA 1752..1753;N # Mn [2] BUHID VOWEL SIGN I..BUHID VOWEL SIGN U @@ -741,6 +750,7 @@ 1807..180A;N # Po [4] MONGOLIAN SIBE SYLLABLE BOUNDARY MARKER..MONGOLIAN NIRUGU 180B..180D;N # Mn [3] MONGOLIAN FREE VARIATION SELECTOR ONE..MONGOLIAN FREE VARIATION SELECTOR THREE 180E;N # Cf MONGOLIAN VOWEL SEPARATOR +180F;N # Mn MONGOLIAN FREE VARIATION SELECTOR FOUR 1810..1819;N # Nd [10] MONGOLIAN DIGIT ZERO..MONGOLIAN DIGIT NINE 1820..1842;N # Lo [35] MONGOLIAN LETTER A..MONGOLIAN LETTER CHI 1843;N # Lm MONGOLIAN LETTER TODO LONG VOWEL SIGN @@ -796,7 +806,7 @@ 1AA8..1AAD;N # Po [6] TAI THAM SIGN KAAN..TAI THAM SIGN CAANG 1AB0..1ABD;N # Mn [14] COMBINING DOUBLED CIRCUMFLEX ACCENT..COMBINING PARENTHESES BELOW 1ABE;N # Me COMBINING PARENTHESES OVERLAY -1ABF..1AC0;N # Mn [2] COMBINING LATIN SMALL LETTER W BELOW..COMBINING LATIN SMALL LETTER TURNED W BELOW +1ABF..1ACE;N # Mn [16] COMBINING LATIN SMALL LETTER W BELOW..COMBINING LATIN SMALL LETTER INSULAR T 1B00..1B03;N # Mn [4] BALINESE SIGN ULU RICEM..BALINESE SIGN SURANG 1B04;N # Mc BALINESE SIGN BISAH 1B05..1B33;N # Lo [47] BALINESE LETTER AKARA..BALINESE LETTER HA @@ -808,12 +818,13 @@ 1B3D..1B41;N # Mc [5] BALINESE VOWEL SIGN LA LENGA TEDUNG..BALINESE VOWEL SIGN TALING REPA TEDUNG 1B42;N # Mn BALINESE VOWEL SIGN PEPET 1B43..1B44;N # Mc [2] BALINESE VOWEL SIGN PEPET TEDUNG..BALINESE ADEG ADEG -1B45..1B4B;N # Lo [7] BALINESE LETTER KAF SASAK..BALINESE LETTER ASYURA SASAK +1B45..1B4C;N # Lo [8] BALINESE LETTER KAF SASAK..BALINESE LETTER ARCHAIC JNYA 1B50..1B59;N # Nd [10] BALINESE DIGIT ZERO..BALINESE DIGIT NINE 1B5A..1B60;N # Po [7] BALINESE PANTI..BALINESE PAMENENG 1B61..1B6A;N # So [10] BALINESE MUSICAL SYMBOL DONG..BALINESE MUSICAL SYMBOL DANG GEDE 1B6B..1B73;N # Mn [9] BALINESE MUSICAL SYMBOL COMBINING TEGEH..BALINESE MUSICAL SYMBOL COMBINING GONG 1B74..1B7C;N # So [9] BALINESE MUSICAL SYMBOL RIGHT-HAND OPEN DUG..BALINESE MUSICAL SYMBOL LEFT-HAND OPEN PING +1B7D..1B7E;N # Po [2] BALINESE PANTI LANTANG..BALINESE PAMADA LANTANG 1B80..1B81;N # Mn [2] SUNDANESE SIGN PANYECEK..SUNDANESE SIGN PANGLAYAR 1B82;N # Mc SUNDANESE SIGN PANGWISAD 1B83..1BA0;N # Lo [30] SUNDANESE LETTER A..SUNDANESE LETTER HA @@ -872,8 +883,7 @@ 1D79..1D7F;N # Ll [7] LATIN SMALL LETTER INSULAR G..LATIN SMALL LETTER UPSILON WITH STROKE 1D80..1D9A;N # Ll [27] LATIN SMALL LETTER B WITH PALATAL HOOK..LATIN SMALL LETTER EZH WITH RETROFLEX HOOK 1D9B..1DBF;N # Lm [37] MODIFIER LETTER SMALL TURNED ALPHA..MODIFIER LETTER SMALL THETA -1DC0..1DF9;N # Mn [58] COMBINING DOTTED GRAVE ACCENT..COMBINING WIDE INVERTED BRIDGE BELOW -1DFB..1DFF;N # Mn [5] COMBINING DELETION MARK..COMBINING RIGHT ARROWHEAD AND DOWN ARROWHEAD BELOW +1DC0..1DFF;N # Mn [64] COMBINING DOTTED GRAVE ACCENT..COMBINING RIGHT ARROWHEAD AND DOWN ARROWHEAD BELOW 1E00..1EFF;N # L& [256] LATIN CAPITAL LETTER A WITH RING BELOW..LATIN SMALL LETTER Y WITH LOOP 1F00..1F15;N # L& [22] GREEK SMALL LETTER ALPHA WITH PSILI..GREEK SMALL LETTER EPSILON WITH DASIA AND OXIA 1F18..1F1D;N # Lu [6] GREEK CAPITAL LETTER EPSILON WITH PSILI..GREEK CAPITAL LETTER EPSILON WITH DASIA AND OXIA @@ -965,7 +975,7 @@ 20A9;H # Sc WON SIGN 20AA..20AB;N # Sc [2] NEW SHEQEL SIGN..DONG SIGN 20AC;A # Sc EURO SIGN -20AD..20BF;N # Sc [19] KIP SIGN..BITCOIN SIGN +20AD..20C0;N # Sc [20] KIP SIGN..SOM SIGN 20D0..20DC;N # Mn [13] COMBINING LEFT HARPOON ABOVE..COMBINING FOUR DOTS ABOVE 20DD..20E0;N # Me [4] COMBINING ENCLOSING CIRCLE..COMBINING ENCLOSING CIRCLE BACKSLASH 20E1;N # Mn COMBINING LEFT RIGHT ARROW ABOVE @@ -1338,8 +1348,7 @@ 2B5A..2B73;N # So [26] SLANTED NORTH ARROW WITH HOOKED HEAD..DOWNWARDS TRIANGLE-HEADED ARROW TO BAR 2B76..2B95;N # So [32] NORTH WEST TRIANGLE-HEADED ARROW TO BAR..RIGHTWARDS BLACK ARROW 2B97..2BFF;N # So [105] SYMBOL FOR TYPE A ELECTRONICS..HELLSCHREIBER PAUSE SYMBOL -2C00..2C2E;N # Lu [47] GLAGOLITIC CAPITAL LETTER AZU..GLAGOLITIC CAPITAL LETTER LATINATE MYSLITE -2C30..2C5E;N # Ll [47] GLAGOLITIC SMALL LETTER AZU..GLAGOLITIC SMALL LETTER LATINATE MYSLITE +2C00..2C5F;N # L& [96] GLAGOLITIC CAPITAL LETTER AZU..GLAGOLITIC SMALL LETTER CAUDATE CHRIVI 2C60..2C7B;N # L& [28] LATIN CAPITAL LETTER L WITH DOUBLE BAR..LATIN LETTER SMALL CAPITAL TURNED E 2C7C..2C7D;N # Lm [2] LATIN SUBSCRIPT SMALL LETTER J..MODIFIER LETTER CAPITAL V 2C7E..2C7F;N # Lu [2] LATIN CAPITAL LETTER S WITH SWASH TAIL..LATIN CAPITAL LETTER Z WITH SWASH TAIL @@ -1407,7 +1416,16 @@ 2E42;N # Ps DOUBLE LOW-REVERSED-9 QUOTATION MARK 2E43..2E4F;N # Po [13] DASH WITH LEFT UPTURN..CORNISH VERSE DIVIDER 2E50..2E51;N # So [2] CROSS PATTY WITH RIGHT CROSSBAR..CROSS PATTY WITH LEFT CROSSBAR -2E52;N # Po TIRONIAN SIGN CAPITAL ET +2E52..2E54;N # Po [3] TIRONIAN SIGN CAPITAL ET..MEDIEVAL QUESTION MARK +2E55;N # Ps LEFT SQUARE BRACKET WITH STROKE +2E56;N # Pe RIGHT SQUARE BRACKET WITH STROKE +2E57;N # Ps LEFT SQUARE BRACKET WITH DOUBLE STROKE +2E58;N # Pe RIGHT SQUARE BRACKET WITH DOUBLE STROKE +2E59;N # Ps TOP HALF LEFT PARENTHESIS +2E5A;N # Pe TOP HALF RIGHT PARENTHESIS +2E5B;N # Ps BOTTOM HALF LEFT PARENTHESIS +2E5C;N # Pe BOTTOM HALF RIGHT PARENTHESIS +2E5D;N # Pd OBLIQUE HYPHEN 2E80..2E99;W # So [26] CJK RADICAL REPEAT..CJK RADICAL RAP 2E9B..2EF3;W # So [89] CJK RADICAL CHOKE..CJK RADICAL C-SIMPLIFIED TURTLE 2F00..2FD5;W # So [214] KANGXI RADICAL ONE..KANGXI RADICAL FLUTE @@ -1485,8 +1503,7 @@ 3300..33FF;W # So [256] SQUARE APAATO..SQUARE GAL 3400..4DBF;W # Lo [6592] CJK UNIFIED IDEOGRAPH-3400..CJK UNIFIED IDEOGRAPH-4DBF 4DC0..4DFF;N # So [64] HEXAGRAM FOR THE CREATIVE HEAVEN..HEXAGRAM FOR BEFORE COMPLETION -4E00..9FFC;W # Lo [20989] CJK UNIFIED IDEOGRAPH-4E00..CJK UNIFIED IDEOGRAPH-9FFC -9FFD..9FFF;W # Cn [3] .. +4E00..9FFF;W # Lo [20992] CJK UNIFIED IDEOGRAPH-4E00..CJK UNIFIED IDEOGRAPH-9FFF A000..A014;W # Lo [21] YI SYLLABLE IT..YI SYLLABLE E A015;W # Lm YI SYLLABLE WU A016..A48C;W # Lo [1143] YI SYLLABLE BIT..YI SYLLABLE YYR @@ -1525,8 +1542,11 @@ A788;N # Lm MODIFIER LETTER LOW CIRCUMFLEX ACCENT A789..A78A;N # Sk [2] MODIFIER LETTER COLON..MODIFIER LETTER SHORT EQUALS SIGN A78B..A78E;N # L& [4] LATIN CAPITAL LETTER SALTILLO..LATIN SMALL LETTER L WITH RETROFLEX HOOK AND BELT A78F;N # Lo LATIN LETTER SINOLOGICAL DOT -A790..A7BF;N # L& [48] LATIN CAPITAL LETTER N WITH DESCENDER..LATIN SMALL LETTER GLOTTAL U -A7C2..A7CA;N # L& [9] LATIN CAPITAL LETTER ANGLICANA W..LATIN SMALL LETTER S WITH SHORT STROKE OVERLAY +A790..A7CA;N # L& [59] LATIN CAPITAL LETTER N WITH DESCENDER..LATIN SMALL LETTER S WITH SHORT STROKE OVERLAY +A7D0..A7D1;N # L& [2] LATIN CAPITAL LETTER CLOSED INSULAR G..LATIN SMALL LETTER CLOSED INSULAR G +A7D3;N # Ll LATIN SMALL LETTER DOUBLE THORN +A7D5..A7D9;N # L& [5] LATIN SMALL LETTER DOUBLE WYNN..LATIN SMALL LETTER SIGMOID S +A7F2..A7F4;N # Lm [3] MODIFIER LETTER CAPITAL C..MODIFIER LETTER CAPITAL Q A7F5..A7F6;N # L& [2] LATIN CAPITAL LETTER REVERSED HALF H..LATIN SMALL LETTER REVERSED HALF H A7F7;N # Lo LATIN EPIGRAPHIC LETTER SIDEWAYS I A7F8..A7F9;N # Lm [2] MODIFIER LETTER CAPITAL H WITH STROKE..MODIFIER LETTER SMALL LIGATURE OE @@ -1682,15 +1702,17 @@ FB40..FB41;N # Lo [2] HEBREW LETTER NUN WITH DAGESH..HEBREW LETTER SAMEK FB43..FB44;N # Lo [2] HEBREW LETTER FINAL PE WITH DAGESH..HEBREW LETTER PE WITH DAGESH FB46..FB4F;N # Lo [10] HEBREW LETTER TSADI WITH DAGESH..HEBREW LIGATURE ALEF LAMED FB50..FBB1;N # Lo [98] ARABIC LETTER ALEF WASLA ISOLATED FORM..ARABIC LETTER YEH BARREE WITH HAMZA ABOVE FINAL FORM -FBB2..FBC1;N # Sk [16] ARABIC SYMBOL DOT ABOVE..ARABIC SYMBOL SMALL TAH BELOW +FBB2..FBC2;N # Sk [17] ARABIC SYMBOL DOT ABOVE..ARABIC SYMBOL WASLA ABOVE FBD3..FD3D;N # Lo [363] ARABIC LETTER NG ISOLATED FORM..ARABIC LIGATURE ALEF WITH FATHATAN ISOLATED FORM FD3E;N # Pe ORNATE LEFT PARENTHESIS FD3F;N # Ps ORNATE RIGHT PARENTHESIS +FD40..FD4F;N # So [16] ARABIC LIGATURE RAHIMAHU ALLAAH..ARABIC LIGATURE RAHIMAHUM ALLAAH FD50..FD8F;N # Lo [64] ARABIC LIGATURE TEH WITH JEEM WITH MEEM INITIAL FORM..ARABIC LIGATURE MEEM WITH KHAH WITH MEEM INITIAL FORM FD92..FDC7;N # Lo [54] ARABIC LIGATURE MEEM WITH JEEM WITH KHAH INITIAL FORM..ARABIC LIGATURE NOON WITH JEEM WITH YEH FINAL FORM +FDCF;N # So ARABIC LIGATURE SALAAMUHU ALAYNAA FDF0..FDFB;N # Lo [12] ARABIC LIGATURE SALLA USED AS KORANIC STOP SIGN ISOLATED FORM..ARABIC LIGATURE JALLAJALALOUHOU FDFC;N # Sc RIAL SIGN -FDFD;N # So ARABIC LIGATURE BISMILLAH AR-RAHMAN AR-RAHEEM +FDFD..FDFF;N # So [3] ARABIC LIGATURE BISMILLAH AR-RAHMAN AR-RAHEEM..ARABIC LIGATURE AZZA WA JALL FE00..FE0F;A # Mn [16] VARIATION SELECTOR-1..VARIATION SELECTOR-16 FE10..FE16;W # Po [7] PRESENTATION FORM FOR VERTICAL COMMA..PRESENTATION FORM FOR VERTICAL QUESTION MARK FE17;W # Ps PRESENTATION FORM FOR VERTICAL LEFT WHITE LENTICULAR BRACKET @@ -1839,9 +1861,20 @@ FFFD;A # So REPLACEMENT CHARACTER 10500..10527;N # Lo [40] ELBASAN LETTER A..ELBASAN LETTER KHE 10530..10563;N # Lo [52] CAUCASIAN ALBANIAN LETTER ALT..CAUCASIAN ALBANIAN LETTER KIW 1056F;N # Po CAUCASIAN ALBANIAN CITATION MARK +10570..1057A;N # Lu [11] VITHKUQI CAPITAL LETTER A..VITHKUQI CAPITAL LETTER GA +1057C..1058A;N # Lu [15] VITHKUQI CAPITAL LETTER HA..VITHKUQI CAPITAL LETTER RE +1058C..10592;N # Lu [7] VITHKUQI CAPITAL LETTER SE..VITHKUQI CAPITAL LETTER XE +10594..10595;N # Lu [2] VITHKUQI CAPITAL LETTER Y..VITHKUQI CAPITAL LETTER ZE +10597..105A1;N # Ll [11] VITHKUQI SMALL LETTER A..VITHKUQI SMALL LETTER GA +105A3..105B1;N # Ll [15] VITHKUQI SMALL LETTER HA..VITHKUQI SMALL LETTER RE +105B3..105B9;N # Ll [7] VITHKUQI SMALL LETTER SE..VITHKUQI SMALL LETTER XE +105BB..105BC;N # Ll [2] VITHKUQI SMALL LETTER Y..VITHKUQI SMALL LETTER ZE 10600..10736;N # Lo [311] LINEAR A SIGN AB001..LINEAR A SIGN A664 10740..10755;N # Lo [22] LINEAR A SIGN A701 A..LINEAR A SIGN A732 JE 10760..10767;N # Lo [8] LINEAR A SIGN A800..LINEAR A SIGN A807 +10780..10785;N # Lm [6] MODIFIER LETTER SMALL CAPITAL AA..MODIFIER LETTER SMALL B WITH HOOK +10787..107B0;N # Lm [42] MODIFIER LETTER SMALL DZ DIGRAPH..MODIFIER LETTER SMALL V WITH RIGHT HOOK +107B2..107BA;N # Lm [9] MODIFIER LETTER SMALL CAPITAL Y..MODIFIER LETTER SMALL S WITH CURL 10800..10805;N # Lo [6] CYPRIOT SYLLABLE A..CYPRIOT SYLLABLE JA 10808;N # Lo CYPRIOT SYLLABLE JO 1080A..10835;N # Lo [44] CYPRIOT SYLLABLE KA..CYPRIOT SYLLABLE WO @@ -1920,6 +1953,9 @@ FFFD;A # So REPLACEMENT CHARACTER 10F46..10F50;N # Mn [11] SOGDIAN COMBINING DOT BELOW..SOGDIAN COMBINING STROKE BELOW 10F51..10F54;N # No [4] SOGDIAN NUMBER ONE..SOGDIAN NUMBER ONE HUNDRED 10F55..10F59;N # Po [5] SOGDIAN PUNCTUATION TWO VERTICAL BARS..SOGDIAN PUNCTUATION HALF CIRCLE WITH DOT +10F70..10F81;N # Lo [18] OLD UYGHUR LETTER ALEPH..OLD UYGHUR LETTER LESH +10F82..10F85;N # Mn [4] OLD UYGHUR COMBINING DOT ABOVE..OLD UYGHUR COMBINING TWO DOTS BELOW +10F86..10F89;N # Po [4] OLD UYGHUR PUNCTUATION BAR..OLD UYGHUR PUNCTUATION FOUR DOTS 10FB0..10FC4;N # Lo [21] CHORASMIAN LETTER ALEPH..CHORASMIAN LETTER TAW 10FC5..10FCB;N # No [7] CHORASMIAN NUMBER ONE..CHORASMIAN NUMBER ONE HUNDRED 10FE0..10FF6;N # Lo [23] ELYMAIC LETTER ALEPH..ELYMAIC LIGATURE ZAYIN-YODH @@ -1931,6 +1967,10 @@ FFFD;A # So REPLACEMENT CHARACTER 11047..1104D;N # Po [7] BRAHMI DANDA..BRAHMI PUNCTUATION LOTUS 11052..11065;N # No [20] BRAHMI NUMBER ONE..BRAHMI NUMBER ONE THOUSAND 11066..1106F;N # Nd [10] BRAHMI DIGIT ZERO..BRAHMI DIGIT NINE +11070;N # Mn BRAHMI SIGN OLD TAMIL VIRAMA +11071..11072;N # Lo [2] BRAHMI LETTER OLD TAMIL SHORT E..BRAHMI LETTER OLD TAMIL SHORT O +11073..11074;N # Mn [2] BRAHMI VOWEL SIGN OLD TAMIL SHORT E..BRAHMI VOWEL SIGN OLD TAMIL SHORT O +11075;N # Lo BRAHMI LETTER OLD TAMIL LLA 1107F;N # Mn BRAHMI NUMBER JOINER 11080..11081;N # Mn [2] KAITHI SIGN CANDRABINDU..KAITHI SIGN ANUSVARA 11082;N # Mc KAITHI SIGN VISARGA @@ -1942,6 +1982,7 @@ FFFD;A # So REPLACEMENT CHARACTER 110BB..110BC;N # Po [2] KAITHI ABBREVIATION SIGN..KAITHI ENUMERATION SIGN 110BD;N # Cf KAITHI NUMBER SIGN 110BE..110C1;N # Po [4] KAITHI SECTION MARK..KAITHI DOUBLE DANDA +110C2;N # Mn KAITHI VOWEL SIGN VOCALIC R 110CD;N # Cf KAITHI NUMBER SIGN ABOVE 110D0..110E8;N # Lo [25] SORA SOMPENG LETTER SAH..SORA SOMPENG LETTER MAE 110F0..110F9;N # Nd [10] SORA SOMPENG DIGIT ZERO..SORA SOMPENG DIGIT NINE @@ -2076,6 +2117,7 @@ FFFD;A # So REPLACEMENT CHARACTER 116B6;N # Mc TAKRI SIGN VIRAMA 116B7;N # Mn TAKRI SIGN NUKTA 116B8;N # Lo TAKRI LETTER ARCHAIC KHA +116B9;N # Po TAKRI ABBREVIATION SIGN 116C0..116C9;N # Nd [10] TAKRI DIGIT ZERO..TAKRI DIGIT NINE 11700..1171A;N # Lo [27] AHOM LETTER KA..AHOM LETTER ALTERNATE BA 1171D..1171F;N # Mn [3] AHOM CONSONANT SIGN MEDIAL LA..AHOM CONSONANT SIGN MEDIAL LIGATING RA @@ -2087,6 +2129,7 @@ FFFD;A # So REPLACEMENT CHARACTER 1173A..1173B;N # No [2] AHOM NUMBER TEN..AHOM NUMBER TWENTY 1173C..1173E;N # Po [3] AHOM SIGN SMALL SECTION..AHOM SIGN RULAI 1173F;N # So AHOM SYMBOL VI +11740..11746;N # Lo [7] AHOM LETTER CA..AHOM LETTER LLA 11800..1182B;N # Lo [44] DOGRA LETTER A..DOGRA LETTER RRA 1182C..1182E;N # Mc [3] DOGRA VOWEL SIGN AA..DOGRA VOWEL SIGN II 1182F..11837;N # Mn [9] DOGRA VOWEL SIGN U..DOGRA SIGN ANUSVARA @@ -2145,6 +2188,7 @@ FFFD;A # So REPLACEMENT CHARACTER 11A9A..11A9C;N # Po [3] SOYOMBO MARK TSHEG..SOYOMBO MARK DOUBLE SHAD 11A9D;N # Lo SOYOMBO MARK PLUTA 11A9E..11AA2;N # Po [5] SOYOMBO HEAD MARK WITH MOON AND SUN AND TRIPLE FLAME..SOYOMBO TERMINAL MARK-2 +11AB0..11ABF;N # Lo [16] CANADIAN SYLLABICS NATTILIK HI..CANADIAN SYLLABICS SPA 11AC0..11AF8;N # Lo [57] PAU CIN HAU LETTER PA..PAU CIN HAU GLOTTAL STOP FINAL 11C00..11C08;N # Lo [9] BHAIKSUKI LETTER A..BHAIKSUKI LETTER VOCALIC L 11C0A..11C2E;N # Lo [37] BHAIKSUKI LETTER E..BHAIKSUKI LETTER HA @@ -2201,6 +2245,8 @@ FFFD;A # So REPLACEMENT CHARACTER 12400..1246E;N # Nl [111] CUNEIFORM NUMERIC SIGN TWO ASH..CUNEIFORM NUMERIC SIGN NINE U VARIANT FORM 12470..12474;N # Po [5] CUNEIFORM PUNCTUATION SIGN OLD ASSYRIAN WORD DIVIDER..CUNEIFORM PUNCTUATION SIGN DIAGONAL QUADCOLON 12480..12543;N # Lo [196] CUNEIFORM SIGN AB TIMES NUN TENU..CUNEIFORM SIGN ZU5 TIMES THREE DISH TENU +12F90..12FF0;N # Lo [97] CYPRO-MINOAN SIGN CM001..CYPRO-MINOAN SIGN CM114 +12FF1..12FF2;N # Po [2] CYPRO-MINOAN SIGN CM301..CYPRO-MINOAN SIGN CM302 13000..1342E;N # Lo [1071] EGYPTIAN HIEROGLYPH A001..EGYPTIAN HIEROGLYPH AA032 13430..13438;N # Cf [9] EGYPTIAN HIEROGLYPH VERTICAL JOINER..EGYPTIAN HIEROGLYPH END SEGMENT 14400..14646;N # Lo [583] ANATOLIAN HIEROGLYPH A001..ANATOLIAN HIEROGLYPH A530 @@ -2208,6 +2254,8 @@ FFFD;A # So REPLACEMENT CHARACTER 16A40..16A5E;N # Lo [31] MRO LETTER TA..MRO LETTER TEK 16A60..16A69;N # Nd [10] MRO DIGIT ZERO..MRO DIGIT NINE 16A6E..16A6F;N # Po [2] MRO DANDA..MRO DOUBLE DANDA +16A70..16ABE;N # Lo [79] TANGSA LETTER OZ..TANGSA LETTER ZA +16AC0..16AC9;N # Nd [10] TANGSA DIGIT ZERO..TANGSA DIGIT NINE 16AD0..16AED;N # Lo [30] BASSA VAH LETTER ENNI..BASSA VAH LETTER I 16AF0..16AF4;N # Mn [5] BASSA VAH COMBINING HIGH TONE..BASSA VAH COMBINING HIGH-LOW TONE 16AF5;N # Po BASSA VAH FULL STOP @@ -2240,8 +2288,11 @@ FFFD;A # So REPLACEMENT CHARACTER 18800..18AFF;W # Lo [768] TANGUT COMPONENT-001..TANGUT COMPONENT-768 18B00..18CD5;W # Lo [470] KHITAN SMALL SCRIPT CHARACTER-18B00..KHITAN SMALL SCRIPT CHARACTER-18CD5 18D00..18D08;W # Lo [9] TANGUT IDEOGRAPH-18D00..TANGUT IDEOGRAPH-18D08 +1AFF0..1AFF3;W # Lm [4] KATAKANA LETTER MINNAN TONE-2..KATAKANA LETTER MINNAN TONE-5 +1AFF5..1AFFB;W # Lm [7] KATAKANA LETTER MINNAN TONE-7..KATAKANA LETTER MINNAN NASALIZED TONE-5 +1AFFD..1AFFE;W # Lm [2] KATAKANA LETTER MINNAN NASALIZED TONE-7..KATAKANA LETTER MINNAN NASALIZED TONE-8 1B000..1B0FF;W # Lo [256] KATAKANA LETTER ARCHAIC E..HENTAIGANA LETTER RE-2 -1B100..1B11E;W # Lo [31] HENTAIGANA LETTER RE-3..HENTAIGANA LETTER N-MU-MO-2 +1B100..1B122;W # Lo [35] HENTAIGANA LETTER RE-3..KATAKANA LETTER ARCHAIC WU 1B150..1B152;W # Lo [3] HIRAGANA LETTER SMALL WI..HIRAGANA LETTER SMALL WO 1B164..1B167;W # Lo [4] KATAKANA LETTER SMALL WI..KATAKANA LETTER SMALL N 1B170..1B2FB;W # Lo [396] NUSHU CHARACTER-1B170..NUSHU CHARACTER-1B2FB @@ -2253,6 +2304,9 @@ FFFD;A # So REPLACEMENT CHARACTER 1BC9D..1BC9E;N # Mn [2] DUPLOYAN THICK LETTER SELECTOR..DUPLOYAN DOUBLE MARK 1BC9F;N # Po DUPLOYAN PUNCTUATION CHINOOK FULL STOP 1BCA0..1BCA3;N # Cf [4] SHORTHAND FORMAT LETTER OVERLAP..SHORTHAND FORMAT UP STEP +1CF00..1CF2D;N # Mn [46] ZNAMENNY COMBINING MARK GORAZDO NIZKO S KRYZHEM ON LEFT..ZNAMENNY COMBINING MARK KRYZH ON LEFT +1CF30..1CF46;N # Mn [23] ZNAMENNY COMBINING TONAL RANGE MARK MRACHNO..ZNAMENNY PRIZNAK MODIFIER ROG +1CF50..1CFC3;N # So [116] ZNAMENNY NEUME KRYUK..ZNAMENNY NEUME PAUK 1D000..1D0F5;N # So [246] BYZANTINE MUSICAL SYMBOL PSILI..BYZANTINE MUSICAL SYMBOL GORGON NEO KATO 1D100..1D126;N # So [39] MUSICAL SYMBOL SINGLE BARLINE..MUSICAL SYMBOL DRUM CLEF-2 1D129..1D164;N # So [60] MUSICAL SYMBOL MULTIPLE MEASURE REST..MUSICAL SYMBOL ONE HUNDRED TWENTY-EIGHTH NOTE @@ -2266,7 +2320,7 @@ FFFD;A # So REPLACEMENT CHARACTER 1D185..1D18B;N # Mn [7] MUSICAL SYMBOL COMBINING DOIT..MUSICAL SYMBOL COMBINING TRIPLE TONGUE 1D18C..1D1A9;N # So [30] MUSICAL SYMBOL RINFORZANDO..MUSICAL SYMBOL DEGREE SLASH 1D1AA..1D1AD;N # Mn [4] MUSICAL SYMBOL COMBINING DOWN BOW..MUSICAL SYMBOL COMBINING SNAP PIZZICATO -1D1AE..1D1E8;N # So [59] MUSICAL SYMBOL PEDAL MARK..MUSICAL SYMBOL KIEVAN FLAT SIGN +1D1AE..1D1EA;N # So [61] MUSICAL SYMBOL PEDAL MARK..MUSICAL SYMBOL KORON 1D200..1D241;N # So [66] GREEK VOCAL NOTATION SYMBOL-1..GREEK INSTRUMENTAL NOTATION SYMBOL-54 1D242..1D244;N # Mn [3] COMBINING GREEK MUSICAL TRISEME..COMBINING GREEK MUSICAL PENTASEME 1D245;N # So GREEK MUSICAL LEIMMA @@ -2326,6 +2380,9 @@ FFFD;A # So REPLACEMENT CHARACTER 1DA87..1DA8B;N # Po [5] SIGNWRITING COMMA..SIGNWRITING PARENTHESIS 1DA9B..1DA9F;N # Mn [5] SIGNWRITING FILL MODIFIER-2..SIGNWRITING FILL MODIFIER-6 1DAA1..1DAAF;N # Mn [15] SIGNWRITING ROTATION MODIFIER-2..SIGNWRITING ROTATION MODIFIER-16 +1DF00..1DF09;N # Ll [10] LATIN SMALL LETTER FENG DIGRAPH WITH TRILL..LATIN SMALL LETTER T WITH HOOK AND RETROFLEX HOOK +1DF0A;N # Lo LATIN LETTER RETROFLEX CLICK WITH RETROFLEX HOOK +1DF0B..1DF1E;N # Ll [20] LATIN SMALL LETTER ESH WITH DOUBLE BAR..LATIN SMALL LETTER S WITH CURL 1E000..1E006;N # Mn [7] COMBINING GLAGOLITIC LETTER AZU..COMBINING GLAGOLITIC LETTER ZHIVETE 1E008..1E018;N # Mn [17] COMBINING GLAGOLITIC LETTER ZEMLJA..COMBINING GLAGOLITIC LETTER HERU 1E01B..1E021;N # Mn [7] COMBINING GLAGOLITIC LETTER SHTA..COMBINING GLAGOLITIC LETTER YATI @@ -2337,10 +2394,16 @@ FFFD;A # So REPLACEMENT CHARACTER 1E140..1E149;N # Nd [10] NYIAKENG PUACHUE HMONG DIGIT ZERO..NYIAKENG PUACHUE HMONG DIGIT NINE 1E14E;N # Lo NYIAKENG PUACHUE HMONG LOGOGRAM NYAJ 1E14F;N # So NYIAKENG PUACHUE HMONG CIRCLED CA +1E290..1E2AD;N # Lo [30] TOTO LETTER PA..TOTO LETTER A +1E2AE;N # Mn TOTO SIGN RISING TONE 1E2C0..1E2EB;N # Lo [44] WANCHO LETTER AA..WANCHO LETTER YIH 1E2EC..1E2EF;N # Mn [4] WANCHO TONE TUP..WANCHO TONE KOINI 1E2F0..1E2F9;N # Nd [10] WANCHO DIGIT ZERO..WANCHO DIGIT NINE 1E2FF;N # Sc WANCHO NGUN SIGN +1E7E0..1E7E6;N # Lo [7] ETHIOPIC SYLLABLE HHYA..ETHIOPIC SYLLABLE HHYO +1E7E8..1E7EB;N # Lo [4] ETHIOPIC SYLLABLE GURAGE HHWA..ETHIOPIC SYLLABLE HHWE +1E7ED..1E7EE;N # Lo [2] ETHIOPIC SYLLABLE GURAGE MWI..ETHIOPIC SYLLABLE GURAGE MWEE +1E7F0..1E7FE;N # Lo [15] ETHIOPIC SYLLABLE GURAGE QWI..ETHIOPIC SYLLABLE GURAGE PWEE 1E800..1E8C4;N # Lo [197] MENDE KIKAKUI SYLLABLE M001 KI..MENDE KIKAKUI SYLLABLE M060 NYON 1E8C7..1E8CF;N # No [9] MENDE KIKAKUI DIGIT ONE..MENDE KIKAKUI DIGIT NINE 1E8D0..1E8D6;N # Mn [7] MENDE KIKAKUI COMBINING NUMBER TEENS..MENDE KIKAKUI COMBINING NUMBER MILLIONS @@ -2465,6 +2528,7 @@ FFFD;A # So REPLACEMENT CHARACTER 1F6D0..1F6D2;W # So [3] PLACE OF WORSHIP..SHOPPING TROLLEY 1F6D3..1F6D4;N # So [2] STUPA..PAGODA 1F6D5..1F6D7;W # So [3] HINDU TEMPLE..ELEVATOR +1F6DD..1F6DF;W # So [3] PLAYGROUND SLIDE..RING BUOY 1F6E0..1F6EA;N # So [11] HAMMER AND WRENCH..NORTHEAST-POINTING AIRPLANE 1F6EB..1F6EC;W # So [2] AIRPLANE DEPARTURE..AIRPLANE ARRIVING 1F6F0..1F6F3;N # So [4] SATELLITE..PASSENGER SHIP @@ -2472,6 +2536,7 @@ FFFD;A # So REPLACEMENT CHARACTER 1F700..1F773;N # So [116] ALCHEMICAL SYMBOL FOR QUINTESSENCE..ALCHEMICAL SYMBOL FOR HALF OUNCE 1F780..1F7D8;N # So [89] BLACK LEFT-POINTING ISOSCELES RIGHT TRIANGLE..NEGATIVE CIRCLED SQUARE 1F7E0..1F7EB;W # So [12] LARGE ORANGE CIRCLE..LARGE BROWN SQUARE +1F7F0;W # So HEAVY EQUALS SIGN 1F800..1F80B;N # So [12] LEFTWARDS ARROW WITH SMALL TRIANGLE ARROWHEAD..DOWNWARDS ARROW WITH LARGE TRIANGLE ARROWHEAD 1F810..1F847;N # So [56] LEFTWARDS ARROW WITH SMALL EQUILATERAL ARROWHEAD..DOWNWARDS HEAVY ARROW 1F850..1F859;N # So [10] LEFTWARDS SANS-SERIF ARROW..UP DOWN SANS-SERIF ARROW @@ -2483,25 +2548,25 @@ FFFD;A # So REPLACEMENT CHARACTER 1F93B;N # So MODERN PENTATHLON 1F93C..1F945;W # So [10] WRESTLERS..GOAL NET 1F946;N # So RIFLE -1F947..1F978;W # So [50] FIRST PLACE MEDAL..DISGUISED FACE -1F97A..1F9CB;W # So [82] FACE WITH PLEADING EYES..BUBBLE TEA -1F9CD..1F9FF;W # So [51] STANDING PERSON..NAZAR AMULET +1F947..1F9FF;W # So [185] FIRST PLACE MEDAL..NAZAR AMULET 1FA00..1FA53;N # So [84] NEUTRAL CHESS KING..BLACK CHESS KNIGHT-BISHOP 1FA60..1FA6D;N # So [14] XIANGQI RED GENERAL..XIANGQI BLACK SOLDIER 1FA70..1FA74;W # So [5] BALLET SHOES..THONG SANDAL -1FA78..1FA7A;W # So [3] DROP OF BLOOD..STETHOSCOPE +1FA78..1FA7C;W # So [5] DROP OF BLOOD..CRUTCH 1FA80..1FA86;W # So [7] YO-YO..NESTING DOLLS -1FA90..1FAA8;W # So [25] RINGED PLANET..ROCK -1FAB0..1FAB6;W # So [7] FLY..FEATHER -1FAC0..1FAC2;W # So [3] ANATOMICAL HEART..PEOPLE HUGGING -1FAD0..1FAD6;W # So [7] BLUEBERRIES..TEAPOT +1FA90..1FAAC;W # So [29] RINGED PLANET..HAMSA +1FAB0..1FABA;W # So [11] FLY..NEST WITH EGGS +1FAC0..1FAC5;W # So [6] ANATOMICAL HEART..PERSON WITH CROWN +1FAD0..1FAD9;W # So [10] BLUEBERRIES..JAR +1FAE0..1FAE7;W # So [8] MELTING FACE..BUBBLES +1FAF0..1FAF6;W # So [7] HAND WITH INDEX FINGER AND THUMB CROSSED..HEART HANDS 1FB00..1FB92;N # So [147] BLOCK SEXTANT-1..UPPER HALF INVERSE MEDIUM SHADE AND LOWER HALF BLOCK 1FB94..1FBCA;N # So [55] LEFT HALF INVERSE MEDIUM SHADE AND RIGHT HALF BLOCK..WHITE UP-POINTING CHEVRON 1FBF0..1FBF9;N # Nd [10] SEGMENTED DIGIT ZERO..SEGMENTED DIGIT NINE -20000..2A6DD;W # Lo [42718] CJK UNIFIED IDEOGRAPH-20000..CJK UNIFIED IDEOGRAPH-2A6DD -2A6DE..2A6FF;W # Cn [34] .. -2A700..2B734;W # Lo [4149] CJK UNIFIED IDEOGRAPH-2A700..CJK UNIFIED IDEOGRAPH-2B734 -2B735..2B73F;W # Cn [11] .. +20000..2A6DF;W # Lo [42720] CJK UNIFIED IDEOGRAPH-20000..CJK UNIFIED IDEOGRAPH-2A6DF +2A6E0..2A6FF;W # Cn [32] .. +2A700..2B738;W # Lo [4153] CJK UNIFIED IDEOGRAPH-2A700..CJK UNIFIED IDEOGRAPH-2B738 +2B739..2B73F;W # Cn [7] .. 2B740..2B81D;W # Lo [222] CJK UNIFIED IDEOGRAPH-2B740..CJK UNIFIED IDEOGRAPH-2B81D 2B81E..2B81F;W # Cn [2] .. 2B820..2CEA1;W # Lo [5762] CJK UNIFIED IDEOGRAPH-2B820..CJK UNIFIED IDEOGRAPH-2CEA1 diff --git a/gnu/usr.bin/perl/lib/unicore/EmojiSources.txt b/gnu/usr.bin/perl/lib/unicore/EmojiSources.txt index b2a526160c1..391a7e0750a 100644 --- a/gnu/usr.bin/perl/lib/unicore/EmojiSources.txt +++ b/gnu/usr.bin/perl/lib/unicore/EmojiSources.txt @@ -1,6 +1,6 @@ -# EmojiSources-13.0.0.txt -# Date: 2019-09-09, 19:40:00 GMT [MS, KW] -# © 2019 Unicode®, Inc. +# EmojiSources-14.0.0.txt +# Date: 2021-03-16, 21:39:00 GMT [MS, KW] +# © 2021 Unicode®, Inc. # For terms of use, see http://www.unicode.org/terms_of_use.html # # Unicode Character Database diff --git a/gnu/usr.bin/perl/lib/unicore/HangulSyllableType.txt b/gnu/usr.bin/perl/lib/unicore/HangulSyllableType.txt index 90aa56964e4..8e7ca091f6a 100644 --- a/gnu/usr.bin/perl/lib/unicore/HangulSyllableType.txt +++ b/gnu/usr.bin/perl/lib/unicore/HangulSyllableType.txt @@ -1,6 +1,6 @@ -# HangulSyllableType-13.0.0.txt -# Date: 2019-09-08, 23:31:10 GMT -# © 2019 Unicode®, Inc. +# HangulSyllableType-14.0.0.txt +# Date: 2021-03-08, 19:35:46 GMT +# © 2021 Unicode®, Inc. # Unicode and the Unicode Logo are registered trademarks of Unicode, Inc. in the U.S. and other countries. # For terms of use, see http://www.unicode.org/terms_of_use.html # diff --git a/gnu/usr.bin/perl/lib/unicore/Index.txt b/gnu/usr.bin/perl/lib/unicore/Index.txt index 498519f58b4..451255cd831 100644 --- a/gnu/usr.bin/perl/lib/unicore/Index.txt +++ b/gnu/usr.bin/perl/lib/unicore/Index.txt @@ -1036,6 +1036,7 @@ combining counterclockwise ring overlay 20DA Combining Diacritical Marks 0300 Combining Diacritical Marks Extended 1AB0 Combining Diacritical Marks for Symbols 20D0 +Combining Diacritical Marks Supplement 1DC0 COMBINING DIAERESIS 0308 COMBINING DIAERESIS BELOW 0324 COMBINING DOT ABOVE 0307 @@ -1937,6 +1938,7 @@ Equality and Inequality Signs 22D5 EQUALS COLON 2255 EQUALS SIGN 003D EQUALS SIGN BELOW, COMBINING 0347 +EQUALS SIGN, HEAVY 1F7F0 EQUALS, CIRCLED 229C EQUALS, COLON 2254 equals, nearly 2252 @@ -2032,6 +2034,7 @@ FACE, WHITE FROWNING 2639 FACE, WHITE SMILING 263A Faces 1F600 Faces 1F920 +Faces 1FAE0 Facial Parts Symbols 1F440 FACSIMILE SIGN 213B factorial 0021 @@ -2429,6 +2432,7 @@ han-daku-on, japanese 309C Hand Symbols 1F446 Hand Symbols 1F58E Hand Symbols 1F918 +Hand Symbols 1FAF0 Hand Symbols, Pointing 261A Hand, Index Finger Pointing 1F446 HAND, RAISED 270B @@ -2478,6 +2482,7 @@ HEADPHONE 1F3A7 HEADSTONE GRAVEYARD SYMBOL 26FC HEART BULLET, REVERSED ROTATED FLORAL 2619 Heart Dingbats 2763 +HEART HANDS 1FAF6 Heart Ornaments 2763 Heart Symbols 1F493 HEART, BLACK 1F5A4 @@ -2567,6 +2572,7 @@ HYPHEN, DOUBLE 2E40 HYPHEN, KATAKANA-HIRAGANA DOUBLE 30A0 HYPHEN, MONGOLIAN TODO SOFT 1806 HYPHEN, NON-BREAKING 2011 +HYPHEN, OBLIQUE 2E5D hyphen, papyrological 035C HYPHEN, SOFT 00AD HYPHEN-MINUS 002D diff --git a/gnu/usr.bin/perl/lib/unicore/IndicPositionalCategory.txt b/gnu/usr.bin/perl/lib/unicore/IndicPositionalCategory.txt index ee74dbe0fae..69109ac51f9 100644 --- a/gnu/usr.bin/perl/lib/unicore/IndicPositionalCategory.txt +++ b/gnu/usr.bin/perl/lib/unicore/IndicPositionalCategory.txt @@ -1,6 +1,6 @@ -# IndicPositionalCategory-13.0.0.txt -# Date: 2019-07-23, 00:01:00 GMT [KW, RP] -# © 2019 Unicode®, Inc. +# IndicPositionalCategory-14.0.0.txt +# Date: 2021-05-22, 01:01:00 GMT [KW, RP] +# © 2021 Unicode®, Inc. # Unicode and the Unicode Logo are registered trademarks of Unicode, Inc. in the U.S. and other countries. # For terms of use, see http://www.unicode.org/terms_of_use.html # @@ -25,8 +25,8 @@ # # In addition to combining marks associated with Indic scripts, the # Indic_Positional_Category has non-trivial values for special signs -# associated with Indic_Syllabic_Category=Consonant_Prefixed or -# Indic_Syllabic_Category=Consonant_Preceding_Repha. Those signs +# associated with Indic_Syllabic_Category=Consonant_Prefixed +# or Indic_Syllabic_Category=Consonant_Preceding_Repha. Those signs # have General_Category=Lo, rather than being combining marks. # They occur in initial position in syllabic structure. However, when # rendered, they appear as marks positioned with respect to another @@ -184,6 +184,8 @@ 1087..108C ; Right # Mc [6] MYANMAR SIGN SHAN TONE-2..MYANMAR SIGN SHAN COUNCIL TONE-3 108F ; Right # Mc MYANMAR SIGN RUMAI PALAUNG TONE-5 109A..109C ; Right # Mc [3] MYANMAR SIGN KHAMTI TONE-1..MYANMAR VOWEL SIGN AITON A +1715 ; Right # Mc TAGALOG SIGN PAMUDPOD +1734 ; Right # Mc HANUNOO SIGN PAMUDPOD 17B6 ; Right # Mc KHMER VOWEL SIGN AA 17C7..17C8 ; Right # Mc [2] KHMER SIGN REAHMUK..KHMER SIGN YUUKALEAPINTU 1923..1924 ; Right # Mc [2] LIMBU VOWEL SIGN EE..LIMBU VOWEL SIGN AI @@ -512,6 +514,8 @@ ABE5 ; Top # Mn MEETEI MAYEK VOWEL SIGN ANAP 11001 ; Top # Mn BRAHMI SIGN ANUSVARA 11038..1103B ; Top # Mn [4] BRAHMI VOWEL SIGN AA..BRAHMI VOWEL SIGN II 11042..11046 ; Top # Mn [5] BRAHMI VOWEL SIGN E..BRAHMI VIRAMA +11070 ; Top # Mn BRAHMI SIGN OLD TAMIL VIRAMA +11073..11074 ; Top # Mn [2] BRAHMI VOWEL SIGN OLD TAMIL SHORT E..BRAHMI VOWEL SIGN OLD TAMIL SHORT O 11080..11081 ; Top # Mn [2] KAITHI SIGN CANDRABINDU..KAITHI SIGN ANUSVARA 110B5..110B6 ; Top # Mn [2] KAITHI VOWEL SIGN E..KAITHI VOWEL SIGN AI 11100..11102 ; Top # Mn [3] CHAKMA SIGN CANDRABINDU..CHAKMA SIGN VISARGA @@ -602,6 +606,7 @@ ABE5 ; Top # Mn MEETEI MAYEK VOWEL SIGN ANAP 0B41..0B44 ; Bottom # Mn [4] ORIYA VOWEL SIGN U..ORIYA VOWEL SIGN VOCALIC RR 0B4D ; Bottom # Mn ORIYA SIGN VIRAMA 0B62..0B63 ; Bottom # Mn [2] ORIYA VOWEL SIGN VOCALIC L..ORIYA VOWEL SIGN VOCALIC LL +0C3C ; Bottom # Mn TELUGU SIGN NUKTA 0C56 ; Bottom # Mn TELUGU AI LENGTH MARK 0C62..0C63 ; Bottom # Mn [2] TELUGU VOWEL SIGN VOCALIC L..TELUGU VOWEL SIGN VOCALIC LL 0CBC ; Bottom # Mn KANNADA SIGN NUKTA @@ -630,7 +635,7 @@ ABE5 ; Top # Mn MEETEI MAYEK VOWEL SIGN ANAP 1082 ; Bottom # Mn MYANMAR CONSONANT SIGN SHAN MEDIAL WA 108D ; Bottom # Mn MYANMAR SIGN SHAN COUNCIL EMPHATIC TONE 1713..1714 ; Bottom # Mn [2] TAGALOG VOWEL SIGN U..TAGALOG SIGN VIRAMA -1733..1734 ; Bottom # Mn [2] HANUNOO VOWEL SIGN U..HANUNOO SIGN PAMUDPOD +1733 ; Bottom # Mn HANUNOO VOWEL SIGN U 1753 ; Bottom # Mn BUHID VOWEL SIGN U 1773 ; Bottom # Mn TAGBANWA VOWEL SIGN U 17BB..17BD ; Bottom # Mn [3] KHMER VOWEL SIGN U..KHMER VOWEL SIGN UA @@ -675,6 +680,7 @@ ABED ; Bottom # Mn MEETEI MAYEK APUN IYEK 1103C..11041 ; Bottom # Mn [6] BRAHMI VOWEL SIGN U..BRAHMI VOWEL SIGN VOCALIC LL 110B3..110B4 ; Bottom # Mn [2] KAITHI VOWEL SIGN U..KAITHI VOWEL SIGN UU 110B9..110BA ; Bottom # Mn [2] KAITHI SIGN VIRAMA..KAITHI SIGN NUKTA +110C2 ; Bottom # Mn KAITHI VOWEL SIGN VOCALIC R 1112A..1112B ; Bottom # Mn [2] CHAKMA VOWEL SIGN U..CHAKMA VOWEL SIGN UU 11131..11132 ; Bottom # Mn [2] CHAKMA O MARK..CHAKMA AU MARK 11173 ; Bottom # Mn MAHAJANI SIGN NUKTA diff --git a/gnu/usr.bin/perl/lib/unicore/IndicSyllabicCategory.txt b/gnu/usr.bin/perl/lib/unicore/IndicSyllabicCategory.txt index 8297578d18b..23b86372aea 100644 --- a/gnu/usr.bin/perl/lib/unicore/IndicSyllabicCategory.txt +++ b/gnu/usr.bin/perl/lib/unicore/IndicSyllabicCategory.txt @@ -1,6 +1,6 @@ -# IndicSyllabicCategory-13.0.0.txt -# Date: 2019-07-22, 19:55:00 GMT [KW, RP] -# © 2019 Unicode®, Inc. +# IndicSyllabicCategory-14.0.0.txt +# Date: 2021-05-22, 01:01:00 GMT [KW, RP] +# © 2021 Unicode®, Inc. # Unicode and the Unicode Logo are registered trademarks of Unicode, Inc. in the U.S. and other countries. # For terms of use, see http://www.unicode.org/terms_of_use.html # @@ -225,6 +225,7 @@ AAF5 ; Visarga # Mc MEETEI MAYEK VOWEL SIGN VISARGA 0ABC ; Nukta # Mn GUJARATI SIGN NUKTA 0AFD..0AFF ; Nukta # Mn [3] GUJARATI SIGN THREE-DOT NUKTA ABOVE..GUJARATI SIGN TWO-CIRCLE NUKTA ABOVE 0B3C ; Nukta # Mn ORIYA SIGN NUKTA +0C3C ; Nukta # Mn TELUGU SIGN NUKTA 0CBC ; Nukta # Mn KANNADA SIGN NUKTA 0F39 ; Nukta # Mn TIBETAN MARK TSA -PHRU 1B34 ; Nukta # Mn BALINESE SIGN REREKAN @@ -303,7 +304,8 @@ A9C0 ; Virama # Mc JAVANESE PANGKON 0F84 ; Pure_Killer # Mn TIBETAN MARK HALANTA 103A ; Pure_Killer # Mn MYANMAR SIGN ASAT 1714 ; Pure_Killer # Mn TAGALOG SIGN VIRAMA -1734 ; Pure_Killer # Mn HANUNOO SIGN PAMUDPOD +1715 ; Pure_Killer # Mc TAGALOG SIGN PAMUDPOD +1734 ; Pure_Killer # Mc HANUNOO SIGN PAMUDPOD 17D1 ; Pure_Killer # Mn KHMER SIGN VIRIAM 1A7A ; Pure_Killer # Mn TAI THAM SIGN RA HAAM 1BAA ; Pure_Killer # Mc SUNDANESE SIGN PAMAAEH @@ -311,6 +313,7 @@ A9C0 ; Virama # Mc JAVANESE PANGKON A82C ; Pure_Killer # Mn SYLOTI NAGRI SIGN ALTERNATE HASANTA A953 ; Pure_Killer # Mc REJANG VIRAMA ABED ; Pure_Killer # Mn MEETEI MAYEK APUN IYEK +11070 ; Pure_Killer # Mn BRAHMI SIGN OLD TAMIL VIRAMA 11134 ; Pure_Killer # Mn CHAKMA MAAYYAA 112EA ; Pure_Killer # Mn KHUDAWADI SIGN VIRAMA 1172B ; Pure_Killer # Mn AHOM SIGN KILLER @@ -408,6 +411,7 @@ AAE0..AAE1 ; Vowel_Independent # Lo [2] MEETEI MAYEK LETTER E..MEETEI MAYEK ABCE..ABCF ; Vowel_Independent # Lo [2] MEETEI MAYEK LETTER UN..MEETEI MAYEK LETTER I ABD1 ; Vowel_Independent # Lo MEETEI MAYEK LETTER ATIYA 11005..11012 ; Vowel_Independent # Lo [14] BRAHMI LETTER A..BRAHMI LETTER AU +11071..11072 ; Vowel_Independent # Lo [2] BRAHMI LETTER OLD TAMIL SHORT E..BRAHMI LETTER OLD TAMIL SHORT O 11083..1108C ; Vowel_Independent # Lo [10] KAITHI LETTER A..KAITHI LETTER AU 11103..11106 ; Vowel_Independent # Lo [4] CHAKMA LETTER AA..CHAKMA LETTER E 11183..11190 ; Vowel_Independent # Lo [14] SHARADA LETTER A..SHARADA LETTER AU @@ -617,9 +621,11 @@ ABE9..ABEA ; Vowel_Dependent # Mc [2] MEETEI MAYEK VOWEL SIGN CHEINAP..MEET 10A05..10A06 ; Vowel_Dependent # Mn [2] KHAROSHTHI VOWEL SIGN E..KHAROSHTHI VOWEL SIGN O 10A0C..10A0D ; Vowel_Dependent # Mn [2] KHAROSHTHI VOWEL LENGTH MARK..KHAROSHTHI SIGN DOUBLE RING BELOW 11038..11045 ; Vowel_Dependent # Mn [14] BRAHMI VOWEL SIGN AA..BRAHMI VOWEL SIGN AU +11073..11074 ; Vowel_Dependent # Mn [2] BRAHMI VOWEL SIGN OLD TAMIL SHORT E..BRAHMI VOWEL SIGN OLD TAMIL SHORT O 110B0..110B2 ; Vowel_Dependent # Mc [3] KAITHI VOWEL SIGN AA..KAITHI VOWEL SIGN II 110B3..110B6 ; Vowel_Dependent # Mn [4] KAITHI VOWEL SIGN U..KAITHI VOWEL SIGN AI 110B7..110B8 ; Vowel_Dependent # Mc [2] KAITHI VOWEL SIGN O..KAITHI VOWEL SIGN AU +110C2 ; Vowel_Dependent # Mn KAITHI VOWEL SIGN VOCALIC R 11127..1112B ; Vowel_Dependent # Mn [5] CHAKMA VOWEL SIGN A..CHAKMA VOWEL SIGN UU 1112C ; Vowel_Dependent # Mc CHAKMA VOWEL SIGN E 1112D..11132 ; Vowel_Dependent # Mn [6] CHAKMA VOWEL SIGN AI..CHAKMA AU MARK @@ -813,8 +819,8 @@ AA74..AA76 ; Consonant_Placeholder # Lo [3] MYANMAR LOGOGRAM KHAMTI OAY..MY 106E..1070 ; Consonant # Lo [3] MYANMAR LETTER EASTERN PWO KAREN NNA..MYANMAR LETTER EASTERN PWO KAREN GHWA 1075..1081 ; Consonant # Lo [13] MYANMAR LETTER SHAN KA..MYANMAR LETTER SHAN HA 108E ; Consonant # Lo MYANMAR LETTER RUMAI PALAUNG FA -1703..170C ; Consonant # Lo [10] TAGALOG LETTER KA..TAGALOG LETTER YA -170E..1711 ; Consonant # Lo [4] TAGALOG LETTER LA..TAGALOG LETTER HA +1703..1711 ; Consonant # Lo [15] TAGALOG LETTER KA..TAGALOG LETTER HA +171F ; Consonant # Lo TAGALOG LETTER ARCHAIC RA 1723..1731 ; Consonant # Lo [15] HANUNOO LETTER KA..HANUNOO LETTER HA 1743..1751 ; Consonant # Lo [15] BUHID LETTER KA..BUHID LETTER HA 1763..176C ; Consonant # Lo [10] TAGBANWA LETTER KA..TAGBANWA LETTER YA @@ -827,7 +833,7 @@ AA74..AA76 ; Consonant_Placeholder # Lo [3] MYANMAR LOGOGRAM KHAMTI OAY..MY 1A20..1A4C ; Consonant # Lo [45] TAI THAM LETTER HIGH KA..TAI THAM LETTER LOW HA 1A53..1A54 ; Consonant # Lo [2] TAI THAM LETTER LAE..TAI THAM LETTER GREAT SA 1B13..1B33 ; Consonant # Lo [33] BALINESE LETTER KA..BALINESE LETTER HA -1B45..1B4B ; Consonant # Lo [7] BALINESE LETTER KAF SASAK..BALINESE LETTER ASYURA SASAK +1B45..1B4C ; Consonant # Lo [8] BALINESE LETTER KAF SASAK..BALINESE LETTER ARCHAIC JNYA 1B8A..1BA0 ; Consonant # Lo [23] SUNDANESE LETTER KA..SUNDANESE LETTER HA 1BAE..1BAF ; Consonant # Lo [2] SUNDANESE LETTER KHA..SUNDANESE LETTER SYA 1BBB..1BBD ; Consonant # Lo [3] SUNDANESE LETTER REU..SUNDANESE LETTER BHA @@ -863,6 +869,7 @@ ABD2..ABDA ; Consonant # Lo [9] MEETEI MAYEK LETTER GOK..MEETEI MAYEK LETTE 10A15..10A17 ; Consonant # Lo [3] KHAROSHTHI LETTER CA..KHAROSHTHI LETTER JA 10A19..10A35 ; Consonant # Lo [29] KHAROSHTHI LETTER NYA..KHAROSHTHI LETTER VHA 11013..11037 ; Consonant # Lo [37] BRAHMI LETTER KA..BRAHMI LETTER OLD TAMIL NNNA +11075 ; Consonant # Lo BRAHMI LETTER OLD TAMIL LLA 1108D..110AF ; Consonant # Lo [35] KAITHI LETTER KA..KAITHI LETTER HA 11107..11126 ; Consonant # Lo [32] CHAKMA LETTER KAA..CHAKMA LETTER HAA 11144 ; Consonant # Lo CHAKMA LETTER LHAA @@ -888,6 +895,7 @@ ABD2..ABDA ; Consonant # Lo [9] MEETEI MAYEK LETTER GOK..MEETEI MAYEK LETTE 1168A..116AA ; Consonant # Lo [33] TAKRI LETTER KA..TAKRI LETTER RRA 116B8 ; Consonant # Lo TAKRI LETTER ARCHAIC KHA 11700..1171A ; Consonant # Lo [27] AHOM LETTER KA..AHOM LETTER ALTERNATE BA +11740..11746 ; Consonant # Lo [7] AHOM LETTER CA..AHOM LETTER LLA 1180A..1182B ; Consonant # Lo [34] DOGRA LETTER KA..DOGRA LETTER RRA 1190C..11913 ; Consonant # Lo [8] DIVES AKURU LETTER KA..DIVES AKURU LETTER JA 11915..11916 ; Consonant # Lo [2] DIVES AKURU LETTER NYA..DIVES AKURU LETTER TTA @@ -910,6 +918,8 @@ ABD2..ABDA ; Consonant # Lo [9] MEETEI MAYEK LETTER GOK..MEETEI MAYEK LETTE # [Not derivable] 09CE ; Consonant_Dead # Lo BENGALI LETTER KHANDA TA +0C5D ; Consonant_Dead # Lo TELUGU LETTER NAKAARA POLLU +0CDD ; Consonant_Dead # Lo KANNADA LETTER NAKAARA POLLU 0D54..0D56 ; Consonant_Dead # Lo [3] MALAYALAM LETTER CHILLU M..MALAYALAM LETTER CHILLU LLL 0D7A..0D7F ; Consonant_Dead # Lo [6] MALAYALAM LETTER CHILLU NN..MALAYALAM LETTER CHILLU K 1CF2..1CF3 ; Consonant_Dead # Lo [2] VEDIC SIGN ARDHAVISARGA..VEDIC SIGN ROTATED ARDHAVISARGA @@ -975,9 +985,6 @@ ABD2..ABDA ; Consonant # Lo [9] MEETEI MAYEK LETTER GOK..MEETEI MAYEK LETTE # [Not derivable] 17CC ; Consonant_Succeeding_Repha # Mn KHMER SIGN ROBAT -1B03 ; Consonant_Succeeding_Repha # Mn BALINESE SIGN SURANG -1B81 ; Consonant_Succeeding_Repha # Mn SUNDANESE SIGN PANGLAYAR -A982 ; Consonant_Succeeding_Repha # Mn JAVANESE SIGN LAYAR # ================================================ @@ -1043,11 +1050,14 @@ AA35..AA36 ; Consonant_Medial # Mn [2] CHAM CONSONANT SIGN LA..CHAM CONSONA 1939 ; Consonant_Final # Mn LIMBU SIGN MUKPHRENG 19C1..19C7 ; Consonant_Final # Lo [7] NEW TAI LUE LETTER FINAL V..NEW TAI LUE LETTER FINAL B 1A58..1A59 ; Consonant_Final # Mn [2] TAI THAM SIGN MAI KANG LAI..TAI THAM CONSONANT SIGN FINAL NGA +1B03 ; Consonant_Final # Mn BALINESE SIGN SURANG +1B81 ; Consonant_Final # Mn SUNDANESE SIGN PANGLAYAR 1BBE..1BBF ; Consonant_Final # Lo [2] SUNDANESE LETTER FINAL K..SUNDANESE LETTER FINAL M 1BF0..1BF1 ; Consonant_Final # Mn [2] BATAK CONSONANT SIGN NG..BATAK CONSONANT SIGN H 1C2D..1C33 ; Consonant_Final # Mn [7] LEPCHA CONSONANT SIGN K..LEPCHA CONSONANT SIGN T A94F..A951 ; Consonant_Final # Mn [3] REJANG CONSONANT SIGN NG..REJANG CONSONANT SIGN R A952 ; Consonant_Final # Mc REJANG CONSONANT SIGN H +A982 ; Consonant_Final # Mn JAVANESE SIGN LAYAR AA40..AA42 ; Consonant_Final # Lo [3] CHAM LETTER FINAL K..CHAM LETTER FINAL NG AA43 ; Consonant_Final # Mn CHAM CONSONANT SIGN FINAL NG AA44..AA4B ; Consonant_Final # Lo [8] CHAM LETTER FINAL CH..CHAM LETTER FINAL SS diff --git a/gnu/usr.bin/perl/lib/unicore/Jamo.txt b/gnu/usr.bin/perl/lib/unicore/Jamo.txt index 7e171e1cda6..298d9df988c 100644 --- a/gnu/usr.bin/perl/lib/unicore/Jamo.txt +++ b/gnu/usr.bin/perl/lib/unicore/Jamo.txt @@ -1,6 +1,6 @@ -# Jamo-13.0.0.txt -# Date: 2019-09-09, 19:46:00 GMT [KW, LI] -# © 2019 Unicode®, Inc. +# Jamo-14.0.0.txt +# Date: 2021-03-16, 21:43:00 GMT [KW, LI] +# © 2021 Unicode®, Inc. # For terms of use, see http://www.unicode.org/terms_of_use.html # # Unicode Character Database @@ -8,7 +8,7 @@ # # This file defines the Jamo_Short_Name property. # -# See Section 3.12 of The Unicode Standard, Version 13.0 +# See Section 3.12 of The Unicode Standard, Version 14.0 # for more information. # # Each line contains two fields, separated by a semicolon. diff --git a/gnu/usr.bin/perl/lib/unicore/LineBreak.txt b/gnu/usr.bin/perl/lib/unicore/LineBreak.txt index 22abddcd90e..aa5985b8f09 100644 --- a/gnu/usr.bin/perl/lib/unicore/LineBreak.txt +++ b/gnu/usr.bin/perl/lib/unicore/LineBreak.txt @@ -1,11 +1,11 @@ -# LineBreak-13.0.0.txt -# Date: 2020-02-17, 07:43:02 GMT [KW, LI] -# © 2020 Unicode®, Inc. +# LineBreak-14.0.0.txt +# Date: 2021-07-06, 09:58:55 GMT [KW, LI] +# © 2021 Unicode®, Inc. # Unicode and the Unicode Logo are registered trademarks of Unicode, Inc. in the U.S. and other countries. -# For terms of use, see http://www.unicode.org/terms_of_use.html +# For terms of use, see https://www.unicode.org/terms_of_use.html # # Unicode Character Database -# For documentation, see http://www.unicode.org/reports/tr44/ +# For documentation, see https://www.unicode.org/reports/tr44/ # # Line_Break Property # @@ -49,7 +49,7 @@ # with ranges of code points, the code point count in square brackets. # # For more information, see UAX #14: Unicode Line Breaking Algorithm, -# at http://www.unicode.org/reports/tr14/ +# at https://www.unicode.org/reports/tr14/ # # @missing: 0000..10FFFF; XX 0000..0008;CM # Cc [9] .. @@ -215,7 +215,7 @@ 0610..061A;CM # Mn [11] ARABIC SIGN SALLALLAHOU ALAYHE WASSALLAM..ARABIC SMALL KASRA 061B;EX # Po ARABIC SEMICOLON 061C;CM # Cf ARABIC LETTER MARK -061E..061F;EX # Po [2] ARABIC TRIPLE DOT PUNCTUATION MARK..ARABIC QUESTION MARK +061D..061F;EX # Po [3] ARABIC END OF TEXT MARK..ARABIC QUESTION MARK 0620..063F;AL # Lo [32] ARABIC LETTER KASHMIRI YEH..ARABIC LETTER FARSI YEH WITH THREE DOTS ABOVE 0640;AL # Lm ARABIC TATWEEL 0641..064A;AL # Lo [10] ARABIC LETTER FEH..ARABIC LETTER YEH @@ -277,9 +277,14 @@ 0859..085B;CM # Mn [3] MANDAIC AFFRICATION MARK..MANDAIC GEMINATION MARK 085E;AL # Po MANDAIC PUNCTUATION 0860..086A;AL # Lo [11] SYRIAC LETTER MALAYALAM NGA..SYRIAC LETTER MALAYALAM SSA -08A0..08B4;AL # Lo [21] ARABIC LETTER BEH WITH SMALL V BELOW..ARABIC LETTER KAF WITH DOT BELOW -08B6..08C7;AL # Lo [18] ARABIC LETTER BEH WITH SMALL MEEM ABOVE..ARABIC LETTER LAM WITH SMALL ARABIC LETTER TAH ABOVE -08D3..08E1;CM # Mn [15] ARABIC SMALL LOW WAW..ARABIC SMALL HIGH SIGN SAFHA +0870..0887;AL # Lo [24] ARABIC LETTER ALEF WITH ATTACHED FATHA..ARABIC BASELINE ROUND DOT +0888;AL # Sk ARABIC RAISED ROUND DOT +0889..088E;AL # Lo [6] ARABIC LETTER NOON WITH INVERTED SMALL V..ARABIC VERTICAL TAIL +0890..0891;AL # Cf [2] ARABIC POUND MARK ABOVE..ARABIC PIASTRE MARK ABOVE +0898..089F;CM # Mn [8] ARABIC SMALL HIGH WORD AL-JUZ..ARABIC HALF MADDA OVER MADDA +08A0..08C8;AL # Lo [41] ARABIC LETTER BEH WITH SMALL V BELOW..ARABIC LETTER GRAF +08C9;AL # Lm ARABIC SMALL FARSI YEH +08CA..08E1;CM # Mn [24] ARABIC SMALL HIGH FARSI YEH..ARABIC SMALL HIGH SIGN SAFHA 08E2;AL # Cf ARABIC DISPUTED END OF AYAH 08E3..08FF;CM # Mn [29] ARABIC TURNED DAMMA BELOW..ARABIC MARK SIDEWAYS NOON GHUNNA 0900..0902;CM # Mn [3] DEVANAGARI SIGN INVERTED CANDRABINDU..DEVANAGARI SIGN ANUSVARA @@ -437,6 +442,7 @@ 0C0E..0C10;AL # Lo [3] TELUGU LETTER E..TELUGU LETTER AI 0C12..0C28;AL # Lo [23] TELUGU LETTER O..TELUGU LETTER NA 0C2A..0C39;AL # Lo [16] TELUGU LETTER PA..TELUGU LETTER HA +0C3C;CM # Mn TELUGU SIGN NUKTA 0C3D;AL # Lo TELUGU SIGN AVAGRAHA 0C3E..0C40;CM # Mn [3] TELUGU VOWEL SIGN AA..TELUGU VOWEL SIGN II 0C41..0C44;CM # Mc [4] TELUGU VOWEL SIGN U..TELUGU VOWEL SIGN VOCALIC RR @@ -444,6 +450,7 @@ 0C4A..0C4D;CM # Mn [4] TELUGU VOWEL SIGN O..TELUGU SIGN VIRAMA 0C55..0C56;CM # Mn [2] TELUGU LENGTH MARK..TELUGU AI LENGTH MARK 0C58..0C5A;AL # Lo [3] TELUGU LETTER TSA..TELUGU LETTER RRRA +0C5D;AL # Lo TELUGU LETTER NAKAARA POLLU 0C60..0C61;AL # Lo [2] TELUGU LETTER VOCALIC RR..TELUGU LETTER VOCALIC LL 0C62..0C63;CM # Mn [2] TELUGU VOWEL SIGN VOCALIC L..TELUGU VOWEL SIGN VOCALIC LL 0C66..0C6F;NU # Nd [10] TELUGU DIGIT ZERO..TELUGU DIGIT NINE @@ -469,7 +476,7 @@ 0CCA..0CCB;CM # Mc [2] KANNADA VOWEL SIGN O..KANNADA VOWEL SIGN OO 0CCC..0CCD;CM # Mn [2] KANNADA VOWEL SIGN AU..KANNADA SIGN VIRAMA 0CD5..0CD6;CM # Mc [2] KANNADA LENGTH MARK..KANNADA AI LENGTH MARK -0CDE;AL # Lo KANNADA LETTER FA +0CDD..0CDE;AL # Lo [2] KANNADA LETTER NAKAARA POLLU..KANNADA LETTER FA 0CE0..0CE1;AL # Lo [2] KANNADA LETTER VOCALIC RR..KANNADA LETTER VOCALIC LL 0CE2..0CE3;CM # Mn [2] KANNADA VOWEL SIGN VOCALIC L..KANNADA VOWEL SIGN VOCALIC LL 0CE6..0CEF;NU # Nd [10] KANNADA DIGIT ZERO..KANNADA DIGIT NINE @@ -672,11 +679,13 @@ 16EB..16ED;BA # Po [3] RUNIC SINGLE PUNCTUATION..RUNIC CROSS PUNCTUATION 16EE..16F0;AL # Nl [3] RUNIC ARLAUG SYMBOL..RUNIC BELGTHOR SYMBOL 16F1..16F8;AL # Lo [8] RUNIC LETTER K..RUNIC LETTER FRANKS CASKET AESC -1700..170C;AL # Lo [13] TAGALOG LETTER A..TAGALOG LETTER YA -170E..1711;AL # Lo [4] TAGALOG LETTER LA..TAGALOG LETTER HA +1700..1711;AL # Lo [18] TAGALOG LETTER A..TAGALOG LETTER HA 1712..1714;CM # Mn [3] TAGALOG VOWEL SIGN I..TAGALOG SIGN VIRAMA +1715;CM # Mc TAGALOG SIGN PAMUDPOD +171F;AL # Lo TAGALOG LETTER ARCHAIC RA 1720..1731;AL # Lo [18] HANUNOO LETTER A..HANUNOO LETTER HA -1732..1734;CM # Mn [3] HANUNOO VOWEL SIGN I..HANUNOO SIGN PAMUDPOD +1732..1733;CM # Mn [2] HANUNOO VOWEL SIGN I..HANUNOO VOWEL SIGN U +1734;CM # Mc HANUNOO SIGN PAMUDPOD 1735..1736;BA # Po [2] PHILIPPINE SINGLE PUNCTUATION..PHILIPPINE DOUBLE PUNCTUATION 1740..1751;AL # Lo [18] BUHID LETTER A..BUHID LETTER HA 1752..1753;CM # Mn [2] BUHID VOWEL SIGN I..BUHID VOWEL SIGN U @@ -711,6 +720,7 @@ 180A;AL # Po MONGOLIAN NIRUGU 180B..180D;CM # Mn [3] MONGOLIAN FREE VARIATION SELECTOR ONE..MONGOLIAN FREE VARIATION SELECTOR THREE 180E;GL # Cf MONGOLIAN VOWEL SEPARATOR +180F;CM # Mn MONGOLIAN FREE VARIATION SELECTOR FOUR 1810..1819;NU # Nd [10] MONGOLIAN DIGIT ZERO..MONGOLIAN DIGIT NINE 1820..1842;AL # Lo [35] MONGOLIAN LETTER A..MONGOLIAN LETTER CHI 1843;AL # Lm MONGOLIAN LETTER TODO LONG VOWEL SIGN @@ -766,7 +776,7 @@ 1AA8..1AAD;SA # Po [6] TAI THAM SIGN KAAN..TAI THAM SIGN CAANG 1AB0..1ABD;CM # Mn [14] COMBINING DOUBLED CIRCUMFLEX ACCENT..COMBINING PARENTHESES BELOW 1ABE;CM # Me COMBINING PARENTHESES OVERLAY -1ABF..1AC0;CM # Mn [2] COMBINING LATIN SMALL LETTER W BELOW..COMBINING LATIN SMALL LETTER TURNED W BELOW +1ABF..1ACE;CM # Mn [16] COMBINING LATIN SMALL LETTER W BELOW..COMBINING LATIN SMALL LETTER INSULAR T 1B00..1B03;CM # Mn [4] BALINESE SIGN ULU RICEM..BALINESE SIGN SURANG 1B04;CM # Mc BALINESE SIGN BISAH 1B05..1B33;AL # Lo [47] BALINESE LETTER AKARA..BALINESE LETTER HA @@ -778,7 +788,7 @@ 1B3D..1B41;CM # Mc [5] BALINESE VOWEL SIGN LA LENGA TEDUNG..BALINESE VOWEL SIGN TALING REPA TEDUNG 1B42;CM # Mn BALINESE VOWEL SIGN PEPET 1B43..1B44;CM # Mc [2] BALINESE VOWEL SIGN PEPET TEDUNG..BALINESE ADEG ADEG -1B45..1B4B;AL # Lo [7] BALINESE LETTER KAF SASAK..BALINESE LETTER ASYURA SASAK +1B45..1B4C;AL # Lo [8] BALINESE LETTER KAF SASAK..BALINESE LETTER ARCHAIC JNYA 1B50..1B59;NU # Nd [10] BALINESE DIGIT ZERO..BALINESE DIGIT NINE 1B5A..1B5B;BA # Po [2] BALINESE PANTI..BALINESE PAMADA 1B5C;AL # Po BALINESE WINDU @@ -786,6 +796,7 @@ 1B61..1B6A;AL # So [10] BALINESE MUSICAL SYMBOL DONG..BALINESE MUSICAL SYMBOL DANG GEDE 1B6B..1B73;CM # Mn [9] BALINESE MUSICAL SYMBOL COMBINING TEGEH..BALINESE MUSICAL SYMBOL COMBINING GONG 1B74..1B7C;AL # So [9] BALINESE MUSICAL SYMBOL RIGHT-HAND OPEN DUG..BALINESE MUSICAL SYMBOL LEFT-HAND OPEN PING +1B7D..1B7E;BA # Po [2] BALINESE PANTI LANTANG..BALINESE PAMADA LANTANG 1B80..1B81;CM # Mn [2] SUNDANESE SIGN PANYECEK..SUNDANESE SIGN PANGLAYAR 1B82;CM # Mc SUNDANESE SIGN PANGWISAD 1B83..1BA0;AL # Lo [30] SUNDANESE LETTER A..SUNDANESE LETTER HA @@ -844,8 +855,7 @@ 1D79..1D7F;AL # Ll [7] LATIN SMALL LETTER INSULAR G..LATIN SMALL LETTER UPSILON WITH STROKE 1D80..1D9A;AL # Ll [27] LATIN SMALL LETTER B WITH PALATAL HOOK..LATIN SMALL LETTER EZH WITH RETROFLEX HOOK 1D9B..1DBF;AL # Lm [37] MODIFIER LETTER SMALL TURNED ALPHA..MODIFIER LETTER SMALL THETA -1DC0..1DF9;CM # Mn [58] COMBINING DOTTED GRAVE ACCENT..COMBINING WIDE INVERTED BRIDGE BELOW -1DFB..1DFF;CM # Mn [5] COMBINING DELETION MARK..COMBINING RIGHT ARROWHEAD AND DOWN ARROWHEAD BELOW +1DC0..1DFF;CM # Mn [64] COMBINING DOTTED GRAVE ACCENT..COMBINING RIGHT ARROWHEAD AND DOWN ARROWHEAD BELOW 1E00..1EFF;AL # L& [256] LATIN CAPITAL LETTER A WITH RING BELOW..LATIN SMALL LETTER Y WITH LOOP 1F00..1F15;AL # L& [22] GREEK SMALL LETTER ALPHA WITH PSILI..GREEK SMALL LETTER EPSILON WITH DASIA AND OXIA 1F18..1F1D;AL # Lu [6] GREEK CAPITAL LETTER EPSILON WITH PSILI..GREEK CAPITAL LETTER EPSILON WITH DASIA AND OXIA @@ -953,7 +963,8 @@ 20BC..20BD;PR # Sc [2] MANAT SIGN..RUBLE SIGN 20BE;PO # Sc LARI SIGN 20BF;PR # Sc BITCOIN SIGN -20C0..20CF;PR # Cn [16] .. +20C0;PO # Sc SOM SIGN +20C1..20CF;PR # Cn [15] .. 20D0..20DC;CM # Mn [13] COMBINING LEFT HARPOON ABOVE..COMBINING FOUR DOTS ABOVE 20DD..20E0;CM # Me [4] COMBINING ENCLOSING CIRCLE..COMBINING ENCLOSING CIRCLE BACKSLASH 20E1;CM # Mn COMBINING LEFT RIGHT ARROW ABOVE @@ -1307,8 +1318,7 @@ 2B5A..2B73;AL # So [26] SLANTED NORTH ARROW WITH HOOKED HEAD..DOWNWARDS TRIANGLE-HEADED ARROW TO BAR 2B76..2B95;AL # So [32] NORTH WEST TRIANGLE-HEADED ARROW TO BAR..RIGHTWARDS BLACK ARROW 2B97..2BFF;AL # So [105] SYMBOL FOR TYPE A ELECTRONICS..HELLSCHREIBER PAUSE SYMBOL -2C00..2C2E;AL # Lu [47] GLAGOLITIC CAPITAL LETTER AZU..GLAGOLITIC CAPITAL LETTER LATINATE MYSLITE -2C30..2C5E;AL # Ll [47] GLAGOLITIC SMALL LETTER AZU..GLAGOLITIC SMALL LETTER LATINATE MYSLITE +2C00..2C5F;AL # L& [96] GLAGOLITIC CAPITAL LETTER AZU..GLAGOLITIC SMALL LETTER CAUDATE CHRIVI 2C60..2C7B;AL # L& [28] LATIN CAPITAL LETTER L WITH DOUBLE BAR..LATIN LETTER SMALL CAPITAL TURNED E 2C7C..2C7D;AL # Lm [2] LATIN SUBSCRIPT SMALL LETTER J..MODIFIER LETTER CAPITAL V 2C7E..2C7F;AL # Lu [2] LATIN CAPITAL LETTER S WITH SWASH TAIL..LATIN CAPITAL LETTER Z WITH SWASH TAIL @@ -1390,6 +1400,16 @@ 2E4E..2E4F;BA # Po [2] PUNCTUS ELEVATUS MARK..CORNISH VERSE DIVIDER 2E50..2E51;AL # So [2] CROSS PATTY WITH RIGHT CROSSBAR..CROSS PATTY WITH LEFT CROSSBAR 2E52;AL # Po TIRONIAN SIGN CAPITAL ET +2E53..2E54;EX # Po [2] MEDIEVAL EXCLAMATION MARK..MEDIEVAL QUESTION MARK +2E55;OP # Ps LEFT SQUARE BRACKET WITH STROKE +2E56;CL # Pe RIGHT SQUARE BRACKET WITH STROKE +2E57;OP # Ps LEFT SQUARE BRACKET WITH DOUBLE STROKE +2E58;CL # Pe RIGHT SQUARE BRACKET WITH DOUBLE STROKE +2E59;OP # Ps TOP HALF LEFT PARENTHESIS +2E5A;CL # Pe TOP HALF RIGHT PARENTHESIS +2E5B;OP # Ps BOTTOM HALF LEFT PARENTHESIS +2E5C;CL # Pe BOTTOM HALF RIGHT PARENTHESIS +2E5D;BA # Pd OBLIQUE HYPHEN 2E80..2E99;ID # So [26] CJK RADICAL REPEAT..CJK RADICAL RAP 2E9B..2EF3;ID # So [89] CJK RADICAL CHOKE..CJK RADICAL C-SIMPLIFIED TURTLE 2F00..2FD5;ID # So [214] KANGXI RADICAL ONE..KANGXI RADICAL FLUTE @@ -1510,8 +1530,7 @@ 3300..33FF;ID # So [256] SQUARE APAATO..SQUARE GAL 3400..4DBF;ID # Lo [6592] CJK UNIFIED IDEOGRAPH-3400..CJK UNIFIED IDEOGRAPH-4DBF 4DC0..4DFF;AL # So [64] HEXAGRAM FOR THE CREATIVE HEAVEN..HEXAGRAM FOR BEFORE COMPLETION -4E00..9FFC;ID # Lo [20989] CJK UNIFIED IDEOGRAPH-4E00..CJK UNIFIED IDEOGRAPH-9FFC -9FFD..9FFF;ID # Cn [3] .. +4E00..9FFF;ID # Lo [20992] CJK UNIFIED IDEOGRAPH-4E00..CJK UNIFIED IDEOGRAPH-9FFF A000..A014;ID # Lo [21] YI SYLLABLE IT..YI SYLLABLE E A015;NS # Lm YI SYLLABLE WU A016..A48C;ID # Lo [1143] YI SYLLABLE BIT..YI SYLLABLE YYR @@ -1553,8 +1572,11 @@ A788;AL # Lm MODIFIER LETTER LOW CIRCUMFLEX ACCENT A789..A78A;AL # Sk [2] MODIFIER LETTER COLON..MODIFIER LETTER SHORT EQUALS SIGN A78B..A78E;AL # L& [4] LATIN CAPITAL LETTER SALTILLO..LATIN SMALL LETTER L WITH RETROFLEX HOOK AND BELT A78F;AL # Lo LATIN LETTER SINOLOGICAL DOT -A790..A7BF;AL # L& [48] LATIN CAPITAL LETTER N WITH DESCENDER..LATIN SMALL LETTER GLOTTAL U -A7C2..A7CA;AL # L& [9] LATIN CAPITAL LETTER ANGLICANA W..LATIN SMALL LETTER S WITH SHORT STROKE OVERLAY +A790..A7CA;AL # L& [59] LATIN CAPITAL LETTER N WITH DESCENDER..LATIN SMALL LETTER S WITH SHORT STROKE OVERLAY +A7D0..A7D1;AL # L& [2] LATIN CAPITAL LETTER CLOSED INSULAR G..LATIN SMALL LETTER CLOSED INSULAR G +A7D3;AL # Ll LATIN SMALL LETTER DOUBLE THORN +A7D5..A7D9;AL # L& [5] LATIN SMALL LETTER DOUBLE WYNN..LATIN SMALL LETTER SIGMOID S +A7F2..A7F4;AL # Lm [3] MODIFIER LETTER CAPITAL C..MODIFIER LETTER CAPITAL Q A7F5..A7F6;AL # L& [2] LATIN CAPITAL LETTER REVERSED HALF H..LATIN SMALL LETTER REVERSED HALF H A7F7;AL # Lo LATIN EPIGRAPHIC LETTER SIDEWAYS I A7F8..A7F9;AL # Lm [2] MODIFIER LETTER CAPITAL H WITH STROKE..MODIFIER LETTER SMALL LIGATURE OE @@ -2511,15 +2533,17 @@ FB40..FB41;HL # Lo [2] HEBREW LETTER NUN WITH DAGESH..HEBREW LETTER SAME FB43..FB44;HL # Lo [2] HEBREW LETTER FINAL PE WITH DAGESH..HEBREW LETTER PE WITH DAGESH FB46..FB4F;HL # Lo [10] HEBREW LETTER TSADI WITH DAGESH..HEBREW LIGATURE ALEF LAMED FB50..FBB1;AL # Lo [98] ARABIC LETTER ALEF WASLA ISOLATED FORM..ARABIC LETTER YEH BARREE WITH HAMZA ABOVE FINAL FORM -FBB2..FBC1;AL # Sk [16] ARABIC SYMBOL DOT ABOVE..ARABIC SYMBOL SMALL TAH BELOW +FBB2..FBC2;AL # Sk [17] ARABIC SYMBOL DOT ABOVE..ARABIC SYMBOL WASLA ABOVE FBD3..FD3D;AL # Lo [363] ARABIC LETTER NG ISOLATED FORM..ARABIC LIGATURE ALEF WITH FATHATAN ISOLATED FORM FD3E;CL # Pe ORNATE LEFT PARENTHESIS FD3F;OP # Ps ORNATE RIGHT PARENTHESIS +FD40..FD4F;AL # So [16] ARABIC LIGATURE RAHIMAHU ALLAAH..ARABIC LIGATURE RAHIMAHUM ALLAAH FD50..FD8F;AL # Lo [64] ARABIC LIGATURE TEH WITH JEEM WITH MEEM INITIAL FORM..ARABIC LIGATURE MEEM WITH KHAH WITH MEEM INITIAL FORM FD92..FDC7;AL # Lo [54] ARABIC LIGATURE MEEM WITH JEEM WITH KHAH INITIAL FORM..ARABIC LIGATURE NOON WITH JEEM WITH YEH FINAL FORM +FDCF;AL # So ARABIC LIGATURE SALAAMUHU ALAYNAA FDF0..FDFB;AL # Lo [12] ARABIC LIGATURE SALLA USED AS KORANIC STOP SIGN ISOLATED FORM..ARABIC LIGATURE JALLAJALALOUHOU FDFC;PO # Sc RIAL SIGN -FDFD;AL # So ARABIC LIGATURE BISMILLAH AR-RAHMAN AR-RAHEEM +FDFD..FDFF;AL # So [3] ARABIC LIGATURE BISMILLAH AR-RAHMAN AR-RAHEEM..ARABIC LIGATURE AZZA WA JALL FE00..FE0F;CM # Mn [16] VARIATION SELECTOR-1..VARIATION SELECTOR-16 FE10;IS # Po PRESENTATION FORM FOR VERTICAL COMMA FE11..FE12;CL # Po [2] PRESENTATION FORM FOR VERTICAL IDEOGRAPHIC COMMA..PRESENTATION FORM FOR VERTICAL IDEOGRAPHIC FULL STOP @@ -2682,9 +2706,20 @@ FFFD;AI # So REPLACEMENT CHARACTER 10500..10527;AL # Lo [40] ELBASAN LETTER A..ELBASAN LETTER KHE 10530..10563;AL # Lo [52] CAUCASIAN ALBANIAN LETTER ALT..CAUCASIAN ALBANIAN LETTER KIW 1056F;AL # Po CAUCASIAN ALBANIAN CITATION MARK +10570..1057A;AL # Lu [11] VITHKUQI CAPITAL LETTER A..VITHKUQI CAPITAL LETTER GA +1057C..1058A;AL # Lu [15] VITHKUQI CAPITAL LETTER HA..VITHKUQI CAPITAL LETTER RE +1058C..10592;AL # Lu [7] VITHKUQI CAPITAL LETTER SE..VITHKUQI CAPITAL LETTER XE +10594..10595;AL # Lu [2] VITHKUQI CAPITAL LETTER Y..VITHKUQI CAPITAL LETTER ZE +10597..105A1;AL # Ll [11] VITHKUQI SMALL LETTER A..VITHKUQI SMALL LETTER GA +105A3..105B1;AL # Ll [15] VITHKUQI SMALL LETTER HA..VITHKUQI SMALL LETTER RE +105B3..105B9;AL # Ll [7] VITHKUQI SMALL LETTER SE..VITHKUQI SMALL LETTER XE +105BB..105BC;AL # Ll [2] VITHKUQI SMALL LETTER Y..VITHKUQI SMALL LETTER ZE 10600..10736;AL # Lo [311] LINEAR A SIGN AB001..LINEAR A SIGN A664 10740..10755;AL # Lo [22] LINEAR A SIGN A701 A..LINEAR A SIGN A732 JE 10760..10767;AL # Lo [8] LINEAR A SIGN A800..LINEAR A SIGN A807 +10780..10785;AL # Lm [6] MODIFIER LETTER SMALL CAPITAL AA..MODIFIER LETTER SMALL B WITH HOOK +10787..107B0;AL # Lm [42] MODIFIER LETTER SMALL DZ DIGRAPH..MODIFIER LETTER SMALL V WITH RIGHT HOOK +107B2..107BA;AL # Lm [9] MODIFIER LETTER SMALL CAPITAL Y..MODIFIER LETTER SMALL S WITH CURL 10800..10805;AL # Lo [6] CYPRIOT SYLLABLE A..CYPRIOT SYLLABLE JA 10808;AL # Lo CYPRIOT SYLLABLE JO 1080A..10835;AL # Lo [44] CYPRIOT SYLLABLE KA..CYPRIOT SYLLABLE WO @@ -2765,6 +2800,9 @@ FFFD;AI # So REPLACEMENT CHARACTER 10F46..10F50;CM # Mn [11] SOGDIAN COMBINING DOT BELOW..SOGDIAN COMBINING STROKE BELOW 10F51..10F54;AL # No [4] SOGDIAN NUMBER ONE..SOGDIAN NUMBER ONE HUNDRED 10F55..10F59;AL # Po [5] SOGDIAN PUNCTUATION TWO VERTICAL BARS..SOGDIAN PUNCTUATION HALF CIRCLE WITH DOT +10F70..10F81;AL # Lo [18] OLD UYGHUR LETTER ALEPH..OLD UYGHUR LETTER LESH +10F82..10F85;CM # Mn [4] OLD UYGHUR COMBINING DOT ABOVE..OLD UYGHUR COMBINING TWO DOTS BELOW +10F86..10F89;AL # Po [4] OLD UYGHUR PUNCTUATION BAR..OLD UYGHUR PUNCTUATION FOUR DOTS 10FB0..10FC4;AL # Lo [21] CHORASMIAN LETTER ALEPH..CHORASMIAN LETTER TAW 10FC5..10FCB;AL # No [7] CHORASMIAN NUMBER ONE..CHORASMIAN NUMBER ONE HUNDRED 10FE0..10FF6;AL # Lo [23] ELYMAIC LETTER ALEPH..ELYMAIC LIGATURE ZAYIN-YODH @@ -2777,6 +2815,10 @@ FFFD;AI # So REPLACEMENT CHARACTER 11049..1104D;AL # Po [5] BRAHMI PUNCTUATION DOT..BRAHMI PUNCTUATION LOTUS 11052..11065;AL # No [20] BRAHMI NUMBER ONE..BRAHMI NUMBER ONE THOUSAND 11066..1106F;NU # Nd [10] BRAHMI DIGIT ZERO..BRAHMI DIGIT NINE +11070;CM # Mn BRAHMI SIGN OLD TAMIL VIRAMA +11071..11072;AL # Lo [2] BRAHMI LETTER OLD TAMIL SHORT E..BRAHMI LETTER OLD TAMIL SHORT O +11073..11074;CM # Mn [2] BRAHMI VOWEL SIGN OLD TAMIL SHORT E..BRAHMI VOWEL SIGN OLD TAMIL SHORT O +11075;AL # Lo BRAHMI LETTER OLD TAMIL LLA 1107F;CM # Mn BRAHMI NUMBER JOINER 11080..11081;CM # Mn [2] KAITHI SIGN CANDRABINDU..KAITHI SIGN ANUSVARA 11082;CM # Mc KAITHI SIGN VISARGA @@ -2788,6 +2830,7 @@ FFFD;AI # So REPLACEMENT CHARACTER 110BB..110BC;AL # Po [2] KAITHI ABBREVIATION SIGN..KAITHI ENUMERATION SIGN 110BD;AL # Cf KAITHI NUMBER SIGN 110BE..110C1;BA # Po [4] KAITHI SECTION MARK..KAITHI DOUBLE DANDA +110C2;CM # Mn KAITHI VOWEL SIGN VOCALIC R 110CD;AL # Cf KAITHI NUMBER SIGN ABOVE 110D0..110E8;AL # Lo [25] SORA SOMPENG LETTER SAH..SORA SOMPENG LETTER MAE 110F0..110F9;NU # Nd [10] SORA SOMPENG DIGIT ZERO..SORA SOMPENG DIGIT NINE @@ -2934,6 +2977,7 @@ FFFD;AI # So REPLACEMENT CHARACTER 116B6;CM # Mc TAKRI SIGN VIRAMA 116B7;CM # Mn TAKRI SIGN NUKTA 116B8;AL # Lo TAKRI LETTER ARCHAIC KHA +116B9;AL # Po TAKRI ABBREVIATION SIGN 116C0..116C9;NU # Nd [10] TAKRI DIGIT ZERO..TAKRI DIGIT NINE 11700..1171A;SA # Lo [27] AHOM LETTER KA..AHOM LETTER ALTERNATE BA 1171D..1171F;SA # Mn [3] AHOM CONSONANT SIGN MEDIAL LA..AHOM CONSONANT SIGN MEDIAL LIGATING RA @@ -2945,6 +2989,7 @@ FFFD;AI # So REPLACEMENT CHARACTER 1173A..1173B;SA # No [2] AHOM NUMBER TEN..AHOM NUMBER TWENTY 1173C..1173E;BA # Po [3] AHOM SIGN SMALL SECTION..AHOM SIGN RULAI 1173F;SA # So AHOM SYMBOL VI +11740..11746;SA # Lo [7] AHOM LETTER CA..AHOM LETTER LLA 11800..1182B;AL # Lo [44] DOGRA LETTER A..DOGRA LETTER RRA 1182C..1182E;CM # Mc [3] DOGRA VOWEL SIGN AA..DOGRA VOWEL SIGN II 1182F..11837;CM # Mn [9] DOGRA VOWEL SIGN U..DOGRA SIGN ANUSVARA @@ -3008,6 +3053,7 @@ FFFD;AI # So REPLACEMENT CHARACTER 11A9D;AL # Lo SOYOMBO MARK PLUTA 11A9E..11AA0;BB # Po [3] SOYOMBO HEAD MARK WITH MOON AND SUN AND TRIPLE FLAME..SOYOMBO HEAD MARK WITH MOON AND SUN 11AA1..11AA2;BA # Po [2] SOYOMBO TERMINAL MARK-1..SOYOMBO TERMINAL MARK-2 +11AB0..11ABF;AL # Lo [16] CANADIAN SYLLABICS NATTILIK HI..CANADIAN SYLLABICS SPA 11AC0..11AF8;AL # Lo [57] PAU CIN HAU LETTER PA..PAU CIN HAU GLOTTAL STOP FINAL 11C00..11C08;AL # Lo [9] BHAIKSUKI LETTER A..BHAIKSUKI LETTER VOCALIC L 11C0A..11C2E;AL # Lo [37] BHAIKSUKI LETTER E..BHAIKSUKI LETTER HA @@ -3065,6 +3111,8 @@ FFFD;AI # So REPLACEMENT CHARACTER 12400..1246E;AL # Nl [111] CUNEIFORM NUMERIC SIGN TWO ASH..CUNEIFORM NUMERIC SIGN NINE U VARIANT FORM 12470..12474;BA # Po [5] CUNEIFORM PUNCTUATION SIGN OLD ASSYRIAN WORD DIVIDER..CUNEIFORM PUNCTUATION SIGN DIAGONAL QUADCOLON 12480..12543;AL # Lo [196] CUNEIFORM SIGN AB TIMES NUN TENU..CUNEIFORM SIGN ZU5 TIMES THREE DISH TENU +12F90..12FF0;AL # Lo [97] CYPRO-MINOAN SIGN CM001..CYPRO-MINOAN SIGN CM114 +12FF1..12FF2;AL # Po [2] CYPRO-MINOAN SIGN CM301..CYPRO-MINOAN SIGN CM302 13000..13257;AL # Lo [600] EGYPTIAN HIEROGLYPH A001..EGYPTIAN HIEROGLYPH O006 13258..1325A;OP # Lo [3] EGYPTIAN HIEROGLYPH O006A..EGYPTIAN HIEROGLYPH O006C 1325B..1325D;CL # Lo [3] EGYPTIAN HIEROGLYPH O006D..EGYPTIAN HIEROGLYPH O006F @@ -3090,6 +3138,8 @@ FFFD;AI # So REPLACEMENT CHARACTER 16A40..16A5E;AL # Lo [31] MRO LETTER TA..MRO LETTER TEK 16A60..16A69;NU # Nd [10] MRO DIGIT ZERO..MRO DIGIT NINE 16A6E..16A6F;BA # Po [2] MRO DANDA..MRO DOUBLE DANDA +16A70..16ABE;AL # Lo [79] TANGSA LETTER OZ..TANGSA LETTER ZA +16AC0..16AC9;NU # Nd [10] TANGSA DIGIT ZERO..TANGSA DIGIT NINE 16AD0..16AED;AL # Lo [30] BASSA VAH LETTER ENNI..BASSA VAH LETTER I 16AF0..16AF4;CM # Mn [5] BASSA VAH COMBINING HIGH TONE..BASSA VAH COMBINING HIGH-LOW TONE 16AF5;BA # Po BASSA VAH FULL STOP @@ -3124,8 +3174,11 @@ FFFD;AI # So REPLACEMENT CHARACTER 18800..18AFF;ID # Lo [768] TANGUT COMPONENT-001..TANGUT COMPONENT-768 18B00..18CD5;AL # Lo [470] KHITAN SMALL SCRIPT CHARACTER-18B00..KHITAN SMALL SCRIPT CHARACTER-18CD5 18D00..18D08;ID # Lo [9] TANGUT IDEOGRAPH-18D00..TANGUT IDEOGRAPH-18D08 +1AFF0..1AFF3;AL # Lm [4] KATAKANA LETTER MINNAN TONE-2..KATAKANA LETTER MINNAN TONE-5 +1AFF5..1AFFB;AL # Lm [7] KATAKANA LETTER MINNAN TONE-7..KATAKANA LETTER MINNAN NASALIZED TONE-5 +1AFFD..1AFFE;AL # Lm [2] KATAKANA LETTER MINNAN NASALIZED TONE-7..KATAKANA LETTER MINNAN NASALIZED TONE-8 1B000..1B0FF;ID # Lo [256] KATAKANA LETTER ARCHAIC E..HENTAIGANA LETTER RE-2 -1B100..1B11E;ID # Lo [31] HENTAIGANA LETTER RE-3..HENTAIGANA LETTER N-MU-MO-2 +1B100..1B122;ID # Lo [35] HENTAIGANA LETTER RE-3..KATAKANA LETTER ARCHAIC WU 1B150..1B152;CJ # Lo [3] HIRAGANA LETTER SMALL WI..HIRAGANA LETTER SMALL WO 1B164..1B167;CJ # Lo [4] KATAKANA LETTER SMALL WI..KATAKANA LETTER SMALL N 1B170..1B2FB;ID # Lo [396] NUSHU CHARACTER-1B170..NUSHU CHARACTER-1B2FB @@ -3137,6 +3190,9 @@ FFFD;AI # So REPLACEMENT CHARACTER 1BC9D..1BC9E;CM # Mn [2] DUPLOYAN THICK LETTER SELECTOR..DUPLOYAN DOUBLE MARK 1BC9F;BA # Po DUPLOYAN PUNCTUATION CHINOOK FULL STOP 1BCA0..1BCA3;CM # Cf [4] SHORTHAND FORMAT LETTER OVERLAP..SHORTHAND FORMAT UP STEP +1CF00..1CF2D;CM # Mn [46] ZNAMENNY COMBINING MARK GORAZDO NIZKO S KRYZHEM ON LEFT..ZNAMENNY COMBINING MARK KRYZH ON LEFT +1CF30..1CF46;CM # Mn [23] ZNAMENNY COMBINING TONAL RANGE MARK MRACHNO..ZNAMENNY PRIZNAK MODIFIER ROG +1CF50..1CFC3;AL # So [116] ZNAMENNY NEUME KRYUK..ZNAMENNY NEUME PAUK 1D000..1D0F5;AL # So [246] BYZANTINE MUSICAL SYMBOL PSILI..BYZANTINE MUSICAL SYMBOL GORGON NEO KATO 1D100..1D126;AL # So [39] MUSICAL SYMBOL SINGLE BARLINE..MUSICAL SYMBOL DRUM CLEF-2 1D129..1D164;AL # So [60] MUSICAL SYMBOL MULTIPLE MEASURE REST..MUSICAL SYMBOL ONE HUNDRED TWENTY-EIGHTH NOTE @@ -3150,7 +3206,7 @@ FFFD;AI # So REPLACEMENT CHARACTER 1D185..1D18B;CM # Mn [7] MUSICAL SYMBOL COMBINING DOIT..MUSICAL SYMBOL COMBINING TRIPLE TONGUE 1D18C..1D1A9;AL # So [30] MUSICAL SYMBOL RINFORZANDO..MUSICAL SYMBOL DEGREE SLASH 1D1AA..1D1AD;CM # Mn [4] MUSICAL SYMBOL COMBINING DOWN BOW..MUSICAL SYMBOL COMBINING SNAP PIZZICATO -1D1AE..1D1E8;AL # So [59] MUSICAL SYMBOL PEDAL MARK..MUSICAL SYMBOL KIEVAN FLAT SIGN +1D1AE..1D1EA;AL # So [61] MUSICAL SYMBOL PEDAL MARK..MUSICAL SYMBOL KORON 1D200..1D241;AL # So [66] GREEK VOCAL NOTATION SYMBOL-1..GREEK INSTRUMENTAL NOTATION SYMBOL-54 1D242..1D244;CM # Mn [3] COMBINING GREEK MUSICAL TRISEME..COMBINING GREEK MUSICAL PENTASEME 1D245;AL # So GREEK MUSICAL LEIMMA @@ -3211,6 +3267,9 @@ FFFD;AI # So REPLACEMENT CHARACTER 1DA8B;AL # Po SIGNWRITING PARENTHESIS 1DA9B..1DA9F;CM # Mn [5] SIGNWRITING FILL MODIFIER-2..SIGNWRITING FILL MODIFIER-6 1DAA1..1DAAF;CM # Mn [15] SIGNWRITING ROTATION MODIFIER-2..SIGNWRITING ROTATION MODIFIER-16 +1DF00..1DF09;AL # Ll [10] LATIN SMALL LETTER FENG DIGRAPH WITH TRILL..LATIN SMALL LETTER T WITH HOOK AND RETROFLEX HOOK +1DF0A;AL # Lo LATIN LETTER RETROFLEX CLICK WITH RETROFLEX HOOK +1DF0B..1DF1E;AL # Ll [20] LATIN SMALL LETTER ESH WITH DOUBLE BAR..LATIN SMALL LETTER S WITH CURL 1E000..1E006;CM # Mn [7] COMBINING GLAGOLITIC LETTER AZU..COMBINING GLAGOLITIC LETTER ZHIVETE 1E008..1E018;CM # Mn [17] COMBINING GLAGOLITIC LETTER ZEMLJA..COMBINING GLAGOLITIC LETTER HERU 1E01B..1E021;CM # Mn [7] COMBINING GLAGOLITIC LETTER SHTA..COMBINING GLAGOLITIC LETTER YATI @@ -3222,10 +3281,16 @@ FFFD;AI # So REPLACEMENT CHARACTER 1E140..1E149;NU # Nd [10] NYIAKENG PUACHUE HMONG DIGIT ZERO..NYIAKENG PUACHUE HMONG DIGIT NINE 1E14E;AL # Lo NYIAKENG PUACHUE HMONG LOGOGRAM NYAJ 1E14F;AL # So NYIAKENG PUACHUE HMONG CIRCLED CA +1E290..1E2AD;AL # Lo [30] TOTO LETTER PA..TOTO LETTER A +1E2AE;CM # Mn TOTO SIGN RISING TONE 1E2C0..1E2EB;AL # Lo [44] WANCHO LETTER AA..WANCHO LETTER YIH 1E2EC..1E2EF;CM # Mn [4] WANCHO TONE TUP..WANCHO TONE KOINI 1E2F0..1E2F9;NU # Nd [10] WANCHO DIGIT ZERO..WANCHO DIGIT NINE 1E2FF;PR # Sc WANCHO NGUN SIGN +1E7E0..1E7E6;AL # Lo [7] ETHIOPIC SYLLABLE HHYA..ETHIOPIC SYLLABLE HHYO +1E7E8..1E7EB;AL # Lo [4] ETHIOPIC SYLLABLE GURAGE HHWA..ETHIOPIC SYLLABLE HHWE +1E7ED..1E7EE;AL # Lo [2] ETHIOPIC SYLLABLE GURAGE MWI..ETHIOPIC SYLLABLE GURAGE MWEE +1E7F0..1E7FE;AL # Lo [15] ETHIOPIC SYLLABLE GURAGE QWI..ETHIOPIC SYLLABLE GURAGE PWEE 1E800..1E8C4;AL # Lo [197] MENDE KIKAKUI SYLLABLE M001 KI..MENDE KIKAKUI SYLLABLE M060 NYON 1E8C7..1E8CF;AL # No [9] MENDE KIKAKUI DIGIT ONE..MENDE KIKAKUI DIGIT NINE 1E8D0..1E8D6;CM # Mn [7] MENDE KIKAKUI COMBINING NUMBER TEENS..MENDE KIKAKUI COMBINING NUMBER MILLIONS @@ -3389,8 +3454,8 @@ FFFD;AI # So REPLACEMENT CHARACTER 1F6C1..1F6CB;ID # So [11] BATHTUB..COUCH AND LAMP 1F6CC;EB # So SLEEPING ACCOMMODATION 1F6CD..1F6D7;ID # So [11] SHOPPING BAGS..ELEVATOR -1F6D8..1F6DF;ID # Cn [8] .. -1F6E0..1F6EC;ID # So [13] HAMMER AND WRENCH..AIRPLANE ARRIVING +1F6D8..1F6DC;ID # Cn [5] .. +1F6DD..1F6EC;ID # So [16] PLAYGROUND SLIDE..AIRPLANE ARRIVING 1F6ED..1F6EF;ID # Cn [3] .. 1F6F0..1F6FC;ID # So [13] SATELLITE..ROLLER SKATE 1F6FD..1F6FF;ID # Cn [3] .. @@ -3400,7 +3465,9 @@ FFFD;AI # So REPLACEMENT CHARACTER 1F7D5..1F7D8;ID # So [4] CIRCLED TRIANGLE..NEGATIVE CIRCLED SQUARE 1F7D9..1F7DF;ID # Cn [7] .. 1F7E0..1F7EB;ID # So [12] LARGE ORANGE CIRCLE..LARGE BROWN SQUARE -1F7EC..1F7FF;ID # Cn [20] .. +1F7EC..1F7EF;ID # Cn [4] .. +1F7F0;ID # So HEAVY EQUALS SIGN +1F7F1..1F7FF;ID # Cn [15] .. 1F800..1F80B;AL # So [12] LEFTWARDS ARROW WITH SMALL TRIANGLE ARROWHEAD..DOWNWARDS ARROW WITH LARGE TRIANGLE ARROWHEAD 1F80C..1F80F;ID # Cn [4] .. 1F810..1F847;AL # So [56] LEFTWARDS ARROW WITH SMALL EQUILATERAL ARROWHEAD..DOWNWARDS HEAVY ARROW @@ -3427,16 +3494,13 @@ FFFD;AI # So REPLACEMENT CHARACTER 1F93C..1F93E;EB # So [3] WRESTLERS..HANDBALL 1F93F..1F976;ID # So [56] DIVING MASK..FREEZING FACE 1F977;EB # So NINJA -1F978;ID # So DISGUISED FACE -1F979;ID # Cn -1F97A..1F9B4;ID # So [59] FACE WITH PLEADING EYES..BONE +1F978..1F9B4;ID # So [61] DISGUISED FACE..BONE 1F9B5..1F9B6;EB # So [2] LEG..FOOT 1F9B7;ID # So TOOTH 1F9B8..1F9B9;EB # So [2] SUPERHERO..SUPERVILLAIN 1F9BA;ID # So SAFETY VEST 1F9BB;EB # So EAR WITH HEARING AID -1F9BC..1F9CB;ID # So [16] MOTORIZED WHEELCHAIR..BUBBLE TEA -1F9CC;ID # Cn +1F9BC..1F9CC;ID # So [17] MOTORIZED WHEELCHAIR..TROLL 1F9CD..1F9CF;EB # So [3] STANDING PERSON..DEAF PERSON 1F9D0;ID # So FACE WITH MONOCLE 1F9D1..1F9DD;EB # So [13] ADULT..ELF @@ -3447,26 +3511,31 @@ FFFD;AI # So REPLACEMENT CHARACTER 1FA6E..1FA6F;ID # Cn [2] .. 1FA70..1FA74;ID # So [5] BALLET SHOES..THONG SANDAL 1FA75..1FA77;ID # Cn [3] .. -1FA78..1FA7A;ID # So [3] DROP OF BLOOD..STETHOSCOPE -1FA7B..1FA7F;ID # Cn [5] .. +1FA78..1FA7C;ID # So [5] DROP OF BLOOD..CRUTCH +1FA7D..1FA7F;ID # Cn [3] .. 1FA80..1FA86;ID # So [7] YO-YO..NESTING DOLLS 1FA87..1FA8F;ID # Cn [9] .. -1FA90..1FAA8;ID # So [25] RINGED PLANET..ROCK -1FAA9..1FAAF;ID # Cn [7] .. -1FAB0..1FAB6;ID # So [7] FLY..FEATHER -1FAB7..1FABF;ID # Cn [9] .. +1FA90..1FAAC;ID # So [29] RINGED PLANET..HAMSA +1FAAD..1FAAF;ID # Cn [3] .. +1FAB0..1FABA;ID # So [11] FLY..NEST WITH EGGS +1FABB..1FABF;ID # Cn [5] .. 1FAC0..1FAC2;ID # So [3] ANATOMICAL HEART..PEOPLE HUGGING -1FAC3..1FACF;ID # Cn [13] .. -1FAD0..1FAD6;ID # So [7] BLUEBERRIES..TEAPOT -1FAD7..1FAFF;ID # Cn [41] .. +1FAC3..1FAC5;EB # So [3] PREGNANT MAN..PERSON WITH CROWN +1FAC6..1FACF;ID # Cn [10] .. +1FAD0..1FAD9;ID # So [10] BLUEBERRIES..JAR +1FADA..1FADF;ID # Cn [6] .. +1FAE0..1FAE7;ID # So [8] MELTING FACE..BUBBLES +1FAE8..1FAEF;ID # Cn [8] .. +1FAF0..1FAF6;EB # So [7] HAND WITH INDEX FINGER AND THUMB CROSSED..HEART HANDS +1FAF7..1FAFF;ID # Cn [9] .. 1FB00..1FB92;AL # So [147] BLOCK SEXTANT-1..UPPER HALF INVERSE MEDIUM SHADE AND LOWER HALF BLOCK 1FB94..1FBCA;AL # So [55] LEFT HALF INVERSE MEDIUM SHADE AND RIGHT HALF BLOCK..WHITE UP-POINTING CHEVRON 1FBF0..1FBF9;NU # Nd [10] SEGMENTED DIGIT ZERO..SEGMENTED DIGIT NINE 1FC00..1FFFD;ID # Cn [1022] .. -20000..2A6DD;ID # Lo [42718] CJK UNIFIED IDEOGRAPH-20000..CJK UNIFIED IDEOGRAPH-2A6DD -2A6DE..2A6FF;ID # Cn [34] .. -2A700..2B734;ID # Lo [4149] CJK UNIFIED IDEOGRAPH-2A700..CJK UNIFIED IDEOGRAPH-2B734 -2B735..2B73F;ID # Cn [11] .. +20000..2A6DF;ID # Lo [42720] CJK UNIFIED IDEOGRAPH-20000..CJK UNIFIED IDEOGRAPH-2A6DF +2A6E0..2A6FF;ID # Cn [32] .. +2A700..2B738;ID # Lo [4153] CJK UNIFIED IDEOGRAPH-2A700..CJK UNIFIED IDEOGRAPH-2B738 +2B739..2B73F;ID # Cn [7] .. 2B740..2B81D;ID # Lo [222] CJK UNIFIED IDEOGRAPH-2B740..CJK UNIFIED IDEOGRAPH-2B81D 2B81E..2B81F;ID # Cn [2] .. 2B820..2CEA1;ID # Lo [5762] CJK UNIFIED IDEOGRAPH-2B820..CJK UNIFIED IDEOGRAPH-2CEA1 diff --git a/gnu/usr.bin/perl/lib/unicore/NameAliases.txt b/gnu/usr.bin/perl/lib/unicore/NameAliases.txt index 0e62632db59..8519284d898 100644 --- a/gnu/usr.bin/perl/lib/unicore/NameAliases.txt +++ b/gnu/usr.bin/perl/lib/unicore/NameAliases.txt @@ -1,6 +1,6 @@ -# NameAliases-13.0.0.txt -# Date: 2019-09-09, 19:47:00 GMT [KW, LI] -# © 2019 Unicode®, Inc. +# NameAliases-14.0.0.txt +# Date: 2020-10-21, 22:28:00 GMT [KW, LI] +# © 2020 Unicode®, Inc. # For terms of use, see http://www.unicode.org/terms_of_use.html # # Unicode Character Database @@ -270,6 +270,7 @@ 180C;FVS2;abbreviation 180D;FVS3;abbreviation 180E;MVS;abbreviation +180F;FVS4;abbreviation 200B;ZWSP;abbreviation 200C;ZWNJ;abbreviation 200D;ZWJ;abbreviation @@ -293,6 +294,7 @@ 2B7A;LEFTWARDS TRIANGLE-HEADED ARROW WITH DOUBLE VERTICAL STROKE;correction 2B7C;RIGHTWARDS TRIANGLE-HEADED ARROW WITH DOUBLE VERTICAL STROKE;correction A015;YI SYLLABLE ITERATION MARK;correction +AA6E;MYANMAR LETTER KHAMTI LLA;correction FE00;VS1;abbreviation FE01;VS2;abbreviation FE02;VS3;abbreviation diff --git a/gnu/usr.bin/perl/lib/unicore/NamedSequences.txt b/gnu/usr.bin/perl/lib/unicore/NamedSequences.txt index b3c64f18c24..fa05c6a7d8a 100644 --- a/gnu/usr.bin/perl/lib/unicore/NamedSequences.txt +++ b/gnu/usr.bin/perl/lib/unicore/NamedSequences.txt @@ -1,10 +1,10 @@ -# NamedSequences-13.0.0.txt -# Date: 2020-01-22, 19:12:00 GMT [KW, LI] -# © 2020 Unicode®, Inc. -# For terms of use, see http://www.unicode.org/terms_of_use.html +# NamedSequences-14.0.0.txt +# Date: 2021-08-03, 23:04:00 GMT [KW] +# © 2021 Unicode®, Inc. +# For terms of use, see https://www.unicode.org/terms_of_use.html # # Unicode Character Database -# For documentation, see http://www.unicode.org/reports/tr44/ +# For documentation, see https://www.unicode.org/reports/tr44/ # # Unicode Named Character Sequences # @@ -28,7 +28,7 @@ # <1000, 1001, 1002> # # For more information, see UAX #34: Unicode Named Character -# Sequences, at http://www.unicode.org/unicode/reports/tr34/ +# Sequences, at https://www.unicode.org/reports/tr34/ # # Note: The order of entries in this file is not significant. # However, entries are generally in script order corresponding @@ -168,6 +168,35 @@ ARABIC SEQUENCE YEH WITH HAMZA ABOVE WITH E;0626 06D0 ARABIC SEQUENCE YEH WITH HAMZA ABOVE WITH AE;0626 06D5 ARABIC SEQUENCE NOON WITH KEHEH;0646 06A9 +# Entries that correspond to Indic characters with nuktas +# that are also listed in CompositionExclusions.txt. +# These characters decompose for normalized text, even +# in NFC. Having named sequences for these helps in +# certain specifications, including Label Generation Rules (LGR) +# for Internationalized Domain Names (IDN). +# +# Provisional 2020-01-16, Approved 2021-07-27 + +DEVANAGARI SEQUENCE FOR LETTER QA; 0915 093C +DEVANAGARI SEQUENCE FOR LETTER KHHA; 0916 093C +DEVANAGARI SEQUENCE FOR LETTER GHHA; 0917 093C +DEVANAGARI SEQUENCE FOR LETTER ZA; 091C 093C +DEVANAGARI SEQUENCE FOR LETTER DDDHA; 0921 093C +DEVANAGARI SEQUENCE FOR LETTER RHA; 0922 093C +DEVANAGARI SEQUENCE FOR LETTER FA; 092B 093C +DEVANAGARI SEQUENCE FOR LETTER YYA; 092F 093C +BENGALI SEQUENCE FOR LETTER RRA; 09A1 09BC +BENGALI SEQUENCE FOR LETTER RHA; 09A2 09BC +BENGALI SEQUENCE FOR LETTER YYA; 09AF 09BC +GURMUKHI SEQUENCE FOR LETTER LLA; 0A32 0A3C +GURMUKHI SEQUENCE FOR LETTER SHA; 0A38 0A3C +GURMUKHI SEQUENCE FOR LETTER KHHA; 0A16 0A3C +GURMUKHI SEQUENCE FOR LETTER GHHA; 0A17 0A3C +GURMUKHI SEQUENCE FOR LETTER ZA; 0A1C 0A3C +GURMUKHI SEQUENCE FOR LETTER FA; 0A2B 0A3C +ORIYA SEQUENCE FOR LETTER RRA; 0B21 0B3C +ORIYA SEQUENCE FOR LETTER RHA; 0B22 0B3C + # Entry for a Bangla entity. # Provisional 2009-08-10, Approved 2010-05-14 # @@ -180,7 +209,7 @@ BENGALI LETTER KHINYA;0995 09CD 09B7 # # A visual display of the Tamil named character sequences is available # in the documentation for the Unicode Standard. See Section 12.6, Tamil in -# http://www.unicode.org/versions/latest/ +# https://www.unicode.org/versions/latest/ TAMIL CONSONANT K; 0B95 0BCD TAMIL CONSONANT NG; 0B99 0BCD diff --git a/gnu/usr.bin/perl/lib/unicore/NamedSqProv.txt b/gnu/usr.bin/perl/lib/unicore/NamedSqProv.txt index a4e4fdc2e45..6c74798e65a 100644 --- a/gnu/usr.bin/perl/lib/unicore/NamedSqProv.txt +++ b/gnu/usr.bin/perl/lib/unicore/NamedSqProv.txt @@ -1,10 +1,10 @@ -# NamedSequencesProv-13.0.0.txt -# Date: 2020-01-22, 19:32:00 GMT [KW, LI] -# © 2020 Unicode®, Inc. -# For terms of use, see http://www.unicode.org/terms_of_use.html +# NamedSequencesProv-14.0.0.txt +# Date: 2021-08-03, 23:04:00 GMT [KW] +# © 2021 Unicode®, Inc. +# For terms of use, see https://www.unicode.org/terms_of_use.html # # Unicode Character Database -# For documentation, see http://www.unicode.org/reports/tr44/ +# For documentation, see https://www.unicode.org/reports/tr44/ # # Provisional Unicode Named Character Sequences # @@ -29,7 +29,7 @@ # <1000, 1001, 1002> # # For more information, see UAX #34: Unicode Named Character -# Sequences, at http://www.unicode.org/unicode/reports/tr34/ +# Sequences, at https://www.unicode.org/reports/tr34/ # # Note: The order of entries in this file is not significant. # However, entries are generally in script order corresponding @@ -40,34 +40,7 @@ # Provisional entries for NamedSequences.txt. -# Entries that correspond to Indic characters with nuktas -# that are also listed in CompositionExclusions.txt. -# These characters decompose for normalized text, even -# in NFC. Having named sequences for these helps in -# certain specifications, including Label Generation Rules (LGR) -# for Internationalized Domain Names (IDN). -# -# Provisional 2020-01-16 - -DEVANAGARI SEQUENCE FOR LETTER QA; 0915 093C -DEVANAGARI SEQUENCE FOR LETTER KHHA; 0916 093C -DEVANAGARI SEQUENCE FOR LETTER GHHA; 0917 093C -DEVANAGARI SEQUENCE FOR LETTER ZA; 091C 093C -DEVANAGARI SEQUENCE FOR LETTER DDDHA; 0921 093C -DEVANAGARI SEQUENCE FOR LETTER RHA; 0922 093C -DEVANAGARI SEQUENCE FOR LETTER FA; 092B 093C -DEVANAGARI SEQUENCE FOR LETTER YYA; 092F 093C -BENGALI SEQUENCE FOR LETTER RRA; 09A1 09BC -BENGALI SEQUENCE FOR LETTER RHA; 09A2 09BC -BENGALI SEQUENCE FOR LETTER YYA; 09AF 09BC -GURMUKHI SEQUENCE FOR LETTER LLA; 0A32 0A3C -GURMUKHI SEQUENCE FOR LETTER SHA; 0A38 0A3C -GURMUKHI SEQUENCE FOR LETTER KHHA; 0A16 0A3C -GURMUKHI SEQUENCE FOR LETTER GHHA; 0A17 0A3C -GURMUKHI SEQUENCE FOR LETTER ZA; 0A1C 0A3C -GURMUKHI SEQUENCE FOR LETTER FA; 0A2B 0A3C -ORIYA SEQUENCE FOR LETTER RRA; 0B21 0B3C -ORIYA SEQUENCE FOR LETTER RHA; 0B22 0B3C +# No provisional entries are currently defined. # ================================================ diff --git a/gnu/usr.bin/perl/lib/unicore/NamesList.txt b/gnu/usr.bin/perl/lib/unicore/NamesList.txt index 6b856885b88..a5618d9e139 100644 --- a/gnu/usr.bin/perl/lib/unicore/NamesList.txt +++ b/gnu/usr.bin/perl/lib/unicore/NamesList.txt @@ -1,28 +1,15 @@ ; charset=UTF-8 -@@@ The Unicode Standard 13.0.0 -@@@+ U13M200203.lst - Unicode 13.0.0 names list, eighth delta. - Repertoire synched with UnicodeData-13.0.0d6.txt - Eighth delta of annotation fixes. - Added xrefs for 27C7, 27D1, 2227, 2228. Adjusted subhead for 27C7. - Updated aliases for 26A5, 26A4, 26A2, 263F. - Updated subheads and annotations for 1DF8 through 1DFB. - Updated title of UTR #54 in notice at 1800. - Added xref to 202F for 0020. - Added annotations about abbreviations for 2066 through 2069 for consistency. - Separated aliases for 0009 and 000A onto separate lines. - Removed superfluous xrefs for 2011. - Adjusted subheads for 2028 and 202A. - Added notices for the sets of composition exclusions in four Indic scripts. - Added xrefs for 029C, 1D34, 1D78, A7F8 and a notice at A7F8. +@@@ The Unicode Standard 14.0.0 +@@@+ U14M210804.lst + Unicode 14.0.0 final names list. This file is semi-automatically derived from UnicodeData.txt and a set of manually created annotations using a script to select or suppress information from the data file. The rules used for this process are aimed at readability for the human reader, at the expense of some details; therefore, this file should not be parsed for machine-readable information. -@+ © 2020 Unicode®, Inc. - For terms of use, see http://www.unicode.org/terms_of_use.html +@+ © 2021 Unicode®, Inc. + For terms of use, see https://www.unicode.org/terms_of_use.html @@ 0000 C0 Controls and Basic Latin (Basic Latin) 007F @@+ @ C0 controls @@ -112,6 +99,9 @@ x (zero width space - 200B) x (narrow no-break space - 202F) x (word joiner - 2060) + x (symbol for space - 2420) + x (blank symbol - 2422) + x (open box - 2423) x (ideographic space - 3000) x (zero width no-break space - FEFF) 0021 EXCLAMATION MARK @@ -121,27 +111,42 @@ x (latin letter retroflex click - 01C3) x (double exclamation mark - 203C) x (interrobang - 203D) + x (warning sign - 26A0) + x (heavy exclamation mark symbol - 2757) x (heavy exclamation mark ornament - 2762) + x (medieval exclamation mark - 2E53) + x (modifier letter raised exclamation mark - A71D) 0022 QUOTATION MARK + = double quote * neutral (vertical), used as opening or closing quotation mark * preferred characters in English for paired quotation marks are 201C & 201D * 05F4 is preferred for gershayim when writing Hebrew x (modifier letter double prime - 02BA) + x (double acute accent - 02DD) + x (modifier letter double apostrophe - 02EE) x (combining double acute accent - 030B) x (combining double vertical line above - 030E) x (hebrew punctuation gershayim - 05F4) + x (left double quotation mark - 201C) + x (right double quotation mark - 201D) x (double prime - 2033) x (ditto mark - 3003) 0023 NUMBER SIGN - = pound sign, hash, crosshatch, octothorpe + = pound sign (weight) + = hashtag, hash + = crosshatch, octothorpe + * for denoting musical sharp 266F is preferred x (l b bar symbol - 2114) + x (numero sign - 2116) x (viewdata square - 2317) x (music sharp sign - 266F) + x (equals sign and slanted parallel - 29E3) 0024 DOLLAR SIGN = milréis, escudo * used for many peso currencies in Latin America and elsewhere * glyph may have one or two vertical bars * other currency symbol characters start at 20A0 + x (cent sign - 00A2) x (currency sign - 00A4) x (peso sign - 20B1) x (heavy dollar sign - 1F4B2) @@ -151,11 +156,14 @@ x (per ten thousand sign - 2031) x (commercial minus sign - 2052) 0026 AMPERSAND + = and + * originally derived from a ligature of 'e' and 't' x (tironian sign et - 204A) x (turned ampersand - 214B) x (heavy ampersand ornament - 1F674) 0027 APOSTROPHE = apostrophe-quote (1.0) + = single quote = APL quote * neutral (vertical) glyph with mixed usage * 2019 is preferred for apostrophe @@ -165,7 +173,10 @@ x (modifier letter apostrophe - 02BC) x (modifier letter vertical line - 02C8) x (combining acute accent - 0301) + x (combining vertical line above - 030D) x (hebrew punctuation geresh - 05F3) + x (left single quotation mark - 2018) + x (right single quotation mark - 2019) x (prime - 2032) x (latin small letter saltillo - A78C) 0028 LEFT PARENTHESIS @@ -174,43 +185,65 @@ = closing parenthesis (1.0) * see discussion on semantics of paired bracketing characters 002A ASTERISK - = star (on phone keypads) + = star + * can have five or six spokes x (arabic five pointed star - 066D) + x (asterism - 2042) x (low asterisk - 204E) + x (two asterisks aligned vertically - 2051) + x (combining asterisk above - 20F0) x (asterisk operator - 2217) x (sextile - 26B9) x (heavy asterisk - 2731) + x (slavonic asterisk - A673) + x (medium six spoked asterisk - 1F7B6) +@ ASCII math operator 002B PLUS SIGN + x (modifier letter plus sign - 02D6) + x (minus sign - 2212) x (heavy plus sign - 2795) + x (hebrew letter alternative plus sign - FB29) + x (light greek cross - 1F7A2) +@ ASCII punctuation 002C COMMA = decimal separator x (arabic comma - 060C) + x (arabic decimal separator - 066B) x (single low-9 quotation mark - 201A) x (reversed comma - 2E41) x (medieval comma - 2E4C) x (ideographic comma - 3001) 002D HYPHEN-MINUS - = hyphen or minus sign - * used for either hyphen or minus sign + = hyphen, dash + = minus sign + * used generically for hyphen, minus sign or en dash, all of which have dedicated alternatives + x (soft hyphen - 00AD) + x (modifier letter minus sign - 02D7) x (hyphen - 2010) x (non-breaking hyphen - 2011) x (figure dash - 2012) x (en dash - 2013) + x (hyphenation point - 2027) x (hyphen bullet - 2043) x (minus sign - 2212) x (roman uncia sign - 10191) 002E FULL STOP = period, dot, decimal point + * the use as decimal point is locale dependent * may be rendered as a raised decimal point in old style numbers x (arabic full stop - 06D4) + x (one dot leader - 2024) + x (horizontal ellipsis - 2026) + x (raised dot - 2E33) x (stenographic full stop - 2E3C) x (ideographic full stop - 3002) 002F SOLIDUS - = slash, virgule - x (latin letter dental click - 01C0) + = slash,forward slash, virgule x (combining long solidus overlay - 0338) x (fraction slash - 2044) x (division slash - 2215) + x (mathematical rising diagonal - 27CB) + x (big solidus - 29F8) x (dotted solidus - 2E4A) @ ASCII digits 0030 DIGIT ZERO @@ -224,41 +257,65 @@ 0037 DIGIT SEVEN 0038 DIGIT EIGHT 0039 DIGIT NINE -@ ASCII punctuation and symbols +@ ASCII punctuation 003A COLON * also used to denote division or scale; for that mathematical use 2236 is preferred + * in Finnish and Swedish, also used as intra-word punctation (abbreviation mark) + x (modifier letter triangular colon - 02D0) + x (modifier letter raised colon - 02F8) x (armenian full stop - 0589) x (hebrew punctuation sof pasuq - 05C3) + x (ethiopic wordspace - 1361) + x (ethiopic colon - 1365) + x (two dot punctuation - 205A) + x (tricolon - 205D) x (ratio - 2236) x (modifier letter colon - A789) + x (presentation form for vertical two dot leader - FE30) 003B SEMICOLON * this, and not 037E, is the preferred character for 'Greek question mark' x (greek question mark - 037E) x (arabic semicolon - 061B) x (reversed semicolon - 204F) + x (turned semicolon - 2E35) +@ ASCII mathematical operators +@+ Other mathematical operators start at 2200. 003C LESS-THAN SIGN + * paired with 003E for ASCII-based angle bracket markup conventions + x (modifier letter left arrowhead - 02C2) x (single left-pointing angle quotation mark - 2039) x (left-pointing angle bracket - 2329) x (mathematical left angle bracket - 27E8) x (left angle bracket - 3008) 003D EQUALS SIGN * other related characters: 2241-2263 + x (canadian syllabics hyphen - 1400) + x (almost equal to - 2248) x (not equal to - 2260) x (identical to - 2261) + x (double hyphen - 2E40) + x (katakana-hiragana double hyphen - 30A0) x (modifier letter short equals sign - A78A) x (roman sextans sign - 10190) + x (heavy equals sign - 1F7F0) 003E GREATER-THAN SIGN + x (modifier letter right arrowhead - 02C3) x (single right-pointing angle quotation mark - 203A) x (right-pointing angle bracket - 232A) x (mathematical right angle bracket - 27E9) x (right angle bracket - 3009) +@ ASCII punctuation 003F QUESTION MARK x (inverted question mark - 00BF) x (greek question mark - 037E) x (arabic question mark - 061F) x (interrobang - 203D) - x (question exclamation mark - 2048) - x (exclamation question mark - 2049) + x (double question mark - 2047) + x (black question mark ornament - 2753) + x (uncertainty sign - 2BD1) + x (reversed question mark - 2E2E) + x (medieval question mark - 2E54) + x (replacement character - FFFD) 0040 COMMERCIAL AT = at sign @ Uppercase Latin alphabet @@ -267,12 +324,16 @@ x (script capital b - 212C) 0043 LATIN CAPITAL LETTER C x (double-struck capital c - 2102) + x (degree celsius - 2103) x (black-letter capital c - 212D) + x (roman numeral one hundred - 216D) 0044 LATIN CAPITAL LETTER D + x (roman numeral five hundred - 216E) 0045 LATIN CAPITAL LETTER E x (euler constant - 2107) x (script capital e - 2130) 0046 LATIN CAPITAL LETTER F + x (degree fahrenheit - 2109) x (script capital f - 2131) x (turned capital f - 2132) 0047 LATIN CAPITAL LETTER G @@ -283,8 +344,6 @@ 0049 LATIN CAPITAL LETTER I * Turkish and Azerbaijani use 0131 for lowercase x (latin capital letter i with dot above - 0130) - x (cyrillic capital letter byelorussian-ukrainian i - 0406) - x (cyrillic letter palochka - 04C0) x (script capital i - 2110) x (black-letter capital i - 2111) x (roman numeral one - 2160) @@ -295,13 +354,16 @@ x (script capital l - 2112) 004D LATIN CAPITAL LETTER M x (script capital m - 2133) + x (roman numeral one thousand - 216F) 004E LATIN CAPITAL LETTER N x (double-struck capital n - 2115) 004F LATIN CAPITAL LETTER O 0050 LATIN CAPITAL LETTER P + x (script capital p - 2118) x (double-struck capital p - 2119) 0051 LATIN CAPITAL LETTER Q x (double-struck capital q - 211A) + x (rotated capital q - 213A) 0052 LATIN CAPITAL LETTER R x (script capital r - 211B) x (black-letter capital r - 211C) @@ -313,6 +375,7 @@ x (roman numeral five - 2164) 0057 LATIN CAPITAL LETTER W 0058 LATIN CAPITAL LETTER X + x (roman numeral ten - 2169) 0059 LATIN CAPITAL LETTER Y 005A LATIN CAPITAL LETTER Z x (double-struck capital z - 2124) @@ -325,10 +388,13 @@ = backslash x (combining reverse solidus overlay - 20E5) x (set minus - 2216) + x (mathematical falling diagonal - 27CD) + x (big reverse solidus - 29F9) 005D RIGHT SQUARE BRACKET = closing square bracket (1.0) 005E CIRCUMFLEX ACCENT * this is a spacing character + * used in ASCII-based representation of exponentiation x (modifier letter up arrowhead - 02C4) x (modifier letter circumflex accent - 02C6) x (combining circumflex accent - 0302) @@ -337,10 +403,12 @@ 005F LOW LINE = spacing underscore (1.0) * this is a spacing character + * joins with adjacent instances of itself x (modifier letter low macron - 02CD) x (combining macron below - 0331) x (combining low line - 0332) x (double low line - 2017) + x (combining conjoining macron below - FE2D) 0060 GRAVE ACCENT * this is a spacing character x (modifier letter grave accent - 02CB) @@ -354,6 +422,7 @@ 0065 LATIN SMALL LETTER E x (estimated symbol - 212E) x (script small e - 212F) + x (latin small letter blackletter e - AB32) 0066 LATIN SMALL LETTER F 0067 LATIN SMALL LETTER G x (latin small letter script g - 0261) @@ -364,6 +433,7 @@ 0069 LATIN SMALL LETTER I * Turkish and Azerbaijani use 0130 for uppercase x (latin small letter dotless i - 0131) + x (superscript latin small letter i - 2071) x (mathematical italic small dotless i - 1D6A4) 006A LATIN SMALL LETTER J x (latin small letter dotless j - 0237) @@ -377,15 +447,18 @@ x (superscript latin small letter n - 207F) 006F LATIN SMALL LETTER O x (script small o - 2134) + x (latin small letter blackletter o - AB3D) 0070 LATIN SMALL LETTER P 0071 LATIN SMALL LETTER Q 0072 LATIN SMALL LETTER R 0073 LATIN SMALL LETTER S + x (latin small letter long s - 017F) 0074 LATIN SMALL LETTER T 0075 LATIN SMALL LETTER U 0076 LATIN SMALL LETTER V 0077 LATIN SMALL LETTER W 0078 LATIN SMALL LETTER X + x (multiplication sign - 00D7) 0079 LATIN SMALL LETTER Y 007A LATIN SMALL LETTER Z x (latin small letter z with stroke - 01B6) @@ -394,10 +467,14 @@ = opening curly bracket (1.0) = left brace 007C VERTICAL LINE - = vertical bar + = vertical bar, pipe * used in pairs to indicate absolute value + * also used as an unpaired separator or as a fence + x (broken bar - 00A6) x (latin letter dental click - 01C0) x (hebrew punctuation paseq - 05C0) + x (devanagari danda - 0964) + x (combining long vertical line overlay - 20D2) x (divides - 2223) x (light vertical bar - 2758) 007D RIGHT CURLY BRACKET @@ -407,8 +484,12 @@ * this is a spacing character x (small tilde - 02DC) x (combining tilde - 0303) + x (combining tilde overlay - 0334) x (swung dash - 2053) x (tilde operator - 223C) + x (tilde with ring above - 2E1B) + x (vertical tilde - 2E2F) + x (wave dash - 301C) x (fullwidth tilde - FF5E) @ Control character 007F @@ -488,30 +569,42 @@ x (figure space - 2007) x (narrow no-break space - 202F) x (word joiner - 2060) + x (shouldered open box - 237D) x (zero width no-break space - FEFF) # 0020 00A1 INVERTED EXCLAMATION MARK * Spanish, Asturian, Galician + * used in extended IPA to represent sublaminal lower alveolar percussive x (exclamation mark - 0021) + x (modifier letter raised inverted exclamation mark - A71E) 00A2 CENT SIGN + x (latin small letter c with stroke - 023C) + x (mill sign - 20A5) + x (cedi sign - 20B5) + x (musical symbol cut time - 1D135) 00A3 POUND SIGN - = pound sterling, Irish punt, Italian lira, Turkish lira, etc. + = pound sterling, Irish punt, lira, etc. + * glyph may have one or two crossbars, in distinction from 20A4 x (lira sign - 20A4) x (turkish lira sign - 20BA) x (roman semuncia sign - 10192) 00A4 CURRENCY SIGN - * other currency symbol characters: 20A0-20BF + * generic or unknown currency + * other currency symbol characters start at 20A0 x (dollar sign - 0024) 00A5 YEN SIGN - = yuan sign + = yuan sign (renminbi) * glyph may have one or two crossbars, but the official symbol in Japan and China has two + * in native context, specific ideographs may be used for units of these currencies x 5143 x 5186 00A6 BROKEN BAR = broken vertical bar (1.0) = parted rule (in typography) + x (vertical line - 007C) 00A7 SECTION SIGN - * paragraph sign in some European usage + * used in referencing numbered sections or paragraphs + x (top half section sign - 2E39) 00A8 DIAERESIS * this is a spacing character x (combining diaeresis - 0308) @@ -523,6 +616,7 @@ x (mask work symbol - 1F1AD) 00AA FEMININE ORDINAL INDICATOR * Spanish + x (modifier letter small a - 1D43) # 0061 00AB LEFT-POINTING DOUBLE ANGLE QUOTATION MARK = left guillemet @@ -533,26 +627,37 @@ 00AC NOT SIGN = angled dash (in typography) x (reversed not sign - 2310) + x (turned not sign - 2319) 00AD SOFT HYPHEN = discretionary hyphen * commonly abbreviated as SHY + * an invisible format character indicating a possible hyphenation location 00AE REGISTERED SIGN = registered trade mark sign (1.0) + x (trade mark sign - 2122) x (circled latin capital letter r - 24C7) + x (raised md sign - 1F16B) + x (raised mr sign - 1F16C) 00AF MACRON = overline, APL overbar * this is a spacing character + * unlike 203E, adjacent instances of this character do not join x (modifier letter macron - 02C9) x (combining macron - 0304) x (combining overline - 0305) + x (overline - 203E) + x (combining conjoining macron - FE26) # 0020 0304 00B0 DEGREE SIGN * this is a spacing character x (ring above - 02DA) x (combining ring above - 030A) x (superscript zero - 2070) + x (degree celsius - 2103) + x (degree fahrenheit - 2109) x (ring operator - 2218) 00B1 PLUS-MINUS SIGN + = biquintile (astrological aspect: 144°) x (minus-or-plus sign - 2213) 00B2 SUPERSCRIPT TWO = squared @@ -568,6 +673,8 @@ x (modifier letter prime - 02B9) x (modifier letter acute accent - 02CA) x (combining acute accent - 0301) + x (greek tonos - 0384) + x (greek oxia - 1FFD) x (prime - 2032) # 0020 0301 00B5 MICRO SIGN @@ -583,6 +690,8 @@ = Georgian comma = Greek middle dot (ano teleia) * also used as a raised decimal point or to denote multiplication; for multiplication 22C5 is preferred + x (full stop - 002E) + x (dot above - 02D9) x (greek ano teleia - 0387) x (runic single punctuation - 16EB) x (bullet - 2022) @@ -602,9 +711,12 @@ 00B9 SUPERSCRIPT ONE x (superscript two - 00B2) x (superscript three - 00B3) + x (superscript zero - 2070) # 0031 00BA MASCULINE ORDINAL INDICATOR * Spanish + x (modifier letter small o - 1D52) + x (numero sign - 2116) # 006F 00BB RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK = right guillemet @@ -663,6 +775,7 @@ * lowercase is 00F0 x (latin capital letter d with stroke - 0110) x (latin capital letter african d - 0189) + x (latin capital letter d with short stroke overlay - A7C7) 00D1 LATIN CAPITAL LETTER N WITH TILDE : 004E 0303 00D2 LATIN CAPITAL LETTER O WITH GRAVE @@ -678,9 +791,14 @@ @ Mathematical operator 00D7 MULTIPLICATION SIGN = z notation Cartesian product + x (latin small letter x - 0078) + x (saltire - 2613) x (multiplication x - 2715) + x (heavy ballot x - 2718) x (cross mark - 274C) x (vector or cross product - 2A2F) + x (cancellation x - 1F5D9) + x (light saltire - 1F7A9) @ Letters 00D8 LATIN CAPITAL LETTER O WITH STROKE = o slash @@ -700,9 +818,12 @@ = Eszett * German * not used in Swiss High German - * uppercase is "SS" or 1E9E + * uppercase is "SS" (standard case mapping), alternatively 1E9E * typographically the glyph for this character can be based on a ligature of 017F with either 0073 or with an old-style glyph for 007A (the latter similar in appearance to 0292). Both forms exist interchangeably today. + x (latin small letter long s - 017F) + x (latin small letter ezh - 0292) x (greek small letter beta - 03B2) + x (latin capital letter sharp s - 1E9E) 00E0 LATIN SMALL LETTER A WITH GRAVE : 0061 0300 00E1 LATIN SMALL LETTER A WITH ACUTE @@ -745,6 +866,7 @@ 00F0 LATIN SMALL LETTER ETH * Icelandic, Faroese, Old English, IPA * uppercase is 00D0 + x (latin small letter d with stroke - 0111) x (greek small letter delta - 03B4) x (partial differential - 2202) 00F1 LATIN SMALL LETTER N WITH TILDE @@ -763,7 +885,7 @@ @ Mathematical operator 00F7 DIVISION SIGN = obelus - * occasionally used as an alternate, more visually distinct version of 2212 or 2011 in some contexts + * occasionally used as an alternate, more visually distinct shape for a hyphen in some contexts * historically used as a punctuation mark to denote questionable passages in manuscripts x (syriac harklean obelus - 070B) x (commercial minus sign - 2052) @@ -772,6 +894,8 @@ x (divides - 2223) x (ratio - 2236) x (heavy division sign - 2797) + x (long division - 27CC) + x (dotted obelos - 2E13) @ Letters 00F8 LATIN SMALL LETTER O WITH STROKE = o slash @@ -1543,7 +1667,7 @@ : 00D8 0301 01FF LATIN SMALL LETTER O WITH STROKE AND ACUTE : 00F8 0301 -@ Additions for Slovenian and Croatian +@ Additions for Slovenian 0200 LATIN CAPITAL LETTER A WITH DOUBLE GRAVE : 0041 030F 0201 LATIN SMALL LETTER A WITH DOUBLE GRAVE @@ -2090,7 +2214,7 @@ # 0079 @ Miscellaneous phonetic modifiers 02B9 MODIFIER LETTER PRIME - * primary stress, emphasis + * stress, emphasis * transliteration of mjagkij znak (Cyrillic soft sign: palatalization) * transliteration of Hebrew geresh x (apostrophe - 0027) @@ -2431,6 +2555,7 @@ 031F COMBINING PLUS SIGN BELOW * IPA: advanced or fronted articulation x (modifier letter plus sign - 02D6) + x (combining plus sign above - 1AC8) 0320 COMBINING MINUS SIGN BELOW * IPA: retracted or backed articulation * glyph may have small end-serifs @@ -2477,6 +2602,7 @@ 032B COMBINING INVERTED DOUBLE ARCH BELOW * IPA: labialization x (modifier letter small w - 02B7) + x (combining inverted double arch above - 1AC7) 032C COMBINING CARON BELOW * IPA: voiced 032D COMBINING CIRCUMFLEX ACCENT BELOW @@ -2961,6 +3087,7 @@ 0416 CYRILLIC CAPITAL LETTER ZHE 0417 CYRILLIC CAPITAL LETTER ZE 0418 CYRILLIC CAPITAL LETTER I +@+ This letter is also used to represent electrolarynx phonation in the Voice Quality Symbols for extended IPA. 0419 CYRILLIC CAPITAL LETTER SHORT I : 0418 0306 041A CYRILLIC CAPITAL LETTER KA @@ -3365,6 +3492,7 @@ 04FF CYRILLIC SMALL LETTER HA WITH STROKE @@ 0500 Cyrillic Supplement 052F @ Komi letters +@+ These letters are for the obsolete Molodtsov alphabet, used in the 1920s. 0500 CYRILLIC CAPITAL LETTER KOMI DE 0501 CYRILLIC SMALL LETTER KOMI DE 0502 CYRILLIC CAPITAL LETTER KOMI DJE @@ -3427,9 +3555,10 @@ 0528 CYRILLIC CAPITAL LETTER EN WITH LEFT HOOK 0529 CYRILLIC SMALL LETTER EN WITH LEFT HOOK @ Komi letters +@+ These are obsolete letters attested in a 19th century grammar of Komi. 052A CYRILLIC CAPITAL LETTER DZZHE 052B CYRILLIC SMALL LETTER DZZHE - * also used for Ossetian + * also used for Ossetian until 1924 052C CYRILLIC CAPITAL LETTER DCHE 052D CYRILLIC SMALL LETTER DCHE @ Khanty letters @@ -3741,15 +3870,18 @@ * represents sallallahu alayhe wasallam "may God's peace and blessings be upon him" 0611 ARABIC SIGN ALAYHE ASSALLAM * represents alayhe assalam "upon him be peace" + x (arabic ligature alayhi as-salaam - FD47) 0612 ARABIC SIGN RAHMATULLAH ALAYHE * represents rahmatullah alayhe "may God have mercy upon him" + x (arabic ligature rahimahu allaah - FD40) 0613 ARABIC SIGN RADI ALLAHOU ANHU * represents radi allahu 'anhu "may God be pleased with him" + x (arabic ligature radi allaahu anh - FD41) 0614 ARABIC SIGN TAKHALLUS * sign placed over the name or nom-de-plume of a poet, or in some writings used to mark all proper names @ Quranic annotation sign 0615 ARABIC SMALL HIGH TAH - * marks a recommended pause position in some Korans published in Iran and Pakistan + * marks a recommended pause position in some Qurans published in Iran and Pakistan * should not be confused with the small TAH sign used as a diacritic for some letters such as 0679 @ Extended Arabic mark 0616 ARABIC SMALL HIGH LIGATURE ALEF WITH LAM WITH YEH @@ -3773,6 +3905,7 @@ * commonly abbreviated ALM x (right-to-left mark - 200F) @ Punctuation +061D ARABIC END OF TEXT MARK 061E ARABIC TRIPLE DOT PUNCTUATION MARK 061F ARABIC QUESTION MARK * also used with Thaana and Syriac in modern text @@ -3793,6 +3926,7 @@ 0625 ARABIC LETTER ALEF WITH HAMZA BELOW : 0627 0655 0626 ARABIC LETTER YEH WITH HAMZA ABOVE + * in Kyrgyz the hamza is consistently positioned to the top right in isolate and final forms : 064A 0654 0627 ARABIC LETTER ALEF 0628 ARABIC LETTER BEH @@ -3833,6 +3967,7 @@ 0643 ARABIC LETTER KAF 0644 ARABIC LETTER LAM 0645 ARABIC LETTER MEEM + * Sindhi uses a shape with a short tail 0646 ARABIC LETTER NOON 0647 ARABIC LETTER HEH 0648 ARABIC LETTER WAW @@ -3855,11 +3990,15 @@ 0651 ARABIC SHADDA 0652 ARABIC SUKUN * marks absence of a vowel after the base consonant - * used in some Korans to mark a long vowel as ignored + * used in some Qurans to mark a long vowel as ignored * can have a variety of shapes, including a circular one and a shape that looks like '06E1' x (arabic small high dotless head of khah - 06E1) @ Combining maddah and hamza 0653 ARABIC MADDAH ABOVE + * used for madd jaa'iz in South Asian and Indonesian orthographies + x (arabic madda waajib - 089C) + x (arabic doubled madda - 089E) + x (arabic half madda over madda - 089F) 0654 ARABIC HAMZA ABOVE * restricted to hamza and ezafe semantics * is not used as a diacritic to form new letters @@ -3925,22 +4064,21 @@ * Kashmiri * this character is deprecated and its use is strongly discouraged * use the sequence 0627 065F instead -@ Extended Arabic letters +@ High hamza 0674 ARABIC LETTER HIGH HAMZA - * Kazakh + * Kazakh, Jawi * forms digraphs +@ Digraphic letters for Kazakh +@+ Use of these characters is discouraged. They were encoded for Kazakh digraphs, but their decompositions do not reflect the preferred order of representation. 0675 ARABIC LETTER HIGH HAMZA ALEF - * Kazakh # 0627 0674 0676 ARABIC LETTER HIGH HAMZA WAW - * Kazakh # 0648 0674 0677 ARABIC LETTER U WITH HAMZA ABOVE - * Kazakh # 06C7 0674 0678 ARABIC LETTER HIGH HAMZA YEH - * Kazakh # 064A 0674 +@ Extended Arabic letters 0679 ARABIC LETTER TTEH * Urdu 067A ARABIC LETTER TTEHEH @@ -4039,7 +4177,7 @@ 06A6 ARABIC LETTER PEHEH * Sindhi 06A7 ARABIC LETTER QAF WITH DOT ABOVE - * Maghrib Arabic, Uighur + * Maghrib Arabic, Uyghur 06A8 ARABIC LETTER QAF WITH THREE DOTS ABOVE * Tunisian Arabic 06A9 ARABIC LETTER KEHEH @@ -4054,9 +4192,10 @@ * use for the Jawi gaf is not recommended, although it may be found in some existing text data; recommended character for Jawi gaf is 0762 x (arabic letter keheh with dot above - 0762) 06AD ARABIC LETTER NG - * Uighur, Kazakh, Moroccan Arabic, early Jawi, early Persian, ... + * Uyghur, Kazakh, Moroccan Arabic, early Jawi, early Persian, ... 06AE ARABIC LETTER KAF WITH THREE DOTS BELOW * Berber, early Persian + * Pegon alternative for 068A 06AF ARABIC LETTER GAF * Persian, Urdu, ... 06B0 ARABIC LETTER GAF WITH RING @@ -4088,7 +4227,7 @@ * Jawi 06BE ARABIC LETTER HEH DOACHASHMEE * forms aspirate digraphs in Urdu and other languages of South Asia - * represents the glottal fricative /h/ in Uighur + * represents the glottal fricative /h/ in Uyghur 06BF ARABIC LETTER TCHEH WITH DOT ABOVE 06C0 ARABIC LETTER HEH WITH YEH ABOVE = arabic letter hamzah on ha (1.0) @@ -4106,19 +4245,20 @@ 06C4 ARABIC LETTER WAW WITH RING * Kashmiri 06C5 ARABIC LETTER KIRGHIZ OE - * Kirghiz + * Kyrgyz + * a glyph variant occurs which replaces the looped tail with a horizontal bar through the tail 06C6 ARABIC LETTER OE - * Uighur, Kurdish, Kazakh, Azerbaijani, Bosnian + * Uyghur, Kurdish, Kazakh, Azerbaijani, Bosnian 06C7 ARABIC LETTER U - * Kirghiz, Azerbaijani + * Azerbaijani, Kazakh, Kyrgyz, Uyghur 06C8 ARABIC LETTER YU - * Uighur + * Uyghur 06C9 ARABIC LETTER KIRGHIZ YU - * Kazakh, Kirghiz, Bosnian + * Kazakh, Kyrgyz, Bosnian 06CA ARABIC LETTER WAW WITH TWO DOTS ABOVE * Kurdish 06CB ARABIC LETTER VE - * Uighur, Kazakh + * Uyghur, Kazakh 06CC ARABIC LETTER FARSI YEH * Arabic, Persian, Urdu, Kashmiri, ... * initial and medial forms of this letter have dots @@ -4130,7 +4270,7 @@ * Kurdish 06CF ARABIC LETTER WAW WITH DOT ABOVE 06D0 ARABIC LETTER E - * Pashto, Uighur + * Pashto, Uyghur * used as the letter bbeh in Sindhi 06D1 ARABIC LETTER YEH WITH THREE DOTS BELOW * Mende languages, Hausa @@ -4145,7 +4285,7 @@ * Urdu @ Extended Arabic letter 06D5 ARABIC LETTER AE - * Uighur, Kazakh, Kirghiz + * Uyghur, Kazakh, Kyrgyz @ Quranic annotation signs 06D6 ARABIC SMALL HIGH LIGATURE SAD WITH LAM WITH ALEF MAKSURA 06D7 ARABIC SMALL HIGH LIGATURE QAF WITH LAM WITH ALEF MAKSURA @@ -4159,10 +4299,11 @@ 06DF ARABIC SMALL HIGH ROUNDED ZERO * smaller than the typical circular shape used for 0652 06E0 ARABIC SMALL HIGH UPRIGHT RECTANGULAR ZERO + * the term "rectangular zero" is a translation of the Arabic name of this sign 06E1 ARABIC SMALL HIGH DOTLESS HEAD OF KHAH = Arabic jazm * presentation form of 0652, using font technology to select the variant is preferred - * used in some Korans to mark absence of a vowel + * used in some Qurans to mark absence of a vowel x (arabic sukun - 0652) 06E2 ARABIC SMALL HIGH MEEM ISOLATED FORM 06E3 ARABIC SMALL LOW SEEN @@ -4308,6 +4449,7 @@ @ Syriac marks 0740 SYRIAC FEMININE DOT * feminine marker used with the Taw feminine suffix + x (combining dot above left - 1DF8) 0741 SYRIAC QUSHSHAYA * indicates a plosive pronunciation 0742 SYRIAC RUKKAKHA @@ -4701,6 +4843,63 @@ x (malayalam letter llla - 0D34) 086A SYRIAC LETTER MALAYALAM SSA x (malayalam letter ssa - 0D37) +@@ 0870 Arabic Extended-B 089F +@ Additions for Quranic orthographies +0870 ARABIC LETTER ALEF WITH ATTACHED FATHA +0871 ARABIC LETTER ALEF WITH ATTACHED TOP RIGHT FATHA +0872 ARABIC LETTER ALEF WITH RIGHT MIDDLE STROKE +0873 ARABIC LETTER ALEF WITH LEFT MIDDLE STROKE +0874 ARABIC LETTER ALEF WITH ATTACHED KASRA +0875 ARABIC LETTER ALEF WITH ATTACHED BOTTOM RIGHT KASRA +0876 ARABIC LETTER ALEF WITH ATTACHED ROUND DOT ABOVE +0877 ARABIC LETTER ALEF WITH ATTACHED RIGHT ROUND DOT +0878 ARABIC LETTER ALEF WITH ATTACHED LEFT ROUND DOT +0879 ARABIC LETTER ALEF WITH ATTACHED ROUND DOT BELOW +087A ARABIC LETTER ALEF WITH DOT ABOVE +087B ARABIC LETTER ALEF WITH ATTACHED TOP RIGHT FATHA AND DOT ABOVE +087C ARABIC LETTER ALEF WITH RIGHT MIDDLE STROKE AND DOT ABOVE +087D ARABIC LETTER ALEF WITH ATTACHED BOTTOM RIGHT KASRA AND DOT ABOVE +087E ARABIC LETTER ALEF WITH ATTACHED TOP RIGHT FATHA AND LEFT RING +087F ARABIC LETTER ALEF WITH RIGHT MIDDLE STROKE AND LEFT RING +0880 ARABIC LETTER ALEF WITH ATTACHED BOTTOM RIGHT KASRA AND LEFT RING +0881 ARABIC LETTER ALEF WITH ATTACHED RIGHT HAMZA +0882 ARABIC LETTER ALEF WITH ATTACHED LEFT HAMZA +0883 ARABIC TATWEEL WITH OVERSTRUCK HAMZA +0884 ARABIC TATWEEL WITH OVERSTRUCK WAW +0885 ARABIC TATWEEL WITH TWO DOTS BELOW +0886 ARABIC LETTER THIN YEH + * no final or isolated forms are attested +0887 ARABIC BASELINE ROUND DOT +0888 ARABIC RAISED ROUND DOT +@ Additions for Bosnian orthographies +0889 ARABIC LETTER NOON WITH INVERTED SMALL V +088A ARABIC LETTER HAH WITH INVERTED SMALL V BELOW +@ Additions for Pegon orthographies +088B ARABIC LETTER TAH WITH DOT BELOW + * Pegon, Malagasy +088C ARABIC LETTER TAH WITH THREE DOTS BELOW + * Pegon alternative for 088B +088D ARABIC LETTER KEHEH WITH TWO DOTS VERTICALLY BELOW + * Sundanese Pegon +@ Abbreviation mark +088E ARABIC VERTICAL TAIL + * mark used to indicate abbreviations in early movable type texts from Iran + * only attested in final form +@ Supertending currency symbols +0890 ARABIC POUND MARK ABOVE + * Egyptian pound +0891 ARABIC PIASTRE MARK ABOVE + * Egyptian piastre +@ Additions for Quranic orthographies +0898 ARABIC SMALL HIGH WORD AL-JUZ +0899 ARABIC SMALL LOW WORD ISHMAAM +089A ARABIC SMALL LOW WORD IMAALA +089B ARABIC SMALL LOW WORD TASHEEL +089C ARABIC MADDA WAAJIB + x (arabic maddah above - 0653) +089D ARABIC SUPERSCRIPT ALEF MOKHASSAS +089E ARABIC DOUBLED MADDA +089F ARABIC HALF MADDA OVER MADDA @@ 08A0 Arabic Extended-A 08FF @ Arabic letters for African languages 08A0 ARABIC LETTER BEH WITH SMALL V BELOW @@ -4746,6 +4945,8 @@ @ Arabic letters for Arwi 08B3 ARABIC LETTER AIN WITH THREE DOTS BELOW 08B4 ARABIC LETTER KAF WITH DOT BELOW +@ Early Arabic letter +08B5 ARABIC LETTER QAF WITH DOT BELOW AND NO DOTS ABOVE @ Arabic letters for Bravanese 08B6 ARABIC LETTER BEH WITH SMALL MEEM ABOVE 08B7 ARABIC LETTER PEH WITH SMALL MEEM ABOVE @@ -4782,6 +4983,20 @@ 08C6 ARABIC LETTER JEEM WITH THREE DOTS BELOW @ Arabic letter for Punjabi 08C7 ARABIC LETTER LAM WITH SMALL ARABIC LETTER TAH ABOVE +@ Arabic letter for Balti +08C8 ARABIC LETTER GRAF +@ Additions for Quranic orthographies +08C9 ARABIC SMALL FARSI YEH +08CA ARABIC SMALL HIGH FARSI YEH +08CB ARABIC SMALL HIGH YEH BARREE WITH TWO DOTS BELOW +08CC ARABIC SMALL HIGH WORD SAH + = sign of waqf +08CD ARABIC SMALL HIGH ZAH +08CE ARABIC LARGE ROUND DOT ABOVE +08CF ARABIC LARGE ROUND DOT BELOW +08D0 ARABIC SUKUN BELOW +08D1 ARABIC LARGE CIRCLE BELOW +08D2 ARABIC LARGE ROUND DOT INSIDE CIRCLE BELOW @ Quranic annotation signs 08D3 ARABIC SMALL LOW WAW 08D4 ARABIC SMALL HIGH WORD AR-RUB @@ -4834,8 +5049,8 @@ 08F9 ARABIC LEFT ARROWHEAD BELOW 08FA ARABIC RIGHT ARROWHEAD BELOW 08FB ARABIC DOUBLE RIGHT ARROWHEAD ABOVE -08FC ARABIC DOUBLE RIGHT ARROWHEAD ABOVE WITH DOT * also used in Quranic text in African and other orthographies to represent dammatan +08FC ARABIC DOUBLE RIGHT ARROWHEAD ABOVE WITH DOT 08FD ARABIC RIGHT ARROWHEAD ABOVE WITH DOT @ Extended vowel signs 08FE ARABIC DAMMA WITH DOT @@ -5792,6 +6007,10 @@ 0C37 TELUGU LETTER SSA 0C38 TELUGU LETTER SA 0C39 TELUGU LETTER HA +@ Sign +0C3C TELUGU SIGN NUKTA + * used for Tamil transliteration and Perso-Arabic phonemes + * can also appear as a large dot, should be placed sufficiently below the baseline of a consonant to avoid confusion/collision with the aspiration marker @ Addition for Sanskrit 0C3D TELUGU SIGN AVAGRAHA @ Dependent vowel signs @@ -5820,6 +6039,11 @@ 0C59 TELUGU LETTER DZA 0C5A TELUGU LETTER RRRA * letter for an alveolar consonant whose exact phonetic value is not known +@ Consonant +0C5D TELUGU LETTER NAKAARA POLLU + * vowelless form of na + x (kannada letter nakaara pollu - 0CDD) + x (malayalam letter chillu n - 0D7B) @ Additional vowels for Sanskrit 0C60 TELUGU LETTER VOCALIC RR 0C61 TELUGU LETTER VOCALIC LL @@ -5949,6 +6173,10 @@ 0CD5 KANNADA LENGTH MARK 0CD6 KANNADA AI LENGTH MARK @ Additional consonants +0CDD KANNADA LETTER NAKAARA POLLU + * vowelless form of na + x (telugu letter nakaara pollu - 0C5D) + x (malayalam letter chillu n - 0D7B) 0CDE KANNADA LETTER FA % KANNADA LETTER LLLA * obsolete historic letter @@ -7759,9 +7987,12 @@ 1247 ETHIOPIC SYLLABLE QOA 1248 ETHIOPIC SYLLABLE QWA 124A ETHIOPIC SYLLABLE QWI + x (ethiopic syllable gurage qwi - 1E7F0) 124B ETHIOPIC SYLLABLE QWAA 124C ETHIOPIC SYLLABLE QWEE + x (ethiopic syllable gurage qwee - 1E7F1) 124D ETHIOPIC SYLLABLE QWE + x (ethiopic syllable gurage qwe - 1E7F2) 1250 ETHIOPIC SYLLABLE QHA 1251 ETHIOPIC SYLLABLE QHU 1252 ETHIOPIC SYLLABLE QHI @@ -7853,9 +8084,12 @@ 12AF ETHIOPIC SYLLABLE KOA 12B0 ETHIOPIC SYLLABLE KWA 12B2 ETHIOPIC SYLLABLE KWI + x (ethiopic syllable gurage kwi - 1E7F5) 12B3 ETHIOPIC SYLLABLE KWAA 12B4 ETHIOPIC SYLLABLE KWEE + x (ethiopic syllable gurage kwee - 1E7F6) 12B5 ETHIOPIC SYLLABLE KWE + x (ethiopic syllable gurage kwe - 1E7F7) 12B8 ETHIOPIC SYLLABLE KXA 12B9 ETHIOPIC SYLLABLE KXU 12BA ETHIOPIC SYLLABLE KXI @@ -7864,10 +8098,14 @@ 12BD ETHIOPIC SYLLABLE KXE 12BE ETHIOPIC SYLLABLE KXO 12C0 ETHIOPIC SYLLABLE KXWA + x (ethiopic syllable gurage hhwa - 1E7E8) 12C2 ETHIOPIC SYLLABLE KXWI + x (ethiopic syllable hhwi - 1E7E9) 12C3 ETHIOPIC SYLLABLE KXWAA 12C4 ETHIOPIC SYLLABLE KXWEE + x (ethiopic syllable hhwee - 1E7EA) 12C5 ETHIOPIC SYLLABLE KXWE + x (ethiopic syllable hhwe - 1E7EB) 12C8 ETHIOPIC SYLLABLE WA 12C9 ETHIOPIC SYLLABLE WU 12CA ETHIOPIC SYLLABLE WI @@ -7941,9 +8179,12 @@ 130F ETHIOPIC SYLLABLE GOA 1310 ETHIOPIC SYLLABLE GWA 1312 ETHIOPIC SYLLABLE GWI + x (ethiopic syllable gurage gwi - 1E7F8) 1313 ETHIOPIC SYLLABLE GWAA 1314 ETHIOPIC SYLLABLE GWEE + x (ethiopic syllable gurage gwee - 1E7F9) 1315 ETHIOPIC SYLLABLE GWE + x (ethiopic syllable gurage gwe - 1E7FA) 1318 ETHIOPIC SYLLABLE GGA 1319 ETHIOPIC SYLLABLE GGU 131A ETHIOPIC SYLLABLE GGI @@ -8050,22 +8291,30 @@ 137B ETHIOPIC NUMBER HUNDRED 137C ETHIOPIC NUMBER TEN THOUSAND @@ 1380 Ethiopic Supplement 139F -@ Syllables for Sebatbeit +@ Syllables for Gurage 1380 ETHIOPIC SYLLABLE SEBATBEIT MWA 1381 ETHIOPIC SYLLABLE MWI + x (ethiopic syllable gurage mwi - 1E7ED) 1382 ETHIOPIC SYLLABLE MWEE + x (ethiopic syllable gurage mwee - 1E7EE) 1383 ETHIOPIC SYLLABLE MWE 1384 ETHIOPIC SYLLABLE SEBATBEIT BWA 1385 ETHIOPIC SYLLABLE BWI + x (ethiopic syllable gurage bwi - 1E7F3) 1386 ETHIOPIC SYLLABLE BWEE + x (ethiopic syllable gurage bwee - 1E7F4) 1387 ETHIOPIC SYLLABLE BWE 1388 ETHIOPIC SYLLABLE SEBATBEIT FWA 1389 ETHIOPIC SYLLABLE FWI + x (ethiopic syllable gurage fwi - 1E7FB) 138A ETHIOPIC SYLLABLE FWEE + x (ethiopic syllable gurage fwee - 1E7FC) 138B ETHIOPIC SYLLABLE FWE 138C ETHIOPIC SYLLABLE SEBATBEIT PWA 138D ETHIOPIC SYLLABLE PWI + x (ethiopic syllable gurage pwi - 1E7FD) 138E ETHIOPIC SYLLABLE PWEE + x (ethiopic syllable gurage pwee - 1E7FE) 138F ETHIOPIC SYLLABLE PWE @ Tonal marks @+ Intended for use with a multiline scored layout @@ -8745,6 +8994,7 @@ 15C2 CANADIAN SYLLABICS SAYISI HO * Sayisi (HU) 15C3 CANADIAN SYLLABICS SAYISI HA +@ Syllables for Carrier 15C4 CANADIAN SYLLABICS CARRIER GHU 15C5 CANADIAN SYLLABICS CARRIER GHO 15C6 CANADIAN SYLLABICS CARRIER GHE @@ -9101,6 +9351,8 @@ 170A TAGALOG LETTER BA 170B TAGALOG LETTER MA 170C TAGALOG LETTER YA +170D TAGALOG LETTER RA + * modern adaptation, not found in Old Tagalog 170E TAGALOG LETTER LA 170F TAGALOG LETTER WA 1710 TAGALOG LETTER SA @@ -9108,8 +9360,14 @@ @ Dependent vowel signs 1712 TAGALOG VOWEL SIGN I 1713 TAGALOG VOWEL SIGN U -@ Virama +@ Viramas 1714 TAGALOG SIGN VIRAMA +1715 TAGALOG SIGN PAMUDPOD + x (hanunoo sign pamudpod - 1734) +@ Archaic letter +171F TAGALOG LETTER ARCHAIC RA + = Zambales ra + * modern adaptation, not found in Old Tagalog @@ 1720 Hanunoo 173F @ Independent vowels 1720 HANUNOO LETTER A @@ -9136,6 +9394,7 @@ 1733 HANUNOO VOWEL SIGN U @ Virama 1734 HANUNOO SIGN PAMUDPOD + x (tagalog sign pamudpod - 1715) @ Generic punctuation for Philippine scripts 1735 PHILIPPINE SINGLE PUNCTUATION x (devanagari danda - 0964) @@ -9424,6 +9683,8 @@ * abbreviated FVS3 180E MONGOLIAN VOWEL SEPARATOR * abbreviated MVS +180F MONGOLIAN FREE VARIATION SELECTOR FOUR + * abbreviated FVS4 @ Digits 1810 MONGOLIAN DIGIT ZERO 1811 MONGOLIAN DIGIT ONE @@ -10150,7 +10411,8 @@ * used in combinations with other punctuation marks at ends of sections 1AAD TAI THAM SIGN CAANG @@ 1AB0 Combining Diacritical Marks Extended 1AFF -@ Used for German dialectology +@+ This block contains many specialized combining marks, often derived from European dialectology transcriptional conventions. +@ Used in German dialectology 1AB0 COMBINING DOUBLED CIRCUMFLEX ACCENT 1AB1 COMBINING DIAERESIS-RING 1AB2 COMBINING INFINITY @@ -10164,6 +10426,8 @@ 1AB8 COMBINING DOUBLE OPEN MARK BELOW 1AB9 COMBINING LIGHT CENTRALIZATION STROKE BELOW 1ABA COMBINING STRONG CENTRALIZATION STROKE BELOW +@ Marks surrounding other diacritics or letters +@+ These marks are often intended to indicate partial or uncertain applicability of another diacritic. 1ABB COMBINING PARENTHESES ABOVE * intended to surround a diacritic above 1ABC COMBINING DOUBLE PARENTHESES ABOVE @@ -10172,11 +10436,39 @@ 1ABE COMBINING PARENTHESES OVERLAY * intended to surround a base letter * exact placement is font dependent -@ Used for Scots dialectology +@ Used in Scots dialectology 1ABF COMBINING LATIN SMALL LETTER W BELOW * indicates voiced labialization + x (modifier letter small w - 02B7) 1AC0 COMBINING LATIN SMALL LETTER TURNED W BELOW * indicates voiceless labialization +@ Marks next to or surrounding other diacritics +@+ The left or right parentheses marks are used in extended IPA in combination with voicing or devoicing diacritics to indicate initial or final partial applicability. +1AC1 COMBINING LEFT PARENTHESIS ABOVE LEFT +1AC2 COMBINING RIGHT PARENTHESIS ABOVE RIGHT +1AC3 COMBINING LEFT PARENTHESIS BELOW LEFT +1AC4 COMBINING RIGHT PARENTHESIS BELOW RIGHT +1AC5 COMBINING SQUARE BRACKETS ABOVE + * intended to surround a diacritic above + * used to indicate cancellation of an accent in Japanese transliteration +@ Phonetic sign +1AC6 COMBINING NUMBER SIGN ABOVE + = superscript octothorp + * used extensively in J.P. Harrington's transcriptional notation +@ Used in extended IPA +1AC7 COMBINING INVERTED DOUBLE ARCH ABOVE + x (combining inverted double arch below - 032B) + x (combining latin small letter w - 1DF1) +1AC8 COMBINING PLUS SIGN ABOVE + x (combining plus sign below - 031F) +1AC9 COMBINING DOUBLE PLUS SIGN ABOVE +1ACA COMBINING DOUBLE PLUS SIGN BELOW +@ Used in Middle English Ormulum +1ACB COMBINING TRIPLE ACUTE ACCENT + x (combining double acute accent - 030B) +1ACC COMBINING LATIN SMALL LETTER INSULAR G +1ACD COMBINING LATIN SMALL LETTER INSULAR R +1ACE COMBINING LATIN SMALL LETTER INSULAR T @@ 1B00 Balinese 1B7F @ Various signs 1B00 BALINESE SIGN ULU RICEM @@ -10186,7 +10478,9 @@ 1B02 BALINESE SIGN CECEK = anusvara 1B03 BALINESE SIGN SURANG - = repha + = final r + * also used for repha in transliteration of Kawi + x (javanese sign layar - A982) 1B04 BALINESE SIGN BISAH = visarga @ Independent vowels @@ -10323,6 +10617,9 @@ 1B49 BALINESE LETTER VE SASAK 1B4A BALINESE LETTER ZAL SASAK 1B4B BALINESE LETTER ASYURA SASAK +1B4C BALINESE LETTER ARCHAIC JNYA + * used in older texts in place of the ja + nya conjunct + x (javanese letter nya murda - A998) @ Digits 1B50 BALINESE DIGIT ZERO 1B51 BALINESE DIGIT ONE @@ -10382,12 +10679,17 @@ 1B7A BALINESE MUSICAL SYMBOL LEFT-HAND CLOSED PLAK 1B7B BALINESE MUSICAL SYMBOL LEFT-HAND CLOSED PLUK 1B7C BALINESE MUSICAL SYMBOL LEFT-HAND OPEN PING +@ Punctuation +1B7D BALINESE PANTI LANTANG + = end of text +1B7E BALINESE PAMADA LANTANG + = end of text @@ 1B80 Sundanese 1BBF @ Various signs 1B80 SUNDANESE SIGN PANYECEK = anusvara 1B81 SUNDANESE SIGN PANGLAYAR - = repha + = final r 1B82 SUNDANESE SIGN PANGWISAD = visarga @ Vowels @@ -10982,9 +11284,11 @@ 1D33 MODIFIER LETTER CAPITAL G # 0047 1D34 MODIFIER LETTER CAPITAL H + # 0048 +@+ A typographical distinction between a capital form and a small capital form is not distinctive for this character in IPA usage. + * voiceless epiglottalized release (extended IPA) x (latin letter small capital h - 029C) x (modifier letter cyrillic en - 1D78) - # 0048 1D35 MODIFIER LETTER CAPITAL I # 0049 1D36 MODIFIER LETTER CAPITAL J @@ -11117,6 +11421,7 @@ * Georgian transcription x (georgian letter turned gan - 10F9) 1D78 MODIFIER LETTER CYRILLIC EN + * sometimes substituted for 1D34 in extended IPA x (modifier letter capital h - 1D34) # 043D @ Other phonetic symbols @@ -11127,6 +11432,7 @@ x (latin small letter yogh - 021D) x (latin small letter script g - 0261) x (latin small letter gamma - 0263) + x (latin small letter closed insular g - A7D1) 1D7A LATIN SMALL LETTER TH WITH STRIKETHROUGH * American dictionary usage x (greek small letter theta - 03B8) @@ -11345,6 +11651,8 @@ 1DEF COMBINING LATIN SMALL LETTER ESH 1DF0 COMBINING LATIN SMALL LETTER U WITH LIGHT CENTRALIZATION STROKE 1DF1 COMBINING LATIN SMALL LETTER W + x (combining latin small letter w below - 1ABF) + x (combining inverted double arch above - 1AC7) 1DF2 COMBINING LATIN SMALL LETTER A WITH DIAERESIS 1DF3 COMBINING LATIN SMALL LETTER O WITH DIAERESIS 1DF4 COMBINING LATIN SMALL LETTER U WITH DIAERESIS @@ -11359,9 +11667,12 @@ * used in Syriac as a disambiguation dot * used in Typicon Cyrillic, where the dot may have a square appearance x (combining dot above right - 0358) + x (syriac feminine dot - 0740) 1DF9 COMBINING WIDE INVERTED BRIDGE BELOW * used as a Typicon mark x (combining inverted bridge below - 033A) +1DFA COMBINING DOT BELOW LEFT + * used in Syriac as a disambiguation dot 1DFB COMBINING DELETION MARK * used for "mhusaa" in Newa scribal tradition @ Double diacritic mark for UPA @@ -12633,7 +12944,7 @@ = Japanese kome = Urdu paragraph separator x (tibetan ku ru kha bzhi mig can - 0FBF) - x (cjk unified ideograph-200AD - 200AD) + x 200AD @ Double punctuation for vertical text 203C DOUBLE EXCLAMATION MARK x (exclamation mark - 0021) @@ -12667,6 +12978,7 @@ @ Brackets 2045 LEFT SQUARE BRACKET WITH QUILL x (left vertical bar with quill - 2E20) + x (left square bracket with stroke - 2E55) 2046 RIGHT SQUARE BRACKET WITH QUILL @ Double punctuation for vertical text 2047 DOUBLE QUESTION MARK @@ -12895,10 +13207,10 @@ x (thai currency symbol baht - 0E3F) x (khmer currency symbol riel - 17DB) x (script capital m - 2133) - x (cjk unified ideograph-5143 - 5143) - x (cjk unified ideograph-5186 - 5186) - x (cjk unified ideograph-5706 - 5706) - x (cjk unified ideograph-5713 - 5713) + x 5143 + x 5186 + x 5706 + x 5713 x (rial sign - FDFC) x (wancho ngun sign - 1E2FF) 20A0 EURO-CURRENCY SIGN @@ -12991,6 +13303,8 @@ * Georgia 20BF BITCOIN SIGN * a cryptocurrency +20C0 SOM SIGN + * Kyrgyzstan @@ 20D0 Combining Diacritical Marks for Symbols 20FF @ Combining diacritical marks for symbols 20D0 COMBINING LEFT HARPOON ABOVE @@ -13093,6 +13407,8 @@ # 0067 latin small letter g 210B SCRIPT CAPITAL H = Hamiltonian operator + ~ 210B FE00 chancery style + ~ 210B FE01 roundhand style # 0048 latin capital letter h 210C BLACK-LETTER CAPITAL H = Hilbert space @@ -13108,12 +13424,16 @@ x (cyrillic small letter tshe - 045B) # 0127 latin small letter h with stroke 2110 SCRIPT CAPITAL I + ~ 2110 FE00 chancery style + ~ 2110 FE01 roundhand style # 0049 latin capital letter i 2111 BLACK-LETTER CAPITAL I = imaginary part # 0049 latin capital letter i 2112 SCRIPT CAPITAL L = Laplace transform + ~ 2112 FE00 chancery style + ~ 2112 FE01 roundhand style # 004C latin capital letter l 2113 SCRIPT SMALL L = mathematical symbol 'ell' @@ -13148,6 +13468,8 @@ # 0051 latin capital letter q 211B SCRIPT CAPITAL R = Riemann Integral + ~ 211B FE00 chancery style + ~ 211B FE01 roundhand style # 0052 latin capital letter r 211C BLACK-LETTER CAPITAL R = real part @@ -13202,6 +13524,8 @@ : 00C5 latin capital letter a with ring above 212C SCRIPT CAPITAL B = Bernoulli function + ~ 212C FE00 chancery style + ~ 212C FE01 roundhand style # 0042 latin capital letter b 212D BLACK-LETTER CAPITAL C # 0043 latin capital letter c @@ -13214,9 +13538,13 @@ # 0065 latin small letter e 2130 SCRIPT CAPITAL E = emf (electromotive force) + ~ 2130 FE00 chancery style + ~ 2130 FE01 roundhand style # 0045 latin capital letter e 2131 SCRIPT CAPITAL F = Fourier transform + ~ 2131 FE00 chancery style + ~ 2131 FE01 roundhand style # 0046 latin capital letter f 2132 TURNED CAPITAL F = Claudian digamma inversum @@ -13228,6 +13556,8 @@ = German Mark currency symbol, before WWII * when used for the Mark symbol, the range of glyph variation is restricted x (nordic mark sign - 20BB) + ~ 2133 FE00 chancery style + ~ 2133 FE01 roundhand style # 004D latin capital letter m 2134 SCRIPT SMALL O = order, of inferior order to @@ -13311,6 +13641,7 @@ x (greek small letter digamma - 03DD) @ Biblical editorial symbol 214F SYMBOL FOR SAMARITAN SOURCE +@~ Standardized Variation Sequences @@ 2150 Number Forms 218F @ Fractions @+ Other fraction number forms are found in the Latin-1 Supplement block. @@ -13890,7 +14221,9 @@ : 2261 0338 2263 STRICTLY EQUIVALENT TO 2264 LESS-THAN OR EQUAL TO + x (less-than sign - 003C) 2265 GREATER-THAN OR EQUAL TO + x (greater-than sign - 003E) 2266 LESS-THAN OVER EQUAL TO 2267 GREATER-THAN OVER EQUAL TO 2268 LESS-THAN BUT NOT EQUAL TO @@ -14110,6 +14443,9 @@ x (black star - 2605) x (white medium star - 2B50) 22C7 DIVISION TIMES + x (multiplication sign - 00D7) + x (division sign - 00F7) + x (multiplication x - 2715) @ Relation 22C8 BOWTIE x (ocr bow tie - 2445) @@ -18275,6 +18611,8 @@ 2C2C GLAGOLITIC CAPITAL LETTER SHTAPIC 2C2D GLAGOLITIC CAPITAL LETTER TROKUTASTI A 2C2E GLAGOLITIC CAPITAL LETTER LATINATE MYSLITE +2C2F GLAGOLITIC CAPITAL LETTER CAUDATE CHRIVI +@+ This is used as an alternative to Glagolitic letter chrivi, combined with 0303 combining tilde or with 0483 combining Cyrillic titlo as an et cetera sign. @ Small letters 2C30 GLAGOLITIC SMALL LETTER AZU 2C31 GLAGOLITIC SMALL LETTER BUKY @@ -18324,6 +18662,7 @@ 2C5C GLAGOLITIC SMALL LETTER SHTAPIC 2C5D GLAGOLITIC SMALL LETTER TROKUTASTI A 2C5E GLAGOLITIC SMALL LETTER LATINATE MYSLITE +2C5F GLAGOLITIC SMALL LETTER CAUDATE CHRIVI @@ 2C60 Latin Extended-C 2C7F @ Orthographic Latin additions 2C60 LATIN CAPITAL LETTER L WITH DOUBLE BAR @@ -18338,7 +18677,7 @@ * uppercase is 023A 2C66 LATIN SMALL LETTER T WITH DIAGONAL STROKE * uppercase is 023E -@ Additions for Uighur +@ Additions for Uyghur 2C67 LATIN CAPITAL LETTER H WITH DESCENDER 2C68 LATIN SMALL LETTER H WITH DESCENDER 2C69 LATIN CAPITAL LETTER K WITH DESCENDER @@ -18705,7 +19044,7 @@ 2DBC ETHIOPIC SYLLABLE CCHEE 2DBD ETHIOPIC SYLLABLE CCHE 2DBE ETHIOPIC SYLLABLE CCHO -@ Syllables for Sebatbeit +@ Syllables for Gurage 2DC0 ETHIOPIC SYLLABLE QYA 2DC1 ETHIOPIC SYLLABLE QYU 2DC2 ETHIOPIC SYLLABLE QYI @@ -18721,12 +19060,19 @@ 2DCD ETHIOPIC SYLLABLE KYE 2DCE ETHIOPIC SYLLABLE KYO 2DD0 ETHIOPIC SYLLABLE XYA + x (ethiopic syllable hhya - 1E7E0) 2DD1 ETHIOPIC SYLLABLE XYU + x (ethiopic syllable hhyu - 1E7E1) 2DD2 ETHIOPIC SYLLABLE XYI + x (ethiopic syllable hhyi - 1E7E2) 2DD3 ETHIOPIC SYLLABLE XYAA + x (ethiopic syllable hhyaa - 1E7E3) 2DD4 ETHIOPIC SYLLABLE XYEE + x (ethiopic syllable hhyee - 1E7E4) 2DD5 ETHIOPIC SYLLABLE XYE + x (ethiopic syllable hhye - 1E7E5) 2DD6 ETHIOPIC SYLLABLE XYO + x (ethiopic syllable hhyo - 1E7E6) 2DD8 ETHIOPIC SYLLABLE GYA 2DD9 ETHIOPIC SYLLABLE GYU 2DDA ETHIOPIC SYLLABLE GYI @@ -18821,6 +19167,7 @@ x (equals sign - 003D) x (hyphen - 2010) x (double hyphen - 2E40) + x (oblique hyphen - 2E5D) @ General punctuation 2E18 INVERTED INTERROBANG = gnaborretni @@ -18978,13 +19325,37 @@ x (paragraphos - 2E0F) x (capitulum - 2E3F) 2E4E PUNCTUS ELEVATUS MARK - * indicates a major medial pause where the sense is complete but the meaning is not +@+ This mark indicates a major intermediate pause where the sensus is complete but the sentence is not; this is similar in some regards to the modern use of a semicolon. 2E4F CORNISH VERSE DIVIDER 2E50 CROSS PATTY WITH RIGHT CROSSBAR x (maltese cross - 2720) + x (latin capital letter half h - 2C75) 2E51 CROSS PATTY WITH LEFT CROSSBAR + x (latin capital letter reversed half h - A7F5) 2E52 TIRONIAN SIGN CAPITAL ET x (tironian sign et - 204A) +2E53 MEDIEVAL EXCLAMATION MARK +2E54 MEDIEVAL QUESTION MARK +@ Brackets +@+ These brackets indicate ellipsis in certain conventions for Japanese transliteration. +2E55 LEFT SQUARE BRACKET WITH STROKE + * optional ellipsis + x (left square bracket with quill - 2045) +2E56 RIGHT SQUARE BRACKET WITH STROKE +2E57 LEFT SQUARE BRACKET WITH DOUBLE STROKE + * obligatory ellipsis +2E58 RIGHT SQUARE BRACKET WITH DOUBLE STROKE +@ Parentheses top and bottom halves +@+ These are used in pairs in extended IPA to indicate dubious phonemes or questionable presence of a sound. +2E59 TOP HALF LEFT PARENTHESIS +2E5A TOP HALF RIGHT PARENTHESIS +2E5B BOTTOM HALF LEFT PARENTHESIS +2E5C BOTTOM HALF RIGHT PARENTHESIS +@ Oblique hyphen +@+ The oblique hyphen is historic punctuation seen in some medieval and Renaissance manuscripts. In some modern lexicography an oblique hyphen is used distinctly to indicate hyphenation which is retained when a word is not broken at a line boundary. +2E5D OBLIQUE HYPHEN + x (hyphen - 2010) + x (double oblique hyphen - 2E17) @@ 2E80 CJK Radicals Supplement 2EFF @+ For the characters in this block whose representative glyph takes up only a portion of the em-box, the placement relative to the em-box is either centered or respects prototypical usage. The placement of the representative glyph is for informational purposes only, and should not be considered a recommendation for implementations. @ CJK radicals supplement @@ -19090,6 +19461,7 @@ x 4E2C 2EA7 CJK RADICAL COW x 725B + x 20092 2EA8 CJK RADICAL DOG * form used on left side x 72AD @@ -19790,6 +20162,7 @@ * substitute for ideograph not in font * editorial convention to represent ideographic lacuna x (white square - 25A1) + x (heavy equals sign - 1F7F0) @ CJK brackets 3014 LEFT TORTOISE SHELL BRACKET 3015 RIGHT TORTOISE SHELL BRACKET @@ -21844,7 +22217,7 @@ 4DFD HEXAGRAM FOR SMALL PREPONDERANCE 4DFE HEXAGRAM FOR AFTER COMPLETION 4DFF HEXAGRAM FOR BEFORE COMPLETION -@@ 4E00 CJK Unified Ideographs 9FFC +@@ 4E00 CJK Unified Ideographs 9FFF @@ A000 Yi Syllables A48F @@+ @ Syllables @@ -23791,6 +24164,7 @@ A72F LATIN SMALL LETTER CUATRILLO WITH COMMA A730 LATIN LETTER SMALL CAPITAL F A731 LATIN LETTER SMALL CAPITAL S A732 LATIN CAPITAL LETTER AA + x (modifier letter small capital aa - 10780) A733 LATIN SMALL LETTER AA A734 LATIN CAPITAL LETTER AO A735 LATIN SMALL LETTER AO @@ -23976,6 +24350,7 @@ A7AE LATIN CAPITAL LETTER SMALL CAPITAL I @ Letter for Japanese phonemic transcription A7AF LATIN LETTER SMALL CAPITAL Q * used to represent gemination + x (modifier letter capital q - A7F4) @ Letters for Americanist orthographies A7B0 LATIN CAPITAL LETTER TURNED K * lowercase is 029E @@ -23996,7 +24371,7 @@ A7B5 LATIN SMALL LETTER BETA A7B6 LATIN CAPITAL LETTER OMEGA A7B7 LATIN SMALL LETTER OMEGA x (greek small letter omega - 03C9) -@ Letters for Mazahua (Mexico) +@ Letters for Mazahua (México) A7B8 LATIN CAPITAL LETTER U WITH STROKE A7B9 LATIN SMALL LETTER U WITH STROKE @ Letters for Ugaritic and Egyptological transliteration @@ -24010,7 +24385,11 @@ A7BD LATIN SMALL LETTER GLOTTAL I x (latin small letter egyptological ain - A725) A7BE LATIN CAPITAL LETTER GLOTTAL U A7BF LATIN SMALL LETTER GLOTTAL U -@ Additional letters +@ Additional medieval letters +A7C0 LATIN CAPITAL LETTER OLD POLISH O +A7C1 LATIN SMALL LETTER OLD POLISH O + * used in Old Polish as a nasal vowel + x (latin small letter o with stroke - 00F8) A7C2 LATIN CAPITAL LETTER ANGLICANA W A7C3 LATIN SMALL LETTER ANGLICANA W * used in medieval English and Cornish @@ -24028,6 +24407,31 @@ A7C8 LATIN SMALL LETTER D WITH SHORT STROKE OVERLAY * indicates a dental affricate A7C9 LATIN CAPITAL LETTER S WITH SHORT STROKE OVERLAY A7CA LATIN SMALL LETTER S WITH SHORT STROKE OVERLAY +@ Letters used in the Middle English Ormulum +A7D0 LATIN CAPITAL LETTER CLOSED INSULAR G +A7D1 LATIN SMALL LETTER CLOSED INSULAR G + x (latin small letter insular g - 1D79) +A7D3 LATIN SMALL LETTER DOUBLE THORN + x (latin small letter thorn - 00FE) +A7D5 LATIN SMALL LETTER DOUBLE WYNN + x (latin letter wynn - 01BF) +@ Letters used in medieval palaeography +A7D6 LATIN CAPITAL LETTER MIDDLE SCOTS S +A7D7 LATIN SMALL LETTER MIDDLE SCOTS S + * used in Middle Scots for s, ss, ser, sir, is, sis, etc. + x (latin small letter sharp s - 00DF) +A7D8 LATIN CAPITAL LETTER SIGMOID S +A7D9 LATIN SMALL LETTER SIGMOID S + * used in Middle Cornish, Middle English, and Middle Scots +@ Modifier letters for Chatino (México) +A7F2 MODIFIER LETTER CAPITAL C + # 0043 +A7F3 MODIFIER LETTER CAPITAL F + # 0046 +@ Modifier letter for Japanese phonemic transcription +A7F4 MODIFIER LETTER CAPITAL Q + x (latin letter small capital q - A7AF) + # 0051 @ Ancient Gaulish and Celtic epigraphic letters A7F5 LATIN CAPITAL LETTER REVERSED HALF H = H dimidié @@ -24039,7 +24443,7 @@ A7F7 LATIN EPIGRAPHIC LETTER SIDEWAYS I @ Additions for Extended IPA A7F8 MODIFIER LETTER CAPITAL H WITH STROKE # 0126 -@+ A typographical distinction between a capital form and a small capital form is not distinctive for this IPA usage. +@+ A typographical distinction between a capital form and a small capital form is not distinctive for this character in IPA usage. * faucalized x (latin letter small capital h - 029C) A7F9 MODIFIER LETTER SMALL LIGATURE OE @@ -24129,7 +24533,7 @@ A838 NORTH INDIC RUPEE MARK A839 NORTH INDIC QUANTITY MARK * a unit mark for various weights and measures @@ A840 Phags-pa A87F -@+ Phags-pa letters are used for Mongolian, Chinese, Uighur, Tibetan, and Sanskrit unless annotated with a more restricted list of languages. +@+ Phags-pa letters are used for Mongolian, Chinese, Uyghur, Tibetan, and Sanskrit unless annotated with a more restricted list of languages. @ Consonants A840 PHAGS-PA LETTER KA * Mongolian, Chinese, Tibetan, Sanskrit @@ -24145,10 +24549,10 @@ A844 PHAGS-PA LETTER CA * Chinese, Tibetan x (tibetan letter ca - 0F45) A845 PHAGS-PA LETTER CHA - * Mongolian, Chinese, Uighur, Tibetan + * Mongolian, Chinese, Uyghur, Tibetan x (tibetan letter cha - 0F46) A846 PHAGS-PA LETTER JA - * Mongolian, Chinese, Uighur, Tibetan + * Mongolian, Chinese, Uyghur, Tibetan x (tibetan letter ja - 0F47) A847 PHAGS-PA LETTER NYA * Chinese, Tibetan, Sanskrit @@ -24195,7 +24599,7 @@ A856 PHAGS-PA LETTER SMALL A A857 PHAGS-PA LETTER YA x (tibetan letter ya - 0F61) A858 PHAGS-PA LETTER RA - * Mongolian, Uighur, Tibetan, Sanskrit + * Mongolian, Uyghur, Tibetan, Sanskrit x (tibetan letter ra - 0F62) A859 PHAGS-PA LETTER LA x (tibetan letter la - 0F63) @@ -24223,18 +24627,18 @@ A861 PHAGS-PA LETTER O x (tibetan vowel sign o - 0F7C) @ Consonants A862 PHAGS-PA LETTER QA - * Mongolian, Uighur + * Mongolian, Uyghur A863 PHAGS-PA LETTER XA * Mongolian, Chinese A864 PHAGS-PA LETTER FA - * Chinese, Uighur + * Chinese, Uyghur x (phags-pa letter ha - A85C) A865 PHAGS-PA LETTER GGA * language usage unknown * created by reversal of A862 @ Vowel A866 PHAGS-PA LETTER EE - * Mongolian, Chinese, Uighur + * Mongolian, Chinese, Uyghur @ Subjoined consonants A867 PHAGS-PA SUBJOINED LETTER WA * Chinese, Tibetan, Sanskrit @@ -24620,7 +25024,9 @@ A980 JAVANESE SIGN PANYANGGA A981 JAVANESE SIGN CECAK = anusvara A982 JAVANESE SIGN LAYAR - = repha + = final r + * also used for repha in transliteration of Kawi + x (balinese sign surang - 1B03) A983 JAVANESE SIGN WIGNYAN = visarga @ Letters @@ -24656,6 +25062,7 @@ A996 JAVANESE LETTER CA MURDA A997 JAVANESE LETTER JA A998 JAVANESE LETTER NYA MURDA = jnya + x (balinese letter archaic jnya - 1B4C) A999 JAVANESE LETTER JA MAHAPRANA = jha A99A JAVANESE LETTER NYA @@ -24915,6 +25322,7 @@ AA6C MYANMAR LETTER KHAMTI SA ~ AA6C FE00 dotted form AA6D MYANMAR LETTER KHAMTI HA AA6E MYANMAR LETTER KHAMTI HHA + % MYANMAR LETTER KHAMTI LLA AA6F MYANMAR LETTER KHAMTI FA ~ AA6F FE00 dotted form AA70 MYANMAR MODIFIER LETTER KHAMTI REDUPLICATION @@ -25586,7 +25994,7 @@ F92B CJK COMPATIBILITY IDEOGRAPH-F92B : 72FC F92C CJK COMPATIBILITY IDEOGRAPH-F92C * a mapping change removed the original K0 source - x (cjk unified ideograph-90DE - 90DE) + x 90DE x (cjk compatibility ideograph-FA2E - FA2E) : 90CE F92D CJK COMPATIBILITY IDEOGRAPH-F92D @@ -25869,7 +26277,7 @@ F9B7 CJK COMPATIBILITY IDEOGRAPH-F9B7 : 91B4 F9B8 CJK COMPATIBILITY IDEOGRAPH-F9B8 * a mapping change removed the original K0 source - x (cjk unified ideograph-96B7 - 96B7) + x 96B7 x (cjk compatibility ideograph-FA2F - FA2F) : 96B8 F9B9 CJK COMPATIBILITY IDEOGRAPH-F9B9 @@ -26805,6 +27213,8 @@ FBC0 ARABIC SYMBOL SMALL TAH ABOVE * Urdu FBC1 ARABIC SYMBOL SMALL TAH BELOW * Urdu +FBC2 ARABIC SYMBOL WASLA ABOVE + x (arabic letter alef wasla - 0671) @ Glyphs for contextual forms of letters for Central Asian languages FBD3 ARABIC LETTER NG ISOLATED FORM # 06AD @@ -27538,6 +27948,29 @@ FD3D ARABIC LIGATURE ALEF WITH FATHATAN ISOLATED FORM @+ These parentheses also do not have compatibility decompositions and should not be considered presentation forms. FD3E ORNATE LEFT PARENTHESIS FD3F ORNATE RIGHT PARENTHESIS +@ Honorific word ligatures +FD40 ARABIC LIGATURE RAHIMAHU ALLAAH + x (arabic sign rahmatullah alayhe - 0612) +FD41 ARABIC LIGATURE RADI ALLAAHU ANH + x (arabic sign radi allahou anhu - 0613) +FD42 ARABIC LIGATURE RADI ALLAAHU ANHAA +FD43 ARABIC LIGATURE RADI ALLAAHU ANHUM +FD44 ARABIC LIGATURE RADI ALLAAHU ANHUMAA +FD45 ARABIC LIGATURE RADI ALLAAHU ANHUNNA +FD46 ARABIC LIGATURE SALLALLAAHU ALAYHI WA-AALIH + x (arabic ligature sallallahou alayhe wasallam - FDFA) +FD47 ARABIC LIGATURE ALAYHI AS-SALAAM + x (arabic sign alayhe assallam - 0611) +FD48 ARABIC LIGATURE ALAYHIM AS-SALAAM +FD49 ARABIC LIGATURE ALAYHIMAA AS-SALAAM +FD4A ARABIC LIGATURE ALAYHI AS-SALAATU WAS-SALAAM +FD4B ARABIC LIGATURE QUDDISA SIRRAH +FD4C ARABIC LIGATURE SALLALLAHU ALAYHI WAAALIHEE WA-SALLAM + x (arabic ligature sallallahou alayhe wasallam - FDFA) + x (arabic ligature sallallaahu alayhi wa-aalih - FD46) +FD4D ARABIC LIGATURE ALAYHAA AS-SALAAM +FD4E ARABIC LIGATURE TABAARAKA WA-TAAALAA +FD4F ARABIC LIGATURE RAHIMAHUM ALLAAH @ Ligatures (three elements) FD50 ARABIC LIGATURE TEH WITH JEEM WITH MEEM INITIAL FORM # 062A 062C 0645 @@ -27775,6 +28208,10 @@ FDC6 ARABIC LIGATURE SEEN WITH KHAH WITH YEH FINAL FORM # 0633 062E 064A FDC7 ARABIC LIGATURE NOON WITH JEEM WITH YEH FINAL FORM # 0646 062C 064A +@ Honorific word ligature +FDCF ARABIC LIGATURE SALAAMUHU ALAYNAA + * his blessing on us + * used in Christian texts @ Noncharacters @+ These codes are intended for process-internal uses. FDD0 @@ -27839,9 +28276,11 @@ FDFB ARABIC LIGATURE JALLAJALALOUHOU @ Currency symbol FDFC RIAL SIGN # 0631 06CC 0627 0644 -@ Symbol -@+ The bismillah is treated as an atomic symbol, rather than as a word ligature. It has no decomposition. +@ Honorific word ligatures +@+ These word ligatures have no decompositions. FDFD ARABIC LIGATURE BISMILLAH AR-RAHMAN AR-RAHEEM +FDFE ARABIC LIGATURE SUBHAANAHU WA TAAALAA +FDFF ARABIC LIGATURE AZZA WA JALL @@ FE00 Variation Selectors FE0F @ Variation selectors @+ These are combining characters; in conjunction with the preceding character they indicate a predetermined choice of variant glyph. @@ -30036,6 +30475,83 @@ FFFF 10563 CAUCASIAN ALBANIAN LETTER KIW @ Punctuation 1056F CAUCASIAN ALBANIAN CITATION MARK +@@ 10570 Vithkuqi 105BF +@ Capital letters +10570 VITHKUQI CAPITAL LETTER A +10571 VITHKUQI CAPITAL LETTER BBE +10572 VITHKUQI CAPITAL LETTER BE +10573 VITHKUQI CAPITAL LETTER CE +10574 VITHKUQI CAPITAL LETTER CHE +10575 VITHKUQI CAPITAL LETTER DE +10576 VITHKUQI CAPITAL LETTER DHE +10577 VITHKUQI CAPITAL LETTER EI +10578 VITHKUQI CAPITAL LETTER E +10579 VITHKUQI CAPITAL LETTER FE +1057A VITHKUQI CAPITAL LETTER GA +1057C VITHKUQI CAPITAL LETTER HA +1057D VITHKUQI CAPITAL LETTER HHA + * used in 19th-century orthography +1057E VITHKUQI CAPITAL LETTER I +1057F VITHKUQI CAPITAL LETTER IJE + * used in 19th-century orthography +10580 VITHKUQI CAPITAL LETTER JE +10581 VITHKUQI CAPITAL LETTER KA +10582 VITHKUQI CAPITAL LETTER LA +10583 VITHKUQI CAPITAL LETTER LLA +10584 VITHKUQI CAPITAL LETTER ME +10585 VITHKUQI CAPITAL LETTER NE +10586 VITHKUQI CAPITAL LETTER NJE +10587 VITHKUQI CAPITAL LETTER O +10588 VITHKUQI CAPITAL LETTER PE +10589 VITHKUQI CAPITAL LETTER QA +1058A VITHKUQI CAPITAL LETTER RE +1058C VITHKUQI CAPITAL LETTER SE +1058D VITHKUQI CAPITAL LETTER SHE +1058E VITHKUQI CAPITAL LETTER TE +1058F VITHKUQI CAPITAL LETTER THE +10590 VITHKUQI CAPITAL LETTER U +10591 VITHKUQI CAPITAL LETTER VE +10592 VITHKUQI CAPITAL LETTER XE +10594 VITHKUQI CAPITAL LETTER Y +10595 VITHKUQI CAPITAL LETTER ZE +@ Small letters +10597 VITHKUQI SMALL LETTER A +10598 VITHKUQI SMALL LETTER BBE +10599 VITHKUQI SMALL LETTER BE +1059A VITHKUQI SMALL LETTER CE +1059B VITHKUQI SMALL LETTER CHE +1059C VITHKUQI SMALL LETTER DE +1059D VITHKUQI SMALL LETTER DHE +1059E VITHKUQI SMALL LETTER EI +1059F VITHKUQI SMALL LETTER E +105A0 VITHKUQI SMALL LETTER FE +105A1 VITHKUQI SMALL LETTER GA +105A3 VITHKUQI SMALL LETTER HA +105A4 VITHKUQI SMALL LETTER HHA + * used in 19th-century orthography +105A5 VITHKUQI SMALL LETTER I +105A6 VITHKUQI SMALL LETTER IJE + * used in 19th-century orthography +105A7 VITHKUQI SMALL LETTER JE +105A8 VITHKUQI SMALL LETTER KA +105A9 VITHKUQI SMALL LETTER LA +105AA VITHKUQI SMALL LETTER LLA +105AB VITHKUQI SMALL LETTER ME +105AC VITHKUQI SMALL LETTER NE +105AD VITHKUQI SMALL LETTER NJE +105AE VITHKUQI SMALL LETTER O +105AF VITHKUQI SMALL LETTER PE +105B0 VITHKUQI SMALL LETTER QA +105B1 VITHKUQI SMALL LETTER RE +105B3 VITHKUQI SMALL LETTER SE +105B4 VITHKUQI SMALL LETTER SHE +105B5 VITHKUQI SMALL LETTER TE +105B6 VITHKUQI SMALL LETTER THE +105B7 VITHKUQI SMALL LETTER U +105B8 VITHKUQI SMALL LETTER VE +105B9 VITHKUQI SMALL LETTER XE +105BB VITHKUQI SMALL LETTER Y +105BC VITHKUQI SMALL LETTER ZE @@ 10600 Linear A 1077F @ Simple signs 10600 LINEAR A SIGN AB001 @@ -30587,6 +31103,124 @@ FFFF * 10668 a316, 10601 ab002 10767 LINEAR A SIGN A807 * 10668 a316, 10742 a703 d +@@ 10780 Latin Extended-F 107BF +@ Modifier letter for VoQS +10780 MODIFIER LETTER SMALL CAPITAL AA + * actually a small capital in VoQS (voice quality symbol) usage, with no semantic distinction from a full capital + x (latin capital letter aa - A732) +@ Modifier letters for IPA +10781 MODIFIER LETTER SUPERSCRIPT TRIANGULAR COLON + # 02D0 +10782 MODIFIER LETTER SUPERSCRIPT HALF TRIANGULAR COLON + # 02D1 +10783 MODIFIER LETTER SMALL AE + # 00E6 +10784 MODIFIER LETTER SMALL CAPITAL B + # 0299 +10785 MODIFIER LETTER SMALL B WITH HOOK + # 0253 +10787 MODIFIER LETTER SMALL DZ DIGRAPH + # 02A3 +10788 MODIFIER LETTER SMALL DZ DIGRAPH WITH RETROFLEX HOOK + # AB66 +10789 MODIFIER LETTER SMALL DZ DIGRAPH WITH CURL + # 02A5 +1078A MODIFIER LETTER SMALL DEZH DIGRAPH + # 02A4 +1078B MODIFIER LETTER SMALL D WITH TAIL + # 0256 +1078C MODIFIER LETTER SMALL D WITH HOOK + # 0257 +1078D MODIFIER LETTER SMALL D WITH HOOK AND TAIL + # 1D91 +1078E MODIFIER LETTER SMALL REVERSED E + # 0258 +1078F MODIFIER LETTER SMALL CLOSED REVERSED OPEN E + # 025E +10790 MODIFIER LETTER SMALL FENG DIGRAPH + # 02A9 +10791 MODIFIER LETTER SMALL RAMS HORN + # 0264 +10792 MODIFIER LETTER SMALL CAPITAL G + # 0262 +10793 MODIFIER LETTER SMALL G WITH HOOK + # 0260 +10794 MODIFIER LETTER SMALL CAPITAL G WITH HOOK + # 029B +10795 MODIFIER LETTER SMALL H WITH STROKE + # 0127 +10796 MODIFIER LETTER SMALL CAPITAL H + # 029C +10797 MODIFIER LETTER SMALL HENG WITH HOOK + # 0267 +10798 MODIFIER LETTER SMALL DOTLESS J WITH STROKE AND HOOK + # 0284 +10799 MODIFIER LETTER SMALL LS DIGRAPH + # 02AA +1079A MODIFIER LETTER SMALL LZ DIGRAPH + # 02AB +1079B MODIFIER LETTER SMALL L WITH BELT + # 026C +1079C MODIFIER LETTER SMALL CAPITAL L WITH BELT + # 1DF04 +1079D MODIFIER LETTER SMALL L WITH RETROFLEX HOOK AND BELT + # A78E +1079E MODIFIER LETTER SMALL LEZH + # 026E +1079F MODIFIER LETTER SMALL LEZH WITH RETROFLEX HOOK + # 1DF05 +107A0 MODIFIER LETTER SMALL TURNED Y + # 028E +107A1 MODIFIER LETTER SMALL TURNED Y WITH BELT + # 1DF06 +107A2 MODIFIER LETTER SMALL O WITH STROKE + # 00F8 +107A3 MODIFIER LETTER SMALL CAPITAL OE + # 0276 +107A4 MODIFIER LETTER SMALL CLOSED OMEGA + # 0277 +107A5 MODIFIER LETTER SMALL Q + # 0071 +107A6 MODIFIER LETTER SMALL TURNED R WITH LONG LEG + # 027A +107A7 MODIFIER LETTER SMALL TURNED R WITH LONG LEG AND RETROFLEX HOOK + # 1DF08 +107A8 MODIFIER LETTER SMALL R WITH TAIL + # 027D +107A9 MODIFIER LETTER SMALL R WITH FISHHOOK + # 027E +107AA MODIFIER LETTER SMALL CAPITAL R + # 0280 +107AB MODIFIER LETTER SMALL TC DIGRAPH WITH CURL + # 02A8 +107AC MODIFIER LETTER SMALL TS DIGRAPH + # 02A6 +107AD MODIFIER LETTER SMALL TS DIGRAPH WITH RETROFLEX HOOK + # AB67 +107AE MODIFIER LETTER SMALL TESH DIGRAPH + # 02A7 +107AF MODIFIER LETTER SMALL T WITH RETROFLEX HOOK + # 0288 +107B0 MODIFIER LETTER SMALL V WITH RIGHT HOOK + # 2C71 +107B2 MODIFIER LETTER SMALL CAPITAL Y + # 028F +107B3 MODIFIER LETTER GLOTTAL STOP WITH STROKE + # 02A1 +107B4 MODIFIER LETTER REVERSED GLOTTAL STOP WITH STROKE + # 02A2 +107B5 MODIFIER LETTER BILABIAL CLICK + # 0298 +107B6 MODIFIER LETTER DENTAL CLICK + # 01C0 +107B7 MODIFIER LETTER LATERAL CLICK + # 01C1 +107B8 MODIFIER LETTER ALVEOLAR CLICK + # 01C2 +107B9 MODIFIER LETTER RETROFLEX CLICK WITH RETROFLEX HOOK + # 1DF0A +107BA MODIFIER LETTER SMALL S WITH CURL + # 1DF1E @@ 10800 Cypriot Syllabary 1083F @ Syllables 10800 CYPRIOT SYLLABLE A @@ -32120,6 +32754,37 @@ FFFF 10F57 SOGDIAN PUNCTUATION CIRCLE WITH DOT 10F58 SOGDIAN PUNCTUATION TWO CIRCLES WITH DOTS 10F59 SOGDIAN PUNCTUATION HALF CIRCLE WITH DOT +@@ 10F70 Old Uyghur 10FAF +@ Letters +10F70 OLD UYGHUR LETTER ALEPH +10F71 OLD UYGHUR LETTER BETH +10F72 OLD UYGHUR LETTER GIMEL-HETH +10F73 OLD UYGHUR LETTER WAW +10F74 OLD UYGHUR LETTER ZAYIN +10F75 OLD UYGHUR LETTER FINAL HETH +10F76 OLD UYGHUR LETTER YODH +10F77 OLD UYGHUR LETTER KAPH +10F78 OLD UYGHUR LETTER LAMEDH +10F79 OLD UYGHUR LETTER MEM +10F7A OLD UYGHUR LETTER NUN +10F7B OLD UYGHUR LETTER SAMEKH +10F7C OLD UYGHUR LETTER PE +10F7D OLD UYGHUR LETTER SADHE +10F7E OLD UYGHUR LETTER RESH +10F7F OLD UYGHUR LETTER SHIN +10F80 OLD UYGHUR LETTER TAW +10F81 OLD UYGHUR LETTER LESH + = hooked resh +@ Combining signs +10F82 OLD UYGHUR COMBINING DOT ABOVE +10F83 OLD UYGHUR COMBINING DOT BELOW +10F84 OLD UYGHUR COMBINING TWO DOTS ABOVE +10F85 OLD UYGHUR COMBINING TWO DOTS BELOW +@ Punctuation +10F86 OLD UYGHUR PUNCTUATION BAR +10F87 OLD UYGHUR PUNCTUATION TWO BARS +10F88 OLD UYGHUR PUNCTUATION TWO DOTS +10F89 OLD UYGHUR PUNCTUATION FOUR DOTS @@ 10FB0 Chorasmian 10FDF @+ This script is also known as 'Khwarezmian', from its classical Persian name xvārazm. @ Letters @@ -32296,6 +32961,17 @@ FFFF 1106D BRAHMI DIGIT SEVEN 1106E BRAHMI DIGIT EIGHT 1106F BRAHMI DIGIT NINE +@ Virama +@+ The Old Tamil virama and the other Old Tamil characters below are extensions used in Brahmi when writing Old Tamil. +11070 BRAHMI SIGN OLD TAMIL VIRAMA +@ Independent vowels +11071 BRAHMI LETTER OLD TAMIL SHORT E +11072 BRAHMI LETTER OLD TAMIL SHORT O +@ Dependent vowel signs +11073 BRAHMI VOWEL SIGN OLD TAMIL SHORT E +11074 BRAHMI VOWEL SIGN OLD TAMIL SHORT O +@ Consonant +11075 BRAHMI LETTER OLD TAMIL LLA @ Number joiner 1107F BRAHMI NUMBER JOINER * a virama used to form ligatures between Brahmi numbers signifying multiplication @@ -32382,6 +33058,8 @@ FFFF x (khojki double section mark - 1123C) 110C0 KAITHI DANDA 110C1 KAITHI DOUBLE DANDA +@ Vowel sign +110C2 KAITHI VOWEL SIGN VOCALIC R @ Sign 110CD KAITHI NUMBER SIGN ABOVE * used to indicate a number in an itemized list @@ -33544,6 +34222,10 @@ FFFF @ Consonant 116B8 TAKRI LETTER ARCHAIC KHA * used in earlier writings to denote kha +@ Punctuation +116B9 TAKRI ABBREVIATION SIGN + x (gurmukhi abbreviation sign - 0A76) + x (sharada abbreviation sign - 111C7) @ Digits 116C0 TAKRI DIGIT ZERO 116C1 TAKRI DIGIT ONE @@ -33555,7 +34237,7 @@ FFFF 116C7 TAKRI DIGIT SEVEN 116C8 TAKRI DIGIT EIGHT 116C9 TAKRI DIGIT NINE -@@ 11700 Ahom 1173F +@@ 11700 Ahom 1174F @ Consonants 11700 AHOM LETTER KA 11701 AHOM LETTER KHA @@ -33620,6 +34302,14 @@ FFFF 1173D AHOM SIGN SECTION 1173E AHOM SIGN RULAI 1173F AHOM SYMBOL VI +@ Additional consonants +11740 AHOM LETTER CA +11741 AHOM LETTER TTA +11742 AHOM LETTER TTHA +11743 AHOM LETTER DDA +11744 AHOM LETTER DDHA +11745 AHOM LETTER NNA +11746 AHOM LETTER LLA @@ 11800 Dogra 1184F @ Independent vowels 11800 DOGRA LETTER A @@ -34181,6 +34871,29 @@ FFFF 11AA1 SOYOMBO TERMINAL MARK-1 11AA2 SOYOMBO TERMINAL MARK-2 = cintamani, candamani +@@ 11AB0 Unified Canadian Aboriginal Syllabics Extended-A 11ABF +@ Syllables for Nattilik +11AB0 CANADIAN SYLLABICS NATTILIK HI +11AB1 CANADIAN SYLLABICS NATTILIK HII +11AB2 CANADIAN SYLLABICS NATTILIK HO + * Nattilik (HU) +11AB3 CANADIAN SYLLABICS NATTILIK HOO + * Nattilik (HUU) +11AB4 CANADIAN SYLLABICS NATTILIK HA +11AB5 CANADIAN SYLLABICS NATTILIK HAA +11AB6 CANADIAN SYLLABICS NATTILIK SHRI +11AB7 CANADIAN SYLLABICS NATTILIK SHRII +11AB8 CANADIAN SYLLABICS NATTILIK SHRO + * Nattilik (SHRU) +11AB9 CANADIAN SYLLABICS NATTILIK SHROO + * Nattilik (SHRUU) +11ABA CANADIAN SYLLABICS NATTILIK SHRA +11ABB CANADIAN SYLLABICS NATTILIK SHRAA +@ Historic syllables for Cree and Ojibway +11ABC CANADIAN SYLLABICS SPE +11ABD CANADIAN SYLLABICS SPI +11ABE CANADIAN SYLLABICS SPO +11ABF CANADIAN SYLLABICS SPA @@ 11AC0 Pau Cin Hau 11AFF @ Consonants 11AC0 PAU CIN HAU LETTER PA @@ -36005,6 +36718,108 @@ FFFF 12541 CUNEIFORM SIGN ZA7 12542 CUNEIFORM SIGN ZU OVER ZU PLUS SAR 12543 CUNEIFORM SIGN ZU5 TIMES THREE DISH TENU +@@ 12F90 Cypro-Minoan 12FFF +@ Signs +12F90 CYPRO-MINOAN SIGN CM001 +12F91 CYPRO-MINOAN SIGN CM002 +12F92 CYPRO-MINOAN SIGN CM004 +12F93 CYPRO-MINOAN SIGN CM005 +12F94 CYPRO-MINOAN SIGN CM006 +12F95 CYPRO-MINOAN SIGN CM007 +12F96 CYPRO-MINOAN SIGN CM008 +12F97 CYPRO-MINOAN SIGN CM009 +12F98 CYPRO-MINOAN SIGN CM010 +12F99 CYPRO-MINOAN SIGN CM011 +12F9A CYPRO-MINOAN SIGN CM012 +12F9B CYPRO-MINOAN SIGN CM012B +12F9C CYPRO-MINOAN SIGN CM013 +12F9D CYPRO-MINOAN SIGN CM015 +12F9E CYPRO-MINOAN SIGN CM017 +12F9F CYPRO-MINOAN SIGN CM019 +12FA0 CYPRO-MINOAN SIGN CM021 +12FA1 CYPRO-MINOAN SIGN CM023 +12FA2 CYPRO-MINOAN SIGN CM024 +12FA3 CYPRO-MINOAN SIGN CM025 +12FA4 CYPRO-MINOAN SIGN CM026 +12FA5 CYPRO-MINOAN SIGN CM027 +12FA6 CYPRO-MINOAN SIGN CM028 +12FA7 CYPRO-MINOAN SIGN CM029 +12FA8 CYPRO-MINOAN SIGN CM030 +12FA9 CYPRO-MINOAN SIGN CM033 +12FAA CYPRO-MINOAN SIGN CM034 +12FAB CYPRO-MINOAN SIGN CM035 +12FAC CYPRO-MINOAN SIGN CM036 +12FAD CYPRO-MINOAN SIGN CM037 +12FAE CYPRO-MINOAN SIGN CM038 +12FAF CYPRO-MINOAN SIGN CM039 +12FB0 CYPRO-MINOAN SIGN CM040 +12FB1 CYPRO-MINOAN SIGN CM041 +12FB2 CYPRO-MINOAN SIGN CM044 +12FB3 CYPRO-MINOAN SIGN CM046 +12FB4 CYPRO-MINOAN SIGN CM047 +12FB5 CYPRO-MINOAN SIGN CM049 +12FB6 CYPRO-MINOAN SIGN CM050 +12FB7 CYPRO-MINOAN SIGN CM051 +12FB8 CYPRO-MINOAN SIGN CM052 +12FB9 CYPRO-MINOAN SIGN CM053 +12FBA CYPRO-MINOAN SIGN CM054 +12FBB CYPRO-MINOAN SIGN CM055 +12FBC CYPRO-MINOAN SIGN CM056 +12FBD CYPRO-MINOAN SIGN CM058 +12FBE CYPRO-MINOAN SIGN CM059 +12FBF CYPRO-MINOAN SIGN CM060 +12FC0 CYPRO-MINOAN SIGN CM061 +12FC1 CYPRO-MINOAN SIGN CM062 +12FC2 CYPRO-MINOAN SIGN CM063 +12FC3 CYPRO-MINOAN SIGN CM064 +12FC4 CYPRO-MINOAN SIGN CM066 +12FC5 CYPRO-MINOAN SIGN CM067 +12FC6 CYPRO-MINOAN SIGN CM068 +12FC7 CYPRO-MINOAN SIGN CM069 +12FC8 CYPRO-MINOAN SIGN CM070 +12FC9 CYPRO-MINOAN SIGN CM071 +12FCA CYPRO-MINOAN SIGN CM072 +12FCB CYPRO-MINOAN SIGN CM073 +12FCC CYPRO-MINOAN SIGN CM074 +12FCD CYPRO-MINOAN SIGN CM075 +12FCE CYPRO-MINOAN SIGN CM075B +12FCF CYPRO-MINOAN SIGN CM076 +12FD0 CYPRO-MINOAN SIGN CM078 +12FD1 CYPRO-MINOAN SIGN CM079 +12FD2 CYPRO-MINOAN SIGN CM080 +12FD3 CYPRO-MINOAN SIGN CM081 +12FD4 CYPRO-MINOAN SIGN CM082 +12FD5 CYPRO-MINOAN SIGN CM083 +12FD6 CYPRO-MINOAN SIGN CM084 +12FD7 CYPRO-MINOAN SIGN CM085 +12FD8 CYPRO-MINOAN SIGN CM086 +12FD9 CYPRO-MINOAN SIGN CM087 +12FDA CYPRO-MINOAN SIGN CM088 +12FDB CYPRO-MINOAN SIGN CM089 +12FDC CYPRO-MINOAN SIGN CM090 +12FDD CYPRO-MINOAN SIGN CM091 +12FDE CYPRO-MINOAN SIGN CM092 +12FDF CYPRO-MINOAN SIGN CM094 +12FE0 CYPRO-MINOAN SIGN CM095 +12FE1 CYPRO-MINOAN SIGN CM096 +12FE2 CYPRO-MINOAN SIGN CM097 +12FE3 CYPRO-MINOAN SIGN CM098 +12FE4 CYPRO-MINOAN SIGN CM099 +12FE5 CYPRO-MINOAN SIGN CM100 +12FE6 CYPRO-MINOAN SIGN CM101 +12FE7 CYPRO-MINOAN SIGN CM102 +12FE8 CYPRO-MINOAN SIGN CM103 +12FE9 CYPRO-MINOAN SIGN CM104 +12FEA CYPRO-MINOAN SIGN CM105 +12FEB CYPRO-MINOAN SIGN CM107 +12FEC CYPRO-MINOAN SIGN CM108 +12FED CYPRO-MINOAN SIGN CM109 +12FEE CYPRO-MINOAN SIGN CM110 +12FEF CYPRO-MINOAN SIGN CM112 +12FF0 CYPRO-MINOAN SIGN CM114 +@ Punctuation +12FF1 CYPRO-MINOAN SIGN CM301 +12FF2 CYPRO-MINOAN SIGN CM302 @@ 13000 Egyptian Hieroglyphs 1342F @+ The characters in this block are taken primarily from Alan Gardiner's works on Middle Egyptian. @ A. Man and his occupations @@ -36104,7 +36919,9 @@ FFFF 1305B EGYPTIAN HIEROGLYPH C002 1305C EGYPTIAN HIEROGLYPH C002A 1305D EGYPTIAN HIEROGLYPH C002B + * mirrored version of 1305C 1305E EGYPTIAN HIEROGLYPH C002C + * mirrored version of 1305B 1305F EGYPTIAN HIEROGLYPH C003 13060 EGYPTIAN HIEROGLYPH C004 13061 EGYPTIAN HIEROGLYPH C005 @@ -36118,8 +36935,10 @@ FFFF * 1,000,000 13069 EGYPTIAN HIEROGLYPH C012 1306A EGYPTIAN HIEROGLYPH C013 + * mirrored version of 13069 1306B EGYPTIAN HIEROGLYPH C014 1306C EGYPTIAN HIEROGLYPH C015 + * mirrored version of 1306B 1306D EGYPTIAN HIEROGLYPH C016 1306E EGYPTIAN HIEROGLYPH C017 1306F EGYPTIAN HIEROGLYPH C018 @@ -36144,6 +36963,8 @@ FFFF 13081 EGYPTIAN HIEROGLYPH D011 * 1/2 13082 EGYPTIAN HIEROGLYPH D012 + * pupil of the eye + * not to be confused with 131F3 or 133F8 * 1/4 13083 EGYPTIAN HIEROGLYPH D013 * 1/8 @@ -36158,6 +36979,8 @@ FFFF 13089 EGYPTIAN HIEROGLYPH D019 1308A EGYPTIAN HIEROGLYPH D020 1308B EGYPTIAN HIEROGLYPH D021 + * mouth + * not to be confused with 133AB * transliterated as r 1308C EGYPTIAN HIEROGLYPH D022 1308D EGYPTIAN HIEROGLYPH D023 @@ -36197,6 +37020,8 @@ FFFF 130AB EGYPTIAN HIEROGLYPH D048A 130AC EGYPTIAN HIEROGLYPH D049 130AD EGYPTIAN HIEROGLYPH D050 + * classifier 'accurate, finger' + * not to be confused with 130B7 * 10,000 130AE EGYPTIAN HIEROGLYPH D050A * 20,000 @@ -36217,12 +37042,16 @@ FFFF 130B6 EGYPTIAN HIEROGLYPH D050I * 50,000 130B7 EGYPTIAN HIEROGLYPH D051 + * classifier 'measure, nail, scratching, taking' + * not to be confused with 130AD 130B8 EGYPTIAN HIEROGLYPH D052 130B9 EGYPTIAN HIEROGLYPH D052A 130BA EGYPTIAN HIEROGLYPH D053 130BB EGYPTIAN HIEROGLYPH D054 + * (forward) motion 130BC EGYPTIAN HIEROGLYPH D054A 130BD EGYPTIAN HIEROGLYPH D055 + * backward motion 130BE EGYPTIAN HIEROGLYPH D056 130BF EGYPTIAN HIEROGLYPH D057 130C0 EGYPTIAN HIEROGLYPH D058 @@ -36237,6 +37066,7 @@ FFFF 130C8 EGYPTIAN HIEROGLYPH D066 130C9 EGYPTIAN HIEROGLYPH D067 * 1 heqat measure + * not to be confused with 13212 130CA EGYPTIAN HIEROGLYPH D067A * 2 heqat measures 130CB EGYPTIAN HIEROGLYPH D067B @@ -36255,7 +37085,10 @@ FFFF * 9 heqat measures @ E. Mammals 130D2 EGYPTIAN HIEROGLYPH E001 + * bull, classifier 'cattle' + * not to be confused with 130FD 130D3 EGYPTIAN HIEROGLYPH E002 + * aggressive bull 130D4 EGYPTIAN HIEROGLYPH E003 130D5 EGYPTIAN HIEROGLYPH E004 130D6 EGYPTIAN HIEROGLYPH E005 @@ -36295,9 +37128,12 @@ FFFF 130F8 EGYPTIAN HIEROGLYPH E033 130F9 EGYPTIAN HIEROGLYPH E034 130FA EGYPTIAN HIEROGLYPH E034A + * stylistic variant, use of 130F9 is preferred 130FB EGYPTIAN HIEROGLYPH E036 130FC EGYPTIAN HIEROGLYPH E037 130FD EGYPTIAN HIEROGLYPH E038 + * cow + * not to be confused with 130D2 @ F. Parts of mammals 130FE EGYPTIAN HIEROGLYPH F001 130FF EGYPTIAN HIEROGLYPH F001A @@ -36314,6 +37150,7 @@ FFFF 1310A EGYPTIAN HIEROGLYPH F012 1310B EGYPTIAN HIEROGLYPH F013 1310C EGYPTIAN HIEROGLYPH F013A + * stylistic variant, use of 1310B is preferred 1310D EGYPTIAN HIEROGLYPH F014 1310E EGYPTIAN HIEROGLYPH F015 1310F EGYPTIAN HIEROGLYPH F016 @@ -36323,9 +37160,11 @@ FFFF 13113 EGYPTIAN HIEROGLYPH F020 13114 EGYPTIAN HIEROGLYPH F021 13115 EGYPTIAN HIEROGLYPH F021A + * from hieratic 13116 EGYPTIAN HIEROGLYPH F022 13117 EGYPTIAN HIEROGLYPH F023 13118 EGYPTIAN HIEROGLYPH F024 + * mirrored version of 13117 13119 EGYPTIAN HIEROGLYPH F025 1311A EGYPTIAN HIEROGLYPH F026 1311B EGYPTIAN HIEROGLYPH F027 @@ -36334,6 +37173,7 @@ FFFF 1311E EGYPTIAN HIEROGLYPH F030 1311F EGYPTIAN HIEROGLYPH F031 13120 EGYPTIAN HIEROGLYPH F031A + * cursive variant of 1311F 13121 EGYPTIAN HIEROGLYPH F032 * transliterated as 1E96 13122 EGYPTIAN HIEROGLYPH F033 @@ -36354,25 +37194,35 @@ FFFF 13131 EGYPTIAN HIEROGLYPH F045A 13132 EGYPTIAN HIEROGLYPH F046 13133 EGYPTIAN HIEROGLYPH F046A + * rotated version of 13132 13134 EGYPTIAN HIEROGLYPH F047 + * mirrored version of 13132 13135 EGYPTIAN HIEROGLYPH F047A + * mirrored version of 13133 13136 EGYPTIAN HIEROGLYPH F048 13137 EGYPTIAN HIEROGLYPH F049 + * mirrored version of 13136 13138 EGYPTIAN HIEROGLYPH F050 13139 EGYPTIAN HIEROGLYPH F051 1313A EGYPTIAN HIEROGLYPH F051A 1313B EGYPTIAN HIEROGLYPH F051B + * variant of 1313A 1313C EGYPTIAN HIEROGLYPH F051C + * rotated version of 13139 1313D EGYPTIAN HIEROGLYPH F052 1313E EGYPTIAN HIEROGLYPH F053 @ G. Birds 1313F EGYPTIAN HIEROGLYPH G001 + * Egyptian vulture, Egyptological alef + * not to be confused with 13142 * transliterated as A723 x (hebrew letter alef - 05D0) x (arabic letter alef with hamza above - 0623) 13140 EGYPTIAN HIEROGLYPH G002 13141 EGYPTIAN HIEROGLYPH G003 13142 EGYPTIAN HIEROGLYPH G004 + * phonogram 'tw' + * not to be confused with 1313F 13143 EGYPTIAN HIEROGLYPH G005 13144 EGYPTIAN HIEROGLYPH G006 13145 EGYPTIAN HIEROGLYPH G006A @@ -36413,10 +37263,14 @@ FFFF 13167 EGYPTIAN HIEROGLYPH G035 13168 EGYPTIAN HIEROGLYPH G036 13169 EGYPTIAN HIEROGLYPH G036A + * stylistic variant, use of 13168 is preferred 1316A EGYPTIAN HIEROGLYPH G037 1316B EGYPTIAN HIEROGLYPH G037A + * stylistic variant, use of 1316A is preferred 1316C EGYPTIAN HIEROGLYPH G038 + * goose 1316D EGYPTIAN HIEROGLYPH G039 + * duck 1316E EGYPTIAN HIEROGLYPH G040 1316F EGYPTIAN HIEROGLYPH G041 13170 EGYPTIAN HIEROGLYPH G042 @@ -36443,6 +37297,7 @@ FFFF 13183 EGYPTIAN HIEROGLYPH H005 13184 EGYPTIAN HIEROGLYPH H006 13185 EGYPTIAN HIEROGLYPH H006A + * from hieratic 13186 EGYPTIAN HIEROGLYPH H007 13187 EGYPTIAN HIEROGLYPH H008 @ I. Amphibious animals, reptiles, etc. @@ -36477,7 +37332,7 @@ FFFF 131A0 EGYPTIAN HIEROGLYPH K006 131A1 EGYPTIAN HIEROGLYPH K007 131A2 EGYPTIAN HIEROGLYPH K008 -@ L. Invertabrata and lesser animals +@ L. Invertebrata and lesser animals 131A3 EGYPTIAN HIEROGLYPH L001 131A4 EGYPTIAN HIEROGLYPH L002 131A5 EGYPTIAN HIEROGLYPH L002A @@ -36486,6 +37341,7 @@ FFFF 131A8 EGYPTIAN HIEROGLYPH L005 131A9 EGYPTIAN HIEROGLYPH L006 131AA EGYPTIAN HIEROGLYPH L006A + * mirrored version of 131A9 131AB EGYPTIAN HIEROGLYPH L007 131AC EGYPTIAN HIEROGLYPH L008 @ M. Trees and plants @@ -36529,18 +37385,21 @@ FFFF 131C9 EGYPTIAN HIEROGLYPH M016 131CA EGYPTIAN HIEROGLYPH M016A 131CB EGYPTIAN HIEROGLYPH M017 - * yod + * egyptological yod + * transliterated as A7BD x (hebrew letter yod - 05D9) x (arabic letter yeh - 064A) 131CC EGYPTIAN HIEROGLYPH M017A - * transliterated as y + * phonogram 'y' x (egyptian hieroglyph z004 - 133ED) 131CD EGYPTIAN HIEROGLYPH M018 131CE EGYPTIAN HIEROGLYPH M019 131CF EGYPTIAN HIEROGLYPH M020 131D0 EGYPTIAN HIEROGLYPH M021 131D1 EGYPTIAN HIEROGLYPH M022 + * classifier 'bud, lotus bud' 131D2 EGYPTIAN HIEROGLYPH M022A + *phonogram 'nn' 131D3 EGYPTIAN HIEROGLYPH M023 131D4 EGYPTIAN HIEROGLYPH M024 131D5 EGYPTIAN HIEROGLYPH M024A @@ -36556,30 +37415,42 @@ FFFF 131DF EGYPTIAN HIEROGLYPH M032 131E0 EGYPTIAN HIEROGLYPH M033 131E1 EGYPTIAN HIEROGLYPH M033A + * variant of 131E0 131E2 EGYPTIAN HIEROGLYPH M033B + * variant of 131E0 131E3 EGYPTIAN HIEROGLYPH M034 131E4 EGYPTIAN HIEROGLYPH M035 131E5 EGYPTIAN HIEROGLYPH M036 131E6 EGYPTIAN HIEROGLYPH M037 + * older variant of 131E5 131E7 EGYPTIAN HIEROGLYPH M038 131E8 EGYPTIAN HIEROGLYPH M039 131E9 EGYPTIAN HIEROGLYPH M040 + * phonogram 'js' + * not to be confused with 132A7 or 1342A 131EA EGYPTIAN HIEROGLYPH M040A 131EB EGYPTIAN HIEROGLYPH M041 131EC EGYPTIAN HIEROGLYPH M042 131ED EGYPTIAN HIEROGLYPH M043 131EE EGYPTIAN HIEROGLYPH M044 + * thorn + * not to be confused with 133DA @ N. Sky, earth, water 131EF EGYPTIAN HIEROGLYPH N001 131F0 EGYPTIAN HIEROGLYPH N002 131F1 EGYPTIAN HIEROGLYPH N003 + * older variant of 131F0 131F2 EGYPTIAN HIEROGLYPH N004 131F3 EGYPTIAN HIEROGLYPH N005 + * sun + * not to be confused with 13082 or 133F8 131F4 EGYPTIAN HIEROGLYPH N006 131F5 EGYPTIAN HIEROGLYPH N007 131F6 EGYPTIAN HIEROGLYPH N008 131F7 EGYPTIAN HIEROGLYPH N009 + * variant of 131F8 131F8 EGYPTIAN HIEROGLYPH N010 + * variant of 131F7 131F9 EGYPTIAN HIEROGLYPH N011 131FA EGYPTIAN HIEROGLYPH N012 131FB EGYPTIAN HIEROGLYPH N013 @@ -36587,10 +37458,15 @@ FFFF 131FD EGYPTIAN HIEROGLYPH N015 131FE EGYPTIAN HIEROGLYPH N016 131FF EGYPTIAN HIEROGLYPH N017 + * land + * variant of 131FE 13200 EGYPTIAN HIEROGLYPH N018 + * island + * not to be confused with 132F0, 133D4, or 133F3 13201 EGYPTIAN HIEROGLYPH N018A 13202 EGYPTIAN HIEROGLYPH N018B 13203 EGYPTIAN HIEROGLYPH N019 + * logogram 'akhti' 13204 EGYPTIAN HIEROGLYPH N020 13205 EGYPTIAN HIEROGLYPH N021 13206 EGYPTIAN HIEROGLYPH N022 @@ -36598,10 +37474,13 @@ FFFF 13208 EGYPTIAN HIEROGLYPH N024 13209 EGYPTIAN HIEROGLYPH N025 1320A EGYPTIAN HIEROGLYPH N025A + * stylistic variant, use of 13209 is preferred 1320B EGYPTIAN HIEROGLYPH N026 1320C EGYPTIAN HIEROGLYPH N027 1320D EGYPTIAN HIEROGLYPH N028 1320E EGYPTIAN HIEROGLYPH N029 + * hill + * not to be confused with 133D8 * transliterated as q or as 1E33 x (hebrew letter qof - 05E7) x (arabic letter qaf - 0642) @@ -36609,21 +37488,33 @@ FFFF 13210 EGYPTIAN HIEROGLYPH N031 13211 EGYPTIAN HIEROGLYPH N032 13212 EGYPTIAN HIEROGLYPH N033 + * classifier 'granule, grain' + * not to be confused with 130C9 13213 EGYPTIAN HIEROGLYPH N033A + * classifier 'granules, grains' + * not to be confused with 133E7 13214 EGYPTIAN HIEROGLYPH N034 13215 EGYPTIAN HIEROGLYPH N034A + * stylistic variant, use of 13214 is preferred 13216 EGYPTIAN HIEROGLYPH N035 * transliterated as n 13217 EGYPTIAN HIEROGLYPH N035A + * classifier 'liquid' 13218 EGYPTIAN HIEROGLYPH N036 13219 EGYPTIAN HIEROGLYPH N037 + * lake * transliterated as 0161 + * not to be confused with 1328C 1321A EGYPTIAN HIEROGLYPH N037A + * variant of 13219 1321B EGYPTIAN HIEROGLYPH N038 + * variant of 13219 1321C EGYPTIAN HIEROGLYPH N039 + * variant of 13219 1321D EGYPTIAN HIEROGLYPH N040 1321E EGYPTIAN HIEROGLYPH N041 1321F EGYPTIAN HIEROGLYPH N042 + * variant of 1321E @ NL. Nomes of Lower Egypt 13220 EGYPTIAN HIEROGLYPH NL001 13221 EGYPTIAN HIEROGLYPH NL002 @@ -36685,6 +37576,7 @@ FFFF x (arabic letter heh - 0647) 13255 EGYPTIAN HIEROGLYPH O005 13256 EGYPTIAN HIEROGLYPH O005A + * mirrored version of 13255 13257 EGYPTIAN HIEROGLYPH O006 13258 EGYPTIAN HIEROGLYPH O006A * beginning of hwt or serekh enclosure @@ -36730,11 +37622,15 @@ FFFF 1327A EGYPTIAN HIEROGLYPH O028 1327B EGYPTIAN HIEROGLYPH O029 1327C EGYPTIAN HIEROGLYPH O029A + * rotated variant of 1327B 1327D EGYPTIAN HIEROGLYPH O030 + * supporting pole + * not to be confused with 13361 1327E EGYPTIAN HIEROGLYPH O030A 1327F EGYPTIAN HIEROGLYPH O031 13280 EGYPTIAN HIEROGLYPH O032 13281 EGYPTIAN HIEROGLYPH O033 + * classifier 'serekh' 13282 EGYPTIAN HIEROGLYPH O033A * end of serekh enclosure x (egyptian hieroglyph o006a - 13258) @@ -36754,10 +37650,13 @@ FFFF 1328A EGYPTIAN HIEROGLYPH O037 1328B EGYPTIAN HIEROGLYPH O038 1328C EGYPTIAN HIEROGLYPH O039 + * stone, brick + * not to be confused with 13219 1328D EGYPTIAN HIEROGLYPH O040 1328E EGYPTIAN HIEROGLYPH O041 1328F EGYPTIAN HIEROGLYPH O042 13290 EGYPTIAN HIEROGLYPH O043 + * older variant of 1328F 13291 EGYPTIAN HIEROGLYPH O044 13292 EGYPTIAN HIEROGLYPH O045 13293 EGYPTIAN HIEROGLYPH O046 @@ -36767,13 +37666,18 @@ FFFF 13297 EGYPTIAN HIEROGLYPH O050 13298 EGYPTIAN HIEROGLYPH O050A 13299 EGYPTIAN HIEROGLYPH O050B + * mirrored version of 13298 1329A EGYPTIAN HIEROGLYPH O051 @ P. Ships and parts of ships 1329B EGYPTIAN HIEROGLYPH P001 + * classifier 'ship, travel' 1329C EGYPTIAN HIEROGLYPH P001A + * classifier 'upset, overturn' 1329D EGYPTIAN HIEROGLYPH P002 1329E EGYPTIAN HIEROGLYPH P003 + * sacred ship 1329F EGYPTIAN HIEROGLYPH P003A + * mirrored variant of 1329E 132A0 EGYPTIAN HIEROGLYPH P004 132A1 EGYPTIAN HIEROGLYPH P005 132A2 EGYPTIAN HIEROGLYPH P006 @@ -36782,6 +37686,8 @@ FFFF 132A5 EGYPTIAN HIEROGLYPH P009 132A6 EGYPTIAN HIEROGLYPH P010 132A7 EGYPTIAN HIEROGLYPH P011 + * mooring post + * not to be confused with 131E9 or 1342A @ Q. Domestic and funerary furniture 132A8 EGYPTIAN HIEROGLYPH Q001 132A9 EGYPTIAN HIEROGLYPH Q002 @@ -36859,6 +37765,8 @@ FFFF 132EE EGYPTIAN HIEROGLYPH S025 132EF EGYPTIAN HIEROGLYPH S026 132F0 EGYPTIAN HIEROGLYPH S026A + * loin-cloth + * not to be confused with 13200, 133D4, or 133F3 132F1 EGYPTIAN HIEROGLYPH S026B 132F2 EGYPTIAN HIEROGLYPH S027 132F3 EGYPTIAN HIEROGLYPH S028 @@ -36872,12 +37780,16 @@ FFFF 132F9 EGYPTIAN HIEROGLYPH S034 132FA EGYPTIAN HIEROGLYPH S035 132FB EGYPTIAN HIEROGLYPH S035A + * variant of 132FA 132FC EGYPTIAN HIEROGLYPH S036 + * older variant of 132FA 132FD EGYPTIAN HIEROGLYPH S037 132FE EGYPTIAN HIEROGLYPH S038 132FF EGYPTIAN HIEROGLYPH S039 13300 EGYPTIAN HIEROGLYPH S040 + * phonogram 'wꜣs' 13301 EGYPTIAN HIEROGLYPH S041 + * phonogram 'ḏꜣm' 13302 EGYPTIAN HIEROGLYPH S042 13303 EGYPTIAN HIEROGLYPH S043 13304 EGYPTIAN HIEROGLYPH S044 @@ -36886,7 +37798,9 @@ FFFF @ T. Warfare, hunting, butchery 13307 EGYPTIAN HIEROGLYPH T001 13308 EGYPTIAN HIEROGLYPH T002 + * classifier 'striking, hitting' 13309 EGYPTIAN HIEROGLYPH T003 + * classifier 'mace' 1330A EGYPTIAN HIEROGLYPH T003A 1330B EGYPTIAN HIEROGLYPH T004 1330C EGYPTIAN HIEROGLYPH T005 @@ -36894,9 +37808,11 @@ FFFF 1330E EGYPTIAN HIEROGLYPH T007 1330F EGYPTIAN HIEROGLYPH T007A 13310 EGYPTIAN HIEROGLYPH T008 + * older variant of 13311 13311 EGYPTIAN HIEROGLYPH T008A 13312 EGYPTIAN HIEROGLYPH T009 13313 EGYPTIAN HIEROGLYPH T009A + * older variant of 13312 13314 EGYPTIAN HIEROGLYPH T010 13315 EGYPTIAN HIEROGLYPH T011 13316 EGYPTIAN HIEROGLYPH T011A @@ -36904,41 +37820,55 @@ FFFF 13318 EGYPTIAN HIEROGLYPH T013 13319 EGYPTIAN HIEROGLYPH T014 1331A EGYPTIAN HIEROGLYPH T015 + * older variant of 13319 1331B EGYPTIAN HIEROGLYPH T016 1331C EGYPTIAN HIEROGLYPH T016A 1331D EGYPTIAN HIEROGLYPH T017 1331E EGYPTIAN HIEROGLYPH T018 1331F EGYPTIAN HIEROGLYPH T019 13320 EGYPTIAN HIEROGLYPH T020 + * older variant of 1331F 13321 EGYPTIAN HIEROGLYPH T021 13322 EGYPTIAN HIEROGLYPH T022 13323 EGYPTIAN HIEROGLYPH T023 + * more recent variant of 13322 13324 EGYPTIAN HIEROGLYPH T024 13325 EGYPTIAN HIEROGLYPH T025 13326 EGYPTIAN HIEROGLYPH T026 13327 EGYPTIAN HIEROGLYPH T027 + * older variant of 13326 13328 EGYPTIAN HIEROGLYPH T028 13329 EGYPTIAN HIEROGLYPH T029 1332A EGYPTIAN HIEROGLYPH T030 + * classifier 'knife, cutting' 1332B EGYPTIAN HIEROGLYPH T031 + * phonogram 'sšm' 1332C EGYPTIAN HIEROGLYPH T032 1332D EGYPTIAN HIEROGLYPH T032A 1332E EGYPTIAN HIEROGLYPH T033 + * older variant of 13326 1332F EGYPTIAN HIEROGLYPH T033A 13330 EGYPTIAN HIEROGLYPH T034 13331 EGYPTIAN HIEROGLYPH T035 + * variant of 13330 13332 EGYPTIAN HIEROGLYPH T036 @ U. Agriculture, crafts, and professions 13333 EGYPTIAN HIEROGLYPH U001 13334 EGYPTIAN HIEROGLYPH U002 + * stylistic variant of 13333 13335 EGYPTIAN HIEROGLYPH U003 13336 EGYPTIAN HIEROGLYPH U004 13337 EGYPTIAN HIEROGLYPH U005 + * stylistic variant of 13336 13338 EGYPTIAN HIEROGLYPH U006 13339 EGYPTIAN HIEROGLYPH U006A + * stylistic variant of 13338 1333A EGYPTIAN HIEROGLYPH U006B + * mirrored version of 13339 1333B EGYPTIAN HIEROGLYPH U007 + * variant of 13338 1333C EGYPTIAN HIEROGLYPH U008 + * variant of 1333B 1333D EGYPTIAN HIEROGLYPH U009 1333E EGYPTIAN HIEROGLYPH U010 1333F EGYPTIAN HIEROGLYPH U011 @@ -36949,18 +37879,24 @@ FFFF 13344 EGYPTIAN HIEROGLYPH U016 13345 EGYPTIAN HIEROGLYPH U017 13346 EGYPTIAN HIEROGLYPH U018 + * variant of 13345 13347 EGYPTIAN HIEROGLYPH U019 13348 EGYPTIAN HIEROGLYPH U020 + * older variant of 13347 13349 EGYPTIAN HIEROGLYPH U021 1334A EGYPTIAN HIEROGLYPH U022 1334B EGYPTIAN HIEROGLYPH U023 1334C EGYPTIAN HIEROGLYPH U023A + * stylistic variant of 1334B 1334D EGYPTIAN HIEROGLYPH U024 1334E EGYPTIAN HIEROGLYPH U025 + * older variant of 1334D 1334F EGYPTIAN HIEROGLYPH U026 13350 EGYPTIAN HIEROGLYPH U027 + * older variant of 1334F 13351 EGYPTIAN HIEROGLYPH U028 13352 EGYPTIAN HIEROGLYPH U029 + * older variant of 13351 13353 EGYPTIAN HIEROGLYPH U029A 13354 EGYPTIAN HIEROGLYPH U030 13355 EGYPTIAN HIEROGLYPH U031 @@ -36974,11 +37910,16 @@ FFFF 1335D EGYPTIAN HIEROGLYPH U038 1335E EGYPTIAN HIEROGLYPH U039 1335F EGYPTIAN HIEROGLYPH U040 + * cursive variant of 1335E 13360 EGYPTIAN HIEROGLYPH U041 13361 EGYPTIAN HIEROGLYPH U042 + * pitchfork + * not to be confused with 1327D @ V. Rope, fiber, baskets, bags, etc. 13362 EGYPTIAN HIEROGLYPH V001 * 100 + * classifier 'cord, rope' + * not to be confused with 133F2 13363 EGYPTIAN HIEROGLYPH V001A * 200 13364 EGYPTIAN HIEROGLYPH V001B @@ -37003,13 +37944,17 @@ FFFF 1336F EGYPTIAN HIEROGLYPH V004 13370 EGYPTIAN HIEROGLYPH V005 13371 EGYPTIAN HIEROGLYPH V006 + * phonogram 'šs' 13372 EGYPTIAN HIEROGLYPH V007 + * phonogram 'šn' 13373 EGYPTIAN HIEROGLYPH V007A 13374 EGYPTIAN HIEROGLYPH V007B 13375 EGYPTIAN HIEROGLYPH V008 13376 EGYPTIAN HIEROGLYPH V009 13377 EGYPTIAN HIEROGLYPH V010 + * logogram 'name' 13378 EGYPTIAN HIEROGLYPH V011 + * classifier 'restrain, split' 13379 EGYPTIAN HIEROGLYPH V011A * beginning of cartouche 1337A EGYPTIAN HIEROGLYPH V011B @@ -37022,15 +37967,19 @@ FFFF 1337F EGYPTIAN HIEROGLYPH V013 * transliterated as 1E6F 13380 EGYPTIAN HIEROGLYPH V014 + * variant of 1337F 13381 EGYPTIAN HIEROGLYPH V015 13382 EGYPTIAN HIEROGLYPH V016 13383 EGYPTIAN HIEROGLYPH V017 13384 EGYPTIAN HIEROGLYPH V018 + * older variant of 13383 13385 EGYPTIAN HIEROGLYPH V019 13386 EGYPTIAN HIEROGLYPH V020 * 10 + * not to be confused with 133AD 13387 EGYPTIAN HIEROGLYPH V020A * 20 + * not to be confused with 133AE 13388 EGYPTIAN HIEROGLYPH V020B * 30 13389 EGYPTIAN HIEROGLYPH V020C @@ -37047,20 +37996,27 @@ FFFF * 90 1338F EGYPTIAN HIEROGLYPH V020I * 20 + * variant of 13387 13390 EGYPTIAN HIEROGLYPH V020J * 30 + * variant of 13388 13391 EGYPTIAN HIEROGLYPH V020K * 40 + * variant of 13389 13392 EGYPTIAN HIEROGLYPH V020L * 50 + * variant of 1338A 13393 EGYPTIAN HIEROGLYPH V021 13394 EGYPTIAN HIEROGLYPH V022 13395 EGYPTIAN HIEROGLYPH V023 + * older variant of 13394 13396 EGYPTIAN HIEROGLYPH V023A 13397 EGYPTIAN HIEROGLYPH V024 13398 EGYPTIAN HIEROGLYPH V025 + * more recent variant of 13397 13399 EGYPTIAN HIEROGLYPH V026 1339A EGYPTIAN HIEROGLYPH V027 + * older variant of 13399 1339B EGYPTIAN HIEROGLYPH V028 * transliterated as 1E25 x (arabic letter hah - 062D) @@ -37069,30 +38025,38 @@ FFFF 1339E EGYPTIAN HIEROGLYPH V029A 1339F EGYPTIAN HIEROGLYPH V030 133A0 EGYPTIAN HIEROGLYPH V030A + * stylistic variant, use of 1339F is preferred 133A1 EGYPTIAN HIEROGLYPH V031 * transliterated as k x (hebrew letter kaf - 05DB) x (arabic letter kaf - 0643) 133A2 EGYPTIAN HIEROGLYPH V031A + * from hieratic 133A3 EGYPTIAN HIEROGLYPH V032 133A4 EGYPTIAN HIEROGLYPH V033 133A5 EGYPTIAN HIEROGLYPH V033A 133A6 EGYPTIAN HIEROGLYPH V034 + * more recent variant of 133A4 133A7 EGYPTIAN HIEROGLYPH V035 133A8 EGYPTIAN HIEROGLYPH V036 133A9 EGYPTIAN HIEROGLYPH V037 133AA EGYPTIAN HIEROGLYPH V037A 133AB EGYPTIAN HIEROGLYPH V038 + * bandage + * not to be confused with 1308B 133AC EGYPTIAN HIEROGLYPH V039 133AD EGYPTIAN HIEROGLYPH V040 * 10 in dates + * not to be confused with 13386 133AE EGYPTIAN HIEROGLYPH V040A * 20 in dates + * not to be confused with 13387 @ W. Vessels of stone and earthenware 133AF EGYPTIAN HIEROGLYPH W001 133B0 EGYPTIAN HIEROGLYPH W002 133B1 EGYPTIAN HIEROGLYPH W003 133B2 EGYPTIAN HIEROGLYPH W003A + * stylistic variant, use of 133B1 is preferred 133B3 EGYPTIAN HIEROGLYPH W004 133B4 EGYPTIAN HIEROGLYPH W005 133B5 EGYPTIAN HIEROGLYPH W006 @@ -37100,11 +38064,13 @@ FFFF 133B7 EGYPTIAN HIEROGLYPH W008 133B8 EGYPTIAN HIEROGLYPH W009 133B9 EGYPTIAN HIEROGLYPH W009A + * mirrored version of 133B8 133BA EGYPTIAN HIEROGLYPH W010 133BB EGYPTIAN HIEROGLYPH W010A 133BC EGYPTIAN HIEROGLYPH W011 * transliterated as g 133BD EGYPTIAN HIEROGLYPH W012 + * older variant of 133BC 133BE EGYPTIAN HIEROGLYPH W013 133BF EGYPTIAN HIEROGLYPH W014 133C0 EGYPTIAN HIEROGLYPH W014A @@ -37112,81 +38078,122 @@ FFFF 133C2 EGYPTIAN HIEROGLYPH W016 133C3 EGYPTIAN HIEROGLYPH W017 133C4 EGYPTIAN HIEROGLYPH W017A + * cursive variant of 133C3 133C5 EGYPTIAN HIEROGLYPH W018 + * older variant of 133C3 133C6 EGYPTIAN HIEROGLYPH W018A + * cursive variant of 133C5 133C7 EGYPTIAN HIEROGLYPH W019 133C8 EGYPTIAN HIEROGLYPH W020 133C9 EGYPTIAN HIEROGLYPH W021 133CA EGYPTIAN HIEROGLYPH W022 133CB EGYPTIAN HIEROGLYPH W023 133CC EGYPTIAN HIEROGLYPH W024 + * phonogramm 'nw' 133CD EGYPTIAN HIEROGLYPH W024A + * monogramm 'nw(n)' or 'nww' 133CE EGYPTIAN HIEROGLYPH W025 @ X. Loaves and cakes 133CF EGYPTIAN HIEROGLYPH X001 * transliterated as t 133D0 EGYPTIAN HIEROGLYPH X002 133D1 EGYPTIAN HIEROGLYPH X003 + * variant of 133D0 133D2 EGYPTIAN HIEROGLYPH X004 133D3 EGYPTIAN HIEROGLYPH X004A + * variant of 133D2 133D4 EGYPTIAN HIEROGLYPH X004B + * cake + * variant of 133D2 + * not to be confused with 13200, 132F0, or 133F3 133D5 EGYPTIAN HIEROGLYPH X005 + * hieratic + * variant of 133D4 133D6 EGYPTIAN HIEROGLYPH X006 133D7 EGYPTIAN HIEROGLYPH X006A 133D8 EGYPTIAN HIEROGLYPH X007 + * classifier 'food' + * not to be confused with 1320E 133D9 EGYPTIAN HIEROGLYPH X008 133DA EGYPTIAN HIEROGLYPH X008A + * bread + * variant of 133D9 + * not to be confused with 131EE @ Y. Writings, games, music 133DB EGYPTIAN HIEROGLYPH Y001 133DC EGYPTIAN HIEROGLYPH Y001A + * rotated variant of 133DB 133DD EGYPTIAN HIEROGLYPH Y002 + * older variant of 133DB 133DE EGYPTIAN HIEROGLYPH Y003 133DF EGYPTIAN HIEROGLYPH Y004 + * mirrored version of 133DE 133E0 EGYPTIAN HIEROGLYPH Y005 133E1 EGYPTIAN HIEROGLYPH Y006 133E2 EGYPTIAN HIEROGLYPH Y007 133E3 EGYPTIAN HIEROGLYPH Y008 @ Z. Strokes, signs derived from Hieratic, geometrical figures 133E4 EGYPTIAN HIEROGLYPH Z001 - x (egyptian hieroglyph z015 - 133FA) + * semogram index + * classifier 'single' + * not to be confuse with 133FA 133E5 EGYPTIAN HIEROGLYPH Z002 - * plurality - x (egyptian hieroglyph z015b - 133FC) + * classifier 'plural' + * not to be confused with 133FC 133E6 EGYPTIAN HIEROGLYPH Z002A + * stylistic variant of 133E5 133E7 EGYPTIAN HIEROGLYPH Z002B + * classifier 'plural' + * not to be confused with 13213 133E8 EGYPTIAN HIEROGLYPH Z002C + * variant of 133E6 133E9 EGYPTIAN HIEROGLYPH Z002D + * variant of 133E8 133EA EGYPTIAN HIEROGLYPH Z003 + * variant of 133E5 133EB EGYPTIAN HIEROGLYPH Z003A + * variant of 133EA 133EC EGYPTIAN HIEROGLYPH Z003B - * 3 + * variant of 133E7 133ED EGYPTIAN HIEROGLYPH Z004 - * duality + * classifier 'dual' * transliterated as y x (egyptian hieroglyph m017a - 131CC) 133EE EGYPTIAN HIEROGLYPH Z004A - * duality - x (egyptian hieroglyph z015a - 133FB) + * variant of 133ED + * classifier 'dual' + * transliterated as y + * not to be confused with 133FB 133EF EGYPTIAN HIEROGLYPH Z005 133F0 EGYPTIAN HIEROGLYPH Z005A + * variant of 133EF 133F1 EGYPTIAN HIEROGLYPH Z006 133F2 EGYPTIAN HIEROGLYPH Z007 + * phonogram 'w' + * not to be confused with 13362 133F3 EGYPTIAN HIEROGLYPH Z008 + * oval + * not to be confused with 13200, 132F0, or 133D4 133F4 EGYPTIAN HIEROGLYPH Z009 133F5 EGYPTIAN HIEROGLYPH Z010 + * older variant of 133F4 133F6 EGYPTIAN HIEROGLYPH Z011 133F7 EGYPTIAN HIEROGLYPH Z012 + * hieratic 133F8 EGYPTIAN HIEROGLYPH Z013 + * circle, unmarked round sign + * not to be confused with 13082 or 131F3 133F9 EGYPTIAN HIEROGLYPH Z014 + * hieratic 133FA EGYPTIAN HIEROGLYPH Z015 * 1 - x (egyptian hieroglyph z001 - 133E4) + * not to be confused with 133E4 133FB EGYPTIAN HIEROGLYPH Z015A * 2 - x (egyptian hieroglyph z004a - 133EE) + * not to be confused with 133EE 133FC EGYPTIAN HIEROGLYPH Z015B * 3 - x (egyptian hieroglyph z002 - 133E5) + * not to be confused with 133E5 x (egyptian hieroglyph z003 - 133EA) 133FD EGYPTIAN HIEROGLYPH Z015C * 4 @@ -37231,31 +38238,41 @@ FFFF 13412 EGYPTIAN HIEROGLYPH AA006 13413 EGYPTIAN HIEROGLYPH AA007 13414 EGYPTIAN HIEROGLYPH AA007A + * mirrored version of 13413 13415 EGYPTIAN HIEROGLYPH AA007B 13416 EGYPTIAN HIEROGLYPH AA008 13417 EGYPTIAN HIEROGLYPH AA009 13418 EGYPTIAN HIEROGLYPH AA010 13419 EGYPTIAN HIEROGLYPH AA011 1341A EGYPTIAN HIEROGLYPH AA012 + * older variant of 13419 1341B EGYPTIAN HIEROGLYPH AA013 1341C EGYPTIAN HIEROGLYPH AA014 + * older variant of 1341B 1341D EGYPTIAN HIEROGLYPH AA015 1341E EGYPTIAN HIEROGLYPH AA016 + * variant of 1341D 1341F EGYPTIAN HIEROGLYPH AA017 13420 EGYPTIAN HIEROGLYPH AA018 + * more recent variant of 1341F 13421 EGYPTIAN HIEROGLYPH AA019 13422 EGYPTIAN HIEROGLYPH AA020 13423 EGYPTIAN HIEROGLYPH AA021 13424 EGYPTIAN HIEROGLYPH AA022 13425 EGYPTIAN HIEROGLYPH AA023 13426 EGYPTIAN HIEROGLYPH AA024 + * older variant of 13425 13427 EGYPTIAN HIEROGLYPH AA025 13428 EGYPTIAN HIEROGLYPH AA026 13429 EGYPTIAN HIEROGLYPH AA027 1342A EGYPTIAN HIEROGLYPH AA028 + * phonogram 'qd' + * not to be confused with 131E9 and 132A7 1342B EGYPTIAN HIEROGLYPH AA029 + * older variant of 1342A 1342C EGYPTIAN HIEROGLYPH AA030 1342D EGYPTIAN HIEROGLYPH AA031 + * older variant of 1342C 1342E EGYPTIAN HIEROGLYPH AA032 @@ 13430 Egyptian Hieroglyph Format Controls 1343F @+ These format controls are used to render Egyptian hieroglyphic quadrats. @@ -38955,6 +39972,99 @@ FFFF @ Punctuation 16A6E MRO DANDA 16A6F MRO DOUBLE DANDA +@@ 16A70 Tangsa 16ACF +@ Vowels +16A70 TANGSA LETTER OZ +16A71 TANGSA LETTER OC +16A72 TANGSA LETTER OQ +16A73 TANGSA LETTER OX +16A74 TANGSA LETTER AZ +16A75 TANGSA LETTER AC +16A76 TANGSA LETTER AQ +16A77 TANGSA LETTER AX +16A78 TANGSA LETTER VZ +16A79 TANGSA LETTER VC +16A7A TANGSA LETTER VQ +16A7B TANGSA LETTER VX +16A7C TANGSA LETTER EZ +16A7D TANGSA LETTER EC +16A7E TANGSA LETTER EQ +16A7F TANGSA LETTER EX +16A80 TANGSA LETTER IZ +16A81 TANGSA LETTER IC +16A82 TANGSA LETTER IQ +16A83 TANGSA LETTER IX +16A84 TANGSA LETTER UZ +16A85 TANGSA LETTER UC +16A86 TANGSA LETTER UQ +16A87 TANGSA LETTER UX +16A88 TANGSA LETTER AWZ +16A89 TANGSA LETTER AWC +16A8A TANGSA LETTER AWQ +16A8B TANGSA LETTER AWX +16A8C TANGSA LETTER UIZ +16A8D TANGSA LETTER UIC +16A8E TANGSA LETTER UIQ +16A8F TANGSA LETTER UIX +16A90 TANGSA LETTER FINAL NG +16A91 TANGSA LETTER LONG UEX +16A92 TANGSA LETTER SHORT UEZ +16A93 TANGSA LETTER SHORT AWX +16A94 TANGSA LETTER UEC +16A95 TANGSA LETTER UEZ +16A96 TANGSA LETTER UEQ +16A97 TANGSA LETTER UEX +16A98 TANGSA LETTER UIUZ +16A99 TANGSA LETTER UIUC +16A9A TANGSA LETTER UIUQ +16A9B TANGSA LETTER UIUX +16A9C TANGSA LETTER MZ +16A9D TANGSA LETTER MC +16A9E TANGSA LETTER MQ +16A9F TANGSA LETTER MX +@ Consonants +16AA0 TANGSA LETTER KA +16AA1 TANGSA LETTER KHA +16AA2 TANGSA LETTER GA +16AA3 TANGSA LETTER NGA +16AA4 TANGSA LETTER SA +16AA5 TANGSA LETTER YA +16AA6 TANGSA LETTER WA +16AA7 TANGSA LETTER PA +16AA8 TANGSA LETTER NYA +16AA9 TANGSA LETTER PHA +16AAA TANGSA LETTER BA +16AAB TANGSA LETTER MA +16AAC TANGSA LETTER NA +16AAD TANGSA LETTER HA +16AAE TANGSA LETTER LA +16AAF TANGSA LETTER HTA +16AB0 TANGSA LETTER TA +16AB1 TANGSA LETTER DA +16AB2 TANGSA LETTER RA +16AB3 TANGSA LETTER NHA +16AB4 TANGSA LETTER SHA +16AB5 TANGSA LETTER CA +16AB6 TANGSA LETTER TSA +16AB7 TANGSA LETTER GHA +16AB8 TANGSA LETTER HTTA +16AB9 TANGSA LETTER THA +16ABA TANGSA LETTER XA +16ABB TANGSA LETTER FA +16ABC TANGSA LETTER DHA +16ABD TANGSA LETTER CHA +16ABE TANGSA LETTER ZA +@ Digits +16AC0 TANGSA DIGIT ZERO +16AC1 TANGSA DIGIT ONE +16AC2 TANGSA DIGIT TWO +16AC3 TANGSA DIGIT THREE +16AC4 TANGSA DIGIT FOUR +16AC5 TANGSA DIGIT FIVE +16AC6 TANGSA DIGIT SIX +16AC7 TANGSA DIGIT SEVEN +16AC8 TANGSA DIGIT EIGHT +16AC9 TANGSA DIGIT NINE @@ 16AD0 Bassa Vah 16AFF @ Consonant letters 16AD0 BASSA VAH LETTER ENNI @@ -40862,6 +41972,23 @@ FFFF 18CD4 KHITAN SMALL SCRIPT CHARACTER-18CD4 18CD5 KHITAN SMALL SCRIPT CHARACTER-18CD5 @@ 18D00 Tangut Supplement 18D08 +@@ 1AFF0 Kana Extended-B 1AFFF +@+ This block contains tone marks occasionally used in furigana extensions to annotate Minnan Chinese. +@ Tone marks +1AFF0 KATAKANA LETTER MINNAN TONE-2 +1AFF1 KATAKANA LETTER MINNAN TONE-3 +1AFF2 KATAKANA LETTER MINNAN TONE-4 +1AFF3 KATAKANA LETTER MINNAN TONE-5 +1AFF5 KATAKANA LETTER MINNAN TONE-7 +1AFF6 KATAKANA LETTER MINNAN TONE-8 +@ Nasalized tone marks +1AFF7 KATAKANA LETTER MINNAN NASALIZED TONE-1 +1AFF8 KATAKANA LETTER MINNAN NASALIZED TONE-2 +1AFF9 KATAKANA LETTER MINNAN NASALIZED TONE-3 +1AFFA KATAKANA LETTER MINNAN NASALIZED TONE-4 +1AFFB KATAKANA LETTER MINNAN NASALIZED TONE-5 +1AFFD KATAKANA LETTER MINNAN NASALIZED TONE-7 +1AFFE KATAKANA LETTER MINNAN NASALIZED TONE-8 @@ 1B000 Kana Supplement 1B0FF @ Historic Katakana 1B000 KATAKANA LETTER ARCHAIC E @@ -41442,6 +42569,13 @@ FFFF * derived from 65E0 1B11E HENTAIGANA LETTER N-MU-MO-2 * derived from 65E0 +@ Historic Hiragana +1B11F HIRAGANA LETTER ARCHAIC WU + * derived from 6C59 +@ Historic Katakana +1B120 KATAKANA LETTER ARCHAIC YI +1B121 KATAKANA LETTER ARCHAIC YE +1B122 KATAKANA LETTER ARCHAIC WU @@ 1B130 Small Kana Extension 1B16F @ Historic small hiragana letters 1B150 HIRAGANA LETTER SMALL WI @@ -42357,6 +43491,210 @@ FFFF = Sloan contracted ending oo/o + ZWSP 1BCA3 SHORTHAND FORMAT UP STEP = Sloan contracted ending uh/au/aui + ZWSP +@@ 1CF00 Znamenny Musical Notation 1CFCF +@ Combining red marks +1CF00 ZNAMENNY COMBINING MARK GORAZDO NIZKO S KRYZHEM ON LEFT +1CF01 ZNAMENNY COMBINING MARK NIZKO S KRYZHEM ON LEFT +1CF02 ZNAMENNY COMBINING MARK TSATA ON LEFT +1CF03 ZNAMENNY COMBINING MARK GORAZDO NIZKO ON LEFT +1CF04 ZNAMENNY COMBINING MARK NIZKO ON LEFT +1CF05 ZNAMENNY COMBINING MARK SREDNE ON LEFT +1CF06 ZNAMENNY COMBINING MARK MALO POVYSHE ON LEFT +1CF07 ZNAMENNY COMBINING MARK POVYSHE ON LEFT +1CF08 ZNAMENNY COMBINING MARK VYSOKO ON LEFT +1CF09 ZNAMENNY COMBINING MARK MALO POVYSHE S KHOKHLOM ON LEFT +1CF0A ZNAMENNY COMBINING MARK POVYSHE S KHOKHLOM ON LEFT +1CF0B ZNAMENNY COMBINING MARK VYSOKO S KHOKHLOM ON LEFT +1CF0C ZNAMENNY COMBINING MARK GORAZDO NIZKO S KRYZHEM ON RIGHT +1CF0D ZNAMENNY COMBINING MARK NIZKO S KRYZHEM ON RIGHT +1CF0E ZNAMENNY COMBINING MARK TSATA ON RIGHT +1CF0F ZNAMENNY COMBINING MARK GORAZDO NIZKO ON RIGHT +1CF10 ZNAMENNY COMBINING MARK NIZKO ON RIGHT +1CF11 ZNAMENNY COMBINING MARK SREDNE ON RIGHT +1CF12 ZNAMENNY COMBINING MARK MALO POVYSHE ON RIGHT +1CF13 ZNAMENNY COMBINING MARK POVYSHE ON RIGHT +1CF14 ZNAMENNY COMBINING MARK VYSOKO ON RIGHT +1CF15 ZNAMENNY COMBINING MARK MALO POVYSHE S KHOKHLOM ON RIGHT +1CF16 ZNAMENNY COMBINING MARK POVYSHE S KHOKHLOM ON RIGHT +1CF17 ZNAMENNY COMBINING MARK VYSOKO S KHOKHLOM ON RIGHT +1CF18 ZNAMENNY COMBINING MARK TSATA S KRYZHEM +1CF19 ZNAMENNY COMBINING MARK MALO POVYSHE S KRYZHEM +1CF1A ZNAMENNY COMBINING MARK STRANNO MALO POVYSHE +1CF1B ZNAMENNY COMBINING MARK POVYSHE S KRYZHEM +1CF1C ZNAMENNY COMBINING MARK POVYSHE STRANNO +1CF1D ZNAMENNY COMBINING MARK VYSOKO S KRYZHEM +1CF1E ZNAMENNY COMBINING MARK MALO POVYSHE STRANNO +1CF1F ZNAMENNY COMBINING MARK GORAZDO VYSOKO +1CF20 ZNAMENNY COMBINING MARK ZELO +1CF21 ZNAMENNY COMBINING MARK ON +1CF22 ZNAMENNY COMBINING MARK RAVNO +1CF23 ZNAMENNY COMBINING MARK TIKHAYA +1CF24 ZNAMENNY COMBINING MARK BORZAYA +1CF25 ZNAMENNY COMBINING MARK UDARKA +1CF26 ZNAMENNY COMBINING MARK PODVERTKA +1CF27 ZNAMENNY COMBINING MARK LOMKA +1CF28 ZNAMENNY COMBINING MARK KUPNAYA +1CF29 ZNAMENNY COMBINING MARK KACHKA +1CF2A ZNAMENNY COMBINING MARK ZEVOK +1CF2B ZNAMENNY COMBINING MARK SKOBA +1CF2C ZNAMENNY COMBINING MARK RAZSEKA +1CF2D ZNAMENNY COMBINING MARK KRYZH ON LEFT +@ Combining black marks +1CF30 ZNAMENNY COMBINING TONAL RANGE MARK MRACHNO +1CF31 ZNAMENNY COMBINING TONAL RANGE MARK SVETLO +1CF32 ZNAMENNY COMBINING TONAL RANGE MARK TRESVETLO +1CF33 ZNAMENNY COMBINING MARK ZADERZHKA + = ottyazhka +1CF34 ZNAMENNY COMBINING MARK DEMESTVENNY ZADERZHKA +1CF35 ZNAMENNY COMBINING MARK OTSECHKA +1CF36 ZNAMENNY COMBINING MARK PODCHASHIE +1CF37 ZNAMENNY COMBINING MARK PODCHASHIE WITH VERTICAL STROKE +1CF38 ZNAMENNY COMBINING MARK CHASHKA +1CF39 ZNAMENNY COMBINING MARK CHASHKA POLNAYA +1CF3A ZNAMENNY COMBINING MARK OBLACHKO +1CF3B ZNAMENNY COMBINING MARK SOROCHYA NOZHKA + = sokolik +1CF3C ZNAMENNY COMBINING MARK TOCHKA +1CF3D ZNAMENNY COMBINING MARK DVOETOCHIE +1CF3E ZNAMENNY COMBINING ATTACHING VERTICAL OMET +1CF3F ZNAMENNY COMBINING MARK CURVED OMET +1CF40 ZNAMENNY COMBINING MARK KRYZH +1CF41 ZNAMENNY COMBINING LOWER TONAL RANGE INDICATOR +@ Modifying marks for priznaki +1CF42 ZNAMENNY PRIZNAK MODIFIER LEVEL-2 +1CF43 ZNAMENNY PRIZNAK MODIFIER LEVEL-3 +1CF44 ZNAMENNY PRIZNAK MODIFIER DIRECTION FLIP +1CF45 ZNAMENNY PRIZNAK MODIFIER KRYZH +1CF46 ZNAMENNY PRIZNAK MODIFIER ROG +@ Znamenny neumes +1CF50 ZNAMENNY NEUME KRYUK +1CF51 ZNAMENNY NEUME KRYUK TIKHY +1CF52 ZNAMENNY NEUME PARAKLIT +1CF53 ZNAMENNY NEUME DVA V CHELNU +1CF54 ZNAMENNY NEUME KLYUCH + = kryuk klyuchevoy +1CF55 ZNAMENNY NEUME ZANOZHEK +1CF56 ZNAMENNY NEUME STOPITSA +1CF57 ZNAMENNY NEUME STOPITSA S OCHKOM +1CF58 ZNAMENNY NEUME PEREVODKA +1CF59 ZNAMENNY NEUME PEREVODKA NEPOSTOYANNAYA +1CF5A ZNAMENNY NEUME STOPITSA WITH SOROCHYA NOZHKA + * not a decomposable character +1CF5B ZNAMENNY NEUME CHELYUSTKA +1CF5C ZNAMENNY NEUME PALKA +1CF5D ZNAMENNY NEUME ZAPYATAYA +1CF5E ZNAMENNY NEUME GOLUBCHIK BORZY +1CF5F ZNAMENNY NEUME GOLUBCHIK TIKHY +1CF60 ZNAMENNY NEUME GOLUBCHIK MRACHNY +1CF61 ZNAMENNY NEUME GOLUBCHIK SVETLY +1CF62 ZNAMENNY NEUME GOLUBCHIK TRESVETLY + = golubchik nepostoyanny +1CF63 ZNAMENNY NEUME VRAKHIYA PROSTAYA +1CF64 ZNAMENNY NEUME VRAKHIYA MRACHNAYA +1CF65 ZNAMENNY NEUME VRAKHIYA SVETLAYA +1CF66 ZNAMENNY NEUME VRAKHIYA TRESVETLAYA + = vrakhia nepostoyannaya +1CF67 ZNAMENNY NEUME VRAKHIYA KLYUCHEVAYA PROSTAYA +1CF68 ZNAMENNY NEUME VRAKHIYA KLYUCHEVAYA MRACHNAYA +1CF69 ZNAMENNY NEUME VRAKHIYA KLYUCHEVAYA SVETLAYA +1CF6A ZNAMENNY NEUME VRAKHIYA KLYUCHEVAYA TRESVETLAYA + = vrakhia klyuchevaya nepostoyannaya +1CF6B ZNAMENNY NEUME DOUBLE ZAPYATAYA +1CF6C ZNAMENNY NEUME REVERSED CHELYUSTKA +1CF6D ZNAMENNY NEUME DERBITSA +1CF6E ZNAMENNY NEUME KHAMILO +1CF6F ZNAMENNY NEUME CHASHKA +1CF70 ZNAMENNY NEUME PODCHASHIE +1CF71 ZNAMENNY NEUME SKAMEYTSA MRACHNAYA +1CF72 ZNAMENNY NEUME SKAMEYTSA SVETLAYA +1CF73 ZNAMENNY NEUME SKAMEYTSA TRESVETLAYA +1CF74 ZNAMENNY NEUME SKAMEYTSA TIKHAYA +1CF75 ZNAMENNY NEUME DEMESTVENNY KLYUCH + = skameytsa klyuchevaya +1CF76 ZNAMENNY NEUME SKAMEYTSA KLYUCHEVAYA SVETLAYA +1CF77 ZNAMENNY NEUME SKAMEYTSA KLYUCHENEPOSTOYANNAYA +1CF78 ZNAMENNY NEUME SKAMEYTSA KLYUCHEVAYA TIKHAYA +1CF79 ZNAMENNY NEUME SKAMEYTSA DVOECHELNAYA PROSTAYA +1CF7A ZNAMENNY NEUME SKAMEYTSA DVOECHELNAYA SVETLAYA +1CF7B ZNAMENNY NEUME SKAMEYTSA DVOECHELNAYA NEPOSTOYANNAYA +1CF7C ZNAMENNY NEUME SKAMEYTSA DVOECHELNAYA KLYUCHEVAYA +1CF7D ZNAMENNY NEUME SLOZHITIE +1CF7E ZNAMENNY NEUME SLOZHITIE S ZAPYATOY +1CF7F ZNAMENNY NEUME SLOZHITIE ZAKRYTOE +1CF80 ZNAMENNY NEUME SLOZHITIE S KRYZHEM +1CF81 ZNAMENNY NEUME KRYZH +1CF82 ZNAMENNY NEUME ROG +1CF83 ZNAMENNY NEUME FITA +1CF84 ZNAMENNY NEUME KOBYLA +1CF85 ZNAMENNY NEUME ZMEYTSA + = litso +1CF86 ZNAMENNY NEUME STATYA +1CF87 ZNAMENNY NEUME STATYA S ZAPYATOY +1CF88 ZNAMENNY NEUME STATYA S KRYZHEM +1CF89 ZNAMENNY NEUME STATYA S ZAPYATOY I KRYZHEM +1CF8A ZNAMENNY NEUME STATYA S KRYZHEM I ZAPYATOY +1CF8B ZNAMENNY NEUME STATYA ZAKRYTAYA +1CF8C ZNAMENNY NEUME STATYA ZAKRYTAYA S ZAPYATOY +1CF8D ZNAMENNY NEUME STATYA S ROGOM +1CF8E ZNAMENNY NEUME STATYA S DVUMYA ZAPYATYMI +1CF8F ZNAMENNY NEUME STATYA S ZAPYATOY I PODCHASHIEM +1CF90 ZNAMENNY NEUME POLKULIZMY + * not a decomposable character +1CF91 ZNAMENNY NEUME STATYA NEPOSTOYANNAYA +1CF92 ZNAMENNY NEUME STRELA PROSTAYA +1CF93 ZNAMENNY NEUME STRELA MRACHNOTIKHAYA +1CF94 ZNAMENNY NEUME STRELA KRYZHEVAYA + = strela polukryzhevaya +1CF95 ZNAMENNY NEUME STRELA POLUPOVODNAYA +1CF96 ZNAMENNY NEUME STRELA POVODNAYA +1CF97 ZNAMENNY NEUME STRELA NEPOSTOYANNAYA +1CF98 ZNAMENNY NEUME STRELA KLYUCHEPOVODNAYA +1CF99 ZNAMENNY NEUME STRELA KLYUCHENEPOSTOYANNAYA +1CF9A ZNAMENNY NEUME STRELA TIKHAYA PUTNAYA +1CF9B ZNAMENNY NEUME STRELA DVOECHELNAYA +1CF9C ZNAMENNY NEUME STRELA DVOECHELNOKRYZHEVAYA +1CF9D ZNAMENNY NEUME STRELA DVOECHELNOPOVODNAYA +1CF9E ZNAMENNY NEUME STRELA DVOECHELNAYA KLYUCHEVAYA +1CF9F ZNAMENNY NEUME STRELA DVOECHELNOPOVODNAYA KLYUCHEVAYA +1CFA0 ZNAMENNY NEUME STRELA GROMNAYA WITH SINGLE ZAPYATAYA +1CFA1 ZNAMENNY NEUME STRELA GROMOPOVODNAYA WITH SINGLE ZAPYATAYA +1CFA2 ZNAMENNY NEUME STRELA GROMNAYA +1CFA3 ZNAMENNY NEUME STRELA GROMOPOVODNAYA +1CFA4 ZNAMENNY NEUME STRELA GROMOPOVODNAYA WITH DOUBLE ZAPYATAYA +1CFA5 ZNAMENNY NEUME STRELA GROMOKRYZHEVAYA +1CFA6 ZNAMENNY NEUME STRELA GROMOKRYZHEVAYA POVODNAYA + = strela gromomrachnaya s kryzhem +1CFA7 ZNAMENNY NEUME MECHIK +1CFA8 ZNAMENNY NEUME MECHIK POVODNY +1CFA9 ZNAMENNY NEUME MECHIK KLYUCHEVOY +1CFAA ZNAMENNY NEUME MECHIK KLYUCHEPOVODNY +1CFAB ZNAMENNY NEUME MECHIK KLYUCHENEPOSTOYANNY +1CFAC ZNAMENNY NEUME STRELA TRYASOGLASNAYA +1CFAD ZNAMENNY NEUME STRELA TRYASOPOVODNAYA +1CFAE ZNAMENNY NEUME STRELA TRYASOSTRELNAYA +1CFAF ZNAMENNY NEUME OSOKA +1CFB0 ZNAMENNY NEUME OSOKA SVETLAYA +1CFB1 ZNAMENNY NEUME OSOKA TRESVETLAYA + = osoka nepostoyannaya +1CFB2 ZNAMENNY NEUME OSOKA KRYUKOVAYA SVETLAYA +1CFB3 ZNAMENNY NEUME OSOKA KLYUCHEVAYA SVETLAYA +1CFB4 ZNAMENNY NEUME OSOKA KLYUCHEVAYA NEPOSTOYANNAYA +1CFB5 ZNAMENNY NEUME STRELA KRYUKOVAYA +1CFB6 ZNAMENNY NEUME STRELA KRYUKOVAYA POVODNAYA +1CFB7 ZNAMENNY NEUME STRELA KRYUKOVAYA GROMNAYA WITH SINGLE ZAPYATAYA +1CFB8 ZNAMENNY NEUME STRELA KRYUKOVAYA GROMOPOVODNAYA WITH SINGLE ZAPYATAYA +1CFB9 ZNAMENNY NEUME STRELA KRYUKOVAYA GROMNAYA +1CFBA ZNAMENNY NEUME STRELA KRYUKOVAYA GROMOPOVODNAYA +1CFBB ZNAMENNY NEUME STRELA KRYUKOVAYA GROMOPOVODNAYA WITH DOUBLE ZAPYATAYA +1CFBC ZNAMENNY NEUME STRELA KRYUKOVAYA GROMOKRYZHEVAYA +1CFBD ZNAMENNY NEUME STRELA KRYUKOVAYA GROMOKRYZHEVAYA POVODNAYA + = strela kryukovaya gromomrachnaya s kryzhem +1CFBE ZNAMENNY NEUME STRELA KRYUKOVAYA TRYASKA +1CFBF ZNAMENNY NEUME KUFISMA +1CFC0 ZNAMENNY NEUME OBLAKO +1CFC1 ZNAMENNY NEUME DUDA +1CFC2 ZNAMENNY NEUME NEMKA +1CFC3 ZNAMENNY NEUME PAUK @@ 1D000 Byzantine Musical Symbols 1D0FF @@+ @ Prosodies (Prosodics) @@ -42956,6 +44294,11 @@ FFFF 1D1E7 MUSICAL SYMBOL KIEVAN EIGHTH NOTE STEM UP @ Accidental 1D1E8 MUSICAL SYMBOL KIEVAN FLAT SIGN +@ Iranian notation +@+ The following range is specific to Iranian classical music. +@ Accidentals for quarter tones +1D1E9 MUSICAL SYMBOL SORI +1D1EA MUSICAL SYMBOL KORON @@ 1D200 Ancient Greek Musical Notation 1D24F @ Ancient Greek vocalic notation @+ In a few instances vocalic and instrumental symbols have been unified with each other. In other instances they have been unified with regular Greek letters. @@ -43601,57 +44944,93 @@ FFFF @ Script symbols @+ Script symbols already encoded in the Letterlike Symbols block are omitted here to avoid duplicate encoding. Fonts that use a less elaborate style are also acceptable for many uses, as long as they can be distinguished from serifed and italic styles. 1D49C MATHEMATICAL SCRIPT CAPITAL A + ~ 1D49C FE00 chancery style + ~ 1D49C FE01 roundhand style # 0041 latin capital letter a 1D49D x (script capital b - 212C) 1D49E MATHEMATICAL SCRIPT CAPITAL C + ~ 1D49E FE00 chancery style + ~ 1D49E FE01 roundhand style # 0043 latin capital letter c 1D49F MATHEMATICAL SCRIPT CAPITAL D + ~ 1D49F FE00 chancery style + ~ 1D49F FE01 roundhand style # 0044 latin capital letter d 1D4A0 x (script capital e - 2130) 1D4A1 x (script capital f - 2131) 1D4A2 MATHEMATICAL SCRIPT CAPITAL G + ~ 1D4A2 FE00 chancery style + ~ 1D4A2 FE01 roundhand style # 0047 latin capital letter g 1D4A3 x (script capital h - 210B) 1D4A4 x (script capital i - 2110) 1D4A5 MATHEMATICAL SCRIPT CAPITAL J + ~ 1D4A5 FE00 chancery style + ~ 1D4A5 FE01 roundhand style # 004A latin capital letter j 1D4A6 MATHEMATICAL SCRIPT CAPITAL K + ~ 1D4A6 FE00 chancery style + ~ 1D4A6 FE01 roundhand style # 004B latin capital letter k 1D4A7 x (script capital l - 2112) 1D4A8 x (script capital m - 2133) 1D4A9 MATHEMATICAL SCRIPT CAPITAL N + ~ 1D4A9 FE00 chancery style + ~ 1D4A9 FE01 roundhand style # 004E latin capital letter n 1D4AA MATHEMATICAL SCRIPT CAPITAL O + ~ 1D4AA FE00 chancery style + ~ 1D4AA FE01 roundhand style # 004F latin capital letter o 1D4AB MATHEMATICAL SCRIPT CAPITAL P = power set + ~ 1D4AB FE00 chancery style + ~ 1D4AB FE01 roundhand style # 0050 latin capital letter p 1D4AC MATHEMATICAL SCRIPT CAPITAL Q + ~ 1D4AC FE00 chancery style + ~ 1D4AC FE01 roundhand style # 0051 latin capital letter q 1D4AD x (script capital r - 211B) 1D4AE MATHEMATICAL SCRIPT CAPITAL S + ~ 1D4AE FE00 chancery style + ~ 1D4AE FE01 roundhand style # 0053 latin capital letter s 1D4AF MATHEMATICAL SCRIPT CAPITAL T + ~ 1D4AF FE00 chancery style + ~ 1D4AF FE01 roundhand style # 0054 latin capital letter t 1D4B0 MATHEMATICAL SCRIPT CAPITAL U + ~ 1D4B0 FE00 chancery style + ~ 1D4B0 FE01 roundhand style # 0055 latin capital letter u 1D4B1 MATHEMATICAL SCRIPT CAPITAL V + ~ 1D4B1 FE00 chancery style + ~ 1D4B1 FE01 roundhand style # 0056 latin capital letter v 1D4B2 MATHEMATICAL SCRIPT CAPITAL W + ~ 1D4B2 FE00 chancery style + ~ 1D4B2 FE01 roundhand style # 0057 latin capital letter w 1D4B3 MATHEMATICAL SCRIPT CAPITAL X + ~ 1D4B3 FE00 chancery style + ~ 1D4B3 FE01 roundhand style # 0058 latin capital letter x 1D4B4 MATHEMATICAL SCRIPT CAPITAL Y + ~ 1D4B4 FE00 chancery style + ~ 1D4B4 FE01 roundhand style # 0059 latin capital letter y 1D4B5 MATHEMATICAL SCRIPT CAPITAL Z + ~ 1D4B5 FE00 chancery style + ~ 1D4B5 FE01 roundhand style # 005A latin capital letter z 1D4B6 MATHEMATICAL SCRIPT SMALL A # 0061 latin small letter a @@ -45368,6 +46747,7 @@ FFFF # 0038 digit eight 1D7FF MATHEMATICAL MONOSPACE DIGIT NINE # 0039 digit nine +@~ Standardized Variation Sequences @@ 1D800 Sutton SignWriting 1DAAF @ Hand shapes with index finger 1D800 SIGNWRITING HAND-FIST INDEX @@ -46063,6 +47443,45 @@ FFFF 1DAAD SIGNWRITING ROTATION MODIFIER-14 1DAAE SIGNWRITING ROTATION MODIFIER-15 1DAAF SIGNWRITING ROTATION MODIFIER-16 +@@ 1DF00 Latin Extended-G 1DFFF +@ Extended IPA for disordered speech +1DF00 LATIN SMALL LETTER FENG DIGRAPH WITH TRILL +1DF01 LATIN SMALL LETTER REVERSED SCRIPT G +1DF02 LATIN LETTER SMALL CAPITAL TURNED G +1DF03 LATIN SMALL LETTER REVERSED K +1DF04 LATIN LETTER SMALL CAPITAL L WITH BELT +1DF05 LATIN SMALL LETTER LEZH WITH RETROFLEX HOOK +1DF06 LATIN SMALL LETTER TURNED Y WITH BELT +1DF07 LATIN SMALL LETTER REVERSED ENG +@ IPA extensions +1DF08 LATIN SMALL LETTER TURNED R WITH LONG LEG AND RETROFLEX HOOK +1DF09 LATIN SMALL LETTER T WITH HOOK AND RETROFLEX HOOK +1DF0A LATIN LETTER RETROFLEX CLICK WITH RETROFLEX HOOK +@ Clicks +1DF0B LATIN SMALL LETTER ESH WITH DOUBLE BAR +1DF0C LATIN SMALL LETTER ESH WITH DOUBLE BAR AND CURL +1DF0D LATIN SMALL LETTER TURNED T WITH CURL +1DF0E LATIN LETTER INVERTED GLOTTAL STOP WITH CURL +1DF0F LATIN LETTER STRETCHED C WITH CURL +1DF10 LATIN LETTER SMALL CAPITAL TURNED K +@ Lateral +1DF11 LATIN SMALL LETTER L WITH FISHHOOK +@ Letters with palatal hooks +1DF12 LATIN SMALL LETTER DEZH DIGRAPH WITH PALATAL HOOK +1DF13 LATIN SMALL LETTER L WITH BELT AND PALATAL HOOK +1DF14 LATIN SMALL LETTER ENG WITH PALATAL HOOK +1DF15 LATIN SMALL LETTER TURNED R WITH PALATAL HOOK +1DF16 LATIN SMALL LETTER R WITH FISHHOOK AND PALATAL HOOK +1DF17 LATIN SMALL LETTER TESH DIGRAPH WITH PALATAL HOOK +1DF18 LATIN SMALL LETTER EZH WITH PALATAL HOOK +@ Letters with retroflex hooks +1DF19 LATIN SMALL LETTER DEZH DIGRAPH WITH RETROFLEX HOOK +1DF1A LATIN SMALL LETTER I WITH STROKE AND RETROFLEX HOOK +1DF1B LATIN SMALL LETTER O WITH RETROFLEX HOOK +1DF1C LATIN SMALL LETTER TESH DIGRAPH WITH RETROFLEX HOOK +1DF1D LATIN SMALL LETTER C WITH RETROFLEX HOOK +@ IPA extension +1DF1E LATIN SMALL LETTER S WITH CURL @@ 1E000 Glagolitic Supplement 1E02F @ Combining letters 1E000 COMBINING GLAGOLITIC LETTER AZU @@ -46220,6 +47639,41 @@ FFFF 1E14F NYIAKENG PUACHUE HMONG CIRCLED CA * used to indicate ownership x (nyiakeng puachue hmong letter ca - 1E108) +@@ 1E290 Toto 1E2BF +@ Basic consonants +1E290 TOTO LETTER PA +1E291 TOTO LETTER BA +1E292 TOTO LETTER TA +1E293 TOTO LETTER DA +1E294 TOTO LETTER KA +1E295 TOTO LETTER GA +1E296 TOTO LETTER MA +1E297 TOTO LETTER NA +1E298 TOTO LETTER NGA +1E299 TOTO LETTER SA +1E29A TOTO LETTER CHA +1E29B TOTO LETTER YA +1E29C TOTO LETTER WA +1E29D TOTO LETTER JA +1E29E TOTO LETTER HA +1E29F TOTO LETTER RA +1E2A0 TOTO LETTER LA +@ Basic vowels +1E2A1 TOTO LETTER I +1E2A2 TOTO LETTER BREATHY I +1E2A3 TOTO LETTER IU +1E2A4 TOTO LETTER BREATHY IU +1E2A5 TOTO LETTER U +1E2A6 TOTO LETTER E +1E2A7 TOTO LETTER BREATHY E +1E2A8 TOTO LETTER EO +1E2A9 TOTO LETTER BREATHY EO +1E2AA TOTO LETTER O +1E2AB TOTO LETTER AE +1E2AC TOTO LETTER BREATHY AE +1E2AD TOTO LETTER A +@ Sign +1E2AE TOTO SIGN RISING TONE @@ 1E2C0 Wancho 1E2FF @ Letters 1E2C0 WANCHO LETTER AA @@ -46286,6 +47740,64 @@ FFFF 1E2FF WANCHO NGUN SIGN = rupee x (indian rupee sign - 20B9) +@@ 1E7E0 Ethiopic Extended-B 1E7FF +@ Syllables for Gurage +1E7E0 ETHIOPIC SYLLABLE HHYA + x (ethiopic syllable xya - 2DD0) +1E7E1 ETHIOPIC SYLLABLE HHYU + x (ethiopic syllable xyu - 2DD1) +1E7E2 ETHIOPIC SYLLABLE HHYI + x (ethiopic syllable xyi - 2DD2) +1E7E3 ETHIOPIC SYLLABLE HHYAA + x (ethiopic syllable xyaa - 2DD3) +1E7E4 ETHIOPIC SYLLABLE HHYEE + x (ethiopic syllable xyee - 2DD4) +1E7E5 ETHIOPIC SYLLABLE HHYE + x (ethiopic syllable xye - 2DD5) +1E7E6 ETHIOPIC SYLLABLE HHYO + x (ethiopic syllable xyo - 2DD6) +1E7E8 ETHIOPIC SYLLABLE GURAGE HHWA + x (ethiopic syllable kxwa - 12C0) +1E7E9 ETHIOPIC SYLLABLE HHWI + x (ethiopic syllable kxwi - 12C2) +1E7EA ETHIOPIC SYLLABLE HHWEE + x (ethiopic syllable kxwee - 12C4) +1E7EB ETHIOPIC SYLLABLE HHWE + x (ethiopic syllable kxwe - 12C5) +1E7ED ETHIOPIC SYLLABLE GURAGE MWI + x (ethiopic syllable mwi - 1381) +1E7EE ETHIOPIC SYLLABLE GURAGE MWEE + x (ethiopic syllable mwee - 1382) +1E7F0 ETHIOPIC SYLLABLE GURAGE QWI + x (ethiopic syllable qwi - 124A) +1E7F1 ETHIOPIC SYLLABLE GURAGE QWEE + x (ethiopic syllable qwee - 124C) +1E7F2 ETHIOPIC SYLLABLE GURAGE QWE + x (ethiopic syllable qwe - 124D) +1E7F3 ETHIOPIC SYLLABLE GURAGE BWI + x (ethiopic syllable bwi - 1385) +1E7F4 ETHIOPIC SYLLABLE GURAGE BWEE + x (ethiopic syllable bwee - 1386) +1E7F5 ETHIOPIC SYLLABLE GURAGE KWI + x (ethiopic syllable kwi - 12B2) +1E7F6 ETHIOPIC SYLLABLE GURAGE KWEE + x (ethiopic syllable kwee - 12B4) +1E7F7 ETHIOPIC SYLLABLE GURAGE KWE + x (ethiopic syllable kwe - 12B5) +1E7F8 ETHIOPIC SYLLABLE GURAGE GWI + x (ethiopic syllable gwi - 1312) +1E7F9 ETHIOPIC SYLLABLE GURAGE GWEE + x (ethiopic syllable gwee - 1314) +1E7FA ETHIOPIC SYLLABLE GURAGE GWE + x (ethiopic syllable gwe - 1315) +1E7FB ETHIOPIC SYLLABLE GURAGE FWI + x (ethiopic syllable fwi - 1389) +1E7FC ETHIOPIC SYLLABLE GURAGE FWEE + x (ethiopic syllable fwee - 138A) +1E7FD ETHIOPIC SYLLABLE GURAGE PWI + x (ethiopic syllable pwi - 138D) +1E7FE ETHIOPIC SYLLABLE GURAGE PWEE + x (ethiopic syllable pwee - 138E) @@ 1E800 Mende Kikakui 1E8DF @+ Annotations refer to the syllabaries of Amara Mansaray and David Dalby. @ Syllables in k- @@ -48684,9 +50196,11 @@ FFFF 1F448 WHITE LEFT POINTING BACKHAND INDEX x (white left pointing index - 261C) x (black left pointing backhand index - 1F59C) + x (leftwards hand - 1FAF2) 1F449 WHITE RIGHT POINTING BACKHAND INDEX x (white right pointing index - 261E) x (black right pointing backhand index - 1F59D) + x (rightwards hand - 1FAF1) 1F44A FISTED HAND SIGN = punch x (raised fist - 270A) @@ -48758,6 +50272,7 @@ FFFF @ Fairy tale symbols 1F478 PRINCESS x (prince - 1F934) + x (person with crown - 1FAC5) 1F479 JAPANESE OGRE 1F47A JAPANESE GOBLIN 1F47B GHOST @@ -48839,6 +50354,7 @@ FFFF 1F4A7 DROPLET * represents a drop of sweat or drop of water x (black droplet - 1F322) + x (drop of blood - 1FA78) 1F4A8 DASH SYMBOL = running dash, briffits 1F4A9 PILE OF POO @@ -49018,6 +50534,7 @@ FFFF 1F50A SPEAKER WITH THREE SOUND WAVES = sound 1F50B BATTERY + x (low battery - 1FAAB) 1F50C ELECTRIC PLUG 1F50D LEFT-POINTING MAGNIFYING GLASS = search @@ -49435,6 +50952,7 @@ FFFF = rated for sex = kiss x (kiss mark - 1F48B) + x (biting lip - 1FAE6) 1F5E3 SPEAKING HEAD IN SILHOUETTE = rated for strong language @ Sound symbols @@ -49823,6 +51341,9 @@ FFFF 1F6D6 HUT 1F6D7 ELEVATOR @ Miscellaneous symbols +1F6DD PLAYGROUND SLIDE +1F6DE WHEEL +1F6DF RING BUOY 1F6E0 HAMMER AND WRENCH = tools, repair facility x (hammer and pick - 2692) @@ -50267,6 +51788,14 @@ FFFF 1F7E9 LARGE GREEN SQUARE 1F7EA LARGE PURPLE SQUARE 1F7EB LARGE BROWN SQUARE +@ Miscellaneous symbol +1F7F0 HEAVY EQUALS SIGN + * symbol of equality + x (equals sign - 003D) + x (heavy multiplication x - 2716) + x (heavy plus sign - 2795) + x (geta mark - 3013) + x (roman sextans sign - 10190) @@ 1F800 Supplemental Arrows-C 1F8FF @ Arrows with triangle arrowheads 1F800 LEFTWARDS ARROW WITH SMALL TRIANGLE ARROWHEAD @@ -50490,9 +52019,12 @@ FFFF 1F919 CALL ME HAND 1F91A RAISED BACK OF HAND 1F91B LEFT-FACING FIST + x (leftwards hand - 1FAF2) 1F91C RIGHT-FACING FIST + x (rightwards hand - 1FAF1) 1F91D HANDSHAKE 1F91E HAND WITH INDEX AND MIDDLE FINGERS CROSSED + x (hand with index finger and thumb crossed - 1FAF0) 1F91F I LOVE YOU HAND SIGN * can be abbreviated ILY @ Emoticon faces @@ -50517,6 +52049,7 @@ FFFF 1F92F SHOCKED FACE WITH EXPLODING HEAD @ Portrait and role symbols 1F930 PREGNANT WOMAN + x (pregnant person - 1FAC4) 1F931 BREAST-FEEDING 1F932 PALMS UP TOGETHER * used for prayer in some cultures @@ -50594,6 +52127,7 @@ FFFF = chicken egg 1F95B GLASS OF MILK = milk + x (pouring liquid - 1FAD7) 1F95C PEANUTS 1F95D KIWIFRUIT 1F95E PANCAKES @@ -50635,6 +52169,7 @@ FFFF 1F976 FREEZING FACE 1F977 NINJA 1F978 DISGUISED FACE +1F979 FACE HOLDING BACK TEARS 1F97A FACE WITH PLEADING EYES @ Clothing 1F97B SARI @@ -50737,6 +52272,8 @@ FFFF 1F9C9 MATE DRINK 1F9CA ICE CUBE 1F9CB BUBBLE TEA +@ Fantasy being +1F9CC TROLL @ Portrait and accessibility symbols 1F9CD STANDING PERSON 1F9CE KNEELING PERSON @@ -50981,10 +52518,14 @@ FFFF 1FA72 BRIEFS 1FA73 SHORTS 1FA74 THONG SANDAL + = flip flop @ Medical symbols 1FA78 DROP OF BLOOD + x (droplet - 1F4A7) 1FA79 ADHESIVE BANDAGE 1FA7A STETHOSCOPE +1FA7B X-RAY +1FA7C CRUTCH @ Toys and sport symbols 1FA80 YO-YO 1FA81 KITE @@ -51019,6 +52560,12 @@ FFFF 1FAA6 HEADSTONE 1FAA7 PLACARD 1FAA8 ROCK +1FAA9 MIRROR BALL +1FAAA IDENTIFICATION CARD + = ID +1FAAB LOW BATTERY + x (battery - 1F50B) +1FAAC HAMSA @ Animals and nature 1FAB0 FLY 1FAB1 WORM @@ -51027,11 +52574,20 @@ FFFF 1FAB4 POTTED PLANT 1FAB5 WOOD 1FAB6 FEATHER +1FAB7 LOTUS +1FAB8 CORAL +1FAB9 EMPTY NEST +1FABA NEST WITH EGGS @ Body parts 1FAC0 ANATOMICAL HEART 1FAC1 LUNGS @ People 1FAC2 PEOPLE HUGGING +1FAC3 PREGNANT MAN +1FAC4 PREGNANT PERSON + x (pregnant woman - 1F930) +1FAC5 PERSON WITH CROWN + x (princess - 1F478) @ Food and drink 1FAD0 BLUEBERRIES 1FAD1 BELL PEPPER @@ -51040,6 +52596,30 @@ FFFF 1FAD4 TAMALE 1FAD5 FONDUE 1FAD6 TEAPOT +1FAD7 POURING LIQUID + x (glass of milk - 1F95B) +1FAD8 BEANS +1FAD9 JAR +@ Faces +1FAE0 MELTING FACE +1FAE1 SALUTING FACE +1FAE2 FACE WITH OPEN EYES AND HAND OVER MOUTH +1FAE3 FACE WITH PEEKING EYE +1FAE4 FACE WITH DIAGONAL MOUTH +1FAE5 DOTTED LINE FACE +@ Emotion +1FAE6 BITING LIP + x (lips - 1F5E2) +1FAE7 BUBBLES +@ Hand symbols +1FAF0 HAND WITH INDEX FINGER AND THUMB CROSSED + x (hand with index and middle fingers crossed - 1F91E) +1FAF1 RIGHTWARDS HAND +1FAF2 LEFTWARDS HAND +1FAF3 PALM DOWN HAND +1FAF4 PALM UP HAND +1FAF5 INDEX POINTING AT THE VIEWER +1FAF6 HEART HANDS @@ 1FB00 Symbols for Legacy Computing 1FBFF @ Block mosaic terminal graphic characters @+ The term "sextant" refers to block mosaics divided into six parts. @@ -51355,8 +52935,8 @@ FFFF @+ These codes are intended for process-internal uses. 1FFFE 1FFFF -@@ 20000 CJK Unified Ideographs Extension B 2A6DD -@@ 2A700 CJK Unified Ideographs Extension C 2B734 +@@ 20000 CJK Unified Ideographs Extension B 2A6DF +@@ 2A700 CJK Unified Ideographs Extension C 2B738 @@ 2B740 CJK Unified Ideographs Extension D 2B81D @@ 2B820 CJK Unified Ideographs Extension E 2CEA1 @@ 2CEB0 CJK Unified Ideographs Extension F 2EBE0 @@ -51453,6 +53033,7 @@ FFFF 2F82B CJK COMPATIBILITY IDEOGRAPH-2F82B : 5317 2F82C CJK COMPATIBILITY IDEOGRAPH-2F82C + x 20984 : 5349 2F82D CJK COMPATIBILITY IDEOGRAPH-2F82D : 5351 @@ -51483,6 +53064,7 @@ FFFF 2F83A CJK COMPATIBILITY IDEOGRAPH-2F83A : 53F1 2F83B CJK COMPATIBILITY IDEOGRAPH-2F83B + x 4DB8 : 5406 2F83C CJK COMPATIBILITY IDEOGRAPH-2F83C : 549E @@ -51559,6 +53141,7 @@ FFFF 2F85F CJK COMPATIBILITY IDEOGRAPH-2F85F : 5962 2F860 CJK COMPATIBILITY IDEOGRAPH-2F860 + x 216A7 : 216A8 2F861 CJK COMPATIBILITY IDEOGRAPH-2F861 : 216EA @@ -51599,6 +53182,7 @@ FFFF 2F873 CJK COMPATIBILITY IDEOGRAPH-2F873 : 5C06 2F874 CJK COMPATIBILITY IDEOGRAPH-2F874 + x 22450 : 5F53 2F875 CJK COMPATIBILITY IDEOGRAPH-2F875 : 5C22 @@ -51607,6 +53191,7 @@ FFFF 2F877 CJK COMPATIBILITY IDEOGRAPH-2F877 : 5C60 2F878 CJK COMPATIBILITY IDEOGRAPH-2F878 + x 4DB9 : 5C6E 2F879 CJK COMPATIBILITY IDEOGRAPH-2F879 : 5CC0 @@ -51848,6 +53433,7 @@ FFFF 2F8EF CJK COMPATIBILITY IDEOGRAPH-2F8EF : 6B21 2F8F0 CJK COMPATIBILITY IDEOGRAPH-2F8F0 + x 4DBE : 238A7 2F8F1 CJK COMPATIBILITY IDEOGRAPH-2F8F1 : 6B54 @@ -51874,6 +53460,7 @@ FFFF 2F8FC CJK COMPATIBILITY IDEOGRAPH-2F8FC : 6CBF 2F8FD CJK COMPATIBILITY IDEOGRAPH-2F8FD + x 2DC09 : 6CCD 2F8FE CJK COMPATIBILITY IDEOGRAPH-2F8FE : 6C67 @@ -51890,6 +53477,7 @@ FFFF 2F904 CJK COMPATIBILITY IDEOGRAPH-2F904 : 6D78 2F905 CJK COMPATIBILITY IDEOGRAPH-2F905 + x 23D40 : 6D85 2F906 CJK COMPATIBILITY IDEOGRAPH-2F906 : 23D1E @@ -51908,6 +53496,7 @@ FFFF 2F90D CJK COMPATIBILITY IDEOGRAPH-2F90D : 23ED1 2F90E CJK COMPATIBILITY IDEOGRAPH-2F90E + x 23F1C : 6DF9 2F90F CJK COMPATIBILITY IDEOGRAPH-2F90F : 6F6E @@ -51936,6 +53525,7 @@ FFFF 2F91B CJK COMPATIBILITY IDEOGRAPH-2F91B : 20525 2F91C CJK COMPATIBILITY IDEOGRAPH-2F91C + x 242B3 : 7145 2F91D CJK COMPATIBILITY IDEOGRAPH-2F91D : 24263 @@ -51958,6 +53548,7 @@ FFFF 2F926 CJK COMPATIBILITY IDEOGRAPH-2F926 : 24735 2F927 CJK COMPATIBILITY IDEOGRAPH-2F927 + x 2AEC5 : 24814 2F928 CJK COMPATIBILITY IDEOGRAPH-2F928 : 737A @@ -52014,6 +53605,7 @@ FFFF 2F942 CJK COMPATIBILITY IDEOGRAPH-2F942 : 250F2 2F943 CJK COMPATIBILITY IDEOGRAPH-2F943 + x 2511A : 25119 2F944 CJK COMPATIBILITY IDEOGRAPH-2F944 : 25133 @@ -52030,6 +53622,7 @@ FFFF 2F94A CJK COMPATIBILITY IDEOGRAPH-2F94A : 778B 2F94B CJK COMPATIBILITY IDEOGRAPH-2F94B + x 25271 : 4046 2F94C CJK COMPATIBILITY IDEOGRAPH-2F94C : 4096 diff --git a/gnu/usr.bin/perl/lib/unicore/NormalizationCorrections.txt b/gnu/usr.bin/perl/lib/unicore/NormalizationCorrections.txt index 7144fb8935c..a1a34d6bb6f 100644 --- a/gnu/usr.bin/perl/lib/unicore/NormalizationCorrections.txt +++ b/gnu/usr.bin/perl/lib/unicore/NormalizationCorrections.txt @@ -1,6 +1,6 @@ -# NormalizationCorrections-13.0.0.txt -# Date: 2019-09-09, 19:50:00 GMT [KW, LI] -# © 2019 Unicode®, Inc. +# NormalizationCorrections-14.0.0.txt +# Date: 2021-03-16, 22:07:00 GMT [KW, LI] +# © 2021 Unicode®, Inc. # For terms of use, see http://www.unicode.org/terms_of_use.html # # Unicode Character Database diff --git a/gnu/usr.bin/perl/lib/unicore/PropList.txt b/gnu/usr.bin/perl/lib/unicore/PropList.txt index 7d2f44c56fa..0a5a9346828 100644 --- a/gnu/usr.bin/perl/lib/unicore/PropList.txt +++ b/gnu/usr.bin/perl/lib/unicore/PropList.txt @@ -1,6 +1,6 @@ -# PropList-13.0.0.txt -# Date: 2019-11-27, 03:13:28 GMT -# © 2019 Unicode®, Inc. +# PropList-14.0.0.txt +# Date: 2021-08-12, 23:13:05 GMT +# © 2021 Unicode®, Inc. # Unicode and the Unicode Logo are registered trademarks of Unicode, Inc. in the U.S. and other countries. # For terms of use, see http://www.unicode.org/terms_of_use.html # @@ -54,6 +54,7 @@ 2E1A ; Dash # Pd HYPHEN WITH DIAERESIS 2E3A..2E3B ; Dash # Pd [2] TWO-EM DASH..THREE-EM DASH 2E40 ; Dash # Pd DOUBLE HYPHEN +2E5D ; Dash # Pd OBLIQUE HYPHEN 301C ; Dash # Pd WAVE DASH 3030 ; Dash # Pd WAVY DASH 30A0 ; Dash # Pd KATAKANA-HIRAGANA DOUBLE HYPHEN @@ -63,7 +64,7 @@ FE63 ; Dash # Pd SMALL HYPHEN-MINUS FF0D ; Dash # Pd FULLWIDTH HYPHEN-MINUS 10EAD ; Dash # Pd YEZIDI HYPHENATION MARK -# Total code points: 29 +# Total code points: 30 # ================================================ @@ -126,7 +127,7 @@ FF63 ; Quotation_Mark # Pe HALFWIDTH RIGHT CORNER BRACKET 05C3 ; Terminal_Punctuation # Po HEBREW PUNCTUATION SOF PASUQ 060C ; Terminal_Punctuation # Po ARABIC COMMA 061B ; Terminal_Punctuation # Po ARABIC SEMICOLON -061E..061F ; Terminal_Punctuation # Po [2] ARABIC TRIPLE DOT PUNCTUATION MARK..ARABIC QUESTION MARK +061D..061F ; Terminal_Punctuation # Po [3] ARABIC END OF TEXT MARK..ARABIC QUESTION MARK 06D4 ; Terminal_Punctuation # Po ARABIC FULL STOP 0700..070A ; Terminal_Punctuation # Po [11] SYRIAC END OF PARAGRAPH..SYRIAC CONTRACTION 070C ; Terminal_Punctuation # Po SYRIAC HARKLEAN METOBELUS @@ -150,6 +151,7 @@ FF63 ; Quotation_Mark # Pe HALFWIDTH RIGHT CORNER BRACKET 1AA8..1AAB ; Terminal_Punctuation # Po [4] TAI THAM SIGN KAAN..TAI THAM SIGN SATKAANKUU 1B5A..1B5B ; Terminal_Punctuation # Po [2] BALINESE PANTI..BALINESE PAMADA 1B5D..1B5F ; Terminal_Punctuation # Po [3] BALINESE CARIK PAMUNGKAH..BALINESE CARIK PAREREN +1B7D..1B7E ; Terminal_Punctuation # Po [2] BALINESE PANTI LANTANG..BALINESE PAMADA LANTANG 1C3B..1C3F ; Terminal_Punctuation # Po [5] LEPCHA PUNCTUATION TA-ROL..LEPCHA PUNCTUATION TSHOOK 1C7E..1C7F ; Terminal_Punctuation # Po [2] OL CHIKI PUNCTUATION MUCAAD..OL CHIKI PUNCTUATION DOUBLE MUCAAD 203C..203D ; Terminal_Punctuation # Po [2] DOUBLE EXCLAMATION MARK..INTERROBANG @@ -159,6 +161,7 @@ FF63 ; Quotation_Mark # Pe HALFWIDTH RIGHT CORNER BRACKET 2E41 ; Terminal_Punctuation # Po REVERSED COMMA 2E4C ; Terminal_Punctuation # Po MEDIEVAL COMMA 2E4E..2E4F ; Terminal_Punctuation # Po [2] PUNCTUS ELEVATUS MARK..CORNISH VERSE DIVIDER +2E53..2E54 ; Terminal_Punctuation # Po [2] MEDIEVAL EXCLAMATION MARK..MEDIEVAL QUESTION MARK 3001..3002 ; Terminal_Punctuation # Po [2] IDEOGRAPHIC COMMA..IDEOGRAPHIC FULL STOP A4FE..A4FF ; Terminal_Punctuation # Po [2] LISU PUNCTUATION COMMA..LISU PUNCTUATION FULL STOP A60D..A60F ; Terminal_Punctuation # Po [3] VAI COMMA..VAI QUESTION MARK @@ -189,6 +192,7 @@ FF64 ; Terminal_Punctuation # Po HALFWIDTH IDEOGRAPHIC COMMA 10B3A..10B3F ; Terminal_Punctuation # Po [6] TINY TWO DOTS OVER ONE DOT PUNCTUATION..LARGE ONE RING OVER TWO RINGS PUNCTUATION 10B99..10B9C ; Terminal_Punctuation # Po [4] PSALTER PAHLAVI SECTION MARK..PSALTER PAHLAVI FOUR DOTS WITH DOT 10F55..10F59 ; Terminal_Punctuation # Po [5] SOGDIAN PUNCTUATION TWO VERTICAL BARS..SOGDIAN PUNCTUATION HALF CIRCLE WITH DOT +10F86..10F89 ; Terminal_Punctuation # Po [4] OLD UYGHUR PUNCTUATION BAR..OLD UYGHUR PUNCTUATION FOUR DOTS 11047..1104D ; Terminal_Punctuation # Po [7] BRAHMI DANDA..BRAHMI PUNCTUATION LOTUS 110BE..110C1 ; Terminal_Punctuation # Po [4] KAITHI SECTION MARK..KAITHI DOUBLE DANDA 11141..11143 ; Terminal_Punctuation # Po [3] CHAKMA DANDA..CHAKMA QUESTION MARK @@ -220,7 +224,7 @@ FF64 ; Terminal_Punctuation # Po HALFWIDTH IDEOGRAPHIC COMMA 1BC9F ; Terminal_Punctuation # Po DUPLOYAN PUNCTUATION CHINOOK FULL STOP 1DA87..1DA8A ; Terminal_Punctuation # Po [4] SIGNWRITING COMMA..SIGNWRITING COLON -# Total code points: 267 +# Total code points: 276 # ================================================ @@ -600,6 +604,7 @@ FF41..FF46 ; Hex_Digit # L& [6] FULLWIDTH LATIN SMALL LETTER A..FULLWIDTH L 1A6D..1A72 ; Other_Alphabetic # Mc [6] TAI THAM VOWEL SIGN OY..TAI THAM VOWEL SIGN THAM AI 1A73..1A74 ; Other_Alphabetic # Mn [2] TAI THAM VOWEL SIGN OA ABOVE..TAI THAM SIGN MAI KANG 1ABF..1AC0 ; Other_Alphabetic # Mn [2] COMBINING LATIN SMALL LETTER W BELOW..COMBINING LATIN SMALL LETTER TURNED W BELOW +1ACC..1ACE ; Other_Alphabetic # Mn [3] COMBINING LATIN SMALL LETTER INSULAR G..COMBINING LATIN SMALL LETTER INSULAR T 1B00..1B03 ; Other_Alphabetic # Mn [4] BALINESE SIGN ULU RICEM..BALINESE SIGN SURANG 1B04 ; Other_Alphabetic # Mc BALINESE SIGN BISAH 1B35 ; Other_Alphabetic # Mc BALINESE VOWEL SIGN TEDUNG @@ -686,10 +691,12 @@ FB1E ; Other_Alphabetic # Mn HEBREW POINT JUDEO-SPANISH VARIKA 11001 ; Other_Alphabetic # Mn BRAHMI SIGN ANUSVARA 11002 ; Other_Alphabetic # Mc BRAHMI SIGN VISARGA 11038..11045 ; Other_Alphabetic # Mn [14] BRAHMI VOWEL SIGN AA..BRAHMI VOWEL SIGN AU +11073..11074 ; Other_Alphabetic # Mn [2] BRAHMI VOWEL SIGN OLD TAMIL SHORT E..BRAHMI VOWEL SIGN OLD TAMIL SHORT O 11082 ; Other_Alphabetic # Mc KAITHI SIGN VISARGA 110B0..110B2 ; Other_Alphabetic # Mc [3] KAITHI VOWEL SIGN AA..KAITHI VOWEL SIGN II 110B3..110B6 ; Other_Alphabetic # Mn [4] KAITHI VOWEL SIGN U..KAITHI VOWEL SIGN AI 110B7..110B8 ; Other_Alphabetic # Mc [2] KAITHI VOWEL SIGN O..KAITHI VOWEL SIGN AU +110C2 ; Other_Alphabetic # Mn KAITHI VOWEL SIGN VOCALIC R 11100..11102 ; Other_Alphabetic # Mn [3] CHAKMA SIGN CANDRABINDU..CHAKMA SIGN VISARGA 11127..1112B ; Other_Alphabetic # Mn [5] CHAKMA VOWEL SIGN A..CHAKMA VOWEL SIGN UU 1112C ; Other_Alphabetic # Mc CHAKMA VOWEL SIGN E @@ -815,7 +822,7 @@ FB1E ; Other_Alphabetic # Mn HEBREW POINT JUDEO-SPANISH VARIKA 1F150..1F169 ; Other_Alphabetic # So [26] NEGATIVE CIRCLED LATIN CAPITAL LETTER A..NEGATIVE CIRCLED LATIN CAPITAL LETTER Z 1F170..1F189 ; Other_Alphabetic # So [26] NEGATIVE SQUARED LATIN CAPITAL LETTER A..NEGATIVE SQUARED LATIN CAPITAL LETTER Z -# Total code points: 1398 +# Total code points: 1404 # ================================================ @@ -824,7 +831,7 @@ FB1E ; Other_Alphabetic # Mn HEBREW POINT JUDEO-SPANISH VARIKA 3021..3029 ; Ideographic # Nl [9] HANGZHOU NUMERAL ONE..HANGZHOU NUMERAL NINE 3038..303A ; Ideographic # Nl [3] HANGZHOU NUMERAL TEN..HANGZHOU NUMERAL THIRTY 3400..4DBF ; Ideographic # Lo [6592] CJK UNIFIED IDEOGRAPH-3400..CJK UNIFIED IDEOGRAPH-4DBF -4E00..9FFC ; Ideographic # Lo [20989] CJK UNIFIED IDEOGRAPH-4E00..CJK UNIFIED IDEOGRAPH-9FFC +4E00..9FFF ; Ideographic # Lo [20992] CJK UNIFIED IDEOGRAPH-4E00..CJK UNIFIED IDEOGRAPH-9FFF F900..FA6D ; Ideographic # Lo [366] CJK COMPATIBILITY IDEOGRAPH-F900..CJK COMPATIBILITY IDEOGRAPH-FA6D FA70..FAD9 ; Ideographic # Lo [106] CJK COMPATIBILITY IDEOGRAPH-FA70..CJK COMPATIBILITY IDEOGRAPH-FAD9 16FE4 ; Ideographic # Mn KHITAN SMALL SCRIPT FILLER @@ -832,15 +839,15 @@ FA70..FAD9 ; Ideographic # Lo [106] CJK COMPATIBILITY IDEOGRAPH-FA70..CJK COM 18800..18CD5 ; Ideographic # Lo [1238] TANGUT COMPONENT-001..KHITAN SMALL SCRIPT CHARACTER-18CD5 18D00..18D08 ; Ideographic # Lo [9] TANGUT IDEOGRAPH-18D00..TANGUT IDEOGRAPH-18D08 1B170..1B2FB ; Ideographic # Lo [396] NUSHU CHARACTER-1B170..NUSHU CHARACTER-1B2FB -20000..2A6DD ; Ideographic # Lo [42718] CJK UNIFIED IDEOGRAPH-20000..CJK UNIFIED IDEOGRAPH-2A6DD -2A700..2B734 ; Ideographic # Lo [4149] CJK UNIFIED IDEOGRAPH-2A700..CJK UNIFIED IDEOGRAPH-2B734 +20000..2A6DF ; Ideographic # Lo [42720] CJK UNIFIED IDEOGRAPH-20000..CJK UNIFIED IDEOGRAPH-2A6DF +2A700..2B738 ; Ideographic # Lo [4153] CJK UNIFIED IDEOGRAPH-2A700..CJK UNIFIED IDEOGRAPH-2B738 2B740..2B81D ; Ideographic # Lo [222] CJK UNIFIED IDEOGRAPH-2B740..CJK UNIFIED IDEOGRAPH-2B81D 2B820..2CEA1 ; Ideographic # Lo [5762] CJK UNIFIED IDEOGRAPH-2B820..CJK UNIFIED IDEOGRAPH-2CEA1 2CEB0..2EBE0 ; Ideographic # Lo [7473] CJK UNIFIED IDEOGRAPH-2CEB0..CJK UNIFIED IDEOGRAPH-2EBE0 2F800..2FA1D ; Ideographic # Lo [542] CJK COMPATIBILITY IDEOGRAPH-2F800..CJK COMPATIBILITY IDEOGRAPH-2FA1D 30000..3134A ; Ideographic # Lo [4939] CJK UNIFIED IDEOGRAPH-30000..CJK UNIFIED IDEOGRAPH-3134A -# Total code points: 101652 +# Total code points: 101661 # ================================================ @@ -885,6 +892,9 @@ FA70..FAD9 ; Ideographic # Lo [106] CJK COMPATIBILITY IDEOGRAPH-FA70..CJK COM 07EB..07F3 ; Diacritic # Mn [9] NKO COMBINING SHORT HIGH TONE..NKO COMBINING DOUBLE DOT ABOVE 07F4..07F5 ; Diacritic # Lm [2] NKO HIGH TONE APOSTROPHE..NKO LOW TONE APOSTROPHE 0818..0819 ; Diacritic # Mn [2] SAMARITAN MARK OCCLUSION..SAMARITAN MARK DAGESH +0898..089F ; Diacritic # Mn [8] ARABIC SMALL HIGH WORD AL-JUZ..ARABIC HALF MADDA OVER MADDA +08C9 ; Diacritic # Lm ARABIC SMALL FARSI YEH +08CA..08D2 ; Diacritic # Mn [9] ARABIC SMALL HIGH FARSI YEH..ARABIC LARGE ROUND DOT INSIDE CIRCLE BELOW 08E3..08FE ; Diacritic # Mn [28] ARABIC TURNED DAMMA BELOW..ARABIC DAMMA WITH DOT 093C ; Diacritic # Mn DEVANAGARI SIGN NUKTA 094D ; Diacritic # Mn DEVANAGARI SIGN VIRAMA @@ -901,6 +911,7 @@ FA70..FAD9 ; Ideographic # Lo [106] CJK COMPATIBILITY IDEOGRAPH-FA70..CJK COM 0B4D ; Diacritic # Mn ORIYA SIGN VIRAMA 0B55 ; Diacritic # Mn ORIYA SIGN OVERLINE 0BCD ; Diacritic # Mn TAMIL SIGN VIRAMA +0C3C ; Diacritic # Mn TELUGU SIGN NUKTA 0C4D ; Diacritic # Mn TELUGU SIGN VIRAMA 0CBC ; Diacritic # Mn KANNADA SIGN NUKTA 0CCD ; Diacritic # Mn KANNADA SIGN VIRAMA @@ -928,12 +939,16 @@ FA70..FAD9 ; Ideographic # Lo [106] CJK COMPATIBILITY IDEOGRAPH-FA70..CJK COM 108F ; Diacritic # Mc MYANMAR SIGN RUMAI PALAUNG TONE-5 109A..109B ; Diacritic # Mc [2] MYANMAR SIGN KHAMTI TONE-1..MYANMAR SIGN KHAMTI TONE-3 135D..135F ; Diacritic # Mn [3] ETHIOPIC COMBINING GEMINATION AND VOWEL LENGTH MARK..ETHIOPIC COMBINING GEMINATION MARK +1714 ; Diacritic # Mn TAGALOG SIGN VIRAMA +1715 ; Diacritic # Mc TAGALOG SIGN PAMUDPOD 17C9..17D3 ; Diacritic # Mn [11] KHMER SIGN MUUSIKATOAN..KHMER SIGN BATHAMASAT 17DD ; Diacritic # Mn KHMER SIGN ATTHACAN 1939..193B ; Diacritic # Mn [3] LIMBU SIGN MUKPHRENG..LIMBU SIGN SA-I 1A75..1A7C ; Diacritic # Mn [8] TAI THAM SIGN TONE-1..TAI THAM SIGN KHUEN-LUE KARAN 1A7F ; Diacritic # Mn TAI THAM COMBINING CRYPTOGRAMMIC DOT 1AB0..1ABD ; Diacritic # Mn [14] COMBINING DOUBLED CIRCUMFLEX ACCENT..COMBINING PARENTHESES BELOW +1ABE ; Diacritic # Me COMBINING PARENTHESES OVERLAY +1AC1..1ACB ; Diacritic # Mn [11] COMBINING LEFT PARENTHESIS ABOVE LEFT..COMBINING TRIPLE ACUTE ACCENT 1B34 ; Diacritic # Mn BALINESE SIGN REREKAN 1B44 ; Diacritic # Mc BALINESE ADEG ADEG 1B6B..1B73 ; Diacritic # Mn [9] BALINESE MUSICAL SYMBOL COMBINING TEGEH..BALINESE MUSICAL SYMBOL COMBINING GONG @@ -952,8 +967,7 @@ FA70..FAD9 ; Ideographic # Lo [106] CJK COMPATIBILITY IDEOGRAPH-FA70..CJK COM 1CF8..1CF9 ; Diacritic # Mn [2] VEDIC TONE RING ABOVE..VEDIC TONE DOUBLE RING ABOVE 1D2C..1D6A ; Diacritic # Lm [63] MODIFIER LETTER CAPITAL A..GREEK SUBSCRIPT SMALL LETTER CHI 1DC4..1DCF ; Diacritic # Mn [12] COMBINING MACRON-ACUTE..COMBINING ZIGZAG BELOW -1DF5..1DF9 ; Diacritic # Mn [5] COMBINING UP TACK ABOVE..COMBINING WIDE INVERTED BRIDGE BELOW -1DFD..1DFF ; Diacritic # Mn [3] COMBINING ALMOST EQUAL TO BELOW..COMBINING RIGHT ARROWHEAD AND DOWN ARROWHEAD BELOW +1DF5..1DFF ; Diacritic # Mn [11] COMBINING UP TACK ABOVE..COMBINING RIGHT ARROWHEAD AND DOWN ARROWHEAD BELOW 1FBD ; Diacritic # Sk GREEK KORONIS 1FBF..1FC1 ; Diacritic # Sk [3] GREEK PSILI..GREEK DIALYTIKA AND PERISPOMENI 1FCD..1FCF ; Diacritic # Sk [3] GREEK PSILI AND VARIA..GREEK PSILI AND PERISPOMENI @@ -1008,10 +1022,16 @@ FF70 ; Diacritic # Lm HALFWIDTH KATAKANA-HIRAGANA PROLONGED SOUND FF9E..FF9F ; Diacritic # Lm [2] HALFWIDTH KATAKANA VOICED SOUND MARK..HALFWIDTH KATAKANA SEMI-VOICED SOUND MARK FFE3 ; Diacritic # Sk FULLWIDTH MACRON 102E0 ; Diacritic # Mn COPTIC EPACT THOUSANDS MARK +10780..10785 ; Diacritic # Lm [6] MODIFIER LETTER SMALL CAPITAL AA..MODIFIER LETTER SMALL B WITH HOOK +10787..107B0 ; Diacritic # Lm [42] MODIFIER LETTER SMALL DZ DIGRAPH..MODIFIER LETTER SMALL V WITH RIGHT HOOK +107B2..107BA ; Diacritic # Lm [9] MODIFIER LETTER SMALL CAPITAL Y..MODIFIER LETTER SMALL S WITH CURL 10AE5..10AE6 ; Diacritic # Mn [2] MANICHAEAN ABBREVIATION MARK ABOVE..MANICHAEAN ABBREVIATION MARK BELOW 10D22..10D23 ; Diacritic # Lo [2] HANIFI ROHINGYA MARK SAKIN..HANIFI ROHINGYA MARK NA KHONNA 10D24..10D27 ; Diacritic # Mn [4] HANIFI ROHINGYA SIGN HARBAHAY..HANIFI ROHINGYA SIGN TASSI 10F46..10F50 ; Diacritic # Mn [11] SOGDIAN COMBINING DOT BELOW..SOGDIAN COMBINING STROKE BELOW +10F82..10F85 ; Diacritic # Mn [4] OLD UYGHUR COMBINING DOT ABOVE..OLD UYGHUR COMBINING TWO DOTS BELOW +11046 ; Diacritic # Mn BRAHMI VIRAMA +11070 ; Diacritic # Mn BRAHMI SIGN OLD TAMIL VIRAMA 110B9..110BA ; Diacritic # Mn [2] KAITHI SIGN VIRAMA..KAITHI SIGN NUKTA 11133..11134 ; Diacritic # Mn [2] CHAKMA VIRAMA..CHAKMA MAAYYAA 11173 ; Diacritic # Mn MAHAJANI SIGN NUKTA @@ -1049,18 +1069,24 @@ FFE3 ; Diacritic # Sk FULLWIDTH MACRON 16F8F..16F92 ; Diacritic # Mn [4] MIAO TONE RIGHT..MIAO TONE BELOW 16F93..16F9F ; Diacritic # Lm [13] MIAO LETTER TONE-2..MIAO LETTER REFORMED TONE-8 16FF0..16FF1 ; Diacritic # Mc [2] VIETNAMESE ALTERNATE READING MARK CA..VIETNAMESE ALTERNATE READING MARK NHAY +1AFF0..1AFF3 ; Diacritic # Lm [4] KATAKANA LETTER MINNAN TONE-2..KATAKANA LETTER MINNAN TONE-5 +1AFF5..1AFFB ; Diacritic # Lm [7] KATAKANA LETTER MINNAN TONE-7..KATAKANA LETTER MINNAN NASALIZED TONE-5 +1AFFD..1AFFE ; Diacritic # Lm [2] KATAKANA LETTER MINNAN NASALIZED TONE-7..KATAKANA LETTER MINNAN NASALIZED TONE-8 +1CF00..1CF2D ; Diacritic # Mn [46] ZNAMENNY COMBINING MARK GORAZDO NIZKO S KRYZHEM ON LEFT..ZNAMENNY COMBINING MARK KRYZH ON LEFT +1CF30..1CF46 ; Diacritic # Mn [23] ZNAMENNY COMBINING TONAL RANGE MARK MRACHNO..ZNAMENNY PRIZNAK MODIFIER ROG 1D167..1D169 ; Diacritic # Mn [3] MUSICAL SYMBOL COMBINING TREMOLO-1..MUSICAL SYMBOL COMBINING TREMOLO-3 1D16D..1D172 ; Diacritic # Mc [6] MUSICAL SYMBOL COMBINING AUGMENTATION DOT..MUSICAL SYMBOL COMBINING FLAG-5 1D17B..1D182 ; Diacritic # Mn [8] MUSICAL SYMBOL COMBINING ACCENT..MUSICAL SYMBOL COMBINING LOURE 1D185..1D18B ; Diacritic # Mn [7] MUSICAL SYMBOL COMBINING DOIT..MUSICAL SYMBOL COMBINING TRIPLE TONGUE 1D1AA..1D1AD ; Diacritic # Mn [4] MUSICAL SYMBOL COMBINING DOWN BOW..MUSICAL SYMBOL COMBINING SNAP PIZZICATO 1E130..1E136 ; Diacritic # Mn [7] NYIAKENG PUACHUE HMONG TONE-B..NYIAKENG PUACHUE HMONG TONE-D +1E2AE ; Diacritic # Mn TOTO SIGN RISING TONE 1E2EC..1E2EF ; Diacritic # Mn [4] WANCHO TONE TUP..WANCHO TONE KOINI 1E8D0..1E8D6 ; Diacritic # Mn [7] MENDE KIKAKUI COMBINING NUMBER TEENS..MENDE KIKAKUI COMBINING NUMBER MILLIONS 1E944..1E946 ; Diacritic # Mn [3] ADLAM ALIF LENGTHENER..ADLAM GEMINATION MARK 1E948..1E94A ; Diacritic # Mn [3] ADLAM CONSONANT MODIFIER..ADLAM NUKTA -# Total code points: 882 +# Total code points: 1064 # ================================================ @@ -1088,6 +1114,7 @@ AA70 ; Extender # Lm MYANMAR MODIFIER LETTER KHAMTI REDUPLICATION AADD ; Extender # Lm TAI VIET SYMBOL SAM AAF3..AAF4 ; Extender # Lm [2] MEETEI MAYEK SYLLABLE REPETITION MARK..MEETEI MAYEK WORD REPETITION MARK FF70 ; Extender # Lm HALFWIDTH KATAKANA-HIRAGANA PROLONGED SOUND MARK +10781..10782 ; Extender # Lm [2] MODIFIER LETTER SUPERSCRIPT TRIANGULAR COLON..MODIFIER LETTER SUPERSCRIPT HALF TRIANGULAR COLON 1135D ; Extender # Lo GRANTHA SIGN PLUTA 115C6..115C8 ; Extender # Po [3] SIDDHAM REPETITION MARK-1..SIDDHAM REPETITION MARK-3 11A98 ; Extender # Mn SOYOMBO GEMINATION MARK @@ -1097,7 +1124,7 @@ FF70 ; Extender # Lm HALFWIDTH KATAKANA-HIRAGANA PROLONGED SOUND 1E13C..1E13D ; Extender # Lm [2] NYIAKENG PUACHUE HMONG SIGN XW XW..NYIAKENG PUACHUE HMONG SYLLABLE LENGTHENER 1E944..1E946 ; Extender # Mn [3] ADLAM ALIF LENGTHENER..ADLAM GEMINATION MARK -# Total code points: 48 +# Total code points: 50 # ================================================ @@ -1121,8 +1148,12 @@ A69C..A69D ; Other_Lowercase # Lm [2] MODIFIER LETTER CYRILLIC HARD SIGN..M A770 ; Other_Lowercase # Lm MODIFIER LETTER US A7F8..A7F9 ; Other_Lowercase # Lm [2] MODIFIER LETTER CAPITAL H WITH STROKE..MODIFIER LETTER SMALL LIGATURE OE AB5C..AB5F ; Other_Lowercase # Lm [4] MODIFIER LETTER SMALL HENG..MODIFIER LETTER SMALL U WITH LEFT HOOK +10780 ; Other_Lowercase # Lm MODIFIER LETTER SMALL CAPITAL AA +10783..10785 ; Other_Lowercase # Lm [3] MODIFIER LETTER SMALL AE..MODIFIER LETTER SMALL B WITH HOOK +10787..107B0 ; Other_Lowercase # Lm [42] MODIFIER LETTER SMALL DZ DIGRAPH..MODIFIER LETTER SMALL V WITH RIGHT HOOK +107B2..107BA ; Other_Lowercase # Lm [9] MODIFIER LETTER SMALL CAPITAL Y..MODIFIER LETTER SMALL S WITH CURL -# Total code points: 189 +# Total code points: 244 # ================================================ @@ -1211,7 +1242,7 @@ E0020..E007F ; Other_Grapheme_Extend # Cf [96] TAG SPACE..CANCEL TAG # ================================================ 3400..4DBF ; Unified_Ideograph # Lo [6592] CJK UNIFIED IDEOGRAPH-3400..CJK UNIFIED IDEOGRAPH-4DBF -4E00..9FFC ; Unified_Ideograph # Lo [20989] CJK UNIFIED IDEOGRAPH-4E00..CJK UNIFIED IDEOGRAPH-9FFC +4E00..9FFF ; Unified_Ideograph # Lo [20992] CJK UNIFIED IDEOGRAPH-4E00..CJK UNIFIED IDEOGRAPH-9FFF FA0E..FA0F ; Unified_Ideograph # Lo [2] CJK COMPATIBILITY IDEOGRAPH-FA0E..CJK COMPATIBILITY IDEOGRAPH-FA0F FA11 ; Unified_Ideograph # Lo CJK COMPATIBILITY IDEOGRAPH-FA11 FA13..FA14 ; Unified_Ideograph # Lo [2] CJK COMPATIBILITY IDEOGRAPH-FA13..CJK COMPATIBILITY IDEOGRAPH-FA14 @@ -1219,14 +1250,14 @@ FA1F ; Unified_Ideograph # Lo CJK COMPATIBILITY IDEOGRAPH-FA1F FA21 ; Unified_Ideograph # Lo CJK COMPATIBILITY IDEOGRAPH-FA21 FA23..FA24 ; Unified_Ideograph # Lo [2] CJK COMPATIBILITY IDEOGRAPH-FA23..CJK COMPATIBILITY IDEOGRAPH-FA24 FA27..FA29 ; Unified_Ideograph # Lo [3] CJK COMPATIBILITY IDEOGRAPH-FA27..CJK COMPATIBILITY IDEOGRAPH-FA29 -20000..2A6DD ; Unified_Ideograph # Lo [42718] CJK UNIFIED IDEOGRAPH-20000..CJK UNIFIED IDEOGRAPH-2A6DD -2A700..2B734 ; Unified_Ideograph # Lo [4149] CJK UNIFIED IDEOGRAPH-2A700..CJK UNIFIED IDEOGRAPH-2B734 +20000..2A6DF ; Unified_Ideograph # Lo [42720] CJK UNIFIED IDEOGRAPH-20000..CJK UNIFIED IDEOGRAPH-2A6DF +2A700..2B738 ; Unified_Ideograph # Lo [4153] CJK UNIFIED IDEOGRAPH-2A700..CJK UNIFIED IDEOGRAPH-2B738 2B740..2B81D ; Unified_Ideograph # Lo [222] CJK UNIFIED IDEOGRAPH-2B740..CJK UNIFIED IDEOGRAPH-2B81D 2B820..2CEA1 ; Unified_Ideograph # Lo [5762] CJK UNIFIED IDEOGRAPH-2B820..CJK UNIFIED IDEOGRAPH-2CEA1 2CEB0..2EBE0 ; Unified_Ideograph # Lo [7473] CJK UNIFIED IDEOGRAPH-2CEB0..CJK UNIFIED IDEOGRAPH-2EBE0 30000..3134A ; Unified_Ideograph # Lo [4939] CJK UNIFIED IDEOGRAPH-30000..CJK UNIFIED IDEOGRAPH-3134A -# Total code points: 92856 +# Total code points: 92865 # ================================================ @@ -1291,8 +1322,9 @@ E0001 ; Deprecated # Cf LANGUAGE TAG 1D62A..1D62B ; Soft_Dotted # L& [2] MATHEMATICAL SANS-SERIF ITALIC SMALL I..MATHEMATICAL SANS-SERIF ITALIC SMALL J 1D65E..1D65F ; Soft_Dotted # L& [2] MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL I..MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL J 1D692..1D693 ; Soft_Dotted # L& [2] MATHEMATICAL MONOSPACE SMALL I..MATHEMATICAL MONOSPACE SMALL J +1DF1A ; Soft_Dotted # L& LATIN SMALL LETTER I WITH STROKE AND RETROFLEX HOOK -# Total code points: 46 +# Total code points: 47 # ================================================ @@ -1330,7 +1362,7 @@ AABB..AABC ; Logical_Order_Exception # Lo [2] TAI VIET VOWEL AUE..TAI VIET 002E ; Sentence_Terminal # Po FULL STOP 003F ; Sentence_Terminal # Po QUESTION MARK 0589 ; Sentence_Terminal # Po ARMENIAN FULL STOP -061E..061F ; Sentence_Terminal # Po [2] ARABIC TRIPLE DOT PUNCTUATION MARK..ARABIC QUESTION MARK +061D..061F ; Sentence_Terminal # Po [3] ARABIC END OF TEXT MARK..ARABIC QUESTION MARK 06D4 ; Sentence_Terminal # Po ARABIC FULL STOP 0700..0702 ; Sentence_Terminal # Po [3] SYRIAC END OF PARAGRAPH..SYRIAC SUBLINEAR FULL STOP 07F9 ; Sentence_Terminal # Po NKO EXCLAMATION MARK @@ -1349,12 +1381,14 @@ AABB..AABC ; Logical_Order_Exception # Lo [2] TAI VIET VOWEL AUE..TAI VIET 1AA8..1AAB ; Sentence_Terminal # Po [4] TAI THAM SIGN KAAN..TAI THAM SIGN SATKAANKUU 1B5A..1B5B ; Sentence_Terminal # Po [2] BALINESE PANTI..BALINESE PAMADA 1B5E..1B5F ; Sentence_Terminal # Po [2] BALINESE CARIK SIKI..BALINESE CARIK PAREREN +1B7D..1B7E ; Sentence_Terminal # Po [2] BALINESE PANTI LANTANG..BALINESE PAMADA LANTANG 1C3B..1C3C ; Sentence_Terminal # Po [2] LEPCHA PUNCTUATION TA-ROL..LEPCHA PUNCTUATION NYET THYOOM TA-ROL 1C7E..1C7F ; Sentence_Terminal # Po [2] OL CHIKI PUNCTUATION MUCAAD..OL CHIKI PUNCTUATION DOUBLE MUCAAD 203C..203D ; Sentence_Terminal # Po [2] DOUBLE EXCLAMATION MARK..INTERROBANG 2047..2049 ; Sentence_Terminal # Po [3] DOUBLE QUESTION MARK..EXCLAMATION QUESTION MARK 2E2E ; Sentence_Terminal # Po REVERSED QUESTION MARK 2E3C ; Sentence_Terminal # Po STENOGRAPHIC FULL STOP +2E53..2E54 ; Sentence_Terminal # Po [2] MEDIEVAL EXCLAMATION MARK..MEDIEVAL QUESTION MARK 3002 ; Sentence_Terminal # Po IDEOGRAPHIC FULL STOP A4FF ; Sentence_Terminal # Po LISU PUNCTUATION FULL STOP A60E..A60F ; Sentence_Terminal # Po [2] VAI FULL STOP..VAI QUESTION MARK @@ -1375,6 +1409,7 @@ FF1F ; Sentence_Terminal # Po FULLWIDTH QUESTION MARK FF61 ; Sentence_Terminal # Po HALFWIDTH IDEOGRAPHIC FULL STOP 10A56..10A57 ; Sentence_Terminal # Po [2] KHAROSHTHI PUNCTUATION DANDA..KHAROSHTHI PUNCTUATION DOUBLE DANDA 10F55..10F59 ; Sentence_Terminal # Po [5] SOGDIAN PUNCTUATION TWO VERTICAL BARS..SOGDIAN PUNCTUATION HALF CIRCLE WITH DOT +10F86..10F89 ; Sentence_Terminal # Po [4] OLD UYGHUR PUNCTUATION BAR..OLD UYGHUR PUNCTUATION FOUR DOTS 11047..11048 ; Sentence_Terminal # Po [2] BRAHMI DANDA..BRAHMI DOUBLE DANDA 110BE..110C1 ; Sentence_Terminal # Po [4] KAITHI SECTION MARK..KAITHI DOUBLE DANDA 11141..11143 ; Sentence_Terminal # Po [3] CHAKMA DANDA..CHAKMA QUESTION MARK @@ -1403,15 +1438,16 @@ FF61 ; Sentence_Terminal # Po HALFWIDTH IDEOGRAPHIC FULL STOP 1BC9F ; Sentence_Terminal # Po DUPLOYAN PUNCTUATION CHINOOK FULL STOP 1DA88 ; Sentence_Terminal # Po SIGNWRITING FULL STOP -# Total code points: 143 +# Total code points: 152 # ================================================ 180B..180D ; Variation_Selector # Mn [3] MONGOLIAN FREE VARIATION SELECTOR ONE..MONGOLIAN FREE VARIATION SELECTOR THREE +180F ; Variation_Selector # Mn MONGOLIAN FREE VARIATION SELECTOR FOUR FE00..FE0F ; Variation_Selector # Mn [16] VARIATION SELECTOR-1..VARIATION SELECTOR-16 E0100..E01EF ; Variation_Selector # Mn [240] VARIATION SELECTOR-17..VARIATION SELECTOR-256 -# Total code points: 259 +# Total code points: 260 # ================================================ @@ -1644,8 +1680,17 @@ E0100..E01EF ; Variation_Selector # Mn [240] VARIATION SELECTOR-17..VARIATION S 2E42 ; Pattern_Syntax # Ps DOUBLE LOW-REVERSED-9 QUOTATION MARK 2E43..2E4F ; Pattern_Syntax # Po [13] DASH WITH LEFT UPTURN..CORNISH VERSE DIVIDER 2E50..2E51 ; Pattern_Syntax # So [2] CROSS PATTY WITH RIGHT CROSSBAR..CROSS PATTY WITH LEFT CROSSBAR -2E52 ; Pattern_Syntax # Po TIRONIAN SIGN CAPITAL ET -2E53..2E7F ; Pattern_Syntax # Cn [45] .. +2E52..2E54 ; Pattern_Syntax # Po [3] TIRONIAN SIGN CAPITAL ET..MEDIEVAL QUESTION MARK +2E55 ; Pattern_Syntax # Ps LEFT SQUARE BRACKET WITH STROKE +2E56 ; Pattern_Syntax # Pe RIGHT SQUARE BRACKET WITH STROKE +2E57 ; Pattern_Syntax # Ps LEFT SQUARE BRACKET WITH DOUBLE STROKE +2E58 ; Pattern_Syntax # Pe RIGHT SQUARE BRACKET WITH DOUBLE STROKE +2E59 ; Pattern_Syntax # Ps TOP HALF LEFT PARENTHESIS +2E5A ; Pattern_Syntax # Pe TOP HALF RIGHT PARENTHESIS +2E5B ; Pattern_Syntax # Ps BOTTOM HALF LEFT PARENTHESIS +2E5C ; Pattern_Syntax # Pe BOTTOM HALF RIGHT PARENTHESIS +2E5D ; Pattern_Syntax # Pd OBLIQUE HYPHEN +2E5E..2E7F ; Pattern_Syntax # Cn [34] .. 3001..3003 ; Pattern_Syntax # Po [3] IDEOGRAPHIC COMMA..DITTO MARK 3008 ; Pattern_Syntax # Ps LEFT ANGLE BRACKET 3009 ; Pattern_Syntax # Pe RIGHT ANGLE BRACKET @@ -1682,11 +1727,12 @@ FE45..FE46 ; Pattern_Syntax # Po [2] SESAME DOT..WHITE SESAME DOT 0600..0605 ; Prepended_Concatenation_Mark # Cf [6] ARABIC NUMBER SIGN..ARABIC NUMBER MARK ABOVE 06DD ; Prepended_Concatenation_Mark # Cf ARABIC END OF AYAH 070F ; Prepended_Concatenation_Mark # Cf SYRIAC ABBREVIATION MARK +0890..0891 ; Prepended_Concatenation_Mark # Cf [2] ARABIC POUND MARK ABOVE..ARABIC PIASTRE MARK ABOVE 08E2 ; Prepended_Concatenation_Mark # Cf ARABIC DISPUTED END OF AYAH 110BD ; Prepended_Concatenation_Mark # Cf KAITHI NUMBER SIGN 110CD ; Prepended_Concatenation_Mark # Cf KAITHI NUMBER SIGN ABOVE -# Total code points: 11 +# Total code points: 13 # ================================================ diff --git a/gnu/usr.bin/perl/lib/unicore/PropValueAliases.txt b/gnu/usr.bin/perl/lib/unicore/PropValueAliases.txt index 2023baf4d2f..f0cb26bdab8 100644 --- a/gnu/usr.bin/perl/lib/unicore/PropValueAliases.txt +++ b/gnu/usr.bin/perl/lib/unicore/PropValueAliases.txt @@ -1,6 +1,6 @@ -# PropertyValueAliases-13.0.0.txt -# Date: 2019-11-13, 21:52:10 GMT -# © 2019 Unicode®, Inc. +# PropertyValueAliases-14.0.0.txt +# Date: 2021-05-10, 21:08:53 GMT +# © 2021 Unicode®, Inc. # Unicode and the Unicode Logo are registered trademarks of Unicode, Inc. in the U.S. and other countries. # For terms of use, see http://www.unicode.org/terms_of_use.html # @@ -89,6 +89,7 @@ age; 11.0 ; V11_0 age; 12.0 ; V12_0 age; 12.1 ; V12_1 age; 13.0 ; V13_0 +age; 14.0 ; V14_0 age; NA ; Unassigned # Alphabetic (Alpha) @@ -160,6 +161,7 @@ blk; Ancient_Greek_Numbers ; Ancient_Greek_Numbers blk; Ancient_Symbols ; Ancient_Symbols blk; Arabic ; Arabic blk; Arabic_Ext_A ; Arabic_Extended_A +blk; Arabic_Ext_B ; Arabic_Extended_B blk; Arabic_Math ; Arabic_Mathematical_Alphabetic_Symbols blk; Arabic_PF_A ; Arabic_Presentation_Forms_A ; Arabic_Presentation_Forms-A blk; Arabic_PF_B ; Arabic_Presentation_Forms_B @@ -216,6 +218,7 @@ blk; Cuneiform ; Cuneiform blk; Cuneiform_Numbers ; Cuneiform_Numbers_And_Punctuation blk; Currency_Symbols ; Currency_Symbols blk; Cypriot_Syllabary ; Cypriot_Syllabary +blk; Cypro_Minoan ; Cypro_Minoan blk; Cyrillic ; Cyrillic blk; Cyrillic_Ext_A ; Cyrillic_Extended_A blk; Cyrillic_Ext_B ; Cyrillic_Extended_B @@ -246,6 +249,7 @@ blk; Enclosed_Ideographic_Sup ; Enclosed_Ideographic_Supplement blk; Ethiopic ; Ethiopic blk; Ethiopic_Ext ; Ethiopic_Extended blk; Ethiopic_Ext_A ; Ethiopic_Extended_A +blk; Ethiopic_Ext_B ; Ethiopic_Extended_B blk; Ethiopic_Sup ; Ethiopic_Supplement blk; Geometric_Shapes ; Geometric_Shapes blk; Geometric_Shapes_Ext ; Geometric_Shapes_Extended @@ -285,6 +289,7 @@ blk; Jamo_Ext_B ; Hangul_Jamo_Extended_B blk; Javanese ; Javanese blk; Kaithi ; Kaithi blk; Kana_Ext_A ; Kana_Extended_A +blk; Kana_Ext_B ; Kana_Extended_B blk; Kana_Sup ; Kana_Supplement blk; Kanbun ; Kanbun blk; Kangxi ; Kangxi_Radicals @@ -306,6 +311,8 @@ blk; Latin_Ext_B ; Latin_Extended_B blk; Latin_Ext_C ; Latin_Extended_C blk; Latin_Ext_D ; Latin_Extended_D blk; Latin_Ext_E ; Latin_Extended_E +blk; Latin_Ext_F ; Latin_Extended_F +blk; Latin_Ext_G ; Latin_Extended_G blk; Lepcha ; Lepcha blk; Letterlike_Symbols ; Letterlike_Symbols blk; Limbu ; Limbu @@ -372,6 +379,7 @@ blk; Old_Persian ; Old_Persian blk; Old_Sogdian ; Old_Sogdian blk; Old_South_Arabian ; Old_South_Arabian blk; Old_Turkic ; Old_Turkic +blk; Old_Uyghur ; Old_Uyghur blk; Oriya ; Oriya blk; Ornamental_Dingbats ; Ornamental_Dingbats blk; Osage ; Osage @@ -433,6 +441,7 @@ blk; Tai_Xuan_Jing ; Tai_Xuan_Jing_Symbols blk; Takri ; Takri blk; Tamil ; Tamil blk; Tamil_Sup ; Tamil_Supplement +blk; Tangsa ; Tangsa blk; Tangut ; Tangut blk; Tangut_Components ; Tangut_Components blk; Tangut_Sup ; Tangut_Supplement @@ -442,13 +451,16 @@ blk; Thai ; Thai blk; Tibetan ; Tibetan blk; Tifinagh ; Tifinagh blk; Tirhuta ; Tirhuta +blk; Toto ; Toto blk; Transport_And_Map ; Transport_And_Map_Symbols blk; UCAS ; Unified_Canadian_Aboriginal_Syllabics; Canadian_Syllabics blk; UCAS_Ext ; Unified_Canadian_Aboriginal_Syllabics_Extended +blk; UCAS_Ext_A ; Unified_Canadian_Aboriginal_Syllabics_Extended_A blk; Ugaritic ; Ugaritic blk; Vai ; Vai blk; Vedic_Ext ; Vedic_Extensions blk; Vertical_Forms ; Vertical_Forms +blk; Vithkuqi ; Vithkuqi blk; VS ; Variation_Selectors blk; VS_Sup ; Variation_Selectors_Supplement blk; Wancho ; Wancho @@ -458,6 +470,7 @@ blk; Yi_Radicals ; Yi_Radicals blk; Yi_Syllables ; Yi_Syllables blk; Yijing ; Yijing_Hexagram_Symbols blk; Zanabazar_Square ; Zanabazar_Square +blk; Znamenny_Music ; Znamenny_Musical_Notation # Canonical_Combining_Class (ccc) @@ -1032,6 +1045,8 @@ jg ; Taw ; Taw jg ; Teh_Marbuta ; Teh_Marbuta jg ; Teh_Marbuta_Goal ; Hamza_On_Heh_Goal jg ; Teth ; Teth +jg ; Thin_Yeh ; Thin_Yeh +jg ; Vertical_Tail ; Vertical_Tail jg ; Waw ; Waw jg ; Yeh ; Yeh jg ; Yeh_Barree ; Yeh_Barree @@ -1262,6 +1277,7 @@ sc ; Cham ; Cham sc ; Cher ; Cherokee sc ; Chrs ; Chorasmian sc ; Copt ; Coptic ; Qaac +sc ; Cpmn ; Cypro_Minoan sc ; Cprt ; Cypriot sc ; Cyrl ; Cyrillic sc ; Deva ; Devanagari @@ -1341,6 +1357,7 @@ sc ; Orkh ; Old_Turkic sc ; Orya ; Oriya sc ; Osge ; Osage sc ; Osma ; Osmanya +sc ; Ougr ; Old_Uyghur sc ; Palm ; Palmyrene sc ; Pauc ; Pau_Cin_Hau sc ; Perm ; Old_Permic @@ -1383,8 +1400,11 @@ sc ; Thaa ; Thaana sc ; Thai ; Thai sc ; Tibt ; Tibetan sc ; Tirh ; Tirhuta +sc ; Tnsa ; Tangsa +sc ; Toto ; Toto sc ; Ugar ; Ugaritic sc ; Vaii ; Vai +sc ; Vith ; Vithkuqi sc ; Wara ; Warang_Citi sc ; Wcho ; Wancho sc ; Xpeo ; Old_Persian diff --git a/gnu/usr.bin/perl/lib/unicore/PropertyAliases.txt b/gnu/usr.bin/perl/lib/unicore/PropertyAliases.txt index 04644b8a281..3e4b429e455 100644 --- a/gnu/usr.bin/perl/lib/unicore/PropertyAliases.txt +++ b/gnu/usr.bin/perl/lib/unicore/PropertyAliases.txt @@ -1,6 +1,6 @@ -# PropertyAliases-13.0.0.txt -# Date: 2019-10-23, 03:46:32 GMT -# © 2019 Unicode®, Inc. +# PropertyAliases-14.0.0.txt +# Date: 2021-03-08, 19:35:48 GMT +# © 2021 Unicode®, Inc. # Unicode and the Unicode Logo are registered trademarks of Unicode, Inc. in the U.S. and other countries. # For terms of use, see http://www.unicode.org/terms_of_use.html # diff --git a/gnu/usr.bin/perl/lib/unicore/ReadMe.txt b/gnu/usr.bin/perl/lib/unicore/ReadMe.txt index 390624de3dd..e7c080f9f03 100644 --- a/gnu/usr.bin/perl/lib/unicore/ReadMe.txt +++ b/gnu/usr.bin/perl/lib/unicore/ReadMe.txt @@ -1,6 +1,6 @@ # Unicode Character Database -# Date: 2019-09-11, 16:03:00 GMT [KW] -# © 2019 Unicode®, Inc. +# Date: 2021-09-10, 17:22:00 GMT [KW] +# © 2021 Unicode®, Inc. # Unicode and the Unicode Logo are registered trademarks of Unicode, Inc. in the U.S. and other countries. # For terms of use, see https://www.unicode.org/terms_of_use.html # @@ -10,7 +10,7 @@ # UAX #44, "Unicode Character Database" # UTS #51, "Unicode Emoji" # -# The UAXes and UTS #51 can be accessed at https://www.unicode.org/versions/Unicode13.0.0/ +# The UAXes and UTS #51 can be accessed at https://www.unicode.org/versions/Unicode14.0.0/ -This directory contains the preliminary data files under development -for the Unicode Character Database, for Version 13.0.0 of the Unicode Standard. +This directory contains the final data files +for the Unicode Character Database, for Version 14.0.0 of the Unicode Standard. diff --git a/gnu/usr.bin/perl/lib/unicore/ScriptExtensions.txt b/gnu/usr.bin/perl/lib/unicore/ScriptExtensions.txt index b561feeb29f..3f5cd1c0dbb 100644 --- a/gnu/usr.bin/perl/lib/unicore/ScriptExtensions.txt +++ b/gnu/usr.bin/perl/lib/unicore/ScriptExtensions.txt @@ -1,6 +1,6 @@ -# ScriptExtensions-13.0.0.txt -# Date: 2020-01-22, 00:07:43 GMT -# © 2020 Unicode®, Inc. +# ScriptExtensions-14.0.0.txt +# Date: 2021-06-04, 02:19:38 GMT +# © 2021 Unicode®, Inc. # Unicode and the Unicode Logo are registered trademarks of Unicode, Inc. in the U.S. and other countries. # For terms of use, see http://www.unicode.org/terms_of_use.html # @@ -11,10 +11,10 @@ # with more than one script, but with a limited number of scripts. # For each code point, there is one or more property values. Each such value is a Script property value. # For more information, see: -# UAX #24, Unicode Script Property: http://www.unicode.org/reports/tr24/ +# UAX #24, Unicode Script Property: https://www.unicode.org/reports/tr24/ # Especially the sections: -# http://www.unicode.org/reports/tr24/#Assignment_Script_Values -# http://www.unicode.org/reports/tr24/#Assignment_ScriptX_Values +# https://www.unicode.org/reports/tr24/#Assignment_Script_Values +# https://www.unicode.org/reports/tr24/#Assignment_ScriptX_Values # # Each Script_Extensions value in this file consists of a set # of one or more abbreviated Script property values. The ordering of the @@ -119,6 +119,14 @@ # ================================================ +# Script_Extensions=Syrc + +1DFA ; Syrc # Mn COMBINING DOT BELOW LEFT + +# Total code points: 1 + +# ================================================ + # Script_Extensions=Arab Copt 102E0 ; Arab Copt # Mn COPTIC EPACT THOUSANDS MARK @@ -136,6 +144,15 @@ # ================================================ +# Script_Extensions=Arab Nkoo + +FD3E ; Arab Nkoo # Pe ORNATE LEFT PARENTHESIS +FD3F ; Arab Nkoo # Ps ORNATE RIGHT PARENTHESIS + +# Total code points: 2 + +# ================================================ + # Script_Extensions=Arab Syrc 064B..0655 ; Arab Syrc # Mn [11] ARABIC FATHATAN..ARABIC HAMZA BELOW @@ -186,10 +203,10 @@ A9CF ; Bugi Java # Lm JAVANESE PANGRANGKEP # Script_Extensions=Cprt Linb -10100..10102 ; Cprt Linb # Po [3] AEGEAN WORD SEPARATOR LINE..AEGEAN CHECK MARK +10102 ; Cprt Linb # Po AEGEAN CHECK MARK 10137..1013F ; Cprt Linb # So [9] AEGEAN WEIGHT BASE UNIT..AEGEAN MEASURE THIRD SUBUNIT -# Total code points: 12 +# Total code points: 10 # ================================================ @@ -342,6 +359,14 @@ FF9E..FF9F ; Hira Kana # Lm [2] HALFWIDTH KATAKANA VOICED SOUND MARK..HALFW # ================================================ +# Script_Extensions=Mani Ougr + +10AF2 ; Mani Ougr # Po MANICHAEAN PUNCTUATION DOUBLE DOT WITHIN DOT + +# Total code points: 1 + +# ================================================ + # Script_Extensions=Mong Phag 1802..1803 ; Mong Phag # Po [2] MONGOLIAN COMMA..MONGOLIAN FULL STOP @@ -383,6 +408,14 @@ FF9E..FF9F ; Hira Kana # Lm [2] HALFWIDTH KATAKANA VOICED SOUND MARK..HALFW # ================================================ +# Script_Extensions=Cpmn Cprt Linb + +10100..10101 ; Cpmn Cprt Linb # Po [2] AEGEAN WORD SEPARATOR LINE..AEGEAN WORD SEPARATOR DOT + +# Total code points: 2 + +# ================================================ + # Script_Extensions=Cprt Lina Linb 10107..10133 ; Cprt Lina Linb # No [45] AEGEAN NUMBER ONE..AEGEAN NUMBER NINETY THOUSAND @@ -449,16 +482,6 @@ A92E ; Kali Latn Mymr # Po KAYAH LI SIGN CWI # ================================================ -# Script_Extensions=Arab Rohg Syrc Thaa Yezi - -060C ; Arab Rohg Syrc Thaa Yezi # Po ARABIC COMMA -061B ; Arab Rohg Syrc Thaa Yezi # Po ARABIC SEMICOLON -061F ; Arab Rohg Syrc Thaa Yezi # Po ARABIC QUESTION MARK - -# Total code points: 3 - -# ================================================ - # Script_Extensions=Bopo Hang Hani Hira Kana 3003 ; Bopo Hang Hani Hira Kana # Po DITTO MARK @@ -474,6 +497,15 @@ FE45..FE46 ; Bopo Hang Hani Hira Kana # Po [2] SESAME DOT..WHITE SESAME DOT # ================================================ +# Script_Extensions=Arab Nkoo Rohg Syrc Thaa Yezi + +060C ; Arab Nkoo Rohg Syrc Thaa Yezi # Po ARABIC COMMA +061B ; Arab Nkoo Rohg Syrc Thaa Yezi # Po ARABIC SEMICOLON + +# Total code points: 2 + +# ================================================ + # Script_Extensions=Bopo Hang Hani Hira Kana Yiii 3001..3002 ; Bopo Hang Hani Hira Kana Yiii # Po [2] IDEOGRAPHIC COMMA..IDEOGRAPHIC FULL STOP @@ -513,9 +545,9 @@ FF64..FF65 ; Bopo Hang Hani Hira Kana Yiii # Po [2] HALFWIDTH IDEOGRAPHIC C # ================================================ -# Script_Extensions=Adlm Arab Mand Mani Phlp Rohg Sogd Syrc +# Script_Extensions=Adlm Arab Nkoo Rohg Syrc Thaa Yezi -0640 ; Adlm Arab Mand Mani Phlp Rohg Sogd Syrc # Lm ARABIC TATWEEL +061F ; Adlm Arab Nkoo Rohg Syrc Thaa Yezi # Po ARABIC QUESTION MARK # Total code points: 1 @@ -529,6 +561,14 @@ FF64..FF65 ; Bopo Hang Hani Hira Kana Yiii # Po [2] HALFWIDTH IDEOGRAPHIC C # ================================================ +# Script_Extensions=Adlm Arab Mand Mani Ougr Phlp Rohg Sogd Syrc + +0640 ; Adlm Arab Mand Mani Ougr Phlp Rohg Sogd Syrc # Lm ARABIC TATWEEL + +# Total code points: 1 + +# ================================================ + # Script_Extensions=Deva Dogr Gujr Guru Khoj Kthi Mahj Modi Sind Takr Tirh A836..A837 ; Deva Dogr Gujr Guru Khoj Kthi Mahj Modi Sind Takr Tirh # So [2] NORTH INDIC QUARTER MARK..NORTH INDIC PLACEHOLDER MARK diff --git a/gnu/usr.bin/perl/lib/unicore/Scripts.txt b/gnu/usr.bin/perl/lib/unicore/Scripts.txt index e0363f54d15..a1383730119 100644 --- a/gnu/usr.bin/perl/lib/unicore/Scripts.txt +++ b/gnu/usr.bin/perl/lib/unicore/Scripts.txt @@ -1,16 +1,16 @@ -# Scripts-13.0.0.txt -# Date: 2020-01-22, 00:07:43 GMT -# © 2020 Unicode®, Inc. +# Scripts-14.0.0.txt +# Date: 2021-07-10, 00:35:31 GMT +# © 2021 Unicode®, Inc. # Unicode and the Unicode Logo are registered trademarks of Unicode, Inc. in the U.S. and other countries. # For terms of use, see http://www.unicode.org/terms_of_use.html # # Unicode Character Database # For documentation, see http://www.unicode.org/reports/tr44/ # For more information, see: -# UAX #24, Unicode Script Property: http://www.unicode.org/reports/tr24/ +# UAX #24, Unicode Script Property: https://www.unicode.org/reports/tr24/ # Especially the sections: -# http://www.unicode.org/reports/tr24/#Assignment_Script_Values -# http://www.unicode.org/reports/tr24/#Assignment_ScriptX_Values +# https://www.unicode.org/reports/tr24/#Assignment_Script_Values +# https://www.unicode.org/reports/tr24/#Assignment_ScriptX_Values # # ================================================ @@ -154,7 +154,7 @@ 208A..208C ; Common # Sm [3] SUBSCRIPT PLUS SIGN..SUBSCRIPT EQUALS SIGN 208D ; Common # Ps SUBSCRIPT LEFT PARENTHESIS 208E ; Common # Pe SUBSCRIPT RIGHT PARENTHESIS -20A0..20BF ; Common # Sc [32] EURO-CURRENCY SIGN..BITCOIN SIGN +20A0..20C0 ; Common # Sc [33] EURO-CURRENCY SIGN..SOM SIGN 2100..2101 ; Common # So [2] ACCOUNT OF..ADDRESSED TO THE SUBJECT 2102 ; Common # L& DOUBLE-STRUCK CAPITAL C 2103..2106 ; Common # So [4] DEGREE CELSIUS..CADA UNA @@ -347,7 +347,16 @@ 2E42 ; Common # Ps DOUBLE LOW-REVERSED-9 QUOTATION MARK 2E43..2E4F ; Common # Po [13] DASH WITH LEFT UPTURN..CORNISH VERSE DIVIDER 2E50..2E51 ; Common # So [2] CROSS PATTY WITH RIGHT CROSSBAR..CROSS PATTY WITH LEFT CROSSBAR -2E52 ; Common # Po TIRONIAN SIGN CAPITAL ET +2E52..2E54 ; Common # Po [3] TIRONIAN SIGN CAPITAL ET..MEDIEVAL QUESTION MARK +2E55 ; Common # Ps LEFT SQUARE BRACKET WITH STROKE +2E56 ; Common # Pe RIGHT SQUARE BRACKET WITH STROKE +2E57 ; Common # Ps LEFT SQUARE BRACKET WITH DOUBLE STROKE +2E58 ; Common # Pe RIGHT SQUARE BRACKET WITH DOUBLE STROKE +2E59 ; Common # Ps TOP HALF LEFT PARENTHESIS +2E5A ; Common # Pe TOP HALF RIGHT PARENTHESIS +2E5B ; Common # Ps BOTTOM HALF LEFT PARENTHESIS +2E5C ; Common # Pe BOTTOM HALF RIGHT PARENTHESIS +2E5D ; Common # Pd OBLIQUE HYPHEN 2FF0..2FFB ; Common # So [12] IDEOGRAPHIC DESCRIPTION CHARACTER LEFT TO RIGHT..IDEOGRAPHIC DESCRIPTION CHARACTER OVERLAID 3000 ; Common # Zs IDEOGRAPHIC SPACE 3001..3003 ; Common # Po [3] IDEOGRAPHIC COMMA..DITTO MARK @@ -511,9 +520,8 @@ FFFC..FFFD ; Common # So [2] OBJECT REPLACEMENT CHARACTER..REPLACEMENT CHAR 10190..1019C ; Common # So [13] ROMAN SEXTANS SIGN..ASCIA SYMBOL 101D0..101FC ; Common # So [45] PHAISTOS DISC SIGN PEDESTRIAN..PHAISTOS DISC SIGN WAVY BAND 102E1..102FB ; Common # No [27] COPTIC EPACT DIGIT ONE..COPTIC EPACT NUMBER NINE HUNDRED -16FE2 ; Common # Po OLD CHINESE HOOK MARK -16FE3 ; Common # Lm OLD CHINESE ITERATION MARK 1BCA0..1BCA3 ; Common # Cf [4] SHORTHAND FORMAT LETTER OVERLAP..SHORTHAND FORMAT UP STEP +1CF50..1CFC3 ; Common # So [116] ZNAMENNY NEUME KRYUK..ZNAMENNY NEUME PAUK 1D000..1D0F5 ; Common # So [246] BYZANTINE MUSICAL SYMBOL PSILI..BYZANTINE MUSICAL SYMBOL GORGON NEO KATO 1D100..1D126 ; Common # So [39] MUSICAL SYMBOL SINGLE BARLINE..MUSICAL SYMBOL DRUM CLEF-2 1D129..1D164 ; Common # So [60] MUSICAL SYMBOL MULTIPLE MEASURE REST..MUSICAL SYMBOL ONE HUNDRED TWENTY-EIGHTH NOTE @@ -523,7 +531,7 @@ FFFC..FFFD ; Common # So [2] OBJECT REPLACEMENT CHARACTER..REPLACEMENT CHAR 1D173..1D17A ; Common # Cf [8] MUSICAL SYMBOL BEGIN BEAM..MUSICAL SYMBOL END PHRASE 1D183..1D184 ; Common # So [2] MUSICAL SYMBOL ARPEGGIATO UP..MUSICAL SYMBOL ARPEGGIATO DOWN 1D18C..1D1A9 ; Common # So [30] MUSICAL SYMBOL RINFORZANDO..MUSICAL SYMBOL DEGREE SLASH -1D1AE..1D1E8 ; Common # So [59] MUSICAL SYMBOL PEDAL MARK..MUSICAL SYMBOL KIEVAN FLAT SIGN +1D1AE..1D1EA ; Common # So [61] MUSICAL SYMBOL PEDAL MARK..MUSICAL SYMBOL KORON 1D2E0..1D2F3 ; Common # No [20] MAYAN NUMERAL ZERO..MAYAN NUMERAL NINETEEN 1D300..1D356 ; Common # So [87] MONOGRAM FOR EARTH..TETRAGRAM FOR FOSTERING 1D360..1D378 ; Common # No [25] COUNTING ROD UNIT DIGIT ONE..TALLY MARK FIVE @@ -593,35 +601,36 @@ FFFC..FFFD ; Common # So [2] OBJECT REPLACEMENT CHARACTER..REPLACEMENT CHAR 1F300..1F3FA ; Common # So [251] CYCLONE..AMPHORA 1F3FB..1F3FF ; Common # Sk [5] EMOJI MODIFIER FITZPATRICK TYPE-1-2..EMOJI MODIFIER FITZPATRICK TYPE-6 1F400..1F6D7 ; Common # So [728] RAT..ELEVATOR -1F6E0..1F6EC ; Common # So [13] HAMMER AND WRENCH..AIRPLANE ARRIVING +1F6DD..1F6EC ; Common # So [16] PLAYGROUND SLIDE..AIRPLANE ARRIVING 1F6F0..1F6FC ; Common # So [13] SATELLITE..ROLLER SKATE 1F700..1F773 ; Common # So [116] ALCHEMICAL SYMBOL FOR QUINTESSENCE..ALCHEMICAL SYMBOL FOR HALF OUNCE 1F780..1F7D8 ; Common # So [89] BLACK LEFT-POINTING ISOSCELES RIGHT TRIANGLE..NEGATIVE CIRCLED SQUARE 1F7E0..1F7EB ; Common # So [12] LARGE ORANGE CIRCLE..LARGE BROWN SQUARE +1F7F0 ; Common # So HEAVY EQUALS SIGN 1F800..1F80B ; Common # So [12] LEFTWARDS ARROW WITH SMALL TRIANGLE ARROWHEAD..DOWNWARDS ARROW WITH LARGE TRIANGLE ARROWHEAD 1F810..1F847 ; Common # So [56] LEFTWARDS ARROW WITH SMALL EQUILATERAL ARROWHEAD..DOWNWARDS HEAVY ARROW 1F850..1F859 ; Common # So [10] LEFTWARDS SANS-SERIF ARROW..UP DOWN SANS-SERIF ARROW 1F860..1F887 ; Common # So [40] WIDE-HEADED LEFTWARDS LIGHT BARB ARROW..WIDE-HEADED SOUTH WEST VERY HEAVY BARB ARROW 1F890..1F8AD ; Common # So [30] LEFTWARDS TRIANGLE ARROWHEAD..WHITE ARROW SHAFT WIDTH TWO THIRDS 1F8B0..1F8B1 ; Common # So [2] ARROW POINTING UPWARDS THEN NORTH WEST..ARROW POINTING RIGHTWARDS THEN CURVING SOUTH WEST -1F900..1F978 ; Common # So [121] CIRCLED CROSS FORMEE WITH FOUR DOTS..DISGUISED FACE -1F97A..1F9CB ; Common # So [82] FACE WITH PLEADING EYES..BUBBLE TEA -1F9CD..1FA53 ; Common # So [135] STANDING PERSON..BLACK CHESS KNIGHT-BISHOP +1F900..1FA53 ; Common # So [340] CIRCLED CROSS FORMEE WITH FOUR DOTS..BLACK CHESS KNIGHT-BISHOP 1FA60..1FA6D ; Common # So [14] XIANGQI RED GENERAL..XIANGQI BLACK SOLDIER 1FA70..1FA74 ; Common # So [5] BALLET SHOES..THONG SANDAL -1FA78..1FA7A ; Common # So [3] DROP OF BLOOD..STETHOSCOPE +1FA78..1FA7C ; Common # So [5] DROP OF BLOOD..CRUTCH 1FA80..1FA86 ; Common # So [7] YO-YO..NESTING DOLLS -1FA90..1FAA8 ; Common # So [25] RINGED PLANET..ROCK -1FAB0..1FAB6 ; Common # So [7] FLY..FEATHER -1FAC0..1FAC2 ; Common # So [3] ANATOMICAL HEART..PEOPLE HUGGING -1FAD0..1FAD6 ; Common # So [7] BLUEBERRIES..TEAPOT +1FA90..1FAAC ; Common # So [29] RINGED PLANET..HAMSA +1FAB0..1FABA ; Common # So [11] FLY..NEST WITH EGGS +1FAC0..1FAC5 ; Common # So [6] ANATOMICAL HEART..PERSON WITH CROWN +1FAD0..1FAD9 ; Common # So [10] BLUEBERRIES..JAR +1FAE0..1FAE7 ; Common # So [8] MELTING FACE..BUBBLES +1FAF0..1FAF6 ; Common # So [7] HAND WITH INDEX FINGER AND THUMB CROSSED..HEART HANDS 1FB00..1FB92 ; Common # So [147] BLOCK SEXTANT-1..UPPER HALF INVERSE MEDIUM SHADE AND LOWER HALF BLOCK 1FB94..1FBCA ; Common # So [55] LEFT HALF INVERSE MEDIUM SHADE AND RIGHT HALF BLOCK..WHITE UP-POINTING CHEVRON 1FBF0..1FBF9 ; Common # Nd [10] SEGMENTED DIGIT ZERO..SEGMENTED DIGIT NINE E0001 ; Common # Cf LANGUAGE TAG E0020..E007F ; Common # Cf [96] TAG SPACE..CANCEL TAG -# Total code points: 8087 +# Total code points: 8252 # ================================================ @@ -664,8 +673,11 @@ A770 ; Latin # Lm MODIFIER LETTER US A771..A787 ; Latin # L& [23] LATIN SMALL LETTER DUM..LATIN SMALL LETTER INSULAR T A78B..A78E ; Latin # L& [4] LATIN CAPITAL LETTER SALTILLO..LATIN SMALL LETTER L WITH RETROFLEX HOOK AND BELT A78F ; Latin # Lo LATIN LETTER SINOLOGICAL DOT -A790..A7BF ; Latin # L& [48] LATIN CAPITAL LETTER N WITH DESCENDER..LATIN SMALL LETTER GLOTTAL U -A7C2..A7CA ; Latin # L& [9] LATIN CAPITAL LETTER ANGLICANA W..LATIN SMALL LETTER S WITH SHORT STROKE OVERLAY +A790..A7CA ; Latin # L& [59] LATIN CAPITAL LETTER N WITH DESCENDER..LATIN SMALL LETTER S WITH SHORT STROKE OVERLAY +A7D0..A7D1 ; Latin # L& [2] LATIN CAPITAL LETTER CLOSED INSULAR G..LATIN SMALL LETTER CLOSED INSULAR G +A7D3 ; Latin # L& LATIN SMALL LETTER DOUBLE THORN +A7D5..A7D9 ; Latin # L& [5] LATIN SMALL LETTER DOUBLE WYNN..LATIN SMALL LETTER SIGMOID S +A7F2..A7F4 ; Latin # Lm [3] MODIFIER LETTER CAPITAL C..MODIFIER LETTER CAPITAL Q A7F5..A7F6 ; Latin # L& [2] LATIN CAPITAL LETTER REVERSED HALF H..LATIN SMALL LETTER REVERSED HALF H A7F7 ; Latin # Lo LATIN EPIGRAPHIC LETTER SIDEWAYS I A7F8..A7F9 ; Latin # Lm [2] MODIFIER LETTER CAPITAL H WITH STROKE..MODIFIER LETTER SMALL LIGATURE OE @@ -679,8 +691,14 @@ AB69 ; Latin # Lm MODIFIER LETTER SMALL TURNED W FB00..FB06 ; Latin # L& [7] LATIN SMALL LIGATURE FF..LATIN SMALL LIGATURE ST FF21..FF3A ; Latin # L& [26] FULLWIDTH LATIN CAPITAL LETTER A..FULLWIDTH LATIN CAPITAL LETTER Z FF41..FF5A ; Latin # L& [26] FULLWIDTH LATIN SMALL LETTER A..FULLWIDTH LATIN SMALL LETTER Z +10780..10785 ; Latin # Lm [6] MODIFIER LETTER SMALL CAPITAL AA..MODIFIER LETTER SMALL B WITH HOOK +10787..107B0 ; Latin # Lm [42] MODIFIER LETTER SMALL DZ DIGRAPH..MODIFIER LETTER SMALL V WITH RIGHT HOOK +107B2..107BA ; Latin # Lm [9] MODIFIER LETTER SMALL CAPITAL Y..MODIFIER LETTER SMALL S WITH CURL +1DF00..1DF09 ; Latin # L& [10] LATIN SMALL LETTER FENG DIGRAPH WITH TRILL..LATIN SMALL LETTER T WITH HOOK AND RETROFLEX HOOK +1DF0A ; Latin # Lo LATIN LETTER RETROFLEX CLICK WITH RETROFLEX HOOK +1DF0B..1DF1E ; Latin # L& [20] LATIN SMALL LETTER ESH WITH DOUBLE BAR..LATIN SMALL LETTER S WITH CURL -# Total code points: 1374 +# Total code points: 1475 # ================================================ @@ -820,7 +838,7 @@ FB46..FB4F ; Hebrew # Lo [10] HEBREW LETTER TSADI WITH DAGESH..HEBREW LIGATU 060E..060F ; Arabic # So [2] ARABIC POETIC VERSE SIGN..ARABIC SIGN MISRA 0610..061A ; Arabic # Mn [11] ARABIC SIGN SALLALLAHOU ALAYHE WASSALLAM..ARABIC SMALL KASRA 061C ; Arabic # Cf ARABIC LETTER MARK -061E ; Arabic # Po ARABIC TRIPLE DOT PUNCTUATION MARK +061D..061E ; Arabic # Po [2] ARABIC END OF TEXT MARK..ARABIC TRIPLE DOT PUNCTUATION MARK 0620..063F ; Arabic # Lo [32] ARABIC LETTER KASHMIRI YEH..ARABIC LETTER FARSI YEH WITH THREE DOTS ABOVE 0641..064A ; Arabic # Lo [10] ARABIC LETTER FEH..ARABIC LETTER YEH 0656..065F ; Arabic # Mn [10] ARABIC SUBSCRIPT ALEF..ARABIC WAVY HAMZA BELOW @@ -843,18 +861,25 @@ FB46..FB4F ; Hebrew # Lo [10] HEBREW LETTER TSADI WITH DAGESH..HEBREW LIGATU 06FD..06FE ; Arabic # So [2] ARABIC SIGN SINDHI AMPERSAND..ARABIC SIGN SINDHI POSTPOSITION MEN 06FF ; Arabic # Lo ARABIC LETTER HEH WITH INVERTED V 0750..077F ; Arabic # Lo [48] ARABIC LETTER BEH WITH THREE DOTS HORIZONTALLY BELOW..ARABIC LETTER KAF WITH TWO DOTS ABOVE -08A0..08B4 ; Arabic # Lo [21] ARABIC LETTER BEH WITH SMALL V BELOW..ARABIC LETTER KAF WITH DOT BELOW -08B6..08C7 ; Arabic # Lo [18] ARABIC LETTER BEH WITH SMALL MEEM ABOVE..ARABIC LETTER LAM WITH SMALL ARABIC LETTER TAH ABOVE -08D3..08E1 ; Arabic # Mn [15] ARABIC SMALL LOW WAW..ARABIC SMALL HIGH SIGN SAFHA +0870..0887 ; Arabic # Lo [24] ARABIC LETTER ALEF WITH ATTACHED FATHA..ARABIC BASELINE ROUND DOT +0888 ; Arabic # Sk ARABIC RAISED ROUND DOT +0889..088E ; Arabic # Lo [6] ARABIC LETTER NOON WITH INVERTED SMALL V..ARABIC VERTICAL TAIL +0890..0891 ; Arabic # Cf [2] ARABIC POUND MARK ABOVE..ARABIC PIASTRE MARK ABOVE +0898..089F ; Arabic # Mn [8] ARABIC SMALL HIGH WORD AL-JUZ..ARABIC HALF MADDA OVER MADDA +08A0..08C8 ; Arabic # Lo [41] ARABIC LETTER BEH WITH SMALL V BELOW..ARABIC LETTER GRAF +08C9 ; Arabic # Lm ARABIC SMALL FARSI YEH +08CA..08E1 ; Arabic # Mn [24] ARABIC SMALL HIGH FARSI YEH..ARABIC SMALL HIGH SIGN SAFHA 08E3..08FF ; Arabic # Mn [29] ARABIC TURNED DAMMA BELOW..ARABIC MARK SIDEWAYS NOON GHUNNA FB50..FBB1 ; Arabic # Lo [98] ARABIC LETTER ALEF WASLA ISOLATED FORM..ARABIC LETTER YEH BARREE WITH HAMZA ABOVE FINAL FORM -FBB2..FBC1 ; Arabic # Sk [16] ARABIC SYMBOL DOT ABOVE..ARABIC SYMBOL SMALL TAH BELOW +FBB2..FBC2 ; Arabic # Sk [17] ARABIC SYMBOL DOT ABOVE..ARABIC SYMBOL WASLA ABOVE FBD3..FD3D ; Arabic # Lo [363] ARABIC LETTER NG ISOLATED FORM..ARABIC LIGATURE ALEF WITH FATHATAN ISOLATED FORM +FD40..FD4F ; Arabic # So [16] ARABIC LIGATURE RAHIMAHU ALLAAH..ARABIC LIGATURE RAHIMAHUM ALLAAH FD50..FD8F ; Arabic # Lo [64] ARABIC LIGATURE TEH WITH JEEM WITH MEEM INITIAL FORM..ARABIC LIGATURE MEEM WITH KHAH WITH MEEM INITIAL FORM FD92..FDC7 ; Arabic # Lo [54] ARABIC LIGATURE MEEM WITH JEEM WITH KHAH INITIAL FORM..ARABIC LIGATURE NOON WITH JEEM WITH YEH FINAL FORM +FDCF ; Arabic # So ARABIC LIGATURE SALAAMUHU ALAYNAA FDF0..FDFB ; Arabic # Lo [12] ARABIC LIGATURE SALLA USED AS KORANIC STOP SIGN ISOLATED FORM..ARABIC LIGATURE JALLAJALALOUHOU FDFC ; Arabic # Sc RIAL SIGN -FDFD ; Arabic # So ARABIC LIGATURE BISMILLAH AR-RAHMAN AR-RAHEEM +FDFD..FDFF ; Arabic # So [3] ARABIC LIGATURE BISMILLAH AR-RAHMAN AR-RAHEEM..ARABIC LIGATURE AZZA WA JALL FE70..FE74 ; Arabic # Lo [5] ARABIC FATHATAN ISOLATED FORM..ARABIC KASRATAN ISOLATED FORM FE76..FEFC ; Arabic # Lo [135] ARABIC FATHA ISOLATED FORM..ARABIC LIGATURE LAM WITH ALEF FINAL FORM 10E60..10E7E ; Arabic # No [31] RUMI DIGIT ONE..RUMI FRACTION TWO THIRDS @@ -893,7 +918,7 @@ FE76..FEFC ; Arabic # Lo [135] ARABIC FATHA ISOLATED FORM..ARABIC LIGATURE LA 1EEAB..1EEBB ; Arabic # Lo [17] ARABIC MATHEMATICAL DOUBLE-STRUCK LAM..ARABIC MATHEMATICAL DOUBLE-STRUCK GHAIN 1EEF0..1EEF1 ; Arabic # Sm [2] ARABIC MATHEMATICAL OPERATOR MEEM WITH HAH WITH TATWEEL..ARABIC MATHEMATICAL OPERATOR HAH WITH DAL -# Total code points: 1291 +# Total code points: 1365 # ================================================ @@ -1113,6 +1138,7 @@ A8FF ; Devanagari # Mn DEVANAGARI VOWEL SIGN AY 0C0E..0C10 ; Telugu # Lo [3] TELUGU LETTER E..TELUGU LETTER AI 0C12..0C28 ; Telugu # Lo [23] TELUGU LETTER O..TELUGU LETTER NA 0C2A..0C39 ; Telugu # Lo [16] TELUGU LETTER PA..TELUGU LETTER HA +0C3C ; Telugu # Mn TELUGU SIGN NUKTA 0C3D ; Telugu # Lo TELUGU SIGN AVAGRAHA 0C3E..0C40 ; Telugu # Mn [3] TELUGU VOWEL SIGN AA..TELUGU VOWEL SIGN II 0C41..0C44 ; Telugu # Mc [4] TELUGU VOWEL SIGN U..TELUGU VOWEL SIGN VOCALIC RR @@ -1120,6 +1146,7 @@ A8FF ; Devanagari # Mn DEVANAGARI VOWEL SIGN AY 0C4A..0C4D ; Telugu # Mn [4] TELUGU VOWEL SIGN O..TELUGU SIGN VIRAMA 0C55..0C56 ; Telugu # Mn [2] TELUGU LENGTH MARK..TELUGU AI LENGTH MARK 0C58..0C5A ; Telugu # Lo [3] TELUGU LETTER TSA..TELUGU LETTER RRRA +0C5D ; Telugu # Lo TELUGU LETTER NAKAARA POLLU 0C60..0C61 ; Telugu # Lo [2] TELUGU LETTER VOCALIC RR..TELUGU LETTER VOCALIC LL 0C62..0C63 ; Telugu # Mn [2] TELUGU VOWEL SIGN VOCALIC L..TELUGU VOWEL SIGN VOCALIC LL 0C66..0C6F ; Telugu # Nd [10] TELUGU DIGIT ZERO..TELUGU DIGIT NINE @@ -1127,7 +1154,7 @@ A8FF ; Devanagari # Mn DEVANAGARI VOWEL SIGN AY 0C78..0C7E ; Telugu # No [7] TELUGU FRACTION DIGIT ZERO FOR ODD POWERS OF FOUR..TELUGU FRACTION DIGIT THREE FOR EVEN POWERS OF FOUR 0C7F ; Telugu # So TELUGU SIGN TUUMU -# Total code points: 98 +# Total code points: 100 # ================================================ @@ -1150,13 +1177,13 @@ A8FF ; Devanagari # Mn DEVANAGARI VOWEL SIGN AY 0CCA..0CCB ; Kannada # Mc [2] KANNADA VOWEL SIGN O..KANNADA VOWEL SIGN OO 0CCC..0CCD ; Kannada # Mn [2] KANNADA VOWEL SIGN AU..KANNADA SIGN VIRAMA 0CD5..0CD6 ; Kannada # Mc [2] KANNADA LENGTH MARK..KANNADA AI LENGTH MARK -0CDE ; Kannada # Lo KANNADA LETTER FA +0CDD..0CDE ; Kannada # Lo [2] KANNADA LETTER NAKAARA POLLU..KANNADA LETTER FA 0CE0..0CE1 ; Kannada # Lo [2] KANNADA LETTER VOCALIC RR..KANNADA LETTER VOCALIC LL 0CE2..0CE3 ; Kannada # Mn [2] KANNADA VOWEL SIGN VOCALIC L..KANNADA VOWEL SIGN VOCALIC LL 0CE6..0CEF ; Kannada # Nd [10] KANNADA DIGIT ZERO..KANNADA DIGIT NINE 0CF1..0CF2 ; Kannada # Lo [2] KANNADA SIGN JIHVAMULIYA..KANNADA SIGN UPADHMANIYA -# Total code points: 89 +# Total code points: 90 # ================================================ @@ -1411,8 +1438,12 @@ AB09..AB0E ; Ethiopic # Lo [6] ETHIOPIC SYLLABLE DDHU..ETHIOPIC SYLLABLE DD AB11..AB16 ; Ethiopic # Lo [6] ETHIOPIC SYLLABLE DZU..ETHIOPIC SYLLABLE DZO AB20..AB26 ; Ethiopic # Lo [7] ETHIOPIC SYLLABLE CCHHA..ETHIOPIC SYLLABLE CCHHO AB28..AB2E ; Ethiopic # Lo [7] ETHIOPIC SYLLABLE BBA..ETHIOPIC SYLLABLE BBO +1E7E0..1E7E6 ; Ethiopic # Lo [7] ETHIOPIC SYLLABLE HHYA..ETHIOPIC SYLLABLE HHYO +1E7E8..1E7EB ; Ethiopic # Lo [4] ETHIOPIC SYLLABLE GURAGE HHWA..ETHIOPIC SYLLABLE HHWE +1E7ED..1E7EE ; Ethiopic # Lo [2] ETHIOPIC SYLLABLE GURAGE MWI..ETHIOPIC SYLLABLE GURAGE MWEE +1E7F0..1E7FE ; Ethiopic # Lo [15] ETHIOPIC SYLLABLE GURAGE QWI..ETHIOPIC SYLLABLE GURAGE PWEE -# Total code points: 495 +# Total code points: 523 # ================================================ @@ -1430,8 +1461,9 @@ AB70..ABBF ; Cherokee # L& [80] CHEROKEE SMALL LETTER A..CHEROKEE SMALL LETT 166E ; Canadian_Aboriginal # Po CANADIAN SYLLABICS FULL STOP 166F..167F ; Canadian_Aboriginal # Lo [17] CANADIAN SYLLABICS QAI..CANADIAN SYLLABICS BLACKFOOT W 18B0..18F5 ; Canadian_Aboriginal # Lo [70] CANADIAN SYLLABICS OY..CANADIAN SYLLABICS CARRIER DENTAL S +11AB0..11ABF ; Canadian_Aboriginal # Lo [16] CANADIAN SYLLABICS NATTILIK HI..CANADIAN SYLLABICS SPA -# Total code points: 710 +# Total code points: 726 # ================================================ @@ -1480,6 +1512,7 @@ AB70..ABBF ; Cherokee # L& [80] CHEROKEE SMALL LETTER A..CHEROKEE SMALL LETT 1807..180A ; Mongolian # Po [4] MONGOLIAN SIBE SYLLABLE BOUNDARY MARKER..MONGOLIAN NIRUGU 180B..180D ; Mongolian # Mn [3] MONGOLIAN FREE VARIATION SELECTOR ONE..MONGOLIAN FREE VARIATION SELECTOR THREE 180E ; Mongolian # Cf MONGOLIAN VOWEL SEPARATOR +180F ; Mongolian # Mn MONGOLIAN FREE VARIATION SELECTOR FOUR 1810..1819 ; Mongolian # Nd [10] MONGOLIAN DIGIT ZERO..MONGOLIAN DIGIT NINE 1820..1842 ; Mongolian # Lo [35] MONGOLIAN LETTER A..MONGOLIAN LETTER CHI 1843 ; Mongolian # Lm MONGOLIAN LETTER TODO LONG VOWEL SIGN @@ -1491,18 +1524,18 @@ AB70..ABBF ; Cherokee # L& [80] CHEROKEE SMALL LETTER A..CHEROKEE SMALL LETT 18AA ; Mongolian # Lo MONGOLIAN LETTER MANCHU ALI GALI LHA 11660..1166C ; Mongolian # Po [13] MONGOLIAN BIRGA WITH ORNAMENT..MONGOLIAN TURNED SWIRL BIRGA WITH DOUBLE ORNAMENT -# Total code points: 167 +# Total code points: 168 # ================================================ 3041..3096 ; Hiragana # Lo [86] HIRAGANA LETTER SMALL A..HIRAGANA LETTER SMALL KE 309D..309E ; Hiragana # Lm [2] HIRAGANA ITERATION MARK..HIRAGANA VOICED ITERATION MARK 309F ; Hiragana # Lo HIRAGANA DIGRAPH YORI -1B001..1B11E ; Hiragana # Lo [286] HIRAGANA LETTER ARCHAIC YE..HENTAIGANA LETTER N-MU-MO-2 +1B001..1B11F ; Hiragana # Lo [287] HIRAGANA LETTER ARCHAIC YE..HIRAGANA LETTER ARCHAIC WU 1B150..1B152 ; Hiragana # Lo [3] HIRAGANA LETTER SMALL WI..HIRAGANA LETTER SMALL WO 1F200 ; Hiragana # So SQUARE HIRAGANA HOKA -# Total code points: 379 +# Total code points: 380 # ================================================ @@ -1514,10 +1547,14 @@ AB70..ABBF ; Cherokee # L& [80] CHEROKEE SMALL LETTER A..CHEROKEE SMALL LETT 3300..3357 ; Katakana # So [88] SQUARE APAATO..SQUARE WATTO FF66..FF6F ; Katakana # Lo [10] HALFWIDTH KATAKANA LETTER WO..HALFWIDTH KATAKANA LETTER SMALL TU FF71..FF9D ; Katakana # Lo [45] HALFWIDTH KATAKANA LETTER A..HALFWIDTH KATAKANA LETTER N +1AFF0..1AFF3 ; Katakana # Lm [4] KATAKANA LETTER MINNAN TONE-2..KATAKANA LETTER MINNAN TONE-5 +1AFF5..1AFFB ; Katakana # Lm [7] KATAKANA LETTER MINNAN TONE-7..KATAKANA LETTER MINNAN NASALIZED TONE-5 +1AFFD..1AFFE ; Katakana # Lm [2] KATAKANA LETTER MINNAN NASALIZED TONE-7..KATAKANA LETTER MINNAN NASALIZED TONE-8 1B000 ; Katakana # Lo KATAKANA LETTER ARCHAIC E +1B120..1B122 ; Katakana # Lo [3] KATAKANA LETTER ARCHAIC YI..KATAKANA LETTER ARCHAIC WU 1B164..1B167 ; Katakana # Lo [4] KATAKANA LETTER SMALL WI..KATAKANA LETTER SMALL N -# Total code points: 304 +# Total code points: 320 # ================================================ @@ -1538,19 +1575,21 @@ FF71..FF9D ; Katakana # Lo [45] HALFWIDTH KATAKANA LETTER A..HALFWIDTH KATAK 3038..303A ; Han # Nl [3] HANGZHOU NUMERAL TEN..HANGZHOU NUMERAL THIRTY 303B ; Han # Lm VERTICAL IDEOGRAPHIC ITERATION MARK 3400..4DBF ; Han # Lo [6592] CJK UNIFIED IDEOGRAPH-3400..CJK UNIFIED IDEOGRAPH-4DBF -4E00..9FFC ; Han # Lo [20989] CJK UNIFIED IDEOGRAPH-4E00..CJK UNIFIED IDEOGRAPH-9FFC +4E00..9FFF ; Han # Lo [20992] CJK UNIFIED IDEOGRAPH-4E00..CJK UNIFIED IDEOGRAPH-9FFF F900..FA6D ; Han # Lo [366] CJK COMPATIBILITY IDEOGRAPH-F900..CJK COMPATIBILITY IDEOGRAPH-FA6D FA70..FAD9 ; Han # Lo [106] CJK COMPATIBILITY IDEOGRAPH-FA70..CJK COMPATIBILITY IDEOGRAPH-FAD9 +16FE2 ; Han # Po OLD CHINESE HOOK MARK +16FE3 ; Han # Lm OLD CHINESE ITERATION MARK 16FF0..16FF1 ; Han # Mc [2] VIETNAMESE ALTERNATE READING MARK CA..VIETNAMESE ALTERNATE READING MARK NHAY -20000..2A6DD ; Han # Lo [42718] CJK UNIFIED IDEOGRAPH-20000..CJK UNIFIED IDEOGRAPH-2A6DD -2A700..2B734 ; Han # Lo [4149] CJK UNIFIED IDEOGRAPH-2A700..CJK UNIFIED IDEOGRAPH-2B734 +20000..2A6DF ; Han # Lo [42720] CJK UNIFIED IDEOGRAPH-20000..CJK UNIFIED IDEOGRAPH-2A6DF +2A700..2B738 ; Han # Lo [4153] CJK UNIFIED IDEOGRAPH-2A700..CJK UNIFIED IDEOGRAPH-2B738 2B740..2B81D ; Han # Lo [222] CJK UNIFIED IDEOGRAPH-2B740..CJK UNIFIED IDEOGRAPH-2B81D 2B820..2CEA1 ; Han # Lo [5762] CJK UNIFIED IDEOGRAPH-2B820..CJK UNIFIED IDEOGRAPH-2CEA1 2CEB0..2EBE0 ; Han # Lo [7473] CJK UNIFIED IDEOGRAPH-2CEB0..CJK UNIFIED IDEOGRAPH-2EBE0 2F800..2FA1D ; Han # Lo [542] CJK COMPATIBILITY IDEOGRAPH-2F800..CJK COMPATIBILITY IDEOGRAPH-2FA1D 30000..3134A ; Han # Lo [4939] CJK UNIFIED IDEOGRAPH-30000..CJK UNIFIED IDEOGRAPH-3134A -# Total code points: 94204 +# Total code points: 94215 # ================================================ @@ -1593,15 +1632,14 @@ A490..A4C6 ; Yi # So [55] YI RADICAL QOT..YI RADICAL KE 0951..0954 ; Inherited # Mn [4] DEVANAGARI STRESS SIGN UDATTA..DEVANAGARI ACUTE ACCENT 1AB0..1ABD ; Inherited # Mn [14] COMBINING DOUBLED CIRCUMFLEX ACCENT..COMBINING PARENTHESES BELOW 1ABE ; Inherited # Me COMBINING PARENTHESES OVERLAY -1ABF..1AC0 ; Inherited # Mn [2] COMBINING LATIN SMALL LETTER W BELOW..COMBINING LATIN SMALL LETTER TURNED W BELOW +1ABF..1ACE ; Inherited # Mn [16] COMBINING LATIN SMALL LETTER W BELOW..COMBINING LATIN SMALL LETTER INSULAR T 1CD0..1CD2 ; Inherited # Mn [3] VEDIC TONE KARSHANA..VEDIC TONE PRENKHA 1CD4..1CE0 ; Inherited # Mn [13] VEDIC SIGN YAJURVEDIC MIDLINE SVARITA..VEDIC TONE RIGVEDIC KASHMIRI INDEPENDENT SVARITA 1CE2..1CE8 ; Inherited # Mn [7] VEDIC SIGN VISARGA SVARITA..VEDIC SIGN VISARGA ANUDATTA WITH TAIL 1CED ; Inherited # Mn VEDIC SIGN TIRYAK 1CF4 ; Inherited # Mn VEDIC TONE CANDRA ABOVE 1CF8..1CF9 ; Inherited # Mn [2] VEDIC TONE RING ABOVE..VEDIC TONE DOUBLE RING ABOVE -1DC0..1DF9 ; Inherited # Mn [58] COMBINING DOTTED GRAVE ACCENT..COMBINING WIDE INVERTED BRIDGE BELOW -1DFB..1DFF ; Inherited # Mn [5] COMBINING DELETION MARK..COMBINING RIGHT ARROWHEAD AND DOWN ARROWHEAD BELOW +1DC0..1DFF ; Inherited # Mn [64] COMBINING DOTTED GRAVE ACCENT..COMBINING RIGHT ARROWHEAD AND DOWN ARROWHEAD BELOW 200C..200D ; Inherited # Cf [2] ZERO WIDTH NON-JOINER..ZERO WIDTH JOINER 20D0..20DC ; Inherited # Mn [13] COMBINING LEFT HARPOON ABOVE..COMBINING FOUR DOTS ABOVE 20DD..20E0 ; Inherited # Me [4] COMBINING ENCLOSING CIRCLE..COMBINING ENCLOSING CIRCLE BACKSLASH @@ -1615,26 +1653,30 @@ FE20..FE2D ; Inherited # Mn [14] COMBINING LIGATURE LEFT HALF..COMBINING CON 101FD ; Inherited # Mn PHAISTOS DISC SIGN COMBINING OBLIQUE STROKE 102E0 ; Inherited # Mn COPTIC EPACT THOUSANDS MARK 1133B ; Inherited # Mn COMBINING BINDU BELOW +1CF00..1CF2D ; Inherited # Mn [46] ZNAMENNY COMBINING MARK GORAZDO NIZKO S KRYZHEM ON LEFT..ZNAMENNY COMBINING MARK KRYZH ON LEFT +1CF30..1CF46 ; Inherited # Mn [23] ZNAMENNY COMBINING TONAL RANGE MARK MRACHNO..ZNAMENNY PRIZNAK MODIFIER ROG 1D167..1D169 ; Inherited # Mn [3] MUSICAL SYMBOL COMBINING TREMOLO-1..MUSICAL SYMBOL COMBINING TREMOLO-3 1D17B..1D182 ; Inherited # Mn [8] MUSICAL SYMBOL COMBINING ACCENT..MUSICAL SYMBOL COMBINING LOURE 1D185..1D18B ; Inherited # Mn [7] MUSICAL SYMBOL COMBINING DOIT..MUSICAL SYMBOL COMBINING TRIPLE TONGUE 1D1AA..1D1AD ; Inherited # Mn [4] MUSICAL SYMBOL COMBINING DOWN BOW..MUSICAL SYMBOL COMBINING SNAP PIZZICATO E0100..E01EF ; Inherited # Mn [240] VARIATION SELECTOR-17..VARIATION SELECTOR-256 -# Total code points: 573 +# Total code points: 657 # ================================================ -1700..170C ; Tagalog # Lo [13] TAGALOG LETTER A..TAGALOG LETTER YA -170E..1711 ; Tagalog # Lo [4] TAGALOG LETTER LA..TAGALOG LETTER HA +1700..1711 ; Tagalog # Lo [18] TAGALOG LETTER A..TAGALOG LETTER HA 1712..1714 ; Tagalog # Mn [3] TAGALOG VOWEL SIGN I..TAGALOG SIGN VIRAMA +1715 ; Tagalog # Mc TAGALOG SIGN PAMUDPOD +171F ; Tagalog # Lo TAGALOG LETTER ARCHAIC RA -# Total code points: 20 +# Total code points: 23 # ================================================ 1720..1731 ; Hanunoo # Lo [18] HANUNOO LETTER A..HANUNOO LETTER HA -1732..1734 ; Hanunoo # Mn [3] HANUNOO VOWEL SIGN I..HANUNOO SIGN PAMUDPOD +1732..1733 ; Hanunoo # Mn [2] HANUNOO VOWEL SIGN I..HANUNOO VOWEL SIGN U +1734 ; Hanunoo # Mc HANUNOO SIGN PAMUDPOD # Total code points: 21 @@ -1762,15 +1804,14 @@ E0100..E01EF ; Inherited # Mn [240] VARIATION SELECTOR-17..VARIATION SELECTOR-2 # ================================================ -2C00..2C2E ; Glagolitic # L& [47] GLAGOLITIC CAPITAL LETTER AZU..GLAGOLITIC CAPITAL LETTER LATINATE MYSLITE -2C30..2C5E ; Glagolitic # L& [47] GLAGOLITIC SMALL LETTER AZU..GLAGOLITIC SMALL LETTER LATINATE MYSLITE +2C00..2C5F ; Glagolitic # L& [96] GLAGOLITIC CAPITAL LETTER AZU..GLAGOLITIC SMALL LETTER CAUDATE CHRIVI 1E000..1E006 ; Glagolitic # Mn [7] COMBINING GLAGOLITIC LETTER AZU..COMBINING GLAGOLITIC LETTER ZHIVETE 1E008..1E018 ; Glagolitic # Mn [17] COMBINING GLAGOLITIC LETTER ZEMLJA..COMBINING GLAGOLITIC LETTER HERU 1E01B..1E021 ; Glagolitic # Mn [7] COMBINING GLAGOLITIC LETTER SHTA..COMBINING GLAGOLITIC LETTER YATI 1E023..1E024 ; Glagolitic # Mn [2] COMBINING GLAGOLITIC LETTER YU..COMBINING GLAGOLITIC LETTER SMALL YUS 1E026..1E02A ; Glagolitic # Mn [5] COMBINING GLAGOLITIC LETTER YO..COMBINING GLAGOLITIC LETTER FITA -# Total code points: 132 +# Total code points: 134 # ================================================ @@ -1836,14 +1877,15 @@ A82C ; Syloti_Nagri # Mn SYLOTI NAGRI SIGN ALTERNATE HASANTA 1B3D..1B41 ; Balinese # Mc [5] BALINESE VOWEL SIGN LA LENGA TEDUNG..BALINESE VOWEL SIGN TALING REPA TEDUNG 1B42 ; Balinese # Mn BALINESE VOWEL SIGN PEPET 1B43..1B44 ; Balinese # Mc [2] BALINESE VOWEL SIGN PEPET TEDUNG..BALINESE ADEG ADEG -1B45..1B4B ; Balinese # Lo [7] BALINESE LETTER KAF SASAK..BALINESE LETTER ASYURA SASAK +1B45..1B4C ; Balinese # Lo [8] BALINESE LETTER KAF SASAK..BALINESE LETTER ARCHAIC JNYA 1B50..1B59 ; Balinese # Nd [10] BALINESE DIGIT ZERO..BALINESE DIGIT NINE 1B5A..1B60 ; Balinese # Po [7] BALINESE PANTI..BALINESE PAMENENG 1B61..1B6A ; Balinese # So [10] BALINESE MUSICAL SYMBOL DONG..BALINESE MUSICAL SYMBOL DANG GEDE 1B6B..1B73 ; Balinese # Mn [9] BALINESE MUSICAL SYMBOL COMBINING TEGEH..BALINESE MUSICAL SYMBOL COMBINING GONG 1B74..1B7C ; Balinese # So [9] BALINESE MUSICAL SYMBOL RIGHT-HAND OPEN DUG..BALINESE MUSICAL SYMBOL LEFT-HAND OPEN PING +1B7D..1B7E ; Balinese # Po [2] BALINESE PANTI LANTANG..BALINESE PAMADA LANTANG -# Total code points: 121 +# Total code points: 124 # ================================================ @@ -2178,9 +2220,10 @@ ABF0..ABF9 ; Meetei_Mayek # Nd [10] MEETEI MAYEK DIGIT ZERO..MEETEI MAYEK DI 110BB..110BC ; Kaithi # Po [2] KAITHI ABBREVIATION SIGN..KAITHI ENUMERATION SIGN 110BD ; Kaithi # Cf KAITHI NUMBER SIGN 110BE..110C1 ; Kaithi # Po [4] KAITHI SECTION MARK..KAITHI DOUBLE DANDA +110C2 ; Kaithi # Mn KAITHI VOWEL SIGN VOCALIC R 110CD ; Kaithi # Cf KAITHI NUMBER SIGN ABOVE -# Total code points: 67 +# Total code points: 68 # ================================================ @@ -2207,9 +2250,13 @@ ABF0..ABF9 ; Meetei_Mayek # Nd [10] MEETEI MAYEK DIGIT ZERO..MEETEI MAYEK DI 11047..1104D ; Brahmi # Po [7] BRAHMI DANDA..BRAHMI PUNCTUATION LOTUS 11052..11065 ; Brahmi # No [20] BRAHMI NUMBER ONE..BRAHMI NUMBER ONE THOUSAND 11066..1106F ; Brahmi # Nd [10] BRAHMI DIGIT ZERO..BRAHMI DIGIT NINE +11070 ; Brahmi # Mn BRAHMI SIGN OLD TAMIL VIRAMA +11071..11072 ; Brahmi # Lo [2] BRAHMI LETTER OLD TAMIL SHORT E..BRAHMI LETTER OLD TAMIL SHORT O +11073..11074 ; Brahmi # Mn [2] BRAHMI VOWEL SIGN OLD TAMIL SHORT E..BRAHMI VOWEL SIGN OLD TAMIL SHORT O +11075 ; Brahmi # Lo BRAHMI LETTER OLD TAMIL LLA 1107F ; Brahmi # Mn BRAHMI NUMBER JOINER -# Total code points: 109 +# Total code points: 115 # ================================================ @@ -2301,9 +2348,10 @@ ABF0..ABF9 ; Meetei_Mayek # Nd [10] MEETEI MAYEK DIGIT ZERO..MEETEI MAYEK DI 116B6 ; Takri # Mc TAKRI SIGN VIRAMA 116B7 ; Takri # Mn TAKRI SIGN NUKTA 116B8 ; Takri # Lo TAKRI LETTER ARCHAIC KHA +116B9 ; Takri # Po TAKRI ABBREVIATION SIGN 116C0..116C9 ; Takri # Nd [10] TAKRI DIGIT ZERO..TAKRI DIGIT NINE -# Total code points: 67 +# Total code points: 68 # ================================================ @@ -2561,8 +2609,9 @@ ABF0..ABF9 ; Meetei_Mayek # Nd [10] MEETEI MAYEK DIGIT ZERO..MEETEI MAYEK DI 1173A..1173B ; Ahom # No [2] AHOM NUMBER TEN..AHOM NUMBER TWENTY 1173C..1173E ; Ahom # Po [3] AHOM SIGN SMALL SECTION..AHOM SIGN RULAI 1173F ; Ahom # So AHOM SYMBOL VI +11740..11746 ; Ahom # Lo [7] AHOM LETTER CA..AHOM LETTER LLA -# Total code points: 58 +# Total code points: 65 # ================================================ @@ -2897,4 +2946,46 @@ ABF0..ABF9 ; Meetei_Mayek # Nd [10] MEETEI MAYEK DIGIT ZERO..MEETEI MAYEK DI # Total code points: 47 +# ================================================ + +12F90..12FF0 ; Cypro_Minoan # Lo [97] CYPRO-MINOAN SIGN CM001..CYPRO-MINOAN SIGN CM114 +12FF1..12FF2 ; Cypro_Minoan # Po [2] CYPRO-MINOAN SIGN CM301..CYPRO-MINOAN SIGN CM302 + +# Total code points: 99 + +# ================================================ + +10F70..10F81 ; Old_Uyghur # Lo [18] OLD UYGHUR LETTER ALEPH..OLD UYGHUR LETTER LESH +10F82..10F85 ; Old_Uyghur # Mn [4] OLD UYGHUR COMBINING DOT ABOVE..OLD UYGHUR COMBINING TWO DOTS BELOW +10F86..10F89 ; Old_Uyghur # Po [4] OLD UYGHUR PUNCTUATION BAR..OLD UYGHUR PUNCTUATION FOUR DOTS + +# Total code points: 26 + +# ================================================ + +16A70..16ABE ; Tangsa # Lo [79] TANGSA LETTER OZ..TANGSA LETTER ZA +16AC0..16AC9 ; Tangsa # Nd [10] TANGSA DIGIT ZERO..TANGSA DIGIT NINE + +# Total code points: 89 + +# ================================================ + +1E290..1E2AD ; Toto # Lo [30] TOTO LETTER PA..TOTO LETTER A +1E2AE ; Toto # Mn TOTO SIGN RISING TONE + +# Total code points: 31 + +# ================================================ + +10570..1057A ; Vithkuqi # L& [11] VITHKUQI CAPITAL LETTER A..VITHKUQI CAPITAL LETTER GA +1057C..1058A ; Vithkuqi # L& [15] VITHKUQI CAPITAL LETTER HA..VITHKUQI CAPITAL LETTER RE +1058C..10592 ; Vithkuqi # L& [7] VITHKUQI CAPITAL LETTER SE..VITHKUQI CAPITAL LETTER XE +10594..10595 ; Vithkuqi # L& [2] VITHKUQI CAPITAL LETTER Y..VITHKUQI CAPITAL LETTER ZE +10597..105A1 ; Vithkuqi # L& [11] VITHKUQI SMALL LETTER A..VITHKUQI SMALL LETTER GA +105A3..105B1 ; Vithkuqi # L& [15] VITHKUQI SMALL LETTER HA..VITHKUQI SMALL LETTER RE +105B3..105B9 ; Vithkuqi # L& [7] VITHKUQI SMALL LETTER SE..VITHKUQI SMALL LETTER XE +105BB..105BC ; Vithkuqi # L& [2] VITHKUQI SMALL LETTER Y..VITHKUQI SMALL LETTER ZE + +# Total code points: 70 + # EOF diff --git a/gnu/usr.bin/perl/lib/unicore/SpecialCasing.txt b/gnu/usr.bin/perl/lib/unicore/SpecialCasing.txt index 2a1a5a1d6b1..1c2e968a8c4 100644 --- a/gnu/usr.bin/perl/lib/unicore/SpecialCasing.txt +++ b/gnu/usr.bin/perl/lib/unicore/SpecialCasing.txt @@ -1,6 +1,6 @@ -# SpecialCasing-13.0.0.txt -# Date: 2019-09-08, 23:31:24 GMT -# © 2019 Unicode®, Inc. +# SpecialCasing-14.0.0.txt +# Date: 2021-03-08, 19:35:55 GMT +# © 2021 Unicode®, Inc. # Unicode and the Unicode Logo are registered trademarks of Unicode, Inc. in the U.S. and other countries. # For terms of use, see http://www.unicode.org/terms_of_use.html # diff --git a/gnu/usr.bin/perl/lib/unicore/StandardizedVariants.txt b/gnu/usr.bin/perl/lib/unicore/StandardizedVariants.txt index ee386cd9203..5c3c0149ba5 100644 --- a/gnu/usr.bin/perl/lib/unicore/StandardizedVariants.txt +++ b/gnu/usr.bin/perl/lib/unicore/StandardizedVariants.txt @@ -1,7 +1,7 @@ -# StandardizedVariants-13.0.0.txt -# Date: 2019-05-21, 17:56:00 GMT [KW, LI, RP] -# © 2019 Unicode®, Inc. -# For terms of use, see http://www.unicode.org/terms_of_use.html +# StandardizedVariants-14.0.0.txt +# Date: 2021-01-26, 18:20:00 GMT [KW, LI, RP] +# © 2021 Unicode®, Inc. +# For terms of use, see https://www.unicode.org/terms_of_use.html # # Specification of the variation sequences that are defined in the # Unicode Standard. @@ -26,13 +26,13 @@ # # For more information on standardized variation sequences, # see Section 23.4, Variation Selectors, -# in The Unicode Standard, Version 13.0. +# in The Unicode Standard, Version 14.0. # # For more information on the Ideographic Variation Database, -# see http://www.unicode.org/ivd/ +# see https://www.unicode.org/ivd/ # # For more information on emoji variation sequences, -# see http://www.unicode.org/reports/tr51/ +# see https://www.unicode.org/reports/tr51/ # # Format: # Field 0: the variation sequence @@ -77,6 +77,62 @@ 2ACC FE00; with stroke through bottom members; # SUPERSET OF ABOVE NOT EQUAL TO FF10 FE00; short diagonal stroke form; # FULLWIDTH DIGIT ZERO +# Mathematical alphabet script variants + +1D49C FE00; chancery style; # MATHEMATICAL SCRIPT CAPITAL A +212C FE00; chancery style; # SCRIPT CAPITAL B +1D49E FE00; chancery style; # MATHEMATICAL SCRIPT CAPITAL C +1D49F FE00; chancery style; # MATHEMATICAL SCRIPT CAPITAL D +2130 FE00; chancery style; # SCRIPT CAPITAL E +2131 FE00; chancery style; # SCRIPT CAPITAL F +1D4A2 FE00; chancery style; # MATHEMATICAL SCRIPT CAPITAL G +210B FE00; chancery style; # SCRIPT CAPITAL H +2110 FE00; chancery style; # SCRIPT CAPITAL I +1D4A5 FE00; chancery style; # MATHEMATICAL SCRIPT CAPITAL J +1D4A6 FE00; chancery style; # MATHEMATICAL SCRIPT CAPITAL K +2112 FE00; chancery style; # SCRIPT CAPITAL L +2133 FE00; chancery style; # SCRIPT CAPITAL M +1D4A9 FE00; chancery style; # MATHEMATICAL SCRIPT CAPITAL N +1D4AA FE00; chancery style; # MATHEMATICAL SCRIPT CAPITAL O +1D4AB FE00; chancery style; # MATHEMATICAL SCRIPT CAPITAL P +1D4AC FE00; chancery style; # MATHEMATICAL SCRIPT CAPITAL Q +211B FE00; chancery style; # SCRIPT CAPITAL R +1D4AE FE00; chancery style; # MATHEMATICAL SCRIPT CAPITAL S +1D4AF FE00; chancery style; # MATHEMATICAL SCRIPT CAPITAL T +1D4B0 FE00; chancery style; # MATHEMATICAL SCRIPT CAPITAL U +1D4B1 FE00; chancery style; # MATHEMATICAL SCRIPT CAPITAL V +1D4B2 FE00; chancery style; # MATHEMATICAL SCRIPT CAPITAL W +1D4B3 FE00; chancery style; # MATHEMATICAL SCRIPT CAPITAL X +1D4B4 FE00; chancery style; # MATHEMATICAL SCRIPT CAPITAL Y +1D4B5 FE00; chancery style; # MATHEMATICAL SCRIPT CAPITAL Z + +1D49C FE01; roundhand style; # MATHEMATICAL SCRIPT CAPITAL A +212C FE01; roundhand style; # SCRIPT CAPITAL B +1D49E FE01; roundhand style; # MATHEMATICAL SCRIPT CAPITAL C +1D49F FE01; roundhand style; # MATHEMATICAL SCRIPT CAPITAL D +2130 FE01; roundhand style; # SCRIPT CAPITAL E +2131 FE01; roundhand style; # SCRIPT CAPITAL F +1D4A2 FE01; roundhand style; # MATHEMATICAL SCRIPT CAPITAL G +210B FE01; roundhand style; # SCRIPT CAPITAL H +2110 FE01; roundhand style; # SCRIPT CAPITAL I +1D4A5 FE01; roundhand style; # MATHEMATICAL SCRIPT CAPITAL J +1D4A6 FE01; roundhand style; # MATHEMATICAL SCRIPT CAPITAL K +2112 FE01; roundhand style; # SCRIPT CAPITAL L +2133 FE01; roundhand style; # SCRIPT CAPITAL M +1D4A9 FE01; roundhand style; # MATHEMATICAL SCRIPT CAPITAL N +1D4AA FE01; roundhand style; # MATHEMATICAL SCRIPT CAPITAL O +1D4AB FE01; roundhand style; # MATHEMATICAL SCRIPT CAPITAL P +1D4AC FE01; roundhand style; # MATHEMATICAL SCRIPT CAPITAL Q +211B FE01; roundhand style; # SCRIPT CAPITAL R +1D4AE FE01; roundhand style; # MATHEMATICAL SCRIPT CAPITAL S +1D4AF FE01; roundhand style; # MATHEMATICAL SCRIPT CAPITAL T +1D4B0 FE01; roundhand style; # MATHEMATICAL SCRIPT CAPITAL U +1D4B1 FE01; roundhand style; # MATHEMATICAL SCRIPT CAPITAL V +1D4B2 FE01; roundhand style; # MATHEMATICAL SCRIPT CAPITAL W +1D4B3 FE01; roundhand style; # MATHEMATICAL SCRIPT CAPITAL X +1D4B4 FE01; roundhand style; # MATHEMATICAL SCRIPT CAPITAL Y +1D4B5 FE01; roundhand style; # MATHEMATICAL SCRIPT CAPITAL Z + # East Asian punctuation positional variants 3001 FE00; corner-justified form; # IDEOGRAPHIC COMMA diff --git a/gnu/usr.bin/perl/lib/unicore/To/Digit.pl b/gnu/usr.bin/perl/lib/unicore/To/Digit.pl deleted file mode 100644 index 0d53accc0fc..00000000000 --- a/gnu/usr.bin/perl/lib/unicore/To/Digit.pl +++ /dev/null @@ -1,674 +0,0 @@ -# !!!!!!! DO NOT EDIT THIS FILE !!!!!!! -# This file is machine-generated by lib/unicore/mktables from the Unicode -# database, Version 13.0.0. Any changes made here will be lost! - -# !!!!!!! IT IS DEPRECATED TO USE THIS FILE !!!!!!! - -# This file is for internal use by core Perl only. It is retained for -# backwards compatibility with applications that may have come to rely on it, -# but its format and even its name or existence are subject to change without -# notice in a future Perl version. Don't use it directly. Instead, its -# contents are now retrievable through a stable API in the Unicode::UCD -# module: Unicode::UCD::prop_invmap('Perl_Decimal_Digit') (Values for individual -# code points can be retrieved via Unicode::UCD::charprop()); - - - -# The name this table is to be known by, with the format of the mappings in -# the main body of the table, and what all code points missing from this file -# map to. -$Unicode::UCD::SwashInfo{'ToDigit'}{'format'} = 'd'; # single decimal digit -$Unicode::UCD::SwashInfo{'ToDigit'}{'missing'} = ''; # code point maps to the null string - -return <<'END'; -0030 0 -0031 1 -0032 2 -0033 3 -0034 4 -0035 5 -0036 6 -0037 7 -0038 8 -0039 9 -0660 0 -0661 1 -0662 2 -0663 3 -0664 4 -0665 5 -0666 6 -0667 7 -0668 8 -0669 9 -06F0 0 -06F1 1 -06F2 2 -06F3 3 -06F4 4 -06F5 5 -06F6 6 -06F7 7 -06F8 8 -06F9 9 -07C0 0 -07C1 1 -07C2 2 -07C3 3 -07C4 4 -07C5 5 -07C6 6 -07C7 7 -07C8 8 -07C9 9 -0966 0 -0967 1 -0968 2 -0969 3 -096A 4 -096B 5 -096C 6 -096D 7 -096E 8 -096F 9 -09E6 0 -09E7 1 -09E8 2 -09E9 3 -09EA 4 -09EB 5 -09EC 6 -09ED 7 -09EE 8 -09EF 9 -0A66 0 -0A67 1 -0A68 2 -0A69 3 -0A6A 4 -0A6B 5 -0A6C 6 -0A6D 7 -0A6E 8 -0A6F 9 -0AE6 0 -0AE7 1 -0AE8 2 -0AE9 3 -0AEA 4 -0AEB 5 -0AEC 6 -0AED 7 -0AEE 8 -0AEF 9 -0B66 0 -0B67 1 -0B68 2 -0B69 3 -0B6A 4 -0B6B 5 -0B6C 6 -0B6D 7 -0B6E 8 -0B6F 9 -0BE6 0 -0BE7 1 -0BE8 2 -0BE9 3 -0BEA 4 -0BEB 5 -0BEC 6 -0BED 7 -0BEE 8 -0BEF 9 -0C66 0 -0C67 1 -0C68 2 -0C69 3 -0C6A 4 -0C6B 5 -0C6C 6 -0C6D 7 -0C6E 8 -0C6F 9 -0CE6 0 -0CE7 1 -0CE8 2 -0CE9 3 -0CEA 4 -0CEB 5 -0CEC 6 -0CED 7 -0CEE 8 -0CEF 9 -0D66 0 -0D67 1 -0D68 2 -0D69 3 -0D6A 4 -0D6B 5 -0D6C 6 -0D6D 7 -0D6E 8 -0D6F 9 -0DE6 0 -0DE7 1 -0DE8 2 -0DE9 3 -0DEA 4 -0DEB 5 -0DEC 6 -0DED 7 -0DEE 8 -0DEF 9 -0E50 0 -0E51 1 -0E52 2 -0E53 3 -0E54 4 -0E55 5 -0E56 6 -0E57 7 -0E58 8 -0E59 9 -0ED0 0 -0ED1 1 -0ED2 2 -0ED3 3 -0ED4 4 -0ED5 5 -0ED6 6 -0ED7 7 -0ED8 8 -0ED9 9 -0F20 0 -0F21 1 -0F22 2 -0F23 3 -0F24 4 -0F25 5 -0F26 6 -0F27 7 -0F28 8 -0F29 9 -1040 0 -1041 1 -1042 2 -1043 3 -1044 4 -1045 5 -1046 6 -1047 7 -1048 8 -1049 9 -1090 0 -1091 1 -1092 2 -1093 3 -1094 4 -1095 5 -1096 6 -1097 7 -1098 8 -1099 9 -17E0 0 -17E1 1 -17E2 2 -17E3 3 -17E4 4 -17E5 5 -17E6 6 -17E7 7 -17E8 8 -17E9 9 -1810 0 -1811 1 -1812 2 -1813 3 -1814 4 -1815 5 -1816 6 -1817 7 -1818 8 -1819 9 -1946 0 -1947 1 -1948 2 -1949 3 -194A 4 -194B 5 -194C 6 -194D 7 -194E 8 -194F 9 -19D0 0 -19D1 1 -19D2 2 -19D3 3 -19D4 4 -19D5 5 -19D6 6 -19D7 7 -19D8 8 -19D9 9 -1A80 0 -1A81 1 -1A82 2 -1A83 3 -1A84 4 -1A85 5 -1A86 6 -1A87 7 -1A88 8 -1A89 9 -1A90 0 -1A91 1 -1A92 2 -1A93 3 -1A94 4 -1A95 5 -1A96 6 -1A97 7 -1A98 8 -1A99 9 -1B50 0 -1B51 1 -1B52 2 -1B53 3 -1B54 4 -1B55 5 -1B56 6 -1B57 7 -1B58 8 -1B59 9 -1BB0 0 -1BB1 1 -1BB2 2 -1BB3 3 -1BB4 4 -1BB5 5 -1BB6 6 -1BB7 7 -1BB8 8 -1BB9 9 -1C40 0 -1C41 1 -1C42 2 -1C43 3 -1C44 4 -1C45 5 -1C46 6 -1C47 7 -1C48 8 -1C49 9 -1C50 0 -1C51 1 -1C52 2 -1C53 3 -1C54 4 -1C55 5 -1C56 6 -1C57 7 -1C58 8 -1C59 9 -A620 0 -A621 1 -A622 2 -A623 3 -A624 4 -A625 5 -A626 6 -A627 7 -A628 8 -A629 9 -A8D0 0 -A8D1 1 -A8D2 2 -A8D3 3 -A8D4 4 -A8D5 5 -A8D6 6 -A8D7 7 -A8D8 8 -A8D9 9 -A900 0 -A901 1 -A902 2 -A903 3 -A904 4 -A905 5 -A906 6 -A907 7 -A908 8 -A909 9 -A9D0 0 -A9D1 1 -A9D2 2 -A9D3 3 -A9D4 4 -A9D5 5 -A9D6 6 -A9D7 7 -A9D8 8 -A9D9 9 -A9F0 0 -A9F1 1 -A9F2 2 -A9F3 3 -A9F4 4 -A9F5 5 -A9F6 6 -A9F7 7 -A9F8 8 -A9F9 9 -AA50 0 -AA51 1 -AA52 2 -AA53 3 -AA54 4 -AA55 5 -AA56 6 -AA57 7 -AA58 8 -AA59 9 -ABF0 0 -ABF1 1 -ABF2 2 -ABF3 3 -ABF4 4 -ABF5 5 -ABF6 6 -ABF7 7 -ABF8 8 -ABF9 9 -FF10 0 -FF11 1 -FF12 2 -FF13 3 -FF14 4 -FF15 5 -FF16 6 -FF17 7 -FF18 8 -FF19 9 -104A0 0 -104A1 1 -104A2 2 -104A3 3 -104A4 4 -104A5 5 -104A6 6 -104A7 7 -104A8 8 -104A9 9 -10D30 0 -10D31 1 -10D32 2 -10D33 3 -10D34 4 -10D35 5 -10D36 6 -10D37 7 -10D38 8 -10D39 9 -11066 0 -11067 1 -11068 2 -11069 3 -1106A 4 -1106B 5 -1106C 6 -1106D 7 -1106E 8 -1106F 9 -110F0 0 -110F1 1 -110F2 2 -110F3 3 -110F4 4 -110F5 5 -110F6 6 -110F7 7 -110F8 8 -110F9 9 -11136 0 -11137 1 -11138 2 -11139 3 -1113A 4 -1113B 5 -1113C 6 -1113D 7 -1113E 8 -1113F 9 -111D0 0 -111D1 1 -111D2 2 -111D3 3 -111D4 4 -111D5 5 -111D6 6 -111D7 7 -111D8 8 -111D9 9 -112F0 0 -112F1 1 -112F2 2 -112F3 3 -112F4 4 -112F5 5 -112F6 6 -112F7 7 -112F8 8 -112F9 9 -11450 0 -11451 1 -11452 2 -11453 3 -11454 4 -11455 5 -11456 6 -11457 7 -11458 8 -11459 9 -114D0 0 -114D1 1 -114D2 2 -114D3 3 -114D4 4 -114D5 5 -114D6 6 -114D7 7 -114D8 8 -114D9 9 -11650 0 -11651 1 -11652 2 -11653 3 -11654 4 -11655 5 -11656 6 -11657 7 -11658 8 -11659 9 -116C0 0 -116C1 1 -116C2 2 -116C3 3 -116C4 4 -116C5 5 -116C6 6 -116C7 7 -116C8 8 -116C9 9 -11730 0 -11731 1 -11732 2 -11733 3 -11734 4 -11735 5 -11736 6 -11737 7 -11738 8 -11739 9 -118E0 0 -118E1 1 -118E2 2 -118E3 3 -118E4 4 -118E5 5 -118E6 6 -118E7 7 -118E8 8 -118E9 9 -11950 0 -11951 1 -11952 2 -11953 3 -11954 4 -11955 5 -11956 6 -11957 7 -11958 8 -11959 9 -11C50 0 -11C51 1 -11C52 2 -11C53 3 -11C54 4 -11C55 5 -11C56 6 -11C57 7 -11C58 8 -11C59 9 -11D50 0 -11D51 1 -11D52 2 -11D53 3 -11D54 4 -11D55 5 -11D56 6 -11D57 7 -11D58 8 -11D59 9 -11DA0 0 -11DA1 1 -11DA2 2 -11DA3 3 -11DA4 4 -11DA5 5 -11DA6 6 -11DA7 7 -11DA8 8 -11DA9 9 -16A60 0 -16A61 1 -16A62 2 -16A63 3 -16A64 4 -16A65 5 -16A66 6 -16A67 7 -16A68 8 -16A69 9 -16B50 0 -16B51 1 -16B52 2 -16B53 3 -16B54 4 -16B55 5 -16B56 6 -16B57 7 -16B58 8 -16B59 9 -1D7CE 0 -1D7CF 1 -1D7D0 2 -1D7D1 3 -1D7D2 4 -1D7D3 5 -1D7D4 6 -1D7D5 7 -1D7D6 8 -1D7D7 9 -1D7D8 0 -1D7D9 1 -1D7DA 2 -1D7DB 3 -1D7DC 4 -1D7DD 5 -1D7DE 6 -1D7DF 7 -1D7E0 8 -1D7E1 9 -1D7E2 0 -1D7E3 1 -1D7E4 2 -1D7E5 3 -1D7E6 4 -1D7E7 5 -1D7E8 6 -1D7E9 7 -1D7EA 8 -1D7EB 9 -1D7EC 0 -1D7ED 1 -1D7EE 2 -1D7EF 3 -1D7F0 4 -1D7F1 5 -1D7F2 6 -1D7F3 7 -1D7F4 8 -1D7F5 9 -1D7F6 0 -1D7F7 1 -1D7F8 2 -1D7F9 3 -1D7FA 4 -1D7FB 5 -1D7FC 6 -1D7FD 7 -1D7FE 8 -1D7FF 9 -1E140 0 -1E141 1 -1E142 2 -1E143 3 -1E144 4 -1E145 5 -1E146 6 -1E147 7 -1E148 8 -1E149 9 -1E2F0 0 -1E2F1 1 -1E2F2 2 -1E2F3 3 -1E2F4 4 -1E2F5 5 -1E2F6 6 -1E2F7 7 -1E2F8 8 -1E2F9 9 -1E950 0 -1E951 1 -1E952 2 -1E953 3 -1E954 4 -1E955 5 -1E956 6 -1E957 7 -1E958 8 -1E959 9 -1FBF0 0 -1FBF1 1 -1FBF2 2 -1FBF3 3 -1FBF4 4 -1FBF5 5 -1FBF6 6 -1FBF7 7 -1FBF8 8 -1FBF9 9 -END diff --git a/gnu/usr.bin/perl/lib/unicore/To/Fold.pl b/gnu/usr.bin/perl/lib/unicore/To/Fold.pl deleted file mode 100644 index 1361cb218f1..00000000000 --- a/gnu/usr.bin/perl/lib/unicore/To/Fold.pl +++ /dev/null @@ -1,1553 +0,0 @@ -# !!!!!!! DO NOT EDIT THIS FILE !!!!!!! -# This file is machine-generated by lib/unicore/mktables from the Unicode -# database, Version 13.0.0. Any changes made here will be lost! - -# !!!!!!! IT IS DEPRECATED TO USE THIS FILE !!!!!!! - -# This file is for internal use by core Perl only. It is retained for -# backwards compatibility with applications that may have come to rely on it, -# but its format and even its name or existence are subject to change without -# notice in a future Perl version. Don't use it directly. Instead, its -# contents are now retrievable through a stable API in the Unicode::UCD -# module: Unicode::UCD::prop_invmap('Case_Folding') (Values for individual -# code points can be retrieved via Unicode::UCD::charprop()); - - - -# The name this table is to be known by, with the format of the mappings in -# the main body of the table, and what all code points missing from this file -# map to. -$Unicode::UCD::SwashInfo{'ToFold'}{'format'} = 'x'; # non-negative hex whole number; a code point -$Unicode::UCD::SwashInfo{'ToFold'}{'specials_name'} = 'Unicode::UCD::ToSpecFold'; # Name of hash of special mappings -$Unicode::UCD::SwashInfo{'ToFold'}{'missing'} = ''; # code point maps to itself - -# Some code points require special handling because their mappings are each to -# multiple code points. These do not appear in the main body, but are defined -# in the hash below. - -# Each key is the string of N bytes that together make up the UTF-8 encoding -# for the code point. (i.e. the same as looking at the code point's UTF-8 -# under "use bytes"). Each value is the UTF-8 of the translation, for speed. -%Unicode::UCD::ToSpecFold = ( -"\xC3\x9F" => "\x{0073}\x{0073}", # U+00DF => 0073 0073 -"\xC4\xB0" => "\x{0069}\x{0307}", # U+0130 => 0069 0307 -"\xC5\x89" => "\x{02BC}\x{006E}", # U+0149 => 02BC 006E -"\xC7\xB0" => "\x{006A}\x{030C}", # U+01F0 => 006A 030C -"\xCE\x90" => "\x{03B9}\x{0308}\x{0301}", # U+0390 => 03B9 0308 0301 -"\xCE\xB0" => "\x{03C5}\x{0308}\x{0301}", # U+03B0 => 03C5 0308 0301 -"\xD6\x87" => "\x{0565}\x{0582}", # U+0587 => 0565 0582 -"\xE1\xBA\x96" => "\x{0068}\x{0331}", # U+1E96 => 0068 0331 -"\xE1\xBA\x97" => "\x{0074}\x{0308}", # U+1E97 => 0074 0308 -"\xE1\xBA\x98" => "\x{0077}\x{030A}", # U+1E98 => 0077 030A -"\xE1\xBA\x99" => "\x{0079}\x{030A}", # U+1E99 => 0079 030A -"\xE1\xBA\x9A" => "\x{0061}\x{02BE}", # U+1E9A => 0061 02BE -"\xE1\xBA\x9E" => "\x{0073}\x{0073}", # U+1E9E => 0073 0073 -"\xE1\xBD\x90" => "\x{03C5}\x{0313}", # U+1F50 => 03C5 0313 -"\xE1\xBD\x92" => "\x{03C5}\x{0313}\x{0300}", # U+1F52 => 03C5 0313 0300 -"\xE1\xBD\x94" => "\x{03C5}\x{0313}\x{0301}", # U+1F54 => 03C5 0313 0301 -"\xE1\xBD\x96" => "\x{03C5}\x{0313}\x{0342}", # U+1F56 => 03C5 0313 0342 -"\xE1\xBE\x80" => "\x{1F00}\x{03B9}", # U+1F80 => 1F00 03B9 -"\xE1\xBE\x81" => "\x{1F01}\x{03B9}", # U+1F81 => 1F01 03B9 -"\xE1\xBE\x82" => "\x{1F02}\x{03B9}", # U+1F82 => 1F02 03B9 -"\xE1\xBE\x83" => "\x{1F03}\x{03B9}", # U+1F83 => 1F03 03B9 -"\xE1\xBE\x84" => "\x{1F04}\x{03B9}", # U+1F84 => 1F04 03B9 -"\xE1\xBE\x85" => "\x{1F05}\x{03B9}", # U+1F85 => 1F05 03B9 -"\xE1\xBE\x86" => "\x{1F06}\x{03B9}", # U+1F86 => 1F06 03B9 -"\xE1\xBE\x87" => "\x{1F07}\x{03B9}", # U+1F87 => 1F07 03B9 -"\xE1\xBE\x88" => "\x{1F00}\x{03B9}", # U+1F88 => 1F00 03B9 -"\xE1\xBE\x89" => "\x{1F01}\x{03B9}", # U+1F89 => 1F01 03B9 -"\xE1\xBE\x8A" => "\x{1F02}\x{03B9}", # U+1F8A => 1F02 03B9 -"\xE1\xBE\x8B" => "\x{1F03}\x{03B9}", # U+1F8B => 1F03 03B9 -"\xE1\xBE\x8C" => "\x{1F04}\x{03B9}", # U+1F8C => 1F04 03B9 -"\xE1\xBE\x8D" => "\x{1F05}\x{03B9}", # U+1F8D => 1F05 03B9 -"\xE1\xBE\x8E" => "\x{1F06}\x{03B9}", # U+1F8E => 1F06 03B9 -"\xE1\xBE\x8F" => "\x{1F07}\x{03B9}", # U+1F8F => 1F07 03B9 -"\xE1\xBE\x90" => "\x{1F20}\x{03B9}", # U+1F90 => 1F20 03B9 -"\xE1\xBE\x91" => "\x{1F21}\x{03B9}", # U+1F91 => 1F21 03B9 -"\xE1\xBE\x92" => "\x{1F22}\x{03B9}", # U+1F92 => 1F22 03B9 -"\xE1\xBE\x93" => "\x{1F23}\x{03B9}", # U+1F93 => 1F23 03B9 -"\xE1\xBE\x94" => "\x{1F24}\x{03B9}", # U+1F94 => 1F24 03B9 -"\xE1\xBE\x95" => "\x{1F25}\x{03B9}", # U+1F95 => 1F25 03B9 -"\xE1\xBE\x96" => "\x{1F26}\x{03B9}", # U+1F96 => 1F26 03B9 -"\xE1\xBE\x97" => "\x{1F27}\x{03B9}", # U+1F97 => 1F27 03B9 -"\xE1\xBE\x98" => "\x{1F20}\x{03B9}", # U+1F98 => 1F20 03B9 -"\xE1\xBE\x99" => "\x{1F21}\x{03B9}", # U+1F99 => 1F21 03B9 -"\xE1\xBE\x9A" => "\x{1F22}\x{03B9}", # U+1F9A => 1F22 03B9 -"\xE1\xBE\x9B" => "\x{1F23}\x{03B9}", # U+1F9B => 1F23 03B9 -"\xE1\xBE\x9C" => "\x{1F24}\x{03B9}", # U+1F9C => 1F24 03B9 -"\xE1\xBE\x9D" => "\x{1F25}\x{03B9}", # U+1F9D => 1F25 03B9 -"\xE1\xBE\x9E" => "\x{1F26}\x{03B9}", # U+1F9E => 1F26 03B9 -"\xE1\xBE\x9F" => "\x{1F27}\x{03B9}", # U+1F9F => 1F27 03B9 -"\xE1\xBE\xA0" => "\x{1F60}\x{03B9}", # U+1FA0 => 1F60 03B9 -"\xE1\xBE\xA1" => "\x{1F61}\x{03B9}", # U+1FA1 => 1F61 03B9 -"\xE1\xBE\xA2" => "\x{1F62}\x{03B9}", # U+1FA2 => 1F62 03B9 -"\xE1\xBE\xA3" => "\x{1F63}\x{03B9}", # U+1FA3 => 1F63 03B9 -"\xE1\xBE\xA4" => "\x{1F64}\x{03B9}", # U+1FA4 => 1F64 03B9 -"\xE1\xBE\xA5" => "\x{1F65}\x{03B9}", # U+1FA5 => 1F65 03B9 -"\xE1\xBE\xA6" => "\x{1F66}\x{03B9}", # U+1FA6 => 1F66 03B9 -"\xE1\xBE\xA7" => "\x{1F67}\x{03B9}", # U+1FA7 => 1F67 03B9 -"\xE1\xBE\xA8" => "\x{1F60}\x{03B9}", # U+1FA8 => 1F60 03B9 -"\xE1\xBE\xA9" => "\x{1F61}\x{03B9}", # U+1FA9 => 1F61 03B9 -"\xE1\xBE\xAA" => "\x{1F62}\x{03B9}", # U+1FAA => 1F62 03B9 -"\xE1\xBE\xAB" => "\x{1F63}\x{03B9}", # U+1FAB => 1F63 03B9 -"\xE1\xBE\xAC" => "\x{1F64}\x{03B9}", # U+1FAC => 1F64 03B9 -"\xE1\xBE\xAD" => "\x{1F65}\x{03B9}", # U+1FAD => 1F65 03B9 -"\xE1\xBE\xAE" => "\x{1F66}\x{03B9}", # U+1FAE => 1F66 03B9 -"\xE1\xBE\xAF" => "\x{1F67}\x{03B9}", # U+1FAF => 1F67 03B9 -"\xE1\xBE\xB2" => "\x{1F70}\x{03B9}", # U+1FB2 => 1F70 03B9 -"\xE1\xBE\xB3" => "\x{03B1}\x{03B9}", # U+1FB3 => 03B1 03B9 -"\xE1\xBE\xB4" => "\x{03AC}\x{03B9}", # U+1FB4 => 03AC 03B9 -"\xE1\xBE\xB6" => "\x{03B1}\x{0342}", # U+1FB6 => 03B1 0342 -"\xE1\xBE\xB7" => "\x{03B1}\x{0342}\x{03B9}", # U+1FB7 => 03B1 0342 03B9 -"\xE1\xBE\xBC" => "\x{03B1}\x{03B9}", # U+1FBC => 03B1 03B9 -"\xE1\xBF\x82" => "\x{1F74}\x{03B9}", # U+1FC2 => 1F74 03B9 -"\xE1\xBF\x83" => "\x{03B7}\x{03B9}", # U+1FC3 => 03B7 03B9 -"\xE1\xBF\x84" => "\x{03AE}\x{03B9}", # U+1FC4 => 03AE 03B9 -"\xE1\xBF\x86" => "\x{03B7}\x{0342}", # U+1FC6 => 03B7 0342 -"\xE1\xBF\x87" => "\x{03B7}\x{0342}\x{03B9}", # U+1FC7 => 03B7 0342 03B9 -"\xE1\xBF\x8C" => "\x{03B7}\x{03B9}", # U+1FCC => 03B7 03B9 -"\xE1\xBF\x92" => "\x{03B9}\x{0308}\x{0300}", # U+1FD2 => 03B9 0308 0300 -"\xE1\xBF\x93" => "\x{03B9}\x{0308}\x{0301}", # U+1FD3 => 03B9 0308 0301 -"\xE1\xBF\x96" => "\x{03B9}\x{0342}", # U+1FD6 => 03B9 0342 -"\xE1\xBF\x97" => "\x{03B9}\x{0308}\x{0342}", # U+1FD7 => 03B9 0308 0342 -"\xE1\xBF\xA2" => "\x{03C5}\x{0308}\x{0300}", # U+1FE2 => 03C5 0308 0300 -"\xE1\xBF\xA3" => "\x{03C5}\x{0308}\x{0301}", # U+1FE3 => 03C5 0308 0301 -"\xE1\xBF\xA4" => "\x{03C1}\x{0313}", # U+1FE4 => 03C1 0313 -"\xE1\xBF\xA6" => "\x{03C5}\x{0342}", # U+1FE6 => 03C5 0342 -"\xE1\xBF\xA7" => "\x{03C5}\x{0308}\x{0342}", # U+1FE7 => 03C5 0308 0342 -"\xE1\xBF\xB2" => "\x{1F7C}\x{03B9}", # U+1FF2 => 1F7C 03B9 -"\xE1\xBF\xB3" => "\x{03C9}\x{03B9}", # U+1FF3 => 03C9 03B9 -"\xE1\xBF\xB4" => "\x{03CE}\x{03B9}", # U+1FF4 => 03CE 03B9 -"\xE1\xBF\xB6" => "\x{03C9}\x{0342}", # U+1FF6 => 03C9 0342 -"\xE1\xBF\xB7" => "\x{03C9}\x{0342}\x{03B9}", # U+1FF7 => 03C9 0342 03B9 -"\xE1\xBF\xBC" => "\x{03C9}\x{03B9}", # U+1FFC => 03C9 03B9 -"\xEF\xAC\x80" => "\x{0066}\x{0066}", # U+FB00 => 0066 0066 -"\xEF\xAC\x81" => "\x{0066}\x{0069}", # U+FB01 => 0066 0069 -"\xEF\xAC\x82" => "\x{0066}\x{006C}", # U+FB02 => 0066 006C -"\xEF\xAC\x83" => "\x{0066}\x{0066}\x{0069}", # U+FB03 => 0066 0066 0069 -"\xEF\xAC\x84" => "\x{0066}\x{0066}\x{006C}", # U+FB04 => 0066 0066 006C -"\xEF\xAC\x85" => "\x{0073}\x{0074}", # U+FB05 => 0073 0074 -"\xEF\xAC\x86" => "\x{0073}\x{0074}", # U+FB06 => 0073 0074 -"\xEF\xAC\x93" => "\x{0574}\x{0576}", # U+FB13 => 0574 0576 -"\xEF\xAC\x94" => "\x{0574}\x{0565}", # U+FB14 => 0574 0565 -"\xEF\xAC\x95" => "\x{0574}\x{056B}", # U+FB15 => 0574 056B -"\xEF\xAC\x96" => "\x{057E}\x{0576}", # U+FB16 => 057E 0576 -"\xEF\xAC\x97" => "\x{0574}\x{056D}", # U+FB17 => 0574 056D -); - -return <<'END'; -0041 0061 -0042 0062 -0043 0063 -0044 0064 -0045 0065 -0046 0066 -0047 0067 -0048 0068 -0049 0069 -004A 006A -004B 006B -004C 006C -004D 006D -004E 006E -004F 006F -0050 0070 -0051 0071 -0052 0072 -0053 0073 -0054 0074 -0055 0075 -0056 0076 -0057 0077 -0058 0078 -0059 0079 -005A 007A -00B5 03BC -00C0 00E0 -00C1 00E1 -00C2 00E2 -00C3 00E3 -00C4 00E4 -00C5 00E5 -00C6 00E6 -00C7 00E7 -00C8 00E8 -00C9 00E9 -00CA 00EA -00CB 00EB -00CC 00EC -00CD 00ED -00CE 00EE -00CF 00EF -00D0 00F0 -00D1 00F1 -00D2 00F2 -00D3 00F3 -00D4 00F4 -00D5 00F5 -00D6 00F6 -00D8 00F8 -00D9 00F9 -00DA 00FA -00DB 00FB -00DC 00FC -00DD 00FD -00DE 00FE -0100 0101 -0102 0103 -0104 0105 -0106 0107 -0108 0109 -010A 010B -010C 010D -010E 010F -0110 0111 -0112 0113 -0114 0115 -0116 0117 -0118 0119 -011A 011B -011C 011D -011E 011F -0120 0121 -0122 0123 -0124 0125 -0126 0127 -0128 0129 -012A 012B -012C 012D -012E 012F -0132 0133 -0134 0135 -0136 0137 -0139 013A -013B 013C -013D 013E -013F 0140 -0141 0142 -0143 0144 -0145 0146 -0147 0148 -014A 014B -014C 014D -014E 014F -0150 0151 -0152 0153 -0154 0155 -0156 0157 -0158 0159 -015A 015B -015C 015D -015E 015F -0160 0161 -0162 0163 -0164 0165 -0166 0167 -0168 0169 -016A 016B -016C 016D -016E 016F -0170 0171 -0172 0173 -0174 0175 -0176 0177 -0178 00FF -0179 017A -017B 017C -017D 017E -017F 0073 -0181 0253 -0182 0183 -0184 0185 -0186 0254 -0187 0188 -0189 0256 -018A 0257 -018B 018C -018E 01DD -018F 0259 -0190 025B -0191 0192 -0193 0260 -0194 0263 -0196 0269 -0197 0268 -0198 0199 -019C 026F -019D 0272 -019F 0275 -01A0 01A1 -01A2 01A3 -01A4 01A5 -01A6 0280 -01A7 01A8 -01A9 0283 -01AC 01AD -01AE 0288 -01AF 01B0 -01B1 028A -01B2 028B -01B3 01B4 -01B5 01B6 -01B7 0292 -01B8 01B9 -01BC 01BD -01C4 01C6 -01C5 01C6 -01C7 01C9 -01C8 01C9 -01CA 01CC -01CB 01CC -01CD 01CE -01CF 01D0 -01D1 01D2 -01D3 01D4 -01D5 01D6 -01D7 01D8 -01D9 01DA -01DB 01DC -01DE 01DF -01E0 01E1 -01E2 01E3 -01E4 01E5 -01E6 01E7 -01E8 01E9 -01EA 01EB -01EC 01ED -01EE 01EF -01F1 01F3 -01F2 01F3 -01F4 01F5 -01F6 0195 -01F7 01BF -01F8 01F9 -01FA 01FB -01FC 01FD -01FE 01FF -0200 0201 -0202 0203 -0204 0205 -0206 0207 -0208 0209 -020A 020B -020C 020D -020E 020F -0210 0211 -0212 0213 -0214 0215 -0216 0217 -0218 0219 -021A 021B -021C 021D -021E 021F -0220 019E -0222 0223 -0224 0225 -0226 0227 -0228 0229 -022A 022B -022C 022D -022E 022F -0230 0231 -0232 0233 -023A 2C65 -023B 023C -023D 019A -023E 2C66 -0241 0242 -0243 0180 -0244 0289 -0245 028C -0246 0247 -0248 0249 -024A 024B -024C 024D -024E 024F -0345 03B9 -0370 0371 -0372 0373 -0376 0377 -037F 03F3 -0386 03AC -0388 03AD -0389 03AE -038A 03AF -038C 03CC -038E 03CD -038F 03CE -0391 03B1 -0392 03B2 -0393 03B3 -0394 03B4 -0395 03B5 -0396 03B6 -0397 03B7 -0398 03B8 -0399 03B9 -039A 03BA -039B 03BB -039C 03BC -039D 03BD -039E 03BE -039F 03BF -03A0 03C0 -03A1 03C1 -03A3 03C3 -03A4 03C4 -03A5 03C5 -03A6 03C6 -03A7 03C7 -03A8 03C8 -03A9 03C9 -03AA 03CA -03AB 03CB -03C2 03C3 -03CF 03D7 -03D0 03B2 -03D1 03B8 -03D5 03C6 -03D6 03C0 -03D8 03D9 -03DA 03DB -03DC 03DD -03DE 03DF -03E0 03E1 -03E2 03E3 -03E4 03E5 -03E6 03E7 -03E8 03E9 -03EA 03EB -03EC 03ED -03EE 03EF -03F0 03BA -03F1 03C1 -03F4 03B8 -03F5 03B5 -03F7 03F8 -03F9 03F2 -03FA 03FB -03FD 037B -03FE 037C -03FF 037D -0400 0450 -0401 0451 -0402 0452 -0403 0453 -0404 0454 -0405 0455 -0406 0456 -0407 0457 -0408 0458 -0409 0459 -040A 045A -040B 045B -040C 045C -040D 045D -040E 045E -040F 045F -0410 0430 -0411 0431 -0412 0432 -0413 0433 -0414 0434 -0415 0435 -0416 0436 -0417 0437 -0418 0438 -0419 0439 -041A 043A -041B 043B -041C 043C -041D 043D -041E 043E -041F 043F -0420 0440 -0421 0441 -0422 0442 -0423 0443 -0424 0444 -0425 0445 -0426 0446 -0427 0447 -0428 0448 -0429 0449 -042A 044A -042B 044B -042C 044C -042D 044D -042E 044E -042F 044F -0460 0461 -0462 0463 -0464 0465 -0466 0467 -0468 0469 -046A 046B -046C 046D -046E 046F -0470 0471 -0472 0473 -0474 0475 -0476 0477 -0478 0479 -047A 047B -047C 047D -047E 047F -0480 0481 -048A 048B -048C 048D -048E 048F -0490 0491 -0492 0493 -0494 0495 -0496 0497 -0498 0499 -049A 049B -049C 049D -049E 049F -04A0 04A1 -04A2 04A3 -04A4 04A5 -04A6 04A7 -04A8 04A9 -04AA 04AB -04AC 04AD -04AE 04AF -04B0 04B1 -04B2 04B3 -04B4 04B5 -04B6 04B7 -04B8 04B9 -04BA 04BB -04BC 04BD -04BE 04BF -04C0 04CF -04C1 04C2 -04C3 04C4 -04C5 04C6 -04C7 04C8 -04C9 04CA -04CB 04CC -04CD 04CE -04D0 04D1 -04D2 04D3 -04D4 04D5 -04D6 04D7 -04D8 04D9 -04DA 04DB -04DC 04DD -04DE 04DF -04E0 04E1 -04E2 04E3 -04E4 04E5 -04E6 04E7 -04E8 04E9 -04EA 04EB -04EC 04ED -04EE 04EF -04F0 04F1 -04F2 04F3 -04F4 04F5 -04F6 04F7 -04F8 04F9 -04FA 04FB -04FC 04FD -04FE 04FF -0500 0501 -0502 0503 -0504 0505 -0506 0507 -0508 0509 -050A 050B -050C 050D -050E 050F -0510 0511 -0512 0513 -0514 0515 -0516 0517 -0518 0519 -051A 051B -051C 051D -051E 051F -0520 0521 -0522 0523 -0524 0525 -0526 0527 -0528 0529 -052A 052B -052C 052D -052E 052F -0531 0561 -0532 0562 -0533 0563 -0534 0564 -0535 0565 -0536 0566 -0537 0567 -0538 0568 -0539 0569 -053A 056A -053B 056B -053C 056C -053D 056D -053E 056E -053F 056F -0540 0570 -0541 0571 -0542 0572 -0543 0573 -0544 0574 -0545 0575 -0546 0576 -0547 0577 -0548 0578 -0549 0579 -054A 057A -054B 057B -054C 057C -054D 057D -054E 057E -054F 057F -0550 0580 -0551 0581 -0552 0582 -0553 0583 -0554 0584 -0555 0585 -0556 0586 -10A0 2D00 -10A1 2D01 -10A2 2D02 -10A3 2D03 -10A4 2D04 -10A5 2D05 -10A6 2D06 -10A7 2D07 -10A8 2D08 -10A9 2D09 -10AA 2D0A -10AB 2D0B -10AC 2D0C -10AD 2D0D -10AE 2D0E -10AF 2D0F -10B0 2D10 -10B1 2D11 -10B2 2D12 -10B3 2D13 -10B4 2D14 -10B5 2D15 -10B6 2D16 -10B7 2D17 -10B8 2D18 -10B9 2D19 -10BA 2D1A -10BB 2D1B -10BC 2D1C -10BD 2D1D -10BE 2D1E -10BF 2D1F -10C0 2D20 -10C1 2D21 -10C2 2D22 -10C3 2D23 -10C4 2D24 -10C5 2D25 -10C7 2D27 -10CD 2D2D -13F8 13F0 -13F9 13F1 -13FA 13F2 -13FB 13F3 -13FC 13F4 -13FD 13F5 -1C80 0432 -1C81 0434 -1C82 043E -1C83 0441 -1C84 0442 -1C85 0442 -1C86 044A -1C87 0463 -1C88 A64B -1C90 10D0 -1C91 10D1 -1C92 10D2 -1C93 10D3 -1C94 10D4 -1C95 10D5 -1C96 10D6 -1C97 10D7 -1C98 10D8 -1C99 10D9 -1C9A 10DA -1C9B 10DB -1C9C 10DC -1C9D 10DD -1C9E 10DE -1C9F 10DF -1CA0 10E0 -1CA1 10E1 -1CA2 10E2 -1CA3 10E3 -1CA4 10E4 -1CA5 10E5 -1CA6 10E6 -1CA7 10E7 -1CA8 10E8 -1CA9 10E9 -1CAA 10EA -1CAB 10EB -1CAC 10EC -1CAD 10ED -1CAE 10EE -1CAF 10EF -1CB0 10F0 -1CB1 10F1 -1CB2 10F2 -1CB3 10F3 -1CB4 10F4 -1CB5 10F5 -1CB6 10F6 -1CB7 10F7 -1CB8 10F8 -1CB9 10F9 -1CBA 10FA -1CBD 10FD -1CBE 10FE -1CBF 10FF -1E00 1E01 -1E02 1E03 -1E04 1E05 -1E06 1E07 -1E08 1E09 -1E0A 1E0B -1E0C 1E0D -1E0E 1E0F -1E10 1E11 -1E12 1E13 -1E14 1E15 -1E16 1E17 -1E18 1E19 -1E1A 1E1B -1E1C 1E1D -1E1E 1E1F -1E20 1E21 -1E22 1E23 -1E24 1E25 -1E26 1E27 -1E28 1E29 -1E2A 1E2B -1E2C 1E2D -1E2E 1E2F -1E30 1E31 -1E32 1E33 -1E34 1E35 -1E36 1E37 -1E38 1E39 -1E3A 1E3B -1E3C 1E3D -1E3E 1E3F -1E40 1E41 -1E42 1E43 -1E44 1E45 -1E46 1E47 -1E48 1E49 -1E4A 1E4B -1E4C 1E4D -1E4E 1E4F -1E50 1E51 -1E52 1E53 -1E54 1E55 -1E56 1E57 -1E58 1E59 -1E5A 1E5B -1E5C 1E5D -1E5E 1E5F -1E60 1E61 -1E62 1E63 -1E64 1E65 -1E66 1E67 -1E68 1E69 -1E6A 1E6B -1E6C 1E6D -1E6E 1E6F -1E70 1E71 -1E72 1E73 -1E74 1E75 -1E76 1E77 -1E78 1E79 -1E7A 1E7B -1E7C 1E7D -1E7E 1E7F -1E80 1E81 -1E82 1E83 -1E84 1E85 -1E86 1E87 -1E88 1E89 -1E8A 1E8B -1E8C 1E8D -1E8E 1E8F -1E90 1E91 -1E92 1E93 -1E94 1E95 -1E9B 1E61 -1E9E 00DF -1EA0 1EA1 -1EA2 1EA3 -1EA4 1EA5 -1EA6 1EA7 -1EA8 1EA9 -1EAA 1EAB -1EAC 1EAD -1EAE 1EAF -1EB0 1EB1 -1EB2 1EB3 -1EB4 1EB5 -1EB6 1EB7 -1EB8 1EB9 -1EBA 1EBB -1EBC 1EBD -1EBE 1EBF -1EC0 1EC1 -1EC2 1EC3 -1EC4 1EC5 -1EC6 1EC7 -1EC8 1EC9 -1ECA 1ECB -1ECC 1ECD -1ECE 1ECF -1ED0 1ED1 -1ED2 1ED3 -1ED4 1ED5 -1ED6 1ED7 -1ED8 1ED9 -1EDA 1EDB -1EDC 1EDD -1EDE 1EDF -1EE0 1EE1 -1EE2 1EE3 -1EE4 1EE5 -1EE6 1EE7 -1EE8 1EE9 -1EEA 1EEB -1EEC 1EED -1EEE 1EEF -1EF0 1EF1 -1EF2 1EF3 -1EF4 1EF5 -1EF6 1EF7 -1EF8 1EF9 -1EFA 1EFB -1EFC 1EFD -1EFE 1EFF -1F08 1F00 -1F09 1F01 -1F0A 1F02 -1F0B 1F03 -1F0C 1F04 -1F0D 1F05 -1F0E 1F06 -1F0F 1F07 -1F18 1F10 -1F19 1F11 -1F1A 1F12 -1F1B 1F13 -1F1C 1F14 -1F1D 1F15 -1F28 1F20 -1F29 1F21 -1F2A 1F22 -1F2B 1F23 -1F2C 1F24 -1F2D 1F25 -1F2E 1F26 -1F2F 1F27 -1F38 1F30 -1F39 1F31 -1F3A 1F32 -1F3B 1F33 -1F3C 1F34 -1F3D 1F35 -1F3E 1F36 -1F3F 1F37 -1F48 1F40 -1F49 1F41 -1F4A 1F42 -1F4B 1F43 -1F4C 1F44 -1F4D 1F45 -1F59 1F51 -1F5B 1F53 -1F5D 1F55 -1F5F 1F57 -1F68 1F60 -1F69 1F61 -1F6A 1F62 -1F6B 1F63 -1F6C 1F64 -1F6D 1F65 -1F6E 1F66 -1F6F 1F67 -1F88 1F80 -1F89 1F81 -1F8A 1F82 -1F8B 1F83 -1F8C 1F84 -1F8D 1F85 -1F8E 1F86 -1F8F 1F87 -1F98 1F90 -1F99 1F91 -1F9A 1F92 -1F9B 1F93 -1F9C 1F94 -1F9D 1F95 -1F9E 1F96 -1F9F 1F97 -1FA8 1FA0 -1FA9 1FA1 -1FAA 1FA2 -1FAB 1FA3 -1FAC 1FA4 -1FAD 1FA5 -1FAE 1FA6 -1FAF 1FA7 -1FB8 1FB0 -1FB9 1FB1 -1FBA 1F70 -1FBB 1F71 -1FBC 1FB3 -1FBE 03B9 -1FC8 1F72 -1FC9 1F73 -1FCA 1F74 -1FCB 1F75 -1FCC 1FC3 -1FD8 1FD0 -1FD9 1FD1 -1FDA 1F76 -1FDB 1F77 -1FE8 1FE0 -1FE9 1FE1 -1FEA 1F7A -1FEB 1F7B -1FEC 1FE5 -1FF8 1F78 -1FF9 1F79 -1FFA 1F7C -1FFB 1F7D -1FFC 1FF3 -2126 03C9 -212A 006B -212B 00E5 -2132 214E -2160 2170 -2161 2171 -2162 2172 -2163 2173 -2164 2174 -2165 2175 -2166 2176 -2167 2177 -2168 2178 -2169 2179 -216A 217A -216B 217B -216C 217C -216D 217D -216E 217E -216F 217F -2183 2184 -24B6 24D0 -24B7 24D1 -24B8 24D2 -24B9 24D3 -24BA 24D4 -24BB 24D5 -24BC 24D6 -24BD 24D7 -24BE 24D8 -24BF 24D9 -24C0 24DA -24C1 24DB -24C2 24DC -24C3 24DD -24C4 24DE -24C5 24DF -24C6 24E0 -24C7 24E1 -24C8 24E2 -24C9 24E3 -24CA 24E4 -24CB 24E5 -24CC 24E6 -24CD 24E7 -24CE 24E8 -24CF 24E9 -2C00 2C30 -2C01 2C31 -2C02 2C32 -2C03 2C33 -2C04 2C34 -2C05 2C35 -2C06 2C36 -2C07 2C37 -2C08 2C38 -2C09 2C39 -2C0A 2C3A -2C0B 2C3B -2C0C 2C3C -2C0D 2C3D -2C0E 2C3E -2C0F 2C3F -2C10 2C40 -2C11 2C41 -2C12 2C42 -2C13 2C43 -2C14 2C44 -2C15 2C45 -2C16 2C46 -2C17 2C47 -2C18 2C48 -2C19 2C49 -2C1A 2C4A -2C1B 2C4B -2C1C 2C4C -2C1D 2C4D -2C1E 2C4E -2C1F 2C4F -2C20 2C50 -2C21 2C51 -2C22 2C52 -2C23 2C53 -2C24 2C54 -2C25 2C55 -2C26 2C56 -2C27 2C57 -2C28 2C58 -2C29 2C59 -2C2A 2C5A -2C2B 2C5B -2C2C 2C5C -2C2D 2C5D -2C2E 2C5E -2C60 2C61 -2C62 026B -2C63 1D7D -2C64 027D -2C67 2C68 -2C69 2C6A -2C6B 2C6C -2C6D 0251 -2C6E 0271 -2C6F 0250 -2C70 0252 -2C72 2C73 -2C75 2C76 -2C7E 023F -2C7F 0240 -2C80 2C81 -2C82 2C83 -2C84 2C85 -2C86 2C87 -2C88 2C89 -2C8A 2C8B -2C8C 2C8D -2C8E 2C8F -2C90 2C91 -2C92 2C93 -2C94 2C95 -2C96 2C97 -2C98 2C99 -2C9A 2C9B -2C9C 2C9D -2C9E 2C9F -2CA0 2CA1 -2CA2 2CA3 -2CA4 2CA5 -2CA6 2CA7 -2CA8 2CA9 -2CAA 2CAB -2CAC 2CAD -2CAE 2CAF -2CB0 2CB1 -2CB2 2CB3 -2CB4 2CB5 -2CB6 2CB7 -2CB8 2CB9 -2CBA 2CBB -2CBC 2CBD -2CBE 2CBF -2CC0 2CC1 -2CC2 2CC3 -2CC4 2CC5 -2CC6 2CC7 -2CC8 2CC9 -2CCA 2CCB -2CCC 2CCD -2CCE 2CCF -2CD0 2CD1 -2CD2 2CD3 -2CD4 2CD5 -2CD6 2CD7 -2CD8 2CD9 -2CDA 2CDB -2CDC 2CDD -2CDE 2CDF -2CE0 2CE1 -2CE2 2CE3 -2CEB 2CEC -2CED 2CEE -2CF2 2CF3 -A640 A641 -A642 A643 -A644 A645 -A646 A647 -A648 A649 -A64A A64B -A64C A64D -A64E A64F -A650 A651 -A652 A653 -A654 A655 -A656 A657 -A658 A659 -A65A A65B -A65C A65D -A65E A65F -A660 A661 -A662 A663 -A664 A665 -A666 A667 -A668 A669 -A66A A66B -A66C A66D -A680 A681 -A682 A683 -A684 A685 -A686 A687 -A688 A689 -A68A A68B -A68C A68D -A68E A68F -A690 A691 -A692 A693 -A694 A695 -A696 A697 -A698 A699 -A69A A69B -A722 A723 -A724 A725 -A726 A727 -A728 A729 -A72A A72B -A72C A72D -A72E A72F -A732 A733 -A734 A735 -A736 A737 -A738 A739 -A73A A73B -A73C A73D -A73E A73F -A740 A741 -A742 A743 -A744 A745 -A746 A747 -A748 A749 -A74A A74B -A74C A74D -A74E A74F -A750 A751 -A752 A753 -A754 A755 -A756 A757 -A758 A759 -A75A A75B -A75C A75D -A75E A75F -A760 A761 -A762 A763 -A764 A765 -A766 A767 -A768 A769 -A76A A76B -A76C A76D -A76E A76F -A779 A77A -A77B A77C -A77D 1D79 -A77E A77F -A780 A781 -A782 A783 -A784 A785 -A786 A787 -A78B A78C -A78D 0265 -A790 A791 -A792 A793 -A796 A797 -A798 A799 -A79A A79B -A79C A79D -A79E A79F -A7A0 A7A1 -A7A2 A7A3 -A7A4 A7A5 -A7A6 A7A7 -A7A8 A7A9 -A7AA 0266 -A7AB 025C -A7AC 0261 -A7AD 026C -A7AE 026A -A7B0 029E -A7B1 0287 -A7B2 029D -A7B3 AB53 -A7B4 A7B5 -A7B6 A7B7 -A7B8 A7B9 -A7BA A7BB -A7BC A7BD -A7BE A7BF -A7C2 A7C3 -A7C4 A794 -A7C5 0282 -A7C6 1D8E -A7C7 A7C8 -A7C9 A7CA -A7F5 A7F6 -AB70 13A0 -AB71 13A1 -AB72 13A2 -AB73 13A3 -AB74 13A4 -AB75 13A5 -AB76 13A6 -AB77 13A7 -AB78 13A8 -AB79 13A9 -AB7A 13AA -AB7B 13AB -AB7C 13AC -AB7D 13AD -AB7E 13AE -AB7F 13AF -AB80 13B0 -AB81 13B1 -AB82 13B2 -AB83 13B3 -AB84 13B4 -AB85 13B5 -AB86 13B6 -AB87 13B7 -AB88 13B8 -AB89 13B9 -AB8A 13BA -AB8B 13BB -AB8C 13BC -AB8D 13BD -AB8E 13BE -AB8F 13BF -AB90 13C0 -AB91 13C1 -AB92 13C2 -AB93 13C3 -AB94 13C4 -AB95 13C5 -AB96 13C6 -AB97 13C7 -AB98 13C8 -AB99 13C9 -AB9A 13CA -AB9B 13CB -AB9C 13CC -AB9D 13CD -AB9E 13CE -AB9F 13CF -ABA0 13D0 -ABA1 13D1 -ABA2 13D2 -ABA3 13D3 -ABA4 13D4 -ABA5 13D5 -ABA6 13D6 -ABA7 13D7 -ABA8 13D8 -ABA9 13D9 -ABAA 13DA -ABAB 13DB -ABAC 13DC -ABAD 13DD -ABAE 13DE -ABAF 13DF -ABB0 13E0 -ABB1 13E1 -ABB2 13E2 -ABB3 13E3 -ABB4 13E4 -ABB5 13E5 -ABB6 13E6 -ABB7 13E7 -ABB8 13E8 -ABB9 13E9 -ABBA 13EA -ABBB 13EB -ABBC 13EC -ABBD 13ED -ABBE 13EE -ABBF 13EF -FF21 FF41 -FF22 FF42 -FF23 FF43 -FF24 FF44 -FF25 FF45 -FF26 FF46 -FF27 FF47 -FF28 FF48 -FF29 FF49 -FF2A FF4A -FF2B FF4B -FF2C FF4C -FF2D FF4D -FF2E FF4E -FF2F FF4F -FF30 FF50 -FF31 FF51 -FF32 FF52 -FF33 FF53 -FF34 FF54 -FF35 FF55 -FF36 FF56 -FF37 FF57 -FF38 FF58 -FF39 FF59 -FF3A FF5A -10400 10428 -10401 10429 -10402 1042A -10403 1042B -10404 1042C -10405 1042D -10406 1042E -10407 1042F -10408 10430 -10409 10431 -1040A 10432 -1040B 10433 -1040C 10434 -1040D 10435 -1040E 10436 -1040F 10437 -10410 10438 -10411 10439 -10412 1043A -10413 1043B -10414 1043C -10415 1043D -10416 1043E -10417 1043F -10418 10440 -10419 10441 -1041A 10442 -1041B 10443 -1041C 10444 -1041D 10445 -1041E 10446 -1041F 10447 -10420 10448 -10421 10449 -10422 1044A -10423 1044B -10424 1044C -10425 1044D -10426 1044E -10427 1044F -104B0 104D8 -104B1 104D9 -104B2 104DA -104B3 104DB -104B4 104DC -104B5 104DD -104B6 104DE -104B7 104DF -104B8 104E0 -104B9 104E1 -104BA 104E2 -104BB 104E3 -104BC 104E4 -104BD 104E5 -104BE 104E6 -104BF 104E7 -104C0 104E8 -104C1 104E9 -104C2 104EA -104C3 104EB -104C4 104EC -104C5 104ED -104C6 104EE -104C7 104EF -104C8 104F0 -104C9 104F1 -104CA 104F2 -104CB 104F3 -104CC 104F4 -104CD 104F5 -104CE 104F6 -104CF 104F7 -104D0 104F8 -104D1 104F9 -104D2 104FA -104D3 104FB -10C80 10CC0 -10C81 10CC1 -10C82 10CC2 -10C83 10CC3 -10C84 10CC4 -10C85 10CC5 -10C86 10CC6 -10C87 10CC7 -10C88 10CC8 -10C89 10CC9 -10C8A 10CCA -10C8B 10CCB -10C8C 10CCC -10C8D 10CCD -10C8E 10CCE -10C8F 10CCF -10C90 10CD0 -10C91 10CD1 -10C92 10CD2 -10C93 10CD3 -10C94 10CD4 -10C95 10CD5 -10C96 10CD6 -10C97 10CD7 -10C98 10CD8 -10C99 10CD9 -10C9A 10CDA -10C9B 10CDB -10C9C 10CDC -10C9D 10CDD -10C9E 10CDE -10C9F 10CDF -10CA0 10CE0 -10CA1 10CE1 -10CA2 10CE2 -10CA3 10CE3 -10CA4 10CE4 -10CA5 10CE5 -10CA6 10CE6 -10CA7 10CE7 -10CA8 10CE8 -10CA9 10CE9 -10CAA 10CEA -10CAB 10CEB -10CAC 10CEC -10CAD 10CED -10CAE 10CEE -10CAF 10CEF -10CB0 10CF0 -10CB1 10CF1 -10CB2 10CF2 -118A0 118C0 -118A1 118C1 -118A2 118C2 -118A3 118C3 -118A4 118C4 -118A5 118C5 -118A6 118C6 -118A7 118C7 -118A8 118C8 -118A9 118C9 -118AA 118CA -118AB 118CB -118AC 118CC -118AD 118CD -118AE 118CE -118AF 118CF -118B0 118D0 -118B1 118D1 -118B2 118D2 -118B3 118D3 -118B4 118D4 -118B5 118D5 -118B6 118D6 -118B7 118D7 -118B8 118D8 -118B9 118D9 -118BA 118DA -118BB 118DB -118BC 118DC -118BD 118DD -118BE 118DE -118BF 118DF -16E40 16E60 -16E41 16E61 -16E42 16E62 -16E43 16E63 -16E44 16E64 -16E45 16E65 -16E46 16E66 -16E47 16E67 -16E48 16E68 -16E49 16E69 -16E4A 16E6A -16E4B 16E6B -16E4C 16E6C -16E4D 16E6D -16E4E 16E6E -16E4F 16E6F -16E50 16E70 -16E51 16E71 -16E52 16E72 -16E53 16E73 -16E54 16E74 -16E55 16E75 -16E56 16E76 -16E57 16E77 -16E58 16E78 -16E59 16E79 -16E5A 16E7A -16E5B 16E7B -16E5C 16E7C -16E5D 16E7D -16E5E 16E7E -16E5F 16E7F -1E900 1E922 -1E901 1E923 -1E902 1E924 -1E903 1E925 -1E904 1E926 -1E905 1E927 -1E906 1E928 -1E907 1E929 -1E908 1E92A -1E909 1E92B -1E90A 1E92C -1E90B 1E92D -1E90C 1E92E -1E90D 1E92F -1E90E 1E930 -1E90F 1E931 -1E910 1E932 -1E911 1E933 -1E912 1E934 -1E913 1E935 -1E914 1E936 -1E915 1E937 -1E916 1E938 -1E917 1E939 -1E918 1E93A -1E919 1E93B -1E91A 1E93C -1E91B 1E93D -1E91C 1E93E -1E91D 1E93F -1E91E 1E940 -1E91F 1E941 -1E920 1E942 -1E921 1E943 -END diff --git a/gnu/usr.bin/perl/lib/unicore/To/Lower.pl b/gnu/usr.bin/perl/lib/unicore/To/Lower.pl deleted file mode 100644 index c02fa1f57df..00000000000 --- a/gnu/usr.bin/perl/lib/unicore/To/Lower.pl +++ /dev/null @@ -1,1428 +0,0 @@ -# !!!!!!! DO NOT EDIT THIS FILE !!!!!!! -# This file is machine-generated by lib/unicore/mktables from the Unicode -# database, Version 13.0.0. Any changes made here will be lost! - -# !!!!!!! IT IS DEPRECATED TO USE THIS FILE !!!!!!! - -# This file is for internal use by core Perl only. It is retained for -# backwards compatibility with applications that may have come to rely on it, -# but its format and even its name or existence are subject to change without -# notice in a future Perl version. Don't use it directly. Instead, its -# contents are now retrievable through a stable API in the Unicode::UCD -# module: Unicode::UCD::prop_invmap('Lowercase_Mapping') (Values for individual -# code points can be retrieved via Unicode::UCD::charprop()); - - - -# The name this table is to be known by, with the format of the mappings in -# the main body of the table, and what all code points missing from this file -# map to. -$Unicode::UCD::SwashInfo{'ToLower'}{'format'} = 'x'; # non-negative hex whole number; a code point -$Unicode::UCD::SwashInfo{'ToLower'}{'specials_name'} = 'Unicode::UCD::ToSpecLower'; # Name of hash of special mappings -$Unicode::UCD::SwashInfo{'ToLower'}{'missing'} = ''; # code point maps to itself - -# Some code points require special handling because their mappings are each to -# multiple code points. These do not appear in the main body, but are defined -# in the hash below. - -# Each key is the string of N bytes that together make up the UTF-8 encoding -# for the code point. (i.e. the same as looking at the code point's UTF-8 -# under "use bytes"). Each value is the UTF-8 of the translation, for speed. -%Unicode::UCD::ToSpecLower = ( -"\xC4\xB0" => "\x{0069}\x{0307}", # U+0130 => 0069 0307 -); - -return <<'END'; -0041 0061 -0042 0062 -0043 0063 -0044 0064 -0045 0065 -0046 0066 -0047 0067 -0048 0068 -0049 0069 -004A 006A -004B 006B -004C 006C -004D 006D -004E 006E -004F 006F -0050 0070 -0051 0071 -0052 0072 -0053 0073 -0054 0074 -0055 0075 -0056 0076 -0057 0077 -0058 0078 -0059 0079 -005A 007A -00C0 00E0 -00C1 00E1 -00C2 00E2 -00C3 00E3 -00C4 00E4 -00C5 00E5 -00C6 00E6 -00C7 00E7 -00C8 00E8 -00C9 00E9 -00CA 00EA -00CB 00EB -00CC 00EC -00CD 00ED -00CE 00EE -00CF 00EF -00D0 00F0 -00D1 00F1 -00D2 00F2 -00D3 00F3 -00D4 00F4 -00D5 00F5 -00D6 00F6 -00D8 00F8 -00D9 00F9 -00DA 00FA -00DB 00FB -00DC 00FC -00DD 00FD -00DE 00FE -0100 0101 -0102 0103 -0104 0105 -0106 0107 -0108 0109 -010A 010B -010C 010D -010E 010F -0110 0111 -0112 0113 -0114 0115 -0116 0117 -0118 0119 -011A 011B -011C 011D -011E 011F -0120 0121 -0122 0123 -0124 0125 -0126 0127 -0128 0129 -012A 012B -012C 012D -012E 012F -0132 0133 -0134 0135 -0136 0137 -0139 013A -013B 013C -013D 013E -013F 0140 -0141 0142 -0143 0144 -0145 0146 -0147 0148 -014A 014B -014C 014D -014E 014F -0150 0151 -0152 0153 -0154 0155 -0156 0157 -0158 0159 -015A 015B -015C 015D -015E 015F -0160 0161 -0162 0163 -0164 0165 -0166 0167 -0168 0169 -016A 016B -016C 016D -016E 016F -0170 0171 -0172 0173 -0174 0175 -0176 0177 -0178 00FF -0179 017A -017B 017C -017D 017E -0181 0253 -0182 0183 -0184 0185 -0186 0254 -0187 0188 -0189 0256 -018A 0257 -018B 018C -018E 01DD -018F 0259 -0190 025B -0191 0192 -0193 0260 -0194 0263 -0196 0269 -0197 0268 -0198 0199 -019C 026F -019D 0272 -019F 0275 -01A0 01A1 -01A2 01A3 -01A4 01A5 -01A6 0280 -01A7 01A8 -01A9 0283 -01AC 01AD -01AE 0288 -01AF 01B0 -01B1 028A -01B2 028B -01B3 01B4 -01B5 01B6 -01B7 0292 -01B8 01B9 -01BC 01BD -01C4 01C6 -01C5 01C6 -01C7 01C9 -01C8 01C9 -01CA 01CC -01CB 01CC -01CD 01CE -01CF 01D0 -01D1 01D2 -01D3 01D4 -01D5 01D6 -01D7 01D8 -01D9 01DA -01DB 01DC -01DE 01DF -01E0 01E1 -01E2 01E3 -01E4 01E5 -01E6 01E7 -01E8 01E9 -01EA 01EB -01EC 01ED -01EE 01EF -01F1 01F3 -01F2 01F3 -01F4 01F5 -01F6 0195 -01F7 01BF -01F8 01F9 -01FA 01FB -01FC 01FD -01FE 01FF -0200 0201 -0202 0203 -0204 0205 -0206 0207 -0208 0209 -020A 020B -020C 020D -020E 020F -0210 0211 -0212 0213 -0214 0215 -0216 0217 -0218 0219 -021A 021B -021C 021D -021E 021F -0220 019E -0222 0223 -0224 0225 -0226 0227 -0228 0229 -022A 022B -022C 022D -022E 022F -0230 0231 -0232 0233 -023A 2C65 -023B 023C -023D 019A -023E 2C66 -0241 0242 -0243 0180 -0244 0289 -0245 028C -0246 0247 -0248 0249 -024A 024B -024C 024D -024E 024F -0370 0371 -0372 0373 -0376 0377 -037F 03F3 -0386 03AC -0388 03AD -0389 03AE -038A 03AF -038C 03CC -038E 03CD -038F 03CE -0391 03B1 -0392 03B2 -0393 03B3 -0394 03B4 -0395 03B5 -0396 03B6 -0397 03B7 -0398 03B8 -0399 03B9 -039A 03BA -039B 03BB -039C 03BC -039D 03BD -039E 03BE -039F 03BF -03A0 03C0 -03A1 03C1 -03A3 03C3 -03A4 03C4 -03A5 03C5 -03A6 03C6 -03A7 03C7 -03A8 03C8 -03A9 03C9 -03AA 03CA -03AB 03CB -03CF 03D7 -03D8 03D9 -03DA 03DB -03DC 03DD -03DE 03DF -03E0 03E1 -03E2 03E3 -03E4 03E5 -03E6 03E7 -03E8 03E9 -03EA 03EB -03EC 03ED -03EE 03EF -03F4 03B8 -03F7 03F8 -03F9 03F2 -03FA 03FB -03FD 037B -03FE 037C -03FF 037D -0400 0450 -0401 0451 -0402 0452 -0403 0453 -0404 0454 -0405 0455 -0406 0456 -0407 0457 -0408 0458 -0409 0459 -040A 045A -040B 045B -040C 045C -040D 045D -040E 045E -040F 045F -0410 0430 -0411 0431 -0412 0432 -0413 0433 -0414 0434 -0415 0435 -0416 0436 -0417 0437 -0418 0438 -0419 0439 -041A 043A -041B 043B -041C 043C -041D 043D -041E 043E -041F 043F -0420 0440 -0421 0441 -0422 0442 -0423 0443 -0424 0444 -0425 0445 -0426 0446 -0427 0447 -0428 0448 -0429 0449 -042A 044A -042B 044B -042C 044C -042D 044D -042E 044E -042F 044F -0460 0461 -0462 0463 -0464 0465 -0466 0467 -0468 0469 -046A 046B -046C 046D -046E 046F -0470 0471 -0472 0473 -0474 0475 -0476 0477 -0478 0479 -047A 047B -047C 047D -047E 047F -0480 0481 -048A 048B -048C 048D -048E 048F -0490 0491 -0492 0493 -0494 0495 -0496 0497 -0498 0499 -049A 049B -049C 049D -049E 049F -04A0 04A1 -04A2 04A3 -04A4 04A5 -04A6 04A7 -04A8 04A9 -04AA 04AB -04AC 04AD -04AE 04AF -04B0 04B1 -04B2 04B3 -04B4 04B5 -04B6 04B7 -04B8 04B9 -04BA 04BB -04BC 04BD -04BE 04BF -04C0 04CF -04C1 04C2 -04C3 04C4 -04C5 04C6 -04C7 04C8 -04C9 04CA -04CB 04CC -04CD 04CE -04D0 04D1 -04D2 04D3 -04D4 04D5 -04D6 04D7 -04D8 04D9 -04DA 04DB -04DC 04DD -04DE 04DF -04E0 04E1 -04E2 04E3 -04E4 04E5 -04E6 04E7 -04E8 04E9 -04EA 04EB -04EC 04ED -04EE 04EF -04F0 04F1 -04F2 04F3 -04F4 04F5 -04F6 04F7 -04F8 04F9 -04FA 04FB -04FC 04FD -04FE 04FF -0500 0501 -0502 0503 -0504 0505 -0506 0507 -0508 0509 -050A 050B -050C 050D -050E 050F -0510 0511 -0512 0513 -0514 0515 -0516 0517 -0518 0519 -051A 051B -051C 051D -051E 051F -0520 0521 -0522 0523 -0524 0525 -0526 0527 -0528 0529 -052A 052B -052C 052D -052E 052F -0531 0561 -0532 0562 -0533 0563 -0534 0564 -0535 0565 -0536 0566 -0537 0567 -0538 0568 -0539 0569 -053A 056A -053B 056B -053C 056C -053D 056D -053E 056E -053F 056F -0540 0570 -0541 0571 -0542 0572 -0543 0573 -0544 0574 -0545 0575 -0546 0576 -0547 0577 -0548 0578 -0549 0579 -054A 057A -054B 057B -054C 057C -054D 057D -054E 057E -054F 057F -0550 0580 -0551 0581 -0552 0582 -0553 0583 -0554 0584 -0555 0585 -0556 0586 -10A0 2D00 -10A1 2D01 -10A2 2D02 -10A3 2D03 -10A4 2D04 -10A5 2D05 -10A6 2D06 -10A7 2D07 -10A8 2D08 -10A9 2D09 -10AA 2D0A -10AB 2D0B -10AC 2D0C -10AD 2D0D -10AE 2D0E -10AF 2D0F -10B0 2D10 -10B1 2D11 -10B2 2D12 -10B3 2D13 -10B4 2D14 -10B5 2D15 -10B6 2D16 -10B7 2D17 -10B8 2D18 -10B9 2D19 -10BA 2D1A -10BB 2D1B -10BC 2D1C -10BD 2D1D -10BE 2D1E -10BF 2D1F -10C0 2D20 -10C1 2D21 -10C2 2D22 -10C3 2D23 -10C4 2D24 -10C5 2D25 -10C7 2D27 -10CD 2D2D -13A0 AB70 -13A1 AB71 -13A2 AB72 -13A3 AB73 -13A4 AB74 -13A5 AB75 -13A6 AB76 -13A7 AB77 -13A8 AB78 -13A9 AB79 -13AA AB7A -13AB AB7B -13AC AB7C -13AD AB7D -13AE AB7E -13AF AB7F -13B0 AB80 -13B1 AB81 -13B2 AB82 -13B3 AB83 -13B4 AB84 -13B5 AB85 -13B6 AB86 -13B7 AB87 -13B8 AB88 -13B9 AB89 -13BA AB8A -13BB AB8B -13BC AB8C -13BD AB8D -13BE AB8E -13BF AB8F -13C0 AB90 -13C1 AB91 -13C2 AB92 -13C3 AB93 -13C4 AB94 -13C5 AB95 -13C6 AB96 -13C7 AB97 -13C8 AB98 -13C9 AB99 -13CA AB9A -13CB AB9B -13CC AB9C -13CD AB9D -13CE AB9E -13CF AB9F -13D0 ABA0 -13D1 ABA1 -13D2 ABA2 -13D3 ABA3 -13D4 ABA4 -13D5 ABA5 -13D6 ABA6 -13D7 ABA7 -13D8 ABA8 -13D9 ABA9 -13DA ABAA -13DB ABAB -13DC ABAC -13DD ABAD -13DE ABAE -13DF ABAF -13E0 ABB0 -13E1 ABB1 -13E2 ABB2 -13E3 ABB3 -13E4 ABB4 -13E5 ABB5 -13E6 ABB6 -13E7 ABB7 -13E8 ABB8 -13E9 ABB9 -13EA ABBA -13EB ABBB -13EC ABBC -13ED ABBD -13EE ABBE -13EF ABBF -13F0 13F8 -13F1 13F9 -13F2 13FA -13F3 13FB -13F4 13FC -13F5 13FD -1C90 10D0 -1C91 10D1 -1C92 10D2 -1C93 10D3 -1C94 10D4 -1C95 10D5 -1C96 10D6 -1C97 10D7 -1C98 10D8 -1C99 10D9 -1C9A 10DA -1C9B 10DB -1C9C 10DC -1C9D 10DD -1C9E 10DE -1C9F 10DF -1CA0 10E0 -1CA1 10E1 -1CA2 10E2 -1CA3 10E3 -1CA4 10E4 -1CA5 10E5 -1CA6 10E6 -1CA7 10E7 -1CA8 10E8 -1CA9 10E9 -1CAA 10EA -1CAB 10EB -1CAC 10EC -1CAD 10ED -1CAE 10EE -1CAF 10EF -1CB0 10F0 -1CB1 10F1 -1CB2 10F2 -1CB3 10F3 -1CB4 10F4 -1CB5 10F5 -1CB6 10F6 -1CB7 10F7 -1CB8 10F8 -1CB9 10F9 -1CBA 10FA -1CBD 10FD -1CBE 10FE -1CBF 10FF -1E00 1E01 -1E02 1E03 -1E04 1E05 -1E06 1E07 -1E08 1E09 -1E0A 1E0B -1E0C 1E0D -1E0E 1E0F -1E10 1E11 -1E12 1E13 -1E14 1E15 -1E16 1E17 -1E18 1E19 -1E1A 1E1B -1E1C 1E1D -1E1E 1E1F -1E20 1E21 -1E22 1E23 -1E24 1E25 -1E26 1E27 -1E28 1E29 -1E2A 1E2B -1E2C 1E2D -1E2E 1E2F -1E30 1E31 -1E32 1E33 -1E34 1E35 -1E36 1E37 -1E38 1E39 -1E3A 1E3B -1E3C 1E3D -1E3E 1E3F -1E40 1E41 -1E42 1E43 -1E44 1E45 -1E46 1E47 -1E48 1E49 -1E4A 1E4B -1E4C 1E4D -1E4E 1E4F -1E50 1E51 -1E52 1E53 -1E54 1E55 -1E56 1E57 -1E58 1E59 -1E5A 1E5B -1E5C 1E5D -1E5E 1E5F -1E60 1E61 -1E62 1E63 -1E64 1E65 -1E66 1E67 -1E68 1E69 -1E6A 1E6B -1E6C 1E6D -1E6E 1E6F -1E70 1E71 -1E72 1E73 -1E74 1E75 -1E76 1E77 -1E78 1E79 -1E7A 1E7B -1E7C 1E7D -1E7E 1E7F -1E80 1E81 -1E82 1E83 -1E84 1E85 -1E86 1E87 -1E88 1E89 -1E8A 1E8B -1E8C 1E8D -1E8E 1E8F -1E90 1E91 -1E92 1E93 -1E94 1E95 -1E9E 00DF -1EA0 1EA1 -1EA2 1EA3 -1EA4 1EA5 -1EA6 1EA7 -1EA8 1EA9 -1EAA 1EAB -1EAC 1EAD -1EAE 1EAF -1EB0 1EB1 -1EB2 1EB3 -1EB4 1EB5 -1EB6 1EB7 -1EB8 1EB9 -1EBA 1EBB -1EBC 1EBD -1EBE 1EBF -1EC0 1EC1 -1EC2 1EC3 -1EC4 1EC5 -1EC6 1EC7 -1EC8 1EC9 -1ECA 1ECB -1ECC 1ECD -1ECE 1ECF -1ED0 1ED1 -1ED2 1ED3 -1ED4 1ED5 -1ED6 1ED7 -1ED8 1ED9 -1EDA 1EDB -1EDC 1EDD -1EDE 1EDF -1EE0 1EE1 -1EE2 1EE3 -1EE4 1EE5 -1EE6 1EE7 -1EE8 1EE9 -1EEA 1EEB -1EEC 1EED -1EEE 1EEF -1EF0 1EF1 -1EF2 1EF3 -1EF4 1EF5 -1EF6 1EF7 -1EF8 1EF9 -1EFA 1EFB -1EFC 1EFD -1EFE 1EFF -1F08 1F00 -1F09 1F01 -1F0A 1F02 -1F0B 1F03 -1F0C 1F04 -1F0D 1F05 -1F0E 1F06 -1F0F 1F07 -1F18 1F10 -1F19 1F11 -1F1A 1F12 -1F1B 1F13 -1F1C 1F14 -1F1D 1F15 -1F28 1F20 -1F29 1F21 -1F2A 1F22 -1F2B 1F23 -1F2C 1F24 -1F2D 1F25 -1F2E 1F26 -1F2F 1F27 -1F38 1F30 -1F39 1F31 -1F3A 1F32 -1F3B 1F33 -1F3C 1F34 -1F3D 1F35 -1F3E 1F36 -1F3F 1F37 -1F48 1F40 -1F49 1F41 -1F4A 1F42 -1F4B 1F43 -1F4C 1F44 -1F4D 1F45 -1F59 1F51 -1F5B 1F53 -1F5D 1F55 -1F5F 1F57 -1F68 1F60 -1F69 1F61 -1F6A 1F62 -1F6B 1F63 -1F6C 1F64 -1F6D 1F65 -1F6E 1F66 -1F6F 1F67 -1F88 1F80 -1F89 1F81 -1F8A 1F82 -1F8B 1F83 -1F8C 1F84 -1F8D 1F85 -1F8E 1F86 -1F8F 1F87 -1F98 1F90 -1F99 1F91 -1F9A 1F92 -1F9B 1F93 -1F9C 1F94 -1F9D 1F95 -1F9E 1F96 -1F9F 1F97 -1FA8 1FA0 -1FA9 1FA1 -1FAA 1FA2 -1FAB 1FA3 -1FAC 1FA4 -1FAD 1FA5 -1FAE 1FA6 -1FAF 1FA7 -1FB8 1FB0 -1FB9 1FB1 -1FBA 1F70 -1FBB 1F71 -1FBC 1FB3 -1FC8 1F72 -1FC9 1F73 -1FCA 1F74 -1FCB 1F75 -1FCC 1FC3 -1FD8 1FD0 -1FD9 1FD1 -1FDA 1F76 -1FDB 1F77 -1FE8 1FE0 -1FE9 1FE1 -1FEA 1F7A -1FEB 1F7B -1FEC 1FE5 -1FF8 1F78 -1FF9 1F79 -1FFA 1F7C -1FFB 1F7D -1FFC 1FF3 -2126 03C9 -212A 006B -212B 00E5 -2132 214E -2160 2170 -2161 2171 -2162 2172 -2163 2173 -2164 2174 -2165 2175 -2166 2176 -2167 2177 -2168 2178 -2169 2179 -216A 217A -216B 217B -216C 217C -216D 217D -216E 217E -216F 217F -2183 2184 -24B6 24D0 -24B7 24D1 -24B8 24D2 -24B9 24D3 -24BA 24D4 -24BB 24D5 -24BC 24D6 -24BD 24D7 -24BE 24D8 -24BF 24D9 -24C0 24DA -24C1 24DB -24C2 24DC -24C3 24DD -24C4 24DE -24C5 24DF -24C6 24E0 -24C7 24E1 -24C8 24E2 -24C9 24E3 -24CA 24E4 -24CB 24E5 -24CC 24E6 -24CD 24E7 -24CE 24E8 -24CF 24E9 -2C00 2C30 -2C01 2C31 -2C02 2C32 -2C03 2C33 -2C04 2C34 -2C05 2C35 -2C06 2C36 -2C07 2C37 -2C08 2C38 -2C09 2C39 -2C0A 2C3A -2C0B 2C3B -2C0C 2C3C -2C0D 2C3D -2C0E 2C3E -2C0F 2C3F -2C10 2C40 -2C11 2C41 -2C12 2C42 -2C13 2C43 -2C14 2C44 -2C15 2C45 -2C16 2C46 -2C17 2C47 -2C18 2C48 -2C19 2C49 -2C1A 2C4A -2C1B 2C4B -2C1C 2C4C -2C1D 2C4D -2C1E 2C4E -2C1F 2C4F -2C20 2C50 -2C21 2C51 -2C22 2C52 -2C23 2C53 -2C24 2C54 -2C25 2C55 -2C26 2C56 -2C27 2C57 -2C28 2C58 -2C29 2C59 -2C2A 2C5A -2C2B 2C5B -2C2C 2C5C -2C2D 2C5D -2C2E 2C5E -2C60 2C61 -2C62 026B -2C63 1D7D -2C64 027D -2C67 2C68 -2C69 2C6A -2C6B 2C6C -2C6D 0251 -2C6E 0271 -2C6F 0250 -2C70 0252 -2C72 2C73 -2C75 2C76 -2C7E 023F -2C7F 0240 -2C80 2C81 -2C82 2C83 -2C84 2C85 -2C86 2C87 -2C88 2C89 -2C8A 2C8B -2C8C 2C8D -2C8E 2C8F -2C90 2C91 -2C92 2C93 -2C94 2C95 -2C96 2C97 -2C98 2C99 -2C9A 2C9B -2C9C 2C9D -2C9E 2C9F -2CA0 2CA1 -2CA2 2CA3 -2CA4 2CA5 -2CA6 2CA7 -2CA8 2CA9 -2CAA 2CAB -2CAC 2CAD -2CAE 2CAF -2CB0 2CB1 -2CB2 2CB3 -2CB4 2CB5 -2CB6 2CB7 -2CB8 2CB9 -2CBA 2CBB -2CBC 2CBD -2CBE 2CBF -2CC0 2CC1 -2CC2 2CC3 -2CC4 2CC5 -2CC6 2CC7 -2CC8 2CC9 -2CCA 2CCB -2CCC 2CCD -2CCE 2CCF -2CD0 2CD1 -2CD2 2CD3 -2CD4 2CD5 -2CD6 2CD7 -2CD8 2CD9 -2CDA 2CDB -2CDC 2CDD -2CDE 2CDF -2CE0 2CE1 -2CE2 2CE3 -2CEB 2CEC -2CED 2CEE -2CF2 2CF3 -A640 A641 -A642 A643 -A644 A645 -A646 A647 -A648 A649 -A64A A64B -A64C A64D -A64E A64F -A650 A651 -A652 A653 -A654 A655 -A656 A657 -A658 A659 -A65A A65B -A65C A65D -A65E A65F -A660 A661 -A662 A663 -A664 A665 -A666 A667 -A668 A669 -A66A A66B -A66C A66D -A680 A681 -A682 A683 -A684 A685 -A686 A687 -A688 A689 -A68A A68B -A68C A68D -A68E A68F -A690 A691 -A692 A693 -A694 A695 -A696 A697 -A698 A699 -A69A A69B -A722 A723 -A724 A725 -A726 A727 -A728 A729 -A72A A72B -A72C A72D -A72E A72F -A732 A733 -A734 A735 -A736 A737 -A738 A739 -A73A A73B -A73C A73D -A73E A73F -A740 A741 -A742 A743 -A744 A745 -A746 A747 -A748 A749 -A74A A74B -A74C A74D -A74E A74F -A750 A751 -A752 A753 -A754 A755 -A756 A757 -A758 A759 -A75A A75B -A75C A75D -A75E A75F -A760 A761 -A762 A763 -A764 A765 -A766 A767 -A768 A769 -A76A A76B -A76C A76D -A76E A76F -A779 A77A -A77B A77C -A77D 1D79 -A77E A77F -A780 A781 -A782 A783 -A784 A785 -A786 A787 -A78B A78C -A78D 0265 -A790 A791 -A792 A793 -A796 A797 -A798 A799 -A79A A79B -A79C A79D -A79E A79F -A7A0 A7A1 -A7A2 A7A3 -A7A4 A7A5 -A7A6 A7A7 -A7A8 A7A9 -A7AA 0266 -A7AB 025C -A7AC 0261 -A7AD 026C -A7AE 026A -A7B0 029E -A7B1 0287 -A7B2 029D -A7B3 AB53 -A7B4 A7B5 -A7B6 A7B7 -A7B8 A7B9 -A7BA A7BB -A7BC A7BD -A7BE A7BF -A7C2 A7C3 -A7C4 A794 -A7C5 0282 -A7C6 1D8E -A7C7 A7C8 -A7C9 A7CA -A7F5 A7F6 -FF21 FF41 -FF22 FF42 -FF23 FF43 -FF24 FF44 -FF25 FF45 -FF26 FF46 -FF27 FF47 -FF28 FF48 -FF29 FF49 -FF2A FF4A -FF2B FF4B -FF2C FF4C -FF2D FF4D -FF2E FF4E -FF2F FF4F -FF30 FF50 -FF31 FF51 -FF32 FF52 -FF33 FF53 -FF34 FF54 -FF35 FF55 -FF36 FF56 -FF37 FF57 -FF38 FF58 -FF39 FF59 -FF3A FF5A -10400 10428 -10401 10429 -10402 1042A -10403 1042B -10404 1042C -10405 1042D -10406 1042E -10407 1042F -10408 10430 -10409 10431 -1040A 10432 -1040B 10433 -1040C 10434 -1040D 10435 -1040E 10436 -1040F 10437 -10410 10438 -10411 10439 -10412 1043A -10413 1043B -10414 1043C -10415 1043D -10416 1043E -10417 1043F -10418 10440 -10419 10441 -1041A 10442 -1041B 10443 -1041C 10444 -1041D 10445 -1041E 10446 -1041F 10447 -10420 10448 -10421 10449 -10422 1044A -10423 1044B -10424 1044C -10425 1044D -10426 1044E -10427 1044F -104B0 104D8 -104B1 104D9 -104B2 104DA -104B3 104DB -104B4 104DC -104B5 104DD -104B6 104DE -104B7 104DF -104B8 104E0 -104B9 104E1 -104BA 104E2 -104BB 104E3 -104BC 104E4 -104BD 104E5 -104BE 104E6 -104BF 104E7 -104C0 104E8 -104C1 104E9 -104C2 104EA -104C3 104EB -104C4 104EC -104C5 104ED -104C6 104EE -104C7 104EF -104C8 104F0 -104C9 104F1 -104CA 104F2 -104CB 104F3 -104CC 104F4 -104CD 104F5 -104CE 104F6 -104CF 104F7 -104D0 104F8 -104D1 104F9 -104D2 104FA -104D3 104FB -10C80 10CC0 -10C81 10CC1 -10C82 10CC2 -10C83 10CC3 -10C84 10CC4 -10C85 10CC5 -10C86 10CC6 -10C87 10CC7 -10C88 10CC8 -10C89 10CC9 -10C8A 10CCA -10C8B 10CCB -10C8C 10CCC -10C8D 10CCD -10C8E 10CCE -10C8F 10CCF -10C90 10CD0 -10C91 10CD1 -10C92 10CD2 -10C93 10CD3 -10C94 10CD4 -10C95 10CD5 -10C96 10CD6 -10C97 10CD7 -10C98 10CD8 -10C99 10CD9 -10C9A 10CDA -10C9B 10CDB -10C9C 10CDC -10C9D 10CDD -10C9E 10CDE -10C9F 10CDF -10CA0 10CE0 -10CA1 10CE1 -10CA2 10CE2 -10CA3 10CE3 -10CA4 10CE4 -10CA5 10CE5 -10CA6 10CE6 -10CA7 10CE7 -10CA8 10CE8 -10CA9 10CE9 -10CAA 10CEA -10CAB 10CEB -10CAC 10CEC -10CAD 10CED -10CAE 10CEE -10CAF 10CEF -10CB0 10CF0 -10CB1 10CF1 -10CB2 10CF2 -118A0 118C0 -118A1 118C1 -118A2 118C2 -118A3 118C3 -118A4 118C4 -118A5 118C5 -118A6 118C6 -118A7 118C7 -118A8 118C8 -118A9 118C9 -118AA 118CA -118AB 118CB -118AC 118CC -118AD 118CD -118AE 118CE -118AF 118CF -118B0 118D0 -118B1 118D1 -118B2 118D2 -118B3 118D3 -118B4 118D4 -118B5 118D5 -118B6 118D6 -118B7 118D7 -118B8 118D8 -118B9 118D9 -118BA 118DA -118BB 118DB -118BC 118DC -118BD 118DD -118BE 118DE -118BF 118DF -16E40 16E60 -16E41 16E61 -16E42 16E62 -16E43 16E63 -16E44 16E64 -16E45 16E65 -16E46 16E66 -16E47 16E67 -16E48 16E68 -16E49 16E69 -16E4A 16E6A -16E4B 16E6B -16E4C 16E6C -16E4D 16E6D -16E4E 16E6E -16E4F 16E6F -16E50 16E70 -16E51 16E71 -16E52 16E72 -16E53 16E73 -16E54 16E74 -16E55 16E75 -16E56 16E76 -16E57 16E77 -16E58 16E78 -16E59 16E79 -16E5A 16E7A -16E5B 16E7B -16E5C 16E7C -16E5D 16E7D -16E5E 16E7E -16E5F 16E7F -1E900 1E922 -1E901 1E923 -1E902 1E924 -1E903 1E925 -1E904 1E926 -1E905 1E927 -1E906 1E928 -1E907 1E929 -1E908 1E92A -1E909 1E92B -1E90A 1E92C -1E90B 1E92D -1E90C 1E92E -1E90D 1E92F -1E90E 1E930 -1E90F 1E931 -1E910 1E932 -1E911 1E933 -1E912 1E934 -1E913 1E935 -1E914 1E936 -1E915 1E937 -1E916 1E938 -1E917 1E939 -1E918 1E93A -1E919 1E93B -1E91A 1E93C -1E91B 1E93D -1E91C 1E93E -1E91D 1E93F -1E91E 1E940 -1E91F 1E941 -1E920 1E942 -1E921 1E943 -END diff --git a/gnu/usr.bin/perl/lib/unicore/To/Title.pl b/gnu/usr.bin/perl/lib/unicore/To/Title.pl deleted file mode 100644 index 9386d9a2b5e..00000000000 --- a/gnu/usr.bin/perl/lib/unicore/To/Title.pl +++ /dev/null @@ -1,1447 +0,0 @@ -# !!!!!!! DO NOT EDIT THIS FILE !!!!!!! -# This file is machine-generated by lib/unicore/mktables from the Unicode -# database, Version 13.0.0. Any changes made here will be lost! - -# !!!!!!! IT IS DEPRECATED TO USE THIS FILE !!!!!!! - -# This file is for internal use by core Perl only. It is retained for -# backwards compatibility with applications that may have come to rely on it, -# but its format and even its name or existence are subject to change without -# notice in a future Perl version. Don't use it directly. Instead, its -# contents are now retrievable through a stable API in the Unicode::UCD -# module: Unicode::UCD::prop_invmap('Titlecase_Mapping') (Values for individual -# code points can be retrieved via Unicode::UCD::charprop()); - - - -# The name this table is to be known by, with the format of the mappings in -# the main body of the table, and what all code points missing from this file -# map to. -$Unicode::UCD::SwashInfo{'ToTitle'}{'format'} = 'x'; # non-negative hex whole number; a code point -$Unicode::UCD::SwashInfo{'ToTitle'}{'specials_name'} = 'Unicode::UCD::ToSpecTitle'; # Name of hash of special mappings -$Unicode::UCD::SwashInfo{'ToTitle'}{'missing'} = ''; # code point maps to itself - -# Some code points require special handling because their mappings are each to -# multiple code points. These do not appear in the main body, but are defined -# in the hash below. - -# Each key is the string of N bytes that together make up the UTF-8 encoding -# for the code point. (i.e. the same as looking at the code point's UTF-8 -# under "use bytes"). Each value is the UTF-8 of the translation, for speed. -%Unicode::UCD::ToSpecTitle = ( -"\xC3\x9F" => "\x{0053}\x{0073}", # U+00DF => 0053 0073 -"\xC5\x89" => "\x{02BC}\x{004E}", # U+0149 => 02BC 004E -"\xC7\xB0" => "\x{004A}\x{030C}", # U+01F0 => 004A 030C -"\xCE\x90" => "\x{0399}\x{0308}\x{0301}", # U+0390 => 0399 0308 0301 -"\xCE\xB0" => "\x{03A5}\x{0308}\x{0301}", # U+03B0 => 03A5 0308 0301 -"\xD6\x87" => "\x{0535}\x{0582}", # U+0587 => 0535 0582 -"\xE1\xBA\x96" => "\x{0048}\x{0331}", # U+1E96 => 0048 0331 -"\xE1\xBA\x97" => "\x{0054}\x{0308}", # U+1E97 => 0054 0308 -"\xE1\xBA\x98" => "\x{0057}\x{030A}", # U+1E98 => 0057 030A -"\xE1\xBA\x99" => "\x{0059}\x{030A}", # U+1E99 => 0059 030A -"\xE1\xBA\x9A" => "\x{0041}\x{02BE}", # U+1E9A => 0041 02BE -"\xE1\xBD\x90" => "\x{03A5}\x{0313}", # U+1F50 => 03A5 0313 -"\xE1\xBD\x92" => "\x{03A5}\x{0313}\x{0300}", # U+1F52 => 03A5 0313 0300 -"\xE1\xBD\x94" => "\x{03A5}\x{0313}\x{0301}", # U+1F54 => 03A5 0313 0301 -"\xE1\xBD\x96" => "\x{03A5}\x{0313}\x{0342}", # U+1F56 => 03A5 0313 0342 -"\xE1\xBE\xB2" => "\x{1FBA}\x{0345}", # U+1FB2 => 1FBA 0345 -"\xE1\xBE\xB4" => "\x{0386}\x{0345}", # U+1FB4 => 0386 0345 -"\xE1\xBE\xB6" => "\x{0391}\x{0342}", # U+1FB6 => 0391 0342 -"\xE1\xBE\xB7" => "\x{0391}\x{0342}\x{0345}", # U+1FB7 => 0391 0342 0345 -"\xE1\xBF\x82" => "\x{1FCA}\x{0345}", # U+1FC2 => 1FCA 0345 -"\xE1\xBF\x84" => "\x{0389}\x{0345}", # U+1FC4 => 0389 0345 -"\xE1\xBF\x86" => "\x{0397}\x{0342}", # U+1FC6 => 0397 0342 -"\xE1\xBF\x87" => "\x{0397}\x{0342}\x{0345}", # U+1FC7 => 0397 0342 0345 -"\xE1\xBF\x92" => "\x{0399}\x{0308}\x{0300}", # U+1FD2 => 0399 0308 0300 -"\xE1\xBF\x93" => "\x{0399}\x{0308}\x{0301}", # U+1FD3 => 0399 0308 0301 -"\xE1\xBF\x96" => "\x{0399}\x{0342}", # U+1FD6 => 0399 0342 -"\xE1\xBF\x97" => "\x{0399}\x{0308}\x{0342}", # U+1FD7 => 0399 0308 0342 -"\xE1\xBF\xA2" => "\x{03A5}\x{0308}\x{0300}", # U+1FE2 => 03A5 0308 0300 -"\xE1\xBF\xA3" => "\x{03A5}\x{0308}\x{0301}", # U+1FE3 => 03A5 0308 0301 -"\xE1\xBF\xA4" => "\x{03A1}\x{0313}", # U+1FE4 => 03A1 0313 -"\xE1\xBF\xA6" => "\x{03A5}\x{0342}", # U+1FE6 => 03A5 0342 -"\xE1\xBF\xA7" => "\x{03A5}\x{0308}\x{0342}", # U+1FE7 => 03A5 0308 0342 -"\xE1\xBF\xB2" => "\x{1FFA}\x{0345}", # U+1FF2 => 1FFA 0345 -"\xE1\xBF\xB4" => "\x{038F}\x{0345}", # U+1FF4 => 038F 0345 -"\xE1\xBF\xB6" => "\x{03A9}\x{0342}", # U+1FF6 => 03A9 0342 -"\xE1\xBF\xB7" => "\x{03A9}\x{0342}\x{0345}", # U+1FF7 => 03A9 0342 0345 -"\xEF\xAC\x80" => "\x{0046}\x{0066}", # U+FB00 => 0046 0066 -"\xEF\xAC\x81" => "\x{0046}\x{0069}", # U+FB01 => 0046 0069 -"\xEF\xAC\x82" => "\x{0046}\x{006C}", # U+FB02 => 0046 006C -"\xEF\xAC\x83" => "\x{0046}\x{0066}\x{0069}", # U+FB03 => 0046 0066 0069 -"\xEF\xAC\x84" => "\x{0046}\x{0066}\x{006C}", # U+FB04 => 0046 0066 006C -"\xEF\xAC\x85" => "\x{0053}\x{0074}", # U+FB05 => 0053 0074 -"\xEF\xAC\x86" => "\x{0053}\x{0074}", # U+FB06 => 0053 0074 -"\xEF\xAC\x93" => "\x{0544}\x{0576}", # U+FB13 => 0544 0576 -"\xEF\xAC\x94" => "\x{0544}\x{0565}", # U+FB14 => 0544 0565 -"\xEF\xAC\x95" => "\x{0544}\x{056B}", # U+FB15 => 0544 056B -"\xEF\xAC\x96" => "\x{054E}\x{0576}", # U+FB16 => 054E 0576 -"\xEF\xAC\x97" => "\x{0544}\x{056D}", # U+FB17 => 0544 056D -); - -return <<'END'; -0061 0041 -0062 0042 -0063 0043 -0064 0044 -0065 0045 -0066 0046 -0067 0047 -0068 0048 -0069 0049 -006A 004A -006B 004B -006C 004C -006D 004D -006E 004E -006F 004F -0070 0050 -0071 0051 -0072 0052 -0073 0053 -0074 0054 -0075 0055 -0076 0056 -0077 0057 -0078 0058 -0079 0059 -007A 005A -00B5 039C -00E0 00C0 -00E1 00C1 -00E2 00C2 -00E3 00C3 -00E4 00C4 -00E5 00C5 -00E6 00C6 -00E7 00C7 -00E8 00C8 -00E9 00C9 -00EA 00CA -00EB 00CB -00EC 00CC -00ED 00CD -00EE 00CE -00EF 00CF -00F0 00D0 -00F1 00D1 -00F2 00D2 -00F3 00D3 -00F4 00D4 -00F5 00D5 -00F6 00D6 -00F8 00D8 -00F9 00D9 -00FA 00DA -00FB 00DB -00FC 00DC -00FD 00DD -00FE 00DE -00FF 0178 -0101 0100 -0103 0102 -0105 0104 -0107 0106 -0109 0108 -010B 010A -010D 010C -010F 010E -0111 0110 -0113 0112 -0115 0114 -0117 0116 -0119 0118 -011B 011A -011D 011C -011F 011E -0121 0120 -0123 0122 -0125 0124 -0127 0126 -0129 0128 -012B 012A -012D 012C -012F 012E -0131 0049 -0133 0132 -0135 0134 -0137 0136 -013A 0139 -013C 013B -013E 013D -0140 013F -0142 0141 -0144 0143 -0146 0145 -0148 0147 -014B 014A -014D 014C -014F 014E -0151 0150 -0153 0152 -0155 0154 -0157 0156 -0159 0158 -015B 015A -015D 015C -015F 015E -0161 0160 -0163 0162 -0165 0164 -0167 0166 -0169 0168 -016B 016A -016D 016C -016F 016E -0171 0170 -0173 0172 -0175 0174 -0177 0176 -017A 0179 -017C 017B -017E 017D -017F 0053 -0180 0243 -0183 0182 -0185 0184 -0188 0187 -018C 018B -0192 0191 -0195 01F6 -0199 0198 -019A 023D -019E 0220 -01A1 01A0 -01A3 01A2 -01A5 01A4 -01A8 01A7 -01AD 01AC -01B0 01AF -01B4 01B3 -01B6 01B5 -01B9 01B8 -01BD 01BC -01BF 01F7 -01C4 01C5 -01C6 01C5 -01C7 01C8 -01C9 01C8 -01CA 01CB -01CC 01CB -01CE 01CD -01D0 01CF -01D2 01D1 -01D4 01D3 -01D6 01D5 -01D8 01D7 -01DA 01D9 -01DC 01DB -01DD 018E -01DF 01DE -01E1 01E0 -01E3 01E2 -01E5 01E4 -01E7 01E6 -01E9 01E8 -01EB 01EA -01ED 01EC -01EF 01EE -01F1 01F2 -01F3 01F2 -01F5 01F4 -01F9 01F8 -01FB 01FA -01FD 01FC -01FF 01FE -0201 0200 -0203 0202 -0205 0204 -0207 0206 -0209 0208 -020B 020A -020D 020C -020F 020E -0211 0210 -0213 0212 -0215 0214 -0217 0216 -0219 0218 -021B 021A -021D 021C -021F 021E -0223 0222 -0225 0224 -0227 0226 -0229 0228 -022B 022A -022D 022C -022F 022E -0231 0230 -0233 0232 -023C 023B -023F 2C7E -0240 2C7F -0242 0241 -0247 0246 -0249 0248 -024B 024A -024D 024C -024F 024E -0250 2C6F -0251 2C6D -0252 2C70 -0253 0181 -0254 0186 -0256 0189 -0257 018A -0259 018F -025B 0190 -025C A7AB -0260 0193 -0261 A7AC -0263 0194 -0265 A78D -0266 A7AA -0268 0197 -0269 0196 -026A A7AE -026B 2C62 -026C A7AD -026F 019C -0271 2C6E -0272 019D -0275 019F -027D 2C64 -0280 01A6 -0282 A7C5 -0283 01A9 -0287 A7B1 -0288 01AE -0289 0244 -028A 01B1 -028B 01B2 -028C 0245 -0292 01B7 -029D A7B2 -029E A7B0 -0345 0399 -0371 0370 -0373 0372 -0377 0376 -037B 03FD -037C 03FE -037D 03FF -03AC 0386 -03AD 0388 -03AE 0389 -03AF 038A -03B1 0391 -03B2 0392 -03B3 0393 -03B4 0394 -03B5 0395 -03B6 0396 -03B7 0397 -03B8 0398 -03B9 0399 -03BA 039A -03BB 039B -03BC 039C -03BD 039D -03BE 039E -03BF 039F -03C0 03A0 -03C1 03A1 -03C2 03A3 -03C3 03A3 -03C4 03A4 -03C5 03A5 -03C6 03A6 -03C7 03A7 -03C8 03A8 -03C9 03A9 -03CA 03AA -03CB 03AB -03CC 038C -03CD 038E -03CE 038F -03D0 0392 -03D1 0398 -03D5 03A6 -03D6 03A0 -03D7 03CF -03D9 03D8 -03DB 03DA -03DD 03DC -03DF 03DE -03E1 03E0 -03E3 03E2 -03E5 03E4 -03E7 03E6 -03E9 03E8 -03EB 03EA -03ED 03EC -03EF 03EE -03F0 039A -03F1 03A1 -03F2 03F9 -03F3 037F -03F5 0395 -03F8 03F7 -03FB 03FA -0430 0410 -0431 0411 -0432 0412 -0433 0413 -0434 0414 -0435 0415 -0436 0416 -0437 0417 -0438 0418 -0439 0419 -043A 041A -043B 041B -043C 041C -043D 041D -043E 041E -043F 041F -0440 0420 -0441 0421 -0442 0422 -0443 0423 -0444 0424 -0445 0425 -0446 0426 -0447 0427 -0448 0428 -0449 0429 -044A 042A -044B 042B -044C 042C -044D 042D -044E 042E -044F 042F -0450 0400 -0451 0401 -0452 0402 -0453 0403 -0454 0404 -0455 0405 -0456 0406 -0457 0407 -0458 0408 -0459 0409 -045A 040A -045B 040B -045C 040C -045D 040D -045E 040E -045F 040F -0461 0460 -0463 0462 -0465 0464 -0467 0466 -0469 0468 -046B 046A -046D 046C -046F 046E -0471 0470 -0473 0472 -0475 0474 -0477 0476 -0479 0478 -047B 047A -047D 047C -047F 047E -0481 0480 -048B 048A -048D 048C -048F 048E -0491 0490 -0493 0492 -0495 0494 -0497 0496 -0499 0498 -049B 049A -049D 049C -049F 049E -04A1 04A0 -04A3 04A2 -04A5 04A4 -04A7 04A6 -04A9 04A8 -04AB 04AA -04AD 04AC -04AF 04AE -04B1 04B0 -04B3 04B2 -04B5 04B4 -04B7 04B6 -04B9 04B8 -04BB 04BA -04BD 04BC -04BF 04BE -04C2 04C1 -04C4 04C3 -04C6 04C5 -04C8 04C7 -04CA 04C9 -04CC 04CB -04CE 04CD -04CF 04C0 -04D1 04D0 -04D3 04D2 -04D5 04D4 -04D7 04D6 -04D9 04D8 -04DB 04DA -04DD 04DC -04DF 04DE -04E1 04E0 -04E3 04E2 -04E5 04E4 -04E7 04E6 -04E9 04E8 -04EB 04EA -04ED 04EC -04EF 04EE -04F1 04F0 -04F3 04F2 -04F5 04F4 -04F7 04F6 -04F9 04F8 -04FB 04FA -04FD 04FC -04FF 04FE -0501 0500 -0503 0502 -0505 0504 -0507 0506 -0509 0508 -050B 050A -050D 050C -050F 050E -0511 0510 -0513 0512 -0515 0514 -0517 0516 -0519 0518 -051B 051A -051D 051C -051F 051E -0521 0520 -0523 0522 -0525 0524 -0527 0526 -0529 0528 -052B 052A -052D 052C -052F 052E -0561 0531 -0562 0532 -0563 0533 -0564 0534 -0565 0535 -0566 0536 -0567 0537 -0568 0538 -0569 0539 -056A 053A -056B 053B -056C 053C -056D 053D -056E 053E -056F 053F -0570 0540 -0571 0541 -0572 0542 -0573 0543 -0574 0544 -0575 0545 -0576 0546 -0577 0547 -0578 0548 -0579 0549 -057A 054A -057B 054B -057C 054C -057D 054D -057E 054E -057F 054F -0580 0550 -0581 0551 -0582 0552 -0583 0553 -0584 0554 -0585 0555 -0586 0556 -13F8 13F0 -13F9 13F1 -13FA 13F2 -13FB 13F3 -13FC 13F4 -13FD 13F5 -1C80 0412 -1C81 0414 -1C82 041E -1C83 0421 -1C84 0422 -1C85 0422 -1C86 042A -1C87 0462 -1C88 A64A -1D79 A77D -1D7D 2C63 -1D8E A7C6 -1E01 1E00 -1E03 1E02 -1E05 1E04 -1E07 1E06 -1E09 1E08 -1E0B 1E0A -1E0D 1E0C -1E0F 1E0E -1E11 1E10 -1E13 1E12 -1E15 1E14 -1E17 1E16 -1E19 1E18 -1E1B 1E1A -1E1D 1E1C -1E1F 1E1E -1E21 1E20 -1E23 1E22 -1E25 1E24 -1E27 1E26 -1E29 1E28 -1E2B 1E2A -1E2D 1E2C -1E2F 1E2E -1E31 1E30 -1E33 1E32 -1E35 1E34 -1E37 1E36 -1E39 1E38 -1E3B 1E3A -1E3D 1E3C -1E3F 1E3E -1E41 1E40 -1E43 1E42 -1E45 1E44 -1E47 1E46 -1E49 1E48 -1E4B 1E4A -1E4D 1E4C -1E4F 1E4E -1E51 1E50 -1E53 1E52 -1E55 1E54 -1E57 1E56 -1E59 1E58 -1E5B 1E5A -1E5D 1E5C -1E5F 1E5E -1E61 1E60 -1E63 1E62 -1E65 1E64 -1E67 1E66 -1E69 1E68 -1E6B 1E6A -1E6D 1E6C -1E6F 1E6E -1E71 1E70 -1E73 1E72 -1E75 1E74 -1E77 1E76 -1E79 1E78 -1E7B 1E7A -1E7D 1E7C -1E7F 1E7E -1E81 1E80 -1E83 1E82 -1E85 1E84 -1E87 1E86 -1E89 1E88 -1E8B 1E8A -1E8D 1E8C -1E8F 1E8E -1E91 1E90 -1E93 1E92 -1E95 1E94 -1E9B 1E60 -1EA1 1EA0 -1EA3 1EA2 -1EA5 1EA4 -1EA7 1EA6 -1EA9 1EA8 -1EAB 1EAA -1EAD 1EAC -1EAF 1EAE -1EB1 1EB0 -1EB3 1EB2 -1EB5 1EB4 -1EB7 1EB6 -1EB9 1EB8 -1EBB 1EBA -1EBD 1EBC -1EBF 1EBE -1EC1 1EC0 -1EC3 1EC2 -1EC5 1EC4 -1EC7 1EC6 -1EC9 1EC8 -1ECB 1ECA -1ECD 1ECC -1ECF 1ECE -1ED1 1ED0 -1ED3 1ED2 -1ED5 1ED4 -1ED7 1ED6 -1ED9 1ED8 -1EDB 1EDA -1EDD 1EDC -1EDF 1EDE -1EE1 1EE0 -1EE3 1EE2 -1EE5 1EE4 -1EE7 1EE6 -1EE9 1EE8 -1EEB 1EEA -1EED 1EEC -1EEF 1EEE -1EF1 1EF0 -1EF3 1EF2 -1EF5 1EF4 -1EF7 1EF6 -1EF9 1EF8 -1EFB 1EFA -1EFD 1EFC -1EFF 1EFE -1F00 1F08 -1F01 1F09 -1F02 1F0A -1F03 1F0B -1F04 1F0C -1F05 1F0D -1F06 1F0E -1F07 1F0F -1F10 1F18 -1F11 1F19 -1F12 1F1A -1F13 1F1B -1F14 1F1C -1F15 1F1D -1F20 1F28 -1F21 1F29 -1F22 1F2A -1F23 1F2B -1F24 1F2C -1F25 1F2D -1F26 1F2E -1F27 1F2F -1F30 1F38 -1F31 1F39 -1F32 1F3A -1F33 1F3B -1F34 1F3C -1F35 1F3D -1F36 1F3E -1F37 1F3F -1F40 1F48 -1F41 1F49 -1F42 1F4A -1F43 1F4B -1F44 1F4C -1F45 1F4D -1F51 1F59 -1F53 1F5B -1F55 1F5D -1F57 1F5F -1F60 1F68 -1F61 1F69 -1F62 1F6A -1F63 1F6B -1F64 1F6C -1F65 1F6D -1F66 1F6E -1F67 1F6F -1F70 1FBA -1F71 1FBB -1F72 1FC8 -1F73 1FC9 -1F74 1FCA -1F75 1FCB -1F76 1FDA -1F77 1FDB -1F78 1FF8 -1F79 1FF9 -1F7A 1FEA -1F7B 1FEB -1F7C 1FFA -1F7D 1FFB -1F80 1F88 -1F81 1F89 -1F82 1F8A -1F83 1F8B -1F84 1F8C -1F85 1F8D -1F86 1F8E -1F87 1F8F -1F90 1F98 -1F91 1F99 -1F92 1F9A -1F93 1F9B -1F94 1F9C -1F95 1F9D -1F96 1F9E -1F97 1F9F -1FA0 1FA8 -1FA1 1FA9 -1FA2 1FAA -1FA3 1FAB -1FA4 1FAC -1FA5 1FAD -1FA6 1FAE -1FA7 1FAF -1FB0 1FB8 -1FB1 1FB9 -1FB3 1FBC -1FBE 0399 -1FC3 1FCC -1FD0 1FD8 -1FD1 1FD9 -1FE0 1FE8 -1FE1 1FE9 -1FE5 1FEC -1FF3 1FFC -214E 2132 -2170 2160 -2171 2161 -2172 2162 -2173 2163 -2174 2164 -2175 2165 -2176 2166 -2177 2167 -2178 2168 -2179 2169 -217A 216A -217B 216B -217C 216C -217D 216D -217E 216E -217F 216F -2184 2183 -24D0 24B6 -24D1 24B7 -24D2 24B8 -24D3 24B9 -24D4 24BA -24D5 24BB -24D6 24BC -24D7 24BD -24D8 24BE -24D9 24BF -24DA 24C0 -24DB 24C1 -24DC 24C2 -24DD 24C3 -24DE 24C4 -24DF 24C5 -24E0 24C6 -24E1 24C7 -24E2 24C8 -24E3 24C9 -24E4 24CA -24E5 24CB -24E6 24CC -24E7 24CD -24E8 24CE -24E9 24CF -2C30 2C00 -2C31 2C01 -2C32 2C02 -2C33 2C03 -2C34 2C04 -2C35 2C05 -2C36 2C06 -2C37 2C07 -2C38 2C08 -2C39 2C09 -2C3A 2C0A -2C3B 2C0B -2C3C 2C0C -2C3D 2C0D -2C3E 2C0E -2C3F 2C0F -2C40 2C10 -2C41 2C11 -2C42 2C12 -2C43 2C13 -2C44 2C14 -2C45 2C15 -2C46 2C16 -2C47 2C17 -2C48 2C18 -2C49 2C19 -2C4A 2C1A -2C4B 2C1B -2C4C 2C1C -2C4D 2C1D -2C4E 2C1E -2C4F 2C1F -2C50 2C20 -2C51 2C21 -2C52 2C22 -2C53 2C23 -2C54 2C24 -2C55 2C25 -2C56 2C26 -2C57 2C27 -2C58 2C28 -2C59 2C29 -2C5A 2C2A -2C5B 2C2B -2C5C 2C2C -2C5D 2C2D -2C5E 2C2E -2C61 2C60 -2C65 023A -2C66 023E -2C68 2C67 -2C6A 2C69 -2C6C 2C6B -2C73 2C72 -2C76 2C75 -2C81 2C80 -2C83 2C82 -2C85 2C84 -2C87 2C86 -2C89 2C88 -2C8B 2C8A -2C8D 2C8C -2C8F 2C8E -2C91 2C90 -2C93 2C92 -2C95 2C94 -2C97 2C96 -2C99 2C98 -2C9B 2C9A -2C9D 2C9C -2C9F 2C9E -2CA1 2CA0 -2CA3 2CA2 -2CA5 2CA4 -2CA7 2CA6 -2CA9 2CA8 -2CAB 2CAA -2CAD 2CAC -2CAF 2CAE -2CB1 2CB0 -2CB3 2CB2 -2CB5 2CB4 -2CB7 2CB6 -2CB9 2CB8 -2CBB 2CBA -2CBD 2CBC -2CBF 2CBE -2CC1 2CC0 -2CC3 2CC2 -2CC5 2CC4 -2CC7 2CC6 -2CC9 2CC8 -2CCB 2CCA -2CCD 2CCC -2CCF 2CCE -2CD1 2CD0 -2CD3 2CD2 -2CD5 2CD4 -2CD7 2CD6 -2CD9 2CD8 -2CDB 2CDA -2CDD 2CDC -2CDF 2CDE -2CE1 2CE0 -2CE3 2CE2 -2CEC 2CEB -2CEE 2CED -2CF3 2CF2 -2D00 10A0 -2D01 10A1 -2D02 10A2 -2D03 10A3 -2D04 10A4 -2D05 10A5 -2D06 10A6 -2D07 10A7 -2D08 10A8 -2D09 10A9 -2D0A 10AA -2D0B 10AB -2D0C 10AC -2D0D 10AD -2D0E 10AE -2D0F 10AF -2D10 10B0 -2D11 10B1 -2D12 10B2 -2D13 10B3 -2D14 10B4 -2D15 10B5 -2D16 10B6 -2D17 10B7 -2D18 10B8 -2D19 10B9 -2D1A 10BA -2D1B 10BB -2D1C 10BC -2D1D 10BD -2D1E 10BE -2D1F 10BF -2D20 10C0 -2D21 10C1 -2D22 10C2 -2D23 10C3 -2D24 10C4 -2D25 10C5 -2D27 10C7 -2D2D 10CD -A641 A640 -A643 A642 -A645 A644 -A647 A646 -A649 A648 -A64B A64A -A64D A64C -A64F A64E -A651 A650 -A653 A652 -A655 A654 -A657 A656 -A659 A658 -A65B A65A -A65D A65C -A65F A65E -A661 A660 -A663 A662 -A665 A664 -A667 A666 -A669 A668 -A66B A66A -A66D A66C -A681 A680 -A683 A682 -A685 A684 -A687 A686 -A689 A688 -A68B A68A -A68D A68C -A68F A68E -A691 A690 -A693 A692 -A695 A694 -A697 A696 -A699 A698 -A69B A69A -A723 A722 -A725 A724 -A727 A726 -A729 A728 -A72B A72A -A72D A72C -A72F A72E -A733 A732 -A735 A734 -A737 A736 -A739 A738 -A73B A73A -A73D A73C -A73F A73E -A741 A740 -A743 A742 -A745 A744 -A747 A746 -A749 A748 -A74B A74A -A74D A74C -A74F A74E -A751 A750 -A753 A752 -A755 A754 -A757 A756 -A759 A758 -A75B A75A -A75D A75C -A75F A75E -A761 A760 -A763 A762 -A765 A764 -A767 A766 -A769 A768 -A76B A76A -A76D A76C -A76F A76E -A77A A779 -A77C A77B -A77F A77E -A781 A780 -A783 A782 -A785 A784 -A787 A786 -A78C A78B -A791 A790 -A793 A792 -A794 A7C4 -A797 A796 -A799 A798 -A79B A79A -A79D A79C -A79F A79E -A7A1 A7A0 -A7A3 A7A2 -A7A5 A7A4 -A7A7 A7A6 -A7A9 A7A8 -A7B5 A7B4 -A7B7 A7B6 -A7B9 A7B8 -A7BB A7BA -A7BD A7BC -A7BF A7BE -A7C3 A7C2 -A7C8 A7C7 -A7CA A7C9 -A7F6 A7F5 -AB53 A7B3 -AB70 13A0 -AB71 13A1 -AB72 13A2 -AB73 13A3 -AB74 13A4 -AB75 13A5 -AB76 13A6 -AB77 13A7 -AB78 13A8 -AB79 13A9 -AB7A 13AA -AB7B 13AB -AB7C 13AC -AB7D 13AD -AB7E 13AE -AB7F 13AF -AB80 13B0 -AB81 13B1 -AB82 13B2 -AB83 13B3 -AB84 13B4 -AB85 13B5 -AB86 13B6 -AB87 13B7 -AB88 13B8 -AB89 13B9 -AB8A 13BA -AB8B 13BB -AB8C 13BC -AB8D 13BD -AB8E 13BE -AB8F 13BF -AB90 13C0 -AB91 13C1 -AB92 13C2 -AB93 13C3 -AB94 13C4 -AB95 13C5 -AB96 13C6 -AB97 13C7 -AB98 13C8 -AB99 13C9 -AB9A 13CA -AB9B 13CB -AB9C 13CC -AB9D 13CD -AB9E 13CE -AB9F 13CF -ABA0 13D0 -ABA1 13D1 -ABA2 13D2 -ABA3 13D3 -ABA4 13D4 -ABA5 13D5 -ABA6 13D6 -ABA7 13D7 -ABA8 13D8 -ABA9 13D9 -ABAA 13DA -ABAB 13DB -ABAC 13DC -ABAD 13DD -ABAE 13DE -ABAF 13DF -ABB0 13E0 -ABB1 13E1 -ABB2 13E2 -ABB3 13E3 -ABB4 13E4 -ABB5 13E5 -ABB6 13E6 -ABB7 13E7 -ABB8 13E8 -ABB9 13E9 -ABBA 13EA -ABBB 13EB -ABBC 13EC -ABBD 13ED -ABBE 13EE -ABBF 13EF -FF41 FF21 -FF42 FF22 -FF43 FF23 -FF44 FF24 -FF45 FF25 -FF46 FF26 -FF47 FF27 -FF48 FF28 -FF49 FF29 -FF4A FF2A -FF4B FF2B -FF4C FF2C -FF4D FF2D -FF4E FF2E -FF4F FF2F -FF50 FF30 -FF51 FF31 -FF52 FF32 -FF53 FF33 -FF54 FF34 -FF55 FF35 -FF56 FF36 -FF57 FF37 -FF58 FF38 -FF59 FF39 -FF5A FF3A -10428 10400 -10429 10401 -1042A 10402 -1042B 10403 -1042C 10404 -1042D 10405 -1042E 10406 -1042F 10407 -10430 10408 -10431 10409 -10432 1040A -10433 1040B -10434 1040C -10435 1040D -10436 1040E -10437 1040F -10438 10410 -10439 10411 -1043A 10412 -1043B 10413 -1043C 10414 -1043D 10415 -1043E 10416 -1043F 10417 -10440 10418 -10441 10419 -10442 1041A -10443 1041B -10444 1041C -10445 1041D -10446 1041E -10447 1041F -10448 10420 -10449 10421 -1044A 10422 -1044B 10423 -1044C 10424 -1044D 10425 -1044E 10426 -1044F 10427 -104D8 104B0 -104D9 104B1 -104DA 104B2 -104DB 104B3 -104DC 104B4 -104DD 104B5 -104DE 104B6 -104DF 104B7 -104E0 104B8 -104E1 104B9 -104E2 104BA -104E3 104BB -104E4 104BC -104E5 104BD -104E6 104BE -104E7 104BF -104E8 104C0 -104E9 104C1 -104EA 104C2 -104EB 104C3 -104EC 104C4 -104ED 104C5 -104EE 104C6 -104EF 104C7 -104F0 104C8 -104F1 104C9 -104F2 104CA -104F3 104CB -104F4 104CC -104F5 104CD -104F6 104CE -104F7 104CF -104F8 104D0 -104F9 104D1 -104FA 104D2 -104FB 104D3 -10CC0 10C80 -10CC1 10C81 -10CC2 10C82 -10CC3 10C83 -10CC4 10C84 -10CC5 10C85 -10CC6 10C86 -10CC7 10C87 -10CC8 10C88 -10CC9 10C89 -10CCA 10C8A -10CCB 10C8B -10CCC 10C8C -10CCD 10C8D -10CCE 10C8E -10CCF 10C8F -10CD0 10C90 -10CD1 10C91 -10CD2 10C92 -10CD3 10C93 -10CD4 10C94 -10CD5 10C95 -10CD6 10C96 -10CD7 10C97 -10CD8 10C98 -10CD9 10C99 -10CDA 10C9A -10CDB 10C9B -10CDC 10C9C -10CDD 10C9D -10CDE 10C9E -10CDF 10C9F -10CE0 10CA0 -10CE1 10CA1 -10CE2 10CA2 -10CE3 10CA3 -10CE4 10CA4 -10CE5 10CA5 -10CE6 10CA6 -10CE7 10CA7 -10CE8 10CA8 -10CE9 10CA9 -10CEA 10CAA -10CEB 10CAB -10CEC 10CAC -10CED 10CAD -10CEE 10CAE -10CEF 10CAF -10CF0 10CB0 -10CF1 10CB1 -10CF2 10CB2 -118C0 118A0 -118C1 118A1 -118C2 118A2 -118C3 118A3 -118C4 118A4 -118C5 118A5 -118C6 118A6 -118C7 118A7 -118C8 118A8 -118C9 118A9 -118CA 118AA -118CB 118AB -118CC 118AC -118CD 118AD -118CE 118AE -118CF 118AF -118D0 118B0 -118D1 118B1 -118D2 118B2 -118D3 118B3 -118D4 118B4 -118D5 118B5 -118D6 118B6 -118D7 118B7 -118D8 118B8 -118D9 118B9 -118DA 118BA -118DB 118BB -118DC 118BC -118DD 118BD -118DE 118BE -118DF 118BF -16E60 16E40 -16E61 16E41 -16E62 16E42 -16E63 16E43 -16E64 16E44 -16E65 16E45 -16E66 16E46 -16E67 16E47 -16E68 16E48 -16E69 16E49 -16E6A 16E4A -16E6B 16E4B -16E6C 16E4C -16E6D 16E4D -16E6E 16E4E -16E6F 16E4F -16E70 16E50 -16E71 16E51 -16E72 16E52 -16E73 16E53 -16E74 16E54 -16E75 16E55 -16E76 16E56 -16E77 16E57 -16E78 16E58 -16E79 16E59 -16E7A 16E5A -16E7B 16E5B -16E7C 16E5C -16E7D 16E5D -16E7E 16E5E -16E7F 16E5F -1E922 1E900 -1E923 1E901 -1E924 1E902 -1E925 1E903 -1E926 1E904 -1E927 1E905 -1E928 1E906 -1E929 1E907 -1E92A 1E908 -1E92B 1E909 -1E92C 1E90A -1E92D 1E90B -1E92E 1E90C -1E92F 1E90D -1E930 1E90E -1E931 1E90F -1E932 1E910 -1E933 1E911 -1E934 1E912 -1E935 1E913 -1E936 1E914 -1E937 1E915 -1E938 1E916 -1E939 1E917 -1E93A 1E918 -1E93B 1E919 -1E93C 1E91A -1E93D 1E91B -1E93E 1E91C -1E93F 1E91D -1E940 1E91E -1E941 1E91F -1E942 1E920 -1E943 1E921 -END diff --git a/gnu/usr.bin/perl/lib/unicore/To/Upper.pl b/gnu/usr.bin/perl/lib/unicore/To/Upper.pl deleted file mode 100644 index 7638febceb3..00000000000 --- a/gnu/usr.bin/perl/lib/unicore/To/Upper.pl +++ /dev/null @@ -1,1520 +0,0 @@ -# !!!!!!! DO NOT EDIT THIS FILE !!!!!!! -# This file is machine-generated by lib/unicore/mktables from the Unicode -# database, Version 13.0.0. Any changes made here will be lost! - -# !!!!!!! IT IS DEPRECATED TO USE THIS FILE !!!!!!! - -# This file is for internal use by core Perl only. It is retained for -# backwards compatibility with applications that may have come to rely on it, -# but its format and even its name or existence are subject to change without -# notice in a future Perl version. Don't use it directly. Instead, its -# contents are now retrievable through a stable API in the Unicode::UCD -# module: Unicode::UCD::prop_invmap('Uppercase_Mapping') (Values for individual -# code points can be retrieved via Unicode::UCD::charprop()); - - - -# The name this table is to be known by, with the format of the mappings in -# the main body of the table, and what all code points missing from this file -# map to. -$Unicode::UCD::SwashInfo{'ToUpper'}{'format'} = 'x'; # non-negative hex whole number; a code point -$Unicode::UCD::SwashInfo{'ToUpper'}{'specials_name'} = 'Unicode::UCD::ToSpecUpper'; # Name of hash of special mappings -$Unicode::UCD::SwashInfo{'ToUpper'}{'missing'} = ''; # code point maps to itself - -# Some code points require special handling because their mappings are each to -# multiple code points. These do not appear in the main body, but are defined -# in the hash below. - -# Each key is the string of N bytes that together make up the UTF-8 encoding -# for the code point. (i.e. the same as looking at the code point's UTF-8 -# under "use bytes"). Each value is the UTF-8 of the translation, for speed. -%Unicode::UCD::ToSpecUpper = ( -"\xC3\x9F" => "\x{0053}\x{0053}", # U+00DF => 0053 0053 -"\xC5\x89" => "\x{02BC}\x{004E}", # U+0149 => 02BC 004E -"\xC7\xB0" => "\x{004A}\x{030C}", # U+01F0 => 004A 030C -"\xCE\x90" => "\x{0399}\x{0308}\x{0301}", # U+0390 => 0399 0308 0301 -"\xCE\xB0" => "\x{03A5}\x{0308}\x{0301}", # U+03B0 => 03A5 0308 0301 -"\xD6\x87" => "\x{0535}\x{0552}", # U+0587 => 0535 0552 -"\xE1\xBA\x96" => "\x{0048}\x{0331}", # U+1E96 => 0048 0331 -"\xE1\xBA\x97" => "\x{0054}\x{0308}", # U+1E97 => 0054 0308 -"\xE1\xBA\x98" => "\x{0057}\x{030A}", # U+1E98 => 0057 030A -"\xE1\xBA\x99" => "\x{0059}\x{030A}", # U+1E99 => 0059 030A -"\xE1\xBA\x9A" => "\x{0041}\x{02BE}", # U+1E9A => 0041 02BE -"\xE1\xBD\x90" => "\x{03A5}\x{0313}", # U+1F50 => 03A5 0313 -"\xE1\xBD\x92" => "\x{03A5}\x{0313}\x{0300}", # U+1F52 => 03A5 0313 0300 -"\xE1\xBD\x94" => "\x{03A5}\x{0313}\x{0301}", # U+1F54 => 03A5 0313 0301 -"\xE1\xBD\x96" => "\x{03A5}\x{0313}\x{0342}", # U+1F56 => 03A5 0313 0342 -"\xE1\xBE\x80" => "\x{1F08}\x{0399}", # U+1F80 => 1F08 0399 -"\xE1\xBE\x81" => "\x{1F09}\x{0399}", # U+1F81 => 1F09 0399 -"\xE1\xBE\x82" => "\x{1F0A}\x{0399}", # U+1F82 => 1F0A 0399 -"\xE1\xBE\x83" => "\x{1F0B}\x{0399}", # U+1F83 => 1F0B 0399 -"\xE1\xBE\x84" => "\x{1F0C}\x{0399}", # U+1F84 => 1F0C 0399 -"\xE1\xBE\x85" => "\x{1F0D}\x{0399}", # U+1F85 => 1F0D 0399 -"\xE1\xBE\x86" => "\x{1F0E}\x{0399}", # U+1F86 => 1F0E 0399 -"\xE1\xBE\x87" => "\x{1F0F}\x{0399}", # U+1F87 => 1F0F 0399 -"\xE1\xBE\x88" => "\x{1F08}\x{0399}", # U+1F88 => 1F08 0399 -"\xE1\xBE\x89" => "\x{1F09}\x{0399}", # U+1F89 => 1F09 0399 -"\xE1\xBE\x8A" => "\x{1F0A}\x{0399}", # U+1F8A => 1F0A 0399 -"\xE1\xBE\x8B" => "\x{1F0B}\x{0399}", # U+1F8B => 1F0B 0399 -"\xE1\xBE\x8C" => "\x{1F0C}\x{0399}", # U+1F8C => 1F0C 0399 -"\xE1\xBE\x8D" => "\x{1F0D}\x{0399}", # U+1F8D => 1F0D 0399 -"\xE1\xBE\x8E" => "\x{1F0E}\x{0399}", # U+1F8E => 1F0E 0399 -"\xE1\xBE\x8F" => "\x{1F0F}\x{0399}", # U+1F8F => 1F0F 0399 -"\xE1\xBE\x90" => "\x{1F28}\x{0399}", # U+1F90 => 1F28 0399 -"\xE1\xBE\x91" => "\x{1F29}\x{0399}", # U+1F91 => 1F29 0399 -"\xE1\xBE\x92" => "\x{1F2A}\x{0399}", # U+1F92 => 1F2A 0399 -"\xE1\xBE\x93" => "\x{1F2B}\x{0399}", # U+1F93 => 1F2B 0399 -"\xE1\xBE\x94" => "\x{1F2C}\x{0399}", # U+1F94 => 1F2C 0399 -"\xE1\xBE\x95" => "\x{1F2D}\x{0399}", # U+1F95 => 1F2D 0399 -"\xE1\xBE\x96" => "\x{1F2E}\x{0399}", # U+1F96 => 1F2E 0399 -"\xE1\xBE\x97" => "\x{1F2F}\x{0399}", # U+1F97 => 1F2F 0399 -"\xE1\xBE\x98" => "\x{1F28}\x{0399}", # U+1F98 => 1F28 0399 -"\xE1\xBE\x99" => "\x{1F29}\x{0399}", # U+1F99 => 1F29 0399 -"\xE1\xBE\x9A" => "\x{1F2A}\x{0399}", # U+1F9A => 1F2A 0399 -"\xE1\xBE\x9B" => "\x{1F2B}\x{0399}", # U+1F9B => 1F2B 0399 -"\xE1\xBE\x9C" => "\x{1F2C}\x{0399}", # U+1F9C => 1F2C 0399 -"\xE1\xBE\x9D" => "\x{1F2D}\x{0399}", # U+1F9D => 1F2D 0399 -"\xE1\xBE\x9E" => "\x{1F2E}\x{0399}", # U+1F9E => 1F2E 0399 -"\xE1\xBE\x9F" => "\x{1F2F}\x{0399}", # U+1F9F => 1F2F 0399 -"\xE1\xBE\xA0" => "\x{1F68}\x{0399}", # U+1FA0 => 1F68 0399 -"\xE1\xBE\xA1" => "\x{1F69}\x{0399}", # U+1FA1 => 1F69 0399 -"\xE1\xBE\xA2" => "\x{1F6A}\x{0399}", # U+1FA2 => 1F6A 0399 -"\xE1\xBE\xA3" => "\x{1F6B}\x{0399}", # U+1FA3 => 1F6B 0399 -"\xE1\xBE\xA4" => "\x{1F6C}\x{0399}", # U+1FA4 => 1F6C 0399 -"\xE1\xBE\xA5" => "\x{1F6D}\x{0399}", # U+1FA5 => 1F6D 0399 -"\xE1\xBE\xA6" => "\x{1F6E}\x{0399}", # U+1FA6 => 1F6E 0399 -"\xE1\xBE\xA7" => "\x{1F6F}\x{0399}", # U+1FA7 => 1F6F 0399 -"\xE1\xBE\xA8" => "\x{1F68}\x{0399}", # U+1FA8 => 1F68 0399 -"\xE1\xBE\xA9" => "\x{1F69}\x{0399}", # U+1FA9 => 1F69 0399 -"\xE1\xBE\xAA" => "\x{1F6A}\x{0399}", # U+1FAA => 1F6A 0399 -"\xE1\xBE\xAB" => "\x{1F6B}\x{0399}", # U+1FAB => 1F6B 0399 -"\xE1\xBE\xAC" => "\x{1F6C}\x{0399}", # U+1FAC => 1F6C 0399 -"\xE1\xBE\xAD" => "\x{1F6D}\x{0399}", # U+1FAD => 1F6D 0399 -"\xE1\xBE\xAE" => "\x{1F6E}\x{0399}", # U+1FAE => 1F6E 0399 -"\xE1\xBE\xAF" => "\x{1F6F}\x{0399}", # U+1FAF => 1F6F 0399 -"\xE1\xBE\xB2" => "\x{1FBA}\x{0399}", # U+1FB2 => 1FBA 0399 -"\xE1\xBE\xB3" => "\x{0391}\x{0399}", # U+1FB3 => 0391 0399 -"\xE1\xBE\xB4" => "\x{0386}\x{0399}", # U+1FB4 => 0386 0399 -"\xE1\xBE\xB6" => "\x{0391}\x{0342}", # U+1FB6 => 0391 0342 -"\xE1\xBE\xB7" => "\x{0391}\x{0342}\x{0399}", # U+1FB7 => 0391 0342 0399 -"\xE1\xBE\xBC" => "\x{0391}\x{0399}", # U+1FBC => 0391 0399 -"\xE1\xBF\x82" => "\x{1FCA}\x{0399}", # U+1FC2 => 1FCA 0399 -"\xE1\xBF\x83" => "\x{0397}\x{0399}", # U+1FC3 => 0397 0399 -"\xE1\xBF\x84" => "\x{0389}\x{0399}", # U+1FC4 => 0389 0399 -"\xE1\xBF\x86" => "\x{0397}\x{0342}", # U+1FC6 => 0397 0342 -"\xE1\xBF\x87" => "\x{0397}\x{0342}\x{0399}", # U+1FC7 => 0397 0342 0399 -"\xE1\xBF\x8C" => "\x{0397}\x{0399}", # U+1FCC => 0397 0399 -"\xE1\xBF\x92" => "\x{0399}\x{0308}\x{0300}", # U+1FD2 => 0399 0308 0300 -"\xE1\xBF\x93" => "\x{0399}\x{0308}\x{0301}", # U+1FD3 => 0399 0308 0301 -"\xE1\xBF\x96" => "\x{0399}\x{0342}", # U+1FD6 => 0399 0342 -"\xE1\xBF\x97" => "\x{0399}\x{0308}\x{0342}", # U+1FD7 => 0399 0308 0342 -"\xE1\xBF\xA2" => "\x{03A5}\x{0308}\x{0300}", # U+1FE2 => 03A5 0308 0300 -"\xE1\xBF\xA3" => "\x{03A5}\x{0308}\x{0301}", # U+1FE3 => 03A5 0308 0301 -"\xE1\xBF\xA4" => "\x{03A1}\x{0313}", # U+1FE4 => 03A1 0313 -"\xE1\xBF\xA6" => "\x{03A5}\x{0342}", # U+1FE6 => 03A5 0342 -"\xE1\xBF\xA7" => "\x{03A5}\x{0308}\x{0342}", # U+1FE7 => 03A5 0308 0342 -"\xE1\xBF\xB2" => "\x{1FFA}\x{0399}", # U+1FF2 => 1FFA 0399 -"\xE1\xBF\xB3" => "\x{03A9}\x{0399}", # U+1FF3 => 03A9 0399 -"\xE1\xBF\xB4" => "\x{038F}\x{0399}", # U+1FF4 => 038F 0399 -"\xE1\xBF\xB6" => "\x{03A9}\x{0342}", # U+1FF6 => 03A9 0342 -"\xE1\xBF\xB7" => "\x{03A9}\x{0342}\x{0399}", # U+1FF7 => 03A9 0342 0399 -"\xE1\xBF\xBC" => "\x{03A9}\x{0399}", # U+1FFC => 03A9 0399 -"\xEF\xAC\x80" => "\x{0046}\x{0046}", # U+FB00 => 0046 0046 -"\xEF\xAC\x81" => "\x{0046}\x{0049}", # U+FB01 => 0046 0049 -"\xEF\xAC\x82" => "\x{0046}\x{004C}", # U+FB02 => 0046 004C -"\xEF\xAC\x83" => "\x{0046}\x{0046}\x{0049}", # U+FB03 => 0046 0046 0049 -"\xEF\xAC\x84" => "\x{0046}\x{0046}\x{004C}", # U+FB04 => 0046 0046 004C -"\xEF\xAC\x85" => "\x{0053}\x{0054}", # U+FB05 => 0053 0054 -"\xEF\xAC\x86" => "\x{0053}\x{0054}", # U+FB06 => 0053 0054 -"\xEF\xAC\x93" => "\x{0544}\x{0546}", # U+FB13 => 0544 0546 -"\xEF\xAC\x94" => "\x{0544}\x{0535}", # U+FB14 => 0544 0535 -"\xEF\xAC\x95" => "\x{0544}\x{053B}", # U+FB15 => 0544 053B -"\xEF\xAC\x96" => "\x{054E}\x{0546}", # U+FB16 => 054E 0546 -"\xEF\xAC\x97" => "\x{0544}\x{053D}", # U+FB17 => 0544 053D -); - -return <<'END'; -0061 0041 -0062 0042 -0063 0043 -0064 0044 -0065 0045 -0066 0046 -0067 0047 -0068 0048 -0069 0049 -006A 004A -006B 004B -006C 004C -006D 004D -006E 004E -006F 004F -0070 0050 -0071 0051 -0072 0052 -0073 0053 -0074 0054 -0075 0055 -0076 0056 -0077 0057 -0078 0058 -0079 0059 -007A 005A -00B5 039C -00E0 00C0 -00E1 00C1 -00E2 00C2 -00E3 00C3 -00E4 00C4 -00E5 00C5 -00E6 00C6 -00E7 00C7 -00E8 00C8 -00E9 00C9 -00EA 00CA -00EB 00CB -00EC 00CC -00ED 00CD -00EE 00CE -00EF 00CF -00F0 00D0 -00F1 00D1 -00F2 00D2 -00F3 00D3 -00F4 00D4 -00F5 00D5 -00F6 00D6 -00F8 00D8 -00F9 00D9 -00FA 00DA -00FB 00DB -00FC 00DC -00FD 00DD -00FE 00DE -00FF 0178 -0101 0100 -0103 0102 -0105 0104 -0107 0106 -0109 0108 -010B 010A -010D 010C -010F 010E -0111 0110 -0113 0112 -0115 0114 -0117 0116 -0119 0118 -011B 011A -011D 011C -011F 011E -0121 0120 -0123 0122 -0125 0124 -0127 0126 -0129 0128 -012B 012A -012D 012C -012F 012E -0131 0049 -0133 0132 -0135 0134 -0137 0136 -013A 0139 -013C 013B -013E 013D -0140 013F -0142 0141 -0144 0143 -0146 0145 -0148 0147 -014B 014A -014D 014C -014F 014E -0151 0150 -0153 0152 -0155 0154 -0157 0156 -0159 0158 -015B 015A -015D 015C -015F 015E -0161 0160 -0163 0162 -0165 0164 -0167 0166 -0169 0168 -016B 016A -016D 016C -016F 016E -0171 0170 -0173 0172 -0175 0174 -0177 0176 -017A 0179 -017C 017B -017E 017D -017F 0053 -0180 0243 -0183 0182 -0185 0184 -0188 0187 -018C 018B -0192 0191 -0195 01F6 -0199 0198 -019A 023D -019E 0220 -01A1 01A0 -01A3 01A2 -01A5 01A4 -01A8 01A7 -01AD 01AC -01B0 01AF -01B4 01B3 -01B6 01B5 -01B9 01B8 -01BD 01BC -01BF 01F7 -01C5 01C4 -01C6 01C4 -01C8 01C7 -01C9 01C7 -01CB 01CA -01CC 01CA -01CE 01CD -01D0 01CF -01D2 01D1 -01D4 01D3 -01D6 01D5 -01D8 01D7 -01DA 01D9 -01DC 01DB -01DD 018E -01DF 01DE -01E1 01E0 -01E3 01E2 -01E5 01E4 -01E7 01E6 -01E9 01E8 -01EB 01EA -01ED 01EC -01EF 01EE -01F2 01F1 -01F3 01F1 -01F5 01F4 -01F9 01F8 -01FB 01FA -01FD 01FC -01FF 01FE -0201 0200 -0203 0202 -0205 0204 -0207 0206 -0209 0208 -020B 020A -020D 020C -020F 020E -0211 0210 -0213 0212 -0215 0214 -0217 0216 -0219 0218 -021B 021A -021D 021C -021F 021E -0223 0222 -0225 0224 -0227 0226 -0229 0228 -022B 022A -022D 022C -022F 022E -0231 0230 -0233 0232 -023C 023B -023F 2C7E -0240 2C7F -0242 0241 -0247 0246 -0249 0248 -024B 024A -024D 024C -024F 024E -0250 2C6F -0251 2C6D -0252 2C70 -0253 0181 -0254 0186 -0256 0189 -0257 018A -0259 018F -025B 0190 -025C A7AB -0260 0193 -0261 A7AC -0263 0194 -0265 A78D -0266 A7AA -0268 0197 -0269 0196 -026A A7AE -026B 2C62 -026C A7AD -026F 019C -0271 2C6E -0272 019D -0275 019F -027D 2C64 -0280 01A6 -0282 A7C5 -0283 01A9 -0287 A7B1 -0288 01AE -0289 0244 -028A 01B1 -028B 01B2 -028C 0245 -0292 01B7 -029D A7B2 -029E A7B0 -0345 0399 -0371 0370 -0373 0372 -0377 0376 -037B 03FD -037C 03FE -037D 03FF -03AC 0386 -03AD 0388 -03AE 0389 -03AF 038A -03B1 0391 -03B2 0392 -03B3 0393 -03B4 0394 -03B5 0395 -03B6 0396 -03B7 0397 -03B8 0398 -03B9 0399 -03BA 039A -03BB 039B -03BC 039C -03BD 039D -03BE 039E -03BF 039F -03C0 03A0 -03C1 03A1 -03C2 03A3 -03C3 03A3 -03C4 03A4 -03C5 03A5 -03C6 03A6 -03C7 03A7 -03C8 03A8 -03C9 03A9 -03CA 03AA -03CB 03AB -03CC 038C -03CD 038E -03CE 038F -03D0 0392 -03D1 0398 -03D5 03A6 -03D6 03A0 -03D7 03CF -03D9 03D8 -03DB 03DA -03DD 03DC -03DF 03DE -03E1 03E0 -03E3 03E2 -03E5 03E4 -03E7 03E6 -03E9 03E8 -03EB 03EA -03ED 03EC -03EF 03EE -03F0 039A -03F1 03A1 -03F2 03F9 -03F3 037F -03F5 0395 -03F8 03F7 -03FB 03FA -0430 0410 -0431 0411 -0432 0412 -0433 0413 -0434 0414 -0435 0415 -0436 0416 -0437 0417 -0438 0418 -0439 0419 -043A 041A -043B 041B -043C 041C -043D 041D -043E 041E -043F 041F -0440 0420 -0441 0421 -0442 0422 -0443 0423 -0444 0424 -0445 0425 -0446 0426 -0447 0427 -0448 0428 -0449 0429 -044A 042A -044B 042B -044C 042C -044D 042D -044E 042E -044F 042F -0450 0400 -0451 0401 -0452 0402 -0453 0403 -0454 0404 -0455 0405 -0456 0406 -0457 0407 -0458 0408 -0459 0409 -045A 040A -045B 040B -045C 040C -045D 040D -045E 040E -045F 040F -0461 0460 -0463 0462 -0465 0464 -0467 0466 -0469 0468 -046B 046A -046D 046C -046F 046E -0471 0470 -0473 0472 -0475 0474 -0477 0476 -0479 0478 -047B 047A -047D 047C -047F 047E -0481 0480 -048B 048A -048D 048C -048F 048E -0491 0490 -0493 0492 -0495 0494 -0497 0496 -0499 0498 -049B 049A -049D 049C -049F 049E -04A1 04A0 -04A3 04A2 -04A5 04A4 -04A7 04A6 -04A9 04A8 -04AB 04AA -04AD 04AC -04AF 04AE -04B1 04B0 -04B3 04B2 -04B5 04B4 -04B7 04B6 -04B9 04B8 -04BB 04BA -04BD 04BC -04BF 04BE -04C2 04C1 -04C4 04C3 -04C6 04C5 -04C8 04C7 -04CA 04C9 -04CC 04CB -04CE 04CD -04CF 04C0 -04D1 04D0 -04D3 04D2 -04D5 04D4 -04D7 04D6 -04D9 04D8 -04DB 04DA -04DD 04DC -04DF 04DE -04E1 04E0 -04E3 04E2 -04E5 04E4 -04E7 04E6 -04E9 04E8 -04EB 04EA -04ED 04EC -04EF 04EE -04F1 04F0 -04F3 04F2 -04F5 04F4 -04F7 04F6 -04F9 04F8 -04FB 04FA -04FD 04FC -04FF 04FE -0501 0500 -0503 0502 -0505 0504 -0507 0506 -0509 0508 -050B 050A -050D 050C -050F 050E -0511 0510 -0513 0512 -0515 0514 -0517 0516 -0519 0518 -051B 051A -051D 051C -051F 051E -0521 0520 -0523 0522 -0525 0524 -0527 0526 -0529 0528 -052B 052A -052D 052C -052F 052E -0561 0531 -0562 0532 -0563 0533 -0564 0534 -0565 0535 -0566 0536 -0567 0537 -0568 0538 -0569 0539 -056A 053A -056B 053B -056C 053C -056D 053D -056E 053E -056F 053F -0570 0540 -0571 0541 -0572 0542 -0573 0543 -0574 0544 -0575 0545 -0576 0546 -0577 0547 -0578 0548 -0579 0549 -057A 054A -057B 054B -057C 054C -057D 054D -057E 054E -057F 054F -0580 0550 -0581 0551 -0582 0552 -0583 0553 -0584 0554 -0585 0555 -0586 0556 -10D0 1C90 -10D1 1C91 -10D2 1C92 -10D3 1C93 -10D4 1C94 -10D5 1C95 -10D6 1C96 -10D7 1C97 -10D8 1C98 -10D9 1C99 -10DA 1C9A -10DB 1C9B -10DC 1C9C -10DD 1C9D -10DE 1C9E -10DF 1C9F -10E0 1CA0 -10E1 1CA1 -10E2 1CA2 -10E3 1CA3 -10E4 1CA4 -10E5 1CA5 -10E6 1CA6 -10E7 1CA7 -10E8 1CA8 -10E9 1CA9 -10EA 1CAA -10EB 1CAB -10EC 1CAC -10ED 1CAD -10EE 1CAE -10EF 1CAF -10F0 1CB0 -10F1 1CB1 -10F2 1CB2 -10F3 1CB3 -10F4 1CB4 -10F5 1CB5 -10F6 1CB6 -10F7 1CB7 -10F8 1CB8 -10F9 1CB9 -10FA 1CBA -10FD 1CBD -10FE 1CBE -10FF 1CBF -13F8 13F0 -13F9 13F1 -13FA 13F2 -13FB 13F3 -13FC 13F4 -13FD 13F5 -1C80 0412 -1C81 0414 -1C82 041E -1C83 0421 -1C84 0422 -1C85 0422 -1C86 042A -1C87 0462 -1C88 A64A -1D79 A77D -1D7D 2C63 -1D8E A7C6 -1E01 1E00 -1E03 1E02 -1E05 1E04 -1E07 1E06 -1E09 1E08 -1E0B 1E0A -1E0D 1E0C -1E0F 1E0E -1E11 1E10 -1E13 1E12 -1E15 1E14 -1E17 1E16 -1E19 1E18 -1E1B 1E1A -1E1D 1E1C -1E1F 1E1E -1E21 1E20 -1E23 1E22 -1E25 1E24 -1E27 1E26 -1E29 1E28 -1E2B 1E2A -1E2D 1E2C -1E2F 1E2E -1E31 1E30 -1E33 1E32 -1E35 1E34 -1E37 1E36 -1E39 1E38 -1E3B 1E3A -1E3D 1E3C -1E3F 1E3E -1E41 1E40 -1E43 1E42 -1E45 1E44 -1E47 1E46 -1E49 1E48 -1E4B 1E4A -1E4D 1E4C -1E4F 1E4E -1E51 1E50 -1E53 1E52 -1E55 1E54 -1E57 1E56 -1E59 1E58 -1E5B 1E5A -1E5D 1E5C -1E5F 1E5E -1E61 1E60 -1E63 1E62 -1E65 1E64 -1E67 1E66 -1E69 1E68 -1E6B 1E6A -1E6D 1E6C -1E6F 1E6E -1E71 1E70 -1E73 1E72 -1E75 1E74 -1E77 1E76 -1E79 1E78 -1E7B 1E7A -1E7D 1E7C -1E7F 1E7E -1E81 1E80 -1E83 1E82 -1E85 1E84 -1E87 1E86 -1E89 1E88 -1E8B 1E8A -1E8D 1E8C -1E8F 1E8E -1E91 1E90 -1E93 1E92 -1E95 1E94 -1E9B 1E60 -1EA1 1EA0 -1EA3 1EA2 -1EA5 1EA4 -1EA7 1EA6 -1EA9 1EA8 -1EAB 1EAA -1EAD 1EAC -1EAF 1EAE -1EB1 1EB0 -1EB3 1EB2 -1EB5 1EB4 -1EB7 1EB6 -1EB9 1EB8 -1EBB 1EBA -1EBD 1EBC -1EBF 1EBE -1EC1 1EC0 -1EC3 1EC2 -1EC5 1EC4 -1EC7 1EC6 -1EC9 1EC8 -1ECB 1ECA -1ECD 1ECC -1ECF 1ECE -1ED1 1ED0 -1ED3 1ED2 -1ED5 1ED4 -1ED7 1ED6 -1ED9 1ED8 -1EDB 1EDA -1EDD 1EDC -1EDF 1EDE -1EE1 1EE0 -1EE3 1EE2 -1EE5 1EE4 -1EE7 1EE6 -1EE9 1EE8 -1EEB 1EEA -1EED 1EEC -1EEF 1EEE -1EF1 1EF0 -1EF3 1EF2 -1EF5 1EF4 -1EF7 1EF6 -1EF9 1EF8 -1EFB 1EFA -1EFD 1EFC -1EFF 1EFE -1F00 1F08 -1F01 1F09 -1F02 1F0A -1F03 1F0B -1F04 1F0C -1F05 1F0D -1F06 1F0E -1F07 1F0F -1F10 1F18 -1F11 1F19 -1F12 1F1A -1F13 1F1B -1F14 1F1C -1F15 1F1D -1F20 1F28 -1F21 1F29 -1F22 1F2A -1F23 1F2B -1F24 1F2C -1F25 1F2D -1F26 1F2E -1F27 1F2F -1F30 1F38 -1F31 1F39 -1F32 1F3A -1F33 1F3B -1F34 1F3C -1F35 1F3D -1F36 1F3E -1F37 1F3F -1F40 1F48 -1F41 1F49 -1F42 1F4A -1F43 1F4B -1F44 1F4C -1F45 1F4D -1F51 1F59 -1F53 1F5B -1F55 1F5D -1F57 1F5F -1F60 1F68 -1F61 1F69 -1F62 1F6A -1F63 1F6B -1F64 1F6C -1F65 1F6D -1F66 1F6E -1F67 1F6F -1F70 1FBA -1F71 1FBB -1F72 1FC8 -1F73 1FC9 -1F74 1FCA -1F75 1FCB -1F76 1FDA -1F77 1FDB -1F78 1FF8 -1F79 1FF9 -1F7A 1FEA -1F7B 1FEB -1F7C 1FFA -1F7D 1FFB -1FB0 1FB8 -1FB1 1FB9 -1FBE 0399 -1FD0 1FD8 -1FD1 1FD9 -1FE0 1FE8 -1FE1 1FE9 -1FE5 1FEC -214E 2132 -2170 2160 -2171 2161 -2172 2162 -2173 2163 -2174 2164 -2175 2165 -2176 2166 -2177 2167 -2178 2168 -2179 2169 -217A 216A -217B 216B -217C 216C -217D 216D -217E 216E -217F 216F -2184 2183 -24D0 24B6 -24D1 24B7 -24D2 24B8 -24D3 24B9 -24D4 24BA -24D5 24BB -24D6 24BC -24D7 24BD -24D8 24BE -24D9 24BF -24DA 24C0 -24DB 24C1 -24DC 24C2 -24DD 24C3 -24DE 24C4 -24DF 24C5 -24E0 24C6 -24E1 24C7 -24E2 24C8 -24E3 24C9 -24E4 24CA -24E5 24CB -24E6 24CC -24E7 24CD -24E8 24CE -24E9 24CF -2C30 2C00 -2C31 2C01 -2C32 2C02 -2C33 2C03 -2C34 2C04 -2C35 2C05 -2C36 2C06 -2C37 2C07 -2C38 2C08 -2C39 2C09 -2C3A 2C0A -2C3B 2C0B -2C3C 2C0C -2C3D 2C0D -2C3E 2C0E -2C3F 2C0F -2C40 2C10 -2C41 2C11 -2C42 2C12 -2C43 2C13 -2C44 2C14 -2C45 2C15 -2C46 2C16 -2C47 2C17 -2C48 2C18 -2C49 2C19 -2C4A 2C1A -2C4B 2C1B -2C4C 2C1C -2C4D 2C1D -2C4E 2C1E -2C4F 2C1F -2C50 2C20 -2C51 2C21 -2C52 2C22 -2C53 2C23 -2C54 2C24 -2C55 2C25 -2C56 2C26 -2C57 2C27 -2C58 2C28 -2C59 2C29 -2C5A 2C2A -2C5B 2C2B -2C5C 2C2C -2C5D 2C2D -2C5E 2C2E -2C61 2C60 -2C65 023A -2C66 023E -2C68 2C67 -2C6A 2C69 -2C6C 2C6B -2C73 2C72 -2C76 2C75 -2C81 2C80 -2C83 2C82 -2C85 2C84 -2C87 2C86 -2C89 2C88 -2C8B 2C8A -2C8D 2C8C -2C8F 2C8E -2C91 2C90 -2C93 2C92 -2C95 2C94 -2C97 2C96 -2C99 2C98 -2C9B 2C9A -2C9D 2C9C -2C9F 2C9E -2CA1 2CA0 -2CA3 2CA2 -2CA5 2CA4 -2CA7 2CA6 -2CA9 2CA8 -2CAB 2CAA -2CAD 2CAC -2CAF 2CAE -2CB1 2CB0 -2CB3 2CB2 -2CB5 2CB4 -2CB7 2CB6 -2CB9 2CB8 -2CBB 2CBA -2CBD 2CBC -2CBF 2CBE -2CC1 2CC0 -2CC3 2CC2 -2CC5 2CC4 -2CC7 2CC6 -2CC9 2CC8 -2CCB 2CCA -2CCD 2CCC -2CCF 2CCE -2CD1 2CD0 -2CD3 2CD2 -2CD5 2CD4 -2CD7 2CD6 -2CD9 2CD8 -2CDB 2CDA -2CDD 2CDC -2CDF 2CDE -2CE1 2CE0 -2CE3 2CE2 -2CEC 2CEB -2CEE 2CED -2CF3 2CF2 -2D00 10A0 -2D01 10A1 -2D02 10A2 -2D03 10A3 -2D04 10A4 -2D05 10A5 -2D06 10A6 -2D07 10A7 -2D08 10A8 -2D09 10A9 -2D0A 10AA -2D0B 10AB -2D0C 10AC -2D0D 10AD -2D0E 10AE -2D0F 10AF -2D10 10B0 -2D11 10B1 -2D12 10B2 -2D13 10B3 -2D14 10B4 -2D15 10B5 -2D16 10B6 -2D17 10B7 -2D18 10B8 -2D19 10B9 -2D1A 10BA -2D1B 10BB -2D1C 10BC -2D1D 10BD -2D1E 10BE -2D1F 10BF -2D20 10C0 -2D21 10C1 -2D22 10C2 -2D23 10C3 -2D24 10C4 -2D25 10C5 -2D27 10C7 -2D2D 10CD -A641 A640 -A643 A642 -A645 A644 -A647 A646 -A649 A648 -A64B A64A -A64D A64C -A64F A64E -A651 A650 -A653 A652 -A655 A654 -A657 A656 -A659 A658 -A65B A65A -A65D A65C -A65F A65E -A661 A660 -A663 A662 -A665 A664 -A667 A666 -A669 A668 -A66B A66A -A66D A66C -A681 A680 -A683 A682 -A685 A684 -A687 A686 -A689 A688 -A68B A68A -A68D A68C -A68F A68E -A691 A690 -A693 A692 -A695 A694 -A697 A696 -A699 A698 -A69B A69A -A723 A722 -A725 A724 -A727 A726 -A729 A728 -A72B A72A -A72D A72C -A72F A72E -A733 A732 -A735 A734 -A737 A736 -A739 A738 -A73B A73A -A73D A73C -A73F A73E -A741 A740 -A743 A742 -A745 A744 -A747 A746 -A749 A748 -A74B A74A -A74D A74C -A74F A74E -A751 A750 -A753 A752 -A755 A754 -A757 A756 -A759 A758 -A75B A75A -A75D A75C -A75F A75E -A761 A760 -A763 A762 -A765 A764 -A767 A766 -A769 A768 -A76B A76A -A76D A76C -A76F A76E -A77A A779 -A77C A77B -A77F A77E -A781 A780 -A783 A782 -A785 A784 -A787 A786 -A78C A78B -A791 A790 -A793 A792 -A794 A7C4 -A797 A796 -A799 A798 -A79B A79A -A79D A79C -A79F A79E -A7A1 A7A0 -A7A3 A7A2 -A7A5 A7A4 -A7A7 A7A6 -A7A9 A7A8 -A7B5 A7B4 -A7B7 A7B6 -A7B9 A7B8 -A7BB A7BA -A7BD A7BC -A7BF A7BE -A7C3 A7C2 -A7C8 A7C7 -A7CA A7C9 -A7F6 A7F5 -AB53 A7B3 -AB70 13A0 -AB71 13A1 -AB72 13A2 -AB73 13A3 -AB74 13A4 -AB75 13A5 -AB76 13A6 -AB77 13A7 -AB78 13A8 -AB79 13A9 -AB7A 13AA -AB7B 13AB -AB7C 13AC -AB7D 13AD -AB7E 13AE -AB7F 13AF -AB80 13B0 -AB81 13B1 -AB82 13B2 -AB83 13B3 -AB84 13B4 -AB85 13B5 -AB86 13B6 -AB87 13B7 -AB88 13B8 -AB89 13B9 -AB8A 13BA -AB8B 13BB -AB8C 13BC -AB8D 13BD -AB8E 13BE -AB8F 13BF -AB90 13C0 -AB91 13C1 -AB92 13C2 -AB93 13C3 -AB94 13C4 -AB95 13C5 -AB96 13C6 -AB97 13C7 -AB98 13C8 -AB99 13C9 -AB9A 13CA -AB9B 13CB -AB9C 13CC -AB9D 13CD -AB9E 13CE -AB9F 13CF -ABA0 13D0 -ABA1 13D1 -ABA2 13D2 -ABA3 13D3 -ABA4 13D4 -ABA5 13D5 -ABA6 13D6 -ABA7 13D7 -ABA8 13D8 -ABA9 13D9 -ABAA 13DA -ABAB 13DB -ABAC 13DC -ABAD 13DD -ABAE 13DE -ABAF 13DF -ABB0 13E0 -ABB1 13E1 -ABB2 13E2 -ABB3 13E3 -ABB4 13E4 -ABB5 13E5 -ABB6 13E6 -ABB7 13E7 -ABB8 13E8 -ABB9 13E9 -ABBA 13EA -ABBB 13EB -ABBC 13EC -ABBD 13ED -ABBE 13EE -ABBF 13EF -FF41 FF21 -FF42 FF22 -FF43 FF23 -FF44 FF24 -FF45 FF25 -FF46 FF26 -FF47 FF27 -FF48 FF28 -FF49 FF29 -FF4A FF2A -FF4B FF2B -FF4C FF2C -FF4D FF2D -FF4E FF2E -FF4F FF2F -FF50 FF30 -FF51 FF31 -FF52 FF32 -FF53 FF33 -FF54 FF34 -FF55 FF35 -FF56 FF36 -FF57 FF37 -FF58 FF38 -FF59 FF39 -FF5A FF3A -10428 10400 -10429 10401 -1042A 10402 -1042B 10403 -1042C 10404 -1042D 10405 -1042E 10406 -1042F 10407 -10430 10408 -10431 10409 -10432 1040A -10433 1040B -10434 1040C -10435 1040D -10436 1040E -10437 1040F -10438 10410 -10439 10411 -1043A 10412 -1043B 10413 -1043C 10414 -1043D 10415 -1043E 10416 -1043F 10417 -10440 10418 -10441 10419 -10442 1041A -10443 1041B -10444 1041C -10445 1041D -10446 1041E -10447 1041F -10448 10420 -10449 10421 -1044A 10422 -1044B 10423 -1044C 10424 -1044D 10425 -1044E 10426 -1044F 10427 -104D8 104B0 -104D9 104B1 -104DA 104B2 -104DB 104B3 -104DC 104B4 -104DD 104B5 -104DE 104B6 -104DF 104B7 -104E0 104B8 -104E1 104B9 -104E2 104BA -104E3 104BB -104E4 104BC -104E5 104BD -104E6 104BE -104E7 104BF -104E8 104C0 -104E9 104C1 -104EA 104C2 -104EB 104C3 -104EC 104C4 -104ED 104C5 -104EE 104C6 -104EF 104C7 -104F0 104C8 -104F1 104C9 -104F2 104CA -104F3 104CB -104F4 104CC -104F5 104CD -104F6 104CE -104F7 104CF -104F8 104D0 -104F9 104D1 -104FA 104D2 -104FB 104D3 -10CC0 10C80 -10CC1 10C81 -10CC2 10C82 -10CC3 10C83 -10CC4 10C84 -10CC5 10C85 -10CC6 10C86 -10CC7 10C87 -10CC8 10C88 -10CC9 10C89 -10CCA 10C8A -10CCB 10C8B -10CCC 10C8C -10CCD 10C8D -10CCE 10C8E -10CCF 10C8F -10CD0 10C90 -10CD1 10C91 -10CD2 10C92 -10CD3 10C93 -10CD4 10C94 -10CD5 10C95 -10CD6 10C96 -10CD7 10C97 -10CD8 10C98 -10CD9 10C99 -10CDA 10C9A -10CDB 10C9B -10CDC 10C9C -10CDD 10C9D -10CDE 10C9E -10CDF 10C9F -10CE0 10CA0 -10CE1 10CA1 -10CE2 10CA2 -10CE3 10CA3 -10CE4 10CA4 -10CE5 10CA5 -10CE6 10CA6 -10CE7 10CA7 -10CE8 10CA8 -10CE9 10CA9 -10CEA 10CAA -10CEB 10CAB -10CEC 10CAC -10CED 10CAD -10CEE 10CAE -10CEF 10CAF -10CF0 10CB0 -10CF1 10CB1 -10CF2 10CB2 -118C0 118A0 -118C1 118A1 -118C2 118A2 -118C3 118A3 -118C4 118A4 -118C5 118A5 -118C6 118A6 -118C7 118A7 -118C8 118A8 -118C9 118A9 -118CA 118AA -118CB 118AB -118CC 118AC -118CD 118AD -118CE 118AE -118CF 118AF -118D0 118B0 -118D1 118B1 -118D2 118B2 -118D3 118B3 -118D4 118B4 -118D5 118B5 -118D6 118B6 -118D7 118B7 -118D8 118B8 -118D9 118B9 -118DA 118BA -118DB 118BB -118DC 118BC -118DD 118BD -118DE 118BE -118DF 118BF -16E60 16E40 -16E61 16E41 -16E62 16E42 -16E63 16E43 -16E64 16E44 -16E65 16E45 -16E66 16E46 -16E67 16E47 -16E68 16E48 -16E69 16E49 -16E6A 16E4A -16E6B 16E4B -16E6C 16E4C -16E6D 16E4D -16E6E 16E4E -16E6F 16E4F -16E70 16E50 -16E71 16E51 -16E72 16E52 -16E73 16E53 -16E74 16E54 -16E75 16E55 -16E76 16E56 -16E77 16E57 -16E78 16E58 -16E79 16E59 -16E7A 16E5A -16E7B 16E5B -16E7C 16E5C -16E7D 16E5D -16E7E 16E5E -16E7F 16E5F -1E922 1E900 -1E923 1E901 -1E924 1E902 -1E925 1E903 -1E926 1E904 -1E927 1E905 -1E928 1E906 -1E929 1E907 -1E92A 1E908 -1E92B 1E909 -1E92C 1E90A -1E92D 1E90B -1E92E 1E90C -1E92F 1E90D -1E930 1E90E -1E931 1E90F -1E932 1E910 -1E933 1E911 -1E934 1E912 -1E935 1E913 -1E936 1E914 -1E937 1E915 -1E938 1E916 -1E939 1E917 -1E93A 1E918 -1E93B 1E919 -1E93C 1E91A -1E93D 1E91B -1E93E 1E91C -1E93F 1E91D -1E940 1E91E -1E941 1E91F -1E942 1E920 -1E943 1E921 -END diff --git a/gnu/usr.bin/perl/lib/unicore/UnicodeData.txt b/gnu/usr.bin/perl/lib/unicore/UnicodeData.txt index e22f967bbab..b5abef7ed43 100644 --- a/gnu/usr.bin/perl/lib/unicore/UnicodeData.txt +++ b/gnu/usr.bin/perl/lib/unicore/UnicodeData.txt @@ -1525,6 +1525,7 @@ 061A;ARABIC SMALL KASRA;Mn;32;NSM;;;;;N;;;;; 061B;ARABIC SEMICOLON;Po;0;AL;;;;;N;;;;; 061C;ARABIC LETTER MARK;Cf;0;AL;;;;;N;;;;; +061D;ARABIC END OF TEXT MARK;Po;0;AL;;;;;N;;;;; 061E;ARABIC TRIPLE DOT PUNCTUATION MARK;Po;0;AL;;;;;N;;;;; 061F;ARABIC QUESTION MARK;Po;0;AL;;;;;N;;;;; 0620;ARABIC LETTER KASHMIRI YEH;Lo;0;AL;;;;;N;;;;; @@ -2089,6 +2090,47 @@ 0868;SYRIAC LETTER MALAYALAM LLA;Lo;0;AL;;;;;N;;;;; 0869;SYRIAC LETTER MALAYALAM LLLA;Lo;0;AL;;;;;N;;;;; 086A;SYRIAC LETTER MALAYALAM SSA;Lo;0;AL;;;;;N;;;;; +0870;ARABIC LETTER ALEF WITH ATTACHED FATHA;Lo;0;AL;;;;;N;;;;; +0871;ARABIC LETTER ALEF WITH ATTACHED TOP RIGHT FATHA;Lo;0;AL;;;;;N;;;;; +0872;ARABIC LETTER ALEF WITH RIGHT MIDDLE STROKE;Lo;0;AL;;;;;N;;;;; +0873;ARABIC LETTER ALEF WITH LEFT MIDDLE STROKE;Lo;0;AL;;;;;N;;;;; +0874;ARABIC LETTER ALEF WITH ATTACHED KASRA;Lo;0;AL;;;;;N;;;;; +0875;ARABIC LETTER ALEF WITH ATTACHED BOTTOM RIGHT KASRA;Lo;0;AL;;;;;N;;;;; +0876;ARABIC LETTER ALEF WITH ATTACHED ROUND DOT ABOVE;Lo;0;AL;;;;;N;;;;; +0877;ARABIC LETTER ALEF WITH ATTACHED RIGHT ROUND DOT;Lo;0;AL;;;;;N;;;;; +0878;ARABIC LETTER ALEF WITH ATTACHED LEFT ROUND DOT;Lo;0;AL;;;;;N;;;;; +0879;ARABIC LETTER ALEF WITH ATTACHED ROUND DOT BELOW;Lo;0;AL;;;;;N;;;;; +087A;ARABIC LETTER ALEF WITH DOT ABOVE;Lo;0;AL;;;;;N;;;;; +087B;ARABIC LETTER ALEF WITH ATTACHED TOP RIGHT FATHA AND DOT ABOVE;Lo;0;AL;;;;;N;;;;; +087C;ARABIC LETTER ALEF WITH RIGHT MIDDLE STROKE AND DOT ABOVE;Lo;0;AL;;;;;N;;;;; +087D;ARABIC LETTER ALEF WITH ATTACHED BOTTOM RIGHT KASRA AND DOT ABOVE;Lo;0;AL;;;;;N;;;;; +087E;ARABIC LETTER ALEF WITH ATTACHED TOP RIGHT FATHA AND LEFT RING;Lo;0;AL;;;;;N;;;;; +087F;ARABIC LETTER ALEF WITH RIGHT MIDDLE STROKE AND LEFT RING;Lo;0;AL;;;;;N;;;;; +0880;ARABIC LETTER ALEF WITH ATTACHED BOTTOM RIGHT KASRA AND LEFT RING;Lo;0;AL;;;;;N;;;;; +0881;ARABIC LETTER ALEF WITH ATTACHED RIGHT HAMZA;Lo;0;AL;;;;;N;;;;; +0882;ARABIC LETTER ALEF WITH ATTACHED LEFT HAMZA;Lo;0;AL;;;;;N;;;;; +0883;ARABIC TATWEEL WITH OVERSTRUCK HAMZA;Lo;0;AL;;;;;N;;;;; +0884;ARABIC TATWEEL WITH OVERSTRUCK WAW;Lo;0;AL;;;;;N;;;;; +0885;ARABIC TATWEEL WITH TWO DOTS BELOW;Lo;0;AL;;;;;N;;;;; +0886;ARABIC LETTER THIN YEH;Lo;0;AL;;;;;N;;;;; +0887;ARABIC BASELINE ROUND DOT;Lo;0;AL;;;;;N;;;;; +0888;ARABIC RAISED ROUND DOT;Sk;0;AL;;;;;N;;;;; +0889;ARABIC LETTER NOON WITH INVERTED SMALL V;Lo;0;AL;;;;;N;;;;; +088A;ARABIC LETTER HAH WITH INVERTED SMALL V BELOW;Lo;0;AL;;;;;N;;;;; +088B;ARABIC LETTER TAH WITH DOT BELOW;Lo;0;AL;;;;;N;;;;; +088C;ARABIC LETTER TAH WITH THREE DOTS BELOW;Lo;0;AL;;;;;N;;;;; +088D;ARABIC LETTER KEHEH WITH TWO DOTS VERTICALLY BELOW;Lo;0;AL;;;;;N;;;;; +088E;ARABIC VERTICAL TAIL;Lo;0;AL;;;;;N;;;;; +0890;ARABIC POUND MARK ABOVE;Cf;0;AN;;;;;N;;;;; +0891;ARABIC PIASTRE MARK ABOVE;Cf;0;AN;;;;;N;;;;; +0898;ARABIC SMALL HIGH WORD AL-JUZ;Mn;230;NSM;;;;;N;;;;; +0899;ARABIC SMALL LOW WORD ISHMAAM;Mn;220;NSM;;;;;N;;;;; +089A;ARABIC SMALL LOW WORD IMAALA;Mn;220;NSM;;;;;N;;;;; +089B;ARABIC SMALL LOW WORD TASHEEL;Mn;220;NSM;;;;;N;;;;; +089C;ARABIC MADDA WAAJIB;Mn;230;NSM;;;;;N;;;;; +089D;ARABIC SUPERSCRIPT ALEF MOKHASSAS;Mn;230;NSM;;;;;N;;;;; +089E;ARABIC DOUBLED MADDA;Mn;230;NSM;;;;;N;;;;; +089F;ARABIC HALF MADDA OVER MADDA;Mn;230;NSM;;;;;N;;;;; 08A0;ARABIC LETTER BEH WITH SMALL V BELOW;Lo;0;AL;;;;;N;;;;; 08A1;ARABIC LETTER BEH WITH HAMZA ABOVE;Lo;0;AL;;;;;N;;;;; 08A2;ARABIC LETTER JEEM WITH TWO DOTS ABOVE;Lo;0;AL;;;;;N;;;;; @@ -2110,6 +2152,7 @@ 08B2;ARABIC LETTER ZAIN WITH INVERTED V ABOVE;Lo;0;AL;;;;;N;;;;; 08B3;ARABIC LETTER AIN WITH THREE DOTS BELOW;Lo;0;AL;;;;;N;;;;; 08B4;ARABIC LETTER KAF WITH DOT BELOW;Lo;0;AL;;;;;N;;;;; +08B5;ARABIC LETTER QAF WITH DOT BELOW AND NO DOTS ABOVE;Lo;0;AL;;;;;N;;;;; 08B6;ARABIC LETTER BEH WITH SMALL MEEM ABOVE;Lo;0;AL;;;;;N;;;;; 08B7;ARABIC LETTER PEH WITH SMALL MEEM ABOVE;Lo;0;AL;;;;;N;;;;; 08B8;ARABIC LETTER TEH WITH SMALL TEH ABOVE;Lo;0;AL;;;;;N;;;;; @@ -2128,6 +2171,17 @@ 08C5;ARABIC LETTER JEEM WITH THREE DOTS ABOVE;Lo;0;AL;;;;;N;;;;; 08C6;ARABIC LETTER JEEM WITH THREE DOTS BELOW;Lo;0;AL;;;;;N;;;;; 08C7;ARABIC LETTER LAM WITH SMALL ARABIC LETTER TAH ABOVE;Lo;0;AL;;;;;N;;;;; +08C8;ARABIC LETTER GRAF;Lo;0;AL;;;;;N;;;;; +08C9;ARABIC SMALL FARSI YEH;Lm;0;AL;;;;;N;;;;; +08CA;ARABIC SMALL HIGH FARSI YEH;Mn;230;NSM;;;;;N;;;;; +08CB;ARABIC SMALL HIGH YEH BARREE WITH TWO DOTS BELOW;Mn;230;NSM;;;;;N;;;;; +08CC;ARABIC SMALL HIGH WORD SAH;Mn;230;NSM;;;;;N;;;;; +08CD;ARABIC SMALL HIGH ZAH;Mn;230;NSM;;;;;N;;;;; +08CE;ARABIC LARGE ROUND DOT ABOVE;Mn;230;NSM;;;;;N;;;;; +08CF;ARABIC LARGE ROUND DOT BELOW;Mn;220;NSM;;;;;N;;;;; +08D0;ARABIC SUKUN BELOW;Mn;220;NSM;;;;;N;;;;; +08D1;ARABIC LARGE CIRCLE BELOW;Mn;220;NSM;;;;;N;;;;; +08D2;ARABIC LARGE ROUND DOT INSIDE CIRCLE BELOW;Mn;220;NSM;;;;;N;;;;; 08D3;ARABIC SMALL LOW WAW;Mn;220;NSM;;;;;N;;;;; 08D4;ARABIC SMALL HIGH WORD AR-RUB;Mn;230;NSM;;;;;N;;;;; 08D5;ARABIC SMALL HIGH SAD;Mn;230;NSM;;;;;N;;;;; @@ -2786,6 +2840,7 @@ 0C37;TELUGU LETTER SSA;Lo;0;L;;;;;N;;;;; 0C38;TELUGU LETTER SA;Lo;0;L;;;;;N;;;;; 0C39;TELUGU LETTER HA;Lo;0;L;;;;;N;;;;; +0C3C;TELUGU SIGN NUKTA;Mn;7;NSM;;;;;N;;;;; 0C3D;TELUGU SIGN AVAGRAHA;Lo;0;L;;;;;N;;;;; 0C3E;TELUGU VOWEL SIGN AA;Mn;0;NSM;;;;;N;;;;; 0C3F;TELUGU VOWEL SIGN I;Mn;0;NSM;;;;;N;;;;; @@ -2806,6 +2861,7 @@ 0C58;TELUGU LETTER TSA;Lo;0;L;;;;;N;;;;; 0C59;TELUGU LETTER DZA;Lo;0;L;;;;;N;;;;; 0C5A;TELUGU LETTER RRRA;Lo;0;L;;;;;N;;;;; +0C5D;TELUGU LETTER NAKAARA POLLU;Lo;0;L;;;;;N;;;;; 0C60;TELUGU LETTER VOCALIC RR;Lo;0;L;;;;;N;;;;; 0C61;TELUGU LETTER VOCALIC LL;Lo;0;L;;;;;N;;;;; 0C62;TELUGU VOWEL SIGN VOCALIC L;Mn;0;NSM;;;;;N;;;;; @@ -2901,6 +2957,7 @@ 0CCD;KANNADA SIGN VIRAMA;Mn;9;NSM;;;;;N;;;;; 0CD5;KANNADA LENGTH MARK;Mc;0;L;;;;;N;;;;; 0CD6;KANNADA AI LENGTH MARK;Mc;0;L;;;;;N;;;;; +0CDD;KANNADA LETTER NAKAARA POLLU;Lo;0;L;;;;;N;;;;; 0CDE;KANNADA LETTER FA;Lo;0;L;;;;;N;;;;; 0CE0;KANNADA LETTER VOCALIC RR;Lo;0;L;;;;;N;;;;; 0CE1;KANNADA LETTER VOCALIC LL;Lo;0;L;;;;;N;;;;; @@ -5258,6 +5315,7 @@ 170A;TAGALOG LETTER BA;Lo;0;L;;;;;N;;;;; 170B;TAGALOG LETTER MA;Lo;0;L;;;;;N;;;;; 170C;TAGALOG LETTER YA;Lo;0;L;;;;;N;;;;; +170D;TAGALOG LETTER RA;Lo;0;L;;;;;N;;;;; 170E;TAGALOG LETTER LA;Lo;0;L;;;;;N;;;;; 170F;TAGALOG LETTER WA;Lo;0;L;;;;;N;;;;; 1710;TAGALOG LETTER SA;Lo;0;L;;;;;N;;;;; @@ -5265,6 +5323,8 @@ 1712;TAGALOG VOWEL SIGN I;Mn;0;NSM;;;;;N;;;;; 1713;TAGALOG VOWEL SIGN U;Mn;0;NSM;;;;;N;;;;; 1714;TAGALOG SIGN VIRAMA;Mn;9;NSM;;;;;N;;;;; +1715;TAGALOG SIGN PAMUDPOD;Mc;9;L;;;;;N;;;;; +171F;TAGALOG LETTER ARCHAIC RA;Lo;0;L;;;;;N;;;;; 1720;HANUNOO LETTER A;Lo;0;L;;;;;N;;;;; 1721;HANUNOO LETTER I;Lo;0;L;;;;;N;;;;; 1722;HANUNOO LETTER U;Lo;0;L;;;;;N;;;;; @@ -5285,7 +5345,7 @@ 1731;HANUNOO LETTER HA;Lo;0;L;;;;;N;;;;; 1732;HANUNOO VOWEL SIGN I;Mn;0;NSM;;;;;N;;;;; 1733;HANUNOO VOWEL SIGN U;Mn;0;NSM;;;;;N;;;;; -1734;HANUNOO SIGN PAMUDPOD;Mn;9;NSM;;;;;N;;;;; +1734;HANUNOO SIGN PAMUDPOD;Mc;9;L;;;;;N;;;;; 1735;PHILIPPINE SINGLE PUNCTUATION;Po;0;L;;;;;N;;;;; 1736;PHILIPPINE DOUBLE PUNCTUATION;Po;0;L;;;;;N;;;;; 1740;BUHID LETTER A;Lo;0;L;;;;;N;;;;; @@ -5455,6 +5515,7 @@ 180C;MONGOLIAN FREE VARIATION SELECTOR TWO;Mn;0;NSM;;;;;N;;;;; 180D;MONGOLIAN FREE VARIATION SELECTOR THREE;Mn;0;NSM;;;;;N;;;;; 180E;MONGOLIAN VOWEL SEPARATOR;Cf;0;BN;;;;;N;;;;; +180F;MONGOLIAN FREE VARIATION SELECTOR FOUR;Mn;0;NSM;;;;;N;;;;; 1810;MONGOLIAN DIGIT ZERO;Nd;0;L;;0;0;0;N;;;;; 1811;MONGOLIAN DIGIT ONE;Nd;0;L;;1;1;1;N;;;;; 1812;MONGOLIAN DIGIT TWO;Nd;0;L;;2;2;2;N;;;;; @@ -6059,6 +6120,20 @@ 1ABE;COMBINING PARENTHESES OVERLAY;Me;0;NSM;;;;;N;;;;; 1ABF;COMBINING LATIN SMALL LETTER W BELOW;Mn;220;NSM;;;;;N;;;;; 1AC0;COMBINING LATIN SMALL LETTER TURNED W BELOW;Mn;220;NSM;;;;;N;;;;; +1AC1;COMBINING LEFT PARENTHESIS ABOVE LEFT;Mn;230;NSM;;;;;N;;;;; +1AC2;COMBINING RIGHT PARENTHESIS ABOVE RIGHT;Mn;230;NSM;;;;;N;;;;; +1AC3;COMBINING LEFT PARENTHESIS BELOW LEFT;Mn;220;NSM;;;;;N;;;;; +1AC4;COMBINING RIGHT PARENTHESIS BELOW RIGHT;Mn;220;NSM;;;;;N;;;;; +1AC5;COMBINING SQUARE BRACKETS ABOVE;Mn;230;NSM;;;;;N;;;;; +1AC6;COMBINING NUMBER SIGN ABOVE;Mn;230;NSM;;;;;N;;;;; +1AC7;COMBINING INVERTED DOUBLE ARCH ABOVE;Mn;230;NSM;;;;;N;;;;; +1AC8;COMBINING PLUS SIGN ABOVE;Mn;230;NSM;;;;;N;;;;; +1AC9;COMBINING DOUBLE PLUS SIGN ABOVE;Mn;230;NSM;;;;;N;;;;; +1ACA;COMBINING DOUBLE PLUS SIGN BELOW;Mn;220;NSM;;;;;N;;;;; +1ACB;COMBINING TRIPLE ACUTE ACCENT;Mn;230;NSM;;;;;N;;;;; +1ACC;COMBINING LATIN SMALL LETTER INSULAR G;Mn;230;NSM;;;;;N;;;;; +1ACD;COMBINING LATIN SMALL LETTER INSULAR R;Mn;230;NSM;;;;;N;;;;; +1ACE;COMBINING LATIN SMALL LETTER INSULAR T;Mn;230;NSM;;;;;N;;;;; 1B00;BALINESE SIGN ULU RICEM;Mn;0;NSM;;;;;N;;;;; 1B01;BALINESE SIGN ULU CANDRA;Mn;0;NSM;;;;;N;;;;; 1B02;BALINESE SIGN CECEK;Mn;0;NSM;;;;;N;;;;; @@ -6135,6 +6210,7 @@ 1B49;BALINESE LETTER VE SASAK;Lo;0;L;;;;;N;;;;; 1B4A;BALINESE LETTER ZAL SASAK;Lo;0;L;;;;;N;;;;; 1B4B;BALINESE LETTER ASYURA SASAK;Lo;0;L;;;;;N;;;;; +1B4C;BALINESE LETTER ARCHAIC JNYA;Lo;0;L;;;;;N;;;;; 1B50;BALINESE DIGIT ZERO;Nd;0;L;;0;0;0;N;;;;; 1B51;BALINESE DIGIT ONE;Nd;0;L;;1;1;1;N;;;;; 1B52;BALINESE DIGIT TWO;Nd;0;L;;2;2;2;N;;;;; @@ -6180,6 +6256,8 @@ 1B7A;BALINESE MUSICAL SYMBOL LEFT-HAND CLOSED PLAK;So;0;L;;;;;N;;;;; 1B7B;BALINESE MUSICAL SYMBOL LEFT-HAND CLOSED PLUK;So;0;L;;;;;N;;;;; 1B7C;BALINESE MUSICAL SYMBOL LEFT-HAND OPEN PING;So;0;L;;;;;N;;;;; +1B7D;BALINESE PANTI LANTANG;Po;0;L;;;;;N;;;;; +1B7E;BALINESE PAMADA LANTANG;Po;0;L;;;;;N;;;;; 1B80;SUNDANESE SIGN PANYECEK;Mn;0;NSM;;;;;N;;;;; 1B81;SUNDANESE SIGN PANGLAYAR;Mn;0;NSM;;;;;N;;;;; 1B82;SUNDANESE SIGN PANGWISAD;Mc;0;L;;;;;N;;;;; @@ -6778,6 +6856,7 @@ 1DF7;COMBINING KAVYKA ABOVE LEFT;Mn;228;NSM;;;;;N;;;;; 1DF8;COMBINING DOT ABOVE LEFT;Mn;228;NSM;;;;;N;;;;; 1DF9;COMBINING WIDE INVERTED BRIDGE BELOW;Mn;220;NSM;;;;;N;;;;; +1DFA;COMBINING DOT BELOW LEFT;Mn;218;NSM;;;;;N;;;;; 1DFB;COMBINING DELETION MARK;Mn;230;NSM;;;;;N;;;;; 1DFC;COMBINING DOUBLE INVERTED BREVE BELOW;Mn;233;NSM;;;;;N;;;;; 1DFD;COMBINING ALMOST EQUAL TO BELOW;Mn;220;NSM;;;;;N;;;;; @@ -7457,6 +7536,7 @@ 20BD;RUBLE SIGN;Sc;0;ET;;;;;N;;;;; 20BE;LARI SIGN;Sc;0;ET;;;;;N;;;;; 20BF;BITCOIN SIGN;Sc;0;ET;;;;;N;;;;; +20C0;SOM SIGN;Sc;0;ET;;;;;N;;;;; 20D0;COMBINING LEFT HARPOON ABOVE;Mn;230;NSM;;;;;N;NON-SPACING LEFT HARPOON ABOVE;;;; 20D1;COMBINING RIGHT HARPOON ABOVE;Mn;230;NSM;;;;;N;NON-SPACING RIGHT HARPOON ABOVE;;;; 20D2;COMBINING LONG VERTICAL LINE OVERLAY;Mn;1;NSM;;;;;N;NON-SPACING LONG VERTICAL BAR OVERLAY;;;; @@ -10300,6 +10380,7 @@ 2C2C;GLAGOLITIC CAPITAL LETTER SHTAPIC;Lu;0;L;;;;;N;;;;2C5C; 2C2D;GLAGOLITIC CAPITAL LETTER TROKUTASTI A;Lu;0;L;;;;;N;;;;2C5D; 2C2E;GLAGOLITIC CAPITAL LETTER LATINATE MYSLITE;Lu;0;L;;;;;N;;;;2C5E; +2C2F;GLAGOLITIC CAPITAL LETTER CAUDATE CHRIVI;Lu;0;L;;;;;N;;;;2C5F; 2C30;GLAGOLITIC SMALL LETTER AZU;Ll;0;L;;;;;N;;;2C00;;2C00 2C31;GLAGOLITIC SMALL LETTER BUKY;Ll;0;L;;;;;N;;;2C01;;2C01 2C32;GLAGOLITIC SMALL LETTER VEDE;Ll;0;L;;;;;N;;;2C02;;2C02 @@ -10347,6 +10428,7 @@ 2C5C;GLAGOLITIC SMALL LETTER SHTAPIC;Ll;0;L;;;;;N;;;2C2C;;2C2C 2C5D;GLAGOLITIC SMALL LETTER TROKUTASTI A;Ll;0;L;;;;;N;;;2C2D;;2C2D 2C5E;GLAGOLITIC SMALL LETTER LATINATE MYSLITE;Ll;0;L;;;;;N;;;2C2E;;2C2E +2C5F;GLAGOLITIC SMALL LETTER CAUDATE CHRIVI;Ll;0;L;;;;;N;;;2C2F;;2C2F 2C60;LATIN CAPITAL LETTER L WITH DOUBLE BAR;Lu;0;L;;;;;N;;;;2C61; 2C61;LATIN SMALL LETTER L WITH DOUBLE BAR;Ll;0;L;;;;;N;;;2C60;;2C60 2C62;LATIN CAPITAL LETTER L WITH MIDDLE TILDE;Lu;0;L;;;;;N;;;;026B; @@ -10795,6 +10877,17 @@ 2E50;CROSS PATTY WITH RIGHT CROSSBAR;So;0;ON;;;;;N;;;;; 2E51;CROSS PATTY WITH LEFT CROSSBAR;So;0;ON;;;;;N;;;;; 2E52;TIRONIAN SIGN CAPITAL ET;Po;0;ON;;;;;N;;;;; +2E53;MEDIEVAL EXCLAMATION MARK;Po;0;ON;;;;;N;;;;; +2E54;MEDIEVAL QUESTION MARK;Po;0;ON;;;;;N;;;;; +2E55;LEFT SQUARE BRACKET WITH STROKE;Ps;0;ON;;;;;Y;;;;; +2E56;RIGHT SQUARE BRACKET WITH STROKE;Pe;0;ON;;;;;Y;;;;; +2E57;LEFT SQUARE BRACKET WITH DOUBLE STROKE;Ps;0;ON;;;;;Y;;;;; +2E58;RIGHT SQUARE BRACKET WITH DOUBLE STROKE;Pe;0;ON;;;;;Y;;;;; +2E59;TOP HALF LEFT PARENTHESIS;Ps;0;ON;;;;;Y;;;;; +2E5A;TOP HALF RIGHT PARENTHESIS;Pe;0;ON;;;;;Y;;;;; +2E5B;BOTTOM HALF LEFT PARENTHESIS;Ps;0;ON;;;;;Y;;;;; +2E5C;BOTTOM HALF RIGHT PARENTHESIS;Pe;0;ON;;;;;Y;;;;; +2E5D;OBLIQUE HYPHEN;Pd;0;ON;;;;;N;;;;; 2E80;CJK RADICAL REPEAT;So;0;ON;;;;;N;;;;; 2E81;CJK RADICAL CLIFF;So;0;ON;;;;;N;;;;; 2E82;CJK RADICAL SECOND ONE;So;0;ON;;;;;N;;;;; @@ -12204,7 +12297,7 @@ 4DFE;HEXAGRAM FOR AFTER COMPLETION;So;0;ON;;;;;N;;;;; 4DFF;HEXAGRAM FOR BEFORE COMPLETION;So;0;ON;;;;;N;;;;; 4E00;;Lo;0;L;;;;;N;;;;; -9FFC;;Lo;0;L;;;;;N;;;;; +9FFF;;Lo;0;L;;;;;N;;;;; A000;YI SYLLABLE IT;Lo;0;L;;;;;N;;;;; A001;YI SYLLABLE IX;Lo;0;L;;;;;N;;;;; A002;YI SYLLABLE I;Lo;0;L;;;;;N;;;;; @@ -14149,6 +14242,8 @@ A7BC;LATIN CAPITAL LETTER GLOTTAL I;Lu;0;L;;;;;N;;;;A7BD; A7BD;LATIN SMALL LETTER GLOTTAL I;Ll;0;L;;;;;N;;;A7BC;;A7BC A7BE;LATIN CAPITAL LETTER GLOTTAL U;Lu;0;L;;;;;N;;;;A7BF; A7BF;LATIN SMALL LETTER GLOTTAL U;Ll;0;L;;;;;N;;;A7BE;;A7BE +A7C0;LATIN CAPITAL LETTER OLD POLISH O;Lu;0;L;;;;;N;;;;A7C1; +A7C1;LATIN SMALL LETTER OLD POLISH O;Ll;0;L;;;;;N;;;A7C0;;A7C0 A7C2;LATIN CAPITAL LETTER ANGLICANA W;Lu;0;L;;;;;N;;;;A7C3; A7C3;LATIN SMALL LETTER ANGLICANA W;Ll;0;L;;;;;N;;;A7C2;;A7C2 A7C4;LATIN CAPITAL LETTER C WITH PALATAL HOOK;Lu;0;L;;;;;N;;;;A794; @@ -14158,6 +14253,17 @@ A7C7;LATIN CAPITAL LETTER D WITH SHORT STROKE OVERLAY;Lu;0;L;;;;;N;;;;A7C8; A7C8;LATIN SMALL LETTER D WITH SHORT STROKE OVERLAY;Ll;0;L;;;;;N;;;A7C7;;A7C7 A7C9;LATIN CAPITAL LETTER S WITH SHORT STROKE OVERLAY;Lu;0;L;;;;;N;;;;A7CA; A7CA;LATIN SMALL LETTER S WITH SHORT STROKE OVERLAY;Ll;0;L;;;;;N;;;A7C9;;A7C9 +A7D0;LATIN CAPITAL LETTER CLOSED INSULAR G;Lu;0;L;;;;;N;;;;A7D1; +A7D1;LATIN SMALL LETTER CLOSED INSULAR G;Ll;0;L;;;;;N;;;A7D0;;A7D0 +A7D3;LATIN SMALL LETTER DOUBLE THORN;Ll;0;L;;;;;N;;;;; +A7D5;LATIN SMALL LETTER DOUBLE WYNN;Ll;0;L;;;;;N;;;;; +A7D6;LATIN CAPITAL LETTER MIDDLE SCOTS S;Lu;0;L;;;;;N;;;;A7D7; +A7D7;LATIN SMALL LETTER MIDDLE SCOTS S;Ll;0;L;;;;;N;;;A7D6;;A7D6 +A7D8;LATIN CAPITAL LETTER SIGMOID S;Lu;0;L;;;;;N;;;;A7D9; +A7D9;LATIN SMALL LETTER SIGMOID S;Ll;0;L;;;;;N;;;A7D8;;A7D8 +A7F2;MODIFIER LETTER CAPITAL C;Lm;0;L; 0043;;;;N;;;;; +A7F3;MODIFIER LETTER CAPITAL F;Lm;0;L; 0046;;;;N;;;;; +A7F4;MODIFIER LETTER CAPITAL Q;Lm;0;L; 0051;;;;N;;;;; A7F5;LATIN CAPITAL LETTER REVERSED HALF H;Lu;0;L;;;;;N;;;;A7F6; A7F6;LATIN SMALL LETTER REVERSED HALF H;Ll;0;L;;;;;N;;;A7F5;;A7F5 A7F7;LATIN EPIGRAPHIC LETTER SIDEWAYS I;Lo;0;L;;;;;N;;;;; @@ -15794,6 +15900,7 @@ FBBE;ARABIC SYMBOL TWO DOTS VERTICALLY BELOW;Sk;0;AL;;;;;N;;;;; FBBF;ARABIC SYMBOL RING;Sk;0;AL;;;;;N;;;;; FBC0;ARABIC SYMBOL SMALL TAH ABOVE;Sk;0;AL;;;;;N;;;;; FBC1;ARABIC SYMBOL SMALL TAH BELOW;Sk;0;AL;;;;;N;;;;; +FBC2;ARABIC SYMBOL WASLA ABOVE;Sk;0;AL;;;;;N;;;;; FBD3;ARABIC LETTER NG ISOLATED FORM;Lo;0;AL; 06AD;;;;N;;;;; FBD4;ARABIC LETTER NG FINAL FORM;Lo;0;AL; 06AD;;;;N;;;;; FBD5;ARABIC LETTER NG INITIAL FORM;Lo;0;AL; 06AD;;;;N;;;;; @@ -16159,6 +16266,22 @@ FD3C;ARABIC LIGATURE ALEF WITH FATHATAN FINAL FORM;Lo;0;AL; 0627 064B;;;; FD3D;ARABIC LIGATURE ALEF WITH FATHATAN ISOLATED FORM;Lo;0;AL; 0627 064B;;;;N;;;;; FD3E;ORNATE LEFT PARENTHESIS;Pe;0;ON;;;;;N;;;;; FD3F;ORNATE RIGHT PARENTHESIS;Ps;0;ON;;;;;N;;;;; +FD40;ARABIC LIGATURE RAHIMAHU ALLAAH;So;0;ON;;;;;N;;;;; +FD41;ARABIC LIGATURE RADI ALLAAHU ANH;So;0;ON;;;;;N;;;;; +FD42;ARABIC LIGATURE RADI ALLAAHU ANHAA;So;0;ON;;;;;N;;;;; +FD43;ARABIC LIGATURE RADI ALLAAHU ANHUM;So;0;ON;;;;;N;;;;; +FD44;ARABIC LIGATURE RADI ALLAAHU ANHUMAA;So;0;ON;;;;;N;;;;; +FD45;ARABIC LIGATURE RADI ALLAAHU ANHUNNA;So;0;ON;;;;;N;;;;; +FD46;ARABIC LIGATURE SALLALLAAHU ALAYHI WA-AALIH;So;0;ON;;;;;N;;;;; +FD47;ARABIC LIGATURE ALAYHI AS-SALAAM;So;0;ON;;;;;N;;;;; +FD48;ARABIC LIGATURE ALAYHIM AS-SALAAM;So;0;ON;;;;;N;;;;; +FD49;ARABIC LIGATURE ALAYHIMAA AS-SALAAM;So;0;ON;;;;;N;;;;; +FD4A;ARABIC LIGATURE ALAYHI AS-SALAATU WAS-SALAAM;So;0;ON;;;;;N;;;;; +FD4B;ARABIC LIGATURE QUDDISA SIRRAH;So;0;ON;;;;;N;;;;; +FD4C;ARABIC LIGATURE SALLALLAHU ALAYHI WAAALIHEE WA-SALLAM;So;0;ON;;;;;N;;;;; +FD4D;ARABIC LIGATURE ALAYHAA AS-SALAAM;So;0;ON;;;;;N;;;;; +FD4E;ARABIC LIGATURE TABAARAKA WA-TAAALAA;So;0;ON;;;;;N;;;;; +FD4F;ARABIC LIGATURE RAHIMAHUM ALLAAH;So;0;ON;;;;;N;;;;; FD50;ARABIC LIGATURE TEH WITH JEEM WITH MEEM INITIAL FORM;Lo;0;AL; 062A 062C 0645;;;;N;;;;; FD51;ARABIC LIGATURE TEH WITH HAH WITH JEEM FINAL FORM;Lo;0;AL; 062A 062D 062C;;;;N;;;;; FD52;ARABIC LIGATURE TEH WITH HAH WITH JEEM INITIAL FORM;Lo;0;AL; 062A 062D 062C;;;;N;;;;; @@ -16277,6 +16400,7 @@ FDC4;ARABIC LIGATURE AIN WITH JEEM WITH MEEM INITIAL FORM;Lo;0;AL; 0639 FDC5;ARABIC LIGATURE SAD WITH MEEM WITH MEEM INITIAL FORM;Lo;0;AL; 0635 0645 0645;;;;N;;;;; FDC6;ARABIC LIGATURE SEEN WITH KHAH WITH YEH FINAL FORM;Lo;0;AL; 0633 062E 064A;;;;N;;;;; FDC7;ARABIC LIGATURE NOON WITH JEEM WITH YEH FINAL FORM;Lo;0;AL; 0646 062C 064A;;;;N;;;;; +FDCF;ARABIC LIGATURE SALAAMUHU ALAYNAA;So;0;ON;;;;;N;;;;; FDF0;ARABIC LIGATURE SALLA USED AS KORANIC STOP SIGN ISOLATED FORM;Lo;0;AL; 0635 0644 06D2;;;;N;;;;; FDF1;ARABIC LIGATURE QALA USED AS KORANIC STOP SIGN ISOLATED FORM;Lo;0;AL; 0642 0644 06D2;;;;N;;;;; FDF2;ARABIC LIGATURE ALLAH ISOLATED FORM;Lo;0;AL; 0627 0644 0644 0647;;;;N;;;;; @@ -16291,6 +16415,8 @@ FDFA;ARABIC LIGATURE SALLALLAHOU ALAYHE WASALLAM;Lo;0;AL; 0635 0644 06 FDFB;ARABIC LIGATURE JALLAJALALOUHOU;Lo;0;AL; 062C 0644 0020 062C 0644 0627 0644 0647;;;;N;ARABIC LETTER JALLAJALALOUHOU;;;; FDFC;RIAL SIGN;Sc;0;AL; 0631 06CC 0627 0644;;;;N;;;;; FDFD;ARABIC LIGATURE BISMILLAH AR-RAHMAN AR-RAHEEM;So;0;ON;;;;;N;;;;; +FDFE;ARABIC LIGATURE SUBHAANAHU WA TAAALAA;So;0;ON;;;;;N;;;;; +FDFF;ARABIC LIGATURE AZZA WA JALL;So;0;ON;;;;;N;;;;; FE00;VARIATION SELECTOR-1;Mn;0;NSM;;;;;N;;;;; FE01;VARIATION SELECTOR-2;Mn;0;NSM;;;;;N;;;;; FE02;VARIATION SELECTOR-3;Mn;0;NSM;;;;;N;;;;; @@ -17798,6 +17924,76 @@ FFFD;REPLACEMENT CHARACTER;So;0;ON;;;;;N;;;;; 10562;CAUCASIAN ALBANIAN LETTER PIWR;Lo;0;L;;;;;N;;;;; 10563;CAUCASIAN ALBANIAN LETTER KIW;Lo;0;L;;;;;N;;;;; 1056F;CAUCASIAN ALBANIAN CITATION MARK;Po;0;L;;;;;N;;;;; +10570;VITHKUQI CAPITAL LETTER A;Lu;0;L;;;;;N;;;;10597; +10571;VITHKUQI CAPITAL LETTER BBE;Lu;0;L;;;;;N;;;;10598; +10572;VITHKUQI CAPITAL LETTER BE;Lu;0;L;;;;;N;;;;10599; +10573;VITHKUQI CAPITAL LETTER CE;Lu;0;L;;;;;N;;;;1059A; +10574;VITHKUQI CAPITAL LETTER CHE;Lu;0;L;;;;;N;;;;1059B; +10575;VITHKUQI CAPITAL LETTER DE;Lu;0;L;;;;;N;;;;1059C; +10576;VITHKUQI CAPITAL LETTER DHE;Lu;0;L;;;;;N;;;;1059D; +10577;VITHKUQI CAPITAL LETTER EI;Lu;0;L;;;;;N;;;;1059E; +10578;VITHKUQI CAPITAL LETTER E;Lu;0;L;;;;;N;;;;1059F; +10579;VITHKUQI CAPITAL LETTER FE;Lu;0;L;;;;;N;;;;105A0; +1057A;VITHKUQI CAPITAL LETTER GA;Lu;0;L;;;;;N;;;;105A1; +1057C;VITHKUQI CAPITAL LETTER HA;Lu;0;L;;;;;N;;;;105A3; +1057D;VITHKUQI CAPITAL LETTER HHA;Lu;0;L;;;;;N;;;;105A4; +1057E;VITHKUQI CAPITAL LETTER I;Lu;0;L;;;;;N;;;;105A5; +1057F;VITHKUQI CAPITAL LETTER IJE;Lu;0;L;;;;;N;;;;105A6; +10580;VITHKUQI CAPITAL LETTER JE;Lu;0;L;;;;;N;;;;105A7; +10581;VITHKUQI CAPITAL LETTER KA;Lu;0;L;;;;;N;;;;105A8; +10582;VITHKUQI CAPITAL LETTER LA;Lu;0;L;;;;;N;;;;105A9; +10583;VITHKUQI CAPITAL LETTER LLA;Lu;0;L;;;;;N;;;;105AA; +10584;VITHKUQI CAPITAL LETTER ME;Lu;0;L;;;;;N;;;;105AB; +10585;VITHKUQI CAPITAL LETTER NE;Lu;0;L;;;;;N;;;;105AC; +10586;VITHKUQI CAPITAL LETTER NJE;Lu;0;L;;;;;N;;;;105AD; +10587;VITHKUQI CAPITAL LETTER O;Lu;0;L;;;;;N;;;;105AE; +10588;VITHKUQI CAPITAL LETTER PE;Lu;0;L;;;;;N;;;;105AF; +10589;VITHKUQI CAPITAL LETTER QA;Lu;0;L;;;;;N;;;;105B0; +1058A;VITHKUQI CAPITAL LETTER RE;Lu;0;L;;;;;N;;;;105B1; +1058C;VITHKUQI CAPITAL LETTER SE;Lu;0;L;;;;;N;;;;105B3; +1058D;VITHKUQI CAPITAL LETTER SHE;Lu;0;L;;;;;N;;;;105B4; +1058E;VITHKUQI CAPITAL LETTER TE;Lu;0;L;;;;;N;;;;105B5; +1058F;VITHKUQI CAPITAL LETTER THE;Lu;0;L;;;;;N;;;;105B6; +10590;VITHKUQI CAPITAL LETTER U;Lu;0;L;;;;;N;;;;105B7; +10591;VITHKUQI CAPITAL LETTER VE;Lu;0;L;;;;;N;;;;105B8; +10592;VITHKUQI CAPITAL LETTER XE;Lu;0;L;;;;;N;;;;105B9; +10594;VITHKUQI CAPITAL LETTER Y;Lu;0;L;;;;;N;;;;105BB; +10595;VITHKUQI CAPITAL LETTER ZE;Lu;0;L;;;;;N;;;;105BC; +10597;VITHKUQI SMALL LETTER A;Ll;0;L;;;;;N;;;10570;;10570 +10598;VITHKUQI SMALL LETTER BBE;Ll;0;L;;;;;N;;;10571;;10571 +10599;VITHKUQI SMALL LETTER BE;Ll;0;L;;;;;N;;;10572;;10572 +1059A;VITHKUQI SMALL LETTER CE;Ll;0;L;;;;;N;;;10573;;10573 +1059B;VITHKUQI SMALL LETTER CHE;Ll;0;L;;;;;N;;;10574;;10574 +1059C;VITHKUQI SMALL LETTER DE;Ll;0;L;;;;;N;;;10575;;10575 +1059D;VITHKUQI SMALL LETTER DHE;Ll;0;L;;;;;N;;;10576;;10576 +1059E;VITHKUQI SMALL LETTER EI;Ll;0;L;;;;;N;;;10577;;10577 +1059F;VITHKUQI SMALL LETTER E;Ll;0;L;;;;;N;;;10578;;10578 +105A0;VITHKUQI SMALL LETTER FE;Ll;0;L;;;;;N;;;10579;;10579 +105A1;VITHKUQI SMALL LETTER GA;Ll;0;L;;;;;N;;;1057A;;1057A +105A3;VITHKUQI SMALL LETTER HA;Ll;0;L;;;;;N;;;1057C;;1057C +105A4;VITHKUQI SMALL LETTER HHA;Ll;0;L;;;;;N;;;1057D;;1057D +105A5;VITHKUQI SMALL LETTER I;Ll;0;L;;;;;N;;;1057E;;1057E +105A6;VITHKUQI SMALL LETTER IJE;Ll;0;L;;;;;N;;;1057F;;1057F +105A7;VITHKUQI SMALL LETTER JE;Ll;0;L;;;;;N;;;10580;;10580 +105A8;VITHKUQI SMALL LETTER KA;Ll;0;L;;;;;N;;;10581;;10581 +105A9;VITHKUQI SMALL LETTER LA;Ll;0;L;;;;;N;;;10582;;10582 +105AA;VITHKUQI SMALL LETTER LLA;Ll;0;L;;;;;N;;;10583;;10583 +105AB;VITHKUQI SMALL LETTER ME;Ll;0;L;;;;;N;;;10584;;10584 +105AC;VITHKUQI SMALL LETTER NE;Ll;0;L;;;;;N;;;10585;;10585 +105AD;VITHKUQI SMALL LETTER NJE;Ll;0;L;;;;;N;;;10586;;10586 +105AE;VITHKUQI SMALL LETTER O;Ll;0;L;;;;;N;;;10587;;10587 +105AF;VITHKUQI SMALL LETTER PE;Ll;0;L;;;;;N;;;10588;;10588 +105B0;VITHKUQI SMALL LETTER QA;Ll;0;L;;;;;N;;;10589;;10589 +105B1;VITHKUQI SMALL LETTER RE;Ll;0;L;;;;;N;;;1058A;;1058A +105B3;VITHKUQI SMALL LETTER SE;Ll;0;L;;;;;N;;;1058C;;1058C +105B4;VITHKUQI SMALL LETTER SHE;Ll;0;L;;;;;N;;;1058D;;1058D +105B5;VITHKUQI SMALL LETTER TE;Ll;0;L;;;;;N;;;1058E;;1058E +105B6;VITHKUQI SMALL LETTER THE;Ll;0;L;;;;;N;;;1058F;;1058F +105B7;VITHKUQI SMALL LETTER U;Ll;0;L;;;;;N;;;10590;;10590 +105B8;VITHKUQI SMALL LETTER VE;Ll;0;L;;;;;N;;;10591;;10591 +105B9;VITHKUQI SMALL LETTER XE;Ll;0;L;;;;;N;;;10592;;10592 +105BB;VITHKUQI SMALL LETTER Y;Ll;0;L;;;;;N;;;10594;;10594 +105BC;VITHKUQI SMALL LETTER ZE;Ll;0;L;;;;;N;;;10595;;10595 10600;LINEAR A SIGN AB001;Lo;0;L;;;;;N;;;;; 10601;LINEAR A SIGN AB002;Lo;0;L;;;;;N;;;;; 10602;LINEAR A SIGN AB003;Lo;0;L;;;;;N;;;;; @@ -18139,6 +18335,63 @@ FFFD;REPLACEMENT CHARACTER;So;0;ON;;;;;N;;;;; 10765;LINEAR A SIGN A805;Lo;0;L;;;;;N;;;;; 10766;LINEAR A SIGN A806;Lo;0;L;;;;;N;;;;; 10767;LINEAR A SIGN A807;Lo;0;L;;;;;N;;;;; +10780;MODIFIER LETTER SMALL CAPITAL AA;Lm;0;L;;;;;N;;;;; +10781;MODIFIER LETTER SUPERSCRIPT TRIANGULAR COLON;Lm;0;L; 02D0;;;;N;;;;; +10782;MODIFIER LETTER SUPERSCRIPT HALF TRIANGULAR COLON;Lm;0;L; 02D1;;;;N;;;;; +10783;MODIFIER LETTER SMALL AE;Lm;0;L; 00E6;;;;N;;;;; +10784;MODIFIER LETTER SMALL CAPITAL B;Lm;0;L; 0299;;;;N;;;;; +10785;MODIFIER LETTER SMALL B WITH HOOK;Lm;0;L; 0253;;;;N;;;;; +10787;MODIFIER LETTER SMALL DZ DIGRAPH;Lm;0;L; 02A3;;;;N;;;;; +10788;MODIFIER LETTER SMALL DZ DIGRAPH WITH RETROFLEX HOOK;Lm;0;L; AB66;;;;N;;;;; +10789;MODIFIER LETTER SMALL DZ DIGRAPH WITH CURL;Lm;0;L; 02A5;;;;N;;;;; +1078A;MODIFIER LETTER SMALL DEZH DIGRAPH;Lm;0;L; 02A4;;;;N;;;;; +1078B;MODIFIER LETTER SMALL D WITH TAIL;Lm;0;L; 0256;;;;N;;;;; +1078C;MODIFIER LETTER SMALL D WITH HOOK;Lm;0;L; 0257;;;;N;;;;; +1078D;MODIFIER LETTER SMALL D WITH HOOK AND TAIL;Lm;0;L; 1D91;;;;N;;;;; +1078E;MODIFIER LETTER SMALL REVERSED E;Lm;0;L; 0258;;;;N;;;;; +1078F;MODIFIER LETTER SMALL CLOSED REVERSED OPEN E;Lm;0;L; 025E;;;;N;;;;; +10790;MODIFIER LETTER SMALL FENG DIGRAPH;Lm;0;L; 02A9;;;;N;;;;; +10791;MODIFIER LETTER SMALL RAMS HORN;Lm;0;L; 0264;;;;N;;;;; +10792;MODIFIER LETTER SMALL CAPITAL G;Lm;0;L; 0262;;;;N;;;;; +10793;MODIFIER LETTER SMALL G WITH HOOK;Lm;0;L; 0260;;;;N;;;;; +10794;MODIFIER LETTER SMALL CAPITAL G WITH HOOK;Lm;0;L; 029B;;;;N;;;;; +10795;MODIFIER LETTER SMALL H WITH STROKE;Lm;0;L; 0127;;;;N;;;;; +10796;MODIFIER LETTER SMALL CAPITAL H;Lm;0;L; 029C;;;;N;;;;; +10797;MODIFIER LETTER SMALL HENG WITH HOOK;Lm;0;L; 0267;;;;N;;;;; +10798;MODIFIER LETTER SMALL DOTLESS J WITH STROKE AND HOOK;Lm;0;L; 0284;;;;N;;;;; +10799;MODIFIER LETTER SMALL LS DIGRAPH;Lm;0;L; 02AA;;;;N;;;;; +1079A;MODIFIER LETTER SMALL LZ DIGRAPH;Lm;0;L; 02AB;;;;N;;;;; +1079B;MODIFIER LETTER SMALL L WITH BELT;Lm;0;L; 026C;;;;N;;;;; +1079C;MODIFIER LETTER SMALL CAPITAL L WITH BELT;Lm;0;L; 1DF04;;;;N;;;;; +1079D;MODIFIER LETTER SMALL L WITH RETROFLEX HOOK AND BELT;Lm;0;L; A78E;;;;N;;;;; +1079E;MODIFIER LETTER SMALL LEZH;Lm;0;L; 026E;;;;N;;;;; +1079F;MODIFIER LETTER SMALL LEZH WITH RETROFLEX HOOK;Lm;0;L; 1DF05;;;;N;;;;; +107A0;MODIFIER LETTER SMALL TURNED Y;Lm;0;L; 028E;;;;N;;;;; +107A1;MODIFIER LETTER SMALL TURNED Y WITH BELT;Lm;0;L; 1DF06;;;;N;;;;; +107A2;MODIFIER LETTER SMALL O WITH STROKE;Lm;0;L; 00F8;;;;N;;;;; +107A3;MODIFIER LETTER SMALL CAPITAL OE;Lm;0;L; 0276;;;;N;;;;; +107A4;MODIFIER LETTER SMALL CLOSED OMEGA;Lm;0;L; 0277;;;;N;;;;; +107A5;MODIFIER LETTER SMALL Q;Lm;0;L; 0071;;;;N;;;;; +107A6;MODIFIER LETTER SMALL TURNED R WITH LONG LEG;Lm;0;L; 027A;;;;N;;;;; +107A7;MODIFIER LETTER SMALL TURNED R WITH LONG LEG AND RETROFLEX HOOK;Lm;0;L; 1DF08;;;;N;;;;; +107A8;MODIFIER LETTER SMALL R WITH TAIL;Lm;0;L; 027D;;;;N;;;;; +107A9;MODIFIER LETTER SMALL R WITH FISHHOOK;Lm;0;L; 027E;;;;N;;;;; +107AA;MODIFIER LETTER SMALL CAPITAL R;Lm;0;L; 0280;;;;N;;;;; +107AB;MODIFIER LETTER SMALL TC DIGRAPH WITH CURL;Lm;0;L; 02A8;;;;N;;;;; +107AC;MODIFIER LETTER SMALL TS DIGRAPH;Lm;0;L; 02A6;;;;N;;;;; +107AD;MODIFIER LETTER SMALL TS DIGRAPH WITH RETROFLEX HOOK;Lm;0;L; AB67;;;;N;;;;; +107AE;MODIFIER LETTER SMALL TESH DIGRAPH;Lm;0;L; 02A7;;;;N;;;;; +107AF;MODIFIER LETTER SMALL T WITH RETROFLEX HOOK;Lm;0;L; 0288;;;;N;;;;; +107B0;MODIFIER LETTER SMALL V WITH RIGHT HOOK;Lm;0;L; 2C71;;;;N;;;;; +107B2;MODIFIER LETTER SMALL CAPITAL Y;Lm;0;L; 028F;;;;N;;;;; +107B3;MODIFIER LETTER GLOTTAL STOP WITH STROKE;Lm;0;L; 02A1;;;;N;;;;; +107B4;MODIFIER LETTER REVERSED GLOTTAL STOP WITH STROKE;Lm;0;L; 02A2;;;;N;;;;; +107B5;MODIFIER LETTER BILABIAL CLICK;Lm;0;L; 0298;;;;N;;;;; +107B6;MODIFIER LETTER DENTAL CLICK;Lm;0;L; 01C0;;;;N;;;;; +107B7;MODIFIER LETTER LATERAL CLICK;Lm;0;L; 01C1;;;;N;;;;; +107B8;MODIFIER LETTER ALVEOLAR CLICK;Lm;0;L; 01C2;;;;N;;;;; +107B9;MODIFIER LETTER RETROFLEX CLICK WITH RETROFLEX HOOK;Lm;0;L; 1DF0A;;;;N;;;;; +107BA;MODIFIER LETTER SMALL S WITH CURL;Lm;0;L; 1DF1E;;;;N;;;;; 10800;CYPRIOT SYLLABLE A;Lo;0;R;;;;;N;;;;; 10801;CYPRIOT SYLLABLE E;Lo;0;R;;;;;N;;;;; 10802;CYPRIOT SYLLABLE I;Lo;0;R;;;;;N;;;;; @@ -19222,6 +19475,32 @@ FFFD;REPLACEMENT CHARACTER;So;0;ON;;;;;N;;;;; 10F57;SOGDIAN PUNCTUATION CIRCLE WITH DOT;Po;0;AL;;;;;N;;;;; 10F58;SOGDIAN PUNCTUATION TWO CIRCLES WITH DOTS;Po;0;AL;;;;;N;;;;; 10F59;SOGDIAN PUNCTUATION HALF CIRCLE WITH DOT;Po;0;AL;;;;;N;;;;; +10F70;OLD UYGHUR LETTER ALEPH;Lo;0;R;;;;;N;;;;; +10F71;OLD UYGHUR LETTER BETH;Lo;0;R;;;;;N;;;;; +10F72;OLD UYGHUR LETTER GIMEL-HETH;Lo;0;R;;;;;N;;;;; +10F73;OLD UYGHUR LETTER WAW;Lo;0;R;;;;;N;;;;; +10F74;OLD UYGHUR LETTER ZAYIN;Lo;0;R;;;;;N;;;;; +10F75;OLD UYGHUR LETTER FINAL HETH;Lo;0;R;;;;;N;;;;; +10F76;OLD UYGHUR LETTER YODH;Lo;0;R;;;;;N;;;;; +10F77;OLD UYGHUR LETTER KAPH;Lo;0;R;;;;;N;;;;; +10F78;OLD UYGHUR LETTER LAMEDH;Lo;0;R;;;;;N;;;;; +10F79;OLD UYGHUR LETTER MEM;Lo;0;R;;;;;N;;;;; +10F7A;OLD UYGHUR LETTER NUN;Lo;0;R;;;;;N;;;;; +10F7B;OLD UYGHUR LETTER SAMEKH;Lo;0;R;;;;;N;;;;; +10F7C;OLD UYGHUR LETTER PE;Lo;0;R;;;;;N;;;;; +10F7D;OLD UYGHUR LETTER SADHE;Lo;0;R;;;;;N;;;;; +10F7E;OLD UYGHUR LETTER RESH;Lo;0;R;;;;;N;;;;; +10F7F;OLD UYGHUR LETTER SHIN;Lo;0;R;;;;;N;;;;; +10F80;OLD UYGHUR LETTER TAW;Lo;0;R;;;;;N;;;;; +10F81;OLD UYGHUR LETTER LESH;Lo;0;R;;;;;N;;;;; +10F82;OLD UYGHUR COMBINING DOT ABOVE;Mn;230;NSM;;;;;N;;;;; +10F83;OLD UYGHUR COMBINING DOT BELOW;Mn;220;NSM;;;;;N;;;;; +10F84;OLD UYGHUR COMBINING TWO DOTS ABOVE;Mn;230;NSM;;;;;N;;;;; +10F85;OLD UYGHUR COMBINING TWO DOTS BELOW;Mn;220;NSM;;;;;N;;;;; +10F86;OLD UYGHUR PUNCTUATION BAR;Po;0;R;;;;;N;;;;; +10F87;OLD UYGHUR PUNCTUATION TWO BARS;Po;0;R;;;;;N;;;;; +10F88;OLD UYGHUR PUNCTUATION TWO DOTS;Po;0;R;;;;;N;;;;; +10F89;OLD UYGHUR PUNCTUATION FOUR DOTS;Po;0;R;;;;;N;;;;; 10FB0;CHORASMIAN LETTER ALEPH;Lo;0;R;;;;;N;;;;; 10FB1;CHORASMIAN LETTER SMALL ALEPH;Lo;0;R;;;;;N;;;;; 10FB2;CHORASMIAN LETTER BETH;Lo;0;R;;;;;N;;;;; @@ -19381,6 +19660,12 @@ FFFD;REPLACEMENT CHARACTER;So;0;ON;;;;;N;;;;; 1106D;BRAHMI DIGIT SEVEN;Nd;0;L;;7;7;7;N;;;;; 1106E;BRAHMI DIGIT EIGHT;Nd;0;L;;8;8;8;N;;;;; 1106F;BRAHMI DIGIT NINE;Nd;0;L;;9;9;9;N;;;;; +11070;BRAHMI SIGN OLD TAMIL VIRAMA;Mn;9;NSM;;;;;N;;;;; +11071;BRAHMI LETTER OLD TAMIL SHORT E;Lo;0;L;;;;;N;;;;; +11072;BRAHMI LETTER OLD TAMIL SHORT O;Lo;0;L;;;;;N;;;;; +11073;BRAHMI VOWEL SIGN OLD TAMIL SHORT E;Mn;0;NSM;;;;;N;;;;; +11074;BRAHMI VOWEL SIGN OLD TAMIL SHORT O;Mn;0;NSM;;;;;N;;;;; +11075;BRAHMI LETTER OLD TAMIL LLA;Lo;0;L;;;;;N;;;;; 1107F;BRAHMI NUMBER JOINER;Mn;9;NSM;;;;;N;;;;; 11080;KAITHI SIGN CANDRABINDU;Mn;0;NSM;;;;;N;;;;; 11081;KAITHI SIGN ANUSVARA;Mn;0;NSM;;;;;N;;;;; @@ -19448,6 +19733,7 @@ FFFD;REPLACEMENT CHARACTER;So;0;ON;;;;;N;;;;; 110BF;KAITHI DOUBLE SECTION MARK;Po;0;L;;;;;N;;;;; 110C0;KAITHI DANDA;Po;0;L;;;;;N;;;;; 110C1;KAITHI DOUBLE DANDA;Po;0;L;;;;;N;;;;; +110C2;KAITHI VOWEL SIGN VOCALIC R;Mn;0;NSM;;;;;N;;;;; 110CD;KAITHI NUMBER SIGN ABOVE;Cf;0;L;;;;;N;;;;; 110D0;SORA SOMPENG LETTER SAH;Lo;0;L;;;;;N;;;;; 110D1;SORA SOMPENG LETTER TAH;Lo;0;L;;;;;N;;;;; @@ -20385,6 +20671,7 @@ FFFD;REPLACEMENT CHARACTER;So;0;ON;;;;;N;;;;; 116B6;TAKRI SIGN VIRAMA;Mc;9;L;;;;;N;;;;; 116B7;TAKRI SIGN NUKTA;Mn;7;NSM;;;;;N;;;;; 116B8;TAKRI LETTER ARCHAIC KHA;Lo;0;L;;;;;N;;;;; +116B9;TAKRI ABBREVIATION SIGN;Po;0;L;;;;;N;;;;; 116C0;TAKRI DIGIT ZERO;Nd;0;L;;0;0;0;N;;;;; 116C1;TAKRI DIGIT ONE;Nd;0;L;;1;1;1;N;;;;; 116C2;TAKRI DIGIT TWO;Nd;0;L;;2;2;2;N;;;;; @@ -20453,6 +20740,13 @@ FFFD;REPLACEMENT CHARACTER;So;0;ON;;;;;N;;;;; 1173D;AHOM SIGN SECTION;Po;0;L;;;;;N;;;;; 1173E;AHOM SIGN RULAI;Po;0;L;;;;;N;;;;; 1173F;AHOM SYMBOL VI;So;0;L;;;;;N;;;;; +11740;AHOM LETTER CA;Lo;0;L;;;;;N;;;;; +11741;AHOM LETTER TTA;Lo;0;L;;;;;N;;;;; +11742;AHOM LETTER TTHA;Lo;0;L;;;;;N;;;;; +11743;AHOM LETTER DDA;Lo;0;L;;;;;N;;;;; +11744;AHOM LETTER DDHA;Lo;0;L;;;;;N;;;;; +11745;AHOM LETTER NNA;Lo;0;L;;;;;N;;;;; +11746;AHOM LETTER LLA;Lo;0;L;;;;;N;;;;; 11800;DOGRA LETTER A;Lo;0;L;;;;;N;;;;; 11801;DOGRA LETTER AA;Lo;0;L;;;;;N;;;;; 11802;DOGRA LETTER I;Lo;0;L;;;;;N;;;;; @@ -20889,6 +21183,22 @@ FFFD;REPLACEMENT CHARACTER;So;0;ON;;;;;N;;;;; 11AA0;SOYOMBO HEAD MARK WITH MOON AND SUN;Po;0;L;;;;;N;;;;; 11AA1;SOYOMBO TERMINAL MARK-1;Po;0;L;;;;;N;;;;; 11AA2;SOYOMBO TERMINAL MARK-2;Po;0;L;;;;;N;;;;; +11AB0;CANADIAN SYLLABICS NATTILIK HI;Lo;0;L;;;;;N;;;;; +11AB1;CANADIAN SYLLABICS NATTILIK HII;Lo;0;L;;;;;N;;;;; +11AB2;CANADIAN SYLLABICS NATTILIK HO;Lo;0;L;;;;;N;;;;; +11AB3;CANADIAN SYLLABICS NATTILIK HOO;Lo;0;L;;;;;N;;;;; +11AB4;CANADIAN SYLLABICS NATTILIK HA;Lo;0;L;;;;;N;;;;; +11AB5;CANADIAN SYLLABICS NATTILIK HAA;Lo;0;L;;;;;N;;;;; +11AB6;CANADIAN SYLLABICS NATTILIK SHRI;Lo;0;L;;;;;N;;;;; +11AB7;CANADIAN SYLLABICS NATTILIK SHRII;Lo;0;L;;;;;N;;;;; +11AB8;CANADIAN SYLLABICS NATTILIK SHRO;Lo;0;L;;;;;N;;;;; +11AB9;CANADIAN SYLLABICS NATTILIK SHROO;Lo;0;L;;;;;N;;;;; +11ABA;CANADIAN SYLLABICS NATTILIK SHRA;Lo;0;L;;;;;N;;;;; +11ABB;CANADIAN SYLLABICS NATTILIK SHRAA;Lo;0;L;;;;;N;;;;; +11ABC;CANADIAN SYLLABICS SPE;Lo;0;L;;;;;N;;;;; +11ABD;CANADIAN SYLLABICS SPI;Lo;0;L;;;;;N;;;;; +11ABE;CANADIAN SYLLABICS SPO;Lo;0;L;;;;;N;;;;; +11ABF;CANADIAN SYLLABICS SPA;Lo;0;L;;;;;N;;;;; 11AC0;PAU CIN HAU LETTER PA;Lo;0;L;;;;;N;;;;; 11AC1;PAU CIN HAU LETTER KA;Lo;0;L;;;;;N;;;;; 11AC2;PAU CIN HAU LETTER LA;Lo;0;L;;;;;N;;;;; @@ -22560,6 +22870,105 @@ FFFD;REPLACEMENT CHARACTER;So;0;ON;;;;;N;;;;; 12541;CUNEIFORM SIGN ZA7;Lo;0;L;;;;;N;;;;; 12542;CUNEIFORM SIGN ZU OVER ZU PLUS SAR;Lo;0;L;;;;;N;;;;; 12543;CUNEIFORM SIGN ZU5 TIMES THREE DISH TENU;Lo;0;L;;;;;N;;;;; +12F90;CYPRO-MINOAN SIGN CM001;Lo;0;L;;;;;N;;;;; +12F91;CYPRO-MINOAN SIGN CM002;Lo;0;L;;;;;N;;;;; +12F92;CYPRO-MINOAN SIGN CM004;Lo;0;L;;;;;N;;;;; +12F93;CYPRO-MINOAN SIGN CM005;Lo;0;L;;;;;N;;;;; +12F94;CYPRO-MINOAN SIGN CM006;Lo;0;L;;;;;N;;;;; +12F95;CYPRO-MINOAN SIGN CM007;Lo;0;L;;;;;N;;;;; +12F96;CYPRO-MINOAN SIGN CM008;Lo;0;L;;;;;N;;;;; +12F97;CYPRO-MINOAN SIGN CM009;Lo;0;L;;;;;N;;;;; +12F98;CYPRO-MINOAN SIGN CM010;Lo;0;L;;;;;N;;;;; +12F99;CYPRO-MINOAN SIGN CM011;Lo;0;L;;;;;N;;;;; +12F9A;CYPRO-MINOAN SIGN CM012;Lo;0;L;;;;;N;;;;; +12F9B;CYPRO-MINOAN SIGN CM012B;Lo;0;L;;;;;N;;;;; +12F9C;CYPRO-MINOAN SIGN CM013;Lo;0;L;;;;;N;;;;; +12F9D;CYPRO-MINOAN SIGN CM015;Lo;0;L;;;;;N;;;;; +12F9E;CYPRO-MINOAN SIGN CM017;Lo;0;L;;;;;N;;;;; +12F9F;CYPRO-MINOAN SIGN CM019;Lo;0;L;;;;;N;;;;; +12FA0;CYPRO-MINOAN SIGN CM021;Lo;0;L;;;;;N;;;;; +12FA1;CYPRO-MINOAN SIGN CM023;Lo;0;L;;;;;N;;;;; +12FA2;CYPRO-MINOAN SIGN CM024;Lo;0;L;;;;;N;;;;; +12FA3;CYPRO-MINOAN SIGN CM025;Lo;0;L;;;;;N;;;;; +12FA4;CYPRO-MINOAN SIGN CM026;Lo;0;L;;;;;N;;;;; +12FA5;CYPRO-MINOAN SIGN CM027;Lo;0;L;;;;;N;;;;; +12FA6;CYPRO-MINOAN SIGN CM028;Lo;0;L;;;;;N;;;;; +12FA7;CYPRO-MINOAN SIGN CM029;Lo;0;L;;;;;N;;;;; +12FA8;CYPRO-MINOAN SIGN CM030;Lo;0;L;;;;;N;;;;; +12FA9;CYPRO-MINOAN SIGN CM033;Lo;0;L;;;;;N;;;;; +12FAA;CYPRO-MINOAN SIGN CM034;Lo;0;L;;;;;N;;;;; +12FAB;CYPRO-MINOAN SIGN CM035;Lo;0;L;;;;;N;;;;; +12FAC;CYPRO-MINOAN SIGN CM036;Lo;0;L;;;;;N;;;;; +12FAD;CYPRO-MINOAN SIGN CM037;Lo;0;L;;;;;N;;;;; +12FAE;CYPRO-MINOAN SIGN CM038;Lo;0;L;;;;;N;;;;; +12FAF;CYPRO-MINOAN SIGN CM039;Lo;0;L;;;;;N;;;;; +12FB0;CYPRO-MINOAN SIGN CM040;Lo;0;L;;;;;N;;;;; +12FB1;CYPRO-MINOAN SIGN CM041;Lo;0;L;;;;;N;;;;; +12FB2;CYPRO-MINOAN SIGN CM044;Lo;0;L;;;;;N;;;;; +12FB3;CYPRO-MINOAN SIGN CM046;Lo;0;L;;;;;N;;;;; +12FB4;CYPRO-MINOAN SIGN CM047;Lo;0;L;;;;;N;;;;; +12FB5;CYPRO-MINOAN SIGN CM049;Lo;0;L;;;;;N;;;;; +12FB6;CYPRO-MINOAN SIGN CM050;Lo;0;L;;;;;N;;;;; +12FB7;CYPRO-MINOAN SIGN CM051;Lo;0;L;;;;;N;;;;; +12FB8;CYPRO-MINOAN SIGN CM052;Lo;0;L;;;;;N;;;;; +12FB9;CYPRO-MINOAN SIGN CM053;Lo;0;L;;;;;N;;;;; +12FBA;CYPRO-MINOAN SIGN CM054;Lo;0;L;;;;;N;;;;; +12FBB;CYPRO-MINOAN SIGN CM055;Lo;0;L;;;;;N;;;;; +12FBC;CYPRO-MINOAN SIGN CM056;Lo;0;L;;;;;N;;;;; +12FBD;CYPRO-MINOAN SIGN CM058;Lo;0;L;;;;;N;;;;; +12FBE;CYPRO-MINOAN SIGN CM059;Lo;0;L;;;;;N;;;;; +12FBF;CYPRO-MINOAN SIGN CM060;Lo;0;L;;;;;N;;;;; +12FC0;CYPRO-MINOAN SIGN CM061;Lo;0;L;;;;;N;;;;; +12FC1;CYPRO-MINOAN SIGN CM062;Lo;0;L;;;;;N;;;;; +12FC2;CYPRO-MINOAN SIGN CM063;Lo;0;L;;;;;N;;;;; +12FC3;CYPRO-MINOAN SIGN CM064;Lo;0;L;;;;;N;;;;; +12FC4;CYPRO-MINOAN SIGN CM066;Lo;0;L;;;;;N;;;;; +12FC5;CYPRO-MINOAN SIGN CM067;Lo;0;L;;;;;N;;;;; +12FC6;CYPRO-MINOAN SIGN CM068;Lo;0;L;;;;;N;;;;; +12FC7;CYPRO-MINOAN SIGN CM069;Lo;0;L;;;;;N;;;;; +12FC8;CYPRO-MINOAN SIGN CM070;Lo;0;L;;;;;N;;;;; +12FC9;CYPRO-MINOAN SIGN CM071;Lo;0;L;;;;;N;;;;; +12FCA;CYPRO-MINOAN SIGN CM072;Lo;0;L;;;;;N;;;;; +12FCB;CYPRO-MINOAN SIGN CM073;Lo;0;L;;;;;N;;;;; +12FCC;CYPRO-MINOAN SIGN CM074;Lo;0;L;;;;;N;;;;; +12FCD;CYPRO-MINOAN SIGN CM075;Lo;0;L;;;;;N;;;;; +12FCE;CYPRO-MINOAN SIGN CM075B;Lo;0;L;;;;;N;;;;; +12FCF;CYPRO-MINOAN SIGN CM076;Lo;0;L;;;;;N;;;;; +12FD0;CYPRO-MINOAN SIGN CM078;Lo;0;L;;;;;N;;;;; +12FD1;CYPRO-MINOAN SIGN CM079;Lo;0;L;;;;;N;;;;; +12FD2;CYPRO-MINOAN SIGN CM080;Lo;0;L;;;;;N;;;;; +12FD3;CYPRO-MINOAN SIGN CM081;Lo;0;L;;;;;N;;;;; +12FD4;CYPRO-MINOAN SIGN CM082;Lo;0;L;;;;;N;;;;; +12FD5;CYPRO-MINOAN SIGN CM083;Lo;0;L;;;;;N;;;;; +12FD6;CYPRO-MINOAN SIGN CM084;Lo;0;L;;;;;N;;;;; +12FD7;CYPRO-MINOAN SIGN CM085;Lo;0;L;;;;;N;;;;; +12FD8;CYPRO-MINOAN SIGN CM086;Lo;0;L;;;;;N;;;;; +12FD9;CYPRO-MINOAN SIGN CM087;Lo;0;L;;;;;N;;;;; +12FDA;CYPRO-MINOAN SIGN CM088;Lo;0;L;;;;;N;;;;; +12FDB;CYPRO-MINOAN SIGN CM089;Lo;0;L;;;;;N;;;;; +12FDC;CYPRO-MINOAN SIGN CM090;Lo;0;L;;;;;N;;;;; +12FDD;CYPRO-MINOAN SIGN CM091;Lo;0;L;;;;;N;;;;; +12FDE;CYPRO-MINOAN SIGN CM092;Lo;0;L;;;;;N;;;;; +12FDF;CYPRO-MINOAN SIGN CM094;Lo;0;L;;;;;N;;;;; +12FE0;CYPRO-MINOAN SIGN CM095;Lo;0;L;;;;;N;;;;; +12FE1;CYPRO-MINOAN SIGN CM096;Lo;0;L;;;;;N;;;;; +12FE2;CYPRO-MINOAN SIGN CM097;Lo;0;L;;;;;N;;;;; +12FE3;CYPRO-MINOAN SIGN CM098;Lo;0;L;;;;;N;;;;; +12FE4;CYPRO-MINOAN SIGN CM099;Lo;0;L;;;;;N;;;;; +12FE5;CYPRO-MINOAN SIGN CM100;Lo;0;L;;;;;N;;;;; +12FE6;CYPRO-MINOAN SIGN CM101;Lo;0;L;;;;;N;;;;; +12FE7;CYPRO-MINOAN SIGN CM102;Lo;0;L;;;;;N;;;;; +12FE8;CYPRO-MINOAN SIGN CM103;Lo;0;L;;;;;N;;;;; +12FE9;CYPRO-MINOAN SIGN CM104;Lo;0;L;;;;;N;;;;; +12FEA;CYPRO-MINOAN SIGN CM105;Lo;0;L;;;;;N;;;;; +12FEB;CYPRO-MINOAN SIGN CM107;Lo;0;L;;;;;N;;;;; +12FEC;CYPRO-MINOAN SIGN CM108;Lo;0;L;;;;;N;;;;; +12FED;CYPRO-MINOAN SIGN CM109;Lo;0;L;;;;;N;;;;; +12FEE;CYPRO-MINOAN SIGN CM110;Lo;0;L;;;;;N;;;;; +12FEF;CYPRO-MINOAN SIGN CM112;Lo;0;L;;;;;N;;;;; +12FF0;CYPRO-MINOAN SIGN CM114;Lo;0;L;;;;;N;;;;; +12FF1;CYPRO-MINOAN SIGN CM301;Po;0;L;;;;;N;;;;; +12FF2;CYPRO-MINOAN SIGN CM302;Po;0;L;;;;;N;;;;; 13000;EGYPTIAN HIEROGLYPH A001;Lo;0;L;;;;;N;;;;; 13001;EGYPTIAN HIEROGLYPH A002;Lo;0;L;;;;;N;;;;; 13002;EGYPTIAN HIEROGLYPH A003;Lo;0;L;;;;;N;;;;; @@ -24835,6 +25244,95 @@ FFFD;REPLACEMENT CHARACTER;So;0;ON;;;;;N;;;;; 16A69;MRO DIGIT NINE;Nd;0;L;;9;9;9;N;;;;; 16A6E;MRO DANDA;Po;0;L;;;;;N;;;;; 16A6F;MRO DOUBLE DANDA;Po;0;L;;;;;N;;;;; +16A70;TANGSA LETTER OZ;Lo;0;L;;;;;N;;;;; +16A71;TANGSA LETTER OC;Lo;0;L;;;;;N;;;;; +16A72;TANGSA LETTER OQ;Lo;0;L;;;;;N;;;;; +16A73;TANGSA LETTER OX;Lo;0;L;;;;;N;;;;; +16A74;TANGSA LETTER AZ;Lo;0;L;;;;;N;;;;; +16A75;TANGSA LETTER AC;Lo;0;L;;;;;N;;;;; +16A76;TANGSA LETTER AQ;Lo;0;L;;;;;N;;;;; +16A77;TANGSA LETTER AX;Lo;0;L;;;;;N;;;;; +16A78;TANGSA LETTER VZ;Lo;0;L;;;;;N;;;;; +16A79;TANGSA LETTER VC;Lo;0;L;;;;;N;;;;; +16A7A;TANGSA LETTER VQ;Lo;0;L;;;;;N;;;;; +16A7B;TANGSA LETTER VX;Lo;0;L;;;;;N;;;;; +16A7C;TANGSA LETTER EZ;Lo;0;L;;;;;N;;;;; +16A7D;TANGSA LETTER EC;Lo;0;L;;;;;N;;;;; +16A7E;TANGSA LETTER EQ;Lo;0;L;;;;;N;;;;; +16A7F;TANGSA LETTER EX;Lo;0;L;;;;;N;;;;; +16A80;TANGSA LETTER IZ;Lo;0;L;;;;;N;;;;; +16A81;TANGSA LETTER IC;Lo;0;L;;;;;N;;;;; +16A82;TANGSA LETTER IQ;Lo;0;L;;;;;N;;;;; +16A83;TANGSA LETTER IX;Lo;0;L;;;;;N;;;;; +16A84;TANGSA LETTER UZ;Lo;0;L;;;;;N;;;;; +16A85;TANGSA LETTER UC;Lo;0;L;;;;;N;;;;; +16A86;TANGSA LETTER UQ;Lo;0;L;;;;;N;;;;; +16A87;TANGSA LETTER UX;Lo;0;L;;;;;N;;;;; +16A88;TANGSA LETTER AWZ;Lo;0;L;;;;;N;;;;; +16A89;TANGSA LETTER AWC;Lo;0;L;;;;;N;;;;; +16A8A;TANGSA LETTER AWQ;Lo;0;L;;;;;N;;;;; +16A8B;TANGSA LETTER AWX;Lo;0;L;;;;;N;;;;; +16A8C;TANGSA LETTER UIZ;Lo;0;L;;;;;N;;;;; +16A8D;TANGSA LETTER UIC;Lo;0;L;;;;;N;;;;; +16A8E;TANGSA LETTER UIQ;Lo;0;L;;;;;N;;;;; +16A8F;TANGSA LETTER UIX;Lo;0;L;;;;;N;;;;; +16A90;TANGSA LETTER FINAL NG;Lo;0;L;;;;;N;;;;; +16A91;TANGSA LETTER LONG UEX;Lo;0;L;;;;;N;;;;; +16A92;TANGSA LETTER SHORT UEZ;Lo;0;L;;;;;N;;;;; +16A93;TANGSA LETTER SHORT AWX;Lo;0;L;;;;;N;;;;; +16A94;TANGSA LETTER UEC;Lo;0;L;;;;;N;;;;; +16A95;TANGSA LETTER UEZ;Lo;0;L;;;;;N;;;;; +16A96;TANGSA LETTER UEQ;Lo;0;L;;;;;N;;;;; +16A97;TANGSA LETTER UEX;Lo;0;L;;;;;N;;;;; +16A98;TANGSA LETTER UIUZ;Lo;0;L;;;;;N;;;;; +16A99;TANGSA LETTER UIUC;Lo;0;L;;;;;N;;;;; +16A9A;TANGSA LETTER UIUQ;Lo;0;L;;;;;N;;;;; +16A9B;TANGSA LETTER UIUX;Lo;0;L;;;;;N;;;;; +16A9C;TANGSA LETTER MZ;Lo;0;L;;;;;N;;;;; +16A9D;TANGSA LETTER MC;Lo;0;L;;;;;N;;;;; +16A9E;TANGSA LETTER MQ;Lo;0;L;;;;;N;;;;; +16A9F;TANGSA LETTER MX;Lo;0;L;;;;;N;;;;; +16AA0;TANGSA LETTER KA;Lo;0;L;;;;;N;;;;; +16AA1;TANGSA LETTER KHA;Lo;0;L;;;;;N;;;;; +16AA2;TANGSA LETTER GA;Lo;0;L;;;;;N;;;;; +16AA3;TANGSA LETTER NGA;Lo;0;L;;;;;N;;;;; +16AA4;TANGSA LETTER SA;Lo;0;L;;;;;N;;;;; +16AA5;TANGSA LETTER YA;Lo;0;L;;;;;N;;;;; +16AA6;TANGSA LETTER WA;Lo;0;L;;;;;N;;;;; +16AA7;TANGSA LETTER PA;Lo;0;L;;;;;N;;;;; +16AA8;TANGSA LETTER NYA;Lo;0;L;;;;;N;;;;; +16AA9;TANGSA LETTER PHA;Lo;0;L;;;;;N;;;;; +16AAA;TANGSA LETTER BA;Lo;0;L;;;;;N;;;;; +16AAB;TANGSA LETTER MA;Lo;0;L;;;;;N;;;;; +16AAC;TANGSA LETTER NA;Lo;0;L;;;;;N;;;;; +16AAD;TANGSA LETTER HA;Lo;0;L;;;;;N;;;;; +16AAE;TANGSA LETTER LA;Lo;0;L;;;;;N;;;;; +16AAF;TANGSA LETTER HTA;Lo;0;L;;;;;N;;;;; +16AB0;TANGSA LETTER TA;Lo;0;L;;;;;N;;;;; +16AB1;TANGSA LETTER DA;Lo;0;L;;;;;N;;;;; +16AB2;TANGSA LETTER RA;Lo;0;L;;;;;N;;;;; +16AB3;TANGSA LETTER NHA;Lo;0;L;;;;;N;;;;; +16AB4;TANGSA LETTER SHA;Lo;0;L;;;;;N;;;;; +16AB5;TANGSA LETTER CA;Lo;0;L;;;;;N;;;;; +16AB6;TANGSA LETTER TSA;Lo;0;L;;;;;N;;;;; +16AB7;TANGSA LETTER GHA;Lo;0;L;;;;;N;;;;; +16AB8;TANGSA LETTER HTTA;Lo;0;L;;;;;N;;;;; +16AB9;TANGSA LETTER THA;Lo;0;L;;;;;N;;;;; +16ABA;TANGSA LETTER XA;Lo;0;L;;;;;N;;;;; +16ABB;TANGSA LETTER FA;Lo;0;L;;;;;N;;;;; +16ABC;TANGSA LETTER DHA;Lo;0;L;;;;;N;;;;; +16ABD;TANGSA LETTER CHA;Lo;0;L;;;;;N;;;;; +16ABE;TANGSA LETTER ZA;Lo;0;L;;;;;N;;;;; +16AC0;TANGSA DIGIT ZERO;Nd;0;L;;0;0;0;N;;;;; +16AC1;TANGSA DIGIT ONE;Nd;0;L;;1;1;1;N;;;;; +16AC2;TANGSA DIGIT TWO;Nd;0;L;;2;2;2;N;;;;; +16AC3;TANGSA DIGIT THREE;Nd;0;L;;3;3;3;N;;;;; +16AC4;TANGSA DIGIT FOUR;Nd;0;L;;4;4;4;N;;;;; +16AC5;TANGSA DIGIT FIVE;Nd;0;L;;5;5;5;N;;;;; +16AC6;TANGSA DIGIT SIX;Nd;0;L;;6;6;6;N;;;;; +16AC7;TANGSA DIGIT SEVEN;Nd;0;L;;7;7;7;N;;;;; +16AC8;TANGSA DIGIT EIGHT;Nd;0;L;;8;8;8;N;;;;; +16AC9;TANGSA DIGIT NINE;Nd;0;L;;9;9;9;N;;;;; 16AD0;BASSA VAH LETTER ENNI;Lo;0;L;;;;;N;;;;; 16AD1;BASSA VAH LETTER KA;Lo;0;L;;;;;N;;;;; 16AD2;BASSA VAH LETTER SE;Lo;0;L;;;;;N;;;;; @@ -26487,6 +26985,19 @@ FFFD;REPLACEMENT CHARACTER;So;0;ON;;;;;N;;;;; 18CD5;KHITAN SMALL SCRIPT CHARACTER-18CD5;Lo;0;L;;;;;N;;;;; 18D00;;Lo;0;L;;;;;N;;;;; 18D08;;Lo;0;L;;;;;N;;;;; +1AFF0;KATAKANA LETTER MINNAN TONE-2;Lm;0;L;;;;;N;;;;; +1AFF1;KATAKANA LETTER MINNAN TONE-3;Lm;0;L;;;;;N;;;;; +1AFF2;KATAKANA LETTER MINNAN TONE-4;Lm;0;L;;;;;N;;;;; +1AFF3;KATAKANA LETTER MINNAN TONE-5;Lm;0;L;;;;;N;;;;; +1AFF5;KATAKANA LETTER MINNAN TONE-7;Lm;0;L;;;;;N;;;;; +1AFF6;KATAKANA LETTER MINNAN TONE-8;Lm;0;L;;;;;N;;;;; +1AFF7;KATAKANA LETTER MINNAN NASALIZED TONE-1;Lm;0;L;;;;;N;;;;; +1AFF8;KATAKANA LETTER MINNAN NASALIZED TONE-2;Lm;0;L;;;;;N;;;;; +1AFF9;KATAKANA LETTER MINNAN NASALIZED TONE-3;Lm;0;L;;;;;N;;;;; +1AFFA;KATAKANA LETTER MINNAN NASALIZED TONE-4;Lm;0;L;;;;;N;;;;; +1AFFB;KATAKANA LETTER MINNAN NASALIZED TONE-5;Lm;0;L;;;;;N;;;;; +1AFFD;KATAKANA LETTER MINNAN NASALIZED TONE-7;Lm;0;L;;;;;N;;;;; +1AFFE;KATAKANA LETTER MINNAN NASALIZED TONE-8;Lm;0;L;;;;;N;;;;; 1B000;KATAKANA LETTER ARCHAIC E;Lo;0;L;;;;;N;;;;; 1B001;HIRAGANA LETTER ARCHAIC YE;Lo;0;L;;;;;N;;;;; 1B002;HENTAIGANA LETTER A-1;Lo;0;L;;;;;N;;;;; @@ -26774,6 +27285,10 @@ FFFD;REPLACEMENT CHARACTER;So;0;ON;;;;;N;;;;; 1B11C;HENTAIGANA LETTER WO-7;Lo;0;L;;;;;N;;;;; 1B11D;HENTAIGANA LETTER N-MU-MO-1;Lo;0;L;;;;;N;;;;; 1B11E;HENTAIGANA LETTER N-MU-MO-2;Lo;0;L;;;;;N;;;;; +1B11F;HIRAGANA LETTER ARCHAIC WU;Lo;0;L;;;;;N;;;;; +1B120;KATAKANA LETTER ARCHAIC YI;Lo;0;L;;;;;N;;;;; +1B121;KATAKANA LETTER ARCHAIC YE;Lo;0;L;;;;;N;;;;; +1B122;KATAKANA LETTER ARCHAIC WU;Lo;0;L;;;;;N;;;;; 1B150;HIRAGANA LETTER SMALL WI;Lo;0;L;;;;;N;;;;; 1B151;HIRAGANA LETTER SMALL WE;Lo;0;L;;;;;N;;;;; 1B152;HIRAGANA LETTER SMALL WO;Lo;0;L;;;;;N;;;;; @@ -27324,6 +27839,191 @@ FFFD;REPLACEMENT CHARACTER;So;0;ON;;;;;N;;;;; 1BCA1;SHORTHAND FORMAT CONTINUING OVERLAP;Cf;0;BN;;;;;N;;;;; 1BCA2;SHORTHAND FORMAT DOWN STEP;Cf;0;BN;;;;;N;;;;; 1BCA3;SHORTHAND FORMAT UP STEP;Cf;0;BN;;;;;N;;;;; +1CF00;ZNAMENNY COMBINING MARK GORAZDO NIZKO S KRYZHEM ON LEFT;Mn;0;NSM;;;;;N;;;;; +1CF01;ZNAMENNY COMBINING MARK NIZKO S KRYZHEM ON LEFT;Mn;0;NSM;;;;;N;;;;; +1CF02;ZNAMENNY COMBINING MARK TSATA ON LEFT;Mn;0;NSM;;;;;N;;;;; +1CF03;ZNAMENNY COMBINING MARK GORAZDO NIZKO ON LEFT;Mn;0;NSM;;;;;N;;;;; +1CF04;ZNAMENNY COMBINING MARK NIZKO ON LEFT;Mn;0;NSM;;;;;N;;;;; +1CF05;ZNAMENNY COMBINING MARK SREDNE ON LEFT;Mn;0;NSM;;;;;N;;;;; +1CF06;ZNAMENNY COMBINING MARK MALO POVYSHE ON LEFT;Mn;0;NSM;;;;;N;;;;; +1CF07;ZNAMENNY COMBINING MARK POVYSHE ON LEFT;Mn;0;NSM;;;;;N;;;;; +1CF08;ZNAMENNY COMBINING MARK VYSOKO ON LEFT;Mn;0;NSM;;;;;N;;;;; +1CF09;ZNAMENNY COMBINING MARK MALO POVYSHE S KHOKHLOM ON LEFT;Mn;0;NSM;;;;;N;;;;; +1CF0A;ZNAMENNY COMBINING MARK POVYSHE S KHOKHLOM ON LEFT;Mn;0;NSM;;;;;N;;;;; +1CF0B;ZNAMENNY COMBINING MARK VYSOKO S KHOKHLOM ON LEFT;Mn;0;NSM;;;;;N;;;;; +1CF0C;ZNAMENNY COMBINING MARK GORAZDO NIZKO S KRYZHEM ON RIGHT;Mn;0;NSM;;;;;N;;;;; +1CF0D;ZNAMENNY COMBINING MARK NIZKO S KRYZHEM ON RIGHT;Mn;0;NSM;;;;;N;;;;; +1CF0E;ZNAMENNY COMBINING MARK TSATA ON RIGHT;Mn;0;NSM;;;;;N;;;;; +1CF0F;ZNAMENNY COMBINING MARK GORAZDO NIZKO ON RIGHT;Mn;0;NSM;;;;;N;;;;; +1CF10;ZNAMENNY COMBINING MARK NIZKO ON RIGHT;Mn;0;NSM;;;;;N;;;;; +1CF11;ZNAMENNY COMBINING MARK SREDNE ON RIGHT;Mn;0;NSM;;;;;N;;;;; +1CF12;ZNAMENNY COMBINING MARK MALO POVYSHE ON RIGHT;Mn;0;NSM;;;;;N;;;;; +1CF13;ZNAMENNY COMBINING MARK POVYSHE ON RIGHT;Mn;0;NSM;;;;;N;;;;; +1CF14;ZNAMENNY COMBINING MARK VYSOKO ON RIGHT;Mn;0;NSM;;;;;N;;;;; +1CF15;ZNAMENNY COMBINING MARK MALO POVYSHE S KHOKHLOM ON RIGHT;Mn;0;NSM;;;;;N;;;;; +1CF16;ZNAMENNY COMBINING MARK POVYSHE S KHOKHLOM ON RIGHT;Mn;0;NSM;;;;;N;;;;; +1CF17;ZNAMENNY COMBINING MARK VYSOKO S KHOKHLOM ON RIGHT;Mn;0;NSM;;;;;N;;;;; +1CF18;ZNAMENNY COMBINING MARK TSATA S KRYZHEM;Mn;0;NSM;;;;;N;;;;; +1CF19;ZNAMENNY COMBINING MARK MALO POVYSHE S KRYZHEM;Mn;0;NSM;;;;;N;;;;; +1CF1A;ZNAMENNY COMBINING MARK STRANNO MALO POVYSHE;Mn;0;NSM;;;;;N;;;;; +1CF1B;ZNAMENNY COMBINING MARK POVYSHE S KRYZHEM;Mn;0;NSM;;;;;N;;;;; +1CF1C;ZNAMENNY COMBINING MARK POVYSHE STRANNO;Mn;0;NSM;;;;;N;;;;; +1CF1D;ZNAMENNY COMBINING MARK VYSOKO S KRYZHEM;Mn;0;NSM;;;;;N;;;;; +1CF1E;ZNAMENNY COMBINING MARK MALO POVYSHE STRANNO;Mn;0;NSM;;;;;N;;;;; +1CF1F;ZNAMENNY COMBINING MARK GORAZDO VYSOKO;Mn;0;NSM;;;;;N;;;;; +1CF20;ZNAMENNY COMBINING MARK ZELO;Mn;0;NSM;;;;;N;;;;; +1CF21;ZNAMENNY COMBINING MARK ON;Mn;0;NSM;;;;;N;;;;; +1CF22;ZNAMENNY COMBINING MARK RAVNO;Mn;0;NSM;;;;;N;;;;; +1CF23;ZNAMENNY COMBINING MARK TIKHAYA;Mn;0;NSM;;;;;N;;;;; +1CF24;ZNAMENNY COMBINING MARK BORZAYA;Mn;0;NSM;;;;;N;;;;; +1CF25;ZNAMENNY COMBINING MARK UDARKA;Mn;0;NSM;;;;;N;;;;; +1CF26;ZNAMENNY COMBINING MARK PODVERTKA;Mn;0;NSM;;;;;N;;;;; +1CF27;ZNAMENNY COMBINING MARK LOMKA;Mn;0;NSM;;;;;N;;;;; +1CF28;ZNAMENNY COMBINING MARK KUPNAYA;Mn;0;NSM;;;;;N;;;;; +1CF29;ZNAMENNY COMBINING MARK KACHKA;Mn;0;NSM;;;;;N;;;;; +1CF2A;ZNAMENNY COMBINING MARK ZEVOK;Mn;0;NSM;;;;;N;;;;; +1CF2B;ZNAMENNY COMBINING MARK SKOBA;Mn;0;NSM;;;;;N;;;;; +1CF2C;ZNAMENNY COMBINING MARK RAZSEKA;Mn;0;NSM;;;;;N;;;;; +1CF2D;ZNAMENNY COMBINING MARK KRYZH ON LEFT;Mn;0;NSM;;;;;N;;;;; +1CF30;ZNAMENNY COMBINING TONAL RANGE MARK MRACHNO;Mn;0;NSM;;;;;N;;;;; +1CF31;ZNAMENNY COMBINING TONAL RANGE MARK SVETLO;Mn;0;NSM;;;;;N;;;;; +1CF32;ZNAMENNY COMBINING TONAL RANGE MARK TRESVETLO;Mn;0;NSM;;;;;N;;;;; +1CF33;ZNAMENNY COMBINING MARK ZADERZHKA;Mn;0;NSM;;;;;N;;;;; +1CF34;ZNAMENNY COMBINING MARK DEMESTVENNY ZADERZHKA;Mn;0;NSM;;;;;N;;;;; +1CF35;ZNAMENNY COMBINING MARK OTSECHKA;Mn;0;NSM;;;;;N;;;;; +1CF36;ZNAMENNY COMBINING MARK PODCHASHIE;Mn;0;NSM;;;;;N;;;;; +1CF37;ZNAMENNY COMBINING MARK PODCHASHIE WITH VERTICAL STROKE;Mn;0;NSM;;;;;N;;;;; +1CF38;ZNAMENNY COMBINING MARK CHASHKA;Mn;0;NSM;;;;;N;;;;; +1CF39;ZNAMENNY COMBINING MARK CHASHKA POLNAYA;Mn;0;NSM;;;;;N;;;;; +1CF3A;ZNAMENNY COMBINING MARK OBLACHKO;Mn;0;NSM;;;;;N;;;;; +1CF3B;ZNAMENNY COMBINING MARK SOROCHYA NOZHKA;Mn;0;NSM;;;;;N;;;;; +1CF3C;ZNAMENNY COMBINING MARK TOCHKA;Mn;0;NSM;;;;;N;;;;; +1CF3D;ZNAMENNY COMBINING MARK DVOETOCHIE;Mn;0;NSM;;;;;N;;;;; +1CF3E;ZNAMENNY COMBINING ATTACHING VERTICAL OMET;Mn;0;NSM;;;;;N;;;;; +1CF3F;ZNAMENNY COMBINING MARK CURVED OMET;Mn;0;NSM;;;;;N;;;;; +1CF40;ZNAMENNY COMBINING MARK KRYZH;Mn;0;NSM;;;;;N;;;;; +1CF41;ZNAMENNY COMBINING LOWER TONAL RANGE INDICATOR;Mn;0;NSM;;;;;N;;;;; +1CF42;ZNAMENNY PRIZNAK MODIFIER LEVEL-2;Mn;0;NSM;;;;;N;;;;; +1CF43;ZNAMENNY PRIZNAK MODIFIER LEVEL-3;Mn;0;NSM;;;;;N;;;;; +1CF44;ZNAMENNY PRIZNAK MODIFIER DIRECTION FLIP;Mn;0;NSM;;;;;N;;;;; +1CF45;ZNAMENNY PRIZNAK MODIFIER KRYZH;Mn;0;NSM;;;;;N;;;;; +1CF46;ZNAMENNY PRIZNAK MODIFIER ROG;Mn;0;NSM;;;;;N;;;;; +1CF50;ZNAMENNY NEUME KRYUK;So;0;L;;;;;N;;;;; +1CF51;ZNAMENNY NEUME KRYUK TIKHY;So;0;L;;;;;N;;;;; +1CF52;ZNAMENNY NEUME PARAKLIT;So;0;L;;;;;N;;;;; +1CF53;ZNAMENNY NEUME DVA V CHELNU;So;0;L;;;;;N;;;;; +1CF54;ZNAMENNY NEUME KLYUCH;So;0;L;;;;;N;;;;; +1CF55;ZNAMENNY NEUME ZANOZHEK;So;0;L;;;;;N;;;;; +1CF56;ZNAMENNY NEUME STOPITSA;So;0;L;;;;;N;;;;; +1CF57;ZNAMENNY NEUME STOPITSA S OCHKOM;So;0;L;;;;;N;;;;; +1CF58;ZNAMENNY NEUME PEREVODKA;So;0;L;;;;;N;;;;; +1CF59;ZNAMENNY NEUME PEREVODKA NEPOSTOYANNAYA;So;0;L;;;;;N;;;;; +1CF5A;ZNAMENNY NEUME STOPITSA WITH SOROCHYA NOZHKA;So;0;L;;;;;N;;;;; +1CF5B;ZNAMENNY NEUME CHELYUSTKA;So;0;L;;;;;N;;;;; +1CF5C;ZNAMENNY NEUME PALKA;So;0;L;;;;;N;;;;; +1CF5D;ZNAMENNY NEUME ZAPYATAYA;So;0;L;;;;;N;;;;; +1CF5E;ZNAMENNY NEUME GOLUBCHIK BORZY;So;0;L;;;;;N;;;;; +1CF5F;ZNAMENNY NEUME GOLUBCHIK TIKHY;So;0;L;;;;;N;;;;; +1CF60;ZNAMENNY NEUME GOLUBCHIK MRACHNY;So;0;L;;;;;N;;;;; +1CF61;ZNAMENNY NEUME GOLUBCHIK SVETLY;So;0;L;;;;;N;;;;; +1CF62;ZNAMENNY NEUME GOLUBCHIK TRESVETLY;So;0;L;;;;;N;;;;; +1CF63;ZNAMENNY NEUME VRAKHIYA PROSTAYA;So;0;L;;;;;N;;;;; +1CF64;ZNAMENNY NEUME VRAKHIYA MRACHNAYA;So;0;L;;;;;N;;;;; +1CF65;ZNAMENNY NEUME VRAKHIYA SVETLAYA;So;0;L;;;;;N;;;;; +1CF66;ZNAMENNY NEUME VRAKHIYA TRESVETLAYA;So;0;L;;;;;N;;;;; +1CF67;ZNAMENNY NEUME VRAKHIYA KLYUCHEVAYA PROSTAYA;So;0;L;;;;;N;;;;; +1CF68;ZNAMENNY NEUME VRAKHIYA KLYUCHEVAYA MRACHNAYA;So;0;L;;;;;N;;;;; +1CF69;ZNAMENNY NEUME VRAKHIYA KLYUCHEVAYA SVETLAYA;So;0;L;;;;;N;;;;; +1CF6A;ZNAMENNY NEUME VRAKHIYA KLYUCHEVAYA TRESVETLAYA;So;0;L;;;;;N;;;;; +1CF6B;ZNAMENNY NEUME DOUBLE ZAPYATAYA;So;0;L;;;;;N;;;;; +1CF6C;ZNAMENNY NEUME REVERSED CHELYUSTKA;So;0;L;;;;;N;;;;; +1CF6D;ZNAMENNY NEUME DERBITSA;So;0;L;;;;;N;;;;; +1CF6E;ZNAMENNY NEUME KHAMILO;So;0;L;;;;;N;;;;; +1CF6F;ZNAMENNY NEUME CHASHKA;So;0;L;;;;;N;;;;; +1CF70;ZNAMENNY NEUME PODCHASHIE;So;0;L;;;;;N;;;;; +1CF71;ZNAMENNY NEUME SKAMEYTSA MRACHNAYA;So;0;L;;;;;N;;;;; +1CF72;ZNAMENNY NEUME SKAMEYTSA SVETLAYA;So;0;L;;;;;N;;;;; +1CF73;ZNAMENNY NEUME SKAMEYTSA TRESVETLAYA;So;0;L;;;;;N;;;;; +1CF74;ZNAMENNY NEUME SKAMEYTSA TIKHAYA;So;0;L;;;;;N;;;;; +1CF75;ZNAMENNY NEUME DEMESTVENNY KLYUCH;So;0;L;;;;;N;;;;; +1CF76;ZNAMENNY NEUME SKAMEYTSA KLYUCHEVAYA SVETLAYA;So;0;L;;;;;N;;;;; +1CF77;ZNAMENNY NEUME SKAMEYTSA KLYUCHENEPOSTOYANNAYA;So;0;L;;;;;N;;;;; +1CF78;ZNAMENNY NEUME SKAMEYTSA KLYUCHEVAYA TIKHAYA;So;0;L;;;;;N;;;;; +1CF79;ZNAMENNY NEUME SKAMEYTSA DVOECHELNAYA PROSTAYA;So;0;L;;;;;N;;;;; +1CF7A;ZNAMENNY NEUME SKAMEYTSA DVOECHELNAYA SVETLAYA;So;0;L;;;;;N;;;;; +1CF7B;ZNAMENNY NEUME SKAMEYTSA DVOECHELNAYA NEPOSTOYANNAYA;So;0;L;;;;;N;;;;; +1CF7C;ZNAMENNY NEUME SKAMEYTSA DVOECHELNAYA KLYUCHEVAYA;So;0;L;;;;;N;;;;; +1CF7D;ZNAMENNY NEUME SLOZHITIE;So;0;L;;;;;N;;;;; +1CF7E;ZNAMENNY NEUME SLOZHITIE S ZAPYATOY;So;0;L;;;;;N;;;;; +1CF7F;ZNAMENNY NEUME SLOZHITIE ZAKRYTOE;So;0;L;;;;;N;;;;; +1CF80;ZNAMENNY NEUME SLOZHITIE S KRYZHEM;So;0;L;;;;;N;;;;; +1CF81;ZNAMENNY NEUME KRYZH;So;0;L;;;;;N;;;;; +1CF82;ZNAMENNY NEUME ROG;So;0;L;;;;;N;;;;; +1CF83;ZNAMENNY NEUME FITA;So;0;L;;;;;N;;;;; +1CF84;ZNAMENNY NEUME KOBYLA;So;0;L;;;;;N;;;;; +1CF85;ZNAMENNY NEUME ZMEYTSA;So;0;L;;;;;N;;;;; +1CF86;ZNAMENNY NEUME STATYA;So;0;L;;;;;N;;;;; +1CF87;ZNAMENNY NEUME STATYA S ZAPYATOY;So;0;L;;;;;N;;;;; +1CF88;ZNAMENNY NEUME STATYA S KRYZHEM;So;0;L;;;;;N;;;;; +1CF89;ZNAMENNY NEUME STATYA S ZAPYATOY I KRYZHEM;So;0;L;;;;;N;;;;; +1CF8A;ZNAMENNY NEUME STATYA S KRYZHEM I ZAPYATOY;So;0;L;;;;;N;;;;; +1CF8B;ZNAMENNY NEUME STATYA ZAKRYTAYA;So;0;L;;;;;N;;;;; +1CF8C;ZNAMENNY NEUME STATYA ZAKRYTAYA S ZAPYATOY;So;0;L;;;;;N;;;;; +1CF8D;ZNAMENNY NEUME STATYA S ROGOM;So;0;L;;;;;N;;;;; +1CF8E;ZNAMENNY NEUME STATYA S DVUMYA ZAPYATYMI;So;0;L;;;;;N;;;;; +1CF8F;ZNAMENNY NEUME STATYA S ZAPYATOY I PODCHASHIEM;So;0;L;;;;;N;;;;; +1CF90;ZNAMENNY NEUME POLKULIZMY;So;0;L;;;;;N;;;;; +1CF91;ZNAMENNY NEUME STATYA NEPOSTOYANNAYA;So;0;L;;;;;N;;;;; +1CF92;ZNAMENNY NEUME STRELA PROSTAYA;So;0;L;;;;;N;;;;; +1CF93;ZNAMENNY NEUME STRELA MRACHNOTIKHAYA;So;0;L;;;;;N;;;;; +1CF94;ZNAMENNY NEUME STRELA KRYZHEVAYA;So;0;L;;;;;N;;;;; +1CF95;ZNAMENNY NEUME STRELA POLUPOVODNAYA;So;0;L;;;;;N;;;;; +1CF96;ZNAMENNY NEUME STRELA POVODNAYA;So;0;L;;;;;N;;;;; +1CF97;ZNAMENNY NEUME STRELA NEPOSTOYANNAYA;So;0;L;;;;;N;;;;; +1CF98;ZNAMENNY NEUME STRELA KLYUCHEPOVODNAYA;So;0;L;;;;;N;;;;; +1CF99;ZNAMENNY NEUME STRELA KLYUCHENEPOSTOYANNAYA;So;0;L;;;;;N;;;;; +1CF9A;ZNAMENNY NEUME STRELA TIKHAYA PUTNAYA;So;0;L;;;;;N;;;;; +1CF9B;ZNAMENNY NEUME STRELA DVOECHELNAYA;So;0;L;;;;;N;;;;; +1CF9C;ZNAMENNY NEUME STRELA DVOECHELNOKRYZHEVAYA;So;0;L;;;;;N;;;;; +1CF9D;ZNAMENNY NEUME STRELA DVOECHELNOPOVODNAYA;So;0;L;;;;;N;;;;; +1CF9E;ZNAMENNY NEUME STRELA DVOECHELNAYA KLYUCHEVAYA;So;0;L;;;;;N;;;;; +1CF9F;ZNAMENNY NEUME STRELA DVOECHELNOPOVODNAYA KLYUCHEVAYA;So;0;L;;;;;N;;;;; +1CFA0;ZNAMENNY NEUME STRELA GROMNAYA WITH SINGLE ZAPYATAYA;So;0;L;;;;;N;;;;; +1CFA1;ZNAMENNY NEUME STRELA GROMOPOVODNAYA WITH SINGLE ZAPYATAYA;So;0;L;;;;;N;;;;; +1CFA2;ZNAMENNY NEUME STRELA GROMNAYA;So;0;L;;;;;N;;;;; +1CFA3;ZNAMENNY NEUME STRELA GROMOPOVODNAYA;So;0;L;;;;;N;;;;; +1CFA4;ZNAMENNY NEUME STRELA GROMOPOVODNAYA WITH DOUBLE ZAPYATAYA;So;0;L;;;;;N;;;;; +1CFA5;ZNAMENNY NEUME STRELA GROMOKRYZHEVAYA;So;0;L;;;;;N;;;;; +1CFA6;ZNAMENNY NEUME STRELA GROMOKRYZHEVAYA POVODNAYA;So;0;L;;;;;N;;;;; +1CFA7;ZNAMENNY NEUME MECHIK;So;0;L;;;;;N;;;;; +1CFA8;ZNAMENNY NEUME MECHIK POVODNY;So;0;L;;;;;N;;;;; +1CFA9;ZNAMENNY NEUME MECHIK KLYUCHEVOY;So;0;L;;;;;N;;;;; +1CFAA;ZNAMENNY NEUME MECHIK KLYUCHEPOVODNY;So;0;L;;;;;N;;;;; +1CFAB;ZNAMENNY NEUME MECHIK KLYUCHENEPOSTOYANNY;So;0;L;;;;;N;;;;; +1CFAC;ZNAMENNY NEUME STRELA TRYASOGLASNAYA;So;0;L;;;;;N;;;;; +1CFAD;ZNAMENNY NEUME STRELA TRYASOPOVODNAYA;So;0;L;;;;;N;;;;; +1CFAE;ZNAMENNY NEUME STRELA TRYASOSTRELNAYA;So;0;L;;;;;N;;;;; +1CFAF;ZNAMENNY NEUME OSOKA;So;0;L;;;;;N;;;;; +1CFB0;ZNAMENNY NEUME OSOKA SVETLAYA;So;0;L;;;;;N;;;;; +1CFB1;ZNAMENNY NEUME OSOKA TRESVETLAYA;So;0;L;;;;;N;;;;; +1CFB2;ZNAMENNY NEUME OSOKA KRYUKOVAYA SVETLAYA;So;0;L;;;;;N;;;;; +1CFB3;ZNAMENNY NEUME OSOKA KLYUCHEVAYA SVETLAYA;So;0;L;;;;;N;;;;; +1CFB4;ZNAMENNY NEUME OSOKA KLYUCHEVAYA NEPOSTOYANNAYA;So;0;L;;;;;N;;;;; +1CFB5;ZNAMENNY NEUME STRELA KRYUKOVAYA;So;0;L;;;;;N;;;;; +1CFB6;ZNAMENNY NEUME STRELA KRYUKOVAYA POVODNAYA;So;0;L;;;;;N;;;;; +1CFB7;ZNAMENNY NEUME STRELA KRYUKOVAYA GROMNAYA WITH SINGLE ZAPYATAYA;So;0;L;;;;;N;;;;; +1CFB8;ZNAMENNY NEUME STRELA KRYUKOVAYA GROMOPOVODNAYA WITH SINGLE ZAPYATAYA;So;0;L;;;;;N;;;;; +1CFB9;ZNAMENNY NEUME STRELA KRYUKOVAYA GROMNAYA;So;0;L;;;;;N;;;;; +1CFBA;ZNAMENNY NEUME STRELA KRYUKOVAYA GROMOPOVODNAYA;So;0;L;;;;;N;;;;; +1CFBB;ZNAMENNY NEUME STRELA KRYUKOVAYA GROMOPOVODNAYA WITH DOUBLE ZAPYATAYA;So;0;L;;;;;N;;;;; +1CFBC;ZNAMENNY NEUME STRELA KRYUKOVAYA GROMOKRYZHEVAYA;So;0;L;;;;;N;;;;; +1CFBD;ZNAMENNY NEUME STRELA KRYUKOVAYA GROMOKRYZHEVAYA POVODNAYA;So;0;L;;;;;N;;;;; +1CFBE;ZNAMENNY NEUME STRELA KRYUKOVAYA TRYASKA;So;0;L;;;;;N;;;;; +1CFBF;ZNAMENNY NEUME KUFISMA;So;0;L;;;;;N;;;;; +1CFC0;ZNAMENNY NEUME OBLAKO;So;0;L;;;;;N;;;;; +1CFC1;ZNAMENNY NEUME DUDA;So;0;L;;;;;N;;;;; +1CFC2;ZNAMENNY NEUME NEMKA;So;0;L;;;;;N;;;;; +1CFC3;ZNAMENNY NEUME PAUK;So;0;L;;;;;N;;;;; 1D000;BYZANTINE MUSICAL SYMBOL PSILI;So;0;L;;;;;N;;;;; 1D001;BYZANTINE MUSICAL SYMBOL DASEIA;So;0;L;;;;;N;;;;; 1D002;BYZANTINE MUSICAL SYMBOL PERISPOMENI;So;0;L;;;;;N;;;;; @@ -27801,6 +28501,8 @@ FFFD;REPLACEMENT CHARACTER;So;0;ON;;;;;N;;;;; 1D1E6;MUSICAL SYMBOL KIEVAN EIGHTH NOTE STEM DOWN;So;0;L;;;;;N;;;;; 1D1E7;MUSICAL SYMBOL KIEVAN EIGHTH NOTE STEM UP;So;0;L;;;;;N;;;;; 1D1E8;MUSICAL SYMBOL KIEVAN FLAT SIGN;So;0;L;;;;;N;;;;; +1D1E9;MUSICAL SYMBOL SORI;So;0;ON;;;;;N;;;;; +1D1EA;MUSICAL SYMBOL KORON;So;0;ON;;;;;N;;;;; 1D200;GREEK VOCAL NOTATION SYMBOL-1;So;0;ON;;;;;N;;;;; 1D201;GREEK VOCAL NOTATION SYMBOL-2;So;0;ON;;;;;N;;;;; 1D202;GREEK VOCAL NOTATION SYMBOL-3;So;0;ON;;;;;N;;;;; @@ -29671,6 +30373,37 @@ FFFD;REPLACEMENT CHARACTER;So;0;ON;;;;;N;;;;; 1DAAD;SIGNWRITING ROTATION MODIFIER-14;Mn;0;NSM;;;;;N;;;;; 1DAAE;SIGNWRITING ROTATION MODIFIER-15;Mn;0;NSM;;;;;N;;;;; 1DAAF;SIGNWRITING ROTATION MODIFIER-16;Mn;0;NSM;;;;;N;;;;; +1DF00;LATIN SMALL LETTER FENG DIGRAPH WITH TRILL;Ll;0;L;;;;;N;;;;; +1DF01;LATIN SMALL LETTER REVERSED SCRIPT G;Ll;0;L;;;;;N;;;;; +1DF02;LATIN LETTER SMALL CAPITAL TURNED G;Ll;0;L;;;;;N;;;;; +1DF03;LATIN SMALL LETTER REVERSED K;Ll;0;L;;;;;N;;;;; +1DF04;LATIN LETTER SMALL CAPITAL L WITH BELT;Ll;0;L;;;;;N;;;;; +1DF05;LATIN SMALL LETTER LEZH WITH RETROFLEX HOOK;Ll;0;L;;;;;N;;;;; +1DF06;LATIN SMALL LETTER TURNED Y WITH BELT;Ll;0;L;;;;;N;;;;; +1DF07;LATIN SMALL LETTER REVERSED ENG;Ll;0;L;;;;;N;;;;; +1DF08;LATIN SMALL LETTER TURNED R WITH LONG LEG AND RETROFLEX HOOK;Ll;0;L;;;;;N;;;;; +1DF09;LATIN SMALL LETTER T WITH HOOK AND RETROFLEX HOOK;Ll;0;L;;;;;N;;;;; +1DF0A;LATIN LETTER RETROFLEX CLICK WITH RETROFLEX HOOK;Lo;0;L;;;;;N;;;;; +1DF0B;LATIN SMALL LETTER ESH WITH DOUBLE BAR;Ll;0;L;;;;;N;;;;; +1DF0C;LATIN SMALL LETTER ESH WITH DOUBLE BAR AND CURL;Ll;0;L;;;;;N;;;;; +1DF0D;LATIN SMALL LETTER TURNED T WITH CURL;Ll;0;L;;;;;N;;;;; +1DF0E;LATIN LETTER INVERTED GLOTTAL STOP WITH CURL;Ll;0;L;;;;;N;;;;; +1DF0F;LATIN LETTER STRETCHED C WITH CURL;Ll;0;L;;;;;N;;;;; +1DF10;LATIN LETTER SMALL CAPITAL TURNED K;Ll;0;L;;;;;N;;;;; +1DF11;LATIN SMALL LETTER L WITH FISHHOOK;Ll;0;L;;;;;N;;;;; +1DF12;LATIN SMALL LETTER DEZH DIGRAPH WITH PALATAL HOOK;Ll;0;L;;;;;N;;;;; +1DF13;LATIN SMALL LETTER L WITH BELT AND PALATAL HOOK;Ll;0;L;;;;;N;;;;; +1DF14;LATIN SMALL LETTER ENG WITH PALATAL HOOK;Ll;0;L;;;;;N;;;;; +1DF15;LATIN SMALL LETTER TURNED R WITH PALATAL HOOK;Ll;0;L;;;;;N;;;;; +1DF16;LATIN SMALL LETTER R WITH FISHHOOK AND PALATAL HOOK;Ll;0;L;;;;;N;;;;; +1DF17;LATIN SMALL LETTER TESH DIGRAPH WITH PALATAL HOOK;Ll;0;L;;;;;N;;;;; +1DF18;LATIN SMALL LETTER EZH WITH PALATAL HOOK;Ll;0;L;;;;;N;;;;; +1DF19;LATIN SMALL LETTER DEZH DIGRAPH WITH RETROFLEX HOOK;Ll;0;L;;;;;N;;;;; +1DF1A;LATIN SMALL LETTER I WITH STROKE AND RETROFLEX HOOK;Ll;0;L;;;;;N;;;;; +1DF1B;LATIN SMALL LETTER O WITH RETROFLEX HOOK;Ll;0;L;;;;;N;;;;; +1DF1C;LATIN SMALL LETTER TESH DIGRAPH WITH RETROFLEX HOOK;Ll;0;L;;;;;N;;;;; +1DF1D;LATIN SMALL LETTER C WITH RETROFLEX HOOK;Ll;0;L;;;;;N;;;;; +1DF1E;LATIN SMALL LETTER S WITH CURL;Ll;0;L;;;;;N;;;;; 1E000;COMBINING GLAGOLITIC LETTER AZU;Mn;230;NSM;;;;;N;;;;; 1E001;COMBINING GLAGOLITIC LETTER BUKY;Mn;230;NSM;;;;;N;;;;; 1E002;COMBINING GLAGOLITIC LETTER VEDE;Mn;230;NSM;;;;;N;;;;; @@ -29780,6 +30513,37 @@ FFFD;REPLACEMENT CHARACTER;So;0;ON;;;;;N;;;;; 1E149;NYIAKENG PUACHUE HMONG DIGIT NINE;Nd;0;L;;9;9;9;N;;;;; 1E14E;NYIAKENG PUACHUE HMONG LOGOGRAM NYAJ;Lo;0;L;;;;;N;;;;; 1E14F;NYIAKENG PUACHUE HMONG CIRCLED CA;So;0;L;;;;;N;;;;; +1E290;TOTO LETTER PA;Lo;0;L;;;;;N;;;;; +1E291;TOTO LETTER BA;Lo;0;L;;;;;N;;;;; +1E292;TOTO LETTER TA;Lo;0;L;;;;;N;;;;; +1E293;TOTO LETTER DA;Lo;0;L;;;;;N;;;;; +1E294;TOTO LETTER KA;Lo;0;L;;;;;N;;;;; +1E295;TOTO LETTER GA;Lo;0;L;;;;;N;;;;; +1E296;TOTO LETTER MA;Lo;0;L;;;;;N;;;;; +1E297;TOTO LETTER NA;Lo;0;L;;;;;N;;;;; +1E298;TOTO LETTER NGA;Lo;0;L;;;;;N;;;;; +1E299;TOTO LETTER SA;Lo;0;L;;;;;N;;;;; +1E29A;TOTO LETTER CHA;Lo;0;L;;;;;N;;;;; +1E29B;TOTO LETTER YA;Lo;0;L;;;;;N;;;;; +1E29C;TOTO LETTER WA;Lo;0;L;;;;;N;;;;; +1E29D;TOTO LETTER JA;Lo;0;L;;;;;N;;;;; +1E29E;TOTO LETTER HA;Lo;0;L;;;;;N;;;;; +1E29F;TOTO LETTER RA;Lo;0;L;;;;;N;;;;; +1E2A0;TOTO LETTER LA;Lo;0;L;;;;;N;;;;; +1E2A1;TOTO LETTER I;Lo;0;L;;;;;N;;;;; +1E2A2;TOTO LETTER BREATHY I;Lo;0;L;;;;;N;;;;; +1E2A3;TOTO LETTER IU;Lo;0;L;;;;;N;;;;; +1E2A4;TOTO LETTER BREATHY IU;Lo;0;L;;;;;N;;;;; +1E2A5;TOTO LETTER U;Lo;0;L;;;;;N;;;;; +1E2A6;TOTO LETTER E;Lo;0;L;;;;;N;;;;; +1E2A7;TOTO LETTER BREATHY E;Lo;0;L;;;;;N;;;;; +1E2A8;TOTO LETTER EO;Lo;0;L;;;;;N;;;;; +1E2A9;TOTO LETTER BREATHY EO;Lo;0;L;;;;;N;;;;; +1E2AA;TOTO LETTER O;Lo;0;L;;;;;N;;;;; +1E2AB;TOTO LETTER AE;Lo;0;L;;;;;N;;;;; +1E2AC;TOTO LETTER BREATHY AE;Lo;0;L;;;;;N;;;;; +1E2AD;TOTO LETTER A;Lo;0;L;;;;;N;;;;; +1E2AE;TOTO SIGN RISING TONE;Mn;230;NSM;;;;;N;;;;; 1E2C0;WANCHO LETTER AA;Lo;0;L;;;;;N;;;;; 1E2C1;WANCHO LETTER A;Lo;0;L;;;;;N;;;;; 1E2C2;WANCHO LETTER BA;Lo;0;L;;;;;N;;;;; @@ -29839,6 +30603,34 @@ FFFD;REPLACEMENT CHARACTER;So;0;ON;;;;;N;;;;; 1E2F8;WANCHO DIGIT EIGHT;Nd;0;L;;8;8;8;N;;;;; 1E2F9;WANCHO DIGIT NINE;Nd;0;L;;9;9;9;N;;;;; 1E2FF;WANCHO NGUN SIGN;Sc;0;ET;;;;;N;;;;; +1E7E0;ETHIOPIC SYLLABLE HHYA;Lo;0;L;;;;;N;;;;; +1E7E1;ETHIOPIC SYLLABLE HHYU;Lo;0;L;;;;;N;;;;; +1E7E2;ETHIOPIC SYLLABLE HHYI;Lo;0;L;;;;;N;;;;; +1E7E3;ETHIOPIC SYLLABLE HHYAA;Lo;0;L;;;;;N;;;;; +1E7E4;ETHIOPIC SYLLABLE HHYEE;Lo;0;L;;;;;N;;;;; +1E7E5;ETHIOPIC SYLLABLE HHYE;Lo;0;L;;;;;N;;;;; +1E7E6;ETHIOPIC SYLLABLE HHYO;Lo;0;L;;;;;N;;;;; +1E7E8;ETHIOPIC SYLLABLE GURAGE HHWA;Lo;0;L;;;;;N;;;;; +1E7E9;ETHIOPIC SYLLABLE HHWI;Lo;0;L;;;;;N;;;;; +1E7EA;ETHIOPIC SYLLABLE HHWEE;Lo;0;L;;;;;N;;;;; +1E7EB;ETHIOPIC SYLLABLE HHWE;Lo;0;L;;;;;N;;;;; +1E7ED;ETHIOPIC SYLLABLE GURAGE MWI;Lo;0;L;;;;;N;;;;; +1E7EE;ETHIOPIC SYLLABLE GURAGE MWEE;Lo;0;L;;;;;N;;;;; +1E7F0;ETHIOPIC SYLLABLE GURAGE QWI;Lo;0;L;;;;;N;;;;; +1E7F1;ETHIOPIC SYLLABLE GURAGE QWEE;Lo;0;L;;;;;N;;;;; +1E7F2;ETHIOPIC SYLLABLE GURAGE QWE;Lo;0;L;;;;;N;;;;; +1E7F3;ETHIOPIC SYLLABLE GURAGE BWI;Lo;0;L;;;;;N;;;;; +1E7F4;ETHIOPIC SYLLABLE GURAGE BWEE;Lo;0;L;;;;;N;;;;; +1E7F5;ETHIOPIC SYLLABLE GURAGE KWI;Lo;0;L;;;;;N;;;;; +1E7F6;ETHIOPIC SYLLABLE GURAGE KWEE;Lo;0;L;;;;;N;;;;; +1E7F7;ETHIOPIC SYLLABLE GURAGE KWE;Lo;0;L;;;;;N;;;;; +1E7F8;ETHIOPIC SYLLABLE GURAGE GWI;Lo;0;L;;;;;N;;;;; +1E7F9;ETHIOPIC SYLLABLE GURAGE GWEE;Lo;0;L;;;;;N;;;;; +1E7FA;ETHIOPIC SYLLABLE GURAGE GWE;Lo;0;L;;;;;N;;;;; +1E7FB;ETHIOPIC SYLLABLE GURAGE FWI;Lo;0;L;;;;;N;;;;; +1E7FC;ETHIOPIC SYLLABLE GURAGE FWEE;Lo;0;L;;;;;N;;;;; +1E7FD;ETHIOPIC SYLLABLE GURAGE PWI;Lo;0;L;;;;;N;;;;; +1E7FE;ETHIOPIC SYLLABLE GURAGE PWEE;Lo;0;L;;;;;N;;;;; 1E800;MENDE KIKAKUI SYLLABLE M001 KI;Lo;0;R;;;;;N;;;;; 1E801;MENDE KIKAKUI SYLLABLE M002 KA;Lo;0;R;;;;;N;;;;; 1E802;MENDE KIKAKUI SYLLABLE M003 KU;Lo;0;R;;;;;N;;;;; @@ -31886,6 +32678,9 @@ FFFD;REPLACEMENT CHARACTER;So;0;ON;;;;;N;;;;; 1F6D5;HINDU TEMPLE;So;0;ON;;;;;N;;;;; 1F6D6;HUT;So;0;ON;;;;;N;;;;; 1F6D7;ELEVATOR;So;0;ON;;;;;N;;;;; +1F6DD;PLAYGROUND SLIDE;So;0;ON;;;;;N;;;;; +1F6DE;WHEEL;So;0;ON;;;;;N;;;;; +1F6DF;RING BUOY;So;0;ON;;;;;N;;;;; 1F6E0;HAMMER AND WRENCH;So;0;ON;;;;;N;;;;; 1F6E1;SHIELD;So;0;ON;;;;;N;;;;; 1F6E2;OIL DRUM;So;0;ON;;;;;N;;;;; @@ -32129,6 +32924,7 @@ FFFD;REPLACEMENT CHARACTER;So;0;ON;;;;;N;;;;; 1F7E9;LARGE GREEN SQUARE;So;0;ON;;;;;N;;;;; 1F7EA;LARGE PURPLE SQUARE;So;0;ON;;;;;N;;;;; 1F7EB;LARGE BROWN SQUARE;So;0;ON;;;;;N;;;;; +1F7F0;HEAVY EQUALS SIGN;So;0;ON;;;;;N;;;;; 1F800;LEFTWARDS ARROW WITH SMALL TRIANGLE ARROWHEAD;So;0;ON;;;;;N;;;;; 1F801;UPWARDS ARROW WITH SMALL TRIANGLE ARROWHEAD;So;0;ON;;;;;N;;;;; 1F802;RIGHTWARDS ARROW WITH SMALL TRIANGLE ARROWHEAD;So;0;ON;;;;;N;;;;; @@ -32400,6 +33196,7 @@ FFFD;REPLACEMENT CHARACTER;So;0;ON;;;;;N;;;;; 1F976;FREEZING FACE;So;0;ON;;;;;N;;;;; 1F977;NINJA;So;0;ON;;;;;N;;;;; 1F978;DISGUISED FACE;So;0;ON;;;;;N;;;;; +1F979;FACE HOLDING BACK TEARS;So;0;ON;;;;;N;;;;; 1F97A;FACE WITH PLEADING EYES;So;0;ON;;;;;N;;;;; 1F97B;SARI;So;0;ON;;;;;N;;;;; 1F97C;LAB COAT;So;0;ON;;;;;N;;;;; @@ -32482,6 +33279,7 @@ FFFD;REPLACEMENT CHARACTER;So;0;ON;;;;;N;;;;; 1F9C9;MATE DRINK;So;0;ON;;;;;N;;;;; 1F9CA;ICE CUBE;So;0;ON;;;;;N;;;;; 1F9CB;BUBBLE TEA;So;0;ON;;;;;N;;;;; +1F9CC;TROLL;So;0;ON;;;;;N;;;;; 1F9CD;STANDING PERSON;So;0;ON;;;;;N;;;;; 1F9CE;KNEELING PERSON;So;0;ON;;;;;N;;;;; 1F9CF;DEAF PERSON;So;0;ON;;;;;N;;;;; @@ -32639,6 +33437,8 @@ FFFD;REPLACEMENT CHARACTER;So;0;ON;;;;;N;;;;; 1FA78;DROP OF BLOOD;So;0;ON;;;;;N;;;;; 1FA79;ADHESIVE BANDAGE;So;0;ON;;;;;N;;;;; 1FA7A;STETHOSCOPE;So;0;ON;;;;;N;;;;; +1FA7B;X-RAY;So;0;ON;;;;;N;;;;; +1FA7C;CRUTCH;So;0;ON;;;;;N;;;;; 1FA80;YO-YO;So;0;ON;;;;;N;;;;; 1FA81;KITE;So;0;ON;;;;;N;;;;; 1FA82;PARACHUTE;So;0;ON;;;;;N;;;;; @@ -32671,6 +33471,10 @@ FFFD;REPLACEMENT CHARACTER;So;0;ON;;;;;N;;;;; 1FAA6;HEADSTONE;So;0;ON;;;;;N;;;;; 1FAA7;PLACARD;So;0;ON;;;;;N;;;;; 1FAA8;ROCK;So;0;ON;;;;;N;;;;; +1FAA9;MIRROR BALL;So;0;ON;;;;;N;;;;; +1FAAA;IDENTIFICATION CARD;So;0;ON;;;;;N;;;;; +1FAAB;LOW BATTERY;So;0;ON;;;;;N;;;;; +1FAAC;HAMSA;So;0;ON;;;;;N;;;;; 1FAB0;FLY;So;0;ON;;;;;N;;;;; 1FAB1;WORM;So;0;ON;;;;;N;;;;; 1FAB2;BEETLE;So;0;ON;;;;;N;;;;; @@ -32678,9 +33482,16 @@ FFFD;REPLACEMENT CHARACTER;So;0;ON;;;;;N;;;;; 1FAB4;POTTED PLANT;So;0;ON;;;;;N;;;;; 1FAB5;WOOD;So;0;ON;;;;;N;;;;; 1FAB6;FEATHER;So;0;ON;;;;;N;;;;; +1FAB7;LOTUS;So;0;ON;;;;;N;;;;; +1FAB8;CORAL;So;0;ON;;;;;N;;;;; +1FAB9;EMPTY NEST;So;0;ON;;;;;N;;;;; +1FABA;NEST WITH EGGS;So;0;ON;;;;;N;;;;; 1FAC0;ANATOMICAL HEART;So;0;ON;;;;;N;;;;; 1FAC1;LUNGS;So;0;ON;;;;;N;;;;; 1FAC2;PEOPLE HUGGING;So;0;ON;;;;;N;;;;; +1FAC3;PREGNANT MAN;So;0;ON;;;;;N;;;;; +1FAC4;PREGNANT PERSON;So;0;ON;;;;;N;;;;; +1FAC5;PERSON WITH CROWN;So;0;ON;;;;;N;;;;; 1FAD0;BLUEBERRIES;So;0;ON;;;;;N;;;;; 1FAD1;BELL PEPPER;So;0;ON;;;;;N;;;;; 1FAD2;OLIVE;So;0;ON;;;;;N;;;;; @@ -32688,6 +33499,24 @@ FFFD;REPLACEMENT CHARACTER;So;0;ON;;;;;N;;;;; 1FAD4;TAMALE;So;0;ON;;;;;N;;;;; 1FAD5;FONDUE;So;0;ON;;;;;N;;;;; 1FAD6;TEAPOT;So;0;ON;;;;;N;;;;; +1FAD7;POURING LIQUID;So;0;ON;;;;;N;;;;; +1FAD8;BEANS;So;0;ON;;;;;N;;;;; +1FAD9;JAR;So;0;ON;;;;;N;;;;; +1FAE0;MELTING FACE;So;0;ON;;;;;N;;;;; +1FAE1;SALUTING FACE;So;0;ON;;;;;N;;;;; +1FAE2;FACE WITH OPEN EYES AND HAND OVER MOUTH;So;0;ON;;;;;N;;;;; +1FAE3;FACE WITH PEEKING EYE;So;0;ON;;;;;N;;;;; +1FAE4;FACE WITH DIAGONAL MOUTH;So;0;ON;;;;;N;;;;; +1FAE5;DOTTED LINE FACE;So;0;ON;;;;;N;;;;; +1FAE6;BITING LIP;So;0;ON;;;;;N;;;;; +1FAE7;BUBBLES;So;0;ON;;;;;N;;;;; +1FAF0;HAND WITH INDEX FINGER AND THUMB CROSSED;So;0;ON;;;;;N;;;;; +1FAF1;RIGHTWARDS HAND;So;0;ON;;;;;N;;;;; +1FAF2;LEFTWARDS HAND;So;0;ON;;;;;N;;;;; +1FAF3;PALM DOWN HAND;So;0;ON;;;;;N;;;;; +1FAF4;PALM UP HAND;So;0;ON;;;;;N;;;;; +1FAF5;INDEX POINTING AT THE VIEWER;So;0;ON;;;;;N;;;;; +1FAF6;HEART HANDS;So;0;ON;;;;;N;;;;; 1FB00;BLOCK SEXTANT-1;So;0;ON;;;;;N;;;;; 1FB01;BLOCK SEXTANT-2;So;0;ON;;;;;N;;;;; 1FB02;BLOCK SEXTANT-12;So;0;ON;;;;;N;;;;; @@ -32901,9 +33730,9 @@ FFFD;REPLACEMENT CHARACTER;So;0;ON;;;;;N;;;;; 1FBF8;SEGMENTED DIGIT EIGHT;Nd;0;EN; 0038;8;8;8;N;;;;; 1FBF9;SEGMENTED DIGIT NINE;Nd;0;EN; 0039;9;9;9;N;;;;; 20000;;Lo;0;L;;;;;N;;;;; -2A6DD;;Lo;0;L;;;;;N;;;;; +2A6DF;;Lo;0;L;;;;;N;;;;; 2A700;;Lo;0;L;;;;;N;;;;; -2B734;;Lo;0;L;;;;;N;;;;; +2B738;;Lo;0;L;;;;;N;;;;; 2B740;;Lo;0;L;;;;;N;;;;; 2B81D;;Lo;0;L;;;;;N;;;;; 2B820;;Lo;0;L;;;;;N;;;;; diff --git a/gnu/usr.bin/perl/lib/unicore/auxiliary/GCBTest.txt b/gnu/usr.bin/perl/lib/unicore/auxiliary/GCBTest.txt index 5baf292a071..eff2fd33b0f 100644 --- a/gnu/usr.bin/perl/lib/unicore/auxiliary/GCBTest.txt +++ b/gnu/usr.bin/perl/lib/unicore/auxiliary/GCBTest.txt @@ -1,6 +1,6 @@ -# GraphemeBreakTest-13.0.0.txt -# Date: 2019-11-15, 19:49:10 GMT -# © 2019 Unicode®, Inc. +# GraphemeBreakTest-14.0.0.txt +# Date: 2021-03-08, 06:22:32 GMT +# © 2021 Unicode®, Inc. # Unicode and the Unicode Logo are registered trademarks of Unicode, Inc. in the U.S. and other countries. # For terms of use, see http://www.unicode.org/terms_of_use.html # diff --git a/gnu/usr.bin/perl/lib/unicore/auxiliary/GraphemeBreakProperty.txt b/gnu/usr.bin/perl/lib/unicore/auxiliary/GraphemeBreakProperty.txt index 6ee92f6eeca..dd2569064aa 100644 --- a/gnu/usr.bin/perl/lib/unicore/auxiliary/GraphemeBreakProperty.txt +++ b/gnu/usr.bin/perl/lib/unicore/auxiliary/GraphemeBreakProperty.txt @@ -1,6 +1,6 @@ -# GraphemeBreakProperty-13.0.0.txt -# Date: 2019-10-21, 14:30:35 GMT -# © 2019 Unicode®, Inc. +# GraphemeBreakProperty-14.0.0.txt +# Date: 2021-08-12, 23:13:02 GMT +# © 2021 Unicode®, Inc. # Unicode and the Unicode Logo are registered trademarks of Unicode, Inc. in the U.S. and other countries. # For terms of use, see http://www.unicode.org/terms_of_use.html # @@ -21,6 +21,7 @@ 0600..0605 ; Prepend # Cf [6] ARABIC NUMBER SIGN..ARABIC NUMBER MARK ABOVE 06DD ; Prepend # Cf ARABIC END OF AYAH 070F ; Prepend # Cf SYRIAC ABBREVIATION MARK +0890..0891 ; Prepend # Cf [2] ARABIC POUND MARK ABOVE..ARABIC PIASTRE MARK ABOVE 08E2 ; Prepend # Cf ARABIC DISPUTED END OF AYAH 0D4E ; Prepend # Lo MALAYALAM LETTER DOT REPH 110BD ; Prepend # Cf KAITHI NUMBER SIGN @@ -32,7 +33,7 @@ 11A84..11A89 ; Prepend # Lo [6] SOYOMBO SIGN JIHVAMULIYA..SOYOMBO CLUSTER-INITIAL LETTER SA 11D46 ; Prepend # Lo MASARAM GONDI REPHA -# Total code points: 24 +# Total code points: 26 # ================================================ @@ -104,7 +105,8 @@ E01F0..E0FFF ; Control # Cn [3600] .. 0825..0827 ; Extend # Mn [3] SAMARITAN VOWEL SIGN SHORT A..SAMARITAN VOWEL SIGN U 0829..082D ; Extend # Mn [5] SAMARITAN VOWEL SIGN LONG I..SAMARITAN MARK NEQUDAA 0859..085B ; Extend # Mn [3] MANDAIC AFFRICATION MARK..MANDAIC GEMINATION MARK -08D3..08E1 ; Extend # Mn [15] ARABIC SMALL LOW WAW..ARABIC SMALL HIGH SIGN SAFHA +0898..089F ; Extend # Mn [8] ARABIC SMALL HIGH WORD AL-JUZ..ARABIC HALF MADDA OVER MADDA +08CA..08E1 ; Extend # Mn [24] ARABIC SMALL HIGH FARSI YEH..ARABIC SMALL HIGH SIGN SAFHA 08E3..0902 ; Extend # Mn [32] ARABIC TURNED DAMMA BELOW..DEVANAGARI SIGN ANUSVARA 093A ; Extend # Mn DEVANAGARI VOWEL SIGN OE 093C ; Extend # Mn DEVANAGARI SIGN NUKTA @@ -151,6 +153,7 @@ E01F0..E0FFF ; Control # Cn [3600] .. 0BD7 ; Extend # Mc TAMIL AU LENGTH MARK 0C00 ; Extend # Mn TELUGU SIGN COMBINING CANDRABINDU ABOVE 0C04 ; Extend # Mn TELUGU SIGN COMBINING ANUSVARA ABOVE +0C3C ; Extend # Mn TELUGU SIGN NUKTA 0C3E..0C40 ; Extend # Mn [3] TELUGU VOWEL SIGN AA..TELUGU VOWEL SIGN II 0C46..0C48 ; Extend # Mn [3] TELUGU VOWEL SIGN E..TELUGU VOWEL SIGN AI 0C4A..0C4D ; Extend # Mn [4] TELUGU VOWEL SIGN O..TELUGU SIGN VIRAMA @@ -206,7 +209,7 @@ E01F0..E0FFF ; Control # Cn [3600] .. 109D ; Extend # Mn MYANMAR VOWEL SIGN AITON AI 135D..135F ; Extend # Mn [3] ETHIOPIC COMBINING GEMINATION AND VOWEL LENGTH MARK..ETHIOPIC COMBINING GEMINATION MARK 1712..1714 ; Extend # Mn [3] TAGALOG VOWEL SIGN I..TAGALOG SIGN VIRAMA -1732..1734 ; Extend # Mn [3] HANUNOO VOWEL SIGN I..HANUNOO SIGN PAMUDPOD +1732..1733 ; Extend # Mn [2] HANUNOO VOWEL SIGN I..HANUNOO VOWEL SIGN U 1752..1753 ; Extend # Mn [2] BUHID VOWEL SIGN I..BUHID VOWEL SIGN U 1772..1773 ; Extend # Mn [2] TAGBANWA VOWEL SIGN I..TAGBANWA VOWEL SIGN U 17B4..17B5 ; Extend # Mn [2] KHMER VOWEL INHERENT AQ..KHMER VOWEL INHERENT AA @@ -215,6 +218,7 @@ E01F0..E0FFF ; Control # Cn [3600] .. 17C9..17D3 ; Extend # Mn [11] KHMER SIGN MUUSIKATOAN..KHMER SIGN BATHAMASAT 17DD ; Extend # Mn KHMER SIGN ATTHACAN 180B..180D ; Extend # Mn [3] MONGOLIAN FREE VARIATION SELECTOR ONE..MONGOLIAN FREE VARIATION SELECTOR THREE +180F ; Extend # Mn MONGOLIAN FREE VARIATION SELECTOR FOUR 1885..1886 ; Extend # Mn [2] MONGOLIAN LETTER ALI GALI BALUDA..MONGOLIAN LETTER ALI GALI THREE BALUDA 18A9 ; Extend # Mn MONGOLIAN LETTER ALI GALI DAGALGA 1920..1922 ; Extend # Mn [3] LIMBU VOWEL SIGN A..LIMBU VOWEL SIGN U @@ -232,7 +236,7 @@ E01F0..E0FFF ; Control # Cn [3600] .. 1A7F ; Extend # Mn TAI THAM COMBINING CRYPTOGRAMMIC DOT 1AB0..1ABD ; Extend # Mn [14] COMBINING DOUBLED CIRCUMFLEX ACCENT..COMBINING PARENTHESES BELOW 1ABE ; Extend # Me COMBINING PARENTHESES OVERLAY -1ABF..1AC0 ; Extend # Mn [2] COMBINING LATIN SMALL LETTER W BELOW..COMBINING LATIN SMALL LETTER TURNED W BELOW +1ABF..1ACE ; Extend # Mn [16] COMBINING LATIN SMALL LETTER W BELOW..COMBINING LATIN SMALL LETTER INSULAR T 1B00..1B03 ; Extend # Mn [4] BALINESE SIGN ULU RICEM..BALINESE SIGN SURANG 1B34 ; Extend # Mn BALINESE SIGN REREKAN 1B35 ; Extend # Mc BALINESE VOWEL SIGN TEDUNG @@ -256,8 +260,7 @@ E01F0..E0FFF ; Control # Cn [3600] .. 1CED ; Extend # Mn VEDIC SIGN TIRYAK 1CF4 ; Extend # Mn VEDIC TONE CANDRA ABOVE 1CF8..1CF9 ; Extend # Mn [2] VEDIC TONE RING ABOVE..VEDIC TONE DOUBLE RING ABOVE -1DC0..1DF9 ; Extend # Mn [58] COMBINING DOTTED GRAVE ACCENT..COMBINING WIDE INVERTED BRIDGE BELOW -1DFB..1DFF ; Extend # Mn [5] COMBINING DELETION MARK..COMBINING RIGHT ARROWHEAD AND DOWN ARROWHEAD BELOW +1DC0..1DFF ; Extend # Mn [64] COMBINING DOTTED GRAVE ACCENT..COMBINING RIGHT ARROWHEAD AND DOWN ARROWHEAD BELOW 200C ; Extend # Cf ZERO WIDTH NON-JOINER 20D0..20DC ; Extend # Mn [13] COMBINING LEFT HARPOON ABOVE..COMBINING FOUR DOTS ABOVE 20DD..20E0 ; Extend # Me [4] COMBINING ENCLOSING CIRCLE..COMBINING ENCLOSING CIRCLE BACKSLASH @@ -322,11 +325,15 @@ FF9E..FF9F ; Extend # Lm [2] HALFWIDTH KATAKANA VOICED SOUND MARK..HALFWIDT 10D24..10D27 ; Extend # Mn [4] HANIFI ROHINGYA SIGN HARBAHAY..HANIFI ROHINGYA SIGN TASSI 10EAB..10EAC ; Extend # Mn [2] YEZIDI COMBINING HAMZA MARK..YEZIDI COMBINING MADDA MARK 10F46..10F50 ; Extend # Mn [11] SOGDIAN COMBINING DOT BELOW..SOGDIAN COMBINING STROKE BELOW +10F82..10F85 ; Extend # Mn [4] OLD UYGHUR COMBINING DOT ABOVE..OLD UYGHUR COMBINING TWO DOTS BELOW 11001 ; Extend # Mn BRAHMI SIGN ANUSVARA 11038..11046 ; Extend # Mn [15] BRAHMI VOWEL SIGN AA..BRAHMI VIRAMA +11070 ; Extend # Mn BRAHMI SIGN OLD TAMIL VIRAMA +11073..11074 ; Extend # Mn [2] BRAHMI VOWEL SIGN OLD TAMIL SHORT E..BRAHMI VOWEL SIGN OLD TAMIL SHORT O 1107F..11081 ; Extend # Mn [3] BRAHMI NUMBER JOINER..KAITHI SIGN ANUSVARA 110B3..110B6 ; Extend # Mn [4] KAITHI VOWEL SIGN U..KAITHI VOWEL SIGN AI 110B9..110BA ; Extend # Mn [2] KAITHI SIGN VIRAMA..KAITHI SIGN NUKTA +110C2 ; Extend # Mn KAITHI VOWEL SIGN VOCALIC R 11100..11102 ; Extend # Mn [3] CHAKMA SIGN CANDRABINDU..CHAKMA SIGN VISARGA 11127..1112B ; Extend # Mn [5] CHAKMA VOWEL SIGN A..CHAKMA VOWEL SIGN UU 1112D..11134 ; Extend # Mn [8] CHAKMA VOWEL SIGN AI..CHAKMA MAAYYAA @@ -412,6 +419,8 @@ FF9E..FF9F ; Extend # Lm [2] HALFWIDTH KATAKANA VOICED SOUND MARK..HALFWIDT 16F8F..16F92 ; Extend # Mn [4] MIAO TONE RIGHT..MIAO TONE BELOW 16FE4 ; Extend # Mn KHITAN SMALL SCRIPT FILLER 1BC9D..1BC9E ; Extend # Mn [2] DUPLOYAN THICK LETTER SELECTOR..DUPLOYAN DOUBLE MARK +1CF00..1CF2D ; Extend # Mn [46] ZNAMENNY COMBINING MARK GORAZDO NIZKO S KRYZHEM ON LEFT..ZNAMENNY COMBINING MARK KRYZH ON LEFT +1CF30..1CF46 ; Extend # Mn [23] ZNAMENNY COMBINING TONAL RANGE MARK MRACHNO..ZNAMENNY PRIZNAK MODIFIER ROG 1D165 ; Extend # Mc MUSICAL SYMBOL COMBINING STEM 1D167..1D169 ; Extend # Mn [3] MUSICAL SYMBOL COMBINING TREMOLO-1..MUSICAL SYMBOL COMBINING TREMOLO-3 1D16E..1D172 ; Extend # Mc [5] MUSICAL SYMBOL COMBINING FLAG-1..MUSICAL SYMBOL COMBINING FLAG-5 @@ -431,6 +440,7 @@ FF9E..FF9F ; Extend # Lm [2] HALFWIDTH KATAKANA VOICED SOUND MARK..HALFWIDT 1E023..1E024 ; Extend # Mn [2] COMBINING GLAGOLITIC LETTER YU..COMBINING GLAGOLITIC LETTER SMALL YUS 1E026..1E02A ; Extend # Mn [5] COMBINING GLAGOLITIC LETTER YO..COMBINING GLAGOLITIC LETTER FITA 1E130..1E136 ; Extend # Mn [7] NYIAKENG PUACHUE HMONG TONE-B..NYIAKENG PUACHUE HMONG TONE-D +1E2AE ; Extend # Mn TOTO SIGN RISING TONE 1E2EC..1E2EF ; Extend # Mn [4] WANCHO TONE TUP..WANCHO TONE KOINI 1E8D0..1E8D6 ; Extend # Mn [7] MENDE KIKAKUI COMBINING NUMBER TEENS..MENDE KIKAKUI COMBINING NUMBER MILLIONS 1E944..1E94A ; Extend # Mn [7] ADLAM ALIF LENGTHENER..ADLAM NUKTA @@ -438,7 +448,7 @@ FF9E..FF9F ; Extend # Lm [2] HALFWIDTH KATAKANA VOICED SOUND MARK..HALFWIDT E0020..E007F ; Extend # Cf [96] TAG SPACE..CANCEL TAG E0100..E01EF ; Extend # Mn [240] VARIATION SELECTOR-17..VARIATION SELECTOR-256 -# Total code points: 1984 +# Total code points: 2095 # ================================================ @@ -495,6 +505,8 @@ E0100..E01EF ; Extend # Mn [240] VARIATION SELECTOR-17..VARIATION SELECTOR-256 103B..103C ; SpacingMark # Mc [2] MYANMAR CONSONANT SIGN MEDIAL YA..MYANMAR CONSONANT SIGN MEDIAL RA 1056..1057 ; SpacingMark # Mc [2] MYANMAR VOWEL SIGN VOCALIC R..MYANMAR VOWEL SIGN VOCALIC RR 1084 ; SpacingMark # Mc MYANMAR VOWEL SIGN SHAN E +1715 ; SpacingMark # Mc TAGALOG SIGN PAMUDPOD +1734 ; SpacingMark # Mc HANUNOO SIGN PAMUDPOD 17B6 ; SpacingMark # Mc KHMER VOWEL SIGN AA 17BE..17C5 ; SpacingMark # Mc [8] KHMER VOWEL SIGN OE..KHMER VOWEL SIGN AU 17C7..17C8 ; SpacingMark # Mc [2] KHMER SIGN REAHMUK..KHMER SIGN YUUKALEAPINTU @@ -579,7 +591,6 @@ ABEC ; SpacingMark # Mc MEETEI MAYEK LUM IYEK 116AC ; SpacingMark # Mc TAKRI SIGN VISARGA 116AE..116AF ; SpacingMark # Mc [2] TAKRI VOWEL SIGN I..TAKRI VOWEL SIGN II 116B6 ; SpacingMark # Mc TAKRI SIGN VIRAMA -11720..11721 ; SpacingMark # Mc [2] AHOM VOWEL SIGN A..AHOM VOWEL SIGN AA 11726 ; SpacingMark # Mc AHOM VOWEL SIGN E 1182C..1182E ; SpacingMark # Mc [3] DOGRA VOWEL SIGN AA..DOGRA VOWEL SIGN II 11838 ; SpacingMark # Mc DOGRA SIGN VISARGA diff --git a/gnu/usr.bin/perl/lib/unicore/auxiliary/LBTest.txt b/gnu/usr.bin/perl/lib/unicore/auxiliary/LBTest.txt index d8666c458fc..8d1cef0f785 100644 --- a/gnu/usr.bin/perl/lib/unicore/auxiliary/LBTest.txt +++ b/gnu/usr.bin/perl/lib/unicore/auxiliary/LBTest.txt @@ -1,6 +1,6 @@ -# LineBreakTest-13.0.0.txt -# Date: 2019-11-21, 16:13:36 GMT -# © 2019 Unicode®, Inc. +# LineBreakTest-14.0.0.txt +# Date: 2021-08-20, 21:08:45 GMT +# © 2021 Unicode®, Inc. # Unicode and the Unicode Logo are registered trademarks of Unicode, Inc. in the U.S. and other countries. # For terms of use, see http://www.unicode.org/terms_of_use.html # @@ -1846,9 +1846,9 @@ × AC00 × 0020 ÷ 2329 ÷ # × [0.3] HANGUL SYLLABLE GA (H2) × [7.01] SPACE (SP) ÷ [18.0] LEFT-POINTING ANGLE BRACKET (OP) ÷ [0.3] × AC00 × 0308 ÷ 2329 ÷ # × [0.3] HANGUL SYLLABLE GA (H2) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] LEFT-POINTING ANGLE BRACKET (OP) ÷ [0.3] × AC00 × 0308 × 0020 ÷ 2329 ÷ # × [0.3] HANGUL SYLLABLE GA (H2) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] LEFT-POINTING ANGLE BRACKET (OP) ÷ [0.3] -× AC00 × 0025 ÷ # × [0.3] HANGUL SYLLABLE GA (H2) × [27.02] PERCENT SIGN (PO) ÷ [0.3] +× AC00 × 0025 ÷ # × [0.3] HANGUL SYLLABLE GA (H2) × [27.01] PERCENT SIGN (PO) ÷ [0.3] × AC00 × 0020 ÷ 0025 ÷ # × [0.3] HANGUL SYLLABLE GA (H2) × [7.01] SPACE (SP) ÷ [18.0] PERCENT SIGN (PO) ÷ [0.3] -× AC00 × 0308 × 0025 ÷ # × [0.3] HANGUL SYLLABLE GA (H2) × [9.0] COMBINING DIAERESIS (CM1_CM) × [27.02] PERCENT SIGN (PO) ÷ [0.3] +× AC00 × 0308 × 0025 ÷ # × [0.3] HANGUL SYLLABLE GA (H2) × [9.0] COMBINING DIAERESIS (CM1_CM) × [27.01] PERCENT SIGN (PO) ÷ [0.3] × AC00 × 0308 × 0020 ÷ 0025 ÷ # × [0.3] HANGUL SYLLABLE GA (H2) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] PERCENT SIGN (PO) ÷ [0.3] × AC00 ÷ 0024 ÷ # × [0.3] HANGUL SYLLABLE GA (H2) ÷ [999.0] DOLLAR SIGN (PR) ÷ [0.3] × AC00 × 0020 ÷ 0024 ÷ # × [0.3] HANGUL SYLLABLE GA (H2) × [7.01] SPACE (SP) ÷ [18.0] DOLLAR SIGN (PR) ÷ [0.3] @@ -2018,9 +2018,9 @@ × AC01 × 0020 ÷ 2329 ÷ # × [0.3] HANGUL SYLLABLE GAG (H3) × [7.01] SPACE (SP) ÷ [18.0] LEFT-POINTING ANGLE BRACKET (OP) ÷ [0.3] × AC01 × 0308 ÷ 2329 ÷ # × [0.3] HANGUL SYLLABLE GAG (H3) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] LEFT-POINTING ANGLE BRACKET (OP) ÷ [0.3] × AC01 × 0308 × 0020 ÷ 2329 ÷ # × [0.3] HANGUL SYLLABLE GAG (H3) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] LEFT-POINTING ANGLE BRACKET (OP) ÷ [0.3] -× AC01 × 0025 ÷ # × [0.3] HANGUL SYLLABLE GAG (H3) × [27.02] PERCENT SIGN (PO) ÷ [0.3] +× AC01 × 0025 ÷ # × [0.3] HANGUL SYLLABLE GAG (H3) × [27.01] PERCENT SIGN (PO) ÷ [0.3] × AC01 × 0020 ÷ 0025 ÷ # × [0.3] HANGUL SYLLABLE GAG (H3) × [7.01] SPACE (SP) ÷ [18.0] PERCENT SIGN (PO) ÷ [0.3] -× AC01 × 0308 × 0025 ÷ # × [0.3] HANGUL SYLLABLE GAG (H3) × [9.0] COMBINING DIAERESIS (CM1_CM) × [27.02] PERCENT SIGN (PO) ÷ [0.3] +× AC01 × 0308 × 0025 ÷ # × [0.3] HANGUL SYLLABLE GAG (H3) × [9.0] COMBINING DIAERESIS (CM1_CM) × [27.01] PERCENT SIGN (PO) ÷ [0.3] × AC01 × 0308 × 0020 ÷ 0025 ÷ # × [0.3] HANGUL SYLLABLE GAG (H3) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] PERCENT SIGN (PO) ÷ [0.3] × AC01 ÷ 0024 ÷ # × [0.3] HANGUL SYLLABLE GAG (H3) ÷ [999.0] DOLLAR SIGN (PR) ÷ [0.3] × AC01 × 0020 ÷ 0024 ÷ # × [0.3] HANGUL SYLLABLE GAG (H3) × [7.01] SPACE (SP) ÷ [18.0] DOLLAR SIGN (PR) ÷ [0.3] @@ -3050,9 +3050,9 @@ × 1100 × 0020 ÷ 2329 ÷ # × [0.3] HANGUL CHOSEONG KIYEOK (JL) × [7.01] SPACE (SP) ÷ [18.0] LEFT-POINTING ANGLE BRACKET (OP) ÷ [0.3] × 1100 × 0308 ÷ 2329 ÷ # × [0.3] HANGUL CHOSEONG KIYEOK (JL) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] LEFT-POINTING ANGLE BRACKET (OP) ÷ [0.3] × 1100 × 0308 × 0020 ÷ 2329 ÷ # × [0.3] HANGUL CHOSEONG KIYEOK (JL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] LEFT-POINTING ANGLE BRACKET (OP) ÷ [0.3] -× 1100 × 0025 ÷ # × [0.3] HANGUL CHOSEONG KIYEOK (JL) × [27.02] PERCENT SIGN (PO) ÷ [0.3] +× 1100 × 0025 ÷ # × [0.3] HANGUL CHOSEONG KIYEOK (JL) × [27.01] PERCENT SIGN (PO) ÷ [0.3] × 1100 × 0020 ÷ 0025 ÷ # × [0.3] HANGUL CHOSEONG KIYEOK (JL) × [7.01] SPACE (SP) ÷ [18.0] PERCENT SIGN (PO) ÷ [0.3] -× 1100 × 0308 × 0025 ÷ # × [0.3] HANGUL CHOSEONG KIYEOK (JL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [27.02] PERCENT SIGN (PO) ÷ [0.3] +× 1100 × 0308 × 0025 ÷ # × [0.3] HANGUL CHOSEONG KIYEOK (JL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [27.01] PERCENT SIGN (PO) ÷ [0.3] × 1100 × 0308 × 0020 ÷ 0025 ÷ # × [0.3] HANGUL CHOSEONG KIYEOK (JL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] PERCENT SIGN (PO) ÷ [0.3] × 1100 ÷ 0024 ÷ # × [0.3] HANGUL CHOSEONG KIYEOK (JL) ÷ [999.0] DOLLAR SIGN (PR) ÷ [0.3] × 1100 × 0020 ÷ 0024 ÷ # × [0.3] HANGUL CHOSEONG KIYEOK (JL) × [7.01] SPACE (SP) ÷ [18.0] DOLLAR SIGN (PR) ÷ [0.3] @@ -3222,9 +3222,9 @@ × 11A8 × 0020 ÷ 2329 ÷ # × [0.3] HANGUL JONGSEONG KIYEOK (JT) × [7.01] SPACE (SP) ÷ [18.0] LEFT-POINTING ANGLE BRACKET (OP) ÷ [0.3] × 11A8 × 0308 ÷ 2329 ÷ # × [0.3] HANGUL JONGSEONG KIYEOK (JT) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] LEFT-POINTING ANGLE BRACKET (OP) ÷ [0.3] × 11A8 × 0308 × 0020 ÷ 2329 ÷ # × [0.3] HANGUL JONGSEONG KIYEOK (JT) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] LEFT-POINTING ANGLE BRACKET (OP) ÷ [0.3] -× 11A8 × 0025 ÷ # × [0.3] HANGUL JONGSEONG KIYEOK (JT) × [27.02] PERCENT SIGN (PO) ÷ [0.3] +× 11A8 × 0025 ÷ # × [0.3] HANGUL JONGSEONG KIYEOK (JT) × [27.01] PERCENT SIGN (PO) ÷ [0.3] × 11A8 × 0020 ÷ 0025 ÷ # × [0.3] HANGUL JONGSEONG KIYEOK (JT) × [7.01] SPACE (SP) ÷ [18.0] PERCENT SIGN (PO) ÷ [0.3] -× 11A8 × 0308 × 0025 ÷ # × [0.3] HANGUL JONGSEONG KIYEOK (JT) × [9.0] COMBINING DIAERESIS (CM1_CM) × [27.02] PERCENT SIGN (PO) ÷ [0.3] +× 11A8 × 0308 × 0025 ÷ # × [0.3] HANGUL JONGSEONG KIYEOK (JT) × [9.0] COMBINING DIAERESIS (CM1_CM) × [27.01] PERCENT SIGN (PO) ÷ [0.3] × 11A8 × 0308 × 0020 ÷ 0025 ÷ # × [0.3] HANGUL JONGSEONG KIYEOK (JT) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] PERCENT SIGN (PO) ÷ [0.3] × 11A8 ÷ 0024 ÷ # × [0.3] HANGUL JONGSEONG KIYEOK (JT) ÷ [999.0] DOLLAR SIGN (PR) ÷ [0.3] × 11A8 × 0020 ÷ 0024 ÷ # × [0.3] HANGUL JONGSEONG KIYEOK (JT) × [7.01] SPACE (SP) ÷ [18.0] DOLLAR SIGN (PR) ÷ [0.3] @@ -3394,9 +3394,9 @@ × 1160 × 0020 ÷ 2329 ÷ # × [0.3] HANGUL JUNGSEONG FILLER (JV) × [7.01] SPACE (SP) ÷ [18.0] LEFT-POINTING ANGLE BRACKET (OP) ÷ [0.3] × 1160 × 0308 ÷ 2329 ÷ # × [0.3] HANGUL JUNGSEONG FILLER (JV) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] LEFT-POINTING ANGLE BRACKET (OP) ÷ [0.3] × 1160 × 0308 × 0020 ÷ 2329 ÷ # × [0.3] HANGUL JUNGSEONG FILLER (JV) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] LEFT-POINTING ANGLE BRACKET (OP) ÷ [0.3] -× 1160 × 0025 ÷ # × [0.3] HANGUL JUNGSEONG FILLER (JV) × [27.02] PERCENT SIGN (PO) ÷ [0.3] +× 1160 × 0025 ÷ # × [0.3] HANGUL JUNGSEONG FILLER (JV) × [27.01] PERCENT SIGN (PO) ÷ [0.3] × 1160 × 0020 ÷ 0025 ÷ # × [0.3] HANGUL JUNGSEONG FILLER (JV) × [7.01] SPACE (SP) ÷ [18.0] PERCENT SIGN (PO) ÷ [0.3] -× 1160 × 0308 × 0025 ÷ # × [0.3] HANGUL JUNGSEONG FILLER (JV) × [9.0] COMBINING DIAERESIS (CM1_CM) × [27.02] PERCENT SIGN (PO) ÷ [0.3] +× 1160 × 0308 × 0025 ÷ # × [0.3] HANGUL JUNGSEONG FILLER (JV) × [9.0] COMBINING DIAERESIS (CM1_CM) × [27.01] PERCENT SIGN (PO) ÷ [0.3] × 1160 × 0308 × 0020 ÷ 0025 ÷ # × [0.3] HANGUL JUNGSEONG FILLER (JV) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] PERCENT SIGN (PO) ÷ [0.3] × 1160 ÷ 0024 ÷ # × [0.3] HANGUL JUNGSEONG FILLER (JV) ÷ [999.0] DOLLAR SIGN (PR) ÷ [0.3] × 1160 × 0020 ÷ 0024 ÷ # × [0.3] HANGUL JUNGSEONG FILLER (JV) × [7.01] SPACE (SP) ÷ [18.0] DOLLAR SIGN (PR) ÷ [0.3] @@ -4538,13 +4538,13 @@ × 0024 × 0020 ÷ 00A0 ÷ # × [0.3] DOLLAR SIGN (PR) × [7.01] SPACE (SP) ÷ [18.0] NO-BREAK SPACE (GL) ÷ [0.3] × 0024 × 0308 × 00A0 ÷ # × [0.3] DOLLAR SIGN (PR) × [9.0] COMBINING DIAERESIS (CM1_CM) × [12.2] NO-BREAK SPACE (GL) ÷ [0.3] × 0024 × 0308 × 0020 ÷ 00A0 ÷ # × [0.3] DOLLAR SIGN (PR) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] NO-BREAK SPACE (GL) ÷ [0.3] -× 0024 × AC00 ÷ # × [0.3] DOLLAR SIGN (PR) × [27.03] HANGUL SYLLABLE GA (H2) ÷ [0.3] +× 0024 × AC00 ÷ # × [0.3] DOLLAR SIGN (PR) × [27.02] HANGUL SYLLABLE GA (H2) ÷ [0.3] × 0024 × 0020 ÷ AC00 ÷ # × [0.3] DOLLAR SIGN (PR) × [7.01] SPACE (SP) ÷ [18.0] HANGUL SYLLABLE GA (H2) ÷ [0.3] -× 0024 × 0308 × AC00 ÷ # × [0.3] DOLLAR SIGN (PR) × [9.0] COMBINING DIAERESIS (CM1_CM) × [27.03] HANGUL SYLLABLE GA (H2) ÷ [0.3] +× 0024 × 0308 × AC00 ÷ # × [0.3] DOLLAR SIGN (PR) × [9.0] COMBINING DIAERESIS (CM1_CM) × [27.02] HANGUL SYLLABLE GA (H2) ÷ [0.3] × 0024 × 0308 × 0020 ÷ AC00 ÷ # × [0.3] DOLLAR SIGN (PR) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] HANGUL SYLLABLE GA (H2) ÷ [0.3] -× 0024 × AC01 ÷ # × [0.3] DOLLAR SIGN (PR) × [27.03] HANGUL SYLLABLE GAG (H3) ÷ [0.3] +× 0024 × AC01 ÷ # × [0.3] DOLLAR SIGN (PR) × [27.02] HANGUL SYLLABLE GAG (H3) ÷ [0.3] × 0024 × 0020 ÷ AC01 ÷ # × [0.3] DOLLAR SIGN (PR) × [7.01] SPACE (SP) ÷ [18.0] HANGUL SYLLABLE GAG (H3) ÷ [0.3] -× 0024 × 0308 × AC01 ÷ # × [0.3] DOLLAR SIGN (PR) × [9.0] COMBINING DIAERESIS (CM1_CM) × [27.03] HANGUL SYLLABLE GAG (H3) ÷ [0.3] +× 0024 × 0308 × AC01 ÷ # × [0.3] DOLLAR SIGN (PR) × [9.0] COMBINING DIAERESIS (CM1_CM) × [27.02] HANGUL SYLLABLE GAG (H3) ÷ [0.3] × 0024 × 0308 × 0020 ÷ AC01 ÷ # × [0.3] DOLLAR SIGN (PR) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] HANGUL SYLLABLE GAG (H3) ÷ [0.3] × 0024 × 05D0 ÷ # × [0.3] DOLLAR SIGN (PR) × [24.02] HEBREW LETTER ALEF (HL) ÷ [0.3] × 0024 × 0020 ÷ 05D0 ÷ # × [0.3] DOLLAR SIGN (PR) × [7.01] SPACE (SP) ÷ [18.0] HEBREW LETTER ALEF (HL) ÷ [0.3] @@ -4566,17 +4566,17 @@ × 0024 × 0020 × 002C ÷ # × [0.3] DOLLAR SIGN (PR) × [7.01] SPACE (SP) × [13.02] COMMA (IS) ÷ [0.3] × 0024 × 0308 × 002C ÷ # × [0.3] DOLLAR SIGN (PR) × [9.0] COMBINING DIAERESIS (CM1_CM) × [13.03] COMMA (IS) ÷ [0.3] × 0024 × 0308 × 0020 × 002C ÷ # × [0.3] DOLLAR SIGN (PR) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [13.02] COMMA (IS) ÷ [0.3] -× 0024 × 1100 ÷ # × [0.3] DOLLAR SIGN (PR) × [27.03] HANGUL CHOSEONG KIYEOK (JL) ÷ [0.3] +× 0024 × 1100 ÷ # × [0.3] DOLLAR SIGN (PR) × [27.02] HANGUL CHOSEONG KIYEOK (JL) ÷ [0.3] × 0024 × 0020 ÷ 1100 ÷ # × [0.3] DOLLAR SIGN (PR) × [7.01] SPACE (SP) ÷ [18.0] HANGUL CHOSEONG KIYEOK (JL) ÷ [0.3] -× 0024 × 0308 × 1100 ÷ # × [0.3] DOLLAR SIGN (PR) × [9.0] COMBINING DIAERESIS (CM1_CM) × [27.03] HANGUL CHOSEONG KIYEOK (JL) ÷ [0.3] +× 0024 × 0308 × 1100 ÷ # × [0.3] DOLLAR SIGN (PR) × [9.0] COMBINING DIAERESIS (CM1_CM) × [27.02] HANGUL CHOSEONG KIYEOK (JL) ÷ [0.3] × 0024 × 0308 × 0020 ÷ 1100 ÷ # × [0.3] DOLLAR SIGN (PR) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] HANGUL CHOSEONG KIYEOK (JL) ÷ [0.3] -× 0024 × 11A8 ÷ # × [0.3] DOLLAR SIGN (PR) × [27.03] HANGUL JONGSEONG KIYEOK (JT) ÷ [0.3] +× 0024 × 11A8 ÷ # × [0.3] DOLLAR SIGN (PR) × [27.02] HANGUL JONGSEONG KIYEOK (JT) ÷ [0.3] × 0024 × 0020 ÷ 11A8 ÷ # × [0.3] DOLLAR SIGN (PR) × [7.01] SPACE (SP) ÷ [18.0] HANGUL JONGSEONG KIYEOK (JT) ÷ [0.3] -× 0024 × 0308 × 11A8 ÷ # × [0.3] DOLLAR SIGN (PR) × [9.0] COMBINING DIAERESIS (CM1_CM) × [27.03] HANGUL JONGSEONG KIYEOK (JT) ÷ [0.3] +× 0024 × 0308 × 11A8 ÷ # × [0.3] DOLLAR SIGN (PR) × [9.0] COMBINING DIAERESIS (CM1_CM) × [27.02] HANGUL JONGSEONG KIYEOK (JT) ÷ [0.3] × 0024 × 0308 × 0020 ÷ 11A8 ÷ # × [0.3] DOLLAR SIGN (PR) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] HANGUL JONGSEONG KIYEOK (JT) ÷ [0.3] -× 0024 × 1160 ÷ # × [0.3] DOLLAR SIGN (PR) × [27.03] HANGUL JUNGSEONG FILLER (JV) ÷ [0.3] +× 0024 × 1160 ÷ # × [0.3] DOLLAR SIGN (PR) × [27.02] HANGUL JUNGSEONG FILLER (JV) ÷ [0.3] × 0024 × 0020 ÷ 1160 ÷ # × [0.3] DOLLAR SIGN (PR) × [7.01] SPACE (SP) ÷ [18.0] HANGUL JUNGSEONG FILLER (JV) ÷ [0.3] -× 0024 × 0308 × 1160 ÷ # × [0.3] DOLLAR SIGN (PR) × [9.0] COMBINING DIAERESIS (CM1_CM) × [27.03] HANGUL JUNGSEONG FILLER (JV) ÷ [0.3] +× 0024 × 0308 × 1160 ÷ # × [0.3] DOLLAR SIGN (PR) × [9.0] COMBINING DIAERESIS (CM1_CM) × [27.02] HANGUL JUNGSEONG FILLER (JV) ÷ [0.3] × 0024 × 0308 × 0020 ÷ 1160 ÷ # × [0.3] DOLLAR SIGN (PR) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] HANGUL JUNGSEONG FILLER (JV) ÷ [0.3] × 0024 × 000A ÷ # × [0.3] DOLLAR SIGN (PR) × [6.0] (LF) ÷ [0.3] × 0024 × 0020 × 000A ÷ # × [0.3] DOLLAR SIGN (PR) × [7.01] SPACE (SP) × [6.0] (LF) ÷ [0.3] @@ -5838,9 +5838,9 @@ × 261D × 0020 ÷ 261D ÷ # × [0.3] WHITE UP POINTING INDEX (EB) × [7.01] SPACE (SP) ÷ [18.0] WHITE UP POINTING INDEX (EB) ÷ [0.3] × 261D × 0308 ÷ 261D ÷ # × [0.3] WHITE UP POINTING INDEX (EB) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] WHITE UP POINTING INDEX (EB) ÷ [0.3] × 261D × 0308 × 0020 ÷ 261D ÷ # × [0.3] WHITE UP POINTING INDEX (EB) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] WHITE UP POINTING INDEX (EB) ÷ [0.3] -× 261D × 1F3FB ÷ # × [0.3] WHITE UP POINTING INDEX (EB) × [30.2] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) ÷ [0.3] +× 261D × 1F3FB ÷ # × [0.3] WHITE UP POINTING INDEX (EB) × [30.21] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) ÷ [0.3] × 261D × 0020 ÷ 1F3FB ÷ # × [0.3] WHITE UP POINTING INDEX (EB) × [7.01] SPACE (SP) ÷ [18.0] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) ÷ [0.3] -× 261D × 0308 × 1F3FB ÷ # × [0.3] WHITE UP POINTING INDEX (EB) × [9.0] COMBINING DIAERESIS (CM1_CM) × [30.2] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) ÷ [0.3] +× 261D × 0308 × 1F3FB ÷ # × [0.3] WHITE UP POINTING INDEX (EB) × [9.0] COMBINING DIAERESIS (CM1_CM) × [30.21] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) ÷ [0.3] × 261D × 0308 × 0020 ÷ 1F3FB ÷ # × [0.3] WHITE UP POINTING INDEX (EB) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) ÷ [0.3] × 261D × 0029 ÷ # × [0.3] WHITE UP POINTING INDEX (EB) × [13.02] RIGHT PARENTHESIS (CP_CP30) ÷ [0.3] × 261D × 0020 × 0029 ÷ # × [0.3] WHITE UP POINTING INDEX (EB) × [7.01] SPACE (SP) × [13.02] RIGHT PARENTHESIS (CP_CP30) ÷ [0.3] @@ -7452,9 +7452,9 @@ × 1160 × 1160 ÷ # × [0.3] HANGUL JUNGSEONG FILLER (JV) × [26.02] HANGUL JUNGSEONG FILLER (JV) ÷ [0.3] × 11A8 × 11A8 ÷ # × [0.3] HANGUL JONGSEONG KIYEOK (JT) × [26.03] HANGUL JONGSEONG KIYEOK (JT) ÷ [0.3] × 1160 × 2024 ÷ # × [0.3] HANGUL JUNGSEONG FILLER (JV) × [22.0] ONE DOT LEADER (IN) ÷ [0.3] -× 1160 × 0025 ÷ # × [0.3] HANGUL JUNGSEONG FILLER (JV) × [27.02] PERCENT SIGN (PO) ÷ [0.3] -× 0024 × 1160 ÷ # × [0.3] DOLLAR SIGN (PR) × [27.03] HANGUL JUNGSEONG FILLER (JV) ÷ [0.3] -× 261D × 1F3FB ÷ # × [0.3] WHITE UP POINTING INDEX (EB) × [30.2] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) ÷ [0.3] +× 1160 × 0025 ÷ # × [0.3] HANGUL JUNGSEONG FILLER (JV) × [27.01] PERCENT SIGN (PO) ÷ [0.3] +× 0024 × 1160 ÷ # × [0.3] DOLLAR SIGN (PR) × [27.02] HANGUL JUNGSEONG FILLER (JV) ÷ [0.3] +× 261D × 1F3FB ÷ # × [0.3] WHITE UP POINTING INDEX (EB) × [30.21] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) ÷ [0.3] × 0066 × 0069 × 006E × 0061 × 006C ÷ # × [0.3] LATIN SMALL LETTER F (AL) × [28.0] LATIN SMALL LETTER I (AL) × [28.0] LATIN SMALL LETTER N (AL) × [28.0] LATIN SMALL LETTER A (AL) × [28.0] LATIN SMALL LETTER L (AL) ÷ [0.3] × 0063 × 0061 × 006E × 0027 × 0074 ÷ # × [0.3] LATIN SMALL LETTER C (AL) × [28.0] LATIN SMALL LETTER A (AL) × [28.0] LATIN SMALL LETTER N (AL) × [19.01] APOSTROPHE (QU) × [19.02] LATIN SMALL LETTER T (AL) ÷ [0.3] × 0063 × 0061 × 006E × 2019 × 0074 ÷ # × [0.3] LATIN SMALL LETTER C (AL) × [28.0] LATIN SMALL LETTER A (AL) × [28.0] LATIN SMALL LETTER N (AL) × [19.01] RIGHT SINGLE QUOTATION MARK (QU) × [19.02] LATIN SMALL LETTER T (AL) ÷ [0.3] @@ -7678,7 +7678,9 @@ × 1F1F7 × 1F1FA ÷ 1F1F8 × 1F1EA ÷ # × [0.3] REGIONAL INDICATOR SYMBOL LETTER R (RI) × [30.11] REGIONAL INDICATOR SYMBOL LETTER U (RI) ÷ [30.13] REGIONAL INDICATOR SYMBOL LETTER S (RI) × [30.11] REGIONAL INDICATOR SYMBOL LETTER E (RI) ÷ [0.3] × 1F1F7 × 1F1FA × 200B ÷ 1F1F8 × 1F1EA ÷ # × [0.3] REGIONAL INDICATOR SYMBOL LETTER R (RI) × [30.11] REGIONAL INDICATOR SYMBOL LETTER U (RI) × [7.02] ZERO WIDTH SPACE (ZW) ÷ [8.0] REGIONAL INDICATOR SYMBOL LETTER S (RI) × [30.12] REGIONAL INDICATOR SYMBOL LETTER E (RI) ÷ [0.3] × 05D0 × 002D × 05D0 ÷ # × [0.3] HEBREW LETTER ALEF (HL) × [21.02] HYPHEN-MINUS (HY) × [21.1] HEBREW LETTER ALEF (HL) ÷ [0.3] +× 1F02C × 1F3FF ÷ # × [0.3] (Other) × [30.22] EMOJI MODIFIER FITZPATRICK TYPE-6 (EM) ÷ [0.3] +× 00A9 ÷ 1F3FF ÷ # × [0.3] COPYRIGHT SIGN (AL) ÷ [999.0] EMOJI MODIFIER FITZPATRICK TYPE-6 (EM) ÷ [0.3] # -# Lines: 7652 +# Lines: 7654 # # EOF diff --git a/gnu/usr.bin/perl/lib/unicore/auxiliary/SBTest.txt b/gnu/usr.bin/perl/lib/unicore/auxiliary/SBTest.txt index 5ae1f881100..61ea42cf1a2 100644 --- a/gnu/usr.bin/perl/lib/unicore/auxiliary/SBTest.txt +++ b/gnu/usr.bin/perl/lib/unicore/auxiliary/SBTest.txt @@ -1,6 +1,6 @@ -# SentenceBreakTest-13.0.0.txt -# Date: 2019-11-20, 22:27:22 GMT -# © 2019 Unicode®, Inc. +# SentenceBreakTest-14.0.0.txt +# Date: 2021-03-08, 06:22:40 GMT +# © 2021 Unicode®, Inc. # Unicode and the Unicode Logo are registered trademarks of Unicode, Inc. in the U.S. and other countries. # For terms of use, see http://www.unicode.org/terms_of_use.html # diff --git a/gnu/usr.bin/perl/lib/unicore/auxiliary/SentenceBreakProperty.txt b/gnu/usr.bin/perl/lib/unicore/auxiliary/SentenceBreakProperty.txt index 432385b2694..4b12b854923 100644 --- a/gnu/usr.bin/perl/lib/unicore/auxiliary/SentenceBreakProperty.txt +++ b/gnu/usr.bin/perl/lib/unicore/auxiliary/SentenceBreakProperty.txt @@ -1,6 +1,6 @@ -# SentenceBreakProperty-13.0.0.txt -# Date: 2019-11-27, 03:13:39 GMT -# © 2019 Unicode®, Inc. +# SentenceBreakProperty-14.0.0.txt +# Date: 2021-08-12, 23:13:21 GMT +# © 2021 Unicode®, Inc. # Unicode and the Unicode Logo are registered trademarks of Unicode, Inc. in the U.S. and other countries. # For terms of use, see http://www.unicode.org/terms_of_use.html # @@ -55,7 +55,8 @@ 0825..0827 ; Extend # Mn [3] SAMARITAN VOWEL SIGN SHORT A..SAMARITAN VOWEL SIGN U 0829..082D ; Extend # Mn [5] SAMARITAN VOWEL SIGN LONG I..SAMARITAN MARK NEQUDAA 0859..085B ; Extend # Mn [3] MANDAIC AFFRICATION MARK..MANDAIC GEMINATION MARK -08D3..08E1 ; Extend # Mn [15] ARABIC SMALL LOW WAW..ARABIC SMALL HIGH SIGN SAFHA +0898..089F ; Extend # Mn [8] ARABIC SMALL HIGH WORD AL-JUZ..ARABIC HALF MADDA OVER MADDA +08CA..08E1 ; Extend # Mn [24] ARABIC SMALL HIGH FARSI YEH..ARABIC SMALL HIGH SIGN SAFHA 08E3..0902 ; Extend # Mn [32] ARABIC TURNED DAMMA BELOW..DEVANAGARI SIGN ANUSVARA 0903 ; Extend # Mc DEVANAGARI SIGN VISARGA 093A ; Extend # Mn DEVANAGARI VOWEL SIGN OE @@ -124,6 +125,7 @@ 0C00 ; Extend # Mn TELUGU SIGN COMBINING CANDRABINDU ABOVE 0C01..0C03 ; Extend # Mc [3] TELUGU SIGN CANDRABINDU..TELUGU SIGN VISARGA 0C04 ; Extend # Mn TELUGU SIGN COMBINING ANUSVARA ABOVE +0C3C ; Extend # Mn TELUGU SIGN NUKTA 0C3E..0C40 ; Extend # Mn [3] TELUGU VOWEL SIGN AA..TELUGU VOWEL SIGN II 0C41..0C44 ; Extend # Mc [4] TELUGU VOWEL SIGN U..TELUGU VOWEL SIGN VOCALIC RR 0C46..0C48 ; Extend # Mn [3] TELUGU VOWEL SIGN E..TELUGU VOWEL SIGN AI @@ -202,7 +204,9 @@ 109D ; Extend # Mn MYANMAR VOWEL SIGN AITON AI 135D..135F ; Extend # Mn [3] ETHIOPIC COMBINING GEMINATION AND VOWEL LENGTH MARK..ETHIOPIC COMBINING GEMINATION MARK 1712..1714 ; Extend # Mn [3] TAGALOG VOWEL SIGN I..TAGALOG SIGN VIRAMA -1732..1734 ; Extend # Mn [3] HANUNOO VOWEL SIGN I..HANUNOO SIGN PAMUDPOD +1715 ; Extend # Mc TAGALOG SIGN PAMUDPOD +1732..1733 ; Extend # Mn [2] HANUNOO VOWEL SIGN I..HANUNOO VOWEL SIGN U +1734 ; Extend # Mc HANUNOO SIGN PAMUDPOD 1752..1753 ; Extend # Mn [2] BUHID VOWEL SIGN I..BUHID VOWEL SIGN U 1772..1773 ; Extend # Mn [2] TAGBANWA VOWEL SIGN I..TAGBANWA VOWEL SIGN U 17B4..17B5 ; Extend # Mn [2] KHMER VOWEL INHERENT AQ..KHMER VOWEL INHERENT AA @@ -214,6 +218,7 @@ 17C9..17D3 ; Extend # Mn [11] KHMER SIGN MUUSIKATOAN..KHMER SIGN BATHAMASAT 17DD ; Extend # Mn KHMER SIGN ATTHACAN 180B..180D ; Extend # Mn [3] MONGOLIAN FREE VARIATION SELECTOR ONE..MONGOLIAN FREE VARIATION SELECTOR THREE +180F ; Extend # Mn MONGOLIAN FREE VARIATION SELECTOR FOUR 1885..1886 ; Extend # Mn [2] MONGOLIAN LETTER ALI GALI BALUDA..MONGOLIAN LETTER ALI GALI THREE BALUDA 18A9 ; Extend # Mn MONGOLIAN LETTER ALI GALI DAGALGA 1920..1922 ; Extend # Mn [3] LIMBU VOWEL SIGN A..LIMBU VOWEL SIGN U @@ -241,7 +246,7 @@ 1A7F ; Extend # Mn TAI THAM COMBINING CRYPTOGRAMMIC DOT 1AB0..1ABD ; Extend # Mn [14] COMBINING DOUBLED CIRCUMFLEX ACCENT..COMBINING PARENTHESES BELOW 1ABE ; Extend # Me COMBINING PARENTHESES OVERLAY -1ABF..1AC0 ; Extend # Mn [2] COMBINING LATIN SMALL LETTER W BELOW..COMBINING LATIN SMALL LETTER TURNED W BELOW +1ABF..1ACE ; Extend # Mn [16] COMBINING LATIN SMALL LETTER W BELOW..COMBINING LATIN SMALL LETTER INSULAR T 1B00..1B03 ; Extend # Mn [4] BALINESE SIGN ULU RICEM..BALINESE SIGN SURANG 1B04 ; Extend # Mc BALINESE SIGN BISAH 1B34 ; Extend # Mn BALINESE SIGN REREKAN @@ -281,8 +286,7 @@ 1CF4 ; Extend # Mn VEDIC TONE CANDRA ABOVE 1CF7 ; Extend # Mc VEDIC SIGN ATIKRAMA 1CF8..1CF9 ; Extend # Mn [2] VEDIC TONE RING ABOVE..VEDIC TONE DOUBLE RING ABOVE -1DC0..1DF9 ; Extend # Mn [58] COMBINING DOTTED GRAVE ACCENT..COMBINING WIDE INVERTED BRIDGE BELOW -1DFB..1DFF ; Extend # Mn [5] COMBINING DELETION MARK..COMBINING RIGHT ARROWHEAD AND DOWN ARROWHEAD BELOW +1DC0..1DFF ; Extend # Mn [64] COMBINING DOTTED GRAVE ACCENT..COMBINING RIGHT ARROWHEAD AND DOWN ARROWHEAD BELOW 200C..200D ; Extend # Cf [2] ZERO WIDTH NON-JOINER..ZERO WIDTH JOINER 20D0..20DC ; Extend # Mn [13] COMBINING LEFT HARPOON ABOVE..COMBINING FOUR DOTS ABOVE 20DD..20E0 ; Extend # Me [4] COMBINING ENCLOSING CIRCLE..COMBINING ENCLOSING CIRCLE BACKSLASH @@ -368,16 +372,20 @@ FF9E..FF9F ; Extend # Lm [2] HALFWIDTH KATAKANA VOICED SOUND MARK..HALFWIDT 10D24..10D27 ; Extend # Mn [4] HANIFI ROHINGYA SIGN HARBAHAY..HANIFI ROHINGYA SIGN TASSI 10EAB..10EAC ; Extend # Mn [2] YEZIDI COMBINING HAMZA MARK..YEZIDI COMBINING MADDA MARK 10F46..10F50 ; Extend # Mn [11] SOGDIAN COMBINING DOT BELOW..SOGDIAN COMBINING STROKE BELOW +10F82..10F85 ; Extend # Mn [4] OLD UYGHUR COMBINING DOT ABOVE..OLD UYGHUR COMBINING TWO DOTS BELOW 11000 ; Extend # Mc BRAHMI SIGN CANDRABINDU 11001 ; Extend # Mn BRAHMI SIGN ANUSVARA 11002 ; Extend # Mc BRAHMI SIGN VISARGA 11038..11046 ; Extend # Mn [15] BRAHMI VOWEL SIGN AA..BRAHMI VIRAMA +11070 ; Extend # Mn BRAHMI SIGN OLD TAMIL VIRAMA +11073..11074 ; Extend # Mn [2] BRAHMI VOWEL SIGN OLD TAMIL SHORT E..BRAHMI VOWEL SIGN OLD TAMIL SHORT O 1107F..11081 ; Extend # Mn [3] BRAHMI NUMBER JOINER..KAITHI SIGN ANUSVARA 11082 ; Extend # Mc KAITHI SIGN VISARGA 110B0..110B2 ; Extend # Mc [3] KAITHI VOWEL SIGN AA..KAITHI VOWEL SIGN II 110B3..110B6 ; Extend # Mn [4] KAITHI VOWEL SIGN U..KAITHI VOWEL SIGN AI 110B7..110B8 ; Extend # Mc [2] KAITHI VOWEL SIGN O..KAITHI VOWEL SIGN AU 110B9..110BA ; Extend # Mn [2] KAITHI SIGN VIRAMA..KAITHI SIGN NUKTA +110C2 ; Extend # Mn KAITHI VOWEL SIGN VOCALIC R 11100..11102 ; Extend # Mn [3] CHAKMA SIGN CANDRABINDU..CHAKMA SIGN VISARGA 11127..1112B ; Extend # Mn [5] CHAKMA VOWEL SIGN A..CHAKMA VOWEL SIGN UU 1112C ; Extend # Mc CHAKMA VOWEL SIGN E @@ -516,6 +524,8 @@ FF9E..FF9F ; Extend # Lm [2] HALFWIDTH KATAKANA VOICED SOUND MARK..HALFWIDT 16FE4 ; Extend # Mn KHITAN SMALL SCRIPT FILLER 16FF0..16FF1 ; Extend # Mc [2] VIETNAMESE ALTERNATE READING MARK CA..VIETNAMESE ALTERNATE READING MARK NHAY 1BC9D..1BC9E ; Extend # Mn [2] DUPLOYAN THICK LETTER SELECTOR..DUPLOYAN DOUBLE MARK +1CF00..1CF2D ; Extend # Mn [46] ZNAMENNY COMBINING MARK GORAZDO NIZKO S KRYZHEM ON LEFT..ZNAMENNY COMBINING MARK KRYZH ON LEFT +1CF30..1CF46 ; Extend # Mn [23] ZNAMENNY COMBINING TONAL RANGE MARK MRACHNO..ZNAMENNY PRIZNAK MODIFIER ROG 1D165..1D166 ; Extend # Mc [2] MUSICAL SYMBOL COMBINING STEM..MUSICAL SYMBOL COMBINING SPRECHGESANG STEM 1D167..1D169 ; Extend # Mn [3] MUSICAL SYMBOL COMBINING TREMOLO-1..MUSICAL SYMBOL COMBINING TREMOLO-3 1D16D..1D172 ; Extend # Mc [6] MUSICAL SYMBOL COMBINING AUGMENTATION DOT..MUSICAL SYMBOL COMBINING FLAG-5 @@ -535,13 +545,14 @@ FF9E..FF9F ; Extend # Lm [2] HALFWIDTH KATAKANA VOICED SOUND MARK..HALFWIDT 1E023..1E024 ; Extend # Mn [2] COMBINING GLAGOLITIC LETTER YU..COMBINING GLAGOLITIC LETTER SMALL YUS 1E026..1E02A ; Extend # Mn [5] COMBINING GLAGOLITIC LETTER YO..COMBINING GLAGOLITIC LETTER FITA 1E130..1E136 ; Extend # Mn [7] NYIAKENG PUACHUE HMONG TONE-B..NYIAKENG PUACHUE HMONG TONE-D +1E2AE ; Extend # Mn TOTO SIGN RISING TONE 1E2EC..1E2EF ; Extend # Mn [4] WANCHO TONE TUP..WANCHO TONE KOINI 1E8D0..1E8D6 ; Extend # Mn [7] MENDE KIKAKUI COMBINING NUMBER TEENS..MENDE KIKAKUI COMBINING NUMBER MILLIONS 1E944..1E94A ; Extend # Mn [7] ADLAM ALIF LENGTHENER..ADLAM NUKTA E0020..E007F ; Extend # Cf [96] TAG SPACE..CANCEL TAG E0100..E01EF ; Extend # Mn [240] VARIATION SELECTOR-17..VARIATION SELECTOR-256 -# Total code points: 2395 +# Total code points: 2508 # ================================================ @@ -558,6 +569,7 @@ E0100..E01EF ; Extend # Mn [240] VARIATION SELECTOR-17..VARIATION SELECTOR-256 061C ; Format # Cf ARABIC LETTER MARK 06DD ; Format # Cf ARABIC END OF AYAH 070F ; Format # Cf SYRIAC ABBREVIATION MARK +0890..0891 ; Format # Cf [2] ARABIC POUND MARK ABOVE..ARABIC PIASTRE MARK ABOVE 08E2 ; Format # Cf ARABIC DISPUTED END OF AYAH 180E ; Format # Cf MONGOLIAN VOWEL SEPARATOR 200B ; Format # Cf ZERO WIDTH SPACE @@ -574,7 +586,7 @@ FFF9..FFFB ; Format # Cf [3] INTERLINEAR ANNOTATION ANCHOR..INTERLINEAR ANN 1D173..1D17A ; Format # Cf [8] MUSICAL SYMBOL BEGIN BEAM..MUSICAL SYMBOL END PHRASE E0001 ; Format # Cf LANGUAGE TAG -# Total code points: 63 +# Total code points: 65 # ================================================ @@ -1035,7 +1047,7 @@ E0001 ; Format # Cf LANGUAGE TAG 2170..217F ; Lower # Nl [16] SMALL ROMAN NUMERAL ONE..SMALL ROMAN NUMERAL ONE THOUSAND 2184 ; Lower # L& LATIN SMALL LETTER REVERSED C 24D0..24E9 ; Lower # So [26] CIRCLED LATIN SMALL LETTER A..CIRCLED LATIN SMALL LETTER Z -2C30..2C5E ; Lower # L& [47] GLAGOLITIC SMALL LETTER AZU..GLAGOLITIC SMALL LETTER LATINATE MYSLITE +2C30..2C5F ; Lower # L& [48] GLAGOLITIC SMALL LETTER AZU..GLAGOLITIC SMALL LETTER CAUDATE CHRIVI 2C61 ; Lower # L& LATIN SMALL LETTER L WITH DOUBLE BAR 2C65..2C66 ; Lower # L& [2] LATIN SMALL LETTER A WITH STROKE..LATIN SMALL LETTER T WITH DIAGONAL STROKE 2C68 ; Lower # L& LATIN SMALL LETTER H WITH DESCENDER @@ -1207,9 +1219,15 @@ A7B9 ; Lower # L& LATIN SMALL LETTER U WITH STROKE A7BB ; Lower # L& LATIN SMALL LETTER GLOTTAL A A7BD ; Lower # L& LATIN SMALL LETTER GLOTTAL I A7BF ; Lower # L& LATIN SMALL LETTER GLOTTAL U +A7C1 ; Lower # L& LATIN SMALL LETTER OLD POLISH O A7C3 ; Lower # L& LATIN SMALL LETTER ANGLICANA W A7C8 ; Lower # L& LATIN SMALL LETTER D WITH SHORT STROKE OVERLAY A7CA ; Lower # L& LATIN SMALL LETTER S WITH SHORT STROKE OVERLAY +A7D1 ; Lower # L& LATIN SMALL LETTER CLOSED INSULAR G +A7D3 ; Lower # L& LATIN SMALL LETTER DOUBLE THORN +A7D5 ; Lower # L& LATIN SMALL LETTER DOUBLE WYNN +A7D7 ; Lower # L& LATIN SMALL LETTER MIDDLE SCOTS S +A7D9 ; Lower # L& LATIN SMALL LETTER SIGMOID S A7F6 ; Lower # L& LATIN SMALL LETTER REVERSED HALF H A7F8..A7F9 ; Lower # Lm [2] MODIFIER LETTER CAPITAL H WITH STROKE..MODIFIER LETTER SMALL LIGATURE OE A7FA ; Lower # L& LATIN LETTER SMALL CAPITAL TURNED M @@ -1222,6 +1240,14 @@ FB13..FB17 ; Lower # L& [5] ARMENIAN SMALL LIGATURE MEN NOW..ARMENIAN SMALL FF41..FF5A ; Lower # L& [26] FULLWIDTH LATIN SMALL LETTER A..FULLWIDTH LATIN SMALL LETTER Z 10428..1044F ; Lower # L& [40] DESERET SMALL LETTER LONG I..DESERET SMALL LETTER EW 104D8..104FB ; Lower # L& [36] OSAGE SMALL LETTER A..OSAGE SMALL LETTER ZHA +10597..105A1 ; Lower # L& [11] VITHKUQI SMALL LETTER A..VITHKUQI SMALL LETTER GA +105A3..105B1 ; Lower # L& [15] VITHKUQI SMALL LETTER HA..VITHKUQI SMALL LETTER RE +105B3..105B9 ; Lower # L& [7] VITHKUQI SMALL LETTER SE..VITHKUQI SMALL LETTER XE +105BB..105BC ; Lower # L& [2] VITHKUQI SMALL LETTER Y..VITHKUQI SMALL LETTER ZE +10780 ; Lower # Lm MODIFIER LETTER SMALL CAPITAL AA +10783..10785 ; Lower # Lm [3] MODIFIER LETTER SMALL AE..MODIFIER LETTER SMALL B WITH HOOK +10787..107B0 ; Lower # Lm [42] MODIFIER LETTER SMALL DZ DIGRAPH..MODIFIER LETTER SMALL V WITH RIGHT HOOK +107B2..107BA ; Lower # Lm [9] MODIFIER LETTER SMALL CAPITAL Y..MODIFIER LETTER SMALL S WITH CURL 10CC0..10CF2 ; Lower # L& [51] OLD HUNGARIAN SMALL LETTER A..OLD HUNGARIAN SMALL LETTER US 118C0..118DF ; Lower # L& [32] WARANG CITI SMALL LETTER NGAA..WARANG CITI SMALL LETTER VIYO 16E60..16E7F ; Lower # L& [32] MEDEFAIDRIN SMALL LETTER M..MEDEFAIDRIN SMALL LETTER Y @@ -1253,9 +1279,11 @@ FF41..FF5A ; Lower # L& [26] FULLWIDTH LATIN SMALL LETTER A..FULLWIDTH LATIN 1D7AA..1D7C2 ; Lower # L& [25] MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL ALPHA..MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL OMEGA 1D7C4..1D7C9 ; Lower # L& [6] MATHEMATICAL SANS-SERIF BOLD ITALIC EPSILON SYMBOL..MATHEMATICAL SANS-SERIF BOLD ITALIC PI SYMBOL 1D7CB ; Lower # L& MATHEMATICAL BOLD SMALL DIGAMMA +1DF00..1DF09 ; Lower # L& [10] LATIN SMALL LETTER FENG DIGRAPH WITH TRILL..LATIN SMALL LETTER T WITH HOOK AND RETROFLEX HOOK +1DF0B..1DF1E ; Lower # L& [20] LATIN SMALL LETTER ESH WITH DOUBLE BAR..LATIN SMALL LETTER S WITH CURL 1E922..1E943 ; Lower # L& [34] ADLAM SMALL LETTER ALIF..ADLAM SMALL LETTER SHA -# Total code points: 2297 +# Total code points: 2424 # ================================================ @@ -1693,7 +1721,7 @@ FF41..FF5A ; Lower # L& [26] FULLWIDTH LATIN SMALL LETTER A..FULLWIDTH LATIN 2160..216F ; Upper # Nl [16] ROMAN NUMERAL ONE..ROMAN NUMERAL ONE THOUSAND 2183 ; Upper # L& ROMAN NUMERAL REVERSED ONE HUNDRED 24B6..24CF ; Upper # So [26] CIRCLED LATIN CAPITAL LETTER A..CIRCLED LATIN CAPITAL LETTER Z -2C00..2C2E ; Upper # L& [47] GLAGOLITIC CAPITAL LETTER AZU..GLAGOLITIC CAPITAL LETTER LATINATE MYSLITE +2C00..2C2F ; Upper # L& [48] GLAGOLITIC CAPITAL LETTER AZU..GLAGOLITIC CAPITAL LETTER CAUDATE CHRIVI 2C60 ; Upper # L& LATIN CAPITAL LETTER L WITH DOUBLE BAR 2C62..2C64 ; Upper # L& [3] LATIN CAPITAL LETTER L WITH MIDDLE TILDE..LATIN CAPITAL LETTER R WITH TAIL 2C67 ; Upper # L& LATIN CAPITAL LETTER H WITH DESCENDER @@ -1858,13 +1886,21 @@ A7B8 ; Upper # L& LATIN CAPITAL LETTER U WITH STROKE A7BA ; Upper # L& LATIN CAPITAL LETTER GLOTTAL A A7BC ; Upper # L& LATIN CAPITAL LETTER GLOTTAL I A7BE ; Upper # L& LATIN CAPITAL LETTER GLOTTAL U +A7C0 ; Upper # L& LATIN CAPITAL LETTER OLD POLISH O A7C2 ; Upper # L& LATIN CAPITAL LETTER ANGLICANA W A7C4..A7C7 ; Upper # L& [4] LATIN CAPITAL LETTER C WITH PALATAL HOOK..LATIN CAPITAL LETTER D WITH SHORT STROKE OVERLAY A7C9 ; Upper # L& LATIN CAPITAL LETTER S WITH SHORT STROKE OVERLAY +A7D0 ; Upper # L& LATIN CAPITAL LETTER CLOSED INSULAR G +A7D6 ; Upper # L& LATIN CAPITAL LETTER MIDDLE SCOTS S +A7D8 ; Upper # L& LATIN CAPITAL LETTER SIGMOID S A7F5 ; Upper # L& LATIN CAPITAL LETTER REVERSED HALF H FF21..FF3A ; Upper # L& [26] FULLWIDTH LATIN CAPITAL LETTER A..FULLWIDTH LATIN CAPITAL LETTER Z 10400..10427 ; Upper # L& [40] DESERET CAPITAL LETTER LONG I..DESERET CAPITAL LETTER EW 104B0..104D3 ; Upper # L& [36] OSAGE CAPITAL LETTER A..OSAGE CAPITAL LETTER ZHA +10570..1057A ; Upper # L& [11] VITHKUQI CAPITAL LETTER A..VITHKUQI CAPITAL LETTER GA +1057C..1058A ; Upper # L& [15] VITHKUQI CAPITAL LETTER HA..VITHKUQI CAPITAL LETTER RE +1058C..10592 ; Upper # L& [7] VITHKUQI CAPITAL LETTER SE..VITHKUQI CAPITAL LETTER XE +10594..10595 ; Upper # L& [2] VITHKUQI CAPITAL LETTER Y..VITHKUQI CAPITAL LETTER ZE 10C80..10CB2 ; Upper # L& [51] OLD HUNGARIAN CAPITAL LETTER A..OLD HUNGARIAN CAPITAL LETTER US 118A0..118BF ; Upper # L& [32] WARANG CITI CAPITAL LETTER NGAA..WARANG CITI CAPITAL LETTER VIYO 16E40..16E5F ; Upper # L& [32] MEDEFAIDRIN CAPITAL LETTER M..MEDEFAIDRIN CAPITAL LETTER Y @@ -1904,7 +1940,7 @@ FF21..FF3A ; Upper # L& [26] FULLWIDTH LATIN CAPITAL LETTER A..FULLWIDTH LAT 1F150..1F169 ; Upper # So [26] NEGATIVE CIRCLED LATIN CAPITAL LETTER A..NEGATIVE CIRCLED LATIN CAPITAL LETTER Z 1F170..1F189 ; Upper # So [26] NEGATIVE SQUARED LATIN CAPITAL LETTER A..NEGATIVE SQUARED LATIN CAPITAL LETTER Z -# Total code points: 1896 +# Total code points: 1936 # ================================================ @@ -1943,8 +1979,10 @@ FF21..FF3A ; Upper # L& [26] FULLWIDTH LATIN CAPITAL LETTER A..FULLWIDTH LAT 0828 ; OLetter # Lm SAMARITAN MODIFIER LETTER I 0840..0858 ; OLetter # Lo [25] MANDAIC LETTER HALQA..MANDAIC LETTER AIN 0860..086A ; OLetter # Lo [11] SYRIAC LETTER MALAYALAM NGA..SYRIAC LETTER MALAYALAM SSA -08A0..08B4 ; OLetter # Lo [21] ARABIC LETTER BEH WITH SMALL V BELOW..ARABIC LETTER KAF WITH DOT BELOW -08B6..08C7 ; OLetter # Lo [18] ARABIC LETTER BEH WITH SMALL MEEM ABOVE..ARABIC LETTER LAM WITH SMALL ARABIC LETTER TAH ABOVE +0870..0887 ; OLetter # Lo [24] ARABIC LETTER ALEF WITH ATTACHED FATHA..ARABIC BASELINE ROUND DOT +0889..088E ; OLetter # Lo [6] ARABIC LETTER NOON WITH INVERTED SMALL V..ARABIC VERTICAL TAIL +08A0..08C8 ; OLetter # Lo [41] ARABIC LETTER BEH WITH SMALL V BELOW..ARABIC LETTER GRAF +08C9 ; OLetter # Lm ARABIC SMALL FARSI YEH 0904..0939 ; OLetter # Lo [54] DEVANAGARI LETTER SHORT A..DEVANAGARI LETTER HA 093D ; OLetter # Lo DEVANAGARI SIGN AVAGRAHA 0950 ; OLetter # Lo DEVANAGARI OM @@ -2010,6 +2048,7 @@ FF21..FF3A ; Upper # L& [26] FULLWIDTH LATIN CAPITAL LETTER A..FULLWIDTH LAT 0C2A..0C39 ; OLetter # Lo [16] TELUGU LETTER PA..TELUGU LETTER HA 0C3D ; OLetter # Lo TELUGU SIGN AVAGRAHA 0C58..0C5A ; OLetter # Lo [3] TELUGU LETTER TSA..TELUGU LETTER RRRA +0C5D ; OLetter # Lo TELUGU LETTER NAKAARA POLLU 0C60..0C61 ; OLetter # Lo [2] TELUGU LETTER VOCALIC RR..TELUGU LETTER VOCALIC LL 0C80 ; OLetter # Lo KANNADA SIGN SPACING CANDRABINDU 0C85..0C8C ; OLetter # Lo [8] KANNADA LETTER A..KANNADA LETTER VOCALIC L @@ -2018,7 +2057,7 @@ FF21..FF3A ; Upper # L& [26] FULLWIDTH LATIN CAPITAL LETTER A..FULLWIDTH LAT 0CAA..0CB3 ; OLetter # Lo [10] KANNADA LETTER PA..KANNADA LETTER LLA 0CB5..0CB9 ; OLetter # Lo [5] KANNADA LETTER VA..KANNADA LETTER HA 0CBD ; OLetter # Lo KANNADA SIGN AVAGRAHA -0CDE ; OLetter # Lo KANNADA LETTER FA +0CDD..0CDE ; OLetter # Lo [2] KANNADA LETTER NAKAARA POLLU..KANNADA LETTER FA 0CE0..0CE1 ; OLetter # Lo [2] KANNADA LETTER VOCALIC RR..KANNADA LETTER VOCALIC LL 0CF1..0CF2 ; OLetter # Lo [2] KANNADA SIGN JIHVAMULIYA..KANNADA SIGN UPADHMANIYA 0D04..0D0C ; OLetter # Lo [9] MALAYALAM LETTER VEDIC ANUSVARA..MALAYALAM LETTER VOCALIC L @@ -2088,9 +2127,8 @@ FF21..FF3A ; Upper # L& [26] FULLWIDTH LATIN CAPITAL LETTER A..FULLWIDTH LAT 16A0..16EA ; OLetter # Lo [75] RUNIC LETTER FEHU FEOH FE F..RUNIC LETTER X 16EE..16F0 ; OLetter # Nl [3] RUNIC ARLAUG SYMBOL..RUNIC BELGTHOR SYMBOL 16F1..16F8 ; OLetter # Lo [8] RUNIC LETTER K..RUNIC LETTER FRANKS CASKET AESC -1700..170C ; OLetter # Lo [13] TAGALOG LETTER A..TAGALOG LETTER YA -170E..1711 ; OLetter # Lo [4] TAGALOG LETTER LA..TAGALOG LETTER HA -1720..1731 ; OLetter # Lo [18] HANUNOO LETTER A..HANUNOO LETTER HA +1700..1711 ; OLetter # Lo [18] TAGALOG LETTER A..TAGALOG LETTER HA +171F..1731 ; OLetter # Lo [19] TAGALOG LETTER ARCHAIC RA..HANUNOO LETTER HA 1740..1751 ; OLetter # Lo [18] BUHID LETTER A..BUHID LETTER HA 1760..176C ; OLetter # Lo [13] TAGBANWA LETTER A..TAGBANWA LETTER YA 176E..1770 ; OLetter # Lo [3] TAGBANWA LETTER LA..TAGBANWA LETTER SA @@ -2113,7 +2151,7 @@ FF21..FF3A ; Upper # L& [26] FULLWIDTH LATIN CAPITAL LETTER A..FULLWIDTH LAT 1A20..1A54 ; OLetter # Lo [53] TAI THAM LETTER HIGH KA..TAI THAM LETTER GREAT SA 1AA7 ; OLetter # Lm TAI THAM SIGN MAI YAMOK 1B05..1B33 ; OLetter # Lo [47] BALINESE LETTER AKARA..BALINESE LETTER HA -1B45..1B4B ; OLetter # Lo [7] BALINESE LETTER KAF SASAK..BALINESE LETTER ASYURA SASAK +1B45..1B4C ; OLetter # Lo [8] BALINESE LETTER KAF SASAK..BALINESE LETTER ARCHAIC JNYA 1B83..1BA0 ; OLetter # Lo [30] SUNDANESE LETTER A..SUNDANESE LETTER HA 1BAE..1BAF ; OLetter # Lo [2] SUNDANESE LETTER KHA..SUNDANESE LETTER SYA 1BBA..1BE5 ; OLetter # Lo [44] SUNDANESE AVAGRAHA..BATAK LETTER U @@ -2161,8 +2199,7 @@ FF21..FF3A ; Upper # L& [26] FULLWIDTH LATIN CAPITAL LETTER A..FULLWIDTH LAT 31A0..31BF ; OLetter # Lo [32] BOPOMOFO LETTER BU..BOPOMOFO LETTER AH 31F0..31FF ; OLetter # Lo [16] KATAKANA LETTER SMALL KU..KATAKANA LETTER SMALL RO 3400..4DBF ; OLetter # Lo [6592] CJK UNIFIED IDEOGRAPH-3400..CJK UNIFIED IDEOGRAPH-4DBF -4E00..9FFC ; OLetter # Lo [20989] CJK UNIFIED IDEOGRAPH-4E00..CJK UNIFIED IDEOGRAPH-9FFC -A000..A014 ; OLetter # Lo [21] YI SYLLABLE IT..YI SYLLABLE E +4E00..A014 ; OLetter # Lo [21013] CJK UNIFIED IDEOGRAPH-4E00..YI SYLLABLE E A015 ; OLetter # Lm YI SYLLABLE WU A016..A48C ; OLetter # Lo [1143] YI SYLLABLE BIT..YI SYLLABLE YYR A4D0..A4F7 ; OLetter # Lo [40] LISU LETTER BA..LISU LETTER OE @@ -2178,6 +2215,7 @@ A6E6..A6EF ; OLetter # Nl [10] BAMUM LETTER MO..BAMUM LETTER KOGHOM A717..A71F ; OLetter # Lm [9] MODIFIER LETTER DOT VERTICAL BAR..MODIFIER LETTER LOW INVERTED EXCLAMATION MARK A788 ; OLetter # Lm MODIFIER LETTER LOW CIRCUMFLEX ACCENT A78F ; OLetter # Lo LATIN LETTER SINOLOGICAL DOT +A7F2..A7F4 ; OLetter # Lm [3] MODIFIER LETTER CAPITAL C..MODIFIER LETTER CAPITAL Q A7F7 ; OLetter # Lo LATIN EPIGRAPHIC LETTER SIDEWAYS I A7FB..A801 ; OLetter # Lo [7] LATIN EPIGRAPHIC LETTER REVERSED F..SYLOTI NAGRI LETTER I A803..A805 ; OLetter # Lo [3] SYLOTI NAGRI LETTER U..SYLOTI NAGRI LETTER O @@ -2275,6 +2313,7 @@ FFDA..FFDC ; OLetter # Lo [3] HALFWIDTH HANGUL LETTER EU..HALFWIDTH HANGUL 10600..10736 ; OLetter # Lo [311] LINEAR A SIGN AB001..LINEAR A SIGN A664 10740..10755 ; OLetter # Lo [22] LINEAR A SIGN A701 A..LINEAR A SIGN A732 JE 10760..10767 ; OLetter # Lo [8] LINEAR A SIGN A800..LINEAR A SIGN A807 +10781..10782 ; OLetter # Lm [2] MODIFIER LETTER SUPERSCRIPT TRIANGULAR COLON..MODIFIER LETTER SUPERSCRIPT HALF TRIANGULAR COLON 10800..10805 ; OLetter # Lo [6] CYPRIOT SYLLABLE A..CYPRIOT SYLLABLE JA 10808 ; OLetter # Lo CYPRIOT SYLLABLE JO 1080A..10835 ; OLetter # Lo [44] CYPRIOT SYLLABLE KA..CYPRIOT SYLLABLE WO @@ -2308,9 +2347,12 @@ FFDA..FFDC ; OLetter # Lo [3] HALFWIDTH HANGUL LETTER EU..HALFWIDTH HANGUL 10F00..10F1C ; OLetter # Lo [29] OLD SOGDIAN LETTER ALEPH..OLD SOGDIAN LETTER FINAL TAW WITH VERTICAL TAIL 10F27 ; OLetter # Lo OLD SOGDIAN LIGATURE AYIN-DALETH 10F30..10F45 ; OLetter # Lo [22] SOGDIAN LETTER ALEPH..SOGDIAN INDEPENDENT SHIN +10F70..10F81 ; OLetter # Lo [18] OLD UYGHUR LETTER ALEPH..OLD UYGHUR LETTER LESH 10FB0..10FC4 ; OLetter # Lo [21] CHORASMIAN LETTER ALEPH..CHORASMIAN LETTER TAW 10FE0..10FF6 ; OLetter # Lo [23] ELYMAIC LETTER ALEPH..ELYMAIC LIGATURE ZAYIN-YODH 11003..11037 ; OLetter # Lo [53] BRAHMI SIGN JIHVAMULIYA..BRAHMI LETTER OLD TAMIL NNNA +11071..11072 ; OLetter # Lo [2] BRAHMI LETTER OLD TAMIL SHORT E..BRAHMI LETTER OLD TAMIL SHORT O +11075 ; OLetter # Lo BRAHMI LETTER OLD TAMIL LLA 11083..110AF ; OLetter # Lo [45] KAITHI LETTER A..KAITHI LETTER HA 110D0..110E8 ; OLetter # Lo [25] SORA SOMPENG LETTER SAH..SORA SOMPENG LETTER MAE 11103..11126 ; OLetter # Lo [36] CHAKMA LETTER AA..CHAKMA LETTER HAA @@ -2352,6 +2394,7 @@ FFDA..FFDC ; OLetter # Lo [3] HALFWIDTH HANGUL LETTER EU..HALFWIDTH HANGUL 11680..116AA ; OLetter # Lo [43] TAKRI LETTER A..TAKRI LETTER RRA 116B8 ; OLetter # Lo TAKRI LETTER ARCHAIC KHA 11700..1171A ; OLetter # Lo [27] AHOM LETTER KA..AHOM LETTER ALTERNATE BA +11740..11746 ; OLetter # Lo [7] AHOM LETTER CA..AHOM LETTER LLA 11800..1182B ; OLetter # Lo [44] DOGRA LETTER A..DOGRA LETTER RRA 118FF..11906 ; OLetter # Lo [8] WARANG CITI OM..DIVES AKURU LETTER E 11909 ; OLetter # Lo DIVES AKURU LETTER O @@ -2370,7 +2413,7 @@ FFDA..FFDC ; OLetter # Lo [3] HALFWIDTH HANGUL LETTER EU..HALFWIDTH HANGUL 11A50 ; OLetter # Lo SOYOMBO LETTER A 11A5C..11A89 ; OLetter # Lo [46] SOYOMBO LETTER KA..SOYOMBO CLUSTER-INITIAL LETTER SA 11A9D ; OLetter # Lo SOYOMBO MARK PLUTA -11AC0..11AF8 ; OLetter # Lo [57] PAU CIN HAU LETTER PA..PAU CIN HAU GLOTTAL STOP FINAL +11AB0..11AF8 ; OLetter # Lo [73] CANADIAN SYLLABICS NATTILIK HI..PAU CIN HAU GLOTTAL STOP FINAL 11C00..11C08 ; OLetter # Lo [9] BHAIKSUKI LETTER A..BHAIKSUKI LETTER VOCALIC L 11C0A..11C2E ; OLetter # Lo [37] BHAIKSUKI LETTER E..BHAIKSUKI LETTER HA 11C40 ; OLetter # Lo BHAIKSUKI SIGN AVAGRAHA @@ -2388,10 +2431,12 @@ FFDA..FFDC ; OLetter # Lo [3] HALFWIDTH HANGUL LETTER EU..HALFWIDTH HANGUL 12000..12399 ; OLetter # Lo [922] CUNEIFORM SIGN A..CUNEIFORM SIGN U U 12400..1246E ; OLetter # Nl [111] CUNEIFORM NUMERIC SIGN TWO ASH..CUNEIFORM NUMERIC SIGN NINE U VARIANT FORM 12480..12543 ; OLetter # Lo [196] CUNEIFORM SIGN AB TIMES NUN TENU..CUNEIFORM SIGN ZU5 TIMES THREE DISH TENU +12F90..12FF0 ; OLetter # Lo [97] CYPRO-MINOAN SIGN CM001..CYPRO-MINOAN SIGN CM114 13000..1342E ; OLetter # Lo [1071] EGYPTIAN HIEROGLYPH A001..EGYPTIAN HIEROGLYPH AA032 14400..14646 ; OLetter # Lo [583] ANATOLIAN HIEROGLYPH A001..ANATOLIAN HIEROGLYPH A530 16800..16A38 ; OLetter # Lo [569] BAMUM LETTER PHASE-A NGKUE MFON..BAMUM LETTER PHASE-F VUEQ 16A40..16A5E ; OLetter # Lo [31] MRO LETTER TA..MRO LETTER TEK +16A70..16ABE ; OLetter # Lo [79] TANGSA LETTER OZ..TANGSA LETTER ZA 16AD0..16AED ; OLetter # Lo [30] BASSA VAH LETTER ENNI..BASSA VAH LETTER I 16B00..16B2F ; OLetter # Lo [48] PAHAWH HMONG VOWEL KEEB..PAHAWH HMONG CONSONANT CAU 16B40..16B43 ; OLetter # Lm [4] PAHAWH HMONG SIGN VOS SEEV..PAHAWH HMONG SIGN IB YAM @@ -2405,7 +2450,10 @@ FFDA..FFDC ; OLetter # Lo [3] HALFWIDTH HANGUL LETTER EU..HALFWIDTH HANGUL 17000..187F7 ; OLetter # Lo [6136] TANGUT IDEOGRAPH-17000..TANGUT IDEOGRAPH-187F7 18800..18CD5 ; OLetter # Lo [1238] TANGUT COMPONENT-001..KHITAN SMALL SCRIPT CHARACTER-18CD5 18D00..18D08 ; OLetter # Lo [9] TANGUT IDEOGRAPH-18D00..TANGUT IDEOGRAPH-18D08 -1B000..1B11E ; OLetter # Lo [287] KATAKANA LETTER ARCHAIC E..HENTAIGANA LETTER N-MU-MO-2 +1AFF0..1AFF3 ; OLetter # Lm [4] KATAKANA LETTER MINNAN TONE-2..KATAKANA LETTER MINNAN TONE-5 +1AFF5..1AFFB ; OLetter # Lm [7] KATAKANA LETTER MINNAN TONE-7..KATAKANA LETTER MINNAN NASALIZED TONE-5 +1AFFD..1AFFE ; OLetter # Lm [2] KATAKANA LETTER MINNAN NASALIZED TONE-7..KATAKANA LETTER MINNAN NASALIZED TONE-8 +1B000..1B122 ; OLetter # Lo [291] KATAKANA LETTER ARCHAIC E..KATAKANA LETTER ARCHAIC WU 1B150..1B152 ; OLetter # Lo [3] HIRAGANA LETTER SMALL WI..HIRAGANA LETTER SMALL WO 1B164..1B167 ; OLetter # Lo [4] KATAKANA LETTER SMALL WI..KATAKANA LETTER SMALL N 1B170..1B2FB ; OLetter # Lo [396] NUSHU CHARACTER-1B170..NUSHU CHARACTER-1B2FB @@ -2413,10 +2461,16 @@ FFDA..FFDC ; OLetter # Lo [3] HALFWIDTH HANGUL LETTER EU..HALFWIDTH HANGUL 1BC70..1BC7C ; OLetter # Lo [13] DUPLOYAN AFFIX LEFT HORIZONTAL SECANT..DUPLOYAN AFFIX ATTACHED TANGENT HOOK 1BC80..1BC88 ; OLetter # Lo [9] DUPLOYAN AFFIX HIGH ACUTE..DUPLOYAN AFFIX HIGH VERTICAL 1BC90..1BC99 ; OLetter # Lo [10] DUPLOYAN AFFIX LOW ACUTE..DUPLOYAN AFFIX LOW ARROW +1DF0A ; OLetter # Lo LATIN LETTER RETROFLEX CLICK WITH RETROFLEX HOOK 1E100..1E12C ; OLetter # Lo [45] NYIAKENG PUACHUE HMONG LETTER MA..NYIAKENG PUACHUE HMONG LETTER W 1E137..1E13D ; OLetter # Lm [7] NYIAKENG PUACHUE HMONG SIGN FOR PERSON..NYIAKENG PUACHUE HMONG SYLLABLE LENGTHENER 1E14E ; OLetter # Lo NYIAKENG PUACHUE HMONG LOGOGRAM NYAJ +1E290..1E2AD ; OLetter # Lo [30] TOTO LETTER PA..TOTO LETTER A 1E2C0..1E2EB ; OLetter # Lo [44] WANCHO LETTER AA..WANCHO LETTER YIH +1E7E0..1E7E6 ; OLetter # Lo [7] ETHIOPIC SYLLABLE HHYA..ETHIOPIC SYLLABLE HHYO +1E7E8..1E7EB ; OLetter # Lo [4] ETHIOPIC SYLLABLE GURAGE HHWA..ETHIOPIC SYLLABLE HHWE +1E7ED..1E7EE ; OLetter # Lo [2] ETHIOPIC SYLLABLE GURAGE MWI..ETHIOPIC SYLLABLE GURAGE MWEE +1E7F0..1E7FE ; OLetter # Lo [15] ETHIOPIC SYLLABLE GURAGE QWI..ETHIOPIC SYLLABLE GURAGE PWEE 1E800..1E8C4 ; OLetter # Lo [197] MENDE KIKAKUI SYLLABLE M001 KI..MENDE KIKAKUI SYLLABLE M060 NYON 1E94B ; OLetter # Lm ADLAM NASALIZATION MARK 1EE00..1EE03 ; OLetter # Lo [4] ARABIC MATHEMATICAL ALEF..ARABIC MATHEMATICAL DAL @@ -2452,15 +2506,15 @@ FFDA..FFDC ; OLetter # Lo [3] HALFWIDTH HANGUL LETTER EU..HALFWIDTH HANGUL 1EEA1..1EEA3 ; OLetter # Lo [3] ARABIC MATHEMATICAL DOUBLE-STRUCK BEH..ARABIC MATHEMATICAL DOUBLE-STRUCK DAL 1EEA5..1EEA9 ; OLetter # Lo [5] ARABIC MATHEMATICAL DOUBLE-STRUCK WAW..ARABIC MATHEMATICAL DOUBLE-STRUCK YEH 1EEAB..1EEBB ; OLetter # Lo [17] ARABIC MATHEMATICAL DOUBLE-STRUCK LAM..ARABIC MATHEMATICAL DOUBLE-STRUCK GHAIN -20000..2A6DD ; OLetter # Lo [42718] CJK UNIFIED IDEOGRAPH-20000..CJK UNIFIED IDEOGRAPH-2A6DD -2A700..2B734 ; OLetter # Lo [4149] CJK UNIFIED IDEOGRAPH-2A700..CJK UNIFIED IDEOGRAPH-2B734 +20000..2A6DF ; OLetter # Lo [42720] CJK UNIFIED IDEOGRAPH-20000..CJK UNIFIED IDEOGRAPH-2A6DF +2A700..2B738 ; OLetter # Lo [4153] CJK UNIFIED IDEOGRAPH-2A700..CJK UNIFIED IDEOGRAPH-2B738 2B740..2B81D ; OLetter # Lo [222] CJK UNIFIED IDEOGRAPH-2B740..CJK UNIFIED IDEOGRAPH-2B81D 2B820..2CEA1 ; OLetter # Lo [5762] CJK UNIFIED IDEOGRAPH-2B820..CJK UNIFIED IDEOGRAPH-2CEA1 2CEB0..2EBE0 ; OLetter # Lo [7473] CJK UNIFIED IDEOGRAPH-2CEB0..CJK UNIFIED IDEOGRAPH-2EBE0 2F800..2FA1D ; OLetter # Lo [542] CJK COMPATIBILITY IDEOGRAPH-2F800..CJK COMPATIBILITY IDEOGRAPH-2FA1D 30000..3134A ; OLetter # Lo [4939] CJK UNIFIED IDEOGRAPH-30000..CJK UNIFIED IDEOGRAPH-3134A -# Total code points: 127413 +# Total code points: 127761 # ================================================ @@ -2520,6 +2574,7 @@ FF10..FF19 ; Numeric # Nd [10] FULLWIDTH DIGIT ZERO..FULLWIDTH DIGIT NINE 11D50..11D59 ; Numeric # Nd [10] MASARAM GONDI DIGIT ZERO..MASARAM GONDI DIGIT NINE 11DA0..11DA9 ; Numeric # Nd [10] GUNJALA GONDI DIGIT ZERO..GUNJALA GONDI DIGIT NINE 16A60..16A69 ; Numeric # Nd [10] MRO DIGIT ZERO..MRO DIGIT NINE +16AC0..16AC9 ; Numeric # Nd [10] TANGSA DIGIT ZERO..TANGSA DIGIT NINE 16B50..16B59 ; Numeric # Nd [10] PAHAWH HMONG DIGIT ZERO..PAHAWH HMONG DIGIT NINE 1D7CE..1D7FF ; Numeric # Nd [50] MATHEMATICAL BOLD DIGIT ZERO..MATHEMATICAL MONOSPACE DIGIT NINE 1E140..1E149 ; Numeric # Nd [10] NYIAKENG PUACHUE HMONG DIGIT ZERO..NYIAKENG PUACHUE HMONG DIGIT NINE @@ -2527,7 +2582,7 @@ FF10..FF19 ; Numeric # Nd [10] FULLWIDTH DIGIT ZERO..FULLWIDTH DIGIT NINE 1E950..1E959 ; Numeric # Nd [10] ADLAM DIGIT ZERO..ADLAM DIGIT NINE 1FBF0..1FBF9 ; Numeric # Nd [10] SEGMENTED DIGIT ZERO..SEGMENTED DIGIT NINE -# Total code points: 652 +# Total code points: 662 # ================================================ @@ -2543,7 +2598,7 @@ FF0E ; ATerm # Po FULLWIDTH FULL STOP 0021 ; STerm # Po EXCLAMATION MARK 003F ; STerm # Po QUESTION MARK 0589 ; STerm # Po ARMENIAN FULL STOP -061E..061F ; STerm # Po [2] ARABIC TRIPLE DOT PUNCTUATION MARK..ARABIC QUESTION MARK +061D..061F ; STerm # Po [3] ARABIC END OF TEXT MARK..ARABIC QUESTION MARK 06D4 ; STerm # Po ARABIC FULL STOP 0700..0702 ; STerm # Po [3] SYRIAC END OF PARAGRAPH..SYRIAC SUBLINEAR FULL STOP 07F9 ; STerm # Po NKO EXCLAMATION MARK @@ -2562,12 +2617,14 @@ FF0E ; ATerm # Po FULLWIDTH FULL STOP 1AA8..1AAB ; STerm # Po [4] TAI THAM SIGN KAAN..TAI THAM SIGN SATKAANKUU 1B5A..1B5B ; STerm # Po [2] BALINESE PANTI..BALINESE PAMADA 1B5E..1B5F ; STerm # Po [2] BALINESE CARIK SIKI..BALINESE CARIK PAREREN +1B7D..1B7E ; STerm # Po [2] BALINESE PANTI LANTANG..BALINESE PAMADA LANTANG 1C3B..1C3C ; STerm # Po [2] LEPCHA PUNCTUATION TA-ROL..LEPCHA PUNCTUATION NYET THYOOM TA-ROL 1C7E..1C7F ; STerm # Po [2] OL CHIKI PUNCTUATION MUCAAD..OL CHIKI PUNCTUATION DOUBLE MUCAAD 203C..203D ; STerm # Po [2] DOUBLE EXCLAMATION MARK..INTERROBANG 2047..2049 ; STerm # Po [3] DOUBLE QUESTION MARK..EXCLAMATION QUESTION MARK 2E2E ; STerm # Po REVERSED QUESTION MARK 2E3C ; STerm # Po STENOGRAPHIC FULL STOP +2E53..2E54 ; STerm # Po [2] MEDIEVAL EXCLAMATION MARK..MEDIEVAL QUESTION MARK 3002 ; STerm # Po IDEOGRAPHIC FULL STOP A4FF ; STerm # Po LISU PUNCTUATION FULL STOP A60E..A60F ; STerm # Po [2] VAI FULL STOP..VAI QUESTION MARK @@ -2586,6 +2643,7 @@ FF1F ; STerm # Po FULLWIDTH QUESTION MARK FF61 ; STerm # Po HALFWIDTH IDEOGRAPHIC FULL STOP 10A56..10A57 ; STerm # Po [2] KHAROSHTHI PUNCTUATION DANDA..KHAROSHTHI PUNCTUATION DOUBLE DANDA 10F55..10F59 ; STerm # Po [5] SOGDIAN PUNCTUATION TWO VERTICAL BARS..SOGDIAN PUNCTUATION HALF CIRCLE WITH DOT +10F86..10F89 ; STerm # Po [4] OLD UYGHUR PUNCTUATION BAR..OLD UYGHUR PUNCTUATION FOUR DOTS 11047..11048 ; STerm # Po [2] BRAHMI DANDA..BRAHMI DOUBLE DANDA 110BE..110C1 ; STerm # Po [4] KAITHI SECTION MARK..KAITHI DOUBLE DANDA 11141..11143 ; STerm # Po [3] CHAKMA DANDA..CHAKMA QUESTION MARK @@ -2614,7 +2672,7 @@ FF61 ; STerm # Po HALFWIDTH IDEOGRAPHIC FULL STOP 1BC9F ; STerm # Po DUPLOYAN PUNCTUATION CHINOOK FULL STOP 1DA88 ; STerm # Po SIGNWRITING FULL STOP -# Total code points: 140 +# Total code points: 149 # ================================================ @@ -2734,6 +2792,14 @@ FF61 ; STerm # Po HALFWIDTH IDEOGRAPHIC FULL STOP 2E28 ; Close # Ps LEFT DOUBLE PARENTHESIS 2E29 ; Close # Pe RIGHT DOUBLE PARENTHESIS 2E42 ; Close # Ps DOUBLE LOW-REVERSED-9 QUOTATION MARK +2E55 ; Close # Ps LEFT SQUARE BRACKET WITH STROKE +2E56 ; Close # Pe RIGHT SQUARE BRACKET WITH STROKE +2E57 ; Close # Ps LEFT SQUARE BRACKET WITH DOUBLE STROKE +2E58 ; Close # Pe RIGHT SQUARE BRACKET WITH DOUBLE STROKE +2E59 ; Close # Ps TOP HALF LEFT PARENTHESIS +2E5A ; Close # Pe TOP HALF RIGHT PARENTHESIS +2E5B ; Close # Ps BOTTOM HALF LEFT PARENTHESIS +2E5C ; Close # Pe BOTTOM HALF RIGHT PARENTHESIS 3008 ; Close # Ps LEFT ANGLE BRACKET 3009 ; Close # Pe RIGHT ANGLE BRACKET 300A ; Close # Ps LEFT DOUBLE ANGLE BRACKET @@ -2794,7 +2860,7 @@ FF62 ; Close # Ps HALFWIDTH LEFT CORNER BRACKET FF63 ; Close # Pe HALFWIDTH RIGHT CORNER BRACKET 1F676..1F678 ; Close # So [3] SANS-SERIF HEAVY DOUBLE TURNED COMMA QUOTATION MARK ORNAMENT..SANS-SERIF HEAVY LOW DOUBLE COMMA QUOTATION MARK ORNAMENT -# Total code points: 187 +# Total code points: 195 # ================================================ diff --git a/gnu/usr.bin/perl/lib/unicore/auxiliary/WBTest.txt b/gnu/usr.bin/perl/lib/unicore/auxiliary/WBTest.txt index 3e85759b85a..1d1435bfc76 100644 --- a/gnu/usr.bin/perl/lib/unicore/auxiliary/WBTest.txt +++ b/gnu/usr.bin/perl/lib/unicore/auxiliary/WBTest.txt @@ -1,6 +1,6 @@ -# WordBreakTest-13.0.0.txt -# Date: 2019-11-20, 22:27:23 GMT -# © 2019 Unicode®, Inc. +# WordBreakTest-14.0.0.txt +# Date: 2021-03-08, 06:22:40 GMT +# © 2021 Unicode®, Inc. # Unicode and the Unicode Logo are registered trademarks of Unicode, Inc. in the U.S. and other countries. # For terms of use, see http://www.unicode.org/terms_of_use.html # diff --git a/gnu/usr.bin/perl/lib/unicore/auxiliary/WordBreakProperty.txt b/gnu/usr.bin/perl/lib/unicore/auxiliary/WordBreakProperty.txt index 36d1438c26c..73cd069dcb2 100644 --- a/gnu/usr.bin/perl/lib/unicore/auxiliary/WordBreakProperty.txt +++ b/gnu/usr.bin/perl/lib/unicore/auxiliary/WordBreakProperty.txt @@ -1,6 +1,6 @@ -# WordBreakProperty-13.0.0.txt -# Date: 2020-01-22, 00:07:44 GMT -# © 2020 Unicode®, Inc. +# WordBreakProperty-14.0.0.txt +# Date: 2021-07-10, 00:35:32 GMT +# © 2021 Unicode®, Inc. # Unicode and the Unicode Logo are registered trademarks of Unicode, Inc. in the U.S. and other countries. # For terms of use, see http://www.unicode.org/terms_of_use.html # @@ -91,7 +91,8 @@ FB46..FB4F ; Hebrew_Letter # Lo [10] HEBREW LETTER TSADI WITH DAGESH..HEBREW 0825..0827 ; Extend # Mn [3] SAMARITAN VOWEL SIGN SHORT A..SAMARITAN VOWEL SIGN U 0829..082D ; Extend # Mn [5] SAMARITAN VOWEL SIGN LONG I..SAMARITAN MARK NEQUDAA 0859..085B ; Extend # Mn [3] MANDAIC AFFRICATION MARK..MANDAIC GEMINATION MARK -08D3..08E1 ; Extend # Mn [15] ARABIC SMALL LOW WAW..ARABIC SMALL HIGH SIGN SAFHA +0898..089F ; Extend # Mn [8] ARABIC SMALL HIGH WORD AL-JUZ..ARABIC HALF MADDA OVER MADDA +08CA..08E1 ; Extend # Mn [24] ARABIC SMALL HIGH FARSI YEH..ARABIC SMALL HIGH SIGN SAFHA 08E3..0902 ; Extend # Mn [32] ARABIC TURNED DAMMA BELOW..DEVANAGARI SIGN ANUSVARA 0903 ; Extend # Mc DEVANAGARI SIGN VISARGA 093A ; Extend # Mn DEVANAGARI VOWEL SIGN OE @@ -160,6 +161,7 @@ FB46..FB4F ; Hebrew_Letter # Lo [10] HEBREW LETTER TSADI WITH DAGESH..HEBREW 0C00 ; Extend # Mn TELUGU SIGN COMBINING CANDRABINDU ABOVE 0C01..0C03 ; Extend # Mc [3] TELUGU SIGN CANDRABINDU..TELUGU SIGN VISARGA 0C04 ; Extend # Mn TELUGU SIGN COMBINING ANUSVARA ABOVE +0C3C ; Extend # Mn TELUGU SIGN NUKTA 0C3E..0C40 ; Extend # Mn [3] TELUGU VOWEL SIGN AA..TELUGU VOWEL SIGN II 0C41..0C44 ; Extend # Mc [4] TELUGU VOWEL SIGN U..TELUGU VOWEL SIGN VOCALIC RR 0C46..0C48 ; Extend # Mn [3] TELUGU VOWEL SIGN E..TELUGU VOWEL SIGN AI @@ -238,7 +240,9 @@ FB46..FB4F ; Hebrew_Letter # Lo [10] HEBREW LETTER TSADI WITH DAGESH..HEBREW 109D ; Extend # Mn MYANMAR VOWEL SIGN AITON AI 135D..135F ; Extend # Mn [3] ETHIOPIC COMBINING GEMINATION AND VOWEL LENGTH MARK..ETHIOPIC COMBINING GEMINATION MARK 1712..1714 ; Extend # Mn [3] TAGALOG VOWEL SIGN I..TAGALOG SIGN VIRAMA -1732..1734 ; Extend # Mn [3] HANUNOO VOWEL SIGN I..HANUNOO SIGN PAMUDPOD +1715 ; Extend # Mc TAGALOG SIGN PAMUDPOD +1732..1733 ; Extend # Mn [2] HANUNOO VOWEL SIGN I..HANUNOO VOWEL SIGN U +1734 ; Extend # Mc HANUNOO SIGN PAMUDPOD 1752..1753 ; Extend # Mn [2] BUHID VOWEL SIGN I..BUHID VOWEL SIGN U 1772..1773 ; Extend # Mn [2] TAGBANWA VOWEL SIGN I..TAGBANWA VOWEL SIGN U 17B4..17B5 ; Extend # Mn [2] KHMER VOWEL INHERENT AQ..KHMER VOWEL INHERENT AA @@ -250,6 +254,7 @@ FB46..FB4F ; Hebrew_Letter # Lo [10] HEBREW LETTER TSADI WITH DAGESH..HEBREW 17C9..17D3 ; Extend # Mn [11] KHMER SIGN MUUSIKATOAN..KHMER SIGN BATHAMASAT 17DD ; Extend # Mn KHMER SIGN ATTHACAN 180B..180D ; Extend # Mn [3] MONGOLIAN FREE VARIATION SELECTOR ONE..MONGOLIAN FREE VARIATION SELECTOR THREE +180F ; Extend # Mn MONGOLIAN FREE VARIATION SELECTOR FOUR 1885..1886 ; Extend # Mn [2] MONGOLIAN LETTER ALI GALI BALUDA..MONGOLIAN LETTER ALI GALI THREE BALUDA 18A9 ; Extend # Mn MONGOLIAN LETTER ALI GALI DAGALGA 1920..1922 ; Extend # Mn [3] LIMBU VOWEL SIGN A..LIMBU VOWEL SIGN U @@ -277,7 +282,7 @@ FB46..FB4F ; Hebrew_Letter # Lo [10] HEBREW LETTER TSADI WITH DAGESH..HEBREW 1A7F ; Extend # Mn TAI THAM COMBINING CRYPTOGRAMMIC DOT 1AB0..1ABD ; Extend # Mn [14] COMBINING DOUBLED CIRCUMFLEX ACCENT..COMBINING PARENTHESES BELOW 1ABE ; Extend # Me COMBINING PARENTHESES OVERLAY -1ABF..1AC0 ; Extend # Mn [2] COMBINING LATIN SMALL LETTER W BELOW..COMBINING LATIN SMALL LETTER TURNED W BELOW +1ABF..1ACE ; Extend # Mn [16] COMBINING LATIN SMALL LETTER W BELOW..COMBINING LATIN SMALL LETTER INSULAR T 1B00..1B03 ; Extend # Mn [4] BALINESE SIGN ULU RICEM..BALINESE SIGN SURANG 1B04 ; Extend # Mc BALINESE SIGN BISAH 1B34 ; Extend # Mn BALINESE SIGN REREKAN @@ -317,8 +322,7 @@ FB46..FB4F ; Hebrew_Letter # Lo [10] HEBREW LETTER TSADI WITH DAGESH..HEBREW 1CF4 ; Extend # Mn VEDIC TONE CANDRA ABOVE 1CF7 ; Extend # Mc VEDIC SIGN ATIKRAMA 1CF8..1CF9 ; Extend # Mn [2] VEDIC TONE RING ABOVE..VEDIC TONE DOUBLE RING ABOVE -1DC0..1DF9 ; Extend # Mn [58] COMBINING DOTTED GRAVE ACCENT..COMBINING WIDE INVERTED BRIDGE BELOW -1DFB..1DFF ; Extend # Mn [5] COMBINING DELETION MARK..COMBINING RIGHT ARROWHEAD AND DOWN ARROWHEAD BELOW +1DC0..1DFF ; Extend # Mn [64] COMBINING DOTTED GRAVE ACCENT..COMBINING RIGHT ARROWHEAD AND DOWN ARROWHEAD BELOW 200C ; Extend # Cf ZERO WIDTH NON-JOINER 20D0..20DC ; Extend # Mn [13] COMBINING LEFT HARPOON ABOVE..COMBINING FOUR DOTS ABOVE 20DD..20E0 ; Extend # Me [4] COMBINING ENCLOSING CIRCLE..COMBINING ENCLOSING CIRCLE BACKSLASH @@ -404,16 +408,20 @@ FF9E..FF9F ; Extend # Lm [2] HALFWIDTH KATAKANA VOICED SOUND MARK..HALFWIDT 10D24..10D27 ; Extend # Mn [4] HANIFI ROHINGYA SIGN HARBAHAY..HANIFI ROHINGYA SIGN TASSI 10EAB..10EAC ; Extend # Mn [2] YEZIDI COMBINING HAMZA MARK..YEZIDI COMBINING MADDA MARK 10F46..10F50 ; Extend # Mn [11] SOGDIAN COMBINING DOT BELOW..SOGDIAN COMBINING STROKE BELOW +10F82..10F85 ; Extend # Mn [4] OLD UYGHUR COMBINING DOT ABOVE..OLD UYGHUR COMBINING TWO DOTS BELOW 11000 ; Extend # Mc BRAHMI SIGN CANDRABINDU 11001 ; Extend # Mn BRAHMI SIGN ANUSVARA 11002 ; Extend # Mc BRAHMI SIGN VISARGA 11038..11046 ; Extend # Mn [15] BRAHMI VOWEL SIGN AA..BRAHMI VIRAMA +11070 ; Extend # Mn BRAHMI SIGN OLD TAMIL VIRAMA +11073..11074 ; Extend # Mn [2] BRAHMI VOWEL SIGN OLD TAMIL SHORT E..BRAHMI VOWEL SIGN OLD TAMIL SHORT O 1107F..11081 ; Extend # Mn [3] BRAHMI NUMBER JOINER..KAITHI SIGN ANUSVARA 11082 ; Extend # Mc KAITHI SIGN VISARGA 110B0..110B2 ; Extend # Mc [3] KAITHI VOWEL SIGN AA..KAITHI VOWEL SIGN II 110B3..110B6 ; Extend # Mn [4] KAITHI VOWEL SIGN U..KAITHI VOWEL SIGN AI 110B7..110B8 ; Extend # Mc [2] KAITHI VOWEL SIGN O..KAITHI VOWEL SIGN AU 110B9..110BA ; Extend # Mn [2] KAITHI SIGN VIRAMA..KAITHI SIGN NUKTA +110C2 ; Extend # Mn KAITHI VOWEL SIGN VOCALIC R 11100..11102 ; Extend # Mn [3] CHAKMA SIGN CANDRABINDU..CHAKMA SIGN VISARGA 11127..1112B ; Extend # Mn [5] CHAKMA VOWEL SIGN A..CHAKMA VOWEL SIGN UU 1112C ; Extend # Mc CHAKMA VOWEL SIGN E @@ -552,6 +560,8 @@ FF9E..FF9F ; Extend # Lm [2] HALFWIDTH KATAKANA VOICED SOUND MARK..HALFWIDT 16FE4 ; Extend # Mn KHITAN SMALL SCRIPT FILLER 16FF0..16FF1 ; Extend # Mc [2] VIETNAMESE ALTERNATE READING MARK CA..VIETNAMESE ALTERNATE READING MARK NHAY 1BC9D..1BC9E ; Extend # Mn [2] DUPLOYAN THICK LETTER SELECTOR..DUPLOYAN DOUBLE MARK +1CF00..1CF2D ; Extend # Mn [46] ZNAMENNY COMBINING MARK GORAZDO NIZKO S KRYZHEM ON LEFT..ZNAMENNY COMBINING MARK KRYZH ON LEFT +1CF30..1CF46 ; Extend # Mn [23] ZNAMENNY COMBINING TONAL RANGE MARK MRACHNO..ZNAMENNY PRIZNAK MODIFIER ROG 1D165..1D166 ; Extend # Mc [2] MUSICAL SYMBOL COMBINING STEM..MUSICAL SYMBOL COMBINING SPRECHGESANG STEM 1D167..1D169 ; Extend # Mn [3] MUSICAL SYMBOL COMBINING TREMOLO-1..MUSICAL SYMBOL COMBINING TREMOLO-3 1D16D..1D172 ; Extend # Mc [6] MUSICAL SYMBOL COMBINING AUGMENTATION DOT..MUSICAL SYMBOL COMBINING FLAG-5 @@ -571,6 +581,7 @@ FF9E..FF9F ; Extend # Lm [2] HALFWIDTH KATAKANA VOICED SOUND MARK..HALFWIDT 1E023..1E024 ; Extend # Mn [2] COMBINING GLAGOLITIC LETTER YU..COMBINING GLAGOLITIC LETTER SMALL YUS 1E026..1E02A ; Extend # Mn [5] COMBINING GLAGOLITIC LETTER YO..COMBINING GLAGOLITIC LETTER FITA 1E130..1E136 ; Extend # Mn [7] NYIAKENG PUACHUE HMONG TONE-B..NYIAKENG PUACHUE HMONG TONE-D +1E2AE ; Extend # Mn TOTO SIGN RISING TONE 1E2EC..1E2EF ; Extend # Mn [4] WANCHO TONE TUP..WANCHO TONE KOINI 1E8D0..1E8D6 ; Extend # Mn [7] MENDE KIKAKUI COMBINING NUMBER TEENS..MENDE KIKAKUI COMBINING NUMBER MILLIONS 1E944..1E94A ; Extend # Mn [7] ADLAM ALIF LENGTHENER..ADLAM NUKTA @@ -578,7 +589,7 @@ FF9E..FF9F ; Extend # Lm [2] HALFWIDTH KATAKANA VOICED SOUND MARK..HALFWIDT E0020..E007F ; Extend # Cf [96] TAG SPACE..CANCEL TAG E0100..E01EF ; Extend # Mn [240] VARIATION SELECTOR-17..VARIATION SELECTOR-256 -# Total code points: 2399 +# Total code points: 2512 # ================================================ @@ -593,6 +604,7 @@ E0100..E01EF ; Extend # Mn [240] VARIATION SELECTOR-17..VARIATION SELECTOR-256 061C ; Format # Cf ARABIC LETTER MARK 06DD ; Format # Cf ARABIC END OF AYAH 070F ; Format # Cf SYRIAC ABBREVIATION MARK +0890..0891 ; Format # Cf [2] ARABIC POUND MARK ABOVE..ARABIC PIASTRE MARK ABOVE 08E2 ; Format # Cf ARABIC DISPUTED END OF AYAH 180E ; Format # Cf MONGOLIAN VOWEL SEPARATOR 200E..200F ; Format # Cf [2] LEFT-TO-RIGHT MARK..RIGHT-TO-LEFT MARK @@ -608,7 +620,7 @@ FFF9..FFFB ; Format # Cf [3] INTERLINEAR ANNOTATION ANCHOR..INTERLINEAR ANN 1D173..1D17A ; Format # Cf [8] MUSICAL SYMBOL BEGIN BEAM..MUSICAL SYMBOL END PHRASE E0001 ; Format # Cf LANGUAGE TAG -# Total code points: 62 +# Total code points: 64 # ================================================ @@ -624,10 +636,14 @@ E0001 ; Format # Cf LANGUAGE TAG FF66..FF6F ; Katakana # Lo [10] HALFWIDTH KATAKANA LETTER WO..HALFWIDTH KATAKANA LETTER SMALL TU FF70 ; Katakana # Lm HALFWIDTH KATAKANA-HIRAGANA PROLONGED SOUND MARK FF71..FF9D ; Katakana # Lo [45] HALFWIDTH KATAKANA LETTER A..HALFWIDTH KATAKANA LETTER N +1AFF0..1AFF3 ; Katakana # Lm [4] KATAKANA LETTER MINNAN TONE-2..KATAKANA LETTER MINNAN TONE-5 +1AFF5..1AFFB ; Katakana # Lm [7] KATAKANA LETTER MINNAN TONE-7..KATAKANA LETTER MINNAN NASALIZED TONE-5 +1AFFD..1AFFE ; Katakana # Lm [2] KATAKANA LETTER MINNAN NASALIZED TONE-7..KATAKANA LETTER MINNAN NASALIZED TONE-8 1B000 ; Katakana # Lo KATAKANA LETTER ARCHAIC E +1B120..1B122 ; Katakana # Lo [3] KATAKANA LETTER ARCHAIC YI..KATAKANA LETTER ARCHAIC WU 1B164..1B167 ; Katakana # Lo [4] KATAKANA LETTER SMALL WI..KATAKANA LETTER SMALL N -# Total code points: 314 +# Total code points: 330 # ================================================ @@ -699,8 +715,10 @@ FF71..FF9D ; Katakana # Lo [45] HALFWIDTH KATAKANA LETTER A..HALFWIDTH KATAK 0828 ; ALetter # Lm SAMARITAN MODIFIER LETTER I 0840..0858 ; ALetter # Lo [25] MANDAIC LETTER HALQA..MANDAIC LETTER AIN 0860..086A ; ALetter # Lo [11] SYRIAC LETTER MALAYALAM NGA..SYRIAC LETTER MALAYALAM SSA -08A0..08B4 ; ALetter # Lo [21] ARABIC LETTER BEH WITH SMALL V BELOW..ARABIC LETTER KAF WITH DOT BELOW -08B6..08C7 ; ALetter # Lo [18] ARABIC LETTER BEH WITH SMALL MEEM ABOVE..ARABIC LETTER LAM WITH SMALL ARABIC LETTER TAH ABOVE +0870..0887 ; ALetter # Lo [24] ARABIC LETTER ALEF WITH ATTACHED FATHA..ARABIC BASELINE ROUND DOT +0889..088E ; ALetter # Lo [6] ARABIC LETTER NOON WITH INVERTED SMALL V..ARABIC VERTICAL TAIL +08A0..08C8 ; ALetter # Lo [41] ARABIC LETTER BEH WITH SMALL V BELOW..ARABIC LETTER GRAF +08C9 ; ALetter # Lm ARABIC SMALL FARSI YEH 0904..0939 ; ALetter # Lo [54] DEVANAGARI LETTER SHORT A..DEVANAGARI LETTER HA 093D ; ALetter # Lo DEVANAGARI SIGN AVAGRAHA 0950 ; ALetter # Lo DEVANAGARI OM @@ -766,6 +784,7 @@ FF71..FF9D ; Katakana # Lo [45] HALFWIDTH KATAKANA LETTER A..HALFWIDTH KATAK 0C2A..0C39 ; ALetter # Lo [16] TELUGU LETTER PA..TELUGU LETTER HA 0C3D ; ALetter # Lo TELUGU SIGN AVAGRAHA 0C58..0C5A ; ALetter # Lo [3] TELUGU LETTER TSA..TELUGU LETTER RRRA +0C5D ; ALetter # Lo TELUGU LETTER NAKAARA POLLU 0C60..0C61 ; ALetter # Lo [2] TELUGU LETTER VOCALIC RR..TELUGU LETTER VOCALIC LL 0C80 ; ALetter # Lo KANNADA SIGN SPACING CANDRABINDU 0C85..0C8C ; ALetter # Lo [8] KANNADA LETTER A..KANNADA LETTER VOCALIC L @@ -774,7 +793,7 @@ FF71..FF9D ; Katakana # Lo [45] HALFWIDTH KATAKANA LETTER A..HALFWIDTH KATAK 0CAA..0CB3 ; ALetter # Lo [10] KANNADA LETTER PA..KANNADA LETTER LLA 0CB5..0CB9 ; ALetter # Lo [5] KANNADA LETTER VA..KANNADA LETTER HA 0CBD ; ALetter # Lo KANNADA SIGN AVAGRAHA -0CDE ; ALetter # Lo KANNADA LETTER FA +0CDD..0CDE ; ALetter # Lo [2] KANNADA LETTER NAKAARA POLLU..KANNADA LETTER FA 0CE0..0CE1 ; ALetter # Lo [2] KANNADA LETTER VOCALIC RR..KANNADA LETTER VOCALIC LL 0CF1..0CF2 ; ALetter # Lo [2] KANNADA SIGN JIHVAMULIYA..KANNADA SIGN UPADHMANIYA 0D04..0D0C ; ALetter # Lo [9] MALAYALAM LETTER VEDIC ANUSVARA..MALAYALAM LETTER VOCALIC L @@ -825,9 +844,8 @@ FF71..FF9D ; Katakana # Lo [45] HALFWIDTH KATAKANA LETTER A..HALFWIDTH KATAK 16A0..16EA ; ALetter # Lo [75] RUNIC LETTER FEHU FEOH FE F..RUNIC LETTER X 16EE..16F0 ; ALetter # Nl [3] RUNIC ARLAUG SYMBOL..RUNIC BELGTHOR SYMBOL 16F1..16F8 ; ALetter # Lo [8] RUNIC LETTER K..RUNIC LETTER FRANKS CASKET AESC -1700..170C ; ALetter # Lo [13] TAGALOG LETTER A..TAGALOG LETTER YA -170E..1711 ; ALetter # Lo [4] TAGALOG LETTER LA..TAGALOG LETTER HA -1720..1731 ; ALetter # Lo [18] HANUNOO LETTER A..HANUNOO LETTER HA +1700..1711 ; ALetter # Lo [18] TAGALOG LETTER A..TAGALOG LETTER HA +171F..1731 ; ALetter # Lo [19] TAGALOG LETTER ARCHAIC RA..HANUNOO LETTER HA 1740..1751 ; ALetter # Lo [18] BUHID LETTER A..BUHID LETTER HA 1760..176C ; ALetter # Lo [13] TAGBANWA LETTER A..TAGBANWA LETTER YA 176E..1770 ; ALetter # Lo [3] TAGBANWA LETTER LA..TAGBANWA LETTER SA @@ -841,7 +859,7 @@ FF71..FF9D ; Katakana # Lo [45] HALFWIDTH KATAKANA LETTER A..HALFWIDTH KATAK 1900..191E ; ALetter # Lo [31] LIMBU VOWEL-CARRIER LETTER..LIMBU LETTER TRA 1A00..1A16 ; ALetter # Lo [23] BUGINESE LETTER KA..BUGINESE LETTER HA 1B05..1B33 ; ALetter # Lo [47] BALINESE LETTER AKARA..BALINESE LETTER HA -1B45..1B4B ; ALetter # Lo [7] BALINESE LETTER KAF SASAK..BALINESE LETTER ASYURA SASAK +1B45..1B4C ; ALetter # Lo [8] BALINESE LETTER KAF SASAK..BALINESE LETTER ARCHAIC JNYA 1B83..1BA0 ; ALetter # Lo [30] SUNDANESE LETTER A..SUNDANESE LETTER HA 1BAE..1BAF ; ALetter # Lo [2] SUNDANESE LETTER KHA..SUNDANESE LETTER SYA 1BBA..1BE5 ; ALetter # Lo [44] SUNDANESE AVAGRAHA..BATAK LETTER U @@ -903,9 +921,7 @@ FF71..FF9D ; Katakana # Lo [45] HALFWIDTH KATAKANA LETTER A..HALFWIDTH KATAK 2183..2184 ; ALetter # L& [2] ROMAN NUMERAL REVERSED ONE HUNDRED..LATIN SMALL LETTER REVERSED C 2185..2188 ; ALetter # Nl [4] ROMAN NUMERAL SIX LATE FORM..ROMAN NUMERAL ONE HUNDRED THOUSAND 24B6..24E9 ; ALetter # So [52] CIRCLED LATIN CAPITAL LETTER A..CIRCLED LATIN SMALL LETTER Z -2C00..2C2E ; ALetter # L& [47] GLAGOLITIC CAPITAL LETTER AZU..GLAGOLITIC CAPITAL LETTER LATINATE MYSLITE -2C30..2C5E ; ALetter # L& [47] GLAGOLITIC SMALL LETTER AZU..GLAGOLITIC SMALL LETTER LATINATE MYSLITE -2C60..2C7B ; ALetter # L& [28] LATIN CAPITAL LETTER L WITH DOUBLE BAR..LATIN LETTER SMALL CAPITAL TURNED E +2C00..2C7B ; ALetter # L& [124] GLAGOLITIC CAPITAL LETTER AZU..LATIN LETTER SMALL CAPITAL TURNED E 2C7C..2C7D ; ALetter # Lm [2] LATIN SUBSCRIPT SMALL LETTER J..MODIFIER LETTER CAPITAL V 2C7E..2CE4 ; ALetter # L& [103] LATIN CAPITAL LETTER S WITH SWASH TAIL..COPTIC SYMBOL KAI 2CEB..2CEE ; ALetter # L& [4] COPTIC CAPITAL LETTER CRYPTOGRAMMIC SHEI..COPTIC SMALL LETTER CRYPTOGRAMMIC GANGIA @@ -957,8 +973,11 @@ A788 ; ALetter # Lm MODIFIER LETTER LOW CIRCUMFLEX ACCENT A789..A78A ; ALetter # Sk [2] MODIFIER LETTER COLON..MODIFIER LETTER SHORT EQUALS SIGN A78B..A78E ; ALetter # L& [4] LATIN CAPITAL LETTER SALTILLO..LATIN SMALL LETTER L WITH RETROFLEX HOOK AND BELT A78F ; ALetter # Lo LATIN LETTER SINOLOGICAL DOT -A790..A7BF ; ALetter # L& [48] LATIN CAPITAL LETTER N WITH DESCENDER..LATIN SMALL LETTER GLOTTAL U -A7C2..A7CA ; ALetter # L& [9] LATIN CAPITAL LETTER ANGLICANA W..LATIN SMALL LETTER S WITH SHORT STROKE OVERLAY +A790..A7CA ; ALetter # L& [59] LATIN CAPITAL LETTER N WITH DESCENDER..LATIN SMALL LETTER S WITH SHORT STROKE OVERLAY +A7D0..A7D1 ; ALetter # L& [2] LATIN CAPITAL LETTER CLOSED INSULAR G..LATIN SMALL LETTER CLOSED INSULAR G +A7D3 ; ALetter # L& LATIN SMALL LETTER DOUBLE THORN +A7D5..A7D9 ; ALetter # L& [5] LATIN SMALL LETTER DOUBLE WYNN..LATIN SMALL LETTER SIGMOID S +A7F2..A7F4 ; ALetter # Lm [3] MODIFIER LETTER CAPITAL C..MODIFIER LETTER CAPITAL Q A7F5..A7F6 ; ALetter # L& [2] LATIN CAPITAL LETTER REVERSED HALF H..LATIN SMALL LETTER REVERSED HALF H A7F7 ; ALetter # Lo LATIN EPIGRAPHIC LETTER SIDEWAYS I A7F8..A7F9 ; ALetter # Lm [2] MODIFIER LETTER CAPITAL H WITH STROKE..MODIFIER LETTER SMALL LIGATURE OE @@ -1040,9 +1059,20 @@ FFDA..FFDC ; ALetter # Lo [3] HALFWIDTH HANGUL LETTER EU..HALFWIDTH HANGUL 104D8..104FB ; ALetter # L& [36] OSAGE SMALL LETTER A..OSAGE SMALL LETTER ZHA 10500..10527 ; ALetter # Lo [40] ELBASAN LETTER A..ELBASAN LETTER KHE 10530..10563 ; ALetter # Lo [52] CAUCASIAN ALBANIAN LETTER ALT..CAUCASIAN ALBANIAN LETTER KIW +10570..1057A ; ALetter # L& [11] VITHKUQI CAPITAL LETTER A..VITHKUQI CAPITAL LETTER GA +1057C..1058A ; ALetter # L& [15] VITHKUQI CAPITAL LETTER HA..VITHKUQI CAPITAL LETTER RE +1058C..10592 ; ALetter # L& [7] VITHKUQI CAPITAL LETTER SE..VITHKUQI CAPITAL LETTER XE +10594..10595 ; ALetter # L& [2] VITHKUQI CAPITAL LETTER Y..VITHKUQI CAPITAL LETTER ZE +10597..105A1 ; ALetter # L& [11] VITHKUQI SMALL LETTER A..VITHKUQI SMALL LETTER GA +105A3..105B1 ; ALetter # L& [15] VITHKUQI SMALL LETTER HA..VITHKUQI SMALL LETTER RE +105B3..105B9 ; ALetter # L& [7] VITHKUQI SMALL LETTER SE..VITHKUQI SMALL LETTER XE +105BB..105BC ; ALetter # L& [2] VITHKUQI SMALL LETTER Y..VITHKUQI SMALL LETTER ZE 10600..10736 ; ALetter # Lo [311] LINEAR A SIGN AB001..LINEAR A SIGN A664 10740..10755 ; ALetter # Lo [22] LINEAR A SIGN A701 A..LINEAR A SIGN A732 JE 10760..10767 ; ALetter # Lo [8] LINEAR A SIGN A800..LINEAR A SIGN A807 +10780..10785 ; ALetter # Lm [6] MODIFIER LETTER SMALL CAPITAL AA..MODIFIER LETTER SMALL B WITH HOOK +10787..107B0 ; ALetter # Lm [42] MODIFIER LETTER SMALL DZ DIGRAPH..MODIFIER LETTER SMALL V WITH RIGHT HOOK +107B2..107BA ; ALetter # Lm [9] MODIFIER LETTER SMALL CAPITAL Y..MODIFIER LETTER SMALL S WITH CURL 10800..10805 ; ALetter # Lo [6] CYPRIOT SYLLABLE A..CYPRIOT SYLLABLE JA 10808 ; ALetter # Lo CYPRIOT SYLLABLE JO 1080A..10835 ; ALetter # Lo [44] CYPRIOT SYLLABLE KA..CYPRIOT SYLLABLE WO @@ -1078,9 +1108,12 @@ FFDA..FFDC ; ALetter # Lo [3] HALFWIDTH HANGUL LETTER EU..HALFWIDTH HANGUL 10F00..10F1C ; ALetter # Lo [29] OLD SOGDIAN LETTER ALEPH..OLD SOGDIAN LETTER FINAL TAW WITH VERTICAL TAIL 10F27 ; ALetter # Lo OLD SOGDIAN LIGATURE AYIN-DALETH 10F30..10F45 ; ALetter # Lo [22] SOGDIAN LETTER ALEPH..SOGDIAN INDEPENDENT SHIN +10F70..10F81 ; ALetter # Lo [18] OLD UYGHUR LETTER ALEPH..OLD UYGHUR LETTER LESH 10FB0..10FC4 ; ALetter # Lo [21] CHORASMIAN LETTER ALEPH..CHORASMIAN LETTER TAW 10FE0..10FF6 ; ALetter # Lo [23] ELYMAIC LETTER ALEPH..ELYMAIC LIGATURE ZAYIN-YODH 11003..11037 ; ALetter # Lo [53] BRAHMI SIGN JIHVAMULIYA..BRAHMI LETTER OLD TAMIL NNNA +11071..11072 ; ALetter # Lo [2] BRAHMI LETTER OLD TAMIL SHORT E..BRAHMI LETTER OLD TAMIL SHORT O +11075 ; ALetter # Lo BRAHMI LETTER OLD TAMIL LLA 11083..110AF ; ALetter # Lo [45] KAITHI LETTER A..KAITHI LETTER HA 110D0..110E8 ; ALetter # Lo [25] SORA SOMPENG LETTER SAH..SORA SOMPENG LETTER MAE 11103..11126 ; ALetter # Lo [36] CHAKMA LETTER AA..CHAKMA LETTER HAA @@ -1140,7 +1173,7 @@ FFDA..FFDC ; ALetter # Lo [3] HALFWIDTH HANGUL LETTER EU..HALFWIDTH HANGUL 11A50 ; ALetter # Lo SOYOMBO LETTER A 11A5C..11A89 ; ALetter # Lo [46] SOYOMBO LETTER KA..SOYOMBO CLUSTER-INITIAL LETTER SA 11A9D ; ALetter # Lo SOYOMBO MARK PLUTA -11AC0..11AF8 ; ALetter # Lo [57] PAU CIN HAU LETTER PA..PAU CIN HAU GLOTTAL STOP FINAL +11AB0..11AF8 ; ALetter # Lo [73] CANADIAN SYLLABICS NATTILIK HI..PAU CIN HAU GLOTTAL STOP FINAL 11C00..11C08 ; ALetter # Lo [9] BHAIKSUKI LETTER A..BHAIKSUKI LETTER VOCALIC L 11C0A..11C2E ; ALetter # Lo [37] BHAIKSUKI LETTER E..BHAIKSUKI LETTER HA 11C40 ; ALetter # Lo BHAIKSUKI SIGN AVAGRAHA @@ -1158,10 +1191,12 @@ FFDA..FFDC ; ALetter # Lo [3] HALFWIDTH HANGUL LETTER EU..HALFWIDTH HANGUL 12000..12399 ; ALetter # Lo [922] CUNEIFORM SIGN A..CUNEIFORM SIGN U U 12400..1246E ; ALetter # Nl [111] CUNEIFORM NUMERIC SIGN TWO ASH..CUNEIFORM NUMERIC SIGN NINE U VARIANT FORM 12480..12543 ; ALetter # Lo [196] CUNEIFORM SIGN AB TIMES NUN TENU..CUNEIFORM SIGN ZU5 TIMES THREE DISH TENU +12F90..12FF0 ; ALetter # Lo [97] CYPRO-MINOAN SIGN CM001..CYPRO-MINOAN SIGN CM114 13000..1342E ; ALetter # Lo [1071] EGYPTIAN HIEROGLYPH A001..EGYPTIAN HIEROGLYPH AA032 14400..14646 ; ALetter # Lo [583] ANATOLIAN HIEROGLYPH A001..ANATOLIAN HIEROGLYPH A530 16800..16A38 ; ALetter # Lo [569] BAMUM LETTER PHASE-A NGKUE MFON..BAMUM LETTER PHASE-F VUEQ 16A40..16A5E ; ALetter # Lo [31] MRO LETTER TA..MRO LETTER TEK +16A70..16ABE ; ALetter # Lo [79] TANGSA LETTER OZ..TANGSA LETTER ZA 16AD0..16AED ; ALetter # Lo [30] BASSA VAH LETTER ENNI..BASSA VAH LETTER I 16B00..16B2F ; ALetter # Lo [48] PAHAWH HMONG VOWEL KEEB..PAHAWH HMONG CONSONANT CAU 16B40..16B43 ; ALetter # Lm [4] PAHAWH HMONG SIGN VOS SEEV..PAHAWH HMONG SIGN IB YAM @@ -1207,10 +1242,18 @@ FFDA..FFDC ; ALetter # Lo [3] HALFWIDTH HANGUL LETTER EU..HALFWIDTH HANGUL 1D78A..1D7A8 ; ALetter # L& [31] MATHEMATICAL SANS-SERIF BOLD EPSILON SYMBOL..MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL OMEGA 1D7AA..1D7C2 ; ALetter # L& [25] MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL ALPHA..MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL OMEGA 1D7C4..1D7CB ; ALetter # L& [8] MATHEMATICAL SANS-SERIF BOLD ITALIC EPSILON SYMBOL..MATHEMATICAL BOLD SMALL DIGAMMA +1DF00..1DF09 ; ALetter # L& [10] LATIN SMALL LETTER FENG DIGRAPH WITH TRILL..LATIN SMALL LETTER T WITH HOOK AND RETROFLEX HOOK +1DF0A ; ALetter # Lo LATIN LETTER RETROFLEX CLICK WITH RETROFLEX HOOK +1DF0B..1DF1E ; ALetter # L& [20] LATIN SMALL LETTER ESH WITH DOUBLE BAR..LATIN SMALL LETTER S WITH CURL 1E100..1E12C ; ALetter # Lo [45] NYIAKENG PUACHUE HMONG LETTER MA..NYIAKENG PUACHUE HMONG LETTER W 1E137..1E13D ; ALetter # Lm [7] NYIAKENG PUACHUE HMONG SIGN FOR PERSON..NYIAKENG PUACHUE HMONG SYLLABLE LENGTHENER 1E14E ; ALetter # Lo NYIAKENG PUACHUE HMONG LOGOGRAM NYAJ +1E290..1E2AD ; ALetter # Lo [30] TOTO LETTER PA..TOTO LETTER A 1E2C0..1E2EB ; ALetter # Lo [44] WANCHO LETTER AA..WANCHO LETTER YIH +1E7E0..1E7E6 ; ALetter # Lo [7] ETHIOPIC SYLLABLE HHYA..ETHIOPIC SYLLABLE HHYO +1E7E8..1E7EB ; ALetter # Lo [4] ETHIOPIC SYLLABLE GURAGE HHWA..ETHIOPIC SYLLABLE HHWE +1E7ED..1E7EE ; ALetter # Lo [2] ETHIOPIC SYLLABLE GURAGE MWI..ETHIOPIC SYLLABLE GURAGE MWEE +1E7F0..1E7FE ; ALetter # Lo [15] ETHIOPIC SYLLABLE GURAGE QWI..ETHIOPIC SYLLABLE GURAGE PWEE 1E800..1E8C4 ; ALetter # Lo [197] MENDE KIKAKUI SYLLABLE M001 KI..MENDE KIKAKUI SYLLABLE M060 NYON 1E900..1E943 ; ALetter # L& [68] ADLAM CAPITAL LETTER ALIF..ADLAM SMALL LETTER SHA 1E94B ; ALetter # Lm ADLAM NASALIZATION MARK @@ -1251,7 +1294,7 @@ FFDA..FFDC ; ALetter # Lo [3] HALFWIDTH HANGUL LETTER EU..HALFWIDTH HANGUL 1F150..1F169 ; ALetter # So [26] NEGATIVE CIRCLED LATIN CAPITAL LETTER A..NEGATIVE CIRCLED LATIN CAPITAL LETTER Z 1F170..1F189 ; ALetter # So [26] NEGATIVE SQUARED LATIN CAPITAL LETTER A..NEGATIVE SQUARED LATIN CAPITAL LETTER Z -# Total code points: 28854 +# Total code points: 29336 # ================================================ @@ -1356,6 +1399,7 @@ FF10..FF19 ; Numeric # Nd [10] FULLWIDTH DIGIT ZERO..FULLWIDTH DIGIT NINE 11D50..11D59 ; Numeric # Nd [10] MASARAM GONDI DIGIT ZERO..MASARAM GONDI DIGIT NINE 11DA0..11DA9 ; Numeric # Nd [10] GUNJALA GONDI DIGIT ZERO..GUNJALA GONDI DIGIT NINE 16A60..16A69 ; Numeric # Nd [10] MRO DIGIT ZERO..MRO DIGIT NINE +16AC0..16AC9 ; Numeric # Nd [10] TANGSA DIGIT ZERO..TANGSA DIGIT NINE 16B50..16B59 ; Numeric # Nd [10] PAHAWH HMONG DIGIT ZERO..PAHAWH HMONG DIGIT NINE 1D7CE..1D7FF ; Numeric # Nd [50] MATHEMATICAL BOLD DIGIT ZERO..MATHEMATICAL MONOSPACE DIGIT NINE 1E140..1E149 ; Numeric # Nd [10] NYIAKENG PUACHUE HMONG DIGIT ZERO..NYIAKENG PUACHUE HMONG DIGIT NINE @@ -1363,7 +1407,7 @@ FF10..FF19 ; Numeric # Nd [10] FULLWIDTH DIGIT ZERO..FULLWIDTH DIGIT NINE 1E950..1E959 ; Numeric # Nd [10] ADLAM DIGIT ZERO..ADLAM DIGIT NINE 1FBF0..1FBF9 ; Numeric # Nd [10] SEGMENTED DIGIT ZERO..SEGMENTED DIGIT NINE -# Total code points: 651 +# Total code points: 661 # ================================================ diff --git a/gnu/usr.bin/perl/lib/unicore/extracted/DBidiClass.txt b/gnu/usr.bin/perl/lib/unicore/extracted/DBidiClass.txt index 2454abd480d..4012dc25da1 100644 --- a/gnu/usr.bin/perl/lib/unicore/extracted/DBidiClass.txt +++ b/gnu/usr.bin/perl/lib/unicore/extracted/DBidiClass.txt @@ -1,6 +1,6 @@ -# DerivedBidiClass-13.0.0.txt -# Date: 2019-10-21, 14:30:28 GMT -# © 2019 Unicode®, Inc. +# DerivedBidiClass-14.0.0.txt +# Date: 2021-07-10, 00:35:02 GMT +# © 2021 Unicode®, Inc. # Unicode and the Unicode Logo are registered trademarks of Unicode, Inc. in the U.S. and other countries. # For terms of use, see http://www.unicode.org/terms_of_use.html # @@ -9,19 +9,19 @@ # ================================================ -# Bidi Class (listing UnicodeData.txt, field 4: see UAX #44: http://www.unicode.org/reports/tr44/) +# Bidi Class (listing UnicodeData.txt, field 4: see UAX #44: https://www.unicode.org/reports/tr44/) # Unlike other properties, unassigned code points in blocks # reserved for right-to-left scripts are given either types R or AL. # # The unassigned code points that default to AL are in the ranges: -# [\u0600-\u07BF \u0860-\u086F \u08A0-\u08FF \uFB50-\uFDCF \uFDF0-\uFDFF \uFE70-\uFEFF +# [\u0600-\u07BF \u0860-\u08FF \uFB50-\uFDCF \uFDF0-\uFDFF \uFE70-\uFEFF # \U00010D00-\U00010D3F \U00010F30-\U00010F6F # \U0001EC70-\U0001ECBF \U0001ED00-\U0001ED4F \U0001EE00-\U0001EEFF] # # This includes code points in the Arabic, Syriac, and Thaana blocks, among others. # # The unassigned code points that default to R are in the ranges: -# [\u0590-\u05FF \u07C0-\u085F \u0870-\u089F \uFB1D-\uFB4F +# [\u0590-\u05FF \u07C0-\u085F \uFB1D-\uFB4F # \U00010800-\U00010CFF \U00010D40-\U00010F2F \U00010F70-\U00010FFF # \U0001E800-\U0001EC6F \U0001ECC0-\U0001ECFF \U0001ED50-\U0001EDFF \U0001EF00-\U0001EFFF] # @@ -194,6 +194,7 @@ 0C3D ; L # Lo TELUGU SIGN AVAGRAHA 0C41..0C44 ; L # Mc [4] TELUGU VOWEL SIGN U..TELUGU VOWEL SIGN VOCALIC RR 0C58..0C5A ; L # Lo [3] TELUGU LETTER TSA..TELUGU LETTER RRRA +0C5D ; L # Lo TELUGU LETTER NAKAARA POLLU 0C60..0C61 ; L # Lo [2] TELUGU LETTER VOCALIC RR..TELUGU LETTER VOCALIC LL 0C66..0C6F ; L # Nd [10] TELUGU DIGIT ZERO..TELUGU DIGIT NINE 0C77 ; L # Po TELUGU SIGN SIDDHAM @@ -214,7 +215,7 @@ 0CC7..0CC8 ; L # Mc [2] KANNADA VOWEL SIGN EE..KANNADA VOWEL SIGN AI 0CCA..0CCB ; L # Mc [2] KANNADA VOWEL SIGN O..KANNADA VOWEL SIGN OO 0CD5..0CD6 ; L # Mc [2] KANNADA LENGTH MARK..KANNADA AI LENGTH MARK -0CDE ; L # Lo KANNADA LETTER FA +0CDD..0CDE ; L # Lo [2] KANNADA LETTER NAKAARA POLLU..KANNADA LETTER FA 0CE0..0CE1 ; L # Lo [2] KANNADA LETTER VOCALIC RR..KANNADA LETTER VOCALIC LL 0CE6..0CEF ; L # Nd [10] KANNADA DIGIT ZERO..KANNADA DIGIT NINE 0CF1..0CF2 ; L # Lo [2] KANNADA SIGN JIHVAMULIYA..KANNADA SIGN UPADHMANIYA @@ -351,9 +352,10 @@ 16EB..16ED ; L # Po [3] RUNIC SINGLE PUNCTUATION..RUNIC CROSS PUNCTUATION 16EE..16F0 ; L # Nl [3] RUNIC ARLAUG SYMBOL..RUNIC BELGTHOR SYMBOL 16F1..16F8 ; L # Lo [8] RUNIC LETTER K..RUNIC LETTER FRANKS CASKET AESC -1700..170C ; L # Lo [13] TAGALOG LETTER A..TAGALOG LETTER YA -170E..1711 ; L # Lo [4] TAGALOG LETTER LA..TAGALOG LETTER HA -1720..1731 ; L # Lo [18] HANUNOO LETTER A..HANUNOO LETTER HA +1700..1711 ; L # Lo [18] TAGALOG LETTER A..TAGALOG LETTER HA +1715 ; L # Mc TAGALOG SIGN PAMUDPOD +171F..1731 ; L # Lo [19] TAGALOG LETTER ARCHAIC RA..HANUNOO LETTER HA +1734 ; L # Mc HANUNOO SIGN PAMUDPOD 1735..1736 ; L # Po [2] PHILIPPINE SINGLE PUNCTUATION..PHILIPPINE DOUBLE PUNCTUATION 1740..1751 ; L # Lo [18] BUHID LETTER A..BUHID LETTER HA 1760..176C ; L # Lo [13] TAGBANWA LETTER A..TAGBANWA LETTER YA @@ -407,11 +409,12 @@ 1B3B ; L # Mc BALINESE VOWEL SIGN RA REPA TEDUNG 1B3D..1B41 ; L # Mc [5] BALINESE VOWEL SIGN LA LENGA TEDUNG..BALINESE VOWEL SIGN TALING REPA TEDUNG 1B43..1B44 ; L # Mc [2] BALINESE VOWEL SIGN PEPET TEDUNG..BALINESE ADEG ADEG -1B45..1B4B ; L # Lo [7] BALINESE LETTER KAF SASAK..BALINESE LETTER ASYURA SASAK +1B45..1B4C ; L # Lo [8] BALINESE LETTER KAF SASAK..BALINESE LETTER ARCHAIC JNYA 1B50..1B59 ; L # Nd [10] BALINESE DIGIT ZERO..BALINESE DIGIT NINE 1B5A..1B60 ; L # Po [7] BALINESE PANTI..BALINESE PAMENENG 1B61..1B6A ; L # So [10] BALINESE MUSICAL SYMBOL DONG..BALINESE MUSICAL SYMBOL DANG GEDE 1B74..1B7C ; L # So [9] BALINESE MUSICAL SYMBOL RIGHT-HAND OPEN DUG..BALINESE MUSICAL SYMBOL LEFT-HAND OPEN PING +1B7D..1B7E ; L # Po [2] BALINESE PANTI LANTANG..BALINESE PAMADA LANTANG 1B82 ; L # Mc SUNDANESE SIGN PANGWISAD 1B83..1BA0 ; L # Lo [30] SUNDANESE LETTER A..SUNDANESE LETTER HA 1BA1 ; L # Mc SUNDANESE CONSONANT SIGN PAMINGKAL @@ -499,9 +502,7 @@ 249C..24E9 ; L # So [78] PARENTHESIZED LATIN SMALL LETTER A..CIRCLED LATIN SMALL LETTER Z 26AC ; L # So MEDIUM SMALL WHITE CIRCLE 2800..28FF ; L # So [256] BRAILLE PATTERN BLANK..BRAILLE PATTERN DOTS-12345678 -2C00..2C2E ; L # L& [47] GLAGOLITIC CAPITAL LETTER AZU..GLAGOLITIC CAPITAL LETTER LATINATE MYSLITE -2C30..2C5E ; L # L& [47] GLAGOLITIC SMALL LETTER AZU..GLAGOLITIC SMALL LETTER LATINATE MYSLITE -2C60..2C7B ; L # L& [28] LATIN CAPITAL LETTER L WITH DOUBLE BAR..LATIN LETTER SMALL CAPITAL TURNED E +2C00..2C7B ; L # L& [124] GLAGOLITIC CAPITAL LETTER AZU..LATIN LETTER SMALL CAPITAL TURNED E 2C7C..2C7D ; L # Lm [2] LATIN SUBSCRIPT SMALL LETTER J..MODIFIER LETTER CAPITAL V 2C7E..2CE4 ; L # L& [103] LATIN CAPITAL LETTER S WITH SWASH TAIL..COPTIC SYMBOL KAI 2CEB..2CEE ; L # L& [4] COPTIC CAPITAL LETTER CRYPTOGRAMMIC SHEI..COPTIC SMALL LETTER CRYPTOGRAMMIC GANGIA @@ -556,8 +557,7 @@ 337B..33DD ; L # So [99] SQUARE ERA NAME HEISEI..SQUARE WB 33E0..33FE ; L # So [31] IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY ONE..IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY THIRTY-ONE 3400..4DBF ; L # Lo [6592] CJK UNIFIED IDEOGRAPH-3400..CJK UNIFIED IDEOGRAPH-4DBF -4E00..9FFC ; L # Lo [20989] CJK UNIFIED IDEOGRAPH-4E00..CJK UNIFIED IDEOGRAPH-9FFC -A000..A014 ; L # Lo [21] YI SYLLABLE IT..YI SYLLABLE E +4E00..A014 ; L # Lo [21013] CJK UNIFIED IDEOGRAPH-4E00..YI SYLLABLE E A015 ; L # Lm YI SYLLABLE WU A016..A48C ; L # Lo [1143] YI SYLLABLE BIT..YI SYLLABLE YYR A4D0..A4F7 ; L # Lo [40] LISU LETTER BA..LISU LETTER OE @@ -581,8 +581,11 @@ A771..A787 ; L # L& [23] LATIN SMALL LETTER DUM..LATIN SMALL LETTER INSULAR A789..A78A ; L # Sk [2] MODIFIER LETTER COLON..MODIFIER LETTER SHORT EQUALS SIGN A78B..A78E ; L # L& [4] LATIN CAPITAL LETTER SALTILLO..LATIN SMALL LETTER L WITH RETROFLEX HOOK AND BELT A78F ; L # Lo LATIN LETTER SINOLOGICAL DOT -A790..A7BF ; L # L& [48] LATIN CAPITAL LETTER N WITH DESCENDER..LATIN SMALL LETTER GLOTTAL U -A7C2..A7CA ; L # L& [9] LATIN CAPITAL LETTER ANGLICANA W..LATIN SMALL LETTER S WITH SHORT STROKE OVERLAY +A790..A7CA ; L # L& [59] LATIN CAPITAL LETTER N WITH DESCENDER..LATIN SMALL LETTER S WITH SHORT STROKE OVERLAY +A7D0..A7D1 ; L # L& [2] LATIN CAPITAL LETTER CLOSED INSULAR G..LATIN SMALL LETTER CLOSED INSULAR G +A7D3 ; L # L& LATIN SMALL LETTER DOUBLE THORN +A7D5..A7D9 ; L # L& [5] LATIN SMALL LETTER DOUBLE WYNN..LATIN SMALL LETTER SIGMOID S +A7F2..A7F4 ; L # Lm [3] MODIFIER LETTER CAPITAL C..MODIFIER LETTER CAPITAL Q A7F5..A7F6 ; L # L& [2] LATIN CAPITAL LETTER REVERSED HALF H..LATIN SMALL LETTER REVERSED HALF H A7F7 ; L # Lo LATIN EPIGRAPHIC LETTER SIDEWAYS I A7F8..A7F9 ; L # Lm [2] MODIFIER LETTER CAPITAL H WITH STROKE..MODIFIER LETTER SMALL LIGATURE OE @@ -731,14 +734,27 @@ FFDA..FFDC ; L # Lo [3] HALFWIDTH HANGUL LETTER EU..HALFWIDTH HANGUL LETTER 10500..10527 ; L # Lo [40] ELBASAN LETTER A..ELBASAN LETTER KHE 10530..10563 ; L # Lo [52] CAUCASIAN ALBANIAN LETTER ALT..CAUCASIAN ALBANIAN LETTER KIW 1056F ; L # Po CAUCASIAN ALBANIAN CITATION MARK +10570..1057A ; L # L& [11] VITHKUQI CAPITAL LETTER A..VITHKUQI CAPITAL LETTER GA +1057C..1058A ; L # L& [15] VITHKUQI CAPITAL LETTER HA..VITHKUQI CAPITAL LETTER RE +1058C..10592 ; L # L& [7] VITHKUQI CAPITAL LETTER SE..VITHKUQI CAPITAL LETTER XE +10594..10595 ; L # L& [2] VITHKUQI CAPITAL LETTER Y..VITHKUQI CAPITAL LETTER ZE +10597..105A1 ; L # L& [11] VITHKUQI SMALL LETTER A..VITHKUQI SMALL LETTER GA +105A3..105B1 ; L # L& [15] VITHKUQI SMALL LETTER HA..VITHKUQI SMALL LETTER RE +105B3..105B9 ; L # L& [7] VITHKUQI SMALL LETTER SE..VITHKUQI SMALL LETTER XE +105BB..105BC ; L # L& [2] VITHKUQI SMALL LETTER Y..VITHKUQI SMALL LETTER ZE 10600..10736 ; L # Lo [311] LINEAR A SIGN AB001..LINEAR A SIGN A664 10740..10755 ; L # Lo [22] LINEAR A SIGN A701 A..LINEAR A SIGN A732 JE 10760..10767 ; L # Lo [8] LINEAR A SIGN A800..LINEAR A SIGN A807 +10780..10785 ; L # Lm [6] MODIFIER LETTER SMALL CAPITAL AA..MODIFIER LETTER SMALL B WITH HOOK +10787..107B0 ; L # Lm [42] MODIFIER LETTER SMALL DZ DIGRAPH..MODIFIER LETTER SMALL V WITH RIGHT HOOK +107B2..107BA ; L # Lm [9] MODIFIER LETTER SMALL CAPITAL Y..MODIFIER LETTER SMALL S WITH CURL 11000 ; L # Mc BRAHMI SIGN CANDRABINDU 11002 ; L # Mc BRAHMI SIGN VISARGA 11003..11037 ; L # Lo [53] BRAHMI SIGN JIHVAMULIYA..BRAHMI LETTER OLD TAMIL NNNA 11047..1104D ; L # Po [7] BRAHMI DANDA..BRAHMI PUNCTUATION LOTUS 11066..1106F ; L # Nd [10] BRAHMI DIGIT ZERO..BRAHMI DIGIT NINE +11071..11072 ; L # Lo [2] BRAHMI LETTER OLD TAMIL SHORT E..BRAHMI LETTER OLD TAMIL SHORT O +11075 ; L # Lo BRAHMI LETTER OLD TAMIL LLA 11082 ; L # Mc KAITHI SIGN VISARGA 11083..110AF ; L # Lo [45] KAITHI LETTER A..KAITHI LETTER HA 110B0..110B2 ; L # Mc [3] KAITHI VOWEL SIGN AA..KAITHI VOWEL SIGN II @@ -841,6 +857,7 @@ FFDA..FFDC ; L # Lo [3] HALFWIDTH HANGUL LETTER EU..HALFWIDTH HANGUL LETTER 116AE..116AF ; L # Mc [2] TAKRI VOWEL SIGN I..TAKRI VOWEL SIGN II 116B6 ; L # Mc TAKRI SIGN VIRAMA 116B8 ; L # Lo TAKRI LETTER ARCHAIC KHA +116B9 ; L # Po TAKRI ABBREVIATION SIGN 116C0..116C9 ; L # Nd [10] TAKRI DIGIT ZERO..TAKRI DIGIT NINE 11700..1171A ; L # Lo [27] AHOM LETTER KA..AHOM LETTER ALTERNATE BA 11720..11721 ; L # Mc [2] AHOM VOWEL SIGN A..AHOM VOWEL SIGN AA @@ -849,6 +866,7 @@ FFDA..FFDC ; L # Lo [3] HALFWIDTH HANGUL LETTER EU..HALFWIDTH HANGUL LETTER 1173A..1173B ; L # No [2] AHOM NUMBER TEN..AHOM NUMBER TWENTY 1173C..1173E ; L # Po [3] AHOM SIGN SMALL SECTION..AHOM SIGN RULAI 1173F ; L # So AHOM SYMBOL VI +11740..11746 ; L # Lo [7] AHOM LETTER CA..AHOM LETTER LLA 11800..1182B ; L # Lo [44] DOGRA LETTER A..DOGRA LETTER RRA 1182C..1182E ; L # Mc [3] DOGRA VOWEL SIGN AA..DOGRA VOWEL SIGN II 11838 ; L # Mc DOGRA SIGN VISARGA @@ -891,7 +909,7 @@ FFDA..FFDC ; L # Lo [3] HALFWIDTH HANGUL LETTER EU..HALFWIDTH HANGUL LETTER 11A9A..11A9C ; L # Po [3] SOYOMBO MARK TSHEG..SOYOMBO MARK DOUBLE SHAD 11A9D ; L # Lo SOYOMBO MARK PLUTA 11A9E..11AA2 ; L # Po [5] SOYOMBO HEAD MARK WITH MOON AND SUN AND TRIPLE FLAME..SOYOMBO TERMINAL MARK-2 -11AC0..11AF8 ; L # Lo [57] PAU CIN HAU LETTER PA..PAU CIN HAU GLOTTAL STOP FINAL +11AB0..11AF8 ; L # Lo [73] CANADIAN SYLLABICS NATTILIK HI..PAU CIN HAU GLOTTAL STOP FINAL 11C00..11C08 ; L # Lo [9] BHAIKSUKI LETTER A..BHAIKSUKI LETTER VOCALIC L 11C0A..11C2E ; L # Lo [37] BHAIKSUKI LETTER E..BHAIKSUKI LETTER HA 11C2F ; L # Mc BHAIKSUKI VOWEL SIGN AA @@ -929,6 +947,8 @@ FFDA..FFDC ; L # Lo [3] HALFWIDTH HANGUL LETTER EU..HALFWIDTH HANGUL LETTER 12400..1246E ; L # Nl [111] CUNEIFORM NUMERIC SIGN TWO ASH..CUNEIFORM NUMERIC SIGN NINE U VARIANT FORM 12470..12474 ; L # Po [5] CUNEIFORM PUNCTUATION SIGN OLD ASSYRIAN WORD DIVIDER..CUNEIFORM PUNCTUATION SIGN DIAGONAL QUADCOLON 12480..12543 ; L # Lo [196] CUNEIFORM SIGN AB TIMES NUN TENU..CUNEIFORM SIGN ZU5 TIMES THREE DISH TENU +12F90..12FF0 ; L # Lo [97] CYPRO-MINOAN SIGN CM001..CYPRO-MINOAN SIGN CM114 +12FF1..12FF2 ; L # Po [2] CYPRO-MINOAN SIGN CM301..CYPRO-MINOAN SIGN CM302 13000..1342E ; L # Lo [1071] EGYPTIAN HIEROGLYPH A001..EGYPTIAN HIEROGLYPH AA032 13430..13438 ; L # Cf [9] EGYPTIAN HIEROGLYPH VERTICAL JOINER..EGYPTIAN HIEROGLYPH END SEGMENT 14400..14646 ; L # Lo [583] ANATOLIAN HIEROGLYPH A001..ANATOLIAN HIEROGLYPH A530 @@ -936,6 +956,8 @@ FFDA..FFDC ; L # Lo [3] HALFWIDTH HANGUL LETTER EU..HALFWIDTH HANGUL LETTER 16A40..16A5E ; L # Lo [31] MRO LETTER TA..MRO LETTER TEK 16A60..16A69 ; L # Nd [10] MRO DIGIT ZERO..MRO DIGIT NINE 16A6E..16A6F ; L # Po [2] MRO DANDA..MRO DOUBLE DANDA +16A70..16ABE ; L # Lo [79] TANGSA LETTER OZ..TANGSA LETTER ZA +16AC0..16AC9 ; L # Nd [10] TANGSA DIGIT ZERO..TANGSA DIGIT NINE 16AD0..16AED ; L # Lo [30] BASSA VAH LETTER ENNI..BASSA VAH LETTER I 16AF5 ; L # Po BASSA VAH FULL STOP 16B00..16B2F ; L # Lo [48] PAHAWH HMONG VOWEL KEEB..PAHAWH HMONG CONSONANT CAU @@ -961,7 +983,10 @@ FFDA..FFDC ; L # Lo [3] HALFWIDTH HANGUL LETTER EU..HALFWIDTH HANGUL LETTER 17000..187F7 ; L # Lo [6136] TANGUT IDEOGRAPH-17000..TANGUT IDEOGRAPH-187F7 18800..18CD5 ; L # Lo [1238] TANGUT COMPONENT-001..KHITAN SMALL SCRIPT CHARACTER-18CD5 18D00..18D08 ; L # Lo [9] TANGUT IDEOGRAPH-18D00..TANGUT IDEOGRAPH-18D08 -1B000..1B11E ; L # Lo [287] KATAKANA LETTER ARCHAIC E..HENTAIGANA LETTER N-MU-MO-2 +1AFF0..1AFF3 ; L # Lm [4] KATAKANA LETTER MINNAN TONE-2..KATAKANA LETTER MINNAN TONE-5 +1AFF5..1AFFB ; L # Lm [7] KATAKANA LETTER MINNAN TONE-7..KATAKANA LETTER MINNAN NASALIZED TONE-5 +1AFFD..1AFFE ; L # Lm [2] KATAKANA LETTER MINNAN NASALIZED TONE-7..KATAKANA LETTER MINNAN NASALIZED TONE-8 +1B000..1B122 ; L # Lo [291] KATAKANA LETTER ARCHAIC E..KATAKANA LETTER ARCHAIC WU 1B150..1B152 ; L # Lo [3] HIRAGANA LETTER SMALL WI..HIRAGANA LETTER SMALL WO 1B164..1B167 ; L # Lo [4] KATAKANA LETTER SMALL WI..KATAKANA LETTER SMALL N 1B170..1B2FB ; L # Lo [396] NUSHU CHARACTER-1B170..NUSHU CHARACTER-1B2FB @@ -971,6 +996,7 @@ FFDA..FFDC ; L # Lo [3] HALFWIDTH HANGUL LETTER EU..HALFWIDTH HANGUL LETTER 1BC90..1BC99 ; L # Lo [10] DUPLOYAN AFFIX LOW ACUTE..DUPLOYAN AFFIX LOW ARROW 1BC9C ; L # So DUPLOYAN SIGN O WITH CROSS 1BC9F ; L # Po DUPLOYAN PUNCTUATION CHINOOK FULL STOP +1CF50..1CFC3 ; L # So [116] ZNAMENNY NEUME KRYUK..ZNAMENNY NEUME PAUK 1D000..1D0F5 ; L # So [246] BYZANTINE MUSICAL SYMBOL PSILI..BYZANTINE MUSICAL SYMBOL GORGON NEO KATO 1D100..1D126 ; L # So [39] MUSICAL SYMBOL SINGLE BARLINE..MUSICAL SYMBOL DRUM CLEF-2 1D129..1D164 ; L # So [60] MUSICAL SYMBOL MULTIPLE MEASURE REST..MUSICAL SYMBOL ONE HUNDRED TWENTY-EIGHTH NOTE @@ -1023,13 +1049,21 @@ FFDA..FFDC ; L # Lo [3] HALFWIDTH HANGUL LETTER EU..HALFWIDTH HANGUL LETTER 1DA76..1DA83 ; L # So [14] SIGNWRITING LIMB COMBINATION..SIGNWRITING LOCATION DEPTH 1DA85..1DA86 ; L # So [2] SIGNWRITING LOCATION TORSO..SIGNWRITING LOCATION LIMBS DIGITS 1DA87..1DA8B ; L # Po [5] SIGNWRITING COMMA..SIGNWRITING PARENTHESIS +1DF00..1DF09 ; L # L& [10] LATIN SMALL LETTER FENG DIGRAPH WITH TRILL..LATIN SMALL LETTER T WITH HOOK AND RETROFLEX HOOK +1DF0A ; L # Lo LATIN LETTER RETROFLEX CLICK WITH RETROFLEX HOOK +1DF0B..1DF1E ; L # L& [20] LATIN SMALL LETTER ESH WITH DOUBLE BAR..LATIN SMALL LETTER S WITH CURL 1E100..1E12C ; L # Lo [45] NYIAKENG PUACHUE HMONG LETTER MA..NYIAKENG PUACHUE HMONG LETTER W 1E137..1E13D ; L # Lm [7] NYIAKENG PUACHUE HMONG SIGN FOR PERSON..NYIAKENG PUACHUE HMONG SYLLABLE LENGTHENER 1E140..1E149 ; L # Nd [10] NYIAKENG PUACHUE HMONG DIGIT ZERO..NYIAKENG PUACHUE HMONG DIGIT NINE 1E14E ; L # Lo NYIAKENG PUACHUE HMONG LOGOGRAM NYAJ 1E14F ; L # So NYIAKENG PUACHUE HMONG CIRCLED CA +1E290..1E2AD ; L # Lo [30] TOTO LETTER PA..TOTO LETTER A 1E2C0..1E2EB ; L # Lo [44] WANCHO LETTER AA..WANCHO LETTER YIH 1E2F0..1E2F9 ; L # Nd [10] WANCHO DIGIT ZERO..WANCHO DIGIT NINE +1E7E0..1E7E6 ; L # Lo [7] ETHIOPIC SYLLABLE HHYA..ETHIOPIC SYLLABLE HHYO +1E7E8..1E7EB ; L # Lo [4] ETHIOPIC SYLLABLE GURAGE HHWA..ETHIOPIC SYLLABLE HHWE +1E7ED..1E7EE ; L # Lo [2] ETHIOPIC SYLLABLE GURAGE MWI..ETHIOPIC SYLLABLE GURAGE MWEE +1E7F0..1E7FE ; L # Lo [15] ETHIOPIC SYLLABLE GURAGE QWI..ETHIOPIC SYLLABLE GURAGE PWEE 1F110..1F12E ; L # So [31] PARENTHESIZED LATIN CAPITAL LETTER A..CIRCLED WZ 1F130..1F169 ; L # So [58] SQUARED LATIN CAPITAL LETTER A..NEGATIVE CIRCLED LATIN CAPITAL LETTER Z 1F170..1F1AC ; L # So [61] NEGATIVE SQUARED LATIN CAPITAL LETTER A..SQUARED VOD @@ -1037,8 +1071,8 @@ FFDA..FFDC ; L # Lo [3] HALFWIDTH HANGUL LETTER EU..HALFWIDTH HANGUL LETTER 1F210..1F23B ; L # So [44] SQUARED CJK UNIFIED IDEOGRAPH-624B..SQUARED CJK UNIFIED IDEOGRAPH-914D 1F240..1F248 ; L # So [9] TORTOISE SHELL BRACKETED CJK UNIFIED IDEOGRAPH-672C..TORTOISE SHELL BRACKETED CJK UNIFIED IDEOGRAPH-6557 1F250..1F251 ; L # So [2] CIRCLED IDEOGRAPH ADVANTAGE..CIRCLED IDEOGRAPH ACCEPT -20000..2A6DD ; L # Lo [42718] CJK UNIFIED IDEOGRAPH-20000..CJK UNIFIED IDEOGRAPH-2A6DD -2A700..2B734 ; L # Lo [4149] CJK UNIFIED IDEOGRAPH-2A700..CJK UNIFIED IDEOGRAPH-2B734 +20000..2A6DF ; L # Lo [42720] CJK UNIFIED IDEOGRAPH-20000..CJK UNIFIED IDEOGRAPH-2A6DF +2A700..2B738 ; L # Lo [4153] CJK UNIFIED IDEOGRAPH-2A700..CJK UNIFIED IDEOGRAPH-2B738 2B740..2B81D ; L # Lo [222] CJK UNIFIED IDEOGRAPH-2B740..CJK UNIFIED IDEOGRAPH-2B81D 2B820..2CEA1 ; L # Lo [5762] CJK UNIFIED IDEOGRAPH-2B820..CJK UNIFIED IDEOGRAPH-2CEA1 2CEB0..2EBE0 ; L # Lo [7473] CJK UNIFIED IDEOGRAPH-2CEB0..CJK UNIFIED IDEOGRAPH-2EBE0 @@ -1047,8 +1081,8 @@ FFDA..FFDC ; L # Lo [3] HALFWIDTH HANGUL LETTER EU..HALFWIDTH HANGUL LETTER F0000..FFFFD ; L # Co [65534] .. 100000..10FFFD; L # Co [65534] .. -# The above property value applies to 826312 code points not listed here. -# Total code points: 1096473 +# The above property value applies to 825575 code points not listed here. +# Total code points: 1096333 # ================================================ @@ -1082,7 +1116,6 @@ F0000..FFFFD ; L # Co [65534] .. 085C..085D ; R # Cn [2] .. 085E ; R # Po MANDAIC PUNCTUATION 085F ; R # Cn -0870..089F ; R # Cn [48] .. 200F ; R # Cf RIGHT-TO-LEFT MARK FB1D ; R # Lo HEBREW LETTER YOD WITH HIRIQ FB1F..FB28 ; R # Lo [10] HEBREW LIGATURE YIDDISH YOD YOD PATAH..HEBREW LETTER WIDE TAV @@ -1197,7 +1230,9 @@ FB46..FB4F ; R # Lo [10] HEBREW LETTER TSADI WITH DAGESH..HEBREW LIGATURE AL 10F1D..10F26 ; R # No [10] OLD SOGDIAN NUMBER ONE..OLD SOGDIAN FRACTION ONE HALF 10F27 ; R # Lo OLD SOGDIAN LIGATURE AYIN-DALETH 10F28..10F2F ; R # Cn [8] .. -10F70..10FAF ; R # Cn [64] .. +10F70..10F81 ; R # Lo [18] OLD UYGHUR LETTER ALEPH..OLD UYGHUR LETTER LESH +10F86..10F89 ; R # Po [4] OLD UYGHUR PUNCTUATION BAR..OLD UYGHUR PUNCTUATION FOUR DOTS +10F8A..10FAF ; R # Cn [38] .. 10FB0..10FC4 ; R # Lo [21] CHORASMIAN LETTER ALEPH..CHORASMIAN LETTER TAW 10FC5..10FCB ; R # No [7] CHORASMIAN NUMBER ONE..CHORASMIAN NUMBER ONE HUNDRED 10FCC..10FDF ; R # Cn [20] .. @@ -1218,7 +1253,7 @@ FB46..FB4F ; R # Lo [10] HEBREW LETTER TSADI WITH DAGESH..HEBREW LIGATURE AL 1ED50..1EDFF ; R # Cn [176] .. 1EF00..1EFFF ; R # Cn [256] .. -# Total code points: 3763 +# Total code points: 3711 # ================================================ @@ -1277,8 +1312,8 @@ FF0D ; ES # Pd FULLWIDTH HYPHEN-MINUS 0E3F ; ET # Sc THAI CURRENCY SYMBOL BAHT 17DB ; ET # Sc KHMER CURRENCY SYMBOL RIEL 2030..2034 ; ET # Po [5] PER MILLE SIGN..TRIPLE PRIME -20A0..20BF ; ET # Sc [32] EURO-CURRENCY SIGN..BITCOIN SIGN -20C0..20CF ; ET # Cn [16] .. +20A0..20C0 ; ET # Sc [33] EURO-CURRENCY SIGN..SOM SIGN +20C1..20CF ; ET # Cn [15] .. 212E ; ET # So ESTIMATED SYMBOL 2213 ; ET # Sm MINUS-OR-PLUS SIGN A838 ; ET # Sc NORTH INDIC RUPEE MARK @@ -1304,11 +1339,12 @@ FFE5..FFE6 ; ET # Sc [2] FULLWIDTH YEN SIGN..FULLWIDTH WON SIGN 0660..0669 ; AN # Nd [10] ARABIC-INDIC DIGIT ZERO..ARABIC-INDIC DIGIT NINE 066B..066C ; AN # Po [2] ARABIC DECIMAL SEPARATOR..ARABIC THOUSANDS SEPARATOR 06DD ; AN # Cf ARABIC END OF AYAH +0890..0891 ; AN # Cf [2] ARABIC POUND MARK ABOVE..ARABIC PIASTRE MARK ABOVE 08E2 ; AN # Cf ARABIC DISPUTED END OF AYAH 10D30..10D39 ; AN # Nd [10] HANIFI ROHINGYA DIGIT ZERO..HANIFI ROHINGYA DIGIT NINE 10E60..10E7E ; AN # No [31] RUMI DIGIT ONE..RUMI FRACTION TWO THIRDS -# Total code points: 61 +# Total code points: 63 # ================================================ @@ -1663,7 +1699,16 @@ FF1A ; CS # Po FULLWIDTH COLON 2E42 ; ON # Ps DOUBLE LOW-REVERSED-9 QUOTATION MARK 2E43..2E4F ; ON # Po [13] DASH WITH LEFT UPTURN..CORNISH VERSE DIVIDER 2E50..2E51 ; ON # So [2] CROSS PATTY WITH RIGHT CROSSBAR..CROSS PATTY WITH LEFT CROSSBAR -2E52 ; ON # Po TIRONIAN SIGN CAPITAL ET +2E52..2E54 ; ON # Po [3] TIRONIAN SIGN CAPITAL ET..MEDIEVAL QUESTION MARK +2E55 ; ON # Ps LEFT SQUARE BRACKET WITH STROKE +2E56 ; ON # Pe RIGHT SQUARE BRACKET WITH STROKE +2E57 ; ON # Ps LEFT SQUARE BRACKET WITH DOUBLE STROKE +2E58 ; ON # Pe RIGHT SQUARE BRACKET WITH DOUBLE STROKE +2E59 ; ON # Ps TOP HALF LEFT PARENTHESIS +2E5A ; ON # Pe TOP HALF RIGHT PARENTHESIS +2E5B ; ON # Ps BOTTOM HALF LEFT PARENTHESIS +2E5C ; ON # Pe BOTTOM HALF RIGHT PARENTHESIS +2E5D ; ON # Pd OBLIQUE HYPHEN 2E80..2E99 ; ON # So [26] CJK RADICAL REPEAT..CJK RADICAL RAP 2E9B..2EF3 ; ON # So [89] CJK RADICAL CHOKE..CJK RADICAL C-SIMPLIFIED TURTLE 2F00..2FD5 ; ON # So [214] KANGXI RADICAL ONE..KANGXI RADICAL FLUTE @@ -1725,7 +1770,9 @@ A874..A877 ; ON # Po [4] PHAGS-PA SINGLE HEAD MARK..PHAGS-PA MARK DOUBLE SH AB6A..AB6B ; ON # Sk [2] MODIFIER LETTER LEFT TACK..MODIFIER LETTER RIGHT TACK FD3E ; ON # Pe ORNATE LEFT PARENTHESIS FD3F ; ON # Ps ORNATE RIGHT PARENTHESIS -FDFD ; ON # So ARABIC LIGATURE BISMILLAH AR-RAHMAN AR-RAHEEM +FD40..FD4F ; ON # So [16] ARABIC LIGATURE RAHIMAHU ALLAAH..ARABIC LIGATURE RAHIMAHUM ALLAAH +FDCF ; ON # So ARABIC LIGATURE SALAAMUHU ALAYNAA +FDFD..FDFF ; ON # So [3] ARABIC LIGATURE BISMILLAH AR-RAHMAN AR-RAHEEM..ARABIC LIGATURE AZZA WA JALL FE10..FE16 ; ON # Po [7] PRESENTATION FORM FOR VERTICAL COMMA..PRESENTATION FORM FOR VERTICAL QUESTION MARK FE17 ; ON # Ps PRESENTATION FORM FOR VERTICAL LEFT WHITE LENTICULAR BRACKET FE18 ; ON # Pe PRESENTATION FORM FOR VERTICAL RIGHT WHITE LENTICULAR BRAKCET @@ -1815,6 +1862,7 @@ FFFC..FFFD ; ON # So [2] OBJECT REPLACEMENT CHARACTER..REPLACEMENT CHARACTE 11FD5..11FDC ; ON # So [8] TAMIL SIGN NEL..TAMIL SIGN MUKKURUNI 11FE1..11FF1 ; ON # So [17] TAMIL SIGN PAARAM..TAMIL SIGN VAKAIYARAA 16FE2 ; ON # Po OLD CHINESE HOOK MARK +1D1E9..1D1EA ; ON # So [2] MUSICAL SYMBOL SORI..MUSICAL SYMBOL KORON 1D200..1D241 ; ON # So [66] GREEK VOCAL NOTATION SYMBOL-1..GREEK INSTRUMENTAL NOTATION SYMBOL-54 1D245 ; ON # So GREEK MUSICAL LEIMMA 1D300..1D356 ; ON # So [87] MONOGRAM FOR EARTH..TETRAGRAM FOR FOSTERING @@ -1839,32 +1887,33 @@ FFFC..FFFD ; ON # So [2] OBJECT REPLACEMENT CHARACTER..REPLACEMENT CHARACTE 1F300..1F3FA ; ON # So [251] CYCLONE..AMPHORA 1F3FB..1F3FF ; ON # Sk [5] EMOJI MODIFIER FITZPATRICK TYPE-1-2..EMOJI MODIFIER FITZPATRICK TYPE-6 1F400..1F6D7 ; ON # So [728] RAT..ELEVATOR -1F6E0..1F6EC ; ON # So [13] HAMMER AND WRENCH..AIRPLANE ARRIVING +1F6DD..1F6EC ; ON # So [16] PLAYGROUND SLIDE..AIRPLANE ARRIVING 1F6F0..1F6FC ; ON # So [13] SATELLITE..ROLLER SKATE 1F700..1F773 ; ON # So [116] ALCHEMICAL SYMBOL FOR QUINTESSENCE..ALCHEMICAL SYMBOL FOR HALF OUNCE 1F780..1F7D8 ; ON # So [89] BLACK LEFT-POINTING ISOSCELES RIGHT TRIANGLE..NEGATIVE CIRCLED SQUARE 1F7E0..1F7EB ; ON # So [12] LARGE ORANGE CIRCLE..LARGE BROWN SQUARE +1F7F0 ; ON # So HEAVY EQUALS SIGN 1F800..1F80B ; ON # So [12] LEFTWARDS ARROW WITH SMALL TRIANGLE ARROWHEAD..DOWNWARDS ARROW WITH LARGE TRIANGLE ARROWHEAD 1F810..1F847 ; ON # So [56] LEFTWARDS ARROW WITH SMALL EQUILATERAL ARROWHEAD..DOWNWARDS HEAVY ARROW 1F850..1F859 ; ON # So [10] LEFTWARDS SANS-SERIF ARROW..UP DOWN SANS-SERIF ARROW 1F860..1F887 ; ON # So [40] WIDE-HEADED LEFTWARDS LIGHT BARB ARROW..WIDE-HEADED SOUTH WEST VERY HEAVY BARB ARROW 1F890..1F8AD ; ON # So [30] LEFTWARDS TRIANGLE ARROWHEAD..WHITE ARROW SHAFT WIDTH TWO THIRDS 1F8B0..1F8B1 ; ON # So [2] ARROW POINTING UPWARDS THEN NORTH WEST..ARROW POINTING RIGHTWARDS THEN CURVING SOUTH WEST -1F900..1F978 ; ON # So [121] CIRCLED CROSS FORMEE WITH FOUR DOTS..DISGUISED FACE -1F97A..1F9CB ; ON # So [82] FACE WITH PLEADING EYES..BUBBLE TEA -1F9CD..1FA53 ; ON # So [135] STANDING PERSON..BLACK CHESS KNIGHT-BISHOP +1F900..1FA53 ; ON # So [340] CIRCLED CROSS FORMEE WITH FOUR DOTS..BLACK CHESS KNIGHT-BISHOP 1FA60..1FA6D ; ON # So [14] XIANGQI RED GENERAL..XIANGQI BLACK SOLDIER 1FA70..1FA74 ; ON # So [5] BALLET SHOES..THONG SANDAL -1FA78..1FA7A ; ON # So [3] DROP OF BLOOD..STETHOSCOPE +1FA78..1FA7C ; ON # So [5] DROP OF BLOOD..CRUTCH 1FA80..1FA86 ; ON # So [7] YO-YO..NESTING DOLLS -1FA90..1FAA8 ; ON # So [25] RINGED PLANET..ROCK -1FAB0..1FAB6 ; ON # So [7] FLY..FEATHER -1FAC0..1FAC2 ; ON # So [3] ANATOMICAL HEART..PEOPLE HUGGING -1FAD0..1FAD6 ; ON # So [7] BLUEBERRIES..TEAPOT +1FA90..1FAAC ; ON # So [29] RINGED PLANET..HAMSA +1FAB0..1FABA ; ON # So [11] FLY..NEST WITH EGGS +1FAC0..1FAC5 ; ON # So [6] ANATOMICAL HEART..PERSON WITH CROWN +1FAD0..1FAD9 ; ON # So [10] BLUEBERRIES..JAR +1FAE0..1FAE7 ; ON # So [8] MELTING FACE..BUBBLES +1FAF0..1FAF6 ; ON # So [7] HAND WITH INDEX FINGER AND THUMB CROSSED..HEART HANDS 1FB00..1FB92 ; ON # So [147] BLOCK SEXTANT-1..UPPER HALF INVERSE MEDIUM SHADE AND LOWER HALF BLOCK 1FB94..1FBCA ; ON # So [55] LEFT HALF INVERSE MEDIUM SHADE AND RIGHT HALF BLOCK..WHITE UP-POINTING CHEVRON -# Total code points: 5931 +# Total code points: 6000 # ================================================ @@ -1939,7 +1988,8 @@ FFFFE..FFFFF ; BN # Cn [2] .. 0825..0827 ; NSM # Mn [3] SAMARITAN VOWEL SIGN SHORT A..SAMARITAN VOWEL SIGN U 0829..082D ; NSM # Mn [5] SAMARITAN VOWEL SIGN LONG I..SAMARITAN MARK NEQUDAA 0859..085B ; NSM # Mn [3] MANDAIC AFFRICATION MARK..MANDAIC GEMINATION MARK -08D3..08E1 ; NSM # Mn [15] ARABIC SMALL LOW WAW..ARABIC SMALL HIGH SIGN SAFHA +0898..089F ; NSM # Mn [8] ARABIC SMALL HIGH WORD AL-JUZ..ARABIC HALF MADDA OVER MADDA +08CA..08E1 ; NSM # Mn [24] ARABIC SMALL HIGH FARSI YEH..ARABIC SMALL HIGH SIGN SAFHA 08E3..0902 ; NSM # Mn [32] ARABIC TURNED DAMMA BELOW..DEVANAGARI SIGN ANUSVARA 093A ; NSM # Mn DEVANAGARI VOWEL SIGN OE 093C ; NSM # Mn DEVANAGARI SIGN NUKTA @@ -1980,6 +2030,7 @@ FFFFE..FFFFF ; BN # Cn [2] .. 0BCD ; NSM # Mn TAMIL SIGN VIRAMA 0C00 ; NSM # Mn TELUGU SIGN COMBINING CANDRABINDU ABOVE 0C04 ; NSM # Mn TELUGU SIGN COMBINING ANUSVARA ABOVE +0C3C ; NSM # Mn TELUGU SIGN NUKTA 0C3E..0C40 ; NSM # Mn [3] TELUGU VOWEL SIGN AA..TELUGU VOWEL SIGN II 0C46..0C48 ; NSM # Mn [3] TELUGU VOWEL SIGN E..TELUGU VOWEL SIGN AI 0C4A..0C4D ; NSM # Mn [4] TELUGU VOWEL SIGN O..TELUGU SIGN VIRAMA @@ -2027,7 +2078,7 @@ FFFFE..FFFFF ; BN # Cn [2] .. 109D ; NSM # Mn MYANMAR VOWEL SIGN AITON AI 135D..135F ; NSM # Mn [3] ETHIOPIC COMBINING GEMINATION AND VOWEL LENGTH MARK..ETHIOPIC COMBINING GEMINATION MARK 1712..1714 ; NSM # Mn [3] TAGALOG VOWEL SIGN I..TAGALOG SIGN VIRAMA -1732..1734 ; NSM # Mn [3] HANUNOO VOWEL SIGN I..HANUNOO SIGN PAMUDPOD +1732..1733 ; NSM # Mn [2] HANUNOO VOWEL SIGN I..HANUNOO VOWEL SIGN U 1752..1753 ; NSM # Mn [2] BUHID VOWEL SIGN I..BUHID VOWEL SIGN U 1772..1773 ; NSM # Mn [2] TAGBANWA VOWEL SIGN I..TAGBANWA VOWEL SIGN U 17B4..17B5 ; NSM # Mn [2] KHMER VOWEL INHERENT AQ..KHMER VOWEL INHERENT AA @@ -2036,6 +2087,7 @@ FFFFE..FFFFF ; BN # Cn [2] .. 17C9..17D3 ; NSM # Mn [11] KHMER SIGN MUUSIKATOAN..KHMER SIGN BATHAMASAT 17DD ; NSM # Mn KHMER SIGN ATTHACAN 180B..180D ; NSM # Mn [3] MONGOLIAN FREE VARIATION SELECTOR ONE..MONGOLIAN FREE VARIATION SELECTOR THREE +180F ; NSM # Mn MONGOLIAN FREE VARIATION SELECTOR FOUR 1885..1886 ; NSM # Mn [2] MONGOLIAN LETTER ALI GALI BALUDA..MONGOLIAN LETTER ALI GALI THREE BALUDA 18A9 ; NSM # Mn MONGOLIAN LETTER ALI GALI DAGALGA 1920..1922 ; NSM # Mn [3] LIMBU VOWEL SIGN A..LIMBU VOWEL SIGN U @@ -2053,7 +2105,7 @@ FFFFE..FFFFF ; BN # Cn [2] .. 1A7F ; NSM # Mn TAI THAM COMBINING CRYPTOGRAMMIC DOT 1AB0..1ABD ; NSM # Mn [14] COMBINING DOUBLED CIRCUMFLEX ACCENT..COMBINING PARENTHESES BELOW 1ABE ; NSM # Me COMBINING PARENTHESES OVERLAY -1ABF..1AC0 ; NSM # Mn [2] COMBINING LATIN SMALL LETTER W BELOW..COMBINING LATIN SMALL LETTER TURNED W BELOW +1ABF..1ACE ; NSM # Mn [16] COMBINING LATIN SMALL LETTER W BELOW..COMBINING LATIN SMALL LETTER INSULAR T 1B00..1B03 ; NSM # Mn [4] BALINESE SIGN ULU RICEM..BALINESE SIGN SURANG 1B34 ; NSM # Mn BALINESE SIGN REREKAN 1B36..1B3A ; NSM # Mn [5] BALINESE VOWEL SIGN ULU..BALINESE VOWEL SIGN RA REPA @@ -2076,8 +2128,7 @@ FFFFE..FFFFF ; BN # Cn [2] .. 1CED ; NSM # Mn VEDIC SIGN TIRYAK 1CF4 ; NSM # Mn VEDIC TONE CANDRA ABOVE 1CF8..1CF9 ; NSM # Mn [2] VEDIC TONE RING ABOVE..VEDIC TONE DOUBLE RING ABOVE -1DC0..1DF9 ; NSM # Mn [58] COMBINING DOTTED GRAVE ACCENT..COMBINING WIDE INVERTED BRIDGE BELOW -1DFB..1DFF ; NSM # Mn [5] COMBINING DELETION MARK..COMBINING RIGHT ARROWHEAD AND DOWN ARROWHEAD BELOW +1DC0..1DFF ; NSM # Mn [64] COMBINING DOTTED GRAVE ACCENT..COMBINING RIGHT ARROWHEAD AND DOWN ARROWHEAD BELOW 20D0..20DC ; NSM # Mn [13] COMBINING LEFT HARPOON ABOVE..COMBINING FOUR DOTS ABOVE 20DD..20E0 ; NSM # Me [4] COMBINING ENCLOSING CIRCLE..COMBINING ENCLOSING CIRCLE BACKSLASH 20E1 ; NSM # Mn COMBINING LEFT RIGHT ARROW ABOVE @@ -2139,11 +2190,15 @@ FE20..FE2F ; NSM # Mn [16] COMBINING LIGATURE LEFT HALF..COMBINING CYRILLIC 10D24..10D27 ; NSM # Mn [4] HANIFI ROHINGYA SIGN HARBAHAY..HANIFI ROHINGYA SIGN TASSI 10EAB..10EAC ; NSM # Mn [2] YEZIDI COMBINING HAMZA MARK..YEZIDI COMBINING MADDA MARK 10F46..10F50 ; NSM # Mn [11] SOGDIAN COMBINING DOT BELOW..SOGDIAN COMBINING STROKE BELOW +10F82..10F85 ; NSM # Mn [4] OLD UYGHUR COMBINING DOT ABOVE..OLD UYGHUR COMBINING TWO DOTS BELOW 11001 ; NSM # Mn BRAHMI SIGN ANUSVARA 11038..11046 ; NSM # Mn [15] BRAHMI VOWEL SIGN AA..BRAHMI VIRAMA +11070 ; NSM # Mn BRAHMI SIGN OLD TAMIL VIRAMA +11073..11074 ; NSM # Mn [2] BRAHMI VOWEL SIGN OLD TAMIL SHORT E..BRAHMI VOWEL SIGN OLD TAMIL SHORT O 1107F..11081 ; NSM # Mn [3] BRAHMI NUMBER JOINER..KAITHI SIGN ANUSVARA 110B3..110B6 ; NSM # Mn [4] KAITHI VOWEL SIGN U..KAITHI VOWEL SIGN AI 110B9..110BA ; NSM # Mn [2] KAITHI SIGN VIRAMA..KAITHI SIGN NUKTA +110C2 ; NSM # Mn KAITHI VOWEL SIGN VOCALIC R 11100..11102 ; NSM # Mn [3] CHAKMA SIGN CANDRABINDU..CHAKMA SIGN VISARGA 11127..1112B ; NSM # Mn [5] CHAKMA VOWEL SIGN A..CHAKMA VOWEL SIGN UU 1112D..11134 ; NSM # Mn [8] CHAKMA VOWEL SIGN AI..CHAKMA MAAYYAA @@ -2223,6 +2278,8 @@ FE20..FE2F ; NSM # Mn [16] COMBINING LIGATURE LEFT HALF..COMBINING CYRILLIC 16F8F..16F92 ; NSM # Mn [4] MIAO TONE RIGHT..MIAO TONE BELOW 16FE4 ; NSM # Mn KHITAN SMALL SCRIPT FILLER 1BC9D..1BC9E ; NSM # Mn [2] DUPLOYAN THICK LETTER SELECTOR..DUPLOYAN DOUBLE MARK +1CF00..1CF2D ; NSM # Mn [46] ZNAMENNY COMBINING MARK GORAZDO NIZKO S KRYZHEM ON LEFT..ZNAMENNY COMBINING MARK KRYZH ON LEFT +1CF30..1CF46 ; NSM # Mn [23] ZNAMENNY COMBINING TONAL RANGE MARK MRACHNO..ZNAMENNY PRIZNAK MODIFIER ROG 1D167..1D169 ; NSM # Mn [3] MUSICAL SYMBOL COMBINING TREMOLO-1..MUSICAL SYMBOL COMBINING TREMOLO-3 1D17B..1D182 ; NSM # Mn [8] MUSICAL SYMBOL COMBINING ACCENT..MUSICAL SYMBOL COMBINING LOURE 1D185..1D18B ; NSM # Mn [7] MUSICAL SYMBOL COMBINING DOIT..MUSICAL SYMBOL COMBINING TRIPLE TONGUE @@ -2240,12 +2297,13 @@ FE20..FE2F ; NSM # Mn [16] COMBINING LIGATURE LEFT HALF..COMBINING CYRILLIC 1E023..1E024 ; NSM # Mn [2] COMBINING GLAGOLITIC LETTER YU..COMBINING GLAGOLITIC LETTER SMALL YUS 1E026..1E02A ; NSM # Mn [5] COMBINING GLAGOLITIC LETTER YO..COMBINING GLAGOLITIC LETTER FITA 1E130..1E136 ; NSM # Mn [7] NYIAKENG PUACHUE HMONG TONE-B..NYIAKENG PUACHUE HMONG TONE-D +1E2AE ; NSM # Mn TOTO SIGN RISING TONE 1E2EC..1E2EF ; NSM # Mn [4] WANCHO TONE TUP..WANCHO TONE KOINI 1E8D0..1E8D6 ; NSM # Mn [7] MENDE KIKAKUI COMBINING NUMBER TEENS..MENDE KIKAKUI COMBINING NUMBER MILLIONS 1E944..1E94A ; NSM # Mn [7] ADLAM ALIF LENGTHENER..ADLAM NUKTA E0100..E01EF ; NSM # Mn [240] VARIATION SELECTOR-17..VARIATION SELECTOR-256 -# Total code points: 1847 +# Total code points: 1958 # ================================================ @@ -2256,8 +2314,7 @@ E0100..E01EF ; NSM # Mn [240] VARIATION SELECTOR-17..VARIATION SELECTOR-256 060D ; AL # Po ARABIC DATE SEPARATOR 061B ; AL # Po ARABIC SEMICOLON 061C ; AL # Cf ARABIC LETTER MARK -061D ; AL # Cn -061E..061F ; AL # Po [2] ARABIC TRIPLE DOT PUNCTUATION MARK..ARABIC QUESTION MARK +061D..061F ; AL # Po [3] ARABIC END OF TEXT MARK..ARABIC QUESTION MARK 0620..063F ; AL # Lo [32] ARABIC LETTER KASHMIRI YEH..ARABIC LETTER FARSI YEH WITH THREE DOTS ABOVE 0640 ; AL # Lm ARABIC TATWEEL 0641..064A ; AL # Lo [10] ARABIC LETTER FEH..ARABIC LETTER YEH @@ -2282,22 +2339,23 @@ E0100..E01EF ; NSM # Mn [240] VARIATION SELECTOR-17..VARIATION SELECTOR-256 07B2..07BF ; AL # Cn [14] .. 0860..086A ; AL # Lo [11] SYRIAC LETTER MALAYALAM NGA..SYRIAC LETTER MALAYALAM SSA 086B..086F ; AL # Cn [5] .. -08A0..08B4 ; AL # Lo [21] ARABIC LETTER BEH WITH SMALL V BELOW..ARABIC LETTER KAF WITH DOT BELOW -08B5 ; AL # Cn -08B6..08C7 ; AL # Lo [18] ARABIC LETTER BEH WITH SMALL MEEM ABOVE..ARABIC LETTER LAM WITH SMALL ARABIC LETTER TAH ABOVE -08C8..08D2 ; AL # Cn [11] .. +0870..0887 ; AL # Lo [24] ARABIC LETTER ALEF WITH ATTACHED FATHA..ARABIC BASELINE ROUND DOT +0888 ; AL # Sk ARABIC RAISED ROUND DOT +0889..088E ; AL # Lo [6] ARABIC LETTER NOON WITH INVERTED SMALL V..ARABIC VERTICAL TAIL +088F ; AL # Cn +0892..0897 ; AL # Cn [6] .. +08A0..08C8 ; AL # Lo [41] ARABIC LETTER BEH WITH SMALL V BELOW..ARABIC LETTER GRAF +08C9 ; AL # Lm ARABIC SMALL FARSI YEH FB50..FBB1 ; AL # Lo [98] ARABIC LETTER ALEF WASLA ISOLATED FORM..ARABIC LETTER YEH BARREE WITH HAMZA ABOVE FINAL FORM -FBB2..FBC1 ; AL # Sk [16] ARABIC SYMBOL DOT ABOVE..ARABIC SYMBOL SMALL TAH BELOW -FBC2..FBD2 ; AL # Cn [17] .. +FBB2..FBC2 ; AL # Sk [17] ARABIC SYMBOL DOT ABOVE..ARABIC SYMBOL WASLA ABOVE +FBC3..FBD2 ; AL # Cn [16] .. FBD3..FD3D ; AL # Lo [363] ARABIC LETTER NG ISOLATED FORM..ARABIC LIGATURE ALEF WITH FATHATAN ISOLATED FORM -FD40..FD4F ; AL # Cn [16] .. FD50..FD8F ; AL # Lo [64] ARABIC LIGATURE TEH WITH JEEM WITH MEEM INITIAL FORM..ARABIC LIGATURE MEEM WITH KHAH WITH MEEM INITIAL FORM FD90..FD91 ; AL # Cn [2] .. FD92..FDC7 ; AL # Lo [54] ARABIC LIGATURE MEEM WITH JEEM WITH KHAH INITIAL FORM..ARABIC LIGATURE NOON WITH JEEM WITH YEH FINAL FORM -FDC8..FDCF ; AL # Cn [8] .. +FDC8..FDCE ; AL # Cn [7] .. FDF0..FDFB ; AL # Lo [12] ARABIC LIGATURE SALLA USED AS KORANIC STOP SIGN ISOLATED FORM..ARABIC LIGATURE JALLAJALALOUHOU FDFC ; AL # Sc RIAL SIGN -FDFE..FDFF ; AL # Cn [2] .. FE70..FE74 ; AL # Lo [5] ARABIC FATHATAN ISOLATED FORM..ARABIC KASRATAN ISOLATED FORM FE75 ; AL # Cn FE76..FEFC ; AL # Lo [135] ARABIC FATHA ISOLATED FORM..ARABIC LIGATURE LAM WITH ALEF FINAL FORM @@ -2389,7 +2447,7 @@ FEFD..FEFE ; AL # Cn [2] .. 1EEBC..1EEEF ; AL # Cn [52] .. 1EEF2..1EEFF ; AL # Cn [14] .. -# Total code points: 1698 +# Total code points: 1708 # ================================================ diff --git a/gnu/usr.bin/perl/lib/unicore/extracted/DBinaryProperties.txt b/gnu/usr.bin/perl/lib/unicore/extracted/DBinaryProperties.txt index 4c31bac1193..60409c05baa 100644 --- a/gnu/usr.bin/perl/lib/unicore/extracted/DBinaryProperties.txt +++ b/gnu/usr.bin/perl/lib/unicore/extracted/DBinaryProperties.txt @@ -1,6 +1,6 @@ -# DerivedBinaryProperties-13.0.0.txt -# Date: 2019-09-08, 23:31:04 GMT -# © 2019 Unicode®, Inc. +# DerivedBinaryProperties-14.0.0.txt +# Date: 2021-06-04, 02:19:15 GMT +# © 2021 Unicode®, Inc. # Unicode and the Unicode Logo are registered trademarks of Unicode, Inc. in the U.S. and other countries. # For terms of use, see http://www.unicode.org/terms_of_use.html # @@ -9,7 +9,7 @@ # ================================================ -# Bidi_Mirrored (listing UnicodeData.txt, field 9: see UAX #44: http://www.unicode.org/reports/tr44/) +# Bidi_Mirrored (listing UnicodeData.txt, field 9: see UAX #44: https://www.unicode.org/reports/tr44/) 0028 ; Bidi_Mirrored # Ps LEFT PARENTHESIS 0029 ; Bidi_Mirrored # Pe RIGHT PARENTHESIS @@ -185,6 +185,14 @@ 2E27 ; Bidi_Mirrored # Pe RIGHT SIDEWAYS U BRACKET 2E28 ; Bidi_Mirrored # Ps LEFT DOUBLE PARENTHESIS 2E29 ; Bidi_Mirrored # Pe RIGHT DOUBLE PARENTHESIS +2E55 ; Bidi_Mirrored # Ps LEFT SQUARE BRACKET WITH STROKE +2E56 ; Bidi_Mirrored # Pe RIGHT SQUARE BRACKET WITH STROKE +2E57 ; Bidi_Mirrored # Ps LEFT SQUARE BRACKET WITH DOUBLE STROKE +2E58 ; Bidi_Mirrored # Pe RIGHT SQUARE BRACKET WITH DOUBLE STROKE +2E59 ; Bidi_Mirrored # Ps TOP HALF LEFT PARENTHESIS +2E5A ; Bidi_Mirrored # Pe TOP HALF RIGHT PARENTHESIS +2E5B ; Bidi_Mirrored # Ps BOTTOM HALF LEFT PARENTHESIS +2E5C ; Bidi_Mirrored # Pe BOTTOM HALF RIGHT PARENTHESIS 3008 ; Bidi_Mirrored # Ps LEFT ANGLE BRACKET 3009 ; Bidi_Mirrored # Pe RIGHT ANGLE BRACKET 300A ; Bidi_Mirrored # Ps LEFT DOUBLE ANGLE BRACKET @@ -228,6 +236,6 @@ FF63 ; Bidi_Mirrored # Pe HALFWIDTH RIGHT CORNER BRACKET 1D789 ; Bidi_Mirrored # Sm MATHEMATICAL SANS-SERIF BOLD PARTIAL DIFFERENTIAL 1D7C3 ; Bidi_Mirrored # Sm MATHEMATICAL SANS-SERIF BOLD ITALIC PARTIAL DIFFERENTIAL -# Total code points: 545 +# Total code points: 553 # EOF diff --git a/gnu/usr.bin/perl/lib/unicore/extracted/DCombiningClass.txt b/gnu/usr.bin/perl/lib/unicore/extracted/DCombiningClass.txt index b4c75cd4591..4ad82057901 100644 --- a/gnu/usr.bin/perl/lib/unicore/extracted/DCombiningClass.txt +++ b/gnu/usr.bin/perl/lib/unicore/extracted/DCombiningClass.txt @@ -1,6 +1,6 @@ -# DerivedCombiningClass-13.0.0.txt -# Date: 2019-11-13, 21:51:57 GMT -# © 2019 Unicode®, Inc. +# DerivedCombiningClass-14.0.0.txt +# Date: 2021-07-10, 00:35:05 GMT +# © 2021 Unicode®, Inc. # Unicode and the Unicode Logo are registered trademarks of Unicode, Inc. in the U.S. and other countries. # For terms of use, see http://www.unicode.org/terms_of_use.html # @@ -9,7 +9,7 @@ # ================================================ -# Combining Class (listing UnicodeData.txt, field 3: see UAX #44: http://www.unicode.org/reports/tr44/) +# Combining Class (listing UnicodeData.txt, field 3: see UAX #44: https://www.unicode.org/reports/tr44/) # All code points not explicitly listed for Canonical_Combining_Class # have the value Not_Reordered (0). @@ -139,7 +139,7 @@ 060E..060F ; 0 # So [2] ARABIC POETIC VERSE SIGN..ARABIC SIGN MISRA 061B ; 0 # Po ARABIC SEMICOLON 061C ; 0 # Cf ARABIC LETTER MARK -061E..061F ; 0 # Po [2] ARABIC TRIPLE DOT PUNCTUATION MARK..ARABIC QUESTION MARK +061D..061F ; 0 # Po [3] ARABIC END OF TEXT MARK..ARABIC QUESTION MARK 0620..063F ; 0 # Lo [32] ARABIC LETTER KASHMIRI YEH..ARABIC LETTER FARSI YEH WITH THREE DOTS ABOVE 0640 ; 0 # Lm ARABIC TATWEEL 0641..064A ; 0 # Lo [10] ARABIC LETTER FEH..ARABIC LETTER YEH @@ -180,8 +180,12 @@ 0840..0858 ; 0 # Lo [25] MANDAIC LETTER HALQA..MANDAIC LETTER AIN 085E ; 0 # Po MANDAIC PUNCTUATION 0860..086A ; 0 # Lo [11] SYRIAC LETTER MALAYALAM NGA..SYRIAC LETTER MALAYALAM SSA -08A0..08B4 ; 0 # Lo [21] ARABIC LETTER BEH WITH SMALL V BELOW..ARABIC LETTER KAF WITH DOT BELOW -08B6..08C7 ; 0 # Lo [18] ARABIC LETTER BEH WITH SMALL MEEM ABOVE..ARABIC LETTER LAM WITH SMALL ARABIC LETTER TAH ABOVE +0870..0887 ; 0 # Lo [24] ARABIC LETTER ALEF WITH ATTACHED FATHA..ARABIC BASELINE ROUND DOT +0888 ; 0 # Sk ARABIC RAISED ROUND DOT +0889..088E ; 0 # Lo [6] ARABIC LETTER NOON WITH INVERTED SMALL V..ARABIC VERTICAL TAIL +0890..0891 ; 0 # Cf [2] ARABIC POUND MARK ABOVE..ARABIC PIASTRE MARK ABOVE +08A0..08C8 ; 0 # Lo [41] ARABIC LETTER BEH WITH SMALL V BELOW..ARABIC LETTER GRAF +08C9 ; 0 # Lm ARABIC SMALL FARSI YEH 08E2 ; 0 # Cf ARABIC DISPUTED END OF AYAH 0900..0902 ; 0 # Mn [3] DEVANAGARI SIGN INVERTED CANDRABINDU..DEVANAGARI SIGN ANUSVARA 0903 ; 0 # Mc DEVANAGARI SIGN VISARGA @@ -331,6 +335,7 @@ 0C46..0C48 ; 0 # Mn [3] TELUGU VOWEL SIGN E..TELUGU VOWEL SIGN AI 0C4A..0C4C ; 0 # Mn [3] TELUGU VOWEL SIGN O..TELUGU VOWEL SIGN AU 0C58..0C5A ; 0 # Lo [3] TELUGU LETTER TSA..TELUGU LETTER RRRA +0C5D ; 0 # Lo TELUGU LETTER NAKAARA POLLU 0C60..0C61 ; 0 # Lo [2] TELUGU LETTER VOCALIC RR..TELUGU LETTER VOCALIC LL 0C62..0C63 ; 0 # Mn [2] TELUGU VOWEL SIGN VOCALIC L..TELUGU VOWEL SIGN VOCALIC LL 0C66..0C6F ; 0 # Nd [10] TELUGU DIGIT ZERO..TELUGU DIGIT NINE @@ -355,7 +360,7 @@ 0CCA..0CCB ; 0 # Mc [2] KANNADA VOWEL SIGN O..KANNADA VOWEL SIGN OO 0CCC ; 0 # Mn KANNADA VOWEL SIGN AU 0CD5..0CD6 ; 0 # Mc [2] KANNADA LENGTH MARK..KANNADA AI LENGTH MARK -0CDE ; 0 # Lo KANNADA LETTER FA +0CDD..0CDE ; 0 # Lo [2] KANNADA LETTER NAKAARA POLLU..KANNADA LETTER FA 0CE0..0CE1 ; 0 # Lo [2] KANNADA LETTER VOCALIC RR..KANNADA LETTER VOCALIC LL 0CE2..0CE3 ; 0 # Mn [2] KANNADA VOWEL SIGN VOCALIC L..KANNADA VOWEL SIGN VOCALIC LL 0CE6..0CEF ; 0 # Nd [10] KANNADA DIGIT ZERO..KANNADA DIGIT NINE @@ -532,10 +537,9 @@ 16EB..16ED ; 0 # Po [3] RUNIC SINGLE PUNCTUATION..RUNIC CROSS PUNCTUATION 16EE..16F0 ; 0 # Nl [3] RUNIC ARLAUG SYMBOL..RUNIC BELGTHOR SYMBOL 16F1..16F8 ; 0 # Lo [8] RUNIC LETTER K..RUNIC LETTER FRANKS CASKET AESC -1700..170C ; 0 # Lo [13] TAGALOG LETTER A..TAGALOG LETTER YA -170E..1711 ; 0 # Lo [4] TAGALOG LETTER LA..TAGALOG LETTER HA +1700..1711 ; 0 # Lo [18] TAGALOG LETTER A..TAGALOG LETTER HA 1712..1713 ; 0 # Mn [2] TAGALOG VOWEL SIGN I..TAGALOG VOWEL SIGN U -1720..1731 ; 0 # Lo [18] HANUNOO LETTER A..HANUNOO LETTER HA +171F..1731 ; 0 # Lo [19] TAGALOG LETTER ARCHAIC RA..HANUNOO LETTER HA 1732..1733 ; 0 # Mn [2] HANUNOO VOWEL SIGN I..HANUNOO VOWEL SIGN U 1735..1736 ; 0 # Po [2] PHILIPPINE SINGLE PUNCTUATION..PHILIPPINE DOUBLE PUNCTUATION 1740..1751 ; 0 # Lo [18] BUHID LETTER A..BUHID LETTER HA @@ -564,6 +568,7 @@ 1807..180A ; 0 # Po [4] MONGOLIAN SIBE SYLLABLE BOUNDARY MARKER..MONGOLIAN NIRUGU 180B..180D ; 0 # Mn [3] MONGOLIAN FREE VARIATION SELECTOR ONE..MONGOLIAN FREE VARIATION SELECTOR THREE 180E ; 0 # Cf MONGOLIAN VOWEL SEPARATOR +180F ; 0 # Mn MONGOLIAN FREE VARIATION SELECTOR FOUR 1810..1819 ; 0 # Nd [10] MONGOLIAN DIGIT ZERO..MONGOLIAN DIGIT NINE 1820..1842 ; 0 # Lo [35] MONGOLIAN LETTER A..MONGOLIAN LETTER CHI 1843 ; 0 # Lm MONGOLIAN LETTER TODO LONG VOWEL SIGN @@ -622,11 +627,12 @@ 1B3D..1B41 ; 0 # Mc [5] BALINESE VOWEL SIGN LA LENGA TEDUNG..BALINESE VOWEL SIGN TALING REPA TEDUNG 1B42 ; 0 # Mn BALINESE VOWEL SIGN PEPET 1B43 ; 0 # Mc BALINESE VOWEL SIGN PEPET TEDUNG -1B45..1B4B ; 0 # Lo [7] BALINESE LETTER KAF SASAK..BALINESE LETTER ASYURA SASAK +1B45..1B4C ; 0 # Lo [8] BALINESE LETTER KAF SASAK..BALINESE LETTER ARCHAIC JNYA 1B50..1B59 ; 0 # Nd [10] BALINESE DIGIT ZERO..BALINESE DIGIT NINE 1B5A..1B60 ; 0 # Po [7] BALINESE PANTI..BALINESE PAMENENG 1B61..1B6A ; 0 # So [10] BALINESE MUSICAL SYMBOL DONG..BALINESE MUSICAL SYMBOL DANG GEDE 1B74..1B7C ; 0 # So [9] BALINESE MUSICAL SYMBOL RIGHT-HAND OPEN DUG..BALINESE MUSICAL SYMBOL LEFT-HAND OPEN PING +1B7D..1B7E ; 0 # Po [2] BALINESE PANTI LANTANG..BALINESE PAMADA LANTANG 1B80..1B81 ; 0 # Mn [2] SUNDANESE SIGN PANYECEK..SUNDANESE SIGN PANGLAYAR 1B82 ; 0 # Mc SUNDANESE SIGN PANGWISAD 1B83..1BA0 ; 0 # Lo [30] SUNDANESE LETTER A..SUNDANESE LETTER HA @@ -744,7 +750,7 @@ 208D ; 0 # Ps SUBSCRIPT LEFT PARENTHESIS 208E ; 0 # Pe SUBSCRIPT RIGHT PARENTHESIS 2090..209C ; 0 # Lm [13] LATIN SUBSCRIPT SMALL LETTER A..LATIN SUBSCRIPT SMALL LETTER T -20A0..20BF ; 0 # Sc [32] EURO-CURRENCY SIGN..BITCOIN SIGN +20A0..20C0 ; 0 # Sc [33] EURO-CURRENCY SIGN..SOM SIGN 20DD..20E0 ; 0 # Me [4] COMBINING ENCLOSING CIRCLE..COMBINING ENCLOSING CIRCLE BACKSLASH 20E2..20E4 ; 0 # Me [3] COMBINING ENCLOSING SCREEN..COMBINING ENCLOSING UPWARD POINTING TRIANGLE 2100..2101 ; 0 # So [2] ACCOUNT OF..ADDRESSED TO THE SUBJECT @@ -905,9 +911,7 @@ 2B4D..2B73 ; 0 # So [39] DOWNWARDS TRIANGLE-HEADED ZIGZAG ARROW..DOWNWARDS TRIANGLE-HEADED ARROW TO BAR 2B76..2B95 ; 0 # So [32] NORTH WEST TRIANGLE-HEADED ARROW TO BAR..RIGHTWARDS BLACK ARROW 2B97..2BFF ; 0 # So [105] SYMBOL FOR TYPE A ELECTRONICS..HELLSCHREIBER PAUSE SYMBOL -2C00..2C2E ; 0 # L& [47] GLAGOLITIC CAPITAL LETTER AZU..GLAGOLITIC CAPITAL LETTER LATINATE MYSLITE -2C30..2C5E ; 0 # L& [47] GLAGOLITIC SMALL LETTER AZU..GLAGOLITIC SMALL LETTER LATINATE MYSLITE -2C60..2C7B ; 0 # L& [28] LATIN CAPITAL LETTER L WITH DOUBLE BAR..LATIN LETTER SMALL CAPITAL TURNED E +2C00..2C7B ; 0 # L& [124] GLAGOLITIC CAPITAL LETTER AZU..LATIN LETTER SMALL CAPITAL TURNED E 2C7C..2C7D ; 0 # Lm [2] LATIN SUBSCRIPT SMALL LETTER J..MODIFIER LETTER CAPITAL V 2C7E..2CE4 ; 0 # L& [103] LATIN CAPITAL LETTER S WITH SWASH TAIL..COPTIC SYMBOL KAI 2CE5..2CEA ; 0 # So [6] COPTIC SYMBOL MI RO..COPTIC SYMBOL SHIMA SIMA @@ -970,7 +974,16 @@ 2E42 ; 0 # Ps DOUBLE LOW-REVERSED-9 QUOTATION MARK 2E43..2E4F ; 0 # Po [13] DASH WITH LEFT UPTURN..CORNISH VERSE DIVIDER 2E50..2E51 ; 0 # So [2] CROSS PATTY WITH RIGHT CROSSBAR..CROSS PATTY WITH LEFT CROSSBAR -2E52 ; 0 # Po TIRONIAN SIGN CAPITAL ET +2E52..2E54 ; 0 # Po [3] TIRONIAN SIGN CAPITAL ET..MEDIEVAL QUESTION MARK +2E55 ; 0 # Ps LEFT SQUARE BRACKET WITH STROKE +2E56 ; 0 # Pe RIGHT SQUARE BRACKET WITH STROKE +2E57 ; 0 # Ps LEFT SQUARE BRACKET WITH DOUBLE STROKE +2E58 ; 0 # Pe RIGHT SQUARE BRACKET WITH DOUBLE STROKE +2E59 ; 0 # Ps TOP HALF LEFT PARENTHESIS +2E5A ; 0 # Pe TOP HALF RIGHT PARENTHESIS +2E5B ; 0 # Ps BOTTOM HALF LEFT PARENTHESIS +2E5C ; 0 # Pe BOTTOM HALF RIGHT PARENTHESIS +2E5D ; 0 # Pd OBLIQUE HYPHEN 2E80..2E99 ; 0 # So [26] CJK RADICAL REPEAT..CJK RADICAL RAP 2E9B..2EF3 ; 0 # So [89] CJK RADICAL CHOKE..CJK RADICAL C-SIMPLIFIED TURTLE 2F00..2FD5 ; 0 # So [214] KANGXI RADICAL ONE..KANGXI RADICAL FLUTE @@ -1043,8 +1056,7 @@ 32C0..33FF ; 0 # So [320] IDEOGRAPHIC TELEGRAPH SYMBOL FOR JANUARY..SQUARE GAL 3400..4DBF ; 0 # Lo [6592] CJK UNIFIED IDEOGRAPH-3400..CJK UNIFIED IDEOGRAPH-4DBF 4DC0..4DFF ; 0 # So [64] HEXAGRAM FOR THE CREATIVE HEAVEN..HEXAGRAM FOR BEFORE COMPLETION -4E00..9FFC ; 0 # Lo [20989] CJK UNIFIED IDEOGRAPH-4E00..CJK UNIFIED IDEOGRAPH-9FFC -A000..A014 ; 0 # Lo [21] YI SYLLABLE IT..YI SYLLABLE E +4E00..A014 ; 0 # Lo [21013] CJK UNIFIED IDEOGRAPH-4E00..YI SYLLABLE E A015 ; 0 # Lm YI SYLLABLE WU A016..A48C ; 0 # Lo [1143] YI SYLLABLE BIT..YI SYLLABLE YYR A490..A4C6 ; 0 # So [55] YI RADICAL QOT..YI RADICAL KE @@ -1078,8 +1090,11 @@ A788 ; 0 # Lm MODIFIER LETTER LOW CIRCUMFLEX ACCENT A789..A78A ; 0 # Sk [2] MODIFIER LETTER COLON..MODIFIER LETTER SHORT EQUALS SIGN A78B..A78E ; 0 # L& [4] LATIN CAPITAL LETTER SALTILLO..LATIN SMALL LETTER L WITH RETROFLEX HOOK AND BELT A78F ; 0 # Lo LATIN LETTER SINOLOGICAL DOT -A790..A7BF ; 0 # L& [48] LATIN CAPITAL LETTER N WITH DESCENDER..LATIN SMALL LETTER GLOTTAL U -A7C2..A7CA ; 0 # L& [9] LATIN CAPITAL LETTER ANGLICANA W..LATIN SMALL LETTER S WITH SHORT STROKE OVERLAY +A790..A7CA ; 0 # L& [59] LATIN CAPITAL LETTER N WITH DESCENDER..LATIN SMALL LETTER S WITH SHORT STROKE OVERLAY +A7D0..A7D1 ; 0 # L& [2] LATIN CAPITAL LETTER CLOSED INSULAR G..LATIN SMALL LETTER CLOSED INSULAR G +A7D3 ; 0 # L& LATIN SMALL LETTER DOUBLE THORN +A7D5..A7D9 ; 0 # L& [5] LATIN SMALL LETTER DOUBLE WYNN..LATIN SMALL LETTER SIGMOID S +A7F2..A7F4 ; 0 # Lm [3] MODIFIER LETTER CAPITAL C..MODIFIER LETTER CAPITAL Q A7F5..A7F6 ; 0 # L& [2] LATIN CAPITAL LETTER REVERSED HALF H..LATIN SMALL LETTER REVERSED HALF H A7F7 ; 0 # Lo LATIN EPIGRAPHIC LETTER SIDEWAYS I A7F8..A7F9 ; 0 # Lm [2] MODIFIER LETTER CAPITAL H WITH STROKE..MODIFIER LETTER SMALL LIGATURE OE @@ -1215,15 +1230,17 @@ FB3E ; 0 # Lo HEBREW LETTER MEM WITH DAGESH FB40..FB41 ; 0 # Lo [2] HEBREW LETTER NUN WITH DAGESH..HEBREW LETTER SAMEKH WITH DAGESH FB43..FB44 ; 0 # Lo [2] HEBREW LETTER FINAL PE WITH DAGESH..HEBREW LETTER PE WITH DAGESH FB46..FBB1 ; 0 # Lo [108] HEBREW LETTER TSADI WITH DAGESH..ARABIC LETTER YEH BARREE WITH HAMZA ABOVE FINAL FORM -FBB2..FBC1 ; 0 # Sk [16] ARABIC SYMBOL DOT ABOVE..ARABIC SYMBOL SMALL TAH BELOW +FBB2..FBC2 ; 0 # Sk [17] ARABIC SYMBOL DOT ABOVE..ARABIC SYMBOL WASLA ABOVE FBD3..FD3D ; 0 # Lo [363] ARABIC LETTER NG ISOLATED FORM..ARABIC LIGATURE ALEF WITH FATHATAN ISOLATED FORM FD3E ; 0 # Pe ORNATE LEFT PARENTHESIS FD3F ; 0 # Ps ORNATE RIGHT PARENTHESIS +FD40..FD4F ; 0 # So [16] ARABIC LIGATURE RAHIMAHU ALLAAH..ARABIC LIGATURE RAHIMAHUM ALLAAH FD50..FD8F ; 0 # Lo [64] ARABIC LIGATURE TEH WITH JEEM WITH MEEM INITIAL FORM..ARABIC LIGATURE MEEM WITH KHAH WITH MEEM INITIAL FORM FD92..FDC7 ; 0 # Lo [54] ARABIC LIGATURE MEEM WITH JEEM WITH KHAH INITIAL FORM..ARABIC LIGATURE NOON WITH JEEM WITH YEH FINAL FORM +FDCF ; 0 # So ARABIC LIGATURE SALAAMUHU ALAYNAA FDF0..FDFB ; 0 # Lo [12] ARABIC LIGATURE SALLA USED AS KORANIC STOP SIGN ISOLATED FORM..ARABIC LIGATURE JALLAJALALOUHOU FDFC ; 0 # Sc RIAL SIGN -FDFD ; 0 # So ARABIC LIGATURE BISMILLAH AR-RAHMAN AR-RAHEEM +FDFD..FDFF ; 0 # So [3] ARABIC LIGATURE BISMILLAH AR-RAHMAN AR-RAHEEM..ARABIC LIGATURE AZZA WA JALL FE00..FE0F ; 0 # Mn [16] VARIATION SELECTOR-1..VARIATION SELECTOR-16 FE10..FE16 ; 0 # Po [7] PRESENTATION FORM FOR VERTICAL COMMA..PRESENTATION FORM FOR VERTICAL QUESTION MARK FE17 ; 0 # Ps PRESENTATION FORM FOR VERTICAL LEFT WHITE LENTICULAR BRACKET @@ -1365,9 +1382,20 @@ FFFC..FFFD ; 0 # So [2] OBJECT REPLACEMENT CHARACTER..REPLACEMENT CHARACTER 10500..10527 ; 0 # Lo [40] ELBASAN LETTER A..ELBASAN LETTER KHE 10530..10563 ; 0 # Lo [52] CAUCASIAN ALBANIAN LETTER ALT..CAUCASIAN ALBANIAN LETTER KIW 1056F ; 0 # Po CAUCASIAN ALBANIAN CITATION MARK +10570..1057A ; 0 # L& [11] VITHKUQI CAPITAL LETTER A..VITHKUQI CAPITAL LETTER GA +1057C..1058A ; 0 # L& [15] VITHKUQI CAPITAL LETTER HA..VITHKUQI CAPITAL LETTER RE +1058C..10592 ; 0 # L& [7] VITHKUQI CAPITAL LETTER SE..VITHKUQI CAPITAL LETTER XE +10594..10595 ; 0 # L& [2] VITHKUQI CAPITAL LETTER Y..VITHKUQI CAPITAL LETTER ZE +10597..105A1 ; 0 # L& [11] VITHKUQI SMALL LETTER A..VITHKUQI SMALL LETTER GA +105A3..105B1 ; 0 # L& [15] VITHKUQI SMALL LETTER HA..VITHKUQI SMALL LETTER RE +105B3..105B9 ; 0 # L& [7] VITHKUQI SMALL LETTER SE..VITHKUQI SMALL LETTER XE +105BB..105BC ; 0 # L& [2] VITHKUQI SMALL LETTER Y..VITHKUQI SMALL LETTER ZE 10600..10736 ; 0 # Lo [311] LINEAR A SIGN AB001..LINEAR A SIGN A664 10740..10755 ; 0 # Lo [22] LINEAR A SIGN A701 A..LINEAR A SIGN A732 JE 10760..10767 ; 0 # Lo [8] LINEAR A SIGN A800..LINEAR A SIGN A807 +10780..10785 ; 0 # Lm [6] MODIFIER LETTER SMALL CAPITAL AA..MODIFIER LETTER SMALL B WITH HOOK +10787..107B0 ; 0 # Lm [42] MODIFIER LETTER SMALL DZ DIGRAPH..MODIFIER LETTER SMALL V WITH RIGHT HOOK +107B2..107BA ; 0 # Lm [9] MODIFIER LETTER SMALL CAPITAL Y..MODIFIER LETTER SMALL S WITH CURL 10800..10805 ; 0 # Lo [6] CYPRIOT SYLLABLE A..CYPRIOT SYLLABLE JA 10808 ; 0 # Lo CYPRIOT SYLLABLE JO 1080A..10835 ; 0 # Lo [44] CYPRIOT SYLLABLE KA..CYPRIOT SYLLABLE WO @@ -1439,6 +1467,8 @@ FFFC..FFFD ; 0 # So [2] OBJECT REPLACEMENT CHARACTER..REPLACEMENT CHARACTER 10F30..10F45 ; 0 # Lo [22] SOGDIAN LETTER ALEPH..SOGDIAN INDEPENDENT SHIN 10F51..10F54 ; 0 # No [4] SOGDIAN NUMBER ONE..SOGDIAN NUMBER ONE HUNDRED 10F55..10F59 ; 0 # Po [5] SOGDIAN PUNCTUATION TWO VERTICAL BARS..SOGDIAN PUNCTUATION HALF CIRCLE WITH DOT +10F70..10F81 ; 0 # Lo [18] OLD UYGHUR LETTER ALEPH..OLD UYGHUR LETTER LESH +10F86..10F89 ; 0 # Po [4] OLD UYGHUR PUNCTUATION BAR..OLD UYGHUR PUNCTUATION FOUR DOTS 10FB0..10FC4 ; 0 # Lo [21] CHORASMIAN LETTER ALEPH..CHORASMIAN LETTER TAW 10FC5..10FCB ; 0 # No [7] CHORASMIAN NUMBER ONE..CHORASMIAN NUMBER ONE HUNDRED 10FE0..10FF6 ; 0 # Lo [23] ELYMAIC LETTER ALEPH..ELYMAIC LIGATURE ZAYIN-YODH @@ -1450,6 +1480,9 @@ FFFC..FFFD ; 0 # So [2] OBJECT REPLACEMENT CHARACTER..REPLACEMENT CHARACTER 11047..1104D ; 0 # Po [7] BRAHMI DANDA..BRAHMI PUNCTUATION LOTUS 11052..11065 ; 0 # No [20] BRAHMI NUMBER ONE..BRAHMI NUMBER ONE THOUSAND 11066..1106F ; 0 # Nd [10] BRAHMI DIGIT ZERO..BRAHMI DIGIT NINE +11071..11072 ; 0 # Lo [2] BRAHMI LETTER OLD TAMIL SHORT E..BRAHMI LETTER OLD TAMIL SHORT O +11073..11074 ; 0 # Mn [2] BRAHMI VOWEL SIGN OLD TAMIL SHORT E..BRAHMI VOWEL SIGN OLD TAMIL SHORT O +11075 ; 0 # Lo BRAHMI LETTER OLD TAMIL LLA 11080..11081 ; 0 # Mn [2] KAITHI SIGN CANDRABINDU..KAITHI SIGN ANUSVARA 11082 ; 0 # Mc KAITHI SIGN VISARGA 11083..110AF ; 0 # Lo [45] KAITHI LETTER A..KAITHI LETTER HA @@ -1459,6 +1492,7 @@ FFFC..FFFD ; 0 # So [2] OBJECT REPLACEMENT CHARACTER..REPLACEMENT CHARACTER 110BB..110BC ; 0 # Po [2] KAITHI ABBREVIATION SIGN..KAITHI ENUMERATION SIGN 110BD ; 0 # Cf KAITHI NUMBER SIGN 110BE..110C1 ; 0 # Po [4] KAITHI SECTION MARK..KAITHI DOUBLE DANDA +110C2 ; 0 # Mn KAITHI VOWEL SIGN VOCALIC R 110CD ; 0 # Cf KAITHI NUMBER SIGN ABOVE 110D0..110E8 ; 0 # Lo [25] SORA SOMPENG LETTER SAH..SORA SOMPENG LETTER MAE 110F0..110F9 ; 0 # Nd [10] SORA SOMPENG DIGIT ZERO..SORA SOMPENG DIGIT NINE @@ -1582,6 +1616,7 @@ FFFC..FFFD ; 0 # So [2] OBJECT REPLACEMENT CHARACTER..REPLACEMENT CHARACTER 116AE..116AF ; 0 # Mc [2] TAKRI VOWEL SIGN I..TAKRI VOWEL SIGN II 116B0..116B5 ; 0 # Mn [6] TAKRI VOWEL SIGN U..TAKRI VOWEL SIGN AU 116B8 ; 0 # Lo TAKRI LETTER ARCHAIC KHA +116B9 ; 0 # Po TAKRI ABBREVIATION SIGN 116C0..116C9 ; 0 # Nd [10] TAKRI DIGIT ZERO..TAKRI DIGIT NINE 11700..1171A ; 0 # Lo [27] AHOM LETTER KA..AHOM LETTER ALTERNATE BA 1171D..1171F ; 0 # Mn [3] AHOM CONSONANT SIGN MEDIAL LA..AHOM CONSONANT SIGN MEDIAL LIGATING RA @@ -1593,6 +1628,7 @@ FFFC..FFFD ; 0 # So [2] OBJECT REPLACEMENT CHARACTER..REPLACEMENT CHARACTER 1173A..1173B ; 0 # No [2] AHOM NUMBER TEN..AHOM NUMBER TWENTY 1173C..1173E ; 0 # Po [3] AHOM SIGN SMALL SECTION..AHOM SIGN RULAI 1173F ; 0 # So AHOM SYMBOL VI +11740..11746 ; 0 # Lo [7] AHOM LETTER CA..AHOM LETTER LLA 11800..1182B ; 0 # Lo [44] DOGRA LETTER A..DOGRA LETTER RRA 1182C..1182E ; 0 # Mc [3] DOGRA VOWEL SIGN AA..DOGRA VOWEL SIGN II 1182F..11837 ; 0 # Mn [9] DOGRA VOWEL SIGN U..DOGRA SIGN ANUSVARA @@ -1645,7 +1681,7 @@ FFFC..FFFD ; 0 # So [2] OBJECT REPLACEMENT CHARACTER..REPLACEMENT CHARACTER 11A9A..11A9C ; 0 # Po [3] SOYOMBO MARK TSHEG..SOYOMBO MARK DOUBLE SHAD 11A9D ; 0 # Lo SOYOMBO MARK PLUTA 11A9E..11AA2 ; 0 # Po [5] SOYOMBO HEAD MARK WITH MOON AND SUN AND TRIPLE FLAME..SOYOMBO TERMINAL MARK-2 -11AC0..11AF8 ; 0 # Lo [57] PAU CIN HAU LETTER PA..PAU CIN HAU GLOTTAL STOP FINAL +11AB0..11AF8 ; 0 # Lo [73] CANADIAN SYLLABICS NATTILIK HI..PAU CIN HAU GLOTTAL STOP FINAL 11C00..11C08 ; 0 # Lo [9] BHAIKSUKI LETTER A..BHAIKSUKI LETTER VOCALIC L 11C0A..11C2E ; 0 # Lo [37] BHAIKSUKI LETTER E..BHAIKSUKI LETTER HA 11C2F ; 0 # Mc BHAIKSUKI VOWEL SIGN AA @@ -1700,6 +1736,8 @@ FFFC..FFFD ; 0 # So [2] OBJECT REPLACEMENT CHARACTER..REPLACEMENT CHARACTER 12400..1246E ; 0 # Nl [111] CUNEIFORM NUMERIC SIGN TWO ASH..CUNEIFORM NUMERIC SIGN NINE U VARIANT FORM 12470..12474 ; 0 # Po [5] CUNEIFORM PUNCTUATION SIGN OLD ASSYRIAN WORD DIVIDER..CUNEIFORM PUNCTUATION SIGN DIAGONAL QUADCOLON 12480..12543 ; 0 # Lo [196] CUNEIFORM SIGN AB TIMES NUN TENU..CUNEIFORM SIGN ZU5 TIMES THREE DISH TENU +12F90..12FF0 ; 0 # Lo [97] CYPRO-MINOAN SIGN CM001..CYPRO-MINOAN SIGN CM114 +12FF1..12FF2 ; 0 # Po [2] CYPRO-MINOAN SIGN CM301..CYPRO-MINOAN SIGN CM302 13000..1342E ; 0 # Lo [1071] EGYPTIAN HIEROGLYPH A001..EGYPTIAN HIEROGLYPH AA032 13430..13438 ; 0 # Cf [9] EGYPTIAN HIEROGLYPH VERTICAL JOINER..EGYPTIAN HIEROGLYPH END SEGMENT 14400..14646 ; 0 # Lo [583] ANATOLIAN HIEROGLYPH A001..ANATOLIAN HIEROGLYPH A530 @@ -1707,6 +1745,8 @@ FFFC..FFFD ; 0 # So [2] OBJECT REPLACEMENT CHARACTER..REPLACEMENT CHARACTER 16A40..16A5E ; 0 # Lo [31] MRO LETTER TA..MRO LETTER TEK 16A60..16A69 ; 0 # Nd [10] MRO DIGIT ZERO..MRO DIGIT NINE 16A6E..16A6F ; 0 # Po [2] MRO DANDA..MRO DOUBLE DANDA +16A70..16ABE ; 0 # Lo [79] TANGSA LETTER OZ..TANGSA LETTER ZA +16AC0..16AC9 ; 0 # Nd [10] TANGSA DIGIT ZERO..TANGSA DIGIT NINE 16AD0..16AED ; 0 # Lo [30] BASSA VAH LETTER ENNI..BASSA VAH LETTER I 16AF5 ; 0 # Po BASSA VAH FULL STOP 16B00..16B2F ; 0 # Lo [48] PAHAWH HMONG VOWEL KEEB..PAHAWH HMONG CONSONANT CAU @@ -1735,7 +1775,10 @@ FFFC..FFFD ; 0 # So [2] OBJECT REPLACEMENT CHARACTER..REPLACEMENT CHARACTER 17000..187F7 ; 0 # Lo [6136] TANGUT IDEOGRAPH-17000..TANGUT IDEOGRAPH-187F7 18800..18CD5 ; 0 # Lo [1238] TANGUT COMPONENT-001..KHITAN SMALL SCRIPT CHARACTER-18CD5 18D00..18D08 ; 0 # Lo [9] TANGUT IDEOGRAPH-18D00..TANGUT IDEOGRAPH-18D08 -1B000..1B11E ; 0 # Lo [287] KATAKANA LETTER ARCHAIC E..HENTAIGANA LETTER N-MU-MO-2 +1AFF0..1AFF3 ; 0 # Lm [4] KATAKANA LETTER MINNAN TONE-2..KATAKANA LETTER MINNAN TONE-5 +1AFF5..1AFFB ; 0 # Lm [7] KATAKANA LETTER MINNAN TONE-7..KATAKANA LETTER MINNAN NASALIZED TONE-5 +1AFFD..1AFFE ; 0 # Lm [2] KATAKANA LETTER MINNAN NASALIZED TONE-7..KATAKANA LETTER MINNAN NASALIZED TONE-8 +1B000..1B122 ; 0 # Lo [291] KATAKANA LETTER ARCHAIC E..KATAKANA LETTER ARCHAIC WU 1B150..1B152 ; 0 # Lo [3] HIRAGANA LETTER SMALL WI..HIRAGANA LETTER SMALL WO 1B164..1B167 ; 0 # Lo [4] KATAKANA LETTER SMALL WI..KATAKANA LETTER SMALL N 1B170..1B2FB ; 0 # Lo [396] NUSHU CHARACTER-1B170..NUSHU CHARACTER-1B2FB @@ -1747,6 +1790,9 @@ FFFC..FFFD ; 0 # So [2] OBJECT REPLACEMENT CHARACTER..REPLACEMENT CHARACTER 1BC9D ; 0 # Mn DUPLOYAN THICK LETTER SELECTOR 1BC9F ; 0 # Po DUPLOYAN PUNCTUATION CHINOOK FULL STOP 1BCA0..1BCA3 ; 0 # Cf [4] SHORTHAND FORMAT LETTER OVERLAP..SHORTHAND FORMAT UP STEP +1CF00..1CF2D ; 0 # Mn [46] ZNAMENNY COMBINING MARK GORAZDO NIZKO S KRYZHEM ON LEFT..ZNAMENNY COMBINING MARK KRYZH ON LEFT +1CF30..1CF46 ; 0 # Mn [23] ZNAMENNY COMBINING TONAL RANGE MARK MRACHNO..ZNAMENNY PRIZNAK MODIFIER ROG +1CF50..1CFC3 ; 0 # So [116] ZNAMENNY NEUME KRYUK..ZNAMENNY NEUME PAUK 1D000..1D0F5 ; 0 # So [246] BYZANTINE MUSICAL SYMBOL PSILI..BYZANTINE MUSICAL SYMBOL GORGON NEO KATO 1D100..1D126 ; 0 # So [39] MUSICAL SYMBOL SINGLE BARLINE..MUSICAL SYMBOL DRUM CLEF-2 1D129..1D164 ; 0 # So [60] MUSICAL SYMBOL MULTIPLE MEASURE REST..MUSICAL SYMBOL ONE HUNDRED TWENTY-EIGHTH NOTE @@ -1754,7 +1800,7 @@ FFFC..FFFD ; 0 # So [2] OBJECT REPLACEMENT CHARACTER..REPLACEMENT CHARACTER 1D173..1D17A ; 0 # Cf [8] MUSICAL SYMBOL BEGIN BEAM..MUSICAL SYMBOL END PHRASE 1D183..1D184 ; 0 # So [2] MUSICAL SYMBOL ARPEGGIATO UP..MUSICAL SYMBOL ARPEGGIATO DOWN 1D18C..1D1A9 ; 0 # So [30] MUSICAL SYMBOL RINFORZANDO..MUSICAL SYMBOL DEGREE SLASH -1D1AE..1D1E8 ; 0 # So [59] MUSICAL SYMBOL PEDAL MARK..MUSICAL SYMBOL KIEVAN FLAT SIGN +1D1AE..1D1EA ; 0 # So [61] MUSICAL SYMBOL PEDAL MARK..MUSICAL SYMBOL KORON 1D200..1D241 ; 0 # So [66] GREEK VOCAL NOTATION SYMBOL-1..GREEK INSTRUMENTAL NOTATION SYMBOL-54 1D245 ; 0 # So GREEK MUSICAL LEIMMA 1D2E0..1D2F3 ; 0 # No [20] MAYAN NUMERAL ZERO..MAYAN NUMERAL NINETEEN @@ -1813,14 +1859,22 @@ FFFC..FFFD ; 0 # So [2] OBJECT REPLACEMENT CHARACTER..REPLACEMENT CHARACTER 1DA87..1DA8B ; 0 # Po [5] SIGNWRITING COMMA..SIGNWRITING PARENTHESIS 1DA9B..1DA9F ; 0 # Mn [5] SIGNWRITING FILL MODIFIER-2..SIGNWRITING FILL MODIFIER-6 1DAA1..1DAAF ; 0 # Mn [15] SIGNWRITING ROTATION MODIFIER-2..SIGNWRITING ROTATION MODIFIER-16 +1DF00..1DF09 ; 0 # L& [10] LATIN SMALL LETTER FENG DIGRAPH WITH TRILL..LATIN SMALL LETTER T WITH HOOK AND RETROFLEX HOOK +1DF0A ; 0 # Lo LATIN LETTER RETROFLEX CLICK WITH RETROFLEX HOOK +1DF0B..1DF1E ; 0 # L& [20] LATIN SMALL LETTER ESH WITH DOUBLE BAR..LATIN SMALL LETTER S WITH CURL 1E100..1E12C ; 0 # Lo [45] NYIAKENG PUACHUE HMONG LETTER MA..NYIAKENG PUACHUE HMONG LETTER W 1E137..1E13D ; 0 # Lm [7] NYIAKENG PUACHUE HMONG SIGN FOR PERSON..NYIAKENG PUACHUE HMONG SYLLABLE LENGTHENER 1E140..1E149 ; 0 # Nd [10] NYIAKENG PUACHUE HMONG DIGIT ZERO..NYIAKENG PUACHUE HMONG DIGIT NINE 1E14E ; 0 # Lo NYIAKENG PUACHUE HMONG LOGOGRAM NYAJ 1E14F ; 0 # So NYIAKENG PUACHUE HMONG CIRCLED CA +1E290..1E2AD ; 0 # Lo [30] TOTO LETTER PA..TOTO LETTER A 1E2C0..1E2EB ; 0 # Lo [44] WANCHO LETTER AA..WANCHO LETTER YIH 1E2F0..1E2F9 ; 0 # Nd [10] WANCHO DIGIT ZERO..WANCHO DIGIT NINE 1E2FF ; 0 # Sc WANCHO NGUN SIGN +1E7E0..1E7E6 ; 0 # Lo [7] ETHIOPIC SYLLABLE HHYA..ETHIOPIC SYLLABLE HHYO +1E7E8..1E7EB ; 0 # Lo [4] ETHIOPIC SYLLABLE GURAGE HHWA..ETHIOPIC SYLLABLE HHWE +1E7ED..1E7EE ; 0 # Lo [2] ETHIOPIC SYLLABLE GURAGE MWI..ETHIOPIC SYLLABLE GURAGE MWEE +1E7F0..1E7FE ; 0 # Lo [15] ETHIOPIC SYLLABLE GURAGE QWI..ETHIOPIC SYLLABLE GURAGE PWEE 1E800..1E8C4 ; 0 # Lo [197] MENDE KIKAKUI SYLLABLE M001 KI..MENDE KIKAKUI SYLLABLE M060 NYON 1E8C7..1E8CF ; 0 # No [9] MENDE KIKAKUI DIGIT ONE..MENDE KIKAKUI DIGIT NINE 1E900..1E943 ; 0 # L& [68] ADLAM CAPITAL LETTER ALIF..ADLAM SMALL LETTER SHA @@ -1885,33 +1939,34 @@ FFFC..FFFD ; 0 # So [2] OBJECT REPLACEMENT CHARACTER..REPLACEMENT CHARACTER 1F300..1F3FA ; 0 # So [251] CYCLONE..AMPHORA 1F3FB..1F3FF ; 0 # Sk [5] EMOJI MODIFIER FITZPATRICK TYPE-1-2..EMOJI MODIFIER FITZPATRICK TYPE-6 1F400..1F6D7 ; 0 # So [728] RAT..ELEVATOR -1F6E0..1F6EC ; 0 # So [13] HAMMER AND WRENCH..AIRPLANE ARRIVING +1F6DD..1F6EC ; 0 # So [16] PLAYGROUND SLIDE..AIRPLANE ARRIVING 1F6F0..1F6FC ; 0 # So [13] SATELLITE..ROLLER SKATE 1F700..1F773 ; 0 # So [116] ALCHEMICAL SYMBOL FOR QUINTESSENCE..ALCHEMICAL SYMBOL FOR HALF OUNCE 1F780..1F7D8 ; 0 # So [89] BLACK LEFT-POINTING ISOSCELES RIGHT TRIANGLE..NEGATIVE CIRCLED SQUARE 1F7E0..1F7EB ; 0 # So [12] LARGE ORANGE CIRCLE..LARGE BROWN SQUARE +1F7F0 ; 0 # So HEAVY EQUALS SIGN 1F800..1F80B ; 0 # So [12] LEFTWARDS ARROW WITH SMALL TRIANGLE ARROWHEAD..DOWNWARDS ARROW WITH LARGE TRIANGLE ARROWHEAD 1F810..1F847 ; 0 # So [56] LEFTWARDS ARROW WITH SMALL EQUILATERAL ARROWHEAD..DOWNWARDS HEAVY ARROW 1F850..1F859 ; 0 # So [10] LEFTWARDS SANS-SERIF ARROW..UP DOWN SANS-SERIF ARROW 1F860..1F887 ; 0 # So [40] WIDE-HEADED LEFTWARDS LIGHT BARB ARROW..WIDE-HEADED SOUTH WEST VERY HEAVY BARB ARROW 1F890..1F8AD ; 0 # So [30] LEFTWARDS TRIANGLE ARROWHEAD..WHITE ARROW SHAFT WIDTH TWO THIRDS 1F8B0..1F8B1 ; 0 # So [2] ARROW POINTING UPWARDS THEN NORTH WEST..ARROW POINTING RIGHTWARDS THEN CURVING SOUTH WEST -1F900..1F978 ; 0 # So [121] CIRCLED CROSS FORMEE WITH FOUR DOTS..DISGUISED FACE -1F97A..1F9CB ; 0 # So [82] FACE WITH PLEADING EYES..BUBBLE TEA -1F9CD..1FA53 ; 0 # So [135] STANDING PERSON..BLACK CHESS KNIGHT-BISHOP +1F900..1FA53 ; 0 # So [340] CIRCLED CROSS FORMEE WITH FOUR DOTS..BLACK CHESS KNIGHT-BISHOP 1FA60..1FA6D ; 0 # So [14] XIANGQI RED GENERAL..XIANGQI BLACK SOLDIER 1FA70..1FA74 ; 0 # So [5] BALLET SHOES..THONG SANDAL -1FA78..1FA7A ; 0 # So [3] DROP OF BLOOD..STETHOSCOPE +1FA78..1FA7C ; 0 # So [5] DROP OF BLOOD..CRUTCH 1FA80..1FA86 ; 0 # So [7] YO-YO..NESTING DOLLS -1FA90..1FAA8 ; 0 # So [25] RINGED PLANET..ROCK -1FAB0..1FAB6 ; 0 # So [7] FLY..FEATHER -1FAC0..1FAC2 ; 0 # So [3] ANATOMICAL HEART..PEOPLE HUGGING -1FAD0..1FAD6 ; 0 # So [7] BLUEBERRIES..TEAPOT +1FA90..1FAAC ; 0 # So [29] RINGED PLANET..HAMSA +1FAB0..1FABA ; 0 # So [11] FLY..NEST WITH EGGS +1FAC0..1FAC5 ; 0 # So [6] ANATOMICAL HEART..PERSON WITH CROWN +1FAD0..1FAD9 ; 0 # So [10] BLUEBERRIES..JAR +1FAE0..1FAE7 ; 0 # So [8] MELTING FACE..BUBBLES +1FAF0..1FAF6 ; 0 # So [7] HAND WITH INDEX FINGER AND THUMB CROSSED..HEART HANDS 1FB00..1FB92 ; 0 # So [147] BLOCK SEXTANT-1..UPPER HALF INVERSE MEDIUM SHADE AND LOWER HALF BLOCK 1FB94..1FBCA ; 0 # So [55] LEFT HALF INVERSE MEDIUM SHADE AND RIGHT HALF BLOCK..WHITE UP-POINTING CHEVRON 1FBF0..1FBF9 ; 0 # Nd [10] SEGMENTED DIGIT ZERO..SEGMENTED DIGIT NINE -20000..2A6DD ; 0 # Lo [42718] CJK UNIFIED IDEOGRAPH-20000..CJK UNIFIED IDEOGRAPH-2A6DD -2A700..2B734 ; 0 # Lo [4149] CJK UNIFIED IDEOGRAPH-2A700..CJK UNIFIED IDEOGRAPH-2B734 +20000..2A6DF ; 0 # Lo [42720] CJK UNIFIED IDEOGRAPH-20000..CJK UNIFIED IDEOGRAPH-2A6DF +2A700..2B738 ; 0 # Lo [4153] CJK UNIFIED IDEOGRAPH-2A700..CJK UNIFIED IDEOGRAPH-2B738 2B740..2B81D ; 0 # Lo [222] CJK UNIFIED IDEOGRAPH-2B740..CJK UNIFIED IDEOGRAPH-2B81D 2B820..2CEA1 ; 0 # Lo [5762] CJK UNIFIED IDEOGRAPH-2B820..CJK UNIFIED IDEOGRAPH-2CEA1 2CEB0..2EBE0 ; 0 # Lo [7473] CJK UNIFIED IDEOGRAPH-2CEB0..CJK UNIFIED IDEOGRAPH-2EBE0 @@ -1923,8 +1978,8 @@ E0100..E01EF ; 0 # Mn [240] VARIATION SELECTOR-17..VARIATION SELECTOR-256 F0000..FFFFD ; 0 # Co [65534] .. 100000..10FFFD; 0 # Co [65534] .. -# The above property value applies to 832720 code points not listed here. -# Total code points: 1113240 +# The above property value applies to 831882 code points not listed here. +# Total code points: 1113200 # ================================================ @@ -1961,6 +2016,7 @@ F0000..FFFFD ; 0 # Co [65534] .. 0A3C ; 7 # Mn GURMUKHI SIGN NUKTA 0ABC ; 7 # Mn GUJARATI SIGN NUKTA 0B3C ; 7 # Mn ORIYA SIGN NUKTA +0C3C ; 7 # Mn TELUGU SIGN NUKTA 0CBC ; 7 # Mn KANNADA SIGN NUKTA 1037 ; 7 # Mn MYANMAR SIGN DOT BELOW 1B34 ; 7 # Mn BALINESE SIGN REREKAN @@ -1982,7 +2038,7 @@ A9B3 ; 7 # Mn JAVANESE SIGN CECAK TELU 11D42 ; 7 # Mn MASARAM GONDI SIGN NUKTA 1E94A ; 7 # Mn ADLAM NUKTA -# Total code points: 26 +# Total code points: 27 # ================================================ @@ -2012,7 +2068,8 @@ A9B3 ; 7 # Mn JAVANESE SIGN CECAK TELU 0F84 ; 9 # Mn TIBETAN MARK HALANTA 1039..103A ; 9 # Mn [2] MYANMAR SIGN VIRAMA..MYANMAR SIGN ASAT 1714 ; 9 # Mn TAGALOG SIGN VIRAMA -1734 ; 9 # Mn HANUNOO SIGN PAMUDPOD +1715 ; 9 # Mc TAGALOG SIGN PAMUDPOD +1734 ; 9 # Mc HANUNOO SIGN PAMUDPOD 17D2 ; 9 # Mn KHMER SIGN COENG 1A60 ; 9 # Mn TAI THAM SIGN SAKOT 1B44 ; 9 # Mc BALINESE ADEG ADEG @@ -2029,6 +2086,7 @@ AAF6 ; 9 # Mn MEETEI MAYEK VIRAMA ABED ; 9 # Mn MEETEI MAYEK APUN IYEK 10A3F ; 9 # Mn KHAROSHTHI VIRAMA 11046 ; 9 # Mn BRAHMI VIRAMA +11070 ; 9 # Mn BRAHMI SIGN OLD TAMIL VIRAMA 1107F ; 9 # Mn BRAHMI NUMBER JOINER 110B9 ; 9 # Mn KAITHI SIGN VIRAMA 11133..11134 ; 9 # Mn [2] CHAKMA VIRAMA..CHAKMA MAAYYAA @@ -2053,7 +2111,7 @@ ABED ; 9 # Mn MEETEI MAYEK APUN IYEK 11D44..11D45 ; 9 # Mn [2] MASARAM GONDI SIGN HALANTA..MASARAM GONDI VIRAMA 11D97 ; 9 # Mn GUNJALA GONDI VIRAMA -# Total code points: 61 +# Total code points: 63 # ================================================ @@ -2385,9 +2443,10 @@ FB1E ; 26 # Mn HEBREW POINT JUDEO-SPANISH VARIKA # Canonical_Combining_Class=Below_Left +1DFA ; 218 # Mn COMBINING DOT BELOW LEFT 302A ; 218 # Mn IDEOGRAPHIC LEVEL TONE MARK -# Total code points: 1 +# Total code points: 2 # ================================================ @@ -2426,7 +2485,8 @@ FB1E ; 26 # Mn HEBREW POINT JUDEO-SPANISH VARIKA 07F2 ; 220 # Mn NKO COMBINING NASALIZATION MARK 07FD ; 220 # Mn NKO DANTAYALAN 0859..085B ; 220 # Mn [3] MANDAIC AFFRICATION MARK..MANDAIC GEMINATION MARK -08D3 ; 220 # Mn ARABIC SMALL LOW WAW +0899..089B ; 220 # Mn [3] ARABIC SMALL LOW WORD ISHMAAM..ARABIC SMALL LOW WORD TASHEEL +08CF..08D3 ; 220 # Mn [5] ARABIC LARGE ROUND DOT BELOW..ARABIC SMALL LOW WAW 08E3 ; 220 # Mn ARABIC TURNED DAMMA BELOW 08E6 ; 220 # Mn ARABIC CURLY KASRA 08E9 ; 220 # Mn ARABIC CURLY KASRATAN @@ -2445,6 +2505,8 @@ FB1E ; 26 # Mn HEBREW POINT JUDEO-SPANISH VARIKA 1AB5..1ABA ; 220 # Mn [6] COMBINING X-X BELOW..COMBINING STRONG CENTRALIZATION STROKE BELOW 1ABD ; 220 # Mn COMBINING PARENTHESES BELOW 1ABF..1AC0 ; 220 # Mn [2] COMBINING LATIN SMALL LETTER W BELOW..COMBINING LATIN SMALL LETTER TURNED W BELOW +1AC3..1AC4 ; 220 # Mn [2] COMBINING LEFT PARENTHESIS BELOW LEFT..COMBINING RIGHT PARENTHESIS BELOW RIGHT +1ACA ; 220 # Mn COMBINING DOUBLE PLUS SIGN BELOW 1B6C ; 220 # Mn BALINESE MUSICAL SYMBOL COMBINING ENDEP 1CD5..1CD9 ; 220 # Mn [5] VEDIC TONE YAJURVEDIC AGGRAVATED INDEPENDENT SVARITA..VEDIC TONE YAJURVEDIC KATHAKA INDEPENDENT SVARITA SCHROEDER 1CDC..1CDF ; 220 # Mn [4] VEDIC TONE KATHAKA ANUDATTA..VEDIC TONE THREE DOTS BELOW @@ -2468,11 +2530,13 @@ FE27..FE2D ; 220 # Mn [7] COMBINING LIGATURE LEFT HALF BELOW..COMBINING CON 10F46..10F47 ; 220 # Mn [2] SOGDIAN COMBINING DOT BELOW..SOGDIAN COMBINING TWO DOTS BELOW 10F4B ; 220 # Mn SOGDIAN COMBINING CURVE BELOW 10F4D..10F50 ; 220 # Mn [4] SOGDIAN COMBINING HOOK BELOW..SOGDIAN COMBINING STROKE BELOW +10F83 ; 220 # Mn OLD UYGHUR COMBINING DOT BELOW +10F85 ; 220 # Mn OLD UYGHUR COMBINING TWO DOTS BELOW 1D17B..1D182 ; 220 # Mn [8] MUSICAL SYMBOL COMBINING ACCENT..MUSICAL SYMBOL COMBINING LOURE 1D18A..1D18B ; 220 # Mn [2] MUSICAL SYMBOL COMBINING DOUBLE TONGUE..MUSICAL SYMBOL COMBINING TRIPLE TONGUE 1E8D0..1E8D6 ; 220 # Mn [7] MENDE KIKAKUI COMBINING NUMBER TEENS..MENDE KIKAKUI COMBINING NUMBER MILLIONS -# Total code points: 165 +# Total code points: 177 # ================================================ @@ -2557,6 +2621,9 @@ FE27..FE2D ; 220 # Mn [7] COMBINING LIGATURE LEFT HALF BELOW..COMBINING CON 081B..0823 ; 230 # Mn [9] SAMARITAN MARK EPENTHETIC YUT..SAMARITAN VOWEL SIGN A 0825..0827 ; 230 # Mn [3] SAMARITAN VOWEL SIGN SHORT A..SAMARITAN VOWEL SIGN U 0829..082D ; 230 # Mn [5] SAMARITAN VOWEL SIGN LONG I..SAMARITAN MARK NEQUDAA +0898 ; 230 # Mn ARABIC SMALL HIGH WORD AL-JUZ +089C..089F ; 230 # Mn [4] ARABIC MADDA WAAJIB..ARABIC HALF MADDA OVER MADDA +08CA..08CE ; 230 # Mn [5] ARABIC SMALL HIGH FARSI YEH..ARABIC LARGE ROUND DOT ABOVE 08D4..08E1 ; 230 # Mn [14] ARABIC SMALL HIGH WORD AR-RUB..ARABIC SMALL HIGH SIGN SAFHA 08E4..08E5 ; 230 # Mn [2] ARABIC CURLY FATHA..ARABIC CURLY DAMMA 08E7..08E8 ; 230 # Mn [2] ARABIC CURLY FATHATAN..ARABIC CURLY DAMMATAN @@ -2576,6 +2643,9 @@ FE27..FE2D ; 220 # Mn [7] COMBINING LIGATURE LEFT HALF BELOW..COMBINING CON 1A75..1A7C ; 230 # Mn [8] TAI THAM SIGN TONE-1..TAI THAM SIGN KHUEN-LUE KARAN 1AB0..1AB4 ; 230 # Mn [5] COMBINING DOUBLED CIRCUMFLEX ACCENT..COMBINING TRIPLE DOT 1ABB..1ABC ; 230 # Mn [2] COMBINING PARENTHESES ABOVE..COMBINING DOUBLE PARENTHESES ABOVE +1AC1..1AC2 ; 230 # Mn [2] COMBINING LEFT PARENTHESIS ABOVE LEFT..COMBINING RIGHT PARENTHESIS ABOVE RIGHT +1AC5..1AC9 ; 230 # Mn [5] COMBINING SQUARE BRACKETS ABOVE..COMBINING DOUBLE PLUS SIGN ABOVE +1ACB..1ACE ; 230 # Mn [4] COMBINING TRIPLE ACUTE ACCENT..COMBINING LATIN SMALL LETTER INSULAR T 1B6B ; 230 # Mn BALINESE MUSICAL SYMBOL COMBINING TEGEH 1B6D..1B73 ; 230 # Mn [7] BALINESE MUSICAL SYMBOL COMBINING KEMPUL..BALINESE MUSICAL SYMBOL COMBINING GONG 1CD0..1CD2 ; 230 # Mn [3] VEDIC TONE KARSHANA..VEDIC TONE PRENKHA @@ -2618,6 +2688,8 @@ FE2E..FE2F ; 230 # Mn [2] COMBINING CYRILLIC TITLO LEFT HALF..COMBINING CYR 10EAB..10EAC ; 230 # Mn [2] YEZIDI COMBINING HAMZA MARK..YEZIDI COMBINING MADDA MARK 10F48..10F4A ; 230 # Mn [3] SOGDIAN COMBINING DOT ABOVE..SOGDIAN COMBINING CURVE ABOVE 10F4C ; 230 # Mn SOGDIAN COMBINING HOOK ABOVE +10F82 ; 230 # Mn OLD UYGHUR COMBINING DOT ABOVE +10F84 ; 230 # Mn OLD UYGHUR COMBINING TWO DOTS ABOVE 11100..11102 ; 230 # Mn [3] CHAKMA SIGN CANDRABINDU..CHAKMA SIGN VISARGA 11366..1136C ; 230 # Mn [7] COMBINING GRANTHA DIGIT ZERO..COMBINING GRANTHA DIGIT SIX 11370..11374 ; 230 # Mn [5] COMBINING GRANTHA LETTER A..COMBINING GRANTHA LETTER PA @@ -2632,10 +2704,11 @@ FE2E..FE2F ; 230 # Mn [2] COMBINING CYRILLIC TITLO LEFT HALF..COMBINING CYR 1E023..1E024 ; 230 # Mn [2] COMBINING GLAGOLITIC LETTER YU..COMBINING GLAGOLITIC LETTER SMALL YUS 1E026..1E02A ; 230 # Mn [5] COMBINING GLAGOLITIC LETTER YO..COMBINING GLAGOLITIC LETTER FITA 1E130..1E136 ; 230 # Mn [7] NYIAKENG PUACHUE HMONG TONE-B..NYIAKENG PUACHUE HMONG TONE-D +1E2AE ; 230 # Mn TOTO SIGN RISING TONE 1E2EC..1E2EF ; 230 # Mn [4] WANCHO TONE TUP..WANCHO TONE KOINI 1E944..1E949 ; 230 # Mn [6] ADLAM ALIF LENGTHENER..ADLAM GEMINATE CONSONANT MODIFIER -# Total code points: 484 +# Total code points: 508 # ================================================ diff --git a/gnu/usr.bin/perl/lib/unicore/extracted/DDecompositionType.txt b/gnu/usr.bin/perl/lib/unicore/extracted/DDecompositionType.txt index a0bc5636439..5af556b0d41 100644 --- a/gnu/usr.bin/perl/lib/unicore/extracted/DDecompositionType.txt +++ b/gnu/usr.bin/perl/lib/unicore/extracted/DDecompositionType.txt @@ -1,6 +1,6 @@ -# DerivedDecompositionType-13.0.0.txt -# Date: 2019-09-08, 23:31:06 GMT -# © 2019 Unicode®, Inc. +# DerivedDecompositionType-14.0.0.txt +# Date: 2021-06-04, 02:19:17 GMT +# © 2021 Unicode®, Inc. # Unicode and the Unicode Logo are registered trademarks of Unicode, Inc. in the U.S. and other countries. # For terms of use, see http://www.unicode.org/terms_of_use.html # @@ -9,7 +9,7 @@ # ================================================ -# Decomposition_Type (from UnicodeData.txt, field 5: see UAX #44: http://www.unicode.org/reports/tr44/) +# Decomposition_Type (from UnicodeData.txt, field 5: see UAX #44: https://www.unicode.org/reports/tr44/) # All code points not explicitly listed for Decomposition_Type # have the value None. @@ -861,12 +861,16 @@ FEFB ; Isolated # Lo ARABIC LIGATURE LAM WITH ALEF ISOLATED FORM 3196..319F ; Super # So [10] IDEOGRAPHIC ANNOTATION TOP MARK..IDEOGRAPHIC ANNOTATION MAN MARK A69C..A69D ; Super # Lm [2] MODIFIER LETTER CYRILLIC HARD SIGN..MODIFIER LETTER CYRILLIC SOFT SIGN A770 ; Super # Lm MODIFIER LETTER US +A7F2..A7F4 ; Super # Lm [3] MODIFIER LETTER CAPITAL C..MODIFIER LETTER CAPITAL Q A7F8..A7F9 ; Super # Lm [2] MODIFIER LETTER CAPITAL H WITH STROKE..MODIFIER LETTER SMALL LIGATURE OE AB5C..AB5F ; Super # Lm [4] MODIFIER LETTER SMALL HENG..MODIFIER LETTER SMALL U WITH LEFT HOOK AB69 ; Super # Lm MODIFIER LETTER SMALL TURNED W +10781..10785 ; Super # Lm [5] MODIFIER LETTER SUPERSCRIPT TRIANGULAR COLON..MODIFIER LETTER SMALL B WITH HOOK +10787..107B0 ; Super # Lm [42] MODIFIER LETTER SMALL DZ DIGRAPH..MODIFIER LETTER SMALL V WITH RIGHT HOOK +107B2..107BA ; Super # Lm [9] MODIFIER LETTER SMALL CAPITAL Y..MODIFIER LETTER SMALL S WITH CURL 1F16A..1F16C ; Super # So [3] RAISED MC SIGN..RAISED MR SIGN -# Total code points: 154 +# Total code points: 213 # ================================================ diff --git a/gnu/usr.bin/perl/lib/unicore/extracted/DEastAsianWidth.txt b/gnu/usr.bin/perl/lib/unicore/extracted/DEastAsianWidth.txt index 79fe3ebec53..6bc84ff98d4 100644 --- a/gnu/usr.bin/perl/lib/unicore/extracted/DEastAsianWidth.txt +++ b/gnu/usr.bin/perl/lib/unicore/extracted/DEastAsianWidth.txt @@ -1,6 +1,6 @@ -# DerivedEastAsianWidth-13.0.0.txt -# Date: 2019-10-21, 14:30:31 GMT -# © 2019 Unicode®, Inc. +# DerivedEastAsianWidth-14.0.0.txt +# Date: 2021-07-10, 00:35:07 GMT +# © 2021 Unicode®, Inc. # Unicode and the Unicode Logo are registered trademarks of Unicode, Inc. in the U.S. and other countries. # For terms of use, see http://www.unicode.org/terms_of_use.html # @@ -143,7 +143,7 @@ 0610..061A ; N # Mn [11] ARABIC SIGN SALLALLAHOU ALAYHE WASSALLAM..ARABIC SMALL KASRA 061B ; N # Po ARABIC SEMICOLON 061C ; N # Cf ARABIC LETTER MARK -061E..061F ; N # Po [2] ARABIC TRIPLE DOT PUNCTUATION MARK..ARABIC QUESTION MARK +061D..061F ; N # Po [3] ARABIC END OF TEXT MARK..ARABIC QUESTION MARK 0620..063F ; N # Lo [32] ARABIC LETTER KASHMIRI YEH..ARABIC LETTER FARSI YEH WITH THREE DOTS ABOVE 0640 ; N # Lm ARABIC TATWEEL 0641..064A ; N # Lo [10] ARABIC LETTER FEH..ARABIC LETTER YEH @@ -199,9 +199,14 @@ 0859..085B ; N # Mn [3] MANDAIC AFFRICATION MARK..MANDAIC GEMINATION MARK 085E ; N # Po MANDAIC PUNCTUATION 0860..086A ; N # Lo [11] SYRIAC LETTER MALAYALAM NGA..SYRIAC LETTER MALAYALAM SSA -08A0..08B4 ; N # Lo [21] ARABIC LETTER BEH WITH SMALL V BELOW..ARABIC LETTER KAF WITH DOT BELOW -08B6..08C7 ; N # Lo [18] ARABIC LETTER BEH WITH SMALL MEEM ABOVE..ARABIC LETTER LAM WITH SMALL ARABIC LETTER TAH ABOVE -08D3..08E1 ; N # Mn [15] ARABIC SMALL LOW WAW..ARABIC SMALL HIGH SIGN SAFHA +0870..0887 ; N # Lo [24] ARABIC LETTER ALEF WITH ATTACHED FATHA..ARABIC BASELINE ROUND DOT +0888 ; N # Sk ARABIC RAISED ROUND DOT +0889..088E ; N # Lo [6] ARABIC LETTER NOON WITH INVERTED SMALL V..ARABIC VERTICAL TAIL +0890..0891 ; N # Cf [2] ARABIC POUND MARK ABOVE..ARABIC PIASTRE MARK ABOVE +0898..089F ; N # Mn [8] ARABIC SMALL HIGH WORD AL-JUZ..ARABIC HALF MADDA OVER MADDA +08A0..08C8 ; N # Lo [41] ARABIC LETTER BEH WITH SMALL V BELOW..ARABIC LETTER GRAF +08C9 ; N # Lm ARABIC SMALL FARSI YEH +08CA..08E1 ; N # Mn [24] ARABIC SMALL HIGH FARSI YEH..ARABIC SMALL HIGH SIGN SAFHA 08E2 ; N # Cf ARABIC DISPUTED END OF AYAH 08E3..0902 ; N # Mn [32] ARABIC TURNED DAMMA BELOW..DEVANAGARI SIGN ANUSVARA 0903 ; N # Mc DEVANAGARI SIGN VISARGA @@ -356,6 +361,7 @@ 0C0E..0C10 ; N # Lo [3] TELUGU LETTER E..TELUGU LETTER AI 0C12..0C28 ; N # Lo [23] TELUGU LETTER O..TELUGU LETTER NA 0C2A..0C39 ; N # Lo [16] TELUGU LETTER PA..TELUGU LETTER HA +0C3C ; N # Mn TELUGU SIGN NUKTA 0C3D ; N # Lo TELUGU SIGN AVAGRAHA 0C3E..0C40 ; N # Mn [3] TELUGU VOWEL SIGN AA..TELUGU VOWEL SIGN II 0C41..0C44 ; N # Mc [4] TELUGU VOWEL SIGN U..TELUGU VOWEL SIGN VOCALIC RR @@ -363,6 +369,7 @@ 0C4A..0C4D ; N # Mn [4] TELUGU VOWEL SIGN O..TELUGU SIGN VIRAMA 0C55..0C56 ; N # Mn [2] TELUGU LENGTH MARK..TELUGU AI LENGTH MARK 0C58..0C5A ; N # Lo [3] TELUGU LETTER TSA..TELUGU LETTER RRRA +0C5D ; N # Lo TELUGU LETTER NAKAARA POLLU 0C60..0C61 ; N # Lo [2] TELUGU LETTER VOCALIC RR..TELUGU LETTER VOCALIC LL 0C62..0C63 ; N # Mn [2] TELUGU VOWEL SIGN VOCALIC L..TELUGU VOWEL SIGN VOCALIC LL 0C66..0C6F ; N # Nd [10] TELUGU DIGIT ZERO..TELUGU DIGIT NINE @@ -388,7 +395,7 @@ 0CCA..0CCB ; N # Mc [2] KANNADA VOWEL SIGN O..KANNADA VOWEL SIGN OO 0CCC..0CCD ; N # Mn [2] KANNADA VOWEL SIGN AU..KANNADA SIGN VIRAMA 0CD5..0CD6 ; N # Mc [2] KANNADA LENGTH MARK..KANNADA AI LENGTH MARK -0CDE ; N # Lo KANNADA LETTER FA +0CDD..0CDE ; N # Lo [2] KANNADA LETTER NAKAARA POLLU..KANNADA LETTER FA 0CE0..0CE1 ; N # Lo [2] KANNADA LETTER VOCALIC RR..KANNADA LETTER VOCALIC LL 0CE2..0CE3 ; N # Mn [2] KANNADA VOWEL SIGN VOCALIC L..KANNADA VOWEL SIGN VOCALIC LL 0CE6..0CEF ; N # Nd [10] KANNADA DIGIT ZERO..KANNADA DIGIT NINE @@ -573,11 +580,12 @@ 16EB..16ED ; N # Po [3] RUNIC SINGLE PUNCTUATION..RUNIC CROSS PUNCTUATION 16EE..16F0 ; N # Nl [3] RUNIC ARLAUG SYMBOL..RUNIC BELGTHOR SYMBOL 16F1..16F8 ; N # Lo [8] RUNIC LETTER K..RUNIC LETTER FRANKS CASKET AESC -1700..170C ; N # Lo [13] TAGALOG LETTER A..TAGALOG LETTER YA -170E..1711 ; N # Lo [4] TAGALOG LETTER LA..TAGALOG LETTER HA +1700..1711 ; N # Lo [18] TAGALOG LETTER A..TAGALOG LETTER HA 1712..1714 ; N # Mn [3] TAGALOG VOWEL SIGN I..TAGALOG SIGN VIRAMA -1720..1731 ; N # Lo [18] HANUNOO LETTER A..HANUNOO LETTER HA -1732..1734 ; N # Mn [3] HANUNOO VOWEL SIGN I..HANUNOO SIGN PAMUDPOD +1715 ; N # Mc TAGALOG SIGN PAMUDPOD +171F..1731 ; N # Lo [19] TAGALOG LETTER ARCHAIC RA..HANUNOO LETTER HA +1732..1733 ; N # Mn [2] HANUNOO VOWEL SIGN I..HANUNOO VOWEL SIGN U +1734 ; N # Mc HANUNOO SIGN PAMUDPOD 1735..1736 ; N # Po [2] PHILIPPINE SINGLE PUNCTUATION..PHILIPPINE DOUBLE PUNCTUATION 1740..1751 ; N # Lo [18] BUHID LETTER A..BUHID LETTER HA 1752..1753 ; N # Mn [2] BUHID VOWEL SIGN I..BUHID VOWEL SIGN U @@ -605,6 +613,7 @@ 1807..180A ; N # Po [4] MONGOLIAN SIBE SYLLABLE BOUNDARY MARKER..MONGOLIAN NIRUGU 180B..180D ; N # Mn [3] MONGOLIAN FREE VARIATION SELECTOR ONE..MONGOLIAN FREE VARIATION SELECTOR THREE 180E ; N # Cf MONGOLIAN VOWEL SEPARATOR +180F ; N # Mn MONGOLIAN FREE VARIATION SELECTOR FOUR 1810..1819 ; N # Nd [10] MONGOLIAN DIGIT ZERO..MONGOLIAN DIGIT NINE 1820..1842 ; N # Lo [35] MONGOLIAN LETTER A..MONGOLIAN LETTER CHI 1843 ; N # Lm MONGOLIAN LETTER TODO LONG VOWEL SIGN @@ -659,7 +668,7 @@ 1AA8..1AAD ; N # Po [6] TAI THAM SIGN KAAN..TAI THAM SIGN CAANG 1AB0..1ABD ; N # Mn [14] COMBINING DOUBLED CIRCUMFLEX ACCENT..COMBINING PARENTHESES BELOW 1ABE ; N # Me COMBINING PARENTHESES OVERLAY -1ABF..1AC0 ; N # Mn [2] COMBINING LATIN SMALL LETTER W BELOW..COMBINING LATIN SMALL LETTER TURNED W BELOW +1ABF..1ACE ; N # Mn [16] COMBINING LATIN SMALL LETTER W BELOW..COMBINING LATIN SMALL LETTER INSULAR T 1B00..1B03 ; N # Mn [4] BALINESE SIGN ULU RICEM..BALINESE SIGN SURANG 1B04 ; N # Mc BALINESE SIGN BISAH 1B05..1B33 ; N # Lo [47] BALINESE LETTER AKARA..BALINESE LETTER HA @@ -671,12 +680,13 @@ 1B3D..1B41 ; N # Mc [5] BALINESE VOWEL SIGN LA LENGA TEDUNG..BALINESE VOWEL SIGN TALING REPA TEDUNG 1B42 ; N # Mn BALINESE VOWEL SIGN PEPET 1B43..1B44 ; N # Mc [2] BALINESE VOWEL SIGN PEPET TEDUNG..BALINESE ADEG ADEG -1B45..1B4B ; N # Lo [7] BALINESE LETTER KAF SASAK..BALINESE LETTER ASYURA SASAK +1B45..1B4C ; N # Lo [8] BALINESE LETTER KAF SASAK..BALINESE LETTER ARCHAIC JNYA 1B50..1B59 ; N # Nd [10] BALINESE DIGIT ZERO..BALINESE DIGIT NINE 1B5A..1B60 ; N # Po [7] BALINESE PANTI..BALINESE PAMENENG 1B61..1B6A ; N # So [10] BALINESE MUSICAL SYMBOL DONG..BALINESE MUSICAL SYMBOL DANG GEDE 1B6B..1B73 ; N # Mn [9] BALINESE MUSICAL SYMBOL COMBINING TEGEH..BALINESE MUSICAL SYMBOL COMBINING GONG 1B74..1B7C ; N # So [9] BALINESE MUSICAL SYMBOL RIGHT-HAND OPEN DUG..BALINESE MUSICAL SYMBOL LEFT-HAND OPEN PING +1B7D..1B7E ; N # Po [2] BALINESE PANTI LANTANG..BALINESE PAMADA LANTANG 1B80..1B81 ; N # Mn [2] SUNDANESE SIGN PANYECEK..SUNDANESE SIGN PANGLAYAR 1B82 ; N # Mc SUNDANESE SIGN PANGWISAD 1B83..1BA0 ; N # Lo [30] SUNDANESE LETTER A..SUNDANESE LETTER HA @@ -733,8 +743,7 @@ 1D78 ; N # Lm MODIFIER LETTER CYRILLIC EN 1D79..1D9A ; N # L& [34] LATIN SMALL LETTER INSULAR G..LATIN SMALL LETTER EZH WITH RETROFLEX HOOK 1D9B..1DBF ; N # Lm [37] MODIFIER LETTER SMALL TURNED ALPHA..MODIFIER LETTER SMALL THETA -1DC0..1DF9 ; N # Mn [58] COMBINING DOTTED GRAVE ACCENT..COMBINING WIDE INVERTED BRIDGE BELOW -1DFB..1DFF ; N # Mn [5] COMBINING DELETION MARK..COMBINING RIGHT ARROWHEAD AND DOWN ARROWHEAD BELOW +1DC0..1DFF ; N # Mn [64] COMBINING DOTTED GRAVE ACCENT..COMBINING RIGHT ARROWHEAD AND DOWN ARROWHEAD BELOW 1E00..1F15 ; N # L& [278] LATIN CAPITAL LETTER A WITH RING BELOW..GREEK SMALL LETTER EPSILON WITH DASIA AND OXIA 1F18..1F1D ; N # L& [6] GREEK CAPITAL LETTER EPSILON WITH PSILI..GREEK CAPITAL LETTER EPSILON WITH DASIA AND OXIA 1F20..1F45 ; N # L& [38] GREEK SMALL LETTER ETA WITH PSILI..GREEK SMALL LETTER OMICRON WITH DASIA AND OXIA @@ -806,7 +815,7 @@ 2090..209C ; N # Lm [13] LATIN SUBSCRIPT SMALL LETTER A..LATIN SUBSCRIPT SMALL LETTER T 20A0..20A8 ; N # Sc [9] EURO-CURRENCY SIGN..RUPEE SIGN 20AA..20AB ; N # Sc [2] NEW SHEQEL SIGN..DONG SIGN -20AD..20BF ; N # Sc [19] KIP SIGN..BITCOIN SIGN +20AD..20C0 ; N # Sc [20] KIP SIGN..SOM SIGN 20D0..20DC ; N # Mn [13] COMBINING LEFT HARPOON ABOVE..COMBINING FOUR DOTS ABOVE 20DD..20E0 ; N # Me [4] COMBINING ENCLOSING CIRCLE..COMBINING ENCLOSING CIRCLE BACKSLASH 20E1 ; N # Mn COMBINING LEFT RIGHT ARROW ABOVE @@ -1036,9 +1045,7 @@ 2B5A..2B73 ; N # So [26] SLANTED NORTH ARROW WITH HOOKED HEAD..DOWNWARDS TRIANGLE-HEADED ARROW TO BAR 2B76..2B95 ; N # So [32] NORTH WEST TRIANGLE-HEADED ARROW TO BAR..RIGHTWARDS BLACK ARROW 2B97..2BFF ; N # So [105] SYMBOL FOR TYPE A ELECTRONICS..HELLSCHREIBER PAUSE SYMBOL -2C00..2C2E ; N # L& [47] GLAGOLITIC CAPITAL LETTER AZU..GLAGOLITIC CAPITAL LETTER LATINATE MYSLITE -2C30..2C5E ; N # L& [47] GLAGOLITIC SMALL LETTER AZU..GLAGOLITIC SMALL LETTER LATINATE MYSLITE -2C60..2C7B ; N # L& [28] LATIN CAPITAL LETTER L WITH DOUBLE BAR..LATIN LETTER SMALL CAPITAL TURNED E +2C00..2C7B ; N # L& [124] GLAGOLITIC CAPITAL LETTER AZU..LATIN LETTER SMALL CAPITAL TURNED E 2C7C..2C7D ; N # Lm [2] LATIN SUBSCRIPT SMALL LETTER J..MODIFIER LETTER CAPITAL V 2C7E..2CE4 ; N # L& [103] LATIN CAPITAL LETTER S WITH SWASH TAIL..COPTIC SYMBOL KAI 2CE5..2CEA ; N # So [6] COPTIC SYMBOL MI RO..COPTIC SYMBOL SHIMA SIMA @@ -1104,7 +1111,16 @@ 2E42 ; N # Ps DOUBLE LOW-REVERSED-9 QUOTATION MARK 2E43..2E4F ; N # Po [13] DASH WITH LEFT UPTURN..CORNISH VERSE DIVIDER 2E50..2E51 ; N # So [2] CROSS PATTY WITH RIGHT CROSSBAR..CROSS PATTY WITH LEFT CROSSBAR -2E52 ; N # Po TIRONIAN SIGN CAPITAL ET +2E52..2E54 ; N # Po [3] TIRONIAN SIGN CAPITAL ET..MEDIEVAL QUESTION MARK +2E55 ; N # Ps LEFT SQUARE BRACKET WITH STROKE +2E56 ; N # Pe RIGHT SQUARE BRACKET WITH STROKE +2E57 ; N # Ps LEFT SQUARE BRACKET WITH DOUBLE STROKE +2E58 ; N # Pe RIGHT SQUARE BRACKET WITH DOUBLE STROKE +2E59 ; N # Ps TOP HALF LEFT PARENTHESIS +2E5A ; N # Pe TOP HALF RIGHT PARENTHESIS +2E5B ; N # Ps BOTTOM HALF LEFT PARENTHESIS +2E5C ; N # Pe BOTTOM HALF RIGHT PARENTHESIS +2E5D ; N # Pd OBLIQUE HYPHEN 303F ; N # So IDEOGRAPHIC HALF FILL SPACE 4DC0..4DFF ; N # So [64] HEXAGRAM FOR THE CREATIVE HEAVEN..HEXAGRAM FOR BEFORE COMPLETION A4D0..A4F7 ; N # Lo [40] LISU LETTER BA..LISU LETTER OE @@ -1141,8 +1157,11 @@ A788 ; N # Lm MODIFIER LETTER LOW CIRCUMFLEX ACCENT A789..A78A ; N # Sk [2] MODIFIER LETTER COLON..MODIFIER LETTER SHORT EQUALS SIGN A78B..A78E ; N # L& [4] LATIN CAPITAL LETTER SALTILLO..LATIN SMALL LETTER L WITH RETROFLEX HOOK AND BELT A78F ; N # Lo LATIN LETTER SINOLOGICAL DOT -A790..A7BF ; N # L& [48] LATIN CAPITAL LETTER N WITH DESCENDER..LATIN SMALL LETTER GLOTTAL U -A7C2..A7CA ; N # L& [9] LATIN CAPITAL LETTER ANGLICANA W..LATIN SMALL LETTER S WITH SHORT STROKE OVERLAY +A790..A7CA ; N # L& [59] LATIN CAPITAL LETTER N WITH DESCENDER..LATIN SMALL LETTER S WITH SHORT STROKE OVERLAY +A7D0..A7D1 ; N # L& [2] LATIN CAPITAL LETTER CLOSED INSULAR G..LATIN SMALL LETTER CLOSED INSULAR G +A7D3 ; N # L& LATIN SMALL LETTER DOUBLE THORN +A7D5..A7D9 ; N # L& [5] LATIN SMALL LETTER DOUBLE WYNN..LATIN SMALL LETTER SIGMOID S +A7F2..A7F4 ; N # Lm [3] MODIFIER LETTER CAPITAL C..MODIFIER LETTER CAPITAL Q A7F5..A7F6 ; N # L& [2] LATIN CAPITAL LETTER REVERSED HALF H..LATIN SMALL LETTER REVERSED HALF H A7F7 ; N # Lo LATIN EPIGRAPHIC LETTER SIDEWAYS I A7F8..A7F9 ; N # Lm [2] MODIFIER LETTER CAPITAL H WITH STROKE..MODIFIER LETTER SMALL LIGATURE OE @@ -1285,15 +1304,17 @@ FB3E ; N # Lo HEBREW LETTER MEM WITH DAGESH FB40..FB41 ; N # Lo [2] HEBREW LETTER NUN WITH DAGESH..HEBREW LETTER SAMEKH WITH DAGESH FB43..FB44 ; N # Lo [2] HEBREW LETTER FINAL PE WITH DAGESH..HEBREW LETTER PE WITH DAGESH FB46..FBB1 ; N # Lo [108] HEBREW LETTER TSADI WITH DAGESH..ARABIC LETTER YEH BARREE WITH HAMZA ABOVE FINAL FORM -FBB2..FBC1 ; N # Sk [16] ARABIC SYMBOL DOT ABOVE..ARABIC SYMBOL SMALL TAH BELOW +FBB2..FBC2 ; N # Sk [17] ARABIC SYMBOL DOT ABOVE..ARABIC SYMBOL WASLA ABOVE FBD3..FD3D ; N # Lo [363] ARABIC LETTER NG ISOLATED FORM..ARABIC LIGATURE ALEF WITH FATHATAN ISOLATED FORM FD3E ; N # Pe ORNATE LEFT PARENTHESIS FD3F ; N # Ps ORNATE RIGHT PARENTHESIS +FD40..FD4F ; N # So [16] ARABIC LIGATURE RAHIMAHU ALLAAH..ARABIC LIGATURE RAHIMAHUM ALLAAH FD50..FD8F ; N # Lo [64] ARABIC LIGATURE TEH WITH JEEM WITH MEEM INITIAL FORM..ARABIC LIGATURE MEEM WITH KHAH WITH MEEM INITIAL FORM FD92..FDC7 ; N # Lo [54] ARABIC LIGATURE MEEM WITH JEEM WITH KHAH INITIAL FORM..ARABIC LIGATURE NOON WITH JEEM WITH YEH FINAL FORM +FDCF ; N # So ARABIC LIGATURE SALAAMUHU ALAYNAA FDF0..FDFB ; N # Lo [12] ARABIC LIGATURE SALLA USED AS KORANIC STOP SIGN ISOLATED FORM..ARABIC LIGATURE JALLAJALALOUHOU FDFC ; N # Sc RIAL SIGN -FDFD ; N # So ARABIC LIGATURE BISMILLAH AR-RAHMAN AR-RAHEEM +FDFD..FDFF ; N # So [3] ARABIC LIGATURE BISMILLAH AR-RAHMAN AR-RAHEEM..ARABIC LIGATURE AZZA WA JALL FE20..FE2F ; N # Mn [16] COMBINING LIGATURE LEFT HALF..COMBINING CYRILLIC TITLO RIGHT HALF FE70..FE74 ; N # Lo [5] ARABIC FATHATAN ISOLATED FORM..ARABIC KASRATAN ISOLATED FORM FE76..FEFC ; N # Lo [135] ARABIC FATHA ISOLATED FORM..ARABIC LIGATURE LAM WITH ALEF FINAL FORM @@ -1345,9 +1366,20 @@ FFFC ; N # So OBJECT REPLACEMENT CHARACTER 10500..10527 ; N # Lo [40] ELBASAN LETTER A..ELBASAN LETTER KHE 10530..10563 ; N # Lo [52] CAUCASIAN ALBANIAN LETTER ALT..CAUCASIAN ALBANIAN LETTER KIW 1056F ; N # Po CAUCASIAN ALBANIAN CITATION MARK +10570..1057A ; N # L& [11] VITHKUQI CAPITAL LETTER A..VITHKUQI CAPITAL LETTER GA +1057C..1058A ; N # L& [15] VITHKUQI CAPITAL LETTER HA..VITHKUQI CAPITAL LETTER RE +1058C..10592 ; N # L& [7] VITHKUQI CAPITAL LETTER SE..VITHKUQI CAPITAL LETTER XE +10594..10595 ; N # L& [2] VITHKUQI CAPITAL LETTER Y..VITHKUQI CAPITAL LETTER ZE +10597..105A1 ; N # L& [11] VITHKUQI SMALL LETTER A..VITHKUQI SMALL LETTER GA +105A3..105B1 ; N # L& [15] VITHKUQI SMALL LETTER HA..VITHKUQI SMALL LETTER RE +105B3..105B9 ; N # L& [7] VITHKUQI SMALL LETTER SE..VITHKUQI SMALL LETTER XE +105BB..105BC ; N # L& [2] VITHKUQI SMALL LETTER Y..VITHKUQI SMALL LETTER ZE 10600..10736 ; N # Lo [311] LINEAR A SIGN AB001..LINEAR A SIGN A664 10740..10755 ; N # Lo [22] LINEAR A SIGN A701 A..LINEAR A SIGN A732 JE 10760..10767 ; N # Lo [8] LINEAR A SIGN A800..LINEAR A SIGN A807 +10780..10785 ; N # Lm [6] MODIFIER LETTER SMALL CAPITAL AA..MODIFIER LETTER SMALL B WITH HOOK +10787..107B0 ; N # Lm [42] MODIFIER LETTER SMALL DZ DIGRAPH..MODIFIER LETTER SMALL V WITH RIGHT HOOK +107B2..107BA ; N # Lm [9] MODIFIER LETTER SMALL CAPITAL Y..MODIFIER LETTER SMALL S WITH CURL 10800..10805 ; N # Lo [6] CYPRIOT SYLLABLE A..CYPRIOT SYLLABLE JA 10808 ; N # Lo CYPRIOT SYLLABLE JO 1080A..10835 ; N # Lo [44] CYPRIOT SYLLABLE KA..CYPRIOT SYLLABLE WO @@ -1424,6 +1456,9 @@ FFFC ; N # So OBJECT REPLACEMENT CHARACTER 10F46..10F50 ; N # Mn [11] SOGDIAN COMBINING DOT BELOW..SOGDIAN COMBINING STROKE BELOW 10F51..10F54 ; N # No [4] SOGDIAN NUMBER ONE..SOGDIAN NUMBER ONE HUNDRED 10F55..10F59 ; N # Po [5] SOGDIAN PUNCTUATION TWO VERTICAL BARS..SOGDIAN PUNCTUATION HALF CIRCLE WITH DOT +10F70..10F81 ; N # Lo [18] OLD UYGHUR LETTER ALEPH..OLD UYGHUR LETTER LESH +10F82..10F85 ; N # Mn [4] OLD UYGHUR COMBINING DOT ABOVE..OLD UYGHUR COMBINING TWO DOTS BELOW +10F86..10F89 ; N # Po [4] OLD UYGHUR PUNCTUATION BAR..OLD UYGHUR PUNCTUATION FOUR DOTS 10FB0..10FC4 ; N # Lo [21] CHORASMIAN LETTER ALEPH..CHORASMIAN LETTER TAW 10FC5..10FCB ; N # No [7] CHORASMIAN NUMBER ONE..CHORASMIAN NUMBER ONE HUNDRED 10FE0..10FF6 ; N # Lo [23] ELYMAIC LETTER ALEPH..ELYMAIC LIGATURE ZAYIN-YODH @@ -1435,6 +1470,10 @@ FFFC ; N # So OBJECT REPLACEMENT CHARACTER 11047..1104D ; N # Po [7] BRAHMI DANDA..BRAHMI PUNCTUATION LOTUS 11052..11065 ; N # No [20] BRAHMI NUMBER ONE..BRAHMI NUMBER ONE THOUSAND 11066..1106F ; N # Nd [10] BRAHMI DIGIT ZERO..BRAHMI DIGIT NINE +11070 ; N # Mn BRAHMI SIGN OLD TAMIL VIRAMA +11071..11072 ; N # Lo [2] BRAHMI LETTER OLD TAMIL SHORT E..BRAHMI LETTER OLD TAMIL SHORT O +11073..11074 ; N # Mn [2] BRAHMI VOWEL SIGN OLD TAMIL SHORT E..BRAHMI VOWEL SIGN OLD TAMIL SHORT O +11075 ; N # Lo BRAHMI LETTER OLD TAMIL LLA 1107F..11081 ; N # Mn [3] BRAHMI NUMBER JOINER..KAITHI SIGN ANUSVARA 11082 ; N # Mc KAITHI SIGN VISARGA 11083..110AF ; N # Lo [45] KAITHI LETTER A..KAITHI LETTER HA @@ -1445,6 +1484,7 @@ FFFC ; N # So OBJECT REPLACEMENT CHARACTER 110BB..110BC ; N # Po [2] KAITHI ABBREVIATION SIGN..KAITHI ENUMERATION SIGN 110BD ; N # Cf KAITHI NUMBER SIGN 110BE..110C1 ; N # Po [4] KAITHI SECTION MARK..KAITHI DOUBLE DANDA +110C2 ; N # Mn KAITHI VOWEL SIGN VOCALIC R 110CD ; N # Cf KAITHI NUMBER SIGN ABOVE 110D0..110E8 ; N # Lo [25] SORA SOMPENG LETTER SAH..SORA SOMPENG LETTER MAE 110F0..110F9 ; N # Nd [10] SORA SOMPENG DIGIT ZERO..SORA SOMPENG DIGIT NINE @@ -1579,6 +1619,7 @@ FFFC ; N # So OBJECT REPLACEMENT CHARACTER 116B6 ; N # Mc TAKRI SIGN VIRAMA 116B7 ; N # Mn TAKRI SIGN NUKTA 116B8 ; N # Lo TAKRI LETTER ARCHAIC KHA +116B9 ; N # Po TAKRI ABBREVIATION SIGN 116C0..116C9 ; N # Nd [10] TAKRI DIGIT ZERO..TAKRI DIGIT NINE 11700..1171A ; N # Lo [27] AHOM LETTER KA..AHOM LETTER ALTERNATE BA 1171D..1171F ; N # Mn [3] AHOM CONSONANT SIGN MEDIAL LA..AHOM CONSONANT SIGN MEDIAL LIGATING RA @@ -1590,6 +1631,7 @@ FFFC ; N # So OBJECT REPLACEMENT CHARACTER 1173A..1173B ; N # No [2] AHOM NUMBER TEN..AHOM NUMBER TWENTY 1173C..1173E ; N # Po [3] AHOM SIGN SMALL SECTION..AHOM SIGN RULAI 1173F ; N # So AHOM SYMBOL VI +11740..11746 ; N # Lo [7] AHOM LETTER CA..AHOM LETTER LLA 11800..1182B ; N # Lo [44] DOGRA LETTER A..DOGRA LETTER RRA 1182C..1182E ; N # Mc [3] DOGRA VOWEL SIGN AA..DOGRA VOWEL SIGN II 1182F..11837 ; N # Mn [9] DOGRA VOWEL SIGN U..DOGRA SIGN ANUSVARA @@ -1647,7 +1689,7 @@ FFFC ; N # So OBJECT REPLACEMENT CHARACTER 11A9A..11A9C ; N # Po [3] SOYOMBO MARK TSHEG..SOYOMBO MARK DOUBLE SHAD 11A9D ; N # Lo SOYOMBO MARK PLUTA 11A9E..11AA2 ; N # Po [5] SOYOMBO HEAD MARK WITH MOON AND SUN AND TRIPLE FLAME..SOYOMBO TERMINAL MARK-2 -11AC0..11AF8 ; N # Lo [57] PAU CIN HAU LETTER PA..PAU CIN HAU GLOTTAL STOP FINAL +11AB0..11AF8 ; N # Lo [73] CANADIAN SYLLABICS NATTILIK HI..PAU CIN HAU GLOTTAL STOP FINAL 11C00..11C08 ; N # Lo [9] BHAIKSUKI LETTER A..BHAIKSUKI LETTER VOCALIC L 11C0A..11C2E ; N # Lo [37] BHAIKSUKI LETTER E..BHAIKSUKI LETTER HA 11C2F ; N # Mc BHAIKSUKI VOWEL SIGN AA @@ -1703,6 +1745,8 @@ FFFC ; N # So OBJECT REPLACEMENT CHARACTER 12400..1246E ; N # Nl [111] CUNEIFORM NUMERIC SIGN TWO ASH..CUNEIFORM NUMERIC SIGN NINE U VARIANT FORM 12470..12474 ; N # Po [5] CUNEIFORM PUNCTUATION SIGN OLD ASSYRIAN WORD DIVIDER..CUNEIFORM PUNCTUATION SIGN DIAGONAL QUADCOLON 12480..12543 ; N # Lo [196] CUNEIFORM SIGN AB TIMES NUN TENU..CUNEIFORM SIGN ZU5 TIMES THREE DISH TENU +12F90..12FF0 ; N # Lo [97] CYPRO-MINOAN SIGN CM001..CYPRO-MINOAN SIGN CM114 +12FF1..12FF2 ; N # Po [2] CYPRO-MINOAN SIGN CM301..CYPRO-MINOAN SIGN CM302 13000..1342E ; N # Lo [1071] EGYPTIAN HIEROGLYPH A001..EGYPTIAN HIEROGLYPH AA032 13430..13438 ; N # Cf [9] EGYPTIAN HIEROGLYPH VERTICAL JOINER..EGYPTIAN HIEROGLYPH END SEGMENT 14400..14646 ; N # Lo [583] ANATOLIAN HIEROGLYPH A001..ANATOLIAN HIEROGLYPH A530 @@ -1710,6 +1754,8 @@ FFFC ; N # So OBJECT REPLACEMENT CHARACTER 16A40..16A5E ; N # Lo [31] MRO LETTER TA..MRO LETTER TEK 16A60..16A69 ; N # Nd [10] MRO DIGIT ZERO..MRO DIGIT NINE 16A6E..16A6F ; N # Po [2] MRO DANDA..MRO DOUBLE DANDA +16A70..16ABE ; N # Lo [79] TANGSA LETTER OZ..TANGSA LETTER ZA +16AC0..16AC9 ; N # Nd [10] TANGSA DIGIT ZERO..TANGSA DIGIT NINE 16AD0..16AED ; N # Lo [30] BASSA VAH LETTER ENNI..BASSA VAH LETTER I 16AF0..16AF4 ; N # Mn [5] BASSA VAH COMBINING HIGH TONE..BASSA VAH COMBINING HIGH-LOW TONE 16AF5 ; N # Po BASSA VAH FULL STOP @@ -1741,6 +1787,9 @@ FFFC ; N # So OBJECT REPLACEMENT CHARACTER 1BC9D..1BC9E ; N # Mn [2] DUPLOYAN THICK LETTER SELECTOR..DUPLOYAN DOUBLE MARK 1BC9F ; N # Po DUPLOYAN PUNCTUATION CHINOOK FULL STOP 1BCA0..1BCA3 ; N # Cf [4] SHORTHAND FORMAT LETTER OVERLAP..SHORTHAND FORMAT UP STEP +1CF00..1CF2D ; N # Mn [46] ZNAMENNY COMBINING MARK GORAZDO NIZKO S KRYZHEM ON LEFT..ZNAMENNY COMBINING MARK KRYZH ON LEFT +1CF30..1CF46 ; N # Mn [23] ZNAMENNY COMBINING TONAL RANGE MARK MRACHNO..ZNAMENNY PRIZNAK MODIFIER ROG +1CF50..1CFC3 ; N # So [116] ZNAMENNY NEUME KRYUK..ZNAMENNY NEUME PAUK 1D000..1D0F5 ; N # So [246] BYZANTINE MUSICAL SYMBOL PSILI..BYZANTINE MUSICAL SYMBOL GORGON NEO KATO 1D100..1D126 ; N # So [39] MUSICAL SYMBOL SINGLE BARLINE..MUSICAL SYMBOL DRUM CLEF-2 1D129..1D164 ; N # So [60] MUSICAL SYMBOL MULTIPLE MEASURE REST..MUSICAL SYMBOL ONE HUNDRED TWENTY-EIGHTH NOTE @@ -1754,7 +1803,7 @@ FFFC ; N # So OBJECT REPLACEMENT CHARACTER 1D185..1D18B ; N # Mn [7] MUSICAL SYMBOL COMBINING DOIT..MUSICAL SYMBOL COMBINING TRIPLE TONGUE 1D18C..1D1A9 ; N # So [30] MUSICAL SYMBOL RINFORZANDO..MUSICAL SYMBOL DEGREE SLASH 1D1AA..1D1AD ; N # Mn [4] MUSICAL SYMBOL COMBINING DOWN BOW..MUSICAL SYMBOL COMBINING SNAP PIZZICATO -1D1AE..1D1E8 ; N # So [59] MUSICAL SYMBOL PEDAL MARK..MUSICAL SYMBOL KIEVAN FLAT SIGN +1D1AE..1D1EA ; N # So [61] MUSICAL SYMBOL PEDAL MARK..MUSICAL SYMBOL KORON 1D200..1D241 ; N # So [66] GREEK VOCAL NOTATION SYMBOL-1..GREEK INSTRUMENTAL NOTATION SYMBOL-54 1D242..1D244 ; N # Mn [3] COMBINING GREEK MUSICAL TRISEME..COMBINING GREEK MUSICAL PENTASEME 1D245 ; N # So GREEK MUSICAL LEIMMA @@ -1814,6 +1863,9 @@ FFFC ; N # So OBJECT REPLACEMENT CHARACTER 1DA87..1DA8B ; N # Po [5] SIGNWRITING COMMA..SIGNWRITING PARENTHESIS 1DA9B..1DA9F ; N # Mn [5] SIGNWRITING FILL MODIFIER-2..SIGNWRITING FILL MODIFIER-6 1DAA1..1DAAF ; N # Mn [15] SIGNWRITING ROTATION MODIFIER-2..SIGNWRITING ROTATION MODIFIER-16 +1DF00..1DF09 ; N # L& [10] LATIN SMALL LETTER FENG DIGRAPH WITH TRILL..LATIN SMALL LETTER T WITH HOOK AND RETROFLEX HOOK +1DF0A ; N # Lo LATIN LETTER RETROFLEX CLICK WITH RETROFLEX HOOK +1DF0B..1DF1E ; N # L& [20] LATIN SMALL LETTER ESH WITH DOUBLE BAR..LATIN SMALL LETTER S WITH CURL 1E000..1E006 ; N # Mn [7] COMBINING GLAGOLITIC LETTER AZU..COMBINING GLAGOLITIC LETTER ZHIVETE 1E008..1E018 ; N # Mn [17] COMBINING GLAGOLITIC LETTER ZEMLJA..COMBINING GLAGOLITIC LETTER HERU 1E01B..1E021 ; N # Mn [7] COMBINING GLAGOLITIC LETTER SHTA..COMBINING GLAGOLITIC LETTER YATI @@ -1825,10 +1877,16 @@ FFFC ; N # So OBJECT REPLACEMENT CHARACTER 1E140..1E149 ; N # Nd [10] NYIAKENG PUACHUE HMONG DIGIT ZERO..NYIAKENG PUACHUE HMONG DIGIT NINE 1E14E ; N # Lo NYIAKENG PUACHUE HMONG LOGOGRAM NYAJ 1E14F ; N # So NYIAKENG PUACHUE HMONG CIRCLED CA +1E290..1E2AD ; N # Lo [30] TOTO LETTER PA..TOTO LETTER A +1E2AE ; N # Mn TOTO SIGN RISING TONE 1E2C0..1E2EB ; N # Lo [44] WANCHO LETTER AA..WANCHO LETTER YIH 1E2EC..1E2EF ; N # Mn [4] WANCHO TONE TUP..WANCHO TONE KOINI 1E2F0..1E2F9 ; N # Nd [10] WANCHO DIGIT ZERO..WANCHO DIGIT NINE 1E2FF ; N # Sc WANCHO NGUN SIGN +1E7E0..1E7E6 ; N # Lo [7] ETHIOPIC SYLLABLE HHYA..ETHIOPIC SYLLABLE HHYO +1E7E8..1E7EB ; N # Lo [4] ETHIOPIC SYLLABLE GURAGE HHWA..ETHIOPIC SYLLABLE HHWE +1E7ED..1E7EE ; N # Lo [2] ETHIOPIC SYLLABLE GURAGE MWI..ETHIOPIC SYLLABLE GURAGE MWEE +1E7F0..1E7FE ; N # Lo [15] ETHIOPIC SYLLABLE GURAGE QWI..ETHIOPIC SYLLABLE GURAGE PWEE 1E800..1E8C4 ; N # Lo [197] MENDE KIKAKUI SYLLABLE M001 KI..MENDE KIKAKUI SYLLABLE M060 NYON 1E8C7..1E8CF ; N # No [9] MENDE KIKAKUI DIGIT ONE..MENDE KIKAKUI DIGIT NINE 1E8D0..1E8D6 ; N # Mn [7] MENDE KIKAKUI COMBINING NUMBER TEENS..MENDE KIKAKUI COMBINING NUMBER MILLIONS @@ -1934,8 +1992,8 @@ FFFC ; N # So OBJECT REPLACEMENT CHARACTER E0001 ; N # Cf LANGUAGE TAG E0020..E007F ; N # Cf [96] TAG SPACE..CANCEL TAG -# The above property value applies to 767414 code points not listed here. -# Total code points: 792699 +# The above property value applies to 766585 code points not listed here. +# Total code points: 792645 # ================================================ @@ -2278,9 +2336,7 @@ FFED..FFEE ; H # So [2] HALFWIDTH BLACK SQUARE..HALFWIDTH WHITE CIRCLE 32B1..32BF ; W # No [15] CIRCLED NUMBER THIRTY SIX..CIRCLED NUMBER FIFTY 32C0..33FF ; W # So [320] IDEOGRAPHIC TELEGRAPH SYMBOL FOR JANUARY..SQUARE GAL 3400..4DBF ; W # Lo [6592] CJK UNIFIED IDEOGRAPH-3400..CJK UNIFIED IDEOGRAPH-4DBF -4E00..9FFC ; W # Lo [20989] CJK UNIFIED IDEOGRAPH-4E00..CJK UNIFIED IDEOGRAPH-9FFC -9FFD..9FFF ; W # Cn [3] .. -A000..A014 ; W # Lo [21] YI SYLLABLE IT..YI SYLLABLE E +4E00..A014 ; W # Lo [21013] CJK UNIFIED IDEOGRAPH-4E00..YI SYLLABLE E A015 ; W # Lm YI SYLLABLE WU A016..A48C ; W # Lo [1143] YI SYLLABLE BIT..YI SYLLABLE YYR A490..A4C6 ; W # So [55] YI RADICAL QOT..YI RADICAL KE @@ -2342,7 +2398,10 @@ FE6A..FE6B ; W # Po [2] SMALL PERCENT SIGN..SMALL COMMERCIAL AT 17000..187F7 ; W # Lo [6136] TANGUT IDEOGRAPH-17000..TANGUT IDEOGRAPH-187F7 18800..18CD5 ; W # Lo [1238] TANGUT COMPONENT-001..KHITAN SMALL SCRIPT CHARACTER-18CD5 18D00..18D08 ; W # Lo [9] TANGUT IDEOGRAPH-18D00..TANGUT IDEOGRAPH-18D08 -1B000..1B11E ; W # Lo [287] KATAKANA LETTER ARCHAIC E..HENTAIGANA LETTER N-MU-MO-2 +1AFF0..1AFF3 ; W # Lm [4] KATAKANA LETTER MINNAN TONE-2..KATAKANA LETTER MINNAN TONE-5 +1AFF5..1AFFB ; W # Lm [7] KATAKANA LETTER MINNAN TONE-7..KATAKANA LETTER MINNAN NASALIZED TONE-5 +1AFFD..1AFFE ; W # Lm [2] KATAKANA LETTER MINNAN NASALIZED TONE-7..KATAKANA LETTER MINNAN NASALIZED TONE-8 +1B000..1B122 ; W # Lo [291] KATAKANA LETTER ARCHAIC E..KATAKANA LETTER ARCHAIC WU 1B150..1B152 ; W # Lo [3] HIRAGANA LETTER SMALL WI..HIRAGANA LETTER SMALL WO 1B164..1B167 ; W # Lo [4] KATAKANA LETTER SMALL WI..KATAKANA LETTER SMALL N 1B170..1B2FB ; W # Lo [396] NUSHU CHARACTER-1B170..NUSHU CHARACTER-1B2FB @@ -2379,25 +2438,27 @@ FE6A..FE6B ; W # Po [2] SMALL PERCENT SIGN..SMALL COMMERCIAL AT 1F6CC ; W # So SLEEPING ACCOMMODATION 1F6D0..1F6D2 ; W # So [3] PLACE OF WORSHIP..SHOPPING TROLLEY 1F6D5..1F6D7 ; W # So [3] HINDU TEMPLE..ELEVATOR +1F6DD..1F6DF ; W # So [3] PLAYGROUND SLIDE..RING BUOY 1F6EB..1F6EC ; W # So [2] AIRPLANE DEPARTURE..AIRPLANE ARRIVING 1F6F4..1F6FC ; W # So [9] SCOOTER..ROLLER SKATE 1F7E0..1F7EB ; W # So [12] LARGE ORANGE CIRCLE..LARGE BROWN SQUARE +1F7F0 ; W # So HEAVY EQUALS SIGN 1F90C..1F93A ; W # So [47] PINCHED FINGERS..FENCER 1F93C..1F945 ; W # So [10] WRESTLERS..GOAL NET -1F947..1F978 ; W # So [50] FIRST PLACE MEDAL..DISGUISED FACE -1F97A..1F9CB ; W # So [82] FACE WITH PLEADING EYES..BUBBLE TEA -1F9CD..1F9FF ; W # So [51] STANDING PERSON..NAZAR AMULET +1F947..1F9FF ; W # So [185] FIRST PLACE MEDAL..NAZAR AMULET 1FA70..1FA74 ; W # So [5] BALLET SHOES..THONG SANDAL -1FA78..1FA7A ; W # So [3] DROP OF BLOOD..STETHOSCOPE +1FA78..1FA7C ; W # So [5] DROP OF BLOOD..CRUTCH 1FA80..1FA86 ; W # So [7] YO-YO..NESTING DOLLS -1FA90..1FAA8 ; W # So [25] RINGED PLANET..ROCK -1FAB0..1FAB6 ; W # So [7] FLY..FEATHER -1FAC0..1FAC2 ; W # So [3] ANATOMICAL HEART..PEOPLE HUGGING -1FAD0..1FAD6 ; W # So [7] BLUEBERRIES..TEAPOT -20000..2A6DD ; W # Lo [42718] CJK UNIFIED IDEOGRAPH-20000..CJK UNIFIED IDEOGRAPH-2A6DD -2A6DE..2A6FF ; W # Cn [34] .. -2A700..2B734 ; W # Lo [4149] CJK UNIFIED IDEOGRAPH-2A700..CJK UNIFIED IDEOGRAPH-2B734 -2B735..2B73F ; W # Cn [11] .. +1FA90..1FAAC ; W # So [29] RINGED PLANET..HAMSA +1FAB0..1FABA ; W # So [11] FLY..NEST WITH EGGS +1FAC0..1FAC5 ; W # So [6] ANATOMICAL HEART..PERSON WITH CROWN +1FAD0..1FAD9 ; W # So [10] BLUEBERRIES..JAR +1FAE0..1FAE7 ; W # So [8] MELTING FACE..BUBBLES +1FAF0..1FAF6 ; W # So [7] HAND WITH INDEX FINGER AND THUMB CROSSED..HEART HANDS +20000..2A6DF ; W # Lo [42720] CJK UNIFIED IDEOGRAPH-20000..CJK UNIFIED IDEOGRAPH-2A6DF +2A6E0..2A6FF ; W # Cn [32] .. +2A700..2B738 ; W # Lo [4153] CJK UNIFIED IDEOGRAPH-2A700..CJK UNIFIED IDEOGRAPH-2B738 +2B739..2B73F ; W # Cn [7] .. 2B740..2B81D ; W # Lo [222] CJK UNIFIED IDEOGRAPH-2B740..CJK UNIFIED IDEOGRAPH-2B81D 2B81E..2B81F ; W # Cn [2] .. 2B820..2CEA1 ; W # Lo [5762] CJK UNIFIED IDEOGRAPH-2B820..CJK UNIFIED IDEOGRAPH-2CEA1 @@ -2409,7 +2470,7 @@ FE6A..FE6B ; W # Po [2] SMALL PERCENT SIGN..SMALL COMMERCIAL AT 30000..3134A ; W # Lo [4939] CJK UNIFIED IDEOGRAPH-30000..CJK UNIFIED IDEOGRAPH-3134A 3134B..3FFFD ; W # Cn [60595] .. -# Total code points: 182336 +# Total code points: 182390 # ================================================ diff --git a/gnu/usr.bin/perl/lib/unicore/extracted/DGeneralCategory.txt b/gnu/usr.bin/perl/lib/unicore/extracted/DGeneralCategory.txt index 3e82c7fc532..a36d42a3e86 100644 --- a/gnu/usr.bin/perl/lib/unicore/extracted/DGeneralCategory.txt +++ b/gnu/usr.bin/perl/lib/unicore/extracted/DGeneralCategory.txt @@ -1,6 +1,6 @@ -# DerivedGeneralCategory-13.0.0.txt -# Date: 2019-10-21, 14:30:32 GMT -# © 2019 Unicode®, Inc. +# DerivedGeneralCategory-14.0.0.txt +# Date: 2021-07-10, 00:35:08 GMT +# © 2021 Unicode®, Inc. # Unicode and the Unicode Logo are registered trademarks of Unicode, Inc. in the U.S. and other countries. # For terms of use, see http://www.unicode.org/terms_of_use.html # @@ -27,7 +27,6 @@ 05C8..05CF ; Cn # [8] .. 05EB..05EE ; Cn # [4] .. 05F5..05FF ; Cn # [11] .. -061D ; Cn # 070E ; Cn # 074B..074C ; Cn # [2] .. 07B2..07BF ; Cn # [14] .. @@ -36,9 +35,9 @@ 083F ; Cn # 085C..085D ; Cn # [2] .. 085F ; Cn # -086B..089F ; Cn # [53] .. -08B5 ; Cn # -08C8..08D2 ; Cn # [11] .. +086B..086F ; Cn # [5] .. +088F ; Cn # +0892..0897 ; Cn # [6] .. 0984 ; Cn # 098D..098E ; Cn # [2] .. 0991..0992 ; Cn # [2] .. @@ -116,12 +115,13 @@ 0C0D ; Cn # 0C11 ; Cn # 0C29 ; Cn # -0C3A..0C3C ; Cn # [3] .. +0C3A..0C3B ; Cn # [2] .. 0C45 ; Cn # 0C49 ; Cn # 0C4E..0C54 ; Cn # [7] .. 0C57 ; Cn # -0C5B..0C5F ; Cn # [5] .. +0C5B..0C5C ; Cn # [2] .. +0C5E..0C5F ; Cn # [2] .. 0C64..0C65 ; Cn # [2] .. 0C70..0C76 ; Cn # [7] .. 0C8D ; Cn # @@ -132,7 +132,7 @@ 0CC5 ; Cn # 0CC9 ; Cn # 0CCE..0CD4 ; Cn # [7] .. -0CD7..0CDD ; Cn # [7] .. +0CD7..0CDC ; Cn # [6] .. 0CDF ; Cn # 0CE4..0CE5 ; Cn # [2] .. 0CF0 ; Cn # @@ -200,8 +200,7 @@ 13FE..13FF ; Cn # [2] .. 169D..169F ; Cn # [3] .. 16F9..16FF ; Cn # [7] .. -170D ; Cn # -1715..171F ; Cn # [11] .. +1716..171E ; Cn # [9] .. 1737..173F ; Cn # [9] .. 1754..175F ; Cn # [12] .. 176D ; Cn # @@ -210,7 +209,6 @@ 17DE..17DF ; Cn # [2] .. 17EA..17EF ; Cn # [6] .. 17FA..17FF ; Cn # [6] .. -180F ; Cn # 181A..181F ; Cn # [6] .. 1879..187F ; Cn # [7] .. 18AB..18AF ; Cn # [5] .. @@ -230,9 +228,9 @@ 1A8A..1A8F ; Cn # [6] .. 1A9A..1A9F ; Cn # [6] .. 1AAE..1AAF ; Cn # [2] .. -1AC1..1AFF ; Cn # [63] .. -1B4C..1B4F ; Cn # [4] .. -1B7D..1B7F ; Cn # [3] .. +1ACF..1AFF ; Cn # [49] .. +1B4D..1B4F ; Cn # [3] .. +1B7F ; Cn # 1BF4..1BFB ; Cn # [8] .. 1C38..1C3A ; Cn # [3] .. 1C4A..1C4C ; Cn # [3] .. @@ -240,7 +238,6 @@ 1CBB..1CBC ; Cn # [2] .. 1CC8..1CCF ; Cn # [8] .. 1CFB..1CFF ; Cn # [5] .. -1DFA ; Cn # 1F16..1F17 ; Cn # [2] .. 1F1E..1F1F ; Cn # [2] .. 1F46..1F47 ; Cn # [2] .. @@ -261,15 +258,13 @@ 2072..2073 ; Cn # [2] .. 208F ; Cn # 209D..209F ; Cn # [3] .. -20C0..20CF ; Cn # [16] .. +20C1..20CF ; Cn # [15] .. 20F1..20FF ; Cn # [15] .. 218C..218F ; Cn # [4] .. 2427..243F ; Cn # [25] .. 244B..245F ; Cn # [21] .. 2B74..2B75 ; Cn # [2] .. 2B96 ; Cn # -2C2F ; Cn # -2C5F ; Cn # 2CF4..2CF8 ; Cn # [5] .. 2D26 ; Cn # 2D28..2D2C ; Cn # [5] .. @@ -285,7 +280,7 @@ 2DCF ; Cn # 2DD7 ; Cn # 2DDF ; Cn # -2E53..2E7F ; Cn # [45] .. +2E5E..2E7F ; Cn # [34] .. 2E9A ; Cn # 2EF4..2EFF ; Cn # [12] .. 2FD6..2FEF ; Cn # [26] .. @@ -297,13 +292,14 @@ 318F ; Cn # 31E4..31EF ; Cn # [12] .. 321F ; Cn # -9FFD..9FFF ; Cn # [3] .. A48D..A48F ; Cn # [3] .. A4C7..A4CF ; Cn # [9] .. A62C..A63F ; Cn # [20] .. A6F8..A6FF ; Cn # [8] .. -A7C0..A7C1 ; Cn # [2] .. -A7CB..A7F4 ; Cn # [42] .. +A7CB..A7CF ; Cn # [5] .. +A7D2 ; Cn # +A7D4 ; Cn # +A7DA..A7F1 ; Cn # [24] .. A82D..A82F ; Cn # [3] .. A83A..A83F ; Cn # [6] .. A878..A87F ; Cn # [8] .. @@ -339,11 +335,10 @@ FB3D ; Cn # FB3F ; Cn # FB42 ; Cn # FB45 ; Cn # -FBC2..FBD2 ; Cn # [17] .. -FD40..FD4F ; Cn # [16] .. +FBC3..FBD2 ; Cn # [16] .. FD90..FD91 ; Cn # [2] .. -FDC8..FDEF ; Cn # [40] .. -FDFE..FDFF ; Cn # [2] .. +FDC8..FDCE ; Cn # [7] .. +FDD0..FDEF ; Cn # [32] .. FE1A..FE1F ; Cn # [6] .. FE53 ; Cn # FE67 ; Cn # @@ -387,10 +382,20 @@ FFFE..FFFF ; Cn # [2] .. 104FC..104FF ; Cn # [4] .. 10528..1052F ; Cn # [8] .. 10564..1056E ; Cn # [11] .. -10570..105FF ; Cn # [144] .. +1057B ; Cn # +1058B ; Cn # +10593 ; Cn # +10596 ; Cn # +105A2 ; Cn # +105B2 ; Cn # +105BA ; Cn # +105BD..105FF ; Cn # [67] .. 10737..1073F ; Cn # [9] .. 10756..1075F ; Cn # [10] .. -10768..107FF ; Cn # [152] .. +10768..1077F ; Cn # [24] .. +10786 ; Cn # +107B1 ; Cn # +107BB..107FF ; Cn # [69] .. 10806..10807 ; Cn # [2] .. 10809 ; Cn # 10836 ; Cn # @@ -433,12 +438,13 @@ FFFE..FFFF ; Cn # [2] .. 10EAE..10EAF ; Cn # [2] .. 10EB2..10EFF ; Cn # [78] .. 10F28..10F2F ; Cn # [8] .. -10F5A..10FAF ; Cn # [86] .. +10F5A..10F6F ; Cn # [22] .. +10F8A..10FAF ; Cn # [38] .. 10FCC..10FDF ; Cn # [20] .. 10FF7..10FFF ; Cn # [9] .. 1104E..11051 ; Cn # [4] .. -11070..1107E ; Cn # [15] .. -110C2..110CC ; Cn # [11] .. +11076..1107E ; Cn # [9] .. +110C3..110CC ; Cn # [10] .. 110CE..110CF ; Cn # [2] .. 110E9..110EF ; Cn # [7] .. 110FA..110FF ; Cn # [6] .. @@ -480,11 +486,11 @@ FFFE..FFFF ; Cn # [2] .. 11645..1164F ; Cn # [11] .. 1165A..1165F ; Cn # [6] .. 1166D..1167F ; Cn # [19] .. -116B9..116BF ; Cn # [7] .. +116BA..116BF ; Cn # [6] .. 116CA..116FF ; Cn # [54] .. 1171B..1171C ; Cn # [2] .. 1172C..1172F ; Cn # [4] .. -11740..117FF ; Cn # [192] .. +11747..117FF ; Cn # [185] .. 1183C..1189F ; Cn # [100] .. 118F3..118FE ; Cn # [12] .. 11907..11908 ; Cn # [2] .. @@ -499,7 +505,7 @@ FFFE..FFFF ; Cn # [2] .. 119D8..119D9 ; Cn # [2] .. 119E5..119FF ; Cn # [27] .. 11A48..11A4F ; Cn # [8] .. -11AA3..11ABF ; Cn # [29] .. +11AA3..11AAF ; Cn # [13] .. 11AF9..11BFF ; Cn # [263] .. 11C09 ; Cn # 11C37 ; Cn # @@ -527,14 +533,16 @@ FFFE..FFFF ; Cn # [2] .. 1239A..123FF ; Cn # [102] .. 1246F ; Cn # 12475..1247F ; Cn # [11] .. -12544..12FFF ; Cn # [2748] .. +12544..12F8F ; Cn # [2636] .. +12FF3..12FFF ; Cn # [13] .. 1342F ; Cn # 13439..143FF ; Cn # [4039] .. 14647..167FF ; Cn # [8633] .. 16A39..16A3F ; Cn # [7] .. 16A5F ; Cn # 16A6A..16A6D ; Cn # [4] .. -16A70..16ACF ; Cn # [96] .. +16ABF ; Cn # +16ACA..16ACF ; Cn # [6] .. 16AEE..16AEF ; Cn # [2] .. 16AF6..16AFF ; Cn # [10] .. 16B46..16B4F ; Cn # [10] .. @@ -550,8 +558,11 @@ FFFE..FFFF ; Cn # [2] .. 16FF2..16FFF ; Cn # [14] .. 187F8..187FF ; Cn # [8] .. 18CD6..18CFF ; Cn # [42] .. -18D09..1AFFF ; Cn # [8951] .. -1B11F..1B14F ; Cn # [49] .. +18D09..1AFEF ; Cn # [8935] .. +1AFF4 ; Cn # +1AFFC ; Cn # +1AFFF ; Cn # +1B123..1B14F ; Cn # [45] .. 1B153..1B163 ; Cn # [17] .. 1B168..1B16F ; Cn # [8] .. 1B2FC..1BBFF ; Cn # [2308] .. @@ -559,10 +570,13 @@ FFFE..FFFF ; Cn # [2] .. 1BC7D..1BC7F ; Cn # [3] .. 1BC89..1BC8F ; Cn # [7] .. 1BC9A..1BC9B ; Cn # [2] .. -1BCA4..1CFFF ; Cn # [4956] .. +1BCA4..1CEFF ; Cn # [4700] .. +1CF2E..1CF2F ; Cn # [2] .. +1CF47..1CF4F ; Cn # [9] .. +1CFC4..1CFFF ; Cn # [60] .. 1D0F6..1D0FF ; Cn # [10] .. 1D127..1D128 ; Cn # [2] .. -1D1E9..1D1FF ; Cn # [23] .. +1D1EB..1D1FF ; Cn # [21] .. 1D246..1D2DF ; Cn # [154] .. 1D2F4..1D2FF ; Cn # [12] .. 1D357..1D35F ; Cn # [9] .. @@ -589,7 +603,8 @@ FFFE..FFFF ; Cn # [2] .. 1D7CC..1D7CD ; Cn # [2] .. 1DA8C..1DA9A ; Cn # [15] .. 1DAA0 ; Cn # -1DAB0..1DFFF ; Cn # [1360] .. +1DAB0..1DEFF ; Cn # [1104] .. +1DF1F..1DFFF ; Cn # [225] .. 1E007 ; Cn # 1E019..1E01A ; Cn # [2] .. 1E022 ; Cn # @@ -598,9 +613,14 @@ FFFE..FFFF ; Cn # [2] .. 1E12D..1E12F ; Cn # [3] .. 1E13E..1E13F ; Cn # [2] .. 1E14A..1E14D ; Cn # [4] .. -1E150..1E2BF ; Cn # [368] .. +1E150..1E28F ; Cn # [320] .. +1E2AF..1E2BF ; Cn # [17] .. 1E2FA..1E2FE ; Cn # [5] .. -1E300..1E7FF ; Cn # [1280] .. +1E300..1E7DF ; Cn # [1248] .. +1E7E7 ; Cn # +1E7EC ; Cn # +1E7EF ; Cn # +1E7FF ; Cn # 1E8C5..1E8C6 ; Cn # [2] .. 1E8D7..1E8FF ; Cn # [41] .. 1E94C..1E94F ; Cn # [4] .. @@ -654,34 +674,35 @@ FFFE..FFFF ; Cn # [2] .. 1F249..1F24F ; Cn # [7] .. 1F252..1F25F ; Cn # [14] .. 1F266..1F2FF ; Cn # [154] .. -1F6D8..1F6DF ; Cn # [8] .. +1F6D8..1F6DC ; Cn # [5] .. 1F6ED..1F6EF ; Cn # [3] .. 1F6FD..1F6FF ; Cn # [3] .. 1F774..1F77F ; Cn # [12] .. 1F7D9..1F7DF ; Cn # [7] .. -1F7EC..1F7FF ; Cn # [20] .. +1F7EC..1F7EF ; Cn # [4] .. +1F7F1..1F7FF ; Cn # [15] .. 1F80C..1F80F ; Cn # [4] .. 1F848..1F84F ; Cn # [8] .. 1F85A..1F85F ; Cn # [6] .. 1F888..1F88F ; Cn # [8] .. 1F8AE..1F8AF ; Cn # [2] .. 1F8B2..1F8FF ; Cn # [78] .. -1F979 ; Cn # -1F9CC ; Cn # 1FA54..1FA5F ; Cn # [12] .. 1FA6E..1FA6F ; Cn # [2] .. 1FA75..1FA77 ; Cn # [3] .. -1FA7B..1FA7F ; Cn # [5] .. +1FA7D..1FA7F ; Cn # [3] .. 1FA87..1FA8F ; Cn # [9] .. -1FAA9..1FAAF ; Cn # [7] .. -1FAB7..1FABF ; Cn # [9] .. -1FAC3..1FACF ; Cn # [13] .. -1FAD7..1FAFF ; Cn # [41] .. +1FAAD..1FAAF ; Cn # [3] .. +1FABB..1FABF ; Cn # [5] .. +1FAC6..1FACF ; Cn # [10] .. +1FADA..1FADF ; Cn # [6] .. +1FAE8..1FAEF ; Cn # [8] .. +1FAF7..1FAFF ; Cn # [9] .. 1FB93 ; Cn # 1FBCB..1FBEF ; Cn # [37] .. 1FBFA..1FFFF ; Cn # [1030] .. -2A6DE..2A6FF ; Cn # [34] .. -2B735..2B73F ; Cn # [11] .. +2A6E0..2A6FF ; Cn # [32] .. +2B739..2B73F ; Cn # [7] .. 2B81E..2B81F ; Cn # [2] .. 2CEA2..2CEAF ; Cn # [14] .. 2EBE1..2F7FF ; Cn # [3103] .. @@ -693,7 +714,7 @@ E01F0..EFFFF ; Cn # [65040] .. FFFFE..FFFFF ; Cn # [2] .. 10FFFE..10FFFF; Cn # [2] .. -# Total code points: 830672 +# Total code points: 829834 # ================================================ @@ -1130,7 +1151,7 @@ FFFFE..FFFFF ; Cn # [2] .. 213E..213F ; Lu # [2] DOUBLE-STRUCK CAPITAL GAMMA..DOUBLE-STRUCK CAPITAL PI 2145 ; Lu # DOUBLE-STRUCK ITALIC CAPITAL D 2183 ; Lu # ROMAN NUMERAL REVERSED ONE HUNDRED -2C00..2C2E ; Lu # [47] GLAGOLITIC CAPITAL LETTER AZU..GLAGOLITIC CAPITAL LETTER LATINATE MYSLITE +2C00..2C2F ; Lu # [48] GLAGOLITIC CAPITAL LETTER AZU..GLAGOLITIC CAPITAL LETTER CAUDATE CHRIVI 2C60 ; Lu # LATIN CAPITAL LETTER L WITH DOUBLE BAR 2C62..2C64 ; Lu # [3] LATIN CAPITAL LETTER L WITH MIDDLE TILDE..LATIN CAPITAL LETTER R WITH TAIL 2C67 ; Lu # LATIN CAPITAL LETTER H WITH DESCENDER @@ -1295,13 +1316,21 @@ A7B8 ; Lu # LATIN CAPITAL LETTER U WITH STROKE A7BA ; Lu # LATIN CAPITAL LETTER GLOTTAL A A7BC ; Lu # LATIN CAPITAL LETTER GLOTTAL I A7BE ; Lu # LATIN CAPITAL LETTER GLOTTAL U +A7C0 ; Lu # LATIN CAPITAL LETTER OLD POLISH O A7C2 ; Lu # LATIN CAPITAL LETTER ANGLICANA W A7C4..A7C7 ; Lu # [4] LATIN CAPITAL LETTER C WITH PALATAL HOOK..LATIN CAPITAL LETTER D WITH SHORT STROKE OVERLAY A7C9 ; Lu # LATIN CAPITAL LETTER S WITH SHORT STROKE OVERLAY +A7D0 ; Lu # LATIN CAPITAL LETTER CLOSED INSULAR G +A7D6 ; Lu # LATIN CAPITAL LETTER MIDDLE SCOTS S +A7D8 ; Lu # LATIN CAPITAL LETTER SIGMOID S A7F5 ; Lu # LATIN CAPITAL LETTER REVERSED HALF H FF21..FF3A ; Lu # [26] FULLWIDTH LATIN CAPITAL LETTER A..FULLWIDTH LATIN CAPITAL LETTER Z 10400..10427 ; Lu # [40] DESERET CAPITAL LETTER LONG I..DESERET CAPITAL LETTER EW 104B0..104D3 ; Lu # [36] OSAGE CAPITAL LETTER A..OSAGE CAPITAL LETTER ZHA +10570..1057A ; Lu # [11] VITHKUQI CAPITAL LETTER A..VITHKUQI CAPITAL LETTER GA +1057C..1058A ; Lu # [15] VITHKUQI CAPITAL LETTER HA..VITHKUQI CAPITAL LETTER RE +1058C..10592 ; Lu # [7] VITHKUQI CAPITAL LETTER SE..VITHKUQI CAPITAL LETTER XE +10594..10595 ; Lu # [2] VITHKUQI CAPITAL LETTER Y..VITHKUQI CAPITAL LETTER ZE 10C80..10CB2 ; Lu # [51] OLD HUNGARIAN CAPITAL LETTER A..OLD HUNGARIAN CAPITAL LETTER US 118A0..118BF ; Lu # [32] WARANG CITI CAPITAL LETTER NGAA..WARANG CITI CAPITAL LETTER VIYO 16E40..16E5F ; Lu # [32] MEDEFAIDRIN CAPITAL LETTER M..MEDEFAIDRIN CAPITAL LETTER Y @@ -1338,7 +1367,7 @@ FF21..FF3A ; Lu # [26] FULLWIDTH LATIN CAPITAL LETTER A..FULLWIDTH LATIN CAP 1D7CA ; Lu # MATHEMATICAL BOLD CAPITAL DIGAMMA 1E900..1E921 ; Lu # [34] ADLAM CAPITAL LETTER ALIF..ADLAM CAPITAL LETTER SHA -# Total code points: 1791 +# Total code points: 1831 # ================================================ @@ -1775,7 +1804,7 @@ FF21..FF3A ; Lu # [26] FULLWIDTH LATIN CAPITAL LETTER A..FULLWIDTH LATIN CAP 2146..2149 ; Ll # [4] DOUBLE-STRUCK ITALIC SMALL D..DOUBLE-STRUCK ITALIC SMALL J 214E ; Ll # TURNED SMALL F 2184 ; Ll # LATIN SMALL LETTER REVERSED C -2C30..2C5E ; Ll # [47] GLAGOLITIC SMALL LETTER AZU..GLAGOLITIC SMALL LETTER LATINATE MYSLITE +2C30..2C5F ; Ll # [48] GLAGOLITIC SMALL LETTER AZU..GLAGOLITIC SMALL LETTER CAUDATE CHRIVI 2C61 ; Ll # LATIN SMALL LETTER L WITH DOUBLE BAR 2C65..2C66 ; Ll # [2] LATIN SMALL LETTER A WITH STROKE..LATIN SMALL LETTER T WITH DIAGONAL STROKE 2C68 ; Ll # LATIN SMALL LETTER H WITH DESCENDER @@ -1944,9 +1973,15 @@ A7B9 ; Ll # LATIN SMALL LETTER U WITH STROKE A7BB ; Ll # LATIN SMALL LETTER GLOTTAL A A7BD ; Ll # LATIN SMALL LETTER GLOTTAL I A7BF ; Ll # LATIN SMALL LETTER GLOTTAL U +A7C1 ; Ll # LATIN SMALL LETTER OLD POLISH O A7C3 ; Ll # LATIN SMALL LETTER ANGLICANA W A7C8 ; Ll # LATIN SMALL LETTER D WITH SHORT STROKE OVERLAY A7CA ; Ll # LATIN SMALL LETTER S WITH SHORT STROKE OVERLAY +A7D1 ; Ll # LATIN SMALL LETTER CLOSED INSULAR G +A7D3 ; Ll # LATIN SMALL LETTER DOUBLE THORN +A7D5 ; Ll # LATIN SMALL LETTER DOUBLE WYNN +A7D7 ; Ll # LATIN SMALL LETTER MIDDLE SCOTS S +A7D9 ; Ll # LATIN SMALL LETTER SIGMOID S A7F6 ; Ll # LATIN SMALL LETTER REVERSED HALF H A7FA ; Ll # LATIN LETTER SMALL CAPITAL TURNED M AB30..AB5A ; Ll # [43] LATIN SMALL LETTER BARRED ALPHA..LATIN SMALL LETTER Y WITH SHORT RIGHT LEG @@ -1957,6 +1992,10 @@ FB13..FB17 ; Ll # [5] ARMENIAN SMALL LIGATURE MEN NOW..ARMENIAN SMALL LIGAT FF41..FF5A ; Ll # [26] FULLWIDTH LATIN SMALL LETTER A..FULLWIDTH LATIN SMALL LETTER Z 10428..1044F ; Ll # [40] DESERET SMALL LETTER LONG I..DESERET SMALL LETTER EW 104D8..104FB ; Ll # [36] OSAGE SMALL LETTER A..OSAGE SMALL LETTER ZHA +10597..105A1 ; Ll # [11] VITHKUQI SMALL LETTER A..VITHKUQI SMALL LETTER GA +105A3..105B1 ; Ll # [15] VITHKUQI SMALL LETTER HA..VITHKUQI SMALL LETTER RE +105B3..105B9 ; Ll # [7] VITHKUQI SMALL LETTER SE..VITHKUQI SMALL LETTER XE +105BB..105BC ; Ll # [2] VITHKUQI SMALL LETTER Y..VITHKUQI SMALL LETTER ZE 10CC0..10CF2 ; Ll # [51] OLD HUNGARIAN SMALL LETTER A..OLD HUNGARIAN SMALL LETTER US 118C0..118DF ; Ll # [32] WARANG CITI SMALL LETTER NGAA..WARANG CITI SMALL LETTER VIYO 16E60..16E7F ; Ll # [32] MEDEFAIDRIN SMALL LETTER M..MEDEFAIDRIN SMALL LETTER Y @@ -1988,9 +2027,11 @@ FF41..FF5A ; Ll # [26] FULLWIDTH LATIN SMALL LETTER A..FULLWIDTH LATIN SMALL 1D7AA..1D7C2 ; Ll # [25] MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL ALPHA..MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL OMEGA 1D7C4..1D7C9 ; Ll # [6] MATHEMATICAL SANS-SERIF BOLD ITALIC EPSILON SYMBOL..MATHEMATICAL SANS-SERIF BOLD ITALIC PI SYMBOL 1D7CB ; Ll # MATHEMATICAL BOLD SMALL DIGAMMA +1DF00..1DF09 ; Ll # [10] LATIN SMALL LETTER FENG DIGRAPH WITH TRILL..LATIN SMALL LETTER T WITH HOOK AND RETROFLEX HOOK +1DF0B..1DF1E ; Ll # [20] LATIN SMALL LETTER ESH WITH DOUBLE BAR..LATIN SMALL LETTER S WITH CURL 1E922..1E943 ; Ll # [34] ADLAM SMALL LETTER ALIF..ADLAM SMALL LETTER SHA -# Total code points: 2155 +# Total code points: 2227 # ================================================ @@ -2028,6 +2069,7 @@ FF41..FF5A ; Ll # [26] FULLWIDTH LATIN SMALL LETTER A..FULLWIDTH LATIN SMALL 081A ; Lm # SAMARITAN MODIFIER LETTER EPENTHETIC YUT 0824 ; Lm # SAMARITAN MODIFIER LETTER SHORT A 0828 ; Lm # SAMARITAN MODIFIER LETTER I +08C9 ; Lm # ARABIC SMALL FARSI YEH 0971 ; Lm # DEVANAGARI SIGN HIGH SPACING DOT 0E46 ; Lm # THAI CHARACTER MAIYAMOK 0EC6 ; Lm # LAO KO LA @@ -2058,6 +2100,7 @@ A69C..A69D ; Lm # [2] MODIFIER LETTER CYRILLIC HARD SIGN..MODIFIER LETTER C A717..A71F ; Lm # [9] MODIFIER LETTER DOT VERTICAL BAR..MODIFIER LETTER LOW INVERTED EXCLAMATION MARK A770 ; Lm # MODIFIER LETTER US A788 ; Lm # MODIFIER LETTER LOW CIRCUMFLEX ACCENT +A7F2..A7F4 ; Lm # [3] MODIFIER LETTER CAPITAL C..MODIFIER LETTER CAPITAL Q A7F8..A7F9 ; Lm # [2] MODIFIER LETTER CAPITAL H WITH STROKE..MODIFIER LETTER SMALL LIGATURE OE A9CF ; Lm # JAVANESE PANGRANGKEP A9E6 ; Lm # MYANMAR MODIFIER LETTER SHAN REDUPLICATION @@ -2068,14 +2111,20 @@ AB5C..AB5F ; Lm # [4] MODIFIER LETTER SMALL HENG..MODIFIER LETTER SMALL U W AB69 ; Lm # MODIFIER LETTER SMALL TURNED W FF70 ; Lm # HALFWIDTH KATAKANA-HIRAGANA PROLONGED SOUND MARK FF9E..FF9F ; Lm # [2] HALFWIDTH KATAKANA VOICED SOUND MARK..HALFWIDTH KATAKANA SEMI-VOICED SOUND MARK +10780..10785 ; Lm # [6] MODIFIER LETTER SMALL CAPITAL AA..MODIFIER LETTER SMALL B WITH HOOK +10787..107B0 ; Lm # [42] MODIFIER LETTER SMALL DZ DIGRAPH..MODIFIER LETTER SMALL V WITH RIGHT HOOK +107B2..107BA ; Lm # [9] MODIFIER LETTER SMALL CAPITAL Y..MODIFIER LETTER SMALL S WITH CURL 16B40..16B43 ; Lm # [4] PAHAWH HMONG SIGN VOS SEEV..PAHAWH HMONG SIGN IB YAM 16F93..16F9F ; Lm # [13] MIAO LETTER TONE-2..MIAO LETTER REFORMED TONE-8 16FE0..16FE1 ; Lm # [2] TANGUT ITERATION MARK..NUSHU ITERATION MARK 16FE3 ; Lm # OLD CHINESE ITERATION MARK +1AFF0..1AFF3 ; Lm # [4] KATAKANA LETTER MINNAN TONE-2..KATAKANA LETTER MINNAN TONE-5 +1AFF5..1AFFB ; Lm # [7] KATAKANA LETTER MINNAN TONE-7..KATAKANA LETTER MINNAN NASALIZED TONE-5 +1AFFD..1AFFE ; Lm # [2] KATAKANA LETTER MINNAN NASALIZED TONE-7..KATAKANA LETTER MINNAN NASALIZED TONE-8 1E137..1E13D ; Lm # [7] NYIAKENG PUACHUE HMONG SIGN FOR PERSON..NYIAKENG PUACHUE HMONG SYLLABLE LENGTHENER 1E94B ; Lm # ADLAM NASALIZATION MARK -# Total code points: 260 +# Total code points: 334 # ================================================ @@ -2104,8 +2153,9 @@ FF9E..FF9F ; Lm # [2] HALFWIDTH KATAKANA VOICED SOUND MARK..HALFWIDTH KATAK 0800..0815 ; Lo # [22] SAMARITAN LETTER ALAF..SAMARITAN LETTER TAAF 0840..0858 ; Lo # [25] MANDAIC LETTER HALQA..MANDAIC LETTER AIN 0860..086A ; Lo # [11] SYRIAC LETTER MALAYALAM NGA..SYRIAC LETTER MALAYALAM SSA -08A0..08B4 ; Lo # [21] ARABIC LETTER BEH WITH SMALL V BELOW..ARABIC LETTER KAF WITH DOT BELOW -08B6..08C7 ; Lo # [18] ARABIC LETTER BEH WITH SMALL MEEM ABOVE..ARABIC LETTER LAM WITH SMALL ARABIC LETTER TAH ABOVE +0870..0887 ; Lo # [24] ARABIC LETTER ALEF WITH ATTACHED FATHA..ARABIC BASELINE ROUND DOT +0889..088E ; Lo # [6] ARABIC LETTER NOON WITH INVERTED SMALL V..ARABIC VERTICAL TAIL +08A0..08C8 ; Lo # [41] ARABIC LETTER BEH WITH SMALL V BELOW..ARABIC LETTER GRAF 0904..0939 ; Lo # [54] DEVANAGARI LETTER SHORT A..DEVANAGARI LETTER HA 093D ; Lo # DEVANAGARI SIGN AVAGRAHA 0950 ; Lo # DEVANAGARI OM @@ -2170,6 +2220,7 @@ FF9E..FF9F ; Lm # [2] HALFWIDTH KATAKANA VOICED SOUND MARK..HALFWIDTH KATAK 0C2A..0C39 ; Lo # [16] TELUGU LETTER PA..TELUGU LETTER HA 0C3D ; Lo # TELUGU SIGN AVAGRAHA 0C58..0C5A ; Lo # [3] TELUGU LETTER TSA..TELUGU LETTER RRRA +0C5D ; Lo # TELUGU LETTER NAKAARA POLLU 0C60..0C61 ; Lo # [2] TELUGU LETTER VOCALIC RR..TELUGU LETTER VOCALIC LL 0C80 ; Lo # KANNADA SIGN SPACING CANDRABINDU 0C85..0C8C ; Lo # [8] KANNADA LETTER A..KANNADA LETTER VOCALIC L @@ -2178,7 +2229,7 @@ FF9E..FF9F ; Lm # [2] HALFWIDTH KATAKANA VOICED SOUND MARK..HALFWIDTH KATAK 0CAA..0CB3 ; Lo # [10] KANNADA LETTER PA..KANNADA LETTER LLA 0CB5..0CB9 ; Lo # [5] KANNADA LETTER VA..KANNADA LETTER HA 0CBD ; Lo # KANNADA SIGN AVAGRAHA -0CDE ; Lo # KANNADA LETTER FA +0CDD..0CDE ; Lo # [2] KANNADA LETTER NAKAARA POLLU..KANNADA LETTER FA 0CE0..0CE1 ; Lo # [2] KANNADA LETTER VOCALIC RR..KANNADA LETTER VOCALIC LL 0CF1..0CF2 ; Lo # [2] KANNADA SIGN JIHVAMULIYA..KANNADA SIGN UPADHMANIYA 0D04..0D0C ; Lo # [9] MALAYALAM LETTER VEDIC ANUSVARA..MALAYALAM LETTER VOCALIC L @@ -2242,9 +2293,8 @@ FF9E..FF9F ; Lm # [2] HALFWIDTH KATAKANA VOICED SOUND MARK..HALFWIDTH KATAK 1681..169A ; Lo # [26] OGHAM LETTER BEITH..OGHAM LETTER PEITH 16A0..16EA ; Lo # [75] RUNIC LETTER FEHU FEOH FE F..RUNIC LETTER X 16F1..16F8 ; Lo # [8] RUNIC LETTER K..RUNIC LETTER FRANKS CASKET AESC -1700..170C ; Lo # [13] TAGALOG LETTER A..TAGALOG LETTER YA -170E..1711 ; Lo # [4] TAGALOG LETTER LA..TAGALOG LETTER HA -1720..1731 ; Lo # [18] HANUNOO LETTER A..HANUNOO LETTER HA +1700..1711 ; Lo # [18] TAGALOG LETTER A..TAGALOG LETTER HA +171F..1731 ; Lo # [19] TAGALOG LETTER ARCHAIC RA..HANUNOO LETTER HA 1740..1751 ; Lo # [18] BUHID LETTER A..BUHID LETTER HA 1760..176C ; Lo # [13] TAGBANWA LETTER A..TAGBANWA LETTER YA 176E..1770 ; Lo # [3] TAGBANWA LETTER LA..TAGBANWA LETTER SA @@ -2264,7 +2314,7 @@ FF9E..FF9F ; Lm # [2] HALFWIDTH KATAKANA VOICED SOUND MARK..HALFWIDTH KATAK 1A00..1A16 ; Lo # [23] BUGINESE LETTER KA..BUGINESE LETTER HA 1A20..1A54 ; Lo # [53] TAI THAM LETTER HIGH KA..TAI THAM LETTER GREAT SA 1B05..1B33 ; Lo # [47] BALINESE LETTER AKARA..BALINESE LETTER HA -1B45..1B4B ; Lo # [7] BALINESE LETTER KAF SASAK..BALINESE LETTER ASYURA SASAK +1B45..1B4C ; Lo # [8] BALINESE LETTER KAF SASAK..BALINESE LETTER ARCHAIC JNYA 1B83..1BA0 ; Lo # [30] SUNDANESE LETTER A..SUNDANESE LETTER HA 1BAE..1BAF ; Lo # [2] SUNDANESE LETTER KHA..SUNDANESE LETTER SYA 1BBA..1BE5 ; Lo # [44] SUNDANESE AVAGRAHA..BATAK LETTER U @@ -2297,8 +2347,7 @@ FF9E..FF9F ; Lm # [2] HALFWIDTH KATAKANA VOICED SOUND MARK..HALFWIDTH KATAK 31A0..31BF ; Lo # [32] BOPOMOFO LETTER BU..BOPOMOFO LETTER AH 31F0..31FF ; Lo # [16] KATAKANA LETTER SMALL KU..KATAKANA LETTER SMALL RO 3400..4DBF ; Lo # [6592] CJK UNIFIED IDEOGRAPH-3400..CJK UNIFIED IDEOGRAPH-4DBF -4E00..9FFC ; Lo # [20989] CJK UNIFIED IDEOGRAPH-4E00..CJK UNIFIED IDEOGRAPH-9FFC -A000..A014 ; Lo # [21] YI SYLLABLE IT..YI SYLLABLE E +4E00..A014 ; Lo # [21013] CJK UNIFIED IDEOGRAPH-4E00..YI SYLLABLE E A016..A48C ; Lo # [1143] YI SYLLABLE BIT..YI SYLLABLE YYR A4D0..A4F7 ; Lo # [40] LISU LETTER BA..LISU LETTER OE A500..A60B ; Lo # [268] VAI SYLLABLE EE..VAI SYLLABLE NG @@ -2426,9 +2475,12 @@ FFDA..FFDC ; Lo # [3] HALFWIDTH HANGUL LETTER EU..HALFWIDTH HANGUL LETTER I 10F00..10F1C ; Lo # [29] OLD SOGDIAN LETTER ALEPH..OLD SOGDIAN LETTER FINAL TAW WITH VERTICAL TAIL 10F27 ; Lo # OLD SOGDIAN LIGATURE AYIN-DALETH 10F30..10F45 ; Lo # [22] SOGDIAN LETTER ALEPH..SOGDIAN INDEPENDENT SHIN +10F70..10F81 ; Lo # [18] OLD UYGHUR LETTER ALEPH..OLD UYGHUR LETTER LESH 10FB0..10FC4 ; Lo # [21] CHORASMIAN LETTER ALEPH..CHORASMIAN LETTER TAW 10FE0..10FF6 ; Lo # [23] ELYMAIC LETTER ALEPH..ELYMAIC LIGATURE ZAYIN-YODH 11003..11037 ; Lo # [53] BRAHMI SIGN JIHVAMULIYA..BRAHMI LETTER OLD TAMIL NNNA +11071..11072 ; Lo # [2] BRAHMI LETTER OLD TAMIL SHORT E..BRAHMI LETTER OLD TAMIL SHORT O +11075 ; Lo # BRAHMI LETTER OLD TAMIL LLA 11083..110AF ; Lo # [45] KAITHI LETTER A..KAITHI LETTER HA 110D0..110E8 ; Lo # [25] SORA SOMPENG LETTER SAH..SORA SOMPENG LETTER MAE 11103..11126 ; Lo # [36] CHAKMA LETTER AA..CHAKMA LETTER HAA @@ -2470,6 +2522,7 @@ FFDA..FFDC ; Lo # [3] HALFWIDTH HANGUL LETTER EU..HALFWIDTH HANGUL LETTER I 11680..116AA ; Lo # [43] TAKRI LETTER A..TAKRI LETTER RRA 116B8 ; Lo # TAKRI LETTER ARCHAIC KHA 11700..1171A ; Lo # [27] AHOM LETTER KA..AHOM LETTER ALTERNATE BA +11740..11746 ; Lo # [7] AHOM LETTER CA..AHOM LETTER LLA 11800..1182B ; Lo # [44] DOGRA LETTER A..DOGRA LETTER RRA 118FF..11906 ; Lo # [8] WARANG CITI OM..DIVES AKURU LETTER E 11909 ; Lo # DIVES AKURU LETTER O @@ -2488,7 +2541,7 @@ FFDA..FFDC ; Lo # [3] HALFWIDTH HANGUL LETTER EU..HALFWIDTH HANGUL LETTER I 11A50 ; Lo # SOYOMBO LETTER A 11A5C..11A89 ; Lo # [46] SOYOMBO LETTER KA..SOYOMBO CLUSTER-INITIAL LETTER SA 11A9D ; Lo # SOYOMBO MARK PLUTA -11AC0..11AF8 ; Lo # [57] PAU CIN HAU LETTER PA..PAU CIN HAU GLOTTAL STOP FINAL +11AB0..11AF8 ; Lo # [73] CANADIAN SYLLABICS NATTILIK HI..PAU CIN HAU GLOTTAL STOP FINAL 11C00..11C08 ; Lo # [9] BHAIKSUKI LETTER A..BHAIKSUKI LETTER VOCALIC L 11C0A..11C2E ; Lo # [37] BHAIKSUKI LETTER E..BHAIKSUKI LETTER HA 11C40 ; Lo # BHAIKSUKI SIGN AVAGRAHA @@ -2505,10 +2558,12 @@ FFDA..FFDC ; Lo # [3] HALFWIDTH HANGUL LETTER EU..HALFWIDTH HANGUL LETTER I 11FB0 ; Lo # LISU LETTER YHA 12000..12399 ; Lo # [922] CUNEIFORM SIGN A..CUNEIFORM SIGN U U 12480..12543 ; Lo # [196] CUNEIFORM SIGN AB TIMES NUN TENU..CUNEIFORM SIGN ZU5 TIMES THREE DISH TENU +12F90..12FF0 ; Lo # [97] CYPRO-MINOAN SIGN CM001..CYPRO-MINOAN SIGN CM114 13000..1342E ; Lo # [1071] EGYPTIAN HIEROGLYPH A001..EGYPTIAN HIEROGLYPH AA032 14400..14646 ; Lo # [583] ANATOLIAN HIEROGLYPH A001..ANATOLIAN HIEROGLYPH A530 16800..16A38 ; Lo # [569] BAMUM LETTER PHASE-A NGKUE MFON..BAMUM LETTER PHASE-F VUEQ 16A40..16A5E ; Lo # [31] MRO LETTER TA..MRO LETTER TEK +16A70..16ABE ; Lo # [79] TANGSA LETTER OZ..TANGSA LETTER ZA 16AD0..16AED ; Lo # [30] BASSA VAH LETTER ENNI..BASSA VAH LETTER I 16B00..16B2F ; Lo # [48] PAHAWH HMONG VOWEL KEEB..PAHAWH HMONG CONSONANT CAU 16B63..16B77 ; Lo # [21] PAHAWH HMONG SIGN VOS LUB..PAHAWH HMONG SIGN CIM NRES TOS @@ -2518,7 +2573,7 @@ FFDA..FFDC ; Lo # [3] HALFWIDTH HANGUL LETTER EU..HALFWIDTH HANGUL LETTER I 17000..187F7 ; Lo # [6136] TANGUT IDEOGRAPH-17000..TANGUT IDEOGRAPH-187F7 18800..18CD5 ; Lo # [1238] TANGUT COMPONENT-001..KHITAN SMALL SCRIPT CHARACTER-18CD5 18D00..18D08 ; Lo # [9] TANGUT IDEOGRAPH-18D00..TANGUT IDEOGRAPH-18D08 -1B000..1B11E ; Lo # [287] KATAKANA LETTER ARCHAIC E..HENTAIGANA LETTER N-MU-MO-2 +1B000..1B122 ; Lo # [291] KATAKANA LETTER ARCHAIC E..KATAKANA LETTER ARCHAIC WU 1B150..1B152 ; Lo # [3] HIRAGANA LETTER SMALL WI..HIRAGANA LETTER SMALL WO 1B164..1B167 ; Lo # [4] KATAKANA LETTER SMALL WI..KATAKANA LETTER SMALL N 1B170..1B2FB ; Lo # [396] NUSHU CHARACTER-1B170..NUSHU CHARACTER-1B2FB @@ -2526,9 +2581,15 @@ FFDA..FFDC ; Lo # [3] HALFWIDTH HANGUL LETTER EU..HALFWIDTH HANGUL LETTER I 1BC70..1BC7C ; Lo # [13] DUPLOYAN AFFIX LEFT HORIZONTAL SECANT..DUPLOYAN AFFIX ATTACHED TANGENT HOOK 1BC80..1BC88 ; Lo # [9] DUPLOYAN AFFIX HIGH ACUTE..DUPLOYAN AFFIX HIGH VERTICAL 1BC90..1BC99 ; Lo # [10] DUPLOYAN AFFIX LOW ACUTE..DUPLOYAN AFFIX LOW ARROW +1DF0A ; Lo # LATIN LETTER RETROFLEX CLICK WITH RETROFLEX HOOK 1E100..1E12C ; Lo # [45] NYIAKENG PUACHUE HMONG LETTER MA..NYIAKENG PUACHUE HMONG LETTER W 1E14E ; Lo # NYIAKENG PUACHUE HMONG LOGOGRAM NYAJ +1E290..1E2AD ; Lo # [30] TOTO LETTER PA..TOTO LETTER A 1E2C0..1E2EB ; Lo # [44] WANCHO LETTER AA..WANCHO LETTER YIH +1E7E0..1E7E6 ; Lo # [7] ETHIOPIC SYLLABLE HHYA..ETHIOPIC SYLLABLE HHYO +1E7E8..1E7EB ; Lo # [4] ETHIOPIC SYLLABLE GURAGE HHWA..ETHIOPIC SYLLABLE HHWE +1E7ED..1E7EE ; Lo # [2] ETHIOPIC SYLLABLE GURAGE MWI..ETHIOPIC SYLLABLE GURAGE MWEE +1E7F0..1E7FE ; Lo # [15] ETHIOPIC SYLLABLE GURAGE QWI..ETHIOPIC SYLLABLE GURAGE PWEE 1E800..1E8C4 ; Lo # [197] MENDE KIKAKUI SYLLABLE M001 KI..MENDE KIKAKUI SYLLABLE M060 NYON 1EE00..1EE03 ; Lo # [4] ARABIC MATHEMATICAL ALEF..ARABIC MATHEMATICAL DAL 1EE05..1EE1F ; Lo # [27] ARABIC MATHEMATICAL WAW..ARABIC MATHEMATICAL DOTLESS QAF @@ -2563,15 +2624,15 @@ FFDA..FFDC ; Lo # [3] HALFWIDTH HANGUL LETTER EU..HALFWIDTH HANGUL LETTER I 1EEA1..1EEA3 ; Lo # [3] ARABIC MATHEMATICAL DOUBLE-STRUCK BEH..ARABIC MATHEMATICAL DOUBLE-STRUCK DAL 1EEA5..1EEA9 ; Lo # [5] ARABIC MATHEMATICAL DOUBLE-STRUCK WAW..ARABIC MATHEMATICAL DOUBLE-STRUCK YEH 1EEAB..1EEBB ; Lo # [17] ARABIC MATHEMATICAL DOUBLE-STRUCK LAM..ARABIC MATHEMATICAL DOUBLE-STRUCK GHAIN -20000..2A6DD ; Lo # [42718] CJK UNIFIED IDEOGRAPH-20000..CJK UNIFIED IDEOGRAPH-2A6DD -2A700..2B734 ; Lo # [4149] CJK UNIFIED IDEOGRAPH-2A700..CJK UNIFIED IDEOGRAPH-2B734 +20000..2A6DF ; Lo # [42720] CJK UNIFIED IDEOGRAPH-20000..CJK UNIFIED IDEOGRAPH-2A6DF +2A700..2B738 ; Lo # [4153] CJK UNIFIED IDEOGRAPH-2A700..CJK UNIFIED IDEOGRAPH-2B738 2B740..2B81D ; Lo # [222] CJK UNIFIED IDEOGRAPH-2B740..CJK UNIFIED IDEOGRAPH-2B81D 2B820..2CEA1 ; Lo # [5762] CJK UNIFIED IDEOGRAPH-2B820..CJK UNIFIED IDEOGRAPH-2CEA1 2CEB0..2EBE0 ; Lo # [7473] CJK UNIFIED IDEOGRAPH-2CEB0..CJK UNIFIED IDEOGRAPH-2EBE0 2F800..2FA1D ; Lo # [542] CJK COMPATIBILITY IDEOGRAPH-2F800..CJK COMPATIBILITY IDEOGRAPH-2FA1D 30000..3134A ; Lo # [4939] CJK UNIFIED IDEOGRAPH-30000..CJK UNIFIED IDEOGRAPH-3134A -# Total code points: 127004 +# Total code points: 127333 # ================================================ @@ -2601,7 +2662,8 @@ FFDA..FFDC ; Lo # [3] HALFWIDTH HANGUL LETTER EU..HALFWIDTH HANGUL LETTER I 0825..0827 ; Mn # [3] SAMARITAN VOWEL SIGN SHORT A..SAMARITAN VOWEL SIGN U 0829..082D ; Mn # [5] SAMARITAN VOWEL SIGN LONG I..SAMARITAN MARK NEQUDAA 0859..085B ; Mn # [3] MANDAIC AFFRICATION MARK..MANDAIC GEMINATION MARK -08D3..08E1 ; Mn # [15] ARABIC SMALL LOW WAW..ARABIC SMALL HIGH SIGN SAFHA +0898..089F ; Mn # [8] ARABIC SMALL HIGH WORD AL-JUZ..ARABIC HALF MADDA OVER MADDA +08CA..08E1 ; Mn # [24] ARABIC SMALL HIGH FARSI YEH..ARABIC SMALL HIGH SIGN SAFHA 08E3..0902 ; Mn # [32] ARABIC TURNED DAMMA BELOW..DEVANAGARI SIGN ANUSVARA 093A ; Mn # DEVANAGARI VOWEL SIGN OE 093C ; Mn # DEVANAGARI SIGN NUKTA @@ -2642,6 +2704,7 @@ FFDA..FFDC ; Lo # [3] HALFWIDTH HANGUL LETTER EU..HALFWIDTH HANGUL LETTER I 0BCD ; Mn # TAMIL SIGN VIRAMA 0C00 ; Mn # TELUGU SIGN COMBINING CANDRABINDU ABOVE 0C04 ; Mn # TELUGU SIGN COMBINING ANUSVARA ABOVE +0C3C ; Mn # TELUGU SIGN NUKTA 0C3E..0C40 ; Mn # [3] TELUGU VOWEL SIGN AA..TELUGU VOWEL SIGN II 0C46..0C48 ; Mn # [3] TELUGU VOWEL SIGN E..TELUGU VOWEL SIGN AI 0C4A..0C4D ; Mn # [4] TELUGU VOWEL SIGN O..TELUGU SIGN VIRAMA @@ -2691,7 +2754,7 @@ FFDA..FFDC ; Lo # [3] HALFWIDTH HANGUL LETTER EU..HALFWIDTH HANGUL LETTER I 109D ; Mn # MYANMAR VOWEL SIGN AITON AI 135D..135F ; Mn # [3] ETHIOPIC COMBINING GEMINATION AND VOWEL LENGTH MARK..ETHIOPIC COMBINING GEMINATION MARK 1712..1714 ; Mn # [3] TAGALOG VOWEL SIGN I..TAGALOG SIGN VIRAMA -1732..1734 ; Mn # [3] HANUNOO VOWEL SIGN I..HANUNOO SIGN PAMUDPOD +1732..1733 ; Mn # [2] HANUNOO VOWEL SIGN I..HANUNOO VOWEL SIGN U 1752..1753 ; Mn # [2] BUHID VOWEL SIGN I..BUHID VOWEL SIGN U 1772..1773 ; Mn # [2] TAGBANWA VOWEL SIGN I..TAGBANWA VOWEL SIGN U 17B4..17B5 ; Mn # [2] KHMER VOWEL INHERENT AQ..KHMER VOWEL INHERENT AA @@ -2700,6 +2763,7 @@ FFDA..FFDC ; Lo # [3] HALFWIDTH HANGUL LETTER EU..HALFWIDTH HANGUL LETTER I 17C9..17D3 ; Mn # [11] KHMER SIGN MUUSIKATOAN..KHMER SIGN BATHAMASAT 17DD ; Mn # KHMER SIGN ATTHACAN 180B..180D ; Mn # [3] MONGOLIAN FREE VARIATION SELECTOR ONE..MONGOLIAN FREE VARIATION SELECTOR THREE +180F ; Mn # MONGOLIAN FREE VARIATION SELECTOR FOUR 1885..1886 ; Mn # [2] MONGOLIAN LETTER ALI GALI BALUDA..MONGOLIAN LETTER ALI GALI THREE BALUDA 18A9 ; Mn # MONGOLIAN LETTER ALI GALI DAGALGA 1920..1922 ; Mn # [3] LIMBU VOWEL SIGN A..LIMBU VOWEL SIGN U @@ -2716,7 +2780,7 @@ FFDA..FFDC ; Lo # [3] HALFWIDTH HANGUL LETTER EU..HALFWIDTH HANGUL LETTER I 1A73..1A7C ; Mn # [10] TAI THAM VOWEL SIGN OA ABOVE..TAI THAM SIGN KHUEN-LUE KARAN 1A7F ; Mn # TAI THAM COMBINING CRYPTOGRAMMIC DOT 1AB0..1ABD ; Mn # [14] COMBINING DOUBLED CIRCUMFLEX ACCENT..COMBINING PARENTHESES BELOW -1ABF..1AC0 ; Mn # [2] COMBINING LATIN SMALL LETTER W BELOW..COMBINING LATIN SMALL LETTER TURNED W BELOW +1ABF..1ACE ; Mn # [16] COMBINING LATIN SMALL LETTER W BELOW..COMBINING LATIN SMALL LETTER INSULAR T 1B00..1B03 ; Mn # [4] BALINESE SIGN ULU RICEM..BALINESE SIGN SURANG 1B34 ; Mn # BALINESE SIGN REREKAN 1B36..1B3A ; Mn # [5] BALINESE VOWEL SIGN ULU..BALINESE VOWEL SIGN RA REPA @@ -2739,8 +2803,7 @@ FFDA..FFDC ; Lo # [3] HALFWIDTH HANGUL LETTER EU..HALFWIDTH HANGUL LETTER I 1CED ; Mn # VEDIC SIGN TIRYAK 1CF4 ; Mn # VEDIC TONE CANDRA ABOVE 1CF8..1CF9 ; Mn # [2] VEDIC TONE RING ABOVE..VEDIC TONE DOUBLE RING ABOVE -1DC0..1DF9 ; Mn # [58] COMBINING DOTTED GRAVE ACCENT..COMBINING WIDE INVERTED BRIDGE BELOW -1DFB..1DFF ; Mn # [5] COMBINING DELETION MARK..COMBINING RIGHT ARROWHEAD AND DOWN ARROWHEAD BELOW +1DC0..1DFF ; Mn # [64] COMBINING DOTTED GRAVE ACCENT..COMBINING RIGHT ARROWHEAD AND DOWN ARROWHEAD BELOW 20D0..20DC ; Mn # [13] COMBINING LEFT HARPOON ABOVE..COMBINING FOUR DOTS ABOVE 20E1 ; Mn # COMBINING LEFT RIGHT ARROW ABOVE 20E5..20F0 ; Mn # [12] COMBINING REVERSE SOLIDUS OVERLAY..COMBINING ASTERISK ABOVE @@ -2799,11 +2862,15 @@ FE20..FE2F ; Mn # [16] COMBINING LIGATURE LEFT HALF..COMBINING CYRILLIC TITL 10D24..10D27 ; Mn # [4] HANIFI ROHINGYA SIGN HARBAHAY..HANIFI ROHINGYA SIGN TASSI 10EAB..10EAC ; Mn # [2] YEZIDI COMBINING HAMZA MARK..YEZIDI COMBINING MADDA MARK 10F46..10F50 ; Mn # [11] SOGDIAN COMBINING DOT BELOW..SOGDIAN COMBINING STROKE BELOW +10F82..10F85 ; Mn # [4] OLD UYGHUR COMBINING DOT ABOVE..OLD UYGHUR COMBINING TWO DOTS BELOW 11001 ; Mn # BRAHMI SIGN ANUSVARA 11038..11046 ; Mn # [15] BRAHMI VOWEL SIGN AA..BRAHMI VIRAMA +11070 ; Mn # BRAHMI SIGN OLD TAMIL VIRAMA +11073..11074 ; Mn # [2] BRAHMI VOWEL SIGN OLD TAMIL SHORT E..BRAHMI VOWEL SIGN OLD TAMIL SHORT O 1107F..11081 ; Mn # [3] BRAHMI NUMBER JOINER..KAITHI SIGN ANUSVARA 110B3..110B6 ; Mn # [4] KAITHI VOWEL SIGN U..KAITHI VOWEL SIGN AI 110B9..110BA ; Mn # [2] KAITHI SIGN VIRAMA..KAITHI SIGN NUKTA +110C2 ; Mn # KAITHI VOWEL SIGN VOCALIC R 11100..11102 ; Mn # [3] CHAKMA SIGN CANDRABINDU..CHAKMA SIGN VISARGA 11127..1112B ; Mn # [5] CHAKMA VOWEL SIGN A..CHAKMA VOWEL SIGN UU 1112D..11134 ; Mn # [8] CHAKMA VOWEL SIGN AI..CHAKMA MAAYYAA @@ -2883,6 +2950,8 @@ FE20..FE2F ; Mn # [16] COMBINING LIGATURE LEFT HALF..COMBINING CYRILLIC TITL 16F8F..16F92 ; Mn # [4] MIAO TONE RIGHT..MIAO TONE BELOW 16FE4 ; Mn # KHITAN SMALL SCRIPT FILLER 1BC9D..1BC9E ; Mn # [2] DUPLOYAN THICK LETTER SELECTOR..DUPLOYAN DOUBLE MARK +1CF00..1CF2D ; Mn # [46] ZNAMENNY COMBINING MARK GORAZDO NIZKO S KRYZHEM ON LEFT..ZNAMENNY COMBINING MARK KRYZH ON LEFT +1CF30..1CF46 ; Mn # [23] ZNAMENNY COMBINING TONAL RANGE MARK MRACHNO..ZNAMENNY PRIZNAK MODIFIER ROG 1D167..1D169 ; Mn # [3] MUSICAL SYMBOL COMBINING TREMOLO-1..MUSICAL SYMBOL COMBINING TREMOLO-3 1D17B..1D182 ; Mn # [8] MUSICAL SYMBOL COMBINING ACCENT..MUSICAL SYMBOL COMBINING LOURE 1D185..1D18B ; Mn # [7] MUSICAL SYMBOL COMBINING DOIT..MUSICAL SYMBOL COMBINING TRIPLE TONGUE @@ -2900,12 +2969,13 @@ FE20..FE2F ; Mn # [16] COMBINING LIGATURE LEFT HALF..COMBINING CYRILLIC TITL 1E023..1E024 ; Mn # [2] COMBINING GLAGOLITIC LETTER YU..COMBINING GLAGOLITIC LETTER SMALL YUS 1E026..1E02A ; Mn # [5] COMBINING GLAGOLITIC LETTER YO..COMBINING GLAGOLITIC LETTER FITA 1E130..1E136 ; Mn # [7] NYIAKENG PUACHUE HMONG TONE-B..NYIAKENG PUACHUE HMONG TONE-D +1E2AE ; Mn # TOTO SIGN RISING TONE 1E2EC..1E2EF ; Mn # [4] WANCHO TONE TUP..WANCHO TONE KOINI 1E8D0..1E8D6 ; Mn # [7] MENDE KIKAKUI COMBINING NUMBER TEENS..MENDE KIKAKUI COMBINING NUMBER MILLIONS 1E944..1E94A ; Mn # [7] ADLAM ALIF LENGTHENER..ADLAM NUKTA E0100..E01EF ; Mn # [240] VARIATION SELECTOR-17..VARIATION SELECTOR-256 -# Total code points: 1839 +# Total code points: 1950 # ================================================ @@ -2980,6 +3050,8 @@ A670..A672 ; Me # [3] COMBINING CYRILLIC TEN MILLIONS SIGN..COMBINING CYRIL 1087..108C ; Mc # [6] MYANMAR SIGN SHAN TONE-2..MYANMAR SIGN SHAN COUNCIL TONE-3 108F ; Mc # MYANMAR SIGN RUMAI PALAUNG TONE-5 109A..109C ; Mc # [3] MYANMAR SIGN KHAMTI TONE-1..MYANMAR VOWEL SIGN AITON A +1715 ; Mc # TAGALOG SIGN PAMUDPOD +1734 ; Mc # HANUNOO SIGN PAMUDPOD 17B6 ; Mc # KHMER VOWEL SIGN AA 17BE..17C5 ; Mc # [8] KHMER VOWEL SIGN OE..KHMER VOWEL SIGN AU 17C7..17C8 ; Mc # [2] KHMER SIGN REAHMUK..KHMER SIGN YUUKALEAPINTU @@ -3099,7 +3171,7 @@ ABEC ; Mc # MEETEI MAYEK LUM IYEK 1D165..1D166 ; Mc # [2] MUSICAL SYMBOL COMBINING STEM..MUSICAL SYMBOL COMBINING SPRECHGESANG STEM 1D16D..1D172 ; Mc # [6] MUSICAL SYMBOL COMBINING AUGMENTATION DOT..MUSICAL SYMBOL COMBINING FLAG-5 -# Total code points: 443 +# Total code points: 445 # ================================================ @@ -3160,6 +3232,7 @@ FF10..FF19 ; Nd # [10] FULLWIDTH DIGIT ZERO..FULLWIDTH DIGIT NINE 11D50..11D59 ; Nd # [10] MASARAM GONDI DIGIT ZERO..MASARAM GONDI DIGIT NINE 11DA0..11DA9 ; Nd # [10] GUNJALA GONDI DIGIT ZERO..GUNJALA GONDI DIGIT NINE 16A60..16A69 ; Nd # [10] MRO DIGIT ZERO..MRO DIGIT NINE +16AC0..16AC9 ; Nd # [10] TANGSA DIGIT ZERO..TANGSA DIGIT NINE 16B50..16B59 ; Nd # [10] PAHAWH HMONG DIGIT ZERO..PAHAWH HMONG DIGIT NINE 1D7CE..1D7FF ; Nd # [50] MATHEMATICAL BOLD DIGIT ZERO..MATHEMATICAL MONOSPACE DIGIT NINE 1E140..1E149 ; Nd # [10] NYIAKENG PUACHUE HMONG DIGIT ZERO..NYIAKENG PUACHUE HMONG DIGIT NINE @@ -3167,7 +3240,7 @@ FF10..FF19 ; Nd # [10] FULLWIDTH DIGIT ZERO..FULLWIDTH DIGIT NINE 1E950..1E959 ; Nd # [10] ADLAM DIGIT ZERO..ADLAM DIGIT NINE 1FBF0..1FBF9 ; Nd # [10] SEGMENTED DIGIT ZERO..SEGMENTED DIGIT NINE -# Total code points: 650 +# Total code points: 660 # ================================================ @@ -3314,6 +3387,7 @@ A830..A835 ; No # [6] NORTH INDIC FRACTION ONE QUARTER..NORTH INDIC FRACTIO 061C ; Cf # ARABIC LETTER MARK 06DD ; Cf # ARABIC END OF AYAH 070F ; Cf # SYRIAC ABBREVIATION MARK +0890..0891 ; Cf # [2] ARABIC POUND MARK ABOVE..ARABIC PIASTRE MARK ABOVE 08E2 ; Cf # ARABIC DISPUTED END OF AYAH 180E ; Cf # MONGOLIAN VOWEL SEPARATOR 200B..200F ; Cf # [5] ZERO WIDTH SPACE..RIGHT-TO-LEFT MARK @@ -3330,7 +3404,7 @@ FFF9..FFFB ; Cf # [3] INTERLINEAR ANNOTATION ANCHOR..INTERLINEAR ANNOTATION E0001 ; Cf # LANGUAGE TAG E0020..E007F ; Cf # [96] TAG SPACE..CANCEL TAG -# Total code points: 161 +# Total code points: 163 # ================================================ @@ -3364,6 +3438,7 @@ D800..DFFF ; Cs # [2048] .. 2E1A ; Pd # HYPHEN WITH DIAERESIS 2E3A..2E3B ; Pd # [2] TWO-EM DASH..THREE-EM DASH 2E40 ; Pd # DOUBLE HYPHEN +2E5D ; Pd # OBLIQUE HYPHEN 301C ; Pd # WAVE DASH 3030 ; Pd # WAVY DASH 30A0 ; Pd # KATAKANA-HIRAGANA DOUBLE HYPHEN @@ -3373,7 +3448,7 @@ FE63 ; Pd # SMALL HYPHEN-MINUS FF0D ; Pd # FULLWIDTH HYPHEN-MINUS 10EAD ; Pd # YEZIDI HYPHENATION MARK -# Total code points: 25 +# Total code points: 26 # ================================================ @@ -3425,6 +3500,10 @@ FF0D ; Pd # FULLWIDTH HYPHEN-MINUS 2E26 ; Ps # LEFT SIDEWAYS U BRACKET 2E28 ; Ps # LEFT DOUBLE PARENTHESIS 2E42 ; Ps # DOUBLE LOW-REVERSED-9 QUOTATION MARK +2E55 ; Ps # LEFT SQUARE BRACKET WITH STROKE +2E57 ; Ps # LEFT SQUARE BRACKET WITH DOUBLE STROKE +2E59 ; Ps # TOP HALF LEFT PARENTHESIS +2E5B ; Ps # BOTTOM HALF LEFT PARENTHESIS 3008 ; Ps # LEFT ANGLE BRACKET 300A ; Ps # LEFT DOUBLE ANGLE BRACKET 300C ; Ps # LEFT CORNER BRACKET @@ -3455,7 +3534,7 @@ FF5B ; Ps # FULLWIDTH LEFT CURLY BRACKET FF5F ; Ps # FULLWIDTH LEFT WHITE PARENTHESIS FF62 ; Ps # HALFWIDTH LEFT CORNER BRACKET -# Total code points: 75 +# Total code points: 79 # ================================================ @@ -3504,6 +3583,10 @@ FF62 ; Ps # HALFWIDTH LEFT CORNER BRACKET 2E25 ; Pe # BOTTOM RIGHT HALF BRACKET 2E27 ; Pe # RIGHT SIDEWAYS U BRACKET 2E29 ; Pe # RIGHT DOUBLE PARENTHESIS +2E56 ; Pe # RIGHT SQUARE BRACKET WITH STROKE +2E58 ; Pe # RIGHT SQUARE BRACKET WITH DOUBLE STROKE +2E5A ; Pe # TOP HALF RIGHT PARENTHESIS +2E5C ; Pe # BOTTOM HALF RIGHT PARENTHESIS 3009 ; Pe # RIGHT ANGLE BRACKET 300B ; Pe # RIGHT DOUBLE ANGLE BRACKET 300D ; Pe # RIGHT CORNER BRACKET @@ -3534,7 +3617,7 @@ FF5D ; Pe # FULLWIDTH RIGHT CURLY BRACKET FF60 ; Pe # FULLWIDTH RIGHT WHITE PARENTHESIS FF63 ; Pe # HALFWIDTH RIGHT CORNER BRACKET -# Total code points: 73 +# Total code points: 77 # ================================================ @@ -3576,7 +3659,7 @@ FF3F ; Pc # FULLWIDTH LOW LINE 0609..060A ; Po # [2] ARABIC-INDIC PER MILLE SIGN..ARABIC-INDIC PER TEN THOUSAND SIGN 060C..060D ; Po # [2] ARABIC COMMA..ARABIC DATE SEPARATOR 061B ; Po # ARABIC SEMICOLON -061E..061F ; Po # [2] ARABIC TRIPLE DOT PUNCTUATION MARK..ARABIC QUESTION MARK +061D..061F ; Po # [3] ARABIC END OF TEXT MARK..ARABIC QUESTION MARK 066A..066D ; Po # [4] ARABIC PERCENT SIGN..ARABIC FIVE POINTED STAR 06D4 ; Po # ARABIC FULL STOP 0700..070D ; Po # [14] SYRIAC END OF PARAGRAPH..SYRIAC HARKLEAN ASTERISCUS @@ -3613,6 +3696,7 @@ FF3F ; Pc # FULLWIDTH LOW LINE 1AA0..1AA6 ; Po # [7] TAI THAM SIGN WIANG..TAI THAM SIGN REVERSED ROTATED RANA 1AA8..1AAD ; Po # [6] TAI THAM SIGN KAAN..TAI THAM SIGN CAANG 1B5A..1B60 ; Po # [7] BALINESE PANTI..BALINESE PAMENENG +1B7D..1B7E ; Po # [2] BALINESE PANTI LANTANG..BALINESE PAMADA LANTANG 1BFC..1BFF ; Po # [4] BATAK SYMBOL BINDU NA METEK..BATAK SYMBOL BINDU PANGOLAT 1C3B..1C3F ; Po # [5] LEPCHA PUNCTUATION TA-ROL..LEPCHA PUNCTUATION TSHOOK 1C7E..1C7F ; Po # [2] OL CHIKI PUNCTUATION MUCAAD..OL CHIKI PUNCTUATION DOUBLE MUCAAD @@ -3641,7 +3725,7 @@ FF3F ; Pc # FULLWIDTH LOW LINE 2E3C..2E3F ; Po # [4] STENOGRAPHIC FULL STOP..CAPITULUM 2E41 ; Po # REVERSED COMMA 2E43..2E4F ; Po # [13] DASH WITH LEFT UPTURN..CORNISH VERSE DIVIDER -2E52 ; Po # TIRONIAN SIGN CAPITAL ET +2E52..2E54 ; Po # [3] TIRONIAN SIGN CAPITAL ET..MEDIEVAL QUESTION MARK 3001..3003 ; Po # [3] IDEOGRAPHIC COMMA..DITTO MARK 303D ; Po # PART ALTERNATION MARK 30FB ; Po # KATAKANA MIDDLE DOT @@ -3695,6 +3779,7 @@ FF64..FF65 ; Po # [2] HALFWIDTH IDEOGRAPHIC COMMA..HALFWIDTH KATAKANA MIDDL 10B39..10B3F ; Po # [7] AVESTAN ABBREVIATION MARK..LARGE ONE RING OVER TWO RINGS PUNCTUATION 10B99..10B9C ; Po # [4] PSALTER PAHLAVI SECTION MARK..PSALTER PAHLAVI FOUR DOTS WITH DOT 10F55..10F59 ; Po # [5] SOGDIAN PUNCTUATION TWO VERTICAL BARS..SOGDIAN PUNCTUATION HALF CIRCLE WITH DOT +10F86..10F89 ; Po # [4] OLD UYGHUR PUNCTUATION BAR..OLD UYGHUR PUNCTUATION FOUR DOTS 11047..1104D ; Po # [7] BRAHMI DANDA..BRAHMI PUNCTUATION LOTUS 110BB..110BC ; Po # [2] KAITHI ABBREVIATION SIGN..KAITHI ENUMERATION SIGN 110BE..110C1 ; Po # [4] KAITHI SECTION MARK..KAITHI DOUBLE DANDA @@ -3713,6 +3798,7 @@ FF64..FF65 ; Po # [2] HALFWIDTH IDEOGRAPHIC COMMA..HALFWIDTH KATAKANA MIDDL 115C1..115D7 ; Po # [23] SIDDHAM SIGN SIDDHAM..SIDDHAM SECTION MARK WITH CIRCLES AND FOUR ENCLOSURES 11641..11643 ; Po # [3] MODI DANDA..MODI ABBREVIATION SIGN 11660..1166C ; Po # [13] MONGOLIAN BIRGA WITH ORNAMENT..MONGOLIAN TURNED SWIRL BIRGA WITH DOUBLE ORNAMENT +116B9 ; Po # TAKRI ABBREVIATION SIGN 1173C..1173E ; Po # [3] AHOM SIGN SMALL SECTION..AHOM SIGN RULAI 1183B ; Po # DOGRA ABBREVIATION SIGN 11944..11946 ; Po # [3] DIVES AKURU DOUBLE DANDA..DIVES AKURU END OF TEXT MARK @@ -3725,6 +3811,7 @@ FF64..FF65 ; Po # [2] HALFWIDTH IDEOGRAPHIC COMMA..HALFWIDTH KATAKANA MIDDL 11EF7..11EF8 ; Po # [2] MAKASAR PASSIMBANG..MAKASAR END OF SECTION 11FFF ; Po # TAMIL PUNCTUATION END OF TEXT 12470..12474 ; Po # [5] CUNEIFORM PUNCTUATION SIGN OLD ASSYRIAN WORD DIVIDER..CUNEIFORM PUNCTUATION SIGN DIAGONAL QUADCOLON +12FF1..12FF2 ; Po # [2] CYPRO-MINOAN SIGN CM301..CYPRO-MINOAN SIGN CM302 16A6E..16A6F ; Po # [2] MRO DANDA..MRO DOUBLE DANDA 16AF5 ; Po # BASSA VAH FULL STOP 16B37..16B3B ; Po # [5] PAHAWH HMONG SIGN VOS THOM..PAHAWH HMONG SIGN VOS FEEM @@ -3735,7 +3822,7 @@ FF64..FF65 ; Po # [2] HALFWIDTH IDEOGRAPHIC COMMA..HALFWIDTH KATAKANA MIDDL 1DA87..1DA8B ; Po # [5] SIGNWRITING COMMA..SIGNWRITING PARENTHESIS 1E95E..1E95F ; Po # [2] ADLAM INITIAL EXCLAMATION MARK..ADLAM INITIAL QUESTION MARK -# Total code points: 593 +# Total code points: 605 # ================================================ @@ -3823,7 +3910,7 @@ FFE9..FFEC ; Sm # [4] HALFWIDTH LEFTWARDS ARROW..HALFWIDTH DOWNWARDS ARROW 0BF9 ; Sc # TAMIL RUPEE SIGN 0E3F ; Sc # THAI CURRENCY SYMBOL BAHT 17DB ; Sc # KHMER CURRENCY SYMBOL RIEL -20A0..20BF ; Sc # [32] EURO-CURRENCY SIGN..BITCOIN SIGN +20A0..20C0 ; Sc # [33] EURO-CURRENCY SIGN..SOM SIGN A838 ; Sc # NORTH INDIC RUPEE MARK FDFC ; Sc # RIAL SIGN FE69 ; Sc # SMALL DOLLAR SIGN @@ -3834,7 +3921,7 @@ FFE5..FFE6 ; Sc # [2] FULLWIDTH YEN SIGN..FULLWIDTH WON SIGN 1E2FF ; Sc # WANCHO NGUN SIGN 1ECB0 ; Sc # INDIC SIYAQ RUPEE MARK -# Total code points: 62 +# Total code points: 63 # ================================================ @@ -3853,6 +3940,7 @@ FFE5..FFE6 ; Sc # [2] FULLWIDTH YEN SIGN..FULLWIDTH WON SIGN 02EF..02FF ; Sk # [17] MODIFIER LETTER LOW DOWN ARROWHEAD..MODIFIER LETTER LOW LEFT ARROW 0375 ; Sk # GREEK LOWER NUMERAL SIGN 0384..0385 ; Sk # [2] GREEK TONOS..GREEK DIALYTIKA TONOS +0888 ; Sk # ARABIC RAISED ROUND DOT 1FBD ; Sk # GREEK KORONIS 1FBF..1FC1 ; Sk # [3] GREEK PSILI..GREEK DIALYTIKA AND PERISPOMENI 1FCD..1FCF ; Sk # [3] GREEK PSILI AND VARIA..GREEK PSILI AND PERISPOMENI @@ -3865,13 +3953,13 @@ A720..A721 ; Sk # [2] MODIFIER LETTER STRESS AND HIGH TONE..MODIFIER LETTER A789..A78A ; Sk # [2] MODIFIER LETTER COLON..MODIFIER LETTER SHORT EQUALS SIGN AB5B ; Sk # MODIFIER BREVE WITH INVERTED BREVE AB6A..AB6B ; Sk # [2] MODIFIER LETTER LEFT TACK..MODIFIER LETTER RIGHT TACK -FBB2..FBC1 ; Sk # [16] ARABIC SYMBOL DOT ABOVE..ARABIC SYMBOL SMALL TAH BELOW +FBB2..FBC2 ; Sk # [17] ARABIC SYMBOL DOT ABOVE..ARABIC SYMBOL WASLA ABOVE FF3E ; Sk # FULLWIDTH CIRCUMFLEX ACCENT FF40 ; Sk # FULLWIDTH GRAVE ACCENT FFE3 ; Sk # FULLWIDTH MACRON 1F3FB..1F3FF ; Sk # [5] EMOJI MODIFIER FITZPATRICK TYPE-1-2..EMOJI MODIFIER FITZPATRICK TYPE-6 -# Total code points: 123 +# Total code points: 125 # ================================================ @@ -3984,7 +4072,9 @@ A828..A82B ; So # [4] SYLOTI NAGRI POETRY MARK-1..SYLOTI NAGRI POETRY MARK- A836..A837 ; So # [2] NORTH INDIC QUARTER MARK..NORTH INDIC PLACEHOLDER MARK A839 ; So # NORTH INDIC QUANTITY MARK AA77..AA79 ; So # [3] MYANMAR SYMBOL AITON EXCLAMATION..MYANMAR SYMBOL AITON TWO -FDFD ; So # ARABIC LIGATURE BISMILLAH AR-RAHMAN AR-RAHEEM +FD40..FD4F ; So # [16] ARABIC LIGATURE RAHIMAHU ALLAAH..ARABIC LIGATURE RAHIMAHUM ALLAAH +FDCF ; So # ARABIC LIGATURE SALAAMUHU ALAYNAA +FDFD..FDFF ; So # [3] ARABIC LIGATURE BISMILLAH AR-RAHMAN AR-RAHEEM..ARABIC LIGATURE AZZA WA JALL FFE4 ; So # FULLWIDTH BROKEN BAR FFE8 ; So # HALFWIDTH FORMS LIGHT VERTICAL FFED..FFEE ; So # [2] HALFWIDTH BLACK SQUARE..HALFWIDTH WHITE CIRCLE @@ -4003,13 +4093,14 @@ FFFC..FFFD ; So # [2] OBJECT REPLACEMENT CHARACTER..REPLACEMENT CHARACTER 16B3C..16B3F ; So # [4] PAHAWH HMONG SIGN XYEEM NTXIV..PAHAWH HMONG SIGN XYEEM FAIB 16B45 ; So # PAHAWH HMONG SIGN CIM TSOV ROG 1BC9C ; So # DUPLOYAN SIGN O WITH CROSS +1CF50..1CFC3 ; So # [116] ZNAMENNY NEUME KRYUK..ZNAMENNY NEUME PAUK 1D000..1D0F5 ; So # [246] BYZANTINE MUSICAL SYMBOL PSILI..BYZANTINE MUSICAL SYMBOL GORGON NEO KATO 1D100..1D126 ; So # [39] MUSICAL SYMBOL SINGLE BARLINE..MUSICAL SYMBOL DRUM CLEF-2 1D129..1D164 ; So # [60] MUSICAL SYMBOL MULTIPLE MEASURE REST..MUSICAL SYMBOL ONE HUNDRED TWENTY-EIGHTH NOTE 1D16A..1D16C ; So # [3] MUSICAL SYMBOL FINGERED TREMOLO-1..MUSICAL SYMBOL FINGERED TREMOLO-3 1D183..1D184 ; So # [2] MUSICAL SYMBOL ARPEGGIATO UP..MUSICAL SYMBOL ARPEGGIATO DOWN 1D18C..1D1A9 ; So # [30] MUSICAL SYMBOL RINFORZANDO..MUSICAL SYMBOL DEGREE SLASH -1D1AE..1D1E8 ; So # [59] MUSICAL SYMBOL PEDAL MARK..MUSICAL SYMBOL KIEVAN FLAT SIGN +1D1AE..1D1EA ; So # [61] MUSICAL SYMBOL PEDAL MARK..MUSICAL SYMBOL KORON 1D200..1D241 ; So # [66] GREEK VOCAL NOTATION SYMBOL-1..GREEK INSTRUMENTAL NOTATION SYMBOL-54 1D245 ; So # GREEK MUSICAL LEIMMA 1D300..1D356 ; So # [87] MONOGRAM FOR EARTH..TETRAGRAM FOR FOSTERING @@ -4035,32 +4126,33 @@ FFFC..FFFD ; So # [2] OBJECT REPLACEMENT CHARACTER..REPLACEMENT CHARACTER 1F260..1F265 ; So # [6] ROUNDED SYMBOL FOR FU..ROUNDED SYMBOL FOR CAI 1F300..1F3FA ; So # [251] CYCLONE..AMPHORA 1F400..1F6D7 ; So # [728] RAT..ELEVATOR -1F6E0..1F6EC ; So # [13] HAMMER AND WRENCH..AIRPLANE ARRIVING +1F6DD..1F6EC ; So # [16] PLAYGROUND SLIDE..AIRPLANE ARRIVING 1F6F0..1F6FC ; So # [13] SATELLITE..ROLLER SKATE 1F700..1F773 ; So # [116] ALCHEMICAL SYMBOL FOR QUINTESSENCE..ALCHEMICAL SYMBOL FOR HALF OUNCE 1F780..1F7D8 ; So # [89] BLACK LEFT-POINTING ISOSCELES RIGHT TRIANGLE..NEGATIVE CIRCLED SQUARE 1F7E0..1F7EB ; So # [12] LARGE ORANGE CIRCLE..LARGE BROWN SQUARE +1F7F0 ; So # HEAVY EQUALS SIGN 1F800..1F80B ; So # [12] LEFTWARDS ARROW WITH SMALL TRIANGLE ARROWHEAD..DOWNWARDS ARROW WITH LARGE TRIANGLE ARROWHEAD 1F810..1F847 ; So # [56] LEFTWARDS ARROW WITH SMALL EQUILATERAL ARROWHEAD..DOWNWARDS HEAVY ARROW 1F850..1F859 ; So # [10] LEFTWARDS SANS-SERIF ARROW..UP DOWN SANS-SERIF ARROW 1F860..1F887 ; So # [40] WIDE-HEADED LEFTWARDS LIGHT BARB ARROW..WIDE-HEADED SOUTH WEST VERY HEAVY BARB ARROW 1F890..1F8AD ; So # [30] LEFTWARDS TRIANGLE ARROWHEAD..WHITE ARROW SHAFT WIDTH TWO THIRDS 1F8B0..1F8B1 ; So # [2] ARROW POINTING UPWARDS THEN NORTH WEST..ARROW POINTING RIGHTWARDS THEN CURVING SOUTH WEST -1F900..1F978 ; So # [121] CIRCLED CROSS FORMEE WITH FOUR DOTS..DISGUISED FACE -1F97A..1F9CB ; So # [82] FACE WITH PLEADING EYES..BUBBLE TEA -1F9CD..1FA53 ; So # [135] STANDING PERSON..BLACK CHESS KNIGHT-BISHOP +1F900..1FA53 ; So # [340] CIRCLED CROSS FORMEE WITH FOUR DOTS..BLACK CHESS KNIGHT-BISHOP 1FA60..1FA6D ; So # [14] XIANGQI RED GENERAL..XIANGQI BLACK SOLDIER 1FA70..1FA74 ; So # [5] BALLET SHOES..THONG SANDAL -1FA78..1FA7A ; So # [3] DROP OF BLOOD..STETHOSCOPE +1FA78..1FA7C ; So # [5] DROP OF BLOOD..CRUTCH 1FA80..1FA86 ; So # [7] YO-YO..NESTING DOLLS -1FA90..1FAA8 ; So # [25] RINGED PLANET..ROCK -1FAB0..1FAB6 ; So # [7] FLY..FEATHER -1FAC0..1FAC2 ; So # [3] ANATOMICAL HEART..PEOPLE HUGGING -1FAD0..1FAD6 ; So # [7] BLUEBERRIES..TEAPOT +1FA90..1FAAC ; So # [29] RINGED PLANET..HAMSA +1FAB0..1FABA ; So # [11] FLY..NEST WITH EGGS +1FAC0..1FAC5 ; So # [6] ANATOMICAL HEART..PERSON WITH CROWN +1FAD0..1FAD9 ; So # [10] BLUEBERRIES..JAR +1FAE0..1FAE7 ; So # [8] MELTING FACE..BUBBLES +1FAF0..1FAF6 ; So # [7] HAND WITH INDEX FINGER AND THUMB CROSSED..HEART HANDS 1FB00..1FB92 ; So # [147] BLOCK SEXTANT-1..UPPER HALF INVERSE MEDIUM SHADE AND LOWER HALF BLOCK 1FB94..1FBCA ; So # [55] LEFT HALF INVERSE MEDIUM SHADE AND RIGHT HALF BLOCK..WHITE UP-POINTING CHEVRON -# Total code points: 6431 +# Total code points: 6605 # ================================================ diff --git a/gnu/usr.bin/perl/lib/unicore/extracted/DJoinGroup.txt b/gnu/usr.bin/perl/lib/unicore/extracted/DJoinGroup.txt index 0888bf01811..da46dd0a428 100644 --- a/gnu/usr.bin/perl/lib/unicore/extracted/DJoinGroup.txt +++ b/gnu/usr.bin/perl/lib/unicore/extracted/DJoinGroup.txt @@ -1,6 +1,6 @@ -# DerivedJoiningGroup-13.0.0.txt -# Date: 2019-09-08, 23:31:07 GMT -# © 2019 Unicode®, Inc. +# DerivedJoiningGroup-14.0.0.txt +# Date: 2021-05-11, 21:19:35 GMT +# © 2021 Unicode®, Inc. # Unicode and the Unicode Logo are registered trademarks of Unicode, Inc. in the U.S. and other countries. # For terms of use, see http://www.unicode.org/terms_of_use.html # @@ -41,8 +41,9 @@ 0671..0673 ; Alef # Lo [3] ARABIC LETTER ALEF WASLA..ARABIC LETTER ALEF WITH WAVY HAMZA BELOW 0675 ; Alef # Lo ARABIC LETTER HIGH HAMZA ALEF 0773..0774 ; Alef # Lo [2] ARABIC LETTER ALEF WITH EXTENDED ARABIC-INDIC DIGIT TWO ABOVE..ARABIC LETTER ALEF WITH EXTENDED ARABIC-INDIC DIGIT THREE ABOVE +0870..0882 ; Alef # Lo [19] ARABIC LETTER ALEF WITH ATTACHED FATHA..ARABIC LETTER ALEF WITH ATTACHED LEFT HAMZA -# Total code points: 10 +# Total code points: 29 # ================================================ @@ -110,10 +111,12 @@ 06AB ; Gaf # Lo ARABIC LETTER KAF WITH RING 06AF..06B4 ; Gaf # Lo [6] ARABIC LETTER GAF..ARABIC LETTER GAF WITH THREE DOTS ABOVE 0762..0764 ; Gaf # Lo [3] ARABIC LETTER KEHEH WITH DOT ABOVE..ARABIC LETTER KEHEH WITH THREE DOTS POINTING UPWARDS BELOW +088D ; Gaf # Lo ARABIC LETTER KEHEH WITH TWO DOTS VERTICALLY BELOW 08B0 ; Gaf # Lo ARABIC LETTER GAF WITH INVERTED STROKE 08C2 ; Gaf # Lo ARABIC LETTER KEHEH WITH SMALL V +08C8 ; Gaf # Lo ARABIC LETTER GRAF -# Total code points: 15 +# Total code points: 17 # ================================================ @@ -131,11 +134,12 @@ 076E..076F ; Hah # Lo [2] ARABIC LETTER HAH WITH SMALL ARABIC LETTER TAH BELOW..ARABIC LETTER HAH WITH SMALL ARABIC LETTER TAH AND TWO DOTS 0772 ; Hah # Lo ARABIC LETTER HAH WITH SMALL ARABIC LETTER TAH ABOVE 077C ; Hah # Lo ARABIC LETTER HAH WITH EXTENDED ARABIC-INDIC DIGIT FOUR BELOW +088A ; Hah # Lo ARABIC LETTER HAH WITH INVERTED SMALL V BELOW 08A2 ; Hah # Lo ARABIC LETTER JEEM WITH TWO DOTS ABOVE 08C1 ; Hah # Lo ARABIC LETTER TCHEH WITH SMALL V 08C5..08C6 ; Hah # Lo [2] ARABIC LETTER JEEM WITH THREE DOTS ABOVE..ARABIC LETTER JEEM WITH THREE DOTS BELOW -# Total code points: 21 +# Total code points: 22 # ================================================ @@ -224,8 +228,9 @@ 0646 ; Noon # Lo ARABIC LETTER NOON 06B9..06BC ; Noon # Lo [4] ARABIC LETTER NOON WITH DOT BELOW..ARABIC LETTER NOON WITH RING 0767..0769 ; Noon # Lo [3] ARABIC LETTER NOON WITH TWO DOTS BELOW..ARABIC LETTER NOON WITH SMALL V +0889 ; Noon # Lo ARABIC LETTER NOON WITH INVERTED SMALL V -# Total code points: 8 +# Total code points: 9 # ================================================ @@ -245,8 +250,9 @@ 066F ; Qaf # Lo ARABIC LETTER DOTLESS QAF 06A7..06A8 ; Qaf # Lo [2] ARABIC LETTER QAF WITH DOT ABOVE..ARABIC LETTER QAF WITH THREE DOTS ABOVE 08A5 ; Qaf # Lo ARABIC LETTER QAF WITH DOT BELOW +08B5 ; Qaf # Lo ARABIC LETTER QAF WITH DOT BELOW AND NO DOTS ABOVE -# Total code points: 5 +# Total code points: 6 # ================================================ @@ -323,9 +329,10 @@ 0637..0638 ; Tah # Lo [2] ARABIC LETTER TAH..ARABIC LETTER ZAH 069F ; Tah # Lo ARABIC LETTER TAH WITH THREE DOTS ABOVE +088B..088C ; Tah # Lo [2] ARABIC LETTER TAH WITH DOT BELOW..ARABIC LETTER TAH WITH THREE DOTS BELOW 08A3 ; Tah # Lo ARABIC LETTER TAH WITH TWO DOTS ABOVE -# Total code points: 4 +# Total code points: 6 # ================================================ @@ -723,4 +730,16 @@ # Total code points: 4 +# ================================================ + +0886 ; Thin_Yeh # Lo ARABIC LETTER THIN YEH + +# Total code points: 1 + +# ================================================ + +088E ; Vertical_Tail # Lo ARABIC VERTICAL TAIL + +# Total code points: 1 + # EOF diff --git a/gnu/usr.bin/perl/lib/unicore/extracted/DJoinType.txt b/gnu/usr.bin/perl/lib/unicore/extracted/DJoinType.txt index 57229cc7361..7c36d028a3a 100644 --- a/gnu/usr.bin/perl/lib/unicore/extracted/DJoinType.txt +++ b/gnu/usr.bin/perl/lib/unicore/extracted/DJoinType.txt @@ -1,6 +1,6 @@ -# DerivedJoiningType-13.0.0.txt -# Date: 2020-01-21, 07:36:28 GMT -# © 2020 Unicode®, Inc. +# DerivedJoiningType-14.0.0.txt +# Date: 2021-05-28, 21:49:06 GMT +# © 2021 Unicode®, Inc. # Unicode and the Unicode Logo are registered trademarks of Unicode, Inc. in the U.S. and other countries. # For terms of use, see http://www.unicode.org/terms_of_use.html # @@ -22,10 +22,11 @@ 0640 ; C # Lm ARABIC TATWEEL 07FA ; C # Lm NKO LAJANYALAN +0883..0885 ; C # Lo [3] ARABIC TATWEEL WITH OVERSTRUCK HAMZA..ARABIC TATWEEL WITH TWO DOTS BELOW 180A ; C # Po MONGOLIAN NIRUGU 200D ; C # Cf ZERO WIDTH JOINER -# Total code points: 4 +# Total code points: 7 # ================================================ @@ -67,11 +68,12 @@ 0860 ; D # Lo SYRIAC LETTER MALAYALAM NGA 0862..0865 ; D # Lo [4] SYRIAC LETTER MALAYALAM NYA..SYRIAC LETTER MALAYALAM NNNA 0868 ; D # Lo SYRIAC LETTER MALAYALAM LLA +0886 ; D # Lo ARABIC LETTER THIN YEH +0889..088D ; D # Lo [5] ARABIC LETTER NOON WITH INVERTED SMALL V..ARABIC LETTER KEHEH WITH TWO DOTS VERTICALLY BELOW 08A0..08A9 ; D # Lo [10] ARABIC LETTER BEH WITH SMALL V BELOW..ARABIC LETTER YEH WITH TWO DOTS BELOW AND DOT ABOVE 08AF..08B0 ; D # Lo [2] ARABIC LETTER SAD WITH THREE DOTS BELOW..ARABIC LETTER GAF WITH INVERTED STROKE -08B3..08B4 ; D # Lo [2] ARABIC LETTER AIN WITH THREE DOTS BELOW..ARABIC LETTER KAF WITH DOT BELOW -08B6..08B8 ; D # Lo [3] ARABIC LETTER BEH WITH SMALL MEEM ABOVE..ARABIC LETTER TEH WITH SMALL TEH ABOVE -08BA..08C7 ; D # Lo [14] ARABIC LETTER YEH WITH TWO DOTS BELOW AND SMALL NOON ABOVE..ARABIC LETTER LAM WITH SMALL ARABIC LETTER TAH ABOVE +08B3..08B8 ; D # Lo [6] ARABIC LETTER AIN WITH THREE DOTS BELOW..ARABIC LETTER TEH WITH SMALL TEH ABOVE +08BA..08C8 ; D # Lo [15] ARABIC LETTER YEH WITH TWO DOTS BELOW AND SMALL NOON ABOVE..ARABIC LETTER GRAF 1807 ; D # Po MONGOLIAN SIBE SYLLABLE BOUNDARY MARKER 1820..1842 ; D # Lo [35] MONGOLIAN LETTER A..MONGOLIAN LETTER CHI 1843 ; D # Lm MONGOLIAN LETTER TODO LONG VOWEL SIGN @@ -96,6 +98,8 @@ A840..A871 ; D # Lo [50] PHAGS-PA LETTER KA..PHAGS-PA SUBJOINED LETTER RA 10F30..10F32 ; D # Lo [3] SOGDIAN LETTER ALEPH..SOGDIAN LETTER GIMEL 10F34..10F44 ; D # Lo [17] SOGDIAN LETTER WAW..SOGDIAN LETTER LESH 10F51..10F53 ; D # No [3] SOGDIAN NUMBER ONE..SOGDIAN NUMBER TWENTY +10F70..10F73 ; D # Lo [4] OLD UYGHUR LETTER ALEPH..OLD UYGHUR LETTER WAW +10F76..10F81 ; D # Lo [12] OLD UYGHUR LETTER YODH..OLD UYGHUR LETTER LESH 10FB0 ; D # Lo CHORASMIAN LETTER ALEPH 10FB2..10FB3 ; D # Lo [2] CHORASMIAN LETTER BETH..CHORASMIAN LETTER GIMEL 10FB8 ; D # Lo CHORASMIAN LETTER ZAYIN @@ -106,7 +110,7 @@ A840..A871 ; D # Lo [50] PHAGS-PA LETTER KA..PHAGS-PA SUBJOINED LETTER RA 10FCA ; D # No CHORASMIAN NUMBER TWENTY 1E900..1E943 ; D # L& [68] ADLAM CAPITAL LETTER ALIF..ADLAM SMALL LETTER SHA -# Total code points: 586 +# Total code points: 610 # ================================================ @@ -147,6 +151,8 @@ A840..A871 ; D # Lo [50] PHAGS-PA LETTER KA..PHAGS-PA SUBJOINED LETTER RA 0856..0858 ; R # Lo [3] MANDAIC LETTER DUSHENNA..MANDAIC LETTER AIN 0867 ; R # Lo SYRIAC LETTER MALAYALAM RA 0869..086A ; R # Lo [2] SYRIAC LETTER MALAYALAM LLLA..SYRIAC LETTER MALAYALAM SSA +0870..0882 ; R # Lo [19] ARABIC LETTER ALEF WITH ATTACHED FATHA..ARABIC LETTER ALEF WITH ATTACHED LEFT HAMZA +088E ; R # Lo ARABIC VERTICAL TAIL 08AA..08AC ; R # Lo [3] ARABIC LETTER REH WITH LOOP..ARABIC LETTER ROHINGYA YEH 08AE ; R # Lo ARABIC LETTER DAL WITH THREE DOTS BELOW 08B1..08B2 ; R # Lo [2] ARABIC LETTER STRAIGHT WAW..ARABIC LETTER ZAIN WITH INVERTED V ABOVE @@ -169,13 +175,14 @@ A840..A871 ; D # Lo [50] PHAGS-PA LETTER KA..PHAGS-PA SUBJOINED LETTER RA 10D22 ; R # Lo HANIFI ROHINGYA MARK SAKIN 10F33 ; R # Lo SOGDIAN LETTER HE 10F54 ; R # No SOGDIAN NUMBER ONE HUNDRED +10F74..10F75 ; R # Lo [2] OLD UYGHUR LETTER ZAYIN..OLD UYGHUR LETTER FINAL HETH 10FB4..10FB6 ; R # Lo [3] CHORASMIAN LETTER DALETH..CHORASMIAN LETTER WAW 10FB9..10FBA ; R # Lo [2] CHORASMIAN LETTER HETH..CHORASMIAN LETTER YODH 10FBD ; R # Lo CHORASMIAN LETTER MEM 10FC2..10FC3 ; R # Lo [2] CHORASMIAN LETTER RESH..CHORASMIAN LETTER SHIN 10FC9 ; R # No CHORASMIAN NUMBER TEN -# Total code points: 130 +# Total code points: 152 # ================================================ @@ -221,7 +228,8 @@ A872 ; L # Lo PHAGS-PA SUPERFIXED LETTER RA 0825..0827 ; T # Mn [3] SAMARITAN VOWEL SIGN SHORT A..SAMARITAN VOWEL SIGN U 0829..082D ; T # Mn [5] SAMARITAN VOWEL SIGN LONG I..SAMARITAN MARK NEQUDAA 0859..085B ; T # Mn [3] MANDAIC AFFRICATION MARK..MANDAIC GEMINATION MARK -08D3..08E1 ; T # Mn [15] ARABIC SMALL LOW WAW..ARABIC SMALL HIGH SIGN SAFHA +0898..089F ; T # Mn [8] ARABIC SMALL HIGH WORD AL-JUZ..ARABIC HALF MADDA OVER MADDA +08CA..08E1 ; T # Mn [24] ARABIC SMALL HIGH FARSI YEH..ARABIC SMALL HIGH SIGN SAFHA 08E3..0902 ; T # Mn [32] ARABIC TURNED DAMMA BELOW..DEVANAGARI SIGN ANUSVARA 093A ; T # Mn DEVANAGARI VOWEL SIGN OE 093C ; T # Mn DEVANAGARI SIGN NUKTA @@ -262,6 +270,7 @@ A872 ; L # Lo PHAGS-PA SUPERFIXED LETTER RA 0BCD ; T # Mn TAMIL SIGN VIRAMA 0C00 ; T # Mn TELUGU SIGN COMBINING CANDRABINDU ABOVE 0C04 ; T # Mn TELUGU SIGN COMBINING ANUSVARA ABOVE +0C3C ; T # Mn TELUGU SIGN NUKTA 0C3E..0C40 ; T # Mn [3] TELUGU VOWEL SIGN AA..TELUGU VOWEL SIGN II 0C46..0C48 ; T # Mn [3] TELUGU VOWEL SIGN E..TELUGU VOWEL SIGN AI 0C4A..0C4D ; T # Mn [4] TELUGU VOWEL SIGN O..TELUGU SIGN VIRAMA @@ -311,7 +320,7 @@ A872 ; L # Lo PHAGS-PA SUPERFIXED LETTER RA 109D ; T # Mn MYANMAR VOWEL SIGN AITON AI 135D..135F ; T # Mn [3] ETHIOPIC COMBINING GEMINATION AND VOWEL LENGTH MARK..ETHIOPIC COMBINING GEMINATION MARK 1712..1714 ; T # Mn [3] TAGALOG VOWEL SIGN I..TAGALOG SIGN VIRAMA -1732..1734 ; T # Mn [3] HANUNOO VOWEL SIGN I..HANUNOO SIGN PAMUDPOD +1732..1733 ; T # Mn [2] HANUNOO VOWEL SIGN I..HANUNOO VOWEL SIGN U 1752..1753 ; T # Mn [2] BUHID VOWEL SIGN I..BUHID VOWEL SIGN U 1772..1773 ; T # Mn [2] TAGBANWA VOWEL SIGN I..TAGBANWA VOWEL SIGN U 17B4..17B5 ; T # Mn [2] KHMER VOWEL INHERENT AQ..KHMER VOWEL INHERENT AA @@ -320,6 +329,7 @@ A872 ; L # Lo PHAGS-PA SUPERFIXED LETTER RA 17C9..17D3 ; T # Mn [11] KHMER SIGN MUUSIKATOAN..KHMER SIGN BATHAMASAT 17DD ; T # Mn KHMER SIGN ATTHACAN 180B..180D ; T # Mn [3] MONGOLIAN FREE VARIATION SELECTOR ONE..MONGOLIAN FREE VARIATION SELECTOR THREE +180F ; T # Mn MONGOLIAN FREE VARIATION SELECTOR FOUR 1885..1886 ; T # Mn [2] MONGOLIAN LETTER ALI GALI BALUDA..MONGOLIAN LETTER ALI GALI THREE BALUDA 18A9 ; T # Mn MONGOLIAN LETTER ALI GALI DAGALGA 1920..1922 ; T # Mn [3] LIMBU VOWEL SIGN A..LIMBU VOWEL SIGN U @@ -337,7 +347,7 @@ A872 ; L # Lo PHAGS-PA SUPERFIXED LETTER RA 1A7F ; T # Mn TAI THAM COMBINING CRYPTOGRAMMIC DOT 1AB0..1ABD ; T # Mn [14] COMBINING DOUBLED CIRCUMFLEX ACCENT..COMBINING PARENTHESES BELOW 1ABE ; T # Me COMBINING PARENTHESES OVERLAY -1ABF..1AC0 ; T # Mn [2] COMBINING LATIN SMALL LETTER W BELOW..COMBINING LATIN SMALL LETTER TURNED W BELOW +1ABF..1ACE ; T # Mn [16] COMBINING LATIN SMALL LETTER W BELOW..COMBINING LATIN SMALL LETTER INSULAR T 1B00..1B03 ; T # Mn [4] BALINESE SIGN ULU RICEM..BALINESE SIGN SURANG 1B34 ; T # Mn BALINESE SIGN REREKAN 1B36..1B3A ; T # Mn [5] BALINESE VOWEL SIGN ULU..BALINESE VOWEL SIGN RA REPA @@ -360,8 +370,7 @@ A872 ; L # Lo PHAGS-PA SUPERFIXED LETTER RA 1CED ; T # Mn VEDIC SIGN TIRYAK 1CF4 ; T # Mn VEDIC TONE CANDRA ABOVE 1CF8..1CF9 ; T # Mn [2] VEDIC TONE RING ABOVE..VEDIC TONE DOUBLE RING ABOVE -1DC0..1DF9 ; T # Mn [58] COMBINING DOTTED GRAVE ACCENT..COMBINING WIDE INVERTED BRIDGE BELOW -1DFB..1DFF ; T # Mn [5] COMBINING DELETION MARK..COMBINING RIGHT ARROWHEAD AND DOWN ARROWHEAD BELOW +1DC0..1DFF ; T # Mn [64] COMBINING DOTTED GRAVE ACCENT..COMBINING RIGHT ARROWHEAD AND DOWN ARROWHEAD BELOW 200B ; T # Cf ZERO WIDTH SPACE 200E..200F ; T # Cf [2] LEFT-TO-RIGHT MARK..RIGHT-TO-LEFT MARK 202A..202E ; T # Cf [5] LEFT-TO-RIGHT EMBEDDING..RIGHT-TO-LEFT OVERRIDE @@ -430,11 +439,15 @@ FFF9..FFFB ; T # Cf [3] INTERLINEAR ANNOTATION ANCHOR..INTERLINEAR ANNOTATI 10D24..10D27 ; T # Mn [4] HANIFI ROHINGYA SIGN HARBAHAY..HANIFI ROHINGYA SIGN TASSI 10EAB..10EAC ; T # Mn [2] YEZIDI COMBINING HAMZA MARK..YEZIDI COMBINING MADDA MARK 10F46..10F50 ; T # Mn [11] SOGDIAN COMBINING DOT BELOW..SOGDIAN COMBINING STROKE BELOW +10F82..10F85 ; T # Mn [4] OLD UYGHUR COMBINING DOT ABOVE..OLD UYGHUR COMBINING TWO DOTS BELOW 11001 ; T # Mn BRAHMI SIGN ANUSVARA 11038..11046 ; T # Mn [15] BRAHMI VOWEL SIGN AA..BRAHMI VIRAMA +11070 ; T # Mn BRAHMI SIGN OLD TAMIL VIRAMA +11073..11074 ; T # Mn [2] BRAHMI VOWEL SIGN OLD TAMIL SHORT E..BRAHMI VOWEL SIGN OLD TAMIL SHORT O 1107F..11081 ; T # Mn [3] BRAHMI NUMBER JOINER..KAITHI SIGN ANUSVARA 110B3..110B6 ; T # Mn [4] KAITHI VOWEL SIGN U..KAITHI VOWEL SIGN AI 110B9..110BA ; T # Mn [2] KAITHI SIGN VIRAMA..KAITHI SIGN NUKTA +110C2 ; T # Mn KAITHI VOWEL SIGN VOCALIC R 11100..11102 ; T # Mn [3] CHAKMA SIGN CANDRABINDU..CHAKMA SIGN VISARGA 11127..1112B ; T # Mn [5] CHAKMA VOWEL SIGN A..CHAKMA VOWEL SIGN UU 1112D..11134 ; T # Mn [8] CHAKMA VOWEL SIGN AI..CHAKMA MAAYYAA @@ -516,6 +529,8 @@ FFF9..FFFB ; T # Cf [3] INTERLINEAR ANNOTATION ANCHOR..INTERLINEAR ANNOTATI 16FE4 ; T # Mn KHITAN SMALL SCRIPT FILLER 1BC9D..1BC9E ; T # Mn [2] DUPLOYAN THICK LETTER SELECTOR..DUPLOYAN DOUBLE MARK 1BCA0..1BCA3 ; T # Cf [4] SHORTHAND FORMAT LETTER OVERLAP..SHORTHAND FORMAT UP STEP +1CF00..1CF2D ; T # Mn [46] ZNAMENNY COMBINING MARK GORAZDO NIZKO S KRYZHEM ON LEFT..ZNAMENNY COMBINING MARK KRYZH ON LEFT +1CF30..1CF46 ; T # Mn [23] ZNAMENNY COMBINING TONAL RANGE MARK MRACHNO..ZNAMENNY PRIZNAK MODIFIER ROG 1D167..1D169 ; T # Mn [3] MUSICAL SYMBOL COMBINING TREMOLO-1..MUSICAL SYMBOL COMBINING TREMOLO-3 1D173..1D17A ; T # Cf [8] MUSICAL SYMBOL BEGIN BEAM..MUSICAL SYMBOL END PHRASE 1D17B..1D182 ; T # Mn [8] MUSICAL SYMBOL COMBINING ACCENT..MUSICAL SYMBOL COMBINING LOURE @@ -534,6 +549,7 @@ FFF9..FFFB ; T # Cf [3] INTERLINEAR ANNOTATION ANCHOR..INTERLINEAR ANNOTATI 1E023..1E024 ; T # Mn [2] COMBINING GLAGOLITIC LETTER YU..COMBINING GLAGOLITIC LETTER SMALL YUS 1E026..1E02A ; T # Mn [5] COMBINING GLAGOLITIC LETTER YO..COMBINING GLAGOLITIC LETTER FITA 1E130..1E136 ; T # Mn [7] NYIAKENG PUACHUE HMONG TONE-B..NYIAKENG PUACHUE HMONG TONE-D +1E2AE ; T # Mn TOTO SIGN RISING TONE 1E2EC..1E2EF ; T # Mn [4] WANCHO TONE TUP..WANCHO TONE KOINI 1E8D0..1E8D6 ; T # Mn [7] MENDE KIKAKUI COMBINING NUMBER TEENS..MENDE KIKAKUI COMBINING NUMBER MILLIONS 1E944..1E94A ; T # Mn [7] ADLAM ALIF LENGTHENER..ADLAM NUKTA @@ -542,6 +558,6 @@ E0001 ; T # Cf LANGUAGE TAG E0020..E007F ; T # Cf [96] TAG SPACE..CANCEL TAG E0100..E01EF ; T # Mn [240] VARIATION SELECTOR-17..VARIATION SELECTOR-256 -# Total code points: 1997 +# Total code points: 2108 # EOF diff --git a/gnu/usr.bin/perl/lib/unicore/extracted/DLineBreak.txt b/gnu/usr.bin/perl/lib/unicore/extracted/DLineBreak.txt index 0f326def569..2504c3f7e18 100644 --- a/gnu/usr.bin/perl/lib/unicore/extracted/DLineBreak.txt +++ b/gnu/usr.bin/perl/lib/unicore/extracted/DLineBreak.txt @@ -1,6 +1,6 @@ -# DerivedLineBreak-13.0.0.txt -# Date: 2020-02-17, 18:43:18 GMT -# © 2020 Unicode®, Inc. +# DerivedLineBreak-14.0.0.txt +# Date: 2021-07-10, 00:35:09 GMT +# © 2021 Unicode®, Inc. # Unicode and the Unicode Logo are registered trademarks of Unicode, Inc. in the U.S. and other countries. # For terms of use, see http://www.unicode.org/terms_of_use.html # @@ -24,8 +24,8 @@ E000..F8FF ; XX # Co [6400] .. F0000..FFFFD ; XX # Co [65534] .. 100000..10FFFD; XX # Co [65534] .. -# The above property value applies to 763788 code points not listed here. -# Total code points: 901256 +# The above property value applies to 762997 code points not listed here. +# Total code points: 900465 # ================================================ @@ -80,6 +80,10 @@ F0000..FFFFD ; XX # Co [65534] .. 2E26 ; OP # Ps LEFT SIDEWAYS U BRACKET 2E28 ; OP # Ps LEFT DOUBLE PARENTHESIS 2E42 ; OP # Ps DOUBLE LOW-REVERSED-9 QUOTATION MARK +2E55 ; OP # Ps LEFT SQUARE BRACKET WITH STROKE +2E57 ; OP # Ps LEFT SQUARE BRACKET WITH DOUBLE STROKE +2E59 ; OP # Ps TOP HALF LEFT PARENTHESIS +2E5B ; OP # Ps BOTTOM HALF LEFT PARENTHESIS 3008 ; OP # Ps LEFT ANGLE BRACKET 300A ; OP # Ps LEFT DOUBLE ANGLE BRACKET 300C ; OP # Ps LEFT CORNER BRACKET @@ -117,7 +121,7 @@ FF62 ; OP # Ps HALFWIDTH LEFT CORNER BRACKET 145CE ; OP # Lo ANATOLIAN HIEROGLYPH A410 BEGIN LOGOGRAM MARK 1E95E..1E95F ; OP # Po [2] ADLAM INITIAL EXCLAMATION MARK..ADLAM INITIAL QUESTION MARK -# Total code points: 88 +# Total code points: 92 # ================================================ @@ -164,6 +168,10 @@ FF62 ; OP # Ps HALFWIDTH LEFT CORNER BRACKET 2E25 ; CL # Pe BOTTOM RIGHT HALF BRACKET 2E27 ; CL # Pe RIGHT SIDEWAYS U BRACKET 2E29 ; CL # Pe RIGHT DOUBLE PARENTHESIS +2E56 ; CL # Pe RIGHT SQUARE BRACKET WITH STROKE +2E58 ; CL # Pe RIGHT SQUARE BRACKET WITH DOUBLE STROKE +2E5A ; CL # Pe TOP HALF RIGHT PARENTHESIS +2E5C ; CL # Pe BOTTOM HALF RIGHT PARENTHESIS 3001..3002 ; CL # Po [2] IDEOGRAPHIC COMMA..IDEOGRAPHIC FULL STOP 3009 ; CL # Pe RIGHT ANGLE BRACKET 300B ; CL # Pe RIGHT DOUBLE ANGLE BRACKET @@ -209,7 +217,7 @@ FF64 ; CL # Po HALFWIDTH IDEOGRAPHIC COMMA 13438 ; CL # Cf EGYPTIAN HIEROGLYPH END SEGMENT 145CF ; CL # Lo ANATOLIAN HIEROGLYPH A410A END LOGOGRAM MARK -# Total code points: 91 +# Total code points: 95 # ================================================ @@ -302,7 +310,7 @@ FF9E..FF9F ; NS # Lm [2] HALFWIDTH KATAKANA VOICED SOUND MARK..HALFWIDTH KA 003F ; EX # Po QUESTION MARK 05C6 ; EX # Po HEBREW PUNCTUATION NUN HAFUKHA 061B ; EX # Po ARABIC SEMICOLON -061E..061F ; EX # Po [2] ARABIC TRIPLE DOT PUNCTUATION MARK..ARABIC QUESTION MARK +061D..061F ; EX # Po [3] ARABIC END OF TEXT MARK..ARABIC QUESTION MARK 06D4 ; EX # Po ARABIC FULL STOP 07F9 ; EX # Po NKO EXCLAMATION MARK 0F0D..0F11 ; EX # Po [5] TIBETAN MARK SHAD..TIBETAN MARK RIN CHEN SPUNGS SHAD @@ -314,6 +322,7 @@ FF9E..FF9F ; NS # Lm [2] HALFWIDTH KATAKANA VOICED SOUND MARK..HALFWIDTH KA 2CF9 ; EX # Po COPTIC OLD NUBIAN FULL STOP 2CFE ; EX # Po COPTIC FULL STOP 2E2E ; EX # Po REVERSED QUESTION MARK +2E53..2E54 ; EX # Po [2] MEDIEVAL EXCLAMATION MARK..MEDIEVAL QUESTION MARK A60E ; EX # Po VAI FULL STOP A876..A877 ; EX # Po [2] PHAGS-PA MARK SHAD..PHAGS-PA MARK DOUBLE SHAD FE15..FE16 ; EX # Po [2] PRESENTATION FORM FOR VERTICAL EXCLAMATION MARK..PRESENTATION FORM FOR VERTICAL QUESTION MARK @@ -323,7 +332,7 @@ FF1F ; EX # Po FULLWIDTH QUESTION MARK 115C4..115C5 ; EX # Po [2] SIDDHAM SEPARATOR DOT..SIDDHAM SEPARATOR BAR 11C71 ; EX # Po MARCHEN MARK SHAD -# Total code points: 37 +# Total code points: 40 # ================================================ @@ -371,7 +380,7 @@ FE13..FE14 ; IS # Po [2] PRESENTATION FORM FOR VERTICAL COLON..PRESENTATION 20B7..20BA ; PR # Sc [4] SPESMILO SIGN..TURKISH LIRA SIGN 20BC..20BD ; PR # Sc [2] MANAT SIGN..RUBLE SIGN 20BF ; PR # Sc BITCOIN SIGN -20C0..20CF ; PR # Cn [16] .. +20C1..20CF ; PR # Cn [15] .. 2116 ; PR # So NUMERO SIGN 2212..2213 ; PR # Sm [2] MINUS SIGN..MINUS-OR-PLUS SIGN FE69 ; PR # Sc SMALL DOLLAR SIGN @@ -380,7 +389,7 @@ FFE1 ; PR # Sc FULLWIDTH POUND SIGN FFE5..FFE6 ; PR # Sc [2] FULLWIDTH YEN SIGN..FULLWIDTH WON SIGN 1E2FF ; PR # Sc WANCHO NGUN SIGN -# Total code points: 68 +# Total code points: 67 # ================================================ @@ -400,6 +409,7 @@ FFE5..FFE6 ; PR # Sc [2] FULLWIDTH YEN SIGN..FULLWIDTH WON SIGN 20B6 ; PO # Sc LIVRE TOURNOIS SIGN 20BB ; PO # Sc NORDIC MARK SIGN 20BE ; PO # Sc LARI SIGN +20C0 ; PO # Sc SOM SIGN 2103 ; PO # So DEGREE CELSIUS 2109 ; PO # So DEGREE FAHRENHEIT A838 ; PO # Sc NORTH INDIC RUPEE MARK @@ -411,7 +421,7 @@ FFE0 ; PO # Sc FULLWIDTH CENT SIGN 1ECAC ; PO # So INDIC SIYAQ PLACEHOLDER 1ECB0 ; PO # Sc INDIC SIYAQ RUPEE MARK -# Total code points: 36 +# Total code points: 37 # ================================================ @@ -472,6 +482,7 @@ ABF0..ABF9 ; NU # Nd [10] MEETEI MAYEK DIGIT ZERO..MEETEI MAYEK DIGIT NINE 11D50..11D59 ; NU # Nd [10] MASARAM GONDI DIGIT ZERO..MASARAM GONDI DIGIT NINE 11DA0..11DA9 ; NU # Nd [10] GUNJALA GONDI DIGIT ZERO..GUNJALA GONDI DIGIT NINE 16A60..16A69 ; NU # Nd [10] MRO DIGIT ZERO..MRO DIGIT NINE +16AC0..16AC9 ; NU # Nd [10] TANGSA DIGIT ZERO..TANGSA DIGIT NINE 16B50..16B59 ; NU # Nd [10] PAHAWH HMONG DIGIT ZERO..PAHAWH HMONG DIGIT NINE 1D7CE..1D7FF ; NU # Nd [50] MATHEMATICAL BOLD DIGIT ZERO..MATHEMATICAL MONOSPACE DIGIT NINE 1E140..1E149 ; NU # Nd [10] NYIAKENG PUACHUE HMONG DIGIT ZERO..NYIAKENG PUACHUE HMONG DIGIT NINE @@ -479,7 +490,7 @@ ABF0..ABF9 ; NU # Nd [10] MEETEI MAYEK DIGIT ZERO..MEETEI MAYEK DIGIT NINE 1E950..1E959 ; NU # Nd [10] ADLAM DIGIT ZERO..ADLAM DIGIT NINE 1FBF0..1FBF9 ; NU # Nd [10] SEGMENTED DIGIT ZERO..SEGMENTED DIGIT NINE -# Total code points: 642 +# Total code points: 652 # ================================================ @@ -588,8 +599,12 @@ ABF0..ABF9 ; NU # Nd [10] MEETEI MAYEK DIGIT ZERO..MEETEI MAYEK DIGIT NINE 0840..0858 ; AL # Lo [25] MANDAIC LETTER HALQA..MANDAIC LETTER AIN 085E ; AL # Po MANDAIC PUNCTUATION 0860..086A ; AL # Lo [11] SYRIAC LETTER MALAYALAM NGA..SYRIAC LETTER MALAYALAM SSA -08A0..08B4 ; AL # Lo [21] ARABIC LETTER BEH WITH SMALL V BELOW..ARABIC LETTER KAF WITH DOT BELOW -08B6..08C7 ; AL # Lo [18] ARABIC LETTER BEH WITH SMALL MEEM ABOVE..ARABIC LETTER LAM WITH SMALL ARABIC LETTER TAH ABOVE +0870..0887 ; AL # Lo [24] ARABIC LETTER ALEF WITH ATTACHED FATHA..ARABIC BASELINE ROUND DOT +0888 ; AL # Sk ARABIC RAISED ROUND DOT +0889..088E ; AL # Lo [6] ARABIC LETTER NOON WITH INVERTED SMALL V..ARABIC VERTICAL TAIL +0890..0891 ; AL # Cf [2] ARABIC POUND MARK ABOVE..ARABIC PIASTRE MARK ABOVE +08A0..08C8 ; AL # Lo [41] ARABIC LETTER BEH WITH SMALL V BELOW..ARABIC LETTER GRAF +08C9 ; AL # Lm ARABIC SMALL FARSI YEH 08E2 ; AL # Cf ARABIC DISPUTED END OF AYAH 0904..0939 ; AL # Lo [54] DEVANAGARI LETTER SHORT A..DEVANAGARI LETTER HA 093D ; AL # Lo DEVANAGARI SIGN AVAGRAHA @@ -667,6 +682,7 @@ ABF0..ABF9 ; NU # Nd [10] MEETEI MAYEK DIGIT ZERO..MEETEI MAYEK DIGIT NINE 0C2A..0C39 ; AL # Lo [16] TELUGU LETTER PA..TELUGU LETTER HA 0C3D ; AL # Lo TELUGU SIGN AVAGRAHA 0C58..0C5A ; AL # Lo [3] TELUGU LETTER TSA..TELUGU LETTER RRRA +0C5D ; AL # Lo TELUGU LETTER NAKAARA POLLU 0C60..0C61 ; AL # Lo [2] TELUGU LETTER VOCALIC RR..TELUGU LETTER VOCALIC LL 0C78..0C7E ; AL # No [7] TELUGU FRACTION DIGIT ZERO FOR ODD POWERS OF FOUR..TELUGU FRACTION DIGIT THREE FOR EVEN POWERS OF FOUR 0C7F ; AL # So TELUGU SIGN TUUMU @@ -677,7 +693,7 @@ ABF0..ABF9 ; NU # Nd [10] MEETEI MAYEK DIGIT ZERO..MEETEI MAYEK DIGIT NINE 0CAA..0CB3 ; AL # Lo [10] KANNADA LETTER PA..KANNADA LETTER LLA 0CB5..0CB9 ; AL # Lo [5] KANNADA LETTER VA..KANNADA LETTER HA 0CBD ; AL # Lo KANNADA SIGN AVAGRAHA -0CDE ; AL # Lo KANNADA LETTER FA +0CDD..0CDE ; AL # Lo [2] KANNADA LETTER NAKAARA POLLU..KANNADA LETTER FA 0CE0..0CE1 ; AL # Lo [2] KANNADA LETTER VOCALIC RR..KANNADA LETTER VOCALIC LL 0CF1..0CF2 ; AL # Lo [2] KANNADA SIGN JIHVAMULIYA..KANNADA SIGN UPADHMANIYA 0D04..0D0C ; AL # Lo [9] MALAYALAM LETTER VEDIC ANUSVARA..MALAYALAM LETTER VOCALIC L @@ -753,9 +769,8 @@ ABF0..ABF9 ; NU # Nd [10] MEETEI MAYEK DIGIT ZERO..MEETEI MAYEK DIGIT NINE 16A0..16EA ; AL # Lo [75] RUNIC LETTER FEHU FEOH FE F..RUNIC LETTER X 16EE..16F0 ; AL # Nl [3] RUNIC ARLAUG SYMBOL..RUNIC BELGTHOR SYMBOL 16F1..16F8 ; AL # Lo [8] RUNIC LETTER K..RUNIC LETTER FRANKS CASKET AESC -1700..170C ; AL # Lo [13] TAGALOG LETTER A..TAGALOG LETTER YA -170E..1711 ; AL # Lo [4] TAGALOG LETTER LA..TAGALOG LETTER HA -1720..1731 ; AL # Lo [18] HANUNOO LETTER A..HANUNOO LETTER HA +1700..1711 ; AL # Lo [18] TAGALOG LETTER A..TAGALOG LETTER HA +171F..1731 ; AL # Lo [19] TAGALOG LETTER ARCHAIC RA..HANUNOO LETTER HA 1740..1751 ; AL # Lo [18] BUHID LETTER A..BUHID LETTER HA 1760..176C ; AL # Lo [13] TAGBANWA LETTER A..TAGBANWA LETTER YA 176E..1770 ; AL # Lo [3] TAGBANWA LETTER LA..TAGBANWA LETTER SA @@ -777,7 +792,7 @@ ABF0..ABF9 ; NU # Nd [10] MEETEI MAYEK DIGIT ZERO..MEETEI MAYEK DIGIT NINE 1A00..1A16 ; AL # Lo [23] BUGINESE LETTER KA..BUGINESE LETTER HA 1A1E..1A1F ; AL # Po [2] BUGINESE PALLAWA..BUGINESE END OF SECTION 1B05..1B33 ; AL # Lo [47] BALINESE LETTER AKARA..BALINESE LETTER HA -1B45..1B4B ; AL # Lo [7] BALINESE LETTER KAF SASAK..BALINESE LETTER ASYURA SASAK +1B45..1B4C ; AL # Lo [8] BALINESE LETTER KAF SASAK..BALINESE LETTER ARCHAIC JNYA 1B5C ; AL # Po BALINESE WINDU 1B61..1B6A ; AL # So [10] BALINESE MUSICAL SYMBOL DONG..BALINESE MUSICAL SYMBOL DANG GEDE 1B74..1B7C ; AL # So [9] BALINESE MUSICAL SYMBOL RIGHT-HAND OPEN DUG..BALINESE MUSICAL SYMBOL LEFT-HAND OPEN PING @@ -1012,9 +1027,7 @@ ABF0..ABF9 ; NU # Nd [10] MEETEI MAYEK DIGIT ZERO..MEETEI MAYEK DIGIT NINE 2B5A..2B73 ; AL # So [26] SLANTED NORTH ARROW WITH HOOKED HEAD..DOWNWARDS TRIANGLE-HEADED ARROW TO BAR 2B76..2B95 ; AL # So [32] NORTH WEST TRIANGLE-HEADED ARROW TO BAR..RIGHTWARDS BLACK ARROW 2B97..2BFF ; AL # So [105] SYMBOL FOR TYPE A ELECTRONICS..HELLSCHREIBER PAUSE SYMBOL -2C00..2C2E ; AL # L& [47] GLAGOLITIC CAPITAL LETTER AZU..GLAGOLITIC CAPITAL LETTER LATINATE MYSLITE -2C30..2C5E ; AL # L& [47] GLAGOLITIC SMALL LETTER AZU..GLAGOLITIC SMALL LETTER LATINATE MYSLITE -2C60..2C7B ; AL # L& [28] LATIN CAPITAL LETTER L WITH DOUBLE BAR..LATIN LETTER SMALL CAPITAL TURNED E +2C00..2C7B ; AL # L& [124] GLAGOLITIC CAPITAL LETTER AZU..LATIN LETTER SMALL CAPITAL TURNED E 2C7C..2C7D ; AL # Lm [2] LATIN SUBSCRIPT SMALL LETTER J..MODIFIER LETTER CAPITAL V 2C7E..2CE4 ; AL # L& [103] LATIN CAPITAL LETTER S WITH SWASH TAIL..COPTIC SYMBOL KAI 2CE5..2CEA ; AL # So [6] COPTIC SYMBOL MI RO..COPTIC SYMBOL SHIMA SIMA @@ -1074,8 +1087,11 @@ A788 ; AL # Lm MODIFIER LETTER LOW CIRCUMFLEX ACCENT A789..A78A ; AL # Sk [2] MODIFIER LETTER COLON..MODIFIER LETTER SHORT EQUALS SIGN A78B..A78E ; AL # L& [4] LATIN CAPITAL LETTER SALTILLO..LATIN SMALL LETTER L WITH RETROFLEX HOOK AND BELT A78F ; AL # Lo LATIN LETTER SINOLOGICAL DOT -A790..A7BF ; AL # L& [48] LATIN CAPITAL LETTER N WITH DESCENDER..LATIN SMALL LETTER GLOTTAL U -A7C2..A7CA ; AL # L& [9] LATIN CAPITAL LETTER ANGLICANA W..LATIN SMALL LETTER S WITH SHORT STROKE OVERLAY +A790..A7CA ; AL # L& [59] LATIN CAPITAL LETTER N WITH DESCENDER..LATIN SMALL LETTER S WITH SHORT STROKE OVERLAY +A7D0..A7D1 ; AL # L& [2] LATIN CAPITAL LETTER CLOSED INSULAR G..LATIN SMALL LETTER CLOSED INSULAR G +A7D3 ; AL # L& LATIN SMALL LETTER DOUBLE THORN +A7D5..A7D9 ; AL # L& [5] LATIN SMALL LETTER DOUBLE WYNN..LATIN SMALL LETTER SIGMOID S +A7F2..A7F4 ; AL # Lm [3] MODIFIER LETTER CAPITAL C..MODIFIER LETTER CAPITAL Q A7F5..A7F6 ; AL # L& [2] LATIN CAPITAL LETTER REVERSED HALF H..LATIN SMALL LETTER REVERSED HALF H A7F7 ; AL # Lo LATIN EPIGRAPHIC LETTER SIDEWAYS I A7F8..A7F9 ; AL # Lm [2] MODIFIER LETTER CAPITAL H WITH STROKE..MODIFIER LETTER SMALL LIGATURE OE @@ -1126,12 +1142,14 @@ FB00..FB06 ; AL # L& [7] LATIN SMALL LIGATURE FF..LATIN SMALL LIGATURE ST FB13..FB17 ; AL # L& [5] ARMENIAN SMALL LIGATURE MEN NOW..ARMENIAN SMALL LIGATURE MEN XEH FB29 ; AL # Sm HEBREW LETTER ALTERNATIVE PLUS SIGN FB50..FBB1 ; AL # Lo [98] ARABIC LETTER ALEF WASLA ISOLATED FORM..ARABIC LETTER YEH BARREE WITH HAMZA ABOVE FINAL FORM -FBB2..FBC1 ; AL # Sk [16] ARABIC SYMBOL DOT ABOVE..ARABIC SYMBOL SMALL TAH BELOW +FBB2..FBC2 ; AL # Sk [17] ARABIC SYMBOL DOT ABOVE..ARABIC SYMBOL WASLA ABOVE FBD3..FD3D ; AL # Lo [363] ARABIC LETTER NG ISOLATED FORM..ARABIC LIGATURE ALEF WITH FATHATAN ISOLATED FORM +FD40..FD4F ; AL # So [16] ARABIC LIGATURE RAHIMAHU ALLAAH..ARABIC LIGATURE RAHIMAHUM ALLAAH FD50..FD8F ; AL # Lo [64] ARABIC LIGATURE TEH WITH JEEM WITH MEEM INITIAL FORM..ARABIC LIGATURE MEEM WITH KHAH WITH MEEM INITIAL FORM FD92..FDC7 ; AL # Lo [54] ARABIC LIGATURE MEEM WITH JEEM WITH KHAH INITIAL FORM..ARABIC LIGATURE NOON WITH JEEM WITH YEH FINAL FORM +FDCF ; AL # So ARABIC LIGATURE SALAAMUHU ALAYNAA FDF0..FDFB ; AL # Lo [12] ARABIC LIGATURE SALLA USED AS KORANIC STOP SIGN ISOLATED FORM..ARABIC LIGATURE JALLAJALALOUHOU -FDFD ; AL # So ARABIC LIGATURE BISMILLAH AR-RAHMAN AR-RAHEEM +FDFD..FDFF ; AL # So [3] ARABIC LIGATURE BISMILLAH AR-RAHMAN AR-RAHEEM..ARABIC LIGATURE AZZA WA JALL FE70..FE74 ; AL # Lo [5] ARABIC FATHATAN ISOLATED FORM..ARABIC KASRATAN ISOLATED FORM FE76..FEFC ; AL # Lo [135] ARABIC FATHA ISOLATED FORM..ARABIC LIGATURE LAM WITH ALEF FINAL FORM FFE8 ; AL # So HALFWIDTH FORMS LIGHT VERTICAL @@ -1175,9 +1193,20 @@ FFED..FFEE ; AL # So [2] HALFWIDTH BLACK SQUARE..HALFWIDTH WHITE CIRCLE 10500..10527 ; AL # Lo [40] ELBASAN LETTER A..ELBASAN LETTER KHE 10530..10563 ; AL # Lo [52] CAUCASIAN ALBANIAN LETTER ALT..CAUCASIAN ALBANIAN LETTER KIW 1056F ; AL # Po CAUCASIAN ALBANIAN CITATION MARK +10570..1057A ; AL # L& [11] VITHKUQI CAPITAL LETTER A..VITHKUQI CAPITAL LETTER GA +1057C..1058A ; AL # L& [15] VITHKUQI CAPITAL LETTER HA..VITHKUQI CAPITAL LETTER RE +1058C..10592 ; AL # L& [7] VITHKUQI CAPITAL LETTER SE..VITHKUQI CAPITAL LETTER XE +10594..10595 ; AL # L& [2] VITHKUQI CAPITAL LETTER Y..VITHKUQI CAPITAL LETTER ZE +10597..105A1 ; AL # L& [11] VITHKUQI SMALL LETTER A..VITHKUQI SMALL LETTER GA +105A3..105B1 ; AL # L& [15] VITHKUQI SMALL LETTER HA..VITHKUQI SMALL LETTER RE +105B3..105B9 ; AL # L& [7] VITHKUQI SMALL LETTER SE..VITHKUQI SMALL LETTER XE +105BB..105BC ; AL # L& [2] VITHKUQI SMALL LETTER Y..VITHKUQI SMALL LETTER ZE 10600..10736 ; AL # Lo [311] LINEAR A SIGN AB001..LINEAR A SIGN A664 10740..10755 ; AL # Lo [22] LINEAR A SIGN A701 A..LINEAR A SIGN A732 JE 10760..10767 ; AL # Lo [8] LINEAR A SIGN A800..LINEAR A SIGN A807 +10780..10785 ; AL # Lm [6] MODIFIER LETTER SMALL CAPITAL AA..MODIFIER LETTER SMALL B WITH HOOK +10787..107B0 ; AL # Lm [42] MODIFIER LETTER SMALL DZ DIGRAPH..MODIFIER LETTER SMALL V WITH RIGHT HOOK +107B2..107BA ; AL # Lm [9] MODIFIER LETTER SMALL CAPITAL Y..MODIFIER LETTER SMALL S WITH CURL 10800..10805 ; AL # Lo [6] CYPRIOT SYLLABLE A..CYPRIOT SYLLABLE JA 10808 ; AL # Lo CYPRIOT SYLLABLE JO 1080A..10835 ; AL # Lo [44] CYPRIOT SYLLABLE KA..CYPRIOT SYLLABLE WO @@ -1239,12 +1268,16 @@ FFED..FFEE ; AL # So [2] HALFWIDTH BLACK SQUARE..HALFWIDTH WHITE CIRCLE 10F30..10F45 ; AL # Lo [22] SOGDIAN LETTER ALEPH..SOGDIAN INDEPENDENT SHIN 10F51..10F54 ; AL # No [4] SOGDIAN NUMBER ONE..SOGDIAN NUMBER ONE HUNDRED 10F55..10F59 ; AL # Po [5] SOGDIAN PUNCTUATION TWO VERTICAL BARS..SOGDIAN PUNCTUATION HALF CIRCLE WITH DOT +10F70..10F81 ; AL # Lo [18] OLD UYGHUR LETTER ALEPH..OLD UYGHUR LETTER LESH +10F86..10F89 ; AL # Po [4] OLD UYGHUR PUNCTUATION BAR..OLD UYGHUR PUNCTUATION FOUR DOTS 10FB0..10FC4 ; AL # Lo [21] CHORASMIAN LETTER ALEPH..CHORASMIAN LETTER TAW 10FC5..10FCB ; AL # No [7] CHORASMIAN NUMBER ONE..CHORASMIAN NUMBER ONE HUNDRED 10FE0..10FF6 ; AL # Lo [23] ELYMAIC LETTER ALEPH..ELYMAIC LIGATURE ZAYIN-YODH 11003..11037 ; AL # Lo [53] BRAHMI SIGN JIHVAMULIYA..BRAHMI LETTER OLD TAMIL NNNA 11049..1104D ; AL # Po [5] BRAHMI PUNCTUATION DOT..BRAHMI PUNCTUATION LOTUS 11052..11065 ; AL # No [20] BRAHMI NUMBER ONE..BRAHMI NUMBER ONE THOUSAND +11071..11072 ; AL # Lo [2] BRAHMI LETTER OLD TAMIL SHORT E..BRAHMI LETTER OLD TAMIL SHORT O +11075 ; AL # Lo BRAHMI LETTER OLD TAMIL LLA 11083..110AF ; AL # Lo [45] KAITHI LETTER A..KAITHI LETTER HA 110BB..110BC ; AL # Po [2] KAITHI ABBREVIATION SIGN..KAITHI ENUMERATION SIGN 110BD ; AL # Cf KAITHI NUMBER SIGN @@ -1299,6 +1332,7 @@ FFED..FFEE ; AL # So [2] HALFWIDTH BLACK SQUARE..HALFWIDTH WHITE CIRCLE 11644 ; AL # Lo MODI SIGN HUVA 11680..116AA ; AL # Lo [43] TAKRI LETTER A..TAKRI LETTER RRA 116B8 ; AL # Lo TAKRI LETTER ARCHAIC KHA +116B9 ; AL # Po TAKRI ABBREVIATION SIGN 11800..1182B ; AL # Lo [44] DOGRA LETTER A..DOGRA LETTER RRA 1183B ; AL # Po DOGRA ABBREVIATION SIGN 118A0..118DF ; AL # L& [64] WARANG CITI CAPITAL LETTER NGAA..WARANG CITI SMALL LETTER VIYO @@ -1322,7 +1356,7 @@ FFED..FFEE ; AL # So [2] HALFWIDTH BLACK SQUARE..HALFWIDTH WHITE CIRCLE 11A50 ; AL # Lo SOYOMBO LETTER A 11A5C..11A89 ; AL # Lo [46] SOYOMBO LETTER KA..SOYOMBO CLUSTER-INITIAL LETTER SA 11A9D ; AL # Lo SOYOMBO MARK PLUTA -11AC0..11AF8 ; AL # Lo [57] PAU CIN HAU LETTER PA..PAU CIN HAU GLOTTAL STOP FINAL +11AB0..11AF8 ; AL # Lo [73] CANADIAN SYLLABICS NATTILIK HI..PAU CIN HAU GLOTTAL STOP FINAL 11C00..11C08 ; AL # Lo [9] BHAIKSUKI LETTER A..BHAIKSUKI LETTER VOCALIC L 11C0A..11C2E ; AL # Lo [37] BHAIKSUKI LETTER E..BHAIKSUKI LETTER HA 11C40 ; AL # Lo BHAIKSUKI SIGN AVAGRAHA @@ -1345,6 +1379,8 @@ FFED..FFEE ; AL # So [2] HALFWIDTH BLACK SQUARE..HALFWIDTH WHITE CIRCLE 12000..12399 ; AL # Lo [922] CUNEIFORM SIGN A..CUNEIFORM SIGN U U 12400..1246E ; AL # Nl [111] CUNEIFORM NUMERIC SIGN TWO ASH..CUNEIFORM NUMERIC SIGN NINE U VARIANT FORM 12480..12543 ; AL # Lo [196] CUNEIFORM SIGN AB TIMES NUN TENU..CUNEIFORM SIGN ZU5 TIMES THREE DISH TENU +12F90..12FF0 ; AL # Lo [97] CYPRO-MINOAN SIGN CM001..CYPRO-MINOAN SIGN CM114 +12FF1..12FF2 ; AL # Po [2] CYPRO-MINOAN SIGN CM301..CYPRO-MINOAN SIGN CM302 13000..13257 ; AL # Lo [600] EGYPTIAN HIEROGLYPH A001..EGYPTIAN HIEROGLYPH O006 1325E..13281 ; AL # Lo [36] EGYPTIAN HIEROGLYPH O007..EGYPTIAN HIEROGLYPH O033 13283..13285 ; AL # Lo [3] EGYPTIAN HIEROGLYPH O034..EGYPTIAN HIEROGLYPH O036 @@ -1354,6 +1390,7 @@ FFED..FFEE ; AL # So [2] HALFWIDTH BLACK SQUARE..HALFWIDTH WHITE CIRCLE 145D0..14646 ; AL # Lo [119] ANATOLIAN HIEROGLYPH A411..ANATOLIAN HIEROGLYPH A530 16800..16A38 ; AL # Lo [569] BAMUM LETTER PHASE-A NGKUE MFON..BAMUM LETTER PHASE-F VUEQ 16A40..16A5E ; AL # Lo [31] MRO LETTER TA..MRO LETTER TEK +16A70..16ABE ; AL # Lo [79] TANGSA LETTER OZ..TANGSA LETTER ZA 16AD0..16AED ; AL # Lo [30] BASSA VAH LETTER ENNI..BASSA VAH LETTER I 16B00..16B2F ; AL # Lo [48] PAHAWH HMONG VOWEL KEEB..PAHAWH HMONG CONSONANT CAU 16B3A..16B3B ; AL # Po [2] PAHAWH HMONG SIGN VOS THIAB..PAHAWH HMONG SIGN VOS FEEM @@ -1370,18 +1407,22 @@ FFED..FFEE ; AL # So [2] HALFWIDTH BLACK SQUARE..HALFWIDTH WHITE CIRCLE 16F50 ; AL # Lo MIAO LETTER NASALIZATION 16F93..16F9F ; AL # Lm [13] MIAO LETTER TONE-2..MIAO LETTER REFORMED TONE-8 18B00..18CD5 ; AL # Lo [470] KHITAN SMALL SCRIPT CHARACTER-18B00..KHITAN SMALL SCRIPT CHARACTER-18CD5 +1AFF0..1AFF3 ; AL # Lm [4] KATAKANA LETTER MINNAN TONE-2..KATAKANA LETTER MINNAN TONE-5 +1AFF5..1AFFB ; AL # Lm [7] KATAKANA LETTER MINNAN TONE-7..KATAKANA LETTER MINNAN NASALIZED TONE-5 +1AFFD..1AFFE ; AL # Lm [2] KATAKANA LETTER MINNAN NASALIZED TONE-7..KATAKANA LETTER MINNAN NASALIZED TONE-8 1BC00..1BC6A ; AL # Lo [107] DUPLOYAN LETTER H..DUPLOYAN LETTER VOCALIC M 1BC70..1BC7C ; AL # Lo [13] DUPLOYAN AFFIX LEFT HORIZONTAL SECANT..DUPLOYAN AFFIX ATTACHED TANGENT HOOK 1BC80..1BC88 ; AL # Lo [9] DUPLOYAN AFFIX HIGH ACUTE..DUPLOYAN AFFIX HIGH VERTICAL 1BC90..1BC99 ; AL # Lo [10] DUPLOYAN AFFIX LOW ACUTE..DUPLOYAN AFFIX LOW ARROW 1BC9C ; AL # So DUPLOYAN SIGN O WITH CROSS +1CF50..1CFC3 ; AL # So [116] ZNAMENNY NEUME KRYUK..ZNAMENNY NEUME PAUK 1D000..1D0F5 ; AL # So [246] BYZANTINE MUSICAL SYMBOL PSILI..BYZANTINE MUSICAL SYMBOL GORGON NEO KATO 1D100..1D126 ; AL # So [39] MUSICAL SYMBOL SINGLE BARLINE..MUSICAL SYMBOL DRUM CLEF-2 1D129..1D164 ; AL # So [60] MUSICAL SYMBOL MULTIPLE MEASURE REST..MUSICAL SYMBOL ONE HUNDRED TWENTY-EIGHTH NOTE 1D16A..1D16C ; AL # So [3] MUSICAL SYMBOL FINGERED TREMOLO-1..MUSICAL SYMBOL FINGERED TREMOLO-3 1D183..1D184 ; AL # So [2] MUSICAL SYMBOL ARPEGGIATO UP..MUSICAL SYMBOL ARPEGGIATO DOWN 1D18C..1D1A9 ; AL # So [30] MUSICAL SYMBOL RINFORZANDO..MUSICAL SYMBOL DEGREE SLASH -1D1AE..1D1E8 ; AL # So [59] MUSICAL SYMBOL PEDAL MARK..MUSICAL SYMBOL KIEVAN FLAT SIGN +1D1AE..1D1EA ; AL # So [61] MUSICAL SYMBOL PEDAL MARK..MUSICAL SYMBOL KORON 1D200..1D241 ; AL # So [66] GREEK VOCAL NOTATION SYMBOL-1..GREEK INSTRUMENTAL NOTATION SYMBOL-54 1D245 ; AL # So GREEK MUSICAL LEIMMA 1D2E0..1D2F3 ; AL # No [20] MAYAN NUMERAL ZERO..MAYAN NUMERAL NINETEEN @@ -1433,11 +1474,19 @@ FFED..FFEE ; AL # So [2] HALFWIDTH BLACK SQUARE..HALFWIDTH WHITE CIRCLE 1DA76..1DA83 ; AL # So [14] SIGNWRITING LIMB COMBINATION..SIGNWRITING LOCATION DEPTH 1DA85..1DA86 ; AL # So [2] SIGNWRITING LOCATION TORSO..SIGNWRITING LOCATION LIMBS DIGITS 1DA8B ; AL # Po SIGNWRITING PARENTHESIS +1DF00..1DF09 ; AL # L& [10] LATIN SMALL LETTER FENG DIGRAPH WITH TRILL..LATIN SMALL LETTER T WITH HOOK AND RETROFLEX HOOK +1DF0A ; AL # Lo LATIN LETTER RETROFLEX CLICK WITH RETROFLEX HOOK +1DF0B..1DF1E ; AL # L& [20] LATIN SMALL LETTER ESH WITH DOUBLE BAR..LATIN SMALL LETTER S WITH CURL 1E100..1E12C ; AL # Lo [45] NYIAKENG PUACHUE HMONG LETTER MA..NYIAKENG PUACHUE HMONG LETTER W 1E137..1E13D ; AL # Lm [7] NYIAKENG PUACHUE HMONG SIGN FOR PERSON..NYIAKENG PUACHUE HMONG SYLLABLE LENGTHENER 1E14E ; AL # Lo NYIAKENG PUACHUE HMONG LOGOGRAM NYAJ 1E14F ; AL # So NYIAKENG PUACHUE HMONG CIRCLED CA +1E290..1E2AD ; AL # Lo [30] TOTO LETTER PA..TOTO LETTER A 1E2C0..1E2EB ; AL # Lo [44] WANCHO LETTER AA..WANCHO LETTER YIH +1E7E0..1E7E6 ; AL # Lo [7] ETHIOPIC SYLLABLE HHYA..ETHIOPIC SYLLABLE HHYO +1E7E8..1E7EB ; AL # Lo [4] ETHIOPIC SYLLABLE GURAGE HHWA..ETHIOPIC SYLLABLE HHWE +1E7ED..1E7EE ; AL # Lo [2] ETHIOPIC SYLLABLE GURAGE MWI..ETHIOPIC SYLLABLE GURAGE MWEE +1E7F0..1E7FE ; AL # Lo [15] ETHIOPIC SYLLABLE GURAGE QWI..ETHIOPIC SYLLABLE GURAGE PWEE 1E800..1E8C4 ; AL # Lo [197] MENDE KIKAKUI SYLLABLE M001 KI..MENDE KIKAKUI SYLLABLE M060 NYON 1E8C7..1E8CF ; AL # No [9] MENDE KIKAKUI DIGIT ONE..MENDE KIKAKUI DIGIT NINE 1E900..1E943 ; AL # L& [68] ADLAM CAPITAL LETTER ALIF..ADLAM SMALL LETTER SHA @@ -1511,7 +1560,7 @@ FFED..FFEE ; AL # So [2] HALFWIDTH BLACK SQUARE..HALFWIDTH WHITE CIRCLE 1FB00..1FB92 ; AL # So [147] BLOCK SEXTANT-1..UPPER HALF INVERSE MEDIUM SHADE AND LOWER HALF BLOCK 1FB94..1FBCA ; AL # So [55] LEFT HALF INVERSE MEDIUM SHADE AND RIGHT HALF BLOCK..WHITE UP-POINTING CHEVRON -# Total code points: 21400 +# Total code points: 22043 # ================================================ @@ -1599,9 +1648,7 @@ FFED..FFEE ; AL # So [2] HALFWIDTH BLACK SQUARE..HALFWIDTH WHITE CIRCLE 32B1..32BF ; ID # No [15] CIRCLED NUMBER THIRTY SIX..CIRCLED NUMBER FIFTY 32C0..33FF ; ID # So [320] IDEOGRAPHIC TELEGRAPH SYMBOL FOR JANUARY..SQUARE GAL 3400..4DBF ; ID # Lo [6592] CJK UNIFIED IDEOGRAPH-3400..CJK UNIFIED IDEOGRAPH-4DBF -4E00..9FFC ; ID # Lo [20989] CJK UNIFIED IDEOGRAPH-4E00..CJK UNIFIED IDEOGRAPH-9FFC -9FFD..9FFF ; ID # Cn [3] .. -A000..A014 ; ID # Lo [21] YI SYLLABLE IT..YI SYLLABLE E +4E00..A014 ; ID # Lo [21013] CJK UNIFIED IDEOGRAPH-4E00..YI SYLLABLE E A016..A48C ; ID # Lo [1143] YI SYLLABLE BIT..YI SYLLABLE YYR A490..A4C6 ; ID # So [55] YI RADICAL QOT..YI RADICAL KE F900..FA6D ; ID # Lo [366] CJK COMPATIBILITY IDEOGRAPH-F900..CJK COMPATIBILITY IDEOGRAPH-FA6D @@ -1652,7 +1699,7 @@ FFE4 ; ID # So FULLWIDTH BROKEN BAR 17000..187F7 ; ID # Lo [6136] TANGUT IDEOGRAPH-17000..TANGUT IDEOGRAPH-187F7 18800..18AFF ; ID # Lo [768] TANGUT COMPONENT-001..TANGUT COMPONENT-768 18D00..18D08 ; ID # Lo [9] TANGUT IDEOGRAPH-18D00..TANGUT IDEOGRAPH-18D08 -1B000..1B11E ; ID # Lo [287] KATAKANA LETTER ARCHAIC E..HENTAIGANA LETTER N-MU-MO-2 +1B000..1B122 ; ID # Lo [291] KATAKANA LETTER ARCHAIC E..KATAKANA LETTER ARCHAIC WU 1B170..1B2FB ; ID # Lo [396] NUSHU CHARACTER-1B170..NUSHU CHARACTER-1B2FB 1F000..1F02B ; ID # So [44] MAHJONG TILE EAST WIND..MAHJONG TILE BACK 1F02C..1F02F ; ID # Cn [4] .. @@ -1718,8 +1765,8 @@ FFE4 ; ID # So FULLWIDTH BROKEN BAR 1F6B7..1F6BF ; ID # So [9] NO PEDESTRIANS..SHOWER 1F6C1..1F6CB ; ID # So [11] BATHTUB..COUCH AND LAMP 1F6CD..1F6D7 ; ID # So [11] SHOPPING BAGS..ELEVATOR -1F6D8..1F6DF ; ID # Cn [8] .. -1F6E0..1F6EC ; ID # So [13] HAMMER AND WRENCH..AIRPLANE ARRIVING +1F6D8..1F6DC ; ID # Cn [5] .. +1F6DD..1F6EC ; ID # So [16] PLAYGROUND SLIDE..AIRPLANE ARRIVING 1F6ED..1F6EF ; ID # Cn [3] .. 1F6F0..1F6FC ; ID # So [13] SATELLITE..ROLLER SKATE 1F6FD..1F6FF ; ID # Cn [3] .. @@ -1727,7 +1774,9 @@ FFE4 ; ID # So FULLWIDTH BROKEN BAR 1F7D5..1F7D8 ; ID # So [4] CIRCLED TRIANGLE..NEGATIVE CIRCLED SQUARE 1F7D9..1F7DF ; ID # Cn [7] .. 1F7E0..1F7EB ; ID # So [12] LARGE ORANGE CIRCLE..LARGE BROWN SQUARE -1F7EC..1F7FF ; ID # Cn [20] .. +1F7EC..1F7EF ; ID # Cn [4] .. +1F7F0 ; ID # So HEAVY EQUALS SIGN +1F7F1..1F7FF ; ID # Cn [15] .. 1F80C..1F80F ; ID # Cn [4] .. 1F848..1F84F ; ID # Cn [8] .. 1F85A..1F85F ; ID # Cn [6] .. @@ -1741,13 +1790,10 @@ FFE4 ; ID # So FULLWIDTH BROKEN BAR 1F927..1F92F ; ID # So [9] SNEEZING FACE..SHOCKED FACE WITH EXPLODING HEAD 1F93A..1F93B ; ID # So [2] FENCER..MODERN PENTATHLON 1F93F..1F976 ; ID # So [56] DIVING MASK..FREEZING FACE -1F978 ; ID # So DISGUISED FACE -1F979 ; ID # Cn -1F97A..1F9B4 ; ID # So [59] FACE WITH PLEADING EYES..BONE +1F978..1F9B4 ; ID # So [61] DISGUISED FACE..BONE 1F9B7 ; ID # So TOOTH 1F9BA ; ID # So SAFETY VEST -1F9BC..1F9CB ; ID # So [16] MOTORIZED WHEELCHAIR..BUBBLE TEA -1F9CC ; ID # Cn +1F9BC..1F9CC ; ID # So [17] MOTORIZED WHEELCHAIR..TROLL 1F9D0 ; ID # So FACE WITH MONOCLE 1F9DE..1F9FF ; ID # So [34] GENIE..NAZAR AMULET 1FA54..1FA5F ; ID # Cn [12] .. @@ -1755,23 +1801,26 @@ FFE4 ; ID # So FULLWIDTH BROKEN BAR 1FA6E..1FA6F ; ID # Cn [2] .. 1FA70..1FA74 ; ID # So [5] BALLET SHOES..THONG SANDAL 1FA75..1FA77 ; ID # Cn [3] .. -1FA78..1FA7A ; ID # So [3] DROP OF BLOOD..STETHOSCOPE -1FA7B..1FA7F ; ID # Cn [5] .. +1FA78..1FA7C ; ID # So [5] DROP OF BLOOD..CRUTCH +1FA7D..1FA7F ; ID # Cn [3] .. 1FA80..1FA86 ; ID # So [7] YO-YO..NESTING DOLLS 1FA87..1FA8F ; ID # Cn [9] .. -1FA90..1FAA8 ; ID # So [25] RINGED PLANET..ROCK -1FAA9..1FAAF ; ID # Cn [7] .. -1FAB0..1FAB6 ; ID # So [7] FLY..FEATHER -1FAB7..1FABF ; ID # Cn [9] .. +1FA90..1FAAC ; ID # So [29] RINGED PLANET..HAMSA +1FAAD..1FAAF ; ID # Cn [3] .. +1FAB0..1FABA ; ID # So [11] FLY..NEST WITH EGGS +1FABB..1FABF ; ID # Cn [5] .. 1FAC0..1FAC2 ; ID # So [3] ANATOMICAL HEART..PEOPLE HUGGING -1FAC3..1FACF ; ID # Cn [13] .. -1FAD0..1FAD6 ; ID # So [7] BLUEBERRIES..TEAPOT -1FAD7..1FAFF ; ID # Cn [41] .. +1FAC6..1FACF ; ID # Cn [10] .. +1FAD0..1FAD9 ; ID # So [10] BLUEBERRIES..JAR +1FADA..1FADF ; ID # Cn [6] .. +1FAE0..1FAE7 ; ID # So [8] MELTING FACE..BUBBLES +1FAE8..1FAEF ; ID # Cn [8] .. +1FAF7..1FAFF ; ID # Cn [9] .. 1FC00..1FFFD ; ID # Cn [1022] .. -20000..2A6DD ; ID # Lo [42718] CJK UNIFIED IDEOGRAPH-20000..CJK UNIFIED IDEOGRAPH-2A6DD -2A6DE..2A6FF ; ID # Cn [34] .. -2A700..2B734 ; ID # Lo [4149] CJK UNIFIED IDEOGRAPH-2A700..CJK UNIFIED IDEOGRAPH-2B734 -2B735..2B73F ; ID # Cn [11] .. +20000..2A6DF ; ID # Lo [42720] CJK UNIFIED IDEOGRAPH-20000..CJK UNIFIED IDEOGRAPH-2A6DF +2A6E0..2A6FF ; ID # Cn [32] .. +2A700..2B738 ; ID # Lo [4153] CJK UNIFIED IDEOGRAPH-2A700..CJK UNIFIED IDEOGRAPH-2B738 +2B739..2B73F ; ID # Cn [7] .. 2B740..2B81D ; ID # Lo [222] CJK UNIFIED IDEOGRAPH-2B740..CJK UNIFIED IDEOGRAPH-2B81D 2B81E..2B81F ; ID # Cn [2] .. 2B820..2CEA1 ; ID # Lo [5762] CJK UNIFIED IDEOGRAPH-2B820..CJK UNIFIED IDEOGRAPH-2CEA1 @@ -1783,7 +1832,7 @@ FFE4 ; ID # So FULLWIDTH BROKEN BAR 30000..3134A ; ID # Lo [4939] CJK UNIFIED IDEOGRAPH-30000..CJK UNIFIED IDEOGRAPH-3134A 3134B..3FFFD ; ID # Cn [60595] .. -# Total code points: 172462 +# Total code points: 172456 # ================================================ @@ -1840,7 +1889,8 @@ FE19 ; IN # Po PRESENTATION FORM FOR VERTICAL HORIZONTAL ELLIPSIS 0825..0827 ; CM # Mn [3] SAMARITAN VOWEL SIGN SHORT A..SAMARITAN VOWEL SIGN U 0829..082D ; CM # Mn [5] SAMARITAN VOWEL SIGN LONG I..SAMARITAN MARK NEQUDAA 0859..085B ; CM # Mn [3] MANDAIC AFFRICATION MARK..MANDAIC GEMINATION MARK -08D3..08E1 ; CM # Mn [15] ARABIC SMALL LOW WAW..ARABIC SMALL HIGH SIGN SAFHA +0898..089F ; CM # Mn [8] ARABIC SMALL HIGH WORD AL-JUZ..ARABIC HALF MADDA OVER MADDA +08CA..08E1 ; CM # Mn [24] ARABIC SMALL HIGH FARSI YEH..ARABIC SMALL HIGH SIGN SAFHA 08E3..0902 ; CM # Mn [32] ARABIC TURNED DAMMA BELOW..DEVANAGARI SIGN ANUSVARA 0903 ; CM # Mc DEVANAGARI SIGN VISARGA 093A ; CM # Mn DEVANAGARI VOWEL SIGN OE @@ -1909,6 +1959,7 @@ FE19 ; IN # Po PRESENTATION FORM FOR VERTICAL HORIZONTAL ELLIPSIS 0C00 ; CM # Mn TELUGU SIGN COMBINING CANDRABINDU ABOVE 0C01..0C03 ; CM # Mc [3] TELUGU SIGN CANDRABINDU..TELUGU SIGN VISARGA 0C04 ; CM # Mn TELUGU SIGN COMBINING ANUSVARA ABOVE +0C3C ; CM # Mn TELUGU SIGN NUKTA 0C3E..0C40 ; CM # Mn [3] TELUGU VOWEL SIGN AA..TELUGU VOWEL SIGN II 0C41..0C44 ; CM # Mc [4] TELUGU VOWEL SIGN U..TELUGU VOWEL SIGN VOCALIC RR 0C46..0C48 ; CM # Mn [3] TELUGU VOWEL SIGN E..TELUGU VOWEL SIGN AI @@ -1958,10 +2009,13 @@ FE19 ; IN # Po PRESENTATION FORM FOR VERTICAL HORIZONTAL ELLIPSIS 0FC6 ; CM # Mn TIBETAN SYMBOL PADMA GDAN 135D..135F ; CM # Mn [3] ETHIOPIC COMBINING GEMINATION AND VOWEL LENGTH MARK..ETHIOPIC COMBINING GEMINATION MARK 1712..1714 ; CM # Mn [3] TAGALOG VOWEL SIGN I..TAGALOG SIGN VIRAMA -1732..1734 ; CM # Mn [3] HANUNOO VOWEL SIGN I..HANUNOO SIGN PAMUDPOD +1715 ; CM # Mc TAGALOG SIGN PAMUDPOD +1732..1733 ; CM # Mn [2] HANUNOO VOWEL SIGN I..HANUNOO VOWEL SIGN U +1734 ; CM # Mc HANUNOO SIGN PAMUDPOD 1752..1753 ; CM # Mn [2] BUHID VOWEL SIGN I..BUHID VOWEL SIGN U 1772..1773 ; CM # Mn [2] TAGBANWA VOWEL SIGN I..TAGBANWA VOWEL SIGN U 180B..180D ; CM # Mn [3] MONGOLIAN FREE VARIATION SELECTOR ONE..MONGOLIAN FREE VARIATION SELECTOR THREE +180F ; CM # Mn MONGOLIAN FREE VARIATION SELECTOR FOUR 1885..1886 ; CM # Mn [2] MONGOLIAN LETTER ALI GALI BALUDA..MONGOLIAN LETTER ALI GALI THREE BALUDA 18A9 ; CM # Mn MONGOLIAN LETTER ALI GALI DAGALGA 1920..1922 ; CM # Mn [3] LIMBU VOWEL SIGN A..LIMBU VOWEL SIGN U @@ -1978,7 +2032,7 @@ FE19 ; IN # Po PRESENTATION FORM FOR VERTICAL HORIZONTAL ELLIPSIS 1A7F ; CM # Mn TAI THAM COMBINING CRYPTOGRAMMIC DOT 1AB0..1ABD ; CM # Mn [14] COMBINING DOUBLED CIRCUMFLEX ACCENT..COMBINING PARENTHESES BELOW 1ABE ; CM # Me COMBINING PARENTHESES OVERLAY -1ABF..1AC0 ; CM # Mn [2] COMBINING LATIN SMALL LETTER W BELOW..COMBINING LATIN SMALL LETTER TURNED W BELOW +1ABF..1ACE ; CM # Mn [16] COMBINING LATIN SMALL LETTER W BELOW..COMBINING LATIN SMALL LETTER INSULAR T 1B00..1B03 ; CM # Mn [4] BALINESE SIGN ULU RICEM..BALINESE SIGN SURANG 1B04 ; CM # Mc BALINESE SIGN BISAH 1B34 ; CM # Mn BALINESE SIGN REREKAN @@ -2018,8 +2072,7 @@ FE19 ; IN # Po PRESENTATION FORM FOR VERTICAL HORIZONTAL ELLIPSIS 1CF4 ; CM # Mn VEDIC TONE CANDRA ABOVE 1CF7 ; CM # Mc VEDIC SIGN ATIKRAMA 1CF8..1CF9 ; CM # Mn [2] VEDIC TONE RING ABOVE..VEDIC TONE DOUBLE RING ABOVE -1DC0..1DF9 ; CM # Mn [58] COMBINING DOTTED GRAVE ACCENT..COMBINING WIDE INVERTED BRIDGE BELOW -1DFB..1DFF ; CM # Mn [5] COMBINING DELETION MARK..COMBINING RIGHT ARROWHEAD AND DOWN ARROWHEAD BELOW +1DC0..1DFF ; CM # Mn [64] COMBINING DOTTED GRAVE ACCENT..COMBINING RIGHT ARROWHEAD AND DOWN ARROWHEAD BELOW 200C ; CM # Cf ZERO WIDTH NON-JOINER 200E..200F ; CM # Cf [2] LEFT-TO-RIGHT MARK..RIGHT-TO-LEFT MARK 202A..202E ; CM # Cf [5] LEFT-TO-RIGHT EMBEDDING..RIGHT-TO-LEFT OVERRIDE @@ -2100,16 +2153,20 @@ FFF9..FFFB ; CM # Cf [3] INTERLINEAR ANNOTATION ANCHOR..INTERLINEAR ANNOTAT 10D24..10D27 ; CM # Mn [4] HANIFI ROHINGYA SIGN HARBAHAY..HANIFI ROHINGYA SIGN TASSI 10EAB..10EAC ; CM # Mn [2] YEZIDI COMBINING HAMZA MARK..YEZIDI COMBINING MADDA MARK 10F46..10F50 ; CM # Mn [11] SOGDIAN COMBINING DOT BELOW..SOGDIAN COMBINING STROKE BELOW +10F82..10F85 ; CM # Mn [4] OLD UYGHUR COMBINING DOT ABOVE..OLD UYGHUR COMBINING TWO DOTS BELOW 11000 ; CM # Mc BRAHMI SIGN CANDRABINDU 11001 ; CM # Mn BRAHMI SIGN ANUSVARA 11002 ; CM # Mc BRAHMI SIGN VISARGA 11038..11046 ; CM # Mn [15] BRAHMI VOWEL SIGN AA..BRAHMI VIRAMA +11070 ; CM # Mn BRAHMI SIGN OLD TAMIL VIRAMA +11073..11074 ; CM # Mn [2] BRAHMI VOWEL SIGN OLD TAMIL SHORT E..BRAHMI VOWEL SIGN OLD TAMIL SHORT O 1107F..11081 ; CM # Mn [3] BRAHMI NUMBER JOINER..KAITHI SIGN ANUSVARA 11082 ; CM # Mc KAITHI SIGN VISARGA 110B0..110B2 ; CM # Mc [3] KAITHI VOWEL SIGN AA..KAITHI VOWEL SIGN II 110B3..110B6 ; CM # Mn [4] KAITHI VOWEL SIGN U..KAITHI VOWEL SIGN AI 110B7..110B8 ; CM # Mc [2] KAITHI VOWEL SIGN O..KAITHI VOWEL SIGN AU 110B9..110BA ; CM # Mn [2] KAITHI SIGN VIRAMA..KAITHI SIGN NUKTA +110C2 ; CM # Mn KAITHI VOWEL SIGN VOCALIC R 11100..11102 ; CM # Mn [3] CHAKMA SIGN CANDRABINDU..CHAKMA SIGN VISARGA 11127..1112B ; CM # Mn [5] CHAKMA VOWEL SIGN A..CHAKMA VOWEL SIGN UU 1112C ; CM # Mc CHAKMA VOWEL SIGN E @@ -2243,6 +2300,8 @@ FFF9..FFFB ; CM # Cf [3] INTERLINEAR ANNOTATION ANCHOR..INTERLINEAR ANNOTAT 16FF0..16FF1 ; CM # Mc [2] VIETNAMESE ALTERNATE READING MARK CA..VIETNAMESE ALTERNATE READING MARK NHAY 1BC9D..1BC9E ; CM # Mn [2] DUPLOYAN THICK LETTER SELECTOR..DUPLOYAN DOUBLE MARK 1BCA0..1BCA3 ; CM # Cf [4] SHORTHAND FORMAT LETTER OVERLAP..SHORTHAND FORMAT UP STEP +1CF00..1CF2D ; CM # Mn [46] ZNAMENNY COMBINING MARK GORAZDO NIZKO S KRYZHEM ON LEFT..ZNAMENNY COMBINING MARK KRYZH ON LEFT +1CF30..1CF46 ; CM # Mn [23] ZNAMENNY COMBINING TONAL RANGE MARK MRACHNO..ZNAMENNY PRIZNAK MODIFIER ROG 1D165..1D166 ; CM # Mc [2] MUSICAL SYMBOL COMBINING STEM..MUSICAL SYMBOL COMBINING SPRECHGESANG STEM 1D167..1D169 ; CM # Mn [3] MUSICAL SYMBOL COMBINING TREMOLO-1..MUSICAL SYMBOL COMBINING TREMOLO-3 1D16D..1D172 ; CM # Mc [6] MUSICAL SYMBOL COMBINING AUGMENTATION DOT..MUSICAL SYMBOL COMBINING FLAG-5 @@ -2263,6 +2322,7 @@ FFF9..FFFB ; CM # Cf [3] INTERLINEAR ANNOTATION ANCHOR..INTERLINEAR ANNOTAT 1E023..1E024 ; CM # Mn [2] COMBINING GLAGOLITIC LETTER YU..COMBINING GLAGOLITIC LETTER SMALL YUS 1E026..1E02A ; CM # Mn [5] COMBINING GLAGOLITIC LETTER YO..COMBINING GLAGOLITIC LETTER FITA 1E130..1E136 ; CM # Mn [7] NYIAKENG PUACHUE HMONG TONE-B..NYIAKENG PUACHUE HMONG TONE-D +1E2AE ; CM # Mn TOTO SIGN RISING TONE 1E2EC..1E2EF ; CM # Mn [4] WANCHO TONE TUP..WANCHO TONE KOINI 1E8D0..1E8D6 ; CM # Mn [7] MENDE KIKAKUI COMBINING NUMBER TEENS..MENDE KIKAKUI COMBINING NUMBER MILLIONS 1E944..1E94A ; CM # Mn [7] ADLAM ALIF LENGTHENER..ADLAM NUKTA @@ -2270,7 +2330,7 @@ E0001 ; CM # Cf LANGUAGE TAG E0020..E007F ; CM # Cf [96] TAG SPACE..CANCEL TAG E0100..E01EF ; CM # Mn [240] VARIATION SELECTOR-17..VARIATION SELECTOR-256 -# Total code points: 2286 +# Total code points: 2399 # ================================================ @@ -2333,6 +2393,7 @@ A8FC ; BB # Po DEVANAGARI SIGN SIDDHAM 1804..1805 ; BA # Po [2] MONGOLIAN COLON..MONGOLIAN FOUR DOTS 1B5A..1B5B ; BA # Po [2] BALINESE PANTI..BALINESE PAMADA 1B5D..1B60 ; BA # Po [4] BALINESE CARIK PAMUNGKAH..BALINESE PAMENENG +1B7D..1B7E ; BA # Po [2] BALINESE PANTI LANTANG..BALINESE PAMADA LANTANG 1C3B..1C3F ; BA # Po [5] LEPCHA PUNCTUATION TA-ROL..LEPCHA PUNCTUATION TSHOOK 1C7E..1C7F ; BA # Po [2] OL CHIKI PUNCTUATION MUCAAD..OL CHIKI PUNCTUATION DOUBLE MUCAAD 2000..2006 ; BA # Zs [7] EN QUAD..SIX-PER-EM SPACE @@ -2359,6 +2420,7 @@ A8FC ; BB # Po DEVANAGARI SIGN SIDDHAM 2E43..2E4A ; BA # Po [8] DASH WITH LEFT UPTURN..DOTTED SOLIDUS 2E4C ; BA # Po MEDIEVAL COMMA 2E4E..2E4F ; BA # Po [2] PUNCTUS ELEVATUS MARK..CORNISH VERSE DIVIDER +2E5D ; BA # Pd OBLIQUE HYPHEN 3000 ; BA # Zs IDEOGRAPHIC SPACE A4FE..A4FF ; BA # Po [2] LISU PUNCTUATION COMMA..LISU PUNCTUATION FULL STOP A60D ; BA # Po VAI COMMA @@ -2409,7 +2471,7 @@ ABEB ; BA # Po MEETEI MAYEK CHEIKHEI 1BC9F ; BA # Po DUPLOYAN PUNCTUATION CHINOOK FULL STOP 1DA87..1DA8A ; BA # Po [4] SIGNWRITING COMMA..SIGNWRITING COLON -# Total code points: 244 +# Total code points: 247 # ================================================ @@ -2577,8 +2639,9 @@ AADE..AADF ; SA # Po [2] TAI VIET SYMBOL HO HOI..TAI VIET SYMBOL KOI KOI 11727..1172B ; SA # Mn [5] AHOM VOWEL SIGN AW..AHOM SIGN KILLER 1173A..1173B ; SA # No [2] AHOM NUMBER TEN..AHOM NUMBER TWENTY 1173F ; SA # So AHOM SYMBOL VI +11740..11746 ; SA # Lo [7] AHOM LETTER CA..AHOM LETTER LLA -# Total code points: 750 +# Total code points: 757 # ================================================ @@ -3698,8 +3761,10 @@ FF70 ; CJ # Lm HALFWIDTH KATAKANA-HIRAGANA PROLONGED SOUND MARK 1F9BB ; EB # So EAR WITH HEARING AID 1F9CD..1F9CF ; EB # So [3] STANDING PERSON..DEAF PERSON 1F9D1..1F9DD ; EB # So [13] ADULT..ELF +1FAC3..1FAC5 ; EB # So [3] PREGNANT MAN..PERSON WITH CROWN +1FAF0..1FAF6 ; EB # So [7] HAND WITH INDEX FINGER AND THUMB CROSSED..HEART HANDS -# Total code points: 122 +# Total code points: 132 # ================================================ diff --git a/gnu/usr.bin/perl/lib/unicore/extracted/DNumType.txt b/gnu/usr.bin/perl/lib/unicore/extracted/DNumType.txt index 984afe2f17c..6d819ea9902 100644 --- a/gnu/usr.bin/perl/lib/unicore/extracted/DNumType.txt +++ b/gnu/usr.bin/perl/lib/unicore/extracted/DNumType.txt @@ -1,6 +1,6 @@ -# DerivedNumericType-13.0.0.txt -# Date: 2019-09-08, 23:31:09 GMT -# © 2019 Unicode®, Inc. +# DerivedNumericType-14.0.0.txt +# Date: 2021-03-08, 06:22:31 GMT +# © 2021 Unicode®, Inc. # Unicode and the Unicode Logo are registered trademarks of Unicode, Inc. in the U.S. and other countries. # For terms of use, see http://www.unicode.org/terms_of_use.html # @@ -265,6 +265,7 @@ FF10..FF19 ; Decimal # Nd [10] FULLWIDTH DIGIT ZERO..FULLWIDTH DIGIT NINE 11D50..11D59 ; Decimal # Nd [10] MASARAM GONDI DIGIT ZERO..MASARAM GONDI DIGIT NINE 11DA0..11DA9 ; Decimal # Nd [10] GUNJALA GONDI DIGIT ZERO..GUNJALA GONDI DIGIT NINE 16A60..16A69 ; Decimal # Nd [10] MRO DIGIT ZERO..MRO DIGIT NINE +16AC0..16AC9 ; Decimal # Nd [10] TANGSA DIGIT ZERO..TANGSA DIGIT NINE 16B50..16B59 ; Decimal # Nd [10] PAHAWH HMONG DIGIT ZERO..PAHAWH HMONG DIGIT NINE 1D7CE..1D7FF ; Decimal # Nd [50] MATHEMATICAL BOLD DIGIT ZERO..MATHEMATICAL MONOSPACE DIGIT NINE 1E140..1E149 ; Decimal # Nd [10] NYIAKENG PUACHUE HMONG DIGIT ZERO..NYIAKENG PUACHUE HMONG DIGIT NINE @@ -272,6 +273,6 @@ FF10..FF19 ; Decimal # Nd [10] FULLWIDTH DIGIT ZERO..FULLWIDTH DIGIT NINE 1E950..1E959 ; Decimal # Nd [10] ADLAM DIGIT ZERO..ADLAM DIGIT NINE 1FBF0..1FBF9 ; Decimal # Nd [10] SEGMENTED DIGIT ZERO..SEGMENTED DIGIT NINE -# Total code points: 650 +# Total code points: 660 # EOF diff --git a/gnu/usr.bin/perl/lib/unicore/extracted/DNumValues.txt b/gnu/usr.bin/perl/lib/unicore/extracted/DNumValues.txt index f70662acc96..84cb90749af 100644 --- a/gnu/usr.bin/perl/lib/unicore/extracted/DNumValues.txt +++ b/gnu/usr.bin/perl/lib/unicore/extracted/DNumValues.txt @@ -1,6 +1,6 @@ -# DerivedNumericValues-13.0.0.txt -# Date: 2019-09-08, 23:31:10 GMT -# © 2019 Unicode®, Inc. +# DerivedNumericValues-14.0.0.txt +# Date: 2021-03-08, 06:22:32 GMT +# © 2021 Unicode®, Inc. # Unicode and the Unicode Logo are registered trademarks of Unicode, Inc. in the U.S. and other countries. # For terms of use, see http://www.unicode.org/terms_of_use.html # @@ -106,6 +106,7 @@ FF10 ; 0.0 ; ; 0 # Nd FULLWIDTH DIGIT ZERO 11D50 ; 0.0 ; ; 0 # Nd MASARAM GONDI DIGIT ZERO 11DA0 ; 0.0 ; ; 0 # Nd GUNJALA GONDI DIGIT ZERO 16A60 ; 0.0 ; ; 0 # Nd MRO DIGIT ZERO +16AC0 ; 0.0 ; ; 0 # Nd TANGSA DIGIT ZERO 16B50 ; 0.0 ; ; 0 # Nd PAHAWH HMONG DIGIT ZERO 16E80 ; 0.0 ; ; 0 # No MEDEFAIDRIN DIGIT ZERO 1D2E0 ; 0.0 ; ; 0 # No MAYAN NUMERAL ZERO @@ -121,7 +122,7 @@ FF10 ; 0.0 ; ; 0 # Nd FULLWIDTH DIGIT ZERO 1F10B..1F10C ; 0.0 ; ; 0 # No [2] DINGBAT CIRCLED SANS-SERIF DIGIT ZERO..DINGBAT NEGATIVE CIRCLED SANS-SERIF DIGIT ZERO 1FBF0 ; 0.0 ; ; 0 # Nd SEGMENTED DIGIT ZERO -# Total code points: 83 +# Total code points: 84 # ================================================ @@ -520,6 +521,7 @@ FF11 ; 1.0 ; ; 1 # Nd FULLWIDTH DIGIT ONE 1244F ; 1.0 ; ; 1 # Nl CUNEIFORM NUMERIC SIGN ONE BAN2 12458 ; 1.0 ; ; 1 # Nl CUNEIFORM NUMERIC SIGN ONE ESHE3 16A61 ; 1.0 ; ; 1 # Nd MRO DIGIT ONE +16AC1 ; 1.0 ; ; 1 # Nd TANGSA DIGIT ONE 16B51 ; 1.0 ; ; 1 # Nd PAHAWH HMONG DIGIT ONE 16E81 ; 1.0 ; ; 1 # No MEDEFAIDRIN DIGIT ONE 16E94 ; 1.0 ; ; 1 # No MEDEFAIDRIN DIGIT ONE ALTERNATE FORM @@ -544,7 +546,7 @@ FF11 ; 1.0 ; ; 1 # Nd FULLWIDTH DIGIT ONE 1FBF1 ; 1.0 ; ; 1 # Nd SEGMENTED DIGIT ONE 2092A ; 1.0 ; ; 1 # Lo CJK UNIFIED IDEOGRAPH-2092A -# Total code points: 140 +# Total code points: 141 # ================================================ @@ -667,6 +669,7 @@ FF12 ; 2.0 ; ; 2 # Nd FULLWIDTH DIGIT TWO 12456 ; 2.0 ; ; 2 # Nl CUNEIFORM NUMERIC SIGN NIGIDAMIN 12459 ; 2.0 ; ; 2 # Nl CUNEIFORM NUMERIC SIGN TWO ESHE3 16A62 ; 2.0 ; ; 2 # Nd MRO DIGIT TWO +16AC2 ; 2.0 ; ; 2 # Nd TANGSA DIGIT TWO 16B52 ; 2.0 ; ; 2 # Nd PAHAWH HMONG DIGIT TWO 16E82 ; 2.0 ; ; 2 # No MEDEFAIDRIN DIGIT TWO 16E95 ; 2.0 ; ; 2 # No MEDEFAIDRIN DIGIT TWO ALTERNATE FORM @@ -691,7 +694,7 @@ FF12 ; 2.0 ; ; 2 # Nd FULLWIDTH DIGIT TWO 1FBF2 ; 2.0 ; ; 2 # Nd SEGMENTED DIGIT TWO 22390 ; 2.0 ; ; 2 # Lo CJK UNIFIED IDEOGRAPH-22390 -# Total code points: 139 +# Total code points: 140 # ================================================ @@ -809,6 +812,7 @@ FF13 ; 3.0 ; ; 3 # Nd FULLWIDTH DIGIT THREE 12451 ; 3.0 ; ; 3 # Nl CUNEIFORM NUMERIC SIGN THREE BAN2 12457 ; 3.0 ; ; 3 # Nl CUNEIFORM NUMERIC SIGN NIGIDAESH 16A63 ; 3.0 ; ; 3 # Nd MRO DIGIT THREE +16AC3 ; 3.0 ; ; 3 # Nd TANGSA DIGIT THREE 16B53 ; 3.0 ; ; 3 # Nd PAHAWH HMONG DIGIT THREE 16E83 ; 3.0 ; ; 3 # No MEDEFAIDRIN DIGIT THREE 16E96 ; 3.0 ; ; 3 # No MEDEFAIDRIN DIGIT THREE ALTERNATE FORM @@ -835,7 +839,7 @@ FF13 ; 3.0 ; ; 3 # Nd FULLWIDTH DIGIT THREE 22998 ; 3.0 ; ; 3 # Lo CJK UNIFIED IDEOGRAPH-22998 23B1B ; 3.0 ; ; 3 # Lo CJK UNIFIED IDEOGRAPH-23B1B -# Total code points: 140 +# Total code points: 141 # ================================================ @@ -948,6 +952,7 @@ FF14 ; 4.0 ; ; 4 # Nd FULLWIDTH DIGIT FOUR 12452..12453 ; 4.0 ; ; 4 # Nl [2] CUNEIFORM NUMERIC SIGN FOUR BAN2..CUNEIFORM NUMERIC SIGN FOUR BAN2 VARIANT FORM 12469 ; 4.0 ; ; 4 # Nl CUNEIFORM NUMERIC SIGN FOUR U VARIANT FORM 16A64 ; 4.0 ; ; 4 # Nd MRO DIGIT FOUR +16AC4 ; 4.0 ; ; 4 # Nd TANGSA DIGIT FOUR 16B54 ; 4.0 ; ; 4 # Nd PAHAWH HMONG DIGIT FOUR 16E84 ; 4.0 ; ; 4 # No MEDEFAIDRIN DIGIT FOUR 1D2E4 ; 4.0 ; ; 4 # No MAYAN NUMERAL FOUR @@ -972,7 +977,7 @@ FF14 ; 4.0 ; ; 4 # Nd FULLWIDTH DIGIT FOUR 200E2 ; 4.0 ; ; 4 # Lo CJK UNIFIED IDEOGRAPH-200E2 2626D ; 4.0 ; ; 4 # Lo CJK UNIFIED IDEOGRAPH-2626D -# Total code points: 131 +# Total code points: 132 # ================================================ @@ -1088,6 +1093,7 @@ FF15 ; 5.0 ; ; 5 # Nd FULLWIDTH DIGIT FIVE 12454..12455 ; 5.0 ; ; 5 # Nl [2] CUNEIFORM NUMERIC SIGN FIVE BAN2..CUNEIFORM NUMERIC SIGN FIVE BAN2 VARIANT FORM 1246A ; 5.0 ; ; 5 # Nl CUNEIFORM NUMERIC SIGN FIVE U VARIANT FORM 16A65 ; 5.0 ; ; 5 # Nd MRO DIGIT FIVE +16AC5 ; 5.0 ; ; 5 # Nd TANGSA DIGIT FIVE 16B55 ; 5.0 ; ; 5 # Nd PAHAWH HMONG DIGIT FIVE 16E85 ; 5.0 ; ; 5 # No MEDEFAIDRIN DIGIT FIVE 1D2E5 ; 5.0 ; ; 5 # No MAYAN NUMERAL FIVE @@ -1111,7 +1117,7 @@ FF15 ; 5.0 ; ; 5 # Nd FULLWIDTH DIGIT FIVE 1FBF5 ; 5.0 ; ; 5 # Nd SEGMENTED DIGIT FIVE 20121 ; 5.0 ; ; 5 # Lo CJK UNIFIED IDEOGRAPH-20121 -# Total code points: 129 +# Total code points: 130 # ================================================ @@ -1214,6 +1220,7 @@ FF16 ; 6.0 ; ; 6 # Nd FULLWIDTH DIGIT SIX 1244E ; 6.0 ; ; 6 # Nl CUNEIFORM NUMERIC SIGN SIX ASH TENU 1246B ; 6.0 ; ; 6 # Nl CUNEIFORM NUMERIC SIGN SIX U VARIANT FORM 16A66 ; 6.0 ; ; 6 # Nd MRO DIGIT SIX +16AC6 ; 6.0 ; ; 6 # Nd TANGSA DIGIT SIX 16B56 ; 6.0 ; ; 6 # Nd PAHAWH HMONG DIGIT SIX 16E86 ; 6.0 ; ; 6 # No MEDEFAIDRIN DIGIT SIX 1D2E6 ; 6.0 ; ; 6 # No MAYAN NUMERAL SIX @@ -1235,7 +1242,7 @@ FF16 ; 6.0 ; ; 6 # Nd FULLWIDTH DIGIT SIX 1FBF6 ; 6.0 ; ; 6 # Nd SEGMENTED DIGIT SIX 20AEA ; 6.0 ; ; 6 # Lo CJK UNIFIED IDEOGRAPH-20AEA -# Total code points: 113 +# Total code points: 114 # ================================================ @@ -1335,6 +1342,7 @@ FF17 ; 7.0 ; ; 7 # Nd FULLWIDTH DIGIT SEVEN 12441..12443 ; 7.0 ; ; 7 # Nl [3] CUNEIFORM NUMERIC SIGN SEVEN VARIANT FORM IMIN3..CUNEIFORM NUMERIC SIGN SEVEN VARIANT FORM IMIN B 1246C ; 7.0 ; ; 7 # Nl CUNEIFORM NUMERIC SIGN SEVEN U VARIANT FORM 16A67 ; 7.0 ; ; 7 # Nd MRO DIGIT SEVEN +16AC7 ; 7.0 ; ; 7 # Nd TANGSA DIGIT SEVEN 16B57 ; 7.0 ; ; 7 # Nd PAHAWH HMONG DIGIT SEVEN 16E87 ; 7.0 ; ; 7 # No MEDEFAIDRIN DIGIT SEVEN 1D2E7 ; 7.0 ; ; 7 # No MAYAN NUMERAL SEVEN @@ -1356,7 +1364,7 @@ FF17 ; 7.0 ; ; 7 # Nd FULLWIDTH DIGIT SEVEN 1FBF7 ; 7.0 ; ; 7 # Nd SEGMENTED DIGIT SEVEN 20001 ; 7.0 ; ; 7 # Lo CJK UNIFIED IDEOGRAPH-20001 -# Total code points: 112 +# Total code points: 113 # ================================================ @@ -1454,6 +1462,7 @@ FF18 ; 8.0 ; ; 8 # Nd FULLWIDTH DIGIT EIGHT 12444..12445 ; 8.0 ; ; 8 # Nl [2] CUNEIFORM NUMERIC SIGN EIGHT VARIANT FORM USSU..CUNEIFORM NUMERIC SIGN EIGHT VARIANT FORM USSU3 1246D ; 8.0 ; ; 8 # Nl CUNEIFORM NUMERIC SIGN EIGHT U VARIANT FORM 16A68 ; 8.0 ; ; 8 # Nd MRO DIGIT EIGHT +16AC8 ; 8.0 ; ; 8 # Nd TANGSA DIGIT EIGHT 16B58 ; 8.0 ; ; 8 # Nd PAHAWH HMONG DIGIT EIGHT 16E88 ; 8.0 ; ; 8 # No MEDEFAIDRIN DIGIT EIGHT 1D2E8 ; 8.0 ; ; 8 # No MAYAN NUMERAL EIGHT @@ -1474,7 +1483,7 @@ FF18 ; 8.0 ; ; 8 # Nd FULLWIDTH DIGIT EIGHT 1F109 ; 8.0 ; ; 8 # No DIGIT EIGHT COMMA 1FBF8 ; 8.0 ; ; 8 # Nd SEGMENTED DIGIT EIGHT -# Total code points: 108 +# Total code points: 109 # ================================================ @@ -1573,6 +1582,7 @@ FF19 ; 9.0 ; ; 9 # Nd FULLWIDTH DIGIT NINE 12446..12449 ; 9.0 ; ; 9 # Nl [4] CUNEIFORM NUMERIC SIGN NINE VARIANT FORM ILIMMU..CUNEIFORM NUMERIC SIGN NINE VARIANT FORM ILIMMU A 1246E ; 9.0 ; ; 9 # Nl CUNEIFORM NUMERIC SIGN NINE U VARIANT FORM 16A69 ; 9.0 ; ; 9 # Nd MRO DIGIT NINE +16AC9 ; 9.0 ; ; 9 # Nd TANGSA DIGIT NINE 16B59 ; 9.0 ; ; 9 # Nd PAHAWH HMONG DIGIT NINE 16E89 ; 9.0 ; ; 9 # No MEDEFAIDRIN DIGIT NINE 1D2E9 ; 9.0 ; ; 9 # No MAYAN NUMERAL NINE @@ -1594,7 +1604,7 @@ FF19 ; 9.0 ; ; 9 # Nd FULLWIDTH DIGIT NINE 1FBF9 ; 9.0 ; ; 9 # Nd SEGMENTED DIGIT NINE 2F890 ; 9.0 ; ; 9 # Lo CJK COMPATIBILITY IDEOGRAPH-2F890 -# Total code points: 112 +# Total code points: 113 # ================================================ diff --git a/gnu/usr.bin/perl/lib/unicore/lib/InSC/Consona9.pl b/gnu/usr.bin/perl/lib/unicore/lib/InSC/Consona9.pl deleted file mode 100644 index ad2799d7880..00000000000 --- a/gnu/usr.bin/perl/lib/unicore/lib/InSC/Consona9.pl +++ /dev/null @@ -1,22 +0,0 @@ -# !!!!!!! DO NOT EDIT THIS FILE !!!!!!! -# This file is machine-generated by lib/unicore/mktables from the Unicode -# database, Version 13.0.0. Any changes made here will be lost! - -# !!!!!!! INTERNAL PERL USE ONLY !!!!!!! -# This file is for internal use by core Perl only. The format and even the -# name or existence of this file are subject to change without notice. Don't -# use it directly. Use Unicode::UCD to access the Unicode character data -# base. - - -return <<'END'; -V8 -6092 -6093 -6915 -6916 -7041 -7042 -43394 -43395 -END diff --git a/gnu/usr.bin/perl/lib/unicore/mktables b/gnu/usr.bin/perl/lib/unicore/mktables index 89930f5ee6c..de2db8467b2 100644 --- a/gnu/usr.bin/perl/lib/unicore/mktables +++ b/gnu/usr.bin/perl/lib/unicore/mktables @@ -22,6 +22,7 @@ BEGIN { # Get the time the script started running; do it at compilation to require 5.010_001; use strict; use warnings; +use builtin qw(refaddr); use Carp; use Config; use File::Find; @@ -32,7 +33,7 @@ use re "/aa"; use feature 'state'; use feature 'signatures'; -no warnings 'experimental::signatures'; +no warnings qw( experimental::builtin ); sub DEBUG () { 0 } # Set to 0 for production; 1 for development my $debugging_build = $Config{"ccflags"} =~ /-DDEBUGGING/; @@ -48,7 +49,7 @@ sub NON_ASCII_PLATFORM { ord("A") != 65 } # expected, a warning will be generated. If an older version is being # compiled, any bounds tests that fail in the generated test file (-maketest # option) will be marked as TODO. -my $version_of_mk_invlist_bounds = v13.0.0; +my $version_of_mk_invlist_bounds = v14.0.0; ########################################################################## # @@ -698,8 +699,8 @@ my $file_list = 'mktables.lst'; # File to store input and output file names. # nothing on the list has changed since the # previous build my $make_list = 1; # ? Should we write $file_list. Set to always - # make a list so that when the pumpking is - # preparing a release, s/he won't have to do + # make a list so that when the release manager + # is preparing a release, they won't have to do # special things my $glob_list = 0; # ? Should we try to include unknown .txt files # in the input. @@ -946,7 +947,7 @@ my %why_obsolete; # Documentation only { # Closure my $simple = 'Perl uses the more complete version'; - my $unihan = 'Unihan properties are by default not enabled in the Perl core. Instead use CPAN: Unicode::Unihan'; + my $unihan = 'Unihan properties are by default not enabled in the Perl core.'; my $other_properties = 'other properties'; my $contributory = "Used by Unicode internally for generating $other_properties and not intended to be used stand-alone"; @@ -1278,14 +1279,10 @@ my $MAP_PROXIED = 1; # The map table for the property isn't written out, # reconstruct this table my $INTERNAL_ONLY = 2; # The file for this table is written out, but it is # for Perl's internal use only -my $LEGACY_ONLY = 3; # Like $INTERNAL_ONLY, but not actually used by Perl. - # Is for backwards compatibility for applications that - # read the file directly, so it's format is - # unchangeable. -my $SUPPRESSED = 4; # The file for this table is not written out, and as a +my $SUPPRESSED = 3; # The file for this table is not written out, and as a # result, we don't bother to do many computations on # it. -my $PLACEHOLDER = 5; # Like $SUPPRESSED, but we go through all the +my $PLACEHOLDER = 4; # Like $SUPPRESSED, but we go through all the # computations anyway, as the values are needed for # things to work. This happens when we have Perl # extensions that depend on Unicode tables that @@ -1452,7 +1449,7 @@ my @missing_early_files; # Generated list of absent files that we need to my @files_actually_output; # List of files we generated. my @more_Names; # Some code point names are compound; this is used # to store the extra components of them. -my $E_FLOAT_PRECISION = 2; # The minimum number of digits after the decimal +my $E_FLOAT_PRECISION = 3; # The minimum number of digits after the decimal # point of a normalized floating point number # needed to match before we consider it equivalent # to a candidate rational @@ -1498,10 +1495,7 @@ sub objaddr($addr) { # every call, and the program is structured so that this is never called # for a non-blessed object. - no overloading; # If overloaded, numifying below won't work. - - # Numifying a ref gives its address. - return pack 'J', $addr; + return pack 'J', refaddr $addr; } # These are used only if $annotate is true. @@ -1862,7 +1856,7 @@ package main; # Use typeglob to give the anonymous subroutine the name we want *$destroy_name = sub { my $self = shift; - my $addr = do { no overloading; pack 'J', $self; }; + my $addr = pack 'J', refaddr $self; $self->$destroy_callback if $destroy_callback; foreach my $field (keys %{$package_fields{$package}}) { @@ -1958,7 +1952,7 @@ package main; # determine using 'eq' for scalars and '==' otherwise. *$subname = sub ($self, $value) { use strict "refs"; - my $addr = do { no overloading; pack 'J', $self; }; + my $addr = pack 'J', refaddr $self; if (ref $value) { return if grep { $value == $_ } @{$field->{$addr}}; } @@ -1984,13 +1978,13 @@ package main; # than just 'readable_'), then create a subroutine that # assumes the data is an array. Otherwise just a scalar my $subname = "${package}::${protected}$name"; - if (grep { /^a/i } @_ + if (grep { /^a/i } (@accessors) or length($access) > length('readable_')) { no strict "refs"; *$subname = sub ($_addr) { use strict "refs"; - my $addr = do { no overloading; pack 'J', $_addr; }; + my $addr = pack 'J', refaddr $_addr; if (ref $field->{$addr} ne 'ARRAY') { my $type = ref $field->{$addr}; $type = 'scalar' unless $type; @@ -2011,8 +2005,7 @@ package main; no strict "refs"; *$subname = sub ($addr) { use strict "refs"; - no overloading; - return $field->{pack 'J', $addr}; + return $field->{pack 'J', refaddr $addr}; } } } @@ -2022,8 +2015,7 @@ package main; *$subname = sub ($self, $value) { use strict "refs"; # $self is $_[0]; $value is $_[1] - no overloading; - $field->{pack 'J', $self} = $value; + $field->{pack 'J', refaddr $self} = $value; return; } } @@ -2328,7 +2320,7 @@ sub trace { return main::trace(@_); } my $class = shift; my $self = bless \do{ my $anonymous_scalar }, $class; - my $addr = do { no overloading; pack 'J', $self; }; + my $addr = pack 'J', refaddr $self; # Set defaults $handler{$addr} = \&main::process_generic_property_file; @@ -2644,7 +2636,7 @@ END ".=" => \&main::_operator_dot_equal, ; - sub _operator_stringify($self) { + sub _operator_stringify($self, $other="", $reversed=0) { return __PACKAGE__ . " object for " . $self->file; } @@ -2656,7 +2648,7 @@ END # flag to make sure extracted files are processed early state $seen_non_extracted = 0; - my $addr = do { no overloading; pack 'J', $self; }; + my $addr = pack 'J', refaddr $self; my $file = $file{$addr}; @@ -2903,7 +2895,7 @@ END # been added via insert_lines() will be returned in $_ before the file # is read again. - my $addr = do { no overloading; pack 'J', $self; }; + my $addr = pack 'J', refaddr $self; # Here the file is open (or if the handle is not a ref, is an open # 'virtual' file). Get the next line; any inserted lines get priority @@ -3084,7 +3076,7 @@ END # insertion code will sort and coalesce the individual code points # into appropriate ranges.) - my $addr = do { no overloading; pack 'J', $self; }; + my $addr = pack 'J', refaddr $self; while (1) { @@ -3159,7 +3151,7 @@ END # # an each_line_handler() on the line. # # my $self = shift; -# my $addr = do { no overloading; pack 'J', $self; }; +# my $addr = pack 'J', refaddr $self; # # foreach my $inserted_ref (@{$added_lines{$addr}}) { # my ($adjusted, $line) = @{$inserted_ref}; @@ -3198,8 +3190,7 @@ END # Each inserted line is an array, with the first element being 0 to # indicate that this line hasn't been adjusted, and needs to be # processed. - no overloading; - push @{$added_lines{pack 'J', $self}}, map { [ 0, $_ ] } @lines; + push @{$added_lines{pack 'J', refaddr $self}}, map { [ 0, $_ ] } @lines; return; } @@ -3217,12 +3208,11 @@ END # use that to call only those handlers whose index is after it on the # stack. But this is overkill for what is needed now. - trace $_[0] if main::DEBUG && $to_trace; + trace $self if main::DEBUG && $to_trace; # Each inserted line is an array, with the first element being 1 to # indicate that this line has been adjusted - no overloading; - push @{$added_lines{pack 'J', $self}}, map { [ 1, $_ ] } @lines; + push @{$added_lines{pack 'J', refaddr $self}}, map { [ 1, $_ ] } @lines; return; } @@ -3232,7 +3222,7 @@ END # element, and the property in the 2nd. However, since these lines # can be stacked up, the return is an array of all these arrays. - my $addr = do { no overloading; pack 'J', $self; }; + my $addr = pack 'J', refaddr $self; # If not accepting a list return, just return the first one. return shift @{$missings{$addr}} unless wantarray; @@ -3258,8 +3248,6 @@ END # Find what code points are assigned in this release main::calculate_Assigned() if ! defined $Assigned; - my $addr = do { no overloading; pack 'J', $self; }; - my ($range, @remainder) = split /\s*;\s*/, $_, -1; # -1 => retain trailing null fields @@ -3306,7 +3294,7 @@ END # Hangul syllables in this release only are something else, so if # using such data, we have to override it - my $addr = do { no overloading; pack 'J', $self; }; + my $addr = pack 'J', refaddr $self; my $object = main::property_ref($property{$addr}); $object->add_map($FIRST_REMOVED_HANGUL_SYLLABLE, @@ -3318,9 +3306,7 @@ END sub _insert_property_into_line($self) { # Add a property field to $_, if this file requires it. - my $addr = do { no overloading; pack 'J', $self; }; - my $property = $property{$addr}; - + my $property = $property{pack 'J', refaddr $self}; $_ =~ s/(;|$)/; $property$1/; return; } @@ -3332,7 +3318,7 @@ END # only outputs the first instance of each message, incrementing a # count so the totals can be output at the end of the file. - my $addr = do { no overloading; pack 'J', $self; }; + my $addr = pack 'J', refaddr $self; $message = 'Unexpected line' unless $message; @@ -3368,12 +3354,6 @@ package Multi_Default; # defaults, and for all but that final default, an eval string that generates # the class that it applies to. -use strict; -use warnings; - -use feature 'signatures'; -no warnings 'experimental::signatures'; - { # Closure main::setup_package(); @@ -3404,7 +3384,7 @@ no warnings 'experimental::signatures'; my $class = shift; my $self = bless \do{my $anonymous_scalar}, $class; - my $addr = do { no overloading; pack 'J', $self; }; + my $addr = pack 'J', refaddr $self; while (@_ > 1) { my $default = shift; @@ -3420,9 +3400,7 @@ no warnings 'experimental::signatures'; sub get_next_defaults($self) { # Iterates and returns the next class of defaults. - my $addr = do { no overloading; pack 'J', $self; }; - - return each %{$class_defaults{$addr}}; + return each %{$class_defaults{pack 'J', refaddr $self}}; } } @@ -3432,12 +3410,6 @@ package Alias; # including some attributes. Everything is currently setup in the # constructor. -use strict; -use warnings; - -use feature 'signatures'; -no warnings 'experimental::signatures'; - { # Closure @@ -3475,7 +3447,7 @@ no warnings 'experimental::signatures'; my $class = shift; my $self = bless \do { my $anonymous_scalar }, $class; - my $addr = do { no overloading; pack 'J', $self; }; + my $addr = pack 'J', refaddr $self; $name{$addr} = shift; $loose_match{$addr} = shift; @@ -3509,12 +3481,6 @@ package Range; # map to. Type 0 values have the standardized version of the value stored as # well, so as to not have to recalculate it a lot. -use strict; -use warnings; - -use feature 'signatures'; -no warnings 'experimental::signatures'; - sub trace { return main::trace(@_); } { # Closure @@ -3541,7 +3507,7 @@ sub trace { return main::trace(@_); } sub new($class, $_addr, $_end, @_args) { my $self = bless \do { my $anonymous_scalar }, $class; - my $addr = do { no overloading; pack 'J', $self; }; + my $addr = pack 'J', refaddr $self; $start{$addr} = $_addr; $end{$addr} = $_end; @@ -3566,8 +3532,8 @@ sub trace { return main::trace(@_); } ".=" => \&main::_operator_dot_equal, ; - sub _operator_stringify($self) { - my $addr = do { no overloading; pack 'J', $self; }; + sub _operator_stringify($self, $other="", $reversed=0) { + my $addr = pack 'J', refaddr $self; # Output it like '0041..0065 (value)' my $return = sprintf("%04X", $start{$addr}) @@ -3590,7 +3556,7 @@ sub trace { return main::trace(@_); } # of writing there are 368676 non-special objects, but the standard # form is only requested for 22047 of them - ie about 6%. - my $addr = do { no overloading; pack 'J', $self; }; + my $addr = pack 'J', refaddr $self; return $standard_form{$addr} if defined $standard_form{$addr}; @@ -3602,7 +3568,7 @@ sub trace { return main::trace(@_); } sub dump($self, $indent) { # Human, not machine readable. For machine readable, comment out this # entire routine and let the standard one take effect. - my $addr = do { no overloading; pack 'J', $self; }; + my $addr = pack 'J', refaddr $self; my $return = $indent . sprintf("%04X", $start{$addr}) @@ -3621,12 +3587,6 @@ sub trace { return main::trace(@_); } package _Range_List_Base; -use strict; -use warnings; - -use feature 'signatures'; -no warnings 'experimental::signatures'; - # Base class for range lists. A range list is simply an ordered list of # ranges, so that the ranges with the lowest starting numbers are first in it. # @@ -3694,7 +3654,7 @@ sub trace { return main::trace(@_); } return _union($class, $initialize, %args) if defined $initialize; $self = bless \do { my $anonymous_scalar }, $class; - my $addr = do { no overloading; pack 'J', $self; }; + my $addr = pack 'J', refaddr $self; # Optional parent object, only for debug info. $owner_name_of{$addr} = delete $args{'Owner'}; @@ -3723,8 +3683,8 @@ sub trace { return main::trace(@_); } ".=" => \&main::_operator_dot_equal, ; - sub _operator_stringify($self) { - my $addr = do { no overloading; pack 'J', $self; }; + sub _operator_stringify($self, $other="", $reversed=0) { + my $addr = pack 'J', refaddr $self; return "Range_List attached to '$owner_name_of{$addr}'" if $owner_name_of{$addr}; @@ -3789,8 +3749,7 @@ sub trace { return main::trace(@_); } if (! defined $arg) { my $message = ""; if (defined $self) { - no overloading; - $message .= $owner_name_of{pack 'J', $self}; + $message .= $owner_name_of{pack 'J', refaddr $self}; } Carp::my_carp_bug($message . "Undefined argument to _union. No union done."); return; @@ -3815,8 +3774,7 @@ sub trace { return main::trace(@_); } else { my $message = ""; if (defined $self) { - no overloading; - $message .= $owner_name_of{pack 'J', $self}; + $message .= $owner_name_of{pack 'J', refaddr $self}; } Carp::my_carp_bug($message . "Cannot take the union of a $type. No union done."); return; @@ -3863,8 +3821,7 @@ sub trace { return main::trace(@_); } } sub range_count($self) { # Return the number of ranges in the range list - no overloading; - return scalar @{$ranges{pack 'J', $self}}; + return scalar @{$ranges{pack 'J', refaddr $self}}; } sub min($self) { @@ -3874,7 +3831,7 @@ sub trace { return main::trace(@_); } # and having to worry about changing it as ranges are added and # deleted. - my $addr = do { no overloading; pack 'J', $self; }; + my $addr = pack 'J', refaddr $self; # If the range list is empty, return a large value that isn't adjacent # to any that could be in the range list, for simpler tests @@ -3895,8 +3852,7 @@ sub trace { return main::trace(@_); } # range[$i-1]->end < $codepoint <= range[$i]->end # So is in the table if and only iff it is at least the start position # of range $i. - no overloading; - return 0 if $ranges{pack 'J', $self}->[$i]->start > $codepoint; + return 0 if $ranges{pack 'J', refaddr $self}->[$i]->start > $codepoint; return $i + 1; } @@ -3906,8 +3862,7 @@ sub trace { return main::trace(@_); } return unless $i; # contains() returns 1 beyond where we should look - no overloading; - return $ranges{pack 'J', $self}->[$i-1]; + return $ranges{pack 'J', refaddr $self}->[$i-1]; } sub value_of($self, $codepoint) { @@ -3933,7 +3888,7 @@ sub trace { return main::trace(@_); } # range[$i-1]->end < $codepoint <= range[$i]->end # Returns undef if no such $i is possible (e.g. at end of table), or # if there is an error. - my $addr = do { no overloading; pack 'J', $self; }; + my $addr = pack 'J', refaddr $self; return if $code_point > $max{$addr}; my $r = $ranges{$addr}; # The current list of ranges @@ -4121,7 +4076,7 @@ sub trace { return main::trace(@_); } Carp::carp_extra_args(\%args) if main::DEBUG && %args; - my $addr = do { no overloading; pack 'J', $self; }; + my $addr = pack 'J', refaddr $self; if ($operation ne '+' && $operation ne '-') { Carp::my_carp_bug("$owner_name_of{$addr}First parameter to _add_delete must be '+' or '-'. No action taken."); @@ -4766,15 +4721,14 @@ sub trace { return main::trace(@_); } } sub reset_each_range($self) { # reset the iterator for each_range(); - no overloading; - undef $each_range_iterator{pack 'J', $self}; + undef $each_range_iterator{pack 'J', refaddr $self}; return; } sub each_range($self) { # Iterate over each range in a range list. Results are undefined if # the range list is changed during the iteration. - my $addr = do { no overloading; pack 'J', $self; }; + my $addr = pack 'J', refaddr $self; return if $self->is_empty; @@ -4788,7 +4742,7 @@ sub trace { return main::trace(@_); } } sub count($self) { # Returns count of code points in range list - my $addr = do { no overloading; pack 'J', $self; }; + my $addr = pack 'J', refaddr $self; my $count = 0; foreach my $range (@{$ranges{$addr}}) { @@ -4802,15 +4756,14 @@ sub trace { return main::trace(@_); } } sub is_empty($self) { # Returns boolean as to if a range list is empty - no overloading; - return scalar @{$ranges{pack 'J', $self}} == 0; + return scalar @{$ranges{pack 'J', refaddr $self}} == 0; } sub hash($self) { # Quickly returns a scalar suitable for separating tables into # buckets, i.e. it is a hash function of the contents of a table, so # there are relatively few conflicts. - my $addr = do { no overloading; pack 'J', $self; }; + my $addr = pack 'J', refaddr $self; # These are quickly computable. Return looks like 'min..max;count' return $self->min . "..$max{$addr};" . scalar @{$ranges{$addr}}; @@ -4820,12 +4773,6 @@ sub trace { return main::trace(@_); } package Range_List; use parent '-norequire', '_Range_List_Base'; -use warnings; -use strict; - -use feature 'signatures'; -no warnings 'experimental::signatures'; - # A Range_List is a range list for match tables; i.e. the range values are # not significant. Thus a number of operations can be safely added to it, # such as inversion, intersection. Note that union is also an unsafe @@ -5147,7 +5094,6 @@ sub trace { return main::trace(@_); } # Return a code point that's part of the range list. Returns nothing # if the table is empty or we can't find a suitable code point. This # used only for making the test script. - my $addr = do { no overloading; pack 'J', $self; }; # On first pass, don't choose less desirable code points; if no good # one is found, repeat, allowing a less desirable one to be selected. @@ -5185,12 +5131,6 @@ sub trace { return main::trace(@_); } package Range_Map; use parent '-norequire', '_Range_List_Base'; -use strict; -use warnings; - -use feature 'signatures'; -no warnings 'experimental::signatures'; - # A Range_Map is a range list in which the range values (called maps) are # significant, and hence shouldn't be manipulated by our other code, which # could be ambiguous or lose things. For example, in taking the union of two @@ -5229,12 +5169,6 @@ no warnings 'experimental::signatures'; package _Base_Table; -use strict; -use warnings; - -use feature 'signatures'; -no warnings 'experimental::signatures'; - # A table is the basic data structure that gets written out into a file for # use by the Perl core. This is the abstract base class implementing the # common elements from the derived ones. A list of the methods to be @@ -5378,7 +5312,7 @@ sub trace { return main::trace(@_); } my $class = shift; my $self = bless \do { my $anonymous_scalar }, $class; - my $addr = do { no overloading; pack 'J', $self; }; + my $addr = pack 'J', refaddr $self; my %args = @_; @@ -5563,8 +5497,7 @@ END sub ranges { # Returns the array of ranges associated with this table. - no overloading; - return $range_list{pack 'J', shift}->ranges; + return $range_list{pack 'J', refaddr shift}->ranges; } sub add_alias { @@ -5605,7 +5538,7 @@ END # release $name = ucfirst($name) unless $name =~ /^k[A-Z]/; - my $addr = do { no overloading; pack 'J', $self; }; + my $addr = pack 'J', refaddr $self; # Figure out if should be loosely matched if not already specified. if (! defined $loose_match) { @@ -5666,8 +5599,7 @@ END # This name may be shorter than any existing ones, so clear the cache # of the shortest, so will have to be recalculated. - no overloading; - undef $short_name{pack 'J', $self}; + undef $short_name{pack 'J', refaddr $self}; return; } @@ -5686,7 +5618,7 @@ END # Any name with alphabetics is preferred over an all numeric one, even # if longer. - my $addr = do { no overloading; pack 'J', $self; }; + my $addr = pack 'J', refaddr $self; # For efficiency, don't recalculate, but this means that adding new # aliases could change what the shortest is, so the code that does @@ -5789,15 +5721,13 @@ END } sub add_description($self, $description) { # Adds the parameter as a short description. - no overloading; - push @{$description{pack 'J', $self}}, $description; + push @{$description{pack 'J', refaddr $self}}, $description; return; } sub add_note($self, $note) { # Adds the parameter as a short note. - no overloading; - push @{$note{pack 'J', $self}}, $note; + push @{$note{pack 'J', refaddr $self}}, $note; return; } @@ -5808,8 +5738,7 @@ END chomp $comment; - no overloading; - push @{$comment{pack 'J', $self}}, $comment; + push @{$comment{pack 'J', refaddr $self}}, $comment; return; } @@ -5819,7 +5748,7 @@ END # context, returns the array of comments. In scalar, returns a string # of each element joined together with a period ending each. - my $addr = do { no overloading; pack 'J', $self; }; + my $addr = pack 'J', refaddr $self; my @list = @{$comment{$addr}}; return @list if wantarray; my $return = ""; @@ -5836,7 +5765,7 @@ END # Initialize the table with the argument which is any valid # initialization for range lists. - my $addr = do { no overloading; pack 'J', $self; }; + my $addr = pack 'J', refaddr $self; # Replace the current range list with a new one of the same exact # type. @@ -5890,7 +5819,7 @@ END # a range equals this one, don't write # the range - my $addr = do { no overloading; pack 'J', $self; }; + my $addr = pack 'J', refaddr $self; my $write_as_invlist = $write_as_invlist{$addr}; # Start with the header @@ -6511,7 +6440,7 @@ END $next_start = 0; redo; } - } + } # End of redo block } # End of loop through all the table's ranges push @OUT, @annotation; # Add orphaned annotation, if any @@ -6546,7 +6475,7 @@ END sub set_status($self, $status, $info) { # Set the table's status # status The status enum value # info Any message associated with it. - my $addr = do { no overloading; pack 'J', $self; }; + my $addr = pack 'J', refaddr $self; $status{$addr} = $status; $status_info{$addr} = $info; @@ -6554,7 +6483,7 @@ END } sub set_fate($self, $fate, $reason=undef) { # Set the fate of a table - my $addr = do { no overloading; pack 'J', $self; }; + my $addr = pack 'J', refaddr $self; return if $fate{$addr} == $fate; # If no-op @@ -6588,7 +6517,7 @@ END # Don't allow changes to the table from now on. This stores a stack # trace of where it was called, so that later attempts to modify it # can immediately show where it got locked. - my $addr = do { no overloading; pack 'J', $self; }; + my $addr = pack 'J', refaddr $self; $locked{$addr} = ""; @@ -6612,7 +6541,7 @@ END sub carp_if_locked($self) { # Return whether a table is locked or not, and, by the way, complain # if is locked - my $addr = do { no overloading; pack 'J', $self; }; + my $addr = pack 'J', refaddr $self; return 0 if ! $locked{$addr}; Carp::my_carp_bug("Can't modify a locked table. Stack trace of locking:\n$locked{$addr}\n\n"); @@ -6620,8 +6549,7 @@ END } sub set_file_path($self, @path) { # Set the final directory path for this table - no overloading; - @{$file_path{pack 'J', $self}} = @path; + @{$file_path{pack 'J', refaddr $self}} = @path; return } @@ -6717,23 +6645,13 @@ sub trace { return main::trace(@_); } main::set_access('anomalous_entries', # Append singular, read plural \%anomalous_entries, 'readable_array'); - - my %replacement_property; - # Certain files are unused by Perl itself, and are kept only for backwards - # compatibility for programs that used them before Unicode::UCD existed. - # These are termed legacy properties. At some point they may be removed, - # but for now mark them as legacy. If non empty, this is the name of the - # property to use instead (i.e., the modern equivalent). - main::set_access('replacement_property', \%replacement_property, 'r'); - my %to_output_map; # Enum as to whether or not to write out this map table, and how: # 0 don't output # $EXTERNAL_MAP means its existence is noted in the documentation, and # it should not be removed nor its format changed. This # is done for those files that have traditionally been - # output. Maps of legacy-only properties default to - # this. + # output. # $INTERNAL_MAP means Perl reserves the right to do anything it wants # with this file # $OUTPUT_ADJUSTED means that it is an $INTERNAL_MAP, and instead of @@ -6758,17 +6676,9 @@ sub trace { return main::trace(@_); } my $default_map = delete $args{'Default_Map'}; my $property = delete $args{'_Property'}; my $full_name = delete $args{'Full_Name'}; - my $replacement_property = delete $args{'Replacement_Property'} // ""; my $to_output_map = delete $args{'To_Output_Map'}; - # Rest of parameters passed on; legacy properties have several common - # other attributes - if ($replacement_property) { - $args{"Fate"} = $LEGACY_ONLY; - $args{"Range_Size_1"} = 1; - $args{"Perl_Extension"} = 1; - $args{"UCD"} = 0; - } + # Rest of parameters passed on my $range_list = Range_Map->new(Owner => $property); @@ -6781,13 +6691,10 @@ sub trace { return main::trace(@_); } Write_As_Invlist => 0, %args); - my $addr = do { no overloading; pack 'J', $self; }; + my $addr = pack 'J', refaddr $self; $anomalous_entries{$addr} = []; $default_map{$addr} = $default_map; - $replacement_property{$addr} = $replacement_property; - $to_output_map = $EXTERNAL_MAP if ! defined $to_output_map - && $replacement_property; $to_output_map{$addr} = $to_output_map; $self->initialize($initialize) if defined $initialize; @@ -6800,8 +6707,7 @@ sub trace { return main::trace(@_); } qw("") => "_operator_stringify", ; - sub _operator_stringify { - my $self = shift; + sub _operator_stringify($self, $other="", $reversed=0) { my $name = $self->property->full_name; $name = '""' if $name eq ""; @@ -6820,7 +6726,7 @@ sub trace { return main::trace(@_); } sub add_map { # Add a range of code points to the list of specially-handled code - # points. $MULTI_CP is assumed if the type of special is not passed + # points. 0 is assumed if the type of special is not passed # in. my $self = shift; @@ -6835,8 +6741,6 @@ sub trace { return main::trace(@_); } # Can't change the table if locked. return if $self->carp_if_locked; - my $addr = do { no overloading; pack 'J', $self; }; - $self->_range_list->add_map($lower, $upper, $string, @_, @@ -6847,7 +6751,7 @@ sub trace { return main::trace(@_); } sub append_to_body($self) { # Adds to the written HERE document of the table's body any anomalous # entries in the table.. - my $addr = do { no overloading; pack 'J', $self; }; + my $addr = pack 'J', refaddr $self; return "" unless @{$anomalous_entries{$addr}}; return join("\n", @{$anomalous_entries{$addr}}) . "\n"; @@ -6869,9 +6773,6 @@ sub trace { return main::trace(@_); } return; } - my $addr = do { no overloading; pack 'J', $self; }; - my $other_addr = do { no overloading; pack 'J', $other; }; - local $to_trace = 0 if main::DEBUG; my $self_range_list = $self->_range_list; @@ -6899,7 +6800,7 @@ sub trace { return main::trace(@_); } . " present, must be 'full_name'"); } - my $addr = do { no overloading; pack 'J', $self; }; + my $addr = pack 'J', refaddr $self; # Convert the input to the standard equivalent, if any (won't have any # for $STRING properties) @@ -6944,7 +6845,7 @@ sub trace { return main::trace(@_); } sub to_output_map($self) { # Returns boolean: should we write this map table? - my $addr = do { no overloading; pack 'J', $self; }; + my $addr = pack 'J', refaddr $self; # If overridden, use that return $to_output_map{$addr} if defined $to_output_map{$addr}; @@ -6994,12 +6895,8 @@ sub trace { return main::trace(@_); } $return .= $INTERNAL_ONLY_HEADER; } else { - my $property_name = $self->property->replacement_property; - - # The legacy-only properties were gotten above; but there are some - # other properties whose files are in current use that have fixed - # formats. - $property_name = $self->property->full_name unless $property_name; + # Other properties have fixed formats. + my $property_name = $self->property->full_name; $return .= <to_output_map; - my $addr = do { no overloading; pack 'J', $self; }; + my $addr = pack 'J', refaddr $self; my $property = $self->property; @@ -7087,7 +6984,7 @@ END else { my $map_to; if ($default_map eq "") { - $map_to = 'the null string'; + $map_to = 'the empty string'; } elsif ($default_map eq $CODE_POINT) { $map_to = "itself"; @@ -7205,7 +7102,7 @@ END # Called in the middle of write when it finds a range it doesn't know # how to handle. - my $addr = do { no overloading; pack 'J', $self; }; + my $addr = pack 'J', refaddr $self; my $type = $range->type; @@ -7347,7 +7244,7 @@ END # be for all ranges missing from it. It also includes any code points # which have map_types that don't go in the main table. - my $addr = do { no overloading; pack 'J', $self; }; + my $addr = pack 'J', refaddr $self; my $name = $self->property->swash_name; @@ -7434,7 +7331,7 @@ END $return .= ' # code point maps to itself'; } elsif ($default_map eq "") { - $return .= ' # code point maps to the null string'; + $return .= ' # code point maps to the empty string'; } $return .= "\n"; @@ -7446,7 +7343,7 @@ END sub write($self) { # Write the table to the file. - my $addr = do { no overloading; pack 'J', $self; }; + my $addr = pack 'J', refaddr $self; # Clear the temporaries undef @multi_code_point_maps; @@ -7713,7 +7610,7 @@ sub trace { return main::trace(@_); } Format => $EMPTY_FORMAT, Write_As_Invlist => 1, ); - my $addr = do { no overloading; pack 'J', $self; }; + my $addr = pack 'J', refaddr $self; $conflicting{$addr} = [ ]; $equivalents{$addr} = [ ]; @@ -7770,8 +7667,6 @@ sub trace { return main::trace(@_); } return if $self->carp_if_locked; - my $addr = do { no overloading; pack 'J', $self; }; - if (ref $other) { # Change the range list of this table to be the @@ -7821,8 +7716,7 @@ sub trace { return main::trace(@_); } }, ; - sub _operator_stringify { - my $self = shift; + sub _operator_stringify($self, $other="", $reversed=0) { my $name = $self->complete_name; return "Table '$name'"; @@ -7880,7 +7774,7 @@ sub trace { return main::trace(@_); } # be an optional parameter. Carp::carp_extra_args(\@_) if main::DEBUG && @_; - my $addr = do { no overloading; pack 'J', $self; }; + my $addr = pack 'J', refaddr $self; # Check if the conflicting name is exactly the same as any existing # alias in this table (as long as there is a real object there to @@ -7923,8 +7817,7 @@ sub trace { return main::trace(@_); } } # Two tables are equivalent if they have the same leader. - no overloading; - return $leader{pack 'J', $self} == $leader{pack 'J', $other}; + return $leader{pack 'J', refaddr $self} == $leader{pack 'J', refaddr $other}; return; } @@ -7961,7 +7854,7 @@ sub trace { return main::trace(@_); } my $are_equivalent = $self->is_set_equivalent_to($other); return if ! defined $are_equivalent || $are_equivalent; - my $addr = do { no overloading; pack 'J', $self; }; + my $addr = pack 'J', refaddr $self; my $current_leader = ($related) ? $parent{$addr} : $leader{$addr}; if ($related) { @@ -8000,8 +7893,8 @@ sub trace { return main::trace(@_); } return; } - my $leader = do { no overloading; pack 'J', $current_leader; }; - my $other_addr = do { no overloading; pack 'J', $other; }; + my $leader = pack 'J', refaddr $current_leader; + my $other_addr = pack 'J', refaddr $other; # Any tables that are equivalent to or children of this table must now # instead be equivalent to or (children) to the new leader (parent), @@ -8018,7 +7911,7 @@ sub trace { return main::trace(@_); } next if $table == $other; trace "setting $other to be the leader of $table, status=$status" if main::DEBUG && $to_trace; - my $table_addr = do { no overloading; pack 'J', $table; }; + my $table_addr = pack 'J', refaddr $table; $leader{$table_addr} = $other; $matches_all{$table_addr} = $matches_all; $self->_set_range_list($other->_range_list); @@ -8051,8 +7944,7 @@ sub trace { return main::trace(@_); } Carp::my_carp_bug("Can't set $self to be the complement of $other, which itself is the complement of " . $other->complement); return; } - my $addr = do { no overloading; pack 'J', $self; }; - $complement{$addr} = $other; + $complement{pack 'J', refaddr $self} = $other; # Be sure the other property knows we are depending on them; or the # other table if it is one in the current property. @@ -8340,7 +8232,7 @@ sub trace { return main::trace(@_); } return unless $debugging_build; - my $addr = do { no overloading; pack 'J', $leader; }; + my $addr = pack 'J', refaddr $leader; if ($leader{$addr} != $leader) { Carp::my_carp_bug(<table('N') && defined (my $yes = $property->table('Y'))) { - my $yes_addr = do { no overloading; pack 'J', $yes; }; + my $yes_addr = pack 'J', refaddr $yes; @yes_perl_synonyms = grep { $_->property == $perl } main::uniques($yes, @@ -8424,12 +8316,12 @@ END my @conflicting; # Will hold the table conflicts. # Look at the parent, any yes synonyms, and all the children - my $parent_addr = do { no overloading; pack 'J', $parent; }; + my $parent_addr = pack 'J', refaddr $parent; for my $table ($parent, @yes_perl_synonyms, @{$children{$parent_addr}}) { - my $table_addr = do { no overloading; pack 'J', $table; }; + my $table_addr = pack 'J', refaddr $table; my $table_property = $table->property; # Tables are separated by a blank line to create a grouping. @@ -8894,7 +8786,7 @@ sub trace { return main::trace(@_) if main::DEBUG && $to_trace } my %args = @_; $self = bless \do { my $anonymous_scalar }, $class; - my $addr = do { no overloading; pack 'J', $self; }; + my $addr = pack 'J', refaddr $self; $directory{$addr} = delete $args{'Directory'}; $file{$addr} = delete $args{'File'}; @@ -8938,8 +8830,8 @@ sub trace { return main::trace(@_) if main::DEBUG && $to_trace } '-=' => "_minus_and_equal", ; - sub _operator_stringify { - return "Property '" . shift->full_name . "'"; + sub _operator_stringify($self, $other="", $reversed=0) { + return "Property '" . $self->full_name . "'"; } sub _minus_and_equal($self, $other, $reversed=0) { @@ -8957,8 +8849,7 @@ sub trace { return main::trace(@_) if main::DEBUG && $to_trace } return; } else { - no overloading; - $map{pack 'J', $self}->delete_range($other, $other); + $map{pack 'J', refaddr $self}->delete_range($other, $other); } return $self; } @@ -8971,7 +8862,7 @@ sub trace { return main::trace(@_) if main::DEBUG && $to_trace } my $name = shift; my %args = @_; - my $addr = do { no overloading; pack 'J', $self; }; + my $addr = pack 'J', refaddr $self; my $table = $table_ref{$addr}{$name}; my $standard_name = main::standardize($name); @@ -9045,7 +8936,7 @@ sub trace { return main::trace(@_) if main::DEBUG && $to_trace } sub delete_match_table($self, $table_to_remove) { # Delete the table referred to by $2 from the property $1. - my $addr = do { no overloading; pack 'J', $self; }; + my $addr = pack 'J', refaddr $self; # Remove all names that refer to it. foreach my $key (keys %{$table_ref{$addr}}) { @@ -9060,7 +8951,7 @@ sub trace { return main::trace(@_) if main::DEBUG && $to_trace } sub table($self, $name) { # Return a pointer to the match table (with name given by the # parameter) associated with this property; undef if none. - my $addr = do { no overloading; pack 'J', $self; }; + my $addr = pack 'J', refaddr $self; return $table_ref{$addr}{$name} if defined $table_ref{$addr}{$name}; @@ -9078,8 +8969,7 @@ sub trace { return main::trace(@_) if main::DEBUG && $to_trace } # Return a list of pointers to all the match tables attached to this # property - no overloading; - return main::uniques(values %{$table_ref{pack 'J', shift}}); + return main::uniques(values %{$table_ref{pack 'J', refaddr shift}}); } sub directory { @@ -9088,7 +8978,7 @@ sub trace { return main::trace(@_) if main::DEBUG && $to_trace } # priority; 'undef' is returned if the type isn't defined; # or $map_directory for everything else. - my $addr = do { no overloading; pack 'J', shift; }; + my $addr = pack 'J', refaddr shift; return $directory{$addr} if defined $directory{$addr}; return undef if $type{$addr} == $UNKNOWN; @@ -9105,16 +8995,13 @@ sub trace { return main::trace(@_) if main::DEBUG && $to_trace } # but otherwise the standard name is used. This is different from the # external_name, so that the rest of the files, like in lib can use # the standard name always, without regard to historical precedent. - my $addr = do { no overloading; pack 'J', $self; }; + my $addr = pack 'J', refaddr $self; # Swash names are used only on either - # 1) legacy-only properties, because the formats for these are - # unchangeable, and they have had these lines in them; or - # 2) regular or internal-only map tables - # 3) otherwise there should be no access to the + # 1) regular or internal-only map tables + # 2) otherwise there should be no access to the # property map table from other parts of Perl. return if $map{$addr}->fate != $ORDINARY - && $map{$addr}->fate != $LEGACY_ONLY && ! ($map{$addr}->name =~ /^_/ && $map{$addr}->fate == $INTERNAL_ONLY); @@ -9129,7 +9016,7 @@ sub trace { return main::trace(@_) if main::DEBUG && $to_trace } # The whole point of this pseudo property is match tables. return 1 if $self == $perl; - my $addr = do { no overloading; pack 'J', $self; }; + my $addr = pack 'J', refaddr $self; # Don't generate tables of code points that match the property values # of a string property. Such a list would most likely have many @@ -9156,8 +9043,7 @@ sub trace { return main::trace(@_) if main::DEBUG && $to_trace } return; } - no overloading; - return $map{pack 'J', $self}->map_add_or_replace_non_nulls($map{pack 'J', $other}); + return $map{pack 'J', refaddr $self}->map_add_or_replace_non_nulls($map{pack 'J', refaddr $other}); } sub set_proxy_for { @@ -9193,7 +9079,7 @@ sub trace { return main::trace(@_) if main::DEBUG && $to_trace } return; } - { no overloading; $type{pack 'J', $self} = $type; } + $type{pack 'J', refaddr $self} = $type; return if $type != $BINARY && $type != $FORCED_BINARY; my $yes = $self->table('Y'); @@ -9232,7 +9118,7 @@ sub trace { return main::trace(@_) if main::DEBUG && $to_trace } my $map = shift; # What the range maps to. # Rest of parameters passed on. - my $addr = do { no overloading; pack 'J', $self; }; + my $addr = pack 'J', refaddr $self; # If haven't the type of the property, gather information to figure it # out. @@ -9281,7 +9167,7 @@ sub trace { return main::trace(@_) if main::DEBUG && $to_trace } # We have been keeping track of what the property values have been, # and now have the necessary information to figure out the type. - my $addr = do { no overloading; pack 'J', $self; }; + my $addr = pack 'J', refaddr $self; my $type = $type{$addr}; @@ -9337,7 +9223,7 @@ sub trace { return main::trace(@_) if main::DEBUG && $to_trace } # $reaons - Ignored unless suppressing sub set_fate($self, $fate, $reason=undef) { - my $addr = do { no overloading; pack 'J', $self; }; + my $addr = pack 'J', refaddr $self; if ($fate >= $SUPPRESSED) { $why_suppressed{$self->complete_name} = $reason; } @@ -9381,7 +9267,6 @@ sub trace { return main::trace(@_) if main::DEBUG && $to_trace } initialize inverse_list is_empty - replacement_property name note perl_extension @@ -9416,8 +9301,7 @@ sub trace { return main::trace(@_) if main::DEBUG && $to_trace } *$sub = sub { use strict "refs"; my $self = shift; - no overloading; - return $map{pack 'J', $self}->$sub(@_); + return $map{pack 'J', refaddr $self}->$sub(@_); } } @@ -9436,7 +9320,7 @@ sub display_chr { return "\x{25CC}$chr"; } -sub join_lines($return) { +sub join_lines($input) { # Returns lines of the input joined together, so that they can be folded # properly. # This causes continuation lines to be joined together into one long line @@ -9449,7 +9333,7 @@ sub join_lines($return) { # blank is inserted after a period ending a line. # Initialize the return with the first line. - my ( @lines ) = split "\n", $return; + my ($return, @lines) = split "\n", $input; # If the first line is null, it was an empty line, add the \n back in $return = "\n" if $return eq ""; @@ -9830,7 +9714,7 @@ sub UCD_name ($table, $alias) { else { # Keep track of cycles in the input, and refuse to infinitely loop - my $addr = do { no overloading; pack 'J', $item; }; + my $addr = pack 'J', refaddr $item; if (defined $main::already_output{$addr}) { return "${indent}ALREADY OUTPUT: $item\n"; } @@ -9948,14 +9832,14 @@ sub dump_inside_out( $object, $fields_ref ) { # Dump inside-out hashes in an object's state by converting them to a # regular hash and then calling simple_dumper on that. - my $addr = do { no overloading; pack 'J', $object; }; + my $addr = pack 'J', refaddr $object; my %hash; foreach my $key (keys %$fields_ref) { $hash{$key} = $fields_ref->{$key}{$addr}; } - return simple_dumper(\%hash, @_); + return simple_dumper(\%hash, $object, $fields_ref); } sub _operator_dot($self, $other="", $reversed=0) { @@ -9969,7 +9853,7 @@ sub _operator_dot($self, $other="", $reversed=0) { } else { my $ref = ref $$which; - my $addr = do { no overloading; pack 'J', $$which; }; + my $addr = pack 'J', refaddr $$which; $$which = "$ref ($addr)"; } } @@ -10851,7 +10735,7 @@ sub process_NormalizationsTest($file) { } # End of looping through the file } -sub output_perl_charnames_line ($a, $b) { +sub output_perl_charnames_line ($code_point, $name) { # Output the entries in Perl_charnames specially, using 5 digits instead # of four. This makes the entries a constant length, and simplifies @@ -10859,7 +10743,7 @@ sub output_perl_charnames_line ($a, $b) { # ordinals, but they are all private use or noncharacters which do not # have names, so won't be in this table. - return sprintf "%05X\n%s\n\n", $_[0], $_[1]; + return sprintf "%05X\n%s\n\n", $code_point, $name; } { # Closure @@ -10973,7 +10857,7 @@ sub output_perl_charnames_line ($a, $b) { $file->carp_bad_line("Unexpected property '$property_name'. Skipped"); next LINE; } - { no overloading; $property_addr = pack 'J', $property_object; } + $property_addr = pack 'J', refaddr $property_object; # Defer changing names until have a line that is acceptable # (the 'next' statement above means is unacceptable) @@ -11025,7 +10909,7 @@ sub output_perl_charnames_line ($a, $b) { if $file->has_missings_defaults; foreach my $default_ref (@missings_list) { my $default = $default_ref->[0]; - my $addr = do { no overloading; pack 'J', property_ref($default_ref->[1]); }; + my $addr = pack 'J', refaddr property_ref($default_ref->[1]); # For string properties, the default is just what the # file says, but non-string properties should already @@ -12276,26 +12160,6 @@ sub filter_old_style_arabic_shaping { Carp::my_carp_bug("Need to process UnicodeData before SpecialCasing. Only special casing will be generated."); } - # Create a table in the old-style format and with the original - # file name for backwards compatibility with applications that - # read it directly. The new tables contain both the simple and - # full maps, and the old are missing simple maps when there is a - # conflicting full one. Probably it would have been ok to add - # those to the legacy version, as was already done in 5.14 to the - # case folding one, but this was not done, out of an abundance of - # caution. The tables are set up here before we deal with the - # full maps so that as we handle those, we can override the simple - # maps for them in the legacy table, and merely add them in the - # new-style one. - my $legacy = Property->new("Legacy_" . $full_casing_full_name, - File => $full_casing_full_name - =~ s/case_Mapping//r, - Format => $HEX_FORMAT, - Default_Map => $CODE_POINT, - Initialize => $full_casing_table, - Replacement_Property => $full_casing_full_name, - ); - $full_casing_table->add_comment(join_lines( <insert_adjusted_lines("$fields[0]; Legacy_" - . $object->full_name - . "; $fields[$i]"); - - # ... and the regular table, in which it is additional, - # beyond the simple mapping. + # The mapping is additional, beyond the simple mapping. $file->insert_adjusted_lines("$fields[0]; " . $object->name . "; " @@ -13707,25 +13564,6 @@ END $gc->table('Ll')->set_caseless_equivalent($LC); $gc->table('Lu')->set_caseless_equivalent($LC); - # Create digit and case fold tables with the original file names for - # backwards compatibility with applications that read them directly. - my $Digit = Property->new("Legacy_Perl_Decimal_Digit", - Default_Map => "", - File => 'Digit', # Trad. location - Directory => $map_directory, - Type => $STRING, - Replacement_Property => "Perl_Decimal_Digit", - Initialize => property_ref('Perl_Decimal_Digit'), - ); - $Digit->add_comment(join_lines(<table('Decimal')->ranges) { @@ -13738,16 +13576,6 @@ END . " and will have to be fixed. Proceeding anyway."); } - Property->new('Legacy_Case_Folding', - File => "Fold", - Directory => $map_directory, - Default_Map => $CODE_POINT, - Type => $STRING, - Replacement_Property => "Case_Folding", - Format => $HEX_FORMAT, - Initialize => property_ref('cf'), - ); - # Mark the scx table as the parent of the corresponding sc table for those # which are identical. This causes the pod for the script table to refer # to the corresponding scx one. This is done after everything, so as to @@ -15021,17 +14849,21 @@ END # The Present_In property is the cumulative age properties. The first # one hence is identical to the first age one. - my $previous_in = $in->add_match_table($first_age->name); - $previous_in->set_equivalent_to($first_age, Related => 1); + my $first_in = $in->add_match_table($first_age->name); + $first_in->set_equivalent_to($first_age, Related => 1); my $description_start = "Code point's usage introduced in version "; $first_age->add_description($description_start . $first_age->name); + foreach my $alias ($first_age->aliases) { # Include its aliases + $first_in->add_alias($alias->name); + } # To construct the accumulated values, for each of the age tables # starting with the 2nd earliest, merge the earliest with it, to get # all those code points existing in the 2nd earliest. Repeat merging # the new 2nd earliest with the 3rd earliest to get all those existing # in the 3rd earliest, and so on. + my $previous_in = $first_in; foreach my $current_age (@rest_ages) { next if $current_age->name !~ /^[\d.]*$/; # Skip the non-numeric @@ -15068,6 +14900,9 @@ Code point's usage has not been assigned in any Unicode release thus far. END ); $unassigned->set_equivalent_to($age_default, Related => 1); + foreach my $alias ($age_default->aliases) { + $unassigned->add_alias($alias->name); + } } my $patws = $perl->add_match_table('_Perl_PatWS', @@ -15207,13 +15042,14 @@ END # created equivalence class whose name is a combination of the property # and the old class name, leaving unchanged everything that doesn't match # the non-UCD property. - my $pictographic_emoji = property_ref('ExtPict'); - if (defined $pictographic_emoji) { + my $ep = property_ref('ExtPict'); + $ep = $ep->table('Y') if defined $ep; + if (defined $ep) { foreach my $base_property (property_ref('GCB'), property_ref('WB')) { my $property = property_ref('_Perl_' . $base_property->name); - foreach my $range ($pictographic_emoji->table('Y')->ranges) { + foreach my $range ($ep->ranges) { foreach my $i ($range->start .. $range->end) { my $current = $property->value_of($i); $current = $property->table($current)->short_name; @@ -15228,15 +15064,9 @@ END # omitted in the default algorithm remapped to what # http://www.unicode.org/reports/tr14 says they should be. # - # Original Resolved General_Category - # AI, SG, XX AL Any - # SA CM Only Mn or Mc - # SA AL Any except Mn and Mc - # CJ NS Any - # - # All property values are also written out in their long form, as - # regen/mk_invlist.pl expects that. This also fixes occurrences of the - # typo in early Unicode versions: 'inseperable'. + # First, create a plain copy, but with all property values written out in + # their long form, as regen/mk_invlist.pl expects that, and also fix + # occurrences of the typo in early Unicode versions: 'inseperable'. my $perl_lb = property_ref('_Perl_LB'); if (! defined $perl_lb) { $perl_lb = Property->new('_Perl_LB', @@ -15255,8 +15085,19 @@ END } } + # What tr14 says is this: + + # Original Resolved General_Category + # AI, SG, XX AL Any + # SA CM Only Mn or Mc + # SA AL Any except Mn and Mc + # CJ NS Any + $perl_lb->set_default_map('Alphabetic', 'full_name'); # XX -> AL + my $ea = property_ref('East_Asian_Width'); + my $Cn_EP; + $Cn_EP = $ep & $gc->table('Unassigned') if defined $ep; for my $range ($perl_lb->ranges) { my $value = standardize($range->value); @@ -15284,6 +15125,21 @@ END } } } + elsif (defined $ep && $value eq standardize('Ideographic')) { + + # Unicode 14 adds a rule to not break lines before any potential + # EBase, They say that any unassigned code point that is ExtPict, + # is potentially an EBase. In 14.0, all such ones are in the + # ExtPict=ID category. We must split that category for the + # pairwise rule table to work. + for my $i ($range->start .. $range->end) { + if ($Cn_EP->contains($i)) { + $perl_lb->add_map($i, $i, + 'Unassigned_Extended_Pictographic_Ideographic', + Replace => $UNCONDITIONALLY); + } + } + } elsif ( defined $ea && ( $value eq standardize('Close_Parenthesis') || $value eq standardize('Open_Punctuation'))) @@ -16952,7 +16808,7 @@ below briefly mentions other data that Unicode provides.) Perl can provide access to all non-provisional Unicode character properties, though not all are enabled by default. The omitted ones are the Unihan -properties (accessible via the CPAN module L) and certain +properties and certain deprecated or Unicode-internal properties. (An installation may choose to recompile Perl's tables to change this. See L.) @@ -17339,6 +17195,11 @@ sub make_Name_pm () { my @name = <fate <= $MAP_PROXIED) { @@ -18780,6 +18640,8 @@ Expect(0, 0x2028, '\p{Print}', ""); # Bug # 71722 Expect(0, 0x2029, '\p{Print}', ""); # Bug # 71722 Expect(1, 0xFF10, '\p{XDigit}', ""); # Bug # 71726 Error('\p{InKana}'); # 'Kana' is not a block so InKana shouldn't compile +Expect(1, 0xB6, '\p{In=V1_1}', ""); # Didn't use to work +Expect(1, 0x3A2,'\p{In=NA}', ""); # Didn't use to work # Make sure this gets tested; it was not part of the official test suite at # the time this was added. Note that this is as it would appear in the @@ -20112,7 +19974,6 @@ use warnings; use feature 'signatures'; -no warnings 'experimental::signatures'; no warnings 'experimental::uniprop_wildcards'; # Test qr/\X/ and the \p{} regular expression constructs. This file is @@ -20386,7 +20247,7 @@ sub _test_break($template, $break_type) { if ($modifier =~ / ^ l (.*) /x) { my $locale = $1; $display_locale = "(locale = $locale)"; - POSIX::setlocale(&POSIX::LC_CTYPE, $locale); + POSIX::setlocale(POSIX::LC_CTYPE(), $locale); $modifier = 'l'; } diff --git a/gnu/usr.bin/perl/lib/unicore/version b/gnu/usr.bin/perl/lib/unicore/version index 02161ca86e5..4b964e96540 100644 --- a/gnu/usr.bin/perl/lib/unicore/version +++ b/gnu/usr.bin/perl/lib/unicore/version @@ -1 +1 @@ -13.0.0 +14.0.0 diff --git a/gnu/usr.bin/perl/lib/utf8.pm b/gnu/usr.bin/perl/lib/utf8.pm index 607c59df742..823193b8c13 100644 --- a/gnu/usr.bin/perl/lib/utf8.pm +++ b/gnu/usr.bin/perl/lib/utf8.pm @@ -1,15 +1,19 @@ package utf8; -$utf8::hint_bits = 0x00800000; +use strict; +use warnings; -our $VERSION = '1.22'; +our $hint_bits = 0x00800000; + +our $VERSION = '1.24'; +our $AUTOLOAD; sub import { - $^H |= $utf8::hint_bits; + $^H |= $hint_bits; } sub unimport { - $^H &= ~$utf8::hint_bits; + $^H &= ~$hint_bits; } sub AUTOLOAD { @@ -199,6 +203,11 @@ otherwise returns true. # with ord 0x100. Since these bytes aren't # legal UTF-EBCDIC, on EBCDIC platforms, $x is # unchanged and the function returns FALSE. + my $y = "\xc3\x83\xc2\xab"; This has been encoded twice; this + # example is only for ASCII platforms + utf8::decode($y); # Converts $y to \xc3\xab, returns TRUE; + utf8::decode($y); # Further converts to \xeb, returns TRUE; + utf8::decode($y); # Returns FALSE, leaves $y unchanged B; use L instead. diff --git a/gnu/usr.bin/perl/lib/warnings.pm b/gnu/usr.bin/perl/lib/warnings.pm index a70c25f1250..fb53a993d50 100644 --- a/gnu/usr.bin/perl/lib/warnings.pm +++ b/gnu/usr.bin/perl/lib/warnings.pm @@ -5,7 +5,7 @@ package warnings; -our $VERSION = "1.47"; +our $VERSION = "1.58"; # Verify that we're called correctly so that warnings will work. # Can't use Carp, since Carp uses us! @@ -89,187 +89,209 @@ our %Offsets = ( 'experimental::const_attr' => 118, 'experimental::re_strict' => 120, 'experimental::refaliasing' => 122, - 'experimental::win32_perlio' => 124, - 'locale' => 126, - 'missing' => 128, - 'redundant' => 130, + 'locale' => 124, + 'missing' => 126, + 'redundant' => 128, # Warnings Categories added in Perl 5.025 - 'experimental::declared_refs' => 132, + 'experimental::declared_refs' => 130, # Warnings Categories added in Perl 5.027 - 'experimental::alpha_assertions' => 134, - 'experimental::script_run' => 136, - 'shadow' => 138, + 'experimental::alpha_assertions' => 132, + 'experimental::script_run' => 134, + 'shadow' => 136, # Warnings Categories added in Perl 5.029 - 'experimental::private_use' => 140, - 'experimental::uniprop_wildcards' => 142, - 'experimental::vlb' => 144, + 'experimental::private_use' => 138, + 'experimental::uniprop_wildcards' => 140, + 'experimental::vlb' => 142, # Warnings Categories added in Perl 5.031 - 'experimental::isa' => 146, + 'experimental::isa' => 144, + + # Warnings Categories added in Perl 5.033 + 'experimental::try' => 146, + + # Warnings Categories added in Perl 5.035 + 'experimental::args_array_with_signatures'=> 148, + 'experimental::builtin' => 150, + 'experimental::defer' => 152, + 'experimental::extra_paired_delimiters'=> 154, + 'experimental::for_list' => 156, + 'scalar' => 158, ); our %Bits = ( - 'all' => "\x55\x55\x55\x55\x55\x55\x55\x55\x55\x55\x55\x55\x55\x55\x55\x55\x55\x55\x55", # [0..75] - 'ambiguous' => "\x00\x00\x00\x00\x00\x00\x00\x04\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", # [29] - 'bareword' => "\x00\x00\x00\x00\x00\x00\x00\x10\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", # [30] - 'closed' => "\x00\x10\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", # [6] - 'closure' => "\x04\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", # [1] - 'debugging' => "\x00\x00\x00\x00\x00\x10\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", # [22] - 'deprecated' => "\x10\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", # [2] - 'digit' => "\x00\x00\x00\x00\x00\x00\x00\x40\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", # [31] - 'exec' => "\x00\x40\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", # [7] - 'exiting' => "\x40\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", # [3] - 'experimental' => "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x40\x55\x51\x15\x50\x51\x05", # [51..56,58..62,66..68,70..73] - 'experimental::alpha_assertions' => "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x40\x00\x00", # [67] - 'experimental::bitwise' => "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x10\x00\x00\x00\x00", # [58] - 'experimental::const_attr' => "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x40\x00\x00\x00\x00", # [59] - 'experimental::declared_refs' => "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x10\x00\x00", # [66] - 'experimental::isa' => "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x04", # [73] - 'experimental::lexical_subs' => "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00", # [52] - 'experimental::postderef' => "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x40\x00\x00\x00\x00\x00", # [55] - 'experimental::private_use' => "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x10\x00", # [70] - 'experimental::re_strict' => "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00", # [60] - 'experimental::refaliasing' => "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x04\x00\x00\x00", # [61] - 'experimental::regex_sets' => "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x04\x00\x00\x00\x00\x00", # [53] - 'experimental::script_run' => "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x00", # [68] - 'experimental::signatures' => "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00", # [56] - 'experimental::smartmatch' => "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x10\x00\x00\x00\x00\x00", # [54] - 'experimental::uniprop_wildcards' => "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x40\x00", # [71] - 'experimental::vlb' => "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01", # [72] - 'experimental::win32_perlio' => "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x10\x00\x00\x00", # [62] - 'glob' => "\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", # [4] - 'illegalproto' => "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x40\x00\x00\x00\x00\x00\x00\x00", # [47] - 'imprecision' => "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x10\x00\x00\x00\x00\x00\x00\x00", # [46] - 'inplace' => "\x00\x00\x00\x00\x00\x40\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", # [23] - 'internal' => "\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", # [24] - 'io' => "\x00\x54\x55\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x04\x00\x00\x00\x00", # [5..11,57] - 'layer' => "\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", # [8] - 'locale' => "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x40\x00\x00\x00", # [63] - 'malloc' => "\x00\x00\x00\x00\x00\x00\x04\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", # [25] - 'misc' => "\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", # [12] - 'missing' => "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00", # [64] - 'newline' => "\x00\x00\x04\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", # [9] - 'non_unicode' => "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00", # [48] - 'nonchar' => "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x04\x00\x00\x00\x00\x00\x00", # [49] - 'numeric' => "\x00\x00\x00\x04\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", # [13] - 'once' => "\x00\x00\x00\x10\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", # [14] - 'overflow' => "\x00\x00\x00\x40\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", # [15] - 'pack' => "\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", # [16] - 'parenthesis' => "\x00\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", # [32] - 'pipe' => "\x00\x00\x10\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", # [10] - 'portable' => "\x00\x00\x00\x00\x04\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", # [17] - 'precedence' => "\x00\x00\x00\x00\x00\x00\x00\x00\x04\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", # [33] - 'printf' => "\x00\x00\x00\x00\x00\x00\x00\x00\x10\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", # [34] - 'prototype' => "\x00\x00\x00\x00\x00\x00\x00\x00\x40\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", # [35] - 'qw' => "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00", # [36] - 'recursion' => "\x00\x00\x00\x00\x10\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", # [18] - 'redefine' => "\x00\x00\x00\x00\x40\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", # [19] - 'redundant' => "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x04\x00\x00", # [65] - 'regexp' => "\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", # [20] - 'reserved' => "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x04\x00\x00\x00\x00\x00\x00\x00\x00\x00", # [37] - 'semicolon' => "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x10\x00\x00\x00\x00\x00\x00\x00\x00\x00", # [38] - 'severe' => "\x00\x00\x00\x00\x00\x54\x05\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", # [21..25] - 'shadow' => "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x04\x00", # [69] - 'signal' => "\x00\x00\x00\x00\x00\x00\x10\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", # [26] - 'substr' => "\x00\x00\x00\x00\x00\x00\x40\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", # [27] - 'surrogate' => "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x10\x00\x00\x00\x00\x00\x00", # [50] - 'syntax' => "\x00\x00\x00\x00\x00\x00\x00\x55\x55\x15\x00\x40\x00\x00\x00\x00\x00\x00\x00", # [28..38,47] - 'syscalls' => "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x04\x00\x00\x00\x00", # [57] - 'taint' => "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x40\x00\x00\x00\x00\x00\x00\x00\x00\x00", # [39] - 'threads' => "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00", # [40] - 'uninitialized' => "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x04\x00\x00\x00\x00\x00\x00\x00\x00", # [41] - 'unopened' => "\x00\x00\x40\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", # [11] - 'unpack' => "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x10\x00\x00\x00\x00\x00\x00\x00\x00", # [42] - 'untie' => "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x40\x00\x00\x00\x00\x00\x00\x00\x00", # [43] - 'utf8' => "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x15\x00\x00\x00\x00\x00\x00", # [44,48..50] - 'void' => "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x04\x00\x00\x00\x00\x00\x00\x00", # [45] + 'all' => "\x55\x55\x55\x55\x55\x55\x55\x55\x55\x55\x55\x55\x55\x55\x55\x55\x55\x55\x55\x55", # [0..79] + 'ambiguous' => "\x00\x00\x00\x00\x00\x00\x00\x04\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", # [29] + 'bareword' => "\x00\x00\x00\x00\x00\x00\x00\x10\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", # [30] + 'closed' => "\x00\x10\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", # [6] + 'closure' => "\x04\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", # [1] + 'debugging' => "\x00\x00\x00\x00\x00\x10\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", # [22] + 'deprecated' => "\x10\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", # [2] + 'digit' => "\x00\x00\x00\x00\x00\x00\x00\x40\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", # [31] + 'exec' => "\x00\x40\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", # [7] + 'exiting' => "\x40\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", # [3] + 'experimental' => "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x40\x55\x51\x05\x54\x54\x55\x15", # [51..56,58..61,65..67,69..78] + 'experimental::alpha_assertions' => "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x10\x00\x00\x00", # [66] + 'experimental::args_array_with_signatures'=> "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x10\x00", # [74] + 'experimental::bitwise' => "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x10\x00\x00\x00\x00\x00", # [58] + 'experimental::builtin' => "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x40\x00", # [75] + 'experimental::const_attr' => "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x40\x00\x00\x00\x00\x00", # [59] + 'experimental::declared_refs' => "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x04\x00\x00\x00", # [65] + 'experimental::defer' => "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01", # [76] + 'experimental::extra_paired_delimiters'=> "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x04", # [77] + 'experimental::for_list' => "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x10", # [78] + 'experimental::isa' => "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x00", # [72] + 'experimental::lexical_subs' => "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00", # [52] + 'experimental::postderef' => "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x40\x00\x00\x00\x00\x00\x00", # [55] + 'experimental::private_use' => "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x04\x00\x00", # [69] + 'experimental::re_strict' => "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00", # [60] + 'experimental::refaliasing' => "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x04\x00\x00\x00\x00", # [61] + 'experimental::regex_sets' => "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x04\x00\x00\x00\x00\x00\x00", # [53] + 'experimental::script_run' => "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x40\x00\x00\x00", # [67] + 'experimental::signatures' => "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00", # [56] + 'experimental::smartmatch' => "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x10\x00\x00\x00\x00\x00\x00", # [54] + 'experimental::try' => "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x04\x00", # [73] + 'experimental::uniprop_wildcards' => "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x10\x00\x00", # [70] + 'experimental::vlb' => "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x40\x00\x00", # [71] + 'glob' => "\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", # [4] + 'illegalproto' => "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x40\x00\x00\x00\x00\x00\x00\x00\x00", # [47] + 'imprecision' => "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x10\x00\x00\x00\x00\x00\x00\x00\x00", # [46] + 'inplace' => "\x00\x00\x00\x00\x00\x40\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", # [23] + 'internal' => "\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", # [24] + 'io' => "\x00\x54\x55\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x04\x00\x00\x00\x00\x00", # [5..11,57] + 'layer' => "\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", # [8] + 'locale' => "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x10\x00\x00\x00\x00", # [62] + 'malloc' => "\x00\x00\x00\x00\x00\x00\x04\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", # [25] + 'misc' => "\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", # [12] + 'missing' => "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x40\x00\x00\x00\x00", # [63] + 'newline' => "\x00\x00\x04\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", # [9] + 'non_unicode' => "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00", # [48] + 'nonchar' => "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x04\x00\x00\x00\x00\x00\x00\x00", # [49] + 'numeric' => "\x00\x00\x00\x04\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", # [13] + 'once' => "\x00\x00\x00\x10\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", # [14] + 'overflow' => "\x00\x00\x00\x40\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", # [15] + 'pack' => "\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", # [16] + 'parenthesis' => "\x00\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", # [32] + 'pipe' => "\x00\x00\x10\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", # [10] + 'portable' => "\x00\x00\x00\x00\x04\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", # [17] + 'precedence' => "\x00\x00\x00\x00\x00\x00\x00\x00\x04\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", # [33] + 'printf' => "\x00\x00\x00\x00\x00\x00\x00\x00\x10\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", # [34] + 'prototype' => "\x00\x00\x00\x00\x00\x00\x00\x00\x40\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", # [35] + 'qw' => "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", # [36] + 'recursion' => "\x00\x00\x00\x00\x10\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", # [18] + 'redefine' => "\x00\x00\x00\x00\x40\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", # [19] + 'redundant' => "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00", # [64] + 'regexp' => "\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", # [20] + 'reserved' => "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x04\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", # [37] + 'scalar' => "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x40", # [79] + 'semicolon' => "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x10\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", # [38] + 'severe' => "\x00\x00\x00\x00\x00\x54\x05\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", # [21..25] + 'shadow' => "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00", # [68] + 'signal' => "\x00\x00\x00\x00\x00\x00\x10\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", # [26] + 'substr' => "\x00\x00\x00\x00\x00\x00\x40\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", # [27] + 'surrogate' => "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x10\x00\x00\x00\x00\x00\x00\x00", # [50] + 'syntax' => "\x00\x00\x00\x00\x00\x00\x00\x55\x55\x15\x00\x40\x00\x00\x00\x00\x00\x00\x00\x00", # [28..38,47] + 'syscalls' => "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x04\x00\x00\x00\x00\x00", # [57] + 'taint' => "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x40\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", # [39] + 'threads' => "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00", # [40] + 'uninitialized' => "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x04\x00\x00\x00\x00\x00\x00\x00\x00\x00", # [41] + 'unopened' => "\x00\x00\x40\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", # [11] + 'unpack' => "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x10\x00\x00\x00\x00\x00\x00\x00\x00\x00", # [42] + 'untie' => "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x40\x00\x00\x00\x00\x00\x00\x00\x00\x00", # [43] + 'utf8' => "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x15\x00\x00\x00\x00\x00\x00\x00", # [44,48..50] + 'void' => "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x04\x00\x00\x00\x00\x00\x00\x00\x00", # [45] ); our %DeadBits = ( - 'all' => "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa", # [0..75] - 'ambiguous' => "\x00\x00\x00\x00\x00\x00\x00\x08\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", # [29] - 'bareword' => "\x00\x00\x00\x00\x00\x00\x00\x20\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", # [30] - 'closed' => "\x00\x20\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", # [6] - 'closure' => "\x08\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", # [1] - 'debugging' => "\x00\x00\x00\x00\x00\x20\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", # [22] - 'deprecated' => "\x20\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", # [2] - 'digit' => "\x00\x00\x00\x00\x00\x00\x00\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", # [31] - 'exec' => "\x00\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", # [7] - 'exiting' => "\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", # [3] - 'experimental' => "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\xaa\xa2\x2a\xa0\xa2\x0a", # [51..56,58..62,66..68,70..73] - 'experimental::alpha_assertions' => "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x00\x00", # [67] - 'experimental::bitwise' => "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x20\x00\x00\x00\x00", # [58] - 'experimental::const_attr' => "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x00\x00\x00\x00", # [59] - 'experimental::declared_refs' => "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x20\x00\x00", # [66] - 'experimental::isa' => "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x08", # [73] - 'experimental::lexical_subs' => "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02\x00\x00\x00\x00\x00", # [52] - 'experimental::postderef' => "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x00\x00\x00\x00\x00", # [55] - 'experimental::private_use' => "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x20\x00", # [70] - 'experimental::re_strict' => "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02\x00\x00\x00", # [60] - 'experimental::refaliasing' => "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x08\x00\x00\x00", # [61] - 'experimental::regex_sets' => "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x08\x00\x00\x00\x00\x00", # [53] - 'experimental::script_run' => "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02\x00", # [68] - 'experimental::signatures' => "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02\x00\x00\x00\x00", # [56] - 'experimental::smartmatch' => "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x20\x00\x00\x00\x00\x00", # [54] - 'experimental::uniprop_wildcards' => "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x00", # [71] - 'experimental::vlb' => "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02", # [72] - 'experimental::win32_perlio' => "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x20\x00\x00\x00", # [62] - 'glob' => "\x00\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", # [4] - 'illegalproto' => "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x00\x00\x00\x00\x00\x00\x00", # [47] - 'imprecision' => "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x20\x00\x00\x00\x00\x00\x00\x00", # [46] - 'inplace' => "\x00\x00\x00\x00\x00\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", # [23] - 'internal' => "\x00\x00\x00\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", # [24] - 'io' => "\x00\xa8\xaa\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x08\x00\x00\x00\x00", # [5..11,57] - 'layer' => "\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", # [8] - 'locale' => "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x00\x00\x00", # [63] - 'malloc' => "\x00\x00\x00\x00\x00\x00\x08\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", # [25] - 'misc' => "\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", # [12] - 'missing' => "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02\x00\x00", # [64] - 'newline' => "\x00\x00\x08\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", # [9] - 'non_unicode' => "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00", # [48] - 'nonchar' => "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x08\x00\x00\x00\x00\x00\x00", # [49] - 'numeric' => "\x00\x00\x00\x08\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", # [13] - 'once' => "\x00\x00\x00\x20\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", # [14] - 'overflow' => "\x00\x00\x00\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", # [15] - 'pack' => "\x00\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", # [16] - 'parenthesis' => "\x00\x00\x00\x00\x00\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", # [32] - 'pipe' => "\x00\x00\x20\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", # [10] - 'portable' => "\x00\x00\x00\x00\x08\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", # [17] - 'precedence' => "\x00\x00\x00\x00\x00\x00\x00\x00\x08\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", # [33] - 'printf' => "\x00\x00\x00\x00\x00\x00\x00\x00\x20\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", # [34] - 'prototype' => "\x00\x00\x00\x00\x00\x00\x00\x00\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", # [35] - 'qw' => "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00", # [36] - 'recursion' => "\x00\x00\x00\x00\x20\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", # [18] - 'redefine' => "\x00\x00\x00\x00\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", # [19] - 'redundant' => "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x08\x00\x00", # [65] - 'regexp' => "\x00\x00\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", # [20] - 'reserved' => "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x08\x00\x00\x00\x00\x00\x00\x00\x00\x00", # [37] - 'semicolon' => "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x20\x00\x00\x00\x00\x00\x00\x00\x00\x00", # [38] - 'severe' => "\x00\x00\x00\x00\x00\xa8\x0a\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", # [21..25] - 'shadow' => "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x08\x00", # [69] - 'signal' => "\x00\x00\x00\x00\x00\x00\x20\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", # [26] - 'substr' => "\x00\x00\x00\x00\x00\x00\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", # [27] - 'surrogate' => "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x20\x00\x00\x00\x00\x00\x00", # [50] - 'syntax' => "\x00\x00\x00\x00\x00\x00\x00\xaa\xaa\x2a\x00\x80\x00\x00\x00\x00\x00\x00\x00", # [28..38,47] - 'syscalls' => "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x08\x00\x00\x00\x00", # [57] - 'taint' => "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00", # [39] - 'threads' => "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x00", # [40] - 'uninitialized' => "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x08\x00\x00\x00\x00\x00\x00\x00\x00", # [41] - 'unopened' => "\x00\x00\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", # [11] - 'unpack' => "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x20\x00\x00\x00\x00\x00\x00\x00\x00", # [42] - 'untie' => "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x00\x00\x00\x00\x00\x00\x00\x00", # [43] - 'utf8' => "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02\x2a\x00\x00\x00\x00\x00\x00", # [44,48..50] - 'void' => "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x08\x00\x00\x00\x00\x00\x00\x00", # [45] + 'all' => "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa", # [0..79] + 'ambiguous' => "\x00\x00\x00\x00\x00\x00\x00\x08\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", # [29] + 'bareword' => "\x00\x00\x00\x00\x00\x00\x00\x20\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", # [30] + 'closed' => "\x00\x20\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", # [6] + 'closure' => "\x08\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", # [1] + 'debugging' => "\x00\x00\x00\x00\x00\x20\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", # [22] + 'deprecated' => "\x20\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", # [2] + 'digit' => "\x00\x00\x00\x00\x00\x00\x00\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", # [31] + 'exec' => "\x00\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", # [7] + 'exiting' => "\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", # [3] + 'experimental' => "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\xaa\xa2\x0a\xa8\xa8\xaa\x2a", # [51..56,58..61,65..67,69..78] + 'experimental::alpha_assertions' => "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x20\x00\x00\x00", # [66] + 'experimental::args_array_with_signatures'=> "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x20\x00", # [74] + 'experimental::bitwise' => "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x20\x00\x00\x00\x00\x00", # [58] + 'experimental::builtin' => "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x00", # [75] + 'experimental::const_attr' => "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x00\x00\x00\x00\x00", # [59] + 'experimental::declared_refs' => "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x08\x00\x00\x00", # [65] + 'experimental::defer' => "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02", # [76] + 'experimental::extra_paired_delimiters'=> "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x08", # [77] + 'experimental::for_list' => "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x20", # [78] + 'experimental::isa' => "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02\x00", # [72] + 'experimental::lexical_subs' => "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00", # [52] + 'experimental::postderef' => "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x00\x00\x00\x00\x00\x00", # [55] + 'experimental::private_use' => "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x08\x00\x00", # [69] + 'experimental::re_strict' => "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02\x00\x00\x00\x00", # [60] + 'experimental::refaliasing' => "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x08\x00\x00\x00\x00", # [61] + 'experimental::regex_sets' => "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x08\x00\x00\x00\x00\x00\x00", # [53] + 'experimental::script_run' => "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x00\x00\x00", # [67] + 'experimental::signatures' => "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02\x00\x00\x00\x00\x00", # [56] + 'experimental::smartmatch' => "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x20\x00\x00\x00\x00\x00\x00", # [54] + 'experimental::try' => "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x08\x00", # [73] + 'experimental::uniprop_wildcards' => "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x20\x00\x00", # [70] + 'experimental::vlb' => "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x00\x00", # [71] + 'glob' => "\x00\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", # [4] + 'illegalproto' => "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x00\x00\x00\x00\x00\x00\x00\x00", # [47] + 'imprecision' => "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x20\x00\x00\x00\x00\x00\x00\x00\x00", # [46] + 'inplace' => "\x00\x00\x00\x00\x00\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", # [23] + 'internal' => "\x00\x00\x00\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", # [24] + 'io' => "\x00\xa8\xaa\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x08\x00\x00\x00\x00\x00", # [5..11,57] + 'layer' => "\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", # [8] + 'locale' => "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x20\x00\x00\x00\x00", # [62] + 'malloc' => "\x00\x00\x00\x00\x00\x00\x08\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", # [25] + 'misc' => "\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", # [12] + 'missing' => "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x00\x00\x00\x00", # [63] + 'newline' => "\x00\x00\x08\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", # [9] + 'non_unicode' => "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00", # [48] + 'nonchar' => "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x08\x00\x00\x00\x00\x00\x00\x00", # [49] + 'numeric' => "\x00\x00\x00\x08\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", # [13] + 'once' => "\x00\x00\x00\x20\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", # [14] + 'overflow' => "\x00\x00\x00\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", # [15] + 'pack' => "\x00\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", # [16] + 'parenthesis' => "\x00\x00\x00\x00\x00\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", # [32] + 'pipe' => "\x00\x00\x20\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", # [10] + 'portable' => "\x00\x00\x00\x00\x08\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", # [17] + 'precedence' => "\x00\x00\x00\x00\x00\x00\x00\x00\x08\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", # [33] + 'printf' => "\x00\x00\x00\x00\x00\x00\x00\x00\x20\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", # [34] + 'prototype' => "\x00\x00\x00\x00\x00\x00\x00\x00\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", # [35] + 'qw' => "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", # [36] + 'recursion' => "\x00\x00\x00\x00\x20\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", # [18] + 'redefine' => "\x00\x00\x00\x00\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", # [19] + 'redundant' => "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02\x00\x00\x00", # [64] + 'regexp' => "\x00\x00\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", # [20] + 'reserved' => "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x08\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", # [37] + 'scalar' => "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80", # [79] + 'semicolon' => "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x20\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", # [38] + 'severe' => "\x00\x00\x00\x00\x00\xa8\x0a\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", # [21..25] + 'shadow' => "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02\x00\x00", # [68] + 'signal' => "\x00\x00\x00\x00\x00\x00\x20\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", # [26] + 'substr' => "\x00\x00\x00\x00\x00\x00\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", # [27] + 'surrogate' => "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x20\x00\x00\x00\x00\x00\x00\x00", # [50] + 'syntax' => "\x00\x00\x00\x00\x00\x00\x00\xaa\xaa\x2a\x00\x80\x00\x00\x00\x00\x00\x00\x00\x00", # [28..38,47] + 'syscalls' => "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x08\x00\x00\x00\x00\x00", # [57] + 'taint' => "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", # [39] + 'threads' => "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00", # [40] + 'uninitialized' => "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x08\x00\x00\x00\x00\x00\x00\x00\x00\x00", # [41] + 'unopened' => "\x00\x00\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", # [11] + 'unpack' => "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x20\x00\x00\x00\x00\x00\x00\x00\x00\x00", # [42] + 'untie' => "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00", # [43] + 'utf8' => "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02\x2a\x00\x00\x00\x00\x00\x00\x00", # [44,48..50] + 'void' => "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x08\x00\x00\x00\x00\x00\x00\x00\x00", # [45] ); # These are used by various things, including our own tests -our $NONE = "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"; -our $DEFAULT = "\x10\x01\x00\x00\x00\x50\x04\x00\x00\x00\x00\x00\x00\x55\x51\x55\x50\x51\x05", # [2,4,22,23,25,52..56,58..63,66..68,70..73] -our $LAST_BIT = 148 ; -our $BYTES = 19 ; +our $NONE = "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"; +our $DEFAULT = "\x10\x01\x00\x00\x00\x50\x04\x00\x00\x00\x00\x00\x00\x51\x51\x15\x54\x54\x55\x15"; # [2,4,22,23,25,52,54..56,58..62,65..67,69..78] +our $LAST_BIT = 160 ; +our $BYTES = 20 ; sub Croaker { @@ -284,16 +306,16 @@ sub _expand_bits { my $want_len = ($LAST_BIT + 7) >> 3; my $len = length($bits); if ($len != $want_len) { - if ($bits eq "") { - $bits = "\x00" x $want_len; - } elsif ($len > $want_len) { - substr $bits, $want_len, $len-$want_len, ""; - } else { - my $a = vec($bits, $Offsets{all} >> 1, 2); - $a |= $a << 2; - $a |= $a << 4; - $bits .= chr($a) x ($want_len - $len); - } + if ($bits eq "") { + $bits = "\x00" x $want_len; + } elsif ($len > $want_len) { + substr $bits, $want_len, $len-$want_len, ""; + } else { + my $x = vec($bits, $Offsets{all} >> 1, 2); + $x |= $x << 2; + $x |= $x << 4; + $bits .= chr($x) x ($want_len - $len); + } } return $bits; } @@ -306,21 +328,21 @@ sub _bits { $mask = _expand_bits($mask); foreach my $word ( @_ ) { - if ($word eq 'FATAL') { - $fatal = 1; - $no_fatal = 0; - } - elsif ($word eq 'NONFATAL') { - $fatal = 0; - $no_fatal = 1; - } - elsif ($catmask = $Bits{$word}) { - $mask |= $catmask ; - $mask |= $DeadBits{$word} if $fatal ; - $mask = ~(~$mask | $DeadBits{$word}) if $no_fatal ; - } - else - { Croaker("Unknown warnings category '$word'")} + if ($word eq 'FATAL') { + $fatal = 1; + $no_fatal = 0; + } + elsif ($word eq 'NONFATAL') { + $fatal = 0; + $no_fatal = 1; + } + elsif ($catmask = $Bits{$word}) { + $mask |= $catmask ; + $mask |= $DeadBits{$word} if $fatal ; + $mask = ~(~$mask | $DeadBits{$word}) if $no_fatal ; + } + else + { Croaker("Unknown warnings category '$word'")} } return $mask ; @@ -335,16 +357,24 @@ sub bits sub import { - shift; - - my $mask = ${^WARNING_BITS} // ($^W ? $Bits{all} : $DEFAULT) ; + my $invocant = shift; # append 'all' when implied (empty import list or after a lone # "FATAL" or "NONFATAL") push @_, 'all' - if !@_ || (@_==1 && ($_[0] eq 'FATAL' || $_[0] eq 'NONFATAL')); - - ${^WARNING_BITS} = _bits($mask, @_); + if !@_ || (@_==1 && ($_[0] eq 'FATAL' || $_[0] eq 'NONFATAL')); + + my @fatal = (); + foreach my $warning (@_) { + if($warning =~ /^(NON)?FATAL$/) { + @fatal = ($warning); + } elsif(substr($warning, 0, 1) ne '-') { + my $mask = ${^WARNING_BITS} // ($^W ? $Bits{all} : $DEFAULT) ; + ${^WARNING_BITS} = _bits($mask, @fatal, $warning); + } else { + $invocant->unimport(substr($warning, 1)); + } + } } sub unimport @@ -359,14 +389,14 @@ sub unimport $mask = _expand_bits($mask); foreach my $word ( @_ ) { - if ($word eq 'FATAL') { - next; - } - elsif ($catmask = $Bits{$word}) { - $mask = ~(~$mask | $catmask | $DeadBits{$word}); - } - else - { Croaker("Unknown warnings category '$word'")} + if ($word eq 'FATAL') { + next; + } + elsif ($catmask = $Bits{$word}) { + $mask = ~(~$mask | $catmask | $DeadBits{$word}); + } + else + { Croaker("Unknown warnings category '$word'")} } ${^WARNING_BITS} = $mask ; @@ -389,71 +419,71 @@ sub __chk my $has_level = $wanted & LEVEL ; if ($has_level) { - if (@_ != ($has_message ? 3 : 2)) { - my $sub = (caller 1)[3]; - my $syntax = $has_message - ? "category, level, 'message'" - : 'category, level'; - Croaker("Usage: $sub($syntax)"); + if (@_ != ($has_message ? 3 : 2)) { + my $sub = (caller 1)[3]; + my $syntax = $has_message + ? "category, level, 'message'" + : 'category, level'; + Croaker("Usage: $sub($syntax)"); } } elsif (not @_ == 1 || @_ == ($has_message ? 2 : 0)) { - my $sub = (caller 1)[3]; - my $syntax = $has_message ? "[category,] 'message'" : '[category]'; - Croaker("Usage: $sub($syntax)"); + my $sub = (caller 1)[3]; + my $syntax = $has_message ? "[category,] 'message'" : '[category]'; + Croaker("Usage: $sub($syntax)"); } my $message = pop if $has_message; if (@_) { - # check the category supplied. - $category = shift ; - if (my $type = ref $category) { - Croaker("not an object") - if exists $builtin_type{$type}; - $category = $type; - $isobj = 1 ; - } - $offset = $Offsets{$category}; - Croaker("Unknown warnings category '$category'") - unless defined $offset; + # check the category supplied. + $category = shift ; + if (my $type = ref $category) { + Croaker("not an object") + if exists $builtin_type{$type}; + $category = $type; + $isobj = 1 ; + } + $offset = $Offsets{$category}; + Croaker("Unknown warnings category '$category'") + unless defined $offset; } else { - $category = (caller(1))[0] ; - $offset = $Offsets{$category}; - Croaker("package '$category' not registered for warnings") - unless defined $offset ; + $category = (caller(1))[0] ; + $offset = $Offsets{$category}; + Croaker("package '$category' not registered for warnings") + unless defined $offset ; } my $i; if ($isobj) { - my $pkg; - $i = 2; - while (do { { package DB; $pkg = (caller($i++))[0] } } ) { - last unless @DB::args && $DB::args[0] =~ /^$category=/ ; - } - $i -= 2 ; + my $pkg; + $i = 2; + while (do { { package DB; $pkg = (caller($i++))[0] } } ) { + last unless @DB::args && $DB::args[0] =~ /^$category=/ ; + } + $i -= 2 ; } elsif ($has_level) { - $i = 2 + shift; + $i = 2 + shift; } else { - $i = _error_loc(); # see where Carp will allocate the error + $i = _error_loc(); # see where Carp will allocate the error } # Default to 0 if caller returns nothing. Default to $DEFAULT if it # explicitly returns undef. my(@callers_bitmask) = (caller($i))[9] ; my $callers_bitmask = - @callers_bitmask ? $callers_bitmask[0] // $DEFAULT : 0 ; + @callers_bitmask ? $callers_bitmask[0] // $DEFAULT : 0 ; length($callers_bitmask) > ($offset >> 3) or $offset = $Offsets{all}; my @results; foreach my $type (FATAL, NORMAL) { - next unless $wanted & $type; + next unless $wanted & $type; - push @results, vec($callers_bitmask, $offset + $type - 1, 1); + push @results, vec($callers_bitmask, $offset + $type - 1, 1); } # &enabled and &fatal_enabled @@ -461,19 +491,19 @@ sub __chk # &warnif, and the category is neither enabled as warning nor as fatal return if ($wanted & (NORMAL | FATAL | MESSAGE)) - == (NORMAL | FATAL | MESSAGE) - && !($results[0] || $results[1]); + == (NORMAL | FATAL | MESSAGE) + && !($results[0] || $results[1]); # If we have an explicit level, bypass Carp. if ($has_level and @callers_bitmask) { - # logic copied from util.c:mess_sv - my $stuff = " at " . join " line ", (caller $i)[1,2]; - $stuff .= sprintf ", <%s> %s %d", - *${^LAST_FH}{NAME}, - ($/ eq "\n" ? "line" : "chunk"), $. - if $. && ${^LAST_FH}; - die "$message$stuff.\n" if $results[0]; - return warn "$message$stuff.\n"; + # logic copied from util.c:mess_sv + my $stuff = " at " . join " line ", (caller $i)[1,2]; + $stuff .= sprintf ", <%s> %s %d", + *${^LAST_FH}{NAME}, + ($/ eq "\n" ? "line" : "chunk"), $. + if $. && ${^LAST_FH}; + die "$message$stuff.\n" if $results[0]; + return warn "$message$stuff.\n"; } require Carp; @@ -497,15 +527,15 @@ sub register_categories my @names = @_; for my $name (@names) { - if (! defined $Bits{$name}) { - $Offsets{$name} = $LAST_BIT; - $Bits{$name} = _mkMask($LAST_BIT++); - $DeadBits{$name} = _mkMask($LAST_BIT++); - if (length($Bits{$name}) > length($Bits{all})) { - $Bits{all} .= "\x55"; - $DeadBits{all} .= "\xaa"; - } - } + if (! defined $Bits{$name}) { + $Offsets{$name} = $LAST_BIT; + $Bits{$name} = _mkMask($LAST_BIT++); + $DeadBits{$name} = _mkMask($LAST_BIT++); + if (length($Bits{$name}) > length($Bits{all})) { + $Bits{all} .= "\x55"; + $DeadBits{all} .= "\xaa"; + } + } } } @@ -570,8 +600,14 @@ warnings - Perl pragma to control optional warnings use warnings; no warnings; + # Standard warnings are enabled by use v5.35 or above + use v5.35; + use warnings "all"; - no warnings "all"; + no warnings "uninitialized"; + + # or equivalent to those last two ... + use warnings qw(all -uninitialized); use warnings::register; if (warnings::enabled()) { @@ -620,17 +656,20 @@ Similarly all warnings are disabled in a block by either of these: For example, consider the code below: use warnings; - my @a; + my @x; { no warnings; - my $b = @a[0]; + my $y = @x[0]; } - my $c = @a[0]; + my $z = @x[0]; The code in the enclosing block has warnings enabled, but the inner block has them disabled. In this case that means the assignment to the -scalar C<$c> will trip the C<"Scalar value @a[0] better written as $a[0]"> -warning, but the assignment to the scalar C<$b> will not. +scalar C<$z> will trip the C<"Scalar value @x[0] better written as $x[0]"> +warning, but the assignment to the scalar C<$y> will not. + +All warnings are enabled automatically within the scope of +a C> (or higher) declaration. =head2 Default Warnings and Optional Warnings @@ -642,22 +681,57 @@ would get a warning whether you wanted it or not. For example, the code below would always produce an C<"isn't numeric"> warning about the "2:". - my $a = "2:" + 3; + my $x = "2:" + 3; With the introduction of lexical warnings, mandatory warnings now become I warnings. The difference is that although the previously mandatory warnings are still enabled by default, they can then be subsequently enabled or disabled with the lexical warning pragma. For example, in the code below, an C<"isn't numeric"> warning will only -be reported for the C<$a> variable. +be reported for the C<$x> variable. - my $a = "2:" + 3; + my $x = "2:" + 3; no warnings; - my $b = "2:" + 3; + my $y = "2:" + 3; Note that neither the B<-w> flag or the C<$^W> can be used to disable/enable default warnings. They are still mandatory in this case. +=head2 "Negative warnings" + +As a convenience, you can (as of Perl 5.34) pass arguments to the +C method both positively and negatively. Negative warnings +are those with a C<-> sign prepended to their names; positive warnings +are anything else. This lets you turn on some warnings and turn off +others in one command. So, assuming that you've already turned on a +bunch of warnings but want to tweak them a bit in some block, you can +do this: + + { + use warnings qw(uninitialized -redefine); + ... + } + +which is equivalent to: + + { + use warnings qw(uninitialized); + no warnings qw(redefine); + ... + } + +The argument list is processed in the order you specify. So, for example, if you +don't want to be warned about use of experimental features, except for C +that you really dislike, you can say this: + + use warnings qw(all -experimental experimental::somefeature); + +which is equivalent to: + + use warnings 'all'; + no warnings 'experimental'; + use warnings 'experimental::somefeature'; + =head2 What's wrong with B<-w> and C<$^W> Although very useful, the big problem with using B<-w> on the command @@ -673,20 +747,20 @@ a block of code. You might expect this to be enough to do the trick: { local ($^W) = 0; - my $a =+ 2; - my $b; chop $b; + my $x =+ 2; + my $y; chop $y; } When this code is run with the B<-w> flag, a warning will be produced -for the C<$a> line: C<"Reversed += operator">. +for the C<$x> line: C<"Reversed += operator">. The problem is that Perl has both compile-time and run-time warnings. To disable compile-time warnings you need to rewrite the code like this: { BEGIN { $^W = 0 } - my $a =+ 2; - my $b; chop $b; + my $x =+ 2; + my $y; chop $y; } And note that unlike the first example, this will permanently set C<$^W> @@ -701,7 +775,7 @@ the first will not. sub doit { - my $b; chop $b; + my $y; chop $y; } doit(); @@ -727,7 +801,7 @@ warnings are (or aren't) produced: X<-w> This is the existing flag. If the lexical warnings pragma is B -used in any of you code, or any of the modules that you use, this flag +used in any of your code, or any of the modules that you use, this flag will enable warnings everywhere. See L for details of how this flag interacts with lexical warnings. @@ -816,12 +890,22 @@ The current hierarchy is: | | | +- experimental::alpha_assertions | | + | +- experimental::args_array_with_signatures + | | | +- experimental::bitwise | | + | +- experimental::builtin + | | | +- experimental::const_attr | | | +- experimental::declared_refs | | + | +- experimental::defer + | | + | +- experimental::extra_paired_delimiters + | | + | +- experimental::for_list + | | | +- experimental::isa | | | +- experimental::lexical_subs @@ -842,11 +926,11 @@ The current hierarchy is: | | | +- experimental::smartmatch | | + | +- experimental::try + | | | +- experimental::uniprop_wildcards | | | +- experimental::vlb - | | - | +- experimental::win32_perlio | +- glob | @@ -892,6 +976,8 @@ The current hierarchy is: | +- regexp | + +- scalar + | +- severe --------+ | | | +- debugging @@ -1006,7 +1092,7 @@ The L module on CPAN offers one example of a warnings subset that the module's authors believe is relatively safe to fatalize. -B users of FATAL warnings, especially those using +B Users of FATAL warnings, especially those using C<< FATAL => 'all' >>, should be fully aware that they are risking future portability of their programs by doing so. Perl makes absolutely no commitments to not introduce new warnings or warnings categories in the @@ -1074,6 +1160,9 @@ use: use v5.20; # Perl 5.20 or greater is required for the following use warnings 'FATAL'; # short form of "use warnings FATAL => 'all';" +However, you should still heed the guidance earlier in this section against +using C<< use warnings FATAL => 'all'; >>. + If you want your program to be compatible with versions of Perl before 5.20, you must use C<< use warnings FATAL => 'all'; >> instead. (In previous versions of Perl, the behavior of the statements @@ -1215,12 +1304,12 @@ C. use Original; use Derived; use warnings 'Derived'; - my $a = Original->new(); - $a->doit(1); - my $b = Derived->new(); - $a->doit(1); + my $x = Original->new(); + $x->doit(1); + my $y = Derived->new(); + $x->doit(1); -When this code is run only the C object, C<$b>, will generate +When this code is run only the C object, C<$y>, will generate a warning. Odd numbers are unsafe at main.pl line 7 diff --git a/gnu/usr.bin/perl/locale.c b/gnu/usr.bin/perl/locale.c index 578c54f92ac..c83076da3f0 100644 --- a/gnu/usr.bin/perl/locale.c +++ b/gnu/usr.bin/perl/locale.c @@ -60,7 +60,7 @@ /* If the environment says to, we can output debugging information during * initialization. This is done before option parsing, and before any thread * creation, so can be a file-level static */ -#if ! defined(DEBUGGING) || defined(PERL_GLOBAL_STRUCT) +#if ! defined(DEBUGGING) # define debug_initialization 0 # define DEBUG_INITIALIZATION_set(v) #else @@ -142,21 +142,21 @@ S_stdize_locale(pTHX_ char *locs) PERL_ARGS_ASSERT_STDIZE_LOCALE; if (s) { - const char * const t = strchr(s, '.'); - okay = FALSE; - if (t) { - const char * const u = strchr(t, '\n'); - if (u && (u[1] == 0)) { - const STRLEN len = u - s; - Move(s + 1, locs, len, char); - locs[len] = 0; - okay = TRUE; - } - } + const char * const t = strchr(s, '.'); + okay = FALSE; + if (t) { + const char * const u = strchr(t, '\n'); + if (u && (u[1] == 0)) { + const STRLEN len = u - s; + Move(s + 1, locs, len, char); + locs[len] = 0; + okay = TRUE; + } + } } if (!okay) - Perl_croak(aTHX_ "Can't fix broken locale name \"%s\"", locs); + Perl_croak(aTHX_ "Can't fix broken locale name \"%s\"", locs); return locs; } @@ -200,6 +200,12 @@ const int categories[] = { # ifdef USE_LOCALE_TELEPHONE LC_TELEPHONE, # endif +# ifdef USE_LOCALE_SYNTAX + LC_SYNTAX, +# endif +# ifdef USE_LOCALE_TOD + LC_TOD, +# endif # ifdef LC_ALL LC_ALL, # endif @@ -245,6 +251,12 @@ const char * const category_names[] = { # ifdef USE_LOCALE_TELEPHONE "LC_TELEPHONE", # endif +# ifdef USE_LOCALE_SYNTAX + "LC_SYNTAX", +# endif +# ifdef USE_LOCALE_TOD + "LC_TOD", +# endif # ifdef LC_ALL "LC_ALL", # endif @@ -384,8 +396,20 @@ S_category_name(const int category) # else # define _DUMMY_TELEPHONE _DUMMY_PAPER # endif +# ifdef USE_LOCALE_SYNTAX +# define LC_SYNTAX_INDEX _DUMMY_TELEPHONE + 1 +# define _DUMMY_SYNTAX LC_SYNTAX_INDEX +# else +# define _DUMMY_SYNTAX _DUMMY_TELEPHONE +# endif +# ifdef USE_LOCALE_TOD +# define LC_TOD_INDEX _DUMMY_SYNTAX + 1 +# define _DUMMY_TOD LC_TOD_INDEX +# else +# define _DUMMY_TOD _DUMMY_SYNTAX +# endif # ifdef LC_ALL -# define LC_ALL_INDEX _DUMMY_TELEPHONE + 1 +# define LC_ALL_INDEX _DUMMY_TOD + 1 # endif #endif /* ifdef USE_LOCALE */ @@ -467,6 +491,12 @@ const int category_masks[] = { # endif # ifdef USE_LOCALE_TELEPHONE LC_TELEPHONE_MASK, +# endif +# ifdef USE_LOCALE_SYNTAX + LC_SYNTAX_MASK, +# endif +# ifdef USE_LOCALE_TOD + LC_TOD_MASK, # endif /* LC_ALL can't be turned off by a Configure * option, and in Posix 2008, should always be @@ -523,12 +553,13 @@ S_emulate_setlocale(const int category, int mask; locale_t old_obj; locale_t new_obj; + const char * safelocale = locale ? locale : "(null)"; dTHX; # ifdef DEBUGGING if (DEBUG_Lv_TEST || debug_initialization) { - PerlIO_printf(Perl_debug_log, "%s:%d: emulate_setlocale input=%d (%s), \"%s\", %d, %d\n", __FILE__, __LINE__, category, category_name(category), locale, index, is_index_valid); + PerlIO_printf(Perl_debug_log, "%s:%d: emulate_setlocale input=%d (%s), \"%s\", %d, %d\n", __FILE__, __LINE__, category, category_name(category), safelocale, index, is_index_valid); } # endif @@ -556,7 +587,7 @@ S_emulate_setlocale(const int category, * Fallback to the early POSIX usages */ Perl_warner(aTHX_ packWARN(WARN_LOCALE), "Unknown locale category %d; can't set it to %s\n", - category, locale); + category, safelocale); return NULL; found_index: ; @@ -606,11 +637,12 @@ S_emulate_setlocale(const int category, /* If this assert fails, adjust the size of curlocales in intrpvar.h */ STATIC_ASSERT_STMT(C_ARRAY_LENGTH(PL_curlocales) > LC_ALL_INDEX); -# if defined(_NL_LOCALE_NAME) \ - && defined(DEBUGGING) \ +# if defined(_NL_LOCALE_NAME) \ + && defined(DEBUGGING) \ + /* On systems that accept any locale name, the real underlying \ + * locale is often returned by this internal function, so we \ + * can't use it */ \ && ! defined(SETLOCALE_ACCEPTS_ANY_LOCALE_NAME) - /* On systems that accept any locale name, the real underlying locale - * is often returned by this internal function, so we can't use it */ { /* Internal glibc for querylocale(), but doesn't handle * empty-string ("") locale properly; who knows what other @@ -1189,137 +1221,6 @@ S_emulate_setlocale(const int category, #endif /* USE_POSIX_2008_LOCALE */ -#if 0 /* Code that was to emulate thread-safe locales on platforms that - didn't natively support them */ - -/* The way this would work is that we would keep a per-thread list of the - * correct locale for that thread. Any operation that was locale-sensitive - * would have to be changed so that it would look like this: - * - * LOCALE_LOCK; - * setlocale to the correct locale for this operation - * do operation - * LOCALE_UNLOCK - * - * This leaves the global locale in the most recently used operation's, but it - * was locked long enough to get the result. If that result is static, it - * needs to be copied before the unlock. - * - * Macros could be written like SETUP_LOCALE_DEPENDENT_OP(category) that did - * the setup, but are no-ops when not needed, and similarly, - * END_LOCALE_DEPENDENT_OP for the tear-down - * - * But every call to a locale-sensitive function would have to be changed, and - * if a module didn't cooperate by using the mutex, things would break. - * - * This code was abandoned before being completed or tested, and is left as-is -*/ - -# define do_setlocale_c(cat, locale) locking_setlocale(cat, locale, cat ## _INDEX, TRUE) -# define do_setlocale_r(cat, locale) locking_setlocale(cat, locale, 0, FALSE) - -STATIC char * -S_locking_setlocale(pTHX_ - const int category, - const char * locale, - int index, - const bool is_index_valid - ) -{ - /* This function kind of performs a setlocale() on just the current thread; - * thus it is kind of thread-safe. It does this by keeping a thread-level - * array of the current locales for each category. Every time a locale is - * switched to, it does the switch globally, but updates the thread's - * array. A query as to what the current locale is just returns the - * appropriate element from the array, and doesn't actually call the system - * setlocale(). The saving into the array is done in an uninterruptible - * section of code, so is unaffected by whatever any other threads might be - * doing. - * - * All locale-sensitive operations must work by first starting a critical - * section, then switching to the thread's locale as kept by this function, - * and then doing the operation, then ending the critical section. Thus, - * each gets done in the appropriate locale. simulating thread-safety. - * - * This function takes the same parameters, 'category' and 'locale', that - * the regular setlocale() function does, but it also takes two additional - * ones. This is because as described earlier. If we know on input the - * index corresponding to the category into the array where we store the - * current locales, we don't have to calculate it. If the caller knows at - * compile time what the index is, it can pass it, setting - * 'is_index_valid' to TRUE; otherwise the index parameter is ignored. - * - */ - - /* If the input index might be incorrect, calculate the correct one */ - if (! is_index_valid) { - unsigned int i; - - if (DEBUG_Lv_TEST || debug_initialization) { - PerlIO_printf(Perl_debug_log, "%s:%d: converting category %d to index\n", __FILE__, __LINE__, category); - } - - for (i = 0; i <= LC_ALL_INDEX; i++) { - if (category == categories[i]) { - index = i; - goto found_index; - } - } - - /* Here, we don't know about this category, so can't handle it. - * XXX best we can do is to unsafely set this - * XXX warning */ - - return my_setlocale(category, locale); - - found_index: ; - - if (DEBUG_Lv_TEST || debug_initialization) { - PerlIO_printf(Perl_debug_log, "%s:%d: index is 0x%x\n", __FILE__, __LINE__, index); - } - } - - /* For a query, just return what's in our records */ - if (new_locale == NULL) { - return curlocales[index]; - } - - - /* Otherwise, we need to do the switch, and save the result, all in a - * critical section */ - - Safefree(curlocales[[index]]); - - /* It might be that this is called from an already-locked section of code. - * We would have to detect and skip the LOCK/UNLOCK if so */ - LOCALE_LOCK; - - curlocales[index] = savepv(my_setlocale(category, new_locale)); - - if (strEQ(new_locale, "")) { - -#ifdef LC_ALL - - /* The locale values come from the environment, and may not all be the - * same, so for LC_ALL, we have to update all the others, while the - * mutex is still locked */ - - if (category == LC_ALL) { - unsigned int i; - for (i = 0; i < LC_ALL_INDEX) { - curlocales[i] = my_setlocale(categories[i], NULL); - } - } - } - -#endif - - LOCALE_UNLOCK; - - return curlocales[index]; -} - -#endif #ifdef USE_LOCALE STATIC void @@ -1409,12 +1310,12 @@ S_new_numeric(pTHX_ const char *newnum) char *save_newnum; if (! newnum) { - Safefree(PL_numeric_name); - PL_numeric_name = NULL; - PL_numeric_standard = TRUE; - PL_numeric_underlying = TRUE; - PL_numeric_underlying_is_standard = TRUE; - return; + Safefree(PL_numeric_name); + PL_numeric_name = NULL; + PL_numeric_standard = TRUE; + PL_numeric_underlying = TRUE; + PL_numeric_underlying_is_standard = TRUE; + return; } save_newnum = stdize_locale(savepv(newnum)); @@ -1437,11 +1338,11 @@ S_new_numeric(pTHX_ const char *newnum) /* Save the new name if it isn't the same as the previous one, if any */ if (! PL_numeric_name || strNE(PL_numeric_name, save_newnum)) { - Safefree(PL_numeric_name); - PL_numeric_name = save_newnum; + Safefree(PL_numeric_name); + PL_numeric_name = save_newnum; } else { - Safefree(save_newnum); + Safefree(save_newnum); } PL_numeric_underlying_is_standard = PL_numeric_standard; @@ -1558,7 +1459,6 @@ S_new_ctype(pTHX_ const char *newctype) * this function should be called directly only from this file and from * POSIX::setlocale() */ - dVAR; unsigned int i; /* Don't check for problems if we are suppressing the warnings */ @@ -1895,27 +1795,27 @@ S_new_collate(pTHX_ const char *newcoll) * an unlikely bug */ if (! newcoll) { - if (PL_collation_name) { - ++PL_collation_ix; - Safefree(PL_collation_name); - PL_collation_name = NULL; - } - PL_collation_standard = TRUE; + if (PL_collation_name) { + ++PL_collation_ix; + Safefree(PL_collation_name); + PL_collation_name = NULL; + } + PL_collation_standard = TRUE; is_standard_collation: - PL_collxfrm_base = 0; - PL_collxfrm_mult = 2; + PL_collxfrm_base = 0; + PL_collxfrm_mult = 2; PL_in_utf8_COLLATE_locale = FALSE; PL_strxfrm_NUL_replacement = '\0'; PL_strxfrm_max_cp = 0; - return; + return; } /* If this is not the same locale as currently, set the new one up */ if (! PL_collation_name || strNE(PL_collation_name, newcoll)) { - ++PL_collation_ix; - Safefree(PL_collation_name); - PL_collation_name = stdize_locale(savepv(newcoll)); - PL_collation_standard = isNAME_C_OR_POSIX(newcoll); + ++PL_collation_ix; + Safefree(PL_collation_name); + PL_collation_name = stdize_locale(savepv(newcoll)); + PL_collation_standard = isNAME_C_OR_POSIX(newcoll); if (PL_collation_standard) { goto is_standard_collation; } @@ -1965,7 +1865,7 @@ S_new_collate(pTHX_ const char *newcoll) * get it right the first time to avoid wasted expensive string * transformations. */ - { + { /* We use the string below to find how long the tranformation of it * is. Almost all locales are supersets of ASCII, or at least the * ASCII letters. We use all of them, half upper half lower, @@ -2081,7 +1981,7 @@ S_new_collate(pTHX_ const char *newcoll) } # endif - } + } } #endif /* USE_LOCALE_COLLATE */ @@ -2251,9 +2151,6 @@ S_win32_setlocale(pTHX_ int category, const char* locale) #endif /* - -=head1 Locale-related functions and macros - =for apidoc Perl_setlocale This is an (almost) drop-in replacement for the system L>, @@ -2499,7 +2396,7 @@ the other advantages of C; not keeping C in the C =item * The system function it replaces can have its static return buffer trashed, -not only by a subesequent call to that function, but by a C, +not only by a subsequent call to that function, but by a C, C, or other locale change. The returned buffer of this function is not changed until the next call to it, so the buffer is never in a trashed state. @@ -2593,8 +2490,7 @@ S_my_nl_langinfo(const int item, bool toggle) #if defined(HAS_NL_LANGINFO) /* nl_langinfo() is available. */ # if ! defined(HAS_THREAD_SAFE_NL_LANGINFO_L) \ - || ! defined(HAS_POSIX_2008_LOCALE) \ - || ! defined(DUPLOCALE) + || ! defined(HAS_POSIX_2008_LOCALE) /* Here, use plain nl_langinfo(), switching to the underlying LC_NUMERIC * for those items dependent on it. This must be copied to a buffer before @@ -2608,18 +2504,16 @@ S_my_nl_langinfo(const int item, bool toggle) STORE_LC_NUMERIC_FORCE_TO_UNDERLYING(); } - LOCALE_LOCK; /* Prevent interference from another thread executing - this code section (the only call to nl_langinfo in - the core) */ - + /* Prevent interference from another thread executing this code + * section. */ + NL_LANGINFO_LOCK; /* Copy to a per-thread buffer, which is also one that won't be * destroyed by a subsequent setlocale(), such as the * RESTORE_LC_NUMERIC may do just below. */ retval = save_to_buffer(nl_langinfo(item), &PL_langinfo_buf, &PL_langinfo_bufsize, 0); - - LOCALE_UNLOCK; + NL_LANGINFO_UNLOCK; if (toggle) { RESTORE_LC_NUMERIC(); @@ -2793,8 +2687,8 @@ S_my_nl_langinfo(const int item, bool toggle) /* We don't bother with localeconv_l() because any system that * has it is likely to also have nl_langinfo() */ - LOCALE_LOCK_V; /* Prevent interference with other threads - using localeconv() */ + LOCALECONV_LOCK; /* Prevent interference with other threads + using localeconv() */ # ifdef TS_W32_BROKEN_LOCALECONV @@ -2821,7 +2715,7 @@ S_my_nl_langinfo(const int item, bool toggle) || ! lc->currency_symbol || strEQ("", lc->currency_symbol)) { - LOCALE_UNLOCK_V; + LOCALECONV_UNLOCK; return ""; } @@ -2851,7 +2745,7 @@ S_my_nl_langinfo(const int item, bool toggle) # endif - LOCALE_UNLOCK_V; + LOCALECONV_UNLOCK; break; # ifdef TS_W32_BROKEN_LOCALECONV @@ -2924,8 +2818,8 @@ S_my_nl_langinfo(const int item, bool toggle) STORE_LC_NUMERIC_FORCE_TO_UNDERLYING(); } - LOCALE_LOCK_V; /* Prevent interference with other threads - using localeconv() */ + LOCALECONV_LOCK; /* Prevent interference with other threads + using localeconv() */ # ifdef TS_W32_BROKEN_LOCALECONV @@ -2977,7 +2871,7 @@ S_my_nl_langinfo(const int item, bool toggle) # endif - LOCALE_UNLOCK_V; + LOCALECONV_UNLOCK; if (toggle) { RESTORE_LC_NUMERIC(); @@ -3015,8 +2909,6 @@ S_my_nl_langinfo(const int item, bool toggle) case MON_5: case MON_6: case MON_7: case MON_8: case MON_9: case MON_10: case MON_11: case MON_12: - LOCALE_LOCK; - init_tm(&tm); /* Precaution against core dumps */ tm.tm_sec = 30; tm.tm_min = 30; @@ -3024,9 +2916,11 @@ S_my_nl_langinfo(const int item, bool toggle) tm.tm_year = 2017 - 1900; tm.tm_wday = 0; tm.tm_mon = 0; + + GCC_DIAG_IGNORE_STMT(-Wimplicit-fallthrough); + switch (item) { default: - LOCALE_UNLOCK; Perl_croak(aTHX_ "panic: %s: %d: switch case: %d problem", __FILE__, __LINE__, item); @@ -3113,6 +3007,8 @@ S_my_nl_langinfo(const int item, bool toggle) break; } + GCC_DIAG_RESTORE_STMT; + /* We can't use my_strftime() because it doesn't look at * tm_wday */ while (0 == strftime(PL_langinfo_buf, PL_langinfo_bufsize, @@ -3202,8 +3098,6 @@ S_my_nl_langinfo(const int item, bool toggle) * wday was chosen because its range is all a single digit. * Things like tm_sec have two digits as the minimum: '00' */ - LOCALE_UNLOCK; - retval = PL_langinfo_buf; /* If to return the format, not the value, overwrite the buffer @@ -3252,41 +3146,57 @@ Perl_init_i18nl10n(pTHX_ int printwarn) * Under -DDEBUGGING, if the environment variable PERL_DEBUG_LOCALE_INIT is * set, debugging information is output. * - * This looks more complicated than it is, mainly due to the #ifdefs. + * This looks more complicated than it is, mainly due to the #ifdefs and + * error handling. + * + * Besides some asserts, data structure initialization, and specific + * platform complications, this routine is effectively just two things. + * + * a) setlocale(LC_ALL, ""); + * + * which sets LC_ALL to the values in the current environment. + * + * And for each individual category 'foo' whose value we care about: + * + * b) save_foo = setlocale(LC_foo, NULL); handle_foo(save_foo); * - * We try to set LC_ALL to the value determined by the environment. If - * there is no LC_ALL on this platform, we try the individual categories we - * know about. If this works, we are done. + * (We don't tend to care about categories like LC_PAPER, for example.) * - * But if it doesn't work, we have to do something else. We search the - * environment variables ourselves instead of relying on the system to do - * it. We look at, in order, LC_ALL, LANG, a system default locale (if we - * think there is one), and the ultimate fallback "C". This is all done in - * the same loop as above to avoid duplicating code, but it makes things - * more complex. The 'trial_locales' array is initialized with just one - * element; it causes the behavior described in the paragraph above this to - * happen. If that fails, we add elements to 'trial_locales', and do extra - * loop iterations to cause the behavior described in this paragraph. + * But there are complications. On systems without LC_ALL, it emulates + * step a) by looping through all the categories, and doing + * + * setlocale(LC_foo, ""); + * + * on each. + * + * And it has to deal with if this is an embedded perl, whose locale + * doesn't come from the environment, but has been set up by the caller. + * This is pretty simply handled: the "" in the setlocale calls is not a + * string constant, but a variable which is set to NULL in the embedded + * case. + * + * But the major complication is handling failure and doing fallback. + * There is an array, trial_locales, the elements of which are looped over + * until the locale is successfully set. The array is initialized with + * just one element, for + * setlocale(LC_ALL, $NULL_or_empty) + * If that works, as it almost always does, there's no more elements and + * the loop iterates just the once. Otherwise elements are added for each + * of the environment variables that POSIX dictates should control the + * program, in priority order, with a final one being "C". The loop is + * repeated until the first one succeeds. If all fail, we limp along with + * whatever state we got to. If there is no LC_ALL, an inner loop is run + * through all categories (making things look complex). + * + * A further complication is that Windows has an additional fallback, the + * user-default ANSI code page obtained from the operating system. This is + * added as yet another loop iteration, just before the final "C" * * On Ultrix, the locale MUST come from the environment, so there is * preliminary code to set it. I (khw) am not sure that it is necessary, * and that this couldn't be folded into the loop, but barring any real * platforms to test on, it's staying as-is - * - * A slight complication is that in embedded Perls, the locale may already - * be set-up, and we don't want to get it from the normal environment - * variables. This is handled by having a special environment variable - * indicate we're in this situation. We simply set setlocale's 2nd - * parameter to be a NULL instead of "". That indicates to setlocale that - * it is not to change anything, but to return the current value, - * effectively initializing perl's db to what the locale already is. - * - * We play the same trick with NULL if a LC_ALL succeeds. We call - * setlocale() on the individual categores with NULL to get their existing - * values for our db, instead of trying to change them. - * */ - - dVAR; + */ int ok = 1; @@ -3349,8 +3259,8 @@ Perl_init_i18nl10n(pTHX_ int printwarn) DEBUG_INITIALIZATION_set(cBOOL(PerlEnv_getenv("PERL_DEBUG_LOCALE_INIT"))); # define DEBUG_LOCALE_INIT(category, locale, result) \ - STMT_START { \ - if (debug_initialization) { \ + STMT_START { \ + if (debug_initialization) { \ PerlIO_printf(Perl_debug_log, \ "%s:%d: %s\n", \ __FILE__, __LINE__, \ @@ -3358,7 +3268,7 @@ Perl_init_i18nl10n(pTHX_ int printwarn) locale, \ result)); \ } \ - } STMT_END + } STMT_END /* Make sure the parallel arrays are properly set up */ # ifdef USE_LOCALE_NUMERIC @@ -3438,6 +3348,20 @@ Perl_init_i18nl10n(pTHX_ int printwarn) assert(category_masks[LC_TELEPHONE_INDEX] == LC_TELEPHONE_MASK); # endif # endif +# ifdef USE_LOCALE_SYNTAX + assert(categories[LC_SYNTAX_INDEX] == LC_SYNTAX); + assert(strEQ(category_names[LC_SYNTAX_INDEX], "LC_SYNTAX")); +# ifdef USE_POSIX_2008_LOCALE + assert(category_masks[LC_SYNTAX_INDEX] == LC_SYNTAX_MASK); +# endif +# endif +# ifdef USE_LOCALE_TOD + assert(categories[LC_TOD_INDEX] == LC_TOD); + assert(strEQ(category_names[LC_TOD_INDEX], "LC_TOD")); +# ifdef USE_POSIX_2008_LOCALE + assert(category_masks[LC_TOD_INDEX] == LC_TOD_MASK); +# endif +# endif # ifdef LC_ALL assert(categories[LC_ALL_INDEX] == LC_ALL); assert(strEQ(category_names[LC_ALL_INDEX], "LC_ALL")); @@ -3465,6 +3389,9 @@ Perl_init_i18nl10n(pTHX_ int printwarn) my_strlcpy(PL_locale_utf8ness, C_and_POSIX_utf8ness, sizeof(PL_locale_utf8ness)); + /* See https://github.com/Perl/perl5/issues/17824 */ + Zero(curlocales, NOMINAL_LC_ALL_INDEX, char *); + # ifdef USE_THREAD_SAFE_LOCALE # ifdef WIN32 @@ -3617,7 +3544,7 @@ Perl_init_i18nl10n(pTHX_ int printwarn) DEBUG_LOCALE_INIT(categories[j], trial_locale, curlocales[j]); } - if (! setlocale_failure) { /* All succeeded */ + if (LIKELY(! setlocale_failure)) { /* All succeeded */ break; /* Exit trial_locales loop */ } } @@ -3889,10 +3816,10 @@ Perl_init_i18nl10n(pTHX_ int printwarn) This is an alternative to using the -C command line switch (the -C if present will override this). */ { - const char *p = PerlEnv_getenv("PERL_UNICODE"); - PL_unicode = p ? parse_unicode_opts(&p) : 0; - if (PL_unicode & PERL_UNICODE_UTF8CACHEASSERT_FLAG) - PL_utf8cache = -1; + const char *p = PerlEnv_getenv("PERL_UNICODE"); + PL_unicode = p ? parse_unicode_opts(&p) : 0; + if (PL_unicode & PERL_UNICODE_UTF8CACHEASSERT_FLAG) + PL_utf8cache = -1; } # endif @@ -4255,7 +4182,7 @@ Perl__mem_collxfrm(pTHX_ const char *input_string, if (UNLIKELY(! xbuf)) { DEBUG_L(PerlIO_printf(Perl_debug_log, "_mem_collxfrm: Couldn't malloc %zu bytes\n", xAlloc)); - goto bad; + goto bad; } /* Store the collation id */ @@ -4376,8 +4303,8 @@ Perl__mem_collxfrm(pTHX_ const char *input_string, if (DEBUG_Lv_TEST || debug_initialization) { PerlIO_printf(Perl_debug_log, "_mem_collxfrm required more space than previously calculated" - " for locale %s, trying again with new guess=%d+%zu\n", - PL_collation_name, (int) COLLXFRM_HDR_LEN, + " for locale %s, trying again with new guess=%zu+%zu\n", + PL_collation_name, COLLXFRM_HDR_LEN, xAlloc - COLLXFRM_HDR_LEN); } @@ -4796,7 +4723,7 @@ Perl__is_cur_LC_category_utf8(pTHX_ int category) # if defined(HAS_MBRTOWC) && defined(USE_ITHREADS) /* Prefer this function if available, as it's reentrant */ - memset(&ps, 0, sizeof(ps));; + memzero(&ps, sizeof(ps));; PERL_UNUSED_RESULT(mbrtowc(&wc, NULL, 0, &ps)); /* Reset any shift state */ SETERRNO(0, 0); @@ -4805,12 +4732,12 @@ Perl__is_cur_LC_category_utf8(pTHX_ int category) # else - LOCALE_LOCK; + MBTOWC_LOCK; PERL_UNUSED_RESULT(mbtowc(&wc, NULL, 0));/* Reset any shift state */ SETERRNO(0, 0); len = mbtowc(&wc, STR_WITH_LEN(REPLACEMENT_CHARACTER_UTF8)); SAVE_ERRNO; - LOCALE_UNLOCK; + MBTOWC_UNLOCK; # endif @@ -5205,7 +5132,6 @@ Perl__is_cur_LC_category_utf8(pTHX_ int category) bool Perl__is_in_locale_category(pTHX_ const bool compiling, const int category) { - dVAR; /* Internal function which returns if we are in the scope of a pragma that * enables the locale category 'category'. 'compiling' should indicate if * this is during the compilation phase (TRUE) or not (FALSE). */ @@ -5236,7 +5162,6 @@ Perl_my_strerror(pTHX_ const int errnum) * to the C locale */ char *errstr; - dVAR; #ifndef USE_LOCALE_MESSAGES @@ -5265,8 +5190,7 @@ Perl_my_strerror(pTHX_ const int errnum) } # elif defined(USE_POSIX_2008_LOCALE) \ - && defined(HAS_STRERROR_L) \ - && defined(HAS_DUPLOCALE) + && defined(HAS_STRERROR_L) /* This function is also trivial if we don't have to worry about thread * safety and have strerror_l(), as it handles the switch of locales so we @@ -5321,13 +5245,14 @@ Perl_my_strerror(pTHX_ const int errnum) * same code at the same time. (On thread-safe perls, the LOCK is a * no-op.) Since this is the only place in core that changes LC_MESSAGES * (unless the user has called setlocale(), this works to prevent races. */ - LOCALE_LOCK; + SETLOCALE_LOCK; DEBUG_Lv(PerlIO_printf(Perl_debug_log, "my_strerror called with errnum %d\n", errnum)); if (! within_locale_scope) { save_locale = do_setlocale_c(LC_MESSAGES, NULL); if (! save_locale) { + SETLOCALE_UNLOCK; Perl_croak(aTHX_ "panic: %s: %d: Could not find current LC_MESSAGES locale," " errno=%d\n", __FILE__, __LINE__, errno); @@ -5341,7 +5266,19 @@ Perl_my_strerror(pTHX_ const int errnum) /* The setlocale() just below likely will zap 'save_locale', so * create a copy. */ save_locale = savepv(save_locale); - do_setlocale_c(LC_MESSAGES, "C"); + if (! do_setlocale_c(LC_MESSAGES, "C")) { + + /* If, for some reason, the locale change failed, we + * soldier on as best as possible under the circumstances, + * using the current locale, and clear save_locale, so we + * don't try to change back. On z/0S, all setlocale() + * calls fail after you've created a thread. This is their + * way of making sure the entire process is always a single + * locale. This means that 'use locale' is always in place + * for messages under these circumstances. */ + Safefree(save_locale); + save_locale = NULL; + } } } } /* end of ! within_locale_scope */ @@ -5357,15 +5294,16 @@ Perl_my_strerror(pTHX_ const int errnum) if (! within_locale_scope) { if (save_locale && ! locale_is_C) { if (! do_setlocale_c(LC_MESSAGES, save_locale)) { + SETLOCALE_UNLOCK; Perl_croak(aTHX_ - "panic: %s: %d: setlocale restore failed, errno=%d\n", - __FILE__, __LINE__, errno); + "panic: %s: %d: setlocale restore to '%s' failed, errno=%d\n", + __FILE__, __LINE__, save_locale, errno); } Safefree(save_locale); } } - LOCALE_UNLOCK; + SETLOCALE_UNLOCK; # endif /* End of doesn't have strerror_l */ # ifdef DEBUGGING @@ -5598,11 +5536,7 @@ S_setlocale_debug_string(const int category, /* category number, * be overwritten by the next call, so this should be used just to * formulate a string to immediately print or savepv() on. */ - /* initialise to a non-null value to keep it out of BSS and so keep - * -DPERL_GLOBAL_STRUCT_PRIVATE happy */ - static char ret[256] = "If you can read this, thank your buggy C" - " library strlcpy(), and change your hints file" - " to undef it"; + static char ret[256]; my_strlcpy(ret, "setlocale(", sizeof(ret)); my_strlcat(ret, category_name(category), sizeof(ret)); @@ -5677,7 +5611,6 @@ Perl_thread_locale_term() # ifndef WIN32 { /* Free up */ - dVAR; locale_t cur_obj = uselocale(LC_GLOBAL_LOCALE); if (cur_obj != LC_GLOBAL_LOCALE && cur_obj != PL_C_locale_obj) { freelocale(cur_obj); diff --git a/gnu/usr.bin/perl/make_ext.pl b/gnu/usr.bin/perl/make_ext.pl index 87f8bf3b289..ba507c8abc3 100644 --- a/gnu/usr.bin/perl/make_ext.pl +++ b/gnu/usr.bin/perl/make_ext.pl @@ -36,10 +36,6 @@ my $ext_dirs_re = '(?:' . join('|', @ext_dirs) . ')'; # # make_ext.pl "MAKE=nmake -nologo" --dir=..\ext --target=clean # -# make_ext.pl MAKE=dmake --dir=..\ext -# -# make_ext.pl MAKE=dmake --dir=..\ext --target=clean -# # Will skip building extensions which are marked with an '!' char. # Mostly because they still not ported to specified platform. # @@ -168,7 +164,7 @@ if (IS_WIN32) { $ENV{PATH} = "$topdir;$topdir\\win32\\bin;$ENV{PATH}"; my $pl2bat = "$topdir\\win32\\bin\\pl2bat"; unless (-f "$pl2bat.bat") { - my @args = ($perl, "-I$topdir\\lib", ("$pl2bat.pl") x 2); + my @args = ($perl, "-I$topdir\\lib", "-I$topdir\\cpan\\ExtUtils-PL2Bat\\lib", ("$pl2bat.pl") x 2); print "@args\n" if $verbose; system(@args) unless IS_CROSS; } @@ -659,6 +655,7 @@ sub just_pm_to_blib { |README |README\.patching |README\.release + |\.gitignore )\z/xi; # /i to deal with case munging systems. if ($leaf eq "$last.pm") { ++$has_top; diff --git a/gnu/usr.bin/perl/makedef.pl b/gnu/usr.bin/perl/makedef.pl index f1a7581c34d..0d594043d0a 100644 --- a/gnu/usr.bin/perl/makedef.pl +++ b/gnu/usr.bin/perl/makedef.pl @@ -29,18 +29,16 @@ # perl5.def OS/2 # perldll.def Windows # perl.exp AIX -# perl.imp NetWare # makedef.lis VMS +use strict; +use Config; + my $fold; my %ARGS; my %define; BEGIN { - BEGIN { unshift @INC, "lib" } - use Config; - use strict; - %ARGS = (CCTYPE => 'MSVC', TARG_DIR => ''); sub process_cc_flags { @@ -59,7 +57,7 @@ BEGIN { ++$fold; } } - my @PLATFORM = qw(aix win32 os2 netware vms test); + my @PLATFORM = qw(aix win32 os2 vms test); my %PLATFORM; @PLATFORM{@PLATFORM} = (); @@ -75,7 +73,7 @@ require "./$ARGS{TARG_DIR}regen/embed_lib.pl"; # Is the following guard strictly necessary? Added during refactoring # to keep the same behaviour when merging other code into here. process_cc_flags(@Config{qw(ccflags optimize)}) - if $ARGS{PLATFORM} ne 'win32' && $ARGS{PLATFORM} ne 'netware'; + if $ARGS{PLATFORM} ne 'win32'; # Add the compile-time options that miniperl was built with to %define. # On Win32 these are not the same options as perl itself will be built @@ -117,11 +115,11 @@ if ($define{USE_ITHREADS}) { } } -$define{PERL_IMPLICIT_CONTEXT} ||= +$define{MULTIPLICITY} ||= $define{USE_ITHREADS} || - $define{MULTIPLICITY} ; + $define{PERL_IMPLICIT_CONTEXT} ; -if ($define{USE_ITHREADS} && $ARGS{PLATFORM} ne 'win32' && $ARGS{PLATFORM} ne 'netware') { +if ($define{USE_ITHREADS} && $ARGS{PLATFORM} ne 'win32') { $define{USE_REENTRANT_API} = 1; } @@ -189,6 +187,10 @@ my %skip; # All platforms export boot_DynaLoader unconditionally. my %export = ( boot_DynaLoader => 1 ); +# d_thread_local not perl_thread_local - see hints/darwin.sh +++$export{PL_current_context} + if defined $Config{d_thread_local} && $define{USE_ITHREADS}; + sub try_symbols { foreach my $symbol (@_) { ++$export{$symbol} unless exists $skip{$symbol}; @@ -219,9 +221,7 @@ sub readvar { if ($ARGS{PLATFORM} ne 'os2') { ++$skip{$_} foreach qw( - PL_cryptseen PL_opsave - Perl_GetVars Perl_dump_fds Perl_my_bcopy Perl_my_bzero @@ -363,34 +363,6 @@ unless ($define{'USE_ITHREADS'}) { ++$skip{PL_user_def_props_aTHX}; } -# USE_5005THREADS symbols. Kept as reference for easier removal -++$skip{$_} foreach qw( - PL_sv_mutex - PL_strtab_mutex - PL_svref_mutex - PL_cred_mutex - PL_eval_mutex - PL_fdpid_mutex - PL_sv_lock_mutex - PL_eval_cond - PL_eval_owner - PL_threads_mutex - PL_nthreads - PL_nthreads_cond - PL_threadnum - PL_threadsv_names - PL_thrsv - PL_vtbl_mutex - Perl_condpair_magic - Perl_new_struct_thread - Perl_per_thread_magicals - Perl_thread_create - Perl_find_threadsv - Perl_unlock_condpair - Perl_magic_mutexfree - Perl_sv_lock - ); - unless ($define{'USE_ITHREADS'}) { ++$skip{$_} foreach qw( PL_keyword_plugin_mutex @@ -457,7 +429,7 @@ unless ( $define{'HAS_NEWLOCALE'} ); } -unless ($define{'PERL_IMPLICIT_CONTEXT'}) { +unless ($define{'MULTIPLICITY'}) { ++$skip{$_} foreach qw( PL_my_cxt_index PL_my_cxt_list @@ -485,9 +457,6 @@ unless ($define{'PERL_IMPLICIT_CONTEXT'}) { if ($define{USE_THREAD_SAFE_LOCALE}) { ++$skip{PL_lc_numeric_mutex}; ++$skip{PL_lc_numeric_mutex_depth}; - if (! $define{TS_W32_BROKEN_LOCALECONV}) { - ++$skip{PL_locale_mutex}; - } } unless ($define{'USE_DTRACE'}) { @@ -499,14 +468,6 @@ unless ($define{'USE_DTRACE'}) { ); } -unless ($define{'PERL_NEED_APPCTX'}) { - ++$skip{PL_appctx}; -} - -unless ($define{'PERL_NEED_TIMESBASE'}) { - ++$skip{PL_timesbase}; -} - unless ($define{'DEBUG_LEAKING_SCALARS'}) { ++$skip{PL_sv_serial}; } @@ -527,6 +488,10 @@ unless ($define{'PERL_TRACK_MEMPOOL'}) { ++$skip{PL_memory_debug_header}; } +unless ($define{'PERL_MEM_LOG'}) { + ++$skip{PL_mem_log}; +} + unless ($define{'MULTIPLICITY'}) { ++$skip{$_} foreach qw( PL_interp_size @@ -538,18 +503,6 @@ unless ($define{'MULTIPLICITY'}) { ); } -unless ($define{'PERL_GLOBAL_STRUCT'}) { - ++$skip{PL_global_struct_size}; -} - -unless ($define{'PERL_GLOBAL_STRUCT_PRIVATE'}) { - ++$skip{$_} foreach qw( - PL_my_cxt_keys - PL_my_cxt_keys_size - Perl_my_cxt_index - ); -} - unless ($define{HAS_MMAP}) { ++$skip{PL_mmap_page_size}; } @@ -623,18 +576,6 @@ if ($define{HAS_SIGNBIT}) { ++$skip{Perl_signbit}; } -if ($define{'PERL_GLOBAL_STRUCT'}) { - readvar('perlvars.h', \%skip); - # This seems like the least ugly way to cope with the fact that PL_sh_path - # is mentioned in perlvar.h and globvar.sym, and always exported. - delete $skip{PL_sh_path}; - ++$export{Perl_GetVars}; - try_symbols(qw(PL_Vars PL_VarsPtr)) - unless $ARGS{CCTYPE} eq 'GCC' || $define{PERL_GLOBAL_STRUCT_PRIVATE}; -} else { - ++$skip{$_} foreach qw(Perl_init_global_struct Perl_free_global_struct); -} - ++$skip{PL_op_exec_cnt} unless $define{PERL_TRACE_OPS}; @@ -725,9 +666,6 @@ my @layer_syms = qw( Perl_PerlIO_unread Perl_PerlIO_write ); -if ($ARGS{PLATFORM} eq 'netware') { - push(@layer_syms,'PL_def_layerlist','PL_known_layers','PL_perlio'); -} # Export the symbols that make up the PerlIO abstraction, regardless # of its implementation - read from a file @@ -762,7 +700,7 @@ unless ($Config{d_wcrtomb}) { { my %seen; my ($embed) = setup_embed($ARGS{TARG_DIR}); - my $excludedre = $define{'NO_MATHOMS'} ? qr/[emib]/ : qr/[emi]/; + my $excludedre = $define{'NO_MATHOMS'} ? qr/[emiIb]/ : qr/[emiI]/; foreach (@$embed) { my ($flags, $retval, $func, @args) = @$_; @@ -796,20 +734,9 @@ foreach (@syms) { # variables -if ($define{'MULTIPLICITY'} && $define{PERL_GLOBAL_STRUCT}) { - readvar('perlvars.h', \%export, sub { "Perl_" . $_[1] . $_[2] . "_ptr" }); - # XXX AIX seems to want the perlvars.h symbols, for some reason - if ($ARGS{PLATFORM} eq 'aix' or $ARGS{PLATFORM} eq 'os2') { # OS/2 needs PL_thr_key - readvar('perlvars.h', \%export); - } -} -else { - unless ($define{'PERL_GLOBAL_STRUCT'}) { - readvar('perlvars.h', \%export); - } - unless ($define{MULTIPLICITY}) { - readvar('intrpvar.h', \%export); - } +readvar('perlvars.h', \%export); +unless ($define{MULTIPLICITY}) { + readvar('intrpvar.h', \%export); } # Oddities from PerlIO @@ -831,7 +758,6 @@ if ($ARGS{PLATFORM} eq 'win32') { win32_get_childenv win32_spawnvp Perl_init_os_extras - Perl_thread_create Perl_win32_init Perl_win32_term RunPerl @@ -984,6 +910,9 @@ if ($ARGS{PLATFORM} eq 'win32') { win32_puts win32_getchar win32_putchar + win32_symlink + win32_lstat + win32_readlink )); } elsif ($ARGS{PLATFORM} eq 'vms') { @@ -1140,149 +1069,9 @@ elsif ($ARGS{PLATFORM} eq 'os2') { PL_do_undump )); } -elsif ($ARGS{PLATFORM} eq 'netware') { - try_symbols(qw( - Perl_init_os_extras - Perl_thread_create - Perl_nw5_init - RunPerl - AllocStdPerl - FreeStdPerl - do_spawn2 - do_aspawn - nw_uname - nw_stdin - nw_stdout - nw_stderr - nw_feof - nw_ferror - nw_fopen - nw_fclose - nw_clearerr - nw_getc - nw_fgets - nw_fputc - nw_fputs - nw_fflush - nw_ungetc - nw_fileno - nw_fdopen - nw_freopen - nw_fread - nw_fwrite - nw_setbuf - nw_setvbuf - nw_vfprintf - nw_ftell - nw_fseek - nw_rewind - nw_tmpfile - nw_fgetpos - nw_fsetpos - nw_dup - nw_access - nw_chmod - nw_chsize - nw_close - nw_dup2 - nw_flock - nw_isatty - nw_link - nw_lseek - nw_stat - nw_mktemp - nw_open - nw_read - nw_rename - nw_setmode - nw_unlink - nw_utime - nw_write - nw_chdir - nw_rmdir - nw_closedir - nw_opendir - nw_readdir - nw_rewinddir - nw_seekdir - nw_telldir - nw_htonl - nw_htons - nw_ntohl - nw_ntohs - nw_accept - nw_bind - nw_connect - nw_endhostent - nw_endnetent - nw_endprotoent - nw_endservent - nw_gethostbyaddr - nw_gethostbyname - nw_gethostent - nw_gethostname - nw_getnetbyaddr - nw_getnetbyname - nw_getnetent - nw_getpeername - nw_getprotobyname - nw_getprotobynumber - nw_getprotoent - nw_getservbyname - nw_getservbyport - nw_getservent - nw_getsockname - nw_getsockopt - nw_inet_addr - nw_listen - nw_socket - nw_recv - nw_recvfrom - nw_select - nw_send - nw_sendto - nw_sethostent - nw_setnetent - nw_setprotoent - nw_setservent - nw_setsockopt - nw_inet_ntoa - nw_shutdown - nw_crypt - nw_execvp - nw_kill - nw_Popen - nw_Pclose - nw_Pipe - nw_times - nw_waitpid - nw_getpid - nw_spawnvp - nw_os_id - nw_open_osfhandle - nw_get_osfhandle - nw_abort - nw_sleep - nw_wait - nw_dynaload - nw_strerror - fnFpSetMode - fnInsertHashListAddrs - fnGetHashListAddrs - Perl_deb - Perl_sv_setsv - Perl_sv_catsv - Perl_sv_catpvn - Perl_sv_2pv - nw_freeenviron - Remove_Thread_Ctx - )); -} # When added this code was only run for Win32 (and WinCE at the time) # Currently only Win32 links static extensions into the shared library. -# The NetWare Makefile doesn't support static extensions (and hardcodes the -# list of dynamic extensions, and the rules to build them) # For *nix (and presumably OS/2) with a shared libperl, Makefile.SH compiles # static extensions with -fPIC, but links them to perl, not libperl.so # The VMS build scripts don't yet implement static extensions at all. @@ -1352,13 +1141,6 @@ elsif ($ARGS{PLATFORM} eq 'aix') { print "#!\n"; } } -elsif ($ARGS{PLATFORM} eq 'netware') { - if ($ARGS{FILETYPE} eq 'def') { - print "LIBRARY perl$Config{api_revision}$Config{api_version}\n"; - print "DESCRIPTION 'Perl interpreter for NetWare'\n"; - print "EXPORTS\n"; - } -} # Then the symbols @@ -1380,9 +1162,6 @@ foreach my $symbol (@symbols) { qq("$exportperlmalloc{$symbol}" = "$symbol"), $ordinal{$exportperlmalloc{$symbol}} || ++$sym_ord if $exportperlmalloc and exists $exportperlmalloc{$symbol}; - } - elsif (PLATFORM eq 'netware') { - print "\t$symbol,\n"; } else { print "$symbol\n"; } diff --git a/gnu/usr.bin/perl/makedepend.SH b/gnu/usr.bin/perl/makedepend.SH index 600288f3de0..5cf5a38c778 100644 --- a/gnu/usr.bin/perl/makedepend.SH +++ b/gnu/usr.bin/perl/makedepend.SH @@ -36,9 +36,9 @@ fi mkdir .depending -# This script should be called with +# This script should be called with # sh ./makedepend MAKE=$(MAKE) -case "$1" in +case "$1" in MAKE=*) eval $1; shift ;; esac @@ -112,114 +112,17 @@ $test -d UU || mkdir UU $MAKE clist || ($echo "Searching for .c files..."; \ $echo *.c | $tr ' ' $trnl | $egrep -v '\*' >.clist) -for file in `$cat .clist`; do -# for file in `cat /dev/null`; do - case "$osname" in - uwin) uwinfix="-e s,\\\\\\\\,/,g -e s,\\([a-zA-Z]\\):/,/\\1/,g" ;; - os2) uwinfix="-e s,\\\\\\\\,/,g" ;; - cygwin) uwinfix="-e s,\\\\\\\\,/,g" ;; - posix-bc) uwinfix="-e s/\\*POSIX(\\(.*\\))/\\1/" ;; - vos) uwinfix="-e s/\#/\\\#/" ;; - *) uwinfix="" ;; - esac - case "$file" in - *.c) filebase=`basename $file .c` ;; - *.y) filebase=`basename $file .y` ;; - esac - case "$file" in - */*) finc="-I`echo $file | sed 's#/[^/]*$##'`" ;; - *) finc= ;; - esac - $echo "Finding dependencies for $filebase$_o" - # Below, we strip out all but preprocessor directives. - # We have to take care of situations like - # #if defined(FOO) BAR /* comment line 1 - # more comment lines */ - # If we just delete text starting from the '/*' to the end of line, we will - # screw up cases like - # #if defined(FOO) /* comment */ \ - # && defined(BAR) /* comment */ \ - # && defined(BAZ) /* comment */ \ - # etc. - # Also, in lines like - # #defined FOO(a,b) a/**/b - # the comment may be important and so needs to be retained. - # This code processes the single-line comments first; it assumes there is - # at most one straightforward comment per continued preprocessor line, - # replacing each non-empty comment (and its surrounding white space) by a - # single space. (sed only has a greedy '*' quantifier, so this doesn't - # work right if there are multiple comments per line, and strings can look - # like comments to it; both are unlikely in a preprocessor statement.) Any - # continuation line is joined, and the process repeated on the enlarged - # line as long as there are continuations. At the end, if there are any - # comments remaining, they are either completely empty or are like the - # first situation. The latter are just deleted by first deleting to the - # end of line (including preceding white space) things that start with '/*' - # and the next char isn't a '*'; then things that start with '/**', but the - # next char isn't a '/'. (Subsequent lines of the comment are irrelevant - # and get dropped.) At the end, we unjoin very long lines to avoid - # preprocessor limitations - ( $echo "#line 2 \"$file\""; \ - $sed -n <$file \ - -e "/^${filebase}_init(/q" \ - -e ': tstcont' \ - -e '/^[ ]*#/s|[ ]*/\*..*\*/[ ]*| |' \ - -e '/\\$/{' \ - -e 'N' \ - -e 'b tstcont' \ - -e '}' \ - -e 's/\\\n//g' \ - -e '/^#line/d' \ - -e '/^[ ]*#/{' \ - -e 's|[ ]*/\*[^*].*$||' \ - -e 's|[ ]*/\*\*[^/].*$||' \ - -e 's/.\{255\}/&\\\n/g' \ - -e p \ - -e '}' ) >UU/$file.c - # We're not sure why this was there; the #endif is extraneous on modern z/OS - #if [ "$osname" = os390 -a "$file" = perly.c ]; then - # $echo '#endif' >>UU/$file.c - #fi +clist=`$cat .clist | $sed -e 's,$,.depends,'` - if [ "$osname" = os390 ]; then - $cppstdin $finc -I. $cppflags $cppminus /d' \ - -e '/^#.*"-"/d' \ - -e '/^#.*git_version\.h/d' \ - -e 's#\.[0-9][0-9]*\.c#'"$file.c#" \ - -e 's/^[ ]*#[ ]*line/#/' \ - -e '/^# *[0-9][0-9]* *[".\/]/!d' \ - -e 's/^.*"\(.*\)".*$/'$filebase'\$(OBJ_EXT): \1/' \ - -e 's/^# *[0-9][0-9]* \(.*\)$/'$filebase'\$(OBJ_EXT): \1/' \ - -e 's|: \./|: |' \ - -e 's|\.c\.c|.c|' $uwinfix | \ - $uniq | $sort | $uniq >> .deptmp - else - $cppstdin $finc -I. $cppflags $cppminus .cout 2>.cerr - $sed \ - -e '1d' \ - -e '/^#.*/d' \ - -e '/^#.*/d' \ - -e '/^#.*/d' \ - -e '/^#.*/d' \ - -e '/^#.*/d' \ - -e '/^#.*"-"/d' \ - -e '/^#.*"\/.*\/"/d' \ - -e '/: file path prefix .* never used$/d' \ - -e '/^#.*git_version\.h/d' \ - -e 's#\.[0-9][0-9]*\.c#'"$file.c#" \ - -e 's/^[ ]*#[ ]*line/#/' \ - -e '/^# *[0-9][0-9]* *[".\/]/!d' \ - -e 's/^.*"\(.*\)".*$/'$filebase'\$(OBJ_EXT): \1/' \ - -e 's/^# *[0-9][0-9]* \(.*\)$/'$filebase'\$(OBJ_EXT): \1/' \ - -e 's|: \./|: |' \ - -e 's|\.c\.c|.c|' $uwinfix .cout .cerr| \ - $uniq | $sort | $uniq >> .deptmp - fi - echo "$filebase\$(OBJ_EXT): $@" >> .deptmp -done +# Now, create a Makefile from .clist and run that in parallel +# Makefiles creating more Makefiles +# A Makefile exists to beget more Makefiles. Perl is +# just a vehicle. +rm -f $clist +$MAKE $clist +$cat $clist >.deptmp +rm -f $clist $sed <$mf >$mf.new -e '1,/^# AUTOMATICALLY/!d' @@ -235,6 +138,8 @@ if $test -s .deptmp; then -e 'h; s/mini\(perlmain\)/\1/p; g' \ .deptmp >>$mf.new else + $echo "Should not get here" + exit 1 $MAKE hlist || ($echo "Searching for .h files..."; \ $echo *.h | $tr ' ' $trnl | $egrep -v '\*' >.hlist) $echo "You don't seem to have a proper C preprocessor. Using grep instead." diff --git a/gnu/usr.bin/perl/malloc.c b/gnu/usr.bin/perl/malloc.c index 337efa80088..396cf3f3683 100644 --- a/gnu/usr.bin/perl/malloc.c +++ b/gnu/usr.bin/perl/malloc.c @@ -149,13 +149,13 @@ # Do not allow configuration of runtime options via $ENV{PERL_MALLOC_OPT} NO_PERL_MALLOC_ENV undef - [The variable consists of ;-separated parts of the form CODE=VALUE - with 1-character codes F, M, f, A, P, G, d, a, c for runtime - configuration of FIRST_SBRK, MIN_SBRK, MIN_SBRK_FRAC1000, - SBRK_ALLOW_FAILURES, SBRK_FAILURE_PRICE, sbrk_goodness, - filldead, fillalive, fillcheck. The last 3 are for DEBUGGING - build, and allow switching the tests for free()ed memory read, - uninit memory reads, and free()ed memory write.] + [The variable consists of ;-separated parts of the form CODE=VALUE + with 1-character codes F, M, f, A, P, G, d, a, c for runtime + configuration of FIRST_SBRK, MIN_SBRK, MIN_SBRK_FRAC1000, + SBRK_ALLOW_FAILURES, SBRK_FAILURE_PRICE, sbrk_goodness, + filldead, fillalive, fillcheck. The last 3 are for DEBUGGING + build, and allow switching the tests for free()ed memory read, + uninit memory reads, and free()ed memory write.] This implementation assumes that calling PerlIO_printf() does not result in any memory allocation calls (used during a panic). @@ -238,7 +238,7 @@ #include "EXTERN.h" #define PERL_IN_MALLOC_C #include "perl.h" -#if defined(PERL_IMPLICIT_CONTEXT) +#if defined(MULTIPLICITY) # define croak Perl_croak_nocontext # define croak2 Perl_croak_nocontext # define warn Perl_warn_nocontext @@ -281,18 +281,18 @@ # undef DEBUG_m # define DEBUG_m(a) \ STMT_START { \ - if (PERL_MAYBE_ALIVE && PERL_GET_THX) { \ - dTHX; \ - if (DEBUG_m_TEST) { \ - PL_debug &= ~DEBUG_m_FLAG; \ - a; \ - PL_debug |= DEBUG_m_FLAG; \ - } \ - } \ + if (PERL_MAYBE_ALIVE && PERL_GET_THX) { \ + dTHX; \ + if (DEBUG_m_TEST) { \ + PL_debug &= ~DEBUG_m_FLAG; \ + a; \ + PL_debug |= DEBUG_m_FLAG; \ + } \ + } \ } STMT_END #endif -#ifdef PERL_IMPLICIT_CONTEXT +#ifdef MULTIPLICITY # define PERL_IS_ALIVE aTHX #else # define PERL_IS_ALIVE TRUE @@ -389,27 +389,27 @@ * plus the range checking words, and the header word MINUS ONE. */ union overhead { - union overhead *ov_next; /* when free */ + union overhead *ov_next; /* when free */ #if MEM_ALIGNBYTES > 4 - double strut; /* alignment problems */ + double strut; /* alignment problems */ # if MEM_ALIGNBYTES > 8 - char sstrut[MEM_ALIGNBYTES]; /* for the sizing */ + char sstrut[MEM_ALIGNBYTES]; /* for the sizing */ # endif #endif - struct { + struct { /* * Keep the ovu_index and ovu_magic in this order, having a char * field first gives alignment indigestion in some systems, such as * MachTen. */ - u_char ovu_index; /* bucket # */ - u_char ovu_magic; /* magic number */ + u_char ovu_index; /* bucket # */ + u_char ovu_magic; /* magic number */ #ifdef RCHECK - /* Subtract one to fit into u_short for an extra bucket */ - u_short ovu_size; /* block size (requested + overhead - 1) */ - u_int ovu_rmagic; /* range magic number */ + /* Subtract one to fit into u_short for an extra bucket */ + u_short ovu_size; /* block size (requested + overhead - 1) */ + u_int ovu_rmagic; /* range magic number */ #endif - } ovu; + } ovu; #define ov_magic ovu.ovu_magic #define ov_index ovu.ovu_index #define ov_size ovu.ovu_size @@ -466,10 +466,10 @@ static const u_short buck_size[MAX_BUCKET_BY_TABLE + 1] = }; # define BUCKET_SIZE_NO_SURPLUS(i) ((i) % 2 ? buck_size[i] : (1 << ((i) >> BUCKET_POW2_SHIFT))) # define BUCKET_SIZE_REAL(i) ((i) <= MAX_BUCKET_BY_TABLE \ - ? ((size_t)buck_size[i]) \ - : ((((size_t)1) << ((i) >> BUCKET_POW2_SHIFT)) \ - - MEM_OVERHEAD(i) \ - + POW2_OPTIMIZE_SURPLUS(i))) + ? ((size_t)buck_size[i]) \ + : ((((size_t)1) << ((i) >> BUCKET_POW2_SHIFT)) \ + - MEM_OVERHEAD(i) \ + + POW2_OPTIMIZE_SURPLUS(i))) #else # define BUCKET_SIZE_NO_SURPLUS(i) (((size_t)1) << ((i) >> BUCKET_POW2_SHIFT)) # define BUCKET_SIZE(i) (BUCKET_SIZE_NO_SURPLUS(i) + POW2_OPTIMIZE_SURPLUS(i)) @@ -596,15 +596,15 @@ static const u_short buck_size[MAX_BUCKET_BY_TABLE + 1] = # define MAX_PACKED_POW2 6 # define MAX_PACKED (MAX_PACKED_POW2 * BUCKETS_PER_POW2 + BUCKET_POW2_SHIFT) # define MAX_POW2_ALGO ((1<<(MAX_PACKED_POW2 + 1)) - M_OVERHEAD) -# define TWOK_MASK ((1<> \ - (bucket>>BUCKET_POW2_SHIFT)) + \ - (bucket >= MIN_NEEDS_SHIFT ? 1 : 0))) + (TWOK_SHIFT(block)>> \ + (bucket>>BUCKET_POW2_SHIFT)) + \ + (bucket >= MIN_NEEDS_SHIFT ? 1 : 0))) /* A bucket can have a shift smaller than it size, we need to shift its magic number so it will not overwrite index: */ # ifdef BUCKETS_ROOT2 @@ -618,8 +618,8 @@ static const u_short buck_size[MAX_BUCKET_BY_TABLE + 1] = #ifdef IGNORE_SMALL_BAD_FREE #define FIRST_BUCKET_WITH_CHECK (6 * BUCKETS_PER_POW2) /* 64 */ # define N_BLKS(bucket) ( (bucket) < FIRST_BUCKET_WITH_CHECK \ - ? ((1<>LOG_OF_MIN_ARENA) + 1)<= BIG_SIZE - && (!emergency_buffer_last_req || - (size < (MEM_SIZE)emergency_buffer_last_req))) { - /* Give the possibility to recover, but avoid an infinite cycle. */ - MALLOC_UNLOCK; - emergency_buffer_last_req = size; - emergency_sbrk_croak("Out of memory during \"large\" request for %" UVuf + && (!emergency_buffer_last_req || + (size < (MEM_SIZE)emergency_buffer_last_req))) { + /* Give the possibility to recover, but avoid an infinite cycle. */ + MALLOC_UNLOCK; + emergency_buffer_last_req = size; + emergency_sbrk_croak("Out of memory during \"large\" request for %" UVuf " bytes, total sbrk() is %" UVuf " bytes", (UV)size, (UV)(goodsbrk + sbrk_slack)); } if ((MEM_SIZE)emergency_buffer_size >= rsize) { - char *old = emergency_buffer; - - emergency_buffer_size -= rsize; - emergency_buffer += rsize; - return old; + char *old = emergency_buffer; + + emergency_buffer_size -= rsize; + emergency_buffer += rsize; + return old; } else { - /* First offense, give a possibility to recover by dieing. */ - /* No malloc involved here: */ - IV Size; - char *pv = GET_EMERGENCY_BUFFER(&Size); - int have = 0; - - if (emergency_buffer_size) { - add_to_chain(emergency_buffer, emergency_buffer_size, 0); - emergency_buffer_size = 0; - emergency_buffer = NULL; - have = 1; - } - - if (!pv) - pv = PERL_GET_EMERGENCY_BUFFER(&Size); - if (!pv) { - if (have) - goto do_croak; - return (char *)-1; /* Now die die die... */ - } - - /* Check alignment: */ - if (PTR2UV(pv) & (NEEDED_ALIGNMENT - 1)) { - dTHX; - - PerlIO_puts(PerlIO_stderr(),"Bad alignment of $^M!\n"); - return (char *)-1; /* die die die */ - } - - emergency_buffer = pv; - emergency_buffer_size = Size; + /* First offense, give a possibility to recover by dieing. */ + /* No malloc involved here: */ + IV Size; + char *pv = GET_EMERGENCY_BUFFER(&Size); + int have = 0; + + if (emergency_buffer_size) { + add_to_chain(emergency_buffer, emergency_buffer_size, 0); + emergency_buffer_size = 0; + emergency_buffer = NULL; + have = 1; + } + + if (!pv) + pv = PERL_GET_EMERGENCY_BUFFER(&Size); + if (!pv) { + if (have) + goto do_croak; + return (char *)-1; /* Now die die die... */ + } + + /* Check alignment: */ + if (PTR2UV(pv) & (NEEDED_ALIGNMENT - 1)) { + dTHX; + + PerlIO_puts(PerlIO_stderr(),"Bad alignment of $^M!\n"); + return (char *)-1; /* die die die */ + } + + emergency_buffer = pv; + emergency_buffer_size = Size; } do_croak: MALLOC_UNLOCK; @@ -1064,35 +1064,34 @@ emergency_sbrk(MEM_SIZE size) static void botch(const char *diag, const char *s, const char *file, int line) { - dVAR; dTHX; if (!(PERL_MAYBE_ALIVE && PERL_GET_THX)) - goto do_write; + goto do_write; else { - if (PerlIO_printf(PerlIO_stderr(), - "assertion botched (%s?): %s %s:%d\n", - diag, s, file, line) != 0) { - do_write: /* Can be initializing interpreter */ - MYMALLOC_WRITE2STDERR("assertion botched ("); - MYMALLOC_WRITE2STDERR(diag); - MYMALLOC_WRITE2STDERR("?): "); - MYMALLOC_WRITE2STDERR(s); - MYMALLOC_WRITE2STDERR(" ("); - MYMALLOC_WRITE2STDERR(file); - MYMALLOC_WRITE2STDERR(":"); - { - char linebuf[10]; - char *s = linebuf + sizeof(linebuf) - 1; - int n = line; - *s = 0; - do { - *--s = '0' + (n % 10); - } while (n /= 10); - MYMALLOC_WRITE2STDERR(s); - } - MYMALLOC_WRITE2STDERR(")\n"); - } - PerlProc_abort(); + if (PerlIO_printf(PerlIO_stderr(), + "assertion botched (%s?): %s %s:%d\n", + diag, s, file, line) != 0) { + do_write: /* Can be initializing interpreter */ + MYMALLOC_WRITE2STDERR("assertion botched ("); + MYMALLOC_WRITE2STDERR(diag); + MYMALLOC_WRITE2STDERR("?): "); + MYMALLOC_WRITE2STDERR(s); + MYMALLOC_WRITE2STDERR(" ("); + MYMALLOC_WRITE2STDERR(file); + MYMALLOC_WRITE2STDERR(":"); + { + char linebuf[10]; + char *s = linebuf + sizeof(linebuf) - 1; + int n = line; + *s = 0; + do { + *--s = '0' + (n % 10); + } while (n /= 10); + MYMALLOC_WRITE2STDERR(s); + } + MYMALLOC_WRITE2STDERR(")\n"); + } + PerlProc_abort(); } } #else @@ -1109,19 +1108,19 @@ fill_pat_4bytes(unsigned char *s, size_t nbytes, const unsigned char *fill) const long lfill = *(long*)fill; if (PTR2UV(s) & (sizeof(long)-1)) { /* Align the pattern */ - int shift = sizeof(long) - (PTR2UV(s) & (sizeof(long)-1)); - unsigned const char *f = fill + sizeof(long) - shift; - unsigned char *e1 = s + shift; + int shift = sizeof(long) - (PTR2UV(s) & (sizeof(long)-1)); + unsigned const char *f = fill + sizeof(long) - shift; + unsigned char *e1 = s + shift; - while (s < e1) - *s++ = *f++; + while (s < e1) + *s++ = *f++; } lp = (long*)s; while ((unsigned char*)(lp + 1) <= e) - *lp++ = lfill; + *lp++ = lfill; s = (unsigned char*)lp; while (s < e) - *s++ = *fill++; + *s++ = *fill++; } /* Just malloc()ed */ static const unsigned char fill_feedadad[] = @@ -1132,9 +1131,9 @@ static const unsigned char fill_deadbeef[] = {0xDE, 0xAD, 0xBE, 0xEF, 0xDE, 0xAD, 0xBE, 0xEF, 0xDE, 0xAD, 0xBE, 0xEF, 0xDE, 0xAD, 0xBE, 0xEF}; # define FILL_DEADBEEF(s, n) \ - (void)(FILL_DEAD? (fill_pat_4bytes((s), (n), fill_deadbeef), 0) : 0) + (void)(FILL_DEAD? (fill_pat_4bytes((s), (n), fill_deadbeef), 0) : 0) # define FILL_FEEDADAD(s, n) \ - (void)(FILL_ALIVE? (fill_pat_4bytes((s), (n), fill_feedadad), 0) : 0) + (void)(FILL_ALIVE? (fill_pat_4bytes((s), (n), fill_feedadad), 0) : 0) #else # define FILL_DEADBEEF(s, n) ((void)0) # define FILL_FEEDADAD(s, n) ((void)0) @@ -1150,27 +1149,27 @@ cmp_pat_4bytes(unsigned char *s, size_t nbytes, const unsigned char *fill) const long lfill = *(long*)fill; if (PTR2UV(s) & (sizeof(long)-1)) { /* Align the pattern */ - int shift = sizeof(long) - (PTR2UV(s) & (sizeof(long)-1)); - unsigned const char *f = fill + sizeof(long) - shift; - unsigned char *e1 = s + shift; + int shift = sizeof(long) - (PTR2UV(s) & (sizeof(long)-1)); + unsigned const char *f = fill + sizeof(long) - shift; + unsigned char *e1 = s + shift; - while (s < e1) - if (*s++ != *f++) - return 1; + while (s < e1) + if (*s++ != *f++) + return 1; } lp = (long*)s; while ((unsigned char*)(lp + 1) <= e) - if (*lp++ != lfill) - return 1; + if (*lp++ != lfill) + return 1; s = (unsigned char*)lp; while (s < e) - if (*s++ != *fill++) - return 1; + if (*s++ != *fill++) + return 1; return 0; } # define FILLCHECK_DEADBEEF(s, n) \ - ASSERT(!FILL_CHECK || !cmp_pat_4bytes(s, n, fill_deadbeef), \ - "free()ed/realloc()ed-away memory was overwritten") + ASSERT(!FILL_CHECK || !cmp_pat_4bytes(s, n, fill_deadbeef), \ + "free()ed/realloc()ed-away memory was overwritten") #else # define FILLCHECK_DEADBEEF(s, n) ((void)0) #endif @@ -1178,68 +1177,66 @@ cmp_pat_4bytes(unsigned char *s, size_t nbytes, const unsigned char *fill) STATIC int S_adjust_size_and_find_bucket(size_t *nbytes_p) { - MEM_SIZE shiftr; - int bucket; - size_t nbytes; + MEM_SIZE shiftr; + int bucket; + size_t nbytes; - PERL_ARGS_ASSERT_ADJUST_SIZE_AND_FIND_BUCKET; + PERL_ARGS_ASSERT_ADJUST_SIZE_AND_FIND_BUCKET; - nbytes = *nbytes_p; + nbytes = *nbytes_p; - /* - * Convert amount of memory requested into - * closest block size stored in hash buckets - * which satisfies request. Account for - * space used per block for accounting. - */ + /* + * Convert amount of memory requested into + * closest block size stored in hash buckets + * which satisfies request. Account for + * space used per block for accounting. + */ #ifdef PACK_MALLOC # ifdef SMALL_BUCKET_VIA_TABLE - if (nbytes == 0) - bucket = MIN_BUCKET; - else if (nbytes <= SIZE_TABLE_MAX) { - bucket = bucket_of[(nbytes - 1) >> BUCKET_TABLE_SHIFT]; - } else + if (nbytes == 0) + bucket = MIN_BUCKET; + else if (nbytes <= SIZE_TABLE_MAX) { + bucket = bucket_of[(nbytes - 1) >> BUCKET_TABLE_SHIFT]; + } else # else - if (nbytes == 0) - nbytes = 1; - if (nbytes <= MAX_POW2_ALGO) goto do_shifts; - else + if (nbytes == 0) + nbytes = 1; + if (nbytes <= MAX_POW2_ALGO) goto do_shifts; + else # endif #endif - { - POW2_OPTIMIZE_ADJUST(nbytes); - nbytes += M_OVERHEAD; - nbytes = (nbytes + 3) &~ 3; + { + POW2_OPTIMIZE_ADJUST(nbytes); + nbytes += M_OVERHEAD; + nbytes = (nbytes + 3) &~ 3; #if defined(PACK_MALLOC) && !defined(SMALL_BUCKET_VIA_TABLE) - do_shifts: + do_shifts: #endif - shiftr = (nbytes - 1) >> START_SHIFT; - bucket = START_SHIFTS_BUCKET; - /* apart from this loop, this is O(1) */ - while (shiftr >>= 1) - bucket += BUCKETS_PER_POW2; - } - *nbytes_p = nbytes; - return bucket; + shiftr = (nbytes - 1) >> START_SHIFT; + bucket = START_SHIFTS_BUCKET; + /* apart from this loop, this is O(1) */ + while (shiftr >>= 1) + bucket += BUCKETS_PER_POW2; + } + *nbytes_p = nbytes; + return bucket; } /* -These have the same interfaces as the C lib ones, so are considered documented - =for apidoc malloc -=for apidoc calloc -=for apidoc realloc + +Implements L> which you should use instead. + =cut */ Malloc_t Perl_malloc(size_t nbytes) { - dVAR; - union overhead *p; - int bucket; + union overhead *p; + int bucket; #if defined(DEBUGGING) || defined(RCHECK) - MEM_SIZE size = nbytes; + MEM_SIZE size = nbytes; #endif /* A structure that has more than PTRDIFF_MAX bytes is unfortunately @@ -1255,119 +1252,119 @@ Perl_malloc(size_t nbytes) return NULL; } - BARK_64K_LIMIT("Allocation",nbytes,nbytes); + BARK_64K_LIMIT("Allocation",nbytes,nbytes); #ifdef DEBUGGING - if ((long)nbytes < 0) - croak("%s", "panic: malloc"); + if ((long)nbytes < 0) + croak("%s", "panic: malloc"); #endif - bucket = adjust_size_and_find_bucket(&nbytes); - MALLOC_LOCK; - /* - * If nothing in hash bucket right now, - * request more memory from the system. - */ - if (nextf[bucket] == NULL) - morecore(bucket); - if ((p = nextf[bucket]) == NULL) { - MALLOC_UNLOCK; - { - dTHX; - if (!PL_nomemok) { + bucket = adjust_size_and_find_bucket(&nbytes); + MALLOC_LOCK; + /* + * If nothing in hash bucket right now, + * request more memory from the system. + */ + if (nextf[bucket] == NULL) + morecore(bucket); + if ((p = nextf[bucket]) == NULL) { + MALLOC_UNLOCK; + { + dTHX; + if (!PL_nomemok) { #if defined(PLAIN_MALLOC) && defined(NO_FANCY_MALLOC) - MYMALLOC_WRITE2STDERR("Out of memory!\n"); + MYMALLOC_WRITE2STDERR("Out of memory!\n"); #else - char buff[80]; - char *eb = buff + sizeof(buff) - 1; - char *s = eb; - size_t n = nbytes; + char buff[80]; + char *eb = buff + sizeof(buff) - 1; + char *s = eb; + size_t n = nbytes; - MYMALLOC_WRITE2STDERR("Out of memory during request for "); + MYMALLOC_WRITE2STDERR("Out of memory during request for "); #if defined(DEBUGGING) || defined(RCHECK) - n = size; + n = size; #endif - *s = 0; - do { - *--s = '0' + (n % 10); - } while (n /= 10); - MYMALLOC_WRITE2STDERR(s); - MYMALLOC_WRITE2STDERR(" bytes, total sbrk() is "); - s = eb; - n = goodsbrk + sbrk_slack; - do { - *--s = '0' + (n % 10); - } while (n /= 10); - MYMALLOC_WRITE2STDERR(s); - MYMALLOC_WRITE2STDERR(" bytes!\n"); + *s = 0; + do { + *--s = '0' + (n % 10); + } while (n /= 10); + MYMALLOC_WRITE2STDERR(s); + MYMALLOC_WRITE2STDERR(" bytes, total sbrk() is "); + s = eb; + n = goodsbrk + sbrk_slack; + do { + *--s = '0' + (n % 10); + } while (n /= 10); + MYMALLOC_WRITE2STDERR(s); + MYMALLOC_WRITE2STDERR(" bytes!\n"); #endif /* defined(PLAIN_MALLOC) && defined(NO_FANCY_MALLOC) */ - my_exit(1); - } - } - return (NULL); - } + my_exit(1); + } + } + return (NULL); + } - /* remove from linked list */ + /* remove from linked list */ #ifdef DEBUGGING - if ( (PTR2UV(p) & (MEM_ALIGNBYTES - 1)) - /* Can't get this low */ - || (p && PTR2UV(p) < (1<ov_next) & (MEM_ALIGNBYTES - 1)) - || (p->ov_next && PTR2UV(p->ov_next) < (1<ov_next), PTR2UV(p)); - } + if ( (PTR2UV(p) & (MEM_ALIGNBYTES - 1)) + /* Can't get this low */ + || (p && PTR2UV(p) < (1<ov_next) & (MEM_ALIGNBYTES - 1)) + || (p->ov_next && PTR2UV(p->ov_next) < (1<ov_next), PTR2UV(p)); + } #endif - nextf[bucket] = p->ov_next; + nextf[bucket] = p->ov_next; - MALLOC_UNLOCK; + MALLOC_UNLOCK; - DEBUG_m(PerlIO_printf(Perl_debug_log, - "%p: (%05lu) malloc %ld bytes\n", - (Malloc_t)(p + CHUNK_SHIFT), + DEBUG_m(PerlIO_printf(Perl_debug_log, + "%p: (%05lu) malloc %ld bytes\n", + (Malloc_t)(p + CHUNK_SHIFT), (unsigned long)(PL_an++), - (long)size)); + (long)size)); - FILLCHECK_DEADBEEF((unsigned char*)(p + CHUNK_SHIFT), - BUCKET_SIZE_REAL(bucket) + RMAGIC_SZ); + FILLCHECK_DEADBEEF((unsigned char*)(p + CHUNK_SHIFT), + BUCKET_SIZE_REAL(bucket) + RMAGIC_SZ); #ifdef IGNORE_SMALL_BAD_FREE - if (bucket >= FIRST_BUCKET_WITH_CHECK) + if (bucket >= FIRST_BUCKET_WITH_CHECK) #endif - OV_MAGIC(p, bucket) = MAGIC; + OV_MAGIC(p, bucket) = MAGIC; #ifndef PACK_MALLOC - OV_INDEX(p) = bucket; + OV_INDEX(p) = bucket; #endif #ifdef RCHECK - /* - * Record allocated size of block and - * bound space with magic numbers. - */ - p->ov_rmagic = RMAGIC; - if (bucket <= MAX_SHORT_BUCKET) { - int i; - - nbytes = size + M_OVERHEAD; - p->ov_size = nbytes - 1; - if ((i = nbytes & (RMAGIC_SZ-1))) { - i = RMAGIC_SZ - i; - while (i--) /* nbytes - RMAGIC_SZ is end of alloced area */ - ((caddr_t)p + nbytes - RMAGIC_SZ)[i] = RMAGIC_C; - } - /* Same at RMAGIC_SZ-aligned RMAGIC */ - nbytes = (nbytes + RMAGIC_SZ - 1) & ~(RMAGIC_SZ - 1); - ((u_int *)((caddr_t)p + nbytes))[-1] = RMAGIC; - } - FILL_FEEDADAD((unsigned char *)(p + CHUNK_SHIFT), size); + /* + * Record allocated size of block and + * bound space with magic numbers. + */ + p->ov_rmagic = RMAGIC; + if (bucket <= MAX_SHORT_BUCKET) { + int i; + + nbytes = size + M_OVERHEAD; + p->ov_size = nbytes - 1; + if ((i = nbytes & (RMAGIC_SZ-1))) { + i = RMAGIC_SZ - i; + while (i--) /* nbytes - RMAGIC_SZ is end of alloced area */ + ((caddr_t)p + nbytes - RMAGIC_SZ)[i] = RMAGIC_C; + } + /* Same at RMAGIC_SZ-aligned RMAGIC */ + nbytes = (nbytes + RMAGIC_SZ - 1) & ~(RMAGIC_SZ - 1); + ((u_int *)((caddr_t)p + nbytes))[-1] = RMAGIC; + } + FILL_FEEDADAD((unsigned char *)(p + CHUNK_SHIFT), size); #endif - return ((Malloc_t)(p + CHUNK_SHIFT)); + return ((Malloc_t)(p + CHUNK_SHIFT)); } static char *last_sbrk_top; @@ -1395,33 +1392,33 @@ get_from_chain(MEM_SIZE size) long min_remain = LONG_MAX; while (elt) { - if (elt->size >= size) { - long remains = elt->size - size; - if (remains >= 0 && remains < min_remain) { - oldgoodp = oldp; - min_remain = remains; - } - if (remains == 0) { - break; - } - } - oldp = &( elt->next ); - elt = elt->next; + if (elt->size >= size) { + long remains = elt->size - size; + if (remains >= 0 && remains < min_remain) { + oldgoodp = oldp; + min_remain = remains; + } + if (remains == 0) { + break; + } + } + oldp = &( elt->next ); + elt = elt->next; } if (!oldgoodp) return NULL; if (min_remain) { - void *ret = *oldgoodp; - struct chunk_chain_s *next = (*oldgoodp)->next; - - *oldgoodp = (struct chunk_chain_s *)((char*)ret + size); - (*oldgoodp)->size = min_remain; - (*oldgoodp)->next = next; - return ret; + void *ret = *oldgoodp; + struct chunk_chain_s *next = (*oldgoodp)->next; + + *oldgoodp = (struct chunk_chain_s *)((char*)ret + size); + (*oldgoodp)->size = min_remain; + (*oldgoodp)->next = next; + return ret; } else { - void *ret = *oldgoodp; - *oldgoodp = (*oldgoodp)->next; - n_chunks--; - return ret; + void *ret = *oldgoodp; + *oldgoodp = (*oldgoodp)->next; + n_chunks--; + return ret; } } @@ -1444,26 +1441,26 @@ get_from_bigger_buckets(int bucket, MEM_SIZE size) int price = 1; static int bucketprice[NBUCKETS]; while (bucket <= max_bucket) { - /* We postpone stealing from bigger buckets until we want it - often enough. */ - if (nextf[bucket] && bucketprice[bucket]++ >= price) { - /* Steal it! */ - void *ret = (void*)(nextf[bucket] - 1 + CHUNK_SHIFT); - bucketprice[bucket] = 0; - if (((char*)nextf[bucket]) - M_OVERHEAD == last_op) { - last_op = NULL; /* Disable optimization */ - } - nextf[bucket] = nextf[bucket]->ov_next; + /* We postpone stealing from bigger buckets until we want it + often enough. */ + if (nextf[bucket] && bucketprice[bucket]++ >= price) { + /* Steal it! */ + void *ret = (void*)(nextf[bucket] - 1 + CHUNK_SHIFT); + bucketprice[bucket] = 0; + if (((char*)nextf[bucket]) - M_OVERHEAD == last_op) { + last_op = NULL; /* Disable optimization */ + } + nextf[bucket] = nextf[bucket]->ov_next; #ifdef DEBUGGING_MSTATS - nmalloc[bucket]--; - start_slack -= M_OVERHEAD; + nmalloc[bucket]--; + start_slack -= M_OVERHEAD; #endif - add_to_chain(ret, (BUCKET_SIZE_NO_SURPLUS(bucket) + - POW2_OPTIMIZE_SURPLUS(bucket)), - size); - return ret; - } - bucket++; + add_to_chain(ret, (BUCKET_SIZE_NO_SURPLUS(bucket) + + POW2_OPTIMIZE_SURPLUS(bucket)), + size); + return ret; + } + bucket++; } return NULL; } @@ -1471,7 +1468,6 @@ get_from_bigger_buckets(int bucket, MEM_SIZE size) static union overhead * getpages(MEM_SIZE needed, int *nblksp, int bucket) { - dVAR; /* Need to do (possibly expensive) system call. Try to optimize it for rare calling. */ MEM_SIZE require = needed - sbrked_remains; @@ -1480,134 +1476,134 @@ getpages(MEM_SIZE needed, int *nblksp, int bucket) MEM_SIZE slack = 0; if (sbrk_goodness > 0) { - if (!last_sbrk_top && require < (MEM_SIZE)FIRST_SBRK) - require = FIRST_SBRK; - else if (require < (MEM_SIZE)MIN_SBRK) require = MIN_SBRK; + if (!last_sbrk_top && require < (MEM_SIZE)FIRST_SBRK) + require = FIRST_SBRK; + else if (require < (MEM_SIZE)MIN_SBRK) require = MIN_SBRK; - if (require < (Size_t)(goodsbrk * MIN_SBRK_FRAC1000 / 1000)) - require = goodsbrk * MIN_SBRK_FRAC1000 / 1000; - require = ((require - 1 + MIN_SBRK) / MIN_SBRK) * MIN_SBRK; + if (require < (Size_t)(goodsbrk * MIN_SBRK_FRAC1000 / 1000)) + require = goodsbrk * MIN_SBRK_FRAC1000 / 1000; + require = ((require - 1 + MIN_SBRK) / MIN_SBRK) * MIN_SBRK; } else { - require = needed; - last_sbrk_top = 0; - sbrked_remains = 0; + require = needed; + last_sbrk_top = 0; + sbrked_remains = 0; } DEBUG_m(PerlIO_printf(Perl_debug_log, - "sbrk(%ld) for %ld-byte-long arena\n", - (long)require, (long) needed)); + "sbrk(%ld) for %ld-byte-long arena\n", + (long)require, (long) needed)); cp = (char *)sbrk(require); #ifdef DEBUGGING_MSTATS sbrks++; #endif if (cp == last_sbrk_top) { - /* Common case, anything is fine. */ - sbrk_goodness++; - ovp = (union overhead *) (cp - sbrked_remains); - last_op = cp - sbrked_remains; - sbrked_remains = require - (needed - sbrked_remains); + /* Common case, anything is fine. */ + sbrk_goodness++; + ovp = (union overhead *) (cp - sbrked_remains); + last_op = cp - sbrked_remains; + sbrked_remains = require - (needed - sbrked_remains); } else if (cp == (char *)-1) { /* no more room! */ - ovp = (union overhead *)emergency_sbrk(needed); - if (ovp == (union overhead *)-1) - return 0; - if (((char*)ovp) > last_op) { /* Cannot happen with current emergency_sbrk() */ - last_op = 0; - } - return ovp; + ovp = (union overhead *)emergency_sbrk(needed); + if (ovp == (union overhead *)-1) + return 0; + if (((char*)ovp) > last_op) { /* Cannot happen with current emergency_sbrk() */ + last_op = 0; + } + return ovp; } else { /* Non-continuous or first sbrk(). */ - long add = sbrked_remains; - char *newcp; - - if (sbrked_remains) { /* Put rest into chain, we - cannot use it right now. */ - add_to_chain((void*)(last_sbrk_top - sbrked_remains), - sbrked_remains, 0); - } - - /* Second, check alignment. */ - slack = 0; - - /* WANTED_ALIGNMENT may be more than NEEDED_ALIGNMENT, but this may - improve performance of memory access. */ - if (PTR2UV(cp) & (WANTED_ALIGNMENT - 1)) { /* Not aligned. */ - slack = WANTED_ALIGNMENT - (PTR2UV(cp) & (WANTED_ALIGNMENT - 1)); - add += slack; - } - - if (add) { - DEBUG_m(PerlIO_printf(Perl_debug_log, - "sbrk(%ld) to fix non-continuous/off-page sbrk:\n\t%ld for alignment,\t%ld were assumed to come from the tail of the previous sbrk\n", - (long)add, (long) slack, - (long) sbrked_remains)); - newcp = (char *)sbrk(add); + long add = sbrked_remains; + char *newcp; + + if (sbrked_remains) { /* Put rest into chain, we + cannot use it right now. */ + add_to_chain((void*)(last_sbrk_top - sbrked_remains), + sbrked_remains, 0); + } + + /* Second, check alignment. */ + slack = 0; + + /* WANTED_ALIGNMENT may be more than NEEDED_ALIGNMENT, but this may + improve performance of memory access. */ + if (PTR2UV(cp) & (WANTED_ALIGNMENT - 1)) { /* Not aligned. */ + slack = WANTED_ALIGNMENT - (PTR2UV(cp) & (WANTED_ALIGNMENT - 1)); + add += slack; + } + + if (add) { + DEBUG_m(PerlIO_printf(Perl_debug_log, + "sbrk(%ld) to fix non-continuous/off-page sbrk:\n\t%ld for alignment,\t%ld were assumed to come from the tail of the previous sbrk\n", + (long)add, (long) slack, + (long) sbrked_remains)); + newcp = (char *)sbrk(add); #if defined(DEBUGGING_MSTATS) - sbrks++; - sbrk_slack += add; + sbrks++; + sbrk_slack += add; #endif - if (newcp != cp + require) { - /* Too bad: even rounding sbrk() is not continuous.*/ - DEBUG_m(PerlIO_printf(Perl_debug_log, - "failed to fix bad sbrk()\n")); + if (newcp != cp + require) { + /* Too bad: even rounding sbrk() is not continuous.*/ + DEBUG_m(PerlIO_printf(Perl_debug_log, + "failed to fix bad sbrk()\n")); #ifdef PACK_MALLOC - if (slack) { - MALLOC_UNLOCK; - fatalcroak("panic: Off-page sbrk\n"); - } + if (slack) { + MALLOC_UNLOCK; + fatalcroak("panic: Off-page sbrk\n"); + } #endif - if (sbrked_remains) { - /* Try again. */ + if (sbrked_remains) { + /* Try again. */ #if defined(DEBUGGING_MSTATS) - sbrk_slack += require; + sbrk_slack += require; #endif - require = needed; - DEBUG_m(PerlIO_printf(Perl_debug_log, - "straight sbrk(%ld)\n", - (long)require)); - cp = (char *)sbrk(require); + require = needed; + DEBUG_m(PerlIO_printf(Perl_debug_log, + "straight sbrk(%ld)\n", + (long)require)); + cp = (char *)sbrk(require); #ifdef DEBUGGING_MSTATS - sbrks++; + sbrks++; #endif - if (cp == (char *)-1) - return 0; - } - sbrk_goodness = -1; /* Disable optimization! - Continue with not-aligned... */ - } else { - cp += slack; - require += sbrked_remains; - } - } - - if (last_sbrk_top) { - sbrk_goodness -= SBRK_FAILURE_PRICE; - } - - ovp = (union overhead *) cp; - /* - * Round up to minimum allocation size boundary - * and deduct from block count to reflect. - */ + if (cp == (char *)-1) + return 0; + } + sbrk_goodness = -1; /* Disable optimization! + Continue with not-aligned... */ + } else { + cp += slack; + require += sbrked_remains; + } + } + + if (last_sbrk_top) { + sbrk_goodness -= SBRK_FAILURE_PRICE; + } + + ovp = (union overhead *) cp; + /* + * Round up to minimum allocation size boundary + * and deduct from block count to reflect. + */ # if NEEDED_ALIGNMENT > MEM_ALIGNBYTES - if (PTR2UV(ovp) & (NEEDED_ALIGNMENT - 1)) - fatalcroak("Misalignment of sbrk()\n"); - else + if (PTR2UV(ovp) & (NEEDED_ALIGNMENT - 1)) + fatalcroak("Misalignment of sbrk()\n"); + else # endif - if (PTR2UV(ovp) & (MEM_ALIGNBYTES - 1)) { - DEBUG_m(PerlIO_printf(Perl_debug_log, - "fixing sbrk(): %d bytes off machine alignment\n", - (int)(PTR2UV(ovp) & (MEM_ALIGNBYTES - 1)))); - ovp = INT2PTR(union overhead *,(PTR2UV(ovp) + MEM_ALIGNBYTES) & - (MEM_ALIGNBYTES - 1)); - (*nblksp)--; + if (PTR2UV(ovp) & (MEM_ALIGNBYTES - 1)) { + DEBUG_m(PerlIO_printf(Perl_debug_log, + "fixing sbrk(): %d bytes off machine alignment\n", + (int)(PTR2UV(ovp) & (MEM_ALIGNBYTES - 1)))); + ovp = INT2PTR(union overhead *,(PTR2UV(ovp) + MEM_ALIGNBYTES) & + (MEM_ALIGNBYTES - 1)); + (*nblksp)--; # if defined(DEBUGGING_MSTATS) - /* This is only approx. if TWO_POT_OPTIMIZE: */ - sbrk_slack += (1 << (bucket >> BUCKET_POW2_SHIFT)); + /* This is only approx. if TWO_POT_OPTIMIZE: */ + sbrk_slack += (1 << (bucket >> BUCKET_POW2_SHIFT)); # endif - } - ; /* Finish "else" */ - sbrked_remains = require - needed; - last_op = cp; + } + ; /* Finish "else" */ + sbrked_remains = require - needed; + last_op = cp; } #if !defined(PLAIN_MALLOC) && !defined(NO_FANCY_MALLOC) emergency_buffer_last_req = 0; @@ -1623,40 +1619,40 @@ static int getpages_adjacent(MEM_SIZE require) { if (require <= sbrked_remains) { - sbrked_remains -= require; + sbrked_remains -= require; } else { - char *cp; + char *cp; - require -= sbrked_remains; - /* We do not try to optimize sbrks here, we go for place. */ - cp = (char*) sbrk(require); + require -= sbrked_remains; + /* We do not try to optimize sbrks here, we go for place. */ + cp = (char*) sbrk(require); #ifdef DEBUGGING_MSTATS - sbrks++; - goodsbrk += require; + sbrks++; + goodsbrk += require; #endif - if (cp == last_sbrk_top) { - sbrked_remains = 0; - last_sbrk_top = cp + require; - } else { - if (cp == (char*)-1) { /* Out of memory */ + if (cp == last_sbrk_top) { + sbrked_remains = 0; + last_sbrk_top = cp + require; + } else { + if (cp == (char*)-1) { /* Out of memory */ #ifdef DEBUGGING_MSTATS - goodsbrk -= require; + goodsbrk -= require; #endif - return 0; - } - /* Report the failure: */ - if (sbrked_remains) - add_to_chain((void*)(last_sbrk_top - sbrked_remains), - sbrked_remains, 0); - add_to_chain((void*)cp, require, 0); - sbrk_goodness -= SBRK_FAILURE_PRICE; - sbrked_remains = 0; - last_sbrk_top = 0; - last_op = 0; - return 0; - } + return 0; + } + /* Report the failure: */ + if (sbrked_remains) + add_to_chain((void*)(last_sbrk_top - sbrked_remains), + sbrked_remains, 0); + add_to_chain((void*)cp, require, 0); + sbrk_goodness -= SBRK_FAILURE_PRICE; + sbrked_remains = 0; + last_sbrk_top = 0; + last_op = 0; + return 0; + } } - + return 1; } @@ -1666,231 +1662,245 @@ getpages_adjacent(MEM_SIZE require) static void morecore(int bucket) { - dVAR; - union overhead *ovp; - int rnu; /* 2^rnu bytes will be requested */ - int nblks; /* become nblks blocks of the desired size */ - MEM_SIZE siz, needed; - static int were_called = 0; - - if (nextf[bucket]) - return; + union overhead *ovp; + int rnu; /* 2^rnu bytes will be requested */ + int nblks; /* become nblks blocks of the desired size */ + MEM_SIZE siz, needed; + static int were_called = 0; + + if (nextf[bucket]) + return; #ifndef NO_PERL_MALLOC_ENV - if (!were_called) { - /* It's our first time. Initialize ourselves */ - were_called = 1; /* Avoid a loop */ - if (!MallocCfg[MallocCfg_skip_cfg_env]) { - char *s = getenv("PERL_MALLOC_OPT"), *t = s; + if (!were_called) { + /* It's our first time. Initialize ourselves */ + were_called = 1; /* Avoid a loop */ + if (!MallocCfg[MallocCfg_skip_cfg_env]) { + char *s = getenv("PERL_MALLOC_OPT"), *t = s; const char *off; - const char *opts = PERL_MALLOC_OPT_CHARS; - int changed = 0; - - while ( t && t[0] && t[1] == '=' - && ((off = strchr(opts, *t))) ) { - IV val = 0; - - t += 2; - while (isDIGIT(*t)) - val = 10*val + *t++ - '0'; - if (!*t || *t == ';') { - if (MallocCfg[off - opts] != val) - changed = 1; - MallocCfg[off - opts] = val; - if (*t) - t++; - } - } - if (t && *t) { - dTHX; - MYMALLOC_WRITE2STDERR("Unrecognized part of PERL_MALLOC_OPT: \""); - MYMALLOC_WRITE2STDERR(t); - MYMALLOC_WRITE2STDERR("\"\n"); - } - if (changed) - MallocCfg[MallocCfg_cfg_env_read] = 1; - } - } + const char *opts = PERL_MALLOC_OPT_CHARS; + int changed = 0; + + while ( t && t[0] && t[1] == '=' + && ((off = strchr(opts, *t))) ) { + IV val = 0; + + t += 2; + while (isDIGIT(*t)) + val = 10*val + *t++ - '0'; + if (!*t || *t == ';') { + if (MallocCfg[off - opts] != val) + changed = 1; + MallocCfg[off - opts] = val; + if (*t) + t++; + } + } + if (t && *t) { + dTHX; + MYMALLOC_WRITE2STDERR("Unrecognized part of PERL_MALLOC_OPT: \""); + MYMALLOC_WRITE2STDERR(t); + MYMALLOC_WRITE2STDERR("\"\n"); + } + if (changed) + MallocCfg[MallocCfg_cfg_env_read] = 1; + } + } #endif - if (bucket == sizeof(MEM_SIZE)*8*BUCKETS_PER_POW2) { - MALLOC_UNLOCK; - croak("%s", "Out of memory during ridiculously large request"); - } - if (bucket > max_bucket) - max_bucket = bucket; - - rnu = ( (bucket <= (LOG_OF_MIN_ARENA << BUCKET_POW2_SHIFT)) - ? LOG_OF_MIN_ARENA - : (bucket >> BUCKET_POW2_SHIFT) ); - /* This may be overwritten later: */ - nblks = 1 << (rnu - (bucket >> BUCKET_POW2_SHIFT)); /* how many blocks to get */ - needed = ((MEM_SIZE)1 << rnu) + POW2_OPTIMIZE_SURPLUS(bucket); - if (nextf[rnu << BUCKET_POW2_SHIFT]) { /* 2048b bucket. */ - ovp = nextf[rnu << BUCKET_POW2_SHIFT] - 1 + CHUNK_SHIFT; - nextf[rnu << BUCKET_POW2_SHIFT] - = nextf[rnu << BUCKET_POW2_SHIFT]->ov_next; + if (bucket == sizeof(MEM_SIZE)*8*BUCKETS_PER_POW2) { + MALLOC_UNLOCK; + croak("%s", "Out of memory during ridiculously large request"); + } + if (bucket > max_bucket) + max_bucket = bucket; + + rnu = ( (bucket <= (LOG_OF_MIN_ARENA << BUCKET_POW2_SHIFT)) + ? LOG_OF_MIN_ARENA + : (bucket >> BUCKET_POW2_SHIFT) ); + /* This may be overwritten later: */ + nblks = 1 << (rnu - (bucket >> BUCKET_POW2_SHIFT)); /* how many blocks to get */ + needed = ((MEM_SIZE)1 << rnu) + POW2_OPTIMIZE_SURPLUS(bucket); + if (nextf[rnu << BUCKET_POW2_SHIFT]) { /* 2048b bucket. */ + ovp = nextf[rnu << BUCKET_POW2_SHIFT] - 1 + CHUNK_SHIFT; + nextf[rnu << BUCKET_POW2_SHIFT] + = nextf[rnu << BUCKET_POW2_SHIFT]->ov_next; #ifdef DEBUGGING_MSTATS - nmalloc[rnu << BUCKET_POW2_SHIFT]--; - start_slack -= M_OVERHEAD; + nmalloc[rnu << BUCKET_POW2_SHIFT]--; + start_slack -= M_OVERHEAD; #endif - DEBUG_m(PerlIO_printf(Perl_debug_log, - "stealing %ld bytes from %ld arena\n", - (long) needed, (long) rnu << BUCKET_POW2_SHIFT)); - } else if (chunk_chain - && (ovp = (union overhead*) get_from_chain(needed))) { - DEBUG_m(PerlIO_printf(Perl_debug_log, - "stealing %ld bytes from chain\n", - (long) needed)); - } else if ( (ovp = (union overhead*) - get_from_bigger_buckets((rnu << BUCKET_POW2_SHIFT) + 1, - needed)) ) { - DEBUG_m(PerlIO_printf(Perl_debug_log, - "stealing %ld bytes from bigger buckets\n", - (long) needed)); - } else if (needed <= sbrked_remains) { - ovp = (union overhead *)(last_sbrk_top - sbrked_remains); - sbrked_remains -= needed; - last_op = (char*)ovp; - } else - ovp = getpages(needed, &nblks, bucket); - - if (!ovp) - return; - FILL_DEADBEEF((unsigned char*)ovp, needed); - - /* - * Add new memory allocated to that on - * free list for this hash bucket. - */ - siz = BUCKET_SIZE_NO_SURPLUS(bucket); /* No surplus if nblks > 1 */ + DEBUG_m(PerlIO_printf(Perl_debug_log, + "stealing %ld bytes from %ld arena\n", + (long) needed, (long) rnu << BUCKET_POW2_SHIFT)); + } else if (chunk_chain + && (ovp = (union overhead*) get_from_chain(needed))) { + DEBUG_m(PerlIO_printf(Perl_debug_log, + "stealing %ld bytes from chain\n", + (long) needed)); + } else if ( (ovp = (union overhead*) + get_from_bigger_buckets((rnu << BUCKET_POW2_SHIFT) + 1, + needed)) ) { + DEBUG_m(PerlIO_printf(Perl_debug_log, + "stealing %ld bytes from bigger buckets\n", + (long) needed)); + } else if (needed <= sbrked_remains) { + ovp = (union overhead *)(last_sbrk_top - sbrked_remains); + sbrked_remains -= needed; + last_op = (char*)ovp; + } else + ovp = getpages(needed, &nblks, bucket); + + if (!ovp) + return; + FILL_DEADBEEF((unsigned char*)ovp, needed); + + /* + * Add new memory allocated to that on + * free list for this hash bucket. + */ + siz = BUCKET_SIZE_NO_SURPLUS(bucket); /* No surplus if nblks > 1 */ #ifdef PACK_MALLOC - *(u_char*)ovp = bucket; /* Fill index. */ - if (bucket <= MAX_PACKED) { - ovp = (union overhead *) ((char*)ovp + BLK_SHIFT(bucket)); - nblks = N_BLKS(bucket); + *(u_char*)ovp = bucket; /* Fill index. */ + if (bucket <= MAX_PACKED) { + ovp = (union overhead *) ((char*)ovp + BLK_SHIFT(bucket)); + nblks = N_BLKS(bucket); # ifdef DEBUGGING_MSTATS - start_slack += BLK_SHIFT(bucket); + start_slack += BLK_SHIFT(bucket); # endif - } else if (bucket < LOG_OF_MIN_ARENA * BUCKETS_PER_POW2) { - ovp = (union overhead *) ((char*)ovp + BLK_SHIFT(bucket)); - siz -= sizeof(union overhead); - } else ovp++; /* One chunk per block. */ + } else if (bucket < LOG_OF_MIN_ARENA * BUCKETS_PER_POW2) { + ovp = (union overhead *) ((char*)ovp + BLK_SHIFT(bucket)); + siz -= sizeof(union overhead); + } else ovp++; /* One chunk per block. */ #endif /* PACK_MALLOC */ - nextf[bucket] = ovp; + nextf[bucket] = ovp; #ifdef DEBUGGING_MSTATS - nmalloc[bucket] += nblks; - if (bucket > MAX_PACKED) { - start_slack += M_OVERHEAD * nblks; - } + nmalloc[bucket] += nblks; + if (bucket > MAX_PACKED) { + start_slack += M_OVERHEAD * nblks; + } #endif - while (--nblks > 0) { - ovp->ov_next = (union overhead *)((caddr_t)ovp + siz); - ovp = (union overhead *)((caddr_t)ovp + siz); - } - /* Not all sbrks return zeroed memory.*/ - ovp->ov_next = (union overhead *)NULL; + while (--nblks > 0) { + ovp->ov_next = (union overhead *)((caddr_t)ovp + siz); + ovp = (union overhead *)((caddr_t)ovp + siz); + } + /* Not all sbrks return zeroed memory.*/ + ovp->ov_next = (union overhead *)NULL; #ifdef PACK_MALLOC - if (bucket == 7*BUCKETS_PER_POW2) { /* Special case, explanation is above. */ - union overhead *n_op = nextf[7*BUCKETS_PER_POW2]->ov_next; - nextf[7*BUCKETS_PER_POW2] = - (union overhead *)((caddr_t)nextf[7*BUCKETS_PER_POW2] - - sizeof(union overhead)); - nextf[7*BUCKETS_PER_POW2]->ov_next = n_op; - } + if (bucket == 7*BUCKETS_PER_POW2) { /* Special case, explanation is above. */ + union overhead *n_op = nextf[7*BUCKETS_PER_POW2]->ov_next; + nextf[7*BUCKETS_PER_POW2] = + (union overhead *)((caddr_t)nextf[7*BUCKETS_PER_POW2] + - sizeof(union overhead)); + nextf[7*BUCKETS_PER_POW2]->ov_next = n_op; + } #endif /* !PACK_MALLOC */ } +/* +=for apidoc mfree + +Implements L> which you should use instead. + +=cut +*/ + Free_t Perl_mfree(Malloc_t where) { - dVAR; - MEM_SIZE size; - union overhead *ovp; - char *cp = (char*)where; + MEM_SIZE size; + union overhead *ovp; + char *cp = (char*)where; #ifdef PACK_MALLOC - u_char bucket; + u_char bucket; #endif - DEBUG_m(PerlIO_printf(Perl_debug_log, - "0x%" UVxf ": (%05lu) free\n", - PTR2UV(cp), (unsigned long)(PL_an++))); + DEBUG_m(PerlIO_printf(Perl_debug_log, + "0x%" UVxf ": (%05lu) free\n", + PTR2UV(cp), (unsigned long)(PL_an++))); - if (cp == NULL) - return; + if (cp == NULL) + return; #ifdef DEBUGGING - if (PTR2UV(cp) & (MEM_ALIGNBYTES - 1)) - croak("%s", "wrong alignment in free()"); + if (PTR2UV(cp) & (MEM_ALIGNBYTES - 1)) + croak("%s", "wrong alignment in free()"); #endif - ovp = (union overhead *)((caddr_t)cp - - sizeof (union overhead) * CHUNK_SHIFT); + ovp = (union overhead *)((caddr_t)cp + - sizeof (union overhead) * CHUNK_SHIFT); #ifdef PACK_MALLOC - bucket = OV_INDEX(ovp); + bucket = OV_INDEX(ovp); #endif #ifdef IGNORE_SMALL_BAD_FREE - if ((bucket >= FIRST_BUCKET_WITH_CHECK) - && (OV_MAGIC(ovp, bucket) != MAGIC)) + if ((bucket >= FIRST_BUCKET_WITH_CHECK) + && (OV_MAGIC(ovp, bucket) != MAGIC)) #else - if (OV_MAGIC(ovp, bucket) != MAGIC) + if (OV_MAGIC(ovp, bucket) != MAGIC) #endif - { - static int bad_free_warn = -1; - if (bad_free_warn == -1) { - dTHX; - char *pbf = PerlEnv_getenv("PERL_BADFREE"); - bad_free_warn = (pbf) ? strNE("0", pbf) : 1; - } - if (!bad_free_warn) - return; + { + static int bad_free_warn = -1; + if (bad_free_warn == -1) { + dTHX; + char *pbf = PerlEnv_getenv("PERL_BADFREE"); + bad_free_warn = (pbf) ? strNE("0", pbf) : 1; + } + if (!bad_free_warn) + return; #ifdef RCHECK - { - dTHX; - if (!PERL_IS_ALIVE || !PL_curcop) - Perl_ck_warner_d(aTHX_ packWARN(WARN_MALLOC), "%s free() ignored (RMAGIC, PERL_CORE)", - ovp->ov_rmagic == RMAGIC - 1 ? - "Duplicate" : "Bad"); - } + { + dTHX; + if (!PERL_IS_ALIVE || !PL_curcop) + Perl_ck_warner_d(aTHX_ packWARN(WARN_MALLOC), "%s free() ignored (RMAGIC, PERL_CORE)", + ovp->ov_rmagic == RMAGIC - 1 ? + "Duplicate" : "Bad"); + } #else - { - dTHX; - if (!PERL_IS_ALIVE || !PL_curcop) - Perl_ck_warner_d(aTHX_ packWARN(WARN_MALLOC), "%s", "Bad free() ignored (PERL_CORE)"); - } + { + dTHX; + if (!PERL_IS_ALIVE || !PL_curcop) + Perl_ck_warner_d(aTHX_ packWARN(WARN_MALLOC), "%s", "Bad free() ignored (PERL_CORE)"); + } #endif - return; /* sanity */ - } + return; /* sanity */ + } #ifdef RCHECK - ASSERT(ovp->ov_rmagic == RMAGIC, "chunk's head overwrite"); - if (OV_INDEX(ovp) <= MAX_SHORT_BUCKET) { - int i; - MEM_SIZE nbytes = ovp->ov_size + 1; - - if ((i = nbytes & (RMAGIC_SZ-1))) { - i = RMAGIC_SZ - i; - while (i--) { /* nbytes - RMAGIC_SZ is end of alloced area */ - ASSERT(((caddr_t)ovp + nbytes - RMAGIC_SZ)[i] == RMAGIC_C, - "chunk's tail overwrite"); - } - } - /* Same at RMAGIC_SZ-aligned RMAGIC */ - nbytes = (nbytes + (RMAGIC_SZ-1)) & ~(RMAGIC_SZ-1); - ASSERT(((u_int *)((caddr_t)ovp + nbytes))[-1] == RMAGIC, - "chunk's tail overwrite"); - FILLCHECK_DEADBEEF((unsigned char*)((caddr_t)ovp + nbytes), - BUCKET_SIZE(OV_INDEX(ovp)) - nbytes); - } - FILL_DEADBEEF((unsigned char*)(ovp+CHUNK_SHIFT), - BUCKET_SIZE_REAL(OV_INDEX(ovp)) + RMAGIC_SZ); - ovp->ov_rmagic = RMAGIC - 1; + ASSERT(ovp->ov_rmagic == RMAGIC, "chunk's head overwrite"); + if (OV_INDEX(ovp) <= MAX_SHORT_BUCKET) { + int i; + MEM_SIZE nbytes = ovp->ov_size + 1; + + if ((i = nbytes & (RMAGIC_SZ-1))) { + i = RMAGIC_SZ - i; + while (i--) { /* nbytes - RMAGIC_SZ is end of alloced area */ + ASSERT(((caddr_t)ovp + nbytes - RMAGIC_SZ)[i] == RMAGIC_C, + "chunk's tail overwrite"); + } + } + /* Same at RMAGIC_SZ-aligned RMAGIC */ + nbytes = (nbytes + (RMAGIC_SZ-1)) & ~(RMAGIC_SZ-1); + ASSERT(((u_int *)((caddr_t)ovp + nbytes))[-1] == RMAGIC, + "chunk's tail overwrite"); + FILLCHECK_DEADBEEF((unsigned char*)((caddr_t)ovp + nbytes), + BUCKET_SIZE(OV_INDEX(ovp)) - nbytes); + } + FILL_DEADBEEF((unsigned char*)(ovp+CHUNK_SHIFT), + BUCKET_SIZE_REAL(OV_INDEX(ovp)) + RMAGIC_SZ); + ovp->ov_rmagic = RMAGIC - 1; #endif - ASSERT(OV_INDEX(ovp) < NBUCKETS, "chunk's head overwrite"); - size = OV_INDEX(ovp); + ASSERT(OV_INDEX(ovp) < NBUCKETS, "chunk's head overwrite"); + size = OV_INDEX(ovp); - MALLOC_LOCK; - ovp->ov_next = nextf[size]; - nextf[size] = ovp; - MALLOC_UNLOCK; + MALLOC_LOCK; + ovp->ov_next = nextf[size]; + nextf[size] = ovp; + MALLOC_UNLOCK; } +/* +=for apidoc realloc + +Implements L> which you should use instead. + +=cut +*/ + /* There is no need to do any locking in realloc (with an exception of trying to grow in place if we are at the end of the chain). If somebody calls us from a different thread with the same address, @@ -1899,196 +1909,203 @@ Perl_mfree(Malloc_t where) Malloc_t Perl_realloc(void *mp, size_t nbytes) { - dVAR; - MEM_SIZE onb; - union overhead *ovp; - char *res; - int prev_bucket; - int bucket; - int incr; /* 1 if does not fit, -1 if "easily" fits in a - smaller bucket, otherwise 0. */ - char *cp = (char*)mp; + MEM_SIZE onb; + union overhead *ovp; + char *res; + int prev_bucket; + int bucket; + int incr; /* 1 if does not fit, -1 if "easily" fits in a + smaller bucket, otherwise 0. */ + char *cp = (char*)mp; #ifdef DEBUGGING - MEM_SIZE size = nbytes; + MEM_SIZE size = nbytes; - if ((long)nbytes < 0) - croak("%s", "panic: realloc"); + if ((long)nbytes < 0) + croak("%s", "panic: realloc"); #endif - BARK_64K_LIMIT("Reallocation",nbytes,size); - if (!cp) - return Perl_malloc(nbytes); + BARK_64K_LIMIT("Reallocation",nbytes,size); + if (!cp) + return Perl_malloc(nbytes); - ovp = (union overhead *)((caddr_t)cp - - sizeof (union overhead) * CHUNK_SHIFT); - bucket = OV_INDEX(ovp); + ovp = (union overhead *)((caddr_t)cp + - sizeof (union overhead) * CHUNK_SHIFT); + bucket = OV_INDEX(ovp); #ifdef IGNORE_SMALL_BAD_FREE - if ((bucket >= FIRST_BUCKET_WITH_CHECK) - && (OV_MAGIC(ovp, bucket) != MAGIC)) + if ((bucket >= FIRST_BUCKET_WITH_CHECK) + && (OV_MAGIC(ovp, bucket) != MAGIC)) #else - if (OV_MAGIC(ovp, bucket) != MAGIC) + if (OV_MAGIC(ovp, bucket) != MAGIC) #endif - { - static int bad_free_warn = -1; - if (bad_free_warn == -1) { - dTHX; - char *pbf = PerlEnv_getenv("PERL_BADFREE"); - bad_free_warn = (pbf) ? strNE("0", pbf) : 1; - } - if (!bad_free_warn) - return NULL; + { + static int bad_free_warn = -1; + if (bad_free_warn == -1) { + dTHX; + char *pbf = PerlEnv_getenv("PERL_BADFREE"); + bad_free_warn = (pbf) ? strNE("0", pbf) : 1; + } + if (!bad_free_warn) + return NULL; #ifdef RCHECK - { - dTHX; - if (!PERL_IS_ALIVE || !PL_curcop) - Perl_ck_warner_d(aTHX_ packWARN(WARN_MALLOC), "%srealloc() %signored", - (ovp->ov_rmagic == RMAGIC - 1 ? "" : "Bad "), - ovp->ov_rmagic == RMAGIC - 1 - ? "of freed memory " : ""); - } + { + dTHX; + if (!PERL_IS_ALIVE || !PL_curcop) + Perl_ck_warner_d(aTHX_ packWARN(WARN_MALLOC), "%srealloc() %signored", + (ovp->ov_rmagic == RMAGIC - 1 ? "" : "Bad "), + ovp->ov_rmagic == RMAGIC - 1 + ? "of freed memory " : ""); + } #else - { - dTHX; - if (!PERL_IS_ALIVE || !PL_curcop) - Perl_ck_warner_d(aTHX_ packWARN(WARN_MALLOC), "%s", - "Bad realloc() ignored"); - } + { + dTHX; + if (!PERL_IS_ALIVE || !PL_curcop) + Perl_ck_warner_d(aTHX_ packWARN(WARN_MALLOC), "%s", + "Bad realloc() ignored"); + } #endif - return NULL; /* sanity */ - } - - onb = BUCKET_SIZE_REAL(bucket); - /* - * avoid the copy if same size block. - * We are not aggressive with boundary cases. Note that it might - * (for a small number of cases) give false negative if - * both new size and old one are in the bucket for - * FIRST_BIG_POW2, but the new one is near the lower end. - * - * We do not try to go to 1.5 times smaller bucket so far. - */ - if (nbytes > onb) incr = 1; - else { + return NULL; /* sanity */ + } + + onb = BUCKET_SIZE_REAL(bucket); + /* + * avoid the copy if same size block. + * We are not aggressive with boundary cases. Note that it might + * (for a small number of cases) give false negative if + * both new size and old one are in the bucket for + * FIRST_BIG_POW2, but the new one is near the lower end. + * + * We do not try to go to 1.5 times smaller bucket so far. + */ + if (nbytes > onb) incr = 1; + else { #ifdef DO_NOT_TRY_HARDER_WHEN_SHRINKING - if ( /* This is a little bit pessimal if PACK_MALLOC: */ - nbytes > ( (onb >> 1) - M_OVERHEAD ) + if ( /* This is a little bit pessimal if PACK_MALLOC: */ + nbytes > ( (onb >> 1) - M_OVERHEAD ) # ifdef TWO_POT_OPTIMIZE - || (bucket == FIRST_BIG_POW2 && nbytes >= LAST_SMALL_BOUND ) + || (bucket == FIRST_BIG_POW2 && nbytes >= LAST_SMALL_BOUND ) # endif - ) + ) #else /* !DO_NOT_TRY_HARDER_WHEN_SHRINKING */ - prev_bucket = ( (bucket > MAX_PACKED + 1) - ? bucket - BUCKETS_PER_POW2 - : bucket - 1); - if (nbytes > BUCKET_SIZE_REAL(prev_bucket)) + prev_bucket = ( (bucket > MAX_PACKED + 1) + ? bucket - BUCKETS_PER_POW2 + : bucket - 1); + if (nbytes > BUCKET_SIZE_REAL(prev_bucket)) #endif /* !DO_NOT_TRY_HARDER_WHEN_SHRINKING */ - incr = 0; - else incr = -1; - } + incr = 0; + else incr = -1; + } #ifdef STRESS_REALLOC - goto hard_way; + goto hard_way; #endif - if (incr == 0) { - inplace_label: + if (incr == 0) { + inplace_label: #ifdef RCHECK - /* - * Record new allocated size of block and - * bound space with magic numbers. - */ - if (OV_INDEX(ovp) <= MAX_SHORT_BUCKET) { - int i, nb = ovp->ov_size + 1; - - if ((i = nb & (RMAGIC_SZ-1))) { - i = RMAGIC_SZ - i; - while (i--) { /* nb - RMAGIC_SZ is end of alloced area */ - ASSERT(((caddr_t)ovp + nb - RMAGIC_SZ)[i] == RMAGIC_C, "chunk's tail overwrite"); - } - } - /* Same at RMAGIC_SZ-aligned RMAGIC */ - nb = (nb + (RMAGIC_SZ-1)) & ~(RMAGIC_SZ-1); - ASSERT(((u_int *)((caddr_t)ovp + nb))[-1] == RMAGIC, - "chunk's tail overwrite"); - FILLCHECK_DEADBEEF((unsigned char*)((caddr_t)ovp + nb), - BUCKET_SIZE(OV_INDEX(ovp)) - nb); - if (nbytes > ovp->ov_size + 1 - M_OVERHEAD) - FILL_FEEDADAD((unsigned char*)cp + ovp->ov_size + 1 - M_OVERHEAD, - nbytes - (ovp->ov_size + 1 - M_OVERHEAD)); - else - FILL_DEADBEEF((unsigned char*)cp + nbytes, - nb - M_OVERHEAD + RMAGIC_SZ - nbytes); - /* - * Convert amount of memory requested into - * closest block size stored in hash buckets - * which satisfies request. Account for - * space used per block for accounting. - */ - nbytes += M_OVERHEAD; - ovp->ov_size = nbytes - 1; - if ((i = nbytes & (RMAGIC_SZ-1))) { - i = RMAGIC_SZ - i; - while (i--) /* nbytes - RMAGIC_SZ is end of alloced area */ - ((caddr_t)ovp + nbytes - RMAGIC_SZ)[i] - = RMAGIC_C; - } - /* Same at RMAGIC_SZ-aligned RMAGIC */ - nbytes = (nbytes + (RMAGIC_SZ-1)) & ~(RMAGIC_SZ - 1); - ((u_int *)((caddr_t)ovp + nbytes))[-1] = RMAGIC; - } + /* + * Record new allocated size of block and + * bound space with magic numbers. + */ + if (OV_INDEX(ovp) <= MAX_SHORT_BUCKET) { + int i, nb = ovp->ov_size + 1; + + if ((i = nb & (RMAGIC_SZ-1))) { + i = RMAGIC_SZ - i; + while (i--) { /* nb - RMAGIC_SZ is end of alloced area */ + ASSERT(((caddr_t)ovp + nb - RMAGIC_SZ)[i] == RMAGIC_C, "chunk's tail overwrite"); + } + } + /* Same at RMAGIC_SZ-aligned RMAGIC */ + nb = (nb + (RMAGIC_SZ-1)) & ~(RMAGIC_SZ-1); + ASSERT(((u_int *)((caddr_t)ovp + nb))[-1] == RMAGIC, + "chunk's tail overwrite"); + FILLCHECK_DEADBEEF((unsigned char*)((caddr_t)ovp + nb), + BUCKET_SIZE(OV_INDEX(ovp)) - nb); + if (nbytes > ovp->ov_size + 1 - M_OVERHEAD) + FILL_FEEDADAD((unsigned char*)cp + ovp->ov_size + 1 - M_OVERHEAD, + nbytes - (ovp->ov_size + 1 - M_OVERHEAD)); + else + FILL_DEADBEEF((unsigned char*)cp + nbytes, + nb - M_OVERHEAD + RMAGIC_SZ - nbytes); + /* + * Convert amount of memory requested into + * closest block size stored in hash buckets + * which satisfies request. Account for + * space used per block for accounting. + */ + nbytes += M_OVERHEAD; + ovp->ov_size = nbytes - 1; + if ((i = nbytes & (RMAGIC_SZ-1))) { + i = RMAGIC_SZ - i; + while (i--) /* nbytes - RMAGIC_SZ is end of alloced area */ + ((caddr_t)ovp + nbytes - RMAGIC_SZ)[i] + = RMAGIC_C; + } + /* Same at RMAGIC_SZ-aligned RMAGIC */ + nbytes = (nbytes + (RMAGIC_SZ-1)) & ~(RMAGIC_SZ - 1); + ((u_int *)((caddr_t)ovp + nbytes))[-1] = RMAGIC; + } #endif - res = cp; - DEBUG_m(PerlIO_printf(Perl_debug_log, - "0x%" UVxf ": (%05lu) realloc %ld bytes inplace\n", - PTR2UV(res),(unsigned long)(PL_an++), - (long)size)); - } else if (incr == 1 && (cp - M_OVERHEAD == last_op) - && (onb > (1 << LOG_OF_MIN_ARENA))) { - MEM_SIZE require, newarena = nbytes, pow; - int shiftr; - - POW2_OPTIMIZE_ADJUST(newarena); - newarena = newarena + M_OVERHEAD; - /* newarena = (newarena + 3) &~ 3; */ - shiftr = (newarena - 1) >> LOG_OF_MIN_ARENA; - pow = LOG_OF_MIN_ARENA + 1; - /* apart from this loop, this is O(1) */ - while (shiftr >>= 1) - pow++; - newarena = (1 << pow) + POW2_OPTIMIZE_SURPLUS(pow * BUCKETS_PER_POW2); - require = newarena - onb - M_OVERHEAD; - - MALLOC_LOCK; - if (cp - M_OVERHEAD == last_op /* We *still* are the last chunk */ - && getpages_adjacent(require)) { + res = cp; + DEBUG_m(PerlIO_printf(Perl_debug_log, + "0x%" UVxf ": (%05lu) realloc %ld bytes inplace\n", + PTR2UV(res),(unsigned long)(PL_an++), + (long)size)); + } else if (incr == 1 && (cp - M_OVERHEAD == last_op) + && (onb > (1 << LOG_OF_MIN_ARENA))) { + MEM_SIZE require, newarena = nbytes, pow; + int shiftr; + + POW2_OPTIMIZE_ADJUST(newarena); + newarena = newarena + M_OVERHEAD; + /* newarena = (newarena + 3) &~ 3; */ + shiftr = (newarena - 1) >> LOG_OF_MIN_ARENA; + pow = LOG_OF_MIN_ARENA + 1; + /* apart from this loop, this is O(1) */ + while (shiftr >>= 1) + pow++; + newarena = (1 << pow) + POW2_OPTIMIZE_SURPLUS(pow * BUCKETS_PER_POW2); + require = newarena - onb - M_OVERHEAD; + + MALLOC_LOCK; + if (cp - M_OVERHEAD == last_op /* We *still* are the last chunk */ + && getpages_adjacent(require)) { #ifdef DEBUGGING_MSTATS - nmalloc[bucket]--; - nmalloc[pow * BUCKETS_PER_POW2]++; + nmalloc[bucket]--; + nmalloc[pow * BUCKETS_PER_POW2]++; #endif - if (pow * BUCKETS_PER_POW2 > (MEM_SIZE)max_bucket) - max_bucket = pow * BUCKETS_PER_POW2; - *(cp - M_OVERHEAD) = pow * BUCKETS_PER_POW2; /* Fill index. */ - MALLOC_UNLOCK; - goto inplace_label; - } else { - MALLOC_UNLOCK; - goto hard_way; - } - } else { - hard_way: - DEBUG_m(PerlIO_printf(Perl_debug_log, - "0x%" UVxf ": (%05lu) realloc %ld bytes the hard way\n", - PTR2UV(cp),(unsigned long)(PL_an++), - (long)size)); - if ((res = (char*)Perl_malloc(nbytes)) == NULL) - return (NULL); - if (cp != res) /* common optimization */ - Copy(cp, res, (MEM_SIZE)(nbytes (MEM_SIZE)max_bucket) + max_bucket = pow * BUCKETS_PER_POW2; + *(cp - M_OVERHEAD) = pow * BUCKETS_PER_POW2; /* Fill index. */ + MALLOC_UNLOCK; + goto inplace_label; + } else { + MALLOC_UNLOCK; + goto hard_way; + } + } else { + hard_way: + DEBUG_m(PerlIO_printf(Perl_debug_log, + "0x%" UVxf ": (%05lu) realloc %ld bytes the hard way\n", + PTR2UV(cp),(unsigned long)(PL_an++), + (long)size)); + if ((res = (char*)Perl_malloc(nbytes)) == NULL) + return (NULL); + if (cp != res) /* common optimization */ + Copy(cp, res, (MEM_SIZE)(nbytes> which you should use instead. + +=cut +*/ + Malloc_t Perl_calloc(size_t elements, size_t size) { @@ -2096,7 +2113,7 @@ Perl_calloc(size_t elements, size_t size) Malloc_t p = Perl_malloc(sz); if (p) { - memset((void*)p, 0, sz); + memset((void*)p, 0, sz); } return p; } @@ -2142,7 +2159,7 @@ MEM_SIZE Perl_malloced_size(void *p) { union overhead * const ovp = (union overhead *) - ((caddr_t)p - sizeof (union overhead) * CHUNK_SHIFT); + ((caddr_t)p - sizeof (union overhead) * CHUNK_SHIFT); const int bucket = OV_INDEX(ovp); PERL_ARGS_ASSERT_MALLOCED_SIZE; @@ -2151,9 +2168,9 @@ Perl_malloced_size(void *p) /* The caller wants to have a complete control over the chunk, disable the memory checking inside the chunk. */ if (bucket <= MAX_SHORT_BUCKET) { - const MEM_SIZE size = BUCKET_SIZE_REAL(bucket); - ovp->ov_size = size + M_OVERHEAD - 1; - *((u_int *)((caddr_t)ovp + size + M_OVERHEAD - RMAGIC_SZ)) = RMAGIC; + const MEM_SIZE size = BUCKET_SIZE_REAL(bucket); + ovp->ov_size = size + M_OVERHEAD - 1; + *((u_int *)((caddr_t)ovp + size + M_OVERHEAD - RMAGIC_SZ)) = RMAGIC; } #endif return BUCKET_SIZE_REAL(bucket); @@ -2176,134 +2193,142 @@ int Perl_get_mstats(pTHX_ perl_mstats_t *buf, int buflen, int level) { #ifdef DEBUGGING_MSTATS - int i, j; - union overhead *p; - struct chunk_chain_s* nextchain; - - PERL_ARGS_ASSERT_GET_MSTATS; - - buf->topbucket = buf->topbucket_ev = buf->topbucket_odd - = buf->totfree = buf->total = buf->total_chain = 0; - - buf->minbucket = MIN_BUCKET; - MALLOC_LOCK; - for (i = MIN_BUCKET ; i < NBUCKETS; i++) { - for (j = 0, p = nextf[i]; p; p = p->ov_next, j++) - ; - if (i < buflen) { - buf->nfree[i] = j; - buf->ntotal[i] = nmalloc[i]; - } - buf->totfree += j * BUCKET_SIZE_REAL(i); - buf->total += nmalloc[i] * BUCKET_SIZE_REAL(i); - if (nmalloc[i]) { - i % 2 ? (buf->topbucket_odd = i) : (buf->topbucket_ev = i); - buf->topbucket = i; - } - } - nextchain = chunk_chain; - while (nextchain) { - buf->total_chain += nextchain->size; - nextchain = nextchain->next; - } - buf->total_sbrk = goodsbrk + sbrk_slack; - buf->sbrks = sbrks; - buf->sbrk_good = sbrk_goodness; - buf->sbrk_slack = sbrk_slack; - buf->start_slack = start_slack; - buf->sbrked_remains = sbrked_remains; - MALLOC_UNLOCK; - buf->nbuckets = NBUCKETS; - if (level) { - for (i = MIN_BUCKET ; i < NBUCKETS; i++) { - if (i >= buflen) - break; - buf->bucket_mem_size[i] = BUCKET_SIZE_NO_SURPLUS(i); - buf->bucket_available_size[i] = BUCKET_SIZE_REAL(i); - } - } + int i, j; + union overhead *p; + struct chunk_chain_s* nextchain; + + PERL_ARGS_ASSERT_GET_MSTATS; + + buf->topbucket = buf->topbucket_ev = buf->topbucket_odd + = buf->totfree = buf->total = buf->total_chain = 0; + + buf->minbucket = MIN_BUCKET; + MALLOC_LOCK; + for (i = MIN_BUCKET ; i < NBUCKETS; i++) { + for (j = 0, p = nextf[i]; p; p = p->ov_next, j++) + ; + if (i < buflen) { + buf->nfree[i] = j; + buf->ntotal[i] = nmalloc[i]; + } + buf->totfree += j * BUCKET_SIZE_REAL(i); + buf->total += nmalloc[i] * BUCKET_SIZE_REAL(i); + if (nmalloc[i]) { + i % 2 ? (buf->topbucket_odd = i) : (buf->topbucket_ev = i); + buf->topbucket = i; + } + } + nextchain = chunk_chain; + while (nextchain) { + buf->total_chain += nextchain->size; + nextchain = nextchain->next; + } + buf->total_sbrk = goodsbrk + sbrk_slack; + buf->sbrks = sbrks; + buf->sbrk_good = sbrk_goodness; + buf->sbrk_slack = sbrk_slack; + buf->start_slack = start_slack; + buf->sbrked_remains = sbrked_remains; + MALLOC_UNLOCK; + buf->nbuckets = NBUCKETS; + if (level) { + for (i = MIN_BUCKET ; i < NBUCKETS; i++) { + if (i >= buflen) + break; + buf->bucket_mem_size[i] = BUCKET_SIZE_NO_SURPLUS(i); + buf->bucket_available_size[i] = BUCKET_SIZE_REAL(i); + } + } #else /* defined DEBUGGING_MSTATS */ - PerlIO_printf(Perl_error_log, "perl not compiled with DEBUGGING_MSTATS\n"); + PerlIO_printf(Perl_error_log, "perl not compiled with DEBUGGING_MSTATS\n"); #endif /* defined DEBUGGING_MSTATS */ - return 0; /* XXX unused */ + return 0; /* XXX unused */ } + /* - * mstats - print out statistics about malloc - * - * Prints two lines of numbers, one showing the length of the free list - * for each size category, the second showing the number of mallocs - - * frees for each size category. - */ +=for apidoc dump_mstats + +When enabled by compiling with C<-DDEBUGGING_MSTATS>, print out statistics +about malloc as two lines of numbers, one showing the length of the free list +for each size category, the second showing the number of S for +each size category. + +C, if not NULL, is used as a phrase to include in the output, such as +S<"after compilation">. + +=cut +*/ + void Perl_dump_mstats(pTHX_ const char *s) { #ifdef DEBUGGING_MSTATS - int i; - perl_mstats_t buffer; - UV nf[NBUCKETS]; - UV nt[NBUCKETS]; + int i; + perl_mstats_t buffer; + UV nf[NBUCKETS]; + UV nt[NBUCKETS]; - PERL_ARGS_ASSERT_DUMP_MSTATS; + PERL_ARGS_ASSERT_DUMP_MSTATS; - buffer.nfree = nf; - buffer.ntotal = nt; - get_mstats(&buffer, NBUCKETS, 0); + buffer.nfree = nf; + buffer.ntotal = nt; + get_mstats(&buffer, NBUCKETS, 0); - if (s) - PerlIO_printf(Perl_error_log, - "Memory allocation statistics %s (buckets %" IVdf + if (s) + PerlIO_printf(Perl_error_log, + "Memory allocation statistics %s (buckets %" IVdf "(%" IVdf ")..%" IVdf "(%" IVdf ")\n", - s, - (IV)BUCKET_SIZE_REAL(MIN_BUCKET), - (IV)BUCKET_SIZE_NO_SURPLUS(MIN_BUCKET), - (IV)BUCKET_SIZE_REAL(buffer.topbucket), - (IV)BUCKET_SIZE_NO_SURPLUS(buffer.topbucket)); + s, + (IV)BUCKET_SIZE_REAL(MIN_BUCKET), + (IV)BUCKET_SIZE_NO_SURPLUS(MIN_BUCKET), + (IV)BUCKET_SIZE_REAL(buffer.topbucket), + (IV)BUCKET_SIZE_NO_SURPLUS(buffer.topbucket)); PerlIO_printf(Perl_error_log, "%8" IVdf " free:", buffer.totfree); - for (i = MIN_EVEN_REPORT; i <= buffer.topbucket; i += BUCKETS_PER_POW2) { - PerlIO_printf(Perl_error_log, - ((i < 8*BUCKETS_PER_POW2 || i == 10*BUCKETS_PER_POW2) - ? " %5" UVuf - : ((i < 12*BUCKETS_PER_POW2) ? " %3" UVuf + for (i = MIN_EVEN_REPORT; i <= buffer.topbucket; i += BUCKETS_PER_POW2) { + PerlIO_printf(Perl_error_log, + ((i < 8*BUCKETS_PER_POW2 || i == 10*BUCKETS_PER_POW2) + ? " %5" UVuf + : ((i < 12*BUCKETS_PER_POW2) ? " %3" UVuf : " %" UVuf)), - buffer.nfree[i]); - } + buffer.nfree[i]); + } #ifdef BUCKETS_ROOT2 - PerlIO_printf(Perl_error_log, "\n\t "); - for (i = MIN_BUCKET + 1; i <= buffer.topbucket_odd; i += BUCKETS_PER_POW2) { - PerlIO_printf(Perl_error_log, - ((i < 8*BUCKETS_PER_POW2 || i == 10*BUCKETS_PER_POW2) - ? " %5"UVuf - : ((i < 12*BUCKETS_PER_POW2) ? " %3"UVuf : " %"UVuf)), - buffer.nfree[i]); - } + PerlIO_printf(Perl_error_log, "\n\t "); + for (i = MIN_BUCKET + 1; i <= buffer.topbucket_odd; i += BUCKETS_PER_POW2) { + PerlIO_printf(Perl_error_log, + ((i < 8*BUCKETS_PER_POW2 || i == 10*BUCKETS_PER_POW2) + ? " %5"UVuf + : ((i < 12*BUCKETS_PER_POW2) ? " %3"UVuf : " %"UVuf)), + buffer.nfree[i]); + } #endif PerlIO_printf(Perl_error_log, "\n%8" IVdf " used:", buffer.total - buffer.totfree); - for (i = MIN_EVEN_REPORT; i <= buffer.topbucket; i += BUCKETS_PER_POW2) { - PerlIO_printf(Perl_error_log, - ((i < 8*BUCKETS_PER_POW2 || i == 10*BUCKETS_PER_POW2) - ? " %5" IVdf - : ((i < 12*BUCKETS_PER_POW2) ? " %3" IVdf : " %" IVdf)), - buffer.ntotal[i] - buffer.nfree[i]); - } + for (i = MIN_EVEN_REPORT; i <= buffer.topbucket; i += BUCKETS_PER_POW2) { + PerlIO_printf(Perl_error_log, + ((i < 8*BUCKETS_PER_POW2 || i == 10*BUCKETS_PER_POW2) + ? " %5" IVdf + : ((i < 12*BUCKETS_PER_POW2) ? " %3" IVdf : " %" IVdf)), + buffer.ntotal[i] - buffer.nfree[i]); + } #ifdef BUCKETS_ROOT2 - PerlIO_printf(Perl_error_log, "\n\t "); - for (i = MIN_BUCKET + 1; i <= buffer.topbucket_odd; i += BUCKETS_PER_POW2) { - PerlIO_printf(Perl_error_log, - ((i < 8*BUCKETS_PER_POW2 || i == 10*BUCKETS_PER_POW2) - ? " %5"IVdf - : ((i < 12*BUCKETS_PER_POW2) ? " %3"IVdf : " %"IVdf)), - buffer.ntotal[i] - buffer.nfree[i]); - } + PerlIO_printf(Perl_error_log, "\n\t "); + for (i = MIN_BUCKET + 1; i <= buffer.topbucket_odd; i += BUCKETS_PER_POW2) { + PerlIO_printf(Perl_error_log, + ((i < 8*BUCKETS_PER_POW2 || i == 10*BUCKETS_PER_POW2) + ? " %5"IVdf + : ((i < 12*BUCKETS_PER_POW2) ? " %3"IVdf : " %"IVdf)), + buffer.ntotal[i] - buffer.nfree[i]); + } #endif - PerlIO_printf(Perl_error_log, "\nTotal sbrk(): %" IVdf "/%" IVdf ":%" + PerlIO_printf(Perl_error_log, "\nTotal sbrk(): %" IVdf "/%" IVdf ":%" IVdf ". Odd ends: pad+heads+chain+tail: %" IVdf "+%" IVdf "+%" IVdf "+%" IVdf ".\n", - buffer.total_sbrk, buffer.sbrks, buffer.sbrk_good, - buffer.sbrk_slack, buffer.start_slack, - buffer.total_chain, buffer.sbrked_remains); + buffer.total_sbrk, buffer.sbrks, buffer.sbrk_good, + buffer.sbrk_slack, buffer.start_slack, + buffer.total_chain, buffer.sbrked_remains); #else /* DEBUGGING_MSTATS */ - PerlIO_printf(Perl_error_log, "%s: perl not compiled with DEBUGGING_MSTATS\n",s); + PerlIO_printf(Perl_error_log, "%s: perl not compiled with DEBUGGING_MSTATS\n",s); #endif /* DEBUGGING_MSTATS */ } @@ -2347,15 +2372,15 @@ Perl_sbrk(int size) size = (size + 0x7ff) & ~0x7ff; #endif if (size <= Perl_sbrk_oldsize) { - got = Perl_sbrk_oldchunk; - Perl_sbrk_oldchunk += size; - Perl_sbrk_oldsize -= size; + got = Perl_sbrk_oldchunk; + Perl_sbrk_oldchunk += size; + Perl_sbrk_oldsize -= size; } else { if (size >= PERLSBRK_32_K) { - small = 0; + small = 0; } else { - size = PERLSBRK_64_K; - small = 1; + size = PERLSBRK_64_K; + small = 1; } # if NEEDED_ALIGNMENT > SYSTEM_ALLOC_ALIGNMENT size += NEEDED_ALIGNMENT - SYSTEM_ALLOC_ALIGNMENT; @@ -2365,9 +2390,9 @@ Perl_sbrk(int size) got = (got + NEEDED_ALIGNMENT - 1) & ~(NEEDED_ALIGNMENT - 1); # endif if (small) { - /* Chunk is small, register the rest for future allocs. */ - Perl_sbrk_oldchunk = got + reqsize; - Perl_sbrk_oldsize = size - reqsize; + /* Chunk is small, register the rest for future allocs. */ + Perl_sbrk_oldchunk = got + reqsize; + Perl_sbrk_oldsize = size - reqsize; } } diff --git a/gnu/usr.bin/perl/mathoms.c b/gnu/usr.bin/perl/mathoms.c index 5149bd731ca..74f1078e6ae 100644 --- a/gnu/usr.bin/perl/mathoms.c +++ b/gnu/usr.bin/perl/mathoms.c @@ -32,6 +32,9 @@ * but XS code may still explicitly use the long form, i.e. * Perl_foo(aTHX_ ...) * + * This file can't just be cleaned out periodically, because that would break + * builds with -DPERL_NO_SHORT_NAMES + * * NOTE: ALL FUNCTIONS IN THIS FILE should have an entry with the 'b' flag in * embed.fnc. * @@ -50,7 +53,7 @@ * * Some blurb for perlapi.pod: -=head1 Obsolete backwards compatibility functions + head1 Obsolete backwards compatibility functions Some of these are also deprecated. You can exclude these from your compiled Perl by adding this option to Configure: @@ -85,6 +88,7 @@ Perl_ref(pTHX_ OP *o, I32 type) } /* +=for apidoc_section $SV =for apidoc sv_unref Unsets the RV status of the SV, and decrements the reference count of @@ -104,6 +108,7 @@ Perl_sv_unref(pTHX_ SV *sv) } /* +=for apidoc_section $tainting =for apidoc sv_taint Taint an SV. Use C instead. @@ -167,6 +172,7 @@ Perl_sv_2pv(pTHX_ SV *sv, STRLEN *lp) } /* +=for apidoc_section $SV =for apidoc sv_2pv_nolen Like C, but doesn't return the length too. You should usually @@ -183,6 +189,7 @@ Perl_sv_2pv_nolen(pTHX_ SV *sv) } /* +=for apidoc_section $SV =for apidoc sv_2pvbyte_nolen Return a pointer to the byte-encoded representation of the SV. @@ -202,6 +209,7 @@ Perl_sv_2pvbyte_nolen(pTHX_ SV *sv) } /* +=for apidoc_section $SV =for apidoc sv_2pvutf8_nolen Return a pointer to the UTF-8-encoded representation of the SV. @@ -221,6 +229,7 @@ Perl_sv_2pvutf8_nolen(pTHX_ SV *sv) } /* +=for apidoc_section $SV =for apidoc sv_force_normal Undo various types of fakery on an SV: if the PV is a shared string, make @@ -243,11 +252,11 @@ Perl_sv_force_normal(pTHX_ SV *sv) */ void -Perl_sv_setsv(pTHX_ SV *dstr, SV *sstr) +Perl_sv_setsv(pTHX_ SV *dsv, SV *ssv) { PERL_ARGS_ASSERT_SV_SETSV; - sv_setsv_flags(dstr, sstr, SV_GMAGIC); + sv_setsv_flags(dsv, ssv, SV_GMAGIC); } /* sv_catpvn() is now a macro using Perl_sv_catpvn_flags(); @@ -262,20 +271,12 @@ Perl_sv_catpvn(pTHX_ SV *dsv, const char* sstr, STRLEN slen) sv_catpvn_flags(dsv, sstr, slen, SV_GMAGIC); } -/* -=for apidoc sv_catpvn_mg - -Like C, but also handles 'set' magic. - -=cut -*/ - void -Perl_sv_catpvn_mg(pTHX_ SV *sv, const char *ptr, STRLEN len) +Perl_sv_catpvn_mg(pTHX_ SV *dsv, const char *sstr, STRLEN len) { PERL_ARGS_ASSERT_SV_CATPVN_MG; - sv_catpvn_flags(sv,ptr,len,SV_GMAGIC|SV_SMAGIC); + sv_catpvn_flags(dsv,sstr,len,SV_GMAGIC|SV_SMAGIC); } /* sv_catsv() is now a macro using Perl_sv_catsv_flags(); @@ -283,30 +284,23 @@ Perl_sv_catpvn_mg(pTHX_ SV *sv, const char *ptr, STRLEN len) */ void -Perl_sv_catsv(pTHX_ SV *dstr, SV *sstr) +Perl_sv_catsv(pTHX_ SV *dsv, SV *sstr) { PERL_ARGS_ASSERT_SV_CATSV; - sv_catsv_flags(dstr, sstr, SV_GMAGIC); + sv_catsv_flags(dsv, sstr, SV_GMAGIC); } -/* -=for apidoc sv_catsv_mg - -Like C, but also handles 'set' magic. - -=cut -*/ - void -Perl_sv_catsv_mg(pTHX_ SV *dsv, SV *ssv) +Perl_sv_catsv_mg(pTHX_ SV *dsv, SV *sstr) { PERL_ARGS_ASSERT_SV_CATSV_MG; - sv_catsv_flags(dsv,ssv,SV_GMAGIC|SV_SMAGIC); + sv_catsv_flags(dsv,sstr,SV_GMAGIC|SV_SMAGIC); } /* +=for apidoc_section $SV =for apidoc sv_iv A private implementation of the C macro for compilers which can't @@ -321,14 +315,15 @@ Perl_sv_iv(pTHX_ SV *sv) PERL_ARGS_ASSERT_SV_IV; if (SvIOK(sv)) { - if (SvIsUV(sv)) - return (IV)SvUVX(sv); - return SvIVX(sv); + if (SvIsUV(sv)) + return (IV)SvUVX(sv); + return SvIVX(sv); } return sv_2iv(sv); } /* +=for apidoc_section $SV =for apidoc sv_uv A private implementation of the C macro for compilers which can't @@ -343,14 +338,15 @@ Perl_sv_uv(pTHX_ SV *sv) PERL_ARGS_ASSERT_SV_UV; if (SvIOK(sv)) { - if (SvIsUV(sv)) - return SvUVX(sv); - return (UV)SvIVX(sv); + if (SvIsUV(sv)) + return SvUVX(sv); + return (UV)SvIVX(sv); } return sv_2uv(sv); } /* +=for apidoc_section $SV =for apidoc sv_nv A private implementation of the C macro for compilers which can't @@ -365,15 +361,17 @@ Perl_sv_nv(pTHX_ SV *sv) PERL_ARGS_ASSERT_SV_NV; if (SvNOK(sv)) - return SvNVX(sv); + return SvNVX(sv); return sv_2nv(sv); } /* +=for apidoc_section $SV =for apidoc sv_pv Use the C macro instead +=for apidoc_section $SV =for apidoc sv_pvn A private implementation of the C macro for compilers which can't @@ -388,8 +386,8 @@ Perl_sv_pvn(pTHX_ SV *sv, STRLEN *lp) PERL_ARGS_ASSERT_SV_PVN; if (SvPOK(sv)) { - *lp = SvCUR(sv); - return SvPVX(sv); + *lp = SvCUR(sv); + return SvPVX(sv); } return sv_2pv(sv, lp); } @@ -401,8 +399,8 @@ Perl_sv_pvn_nomg(pTHX_ SV *sv, STRLEN *lp) PERL_ARGS_ASSERT_SV_PVN_NOMG; if (SvPOK(sv)) { - *lp = SvCUR(sv); - return SvPVX(sv); + *lp = SvCUR(sv); + return SvPVX(sv); } return sv_2pv_flags(sv, lp, 0); } @@ -448,6 +446,7 @@ Perl_sv_pvbyte(pTHX_ SV *sv) } /* +=for apidoc_section $SV =for apidoc sv_pvbyte Use C instead. @@ -484,6 +483,7 @@ Perl_sv_pvutf8(pTHX_ SV *sv) } /* +=for apidoc_section $SV =for apidoc sv_pvutf8 Use the C macro instead @@ -526,7 +526,7 @@ Perl_fprintf_nocontext(PerlIO *stream, const char *format, ...) /* Easier to special case this here than in embed.pl. (Look at what it generates for proto.h) */ -#ifdef PERL_IMPLICIT_CONTEXT +#ifdef MULTIPLICITY PERL_ARGS_ASSERT_FPRINTF_NOCONTEXT; #endif @@ -543,7 +543,7 @@ Perl_printf_nocontext(const char *format, ...) va_list arglist; int ret = 0; -#ifdef PERL_IMPLICIT_CONTEXT +#ifdef MULTIPLICITY PERL_ARGS_ASSERT_PRINTF_NOCONTEXT; #endif @@ -605,6 +605,7 @@ Perl_gv_efullname3(pTHX_ SV *sv, const GV *gv, const char *prefix) } /* +=for apidoc_section $GV =for apidoc gv_fetchmethod See L. @@ -638,12 +639,12 @@ Perl_hv_magic(pTHX_ HV *hv, GV *gv, int how) bool Perl_do_open(pTHX_ GV *gv, const char *name, I32 len, int as_raw, - int rawmode, int rawperm, PerlIO *supplied_fp) + int rawmode, int rawperm, PerlIO *supplied_fp) { PERL_ARGS_ASSERT_DO_OPEN; return do_openn(gv, name, len, as_raw, rawmode, rawperm, - supplied_fp, (SV **) NULL, 0); + supplied_fp, (SV **) NULL, 0); } bool @@ -702,6 +703,7 @@ Perl_is_utf8_string_loc(const U8 *s, const STRLEN len, const U8 **ep) } /* +=for apidoc_section $SV =for apidoc sv_nolocking Dummy routine which "locks" an SV when there is no locking module present. @@ -722,6 +724,7 @@ Perl_sv_nolocking(pTHX_ SV *sv) /* +=for apidoc_section $SV =for apidoc sv_nounlocking Dummy routine which "unlocks" an SV when there is no locking module present. @@ -773,25 +776,17 @@ Perl_save_list(pTHX_ SV **sarg, I32 maxsarg) PERL_ARGS_ASSERT_SAVE_LIST; for (i = 1; i <= maxsarg; i++) { - SV *sv; - SvGETMAGIC(sarg[i]); - sv = newSV(0); - sv_setsv_nomg(sv,sarg[i]); - SSCHECK(3); - SSPUSHPTR(sarg[i]); /* remember the pointer */ - SSPUSHPTR(sv); /* remember the value */ - SSPUSHUV(SAVEt_ITEM); + SV *sv; + SvGETMAGIC(sarg[i]); + sv = newSV(0); + sv_setsv_nomg(sv,sarg[i]); + SSCHECK(3); + SSPUSHPTR(sarg[i]); /* remember the pointer */ + SSPUSHPTR(sv); /* remember the value */ + SSPUSHUV(SAVEt_ITEM); } } -/* -=for apidoc sv_usepvn_mg - -Like C, but also handles 'set' magic. - -=cut -*/ - void Perl_sv_usepvn_mg(pTHX_ SV *sv, char *ptr, STRLEN len) { @@ -800,15 +795,6 @@ Perl_sv_usepvn_mg(pTHX_ SV *sv, char *ptr, STRLEN len) sv_usepvn_flags(sv,ptr,len, SV_SMAGIC); } -/* -=for apidoc sv_usepvn - -Tells an SV to use C to find its string value. Implemented by -calling C with C of 0, hence does not handle 'set' -magic. See C>. - -=cut -*/ void Perl_sv_usepvn(pTHX_ SV *sv, char *ptr, STRLEN len) @@ -819,6 +805,7 @@ Perl_sv_usepvn(pTHX_ SV *sv, char *ptr, STRLEN len) } /* +=for apidoc_section $pack =for apidoc unpack_str The engine implementing C Perl function. Note: parameters C, @@ -829,8 +816,8 @@ C instead. SSize_t Perl_unpack_str(pTHX_ const char *pat, const char *patend, const char *s, - const char *strbeg, const char *strend, char **new_s, I32 ocnt, - U32 flags) + const char *strbeg, const char *strend, char **new_s, I32 ocnt, + U32 flags) { PERL_ARGS_ASSERT_UNPACK_STR; @@ -842,11 +829,12 @@ Perl_unpack_str(pTHX_ const char *pat, const char *patend, const char *s, } /* +=for apidoc_section $pack =for apidoc pack_cat The engine implementing C Perl function. Note: parameters C and C are not used. This call should not be used; use -C instead. +C> instead. =cut */ @@ -882,7 +870,7 @@ Perl_hv_fetch_ent(pTHX_ HV *hv, SV *keysv, I32 lval, U32 hash) PERL_ARGS_ASSERT_HV_FETCH_ENT; return (HE *)hv_common(hv, keysv, NULL, 0, 0, - (lval ? HV_FETCH_LVALUE : 0), NULL, hash); + (lval ? HV_FETCH_LVALUE : 0), NULL, hash); } SV * @@ -891,15 +879,15 @@ Perl_hv_delete_ent(pTHX_ HV *hv, SV *keysv, I32 flags, U32 hash) PERL_ARGS_ASSERT_HV_DELETE_ENT; return MUTABLE_SV(hv_common(hv, keysv, NULL, 0, 0, flags | HV_DELETE, NULL, - hash)); + hash)); } SV** Perl_hv_store_flags(pTHX_ HV *hv, const char *key, I32 klen, SV *val, U32 hash, - int flags) + int flags) { return (SV**) hv_common(hv, NULL, key, klen, flags, - (HV_FETCH_ISSTORE|HV_FETCH_JUST_SV), val, hash); + (HV_FETCH_ISSTORE|HV_FETCH_JUST_SV), val, hash); } SV** @@ -909,14 +897,14 @@ Perl_hv_store(pTHX_ HV *hv, const char *key, I32 klen_i32, SV *val, U32 hash) int flags; if (klen_i32 < 0) { - klen = -klen_i32; - flags = HVhek_UTF8; + klen = -klen_i32; + flags = HVhek_UTF8; } else { - klen = klen_i32; - flags = 0; + klen = klen_i32; + flags = 0; } return (SV **) hv_common(hv, NULL, key, klen, flags, - (HV_FETCH_ISSTORE|HV_FETCH_JUST_SV), val, hash); + (HV_FETCH_ISSTORE|HV_FETCH_JUST_SV), val, hash); } bool @@ -928,11 +916,11 @@ Perl_hv_exists(pTHX_ HV *hv, const char *key, I32 klen_i32) PERL_ARGS_ASSERT_HV_EXISTS; if (klen_i32 < 0) { - klen = -klen_i32; - flags = HVhek_UTF8; + klen = -klen_i32; + flags = HVhek_UTF8; } else { - klen = klen_i32; - flags = 0; + klen = klen_i32; + flags = 0; } return cBOOL(hv_common(hv, NULL, key, klen, flags, HV_FETCH_ISEXISTS, 0, 0)); } @@ -946,15 +934,15 @@ Perl_hv_fetch(pTHX_ HV *hv, const char *key, I32 klen_i32, I32 lval) PERL_ARGS_ASSERT_HV_FETCH; if (klen_i32 < 0) { - klen = -klen_i32; - flags = HVhek_UTF8; + klen = -klen_i32; + flags = HVhek_UTF8; } else { - klen = klen_i32; - flags = 0; + klen = klen_i32; + flags = 0; } return (SV **) hv_common(hv, NULL, key, klen, flags, - lval ? (HV_FETCH_JUST_SV | HV_FETCH_LVALUE) - : HV_FETCH_JUST_SV, NULL, 0); + lval ? (HV_FETCH_JUST_SV | HV_FETCH_LVALUE) + : HV_FETCH_JUST_SV, NULL, 0); } SV * @@ -966,14 +954,14 @@ Perl_hv_delete(pTHX_ HV *hv, const char *key, I32 klen_i32, I32 flags) PERL_ARGS_ASSERT_HV_DELETE; if (klen_i32 < 0) { - klen = -klen_i32; - k_flags = HVhek_UTF8; + klen = -klen_i32; + k_flags = HVhek_UTF8; } else { - klen = klen_i32; - k_flags = 0; + klen = klen_i32; + k_flags = 0; } return MUTABLE_SV(hv_common(hv, NULL, key, klen, k_flags, flags | HV_DELETE, - NULL, 0)); + NULL, 0)); } AV * @@ -1115,6 +1103,7 @@ Perl_sv_2bool(pTHX_ SV *const sv) /* +=for apidoc_section $custom =for apidoc custom_op_name Return the name for a given custom op. This was once used by the C macro, but is no longer: it has only been kept for compatibility, and @@ -1149,9 +1138,9 @@ Perl_newSUB(pTHX_ I32 floor, OP *o, OP *proto, OP *block) } SV * -Perl_sv_mortalcopy(pTHX_ SV *const oldstr) +Perl_sv_mortalcopy(pTHX_ SV *const oldsv) { - return Perl_sv_mortalcopy_flags(aTHX_ oldstr, SV_GMAGIC); + return Perl_sv_mortalcopy_flags(aTHX_ oldsv, SV_GMAGIC); } void @@ -1177,6 +1166,7 @@ ASCII_TO_NEED(const UV enc, const UV ch) } /* +=for apidoc_section $unicode =for apidoc is_utf8_char Tests if some arbitrary number of bytes begins in a valid UTF-8 @@ -1202,6 +1192,7 @@ Perl_is_utf8_char(const U8 *s) } /* +=for apidoc_section $unicode =for apidoc is_utf8_char_buf This is identical to the macro L. @@ -1232,6 +1223,7 @@ Perl_valid_utf8_to_uvuni(pTHX_ const U8 *s, STRLEN *retlen) } /* +=for apidoc_section $unicode =for apidoc utf8_to_uvuni Returns the Unicode code point of the first character in the string C @@ -1265,12 +1257,15 @@ Perl_utf8_to_uvuni(pTHX_ const U8 *s, STRLEN *retlen) } /* +=for apidoc_section $pad =for apidoc pad_compname_type Looks up the type of the lexical variable at position C in the currently-compiling pad. If the variable is typed, the stash of the class to which it is typed is returned. If not, C is returned. +Use L> instead. + =cut */ @@ -1288,7 +1283,7 @@ Perl_instr(const char *big, const char *little) { PERL_ARGS_ASSERT_INSTR; - return instr((char *) big, (char *) little); + return instr(big, little); } SV * @@ -1330,6 +1325,7 @@ Perl_uvuni_to_utf8(pTHX_ U8 *d, UV uv) } /* +=for apidoc_section $unicode =for apidoc utf8n_to_uvuni Instead use L, or rarely, L. @@ -1354,6 +1350,7 @@ Perl_utf8n_to_uvuni(pTHX_ const U8 *s, STRLEN curlen, STRLEN *retlen, U32 flags) } /* +=for apidoc_section $unicode =for apidoc uvuni_to_utf8_flags Instead you almost certainly want to use L or @@ -1378,6 +1375,7 @@ Perl_uvuni_to_utf8_flags(pTHX_ U8 *d, UV uv, UV flags) } /* +=for apidoc_section $unicode =for apidoc utf8_to_uvchr Returns the native code point of the first character in the string C diff --git a/gnu/usr.bin/perl/metaconfig.SH b/gnu/usr.bin/perl/metaconfig.SH index 7cc35a431fa..039a87f52f0 100644 --- a/gnu/usr.bin/perl/metaconfig.SH +++ b/gnu/usr.bin/perl/metaconfig.SH @@ -15,7 +15,7 @@ # H.Merijn Brand [17 Feb 2004] # This comment is just to ensure that Configure will find variables that # are removed/replaced in patches on blead, but are still needed in the -# 5.8.x, 5.6.x and 5.005.x maintainance tracks. +# 5.8.x, 5.6.x and 5.005.x maintenance tracks. # metaconfig -m will scan all .SH files on this level (not deeper), and # not in other subfolders. This file is as good as any .SH # patch references diff --git a/gnu/usr.bin/perl/metaconfig.h b/gnu/usr.bin/perl/metaconfig.h index baba5eac687..46d4ab1a8b8 100644 --- a/gnu/usr.bin/perl/metaconfig.h +++ b/gnu/usr.bin/perl/metaconfig.h @@ -13,5 +13,10 @@ * Symbols should only be here temporarily. Once they are actually used, * they should be removed from here. * - * HAS_WCRTOMB + * HAS_NON_INT_BITFIELDS + * HAS_STRXFRM_L + * HAS_NL_LANGINFO_L + * HAS_FFS + * HAS_FFSL + * */ diff --git a/gnu/usr.bin/perl/mg.c b/gnu/usr.bin/perl/mg.c index e603b60989d..7a4727cedff 100644 --- a/gnu/usr.bin/perl/mg.c +++ b/gnu/usr.bin/perl/mg.c @@ -16,7 +16,7 @@ */ /* -=head1 Magical Functions +=head1 Magic "Magic" is special data attached to SV structures in order to give them "magical" properties. When any Perl code tries to read from, or assign to, an SV marked as magical, it calls the 'get' or 'set' function associated @@ -34,6 +34,8 @@ plus space for some flags and pointers. For example, a tied variable has a MAGIC structure that contains a pointer to the object associated with the tie. +=for apidoc Ayh||MAGIC + =cut */ @@ -101,8 +103,8 @@ S_save_magic_flags(pTHX_ I32 mgs_ix, SV *sv, U32 flags) if (SvREFCNT(sv) > 0) { /* guard against sv getting freed midway through the mg clearing, * by holding a private reference for the duration. */ - SvREFCNT_inc_simple_void_NN(sv); - bumped = TRUE; + SvREFCNT_inc_simple_void_NN(sv); + bumped = TRUE; } SAVEDESTRUCTOR_X(S_restore_magic, INT2PTR(void*, (IV)mgs_ix)); @@ -135,19 +137,19 @@ Perl_mg_magical(SV *sv) SvMAGICAL_off(sv); if ((mg = SvMAGIC(sv))) { - do { - const MGVTBL* const vtbl = mg->mg_virtual; - if (vtbl) { - if (vtbl->svt_get && !(mg->mg_flags & MGf_GSKIP)) - SvGMAGICAL_on(sv); - if (vtbl->svt_set) - SvSMAGICAL_on(sv); - if (vtbl->svt_clear) - SvRMAGICAL_on(sv); - } - } while ((mg = mg->mg_moremagic)); - if (!(SvFLAGS(sv) & (SVs_GMG|SVs_SMG))) - SvRMAGICAL_on(sv); + do { + const MGVTBL* const vtbl = mg->mg_virtual; + if (vtbl) { + if (vtbl->svt_get && !(mg->mg_flags & MGf_GSKIP)) + SvGMAGICAL_on(sv); + if (vtbl->svt_set) + SvSMAGICAL_on(sv); + if (vtbl->svt_clear) + SvRMAGICAL_on(sv); + } + } while ((mg = mg->mg_moremagic)); + if (!(SvFLAGS(sv) & (SVs_GMG|SVs_SMG))) + SvRMAGICAL_on(sv); } } @@ -179,13 +181,13 @@ Perl_mg_get(pTHX_ SV *sv) newmg = cur = head = mg = SvMAGIC(sv); while (mg) { - const MGVTBL * const vtbl = mg->mg_virtual; - MAGIC * const nextmg = mg->mg_moremagic; /* it may delete itself */ + const MGVTBL * const vtbl = mg->mg_virtual; + MAGIC * const nextmg = mg->mg_moremagic; /* it may delete itself */ - if (!(mg->mg_flags & MGf_GSKIP) && vtbl && vtbl->svt_get) { + if (!(mg->mg_flags & MGf_GSKIP) && vtbl && vtbl->svt_get) { - /* taint's mg get is so dumb it doesn't need flag saving */ - if (mg->mg_type != PERL_MAGIC_taint) { + /* taint's mg get is so dumb it doesn't need flag saving */ + if (mg->mg_type != PERL_MAGIC_taint) { taint_only = FALSE; if (!saved) { save_magic(mgs_ix, sv); @@ -193,23 +195,23 @@ Perl_mg_get(pTHX_ SV *sv) } } - vtbl->svt_get(aTHX_ sv, mg); - - /* guard against magic having been deleted - eg FETCH calling - * untie */ - if (!SvMAGIC(sv)) { - /* recalculate flags */ - (SSPTR(mgs_ix, MGS *))->mgs_flags &= ~(SVs_GMG|SVs_SMG|SVs_RMG); - break; - } - - /* recalculate flags if this entry was deleted. */ - if (mg->mg_flags & MGf_GSKIP) - (SSPTR(mgs_ix, MGS *))->mgs_flags &= - ~(SVs_GMG|SVs_SMG|SVs_RMG); - } - else if (vtbl == &PL_vtbl_utf8) { - /* get-magic can reallocate the PV, unless there's only taint + vtbl->svt_get(aTHX_ sv, mg); + + /* guard against magic having been deleted - eg FETCH calling + * untie */ + if (!SvMAGIC(sv)) { + /* recalculate flags */ + (SSPTR(mgs_ix, MGS *))->mgs_flags &= ~(SVs_GMG|SVs_SMG|SVs_RMG); + break; + } + + /* recalculate flags if this entry was deleted. */ + if (mg->mg_flags & MGf_GSKIP) + (SSPTR(mgs_ix, MGS *))->mgs_flags &= + ~(SVs_GMG|SVs_SMG|SVs_RMG); + } + else if (vtbl == &PL_vtbl_utf8) { + /* get-magic can reallocate the PV, unless there's only taint * magic */ if (taint_only) { MAGIC *mg2; @@ -226,32 +228,32 @@ Perl_mg_get(pTHX_ SV *sv) } if (!taint_only) magic_setutf8(sv, mg); - } - - mg = nextmg; - - if (have_new) { - /* Have we finished with the new entries we saw? Start again - where we left off (unless there are more new entries). */ - if (mg == head) { - have_new = 0; - mg = cur; - head = newmg; - } - } - - /* Were any new entries added? */ - if (!have_new && (newmg = SvMAGIC(sv)) != head) { - have_new = 1; - cur = mg; - mg = newmg; - /* recalculate flags */ - (SSPTR(mgs_ix, MGS *))->mgs_flags &= ~(SVs_GMG|SVs_SMG|SVs_RMG); - } + } + + mg = nextmg; + + if (have_new) { + /* Have we finished with the new entries we saw? Start again + where we left off (unless there are more new entries). */ + if (mg == head) { + have_new = 0; + mg = cur; + head = newmg; + } + } + + /* Were any new entries added? */ + if (!have_new && (newmg = SvMAGIC(sv)) != head) { + have_new = 1; + cur = mg; + mg = newmg; + /* recalculate flags */ + (SSPTR(mgs_ix, MGS *))->mgs_flags &= ~(SVs_GMG|SVs_SMG|SVs_RMG); + } } if (saved) - restore_magic(INT2PTR(void *, (IV)mgs_ix)); + restore_magic(INT2PTR(void *, (IV)mgs_ix)); return 0; } @@ -279,16 +281,16 @@ Perl_mg_set(pTHX_ SV *sv) for (mg = SvMAGIC(sv); mg; mg = nextmg) { const MGVTBL* vtbl = mg->mg_virtual; - nextmg = mg->mg_moremagic; /* it may delete itself */ - if (mg->mg_flags & MGf_GSKIP) { - mg->mg_flags &= ~MGf_GSKIP; /* setting requires another read */ - (SSPTR(mgs_ix, MGS*))->mgs_flags &= ~(SVs_GMG|SVs_SMG|SVs_RMG); - } - if (PL_localizing == 2 - && PERL_MAGIC_TYPE_IS_VALUE_MAGIC(mg->mg_type)) - continue; - if (vtbl && vtbl->svt_set) - vtbl->svt_set(aTHX_ sv, mg); + nextmg = mg->mg_moremagic; /* it may delete itself */ + if (mg->mg_flags & MGf_GSKIP) { + mg->mg_flags &= ~MGf_GSKIP; /* setting requires another read */ + (SSPTR(mgs_ix, MGS*))->mgs_flags &= ~(SVs_GMG|SVs_SMG|SVs_RMG); + } + if (PL_localizing == 2 + && PERL_MAGIC_TYPE_IS_VALUE_MAGIC(mg->mg_type)) + continue; + if (vtbl && vtbl->svt_set) + vtbl->svt_set(aTHX_ sv, mg); } restore_magic(INT2PTR(void*, (IV)mgs_ix)); @@ -317,14 +319,14 @@ Perl_mg_length(pTHX_ SV *sv) for (mg = SvMAGIC(sv); mg; mg = mg->mg_moremagic) { const MGVTBL * const vtbl = mg->mg_virtual; - if (vtbl && vtbl->svt_len) { + if (vtbl && vtbl->svt_len) { const I32 mgs_ix = SSNEW(sizeof(MGS)); - save_magic(mgs_ix, sv); - /* omit MGf_GSKIP -- not changed here */ - len = vtbl->svt_len(aTHX_ sv, mg); - restore_magic(INT2PTR(void*, (IV)mgs_ix)); - return len; - } + save_magic(mgs_ix, sv); + /* omit MGf_GSKIP -- not changed here */ + len = vtbl->svt_len(aTHX_ sv, mg); + restore_magic(INT2PTR(void*, (IV)mgs_ix)); + return len; + } } (void)SvPV_const(sv, len); @@ -340,24 +342,24 @@ Perl_mg_size(pTHX_ SV *sv) for (mg = SvMAGIC(sv); mg; mg = mg->mg_moremagic) { const MGVTBL* const vtbl = mg->mg_virtual; - if (vtbl && vtbl->svt_len) { + if (vtbl && vtbl->svt_len) { const I32 mgs_ix = SSNEW(sizeof(MGS)); I32 len; - save_magic(mgs_ix, sv); - /* omit MGf_GSKIP -- not changed here */ - len = vtbl->svt_len(aTHX_ sv, mg); - restore_magic(INT2PTR(void*, (IV)mgs_ix)); - return len; - } + save_magic(mgs_ix, sv); + /* omit MGf_GSKIP -- not changed here */ + len = vtbl->svt_len(aTHX_ sv, mg); + restore_magic(INT2PTR(void*, (IV)mgs_ix)); + return len; + } } switch(SvTYPE(sv)) { - case SVt_PVAV: - return AvFILLp((const AV *) sv); /* Fallback to non-tied array */ - case SVt_PVHV: - /* FIXME */ - default: - Perl_croak(aTHX_ "Size magic not implemented"); + case SVt_PVAV: + return AvFILLp((const AV *) sv); /* Fallback to non-tied array */ + case SVt_PVHV: + /* FIXME */ + default: + Perl_croak(aTHX_ "Size magic not implemented"); } NOT_REACHED; /* NOTREACHED */ @@ -384,12 +386,12 @@ Perl_mg_clear(pTHX_ SV *sv) for (mg = SvMAGIC(sv); mg; mg = nextmg) { const MGVTBL* const vtbl = mg->mg_virtual; - /* omit GSKIP -- never set here */ + /* omit GSKIP -- never set here */ - nextmg = mg->mg_moremagic; /* it may delete itself */ + nextmg = mg->mg_moremagic; /* it may delete itself */ - if (vtbl && vtbl->svt_clear) - vtbl->svt_clear(aTHX_ sv, mg); + if (vtbl && vtbl->svt_clear) + vtbl->svt_clear(aTHX_ sv, mg); } restore_magic(INT2PTR(void*, (IV)mgs_ix)); @@ -402,13 +404,13 @@ S_mg_findext_flags(const SV *sv, int type, const MGVTBL *vtbl, U32 flags) assert(flags <= 1); if (sv) { - MAGIC *mg; + MAGIC *mg; - for (mg = SvMAGIC(sv); mg; mg = mg->mg_moremagic) { - if (mg->mg_type == type && (!flags || mg->mg_virtual == vtbl)) { - return mg; - } - } + for (mg = SvMAGIC(sv); mg; mg = mg->mg_moremagic) { + if (mg->mg_type == type && (!flags || mg->mg_virtual == vtbl)) { + return mg; + } + } } return NULL; @@ -476,20 +478,20 @@ Perl_mg_copy(pTHX_ SV *sv, SV *nsv, const char *key, I32 klen) for (mg = SvMAGIC(sv); mg; mg = mg->mg_moremagic) { const MGVTBL* const vtbl = mg->mg_virtual; - if ((mg->mg_flags & MGf_COPY) && vtbl->svt_copy){ - count += vtbl->svt_copy(aTHX_ sv, mg, nsv, key, klen); - } - else { - const char type = mg->mg_type; - if (isUPPER(type) && type != PERL_MAGIC_uvar) { - sv_magic(nsv, - (type == PERL_MAGIC_tied) - ? SvTIED_obj(sv, mg) + if ((mg->mg_flags & MGf_COPY) && vtbl->svt_copy){ + count += vtbl->svt_copy(aTHX_ sv, mg, nsv, key, klen); + } + else { + const char type = mg->mg_type; + if (isUPPER(type) && type != PERL_MAGIC_uvar) { + sv_magic(nsv, + (type == PERL_MAGIC_tied) + ? SvTIED_obj(sv, mg) : mg->mg_obj, - toLOWER(type), key, klen); - count++; - } - } + toLOWER(type), key, klen); + count++; + } + } } return count; } @@ -517,30 +519,30 @@ Perl_mg_localize(pTHX_ SV *sv, SV *nsv, bool setmagic) PERL_ARGS_ASSERT_MG_LOCALIZE; if (nsv == DEFSV) - return; + return; for (mg = SvMAGIC(sv); mg; mg = mg->mg_moremagic) { - const MGVTBL* const vtbl = mg->mg_virtual; - if (PERL_MAGIC_TYPE_IS_VALUE_MAGIC(mg->mg_type)) - continue; - - if ((mg->mg_flags & MGf_LOCAL) && vtbl->svt_local) - (void)vtbl->svt_local(aTHX_ nsv, mg); - else - sv_magicext(nsv, mg->mg_obj, mg->mg_type, vtbl, - mg->mg_ptr, mg->mg_len); + const MGVTBL* const vtbl = mg->mg_virtual; + if (PERL_MAGIC_TYPE_IS_VALUE_MAGIC(mg->mg_type)) + continue; + + if ((mg->mg_flags & MGf_LOCAL) && vtbl->svt_local) + (void)vtbl->svt_local(aTHX_ nsv, mg); + else + sv_magicext(nsv, mg->mg_obj, mg->mg_type, vtbl, + mg->mg_ptr, mg->mg_len); - /* container types should remain read-only across localization */ - SvFLAGS(nsv) |= SvREADONLY(sv); + /* container types should remain read-only across localization */ + SvFLAGS(nsv) |= SvREADONLY(sv); } if (SvTYPE(nsv) >= SVt_PVMG && SvMAGIC(nsv)) { - SvFLAGS(nsv) |= SvMAGICAL(sv); - if (setmagic) { - PL_localizing = 1; - SvSETMAGIC(nsv); - PL_localizing = 0; - } + SvFLAGS(nsv) |= SvMAGICAL(sv); + if (setmagic) { + PL_localizing = 1; + SvSETMAGIC(nsv); + PL_localizing = 0; + } } } @@ -550,21 +552,15 @@ S_mg_free_struct(pTHX_ SV *sv, MAGIC *mg) { const MGVTBL* const vtbl = mg->mg_virtual; if (vtbl && vtbl->svt_free) - vtbl->svt_free(aTHX_ sv, mg); + vtbl->svt_free(aTHX_ sv, mg); - if (mg->mg_type == PERL_MAGIC_collxfrm && mg->mg_len >= 0) - /* collate magic uses string len not buffer len, so - * free even with mg_len == 0 */ + if (mg->mg_len > 0) Safefree(mg->mg_ptr); - else if (mg->mg_ptr && mg->mg_type != PERL_MAGIC_regex_global) { - if (mg->mg_len > 0 || mg->mg_type == PERL_MAGIC_utf8) - Safefree(mg->mg_ptr); - else if (mg->mg_len == HEf_SVKEY) - SvREFCNT_dec(MUTABLE_SV(mg->mg_ptr)); - } + else if (mg->mg_len == HEf_SVKEY) + SvREFCNT_dec(MUTABLE_SV(mg->mg_ptr)); if (mg->mg_flags & MGf_REFCOUNTED) - SvREFCNT_dec(mg->mg_obj); + SvREFCNT_dec(mg->mg_obj); Safefree(mg); } @@ -585,9 +581,9 @@ Perl_mg_free(pTHX_ SV *sv) PERL_ARGS_ASSERT_MG_FREE; for (mg = SvMAGIC(sv); mg; mg = moremagic) { - moremagic = mg->mg_moremagic; - mg_free_struct(sv, mg); - SvMAGIC_set(sv, moremagic); + moremagic = mg->mg_moremagic; + mg_free_struct(sv, mg); + SvMAGIC_set(sv, moremagic); } SvMAGIC_set(sv, NULL); SvMAGICAL_off(sv); @@ -608,21 +604,21 @@ Perl_mg_free_type(pTHX_ SV *sv, int how) MAGIC *mg, *prevmg, *moremg; PERL_ARGS_ASSERT_MG_FREE_TYPE; for (prevmg = NULL, mg = SvMAGIC(sv); mg; prevmg = mg, mg = moremg) { - moremg = mg->mg_moremagic; - if (mg->mg_type == how) { + moremg = mg->mg_moremagic; + if (mg->mg_type == how) { MAGIC *newhead; - /* temporarily move to the head of the magic chain, in case - custom free code relies on this historical aspect of mg_free */ - if (prevmg) { - prevmg->mg_moremagic = moremg; - mg->mg_moremagic = SvMAGIC(sv); - SvMAGIC_set(sv, mg); - } - newhead = mg->mg_moremagic; - mg_free_struct(sv, mg); - SvMAGIC_set(sv, newhead); - mg = prevmg; - } + /* temporarily move to the head of the magic chain, in case + custom free code relies on this historical aspect of mg_free */ + if (prevmg) { + prevmg->mg_moremagic = moremg; + mg->mg_moremagic = SvMAGIC(sv); + SvMAGIC_set(sv, mg); + } + newhead = mg->mg_moremagic; + mg_free_struct(sv, mg); + SvMAGIC_set(sv, newhead); + mg = prevmg; + } } mg_magical(sv); } @@ -644,21 +640,21 @@ Perl_mg_freeext(pTHX_ SV *sv, int how, const MGVTBL *vtbl) MAGIC *mg, *prevmg, *moremg; PERL_ARGS_ASSERT_MG_FREEEXT; for (prevmg = NULL, mg = SvMAGIC(sv); mg; prevmg = mg, mg = moremg) { - MAGIC *newhead; - moremg = mg->mg_moremagic; - if (mg->mg_type == how && (vtbl == NULL || mg->mg_virtual == vtbl)) { - /* temporarily move to the head of the magic chain, in case - custom free code relies on this historical aspect of mg_free */ - if (prevmg) { - prevmg->mg_moremagic = moremg; - mg->mg_moremagic = SvMAGIC(sv); - SvMAGIC_set(sv, mg); - } - newhead = mg->mg_moremagic; - mg_free_struct(sv, mg); - SvMAGIC_set(sv, newhead); - mg = prevmg; - } + MAGIC *newhead; + moremg = mg->mg_moremagic; + if (mg->mg_type == how && (vtbl == NULL || mg->mg_virtual == vtbl)) { + /* temporarily move to the head of the magic chain, in case + custom free code relies on this historical aspect of mg_free */ + if (prevmg) { + prevmg->mg_moremagic = moremg; + mg->mg_moremagic = SvMAGIC(sv); + SvMAGIC_set(sv, mg); + } + newhead = mg->mg_moremagic; + mg_free_struct(sv, mg); + SvMAGIC_set(sv, newhead); + mg = prevmg; + } } mg_magical(sv); } @@ -674,19 +670,19 @@ Perl_magic_regdata_cnt(pTHX_ SV *sv, MAGIC *mg) if (PL_curpm) { REGEXP * const rx = PM_GETRE(PL_curpm); - if (rx) { + if (rx) { const SSize_t n = (SSize_t)mg->mg_obj; if (n == '+') { /* @+ */ - /* return the number possible */ - return RX_NPARENS(rx); + /* return the number possible */ + return RX_NPARENS(rx); } else { /* @- @^CAPTURE @{^CAPTURE} */ - I32 paren = RX_LASTPAREN(rx); + I32 paren = RX_LASTPAREN(rx); - /* return the last filled */ - while ( paren >= 0 - && (RX_OFFS(rx)[paren].start == -1 - || RX_OFFS(rx)[paren].end == -1) ) - paren--; + /* return the last filled */ + while ( paren >= 0 + && (RX_OFFS(rx)[paren].start == -1 + || RX_OFFS(rx)[paren].end == -1) ) + paren--; if (n == '-') { /* @- */ return (U32)paren; @@ -695,7 +691,7 @@ Perl_magic_regdata_cnt(pTHX_ SV *sv, MAGIC *mg) return paren >= 0 ? (U32)(paren-1) : (U32)-1; } } - } + } } return (U32)-1; @@ -710,42 +706,42 @@ Perl_magic_regdatum_get(pTHX_ SV *sv, MAGIC *mg) if (PL_curpm) { REGEXP * const rx = PM_GETRE(PL_curpm); - if (rx) { + if (rx) { const SSize_t n = (SSize_t)mg->mg_obj; /* @{^CAPTURE} does not contain $&, so we need to increment by 1 */ const I32 paren = mg->mg_len + (n == '\003' ? 1 : 0); - SSize_t s; - SSize_t t; - if (paren < 0) - return 0; - if (paren <= (I32)RX_NPARENS(rx) && - (s = RX_OFFS(rx)[paren].start) != -1 && - (t = RX_OFFS(rx)[paren].end) != -1) - { - SSize_t i; + SSize_t s; + SSize_t t; + if (paren < 0) + return 0; + if (paren <= (I32)RX_NPARENS(rx) && + (s = RX_OFFS(rx)[paren].start) != -1 && + (t = RX_OFFS(rx)[paren].end) != -1) + { + SSize_t i; if (n == '+') /* @+ */ - i = t; + i = t; else if (n == '-') /* @- */ - i = s; + i = s; else { /* @^CAPTURE @{^CAPTURE} */ CALLREG_NUMBUF_FETCH(rx,paren,sv); return 0; } - if (RX_MATCH_UTF8(rx)) { - const char * const b = RX_SUBBEG(rx); - if (b) - i = RX_SUBCOFFSET(rx) + + if (RX_MATCH_UTF8(rx)) { + const char * const b = RX_SUBBEG(rx); + if (b) + i = RX_SUBCOFFSET(rx) + utf8_length((U8*)b, (U8*)(b-RX_SUBOFFSET(rx)+i)); - } + } - sv_setuv(sv, i); - return 0; - } - } + sv_setuv(sv, i); + return 0; + } + } } sv_set_undef(sv); return 0; @@ -768,10 +764,10 @@ Perl_magic_regdatum_set(pTHX_ SV *sv, MAGIC *mg) if (SvPOK(sv)) { \ STRLEN len = SvCUR(sv); \ char * const p = SvPVX(sv); \ - while (len > 0 && isSPACE(p[len-1])) \ - --len; \ - SvCUR_set(sv, len); \ - p[len] = '\0'; \ + while (len > 0 && isSPACE(p[len-1])) \ + --len; \ + SvCUR_set(sv, len); \ + p[len] = '\0'; \ } \ } STMT_END @@ -781,21 +777,21 @@ Perl_emulate_cop_io(pTHX_ const COP *const c, SV *const sv) PERL_ARGS_ASSERT_EMULATE_COP_IO; if (!(CopHINTS_get(c) & (HINT_LEXICAL_IO_IN|HINT_LEXICAL_IO_OUT))) - sv_set_undef(sv); + sv_set_undef(sv); else { SvPVCLEAR(sv); - SvUTF8_off(sv); - if ((CopHINTS_get(c) & HINT_LEXICAL_IO_IN)) { - SV *const value = cop_hints_fetch_pvs(c, "open<", 0); - assert(value); - sv_catsv(sv, value); - } - sv_catpvs(sv, "\0"); - if ((CopHINTS_get(c) & HINT_LEXICAL_IO_OUT)) { - SV *const value = cop_hints_fetch_pvs(c, "open>", 0); - assert(value); - sv_catsv(sv, value); - } + SvUTF8_off(sv); + if ((CopHINTS_get(c) & HINT_LEXICAL_IO_IN)) { + SV *const value = cop_hints_fetch_pvs(c, "open<", 0); + assert(value); + sv_catsv(sv, value); + } + sv_catpvs(sv, "\0"); + if ((CopHINTS_get(c) & HINT_LEXICAL_IO_OUT)) { + SV *const value = cop_hints_fetch_pvs(c, "open>", 0); + assert(value); + sv_catsv(sv, value); + } } } @@ -810,7 +806,7 @@ S_fixup_errno_string(pTHX_ SV* sv) assert(SvOK(sv)); if(strEQ(SvPVX(sv), "")) { - sv_catpv(sv, UNKNOWN_ERRNO_MSG); + sv_catpv(sv, UNKNOWN_ERRNO_MSG); } else { @@ -846,6 +842,7 @@ S_fixup_errno_string(pTHX_ SV* sv) } /* +=for apidoc_section $errno =for apidoc sv_string_from_errnum Generates the message string describing an OS error and returns it as @@ -880,13 +877,13 @@ Perl_sv_string_from_errnum(pTHX_ int errnum, SV *tgtsv) { char const *errstr; if(!tgtsv) - tgtsv = sv_newmortal(); + tgtsv = newSV_type_mortal(SVt_PV); errstr = my_strerror(errnum); if(errstr) { - sv_setpv(tgtsv, errstr); - fixup_errno_string(tgtsv); + sv_setpv(tgtsv, errstr); + fixup_errno_string(tgtsv); } else { - SvPVCLEAR(tgtsv); + SvPVCLEAR(tgtsv); } return tgtsv; } @@ -921,26 +918,26 @@ Perl_magic_get(pTHX_ SV *sv, MAGIC *mg) nextchar = *remaining; switch (*mg->mg_ptr) { case '\001': /* ^A */ - if (SvOK(PL_bodytarget)) sv_copypv(sv, PL_bodytarget); - else + if (SvOK(PL_bodytarget)) sv_copypv(sv, PL_bodytarget); + else sv_set_undef(sv); - if (SvTAINTED(PL_bodytarget)) - SvTAINTED_on(sv); - break; + if (SvTAINTED(PL_bodytarget)) + SvTAINTED_on(sv); + break; case '\003': /* ^C, ^CHILD_ERROR_NATIVE */ - if (nextchar == '\0') { - sv_setiv(sv, (IV)PL_minus_c); - } - else if (strEQ(remaining, "HILD_ERROR_NATIVE")) { - sv_setiv(sv, (IV)STATUS_NATIVE); + if (nextchar == '\0') { + sv_setiv(sv, (IV)PL_minus_c); } - break; + else if (strEQ(remaining, "HILD_ERROR_NATIVE")) { + sv_setiv(sv, (IV)STATUS_NATIVE); + } + break; case '\004': /* ^D */ - sv_setiv(sv, (IV)(PL_debug & DEBUG_MASK)); - break; + sv_setiv(sv, (IV)(PL_debug & DEBUG_MASK)); + break; case '\005': /* ^E */ - if (nextchar != '\0') { + if (nextchar != '\0') { if (strEQ(remaining, "NCODING")) sv_set_undef(sv); break; @@ -990,13 +987,13 @@ Perl_magic_get(pTHX_ SV *sv, MAGIC *mg) # endif SvRTRIM(sv); SvNOK_on(sv); /* what a wonderful hack! */ - break; + break; #endif /* End of platforms with special handling for $^E; others just fall through to $! */ /* FALLTHROUGH */ case '!': - { + { dSAVE_ERRNO; #ifdef VMS sv_setnv(sv, (NV)((errno == EVMSERR) ? vaxc$errno : errno)); @@ -1020,224 +1017,215 @@ Perl_magic_get(pTHX_ SV *sv, MAGIC *mg) SvPOK_off(sv); } RESTORE_ERRNO; - } + } - SvRTRIM(sv); - SvNOK_on(sv); /* what a wonderful hack! */ - break; + SvRTRIM(sv); + SvNOK_on(sv); /* what a wonderful hack! */ + break; case '\006': /* ^F */ if (nextchar == '\0') { sv_setiv(sv, (IV)PL_maxsysfd); } - break; + break; case '\007': /* ^GLOBAL_PHASE */ - if (strEQ(remaining, "LOBAL_PHASE")) { - sv_setpvn(sv, PL_phase_names[PL_phase], - strlen(PL_phase_names[PL_phase])); - } - break; + if (strEQ(remaining, "LOBAL_PHASE")) { + sv_setpvn(sv, PL_phase_names[PL_phase], + strlen(PL_phase_names[PL_phase])); + } + break; case '\010': /* ^H */ - sv_setuv(sv, PL_hints); - break; + sv_setuv(sv, PL_hints); + break; case '\011': /* ^I */ /* NOT \t in EBCDIC */ - sv_setpv(sv, PL_inplace); /* Will undefine sv if PL_inplace is NULL */ - break; + sv_setpv(sv, PL_inplace); /* Will undefine sv if PL_inplace is NULL */ + break; case '\014': /* ^LAST_FH */ - if (strEQ(remaining, "AST_FH")) { - if (PL_last_in_gv && (SV*)PL_last_in_gv != &PL_sv_undef) { - assert(isGV_with_GP(PL_last_in_gv)); - SV_CHECK_THINKFIRST_COW_DROP(sv); - prepare_SV_for_RV(sv); - SvOK_off(sv); - SvRV_set(sv, SvREFCNT_inc_simple_NN(PL_last_in_gv)); - SvROK_on(sv); - sv_rvweaken(sv); - } - else + if (strEQ(remaining, "AST_FH")) { + if (PL_last_in_gv && (SV*)PL_last_in_gv != &PL_sv_undef) { + assert(isGV_with_GP(PL_last_in_gv)); + sv_setrv_inc(sv, MUTABLE_SV(PL_last_in_gv)); + sv_rvweaken(sv); + } + else sv_set_undef(sv); - } - break; + } + break; case '\017': /* ^O & ^OPEN */ - if (nextchar == '\0') { - sv_setpv(sv, PL_osname); - SvTAINTED_off(sv); - } - else if (strEQ(remaining, "PEN")) { - Perl_emulate_cop_io(aTHX_ &PL_compiling, sv); - } - break; + if (nextchar == '\0') { + sv_setpv(sv, PL_osname); + SvTAINTED_off(sv); + } + else if (strEQ(remaining, "PEN")) { + Perl_emulate_cop_io(aTHX_ &PL_compiling, sv); + } + break; case '\020': sv_setiv(sv, (IV)PL_perldb); - break; + break; case '\023': /* ^S */ - if (nextchar == '\0') { - if (PL_parser && PL_parser->lex_state != LEX_NOTPARSING) - SvOK_off(sv); - else if (PL_in_eval) - sv_setiv(sv, PL_in_eval & ~(EVAL_INREQUIRE)); - else - sv_setiv(sv, 0); - } - else if (strEQ(remaining, "AFE_LOCALES")) { + if (nextchar == '\0') { + if (PL_parser && PL_parser->lex_state != LEX_NOTPARSING) + SvOK_off(sv); + else if (PL_in_eval) + sv_setiv(sv, PL_in_eval & ~(EVAL_INREQUIRE)); + else + sv_setiv(sv, 0); + } + else if (strEQ(remaining, "AFE_LOCALES")) { #if ! defined(USE_ITHREADS) || defined(USE_THREAD_SAFE_LOCALE) - sv_setuv(sv, (UV) 1); + sv_setuv(sv, (UV) 1); #else - sv_setuv(sv, (UV) 0); + sv_setuv(sv, (UV) 0); #endif } - break; + break; case '\024': /* ^T */ - if (nextchar == '\0') { + if (nextchar == '\0') { #ifdef BIG_TIME sv_setnv(sv, PL_basetime); #else sv_setiv(sv, (IV)PL_basetime); #endif } - else if (strEQ(remaining, "AINT")) + else if (strEQ(remaining, "AINT")) sv_setiv(sv, TAINTING_get - ? (TAINT_WARN_get || PL_unsafe ? -1 : 1) - : 0); + ? (TAINT_WARN_get || PL_unsafe ? -1 : 1) + : 0); break; case '\025': /* $^UNICODE, $^UTF8LOCALE, $^UTF8CACHE */ - if (strEQ(remaining, "NICODE")) - sv_setuv(sv, (UV) PL_unicode); - else if (strEQ(remaining, "TF8LOCALE")) - sv_setuv(sv, (UV) PL_utf8locale); - else if (strEQ(remaining, "TF8CACHE")) - sv_setiv(sv, (IV) PL_utf8cache); + if (strEQ(remaining, "NICODE")) + sv_setuv(sv, (UV) PL_unicode); + else if (strEQ(remaining, "TF8LOCALE")) + sv_setuv(sv, (UV) PL_utf8locale); + else if (strEQ(remaining, "TF8CACHE")) + sv_setiv(sv, (IV) PL_utf8cache); break; case '\027': /* ^W & $^WARNING_BITS */ - if (nextchar == '\0') - sv_setiv(sv, (IV)cBOOL(PL_dowarn & G_WARN_ON)); - else if (strEQ(remaining, "ARNING_BITS")) { - if (PL_compiling.cop_warnings == pWARN_NONE) { - sv_setpvn(sv, WARN_NONEstring, WARNsize) ; - } - else if (PL_compiling.cop_warnings == pWARN_STD) { + if (nextchar == '\0') + sv_setiv(sv, (IV)cBOOL(PL_dowarn & G_WARN_ON)); + else if (strEQ(remaining, "ARNING_BITS")) { + if (PL_compiling.cop_warnings == pWARN_NONE) { + sv_setpvn(sv, WARN_NONEstring, WARNsize) ; + } + else if (PL_compiling.cop_warnings == pWARN_STD) { goto set_undef; - } + } else if (PL_compiling.cop_warnings == pWARN_ALL) { - sv_setpvn(sv, WARN_ALLstring, WARNsize); - } + sv_setpvn(sv, WARN_ALLstring, WARNsize); + } else { - sv_setpvn(sv, (char *) (PL_compiling.cop_warnings + 1), - *PL_compiling.cop_warnings); - } - } -#ifdef WIN32 - else if (strEQ(remaining, "IN32_SLOPPY_STAT")) { - sv_setiv(sv, w32_sloppystat); - } -#endif - break; + sv_setpvn(sv, (char *) (PL_compiling.cop_warnings + 1), + *PL_compiling.cop_warnings); + } + } + break; case '+': - if (PL_curpm && (rx = PM_GETRE(PL_curpm))) { - paren = RX_LASTPAREN(rx); - if (paren) + if (PL_curpm && (rx = PM_GETRE(PL_curpm))) { + paren = RX_LASTPAREN(rx); + if (paren) goto do_numbuf_fetch; - } + } goto set_undef; case '\016': /* ^N */ - if (PL_curpm && (rx = PM_GETRE(PL_curpm))) { - paren = RX_LASTCLOSEPAREN(rx); - if (paren) + if (PL_curpm && (rx = PM_GETRE(PL_curpm))) { + paren = RX_LASTCLOSEPAREN(rx); + if (paren) goto do_numbuf_fetch; - } + } goto set_undef; case '.': - if (GvIO(PL_last_in_gv)) { - sv_setiv(sv, (IV)IoLINES(GvIOp(PL_last_in_gv))); - } - break; + if (GvIO(PL_last_in_gv)) { + sv_setiv(sv, (IV)IoLINES(GvIOp(PL_last_in_gv))); + } + break; case '?': - { - sv_setiv(sv, (IV)STATUS_CURRENT); + { + sv_setiv(sv, (IV)STATUS_CURRENT); #ifdef COMPLEX_STATUS - SvUPGRADE(sv, SVt_PVLV); - LvTARGOFF(sv) = PL_statusvalue; - LvTARGLEN(sv) = PL_statusvalue_vms; + SvUPGRADE(sv, SVt_PVLV); + LvTARGOFF(sv) = PL_statusvalue; + LvTARGLEN(sv) = PL_statusvalue_vms; #endif - } - break; + } + break; case '^': - if (GvIOp(PL_defoutgv)) - s = IoTOP_NAME(GvIOp(PL_defoutgv)); - if (s) - sv_setpv(sv,s); - else { - sv_setpv(sv,GvENAME(PL_defoutgv)); - sv_catpvs(sv,"_TOP"); - } - break; + if (GvIOp(PL_defoutgv)) + s = IoTOP_NAME(GvIOp(PL_defoutgv)); + if (s) + sv_setpv(sv,s); + else { + sv_setpv(sv,GvENAME(PL_defoutgv)); + sv_catpvs(sv,"_TOP"); + } + break; case '~': - if (GvIOp(PL_defoutgv)) - s = IoFMT_NAME(GvIOp(PL_defoutgv)); - if (!s) - s = GvENAME(PL_defoutgv); - sv_setpv(sv,s); - break; + if (GvIOp(PL_defoutgv)) + s = IoFMT_NAME(GvIOp(PL_defoutgv)); + if (!s) + s = GvENAME(PL_defoutgv); + sv_setpv(sv,s); + break; case '=': - if (GvIO(PL_defoutgv)) - sv_setiv(sv, (IV)IoPAGE_LEN(GvIOp(PL_defoutgv))); - break; + if (GvIO(PL_defoutgv)) + sv_setiv(sv, (IV)IoPAGE_LEN(GvIOp(PL_defoutgv))); + break; case '-': - if (GvIO(PL_defoutgv)) - sv_setiv(sv, (IV)IoLINES_LEFT(GvIOp(PL_defoutgv))); - break; + if (GvIO(PL_defoutgv)) + sv_setiv(sv, (IV)IoLINES_LEFT(GvIOp(PL_defoutgv))); + break; case '%': - if (GvIO(PL_defoutgv)) - sv_setiv(sv, (IV)IoPAGE(GvIOp(PL_defoutgv))); - break; + if (GvIO(PL_defoutgv)) + sv_setiv(sv, (IV)IoPAGE(GvIOp(PL_defoutgv))); + break; case ':': case '/': - break; + break; case '[': - sv_setiv(sv, 0); - break; + sv_setiv(sv, 0); + break; case '|': - if (GvIO(PL_defoutgv)) - sv_setiv(sv, (IV)(IoFLAGS(GvIOp(PL_defoutgv)) & IOf_FLUSH) != 0 ); - break; + if (GvIO(PL_defoutgv)) + sv_setiv(sv, (IV)(IoFLAGS(GvIOp(PL_defoutgv)) & IOf_FLUSH) != 0 ); + break; case '\\': - if (PL_ors_sv) - sv_copypv(sv, PL_ors_sv); - else + if (PL_ors_sv) + sv_copypv(sv, PL_ors_sv); + else goto set_undef; - break; + break; case '$': /* $$ */ - { - IV const pid = (IV)PerlProc_getpid(); - if (isGV(mg->mg_obj) || SvIV(mg->mg_obj) != pid) { - /* never set manually, or at least not since last fork */ - sv_setiv(sv, pid); - /* never unsafe, even if reading in a tainted expression */ - SvTAINTED_off(sv); - } - /* else a value has been assigned manually, so do nothing */ - } - break; + { + IV const pid = (IV)PerlProc_getpid(); + if (isGV(mg->mg_obj) || SvIV(mg->mg_obj) != pid) { + /* never set manually, or at least not since last fork */ + sv_setiv(sv, pid); + /* never unsafe, even if reading in a tainted expression */ + SvTAINTED_off(sv); + } + /* else a value has been assigned manually, so do nothing */ + } + break; case '<': sv_setuid(sv, PerlProc_getuid()); - break; + break; case '>': sv_setuid(sv, PerlProc_geteuid()); - break; + break; case '(': sv_setgid(sv, PerlProc_getgid()); - goto add_groups; + goto add_groups; case ')': sv_setgid(sv, PerlProc_getegid()); add_groups: #ifdef HAS_GETGROUPS - { - Groups_t *gary = NULL; + { + Groups_t *gary = NULL; I32 num_groups = getgroups(0, gary); if (num_groups > 0) { I32 i; @@ -1247,12 +1235,18 @@ Perl_magic_get(pTHX_ SV *sv, MAGIC *mg) Perl_sv_catpvf(aTHX_ sv, " %" IVdf, (IV)gary[i]); Safefree(gary); } - } - (void)SvIOK_on(sv); /* what a wonderful hack! */ + } + + /* + Set this to avoid warnings when the SV is used as a number. + Avoid setting the public IOK flag so that serializers will + use the PV. + */ + (void)SvIOKp_on(sv); /* what a wonderful hack! */ #endif - break; + break; case '0': - break; + break; } return 0; @@ -1269,7 +1263,7 @@ Perl_magic_getuvar(pTHX_ SV *sv, MAGIC *mg) PERL_ARGS_ASSERT_MAGIC_GETUVAR; if (uf && uf->uf_val) - (*uf->uf_val)(aTHX_ uf->uf_index, sv); + (*uf->uf_val)(aTHX_ uf->uf_index, sv); return 0; } @@ -1277,9 +1271,24 @@ int Perl_magic_setenv(pTHX_ SV *sv, MAGIC *mg) { STRLEN len = 0, klen; - const char * const key = MgPV_const(mg,klen); + + const char *key; const char *s = ""; + SV *keysv = MgSV(mg); + + if (keysv == NULL) { + key = mg->mg_ptr; + klen = mg->mg_len; + } + else { + if (!sv_utf8_downgrade(keysv, /* fail_ok */ TRUE)) { + Perl_ck_warner_d(aTHX_ packWARN(WARN_UTF8), "Wide character in %s", "setenv key (encoding to utf8)"); + } + + key = SvPV_const(keysv,klen); + } + PERL_ARGS_ASSERT_MAGIC_SETENV; SvGETMAGIC(sv); @@ -1301,78 +1310,78 @@ Perl_magic_setenv(pTHX_ SV *sv, MAGIC *mg) /* We just undefd an environment var. Is a replacement */ /* waiting in the wings? */ if (!len) { - SV ** const valp = hv_fetch(GvHVn(PL_envgv), key, klen, FALSE); - if (valp) - s = SvOK(*valp) ? SvPV_const(*valp, len) : ""; + SV ** const valp = hv_fetch(GvHVn(PL_envgv), key, klen, FALSE); + if (valp) + s = SvOK(*valp) ? SvPV_const(*valp, len) : ""; } #endif -#if !defined(OS2) && !defined(WIN32) && !defined(MSDOS) - /* And you'll never guess what the dog had */ - /* in its mouth... */ +#if !defined(OS2) && !defined(WIN32) + /* And you'll never guess what the dog had */ + /* in its mouth... */ if (TAINTING_get) { - MgTAINTEDDIR_off(mg); + MgTAINTEDDIR_off(mg); #ifdef VMS - if (s && memEQs(key, klen, "DCL$PATH")) { - char pathbuf[256], eltbuf[256], *cp, *elt; - int i = 0, j = 0; - - my_strlcpy(eltbuf, s, sizeof(eltbuf)); - elt = eltbuf; - do { /* DCL$PATH may be a search list */ - while (1) { /* as may dev portion of any element */ - if ( ((cp = strchr(elt,'[')) || (cp = strchr(elt,'<'))) ) { - if ( *(cp+1) == '.' || *(cp+1) == '-' || - cando_by_name(S_IWUSR,0,elt) ) { - MgTAINTEDDIR_on(mg); - return 0; - } - } - if ((cp = strchr(elt, ':')) != NULL) - *cp = '\0'; - if (my_trnlnm(elt, eltbuf, j++)) - elt = eltbuf; - else - break; - } - j = 0; - } while (my_trnlnm(s, pathbuf, i++) && (elt = pathbuf)); - } + if (s && memEQs(key, klen, "DCL$PATH")) { + char pathbuf[256], eltbuf[256], *cp, *elt; + int i = 0, j = 0; + + my_strlcpy(eltbuf, s, sizeof(eltbuf)); + elt = eltbuf; + do { /* DCL$PATH may be a search list */ + while (1) { /* as may dev portion of any element */ + if ( ((cp = strchr(elt,'[')) || (cp = strchr(elt,'<'))) ) { + if ( *(cp+1) == '.' || *(cp+1) == '-' || + cando_by_name(S_IWUSR,0,elt) ) { + MgTAINTEDDIR_on(mg); + return 0; + } + } + if ((cp = strchr(elt, ':')) != NULL) + *cp = '\0'; + if (my_trnlnm(elt, eltbuf, j++)) + elt = eltbuf; + else + break; + } + j = 0; + } while (my_trnlnm(s, pathbuf, i++) && (elt = pathbuf)); + } #endif /* VMS */ - if (s && memEQs(key, klen, "PATH")) { - const char * const strend = s + len; - - /* set MGf_TAINTEDDIR if any component of the new path is - * relative or world-writeable */ - while (s < strend) { - char tmpbuf[256]; - Stat_t st; - I32 i; + if (s && memEQs(key, klen, "PATH")) { + const char * const strend = s + len; #ifdef __VMS /* Hmm. How do we get $Config{path_sep} from C? */ - const char path_sep = PL_perllib_sep; + const char path_sep = PL_perllib_sep; #else - const char path_sep = ':'; + const char path_sep = ':'; #endif - s = delimcpy_no_escape(tmpbuf, tmpbuf + sizeof tmpbuf, - s, strend, path_sep, &i); - s++; - if (i >= (I32)sizeof tmpbuf /* too long -- assume the worst */ + + /* set MGf_TAINTEDDIR if any component of the new path is + * relative or world-writeable */ + while (s < strend) { + char tmpbuf[256]; + Stat_t st; + I32 i; + s = delimcpy_no_escape(tmpbuf, tmpbuf + sizeof tmpbuf, + s, strend, path_sep, &i); + s++; + if (i >= (I32)sizeof tmpbuf /* too long -- assume the worst */ #ifdef __VMS - /* no colon thus no device name -- assume relative path */ - || (PL_perllib_sep != ':' && !strchr(tmpbuf, ':')) - /* Using Unix separator, e.g. under bash, so act line Unix */ - || (PL_perllib_sep == ':' && *tmpbuf != '/') + /* no colon thus no device name -- assume relative path */ + || (PL_perllib_sep != ':' && !strchr(tmpbuf, ':')) + /* Using Unix separator, e.g. under bash, so act line Unix */ + || (PL_perllib_sep == ':' && *tmpbuf != '/') #else - || *tmpbuf != '/' /* no starting slash -- assume relative path */ + || *tmpbuf != '/' /* no starting slash -- assume relative path */ #endif - || (PerlLIO_stat(tmpbuf, &st) == 0 && (st.st_mode & 2)) ) { - MgTAINTEDDIR_on(mg); - return 0; - } - } - } + || (PerlLIO_stat(tmpbuf, &st) == 0 && (st.st_mode & 2)) ) { + MgTAINTEDDIR_on(mg); + return 0; + } + } + } } -#endif /* neither OS2 nor WIN32 nor MSDOS */ +#endif /* neither OS2 nor WIN32 */ return 0; } @@ -1395,14 +1404,14 @@ Perl_magic_set_all_env(pTHX_ SV *sv, MAGIC *mg) Perl_die(aTHX_ "Can't make list assignment to %%ENV on this system"); #else if (PL_localizing) { - HE* entry; - my_clearenv(); - hv_iterinit(MUTABLE_HV(sv)); - while ((entry = hv_iternext(MUTABLE_HV(sv)))) { - I32 keylen; - my_setenv(hv_iterkey(entry, &keylen), - SvPV_nolen_const(hv_iterval(MUTABLE_HV(sv), entry))); - } + HE* entry; + my_clearenv(); + hv_iterinit(MUTABLE_HV(sv)); + while ((entry = hv_iternext(MUTABLE_HV(sv)))) { + I32 keylen; + my_setenv(hv_iterkey(entry, &keylen), + SvPV_nolen_const(hv_iterval(MUTABLE_HV(sv), entry))); + } } #endif return 0; @@ -1446,26 +1455,26 @@ Perl_magic_getsig(pTHX_ SV *sv, MAGIC *mg) } if (i > 0) { - if(PL_psig_ptr[i]) - sv_setsv(sv,PL_psig_ptr[i]); - else { - Sighandler_t sigstate = rsignal_state(i); + if(PL_psig_ptr[i]) + sv_setsv(sv,PL_psig_ptr[i]); + else { + Sighandler_t sigstate = rsignal_state(i); #ifdef FAKE_PERSISTENT_SIGNAL_HANDLERS - if (PL_sig_handlers_initted && PL_sig_ignoring[i]) - sigstate = SIG_IGN; + if (PL_sig_handlers_initted && PL_sig_ignoring[i]) + sigstate = SIG_IGN; #endif #ifdef FAKE_DEFAULT_SIGNAL_HANDLERS - if (PL_sig_handlers_initted && PL_sig_defaulting[i]) - sigstate = SIG_DFL; + if (PL_sig_handlers_initted && PL_sig_defaulting[i]) + sigstate = SIG_DFL; #endif - /* cache state so we don't fetch it again */ - if(sigstate == (Sighandler_t) SIG_IGN) - sv_setpvs(sv,"IGNORE"); - else + /* cache state so we don't fetch it again */ + if(sigstate == (Sighandler_t) SIG_IGN) + sv_setpvs(sv,"IGNORE"); + else sv_set_undef(sv); - PL_psig_ptr[i] = SvREFCNT_inc_simple_NN(sv); - SvTEMP_off(sv); - } + PL_psig_ptr[i] = SvREFCNT_inc_simple_NN(sv); + SvTEMP_off(sv); + } } return 0; } @@ -1539,17 +1548,20 @@ Perl_csighandler3(int sig, Siginfo_t *sip PERL_UNUSED_DECL, void *uap PERL_UNUSE #endif if ( #ifdef SIGILL - sig == SIGILL || + sig == SIGILL || #endif #ifdef SIGBUS - sig == SIGBUS || + sig == SIGBUS || #endif #ifdef SIGSEGV - sig == SIGSEGV || + sig == SIGSEGV || +#endif +#ifdef SIGFPE + sig == SIGFPE || #endif - (PL_signals & PERL_SIGNALS_UNSAFE_FLAG)) - /* Call the perl level handler now-- - * with risk we may be in malloc() or being destructed etc. */ + (PL_signals & PERL_SIGNALS_UNSAFE_FLAG)) + /* Call the perl level handler now-- + * with risk we may be in malloc() or being destructed etc. */ { if (PL_sighandlerp == Perl_sighandler) /* default handler, so can call perly_sighandler() directly @@ -1565,18 +1577,18 @@ Perl_csighandler3(int sig, Siginfo_t *sip PERL_UNUSED_DECL, void *uap PERL_UNUSE #endif } else { - if (!PL_psig_pend) return; - /* Set a flag to say this signal is pending, that is awaiting delivery after - * the current Perl opcode completes */ - PL_psig_pend[sig]++; + if (!PL_psig_pend) return; + /* Set a flag to say this signal is pending, that is awaiting delivery after + * the current Perl opcode completes */ + PL_psig_pend[sig]++; #ifndef SIG_PENDING_DIE_COUNT # define SIG_PENDING_DIE_COUNT 120 #endif - /* Add one to say _a_ signal is pending */ - if (++PL_sig_pending >= SIG_PENDING_DIE_COUNT) - Perl_croak(aTHX_ "Maximal count of pending signals (%lu) exceeded", - (unsigned long)SIG_PENDING_DIE_COUNT); + /* Add one to say _a_ signal is pending */ + if (++PL_sig_pending >= SIG_PENDING_DIE_COUNT) + Perl_croak(aTHX_ "Maximal count of pending signals (%lu) exceeded", + (unsigned long)SIG_PENDING_DIE_COUNT); } } @@ -1616,31 +1628,31 @@ Perl_despatch_signals(pTHX) int sig; PL_sig_pending = 0; for (sig = 1; sig < SIG_SIZE; sig++) { - if (PL_psig_pend[sig]) { - dSAVE_ERRNO; + if (PL_psig_pend[sig]) { + dSAVE_ERRNO; #ifdef HAS_SIGPROCMASK - /* From sigaction(2) (FreeBSD man page): - * | Signal routines normally execute with the signal that - * | caused their invocation blocked, but other signals may - * | yet occur. - * Emulation of this behavior (from within Perl) is enabled - * using sigprocmask - */ - int was_blocked; - sigset_t newset, oldset; - - sigemptyset(&newset); - sigaddset(&newset, sig); - sigprocmask(SIG_BLOCK, &newset, &oldset); - was_blocked = sigismember(&oldset, sig); - if (!was_blocked) { - SV* save_sv = newSVpvn((char *)(&newset), sizeof(sigset_t)); - ENTER; - SAVEFREESV(save_sv); - SAVEDESTRUCTOR_X(unblock_sigmask, SvPV_nolen(save_sv)); - } -#endif - PL_psig_pend[sig] = 0; + /* From sigaction(2) (FreeBSD man page): + * | Signal routines normally execute with the signal that + * | caused their invocation blocked, but other signals may + * | yet occur. + * Emulation of this behavior (from within Perl) is enabled + * using sigprocmask + */ + int was_blocked; + sigset_t newset, oldset; + + sigemptyset(&newset); + sigaddset(&newset, sig); + sigprocmask(SIG_BLOCK, &newset, &oldset); + was_blocked = sigismember(&oldset, sig); + if (!was_blocked) { + SV* save_sv = newSVpvn((char *)(&newset), sizeof(sigset_t)); + ENTER; + SAVEFREESV(save_sv); + SAVEDESTRUCTOR_X(unblock_sigmask, SvPV_nolen(save_sv)); + } +#endif + PL_psig_pend[sig] = 0; if (PL_sighandlerp == Perl_sighandler) /* default handler, so can call perly_sighandler() directly * rather than via Perl_sighandler, passing the extra @@ -1655,11 +1667,11 @@ Perl_despatch_signals(pTHX) #endif #ifdef HAS_SIGPROCMASK - if (!was_blocked) - LEAVE; + if (!was_blocked) + LEAVE; #endif - RESTORE_ERRNO; - } + RESTORE_ERRNO; + } } } @@ -1667,7 +1679,6 @@ Perl_despatch_signals(pTHX) int Perl_magic_setsig(pTHX_ SV *sv, MAGIC *mg) { - dVAR; I32 i; SV** svp = NULL; /* Need to be careful with SvREFCNT_dec(), because that can have side @@ -1686,140 +1697,158 @@ Perl_magic_setsig(pTHX_ SV *sv, MAGIC *mg) if (*s == '_') { if (memEQs(s, len, "__DIE__")) - svp = &PL_diehook; - else if (memEQs(s, len, "__WARN__") - && (sv ? 1 : PL_warnhook != PERL_WARNHOOK_FATAL)) { - /* Merge the existing behaviours, which are as follows: - magic_setsig, we always set svp to &PL_warnhook - (hence we always change the warnings handler) - For magic_clearsig, we don't change the warnings handler if it's - set to the &PL_warnhook. */ - svp = &PL_warnhook; + svp = &PL_diehook; + else if (memEQs(s, len, "__WARN__") + && (sv ? 1 : PL_warnhook != PERL_WARNHOOK_FATAL)) { + /* Merge the existing behaviours, which are as follows: + magic_setsig, we always set svp to &PL_warnhook + (hence we always change the warnings handler) + For magic_clearsig, we don't change the warnings handler if it's + set to the &PL_warnhook. */ + svp = &PL_warnhook; } else if (sv) { SV *tmp = sv_newmortal(); Perl_croak(aTHX_ "No such hook: %s", pv_pretty(tmp, s, len, 0, NULL, NULL, 0)); } - i = 0; - if (svp && *svp) { - if (*svp != PERL_WARNHOOK_FATAL) - to_dec = *svp; - *svp = NULL; - } + i = 0; + if (svp && *svp) { + if (*svp != PERL_WARNHOOK_FATAL) + to_dec = *svp; + *svp = NULL; + } } else { - i = (I16)mg->mg_private; - if (!i) { - i = whichsig_pvn(s, len); /* ...no, a brick */ - mg->mg_private = (U16)i; - } - if (i <= 0) { - if (sv) { + i = (I16)mg->mg_private; + if (!i) { + i = whichsig_pvn(s, len); /* ...no, a brick */ + mg->mg_private = (U16)i; + } + if (i <= 0) { + if (sv) { SV *tmp = sv_newmortal(); - Perl_ck_warner(aTHX_ packWARN(WARN_SIGNAL), "No such signal: SIG%s", + Perl_ck_warner(aTHX_ packWARN(WARN_SIGNAL), "No such signal: SIG%s", pv_pretty(tmp, s, len, 0, NULL, NULL, 0)); } - return 0; - } + return 0; + } #ifdef HAS_SIGPROCMASK - /* Avoid having the signal arrive at a bad time, if possible. */ - sigemptyset(&set); - sigaddset(&set,i); - sigprocmask(SIG_BLOCK, &set, &save); - ENTER; - save_sv = newSVpvn((char *)(&save), sizeof(sigset_t)); - SAVEFREESV(save_sv); - SAVEDESTRUCTOR_X(restore_sigmask, save_sv); -#endif - PERL_ASYNC_CHECK(); + /* Avoid having the signal arrive at a bad time, if possible. */ + sigemptyset(&set); + sigaddset(&set,i); + sigprocmask(SIG_BLOCK, &set, &save); + ENTER; + save_sv = newSVpvn((char *)(&save), sizeof(sigset_t)); + SAVEFREESV(save_sv); + SAVEDESTRUCTOR_X(restore_sigmask, save_sv); +#endif + PERL_ASYNC_CHECK(); #if defined(FAKE_PERSISTENT_SIGNAL_HANDLERS) || defined(FAKE_DEFAULT_SIGNAL_HANDLERS) - if (!PL_sig_handlers_initted) Perl_csighandler_init(); + if (!PL_sig_handlers_initted) Perl_csighandler_init(); #endif #ifdef FAKE_PERSISTENT_SIGNAL_HANDLERS - PL_sig_ignoring[i] = 0; + PL_sig_ignoring[i] = 0; #endif #ifdef FAKE_DEFAULT_SIGNAL_HANDLERS - PL_sig_defaulting[i] = 0; -#endif - to_dec = PL_psig_ptr[i]; - if (sv) { - PL_psig_ptr[i] = SvREFCNT_inc_simple_NN(sv); - SvTEMP_off(sv); /* Make sure it doesn't go away on us */ - - /* Signals don't change name during the program's execution, so once - they're cached in the appropriate slot of PL_psig_name, they can - stay there. - - Ideally we'd find some way of making SVs at (C) compile time, or - at least, doing most of the work. */ - if (!PL_psig_name[i]) { - const char* name = PL_sig_name[i]; - PL_psig_name[i] = newSVpvn(name, strlen(name)); - SvREADONLY_on(PL_psig_name[i]); - } - } else { - SvREFCNT_dec(PL_psig_name[i]); - PL_psig_name[i] = NULL; - PL_psig_ptr[i] = NULL; - } + PL_sig_defaulting[i] = 0; +#endif + to_dec = PL_psig_ptr[i]; + if (sv) { + PL_psig_ptr[i] = SvREFCNT_inc_simple_NN(sv); + SvTEMP_off(sv); /* Make sure it doesn't go away on us */ + + /* Signals don't change name during the program's execution, so once + they're cached in the appropriate slot of PL_psig_name, they can + stay there. + + Ideally we'd find some way of making SVs at (C) compile time, or + at least, doing most of the work. */ + if (!PL_psig_name[i]) { + const char* name = PL_sig_name[i]; + PL_psig_name[i] = newSVpvn(name, strlen(name)); + SvREADONLY_on(PL_psig_name[i]); + } + } else { + SvREFCNT_dec(PL_psig_name[i]); + PL_psig_name[i] = NULL; + PL_psig_ptr[i] = NULL; + } } if (sv && (isGV_with_GP(sv) || SvROK(sv))) { - if (i) { - (void)rsignal(i, PL_csighandlerp); - } - else - *svp = SvREFCNT_inc_simple_NN(sv); + if (i) { + (void)rsignal(i, PL_csighandlerp); + } + else + *svp = SvREFCNT_inc_simple_NN(sv); } else { - if (sv && SvOK(sv)) { - s = SvPV_force(sv, len); - } else { - sv = NULL; - } - if (sv && memEQs(s, len,"IGNORE")) { - if (i) { + if (sv && SvOK(sv)) { + s = SvPV_force(sv, len); + } else { + sv = NULL; + } + if (sv && memEQs(s, len,"IGNORE")) { + if (i) { #ifdef FAKE_PERSISTENT_SIGNAL_HANDLERS - PL_sig_ignoring[i] = 1; - (void)rsignal(i, PL_csighandlerp); + PL_sig_ignoring[i] = 1; + (void)rsignal(i, PL_csighandlerp); #else - (void)rsignal(i, (Sighandler_t) SIG_IGN); + (void)rsignal(i, (Sighandler_t) SIG_IGN); #endif - } - } - else if (!sv || memEQs(s, len,"DEFAULT") || !len) { - if (i) { + } + } + else if (!sv || memEQs(s, len,"DEFAULT") || !len) { + if (i) { #ifdef FAKE_DEFAULT_SIGNAL_HANDLERS - PL_sig_defaulting[i] = 1; - (void)rsignal(i, PL_csighandlerp); + PL_sig_defaulting[i] = 1; + (void)rsignal(i, PL_csighandlerp); #else - (void)rsignal(i, (Sighandler_t) SIG_DFL); -#endif - } - } - else { - /* - * We should warn if HINT_STRICT_REFS, but without - * access to a known hint bit in a known OP, we can't - * tell whether HINT_STRICT_REFS is in force or not. - */ - if (!memchr(s, ':', len) && !memchr(s, '\'', len)) - Perl_sv_insert_flags(aTHX_ sv, 0, 0, STR_WITH_LEN("main::"), - SV_GMAGIC); - if (i) - (void)rsignal(i, PL_csighandlerp); - else - *svp = SvREFCNT_inc_simple_NN(sv); - } + (void)rsignal(i, (Sighandler_t) SIG_DFL); +#endif + } + } + else { + /* + * We should warn if HINT_STRICT_REFS, but without + * access to a known hint bit in a known OP, we can't + * tell whether HINT_STRICT_REFS is in force or not. + */ + if (!memchr(s, ':', len) && !memchr(s, '\'', len)) + Perl_sv_insert_flags(aTHX_ sv, 0, 0, STR_WITH_LEN("main::"), + SV_GMAGIC); + if (i) + (void)rsignal(i, PL_csighandlerp); + else + *svp = SvREFCNT_inc_simple_NN(sv); + } } #ifdef HAS_SIGPROCMASK if(i) - LEAVE; + LEAVE; #endif SvREFCNT_dec(to_dec); return 0; } #endif /* !PERL_MICRO */ +int +Perl_magic_setsigall(pTHX_ SV* sv, MAGIC* mg) +{ + PERL_ARGS_ASSERT_MAGIC_SETSIGALL; + PERL_UNUSED_ARG(mg); + + if (PL_localizing == 2) { + HV* hv = (HV*)sv; + HE* current; + hv_iterinit(hv); + while ((current = hv_iternext(hv))) { + SV* sigelem = hv_iterval(hv, current); + mg_set(sigelem); + } + } + return 0; +} + int Perl_magic_setisa(pTHX_ SV *sv, MAGIC *mg) { @@ -1828,7 +1857,7 @@ Perl_magic_setisa(pTHX_ SV *sv, MAGIC *mg) /* Skip _isaelem because _isa will handle it shortly */ if (PL_delaymagic & DM_ARRAY_ISA && mg->mg_type == PERL_MAGIC_isaelem) - return 0; + return 0; return magic_clearisa(NULL, mg); } @@ -1844,23 +1873,23 @@ Perl_magic_clearisa(pTHX_ SV *sv, MAGIC *mg) if(PL_phase == PERL_PHASE_DESTRUCT) return 0; if (sv) - av_clear(MUTABLE_AV(sv)); + av_clear(MUTABLE_AV(sv)); if (SvTYPE(mg->mg_obj) != SVt_PVGV && SvSMAGICAL(mg->mg_obj)) - /* This occurs with setisa_elem magic, which calls this - same function. */ - mg = mg_find(mg->mg_obj, PERL_MAGIC_isa); + /* This occurs with setisa_elem magic, which calls this + same function. */ + mg = mg_find(mg->mg_obj, PERL_MAGIC_isa); assert(mg); if (SvTYPE(mg->mg_obj) == SVt_PVAV) { /* multiple stashes */ - SV **svp = AvARRAY((AV *)mg->mg_obj); - I32 items = AvFILLp((AV *)mg->mg_obj) + 1; - while (items--) { - stash = GvSTASH((GV *)*svp++); - if (stash && HvENAME(stash)) mro_isa_changed_in(stash); - } + SV **svp = AvARRAY((AV *)mg->mg_obj); + I32 items = AvFILLp((AV *)mg->mg_obj) + 1; + while (items--) { + stash = GvSTASH((GV *)*svp++); + if (stash && HvENAME(stash)) mro_isa_changed_in(stash); + } - return 0; + return 0; } stash = GvSTASH( @@ -1870,7 +1899,7 @@ Perl_magic_clearisa(pTHX_ SV *sv, MAGIC *mg) /* The stash may have been detached from the symbol table, so check its name before doing anything. */ if (stash && HvENAME_get(stash)) - mro_isa_changed_in(stash); + mro_isa_changed_in(stash); return 0; } @@ -1887,10 +1916,10 @@ Perl_magic_getnkeys(pTHX_ SV *sv, MAGIC *mg) if (hv) { (void) hv_iterinit(hv); if (! SvTIED_mg((const SV *)hv, PERL_MAGIC_tied)) - i = HvUSEDKEYS(hv); + i = HvUSEDKEYS(hv); else { - while (hv_iternext(hv)) - i++; + while (hv_iternext(hv)) + i++; } } @@ -1904,12 +1933,13 @@ Perl_magic_setnkeys(pTHX_ SV *sv, MAGIC *mg) PERL_ARGS_ASSERT_MAGIC_SETNKEYS; PERL_UNUSED_ARG(mg); if (LvTARG(sv)) { - hv_ksplit(MUTABLE_HV(LvTARG(sv)), SvIV(sv)); + hv_ksplit(MUTABLE_HV(LvTARG(sv)), SvIV(sv)); } return 0; } /* +=for apidoc_section $magic =for apidoc magic_methcall Invoke a magic method (like FETCH). @@ -1937,7 +1967,7 @@ Returns the SV (if any) returned by the method, or C on failure. SV* Perl_magic_methcall(pTHX_ SV *sv, const MAGIC *mg, SV *meth, U32 flags, - U32 argc, ...) + U32 argc, ...) { dSP; SV* ret = NULL; @@ -1947,11 +1977,11 @@ Perl_magic_methcall(pTHX_ SV *sv, const MAGIC *mg, SV *meth, U32 flags, ENTER; if (flags & G_WRITING_TO_STDERR) { - SAVETMPS; + SAVETMPS; - save_re_context(); - SAVESPTR(PL_stderrgv); - PL_stderrgv = NULL; + save_re_context(); + SAVESPTR(PL_stderrgv); + PL_stderrgv = NULL; } PUSHSTACKi(PERLSI_MAGIC); @@ -1962,31 +1992,31 @@ Perl_magic_methcall(pTHX_ SV *sv, const MAGIC *mg, SV *meth, U32 flags, EXTEND(SP, (I32)argc+1); PUSHs(SvTIED_obj(sv, mg)); if (flags & G_UNDEF_FILL) { - while (argc--) { - PUSHs(&PL_sv_undef); - } + while (argc--) { + PUSHs(&PL_sv_undef); + } } else if (argc > 0) { - va_list args; - va_start(args, argc); + va_list args; + va_start(args, argc); - do { - SV *const this_sv = va_arg(args, SV *); - PUSHs(this_sv); - } while (--argc); + do { + SV *const this_sv = va_arg(args, SV *); + PUSHs(this_sv); + } while (--argc); - va_end(args); + va_end(args); } PUTBACK; if (flags & G_DISCARD) { - call_sv(meth, G_SCALAR|G_DISCARD|G_METHOD_NAMED); + call_sv(meth, G_SCALAR|G_DISCARD|G_METHOD_NAMED); } else { - if (call_sv(meth, G_SCALAR|G_METHOD_NAMED)) - ret = *PL_stack_sp--; + if (call_sv(meth, G_SCALAR|G_METHOD_NAMED)) + ret = *PL_stack_sp--; } POPSTACK; if (flags & G_WRITING_TO_STDERR) - FREETMPS; + FREETMPS; LEAVE; return ret; } @@ -2002,18 +2032,18 @@ S_magic_methcall1(pTHX_ SV *sv, const MAGIC *mg, SV *meth, U32 flags, PERL_ARGS_ASSERT_MAGIC_METHCALL1; if (mg->mg_ptr) { - if (mg->mg_len >= 0) { - arg1 = newSVpvn_flags(mg->mg_ptr, mg->mg_len, SVs_TEMP); - } - else if (mg->mg_len == HEf_SVKEY) - arg1 = MUTABLE_SV(mg->mg_ptr); + if (mg->mg_len >= 0) { + arg1 = newSVpvn_flags(mg->mg_ptr, mg->mg_len, SVs_TEMP); + } + else if (mg->mg_len == HEf_SVKEY) + arg1 = MUTABLE_SV(mg->mg_ptr); } else if (mg->mg_type == PERL_MAGIC_tiedelem) { - arg1 = newSViv((IV)(mg->mg_len)); - sv_2mortal(arg1); + arg1 = newSViv((IV)(mg->mg_len)); + sv_2mortal(arg1); } if (!arg1) { - return Perl_magic_methcall(aTHX_ sv, mg, meth, flags, n - 1, val); + return Perl_magic_methcall(aTHX_ sv, mg, meth, flags, n - 1, val); } return Perl_magic_methcall(aTHX_ sv, mg, meth, flags, n, arg1, val); } @@ -2027,7 +2057,7 @@ S_magic_methpack(pTHX_ SV *sv, const MAGIC *mg, SV *meth) ret = magic_methcall1(sv, mg, meth, 0, 1, NULL); if (ret) - sv_setsv(sv, ret); + sv_setsv(sv, ret); return 0; } @@ -2037,7 +2067,7 @@ Perl_magic_getpack(pTHX_ SV *sv, MAGIC *mg) PERL_ARGS_ASSERT_MAGIC_GETPACK; if (mg->mg_type == PERL_MAGIC_tiedelem) - mg->mg_flags |= MGf_GSKIP; + mg->mg_flags |= MGf_GSKIP; magic_methpack(sv,mg,SV_CONST(FETCH)); return 0; } @@ -2061,13 +2091,13 @@ Perl_magic_setpack(pTHX_ SV *sv, MAGIC *mg) * re-enabling magic on sv). */ if (TAINTING_get && (tmg = mg_find(sv, PERL_MAGIC_taint)) - && (tmg->mg_len & 1)) + && (tmg->mg_len & 1)) { - val = sv_mortalcopy(sv); - SvTAINTED_on(val); + val = sv_mortalcopy(sv); + SvTAINTED_on(val); } else - val = sv; + val = sv; magic_methcall1(sv, mg, SV_CONST(STORE), G_DISCARD, 2, val); return 0; @@ -2093,9 +2123,9 @@ Perl_magic_sizepack(pTHX_ SV *sv, MAGIC *mg) retsv = magic_methcall1(sv, mg, SV_CONST(FETCHSIZE), 0, 1, NULL); if (retsv) { - retval = SvIV(retsv)-1; - if (retval < -1) - Perl_croak(aTHX_ "FETCHSIZE returned a negative value"); + retval = SvIV(retsv)-1; + if (retval < -1) + Perl_croak(aTHX_ "FETCHSIZE returned a negative value"); } return (U32) retval; } @@ -2117,9 +2147,9 @@ Perl_magic_nextpack(pTHX_ SV *sv, MAGIC *mg, SV *key) PERL_ARGS_ASSERT_MAGIC_NEXTPACK; ret = SvOK(key) ? Perl_magic_methcall(aTHX_ sv, mg, SV_CONST(NEXTKEY), 0, 1, key) - : Perl_magic_methcall(aTHX_ sv, mg, SV_CONST(FIRSTKEY), 0, 0); + : Perl_magic_methcall(aTHX_ sv, mg, SV_CONST(FIRSTKEY), 0, 0); if (ret) - sv_setsv(key,ret); + sv_setsv(key,ret); return 0; } @@ -2155,7 +2185,7 @@ Perl_magic_scalarpack(pTHX_ HV *hv, MAGIC *mg) /* there is a SCALAR method that we can call */ retval = Perl_magic_methcall(aTHX_ MUTABLE_SV(hv), mg, SV_CONST(SCALAR), 0, 0); if (!retval) - retval = &PL_sv_undef; + retval = &PL_sv_undef; return retval; } @@ -2175,23 +2205,23 @@ Perl_magic_setdbline(pTHX_ SV *sv, MAGIC *mg) /* Use sv_2iv instead of SvIV() as the former generates smaller code, and setting/clearing debugger breakpoints is not a hot path. */ svp = av_fetch(MUTABLE_AV(mg->mg_obj), - sv_2iv(MUTABLE_SV((mg)->mg_ptr)), FALSE); + sv_2iv(MUTABLE_SV((mg)->mg_ptr)), FALSE); if (svp && SvIOKp(*svp)) { - OP * const o = INT2PTR(OP*,SvIVX(*svp)); - if (o) { + OP * const o = INT2PTR(OP*,SvIVX(*svp)); + if (o) { #ifdef PERL_DEBUG_READONLY_OPS - Slab_to_rw(OpSLAB(o)); + Slab_to_rw(OpSLAB(o)); #endif - /* set or clear breakpoint in the relevant control op */ - if (SvTRUE(sv)) - o->op_flags |= OPf_SPECIAL; - else - o->op_flags &= ~OPf_SPECIAL; + /* set or clear breakpoint in the relevant control op */ + if (SvTRUE(sv)) + o->op_flags |= OPf_SPECIAL; + else + o->op_flags &= ~OPf_SPECIAL; #ifdef PERL_DEBUG_READONLY_OPS - Slab_to_ro(OpSLAB(o)); + Slab_to_ro(OpSLAB(o)); #endif - } + } } return 0; } @@ -2204,7 +2234,7 @@ Perl_magic_getarylen(pTHX_ SV *sv, const MAGIC *mg) PERL_ARGS_ASSERT_MAGIC_GETARYLEN; if (obj) { - sv_setiv(sv, AvFILL(obj)); + sv_setiv(sv, AvFILL(obj)); } else { sv_set_undef(sv); } @@ -2219,10 +2249,10 @@ Perl_magic_setarylen(pTHX_ SV *sv, MAGIC *mg) PERL_ARGS_ASSERT_MAGIC_SETARYLEN; if (obj) { - av_fill(obj, SvIV(sv)); + av_fill(obj, SvIV(sv)); } else { - Perl_ck_warner(aTHX_ packWARN(WARN_MISC), - "Attempt to set length of freed array"); + Perl_ck_warner(aTHX_ packWARN(WARN_MISC), + "Attempt to set length of freed array"); } return 0; } @@ -2236,10 +2266,10 @@ Perl_magic_cleararylen_p(pTHX_ SV *sv, MAGIC *mg) /* Reset the iterator when the array is cleared */ if (sizeof(IV) == sizeof(SSize_t)) { - *((IV *) &(mg->mg_len)) = 0; + *((IV *) &(mg->mg_len)) = 0; } else { - if (mg->mg_ptr) - *((IV *) mg->mg_ptr) = 0; + if (mg->mg_ptr) + *((IV *) mg->mg_ptr) = 0; } return 0; @@ -2253,17 +2283,17 @@ Perl_magic_freearylen_p(pTHX_ SV *sv, MAGIC *mg) /* during global destruction, mg_obj may already have been freed */ if (PL_in_clean_all) - return 0; + return 0; mg = mg_find (mg->mg_obj, PERL_MAGIC_arylen); if (mg) { - /* arylen scalar holds a pointer back to the array, but doesn't own a - reference. Hence the we (the array) are about to go away with it - still pointing at us. Clear its pointer, else it would be pointing - at free memory. See the comment in sv_magic about reference loops, - and why it can't own a reference to us. */ - mg->mg_obj = 0; + /* arylen scalar holds a pointer back to the array, but doesn't own a + reference. Hence the we (the array) are about to go away with it + still pointing at us. Clear its pointer, else it would be pointing + at free memory. See the comment in sv_magic about reference loops, + and why it can't own a reference to us. */ + mg->mg_obj = 0; } return 0; } @@ -2278,11 +2308,11 @@ Perl_magic_getpos(pTHX_ SV *sv, MAGIC *mg) PERL_UNUSED_ARG(mg); if (found && found->mg_len != -1) { - STRLEN i = found->mg_len; - if (found->mg_flags & MGf_BYTES && DO_UTF8(lsv)) - i = sv_pos_b2u_flags(lsv, i, SV_GMAGIC|SV_CONST_RETURN); - sv_setuv(sv, i); - return 0; + STRLEN i = found->mg_len; + if (found->mg_flags & MGf_BYTES && DO_UTF8(lsv)) + i = sv_pos_b2u_flags(lsv, i, SV_GMAGIC|SV_CONST_RETURN); + sv_setuv(sv, i); + return 0; } sv_set_undef(sv); return 0; @@ -2302,13 +2332,13 @@ Perl_magic_setpos(pTHX_ SV *sv, MAGIC *mg) found = mg_find_mglob(lsv); if (!found) { - if (!SvOK(sv)) - return 0; - found = sv_magicext_mglob(lsv); + if (!SvOK(sv)) + return 0; + found = sv_magicext_mglob(lsv); } else if (!SvOK(sv)) { - found->mg_len = -1; - return 0; + found->mg_len = -1; + return 0; } s = SvPV_const(lsv, len); @@ -2316,17 +2346,17 @@ Perl_magic_setpos(pTHX_ SV *sv, MAGIC *mg) if (DO_UTF8(lsv)) { const STRLEN ulen = sv_or_pv_len_utf8(lsv, s, len); - if (ulen) - len = ulen; + if (ulen) + len = ulen; } if (pos < 0) { - pos += len; - if (pos < 0) - pos = 0; + pos += len; + if (pos < 0) + pos = 0; } else if (pos > (SSize_t)len) - pos = len; + pos = len; found->mg_len = pos; found->mg_flags &= ~(MGf_MINMATCH|MGf_BYTES); @@ -2349,17 +2379,17 @@ Perl_magic_getsubstr(pTHX_ SV *sv, MAGIC *mg) PERL_UNUSED_ARG(mg); if (!translate_substr_offsets( - SvUTF8(lsv) ? sv_or_pv_len_utf8(lsv, tmps, len) : len, - negoff ? -(IV)offs : (IV)offs, !negoff, - negrem ? -(IV)rem : (IV)rem, !negrem, &offs, &rem + SvUTF8(lsv) ? sv_or_pv_len_utf8(lsv, tmps, len) : len, + negoff ? -(IV)offs : (IV)offs, !negoff, + negrem ? -(IV)rem : (IV)rem, !negrem, &offs, &rem )) { - Perl_ck_warner(aTHX_ packWARN(WARN_SUBSTR), "substr outside of string"); + Perl_ck_warner(aTHX_ packWARN(WARN_SUBSTR), "substr outside of string"); sv_set_undef(sv); - return 0; + return 0; } if (SvUTF8(lsv)) - offs = sv_or_pv_pos_u2b(lsv, tmps, offs, &rem); + offs = sv_or_pv_pos_u2b(lsv, tmps, offs, &rem); sv_setpvn(sv, tmps + offs, rem); if (SvUTF8(lsv)) SvUTF8_on(sv); @@ -2382,36 +2412,36 @@ Perl_magic_setsubstr(pTHX_ SV *sv, MAGIC *mg) SvGETMAGIC(lsv); if (SvROK(lsv)) - Perl_ck_warner(aTHX_ packWARN(WARN_SUBSTR), - "Attempt to use reference as lvalue in substr" - ); + Perl_ck_warner(aTHX_ packWARN(WARN_SUBSTR), + "Attempt to use reference as lvalue in substr" + ); SvPV_force_nomg(lsv,lsv_len); if (SvUTF8(lsv)) lsv_len = sv_len_utf8_nomg(lsv); if (!translate_substr_offsets( - lsv_len, - negoff ? -(IV)lvoff : (IV)lvoff, !negoff, - neglen ? -(IV)lvlen : (IV)lvlen, !neglen, &lvoff, &lvlen + lsv_len, + negoff ? -(IV)lvoff : (IV)lvoff, !negoff, + neglen ? -(IV)lvlen : (IV)lvlen, !neglen, &lvoff, &lvlen )) - Perl_croak(aTHX_ "substr outside of string"); + Perl_croak(aTHX_ "substr outside of string"); oldtarglen = lvlen; if (DO_UTF8(sv)) { - sv_utf8_upgrade_nomg(lsv); - lvoff = sv_pos_u2b_flags(lsv, lvoff, &lvlen, SV_CONST_RETURN); - sv_insert_flags(lsv, lvoff, lvlen, tmps, len, 0); - newtarglen = sv_or_pv_len_utf8(sv, tmps, len); - SvUTF8_on(lsv); + sv_utf8_upgrade_nomg(lsv); + lvoff = sv_pos_u2b_flags(lsv, lvoff, &lvlen, SV_CONST_RETURN); + sv_insert_flags(lsv, lvoff, lvlen, tmps, len, 0); + newtarglen = sv_or_pv_len_utf8(sv, tmps, len); + SvUTF8_on(lsv); } else if (SvUTF8(lsv)) { - const char *utf8; - lvoff = sv_pos_u2b_flags(lsv, lvoff, &lvlen, SV_CONST_RETURN); - newtarglen = len; - utf8 = (char*)bytes_to_utf8((U8*)tmps, &len); - sv_insert_flags(lsv, lvoff, lvlen, utf8, len, 0); - Safefree(utf8); + const char *utf8; + lvoff = sv_pos_u2b_flags(lsv, lvoff, &lvlen, SV_CONST_RETURN); + newtarglen = len; + utf8 = (char*)bytes_to_utf8((U8*)tmps, &len); + sv_insert_flags(lsv, lvoff, lvlen, utf8, len, 0); + Safefree(utf8); } else { - sv_insert_flags(lsv, lvoff, lvlen, tmps, len, 0); - newtarglen = len; + sv_insert_flags(lsv, lvoff, lvlen, tmps, len, 0); + newtarglen = len; } if (!neglen) LvTARGLEN(sv) = newtarglen; if (negoff) LvTARGOFF(sv) += newtarglen - oldtarglen; @@ -2440,9 +2470,9 @@ Perl_magic_settaint(pTHX_ SV *sv, MAGIC *mg) /* update taint status */ if (TAINT_get) - mg->mg_len |= 1; + mg->mg_len |= 1; else - mg->mg_len &= ~1; + mg->mg_len &= ~1; return 0; } @@ -2479,37 +2509,37 @@ Perl_defelem_target(pTHX_ SV *sv, MAGIC *mg) if (!mg) mg = mg_find(sv, PERL_MAGIC_defelem); assert(mg); if (LvTARGLEN(sv)) { - if (mg->mg_obj) { - SV * const ahv = LvTARG(sv); - HE * const he = hv_fetch_ent(MUTABLE_HV(ahv), mg->mg_obj, FALSE, 0); + if (mg->mg_obj) { + SV * const ahv = LvTARG(sv); + HE * const he = hv_fetch_ent(MUTABLE_HV(ahv), mg->mg_obj, FALSE, 0); if (he) targ = HeVAL(he); - } - else if (LvSTARGOFF(sv) >= 0) { - AV *const av = MUTABLE_AV(LvTARG(sv)); - if (LvSTARGOFF(sv) <= AvFILL(av)) - { - if (SvRMAGICAL(av)) { - SV * const * const svp = av_fetch(av, LvSTARGOFF(sv), 0); - targ = svp ? *svp : NULL; - } - else - targ = AvARRAY(av)[LvSTARGOFF(sv)]; - } - } - if (targ && (targ != &PL_sv_undef)) { - /* somebody else defined it for us */ - SvREFCNT_dec(LvTARG(sv)); - LvTARG(sv) = SvREFCNT_inc_simple_NN(targ); - LvTARGLEN(sv) = 0; - SvREFCNT_dec(mg->mg_obj); - mg->mg_obj = NULL; - mg->mg_flags &= ~MGf_REFCOUNTED; - } - return targ; + } + else if (LvSTARGOFF(sv) >= 0) { + AV *const av = MUTABLE_AV(LvTARG(sv)); + if (LvSTARGOFF(sv) <= AvFILL(av)) + { + if (SvRMAGICAL(av)) { + SV * const * const svp = av_fetch(av, LvSTARGOFF(sv), 0); + targ = svp ? *svp : NULL; + } + else + targ = AvARRAY(av)[LvSTARGOFF(sv)]; + } + } + if (targ && (targ != &PL_sv_undef)) { + /* somebody else defined it for us */ + SvREFCNT_dec(LvTARG(sv)); + LvTARG(sv) = SvREFCNT_inc_simple_NN(targ); + LvTARGLEN(sv) = 0; + SvREFCNT_dec(mg->mg_obj); + mg->mg_obj = NULL; + mg->mg_flags &= ~MGf_REFCOUNTED; + } + return targ; } else - return LvTARG(sv); + return LvTARG(sv); } int @@ -2527,10 +2557,10 @@ Perl_magic_setdefelem(pTHX_ SV *sv, MAGIC *mg) PERL_ARGS_ASSERT_MAGIC_SETDEFELEM; PERL_UNUSED_ARG(mg); if (LvTARGLEN(sv)) - vivify_defelem(sv); + vivify_defelem(sv); if (LvTARG(sv)) { - sv_setsv(LvTARG(sv), sv); - SvSETMAGIC(LvTARG(sv)); + sv_setsv(LvTARG(sv), sv); + SvSETMAGIC(LvTARG(sv)); } return 0; } @@ -2544,26 +2574,26 @@ Perl_vivify_defelem(pTHX_ SV *sv) PERL_ARGS_ASSERT_VIVIFY_DEFELEM; if (!LvTARGLEN(sv) || !(mg = mg_find(sv, PERL_MAGIC_defelem))) - return; + return; if (mg->mg_obj) { - SV * const ahv = LvTARG(sv); - HE * const he = hv_fetch_ent(MUTABLE_HV(ahv), mg->mg_obj, TRUE, 0); + SV * const ahv = LvTARG(sv); + HE * const he = hv_fetch_ent(MUTABLE_HV(ahv), mg->mg_obj, TRUE, 0); if (he) value = HeVAL(he); - if (!value || value == &PL_sv_undef) - Perl_croak(aTHX_ PL_no_helem_sv, SVfARG(mg->mg_obj)); + if (!value || value == &PL_sv_undef) + Perl_croak(aTHX_ PL_no_helem_sv, SVfARG(mg->mg_obj)); } else if (LvSTARGOFF(sv) < 0) - Perl_croak(aTHX_ PL_no_aelem, LvSTARGOFF(sv)); + Perl_croak(aTHX_ PL_no_aelem, LvSTARGOFF(sv)); else { - AV *const av = MUTABLE_AV(LvTARG(sv)); - if ((I32)LvTARGLEN(sv) < 0 && LvSTARGOFF(sv) > AvFILL(av)) - LvTARG(sv) = NULL; /* array can't be extended */ - else { - SV* const * const svp = av_fetch(av, LvSTARGOFF(sv), TRUE); - if (!svp || !(value = *svp)) - Perl_croak(aTHX_ PL_no_aelem, LvSTARGOFF(sv)); - } + AV *const av = MUTABLE_AV(LvTARG(sv)); + if ((I32)LvTARGLEN(sv) < 0 && LvSTARGOFF(sv) > AvFILL(av)) + LvTARG(sv) = NULL; /* array can't be extended */ + else { + SV* const * const svp = av_fetch(av, LvSTARGOFF(sv), TRUE); + if (!svp || !(value = *svp)) + Perl_croak(aTHX_ PL_no_aelem, LvSTARGOFF(sv)); + } } SvREFCNT_inc_simple_void(value); SvREFCNT_dec(LvTARG(sv)); @@ -2601,6 +2631,22 @@ Perl_magic_setmglob(pTHX_ SV *sv, MAGIC *mg) return 0; } + +int +Perl_magic_freemglob(pTHX_ SV *sv, MAGIC *mg) +{ + PERL_ARGS_ASSERT_MAGIC_FREEMGLOB; + PERL_UNUSED_ARG(sv); + + /* pos() magic uses mg_len as a string position rather than a buffer + * length, and mg_ptr is currently unused, so skip freeing. + */ + assert(mg->mg_type == PERL_MAGIC_regex_global && mg->mg_len >= -1); + mg->mg_ptr = NULL; + return 0; +} + + int Perl_magic_setuvar(pTHX_ SV *sv, MAGIC *mg) { @@ -2609,7 +2655,7 @@ Perl_magic_setuvar(pTHX_ SV *sv, MAGIC *mg) PERL_ARGS_ASSERT_MAGIC_SETUVAR; if (uf && uf->uf_set) - (*uf->uf_set)(aTHX_ uf->uf_index, sv); + (*uf->uf_set)(aTHX_ uf->uf_index, sv); return 0; } @@ -2639,12 +2685,30 @@ Perl_magic_setcollxfrm(pTHX_ SV *sv, MAGIC *mg) PERL_UNUSED_CONTEXT; PERL_UNUSED_ARG(sv); if (mg->mg_ptr) { - Safefree(mg->mg_ptr); - mg->mg_ptr = NULL; - mg->mg_len = -1; + Safefree(mg->mg_ptr); + mg->mg_ptr = NULL; + mg->mg_len = -1; } return 0; } + +int +Perl_magic_freecollxfrm(pTHX_ SV *sv, MAGIC *mg) +{ + PERL_ARGS_ASSERT_MAGIC_FREECOLLXFRM; + PERL_UNUSED_ARG(sv); + + /* Collate magic uses mg_len as a string length rather than a buffer + * length, so we need to free even with mg_len == 0: hence we can't + * rely on standard magic free handling */ + if (mg->mg_len >= 0) { + assert(mg->mg_type == PERL_MAGIC_collxfrm); + Safefree(mg->mg_ptr); + mg->mg_ptr = NULL; + } + + return 0; +} #endif /* USE_LOCALE_COLLATE */ /* Just clear the UTF-8 cache data. */ @@ -2660,6 +2724,22 @@ Perl_magic_setutf8(pTHX_ SV *sv, MAGIC *mg) return 0; } +int +Perl_magic_freeutf8(pTHX_ SV *sv, MAGIC *mg) +{ + PERL_ARGS_ASSERT_MAGIC_FREEUTF8; + PERL_UNUSED_ARG(sv); + + /* utf8 magic uses mg_len as a string length rather than a buffer + * length, so we need to free even with mg_len == 0: hence we can't + * rely on standard magic free handling */ + assert(mg->mg_type == PERL_MAGIC_utf8 && mg->mg_len >= -1); + Safefree(mg->mg_ptr); + mg->mg_ptr = NULL; + return 0; +} + + int Perl_magic_setlvref(pTHX_ SV *sv, MAGIC *mg) { @@ -2668,52 +2748,52 @@ Perl_magic_setlvref(pTHX_ SV *sv, MAGIC *mg) if (!SvROK(sv)) Perl_croak(aTHX_ "Assigned value is not a reference"); switch (mg->mg_private & OPpLVREF_TYPE) { case OPpLVREF_SV: - if (SvTYPE(SvRV(sv)) > SVt_PVLV) - bad = " SCALAR"; - break; + if (SvTYPE(SvRV(sv)) > SVt_PVLV) + bad = " SCALAR"; + break; case OPpLVREF_AV: - if (SvTYPE(SvRV(sv)) != SVt_PVAV) - bad = "n ARRAY"; - break; + if (SvTYPE(SvRV(sv)) != SVt_PVAV) + bad = "n ARRAY"; + break; case OPpLVREF_HV: - if (SvTYPE(SvRV(sv)) != SVt_PVHV) - bad = " HASH"; - break; + if (SvTYPE(SvRV(sv)) != SVt_PVHV) + bad = " HASH"; + break; case OPpLVREF_CV: - if (SvTYPE(SvRV(sv)) != SVt_PVCV) - bad = " CODE"; + if (SvTYPE(SvRV(sv)) != SVt_PVCV) + bad = " CODE"; } if (bad) - /* diag_listed_as: Assigned value is not %s reference */ - Perl_croak(aTHX_ "Assigned value is not a%s reference", bad); + /* diag_listed_as: Assigned value is not %s reference */ + Perl_croak(aTHX_ "Assigned value is not a%s reference", bad); switch (mg->mg_obj ? SvTYPE(mg->mg_obj) : 0) { case 0: { - SV * const old = PAD_SV(mg->mg_len); - PAD_SETSV(mg->mg_len, SvREFCNT_inc_NN(SvRV(sv))); - SvREFCNT_dec(old); - break; + SV * const old = PAD_SV(mg->mg_len); + PAD_SETSV(mg->mg_len, SvREFCNT_inc_NN(SvRV(sv))); + SvREFCNT_dec(old); + break; } case SVt_PVGV: - gv_setref(mg->mg_obj, sv); - SvSETMAGIC(mg->mg_obj); - break; + gv_setref(mg->mg_obj, sv); + SvSETMAGIC(mg->mg_obj); + break; case SVt_PVAV: - av_store((AV *)mg->mg_obj, SvIV((SV *)mg->mg_ptr), - SvREFCNT_inc_simple_NN(SvRV(sv))); - break; + av_store((AV *)mg->mg_obj, SvIV((SV *)mg->mg_ptr), + SvREFCNT_inc_simple_NN(SvRV(sv))); + break; case SVt_PVHV: - (void)hv_store_ent((HV *)mg->mg_obj, (SV *)mg->mg_ptr, + (void)hv_store_ent((HV *)mg->mg_obj, (SV *)mg->mg_ptr, SvREFCNT_inc_simple_NN(SvRV(sv)), 0); } if (mg->mg_flags & MGf_PERSIST) - NOOP; /* This sv is in use as an iterator var and will be reused, - so we must leave the magic. */ + NOOP; /* This sv is in use as an iterator var and will be reused, + so we must leave the magic. */ else - /* This sv could be returned by the assignment op, so clear the - magic, as lvrefs are an implementation detail that must not be - leaked to the user. */ - sv_unmagic(sv, PERL_MAGIC_lvref); + /* This sv could be returned by the assignment op, so clear the + magic, as lvrefs are an implementation detail that must not be + leaked to the user. */ + sv_unmagic(sv, PERL_MAGIC_lvref); return 0; } @@ -2721,9 +2801,6 @@ static void S_set_dollarzero(pTHX_ SV *sv) PERL_TSA_REQUIRES(PL_dollarzero_mutex) { -#ifdef USE_ITHREADS - dVAR; -#endif const char *s; STRLEN len; #ifdef HAS_SETPROCTITLE @@ -2800,9 +2877,6 @@ S_set_dollarzero(pTHX_ SV *sv) int Perl_magic_set(pTHX_ SV *sv, MAGIC *mg) { -#ifdef USE_ITHREADS - dVAR; -#endif I32 paren; const REGEXP * rx; I32 i; @@ -2813,10 +2887,10 @@ Perl_magic_set(pTHX_ SV *sv, MAGIC *mg) if (!mg->mg_ptr) { paren = mg->mg_len; - if (PL_curpm && (rx = PM_GETRE(PL_curpm))) { + if (PL_curpm && (rx = PM_GETRE(PL_curpm))) { setparen_got_rx: - CALLREG_NUMBUF_STORE((REGEXP * const)rx,paren,sv); - } else { + CALLREG_NUMBUF_STORE((REGEXP *)rx,paren,sv); + } else { /* Croak with a READONLY error when a numbered match var is * set without a previous pattern match. Unless it's C */ @@ -2830,28 +2904,28 @@ Perl_magic_set(pTHX_ SV *sv, MAGIC *mg) switch (*mg->mg_ptr) { case '\001': /* ^A */ - if (SvOK(sv)) sv_copypv(PL_bodytarget, sv); - else SvOK_off(PL_bodytarget); - FmLINES(PL_bodytarget) = 0; - if (SvPOK(PL_bodytarget)) { - char *s = SvPVX(PL_bodytarget); + if (SvOK(sv)) sv_copypv(PL_bodytarget, sv); + else SvOK_off(PL_bodytarget); + FmLINES(PL_bodytarget) = 0; + if (SvPOK(PL_bodytarget)) { + char *s = SvPVX(PL_bodytarget); char *e = SvEND(PL_bodytarget); - while ( ((s = (char *) memchr(s, '\n', e - s))) ) { - FmLINES(PL_bodytarget)++; - s++; - } - } - /* mg_set() has temporarily made sv non-magical */ - if (TAINTING_get) { - if ((tmg = mg_find(sv,PERL_MAGIC_taint)) && tmg->mg_len & 1) - SvTAINTED_on(PL_bodytarget); - else - SvTAINTED_off(PL_bodytarget); - } - break; + while ( ((s = (char *) memchr(s, '\n', e - s))) ) { + FmLINES(PL_bodytarget)++; + s++; + } + } + /* mg_set() has temporarily made sv non-magical */ + if (TAINTING_get) { + if ((tmg = mg_find(sv,PERL_MAGIC_taint)) && tmg->mg_len & 1) + SvTAINTED_on(PL_bodytarget); + else + SvTAINTED_off(PL_bodytarget); + } + break; case '\003': /* ^C */ - PL_minus_c = cBOOL(SvIV(sv)); - break; + PL_minus_c = cBOOL(SvIV(sv)); + break; case '\004': /* ^D */ #ifdef DEBUGGING @@ -2862,30 +2936,30 @@ Perl_magic_set(pTHX_ SV *sv, MAGIC *mg) dump_all_perl(!DEBUG_B_TEST); } #else - PL_debug = (SvIV(sv)) | DEBUG_TOP_FLAG; + PL_debug = (SvIV(sv)) | DEBUG_TOP_FLAG; #endif - break; + break; case '\005': /* ^E */ - if (*(mg->mg_ptr+1) == '\0') { + if (*(mg->mg_ptr+1) == '\0') { #ifdef VMS - set_vaxc_errno(SvIV(sv)); + set_vaxc_errno(SvIV(sv)); #elif defined(WIN32) - SetLastError( SvIV(sv) ); + SetLastError( SvIV(sv) ); #elif defined(OS2) - os2_setsyserrno(SvIV(sv)); + os2_setsyserrno(SvIV(sv)); #else - /* will anyone ever use this? */ - SETERRNO(SvIV(sv), 4); + /* will anyone ever use this? */ + SETERRNO(SvIV(sv), 4); #endif - } - else if (strEQ(mg->mg_ptr + 1, "NCODING") && SvOK(sv)) + } + else if (strEQ(mg->mg_ptr + 1, "NCODING") && SvOK(sv)) Perl_croak(aTHX_ "${^ENCODING} is no longer supported"); - break; + break; case '\006': /* ^F */ if (mg->mg_ptr[1] == '\0') { PL_maxsysfd = SvIV(sv); } - break; + break; case '\010': /* ^H */ { U32 save_hints = PL_hints; @@ -2896,48 +2970,48 @@ Perl_magic_set(pTHX_ SV *sv, MAGIC *mg) notify_parser_that_changed_to_utf8(); } } - break; + break; case '\011': /* ^I */ /* NOT \t in EBCDIC */ - Safefree(PL_inplace); - PL_inplace = SvOK(sv) ? savesvpv(sv) : NULL; - break; + Safefree(PL_inplace); + PL_inplace = SvOK(sv) ? savesvpv(sv) : NULL; + break; case '\016': /* ^N */ - if (PL_curpm && (rx = PM_GETRE(PL_curpm)) - && (paren = RX_LASTCLOSEPAREN(rx))) goto setparen_got_rx; - goto croakparen; + if (PL_curpm && (rx = PM_GETRE(PL_curpm)) + && (paren = RX_LASTCLOSEPAREN(rx))) goto setparen_got_rx; + goto croakparen; case '\017': /* ^O */ - if (*(mg->mg_ptr+1) == '\0') { - Safefree(PL_osname); - PL_osname = NULL; - if (SvOK(sv)) { - TAINT_PROPER("assigning to $^O"); - PL_osname = savesvpv(sv); - } - } - else if (strEQ(mg->mg_ptr, "\017PEN")) { - STRLEN len; - const char *const start = SvPV(sv, len); - const char *out = (const char*)memchr(start, '\0', len); - SV *tmp; - - - PL_compiling.cop_hints |= HINT_LEXICAL_IO_IN | HINT_LEXICAL_IO_OUT; - PL_hints |= HINT_LEXICAL_IO_IN | HINT_LEXICAL_IO_OUT; - - /* Opening for input is more common than opening for output, so - ensure that hints for input are sooner on linked list. */ - tmp = out ? newSVpvn_flags(out + 1, start + len - out - 1, - SvUTF8(sv)) - : newSVpvs_flags("", SvUTF8(sv)); - (void)hv_stores(GvHV(PL_hintgv), "open>", tmp); - mg_set(tmp); - - tmp = newSVpvn_flags(start, out ? (STRLEN)(out - start) : len, - SvUTF8(sv)); - (void)hv_stores(GvHV(PL_hintgv), "open<", tmp); - mg_set(tmp); - } - break; + if (*(mg->mg_ptr+1) == '\0') { + Safefree(PL_osname); + PL_osname = NULL; + if (SvOK(sv)) { + TAINT_PROPER("assigning to $^O"); + PL_osname = savesvpv(sv); + } + } + else if (strEQ(mg->mg_ptr, "\017PEN")) { + STRLEN len; + const char *const start = SvPV(sv, len); + const char *out = (const char*)memchr(start, '\0', len); + SV *tmp; + + + PL_compiling.cop_hints |= HINT_LEXICAL_IO_IN | HINT_LEXICAL_IO_OUT; + PL_hints |= HINT_LEXICAL_IO_IN | HINT_LEXICAL_IO_OUT; + + /* Opening for input is more common than opening for output, so + ensure that hints for input are sooner on linked list. */ + tmp = out ? newSVpvn_flags(out + 1, start + len - out - 1, + SvUTF8(sv)) + : newSVpvs_flags("", SvUTF8(sv)); + (void)hv_stores(GvHV(PL_hintgv), "open>", tmp); + mg_set(tmp); + + tmp = newSVpvn_flags(start, out ? (STRLEN)(out - start) : len, + SvUTF8(sv)); + (void)hv_stores(GvHV(PL_hintgv), "open<", tmp); + mg_set(tmp); + } + break; case '\020': /* ^P */ PL_perldb = SvIV(sv); if (PL_perldb && !PL_DBsingle) @@ -2945,111 +3019,106 @@ Perl_magic_set(pTHX_ SV *sv, MAGIC *mg) break; case '\024': /* ^T */ #ifdef BIG_TIME - PL_basetime = (Time_t)(SvNOK(sv) ? SvNVX(sv) : sv_2nv(sv)); + PL_basetime = (Time_t)(SvNOK(sv) ? SvNVX(sv) : sv_2nv(sv)); #else - PL_basetime = (Time_t)SvIV(sv); + PL_basetime = (Time_t)SvIV(sv); #endif - break; + break; case '\025': /* ^UTF8CACHE */ - if (strEQ(mg->mg_ptr+1, "TF8CACHE")) { - PL_utf8cache = (signed char) sv_2iv(sv); - } - break; + if (strEQ(mg->mg_ptr+1, "TF8CACHE")) { + PL_utf8cache = (signed char) sv_2iv(sv); + } + break; case '\027': /* ^W & $^WARNING_BITS */ - if (*(mg->mg_ptr+1) == '\0') { - if ( ! (PL_dowarn & G_WARN_ALL_MASK)) { - i = SvIV(sv); - PL_dowarn = (PL_dowarn & ~G_WARN_ON) - | (i ? G_WARN_ON : G_WARN_OFF) ; - } - } - else if (strEQ(mg->mg_ptr+1, "ARNING_BITS")) { - if ( ! (PL_dowarn & G_WARN_ALL_MASK)) { - if (!SvPOK(sv)) { + if (*(mg->mg_ptr+1) == '\0') { + if ( ! (PL_dowarn & G_WARN_ALL_MASK)) { + i = SvIV(sv); + PL_dowarn = (PL_dowarn & ~G_WARN_ON) + | (i ? G_WARN_ON : G_WARN_OFF) ; + } + } + else if (strEQ(mg->mg_ptr+1, "ARNING_BITS")) { + if ( ! (PL_dowarn & G_WARN_ALL_MASK)) { + if (!SvPOK(sv)) { free_and_set_cop_warnings(&PL_compiling, pWARN_STD); - break; - } - { - STRLEN len, i; - int not_none = 0, not_all = 0; - const U8 * const ptr = (const U8 *)SvPV_const(sv, len) ; - for (i = 0 ; i < len ; ++i) { - not_none |= ptr[i]; - not_all |= ptr[i] ^ 0x55; - } - if (!not_none) { + break; + } + { + STRLEN len, i; + int not_none = 0, not_all = 0; + const U8 * const ptr = (const U8 *)SvPV_const(sv, len) ; + for (i = 0 ; i < len ; ++i) { + not_none |= ptr[i]; + not_all |= ptr[i] ^ 0x55; + } + if (!not_none) { free_and_set_cop_warnings(&PL_compiling, pWARN_NONE); - } else if (len >= WARNsize && !not_all) { + } else if (len >= WARNsize && !not_all) { free_and_set_cop_warnings(&PL_compiling, pWARN_ALL); - PL_dowarn |= G_WARN_ONCE ; - } + PL_dowarn |= G_WARN_ONCE ; + } else { - STRLEN len; - const char *const p = SvPV_const(sv, len); - - PL_compiling.cop_warnings - = Perl_new_warnings_bitfield(aTHX_ PL_compiling.cop_warnings, - p, len); - - if (isWARN_on(PL_compiling.cop_warnings, WARN_ONCE)) - PL_dowarn |= G_WARN_ONCE ; - } - - } - } - } -#ifdef WIN32 - else if (strEQ(mg->mg_ptr+1, "IN32_SLOPPY_STAT")) { - w32_sloppystat = (bool)sv_true(sv); - } -#endif - break; + STRLEN len; + const char *const p = SvPV_const(sv, len); + + PL_compiling.cop_warnings + = Perl_new_warnings_bitfield(aTHX_ PL_compiling.cop_warnings, + p, len); + + if (isWARN_on(PL_compiling.cop_warnings, WARN_ONCE)) + PL_dowarn |= G_WARN_ONCE ; + } + + } + } + } + break; case '.': - if (PL_localizing) { - if (PL_localizing == 1) - SAVESPTR(PL_last_in_gv); - } - else if (SvOK(sv) && GvIO(PL_last_in_gv)) - IoLINES(GvIOp(PL_last_in_gv)) = SvIV(sv); - break; + if (PL_localizing) { + if (PL_localizing == 1) + SAVESPTR(PL_last_in_gv); + } + else if (SvOK(sv) && GvIO(PL_last_in_gv)) + IoLINES(GvIOp(PL_last_in_gv)) = SvIV(sv); + break; case '^': - Safefree(IoTOP_NAME(GvIOp(PL_defoutgv))); - IoTOP_NAME(GvIOp(PL_defoutgv)) = savesvpv(sv); - IoTOP_GV(GvIOp(PL_defoutgv)) = gv_fetchsv(sv, GV_ADD, SVt_PVIO); - break; + Safefree(IoTOP_NAME(GvIOp(PL_defoutgv))); + IoTOP_NAME(GvIOp(PL_defoutgv)) = savesvpv(sv); + IoTOP_GV(GvIOp(PL_defoutgv)) = gv_fetchsv(sv, GV_ADD, SVt_PVIO); + break; case '~': - Safefree(IoFMT_NAME(GvIOp(PL_defoutgv))); - IoFMT_NAME(GvIOp(PL_defoutgv)) = savesvpv(sv); - IoFMT_GV(GvIOp(PL_defoutgv)) = gv_fetchsv(sv, GV_ADD, SVt_PVIO); - break; + Safefree(IoFMT_NAME(GvIOp(PL_defoutgv))); + IoFMT_NAME(GvIOp(PL_defoutgv)) = savesvpv(sv); + IoFMT_GV(GvIOp(PL_defoutgv)) = gv_fetchsv(sv, GV_ADD, SVt_PVIO); + break; case '=': - IoPAGE_LEN(GvIOp(PL_defoutgv)) = (SvIV(sv)); - break; + IoPAGE_LEN(GvIOp(PL_defoutgv)) = (SvIV(sv)); + break; case '-': - IoLINES_LEFT(GvIOp(PL_defoutgv)) = (SvIV(sv)); - if (IoLINES_LEFT(GvIOp(PL_defoutgv)) < 0L) - IoLINES_LEFT(GvIOp(PL_defoutgv)) = 0L; - break; + IoLINES_LEFT(GvIOp(PL_defoutgv)) = (SvIV(sv)); + if (IoLINES_LEFT(GvIOp(PL_defoutgv)) < 0L) + IoLINES_LEFT(GvIOp(PL_defoutgv)) = 0L; + break; case '%': - IoPAGE(GvIOp(PL_defoutgv)) = (SvIV(sv)); - break; + IoPAGE(GvIOp(PL_defoutgv)) = (SvIV(sv)); + break; case '|': - { - IO * const io = GvIO(PL_defoutgv); - if(!io) - break; - if ((SvIV(sv)) == 0) - IoFLAGS(io) &= ~IOf_FLUSH; - else { - if (!(IoFLAGS(io) & IOf_FLUSH)) { - PerlIO *ofp = IoOFP(io); - if (ofp) - (void)PerlIO_flush(ofp); - IoFLAGS(io) |= IOf_FLUSH; - } - } - } - break; + { + IO * const io = GvIO(PL_defoutgv); + if(!io) + break; + if ((SvIV(sv)) == 0) + IoFLAGS(io) &= ~IOf_FLUSH; + else { + if (!(IoFLAGS(io) & IOf_FLUSH)) { + PerlIO *ofp = IoOFP(io); + if (ofp) + (void)PerlIO_flush(ofp); + IoFLAGS(io) |= IOf_FLUSH; + } + } + } + break; case '/': { if (SvROK(sv)) { @@ -3079,36 +3148,36 @@ Perl_magic_set(pTHX_ SV *sv, MAGIC *mg) SvREFCNT_dec(PL_rs); PL_rs = newSVsv(sv); } - break; + break; case '\\': - SvREFCNT_dec(PL_ors_sv); - if (SvOK(sv)) { - PL_ors_sv = newSVsv(sv); - } - else { - PL_ors_sv = NULL; - } - break; + SvREFCNT_dec(PL_ors_sv); + if (SvOK(sv)) { + PL_ors_sv = newSVsv(sv); + } + else { + PL_ors_sv = NULL; + } + break; case '[': - if (SvIV(sv) != 0) - Perl_croak(aTHX_ "Assigning non-zero to $[ is no longer possible"); - break; + if (SvIV(sv) != 0) + Perl_croak(aTHX_ "Assigning non-zero to $[ is no longer possible"); + break; case '?': #ifdef COMPLEX_STATUS - if (PL_localizing == 2) { - SvUPGRADE(sv, SVt_PVLV); - PL_statusvalue = LvTARGOFF(sv); - PL_statusvalue_vms = LvTARGLEN(sv); - } - else + if (PL_localizing == 2) { + SvUPGRADE(sv, SVt_PVLV); + PL_statusvalue = LvTARGOFF(sv); + PL_statusvalue_vms = LvTARGLEN(sv); + } + else #endif #ifdef VMSISH_STATUS - if (VMSISH_STATUS) - STATUS_NATIVE_CHILD_SET((U32)SvIV(sv)); - else + if (VMSISH_STATUS) + STATUS_NATIVE_CHILD_SET((U32)SvIV(sv)); + else #endif - STATUS_UNIX_EXIT_SET(SvIV(sv)); - break; + STATUS_UNIX_EXIT_SET(SvIV(sv)); + break; case '!': { #ifdef VMS @@ -3117,93 +3186,93 @@ Perl_magic_set(pTHX_ SV *sv, MAGIC *mg) # define PERL_VMS_BANG 0 #endif #if defined(WIN32) - SETERRNO(win32_get_errno(SvIOK(sv) ? SvIVX(sv) : SvOK(sv) ? sv_2iv(sv) : 0), - (SvIV(sv) == EVMSERR) ? 4 : PERL_VMS_BANG); + SETERRNO(win32_get_errno(SvIOK(sv) ? SvIVX(sv) : SvOK(sv) ? sv_2iv(sv) : 0), + (SvIV(sv) == EVMSERR) ? 4 : PERL_VMS_BANG); #else - SETERRNO(SvIOK(sv) ? SvIVX(sv) : SvOK(sv) ? sv_2iv(sv) : 0, - (SvIV(sv) == EVMSERR) ? 4 : PERL_VMS_BANG); + SETERRNO(SvIOK(sv) ? SvIVX(sv) : SvOK(sv) ? sv_2iv(sv) : 0, + (SvIV(sv) == EVMSERR) ? 4 : PERL_VMS_BANG); #endif - } - break; + } + break; case '<': - { + { /* XXX $< currently silently ignores failures */ - const Uid_t new_uid = SvUID(sv); - PL_delaymagic_uid = new_uid; - if (PL_delaymagic) { - PL_delaymagic |= DM_RUID; - break; /* don't do magic till later */ - } + const Uid_t new_uid = SvUID(sv); + PL_delaymagic_uid = new_uid; + if (PL_delaymagic) { + PL_delaymagic |= DM_RUID; + break; /* don't do magic till later */ + } #ifdef HAS_SETRUID - PERL_UNUSED_RESULT(setruid(new_uid)); + PERL_UNUSED_RESULT(setruid(new_uid)); #elif defined(HAS_SETREUID) PERL_UNUSED_RESULT(setreuid(new_uid, (Uid_t)-1)); #elif defined(HAS_SETRESUID) PERL_UNUSED_RESULT(setresuid(new_uid, (Uid_t)-1, (Uid_t)-1)); #else - if (new_uid == PerlProc_geteuid()) { /* special case $< = $> */ + if (new_uid == PerlProc_geteuid()) { /* special case $< = $> */ # ifdef PERL_DARWIN - /* workaround for Darwin's setuid peculiarity, cf [perl #24122] */ - if (new_uid != 0 && PerlProc_getuid() == 0) + /* workaround for Darwin's setuid peculiarity, cf [perl #24122] */ + if (new_uid != 0 && PerlProc_getuid() == 0) PERL_UNUSED_RESULT(PerlProc_setuid(0)); # endif PERL_UNUSED_RESULT(PerlProc_setuid(new_uid)); - } else { - Perl_croak(aTHX_ "setruid() not implemented"); - } + } else { + Perl_croak(aTHX_ "setruid() not implemented"); + } #endif - break; - } + break; + } case '>': - { + { /* XXX $> currently silently ignores failures */ - const Uid_t new_euid = SvUID(sv); - PL_delaymagic_euid = new_euid; - if (PL_delaymagic) { - PL_delaymagic |= DM_EUID; - break; /* don't do magic till later */ - } + const Uid_t new_euid = SvUID(sv); + PL_delaymagic_euid = new_euid; + if (PL_delaymagic) { + PL_delaymagic |= DM_EUID; + break; /* don't do magic till later */ + } #ifdef HAS_SETEUID - PERL_UNUSED_RESULT(seteuid(new_euid)); + PERL_UNUSED_RESULT(seteuid(new_euid)); #elif defined(HAS_SETREUID) - PERL_UNUSED_RESULT(setreuid((Uid_t)-1, new_euid)); + PERL_UNUSED_RESULT(setreuid((Uid_t)-1, new_euid)); #elif defined(HAS_SETRESUID) - PERL_UNUSED_RESULT(setresuid((Uid_t)-1, new_euid, (Uid_t)-1)); + PERL_UNUSED_RESULT(setresuid((Uid_t)-1, new_euid, (Uid_t)-1)); #else - if (new_euid == PerlProc_getuid()) /* special case $> = $< */ - PERL_UNUSED_RESULT(PerlProc_setuid(new_euid)); - else { - Perl_croak(aTHX_ "seteuid() not implemented"); - } -#endif - break; - } + if (new_euid == PerlProc_getuid()) /* special case $> = $< */ + PERL_UNUSED_RESULT(PerlProc_setuid(new_euid)); + else { + Perl_croak(aTHX_ "seteuid() not implemented"); + } +#endif + break; + } case '(': - { + { /* XXX $( currently silently ignores failures */ - const Gid_t new_gid = SvGID(sv); - PL_delaymagic_gid = new_gid; - if (PL_delaymagic) { - PL_delaymagic |= DM_RGID; - break; /* don't do magic till later */ - } + const Gid_t new_gid = SvGID(sv); + PL_delaymagic_gid = new_gid; + if (PL_delaymagic) { + PL_delaymagic |= DM_RGID; + break; /* don't do magic till later */ + } #ifdef HAS_SETRGID - PERL_UNUSED_RESULT(setrgid(new_gid)); + PERL_UNUSED_RESULT(setrgid(new_gid)); #elif defined(HAS_SETREGID) - PERL_UNUSED_RESULT(setregid(new_gid, (Gid_t)-1)); + PERL_UNUSED_RESULT(setregid(new_gid, (Gid_t)-1)); #elif defined(HAS_SETRESGID) PERL_UNUSED_RESULT(setresgid(new_gid, (Gid_t)-1, (Gid_t) -1)); #else - if (new_gid == PerlProc_getegid()) /* special case $( = $) */ - PERL_UNUSED_RESULT(PerlProc_setgid(new_gid)); - else { - Perl_croak(aTHX_ "setrgid() not implemented"); - } -#endif - break; - } + if (new_gid == PerlProc_getegid()) /* special case $( = $) */ + PERL_UNUSED_RESULT(PerlProc_setgid(new_gid)); + else { + Perl_croak(aTHX_ "setrgid() not implemented"); + } +#endif + break; + } case ')': - { + { /* (hv) best guess: maybe we'll need configure probes to do a better job, * but you can override it if you need to. */ @@ -3211,10 +3280,10 @@ Perl_magic_set(pTHX_ SV *sv, MAGIC *mg) #define INVALID_GID ((Gid_t)-1) #endif /* XXX $) currently silently ignores failures */ - Gid_t new_egid; + Gid_t new_egid; #ifdef HAS_SETGROUPS - { - const char *p = SvPV_const(sv, len); + { + const char *p = SvPV_const(sv, len); Groups_t *gary = NULL; const char* p_end = p + len; const char* endptr = p_end; @@ -3258,54 +3327,89 @@ Perl_magic_set(pTHX_ SV *sv, MAGIC *mg) } if (i) PERL_UNUSED_RESULT(setgroups(i, gary)); - Safefree(gary); - } + Safefree(gary); + } #else /* HAS_SETGROUPS */ new_egid = SvGID(sv); #endif /* HAS_SETGROUPS */ - PL_delaymagic_egid = new_egid; - if (PL_delaymagic) { - PL_delaymagic |= DM_EGID; - break; /* don't do magic till later */ - } + PL_delaymagic_egid = new_egid; + if (PL_delaymagic) { + PL_delaymagic |= DM_EGID; + break; /* don't do magic till later */ + } #ifdef HAS_SETEGID - PERL_UNUSED_RESULT(setegid(new_egid)); + PERL_UNUSED_RESULT(setegid(new_egid)); #elif defined(HAS_SETREGID) - PERL_UNUSED_RESULT(setregid((Gid_t)-1, new_egid)); + PERL_UNUSED_RESULT(setregid((Gid_t)-1, new_egid)); #elif defined(HAS_SETRESGID) - PERL_UNUSED_RESULT(setresgid((Gid_t)-1, new_egid, (Gid_t)-1)); + PERL_UNUSED_RESULT(setresgid((Gid_t)-1, new_egid, (Gid_t)-1)); #else - if (new_egid == PerlProc_getgid()) /* special case $) = $( */ - PERL_UNUSED_RESULT(PerlProc_setgid(new_egid)); - else { - Perl_croak(aTHX_ "setegid() not implemented"); - } -#endif - break; - } + if (new_egid == PerlProc_getgid()) /* special case $) = $( */ + PERL_UNUSED_RESULT(PerlProc_setgid(new_egid)); + else { + Perl_croak(aTHX_ "setegid() not implemented"); + } +#endif + break; + } case ':': - PL_chopset = SvPV_force(sv,len); - break; + PL_chopset = SvPV_force(sv,len); + break; case '$': /* $$ */ - /* Store the pid in mg->mg_obj so we can tell when a fork has - occurred. mg->mg_obj points to *$ by default, so clear it. */ - if (isGV(mg->mg_obj)) { - if (mg->mg_flags & MGf_REFCOUNTED) /* probably never true */ - SvREFCNT_dec(mg->mg_obj); - mg->mg_flags |= MGf_REFCOUNTED; - mg->mg_obj = newSViv((IV)PerlProc_getpid()); - } - else sv_setiv(mg->mg_obj, (IV)PerlProc_getpid()); - break; + /* Store the pid in mg->mg_obj so we can tell when a fork has + occurred. mg->mg_obj points to *$ by default, so clear it. */ + if (isGV(mg->mg_obj)) { + if (mg->mg_flags & MGf_REFCOUNTED) /* probably never true */ + SvREFCNT_dec(mg->mg_obj); + mg->mg_flags |= MGf_REFCOUNTED; + mg->mg_obj = newSViv((IV)PerlProc_getpid()); + } + else sv_setiv(mg->mg_obj, (IV)PerlProc_getpid()); + break; case '0': - LOCK_DOLLARZERO_MUTEX; + if (!sv_utf8_downgrade(sv, /* fail_ok */ TRUE)) { + + /* Since we are going to set the string's UTF8-encoded form + as the process name we should update $0 itself to contain + that same (UTF8-encoded) value. */ + sv_utf8_encode(GvSV(mg->mg_obj)); + + Perl_ck_warner_d(aTHX_ packWARN(WARN_UTF8), "Wide character in %s", "$0"); + } + + LOCK_DOLLARZERO_MUTEX; S_set_dollarzero(aTHX_ sv); - UNLOCK_DOLLARZERO_MUTEX; - break; + UNLOCK_DOLLARZERO_MUTEX; + break; } return 0; } +/* +=for apidoc_section $signals +=for apidoc whichsig +=for apidoc_item whichsig_pv +=for apidoc_item whichsig_pvn +=for apidoc_item whichsig_sv + +These all convert a signal name into its corresponding signal number; +returning -1 if no corresponding number was found. + +They differ only in the source of the signal name: + +C takes the name from the C-terminated string starting at +C. + +C is merely a different spelling, a synonym, of C. + +C takes the name from the string starting at C, with length +C bytes. + +C takes the name from the PV stored in the SV C. + +=cut +*/ + I32 Perl_whichsig_sv(pTHX_ SV *sigsv) { @@ -3332,15 +3436,15 @@ Perl_whichsig_pvn(pTHX_ const char *sig, STRLEN len) PERL_UNUSED_CONTEXT; for (sigv = (char* const*)PL_sig_name; *sigv; sigv++) - if (strlen(*sigv) == len && memEQ(sig,*sigv, len)) - return PL_sig_num[sigv - (char* const*)PL_sig_name]; + if (strlen(*sigv) == len && memEQ(sig,*sigv, len)) + return PL_sig_num[sigv - (char* const*)PL_sig_name]; #ifdef SIGCLD if (memEQs(sig, len, "CHLD")) - return SIGCLD; + return SIGCLD; #endif #ifdef SIGCHLD if (memEQs(sig, len, "CLD")) - return SIGCHLD; + return SIGCHLD; #endif return -1; } @@ -3420,54 +3524,54 @@ Perl_perly_sighandler(int sig, Siginfo_t *sip PERL_UNUSED_DECL, if (!PL_psig_ptr[sig]) { - PerlIO_printf(Perl_error_log, "Signal SIG%s received, but no signal handler set.\n", - PL_sig_name[sig]); - exit(sig); - } + PerlIO_printf(Perl_error_log, "Signal SIG%s received, but no signal handler set.\n", + PL_sig_name[sig]); + exit(sig); + } if (PL_signals & PERL_SIGNALS_UNSAFE_FLAG) { - /* Max number of items pushed there is 3*n or 4. We cannot fix - infinity, so we fix 4 (in fact 5): */ - if (PL_savestack_ix + 15 <= PL_savestack_max) { - flags |= 1; - PL_savestack_ix += 5; /* Protect save in progress. */ - SAVEDESTRUCTOR_X(S_unwind_handler_stack, NULL); - } + /* Max number of items pushed there is 3*n or 4. We cannot fix + infinity, so we fix 4 (in fact 5): */ + if (PL_savestack_ix + 15 <= PL_savestack_max) { + flags |= 1; + PL_savestack_ix += 5; /* Protect save in progress. */ + SAVEDESTRUCTOR_X(S_unwind_handler_stack, NULL); + } } /* sv_2cv is too complicated, try a simpler variant first: */ if (!SvROK(PL_psig_ptr[sig]) || !(cv = MUTABLE_CV(SvRV(PL_psig_ptr[sig]))) - || SvTYPE(cv) != SVt_PVCV) { - HV *st; - cv = sv_2cv(PL_psig_ptr[sig], &st, &gv, GV_ADD); + || SvTYPE(cv) != SVt_PVCV) { + HV *st; + cv = sv_2cv(PL_psig_ptr[sig], &st, &gv, GV_ADD); } if (!cv || !CvROOT(cv)) { - const HEK * const hek = gv - ? GvENAME_HEK(gv) - : cv && CvNAMED(cv) - ? CvNAME_HEK(cv) - : cv && CvGV(cv) ? GvENAME_HEK(CvGV(cv)) : NULL; - if (hek) - Perl_ck_warner(aTHX_ packWARN(WARN_SIGNAL), - "SIG%s handler \"%" HEKf "\" not defined.\n", - PL_sig_name[sig], HEKfARG(hek)); - /* diag_listed_as: SIG%s handler "%s" not defined */ - else Perl_ck_warner(aTHX_ packWARN(WARN_SIGNAL), - "SIG%s handler \"__ANON__\" not defined.\n", - PL_sig_name[sig]); - goto cleanup; + const HEK * const hek = gv + ? GvENAME_HEK(gv) + : cv && CvNAMED(cv) + ? CvNAME_HEK(cv) + : cv && CvGV(cv) ? GvENAME_HEK(CvGV(cv)) : NULL; + if (hek) + Perl_ck_warner(aTHX_ packWARN(WARN_SIGNAL), + "SIG%s handler \"%" HEKf "\" not defined.\n", + PL_sig_name[sig], HEKfARG(hek)); + /* diag_listed_as: SIG%s handler "%s" not defined */ + else Perl_ck_warner(aTHX_ packWARN(WARN_SIGNAL), + "SIG%s handler \"__ANON__\" not defined.\n", + PL_sig_name[sig]); + goto cleanup; } sv = PL_psig_name[sig] - ? SvREFCNT_inc_NN(PL_psig_name[sig]) - : newSVpv(PL_sig_name[sig],0); + ? SvREFCNT_inc_NN(PL_psig_name[sig]) + : newSVpv(PL_sig_name[sig],0); flags |= 8; SAVEFREESV(sv); if (PL_signals & PERL_SIGNALS_UNSAFE_FLAG) { - /* make sure our assumption about the size of the SAVEs are correct: - * 3 for SAVEDESTRUCTOR_X, 2 for SAVEFREESV */ - assert(old_ss_ix + 2 + ((flags & 1) ? 3+5 : 0) == PL_savestack_ix); + /* make sure our assumption about the size of the SAVEs are correct: + * 3 for SAVEDESTRUCTOR_X, 2 for SAVEFREESV */ + assert(old_ss_ix + 2 + ((flags & 1) ? 3+5 : 0) == PL_savestack_ix); } PUSHSTACKi(PERLSI_SIGNAL); @@ -3476,9 +3580,9 @@ Perl_perly_sighandler(int sig, Siginfo_t *sip PERL_UNUSED_DECL, #if defined(HAS_SIGACTION) && defined(SA_SIGINFO) { - struct sigaction oact; + struct sigaction oact; - if (sip && sigaction(sig, 0, &oact) == 0 && oact.sa_flags & SA_SIGINFO) { + if (sip && sigaction(sig, 0, &oact) == 0 && oact.sa_flags & SA_SIGINFO) { HV *sih = newHV(); SV *rv = newRV_noinc(MUTABLE_SV(sih)); /* The siginfo fields signo, code, errno, pid, uid, @@ -3511,7 +3615,7 @@ Perl_perly_sighandler(int sig, Siginfo_t *sip PERL_UNUSED_DECL, PUSHs(rv); mPUSHp((char *)sip, sizeof(*sip)); - } + } } #endif @@ -3523,9 +3627,9 @@ Perl_perly_sighandler(int sig, Siginfo_t *sip PERL_UNUSED_DECL, POPSTACK; { - SV * const errsv = ERRSV; - if (SvTRUE_NN(errsv)) { - SvREFCNT_dec(errsv_save); + SV * const errsv = ERRSV; + if (SvTRUE_NN(errsv)) { + SvREFCNT_dec(errsv_save); #ifndef PERL_MICRO /* Handler "died", for example to get out of a restart-able read(). @@ -3533,41 +3637,41 @@ Perl_perly_sighandler(int sig, Siginfo_t *sip PERL_UNUSED_DECL, * blocked by the system when we entered. */ # ifdef HAS_SIGPROCMASK - if (!safe) { + if (!safe) { /* safe signals called via dispatch_signals() set up a * savestack destructor, unblock_sigmask(), to * automatically unblock the handler at the end. If * instead we get here directly, we have to do it * ourselves */ - sigset_t set; - sigemptyset(&set); - sigaddset(&set,sig); - sigprocmask(SIG_UNBLOCK, &set, NULL); - } + sigset_t set; + sigemptyset(&set); + sigaddset(&set,sig); + sigprocmask(SIG_UNBLOCK, &set, NULL); + } # else - /* Not clear if this will work */ + /* Not clear if this will work */ /* XXX not clear if this should be protected by 'if (safe)' * too */ - (void)rsignal(sig, SIG_IGN); - (void)rsignal(sig, PL_csighandlerp); + (void)rsignal(sig, SIG_IGN); + (void)rsignal(sig, PL_csighandlerp); # endif #endif /* !PERL_MICRO */ - die_sv(errsv); - } - else { - sv_setsv(errsv, errsv_save); - SvREFCNT_dec(errsv_save); - } + die_sv(errsv); + } + else { + sv_setsv(errsv, errsv_save); + SvREFCNT_dec(errsv_save); + } } cleanup: /* pop any of SAVEFREESV, SAVEDESTRUCTOR_X and "save in progress" */ PL_savestack_ix = old_ss_ix; if (flags & 8) - SvREFCNT_dec_NN(sv); + SvREFCNT_dec_NN(sv); PL_op = myop; /* Apparently not needed... */ PL_Sv = tSv; /* Restore global temporaries. */ @@ -3587,11 +3691,11 @@ S_restore_magic(pTHX_ const void *p) return; if (SvTYPE(sv) >= SVt_PVMG && SvMAGIC(sv)) { - SvTEMP_off(sv); /* if it's still magical, this value isn't temporary */ - if (mgs->mgs_flags) - SvFLAGS(sv) |= mgs->mgs_flags; - else - mg_magical(sv); + SvTEMP_off(sv); /* if it's still magical, this value isn't temporary */ + if (mgs->mgs_flags) + SvFLAGS(sv) |= mgs->mgs_flags; + else + mg_magical(sv); } bumped = mgs->mgs_bumped; @@ -3606,25 +3710,25 @@ S_restore_magic(pTHX_ const void *p) */ if (PL_savestack_ix == mgs->mgs_ss_ix) { - UV popval = SSPOPUV; + UV popval = SSPOPUV; assert(popval == SAVEt_DESTRUCTOR_X); PL_savestack_ix -= 2; - popval = SSPOPUV; + popval = SSPOPUV; assert((popval & SAVE_MASK) == SAVEt_ALLOC); PL_savestack_ix -= popval >> SAVE_TIGHT_SHIFT; } if (bumped) { - if (SvREFCNT(sv) == 1) { - /* We hold the last reference to this SV, which implies that the - SV was deleted as a side effect of the routines we called. - So artificially keep it alive a bit longer. - We avoid turning on the TEMP flag, which can cause the SV's - buffer to get stolen (and maybe other stuff). */ - sv_2mortal(sv); - SvTEMP_off(sv); - } - else - SvREFCNT_dec_NN(sv); /* undo the inc in S_save_magic() */ + if (SvREFCNT(sv) == 1) { + /* We hold the last reference to this SV, which implies that the + SV was deleted as a side effect of the routines we called. + So artificially keep it alive a bit longer. + We avoid turning on the TEMP flag, which can cause the SV's + buffer to get stolen (and maybe other stuff). */ + sv_2mortal(sv); + SvTEMP_off(sv); + } + else + SvREFCNT_dec_NN(sv); /* undo the inc in S_save_magic() */ } } @@ -3642,6 +3746,7 @@ S_unwind_handler_stack(pTHX_ const void *p) } /* +=for apidoc_section $magic =for apidoc magic_sethint Triggered by a store to C<%^H>, records the key/value pair to @@ -3655,7 +3760,7 @@ int Perl_magic_sethint(pTHX_ SV *sv, MAGIC *mg) { SV *key = (mg->mg_len == HEf_SVKEY) ? MUTABLE_SV(mg->mg_ptr) - : newSVpvn_flags(mg->mg_ptr, mg->mg_len, SVs_TEMP); + : newSVpvn_flags(mg->mg_ptr, mg->mg_len, SVs_TEMP); PERL_ARGS_ASSERT_MAGIC_SETHINT; @@ -3669,7 +3774,7 @@ Perl_magic_sethint(pTHX_ SV *sv, MAGIC *mg) forgetting to do it, and consequent subtle errors. */ PL_hints |= HINT_LOCALIZE_HH; CopHINTHASH_set(&PL_compiling, - cophh_store_sv(CopHINTHASH_get(&PL_compiling), key, 0, sv, 0)); + cophh_store_sv(CopHINTHASH_get(&PL_compiling), key, 0, sv, 0)); magic_sethint_feature(key, NULL, 0, sv, 0); return 0; } @@ -3690,11 +3795,11 @@ Perl_magic_clearhint(pTHX_ SV *sv, MAGIC *mg) PL_hints |= HINT_LOCALIZE_HH; CopHINTHASH_set(&PL_compiling, - mg->mg_len == HEf_SVKEY - ? cophh_delete_sv(CopHINTHASH_get(&PL_compiling), - MUTABLE_SV(mg->mg_ptr), 0, 0) - : cophh_delete_pvn(CopHINTHASH_get(&PL_compiling), - mg->mg_ptr, mg->mg_len, 0, 0)); + mg->mg_len == HEf_SVKEY + ? cophh_delete_sv(CopHINTHASH_get(&PL_compiling), + MUTABLE_SV(mg->mg_ptr), 0, 0) + : cophh_delete_pvn(CopHINTHASH_get(&PL_compiling), + mg->mg_ptr, mg->mg_len, 0, 0)); if (mg->mg_len == HEf_SVKEY) magic_sethint_feature(MUTABLE_SV(mg->mg_ptr), NULL, 0, NULL, FALSE); else @@ -3723,7 +3828,7 @@ Perl_magic_clearhints(pTHX_ SV *sv, MAGIC *mg) int Perl_magic_copycallchecker(pTHX_ SV *sv, MAGIC *mg, SV *nsv, - const char *name, I32 namlen) + const char *name, I32 namlen) { MAGIC *nmg; diff --git a/gnu/usr.bin/perl/mg.h b/gnu/usr.bin/perl/mg.h index 034fd7eaf05..a25641d10c1 100644 --- a/gnu/usr.bin/perl/mg.h +++ b/gnu/usr.bin/perl/mg.h @@ -12,10 +12,10 @@ struct mgvtbl { int (*svt_get) (pTHX_ SV *sv, MAGIC* mg); int (*svt_set) (pTHX_ SV *sv, MAGIC* mg); U32 (*svt_len) (pTHX_ SV *sv, MAGIC* mg); - int (*svt_clear)(pTHX_ SV *sv, MAGIC* mg); + int (*svt_clear) (pTHX_ SV *sv, MAGIC* mg); int (*svt_free) (pTHX_ SV *sv, MAGIC* mg); int (*svt_copy) (pTHX_ SV *sv, MAGIC* mg, - SV *nsv, const char *name, I32 namlen); + SV *nsv, const char *name, I32 namlen); int (*svt_dup) (pTHX_ MAGIC *mg, CLONE_PARAMS *param); int (*svt_local)(pTHX_ SV *nsv, MAGIC *mg); }; @@ -46,15 +46,24 @@ struct magic { #define MgTAINTEDDIR_on(mg) (mg->mg_flags |= MGf_TAINTEDDIR) #define MgTAINTEDDIR_off(mg) (mg->mg_flags &= ~MGf_TAINTEDDIR) +/* Extracts the SV stored in mg, or NULL. */ +#define MgSV(mg) (((int)((mg)->mg_len) == HEf_SVKEY) ? \ + MUTABLE_SV((mg)->mg_ptr) : \ + NULL) + +/* If mg contains an SV, these extract the PV stored in that SV; + otherwise, these extract the mg's mg_ptr/mg_len. + These do NOT account for the SV's UTF8 flag, so handle with care. +*/ #define MgPV(mg,lp) ((((int)(lp = (mg)->mg_len)) == HEf_SVKEY) ? \ - SvPV(MUTABLE_SV((mg)->mg_ptr),lp) : \ - (mg)->mg_ptr) + SvPV(MUTABLE_SV((mg)->mg_ptr),lp) : \ + (mg)->mg_ptr) #define MgPV_const(mg,lp) ((((int)(lp = (mg)->mg_len)) == HEf_SVKEY) ? \ - SvPV_const(MUTABLE_SV((mg)->mg_ptr),lp) : \ - (const char*)(mg)->mg_ptr) + SvPV_const(MUTABLE_SV((mg)->mg_ptr),lp) : \ + (const char*)(mg)->mg_ptr) #define MgPV_nolen_const(mg) (((((int)(mg)->mg_len)) == HEf_SVKEY) ? \ - SvPV_nolen_const(MUTABLE_SV((mg)->mg_ptr)) : \ - (const char*)(mg)->mg_ptr) + SvPV_nolen_const(MUTABLE_SV((mg)->mg_ptr)) : \ + (const char*)(mg)->mg_ptr) #define SvTIED_mg(sv,how) (SvRMAGICAL(sv) ? mg_find((sv),(how)) : NULL) #define SvTIED_obj(sv,mg) \ @@ -66,11 +75,11 @@ struct magic { # define MgBYTEPOS_set(mg,sv,pv,off) ( \ assert_((mg)->mg_type == PERL_MAGIC_regex_global) \ SvPOK(sv) && (!SvGMAGICAL(sv) || sv_only_taint_gmagic(sv)) \ - ? (mg)->mg_len = (off), (mg)->mg_flags |= MGf_BYTES \ - : ((mg)->mg_len = DO_UTF8(sv) \ - ? (SSize_t)utf8_length((U8 *)(pv), (U8 *)(pv)+(off)) \ - : (SSize_t)(off), \ - (mg)->mg_flags &= ~MGf_BYTES)) + ? (mg)->mg_len = (off), (mg)->mg_flags |= MGf_BYTES \ + : ((mg)->mg_len = DO_UTF8(sv) \ + ? (SSize_t)utf8_length((U8 *)(pv), (U8 *)(pv)+(off)) \ + : (SSize_t)(off), \ + (mg)->mg_flags &= ~MGf_BYTES)) #endif #define whichsig(pv) whichsig_pv(pv) diff --git a/gnu/usr.bin/perl/mg_raw.h b/gnu/usr.bin/perl/mg_raw.h index 2f4863b08e9..c55e64372cc 100644 --- a/gnu/usr.bin/perl/mg_raw.h +++ b/gnu/usr.bin/perl/mg_raw.h @@ -62,7 +62,7 @@ "/* tiedscalar 'q' Tied scalar or handle */" }, { 'r', "want_vtbl_regexp | PERL_MAGIC_READONLY_ACCEPTABLE | PERL_MAGIC_VALUE_MAGIC", "/* qr 'r' Precompiled qr// regex */" }, - { 'S', "magic_vtable_max", + { 'S', "want_vtbl_sig", "/* sig 'S' %SIG hash */" }, { 's', "want_vtbl_sigelem", "/* sigelem 's' %SIG hash element */" }, diff --git a/gnu/usr.bin/perl/mg_vtable.h b/gnu/usr.bin/perl/mg_vtable.h index e4f3f3889dd..8f59573ca11 100644 --- a/gnu/usr.bin/perl/mg_vtable.h +++ b/gnu/usr.bin/perl/mg_vtable.h @@ -85,6 +85,7 @@ enum { /* pass one of these to get_vtbl */ want_vtbl_regdata, want_vtbl_regdatum, want_vtbl_regexp, + want_vtbl_sig, want_vtbl_sigelem, want_vtbl_substr, want_vtbl_sv, @@ -122,6 +123,7 @@ EXTCONST char * const PL_magic_vtable_names[magic_vtable_max] = { "regdata", "regdatum", "regexp", + "sig", "sigelem", "substr", "sv", @@ -158,7 +160,7 @@ EXT_MGVTBL PL_magic_vtables[magic_vtable_max] = { { 0, 0, 0, 0, Perl_magic_killbackrefs, 0, 0, 0 }, { 0, 0, 0, 0, 0, Perl_magic_copycallchecker, 0, 0 }, #ifdef USE_LOCALE_COLLATE - { 0, Perl_magic_setcollxfrm, 0, 0, 0, 0, 0, 0 }, + { 0, Perl_magic_setcollxfrm, 0, 0, Perl_magic_freecollxfrm, 0, 0, 0 }, #else { 0, 0, 0, 0, 0, 0, 0, 0 }, #endif @@ -172,7 +174,7 @@ EXT_MGVTBL PL_magic_vtables[magic_vtable_max] = { { 0, Perl_magic_setisa, 0, Perl_magic_clearisa, 0, 0, 0, 0 }, { 0, Perl_magic_setisa, 0, 0, 0, 0, 0, 0 }, { 0, Perl_magic_setlvref, 0, 0, 0, 0, 0, 0 }, - { 0, Perl_magic_setmglob, 0, 0, 0, 0, 0, 0 }, + { 0, Perl_magic_setmglob, 0, 0, Perl_magic_freemglob, 0, 0, 0 }, { Perl_magic_getnkeys, Perl_magic_setnkeys, 0, 0, 0, 0, 0, 0 }, { 0, Perl_magic_setnonelem, 0, 0, 0, 0, 0, 0 }, { 0, 0, 0, 0, Perl_magic_freeovrld, 0, 0, 0 }, @@ -182,6 +184,7 @@ EXT_MGVTBL PL_magic_vtables[magic_vtable_max] = { { 0, 0, Perl_magic_regdata_cnt, 0, 0, 0, 0, 0 }, { Perl_magic_regdatum_get, Perl_magic_regdatum_set, 0, 0, 0, 0, 0, 0 }, { 0, Perl_magic_setregexp, 0, 0, 0, 0, 0, 0 }, + { 0, Perl_magic_setsigall, 0, 0, 0, 0, 0, 0 }, #ifndef PERL_MICRO { Perl_magic_getsig, Perl_magic_setsig, 0, Perl_magic_clearsig, 0, 0, 0, 0 }, #else @@ -190,7 +193,7 @@ EXT_MGVTBL PL_magic_vtables[magic_vtable_max] = { { Perl_magic_getsubstr, Perl_magic_setsubstr, 0, 0, 0, 0, 0, 0 }, { Perl_magic_get, Perl_magic_set, 0, 0, 0, 0, 0, 0 }, { Perl_magic_gettaint, Perl_magic_settaint, 0, 0, 0, 0, 0, 0 }, - { 0, Perl_magic_setutf8, 0, 0, 0, 0, 0, 0 }, + { 0, Perl_magic_setutf8, 0, 0, Perl_magic_freeutf8, 0, 0, 0 }, { Perl_magic_getuvar, Perl_magic_setuvar, 0, 0, 0, 0, 0, 0 }, { Perl_magic_getvec, Perl_magic_setvec, 0, 0, 0, 0, 0, 0 } }; @@ -228,6 +231,7 @@ EXT_MGVTBL PL_magic_vtables[magic_vtable_max]; #define PL_vtbl_regdata PL_magic_vtables[want_vtbl_regdata] #define PL_vtbl_regdatum PL_magic_vtables[want_vtbl_regdatum] #define PL_vtbl_regexp PL_magic_vtables[want_vtbl_regexp] +#define PL_vtbl_sig PL_magic_vtables[want_vtbl_sig] #define PL_vtbl_sigelem PL_magic_vtables[want_vtbl_sigelem] #define PL_vtbl_substr PL_magic_vtables[want_vtbl_substr] #define PL_vtbl_sv PL_magic_vtables[want_vtbl_sv] diff --git a/gnu/usr.bin/perl/miniperlmain.c b/gnu/usr.bin/perl/miniperlmain.c index 0d32aeaf33f..4edd4d18523 100644 --- a/gnu/usr.bin/perl/miniperlmain.c +++ b/gnu/usr.bin/perl/miniperlmain.c @@ -60,15 +60,6 @@ static void xs_init (pTHX); static PerlInterpreter *my_perl; -#if defined(PERL_GLOBAL_STRUCT_PRIVATE) -/* The static struct perl_vars* may seem counterproductive since the - * whole idea PERL_GLOBAL_STRUCT_PRIVATE was to avoid statics, but note - * that this static is not in the shared perl library, the globals PL_Vars - * and PL_VarsPtr will stay away. */ -static struct perl_vars* my_plvarsp; -struct perl_vars* Perl_GetVarsPrivate(void) { return my_plvarsp; } -#endif - #ifdef NO_ENV_ARRAY_IN_MAIN extern char **environ; int @@ -79,14 +70,6 @@ main(int argc, char **argv, char **env) #endif { int exitstatus, i; -#ifdef PERL_GLOBAL_STRUCT - struct perl_vars *my_vars = init_global_struct(); -# ifdef PERL_GLOBAL_STRUCT_PRIVATE - int veto; - - my_plvarsp = my_vars; -# endif -#endif /* PERL_GLOBAL_STRUCT */ #ifndef NO_ENV_ARRAY_IN_MAIN PERL_UNUSED_ARG(env); #endif @@ -160,20 +143,6 @@ main(int argc, char **argv, char **env) PERL_SYS_TERM(); -#ifdef PERL_GLOBAL_STRUCT -# ifdef PERL_GLOBAL_STRUCT_PRIVATE - veto = my_plvarsp->Gveto_cleanup; -# endif - free_global_struct(my_vars); -# ifdef PERL_GLOBAL_STRUCT_PRIVATE - if (!veto) - my_plvarsp = NULL; - /* Remember, functions registered with atexit() can run after this point, - and may access "global" variables, and hence end up calling - Perl_GetVarsPrivate() */ -#endif -#endif /* PERL_GLOBAL_STRUCT */ - exit(exitstatus); } diff --git a/gnu/usr.bin/perl/mkppport b/gnu/usr.bin/perl/mkppport index b463aafd885..332327e5330 100755 --- a/gnu/usr.bin/perl/mkppport +++ b/gnu/usr.bin/perl/mkppport @@ -8,7 +8,6 @@ use File::Copy qw( copy ); use File::Basename qw( dirname ); use feature 'signatures'; -no warnings 'experimental::signatures'; my $rootdir = dirname($0); diff --git a/gnu/usr.bin/perl/mkppport.lst b/gnu/usr.bin/perl/mkppport.lst index 8af0f9b872c..d1c2a6b1fe6 100644 --- a/gnu/usr.bin/perl/mkppport.lst +++ b/gnu/usr.bin/perl/mkppport.lst @@ -8,5 +8,13 @@ cpan/DB_File cpan/IPC-SysV cpan/Win32API-File +dist/Data-Dumper +dist/Devel-PPPort +dist/ExtUtils-ParseXS dist/IO +dist/PathTools dist/Storable +dist/threads +dist/threads-shared +dist/Time-HiRes +dist/Unicode-Normalize diff --git a/gnu/usr.bin/perl/mro_core.c b/gnu/usr.bin/perl/mro_core.c index 1fc7c7ca9de..42a11af035f 100644 --- a/gnu/usr.bin/perl/mro_core.c +++ b/gnu/usr.bin/perl/mro_core.c @@ -19,7 +19,7 @@ */ /* -=head1 MRO Functions +=head1 MRO These functions are related to the method resolution order of perl classes Also see L. @@ -35,73 +35,82 @@ static const struct mro_alg dfs_alg = SV * Perl_mro_get_private_data(pTHX_ struct mro_meta *const smeta, - const struct mro_alg *const which) + const struct mro_alg *const which) { SV **data; PERL_ARGS_ASSERT_MRO_GET_PRIVATE_DATA; data = (SV **)Perl_hv_common(aTHX_ smeta->mro_linear_all, NULL, - which->name, which->length, which->kflags, - HV_FETCH_JUST_SV, NULL, which->hash); + which->name, which->length, which->kflags, + HV_FETCH_JUST_SV, NULL, which->hash); if (!data) - return NULL; + return NULL; /* If we've been asked to look up the private data for the current MRO, then cache it. */ if (smeta->mro_which == which) - smeta->mro_linear_current = *data; + smeta->mro_linear_current = *data; return *data; } SV * Perl_mro_set_private_data(pTHX_ struct mro_meta *const smeta, - const struct mro_alg *const which, SV *const data) + const struct mro_alg *const which, SV *const data) { PERL_ARGS_ASSERT_MRO_SET_PRIVATE_DATA; if (!smeta->mro_linear_all) { - if (smeta->mro_which == which) { - /* If all we need to store is the current MRO's data, then don't use - memory on a hash with 1 element - store it direct, and signal - this by leaving the would-be-hash NULL. */ - smeta->mro_linear_current = data; - return data; - } else { - HV *const hv = newHV(); - /* Start with 2 buckets. It's unlikely we'll need more. */ - HvMAX(hv) = 1; - smeta->mro_linear_all = hv; - - if (smeta->mro_linear_current) { - /* If we were storing something directly, put it in the hash - before we lose it. */ - Perl_mro_set_private_data(aTHX_ smeta, smeta->mro_which, - smeta->mro_linear_current); - } - } + if (smeta->mro_which == which) { + /* If all we need to store is the current MRO's data, then don't use + memory on a hash with 1 element - store it direct, and signal + this by leaving the would-be-hash NULL. */ + smeta->mro_linear_current = data; + return data; + } else { + HV *const hv = newHV(); + /* Start with 2 buckets. It's unlikely we'll need more. */ + HvMAX(hv) = 1; + smeta->mro_linear_all = hv; + + if (smeta->mro_linear_current) { + /* If we were storing something directly, put it in the hash + before we lose it. */ + Perl_mro_set_private_data(aTHX_ smeta, smeta->mro_which, + smeta->mro_linear_current); + } + } } /* We get here if we're storing more than one linearisation for this stash, or the linearisation we are storing is not that if its current MRO. */ if (smeta->mro_which == which) { - /* If we've been asked to store the private data for the current MRO, - then cache it. */ - smeta->mro_linear_current = data; + /* If we've been asked to store the private data for the current MRO, + then cache it. */ + smeta->mro_linear_current = data; } if (!Perl_hv_common(aTHX_ smeta->mro_linear_all, NULL, - which->name, which->length, which->kflags, - HV_FETCH_ISSTORE, data, which->hash)) { - Perl_croak(aTHX_ "panic: hv_store() failed in set_mro_private_data() " - "for '%.*s' %d", (int) which->length, which->name, - which->kflags); + which->name, which->length, which->kflags, + HV_FETCH_ISSTORE, data, which->hash)) { + Perl_croak(aTHX_ "panic: hv_store() failed in set_mro_private_data() " + "for '%.*s' %d", (int) which->length, which->name, + which->kflags); } return data; } +/* +=for apidoc mro_get_from_name + +Returns the previously registered mro with the given C, or NULL if not +registered. See L>. + +=cut +*/ + const struct mro_alg * Perl_mro_get_from_name(pTHX_ SV *name) { SV **data; @@ -109,9 +118,9 @@ Perl_mro_get_from_name(pTHX_ SV *name) { PERL_ARGS_ASSERT_MRO_GET_FROM_NAME; data = (SV **)Perl_hv_common(aTHX_ PL_registered_mros, name, NULL, 0, 0, - HV_FETCH_JUST_SV, NULL, 0); + HV_FETCH_JUST_SV, NULL, 0); if (!data) - return NULL; + return NULL; assert(SvTYPE(*data) == SVt_IV); assert(SvIOK(*data)); return INT2PTR(const struct mro_alg *, SvUVX(*data)); @@ -133,11 +142,11 @@ Perl_mro_register(pTHX_ const struct mro_alg *mro) { if (!Perl_hv_common(aTHX_ PL_registered_mros, NULL, - mro->name, mro->length, mro->kflags, - HV_FETCH_ISSTORE, wrapper, mro->hash)) { - SvREFCNT_dec_NN(wrapper); - Perl_croak(aTHX_ "panic: hv_store() failed in mro_register() " - "for '%.*s' %d", (int) mro->length, mro->name, mro->kflags); + mro->name, mro->length, mro->kflags, + HV_FETCH_ISSTORE, wrapper, mro->hash)) { + SvREFCNT_dec_NN(wrapper); + Perl_croak(aTHX_ "panic: hv_store() failed in mro_register() " + "for '%.*s' %d", (int) mro->length, mro->name, mro->kflags); } } @@ -173,23 +182,23 @@ Perl_mro_meta_dup(pTHX_ struct mro_meta* smeta, CLONE_PARAMS* param) Copy(smeta, newmeta, 1, struct mro_meta); if (newmeta->mro_linear_all) { - newmeta->mro_linear_all - = MUTABLE_HV(sv_dup_inc((const SV *)newmeta->mro_linear_all, param)); - /* This is just acting as a shortcut pointer, and will be automatically - updated on the first get. */ - newmeta->mro_linear_current = NULL; + newmeta->mro_linear_all + = MUTABLE_HV(sv_dup_inc((const SV *)newmeta->mro_linear_all, param)); + /* This is just acting as a shortcut pointer, and will be automatically + updated on the first get. */ + newmeta->mro_linear_current = NULL; } else if (newmeta->mro_linear_current) { - /* Only the current MRO is stored, so this owns the data. */ - newmeta->mro_linear_current - = sv_dup_inc((const SV *)newmeta->mro_linear_current, param); + /* Only the current MRO is stored, so this owns the data. */ + newmeta->mro_linear_current + = sv_dup_inc((const SV *)newmeta->mro_linear_current, param); } if (newmeta->mro_nextmethod) - newmeta->mro_nextmethod - = MUTABLE_HV(sv_dup_inc((const SV *)newmeta->mro_nextmethod, param)); + newmeta->mro_nextmethod + = MUTABLE_HV(sv_dup_inc((const SV *)newmeta->mro_nextmethod, param)); if (newmeta->isa) - newmeta->isa - = MUTABLE_HV(sv_dup_inc((const SV *)newmeta->isa, param)); + newmeta->isa + = MUTABLE_HV(sv_dup_inc((const SV *)newmeta->isa, param)); newmeta->super = NULL; @@ -243,8 +252,8 @@ S_mro_get_linear_isa_dfs(pTHX_ HV *stash, U32 level) if (level > 100) Perl_croak(aTHX_ - "Recursive inheritance detected in package '%" HEKf "'", - HEKfARG(stashhek)); + "Recursive inheritance detected in package '%" HEKf "'", + HEKfARG(stashhek)); meta = HvMROMETA(stash); @@ -255,7 +264,7 @@ S_mro_get_linear_isa_dfs(pTHX_ HV *stash, U32 level) /* not in cache, make a new one */ - retval = MUTABLE_AV(sv_2mortal(MUTABLE_SV(newAV()))); + retval = MUTABLE_AV(newSV_type_mortal(SVt_PVAV)); /* We use this later in this function, but don't need a reference to it beyond the end of this function, so reference count is fine. */ our_name = newSVhek(stashhek); @@ -280,85 +289,85 @@ S_mro_get_linear_isa_dfs(pTHX_ HV *stash, U32 level) while (items--) { SV* const sv = *svp ? *svp : &PL_sv_undef; HV* const basestash = gv_stashsv(sv, 0); - SV *const *subrv_p; - I32 subrv_items; - svp++; + SV *const *subrv_p; + I32 subrv_items; + svp++; if (!basestash) { /* if no stash exists for this @ISA member, simply add it to the MRO and move on */ - subrv_p = &sv; - subrv_items = 1; + subrv_p = &sv; + subrv_items = 1; } else { /* otherwise, recurse into ourselves for the MRO of this @ISA member, and append their MRO to ours. - The recursive call could throw an exception, which - has memory management implications here, hence the use of - the mortal. */ - const AV *const subrv - = mro_get_linear_isa_dfs(basestash, level + 1); - - subrv_p = AvARRAY(subrv); - subrv_items = AvFILLp(subrv) + 1; - } - if (stored) { - while(subrv_items--) { - SV *const subsv = *subrv_p++; - /* LVALUE fetch will create a new undefined SV if necessary - */ - HE *const he = hv_fetch_ent(stored, subsv, 1, 0); - assert(he); - if(HeVAL(he) != &PL_sv_undef) { - /* It was newly created. Steal it for our new SV, and - replace it in the hash with the "real" thing. */ - SV *const val = HeVAL(he); - HEK *const key = HeKEY_hek(he); - - HeVAL(he) = &PL_sv_undef; - sv_sethek(val, key); - av_push(retval, val); - } - } + The recursive call could throw an exception, which + has memory management implications here, hence the use of + the mortal. */ + const AV *const subrv + = mro_get_linear_isa_dfs(basestash, level + 1); + + subrv_p = AvARRAY(subrv); + subrv_items = AvFILLp(subrv) + 1; + } + if (stored) { + while(subrv_items--) { + SV *const subsv = *subrv_p++; + /* LVALUE fetch will create a new undefined SV if necessary + */ + HE *const he = hv_fetch_ent(stored, subsv, 1, 0); + assert(he); + if(HeVAL(he) != &PL_sv_undef) { + /* It was newly created. Steal it for our new SV, and + replace it in the hash with the "real" thing. */ + SV *const val = HeVAL(he); + HEK *const key = HeKEY_hek(he); + + HeVAL(he) = &PL_sv_undef; + sv_sethek(val, key); + av_push(retval, val); + } + } } else { - /* We are the first (or only) parent. We can short cut the - complexity above, because our @ISA is simply us prepended - to our parent's @ISA, and our ->isa cache is simply our - parent's, with our name added. */ - /* newSVsv() is slow. This code is only faster if we can avoid - it by ensuring that SVs in the arrays are shared hash key - scalar SVs, because we can "copy" them very efficiently. - Although to be fair, we can't *ensure* this, as a reference - to the internal array is returned by mro::get_linear_isa(), - so we'll have to be defensive just in case someone faffed - with it. */ - if (basestash) { - SV **svp; - stored = MUTABLE_HV(sv_2mortal((SV*)newHVhv(HvMROMETA(basestash)->isa))); - av_extend(retval, subrv_items); - AvFILLp(retval) = subrv_items; - svp = AvARRAY(retval); - while(subrv_items--) { - SV *const val = *subrv_p++; - *++svp = SvIsCOW_shared_hash(val) - ? newSVhek(SvSHARED_HEK_FROM_PV(SvPVX(val))) - : newSVsv(val); - } - } else { - /* They have no stash. So create ourselves an ->isa cache - as if we'd copied it from what theirs should be. */ - stored = MUTABLE_HV(sv_2mortal(MUTABLE_SV(newHV()))); - (void) hv_stores(stored, "UNIVERSAL", &PL_sv_undef); - av_push(retval, - newSVhek(HeKEY_hek(hv_store_ent(stored, sv, - &PL_sv_undef, 0)))); - } - } + /* We are the first (or only) parent. We can short cut the + complexity above, because our @ISA is simply us prepended + to our parent's @ISA, and our ->isa cache is simply our + parent's, with our name added. */ + /* newSVsv() is slow. This code is only faster if we can avoid + it by ensuring that SVs in the arrays are shared hash key + scalar SVs, because we can "copy" them very efficiently. + Although to be fair, we can't *ensure* this, as a reference + to the internal array is returned by mro::get_linear_isa(), + so we'll have to be defensive just in case someone faffed + with it. */ + if (basestash) { + SV **svp; + stored = MUTABLE_HV(sv_2mortal((SV*)newHVhv(HvMROMETA(basestash)->isa))); + av_extend(retval, subrv_items); + AvFILLp(retval) = subrv_items; + svp = AvARRAY(retval); + while(subrv_items--) { + SV *const val = *subrv_p++; + *++svp = SvIsCOW_shared_hash(val) + ? newSVhek(SvSHARED_HEK_FROM_PV(SvPVX(val))) + : newSVsv(val); + } + } else { + /* They have no stash. So create ourselves an ->isa cache + as if we'd copied it from what theirs should be. */ + stored = MUTABLE_HV(newSV_type_mortal(SVt_PVHV)); + (void) hv_stores(stored, "UNIVERSAL", &PL_sv_undef); + av_push(retval, + newSVhek(HeKEY_hek(hv_store_ent(stored, sv, + &PL_sv_undef, 0)))); + } + } } } else { - /* We have no parents. */ - stored = MUTABLE_HV(sv_2mortal(MUTABLE_SV(newHV()))); - (void) hv_stores(stored, "UNIVERSAL", &PL_sv_undef); + /* We have no parents. */ + stored = MUTABLE_HV(newSV_type_mortal(SVt_PVHV)); + (void) hv_stores(stored, "UNIVERSAL", &PL_sv_undef); } (void) hv_store_ent(stored, our_name, &PL_sv_undef, 0); @@ -380,7 +389,7 @@ S_mro_get_linear_isa_dfs(pTHX_ HV *stash, U32 level) SvREADONLY_on(retval); return MUTABLE_AV(Perl_mro_set_private_data(aTHX_ meta, &dfs_alg, - MUTABLE_SV(retval))); + MUTABLE_SV(retval))); } /* @@ -415,49 +424,54 @@ Perl_mro_get_linear_isa(pTHX_ HV *stash) isa = meta->mro_which->resolve(aTHX_ stash, 0); if (meta->mro_which != &dfs_alg) { /* skip for dfs, for speed */ - SV * const namesv = - (HvENAME(stash)||HvNAME(stash)) - ? newSVhek(HvENAME_HEK(stash) - ? HvENAME_HEK(stash) - : HvNAME_HEK(stash)) - : NULL; - - if(namesv && (AvFILLp(isa) == -1 || !sv_eq(*AvARRAY(isa), namesv))) - { - AV * const old = isa; - SV **svp; - SV **ovp = AvARRAY(old); - SV * const * const oend = ovp + AvFILLp(old) + 1; - isa = (AV *)sv_2mortal((SV *)newAV()); - av_extend(isa, AvFILLp(isa) = AvFILLp(old)+1); - *AvARRAY(isa) = namesv; - svp = AvARRAY(isa)+1; - while (ovp < oend) *svp++ = SvREFCNT_inc(*ovp++); - } - else SvREFCNT_dec(namesv); + SV * const namesv = + (HvENAME(stash)||HvNAME(stash)) + ? newSVhek(HvENAME_HEK(stash) + ? HvENAME_HEK(stash) + : HvNAME_HEK(stash)) + : NULL; + + if(namesv && (AvFILLp(isa) == -1 || !sv_eq(*AvARRAY(isa), namesv))) + { + AV * const old = isa; + SV **svp; + SV **ovp = AvARRAY(old); + SV * const * const oend = ovp + AvFILLp(old) + 1; + isa = (AV *)newSV_type_mortal(SVt_PVAV); + av_extend(isa, AvFILLp(isa) = AvFILLp(old)+1); + *AvARRAY(isa) = namesv; + svp = AvARRAY(isa)+1; + while (ovp < oend) *svp++ = SvREFCNT_inc(*ovp++); + } + else SvREFCNT_dec(namesv); } if (!meta->isa) { - HV *const isa_hash = newHV(); - /* Linearisation didn't build it for us, so do it here. */ - SV *const *svp = AvARRAY(isa); - SV *const *const svp_end = svp + AvFILLp(isa) + 1; - const HEK *canon_name = HvENAME_HEK(stash); - if (!canon_name) canon_name = HvNAME_HEK(stash); - - while (svp < svp_end) { - (void) hv_store_ent(isa_hash, *svp++, &PL_sv_undef, 0); - } - - (void) hv_common(isa_hash, NULL, HEK_KEY(canon_name), - HEK_LEN(canon_name), HEK_FLAGS(canon_name), - HV_FETCH_ISSTORE, &PL_sv_undef, - HEK_HASH(canon_name)); - (void) hv_stores(isa_hash, "UNIVERSAL", &PL_sv_undef); - - SvREADONLY_on(isa_hash); - - meta->isa = isa_hash; + HV *const isa_hash = newHV(); + /* Linearisation didn't build it for us, so do it here. */ + I32 count = AvFILLp(isa) + 1; + SV *const *svp = AvARRAY(isa); + SV *const *const svp_end = svp + count; + const HEK *canon_name = HvENAME_HEK(stash); + if (!canon_name) canon_name = HvNAME_HEK(stash); + + if (count > PERL_HASH_DEFAULT_HvMAX) { + hv_ksplit(isa_hash, count); + } + + while (svp < svp_end) { + (void) hv_store_ent(isa_hash, *svp++, &PL_sv_undef, 0); + } + + (void) hv_common(isa_hash, NULL, HEK_KEY(canon_name), + HEK_LEN(canon_name), HEK_FLAGS(canon_name), + HV_FETCH_ISSTORE, &PL_sv_undef, + HEK_HASH(canon_name)); + (void) hv_stores(isa_hash, "UNIVERSAL", &PL_sv_undef); + + SvREADONLY_on(isa_hash); + + meta->isa = isa_hash; } return isa; @@ -476,14 +490,14 @@ by the C magic, should not need to invoke directly. /* Macro to avoid repeating the code five times. */ #define CLEAR_LINEAR(mEta) \ if (mEta->mro_linear_all) { \ - SvREFCNT_dec(MUTABLE_SV(mEta->mro_linear_all)); \ - mEta->mro_linear_all = NULL; \ - /* This is just acting as a shortcut pointer. */ \ - mEta->mro_linear_current = NULL; \ + SvREFCNT_dec(MUTABLE_SV(mEta->mro_linear_all)); \ + mEta->mro_linear_all = NULL; \ + /* This is just acting as a shortcut pointer. */ \ + mEta->mro_linear_current = NULL; \ } else if (mEta->mro_linear_current) { \ - /* Only the current MRO is stored, so this owns the data. */ \ - SvREFCNT_dec(mEta->mro_linear_current); \ - mEta->mro_linear_current = NULL; \ + /* Only the current MRO is stored, so this owns the data. */ \ + SvREFCNT_dec(mEta->mro_linear_current); \ + mEta->mro_linear_current = NULL; \ } void @@ -512,9 +526,9 @@ Perl_mro_isa_changed_in(pTHX_ HV* stash) meta = HvMROMETA(stash); CLEAR_LINEAR(meta); if (meta->isa) { - /* Steal it for our own purposes. */ - isa = (HV *)sv_2mortal((SV *)meta->isa); - meta->isa = NULL; + /* Steal it for our own purposes. */ + isa = (HV *)sv_2mortal((SV *)meta->isa); + meta->isa = NULL; } /* Inc the package generation, since our @ISA changed */ @@ -533,7 +547,7 @@ Perl_mro_isa_changed_in(pTHX_ HV* stash) } else { /* Wipe the local method cache otherwise */ meta->cache_gen++; - is_universal = FALSE; + is_universal = FALSE; } /* wipe next::method cache too */ @@ -565,7 +579,7 @@ Perl_mro_isa_changed_in(pTHX_ HV* stash) if(hv_iterinit(isarev)) { /* Only create the hash if we need it; i.e., if isarev has any elements. */ - isa_hashes = (HV *)sv_2mortal((SV *)newHV()); + isa_hashes = (HV *)newSV_type_mortal(SVt_PVHV); } while((iter = hv_iternext(isarev))) { HV* revstash = gv_stashsv(hv_iterkeysv(iter), 0); @@ -573,19 +587,19 @@ Perl_mro_isa_changed_in(pTHX_ HV* stash) if(!revstash) continue; revmeta = HvMROMETA(revstash); - CLEAR_LINEAR(revmeta); + CLEAR_LINEAR(revmeta); if(!is_universal) revmeta->cache_gen++; if(revmeta->mro_nextmethod) hv_clear(revmeta->mro_nextmethod); - if (!SvOBJECT(revstash)) SvSTASH(revstash) = NULL; - - (void) - hv_store( - isa_hashes, (const char*)&revstash, sizeof(HV *), - revmeta->isa ? (SV *)revmeta->isa : &PL_sv_undef, 0 - ); - revmeta->isa = NULL; + if (!SvOBJECT(revstash)) SvSTASH(revstash) = NULL; + + (void) + hv_store( + isa_hashes, (const char*)&revstash, sizeof(HV *), + revmeta->isa ? (SV *)revmeta->isa : &PL_sv_undef, 0 + ); + revmeta->isa = NULL; } /* Second pass: Update PL_isarev. We can just use isa_hashes to @@ -634,7 +648,7 @@ Perl_mro_isa_changed_in(pTHX_ HV* stash) hv_storehek(mroisarev, namehek, &PL_sv_yes); } - if ((SV *)isa != &PL_sv_undef) { + if ((SV *)isa != &PL_sv_undef && HvTOTALKEYS(isa)) { assert(namehek); mro_clean_isarev( isa, HEK_KEY(namehek), HEK_LEN(namehek), @@ -661,29 +675,30 @@ Perl_mro_isa_changed_in(pTHX_ HV* stash) HE *he = hv_fetch_ent(PL_isarev, sv, TRUE, 0); - /* That fetch should not fail. But if it had to create a new SV for - us, then will need to upgrade it to an HV (which sv_upgrade() can - now do for us. */ + /* That fetch should not fail. But if it had to create a new SV for + us, then will need to upgrade it to an HV (which sv_upgrade() can + now do for us. */ mroisarev = MUTABLE_HV(HeVAL(he)); - SvUPGRADE(MUTABLE_SV(mroisarev), SVt_PVHV); + SvUPGRADE(MUTABLE_SV(mroisarev), SVt_PVHV); - /* This hash only ever contains PL_sv_yes. Storing it over itself is - almost as cheap as calling hv_exists, so on aggregate we expect to - save time by not making two calls to the common HV code for the - case where it doesn't exist. */ + /* This hash only ever contains PL_sv_yes. Storing it over itself is + almost as cheap as calling hv_exists, so on aggregate we expect to + save time by not making two calls to the common HV code for the + case where it doesn't exist. */ - (void)hv_storehek(mroisarev, stashhek, &PL_sv_yes); + (void)hv_storehek(mroisarev, stashhek, &PL_sv_yes); } /* Delete our name from our former parents' isarevs. */ - if(isa && HvARRAY(isa)) + if(isa && HvTOTALKEYS(isa)) mro_clean_isarev(isa, stashname, stashname_len, meta->isa, HEK_HASH(stashhek), HEK_UTF8(stashhek)); } -/* Deletes name from all the isarev entries listed in isa */ +/* Deletes name from all the isarev entries listed in isa. + Don't call this if isa is already empty. */ STATIC void S_mro_clean_isarev(pTHX_ HV * const isa, const char * const name, const STRLEN len, HV * const exceptions, U32 hash, @@ -693,23 +708,22 @@ S_mro_clean_isarev(pTHX_ HV * const isa, const char * const name, PERL_ARGS_ASSERT_MRO_CLEAN_ISAREV; + assert(HvTOTALKEYS(isa)); /* Delete our name from our former parents' isarevs. */ - if(HvARRAY(isa) && hv_iterinit(isa)) { + + hv_iterinit(isa); + while((iter = hv_iternext(isa))) { SV **svp; - while((iter = hv_iternext(isa))) { - I32 klen; - const char * const key = hv_iterkey(iter, &klen); - if(exceptions && hv_exists(exceptions, key, HeKUTF8(iter) ? -klen : klen)) - continue; - svp = hv_fetch(PL_isarev, key, HeKUTF8(iter) ? -klen : klen, 0); - if(svp) { - HV * const isarev = (HV *)*svp; - (void)hv_common(isarev, NULL, name, len, flags, - G_DISCARD|HV_DELETE, NULL, hash); - if(!HvARRAY(isarev) || !HvUSEDKEYS(isarev)) - (void)hv_delete(PL_isarev, key, - HeKUTF8(iter) ? -klen : klen, G_DISCARD); - } + HEK *key = HeKEY_hek(iter); + if(exceptions && hv_existshek(exceptions, key)) + continue; + svp = hv_fetchhek(PL_isarev, key, 0); + if(svp) { + HV * const isarev = (HV *)*svp; + (void)hv_common(isarev, NULL, name, len, flags, + G_DISCARD|HV_DELETE, NULL, hash); + if(!HvTOTALKEYS(isarev)) + (void)hv_deletehek(PL_isarev, key, G_DISCARD); } } } @@ -771,12 +785,12 @@ Perl_mro_package_moved(pTHX_ HV * const stash, HV * const oldstash, * If flags & 1, the caller has asked us to skip the check. */ if(!(flags & 1)) { - SV **svp; - if( - !GvSTASH(gv) || !HvENAME(GvSTASH(gv)) || - !(svp = hv_fetchhek(GvSTASH(gv), GvNAME_HEK(gv), 0)) || - *svp != (SV *)gv - ) return; + SV **svp; + if( + !GvSTASH(gv) || !HvENAME(GvSTASH(gv)) || + !(svp = hv_fetchhek(GvSTASH(gv), GvNAME_HEK(gv), 0)) || + *svp != (SV *)gv + ) return; } assert(SvOOK(GvSTASH(gv))); assert(GvNAMELEN(gv)); @@ -784,56 +798,56 @@ Perl_mro_package_moved(pTHX_ HV * const stash, HV * const oldstash, assert(GvNAMELEN(gv) == 1 || GvNAME(gv)[GvNAMELEN(gv) - 2] == ':'); name_count = HvAUX(GvSTASH(gv))->xhv_name_count; if (!name_count) { - name_count = 1; - namep = &HvAUX(GvSTASH(gv))->xhv_name_u.xhvnameu_name; + name_count = 1; + namep = &HvAUX(GvSTASH(gv))->xhv_name_u.xhvnameu_name; } else { - namep = HvAUX(GvSTASH(gv))->xhv_name_u.xhvnameu_names; - if (name_count < 0) ++namep, name_count = -name_count - 1; + namep = HvAUX(GvSTASH(gv))->xhv_name_u.xhvnameu_names; + if (name_count < 0) ++namep, name_count = -name_count - 1; } if (name_count == 1) { - if (memEQs(HEK_KEY(*namep), HEK_LEN(*namep), "main")) { - namesv = GvNAMELEN(gv) == 1 - ? newSVpvs_flags(":", SVs_TEMP) - : newSVpvs_flags("", SVs_TEMP); - } - else { - namesv = sv_2mortal(newSVhek(*namep)); - if (GvNAMELEN(gv) == 1) sv_catpvs(namesv, ":"); - else sv_catpvs(namesv, "::"); - } - if (GvNAMELEN(gv) != 1) { - sv_catpvn_flags( - namesv, GvNAME(gv), GvNAMELEN(gv) - 2, - /* skip trailing :: */ - GvNAMEUTF8(gv) ? SV_CATUTF8 : SV_CATBYTES - ); + if (memEQs(HEK_KEY(*namep), HEK_LEN(*namep), "main")) { + namesv = GvNAMELEN(gv) == 1 + ? newSVpvs_flags(":", SVs_TEMP) + : newSVpvs_flags("", SVs_TEMP); + } + else { + namesv = sv_2mortal(newSVhek(*namep)); + if (GvNAMELEN(gv) == 1) sv_catpvs(namesv, ":"); + else sv_catpvs(namesv, "::"); + } + if (GvNAMELEN(gv) != 1) { + sv_catpvn_flags( + namesv, GvNAME(gv), GvNAMELEN(gv) - 2, + /* skip trailing :: */ + GvNAMEUTF8(gv) ? SV_CATUTF8 : SV_CATBYTES + ); } } else { - SV *aname; - namesv = sv_2mortal((SV *)newAV()); - while (name_count--) { - if(memEQs(HEK_KEY(*namep), HEK_LEN(*namep), "main")){ - aname = GvNAMELEN(gv) == 1 - ? newSVpvs(":") - : newSVpvs(""); - namep++; - } - else { - aname = newSVhek(*namep++); - if (GvNAMELEN(gv) == 1) sv_catpvs(aname, ":"); - else sv_catpvs(aname, "::"); - } - if (GvNAMELEN(gv) != 1) { - sv_catpvn_flags( - aname, GvNAME(gv), GvNAMELEN(gv) - 2, - /* skip trailing :: */ - GvNAMEUTF8(gv) ? SV_CATUTF8 : SV_CATBYTES - ); + SV *aname; + namesv = newSV_type_mortal(SVt_PVAV); + while (name_count--) { + if(memEQs(HEK_KEY(*namep), HEK_LEN(*namep), "main")){ + aname = GvNAMELEN(gv) == 1 + ? newSVpvs(":") + : newSVpvs(""); + namep++; + } + else { + aname = newSVhek(*namep++); + if (GvNAMELEN(gv) == 1) sv_catpvs(aname, ":"); + else sv_catpvs(aname, "::"); + } + if (GvNAMELEN(gv) != 1) { + sv_catpvn_flags( + aname, GvNAME(gv), GvNAMELEN(gv) - 2, + /* skip trailing :: */ + GvNAMEUTF8(gv) ? SV_CATUTF8 : SV_CATBYTES + ); } - av_push((AV *)namesv, aname); - } + av_push((AV *)namesv, aname); + } } /* Get a list of all the affected classes. */ @@ -849,9 +863,9 @@ Perl_mro_package_moved(pTHX_ HV * const stash, HV * const oldstash, wrong name. The names must be set on *all* affected stashes before we do anything else. (And linearisations must be cleared, too.) */ - stashes = (HV *) sv_2mortal((SV *)newHV()); + stashes = (HV *) newSV_type_mortal(SVt_PVHV); mro_gather_and_rename( - stashes, (HV *) sv_2mortal((SV *)newHV()), + stashes, (HV *) newSV_type_mortal(SVt_PVHV), stash, oldstash, namesv ); @@ -859,25 +873,25 @@ Perl_mro_package_moved(pTHX_ HV * const stash, HV * const oldstash, mro_isa_changed_in on each. */ hv_iterinit(stashes); while((iter = hv_iternext(stashes))) { - HV * const this_stash = *(HV **)HEK_KEY(HeKEY_hek(iter)); - if(HvENAME(this_stash)) { - /* We have to restore the original meta->isa (that - mro_gather_and_rename set aside for us) this way, in case - one class in this list is a superclass of a another class - that we have already encountered. In such a case, meta->isa - will have been overwritten without old entries being deleted - from PL_isarev. */ - struct mro_meta * const meta = HvMROMETA(this_stash); - if(meta->isa != (HV *)HeVAL(iter)){ - SvREFCNT_dec(meta->isa); - meta->isa - = HeVAL(iter) == &PL_sv_yes - ? NULL - : (HV *)HeVAL(iter); - HeVAL(iter) = NULL; /* We donated our reference count. */ - } - mro_isa_changed_in(this_stash); - } + HV * const this_stash = *(HV **)HEK_KEY(HeKEY_hek(iter)); + if(HvENAME(this_stash)) { + /* We have to restore the original meta->isa (that + mro_gather_and_rename set aside for us) this way, in case + one class in this list is a superclass of a another class + that we have already encountered. In such a case, meta->isa + will have been overwritten without old entries being deleted + from PL_isarev. */ + struct mro_meta * const meta = HvMROMETA(this_stash); + if(meta->isa != (HV *)HeVAL(iter)){ + SvREFCNT_dec(meta->isa); + meta->isa + = HeVAL(iter) == &PL_sv_yes + ? NULL + : (HV *)HeVAL(iter); + HeVAL(iter) = NULL; /* We donated our reference count. */ + } + mro_isa_changed_in(this_stash); + } } } @@ -915,196 +929,196 @@ S_mro_gather_and_rename(pTHX_ HV * const stashes, HV * const seen_stashes, */ if(oldstash) { - /* Add to the big list. */ - struct mro_meta * meta; - HE * const entry - = (HE *) - hv_common( - seen_stashes, NULL, (const char *)&oldstash, sizeof(HV *), 0, - HV_FETCH_LVALUE|HV_FETCH_EMPTY_HE, NULL, 0 - ); - if(HeVAL(entry) == &PL_sv_undef || HeVAL(entry) == &PL_sv_yes) { - oldstash = NULL; - goto check_stash; - } - HeVAL(entry) - = HeVAL(entry) == &PL_sv_no ? &PL_sv_yes : &PL_sv_undef; - meta = HvMROMETA(oldstash); - (void) - hv_store( - stashes, (const char *)&oldstash, sizeof(HV *), - meta->isa - ? SvREFCNT_inc_simple_NN((SV *)meta->isa) - : &PL_sv_yes, - 0 - ); - CLEAR_LINEAR(meta); - - /* Update the effective name. */ - if(HvENAME_get(oldstash)) { - const HEK * const enamehek = HvENAME_HEK(oldstash); - if(SvTYPE(namesv) == SVt_PVAV) { - items = AvFILLp((AV *)namesv) + 1; - svp = AvARRAY((AV *)namesv); - } - else { - items = 1; - svp = &namesv; - } - while (items--) { + /* Add to the big list. */ + struct mro_meta * meta; + HE * const entry + = (HE *) + hv_common( + seen_stashes, NULL, (const char *)&oldstash, sizeof(HV *), 0, + HV_FETCH_LVALUE|HV_FETCH_EMPTY_HE, NULL, 0 + ); + if(HeVAL(entry) == &PL_sv_undef || HeVAL(entry) == &PL_sv_yes) { + oldstash = NULL; + goto check_stash; + } + HeVAL(entry) + = HeVAL(entry) == &PL_sv_no ? &PL_sv_yes : &PL_sv_undef; + meta = HvMROMETA(oldstash); + (void) + hv_store( + stashes, (const char *)&oldstash, sizeof(HV *), + meta->isa + ? SvREFCNT_inc_simple_NN((SV *)meta->isa) + : &PL_sv_yes, + 0 + ); + CLEAR_LINEAR(meta); + + /* Update the effective name. */ + if(HvENAME_get(oldstash)) { + const HEK * const enamehek = HvENAME_HEK(oldstash); + if(SvTYPE(namesv) == SVt_PVAV) { + items = AvFILLp((AV *)namesv) + 1; + svp = AvARRAY((AV *)namesv); + } + else { + items = 1; + svp = &namesv; + } + while (items--) { const U32 name_utf8 = SvUTF8(*svp); - STRLEN len; - const char *name = SvPVx_const(*svp, len); - if(PL_stashcache) { + STRLEN len; + const char *name = SvPVx_const(*svp, len); + if(PL_stashcache) { DEBUG_o(Perl_deb(aTHX_ "mro_gather_and_rename clearing PL_stashcache for '%" SVf "'\n", SVfARG(*svp))); - (void)hv_delete(PL_stashcache, name, name_utf8 ? -(I32)len : (I32)len, G_DISCARD); + (void)hv_delete_ent(PL_stashcache, *svp, G_DISCARD, 0); } + hv_ename_delete(oldstash, name, len, name_utf8); + + if (!fetched_isarev) { + /* If the name deletion caused a name change, then we + * are not going to call mro_isa_changed_in with this + * name (and not at all if it has become anonymous) so + * we need to delete old isarev entries here, both + * those in the superclasses and this class's own list + * of subclasses. We simply delete the latter from + * PL_isarev, since we still need it. hv_delete morti- + * fies it for us, so sv_2mortal is not necessary. */ + if(HvENAME_HEK(oldstash) != enamehek) { + if(meta->isa && HvTOTALKEYS(meta->isa)) + mro_clean_isarev(meta->isa, name, len, 0, 0, + name_utf8 ? HVhek_UTF8 : 0); + isarev = (HV *)hv_delete_ent(PL_isarev, *svp, 0, 0); + fetched_isarev=TRUE; + } + } + ++svp; - hv_ename_delete(oldstash, name, len, name_utf8); - - if (!fetched_isarev) { - /* If the name deletion caused a name change, then we - * are not going to call mro_isa_changed_in with this - * name (and not at all if it has become anonymous) so - * we need to delete old isarev entries here, both - * those in the superclasses and this class's own list - * of subclasses. We simply delete the latter from - * PL_isarev, since we still need it. hv_delete morti- - * fies it for us, so sv_2mortal is not necessary. */ - if(HvENAME_HEK(oldstash) != enamehek) { - if(meta->isa && HvARRAY(meta->isa)) - mro_clean_isarev(meta->isa, name, len, 0, 0, - name_utf8 ? HVhek_UTF8 : 0); - isarev = (HV *)hv_delete(PL_isarev, name, - name_utf8 ? -(I32)len : (I32)len, 0); - fetched_isarev=TRUE; - } - } - } - } + } + } } check_stash: if(stash) { - if(SvTYPE(namesv) == SVt_PVAV) { - items = AvFILLp((AV *)namesv) + 1; - svp = AvARRAY((AV *)namesv); - } - else { - items = 1; - svp = &namesv; - } - while (items--) { + if(SvTYPE(namesv) == SVt_PVAV) { + items = AvFILLp((AV *)namesv) + 1; + svp = AvARRAY((AV *)namesv); + } + else { + items = 1; + svp = &namesv; + } + while (items--) { const U32 name_utf8 = SvUTF8(*svp); - STRLEN len; - const char *name = SvPVx_const(*svp++, len); - hv_ename_add(stash, name, len, name_utf8); - } + STRLEN len; + const char *name = SvPVx_const(*svp++, len); + hv_ename_add(stash, name, len, name_utf8); + } /* Add it to the big list if it needs - * mro_isa_changed_in called on it. That happens if it was - * detached from the symbol table (so it had no HvENAME) before - * being assigned to the spot named by the 'name' variable, because - * its cached isa linearisation is now stale (the effective name - * having changed), and subclasses will then use that cache when - * mro_package_moved calls mro_isa_changed_in. (See - * [perl #77358].) - * - * If it did have a name, then its previous name is still - * used in isa caches, and there is no need for - * mro_package_moved to call mro_isa_changed_in. - */ - - entry - = (HE *) - hv_common( - seen_stashes, NULL, (const char *)&stash, sizeof(HV *), 0, - HV_FETCH_LVALUE|HV_FETCH_EMPTY_HE, NULL, 0 - ); - if(HeVAL(entry) == &PL_sv_yes || HeVAL(entry) == &PL_sv_no) - stash = NULL; - else { - HeVAL(entry) - = HeVAL(entry) == &PL_sv_undef ? &PL_sv_yes : &PL_sv_no; - if(!stash_had_name) - { - struct mro_meta * const meta = HvMROMETA(stash); - (void) - hv_store( - stashes, (const char *)&stash, sizeof(HV *), - meta->isa - ? SvREFCNT_inc_simple_NN((SV *)meta->isa) - : &PL_sv_yes, - 0 - ); - CLEAR_LINEAR(meta); - } - } + * mro_isa_changed_in called on it. That happens if it was + * detached from the symbol table (so it had no HvENAME) before + * being assigned to the spot named by the 'name' variable, because + * its cached isa linearisation is now stale (the effective name + * having changed), and subclasses will then use that cache when + * mro_package_moved calls mro_isa_changed_in. (See + * [perl #77358].) + * + * If it did have a name, then its previous name is still + * used in isa caches, and there is no need for + * mro_package_moved to call mro_isa_changed_in. + */ + + entry + = (HE *) + hv_common( + seen_stashes, NULL, (const char *)&stash, sizeof(HV *), 0, + HV_FETCH_LVALUE|HV_FETCH_EMPTY_HE, NULL, 0 + ); + if(HeVAL(entry) == &PL_sv_yes || HeVAL(entry) == &PL_sv_no) + stash = NULL; + else { + HeVAL(entry) + = HeVAL(entry) == &PL_sv_undef ? &PL_sv_yes : &PL_sv_no; + if(!stash_had_name) + { + struct mro_meta * const meta = HvMROMETA(stash); + (void) + hv_store( + stashes, (const char *)&stash, sizeof(HV *), + meta->isa + ? SvREFCNT_inc_simple_NN((SV *)meta->isa) + : &PL_sv_yes, + 0 + ); + CLEAR_LINEAR(meta); + } + } } if(!stash && !oldstash) - /* Both stashes have been encountered already. */ - return; + /* Both stashes have been encountered already. */ + return; /* Add all the subclasses to the big list. */ if(!fetched_isarev) { - /* If oldstash is not null, then we can use its HvENAME to look up - the isarev hash, since all its subclasses will be listed there. - It will always have an HvENAME. It the HvENAME was removed - above, then fetch_isarev will be true, and this code will not be - reached. - - If oldstash is null, then this is an empty spot with no stash in - it, so subclasses could be listed in isarev hashes belonging to - any of the names, so we have to check all of them. - */ - assert(!oldstash || HvENAME(oldstash)); - if (oldstash) { - /* Extra variable to avoid a compiler warning */ - const HEK * const hvename = HvENAME_HEK(oldstash); - fetched_isarev = TRUE; - svp = hv_fetchhek(PL_isarev, hvename, 0); - if (svp) isarev = MUTABLE_HV(*svp); - } - else if(SvTYPE(namesv) == SVt_PVAV) { - items = AvFILLp((AV *)namesv) + 1; - svp = AvARRAY((AV *)namesv); - } - else { - items = 1; - svp = &namesv; - } + /* If oldstash is not null, then we can use its HvENAME to look up + the isarev hash, since all its subclasses will be listed there. + It will always have an HvENAME. It the HvENAME was removed + above, then fetch_isarev will be true, and this code will not be + reached. + + If oldstash is null, then this is an empty spot with no stash in + it, so subclasses could be listed in isarev hashes belonging to + any of the names, so we have to check all of them. + */ + assert(!oldstash || HvENAME(oldstash)); + if (oldstash) { + /* Extra variable to avoid a compiler warning */ + const HEK * const hvename = HvENAME_HEK(oldstash); + fetched_isarev = TRUE; + svp = hv_fetchhek(PL_isarev, hvename, 0); + if (svp) isarev = MUTABLE_HV(*svp); + } + else if(SvTYPE(namesv) == SVt_PVAV) { + items = AvFILLp((AV *)namesv) + 1; + svp = AvARRAY((AV *)namesv); + } + else { + items = 1; + svp = &namesv; + } } if( isarev || !fetched_isarev ) { while (fetched_isarev || items--) { - HE *iter; - - if (!fetched_isarev) { - HE * const he = hv_fetch_ent(PL_isarev, *svp++, 0, 0); - if (!he || !(isarev = MUTABLE_HV(HeVAL(he)))) continue; - } - - hv_iterinit(isarev); - while((iter = hv_iternext(isarev))) { - HV* revstash = gv_stashsv(hv_iterkeysv(iter), 0); - struct mro_meta * meta; - - if(!revstash) continue; - meta = HvMROMETA(revstash); - (void) - hv_store( - stashes, (const char *)&revstash, sizeof(HV *), - meta->isa - ? SvREFCNT_inc_simple_NN((SV *)meta->isa) - : &PL_sv_yes, - 0 - ); - CLEAR_LINEAR(meta); + HE *iter; + + if (!fetched_isarev) { + HE * const he = hv_fetch_ent(PL_isarev, *svp++, 0, 0); + if (!he || !(isarev = MUTABLE_HV(HeVAL(he)))) continue; + } + + hv_iterinit(isarev); + while((iter = hv_iternext(isarev))) { + HV* revstash = gv_stashsv(hv_iterkeysv(iter), 0); + struct mro_meta * meta; + + if(!revstash) continue; + meta = HvMROMETA(revstash); + (void) + hv_store( + stashes, (const char *)&revstash, sizeof(HV *), + meta->isa + ? SvREFCNT_inc_simple_NN((SV *)meta->isa) + : &PL_sv_yes, + 0 + ); + CLEAR_LINEAR(meta); } - if (fetched_isarev) break; + if (fetched_isarev) break; } } @@ -1112,170 +1126,171 @@ S_mro_gather_and_rename(pTHX_ HV * const stashes, HV * const seen_stashes, ing that here, as we want to avoid resetting the hash iterator. */ /* Skip the entire loop if the hash is empty. */ - if(oldstash && HvUSEDKEYS(oldstash)) { - xhv = (XPVHV*)SvANY(oldstash); - seen = (HV *) sv_2mortal((SV *)newHV()); - - /* Iterate through entries in the oldstash, adding them to the - list, meanwhile doing the equivalent of $seen{$key} = 1. - */ - - while (++riter <= (I32)xhv->xhv_max) { - entry = (HvARRAY(oldstash))[riter]; - - /* Iterate through the entries in this list */ - for(; entry; entry = HeNEXT(entry)) { - const char* key; - I32 len; - - /* If this entry is not a glob, ignore it. - Try the next. */ - if (!isGV(HeVAL(entry))) continue; - - key = hv_iterkey(entry, &len); - if ((len > 1 && key[len-2] == ':' && key[len-1] == ':') - || (len == 1 && key[0] == ':')) { - HV * const oldsubstash = GvHV(HeVAL(entry)); - SV ** const stashentry - = stash ? hv_fetch(stash, key, HeUTF8(entry) ? -(I32)len : (I32)len, 0) : NULL; - HV *substash = NULL; - - /* Avoid main::main::main::... */ - if(oldsubstash == oldstash) continue; - - if( - ( - stashentry && *stashentry && isGV(*stashentry) - && (substash = GvHV(*stashentry)) - ) - || (oldsubstash && HvENAME_get(oldsubstash)) - ) - { - /* Add :: and the key (minus the trailing ::) - to each name. */ - SV *subname; - if(SvTYPE(namesv) == SVt_PVAV) { - SV *aname; - items = AvFILLp((AV *)namesv) + 1; - svp = AvARRAY((AV *)namesv); - subname = sv_2mortal((SV *)newAV()); - while (items--) { - aname = newSVsv(*svp++); - if (len == 1) - sv_catpvs(aname, ":"); - else { - sv_catpvs(aname, "::"); - sv_catpvn_flags( - aname, key, len-2, - HeUTF8(entry) - ? SV_CATUTF8 : SV_CATBYTES - ); - } - av_push((AV *)subname, aname); - } - } - else { - subname = sv_2mortal(newSVsv(namesv)); - if (len == 1) sv_catpvs(subname, ":"); - else { - sv_catpvs(subname, "::"); - sv_catpvn_flags( - subname, key, len-2, - HeUTF8(entry) ? SV_CATUTF8 : SV_CATBYTES - ); - } - } - mro_gather_and_rename( - stashes, seen_stashes, - substash, oldsubstash, subname - ); - } - - (void)hv_store(seen, key, HeUTF8(entry) ? -(I32)len : (I32)len, &PL_sv_yes, 0); - } - } - } + if(oldstash && HvTOTALKEYS(oldstash)) { + xhv = (XPVHV*)SvANY(oldstash); + seen = (HV *) newSV_type_mortal(SVt_PVHV); + + /* Iterate through entries in the oldstash, adding them to the + list, meanwhile doing the equivalent of $seen{$key} = 1. + */ + + while (++riter <= (I32)xhv->xhv_max) { + entry = (HvARRAY(oldstash))[riter]; + + /* Iterate through the entries in this list */ + for(; entry; entry = HeNEXT(entry)) { + const char* key; + I32 len; + + /* If this entry is not a glob, ignore it. + Try the next. */ + if (!isGV(HeVAL(entry))) continue; + + key = hv_iterkey(entry, &len); + if ((len > 1 && key[len-2] == ':' && key[len-1] == ':') + || (len == 1 && key[0] == ':')) { + HV * const oldsubstash = GvHV(HeVAL(entry)); + SV **stashentry; + HV *substash = NULL; + + /* Avoid main::main::main::... */ + if(oldsubstash == oldstash) continue; + + stashentry = stash ? hv_fetchhek(stash, HeKEY_hek(entry), 0) : NULL; + + if( + ( + stashentry && *stashentry && isGV(*stashentry) + && (substash = GvHV(*stashentry)) + ) + || (oldsubstash && HvENAME_get(oldsubstash)) + ) + { + /* Add :: and the key (minus the trailing ::) + to each name. */ + SV *subname; + if(SvTYPE(namesv) == SVt_PVAV) { + SV *aname; + items = AvFILLp((AV *)namesv) + 1; + svp = AvARRAY((AV *)namesv); + subname = newSV_type_mortal(SVt_PVAV); + while (items--) { + aname = newSVsv(*svp++); + if (len == 1) + sv_catpvs(aname, ":"); + else { + sv_catpvs(aname, "::"); + sv_catpvn_flags( + aname, key, len-2, + HeUTF8(entry) + ? SV_CATUTF8 : SV_CATBYTES + ); + } + av_push((AV *)subname, aname); + } + } + else { + subname = sv_2mortal(newSVsv(namesv)); + if (len == 1) sv_catpvs(subname, ":"); + else { + sv_catpvs(subname, "::"); + sv_catpvn_flags( + subname, key, len-2, + HeUTF8(entry) ? SV_CATUTF8 : SV_CATBYTES + ); + } + } + mro_gather_and_rename( + stashes, seen_stashes, + substash, oldsubstash, subname + ); + } + + (void)hv_storehek(seen, HeKEY_hek(entry), &PL_sv_yes); + } + } + } } /* Skip the entire loop if the hash is empty. */ - if (stash && HvUSEDKEYS(stash)) { - xhv = (XPVHV*)SvANY(stash); - riter = -1; - - /* Iterate through the new stash, skipping $seen{$key} items, - calling mro_gather_and_rename(stashes,seen,entry,NULL, ...). */ - while (++riter <= (I32)xhv->xhv_max) { - entry = (HvARRAY(stash))[riter]; - - /* Iterate through the entries in this list */ - for(; entry; entry = HeNEXT(entry)) { - const char* key; - I32 len; - - /* If this entry is not a glob, ignore it. - Try the next. */ - if (!isGV(HeVAL(entry))) continue; - - key = hv_iterkey(entry, &len); - if ((len > 1 && key[len-2] == ':' && key[len-1] == ':') - || (len == 1 && key[0] == ':')) { - HV *substash; - - /* If this entry was seen when we iterated through the - oldstash, skip it. */ - if(seen && hv_exists(seen, key, HeUTF8(entry) ? -(I32)len : (I32)len)) continue; - - /* We get here only if this stash has no corresponding - entry in the stash being replaced. */ - - substash = GvHV(HeVAL(entry)); - if(substash) { - SV *subname; - - /* Avoid checking main::main::main::... */ - if(substash == stash) continue; - - /* Add :: and the key (minus the trailing ::) - to each name. */ - if(SvTYPE(namesv) == SVt_PVAV) { - SV *aname; - items = AvFILLp((AV *)namesv) + 1; - svp = AvARRAY((AV *)namesv); - subname = sv_2mortal((SV *)newAV()); - while (items--) { - aname = newSVsv(*svp++); - if (len == 1) - sv_catpvs(aname, ":"); - else { - sv_catpvs(aname, "::"); - sv_catpvn_flags( - aname, key, len-2, - HeUTF8(entry) - ? SV_CATUTF8 : SV_CATBYTES - ); - } - av_push((AV *)subname, aname); - } - } - else { - subname = sv_2mortal(newSVsv(namesv)); - if (len == 1) sv_catpvs(subname, ":"); - else { - sv_catpvs(subname, "::"); - sv_catpvn_flags( - subname, key, len-2, - HeUTF8(entry) ? SV_CATUTF8 : SV_CATBYTES - ); - } - } - mro_gather_and_rename( - stashes, seen_stashes, - substash, NULL, subname - ); - } - } - } - } + if (stash && HvTOTALKEYS(stash)) { + xhv = (XPVHV*)SvANY(stash); + riter = -1; + + /* Iterate through the new stash, skipping $seen{$key} items, + calling mro_gather_and_rename(stashes,seen,entry,NULL, ...). */ + while (++riter <= (I32)xhv->xhv_max) { + entry = (HvARRAY(stash))[riter]; + + /* Iterate through the entries in this list */ + for(; entry; entry = HeNEXT(entry)) { + const char* key; + I32 len; + + /* If this entry is not a glob, ignore it. + Try the next. */ + if (!isGV(HeVAL(entry))) continue; + + key = hv_iterkey(entry, &len); + if ((len > 1 && key[len-2] == ':' && key[len-1] == ':') + || (len == 1 && key[0] == ':')) { + HV *substash; + + /* If this entry was seen when we iterated through the + oldstash, skip it. */ + if(seen && hv_existshek(seen, HeKEY_hek(entry))) continue; + + /* We get here only if this stash has no corresponding + entry in the stash being replaced. */ + + substash = GvHV(HeVAL(entry)); + if(substash) { + SV *subname; + + /* Avoid checking main::main::main::... */ + if(substash == stash) continue; + + /* Add :: and the key (minus the trailing ::) + to each name. */ + if(SvTYPE(namesv) == SVt_PVAV) { + SV *aname; + items = AvFILLp((AV *)namesv) + 1; + svp = AvARRAY((AV *)namesv); + subname = newSV_type_mortal(SVt_PVAV); + while (items--) { + aname = newSVsv(*svp++); + if (len == 1) + sv_catpvs(aname, ":"); + else { + sv_catpvs(aname, "::"); + sv_catpvn_flags( + aname, key, len-2, + HeUTF8(entry) + ? SV_CATUTF8 : SV_CATBYTES + ); + } + av_push((AV *)subname, aname); + } + } + else { + subname = sv_2mortal(newSVsv(namesv)); + if (len == 1) sv_catpvs(subname, ":"); + else { + sv_catpvs(subname, "::"); + sv_catpvn_flags( + subname, key, len-2, + HeUTF8(entry) ? SV_CATUTF8 : SV_CATBYTES + ); + } + } + mro_gather_and_rename( + stashes, seen_stashes, + substash, NULL, subname + ); + } + } + } + } } } @@ -1340,7 +1355,7 @@ Perl_mro_method_changed_in(pTHX_ HV *stash) /* else, invalidate the method caches of all child classes, but not itself */ if(isarev) { - HE* iter; + HE* iter; hv_iterinit(isarev); while((iter = hv_iternext(isarev))) { @@ -1363,6 +1378,17 @@ Perl_mro_method_changed_in(pTHX_ HV *stash) HvAUX(stash)->xhv_aux_flags &= ~HvAUXf_NO_DEREF; } +/* +=for apidoc mro_set_mro + +Set C to the value contained in the registered mro plugin whose name is +C. + +Croaks if C hasn't been registered + +=cut +*/ + void Perl_mro_set_mro(pTHX_ struct mro_meta *const meta, SV *const name) { @@ -1374,15 +1400,15 @@ Perl_mro_set_mro(pTHX_ struct mro_meta *const meta, SV *const name) Perl_croak(aTHX_ "Invalid mro name: '%" SVf "'", name); if(meta->mro_which != which) { - if (meta->mro_linear_current && !meta->mro_linear_all) { - /* If we were storing something directly, put it in the hash before - we lose it. */ - Perl_mro_set_private_data(aTHX_ meta, meta->mro_which, - MUTABLE_SV(meta->mro_linear_current)); - } - meta->mro_which = which; - /* Scrub our cached pointer to the private data. */ - meta->mro_linear_current = NULL; + if (meta->mro_linear_current && !meta->mro_linear_all) { + /* If we were storing something directly, put it in the hash before + we lose it. */ + Perl_mro_set_private_data(aTHX_ meta, meta->mro_which, + MUTABLE_SV(meta->mro_linear_current)); + } + meta->mro_which = which; + /* Scrub our cached pointer to the private data. */ + meta->mro_linear_current = NULL; /* Only affects local method cache, not even child classes */ meta->cache_gen++; @@ -1412,7 +1438,7 @@ XS(XS_mro_method_changed_in) HV* class_stash; if(items != 1) - croak_xs_usage(cv, "classname"); + croak_xs_usage(cv, "classname"); classname = ST(0); diff --git a/gnu/usr.bin/perl/myconfig.SH b/gnu/usr.bin/perl/myconfig.SH index 717c3d3b248..1e8ae0bb9a4 100644 --- a/gnu/usr.bin/perl/myconfig.SH +++ b/gnu/usr.bin/perl/myconfig.SH @@ -47,7 +47,6 @@ Summary of my $package (revision $revision $version_patchlevel_string) configura uselongdouble=$uselongdouble usemymalloc=$usemymalloc default_inc_excludes_dot=$default_inc_excludes_dot - bincompat5005=undef Compiler: cc='$cc' ccflags ='$ccflags' diff --git a/gnu/usr.bin/perl/nostdio.h b/gnu/usr.bin/perl/nostdio.h index 64276aa0606..10bd2b05038 100644 --- a/gnu/usr.bin/perl/nostdio.h +++ b/gnu/usr.bin/perl/nostdio.h @@ -25,7 +25,7 @@ struct _FILE; #define FILE struct _FILE #endif -#ifndef EBCDIC +#if !defined(OEMVS) #define _CANNOT "CANNOT" diff --git a/gnu/usr.bin/perl/numeric.c b/gnu/usr.bin/perl/numeric.c index 8f212ba7af4..a9f70622ded 100644 --- a/gnu/usr.bin/perl/numeric.c +++ b/gnu/usr.bin/perl/numeric.c @@ -16,9 +16,6 @@ */ /* -=head1 Numeric functions - -=cut This file contains all the stuff needed by perl for manipulating numeric values, including such things as replacements for the OS's atof() function @@ -34,8 +31,8 @@ values, including such things as replacements for the OS's atof() function PERL_STATIC_INLINE NV S_strtod(pTHX_ const char * const s, char ** e) { - NV result; DECLARATION_FOR_LC_NUMERIC_MANIPULATION; + NV result; STORE_LC_NUMERIC_SET_TO_NEEDED(); @@ -111,14 +108,14 @@ Perl_my_strtod(const char * const s, char **e) { NV result; - char ** end_ptr = NULL; + char * end_ptr; - *end_ptr = my_atof2(s, &result); + end_ptr = my_atof2(s, &result); if (e) { - *e = *end_ptr; + *e = end_ptr; } - if (! *end_ptr) { + if (! end_ptr) { result = 0.0; } @@ -726,12 +723,12 @@ If an infinity or a not-a-number is recognized, C<*sp> will point to one byte past the end of the recognized string. If the recognition fails, zero is returned, and C<*sp> will not move. -=for apidoc Amn|bool|IS_NUMBER_GREATER_THAN_UV_MAX -=for apidoc Amn|bool|IS_NUMBER_INFINITY -=for apidoc Amn|bool|IS_NUMBER_IN_UV -=for apidoc Amn|bool|IS_NUMBER_NAN -=for apidoc Amn|bool|IS_NUMBER_NEG -=for apidoc Amn|bool|IS_NUMBER_NOT_INT +=for apidoc Amnh|bool|IS_NUMBER_GREATER_THAN_UV_MAX +=for apidoc Amnh|bool|IS_NUMBER_INFINITY +=for apidoc Amnh|bool|IS_NUMBER_IN_UV +=for apidoc Amnh|bool|IS_NUMBER_NAN +=for apidoc Amnh|bool|IS_NUMBER_NEG +=for apidoc Amnh|bool|IS_NUMBER_NOT_INT =cut */ @@ -774,26 +771,21 @@ Perl_grok_infnan(pTHX_ const char** sp, const char* send) s++; if (s == send || isALPHA_FOLD_NE(*s, 'N')) return 0; s++; if (s == send) return 0; if (isALPHA_FOLD_EQ(*s, 'F')) { - s++; + flags |= IS_NUMBER_INFINITY | IS_NUMBER_NOT_INT; + *sp = ++s; if (s < send && (isALPHA_FOLD_EQ(*s, 'I'))) { - int fail = - flags | IS_NUMBER_INFINITY | IS_NUMBER_NOT_INT | IS_NUMBER_TRAILING; - s++; if (s == send || isALPHA_FOLD_NE(*s, 'N')) return fail; - s++; if (s == send || isALPHA_FOLD_NE(*s, 'I')) return fail; - s++; if (s == send || isALPHA_FOLD_NE(*s, 'T')) return fail; - s++; if (s == send || isALPHA_FOLD_NE(*s, 'Y')) return fail; - s++; + int trail = flags | IS_NUMBER_TRAILING; + s++; if (s == send || isALPHA_FOLD_NE(*s, 'N')) return trail; + s++; if (s == send || isALPHA_FOLD_NE(*s, 'I')) return trail; + s++; if (s == send || isALPHA_FOLD_NE(*s, 'T')) return trail; + s++; if (s == send || isALPHA_FOLD_NE(*s, 'Y')) return trail; + *sp = ++s; } else if (odh) { while (s < send && *s == '0') { /* 1.#INF00 */ s++; } } - while (s < send && isSPACE(*s)) - s++; - if (s < send && *s) { - flags |= IS_NUMBER_TRAILING; - } - flags |= IS_NUMBER_INFINITY | IS_NUMBER_NOT_INT; + goto ok_check_space; } else if (isALPHA_FOLD_EQ(*s, 'D') && odh) { /* 1.#IND */ s++; @@ -801,9 +793,7 @@ Perl_grok_infnan(pTHX_ const char** sp, const char* send) while (s < send && *s == '0') { /* 1.#IND00 */ s++; } - if (s < send && *s) { - flags |= IS_NUMBER_TRAILING; - } + goto ok_check_space; } else return 0; } @@ -819,9 +809,9 @@ Perl_grok_infnan(pTHX_ const char** sp, const char* send) if (isALPHA_FOLD_EQ(*s, 'N')) { s++; if (s == send || isALPHA_FOLD_NE(*s, 'A')) return 0; s++; if (s == send || isALPHA_FOLD_NE(*s, 'N')) return 0; - s++; - flags |= IS_NUMBER_NAN | IS_NUMBER_NOT_INT; + *sp = ++s; + if (s == send) { return flags; } @@ -835,7 +825,7 @@ Perl_grok_infnan(pTHX_ const char** sp, const char* send) isALPHA_FOLD_EQ(*s, 's')) { /* "nanq" or "nans" are ok, though generating * these portably is tricky. */ - s++; + *sp = ++s; if (s == send) { return flags; } @@ -843,17 +833,14 @@ Perl_grok_infnan(pTHX_ const char** sp, const char* send) if (*s == '(') { /* C99 style "nan(123)" or Perlish equivalent "nan($uv)". */ const char *t; + int trail = flags | IS_NUMBER_TRAILING; s++; - if (s == send) { - return flags | IS_NUMBER_TRAILING; - } + if (s == send) { return trail; } t = s + 1; while (t < send && *t && *t != ')') { t++; } - if (t == send) { - return flags | IS_NUMBER_TRAILING; - } + if (t == send) { return trail; } if (*t == ')') { int nantype; UV nanval; @@ -892,10 +879,8 @@ Perl_grok_infnan(pTHX_ const char** sp, const char* send) * be "trailing", so we need to double-check * whether we had something dubious. */ for (u = s; u < t; u++) { - if (!isDIGIT(*u)) { - flags |= IS_NUMBER_TRAILING; + if (!isDIGIT(*u)) break; - } } s = u; } @@ -903,80 +888,90 @@ Perl_grok_infnan(pTHX_ const char** sp, const char* send) /* XXX Doesn't do octal: nan("0123"). * Probably not a big loss. */ + /* XXX the nanval is currently unused, that is, + * not inserted as the NaN payload of the NV. + * But the above code already parses the C99 + * nan(...) format. See below, and see also + * the nan() in POSIX.xs. + * + * Certain configuration combinations where + * NVSIZE is greater than UVSIZE mean that + * a single UV cannot contain all the possible + * NaN payload bits. There would need to be + * some more generic syntax than "nan($uv)". + * + * Issues to keep in mind: + * + * (1) In most common cases there would + * not be an integral number of bytes that + * could be set, only a certain number of bits. + * For example for the common case of + * NVSIZE == UVSIZE == 8 there is room for 52 + * bits in the payload, but the most significant + * bit is commonly reserved for the + * signaling/quiet bit, leaving 51 bits. + * Furthermore, the C99 nan() is supposed + * to generate quiet NaNs, so it is doubtful + * whether it should be able to generate + * signaling NaNs. For the x86 80-bit doubles + * (if building a long double Perl) there would + * be 62 bits (s/q bit being the 63rd). + * + * (2) Endianness of the payload bits. If the + * payload is specified as an UV, the low-order + * bits of the UV are naturally little-endianed + * (rightmost) bits of the payload. The endianness + * of UVs and NVs can be different. */ + if ((nantype & IS_NUMBER_NOT_INT) || !(nantype && IS_NUMBER_IN_UV)) { - /* XXX the nanval is currently unused, that is, - * not inserted as the NaN payload of the NV. - * But the above code already parses the C99 - * nan(...) format. See below, and see also - * the nan() in POSIX.xs. - * - * Certain configuration combinations where - * NVSIZE is greater than UVSIZE mean that - * a single UV cannot contain all the possible - * NaN payload bits. There would need to be - * some more generic syntax than "nan($uv)". - * - * Issues to keep in mind: - * - * (1) In most common cases there would - * not be an integral number of bytes that - * could be set, only a certain number of bits. - * For example for the common case of - * NVSIZE == UVSIZE == 8 there is room for 52 - * bits in the payload, but the most significant - * bit is commonly reserved for the - * signaling/quiet bit, leaving 51 bits. - * Furthermore, the C99 nan() is supposed - * to generate quiet NaNs, so it is doubtful - * whether it should be able to generate - * signaling NaNs. For the x86 80-bit doubles - * (if building a long double Perl) there would - * be 62 bits (s/q bit being the 63rd). - * - * (2) Endianness of the payload bits. If the - * payload is specified as an UV, the low-order - * bits of the UV are naturally little-endianed - * (rightmost) bits of the payload. The endianness - * of UVs and NVs can be different. */ - return 0; + /* treat "NaN(invalid)" the same as "NaNgarbage" */ + return trail; } - if (s < t) { - flags |= IS_NUMBER_TRAILING; + else { + /* allow whitespace between valid payload and ')' */ + while (s < t && isSPACE(*s)) + s++; + /* but on anything else treat the whole '(...)' chunk + * as trailing garbage */ + if (s < t) + return trail; + s = t + 1; + goto ok_check_space; } } else { /* Looked like nan(...), but no close paren. */ - flags |= IS_NUMBER_TRAILING; + return trail; } } else { - while (s < send && isSPACE(*s)) - s++; - if (s < send && *s) { - /* Note that we here implicitly accept (parse as - * "nan", but with warnings) also any other weird - * trailing stuff for "nan". In the above we just - * check that if we got the C99-style "nan(...)", - * the "..." looks sane. - * If in future we accept more ways of specifying - * the nan payload, the accepting would happen around - * here. */ - flags |= IS_NUMBER_TRAILING; - } + /* Note that we here implicitly accept (parse as + * "nan", but with warnings) also any other weird + * trailing stuff for "nan". In the above we just + * check that if we got the C99-style "nan(...)", + * the "..." looks sane. + * If in future we accept more ways of specifying + * the nan payload, the accepting would happen around + * here. */ + goto ok_check_space; } - s = send; } else return 0; } + NOT_REACHED; /* NOTREACHED */ + /* We parsed something valid, s points after it, flags describes it */ + ok_check_space: while (s < send && isSPACE(*s)) s++; + *sp = s; + return flags | (s < send ? IS_NUMBER_TRAILING : 0); #else PERL_UNUSED_ARG(send); -#endif /* #if defined(NV_INF) || defined(NV_NAN) */ *sp = s; return flags; +#endif /* #if defined(NV_INF) || defined(NV_NAN) */ } /* @@ -997,7 +992,7 @@ C is non-C, but no actual assignment (or SEGV) will occur. C will be set with C if trailing decimals were seen (in which case C<*valuep> gives the true value truncated to an integer), and C if the number is negative (in which case C<*valuep> holds the -absolute value). C is not set if e notation was used or the +absolute value). C is not set if C notation was used or the number is larger than a UV. C allows only C, which allows for trailing @@ -1248,6 +1243,10 @@ Perl_grok_number_flags(pTHX_ const char *pv, STRLEN len, UV *valuep, U32 flags) /* Really detect inf/nan. Start at d, not s, since the above * code might have already consumed the "1." or "1". */ const int infnan = Perl_grok_infnan(aTHX_ &d, send); + + if ((infnan & IS_NUMBER_TRAILING) && !(flags & PERL_SCAN_TRAILING)) { + return 0; + } if ((infnan & IS_NUMBER_INFINITY)) { return (numtype | infnan); /* Keep sign for infinity. */ } @@ -1370,9 +1369,9 @@ S_mulexp10(NV value, I32 exponent) I32 bit; if (exponent == 0) - return value; + return value; if (value == 0) - return (NV)0; + return (NV)0; /* On OpenVMS VAX we by default use the D_FLOAT double format, * and that format does not have *easy* capabilities [1] for @@ -1396,24 +1395,24 @@ S_mulexp10(NV value, I32 exponent) #if ((defined(VMS) && !defined(_IEEE_FP)) || defined(_UNICOS) || defined(DOUBLE_IS_VAX_FLOAT)) && defined(NV_MAX_10_EXP) STMT_START { - const NV exp_v = log10(value); - if (exponent >= NV_MAX_10_EXP || exponent + exp_v >= NV_MAX_10_EXP) - return NV_MAX; - if (exponent < 0) { - if (-(exponent + exp_v) >= NV_MAX_10_EXP) - return 0.0; - while (-exponent >= NV_MAX_10_EXP) { - /* combination does not overflow, but 10^(-exponent) does */ - value /= 10; - ++exponent; - } - } + const NV exp_v = log10(value); + if (exponent >= NV_MAX_10_EXP || exponent + exp_v >= NV_MAX_10_EXP) + return NV_MAX; + if (exponent < 0) { + if (-(exponent + exp_v) >= NV_MAX_10_EXP) + return 0.0; + while (-exponent >= NV_MAX_10_EXP) { + /* combination does not overflow, but 10^(-exponent) does */ + value /= 10; + ++exponent; + } + } } STMT_END; #endif if (exponent < 0) { - negative = 1; - exponent = -exponent; + negative = 1; + exponent = -exponent; #ifdef NV_MAX_10_EXP /* for something like 1234 x 10^-309, the action of calculating * the intermediate value 10^309 then returning 1234 / (10^309) @@ -1436,9 +1435,9 @@ S_mulexp10(NV value, I32 exponent) # define FP_OVERFLOWS_TO_ZERO #endif for (bit = 1; exponent; bit <<= 1) { - if (exponent & bit) { - exponent ^= bit; - result *= power; + if (exponent & bit) { + exponent ^= bit; + result *= power; #ifdef FP_OVERFLOWS_TO_ZERO if (result == 0) # ifdef NV_INF @@ -1447,12 +1446,12 @@ S_mulexp10(NV value, I32 exponent) return value < 0 ? -FLT_MAX : FLT_MAX; # endif #endif - /* Floating point exceptions are supposed to be turned off, - * but if we're obviously done, don't risk another iteration. - */ - if (exponent == 0) break; - } - power *= power; + /* Floating point exceptions are supposed to be turned off, + * but if we're obviously done, don't risk another iteration. + */ + if (exponent == 0) break; + } + power *= power; } return negative ? value / result : value * result; } @@ -1467,7 +1466,18 @@ S_mulexp10(NV value, I32 exponent) NV Perl_my_atof(pTHX_ const char* s) { - /* 's' must be NUL terminated */ + +/* +=for apidoc my_atof + +L(3)>, but properly works with Perl locale handling, accepting a dot +radix character always, but also the current locale's radix character if and +only if called from within the lexical scope of a Perl C statement. + +N.B. C must be NUL terminated. + +=cut +*/ NV x = 0.0; @@ -1528,6 +1538,9 @@ S_my_atof_infnan(pTHX_ const char* s, bool negative, const char* send, NV* value const char *p0 = negative ? s - 1 : s; const char *p = p0; const int infnan = grok_infnan(&p, send); + /* We act like PERL_SCAN_TRAILING here to permit trailing garbage, + * it is not clear if that is desirable. + */ if (infnan && p != p0) { /* If we can generate inf/nan directly, let's do so. */ #ifdef NV_INF @@ -1618,9 +1631,9 @@ Perl_my_atof3(pTHX_ const char* orig, NV* value, const STRLEN len) const char* send = s + ((len != 0) ? len : strlen(orig)); /* one past the last */ - bool negative = 0; #endif #if defined(USE_PERL_ATOF) && !defined(Perl_strtod) + bool negative = 0; UV accumulator[2] = {0,0}; /* before/after dp */ bool seen_digit = 0; I32 exp_adjust[2] = {0,0}; @@ -1638,15 +1651,25 @@ Perl_my_atof3(pTHX_ const char* orig, NV* value, const STRLEN len) /* leading whitespace */ while (s < send && isSPACE(*s)) - ++s; + ++s; + +# if defined(NV_INF) || defined(NV_NAN) + { + char* endp; + if ((endp = S_my_atof_infnan(aTHX_ s, FALSE, send, value))) + return endp; + } +# endif /* sign */ switch (*s) { - case '-': - negative = 1; - /* FALLTHROUGH */ - case '+': - ++s; + case '-': +# if !defined(Perl_strtod) + negative = 1; +# endif + /* FALLTHROUGH */ + case '+': + ++s; } #endif @@ -1655,9 +1678,6 @@ Perl_my_atof3(pTHX_ const char* orig, NV* value, const STRLEN len) char* endp; char* copy = NULL; - if ((endp = S_my_atof_infnan(aTHX_ s, negative, send, value))) - return endp; - /* strtold() accepts 0x-prefixed hex and in POSIX implementations, 0b-prefixed binary numbers, which is backward incompatible */ @@ -1667,6 +1687,11 @@ Perl_my_atof3(pTHX_ const char* orig, NV* value, const STRLEN len) return (char *)s+1; } + /* We do not want strtod to parse whitespace after the sign, since + * that would give backward-incompatible results. So we rewind and + * let strtod handle the whitespace and sign character itself. */ + s = orig; + /* If the length is passed in, the input string isn't NUL-terminated, * and in it turns out the function below assumes it is; therefore we * create a copy and NUL-terminate that */ @@ -1674,7 +1699,7 @@ Perl_my_atof3(pTHX_ const char* orig, NV* value, const STRLEN len) Newx(copy, len + 1, char); Copy(orig, copy, len, char); copy[len] = '\0'; - s = copy + (s - orig); + s = copy; } result[2] = S_strtod(aTHX_ s, &endp); @@ -1688,7 +1713,8 @@ Perl_my_atof3(pTHX_ const char* orig, NV* value, const STRLEN len) } if (s != endp) { - *value = negative ? -result[2] : result[2]; + /* Note that negation is handled by strtod. */ + *value = result[2]; return endp; } return NULL; @@ -1712,129 +1738,127 @@ Perl_my_atof3(pTHX_ const char* orig, NV* value, const STRLEN len) * both the first and last digit, since neither can hold all values from * 0..9; but for calculating the value we must examine those two digits. */ -#ifdef MAX_SIG_DIG_PLUS +# ifdef MAX_SIG_DIG_PLUS /* It is not necessarily the case that adding 2 to NV_DIG gets all the possible digits in a NV, especially if NVs are not IEEE compliant (e.g., long doubles on IRIX) - Allen */ -# define MAX_SIG_DIGITS (NV_DIG+MAX_SIG_DIG_PLUS) -#else -# define MAX_SIG_DIGITS (NV_DIG+2) -#endif +# define MAX_SIG_DIGITS (NV_DIG+MAX_SIG_DIG_PLUS) +# else +# define MAX_SIG_DIGITS (NV_DIG+2) +# endif /* the max number we can accumulate in a UV, and still safely do 10*N+9 */ -#define MAX_ACCUMULATE ( (UV) ((UV_MAX - 9)/10)) - -#if defined(NV_INF) || defined(NV_NAN) - { - char* endp; - if ((endp = S_my_atof_infnan(aTHX_ s, negative, send, value))) - return endp; - } -#endif +# define MAX_ACCUMULATE ( (UV) ((UV_MAX - 9)/10)) /* we accumulate digits into an integer; when this becomes too * large, we add the total to NV and start again */ while (s < send) { - if (isDIGIT(*s)) { - seen_digit = 1; - old_digit = digit; - digit = *s++ - '0'; - if (seen_dp) - exp_adjust[1]++; - - /* don't start counting until we see the first significant - * digit, eg the 5 in 0.00005... */ - if (!sig_digits && digit == 0) - continue; - - if (++sig_digits > MAX_SIG_DIGITS) { - /* limits of precision reached */ - if (digit > 5) { - ++accumulator[seen_dp]; - } else if (digit == 5) { - if (old_digit % 2) { /* round to even - Allen */ - ++accumulator[seen_dp]; - } - } - if (seen_dp) { - exp_adjust[1]--; - } else { - exp_adjust[0]++; - } - /* skip remaining digits */ - while (s < send && isDIGIT(*s)) { - ++s; - if (! seen_dp) { - exp_adjust[0]++; - } - } - /* warn of loss of precision? */ - } - else { - if (accumulator[seen_dp] > MAX_ACCUMULATE) { - /* add accumulator to result and start again */ - result[seen_dp] = S_mulexp10(result[seen_dp], - exp_acc[seen_dp]) - + (NV)accumulator[seen_dp]; - accumulator[seen_dp] = 0; - exp_acc[seen_dp] = 0; - } - accumulator[seen_dp] = accumulator[seen_dp] * 10 + digit; - ++exp_acc[seen_dp]; - } - } - else if (!seen_dp && GROK_NUMERIC_RADIX(&s, send)) { - seen_dp = 1; - if (sig_digits > MAX_SIG_DIGITS) { - while (s < send && isDIGIT(*s)) { - ++s; - } - break; - } - } - else { - break; - } + if (isDIGIT(*s)) { + seen_digit = 1; + old_digit = digit; + digit = *s++ - '0'; + if (seen_dp) + exp_adjust[1]++; + + /* don't start counting until we see the first significant + * digit, eg the 5 in 0.00005... */ + if (!sig_digits && digit == 0) + continue; + + if (++sig_digits > MAX_SIG_DIGITS) { + /* limits of precision reached */ + if (digit > 5) { + ++accumulator[seen_dp]; + } else if (digit == 5) { + if (old_digit % 2) { /* round to even - Allen */ + ++accumulator[seen_dp]; + } + } + if (seen_dp) { + exp_adjust[1]--; + } else { + exp_adjust[0]++; + } + /* skip remaining digits */ + while (s < send && isDIGIT(*s)) { + ++s; + if (! seen_dp) { + exp_adjust[0]++; + } + } + /* warn of loss of precision? */ + } + else { + if (accumulator[seen_dp] > MAX_ACCUMULATE) { + /* add accumulator to result and start again */ + result[seen_dp] = S_mulexp10(result[seen_dp], + exp_acc[seen_dp]) + + (NV)accumulator[seen_dp]; + accumulator[seen_dp] = 0; + exp_acc[seen_dp] = 0; + } + accumulator[seen_dp] = accumulator[seen_dp] * 10 + digit; + ++exp_acc[seen_dp]; + } + } + else if (!seen_dp && GROK_NUMERIC_RADIX(&s, send)) { + seen_dp = 1; + if (sig_digits > MAX_SIG_DIGITS) { + while (s < send && isDIGIT(*s)) { + ++s; + } + break; + } + } + else { + break; + } } result[0] = S_mulexp10(result[0], exp_acc[0]) + (NV)accumulator[0]; if (seen_dp) { - result[1] = S_mulexp10(result[1], exp_acc[1]) + (NV)accumulator[1]; + result[1] = S_mulexp10(result[1], exp_acc[1]) + (NV)accumulator[1]; } if (s < send && seen_digit && (isALPHA_FOLD_EQ(*s, 'e'))) { - bool expnegative = 0; - - ++s; - switch (*s) { - case '-': - expnegative = 1; - /* FALLTHROUGH */ - case '+': - ++s; - } - while (s < send && isDIGIT(*s)) - exponent = exponent * 10 + (*s++ - '0'); - if (expnegative) - exponent = -exponent; + bool expnegative = 0; + + ++s; + switch (*s) { + case '-': + expnegative = 1; + /* FALLTHROUGH */ + case '+': + ++s; + } + while (s < send && isDIGIT(*s)) + exponent = exponent * 10 + (*s++ - '0'); + if (expnegative) + exponent = -exponent; } /* now apply the exponent */ if (seen_dp) { - result[2] = S_mulexp10(result[0],exponent+exp_adjust[0]) - + S_mulexp10(result[1],exponent-exp_adjust[1]); + result[2] = S_mulexp10(result[0],exponent+exp_adjust[0]) + + S_mulexp10(result[1],exponent-exp_adjust[1]); } else { - result[2] = S_mulexp10(result[0],exponent+exp_adjust[0]); + result[2] = S_mulexp10(result[0],exponent+exp_adjust[0]); } /* now apply the sign */ if (negative) - result[2] = -result[2]; -#endif /* USE_PERL_ATOF */ + result[2] = -result[2]; *value = result[2]; return (char *)s; +#else /* USE_PERL_ATOF */ + /* If you see this error you both don't have strtod (or configured -Ud_strtod or + or it's long double/quadmath equivalent) and disabled USE_PERL_ATOF, thus + removing any way for perl to convert strings to floating point numbers. + */ +# error No mechanism to convert strings to numbers available +#endif } /* @@ -1870,6 +1894,10 @@ Checks whether the argument would be either an infinity or C when used as a number, but is careful not to trigger non-numeric or uninitialized warnings. it assumes the caller has done C already. +Note that this always accepts trailing garbage (similar to C +with C), so C<"inferior"> and C<"NAND gates"> will +return true. + =cut */ diff --git a/gnu/usr.bin/perl/op.c b/gnu/usr.bin/perl/op.c index dae04f932e4..7fa0cc63304 100644 --- a/gnu/usr.bin/perl/op.c +++ b/gnu/usr.bin/perl/op.c @@ -207,38 +207,51 @@ S_prune_chain_head(OP** op_p) /* rounds up to nearest pointer */ #define SIZE_TO_PSIZE(x) (((x) + sizeof(I32 *) - 1)/sizeof(I32 *)) -#define DIFF(o,p) ((size_t)((I32 **)(p) - (I32**)(o))) + +#define DIFF(o,p) \ + (assert(((char *)(p) - (char *)(o)) % sizeof(I32**) == 0), \ + ((size_t)((I32 **)(p) - (I32**)(o)))) /* requires double parens and aTHX_ */ #define DEBUG_S_warn(args) \ DEBUG_S( \ - PerlIO_printf(Perl_debug_log, "%s", SvPVx_nolen(Perl_mess args)) \ + PerlIO_printf(Perl_debug_log, "%s", SvPVx_nolen(Perl_mess args)) \ ) +/* opslot_size includes the size of the slot header, and an op can't be smaller than BASEOP */ +#define OPSLOT_SIZE_BASE (SIZE_TO_PSIZE(sizeof(OPSLOT))) + +/* the number of bytes to allocate for a slab with sz * sizeof(I32 **) space for op */ +#define OpSLABSizeBytes(sz) \ + ((sz) * sizeof(I32 *) + STRUCT_OFFSET(OPSLAB, opslab_slots)) /* malloc a new op slab (suitable for attaching to PL_compcv). - * sz is in units of pointers */ + * sz is in units of pointers from the beginning of opslab_opslots */ static OPSLAB * S_new_slab(pTHX_ OPSLAB *head, size_t sz) { OPSLAB *slab; + size_t sz_bytes = OpSLABSizeBytes(sz); /* opslot_offset is only U16 */ - assert(sz < U16_MAX); + assert(sz < U16_MAX); + /* room for at least one op */ + assert(sz >= OPSLOT_SIZE_BASE); #ifdef PERL_DEBUG_READONLY_OPS - slab = (OPSLAB *) mmap(0, sz * sizeof(I32 *), - PROT_READ|PROT_WRITE, - MAP_ANON|MAP_PRIVATE, -1, 0); + slab = (OPSLAB *) mmap(0, sz_bytes, + PROT_READ|PROT_WRITE, + MAP_ANON|MAP_PRIVATE, -1, 0); DEBUG_m(PerlIO_printf(Perl_debug_log, "mapped %lu at %p\n", - (unsigned long) sz, slab)); + (unsigned long) sz, slab)); if (slab == MAP_FAILED) { - perror("mmap failed"); - abort(); + perror("mmap failed"); + abort(); } #else - slab = (OPSLAB *)PerlMemShared_calloc(sz, sizeof(I32 *)); + slab = (OPSLAB *)PerlMemShared_malloc(sz_bytes); + Zero(slab, sz_bytes, char); #endif slab->opslab_size = (U16)sz; @@ -246,7 +259,7 @@ S_new_slab(pTHX_ OPSLAB *head, size_t sz) /* The context is unused in non-Windows */ PERL_UNUSED_CONTEXT; #endif - slab->opslab_free_space = sz - DIFF(slab, &slab->opslab_slots); + slab->opslab_free_space = sz; slab->opslab_head = head ? head : slab; DEBUG_S_warn((aTHX_ "allocated new op slab sz 0x%x, %p, head slab %p", (unsigned int)slab->opslab_size, (void*)slab, @@ -254,8 +267,6 @@ S_new_slab(pTHX_ OPSLAB *head, size_t sz) return slab; } -/* opslot_size includes the size of the slot header, and an op can't be smaller than BASEOP */ -#define OPSLOT_SIZE_BASE (SIZE_TO_PSIZE(sizeof(OP)) + OPSLOT_HEADER_P) #define OPSLOT_SIZE_TO_INDEX(sz) ((sz) - OPSLOT_SIZE_BASE) #define link_freed_op(slab, o) S_link_freed_op(aTHX_ slab, o) @@ -308,7 +319,7 @@ Perl_Slab_Alloc(pTHX_ size_t sz) OPSLAB *slab2; OPSLOT *slot; OP *o; - size_t opsz; + size_t sz_in_p; /* size in pointer units, including the OPSLOT header */ /* We only allocate ops from the slab during subroutine compilation. We find the slab via PL_compcv, hence that must be non-NULL. It could @@ -319,7 +330,7 @@ Perl_Slab_Alloc(pTHX_ size_t sz) if (!PL_compcv || CvROOT(PL_compcv) || (CvSTART(PL_compcv) && !CvSLABBED(PL_compcv))) { - o = (OP*)PerlMemShared_calloc(1, sz); + o = (OP*)PerlMemShared_calloc(1, sz); goto gotit; } @@ -330,25 +341,24 @@ Perl_Slab_Alloc(pTHX_ size_t sz) allocated yet. See the commit message for 8be227ab5eaa23f2 for more details. */ if (!CvSTART(PL_compcv)) { - CvSTART(PL_compcv) = - (OP *)(head_slab = S_new_slab(aTHX_ NULL, PERL_SLAB_SIZE)); - CvSLABBED_on(PL_compcv); - head_slab->opslab_refcnt = 2; /* one for the CV; one for the new OP */ + CvSTART(PL_compcv) = + (OP *)(head_slab = S_new_slab(aTHX_ NULL, PERL_SLAB_SIZE)); + CvSLABBED_on(PL_compcv); + head_slab->opslab_refcnt = 2; /* one for the CV; one for the new OP */ } else ++(head_slab = (OPSLAB *)CvSTART(PL_compcv))->opslab_refcnt; - opsz = SIZE_TO_PSIZE(sz); - sz = opsz + OPSLOT_HEADER_P; + sz_in_p = SIZE_TO_PSIZE(sz + OPSLOT_HEADER); /* The head slab for each CV maintains a free list of OPs. In particular, constant folding will free up OPs, so it makes sense to re-use them where possible. A freed up slot is used in preference to a new allocation. */ if (head_slab->opslab_freed && - OPSLOT_SIZE_TO_INDEX(sz) < head_slab->opslab_freed_size) { + OPSLOT_SIZE_TO_INDEX(sz_in_p) < head_slab->opslab_freed_size) { U16 base_index; /* look for a large enough size with any freed ops */ - for (base_index = OPSLOT_SIZE_TO_INDEX(sz); + for (base_index = OPSLOT_SIZE_TO_INDEX(sz_in_p); base_index < head_slab->opslab_freed_size && !head_slab->opslab_freed[base_index]; ++base_index) { } @@ -358,52 +368,50 @@ Perl_Slab_Alloc(pTHX_ size_t sz) o = head_slab->opslab_freed[base_index]; DEBUG_S_warn((aTHX_ "realloced op at %p, slab %p, head slab %p", - (void*)o, - (I32**)OpSLOT(o) - OpSLOT(o)->opslot_offset, - (void*)head_slab)); - head_slab->opslab_freed[base_index] = o->op_next; - Zero(o, opsz, I32 *); - o->op_slabbed = 1; - goto gotit; - } + (void *)o, (void *)OpMySLAB(o), (void *)head_slab)); + head_slab->opslab_freed[base_index] = o->op_next; + Zero(o, sz, char); + o->op_slabbed = 1; + goto gotit; + } } #define INIT_OPSLOT(s) \ - slot->opslot_offset = DIFF(slab2, slot) ; \ - slot->opslot_size = s; \ - slab2->opslab_free_space -= s; \ - o = &slot->opslot_op; \ - o->op_slabbed = 1 + slot->opslot_offset = DIFF(&slab2->opslab_slots, slot) ; \ + slot->opslot_size = s; \ + slab2->opslab_free_space -= s; \ + o = &slot->opslot_op; \ + o->op_slabbed = 1 /* The partially-filled slab is next in the chain. */ slab2 = head_slab->opslab_next ? head_slab->opslab_next : head_slab; - if (slab2->opslab_free_space < sz) { - /* Remaining space is too small. */ - /* If we can fit a BASEOP, add it to the free chain, so as not - to waste it. */ - if (slab2->opslab_free_space >= SIZE_TO_PSIZE(sizeof(OP)) + OPSLOT_HEADER_P) { - slot = &slab2->opslab_slots; - INIT_OPSLOT(slab2->opslab_free_space); - o->op_type = OP_FREED; + if (slab2->opslab_free_space < sz_in_p) { + /* Remaining space is too small. */ + /* If we can fit a BASEOP, add it to the free chain, so as not + to waste it. */ + if (slab2->opslab_free_space >= OPSLOT_SIZE_BASE) { + slot = &slab2->opslab_slots; + INIT_OPSLOT(slab2->opslab_free_space); + o->op_type = OP_FREED; + DEBUG_S_warn((aTHX_ "linked unused op space at %p, slab %p, head slab %p", + (void *)o, (void *)slab2, (void *)head_slab)); link_freed_op(head_slab, o); - } + } - /* Create a new slab. Make this one twice as big. */ - slab2 = S_new_slab(aTHX_ head_slab, - slab2->opslab_size > PERL_MAX_SLAB_SIZE / 2 + /* Create a new slab. Make this one twice as big. */ + slab2 = S_new_slab(aTHX_ head_slab, + slab2->opslab_size > PERL_MAX_SLAB_SIZE / 2 ? PERL_MAX_SLAB_SIZE : slab2->opslab_size * 2); - slab2->opslab_next = head_slab->opslab_next; - head_slab->opslab_next = slab2; + slab2->opslab_next = head_slab->opslab_next; + head_slab->opslab_next = slab2; } - assert(slab2->opslab_size >= sz); + assert(slab2->opslab_size >= sz_in_p); /* Create a new op slot */ - slot = (OPSLOT *) - ((I32 **)&slab2->opslab_slots - + slab2->opslab_free_space - sz); + slot = OpSLOToff(slab2, slab2->opslab_free_space - sz_in_p); assert(slot >= &slab2->opslab_slots); - INIT_OPSLOT(sz); + INIT_OPSLOT(sz_in_p); DEBUG_S_warn((aTHX_ "allocating op at %p, slab %p, head slab %p", (void*)o, (void*)slab2, (void*)head_slab)); @@ -426,11 +434,11 @@ Perl_Slab_to_ro(pTHX_ OPSLAB *slab) if (slab->opslab_readonly) return; slab->opslab_readonly = 1; for (; slab; slab = slab->opslab_next) { - /*DEBUG_U(PerlIO_printf(Perl_debug_log,"mprotect ->ro %lu at %p\n", - (unsigned long) slab->opslab_size, slab));*/ - if (mprotect(slab, slab->opslab_size * sizeof(I32 *), PROT_READ)) - Perl_warn(aTHX_ "mprotect for %p %lu failed with %d", slab, - (unsigned long)slab->opslab_size, errno); + /*DEBUG_U(PerlIO_printf(Perl_debug_log,"mprotect ->ro %lu at %p\n", + (unsigned long) slab->opslab_size, (void *)slab));*/ + if (mprotect(slab, OpSLABSizeBytes(slab->opslab_size), PROT_READ)) + Perl_warn(aTHX_ "mprotect for %p %lu failed with %d", (void *)slab, + (unsigned long)slab->opslab_size, errno); } } @@ -444,13 +452,13 @@ Perl_Slab_to_rw(pTHX_ OPSLAB *const slab) if (!slab->opslab_readonly) return; slab2 = slab; for (; slab2; slab2 = slab2->opslab_next) { - /*DEBUG_U(PerlIO_printf(Perl_debug_log,"mprotect ->rw %lu at %p\n", - (unsigned long) size, slab2));*/ - if (mprotect((void *)slab2, slab2->opslab_size * sizeof(I32 *), - PROT_READ|PROT_WRITE)) { - Perl_warn(aTHX_ "mprotect RW for %p %lu failed with %d", slab, - (unsigned long)slab2->opslab_size, errno); - } + /*DEBUG_U(PerlIO_printf(Perl_debug_log,"mprotect ->rw %lu at %p\n", + (unsigned long) size, (void *)slab2));*/ + if (mprotect((void *)slab2, OpSLABSizeBytes(slab2->opslab_size), + PROT_READ|PROT_WRITE)) { + Perl_warn(aTHX_ "mprotect RW for %p %lu failed with %d", (void *)slab, + (unsigned long)slab2->opslab_size, errno); + } } slab->opslab_readonly = 0; } @@ -459,13 +467,6 @@ Perl_Slab_to_rw(pTHX_ OPSLAB *const slab) # define Slab_to_rw(op) NOOP #endif -/* This cannot possibly be right, but it was copied from the old slab - allocator, to which it was originally added, without explanation, in - commit 083fcd5. */ -#ifdef NETWARE -# define PerlMemShared PerlMem -#endif - /* make freed ops die if they're inadvertently executed */ #ifdef DEBUGGING static OP * @@ -494,8 +495,8 @@ Perl_Slab_Free(pTHX_ void *op) if (!o->op_slabbed) { if (!o->op_static) - PerlMemShared_free(op); - return; + PerlMemShared_free(op); + return; } slab = OpSLAB(o); @@ -504,9 +505,7 @@ Perl_Slab_Free(pTHX_ void *op) o->op_type = OP_FREED; link_freed_op(slab, o); DEBUG_S_warn((aTHX_ "freeing op at %p, slab %p, head slab %p", - (void*)o, - (I32**)OpSLOT(o) - OpSLOT(o)->opslot_offset, - (void*)slab)); + (void*)o, (void *)OpMySLAB(o), (void*)slab)); OpslabREFCNT_dec_padok(slab); } @@ -516,8 +515,8 @@ Perl_opslab_free_nopad(pTHX_ OPSLAB *slab) const bool havepad = !!PL_comppad; PERL_ARGS_ASSERT_OPSLAB_FREE_NOPAD; if (havepad) { - ENTER; - PAD_SAVE_SETNULLPAD(); + ENTER; + PAD_SAVE_SETNULLPAD(); } opslab_free(slab); if (havepad) LEAVE; @@ -543,19 +542,19 @@ Perl_opslab_free(pTHX_ OPSLAB *slab) assert(slab->opslab_refcnt == 1); PerlMemShared_free(slab->opslab_freed); do { - slab2 = slab->opslab_next; + slab2 = slab->opslab_next; #ifdef DEBUGGING - slab->opslab_refcnt = ~(size_t)0; + slab->opslab_refcnt = ~(size_t)0; #endif #ifdef PERL_DEBUG_READONLY_OPS - DEBUG_m(PerlIO_printf(Perl_debug_log, "Deallocate slab at %p\n", - (void*)slab)); - if (munmap(slab, slab->opslab_size * sizeof(I32 *))) { - perror("munmap failed"); - abort(); - } + DEBUG_m(PerlIO_printf(Perl_debug_log, "Deallocate slab at %p\n", + (void*)slab)); + if (munmap(slab, OpSLABSizeBytes(slab->opslab_size))) { + perror("munmap failed"); + abort(); + } #else - PerlMemShared_free(slab); + PerlMemShared_free(slab); #endif slab = slab2; } while (slab); @@ -575,34 +574,32 @@ Perl_opslab_force_free(pTHX_ OPSLAB *slab) PERL_ARGS_ASSERT_OPSLAB_FORCE_FREE; slab2 = slab; do { - OPSLOT *slot = (OPSLOT*) - ((I32**)&slab2->opslab_slots + slab2->opslab_free_space); - OPSLOT *end = (OPSLOT*) - ((I32**)slab2 + slab2->opslab_size); - for (; slot < end; + OPSLOT *slot = OpSLOToff(slab2, slab2->opslab_free_space); + OPSLOT *end = OpSLOToff(slab2, slab2->opslab_size); + for (; slot < end; slot = (OPSLOT*) ((I32**)slot + slot->opslot_size) ) { - if (slot->opslot_op.op_type != OP_FREED - && !(slot->opslot_op.op_savefree + if (slot->opslot_op.op_type != OP_FREED + && !(slot->opslot_op.op_savefree #ifdef DEBUGGING - && ++savestack_count + && ++savestack_count #endif - ) - ) { - assert(slot->opslot_op.op_slabbed); - op_free(&slot->opslot_op); - if (slab->opslab_refcnt == 1) goto free; - } - } + ) + ) { + assert(slot->opslot_op.op_slabbed); + op_free(&slot->opslot_op); + if (slab->opslab_refcnt == 1) goto free; + } + } } while ((slab2 = slab2->opslab_next)); /* > 1 because the CV still holds a reference count. */ if (slab->opslab_refcnt > 1) { /* still referenced by the savestack */ #ifdef DEBUGGING - assert(savestack_count == slab->opslab_refcnt-1); + assert(savestack_count == slab->opslab_refcnt-1); #endif - /* Remove the CV’s reference count. */ - slab->opslab_refcnt--; - return; + /* Remove the CV’s reference count. */ + slab->opslab_refcnt--; + return; } free: opslab_free(slab); @@ -651,16 +648,16 @@ Perl_op_refcnt_dec(pTHX_ OP *o) #define CHECKOP(type,o) \ ((PL_op_mask && PL_op_mask[type]) \ ? ( op_free((OP*)o), \ - Perl_croak(aTHX_ "'%s' trapped by operation mask", PL_op_desc[type]), \ - (OP*)0 ) \ + Perl_croak(aTHX_ "'%s' trapped by operation mask", PL_op_desc[type]), \ + (OP*)0 ) \ : PL_check[type](aTHX_ (OP*)o)) #define RETURN_UNLIMITED_NUMBER (PERL_INT_MAX / 2) #define OpTYPE_set(o,type) \ STMT_START { \ - o->op_type = (OPCODE)type; \ - o->op_ppaddr = PL_ppaddr[type]; \ + o->op_type = (OPCODE)type; \ + o->op_ppaddr = PL_ppaddr[type]; \ } STMT_END STATIC OP * @@ -669,7 +666,7 @@ S_no_fh_allowed(pTHX_ OP *o) PERL_ARGS_ASSERT_NO_FH_ALLOWED; yyerror(Perl_form(aTHX_ "Missing comma after first argument to %s function", - OP_DESC(o))); + OP_DESC(o))); return o; } @@ -696,7 +693,7 @@ S_bad_type_pv(pTHX_ I32 n, const char *t, const OP *o, const OP *kid) PERL_ARGS_ASSERT_BAD_TYPE_PV; yyerror_pv(Perl_form(aTHX_ "Type of arg %d to %s must be %s (not %s)", - (int)n, PL_op_desc[(o)->op_type], t, OP_DESC(kid)), 0); + (int)n, PL_op_desc[(o)->op_type], t, OP_DESC(kid)), 0); } STATIC void @@ -706,7 +703,7 @@ S_bad_type_gv(pTHX_ I32 n, GV *gv, const OP *kid, const char *t) PERL_ARGS_ASSERT_BAD_TYPE_GV; yyerror_pv(Perl_form(aTHX_ "Type of arg %d to %" SVf " must be %s (not %s)", - (int)n, SVfARG(namesv), t, OP_DESC(kid)), SvUTF8(namesv)); + (int)n, SVfARG(namesv), t, OP_DESC(kid)), SvUTF8(namesv)); } STATIC void @@ -715,77 +712,94 @@ S_no_bareword_allowed(pTHX_ OP *o) PERL_ARGS_ASSERT_NO_BAREWORD_ALLOWED; qerror(Perl_mess(aTHX_ - "Bareword \"%" SVf "\" not allowed while \"strict subs\" in use", - SVfARG(cSVOPo_sv))); + "Bareword \"%" SVf "\" not allowed while \"strict subs\" in use", + SVfARG(cSVOPo_sv))); o->op_private &= ~OPpCONST_STRICT; /* prevent warning twice about the same OP */ } +void +Perl_no_bareword_filehandle(pTHX_ const char *fhname) { + PERL_ARGS_ASSERT_NO_BAREWORD_FILEHANDLE; + + if (strNE(fhname, "STDERR") + && strNE(fhname, "STDOUT") + && strNE(fhname, "STDIN") + && strNE(fhname, "_") + && strNE(fhname, "ARGV") + && strNE(fhname, "ARGVOUT") + && strNE(fhname, "DATA")) { + qerror(Perl_mess(aTHX_ "Bareword filehandle \"%s\" not allowed under 'no feature \"bareword_filehandles\"'", fhname)); + } +} + /* "register" allocation */ PADOFFSET Perl_allocmy(pTHX_ const char *const name, const STRLEN len, const U32 flags) { PADOFFSET off; + bool is_idfirst, is_default; const bool is_our = (PL_parser->in_my == KEY_our); PERL_ARGS_ASSERT_ALLOCMY; if (flags & ~SVf_UTF8) - Perl_croak(aTHX_ "panic: allocmy illegal flag bits 0x%" UVxf, - (UV)flags); + Perl_croak(aTHX_ "panic: allocmy illegal flag bits 0x%" UVxf, + (UV)flags); + + is_idfirst = flags & SVf_UTF8 + ? isIDFIRST_utf8_safe((U8*)name + 1, name + len) + : isIDFIRST_A(name[1]); + + /* $_, @_, etc. */ + is_default = len == 2 && name[1] == '_'; /* complain about "my $" etc etc */ - if ( len - && !( is_our - || isALPHA(name[1]) - || ( (flags & SVf_UTF8) - && isIDFIRST_utf8_safe((U8 *)name+1, name + len)) - || (name[1] == '_' && len > 2))) - { + if (!is_our && (!is_idfirst || is_default)) { const char * const type = PL_parser->in_my == KEY_sigvar ? "subroutine signature" : PL_parser->in_my == KEY_state ? "\"state\"" : "\"my\""; - if (!(flags & SVf_UTF8 && UTF8_IS_START(name[1])) - && isASCII(name[1]) - && (!isPRINT(name[1]) || memCHRs("\t\n\r\f", name[1]))) { - /* diag_listed_as: Can't use global %s in %s */ - yyerror(Perl_form(aTHX_ "Can't use global %c^%c%.*s in %s", - name[0], toCTRL(name[1]), + if (!(flags & SVf_UTF8 && UTF8_IS_START(name[1])) + && isASCII(name[1]) + && (!isPRINT(name[1]) || memCHRs("\t\n\r\f", name[1]))) { + /* diag_listed_as: Can't use global %s in %s */ + yyerror(Perl_form(aTHX_ "Can't use global %c^%c%.*s in %s", + name[0], toCTRL(name[1]), (int)(len - 2), name + 2, - type)); - } else { - yyerror_pv(Perl_form(aTHX_ "Can't use global %.*s in %s", + type)); + } else { + yyerror_pv(Perl_form(aTHX_ "Can't use global %.*s in %s", (int) len, name, - type), flags & SVf_UTF8); - } + type), flags & SVf_UTF8); + } } /* allocate a spare slot and store the name in that slot */ off = pad_add_name_pvn(name, len, - (is_our ? padadd_OUR : - PL_parser->in_my == KEY_state ? padadd_STATE : 0), - PL_parser->in_my_stash, - (is_our - /* $_ is always in main::, even with our */ - ? (PL_curstash && !memEQs(name,len,"$_") - ? PL_curstash - : PL_defstash) - : NULL - ) + (is_our ? padadd_OUR : + PL_parser->in_my == KEY_state ? padadd_STATE : 0), + PL_parser->in_my_stash, + (is_our + /* $_ is always in main::, even with our */ + ? (PL_curstash && !memEQs(name,len,"$_") + ? PL_curstash + : PL_defstash) + : NULL + ) ); /* anon sub prototypes contains state vars should always be cloned, * otherwise the state var would be shared between anon subs */ if (PL_parser->in_my == KEY_state && CvANON(PL_compcv)) - CvCLONE_on(PL_compcv); + CvCLONE_on(PL_compcv); return off; } /* -=head1 Optree Manipulation Functions +=for apidoc_section $optree_manipulation =for apidoc alloccopstash @@ -807,15 +821,15 @@ Perl_alloccopstash(pTHX_ HV *hv) if (PL_stashpad[PL_stashpadix] == hv) return PL_stashpadix; for (; o < PL_stashpadmax; ++o) { - if (PL_stashpad[o] == hv) return PL_stashpadix = o; - if (!PL_stashpad[o] || SvTYPE(PL_stashpad[o]) != SVt_PVHV) - found_slot = TRUE, off = o; + if (PL_stashpad[o] == hv) return PL_stashpadix = o; + if (!PL_stashpad[o] || SvTYPE(PL_stashpad[o]) != SVt_PVHV) + found_slot = TRUE, off = o; } if (!found_slot) { - Renew(PL_stashpad, PL_stashpadmax + 10, HV *); - Zero(PL_stashpad + PL_stashpadmax, 10, HV *); - off = PL_stashpadmax; - PL_stashpadmax += 10; + Renew(PL_stashpad, PL_stashpadmax + 10, HV *); + Zero(PL_stashpad + PL_stashpadmax, 10, HV *); + off = PL_stashpadmax; + PL_stashpadmax += 10; } PL_stashpad[PL_stashpadix = off] = hv; @@ -846,7 +860,6 @@ to from any optree. void Perl_op_free(pTHX_ OP *o) { - dVAR; OPCODE type; OP *top_op = o; OP *next_op = o; @@ -926,11 +939,15 @@ Perl_op_free(pTHX_ OP *o) * inconsistent state then. Note that an error when * compiling the main program leaves PL_parser NULL, so * we can't spot faults in the main code, only - * evaled/required code */ + * evaled/required code; + * * it's a banned op - we may be croaking before the op is + * fully formed. - see CHECKOP. */ #ifdef DEBUGGING if ( o->op_ppaddr == PL_ppaddr[type] && PL_parser - && !PL_parser->error_count) + && !PL_parser->error_count + && !(PL_op_mask && PL_op_mask[type]) + ) { assert(!(o->op_private & ~PL_op_private_valid[type])); } @@ -1020,7 +1037,6 @@ void Perl_op_clear(pTHX_ OP *o) { - dVAR; PERL_ARGS_ASSERT_OP_CLEAR; @@ -1030,12 +1046,12 @@ Perl_op_clear(pTHX_ OP *o) case OP_ENTERTRY: case OP_ENTEREVAL: /* Was holding hints. */ case OP_ARGDEFELEM: /* Was holding signature index. */ - o->op_targ = 0; - break; + o->op_targ = 0; + break; default: - if (!(o->op_flags & OPf_REF) || !OP_IS_STAT(o->op_type)) - break; - /* FALLTHROUGH */ + if (!(o->op_flags & OPf_REF) || !OP_IS_STAT(o->op_type)) + break; + /* FALLTHROUGH */ case OP_GVSV: case OP_GV: case OP_AELEMFAST: @@ -1044,17 +1060,17 @@ Perl_op_clear(pTHX_ OP *o) #else S_op_clear_gv(aTHX_ o, &(cSVOPx(o)->op_sv)); #endif - break; + break; case OP_METHOD_REDIR: case OP_METHOD_REDIR_SUPER: #ifdef USE_ITHREADS - if (cMETHOPx(o)->op_rclass_targ) { - pad_swipe(cMETHOPx(o)->op_rclass_targ, 1); - cMETHOPx(o)->op_rclass_targ = 0; - } + if (cMETHOPx(o)->op_rclass_targ) { + pad_swipe(cMETHOPx(o)->op_rclass_targ, 1); + cMETHOPx(o)->op_rclass_targ = 0; + } #else - SvREFCNT_dec(cMETHOPx(o)->op_rclass_sv); - cMETHOPx(o)->op_rclass_sv = NULL; + SvREFCNT_dec(cMETHOPx(o)->op_rclass_sv); + cMETHOPx(o)->op_rclass_sv = NULL; #endif /* FALLTHROUGH */ case OP_METHOD_NAMED: @@ -1070,52 +1086,52 @@ Perl_op_clear(pTHX_ OP *o) break; case OP_CONST: case OP_HINTSEVAL: - SvREFCNT_dec(cSVOPo->op_sv); - cSVOPo->op_sv = NULL; + SvREFCNT_dec(cSVOPo->op_sv); + cSVOPo->op_sv = NULL; #ifdef USE_ITHREADS - /** Bug #15654 - Even if op_clear does a pad_free for the target of the op, - pad_free doesn't actually remove the sv that exists in the pad; - instead it lives on. This results in that it could be reused as - a target later on when the pad was reallocated. - **/ + /** Bug #15654 + Even if op_clear does a pad_free for the target of the op, + pad_free doesn't actually remove the sv that exists in the pad; + instead it lives on. This results in that it could be reused as + a target later on when the pad was reallocated. + **/ if(o->op_targ) { pad_swipe(o->op_targ,1); o->op_targ = 0; } #endif - break; + break; case OP_DUMP: case OP_GOTO: case OP_NEXT: case OP_LAST: case OP_REDO: - if (o->op_flags & (OPf_SPECIAL|OPf_STACKED|OPf_KIDS)) - break; - /* FALLTHROUGH */ + if (o->op_flags & (OPf_SPECIAL|OPf_STACKED|OPf_KIDS)) + break; + /* FALLTHROUGH */ case OP_TRANS: case OP_TRANSR: - if ( (o->op_type == OP_TRANS || o->op_type == OP_TRANSR) + if ( (o->op_type == OP_TRANS || o->op_type == OP_TRANSR) && (o->op_private & OPpTRANS_USE_SVOP)) { #ifdef USE_ITHREADS - if (cPADOPo->op_padix > 0) { - pad_swipe(cPADOPo->op_padix, TRUE); - cPADOPo->op_padix = 0; - } + if (cPADOPo->op_padix > 0) { + pad_swipe(cPADOPo->op_padix, TRUE); + cPADOPo->op_padix = 0; + } #else - SvREFCNT_dec(cSVOPo->op_sv); - cSVOPo->op_sv = NULL; + SvREFCNT_dec(cSVOPo->op_sv); + cSVOPo->op_sv = NULL; #endif - } - else { - PerlMemShared_free(cPVOPo->op_pv); - cPVOPo->op_pv = NULL; - } - break; + } + else { + PerlMemShared_free(cPVOPo->op_pv); + cPVOPo->op_pv = NULL; + } + break; case OP_SUBST: - op_free(cPMOPo->op_pmreplrootu.op_pmreplroot); - goto clear_pmop; + op_free(cPMOPo->op_pmreplrootu.op_pmreplroot); + goto clear_pmop; case OP_SPLIT: if ( (o->op_private & OPpSPLIT_ASSIGN) /* @array = split */ @@ -1130,15 +1146,15 @@ Perl_op_clear(pTHX_ OP *o) SvREFCNT_dec(MUTABLE_SV(cPMOPo->op_pmreplrootu.op_pmtargetgv)); #endif } - /* FALLTHROUGH */ + /* FALLTHROUGH */ case OP_MATCH: case OP_QR: clear_pmop: - if (!(cPMOPo->op_pmflags & PMf_CODELIST_PRIVATE)) - op_free(cPMOPo->op_code_list); - cPMOPo->op_code_list = NULL; - forget_pmop(cPMOPo); - cPMOPo->op_pmreplrootu.op_pmreplroot = NULL; + if (!(cPMOPo->op_pmflags & PMf_CODELIST_PRIVATE)) + op_free(cPMOPo->op_code_list); + cPMOPo->op_code_list = NULL; + forget_pmop(cPMOPo); + cPMOPo->op_pmreplrootu.op_pmreplroot = NULL; /* we use the same protection as the "SAFE" version of the PM_ macros * here since sv_clean_all might release some PMOPs * after PL_regex_padav has been cleared @@ -1146,19 +1162,19 @@ Perl_op_clear(pTHX_ OP *o) * happen before sv_clean_all */ #ifdef USE_ITHREADS - if(PL_regex_pad) { /* We could be in destruction */ - const IV offset = (cPMOPo)->op_pmoffset; - ReREFCNT_dec(PM_GETRE(cPMOPo)); - PL_regex_pad[offset] = &PL_sv_undef; + if(PL_regex_pad) { /* We could be in destruction */ + const IV offset = (cPMOPo)->op_pmoffset; + ReREFCNT_dec(PM_GETRE(cPMOPo)); + PL_regex_pad[offset] = &PL_sv_undef; sv_catpvn_nomg(PL_regex_pad[0], (const char *)&offset, - sizeof(offset)); + sizeof(offset)); } #else - ReREFCNT_dec(PM_GETRE(cPMOPo)); - PM_SETRE(cPMOPo, NULL); + ReREFCNT_dec(PM_GETRE(cPMOPo)); + PM_SETRE(cPMOPo, NULL); #endif - break; + break; case OP_ARGCHECK: PerlMemShared_free(cUNOP_AUXo->op_aux); @@ -1290,8 +1306,8 @@ Perl_op_clear(pTHX_ OP *o) } if (o->op_targ > 0) { - pad_free(o->op_targ); - o->op_targ = 0; + pad_free(o->op_targ); + o->op_targ = 0; } } @@ -1300,9 +1316,27 @@ S_cop_free(pTHX_ COP* cop) { PERL_ARGS_ASSERT_COP_FREE; + /* If called during global destruction PL_defstash might be NULL and there + shouldn't be any code running that will trip over the bad cop address. + This also avoids uselessly creating the AV after it's been destroyed. + */ + if (cop->op_type == OP_DBSTATE && PL_phase != PERL_PHASE_DESTRUCT) { + /* Remove the now invalid op from the line number information. + This could cause a freed memory overwrite if the debugger tried to + set a breakpoint on this line. + */ + AV *av = CopFILEAVn(cop); + if (av) { + SV * const * const svp = av_fetch(av, CopLINE(cop), FALSE); + if (svp && *svp != &PL_sv_undef && SvIVX(*svp) == PTR2IV(cop) ) { + (void)SvIOK_off(*svp); + SvIV_set(*svp, 0); + } + } + } CopFILE_free(cop); if (! specialWARN(cop->cop_warnings)) - PerlMemShared_free(cop->cop_warnings); + PerlMemShared_free(cop->cop_warnings); cophh_free(CopHINTHASH_get(cop)); if (PL_curcop == cop) PL_curcop = NULL; @@ -1316,31 +1350,31 @@ S_forget_pmop(pTHX_ PMOP *const o) PERL_ARGS_ASSERT_FORGET_PMOP; if (pmstash && !SvIS_FREED(pmstash) && SvMAGICAL(pmstash)) { - MAGIC * const mg = mg_find((const SV *)pmstash, PERL_MAGIC_symtab); - if (mg) { - PMOP **const array = (PMOP**) mg->mg_ptr; - U32 count = mg->mg_len / sizeof(PMOP**); - U32 i = count; - - while (i--) { - if (array[i] == o) { - /* Found it. Move the entry at the end to overwrite it. */ - array[i] = array[--count]; - mg->mg_len = count * sizeof(PMOP**); - /* Could realloc smaller at this point always, but probably - not worth it. Probably worth free()ing if we're the - last. */ - if(!count) { - Safefree(mg->mg_ptr); - mg->mg_ptr = NULL; - } - break; - } - } - } + MAGIC * const mg = mg_find((const SV *)pmstash, PERL_MAGIC_symtab); + if (mg) { + PMOP **const array = (PMOP**) mg->mg_ptr; + U32 count = mg->mg_len / sizeof(PMOP**); + U32 i = count; + + while (i--) { + if (array[i] == o) { + /* Found it. Move the entry at the end to overwrite it. */ + array[i] = array[--count]; + mg->mg_len = count * sizeof(PMOP**); + /* Could realloc smaller at this point always, but probably + not worth it. Probably worth free()ing if we're the + last. */ + if(!count) { + Safefree(mg->mg_ptr); + mg->mg_ptr = NULL; + } + break; + } + } + } } if (PL_curpm == o) - PL_curpm = NULL; + PL_curpm = NULL; } @@ -1390,35 +1424,44 @@ other ops. void Perl_op_null(pTHX_ OP *o) { - dVAR; PERL_ARGS_ASSERT_OP_NULL; if (o->op_type == OP_NULL) - return; + return; op_clear(o); o->op_targ = o->op_type; OpTYPE_set(o, OP_NULL); } +/* +=for apidoc op_refcnt_lock + +Implements the C macro which you should use instead. + +=cut +*/ + void Perl_op_refcnt_lock(pTHX) PERL_TSA_ACQUIRE(PL_op_mutex) { -#ifdef USE_ITHREADS - dVAR; -#endif PERL_UNUSED_CONTEXT; OP_REFCNT_LOCK; } +/* +=for apidoc op_refcnt_unlock + +Implements the C macro which you should use instead. + +=cut +*/ + void Perl_op_refcnt_unlock(pTHX) PERL_TSA_RELEASE(PL_op_mutex) { -#ifdef USE_ITHREADS - dVAR; -#endif PERL_UNUSED_CONTEXT; OP_REFCNT_UNLOCK; } @@ -1629,7 +1672,6 @@ S_op_sibling_newUNOP(pTHX_ OP *parent, OP *start, I32 type, I32 flags) LOGOP * Perl_alloc_LOGOP(pTHX_ I32 type, OP *first, OP* other) { - dVAR; LOGOP *logop; OP *kid = first; NewOp(1101, logop, 1, LOGOP); @@ -1652,7 +1694,7 @@ Perl_alloc_LOGOP(pTHX_ I32 type, OP *first, OP* other) =for apidoc op_contextualize Applies a syntactic context to an op tree representing an expression. -C is the op tree, and C must be C, C, +C is the op tree, and C must be C, C, or C to specify the context to apply. The modified op tree is returned. @@ -1664,12 +1706,12 @@ Perl_op_contextualize(pTHX_ OP *o, I32 context) { PERL_ARGS_ASSERT_OP_CONTEXTUALIZE; switch (context) { - case G_SCALAR: return scalar(o); - case G_ARRAY: return list(o); - case G_VOID: return scalarvoid(o); - default: - Perl_croak(aTHX_ "panic: op_contextualize bad context %ld", - (long) context); + case G_SCALAR: return scalar(o); + case G_LIST: return list(o); + case G_VOID: return scalarvoid(o); + default: + Perl_croak(aTHX_ "panic: op_contextualize bad context %ld", + (long) context); } } @@ -1740,7 +1782,7 @@ S_scalarkids(pTHX_ OP *o) if (o && o->op_flags & OPf_KIDS) { OP *kid; for (kid = cLISTOPo->op_first; kid; kid = OpSIBLING(kid)) - scalar(kid); + scalar(kid); } return o; } @@ -1755,17 +1797,17 @@ S_scalarboolean(pTHX_ OP *o) (o->op_type == OP_NOT && cUNOPo->op_first->op_type == OP_SASSIGN && cBINOPx(cUNOPo->op_first)->op_first->op_type == OP_CONST && !(cBINOPx(cUNOPo->op_first)->op_first->op_flags & OPf_SPECIAL))) { - if (ckWARN(WARN_SYNTAX)) { - const line_t oldline = CopLINE(PL_curcop); + if (ckWARN(WARN_SYNTAX)) { + const line_t oldline = CopLINE(PL_curcop); - if (PL_parser && PL_parser->copline != NOLINE) { - /* This ensures that warnings are reported at the first line + if (PL_parser && PL_parser->copline != NOLINE) { + /* This ensures that warnings are reported at the first line of the conditional, not the last. */ - CopLINE_set(PL_curcop, PL_parser->copline); + CopLINE_set(PL_curcop, PL_parser->copline); } - Perl_warner(aTHX_ packWARN(WARN_SYNTAX), "Found = in conditional, should be =="); - CopLINE_set(PL_curcop, oldline); - } + Perl_warner(aTHX_ packWARN(WARN_SYNTAX), "Found = in conditional, should be =="); + CopLINE_set(PL_curcop, oldline); + } } return scalar(o); } @@ -1775,19 +1817,19 @@ S_op_varname_subscript(pTHX_ const OP *o, int subscript_type) { assert(o); assert(o->op_type == OP_PADAV || o->op_type == OP_RV2AV || - o->op_type == OP_PADHV || o->op_type == OP_RV2HV); + o->op_type == OP_PADHV || o->op_type == OP_RV2HV); { - const char funny = o->op_type == OP_PADAV - || o->op_type == OP_RV2AV ? '@' : '%'; - if (o->op_type == OP_RV2AV || o->op_type == OP_RV2HV) { - GV *gv; - if (cUNOPo->op_first->op_type != OP_GV - || !(gv = cGVOPx_gv(cUNOPo->op_first))) - return NULL; - return varname(gv, funny, 0, NULL, 0, subscript_type); - } - return - varname(MUTABLE_GV(PL_compcv), funny, o->op_targ, NULL, 0, subscript_type); + const char funny = o->op_type == OP_PADAV + || o->op_type == OP_RV2AV ? '@' : '%'; + if (o->op_type == OP_RV2AV || o->op_type == OP_RV2HV) { + GV *gv; + if (cUNOPo->op_first->op_type != OP_GV + || !(gv = cGVOPx_gv(cUNOPo->op_first))) + return NULL; + return varname(gv, funny, 0, NULL, 0, subscript_type); + } + return + varname(MUTABLE_GV(PL_compcv), funny, o->op_targ, NULL, 0, subscript_type); } } @@ -1801,15 +1843,15 @@ static void S_op_pretty(pTHX_ const OP *o, SV **retsv, const char **retpv) { /* or not so pretty :-) */ if (o->op_type == OP_CONST) { - *retsv = cSVOPo_sv; - if (SvPOK(*retsv)) { - SV *sv = *retsv; - *retsv = sv_newmortal(); - pv_pretty(*retsv, SvPVX_const(sv), SvCUR(sv), 32, NULL, NULL, - PERL_PV_PRETTY_DUMP |PERL_PV_ESCAPE_UNI_DETECT); - } - else if (!SvOK(*retsv)) - *retpv = "undef"; + *retsv = cSVOPo_sv; + if (SvPOK(*retsv)) { + SV *sv = *retsv; + *retsv = sv_newmortal(); + pv_pretty(*retsv, SvPVX_const(sv), SvCUR(sv), 32, NULL, NULL, + PERL_PV_PRETTY_DUMP |PERL_PV_ESCAPE_UNI_DETECT); + } + else if (!SvOK(*retsv)) + *retpv = "undef"; } else *retpv = "..."; } @@ -1819,20 +1861,20 @@ S_scalar_slice_warning(pTHX_ const OP *o) { OP *kid; const bool h = o->op_type == OP_HSLICE - || (o->op_type == OP_NULL && o->op_targ == OP_HSLICE); + || (o->op_type == OP_NULL && o->op_targ == OP_HSLICE); const char lbrack = - h ? '{' : '['; + h ? '{' : '['; const char rbrack = - h ? '}' : ']'; + h ? '}' : ']'; SV *name; SV *keysv = NULL; /* just to silence compiler warnings */ const char *key = NULL; if (!(o->op_private & OPpSLICEWARNING)) - return; + return; if (PL_parser && PL_parser->error_count) - /* This warning can be nonsensical when there is a syntax error. */ - return; + /* This warning can be nonsensical when there is a syntax error. */ + return; kid = cLISTOPo->op_first; kid = OpSIBLING(kid); /* get past pushmark */ @@ -1860,7 +1902,7 @@ S_scalar_slice_warning(pTHX_ const OP *o) case OP_LOCALTIME: case OP_GMTIME: case OP_ENTEREVAL: - return; + return; } /* Don't warn if we have a nulled list either. */ @@ -1870,24 +1912,24 @@ S_scalar_slice_warning(pTHX_ const OP *o) assert(OpSIBLING(kid)); name = S_op_varname(aTHX_ OpSIBLING(kid)); if (!name) /* XS module fiddling with the op tree */ - return; + return; S_op_pretty(aTHX_ kid, &keysv, &key); assert(SvPOK(name)); sv_chop(name,SvPVX(name)+1); if (key) /* diag_listed_as: Scalar value @%s[%s] better written as $%s[%s] */ - Perl_warner(aTHX_ packWARN(WARN_SYNTAX), - "Scalar value @%" SVf "%c%s%c better written as $%" SVf - "%c%s%c", - SVfARG(name), lbrack, key, rbrack, SVfARG(name), - lbrack, key, rbrack); + Perl_warner(aTHX_ packWARN(WARN_SYNTAX), + "Scalar value @%" SVf "%c%s%c better written as $%" SVf + "%c%s%c", + SVfARG(name), lbrack, key, rbrack, SVfARG(name), + lbrack, key, rbrack); else /* diag_listed_as: Scalar value @%s[%s] better written as $%s[%s] */ - Perl_warner(aTHX_ packWARN(WARN_SYNTAX), - "Scalar value @%" SVf "%c%" SVf "%c better written as $%" - SVf "%c%" SVf "%c", - SVfARG(name), lbrack, SVfARG(keysv), rbrack, - SVfARG(name), lbrack, SVfARG(keysv), rbrack); + Perl_warner(aTHX_ packWARN(WARN_SYNTAX), + "Scalar value @%" SVf "%c%" SVf "%c better written as $%" + SVf "%c%" SVf "%c", + SVfARG(name), lbrack, SVfARG(keysv), rbrack, + SVfARG(name), lbrack, SVfARG(keysv), rbrack); } @@ -1990,7 +2032,7 @@ Perl_scalar(pTHX_ OP *o) break; case OP_SORT: - Perl_ck_warner(aTHX_ packWARN(WARN_VOID), "Useless use of sort in scalar context"); + Perl_ck_warner(aTHX_ packWARN(WARN_SCALAR), "Useless use of %s in scalar context", "sort"); break; case OP_KVHSLICE: @@ -2068,7 +2110,6 @@ Perl_scalar(pTHX_ OP *o) OP * Perl_scalarvoid(pTHX_ OP *arg) { - dVAR; OP *kid; SV* sv; OP *o = arg; @@ -2117,11 +2158,11 @@ Perl_scalarvoid(pTHX_ OP *arg) if (o->op_type == OP_REPEAT) scalar(cBINOPo->op_first); goto func_ops; - case OP_CONCAT: + case OP_CONCAT: if ((o->op_flags & OPf_STACKED) && - !(o->op_private & OPpCONCAT_NESTED)) + !(o->op_private & OPpCONCAT_NESTED)) break; - goto func_ops; + goto func_ops; case OP_SUBSTR: if (o->op_private == 4) break; @@ -2449,8 +2490,8 @@ S_listkids(pTHX_ OP *o) { if (o && o->op_flags & OPf_KIDS) { OP *kid; - for (kid = cLISTOPo->op_first; kid; kid = OpSIBLING(kid)) - list(kid); + for (kid = cLISTOPo->op_first; kid; kid = OpSIBLING(kid)) + list(kid); } return o; } @@ -2601,34 +2642,40 @@ Perl_list(pTHX_ OP *o) } /* while */ } +/* apply void context to non-final ops of a sequence */ static OP * -S_scalarseq(pTHX_ OP *o) +S_voidnonfinal(pTHX_ OP *o) { if (o) { - const OPCODE type = o->op_type; - - if (type == OP_LINESEQ || type == OP_SCOPE || - type == OP_LEAVE || type == OP_LEAVETRY) - { - OP *kid, *sib; - for (kid = cLISTOPo->op_first; kid; kid = sib) { - if ((sib = OpSIBLING(kid)) - && ( OpHAS_SIBLING(sib) || sib->op_type != OP_NULL - || ( sib->op_targ != OP_NEXTSTATE - && sib->op_targ != OP_DBSTATE ))) - { - scalarvoid(kid); - } - } - PL_curcop = &PL_compiling; - } - o->op_flags &= ~OPf_PARENS; - if (PL_hints & HINT_BLOCK_SCOPE) - o->op_flags |= OPf_PARENS; + const OPCODE type = o->op_type; + + if (type == OP_LINESEQ || type == OP_SCOPE || + type == OP_LEAVE || type == OP_LEAVETRY) + { + OP *kid = cLISTOPo->op_first, *sib; + if(type == OP_LEAVE) { + /* Don't put the OP_ENTER in void context */ + assert(kid->op_type == OP_ENTER); + kid = OpSIBLING(kid); + } + for (; kid; kid = sib) { + if ((sib = OpSIBLING(kid)) + && ( OpHAS_SIBLING(sib) || sib->op_type != OP_NULL + || ( sib->op_targ != OP_NEXTSTATE + && sib->op_targ != OP_DBSTATE ))) + { + scalarvoid(kid); + } + } + PL_curcop = &PL_compiling; + } + o->op_flags &= ~OPf_PARENS; + if (PL_hints & HINT_BLOCK_SCOPE) + o->op_flags |= OPf_PARENS; } else - o = newOP(OP_STUB, 0); + o = newOP(OP_STUB, 0); return o; } @@ -2638,7 +2685,7 @@ S_modkids(pTHX_ OP *o, I32 type) if (o && o->op_flags & OPf_KIDS) { OP *kid; for (kid = cLISTOPo->op_first; kid; kid = OpSIBLING(kid)) - op_lvalue(kid, type); + op_lvalue(kid, type); } return o; } @@ -2874,7 +2921,6 @@ S_sprintf_is_multiconcatable(pTHX_ OP *o,struct sprintf_ismc_info *info) STATIC void S_maybe_multiconcat(pTHX_ OP *o) { - dVAR; OP *lastkidop; /* the right-most of any kids unshifted onto o */ OP *topop; /* the top-most op in the concat tree (often equals o, unless there are assign/stringify ops above it */ @@ -3702,6 +3748,21 @@ Perl_optimize_optree(pTHX_ OP* o) } +#define warn_implicit_snail_cvsig(o) S_warn_implicit_snail_cvsig(aTHX_ o) +static void +S_warn_implicit_snail_cvsig(pTHX_ OP *o) +{ + CV *cv = PL_compcv; + while(cv && CvEVAL(cv)) + cv = CvOUTSIDE(cv); + + if(cv && CvSIGNATURE(cv)) + Perl_ck_warner_d(aTHX_ packWARN(WARN_EXPERIMENTAL__ARGS_ARRAY_WITH_SIGNATURES), + "Implicit use of @_ in %s with signatured subroutine is experimental", OP_DESC(o)); +} + +#define OP_ZOOM(o) (OP_TYPE_IS(o, OP_NULL) ? cUNOPx(o)->op_first : (o)) + /* helper for optimize_optree() which optimises one op then recurses * to optimise any children. */ @@ -3745,6 +3806,47 @@ S_optimize_op(pTHX_ OP* o) } break; + case OP_RV2AV: + { + OP *first = (o->op_flags & OPf_KIDS) ? cUNOPo->op_first : NULL; + CV *cv = PL_compcv; + while(cv && CvEVAL(cv)) + cv = CvOUTSIDE(cv); + + if(cv && CvSIGNATURE(cv) && + OP_TYPE_IS(first, OP_GV) && cGVOPx_gv(first) == PL_defgv) { + OP *parent = op_parent(o); + while(OP_TYPE_IS(parent, OP_NULL)) + parent = op_parent(parent); + + Perl_ck_warner_d(aTHX_ packWARN(WARN_EXPERIMENTAL__ARGS_ARRAY_WITH_SIGNATURES), + "Use of @_ in %s with signatured subroutine is experimental", OP_DESC(parent)); + } + break; + } + + case OP_SHIFT: + case OP_POP: + if(!CvUNIQUE(PL_compcv) && !(o->op_flags & OPf_KIDS)) + warn_implicit_snail_cvsig(o); + break; + + case OP_ENTERSUB: + if(!(o->op_flags & OPf_STACKED)) + warn_implicit_snail_cvsig(o); + break; + + case OP_GOTO: + { + OP *first = (o->op_flags & OPf_KIDS) ? cUNOPo->op_first : NULL; + OP *ffirst; + if(OP_TYPE_IS(first, OP_SREFGEN) && + (ffirst = OP_ZOOM(cUNOPx(first)->op_first)) && + OP_TYPE_IS(ffirst, OP_RV2CV)) + warn_implicit_snail_cvsig(o); + break; + } + default: break; } @@ -3877,16 +3979,16 @@ S_finalize_op(pTHX_ OP* o) && ckWARN(WARN_EXEC) && OpHAS_SIBLING(sib)) { - const OPCODE type = OpSIBLING(sib)->op_type; - if (type != OP_EXIT && type != OP_WARN && type != OP_DIE) { - const line_t oldline = CopLINE(PL_curcop); - CopLINE_set(PL_curcop, CopLINE((COP*)sib)); - Perl_warner(aTHX_ packWARN(WARN_EXEC), - "Statement unlikely to be reached"); - Perl_warner(aTHX_ packWARN(WARN_EXEC), - "\t(Maybe you meant system() when you said exec()?)\n"); - CopLINE_set(PL_curcop, oldline); - } + const OPCODE type = OpSIBLING(sib)->op_type; + if (type != OP_EXIT && type != OP_WARN && type != OP_DIE) { + const line_t oldline = CopLINE(PL_curcop); + CopLINE_set(PL_curcop, CopLINE((COP*)sib)); + Perl_warner(aTHX_ packWARN(WARN_EXEC), + "Statement unlikely to be reached"); + Perl_warner(aTHX_ packWARN(WARN_EXEC), + "\t(Maybe you meant system() when you said exec()?)\n"); + CopLINE_set(PL_curcop, oldline); + } } } break; @@ -3943,11 +4045,11 @@ S_finalize_op(pTHX_ OP* o) case OP_KVHSLICE: kid = OpSIBLING(cLISTOPo->op_first); - if (/* I bet there's always a pushmark... */ - OP_TYPE_ISNT_AND_WASNT_NN(kid, OP_LIST) - && OP_TYPE_ISNT_NN(kid, OP_CONST)) + if (/* I bet there's always a pushmark... */ + OP_TYPE_ISNT_AND_WASNT_NN(kid, OP_LIST) + && OP_TYPE_ISNT_NN(kid, OP_CONST)) { - break; + break; } key_op = (SVOP*)(kid->op_type == OP_CONST @@ -4036,19 +4138,19 @@ S_mark_padname_lvalue(pTHX_ PADNAME *pn) CV *cv = PL_compcv; PadnameLVALUE_on(pn); while (PadnameOUTER(pn) && PARENT_PAD_INDEX(pn)) { - cv = CvOUTSIDE(cv); + cv = CvOUTSIDE(cv); /* RT #127786: cv can be NULL due to an eval within the DB package * called from an anon sub - anon subs don't have CvOUTSIDE() set * unless they contain an eval, but calling eval within DB * pretends the eval was done in the caller's scope. */ - if (!cv) + if (!cv) break; - assert(CvPADLIST(cv)); - pn = - PadlistNAMESARRAY(CvPADLIST(cv))[PARENT_PAD_INDEX(pn)]; - assert(PadnameLEN(pn)); - PadnameLVALUE_on(pn); + assert(CvPADLIST(cv)); + pn = + PadlistNAMESARRAY(CvPADLIST(cv))[PARENT_PAD_INDEX(pn)]; + assert(PadnameLEN(pn)); + PadnameLVALUE_on(pn); } } @@ -4062,7 +4164,7 @@ S_vivifies(const OPCODE type) case OP_AELEMFAST: case OP_KVHSLICE: case OP_HELEM: case OP_AELEM: - return 1; + return 1; } return 0; } @@ -4079,7 +4181,6 @@ S_vivifies(const OPCODE type) static void S_lvref(pTHX_ OP *o, I32 type) { - dVAR; OP *kid; OP * top_op = o; @@ -4226,7 +4327,7 @@ S_potential_mod_type(I32 type) { /* Types that only potentially result in modification. */ return type == OP_GREPSTART || type == OP_ENTERSUB - || type == OP_REFGEN || type == OP_LEAVESUBLV; + || type == OP_REFGEN || type == OP_LEAVESUBLV; } @@ -4257,11 +4358,10 @@ op_lvalue(). The flags param has these bits: OP * Perl_op_lvalue_flags(pTHX_ OP *o, I32 type, U32 flags) { - dVAR; OP *top_op = o; if (!o || (PL_parser && PL_parser->error_count)) - return o; + return o; while (1) { OP *kid; @@ -4270,9 +4370,9 @@ Perl_op_lvalue_flags(pTHX_ OP *o, I32 type, U32 flags) OP *next_kid = NULL; if ((o->op_private & OPpTARGET_MY) - && (PL_opargs[o->op_type] & OA_TARGLEX))/* OPp share the meaning */ + && (PL_opargs[o->op_type] & OA_TARGLEX))/* OPp share the meaning */ { - goto do_next; + goto do_next; } /* elements of a list might be in void context because the list is @@ -4284,71 +4384,73 @@ Perl_op_lvalue_flags(pTHX_ OP *o, I32 type, U32 flags) switch (o->op_type) { case OP_UNDEF: - PL_modcount++; - goto do_next; + if (type == OP_SASSIGN) + goto nomod; + PL_modcount++; + goto do_next; case OP_STUB: - if ((o->op_flags & OPf_PARENS)) - break; - goto nomod; + if ((o->op_flags & OPf_PARENS)) + break; + goto nomod; case OP_ENTERSUB: - if ((type == OP_UNDEF || type == OP_REFGEN || type == OP_LOCK) && - !(o->op_flags & OPf_STACKED)) { + if ((type == OP_UNDEF || type == OP_REFGEN || type == OP_LOCK) && + !(o->op_flags & OPf_STACKED)) { OpTYPE_set(o, OP_RV2CV); /* entersub => rv2cv */ - assert(cUNOPo->op_first->op_type == OP_NULL); - op_null(((LISTOP*)cUNOPo->op_first)->op_first);/* disable pushmark */ - break; - } - else { /* lvalue subroutine call */ - o->op_private |= OPpLVAL_INTRO; - PL_modcount = RETURN_UNLIMITED_NUMBER; - if (S_potential_mod_type(type)) { - o->op_private |= OPpENTERSUB_INARGS; - break; - } - else { /* Compile-time error message: */ - OP *kid = cUNOPo->op_first; - CV *cv; - GV *gv; + assert(cUNOPo->op_first->op_type == OP_NULL); + op_null(((LISTOP*)cUNOPo->op_first)->op_first);/* disable pushmark */ + break; + } + else { /* lvalue subroutine call */ + o->op_private |= OPpLVAL_INTRO; + PL_modcount = RETURN_UNLIMITED_NUMBER; + if (S_potential_mod_type(type)) { + o->op_private |= OPpENTERSUB_INARGS; + break; + } + else { /* Compile-time error message: */ + OP *kid = cUNOPo->op_first; + CV *cv; + GV *gv; SV *namesv; - if (kid->op_type != OP_PUSHMARK) { - if (kid->op_type != OP_NULL || kid->op_targ != OP_LIST) - Perl_croak(aTHX_ - "panic: unexpected lvalue entersub " - "args: type/targ %ld:%" UVuf, - (long)kid->op_type, (UV)kid->op_targ); - kid = kLISTOP->op_first; - } - while (OpHAS_SIBLING(kid)) - kid = OpSIBLING(kid); - if (!(kid->op_type == OP_NULL && kid->op_targ == OP_RV2CV)) { - break; /* Postpone until runtime */ - } - - kid = kUNOP->op_first; - if (kid->op_type == OP_NULL && kid->op_targ == OP_RV2SV) - kid = kUNOP->op_first; - if (kid->op_type == OP_NULL) - Perl_croak(aTHX_ - "Unexpected constant lvalue entersub " - "entry via type/targ %ld:%" UVuf, - (long)kid->op_type, (UV)kid->op_targ); - if (kid->op_type != OP_GV) { - break; - } - - gv = kGVOP_gv; - cv = isGV(gv) - ? GvCV(gv) - : SvROK(gv) && SvTYPE(SvRV(gv)) == SVt_PVCV - ? MUTABLE_CV(SvRV(gv)) - : NULL; - if (!cv) - break; - if (CvLVALUE(cv)) - break; + if (kid->op_type != OP_PUSHMARK) { + if (kid->op_type != OP_NULL || kid->op_targ != OP_LIST) + Perl_croak(aTHX_ + "panic: unexpected lvalue entersub " + "args: type/targ %ld:%" UVuf, + (long)kid->op_type, (UV)kid->op_targ); + kid = kLISTOP->op_first; + } + while (OpHAS_SIBLING(kid)) + kid = OpSIBLING(kid); + if (!(kid->op_type == OP_NULL && kid->op_targ == OP_RV2CV)) { + break; /* Postpone until runtime */ + } + + kid = kUNOP->op_first; + if (kid->op_type == OP_NULL && kid->op_targ == OP_RV2SV) + kid = kUNOP->op_first; + if (kid->op_type == OP_NULL) + Perl_croak(aTHX_ + "panic: unexpected constant lvalue entersub " + "entry via type/targ %ld:%" UVuf, + (long)kid->op_type, (UV)kid->op_targ); + if (kid->op_type != OP_GV) { + break; + } + + gv = kGVOP_gv; + cv = isGV(gv) + ? GvCV(gv) + : SvROK(gv) && SvTYPE(SvRV(gv)) == SVt_PVCV + ? MUTABLE_CV(SvRV(gv)) + : NULL; + if (!cv) + break; + if (CvLVALUE(cv)) + break; if (flags & OP_LVALUE_NO_CROAK) return NULL; @@ -4358,21 +4460,21 @@ Perl_op_lvalue_flags(pTHX_ OP *o, I32 type, U32 flags) SVfARG(namesv), PL_op_desc[type]), SvUTF8(namesv)); goto do_next; - } - } - /* FALLTHROUGH */ + } + } + /* FALLTHROUGH */ default: nomod: - if (flags & OP_LVALUE_NO_CROAK) return NULL; - /* grep, foreach, subcalls, refgen */ - if (S_potential_mod_type(type)) - break; - yyerror(Perl_form(aTHX_ "Can't modify %s in %s", - (o->op_type == OP_NULL && (o->op_flags & OPf_SPECIAL) - ? "do block" - : OP_DESC(o)), - type ? PL_op_desc[type] : "local")); - goto do_next; + if (flags & OP_LVALUE_NO_CROAK) return NULL; + /* grep, foreach, subcalls, refgen */ + if (S_potential_mod_type(type)) + break; + yyerror(Perl_form(aTHX_ "Can't modify %s in %s", + (o->op_type == OP_NULL && (o->op_flags & OPf_SPECIAL) + ? "do block" + : OP_DESC(o)), + type ? PL_op_desc[type] : "local")); + goto do_next; case OP_PREINC: case OP_PREDEC: @@ -4393,211 +4495,211 @@ Perl_op_lvalue_flags(pTHX_ OP *o, I32 type, U32 flags) case OP_I_MODULO: case OP_I_ADD: case OP_I_SUBTRACT: - if (!(o->op_flags & OPf_STACKED)) - goto nomod; - PL_modcount++; - break; + if (!(o->op_flags & OPf_STACKED)) + goto nomod; + PL_modcount++; + break; case OP_REPEAT: - if (o->op_flags & OPf_STACKED) { - PL_modcount++; - break; - } - if (!(o->op_private & OPpREPEAT_DOLIST)) - goto nomod; - else { - const I32 mods = PL_modcount; + if (o->op_flags & OPf_STACKED) { + PL_modcount++; + break; + } + if (!(o->op_private & OPpREPEAT_DOLIST)) + goto nomod; + else { + const I32 mods = PL_modcount; /* we recurse rather than iterate here because we need to * calculate and use the delta applied to PL_modcount by the * first child. So in something like * ($x, ($y) x 3) = split; * split knows that 4 elements are wanted */ - modkids(cBINOPo->op_first, type); - if (type != OP_AASSIGN) - goto nomod; - kid = cBINOPo->op_last; - if (kid->op_type == OP_CONST && SvIOK(kSVOP_sv)) { - const IV iv = SvIV(kSVOP_sv); - if (PL_modcount != RETURN_UNLIMITED_NUMBER) - PL_modcount = - mods + (PL_modcount - mods) * (iv < 0 ? 0 : iv); - } - else - PL_modcount = RETURN_UNLIMITED_NUMBER; - } - break; + modkids(cBINOPo->op_first, type); + if (type != OP_AASSIGN) + goto nomod; + kid = cBINOPo->op_last; + if (kid->op_type == OP_CONST && SvIOK(kSVOP_sv)) { + const IV iv = SvIV(kSVOP_sv); + if (PL_modcount != RETURN_UNLIMITED_NUMBER) + PL_modcount = + mods + (PL_modcount - mods) * (iv < 0 ? 0 : iv); + } + else + PL_modcount = RETURN_UNLIMITED_NUMBER; + } + break; case OP_COND_EXPR: - localize = 1; + localize = 1; next_kid = OpSIBLING(cUNOPo->op_first); - break; + break; case OP_RV2AV: case OP_RV2HV: - if (type == OP_REFGEN && o->op_flags & OPf_PARENS) { + if (type == OP_REFGEN && o->op_flags & OPf_PARENS) { PL_modcount = RETURN_UNLIMITED_NUMBER; /* Treat \(@foo) like ordinary list, but still mark it as modi- fiable since some contexts need to know. */ o->op_flags |= OPf_MOD; goto do_next; - } - /* FALLTHROUGH */ + } + /* FALLTHROUGH */ case OP_RV2GV: - if (scalar_mod_type(o, type)) - goto nomod; - ref(cUNOPo->op_first, o->op_type); - /* FALLTHROUGH */ + if (scalar_mod_type(o, type)) + goto nomod; + ref(cUNOPo->op_first, o->op_type); + /* FALLTHROUGH */ case OP_ASLICE: case OP_HSLICE: - localize = 1; - /* FALLTHROUGH */ + localize = 1; + /* FALLTHROUGH */ case OP_AASSIGN: - /* Do not apply the lvsub flag for rv2[ah]v in scalar context. */ - if (type == OP_LEAVESUBLV && ( - (o->op_type != OP_RV2AV && o->op_type != OP_RV2HV) - || (o->op_flags & OPf_WANT) != OPf_WANT_SCALAR - )) - o->op_private |= OPpMAYBE_LVSUB; - /* FALLTHROUGH */ + /* Do not apply the lvsub flag for rv2[ah]v in scalar context. */ + if (type == OP_LEAVESUBLV && ( + (o->op_type != OP_RV2AV && o->op_type != OP_RV2HV) + || (o->op_flags & OPf_WANT) != OPf_WANT_SCALAR + )) + o->op_private |= OPpMAYBE_LVSUB; + /* FALLTHROUGH */ case OP_NEXTSTATE: case OP_DBSTATE: PL_modcount = RETURN_UNLIMITED_NUMBER; - break; + break; case OP_KVHSLICE: case OP_KVASLICE: case OP_AKEYS: - if (type == OP_LEAVESUBLV) - o->op_private |= OPpMAYBE_LVSUB; + if (type == OP_LEAVESUBLV) + o->op_private |= OPpMAYBE_LVSUB; goto nomod; case OP_AVHVSWITCH: - if (type == OP_LEAVESUBLV - && (o->op_private & OPpAVHVSWITCH_MASK) + OP_EACH == OP_KEYS) - o->op_private |= OPpMAYBE_LVSUB; + if (type == OP_LEAVESUBLV + && (o->op_private & OPpAVHVSWITCH_MASK) + OP_EACH == OP_KEYS) + o->op_private |= OPpMAYBE_LVSUB; goto nomod; case OP_AV2ARYLEN: - PL_hints |= HINT_BLOCK_SCOPE; - if (type == OP_LEAVESUBLV) - o->op_private |= OPpMAYBE_LVSUB; - PL_modcount++; - break; + PL_hints |= HINT_BLOCK_SCOPE; + if (type == OP_LEAVESUBLV) + o->op_private |= OPpMAYBE_LVSUB; + PL_modcount++; + break; case OP_RV2SV: - ref(cUNOPo->op_first, o->op_type); - localize = 1; - /* FALLTHROUGH */ + ref(cUNOPo->op_first, o->op_type); + localize = 1; + /* FALLTHROUGH */ case OP_GV: - PL_hints |= HINT_BLOCK_SCOPE; + PL_hints |= HINT_BLOCK_SCOPE; /* FALLTHROUGH */ case OP_SASSIGN: case OP_ANDASSIGN: case OP_ORASSIGN: case OP_DORASSIGN: - PL_modcount++; - break; + PL_modcount++; + break; case OP_AELEMFAST: case OP_AELEMFAST_LEX: - localize = -1; - PL_modcount++; - break; + localize = -1; + PL_modcount++; + break; case OP_PADAV: case OP_PADHV: PL_modcount = RETURN_UNLIMITED_NUMBER; - if (type == OP_REFGEN && o->op_flags & OPf_PARENS) - { + if (type == OP_REFGEN && o->op_flags & OPf_PARENS) + { /* Treat \(@foo) like ordinary list, but still mark it as modi- fiable since some contexts need to know. */ - o->op_flags |= OPf_MOD; - goto do_next; - } - if (scalar_mod_type(o, type)) - goto nomod; - if ((o->op_flags & OPf_WANT) != OPf_WANT_SCALAR - && type == OP_LEAVESUBLV) - o->op_private |= OPpMAYBE_LVSUB; - /* FALLTHROUGH */ + o->op_flags |= OPf_MOD; + goto do_next; + } + if (scalar_mod_type(o, type)) + goto nomod; + if ((o->op_flags & OPf_WANT) != OPf_WANT_SCALAR + && type == OP_LEAVESUBLV) + o->op_private |= OPpMAYBE_LVSUB; + /* FALLTHROUGH */ case OP_PADSV: - PL_modcount++; - if (!type) /* local() */ - Perl_croak(aTHX_ "Can't localize lexical variable %" PNf, - PNfARG(PAD_COMPNAME(o->op_targ))); - if (!(o->op_private & OPpLVAL_INTRO) - || ( type != OP_SASSIGN && type != OP_AASSIGN - && PadnameIsSTATE(PAD_COMPNAME_SV(o->op_targ)) )) - S_mark_padname_lvalue(aTHX_ PAD_COMPNAME_SV(o->op_targ)); - break; + PL_modcount++; + if (!type) /* local() */ + Perl_croak(aTHX_ "Can't localize lexical variable %" PNf, + PNfARG(PAD_COMPNAME(o->op_targ))); + if (!(o->op_private & OPpLVAL_INTRO) + || ( type != OP_SASSIGN && type != OP_AASSIGN + && PadnameIsSTATE(PAD_COMPNAME_SV(o->op_targ)) )) + S_mark_padname_lvalue(aTHX_ PAD_COMPNAME_SV(o->op_targ)); + break; case OP_PUSHMARK: - localize = 0; - break; + localize = 0; + break; case OP_KEYS: - if (type != OP_LEAVESUBLV && !scalar_mod_type(NULL, type)) - goto nomod; - goto lvalue_func; + if (type != OP_LEAVESUBLV && !scalar_mod_type(NULL, type)) + goto nomod; + goto lvalue_func; case OP_SUBSTR: - if (o->op_private == 4) /* don't allow 4 arg substr as lvalue */ - goto nomod; - /* FALLTHROUGH */ + if (o->op_private == 4) /* don't allow 4 arg substr as lvalue */ + goto nomod; + /* FALLTHROUGH */ case OP_POS: case OP_VEC: lvalue_func: - if (type == OP_LEAVESUBLV) - o->op_private |= OPpMAYBE_LVSUB; - if (o->op_flags & OPf_KIDS && OpHAS_SIBLING(cBINOPo->op_first)) { + if (type == OP_LEAVESUBLV) + o->op_private |= OPpMAYBE_LVSUB; + if (o->op_flags & OPf_KIDS && OpHAS_SIBLING(cBINOPo->op_first)) { /* we recurse rather than iterate here because the child * needs to be processed with a different 'type' parameter */ - /* substr and vec */ - /* If this op is in merely potential (non-fatal) modifiable - context, then apply OP_ENTERSUB context to - the kid op (to avoid croaking). Other- - wise pass this op’s own type so the correct op is mentioned - in error messages. */ - op_lvalue(OpSIBLING(cBINOPo->op_first), - S_potential_mod_type(type) - ? (I32)OP_ENTERSUB - : o->op_type); - } - break; + /* substr and vec */ + /* If this op is in merely potential (non-fatal) modifiable + context, then apply OP_ENTERSUB context to + the kid op (to avoid croaking). Other- + wise pass this op’s own type so the correct op is mentioned + in error messages. */ + op_lvalue(OpSIBLING(cBINOPo->op_first), + S_potential_mod_type(type) + ? (I32)OP_ENTERSUB + : o->op_type); + } + break; case OP_AELEM: case OP_HELEM: - ref(cBINOPo->op_first, o->op_type); - if (type == OP_ENTERSUB && - !(o->op_private & (OPpLVAL_INTRO | OPpDEREF))) - o->op_private |= OPpLVAL_DEFER; - if (type == OP_LEAVESUBLV) - o->op_private |= OPpMAYBE_LVSUB; - localize = 1; - PL_modcount++; - break; + ref(cBINOPo->op_first, o->op_type); + if (type == OP_ENTERSUB && + !(o->op_private & (OPpLVAL_INTRO | OPpDEREF))) + o->op_private |= OPpLVAL_DEFER; + if (type == OP_LEAVESUBLV) + o->op_private |= OPpMAYBE_LVSUB; + localize = 1; + PL_modcount++; + break; case OP_LEAVE: case OP_LEAVELOOP: - o->op_private |= OPpLVALUE; + o->op_private |= OPpLVALUE; /* FALLTHROUGH */ case OP_SCOPE: case OP_ENTER: case OP_LINESEQ: - localize = 0; - if (o->op_flags & OPf_KIDS) - next_kid = cLISTOPo->op_last; - break; + localize = 0; + if (o->op_flags & OPf_KIDS) + next_kid = cLISTOPo->op_last; + break; case OP_NULL: - localize = 0; - if (o->op_flags & OPf_SPECIAL) /* do BLOCK */ - goto nomod; - else if (!(o->op_flags & OPf_KIDS)) - break; + localize = 0; + if (o->op_flags & OPf_SPECIAL) /* do BLOCK */ + goto nomod; + else if (!(o->op_flags & OPf_KIDS)) + break; - if (o->op_targ != OP_LIST) { + if (o->op_targ != OP_LIST) { OP *sib = OpSIBLING(cLISTOPo->op_first); /* OP_TRANS and OP_TRANSR with argument have a weird optree * that looks like @@ -4627,79 +4729,79 @@ Perl_op_lvalue_flags(pTHX_ OP *o, I32 type, U32 flags) assert( !OpHAS_SIBLING(next_kid) || !OpHAS_SIBLING(OpSIBLING(next_kid))); break; - } - /* FALLTHROUGH */ + } + /* FALLTHROUGH */ case OP_LIST: - localize = 0; - next_kid = cLISTOPo->op_first; - break; + localize = 0; + next_kid = cLISTOPo->op_first; + break; case OP_COREARGS: - goto do_next; + goto do_next; case OP_AND: case OP_OR: - if (type == OP_LEAVESUBLV - || !S_vivifies(cLOGOPo->op_first->op_type)) - next_kid = cLOGOPo->op_first; - else if (type == OP_LEAVESUBLV - || !S_vivifies(OpSIBLING(cLOGOPo->op_first)->op_type)) - next_kid = OpSIBLING(cLOGOPo->op_first); - goto nomod; + if (type == OP_LEAVESUBLV + || !S_vivifies(cLOGOPo->op_first->op_type)) + next_kid = cLOGOPo->op_first; + else if (type == OP_LEAVESUBLV + || !S_vivifies(OpSIBLING(cLOGOPo->op_first)->op_type)) + next_kid = OpSIBLING(cLOGOPo->op_first); + goto nomod; case OP_SREFGEN: - if (type == OP_NULL) { /* local */ - local_refgen: - if (!FEATURE_MYREF_IS_ENABLED) - Perl_croak(aTHX_ "The experimental declared_refs " - "feature is not enabled"); - Perl_ck_warner_d(aTHX_ - packWARN(WARN_EXPERIMENTAL__DECLARED_REFS), - "Declaring references is experimental"); - next_kid = cUNOPo->op_first; - goto do_next; - } - if (type != OP_AASSIGN && type != OP_SASSIGN - && type != OP_ENTERLOOP) - goto nomod; - /* Don’t bother applying lvalue context to the ex-list. */ - kid = cUNOPx(cUNOPo->op_first)->op_first; - assert (!OpHAS_SIBLING(kid)); - goto kid_2lvref; + if (type == OP_NULL) { /* local */ + local_refgen: + if (!FEATURE_MYREF_IS_ENABLED) + Perl_croak(aTHX_ "The experimental declared_refs " + "feature is not enabled"); + Perl_ck_warner_d(aTHX_ + packWARN(WARN_EXPERIMENTAL__DECLARED_REFS), + "Declaring references is experimental"); + next_kid = cUNOPo->op_first; + goto do_next; + } + if (type != OP_AASSIGN && type != OP_SASSIGN + && type != OP_ENTERLOOP) + goto nomod; + /* Don’t bother applying lvalue context to the ex-list. */ + kid = cUNOPx(cUNOPo->op_first)->op_first; + assert (!OpHAS_SIBLING(kid)); + goto kid_2lvref; case OP_REFGEN: - if (type == OP_NULL) /* local */ - goto local_refgen; - if (type != OP_AASSIGN) goto nomod; - kid = cUNOPo->op_first; + if (type == OP_NULL) /* local */ + goto local_refgen; + if (type != OP_AASSIGN) goto nomod; + kid = cUNOPo->op_first; kid_2lvref: - { - const U8 ec = PL_parser ? PL_parser->error_count : 0; - S_lvref(aTHX_ kid, type); - if (!PL_parser || PL_parser->error_count == ec) { - if (!FEATURE_REFALIASING_IS_ENABLED) - Perl_croak(aTHX_ - "Experimental aliasing via reference not enabled"); - Perl_ck_warner_d(aTHX_ - packWARN(WARN_EXPERIMENTAL__REFALIASING), - "Aliasing via reference is experimental"); - } - } - if (o->op_type == OP_REFGEN) - op_null(cUNOPx(cUNOPo->op_first)->op_first); /* pushmark */ - op_null(o); - goto do_next; + { + const U8 ec = PL_parser ? PL_parser->error_count : 0; + S_lvref(aTHX_ kid, type); + if (!PL_parser || PL_parser->error_count == ec) { + if (!FEATURE_REFALIASING_IS_ENABLED) + Perl_croak(aTHX_ + "Experimental aliasing via reference not enabled"); + Perl_ck_warner_d(aTHX_ + packWARN(WARN_EXPERIMENTAL__REFALIASING), + "Aliasing via reference is experimental"); + } + } + if (o->op_type == OP_REFGEN) + op_null(cUNOPx(cUNOPo->op_first)->op_first); /* pushmark */ + op_null(o); + goto do_next; case OP_SPLIT: if ((o->op_private & OPpSPLIT_ASSIGN)) { - /* This is actually @array = split. */ - PL_modcount = RETURN_UNLIMITED_NUMBER; - break; - } - goto nomod; + /* This is actually @array = split. */ + PL_modcount = RETURN_UNLIMITED_NUMBER; + break; + } + goto nomod; case OP_SCALAR: - op_lvalue(cUNOPo->op_first, OP_ENTERSUB); - goto nomod; + op_lvalue(cUNOPo->op_first, OP_ENTERSUB); + goto nomod; } /* [20011101.069 (#7861)] File test operators interpret OPf_REF to mean that @@ -4712,25 +4814,25 @@ Perl_op_lvalue_flags(pTHX_ OP *o, I32 type, U32 flags) o->op_flags |= OPf_MOD; if (type == OP_AASSIGN || type == OP_SASSIGN) - o->op_flags |= OPf_SPECIAL - |(o->op_type == OP_ENTERSUB ? 0 : OPf_REF); + o->op_flags |= OPf_SPECIAL + |(o->op_type == OP_ENTERSUB ? 0 : OPf_REF); else if (!type) { /* local() */ - switch (localize) { - case 1: - o->op_private |= OPpLVAL_INTRO; - o->op_flags &= ~OPf_SPECIAL; - PL_hints |= HINT_BLOCK_SCOPE; - break; - case 0: - break; - case -1: - Perl_ck_warner(aTHX_ packWARN(WARN_SYNTAX), - "Useless localization of %s", OP_DESC(o)); - } + switch (localize) { + case 1: + o->op_private |= OPpLVAL_INTRO; + o->op_flags &= ~OPf_SPECIAL; + PL_hints |= HINT_BLOCK_SCOPE; + break; + case 0: + break; + case -1: + Perl_ck_warner(aTHX_ packWARN(WARN_SYNTAX), + "Useless localization of %s", OP_DESC(o)); + } } else if (type != OP_GREPSTART && type != OP_ENTERSUB && type != OP_LEAVESUBLV && o->op_type != OP_ENTERSUB) - o->op_flags |= OPf_REF; + o->op_flags |= OPf_REF; do_next: while (!next_kid) { @@ -4744,7 +4846,7 @@ Perl_op_lvalue_flags(pTHX_ OP *o, I32 type, U32 flags) I32 ptype = parent->op_type; if ( (ptype == OP_NULL && parent->op_targ != OP_LIST) || ( (ptype == OP_AND || ptype == OP_OR) - && (type != OP_LEAVESUBLV + && (type != OP_LEAVESUBLV && S_vivifies(next_kid->op_type)) ) ) { @@ -4771,9 +4873,9 @@ S_scalar_mod_type(const OP *o, I32 type) switch (type) { case OP_POS: case OP_SASSIGN: - if (o && o->op_type == OP_RV2GV) - return FALSE; - /* FALLTHROUGH */ + if (o && o->op_type == OP_RV2GV) + return FALSE; + /* FALLTHROUGH */ case OP_PREINC: case OP_PREDEC: case OP_POSTINC: @@ -4817,9 +4919,9 @@ S_scalar_mod_type(const OP *o, I32 type) case OP_DORASSIGN: case OP_VEC: case OP_SUBSTR: - return TRUE; + return TRUE; default: - return FALSE; + return FALSE; } } @@ -4831,20 +4933,20 @@ S_is_handle_constructor(const OP *o, I32 numargs) switch (o->op_type) { case OP_PIPE_OP: case OP_SOCKPAIR: - if (numargs == 2) - return TRUE; - /* FALLTHROUGH */ + if (numargs == 2) + return TRUE; + /* FALLTHROUGH */ case OP_SYSOPEN: case OP_OPEN: case OP_SELECT: /* XXX c.f. SelectSaver.pm */ case OP_SOCKET: case OP_OPEN_DIR: case OP_ACCEPT: - if (numargs == 1) - return TRUE; - /* FALLTHROUGH */ + if (numargs == 1) + return TRUE; + /* FALLTHROUGH */ default: - return FALSE; + return FALSE; } } @@ -4854,7 +4956,7 @@ S_refkids(pTHX_ OP *o, I32 type) if (o && o->op_flags & OPf_KIDS) { OP *kid; for (kid = cLISTOPo->op_first; kid; kid = OpSIBLING(kid)) - ref(kid, type); + ref(kid, type); } return o; } @@ -4875,13 +4977,12 @@ S_refkids(pTHX_ OP *o, I32 type) OP * Perl_doref(pTHX_ OP *o, I32 type, bool set_op_ref) { - dVAR; OP * top_op = o; PERL_ARGS_ASSERT_DOREF; if (PL_parser && PL_parser->error_count) - return o; + return o; while (1) { switch (o->op_type) { @@ -5008,16 +5109,16 @@ S_dup_attrlist(pTHX_ OP *o) * are OP_CONST. We need to push the OP_CONST values. */ if (o->op_type == OP_CONST) - rop = newSVOP(OP_CONST, o->op_flags, SvREFCNT_inc_NN(cSVOPo->op_sv)); + rop = newSVOP(OP_CONST, o->op_flags, SvREFCNT_inc_NN(cSVOPo->op_sv)); else { - assert((o->op_type == OP_LIST) && (o->op_flags & OPf_KIDS)); - rop = NULL; - for (o = cLISTOPo->op_first; o; o = OpSIBLING(o)) { - if (o->op_type == OP_CONST) - rop = op_append_elem(OP_LIST, rop, - newSVOP(OP_CONST, o->op_flags, - SvREFCNT_inc_NN(cSVOPo->op_sv))); - } + assert((o->op_type == OP_LIST) && (o->op_flags & OPf_KIDS)); + rop = NULL; + for (o = cLISTOPo->op_first; o; o = OpSIBLING(o)) { + if (o->op_type == OP_CONST) + rop = op_append_elem(OP_LIST, rop, + newSVOP(OP_CONST, o->op_flags, + SvREFCNT_inc_NN(cSVOPo->op_sv))); + } } return rop; } @@ -5056,20 +5157,20 @@ S_apply_attrs_my(pTHX_ HV *stash, OP *target, OP *attrs, OP **imopsp) PERL_ARGS_ASSERT_APPLY_ATTRS_MY; if (!attrs) - return; + return; assert(target->op_type == OP_PADSV || - target->op_type == OP_PADHV || - target->op_type == OP_PADAV); + target->op_type == OP_PADHV || + target->op_type == OP_PADAV); /* Ensure that attributes.pm is loaded. */ /* Don't force the C if we don't need it. */ svp = hv_fetchs(GvHVn(PL_incgv), ATTRSMODULE_PM, FALSE); if (svp && *svp != &PL_sv_undef) - NOOP; /* already in %INC */ + NOOP; /* already in %INC */ else - Perl_load_module(aTHX_ PERL_LOADMOD_NOIMPORT, - newSVpvs(ATTRSMODULE), NULL); + Perl_load_module(aTHX_ PERL_LOADMOD_NOIMPORT, + newSVpvs(ATTRSMODULE), NULL); /* Need package name for method call. */ pack = newSVOP(OP_CONST, 0, newSVpvs(ATTRSMODULE)); @@ -5080,18 +5181,18 @@ S_apply_attrs_my(pTHX_ HV *stash, OP *target, OP *attrs, OP **imopsp) arg = newOP(OP_PADSV, 0); arg->op_targ = target->op_targ; arg = op_prepend_elem(OP_LIST, - newSVOP(OP_CONST, 0, stashsv), - op_prepend_elem(OP_LIST, - newUNOP(OP_REFGEN, 0, - arg), - dup_attrlist(attrs))); + newSVOP(OP_CONST, 0, stashsv), + op_prepend_elem(OP_LIST, + newUNOP(OP_REFGEN, 0, + arg), + dup_attrlist(attrs))); /* Fake up a method call to import */ meth = newSVpvs_share("import"); imop = op_convert_list(OP_ENTERSUB, OPf_STACKED|OPf_SPECIAL|OPf_WANT_VOID, - op_append_elem(OP_LIST, - op_prepend_elem(OP_LIST, pack, arg), - newMETHOP_named(OP_METHOD_NAMED, 0, meth))); + op_append_elem(OP_LIST, + op_prepend_elem(OP_LIST, pack, arg), + newMETHOP_named(OP_METHOD_NAMED, 0, meth))); /* Combine the ops. */ *imopsp = op_append_elem(OP_LIST, *imopsp, imop); @@ -5138,12 +5239,12 @@ Perl_apply_attrs_string(pTHX_ const char *stashpv, CV *cv, } Perl_load_module(aTHX_ PERL_LOADMOD_IMPORT_OPS, - newSVpvs(ATTRSMODULE), + newSVpvs(ATTRSMODULE), NULL, op_prepend_elem(OP_LIST, - newSVOP(OP_CONST, 0, newSVpv(stashpv,0)), - op_prepend_elem(OP_LIST, - newSVOP(OP_CONST, 0, - newRV(MUTABLE_SV(cv))), + newSVOP(OP_CONST, 0, newSVpv(stashpv,0)), + op_prepend_elem(OP_LIST, + newSVOP(OP_CONST, 0, + newRV(MUTABLE_SV(cv))), attrs))); } @@ -5275,72 +5376,72 @@ S_my_kid(pTHX_ OP *o, OP *attrs, OP **imopsp) PERL_ARGS_ASSERT_MY_KID; if (!o || (PL_parser && PL_parser->error_count)) - return o; + return o; type = o->op_type; if (OP_TYPE_IS_OR_WAS(o, OP_LIST)) { OP *kid; for (kid = cLISTOPo->op_first; kid; kid = OpSIBLING(kid)) - my_kid(kid, attrs, imopsp); - return o; + my_kid(kid, attrs, imopsp); + return o; } else if (type == OP_UNDEF || type == OP_STUB) { - return o; + return o; } else if (type == OP_RV2SV || /* "our" declaration */ - type == OP_RV2AV || - type == OP_RV2HV) { - if (cUNOPo->op_first->op_type != OP_GV) { /* MJD 20011224 */ - S_cant_declare(aTHX_ o); - } else if (attrs) { - GV * const gv = cGVOPx_gv(cUNOPo->op_first); - assert(PL_parser); - PL_parser->in_my = FALSE; - PL_parser->in_my_stash = NULL; - apply_attrs(GvSTASH(gv), - (type == OP_RV2SV ? GvSVn(gv) : - type == OP_RV2AV ? MUTABLE_SV(GvAVn(gv)) : - type == OP_RV2HV ? MUTABLE_SV(GvHVn(gv)) : MUTABLE_SV(gv)), - attrs); - } - o->op_private |= OPpOUR_INTRO; - return o; + type == OP_RV2AV || + type == OP_RV2HV) { + if (cUNOPo->op_first->op_type != OP_GV) { /* MJD 20011224 */ + S_cant_declare(aTHX_ o); + } else if (attrs) { + GV * const gv = cGVOPx_gv(cUNOPo->op_first); + assert(PL_parser); + PL_parser->in_my = FALSE; + PL_parser->in_my_stash = NULL; + apply_attrs(GvSTASH(gv), + (type == OP_RV2SV ? GvSVn(gv) : + type == OP_RV2AV ? MUTABLE_SV(GvAVn(gv)) : + type == OP_RV2HV ? MUTABLE_SV(GvHVn(gv)) : MUTABLE_SV(gv)), + attrs); + } + o->op_private |= OPpOUR_INTRO; + return o; } else if (type == OP_REFGEN || type == OP_SREFGEN) { - if (!FEATURE_MYREF_IS_ENABLED) - Perl_croak(aTHX_ "The experimental declared_refs " - "feature is not enabled"); - Perl_ck_warner_d(aTHX_ - packWARN(WARN_EXPERIMENTAL__DECLARED_REFS), - "Declaring references is experimental"); - /* Kid is a nulled OP_LIST, handled above. */ - my_kid(cUNOPo->op_first, attrs, imopsp); - return o; + if (!FEATURE_MYREF_IS_ENABLED) + Perl_croak(aTHX_ "The experimental declared_refs " + "feature is not enabled"); + Perl_ck_warner_d(aTHX_ + packWARN(WARN_EXPERIMENTAL__DECLARED_REFS), + "Declaring references is experimental"); + /* Kid is a nulled OP_LIST, handled above. */ + my_kid(cUNOPo->op_first, attrs, imopsp); + return o; } else if (type != OP_PADSV && - type != OP_PADAV && - type != OP_PADHV && - type != OP_PUSHMARK) + type != OP_PADAV && + type != OP_PADHV && + type != OP_PUSHMARK) { - S_cant_declare(aTHX_ o); - return o; + S_cant_declare(aTHX_ o); + return o; } else if (attrs && type != OP_PUSHMARK) { - HV *stash; + HV *stash; assert(PL_parser); - PL_parser->in_my = FALSE; - PL_parser->in_my_stash = NULL; + PL_parser->in_my = FALSE; + PL_parser->in_my_stash = NULL; - /* check for C when deciding package */ - stash = PAD_COMPNAME_TYPE(o->op_targ); - if (!stash) - stash = PL_curstash; - apply_attrs_my(stash, o, attrs, imopsp); + /* check for C when deciding package */ + stash = PAD_COMPNAME_TYPE(o->op_targ); + if (!stash) + stash = PL_curstash; + apply_attrs_my(stash, o, attrs, imopsp); } o->op_flags |= OPf_MOD; o->op_private |= OPpLVAL_INTRO; if (stately) - o->op_private |= OPpPAD_STATE; + o->op_private |= OPpPAD_STATE; return o; } @@ -5356,35 +5457,35 @@ Perl_my_attrs(pTHX_ OP *o, OP *attrs) C< our(%x); > executing in list mode rather than void mode */ #if 0 if (o->op_flags & OPf_PARENS) - list(o); + list(o); else - maybe_scalar = 1; + maybe_scalar = 1; #else maybe_scalar = 1; #endif if (attrs) - SAVEFREEOP(attrs); + SAVEFREEOP(attrs); rops = NULL; o = my_kid(o, attrs, &rops); if (rops) { - if (maybe_scalar && o->op_type == OP_PADSV) { - o = scalar(op_append_list(OP_LIST, rops, o)); - o->op_private |= OPpLVAL_INTRO; - } - else { - /* The listop in rops might have a pushmark at the beginning, - which will mess up list assignment. */ - LISTOP * const lrops = (LISTOP *)rops; /* for brevity */ - if (rops->op_type == OP_LIST && - lrops->op_first && lrops->op_first->op_type == OP_PUSHMARK) - { - OP * const pushmark = lrops->op_first; + if (maybe_scalar && o->op_type == OP_PADSV) { + o = scalar(op_append_list(OP_LIST, rops, o)); + o->op_private |= OPpLVAL_INTRO; + } + else { + /* The listop in rops might have a pushmark at the beginning, + which will mess up list assignment. */ + LISTOP * const lrops = (LISTOP *)rops; /* for brevity */ + if (rops->op_type == OP_LIST && + lrops->op_first && lrops->op_first->op_type == OP_PUSHMARK) + { + OP * const pushmark = lrops->op_first; /* excise pushmark */ op_sibling_splice(rops, NULL, 1, NULL); - op_free(pushmark); - } - o = op_append_list(OP_LIST, o, rops); - } + op_free(pushmark); + } + o = op_append_list(OP_LIST, o, rops); + } } PL_parser->in_my = FALSE; PL_parser->in_my_stash = NULL; @@ -5396,7 +5497,7 @@ Perl_sawparens(pTHX_ OP *o) { PERL_UNUSED_CONTEXT; if (o) - o->op_flags |= OPf_PARENS; + o->op_flags |= OPf_PARENS; return o; } @@ -5411,53 +5512,53 @@ Perl_bind_match(pTHX_ I32 type, OP *left, OP *right) PERL_ARGS_ASSERT_BIND_MATCH; if ( (ltype == OP_RV2AV || ltype == OP_RV2HV || ltype == OP_PADAV - || ltype == OP_PADHV) && ckWARN(WARN_MISC)) + || ltype == OP_PADHV) && ckWARN(WARN_MISC)) { const char * const desc - = PL_op_desc[( - rtype == OP_SUBST || rtype == OP_TRANS - || rtype == OP_TRANSR - ) - ? (int)rtype : OP_MATCH]; + = PL_op_desc[( + rtype == OP_SUBST || rtype == OP_TRANS + || rtype == OP_TRANSR + ) + ? (int)rtype : OP_MATCH]; const bool isary = ltype == OP_RV2AV || ltype == OP_PADAV; SV * const name = - S_op_varname(aTHX_ left); + S_op_varname(aTHX_ left); if (name) - Perl_warner(aTHX_ packWARN(WARN_MISC), + Perl_warner(aTHX_ packWARN(WARN_MISC), "Applying %s to %" SVf " will act on scalar(%" SVf ")", desc, SVfARG(name), SVfARG(name)); else { - const char * const sample = (isary - ? "@array" : "%hash"); - Perl_warner(aTHX_ packWARN(WARN_MISC), + const char * const sample = (isary + ? "@array" : "%hash"); + Perl_warner(aTHX_ packWARN(WARN_MISC), "Applying %s to %s will act on scalar(%s)", desc, sample, sample); } } if (rtype == OP_CONST && - cSVOPx(right)->op_private & OPpCONST_BARE && - cSVOPx(right)->op_private & OPpCONST_STRICT) + cSVOPx(right)->op_private & OPpCONST_BARE && + cSVOPx(right)->op_private & OPpCONST_STRICT) { - no_bareword_allowed(right); + no_bareword_allowed(right); } /* !~ doesn't make sense with /r, so error on it for now */ if (rtype == OP_SUBST && (cPMOPx(right)->op_pmflags & PMf_NONDESTRUCT) && - type == OP_NOT) - /* diag_listed_as: Using !~ with %s doesn't make sense */ - yyerror("Using !~ with s///r doesn't make sense"); + type == OP_NOT) + /* diag_listed_as: Using !~ with %s doesn't make sense */ + yyerror("Using !~ with s///r doesn't make sense"); if (rtype == OP_TRANSR && type == OP_NOT) - /* diag_listed_as: Using !~ with %s doesn't make sense */ - yyerror("Using !~ with tr///r doesn't make sense"); + /* diag_listed_as: Using !~ with %s doesn't make sense */ + yyerror("Using !~ with tr///r doesn't make sense"); ismatchop = (rtype == OP_MATCH || - rtype == OP_SUBST || - rtype == OP_TRANS || rtype == OP_TRANSR) - && !(right->op_flags & OPf_SPECIAL); + rtype == OP_SUBST || + rtype == OP_TRANS || rtype == OP_TRANSR) + && !(right->op_flags & OPf_SPECIAL); if (ismatchop && right->op_private & OPpTARGET_MY) { - right->op_targ = 0; - right->op_private &= ~OPpTARGET_MY; + right->op_targ = 0; + right->op_private &= ~OPpTARGET_MY; } if (!(right->op_flags & OPf_STACKED) && !right->op_targ && ismatchop) { if (left->op_type == OP_PADSV @@ -5472,42 +5573,41 @@ Perl_bind_match(pTHX_ I32 type, OP *left, OP *right) if (rtype != OP_MATCH && rtype != OP_TRANSR && ! (rtype == OP_TRANS && right->op_private & OPpTRANS_IDENTICAL) && - ! (rtype == OP_SUBST && - (cPMOPx(right)->op_pmflags & PMf_NONDESTRUCT))) - left = op_lvalue(left, rtype); - if (right->op_type == OP_TRANS || right->op_type == OP_TRANSR) - o = newBINOP(OP_NULL, OPf_STACKED, scalar(left), right); - else - o = op_prepend_elem(rtype, scalar(left), right); - } - if (type == OP_NOT) - return newUNOP(OP_NOT, 0, scalar(o)); - return o; + ! (rtype == OP_SUBST && + (cPMOPx(right)->op_pmflags & PMf_NONDESTRUCT))) + left = op_lvalue(left, rtype); + if (right->op_type == OP_TRANS || right->op_type == OP_TRANSR) + o = newBINOP(OP_NULL, OPf_STACKED, scalar(left), right); + else + o = op_prepend_elem(rtype, scalar(left), right); + } + if (type == OP_NOT) + return newUNOP(OP_NOT, 0, scalar(o)); + return o; } else - return bind_match(type, left, - pmruntime(newPMOP(OP_MATCH, 0), right, NULL, 0, 0)); + return bind_match(type, left, + pmruntime(newPMOP(OP_MATCH, 0), right, NULL, 0, 0)); } OP * Perl_invert(pTHX_ OP *o) { if (!o) - return NULL; + return NULL; return newUNOP(OP_NOT, OPf_SPECIAL, scalar(o)); } OP * Perl_cmpchain_start(pTHX_ I32 type, OP *left, OP *right) { - dVAR; BINOP *bop; OP *op; if (!left) - left = newOP(OP_NULL, 0); + left = newOP(OP_NULL, 0); if (!right) - right = newOP(OP_NULL, 0); + right = newOP(OP_NULL, 0); scalar(left); scalar(right); NewOp(0, bop, 1, BINOP); @@ -5526,36 +5626,35 @@ Perl_cmpchain_start(pTHX_ I32 type, OP *left, OP *right) OP * Perl_cmpchain_extend(pTHX_ I32 type, OP *ch, OP *right) { - dVAR; BINOP *bop; OP *op; PERL_ARGS_ASSERT_CMPCHAIN_EXTEND; if (!right) - right = newOP(OP_NULL, 0); + right = newOP(OP_NULL, 0); scalar(right); NewOp(0, bop, 1, BINOP); op = (OP*)bop; ASSUME((PL_opargs[type] & OA_CLASS_MASK) == OA_BINOP); OpTYPE_set(op, type); if (ch->op_type != OP_NULL) { - UNOP *lch; - OP *nch, *cleft, *cright; - NewOp(0, lch, 1, UNOP); - nch = (OP*)lch; - OpTYPE_set(nch, OP_NULL); - nch->op_flags = OPf_KIDS; - cleft = cBINOPx(ch)->op_first; - cright = cBINOPx(ch)->op_last; - cBINOPx(ch)->op_first = NULL; - cBINOPx(ch)->op_last = NULL; - cBINOPx(ch)->op_private = 0; - cBINOPx(ch)->op_flags = 0; - cUNOPx(nch)->op_first = cright; - OpMORESIB_set(cright, ch); - OpMORESIB_set(ch, cleft); - OpLASTSIB_set(cleft, nch); - ch = nch; + UNOP *lch; + OP *nch, *cleft, *cright; + NewOp(0, lch, 1, UNOP); + nch = (OP*)lch; + OpTYPE_set(nch, OP_NULL); + nch->op_flags = OPf_KIDS; + cleft = cBINOPx(ch)->op_first; + cright = cBINOPx(ch)->op_last; + cBINOPx(ch)->op_first = NULL; + cBINOPx(ch)->op_last = NULL; + cBINOPx(ch)->op_private = 0; + cBINOPx(ch)->op_flags = 0; + cUNOPx(nch)->op_first = cright; + OpMORESIB_set(cright, ch); + OpMORESIB_set(ch, cleft); + OpLASTSIB_set(cleft, nch); + ch = nch; } OpMORESIB_set(right, op); OpMORESIB_set(op, cUNOPx(ch)->op_first); @@ -5566,52 +5665,51 @@ Perl_cmpchain_extend(pTHX_ I32 type, OP *ch, OP *right) OP * Perl_cmpchain_finish(pTHX_ OP *ch) { - dVAR; PERL_ARGS_ASSERT_CMPCHAIN_FINISH; if (ch->op_type != OP_NULL) { - OPCODE cmpoptype = ch->op_type; - ch = CHECKOP(cmpoptype, ch); - if(!ch->op_next && ch->op_type == cmpoptype) - ch = fold_constants(op_integerize(op_std_init(ch))); - return ch; + OPCODE cmpoptype = ch->op_type; + ch = CHECKOP(cmpoptype, ch); + if(!ch->op_next && ch->op_type == cmpoptype) + ch = fold_constants(op_integerize(op_std_init(ch))); + return ch; } else { - OP *condop = NULL; - OP *rightarg = cUNOPx(ch)->op_first; - cUNOPx(ch)->op_first = OpSIBLING(rightarg); - OpLASTSIB_set(rightarg, NULL); - while (1) { - OP *cmpop = cUNOPx(ch)->op_first; - OP *leftarg = OpSIBLING(cmpop); - OPCODE cmpoptype = cmpop->op_type; - OP *nextrightarg; - bool is_last; - is_last = !(cUNOPx(ch)->op_first = OpSIBLING(leftarg)); - OpLASTSIB_set(cmpop, NULL); - OpLASTSIB_set(leftarg, NULL); - if (is_last) { - ch->op_flags = 0; - op_free(ch); - nextrightarg = NULL; - } else { - nextrightarg = newUNOP(OP_CMPCHAIN_DUP, 0, leftarg); - leftarg = newOP(OP_NULL, 0); - } - cBINOPx(cmpop)->op_first = leftarg; - cBINOPx(cmpop)->op_last = rightarg; - OpMORESIB_set(leftarg, rightarg); - OpLASTSIB_set(rightarg, cmpop); - cmpop->op_flags = OPf_KIDS; - cmpop->op_private = 2; - cmpop = CHECKOP(cmpoptype, cmpop); - if(!cmpop->op_next && cmpop->op_type == cmpoptype) - cmpop = op_integerize(op_std_init(cmpop)); - condop = condop ? newLOGOP(OP_CMPCHAIN_AND, 0, cmpop, condop) : - cmpop; - if (!nextrightarg) - return condop; - rightarg = nextrightarg; - } + OP *condop = NULL; + OP *rightarg = cUNOPx(ch)->op_first; + cUNOPx(ch)->op_first = OpSIBLING(rightarg); + OpLASTSIB_set(rightarg, NULL); + while (1) { + OP *cmpop = cUNOPx(ch)->op_first; + OP *leftarg = OpSIBLING(cmpop); + OPCODE cmpoptype = cmpop->op_type; + OP *nextrightarg; + bool is_last; + is_last = !(cUNOPx(ch)->op_first = OpSIBLING(leftarg)); + OpLASTSIB_set(cmpop, NULL); + OpLASTSIB_set(leftarg, NULL); + if (is_last) { + ch->op_flags = 0; + op_free(ch); + nextrightarg = NULL; + } else { + nextrightarg = newUNOP(OP_CMPCHAIN_DUP, 0, leftarg); + leftarg = newOP(OP_NULL, 0); + } + cBINOPx(cmpop)->op_first = leftarg; + cBINOPx(cmpop)->op_last = rightarg; + OpMORESIB_set(leftarg, rightarg); + OpLASTSIB_set(rightarg, cmpop); + cmpop->op_flags = OPf_KIDS; + cmpop->op_private = 2; + cmpop = CHECKOP(cmpoptype, cmpop); + if(!cmpop->op_next && cmpop->op_type == cmpoptype) + cmpop = op_integerize(op_std_init(cmpop)); + condop = condop ? newLOGOP(OP_CMPCHAIN_AND, 0, cmpop, condop) : + cmpop; + if (!nextrightarg) + return condop; + rightarg = nextrightarg; + } } } @@ -5632,29 +5730,28 @@ structure. OP * Perl_op_scope(pTHX_ OP *o) { - dVAR; if (o) { - if (o->op_flags & OPf_PARENS || PERLDB_NOOPT || TAINTING_get) { - o = op_prepend_elem(OP_LINESEQ, + if (o->op_flags & OPf_PARENS || PERLDB_NOOPT || TAINTING_get) { + o = op_prepend_elem(OP_LINESEQ, newOP(OP_ENTER, (o->op_flags & OPf_WANT)), o); OpTYPE_set(o, OP_LEAVE); - } - else if (o->op_type == OP_LINESEQ) { - OP *kid; + } + else if (o->op_type == OP_LINESEQ) { + OP *kid; OpTYPE_set(o, OP_SCOPE); - kid = ((LISTOP*)o)->op_first; - if (kid->op_type == OP_NEXTSTATE || kid->op_type == OP_DBSTATE) { - op_null(kid); - - /* The following deals with things like 'do {1 for 1}' */ - kid = OpSIBLING(kid); - if (kid && - (kid->op_type == OP_NEXTSTATE || kid->op_type == OP_DBSTATE)) - op_null(kid); - } - } - else - o = newLISTOP(OP_SCOPE, 0, o, NULL); + kid = ((LISTOP*)o)->op_first; + if (kid->op_type == OP_NEXTSTATE || kid->op_type == OP_DBSTATE) { + op_null(kid); + + /* The following deals with things like 'do {1 for 1}' */ + kid = OpSIBLING(kid); + if (kid && + (kid->op_type == OP_NEXTSTATE || kid->op_type == OP_DBSTATE)) + op_null(kid); + } + } + else + o = newLISTOP(OP_SCOPE, 0, o, NULL); } return o; } @@ -5663,10 +5760,10 @@ OP * Perl_op_unscope(pTHX_ OP *o) { if (o && o->op_type == OP_LINESEQ) { - OP *kid = cLISTOPo->op_first; - for(; kid; kid = OpSIBLING(kid)) - if (kid->op_type == OP_NEXTSTATE || kid->op_type == OP_DBSTATE) - op_null(kid); + OP *kid = cLISTOPo->op_first; + for(; kid; kid = OpSIBLING(kid)) + if (kid->op_type == OP_NEXTSTATE || kid->op_type == OP_DBSTATE) + op_null(kid); } return o; } @@ -5717,81 +5814,81 @@ OP* Perl_block_end(pTHX_ I32 floor, OP *seq) { const int needblockscope = PL_hints & HINT_BLOCK_SCOPE; - OP* retval = scalarseq(seq); + OP* retval = voidnonfinal(seq); OP *o; /* XXX Is the null PL_parser check necessary here? */ assert(PL_parser); /* Let’s find out under debugging builds. */ if (PL_parser && PL_parser->parsed_sub) { - o = newSTATEOP(0, NULL, NULL); - op_null(o); - retval = op_append_elem(OP_LINESEQ, retval, o); + o = newSTATEOP(0, NULL, NULL); + op_null(o); + retval = op_append_elem(OP_LINESEQ, retval, o); } CALL_BLOCK_HOOKS(bhk_pre_end, &retval); LEAVE_SCOPE(floor); if (needblockscope) - PL_hints |= HINT_BLOCK_SCOPE; /* propagate out */ + PL_hints |= HINT_BLOCK_SCOPE; /* propagate out */ o = pad_leavemy(); if (o) { - /* pad_leavemy has created a sequence of introcv ops for all my - subs declared in the block. We have to replicate that list with - clonecv ops, to deal with this situation: - - sub { - my sub s1; - my sub s2; - sub s1 { state sub foo { \&s2 } } - }->() - - Originally, I was going to have introcv clone the CV and turn - off the stale flag. Since &s1 is declared before &s2, the - introcv op for &s1 is executed (on sub entry) before the one for - &s2. But the &foo sub inside &s1 (which is cloned when &s1 is - cloned, since it is a state sub) closes over &s2 and expects - to see it in its outer CV’s pad. If the introcv op clones &s1, - then &s2 is still marked stale. Since &s1 is not active, and - &foo closes over &s1’s implicit entry for &s2, we get a ‘Varia- - ble will not stay shared’ warning. Because it is the same stub - that will be used when the introcv op for &s2 is executed, clos- - ing over it is safe. Hence, we have to turn off the stale flag - on all lexical subs in the block before we clone any of them. - Hence, having introcv clone the sub cannot work. So we create a - list of ops like this: - - lineseq - | - +-- introcv - | - +-- introcv - | - +-- introcv - | - . - . - . - | - +-- clonecv - | - +-- clonecv - | - +-- clonecv - | - . - . - . - */ - OP *kid = o->op_flags & OPf_KIDS ? cLISTOPo->op_first : o; - OP * const last = o->op_flags & OPf_KIDS ? cLISTOPo->op_last : o; - for (;; kid = OpSIBLING(kid)) { - OP *newkid = newOP(OP_CLONECV, 0); - newkid->op_targ = kid->op_targ; - o = op_append_elem(OP_LINESEQ, o, newkid); - if (kid == last) break; - } - retval = op_prepend_elem(OP_LINESEQ, o, retval); + /* pad_leavemy has created a sequence of introcv ops for all my + subs declared in the block. We have to replicate that list with + clonecv ops, to deal with this situation: + + sub { + my sub s1; + my sub s2; + sub s1 { state sub foo { \&s2 } } + }->() + + Originally, I was going to have introcv clone the CV and turn + off the stale flag. Since &s1 is declared before &s2, the + introcv op for &s1 is executed (on sub entry) before the one for + &s2. But the &foo sub inside &s1 (which is cloned when &s1 is + cloned, since it is a state sub) closes over &s2 and expects + to see it in its outer CV’s pad. If the introcv op clones &s1, + then &s2 is still marked stale. Since &s1 is not active, and + &foo closes over &s1’s implicit entry for &s2, we get a ‘Varia- + ble will not stay shared’ warning. Because it is the same stub + that will be used when the introcv op for &s2 is executed, clos- + ing over it is safe. Hence, we have to turn off the stale flag + on all lexical subs in the block before we clone any of them. + Hence, having introcv clone the sub cannot work. So we create a + list of ops like this: + + lineseq + | + +-- introcv + | + +-- introcv + | + +-- introcv + | + . + . + . + | + +-- clonecv + | + +-- clonecv + | + +-- clonecv + | + . + . + . + */ + OP *kid = o->op_flags & OPf_KIDS ? cLISTOPo->op_first : o; + OP * const last = o->op_flags & OPf_KIDS ? cLISTOPo->op_last : o; + for (;; kid = OpSIBLING(kid)) { + OP *newkid = newOP(OP_CLONECV, 0); + newkid->op_targ = kid->op_targ; + o = op_append_elem(OP_LINESEQ, o, newkid); + if (kid == last) break; + } + retval = op_prepend_elem(OP_LINESEQ, o, retval); } CALL_BLOCK_HOOKS(bhk_post_end, &retval); @@ -5800,7 +5897,7 @@ Perl_block_end(pTHX_ I32 floor, OP *seq) } /* -=head1 Compile-time scope hooks +=for apidoc_section $scope =for apidoc blockhook_register @@ -5826,35 +5923,35 @@ Perl_newPROG(pTHX_ OP *o) PERL_ARGS_ASSERT_NEWPROG; if (PL_in_eval) { - PERL_CONTEXT *cx; - I32 i; - if (PL_eval_root) - return; - PL_eval_root = newUNOP(OP_LEAVEEVAL, - ((PL_in_eval & EVAL_KEEPERR) - ? OPf_SPECIAL : 0), o); - - cx = CX_CUR(); - assert(CxTYPE(cx) == CXt_EVAL); - - if ((cx->blk_gimme & G_WANT) == G_VOID) - scalarvoid(PL_eval_root); - else if ((cx->blk_gimme & G_WANT) == G_ARRAY) - list(PL_eval_root); - else - scalar(PL_eval_root); + PERL_CONTEXT *cx; + I32 i; + if (PL_eval_root) + return; + PL_eval_root = newUNOP(OP_LEAVEEVAL, + ((PL_in_eval & EVAL_KEEPERR) + ? OPf_SPECIAL : 0), o); + + cx = CX_CUR(); + assert(CxTYPE(cx) == CXt_EVAL); + + if ((cx->blk_gimme & G_WANT) == G_VOID) + scalarvoid(PL_eval_root); + else if ((cx->blk_gimme & G_WANT) == G_LIST) + list(PL_eval_root); + else + scalar(PL_eval_root); start = op_linklist(PL_eval_root); - PL_eval_root->op_next = 0; - i = PL_savestack_ix; - SAVEFREEOP(o); - ENTER; + PL_eval_root->op_next = 0; + i = PL_savestack_ix; + SAVEFREEOP(o); + ENTER; S_process_optree(aTHX_ NULL, PL_eval_root, start); - LEAVE; - PL_savestack_ix = i; + LEAVE; + PL_savestack_ix = i; } else { - if (o->op_type == OP_STUB) { + if (o->op_type == OP_STUB) { /* This block is entered if nothing is compiled for the main program. This will be the case for an genuinely empty main program, or one which only has BEGIN blocks etc, so already @@ -5881,33 +5978,33 @@ Perl_newPROG(pTHX_ OP *o) promptly, and the exit code will remain 0. */ - PL_comppad_name = 0; - PL_compcv = 0; - S_op_destroy(aTHX_ o); - return; - } - PL_main_root = op_scope(sawparens(scalarvoid(o))); - PL_curcop = &PL_compiling; + PL_comppad_name = 0; + PL_compcv = 0; + S_op_destroy(aTHX_ o); + return; + } + PL_main_root = op_scope(sawparens(scalarvoid(o))); + PL_curcop = &PL_compiling; start = LINKLIST(PL_main_root); - PL_main_root->op_next = 0; + PL_main_root->op_next = 0; S_process_optree(aTHX_ NULL, PL_main_root, start); if (!PL_parser->error_count) /* on error, leave CV slabbed so that ops left lying around * will eb cleaned up. Else unslab */ cv_forget_slab(PL_compcv); - PL_compcv = 0; - - /* Register with debugger */ - if (PERLDB_INTER) { - CV * const cv = get_cvs("DB::postponed", 0); - if (cv) { - dSP; - PUSHMARK(SP); - XPUSHs(MUTABLE_SV(CopFILEGV(&PL_compiling))); - PUTBACK; - call_sv(MUTABLE_SV(cv), G_DISCARD); - } - } + PL_compcv = 0; + + /* Register with debugger */ + if (PERLDB_INTER) { + CV * const cv = get_cvs("DB::postponed", 0); + if (cv) { + dSP; + PUSHMARK(SP); + XPUSHs(MUTABLE_SV(CopFILEGV(&PL_compiling))); + PUTBACK; + call_sv(MUTABLE_SV(cv), G_DISCARD); + } + } } } @@ -5920,53 +6017,53 @@ Perl_localize(pTHX_ OP *o, I32 lex) /* [perl #17376]: this appears to be premature, and results in code such as C< our(%x); > executing in list mode rather than void mode */ #if 0 - list(o); + list(o); #else - NOOP; + NOOP; #endif else { - if ( PL_parser->bufptr > PL_parser->oldbufptr - && PL_parser->bufptr[-1] == ',' - && ckWARN(WARN_PARENTHESIS)) - { - char *s = PL_parser->bufptr; - bool sigil = FALSE; - - /* some heuristics to detect a potential error */ - while (*s && (memCHRs(", \t\n", *s))) - s++; - - while (1) { - if (*s && (memCHRs("@$%", *s) || (!lex && *s == '*')) - && *++s - && (isWORDCHAR(*s) || UTF8_IS_CONTINUED(*s))) { - s++; - sigil = TRUE; - while (*s && (isWORDCHAR(*s) || UTF8_IS_CONTINUED(*s))) - s++; - while (*s && (memCHRs(", \t\n", *s))) - s++; - } - else - break; - } - if (sigil && (*s == ';' || *s == '=')) { - Perl_warner(aTHX_ packWARN(WARN_PARENTHESIS), - "Parentheses missing around \"%s\" list", - lex - ? (PL_parser->in_my == KEY_our - ? "our" - : PL_parser->in_my == KEY_state - ? "state" - : "my") - : "local"); - } - } + if ( PL_parser->bufptr > PL_parser->oldbufptr + && PL_parser->bufptr[-1] == ',' + && ckWARN(WARN_PARENTHESIS)) + { + char *s = PL_parser->bufptr; + bool sigil = FALSE; + + /* some heuristics to detect a potential error */ + while (*s && (memCHRs(", \t\n", *s))) + s++; + + while (1) { + if (*s && (memCHRs("@$%", *s) || (!lex && *s == '*')) + && *++s + && (isWORDCHAR(*s) || UTF8_IS_CONTINUED(*s))) { + s++; + sigil = TRUE; + while (*s && (isWORDCHAR(*s) || UTF8_IS_CONTINUED(*s))) + s++; + while (*s && (memCHRs(", \t\n", *s))) + s++; + } + else + break; + } + if (sigil && (*s == ';' || *s == '=')) { + Perl_warner(aTHX_ packWARN(WARN_PARENTHESIS), + "Parentheses missing around \"%s\" list", + lex + ? (PL_parser->in_my == KEY_our + ? "our" + : PL_parser->in_my == KEY_state + ? "state" + : "my") + : "local"); + } + } } if (lex) - o = my(o); + o = my(o); else - o = op_lvalue(o, OP_NULL); /* a bit kludgey */ + o = op_lvalue(o, OP_NULL); /* a bit kludgey */ PL_parser->in_my = FALSE; PL_parser->in_my_stash = NULL; return o; @@ -5978,9 +6075,17 @@ Perl_jmaybe(pTHX_ OP *o) PERL_ARGS_ASSERT_JMAYBE; if (o->op_type == OP_LIST) { - OP * const o2 - = newSVREF(newGVOP(OP_GV, 0, gv_fetchpvs(";", GV_ADD|GV_NOTQUAL, SVt_PV))); - o = op_convert_list(OP_JOIN, 0, op_prepend_elem(OP_LIST, o2, o)); + if (FEATURE_MULTIDIMENSIONAL_IS_ENABLED) { + OP * const o2 + = newSVREF(newGVOP(OP_GV, 0, gv_fetchpvs(";", GV_ADD|GV_NOTQUAL, SVt_PV))); + o = op_convert_list(OP_JOIN, 0, op_prepend_elem(OP_LIST, o2, o)); + } + else { + /* If the user disables this, then a warning might not be enough to alert + them to a possible change of behaviour here, so throw an exception. + */ + yyerror("Multidimensional hash lookup is disabled"); + } } return o; } @@ -5993,9 +6098,9 @@ S_op_std_init(pTHX_ OP *o) PERL_ARGS_ASSERT_OP_STD_INIT; if (PL_opargs[type] & OA_RETSCALAR) - scalar(o); + scalar(o); if (PL_opargs[type] & OA_TARGET && !o->op_targ) - o->op_targ = pad_alloc(type, SVs_PADTMP); + o->op_targ = pad_alloc(type, SVs_PADTMP); return o; } @@ -6010,13 +6115,12 @@ S_op_integerize(pTHX_ OP *o) /* integerize op. */ if ((PL_opargs[type] & OA_OTHERINT) && (PL_hints & HINT_INTEGER)) { - dVAR; - o->op_ppaddr = PL_ppaddr[++(o->op_type)]; + o->op_ppaddr = PL_ppaddr[++(o->op_type)]; } if (type == OP_NEGATE) - /* XXX might want a ck_negate() for this */ - cUNOPo->op_first->op_private &= ~OPpCONST_STRICT; + /* XXX might want a ck_negate() for this */ + cUNOPo->op_first->op_private &= ~OPpCONST_STRICT; return o; } @@ -6033,7 +6137,7 @@ S_fold_constants_eval(pTHX) { JMPENV_PUSH(ret); if (ret == 0) { - CALLRUNOPS(aTHX); + CALLRUNOPS(aTHX); } JMPENV_POP; @@ -6044,7 +6148,6 @@ S_fold_constants_eval(pTHX) { static OP * S_fold_constants(pTHX_ OP *const o) { - dVAR; OP *curop; OP *newop; I32 type = o->op_type; @@ -6061,7 +6164,7 @@ S_fold_constants(pTHX_ OP *const o) PERL_ARGS_ASSERT_FOLD_CONSTANTS; if (!(PL_opargs[type] & OA_FOLDCONST)) - goto nope; + goto nope; switch (type) { case OP_UCFIRST: @@ -6070,8 +6173,8 @@ S_fold_constants(pTHX_ OP *const o) case OP_LC: case OP_FC: #ifdef USE_LOCALE_CTYPE - if (IN_LC_COMPILETIME(LC_CTYPE)) - goto nope; + if (IN_LC_COMPILETIME(LC_CTYPE)) + goto nope; #endif break; case OP_SLT: @@ -6080,44 +6183,44 @@ S_fold_constants(pTHX_ OP *const o) case OP_SGE: case OP_SCMP: #ifdef USE_LOCALE_COLLATE - if (IN_LC_COMPILETIME(LC_COLLATE)) - goto nope; + if (IN_LC_COMPILETIME(LC_COLLATE)) + goto nope; #endif break; case OP_SPRINTF: - /* XXX what about the numeric ops? */ + /* XXX what about the numeric ops? */ #ifdef USE_LOCALE_NUMERIC - if (IN_LC_COMPILETIME(LC_NUMERIC)) - goto nope; + if (IN_LC_COMPILETIME(LC_NUMERIC)) + goto nope; #endif - break; + break; case OP_PACK: - if (!OpHAS_SIBLING(cLISTOPo->op_first) - || OpSIBLING(cLISTOPo->op_first)->op_type != OP_CONST) - goto nope; - { - SV * const sv = cSVOPx_sv(OpSIBLING(cLISTOPo->op_first)); - if (!SvPOK(sv) || SvGMAGICAL(sv)) goto nope; - { - const char *s = SvPVX_const(sv); - while (s < SvEND(sv)) { - if (isALPHA_FOLD_EQ(*s, 'p')) goto nope; - s++; - } - } - } - break; - case OP_REPEAT: - if (o->op_private & OPpREPEAT_DOLIST) goto nope; - break; - case OP_SREFGEN: - if (cUNOPx(cUNOPo->op_first)->op_first->op_type != OP_CONST - || SvPADTMP(cSVOPx_sv(cUNOPx(cUNOPo->op_first)->op_first))) - goto nope; + if (!OpHAS_SIBLING(cLISTOPo->op_first) + || OpSIBLING(cLISTOPo->op_first)->op_type != OP_CONST) + goto nope; + { + SV * const sv = cSVOPx_sv(OpSIBLING(cLISTOPo->op_first)); + if (!SvPOK(sv) || SvGMAGICAL(sv)) goto nope; + { + const char *s = SvPVX_const(sv); + while (s < SvEND(sv)) { + if (isALPHA_FOLD_EQ(*s, 'p')) goto nope; + s++; + } + } + } + break; + case OP_REPEAT: + if (o->op_private & OPpREPEAT_DOLIST) goto nope; + break; + case OP_SREFGEN: + if (cUNOPx(cUNOPo->op_first)->op_first->op_type != OP_CONST + || SvPADTMP(cSVOPx_sv(cUNOPx(cUNOPo->op_first)->op_first))) + goto nope; } if (PL_parser && PL_parser->error_count) - goto nope; /* Don't try to run w/ errors */ + goto nope; /* Don't try to run w/ errors */ for (curop = LINKLIST(o); curop != o; curop = LINKLIST(curop)) { switch (curop->op_type) { @@ -6137,8 +6240,8 @@ S_fold_constants(pTHX_ OP *const o) default: /* No other op types are considered foldable */ - goto nope; - } + goto nope; + } } curop = LINKLIST(o); @@ -6161,35 +6264,35 @@ S_fold_constants(pTHX_ OP *const o) /* Effective $^W=1. */ if ( ! (PL_dowarn & G_WARN_ALL_MASK)) - PL_dowarn |= G_WARN_ON; + PL_dowarn |= G_WARN_ON; ret = S_fold_constants_eval(aTHX); switch (ret) { case 0: - sv = *(PL_stack_sp--); - if (o->op_targ && sv == PAD_SV(o->op_targ)) { /* grab pad temp? */ - pad_swipe(o->op_targ, FALSE); - } - else if (SvTEMP(sv)) { /* grab mortal temp? */ - SvREFCNT_inc_simple_void(sv); - SvTEMP_off(sv); - } - else { assert(SvIMMORTAL(sv)); } - break; + sv = *(PL_stack_sp--); + if (o->op_targ && sv == PAD_SV(o->op_targ)) { /* grab pad temp? */ + pad_swipe(o->op_targ, FALSE); + } + else if (SvTEMP(sv)) { /* grab mortal temp? */ + SvREFCNT_inc_simple_void(sv); + SvTEMP_off(sv); + } + else { assert(SvIMMORTAL(sv)); } + break; case 3: - /* Something tried to die. Abandon constant folding. */ - /* Pretend the error never happened. */ - CLEAR_ERRSV(); - o->op_next = old_next; - break; + /* Something tried to die. Abandon constant folding. */ + /* Pretend the error never happened. */ + CLEAR_ERRSV(); + o->op_next = old_next; + break; default: - /* Don't expect 1 (setjmp failed) or 2 (something called my_exit) */ - PL_warnhook = oldwarnhook; - PL_diehook = olddiehook; - /* XXX note that this croak may fail as we've already blown away - * the stack - eg any nested evals */ - Perl_croak(aTHX_ "panic: fold_constants JMPENV_PUSH returned %d", ret); + /* Don't expect 1 (setjmp failed) or 2 (something called my_exit) */ + PL_warnhook = oldwarnhook; + PL_diehook = olddiehook; + /* XXX note that this croak may fail as we've already blown away + * the stack - eg any nested evals */ + Perl_croak(aTHX_ "panic: fold_constants JMPENV_PUSH returned %d", ret); } PL_dowarn = oldwarn; PL_warnhook = oldwarnhook; @@ -6204,7 +6307,7 @@ S_fold_constants(pTHX_ OP *const o) delete_eval_scope(); } if (ret) - goto nope; + goto nope; /* OP_STRINGIFY and constant folding are used to implement qq. Here the constant folding is an implementation detail that we @@ -6214,10 +6317,10 @@ S_fold_constants(pTHX_ OP *const o) op_free(o); assert(sv); if (is_stringify) - SvPADTMP_off(sv); + SvPADTMP_off(sv); else if (!SvIMMORTAL(sv)) { - SvPADTMP_on(sv); - SvREADONLY_on(sv); + SvPADTMP_on(sv); + SvREADONLY_on(sv); } newop = newSVOP(OP_CONST, 0, MUTABLE_SV(sv)); if (!is_stringify) newop->op_folded = 1; @@ -6234,7 +6337,6 @@ S_fold_constants(pTHX_ OP *const o) static void S_gen_constant_list(pTHX_ OP *o) { - dVAR; OP *curop, *old_next; SV * const oldwarnhook = PL_warnhook; SV * const olddiehook = PL_diehook; @@ -6250,17 +6352,17 @@ S_gen_constant_list(pTHX_ OP *o) list(o); if (PL_parser && PL_parser->error_count) - return; /* Don't attempt to run with errors */ + return; /* Don't attempt to run with errors */ curop = LINKLIST(o); old_next = o->op_next; o->op_next = 0; op_was_null = o->op_type == OP_NULL; if (op_was_null) /* b3698342565fb462291fba4b432cfcd05b6eb4e1 */ - o->op_type = OP_CUSTOM; + o->op_type = OP_CUSTOM; CALL_PEEP(curop); if (op_was_null) - o->op_type = OP_NULL; + o->op_type = OP_NULL; S_prune_chain_head(&curop); PL_op = curop; @@ -6279,30 +6381,30 @@ S_gen_constant_list(pTHX_ OP *o) /* Effective $^W=1. */ if ( ! (PL_dowarn & G_WARN_ALL_MASK)) - PL_dowarn |= G_WARN_ON; + PL_dowarn |= G_WARN_ON; switch (ret) { case 0: #if defined DEBUGGING && !defined DEBUGGING_RE_ONLY PL_curstackinfo->si_stack_hwm = 0; /* stop valgrind complaining */ #endif - Perl_pp_pushmark(aTHX); - CALLRUNOPS(aTHX); - PL_op = curop; - assert (!(curop->op_flags & OPf_SPECIAL)); - assert(curop->op_type == OP_RANGE); - Perl_pp_anonlist(aTHX); - break; + Perl_pp_pushmark(aTHX); + CALLRUNOPS(aTHX); + PL_op = curop; + assert (!(curop->op_flags & OPf_SPECIAL)); + assert(curop->op_type == OP_RANGE); + Perl_pp_anonlist(aTHX); + break; case 3: - CLEAR_ERRSV(); - o->op_next = old_next; - break; + CLEAR_ERRSV(); + o->op_next = old_next; + break; default: - JMPENV_POP; - PL_warnhook = oldwarnhook; - PL_diehook = olddiehook; - Perl_croak(aTHX_ "panic: gen_constant_list JMPENV_PUSH returned %d", - ret); + JMPENV_POP; + PL_warnhook = oldwarnhook; + PL_diehook = olddiehook; + Perl_croak(aTHX_ "panic: gen_constant_list JMPENV_PUSH returned %d", + ret); } JMPENV_POP; @@ -6317,7 +6419,7 @@ S_gen_constant_list(pTHX_ OP *o) delete_eval_scope(); } if (ret) - return; + return; OpTYPE_set(o, OP_RV2AV); o->op_flags &= ~OPf_REF; /* treat \(1..2) like an ordinary list */ @@ -6331,18 +6433,18 @@ S_gen_constant_list(pTHX_ OP *o) op_free(curop); if (AvFILLp(av) != -1) - for (svp = AvARRAY(av) + AvFILLp(av); svp >= AvARRAY(av); --svp) - { - SvPADTMP_on(*svp); - SvREADONLY_on(*svp); - } + for (svp = AvARRAY(av) + AvFILLp(av); svp >= AvARRAY(av); --svp) + { + SvPADTMP_on(*svp); + SvREADONLY_on(*svp); + } LINKLIST(o); list(o); return; } /* -=head1 Optree Manipulation Functions +=for apidoc_section $optree_manipulation */ /* List constructors */ @@ -6364,15 +6466,15 @@ OP * Perl_op_append_elem(pTHX_ I32 type, OP *first, OP *last) { if (!first) - return last; + return last; if (!last) - return first; + return first; if (first->op_type != (unsigned)type - || (type == OP_LIST && (first->op_flags & OPf_PARENS))) + || (type == OP_LIST && (first->op_flags & OPf_PARENS))) { - return newLISTOP(type, 0, first, last); + return newLISTOP(type, 0, first, last); } op_sibling_splice(first, ((LISTOP*)first)->op_last, 0, last); @@ -6397,16 +6499,16 @@ OP * Perl_op_append_list(pTHX_ I32 type, OP *first, OP *last) { if (!first) - return last; + return last; if (!last) - return first; + return first; if (first->op_type != (unsigned)type) - return op_prepend_elem(type, first, last); + return op_prepend_elem(type, first, last); if (last->op_type != (unsigned)type) - return op_append_elem(type, first, last); + return op_append_elem(type, first, last); OpMORESIB_set(((LISTOP*)first)->op_last, ((LISTOP*)last)->op_first); ((LISTOP*)first)->op_last = ((LISTOP*)last)->op_last; @@ -6435,22 +6537,22 @@ OP * Perl_op_prepend_elem(pTHX_ I32 type, OP *first, OP *last) { if (!first) - return last; + return last; if (!last) - return first; + return first; if (last->op_type == (unsigned)type) { - if (type == OP_LIST) { /* already a PUSHMARK there */ + if (type == OP_LIST) { /* already a PUSHMARK there */ /* insert 'first' after pushmark */ op_sibling_splice(last, cLISTOPx(last)->op_first, 0, first); if (!(first->op_flags & OPf_PARENS)) last->op_flags &= ~OPf_PARENS; - } - else + } + else op_sibling_splice(last, NULL, 0, first); - last->op_flags |= OPf_KIDS; - return last; + last->op_flags |= OPf_KIDS; + return last; } return newLISTOP(type, 0, first, last); @@ -6473,24 +6575,23 @@ C to make it the right type. OP * Perl_op_convert_list(pTHX_ I32 type, I32 flags, OP *o) { - dVAR; if (type < 0) type = -type, flags |= OPf_SPECIAL; if (!o || o->op_type != OP_LIST) - o = force_list(o, 0); + o = force_list(o, FALSE); else { - o->op_flags &= ~OPf_WANT; - o->op_private &= ~OPpLVAL_INTRO; + o->op_flags &= ~OPf_WANT; + o->op_private &= ~OPpLVAL_INTRO; } if (!(PL_opargs[type] & OA_MARK)) - op_null(cLISTOPo->op_first); + op_null(cLISTOPo->op_first); else { - OP * const kid2 = OpSIBLING(cLISTOPo->op_first); - if (kid2 && kid2->op_type == OP_COREARGS) { - op_null(cLISTOPo->op_first); - kid2->op_private |= OPpCOREARGS_PUSHMARK; - } + OP * const kid2 = OpSIBLING(cLISTOPo->op_first); + if (kid2 && kid2->op_type == OP_COREARGS) { + op_null(cLISTOPo->op_first); + kid2->op_private |= OPpCOREARGS_PUSHMARK; + } } if (type != OP_SPLIT) @@ -6502,11 +6603,11 @@ Perl_op_convert_list(pTHX_ I32 type, I32 flags, OP *o) o->op_flags |= flags; if (flags & OPf_FOLDED) - o->op_folded = 1; + o->op_folded = 1; o = CHECKOP(type, o); if (o->op_type != (unsigned)type) - return o; + return o; return fold_constants(op_integerize(op_std_init(o))); } @@ -6515,7 +6616,7 @@ Perl_op_convert_list(pTHX_ I32 type, I32 flags, OP *o) /* -=head1 Optree construction +=for apidoc_section $optree_construction =for apidoc newNULLLIST @@ -6554,7 +6655,7 @@ S_force_list(pTHX_ OP *o, bool nullit) rest = OpSIBLING(o); OpLASTSIB_set(o, NULL); } - o = newLISTOP(OP_LIST, 0, o, NULL); + o = newLISTOP(OP_LIST, 0, o, NULL); if (rest) op_sibling_splice(o, cLISTOPo->op_last, 0, rest); } @@ -6585,7 +6686,6 @@ See L for more information. OP * Perl_newLISTOP(pTHX_ I32 type, I32 flags, OP *first, OP *last) { - dVAR; LISTOP *listop; /* Note that allocating an OP_PUSHMARK can die under Safe.pm if * pushmark is banned. So do it now while existing ops are in a @@ -6593,29 +6693,29 @@ Perl_newLISTOP(pTHX_ I32 type, I32 flags, OP *first, OP *last) OP* const pushop = type == OP_LIST ? newOP(OP_PUSHMARK, 0) : NULL; assert((PL_opargs[type] & OA_CLASS_MASK) == OA_LISTOP - || type == OP_CUSTOM); + || type == OP_CUSTOM); NewOp(1101, listop, 1, LISTOP); OpTYPE_set(listop, type); if (first || last) - flags |= OPf_KIDS; + flags |= OPf_KIDS; listop->op_flags = (U8)flags; if (!last && first) - last = first; + last = first; else if (!first && last) - first = last; + first = last; else if (first) - OpMORESIB_set(first, last); + OpMORESIB_set(first, last); listop->op_first = first; listop->op_last = last; if (pushop) { - OpMORESIB_set(pushop, first); - listop->op_first = pushop; - listop->op_flags |= OPf_KIDS; - if (!last) - listop->op_last = pushop; + OpMORESIB_set(pushop, first); + listop->op_first = pushop; + listop->op_flags |= OPf_KIDS; + if (!last) + listop->op_last = pushop; } if (listop->op_last) OpLASTSIB_set(listop->op_last, (OP*)listop); @@ -6637,18 +6737,17 @@ of C. OP * Perl_newOP(pTHX_ I32 type, I32 flags) { - dVAR; OP *o; if (type == -OP_ENTEREVAL) { - type = OP_ENTEREVAL; - flags |= OPpEVAL_BYTES<<8; + type = OP_ENTEREVAL; + flags |= OPpEVAL_BYTES<<8; } assert((PL_opargs[type] & OA_CLASS_MASK) == OA_BASEOP - || (PL_opargs[type] & OA_CLASS_MASK) == OA_BASEOP_OR_UNOP - || (PL_opargs[type] & OA_CLASS_MASK) == OA_FILESTATOP - || (PL_opargs[type] & OA_CLASS_MASK) == OA_LOOPEXOP); + || (PL_opargs[type] & OA_CLASS_MASK) == OA_BASEOP_OR_UNOP + || (PL_opargs[type] & OA_CLASS_MASK) == OA_FILESTATOP + || (PL_opargs[type] & OA_CLASS_MASK) == OA_LOOPEXOP); NewOp(1101, o, 1, OP); OpTYPE_set(o, type); @@ -6657,9 +6756,9 @@ Perl_newOP(pTHX_ I32 type, I32 flags) o->op_next = o; o->op_private = (U8)(0 | (flags >> 8)); if (PL_opargs[type] & OA_RETSCALAR) - scalar(o); + scalar(o); if (PL_opargs[type] & OA_TARGET) - o->op_targ = pad_alloc(type, SVs_PADTMP); + o->op_targ = pad_alloc(type, SVs_PADTMP); return CHECKOP(type, o); } @@ -6682,27 +6781,27 @@ of the constructed op tree. OP * Perl_newUNOP(pTHX_ I32 type, I32 flags, OP *first) { - dVAR; UNOP *unop; if (type == -OP_ENTEREVAL) { - type = OP_ENTEREVAL; - flags |= OPpEVAL_BYTES<<8; + type = OP_ENTEREVAL; + flags |= OPpEVAL_BYTES<<8; } assert((PL_opargs[type] & OA_CLASS_MASK) == OA_UNOP - || (PL_opargs[type] & OA_CLASS_MASK) == OA_BASEOP_OR_UNOP - || (PL_opargs[type] & OA_CLASS_MASK) == OA_FILESTATOP - || (PL_opargs[type] & OA_CLASS_MASK) == OA_LOOPEXOP - || type == OP_SASSIGN - || type == OP_ENTERTRY - || type == OP_CUSTOM - || type == OP_NULL ); + || (PL_opargs[type] & OA_CLASS_MASK) == OA_BASEOP_OR_UNOP + || (PL_opargs[type] & OA_CLASS_MASK) == OA_FILESTATOP + || (PL_opargs[type] & OA_CLASS_MASK) == OA_LOOPEXOP + || type == OP_SASSIGN + || type == OP_ENTERTRY + || type == OP_ENTERTRYCATCH + || type == OP_CUSTOM + || type == OP_NULL ); if (!first) - first = newOP(OP_STUB, 0); + first = newOP(OP_STUB, 0); if (PL_opargs[type] & OA_MARK) - first = force_list(first, 1); + first = force_list(first, TRUE); NewOp(1101, unop, 1, UNOP); OpTYPE_set(unop, type); @@ -6715,7 +6814,7 @@ Perl_newUNOP(pTHX_ I32 type, I32 flags, OP *first) unop = (UNOP*) CHECKOP(type, unop); if (unop->op_next) - return (OP*)unop; + return (OP*)unop; return fold_constants(op_integerize(op_std_init((OP *) unop))); } @@ -6732,7 +6831,6 @@ initialised to C OP * Perl_newUNOP_AUX(pTHX_ I32 type, I32 flags, OP *first, UNOP_AUX_item *aux) { - dVAR; UNOP_AUX *unop; assert((PL_opargs[type] & OA_CLASS_MASK) == OA_UNOP_AUX @@ -6771,7 +6869,6 @@ Supported optypes: C. static OP* S_newMETHOP_internal(pTHX_ I32 type, I32 flags, OP* dynamic_meth, SV* const_meth) { - dVAR; METHOP *methop; assert((PL_opargs[type] & OA_CLASS_MASK) == OA_METHOP @@ -6779,7 +6876,7 @@ S_newMETHOP_internal(pTHX_ I32 type, I32 flags, OP* dynamic_meth, SV* const_meth NewOp(1101, methop, 1, METHOP); if (dynamic_meth) { - if (PL_opargs[type] & OA_MARK) dynamic_meth = force_list(dynamic_meth, 1); + if (PL_opargs[type] & OA_MARK) dynamic_meth = force_list(dynamic_meth, TRUE); methop->op_flags = (U8)(flags | OPf_KIDS); methop->op_u.op_first = dynamic_meth; methop->op_private = (U8)(1 | (flags >> 8)); @@ -6847,26 +6944,25 @@ by this function and become part of the constructed op tree. OP * Perl_newBINOP(pTHX_ I32 type, I32 flags, OP *first, OP *last) { - dVAR; BINOP *binop; ASSUME((PL_opargs[type] & OA_CLASS_MASK) == OA_BINOP - || type == OP_NULL || type == OP_CUSTOM); + || type == OP_NULL || type == OP_CUSTOM); NewOp(1101, binop, 1, BINOP); if (!first) - first = newOP(OP_NULL, 0); + first = newOP(OP_NULL, 0); OpTYPE_set(binop, type); binop->op_first = first; binop->op_flags = (U8)(flags | OPf_KIDS); if (!last) { - last = first; - binop->op_private = (U8)(1 | (flags >> 8)); + last = first; + binop->op_private = (U8)(1 | (flags >> 8)); } else { - binop->op_private = (U8)(2 | (flags >> 8)); + binop->op_private = (U8)(2 | (flags >> 8)); OpMORESIB_set(first, last); } @@ -6879,7 +6975,7 @@ Perl_newBINOP(pTHX_ I32 type, I32 flags, OP *first, OP *last) binop = (BINOP*)CHECKOP(type, binop); if (binop->op_next || binop->op_type != (OPCODE)type) - return (OP*)binop; + return (OP*)binop; return fold_constants(op_integerize(op_std_init((OP *)binop))); } @@ -6902,10 +6998,10 @@ Perl_invmap_dump(pTHX_ SV* invlist, UV *map) PerlIO_printf(Perl_debug_log, "%s[%" UVuf "] 0x%04" UVXf, indent, i, start); if (end == IV_MAX) { PerlIO_printf(Perl_debug_log, " .. INFTY"); - } - else if (end != start) { + } + else if (end != start) { PerlIO_printf(Perl_debug_log, " .. 0x%04" UVXf, end); - } + } else { PerlIO_printf(Perl_debug_log, " "); } @@ -7034,7 +7130,7 @@ S_pmtrans(pTHX_ OP *o, OP *expr, OP *repl) UV* t_array; SV* t_invlist; UV* r_map; - UV r_cp, t_cp; + UV r_cp = 0, t_cp = 0; UV t_cp_end = (UV) -1; UV r_cp_end; Size_t len; @@ -7932,7 +8028,7 @@ S_pmtrans(pTHX_ OP *o, OP *expr, OP *repl) } /* The inversion map is pushed; first the list. */ - invmap = MUTABLE_AV(newAV()); + invmap = MUTABLE_AV(newAV()); av_push(invmap, t_invlist); /* 2nd is the mapping */ @@ -8076,9 +8172,9 @@ S_pmtrans(pTHX_ OP *o, OP *expr, OP *repl) Safefree(r_map); if(del && rlen != 0 && r_count == t_count) { - Perl_ck_warner(aTHX_ packWARN(WARN_MISC), "Useless use of /d modifier in transliteration operator"); + Perl_ck_warner(aTHX_ packWARN(WARN_MISC), "Useless use of /d modifier in transliteration operator"); } else if(r_count > t_count) { - Perl_ck_warner(aTHX_ packWARN(WARN_MISC), "Replacement list is longer than search list"); + Perl_ck_warner(aTHX_ packWARN(WARN_MISC), "Replacement list is longer than search list"); } op_free(expr); @@ -8101,29 +8197,28 @@ and, shifted up eight bits, the eight bits of C. OP * Perl_newPMOP(pTHX_ I32 type, I32 flags) { - dVAR; PMOP *pmop; assert((PL_opargs[type] & OA_CLASS_MASK) == OA_PMOP - || type == OP_CUSTOM); + || type == OP_CUSTOM); NewOp(1101, pmop, 1, PMOP); OpTYPE_set(pmop, type); pmop->op_flags = (U8)flags; pmop->op_private = (U8)(0 | (flags >> 8)); if (PL_opargs[type] & OA_RETSCALAR) - scalar((OP *)pmop); + scalar((OP *)pmop); if (PL_hints & HINT_RE_TAINT) - pmop->op_pmflags |= PMf_RETAINT; + pmop->op_pmflags |= PMf_RETAINT; #ifdef USE_LOCALE_CTYPE if (IN_LC_COMPILETIME(LC_CTYPE)) { - set_regex_charset(&(pmop->op_pmflags), REGEX_LOCALE_CHARSET); + set_regex_charset(&(pmop->op_pmflags), REGEX_LOCALE_CHARSET); } else #endif if (IN_UNI_8_BIT) { - set_regex_charset(&(pmop->op_pmflags), REGEX_UNICODE_CHARSET); + set_regex_charset(&(pmop->op_pmflags), REGEX_UNICODE_CHARSET); } if (PL_hints & HINT_RE_FLAGS) { SV *reflags = Perl_refcounted_he_fetch_pvn(aTHX_ @@ -8142,23 +8237,23 @@ Perl_newPMOP(pTHX_ I32 type, I32 flags) #ifdef USE_ITHREADS assert(SvPOK(PL_regex_pad[0])); if (SvCUR(PL_regex_pad[0])) { - /* Pop off the "packed" IV from the end. */ - SV *const repointer_list = PL_regex_pad[0]; - const char *p = SvEND(repointer_list) - sizeof(IV); - const IV offset = *((IV*)p); + /* Pop off the "packed" IV from the end. */ + SV *const repointer_list = PL_regex_pad[0]; + const char *p = SvEND(repointer_list) - sizeof(IV); + const IV offset = *((IV*)p); - assert(SvCUR(repointer_list) % sizeof(IV) == 0); + assert(SvCUR(repointer_list) % sizeof(IV) == 0); - SvEND_set(repointer_list, p); + SvEND_set(repointer_list, p); - pmop->op_pmoffset = offset; - /* This slot should be free, so assert this: */ - assert(PL_regex_pad[offset] == &PL_sv_undef); + pmop->op_pmoffset = offset; + /* This slot should be free, so assert this: */ + assert(PL_regex_pad[offset] == &PL_sv_undef); } else { - SV * const repointer = &PL_sv_undef; - av_push(PL_regex_padav, repointer); - pmop->op_pmoffset = av_tindex(PL_regex_padav); - PL_regex_pad = AvARRAY(PL_regex_padav); + SV * const repointer = &PL_sv_undef; + av_push(PL_regex_padav, repointer); + pmop->op_pmoffset = av_top_index(PL_regex_padav); + PL_regex_pad = AvARRAY(PL_regex_padav); } #endif @@ -8172,11 +8267,11 @@ S_set_haseval(pTHX) PL_cv_has_eval = 1; /* Any pad names in scope are potentially lvalues. */ for (; i < PadnamelistMAXNAMED(PL_comppad_name); i++) { - PADNAME *pn = PAD_COMPNAME_SV(i); - if (!pn || !PadnameLEN(pn)) - continue; - if (PadnameOUTER(pn) || PadnameIN_SCOPE(pn, PL_cop_seqmax)) - S_mark_padname_lvalue(aTHX_ pn); + PADNAME *pn = PAD_COMPNAME_SV(i); + if (!pn || !PadnameLEN(pn)) + continue; + if (PadnameOUTER(pn) || PadnameIN_SCOPE(pn, PL_cop_seqmax)) + S_mark_padname_lvalue(aTHX_ pn); } } @@ -8246,7 +8341,7 @@ Perl_pmruntime(pTHX_ OP *o, OP *expr, OP *repl, UV flags, I32 floor) } } else if (expr->op_type != OP_CONST) - is_compiletime = 0; + is_compiletime = 0; LINKLIST(expr); @@ -8322,8 +8417,8 @@ Perl_pmruntime(pTHX_ OP *o, OP *expr, OP *repl, UV flags, I32 floor) assert(floor==0 || (pm->op_pmflags & PMf_HAS_CV)); if (is_compiletime) { - U32 rx_flags = pm->op_pmflags & RXf_PMf_COMPILETIME; - regexp_engine const *eng = current_re_engine(); + U32 rx_flags = pm->op_pmflags & RXf_PMf_COMPILETIME; + regexp_engine const *eng = current_re_engine(); if (is_split) { /* make engine handle split ' ' specially */ @@ -8331,30 +8426,30 @@ Perl_pmruntime(pTHX_ OP *o, OP *expr, OP *repl, UV flags, I32 floor) rx_flags |= RXf_SPLIT; } - if (!has_code || !eng->op_comp) { - /* compile-time simple constant pattern */ - - if ((pm->op_pmflags & PMf_HAS_CV) && !has_code) { - /* whoops! we guessed that a qr// had a code block, but we - * were wrong (e.g. /[(?{}]/ ). Throw away the PL_compcv - * that isn't required now. Note that we have to be pretty - * confident that nothing used that CV's pad while the - * regex was parsed, except maybe op targets for \Q etc. - * If there were any op targets, though, they should have - * been stolen by constant folding. - */ + if (!has_code || !eng->op_comp) { + /* compile-time simple constant pattern */ + + if ((pm->op_pmflags & PMf_HAS_CV) && !has_code) { + /* whoops! we guessed that a qr// had a code block, but we + * were wrong (e.g. /[(?{}]/ ). Throw away the PL_compcv + * that isn't required now. Note that we have to be pretty + * confident that nothing used that CV's pad while the + * regex was parsed, except maybe op targets for \Q etc. + * If there were any op targets, though, they should have + * been stolen by constant folding. + */ #ifdef DEBUGGING - SSize_t i = 0; - assert(PadnamelistMAXNAMED(PL_comppad_name) == 0); - while (++i <= AvFILLp(PL_comppad)) { + SSize_t i = 0; + assert(PadnamelistMAXNAMED(PL_comppad_name) == 0); + while (++i <= AvFILLp(PL_comppad)) { # ifdef USE_PAD_RESET /* under USE_PAD_RESET, pad swipe replaces a swiped * folded constant with a fresh padtmp */ - assert(!PL_curpad[i] || SvPADTMP(PL_curpad[i])); + assert(!PL_curpad[i] || SvPADTMP(PL_curpad[i])); # else - assert(!PL_curpad[i]); + assert(!PL_curpad[i]); # endif - } + } #endif /* This LEAVE_SCOPE will restore PL_compcv to point to the * outer CV (the one whose slab holds the pm op). The @@ -8363,212 +8458,212 @@ Perl_pmruntime(pTHX_ OP *o, OP *expr, OP *repl, UV flags, I32 floor) * return from this function. Which is why its safe to * call op_free(expr) below. */ - LEAVE_SCOPE(floor); - pm->op_pmflags &= ~PMf_HAS_CV; - } + LEAVE_SCOPE(floor); + pm->op_pmflags &= ~PMf_HAS_CV; + } /* Skip compiling if parser found an error for this pattern */ if (pm->op_pmflags & PMf_HAS_ERROR) { return o; } - PM_SETRE(pm, - eng->op_comp - ? eng->op_comp(aTHX_ NULL, 0, expr, eng, NULL, NULL, - rx_flags, pm->op_pmflags) - : Perl_re_op_compile(aTHX_ NULL, 0, expr, eng, NULL, NULL, - rx_flags, pm->op_pmflags) - ); - op_free(expr); - } - else { - /* compile-time pattern that includes literal code blocks */ + PM_SETRE(pm, + eng->op_comp + ? eng->op_comp(aTHX_ NULL, 0, expr, eng, NULL, NULL, + rx_flags, pm->op_pmflags) + : Perl_re_op_compile(aTHX_ NULL, 0, expr, eng, NULL, NULL, + rx_flags, pm->op_pmflags) + ); + op_free(expr); + } + else { + /* compile-time pattern that includes literal code blocks */ - REGEXP* re; + REGEXP* re; /* Skip compiling if parser found an error for this pattern */ if (pm->op_pmflags & PMf_HAS_ERROR) { return o; } - re = eng->op_comp(aTHX_ NULL, 0, expr, eng, NULL, NULL, - rx_flags, - (pm->op_pmflags | - ((PL_hints & HINT_RE_EVAL) ? PMf_USE_RE_EVAL : 0)) - ); - PM_SETRE(pm, re); - if (pm->op_pmflags & PMf_HAS_CV) { - CV *cv; - /* this QR op (and the anon sub we embed it in) is never - * actually executed. It's just a placeholder where we can - * squirrel away expr in op_code_list without the peephole - * optimiser etc processing it for a second time */ - OP *qr = newPMOP(OP_QR, 0); - ((PMOP*)qr)->op_code_list = expr; - - /* handle the implicit sub{} wrapped round the qr/(?{..})/ */ - SvREFCNT_inc_simple_void(PL_compcv); - cv = newATTRSUB(floor, 0, NULL, NULL, qr); - ReANY(re)->qr_anoncv = cv; - - /* attach the anon CV to the pad so that - * pad_fixup_inner_anons() can find it */ - (void)pad_add_anon(cv, o->op_type); - SvREFCNT_inc_simple_void(cv); - } - else { - pm->op_code_list = expr; - } - } + re = eng->op_comp(aTHX_ NULL, 0, expr, eng, NULL, NULL, + rx_flags, + (pm->op_pmflags | + ((PL_hints & HINT_RE_EVAL) ? PMf_USE_RE_EVAL : 0)) + ); + PM_SETRE(pm, re); + if (pm->op_pmflags & PMf_HAS_CV) { + CV *cv; + /* this QR op (and the anon sub we embed it in) is never + * actually executed. It's just a placeholder where we can + * squirrel away expr in op_code_list without the peephole + * optimiser etc processing it for a second time */ + OP *qr = newPMOP(OP_QR, 0); + ((PMOP*)qr)->op_code_list = expr; + + /* handle the implicit sub{} wrapped round the qr/(?{..})/ */ + SvREFCNT_inc_simple_void(PL_compcv); + cv = newATTRSUB(floor, 0, NULL, NULL, qr); + ReANY(re)->qr_anoncv = cv; + + /* attach the anon CV to the pad so that + * pad_fixup_inner_anons() can find it */ + (void)pad_add_anon(cv, o->op_type); + SvREFCNT_inc_simple_void(cv); + } + else { + pm->op_code_list = expr; + } + } } else { - /* runtime pattern: build chain of regcomp etc ops */ - bool reglist; - PADOFFSET cv_targ = 0; - - reglist = isreg && expr->op_type == OP_LIST; - if (reglist) - op_null(expr); - - if (has_code) { - pm->op_code_list = expr; - /* don't free op_code_list; its ops are embedded elsewhere too */ - pm->op_pmflags |= PMf_CODELIST_PRIVATE; - } + /* runtime pattern: build chain of regcomp etc ops */ + bool reglist; + PADOFFSET cv_targ = 0; + + reglist = isreg && expr->op_type == OP_LIST; + if (reglist) + op_null(expr); + + if (has_code) { + pm->op_code_list = expr; + /* don't free op_code_list; its ops are embedded elsewhere too */ + pm->op_pmflags |= PMf_CODELIST_PRIVATE; + } if (is_split) /* make engine handle split ' ' specially */ pm->op_pmflags |= PMf_SPLIT; - /* the OP_REGCMAYBE is a placeholder in the non-threaded case - * to allow its op_next to be pointed past the regcomp and - * preceding stacking ops; - * OP_REGCRESET is there to reset taint before executing the - * stacking ops */ - if (pm->op_pmflags & PMf_KEEP || TAINTING_get) - expr = newUNOP((TAINTING_get ? OP_REGCRESET : OP_REGCMAYBE),0,expr); - - if (pm->op_pmflags & PMf_HAS_CV) { - /* we have a runtime qr with literal code. This means - * that the qr// has been wrapped in a new CV, which - * means that runtime consts, vars etc will have been compiled - * against a new pad. So... we need to execute those ops - * within the environment of the new CV. So wrap them in a call - * to a new anon sub. i.e. for - * - * qr/a$b(?{...})/, - * - * we build an anon sub that looks like - * - * sub { "a", $b, '(?{...})' } - * - * and call it, passing the returned list to regcomp. - * Or to put it another way, the list of ops that get executed - * are: - * - * normal PMf_HAS_CV - * ------ ------------------- - * pushmark (for regcomp) - * pushmark (for entersub) - * anoncode - * srefgen - * entersub - * regcreset regcreset - * pushmark pushmark - * const("a") const("a") - * gvsv(b) gvsv(b) - * const("(?{...})") const("(?{...})") - * leavesub - * regcomp regcomp - */ - - SvREFCNT_inc_simple_void(PL_compcv); - CvLVALUE_on(PL_compcv); - /* these lines are just an unrolled newANONATTRSUB */ - expr = newSVOP(OP_ANONCODE, 0, - MUTABLE_SV(newATTRSUB(floor, 0, NULL, NULL, expr))); - cv_targ = expr->op_targ; - expr = newUNOP(OP_REFGEN, 0, expr); - - expr = list(force_list(newUNOP(OP_ENTERSUB, 0, scalar(expr)), 1)); - } + /* the OP_REGCMAYBE is a placeholder in the non-threaded case + * to allow its op_next to be pointed past the regcomp and + * preceding stacking ops; + * OP_REGCRESET is there to reset taint before executing the + * stacking ops */ + if (pm->op_pmflags & PMf_KEEP || TAINTING_get) + expr = newUNOP((TAINTING_get ? OP_REGCRESET : OP_REGCMAYBE),0,expr); + + if (pm->op_pmflags & PMf_HAS_CV) { + /* we have a runtime qr with literal code. This means + * that the qr// has been wrapped in a new CV, which + * means that runtime consts, vars etc will have been compiled + * against a new pad. So... we need to execute those ops + * within the environment of the new CV. So wrap them in a call + * to a new anon sub. i.e. for + * + * qr/a$b(?{...})/, + * + * we build an anon sub that looks like + * + * sub { "a", $b, '(?{...})' } + * + * and call it, passing the returned list to regcomp. + * Or to put it another way, the list of ops that get executed + * are: + * + * normal PMf_HAS_CV + * ------ ------------------- + * pushmark (for regcomp) + * pushmark (for entersub) + * anoncode + * srefgen + * entersub + * regcreset regcreset + * pushmark pushmark + * const("a") const("a") + * gvsv(b) gvsv(b) + * const("(?{...})") const("(?{...})") + * leavesub + * regcomp regcomp + */ - rcop = alloc_LOGOP(OP_REGCOMP, scalar(expr), o); - rcop->op_flags |= ((PL_hints & HINT_RE_EVAL) ? OPf_SPECIAL : 0) - | (reglist ? OPf_STACKED : 0); - rcop->op_targ = cv_targ; + SvREFCNT_inc_simple_void(PL_compcv); + CvLVALUE_on(PL_compcv); + /* these lines are just an unrolled newANONATTRSUB */ + expr = newSVOP(OP_ANONCODE, 0, + MUTABLE_SV(newATTRSUB(floor, 0, NULL, NULL, expr))); + cv_targ = expr->op_targ; + expr = newUNOP(OP_REFGEN, 0, expr); - /* /$x/ may cause an eval, since $x might be qr/(?{..})/ */ - if (PL_hints & HINT_RE_EVAL) - S_set_haseval(aTHX); + expr = list(force_list(newUNOP(OP_ENTERSUB, 0, scalar(expr)), TRUE)); + } - /* establish postfix order */ - if (expr->op_type == OP_REGCRESET || expr->op_type == OP_REGCMAYBE) { - LINKLIST(expr); - rcop->op_next = expr; - ((UNOP*)expr)->op_first->op_next = (OP*)rcop; - } - else { - rcop->op_next = LINKLIST(expr); - expr->op_next = (OP*)rcop; - } + rcop = alloc_LOGOP(OP_REGCOMP, scalar(expr), o); + rcop->op_flags |= ((PL_hints & HINT_RE_EVAL) ? OPf_SPECIAL : 0) + | (reglist ? OPf_STACKED : 0); + rcop->op_targ = cv_targ; + + /* /$x/ may cause an eval, since $x might be qr/(?{..})/ */ + if (PL_hints & HINT_RE_EVAL) + S_set_haseval(aTHX); + + /* establish postfix order */ + if (expr->op_type == OP_REGCRESET || expr->op_type == OP_REGCMAYBE) { + LINKLIST(expr); + rcop->op_next = expr; + ((UNOP*)expr)->op_first->op_next = (OP*)rcop; + } + else { + rcop->op_next = LINKLIST(expr); + expr->op_next = (OP*)rcop; + } - op_prepend_elem(o->op_type, scalar((OP*)rcop), o); + op_prepend_elem(o->op_type, scalar((OP*)rcop), o); } if (repl) { - OP *curop = repl; - bool konst; - /* If we are looking at s//.../e with a single statement, get past - the implicit do{}. */ - if (curop->op_type == OP_NULL && curop->op_flags & OPf_KIDS + OP *curop = repl; + bool konst; + /* If we are looking at s//.../e with a single statement, get past + the implicit do{}. */ + if (curop->op_type == OP_NULL && curop->op_flags & OPf_KIDS && cUNOPx(curop)->op_first->op_type == OP_SCOPE && cUNOPx(curop)->op_first->op_flags & OPf_KIDS) { OP *sib; - OP *kid = cUNOPx(cUNOPx(curop)->op_first)->op_first; - if (kid->op_type == OP_NULL && (sib = OpSIBLING(kid)) - && !OpHAS_SIBLING(sib)) - curop = sib; - } - if (curop->op_type == OP_CONST) - konst = TRUE; - else if (( (curop->op_type == OP_RV2SV || - curop->op_type == OP_RV2AV || - curop->op_type == OP_RV2HV || - curop->op_type == OP_RV2GV) - && cUNOPx(curop)->op_first - && cUNOPx(curop)->op_first->op_type == OP_GV ) - || curop->op_type == OP_PADSV - || curop->op_type == OP_PADAV - || curop->op_type == OP_PADHV - || curop->op_type == OP_PADANY) { - repl_has_vars = 1; - konst = TRUE; - } - else konst = FALSE; - if (konst - && !(repl_has_vars - && (!PM_GETRE(pm) - || !RX_PRELEN(PM_GETRE(pm)) - || RX_EXTFLAGS(PM_GETRE(pm)) & RXf_EVAL_SEEN))) - { - pm->op_pmflags |= PMf_CONST; /* const for long enough */ - op_prepend_elem(o->op_type, scalar(repl), o); - } - else { + OP *kid = cUNOPx(cUNOPx(curop)->op_first)->op_first; + if (kid->op_type == OP_NULL && (sib = OpSIBLING(kid)) + && !OpHAS_SIBLING(sib)) + curop = sib; + } + if (curop->op_type == OP_CONST) + konst = TRUE; + else if (( (curop->op_type == OP_RV2SV || + curop->op_type == OP_RV2AV || + curop->op_type == OP_RV2HV || + curop->op_type == OP_RV2GV) + && cUNOPx(curop)->op_first + && cUNOPx(curop)->op_first->op_type == OP_GV ) + || curop->op_type == OP_PADSV + || curop->op_type == OP_PADAV + || curop->op_type == OP_PADHV + || curop->op_type == OP_PADANY) { + repl_has_vars = 1; + konst = TRUE; + } + else konst = FALSE; + if (konst + && !(repl_has_vars + && (!PM_GETRE(pm) + || !RX_PRELEN(PM_GETRE(pm)) + || RX_EXTFLAGS(PM_GETRE(pm)) & RXf_EVAL_SEEN))) + { + pm->op_pmflags |= PMf_CONST; /* const for long enough */ + op_prepend_elem(o->op_type, scalar(repl), o); + } + else { rcop = alloc_LOGOP(OP_SUBSTCONT, scalar(repl), o); - rcop->op_private = 1; + rcop->op_private = 1; - /* establish postfix order */ - rcop->op_next = LINKLIST(repl); - repl->op_next = (OP*)rcop; + /* establish postfix order */ + rcop->op_next = LINKLIST(repl); + repl->op_next = (OP*)rcop; - pm->op_pmreplrootu.op_pmreplroot = scalar((OP*)rcop); - assert(!(pm->op_pmflags & PMf_ONCE)); - pm->op_pmstashstartu.op_pmreplstart = LINKLIST(rcop); - rcop->op_next = 0; - } + pm->op_pmreplrootu.op_pmreplroot = scalar((OP*)rcop); + assert(!(pm->op_pmflags & PMf_ONCE)); + pm->op_pmstashstartu.op_pmreplstart = LINKLIST(rcop); + rcop->op_next = 0; + } } return (OP*)pm; @@ -8588,15 +8683,14 @@ takes ownership of one reference to it. OP * Perl_newSVOP(pTHX_ I32 type, I32 flags, SV *sv) { - dVAR; SVOP *svop; PERL_ARGS_ASSERT_NEWSVOP; assert((PL_opargs[type] & OA_CLASS_MASK) == OA_SVOP - || (PL_opargs[type] & OA_CLASS_MASK) == OA_PVOP_OR_SVOP - || (PL_opargs[type] & OA_CLASS_MASK) == OA_FILESTATOP - || type == OP_CUSTOM); + || (PL_opargs[type] & OA_CLASS_MASK) == OA_PVOP_OR_SVOP + || (PL_opargs[type] & OA_CLASS_MASK) == OA_FILESTATOP + || type == OP_CUSTOM); NewOp(1101, svop, 1, SVOP); OpTYPE_set(svop, type); @@ -8605,9 +8699,9 @@ Perl_newSVOP(pTHX_ I32 type, I32 flags, SV *sv) svop->op_flags = (U8)flags; svop->op_private = (U8)(0 | (flags >> 8)); if (PL_opargs[type] & OA_RETSCALAR) - scalar((OP*)svop); + scalar((OP*)svop); if (PL_opargs[type] & OA_TARGET) - svop->op_targ = pad_alloc(type, SVs_PADTMP); + svop->op_targ = pad_alloc(type, SVs_PADTMP); return CHECKOP(type, svop); } @@ -8622,7 +8716,7 @@ Constructs and returns an op to access C<$_>. OP * Perl_newDEFSVOP(pTHX) { - return newSVREF(newGVOP(OP_GV, 0, PL_defgv)); + return newSVREF(newGVOP(OP_GV, 0, PL_defgv)); } #ifdef USE_ITHREADS @@ -8644,29 +8738,28 @@ This function only exists if Perl has been compiled to use ithreads. OP * Perl_newPADOP(pTHX_ I32 type, I32 flags, SV *sv) { - dVAR; PADOP *padop; PERL_ARGS_ASSERT_NEWPADOP; assert((PL_opargs[type] & OA_CLASS_MASK) == OA_SVOP - || (PL_opargs[type] & OA_CLASS_MASK) == OA_PVOP_OR_SVOP - || (PL_opargs[type] & OA_CLASS_MASK) == OA_FILESTATOP - || type == OP_CUSTOM); + || (PL_opargs[type] & OA_CLASS_MASK) == OA_PVOP_OR_SVOP + || (PL_opargs[type] & OA_CLASS_MASK) == OA_FILESTATOP + || type == OP_CUSTOM); NewOp(1101, padop, 1, PADOP); OpTYPE_set(padop, type); padop->op_padix = - pad_alloc(type, isGV(sv) ? SVf_READONLY : SVs_PADTMP); + pad_alloc(type, isGV(sv) ? SVf_READONLY : SVs_PADTMP); SvREFCNT_dec(PAD_SVl(padop->op_padix)); PAD_SETSV(padop->op_padix, sv); assert(sv); padop->op_next = (OP*)padop; padop->op_flags = (U8)flags; if (PL_opargs[type] & OA_RETSCALAR) - scalar((OP*)padop); + scalar((OP*)padop); if (PL_opargs[type] & OA_TARGET) - padop->op_targ = pad_alloc(type, SVs_PADTMP); + padop->op_targ = pad_alloc(type, SVs_PADTMP); return CHECKOP(type, padop); } @@ -8712,15 +8805,14 @@ have been allocated using C. OP * Perl_newPVOP(pTHX_ I32 type, I32 flags, char *pv) { - dVAR; const bool utf8 = cBOOL(flags & SVf_UTF8); PVOP *pvop; flags &= ~SVf_UTF8; assert((PL_opargs[type] & OA_CLASS_MASK) == OA_PVOP_OR_SVOP - || type == OP_RUNCV || type == OP_CUSTOM - || (PL_opargs[type] & OA_CLASS_MASK) == OA_LOOPEXOP); + || type == OP_RUNCV || type == OP_CUSTOM + || (PL_opargs[type] & OA_CLASS_MASK) == OA_LOOPEXOP); NewOp(1101, pvop, 1, PVOP); OpTYPE_set(pvop, type); @@ -8729,9 +8821,9 @@ Perl_newPVOP(pTHX_ I32 type, I32 flags, char *pv) pvop->op_flags = (U8)flags; pvop->op_private = utf8 ? OPpPV_IS_UTF8 : 0; if (PL_opargs[type] & OA_RETSCALAR) - scalar((OP*)pvop); + scalar((OP*)pvop); if (PL_opargs[type] & OA_TARGET) - pvop->op_targ = pad_alloc(type, SVs_PADTMP); + pvop->op_targ = pad_alloc(type, SVs_PADTMP); return CHECKOP(type, pvop); } @@ -8766,6 +8858,37 @@ Perl_package_version( pTHX_ OP *v ) op_free(v); } +/* Extract the first two components of a "version" object as two 8bit integers + * and return them packed into a single U16 in the format of PL_prevailing_version. + * This function only ever has to cope with version objects already known + * bounded by the current perl version, so we know its components will fit + * (Up until we reach perl version 5.256 anyway) */ +static U16 S_extract_shortver(pTHX_ SV *sv) +{ + SV *rv; + if(!SvRV(sv) || !SvOBJECT(rv = SvRV(sv)) || !sv_derived_from(sv, "version")) + return 0; + + AV *av = MUTABLE_AV(SvRV(*hv_fetchs(MUTABLE_HV(rv), "version", 0))); + + U16 shortver = 0; + + IV major = av_count(av) > 0 ? SvIV(*av_fetch(av, 0, false)) : 0; + if(major > 255) + shortver |= 255 << 8; + else + shortver |= major << 8; + + IV minor = av_count(av) > 1 ? SvIV(*av_fetch(av, 1, false)) : 0; + if(minor > 255) + shortver |= 255; + else + shortver |= minor; + + return shortver; +} +#define SHORTVER(maj,min) ((maj << 8) | min) + void Perl_utilize(pTHX_ int aver, I32 floor, OP *version, OP *idop, OP *arg) { @@ -8777,98 +8900,108 @@ Perl_utilize(pTHX_ int aver, I32 floor, OP *version, OP *idop, OP *arg) PERL_ARGS_ASSERT_UTILIZE; if (idop->op_type != OP_CONST) - Perl_croak(aTHX_ "Module name must be constant"); + Perl_croak(aTHX_ "Module name must be constant"); veop = NULL; if (version) { - SV * const vesv = ((SVOP*)version)->op_sv; + SV * const vesv = ((SVOP*)version)->op_sv; - if (!arg && !SvNIOKp(vesv)) { - arg = version; - } - else { - OP *pack; - SV *meth; + if (!arg && !SvNIOKp(vesv)) { + arg = version; + } + else { + OP *pack; + SV *meth; - if (version->op_type != OP_CONST || !SvNIOKp(vesv)) - Perl_croak(aTHX_ "Version number must be a constant number"); + if (version->op_type != OP_CONST || !SvNIOKp(vesv)) + Perl_croak(aTHX_ "Version number must be a constant number"); - /* Make copy of idop so we don't free it twice */ - pack = newSVOP(OP_CONST, 0, newSVsv(((SVOP*)idop)->op_sv)); + /* Make copy of idop so we don't free it twice */ + pack = newSVOP(OP_CONST, 0, newSVsv(((SVOP*)idop)->op_sv)); - /* Fake up a method call to VERSION */ - meth = newSVpvs_share("VERSION"); - veop = op_convert_list(OP_ENTERSUB, OPf_STACKED|OPf_SPECIAL, - op_append_elem(OP_LIST, - op_prepend_elem(OP_LIST, pack, version), - newMETHOP_named(OP_METHOD_NAMED, 0, meth))); - } + /* Fake up a method call to VERSION */ + meth = newSVpvs_share("VERSION"); + veop = op_convert_list(OP_ENTERSUB, OPf_STACKED|OPf_SPECIAL, + op_append_elem(OP_LIST, + op_prepend_elem(OP_LIST, pack, version), + newMETHOP_named(OP_METHOD_NAMED, 0, meth))); + } } /* Fake up an import/unimport */ if (arg && arg->op_type == OP_STUB) { - imop = arg; /* no import on explicit () */ + imop = arg; /* no import on explicit () */ } else if (SvNIOKp(((SVOP*)idop)->op_sv)) { - imop = NULL; /* use 5.0; */ - if (aver) - use_version = ((SVOP*)idop)->op_sv; - else - idop->op_private |= OPpCONST_NOVER; + imop = NULL; /* use 5.0; */ + if (aver) + use_version = ((SVOP*)idop)->op_sv; + else + idop->op_private |= OPpCONST_NOVER; } else { - SV *meth; + SV *meth; - /* Make copy of idop so we don't free it twice */ - pack = newSVOP(OP_CONST, 0, newSVsv(((SVOP*)idop)->op_sv)); + /* Make copy of idop so we don't free it twice */ + pack = newSVOP(OP_CONST, 0, newSVsv(((SVOP*)idop)->op_sv)); - /* Fake up a method call to import/unimport */ - meth = aver - ? newSVpvs_share("import") : newSVpvs_share("unimport"); - imop = op_convert_list(OP_ENTERSUB, OPf_STACKED|OPf_SPECIAL, - op_append_elem(OP_LIST, - op_prepend_elem(OP_LIST, pack, arg), - newMETHOP_named(OP_METHOD_NAMED, 0, meth) - )); + /* Fake up a method call to import/unimport */ + meth = aver + ? newSVpvs_share("import") : newSVpvs_share("unimport"); + imop = op_convert_list(OP_ENTERSUB, OPf_STACKED|OPf_SPECIAL, + op_append_elem(OP_LIST, + op_prepend_elem(OP_LIST, pack, arg), + newMETHOP_named(OP_METHOD_NAMED, 0, meth) + )); } /* Fake up the BEGIN {}, which does its thing immediately. */ newATTRSUB(floor, - newSVOP(OP_CONST, 0, newSVpvs_share("BEGIN")), - NULL, - NULL, - op_append_elem(OP_LINESEQ, - op_append_elem(OP_LINESEQ, - newSTATEOP(0, NULL, newUNOP(OP_REQUIRE, 0, idop)), - newSTATEOP(0, NULL, veop)), - newSTATEOP(0, NULL, imop) )); + newSVOP(OP_CONST, 0, newSVpvs_share("BEGIN")), + NULL, + NULL, + op_append_elem(OP_LINESEQ, + op_append_elem(OP_LINESEQ, + newSTATEOP(0, NULL, newUNOP(OP_REQUIRE, 0, idop)), + newSTATEOP(0, NULL, veop)), + newSTATEOP(0, NULL, imop) )); if (use_version) { - /* Enable the - * feature bundle that corresponds to the required version. */ - use_version = sv_2mortal(new_version(use_version)); - S_enable_feature_bundle(aTHX_ use_version); - - /* If a version >= 5.11.0 is requested, strictures are on by default! */ - if (vcmp(use_version, - sv_2mortal(upg_version(newSVnv(5.011000), FALSE))) >= 0) { - if (!(PL_hints & HINT_EXPLICIT_STRICT_REFS)) - PL_hints |= HINT_STRICT_REFS; - if (!(PL_hints & HINT_EXPLICIT_STRICT_SUBS)) - PL_hints |= HINT_STRICT_SUBS; - if (!(PL_hints & HINT_EXPLICIT_STRICT_VARS)) - PL_hints |= HINT_STRICT_VARS; - } - /* otherwise they are off */ - else { - if (!(PL_hints & HINT_EXPLICIT_STRICT_REFS)) - PL_hints &= ~HINT_STRICT_REFS; - if (!(PL_hints & HINT_EXPLICIT_STRICT_SUBS)) - PL_hints &= ~HINT_STRICT_SUBS; - if (!(PL_hints & HINT_EXPLICIT_STRICT_VARS)) - PL_hints &= ~HINT_STRICT_VARS; - } + /* Enable the + * feature bundle that corresponds to the required version. */ + use_version = sv_2mortal(new_version(use_version)); + S_enable_feature_bundle(aTHX_ use_version); + + U16 shortver = S_extract_shortver(aTHX_ use_version); + + /* If a version >= 5.11.0 is requested, strictures are on by default! */ + if (shortver >= SHORTVER(5, 11)) { + if (!(PL_hints & HINT_EXPLICIT_STRICT_REFS)) + PL_hints |= HINT_STRICT_REFS; + if (!(PL_hints & HINT_EXPLICIT_STRICT_SUBS)) + PL_hints |= HINT_STRICT_SUBS; + if (!(PL_hints & HINT_EXPLICIT_STRICT_VARS)) + PL_hints |= HINT_STRICT_VARS; + + if (shortver >= SHORTVER(5, 35)) + free_and_set_cop_warnings(&PL_compiling, pWARN_ALL); + } + /* otherwise they are off */ + else { + if(PL_prevailing_version >= SHORTVER(5, 11)) + deprecate_fatal_in("5.40", + "Downgrading a use VERSION declaration to below v5.11"); + + if (!(PL_hints & HINT_EXPLICIT_STRICT_REFS)) + PL_hints &= ~HINT_STRICT_REFS; + if (!(PL_hints & HINT_EXPLICIT_STRICT_SUBS)) + PL_hints &= ~HINT_STRICT_SUBS; + if (!(PL_hints & HINT_EXPLICIT_STRICT_VARS)) + PL_hints &= ~HINT_STRICT_VARS; + } + + PL_prevailing_version = shortver; } /* The "did you use incorrect case?" warning used to be here. @@ -8894,11 +9027,12 @@ Perl_utilize(pTHX_ int aver, I32 floor, OP *version, OP *idop, OP *arg) } /* -=head1 Embedding Functions +=for apidoc_section $embedding -=for apidoc load_module +=for apidoc load_module +=for apidoc_item load_module_nocontext -Loads the module whose name is pointed to by the string part of C. +These load the module whose name is pointed to by the string part of C. Note that the actual module name, not its filename, should be given. Eg, "Foo::Bar" instead of "Foo/Bar.pm". ver, if specified and not NULL, provides version semantics similar to C. The optional @@ -8923,10 +9057,17 @@ decremented. In addition, the C argument is modified. If C is set, the module is loaded as if with C rather than C. +C and C have the same apparent signature, +but the former hides the fact that it is accessing a thread context parameter. +So use the latter when you get a compilation error about C. + =for apidoc Amnh||PERL_LOADMOD_DENY =for apidoc Amnh||PERL_LOADMOD_NOIMPORT =for apidoc Amnh||PERL_LOADMOD_IMPORT_OPS +=for apidoc vload_module +Like C> but the arguments are an encapsulated argument list. + =cut */ void @@ -8941,7 +9082,7 @@ Perl_load_module(pTHX_ U32 flags, SV *name, SV *ver, ...) va_end(args); } -#ifdef PERL_IMPLICIT_CONTEXT +#ifdef MULTIPLICITY void Perl_load_module_nocontext(U32 flags, SV *name, SV *ver, ...) { @@ -8983,24 +9124,24 @@ Perl_vload_module(pTHX_ U32 flags, SV *name, SV *ver, va_list *args) modname = newSVOP(OP_CONST, 0, name); modname->op_private |= OPpCONST_BARE; if (ver) { - veop = newSVOP(OP_CONST, 0, ver); + veop = newSVOP(OP_CONST, 0, ver); } else - veop = NULL; + veop = NULL; if (flags & PERL_LOADMOD_NOIMPORT) { - imop = sawparens(newNULLLIST()); + imop = sawparens(newNULLLIST()); } else if (flags & PERL_LOADMOD_IMPORT_OPS) { - imop = va_arg(*args, OP*); + imop = va_arg(*args, OP*); } else { - SV *sv; - imop = NULL; - sv = va_arg(*args, SV*); - while (sv) { - imop = op_append_elem(OP_LIST, imop, newSVOP(OP_CONST, 0, sv)); - sv = va_arg(*args, SV*); - } + SV *sv; + imop = NULL; + sv = va_arg(*args, SV*); + while (sv) { + imop = op_append_elem(OP_LIST, imop, newSVOP(OP_CONST, 0, sv)); + sv = va_arg(*args, SV*); + } } utilize(!(flags & PERL_LOADMOD_DENY), floor, veop, modname, imop); @@ -9011,9 +9152,9 @@ PERL_STATIC_INLINE OP * S_new_entersubop(pTHX_ GV *gv, OP *arg) { return newUNOP(OP_ENTERSUB, OPf_STACKED, - newLISTOP(OP_LIST, 0, arg, - newUNOP(OP_RV2CV, 0, - newGVOP(OP_GV, 0, gv)))); + newLISTOP(OP_LIST, 0, arg, + newUNOP(OP_RV2CV, 0, + newGVOP(OP_GV, 0, gv)))); } OP * @@ -9025,16 +9166,16 @@ Perl_dofile(pTHX_ OP *term, I32 force_builtin) PERL_ARGS_ASSERT_DOFILE; if (!force_builtin && (gv = gv_override("do", 2))) { - doop = S_new_entersubop(aTHX_ gv, term); + doop = S_new_entersubop(aTHX_ gv, term); } else { - doop = newUNOP(OP_DOFILE, 0, scalar(term)); + doop = newUNOP(OP_DOFILE, 0, scalar(term)); } return doop; } /* -=head1 Optree construction +=for apidoc_section $optree_construction =for apidoc newSLICEOP @@ -9053,8 +9194,8 @@ OP * Perl_newSLICEOP(pTHX_ I32 flags, OP *subscript, OP *listval) { return newBINOP(OP_LSLICE, flags, - list(force_list(subscript, 1)), - list(force_list(listval, 1)) ); + list(force_list(subscript, TRUE)), + list(force_list(listval, TRUE))); } #define ASSIGN_SCALAR 0 @@ -9075,24 +9216,24 @@ S_assignment_type(pTHX_ const OP *o) U8 ret; if (!o) - return ASSIGN_LIST; + return ASSIGN_LIST; if (o->op_type == OP_SREFGEN) { - OP * const kid = cUNOPx(cUNOPo->op_first)->op_first; - type = kid->op_type; - flags = o->op_flags | kid->op_flags; - if (!(flags & OPf_PARENS) - && (kid->op_type == OP_RV2AV || kid->op_type == OP_PADAV || - kid->op_type == OP_RV2HV || kid->op_type == OP_PADHV )) - return ASSIGN_REF; - ret = ASSIGN_REF; + OP * const kid = cUNOPx(cUNOPo->op_first)->op_first; + type = kid->op_type; + flags = o->op_flags | kid->op_flags; + if (!(flags & OPf_PARENS) + && (kid->op_type == OP_RV2AV || kid->op_type == OP_PADAV || + kid->op_type == OP_RV2HV || kid->op_type == OP_PADHV )) + return ASSIGN_REF; + ret = ASSIGN_REF; } else { - if ((o->op_type == OP_NULL) && (o->op_flags & OPf_KIDS)) - o = cUNOPo->op_first; - flags = o->op_flags; - type = o->op_type; - ret = ASSIGN_SCALAR; + if ((o->op_type == OP_NULL) && (o->op_flags & OPf_KIDS)) + o = cUNOPo->op_first; + flags = o->op_flags; + type = o->op_type; + ret = ASSIGN_SCALAR; } if (type == OP_COND_EXPR) { @@ -9100,29 +9241,29 @@ S_assignment_type(pTHX_ const OP *o) const I32 t = assignment_type(sib); const I32 f = assignment_type(OpSIBLING(sib)); - if (t == ASSIGN_LIST && f == ASSIGN_LIST) - return ASSIGN_LIST; - if ((t == ASSIGN_LIST) ^ (f == ASSIGN_LIST)) - yyerror("Assignment to both a list and a scalar"); - return ASSIGN_SCALAR; + if (t == ASSIGN_LIST && f == ASSIGN_LIST) + return ASSIGN_LIST; + if ((t == ASSIGN_LIST) ^ (f == ASSIGN_LIST)) + yyerror("Assignment to both a list and a scalar"); + return ASSIGN_SCALAR; } if (type == OP_LIST && - (flags & OPf_WANT) == OPf_WANT_SCALAR && - o->op_private & OPpLVAL_INTRO) - return ret; + (flags & OPf_WANT) == OPf_WANT_SCALAR && + o->op_private & OPpLVAL_INTRO) + return ret; if (type == OP_LIST || flags & OPf_PARENS || - type == OP_RV2AV || type == OP_RV2HV || - type == OP_ASLICE || type == OP_HSLICE || + type == OP_RV2AV || type == OP_RV2HV || + type == OP_ASLICE || type == OP_HSLICE || type == OP_KVASLICE || type == OP_KVHSLICE || type == OP_REFGEN) - return ASSIGN_LIST; + return ASSIGN_LIST; if (type == OP_PADAV || type == OP_PADHV) - return ASSIGN_LIST; + return ASSIGN_LIST; if (type == OP_RV2SV) - return ret; + return ret; return ret; } @@ -9130,15 +9271,14 @@ S_assignment_type(pTHX_ const OP *o) static OP * S_newONCEOP(pTHX_ OP *initop, OP *padop) { - dVAR; const PADOFFSET target = padop->op_targ; OP *const other = newOP(OP_PADSV, - padop->op_flags - | ((padop->op_private & ~OPpLVAL_INTRO) << 8)); + padop->op_flags + | ((padop->op_private & ~OPpLVAL_INTRO) << 8)); OP *const first = newOP(OP_NULL, 0); OP *const nullop = newCONDOP(0, first, initop, other); /* XXX targlex disabled for now; see ticket #124160 - newCONDOP(0, first, S_maybe_targlex(aTHX_ initop), other); + newCONDOP(0, first, S_maybe_targlex(aTHX_ initop), other); */ OP *const condop = first->op_next; @@ -9185,83 +9325,84 @@ Perl_newASSIGNOP(pTHX_ I32 flags, OP *left, I32 optype, OP *right) OP *o; I32 assign_type; - if (optype) { - if (optype == OP_ANDASSIGN || optype == OP_ORASSIGN || optype == OP_DORASSIGN) { + switch (optype) { + case 0: break; + case OP_ANDASSIGN: + case OP_ORASSIGN: + case OP_DORASSIGN: right = scalar(right); - return newLOGOP(optype, 0, - op_lvalue(scalar(left), optype), - newBINOP(OP_SASSIGN, OPpASSIGN_BACKWARDS<<8, right, right)); - } - else { - return newBINOP(optype, OPf_STACKED, - op_lvalue(scalar(left), optype), scalar(right)); - } + return newLOGOP(optype, 0, + op_lvalue(scalar(left), optype), + newBINOP(OP_SASSIGN, OPpASSIGN_BACKWARDS<<8, right, right)); + default: + return newBINOP(optype, OPf_STACKED, + op_lvalue(scalar(left), optype), scalar(right)); } if ((assign_type = assignment_type(left)) == ASSIGN_LIST) { - OP *state_var_op = NULL; - static const char no_list_state[] = "Initialization of state variables" - " in list currently forbidden"; - OP *curop; - - if (left->op_type == OP_ASLICE || left->op_type == OP_HSLICE) - left->op_private &= ~ OPpSLICEWARNING; - - PL_modcount = 0; - left = op_lvalue(left, OP_AASSIGN); - curop = list(force_list(left, 1)); - o = newBINOP(OP_AASSIGN, flags, list(force_list(right, 1)), curop); - o->op_private = (U8)(0 | (flags >> 8)); - - if (OP_TYPE_IS_OR_WAS(left, OP_LIST)) - { - OP *lop = ((LISTOP*)left)->op_first, *vop, *eop; - if (!(left->op_flags & OPf_PARENS) && - lop->op_type == OP_PUSHMARK && - (vop = OpSIBLING(lop)) && - (vop->op_type == OP_PADAV || vop->op_type == OP_PADHV) && - !(vop->op_flags & OPf_PARENS) && - (vop->op_private & (OPpLVAL_INTRO|OPpPAD_STATE)) == - (OPpLVAL_INTRO|OPpPAD_STATE) && - (eop = OpSIBLING(vop)) && - eop->op_type == OP_ENTERSUB && - !OpHAS_SIBLING(eop)) { - state_var_op = vop; - } else { - while (lop) { - if ((lop->op_type == OP_PADSV || - lop->op_type == OP_PADAV || - lop->op_type == OP_PADHV || - lop->op_type == OP_PADANY) - && (lop->op_private & OPpPAD_STATE) - ) - yyerror(no_list_state); - lop = OpSIBLING(lop); - } - } - } - else if ( (left->op_private & OPpLVAL_INTRO) + OP *state_var_op = NULL; + static const char no_list_state[] = "Initialization of state variables" + " in list currently forbidden"; + OP *curop; + + if (left->op_type == OP_ASLICE || left->op_type == OP_HSLICE) + left->op_private &= ~ OPpSLICEWARNING; + + PL_modcount = 0; + left = op_lvalue(left, OP_AASSIGN); + curop = list(force_list(left, TRUE)); + o = newBINOP(OP_AASSIGN, flags, list(force_list(right, TRUE)), curop); + o->op_private = (U8)(0 | (flags >> 8)); + + if (OP_TYPE_IS_OR_WAS(left, OP_LIST)) + { + OP *lop = ((LISTOP*)left)->op_first, *vop, *eop; + if (!(left->op_flags & OPf_PARENS) && + lop->op_type == OP_PUSHMARK && + (vop = OpSIBLING(lop)) && + (vop->op_type == OP_PADAV || vop->op_type == OP_PADHV) && + !(vop->op_flags & OPf_PARENS) && + (vop->op_private & (OPpLVAL_INTRO|OPpPAD_STATE)) == + (OPpLVAL_INTRO|OPpPAD_STATE) && + (eop = OpSIBLING(vop)) && + eop->op_type == OP_ENTERSUB && + !OpHAS_SIBLING(eop)) { + state_var_op = vop; + } else { + while (lop) { + if ((lop->op_type == OP_PADSV || + lop->op_type == OP_PADAV || + lop->op_type == OP_PADHV || + lop->op_type == OP_PADANY) + && (lop->op_private & OPpPAD_STATE) + ) + yyerror(no_list_state); + lop = OpSIBLING(lop); + } + } + } + else if ( (left->op_private & OPpLVAL_INTRO) && (left->op_private & OPpPAD_STATE) - && ( left->op_type == OP_PADSV - || left->op_type == OP_PADAV - || left->op_type == OP_PADHV - || left->op_type == OP_PADANY) + && ( left->op_type == OP_PADSV + || left->op_type == OP_PADAV + || left->op_type == OP_PADHV + || left->op_type == OP_PADANY) ) { - /* All single variable list context state assignments, hence - state ($a) = ... - (state $a) = ... - state @a = ... - state (@a) = ... - (state @a) = ... - state %a = ... - state (%a) = ... - (state %a) = ... - */ + /* All single variable list context state assignments, hence + state ($a) = ... + (state $a) = ... + state @a = ... + state (@a) = ... + (state @a) = ... + state %a = ... + state (%a) = ... + (state %a) = ... + */ if (left->op_flags & OPf_PARENS) - yyerror(no_list_state); - else - state_var_op = left; - } + yyerror(no_list_state); + else + state_var_op = left; + } /* optimise @a = split(...) into: * @{expr}: split(..., @{expr}) (where @a is not flattened) @@ -9269,7 +9410,7 @@ Perl_newASSIGNOP(pTHX_ I32 flags, OP *left, I32 optype, OP *right) * the split op itself) */ - if ( right + if ( right && right->op_type == OP_SPLIT /* don't do twice, e.g. @b = (@a = split) */ && !(right->op_private & OPpSPLIT_ASSIGN)) @@ -9351,24 +9492,24 @@ Perl_newASSIGNOP(pTHX_ I32 flags, OP *left, I32 optype, OP *right) } } } - } + } - if (state_var_op) - o = S_newONCEOP(aTHX_ o, state_var_op); - return o; + if (state_var_op) + o = S_newONCEOP(aTHX_ o, state_var_op); + return o; } if (assign_type == ASSIGN_REF) - return newBINOP(OP_REFASSIGN, flags, scalar(right), left); + return newBINOP(OP_REFASSIGN, flags, scalar(right), left); if (!right) - right = newOP(OP_UNDEF, 0); + right = newOP(OP_UNDEF, 0); if (right->op_type == OP_READLINE) { - right->op_flags |= OPf_STACKED; - return newBINOP(OP_NULL, flags, op_lvalue(scalar(left), OP_SASSIGN), - scalar(right)); + right->op_flags |= OPf_STACKED; + return newBINOP(OP_NULL, flags, op_lvalue(scalar(left), OP_SASSIGN), + scalar(right)); } else { - o = newBINOP(OP_SASSIGN, flags, - scalar(right), op_lvalue(scalar(left), OP_SASSIGN) ); + o = newBINOP(OP_SASSIGN, flags, + scalar(right), op_lvalue(scalar(left), OP_SASSIGN) ); } return o; } @@ -9394,11 +9535,11 @@ is consumed by this function and becomes part of the returned op tree. OP * Perl_newSTATEOP(pTHX_ I32 flags, char *label, OP *o) { - dVAR; const U32 seq = intro_my(); const U32 utf8 = flags & SVf_UTF8; COP *cop; + assert(PL_parser); PL_parser->parsed_sub = 0; flags &= ~SVf_UTF8; @@ -9421,13 +9562,13 @@ Perl_newSTATEOP(pTHX_ I32 flags, char *label, OP *o) cop->cop_warnings = DUP_WARNINGS(PL_curcop->cop_warnings); CopHINTHASH_set(cop, cophh_copy(CopHINTHASH_get(PL_curcop))); if (label) { - Perl_cop_store_label(aTHX_ cop, label, strlen(label), utf8); + Perl_cop_store_label(aTHX_ cop, label, strlen(label), utf8); - PL_hints |= HINT_BLOCK_SCOPE; - /* It seems that we need to defer freeing this pointer, as other parts - of the grammar end up wanting to copy it after this op has been - created. */ - SAVEFREEPV(label); + PL_hints |= HINT_BLOCK_SCOPE; + /* It seems that we need to defer freeing this pointer, as other parts + of the grammar end up wanting to copy it after this op has been + created. */ + SAVEFREEPV(label); } if (PL_parser->preambling != NOLINE) { @@ -9437,8 +9578,8 @@ Perl_newSTATEOP(pTHX_ I32 flags, char *label, OP *o) else if (PL_parser->copline == NOLINE) CopLINE_set(cop, CopLINE(PL_curcop)); else { - CopLINE_set(cop, PL_parser->copline); - PL_parser->copline = NOLINE; + CopLINE_set(cop, PL_parser->copline); + PL_parser->copline = NOLINE; } #ifdef USE_ITHREADS CopFILE_set(cop, CopFILE(PL_curcop)); /* XXX share in a pvtable? */ @@ -9448,19 +9589,19 @@ Perl_newSTATEOP(pTHX_ I32 flags, char *label, OP *o) CopSTASH_set(cop, PL_curstash); if (cop->op_type == OP_DBSTATE) { - /* this line can have a breakpoint - store the cop in IV */ - AV *av = CopFILEAVx(PL_curcop); - if (av) { - SV * const * const svp = av_fetch(av, CopLINE(cop), FALSE); - if (svp && *svp != &PL_sv_undef ) { - (void)SvIOK_on(*svp); - SvIV_set(*svp, PTR2IV(cop)); - } - } + /* this line can have a breakpoint - store the cop in IV */ + AV *av = CopFILEAVx(PL_curcop); + if (av) { + SV * const * const svp = av_fetch(av, CopLINE(cop), FALSE); + if (svp && *svp != &PL_sv_undef ) { + (void)SvIOK_on(*svp); + SvIV_set(*svp, PTR2IV(cop)); + } + } } if (flags & OPf_SPECIAL) - op_null((OP*)cop); + op_null((OP*)cop); return op_prepend_elem(OP_LINESEQ, (OP*)cop, o); } @@ -9499,43 +9640,43 @@ S_search_const(pTHX_ OP *o) redo: switch (o->op_type) { - case OP_CONST: - return o; - case OP_NULL: - if (o->op_flags & OPf_KIDS) { - o = cUNOPo->op_first; + case OP_CONST: + return o; + case OP_NULL: + if (o->op_flags & OPf_KIDS) { + o = cUNOPo->op_first; goto redo; } - break; - case OP_LEAVE: - case OP_SCOPE: - case OP_LINESEQ: - { - OP *kid; - if (!(o->op_flags & OPf_KIDS)) - return NULL; - kid = cLISTOPo->op_first; - - do { - switch (kid->op_type) { - case OP_ENTER: - case OP_NULL: - case OP_NEXTSTATE: - kid = OpSIBLING(kid); - break; - default: - if (kid != cLISTOPo->op_last) - return NULL; - goto last; - } - } while (kid); - - if (!kid) - kid = cLISTOPo->op_last; + break; + case OP_LEAVE: + case OP_SCOPE: + case OP_LINESEQ: + { + OP *kid; + if (!(o->op_flags & OPf_KIDS)) + return NULL; + kid = cLISTOPo->op_first; + + do { + switch (kid->op_type) { + case OP_ENTER: + case OP_NULL: + case OP_NEXTSTATE: + kid = OpSIBLING(kid); + break; + default: + if (kid != cLISTOPo->op_last) + return NULL; + goto last; + } + } while (kid); + + if (!kid) + kid = cLISTOPo->op_last; last: - o = kid; + o = kid; goto redo; - } + } } return NULL; @@ -9545,7 +9686,6 @@ S_search_const(pTHX_ OP *o) STATIC OP * S_new_logop(pTHX_ I32 type, I32 flags, OP** firstp, OP** otherp) { - dVAR; LOGOP *logop; OP *o; OP *first; @@ -9567,138 +9707,138 @@ S_new_logop(pTHX_ I32 type, I32 flags, OP** firstp, OP** otherp) case OP_NEXT: case OP_LAST: case OP_REDO: - /* XXX: Perhaps we should emit a stronger warning for these. - Even with the high-precedence operator they don't seem to do - anything sensible. + /* XXX: Perhaps we should emit a stronger warning for these. + Even with the high-precedence operator they don't seem to do + anything sensible. - But until we do, fall through here. + But until we do, fall through here. */ case OP_RETURN: case OP_EXIT: case OP_DIE: case OP_GOTO: - /* XXX: Currently we allow people to "shoot themselves in the - foot" by explicitly writing "(return $a) or $b". + /* XXX: Currently we allow people to "shoot themselves in the + foot" by explicitly writing "(return $a) or $b". - Warn unless we are looking at the result from folding or if - the programmer explicitly grouped the operators like this. - The former can occur with e.g. + Warn unless we are looking at the result from folding or if + the programmer explicitly grouped the operators like this. + The former can occur with e.g. - use constant FEATURE => ( $] >= ... ); - sub { not FEATURE and return or do_stuff(); } - */ - if (!first->op_folded && !(first->op_flags & OPf_PARENS)) - Perl_ck_warner(aTHX_ packWARN(WARN_SYNTAX), - "Possible precedence issue with control flow operator"); - /* XXX: Should we optimze this to "return $a;" (i.e. remove - the "or $b" part)? - */ - break; + use constant FEATURE => ( $] >= ... ); + sub { not FEATURE and return or do_stuff(); } + */ + if (!first->op_folded && !(first->op_flags & OPf_PARENS)) + Perl_ck_warner(aTHX_ packWARN(WARN_SYNTAX), + "Possible precedence issue with control flow operator"); + /* XXX: Should we optimze this to "return $a;" (i.e. remove + the "or $b" part)? + */ + break; } if (type == OP_XOR) /* Not short circuit, but here by precedence. */ - return newBINOP(type, flags, scalar(first), scalar(other)); + return newBINOP(type, flags, scalar(first), scalar(other)); assert((PL_opargs[type] & OA_CLASS_MASK) == OA_LOGOP - || type == OP_CUSTOM); + || type == OP_CUSTOM); scalarboolean(first); /* search for a constant op that could let us fold the test */ if ((cstop = search_const(first))) { - if (cstop->op_private & OPpCONST_STRICT) - no_bareword_allowed(cstop); - else if ((cstop->op_private & OPpCONST_BARE)) - Perl_ck_warner(aTHX_ packWARN(WARN_BAREWORD), "Bareword found in conditional"); - if ((type == OP_AND && SvTRUE(((SVOP*)cstop)->op_sv)) || - (type == OP_OR && !SvTRUE(((SVOP*)cstop)->op_sv)) || - (type == OP_DOR && !SvOK(((SVOP*)cstop)->op_sv))) { + if (cstop->op_private & OPpCONST_STRICT) + no_bareword_allowed(cstop); + else if ((cstop->op_private & OPpCONST_BARE)) + Perl_ck_warner(aTHX_ packWARN(WARN_BAREWORD), "Bareword found in conditional"); + if ((type == OP_AND && SvTRUE(((SVOP*)cstop)->op_sv)) || + (type == OP_OR && !SvTRUE(((SVOP*)cstop)->op_sv)) || + (type == OP_DOR && !SvOK(((SVOP*)cstop)->op_sv))) { /* Elide the (constant) lhs, since it can't affect the outcome */ - *firstp = NULL; - if (other->op_type == OP_CONST) - other->op_private |= OPpCONST_SHORTCIRCUIT; - op_free(first); - if (other->op_type == OP_LEAVE) - other = newUNOP(OP_NULL, OPf_SPECIAL, other); - else if (other->op_type == OP_MATCH - || other->op_type == OP_SUBST - || other->op_type == OP_TRANSR - || other->op_type == OP_TRANS) - /* Mark the op as being unbindable with =~ */ - other->op_flags |= OPf_SPECIAL; - - other->op_folded = 1; - return other; - } - else { + *firstp = NULL; + if (other->op_type == OP_CONST) + other->op_private |= OPpCONST_SHORTCIRCUIT; + op_free(first); + if (other->op_type == OP_LEAVE) + other = newUNOP(OP_NULL, OPf_SPECIAL, other); + else if (other->op_type == OP_MATCH + || other->op_type == OP_SUBST + || other->op_type == OP_TRANSR + || other->op_type == OP_TRANS) + /* Mark the op as being unbindable with =~ */ + other->op_flags |= OPf_SPECIAL; + + other->op_folded = 1; + return other; + } + else { /* Elide the rhs, since the outcome is entirely determined by * the (constant) lhs */ - /* check for C, or C */ - const OP *o2 = other; - if ( ! (o2->op_type == OP_LIST - && (( o2 = cUNOPx(o2)->op_first)) - && o2->op_type == OP_PUSHMARK - && (( o2 = OpSIBLING(o2))) ) - ) - o2 = other; - if ((o2->op_type == OP_PADSV || o2->op_type == OP_PADAV - || o2->op_type == OP_PADHV) - && o2->op_private & OPpLVAL_INTRO - && !(o2->op_private & OPpPAD_STATE)) - { + /* check for C, or C */ + const OP *o2 = other; + if ( ! (o2->op_type == OP_LIST + && (( o2 = cUNOPx(o2)->op_first)) + && o2->op_type == OP_PUSHMARK + && (( o2 = OpSIBLING(o2))) ) + ) + o2 = other; + if ((o2->op_type == OP_PADSV || o2->op_type == OP_PADAV + || o2->op_type == OP_PADHV) + && o2->op_private & OPpLVAL_INTRO + && !(o2->op_private & OPpPAD_STATE)) + { Perl_croak(aTHX_ "This use of my() in false conditional is " "no longer allowed"); - } + } - *otherp = NULL; - if (cstop->op_type == OP_CONST) - cstop->op_private |= OPpCONST_SHORTCIRCUIT; + *otherp = NULL; + if (cstop->op_type == OP_CONST) + cstop->op_private |= OPpCONST_SHORTCIRCUIT; op_free(other); - return first; - } + return first; + } } else if ((first->op_flags & OPf_KIDS) && type != OP_DOR - && ckWARN(WARN_MISC)) /* [#24076] Don't warn for err FOO. */ + && ckWARN(WARN_MISC)) /* [#24076] Don't warn for err FOO. */ { - const OP * const k1 = ((UNOP*)first)->op_first; - const OP * const k2 = OpSIBLING(k1); - OPCODE warnop = 0; - switch (first->op_type) - { - case OP_NULL: - if (k2 && k2->op_type == OP_READLINE - && (k2->op_flags & OPf_STACKED) - && ((k1->op_flags & OPf_WANT) == OPf_WANT_SCALAR)) - { - warnop = k2->op_type; - } - break; - - case OP_SASSIGN: - if (k1->op_type == OP_READDIR - || k1->op_type == OP_GLOB - || (k1->op_type == OP_NULL && k1->op_targ == OP_GLOB) + const OP * const k1 = ((UNOP*)first)->op_first; + const OP * const k2 = OpSIBLING(k1); + OPCODE warnop = 0; + switch (first->op_type) + { + case OP_NULL: + if (k2 && k2->op_type == OP_READLINE + && (k2->op_flags & OPf_STACKED) + && ((k1->op_flags & OPf_WANT) == OPf_WANT_SCALAR)) + { + warnop = k2->op_type; + } + break; + + case OP_SASSIGN: + if (k1->op_type == OP_READDIR + || k1->op_type == OP_GLOB + || (k1->op_type == OP_NULL && k1->op_targ == OP_GLOB) || k1->op_type == OP_EACH || k1->op_type == OP_AEACH) - { - warnop = ((k1->op_type == OP_NULL) - ? (OPCODE)k1->op_targ : k1->op_type); - } - break; - } - if (warnop) { - const line_t oldline = CopLINE(PL_curcop); + { + warnop = ((k1->op_type == OP_NULL) + ? (OPCODE)k1->op_targ : k1->op_type); + } + break; + } + if (warnop) { + const line_t oldline = CopLINE(PL_curcop); /* This ensures that warnings are reported at the first line of the construction, not the last. */ - CopLINE_set(PL_curcop, PL_parser->copline); - Perl_warner(aTHX_ packWARN(WARN_MISC), - "Value of %s%s can be \"0\"; test with defined()", - PL_op_desc[warnop], - ((warnop == OP_READLINE || warnop == OP_GLOB) - ? " construct" : "() operator")); - CopLINE_set(PL_curcop, oldline); - } + CopLINE_set(PL_curcop, PL_parser->copline); + Perl_warner(aTHX_ packWARN(WARN_MISC), + "Value of %s%s can be \"0\"; test with defined()", + PL_op_desc[warnop], + ((warnop == OP_READLINE || warnop == OP_GLOB) + ? " construct" : "() operator")); + CopLINE_set(PL_curcop, oldline); + } } /* optimize AND and OR ops that have NOTs as children */ @@ -9733,8 +9873,8 @@ S_new_logop(pTHX_ I32 type, I32 flags, OP** firstp, OP** otherp) CHECKOP(type,logop); o = newUNOP(prepend_not ? OP_NOT : OP_NULL, - PL_opargs[type] & OA_RETSCALAR ? OPf_WANT_SCALAR : 0, - (OP*)logop); + PL_opargs[type] & OA_RETSCALAR ? OPf_WANT_SCALAR : 0, + (OP*)logop); other->op_next = o; return o; @@ -9757,7 +9897,6 @@ this function and become part of the constructed op tree. OP * Perl_newCONDOP(pTHX_ I32 flags, OP *first, OP *trueop, OP *falseop) { - dVAR; LOGOP *logop; OP *start; OP *o; @@ -9766,30 +9905,30 @@ Perl_newCONDOP(pTHX_ I32 flags, OP *first, OP *trueop, OP *falseop) PERL_ARGS_ASSERT_NEWCONDOP; if (!falseop) - return newLOGOP(OP_AND, 0, first, trueop); + return newLOGOP(OP_AND, 0, first, trueop); if (!trueop) - return newLOGOP(OP_OR, 0, first, falseop); + return newLOGOP(OP_OR, 0, first, falseop); scalarboolean(first); if ((cstop = search_const(first))) { - /* Left or right arm of the conditional? */ - const bool left = SvTRUE(((SVOP*)cstop)->op_sv); - OP *live = left ? trueop : falseop; - OP *const dead = left ? falseop : trueop; + /* Left or right arm of the conditional? */ + const bool left = SvTRUE(((SVOP*)cstop)->op_sv); + OP *live = left ? trueop : falseop; + OP *const dead = left ? falseop : trueop; if (cstop->op_private & OPpCONST_BARE && - cstop->op_private & OPpCONST_STRICT) { - no_bareword_allowed(cstop); - } + cstop->op_private & OPpCONST_STRICT) { + no_bareword_allowed(cstop); + } op_free(first); op_free(dead); - if (live->op_type == OP_LEAVE) - live = newUNOP(OP_NULL, OPf_SPECIAL, live); - else if (live->op_type == OP_MATCH || live->op_type == OP_SUBST - || live->op_type == OP_TRANS || live->op_type == OP_TRANSR) - /* Mark the op as being unbindable with =~ */ - live->op_flags |= OPf_SPECIAL; - live->op_folded = 1; - return live; + if (live->op_type == OP_LEAVE) + live = newUNOP(OP_NULL, OPf_SPECIAL, live); + else if (live->op_type == OP_MATCH || live->op_type == OP_SUBST + || live->op_type == OP_TRANS || live->op_type == OP_TRANSR) + /* Mark the op as being unbindable with =~ */ + live->op_flags |= OPf_SPECIAL; + live->op_folded = 1; + return live; } logop = alloc_LOGOP(OP_COND_EXPR, first, LINKLIST(trueop)); logop->op_flags |= (U8)flags; @@ -9797,7 +9936,7 @@ Perl_newCONDOP(pTHX_ I32 flags, OP *first, OP *trueop, OP *falseop) logop->op_next = LINKLIST(falseop); CHECKOP(OP_COND_EXPR, /* that's logop->op_type */ - logop); + logop); /* establish postfix order */ start = LINKLIST(first); @@ -9815,6 +9954,63 @@ Perl_newCONDOP(pTHX_ I32 flags, OP *first, OP *trueop, OP *falseop) return o; } +/* +=for apidoc newTRYCATCHOP + +Constructs and returns a conditional execution statement that implements +the C/C semantics. First the op tree in C is executed, +inside a context that traps exceptions. If an exception occurs then the +optree in C is executed, with the trapped exception set into the +lexical variable given by C (which must be an op of type +C). All the optrees are consumed by this function and become part +of the returned op tree. + +The C argument is currently ignored. + +=cut + */ + +OP * +Perl_newTRYCATCHOP(pTHX_ I32 flags, OP *tryblock, OP *catchvar, OP *catchblock) +{ + OP *o, *catchop; + + PERL_ARGS_ASSERT_NEWTRYCATCHOP; + assert(catchvar->op_type == OP_PADSV); + + PERL_UNUSED_ARG(flags); + + /* The returned optree is shaped as: + * LISTOP leavetrycatch + * LOGOP entertrycatch + * LISTOP poptry + * $tryblock here + * LOGOP catch + * $catchblock here + */ + + if(tryblock->op_type != OP_LINESEQ) + tryblock = op_convert_list(OP_LINESEQ, 0, tryblock); + OpTYPE_set(tryblock, OP_POPTRY); + + /* Manually construct a naked LOGOP. + * Normally if we call newLOGOP the returned value is a UNOP(OP_NULL) + * containing the LOGOP we wanted as its op_first */ + catchop = (OP *)alloc_LOGOP(OP_CATCH, newOP(OP_NULL, 0), catchblock); + OpMORESIB_set(cUNOPx(catchop)->op_first, catchblock); + OpLASTSIB_set(catchblock, catchop); + + /* Inject the catchvar's pad offset into the OP_CATCH targ */ + cLOGOPx(catchop)->op_targ = catchvar->op_targ; + op_free(catchvar); + + /* Build the optree structure */ + o = newLISTOP(OP_LIST, 0, tryblock, catchop); + o = op_convert_list(OP_ENTERTRYCATCH, 0, o); + + return o; +} + /* =for apidoc newRANGE @@ -9859,10 +10055,10 @@ Perl_newRANGE(pTHX_ I32 flags, OP *left, OP *right) right->op_next = flop; range->op_targ = - pad_add_name_pvn("$", 1, padadd_NO_DUP_CHECK|padadd_STATE, 0, 0); + pad_add_name_pvn("$", 1, padadd_NO_DUP_CHECK|padadd_STATE, 0, 0); sv_upgrade(PAD_SV(range->op_targ), SVt_PVNV); flip->op_targ = - pad_add_name_pvn("$", 1, padadd_NO_DUP_CHECK|padadd_STATE, 0, 0);; + pad_add_name_pvn("$", 1, padadd_NO_DUP_CHECK|padadd_STATE, 0, 0);; sv_upgrade(PAD_SV(flip->op_targ), SVt_PVNV); SvPADTMP_on(PAD_SV(flip->op_targ)); @@ -9871,13 +10067,13 @@ Perl_newRANGE(pTHX_ I32 flags, OP *left, OP *right) /* check barewords before they might be optimized aways */ if (flip->op_private && cSVOPx(left)->op_private & OPpCONST_STRICT) - no_bareword_allowed(left); + no_bareword_allowed(left); if (flop->op_private && cSVOPx(right)->op_private & OPpCONST_STRICT) - no_bareword_allowed(right); + no_bareword_allowed(right); flip->op_next = o; if (!flip->op_private || !flop->op_private) - LINKLIST(o); /* blow off optimizer unless constant */ + LINKLIST(o); /* blow off optimizer unless constant */ return o; } @@ -9904,78 +10100,78 @@ Perl_newLOOPOP(pTHX_ I32 flags, I32 debuggable, OP *expr, OP *block) OP* listop; OP* o; const bool once = block && block->op_flags & OPf_SPECIAL && - block->op_type == OP_NULL; + block->op_type == OP_NULL; PERL_UNUSED_ARG(debuggable); if (expr) { - if (once && ( - (expr->op_type == OP_CONST && !SvTRUE(((SVOP*)expr)->op_sv)) - || ( expr->op_type == OP_NOT - && cUNOPx(expr)->op_first->op_type == OP_CONST - && SvTRUE(cSVOPx_sv(cUNOPx(expr)->op_first)) - ) - )) - /* Return the block now, so that S_new_logop does not try to - fold it away. */ + if (once && ( + (expr->op_type == OP_CONST && !SvTRUE(((SVOP*)expr)->op_sv)) + || ( expr->op_type == OP_NOT + && cUNOPx(expr)->op_first->op_type == OP_CONST + && SvTRUE(cSVOPx_sv(cUNOPx(expr)->op_first)) + ) + )) + /* Return the block now, so that S_new_logop does not try to + fold it away. */ { op_free(expr); return block; /* do {} while 0 does once */ } - if (expr->op_type == OP_READLINE - || expr->op_type == OP_READDIR - || expr->op_type == OP_GLOB - || expr->op_type == OP_EACH || expr->op_type == OP_AEACH - || (expr->op_type == OP_NULL && expr->op_targ == OP_GLOB)) { - expr = newUNOP(OP_DEFINED, 0, - newASSIGNOP(0, newDEFSVOP(), 0, expr) ); - } else if (expr->op_flags & OPf_KIDS) { - const OP * const k1 = ((UNOP*)expr)->op_first; - const OP * const k2 = k1 ? OpSIBLING(k1) : NULL; - switch (expr->op_type) { - case OP_NULL: - if (k2 && (k2->op_type == OP_READLINE || k2->op_type == OP_READDIR) - && (k2->op_flags & OPf_STACKED) - && ((k1->op_flags & OPf_WANT) == OPf_WANT_SCALAR)) - expr = newUNOP(OP_DEFINED, 0, expr); - break; - - case OP_SASSIGN: - if (k1 && (k1->op_type == OP_READDIR - || k1->op_type == OP_GLOB - || (k1->op_type == OP_NULL && k1->op_targ == OP_GLOB) + if (expr->op_type == OP_READLINE + || expr->op_type == OP_READDIR + || expr->op_type == OP_GLOB + || expr->op_type == OP_EACH || expr->op_type == OP_AEACH + || (expr->op_type == OP_NULL && expr->op_targ == OP_GLOB)) { + expr = newUNOP(OP_DEFINED, 0, + newASSIGNOP(0, newDEFSVOP(), 0, expr) ); + } else if (expr->op_flags & OPf_KIDS) { + const OP * const k1 = ((UNOP*)expr)->op_first; + const OP * const k2 = k1 ? OpSIBLING(k1) : NULL; + switch (expr->op_type) { + case OP_NULL: + if (k2 && (k2->op_type == OP_READLINE || k2->op_type == OP_READDIR) + && (k2->op_flags & OPf_STACKED) + && ((k1->op_flags & OPf_WANT) == OPf_WANT_SCALAR)) + expr = newUNOP(OP_DEFINED, 0, expr); + break; + + case OP_SASSIGN: + if (k1 && (k1->op_type == OP_READDIR + || k1->op_type == OP_GLOB + || (k1->op_type == OP_NULL && k1->op_targ == OP_GLOB) || k1->op_type == OP_EACH || k1->op_type == OP_AEACH)) - expr = newUNOP(OP_DEFINED, 0, expr); - break; - } - } + expr = newUNOP(OP_DEFINED, 0, expr); + break; + } + } } /* if block is null, the next op_append_elem() would put UNSTACK, a scalar * op, in listop. This is wrong. [perl #27024] */ if (!block) - block = newOP(OP_NULL, 0); + block = newOP(OP_NULL, 0); listop = op_append_elem(OP_LINESEQ, block, newOP(OP_UNSTACK, 0)); o = new_logop(OP_AND, 0, &expr, &listop); if (once) { - ASSUME(listop); + ASSUME(listop); } if (listop) - ((LISTOP*)listop)->op_last->op_next = LINKLIST(o); + ((LISTOP*)listop)->op_last->op_next = LINKLIST(o); if (once && o != listop) { - assert(cUNOPo->op_first->op_type == OP_AND - || cUNOPo->op_first->op_type == OP_OR); - o->op_next = ((LOGOP*)cUNOPo->op_first)->op_other; + assert(cUNOPo->op_first->op_type == OP_AND + || cUNOPo->op_first->op_type == OP_OR); + o->op_next = ((LOGOP*)cUNOPo->op_first)->op_other; } if (o == listop) - o = newUNOP(OP_NULL, 0, o); /* or do {} while 1 loses outer block */ + o = newUNOP(OP_NULL, 0, o); /* or do {} while 1 loses outer block */ o->op_flags |= flags; o = op_scope(o); @@ -10009,9 +10205,8 @@ loop body to be enclosed in its own scope. OP * Perl_newWHILEOP(pTHX_ I32 flags, I32 debuggable, LOOP *loop, - OP *expr, OP *block, OP *cont, I32 has_my) + OP *expr, OP *block, OP *cont, I32 has_my) { - dVAR; OP *redo; OP *next = NULL; OP *listop; @@ -10021,50 +10216,50 @@ Perl_newWHILEOP(pTHX_ I32 flags, I32 debuggable, LOOP *loop, PERL_UNUSED_ARG(debuggable); if (expr) { - if (expr->op_type == OP_READLINE + if (expr->op_type == OP_READLINE || expr->op_type == OP_READDIR || expr->op_type == OP_GLOB - || expr->op_type == OP_EACH || expr->op_type == OP_AEACH - || (expr->op_type == OP_NULL && expr->op_targ == OP_GLOB)) { - expr = newUNOP(OP_DEFINED, 0, - newASSIGNOP(0, newDEFSVOP(), 0, expr) ); - } else if (expr->op_flags & OPf_KIDS) { - const OP * const k1 = ((UNOP*)expr)->op_first; - const OP * const k2 = (k1) ? OpSIBLING(k1) : NULL; - switch (expr->op_type) { - case OP_NULL: - if (k2 && (k2->op_type == OP_READLINE || k2->op_type == OP_READDIR) - && (k2->op_flags & OPf_STACKED) - && ((k1->op_flags & OPf_WANT) == OPf_WANT_SCALAR)) - expr = newUNOP(OP_DEFINED, 0, expr); - break; - - case OP_SASSIGN: - if (k1 && (k1->op_type == OP_READDIR - || k1->op_type == OP_GLOB - || (k1->op_type == OP_NULL && k1->op_targ == OP_GLOB) + || expr->op_type == OP_EACH || expr->op_type == OP_AEACH + || (expr->op_type == OP_NULL && expr->op_targ == OP_GLOB)) { + expr = newUNOP(OP_DEFINED, 0, + newASSIGNOP(0, newDEFSVOP(), 0, expr) ); + } else if (expr->op_flags & OPf_KIDS) { + const OP * const k1 = ((UNOP*)expr)->op_first; + const OP * const k2 = (k1) ? OpSIBLING(k1) : NULL; + switch (expr->op_type) { + case OP_NULL: + if (k2 && (k2->op_type == OP_READLINE || k2->op_type == OP_READDIR) + && (k2->op_flags & OPf_STACKED) + && ((k1->op_flags & OPf_WANT) == OPf_WANT_SCALAR)) + expr = newUNOP(OP_DEFINED, 0, expr); + break; + + case OP_SASSIGN: + if (k1 && (k1->op_type == OP_READDIR + || k1->op_type == OP_GLOB + || (k1->op_type == OP_NULL && k1->op_targ == OP_GLOB) || k1->op_type == OP_EACH || k1->op_type == OP_AEACH)) - expr = newUNOP(OP_DEFINED, 0, expr); - break; - } - } + expr = newUNOP(OP_DEFINED, 0, expr); + break; + } + } } if (!block) - block = newOP(OP_NULL, 0); + block = newOP(OP_NULL, 0); else if (cont || has_my) { - block = op_scope(block); + block = op_scope(block); } if (cont) { - next = LINKLIST(cont); + next = LINKLIST(cont); } if (expr) { - OP * const unstack = newOP(OP_UNSTACK, 0); - if (!next) - next = unstack; - cont = op_append_elem(OP_LINESEQ, cont, unstack); + OP * const unstack = newOP(OP_UNSTACK, 0); + if (!next) + next = unstack; + cont = op_append_elem(OP_LINESEQ, cont, unstack); } assert(block); @@ -10073,24 +10268,24 @@ Perl_newWHILEOP(pTHX_ I32 flags, I32 debuggable, LOOP *loop, redo = LINKLIST(listop); if (expr) { - scalar(listop); - o = new_logop(OP_AND, 0, &expr, &listop); - if (o == expr && o->op_type == OP_CONST && !SvTRUE(cSVOPo->op_sv)) { - op_free((OP*)loop); - return expr; /* listop already freed by new_logop */ - } - if (listop) - ((LISTOP*)listop)->op_last->op_next = - (o == listop ? redo : LINKLIST(o)); + scalar(listop); + o = new_logop(OP_AND, 0, &expr, &listop); + if (o == expr && o->op_type == OP_CONST && !SvTRUE(cSVOPo->op_sv)) { + op_free((OP*)loop); + return expr; /* listop already freed by new_logop */ + } + if (listop) + ((LISTOP*)listop)->op_last->op_next = + (o == listop ? redo : LINKLIST(o)); } else - o = listop; + o = listop; if (!loop) { - NewOp(1101,loop,1,LOOP); + NewOp(1101,loop,1,LOOP); OpTYPE_set(loop, OP_ENTERLOOP); - loop->op_private = 0; - loop->op_next = (OP*)loop; + loop->op_private = 0; + loop->op_next = (OP*)loop; } o = newBINOP(OP_LEAVELOOP, 0, (OP*)loop, o); @@ -10100,9 +10295,9 @@ Perl_newWHILEOP(pTHX_ I32 flags, I32 debuggable, LOOP *loop, o->op_private |= loopflags; if (next) - loop->op_nextop = next; + loop->op_nextop = next; else - loop->op_nextop = o; + loop->op_nextop = o; o->op_flags |= flags; o->op_private |= (flags >> 8); @@ -10116,7 +10311,7 @@ Constructs, checks, and returns an op tree expressing a C loop (iteration through a list of values). This is a heavyweight loop, with structure that allows exiting the loop by C and suchlike. -C optionally supplies the variable that will be aliased to each +C optionally supplies the variable(s) that will be aliased to each item in turn; if null, it defaults to C<$_>. C supplies the list of values to iterate over. C supplies the main body of the loop, and C optionally supplies a C @@ -10135,90 +10330,154 @@ automatically. OP * Perl_newFOROP(pTHX_ I32 flags, OP *sv, OP *expr, OP *block, OP *cont) { - dVAR; LOOP *loop; - OP *wop; + OP *iter; PADOFFSET padoff = 0; + PADOFFSET how_many_more = 0; I32 iterflags = 0; I32 iterpflags = 0; + bool parens = 0; PERL_ARGS_ASSERT_NEWFOROP; if (sv) { - if (sv->op_type == OP_RV2SV) { /* symbol table variable */ - iterpflags = sv->op_private & OPpOUR_INTRO; /* for our $x () */ + if (sv->op_type == OP_RV2SV) { /* symbol table variable */ + iterpflags = sv->op_private & OPpOUR_INTRO; /* for our $x () */ OpTYPE_set(sv, OP_RV2GV); - /* The op_type check is needed to prevent a possible segfault - * if the loop variable is undeclared and 'strict vars' is in - * effect. This is illegal but is nonetheless parsed, so we - * may reach this point with an OP_CONST where we're expecting - * an OP_GV. - */ - if (cUNOPx(sv)->op_first->op_type == OP_GV - && cGVOPx_gv(cUNOPx(sv)->op_first) == PL_defgv) - iterpflags |= OPpITER_DEF; - } - else if (sv->op_type == OP_PADSV) { /* private variable */ - iterpflags = sv->op_private & OPpLVAL_INTRO; /* for my $x () */ - padoff = sv->op_targ; + /* The op_type check is needed to prevent a possible segfault + * if the loop variable is undeclared and 'strict vars' is in + * effect. This is illegal but is nonetheless parsed, so we + * may reach this point with an OP_CONST where we're expecting + * an OP_GV. + */ + if (cUNOPx(sv)->op_first->op_type == OP_GV + && cGVOPx_gv(cUNOPx(sv)->op_first) == PL_defgv) + iterpflags |= OPpITER_DEF; + } + else if (sv->op_type == OP_PADSV) { /* private variable */ + if (sv->op_flags & OPf_PARENS) { + /* handle degenerate 1-var form of "for my ($x, ...)" */ + sv->op_private |= OPpLVAL_INTRO; + parens = 1; + } + iterpflags = sv->op_private & OPpLVAL_INTRO; /* for my $x () */ + padoff = sv->op_targ; sv->op_targ = 0; op_free(sv); - sv = NULL; - PAD_COMPNAME_GEN_set(padoff, PERL_INT_MAX); - } - else if (sv->op_type == OP_NULL && sv->op_targ == OP_SREFGEN) - NOOP; - else - Perl_croak(aTHX_ "Can't use %s for loop variable", PL_op_desc[sv->op_type]); - if (padoff) { - PADNAME * const pn = PAD_COMPNAME(padoff); - const char * const name = PadnamePV(pn); - - if (PadnameLEN(pn) == 2 && name[0] == '$' && name[1] == '_') - iterpflags |= OPpITER_DEF; - } + sv = NULL; + PAD_COMPNAME_GEN_set(padoff, PERL_INT_MAX); + } + else if (sv->op_type == OP_NULL && sv->op_targ == OP_SREFGEN) + NOOP; + else if (sv->op_type == OP_LIST) { + LISTOP *list = (LISTOP *) sv; + OP *pushmark = list->op_first; + OP *first_padsv; + UNOP *padsv; + PADOFFSET i; + + iterpflags = OPpLVAL_INTRO; /* for my ($k, $v) () */ + parens = 1; + + if (!pushmark || pushmark->op_type != OP_PUSHMARK) { + Perl_croak(aTHX_ "panic: newFORLOOP, found %s, expecting pushmark", + pushmark ? PL_op_desc[pushmark->op_type] : "NULL"); + } + first_padsv = OpSIBLING(pushmark); + if (!first_padsv || first_padsv->op_type != OP_PADSV) { + Perl_croak(aTHX_ "panic: newFORLOOP, found %s, expecting padsv", + first_padsv ? PL_op_desc[first_padsv->op_type] : "NULL"); + } + padoff = first_padsv->op_targ; + + /* There should be at least one more PADSV to find, and the ops + should have consecutive values in targ: */ + padsv = (UNOP *) OpSIBLING(first_padsv); + do { + if (!padsv || padsv->op_type != OP_PADSV) { + Perl_croak(aTHX_ "panic: newFORLOOP, found %s at %zd, expecting padsv", + padsv ? PL_op_desc[padsv->op_type] : "NULL", + how_many_more); + } + ++how_many_more; + if (padsv->op_targ != padoff + how_many_more) { + Perl_croak(aTHX_ "panic: newFORLOOP, padsv at %zd targ is %zd, not %zd", + how_many_more, padsv->op_targ, padoff + how_many_more); + } + + padsv = (UNOP *) OpSIBLING(padsv); + } while (padsv); + + /* OK, this optree has the shape that we expected. So now *we* + "claim" the Pad slots: */ + first_padsv->op_targ = 0; + PAD_COMPNAME_GEN_set(padoff, PERL_INT_MAX); + + i = padoff; + + padsv = (UNOP *) OpSIBLING(first_padsv); + do { + ++i; + padsv->op_targ = 0; + PAD_COMPNAME_GEN_set(i, PERL_INT_MAX); + + padsv = (UNOP *) OpSIBLING(padsv); + } while (padsv); + + op_free(sv); + sv = NULL; + } + else + Perl_croak(aTHX_ "Can't use %s for loop variable", PL_op_desc[sv->op_type]); + if (padoff) { + PADNAME * const pn = PAD_COMPNAME(padoff); + const char * const name = PadnamePV(pn); + + if (PadnameLEN(pn) == 2 && name[0] == '$' && name[1] == '_') + iterpflags |= OPpITER_DEF; + } } else { - sv = newGVOP(OP_GV, 0, PL_defgv); - iterpflags |= OPpITER_DEF; + sv = newGVOP(OP_GV, 0, PL_defgv); + iterpflags |= OPpITER_DEF; } if (expr->op_type == OP_RV2AV || expr->op_type == OP_PADAV) { - expr = op_lvalue(force_list(scalar(ref(expr, OP_ITER)), 1), OP_GREPSTART); - iterflags |= OPf_STACKED; + expr = op_lvalue(force_list(scalar(ref(expr, OP_ITER)), TRUE), OP_GREPSTART); + iterflags |= OPf_STACKED; } else if (expr->op_type == OP_NULL && (expr->op_flags & OPf_KIDS) && ((BINOP*)expr)->op_first->op_type == OP_FLOP) { - /* Basically turn for($x..$y) into the same as for($x,$y), but we - * set the STACKED flag to indicate that these values are to be - * treated as min/max values by 'pp_enteriter'. - */ - const UNOP* const flip = (UNOP*)((UNOP*)((BINOP*)expr)->op_first)->op_first; - LOGOP* const range = (LOGOP*) flip->op_first; - OP* const left = range->op_first; - OP* const right = OpSIBLING(left); - LISTOP* listop; - - range->op_flags &= ~OPf_KIDS; + /* Basically turn for($x..$y) into the same as for($x,$y), but we + * set the STACKED flag to indicate that these values are to be + * treated as min/max values by 'pp_enteriter'. + */ + const UNOP* const flip = (UNOP*)((UNOP*)((BINOP*)expr)->op_first)->op_first; + LOGOP* const range = (LOGOP*) flip->op_first; + OP* const left = range->op_first; + OP* const right = OpSIBLING(left); + LISTOP* listop; + + range->op_flags &= ~OPf_KIDS; /* detach range's children */ op_sibling_splice((OP*)range, NULL, -1, NULL); - listop = (LISTOP*)newLISTOP(OP_LIST, 0, left, right); - listop->op_first->op_next = range->op_next; - left->op_next = range->op_other; - right->op_next = (OP*)listop; - listop->op_next = listop->op_first; + listop = (LISTOP*)newLISTOP(OP_LIST, 0, left, right); + listop->op_first->op_next = range->op_next; + left->op_next = range->op_other; + right->op_next = (OP*)listop; + listop->op_next = listop->op_first; - op_free(expr); - expr = (OP*)(listop); + op_free(expr); + expr = (OP*)(listop); op_null(expr); - iterflags |= OPf_STACKED; + iterflags |= OPf_STACKED; } else { - expr = op_lvalue(force_list(expr, 1), OP_GREPSTART); + expr = op_lvalue(force_list(expr, TRUE), OP_GREPSTART); } loop = (LOOP*)op_convert_list(OP_ENTERITER, iterflags, @@ -10233,26 +10492,30 @@ Perl_newFOROP(pTHX_ I32 flags, OP *sv, OP *expr, OP *block, OP *cont) * keep it in-place if there's space */ if (loop->op_slabbed && OpSLOT(loop)->opslot_size - < SIZE_TO_PSIZE(sizeof(LOOP)) + OPSLOT_HEADER_P) + < SIZE_TO_PSIZE(sizeof(LOOP) + OPSLOT_HEADER)) { /* no space; allocate new op */ - LOOP *tmp; - NewOp(1234,tmp,1,LOOP); - Copy(loop,tmp,1,LISTOP); + LOOP *tmp; + NewOp(1234,tmp,1,LOOP); + Copy(loop,tmp,1,LISTOP); assert(loop->op_last->op_sibparent == (OP*)loop); OpLASTSIB_set(loop->op_last, (OP*)tmp); /*point back to new parent */ - S_op_destroy(aTHX_ (OP*)loop); - loop = tmp; + S_op_destroy(aTHX_ (OP*)loop); + loop = tmp; } else if (!loop->op_slabbed) { /* loop was malloc()ed */ - loop = (LOOP*)PerlMemShared_realloc(loop, sizeof(LOOP)); + loop = (LOOP*)PerlMemShared_realloc(loop, sizeof(LOOP)); OpLASTSIB_set(loop->op_last, (OP*)loop); } loop->op_targ = padoff; - wop = newWHILEOP(flags, 1, loop, newOP(OP_ITER, 0), block, cont, 0); - return wop; + if (parens) + /* hint to deparser that this: for my (...) ... */ + loop->op_flags |= OPf_PARENS; + iter = newOP(OP_ITER, 0); + iter->op_targ = how_many_more; + return newWHILEOP(flags, 1, loop, iter, block, cont, 0); } /* @@ -10274,37 +10537,37 @@ Perl_newLOOPEX(pTHX_ I32 type, OP *label) PERL_ARGS_ASSERT_NEWLOOPEX; assert((PL_opargs[type] & OA_CLASS_MASK) == OA_LOOPEXOP - || type == OP_CUSTOM); + || type == OP_CUSTOM); if (type != OP_GOTO) { - /* "last()" means "last" */ - if (label->op_type == OP_STUB && (label->op_flags & OPf_PARENS)) { - o = newOP(type, OPf_SPECIAL); - } + /* "last()" means "last" */ + if (label->op_type == OP_STUB && (label->op_flags & OPf_PARENS)) { + o = newOP(type, OPf_SPECIAL); + } } else { - /* Check whether it's going to be a goto &function */ - if (label->op_type == OP_ENTERSUB - && !(label->op_flags & OPf_STACKED)) - label = newUNOP(OP_REFGEN, 0, op_lvalue(label, OP_REFGEN)); + /* Check whether it's going to be a goto &function */ + if (label->op_type == OP_ENTERSUB + && !(label->op_flags & OPf_STACKED)) + label = newUNOP(OP_REFGEN, 0, op_lvalue(label, OP_REFGEN)); } /* Check for a constant argument */ if (label->op_type == OP_CONST) { - SV * const sv = ((SVOP *)label)->op_sv; - STRLEN l; - const char *s = SvPV_const(sv,l); - if (l == strlen(s)) { - o = newPVOP(type, - SvUTF8(((SVOP*)label)->op_sv), - savesharedpv( - SvPV_nolen_const(((SVOP*)label)->op_sv))); - } + SV * const sv = ((SVOP *)label)->op_sv; + STRLEN l; + const char *s = SvPV_const(sv,l); + if (l == strlen(s)) { + o = newPVOP(type, + SvUTF8(((SVOP*)label)->op_sv), + savesharedpv( + SvPV_nolen_const(((SVOP*)label)->op_sv))); + } } /* If we have already created an op, we do not need the label. */ if (o) - op_free(label); + op_free(label); else o = newUNOP(type, OPf_STACKED, label); PL_hints |= HINT_BLOCK_SCOPE; @@ -10323,7 +10586,7 @@ S_ref_array_or_hash(pTHX_ OP *cond) || cond->op_type == OP_RV2HV || cond->op_type == OP_PADHV)) - return newUNOP(OP_REFGEN, 0, op_lvalue(cond, OP_REFGEN)); + return newUNOP(OP_REFGEN, 0, op_lvalue(cond, OP_REFGEN)); else if(cond && (cond->op_type == OP_ASLICE @@ -10331,16 +10594,16 @@ S_ref_array_or_hash(pTHX_ OP *cond) || cond->op_type == OP_HSLICE || cond->op_type == OP_KVHSLICE)) { - /* anonlist now needs a list from this op, was previously used in - * scalar context */ - cond->op_flags &= ~(OPf_WANT_SCALAR | OPf_REF); - cond->op_flags |= OPf_WANT_LIST; + /* anonlist now needs a list from this op, was previously used in + * scalar context */ + cond->op_flags &= ~(OPf_WANT_SCALAR | OPf_REF); + cond->op_flags |= OPf_WANT_LIST; - return newANONLIST(op_lvalue(cond, OP_ANONLIST)); + return newANONLIST(op_lvalue(cond, OP_ANONLIST)); } else - return cond; + return cond; } /* These construct the optree fragments representing given() @@ -10355,10 +10618,9 @@ S_ref_array_or_hash(pTHX_ OP *cond) STATIC OP * S_newGIVWHENOP(pTHX_ OP *cond, OP *block, - I32 enter_opcode, I32 leave_opcode, - PADOFFSET entertarg) + I32 enter_opcode, I32 leave_opcode, + PADOFFSET entertarg) { - dVAR; LOGOP *enterop; OP *o; @@ -10375,20 +10637,20 @@ S_newGIVWHENOP(pTHX_ OP *cond, OP *block, /* prepend cond if we have one */ op_sibling_splice((OP*)enterop, NULL, 0, scalar(cond)); - o->op_next = LINKLIST(cond); - cond->op_next = (OP *) enterop; + o->op_next = LINKLIST(cond); + cond->op_next = (OP *) enterop; } else { - /* This is a default {} block */ - enterop->op_flags |= OPf_SPECIAL; - o ->op_flags |= OPf_SPECIAL; + /* This is a default {} block */ + enterop->op_flags |= OPf_SPECIAL; + o ->op_flags |= OPf_SPECIAL; - o->op_next = (OP *) enterop; + o->op_next = (OP *) enterop; } CHECKOP(enter_opcode, enterop); /* Currently does nothing, since - entergiven and enterwhen both - use ck_null() */ + entergiven and enterwhen both + use ck_null() */ enterop->op_next = LINKLIST(block); block->op_next = enterop->op_other = o; @@ -10416,74 +10678,74 @@ S_looks_like_bool(pTHX_ const OP *o) PERL_ARGS_ASSERT_LOOKS_LIKE_BOOL; switch(o->op_type) { - case OP_OR: - case OP_DOR: - return looks_like_bool(cLOGOPo->op_first); + case OP_OR: + case OP_DOR: + return looks_like_bool(cLOGOPo->op_first); - case OP_AND: + case OP_AND: { OP* sibl = OpSIBLING(cLOGOPo->op_first); ASSUME(sibl); - return ( - looks_like_bool(cLOGOPo->op_first) - && looks_like_bool(sibl)); + return ( + looks_like_bool(cLOGOPo->op_first) + && looks_like_bool(sibl)); } - case OP_NULL: - case OP_SCALAR: - return ( - o->op_flags & OPf_KIDS - && looks_like_bool(cUNOPo->op_first)); + case OP_NULL: + case OP_SCALAR: + return ( + o->op_flags & OPf_KIDS + && looks_like_bool(cUNOPo->op_first)); - case OP_ENTERSUB: + case OP_ENTERSUB: - case OP_NOT: case OP_XOR: + case OP_NOT: case OP_XOR: - case OP_EQ: case OP_NE: case OP_LT: - case OP_GT: case OP_LE: case OP_GE: + case OP_EQ: case OP_NE: case OP_LT: + case OP_GT: case OP_LE: case OP_GE: - case OP_I_EQ: case OP_I_NE: case OP_I_LT: - case OP_I_GT: case OP_I_LE: case OP_I_GE: + case OP_I_EQ: case OP_I_NE: case OP_I_LT: + case OP_I_GT: case OP_I_LE: case OP_I_GE: - case OP_SEQ: case OP_SNE: case OP_SLT: - case OP_SGT: case OP_SLE: case OP_SGE: + case OP_SEQ: case OP_SNE: case OP_SLT: + case OP_SGT: case OP_SLE: case OP_SGE: - case OP_SMARTMATCH: + case OP_SMARTMATCH: - case OP_FTRREAD: case OP_FTRWRITE: case OP_FTREXEC: - case OP_FTEREAD: case OP_FTEWRITE: case OP_FTEEXEC: - case OP_FTIS: case OP_FTEOWNED: case OP_FTROWNED: - case OP_FTZERO: case OP_FTSOCK: case OP_FTCHR: - case OP_FTBLK: case OP_FTFILE: case OP_FTDIR: - case OP_FTPIPE: case OP_FTLINK: case OP_FTSUID: - case OP_FTSGID: case OP_FTSVTX: case OP_FTTTY: - case OP_FTTEXT: case OP_FTBINARY: + case OP_FTRREAD: case OP_FTRWRITE: case OP_FTREXEC: + case OP_FTEREAD: case OP_FTEWRITE: case OP_FTEEXEC: + case OP_FTIS: case OP_FTEOWNED: case OP_FTROWNED: + case OP_FTZERO: case OP_FTSOCK: case OP_FTCHR: + case OP_FTBLK: case OP_FTFILE: case OP_FTDIR: + case OP_FTPIPE: case OP_FTLINK: case OP_FTSUID: + case OP_FTSGID: case OP_FTSVTX: case OP_FTTTY: + case OP_FTTEXT: case OP_FTBINARY: - case OP_DEFINED: case OP_EXISTS: - case OP_MATCH: case OP_EOF: + case OP_DEFINED: case OP_EXISTS: + case OP_MATCH: case OP_EOF: - case OP_FLOP: + case OP_FLOP: - return TRUE; + return TRUE; - case OP_INDEX: - case OP_RINDEX: + case OP_INDEX: + case OP_RINDEX: /* optimised-away (index() != -1) or similar comparison */ if (o->op_private & OPpTRUEBOOL) return TRUE; return FALSE; - case OP_CONST: - /* Detect comparisons that have been optimized away */ - if (cSVOPo->op_sv == &PL_sv_yes - || cSVOPo->op_sv == &PL_sv_no) + case OP_CONST: + /* Detect comparisons that have been optimized away */ + if (cSVOPo->op_sv == &PL_sv_yes + || cSVOPo->op_sv == &PL_sv_no) - return TRUE; - else - return FALSE; - /* FALLTHROUGH */ - default: - return FALSE; + return TRUE; + else + return FALSE; + /* FALLTHROUGH */ + default: + return FALSE; } } @@ -10508,10 +10770,10 @@ Perl_newGIVENOP(pTHX_ OP *cond, OP *block, PADOFFSET defsv_off) assert(!defsv_off); return newGIVWHENOP( - ref_array_or_hash(cond), - block, - OP_ENTERGIVEN, OP_LEAVEGIVEN, - 0); + ref_array_or_hash(cond), + block, + OP_ENTERGIVEN, OP_LEAVEGIVEN, + 0); } /* @@ -10536,91 +10798,156 @@ Perl_newWHENOP(pTHX_ OP *cond, OP *block) PERL_ARGS_ASSERT_NEWWHENOP; if (cond_llb) - cond_op = cond; + cond_op = cond; else { - cond_op = newBINOP(OP_SMARTMATCH, OPf_SPECIAL, - newDEFSVOP(), - scalar(ref_array_or_hash(cond))); + cond_op = newBINOP(OP_SMARTMATCH, OPf_SPECIAL, + newDEFSVOP(), + scalar(ref_array_or_hash(cond))); } return newGIVWHENOP(cond_op, block, OP_ENTERWHEN, OP_LEAVEWHEN, 0); } +/* +=for apidoc newDEFEROP + +Constructs and returns a deferred-block statement that implements the +C semantics. The C optree is consumed by this function and +becomes part of the returned optree. + +The C argument carries additional flags to set on the returned op, +including the C field. + +=cut + */ + +OP * +Perl_newDEFEROP(pTHX_ I32 flags, OP *block) +{ + OP *o, *start, *blockfirst; + + PERL_ARGS_ASSERT_NEWDEFEROP; + + start = LINKLIST(block); + + /* Hide the block inside an OP_NULL with no exection */ + block = newUNOP(OP_NULL, 0, block); + block->op_next = block; + + o = (OP *)alloc_LOGOP(OP_PUSHDEFER, block, start); + o->op_flags |= OPf_WANT_VOID | (U8)(flags); + o->op_private = (U8)(flags >> 8); + + /* Terminate the block */ + blockfirst = cUNOPx(block)->op_first; + assert(blockfirst->op_type == OP_SCOPE || blockfirst->op_type == OP_LEAVE); + blockfirst->op_next = NULL; + + return o; +} + +/* +=for apidoc op_wrap_finally + +Wraps the given C optree fragment in its own scoped block, arranging +for the C optree fragment to be invoked when leaving that block for +any reason. Both optree fragments are consumed and the combined result is +returned. + +=cut +*/ + +OP * +Perl_op_wrap_finally(pTHX_ OP *block, OP *finally) +{ + PERL_ARGS_ASSERT_OP_WRAP_FINALLY; + + /* TODO: If block is already an ENTER/LEAVE-wrapped line sequence we can + * just splice the DEFEROP in at the top, for efficiency. + */ + + OP *o = newLISTOP(OP_LINESEQ, 0, newDEFEROP((OPpDEFER_FINALLY << 8), finally), block); + o = op_prepend_elem(OP_LINESEQ, newOP(OP_ENTER, 0), o); + OpTYPE_set(o, OP_LEAVE); + + return o; +} + /* must not conflict with SVf_UTF8 */ #define CV_CKPROTO_CURSTASH 0x1 void Perl_cv_ckproto_len_flags(pTHX_ const CV *cv, const GV *gv, const char *p, - const STRLEN len, const U32 flags) + const STRLEN len, const U32 flags) { SV *name = NULL, *msg; const char * cvp = SvROK(cv) - ? SvTYPE(SvRV_const(cv)) == SVt_PVCV - ? (cv = (const CV *)SvRV_const(cv), CvPROTO(cv)) - : "" - : CvPROTO(cv); + ? SvTYPE(SvRV_const(cv)) == SVt_PVCV + ? (cv = (const CV *)SvRV_const(cv), CvPROTO(cv)) + : "" + : CvPROTO(cv); STRLEN clen = CvPROTOLEN(cv), plen = len; PERL_ARGS_ASSERT_CV_CKPROTO_LEN_FLAGS; if (p == NULL && cvp == NULL) - return; + return; if (!ckWARN_d(WARN_PROTOTYPE)) - return; + return; if (p && cvp) { - p = S_strip_spaces(aTHX_ p, &plen); - cvp = S_strip_spaces(aTHX_ cvp, &clen); - if ((flags & SVf_UTF8) == SvUTF8(cv)) { - if (plen == clen && memEQ(cvp, p, plen)) - return; - } else { - if (flags & SVf_UTF8) { - if (bytes_cmp_utf8((const U8 *)cvp, clen, (const U8 *)p, plen) == 0) - return; - } - else { - if (bytes_cmp_utf8((const U8 *)p, plen, (const U8 *)cvp, clen) == 0) - return; - } - } - } + p = S_strip_spaces(aTHX_ p, &plen); + cvp = S_strip_spaces(aTHX_ cvp, &clen); + if ((flags & SVf_UTF8) == SvUTF8(cv)) { + if (plen == clen && memEQ(cvp, p, plen)) + return; + } else { + if (flags & SVf_UTF8) { + if (bytes_cmp_utf8((const U8 *)cvp, clen, (const U8 *)p, plen) == 0) + return; + } + else { + if (bytes_cmp_utf8((const U8 *)p, plen, (const U8 *)cvp, clen) == 0) + return; + } + } + } msg = sv_newmortal(); if (gv) { - if (isGV(gv)) - gv_efullname3(name = sv_newmortal(), gv, NULL); - else if (SvPOK(gv) && *SvPVX((SV *)gv) == '&') - name = newSVpvn_flags(SvPVX((SV *)gv)+1, SvCUR(gv)-1, SvUTF8(gv)|SVs_TEMP); - else if (flags & CV_CKPROTO_CURSTASH || SvROK(gv)) { - name = sv_2mortal(newSVhek(HvNAME_HEK(PL_curstash))); - sv_catpvs(name, "::"); - if (SvROK(gv)) { - assert (SvTYPE(SvRV_const(gv)) == SVt_PVCV); - assert (CvNAMED(SvRV_const(gv))); - sv_cathek(name, CvNAME_HEK(MUTABLE_CV(SvRV_const(gv)))); - } - else sv_catsv(name, (SV *)gv); - } - else name = (SV *)gv; + if (isGV(gv)) + gv_efullname3(name = sv_newmortal(), gv, NULL); + else if (SvPOK(gv) && *SvPVX((SV *)gv) == '&') + name = newSVpvn_flags(SvPVX((SV *)gv)+1, SvCUR(gv)-1, SvUTF8(gv)|SVs_TEMP); + else if (flags & CV_CKPROTO_CURSTASH || SvROK(gv)) { + name = sv_2mortal(newSVhek(HvNAME_HEK(PL_curstash))); + sv_catpvs(name, "::"); + if (SvROK(gv)) { + assert (SvTYPE(SvRV_const(gv)) == SVt_PVCV); + assert (CvNAMED(SvRV_const(gv))); + sv_cathek(name, CvNAME_HEK(MUTABLE_CV(SvRV_const(gv)))); + } + else sv_catsv(name, (SV *)gv); + } + else name = (SV *)gv; } sv_setpvs(msg, "Prototype mismatch:"); if (name) - Perl_sv_catpvf(aTHX_ msg, " sub %" SVf, SVfARG(name)); + Perl_sv_catpvf(aTHX_ msg, " sub %" SVf, SVfARG(name)); if (cvp) - Perl_sv_catpvf(aTHX_ msg, " (%" UTF8f ")", - UTF8fARG(SvUTF8(cv),clen,cvp) - ); + Perl_sv_catpvf(aTHX_ msg, " (%" UTF8f ")", + UTF8fARG(SvUTF8(cv),clen,cvp) + ); else - sv_catpvs(msg, ": none"); + sv_catpvs(msg, ": none"); sv_catpvs(msg, " vs "); if (p) - Perl_sv_catpvf(aTHX_ msg, "(%" UTF8f ")", UTF8fARG(flags & SVf_UTF8,len,p)); + Perl_sv_catpvf(aTHX_ msg, "(%" UTF8f ")", UTF8fARG(flags & SVf_UTF8,len,p)); else - sv_catpvs(msg, "none"); + sv_catpvs(msg, "none"); Perl_warner(aTHX_ packWARN(WARN_PROTOTYPE), "%" SVf, SVfARG(msg)); } @@ -10629,7 +10956,7 @@ static void const_av_xsub(pTHX_ CV* cv); /* -=head1 Optree Manipulation Functions +=for apidoc_section $optree_manipulation =for apidoc cv_const_sv @@ -10646,9 +10973,9 @@ Perl_cv_const_sv(const CV *const cv) { SV *sv; if (!cv) - return NULL; + return NULL; if (!(SvTYPE(cv) == SVt_PVCV || SvTYPE(cv) == SVt_PVFM)) - return NULL; + return NULL; sv = CvCONST(cv) ? MUTABLE_SV(CvXSUBANY(cv).any_ptr) : NULL; if (sv && SvTYPE(sv) == SVt_PVAV) return NULL; return sv; @@ -10658,7 +10985,7 @@ SV * Perl_cv_const_sv_or_av(const CV * const cv) { if (!cv) - return NULL; + return NULL; if (SvROK(cv)) return SvRV((SV *)cv); assert (SvTYPE(cv) == SVt_PVCV || SvTYPE(cv) == SVt_PVFM); return CvCONST(cv) ? MUTABLE_SV(CvXSUBANY(cv).any_ptr) : NULL; @@ -10688,87 +11015,87 @@ S_op_const_sv(pTHX_ const OP *o, CV *cv, bool allow_lex) assert(cv); for (; o; o = o->op_next) { - const OPCODE type = o->op_type; - - if (type == OP_NEXTSTATE || type == OP_LINESEQ - || type == OP_NULL - || type == OP_PUSHMARK) - continue; - if (type == OP_DBSTATE) - continue; - if (type == OP_LEAVESUB) - break; - if (sv) - return NULL; - if (type == OP_CONST && cSVOPo->op_sv) - sv = cSVOPo->op_sv; - else if (type == OP_UNDEF && !o->op_private) { - sv = newSV(0); - SAVEFREESV(sv); - } - else if (allow_lex && type == OP_PADSV) { - if (PAD_COMPNAME_FLAGS(o->op_targ) & PADNAMEt_OUTER) - { - sv = &PL_sv_undef; /* an arbitrary non-null value */ - padsv = TRUE; - } - else - return NULL; - } - else { - return NULL; - } + const OPCODE type = o->op_type; + + if (type == OP_NEXTSTATE || type == OP_LINESEQ + || type == OP_NULL + || type == OP_PUSHMARK) + continue; + if (type == OP_DBSTATE) + continue; + if (type == OP_LEAVESUB) + break; + if (sv) + return NULL; + if (type == OP_CONST && cSVOPo->op_sv) + sv = cSVOPo->op_sv; + else if (type == OP_UNDEF && !o->op_private) { + sv = newSV_type(SVt_NULL); + SAVEFREESV(sv); + } + else if (allow_lex && type == OP_PADSV) { + if (PAD_COMPNAME_FLAGS(o->op_targ) & PADNAMEt_OUTER) + { + sv = &PL_sv_undef; /* an arbitrary non-null value */ + padsv = TRUE; + } + else + return NULL; + } + else { + return NULL; + } } if (padsv) { - CvCONST_on(cv); - return NULL; + CvCONST_on(cv); + return NULL; } return sv; } static void S_already_defined(pTHX_ CV *const cv, OP * const block, OP * const o, - PADNAME * const name, SV ** const const_svp) + PADNAME * const name, SV ** const const_svp) { assert (cv); assert (o || name); assert (const_svp); if (!block) { - if (CvFLAGS(PL_compcv)) { - /* might have had built-in attrs applied */ - const bool pureperl = !CvISXSUB(cv) && CvROOT(cv); - if (CvLVALUE(PL_compcv) && ! CvLVALUE(cv) && pureperl - && ckWARN(WARN_MISC)) - { - /* protect against fatal warnings leaking compcv */ - SAVEFREESV(PL_compcv); - Perl_warner(aTHX_ packWARN(WARN_MISC), "lvalue attribute ignored after the subroutine has been defined"); - SvREFCNT_inc_simple_void_NN(PL_compcv); - } - CvFLAGS(cv) |= - (CvFLAGS(PL_compcv) & CVf_BUILTIN_ATTRS - & ~(CVf_LVALUE * pureperl)); - } - return; + if (CvFLAGS(PL_compcv)) { + /* might have had built-in attrs applied */ + const bool pureperl = !CvISXSUB(cv) && CvROOT(cv); + if (CvLVALUE(PL_compcv) && ! CvLVALUE(cv) && pureperl + && ckWARN(WARN_MISC)) + { + /* protect against fatal warnings leaking compcv */ + SAVEFREESV(PL_compcv); + Perl_warner(aTHX_ packWARN(WARN_MISC), "lvalue attribute ignored after the subroutine has been defined"); + SvREFCNT_inc_simple_void_NN(PL_compcv); + } + CvFLAGS(cv) |= + (CvFLAGS(PL_compcv) & CVf_BUILTIN_ATTRS + & ~(CVf_LVALUE * pureperl)); + } + return; } /* redundant check for speed: */ if (CvCONST(cv) || ckWARN(WARN_REDEFINE)) { - const line_t oldline = CopLINE(PL_curcop); - SV *namesv = o - ? cSVOPo->op_sv - : sv_2mortal(newSVpvn_utf8( - PadnamePV(name)+1,PadnameLEN(name)-1, PadnameUTF8(name) - )); - if (PL_parser && PL_parser->copline != NOLINE) + const line_t oldline = CopLINE(PL_curcop); + SV *namesv = o + ? cSVOPo->op_sv + : newSVpvn_flags( PadnamePV(name)+1,PadnameLEN(name)-1, + (PadnameUTF8(name)) ? SVf_UTF8|SVs_TEMP : SVs_TEMP + ); + if (PL_parser && PL_parser->copline != NOLINE) /* This ensures that warnings are reported at the first line of a redefinition, not the last. */ - CopLINE_set(PL_curcop, PL_parser->copline); - /* protect against fatal warnings leaking compcv */ - SAVEFREESV(PL_compcv); - report_redefined_cv(namesv, cv, const_svp); - SvREFCNT_inc_simple_void_NN(PL_compcv); - CopLINE_set(PL_curcop, oldline); + CopLINE_set(PL_curcop, PL_parser->copline); + /* protect against fatal warnings leaking compcv */ + SAVEFREESV(PL_compcv); + report_redefined_cv(namesv, cv, const_svp); + SvREFCNT_inc_simple_void_NN(PL_compcv); + CopLINE_set(PL_curcop, oldline); } SAVEFREESV(cv); return; @@ -10805,31 +11132,31 @@ Perl_newMYSUB(pTHX_ I32 floor, OP *o, OP *proto, OP *attrs, OP *block) need to look in CvOUTSIDE and find the pad belonging to the enclos- ing sub. And then we need to dig deeper if this is a lexical from outside, as in: - my sub foo; sub { sub foo { } } + my sub foo; sub { sub foo { } } */ redo: name = PadlistNAMESARRAY(CvPADLIST(outcv))[pax]; if (PadnameOUTER(name) && PARENT_PAD_INDEX(name)) { - pax = PARENT_PAD_INDEX(name); - outcv = CvOUTSIDE(outcv); - assert(outcv); - goto redo; + pax = PARENT_PAD_INDEX(name); + outcv = CvOUTSIDE(outcv); + assert(outcv); + goto redo; } svspot = - &PadARRAY(PadlistARRAY(CvPADLIST(outcv)) - [CvDEPTH(outcv) ? CvDEPTH(outcv) : 1])[pax]; + &PadARRAY(PadlistARRAY(CvPADLIST(outcv)) + [CvDEPTH(outcv) ? CvDEPTH(outcv) : 1])[pax]; spot = (CV **)svspot; if (!(PL_parser && PL_parser->error_count)) move_proto_attr(&proto, &attrs, (GV *)PadnameSV(name), 0); if (proto) { - assert(proto->op_type == OP_CONST); - ps = SvPV_const(((SVOP*)proto)->op_sv, ps_len); + assert(proto->op_type == OP_CONST); + ps = SvPV_const(((SVOP*)proto)->op_sv, ps_len); ps_utf8 = SvUTF8(((SVOP*)proto)->op_sv); } else - ps = NULL; + ps = NULL; if (proto) SAVEFREEOP(proto); @@ -10837,54 +11164,53 @@ Perl_newMYSUB(pTHX_ I32 floor, OP *o, OP *proto, OP *attrs, OP *block) SAVEFREEOP(attrs); if (PL_parser && PL_parser->error_count) { - op_free(block); - SvREFCNT_dec(PL_compcv); - PL_compcv = 0; - goto done; + op_free(block); + SvREFCNT_dec(PL_compcv); + PL_compcv = 0; + goto done; } if (CvDEPTH(outcv) && CvCLONE(compcv)) { - cv = *spot; - svspot = (SV **)(spot = &clonee); + cv = *spot; + svspot = (SV **)(spot = &clonee); } else if (PadnameIsSTATE(name) || CvDEPTH(outcv)) - cv = *spot; + cv = *spot; else { - assert (SvTYPE(*spot) == SVt_PVCV); - if (CvNAMED(*spot)) - hek = CvNAME_HEK(*spot); - else { - dVAR; - U32 hash; - PERL_HASH(hash, PadnamePV(name)+1, PadnameLEN(name)-1); - CvNAME_HEK_set(*spot, hek = - share_hek( - PadnamePV(name)+1, - (PadnameLEN(name)-1) * (PadnameUTF8(name) ? -1 : 1), - hash - ) - ); - CvLEXICAL_on(*spot); - } - cv = PadnamePROTOCV(name); - svspot = (SV **)(spot = &PadnamePROTOCV(name)); + assert (SvTYPE(*spot) == SVt_PVCV); + if (CvNAMED(*spot)) + hek = CvNAME_HEK(*spot); + else { + U32 hash; + PERL_HASH(hash, PadnamePV(name)+1, PadnameLEN(name)-1); + CvNAME_HEK_set(*spot, hek = + share_hek( + PadnamePV(name)+1, + (PadnameLEN(name)-1) * (PadnameUTF8(name) ? -1 : 1), + hash + ) + ); + CvLEXICAL_on(*spot); + } + cv = PadnamePROTOCV(name); + svspot = (SV **)(spot = &PadnamePROTOCV(name)); } if (block) { - /* This makes sub {}; work as expected. */ - if (block->op_type == OP_STUB) { - const line_t l = PL_parser->copline; - op_free(block); - block = newSTATEOP(0, NULL, 0); - PL_parser->copline = l; - } - block = CvLVALUE(compcv) - || (cv && CvLVALUE(cv) && !CvROOT(cv) && !CvXSUB(cv)) - ? newUNOP(OP_LEAVESUBLV, 0, - op_lvalue(scalarseq(block), OP_LEAVESUBLV)) - : newUNOP(OP_LEAVESUB, 0, scalarseq(block)); - start = LINKLIST(block); - block->op_next = 0; + /* This makes sub {}; work as expected. */ + if (block->op_type == OP_STUB) { + const line_t l = PL_parser->copline; + op_free(block); + block = newSTATEOP(0, NULL, 0); + PL_parser->copline = l; + } + block = CvLVALUE(compcv) + || (cv && CvLVALUE(cv) && !CvROOT(cv) && !CvXSUB(cv)) + ? newUNOP(OP_LEAVESUBLV, 0, + op_lvalue(voidnonfinal(block), OP_LEAVESUBLV)) + : newUNOP(OP_LEAVESUB, 0, voidnonfinal(block)); + start = LINKLIST(block); + block->op_next = 0; if (ps && !*ps && !attrs && !CvLVALUE(compcv)) const_sv = S_op_const_sv(aTHX_ start, compcv, FALSE); else @@ -10903,49 +11229,49 @@ Perl_newMYSUB(pTHX_ I32 floor, OP *o, OP *proto, OP *attrs, OP *block) if (exists || SvPOK(cv)) cv_ckproto_len_flags(cv, (GV *)PadnameSV(name), ps, ps_len, ps_utf8); - /* already defined? */ - if (exists) { - S_already_defined(aTHX_ cv, block, NULL, name, &const_sv); + /* already defined? */ + if (exists) { + S_already_defined(aTHX_ cv, block, NULL, name, &const_sv); if (block) - cv = NULL; - else { - if (attrs) + cv = NULL; + else { + if (attrs) goto attrs; - /* just a "sub foo;" when &foo is already defined */ - SAVEFREESV(compcv); - goto done; - } - } - else if (CvDEPTH(outcv) && CvCLONE(compcv)) { - cv = NULL; - reusable = TRUE; - } + /* just a "sub foo;" when &foo is already defined */ + SAVEFREESV(compcv); + goto done; + } + } + else if (CvDEPTH(outcv) && CvCLONE(compcv)) { + cv = NULL; + reusable = TRUE; + } } if (const_sv) { - SvREFCNT_inc_simple_void_NN(const_sv); - SvFLAGS(const_sv) |= SVs_PADTMP; - if (cv) { - assert(!CvROOT(cv) && !CvCONST(cv)); - cv_forget_slab(cv); - } - else { - cv = MUTABLE_CV(newSV_type(SVt_PVCV)); - CvFILE_set_from_cop(cv, PL_curcop); - CvSTASH_set(cv, PL_curstash); - *spot = cv; - } + SvREFCNT_inc_simple_void_NN(const_sv); + SvFLAGS(const_sv) |= SVs_PADTMP; + if (cv) { + assert(!CvROOT(cv) && !CvCONST(cv)); + cv_forget_slab(cv); + } + else { + cv = MUTABLE_CV(newSV_type(SVt_PVCV)); + CvFILE_set_from_cop(cv, PL_curcop); + CvSTASH_set(cv, PL_curstash); + *spot = cv; + } SvPVCLEAR(MUTABLE_SV(cv)); /* prototype is "" */ - CvXSUBANY(cv).any_ptr = const_sv; - CvXSUB(cv) = const_sv_xsub; - CvCONST_on(cv); - CvISXSUB_on(cv); - PoisonPADLIST(cv); - CvFLAGS(cv) |= CvMETHOD(compcv); - op_free(block); - SvREFCNT_dec(compcv); - PL_compcv = NULL; - goto setname; + CvXSUBANY(cv).any_ptr = const_sv; + CvXSUB(cv) = const_sv_xsub; + CvCONST_on(cv); + CvISXSUB_on(cv); + PoisonPADLIST(cv); + CvFLAGS(cv) |= CvMETHOD(compcv); + op_free(block); + SvREFCNT_dec(compcv); + PL_compcv = NULL; + goto setname; } /* Checking whether outcv is CvOUTSIDE(compcv) is not sufficient to @@ -10955,73 +11281,72 @@ Perl_newMYSUB(pTHX_ I32 floor, OP *o, OP *proto, OP *attrs, OP *block) the package sub. So check PadnameOUTER(name) too. */ if (outcv == CvOUTSIDE(compcv) && !PadnameOUTER(name)) { - assert(!CvWEAKOUTSIDE(compcv)); - SvREFCNT_dec(CvOUTSIDE(compcv)); - CvWEAKOUTSIDE_on(compcv); + assert(!CvWEAKOUTSIDE(compcv)); + SvREFCNT_dec(CvOUTSIDE(compcv)); + CvWEAKOUTSIDE_on(compcv); } /* XXX else do we have a circular reference? */ if (cv) { /* must reuse cv in case stub is referenced elsewhere */ - /* transfer PL_compcv to cv */ - if (block) { + /* transfer PL_compcv to cv */ + if (block) { bool free_file = CvFILE(cv) && CvDYNFILE(cv); - cv_flags_t preserved_flags = - CvFLAGS(cv) & (CVf_BUILTIN_ATTRS|CVf_NAMED); - PADLIST *const temp_padl = CvPADLIST(cv); - CV *const temp_cv = CvOUTSIDE(cv); - const cv_flags_t other_flags = - CvFLAGS(cv) & (CVf_SLABBED|CVf_WEAKOUTSIDE); - OP * const cvstart = CvSTART(cv); - - SvPOK_off(cv); - CvFLAGS(cv) = - CvFLAGS(compcv) | preserved_flags; - CvOUTSIDE(cv) = CvOUTSIDE(compcv); - CvOUTSIDE_SEQ(cv) = CvOUTSIDE_SEQ(compcv); - CvPADLIST_set(cv, CvPADLIST(compcv)); - CvOUTSIDE(compcv) = temp_cv; - CvPADLIST_set(compcv, temp_padl); - CvSTART(cv) = CvSTART(compcv); - CvSTART(compcv) = cvstart; - CvFLAGS(compcv) &= ~(CVf_SLABBED|CVf_WEAKOUTSIDE); - CvFLAGS(compcv) |= other_flags; - - if (free_file) { - Safefree(CvFILE(cv)); - CvFILE(cv) = NULL; - } - - /* inner references to compcv must be fixed up ... */ - pad_fixup_inner_anons(CvPADLIST(cv), compcv, cv); - if (PERLDB_INTER)/* Advice debugger on the new sub. */ + cv_flags_t preserved_flags = + CvFLAGS(cv) & (CVf_BUILTIN_ATTRS|CVf_NAMED); + PADLIST *const temp_padl = CvPADLIST(cv); + CV *const temp_cv = CvOUTSIDE(cv); + const cv_flags_t other_flags = + CvFLAGS(cv) & (CVf_SLABBED|CVf_WEAKOUTSIDE); + OP * const cvstart = CvSTART(cv); + + SvPOK_off(cv); + CvFLAGS(cv) = + CvFLAGS(compcv) | preserved_flags; + CvOUTSIDE(cv) = CvOUTSIDE(compcv); + CvOUTSIDE_SEQ(cv) = CvOUTSIDE_SEQ(compcv); + CvPADLIST_set(cv, CvPADLIST(compcv)); + CvOUTSIDE(compcv) = temp_cv; + CvPADLIST_set(compcv, temp_padl); + CvSTART(cv) = CvSTART(compcv); + CvSTART(compcv) = cvstart; + CvFLAGS(compcv) &= ~(CVf_SLABBED|CVf_WEAKOUTSIDE); + CvFLAGS(compcv) |= other_flags; + + if (free_file) { + Safefree(CvFILE(cv)); + CvFILE(cv) = NULL; + } + + /* inner references to compcv must be fixed up ... */ + pad_fixup_inner_anons(CvPADLIST(cv), compcv, cv); + if (PERLDB_INTER)/* Advice debugger on the new sub. */ ++PL_sub_generation; - } - else { - /* Might have had built-in attributes applied -- propagate them. */ - CvFLAGS(cv) |= (CvFLAGS(compcv) & CVf_BUILTIN_ATTRS); - } - /* ... before we throw it away */ - SvREFCNT_dec(compcv); - PL_compcv = compcv = cv; + } + else { + /* Might have had built-in attributes applied -- propagate them. */ + CvFLAGS(cv) |= (CvFLAGS(compcv) & CVf_BUILTIN_ATTRS); + } + /* ... before we throw it away */ + SvREFCNT_dec(compcv); + PL_compcv = compcv = cv; } else { - cv = compcv; - *spot = cv; + cv = compcv; + *spot = cv; } setname: CvLEXICAL_on(cv); if (!CvNAME_HEK(cv)) { - if (hek) (void)share_hek_hek(hek); - else { - dVAR; - U32 hash; - PERL_HASH(hash, PadnamePV(name)+1, PadnameLEN(name)-1); - hek = share_hek(PadnamePV(name)+1, - (PadnameLEN(name)-1) * (PadnameUTF8(name) ? -1 : 1), - hash); - } - CvNAME_HEK_set(cv, hek); + if (hek) (void)share_hek_hek(hek); + else { + U32 hash; + PERL_HASH(hash, PadnamePV(name)+1, PadnameLEN(name)-1); + hek = share_hek(PadnamePV(name)+1, + (PadnameLEN(name)-1) * (PadnameUTF8(name) ? -1 : 1), + hash); + } + CvNAME_HEK_set(cv, hek); } if (const_sv) @@ -11033,7 +11358,7 @@ Perl_newMYSUB(pTHX_ I32 floor, OP *o, OP *proto, OP *attrs, OP *block) CvSTASH_set(cv, PL_curstash); if (ps) { - sv_setpvn(MUTABLE_SV(cv), ps, ps_len); + sv_setpvn(MUTABLE_SV(cv), ps, ps_len); if (ps_utf8) SvUTF8_on(MUTABLE_SV(cv)); } @@ -11058,75 +11383,74 @@ Perl_newMYSUB(pTHX_ I32 floor, OP *o, OP *proto, OP *attrs, OP *block) attrs: if (attrs) { - /* Need to do a C. */ - apply_attrs(PL_curstash, MUTABLE_SV(cv), attrs); + /* Need to do a C. */ + apply_attrs(PL_curstash, MUTABLE_SV(cv), attrs); } if (block) { - if (PERLDB_SUBLINE && PL_curstash != PL_debstash) { - SV * const tmpstr = sv_newmortal(); - GV * const db_postponed = gv_fetchpvs("DB::postponed", - GV_ADDMULTI, SVt_PVHV); - HV *hv; - SV * const sv = Perl_newSVpvf(aTHX_ "%s:%ld-%ld", - CopFILE(PL_curcop), - (long)PL_subline, - (long)CopLINE(PL_curcop)); - if (HvNAME_HEK(PL_curstash)) { - sv_sethek(tmpstr, HvNAME_HEK(PL_curstash)); - sv_catpvs(tmpstr, "::"); - } - else + if (PERLDB_SUBLINE && PL_curstash != PL_debstash) { + SV * const tmpstr = sv_newmortal(); + GV * const db_postponed = gv_fetchpvs("DB::postponed", + GV_ADDMULTI, SVt_PVHV); + HV *hv; + SV * const sv = Perl_newSVpvf(aTHX_ "%s:%ld-%ld", + CopFILE(PL_curcop), + (long)PL_subline, + (long)CopLINE(PL_curcop)); + if (HvNAME_HEK(PL_curstash)) { + sv_sethek(tmpstr, HvNAME_HEK(PL_curstash)); + sv_catpvs(tmpstr, "::"); + } + else sv_setpvs(tmpstr, "__ANON__::"); - sv_catpvn_flags(tmpstr, PadnamePV(name)+1, PadnameLEN(name)-1, - PadnameUTF8(name) ? SV_CATUTF8 : SV_CATBYTES); - (void)hv_store(GvHV(PL_DBsub), SvPVX_const(tmpstr), - SvUTF8(tmpstr) ? -(I32)SvCUR(tmpstr) : (I32)SvCUR(tmpstr), sv, 0); - hv = GvHVn(db_postponed); - if (HvTOTALKEYS(hv) > 0 && hv_exists(hv, SvPVX_const(tmpstr), SvUTF8(tmpstr) ? -(I32)SvCUR(tmpstr) : (I32)SvCUR(tmpstr))) { - CV * const pcv = GvCV(db_postponed); - if (pcv) { - dSP; - PUSHMARK(SP); - XPUSHs(tmpstr); - PUTBACK; - call_sv(MUTABLE_SV(pcv), G_DISCARD); - } - } - } + sv_catpvn_flags(tmpstr, PadnamePV(name)+1, PadnameLEN(name)-1, + PadnameUTF8(name) ? SV_CATUTF8 : SV_CATBYTES); + (void)hv_store_ent(GvHV(PL_DBsub), tmpstr, sv, 0); + hv = GvHVn(db_postponed); + if (HvTOTALKEYS(hv) > 0 && hv_exists_ent(hv, tmpstr, 0)) { + CV * const pcv = GvCV(db_postponed); + if (pcv) { + dSP; + PUSHMARK(SP); + XPUSHs(tmpstr); + PUTBACK; + call_sv(MUTABLE_SV(pcv), G_DISCARD); + } + } + } } clone: if (clonee) { - assert(CvDEPTH(outcv)); - spot = (CV **) - &PadARRAY(PadlistARRAY(CvPADLIST(outcv))[CvDEPTH(outcv)])[pax]; - if (reusable) + assert(CvDEPTH(outcv)); + spot = (CV **) + &PadARRAY(PadlistARRAY(CvPADLIST(outcv))[CvDEPTH(outcv)])[pax]; + if (reusable) cv_clone_into(clonee, *spot); - else *spot = cv_clone(clonee); - SvREFCNT_dec_NN(clonee); - cv = *spot; + else *spot = cv_clone(clonee); + SvREFCNT_dec_NN(clonee); + cv = *spot; } if (CvDEPTH(outcv) && !reusable && PadnameIsSTATE(name)) { - PADOFFSET depth = CvDEPTH(outcv); - while (--depth) { - SV *oldcv; - svspot = &PadARRAY(PadlistARRAY(CvPADLIST(outcv))[depth])[pax]; - oldcv = *svspot; - *svspot = SvREFCNT_inc_simple_NN(cv); - SvREFCNT_dec(oldcv); - } + PADOFFSET depth = CvDEPTH(outcv); + while (--depth) { + SV *oldcv; + svspot = &PadARRAY(PadlistARRAY(CvPADLIST(outcv))[depth])[pax]; + oldcv = *svspot; + *svspot = SvREFCNT_inc_simple_NN(cv); + SvREFCNT_dec(oldcv); + } } done: if (PL_parser) - PL_parser->copline = NOLINE; + PL_parser->copline = NOLINE; LEAVE_SCOPE(floor); #ifdef PERL_DEBUG_READONLY_OPS if (slab) - Slab_to_ro(slab); + Slab_to_ro(slab); #endif op_free(o); return cv; @@ -11178,7 +11502,7 @@ this function. If C is false and C is null, then the subroutine will be anonymous. If C is false and C is non-null, then C -must point to a C op, which will be consumed by this function, +must point to a C OP, which will be consumed by this function, and its string value supplies a name for the subroutine. The name may be qualified or unqualified, and if it is unqualified then a default stash will be selected in some manner. If C is true, then C @@ -11209,13 +11533,24 @@ time this function returns, making it erroneous for the caller to make any use of the returned pointer. It is the caller's responsibility to ensure that it knows which of these situations applies. +=for apidoc newATTRSUB +Construct a Perl subroutine, also performing some surrounding jobs. + +This is the same as L> with its C parameter set to +FALSE. This means that if C is null, the new sub will be anonymous; otherwise +the name will be derived from C in the way described (as with all other +details) in L>. + +=for apidoc newSUB +Like C>, but without attributes. + =cut */ /* _x = extended */ CV * Perl_newATTRSUB_x(pTHX_ I32 floor, OP *o, OP *proto, OP *attrs, - OP *block, bool o_is_gv) + OP *block, bool o_is_gv) { GV *gv; const char *ps; @@ -11230,12 +11565,12 @@ Perl_newATTRSUB_x(pTHX_ I32 floor, OP *o, OP *proto, OP *attrs, full CV. If anything is present then it will take a full CV to store it. */ const I32 gv_fetch_flags - = ec ? GV_NOADD_NOINIT : + = ec ? GV_NOADD_NOINIT : (block || attrs || (CvFLAGS(PL_compcv) & CVf_BUILTIN_ATTRS)) - ? GV_ADDMULTI : GV_ADDMULTI | GV_NOINIT; + ? GV_ADDMULTI : GV_ADDMULTI | GV_NOINIT; STRLEN namlen = 0; const char * const name = - o ? SvPV_const(o_is_gv ? (SV *)o : cSVOPo->op_sv, namlen) : NULL; + o ? SvPV_const(o_is_gv ? (SV *)o : cSVOPo->op_sv, namlen) : NULL; bool has_name; bool name_is_utf8 = o && !o_is_gv && SvUTF8(cSVOPo->op_sv); bool evanescent = FALSE; @@ -11245,41 +11580,41 @@ Perl_newATTRSUB_x(pTHX_ I32 floor, OP *o, OP *proto, OP *attrs, #endif if (o_is_gv) { - gv = (GV*)o; - o = NULL; - has_name = TRUE; + gv = (GV*)o; + o = NULL; + has_name = TRUE; } else if (name) { - /* Try to optimise and avoid creating a GV. Instead, the CV’s name - hek and CvSTASH pointer together can imply the GV. If the name - contains a package name, then GvSTASH(CvGV(cv)) may differ from - CvSTASH, so forego the optimisation if we find any. - Also, we may be called from load_module at run time, so - PL_curstash (which sets CvSTASH) may not point to the stash the - sub is stored in. */ - /* XXX This optimization is currently disabled for packages other - than main, since there was too much CPAN breakage. */ - const I32 flags = - ec ? GV_NOADD_NOINIT - : (IN_PERL_RUNTIME && PL_curstash != CopSTASH(PL_curcop)) - || PL_curstash != PL_defstash - || memchr(name, ':', namlen) || memchr(name, '\'', namlen) - ? gv_fetch_flags - : GV_ADDMULTI | GV_NOINIT | GV_NOTQUAL; - gv = gv_fetchsv(cSVOPo->op_sv, flags, SVt_PVCV); - has_name = TRUE; + /* Try to optimise and avoid creating a GV. Instead, the CV’s name + hek and CvSTASH pointer together can imply the GV. If the name + contains a package name, then GvSTASH(CvGV(cv)) may differ from + CvSTASH, so forego the optimisation if we find any. + Also, we may be called from load_module at run time, so + PL_curstash (which sets CvSTASH) may not point to the stash the + sub is stored in. */ + /* XXX This optimization is currently disabled for packages other + than main, since there was too much CPAN breakage. */ + const I32 flags = + ec ? GV_NOADD_NOINIT + : (IN_PERL_RUNTIME && PL_curstash != CopSTASH(PL_curcop)) + || PL_curstash != PL_defstash + || memchr(name, ':', namlen) || memchr(name, '\'', namlen) + ? gv_fetch_flags + : GV_ADDMULTI | GV_NOINIT | GV_NOTQUAL; + gv = gv_fetchsv(cSVOPo->op_sv, flags, SVt_PVCV); + has_name = TRUE; } else if (PERLDB_NAMEANON && CopLINE(PL_curcop)) { - SV * const sv = sv_newmortal(); - Perl_sv_setpvf(aTHX_ sv, "%s[%s:%" IVdf "]", - PL_curstash ? "__ANON__" : "__ANON__::__ANON__", - CopFILE(PL_curcop), (IV)CopLINE(PL_curcop)); - gv = gv_fetchsv(sv, gv_fetch_flags, SVt_PVCV); - has_name = TRUE; + SV * const sv = sv_newmortal(); + Perl_sv_setpvf(aTHX_ sv, "%s[%s:%" IVdf "]", + PL_curstash ? "__ANON__" : "__ANON__::__ANON__", + CopFILE(PL_curcop), (IV)CopLINE(PL_curcop)); + gv = gv_fetchsv(sv, gv_fetch_flags, SVt_PVCV); + has_name = TRUE; } else if (PL_curstash) { - gv = gv_fetchpvs("__ANON__", gv_fetch_flags, SVt_PVCV); - has_name = FALSE; + gv = gv_fetchpvs("__ANON__", gv_fetch_flags, SVt_PVCV); + has_name = FALSE; } else { - gv = gv_fetchpvs("__ANON__::__ANON__", gv_fetch_flags, SVt_PVCV); - has_name = FALSE; + gv = gv_fetchpvs("__ANON__::__ANON__", gv_fetch_flags, SVt_PVCV); + has_name = FALSE; } if (!ec) { @@ -11292,12 +11627,12 @@ Perl_newATTRSUB_x(pTHX_ I32 floor, OP *o, OP *proto, OP *attrs, } if (proto) { - assert(proto->op_type == OP_CONST); - ps = SvPV_const(((SVOP*)proto)->op_sv, ps_len); + assert(proto->op_type == OP_CONST); + ps = SvPV_const(((SVOP*)proto)->op_sv, ps_len); ps_utf8 = SvUTF8(((SVOP*)proto)->op_sv); } else - ps = NULL; + ps = NULL; if (o) SAVEFREEOP(o); @@ -11307,29 +11642,29 @@ Perl_newATTRSUB_x(pTHX_ I32 floor, OP *o, OP *proto, OP *attrs, SAVEFREEOP(attrs); if (ec) { - op_free(block); + op_free(block); - if (name) + if (name) SvREFCNT_dec(PL_compcv); - else + else cv = PL_compcv; - PL_compcv = 0; - if (name && block) { - const char *s = (char *) my_memrchr(name, ':', namlen); - s = s ? s+1 : name; - if (strEQ(s, "BEGIN")) { - if (PL_in_eval & EVAL_KEEPERR) - Perl_croak_nocontext("BEGIN not safe after errors--compilation aborted"); - else { + PL_compcv = 0; + if (name && block) { + const char *s = (char *) my_memrchr(name, ':', namlen); + s = s ? s+1 : name; + if (strEQ(s, "BEGIN")) { + if (PL_in_eval & EVAL_KEEPERR) + Perl_croak_nocontext("BEGIN not safe after errors--compilation aborted"); + else { SV * const errsv = ERRSV; - /* force display of errors found but not reported */ - sv_catpvs(errsv, "BEGIN not safe after errors--compilation aborted"); - Perl_croak_nocontext("%" SVf, SVfARG(errsv)); - } - } - } - goto done; + /* force display of errors found but not reported */ + sv_catpvs(errsv, "BEGIN not safe after errors--compilation aborted"); + Perl_croak_nocontext("%" SVf, SVfARG(errsv)); + } + } + } + goto done; } if (!block && SvTYPE(gv) != SVt_PVGV) { @@ -11367,30 +11702,30 @@ Perl_newATTRSUB_x(pTHX_ I32 floor, OP *o, OP *proto, OP *attrs, } cv = (!name || (isGV(gv) && GvCVGEN(gv))) - ? NULL - : isGV(gv) - ? GvCV(gv) - : SvROK(gv) && SvTYPE(SvRV(gv)) == SVt_PVCV - ? (CV *)SvRV(gv) - : NULL; + ? NULL + : isGV(gv) + ? GvCV(gv) + : SvROK(gv) && SvTYPE(SvRV(gv)) == SVt_PVCV + ? (CV *)SvRV(gv) + : NULL; if (block) { - assert(PL_parser); - /* This makes sub {}; work as expected. */ - if (block->op_type == OP_STUB) { - const line_t l = PL_parser->copline; - op_free(block); - block = newSTATEOP(0, NULL, 0); - PL_parser->copline = l; - } - block = CvLVALUE(PL_compcv) - || (cv && CvLVALUE(cv) && !CvROOT(cv) && !CvXSUB(cv) - && (!isGV(gv) || !GvASSUMECV(gv))) - ? newUNOP(OP_LEAVESUBLV, 0, - op_lvalue(scalarseq(block), OP_LEAVESUBLV)) - : newUNOP(OP_LEAVESUB, 0, scalarseq(block)); - start = LINKLIST(block); - block->op_next = 0; + assert(PL_parser); + /* This makes sub {}; work as expected. */ + if (block->op_type == OP_STUB) { + const line_t l = PL_parser->copline; + op_free(block); + block = newSTATEOP(0, NULL, 0); + PL_parser->copline = l; + } + block = CvLVALUE(PL_compcv) + || (cv && CvLVALUE(cv) && !CvROOT(cv) && !CvXSUB(cv) + && (!isGV(gv) || !GvASSUMECV(gv))) + ? newUNOP(OP_LEAVESUBLV, 0, + op_lvalue(voidnonfinal(block), OP_LEAVESUBLV)) + : newUNOP(OP_LEAVESUB, 0, voidnonfinal(block)); + start = LINKLIST(block); + block->op_next = 0; if (ps && !*ps && !attrs && !CvLVALUE(PL_compcv)) const_sv = S_op_const_sv(aTHX_ start, PL_compcv, @@ -11402,36 +11737,36 @@ Perl_newATTRSUB_x(pTHX_ I32 floor, OP *o, OP *proto, OP *attrs, const_sv = NULL; if (SvPOK(gv) || (SvROK(gv) && SvTYPE(SvRV(gv)) != SVt_PVCV)) { - cv_ckproto_len_flags((const CV *)gv, - o ? (const GV *)cSVOPo->op_sv : NULL, ps, - ps_len, ps_utf8|CV_CKPROTO_CURSTASH); - if (SvROK(gv)) { - /* All the other code for sub redefinition warnings expects the - clobbered sub to be a CV. Instead of making all those code - paths more complex, just inline the RV version here. */ - const line_t oldline = CopLINE(PL_curcop); - assert(IN_PERL_COMPILETIME); - if (PL_parser && PL_parser->copline != NOLINE) - /* This ensures that warnings are reported at the first - line of a redefinition, not the last. */ - CopLINE_set(PL_curcop, PL_parser->copline); - /* protect against fatal warnings leaking compcv */ - SAVEFREESV(PL_compcv); - - if (ckWARN(WARN_REDEFINE) - || ( ckWARN_d(WARN_REDEFINE) - && ( !const_sv || SvRV(gv) == const_sv - || sv_cmp(SvRV(gv), const_sv) ))) { + cv_ckproto_len_flags((const CV *)gv, + o ? (const GV *)cSVOPo->op_sv : NULL, ps, + ps_len, ps_utf8|CV_CKPROTO_CURSTASH); + if (SvROK(gv)) { + /* All the other code for sub redefinition warnings expects the + clobbered sub to be a CV. Instead of making all those code + paths more complex, just inline the RV version here. */ + const line_t oldline = CopLINE(PL_curcop); + assert(IN_PERL_COMPILETIME); + if (PL_parser && PL_parser->copline != NOLINE) + /* This ensures that warnings are reported at the first + line of a redefinition, not the last. */ + CopLINE_set(PL_curcop, PL_parser->copline); + /* protect against fatal warnings leaking compcv */ + SAVEFREESV(PL_compcv); + + if (ckWARN(WARN_REDEFINE) + || ( ckWARN_d(WARN_REDEFINE) + && ( !const_sv || SvRV(gv) == const_sv + || sv_cmp(SvRV(gv), const_sv) ))) { assert(cSVOPo); - Perl_warner(aTHX_ packWARN(WARN_REDEFINE), - "Constant subroutine %" SVf " redefined", - SVfARG(cSVOPo->op_sv)); + Perl_warner(aTHX_ packWARN(WARN_REDEFINE), + "Constant subroutine %" SVf " redefined", + SVfARG(cSVOPo->op_sv)); } - SvREFCNT_inc_simple_void_NN(PL_compcv); - CopLINE_set(PL_curcop, oldline); - SvREFCNT_dec(SvRV(gv)); - } + SvREFCNT_inc_simple_void_NN(PL_compcv); + CopLINE_set(PL_curcop, oldline); + SvREFCNT_dec(SvRV(gv)); + } } if (cv) { @@ -11443,61 +11778,61 @@ Perl_newATTRSUB_x(pTHX_ I32 floor, OP *o, OP *proto, OP *attrs, */ if (exists || SvPOK(cv)) cv_ckproto_len_flags(cv, gv, ps, ps_len, ps_utf8); - /* already defined (or promised)? */ - if (exists || (isGV(gv) && GvASSUMECV(gv))) { - S_already_defined(aTHX_ cv, block, o, NULL, &const_sv); + /* already defined (or promised)? */ + if (exists || (isGV(gv) && GvASSUMECV(gv))) { + S_already_defined(aTHX_ cv, block, o, NULL, &const_sv); if (block) - cv = NULL; - else { - if (attrs) + cv = NULL; + else { + if (attrs) goto attrs; - /* just a "sub foo;" when &foo is already defined */ - SAVEFREESV(PL_compcv); - goto done; - } - } + /* just a "sub foo;" when &foo is already defined */ + SAVEFREESV(PL_compcv); + goto done; + } + } } if (const_sv) { - SvREFCNT_inc_simple_void_NN(const_sv); - SvFLAGS(const_sv) |= SVs_PADTMP; - if (cv) { - assert(!CvROOT(cv) && !CvCONST(cv)); - cv_forget_slab(cv); + SvREFCNT_inc_simple_void_NN(const_sv); + SvFLAGS(const_sv) |= SVs_PADTMP; + if (cv) { + assert(!CvROOT(cv) && !CvCONST(cv)); + cv_forget_slab(cv); SvPVCLEAR(MUTABLE_SV(cv)); /* prototype is "" */ - CvXSUBANY(cv).any_ptr = const_sv; - CvXSUB(cv) = const_sv_xsub; - CvCONST_on(cv); - CvISXSUB_on(cv); - PoisonPADLIST(cv); - CvFLAGS(cv) |= CvMETHOD(PL_compcv); - } - else { - if (isGV(gv) || CvMETHOD(PL_compcv)) { - if (name && isGV(gv)) - GvCV_set(gv, NULL); - cv = newCONSTSUB_flags( - NULL, name, namlen, name_is_utf8 ? SVf_UTF8 : 0, - const_sv - ); - assert(cv); - assert(SvREFCNT((SV*)cv) != 0); - CvFLAGS(cv) |= CvMETHOD(PL_compcv); - } - else { - if (!SvROK(gv)) { - SV_CHECK_THINKFIRST_COW_DROP((SV *)gv); - prepare_SV_for_RV((SV *)gv); - SvOK_off((SV *)gv); - SvROK_on(gv); - } - SvRV_set(gv, const_sv); - } - } - op_free(block); - SvREFCNT_dec(PL_compcv); - PL_compcv = NULL; - goto done; + CvXSUBANY(cv).any_ptr = const_sv; + CvXSUB(cv) = const_sv_xsub; + CvCONST_on(cv); + CvISXSUB_on(cv); + PoisonPADLIST(cv); + CvFLAGS(cv) |= CvMETHOD(PL_compcv); + } + else { + if (isGV(gv) || CvMETHOD(PL_compcv)) { + if (name && isGV(gv)) + GvCV_set(gv, NULL); + cv = newCONSTSUB_flags( + NULL, name, namlen, name_is_utf8 ? SVf_UTF8 : 0, + const_sv + ); + assert(cv); + assert(SvREFCNT((SV*)cv) != 0); + CvFLAGS(cv) |= CvMETHOD(PL_compcv); + } + else { + if (!SvROK(gv)) { + SV_CHECK_THINKFIRST_COW_DROP((SV *)gv); + prepare_SV_for_RV((SV *)gv); + SvOK_off((SV *)gv); + SvROK_on(gv); + } + SvRV_set(gv, const_sv); + } + } + op_free(block); + SvREFCNT_dec(PL_compcv); + PL_compcv = NULL; + goto done; } /* don't copy new BEGIN CV to old BEGIN CV - RT #129099 */ @@ -11505,108 +11840,106 @@ Perl_newATTRSUB_x(pTHX_ I32 floor, OP *o, OP *proto, OP *attrs, cv = NULL; if (cv) { /* must reuse cv if autoloaded */ - /* transfer PL_compcv to cv */ - if (block) { + /* transfer PL_compcv to cv */ + if (block) { bool free_file = CvFILE(cv) && CvDYNFILE(cv); - cv_flags_t existing_builtin_attrs = CvFLAGS(cv) & CVf_BUILTIN_ATTRS; - PADLIST *const temp_av = CvPADLIST(cv); - CV *const temp_cv = CvOUTSIDE(cv); - const cv_flags_t other_flags = - CvFLAGS(cv) & (CVf_SLABBED|CVf_WEAKOUTSIDE); - OP * const cvstart = CvSTART(cv); - - if (isGV(gv)) { - CvGV_set(cv,gv); - assert(!CvCVGV_RC(cv)); - assert(CvGV(cv) == gv); - } - else { - dVAR; - U32 hash; - PERL_HASH(hash, name, namlen); - CvNAME_HEK_set(cv, - share_hek(name, - name_is_utf8 - ? -(SSize_t)namlen - : (SSize_t)namlen, - hash)); - } - - SvPOK_off(cv); - CvFLAGS(cv) = CvFLAGS(PL_compcv) | existing_builtin_attrs - | CvNAMED(cv); - CvOUTSIDE(cv) = CvOUTSIDE(PL_compcv); - CvOUTSIDE_SEQ(cv) = CvOUTSIDE_SEQ(PL_compcv); - CvPADLIST_set(cv,CvPADLIST(PL_compcv)); - CvOUTSIDE(PL_compcv) = temp_cv; - CvPADLIST_set(PL_compcv, temp_av); - CvSTART(cv) = CvSTART(PL_compcv); - CvSTART(PL_compcv) = cvstart; - CvFLAGS(PL_compcv) &= ~(CVf_SLABBED|CVf_WEAKOUTSIDE); - CvFLAGS(PL_compcv) |= other_flags; - - if (free_file) { - Safefree(CvFILE(cv)); + cv_flags_t existing_builtin_attrs = CvFLAGS(cv) & CVf_BUILTIN_ATTRS; + PADLIST *const temp_av = CvPADLIST(cv); + CV *const temp_cv = CvOUTSIDE(cv); + const cv_flags_t other_flags = + CvFLAGS(cv) & (CVf_SLABBED|CVf_WEAKOUTSIDE); + OP * const cvstart = CvSTART(cv); + + if (isGV(gv)) { + CvGV_set(cv,gv); + assert(!CvCVGV_RC(cv)); + assert(CvGV(cv) == gv); + } + else { + U32 hash; + PERL_HASH(hash, name, namlen); + CvNAME_HEK_set(cv, + share_hek(name, + name_is_utf8 + ? -(SSize_t)namlen + : (SSize_t)namlen, + hash)); + } + + SvPOK_off(cv); + CvFLAGS(cv) = CvFLAGS(PL_compcv) | existing_builtin_attrs + | CvNAMED(cv); + CvOUTSIDE(cv) = CvOUTSIDE(PL_compcv); + CvOUTSIDE_SEQ(cv) = CvOUTSIDE_SEQ(PL_compcv); + CvPADLIST_set(cv,CvPADLIST(PL_compcv)); + CvOUTSIDE(PL_compcv) = temp_cv; + CvPADLIST_set(PL_compcv, temp_av); + CvSTART(cv) = CvSTART(PL_compcv); + CvSTART(PL_compcv) = cvstart; + CvFLAGS(PL_compcv) &= ~(CVf_SLABBED|CVf_WEAKOUTSIDE); + CvFLAGS(PL_compcv) |= other_flags; + + if (free_file) { + Safefree(CvFILE(cv)); } - CvFILE_set_from_cop(cv, PL_curcop); - CvSTASH_set(cv, PL_curstash); + CvFILE_set_from_cop(cv, PL_curcop); + CvSTASH_set(cv, PL_curstash); - /* inner references to PL_compcv must be fixed up ... */ - pad_fixup_inner_anons(CvPADLIST(cv), PL_compcv, cv); - if (PERLDB_INTER)/* Advice debugger on the new sub. */ + /* inner references to PL_compcv must be fixed up ... */ + pad_fixup_inner_anons(CvPADLIST(cv), PL_compcv, cv); + if (PERLDB_INTER)/* Advice debugger on the new sub. */ ++PL_sub_generation; - } - else { - /* Might have had built-in attributes applied -- propagate them. */ - CvFLAGS(cv) |= (CvFLAGS(PL_compcv) & CVf_BUILTIN_ATTRS); - } - /* ... before we throw it away */ - SvREFCNT_dec(PL_compcv); - PL_compcv = cv; + } + else { + /* Might have had built-in attributes applied -- propagate them. */ + CvFLAGS(cv) |= (CvFLAGS(PL_compcv) & CVf_BUILTIN_ATTRS); + } + /* ... before we throw it away */ + SvREFCNT_dec(PL_compcv); + PL_compcv = cv; } else { - cv = PL_compcv; - if (name && isGV(gv)) { - GvCV_set(gv, cv); - GvCVGEN(gv) = 0; - if (HvENAME_HEK(GvSTASH(gv))) - /* sub Foo::bar { (shift)+1 } */ - gv_method_changed(gv); - } - else if (name) { - if (!SvROK(gv)) { - SV_CHECK_THINKFIRST_COW_DROP((SV *)gv); - prepare_SV_for_RV((SV *)gv); - SvOK_off((SV *)gv); - SvROK_on(gv); - } - SvRV_set(gv, (SV *)cv); - if (HvENAME_HEK(PL_curstash)) - mro_method_changed_in(PL_curstash); - } + cv = PL_compcv; + if (name && isGV(gv)) { + GvCV_set(gv, cv); + GvCVGEN(gv) = 0; + if (HvENAME_HEK(GvSTASH(gv))) + /* sub Foo::bar { (shift)+1 } */ + gv_method_changed(gv); + } + else if (name) { + if (!SvROK(gv)) { + SV_CHECK_THINKFIRST_COW_DROP((SV *)gv); + prepare_SV_for_RV((SV *)gv); + SvOK_off((SV *)gv); + SvROK_on(gv); + } + SvRV_set(gv, (SV *)cv); + if (HvENAME_HEK(PL_curstash)) + mro_method_changed_in(PL_curstash); + } } assert(cv); assert(SvREFCNT((SV*)cv) != 0); if (!CvHASGV(cv)) { - if (isGV(gv)) + if (isGV(gv)) CvGV_set(cv, gv); - else { - dVAR; - U32 hash; - PERL_HASH(hash, name, namlen); - CvNAME_HEK_set(cv, share_hek(name, - name_is_utf8 - ? -(SSize_t)namlen - : (SSize_t)namlen, - hash)); - } - CvFILE_set_from_cop(cv, PL_curcop); - CvSTASH_set(cv, PL_curstash); + else { + U32 hash; + PERL_HASH(hash, name, namlen); + CvNAME_HEK_set(cv, share_hek(name, + name_is_utf8 + ? -(SSize_t)namlen + : (SSize_t)namlen, + hash)); + } + CvFILE_set_from_cop(cv, PL_curcop); + CvSTASH_set(cv, PL_curstash); } if (ps) { - sv_setpvn(MUTABLE_SV(cv), ps, ps_len); + sv_setpvn(MUTABLE_SV(cv), ps, ps_len); if ( ps_utf8 ) SvUTF8_on(MUTABLE_SV(cv)); } @@ -11631,41 +11964,40 @@ Perl_newATTRSUB_x(pTHX_ I32 floor, OP *o, OP *proto, OP *attrs, attrs: if (attrs) { - /* Need to do a C. */ - HV *stash = name && !CvNAMED(cv) && GvSTASH(CvGV(cv)) - ? GvSTASH(CvGV(cv)) - : PL_curstash; - if (!name) + /* Need to do a C. */ + HV *stash = name && !CvNAMED(cv) && GvSTASH(CvGV(cv)) + ? GvSTASH(CvGV(cv)) + : PL_curstash; + if (!name) SAVEFREESV(cv); - apply_attrs(stash, MUTABLE_SV(cv), attrs); - if (!name) + apply_attrs(stash, MUTABLE_SV(cv), attrs); + if (!name) SvREFCNT_inc_simple_void_NN(cv); } if (block && has_name) { - if (PERLDB_SUBLINE && PL_curstash != PL_debstash) { - SV * const tmpstr = cv_name(cv,NULL,0); - GV * const db_postponed = gv_fetchpvs("DB::postponed", - GV_ADDMULTI, SVt_PVHV); - HV *hv; - SV * const sv = Perl_newSVpvf(aTHX_ "%s:%ld-%ld", - CopFILE(PL_curcop), - (long)PL_subline, - (long)CopLINE(PL_curcop)); - (void)hv_store(GvHV(PL_DBsub), SvPVX_const(tmpstr), - SvUTF8(tmpstr) ? -(I32)SvCUR(tmpstr) : (I32)SvCUR(tmpstr), sv, 0); - hv = GvHVn(db_postponed); - if (HvTOTALKEYS(hv) > 0 && hv_exists(hv, SvPVX_const(tmpstr), SvUTF8(tmpstr) ? -(I32)SvCUR(tmpstr) : (I32)SvCUR(tmpstr))) { - CV * const pcv = GvCV(db_postponed); - if (pcv) { - dSP; - PUSHMARK(SP); - XPUSHs(tmpstr); - PUTBACK; - call_sv(MUTABLE_SV(pcv), G_DISCARD); - } - } - } + if (PERLDB_SUBLINE && PL_curstash != PL_debstash) { + SV * const tmpstr = cv_name(cv,NULL,0); + GV * const db_postponed = gv_fetchpvs("DB::postponed", + GV_ADDMULTI, SVt_PVHV); + HV *hv; + SV * const sv = Perl_newSVpvf(aTHX_ "%s:%ld-%ld", + CopFILE(PL_curcop), + (long)PL_subline, + (long)CopLINE(PL_curcop)); + (void)hv_store_ent(GvHV(PL_DBsub), tmpstr, sv, 0); + hv = GvHVn(db_postponed); + if (HvTOTALKEYS(hv) > 0 && hv_exists_ent(hv, tmpstr, 0)) { + CV * const pcv = GvCV(db_postponed); + if (pcv) { + dSP; + PUSHMARK(SP); + XPUSHs(tmpstr); + PUTBACK; + call_sv(MUTABLE_SV(pcv), G_DISCARD); + } + } + } if (name) { if (PL_parser && PL_parser->error_count) @@ -11680,17 +12012,17 @@ Perl_newATTRSUB_x(pTHX_ I32 floor, OP *o, OP *proto, OP *attrs, done: assert(!cv || evanescent || SvREFCNT((SV*)cv) != 0); if (PL_parser) - PL_parser->copline = NOLINE; + PL_parser->copline = NOLINE; LEAVE_SCOPE(floor); assert(!cv || evanescent || SvREFCNT((SV*)cv) != 0); if (!evanescent) { #ifdef PERL_DEBUG_READONLY_OPS if (slab) - Slab_to_ro(slab); + Slab_to_ro(slab); #endif if (cv && name && block && CvOUTSIDE(cv) && !CvEVAL(CvOUTSIDE(cv))) - pad_add_weakref(cv); + pad_add_weakref(cv); } return cv; } @@ -11723,8 +12055,8 @@ S_clear_special_blocks(pTHX_ const char *const fullname, /* Returns true if the sub has been freed. */ STATIC bool S_process_special_blocks(pTHX_ I32 floor, const char *const fullname, - GV *const gv, - CV *const cv) + GV *const gv, + CV *const cv) { const char *const colon = strrchr(fullname,':'); const char *const name = colon ? colon + 1 : fullname; @@ -11732,68 +12064,89 @@ S_process_special_blocks(pTHX_ I32 floor, const char *const fullname, PERL_ARGS_ASSERT_PROCESS_SPECIAL_BLOCKS; if (*name == 'B') { - if (strEQ(name, "BEGIN")) { - const I32 oldscope = PL_scopestack_ix; + if (strEQ(name, "BEGIN")) { + const I32 oldscope = PL_scopestack_ix; dSP; (void)CvGV(cv); - if (floor) LEAVE_SCOPE(floor); - ENTER; + if (floor) LEAVE_SCOPE(floor); + ENTER; + + SAVEVPTR(PL_curcop); + if (PL_curcop == &PL_compiling) { + /* Avoid pushing the "global" &PL_compiling onto the + * context stack. For example, a stack trace inside + * nested use's would show all calls coming from whoever + * most recently updated PL_compiling.cop_file and + * cop_line. So instead, temporarily set PL_curcop to a + * private copy of &PL_compiling. PL_curcop will soon be + * set to point back to &PL_compiling anyway but only + * after the temp value has been pushed onto the context + * stack as blk_oldcop. + * This is slightly hacky, but necessary. Note also + * that in the brief window before PL_curcop is set back + * to PL_compiling, IN_PERL_COMPILETIME/IN_PERL_RUNTIME + * will give the wrong answer. + */ + PL_curcop = (COP*)newSTATEOP(PL_compiling.op_flags, NULL, NULL); + CopLINE_set(PL_curcop, CopLINE(&PL_compiling)); + SAVEFREEOP(PL_curcop); + } + PUSHSTACKi(PERLSI_REQUIRE); - SAVECOPFILE(&PL_compiling); - SAVECOPLINE(&PL_compiling); - SAVEVPTR(PL_curcop); + SAVECOPFILE(&PL_compiling); + SAVECOPLINE(&PL_compiling); - DEBUG_x( dump_sub(gv) ); - Perl_av_create_and_push(aTHX_ &PL_beginav, MUTABLE_SV(cv)); - GvCV_set(gv,0); /* cv has been hijacked */ - call_list(oldscope, PL_beginav); + DEBUG_x( dump_sub(gv) ); + Perl_av_create_and_push(aTHX_ &PL_beginav, MUTABLE_SV(cv)); + GvCV_set(gv,0); /* cv has been hijacked */ + call_list(oldscope, PL_beginav); POPSTACK; - LEAVE; - return !PL_savebegin; - } - else - return FALSE; + LEAVE; + return !PL_savebegin; + } + else + return FALSE; } else { - if (*name == 'E') { - if (strEQ(name, "END")) { - DEBUG_x( dump_sub(gv) ); - Perl_av_create_and_unshift_one(aTHX_ &PL_endav, MUTABLE_SV(cv)); - } else - return FALSE; - } else if (*name == 'U') { - if (strEQ(name, "UNITCHECK")) { - /* It's never too late to run a unitcheck block */ - Perl_av_create_and_unshift_one(aTHX_ &PL_unitcheckav, MUTABLE_SV(cv)); - } - else - return FALSE; - } else if (*name == 'C') { - if (strEQ(name, "CHECK")) { - if (PL_main_start) - /* diag_listed_as: Too late to run %s block */ - Perl_ck_warner(aTHX_ packWARN(WARN_VOID), - "Too late to run CHECK block"); - Perl_av_create_and_unshift_one(aTHX_ &PL_checkav, MUTABLE_SV(cv)); - } - else - return FALSE; - } else if (*name == 'I') { - if (strEQ(name, "INIT")) { - if (PL_main_start) - /* diag_listed_as: Too late to run %s block */ - Perl_ck_warner(aTHX_ packWARN(WARN_VOID), - "Too late to run INIT block"); - Perl_av_create_and_push(aTHX_ &PL_initav, MUTABLE_SV(cv)); - } - else - return FALSE; - } else - return FALSE; - DEBUG_x( dump_sub(gv) ); - (void)CvGV(cv); - GvCV_set(gv,0); /* cv has been hijacked */ - return FALSE; + if (*name == 'E') { + if (strEQ(name, "END")) { + DEBUG_x( dump_sub(gv) ); + Perl_av_create_and_unshift_one(aTHX_ &PL_endav, MUTABLE_SV(cv)); + } else + return FALSE; + } else if (*name == 'U') { + if (strEQ(name, "UNITCHECK")) { + /* It's never too late to run a unitcheck block */ + Perl_av_create_and_unshift_one(aTHX_ &PL_unitcheckav, MUTABLE_SV(cv)); + } + else + return FALSE; + } else if (*name == 'C') { + if (strEQ(name, "CHECK")) { + if (PL_main_start) + /* diag_listed_as: Too late to run %s block */ + Perl_ck_warner(aTHX_ packWARN(WARN_VOID), + "Too late to run CHECK block"); + Perl_av_create_and_unshift_one(aTHX_ &PL_checkav, MUTABLE_SV(cv)); + } + else + return FALSE; + } else if (*name == 'I') { + if (strEQ(name, "INIT")) { + if (PL_main_start) + /* diag_listed_as: Too late to run %s block */ + Perl_ck_warner(aTHX_ packWARN(WARN_VOID), + "Too late to run INIT block"); + Perl_av_create_and_push(aTHX_ &PL_initav, MUTABLE_SV(cv)); + } + else + return FALSE; + } else + return FALSE; + DEBUG_x( dump_sub(gv) ); + (void)CvGV(cv); + GvCV_set(gv,0); /* cv has been hijacked */ + return FALSE; } } @@ -11893,13 +12246,13 @@ Perl_newCONSTSUB_flags(pTHX_ HV *stash, const char *name, STRLEN len, ENTER; if (IN_PERL_RUNTIME) { - /* at runtime, it's not safe to manipulate PL_curcop: it may be - * an op shared between threads. Use a non-shared COP for our - * dirty work */ - SAVEVPTR(PL_curcop); - SAVECOMPILEWARNINGS(); - PL_compiling.cop_warnings = DUP_WARNINGS(PL_curcop->cop_warnings); - PL_curcop = &PL_compiling; + /* at runtime, it's not safe to manipulate PL_curcop: it may be + * an op shared between threads. Use a non-shared COP for our + * dirty work */ + SAVEVPTR(PL_curcop); + SAVECOMPILEWARNINGS(); + PL_compiling.cop_warnings = DUP_WARNINGS(PL_curcop->cop_warnings); + PL_curcop = &PL_compiling; } SAVECOPLINE(PL_curcop); CopLINE_set(PL_curcop, PL_parser ? PL_parser->copline : NOLINE); @@ -11908,8 +12261,8 @@ Perl_newCONSTSUB_flags(pTHX_ HV *stash, const char *name, STRLEN len, PL_hints &= ~HINT_BLOCK_SCOPE; if (stash) { - SAVEGENERICSV(PL_curstash); - PL_curstash = (HV *)SvREFCNT_inc_simple_NN(stash); + SAVEGENERICSV(PL_curstash); + PL_curstash = (HV *)SvREFCNT_inc_simple_NN(stash); } /* Protect sv against leakage caused by fatal warnings. */ @@ -11920,11 +12273,11 @@ Perl_newCONSTSUB_flags(pTHX_ HV *stash, const char *name, STRLEN len, processor __FILE__ directive). But we need a dynamically allocated one, and we need it to get freed. */ cv = newXS_len_flags(name, len, - sv && SvTYPE(sv) == SVt_PVAV - ? const_av_xsub - : const_sv_xsub, - file ? file : "", "", - &sv, XS_DYNAMIC_FILENAME | flags); + sv && SvTYPE(sv) == SVt_PVAV + ? const_av_xsub + : const_sv_xsub, + file ? file : "", "", + &sv, XS_DYNAMIC_FILENAME | flags); assert(cv); assert(SvREFCNT((SV*)cv) != 0); CvXSUBANY(cv).any_ptr = SvREFCNT_inc_simple(sv); @@ -11949,14 +12302,14 @@ Perl_newXS(pTHX_ const char *name, XSUBADDR_t subaddr, const char *filename) { PERL_ARGS_ASSERT_NEWXS; return newXS_len_flags( - name, name ? strlen(name) : 0, subaddr, filename, NULL, NULL, 0 + name, name ? strlen(name) : 0, subaddr, filename, NULL, NULL, 0 ); } CV * Perl_newXS_flags(pTHX_ const char *name, XSUBADDR_t subaddr, - const char *const filename, const char *const proto, - U32 flags) + const char *const filename, const char *const proto, + U32 flags) { PERL_ARGS_ASSERT_NEWXS_FLAGS; return newXS_len_flags( @@ -12047,9 +12400,9 @@ ensure that it knows which of these situations applies. CV * Perl_newXS_len_flags(pTHX_ const char *name, STRLEN len, - XSUBADDR_t subaddr, const char *const filename, - const char *const proto, SV **const_svp, - U32 flags) + XSUBADDR_t subaddr, const char *const filename, + const char *const proto, SV **const_svp, + U32 flags) { CV *cv; bool interleave = FALSE; @@ -12059,10 +12412,10 @@ Perl_newXS_len_flags(pTHX_ const char *name, STRLEN len, { GV * const gv = gv_fetchpvn( - name ? name : PL_curstash ? "__ANON__" : "__ANON__::__ANON__", - name ? len : PL_curstash ? sizeof("__ANON__") - 1: - sizeof("__ANON__::__ANON__") - 1, - GV_ADDMULTI | flags, SVt_PVCV); + name ? name : PL_curstash ? "__ANON__" : "__ANON__::__ANON__", + name ? len : PL_curstash ? sizeof("__ANON__") - 1: + sizeof("__ANON__::__ANON__") - 1, + GV_ADDMULTI | flags, SVt_PVCV); if ((cv = (name ? GvCV(gv) : NULL))) { if (GvCVGEN(gv)) { @@ -12098,8 +12451,8 @@ Perl_newXS_len_flags(pTHX_ const char *name, STRLEN len, gv_method_changed(gv); /* newXS */ } } - assert(cv); - assert(SvREFCNT((SV*)cv) != 0); + assert(cv); + assert(SvREFCNT((SV*)cv) != 0); CvGV_set(cv, gv); if(filename) { @@ -12120,7 +12473,7 @@ Perl_newXS_len_flags(pTHX_ const char *name, STRLEN len, } CvISXSUB_on(cv); CvXSUB(cv) = subaddr; -#ifndef PERL_IMPLICIT_CONTEXT +#ifndef MULTIPLICITY CvHSCXT(cv) = &PL_stack_sp; #else PoisonPADLIST(cv); @@ -12155,10 +12508,10 @@ Perl_newSTUB(pTHX_ GV *gv, bool fake) GvCV_set(gv, cv); GvCVGEN(gv) = 0; if (!fake && GvSTASH(gv) && HvENAME_HEK(GvSTASH(gv))) - gv_method_changed(gv); + gv_method_changed(gv); if (SvFAKE(gv)) { - cvgv = gv_fetchsv((SV *)gv, GV_ADDMULTI, SVt_PVCV); - SvFAKE_off(cvgv); + cvgv = gv_fetchsv((SV *)gv, GV_ADDMULTI, SVt_PVCV); + SvFAKE_off(cvgv); } else cvgv = gv; CvGV_set(cv, cvgv); @@ -12177,31 +12530,31 @@ Perl_newFORM(pTHX_ I32 floor, OP *o, OP *block) OP *start; if (PL_parser && PL_parser->error_count) { - op_free(block); - goto finish; + op_free(block); + goto finish; } gv = o - ? gv_fetchsv(cSVOPo->op_sv, GV_ADD, SVt_PVFM) - : gv_fetchpvs("STDOUT", GV_ADD|GV_NOTQUAL, SVt_PVFM); + ? gv_fetchsv(cSVOPo->op_sv, GV_ADD, SVt_PVFM) + : gv_fetchpvs("STDOUT", GV_ADD|GV_NOTQUAL, SVt_PVFM); GvMULTI_on(gv); if ((cv = GvFORM(gv))) { - if (ckWARN(WARN_REDEFINE)) { - const line_t oldline = CopLINE(PL_curcop); - if (PL_parser && PL_parser->copline != NOLINE) - CopLINE_set(PL_curcop, PL_parser->copline); - if (o) { - Perl_warner(aTHX_ packWARN(WARN_REDEFINE), - "Format %" SVf " redefined", SVfARG(cSVOPo->op_sv)); - } else { - /* diag_listed_as: Format %s redefined */ - Perl_warner(aTHX_ packWARN(WARN_REDEFINE), - "Format STDOUT redefined"); - } - CopLINE_set(PL_curcop, oldline); - } - SvREFCNT_dec(cv); + if (ckWARN(WARN_REDEFINE)) { + const line_t oldline = CopLINE(PL_curcop); + if (PL_parser && PL_parser->copline != NOLINE) + CopLINE_set(PL_curcop, PL_parser->copline); + if (o) { + Perl_warner(aTHX_ packWARN(WARN_REDEFINE), + "Format %" SVf " redefined", SVfARG(cSVOPo->op_sv)); + } else { + /* diag_listed_as: Format %s redefined */ + Perl_warner(aTHX_ packWARN(WARN_REDEFINE), + "Format STDOUT redefined"); + } + CopLINE_set(PL_curcop, oldline); + } + SvREFCNT_dec(cv); } cv = PL_compcv; GvFORM(gv) = (CV *)SvREFCNT_inc_simple_NN(cv); @@ -12209,7 +12562,7 @@ Perl_newFORM(pTHX_ I32 floor, OP *o, OP *block) CvFILE_set_from_cop(cv, PL_curcop); - root = newUNOP(OP_LEAVEWRITE, 0, scalarseq(block)); + root = newUNOP(OP_LEAVEWRITE, 0, voidnonfinal(block)); CvROOT(cv) = root; start = LINKLIST(root); root->op_next = 0; @@ -12219,7 +12572,7 @@ Perl_newFORM(pTHX_ I32 floor, OP *o, OP *block) finish: op_free(o); if (PL_parser) - PL_parser->copline = NOLINE; + PL_parser->copline = NOLINE; LEAVE_SCOPE(floor); PL_compiling.cop_seq = 0; } @@ -12247,20 +12600,19 @@ Perl_newANONATTRSUB(pTHX_ I32 floor, OP *proto, OP *attrs, OP *block) { SV * const cv = MUTABLE_SV(newATTRSUB(floor, 0, proto, attrs, block)); OP * anoncode = - newSVOP(OP_ANONCODE, 0, - cv); + newSVOP(OP_ANONCODE, 0, + cv); if (CvANONCONST(cv)) - anoncode = newUNOP(OP_ANONCONST, 0, - op_convert_list(OP_ENTERSUB, - OPf_STACKED|OPf_WANT_SCALAR, - anoncode)); + anoncode = newUNOP(OP_ANONCONST, 0, + op_convert_list(OP_ENTERSUB, + OPf_STACKED|OPf_WANT_SCALAR, + anoncode)); return newUNOP(OP_REFGEN, 0, anoncode); } OP * Perl_oopsAV(pTHX_ OP *o) { - dVAR; PERL_ARGS_ASSERT_OOPSAV; @@ -12268,17 +12620,17 @@ Perl_oopsAV(pTHX_ OP *o) case OP_PADSV: case OP_PADHV: OpTYPE_set(o, OP_PADAV); - return ref(o, OP_RV2AV); + return ref(o, OP_RV2AV); case OP_RV2SV: case OP_RV2HV: OpTYPE_set(o, OP_RV2AV); - ref(o, OP_RV2AV); - break; + ref(o, OP_RV2AV); + break; default: - Perl_ck_warner_d(aTHX_ packWARN(WARN_INTERNAL), "oops: oopsAV"); - break; + Perl_ck_warner_d(aTHX_ packWARN(WARN_INTERNAL), "oops: oopsAV"); + break; } return o; } @@ -12286,7 +12638,6 @@ Perl_oopsAV(pTHX_ OP *o) OP * Perl_oopsHV(pTHX_ OP *o) { - dVAR; PERL_ARGS_ASSERT_OOPSHV; @@ -12294,19 +12645,19 @@ Perl_oopsHV(pTHX_ OP *o) case OP_PADSV: case OP_PADAV: OpTYPE_set(o, OP_PADHV); - return ref(o, OP_RV2HV); + return ref(o, OP_RV2HV); case OP_RV2SV: case OP_RV2AV: OpTYPE_set(o, OP_RV2HV); /* rv2hv steals the bottom bit for its own uses */ o->op_private &= ~OPpARG1_MASK; - ref(o, OP_RV2HV); - break; + ref(o, OP_RV2HV); + break; default: - Perl_ck_warner_d(aTHX_ packWARN(WARN_INTERNAL), "oops: oopsHV"); - break; + Perl_ck_warner_d(aTHX_ packWARN(WARN_INTERNAL), "oops: oopsHV"); + break; } return o; } @@ -12314,16 +12665,15 @@ Perl_oopsHV(pTHX_ OP *o) OP * Perl_newAVREF(pTHX_ OP *o) { - dVAR; PERL_ARGS_ASSERT_NEWAVREF; if (o->op_type == OP_PADANY) { OpTYPE_set(o, OP_PADAV); - return o; + return o; } else if ((o->op_type == OP_RV2AV || o->op_type == OP_PADAV)) { - Perl_croak(aTHX_ "Can't use an array as a reference"); + Perl_croak(aTHX_ "Can't use an array as a reference"); } return newUNOP(OP_RV2AV, 0, scalar(o)); } @@ -12332,23 +12682,22 @@ OP * Perl_newGVREF(pTHX_ I32 type, OP *o) { if (type == OP_MAPSTART || type == OP_GREPSTART || type == OP_SORT) - return newUNOP(OP_NULL, 0, o); + return newUNOP(OP_NULL, 0, o); return ref(newUNOP(OP_RV2GV, OPf_REF, o), type); } OP * Perl_newHVREF(pTHX_ OP *o) { - dVAR; PERL_ARGS_ASSERT_NEWHVREF; if (o->op_type == OP_PADANY) { OpTYPE_set(o, OP_PADHV); - return o; + return o; } else if ((o->op_type == OP_RV2HV || o->op_type == OP_PADHV)) { - Perl_croak(aTHX_ "Can't use a hash as a reference"); + Perl_croak(aTHX_ "Can't use a hash as a reference"); } return newUNOP(OP_RV2HV, 0, scalar(o)); } @@ -12357,7 +12706,6 @@ OP * Perl_newCVREF(pTHX_ I32 flags, OP *o) { if (o->op_type == OP_PADANY) { - dVAR; OpTYPE_set(o, OP_PADCV); } return newUNOP(OP_RV2CV, flags, scalar(o)); @@ -12366,14 +12714,13 @@ Perl_newCVREF(pTHX_ I32 flags, OP *o) OP * Perl_newSVREF(pTHX_ OP *o) { - dVAR; PERL_ARGS_ASSERT_NEWSVREF; if (o->op_type == OP_PADANY) { OpTYPE_set(o, OP_PADSV); scalar(o); - return o; + return o; } return newUNOP(OP_RV2SV, 0, scalar(o)); } @@ -12396,39 +12743,39 @@ S_io_hints(pTHX_ OP *o) { #if O_BINARY != 0 || O_TEXT != 0 HV * const table = - PL_hints & HINT_LOCALIZE_HH ? GvHV(PL_hintgv) : NULL;; + PL_hints & HINT_LOCALIZE_HH ? GvHV(PL_hintgv) : NULL;; if (table) { - SV **svp = hv_fetchs(table, "open_IN", FALSE); - if (svp && *svp) { - STRLEN len = 0; - const char *d = SvPV_const(*svp, len); - const I32 mode = mode_from_discipline(d, len); + SV **svp = hv_fetchs(table, "open_IN", FALSE); + if (svp && *svp) { + STRLEN len = 0; + const char *d = SvPV_const(*svp, len); + const I32 mode = mode_from_discipline(d, len); /* bit-and:ing with zero O_BINARY or O_TEXT would be useless. */ # if O_BINARY != 0 - if (mode & O_BINARY) - o->op_private |= OPpOPEN_IN_RAW; + if (mode & O_BINARY) + o->op_private |= OPpOPEN_IN_RAW; # endif # if O_TEXT != 0 - if (mode & O_TEXT) - o->op_private |= OPpOPEN_IN_CRLF; + if (mode & O_TEXT) + o->op_private |= OPpOPEN_IN_CRLF; # endif - } + } - svp = hv_fetchs(table, "open_OUT", FALSE); - if (svp && *svp) { - STRLEN len = 0; - const char *d = SvPV_const(*svp, len); - const I32 mode = mode_from_discipline(d, len); + svp = hv_fetchs(table, "open_OUT", FALSE); + if (svp && *svp) { + STRLEN len = 0; + const char *d = SvPV_const(*svp, len); + const I32 mode = mode_from_discipline(d, len); /* bit-and:ing with zero O_BINARY or O_TEXT would be useless. */ # if O_BINARY != 0 - if (mode & O_BINARY) - o->op_private |= OPpOPEN_OUT_RAW; + if (mode & O_BINARY) + o->op_private |= OPpOPEN_OUT_RAW; # endif # if O_TEXT != 0 - if (mode & O_TEXT) - o->op_private |= OPpOPEN_OUT_CRLF; + if (mode & O_TEXT) + o->op_private |= OPpOPEN_OUT_CRLF; # endif - } + } } #else PERL_UNUSED_CONTEXT; @@ -12450,13 +12797,13 @@ Perl_ck_backtick(pTHX_ OP *o) { /* detach rest of siblings from o and its first child */ op_sibling_splice(o, cUNOPo->op_first, -1, NULL); - newop = S_new_entersubop(aTHX_ gv, sibl); + newop = S_new_entersubop(aTHX_ gv, sibl); } else if (!(o->op_flags & OPf_KIDS)) - newop = newUNOP(OP_BACKTICK, 0, newDEFSVOP()); + newop = newUNOP(OP_BACKTICK, 0, newDEFSVOP()); if (newop) { - op_free(o); - return newop; + op_free(o); + return newop; } S_io_hints(aTHX_ o); return o; @@ -12467,28 +12814,29 @@ Perl_ck_bitop(pTHX_ OP *o) { PERL_ARGS_ASSERT_CK_BITOP; - o->op_private = (U8)(PL_hints & HINT_INTEGER); + /* get rid of arg count and indicate if in the scope of 'use integer' */ + o->op_private = (PL_hints & HINT_INTEGER) ? OPpUSEINT : 0; if (!(o->op_flags & OPf_STACKED) /* Not an assignment */ - && OP_IS_INFIX_BIT(o->op_type)) + && OP_IS_INFIX_BIT(o->op_type)) { - const OP * const left = cBINOPo->op_first; - const OP * const right = OpSIBLING(left); - if ((OP_IS_NUMCOMPARE(left->op_type) && - (left->op_flags & OPf_PARENS) == 0) || - (OP_IS_NUMCOMPARE(right->op_type) && - (right->op_flags & OPf_PARENS) == 0)) - Perl_ck_warner(aTHX_ packWARN(WARN_PRECEDENCE), - "Possible precedence problem on bitwise %s operator", - o->op_type == OP_BIT_OR - ||o->op_type == OP_NBIT_OR ? "|" - : o->op_type == OP_BIT_AND - ||o->op_type == OP_NBIT_AND ? "&" - : o->op_type == OP_BIT_XOR - ||o->op_type == OP_NBIT_XOR ? "^" - : o->op_type == OP_SBIT_OR ? "|." - : o->op_type == OP_SBIT_AND ? "&." : "^." - ); + const OP * const left = cBINOPo->op_first; + const OP * const right = OpSIBLING(left); + if ((OP_IS_NUMCOMPARE(left->op_type) && + (left->op_flags & OPf_PARENS) == 0) || + (OP_IS_NUMCOMPARE(right->op_type) && + (right->op_flags & OPf_PARENS) == 0)) + Perl_ck_warner(aTHX_ packWARN(WARN_PRECEDENCE), + "Possible precedence problem on bitwise %s operator", + o->op_type == OP_BIT_OR + ||o->op_type == OP_NBIT_OR ? "|" + : o->op_type == OP_BIT_AND + ||o->op_type == OP_NBIT_AND ? "&" + : o->op_type == OP_BIT_XOR + ||o->op_type == OP_NBIT_XOR ? "^" + : o->op_type == OP_SBIT_OR ? "|." + : o->op_type == OP_SBIT_AND ? "&." : "^." + ); } return o; } @@ -12499,9 +12847,9 @@ is_dollar_bracket(pTHX_ const OP * const o) const OP *kid; PERL_UNUSED_CONTEXT; return o->op_type == OP_RV2SV && o->op_flags & OPf_KIDS - && (kid = cUNOPx(o)->op_first) - && kid->op_type == OP_GV - && strEQ(GvNAME(cGVOPx_gv(kid)), "["); + && (kid = cUNOPx(o)->op_first) + && kid->op_type == OP_GV + && strEQ(GvNAME(cGVOPx_gv(kid)), "["); } /* for lt, gt, le, ge, eq, ne and their i_ variants */ @@ -12525,19 +12873,19 @@ Perl_ck_cmp(pTHX_ OP *o) || o->op_type == OP_I_NE); if (!is_eq && ckWARN(WARN_SYNTAX)) { - const OP *kid = cUNOPo->op_first; - if (kid && + const OP *kid = cUNOPo->op_first; + if (kid && ( - ( is_dollar_bracket(aTHX_ kid) + ( is_dollar_bracket(aTHX_ kid) && OpSIBLING(kid) && OpSIBLING(kid)->op_type == OP_CONST - ) - || ( kid->op_type == OP_CONST - && (kid = OpSIBLING(kid)) && is_dollar_bracket(aTHX_ kid) ) - ) + || ( kid->op_type == OP_CONST + && (kid = OpSIBLING(kid)) && is_dollar_bracket(aTHX_ kid) + ) + ) ) - Perl_warner(aTHX_ packWARN(WARN_SYNTAX), - "$[ used in %s (did you mean $] ?)", OP_DESC(o)); + Perl_warner(aTHX_ packWARN(WARN_SYNTAX), + "$[ used in %s (did you mean $] ?)", OP_DESC(o)); } /* convert (index(...) == -1) and variations into @@ -12630,7 +12978,7 @@ Perl_ck_concat(pTHX_ OP *o) /* reuse the padtmp returned by the concat child */ if (kid->op_type == OP_CONCAT && !(kid->op_private & OPpTARGET_MY) && - !(kUNOP->op_first->op_flags & OPf_MOD)) + !(kUNOP->op_first->op_flags & OPf_MOD)) { o->op_flags |= OPf_STACKED; o->op_private |= OPpCONCAT_NESTED; @@ -12641,35 +12989,34 @@ Perl_ck_concat(pTHX_ OP *o) OP * Perl_ck_spair(pTHX_ OP *o) { - dVAR; PERL_ARGS_ASSERT_CK_SPAIR; if (o->op_flags & OPf_KIDS) { - OP* newop; - OP* kid; + OP* newop; + OP* kid; OP* kidkid; - const OPCODE type = o->op_type; - o = modkids(ck_fun(o), type); - kid = cUNOPo->op_first; - kidkid = kUNOP->op_first; - newop = OpSIBLING(kidkid); - if (newop) { - const OPCODE type = newop->op_type; - if (OpHAS_SIBLING(newop)) - return o; - if (o->op_type == OP_REFGEN - && ( type == OP_RV2CV - || ( !(newop->op_flags & OPf_PARENS) - && ( type == OP_RV2AV || type == OP_PADAV - || type == OP_RV2HV || type == OP_PADHV)))) - NOOP; /* OK (allow srefgen for \@a and \%h) */ - else if (OP_GIMME(newop,0) != G_SCALAR) - return o; - } + const OPCODE type = o->op_type; + o = modkids(ck_fun(o), type); + kid = cUNOPo->op_first; + kidkid = kUNOP->op_first; + newop = OpSIBLING(kidkid); + if (newop) { + const OPCODE type = newop->op_type; + if (OpHAS_SIBLING(newop)) + return o; + if (o->op_type == OP_REFGEN + && ( type == OP_RV2CV + || ( !(newop->op_flags & OPf_PARENS) + && ( type == OP_RV2AV || type == OP_PADAV + || type == OP_RV2HV || type == OP_PADHV)))) + NOOP; /* OK (allow srefgen for \@a and \%h) */ + else if (OP_GIMME(newop,0) != G_SCALAR) + return o; + } /* excise first sibling */ op_sibling_splice(kid, NULL, 1, NULL); - op_free(kidkid); + op_free(kidkid); } /* transforms OP_REFGEN into OP_SREFGEN, OP_CHOP into OP_SCHOP, * and OP_CHOMP into OP_SCHOMP */ @@ -12685,32 +13032,32 @@ Perl_ck_delete(pTHX_ OP *o) o = ck_fun(o); o->op_private = 0; if (o->op_flags & OPf_KIDS) { - OP * const kid = cUNOPo->op_first; - switch (kid->op_type) { - case OP_ASLICE: - o->op_flags |= OPf_SPECIAL; - /* FALLTHROUGH */ - case OP_HSLICE: - o->op_private |= OPpSLICE; - break; - case OP_AELEM: - o->op_flags |= OPf_SPECIAL; - /* FALLTHROUGH */ - case OP_HELEM: - break; - case OP_KVASLICE: + OP * const kid = cUNOPo->op_first; + switch (kid->op_type) { + case OP_ASLICE: + o->op_flags |= OPf_SPECIAL; + /* FALLTHROUGH */ + case OP_HSLICE: + o->op_private |= OPpSLICE; + break; + case OP_AELEM: o->op_flags |= OPf_SPECIAL; /* FALLTHROUGH */ - case OP_KVHSLICE: + case OP_HELEM: + break; + case OP_KVASLICE: + o->op_flags |= OPf_SPECIAL; + /* FALLTHROUGH */ + case OP_KVHSLICE: o->op_private |= OPpKVSLICE; break; - default: - Perl_croak(aTHX_ "delete argument is not a HASH or ARRAY " - "element or slice"); - } - if (kid->op_private & OPpLVAL_INTRO) - o->op_private |= OPpLVAL_INTRO; - op_null(kid); + default: + Perl_croak(aTHX_ "delete argument is not a HASH or ARRAY " + "element or slice"); + } + if (kid->op_private & OPpLVAL_INTRO) + o->op_private |= OPpLVAL_INTRO; + op_null(kid); } return o; } @@ -12721,17 +13068,17 @@ Perl_ck_eof(pTHX_ OP *o) PERL_ARGS_ASSERT_CK_EOF; if (o->op_flags & OPf_KIDS) { - OP *kid; - if (cLISTOPo->op_first->op_type == OP_STUB) { - OP * const newop - = newUNOP(o->op_type, OPf_SPECIAL, newGVOP(OP_GV, 0, PL_argvgv)); - op_free(o); - o = newop; - } - o = ck_fun(o); - kid = cLISTOPo->op_first; - if (kid->op_type == OP_RV2GV) - kid->op_private |= OPpALLOW_FAKE; + OP *kid; + if (cLISTOPo->op_first->op_type == OP_STUB) { + OP * const newop + = newUNOP(o->op_type, OPf_SPECIAL, newGVOP(OP_GV, 0, PL_argvgv)); + op_free(o); + o = newop; + } + o = ck_fun(o); + kid = cLISTOPo->op_first; + if (kid->op_type == OP_RV2GV) + kid->op_private |= OPpALLOW_FAKE; } return o; } @@ -12740,63 +13087,125 @@ Perl_ck_eof(pTHX_ OP *o) OP * Perl_ck_eval(pTHX_ OP *o) { - dVAR; PERL_ARGS_ASSERT_CK_EVAL; PL_hints |= HINT_BLOCK_SCOPE; if (o->op_flags & OPf_KIDS) { - SVOP * const kid = (SVOP*)cUNOPo->op_first; - assert(kid); + SVOP * const kid = (SVOP*)cUNOPo->op_first; + assert(kid); - if (o->op_type == OP_ENTERTRY) { - LOGOP *enter; + if (o->op_type == OP_ENTERTRY) { + LOGOP *enter; /* cut whole sibling chain free from o */ op_sibling_splice(o, NULL, -1, NULL); - op_free(o); + op_free(o); enter = alloc_LOGOP(OP_ENTERTRY, NULL, NULL); - /* establish postfix order */ - enter->op_next = (OP*)enter; + /* establish postfix order */ + enter->op_next = (OP*)enter; - o = op_prepend_elem(OP_LINESEQ, (OP*)enter, (OP*)kid); + o = op_prepend_elem(OP_LINESEQ, (OP*)enter, (OP*)kid); OpTYPE_set(o, OP_LEAVETRY); - enter->op_other = o; - return o; - } - else { - scalar((OP*)kid); - S_set_haseval(aTHX); - } + enter->op_other = o; + return o; + } + else { + scalar((OP*)kid); + S_set_haseval(aTHX); + } } else { - const U8 priv = o->op_private; - op_free(o); + const U8 priv = o->op_private; + op_free(o); /* the newUNOP will recursively call ck_eval(), which will handle * all the stuff at the end of this function, like adding * OP_HINTSEVAL */ - return newUNOP(OP_ENTEREVAL, priv <<8, newDEFSVOP()); + return newUNOP(OP_ENTEREVAL, priv <<8, newDEFSVOP()); } o->op_targ = (PADOFFSET)PL_hints; if (o->op_private & OPpEVAL_BYTES) o->op_targ &= ~HINT_UTF8; if ((PL_hints & HINT_LOCALIZE_HH) != 0 && !(o->op_private & OPpEVAL_COPHH) && GvHV(PL_hintgv)) { - /* Store a copy of %^H that pp_entereval can pick up. */ + /* Store a copy of %^H that pp_entereval can pick up. */ HV *hh = hv_copy_hints_hv(GvHV(PL_hintgv)); - OP *hhop; + OP *hhop; STOREFEATUREBITSHH(hh); hhop = newSVOP(OP_HINTSEVAL, 0, MUTABLE_SV(hh)); /* append hhop to only child */ op_sibling_splice(o, cUNOPo->op_first, 0, hhop); - o->op_private |= OPpEVAL_HAS_HH; + o->op_private |= OPpEVAL_HAS_HH; } if (!(o->op_private & OPpEVAL_BYTES) - && FEATURE_UNIEVAL_IS_ENABLED) - o->op_private |= OPpEVAL_UNICODE; + && FEATURE_UNIEVAL_IS_ENABLED) + o->op_private |= OPpEVAL_UNICODE; + return o; +} + +OP * +Perl_ck_trycatch(pTHX_ OP *o) +{ + LOGOP *enter; + OP *to_free = NULL; + OP *trykid, *catchkid; + OP *catchroot, *catchstart; + + PERL_ARGS_ASSERT_CK_TRYCATCH; + + trykid = cUNOPo->op_first; + if(trykid->op_type == OP_NULL || trykid->op_type == OP_PUSHMARK) { + to_free = trykid; + trykid = OpSIBLING(trykid); + } + catchkid = OpSIBLING(trykid); + + assert(trykid->op_type == OP_POPTRY); + assert(catchkid->op_type == OP_CATCH); + + /* cut whole sibling chain free from o */ + op_sibling_splice(o, NULL, -1, NULL); + if(to_free) + op_free(to_free); + op_free(o); + + enter = alloc_LOGOP(OP_ENTERTRYCATCH, NULL, NULL); + + /* establish postfix order */ + enter->op_next = (OP*)enter; + + o = op_prepend_elem(OP_LINESEQ, (OP*)enter, trykid); + op_append_elem(OP_LINESEQ, (OP*)o, catchkid); + + OpTYPE_set(o, OP_LEAVETRYCATCH); + + /* The returned optree is actually threaded up slightly nonobviously in + * terms of its ->op_next pointers. + * + * This way, if the tryblock dies, its retop points at the OP_CATCH, but + * if it does not then its leavetry skips over that and continues + * execution past it. + */ + + /* First, link up the actual body of the catch block */ + catchroot = OpSIBLING(cUNOPx(catchkid)->op_first); + catchstart = LINKLIST(catchroot); + cLOGOPx(catchkid)->op_other = catchstart; + + o->op_next = LINKLIST(o); + + /* die within try block should jump to the catch */ + enter->op_other = catchkid; + + /* after try block that doesn't die, just skip straight to leavetrycatch */ + trykid->op_next = o; + + /* after catch block, skip back up to the leavetrycatch */ + catchroot->op_next = o; + return o; } @@ -12807,13 +13216,13 @@ Perl_ck_exec(pTHX_ OP *o) if (o->op_flags & OPf_STACKED) { OP *kid; - o = ck_fun(o); - kid = OpSIBLING(cUNOPo->op_first); - if (kid->op_type == OP_RV2GV) - op_null(kid); + o = ck_fun(o); + kid = OpSIBLING(cUNOPo->op_first); + if (kid->op_type == OP_RV2GV) + op_null(kid); } else - o = listkids(o); + o = listkids(o); return o; } @@ -12824,21 +13233,21 @@ Perl_ck_exists(pTHX_ OP *o) o = ck_fun(o); if (o->op_flags & OPf_KIDS) { - OP * const kid = cUNOPo->op_first; - if (kid->op_type == OP_ENTERSUB) { - (void) ref(kid, o->op_type); - if (kid->op_type != OP_RV2CV - && !(PL_parser && PL_parser->error_count)) - Perl_croak(aTHX_ - "exists argument is not a subroutine name"); - o->op_private |= OPpEXISTS_SUB; - } - else if (kid->op_type == OP_AELEM) - o->op_flags |= OPf_SPECIAL; - else if (kid->op_type != OP_HELEM) - Perl_croak(aTHX_ "exists argument is not a HASH or ARRAY " - "element or a subroutine"); - op_null(kid); + OP * const kid = cUNOPo->op_first; + if (kid->op_type == OP_ENTERSUB) { + (void) ref(kid, o->op_type); + if (kid->op_type != OP_RV2CV + && !(PL_parser && PL_parser->error_count)) + Perl_croak(aTHX_ + "exists argument is not a subroutine name"); + o->op_private |= OPpEXISTS_SUB; + } + else if (kid->op_type == OP_AELEM) + o->op_flags |= OPf_SPECIAL; + else if (kid->op_type != OP_HELEM) + Perl_croak(aTHX_ "exists argument is not a HASH or ARRAY " + "element or a subroutine"); + op_null(kid); } return o; } @@ -12846,7 +13255,6 @@ Perl_ck_exists(pTHX_ OP *o) OP * Perl_ck_rvconst(pTHX_ OP *o) { - dVAR; SVOP * const kid = (SVOP*)cUNOPo->op_first; PERL_ARGS_ASSERT_CK_RVCONST; @@ -12858,82 +13266,82 @@ Perl_ck_rvconst(pTHX_ OP *o) o->op_private |= (PL_hints & HINT_STRICT_REFS); if (kid->op_type == OP_CONST) { - int iscv; - GV *gv; - SV * const kidsv = kid->op_sv; - - /* Is it a constant from cv_const_sv()? */ - if ((SvROK(kidsv) || isGV_with_GP(kidsv)) && SvREADONLY(kidsv)) { - return o; - } - if (SvTYPE(kidsv) == SVt_PVAV) return o; - if ((o->op_private & HINT_STRICT_REFS) && (kid->op_private & OPpCONST_BARE)) { - const char *badthing; - switch (o->op_type) { - case OP_RV2SV: - badthing = "a SCALAR"; - break; - case OP_RV2AV: - badthing = "an ARRAY"; - break; - case OP_RV2HV: - badthing = "a HASH"; - break; - default: - badthing = NULL; - break; - } - if (badthing) - Perl_croak(aTHX_ - "Can't use bareword (\"%" SVf "\") as %s ref while \"strict refs\" in use", - SVfARG(kidsv), badthing); - } - /* - * This is a little tricky. We only want to add the symbol if we - * didn't add it in the lexer. Otherwise we get duplicate strict - * warnings. But if we didn't add it in the lexer, we must at - * least pretend like we wanted to add it even if it existed before, - * or we get possible typo warnings. OPpCONST_ENTERED says - * whether the lexer already added THIS instance of this symbol. - */ - iscv = o->op_type == OP_RV2CV ? GV_NOEXPAND|GV_ADDMULTI : 0; - gv = gv_fetchsv(kidsv, - o->op_type == OP_RV2CV - && o->op_private & OPpMAY_RETURN_CONSTANT - ? GV_NOEXPAND - : iscv | !(kid->op_private & OPpCONST_ENTERED), - iscv - ? SVt_PVCV - : o->op_type == OP_RV2SV - ? SVt_PV - : o->op_type == OP_RV2AV - ? SVt_PVAV - : o->op_type == OP_RV2HV - ? SVt_PVHV - : SVt_PVGV); - if (gv) { - if (!isGV(gv)) { - assert(iscv); - assert(SvROK(gv)); - if (!(o->op_private & OPpMAY_RETURN_CONSTANT) - && SvTYPE(SvRV(gv)) != SVt_PVCV) - gv_fetchsv(kidsv, GV_ADDMULTI, SVt_PVCV); - } + int iscv; + GV *gv; + SV * const kidsv = kid->op_sv; + + /* Is it a constant from cv_const_sv()? */ + if ((SvROK(kidsv) || isGV_with_GP(kidsv)) && SvREADONLY(kidsv)) { + return o; + } + if (SvTYPE(kidsv) == SVt_PVAV) return o; + if ((o->op_private & HINT_STRICT_REFS) && (kid->op_private & OPpCONST_BARE)) { + const char *badthing; + switch (o->op_type) { + case OP_RV2SV: + badthing = "a SCALAR"; + break; + case OP_RV2AV: + badthing = "an ARRAY"; + break; + case OP_RV2HV: + badthing = "a HASH"; + break; + default: + badthing = NULL; + break; + } + if (badthing) + Perl_croak(aTHX_ + "Can't use bareword (\"%" SVf "\") as %s ref while \"strict refs\" in use", + SVfARG(kidsv), badthing); + } + /* + * This is a little tricky. We only want to add the symbol if we + * didn't add it in the lexer. Otherwise we get duplicate strict + * warnings. But if we didn't add it in the lexer, we must at + * least pretend like we wanted to add it even if it existed before, + * or we get possible typo warnings. OPpCONST_ENTERED says + * whether the lexer already added THIS instance of this symbol. + */ + iscv = o->op_type == OP_RV2CV ? GV_NOEXPAND|GV_ADDMULTI : 0; + gv = gv_fetchsv(kidsv, + o->op_type == OP_RV2CV + && o->op_private & OPpMAY_RETURN_CONSTANT + ? GV_NOEXPAND + : iscv | !(kid->op_private & OPpCONST_ENTERED), + iscv + ? SVt_PVCV + : o->op_type == OP_RV2SV + ? SVt_PV + : o->op_type == OP_RV2AV + ? SVt_PVAV + : o->op_type == OP_RV2HV + ? SVt_PVHV + : SVt_PVGV); + if (gv) { + if (!isGV(gv)) { + assert(iscv); + assert(SvROK(gv)); + if (!(o->op_private & OPpMAY_RETURN_CONSTANT) + && SvTYPE(SvRV(gv)) != SVt_PVCV) + gv_fetchsv(kidsv, GV_ADDMULTI, SVt_PVCV); + } OpTYPE_set(kid, OP_GV); - SvREFCNT_dec(kid->op_sv); + SvREFCNT_dec(kid->op_sv); #ifdef USE_ITHREADS - /* XXX hack: dependence on sizeof(PADOP) <= sizeof(SVOP) */ - STATIC_ASSERT_STMT(sizeof(PADOP) <= sizeof(SVOP)); - kPADOP->op_padix = pad_alloc(OP_GV, SVf_READONLY); - SvREFCNT_dec(PAD_SVl(kPADOP->op_padix)); - PAD_SETSV(kPADOP->op_padix, MUTABLE_SV(SvREFCNT_inc_simple_NN(gv))); + /* XXX hack: dependence on sizeof(PADOP) <= sizeof(SVOP) */ + STATIC_ASSERT_STMT(sizeof(PADOP) <= sizeof(SVOP)); + kPADOP->op_padix = pad_alloc(OP_GV, SVf_READONLY); + SvREFCNT_dec(PAD_SVl(kPADOP->op_padix)); + PAD_SETSV(kPADOP->op_padix, MUTABLE_SV(SvREFCNT_inc_simple_NN(gv))); #else - kid->op_sv = SvREFCNT_inc_simple_NN(gv); + kid->op_sv = SvREFCNT_inc_simple_NN(gv); #endif - kid->op_private = 0; - /* FAKE globs in the symbol table cause weird bugs (#77810) */ - SvFAKE_off(gv); - } + kid->op_private = 0; + /* FAKE globs in the symbol table cause weird bugs (#77810) */ + SvFAKE_off(gv); + } } return o; } @@ -12941,25 +13349,24 @@ Perl_ck_rvconst(pTHX_ OP *o) OP * Perl_ck_ftst(pTHX_ OP *o) { - dVAR; const I32 type = o->op_type; PERL_ARGS_ASSERT_CK_FTST; if (o->op_flags & OPf_REF) { - NOOP; + NOOP; } else if (o->op_flags & OPf_KIDS && cUNOPo->op_first->op_type != OP_STUB) { - SVOP * const kid = (SVOP*)cUNOPo->op_first; - const OPCODE kidtype = kid->op_type; - - if (kidtype == OP_CONST && (kid->op_private & OPpCONST_BARE) - && !kid->op_folded) { - OP * const newop = newGVOP(type, OPf_REF, - gv_fetchsv(kid->op_sv, GV_ADD, SVt_PVIO)); - op_free(o); - return newop; - } + SVOP * const kid = (SVOP*)cUNOPo->op_first; + const OPCODE kidtype = kid->op_type; + + if (kidtype == OP_CONST && (kid->op_private & OPpCONST_BARE) + && !kid->op_folded) { + OP * const newop = newGVOP(type, OPf_REF, + gv_fetchsv(kid->op_sv, GV_ADD, SVt_PVIO)); + op_free(o); + return newop; + } if ((kidtype == OP_RV2AV || kidtype == OP_PADAV) && ckWARN(WARN_SYNTAX)) { SV *name = S_op_varname_subscript(aTHX_ (OP*)kid, 2); @@ -12973,27 +13380,27 @@ Perl_ck_ftst(pTHX_ OP *o) Perl_warner(aTHX_ packWARN(WARN_SYNTAX), "%s", array_passed_to_stat); } } - scalar((OP *) kid); - if ((PL_hints & HINT_FILETEST_ACCESS) && OP_IS_FILETEST_ACCESS(o->op_type)) - o->op_private |= OPpFT_ACCESS; - if (OP_IS_FILETEST(type) + scalar((OP *) kid); + if ((PL_hints & HINT_FILETEST_ACCESS) && OP_IS_FILETEST_ACCESS(o->op_type)) + o->op_private |= OPpFT_ACCESS; + if (OP_IS_FILETEST(type) && OP_IS_FILETEST(kidtype) ) { - o->op_private |= OPpFT_STACKED; - kid->op_private |= OPpFT_STACKING; - if (kidtype == OP_FTTTY && ( - !(kid->op_private & OPpFT_STACKED) - || kid->op_private & OPpFT_AFTER_t - )) - o->op_private |= OPpFT_AFTER_t; - } + o->op_private |= OPpFT_STACKED; + kid->op_private |= OPpFT_STACKING; + if (kidtype == OP_FTTTY && ( + !(kid->op_private & OPpFT_STACKED) + || kid->op_private & OPpFT_AFTER_t + )) + o->op_private |= OPpFT_AFTER_t; + } } else { - op_free(o); - if (type == OP_FTTTY) - o = newGVOP(type, OPf_REF, PL_stdingv); - else - o = newUNOP(type, 0, newDEFSVOP()); + op_free(o); + if (type == OP_FTTTY) + o = newGVOP(type, OPf_REF, PL_stdingv); + else + o = newUNOP(type, 0, newDEFSVOP()); } return o; } @@ -13007,252 +13414,257 @@ Perl_ck_fun(pTHX_ OP *o) PERL_ARGS_ASSERT_CK_FUN; if (o->op_flags & OPf_STACKED) { - if ((oa & OA_OPTIONAL) && (oa >> 4) && !((oa >> 4) & OA_OPTIONAL)) - oa &= ~OA_OPTIONAL; - else - return no_fh_allowed(o); + if ((oa & OA_OPTIONAL) && (oa >> 4) && !((oa >> 4) & OA_OPTIONAL)) + oa &= ~OA_OPTIONAL; + else + return no_fh_allowed(o); } if (o->op_flags & OPf_KIDS) { OP *prev_kid = NULL; OP *kid = cLISTOPo->op_first; I32 numargs = 0; - bool seen_optional = FALSE; - - if (kid->op_type == OP_PUSHMARK || - (kid->op_type == OP_NULL && kid->op_targ == OP_PUSHMARK)) - { - prev_kid = kid; - kid = OpSIBLING(kid); - } - if (kid && kid->op_type == OP_COREARGS) { - bool optional = FALSE; - while (oa) { - numargs++; - if (oa & OA_OPTIONAL) optional = TRUE; - oa = oa >> 4; - } - if (optional) o->op_private |= numargs; - return o; - } - - while (oa) { - if (oa & OA_OPTIONAL || (oa & 7) == OA_LIST) { - if (!kid && !seen_optional && PL_opargs[type] & OA_DEFGV) { - kid = newDEFSVOP(); + bool seen_optional = FALSE; + + if (kid->op_type == OP_PUSHMARK || + (kid->op_type == OP_NULL && kid->op_targ == OP_PUSHMARK)) + { + prev_kid = kid; + kid = OpSIBLING(kid); + } + if (kid && kid->op_type == OP_COREARGS) { + bool optional = FALSE; + while (oa) { + numargs++; + if (oa & OA_OPTIONAL) optional = TRUE; + oa = oa >> 4; + } + if (optional) o->op_private |= numargs; + return o; + } + + while (oa) { + if (oa & OA_OPTIONAL || (oa & 7) == OA_LIST) { + if (!kid && !seen_optional && PL_opargs[type] & OA_DEFGV) { + kid = newDEFSVOP(); /* append kid to chain */ op_sibling_splice(o, prev_kid, 0, kid); } - seen_optional = TRUE; - } - if (!kid) break; - - numargs++; - switch (oa & 7) { - case OA_SCALAR: - /* list seen where single (scalar) arg expected? */ - if (numargs == 1 && !(oa >> 4) - && kid->op_type == OP_LIST && type != OP_SCALAR) - { - return too_many_arguments_pv(o,PL_op_desc[type], 0); - } - if (type != OP_DELETE) scalar(kid); - break; - case OA_LIST: - if (oa < 16) { - kid = 0; - continue; - } - else - list(kid); - break; - case OA_AVREF: - if ((type == OP_PUSH || type == OP_UNSHIFT) - && !OpHAS_SIBLING(kid)) - Perl_ck_warner(aTHX_ packWARN(WARN_SYNTAX), - "Useless use of %s with no values", - PL_op_desc[type]); - - if (kid->op_type == OP_CONST - && ( !SvROK(cSVOPx_sv(kid)) - || SvTYPE(SvRV(cSVOPx_sv(kid))) != SVt_PVAV ) - ) - bad_type_pv(numargs, "array", o, kid); + seen_optional = TRUE; + } + if (!kid) break; + + numargs++; + switch (oa & 7) { + case OA_SCALAR: + /* list seen where single (scalar) arg expected? */ + if (numargs == 1 && !(oa >> 4) + && kid->op_type == OP_LIST && type != OP_SCALAR) + { + return too_many_arguments_pv(o,PL_op_desc[type], 0); + } + if (type != OP_DELETE) scalar(kid); + break; + case OA_LIST: + if (oa < 16) { + kid = 0; + continue; + } + else + list(kid); + break; + case OA_AVREF: + if ((type == OP_PUSH || type == OP_UNSHIFT) + && !OpHAS_SIBLING(kid)) + Perl_ck_warner(aTHX_ packWARN(WARN_SYNTAX), + "Useless use of %s with no values", + PL_op_desc[type]); + + if (kid->op_type == OP_CONST + && ( !SvROK(cSVOPx_sv(kid)) + || SvTYPE(SvRV(cSVOPx_sv(kid))) != SVt_PVAV ) + ) + bad_type_pv(numargs, "array", o, kid); else if (kid->op_type == OP_RV2HV || kid->op_type == OP_PADHV || kid->op_type == OP_RV2GV) { bad_type_pv(1, "array", o, kid); } - else if (kid->op_type != OP_RV2AV && kid->op_type != OP_PADAV) { + else if (kid->op_type != OP_RV2AV && kid->op_type != OP_PADAV) { yyerror_pv(Perl_form(aTHX_ "Experimental %s on scalar is now forbidden", PL_op_desc[type]), 0); - } + } else { op_lvalue(kid, type); } - break; - case OA_HVREF: - if (kid->op_type != OP_RV2HV && kid->op_type != OP_PADHV) - bad_type_pv(numargs, "hash", o, kid); - op_lvalue(kid, type); - break; - case OA_CVREF: - { + break; + case OA_HVREF: + if (kid->op_type != OP_RV2HV && kid->op_type != OP_PADHV) + bad_type_pv(numargs, "hash", o, kid); + op_lvalue(kid, type); + break; + case OA_CVREF: + { /* replace kid with newop in chain */ - OP * const newop = + OP * const newop = S_op_sibling_newUNOP(aTHX_ o, prev_kid, OP_NULL, 0); - newop->op_next = newop; - kid = newop; - } - break; - case OA_FILEREF: - if (kid->op_type != OP_GV && kid->op_type != OP_RV2GV) { - if (kid->op_type == OP_CONST && - (kid->op_private & OPpCONST_BARE)) - { - OP * const newop = newGVOP(OP_GV, 0, - gv_fetchsv(((SVOP*)kid)->op_sv, GV_ADD, SVt_PVIO)); + newop->op_next = newop; + kid = newop; + } + break; + case OA_FILEREF: + if (kid->op_type != OP_GV && kid->op_type != OP_RV2GV) { + if (kid->op_type == OP_CONST && + (kid->op_private & OPpCONST_BARE)) + { + OP * const newop = newGVOP(OP_GV, 0, + gv_fetchsv(((SVOP*)kid)->op_sv, GV_ADD, SVt_PVIO)); + /* a first argument is handled by toke.c, ideally we'd + just check here but several ops don't use ck_fun() */ + if (!FEATURE_BAREWORD_FILEHANDLES_IS_ENABLED && numargs > 1) { + no_bareword_filehandle(SvPVX(cSVOPx_sv((SVOP*)kid))); + } /* replace kid with newop in chain */ op_sibling_splice(o, prev_kid, 1, newop); - op_free(kid); - kid = newop; - } - else if (kid->op_type == OP_READLINE) { - /* neophyte patrol: open(), close() etc. */ - bad_type_pv(numargs, "HANDLE", o, kid); - } - else { - I32 flags = OPf_SPECIAL; - I32 priv = 0; - PADOFFSET targ = 0; - - /* is this op a FH constructor? */ - if (is_handle_constructor(o,numargs)) { + op_free(kid); + kid = newop; + } + else if (kid->op_type == OP_READLINE) { + /* neophyte patrol: open(), close() etc. */ + bad_type_pv(numargs, "HANDLE", o, kid); + } + else { + I32 flags = OPf_SPECIAL; + I32 priv = 0; + PADOFFSET targ = 0; + + /* is this op a FH constructor? */ + if (is_handle_constructor(o,numargs)) { const char *name = NULL; - STRLEN len = 0; + STRLEN len = 0; U32 name_utf8 = 0; - bool want_dollar = TRUE; - - flags = 0; - /* Set a flag to tell rv2gv to vivify - * need to "prove" flag does not mean something - * else already - NI-S 1999/05/07 - */ - priv = OPpDEREF; - if (kid->op_type == OP_PADSV) { - PADNAME * const pn - = PAD_COMPNAME_SV(kid->op_targ); - name = PadnamePV (pn); - len = PadnameLEN(pn); - name_utf8 = PadnameUTF8(pn); - } - else if (kid->op_type == OP_RV2SV - && kUNOP->op_first->op_type == OP_GV) - { - GV * const gv = cGVOPx_gv(kUNOP->op_first); - name = GvNAME(gv); - len = GvNAMELEN(gv); + bool want_dollar = TRUE; + + flags = 0; + /* Set a flag to tell rv2gv to vivify + * need to "prove" flag does not mean something + * else already - NI-S 1999/05/07 + */ + priv = OPpDEREF; + if (kid->op_type == OP_PADSV) { + PADNAME * const pn + = PAD_COMPNAME_SV(kid->op_targ); + name = PadnamePV (pn); + len = PadnameLEN(pn); + name_utf8 = PadnameUTF8(pn); + } + else if (kid->op_type == OP_RV2SV + && kUNOP->op_first->op_type == OP_GV) + { + GV * const gv = cGVOPx_gv(kUNOP->op_first); + name = GvNAME(gv); + len = GvNAMELEN(gv); name_utf8 = GvNAMEUTF8(gv) ? SVf_UTF8 : 0; - } - else if (kid->op_type == OP_AELEM - || kid->op_type == OP_HELEM) - { - OP *firstop; - OP *op = ((BINOP*)kid)->op_first; - name = NULL; - if (op) { - SV *tmpstr = NULL; - const char * const a = - kid->op_type == OP_AELEM ? - "[]" : "{}"; - if (((op->op_type == OP_RV2AV) || - (op->op_type == OP_RV2HV)) && - (firstop = ((UNOP*)op)->op_first) && - (firstop->op_type == OP_GV)) { - /* packagevar $a[] or $h{} */ - GV * const gv = cGVOPx_gv(firstop); - if (gv) - tmpstr = - Perl_newSVpvf(aTHX_ - "%s%c...%c", - GvNAME(gv), - a[0], a[1]); - } - else if (op->op_type == OP_PADAV - || op->op_type == OP_PADHV) { - /* lexicalvar $a[] or $h{} */ - const char * const padname = - PAD_COMPNAME_PV(op->op_targ); - if (padname) - tmpstr = - Perl_newSVpvf(aTHX_ - "%s%c...%c", - padname + 1, - a[0], a[1]); - } - if (tmpstr) { - name = SvPV_const(tmpstr, len); + } + else if (kid->op_type == OP_AELEM + || kid->op_type == OP_HELEM) + { + OP *firstop; + OP *op = ((BINOP*)kid)->op_first; + name = NULL; + if (op) { + SV *tmpstr = NULL; + const char * const a = + kid->op_type == OP_AELEM ? + "[]" : "{}"; + if (((op->op_type == OP_RV2AV) || + (op->op_type == OP_RV2HV)) && + (firstop = ((UNOP*)op)->op_first) && + (firstop->op_type == OP_GV)) { + /* packagevar $a[] or $h{} */ + GV * const gv = cGVOPx_gv(firstop); + if (gv) + tmpstr = + Perl_newSVpvf(aTHX_ + "%s%c...%c", + GvNAME(gv), + a[0], a[1]); + } + else if (op->op_type == OP_PADAV + || op->op_type == OP_PADHV) { + /* lexicalvar $a[] or $h{} */ + const char * const padname = + PAD_COMPNAME_PV(op->op_targ); + if (padname) + tmpstr = + Perl_newSVpvf(aTHX_ + "%s%c...%c", + padname + 1, + a[0], a[1]); + } + if (tmpstr) { + name = SvPV_const(tmpstr, len); name_utf8 = SvUTF8(tmpstr); - sv_2mortal(tmpstr); - } - } - if (!name) { - name = "__ANONIO__"; - len = 10; - want_dollar = FALSE; - } - op_lvalue(kid, type); - } - if (name) { - SV *namesv; - targ = pad_alloc(OP_RV2GV, SVf_READONLY); - namesv = PAD_SVl(targ); - if (want_dollar && *name != '$') - sv_setpvs(namesv, "$"); - else + sv_2mortal(tmpstr); + } + } + if (!name) { + name = "__ANONIO__"; + len = 10; + want_dollar = FALSE; + } + op_lvalue(kid, type); + } + if (name) { + SV *namesv; + targ = pad_alloc(OP_RV2GV, SVf_READONLY); + namesv = PAD_SVl(targ); + if (want_dollar && *name != '$') + sv_setpvs(namesv, "$"); + else SvPVCLEAR(namesv); - sv_catpvn(namesv, name, len); + sv_catpvn(namesv, name, len); if ( name_utf8 ) SvUTF8_on(namesv); - } - } + } + } scalar(kid); kid = S_op_sibling_newUNOP(aTHX_ o, prev_kid, OP_RV2GV, flags); kid->op_targ = targ; kid->op_private |= priv; - } - } - scalar(kid); - break; - case OA_SCALARREF: - if ((type == OP_UNDEF || type == OP_POS) - && numargs == 1 && !(oa >> 4) - && kid->op_type == OP_LIST) - return too_many_arguments_pv(o,PL_op_desc[type], 0); - op_lvalue(scalar(kid), type); - break; - } - oa >>= 4; - prev_kid = kid; - kid = OpSIBLING(kid); - } - /* FIXME - should the numargs or-ing move after the too many + } + } + scalar(kid); + break; + case OA_SCALARREF: + if ((type == OP_UNDEF || type == OP_POS) + && numargs == 1 && !(oa >> 4) + && kid->op_type == OP_LIST) + return too_many_arguments_pv(o,PL_op_desc[type], 0); + op_lvalue(scalar(kid), type); + break; + } + oa >>= 4; + prev_kid = kid; + kid = OpSIBLING(kid); + } + /* FIXME - should the numargs or-ing move after the too many * arguments check? */ - o->op_private |= numargs; - if (kid) - return too_many_arguments_pv(o,OP_DESC(o), 0); - listkids(o); + o->op_private |= numargs; + if (kid) + return too_many_arguments_pv(o,OP_DESC(o), 0); + listkids(o); } else if (PL_opargs[type] & OA_DEFGV) { - /* Ordering of these two is important to keep f_map.t passing. */ - op_free(o); - return newUNOP(type, 0, newDEFSVOP()); + /* Ordering of these two is important to keep f_map.t passing. */ + op_free(o); + return newUNOP(type, 0, newDEFSVOP()); } if (oa) { - while (oa & OA_OPTIONAL) - oa >>= 4; - if (oa && oa != OA_LIST) - return too_few_arguments_pv(o,OP_DESC(o), 0); + while (oa & OA_OPTIONAL) + oa >>= 4; + if (oa && oa != OA_LIST) + return too_few_arguments_pv(o,OP_DESC(o), 0); } return o; } @@ -13266,39 +13678,39 @@ Perl_ck_glob(pTHX_ OP *o) o = ck_fun(o); if ((o->op_flags & OPf_KIDS) && !OpHAS_SIBLING(cLISTOPo->op_first)) - op_append_elem(OP_GLOB, o, newDEFSVOP()); /* glob() => glob($_) */ + op_append_elem(OP_GLOB, o, newDEFSVOP()); /* glob() => glob($_) */ if (!(o->op_flags & OPf_SPECIAL) && (gv = gv_override("glob", 4))) { - /* convert - * glob - * \ null - const(wildcard) - * into - * null - * \ enter - * \ list - * \ mark - glob - rv2cv - * | \ gv(CORE::GLOBAL::glob) - * | - * \ null - const(wildcard) - */ - o->op_flags |= OPf_SPECIAL; - o->op_targ = pad_alloc(OP_GLOB, SVs_PADTMP); - o = S_new_entersubop(aTHX_ gv, o); - o = newUNOP(OP_NULL, 0, o); - o->op_targ = OP_GLOB; /* hint at what it used to be: eg in newWHILEOP */ - return o; + /* convert + * glob + * \ null - const(wildcard) + * into + * null + * \ enter + * \ list + * \ mark - glob - rv2cv + * | \ gv(CORE::GLOBAL::glob) + * | + * \ null - const(wildcard) + */ + o->op_flags |= OPf_SPECIAL; + o->op_targ = pad_alloc(OP_GLOB, SVs_PADTMP); + o = S_new_entersubop(aTHX_ gv, o); + o = newUNOP(OP_NULL, 0, o); + o->op_targ = OP_GLOB; /* hint at what it used to be: eg in newWHILEOP */ + return o; } else o->op_flags &= ~OPf_SPECIAL; #if !defined(PERL_EXTERNAL_GLOB) if (!PL_globhook) { - ENTER; - Perl_load_module(aTHX_ PERL_LOADMOD_NOIMPORT, - newSVpvs("File::Glob"), NULL, NULL, NULL); - LEAVE; + ENTER; + Perl_load_module(aTHX_ PERL_LOADMOD_NOIMPORT, + newSVpvs("File::Glob"), NULL, NULL, NULL); + LEAVE; } #endif /* !PERL_EXTERNAL_GLOB */ - gv = (GV *)newSV(0); + gv = (GV *)newSV_type(SVt_NULL); gv_init(gv, 0, "", 0, 0); gv_IOadd(gv); op_append_elem(OP_GLOB, o, newGVOP(OP_GV, 0, gv)); @@ -13319,22 +13731,22 @@ Perl_ck_grep(pTHX_ OP *o) /* don't allocate gwop here, as we may leak it if PL_parser->error_count > 0 */ if (o->op_flags & OPf_STACKED) { - kid = cUNOPx(OpSIBLING(cLISTOPo->op_first))->op_first; - if (kid->op_type != OP_SCOPE && kid->op_type != OP_LEAVE) - return no_fh_allowed(o); - o->op_flags &= ~OPf_STACKED; + kid = cUNOPx(OpSIBLING(cLISTOPo->op_first))->op_first; + if (kid->op_type != OP_SCOPE && kid->op_type != OP_LEAVE) + return no_fh_allowed(o); + o->op_flags &= ~OPf_STACKED; } kid = OpSIBLING(cLISTOPo->op_first); if (type == OP_MAPWHILE) - list(kid); + list(kid); else - scalar(kid); + scalar(kid); o = ck_fun(o); if (PL_parser && PL_parser->error_count) - return o; + return o; kid = OpSIBLING(cLISTOPo->op_first); if (kid->op_type != OP_NULL) - Perl_croak(aTHX_ "panic: ck_grep, type=%u", (unsigned) kid->op_type); + Perl_croak(aTHX_ "panic: ck_grep, type=%u", (unsigned) kid->op_type); kid = kUNOP->op_first; gwop = alloc_LOGOP(type, o, LINKLIST(kid)); @@ -13344,7 +13756,7 @@ Perl_ck_grep(pTHX_ OP *o) kid = OpSIBLING(cLISTOPo->op_first); for (kid = OpSIBLING(kid); kid; kid = OpSIBLING(kid)) - op_lvalue(kid, OP_GREPSTART); + op_lvalue(kid, OP_GREPSTART); return (OP*)gwop; } @@ -13355,26 +13767,26 @@ Perl_ck_index(pTHX_ OP *o) PERL_ARGS_ASSERT_CK_INDEX; if (o->op_flags & OPf_KIDS) { - OP *kid = OpSIBLING(cLISTOPo->op_first); /* get past pushmark */ - if (kid) - kid = OpSIBLING(kid); /* get past "big" */ - if (kid && kid->op_type == OP_CONST) { - const bool save_taint = TAINT_get; - SV *sv = kSVOP->op_sv; - if ( (!SvPOK(sv) || SvNIOKp(sv) || isREGEXP(sv)) + OP *kid = OpSIBLING(cLISTOPo->op_first); /* get past pushmark */ + if (kid) + kid = OpSIBLING(kid); /* get past "big" */ + if (kid && kid->op_type == OP_CONST) { + const bool save_taint = TAINT_get; + SV *sv = kSVOP->op_sv; + if ( (!SvPOK(sv) || SvNIOKp(sv) || isREGEXP(sv)) && SvOK(sv) && !SvROK(sv)) { - sv = newSV(0); - sv_copypv(sv, kSVOP->op_sv); - SvREFCNT_dec_NN(kSVOP->op_sv); - kSVOP->op_sv = sv; - } - if (SvOK(sv)) fbm_compile(sv, 0); - TAINT_set(save_taint); + sv = newSV_type(SVt_NULL); + sv_copypv(sv, kSVOP->op_sv); + SvREFCNT_dec_NN(kSVOP->op_sv); + kSVOP->op_sv = sv; + } + if (SvOK(sv)) fbm_compile(sv, 0); + TAINT_set(save_taint); #ifdef NO_TAINT_SUPPORT PERL_UNUSED_VAR(save_taint); #endif - } + } } return ck_fun(o); } @@ -13395,23 +13807,23 @@ Perl_ck_defined(pTHX_ OP *o) /* 19990527 MJD */ PERL_ARGS_ASSERT_CK_DEFINED; if ((o->op_flags & OPf_KIDS)) { - switch (cUNOPo->op_first->op_type) { - case OP_RV2AV: - case OP_PADAV: - Perl_croak(aTHX_ "Can't use 'defined(@array)'" - " (Maybe you should just omit the defined()?)"); + switch (cUNOPo->op_first->op_type) { + case OP_RV2AV: + case OP_PADAV: + Perl_croak(aTHX_ "Can't use 'defined(@array)'" + " (Maybe you should just omit the defined()?)"); NOT_REACHED; /* NOTREACHED */ break; - case OP_RV2HV: - case OP_PADHV: - Perl_croak(aTHX_ "Can't use 'defined(%%hash)'" - " (Maybe you should just omit the defined()?)"); + case OP_RV2HV: + case OP_PADHV: + Perl_croak(aTHX_ "Can't use 'defined(%%hash)'" + " (Maybe you should just omit the defined()?)"); NOT_REACHED; /* NOTREACHED */ - break; - default: - /* no warning */ - break; - } + break; + default: + /* no warning */ + break; + } } return ck_rfun(o); } @@ -13422,15 +13834,15 @@ Perl_ck_readline(pTHX_ OP *o) PERL_ARGS_ASSERT_CK_READLINE; if (o->op_flags & OPf_KIDS) { - OP *kid = cLISTOPo->op_first; - if (kid->op_type == OP_RV2GV) kid->op_private |= OPpALLOW_FAKE; + OP *kid = cLISTOPo->op_first; + if (kid->op_type == OP_RV2GV) kid->op_private |= OPpALLOW_FAKE; scalar(kid); } else { - OP * const newop - = newUNOP(OP_READLINE, 0, newGVOP(OP_GV, 0, PL_argvgv)); - op_free(o); - return newop; + OP * const newop + = newUNOP(OP_READLINE, 0, newGVOP(OP_GV, 0, PL_argvgv)); + op_free(o); + return newop; } return o; } @@ -13454,27 +13866,27 @@ Perl_ck_listiob(pTHX_ OP *o) kid = cLISTOPo->op_first; if (!kid) { - o = force_list(o, 1); - kid = cLISTOPo->op_first; + o = force_list(o, TRUE); + kid = cLISTOPo->op_first; } if (kid->op_type == OP_PUSHMARK) - kid = OpSIBLING(kid); + kid = OpSIBLING(kid); if (kid && o->op_flags & OPf_STACKED) - kid = OpSIBLING(kid); + kid = OpSIBLING(kid); else if (kid && !OpHAS_SIBLING(kid)) { /* print HANDLE; */ - if (kid->op_type == OP_CONST && kid->op_private & OPpCONST_BARE - && !kid->op_folded) { - o->op_flags |= OPf_STACKED; /* make it a filehandle */ + if (kid->op_type == OP_CONST && kid->op_private & OPpCONST_BARE + && !kid->op_folded) { + o->op_flags |= OPf_STACKED; /* make it a filehandle */ scalar(kid); /* replace old const op with new OP_RV2GV parent */ kid = S_op_sibling_newUNOP(aTHX_ o, cLISTOPo->op_first, OP_RV2GV, OPf_REF); kid = OpSIBLING(kid); - } + } } if (!kid) - op_append_elem(o->op_type, o, newDEFSVOP()); + op_append_elem(o->op_type, o, newDEFSVOP()); if (o->op_type == OP_PRTF) return modkids(listkids(o), OP_PRTF); return listkids(o); @@ -13483,29 +13895,28 @@ Perl_ck_listiob(pTHX_ OP *o) OP * Perl_ck_smartmatch(pTHX_ OP *o) { - dVAR; PERL_ARGS_ASSERT_CK_SMARTMATCH; if (0 == (o->op_flags & OPf_SPECIAL)) { - OP *first = cBINOPo->op_first; - OP *second = OpSIBLING(first); + OP *first = cBINOPo->op_first; + OP *second = OpSIBLING(first); - /* Implicitly take a reference to an array or hash */ + /* Implicitly take a reference to an array or hash */ /* remove the original two siblings, then add back the * (possibly different) first and second sibs. */ op_sibling_splice(o, NULL, 1, NULL); op_sibling_splice(o, NULL, 1, NULL); - first = ref_array_or_hash(first); - second = ref_array_or_hash(second); + first = ref_array_or_hash(first); + second = ref_array_or_hash(second); op_sibling_splice(o, NULL, 0, second); op_sibling_splice(o, NULL, 0, first); - /* Implicitly take a reference to a regular expression */ - if (first->op_type == OP_MATCH && !(first->op_flags & OPf_STACKED)) { + /* Implicitly take a reference to a regular expression */ + if (first->op_type == OP_MATCH && !(first->op_flags & OPf_STACKED)) { OpTYPE_set(first, OP_QR); - } - if (second->op_type == OP_MATCH && !(second->op_flags & OPf_STACKED)) { + } + if (second->op_type == OP_MATCH && !(second->op_flags & OPf_STACKED)) { OpTYPE_set(second, OP_QR); } } @@ -13520,27 +13931,27 @@ S_maybe_targlex(pTHX_ OP *o) OP * const kid = cLISTOPo->op_first; /* has a disposable target? */ if ((PL_opargs[kid->op_type] & OA_TARGLEX) - && !(kid->op_flags & OPf_STACKED) - /* Cannot steal the second time! */ - && !(kid->op_private & OPpTARGET_MY) - ) + && !(kid->op_flags & OPf_STACKED) + /* Cannot steal the second time! */ + && !(kid->op_private & OPpTARGET_MY) + ) { - OP * const kkid = OpSIBLING(kid); - - /* Can just relocate the target. */ - if (kkid && kkid->op_type == OP_PADSV - && (!(kkid->op_private & OPpLVAL_INTRO) - || kkid->op_private & OPpPAD_STATE)) - { - kid->op_targ = kkid->op_targ; - kkid->op_targ = 0; - /* Now we do not need PADSV and SASSIGN. - * Detach kid and free the rest. */ - op_sibling_splice(o, NULL, 1, NULL); - op_free(o); - kid->op_private |= OPpTARGET_MY; /* Used for context settings */ - return kid; - } + OP * const kkid = OpSIBLING(kid); + + /* Can just relocate the target. */ + if (kkid && kkid->op_type == OP_PADSV + && (!(kkid->op_private & OPpLVAL_INTRO) + || kkid->op_private & OPpPAD_STATE)) + { + kid->op_targ = kkid->op_targ; + kkid->op_targ = 0; + /* Now we do not need PADSV and SASSIGN. + * Detach kid and free the rest. */ + op_sibling_splice(o, NULL, 1, NULL); + op_free(o); + kid->op_private |= OPpTARGET_MY; /* Used for context settings */ + return kid; + } } return o; } @@ -13548,24 +13959,23 @@ S_maybe_targlex(pTHX_ OP *o) OP * Perl_ck_sassign(pTHX_ OP *o) { - dVAR; OP * const kid = cBINOPo->op_first; PERL_ARGS_ASSERT_CK_SASSIGN; if (OpHAS_SIBLING(kid)) { - OP *kkid = OpSIBLING(kid); - /* For state variable assignment with attributes, kkid is a list op - whose op_last is a padsv. */ - if ((kkid->op_type == OP_PADSV || - (OP_TYPE_IS_OR_WAS(kkid, OP_LIST) && - (kkid = cLISTOPx(kkid)->op_last)->op_type == OP_PADSV - ) - ) - && (kkid->op_private & (OPpLVAL_INTRO|OPpPAD_STATE)) - == (OPpLVAL_INTRO|OPpPAD_STATE)) { - return S_newONCEOP(aTHX_ o, kkid); - } + OP *kkid = OpSIBLING(kid); + /* For state variable assignment with attributes, kkid is a list op + whose op_last is a padsv. */ + if ((kkid->op_type == OP_PADSV || + (OP_TYPE_IS_OR_WAS(kkid, OP_LIST) && + (kkid = cLISTOPx(kkid)->op_last)->op_type == OP_PADSV + ) + ) + && (kkid->op_private & (OPpLVAL_INTRO|OPpPAD_STATE)) + == (OPpLVAL_INTRO|OPpPAD_STATE)) { + return S_newONCEOP(aTHX_ o, kkid); + } } return S_maybe_targlex(aTHX_ o); } @@ -13657,24 +14067,24 @@ Perl_ck_open(pTHX_ OP *o) S_io_hints(aTHX_ o); { - /* In case of three-arg dup open remove strictness - * from the last arg if it is a bareword. */ - OP * const first = cLISTOPx(o)->op_first; /* The pushmark. */ - OP * const last = cLISTOPx(o)->op_last; /* The bareword. */ - OP *oa; - const char *mode; - - if ((last->op_type == OP_CONST) && /* The bareword. */ - (last->op_private & OPpCONST_BARE) && - (last->op_private & OPpCONST_STRICT) && - (oa = OpSIBLING(first)) && /* The fh. */ - (oa = OpSIBLING(oa)) && /* The mode. */ - (oa->op_type == OP_CONST) && - SvPOK(((SVOP*)oa)->op_sv) && - (mode = SvPVX_const(((SVOP*)oa)->op_sv)) && - mode[0] == '>' && mode[1] == '&' && /* A dup open. */ - (last == OpSIBLING(oa))) /* The bareword. */ - last->op_private &= ~OPpCONST_STRICT; + /* In case of three-arg dup open remove strictness + * from the last arg if it is a bareword. */ + OP * const first = cLISTOPx(o)->op_first; /* The pushmark. */ + OP * const last = cLISTOPx(o)->op_last; /* The bareword. */ + OP *oa; + const char *mode; + + if ((last->op_type == OP_CONST) && /* The bareword. */ + (last->op_private & OPpCONST_BARE) && + (last->op_private & OPpCONST_STRICT) && + (oa = OpSIBLING(first)) && /* The fh. */ + (oa = OpSIBLING(oa)) && /* The mode. */ + (oa->op_type == OP_CONST) && + SvPOK(((SVOP*)oa)->op_sv) && + (mode = SvPVX_const(((SVOP*)oa)->op_sv)) && + mode[0] == '>' && mode[1] == '&' && /* A dup open. */ + (last == OpSIBLING(oa))) /* The bareword. */ + last->op_private &= ~OPpCONST_STRICT; } return ck_fun(o); } @@ -13684,8 +14094,8 @@ Perl_ck_prototype(pTHX_ OP *o) { PERL_ARGS_ASSERT_CK_PROTOTYPE; if (!(o->op_flags & OPf_KIDS)) { - op_free(o); - return newUNOP(OP_PROTOTYPE, 0, newDEFSVOP()); + op_free(o); + return newUNOP(OP_PROTOTYPE, 0, newDEFSVOP()); } return o; } @@ -13710,43 +14120,43 @@ Perl_ck_refassign(pTHX_ OP *o) switch (varop->op_type) { case OP_PADAV: - o->op_private |= OPpLVREF_AV; - goto settarg; + o->op_private |= OPpLVREF_AV; + goto settarg; case OP_PADHV: - o->op_private |= OPpLVREF_HV; + o->op_private |= OPpLVREF_HV; /* FALLTHROUGH */ case OP_PADSV: settarg: o->op_private |= (varop->op_private & (OPpLVAL_INTRO|OPpPAD_STATE)); - o->op_targ = varop->op_targ; - varop->op_targ = 0; - PAD_COMPNAME_GEN_set(o->op_targ, PERL_INT_MAX); - break; + o->op_targ = varop->op_targ; + varop->op_targ = 0; + PAD_COMPNAME_GEN_set(o->op_targ, PERL_INT_MAX); + break; case OP_RV2AV: - o->op_private |= OPpLVREF_AV; - goto checkgv; + o->op_private |= OPpLVREF_AV; + goto checkgv; NOT_REACHED; /* NOTREACHED */ case OP_RV2HV: - o->op_private |= OPpLVREF_HV; + o->op_private |= OPpLVREF_HV; /* FALLTHROUGH */ case OP_RV2SV: checkgv: o->op_private |= (varop->op_private & (OPpLVAL_INTRO|OPpOUR_INTRO)); - if (cUNOPx(varop)->op_first->op_type != OP_GV) goto bad; + if (cUNOPx(varop)->op_first->op_type != OP_GV) goto bad; detach_and_stack: - /* Point varop to its GV kid, detached. */ - varop = op_sibling_splice(varop, NULL, -1, NULL); - stacked = TRUE; - break; + /* Point varop to its GV kid, detached. */ + varop = op_sibling_splice(varop, NULL, -1, NULL); + stacked = TRUE; + break; case OP_RV2CV: { - OP * const kidparent = - OpSIBLING(cUNOPx(cUNOPx(varop)->op_first)->op_first); - OP * const kid = cUNOPx(kidparent)->op_first; - o->op_private |= OPpLVREF_CV; - if (kid->op_type == OP_GV) { + OP * const kidparent = + OpSIBLING(cUNOPx(cUNOPx(varop)->op_first)->op_first); + OP * const kid = cUNOPx(kidparent)->op_first; + o->op_private |= OPpLVREF_CV; + if (kid->op_type == OP_GV) { SV *sv = (SV*)cGVOPx_gv(kid); - varop = kidparent; + varop = kidparent; if (SvROK(sv) && SvTYPE(SvRV(sv)) == SVt_PVCV) { /* a CVREF here confuses pp_refassign, so make sure it gets a GV */ @@ -13755,43 +14165,43 @@ Perl_ck_refassign(pTHX_ OP *o) (void)gv_init_sv((GV*)sv, CvSTASH(cv), name_sv, 0); assert(SvTYPE(sv) == SVt_PVGV); } - goto detach_and_stack; - } - if (kid->op_type != OP_PADCV) goto bad; - o->op_targ = kid->op_targ; - kid->op_targ = 0; - break; + goto detach_and_stack; + } + if (kid->op_type != OP_PADCV) goto bad; + o->op_targ = kid->op_targ; + kid->op_targ = 0; + break; } case OP_AELEM: case OP_HELEM: o->op_private |= (varop->op_private & OPpLVAL_INTRO); - o->op_private |= OPpLVREF_ELEM; - op_null(varop); - stacked = TRUE; - /* Detach varop. */ - op_sibling_splice(cUNOPx(left)->op_first, NULL, -1, NULL); - break; + o->op_private |= OPpLVREF_ELEM; + op_null(varop); + stacked = TRUE; + /* Detach varop. */ + op_sibling_splice(cUNOPx(left)->op_first, NULL, -1, NULL); + break; default: bad: - /* diag_listed_as: Can't modify reference to %s in %s assignment */ - yyerror(Perl_form(aTHX_ "Can't modify reference to %s in scalar " - "assignment", - OP_DESC(varop))); - return o; + /* diag_listed_as: Can't modify reference to %s in %s assignment */ + yyerror(Perl_form(aTHX_ "Can't modify reference to %s in scalar " + "assignment", + OP_DESC(varop))); + return o; } if (!FEATURE_REFALIASING_IS_ENABLED) - Perl_croak(aTHX_ - "Experimental aliasing via reference not enabled"); + Perl_croak(aTHX_ + "Experimental aliasing via reference not enabled"); Perl_ck_warner_d(aTHX_ - packWARN(WARN_EXPERIMENTAL__REFALIASING), - "Aliasing via reference is experimental"); + packWARN(WARN_EXPERIMENTAL__REFALIASING), + "Aliasing via reference is experimental"); if (stacked) { - o->op_flags |= OPf_STACKED; - op_sibling_splice(o, right, 1, varop); + o->op_flags |= OPf_STACKED; + op_sibling_splice(o, right, 1, varop); } else { - o->op_flags &=~ OPf_STACKED; - op_sibling_splice(o, right, 1, NULL); + o->op_flags &=~ OPf_STACKED; + op_sibling_splice(o, right, 1, NULL); } op_free(left); return o; @@ -13804,13 +14214,13 @@ Perl_ck_repeat(pTHX_ OP *o) if (cBINOPo->op_first->op_flags & OPf_PARENS) { OP* kids; - o->op_private |= OPpREPEAT_DOLIST; + o->op_private |= OPpREPEAT_DOLIST; kids = op_sibling_splice(o, NULL, 1, NULL); /* detach first kid */ - kids = force_list(kids, 1); /* promote it to a list */ + kids = force_list(kids, TRUE); /* promote it to a list */ op_sibling_splice(o, NULL, 0, kids); /* and add back */ } else - scalar(o); + scalar(o); return o; } @@ -13822,88 +14232,86 @@ Perl_ck_require(pTHX_ OP *o) PERL_ARGS_ASSERT_CK_REQUIRE; if (o->op_flags & OPf_KIDS) { /* Shall we supply missing .pm? */ - SVOP * const kid = (SVOP*)cUNOPo->op_first; - U32 hash; - char *s; - STRLEN len; - if (kid->op_type == OP_CONST) { - SV * const sv = kid->op_sv; - U32 const was_readonly = SvREADONLY(sv); - if (kid->op_private & OPpCONST_BARE) { - dVAR; - const char *end; + SVOP * const kid = (SVOP*)cUNOPo->op_first; + U32 hash; + char *s; + STRLEN len; + if (kid->op_type == OP_CONST) { + SV * const sv = kid->op_sv; + U32 const was_readonly = SvREADONLY(sv); + if (kid->op_private & OPpCONST_BARE) { + const char *end; HEK *hek; - if (was_readonly) { + if (was_readonly) { SvREADONLY_off(sv); } - if (SvIsCOW(sv)) sv_force_normal_flags(sv, 0); + if (SvIsCOW(sv)) sv_force_normal_flags(sv, 0); - s = SvPVX(sv); - len = SvCUR(sv); - end = s + len; + s = SvPVX(sv); + len = SvCUR(sv); + end = s + len; /* treat ::foo::bar as foo::bar */ if (len >= 2 && s[0] == ':' && s[1] == ':') DIE(aTHX_ "Bareword in require must not start with a double-colon: \"%s\"\n", s); if (s == end) DIE(aTHX_ "Bareword in require maps to empty filename"); - for (; s < end; s++) { - if (*s == ':' && s[1] == ':') { - *s = '/'; - Move(s+2, s+1, end - s - 1, char); - --end; - } - } - SvEND_set(sv, end); - sv_catpvs(sv, ".pm"); - PERL_HASH(hash, SvPVX(sv), SvCUR(sv)); - hek = share_hek(SvPVX(sv), - (SSize_t)SvCUR(sv) * (SvUTF8(sv) ? -1 : 1), - hash); - sv_sethek(sv, hek); - unshare_hek(hek); - SvFLAGS(sv) |= was_readonly; - } - else if (SvPOK(sv) && !SvNIOK(sv) && !SvGMAGICAL(sv) - && !SvVOK(sv)) { - s = SvPV(sv, len); - if (SvREFCNT(sv) > 1) { - kid->op_sv = newSVpvn_share( - s, SvUTF8(sv) ? -(SSize_t)len : (SSize_t)len, 0); - SvREFCNT_dec_NN(sv); - } - else { - dVAR; + for (; s < end; s++) { + if (*s == ':' && s[1] == ':') { + *s = '/'; + Move(s+2, s+1, end - s - 1, char); + --end; + } + } + SvEND_set(sv, end); + sv_catpvs(sv, ".pm"); + PERL_HASH(hash, SvPVX(sv), SvCUR(sv)); + hek = share_hek(SvPVX(sv), + (SSize_t)SvCUR(sv) * (SvUTF8(sv) ? -1 : 1), + hash); + sv_sethek(sv, hek); + unshare_hek(hek); + SvFLAGS(sv) |= was_readonly; + } + else if (SvPOK(sv) && !SvNIOK(sv) && !SvGMAGICAL(sv) + && !SvVOK(sv)) { + s = SvPV(sv, len); + if (SvREFCNT(sv) > 1) { + kid->op_sv = newSVpvn_share( + s, SvUTF8(sv) ? -(SSize_t)len : (SSize_t)len, 0); + SvREFCNT_dec_NN(sv); + } + else { HEK *hek; - if (was_readonly) SvREADONLY_off(sv); - PERL_HASH(hash, s, len); - hek = share_hek(s, - SvUTF8(sv) ? -(SSize_t)len : (SSize_t)len, - hash); - sv_sethek(sv, hek); - unshare_hek(hek); - SvFLAGS(sv) |= was_readonly; - } - } - } + if (was_readonly) SvREADONLY_off(sv); + PERL_HASH(hash, s, len); + hek = share_hek(s, + SvUTF8(sv) ? -(SSize_t)len : (SSize_t)len, + hash); + sv_sethek(sv, hek); + unshare_hek(hek); + SvFLAGS(sv) |= was_readonly; + } + } + } } if (!(o->op_flags & OPf_SPECIAL) /* Wasn't written as CORE::require */ - /* handle override, if any */ + /* handle override, if any */ && (gv = gv_override("require", 7))) { - OP *kid, *newop; - if (o->op_flags & OPf_KIDS) { - kid = cUNOPo->op_first; + OP *kid, *newop; + if (o->op_flags & OPf_KIDS) { + kid = cUNOPo->op_first; op_sibling_splice(o, NULL, -1, NULL); - } - else { - kid = newDEFSVOP(); - } - op_free(o); - newop = S_new_entersubop(aTHX_ gv, kid); - return newop; + } + else { + kid = newDEFSVOP(); + } + op_free(o); + newop = S_new_entersubop(aTHX_ gv, kid); + return newop; } return ck_fun(o); @@ -13918,8 +14326,8 @@ Perl_ck_return(pTHX_ OP *o) kid = OpSIBLING(cLISTOPo->op_first); if (PL_compcv && CvLVALUE(PL_compcv)) { - for (; kid; kid = OpSIBLING(kid)) - op_lvalue(kid, OP_LEAVESUBLV); + for (; kid; kid = OpSIBLING(kid)) + op_lvalue(kid, OP_LEAVESUBLV); } return o; @@ -13928,7 +14336,6 @@ Perl_ck_return(pTHX_ OP *o) OP * Perl_ck_select(pTHX_ OP *o) { - dVAR; OP* kid; PERL_ARGS_ASSERT_CK_SELECT; @@ -13937,14 +14344,14 @@ Perl_ck_select(pTHX_ OP *o) kid = OpSIBLING(cLISTOPo->op_first); /* get past pushmark */ if (kid && OpHAS_SIBLING(kid)) { OpTYPE_set(o, OP_SSELECT); - o = ck_fun(o); - return fold_constants(op_integerize(op_std_init(o))); - } + o = ck_fun(o); + return fold_constants(op_integerize(op_std_init(o))); + } } o = ck_fun(o); kid = OpSIBLING(cLISTOPo->op_first); /* get past pushmark */ if (kid && kid->op_type == OP_RV2GV) - kid->op_private &= ~HINT_STRICT_REFS; + kid->op_private &= ~HINT_STRICT_REFS; return o; } @@ -13956,16 +14363,16 @@ Perl_ck_shift(pTHX_ OP *o) PERL_ARGS_ASSERT_CK_SHIFT; if (!(o->op_flags & OPf_KIDS)) { - OP *argop; + OP *argop; - if (!CvUNIQUE(PL_compcv)) { - o->op_flags |= OPf_SPECIAL; - return o; - } + if (!CvUNIQUE(PL_compcv)) { + o->op_flags |= OPf_SPECIAL; + return o; + } - argop = newUNOP(OP_RV2AV, 0, scalar(newGVOP(OP_GV, 0, PL_argvgv))); - op_free(o); - return newUNOP(type, 0, scalar(argop)); + argop = newUNOP(OP_RV2AV, 0, scalar(newGVOP(OP_GV, 0, PL_argvgv))); + op_free(o); + return newUNOP(type, 0, scalar(argop)); } return scalar(ck_fun(o)); } @@ -13975,81 +14382,71 @@ Perl_ck_sort(pTHX_ OP *o) { OP *firstkid; OP *kid; - HV * const hinthv = - PL_hints & HINT_LOCALIZE_HH ? GvHV(PL_hintgv) : NULL; U8 stacked; PERL_ARGS_ASSERT_CK_SORT; - if (hinthv) { - SV ** const svp = hv_fetchs(hinthv, "sort", FALSE); - if (svp) { - const I32 sorthints = (I32)SvIV(*svp); - if ((sorthints & HINT_SORT_STABLE) != 0) - o->op_private |= OPpSORT_STABLE; - if ((sorthints & HINT_SORT_UNSTABLE) != 0) - o->op_private |= OPpSORT_UNSTABLE; - } - } - if (o->op_flags & OPf_STACKED) - simplify_sort(o); + simplify_sort(o); firstkid = OpSIBLING(cLISTOPo->op_first); /* get past pushmark */ + if (!firstkid) + return too_few_arguments_pv(o,OP_DESC(o), 0); + if ((stacked = o->op_flags & OPf_STACKED)) { /* may have been cleared */ - OP *kid = cUNOPx(firstkid)->op_first; /* get past null */ + OP *kid = cUNOPx(firstkid)->op_first; /* get past null */ /* if the first arg is a code block, process it and mark sort as * OPf_SPECIAL */ - if (kid->op_type == OP_SCOPE || kid->op_type == OP_LEAVE) { - LINKLIST(kid); - if (kid->op_type == OP_LEAVE) - op_null(kid); /* wipe out leave */ - /* Prevent execution from escaping out of the sort block. */ - kid->op_next = 0; - - /* provide scalar context for comparison function/block */ - kid = scalar(firstkid); - kid->op_next = kid; - o->op_flags |= OPf_SPECIAL; - } - else if (kid->op_type == OP_CONST - && kid->op_private & OPpCONST_BARE) { - char tmpbuf[256]; - STRLEN len; - PADOFFSET off; - const char * const name = SvPV(kSVOP_sv, len); - *tmpbuf = '&'; - assert (len < 256); - Copy(name, tmpbuf+1, len, char); - off = pad_findmy_pvn(tmpbuf, len+1, 0); - if (off != NOT_IN_PAD) { - if (PAD_COMPNAME_FLAGS_isOUR(off)) { - SV * const fq = - newSVhek(HvNAME_HEK(PAD_COMPNAME_OURSTASH(off))); - sv_catpvs(fq, "::"); - sv_catsv(fq, kSVOP_sv); - SvREFCNT_dec_NN(kSVOP_sv); - kSVOP->op_sv = fq; - } - else { - OP * const padop = newOP(OP_PADCV, 0); - padop->op_targ = off; + if (kid->op_type == OP_SCOPE || kid->op_type == OP_LEAVE) { + LINKLIST(kid); + if (kid->op_type == OP_LEAVE) + op_null(kid); /* wipe out leave */ + /* Prevent execution from escaping out of the sort block. */ + kid->op_next = 0; + + /* provide scalar context for comparison function/block */ + kid = scalar(firstkid); + kid->op_next = kid; + o->op_flags |= OPf_SPECIAL; + } + else if (kid->op_type == OP_CONST + && kid->op_private & OPpCONST_BARE) { + char tmpbuf[256]; + STRLEN len; + PADOFFSET off; + const char * const name = SvPV(kSVOP_sv, len); + *tmpbuf = '&'; + assert (len < 256); + Copy(name, tmpbuf+1, len, char); + off = pad_findmy_pvn(tmpbuf, len+1, 0); + if (off != NOT_IN_PAD) { + if (PAD_COMPNAME_FLAGS_isOUR(off)) { + SV * const fq = + newSVhek(HvNAME_HEK(PAD_COMPNAME_OURSTASH(off))); + sv_catpvs(fq, "::"); + sv_catsv(fq, kSVOP_sv); + SvREFCNT_dec_NN(kSVOP_sv); + kSVOP->op_sv = fq; + } + else { + OP * const padop = newOP(OP_PADCV, 0); + padop->op_targ = off; /* replace the const op with the pad op */ op_sibling_splice(firstkid, NULL, 1, padop); - op_free(kid); - } - } - } + op_free(kid); + } + } + } - firstkid = OpSIBLING(firstkid); + firstkid = OpSIBLING(firstkid); } for (kid = firstkid; kid; kid = OpSIBLING(kid)) { - /* provide list context for arguments */ - list(kid); - if (stacked) - op_lvalue(kid, OP_GREPSTART); + /* provide list context for arguments */ + list(kid); + if (stacked) + op_lvalue(kid, OP_GREPSTART); } return o; @@ -14059,9 +14456,9 @@ Perl_ck_sort(pTHX_ OP *o) * $a <=> $b, $b <=> $a, $a cmp $b, $b cmp $a * elide the second child of the sort (the one containing X), * and set these flags as appropriate - OPpSORT_NUMERIC; - OPpSORT_INTEGER; - OPpSORT_DESCEND; + OPpSORT_NUMERIC; + OPpSORT_INTEGER; + OPpSORT_DESCEND; * Also, check and warn on lexical $a, $b. */ @@ -14080,87 +14477,87 @@ S_simplify_sort(pTHX_ OP *o) kid = kUNOP->op_first; /* get past null */ if (!(have_scopeop = kid->op_type == OP_SCOPE) && kid->op_type != OP_LEAVE) - return; + return; kid = kLISTOP->op_last; /* get past scope */ switch(kid->op_type) { - case OP_NCMP: - case OP_I_NCMP: - case OP_SCMP: - if (!have_scopeop) goto padkids; - break; - default: - return; + case OP_NCMP: + case OP_I_NCMP: + case OP_SCMP: + if (!have_scopeop) goto padkids; + break; + default: + return; } k = kid; /* remember this node*/ if (kBINOP->op_first->op_type != OP_RV2SV || kBINOP->op_last ->op_type != OP_RV2SV) { - /* - Warn about my($a) or my($b) in a sort block, *if* $a or $b is - then used in a comparison. This catches most, but not - all cases. For instance, it catches - sort { my($a); $a <=> $b } - but not - sort { my($a); $a < $b ? -1 : $a == $b ? 0 : 1; } - (although why you'd do that is anyone's guess). - */ + /* + Warn about my($a) or my($b) in a sort block, *if* $a or $b is + then used in a comparison. This catches most, but not + all cases. For instance, it catches + sort { my($a); $a <=> $b } + but not + sort { my($a); $a < $b ? -1 : $a == $b ? 0 : 1; } + (although why you'd do that is anyone's guess). + */ padkids: - if (!ckWARN(WARN_SYNTAX)) return; - kid = kBINOP->op_first; - do { - if (kid->op_type == OP_PADSV) { - PADNAME * const name = PAD_COMPNAME(kid->op_targ); - if (PadnameLEN(name) == 2 && *PadnamePV(name) == '$' - && ( PadnamePV(name)[1] == 'a' - || PadnamePV(name)[1] == 'b' )) - /* diag_listed_as: "my %s" used in sort comparison */ - Perl_warner(aTHX_ packWARN(WARN_SYNTAX), - "\"%s %s\" used in sort comparison", - PadnameIsSTATE(name) - ? "state" - : "my", - PadnamePV(name)); - } - } while ((kid = OpSIBLING(kid))); - return; + if (!ckWARN(WARN_SYNTAX)) return; + kid = kBINOP->op_first; + do { + if (kid->op_type == OP_PADSV) { + PADNAME * const name = PAD_COMPNAME(kid->op_targ); + if (PadnameLEN(name) == 2 && *PadnamePV(name) == '$' + && ( PadnamePV(name)[1] == 'a' + || PadnamePV(name)[1] == 'b' )) + /* diag_listed_as: "my %s" used in sort comparison */ + Perl_warner(aTHX_ packWARN(WARN_SYNTAX), + "\"%s %s\" used in sort comparison", + PadnameIsSTATE(name) + ? "state" + : "my", + PadnamePV(name)); + } + } while ((kid = OpSIBLING(kid))); + return; } kid = kBINOP->op_first; /* get past cmp */ if (kUNOP->op_first->op_type != OP_GV) - return; + return; kid = kUNOP->op_first; /* get past rv2sv */ gv = kGVOP_gv; if (GvSTASH(gv) != PL_curstash) - return; + return; gvname = GvNAME(gv); if (*gvname == 'a' && gvname[1] == '\0') - descending = 0; + descending = 0; else if (*gvname == 'b' && gvname[1] == '\0') - descending = 1; + descending = 1; else - return; + return; kid = k; /* back to cmp */ /* already checked above that it is rv2sv */ kid = kBINOP->op_last; /* down to 2nd arg */ if (kUNOP->op_first->op_type != OP_GV) - return; + return; kid = kUNOP->op_first; /* get past rv2sv */ gv = kGVOP_gv; if (GvSTASH(gv) != PL_curstash) - return; + return; gvname = GvNAME(gv); if ( descending - ? !(*gvname == 'a' && gvname[1] == '\0') - : !(*gvname == 'b' && gvname[1] == '\0')) - return; + ? !(*gvname == 'a' && gvname[1] == '\0') + : !(*gvname == 'b' && gvname[1] == '\0')) + return; o->op_flags &= ~(OPf_STACKED | OPf_SPECIAL); if (descending) - o->op_private |= OPpSORT_DESCEND; + o->op_private |= OPpSORT_DESCEND; if (k->op_type == OP_NCMP) - o->op_private |= OPpSORT_NUMERIC; + o->op_private |= OPpSORT_NUMERIC; if (k->op_type == OP_I_NCMP) - o->op_private |= OPpSORT_NUMERIC | OPpSORT_INTEGER; + o->op_private |= OPpSORT_NUMERIC | OPpSORT_INTEGER; kid = OpSIBLING(cLISTOPo->op_first); /* cut out and delete old block (second sibling) */ op_sibling_splice(o, cLISTOPo->op_first, 1, NULL); @@ -14170,7 +14567,6 @@ S_simplify_sort(pTHX_ OP *o) OP * Perl_ck_split(pTHX_ OP *o) { - dVAR; OP *kid; OP *sibs; @@ -14179,13 +14575,13 @@ Perl_ck_split(pTHX_ OP *o) assert(o->op_type == OP_LIST); if (o->op_flags & OPf_STACKED) - return no_fh_allowed(o); + return no_fh_allowed(o); kid = cLISTOPo->op_first; /* delete leading NULL node, then add a CONST if no other nodes */ assert(kid->op_type == OP_NULL); op_sibling_splice(o, NULL, 1, - OpHAS_SIBLING(kid) ? NULL : newSVOP(OP_CONST, 0, newSVpvs(" "))); + OpHAS_SIBLING(kid) ? NULL : newSVOP(OP_CONST, 0, newSVpvs(" "))); op_free(kid); kid = cLISTOPo->op_first; @@ -14202,7 +14598,7 @@ Perl_ck_split(pTHX_ OP *o) if (((PMOP *)kid)->op_pmflags & PMf_GLOBAL) { Perl_ck_warner(aTHX_ packWARN(WARN_REGEXP), - "Use of /g modifier is meaningless in split"); + "Use of /g modifier is meaningless in split"); } /* eliminate the split op, and move the match op (plus any children) @@ -14230,21 +14626,21 @@ Perl_ck_split(pTHX_ OP *o) kid = sibs; /* kid is now the string arg of the split */ if (!kid) { - kid = newDEFSVOP(); - op_append_elem(OP_SPLIT, o, kid); + kid = newDEFSVOP(); + op_append_elem(OP_SPLIT, o, kid); } scalar(kid); kid = OpSIBLING(kid); if (!kid) { kid = newSVOP(OP_CONST, 0, newSViv(0)); - op_append_elem(OP_SPLIT, o, kid); - o->op_private |= OPpSPLIT_IMPLIM; + op_append_elem(OP_SPLIT, o, kid); + o->op_private |= OPpSPLIT_IMPLIM; } scalar(kid); if (OpHAS_SIBLING(kid)) - return too_many_arguments_pv(o,OP_DESC(o), 0); + return too_many_arguments_pv(o,OP_DESC(o), 0); return o; } @@ -14257,11 +14653,11 @@ Perl_ck_stringify(pTHX_ OP *o) if (( kid->op_type == OP_JOIN || kid->op_type == OP_QUOTEMETA || kid->op_type == OP_LC || kid->op_type == OP_LCFIRST || kid->op_type == OP_UC || kid->op_type == OP_UCFIRST) - && !OpHAS_SIBLING(kid)) /* syntax errs can leave extra children */ + && !OpHAS_SIBLING(kid)) /* syntax errs can leave extra children */ { - op_sibling_splice(o, cUNOPo->op_first, -1, NULL); - op_free(o); - return kid; + op_sibling_splice(o, cUNOPo->op_first, -1, NULL); + op_free(o); + return kid; } return ck_fun(o); } @@ -14274,32 +14670,32 @@ Perl_ck_join(pTHX_ OP *o) PERL_ARGS_ASSERT_CK_JOIN; if (kid && kid->op_type == OP_MATCH) { - if (ckWARN(WARN_SYNTAX)) { + if (ckWARN(WARN_SYNTAX)) { const REGEXP *re = PM_GETRE(kPMOP); const SV *msg = re ? newSVpvn_flags( RX_PRECOMP_const(re), RX_PRELEN(re), SVs_TEMP | ( RX_UTF8(re) ? SVf_UTF8 : 0 ) ) : newSVpvs_flags( "STRING", SVs_TEMP ); - Perl_warner(aTHX_ packWARN(WARN_SYNTAX), - "/%" SVf "/ should probably be written as \"%" SVf "\"", - SVfARG(msg), SVfARG(msg)); - } + Perl_warner(aTHX_ packWARN(WARN_SYNTAX), + "/%" SVf "/ should probably be written as \"%" SVf "\"", + SVfARG(msg), SVfARG(msg)); + } } if (kid && (kid->op_type == OP_CONST /* an innocent, unsuspicious separator */ - || (kid->op_type == OP_PADSV && !(kid->op_private & OPpLVAL_INTRO)) - || ( kid->op_type==OP_RV2SV && kUNOP->op_first->op_type == OP_GV - && !(kid->op_private & (OPpLVAL_INTRO|OPpOUR_INTRO))))) + || (kid->op_type == OP_PADSV && !(kid->op_private & OPpLVAL_INTRO)) + || ( kid->op_type==OP_RV2SV && kUNOP->op_first->op_type == OP_GV + && !(kid->op_private & (OPpLVAL_INTRO|OPpOUR_INTRO))))) { - const OP * const bairn = OpSIBLING(kid); /* the list */ - if (bairn && !OpHAS_SIBLING(bairn) /* single-item list */ - && OP_GIMME(bairn,0) == G_SCALAR) - { - OP * const ret = op_convert_list(OP_STRINGIFY, OPf_FOLDED, - op_sibling_splice(o, kid, 1, NULL)); - op_free(o); - return ret; - } + const OP * const bairn = OpSIBLING(kid); /* the list */ + if (bairn && !OpHAS_SIBLING(bairn) /* single-item list */ + && OP_GIMME(bairn,0) == G_SCALAR) + { + OP * const ret = op_convert_list(OP_STRINGIFY, OPf_FOLDED, + op_sibling_splice(o, kid, 1, NULL)); + op_free(o); + return ret; + } } return ck_fun(o); @@ -14356,14 +14752,14 @@ Perl_find_lexical_cv(pTHX_ PADOFFSET off) PADNAME *name = PAD_COMPNAME(off); CV *compcv = PL_compcv; while (PadnameOUTER(name)) { - assert(PARENT_PAD_INDEX(name)); - compcv = CvOUTSIDE(compcv); - name = PadlistNAMESARRAY(CvPADLIST(compcv)) - [off = PARENT_PAD_INDEX(name)]; + assert(PARENT_PAD_INDEX(name)); + compcv = CvOUTSIDE(compcv); + name = PadlistNAMESARRAY(CvPADLIST(compcv)) + [off = PARENT_PAD_INDEX(name)]; } assert(!PadnameIsOUR(name)); if (!PadnameIsSTATE(name) && PadnamePROTOCV(name)) { - return PadnamePROTOCV(name); + return PadnamePROTOCV(name); } return (CV *)AvARRAY(PadlistARRAY(CvPADLIST(compcv))[1])[off]; } @@ -14376,65 +14772,65 @@ Perl_rv2cv_op_cv(pTHX_ OP *cvop, U32 flags) GV *gv; PERL_ARGS_ASSERT_RV2CV_OP_CV; if (flags & ~RV2CVOPCV_FLAG_MASK) - Perl_croak(aTHX_ "panic: rv2cv_op_cv bad flags %x", (unsigned)flags); + Perl_croak(aTHX_ "panic: rv2cv_op_cv bad flags %x", (unsigned)flags); if (cvop->op_type != OP_RV2CV) - return NULL; + return NULL; if (cvop->op_private & OPpENTERSUB_AMPER) - return NULL; + return NULL; if (!(cvop->op_flags & OPf_KIDS)) - return NULL; + return NULL; rvop = cUNOPx(cvop)->op_first; switch (rvop->op_type) { - case OP_GV: { - gv = cGVOPx_gv(rvop); - if (!isGV(gv)) { - if (SvROK(gv) && SvTYPE(SvRV(gv)) == SVt_PVCV) { - cv = MUTABLE_CV(SvRV(gv)); - gv = NULL; - break; - } - if (flags & RV2CVOPCV_RETURN_STUB) - return (CV *)gv; - else return NULL; - } - cv = GvCVu(gv); - if (!cv) { - if (flags & RV2CVOPCV_MARK_EARLY) - rvop->op_private |= OPpEARLY_CV; - return NULL; - } - } break; - case OP_CONST: { - SV *rv = cSVOPx_sv(rvop); - if (!SvROK(rv)) - return NULL; - cv = (CV*)SvRV(rv); - gv = NULL; - } break; - case OP_PADCV: { - cv = find_lexical_cv(rvop->op_targ); - gv = NULL; - } break; - default: { - return NULL; - } NOT_REACHED; /* NOTREACHED */ + case OP_GV: { + gv = cGVOPx_gv(rvop); + if (!isGV(gv)) { + if (SvROK(gv) && SvTYPE(SvRV(gv)) == SVt_PVCV) { + cv = MUTABLE_CV(SvRV(gv)); + gv = NULL; + break; + } + if (flags & RV2CVOPCV_RETURN_STUB) + return (CV *)gv; + else return NULL; + } + cv = GvCVu(gv); + if (!cv) { + if (flags & RV2CVOPCV_MARK_EARLY) + rvop->op_private |= OPpEARLY_CV; + return NULL; + } + } break; + case OP_CONST: { + SV *rv = cSVOPx_sv(rvop); + if (!SvROK(rv)) + return NULL; + cv = (CV*)SvRV(rv); + gv = NULL; + } break; + case OP_PADCV: { + cv = find_lexical_cv(rvop->op_targ); + gv = NULL; + } break; + default: { + return NULL; + } NOT_REACHED; /* NOTREACHED */ } if (SvTYPE((SV*)cv) != SVt_PVCV) - return NULL; + return NULL; if (flags & RV2CVOPCV_RETURN_NAME_GV) { - if ((!CvANON(cv) && !CvLEXICAL(cv)) || !gv) - gv = CvGV(cv); - return (CV*)gv; + if ((!CvANON(cv) && !CvLEXICAL(cv)) || !gv) + gv = CvGV(cv); + return (CV*)gv; } else if (flags & RV2CVOPCV_MAYBE_NAME_GV) { - if (CvLEXICAL(cv) || CvNAMED(cv)) - return NULL; - if (!CvANON(cv) || !gv) - gv = CvGV(cv); - return (CV*)gv; + if (CvLEXICAL(cv) || CvNAMED(cv)) + return NULL; + if (!CvANON(cv) || !gv) + gv = CvGV(cv); + return (CV*)gv; } else { - return cv; + return cv; } } @@ -14460,7 +14856,7 @@ Perl_ck_entersub_args_list(pTHX_ OP *entersubop) aop = cUNOPx(entersubop)->op_first; if (!OpHAS_SIBLING(aop)) - aop = cUNOPx(aop)->op_first; + aop = cUNOPx(aop)->op_first; for (aop = OpSIBLING(aop); OpHAS_SIBLING(aop); aop = OpSIBLING(aop)) { /* skip the extra attributes->import() call implicitly added in * something like foo(my $x : bar) @@ -14515,10 +14911,10 @@ Perl_ck_entersub_args_proto(pTHX_ OP *entersubop, GV *namegv, SV *protosv) const char *e = NULL; PERL_ARGS_ASSERT_CK_ENTERSUB_ARGS_PROTO; if (SvTYPE(protosv) == SVt_PVCV ? !SvPOK(protosv) : !SvOK(protosv)) - Perl_croak(aTHX_ "panic: ck_entersub_args_proto CV with no proto, " - "flags=%lx", (unsigned long) SvFLAGS(protosv)); + Perl_croak(aTHX_ "panic: ck_entersub_args_proto CV with no proto, " + "flags=%lx", (unsigned long) SvFLAGS(protosv)); if (SvTYPE(protosv) == SVt_PVCV) - proto = CvPROTO(protosv), proto_len = CvPROTOLEN(protosv); + proto = CvPROTO(protosv), proto_len = CvPROTOLEN(protosv); else proto = SvPV(protosv, proto_len); proto = S_strip_spaces(aTHX_ proto, &proto_len); proto_end = proto + proto_len; @@ -14526,199 +14922,199 @@ Perl_ck_entersub_args_proto(pTHX_ OP *entersubop, GV *namegv, SV *protosv) aop = cUNOPx(entersubop)->op_first; if (!OpHAS_SIBLING(aop)) { parent = aop; - aop = cUNOPx(aop)->op_first; + aop = cUNOPx(aop)->op_first; } prev = aop; aop = OpSIBLING(aop); for (cvop = aop; OpHAS_SIBLING(cvop); cvop = OpSIBLING(cvop)) ; while (aop != cvop) { - OP* o3 = aop; - - if (proto >= proto_end) - { - SV * const namesv = cv_name((CV *)namegv, NULL, 0); - yyerror_pv(Perl_form(aTHX_ "Too many arguments for %" SVf, - SVfARG(namesv)), SvUTF8(namesv)); - return entersubop; - } - - switch (*proto) { - case ';': - optional = 1; - proto++; - continue; - case '_': - /* _ must be at the end */ - if (proto[1] && !memCHRs(";@%", proto[1])) - goto oops; + OP* o3 = aop; + + if (proto >= proto_end) + { + SV * const namesv = cv_name((CV *)namegv, NULL, 0); + yyerror_pv(Perl_form(aTHX_ "Too many arguments for %" SVf, + SVfARG(namesv)), SvUTF8(namesv)); + return entersubop; + } + + switch (*proto) { + case ';': + optional = 1; + proto++; + continue; + case '_': + /* _ must be at the end */ + if (proto[1] && !memCHRs(";@%", proto[1])) + goto oops; /* FALLTHROUGH */ - case '$': - proto++; - arg++; - scalar(aop); - break; - case '%': - case '@': - list(aop); - arg++; - break; - case '&': - proto++; - arg++; - if ( o3->op_type != OP_UNDEF + case '$': + proto++; + arg++; + scalar(aop); + break; + case '%': + case '@': + list(aop); + arg++; + break; + case '&': + proto++; + arg++; + if ( o3->op_type != OP_UNDEF && (o3->op_type != OP_SREFGEN || ( cUNOPx(cUNOPx(o3)->op_first)->op_first->op_type != OP_ANONCODE && cUNOPx(cUNOPx(o3)->op_first)->op_first->op_type != OP_RV2CV))) - bad_type_gv(arg, namegv, o3, - arg == 1 ? "block or sub {}" : "sub {}"); - break; - case '*': - /* '*' allows any scalar type, including bareword */ - proto++; - arg++; - if (o3->op_type == OP_RV2GV) - goto wrapref; /* autoconvert GLOB -> GLOBref */ - else if (o3->op_type == OP_CONST) - o3->op_private &= ~OPpCONST_STRICT; - scalar(aop); - break; - case '+': - proto++; - arg++; - if (o3->op_type == OP_RV2AV || - o3->op_type == OP_PADAV || - o3->op_type == OP_RV2HV || - o3->op_type == OP_PADHV - ) { - goto wrapref; - } - scalar(aop); - break; - case '[': case ']': - goto oops; - - case '\\': - proto++; - arg++; - again: - switch (*proto++) { - case '[': - if (contextclass++ == 0) { - e = (char *) memchr(proto, ']', proto_end - proto); - if (!e || e == proto) - goto oops; - } - else - goto oops; - goto again; - - case ']': - if (contextclass) { - const char *p = proto; - const char *const end = proto; - contextclass = 0; - while (*--p != '[') - /* \[$] accepts any scalar lvalue */ - if (*p == '$' - && Perl_op_lvalue_flags(aTHX_ - scalar(o3), - OP_READ, /* not entersub */ - OP_LVALUE_NO_CROAK - )) goto wrapref; - bad_type_gv(arg, namegv, o3, - Perl_form(aTHX_ "one of %.*s",(int)(end - p), p)); - } else - goto oops; - break; - case '*': - if (o3->op_type == OP_RV2GV) - goto wrapref; - if (!contextclass) - bad_type_gv(arg, namegv, o3, "symbol"); - break; - case '&': - if (o3->op_type == OP_ENTERSUB - && !(o3->op_flags & OPf_STACKED)) - goto wrapref; - if (!contextclass) - bad_type_gv(arg, namegv, o3, "subroutine"); - break; - case '$': - if (o3->op_type == OP_RV2SV || - o3->op_type == OP_PADSV || - o3->op_type == OP_HELEM || - o3->op_type == OP_AELEM) - goto wrapref; - if (!contextclass) { - /* \$ accepts any scalar lvalue */ - if (Perl_op_lvalue_flags(aTHX_ - scalar(o3), - OP_READ, /* not entersub */ - OP_LVALUE_NO_CROAK - )) goto wrapref; - bad_type_gv(arg, namegv, o3, "scalar"); - } - break; - case '@': - if (o3->op_type == OP_RV2AV || - o3->op_type == OP_PADAV) - { - o3->op_flags &=~ OPf_PARENS; - goto wrapref; - } - if (!contextclass) - bad_type_gv(arg, namegv, o3, "array"); - break; - case '%': - if (o3->op_type == OP_RV2HV || - o3->op_type == OP_PADHV) - { - o3->op_flags &=~ OPf_PARENS; - goto wrapref; - } - if (!contextclass) - bad_type_gv(arg, namegv, o3, "hash"); - break; - wrapref: + bad_type_gv(arg, namegv, o3, + arg == 1 ? "block or sub {}" : "sub {}"); + break; + case '*': + /* '*' allows any scalar type, including bareword */ + proto++; + arg++; + if (o3->op_type == OP_RV2GV) + goto wrapref; /* autoconvert GLOB -> GLOBref */ + else if (o3->op_type == OP_CONST) + o3->op_private &= ~OPpCONST_STRICT; + scalar(aop); + break; + case '+': + proto++; + arg++; + if (o3->op_type == OP_RV2AV || + o3->op_type == OP_PADAV || + o3->op_type == OP_RV2HV || + o3->op_type == OP_PADHV + ) { + goto wrapref; + } + scalar(aop); + break; + case '[': case ']': + goto oops; + + case '\\': + proto++; + arg++; + again: + switch (*proto++) { + case '[': + if (contextclass++ == 0) { + e = (char *) memchr(proto, ']', proto_end - proto); + if (!e || e == proto) + goto oops; + } + else + goto oops; + goto again; + + case ']': + if (contextclass) { + const char *p = proto; + const char *const end = proto; + contextclass = 0; + while (*--p != '[') + /* \[$] accepts any scalar lvalue */ + if (*p == '$' + && Perl_op_lvalue_flags(aTHX_ + scalar(o3), + OP_READ, /* not entersub */ + OP_LVALUE_NO_CROAK + )) goto wrapref; + bad_type_gv(arg, namegv, o3, + Perl_form(aTHX_ "one of %.*s",(int)(end - p), p)); + } else + goto oops; + break; + case '*': + if (o3->op_type == OP_RV2GV) + goto wrapref; + if (!contextclass) + bad_type_gv(arg, namegv, o3, "symbol"); + break; + case '&': + if (o3->op_type == OP_ENTERSUB + && !(o3->op_flags & OPf_STACKED)) + goto wrapref; + if (!contextclass) + bad_type_gv(arg, namegv, o3, "subroutine"); + break; + case '$': + if (o3->op_type == OP_RV2SV || + o3->op_type == OP_PADSV || + o3->op_type == OP_HELEM || + o3->op_type == OP_AELEM) + goto wrapref; + if (!contextclass) { + /* \$ accepts any scalar lvalue */ + if (Perl_op_lvalue_flags(aTHX_ + scalar(o3), + OP_READ, /* not entersub */ + OP_LVALUE_NO_CROAK + )) goto wrapref; + bad_type_gv(arg, namegv, o3, "scalar"); + } + break; + case '@': + if (o3->op_type == OP_RV2AV || + o3->op_type == OP_PADAV) + { + o3->op_flags &=~ OPf_PARENS; + goto wrapref; + } + if (!contextclass) + bad_type_gv(arg, namegv, o3, "array"); + break; + case '%': + if (o3->op_type == OP_RV2HV || + o3->op_type == OP_PADHV) + { + o3->op_flags &=~ OPf_PARENS; + goto wrapref; + } + if (!contextclass) + bad_type_gv(arg, namegv, o3, "hash"); + break; + wrapref: aop = S_op_sibling_newUNOP(aTHX_ parent, prev, OP_REFGEN, 0); - if (contextclass && e) { - proto = e + 1; - contextclass = 0; - } - break; - default: goto oops; - } - if (contextclass) - goto again; - break; - case ' ': - proto++; - continue; - default: - oops: { - Perl_croak(aTHX_ "Malformed prototype for %" SVf ": %" SVf, - SVfARG(cv_name((CV *)namegv, NULL, 0)), - SVfARG(protosv)); + if (contextclass && e) { + proto = e + 1; + contextclass = 0; + } + break; + default: goto oops; + } + if (contextclass) + goto again; + break; + case ' ': + proto++; + continue; + default: + oops: { + Perl_croak(aTHX_ "Malformed prototype for %" SVf ": %" SVf, + SVfARG(cv_name((CV *)namegv, NULL, 0)), + SVfARG(protosv)); } - } + } - op_lvalue(aop, OP_ENTERSUB); - prev = aop; - aop = OpSIBLING(aop); + op_lvalue(aop, OP_ENTERSUB); + prev = aop; + aop = OpSIBLING(aop); } if (aop == cvop && *proto == '_') { - /* generate an access to $_ */ + /* generate an access to $_ */ op_sibling_splice(parent, prev, 0, newDEFSVOP()); } if (!optional && proto_end > proto && - (*proto != '@' && *proto != '%' && *proto != ';' && *proto != '_')) + (*proto != '@' && *proto != '%' && *proto != ';' && *proto != '_')) { - SV * const namesv = cv_name((CV *)namegv, NULL, 0); - yyerror_pv(Perl_form(aTHX_ "Not enough arguments for %" SVf, - SVfARG(namesv)), SvUTF8(namesv)); + SV * const namesv = cv_name((CV *)namegv, NULL, 0); + yyerror_pv(Perl_form(aTHX_ "Not enough arguments for %" SVf, + SVfARG(namesv)), SvUTF8(namesv)); } return entersubop; } @@ -14752,13 +15148,13 @@ by the name defined by the C parameter. OP * Perl_ck_entersub_args_proto_or_list(pTHX_ OP *entersubop, - GV *namegv, SV *protosv) + GV *namegv, SV *protosv) { PERL_ARGS_ASSERT_CK_ENTERSUB_ARGS_PROTO_OR_LIST; if (SvTYPE(protosv) == SVt_PVCV ? SvPOK(protosv) : SvOK(protosv)) - return ck_entersub_args_proto(entersubop, namegv, protosv); + return ck_entersub_args_proto(entersubop, namegv, protosv); else - return ck_entersub_args_list(entersubop); + return ck_entersub_args_list(entersubop); } OP * @@ -14771,53 +15167,53 @@ Perl_ck_entersub_args_core(pTHX_ OP *entersubop, GV *namegv, SV *protosv) PERL_ARGS_ASSERT_CK_ENTERSUB_ARGS_CORE; if (!opnum) { - OP *cvop; - if (!OpHAS_SIBLING(aop)) - aop = cUNOPx(aop)->op_first; - aop = OpSIBLING(aop); - for (cvop = aop; OpSIBLING(cvop); cvop = OpSIBLING(cvop)) ; - if (aop != cvop) { - SV *namesv = cv_name((CV *)namegv, NULL, CV_NAME_NOTQUAL); - yyerror_pv(Perl_form(aTHX_ "Too many arguments for %" SVf, - SVfARG(namesv)), SvUTF8(namesv)); - } - - op_free(entersubop); - switch(cvflags >> 16) { - case 'F': return newSVOP(OP_CONST, 0, - newSVpv(CopFILE(PL_curcop),0)); - case 'L': return newSVOP( - OP_CONST, 0, + OP *cvop; + if (!OpHAS_SIBLING(aop)) + aop = cUNOPx(aop)->op_first; + aop = OpSIBLING(aop); + for (cvop = aop; OpSIBLING(cvop); cvop = OpSIBLING(cvop)) ; + if (aop != cvop) { + SV *namesv = cv_name((CV *)namegv, NULL, CV_NAME_NOTQUAL); + yyerror_pv(Perl_form(aTHX_ "Too many arguments for %" SVf, + SVfARG(namesv)), SvUTF8(namesv)); + } + + op_free(entersubop); + switch(cvflags >> 16) { + case 'F': return newSVOP(OP_CONST, 0, + newSVpv(CopFILE(PL_curcop),0)); + case 'L': return newSVOP( + OP_CONST, 0, Perl_newSVpvf(aTHX_ - "%" IVdf, (IV)CopLINE(PL_curcop) - ) - ); - case 'P': return newSVOP(OP_CONST, 0, - (PL_curstash - ? newSVhek(HvNAME_HEK(PL_curstash)) - : &PL_sv_undef - ) - ); - } - NOT_REACHED; /* NOTREACHED */ + "%" IVdf, (IV)CopLINE(PL_curcop) + ) + ); + case 'P': return newSVOP(OP_CONST, 0, + (PL_curstash + ? newSVhek(HvNAME_HEK(PL_curstash)) + : &PL_sv_undef + ) + ); + } + NOT_REACHED; /* NOTREACHED */ } else { - OP *prev, *cvop, *first, *parent; - U32 flags = 0; + OP *prev, *cvop, *first, *parent; + U32 flags = 0; parent = entersubop; if (!OpHAS_SIBLING(aop)) { parent = aop; - aop = cUNOPx(aop)->op_first; + aop = cUNOPx(aop)->op_first; } - first = prev = aop; - aop = OpSIBLING(aop); + first = prev = aop; + aop = OpSIBLING(aop); /* find last sibling */ - for (cvop = aop; - OpHAS_SIBLING(cvop); - prev = cvop, cvop = OpSIBLING(cvop)) - ; + for (cvop = aop; + OpHAS_SIBLING(cvop); + prev = cvop, cvop = OpSIBLING(cvop)) + ; if (!(cvop->op_private & OPpENTERSUB_NOPAREN) /* Usually, OPf_SPECIAL on an op with no args means that it had * parens, but these have their own meaning for that flag: */ @@ -14826,50 +15222,50 @@ Perl_ck_entersub_args_core(pTHX_ OP *entersubop, GV *namegv, SV *protosv) flags |= OPf_SPECIAL; /* excise cvop from end of sibling chain */ op_sibling_splice(parent, prev, 1, NULL); - op_free(cvop); - if (aop == cvop) aop = NULL; + op_free(cvop); + if (aop == cvop) aop = NULL; /* detach remaining siblings from the first sibling, then * dispose of original optree */ if (aop) op_sibling_splice(parent, first, -1, NULL); - op_free(entersubop); + op_free(entersubop); - if (cvflags == (OP_ENTEREVAL | (1<<16))) - flags |= OPpEVAL_BYTES <<8; + if (cvflags == (OP_ENTEREVAL | (1<<16))) + flags |= OPpEVAL_BYTES <<8; - switch (PL_opargs[opnum] & OA_CLASS_MASK) { - case OA_UNOP: - case OA_BASEOP_OR_UNOP: - case OA_FILESTATOP: - if (!aop) + switch (PL_opargs[opnum] & OA_CLASS_MASK) { + case OA_UNOP: + case OA_BASEOP_OR_UNOP: + case OA_FILESTATOP: + if (!aop) return newOP(opnum,flags); /* zero args */ if (aop == prev) return newUNOP(opnum,flags,aop); /* one arg */ /* too many args */ /* FALLTHROUGH */ - case OA_BASEOP: - if (aop) { - SV *namesv; + case OA_BASEOP: + if (aop) { + SV *namesv; OP *nextop; - namesv = cv_name((CV *)namegv, NULL, CV_NAME_NOTQUAL); - yyerror_pv(Perl_form(aTHX_ "Too many arguments for %" SVf, - SVfARG(namesv)), SvUTF8(namesv)); + namesv = cv_name((CV *)namegv, NULL, CV_NAME_NOTQUAL); + yyerror_pv(Perl_form(aTHX_ "Too many arguments for %" SVf, + SVfARG(namesv)), SvUTF8(namesv)); while (aop) { nextop = OpSIBLING(aop); op_free(aop); aop = nextop; } - } - return opnum == OP_RUNCV - ? newPVOP(OP_RUNCV,0,NULL) - : newOP(opnum,0); - default: - return op_convert_list(opnum,0,aop); - } + } + return opnum == OP_RUNCV + ? newPVOP(OP_RUNCV,0,NULL) + : newOP(opnum,0); + default: + return op_convert_list(opnum,0,aop); + } } NOT_REACHED; /* NOTREACHED */ return entersubop; @@ -14935,20 +15331,20 @@ it is only safe to call it with a genuine GV as its C argument. void Perl_cv_get_call_checker_flags(pTHX_ CV *cv, U32 gflags, - Perl_call_checker *ckfun_p, SV **ckobj_p, U32 *ckflags_p) + Perl_call_checker *ckfun_p, SV **ckobj_p, U32 *ckflags_p) { MAGIC *callmg; PERL_ARGS_ASSERT_CV_GET_CALL_CHECKER_FLAGS; PERL_UNUSED_CONTEXT; callmg = SvMAGICAL((SV*)cv) ? mg_find((SV*)cv, PERL_MAGIC_checkcall) : NULL; if (callmg) { - *ckfun_p = DPTR2FPTR(Perl_call_checker, callmg->mg_ptr); - *ckobj_p = callmg->mg_obj; - *ckflags_p = (callmg->mg_flags | gflags) & MGf_REQUIRE_GV; + *ckfun_p = DPTR2FPTR(Perl_call_checker, callmg->mg_ptr); + *ckobj_p = callmg->mg_obj; + *ckflags_p = (callmg->mg_flags | gflags) & MGf_REQUIRE_GV; } else { - *ckfun_p = Perl_ck_entersub_args_proto_or_list; - *ckobj_p = (SV*)cv; - *ckflags_p = gflags & MGf_REQUIRE_GV; + *ckfun_p = Perl_ck_entersub_args_proto_or_list; + *ckobj_p = (SV*)cv; + *ckflags_p = gflags & MGf_REQUIRE_GV; } } @@ -14959,7 +15355,7 @@ Perl_cv_get_call_checker(pTHX_ CV *cv, Perl_call_checker *ckfun_p, SV **ckobj_p) PERL_ARGS_ASSERT_CV_GET_CALL_CHECKER; PERL_UNUSED_CONTEXT; cv_get_call_checker_flags(cv, CALL_CHECKER_REQUIRE_GV, ckfun_p, ckobj_p, - &ckflags); + &ckflags); } /* @@ -15018,29 +15414,29 @@ Perl_cv_set_call_checker(pTHX_ CV *cv, Perl_call_checker ckfun, SV *ckobj) void Perl_cv_set_call_checker_flags(pTHX_ CV *cv, Perl_call_checker ckfun, - SV *ckobj, U32 ckflags) + SV *ckobj, U32 ckflags) { PERL_ARGS_ASSERT_CV_SET_CALL_CHECKER_FLAGS; if (ckfun == Perl_ck_entersub_args_proto_or_list && ckobj == (SV*)cv) { - if (SvMAGICAL((SV*)cv)) - mg_free_type((SV*)cv, PERL_MAGIC_checkcall); + if (SvMAGICAL((SV*)cv)) + mg_free_type((SV*)cv, PERL_MAGIC_checkcall); } else { - MAGIC *callmg; - sv_magic((SV*)cv, &PL_sv_undef, PERL_MAGIC_checkcall, NULL, 0); - callmg = mg_find((SV*)cv, PERL_MAGIC_checkcall); - assert(callmg); - if (callmg->mg_flags & MGf_REFCOUNTED) { - SvREFCNT_dec(callmg->mg_obj); - callmg->mg_flags &= ~MGf_REFCOUNTED; - } - callmg->mg_ptr = FPTR2DPTR(char *, ckfun); - callmg->mg_obj = ckobj; - if (ckobj != (SV*)cv) { - SvREFCNT_inc_simple_void_NN(ckobj); - callmg->mg_flags |= MGf_REFCOUNTED; - } - callmg->mg_flags = (callmg->mg_flags &~ MGf_REQUIRE_GV) - | (U8)(ckflags & MGf_REQUIRE_GV) | MGf_COPY; + MAGIC *callmg; + sv_magic((SV*)cv, &PL_sv_undef, PERL_MAGIC_checkcall, NULL, 0); + callmg = mg_find((SV*)cv, PERL_MAGIC_checkcall); + assert(callmg); + if (callmg->mg_flags & MGf_REFCOUNTED) { + SvREFCNT_dec(callmg->mg_obj); + callmg->mg_flags &= ~MGf_REFCOUNTED; + } + callmg->mg_ptr = FPTR2DPTR(char *, ckfun); + callmg->mg_obj = ckobj; + if (ckobj != (SV*)cv) { + SvREFCNT_inc_simple_void_NN(ckobj); + callmg->mg_flags |= MGf_REFCOUNTED; + } + callmg->mg_flags = (callmg->mg_flags &~ MGf_REQUIRE_GV) + | (U8)(ckflags & MGf_REQUIRE_GV) | MGf_COPY; } } @@ -15063,7 +15459,7 @@ Perl_ck_subr(pTHX_ OP *o) aop = cUNOPx(o)->op_first; if (!OpHAS_SIBLING(aop)) - aop = cUNOPx(aop)->op_first; + aop = cUNOPx(aop)->op_first; aop = OpSIBLING(aop); for (cvop = aop; OpHAS_SIBLING(cvop); cvop = OpSIBLING(cvop)) ; cv = rv2cv_op_cv(cvop, RV2CVOPCV_MARK_EARLY); @@ -15072,77 +15468,77 @@ Perl_ck_subr(pTHX_ OP *o) o->op_private &= ~1; o->op_private |= (PL_hints & HINT_STRICT_REFS); if (PERLDB_SUB && PL_curstash != PL_debstash) - o->op_private |= OPpENTERSUB_DB; + o->op_private |= OPpENTERSUB_DB; switch (cvop->op_type) { - case OP_RV2CV: - o->op_private |= (cvop->op_private & OPpENTERSUB_AMPER); - op_null(cvop); - break; - case OP_METHOD: - case OP_METHOD_NAMED: - case OP_METHOD_SUPER: - case OP_METHOD_REDIR: - case OP_METHOD_REDIR_SUPER: - o->op_flags |= OPf_REF; - if (aop->op_type == OP_CONST) { - aop->op_private &= ~OPpCONST_STRICT; - const_class = &cSVOPx(aop)->op_sv; - } - else if (aop->op_type == OP_LIST) { - OP * const sib = OpSIBLING(((UNOP*)aop)->op_first); - if (sib && sib->op_type == OP_CONST) { - sib->op_private &= ~OPpCONST_STRICT; - const_class = &cSVOPx(sib)->op_sv; - } - } - /* make class name a shared cow string to speedup method calls */ - /* constant string might be replaced with object, f.e. bigint */ - if (const_class && SvPOK(*const_class)) { - STRLEN len; - const char* str = SvPV(*const_class, len); - if (len) { - SV* const shared = newSVpvn_share( - str, SvUTF8(*const_class) + case OP_RV2CV: + o->op_private |= (cvop->op_private & OPpENTERSUB_AMPER); + op_null(cvop); + break; + case OP_METHOD: + case OP_METHOD_NAMED: + case OP_METHOD_SUPER: + case OP_METHOD_REDIR: + case OP_METHOD_REDIR_SUPER: + o->op_flags |= OPf_REF; + if (aop->op_type == OP_CONST) { + aop->op_private &= ~OPpCONST_STRICT; + const_class = &cSVOPx(aop)->op_sv; + } + else if (aop->op_type == OP_LIST) { + OP * const sib = OpSIBLING(((UNOP*)aop)->op_first); + if (sib && sib->op_type == OP_CONST) { + sib->op_private &= ~OPpCONST_STRICT; + const_class = &cSVOPx(sib)->op_sv; + } + } + /* make class name a shared cow string to speedup method calls */ + /* constant string might be replaced with object, f.e. bigint */ + if (const_class && SvPOK(*const_class)) { + STRLEN len; + const char* str = SvPV(*const_class, len); + if (len) { + SV* const shared = newSVpvn_share( + str, SvUTF8(*const_class) ? -(SSize_t)len : (SSize_t)len, 0 - ); + ); if (SvREADONLY(*const_class)) SvREADONLY_on(shared); - SvREFCNT_dec(*const_class); - *const_class = shared; - } - } - break; + SvREFCNT_dec(*const_class); + *const_class = shared; + } + } + break; } if (!cv) { - S_entersub_alloc_targ(aTHX_ o); - return ck_entersub_args_list(o); + S_entersub_alloc_targ(aTHX_ o); + return ck_entersub_args_list(o); } else { - Perl_call_checker ckfun; - SV *ckobj; - U32 ckflags; - cv_get_call_checker_flags(cv, 0, &ckfun, &ckobj, &ckflags); - if (CvISXSUB(cv) || !CvROOT(cv)) - S_entersub_alloc_targ(aTHX_ o); - if (!namegv) { - /* The original call checker API guarantees that a GV will - be provided with the right name. So, if the old API was - used (or the REQUIRE_GV flag was passed), we have to reify - the CV’s GV, unless this is an anonymous sub. This is not - ideal for lexical subs, as its stringification will include - the package. But it is the best we can do. */ - if (ckflags & CALL_CHECKER_REQUIRE_GV) { - if (!CvANON(cv) && (!CvNAMED(cv) || CvNAME_HEK(cv))) - namegv = CvGV(cv); - } - else namegv = MUTABLE_GV(cv); - /* After a syntax error in a lexical sub, the cv that - rv2cv_op_cv returns may be a nameless stub. */ - if (!namegv) return ck_entersub_args_list(o); - - } - return ckfun(aTHX_ o, namegv, ckobj); + Perl_call_checker ckfun; + SV *ckobj; + U32 ckflags; + cv_get_call_checker_flags(cv, 0, &ckfun, &ckobj, &ckflags); + if (CvISXSUB(cv) || !CvROOT(cv)) + S_entersub_alloc_targ(aTHX_ o); + if (!namegv) { + /* The original call checker API guarantees that a GV will + be provided with the right name. So, if the old API was + used (or the REQUIRE_GV flag was passed), we have to reify + the CV’s GV, unless this is an anonymous sub. This is not + ideal for lexical subs, as its stringification will include + the package. But it is the best we can do. */ + if (ckflags & CALL_CHECKER_REQUIRE_GV) { + if (!CvANON(cv) && (!CvNAMED(cv) || CvNAME_HEK(cv))) + namegv = CvGV(cv); + } + else namegv = MUTABLE_GV(cv); + /* After a syntax error in a lexical sub, the cv that + rv2cv_op_cv returns may be a nameless stub. */ + if (!namegv) return ck_entersub_args_list(o); + + } + return ckfun(aTHX_ o, namegv, ckobj); } } @@ -15159,10 +15555,10 @@ Perl_ck_svconst(pTHX_ OP *o) that constant, mark the constant as COWable here, if it is not already read-only. */ if (!SvREADONLY(sv) && !SvIsCOW(sv) && SvCANCOW(sv)) { - SvIsCOW_on(sv); - CowREFCNT(sv) = 0; + SvIsCOW_on(sv); + CowREFCNT(sv) = 0; # ifdef PERL_DEBUG_READONLY_COW - sv_buf_to_ro(sv); + sv_buf_to_ro(sv); # endif } #endif @@ -15176,17 +15572,20 @@ Perl_ck_trunc(pTHX_ OP *o) PERL_ARGS_ASSERT_CK_TRUNC; if (o->op_flags & OPf_KIDS) { - SVOP *kid = (SVOP*)cUNOPo->op_first; - - if (kid->op_type == OP_NULL) - kid = (SVOP*)OpSIBLING(kid); - if (kid && kid->op_type == OP_CONST && - (kid->op_private & OPpCONST_BARE) && - !kid->op_folded) - { - o->op_flags |= OPf_SPECIAL; - kid->op_private &= ~OPpCONST_STRICT; - } + SVOP *kid = (SVOP*)cUNOPo->op_first; + + if (kid->op_type == OP_NULL) + kid = (SVOP*)OpSIBLING(kid); + if (kid && kid->op_type == OP_CONST && + (kid->op_private & OPpCONST_BARE) && + !kid->op_folded) + { + o->op_flags |= OPf_SPECIAL; + kid->op_private &= ~OPpCONST_STRICT; + if (!FEATURE_BAREWORD_FILEHANDLES_IS_ENABLED) { + no_bareword_filehandle(SvPVX(cSVOPx_sv(kid))); + } + } } return ck_fun(o); } @@ -15198,15 +15597,15 @@ Perl_ck_substr(pTHX_ OP *o) o = ck_fun(o); if ((o->op_flags & OPf_KIDS) && (o->op_private == 4)) { - OP *kid = cLISTOPo->op_first; + OP *kid = cLISTOPo->op_first; - if (kid->op_type == OP_NULL) - kid = OpSIBLING(kid); - if (kid) - /* Historically, substr(delete $foo{bar},...) has been allowed - with 4-arg substr. Keep it working by applying entersub - lvalue context. */ - op_lvalue(kid, OP_ENTERSUB); + if (kid->op_type == OP_NULL) + kid = OpSIBLING(kid); + if (kid) + /* Historically, substr(delete $foo{bar},...) has been allowed + with 4-arg substr. Keep it working by applying entersub + lvalue context. */ + op_lvalue(kid, OP_ENTERSUB); } return o; @@ -15225,42 +15624,107 @@ Perl_ck_tell(pTHX_ OP *o) return o; } +PERL_STATIC_INLINE OP * +S_last_non_null_kid(OP *o) { + OP *last = NULL; + if (cUNOPo->op_flags & OPf_KIDS) { + OP *k = cLISTOPo->op_first; + while (k) { + if (k->op_type != OP_NULL) { + last = k; + } + k = OpSIBLING(k); + } + } + + return last; +} + OP * Perl_ck_each(pTHX_ OP *o) { - dVAR; OP *kid = o->op_flags & OPf_KIDS ? cUNOPo->op_first : NULL; const unsigned orig_type = o->op_type; PERL_ARGS_ASSERT_CK_EACH; if (kid) { - switch (kid->op_type) { - case OP_PADHV: - case OP_RV2HV: - break; - case OP_PADAV: - case OP_RV2AV: + switch (kid->op_type) { + case OP_PADHV: + break; + + case OP_RV2HV: + /* Catch out an anonhash here, since the behaviour might be + * confusing. + * + * The typical tree is: + * + * rv2hv + * scope + * null + * anonhash + * + * If the contents of the block is more complex you might get: + * + * rv2hv + * leave + * enter + * ... + * anonhash + * + * Similarly for the anonlist version below. + */ + if (orig_type == OP_EACH && + ckWARN(WARN_SYNTAX) && + (cUNOPx(kid)->op_flags & OPf_KIDS) && + ( cUNOPx(kid)->op_first->op_type == OP_SCOPE || + cUNOPx(kid)->op_first->op_type == OP_LEAVE) && + (cUNOPx(kid)->op_first->op_flags & OPf_KIDS)) { + /* look for last non-null kid, since we might have: + each %{ some code ; +{ anon hash } } + */ + OP *k = S_last_non_null_kid(cUNOPx(kid)->op_first); + if (k && k->op_type == OP_ANONHASH) { + /* diag_listed_as: each on anonymous %s will always start from the beginning */ + Perl_warner(aTHX_ packWARN(WARN_SYNTAX), "each on anonymous hash will always start from the beginning"); + } + } + break; + case OP_RV2AV: + if (orig_type == OP_EACH && + ckWARN(WARN_SYNTAX) && + (cUNOPx(kid)->op_flags & OPf_KIDS) && + (cUNOPx(kid)->op_first->op_type == OP_SCOPE || + cUNOPx(kid)->op_first->op_type == OP_LEAVE) && + (cUNOPx(kid)->op_first->op_flags & OPf_KIDS)) { + OP *k = S_last_non_null_kid(cUNOPx(kid)->op_first); + if (k && k->op_type == OP_ANONLIST) { + /* diag_listed_as: each on anonymous %s will always start from the beginning */ + Perl_warner(aTHX_ packWARN(WARN_SYNTAX), "each on anonymous array will always start from the beginning"); + } + } + /* FALLTHROUGH */ + case OP_PADAV: OpTYPE_set(o, orig_type == OP_EACH ? OP_AEACH : orig_type == OP_KEYS ? OP_AKEYS : OP_AVALUES); - break; - case OP_CONST: - if (kid->op_private == OPpCONST_BARE - || !SvROK(cSVOPx_sv(kid)) - || ( SvTYPE(SvRV(cSVOPx_sv(kid))) != SVt_PVAV - && SvTYPE(SvRV(cSVOPx_sv(kid))) != SVt_PVHV ) - ) - goto bad; + break; + case OP_CONST: + if (kid->op_private == OPpCONST_BARE + || !SvROK(cSVOPx_sv(kid)) + || ( SvTYPE(SvRV(cSVOPx_sv(kid))) != SVt_PVAV + && SvTYPE(SvRV(cSVOPx_sv(kid))) != SVt_PVHV ) + ) + goto bad; /* FALLTHROUGH */ - default: + default: qerror(Perl_mess(aTHX_ "Experimental %s on scalar is now forbidden", PL_op_desc[orig_type])); bad: bad_type_pv(1, "hash or array", o, kid); return o; - } + } } return ck_fun(o); } @@ -15284,7 +15748,7 @@ Perl_ck_length(pTHX_ OP *o) case OP_PADAV: case OP_RV2HV: case OP_RV2AV: - name = S_op_varname(aTHX_ kid); + name = S_op_varname(aTHX_ kid); break; default: return o; @@ -15838,19 +16302,19 @@ S_inplace_aassign(pTHX_ OP *o) { modop = OpSIBLING(modop_pushmark); if (modop->op_type != OP_SORT && modop->op_type != OP_REVERSE) - return; + return; /* no other operation except sort/reverse */ if (OpHAS_SIBLING(modop)) - return; + return; assert(cUNOPx(modop)->op_first->op_type == OP_PUSHMARK); if (!(oright = OpSIBLING(cUNOPx(modop)->op_first))) return; if (modop->op_flags & OPf_STACKED) { - /* skip sort subroutine/block */ - assert(oright->op_type == OP_NULL); - oright = OpSIBLING(oright); + /* skip sort subroutine/block */ + assert(oright->op_type == OP_NULL); + oright = OpSIBLING(oright); } assert(OpSIBLING(cUNOPo->op_first)->op_type == OP_NULL); @@ -15860,31 +16324,31 @@ S_inplace_aassign(pTHX_ OP *o) { /* Check the lhs is an array */ if (!oleft || - (oleft->op_type != OP_RV2AV && oleft->op_type != OP_PADAV) - || OpHAS_SIBLING(oleft) - || (oleft->op_private & OPpLVAL_INTRO) + (oleft->op_type != OP_RV2AV && oleft->op_type != OP_PADAV) + || OpHAS_SIBLING(oleft) + || (oleft->op_private & OPpLVAL_INTRO) ) - return; + return; /* Only one thing on the rhs */ if (OpHAS_SIBLING(oright)) - return; + return; /* check the array is the same on both sides */ if (oleft->op_type == OP_RV2AV) { - if (oright->op_type != OP_RV2AV - || !cUNOPx(oright)->op_first - || cUNOPx(oright)->op_first->op_type != OP_GV - || cUNOPx(oleft )->op_first->op_type != OP_GV - || cGVOPx_gv(cUNOPx(oleft)->op_first) != - cGVOPx_gv(cUNOPx(oright)->op_first) - ) - return; + if (oright->op_type != OP_RV2AV + || !cUNOPx(oright)->op_first + || cUNOPx(oright)->op_first->op_type != OP_GV + || cUNOPx(oleft )->op_first->op_type != OP_GV + || cGVOPx_gv(cUNOPx(oleft)->op_first) != + cGVOPx_gv(cUNOPx(oright)->op_first) + ) + return; } else if (oright->op_type != OP_PADAV - || oright->op_targ != oleft->op_targ + || oright->op_targ != oleft->op_targ ) - return; + return; /* This actually is an inplace assignment */ @@ -15897,7 +16361,7 @@ S_inplace_aassign(pTHX_ OP *o) { op_null(o); op_null(oleft_pushmark); if (oleft->op_type == OP_RV2AV && cUNOPx(oleft)->op_first) - op_null(cUNOPx(oleft)->op_first); + op_null(cUNOPx(oleft)->op_first); op_null(oleft); } @@ -15923,7 +16387,6 @@ S_inplace_aassign(pTHX_ OP *o) { STATIC void S_maybe_multideref(pTHX_ OP *start, OP *orig_o, UV orig_action, U8 hints) { - dVAR; int pass; UNOP_AUX_item *arg_buf = NULL; bool reset_start_targ = FALSE; /* start->op_targ needs zeroing */ @@ -16230,7 +16693,7 @@ S_maybe_multideref(pTHX_ OP *start, OP *orig_o, UV orig_action, U8 hints) if ( o->op_type != OP_AELEM || (o->op_private & - (OPpLVAL_INTRO|OPpLVAL_DEFER|OPpDEREF|OPpMAYBE_LVSUB)) + (OPpLVAL_INTRO|OPpLVAL_DEFER|OPpDEREF|OPpMAYBE_LVSUB)) ) maybe_aelemfast = FALSE; @@ -16701,8 +17164,8 @@ S_check_for_bool_cxt(OP*o, bool safe_and, U8 bool_flag, U8 maybe_flag) OP **defer = defer_queue[defer_base]; \ CALL_RPEEP(*defer); \ S_prune_chain_head(defer); \ - defer_base = (defer_base + 1) % MAX_DEFERRED; \ - defer_ix--; \ + defer_base = (defer_base + 1) % MAX_DEFERRED; \ + defer_ix--; \ } \ defer_queue[(defer_base + ++defer_ix) % MAX_DEFERRED] = &(o); \ } STMT_END @@ -16718,7 +17181,6 @@ S_check_for_bool_cxt(OP*o, bool safe_and, U8 bool_flag, U8 maybe_flag) void Perl_rpeep(pTHX_ OP *o) { - dVAR; OP* oldop = NULL; OP* oldoldop = NULL; OP** defer_queue[MAX_DEFERRED]; /* small queue of deferred branches */ @@ -16726,7 +17188,7 @@ Perl_rpeep(pTHX_ OP *o) int defer_ix = -1; if (!o || o->op_opt) - return; + return; assert(o->op_type != OP_FREED); @@ -16734,17 +17196,17 @@ Perl_rpeep(pTHX_ OP *o) SAVEOP(); SAVEVPTR(PL_curcop); for (;; o = o->op_next) { - if (o && o->op_opt) - o = NULL; - if (!o) { - while (defer_ix >= 0) { + if (o && o->op_opt) + o = NULL; + if (!o) { + while (defer_ix >= 0) { OP **defer = defer_queue[(defer_base + defer_ix--) % MAX_DEFERRED]; CALL_RPEEP(*defer); S_prune_chain_head(defer); } - break; - } + break; + } redo: @@ -16752,10 +17214,10 @@ Perl_rpeep(pTHX_ OP *o) assert(!oldoldop || oldoldop->op_next == oldop); assert(!oldop || oldop->op_next == o); - /* By default, this op has now been optimised. A couple of cases below - clear this again. */ - o->op_opt = 1; - PL_op = o; + /* By default, this op has now been optimised. A couple of cases below + clear this again. */ + o->op_opt = 1; + PL_op = o; /* look for a series of 1 or more aggregate derefs, e.g. * $a[1]{foo}[$i]{$k} @@ -16937,90 +17399,90 @@ Perl_rpeep(pTHX_ OP *o) } - switch (o->op_type) { - case OP_DBSTATE: - PL_curcop = ((COP*)o); /* for warnings */ - break; - case OP_NEXTSTATE: - PL_curcop = ((COP*)o); /* for warnings */ - - /* Optimise a "return ..." at the end of a sub to just be "...". - * This saves 2 ops. Before: - * 1 <;> nextstate(main 1 -e:1) v ->2 - * 4 <@> return K ->5 - * 2 <0> pushmark s ->3 - * - <1> ex-rv2sv sK/1 ->4 - * 3 <#> gvsv[*cat] s ->4 - * - * After: - * - <@> return K ->- - * - <0> pushmark s ->2 - * - <1> ex-rv2sv sK/1 ->- - * 2 <$> gvsv(*cat) s ->3 - */ - { - OP *next = o->op_next; - OP *sibling = OpSIBLING(o); - if ( OP_TYPE_IS(next, OP_PUSHMARK) - && OP_TYPE_IS(sibling, OP_RETURN) - && OP_TYPE_IS(sibling->op_next, OP_LINESEQ) - && ( OP_TYPE_IS(sibling->op_next->op_next, OP_LEAVESUB) - ||OP_TYPE_IS(sibling->op_next->op_next, - OP_LEAVESUBLV)) - && cUNOPx(sibling)->op_first == next - && OpHAS_SIBLING(next) && OpSIBLING(next)->op_next - && next->op_next - ) { - /* Look through the PUSHMARK's siblings for one that - * points to the RETURN */ - OP *top = OpSIBLING(next); - while (top && top->op_next) { - if (top->op_next == sibling) { - top->op_next = sibling->op_next; - o->op_next = next->op_next; - break; - } - top = OpSIBLING(top); - } - } - } - - /* Optimise 'my $x; my $y;' into 'my ($x, $y);' + switch (o->op_type) { + case OP_DBSTATE: + PL_curcop = ((COP*)o); /* for warnings */ + break; + case OP_NEXTSTATE: + PL_curcop = ((COP*)o); /* for warnings */ + + /* Optimise a "return ..." at the end of a sub to just be "...". + * This saves 2 ops. Before: + * 1 <;> nextstate(main 1 -e:1) v ->2 + * 4 <@> return K ->5 + * 2 <0> pushmark s ->3 + * - <1> ex-rv2sv sK/1 ->4 + * 3 <#> gvsv[*cat] s ->4 + * + * After: + * - <@> return K ->- + * - <0> pushmark s ->2 + * - <1> ex-rv2sv sK/1 ->- + * 2 <$> gvsv(*cat) s ->3 + */ + { + OP *next = o->op_next; + OP *sibling = OpSIBLING(o); + if ( OP_TYPE_IS(next, OP_PUSHMARK) + && OP_TYPE_IS(sibling, OP_RETURN) + && OP_TYPE_IS(sibling->op_next, OP_LINESEQ) + && ( OP_TYPE_IS(sibling->op_next->op_next, OP_LEAVESUB) + ||OP_TYPE_IS(sibling->op_next->op_next, + OP_LEAVESUBLV)) + && cUNOPx(sibling)->op_first == next + && OpHAS_SIBLING(next) && OpSIBLING(next)->op_next + && next->op_next + ) { + /* Look through the PUSHMARK's siblings for one that + * points to the RETURN */ + OP *top = OpSIBLING(next); + while (top && top->op_next) { + if (top->op_next == sibling) { + top->op_next = sibling->op_next; + o->op_next = next->op_next; + break; + } + top = OpSIBLING(top); + } + } + } + + /* Optimise 'my $x; my $y;' into 'my ($x, $y);' + * + * This latter form is then suitable for conversion into padrange + * later on. Convert: + * + * nextstate1 -> padop1 -> nextstate2 -> padop2 -> nextstate3 + * + * into: * - * This latter form is then suitable for conversion into padrange - * later on. Convert: - * - * nextstate1 -> padop1 -> nextstate2 -> padop2 -> nextstate3 - * - * into: - * - * nextstate1 -> listop -> nextstate3 - * / \ - * pushmark -> padop1 -> padop2 - */ - if (o->op_next && ( - o->op_next->op_type == OP_PADSV - || o->op_next->op_type == OP_PADAV - || o->op_next->op_type == OP_PADHV - ) - && !(o->op_next->op_private & ~OPpLVAL_INTRO) - && o->op_next->op_next && o->op_next->op_next->op_type == OP_NEXTSTATE - && o->op_next->op_next->op_next && ( - o->op_next->op_next->op_next->op_type == OP_PADSV - || o->op_next->op_next->op_next->op_type == OP_PADAV - || o->op_next->op_next->op_next->op_type == OP_PADHV - ) - && !(o->op_next->op_next->op_next->op_private & ~OPpLVAL_INTRO) - && o->op_next->op_next->op_next->op_next && o->op_next->op_next->op_next->op_next->op_type == OP_NEXTSTATE - && (!CopLABEL((COP*)o)) /* Don't mess with labels */ - && (!CopLABEL((COP*)o->op_next->op_next)) /* ... */ - ) { - OP *pad1, *ns2, *pad2, *ns3, *newop, *newpm; - - pad1 = o->op_next; - ns2 = pad1->op_next; - pad2 = ns2->op_next; - ns3 = pad2->op_next; + * nextstate1 -> listop -> nextstate3 + * / \ + * pushmark -> padop1 -> padop2 + */ + if (o->op_next && ( + o->op_next->op_type == OP_PADSV + || o->op_next->op_type == OP_PADAV + || o->op_next->op_type == OP_PADHV + ) + && !(o->op_next->op_private & ~OPpLVAL_INTRO) + && o->op_next->op_next && o->op_next->op_next->op_type == OP_NEXTSTATE + && o->op_next->op_next->op_next && ( + o->op_next->op_next->op_next->op_type == OP_PADSV + || o->op_next->op_next->op_next->op_type == OP_PADAV + || o->op_next->op_next->op_next->op_type == OP_PADHV + ) + && !(o->op_next->op_next->op_next->op_private & ~OPpLVAL_INTRO) + && o->op_next->op_next->op_next->op_next && o->op_next->op_next->op_next->op_next->op_type == OP_NEXTSTATE + && (!CopLABEL((COP*)o)) /* Don't mess with labels */ + && (!CopLABEL((COP*)o->op_next->op_next)) /* ... */ + ) { + OP *pad1, *ns2, *pad2, *ns3, *newop, *newpm; + + pad1 = o->op_next; + ns2 = pad1->op_next; + pad2 = ns2->op_next; + ns3 = pad2->op_next; /* we assume here that the op_next chain is the same as * the op_sibling chain */ @@ -17038,35 +17500,35 @@ Perl_rpeep(pTHX_ OP *o) /* create new listop, with children consisting of: * a new pushmark, pad1, pad2. */ - newop = newLISTOP(OP_LIST, 0, pad1, pad2); - newop->op_flags |= OPf_PARENS; - newop->op_flags = (newop->op_flags & ~OPf_WANT) | OPf_WANT_VOID; + newop = newLISTOP(OP_LIST, 0, pad1, pad2); + newop->op_flags |= OPf_PARENS; + newop->op_flags = (newop->op_flags & ~OPf_WANT) | OPf_WANT_VOID; /* insert newop between o and ns3 */ op_sibling_splice(NULL, o, 0, newop); /*fixup op_next chain */ newpm = cUNOPx(newop)->op_first; /* pushmark */ - o ->op_next = newpm; - newpm->op_next = pad1; - pad1 ->op_next = pad2; - pad2 ->op_next = newop; /* listop */ - newop->op_next = ns3; - - /* Ensure pushmark has this flag if padops do */ - if (pad1->op_flags & OPf_MOD && pad2->op_flags & OPf_MOD) { - newpm->op_flags |= OPf_MOD; - } - - break; - } - - /* Two NEXTSTATEs in a row serve no purpose. Except if they happen - to carry two labels. For now, take the easier option, and skip - this optimisation if the first NEXTSTATE has a label. */ - if (!CopLABEL((COP*)o) && !PERLDB_NOOPT) { - OP *nextop = o->op_next; - while (nextop) { + o ->op_next = newpm; + newpm->op_next = pad1; + pad1 ->op_next = pad2; + pad2 ->op_next = newop; /* listop */ + newop->op_next = ns3; + + /* Ensure pushmark has this flag if padops do */ + if (pad1->op_flags & OPf_MOD && pad2->op_flags & OPf_MOD) { + newpm->op_flags |= OPf_MOD; + } + + break; + } + + /* Two NEXTSTATEs in a row serve no purpose. Except if they happen + to carry two labels. For now, take the easier option, and skip + this optimisation if the first NEXTSTATE has a label. */ + if (!CopLABEL((COP*)o) && !PERLDB_NOOPT) { + OP *nextop = o->op_next; + while (nextop) { switch (nextop->op_type) { case OP_NULL: case OP_SCALAR: @@ -17078,61 +17540,61 @@ Perl_rpeep(pTHX_ OP *o) break; } - if (nextop && (nextop->op_type == OP_NEXTSTATE)) { - op_null(o); - if (oldop) - oldop->op_next = nextop; + if (nextop && (nextop->op_type == OP_NEXTSTATE)) { + op_null(o); + if (oldop) + oldop->op_next = nextop; o = nextop; - /* Skip (old)oldop assignment since the current oldop's - op_next already points to the next op. */ - goto redo; - } - } - break; - - case OP_CONCAT: - if (o->op_next && o->op_next->op_type == OP_STRINGIFY) { - if (o->op_next->op_private & OPpTARGET_MY) { - if (o->op_flags & OPf_STACKED) /* chained concats */ - break; /* ignore_optimization */ - else { - /* assert(PL_opargs[o->op_type] & OA_TARGLEX); */ - o->op_targ = o->op_next->op_targ; - o->op_next->op_targ = 0; - o->op_private |= OPpTARGET_MY; - } - } - op_null(o->op_next); - } - break; - case OP_STUB: - if ((o->op_flags & OPf_WANT) != OPf_WANT_LIST) { - break; /* Scalar stub must produce undef. List stub is noop */ - } - goto nothin; - case OP_NULL: - if (o->op_targ == OP_NEXTSTATE - || o->op_targ == OP_DBSTATE) - { - PL_curcop = ((COP*)o); - } - /* XXX: We avoid setting op_seq here to prevent later calls - to rpeep() from mistakenly concluding that optimisation - has already occurred. This doesn't fix the real problem, - though (See 20010220.007 (#5874)). AMS 20010719 */ - /* op_seq functionality is now replaced by op_opt */ - o->op_opt = 0; - /* FALLTHROUGH */ - case OP_SCALAR: - case OP_LINESEQ: - case OP_SCOPE: - nothin: - if (oldop) { - oldop->op_next = o->op_next; - o->op_opt = 0; - continue; - } - break; + /* Skip (old)oldop assignment since the current oldop's + op_next already points to the next op. */ + goto redo; + } + } + break; + + case OP_CONCAT: + if (o->op_next && o->op_next->op_type == OP_STRINGIFY) { + if (o->op_next->op_private & OPpTARGET_MY) { + if (o->op_flags & OPf_STACKED) /* chained concats */ + break; /* ignore_optimization */ + else { + /* assert(PL_opargs[o->op_type] & OA_TARGLEX); */ + o->op_targ = o->op_next->op_targ; + o->op_next->op_targ = 0; + o->op_private |= OPpTARGET_MY; + } + } + op_null(o->op_next); + } + break; + case OP_STUB: + if ((o->op_flags & OPf_WANT) != OPf_WANT_LIST) { + break; /* Scalar stub must produce undef. List stub is noop */ + } + goto nothin; + case OP_NULL: + if (o->op_targ == OP_NEXTSTATE + || o->op_targ == OP_DBSTATE) + { + PL_curcop = ((COP*)o); + } + /* XXX: We avoid setting op_seq here to prevent later calls + to rpeep() from mistakenly concluding that optimisation + has already occurred. This doesn't fix the real problem, + though (See 20010220.007 (#5874)). AMS 20010719 */ + /* op_seq functionality is now replaced by op_opt */ + o->op_opt = 0; + /* FALLTHROUGH */ + case OP_SCALAR: + case OP_LINESEQ: + case OP_SCOPE: + nothin: + if (oldop) { + oldop->op_next = o->op_next; + o->op_opt = 0; + continue; + } + break; case OP_PUSHMARK: @@ -17427,13 +17889,13 @@ Perl_rpeep(pTHX_ OP *o) break; } - case OP_RV2AV: + case OP_RV2AV: if ((o->op_flags & OPf_WANT) == OPf_WANT_SCALAR) S_check_for_bool_cxt(o, 1, OPpTRUEBOOL, 0); break; - case OP_RV2HV: - case OP_PADHV: + case OP_RV2HV: + case OP_PADHV: /*'keys %h' in void or scalar context: skip the OP_KEYS * and perform the functionality directly in the RV2HV/PADHV * op @@ -17469,13 +17931,13 @@ Perl_rpeep(pTHX_ OP *o) if (o->op_type != OP_PADHV) break; /* FALLTHROUGH */ - case OP_PADAV: + case OP_PADAV: if ( o->op_type == OP_PADAV && (o->op_flags & OPf_WANT) == OPf_WANT_SCALAR ) S_check_for_bool_cxt(o, 1, OPpTRUEBOOL, 0); /* FALLTHROUGH */ - case OP_PADSV: + case OP_PADSV: /* Skip over state($x) in void context. */ if (oldop && o->op_private == (OPpPAD_STATE|OPpLVAL_INTRO) && (o->op_flags & OPf_WANT) == OPf_WANT_VOID) @@ -17486,174 +17948,181 @@ Perl_rpeep(pTHX_ OP *o) if (o->op_type != OP_PADAV) break; /* FALLTHROUGH */ - case OP_GV: - if (o->op_type == OP_PADAV || o->op_next->op_type == OP_RV2AV) { - OP* const pop = (o->op_type == OP_PADAV) ? - o->op_next : o->op_next->op_next; - IV i; - if (pop && pop->op_type == OP_CONST && - ((PL_op = pop->op_next)) && - pop->op_next->op_type == OP_AELEM && - !(pop->op_next->op_private & - (OPpLVAL_INTRO|OPpLVAL_DEFER|OPpDEREF|OPpMAYBE_LVSUB)) && - (i = SvIV(((SVOP*)pop)->op_sv)) >= -128 && i <= 127) - { - GV *gv; - if (cSVOPx(pop)->op_private & OPpCONST_STRICT) - no_bareword_allowed(pop); - if (o->op_type == OP_GV) - op_null(o->op_next); - op_null(pop->op_next); - op_null(pop); - o->op_flags |= pop->op_next->op_flags & OPf_MOD; - o->op_next = pop->op_next->op_next; - o->op_ppaddr = PL_ppaddr[OP_AELEMFAST]; - o->op_private = (U8)i; - if (o->op_type == OP_GV) { - gv = cGVOPo_gv; - GvAVn(gv); - o->op_type = OP_AELEMFAST; - } - else - o->op_type = OP_AELEMFAST_LEX; - } - if (o->op_type != OP_GV) - break; - } - - /* Remove $foo from the op_next chain in void context. */ - if (oldop - && ( o->op_next->op_type == OP_RV2SV - || o->op_next->op_type == OP_RV2AV - || o->op_next->op_type == OP_RV2HV ) - && (o->op_next->op_flags & OPf_WANT) == OPf_WANT_VOID - && !(o->op_next->op_private & OPpLVAL_INTRO)) - { - oldop->op_next = o->op_next->op_next; - /* Reprocess the previous op if it is a nextstate, to - allow double-nextstate optimisation. */ - redo_nextstate: - if (oldop->op_type == OP_NEXTSTATE) { - oldop->op_opt = 0; - o = oldop; - oldop = oldoldop; - oldoldop = NULL; - goto redo; - } - o = oldop->op_next; + case OP_GV: + if (o->op_type == OP_PADAV || o->op_next->op_type == OP_RV2AV) { + OP* const pop = (o->op_type == OP_PADAV) ? + o->op_next : o->op_next->op_next; + IV i; + if (pop && pop->op_type == OP_CONST && + ((PL_op = pop->op_next)) && + pop->op_next->op_type == OP_AELEM && + !(pop->op_next->op_private & + (OPpLVAL_INTRO|OPpLVAL_DEFER|OPpDEREF|OPpMAYBE_LVSUB)) && + (i = SvIV(((SVOP*)pop)->op_sv)) >= -128 && i <= 127) + { + GV *gv; + if (cSVOPx(pop)->op_private & OPpCONST_STRICT) + no_bareword_allowed(pop); + if (o->op_type == OP_GV) + op_null(o->op_next); + op_null(pop->op_next); + op_null(pop); + o->op_flags |= pop->op_next->op_flags & OPf_MOD; + o->op_next = pop->op_next->op_next; + o->op_ppaddr = PL_ppaddr[OP_AELEMFAST]; + o->op_private = (U8)i; + if (o->op_type == OP_GV) { + gv = cGVOPo_gv; + GvAVn(gv); + o->op_type = OP_AELEMFAST; + } + else + o->op_type = OP_AELEMFAST_LEX; + } + if (o->op_type != OP_GV) + break; + } + + /* Remove $foo from the op_next chain in void context. */ + if (oldop + && ( o->op_next->op_type == OP_RV2SV + || o->op_next->op_type == OP_RV2AV + || o->op_next->op_type == OP_RV2HV ) + && (o->op_next->op_flags & OPf_WANT) == OPf_WANT_VOID + && !(o->op_next->op_private & OPpLVAL_INTRO)) + { + oldop->op_next = o->op_next->op_next; + /* Reprocess the previous op if it is a nextstate, to + allow double-nextstate optimisation. */ + redo_nextstate: + if (oldop->op_type == OP_NEXTSTATE) { + oldop->op_opt = 0; + o = oldop; + oldop = oldoldop; + oldoldop = NULL; + goto redo; + } + o = oldop->op_next; goto redo; - } - else if (o->op_next->op_type == OP_RV2SV) { - if (!(o->op_next->op_private & OPpDEREF)) { - op_null(o->op_next); - o->op_private |= o->op_next->op_private & (OPpLVAL_INTRO - | OPpOUR_INTRO); - o->op_next = o->op_next->op_next; + } + else if (o->op_next->op_type == OP_RV2SV) { + if (!(o->op_next->op_private & OPpDEREF)) { + op_null(o->op_next); + o->op_private |= o->op_next->op_private & (OPpLVAL_INTRO + | OPpOUR_INTRO); + o->op_next = o->op_next->op_next; OpTYPE_set(o, OP_GVSV); - } - } - else if (o->op_next->op_type == OP_READLINE - && o->op_next->op_next->op_type == OP_CONCAT - && (o->op_next->op_next->op_flags & OPf_STACKED)) - { - /* Turn "$a .= " into an OP_RCATLINE. AMS 20010917 */ + } + } + else if (o->op_next->op_type == OP_READLINE + && o->op_next->op_next->op_type == OP_CONCAT + && (o->op_next->op_next->op_flags & OPf_STACKED)) + { + /* Turn "$a .= " into an OP_RCATLINE. AMS 20010917 */ OpTYPE_set(o, OP_RCATLINE); - o->op_flags |= OPf_STACKED; - op_null(o->op_next->op_next); - op_null(o->op_next); - } + o->op_flags |= OPf_STACKED; + op_null(o->op_next->op_next); + op_null(o->op_next); + } - break; + break; case OP_NOT: break; case OP_AND: - case OP_OR: - case OP_DOR: - case OP_CMPCHAIN_AND: - while (cLOGOP->op_other->op_type == OP_NULL) - cLOGOP->op_other = cLOGOP->op_other->op_next; - while (o->op_next && ( o->op_type == o->op_next->op_type - || o->op_next->op_type == OP_NULL)) - o->op_next = o->op_next->op_next; - - /* If we're an OR and our next is an AND in void context, we'll - follow its op_other on short circuit, same for reverse. - We can't do this with OP_DOR since if it's true, its return - value is the underlying value which must be evaluated - by the next op. */ - if (o->op_next && - ( - (IS_AND_OP(o) && IS_OR_OP(o->op_next)) - || (IS_OR_OP(o) && IS_AND_OP(o->op_next)) - ) - && (o->op_next->op_flags & OPf_WANT) == OPf_WANT_VOID - ) { - o->op_next = ((LOGOP*)o->op_next)->op_other; - } - DEFER(cLOGOP->op_other); - o->op_opt = 1; - break; - - case OP_GREPWHILE: + case OP_OR: + case OP_DOR: + case OP_CMPCHAIN_AND: + case OP_PUSHDEFER: + while (cLOGOP->op_other->op_type == OP_NULL) + cLOGOP->op_other = cLOGOP->op_other->op_next; + while (o->op_next && ( o->op_type == o->op_next->op_type + || o->op_next->op_type == OP_NULL)) + o->op_next = o->op_next->op_next; + + /* If we're an OR and our next is an AND in void context, we'll + follow its op_other on short circuit, same for reverse. + We can't do this with OP_DOR since if it's true, its return + value is the underlying value which must be evaluated + by the next op. */ + if (o->op_next && + ( + (IS_AND_OP(o) && IS_OR_OP(o->op_next)) + || (IS_OR_OP(o) && IS_AND_OP(o->op_next)) + ) + && (o->op_next->op_flags & OPf_WANT) == OPf_WANT_VOID + ) { + o->op_next = ((LOGOP*)o->op_next)->op_other; + } + DEFER(cLOGOP->op_other); + o->op_opt = 1; + break; + + case OP_GREPWHILE: if ((o->op_flags & OPf_WANT) == OPf_WANT_SCALAR) S_check_for_bool_cxt(o, 1, OPpTRUEBOOL, 0); /* FALLTHROUGH */ - case OP_COND_EXPR: - case OP_MAPWHILE: - case OP_ANDASSIGN: - case OP_ORASSIGN: - case OP_DORASSIGN: - case OP_RANGE: - case OP_ONCE: - case OP_ARGDEFELEM: - while (cLOGOP->op_other->op_type == OP_NULL) - cLOGOP->op_other = cLOGOP->op_other->op_next; - DEFER(cLOGOP->op_other); - break; - - case OP_ENTERLOOP: - case OP_ENTERITER: - while (cLOOP->op_redoop->op_type == OP_NULL) - cLOOP->op_redoop = cLOOP->op_redoop->op_next; - while (cLOOP->op_nextop->op_type == OP_NULL) - cLOOP->op_nextop = cLOOP->op_nextop->op_next; - while (cLOOP->op_lastop->op_type == OP_NULL) - cLOOP->op_lastop = cLOOP->op_lastop->op_next; - /* a while(1) loop doesn't have an op_next that escapes the - * loop, so we have to explicitly follow the op_lastop to - * process the rest of the code */ - DEFER(cLOOP->op_lastop); - break; + case OP_COND_EXPR: + case OP_MAPWHILE: + case OP_ANDASSIGN: + case OP_ORASSIGN: + case OP_DORASSIGN: + case OP_RANGE: + case OP_ONCE: + case OP_ARGDEFELEM: + while (cLOGOP->op_other->op_type == OP_NULL) + cLOGOP->op_other = cLOGOP->op_other->op_next; + DEFER(cLOGOP->op_other); + break; + + case OP_ENTERLOOP: + case OP_ENTERITER: + while (cLOOP->op_redoop->op_type == OP_NULL) + cLOOP->op_redoop = cLOOP->op_redoop->op_next; + while (cLOOP->op_nextop->op_type == OP_NULL) + cLOOP->op_nextop = cLOOP->op_nextop->op_next; + while (cLOOP->op_lastop->op_type == OP_NULL) + cLOOP->op_lastop = cLOOP->op_lastop->op_next; + /* a while(1) loop doesn't have an op_next that escapes the + * loop, so we have to explicitly follow the op_lastop to + * process the rest of the code */ + DEFER(cLOOP->op_lastop); + break; case OP_ENTERTRY: - assert(cLOGOPo->op_other->op_type == OP_LEAVETRY); - DEFER(cLOGOPo->op_other); - break; + assert(cLOGOPo->op_other->op_type == OP_LEAVETRY); + DEFER(cLOGOPo->op_other); + break; + + case OP_ENTERTRYCATCH: + assert(cLOGOPo->op_other->op_type == OP_CATCH); + /* catch body is the ->op_other of the OP_CATCH */ + DEFER(cLOGOPx(cLOGOPo->op_other)->op_other); + break; - case OP_SUBST: + case OP_SUBST: if ((o->op_flags & OPf_WANT) == OPf_WANT_SCALAR) S_check_for_bool_cxt(o, 1, OPpTRUEBOOL, 0); - assert(!(cPMOP->op_pmflags & PMf_ONCE)); - while (cPMOP->op_pmstashstartu.op_pmreplstart && - cPMOP->op_pmstashstartu.op_pmreplstart->op_type == OP_NULL) - cPMOP->op_pmstashstartu.op_pmreplstart - = cPMOP->op_pmstashstartu.op_pmreplstart->op_next; - DEFER(cPMOP->op_pmstashstartu.op_pmreplstart); - break; - - case OP_SORT: { - OP *oright; - - if (o->op_flags & OPf_SPECIAL) { + assert(!(cPMOP->op_pmflags & PMf_ONCE)); + while (cPMOP->op_pmstashstartu.op_pmreplstart && + cPMOP->op_pmstashstartu.op_pmreplstart->op_type == OP_NULL) + cPMOP->op_pmstashstartu.op_pmreplstart + = cPMOP->op_pmstashstartu.op_pmreplstart->op_next; + DEFER(cPMOP->op_pmstashstartu.op_pmreplstart); + break; + + case OP_SORT: { + OP *oright; + + if (o->op_flags & OPf_SPECIAL) { /* first arg is a code block */ OP * const nullop = OpSIBLING(cLISTOP->op_first); OP * kid = cUNOPx(nullop)->op_first; assert(nullop->op_type == OP_NULL); - assert(kid->op_type == OP_SCOPE - || (kid->op_type == OP_NULL && kid->op_targ == OP_LEAVE)); + assert(kid->op_type == OP_SCOPE + || (kid->op_type == OP_NULL && kid->op_targ == OP_LEAVE)); /* since OP_SORT doesn't have a handy op_other-style * field that can point directly to the start of the code * block, store it in the otherwise-unused op_next field @@ -17671,167 +18140,167 @@ Perl_rpeep(pTHX_ OP *o) || (PL_parser && PL_parser->error_count)); nullop->op_next = kid->op_next; DEFER(nullop->op_next); - } - - /* check that RHS of sort is a single plain array */ - oright = cUNOPo->op_first; - if (!oright || oright->op_type != OP_PUSHMARK) - break; - - if (o->op_private & OPpSORT_INPLACE) - break; - - /* reverse sort ... can be optimised. */ - if (!OpHAS_SIBLING(cUNOPo)) { - /* Nothing follows us on the list. */ - OP * const reverse = o->op_next; - - if (reverse->op_type == OP_REVERSE && - (reverse->op_flags & OPf_WANT) == OPf_WANT_LIST) { - OP * const pushmark = cUNOPx(reverse)->op_first; - if (pushmark && (pushmark->op_type == OP_PUSHMARK) - && (OpSIBLING(cUNOPx(pushmark)) == o)) { - /* reverse -> pushmark -> sort */ - o->op_private |= OPpSORT_REVERSE; - op_null(reverse); - pushmark->op_next = oright->op_next; - op_null(oright); - } - } - } - - break; - } - - case OP_REVERSE: { - OP *ourmark, *theirmark, *ourlast, *iter, *expushmark, *rv2av; - OP *gvop = NULL; - LISTOP *enter, *exlist; - - if (o->op_private & OPpSORT_INPLACE) - break; - - enter = (LISTOP *) o->op_next; - if (!enter) - break; - if (enter->op_type == OP_NULL) { - enter = (LISTOP *) enter->op_next; - if (!enter) - break; - } - /* for $a (...) will have OP_GV then OP_RV2GV here. - for (...) just has an OP_GV. */ - if (enter->op_type == OP_GV) { - gvop = (OP *) enter; - enter = (LISTOP *) enter->op_next; - if (!enter) - break; - if (enter->op_type == OP_RV2GV) { - enter = (LISTOP *) enter->op_next; - if (!enter) - break; - } - } - - if (enter->op_type != OP_ENTERITER) - break; - - iter = enter->op_next; - if (!iter || iter->op_type != OP_ITER) - break; - - expushmark = enter->op_first; - if (!expushmark || expushmark->op_type != OP_NULL - || expushmark->op_targ != OP_PUSHMARK) - break; - - exlist = (LISTOP *) OpSIBLING(expushmark); - if (!exlist || exlist->op_type != OP_NULL - || exlist->op_targ != OP_LIST) - break; - - if (exlist->op_last != o) { - /* Mmm. Was expecting to point back to this op. */ - break; - } - theirmark = exlist->op_first; - if (!theirmark || theirmark->op_type != OP_PUSHMARK) - break; - - if (OpSIBLING(theirmark) != o) { - /* There's something between the mark and the reverse, eg - for (1, reverse (...)) - so no go. */ - break; - } - - ourmark = ((LISTOP *)o)->op_first; - if (!ourmark || ourmark->op_type != OP_PUSHMARK) - break; - - ourlast = ((LISTOP *)o)->op_last; - if (!ourlast || ourlast->op_next != o) - break; - - rv2av = OpSIBLING(ourmark); - if (rv2av && rv2av->op_type == OP_RV2AV && !OpHAS_SIBLING(rv2av) - && rv2av->op_flags == (OPf_WANT_LIST | OPf_KIDS)) { - /* We're just reversing a single array. */ - rv2av->op_flags = OPf_WANT_SCALAR | OPf_KIDS | OPf_REF; - enter->op_flags |= OPf_STACKED; - } - - /* We don't have control over who points to theirmark, so sacrifice - ours. */ - theirmark->op_next = ourmark->op_next; - theirmark->op_flags = ourmark->op_flags; - ourlast->op_next = gvop ? gvop : (OP *) enter; - op_null(ourmark); - op_null(o); - enter->op_private |= OPpITER_REVERSED; - iter->op_private |= OPpITER_REVERSED; + } + + /* check that RHS of sort is a single plain array */ + oright = cUNOPo->op_first; + if (!oright || oright->op_type != OP_PUSHMARK) + break; + + if (o->op_private & OPpSORT_INPLACE) + break; + + /* reverse sort ... can be optimised. */ + if (!OpHAS_SIBLING(cUNOPo)) { + /* Nothing follows us on the list. */ + OP * const reverse = o->op_next; + + if (reverse->op_type == OP_REVERSE && + (reverse->op_flags & OPf_WANT) == OPf_WANT_LIST) { + OP * const pushmark = cUNOPx(reverse)->op_first; + if (pushmark && (pushmark->op_type == OP_PUSHMARK) + && (OpSIBLING(cUNOPx(pushmark)) == o)) { + /* reverse -> pushmark -> sort */ + o->op_private |= OPpSORT_REVERSE; + op_null(reverse); + pushmark->op_next = oright->op_next; + op_null(oright); + } + } + } + + break; + } + + case OP_REVERSE: { + OP *ourmark, *theirmark, *ourlast, *iter, *expushmark, *rv2av; + OP *gvop = NULL; + LISTOP *enter, *exlist; + + if (o->op_private & OPpSORT_INPLACE) + break; + + enter = (LISTOP *) o->op_next; + if (!enter) + break; + if (enter->op_type == OP_NULL) { + enter = (LISTOP *) enter->op_next; + if (!enter) + break; + } + /* for $a (...) will have OP_GV then OP_RV2GV here. + for (...) just has an OP_GV. */ + if (enter->op_type == OP_GV) { + gvop = (OP *) enter; + enter = (LISTOP *) enter->op_next; + if (!enter) + break; + if (enter->op_type == OP_RV2GV) { + enter = (LISTOP *) enter->op_next; + if (!enter) + break; + } + } + + if (enter->op_type != OP_ENTERITER) + break; + + iter = enter->op_next; + if (!iter || iter->op_type != OP_ITER) + break; + + expushmark = enter->op_first; + if (!expushmark || expushmark->op_type != OP_NULL + || expushmark->op_targ != OP_PUSHMARK) + break; + + exlist = (LISTOP *) OpSIBLING(expushmark); + if (!exlist || exlist->op_type != OP_NULL + || exlist->op_targ != OP_LIST) + break; + + if (exlist->op_last != o) { + /* Mmm. Was expecting to point back to this op. */ + break; + } + theirmark = exlist->op_first; + if (!theirmark || theirmark->op_type != OP_PUSHMARK) + break; + + if (OpSIBLING(theirmark) != o) { + /* There's something between the mark and the reverse, eg + for (1, reverse (...)) + so no go. */ + break; + } + + ourmark = ((LISTOP *)o)->op_first; + if (!ourmark || ourmark->op_type != OP_PUSHMARK) + break; + + ourlast = ((LISTOP *)o)->op_last; + if (!ourlast || ourlast->op_next != o) + break; + + rv2av = OpSIBLING(ourmark); + if (rv2av && rv2av->op_type == OP_RV2AV && !OpHAS_SIBLING(rv2av) + && rv2av->op_flags == (OPf_WANT_LIST | OPf_KIDS)) { + /* We're just reversing a single array. */ + rv2av->op_flags = OPf_WANT_SCALAR | OPf_KIDS | OPf_REF; + enter->op_flags |= OPf_STACKED; + } + + /* We don't have control over who points to theirmark, so sacrifice + ours. */ + theirmark->op_next = ourmark->op_next; + theirmark->op_flags = ourmark->op_flags; + ourlast->op_next = gvop ? gvop : (OP *) enter; + op_null(ourmark); + op_null(o); + enter->op_private |= OPpITER_REVERSED; + iter->op_private |= OPpITER_REVERSED; oldoldop = NULL; oldop = ourlast; o = oldop->op_next; goto redo; NOT_REACHED; /* NOTREACHED */ - break; - } - - case OP_QR: - case OP_MATCH: - if (!(cPMOP->op_pmflags & PMf_ONCE)) { - assert (!cPMOP->op_pmstashstartu.op_pmreplstart); - } - break; - - case OP_RUNCV: - if (!(o->op_private & OPpOFFBYONE) && !CvCLONE(PL_compcv) - && (!CvANON(PL_compcv) || (!PL_cv_has_eval && !PL_perldb))) - { - SV *sv; - if (CvEVAL(PL_compcv)) sv = &PL_sv_undef; - else { - sv = newRV((SV *)PL_compcv); - sv_rvweaken(sv); - SvREADONLY_on(sv); - } + break; + } + + case OP_QR: + case OP_MATCH: + if (!(cPMOP->op_pmflags & PMf_ONCE)) { + assert (!cPMOP->op_pmstashstartu.op_pmreplstart); + } + break; + + case OP_RUNCV: + if (!(o->op_private & OPpOFFBYONE) && !CvCLONE(PL_compcv) + && (!CvANON(PL_compcv) || (!PL_cv_has_eval && !PL_perldb))) + { + SV *sv; + if (CvEVAL(PL_compcv)) sv = &PL_sv_undef; + else { + sv = newRV((SV *)PL_compcv); + sv_rvweaken(sv); + SvREADONLY_on(sv); + } OpTYPE_set(o, OP_CONST); - o->op_flags |= OPf_SPECIAL; - cSVOPo->op_sv = sv; - } - break; - - case OP_SASSIGN: - if (OP_GIMME(o,0) == G_VOID - || ( o->op_next->op_type == OP_LINESEQ - && ( o->op_next->op_next->op_type == OP_LEAVESUB - || ( o->op_next->op_next->op_type == OP_RETURN - && !CvLVALUE(PL_compcv))))) - { - OP *right = cBINOP->op_first; - if (right) { + o->op_flags |= OPf_SPECIAL; + cSVOPo->op_sv = sv; + } + break; + + case OP_SASSIGN: + if (OP_GIMME(o,0) == G_VOID + || ( o->op_next->op_type == OP_LINESEQ + && ( o->op_next->op_next->op_type == OP_LEAVESUB + || ( o->op_next->op_next->op_type == OP_RETURN + && !CvLVALUE(PL_compcv))))) + { + OP *right = cBINOP->op_first; + if (right) { /* sassign * RIGHT * substr @@ -17849,24 +18318,24 @@ Perl_rpeep(pTHX_ OP *o) * arg2 * ... */ - OP *left = OpSIBLING(right); - if (left->op_type == OP_SUBSTR - && (left->op_private & 7) < 4) { - op_null(o); + OP *left = OpSIBLING(right); + if (left->op_type == OP_SUBSTR + && (left->op_private & 7) < 4) { + op_null(o); /* cut out right */ op_sibling_splice(o, NULL, 1, NULL); /* and insert it as second child of OP_SUBSTR */ op_sibling_splice(left, cBINOPx(left)->op_first, 0, right); - left->op_private |= OPpSUBSTR_REPL_FIRST; - left->op_flags = - (o->op_flags & ~OPf_WANT) | OPf_WANT_VOID; - } - } - } - break; - - case OP_AASSIGN: { + left->op_private |= OPpSUBSTR_REPL_FIRST; + left->op_flags = + (o->op_flags & ~OPf_WANT) | OPf_WANT_VOID; + } + } + } + break; + + case OP_AASSIGN: { int l, r, lr, lscalars, rscalars; /* handle common vars detection, e.g. ($a,$b) = ($b,$a). @@ -17908,7 +18377,7 @@ Perl_rpeep(pTHX_ OP *o) || !r /* .... = (); */ || !(l & ~AAS_SAFE_SCALAR) /* (undef, pos()) = ...; */ || !(r & ~AAS_SAFE_SCALAR) /* ... = (1,2,length,undef); */ - || (lscalars < 2) /* ($x, undef) = ... */ + || (lscalars < 2) /* (undef, $x) = ... */ ) { NOOP; /* always safe */ } @@ -17970,11 +18439,14 @@ Perl_rpeep(pTHX_ OP *o) if ((o->op_flags & OPf_WANT) == OPf_WANT_SCALAR) S_check_for_bool_cxt(o, 1, OPpASSIGN_TRUEBOOL, 0); - break; + break; } case OP_REF: - /* see if ref() is used in boolean context */ + case OP_BLESSED: + /* if the op is used in boolean context, set the TRUEBOOL flag + * which enables an optimisation at runtime which avoids creating + * a stack temporary for known-true package names */ if ((o->op_flags & OPf_WANT) == OPf_WANT_SCALAR) S_check_for_bool_cxt(o, 1, OPpTRUEBOOL, OPpMAYBE_TRUEBOOL); break; @@ -17994,15 +18466,15 @@ Perl_rpeep(pTHX_ OP *o) S_check_for_bool_cxt(o, 1, OPpTRUEBOOL, 0); break; - case OP_CUSTOM: { - Perl_cpeep_t cpeep = - XopENTRYCUSTOM(o, xop_peep); - if (cpeep) - cpeep(aTHX_ o, oldop); - break; - } + case OP_CUSTOM: { + Perl_cpeep_t cpeep = + XopENTRYCUSTOM(o, xop_peep); + if (cpeep) + cpeep(aTHX_ o, oldop); + break; + } - } + } /* did we just null the current op? If so, re-process it to handle * eliding "empty" ops from the chain */ if (o->op_type == OP_NULL && oldop && oldop->op_next == o) { @@ -18024,7 +18496,7 @@ Perl_peep(pTHX_ OP *o) } /* -=head1 Custom Operators +=for apidoc_section $custom =for apidoc Perl_custom_op_xop Return the XOP structure for a given custom op. This macro should be @@ -18089,7 +18561,7 @@ Perl_custom_op_get_field(pTHX_ const OP *o, const xop_flags_enum field) keysv = sv_2mortal(newSViv(PTR2IV(o->op_ppaddr))); if (PL_custom_ops) - he = hv_fetch_ent(PL_custom_ops, keysv, 0, 0); + he = hv_fetch_ent(PL_custom_ops, keysv, 0, 0); /* See if the op isn't registered, but its name *is* registered. * That implies someone is using the pre-5.14 API,where only name and @@ -18098,23 +18570,23 @@ Perl_custom_op_get_field(pTHX_ const OP *o, const xop_flags_enum field) * We only check for an existing name, and assume no one will have * just registered a desc */ if (!he && PL_custom_op_names && - (he = hv_fetch_ent(PL_custom_op_names, keysv, 0, 0)) + (he = hv_fetch_ent(PL_custom_op_names, keysv, 0, 0)) ) { - const char *pv; - STRLEN l; - - /* XXX does all this need to be shared mem? */ - Newxz(xop, 1, XOP); - pv = SvPV(HeVAL(he), l); - XopENTRY_set(xop, xop_name, savepvn(pv, l)); - if (PL_custom_op_descs && - (he = hv_fetch_ent(PL_custom_op_descs, keysv, 0, 0)) - ) { - pv = SvPV(HeVAL(he), l); - XopENTRY_set(xop, xop_desc, savepvn(pv, l)); - } - Perl_custom_op_register(aTHX_ o->op_ppaddr, xop); - he = hv_fetch_ent(PL_custom_ops, keysv, 0, 0); + const char *pv; + STRLEN l; + + /* XXX does all this need to be shared mem? */ + Newxz(xop, 1, XOP); + pv = SvPV(HeVAL(he), l); + XopENTRY_set(xop, xop_name, savepvn(pv, l)); + if (PL_custom_op_descs && + (he = hv_fetch_ent(PL_custom_op_descs, keysv, 0, 0)) + ) { + pv = SvPV(HeVAL(he), l); + XopENTRY_set(xop, xop_desc, savepvn(pv, l)); + } + Perl_custom_op_register(aTHX_ o->op_ppaddr, xop); + he = hv_fetch_ent(PL_custom_ops, keysv, 0, 0); /* add magic to the SV so that the xop struct (pointed to by * SvIV(sv)) is freed. Normally a static xop is registered, but * for this backcompat hack, we've alloced one */ @@ -18123,62 +18595,60 @@ Perl_custom_op_get_field(pTHX_ const OP *o, const xop_flags_enum field) } else { - if (!he) - xop = (XOP *)&xop_null; - else - xop = INT2PTR(XOP *, SvIV(HeVAL(he))); + if (!he) + xop = (XOP *)&xop_null; + else + xop = INT2PTR(XOP *, SvIV(HeVAL(he))); } + { - XOPRETANY any; - if(field == XOPe_xop_ptr) { - any.xop_ptr = xop; - } else { - const U32 flags = XopFLAGS(xop); - if(flags & field) { - switch(field) { - case XOPe_xop_name: - any.xop_name = xop->xop_name; - break; - case XOPe_xop_desc: - any.xop_desc = xop->xop_desc; - break; - case XOPe_xop_class: - any.xop_class = xop->xop_class; - break; - case XOPe_xop_peep: - any.xop_peep = xop->xop_peep; - break; - default: - NOT_REACHED; /* NOTREACHED */ - break; - } - } else { - switch(field) { - case XOPe_xop_name: - any.xop_name = XOPd_xop_name; - break; - case XOPe_xop_desc: - any.xop_desc = XOPd_xop_desc; - break; - case XOPe_xop_class: - any.xop_class = XOPd_xop_class; - break; - case XOPe_xop_peep: - any.xop_peep = XOPd_xop_peep; - break; - default: - NOT_REACHED; /* NOTREACHED */ - break; - } - } - } - /* On some platforms (HP-UX, IA64) gcc emits a warning for this function: - * op.c: In function 'Perl_custom_op_get_field': - * op.c:...: warning: 'any.xop_name' may be used uninitialized in this function [-Wmaybe-uninitialized] - * This is because on those platforms (with -DEBUGGING) NOT_REACHED - * expands to assert(0), which expands to ((0) ? (void)0 : - * __assert(...)), and gcc doesn't know that __assert can never return. */ - return any; + XOPRETANY any; + if(field == XOPe_xop_ptr) { + any.xop_ptr = xop; + } else { + const U32 flags = XopFLAGS(xop); + if(flags & field) { + switch(field) { + case XOPe_xop_name: + any.xop_name = xop->xop_name; + break; + case XOPe_xop_desc: + any.xop_desc = xop->xop_desc; + break; + case XOPe_xop_class: + any.xop_class = xop->xop_class; + break; + case XOPe_xop_peep: + any.xop_peep = xop->xop_peep; + break; + default: + field_panic: + Perl_croak(aTHX_ + "panic: custom_op_get_field(): invalid field %d\n", + (int)field); + break; + } + } else { + switch(field) { + case XOPe_xop_name: + any.xop_name = XOPd_xop_name; + break; + case XOPe_xop_desc: + any.xop_desc = XOPd_xop_desc; + break; + case XOPe_xop_class: + any.xop_class = XOPd_xop_class; + break; + case XOPe_xop_peep: + any.xop_peep = XOPd_xop_peep; + break; + default: + goto field_panic; + break; + } + } + } + return any; } } @@ -18200,10 +18670,10 @@ Perl_custom_op_register(pTHX_ Perl_ppaddr_t ppaddr, const XOP *xop) keysv = sv_2mortal(newSViv(PTR2IV(ppaddr))); if (!PL_custom_ops) - PL_custom_ops = newHV(); + PL_custom_ops = newHV(); if (!hv_store_ent(PL_custom_ops, keysv, newSViv(PTR2IV(xop)), 0)) - Perl_croak(aTHX_ "panic: can't register custom OP %s", xop->xop_name); + Perl_croak(aTHX_ "panic: can't register custom OP %s", xop->xop_name); } /* @@ -18246,65 +18716,65 @@ Perl_core_prototype(pTHX_ SV *sv, const char *name, const int code, case KEY_redo : case KEY_require: case KEY_return: case KEY_say : case KEY_select: case KEY_sort : case KEY_split : case KEY_system: case KEY_x : case KEY_xor : - if (!opnum) return NULL; nullret = TRUE; goto findopnum; + if (!opnum) return NULL; nullret = TRUE; goto findopnum; case KEY_glob: retsetpvs("_;", OP_GLOB); case KEY_keys: retsetpvs("\\[%@]", OP_KEYS); case KEY_values: retsetpvs("\\[%@]", OP_VALUES); case KEY_each: retsetpvs("\\[%@]", OP_EACH); case KEY_pos: retsetpvs(";\\[$*]", OP_POS); case KEY___FILE__: case KEY___LINE__: case KEY___PACKAGE__: - retsetpvs("", 0); + retsetpvs("", 0); case KEY_evalbytes: - name = "entereval"; break; + name = "entereval"; break; case KEY_readpipe: - name = "backtick"; + name = "backtick"; } #undef retsetpvs findopnum: while (i < MAXO) { /* The slow way. */ - if (strEQ(name, PL_op_name[i]) - || strEQ(name, PL_op_desc[i])) - { - if (nullret) { assert(opnum); *opnum = i; return NULL; } - goto found; - } - i++; + if (strEQ(name, PL_op_name[i]) + || strEQ(name, PL_op_desc[i])) + { + if (nullret) { assert(opnum); *opnum = i; return NULL; } + goto found; + } + i++; } return NULL; found: defgv = PL_opargs[i] & OA_DEFGV; oa = PL_opargs[i] >> OASHIFT; while (oa) { - if (oa & OA_OPTIONAL && !seen_question && ( - !defgv || (oa & (OA_OPTIONAL - 1)) == OA_FILEREF - )) { - seen_question = 1; - str[n++] = ';'; - } - if ((oa & (OA_OPTIONAL - 1)) >= OA_AVREF - && (oa & (OA_OPTIONAL - 1)) <= OA_SCALARREF - /* But globs are already references (kinda) */ - && (oa & (OA_OPTIONAL - 1)) != OA_FILEREF - ) { - str[n++] = '\\'; - } - if ((oa & (OA_OPTIONAL - 1)) == OA_SCALARREF - && !scalar_mod_type(NULL, i)) { - str[n++] = '['; - str[n++] = '$'; - str[n++] = '@'; - str[n++] = '%'; - if (i == OP_LOCK || i == OP_UNDEF) str[n++] = '&'; - str[n++] = '*'; - str[n++] = ']'; - } - else str[n++] = ("?$@@%&*$")[oa & (OA_OPTIONAL - 1)]; - if (oa & OA_OPTIONAL && defgv && str[n-1] == '$') { - str[n-1] = '_'; defgv = 0; - } - oa = oa >> 4; + if (oa & OA_OPTIONAL && !seen_question && ( + !defgv || (oa & (OA_OPTIONAL - 1)) == OA_FILEREF + )) { + seen_question = 1; + str[n++] = ';'; + } + if ((oa & (OA_OPTIONAL - 1)) >= OA_AVREF + && (oa & (OA_OPTIONAL - 1)) <= OA_SCALARREF + /* But globs are already references (kinda) */ + && (oa & (OA_OPTIONAL - 1)) != OA_FILEREF + ) { + str[n++] = '\\'; + } + if ((oa & (OA_OPTIONAL - 1)) == OA_SCALARREF + && !scalar_mod_type(NULL, i)) { + str[n++] = '['; + str[n++] = '$'; + str[n++] = '@'; + str[n++] = '%'; + if (i == OP_LOCK || i == OP_UNDEF) str[n++] = '&'; + str[n++] = '*'; + str[n++] = ']'; + } + else str[n++] = ("?$@@%&*$")[oa & (OA_OPTIONAL - 1)]; + if (oa & OA_OPTIONAL && defgv && str[n-1] == '$') { + str[n-1] = '_'; defgv = 0; + } + oa = oa >> 4; } if (code == -KEY_not || code == -KEY_getprotobynumber) str[n++] = ';'; str[n++] = '\0'; @@ -18325,72 +18795,72 @@ Perl_coresub_op(pTHX_ SV * const coreargssv, const int code, switch(opnum) { case 0: - return op_append_elem(OP_LINESEQ, - argop, - newSLICEOP(0, - newSVOP(OP_CONST, 0, newSViv(-code % 3)), - newOP(OP_CALLER,0) - ) - ); + return op_append_elem(OP_LINESEQ, + argop, + newSLICEOP(0, + newSVOP(OP_CONST, 0, newSViv(-code % 3)), + newOP(OP_CALLER,0) + ) + ); case OP_EACH: case OP_KEYS: case OP_VALUES: - o = newUNOP(OP_AVHVSWITCH,0,argop); - o->op_private = opnum-OP_EACH; - return o; + o = newUNOP(OP_AVHVSWITCH,0,argop); + o->op_private = opnum-OP_EACH; + return o; case OP_SELECT: /* which represents OP_SSELECT as well */ - if (code) - return newCONDOP( - 0, - newBINOP(OP_GT, 0, - newAVREF(newGVOP(OP_GV, 0, PL_defgv)), - newSVOP(OP_CONST, 0, newSVuv(1)) - ), - coresub_op(newSVuv((UV)OP_SSELECT), 0, - OP_SSELECT), - coresub_op(coreargssv, 0, OP_SELECT) - ); - /* FALLTHROUGH */ + if (code) + return newCONDOP( + 0, + newBINOP(OP_GT, 0, + newAVREF(newGVOP(OP_GV, 0, PL_defgv)), + newSVOP(OP_CONST, 0, newSVuv(1)) + ), + coresub_op(newSVuv((UV)OP_SSELECT), 0, + OP_SSELECT), + coresub_op(coreargssv, 0, OP_SELECT) + ); + /* FALLTHROUGH */ default: - switch (PL_opargs[opnum] & OA_CLASS_MASK) { - case OA_BASEOP: - return op_append_elem( - OP_LINESEQ, argop, - newOP(opnum, - opnum == OP_WANTARRAY || opnum == OP_RUNCV - ? OPpOFFBYONE << 8 : 0) - ); - case OA_BASEOP_OR_UNOP: - if (opnum == OP_ENTEREVAL) { - o = newUNOP(OP_ENTEREVAL,OPpEVAL_COPHH<<8,argop); - if (code == -KEY_evalbytes) o->op_private |= OPpEVAL_BYTES; - } - else o = newUNOP(opnum,0,argop); - if (opnum == OP_CALLER) o->op_private |= OPpOFFBYONE; - else { - onearg: - if (is_handle_constructor(o, 1)) - argop->op_private |= OPpCOREARGS_DEREF1; - if (scalar_mod_type(NULL, opnum)) - argop->op_private |= OPpCOREARGS_SCALARMOD; - } - return o; - default: - o = op_convert_list(opnum,OPf_SPECIAL*(opnum == OP_GLOB),argop); - if (is_handle_constructor(o, 2)) - argop->op_private |= OPpCOREARGS_DEREF2; - if (opnum == OP_SUBSTR) { - o->op_private |= OPpMAYBE_LVSUB; - return o; - } - else goto onearg; - } + switch (PL_opargs[opnum] & OA_CLASS_MASK) { + case OA_BASEOP: + return op_append_elem( + OP_LINESEQ, argop, + newOP(opnum, + opnum == OP_WANTARRAY || opnum == OP_RUNCV + ? OPpOFFBYONE << 8 : 0) + ); + case OA_BASEOP_OR_UNOP: + if (opnum == OP_ENTEREVAL) { + o = newUNOP(OP_ENTEREVAL,OPpEVAL_COPHH<<8,argop); + if (code == -KEY_evalbytes) o->op_private |= OPpEVAL_BYTES; + } + else o = newUNOP(opnum,0,argop); + if (opnum == OP_CALLER) o->op_private |= OPpOFFBYONE; + else { + onearg: + if (is_handle_constructor(o, 1)) + argop->op_private |= OPpCOREARGS_DEREF1; + if (scalar_mod_type(NULL, opnum)) + argop->op_private |= OPpCOREARGS_SCALARMOD; + } + return o; + default: + o = op_convert_list(opnum,OPf_SPECIAL*(opnum == OP_GLOB),argop); + if (is_handle_constructor(o, 2)) + argop->op_private |= OPpCOREARGS_DEREF2; + if (opnum == OP_SUBSTR) { + o->op_private |= OPpMAYBE_LVSUB; + return o; + } + else goto onearg; + } } } void Perl_report_redefined_cv(pTHX_ const SV *name, const CV *old_cv, - SV * const *new_const_svp) + SV * const *new_const_svp) { const char *hvname; bool is_const = !!CvCONST(old_cv); @@ -18399,36 +18869,36 @@ Perl_report_redefined_cv(pTHX_ const SV *name, const CV *old_cv, PERL_ARGS_ASSERT_REPORT_REDEFINED_CV; if (is_const && new_const_svp && old_const_sv == *new_const_svp) - return; - /* They are 2 constant subroutines generated from - the same constant. This probably means that - they are really the "same" proxy subroutine - instantiated in 2 places. Most likely this is - when a constant is exported twice. Don't warn. - */ + return; + /* They are 2 constant subroutines generated from + the same constant. This probably means that + they are really the "same" proxy subroutine + instantiated in 2 places. Most likely this is + when a constant is exported twice. Don't warn. + */ if ( - (ckWARN(WARN_REDEFINE) - && !( - CvGV(old_cv) && GvSTASH(CvGV(old_cv)) - && HvNAMELEN(GvSTASH(CvGV(old_cv))) == 7 - && (hvname = HvNAME(GvSTASH(CvGV(old_cv))), - strEQ(hvname, "autouse")) - ) - ) + (ckWARN(WARN_REDEFINE) + && !( + CvGV(old_cv) && GvSTASH(CvGV(old_cv)) + && HvNAMELEN(GvSTASH(CvGV(old_cv))) == 7 + && (hvname = HvNAME(GvSTASH(CvGV(old_cv))), + strEQ(hvname, "autouse")) + ) + ) || (is_const - && ckWARN_d(WARN_REDEFINE) - && (!new_const_svp || sv_cmp(old_const_sv, *new_const_svp)) - ) + && ckWARN_d(WARN_REDEFINE) + && (!new_const_svp || sv_cmp(old_const_sv, *new_const_svp)) + ) ) - Perl_warner(aTHX_ packWARN(WARN_REDEFINE), - is_const - ? "Constant subroutine %" SVf " redefined" - : "Subroutine %" SVf " redefined", - SVfARG(name)); + Perl_warner(aTHX_ packWARN(WARN_REDEFINE), + is_const + ? "Constant subroutine %" SVf " redefined" + : "Subroutine %" SVf " redefined", + SVfARG(name)); } /* -=head1 Hook manipulation +=for apidoc_section $hook These functions provide convenient and thread-safe means of manipulating hook variables. @@ -18474,13 +18944,13 @@ something like this: static Perl_check_t nxck_frob; static OP *myck_frob(pTHX_ OP *op) { - ... - op = nxck_frob(aTHX_ op); - ... - return op; + ... + op = nxck_frob(aTHX_ op); + ... + return op; } BOOT: - wrap_op_checker(OP_FROB, myck_frob, &nxck_frob); + wrap_op_checker(OP_FROB, myck_frob, &nxck_frob); If you want to influence compilation of calls to a specific subroutine, then use L rather than hooking checking of @@ -18493,15 +18963,14 @@ void Perl_wrap_op_checker(pTHX_ Optype opcode, Perl_check_t new_checker, Perl_check_t *old_checker_p) { - dVAR; PERL_UNUSED_CONTEXT; PERL_ARGS_ASSERT_WRAP_OP_CHECKER; if (*old_checker_p) return; OP_CHECK_MUTEX_LOCK; if (!*old_checker_p) { - *old_checker_p = PL_check[opcode]; - PL_check[opcode] = new_checker; + *old_checker_p = PL_check[opcode]; + PL_check[opcode] = new_checker; } OP_CHECK_MUTEX_UNLOCK; } @@ -18516,7 +18985,7 @@ const_sv_xsub(pTHX_ CV* cv) SV *const sv = MUTABLE_SV(XSANY.any_ptr); PERL_UNUSED_ARG(items); if (!sv) { - XSRETURN(0); + XSRETURN(0); } EXTEND(sp, 1); ST(0) = sv; @@ -18532,15 +19001,15 @@ const_av_xsub(pTHX_ CV* cv) assert(av); #ifndef DEBUGGING if (!av) { - XSRETURN(0); + XSRETURN(0); } #endif if (SvRMAGICAL(av)) - Perl_croak(aTHX_ "Magical list constants are not supported"); - if (GIMME_V != G_ARRAY) { - EXTEND(SP, 1); - ST(0) = sv_2mortal(newSViv((IV)AvFILLp(av)+1)); - XSRETURN(1); + Perl_croak(aTHX_ "Magical list constants are not supported"); + if (GIMME_V != G_LIST) { + EXTEND(SP, 1); + ST(0) = sv_2mortal(newSViv((IV)AvFILLp(av)+1)); + XSRETURN(1); } EXTEND(SP, AvFILLp(av)+1); Copy(AvARRAY(av), &ST(0), AvFILLp(av)+1, SV *); diff --git a/gnu/usr.bin/perl/op.h b/gnu/usr.bin/perl/op.h index b9f6da82c9d..63be5433dad 100644 --- a/gnu/usr.bin/perl/op.h +++ b/gnu/usr.bin/perl/op.h @@ -15,7 +15,13 @@ * but this is replaced when op is grafted in, when * this op will point to the real next op, and the new * parent takes over role of remembering starting op.) + * op_sibparent Pointer to the op's next sibling, or to the parent + * if there are no more siblings. * op_ppaddr Pointer to current ppcode's function. + * op_targ An index into the current pad, identifying an SV + * that is typically used to store the OP's result + * (such as a lexical variable, or a SVs_PADTMP + * temporary intermediate value). * op_type The type of the operation. * op_opt Whether or not the op has been optimised by the * peephole optimiser. @@ -65,21 +71,21 @@ typedef PERL_BITFIELD16 Optype; /* for efficiency, requires OPf_WANT_VOID == G_VOID etc */ #define OP_GIMME(op,dfl) \ - (((op)->op_flags & OPf_WANT) ? ((op)->op_flags & OPf_WANT) : dfl) + (((op)->op_flags & OPf_WANT) ? ((op)->op_flags & OPf_WANT) : dfl) #define OP_GIMME_REVERSE(flags) ((flags) & G_WANT) /* -=head1 "Gimme" Values +=for apidoc_section $callback =for apidoc Amn|U32|GIMME_V The XSUB-writer's equivalent to Perl's C. Returns C, -C or C for void, scalar or list context, +C or C for void, scalar or list context, respectively. See L for a usage example. -=for apidoc Amn|U32|GIMME +=for apidoc AmnD|U32|GIMME A backward-compatible version of C which can only return -C or C; in a void context, it returns C. +C or C; in a void context, it returns C. Deprecated. Use C instead. =cut @@ -95,9 +101,9 @@ Deprecated. Use C instead. #define OPf_WANT_LIST 3 /* Want list of any length */ #define OPf_KIDS 4 /* There is a firstborn child. */ #define OPf_PARENS 8 /* This operator was parenthesized. */ - /* (Or block needs explicit scope entry.) */ + /* (Or block needs explicit scope entry.) */ #define OPf_REF 16 /* Certified reference. */ - /* (Return container, not containee). */ + /* (Return container, not containee). */ #define OPf_MOD 32 /* Will modify (lvalue). */ #define OPf_STACKED 64 /* Some arg is arriving on the stack. */ @@ -106,43 +112,43 @@ Deprecated. Use C instead. */ #define OPf_SPECIAL 128 /* Do something weird for this op: */ - /* On local LVAL, don't init local value. */ - /* On OP_SORT, subroutine is inlined. */ - /* On OP_NOT, inversion was implicit. */ - /* On OP_LEAVE, don't restore curpm, e.g. + /* On local LVAL, don't init local value. */ + /* On OP_SORT, subroutine is inlined. */ + /* On OP_NOT, inversion was implicit. */ + /* On OP_LEAVE, don't restore curpm, e.g. * /(...)/ while ...>; */ - /* On truncate, we truncate filehandle */ - /* On control verbs, we saw no label */ - /* On flipflop, we saw ... instead of .. */ - /* On UNOPs, saw bare parens, e.g. eof(). */ - /* On OP_CHDIR, handle (or bare parens) */ - /* On OP_NULL, saw a "do". */ - /* On OP_EXISTS, treat av as av, not avhv. */ - /* On OP_(ENTER|LEAVE)EVAL, don't clear $@ */ - /* On regcomp, "use re 'eval'" was in scope */ - /* On RV2[ACGHS]V, don't create GV--in - defined()*/ - /* On OP_DBSTATE, indicates breakpoint - * (runtime property) */ - /* On OP_REQUIRE, was seen as CORE::require */ - /* On OP_(ENTER|LEAVE)WHEN, there's - no condition */ - /* On OP_SMARTMATCH, an implicit smartmatch */ - /* On OP_ANONHASH and OP_ANONLIST, create a - reference to the new anon hash or array */ - /* On OP_HELEM, OP_MULTIDEREF and OP_HSLICE, + /* On truncate, we truncate filehandle */ + /* On control verbs, we saw no label */ + /* On flipflop, we saw ... instead of .. */ + /* On UNOPs, saw bare parens, e.g. eof(). */ + /* On OP_CHDIR, handle (or bare parens) */ + /* On OP_NULL, saw a "do". */ + /* On OP_EXISTS, treat av as av, not avhv. */ + /* On OP_(ENTER|LEAVE)EVAL, don't clear $@ */ + /* On regcomp, "use re 'eval'" was in scope */ + /* On RV2[ACGHS]V, don't create GV--in + defined()*/ + /* On OP_DBSTATE, indicates breakpoint + * (runtime property) */ + /* On OP_REQUIRE, was seen as CORE::require */ + /* On OP_(ENTER|LEAVE)WHEN, there's + no condition */ + /* On OP_SMARTMATCH, an implicit smartmatch */ + /* On OP_ANONHASH and OP_ANONLIST, create a + reference to the new anon hash or array */ + /* On OP_HELEM, OP_MULTIDEREF and OP_HSLICE, localization will be followed by assignment, so do not wipe the target if it is special (e.g. a glob or a magic SV) */ - /* On OP_MATCH, OP_SUBST & OP_TRANS, the - operand of a logical or conditional - that was optimised away, so it should - not be bound via =~ */ - /* On OP_CONST, from a constant CV */ - /* On OP_GLOB, two meanings: - - Before ck_glob, called as CORE::glob - - After ck_glob, use Perl glob function - */ + /* On OP_MATCH, OP_SUBST & OP_TRANS, the + operand of a logical or conditional + that was optimised away, so it should + not be bound via =~ */ + /* On OP_CONST, from a constant CV */ + /* On OP_GLOB, two meanings: + - Before ck_glob, called as CORE::glob + - After ck_glob, use Perl glob function + */ /* On OP_PADRANGE, push @_ */ /* On OP_DUMP, has no label */ /* On OP_UNSTACK, in a C-style for loop */ @@ -158,11 +164,11 @@ Deprecated. Use C instead. #if !defined(PERL_CORE) && !defined(PERL_EXT) # define GIMME \ - (PL_op->op_flags & OPf_WANT \ - ? ((PL_op->op_flags & OPf_WANT) == OPf_WANT_LIST \ - ? G_ARRAY \ - : G_SCALAR) \ - : dowantarray()) + (PL_op->op_flags & OPf_WANT \ + ? ((PL_op->op_flags & OPf_WANT) == OPf_WANT_LIST \ + ? G_LIST \ + : G_SCALAR) \ + : dowantarray()) #endif @@ -223,6 +229,12 @@ struct binop { struct logop { BASEOP OP * op_first; + + /* Note that op->op_other is the *next* op in execution order of the + * alternate branch, not the root of the subtree. I.e. imagine it being + * called ->op_otherfirst. + * To find the structural subtree root (what could be called + * ->op_otherroot), use OpSIBLING of ->op_first */ OP * op_other; }; @@ -259,16 +271,16 @@ struct pmop { #endif U32 op_pmflags; union { - OP * op_pmreplroot; /* For OP_SUBST */ - PADOFFSET op_pmtargetoff; /* For OP_SPLIT lex ary or thr GV */ - GV * op_pmtargetgv; /* For OP_SPLIT non-threaded GV */ + OP * op_pmreplroot; /* For OP_SUBST */ + PADOFFSET op_pmtargetoff; /* For OP_SPLIT lex ary or thr GV */ + GV * op_pmtargetgv; /* For OP_SPLIT non-threaded GV */ } op_pmreplrootu; union { - OP * op_pmreplstart; /* Only used in OP_SUBST */ + OP * op_pmreplstart; /* Only used in OP_SUBST */ #ifdef USE_ITHREADS - PADOFFSET op_pmstashoff; /* Only used in OP_MATCH, with PMf_ONCE set */ + PADOFFSET op_pmstashoff; /* Only used in OP_MATCH, with PMf_ONCE set */ #else - HV * op_pmstash; + HV * op_pmstash; #endif } op_pmstashstartu; OP * op_code_list; /* list of (?{}) code blocks */ @@ -276,7 +288,7 @@ struct pmop { #ifdef USE_ITHREADS #define PM_GETRE(o) (SvTYPE(PL_regex_pad[(o)->op_pmoffset]) == SVt_REGEXP \ - ? (REGEXP*)(PL_regex_pad[(o)->op_pmoffset]) : NULL) + ? (REGEXP*)(PL_regex_pad[(o)->op_pmoffset]) : NULL) /* The assignment is just to enforce type safety (or at least get a warning). */ /* With first class regexps not via a reference one needs to assign @@ -288,7 +300,7 @@ struct pmop { #define PM_SETRE(o,r) STMT_START { \ REGEXP *const _pm_setre = (r); \ assert(_pm_setre); \ - PL_regex_pad[(o)->op_pmoffset] = MUTABLE_SV(_pm_setre); \ + PL_regex_pad[(o)->op_pmoffset] = MUTABLE_SV(_pm_setre); \ } STMT_END #else #define PM_GETRE(o) ((o)->op_pmregexp) @@ -390,16 +402,16 @@ struct pmop { ? PL_stashpad[(o)->op_pmstashstartu.op_pmstashoff] \ : NULL) # define PmopSTASH_set(o,hv) \ - (assert_((o)->op_pmflags & PMf_ONCE) \ - (o)->op_pmstashstartu.op_pmstashoff = \ - (hv) ? alloccopstash(hv) : 0) + (assert_((o)->op_pmflags & PMf_ONCE) \ + (o)->op_pmstashstartu.op_pmstashoff = \ + (hv) ? alloccopstash(hv) : 0) #else # define PmopSTASH(o) \ (((o)->op_pmflags & PMf_ONCE) ? (o)->op_pmstashstartu.op_pmstash : NULL) -# if defined (DEBUGGING) && defined(__GNUC__) && !defined(PERL_GCC_BRACE_GROUPS_FORBIDDEN) +# if defined (DEBUGGING) && defined(PERL_USE_GCC_BRACE_GROUPS) # define PmopSTASH_set(o,hv) ({ \ - assert((o)->op_pmflags & PMf_ONCE); \ - ((o)->op_pmstashstartu.op_pmstash = (hv)); \ + assert((o)->op_pmflags & PMf_ONCE); \ + ((o)->op_pmstashstartu.op_pmstash = (hv)); \ }) # else # define PmopSTASH_set(o,hv) ((o)->op_pmstashstartu.op_pmstash = (hv)) @@ -506,12 +518,12 @@ typedef enum { # ifndef PERL_CORE # define IS_PADGV(v) (v && isGV(v)) # define IS_PADCONST(v) \ - (v && (SvREADONLY(v) || (SvIsCOW(v) && !SvLEN(v)))) + (v && (SvREADONLY(v) || (SvIsCOW(v) && !SvLEN(v)))) # endif # define cSVOPx_sv(v) (cSVOPx(v)->op_sv \ - ? cSVOPx(v)->op_sv : PAD_SVl((v)->op_targ)) + ? cSVOPx(v)->op_sv : PAD_SVl((v)->op_targ)) # define cSVOPx_svp(v) (cSVOPx(v)->op_sv \ - ? &cSVOPx(v)->op_sv : &PAD_SVl((v)->op_targ)) + ? &cSVOPx(v)->op_sv : &PAD_SVl((v)->op_targ)) # define cMETHOPx_rclass(v) PAD_SVl(cMETHOPx(v)->op_rclass_targ) #else # define cGVOPx_gv(o) ((GV*)cSVOPx(o)->op_sv) @@ -596,7 +608,7 @@ typedef enum { # ifdef PERL_CORE # define OP_REFCNT_LOCK MUTEX_LOCK(&PL_op_mutex) # define OP_REFCNT_UNLOCK MUTEX_UNLOCK(&PL_op_mutex) -# else +# else /* Subject non-core uses to clang thread safety analysis */ # define OP_REFCNT_LOCK op_refcnt_lock() # define OP_REFCNT_UNLOCK op_refcnt_unlock() # endif @@ -621,9 +633,9 @@ typedef enum { #define PERL_LOADMOD_DENY 0x1 /* no Module */ #define PERL_LOADMOD_NOIMPORT 0x2 /* use Module () */ #define PERL_LOADMOD_IMPORT_OPS 0x4 /* import arguments - are passed as a sin- - gle op tree, not a - list of SVs */ + are passed as a sin- + gle op tree, not a + list of SVs */ #if defined(PERL_IN_PERLY_C) || defined(PERL_IN_OP_C) || defined(PERL_IN_TOKE_C) #define ref(o, type) doref(o, type, TRUE) @@ -639,7 +651,7 @@ typedef struct { /* -=head1 Optree Manipulation Functions +=for apidoc_section $optree_manipulation =for apidoc Am|OP*|LINKLIST|OP *o Given the root of an optree, link the tree in execution order using the @@ -668,9 +680,9 @@ least an C. #endif #define NewOp(m,var,c,type) \ - (var = (type *) Perl_Slab_Alloc(aTHX_ c*sizeof(type))) + (var = (type *) Perl_Slab_Alloc(aTHX_ c*sizeof(type))) #define NewOpSz(m,var,size) \ - (var = (OP *) Perl_Slab_Alloc(aTHX_ size)) + (var = (OP *) Perl_Slab_Alloc(aTHX_ size)) #define FreeOp(p) Perl_Slab_Free(aTHX_ p) /* @@ -713,31 +725,33 @@ struct opslab { units) */ # ifdef PERL_DEBUG_READONLY_OPS bool opslab_readonly; - U8 opslab_padding; /* padding to ensure that opslab_slots is always */ -# else - U16 opslab_padding; /* located at an offset with 32-bit alignment */ # endif OPSLOT opslab_slots; /* slots begin here */ }; # define OPSLOT_HEADER STRUCT_OFFSET(OPSLOT, opslot_op) -# define OPSLOT_HEADER_P (OPSLOT_HEADER/sizeof(I32 *)) # define OpSLOT(o) (assert_(o->op_slabbed) \ - (OPSLOT *)(((char *)o)-OPSLOT_HEADER)) + (OPSLOT *)(((char *)o)-OPSLOT_HEADER)) +/* the slab that owns this op */ +# define OpMySLAB(o) \ + ((OPSLAB*)((char *)((I32**)OpSLOT(o) - OpSLOT(o)->opslot_offset)-STRUCT_OFFSET(struct opslab, opslab_slots))) /* the first (head) opslab of the chain in which this op is allocated */ # define OpSLAB(o) \ - (((OPSLAB*)( (I32**)OpSLOT(o) - OpSLOT(o)->opslot_offset))->opslab_head) + (OpMySLAB(o)->opslab_head) +/* calculate the slot given the owner slab and an offset */ +#define OpSLOToff(slab, offset) \ + ((OPSLOT*)(((I32 **)&(slab)->opslab_slots)+(offset))) # define OpslabREFCNT_dec(slab) \ - (((slab)->opslab_refcnt == 1) \ - ? opslab_free_nopad(slab) \ - : (void)--(slab)->opslab_refcnt) + (((slab)->opslab_refcnt == 1) \ + ? opslab_free_nopad(slab) \ + : (void)--(slab)->opslab_refcnt) /* Variant that does not null out the pads */ # define OpslabREFCNT_dec_padok(slab) \ - (((slab)->opslab_refcnt == 1) \ - ? opslab_free(slab) \ - : (void)--(slab)->opslab_refcnt) + (((slab)->opslab_refcnt == 1) \ + ? opslab_free(slab) \ + : (void)--(slab)->opslab_refcnt) #endif struct block_hooks { @@ -749,7 +763,7 @@ struct block_hooks { }; /* -=head1 Compile-time scope hooks +=for apidoc_section $scope =for apidoc mx|U32|BhkFLAGS|BHK *hk Return the BHK's flags. @@ -795,39 +809,39 @@ preprocessing token; the type of C depends on C. #define BhkENABLE(hk, which) \ STMT_START { \ - BhkFLAGS(hk) |= BHKf_ ## which; \ - assert(BhkENTRY(hk, which)); \ + BhkFLAGS(hk) |= BHKf_ ## which; \ + assert(BhkENTRY(hk, which)); \ } STMT_END #define BhkDISABLE(hk, which) \ STMT_START { \ - BhkFLAGS(hk) &= ~(BHKf_ ## which); \ + BhkFLAGS(hk) &= ~(BHKf_ ## which); \ } STMT_END #define BhkENTRY_set(hk, which, ptr) \ STMT_START { \ - (hk)->which = ptr; \ - BhkENABLE(hk, which); \ + (hk)->which = ptr; \ + BhkENABLE(hk, which); \ } STMT_END #define CALL_BLOCK_HOOKS(which, arg) \ STMT_START { \ - if (PL_blockhooks) { \ - SSize_t i; \ - for (i = av_tindex(PL_blockhooks); i >= 0; i--) { \ - SV *sv = AvARRAY(PL_blockhooks)[i]; \ - BHK *hk; \ - \ - assert(SvIOK(sv)); \ - if (SvUOK(sv)) \ - hk = INT2PTR(BHK *, SvUVX(sv)); \ - else \ - hk = INT2PTR(BHK *, SvIVX(sv)); \ - \ - if (BhkENTRY(hk, which)) \ - BhkENTRY(hk, which)(aTHX_ arg); \ - } \ - } \ + if (PL_blockhooks) { \ + SSize_t i; \ + for (i = av_top_index(PL_blockhooks); i >= 0; i--) { \ + SV *sv = AvARRAY(PL_blockhooks)[i]; \ + BHK *hk; \ + \ + assert(SvIOK(sv)); \ + if (SvUOK(sv)) \ + hk = INT2PTR(BHK *, SvUVX(sv)); \ + else \ + hk = INT2PTR(BHK *, SvIVX(sv)); \ + \ + if (BhkENTRY(hk, which)) \ + BhkENTRY(hk, which)(aTHX_ arg); \ + } \ + } \ } STMT_END /* flags for rv2cv_op_cv */ @@ -835,7 +849,7 @@ preprocessing token; the type of C depends on C. #define RV2CVOPCV_MARK_EARLY 0x00000001 #define RV2CVOPCV_RETURN_NAME_GV 0x00000002 #define RV2CVOPCV_RETURN_STUB 0x00000004 -#ifdef PERL_CORE /* behaviour of this flag is subject to change: */ +#if defined(PERL_CORE) || defined(PERL_EXT) /* behaviour of this flag is subject to change: */ # define RV2CVOPCV_MAYBE_NAME_GV 0x00000008 #endif #define RV2CVOPCV_FLAG_MASK 0x0000000f /* all of the above */ @@ -847,7 +861,7 @@ preprocessing token; the type of C depends on C. #define OP_LVALUE_NO_CROAK 1 /* -=head1 Custom Operators +=for apidoc_section $custom =for apidoc Am|U32|XopFLAGS|XOP *xop Return the XOP's flags. @@ -857,7 +871,7 @@ Return a member of the XOP structure. C is a cpp token indicating which entry to return. If the member is not set this will return a default value. The return type depends on C. This macro evaluates its arguments more than -once. If you are using C to retreive a +once. If you are using C to retrieve a C from a C, use the more efficient L instead. =for apidoc Am||XopENTRYCUSTOM|const OP *o|which @@ -922,8 +936,8 @@ typedef enum { #define XopENTRY_set(xop, which, to) \ STMT_START { \ - (xop)->which = (to); \ - (xop)->xop_flags |= XOPf_ ## which; \ + (xop)->which = (to); \ + (xop)->xop_flags |= XOPf_ ## which; \ } STMT_END #define XopENTRY(xop, which) \ @@ -935,15 +949,15 @@ typedef enum { #define XopDISABLE(xop, which) ((xop)->xop_flags &= ~XOPf_ ## which) #define XopENABLE(xop, which) \ STMT_START { \ - (xop)->xop_flags |= XOPf_ ## which; \ - assert(XopENTRY(xop, which)); \ + (xop)->xop_flags |= XOPf_ ## which; \ + assert(XopENTRY(xop, which)); \ } STMT_END #define Perl_custom_op_xop(x) \ (Perl_custom_op_get_field(x, XOPe_xop_ptr).xop_ptr) /* -=head1 Optree Manipulation Functions +=for apidoc_section $optree_manipulation =for apidoc Am|const char *|OP_NAME|OP *o Return the name of the provided OP. For core ops this looks up the name @@ -1007,13 +1021,13 @@ C is non-null. For a higher-level interface, see C>. #define OP_NAME(o) ((o)->op_type == OP_CUSTOM \ ? XopENTRYCUSTOM(o, xop_name) \ - : PL_op_name[(o)->op_type]) + : PL_op_name[(o)->op_type]) #define OP_DESC(o) ((o)->op_type == OP_CUSTOM \ ? XopENTRYCUSTOM(o, xop_desc) \ - : PL_op_desc[(o)->op_type]) + : PL_op_desc[(o)->op_type]) #define OP_CLASS(o) ((o)->op_type == OP_CUSTOM \ - ? XopENTRYCUSTOM(o, xop_class) \ - : (PL_opargs[(o)->op_type] & OA_CLASS_MASK)) + ? XopENTRYCUSTOM(o, xop_class) \ + : (PL_opargs[(o)->op_type] & OA_CLASS_MASK)) #define OP_TYPE_IS(o, type) ((o) && (o)->op_type == (type)) #define OP_TYPE_IS_NN(o, type) ((o)->op_type == (type)) @@ -1057,10 +1071,6 @@ C is non-null. For a higher-level interface, see C>. #define newATTRSUB(f, o, p, a, b) Perl_newATTRSUB_x(aTHX_ f, o, p, a, b, FALSE) #define newSUB(f, o, p, b) newATTRSUB((f), (o), (p), NULL, (b)) -/* -=head1 Hook manipulation -*/ - #ifdef USE_ITHREADS # define OP_CHECK_MUTEX_INIT MUTEX_INIT(&PL_check_mutex) # define OP_CHECK_MUTEX_LOCK MUTEX_LOCK(&PL_check_mutex) diff --git a/gnu/usr.bin/perl/op_reg_common.h b/gnu/usr.bin/perl/op_reg_common.h index c500aa4180e..e8770e6352e 100644 --- a/gnu/usr.bin/perl/op_reg_common.h +++ b/gnu/usr.bin/perl/op_reg_common.h @@ -137,8 +137,8 @@ get_regex_charset(const U32 flags) * directly in the #define because doing so confuses regcomp.pl. * (2**n - 1) is n 1 bits, so the below gets the contiguous bits between the * beginning and ending shifts */ -#if RXf_PMf_COMPILETIME != (((1 << (_RXf_PMf_SHIFT_COMPILETIME))-1) \ - & (~((1 << RXf_PMf_STD_PMMOD_SHIFT)-1))) +#if RXf_PMf_COMPILETIME != ((nBIT_MASK(_RXf_PMf_SHIFT_COMPILETIME)) \ + & (~(nBIT_MASK( RXf_PMf_STD_PMMOD_SHIFT)))) # error RXf_PMf_COMPILETIME is invalid #endif diff --git a/gnu/usr.bin/perl/opcode.h b/gnu/usr.bin/perl/opcode.h index 195898e4c33..838b2560cee 100644 --- a/gnu/usr.bin/perl/opcode.h +++ b/gnu/usr.bin/perl/opcode.h @@ -13,7 +13,7 @@ * Any changes made here will be lost! */ -#ifndef PERL_GLOBAL_STRUCT_INIT +#if defined(PERL_CORE) || defined(PERL_EXT) #define Perl_pp_scalar Perl_pp_null #define Perl_pp_padany Perl_unimplemented_op @@ -140,6 +140,9 @@ #define Perl_pp_sgrent Perl_pp_ehostent #define Perl_pp_egrent Perl_pp_ehostent #define Perl_pp_custom Perl_unimplemented_op + +#endif /* End of if defined(PERL_CORE) || defined(PERL_EXT) */ + START_EXTERN_C #ifndef DOINIT @@ -546,7 +549,21 @@ EXTCONST char* const PL_op_name[] = { "isa", "cmpchain_and", "cmpchain_dup", - "freed", + "entertrycatch", + "leavetrycatch", + "poptry", + "catch", + "pushdefer", + "is_bool", + "is_weak", + "weaken", + "unweaken", + "blessed", + "refaddr", + "reftype", + "ceil", + "floor", + "freed", }; #endif @@ -954,25 +971,30 @@ EXTCONST char* const PL_op_desc[] = { "derived class test", "comparison chaining", "comparand shuffling", - "freed op", + "try {block}", + "try {block} exit", + "pop try", + "catch {} block", + "push defer {} block", + "boolean type test", + "weakref type test", + "reference weaken", + "reference unweaken", + "blessed", + "refaddr", + "reftype", + "ceil", + "floor", + "freed op", }; #endif END_EXTERN_C -#endif /* !PERL_GLOBAL_STRUCT_INIT */ - START_EXTERN_C -#ifdef PERL_GLOBAL_STRUCT_INIT -# define PERL_PPADDR_INITED -static const Perl_ppaddr_t Gppaddr[] -#elif !defined(PERL_GLOBAL_STRUCT) -# define PERL_PPADDR_INITED EXT Perl_ppaddr_t PL_ppaddr[] /* or perlvars.h */ -#endif /* PERL_GLOBAL_STRUCT */ -#if (defined(DOINIT) && !defined(PERL_GLOBAL_STRUCT)) || defined(PERL_GLOBAL_STRUCT_INIT) -# define PERL_PPADDR_INITED +#if defined(DOINIT) = { Perl_pp_null, Perl_pp_stub, @@ -1374,21 +1396,26 @@ EXT Perl_ppaddr_t PL_ppaddr[] /* or perlvars.h */ Perl_pp_isa, Perl_pp_cmpchain_and, Perl_pp_cmpchain_dup, + Perl_pp_entertrycatch, + Perl_pp_leavetrycatch, + Perl_pp_poptry, + Perl_pp_catch, + Perl_pp_pushdefer, + Perl_pp_is_bool, + Perl_pp_is_weak, + Perl_pp_weaken, + Perl_pp_unweaken, + Perl_pp_blessed, + Perl_pp_refaddr, + Perl_pp_reftype, + Perl_pp_ceil, + Perl_pp_floor, } #endif -#ifdef PERL_PPADDR_INITED ; -#endif -#ifdef PERL_GLOBAL_STRUCT_INIT -# define PERL_CHECK_INITED -static const Perl_check_t Gcheck[] -#elif !defined(PERL_GLOBAL_STRUCT) -# define PERL_CHECK_INITED EXT Perl_check_t PL_check[] /* or perlvars.h */ -#endif -#if (defined(DOINIT) && !defined(PERL_GLOBAL_STRUCT)) || defined(PERL_GLOBAL_STRUCT_INIT) -# define PERL_CHECK_INITED +#if defined(DOINIT) = { Perl_ck_null, /* null */ Perl_ck_null, /* stub */ @@ -1790,13 +1817,23 @@ EXT Perl_check_t PL_check[] /* or perlvars.h */ Perl_ck_isa, /* isa */ Perl_ck_null, /* cmpchain_and */ Perl_ck_null, /* cmpchain_dup */ + Perl_ck_trycatch, /* entertrycatch */ + Perl_ck_null, /* leavetrycatch */ + Perl_ck_null, /* poptry */ + Perl_ck_null, /* catch */ + Perl_ck_null, /* pushdefer */ + Perl_ck_null, /* is_bool */ + Perl_ck_null, /* is_weak */ + Perl_ck_null, /* weaken */ + Perl_ck_null, /* unweaken */ + Perl_ck_null, /* blessed */ + Perl_ck_null, /* refaddr */ + Perl_ck_null, /* reftype */ + Perl_ck_null, /* ceil */ + Perl_ck_null, /* floor */ } #endif -#ifdef PERL_CHECK_INITED ; -#endif /* #ifdef PERL_CHECK_INITED */ - -#ifndef PERL_GLOBAL_STRUCT_INIT #ifndef DOINIT EXTCONST U32 PL_opargs[]; @@ -2202,11 +2239,23 @@ EXTCONST U32 PL_opargs[] = { 0x00000204, /* isa */ 0x00000300, /* cmpchain_and */ 0x00000100, /* cmpchain_dup */ + 0x00000300, /* entertrycatch */ + 0x00000400, /* leavetrycatch */ + 0x00000400, /* poptry */ + 0x00000300, /* catch */ + 0x00000300, /* pushdefer */ + 0x0000011e, /* is_bool */ + 0x0000011e, /* is_weak */ + 0x00000100, /* weaken */ + 0x00000100, /* unweaken */ + 0x00000106, /* blessed */ + 0x0000011e, /* refaddr */ + 0x0000011e, /* reftype */ + 0x0000011e, /* ceil */ + 0x0000011e, /* floor */ }; #endif -#endif /* !PERL_GLOBAL_STRUCT_INIT */ - END_EXTERN_C @@ -2242,6 +2291,7 @@ END_EXTERN_C #define OPpSORT_REVERSE 0x04 #define OPpSPLIT_IMPLIM 0x04 #define OPpTRANS_IDENTICAL 0x04 +#define OPpUSEINT 0x04 #define OPpARGELEM_MASK 0x06 #define OPpARG3_MASK 0x07 #define OPpPADRANGE_COUNTSHIFT 0x07 @@ -2307,24 +2357,21 @@ END_EXTERN_C #define OPpREFCOUNTED 0x40 #define OPpREPEAT_DOLIST 0x40 #define OPpSLICE 0x40 -#define OPpSORT_STABLE 0x40 #define OPpTRANS_GROWS 0x40 #define OPpPADRANGE_COUNTMASK 0x7f #define OPpASSIGN_CV_TO_GV 0x80 #define OPpCOREARGS_PUSHMARK 0x80 +#define OPpDEFER_FINALLY 0x80 #define OPpENTERSUB_NOPAREN 0x80 #define OPpLVALUE 0x80 #define OPpLVAL_INTRO 0x80 #define OPpOFFBYONE 0x80 #define OPpOPEN_OUT_CRLF 0x80 #define OPpPV_IS_UTF8 0x80 -#define OPpSORT_UNSTABLE 0x80 #define OPpTRANS_DELETE 0x80 START_EXTERN_C -#ifndef PERL_GLOBAL_STRUCT_INIT - -# ifndef DOINIT +#ifndef DOINIT /* data about the flags in op_private */ @@ -2334,7 +2381,7 @@ EXTCONST char PL_op_private_labels[]; EXTCONST I16 PL_op_private_bitfields[]; EXTCONST U8 PL_op_private_valid[]; -# else +#else /* PL_op_private_labels[]: the short descriptions of private flags. @@ -2380,6 +2427,7 @@ EXTCONST char PL_op_private_labels[] = { 'E','N','T','E','R','E','D','\0', 'E','X','I','S','T','S','\0', 'F','A','K','E','\0', + 'F','I','N','A','L','L','Y','\0', 'F','T','A','C','C','E','S','S','\0', 'F','T','A','F','T','E','R','t','\0', 'F','T','S','T','A','C','K','E','D','\0', @@ -2424,7 +2472,6 @@ EXTCONST char PL_op_private_labels[] = { 'S','L','I','C','E','\0', 'S','L','I','C','E','W','A','R','N','\0', 'S','Q','U','A','S','H','\0', - 'S','T','A','B','L','E','\0', 'S','T','A','T','E','\0', 'S','T','R','I','C','T','\0', 'S','T','R','I','N','G','I','F','Y','\0', @@ -2433,7 +2480,7 @@ EXTCONST char PL_op_private_labels[] = { 'T','A','R','G','\0', 'T','A','R','G','M','Y','\0', 'U','N','I','\0', - 'U','N','S','T','A','B','L','E','\0', + 'U','S','E','I','N','T','\0', 'U','S','E','_','S','V','O','P','\0', 'U','T','F','\0', 'k','e','y','\0', @@ -2457,14 +2504,14 @@ EXTCONST char PL_op_private_labels[] = { EXTCONST I16 PL_op_private_bitfields[] = { 0, 8, -1, 0, 8, -1, - 0, 597, -1, + 0, 596, -1, 0, 8, -1, 0, 8, -1, - 0, 604, -1, - 0, 593, -1, - 1, -1, 0, 552, 1, 30, 2, 295, -1, + 0, 603, -1, + 0, 592, -1, + 1, -1, 0, 553, 1, 30, 2, 303, -1, 4, -1, 1, 176, 2, 183, 3, 190, -1, - 4, -1, 0, 552, 1, 30, 2, 295, 3, 122, -1, + 4, -1, 0, 553, 1, 30, 2, 303, 3, 122, -1, }; @@ -2542,8 +2589,8 @@ EXTCONST I16 PL_op_private_bitdef_ix[] = { 84, /* concat */ 87, /* multiconcat */ 93, /* stringify */ - 80, /* left_shift */ - 80, /* right_shift */ + 95, /* left_shift */ + 95, /* right_shift */ 12, /* lt */ 12, /* i_lt */ 12, /* gt */ @@ -2565,20 +2612,20 @@ EXTCONST I16 PL_op_private_bitdef_ix[] = { 12, /* seq */ 12, /* sne */ 12, /* scmp */ - 12, /* bit_and */ - 12, /* bit_xor */ - 12, /* bit_or */ - 80, /* nbit_and */ - 80, /* nbit_xor */ - 80, /* nbit_or */ - 12, /* sbit_and */ - 12, /* sbit_xor */ - 12, /* sbit_or */ + 97, /* bit_and */ + 97, /* bit_xor */ + 97, /* bit_or */ + 95, /* nbit_and */ + 95, /* nbit_xor */ + 95, /* nbit_or */ + 97, /* sbit_and */ + 97, /* sbit_xor */ + 97, /* sbit_or */ 0, /* negate */ 0, /* i_negate */ 0, /* not */ - 0, /* complement */ - 75, /* ncomplement */ + 97, /* complement */ + 95, /* ncomplement */ 75, /* scomplement */ 12, /* smartmatch */ 93, /* atan2 */ @@ -2593,11 +2640,11 @@ EXTCONST I16 PL_op_private_bitdef_ix[] = { 75, /* hex */ 75, /* oct */ 75, /* abs */ - 95, /* length */ - 98, /* substr */ - 101, /* vec */ - 103, /* index */ - 103, /* rindex */ + 98, /* length */ + 101, /* substr */ + 104, /* vec */ + 106, /* index */ + 106, /* rindex */ 52, /* sprintf */ 52, /* formline */ 75, /* ord */ @@ -2608,30 +2655,30 @@ EXTCONST I16 PL_op_private_bitdef_ix[] = { 0, /* uc */ 0, /* lc */ 0, /* quotemeta */ - 107, /* rv2av */ - 114, /* aelemfast */ - 114, /* aelemfast_lex */ - 115, /* aelem */ - 120, /* aslice */ - 123, /* kvaslice */ + 110, /* rv2av */ + 117, /* aelemfast */ + 117, /* aelemfast_lex */ + 118, /* aelem */ + 123, /* aslice */ + 126, /* kvaslice */ 0, /* aeach */ 0, /* avalues */ 40, /* akeys */ 0, /* each */ 40, /* values */ 40, /* keys */ - 124, /* delete */ - 128, /* exists */ - 130, /* rv2hv */ - 115, /* helem */ - 120, /* hslice */ - 123, /* kvhslice */ - 138, /* multideref */ + 127, /* delete */ + 131, /* exists */ + 133, /* rv2hv */ + 118, /* helem */ + 123, /* hslice */ + 126, /* kvhslice */ + 141, /* multideref */ 52, /* unpack */ 52, /* pack */ - 145, /* split */ + 148, /* split */ 52, /* join */ - 150, /* list */ + 153, /* list */ 12, /* lslice */ 52, /* anonlist */ 52, /* anonhash */ @@ -2640,50 +2687,50 @@ EXTCONST I16 PL_op_private_bitdef_ix[] = { 0, /* pop */ 0, /* shift */ 93, /* unshift */ - 152, /* sort */ - 159, /* reverse */ + 155, /* sort */ + 160, /* reverse */ 0, /* grepstart */ - 161, /* grepwhile */ + 162, /* grepwhile */ 0, /* mapstart */ 0, /* mapwhile */ 0, /* range */ - 163, /* flip */ - 163, /* flop */ + 164, /* flip */ + 164, /* flop */ 0, /* and */ 0, /* or */ 12, /* xor */ 0, /* dor */ - 165, /* cond_expr */ + 166, /* cond_expr */ 0, /* andassign */ 0, /* orassign */ 0, /* dorassign */ - 167, /* entersub */ - 174, /* leavesub */ - 174, /* leavesublv */ + 168, /* entersub */ + 175, /* leavesub */ + 175, /* leavesublv */ 0, /* argcheck */ - 176, /* argelem */ + 177, /* argelem */ 0, /* argdefelem */ - 178, /* caller */ + 179, /* caller */ 52, /* warn */ 52, /* die */ 52, /* reset */ -1, /* lineseq */ - 180, /* nextstate */ - 180, /* dbstate */ + 181, /* nextstate */ + 181, /* dbstate */ -1, /* unstack */ -1, /* enter */ - 181, /* leave */ + 182, /* leave */ -1, /* scope */ - 183, /* enteriter */ - 187, /* iter */ + 184, /* enteriter */ + 188, /* iter */ -1, /* enterloop */ - 188, /* leaveloop */ + 189, /* leaveloop */ -1, /* return */ - 190, /* last */ - 190, /* next */ - 190, /* redo */ - 190, /* dump */ - 190, /* goto */ + 191, /* last */ + 191, /* next */ + 191, /* redo */ + 191, /* dump */ + 191, /* goto */ 52, /* exit */ 0, /* method */ 0, /* method_named */ @@ -2696,7 +2743,7 @@ EXTCONST I16 PL_op_private_bitdef_ix[] = { 0, /* leavewhen */ -1, /* break */ -1, /* continue */ - 192, /* open */ + 193, /* open */ 52, /* close */ 52, /* pipe_op */ 52, /* fileno */ @@ -2712,7 +2759,7 @@ EXTCONST I16 PL_op_private_bitdef_ix[] = { 52, /* getc */ 52, /* read */ 52, /* enterwrite */ - 174, /* leavewrite */ + 175, /* leavewrite */ -1, /* prtf */ -1, /* print */ -1, /* say */ @@ -2742,33 +2789,33 @@ EXTCONST I16 PL_op_private_bitdef_ix[] = { 0, /* getpeername */ 0, /* lstat */ 0, /* stat */ - 197, /* ftrread */ - 197, /* ftrwrite */ - 197, /* ftrexec */ - 197, /* fteread */ - 197, /* ftewrite */ - 197, /* fteexec */ - 202, /* ftis */ - 202, /* ftsize */ - 202, /* ftmtime */ - 202, /* ftatime */ - 202, /* ftctime */ - 202, /* ftrowned */ - 202, /* fteowned */ - 202, /* ftzero */ - 202, /* ftsock */ - 202, /* ftchr */ - 202, /* ftblk */ - 202, /* ftfile */ - 202, /* ftdir */ - 202, /* ftpipe */ - 202, /* ftsuid */ - 202, /* ftsgid */ - 202, /* ftsvtx */ - 202, /* ftlink */ - 202, /* fttty */ - 202, /* fttext */ - 202, /* ftbinary */ + 198, /* ftrread */ + 198, /* ftrwrite */ + 198, /* ftrexec */ + 198, /* fteread */ + 198, /* ftewrite */ + 198, /* fteexec */ + 203, /* ftis */ + 203, /* ftsize */ + 203, /* ftmtime */ + 203, /* ftatime */ + 203, /* ftctime */ + 203, /* ftrowned */ + 203, /* fteowned */ + 203, /* ftzero */ + 203, /* ftsock */ + 203, /* ftchr */ + 203, /* ftblk */ + 203, /* ftfile */ + 203, /* ftdir */ + 203, /* ftpipe */ + 203, /* ftsuid */ + 203, /* ftsgid */ + 203, /* ftsvtx */ + 203, /* ftlink */ + 203, /* fttty */ + 203, /* fttext */ + 203, /* ftbinary */ 93, /* chdir */ 93, /* chown */ 75, /* chroot */ @@ -2788,17 +2835,17 @@ EXTCONST I16 PL_op_private_bitdef_ix[] = { 0, /* rewinddir */ 0, /* closedir */ -1, /* fork */ - 206, /* wait */ + 207, /* wait */ 93, /* waitpid */ 93, /* system */ 93, /* exec */ 93, /* kill */ - 206, /* getppid */ + 207, /* getppid */ 93, /* getpgrp */ 93, /* setpgrp */ 93, /* getpriority */ 93, /* setpriority */ - 206, /* time */ + 207, /* time */ -1, /* tms */ 0, /* localtime */ 52, /* gmtime */ @@ -2818,8 +2865,8 @@ EXTCONST I16 PL_op_private_bitdef_ix[] = { 0, /* require */ 0, /* dofile */ -1, /* hintseval */ - 207, /* entereval */ - 174, /* leaveeval */ + 208, /* entereval */ + 175, /* leaveeval */ 0, /* entertry */ -1, /* leavetry */ 0, /* ghbyname */ @@ -2857,22 +2904,36 @@ EXTCONST I16 PL_op_private_bitdef_ix[] = { 0, /* lock */ 0, /* once */ -1, /* custom */ - 213, /* coreargs */ - 217, /* avhvswitch */ + 214, /* coreargs */ + 218, /* avhvswitch */ 3, /* runcv */ 0, /* fc */ -1, /* padcv */ -1, /* introcv */ -1, /* clonecv */ - 219, /* padrange */ - 221, /* refassign */ - 227, /* lvref */ - 233, /* lvrefslice */ - 234, /* lvavref */ + 220, /* padrange */ + 222, /* refassign */ + 228, /* lvref */ + 234, /* lvrefslice */ + 235, /* lvavref */ 0, /* anonconst */ 12, /* isa */ 0, /* cmpchain_and */ 0, /* cmpchain_dup */ + 0, /* entertrycatch */ + -1, /* leavetrycatch */ + -1, /* poptry */ + 0, /* catch */ + 238, /* pushdefer */ + 75, /* is_bool */ + 75, /* is_weak */ + 0, /* weaken */ + 0, /* unweaken */ + 49, /* blessed */ + 75, /* refaddr */ + 75, /* reftype */ + 75, /* ceil */ + 75, /* floor */ }; @@ -2891,76 +2952,79 @@ EXTCONST I16 PL_op_private_bitdef_ix[] = { */ EXTCONST U16 PL_op_private_bitdefs[] = { - 0x0003, /* scalar, prototype, refgen, srefgen, readline, regcmaybe, regcreset, regcomp, substcont, chop, schop, defined, undef, study, preinc, i_preinc, predec, i_predec, postinc, i_postinc, postdec, i_postdec, negate, i_negate, not, complement, ucfirst, lcfirst, uc, lc, quotemeta, aeach, avalues, each, pop, shift, grepstart, mapstart, mapwhile, range, and, or, dor, andassign, orassign, dorassign, argcheck, argdefelem, method, method_named, method_super, method_redir, method_redir_super, entergiven, leavegiven, enterwhen, leavewhen, untie, tied, dbmclose, getsockname, getpeername, lstat, stat, readlink, readdir, telldir, rewinddir, closedir, localtime, alarm, require, dofile, entertry, ghbyname, gnbyname, gpbyname, shostent, snetent, sprotoent, sservent, gpwnam, gpwuid, ggrnam, ggrgid, lock, once, fc, anonconst, cmpchain_and, cmpchain_dup */ - 0x2fdc, 0x41b9, /* pushmark */ + 0x0003, /* scalar, prototype, refgen, srefgen, readline, regcmaybe, regcreset, regcomp, substcont, chop, schop, defined, undef, study, preinc, i_preinc, predec, i_predec, postinc, i_postinc, postdec, i_postdec, negate, i_negate, not, ucfirst, lcfirst, uc, lc, quotemeta, aeach, avalues, each, pop, shift, grepstart, mapstart, mapwhile, range, and, or, dor, andassign, orassign, dorassign, argcheck, argdefelem, method, method_named, method_super, method_redir, method_redir_super, entergiven, leavegiven, enterwhen, leavewhen, untie, tied, dbmclose, getsockname, getpeername, lstat, stat, readlink, readdir, telldir, rewinddir, closedir, localtime, alarm, require, dofile, entertry, ghbyname, gnbyname, gpbyname, shostent, snetent, sprotoent, sservent, gpwnam, gpwuid, ggrnam, ggrgid, lock, once, fc, anonconst, cmpchain_and, cmpchain_dup, entertrycatch, catch, weaken, unweaken */ + 0x30dc, 0x41d9, /* pushmark */ 0x00bd, /* wantarray, runcv */ - 0x0438, 0x1a50, 0x426c, 0x3d28, 0x3505, /* const */ - 0x2fdc, 0x3659, /* gvsv */ + 0x0438, 0x1a50, 0x428c, 0x3e28, 0x3605, /* const */ + 0x30dc, 0x3759, /* gvsv */ 0x18b5, /* gv */ - 0x0067, /* gelem, lt, i_lt, gt, i_gt, le, i_le, ge, i_ge, eq, i_eq, ne, i_ne, ncmp, i_ncmp, slt, sgt, sle, sge, seq, sne, scmp, bit_and, bit_xor, bit_or, sbit_and, sbit_xor, sbit_or, smartmatch, lslice, xor, isa */ - 0x2fdc, 0x41b8, 0x03d7, /* padsv */ - 0x2fdc, 0x41b8, 0x05b4, 0x30cc, 0x3ea9, /* padav */ - 0x2fdc, 0x41b8, 0x05b4, 0x0650, 0x30cc, 0x3ea8, 0x2b41, /* padhv */ - 0x2fdc, 0x1c38, 0x03d6, 0x30cc, 0x3428, 0x4264, 0x0003, /* rv2gv */ - 0x2fdc, 0x3658, 0x03d6, 0x4264, 0x0003, /* rv2sv */ - 0x30cc, 0x0003, /* av2arylen, akeys, values, keys */ - 0x339c, 0x1078, 0x0dd4, 0x014c, 0x4568, 0x4264, 0x0003, /* rv2cv */ - 0x05b4, 0x0650, 0x0003, /* ref */ + 0x0067, /* gelem, lt, i_lt, gt, i_gt, le, i_le, ge, i_ge, eq, i_eq, ne, i_ne, ncmp, i_ncmp, slt, sgt, sle, sge, seq, sne, scmp, smartmatch, lslice, xor, isa */ + 0x30dc, 0x41d8, 0x03d7, /* padsv */ + 0x30dc, 0x41d8, 0x05b4, 0x31cc, 0x3fa9, /* padav */ + 0x30dc, 0x41d8, 0x05b4, 0x0650, 0x31cc, 0x3fa8, 0x2c41, /* padhv */ + 0x30dc, 0x1c38, 0x03d6, 0x31cc, 0x3528, 0x4284, 0x0003, /* rv2gv */ + 0x30dc, 0x3758, 0x03d6, 0x4284, 0x0003, /* rv2sv */ + 0x31cc, 0x0003, /* av2arylen, akeys, values, keys */ + 0x349c, 0x1078, 0x0dd4, 0x014c, 0x4588, 0x4284, 0x0003, /* rv2cv */ + 0x05b4, 0x0650, 0x0003, /* ref, blessed */ 0x018f, /* bless, glob, sprintf, formline, unpack, pack, join, anonlist, anonhash, splice, warn, die, reset, exit, close, pipe_op, fileno, umask, binmode, tie, dbmopen, sselect, select, getc, read, enterwrite, sysopen, sysseek, sysread, syswrite, eof, tell, seek, truncate, fcntl, ioctl, send, recv, socket, sockpair, bind, connect, listen, accept, shutdown, gsockopt, ssockopt, open_dir, seekdir, gmtime, shmget, shmctl, shmread, shmwrite, msgget, msgctl, msgsnd, msgrcv, semop, semget, semctl, ghbyaddr, gnbyaddr, gpbynumber, gsbyname, gsbyport, syscall */ - 0x383c, 0x3758, 0x2894, 0x27d0, 0x0003, /* backtick */ + 0x393c, 0x3858, 0x2994, 0x28d0, 0x0003, /* backtick */ 0x05b5, /* subst */ - 0x117c, 0x21b8, 0x09b4, 0x3fec, 0x2548, 0x4884, 0x07c1, /* trans, transr */ + 0x117c, 0x22b8, 0x09b4, 0x40ec, 0x2648, 0x4864, 0x07c1, /* trans, transr */ 0x0fbc, 0x04d8, 0x0067, /* sassign */ - 0x0c78, 0x0b74, 0x0a70, 0x30cc, 0x05a8, 0x0067, /* aassign */ - 0x4610, 0x0003, /* chomp, schomp, ncomplement, scomplement, sin, cos, exp, log, sqrt, int, hex, oct, abs, ord, chr, chroot, rmdir */ - 0x05b4, 0x30cc, 0x0003, /* pos */ - 0x4610, 0x0067, /* pow, multiply, i_multiply, divide, i_divide, modulo, i_modulo, add, i_add, subtract, i_subtract, left_shift, right_shift, nbit_and, nbit_xor, nbit_or */ + 0x0c78, 0x0b74, 0x0a70, 0x31cc, 0x05a8, 0x0067, /* aassign */ + 0x4630, 0x0003, /* chomp, schomp, scomplement, sin, cos, exp, log, sqrt, int, hex, oct, abs, ord, chr, chroot, rmdir, is_bool, is_weak, refaddr, reftype, ceil, floor */ + 0x05b4, 0x31cc, 0x0003, /* pos */ + 0x4630, 0x0067, /* pow, multiply, i_multiply, divide, i_divide, modulo, i_modulo, add, i_add, subtract, i_subtract */ 0x1538, 0x0067, /* repeat */ - 0x32b8, 0x4610, 0x0067, /* concat */ - 0x2fdc, 0x0218, 0x1c34, 0x4610, 0x434c, 0x0003, /* multiconcat */ - 0x4610, 0x018f, /* stringify, atan2, rand, srand, crypt, push, unshift, flock, chdir, chown, unlink, chmod, utime, rename, link, symlink, mkdir, waitpid, system, exec, kill, getpgrp, setpgrp, getpriority, setpriority, sleep */ - 0x05b4, 0x4610, 0x0003, /* length */ - 0x3a90, 0x30cc, 0x012b, /* substr */ - 0x30cc, 0x0067, /* vec */ - 0x3238, 0x05b4, 0x4610, 0x018f, /* index, rindex */ - 0x2fdc, 0x3658, 0x05b4, 0x30cc, 0x3ea8, 0x4264, 0x0003, /* rv2av */ + 0x33b8, 0x4630, 0x0067, /* concat */ + 0x30dc, 0x0218, 0x1c34, 0x4630, 0x436c, 0x0003, /* multiconcat */ + 0x4630, 0x018f, /* stringify, atan2, rand, srand, crypt, push, unshift, flock, chdir, chown, unlink, chmod, utime, rename, link, symlink, mkdir, waitpid, system, exec, kill, getpgrp, setpgrp, getpriority, setpriority, sleep */ + 0x4630, 0x4789, /* left_shift, right_shift, nbit_and, nbit_xor, nbit_or, ncomplement */ + 0x4789, /* bit_and, bit_xor, bit_or, sbit_and, sbit_xor, sbit_or, complement */ + 0x05b4, 0x4630, 0x0003, /* length */ + 0x3b90, 0x31cc, 0x012b, /* substr */ + 0x31cc, 0x0067, /* vec */ + 0x3338, 0x05b4, 0x4630, 0x018f, /* index, rindex */ + 0x30dc, 0x3758, 0x05b4, 0x31cc, 0x3fa8, 0x4284, 0x0003, /* rv2av */ 0x025f, /* aelemfast, aelemfast_lex */ - 0x2fdc, 0x2ed8, 0x03d6, 0x30cc, 0x0067, /* aelem, helem */ - 0x2fdc, 0x30cc, 0x3ea9, /* aslice, hslice */ - 0x30cd, /* kvaslice, kvhslice */ - 0x2fdc, 0x3df8, 0x2bf4, 0x0003, /* delete */ - 0x4498, 0x0003, /* exists */ - 0x2fdc, 0x3658, 0x05b4, 0x0650, 0x30cc, 0x3ea8, 0x4264, 0x2b41, /* rv2hv */ - 0x2fdc, 0x2ed8, 0x11f4, 0x1b50, 0x30cc, 0x4264, 0x0003, /* multideref */ - 0x2fdc, 0x3658, 0x02f0, 0x2cec, 0x2609, /* split */ - 0x2fdc, 0x2279, /* list */ - 0x477c, 0x40d8, 0x1490, 0x292c, 0x3b88, 0x2a24, 0x35c1, /* sort */ - 0x292c, 0x0003, /* reverse */ + 0x30dc, 0x2fd8, 0x03d6, 0x31cc, 0x0067, /* aelem, helem */ + 0x30dc, 0x31cc, 0x3fa9, /* aslice, hslice */ + 0x31cd, /* kvaslice, kvhslice */ + 0x30dc, 0x3ef8, 0x2cf4, 0x0003, /* delete */ + 0x44b8, 0x0003, /* exists */ + 0x30dc, 0x3758, 0x05b4, 0x0650, 0x31cc, 0x3fa8, 0x4284, 0x2c41, /* rv2hv */ + 0x30dc, 0x2fd8, 0x11f4, 0x1b50, 0x31cc, 0x4284, 0x0003, /* multideref */ + 0x30dc, 0x3758, 0x02f0, 0x2dec, 0x2709, /* split */ + 0x30dc, 0x2379, /* list */ + 0x1490, 0x2a2c, 0x3c88, 0x2b24, 0x36c1, /* sort */ + 0x2a2c, 0x0003, /* reverse */ 0x05b4, 0x0003, /* grepwhile */ - 0x2d78, 0x0003, /* flip, flop */ - 0x2fdc, 0x0003, /* cond_expr */ - 0x2fdc, 0x1078, 0x03d6, 0x014c, 0x4568, 0x4264, 0x26e1, /* entersub */ - 0x38f8, 0x0003, /* leavesub, leavesublv, leavewrite, leaveeval */ + 0x2e78, 0x0003, /* flip, flop */ + 0x30dc, 0x0003, /* cond_expr */ + 0x30dc, 0x1078, 0x03d6, 0x014c, 0x4588, 0x4284, 0x27e1, /* entersub */ + 0x39f8, 0x0003, /* leavesub, leavesublv, leavewrite, leaveeval */ 0x02aa, 0x0003, /* argelem */ 0x00bc, 0x018f, /* caller */ - 0x2455, /* nextstate, dbstate */ - 0x2e7c, 0x38f9, /* leave */ - 0x2fdc, 0x3658, 0x10ec, 0x3c05, /* enteriter */ - 0x3c05, /* iter */ - 0x2e7c, 0x0067, /* leaveloop */ - 0x49bc, 0x0003, /* last, next, redo, dump, goto */ - 0x383c, 0x3758, 0x2894, 0x27d0, 0x018f, /* open */ - 0x1df0, 0x204c, 0x1f08, 0x1cc4, 0x0003, /* ftrread, ftrwrite, ftrexec, fteread, ftewrite, fteexec */ - 0x1df0, 0x204c, 0x1f08, 0x0003, /* ftis, ftsize, ftmtime, ftatime, ftctime, ftrowned, fteowned, ftzero, ftsock, ftchr, ftblk, ftfile, ftdir, ftpipe, ftsuid, ftsgid, ftsvtx, ftlink, fttty, fttext, ftbinary */ - 0x4611, /* wait, getppid, time */ - 0x3994, 0x0e90, 0x070c, 0x46e8, 0x2364, 0x0003, /* entereval */ - 0x319c, 0x0018, 0x13a4, 0x12c1, /* coreargs */ - 0x30cc, 0x00c7, /* avhvswitch */ - 0x2fdc, 0x01fb, /* padrange */ - 0x2fdc, 0x41b8, 0x04f6, 0x2aac, 0x19a8, 0x0067, /* refassign */ - 0x2fdc, 0x41b8, 0x04f6, 0x2aac, 0x19a8, 0x0003, /* lvref */ - 0x2fdd, /* lvrefslice */ - 0x2fdc, 0x41b8, 0x0003, /* lvavref */ + 0x2555, /* nextstate, dbstate */ + 0x2f7c, 0x39f9, /* leave */ + 0x30dc, 0x3758, 0x10ec, 0x3d05, /* enteriter */ + 0x3d05, /* iter */ + 0x2f7c, 0x0067, /* leaveloop */ + 0x499c, 0x0003, /* last, next, redo, dump, goto */ + 0x393c, 0x3858, 0x2994, 0x28d0, 0x018f, /* open */ + 0x1ef0, 0x214c, 0x2008, 0x1dc4, 0x0003, /* ftrread, ftrwrite, ftrexec, fteread, ftewrite, fteexec */ + 0x1ef0, 0x214c, 0x2008, 0x0003, /* ftis, ftsize, ftmtime, ftatime, ftctime, ftrowned, fteowned, ftzero, ftsock, ftchr, ftblk, ftfile, ftdir, ftpipe, ftsuid, ftsgid, ftsvtx, ftlink, fttty, fttext, ftbinary */ + 0x4631, /* wait, getppid, time */ + 0x3a94, 0x0e90, 0x070c, 0x4708, 0x2464, 0x0003, /* entereval */ + 0x329c, 0x0018, 0x13a4, 0x12c1, /* coreargs */ + 0x31cc, 0x00c7, /* avhvswitch */ + 0x30dc, 0x01fb, /* padrange */ + 0x30dc, 0x41d8, 0x04f6, 0x2bac, 0x19a8, 0x0067, /* refassign */ + 0x30dc, 0x41d8, 0x04f6, 0x2bac, 0x19a8, 0x0003, /* lvref */ + 0x30dd, /* lvrefslice */ + 0x30dc, 0x41d8, 0x0003, /* lvavref */ + 0x1cdc, 0x0003, /* pushdefer */ }; @@ -3038,8 +3102,8 @@ EXTCONST U8 PL_op_private_valid[] = { /* CONCAT */ (OPpARG2_MASK|OPpTARGET_MY|OPpCONCAT_NESTED), /* MULTICONCAT */ (OPpARG1_MASK|OPpMULTICONCAT_STRINGIFY|OPpTARGET_MY|OPpMULTICONCAT_FAKE|OPpMULTICONCAT_APPEND|OPpLVAL_INTRO), /* STRINGIFY */ (OPpARG4_MASK|OPpTARGET_MY), - /* LEFT_SHIFT */ (OPpARG2_MASK|OPpTARGET_MY), - /* RIGHT_SHIFT */ (OPpARG2_MASK|OPpTARGET_MY), + /* LEFT_SHIFT */ (OPpUSEINT|OPpTARGET_MY), + /* RIGHT_SHIFT */ (OPpUSEINT|OPpTARGET_MY), /* LT */ (OPpARG2_MASK), /* I_LT */ (OPpARG2_MASK), /* GT */ (OPpARG2_MASK), @@ -3061,20 +3125,20 @@ EXTCONST U8 PL_op_private_valid[] = { /* SEQ */ (OPpARG2_MASK), /* SNE */ (OPpARG2_MASK), /* SCMP */ (OPpARG2_MASK), - /* BIT_AND */ (OPpARG2_MASK), - /* BIT_XOR */ (OPpARG2_MASK), - /* BIT_OR */ (OPpARG2_MASK), - /* NBIT_AND */ (OPpARG2_MASK|OPpTARGET_MY), - /* NBIT_XOR */ (OPpARG2_MASK|OPpTARGET_MY), - /* NBIT_OR */ (OPpARG2_MASK|OPpTARGET_MY), - /* SBIT_AND */ (OPpARG2_MASK), - /* SBIT_XOR */ (OPpARG2_MASK), - /* SBIT_OR */ (OPpARG2_MASK), + /* BIT_AND */ (OPpUSEINT), + /* BIT_XOR */ (OPpUSEINT), + /* BIT_OR */ (OPpUSEINT), + /* NBIT_AND */ (OPpUSEINT|OPpTARGET_MY), + /* NBIT_XOR */ (OPpUSEINT|OPpTARGET_MY), + /* NBIT_OR */ (OPpUSEINT|OPpTARGET_MY), + /* SBIT_AND */ (OPpUSEINT), + /* SBIT_XOR */ (OPpUSEINT), + /* SBIT_OR */ (OPpUSEINT), /* NEGATE */ (OPpARG1_MASK), /* I_NEGATE */ (OPpARG1_MASK), /* NOT */ (OPpARG1_MASK), - /* COMPLEMENT */ (OPpARG1_MASK), - /* NCOMPLEMENT */ (OPpARG1_MASK|OPpTARGET_MY), + /* COMPLEMENT */ (OPpUSEINT), + /* NCOMPLEMENT */ (OPpUSEINT|OPpTARGET_MY), /* SCOMPLEMENT */ (OPpARG1_MASK|OPpTARGET_MY), /* SMARTMATCH */ (OPpARG2_MASK), /* ATAN2 */ (OPpARG4_MASK|OPpTARGET_MY), @@ -3136,7 +3200,7 @@ EXTCONST U8 PL_op_private_valid[] = { /* POP */ (OPpARG1_MASK), /* SHIFT */ (OPpARG1_MASK), /* UNSHIFT */ (OPpARG4_MASK|OPpTARGET_MY), - /* SORT */ (OPpSORT_NUMERIC|OPpSORT_INTEGER|OPpSORT_REVERSE|OPpSORT_INPLACE|OPpSORT_DESCEND|OPpSORT_STABLE|OPpSORT_UNSTABLE), + /* SORT */ (OPpSORT_NUMERIC|OPpSORT_INTEGER|OPpSORT_REVERSE|OPpSORT_INPLACE|OPpSORT_DESCEND), /* REVERSE */ (OPpARG1_MASK|OPpREVERSE_INPLACE), /* GREPSTART */ (OPpARG1_MASK), /* GREPWHILE */ (OPpARG1_MASK|OPpTRUEBOOL), @@ -3369,11 +3433,24 @@ EXTCONST U8 PL_op_private_valid[] = { /* ISA */ (OPpARG2_MASK), /* CMPCHAIN_AND */ (OPpARG1_MASK), /* CMPCHAIN_DUP */ (OPpARG1_MASK), + /* ENTERTRYCATCH */ (OPpARG1_MASK), + /* LEAVETRYCATCH */ (0), + /* POPTRY */ (0), + /* CATCH */ (OPpARG1_MASK), + /* PUSHDEFER */ (OPpARG1_MASK|OPpDEFER_FINALLY), + /* IS_BOOL */ (OPpARG1_MASK|OPpTARGET_MY), + /* IS_WEAK */ (OPpARG1_MASK|OPpTARGET_MY), + /* WEAKEN */ (OPpARG1_MASK), + /* UNWEAKEN */ (OPpARG1_MASK), + /* BLESSED */ (OPpARG1_MASK|OPpMAYBE_TRUEBOOL|OPpTRUEBOOL), + /* REFADDR */ (OPpARG1_MASK|OPpTARGET_MY), + /* REFTYPE */ (OPpARG1_MASK|OPpTARGET_MY), + /* CEIL */ (OPpARG1_MASK|OPpTARGET_MY), + /* FLOOR */ (OPpARG1_MASK|OPpTARGET_MY), }; -# endif /* !DOINIT */ -#endif /* !PERL_GLOBAL_STRUCT_INIT */ +#endif /* !DOINIT */ END_EXTERN_C diff --git a/gnu/usr.bin/perl/opnames.h b/gnu/usr.bin/perl/opnames.h index 0e325466d15..5bf8f4903f4 100644 --- a/gnu/usr.bin/perl/opnames.h +++ b/gnu/usr.bin/perl/opnames.h @@ -414,10 +414,24 @@ typedef enum opcode { OP_ISA = 397, OP_CMPCHAIN_AND = 398, OP_CMPCHAIN_DUP = 399, + OP_ENTERTRYCATCH = 400, + OP_LEAVETRYCATCH = 401, + OP_POPTRY = 402, + OP_CATCH = 403, + OP_PUSHDEFER = 404, + OP_IS_BOOL = 405, + OP_IS_WEAK = 406, + OP_WEAKEN = 407, + OP_UNWEAKEN = 408, + OP_BLESSED = 409, + OP_REFADDR = 410, + OP_REFTYPE = 411, + OP_CEIL = 412, + OP_FLOOR = 413, OP_max } opcode; -#define MAXO 400 +#define MAXO 414 #define OP_FREED MAXO /* the OP_IS_* macros are optimized to a simple range check because diff --git a/gnu/usr.bin/perl/os2/Makefile.SHs b/gnu/usr.bin/perl/os2/Makefile.SHs index 00e785fef18..db23b1c9754 100644 --- a/gnu/usr.bin/perl/os2/Makefile.SHs +++ b/gnu/usr.bin/perl/os2/Makefile.SHs @@ -6,7 +6,7 @@ # Additional rules supported: perl_, aout_test, aout_install, use them # for a.out style perl (which may fork). -perl_fullversion="5.00${PERL_VERSION}_$PERL_SUBVERSION" +perl_fullversion="${PERL_REVISION}.00${PERL_VERSION}_${PERL_SUBVERSION}" case "$archname" in *-thread*) perl_fullversion="${perl_fullversion}-threaded";; esac diff --git a/gnu/usr.bin/perl/os2/dl_os2.c b/gnu/usr.bin/perl/os2/dl_os2.c index f15c465f621..ccf2e1a84cb 100644 --- a/gnu/usr.bin/perl/os2/dl_os2.c +++ b/gnu/usr.bin/perl/os2/dl_os2.c @@ -31,11 +31,11 @@ unsigned long _DLL_InitTerm(unsigned long modHandle, unsigned long flag) case 0: /* INIT */ /* Save handle */ dllHandle = modHandle; - handle_found = 1; + handle_found = 1; return TRUE; case 1: /* TERM */ - handle_found = 0; + handle_found = 0; dllHandle = (unsigned long)NULLHANDLE; return TRUE; } @@ -50,25 +50,25 @@ find_myself(void) { static APIRET APIENTRY (*pDosQueryModFromEIP) (HMODULE * hmod, ULONG * obj, ULONG BufLen, PCHAR Buf, - ULONG * Offset, ULONG Address); + ULONG * Offset, ULONG Address); HMODULE doscalls_h, mod; static int failed; ULONG obj, offset, rc; char buf[260]; if (failed) - return 0; + return 0; failed = 1; doscalls_h = (HMODULE)dlopen("DOSCALLS",0); if (!doscalls_h) - return 0; + return 0; /* {&doscalls_handle, NULL, 360}, */ /* DosQueryModFromEIP */ rc = DosQueryProcAddr(doscalls_h, 360, 0, (PFN*)&pDosQueryModFromEIP); if (rc) - return 0; + return 0; rc = pDosQueryModFromEIP(&mod, &obj, sizeof(buf), buf, &offset, (ULONG)dlopen); if (rc) - return 0; + return 0; failed = 0; handle_found = 1; dllHandle = mod; @@ -78,66 +78,66 @@ find_myself(void) void * dlopen(const char *path, int mode) { - HMODULE handle; - char tmp[260]; - const char *beg, *dot; - ULONG rc; - unsigned fpflag = _control87(0,0); - - fail[0] = 0; - if (!path) { /* Our own handle. */ - if (handle_found || find_myself()) { - char dllname[260]; - - if (handle_loaded) - return (void*)dllHandle; - rc = DosQueryModuleName(dllHandle, sizeof(dllname), dllname); - if (rc) { - strcpy(fail, "can't find my DLL name by the handle"); - retcode = rc; - return 0; - } - rc = DosLoadModule(fail, sizeof fail, dllname, &handle); - if (rc) { - strcpy(fail, "can't load my own DLL"); - retcode = rc; - return 0; - } - handle_loaded = 1; - goto ret; - } - retcode = ERROR_MOD_NOT_FOUND; + HMODULE handle; + char tmp[260]; + const char *beg, *dot; + ULONG rc; + unsigned fpflag = _control87(0,0); + + fail[0] = 0; + if (!path) { /* Our own handle. */ + if (handle_found || find_myself()) { + char dllname[260]; + + if (handle_loaded) + return (void*)dllHandle; + rc = DosQueryModuleName(dllHandle, sizeof(dllname), dllname); + if (rc) { + strcpy(fail, "can't find my DLL name by the handle"); + retcode = rc; + return 0; + } + rc = DosLoadModule(fail, sizeof fail, dllname, &handle); + if (rc) { + strcpy(fail, "can't load my own DLL"); + retcode = rc; + return 0; + } + handle_loaded = 1; + goto ret; + } + retcode = ERROR_MOD_NOT_FOUND; strcpy(fail, "can't load from myself: compiled without -DDLOPEN_INITTERM"); - return 0; - } - if ((rc = DosLoadModule(fail, sizeof fail, (char*)path, &handle)) == 0) - goto ret; - - retcode = rc; - - if (strlen(path) >= sizeof(tmp)) - return NULL; - - /* Not found. Check for non-FAT name and try truncated name. */ - /* Don't know if this helps though... */ - for (beg = dot = path + strlen(path); - beg > path && !memCHRs(":/\\", *(beg-1)); - beg--) - if (*beg == '.') - dot = beg; - if (dot - beg > 8) { - int n = beg+8-path; - - memmove(tmp, path, n); - memmove(tmp+n, dot, strlen(dot)+1); - if (DosLoadModule(fail, sizeof fail, tmp, &handle) == 0) - goto ret; - } - handle = 0; + return 0; + } + if ((rc = DosLoadModule(fail, sizeof fail, (char*)path, &handle)) == 0) + goto ret; + + retcode = rc; + + if (strlen(path) >= sizeof(tmp)) + return NULL; + + /* Not found. Check for non-FAT name and try truncated name. */ + /* Don't know if this helps though... */ + for (beg = dot = path + strlen(path); + beg > path && !memCHRs(":/\\", *(beg-1)); + beg--) + if (*beg == '.') + dot = beg; + if (dot - beg > 8) { + int n = beg+8-path; + + memmove(tmp, path, n); + memmove(tmp+n, dot, strlen(dot)+1); + if (DosLoadModule(fail, sizeof fail, tmp, &handle) == 0) + goto ret; + } + handle = 0; ret: - _control87(fpflag, MCW_EM); /* Some modules reset FP flags on load */ - return (void *)handle; + _control87(fpflag, MCW_EM); /* Some modules reset FP flags on load */ + return (void *)handle; } #define ERROR_WRONG_PROCTYPE 0xffffffff @@ -145,51 +145,51 @@ dlopen(const char *path, int mode) void * dlsym(void *handle, const char *symbol) { - ULONG rc, type; - PFN addr; - - fail[0] = 0; - rc = DosQueryProcAddr((HMODULE)handle, 0, symbol, &addr); - if (rc == 0) { - rc = DosQueryProcType((HMODULE)handle, 0, symbol, &type); - if (rc == 0 && type == PT_32BIT) - return (void *)addr; - rc = ERROR_WRONG_PROCTYPE; - } - retcode = rc; - return NULL; + ULONG rc, type; + PFN addr; + + fail[0] = 0; + rc = DosQueryProcAddr((HMODULE)handle, 0, symbol, &addr); + if (rc == 0) { + rc = DosQueryProcType((HMODULE)handle, 0, symbol, &type); + if (rc == 0 && type == PT_32BIT) + return (void *)addr; + rc = ERROR_WRONG_PROCTYPE; + } + retcode = rc; + return NULL; } char * dlerror(void) { - static char buf[700]; - ULONG len; - char *err; - - if (retcode == 0) - return NULL; - if (retcode == ERROR_WRONG_PROCTYPE) - err = "Wrong procedure type"; - else - err = os2error(retcode); - len = strlen(err); - if (len > sizeof(buf) - 1) - len = sizeof(buf) - 1; - strncpy(buf, err, len+1); - if (fail[0] && len + strlen(fail) < sizeof(buf) - 100) - sprintf(buf + len, ", possible problematic module: '%s'", fail); - retcode = 0; - return buf; + static char buf[700]; + ULONG len; + char *err; + + if (retcode == 0) + return NULL; + if (retcode == ERROR_WRONG_PROCTYPE) + err = "Wrong procedure type"; + else + err = os2error(retcode); + len = strlen(err); + if (len > sizeof(buf) - 1) + len = sizeof(buf) - 1; + strncpy(buf, err, len+1); + if (fail[0] && len + strlen(fail) < sizeof(buf) - 100) + sprintf(buf + len, ", possible problematic module: '%s'", fail); + retcode = 0; + return buf; } int dlclose(void *handle) { - ULONG rc; + ULONG rc; - if ((rc = DosFreeModule((HMODULE)handle)) == 0) return 0; + if ((rc = DosFreeModule((HMODULE)handle)) == 0) return 0; - retcode = rc; - return 2; + retcode = rc; + return 2; } diff --git a/gnu/usr.bin/perl/os2/os2.c b/gnu/usr.bin/perl/os2/os2.c index 0c9fa17831b..0d29d132517 100644 --- a/gnu/usr.bin/perl/os2/os2.c +++ b/gnu/usr.bin/perl/os2/os2.c @@ -215,7 +215,7 @@ static struct perlos2_state_t { const Perl_PFN * const pExtFCN = (Perl_po2()->po2_ExtFCN); -#if defined(USE_5005THREADS) || defined(USE_ITHREADS) +#if defined(USE_ITHREADS) typedef void (*emx_startroutine)(void *); typedef void* (*pthreads_startroutine)(void *); @@ -246,7 +246,7 @@ pthreads_state_string(enum pthreads_state state) { if (state < 0 || state >= sizeof(pthreads_states)/sizeof(*pthreads_states)) { snprintf(pthreads_state_buf, sizeof(pthreads_state_buf), - "unknown thread state %d", (int)state); + "unknown thread state %d", (int)state); return pthreads_state_buf; } return pthreads_states[state]; @@ -269,53 +269,53 @@ pthread_join(perl_os_thread tid, void **status) { MUTEX_LOCK(&start_thread_mutex); if (tid < 1 || tid >= thread_join_count) { - MUTEX_UNLOCK(&start_thread_mutex); - if (tid != pthread_not_existant) - Perl_croak_nocontext("panic: join with a thread with strange ordinal %d", (int)tid); - Perl_warn_nocontext("panic: join with a thread which could not start"); - *status = 0; - return 0; + MUTEX_UNLOCK(&start_thread_mutex); + if (tid != pthread_not_existant) + Perl_croak_nocontext("panic: join with a thread with strange ordinal %d", (int)tid); + Perl_warn_nocontext("panic: join with a thread which could not start"); + *status = 0; + return 0; } switch (thread_join_data[tid].state) { case pthreads_st_exited: - thread_join_data[tid].state = pthreads_st_exited_waited; - *status = thread_join_data[tid].status; - MUTEX_UNLOCK(&start_thread_mutex); - COND_SIGNAL(&thread_join_data[tid].cond); - break; + thread_join_data[tid].state = pthreads_st_exited_waited; + *status = thread_join_data[tid].status; + MUTEX_UNLOCK(&start_thread_mutex); + COND_SIGNAL(&thread_join_data[tid].cond); + break; case pthreads_st_waited: - MUTEX_UNLOCK(&start_thread_mutex); - Perl_croak_nocontext("join with a thread with a waiter"); - break; + MUTEX_UNLOCK(&start_thread_mutex); + Perl_croak_nocontext("join with a thread with a waiter"); + break; case pthreads_st_norun: { - int state = (int)thread_join_data[tid].status; - - thread_join_data[tid].state = pthreads_st_none; - MUTEX_UNLOCK(&start_thread_mutex); - Perl_croak_nocontext("panic: join with a thread which could not run" - " due to attempt of tid reuse (state='%s')", - pthreads_state_string(state)); - break; + int state = (int)thread_join_data[tid].status; + + thread_join_data[tid].state = pthreads_st_none; + MUTEX_UNLOCK(&start_thread_mutex); + Perl_croak_nocontext("panic: join with a thread which could not run" + " due to attempt of tid reuse (state='%s')", + pthreads_state_string(state)); + break; } case pthreads_st_run: { - perl_cond cond; - - thread_join_data[tid].state = pthreads_st_waited; - thread_join_data[tid].status = (void *)status; - COND_INIT(&thread_join_data[tid].cond); - cond = thread_join_data[tid].cond; - COND_WAIT(&thread_join_data[tid].cond, &start_thread_mutex); - COND_DESTROY(&cond); - MUTEX_UNLOCK(&start_thread_mutex); - break; + perl_cond cond; + + thread_join_data[tid].state = pthreads_st_waited; + thread_join_data[tid].status = (void *)status; + COND_INIT(&thread_join_data[tid].cond); + cond = thread_join_data[tid].cond; + COND_WAIT(&thread_join_data[tid].cond, &start_thread_mutex); + COND_DESTROY(&cond); + MUTEX_UNLOCK(&start_thread_mutex); + break; } default: - MUTEX_UNLOCK(&start_thread_mutex); - Perl_croak_nocontext("panic: join with thread in unknown thread state: '%s'", - pthreads_state_string(thread_join_data[tid].state)); - break; + MUTEX_UNLOCK(&start_thread_mutex); + Perl_croak_nocontext("panic: join with thread in unknown thread state: '%s'", + pthreads_state_string(thread_join_data[tid].state)); + break; } return 0; } @@ -327,9 +327,9 @@ typedef struct { } pthr_startit; /* The lock is used: - a) Since we temporarily usurp the caller interp, so malloc() may - use it to decide on debugging the call; - b) Since *args is on the caller's stack. + a) Since we temporarily usurp the caller interp, so malloc() may + use it to decide on debugging the call; + b) Since *args is on the caller's stack. */ void pthread_startit(void *arg1) @@ -341,40 +341,40 @@ pthread_startit(void *arg1) int state; if (tid <= 1) { - /* Can't croak, the setjmp() is not in scope... */ - char buf[80]; - - snprintf(buf, sizeof(buf), - "panic: thread with strange ordinal %d created\n\r", tid); - write(2,buf,strlen(buf)); - MUTEX_UNLOCK(&start_thread_mutex); - return; + /* Can't croak, the setjmp() is not in scope... */ + char buf[80]; + + snprintf(buf, sizeof(buf), + "panic: thread with strange ordinal %d created\n\r", tid); + write(2,buf,strlen(buf)); + MUTEX_UNLOCK(&start_thread_mutex); + return; } /* Until args.sub resets it, makes debugging Perl_malloc() work: */ PERL_SET_CONTEXT(0); if (tid >= thread_join_count) { - int oc = thread_join_count; - - thread_join_count = tid + 5 + tid/5; - if (thread_join_data) { - Renew(thread_join_data, thread_join_count, thread_join_t); - Zero(thread_join_data + oc, thread_join_count - oc, thread_join_t); - } else { - Newxz(thread_join_data, thread_join_count, thread_join_t); - } + int oc = thread_join_count; + + thread_join_count = tid + 5 + tid/5; + if (thread_join_data) { + Renew(thread_join_data, thread_join_count, thread_join_t); + Zero(thread_join_data + oc, thread_join_count - oc, thread_join_t); + } else { + Newxz(thread_join_data, thread_join_count, thread_join_t); + } } if (thread_join_data[tid].state != pthreads_st_none) { - /* Can't croak, the setjmp() is not in scope... */ - char buf[80]; - - snprintf(buf, sizeof(buf), - "panic: attempt to reuse thread id %d (state='%s')\n\r", - tid, pthreads_state_string(thread_join_data[tid].state)); - write(2,buf,strlen(buf)); - thread_join_data[tid].status = (void*)thread_join_data[tid].state; - thread_join_data[tid].state = pthreads_st_norun; - MUTEX_UNLOCK(&start_thread_mutex); - return; + /* Can't croak, the setjmp() is not in scope... */ + char buf[80]; + + snprintf(buf, sizeof(buf), + "panic: attempt to reuse thread id %d (state='%s')\n\r", + tid, pthreads_state_string(thread_join_data[tid].state)); + write(2,buf,strlen(buf)); + thread_join_data[tid].status = (void*)thread_join_data[tid].state; + thread_join_data[tid].state = pthreads_st_norun; + MUTEX_UNLOCK(&start_thread_mutex); + return; } thread_join_data[tid].state = pthreads_st_run; /* Now that we copied/updated the guys, we may release the caller... */ @@ -383,35 +383,35 @@ pthread_startit(void *arg1) MUTEX_LOCK(&start_thread_mutex); switch (thread_join_data[tid].state) { case pthreads_st_waited: - COND_SIGNAL(&thread_join_data[tid].cond); - thread_join_data[tid].state = pthreads_st_none; - *((void**)thread_join_data[tid].status) = rc; - break; + COND_SIGNAL(&thread_join_data[tid].cond); + thread_join_data[tid].state = pthreads_st_none; + *((void**)thread_join_data[tid].status) = rc; + break; case pthreads_st_detached: - thread_join_data[tid].state = pthreads_st_none; - break; + thread_join_data[tid].state = pthreads_st_none; + break; case pthreads_st_run: - /* Somebody can wait on us; cannot exit, since OS can reuse the tid - and our waiter will get somebody else's status. */ - thread_join_data[tid].state = pthreads_st_exited; - thread_join_data[tid].status = rc; - COND_INIT(&thread_join_data[tid].cond); - COND_WAIT(&thread_join_data[tid].cond, &start_thread_mutex); - COND_DESTROY(&thread_join_data[tid].cond); - thread_join_data[tid].state = pthreads_st_none; /* Ready to reuse */ - break; + /* Somebody can wait on us; cannot exit, since OS can reuse the tid + and our waiter will get somebody else's status. */ + thread_join_data[tid].state = pthreads_st_exited; + thread_join_data[tid].status = rc; + COND_INIT(&thread_join_data[tid].cond); + COND_WAIT(&thread_join_data[tid].cond, &start_thread_mutex); + COND_DESTROY(&thread_join_data[tid].cond); + thread_join_data[tid].state = pthreads_st_none; /* Ready to reuse */ + break; default: - state = thread_join_data[tid].state; - MUTEX_UNLOCK(&start_thread_mutex); - Perl_croak_nocontext("panic: unexpected thread state on exit: '%s'", - pthreads_state_string(state)); + state = thread_join_data[tid].state; + MUTEX_UNLOCK(&start_thread_mutex); + Perl_croak_nocontext("panic: unexpected thread state on exit: '%s'", + pthreads_state_string(state)); } MUTEX_UNLOCK(&start_thread_mutex); } int pthread_create(perl_os_thread *tidp, const pthread_attr_t *attr, - void *(*start_routine)(void*), void *arg) + void *(*start_routine)(void*), void *arg) { dTHX; pthr_startit args; @@ -424,11 +424,11 @@ pthread_create(perl_os_thread *tidp, const pthread_attr_t *attr, /* Test suite creates 31 extra threads; on machine without shared-memory-hogs this stack sizeis OK with 31: */ *tidp = _beginthread(pthread_startit, /*stack*/ NULL, - /*stacksize*/ 4*1024*1024, (void*)&args); + /*stacksize*/ 4*1024*1024, (void*)&args); if (*tidp == -1) { - *tidp = pthread_not_existant; - MUTEX_UNLOCK(&start_thread_mutex); - return EINVAL; + *tidp = pthread_not_existant; + MUTEX_UNLOCK(&start_thread_mutex); + return EINVAL; } MUTEX_LOCK(&start_thread_mutex); /* Wait for init to proceed */ MUTEX_UNLOCK(&start_thread_mutex); @@ -440,45 +440,45 @@ pthread_detach(perl_os_thread tid) { MUTEX_LOCK(&start_thread_mutex); if (tid < 1 || tid >= thread_join_count) { - MUTEX_UNLOCK(&start_thread_mutex); - if (tid != pthread_not_existant) - Perl_croak_nocontext("panic: detach of a thread with strange ordinal %d", (int)tid); - Perl_warn_nocontext("detach of a thread which could not start"); - return 0; + MUTEX_UNLOCK(&start_thread_mutex); + if (tid != pthread_not_existant) + Perl_croak_nocontext("panic: detach of a thread with strange ordinal %d", (int)tid); + Perl_warn_nocontext("detach of a thread which could not start"); + return 0; } switch (thread_join_data[tid].state) { case pthreads_st_waited: - MUTEX_UNLOCK(&start_thread_mutex); - Perl_croak_nocontext("detach on a thread with a waiter"); - break; + MUTEX_UNLOCK(&start_thread_mutex); + Perl_croak_nocontext("detach on a thread with a waiter"); + break; case pthreads_st_run: - thread_join_data[tid].state = pthreads_st_detached; - MUTEX_UNLOCK(&start_thread_mutex); - break; + thread_join_data[tid].state = pthreads_st_detached; + MUTEX_UNLOCK(&start_thread_mutex); + break; case pthreads_st_exited: - MUTEX_UNLOCK(&start_thread_mutex); - COND_SIGNAL(&thread_join_data[tid].cond); - break; + MUTEX_UNLOCK(&start_thread_mutex); + COND_SIGNAL(&thread_join_data[tid].cond); + break; case pthreads_st_detached: - MUTEX_UNLOCK(&start_thread_mutex); - Perl_warn_nocontext("detach on an already detached thread"); - break; + MUTEX_UNLOCK(&start_thread_mutex); + Perl_warn_nocontext("detach on an already detached thread"); + break; case pthreads_st_norun: { - int state = (int)thread_join_data[tid].status; - - thread_join_data[tid].state = pthreads_st_none; - MUTEX_UNLOCK(&start_thread_mutex); - Perl_croak_nocontext("panic: detaching thread which could not run" - " due to attempt of tid reuse (state='%s')", - pthreads_state_string(state)); - break; + int state = (int)thread_join_data[tid].status; + + thread_join_data[tid].state = pthreads_st_none; + MUTEX_UNLOCK(&start_thread_mutex); + Perl_croak_nocontext("panic: detaching thread which could not run" + " due to attempt of tid reuse (state='%s')", + pthreads_state_string(state)); + break; } default: - MUTEX_UNLOCK(&start_thread_mutex); - Perl_croak_nocontext("panic: detach of a thread with unknown thread state: '%s'", - pthreads_state_string(thread_join_data[tid].state)); - break; + MUTEX_UNLOCK(&start_thread_mutex); + Perl_croak_nocontext("panic: detach of a thread with unknown thread state: '%s'", + pthreads_state_string(thread_join_data[tid].state)); + break; } return 0; } @@ -490,13 +490,13 @@ os2_cond_wait(perl_cond *c, perl_mutex *m) int rc; STRLEN n_a; if ((rc = DosResetEventSem(*c,&n_a)) && (rc != ERROR_ALREADY_RESET)) - Perl_rc = CheckOSError(rc), croak_with_os2error("panic: COND_WAIT-reset"); + Perl_rc = CheckOSError(rc), croak_with_os2error("panic: COND_WAIT-reset"); if (m) MUTEX_UNLOCK(m); if (CheckOSError(DosWaitEventSem(*c,SEM_INDEFINITE_WAIT)) - && (rc != ERROR_INTERRUPT)) - croak_with_os2error("panic: COND_WAIT"); + && (rc != ERROR_INTERRUPT)) + croak_with_os2error("panic: COND_WAIT"); if (rc == ERROR_INTERRUPT) - errno = EINTR; + errno = EINTR; if (m) MUTEX_LOCK(m); return 0; } @@ -533,8 +533,8 @@ static const struct { {&pmwin_handle, NULL, 912}, /* WinDispatchMsg */ {&pmwin_handle, NULL, 753}, /* WinGetLastError */ {&pmwin_handle, NULL, 705}, /* WinCancelShutdown */ - /* These are needed in extensions. - How to protect PMSHAPI: it comes through EMX functions? */ + /* These are needed in extensions. + How to protect PMSHAPI: it comes through EMX functions? */ {&rexx_handle, "RexxStart", 0}, {&rexx_handle, "RexxVariablePool", 0}, {&rexxapi_handle, "RexxRegisterFunctionExe", 0}, @@ -549,7 +549,7 @@ static const struct { {&pmshapi_handle, "PRF32WRITEPROFILEDATA", 0}, /* At least some of these do not work by name, since they need - WIN32 instead of WIN... */ + WIN32 instead of WIN... */ #if 0 These were generated with nm I:\emx\lib\os2.a | fgrep -f API-list | grep = > API-list-entries @@ -646,8 +646,8 @@ loadModule(const char *modname, int fail) HMODULE h = (HMODULE)dlopen(modname, 0); if (!h && fail) - Perl_croak_nocontext("Error loading module '%s': %s", - modname, dlerror()); + Perl_croak_nocontext("Error loading module '%s': %s", + modname, dlerror()); return h; } @@ -662,7 +662,7 @@ my_type() if (!(_emx_env & 0x200)) return 1; /* not OS/2. */ if (CheckOSError(DosGetInfoBlocks(&tib, &pib))) - return -1; + return -1; return (pib->pib_ultype); } @@ -675,9 +675,9 @@ my_type_set(int type) PIB *pib; if (!(_emx_env & 0x200)) - Perl_croak_nocontext("Can't set type on DOS"); /* not OS/2. */ + Perl_croak_nocontext("Can't set type on DOS"); /* not OS/2. */ if (CheckOSError(DosGetInfoBlocks(&tib, &pib))) - croak_with_os2error("Error getting info blocks"); + croak_with_os2error("Error getting info blocks"); pib->pib_ultype = type; } @@ -685,54 +685,54 @@ PFN loadByOrdinal(enum entries_ordinals ord, int fail) { if (sizeof(loadOrdinals)/sizeof(loadOrdinals[0]) != ORD_NENTRIES) - Perl_croak_nocontext( - "Wrong size of loadOrdinals array: expected %d, actual %d", - sizeof(loadOrdinals)/sizeof(loadOrdinals[0]), ORD_NENTRIES); + Perl_croak_nocontext( + "Wrong size of loadOrdinals array: expected %d, actual %d", + sizeof(loadOrdinals)/sizeof(loadOrdinals[0]), ORD_NENTRIES); if (ExtFCN[ord] == NULL) { - PFN fcn = (PFN)-1; - APIRET rc; - - if (!loadOrdinals[ord].dll->handle) { - if (loadOrdinals[ord].dll->requires_pm && my_type() < 2) { /* FS */ - char *s = getenv("PERL_ASIF_PM"); - - if (!s || !atoi(s)) { - /* The module will not function well without PM. - The usual way to detect PM is the existence of the mutex - \SEM32\PMDRAG.SEM. */ - HMTX hMtx = 0; - - if (CheckOSError(DosOpenMutexSem("\\SEM32\\PMDRAG.SEM", - &hMtx))) - Perl_croak_nocontext("Looks like we have no PM; will not load DLL %s without $ENV{PERL_ASIF_PM}", - loadOrdinals[ord].dll->modname); - DosCloseMutexSem(hMtx); - } - } - MUTEX_LOCK(&perlos2_state_mutex); - loadOrdinals[ord].dll->handle - = loadModule(loadOrdinals[ord].dll->modname, fail); - MUTEX_UNLOCK(&perlos2_state_mutex); - } - if (!loadOrdinals[ord].dll->handle) - return 0; /* Possible with FAIL==0 only */ - if (CheckOSError(DosQueryProcAddr(loadOrdinals[ord].dll->handle, - loadOrdinals[ord].entrypoint, - loadOrdinals[ord].entryname,&fcn))) { - char buf[20], *s = (char*)loadOrdinals[ord].entryname; - - if (!fail) - return 0; - if (!s) - sprintf(s = buf, "%d", loadOrdinals[ord].entrypoint); - Perl_croak_nocontext( - "This version of OS/2 does not support %s.%s", - loadOrdinals[ord].dll->modname, s); - } - ExtFCN[ord] = fcn; + PFN fcn = (PFN)-1; + APIRET rc; + + if (!loadOrdinals[ord].dll->handle) { + if (loadOrdinals[ord].dll->requires_pm && my_type() < 2) { /* FS */ + char *s = PerlEnv_getenv("PERL_ASIF_PM"); + + if (!s || !atoi(s)) { + /* The module will not function well without PM. + The usual way to detect PM is the existence of the mutex + \SEM32\PMDRAG.SEM. */ + HMTX hMtx = 0; + + if (CheckOSError(DosOpenMutexSem("\\SEM32\\PMDRAG.SEM", + &hMtx))) + Perl_croak_nocontext("Looks like we have no PM; will not load DLL %s without $ENV{PERL_ASIF_PM}", + loadOrdinals[ord].dll->modname); + DosCloseMutexSem(hMtx); + } + } + MUTEX_LOCK(&perlos2_state_mutex); + loadOrdinals[ord].dll->handle + = loadModule(loadOrdinals[ord].dll->modname, fail); + MUTEX_UNLOCK(&perlos2_state_mutex); + } + if (!loadOrdinals[ord].dll->handle) + return 0; /* Possible with FAIL==0 only */ + if (CheckOSError(DosQueryProcAddr(loadOrdinals[ord].dll->handle, + loadOrdinals[ord].entrypoint, + loadOrdinals[ord].entryname,&fcn))) { + char buf[20], *s = (char*)loadOrdinals[ord].entryname; + + if (!fail) + return 0; + if (!s) + sprintf(s = buf, "%d", loadOrdinals[ord].entrypoint); + Perl_croak_nocontext( + "This version of OS/2 does not support %s.%s", + loadOrdinals[ord].dll->modname, s); + } + ExtFCN[ord] = fcn; } if ((long)ExtFCN[ord] == -1) - Perl_croak_nocontext("panic queryaddr"); + Perl_croak_nocontext("panic queryaddr"); return ExtFCN[ord]; } @@ -742,7 +742,7 @@ init_PMWIN_entries(void) int i; for (i = ORD_WinInitialize; i <= ORD_WinCancelShutdown; i++) - ((PFN*)&PMWIN_entries)[i - ORD_WinInitialize] = loadByOrdinal(i, 1); + ((PFN*)&PMWIN_entries)[i - ORD_WinInitialize] = loadByOrdinal(i, 1); } /*****************************************************/ @@ -765,7 +765,7 @@ DeclVoidFuncByORD(endservent, ORD_ENDSERVENT, (void), ()) /* priorities */ static const signed char priors[] = {0, 1, 3, 2}; /* Last two interchanged, - self inverse. */ + self inverse. */ #define QSS_INI_BUFFER 1024 ULONG (*pDosVerifyPidTid) (PID pid, TID tid); @@ -778,28 +778,28 @@ get_sysinfo(ULONG pid, ULONG flags) PQTOPLEVEL psi; if (pid) { - if (!pidtid_lookup) { - pidtid_lookup = 1; - *(PFN*)&pDosVerifyPidTid = loadByOrdinal(ORD_DosVerifyPidTid, 0); - } - if (pDosVerifyPidTid) { /* Warp3 or later */ - /* Up to some fixpak QuerySysState() kills the system if a non-existent - pid is used. */ - if (CheckOSError(pDosVerifyPidTid(pid, 1))) - return 0; + if (!pidtid_lookup) { + pidtid_lookup = 1; + *(PFN*)&pDosVerifyPidTid = loadByOrdinal(ORD_DosVerifyPidTid, 0); + } + if (pDosVerifyPidTid) { /* Warp3 or later */ + /* Up to some fixpak QuerySysState() kills the system if a non-existent + pid is used. */ + if (CheckOSError(pDosVerifyPidTid(pid, 1))) + return 0; } } Newx(pbuffer, buf_len, char); /* QSS_PROCESS | QSS_MODULE | QSS_SEMAPHORES | QSS_SHARED */ rc = QuerySysState(flags, pid, pbuffer, buf_len); while (rc == ERROR_BUFFER_OVERFLOW) { - Renew(pbuffer, buf_len *= 2, char); - rc = QuerySysState(flags, pid, pbuffer, buf_len); + Renew(pbuffer, buf_len *= 2, char); + rc = QuerySysState(flags, pid, pbuffer, buf_len); } if (rc) { - FillOSError(rc); - Safefree(pbuffer); - return 0; + FillOSError(rc); + Safefree(pbuffer); + return 0; } psi = (PQTOPLEVEL)pbuffer; if (psi && pid && psi->procdata && pid != psi->procdata->pid) { @@ -836,28 +836,28 @@ setpriority(int which, int pid, int val) if (priors[(32 - val) >> 5] + 1 == (prio >> 8)) { /* Do not change class. */ return CheckOSError(DosSetPriority((pid < 0) - ? PRTYS_PROCESSTREE : PRTYS_PROCESS, - 0, - (32 - val) % 32 - (prio & 0xFF), - abs(pid))) + ? PRTYS_PROCESSTREE : PRTYS_PROCESS, + 0, + (32 - val) % 32 - (prio & 0xFF), + abs(pid))) ? -1 : 0; } else /* if ((32 - val) % 32 == (prio & 0xFF)) */ { /* Documentation claims one can change both class and basevalue, * but I find it wrong. */ /* Change class, but since delta == 0 denotes absolute 0, correct. */ if (CheckOSError(DosSetPriority((pid < 0) - ? PRTYS_PROCESSTREE : PRTYS_PROCESS, - priors[(32 - val) >> 5] + 1, - 0, - abs(pid)))) - return -1; + ? PRTYS_PROCESSTREE : PRTYS_PROCESS, + priors[(32 - val) >> 5] + 1, + 0, + abs(pid)))) + return -1; if ( ((32 - val) % 32) == 0 ) return 0; return CheckOSError(DosSetPriority((pid < 0) - ? PRTYS_PROCESSTREE : PRTYS_PROCESS, - 0, - (32 - val) % 32, - abs(pid))) - ? -1 : 0; + ? PRTYS_PROCESSTREE : PRTYS_PROCESS, + 0, + (32 - val) % 32, + abs(pid))) + ? -1 : 0; } } @@ -891,7 +891,7 @@ spawn_sighandler(int sig) */ if (spawn_killed) - sig = SIGKILL; /* Try harder. */ + sig = SIGKILL; /* Try harder. */ kill(spawn_pid, sig); spawn_killed = 1; } @@ -899,40 +899,40 @@ spawn_sighandler(int sig) static int result(pTHX_ int flag, int pid) { - int r, status; - Signal_t (*ihand)(); /* place to save signal during system() */ - Signal_t (*qhand)(); /* place to save signal during system() */ + int r, status; + Signal_t (*ihand)(); /* place to save signal during system() */ + Signal_t (*qhand)(); /* place to save signal during system() */ #ifndef __EMX__ - RESULTCODES res; - int rpid; + RESULTCODES res; + int rpid; #endif - if (pid < 0 || flag != 0) - return pid; + if (pid < 0 || flag != 0) + return pid; #ifdef __EMX__ - spawn_pid = pid; - spawn_killed = 0; - ihand = rsignal(SIGINT, &spawn_sighandler); - qhand = rsignal(SIGQUIT, &spawn_sighandler); - do { - r = wait4pid(pid, &status, 0); - } while (r == -1 && errno == EINTR); - rsignal(SIGINT, ihand); - rsignal(SIGQUIT, qhand); - - PL_statusvalue = (U16)status; - if (r < 0) - return -1; - return status & 0xFFFF; + spawn_pid = pid; + spawn_killed = 0; + ihand = rsignal(SIGINT, &spawn_sighandler); + qhand = rsignal(SIGQUIT, &spawn_sighandler); + do { + r = wait4pid(pid, &status, 0); + } while (r == -1 && errno == EINTR); + rsignal(SIGINT, ihand); + rsignal(SIGQUIT, qhand); + + PL_statusvalue = (U16)status; + if (r < 0) + return -1; + return status & 0xFFFF; #else - ihand = rsignal(SIGINT, SIG_IGN); - r = DosWaitChild(DCWA_PROCESS, DCWW_WAIT, &res, &rpid, pid); - rsignal(SIGINT, ihand); - PL_statusvalue = res.codeResult << 8 | res.codeTerminate; - if (r) - return -1; - return PL_statusvalue; + ihand = rsignal(SIGINT, SIG_IGN); + r = DosWaitChild(DCWA_PROCESS, DCWW_WAIT, &res, &rpid, pid); + rsignal(SIGINT, ihand); + PL_statusvalue = res.codeResult << 8 | res.codeTerminate; + if (r) + return -1; + return PL_statusvalue; #endif } @@ -952,19 +952,19 @@ file_type(char *path) ULONG apptype; if (!(_emx_env & 0x200)) - Perl_croak_nocontext("file_type not implemented on DOS"); /* not OS/2. */ + Perl_croak_nocontext("file_type not implemented on DOS"); /* not OS/2. */ if (CheckOSError(DosQueryAppType(path, &apptype))) { - switch (rc) { - case ERROR_FILE_NOT_FOUND: - case ERROR_PATH_NOT_FOUND: - return -1; - case ERROR_ACCESS_DENIED: /* Directory with this name found? */ - return -3; - default: /* Found, but not an - executable, or some other - read error. */ - return -2; - } + switch (rc) { + case ERROR_FILE_NOT_FOUND: + case ERROR_PATH_NOT_FOUND: + return -1; + case ERROR_ACCESS_DENIED: /* Directory with this name found? */ + return -3; + default: /* Found, but not an + executable, or some other + read error. */ + return -2; + } } return apptype; } @@ -972,375 +972,374 @@ file_type(char *path) /* Spawn/exec a program, revert to shell if needed. */ extern ULONG _emx_exception ( EXCEPTIONREPORTRECORD *, - EXCEPTIONREGISTRATIONRECORD *, + EXCEPTIONREGISTRATIONRECORD *, CONTEXTRECORD *, void *); int do_spawn_ve(pTHX_ SV *really, const char **argv, U32 flag, U32 execf, char *inicmd, U32 addflag) { - int trueflag = flag; - int rc, pass = 1; - char *real_name = NULL; /* Shut down the warning */ - char const * args[4]; - static const char * const fargs[4] - = { "/bin/sh", "-c", "\"$@\"", "spawn-via-shell", }; - const char * const *argsp = fargs; - int nargs = 4; - int force_shell; - int new_stderr = -1, nostderr = 0; - int fl_stderr = 0; - STRLEN n_a; - char *buf; - PerlIO *file; - - if (flag == P_WAIT) - flag = P_NOWAIT; - if (really) { - real_name = SvPV(really, n_a); - real_name = savepv(real_name); - SAVEFREEPV(real_name); - if (!*real_name) - really = NULL; - } + int trueflag = flag; + int rc, pass = 1; + char *real_name = NULL; /* Shut down the warning */ + char const * args[4]; + static const char * const fargs[4] + = { "/bin/sh", "-c", "\"$@\"", "spawn-via-shell", }; + const char * const *argsp = fargs; + int nargs = 4; + int force_shell; + int new_stderr = -1, nostderr = 0; + int fl_stderr = 0; + STRLEN n_a; + char *buf; + PerlIO *file; + + if (flag == P_WAIT) + flag = P_NOWAIT; + if (really) { + real_name = SvPV(really, n_a); + real_name = savepv(real_name); + SAVEFREEPV(real_name); + if (!*real_name) + really = NULL; + } retry: - if (strEQ(argv[0],"/bin/sh")) - argv[0] = PL_sh_path; - - /* We should check PERL_SH* and PERLLIB_* as well? */ - if (!really || pass >= 2) - real_name = argv[0]; - if (real_name[0] != '/' && real_name[0] != '\\' - && !(real_name[0] && real_name[1] == ':' - && (real_name[2] == '/' || real_name[2] != '\\')) - ) /* will spawnvp use PATH? */ - TAINT_ENV(); /* testing IFS here is overkill, probably */ + if (strEQ(argv[0],"/bin/sh")) + argv[0] = PL_sh_path; + + /* We should check PERL_SH* and PERLLIB_* as well? */ + if (!really || pass >= 2) + real_name = argv[0]; + if (real_name[0] != '/' && real_name[0] != '\\' + && !(real_name[0] && real_name[1] == ':' + && (real_name[2] == '/' || real_name[2] != '\\')) + ) /* will spawnvp use PATH? */ + TAINT_ENV(); /* testing IFS here is overkill, probably */ reread: - force_shell = 0; - if (_emx_env & 0x200) { /* OS/2. */ - int type = file_type(real_name); - type_again: - if (type == -1) { /* Not found */ - errno = ENOENT; - rc = -1; - goto do_script; - } - else if (type == -2) { /* Not an EXE */ - errno = ENOEXEC; - rc = -1; - goto do_script; - } - else if (type == -3) { /* Is a directory? */ - /* Special-case this */ - char tbuf[512]; - int l = strlen(real_name); - - if (l + 5 <= sizeof tbuf) { - strcpy(tbuf, real_name); - strcpy(tbuf + l, ".exe"); - type = file_type(tbuf); - if (type >= -3) - goto type_again; - } - - errno = ENOEXEC; - rc = -1; - goto do_script; - } - switch (type & 7) { - /* Ignore WINDOWCOMPAT and FAPI, start them the same type we are. */ - case FAPPTYP_WINDOWAPI: - { /* Apparently, kids are started basing on startup type, not the morphed type */ - if (os2_mytype != 3) { /* not PM */ - if (flag == P_NOWAIT) - flag = P_PM; - else if ((flag & 7) != P_PM && (flag & 7) != P_SESSION && ckWARN(WARN_EXEC)) - Perl_warner(aTHX_ packWARN(WARN_EXEC), "Starting PM process with flag=%d, mytype=%d", - flag, os2_mytype); - } - } - break; - case FAPPTYP_NOTWINDOWCOMPAT: - { - if (os2_mytype != 0) { /* not full screen */ - if (flag == P_NOWAIT) - flag = P_SESSION; - else if ((flag & 7) != P_SESSION && ckWARN(WARN_EXEC)) - Perl_warner(aTHX_ packWARN(WARN_EXEC), "Starting Full Screen process with flag=%d, mytype=%d", - flag, os2_mytype); - } - } - break; - case FAPPTYP_NOTSPEC: - /* Let the shell handle this... */ - force_shell = 1; - buf = ""; /* Pacify a warning */ - file = 0; /* Pacify a warning */ - goto doshell_args; - break; - } - } - - if (addflag) { - addflag = 0; - new_stderr = dup(2); /* Preserve stderr */ - if (new_stderr == -1) { - if (errno == EBADF) - nostderr = 1; - else { - rc = -1; - goto finish; - } - } else - fl_stderr = fcntl(2, F_GETFD); - rc = dup2(1,2); - if (rc == -1) - goto finish; - fcntl(new_stderr, F_SETFD, FD_CLOEXEC); - } + force_shell = 0; + if (_emx_env & 0x200) { /* OS/2. */ + int type = file_type(real_name); + type_again: + if (type == -1) { /* Not found */ + errno = ENOENT; + rc = -1; + goto do_script; + } + else if (type == -2) { /* Not an EXE */ + errno = ENOEXEC; + rc = -1; + goto do_script; + } + else if (type == -3) { /* Is a directory? */ + /* Special-case this */ + char tbuf[512]; + int l = strlen(real_name); + + if (l + 5 <= sizeof tbuf) { + strcpy(tbuf, real_name); + strcpy(tbuf + l, ".exe"); + type = file_type(tbuf); + if (type >= -3) + goto type_again; + } + + errno = ENOEXEC; + rc = -1; + goto do_script; + } + switch (type & 7) { + /* Ignore WINDOWCOMPAT and FAPI, start them the same type we are. */ + case FAPPTYP_WINDOWAPI: + { /* Apparently, kids are started basing on startup type, not the morphed type */ + if (os2_mytype != 3) { /* not PM */ + if (flag == P_NOWAIT) + flag = P_PM; + else if ((flag & 7) != P_PM && (flag & 7) != P_SESSION && ckWARN(WARN_EXEC)) + Perl_warner(aTHX_ packWARN(WARN_EXEC), "Starting PM process with flag=%d, mytype=%d", + flag, os2_mytype); + } + } + break; + case FAPPTYP_NOTWINDOWCOMPAT: + { + if (os2_mytype != 0) { /* not full screen */ + if (flag == P_NOWAIT) + flag = P_SESSION; + else if ((flag & 7) != P_SESSION && ckWARN(WARN_EXEC)) + Perl_warner(aTHX_ packWARN(WARN_EXEC), "Starting Full Screen process with flag=%d, mytype=%d", + flag, os2_mytype); + } + } + break; + case FAPPTYP_NOTSPEC: + /* Let the shell handle this... */ + force_shell = 1; + buf = ""; /* Pacify a warning */ + file = 0; /* Pacify a warning */ + goto doshell_args; + break; + } + } + + if (addflag) { + addflag = 0; + new_stderr = dup(2); /* Preserve stderr */ + if (new_stderr == -1) { + if (errno == EBADF) + nostderr = 1; + else { + rc = -1; + goto finish; + } + } else + fl_stderr = fcntl(2, F_GETFD); + rc = dup2(1,2); + if (rc == -1) + goto finish; + fcntl(new_stderr, F_SETFD, FD_CLOEXEC); + } #if 0 - rc = result(aTHX_ trueflag, spawnvp(flag,real_name,argv)); + rc = result(aTHX_ trueflag, spawnvp(flag,real_name,argv)); #else - if (execf == EXECF_TRUEEXEC) - rc = execvp(real_name,argv); - else if (execf == EXECF_EXEC) - rc = spawnvp(trueflag | P_OVERLAY,real_name,argv); - else if (execf == EXECF_SPAWN_NOWAIT) - rc = spawnvp(flag,real_name,argv); + if (execf == EXECF_TRUEEXEC) + rc = execvp(real_name,argv); + else if (execf == EXECF_EXEC) + rc = spawnvp(trueflag | P_OVERLAY,real_name,argv); + else if (execf == EXECF_SPAWN_NOWAIT) + rc = spawnvp(flag,real_name,argv); else if (execf == EXECF_SYNC) - rc = spawnvp(trueflag,real_name,argv); + rc = spawnvp(trueflag,real_name,argv); else /* EXECF_SPAWN, EXECF_SPAWN_BYFLAG */ - rc = result(aTHX_ trueflag, - spawnvp(flag,real_name,argv)); + rc = result(aTHX_ trueflag, + spawnvp(flag,real_name,argv)); #endif - if (rc < 0 && pass == 1) { - do_script: - if (real_name == argv[0]) { - int err = errno; - - if (err == ENOENT || err == ENOEXEC) { - /* No such file, or is a script. */ - /* Try adding script extensions to the file name, and - search on PATH. */ - char *scr = find_script(argv[0], TRUE, NULL, 0); - - if (scr) { - char *s = 0, *s1; - SV *scrsv = sv_2mortal(newSVpv(scr, 0)); - SV *bufsv = sv_newmortal(); + if (rc < 0 && pass == 1) { + do_script: + if (real_name == argv[0]) { + int err = errno; + + if (err == ENOENT || err == ENOEXEC) { + /* No such file, or is a script. */ + /* Try adding script extensions to the file name, and + search on PATH. */ + char *scr = find_script(argv[0], TRUE, NULL, 0); + + if (scr) { + char *s = 0, *s1; + SV *scrsv = sv_2mortal(newSVpv(scr, 0)); + SV *bufsv = sv_newmortal(); Safefree(scr); - scr = SvPV(scrsv, n_a); /* free()ed later */ + scr = SvPV(scrsv, n_a); /* free()ed later */ - file = PerlIO_open(scr, "r"); - argv[0] = scr; - if (!file) - goto panic_file; + file = PerlIO_open(scr, "r"); + argv[0] = scr; + if (!file) + goto panic_file; - buf = sv_gets(bufsv, file, 0 /* No append */); - if (!buf) - buf = ""; /* XXX Needed? */ - if (!buf[0]) { /* Empty... */ + buf = sv_gets(bufsv, file, 0 /* No append */); + if (!buf) + buf = ""; /* XXX Needed? */ + if (!buf[0]) { /* Empty... */ struct stat statbuf; - PerlIO_close(file); - /* Special case: maybe from -Zexe build, so - there is an executable around (contrary to - documentation, DosQueryAppType sometimes (?) - does not append ".exe", so we could have - reached this place). */ - sv_catpvs(scrsv, ".exe"); - argv[0] = scr = SvPV(scrsv, n_a); /* Reload */ + PerlIO_close(file); + /* Special case: maybe from -Zexe build, so + there is an executable around (contrary to + documentation, DosQueryAppType sometimes (?) + does not append ".exe", so we could have + reached this place). */ + sv_catpvs(scrsv, ".exe"); + argv[0] = scr = SvPV(scrsv, n_a); /* Reload */ if (PerlLIO_stat(scr,&statbuf) >= 0 && !S_ISDIR(statbuf.st_mode)) { /* Found */ - real_name = scr; - pass++; - goto reread; - } else { /* Restore */ - SvCUR_set(scrsv, SvCUR(scrsv) - 4); - *SvEND(scrsv) = 0; - } - } - if (PerlIO_close(file) != 0) { /* Failure */ - panic_file: - if (ckWARN(WARN_EXEC)) - Perl_warner(aTHX_ packWARN(WARN_EXEC), "Error reading \"%s\": %s", - scr, Strerror(errno)); - buf = ""; /* Not #! */ - goto doshell_args; - } - if (buf[0] == '#') { - if (buf[1] == '!') - s = buf + 2; - } else if (buf[0] == 'e') { - if (strBEGINs(buf, "extproc") - && isSPACE(buf[7])) - s = buf + 8; - } else if (buf[0] == 'E') { - if (strBEGINs(buf, "EXTPROC") - && isSPACE(buf[7])) - s = buf + 8; - } - if (!s) { - buf = ""; /* Not #! */ - goto doshell_args; - } - - s1 = s; - nargs = 0; - argsp = args; - while (1) { - /* Do better than pdksh: allow a few args, - strip trailing whitespace. */ - while (isSPACE(*s)) - s++; - if (*s == 0) - break; - if (nargs == 4) { - nargs = -1; - break; - } - args[nargs++] = s; - while (*s && !isSPACE(*s)) - s++; - if (*s == 0) - break; - *s++ = 0; - } - if (nargs == -1) { - Perl_warner(aTHX_ packWARN(WARN_EXEC), "Too many args on %.*s line of \"%s\"", - s1 - buf, buf, scr); - nargs = 4; - argsp = fargs; - } - /* Can jump from far, buf/file invalid if force_shell: */ - doshell_args: - { - char **a = argv; - const char *exec_args[2]; - - if (force_shell - || (!buf[0] && file)) { /* File without magic */ - /* In fact we tried all what pdksh would - try. There is no point in calling - pdksh, we may just emulate its logic. */ - char *shell = getenv("EXECSHELL"); - char *shell_opt = NULL; - - if (!shell) { - char *s; - - shell_opt = "/c"; - shell = getenv("OS2_SHELL"); - if (inicmd) { /* No spaces at start! */ - s = inicmd; - while (*s && !isSPACE(*s)) { - if (*s++ == '/') { - inicmd = NULL; /* Cannot use */ - break; - } - } - } - if (!inicmd) { - s = argv[0]; - while (*s) { - /* Dosish shells will choke on slashes - in paths, fortunately, this is - important for zeroth arg only. */ - if (*s == '/') - *s = '\\'; - s++; - } - } - } - /* If EXECSHELL is set, we do not set */ - - if (!shell) - shell = ((_emx_env & 0x200) - ? "c:/os2/cmd.exe" - : "c:/command.com"); - nargs = shell_opt ? 2 : 1; /* shell file args */ - exec_args[0] = shell; - exec_args[1] = shell_opt; - argsp = exec_args; - if (nargs == 2 && inicmd) { - /* Use the original cmd line */ - /* XXXX This is good only until we refuse - quoted arguments... */ - argv[0] = inicmd; - argv[1] = NULL; - } - } else if (!buf[0] && inicmd) { /* No file */ - /* Start with the original cmdline. */ - /* XXXX This is good only until we refuse - quoted arguments... */ - - argv[0] = inicmd; - argv[1] = NULL; - nargs = 2; /* shell -c */ - } - - while (a[1]) /* Get to the end */ - a++; - a++; /* Copy finil NULL too */ - while (a >= argv) { - *(a + nargs) = *a; /* argv was preallocated to be - long enough. */ - a--; - } - while (--nargs >= 0) /* XXXX Discard const... */ - argv[nargs] = (char*)argsp[nargs]; - /* Enable pathless exec if #! (as pdksh). */ - pass = (buf[0] == '#' ? 2 : 3); - goto retry; - } - } - /* Not found: restore errno */ - errno = err; - } - } else if (errno == ENOEXEC) { /* Cannot transfer `real_name' via shell. */ - if (rc < 0 && ckWARN(WARN_EXEC)) - Perl_warner(aTHX_ packWARN(WARN_EXEC), "Can't %s script `%s' with ARGV[0] being `%s'", - ((execf != EXECF_EXEC && execf != EXECF_TRUEEXEC) - ? "spawn" : "exec"), - real_name, argv[0]); - goto warned; - } else if (errno == ENOENT) { /* Cannot transfer `real_name' via shell. */ - if (rc < 0 && ckWARN(WARN_EXEC)) - Perl_warner(aTHX_ packWARN(WARN_EXEC), "Can't %s `%s' with ARGV[0] being `%s' (looking for executables only, not found)", - ((execf != EXECF_EXEC && execf != EXECF_TRUEEXEC) - ? "spawn" : "exec"), - real_name, argv[0]); - goto warned; - } - } else if (rc < 0 && pass == 2 && errno == ENOENT) { /* File not found */ - char *no_dir = strrchr(argv[0], '/'); - - /* Do as pdksh port does: if not found with /, try without - path. */ - if (no_dir) { - argv[0] = no_dir + 1; - pass++; - goto retry; - } - } - if (rc < 0 && ckWARN(WARN_EXEC)) - Perl_warner(aTHX_ packWARN(WARN_EXEC), "Can't %s \"%s\": %s\n", - ((execf != EXECF_EXEC && execf != EXECF_TRUEEXEC) - ? "spawn" : "exec"), - real_name, Strerror(errno)); + real_name = scr; + pass++; + goto reread; + } else { /* Restore */ + SvCUR_set(scrsv, SvCUR(scrsv) - 4); + *SvEND(scrsv) = 0; + } + } + if (PerlIO_close(file) != 0) { /* Failure */ + panic_file: + if (ckWARN(WARN_EXEC)) + Perl_warner(aTHX_ packWARN(WARN_EXEC), "Error reading \"%s\": %s", + scr, Strerror(errno)); + buf = ""; /* Not #! */ + goto doshell_args; + } + if (buf[0] == '#') { + if (buf[1] == '!') + s = buf + 2; + } else if (buf[0] == 'e') { + if (strBEGINs(buf, "extproc") + && isSPACE(buf[7])) + s = buf + 8; + } else if (buf[0] == 'E') { + if (strBEGINs(buf, "EXTPROC") + && isSPACE(buf[7])) + s = buf + 8; + } + if (!s) { + buf = ""; /* Not #! */ + goto doshell_args; + } + + s1 = s; + nargs = 0; + argsp = args; + while (1) { + /* Do better than pdksh: allow a few args, + strip trailing whitespace. */ + while (isSPACE(*s)) + s++; + if (*s == 0) + break; + if (nargs == 4) { + nargs = -1; + break; + } + args[nargs++] = s; + while (*s && !isSPACE(*s)) + s++; + if (*s == 0) + break; + *s++ = 0; + } + if (nargs == -1) { + Perl_warner(aTHX_ packWARN(WARN_EXEC), "Too many args on %.*s line of \"%s\"", + s1 - buf, buf, scr); + nargs = 4; + argsp = fargs; + } + /* Can jump from far, buf/file invalid if force_shell: */ + doshell_args: + { + char **a = argv; + const char *exec_args[2]; + + if (force_shell + || (!buf[0] && file)) { /* File without magic */ + /* In fact we tried all what pdksh would + try. There is no point in calling + pdksh, we may just emulate its logic. */ + char *shell = PerlEnv_getenv("EXECSHELL"); + char *shell_opt = NULL; + if (!shell) { + char *s; + + shell_opt = "/c"; + shell = PerlEnv_getenv("OS2_SHELL"); + if (inicmd) { /* No spaces at start! */ + s = inicmd; + while (*s && !isSPACE(*s)) { + if (*s++ == '/') { + inicmd = NULL; /* Cannot use */ + break; + } + } + } + if (!inicmd) { + s = argv[0]; + while (*s) { + /* Dosish shells will choke on slashes + in paths, fortunately, this is + important for zeroth arg only. */ + if (*s == '/') + *s = '\\'; + s++; + } + } + } + /* If EXECSHELL is set, we do not set */ + + if (!shell) + shell = ((_emx_env & 0x200) + ? "c:/os2/cmd.exe" + : "c:/command.com"); + nargs = shell_opt ? 2 : 1; /* shell file args */ + exec_args[0] = shell; + exec_args[1] = shell_opt; + argsp = exec_args; + if (nargs == 2 && inicmd) { + /* Use the original cmd line */ + /* XXXX This is good only until we refuse + quoted arguments... */ + argv[0] = inicmd; + argv[1] = NULL; + } + } else if (!buf[0] && inicmd) { /* No file */ + /* Start with the original cmdline. */ + /* XXXX This is good only until we refuse + quoted arguments... */ + + argv[0] = inicmd; + argv[1] = NULL; + nargs = 2; /* shell -c */ + } + + while (a[1]) /* Get to the end */ + a++; + a++; /* Copy finil NULL too */ + while (a >= argv) { + *(a + nargs) = *a; /* argv was preallocated to be + long enough. */ + a--; + } + while (--nargs >= 0) /* XXXX Discard const... */ + argv[nargs] = (char*)argsp[nargs]; + /* Enable pathless exec if #! (as pdksh). */ + pass = (buf[0] == '#' ? 2 : 3); + goto retry; + } + } + /* Not found: restore errno */ + errno = err; + } + } else if (errno == ENOEXEC) { /* Cannot transfer `real_name' via shell. */ + if (rc < 0 && ckWARN(WARN_EXEC)) + Perl_warner(aTHX_ packWARN(WARN_EXEC), "Can't %s script `%s' with ARGV[0] being `%s'", + ((execf != EXECF_EXEC && execf != EXECF_TRUEEXEC) + ? "spawn" : "exec"), + real_name, argv[0]); + goto warned; + } else if (errno == ENOENT) { /* Cannot transfer `real_name' via shell. */ + if (rc < 0 && ckWARN(WARN_EXEC)) + Perl_warner(aTHX_ packWARN(WARN_EXEC), "Can't %s `%s' with ARGV[0] being `%s' (looking for executables only, not found)", + ((execf != EXECF_EXEC && execf != EXECF_TRUEEXEC) + ? "spawn" : "exec"), + real_name, argv[0]); + goto warned; + } + } else if (rc < 0 && pass == 2 && errno == ENOENT) { /* File not found */ + char *no_dir = strrchr(argv[0], '/'); + + /* Do as pdksh port does: if not found with /, try without + path. */ + if (no_dir) { + argv[0] = no_dir + 1; + pass++; + goto retry; + } + } + if (rc < 0 && ckWARN(WARN_EXEC)) + Perl_warner(aTHX_ packWARN(WARN_EXEC), "Can't %s \"%s\": %s\n", + ((execf != EXECF_EXEC && execf != EXECF_TRUEEXEC) + ? "spawn" : "exec"), + real_name, Strerror(errno)); warned: - if (rc < 0 && (execf != EXECF_SPAWN_NOWAIT) - && ((trueflag & 0xFF) == P_WAIT)) - rc = -1; + if (rc < 0 && (execf != EXECF_SPAWN_NOWAIT) + && ((trueflag & 0xFF) == P_WAIT)) + rc = -1; finish: if (new_stderr != -1) { /* How can we use error codes? */ - dup2(new_stderr, 2); - close(new_stderr); - fcntl(2, F_SETFD, fl_stderr); + dup2(new_stderr, 2); + close(new_stderr); + fcntl(2, F_SETFD, fl_stderr); } else if (nostderr) close(2); return rc; @@ -1357,14 +1356,14 @@ do_spawn3(pTHX_ char *cmd, int execf, int flag) ENTER; #ifdef TRYSHELL - if ((shell = getenv("EMXSHELL")) != NULL) - copt = "-c"; - else if ((shell = getenv("SHELL")) != NULL) - copt = "-c"; - else if ((shell = getenv("COMSPEC")) != NULL) - copt = "/C"; + if ((shell = PerlEnv_getenv("EMXSHELL")) != NULL) + copt = "-c"; + else if ((shell = PerlEnv_getenv("SHELL")) != NULL) + copt = "-c"; + else if ((shell = PerlEnv_getenv("COMSPEC")) != NULL) + copt = "/C"; else - shell = "cmd.exe"; + shell = "cmd.exe"; #else /* Consensus on perl5-porters is that it is _very_ important to have a shell which will not change between computers with the @@ -1375,81 +1374,81 @@ do_spawn3(pTHX_ char *cmd, int execf, int flag) #endif while (*cmd && isSPACE(*cmd)) - cmd++; + cmd++; if (strBEGINs(cmd,"/bin/sh") && isSPACE(cmd[7])) { - STRLEN l = strlen(PL_sh_path); - - Newx(news, strlen(cmd) - 7 + l + 1, char); - strcpy(news, PL_sh_path); - strcpy(news + l, cmd + 7); - cmd = news; + STRLEN l = strlen(PL_sh_path); + + Newx(news, strlen(cmd) - 7 + l + 1, char); + strcpy(news, PL_sh_path); + strcpy(news + l, cmd + 7); + cmd = news; } /* save an extra exec if possible */ /* see if there are shell metacharacters in it */ if (*cmd == '.' && isSPACE(cmd[1])) - goto doshell; + goto doshell; if (strBEGINs(cmd,"exec") && isSPACE(cmd[4])) - goto doshell; + goto doshell; for (s = cmd; *s && isALPHA(*s); s++) ; /* catch VAR=val gizmo */ if (*s == '=') - goto doshell; + goto doshell; for (s = cmd; *s; s++) { - if (*s != ' ' && !isALPHA(*s) && memCHRs("$&*(){}[]'\";\\|?<>~`\n",*s)) { - if (*s == '\n' && s[1] == '\0') { - *s = '\0'; - break; - } else if (*s == '\\' && !seenspace) { - continue; /* Allow backslashes in names */ - } else if (*s == '>' && s >= cmd + 3 - && s[-1] == '2' && s[1] == '&' && s[2] == '1' - && isSPACE(s[-2]) ) { - char *t = s + 3; - - while (*t && isSPACE(*t)) - t++; - if (!*t) { - s[-2] = '\0'; - mergestderr = 1; - break; /* Allow 2>&1 as the last thing */ - } - } - /* We do not convert this to do_spawn_ve since shell - should be smart enough to start itself gloriously. */ - doshell: - if (execf == EXECF_TRUEEXEC) + if (*s != ' ' && !isALPHA(*s) && memCHRs("$&*(){}[]'\";\\|?<>~`\n",*s)) { + if (*s == '\n' && s[1] == '\0') { + *s = '\0'; + break; + } else if (*s == '\\' && !seenspace) { + continue; /* Allow backslashes in names */ + } else if (*s == '>' && s >= cmd + 3 + && s[-1] == '2' && s[1] == '&' && s[2] == '1' + && isSPACE(s[-2]) ) { + char *t = s + 3; + + while (*t && isSPACE(*t)) + t++; + if (!*t) { + s[-2] = '\0'; + mergestderr = 1; + break; /* Allow 2>&1 as the last thing */ + } + } + /* We do not convert this to do_spawn_ve since shell + should be smart enough to start itself gloriously. */ + doshell: + if (execf == EXECF_TRUEEXEC) rc = execl(shell,shell,copt,cmd,(char*)0); - else if (execf == EXECF_EXEC) + else if (execf == EXECF_EXEC) rc = spawnl(P_OVERLAY,shell,shell,copt,cmd,(char*)0); - else if (execf == EXECF_SPAWN_NOWAIT) + else if (execf == EXECF_SPAWN_NOWAIT) rc = spawnl(P_NOWAIT,shell,shell,copt,cmd,(char*)0); - else if (execf == EXECF_SPAWN_BYFLAG) + else if (execf == EXECF_SPAWN_BYFLAG) rc = spawnl(flag,shell,shell,copt,cmd,(char*)0); - else { - /* In the ak code internal P_NOWAIT is P_WAIT ??? */ - if (execf == EXECF_SYNC) - rc = spawnl(P_WAIT,shell,shell,copt,cmd,(char*)0); - else - rc = result(aTHX_ P_WAIT, - spawnl(P_NOWAIT,shell,shell,copt,cmd,(char*)0)); - if (rc < 0 && ckWARN(WARN_EXEC)) - Perl_warner(aTHX_ packWARN(WARN_EXEC), "Can't %s \"%s\": %s", - (execf == EXECF_SPAWN ? "spawn" : "exec"), - shell, Strerror(errno)); - if (rc < 0) - rc = -1; - } - if (news) - Safefree(news); - goto leave; - } else if (*s == ' ' || *s == '\t') { - seenspace = 1; - } + else { + /* In the ak code internal P_NOWAIT is P_WAIT ??? */ + if (execf == EXECF_SYNC) + rc = spawnl(P_WAIT,shell,shell,copt,cmd,(char*)0); + else + rc = result(aTHX_ P_WAIT, + spawnl(P_NOWAIT,shell,shell,copt,cmd,(char*)0)); + if (rc < 0 && ckWARN(WARN_EXEC)) + Perl_warner(aTHX_ packWARN(WARN_EXEC), "Can't %s \"%s\": %s", + (execf == EXECF_SPAWN ? "spawn" : "exec"), + shell, Strerror(errno)); + if (rc < 0) + rc = -1; + } + if (news) + Safefree(news); + goto leave; + } else if (*s == ' ' || *s == '\t') { + seenspace = 1; + } } /* cmd="a" may lead to "sh", "-c", "\"$@\"", "a", "a.cmd", NULL */ @@ -1459,20 +1458,20 @@ do_spawn3(pTHX_ char *cmd, int execf, int flag) SAVEFREEPV(cmd); a = argv; for (s = cmd; *s;) { - while (*s && isSPACE(*s)) s++; - if (*s) - *(a++) = s; - while (*s && !isSPACE(*s)) s++; - if (*s) - *s++ = '\0'; + while (*s && isSPACE(*s)) s++; + if (*s) + *(a++) = s; + while (*s && !isSPACE(*s)) s++; + if (*s) + *s++ = '\0'; } *a = NULL; if (argv[0]) - rc = do_spawn_ve(aTHX_ NULL, argv, flag, execf, cmd, mergestderr); + rc = do_spawn_ve(aTHX_ NULL, argv, flag, execf, cmd, mergestderr); else - rc = -1; + rc = -1; if (news) - Safefree(news); + Safefree(news); leave: LEAVE; return rc; @@ -1495,37 +1494,37 @@ os2_aspawn_4(pTHX_ SV *really, SV **args, I32 cnt, int execing) ENTER; if (cnt) { - Newx(argv, cnt + 3, char*); /* 3 extra to expand #! */ - SAVEFREEPV(argv); - a = argv; - - if (cnt > 1 && SvNIOKp(*argp) && !SvPOKp(*argp)) { - flag = SvIVx(*argp); - flag_set = 1; - } else - --argp; - - while (++argp < last) { - if (*argp) { - char *arg = SvPVx(*argp, n_a); - arg = savepv(arg); - SAVEFREEPV(arg); - *a++ = arg; - } else - *a++ = ""; - } - *a = NULL; - - if ( flag_set && (a == argv + 1) - && !really && execing == ASPAWN_WAIT ) { /* One arg? */ - rc = do_spawn3(aTHX_ a[-1], EXECF_SPAWN_BYFLAG, flag); - } else { - const int execf[3] = {EXECF_SPAWN, EXECF_EXEC, EXECF_SPAWN_NOWAIT}; - - rc = do_spawn_ve(aTHX_ really, argv, flag, execf[execing], NULL, 0); - } + Newx(argv, cnt + 3, char*); /* 3 extra to expand #! */ + SAVEFREEPV(argv); + a = argv; + + if (cnt > 1 && SvNIOKp(*argp) && !SvPOKp(*argp)) { + flag = SvIVx(*argp); + flag_set = 1; + } else + --argp; + + while (++argp < last) { + if (*argp) { + char *arg = SvPVx(*argp, n_a); + arg = savepv(arg); + SAVEFREEPV(arg); + *a++ = arg; + } else + *a++ = ""; + } + *a = NULL; + + if ( flag_set && (a == argv + 1) + && !really && execing == ASPAWN_WAIT ) { /* One arg? */ + rc = do_spawn3(aTHX_ a[-1], EXECF_SPAWN_BYFLAG, flag); + } else { + const int execf[3] = {EXECF_SPAWN, EXECF_EXEC, EXECF_SPAWN_NOWAIT}; + + rc = do_spawn_ve(aTHX_ really, argv, flag, execf[execing], NULL, 0); + } } else - rc = -1; + rc = -1; LEAVE; return rc; } @@ -1583,63 +1582,63 @@ my_syspopen4(pTHX_ char *cmd, char *mode, I32 cnt, SV** args) this = (*mode == 'w'); that = !this; if (TAINTING_get) { - taint_env(); - taint_proper("Insecure %s%s", "EXEC"); + taint_env(); + taint_proper("Insecure %s%s", "EXEC"); } if (pipe(p) < 0) - return NULL; + return NULL; /* Now we need to spawn the child. */ if (p[this] == (*mode == 'r')) { /* if fh 0/1 was initially closed. */ - int new = dup(p[this]); + int new = dup(p[this]); - if (new == -1) - goto closepipes; - close(p[this]); - p[this] = new; + if (new == -1) + goto closepipes; + close(p[this]); + p[this] = new; } newfd = dup(*mode == 'r'); /* Preserve std* */ if (newfd == -1) { - /* This cannot happen due to fh being bad after pipe(), since - pipe() should have created fh 0 and 1 even if they were - initially closed. But we closed p[this] before. */ - if (errno != EBADF) { - closepipes: - close(p[0]); - close(p[1]); - return NULL; - } + /* This cannot happen due to fh being bad after pipe(), since + pipe() should have created fh 0 and 1 even if they were + initially closed. But we closed p[this] before. */ + if (errno != EBADF) { + closepipes: + close(p[0]); + close(p[1]); + return NULL; + } } else - fh_fl = fcntl(*mode == 'r', F_GETFD); + fh_fl = fcntl(*mode == 'r', F_GETFD); if (p[that] != (*mode == 'r')) { /* if fh 0/1 was initially closed. */ - dup2(p[that], *mode == 'r'); - close(p[that]); + dup2(p[that], *mode == 'r'); + close(p[that]); } /* Where is `this' and newfd now? */ fcntl(p[this], F_SETFD, FD_CLOEXEC); if (newfd != -1) - fcntl(newfd, F_SETFD, FD_CLOEXEC); + fcntl(newfd, F_SETFD, FD_CLOEXEC); if (cnt) { /* Args: "Real cmd", before first arg, the last, execing */ - pid = os2_aspawn_4(aTHX_ NULL, args, cnt, ASPAWN_NOWAIT); + pid = os2_aspawn_4(aTHX_ NULL, args, cnt, ASPAWN_NOWAIT); } else - pid = do_spawn_nowait(aTHX_ cmd); + pid = do_spawn_nowait(aTHX_ cmd); if (newfd == -1) - close(*mode == 'r'); /* It was closed initially */ + close(*mode == 'r'); /* It was closed initially */ else if (newfd != (*mode == 'r')) { /* Probably this check is not needed */ - dup2(newfd, *mode == 'r'); /* Return std* back. */ - close(newfd); - fcntl(*mode == 'r', F_SETFD, fh_fl); + dup2(newfd, *mode == 'r'); /* Return std* back. */ + close(newfd); + fcntl(*mode == 'r', F_SETFD, fh_fl); } else - fcntl(*mode == 'r', F_SETFD, fh_fl); + fcntl(*mode == 'r', F_SETFD, fh_fl); if (p[that] == (*mode == 'r')) - close(p[that]); + close(p[that]); if (pid == -1) { - close(p[this]); - return NULL; + close(p[this]); + return NULL; } if (p[that] < p[this]) { /* Make fh as small as possible */ - dup2(p[this], p[that]); - close(p[this]); - p[this] = p[that]; + dup2(p[this], p[that]); + close(p[this]); + p[this] = p[that]; } sv = *av_fetch(PL_fdpid,p[this],TRUE); (void)SvUPGRADE(sv,SVt_IV); @@ -1653,12 +1652,13 @@ my_syspopen4(pTHX_ char *cmd, char *mode, I32 cnt, SV** args) SV *sv; if (cnt) - Perl_croak(aTHX_ "List form of piped open not implemented"); + Perl_croak(aTHX_ "List form of piped open not implemented"); # ifdef TRYSHELL res = popen(cmd, mode); # else - char *shell = getenv("EMXSHELL"); + + char *shell = PerlEnv_getenv("EMXSHELL"); my_setenv("EMXSHELL", PL_sh_path); res = popen(cmd, mode); @@ -1666,7 +1666,7 @@ my_syspopen4(pTHX_ char *cmd, char *mode, I32 cnt, SV** args) # endif sv = *av_fetch(PL_fdpid, PerlIO_fileno(res), TRUE); (void)SvUPGRADE(sv,SVt_IV); - SvIVX(sv) = -1; /* A cooky. */ + SvIVX(sv) = -2; /* A cooky. */ return res; #endif /* USE_POPEN */ @@ -1726,16 +1726,16 @@ static void massage_os2_attr(struct stat *st) { if ( ((st->st_mode & S_IFMT) != S_IFREG - && (st->st_mode & S_IFMT) != S_IFDIR) + && (st->st_mode & S_IFMT) != S_IFDIR) || !(st->st_attr & (FILE_ARCHIVED | FILE_HIDDEN | FILE_SYSTEM))) - return; + return; if ( st->st_attr & FILE_ARCHIVED ) - st->st_mode |= (os2_stat_archived | os2_stat_force); + st->st_mode |= (os2_stat_archived | os2_stat_force); if ( st->st_attr & FILE_HIDDEN ) - st->st_mode |= (os2_stat_hidden | os2_stat_force); + st->st_mode |= (os2_stat_hidden | os2_stat_force); if ( st->st_attr & FILE_SYSTEM ) - st->st_mode |= (os2_stat_system | os2_stat_force); + st->st_mode |= (os2_stat_system | os2_stat_force); } /* First attempt used DosQueryFSAttach which crashed the system when @@ -1748,15 +1748,15 @@ os2_stat(const char *name, struct stat *st) if ( ( l < 8 || l > 9) || strnicmp(name, "/dev/", 5) != 0 || ( stricmp(name + 5, "con") != 0 - && stricmp(name + 5, "tty") != 0 - && stricmp(name + 5, "nul") != 0 - && stricmp(name + 5, "null") != 0) ) { - int s = stat(name, st); - - if (s) - return s; - massage_os2_attr(st); - return 0; + && stricmp(name + 5, "tty") != 0 + && stricmp(name + 5, "nul") != 0 + && stricmp(name + 5, "null") != 0) ) { + int s = stat(name, st); + + if (s) + return s; + massage_os2_attr(st); + return 0; } memset(st, 0, sizeof *st); @@ -1774,7 +1774,7 @@ os2_fstat(int handle, struct stat *st) int s = fstat(handle, st); if (s) - return s; + return s; massage_os2_attr(st); return 0; } @@ -1786,15 +1786,15 @@ os2_chmod (const char *name, int pmode) /* Modelled after EMX src/lib/io/chmod.c int attr, rc; if (!(pmode & os2_stat_force)) - return chmod(name, pmode); + return chmod(name, pmode); attr = __chmod (name, 0, 0); /* Get attributes */ if (attr < 0) - return -1; + return -1; if (pmode & S_IWRITE) - attr &= ~FILE_READONLY; + attr &= ~FILE_READONLY; else - attr |= FILE_READONLY; + attr |= FILE_READONLY; /* New logic */ attr &= ~(FILE_ARCHIVED | FILE_HIDDEN | FILE_SYSTEM); @@ -1822,9 +1822,9 @@ sys_alloc(int size) { APIRET rc = DosAllocMem(&got, size, PAG_COMMIT | PAG_WRITE); if (rc == ERROR_NOT_ENOUGH_MEMORY) { - return (void *) -1; + return (void *) -1; } else if ( rc ) - Perl_croak_nocontext("Got an error from DosAllocMem: %li", (long)rc); + Perl_croak_nocontext("Got an error from DosAllocMem: %li", (long)rc); return got; } @@ -1837,19 +1837,19 @@ const char *tmppath = TMPPATH1; void settmppath() { - char *p = getenv("TMP"), *tpath; + char *p = PerlEnv_getenv("TMP"), *tpath; int len; - if (!p) p = getenv("TEMP"); - if (!p) p = getenv("TMPDIR"); + if (!p) p = PerlEnv_getenv("TEMP"); + if (!p) p = PerlEnv_getenv("TMPDIR"); if (!p) return; len = strlen(p); tpath = (char *)malloc(len + strlen(TMPPATH1) + 2); if (tpath) { - strcpy(tpath, p); - tpath[len] = '/'; - strcpy(tpath + len + 1, TMPPATH1); - tmppath = tpath; + strcpy(tpath, p); + tpath[len] = '/'; + strcpy(tpath + len + 1, TMPPATH1); + tmppath = tpath; } } @@ -1859,23 +1859,23 @@ XS(XS_File__Copy_syscopy) { dXSARGS; if (items < 2 || items > 3) - Perl_croak_nocontext("Usage: File::Copy::syscopy(src,dst,flag=0)"); + Perl_croak_nocontext("Usage: File::Copy::syscopy(src,dst,flag=0)"); { - STRLEN n_a; - char * src = (char *)SvPV(ST(0),n_a); - char * dst = (char *)SvPV(ST(1),n_a); - U32 flag; - int RETVAL, rc; - dXSTARG; - - if (items < 3) - flag = 0; - else { - flag = (unsigned long)SvIV(ST(2)); - } - - RETVAL = !CheckOSError(DosCopy(src, dst, flag)); - XSprePUSH; PUSHi((IV)RETVAL); + STRLEN n_a; + char * src = (char *)SvPV(ST(0),n_a); + char * dst = (char *)SvPV(ST(1),n_a); + U32 flag; + int RETVAL, rc; + dXSTARG; + + if (items < 3) + flag = 0; + else { + flag = (unsigned long)SvIV(ST(2)); + } + + RETVAL = !CheckOSError(DosCopy(src, dst, flag)); + XSprePUSH; PUSHi((IV)RETVAL); } XSRETURN(1); } @@ -1883,21 +1883,21 @@ XS(XS_File__Copy_syscopy) /* APIRET APIENTRY DosReplaceModule (PCSZ pszOld, PCSZ pszNew, PCSZ pszBackup); */ DeclOSFuncByORD(ULONG,replaceModule,ORD_DosReplaceModule, - (char *old, char *new, char *backup), (old, new, backup)) + (char *old, char *new, char *backup), (old, new, backup)) XS(XS_OS2_replaceModule); /* prototype to pass -Wmissing-prototypes */ XS(XS_OS2_replaceModule) { dXSARGS; if (items < 1 || items > 3) - Perl_croak(aTHX_ "Usage: OS2::replaceModule(target [, source [, backup]])"); + Perl_croak(aTHX_ "Usage: OS2::replaceModule(target [, source [, backup]])"); { - char * target = (char *)SvPV_nolen(ST(0)); - char * source = (items < 2) ? NULL : (char *)SvPV_nolen(ST(1)); - char * backup = (items < 3) ? NULL : (char *)SvPV_nolen(ST(2)); + char * target = (char *)SvPV_nolen(ST(0)); + char * source = (items < 2) ? NULL : (char *)SvPV_nolen(ST(1)); + char * backup = (items < 3) ? NULL : (char *)SvPV_nolen(ST(2)); - if (!replaceModule(target, source, backup)) - croak_with_os2error("replaceModule() error"); + if (!replaceModule(target, source, backup)) + croak_with_os2error("replaceModule() error"); } XSRETURN_YES; } @@ -1906,8 +1906,8 @@ XS(XS_OS2_replaceModule) ULONG ulParm2, ULONG ulParm3); */ DeclOSFuncByORD(ULONG,perfSysCall,ORD_DosPerfSysCall, - (ULONG ulCommand, ULONG ulParm1, ULONG ulParm2, ULONG ulParm3), - (ulCommand, ulParm1, ulParm2, ulParm3)) + (ULONG ulCommand, ULONG ulParm1, ULONG ulParm2, ULONG ulParm3), + (ulCommand, ulParm1, ulParm2, ulParm3)) #ifndef CMD_KI_RDCNT # define CMD_KI_RDCNT 0x63 @@ -1925,10 +1925,10 @@ typedef unsigned long long myCPUUTIL[4]; /* time/idle/busy/intr */ NO_OUTPUT ULONG perfSysCall(ULONG ulCommand, ULONG ulParm1, ULONG ulParm2, ULONG ulParm3) PREINIT: - ULONG rc; + ULONG rc; POSTCALL: - if (!RETVAL) - croak_with_os2error("perfSysCall() error"); + if (!RETVAL) + croak_with_os2error("perfSysCall() error"); */ static int @@ -1937,7 +1937,7 @@ numprocessors(void) ULONG res; if (DosQuerySysInfo(QSV_NUMPROCESSORS, QSV_NUMPROCESSORS, (PVOID)&res, sizeof(res))) - return 1; /* Old system? */ + return 1; /* Old system? */ return res; } @@ -1946,64 +1946,64 @@ XS(XS_OS2_perfSysCall) { dXSARGS; if (items < 0 || items > 4) - Perl_croak(aTHX_ "Usage: OS2::perfSysCall(ulCommand = CMD_KI_RDCNT, ulParm1= 0, ulParm2= 0, ulParm3= 0)"); + Perl_croak(aTHX_ "Usage: OS2::perfSysCall(ulCommand = CMD_KI_RDCNT, ulParm1= 0, ulParm2= 0, ulParm3= 0)"); SP -= items; { - dXSTARG; - ULONG RETVAL, ulCommand, ulParm1, ulParm2, ulParm3, res; - myCPUUTIL u[64]; - int total = 0, tot2 = 0; - - if (items < 1) - ulCommand = CMD_KI_RDCNT; - else { - ulCommand = (ULONG)SvUV(ST(0)); - } - - if (items < 2) { - total = (ulCommand == CMD_KI_RDCNT ? numprocessors() : 0); - ulParm1 = (total ? (ULONG)u : 0); - - if (total > C_ARRAY_LENGTH(u)) - croak("Unexpected number of processors: %d", total); - } else { - ulParm1 = (ULONG)SvUV(ST(1)); - } - - if (items < 3) { - tot2 = (ulCommand == CMD_KI_GETQTY); - ulParm2 = (tot2 ? (ULONG)&res : 0); - } else { - ulParm2 = (ULONG)SvUV(ST(2)); - } - - if (items < 4) - ulParm3 = 0; - else { - ulParm3 = (ULONG)SvUV(ST(3)); - } - - RETVAL = perfSysCall(ulCommand, ulParm1, ulParm2, ulParm3); - if (!RETVAL) - croak_with_os2error("perfSysCall() error"); - XSprePUSH; - if (total) { - int i,j; - - if (GIMME_V != G_ARRAY) { - PUSHn(u[0][0]); /* Total ticks on the first processor */ - XSRETURN(1); - } - EXTEND(SP, 4*total); - for (i=0; i < total; i++) - for (j=0; j < 4; j++) - PUSHs(sv_2mortal(newSVnv(u[i][j]))); - XSRETURN(4*total); - } - if (tot2) { - PUSHu(res); - XSRETURN(1); - } + dXSTARG; + ULONG RETVAL, ulCommand, ulParm1, ulParm2, ulParm3, res; + myCPUUTIL u[64]; + int total = 0, tot2 = 0; + + if (items < 1) + ulCommand = CMD_KI_RDCNT; + else { + ulCommand = (ULONG)SvUV(ST(0)); + } + + if (items < 2) { + total = (ulCommand == CMD_KI_RDCNT ? numprocessors() : 0); + ulParm1 = (total ? (ULONG)u : 0); + + if (total > C_ARRAY_LENGTH(u)) + croak("Unexpected number of processors: %d", total); + } else { + ulParm1 = (ULONG)SvUV(ST(1)); + } + + if (items < 3) { + tot2 = (ulCommand == CMD_KI_GETQTY); + ulParm2 = (tot2 ? (ULONG)&res : 0); + } else { + ulParm2 = (ULONG)SvUV(ST(2)); + } + + if (items < 4) + ulParm3 = 0; + else { + ulParm3 = (ULONG)SvUV(ST(3)); + } + + RETVAL = perfSysCall(ulCommand, ulParm1, ulParm2, ulParm3); + if (!RETVAL) + croak_with_os2error("perfSysCall() error"); + XSprePUSH; + if (total) { + int i,j; + + if (GIMME_V != G_LIST) { + PUSHn(u[0][0]); /* Total ticks on the first processor */ + XSRETURN(1); + } + EXTEND(SP, 4*total); + for (i=0; i < total; i++) + for (j=0; j < 4; j++) + PUSHs(sv_2mortal(newSVnv(u[i][j]))); + XSRETURN(4*total); + } + if (tot2) { + PUSHu(res); + XSRETURN(1); + } } XSRETURN_EMPTY; } @@ -2025,8 +2025,8 @@ mod2fname(pTHX_ SV *sv) if (SvTYPE(sv) != SVt_PVAV) Perl_croak_nocontext("Not array reference given to mod2fname"); - avlen = av_tindex((AV*)sv); - if (avlen < 0) + avlen = av_count((AV*)sv); + if (avlen == 0) Perl_croak_nocontext("Empty array reference given to mod2fname"); s = SvPV(*av_fetch((AV*)sv, avlen, FALSE), n_a); @@ -2034,16 +2034,15 @@ mod2fname(pTHX_ SV *sv) len = strlen(s); if (len < 6) pos = len; while (*s) { - sum = 33 * sum + *(s++); /* Checksumming first chars to - * get the capitalization into c.s. */ + sum = 33 * sum + *(s++); /* Checksumming first chars to + * get the capitalization into c.s. */ } - avlen --; - while (avlen >= 0) { - s = SvPV(*av_fetch((AV*)sv, avlen, FALSE), n_a); - while (*s) { - sum = 33 * sum + *(s++); /* 7 is primitive mod 13. */ - } - avlen --; + while (avlen > 0) { + s = SvPV(*av_fetch((AV*)sv, avlen, FALSE), n_a); + while (*s) { + sum = 33 * sum + *(s++); /* 7 is primitive mod 13. */ + } + avlen --; } /* We always load modules as *specific* DLLs, and with the full name. When loading a specific DLL by its full name, one cannot get a @@ -2067,15 +2066,15 @@ XS(XS_DynaLoader_mod2fname) { dXSARGS; if (items != 1) - Perl_croak_nocontext("Usage: DynaLoader::mod2fname(sv)"); + Perl_croak_nocontext("Usage: DynaLoader::mod2fname(sv)"); { - SV * sv = ST(0); - char * RETVAL; - dXSTARG; + SV * sv = ST(0); + char * RETVAL; + dXSTARG; - RETVAL = mod2fname(aTHX_ sv); - sv_setpv(TARG, RETVAL); - XSprePUSH; PUSHTARG; + RETVAL = mod2fname(aTHX_ sv); + sv_setpv(TARG, RETVAL); + XSprePUSH; PUSHTARG; } XSRETURN(1); } @@ -2083,75 +2082,75 @@ XS(XS_DynaLoader_mod2fname) char * os2error(int rc) { - dTHX; - ULONG len; - char *s; - int number = SvTRUE(get_sv("OS2::nsyserror", GV_ADD)); + dTHX; + ULONG len; + char *s; + int number = SvTRUE(get_sv("OS2::nsyserror", GV_ADD)); if (!(_emx_env & 0x200)) return ""; /* Nop if not OS/2. */ - if (rc == 0) - return ""; - if (number) { - sprintf(os2error_buf, "SYS%04d=%#x: ", rc, rc); - s = os2error_buf + strlen(os2error_buf); - } else - s = os2error_buf; - if (DosGetMessage(NULL, 0, s, sizeof(os2error_buf) - 1 - (s-os2error_buf), - rc, "OSO001.MSG", &len)) { - char *name = ""; - - if (!number) { - sprintf(os2error_buf, "SYS%04d=%#x: ", rc, rc); - s = os2error_buf + strlen(os2error_buf); - } - switch (rc) { - case PMERR_INVALID_HWND: - name = "PMERR_INVALID_HWND"; - break; - case PMERR_INVALID_HMQ: - name = "PMERR_INVALID_HMQ"; - break; - case PMERR_CALL_FROM_WRONG_THREAD: - name = "PMERR_CALL_FROM_WRONG_THREAD"; - break; - case PMERR_NO_MSG_QUEUE: - name = "PMERR_NO_MSG_QUEUE"; - break; - case PMERR_NOT_IN_A_PM_SESSION: - name = "PMERR_NOT_IN_A_PM_SESSION"; - break; - case PMERR_INVALID_ATOM: - name = "PMERR_INVALID_ATOM"; - break; - case PMERR_INVALID_HATOMTBL: - name = "PMERR_INVALID_HATOMTMB"; - break; - case PMERR_INVALID_INTEGER_ATOM: - name = "PMERR_INVALID_INTEGER_ATOM"; - break; - case PMERR_INVALID_ATOM_NAME: - name = "PMERR_INVALID_ATOM_NAME"; - break; - case PMERR_ATOM_NAME_NOT_FOUND: - name = "PMERR_ATOM_NAME_NOT_FOUND"; - break; - } - sprintf(s, "%s%s[No description found in OSO001.MSG]", - name, (*name ? "=" : "")); - } else { - s[len] = '\0'; - if (len && s[len - 1] == '\n') - s[--len] = 0; - if (len && s[len - 1] == '\r') - s[--len] = 0; - if (len && s[len - 1] == '.') - s[--len] = 0; - if (len >= 10 && number && strnEQ(s, os2error_buf, 7) - && s[7] == ':' && s[8] == ' ') - /* Some messages start with SYSdddd:, some not */ - Move(s + 9, s, (len -= 9) + 1, char); - } - return os2error_buf; + if (rc == 0) + return ""; + if (number) { + sprintf(os2error_buf, "SYS%04d=%#x: ", rc, rc); + s = os2error_buf + strlen(os2error_buf); + } else + s = os2error_buf; + if (DosGetMessage(NULL, 0, s, sizeof(os2error_buf) - 1 - (s-os2error_buf), + rc, "OSO001.MSG", &len)) { + char *name = ""; + + if (!number) { + sprintf(os2error_buf, "SYS%04d=%#x: ", rc, rc); + s = os2error_buf + strlen(os2error_buf); + } + switch (rc) { + case PMERR_INVALID_HWND: + name = "PMERR_INVALID_HWND"; + break; + case PMERR_INVALID_HMQ: + name = "PMERR_INVALID_HMQ"; + break; + case PMERR_CALL_FROM_WRONG_THREAD: + name = "PMERR_CALL_FROM_WRONG_THREAD"; + break; + case PMERR_NO_MSG_QUEUE: + name = "PMERR_NO_MSG_QUEUE"; + break; + case PMERR_NOT_IN_A_PM_SESSION: + name = "PMERR_NOT_IN_A_PM_SESSION"; + break; + case PMERR_INVALID_ATOM: + name = "PMERR_INVALID_ATOM"; + break; + case PMERR_INVALID_HATOMTBL: + name = "PMERR_INVALID_HATOMTMB"; + break; + case PMERR_INVALID_INTEGER_ATOM: + name = "PMERR_INVALID_INTEGER_ATOM"; + break; + case PMERR_INVALID_ATOM_NAME: + name = "PMERR_INVALID_ATOM_NAME"; + break; + case PMERR_ATOM_NAME_NOT_FOUND: + name = "PMERR_ATOM_NAME_NOT_FOUND"; + break; + } + sprintf(s, "%s%s[No description found in OSO001.MSG]", + name, (*name ? "=" : "")); + } else { + s[len] = '\0'; + if (len && s[len - 1] == '\n') + s[--len] = 0; + if (len && s[len - 1] == '\r') + s[--len] = 0; + if (len && s[len - 1] == '.') + s[--len] = 0; + if (len >= 10 && number && strnEQ(s, os2error_buf, 7) + && s[7] == ':' && s[8] == ' ') + /* Some messages start with SYSdddd:, some not */ + Move(s + 9, s, (len -= 9) + 1, char); + } + return os2error_buf; } void @@ -2197,12 +2196,12 @@ execname2buffer(char *buf, STRLEN l, char *oname) p = buf; while (*p) { if (*p == '\\') - *p = '/'; + *p = '/'; if (*p == '/') { - if (ok && *oname != '/' && *oname != '\\') - ok = 0; + if (ok && *oname != '/' && *oname != '\\') + ok = 0; } else if (ok && tolower(*oname) != tolower(*p)) - ok = 0; + ok = 0; p++; oname++; } @@ -2235,32 +2234,32 @@ Perl_OS2_handler_install(void *handler, enum Perlos2_handler how) switch (how) { case Perlos2_handler_mangle: - perllib_mangle_installed = (char *(*)(char *s, unsigned int l))handler; - return 1; + perllib_mangle_installed = (char *(*)(char *s, unsigned int l))handler; + return 1; case Perlos2_handler_perl_sh: - s = (char *)handler; - s = dir_subst(s, strlen(s), b, sizeof b, 0, "handler_perl_sh"); - perl_sh_installed = savepv(s); - return 1; + s = (char *)handler; + s = dir_subst(s, strlen(s), b, sizeof b, 0, "handler_perl_sh"); + perl_sh_installed = savepv(s); + return 1; case Perlos2_handler_perllib_from: - s = (char *)handler; - s = dir_subst(s, strlen(s), b, sizeof b, 0, "handler_perllib_from"); - oldl = strlen(s); - oldp = savepv(s); - return 1; + s = (char *)handler; + s = dir_subst(s, strlen(s), b, sizeof b, 0, "handler_perllib_from"); + oldl = strlen(s); + oldp = savepv(s); + return 1; case Perlos2_handler_perllib_to: - s = (char *)handler; - s = dir_subst(s, strlen(s), b, sizeof b, 0, "handler_perllib_to"); - newl = strlen(s); - newp = savepv(s); - strcpy(mangle_ret, newp); - s = mangle_ret - 1; - while (*++s) - if (*s == '\\') - *s = '/'; - return 1; + s = (char *)handler; + s = dir_subst(s, strlen(s), b, sizeof b, 0, "handler_perllib_to"); + newl = strlen(s); + newp = savepv(s); + strcpy(mangle_ret, newp); + s = mangle_ret - 1; + while (*++s) + if (*s == '\\') + *s = '/'; + return 1; default: - return 0; + return 0; } } @@ -2272,115 +2271,115 @@ dir_subst(char *s, unsigned int l, char *b, unsigned int bl, enum dir_subst_e fl STRLEN froml = 0, tol = 0, rest = 0; /* froml: likewise */ if (l >= 2 && s[0] == '~') { - switch (s[1]) { - case 'i': case 'I': - from = "installprefix"; break; - case 'd': case 'D': - from = "dll"; break; - case 'e': case 'E': - from = "exe"; break; - default: - from = NULL; - froml = l + 1; /* Will not match */ - break; - } - if (from) - froml = strlen(from) + 1; - if (l >= froml && strnicmp(s + 2, from + 1, froml - 2) == 0) { - int strip = 1; - - switch (s[1]) { - case 'i': case 'I': - strip = 0; - tol = strlen(INSTALL_PREFIX); - if (tol >= bl) { - if (flags & dir_subst_fatal) - Perl_croak_nocontext("INSTALL_PREFIX too long: `%s'", INSTALL_PREFIX); - else - return NULL; - } - memcpy(b, INSTALL_PREFIX, tol + 1); - to = b; - e = b + tol; - break; - case 'd': case 'D': - if (flags & dir_subst_fatal) { - dTHX; - - to = dllname2buffer(aTHX_ b, bl); - } else { /* No Perl present yet */ - HMODULE self = find_myself(); - APIRET rc = DosQueryModuleName(self, bl, b); - - if (rc) - return 0; - to = b - 1; - while (*++to) - if (*to == '\\') - *to = '/'; - to = b; - } - break; - case 'e': case 'E': - if (flags & dir_subst_fatal) { - dTHX; - - to = execname2buffer(b, bl, PL_origargv[0]); - } else - to = execname2buffer(b, bl, NULL); - break; - } - if (!to) - return NULL; - if (strip) { - e = strrchr(to, '/'); - if (!e && (flags & dir_subst_fatal)) - Perl_croak_nocontext("%s: Can't parse EXE/DLL name: '%s'", msg, to); - else if (!e) - return NULL; - *e = 0; - } - s += froml; l -= froml; - if (!l) - return to; - if (!tol) - tol = strlen(to); - - while (l >= 3 && (s[0] == '/' || s[0] == '\\') - && s[1] == '.' && s[2] == '.' - && (l == 3 || s[3] == '/' || s[3] == '\\' || s[3] == ';')) { - e = strrchr(b, '/'); - if (!e && (flags & dir_subst_fatal)) - Perl_croak_nocontext("%s: Error stripping dirs from EXE/DLL/INSTALLDIR name", msg); - else if (!e) - return NULL; - *e = 0; - l -= 3; s += 3; - } - if (l && s[0] != '/' && s[0] != '\\' && s[0] != ';') - *e++ = '/'; - } + switch (s[1]) { + case 'i': case 'I': + from = "installprefix"; break; + case 'd': case 'D': + from = "dll"; break; + case 'e': case 'E': + from = "exe"; break; + default: + from = NULL; + froml = l + 1; /* Will not match */ + break; + } + if (from) + froml = strlen(from) + 1; + if (l >= froml && strnicmp(s + 2, from + 1, froml - 2) == 0) { + int strip = 1; + + switch (s[1]) { + case 'i': case 'I': + strip = 0; + tol = strlen(INSTALL_PREFIX); + if (tol >= bl) { + if (flags & dir_subst_fatal) + Perl_croak_nocontext("INSTALL_PREFIX too long: `%s'", INSTALL_PREFIX); + else + return NULL; + } + memcpy(b, INSTALL_PREFIX, tol + 1); + to = b; + e = b + tol; + break; + case 'd': case 'D': + if (flags & dir_subst_fatal) { + dTHX; + + to = dllname2buffer(aTHX_ b, bl); + } else { /* No Perl present yet */ + HMODULE self = find_myself(); + APIRET rc = DosQueryModuleName(self, bl, b); + + if (rc) + return 0; + to = b - 1; + while (*++to) + if (*to == '\\') + *to = '/'; + to = b; + } + break; + case 'e': case 'E': + if (flags & dir_subst_fatal) { + dTHX; + + to = execname2buffer(b, bl, PL_origargv[0]); + } else + to = execname2buffer(b, bl, NULL); + break; + } + if (!to) + return NULL; + if (strip) { + e = strrchr(to, '/'); + if (!e && (flags & dir_subst_fatal)) + Perl_croak_nocontext("%s: Can't parse EXE/DLL name: '%s'", msg, to); + else if (!e) + return NULL; + *e = 0; + } + s += froml; l -= froml; + if (!l) + return to; + if (!tol) + tol = strlen(to); + + while (l >= 3 && (s[0] == '/' || s[0] == '\\') + && s[1] == '.' && s[2] == '.' + && (l == 3 || s[3] == '/' || s[3] == '\\' || s[3] == ';')) { + e = strrchr(b, '/'); + if (!e && (flags & dir_subst_fatal)) + Perl_croak_nocontext("%s: Error stripping dirs from EXE/DLL/INSTALLDIR name", msg); + else if (!e) + return NULL; + *e = 0; + l -= 3; s += 3; + } + if (l && s[0] != '/' && s[0] != '\\' && s[0] != ';') + *e++ = '/'; + } } /* Else: copy as is */ if (l && (flags & dir_subst_pathlike)) { - STRLEN i = 0; - - while ( i < l - 2 && s[i] != ';') /* May have ~char after `;' */ - i++; - if (i < l - 2) { /* Found */ - rest = l - i - 1; - l = i + 1; - } + STRLEN i = 0; + + while ( i < l - 2 && s[i] != ';') /* May have ~char after `;' */ + i++; + if (i < l - 2) { /* Found */ + rest = l - i - 1; + l = i + 1; + } } if (e + l >= b + bl) { - if (flags & dir_subst_fatal) - Perl_croak_nocontext("%s: name `%s%s' too long", msg, b, s); - else - return NULL; + if (flags & dir_subst_fatal) + Perl_croak_nocontext("%s: name `%s%s' too long", msg, b, s); + else + return NULL; } memcpy(e, s, l); if (rest) { - e = dir_subst(s + l, rest, e + l, bl - (e + l - b), flags, msg); - return e ? b : e; + e = dir_subst(s + l, rest, e + l, bl - (e + l - b), flags, msg); + return e ? b : e; } e[l] = 0; return b; @@ -2390,15 +2389,15 @@ char * perllib_mangle_with(char *s, unsigned int l, char *from, unsigned int froml, char *to, unsigned int tol) { if (!to) - return s; + return s; if (l == 0) - l = strlen(s); + l = strlen(s); if (l < froml || strnicmp(from, s, froml) != 0) - return s; + return s; if (l + tol - froml > STATIC_FILE_LENGTH || tol > STATIC_FILE_LENGTH) - Perl_croak_nocontext("Malformed PERLLIB_PREFIX"); + Perl_croak_nocontext("Malformed PERLLIB_PREFIX"); if (to && to != mangle_ret) - memcpy(mangle_ret, to, tol); + memcpy(mangle_ret, to, tol); strcpy(mangle_ret + tol, s + froml); return mangle_ret; } @@ -2409,44 +2408,44 @@ perllib_mangle(char *s, unsigned int l) char *name; if (perllib_mangle_installed && (name = perllib_mangle_installed(s,l))) - return name; + return name; if (!newp && !notfound) { - newp = getenv(name = "PERLLIB_" STRINGIFY(PERL_REVISION) - STRINGIFY(PERL_VERSION) STRINGIFY(PERL_SUBVERSION) - "_PREFIX"); - if (!newp) - newp = getenv(name = "PERLLIB_" STRINGIFY(PERL_REVISION) - STRINGIFY(PERL_VERSION) "_PREFIX"); - if (!newp) - newp = getenv(name = "PERLLIB_" STRINGIFY(PERL_REVISION) "_PREFIX"); - if (!newp) - newp = getenv(name = "PERLLIB_PREFIX"); - if (newp) { - char *s, b[300]; - - oldp = newp; - while (*newp && !isSPACE(*newp) && *newp != ';') - newp++; /* Skip old name. */ - oldl = newp - oldp; - s = dir_subst(oldp, oldl, b, sizeof b, dir_subst_fatal, name); - oldp = savepv(s); - oldl = strlen(s); - while (*newp && (isSPACE(*newp) || *newp == ';')) - newp++; /* Skip whitespace. */ - Perl_OS2_handler_install((void *)newp, Perlos2_handler_perllib_to); - if (newl == 0 || oldl == 0) - Perl_croak_nocontext("Malformed %s", name); - } else - notfound = 1; + newp = PerlEnv_getenv(name = "PERLLIB_" STRINGIFY(PERL_REVISION) + STRINGIFY(PERL_VERSION) STRINGIFY(PERL_SUBVERSION) + "_PREFIX"); + if (!newp) + newp = PerlEnv_getenv(name = "PERLLIB_" STRINGIFY(PERL_REVISION) + STRINGIFY(PERL_VERSION) "_PREFIX"); + if (!newp) + newp = PerlEnv_getenv(name = "PERLLIB_" STRINGIFY(PERL_REVISION) "_PREFIX"); + if (!newp) + newp = PerlEnv_getenv(name = "PERLLIB_PREFIX"); + if (newp) { + char *s, b[300]; + + oldp = newp; + while (*newp && !isSPACE(*newp) && *newp != ';') + newp++; /* Skip old name. */ + oldl = newp - oldp; + s = dir_subst(oldp, oldl, b, sizeof b, dir_subst_fatal, name); + oldp = savepv(s); + oldl = strlen(s); + while (*newp && (isSPACE(*newp) || *newp == ';')) + newp++; /* Skip whitespace. */ + Perl_OS2_handler_install((void *)newp, Perlos2_handler_perllib_to); + if (newl == 0 || oldl == 0) + Perl_croak_nocontext("Malformed %s", name); + } else + notfound = 1; } if (!newp) - return s; + return s; if (l == 0) - l = strlen(s); + l = strlen(s); if (l < oldl || strnicmp(oldp, s, oldl) != 0) - return s; + return s; if (l + newl - oldl > STATIC_FILE_LENGTH || newl > STATIC_FILE_LENGTH) - Perl_croak_nocontext("Malformed PERLLIB_PREFIX"); + Perl_croak_nocontext("Malformed PERLLIB_PREFIX"); strcpy(mangle_ret + newl, s + oldl); return mangle_ret; } @@ -2466,15 +2465,15 @@ Create_HMQ(int serve, char *message) /* Assumes morphing */ /* 64 messages if before OS/2 3.0, ignored otherwise */ Perl_hmq = (*PMWIN_entries.CreateMsgQueue)(perl_hab_GET(), 64); if (!Perl_hmq) { - dTHX; + dTHX; - SAVEINT(rmq_cnt); /* Allow catch()ing. */ - if (rmq_cnt++) - _exit(188); /* Panic can try to create a window. */ - CroakWinError(1, message ? message : "Cannot create a message queue"); + SAVEINT(rmq_cnt); /* Allow catch()ing. */ + if (rmq_cnt++) + _exit(188); /* Panic can try to create a window. */ + CroakWinError(1, message ? message : "Cannot create a message queue"); } if (serve != -1) - (*PMWIN_entries.CancelShutdown)(Perl_hmq, !serve); + (*PMWIN_entries.CancelShutdown)(Perl_hmq, !serve); /* We may have loaded some modules */ _control87(fpflag, MCW_EM); /* Some modules reset FP flags on (un)load */ } @@ -2492,28 +2491,28 @@ Perl_Register_MQ(int serve) Perl_hmq_refcnt = 0; /* Be extra safe */ DosGetInfoBlocks(&tib, &pib); if (!Perl_morph_refcnt) { - Perl_os2_initial_mode = pib->pib_ultype; - /* Try morphing into a PM application. */ - if (pib->pib_ultype != 3) /* 2 is VIO */ - pib->pib_ultype = 3; /* 3 is PM */ + Perl_os2_initial_mode = pib->pib_ultype; + /* Try morphing into a PM application. */ + if (pib->pib_ultype != 3) /* 2 is VIO */ + pib->pib_ultype = 3; /* 3 is PM */ } Create_HMQ(-1, /* We do CancelShutdown ourselves */ - "Cannot create a message queue, or morph to a PM application"); + "Cannot create a message queue, or morph to a PM application"); if ((serve & REGISTERMQ_IMEDIATE_UNMORPH)) { - if (!Perl_morph_refcnt && Perl_os2_initial_mode != 3) - pib->pib_ultype = Perl_os2_initial_mode; + if (!Perl_morph_refcnt && Perl_os2_initial_mode != 3) + pib->pib_ultype = Perl_os2_initial_mode; } } if (serve & REGISTERMQ_WILL_SERVE) { - if ( Perl_hmq_servers <= 0 /* Safe to inform us on shutdown, */ - && Perl_hmq_refcnt > 0 ) /* this was switched off before... */ - (*PMWIN_entries.CancelShutdown)(Perl_hmq, 0); - Perl_hmq_servers++; + if ( Perl_hmq_servers <= 0 /* Safe to inform us on shutdown, */ + && Perl_hmq_refcnt > 0 ) /* this was switched off before... */ + (*PMWIN_entries.CancelShutdown)(Perl_hmq, 0); + Perl_hmq_servers++; } else if (!Perl_hmq_servers) /* Do not inform us on shutdown */ - (*PMWIN_entries.CancelShutdown)(Perl_hmq, 1); + (*PMWIN_entries.CancelShutdown)(Perl_hmq, 1); Perl_hmq_refcnt++; if (!(serve & REGISTERMQ_IMEDIATE_UNMORPH)) - Perl_morph_refcnt++; + Perl_morph_refcnt++; return Perl_hmq; } @@ -2524,14 +2523,14 @@ Perl_Serve_Messages(int force) QMSG msg; if (Perl_hmq_servers > 0 && !force) - return 0; + return 0; if (Perl_hmq_refcnt <= 0) - Perl_croak_nocontext("No message queue"); + Perl_croak_nocontext("No message queue"); while ((*PMWIN_entries.PeekMsg)(Perl_hab, &msg, NULLHANDLE, 0, 0, PM_REMOVE)) { - cnt++; - if (msg.msg == WM_QUIT) - Perl_croak_nocontext("QUITing..."); - (*PMWIN_entries.DispatchMsg)(Perl_hab, &msg); + cnt++; + if (msg.msg == WM_QUIT) + Perl_croak_nocontext("QUITing..."); + (*PMWIN_entries.DispatchMsg)(Perl_hab, &msg); } return cnt; } @@ -2542,17 +2541,17 @@ Perl_Process_Messages(int force, I32 *cntp) QMSG msg; if (Perl_hmq_servers > 0 && !force) - return 0; + return 0; if (Perl_hmq_refcnt <= 0) - Perl_croak_nocontext("No message queue"); + Perl_croak_nocontext("No message queue"); while ((*PMWIN_entries.GetMsg)(Perl_hab, &msg, NULLHANDLE, 0, 0)) { - if (cntp) - (*cntp)++; - (*PMWIN_entries.DispatchMsg)(Perl_hab, &msg); - if (msg.msg == WM_DESTROY) - return -1; - if (msg.msg == WM_CREATE) - return +1; + if (cntp) + (*cntp)++; + (*PMWIN_entries.DispatchMsg)(Perl_hab, &msg); + if (msg.msg == WM_DESTROY) + return -1; + if (msg.msg == WM_CREATE) + return +1; } Perl_croak_nocontext("QUITing..."); } @@ -2561,34 +2560,34 @@ void Perl_Deregister_MQ(int serve) { if (serve & REGISTERMQ_WILL_SERVE) - Perl_hmq_servers--; + Perl_hmq_servers--; if (--Perl_hmq_refcnt <= 0) { - unsigned fpflag = _control87(0,0); + unsigned fpflag = _control87(0,0); - init_PMWIN_entries(); /* To be extra safe */ - (*PMWIN_entries.DestroyMsgQueue)(Perl_hmq); - Perl_hmq = 0; - /* We may have (un)loaded some modules */ - _control87(fpflag, MCW_EM); /* Some modules reset FP flags on (un)load */ + init_PMWIN_entries(); /* To be extra safe */ + (*PMWIN_entries.DestroyMsgQueue)(Perl_hmq); + Perl_hmq = 0; + /* We may have (un)loaded some modules */ + _control87(fpflag, MCW_EM); /* Some modules reset FP flags on (un)load */ } else if ((serve & REGISTERMQ_WILL_SERVE) && Perl_hmq_servers <= 0) - (*PMWIN_entries.CancelShutdown)(Perl_hmq, 1); /* Last server exited */ + (*PMWIN_entries.CancelShutdown)(Perl_hmq, 1); /* Last server exited */ if (!(serve & REGISTERMQ_IMEDIATE_UNMORPH) && (--Perl_morph_refcnt <= 0)) { - /* Try morphing back from a PM application. */ - PPIB pib; - PTIB tib; - - DosGetInfoBlocks(&tib, &pib); - if (pib->pib_ultype == 3) /* 3 is PM */ - pib->pib_ultype = Perl_os2_initial_mode; - else - Perl_warn_nocontext("Unexpected program mode %d when morphing back from PM", - pib->pib_ultype); + /* Try morphing back from a PM application. */ + PPIB pib; + PTIB tib; + + DosGetInfoBlocks(&tib, &pib); + if (pib->pib_ultype == 3) /* 3 is PM */ + pib->pib_ultype = Perl_os2_initial_mode; + else + Perl_warn_nocontext("Unexpected program mode %d when morphing back from PM", + pib->pib_ultype); } } #define sys_is_absolute(path) ( isALPHA((path)[0]) && (path)[1] == ':' \ - && ((path)[2] == '/' || (path)[2] == '\\')) + && ((path)[2] == '/' || (path)[2] == '\\')) #define sys_is_rooted _fnisabs #define sys_is_relative _fnisrel #define current_drive _getdrive @@ -2601,21 +2600,21 @@ XS(XS_OS2_Error) { dXSARGS; if (items != 2) - Perl_croak_nocontext("Usage: OS2::Error(harderr, exception)"); + Perl_croak_nocontext("Usage: OS2::Error(harderr, exception)"); { - int arg1 = SvIV(ST(0)); - int arg2 = SvIV(ST(1)); - int a = ((arg1 ? FERR_ENABLEHARDERR : FERR_DISABLEHARDERR) - | (arg2 ? FERR_ENABLEEXCEPTION : FERR_DISABLEEXCEPTION)); - int RETVAL = ((arg1 ? 1 : 0) | (arg2 ? 2 : 0)); - unsigned long rc; - - if (CheckOSError(DosError(a))) - Perl_croak_nocontext("DosError(%d) failed: %s", a, os2error(Perl_rc)); - ST(0) = sv_newmortal(); - if (DOS_harderr_state >= 0) - sv_setiv(ST(0), DOS_harderr_state); - DOS_harderr_state = RETVAL; + int arg1 = SvIV(ST(0)); + int arg2 = SvIV(ST(1)); + int a = ((arg1 ? FERR_ENABLEHARDERR : FERR_DISABLEHARDERR) + | (arg2 ? FERR_ENABLEEXCEPTION : FERR_DISABLEEXCEPTION)); + int RETVAL = ((arg1 ? 1 : 0) | (arg2 ? 2 : 0)); + unsigned long rc; + + if (CheckOSError(DosError(a))) + Perl_croak_nocontext("DosError(%d) failed: %s", a, os2error(Perl_rc)); + ST(0) = sv_newmortal(); + if (DOS_harderr_state >= 0) + sv_setiv(ST(0), DOS_harderr_state); + DOS_harderr_state = RETVAL; } XSRETURN(1); } @@ -2624,29 +2623,29 @@ XS(XS_OS2_Errors2Drive) { dXSARGS; if (items != 1) - Perl_croak_nocontext("Usage: OS2::Errors2Drive(drive)"); + Perl_croak_nocontext("Usage: OS2::Errors2Drive(drive)"); { - STRLEN n_a; - SV *sv = ST(0); - int suppress = SvOK(sv); - char *s = suppress ? SvPV(sv, n_a) : NULL; - char drive = (s ? *s : 0); - unsigned long rc; - - if (suppress && !isALPHA(drive)) - Perl_croak_nocontext("Non-char argument '%c' to OS2::Errors2Drive()", drive); - if (CheckOSError(DosSuppressPopUps((suppress - ? SPU_ENABLESUPPRESSION - : SPU_DISABLESUPPRESSION), - drive))) - Perl_croak_nocontext("DosSuppressPopUps(%c) failed: %s", drive, - os2error(Perl_rc)); - ST(0) = sv_newmortal(); - if (DOS_suppression_state > 0) - sv_setpvn(ST(0), &DOS_suppression_state, 1); - else if (DOS_suppression_state == 0) + STRLEN n_a; + SV *sv = ST(0); + int suppress = SvOK(sv); + char *s = suppress ? SvPV(sv, n_a) : NULL; + char drive = (s ? *s : 0); + unsigned long rc; + + if (suppress && !isALPHA(drive)) + Perl_croak_nocontext("Non-char argument '%c' to OS2::Errors2Drive()", drive); + if (CheckOSError(DosSuppressPopUps((suppress + ? SPU_ENABLESUPPRESSION + : SPU_DISABLESUPPRESSION), + drive))) + Perl_croak_nocontext("DosSuppressPopUps(%c) failed: %s", drive, + os2error(Perl_rc)); + ST(0) = sv_newmortal(); + if (DOS_suppression_state > 0) + sv_setpvn(ST(0), &DOS_suppression_state, 1); + else if (DOS_suppression_state == 0) SvPVCLEAR(ST(0)); - DOS_suppression_state = drive; + DOS_suppression_state = drive; } XSRETURN(1); } @@ -2669,49 +2668,49 @@ async_mssleep(ULONG ms, int switch_priority) { return !_sleep2(ms); os2cp_croak(DosCreateEventSem(NULL, /* Unnamed */ - &hevEvent1, /* Handle of semaphore returned */ - DC_SEM_SHARED, /* Shared needed for DosAsyncTimer */ - FALSE), /* Semaphore is in RESET state */ - "DosCreateEventSem"); + &hevEvent1, /* Handle of semaphore returned */ + DC_SEM_SHARED, /* Shared needed for DosAsyncTimer */ + FALSE), /* Semaphore is in RESET state */ + "DosCreateEventSem"); if (ms >= switch_priority) switch_priority = 0; if (switch_priority) { if (CheckOSError(DosGetInfoBlocks(&tib, &pib))) - switch_priority = 0; + switch_priority = 0; else { - /* In Warp3, to switch scheduling to 8ms step, one needs to do - DosAsyncTimer() in time-critical thread. On laters versions, - more and more cases of wait-for-something are covered. - - It turns out that on Warp3fp42 it is the priority at the time - of DosAsyncTimer() which matters. Let's hope that this works - with later versions too... XXXX - */ - priority = (tib->tib_ptib2->tib2_ulpri); - if ((priority & 0xFF00) == 0x0300) /* already time-critical */ - switch_priority = 0; - /* Make us time-critical. Just modifying TIB is not enough... */ - /* tib->tib_ptib2->tib2_ulpri = 0x0300;*/ - /* We do not want to run at high priority if a signal causes us - to longjmp() out of this section... */ - if (DosEnterMustComplete(&nesting)) - switch_priority = 0; - else - DosSetPriority(PRTYS_THREAD, PRTYC_TIMECRITICAL, 0, 0); + /* In Warp3, to switch scheduling to 8ms step, one needs to do + DosAsyncTimer() in time-critical thread. On laters versions, + more and more cases of wait-for-something are covered. + + It turns out that on Warp3fp42 it is the priority at the time + of DosAsyncTimer() which matters. Let's hope that this works + with later versions too... XXXX + */ + priority = (tib->tib_ptib2->tib2_ulpri); + if ((priority & 0xFF00) == 0x0300) /* already time-critical */ + switch_priority = 0; + /* Make us time-critical. Just modifying TIB is not enough... */ + /* tib->tib_ptib2->tib2_ulpri = 0x0300;*/ + /* We do not want to run at high priority if a signal causes us + to longjmp() out of this section... */ + if (DosEnterMustComplete(&nesting)) + switch_priority = 0; + else + DosSetPriority(PRTYS_THREAD, PRTYC_TIMECRITICAL, 0, 0); } } if ((badrc = DosAsyncTimer(ms, - (HSEM) hevEvent1, /* Semaphore to post */ - &htimerEvent1))) /* Timer handler (returned) */ + (HSEM) hevEvent1, /* Semaphore to post */ + &htimerEvent1))) /* Timer handler (returned) */ e = "DosAsyncTimer"; if (switch_priority && tib->tib_ptib2->tib2_ulpri == 0x0300) { - /* Nobody switched priority while we slept... Ignore errors... */ - /* tib->tib_ptib2->tib2_ulpri = priority; */ /* Get back... */ - if (!(rc = DosSetPriority(PRTYS_THREAD, (priority>>8) & 0xFF, 0, 0))) - rc = DosSetPriority(PRTYS_THREAD, 0, priority & 0xFF, 0); + /* Nobody switched priority while we slept... Ignore errors... */ + /* tib->tib_ptib2->tib2_ulpri = priority; */ /* Get back... */ + if (!(rc = DosSetPriority(PRTYS_THREAD, (priority>>8) & 0xFF, 0, 0))) + rc = DosSetPriority(PRTYS_THREAD, 0, priority & 0xFF, 0); } if (switch_priority) rc = DosExitMustComplete(&nesting); /* Ignore errors */ @@ -2743,7 +2742,7 @@ XS(XS_OS2_ms_sleep) /* for testing only... */ ULONG ms, lim; if (items > 2 || items < 1) - Perl_croak_nocontext("Usage: OS2::ms_sleep(wait_ms [, high_priority_limit])"); + Perl_croak_nocontext("Usage: OS2::ms_sleep(wait_ms [, high_priority_limit])"); ms = SvUV(ST(0)); lim = items > 1 ? SvUV(ST(1)) : ms + 1; async_mssleep(ms, lim); @@ -2761,22 +2760,22 @@ XS(XS_OS2_Timer) ULONG rc; if (items != 0) - Perl_croak_nocontext("Usage: OS2::Timer()"); + Perl_croak_nocontext("Usage: OS2::Timer()"); if (!freq) { - *(PFN*)&pDosTmrQueryFreq = loadByOrdinal(ORD_DosTmrQueryFreq, 0); - *(PFN*)&pDosTmrQueryTime = loadByOrdinal(ORD_DosTmrQueryTime, 0); - MUTEX_LOCK(&perlos2_state_mutex); - if (!freq) - if (CheckOSError(pDosTmrQueryFreq(&freq))) - croak_with_os2error("DosTmrQueryFreq"); - MUTEX_UNLOCK(&perlos2_state_mutex); + *(PFN*)&pDosTmrQueryFreq = loadByOrdinal(ORD_DosTmrQueryFreq, 0); + *(PFN*)&pDosTmrQueryTime = loadByOrdinal(ORD_DosTmrQueryTime, 0); + MUTEX_LOCK(&perlos2_state_mutex); + if (!freq) + if (CheckOSError(pDosTmrQueryFreq(&freq))) + croak_with_os2error("DosTmrQueryFreq"); + MUTEX_UNLOCK(&perlos2_state_mutex); } if (CheckOSError(pDosTmrQueryTime(&count))) - croak_with_os2error("DosTmrQueryTime"); + croak_with_os2error("DosTmrQueryTime"); { - dXSTARG; + dXSTARG; - XSprePUSH; PUSHn(((NV)count)/freq); + XSprePUSH; PUSHn(((NV)count)/freq); } XSRETURN(1); } @@ -2786,11 +2785,11 @@ XS(XS_OS2_msCounter) dXSARGS; if (items != 0) - Perl_croak_nocontext("Usage: OS2::msCounter()"); + Perl_croak_nocontext("Usage: OS2::msCounter()"); { - dXSTARG; + dXSTARG; - XSprePUSH; PUSHu(msCounter()); + XSprePUSH; PUSHu(msCounter()); } XSRETURN(1); } @@ -2801,13 +2800,13 @@ XS(XS_OS2__InfoTable) int is_local = 0; if (items > 1) - Perl_croak_nocontext("Usage: OS2::_infoTable([isLocal])"); + Perl_croak_nocontext("Usage: OS2::_infoTable([isLocal])"); if (items == 1) - is_local = (int)SvIV(ST(0)); + is_local = (int)SvIV(ST(0)); { - dXSTARG; + dXSTARG; - XSprePUSH; PUSHu(InfoTable(is_local)); + XSprePUSH; PUSHu(InfoTable(is_local)); } XSRETURN(1); } @@ -2872,76 +2871,76 @@ XS(XS_OS2_DevCap) { dXSARGS; if (items > 2) - Perl_croak_nocontext("Usage: OS2::DevCap()"); + Perl_croak_nocontext("Usage: OS2::DevCap()"); { - /* Device Capabilities Data Buffer (10 extra w.r.t. Warp 4.5) */ - LONG si[CAPS_DEVICE_POLYSET_POINTS - CAPS_FAMILY + 1]; - int i = 0, j = 0, how = DevCap_dc; - HDC hScreenDC; - DEVOPENSTRUC doStruc= {0L, (PSZ)"DISPLAY", NULL, 0L, 0L, 0L, 0L, 0L, 0L}; - ULONG rc1 = NO_ERROR; - HWND hwnd; - static volatile int devcap_loaded; - - if (!devcap_loaded) { - *(PFN*)&pWinOpenWindowDC = loadByOrdinal(ORD_WinOpenWindowDC, 0); - *(PFN*)&pDevOpenDC = loadByOrdinal(ORD_DevOpenDC, 0); - *(PFN*)&pDevCloseDC = loadByOrdinal(ORD_DevCloseDC, 0); - *(PFN*)&pDevQueryCaps = loadByOrdinal(ORD_DevQueryCaps, 0); - devcap_loaded = 1; - } - - if (items >= 2) - how = SvIV(ST(1)); - if (!items) { /* Get device contents from PM */ - hScreenDC = pDevOpenDC(perl_hab_GET(), OD_MEMORY, (PSZ)"*", 0, - (PDEVOPENDATA)&doStruc, NULLHANDLE); - if (CheckWinError(hScreenDC)) - croak_with_os2error("DevOpenDC() failed"); - } else if (how == DevCap_dc) - hScreenDC = (HDC)SvIV(ST(0)); - else { /* DevCap_hwnd */ - if (!Perl_hmq) - Perl_croak(aTHX_ "Getting a window's device context without a message queue would lock PM"); - hwnd = (HWND)SvIV(ST(0)); - hScreenDC = pWinOpenWindowDC(hwnd); /* No need to DevCloseDC() */ - if (CheckWinError(hScreenDC)) - croak_with_os2error("WinOpenWindowDC() failed"); - } - if (CheckWinError(pDevQueryCaps(hScreenDC, - CAPS_FAMILY, /* W3 documented caps */ - CAPS_DEVICE_POLYSET_POINTS - - CAPS_FAMILY + 1, - si))) - rc1 = Perl_rc; - else { - EXTEND(SP,2*(CAPS_DEVICE_POLYSET_POINTS - CAPS_FAMILY + 1)); - while (i < CAPS_DEVICE_POLYSET_POINTS - CAPS_FAMILY + 1) { - ST(j) = sv_newmortal(); - sv_setpv(ST(j++), dc_fields[i]); - ST(j) = sv_newmortal(); - sv_setiv(ST(j++), si[i]); - i++; - } - i = CAPS_DEVICE_POLYSET_POINTS + 1; - while (i < CAPS_DEVICE_POLYSET_POINTS + 11) { /* Just in case... */ - LONG l; - - if (CheckWinError(pDevQueryCaps(hScreenDC, i, 1, &l))) - break; - EXTEND(SP, j + 2); - ST(j) = sv_newmortal(); - sv_setiv(ST(j++), i); - ST(j) = sv_newmortal(); - sv_setiv(ST(j++), l); - i++; - } - } - if (!items && CheckWinError(pDevCloseDC(hScreenDC))) - Perl_warn_nocontext("DevCloseDC() failed: %s", os2error(Perl_rc)); - if (rc1) - Perl_rc = rc1, croak_with_os2error("DevQueryCaps() failed"); - XSRETURN(j); + /* Device Capabilities Data Buffer (10 extra w.r.t. Warp 4.5) */ + LONG si[CAPS_DEVICE_POLYSET_POINTS - CAPS_FAMILY + 1]; + int i = 0, j = 0, how = DevCap_dc; + HDC hScreenDC; + DEVOPENSTRUC doStruc= {0L, (PSZ)"DISPLAY", NULL, 0L, 0L, 0L, 0L, 0L, 0L}; + ULONG rc1 = NO_ERROR; + HWND hwnd; + static volatile int devcap_loaded; + + if (!devcap_loaded) { + *(PFN*)&pWinOpenWindowDC = loadByOrdinal(ORD_WinOpenWindowDC, 0); + *(PFN*)&pDevOpenDC = loadByOrdinal(ORD_DevOpenDC, 0); + *(PFN*)&pDevCloseDC = loadByOrdinal(ORD_DevCloseDC, 0); + *(PFN*)&pDevQueryCaps = loadByOrdinal(ORD_DevQueryCaps, 0); + devcap_loaded = 1; + } + + if (items >= 2) + how = SvIV(ST(1)); + if (!items) { /* Get device contents from PM */ + hScreenDC = pDevOpenDC(perl_hab_GET(), OD_MEMORY, (PSZ)"*", 0, + (PDEVOPENDATA)&doStruc, NULLHANDLE); + if (CheckWinError(hScreenDC)) + croak_with_os2error("DevOpenDC() failed"); + } else if (how == DevCap_dc) + hScreenDC = (HDC)SvIV(ST(0)); + else { /* DevCap_hwnd */ + if (!Perl_hmq) + Perl_croak(aTHX_ "Getting a window's device context without a message queue would lock PM"); + hwnd = (HWND)SvIV(ST(0)); + hScreenDC = pWinOpenWindowDC(hwnd); /* No need to DevCloseDC() */ + if (CheckWinError(hScreenDC)) + croak_with_os2error("WinOpenWindowDC() failed"); + } + if (CheckWinError(pDevQueryCaps(hScreenDC, + CAPS_FAMILY, /* W3 documented caps */ + CAPS_DEVICE_POLYSET_POINTS + - CAPS_FAMILY + 1, + si))) + rc1 = Perl_rc; + else { + EXTEND(SP,2*(CAPS_DEVICE_POLYSET_POINTS - CAPS_FAMILY + 1)); + while (i < CAPS_DEVICE_POLYSET_POINTS - CAPS_FAMILY + 1) { + ST(j) = sv_newmortal(); + sv_setpv(ST(j++), dc_fields[i]); + ST(j) = sv_newmortal(); + sv_setiv(ST(j++), si[i]); + i++; + } + i = CAPS_DEVICE_POLYSET_POINTS + 1; + while (i < CAPS_DEVICE_POLYSET_POINTS + 11) { /* Just in case... */ + LONG l; + + if (CheckWinError(pDevQueryCaps(hScreenDC, i, 1, &l))) + break; + EXTEND(SP, j + 2); + ST(j) = sv_newmortal(); + sv_setiv(ST(j++), i); + ST(j) = sv_newmortal(); + sv_setiv(ST(j++), l); + i++; + } + } + if (!items && CheckWinError(pDevCloseDC(hScreenDC))) + Perl_warn_nocontext("DevCloseDC() failed: %s", os2error(Perl_rc)); + if (rc1) + Perl_rc = rc1, croak_with_os2error("DevQueryCaps() failed"); + XSRETURN(j); } } @@ -3058,64 +3057,64 @@ const char * const sv_keys[] = { "106", "107", /* "CSYSVALUES",*/ - /* In recent DDK the limit is 108 */ + /* In recent DDK the limit is 108 */ }; XS(XS_OS2_SysValues) { dXSARGS; if (items > 2) - Perl_croak_nocontext("Usage: OS2::SysValues(which = -1, hwndDesktop = HWND_DESKTOP)"); + Perl_croak_nocontext("Usage: OS2::SysValues(which = -1, hwndDesktop = HWND_DESKTOP)"); { - int i = 0, j = 0, which = -1; - HWND hwnd = HWND_DESKTOP; - static volatile int sv_loaded; - LONG RETVAL; - - if (!sv_loaded) { - *(PFN*)&pWinQuerySysValue = loadByOrdinal(ORD_WinQuerySysValue, 0); - sv_loaded = 1; - } - - if (items == 2) - hwnd = (HWND)SvIV(ST(1)); - if (items >= 1) - which = (int)SvIV(ST(0)); - if (which == -1) { - EXTEND(SP,2*C_ARRAY_LENGTH(sv_keys)); - while (i < C_ARRAY_LENGTH(sv_keys)) { - ResetWinError(); - RETVAL = pWinQuerySysValue(hwnd, i); - if ( !RETVAL - && !(sv_keys[i][0] >= '0' && sv_keys[i][0] <= '9' - && i <= SV_PRINTSCREEN) ) { - FillWinError; - if (Perl_rc) { - if (i > SV_PRINTSCREEN) - break; /* May be not present on older systems */ - croak_with_os2error("SysValues():"); - } - - } - ST(j) = sv_newmortal(); - sv_setpv(ST(j++), sv_keys[i]); - ST(j) = sv_newmortal(); - sv_setiv(ST(j++), RETVAL); - i++; - } - XSRETURN(2 * i); - } else { - dXSTARG; - - ResetWinError(); - RETVAL = pWinQuerySysValue(hwnd, which); - if (!RETVAL) { - FillWinError; - if (Perl_rc) - croak_with_os2error("SysValues():"); - } - XSprePUSH; PUSHi((IV)RETVAL); - } + int i = 0, j = 0, which = -1; + HWND hwnd = HWND_DESKTOP; + static volatile int sv_loaded; + LONG RETVAL; + + if (!sv_loaded) { + *(PFN*)&pWinQuerySysValue = loadByOrdinal(ORD_WinQuerySysValue, 0); + sv_loaded = 1; + } + + if (items == 2) + hwnd = (HWND)SvIV(ST(1)); + if (items >= 1) + which = (int)SvIV(ST(0)); + if (which == -1) { + EXTEND(SP,2*C_ARRAY_LENGTH(sv_keys)); + while (i < C_ARRAY_LENGTH(sv_keys)) { + ResetWinError(); + RETVAL = pWinQuerySysValue(hwnd, i); + if ( !RETVAL + && !(sv_keys[i][0] >= '0' && sv_keys[i][0] <= '9' + && i <= SV_PRINTSCREEN) ) { + FillWinError; + if (Perl_rc) { + if (i > SV_PRINTSCREEN) + break; /* May be not present on older systems */ + croak_with_os2error("SysValues():"); + } + + } + ST(j) = sv_newmortal(); + sv_setpv(ST(j++), sv_keys[i]); + ST(j) = sv_newmortal(); + sv_setiv(ST(j++), RETVAL); + i++; + } + XSRETURN(2 * i); + } else { + dXSTARG; + + ResetWinError(); + RETVAL = pWinQuerySysValue(hwnd, which); + if (!RETVAL) { + FillWinError; + if (Perl_rc) + croak_with_os2error("SysValues():"); + } + XSprePUSH; PUSHi((IV)RETVAL); + } } } @@ -3123,22 +3122,22 @@ XS(XS_OS2_SysValues_set) { dXSARGS; if (items < 2 || items > 3) - Perl_croak_nocontext("Usage: OS2::SysValues_set(which, val, hwndDesktop = HWND_DESKTOP)"); + Perl_croak_nocontext("Usage: OS2::SysValues_set(which, val, hwndDesktop = HWND_DESKTOP)"); { - int which = (int)SvIV(ST(0)); - LONG val = (LONG)SvIV(ST(1)); - HWND hwnd = HWND_DESKTOP; - static volatile int svs_loaded; - - if (!svs_loaded) { - *(PFN*)&pWinSetSysValue = loadByOrdinal(ORD_WinSetSysValue, 0); - svs_loaded = 1; - } - - if (items == 3) - hwnd = (HWND)SvIV(ST(2)); - if (CheckWinError(pWinSetSysValue(hwnd, which, val))) - croak_with_os2error("SysValues_set()"); + int which = (int)SvIV(ST(0)); + LONG val = (LONG)SvIV(ST(1)); + HWND hwnd = HWND_DESKTOP; + static volatile int svs_loaded; + + if (!svs_loaded) { + *(PFN*)&pWinSetSysValue = loadByOrdinal(ORD_WinSetSysValue, 0); + svs_loaded = 1; + } + + if (items == 3) + hwnd = (HWND)SvIV(ST(2)); + if (CheckWinError(pWinSetSysValue(hwnd, which, val))) + croak_with_os2error("SysValues_set()"); } XSRETURN_YES; } @@ -3183,40 +3182,40 @@ XS(XS_OS2_SysInfo) { dXSARGS; if (items != 0) - Perl_croak_nocontext("Usage: OS2::SysInfo()"); + Perl_croak_nocontext("Usage: OS2::SysInfo()"); { - /* System Information Data Buffer (10 extra w.r.t. Warp 4.5) */ - ULONG si[C_ARRAY_LENGTH(si_fields) + 10]; - APIRET rc = NO_ERROR; /* Return code */ - int i = 0, j = 0, last = QSV_MAX_WARP3; - - if (CheckOSError(DosQuerySysInfo(1L, /* Request documented system */ - last, /* info for Warp 3 */ - (PVOID)si, - sizeof(si)))) - croak_with_os2error("DosQuerySysInfo() failed"); - while (++last <= C_ARRAY_LENGTH(si)) { - if (CheckOSError(DosQuerySysInfo(last, last, /* One entry only */ - (PVOID)(si+last-1), - sizeof(*si)))) { - if (Perl_rc != ERROR_INVALID_PARAMETER) - croak_with_os2error("DosQuerySysInfo() failed"); - break; - } - } - last--; /* Count of successfully processed offsets */ - EXTEND(SP,2*last); - while (i < last) { - ST(j) = sv_newmortal(); - if (i < C_ARRAY_LENGTH(si_fields)) - sv_setpv(ST(j++), si_fields[i]); - else - sv_setiv(ST(j++), i + 1); - ST(j) = sv_newmortal(); - sv_setuv(ST(j++), si[i]); - i++; - } - XSRETURN(2 * last); + /* System Information Data Buffer (10 extra w.r.t. Warp 4.5) */ + ULONG si[C_ARRAY_LENGTH(si_fields) + 10]; + APIRET rc = NO_ERROR; /* Return code */ + int i = 0, j = 0, last = QSV_MAX_WARP3; + + if (CheckOSError(DosQuerySysInfo(1L, /* Request documented system */ + last, /* info for Warp 3 */ + (PVOID)si, + sizeof(si)))) + croak_with_os2error("DosQuerySysInfo() failed"); + while (++last <= C_ARRAY_LENGTH(si)) { + if (CheckOSError(DosQuerySysInfo(last, last, /* One entry only */ + (PVOID)(si+last-1), + sizeof(*si)))) { + if (Perl_rc != ERROR_INVALID_PARAMETER) + croak_with_os2error("DosQuerySysInfo() failed"); + break; + } + } + last--; /* Count of successfully processed offsets */ + EXTEND(SP,2*last); + while (i < last) { + ST(j) = sv_newmortal(); + if (i < C_ARRAY_LENGTH(si_fields)) + sv_setpv(ST(j++), si_fields[i]); + else + sv_setiv(ST(j++), i + 1); + ST(j) = sv_newmortal(); + sv_setuv(ST(j++), si[i]); + i++; + } + XSRETURN(2 * last); } } @@ -3226,27 +3225,27 @@ XS(XS_OS2_SysInfoFor) int count = (items == 2 ? (int)SvIV(ST(1)) : 1); if (items < 1 || items > 2) - Perl_croak_nocontext("Usage: OS2::SysInfoFor(id[,count])"); + Perl_croak_nocontext("Usage: OS2::SysInfoFor(id[,count])"); { - /* System Information Data Buffer (10 extra w.r.t. Warp 4.5) */ - ULONG si[C_ARRAY_LENGTH(si_fields) + 10]; - APIRET rc = NO_ERROR; /* Return code */ - int i = 0; - int start = (int)SvIV(ST(0)); - - if (count > C_ARRAY_LENGTH(si) || count <= 0) - Perl_croak(aTHX_ "unexpected count %d for OS2::SysInfoFor()", count); - if (CheckOSError(DosQuerySysInfo(start, - start + count - 1, - (PVOID)si, - sizeof(si)))) - croak_with_os2error("DosQuerySysInfo() failed"); - EXTEND(SP,count); - while (i < count) { - ST(i) = sv_newmortal(); - sv_setiv(ST(i), si[i]); - i++; - } + /* System Information Data Buffer (10 extra w.r.t. Warp 4.5) */ + ULONG si[C_ARRAY_LENGTH(si_fields) + 10]; + APIRET rc = NO_ERROR; /* Return code */ + int i = 0; + int start = (int)SvIV(ST(0)); + + if (count > C_ARRAY_LENGTH(si) || count <= 0) + Perl_croak(aTHX_ "unexpected count %d for OS2::SysInfoFor()", count); + if (CheckOSError(DosQuerySysInfo(start, + start + count - 1, + (PVOID)si, + sizeof(si)))) + croak_with_os2error("DosQuerySysInfo() failed"); + EXTEND(SP,count); + while (i < count) { + ST(i) = sv_newmortal(); + sv_setiv(ST(i), si[i]); + i++; + } } XSRETURN(count); } @@ -3255,19 +3254,19 @@ XS(XS_OS2_BootDrive) { dXSARGS; if (items != 0) - Perl_croak_nocontext("Usage: OS2::BootDrive()"); + Perl_croak_nocontext("Usage: OS2::BootDrive()"); { - ULONG si[1] = {0}; /* System Information Data Buffer */ - APIRET rc = NO_ERROR; /* Return code */ - char c; - dXSTARG; - - if (CheckOSError(DosQuerySysInfo(QSV_BOOT_DRIVE, QSV_BOOT_DRIVE, - (PVOID)si, sizeof(si)))) - croak_with_os2error("DosQuerySysInfo() failed"); - c = 'a' - 1 + si[0]; - sv_setpvn(TARG, &c, 1); - XSprePUSH; PUSHTARG; + ULONG si[1] = {0}; /* System Information Data Buffer */ + APIRET rc = NO_ERROR; /* Return code */ + char c; + dXSTARG; + + if (CheckOSError(DosQuerySysInfo(QSV_BOOT_DRIVE, QSV_BOOT_DRIVE, + (PVOID)si, sizeof(si)))) + croak_with_os2error("DosQuerySysInfo() failed"); + c = 'a' - 1 + si[0]; + sv_setpvn(TARG, &c, 1); + XSprePUSH; PUSHTARG; } XSRETURN(1); } @@ -3276,14 +3275,14 @@ XS(XS_OS2_Beep) { dXSARGS; if (items > 2) /* Defaults as for WinAlarm(ERROR) */ - Perl_croak_nocontext("Usage: OS2::Beep(freq = 440, ms = 100)"); + Perl_croak_nocontext("Usage: OS2::Beep(freq = 440, ms = 100)"); { - ULONG freq = (items > 0 ? (ULONG)SvUV(ST(0)) : 440); - ULONG ms = (items > 1 ? (ULONG)SvUV(ST(1)) : 100); - ULONG rc; + ULONG freq = (items > 0 ? (ULONG)SvUV(ST(0)) : 440); + ULONG ms = (items > 1 ? (ULONG)SvUV(ST(1)) : 100); + ULONG rc; - if (CheckOSError(DosBeep(freq, ms))) - croak_with_os2error("SysValues_set()"); + if (CheckOSError(DosBeep(freq, ms))) + croak_with_os2error("SysValues_set()"); } XSRETURN_YES; } @@ -3294,13 +3293,13 @@ XS(XS_OS2_MorphPM) { dXSARGS; if (items != 1) - Perl_croak_nocontext("Usage: OS2::MorphPM(serve)"); + Perl_croak_nocontext("Usage: OS2::MorphPM(serve)"); { - bool serve = SvOK(ST(0)); - unsigned long pmq = perl_hmq_GET(serve); - dXSTARG; + bool serve = SvOK(ST(0)); + unsigned long pmq = perl_hmq_GET(serve); + dXSTARG; - XSprePUSH; PUSHi((IV)pmq); + XSprePUSH; PUSHi((IV)pmq); } XSRETURN(1); } @@ -3309,11 +3308,11 @@ XS(XS_OS2_UnMorphPM) { dXSARGS; if (items != 1) - Perl_croak_nocontext("Usage: OS2::UnMorphPM(serve)"); + Perl_croak_nocontext("Usage: OS2::UnMorphPM(serve)"); { - bool serve = SvOK(ST(0)); + bool serve = SvOK(ST(0)); - perl_hmq_UNSET(serve); + perl_hmq_UNSET(serve); } XSRETURN(0); } @@ -3322,13 +3321,13 @@ XS(XS_OS2_Serve_Messages) { dXSARGS; if (items != 1) - Perl_croak_nocontext("Usage: OS2::Serve_Messages(force)"); + Perl_croak_nocontext("Usage: OS2::Serve_Messages(force)"); { - bool force = SvOK(ST(0)); - unsigned long cnt = Perl_Serve_Messages(force); - dXSTARG; + bool force = SvOK(ST(0)); + unsigned long cnt = Perl_Serve_Messages(force); + dXSTARG; - XSprePUSH; PUSHi((IV)cnt); + XSprePUSH; PUSHi((IV)cnt); } XSRETURN(1); } @@ -3337,26 +3336,26 @@ XS(XS_OS2_Process_Messages) { dXSARGS; if (items < 1 || items > 2) - Perl_croak_nocontext("Usage: OS2::Process_Messages(force [, cnt])"); + Perl_croak_nocontext("Usage: OS2::Process_Messages(force [, cnt])"); { - bool force = SvOK(ST(0)); - unsigned long cnt; - dXSTARG; - - if (items == 2) { - I32 cntr; - SV *sv = ST(1); - - (void)SvIV(sv); /* Force SvIVX */ - if (!SvIOK(sv)) - Perl_croak_nocontext("Can't upgrade count to IV"); - cntr = SvIVX(sv); - cnt = Perl_Process_Messages(force, &cntr); - SvIVX(sv) = cntr; - } else { - cnt = Perl_Process_Messages(force, NULL); + bool force = SvOK(ST(0)); + unsigned long cnt; + dXSTARG; + + if (items == 2) { + I32 cntr; + SV *sv = ST(1); + + (void)SvIV(sv); /* Force SvIVX */ + if (!SvIOK(sv)) + Perl_croak_nocontext("Can't upgrade count to IV"); + cntr = SvIVX(sv); + cnt = Perl_Process_Messages(force, &cntr); + SvIVX(sv) = cntr; + } else { + cnt = Perl_Process_Messages(force, NULL); } - XSprePUSH; PUSHi((IV)cnt); + XSprePUSH; PUSHi((IV)cnt); } XSRETURN(1); } @@ -3365,14 +3364,14 @@ XS(XS_Cwd_current_drive) { dXSARGS; if (items != 0) - Perl_croak_nocontext("Usage: Cwd::current_drive()"); + Perl_croak_nocontext("Usage: Cwd::current_drive()"); { - char RETVAL; - dXSTARG; + char RETVAL; + dXSTARG; - RETVAL = current_drive(); - sv_setpvn(TARG, (char *)&RETVAL, 1); - XSprePUSH; PUSHTARG; + RETVAL = current_drive(); + sv_setpvn(TARG, (char *)&RETVAL, 1); + XSprePUSH; PUSHTARG; } XSRETURN(1); } @@ -3381,15 +3380,15 @@ XS(XS_Cwd_sys_chdir) { dXSARGS; if (items != 1) - Perl_croak_nocontext("Usage: Cwd::sys_chdir(path)"); + Perl_croak_nocontext("Usage: Cwd::sys_chdir(path)"); { - STRLEN n_a; - char * path = (char *)SvPV(ST(0),n_a); - bool RETVAL; + STRLEN n_a; + char * path = (char *)SvPV(ST(0),n_a); + bool RETVAL; - RETVAL = sys_chdir(path); - ST(0) = boolSV(RETVAL); - if (SvREFCNT(ST(0))) sv_2mortal(ST(0)); + RETVAL = sys_chdir(path); + ST(0) = boolSV(RETVAL); + if (SvREFCNT(ST(0))) sv_2mortal(ST(0)); } XSRETURN(1); } @@ -3398,15 +3397,15 @@ XS(XS_Cwd_change_drive) { dXSARGS; if (items != 1) - Perl_croak_nocontext("Usage: Cwd::change_drive(d)"); + Perl_croak_nocontext("Usage: Cwd::change_drive(d)"); { - STRLEN n_a; - char d = (char)*SvPV(ST(0),n_a); - bool RETVAL; + STRLEN n_a; + char d = (char)*SvPV(ST(0),n_a); + bool RETVAL; - RETVAL = change_drive(d); - ST(0) = boolSV(RETVAL); - if (SvREFCNT(ST(0))) sv_2mortal(ST(0)); + RETVAL = change_drive(d); + ST(0) = boolSV(RETVAL); + if (SvREFCNT(ST(0))) sv_2mortal(ST(0)); } XSRETURN(1); } @@ -3415,15 +3414,15 @@ XS(XS_Cwd_sys_is_absolute) { dXSARGS; if (items != 1) - Perl_croak_nocontext("Usage: Cwd::sys_is_absolute(path)"); + Perl_croak_nocontext("Usage: Cwd::sys_is_absolute(path)"); { - STRLEN n_a; - char * path = (char *)SvPV(ST(0),n_a); - bool RETVAL; + STRLEN n_a; + char * path = (char *)SvPV(ST(0),n_a); + bool RETVAL; - RETVAL = sys_is_absolute(path); - ST(0) = boolSV(RETVAL); - if (SvREFCNT(ST(0))) sv_2mortal(ST(0)); + RETVAL = sys_is_absolute(path); + ST(0) = boolSV(RETVAL); + if (SvREFCNT(ST(0))) sv_2mortal(ST(0)); } XSRETURN(1); } @@ -3432,15 +3431,15 @@ XS(XS_Cwd_sys_is_rooted) { dXSARGS; if (items != 1) - Perl_croak_nocontext("Usage: Cwd::sys_is_rooted(path)"); + Perl_croak_nocontext("Usage: Cwd::sys_is_rooted(path)"); { - STRLEN n_a; - char * path = (char *)SvPV(ST(0),n_a); - bool RETVAL; + STRLEN n_a; + char * path = (char *)SvPV(ST(0),n_a); + bool RETVAL; - RETVAL = sys_is_rooted(path); - ST(0) = boolSV(RETVAL); - if (SvREFCNT(ST(0))) sv_2mortal(ST(0)); + RETVAL = sys_is_rooted(path); + ST(0) = boolSV(RETVAL); + if (SvREFCNT(ST(0))) sv_2mortal(ST(0)); } XSRETURN(1); } @@ -3449,15 +3448,15 @@ XS(XS_Cwd_sys_is_relative) { dXSARGS; if (items != 1) - Perl_croak_nocontext("Usage: Cwd::sys_is_relative(path)"); + Perl_croak_nocontext("Usage: Cwd::sys_is_relative(path)"); { - STRLEN n_a; - char * path = (char *)SvPV(ST(0),n_a); - bool RETVAL; + STRLEN n_a; + char * path = (char *)SvPV(ST(0),n_a); + bool RETVAL; - RETVAL = sys_is_relative(path); - ST(0) = boolSV(RETVAL); - if (SvREFCNT(ST(0))) sv_2mortal(ST(0)); + RETVAL = sys_is_relative(path); + ST(0) = boolSV(RETVAL); + if (SvREFCNT(ST(0))) sv_2mortal(ST(0)); } XSRETURN(1); } @@ -3466,16 +3465,16 @@ XS(XS_Cwd_sys_cwd) { dXSARGS; if (items != 0) - Perl_croak_nocontext("Usage: Cwd::sys_cwd()"); + Perl_croak_nocontext("Usage: Cwd::sys_cwd()"); { - char p[MAXPATHLEN]; - char * RETVAL; - - /* Can't use TARG, since tainting behaves differently */ - RETVAL = _getcwd2(p, MAXPATHLEN); - ST(0) = sv_newmortal(); - sv_setpv(ST(0), RETVAL); - SvTAINTED_on(ST(0)); + char p[MAXPATHLEN]; + char * RETVAL; + + /* Can't use TARG, since tainting behaves differently */ + RETVAL = _getcwd2(p, MAXPATHLEN); + ST(0) = sv_newmortal(); + sv_setpv(ST(0), RETVAL); + SvTAINTED_on(ST(0)); } XSRETURN(1); } @@ -3484,131 +3483,131 @@ XS(XS_Cwd_sys_abspath) { dXSARGS; if (items > 2) - Perl_croak_nocontext("Usage: Cwd::sys_abspath(path = '.', dir = NULL)"); + Perl_croak_nocontext("Usage: Cwd::sys_abspath(path = '.', dir = NULL)"); { - STRLEN n_a; - char * path = items ? (char *)SvPV(ST(0),n_a) : "."; - char * dir, *s, *t, *e; - char p[MAXPATHLEN]; - char * RETVAL; - int l; - SV *sv; - - if (items < 2) - dir = NULL; - else { - dir = (char *)SvPV(ST(1),n_a); - } - if (path[0] == '.' && (path[1] == '/' || path[1] == '\\')) { - path += 2; - } - if (dir == NULL) { - if (_abspath(p, path, MAXPATHLEN) == 0) { - RETVAL = p; - } else { - RETVAL = NULL; - } - } else { - /* Absolute with drive: */ - if ( sys_is_absolute(path) ) { - if (_abspath(p, path, MAXPATHLEN) == 0) { - RETVAL = p; - } else { - RETVAL = NULL; - } - } else if (path[0] == '/' || path[0] == '\\') { - /* Rooted, but maybe on different drive. */ - if (isALPHA(dir[0]) && dir[1] == ':' ) { - char p1[MAXPATHLEN]; - - /* Need to prepend the drive. */ - p1[0] = dir[0]; - p1[1] = dir[1]; - Copy(path, p1 + 2, strlen(path) + 1, char); - RETVAL = p; - if (_abspath(p, p1, MAXPATHLEN) == 0) { - RETVAL = p; - } else { - RETVAL = NULL; - } - } else if (_abspath(p, path, MAXPATHLEN) == 0) { - RETVAL = p; - } else { - RETVAL = NULL; - } - } else { - /* Either path is relative, or starts with a drive letter. */ - /* If the path starts with a drive letter, then dir is - relevant only if - a/b) it is absolute/x:relative on the same drive. - c) path is on current drive, and dir is rooted - In all the cases it is safe to drop the drive part - of the path. */ - if ( !sys_is_relative(path) ) { - if ( ( ( sys_is_absolute(dir) - || (isALPHA(dir[0]) && dir[1] == ':' - && strnicmp(dir, path,1) == 0)) - && strnicmp(dir, path,1) == 0) - || ( !(isALPHA(dir[0]) && dir[1] == ':') - && toupper(path[0]) == current_drive())) { - path += 2; - } else if (_abspath(p, path, MAXPATHLEN) == 0) { - RETVAL = p; goto done; - } else { - RETVAL = NULL; goto done; - } - } - { - /* Need to prepend the absolute path of dir. */ - char p1[MAXPATHLEN]; - - if (_abspath(p1, dir, MAXPATHLEN) == 0) { - int l = strlen(p1); - - if (p1[ l - 1 ] != '/') { - p1[ l ] = '/'; - l++; - } - Copy(path, p1 + l, strlen(path) + 1, char); - if (_abspath(p, p1, MAXPATHLEN) == 0) { - RETVAL = p; - } else { - RETVAL = NULL; - } - } else { - RETVAL = NULL; - } - } - done: - } - } - if (!RETVAL) - XSRETURN_EMPTY; - /* Backslashes are already converted to slashes. */ - /* Remove trailing slashes */ - l = strlen(RETVAL); - while (l > 0 && RETVAL[l-1] == '/') - l--; - ST(0) = sv_newmortal(); - sv_setpvn( sv = (SV*)ST(0), RETVAL, l); - /* Remove duplicate slashes, skipping the first three, which - may be parts of a server-based path */ - s = t = 3 + SvPV_force(sv, n_a); - e = SvEND(sv); - /* Do not worry about multibyte chars here, this would contradict the - eventual UTFization, and currently most other places break too... */ - while (s < e) { - if (s[0] == t[-1] && s[0] == '/') - s++; /* Skip duplicate / */ - else - *t++ = *s++; - } - if (t < e) { - *t = 0; - SvCUR_set(sv, t - SvPVX(sv)); - } - if (!items) - SvTAINTED_on(ST(0)); + STRLEN n_a; + char * path = items ? (char *)SvPV(ST(0),n_a) : "."; + char * dir, *s, *t, *e; + char p[MAXPATHLEN]; + char * RETVAL; + int l; + SV *sv; + + if (items < 2) + dir = NULL; + else { + dir = (char *)SvPV(ST(1),n_a); + } + if (path[0] == '.' && (path[1] == '/' || path[1] == '\\')) { + path += 2; + } + if (dir == NULL) { + if (_abspath(p, path, MAXPATHLEN) == 0) { + RETVAL = p; + } else { + RETVAL = NULL; + } + } else { + /* Absolute with drive: */ + if ( sys_is_absolute(path) ) { + if (_abspath(p, path, MAXPATHLEN) == 0) { + RETVAL = p; + } else { + RETVAL = NULL; + } + } else if (path[0] == '/' || path[0] == '\\') { + /* Rooted, but maybe on different drive. */ + if (isALPHA(dir[0]) && dir[1] == ':' ) { + char p1[MAXPATHLEN]; + + /* Need to prepend the drive. */ + p1[0] = dir[0]; + p1[1] = dir[1]; + Copy(path, p1 + 2, strlen(path) + 1, char); + RETVAL = p; + if (_abspath(p, p1, MAXPATHLEN) == 0) { + RETVAL = p; + } else { + RETVAL = NULL; + } + } else if (_abspath(p, path, MAXPATHLEN) == 0) { + RETVAL = p; + } else { + RETVAL = NULL; + } + } else { + /* Either path is relative, or starts with a drive letter. */ + /* If the path starts with a drive letter, then dir is + relevant only if + a/b) it is absolute/x:relative on the same drive. + c) path is on current drive, and dir is rooted + In all the cases it is safe to drop the drive part + of the path. */ + if ( !sys_is_relative(path) ) { + if ( ( ( sys_is_absolute(dir) + || (isALPHA(dir[0]) && dir[1] == ':' + && strnicmp(dir, path,1) == 0)) + && strnicmp(dir, path,1) == 0) + || ( !(isALPHA(dir[0]) && dir[1] == ':') + && toupper(path[0]) == current_drive())) { + path += 2; + } else if (_abspath(p, path, MAXPATHLEN) == 0) { + RETVAL = p; goto done; + } else { + RETVAL = NULL; goto done; + } + } + { + /* Need to prepend the absolute path of dir. */ + char p1[MAXPATHLEN]; + + if (_abspath(p1, dir, MAXPATHLEN) == 0) { + int l = strlen(p1); + + if (p1[ l - 1 ] != '/') { + p1[ l ] = '/'; + l++; + } + Copy(path, p1 + l, strlen(path) + 1, char); + if (_abspath(p, p1, MAXPATHLEN) == 0) { + RETVAL = p; + } else { + RETVAL = NULL; + } + } else { + RETVAL = NULL; + } + } + done: + } + } + if (!RETVAL) + XSRETURN_EMPTY; + /* Backslashes are already converted to slashes. */ + /* Remove trailing slashes */ + l = strlen(RETVAL); + while (l > 0 && RETVAL[l-1] == '/') + l--; + ST(0) = sv_newmortal(); + sv_setpvn( sv = (SV*)ST(0), RETVAL, l); + /* Remove duplicate slashes, skipping the first three, which + may be parts of a server-based path */ + s = t = 3 + SvPV_force(sv, n_a); + e = SvEND(sv); + /* Do not worry about multibyte chars here, this would contradict the + eventual UTFization, and currently most other places break too... */ + while (s < e) { + if (s[0] == t[-1] && s[0] == '/') + s++; /* Skip duplicate / */ + else + *t++ = *s++; + } + if (t < e) { + *t = 0; + SvCUR_set(sv, t - SvPVX(sv)); + } + if (!items) + SvTAINTED_on(ST(0)); } XSRETURN(1); } @@ -3626,13 +3625,13 @@ ExtLIBPATH(ULONG ord, PSZ path, IV type, int fatal) PFN f = loadByOrdinal(ord, fatal); /* if fatal: load or die! */ if (!f) /* Impossible with fatal */ - return Perl_rc; + return Perl_rc; if (type > 0) - what = END_LIBPATH; + what = END_LIBPATH; else if (type == 0) - what = BEGIN_LIBPATH; + what = BEGIN_LIBPATH; else - what = LIBPATHSTRICT; + what = LIBPATHSTRICT; return (*(PELP)f)(path, what); } @@ -3657,31 +3656,31 @@ XS(XS_Cwd_extLibpath) { dXSARGS; if (items < 0 || items > 1) - Perl_croak_nocontext("Usage: OS2::extLibpath(type = 0)"); + Perl_croak_nocontext("Usage: OS2::extLibpath(type = 0)"); { - IV type; - char to[1024]; - U32 rc; - char * RETVAL; - dXSTARG; - STRLEN l; - - if (items < 1) - type = 0; - else { - type = SvIV(ST(0)); - } - - to[0] = 1; to[1] = 0; /* Sometimes no error reported */ - RETVAL = extLibpath(to, type, 1); /* Make errors fatal */ - if (RETVAL && RETVAL[0] == 1 && RETVAL[1] == 0) - Perl_croak_nocontext("panic OS2::extLibpath parameter"); - l = strlen(to); - if (l >= sizeof(to)) - early_error("Buffer overflow while getting BEGIN/ENDLIBPATH: `", - to, "'\r\n"); /* Will not return */ - sv_setpv(TARG, RETVAL); - XSprePUSH; PUSHTARG; + IV type; + char to[1024]; + U32 rc; + char * RETVAL; + dXSTARG; + STRLEN l; + + if (items < 1) + type = 0; + else { + type = SvIV(ST(0)); + } + + to[0] = 1; to[1] = 0; /* Sometimes no error reported */ + RETVAL = extLibpath(to, type, 1); /* Make errors fatal */ + if (RETVAL && RETVAL[0] == 1 && RETVAL[1] == 0) + Perl_croak_nocontext("panic OS2::extLibpath parameter"); + l = strlen(to); + if (l >= sizeof(to)) + early_error("Buffer overflow while getting BEGIN/ENDLIBPATH: `", + to, "'\r\n"); /* Will not return */ + sv_setpv(TARG, RETVAL); + XSprePUSH; PUSHTARG; } XSRETURN(1); } @@ -3690,23 +3689,23 @@ XS(XS_Cwd_extLibpath_set) { dXSARGS; if (items < 1 || items > 2) - Perl_croak_nocontext("Usage: OS2::extLibpath_set(s, type = 0)"); + Perl_croak_nocontext("Usage: OS2::extLibpath_set(s, type = 0)"); { - STRLEN n_a; - char * s = (char *)SvPV(ST(0),n_a); - IV type; - U32 rc; - bool RETVAL; - - if (items < 2) - type = 0; - else { - type = SvIV(ST(1)); - } - - RETVAL = extLibpath_set(s, type, 1); /* Make errors fatal */ - ST(0) = boolSV(RETVAL); - if (SvREFCNT(ST(0))) sv_2mortal(ST(0)); + STRLEN n_a; + char * s = (char *)SvPV(ST(0),n_a); + IV type; + U32 rc; + bool RETVAL; + + if (items < 2) + type = 0; + else { + type = SvIV(ST(1)); + } + + RETVAL = extLibpath_set(s, type, 1); /* Make errors fatal */ + ST(0) = boolSV(RETVAL); + if (SvREFCNT(ST(0))) sv_2mortal(ST(0)); } XSRETURN(1); } @@ -3719,53 +3718,53 @@ fill_extLibpath(int type, char *pre, char *post, int replace, char *msg) ULONG rc; if (!pre && !post) - return 0; + return 0; if (pre) { - pre = dir_subst(pre, strlen(pre), buf1, sizeof buf1, dir_subst_pathlike, msg); - if (!pre) - return ERROR_INVALID_PARAMETER; - l = strlen(pre); - if (l >= sizeof(buf)/2) - return ERROR_BUFFER_OVERFLOW; - s = pre - 1; - while (*++s) - if (*s == '/') - *s = '\\'; /* Be extra cautious */ - memcpy(to, pre, l); - if (!l || to[l-1] != ';') - to[l++] = ';'; - to += l; + pre = dir_subst(pre, strlen(pre), buf1, sizeof buf1, dir_subst_pathlike, msg); + if (!pre) + return ERROR_INVALID_PARAMETER; + l = strlen(pre); + if (l >= sizeof(buf)/2) + return ERROR_BUFFER_OVERFLOW; + s = pre - 1; + while (*++s) + if (*s == '/') + *s = '\\'; /* Be extra cautious */ + memcpy(to, pre, l); + if (!l || to[l-1] != ';') + to[l++] = ';'; + to += l; } if (!replace) { to[0] = 1; to[1] = 0; /* Sometimes no error reported */ rc = ExtLIBPATH(ORD_DosQueryExtLibpath, to, type, 0); /* Do not croak */ if (rc) - return rc; + return rc; if (to[0] == 1 && to[1] == 0) - return ERROR_INVALID_PARAMETER; + return ERROR_INVALID_PARAMETER; to += strlen(to); if (buf + sizeof(buf) - 1 <= to) /* Buffer overflow */ - early_error("Buffer overflow while getting BEGIN/ENDLIBPATH: `", - buf, "'\r\n"); /* Will not return */ + early_error("Buffer overflow while getting BEGIN/ENDLIBPATH: `", + buf, "'\r\n"); /* Will not return */ if (to > buf && to[-1] != ';') - *to++ = ';'; + *to++ = ';'; } if (post) { - post = dir_subst(post, strlen(post), buf1, sizeof buf1, dir_subst_pathlike, msg); - if (!post) - return ERROR_INVALID_PARAMETER; - l = strlen(post); - if (l + to - buf >= sizeof(buf) - 1) - return ERROR_BUFFER_OVERFLOW; - s = post - 1; - while (*++s) - if (*s == '/') - *s = '\\'; /* Be extra cautious */ - memcpy(to, post, l); - if (!l || to[l-1] != ';') - to[l++] = ';'; - to += l; + post = dir_subst(post, strlen(post), buf1, sizeof buf1, dir_subst_pathlike, msg); + if (!post) + return ERROR_INVALID_PARAMETER; + l = strlen(post); + if (l + to - buf >= sizeof(buf) - 1) + return ERROR_BUFFER_OVERFLOW; + s = post - 1; + while (*++s) + if (*s == '/') + *s = '\\'; /* Be extra cautious */ + memcpy(to, post, l); + if (!l || to[l-1] != ';') + to[l++] = ';'; + to += l; } *to = 0; rc = ExtLIBPATH(ORD_DosSetExtLibpath, buf, type, 0); /* Do not croak */ @@ -3775,13 +3774,13 @@ fill_extLibpath(int type, char *pre, char *post, int replace, char *msg) /* Input: Address, BufLen APIRET APIENTRY DosQueryModFromEIP (HMODULE * hmod, ULONG * obj, ULONG BufLen, PCHAR Buf, - ULONG * Offset, ULONG Address); + ULONG * Offset, ULONG Address); */ DeclOSFuncByORD(APIRET, _DosQueryModFromEIP,ORD_DosQueryModFromEIP, - (HMODULE * hmod, ULONG * obj, ULONG BufLen, PCHAR Buf, - ULONG * Offset, ULONG Address), - (hmod, obj, BufLen, Buf, Offset, Address)) + (HMODULE * hmod, ULONG * obj, ULONG BufLen, PCHAR Buf, + ULONG * Offset, ULONG Address), + (hmod, obj, BufLen, Buf, Offset, Address)) static SV* module_name_at(void *pp, enum module_name_how how) @@ -3793,22 +3792,22 @@ module_name_at(void *pp, enum module_name_how how) ULONG obj, offset, rc, addr = (ULONG)pp; if (how & mod_name_HMODULE) { - if ((how & ~mod_name_HMODULE) == mod_name_shortname) - Perl_croak(aTHX_ "Can't get short module name from a handle"); - mod = (HMODULE)pp; - how &= ~mod_name_HMODULE; + if ((how & ~mod_name_HMODULE) == mod_name_shortname) + Perl_croak(aTHX_ "Can't get short module name from a handle"); + mod = (HMODULE)pp; + how &= ~mod_name_HMODULE; } else if (!_DosQueryModFromEIP(&mod, &obj, sizeof(buf), buf, &offset, addr)) - return &PL_sv_undef; + return &PL_sv_undef; if (how == mod_name_handle) - return newSVuv(mod); + return newSVuv(mod); /* Full name... */ if ( how != mod_name_shortname - && CheckOSError(DosQueryModuleName(mod, sizeof(buf), buf)) ) - return &PL_sv_undef; + && CheckOSError(DosQueryModuleName(mod, sizeof(buf), buf)) ) + return &PL_sv_undef; while (*p) { - if (*p == '\\') - *p = '/'; - p++; + if (*p == '\\') + *p = '/'; + p++; } return newSVpv(buf, 0); } @@ -3817,13 +3816,13 @@ static SV* module_name_of_cv(SV *cv, enum module_name_how how) { if (!cv || !SvROK(cv) || SvTYPE(SvRV(cv)) != SVt_PVCV || !CvXSUB(SvRV(cv))) { - dTHX; + dTHX; - if (how & mod_name_C_function) - return module_name_at((void*)SvIV(cv), how & ~mod_name_C_function); - else if (how & mod_name_HMODULE) - return module_name_at((void*)SvIV(cv), how); - Perl_croak(aTHX_ "Not an XSUB reference"); + if (how & mod_name_C_function) + return module_name_at((void*)SvIV(cv), how & ~mod_name_C_function); + else if (how & mod_name_HMODULE) + return module_name_at((void*)SvIV(cv), how); + Perl_croak(aTHX_ "Not an XSUB reference"); } return module_name_at(CvXSUB(SvRV(cv)), how); } @@ -3832,52 +3831,52 @@ XS(XS_OS2_DLLname) { dXSARGS; if (items > 2) - Perl_croak(aTHX_ "Usage: OS2::DLLname( [ how, [\\&xsub] ] )"); + Perl_croak(aTHX_ "Usage: OS2::DLLname( [ how, [\\&xsub] ] )"); { - SV * RETVAL; - int how; - - if (items < 1) - how = mod_name_full; - else { - how = (int)SvIV(ST(0)); - } - if (items < 2) - RETVAL = module_name(how); - else - RETVAL = module_name_of_cv(ST(1), how); - ST(0) = RETVAL; - sv_2mortal(ST(0)); + SV * RETVAL; + int how; + + if (items < 1) + how = mod_name_full; + else { + how = (int)SvIV(ST(0)); + } + if (items < 2) + RETVAL = module_name(how); + else + RETVAL = module_name_of_cv(ST(1), how); + ST(0) = RETVAL; + sv_2mortal(ST(0)); } XSRETURN(1); } DeclOSFuncByORD(INT, _Dos32QueryHeaderInfo, ORD_Dos32QueryHeaderInfo, - (ULONG r1, ULONG r2, PVOID buf, ULONG szbuf, ULONG fnum), - (r1, r2, buf, szbuf, fnum)) + (ULONG r1, ULONG r2, PVOID buf, ULONG szbuf, ULONG fnum), + (r1, r2, buf, szbuf, fnum)) XS(XS_OS2__headerInfo) { dXSARGS; if (items > 4 || items < 2) - Perl_croak(aTHX_ "Usage: OS2::_headerInfo(req,size[,handle,[offset]])"); + Perl_croak(aTHX_ "Usage: OS2::_headerInfo(req,size[,handle,[offset]])"); { - ULONG req = (ULONG)SvIV(ST(0)); - STRLEN size = (STRLEN)SvIV(ST(1)), n_a; - ULONG handle = (items >= 3 ? (ULONG)SvIV(ST(2)) : 0); - ULONG offset = (items >= 4 ? (ULONG)SvIV(ST(3)) : 0); - - if (size <= 0) - Perl_croak(aTHX_ "OS2::_headerInfo(): unexpected size: %d", (int)size); - ST(0) = newSVpvs(""); - SvGROW(ST(0), size + 1); - sv_2mortal(ST(0)); - - if (!_Dos32QueryHeaderInfo(handle, offset, SvPV(ST(0), n_a), size, req)) - Perl_croak(aTHX_ "OS2::_headerInfo(%ld,%ld,%ld,%ld) error: %s", - req, size, handle, offset, os2error(Perl_rc)); - SvCUR_set(ST(0), size); - *SvEND(ST(0)) = 0; + ULONG req = (ULONG)SvIV(ST(0)); + STRLEN size = (STRLEN)SvIV(ST(1)), n_a; + ULONG handle = (items >= 3 ? (ULONG)SvIV(ST(2)) : 0); + ULONG offset = (items >= 4 ? (ULONG)SvIV(ST(3)) : 0); + + if (size <= 0) + Perl_croak(aTHX_ "OS2::_headerInfo(): unexpected size: %d", (int)size); + ST(0) = newSVpvs(""); + SvGROW(ST(0), size + 1); + sv_2mortal(ST(0)); + + if (!_Dos32QueryHeaderInfo(handle, offset, SvPV(ST(0), n_a), size, req)) + Perl_croak(aTHX_ "OS2::_headerInfo(%ld,%ld,%ld,%ld) error: %s", + req, size, handle, offset, os2error(Perl_rc)); + SvCUR_set(ST(0), size); + *SvEND(ST(0)) = 0; } XSRETURN(1); } @@ -3889,29 +3888,29 @@ XS(XS_OS2_libPath) { dXSARGS; if (items != 0) - Perl_croak(aTHX_ "Usage: OS2::libPath()"); + Perl_croak(aTHX_ "Usage: OS2::libPath()"); { - ULONG size; - STRLEN n_a; - - if (!_Dos32QueryHeaderInfo(0, 0, &size, sizeof(size), - DQHI_QUERYLIBPATHSIZE)) - Perl_croak(aTHX_ "OS2::_headerInfo(%ld,%ld,%ld,%ld) error: %s", - DQHI_QUERYLIBPATHSIZE, sizeof(size), 0, 0, - os2error(Perl_rc)); - ST(0) = newSVpvs(""); - SvGROW(ST(0), size + 1); - sv_2mortal(ST(0)); - - /* We should be careful: apparently, this entry point does not - pay attention to the size argument, so may overwrite - unrelated data! */ - if (!_Dos32QueryHeaderInfo(0, 0, SvPV(ST(0), n_a), size, - DQHI_QUERYLIBPATH)) - Perl_croak(aTHX_ "OS2::_headerInfo(%ld,%ld,%ld,%ld) error: %s", - DQHI_QUERYLIBPATH, size, 0, 0, os2error(Perl_rc)); - SvCUR_set(ST(0), size); - *SvEND(ST(0)) = 0; + ULONG size; + STRLEN n_a; + + if (!_Dos32QueryHeaderInfo(0, 0, &size, sizeof(size), + DQHI_QUERYLIBPATHSIZE)) + Perl_croak(aTHX_ "OS2::_headerInfo(%ld,%ld,%ld,%ld) error: %s", + DQHI_QUERYLIBPATHSIZE, sizeof(size), 0, 0, + os2error(Perl_rc)); + ST(0) = newSVpvs(""); + SvGROW(ST(0), size + 1); + sv_2mortal(ST(0)); + + /* We should be careful: apparently, this entry point does not + pay attention to the size argument, so may overwrite + unrelated data! */ + if (!_Dos32QueryHeaderInfo(0, 0, SvPV(ST(0), n_a), size, + DQHI_QUERYLIBPATH)) + Perl_croak(aTHX_ "OS2::_headerInfo(%ld,%ld,%ld,%ld) error: %s", + DQHI_QUERYLIBPATH, size, 0, 0, os2error(Perl_rc)); + SvCUR_set(ST(0), size); + *SvEND(ST(0)) = 0; } XSRETURN(1); } @@ -3923,15 +3922,15 @@ XS(XS_OS2__control87) { dXSARGS; if (items != 2) - Perl_croak(aTHX_ "Usage: OS2::_control87(new,mask)"); + Perl_croak(aTHX_ "Usage: OS2::_control87(new,mask)"); { - unsigned new = (unsigned)SvIV(ST(0)); - unsigned mask = (unsigned)SvIV(ST(1)); - unsigned RETVAL; - dXSTARG; + unsigned new = (unsigned)SvIV(ST(0)); + unsigned mask = (unsigned)SvIV(ST(1)); + unsigned RETVAL; + dXSTARG; - RETVAL = _control87(new, mask); - XSprePUSH; PUSHi((IV)RETVAL); + RETVAL = _control87(new, mask); + XSprePUSH; PUSHi((IV)RETVAL); } XSRETURN(1); } @@ -3942,30 +3941,30 @@ XS(XS_OS2_mytype) int which = 0; if (items < 0 || items > 1) - Perl_croak(aTHX_ "Usage: OS2::mytype([which])"); + Perl_croak(aTHX_ "Usage: OS2::mytype([which])"); if (items == 1) - which = (int)SvIV(ST(0)); + which = (int)SvIV(ST(0)); { - unsigned RETVAL; - dXSTARG; - - switch (which) { - case 0: - RETVAL = os2_mytype; /* Reset after fork */ - break; - case 1: - RETVAL = os2_mytype_ini; /* Before any fork */ - break; - case 2: - RETVAL = Perl_os2_initial_mode; /* Before first morphing */ - break; - case 3: - RETVAL = my_type(); /* Morphed type */ - break; - default: - Perl_croak(aTHX_ "OS2::mytype(which): unknown which=%d", which); - } - XSprePUSH; PUSHi((IV)RETVAL); + unsigned RETVAL; + dXSTARG; + + switch (which) { + case 0: + RETVAL = os2_mytype; /* Reset after fork */ + break; + case 1: + RETVAL = os2_mytype_ini; /* Before any fork */ + break; + case 2: + RETVAL = Perl_os2_initial_mode; /* Before first morphing */ + break; + case 3: + RETVAL = my_type(); /* Morphed type */ + break; + default: + Perl_croak(aTHX_ "OS2::mytype(which): unknown which=%d", which); + } + XSprePUSH; PUSHi((IV)RETVAL); } XSRETURN(1); } @@ -3977,9 +3976,9 @@ XS(XS_OS2_mytype_set) int type; if (items == 1) - type = (int)SvIV(ST(0)); + type = (int)SvIV(ST(0)); else - Perl_croak(aTHX_ "Usage: OS2::mytype_set(type)"); + Perl_croak(aTHX_ "Usage: OS2::mytype_set(type)"); my_type_set(type); XSRETURN_YES; } @@ -3989,13 +3988,13 @@ XS(XS_OS2_get_control87) { dXSARGS; if (items != 0) - Perl_croak(aTHX_ "Usage: OS2::get_control87()"); + Perl_croak(aTHX_ "Usage: OS2::get_control87()"); { - unsigned RETVAL; - dXSTARG; + unsigned RETVAL; + dXSTARG; - RETVAL = get_control87(); - XSprePUSH; PUSHi((IV)RETVAL); + RETVAL = get_control87(); + XSprePUSH; PUSHi((IV)RETVAL); } XSRETURN(1); } @@ -4005,27 +4004,27 @@ XS(XS_OS2_set_control87) { dXSARGS; if (items < 0 || items > 2) - Perl_croak(aTHX_ "Usage: OS2::set_control87(new=MCW_EM, mask=MCW_EM)"); + Perl_croak(aTHX_ "Usage: OS2::set_control87(new=MCW_EM, mask=MCW_EM)"); { - unsigned new; - unsigned mask; - unsigned RETVAL; - dXSTARG; - - if (items < 1) - new = MCW_EM; - else { - new = (unsigned)SvIV(ST(0)); - } - - if (items < 2) - mask = MCW_EM; - else { - mask = (unsigned)SvIV(ST(1)); - } - - RETVAL = set_control87(new, mask); - XSprePUSH; PUSHi((IV)RETVAL); + unsigned new; + unsigned mask; + unsigned RETVAL; + dXSTARG; + + if (items < 1) + new = MCW_EM; + else { + new = (unsigned)SvIV(ST(0)); + } + + if (items < 2) + mask = MCW_EM; + else { + mask = (unsigned)SvIV(ST(1)); + } + + RETVAL = set_control87(new, mask); + XSprePUSH; PUSHi((IV)RETVAL); } XSRETURN(1); } @@ -4034,20 +4033,20 @@ XS(XS_OS2_incrMaxFHandles) /* DosSetRelMaxFH */ { dXSARGS; if (items < 0 || items > 1) - Perl_croak(aTHX_ "Usage: OS2::incrMaxFHandles(delta = 0)"); + Perl_croak(aTHX_ "Usage: OS2::incrMaxFHandles(delta = 0)"); { - LONG delta; - ULONG RETVAL, rc; - dXSTARG; - - if (items < 1) - delta = 0; - else - delta = (LONG)SvIV(ST(0)); - - if (CheckOSError(DosSetRelMaxFH(&delta, &RETVAL))) - croak_with_os2error("OS2::incrMaxFHandles(): DosSetRelMaxFH() error"); - XSprePUSH; PUSHu((UV)RETVAL); + LONG delta; + ULONG RETVAL, rc; + dXSTARG; + + if (items < 1) + delta = 0; + else + delta = (LONG)SvIV(ST(0)); + + if (CheckOSError(DosSetRelMaxFH(&delta, &RETVAL))) + croak_with_os2error("OS2::incrMaxFHandles(): DosSetRelMaxFH() error"); + XSprePUSH; PUSHu((UV)RETVAL); } XSRETURN(1); } @@ -4062,24 +4061,24 @@ connectNPipe(ULONG hpipe, int wait, ULONG restore, ULONG oflags) ULONG ret = ERROR_INTERRUPT, rc, flags; if (restore && wait) - os2cp_croak(DosQueryNPHState(hpipe, &oflags), "DosQueryNPHState()"); + os2cp_croak(DosQueryNPHState(hpipe, &oflags), "DosQueryNPHState()"); /* DosSetNPHState fails if more bits than NP_NOWAIT|NP_READMODE_MESSAGE */ oflags &= (NP_NOWAIT | NP_READMODE_MESSAGE); flags = (oflags & ~NP_NOWAIT) | (wait > 0 ? NP_WAIT : NP_NOWAIT); /* We know (o)flags unless wait == 0 && restore */ if (wait && (flags != oflags)) - os2cp_croak(DosSetNPHState(hpipe, flags), "DosSetNPHState()"); + os2cp_croak(DosSetNPHState(hpipe, flags), "DosSetNPHState()"); while (ret == ERROR_INTERRUPT) - ret = DosConnectNPipe(hpipe); + ret = DosConnectNPipe(hpipe); (void)CheckOSError(ret); if (restore && wait && (flags != oflags)) - os2cp_croak(DosSetNPHState(hpipe, oflags), "DosSetNPHState() back"); + os2cp_croak(DosSetNPHState(hpipe, oflags), "DosSetNPHState() back"); /* We know flags unless wait == 0 && restore */ if ( ((wait || restore) ? (flags & NP_NOWAIT) : 1) - && (ret == ERROR_PIPE_NOT_CONNECTED) ) - return 0; /* normal return value */ + && (ret == ERROR_PIPE_NOT_CONNECTED) ) + return 0; /* normal return value */ if (ret == NO_ERROR) - return 1; + return 1; croak_with_os2error("DosConnectNPipe()"); } @@ -4087,196 +4086,196 @@ connectNPipe(ULONG hpipe, int wait, ULONG restore, ULONG oflags) NO_OUTPUT ULONG DosCreateNPipe(PCSZ pszName, OUTLIST HPIPE hpipe, ULONG ulOpenMode, int connect = 1, int count = 1, ULONG ulInbufLength = 8192, ULONG ulOutbufLength = ulInbufLength, ULONG ulPipeMode = count | NP_NOWAIT | NP_TYPE_BYTE | NP_READMODE_BYTE, ULONG ulTimeout = 0) PREINIT: - ULONG rc; + ULONG rc; C_ARGS: - pszName, &hpipe, ulOpenMode, ulPipeMode, ulInbufLength, ulOutbufLength, ulTimeout + pszName, &hpipe, ulOpenMode, ulPipeMode, ulInbufLength, ulOutbufLength, ulTimeout POSTCALL: - if (CheckOSError(RETVAL)) - croak_with_os2error("OS2::mkpipe() error"); + if (CheckOSError(RETVAL)) + croak_with_os2error("OS2::mkpipe() error"); */ XS(XS_OS2_pipe); /* prototype to pass -Wmissing-prototypes */ XS(XS_OS2_pipe) { dXSARGS; if (items < 2 || items > 8) - Perl_croak(aTHX_ "Usage: OS2::pipe(pszName, ulOpenMode, connect= 1, count= 1, ulInbufLength= 8192, ulOutbufLength= ulInbufLength, ulPipeMode= count | NP_NOWAIT | NP_TYPE_BYTE | NP_READMODE_BYTE, ulTimeout= 0)"); + Perl_croak(aTHX_ "Usage: OS2::pipe(pszName, ulOpenMode, connect= 1, count= 1, ulInbufLength= 8192, ulOutbufLength= ulInbufLength, ulPipeMode= count | NP_NOWAIT | NP_TYPE_BYTE | NP_READMODE_BYTE, ulTimeout= 0)"); { - ULONG RETVAL; - PCSZ pszName = ( SvOK(ST(0)) ? (PCSZ)SvPV_nolen(ST(0)) : NULL ); - HPIPE hpipe; - SV *OpenMode = ST(1); - ULONG ulOpenMode; - int connect = 0, count, message_r = 0, message = 0, b = 0; - ULONG ulInbufLength, ulOutbufLength, ulPipeMode, ulTimeout, rc; - STRLEN len; - char *s, buf[10], *s1, *perltype = NULL; - PerlIO *perlio; - double timeout; - - if (!pszName || !*pszName) - Perl_croak(aTHX_ "OS2::pipe(): empty pipe name"); - s = SvPV(OpenMode, len); - if (memEQs(s, len, "wait")) { /* DosWaitNPipe() */ - ULONG ms = 0xFFFFFFFF, ret = ERROR_INTERRUPT; /* Indefinite */ - - if (items == 3) { - timeout = (double)SvNV(ST(2)); - ms = timeout * 1000; - if (timeout < 0) - ms = 0xFFFFFFFF; /* Indefinite */ - else if (timeout && !ms) - ms = 1; - } else if (items > 3) - Perl_croak(aTHX_ "OS2::pipe(): too many arguments for wait-for-connect: %ld", (long)items); - - while (ret == ERROR_INTERRUPT) - ret = DosWaitNPipe(pszName, ms); /* XXXX Update ms? */ - os2cp_croak(ret, "DosWaitNPipe()"); - XSRETURN_YES; - } - if (memEQs(s, len, "call")) { /* DosCallNPipe() */ - ULONG ms = 0xFFFFFFFF, got; /* Indefinite */ - STRLEN l; - char *s; - char buf[8192]; - STRLEN ll = sizeof(buf); - char *b = buf; - - if (items < 3 || items > 5) - Perl_croak(aTHX_ "usage: OS2::pipe(pszName, 'call', write [, timeout= 0xFFFFFFFF, buffsize = 8192])"); - s = SvPV(ST(2), l); - if (items >= 4) { - timeout = (double)SvNV(ST(3)); - ms = timeout * 1000; - if (timeout < 0) - ms = 0xFFFFFFFF; /* Indefinite */ - else if (timeout && !ms) - ms = 1; - } - if (items >= 5) { - STRLEN lll = SvUV(ST(4)); - SV *sv = NEWSV(914, lll); - - sv_2mortal(sv); - ll = lll; - b = SvPVX(sv); - } - - os2cp_croak(DosCallNPipe(pszName, s, l, b, ll, &got, ms), - "DosCallNPipe()"); - XSRETURN_PVN(b, got); - } - s1 = buf; - if (len && len <= 3 && !(*s >= '0' && *s <= '9')) { - int r, w, R, W; - - r = strchr(s, 'r') != 0; - w = strchr(s, 'w') != 0; - R = strchr(s, 'R') != 0; - W = strchr(s, 'W') != 0; - b = strchr(s, 'b') != 0; - if (r + w + R + W + b != len || (r && R) || (w && W)) - Perl_croak(aTHX_ "OS2::pipe(): unknown OpenMode argument: `%s'", s); - if ((r || R) && (w || W)) - ulOpenMode = NP_INHERIT | NP_NOWRITEBEHIND | NP_ACCESS_DUPLEX; - else if (r || R) - ulOpenMode = NP_INHERIT | NP_NOWRITEBEHIND | NP_ACCESS_INBOUND; - else - ulOpenMode = NP_INHERIT | NP_NOWRITEBEHIND | NP_ACCESS_OUTBOUND; - if (R) - message = message_r = 1; - if (W) - message = 1; - else if (w && R) - Perl_croak(aTHX_ "OS2::pipe(): can't have message read mode for non-message pipes"); - } else - ulOpenMode = (ULONG)SvUV(OpenMode); /* ST(1) */ - - if ( (ulOpenMode & 0x3) == NP_ACCESS_DUPLEX - || (ulOpenMode & 0x3) == NP_ACCESS_INBOUND ) - *s1++ = 'r'; - if ( (ulOpenMode & 0x3) == NP_ACCESS_DUPLEX ) - *s1++ = '+'; - if ( (ulOpenMode & 0x3) == NP_ACCESS_OUTBOUND ) - *s1++ = 'w'; - if (b) - *s1++ = 'b'; - *s1 = 0; - if ( (ulOpenMode & 0x3) == NP_ACCESS_DUPLEX ) - perltype = "+<&"; - else if ( (ulOpenMode & 0x3) == NP_ACCESS_OUTBOUND ) - perltype = ">&"; - else - perltype = "<&"; - - if (items < 3) - connect = -1; /* no wait */ - else if (SvTRUE(ST(2))) { - s = SvPV(ST(2), len); - if (memEQs(s, len, "nowait")) - connect = -1; /* no wait */ - else if (memEQs(s, len, "wait")) - connect = 1; /* wait */ - else - Perl_croak(aTHX_ "OS2::pipe(): unknown connect argument: `%s'", s); - } - - if (items < 4) - count = 1; - else - count = (int)SvIV(ST(3)); - - if (items < 5) - ulInbufLength = 8192; - else - ulInbufLength = (ULONG)SvUV(ST(4)); - - if (items < 6) - ulOutbufLength = ulInbufLength; - else - ulOutbufLength = (ULONG)SvUV(ST(5)); - - if (count < -1 || count == 0 || count >= 255) - Perl_croak(aTHX_ "OS2::pipe(): count should be -1 or between 1 and 254: %ld", (long)count); - if (count < 0 ) - count = 255; /* Unlimited */ - - ulPipeMode = count; - if (items < 7) - ulPipeMode |= (NP_WAIT - | (message ? NP_TYPE_MESSAGE : NP_TYPE_BYTE) - | (message_r ? NP_READMODE_MESSAGE : NP_READMODE_BYTE)); - else - ulPipeMode |= (ULONG)SvUV(ST(6)); - - if (items < 8) - timeout = 0; - else - timeout = (double)SvNV(ST(7)); - ulTimeout = timeout * 1000; - if (timeout < 0) - ulTimeout = 0xFFFFFFFF; /* Indefinite */ - else if (timeout && !ulTimeout) - ulTimeout = 1; - - RETVAL = DosCreateNPipe(pszName, &hpipe, ulOpenMode, ulPipeMode, ulInbufLength, ulOutbufLength, ulTimeout); - if (CheckOSError(RETVAL)) - croak_with_os2error("OS2::pipe(): DosCreateNPipe() error"); - - if (connect) - connectNPipe(hpipe, connect, 1, 0); /* XXXX wait, retval */ - hpipe = __imphandle(hpipe); - - perlio = PerlIO_fdopen(hpipe, buf); - ST(0) = sv_newmortal(); - { - GV *gv = (GV *)sv_newmortal(); - gv_init_pvn(gv, gv_stashpvs("OS2::pipe",1),"__ANONIO__",10,0); - if ( do_open6(gv, perltype, strlen(perltype), perlio, NULL, 0) ) - sv_setsv(ST(0), sv_bless(newRV((SV*)gv), gv_stashpv("IO::Handle",1))); - else - ST(0) = &PL_sv_undef; - } + ULONG RETVAL; + PCSZ pszName = ( SvOK(ST(0)) ? (PCSZ)SvPV_nolen(ST(0)) : NULL ); + HPIPE hpipe; + SV *OpenMode = ST(1); + ULONG ulOpenMode; + int connect = 0, count, message_r = 0, message = 0, b = 0; + ULONG ulInbufLength, ulOutbufLength, ulPipeMode, ulTimeout, rc; + STRLEN len; + char *s, buf[10], *s1, *perltype = NULL; + PerlIO *perlio; + double timeout; + + if (!pszName || !*pszName) + Perl_croak(aTHX_ "OS2::pipe(): empty pipe name"); + s = SvPV(OpenMode, len); + if (memEQs(s, len, "wait")) { /* DosWaitNPipe() */ + ULONG ms = 0xFFFFFFFF, ret = ERROR_INTERRUPT; /* Indefinite */ + + if (items == 3) { + timeout = (double)SvNV(ST(2)); + ms = timeout * 1000; + if (timeout < 0) + ms = 0xFFFFFFFF; /* Indefinite */ + else if (timeout && !ms) + ms = 1; + } else if (items > 3) + Perl_croak(aTHX_ "OS2::pipe(): too many arguments for wait-for-connect: %ld", (long)items); + + while (ret == ERROR_INTERRUPT) + ret = DosWaitNPipe(pszName, ms); /* XXXX Update ms? */ + os2cp_croak(ret, "DosWaitNPipe()"); + XSRETURN_YES; + } + if (memEQs(s, len, "call")) { /* DosCallNPipe() */ + ULONG ms = 0xFFFFFFFF, got; /* Indefinite */ + STRLEN l; + char *s; + char buf[8192]; + STRLEN ll = sizeof(buf); + char *b = buf; + + if (items < 3 || items > 5) + Perl_croak(aTHX_ "usage: OS2::pipe(pszName, 'call', write [, timeout= 0xFFFFFFFF, buffsize = 8192])"); + s = SvPV(ST(2), l); + if (items >= 4) { + timeout = (double)SvNV(ST(3)); + ms = timeout * 1000; + if (timeout < 0) + ms = 0xFFFFFFFF; /* Indefinite */ + else if (timeout && !ms) + ms = 1; + } + if (items >= 5) { + STRLEN lll = SvUV(ST(4)); + SV *sv = NEWSV(914, lll); + + sv_2mortal(sv); + ll = lll; + b = SvPVX(sv); + } + + os2cp_croak(DosCallNPipe(pszName, s, l, b, ll, &got, ms), + "DosCallNPipe()"); + XSRETURN_PVN(b, got); + } + s1 = buf; + if (len && len <= 3 && !(*s >= '0' && *s <= '9')) { + int r, w, R, W; + + r = strchr(s, 'r') != 0; + w = strchr(s, 'w') != 0; + R = strchr(s, 'R') != 0; + W = strchr(s, 'W') != 0; + b = strchr(s, 'b') != 0; + if (r + w + R + W + b != len || (r && R) || (w && W)) + Perl_croak(aTHX_ "OS2::pipe(): unknown OpenMode argument: `%s'", s); + if ((r || R) && (w || W)) + ulOpenMode = NP_INHERIT | NP_NOWRITEBEHIND | NP_ACCESS_DUPLEX; + else if (r || R) + ulOpenMode = NP_INHERIT | NP_NOWRITEBEHIND | NP_ACCESS_INBOUND; + else + ulOpenMode = NP_INHERIT | NP_NOWRITEBEHIND | NP_ACCESS_OUTBOUND; + if (R) + message = message_r = 1; + if (W) + message = 1; + else if (w && R) + Perl_croak(aTHX_ "OS2::pipe(): can't have message read mode for non-message pipes"); + } else + ulOpenMode = (ULONG)SvUV(OpenMode); /* ST(1) */ + + if ( (ulOpenMode & 0x3) == NP_ACCESS_DUPLEX + || (ulOpenMode & 0x3) == NP_ACCESS_INBOUND ) + *s1++ = 'r'; + if ( (ulOpenMode & 0x3) == NP_ACCESS_DUPLEX ) + *s1++ = '+'; + if ( (ulOpenMode & 0x3) == NP_ACCESS_OUTBOUND ) + *s1++ = 'w'; + if (b) + *s1++ = 'b'; + *s1 = 0; + if ( (ulOpenMode & 0x3) == NP_ACCESS_DUPLEX ) + perltype = "+<&"; + else if ( (ulOpenMode & 0x3) == NP_ACCESS_OUTBOUND ) + perltype = ">&"; + else + perltype = "<&"; + + if (items < 3) + connect = -1; /* no wait */ + else if (SvTRUE(ST(2))) { + s = SvPV(ST(2), len); + if (memEQs(s, len, "nowait")) + connect = -1; /* no wait */ + else if (memEQs(s, len, "wait")) + connect = 1; /* wait */ + else + Perl_croak(aTHX_ "OS2::pipe(): unknown connect argument: `%s'", s); + } + + if (items < 4) + count = 1; + else + count = (int)SvIV(ST(3)); + + if (items < 5) + ulInbufLength = 8192; + else + ulInbufLength = (ULONG)SvUV(ST(4)); + + if (items < 6) + ulOutbufLength = ulInbufLength; + else + ulOutbufLength = (ULONG)SvUV(ST(5)); + + if (count < -1 || count == 0 || count >= 255) + Perl_croak(aTHX_ "OS2::pipe(): count should be -1 or between 1 and 254: %ld", (long)count); + if (count < 0 ) + count = 255; /* Unlimited */ + + ulPipeMode = count; + if (items < 7) + ulPipeMode |= (NP_WAIT + | (message ? NP_TYPE_MESSAGE : NP_TYPE_BYTE) + | (message_r ? NP_READMODE_MESSAGE : NP_READMODE_BYTE)); + else + ulPipeMode |= (ULONG)SvUV(ST(6)); + + if (items < 8) + timeout = 0; + else + timeout = (double)SvNV(ST(7)); + ulTimeout = timeout * 1000; + if (timeout < 0) + ulTimeout = 0xFFFFFFFF; /* Indefinite */ + else if (timeout && !ulTimeout) + ulTimeout = 1; + + RETVAL = DosCreateNPipe(pszName, &hpipe, ulOpenMode, ulPipeMode, ulInbufLength, ulOutbufLength, ulTimeout); + if (CheckOSError(RETVAL)) + croak_with_os2error("OS2::pipe(): DosCreateNPipe() error"); + + if (connect) + connectNPipe(hpipe, connect, 1, 0); /* XXXX wait, retval */ + hpipe = __imphandle(hpipe); + + perlio = PerlIO_fdopen(hpipe, buf); + ST(0) = sv_newmortal(); + { + GV *gv = (GV *)sv_newmortal(); + gv_init_pvn(gv, gv_stashpvs("OS2::pipe",1),"__ANONIO__",10,0); + if ( do_open6(gv, perltype, strlen(perltype), perlio, NULL, 0) ) + sv_setsv(ST(0), sv_bless(newRV((SV*)gv), gv_stashpv("IO::Handle",1))); + else + ST(0) = &PL_sv_undef; + } } XSRETURN(1); } @@ -4286,155 +4285,155 @@ XS(XS_OS2_pipeCntl) { dXSARGS; if (items < 2 || items > 3) - Perl_croak(aTHX_ "Usage: OS2::pipeCntl(pipe, op [, wait])"); + Perl_croak(aTHX_ "Usage: OS2::pipeCntl(pipe, op [, wait])"); { - ULONG rc; - PerlIO *perlio = IoIFP(sv_2io(ST(0))); - IV fn = PerlIO_fileno(perlio); - HPIPE hpipe = (HPIPE)fn; - STRLEN len; - char *s = SvPV(ST(1), len); - int wait = 0, disconnect = 0, connect = 0, message = -1, query = 0; - int peek = 0, state = 0, info = 0; - - if (fn < 0) - Perl_croak(aTHX_ "OS2::pipeCntl(): not a pipe"); - if (items == 3) - wait = (SvTRUE(ST(2)) ? 1 : -1); - - switch (len) { - case 4: - if (strEQ(s, "byte")) - message = 0; - else if (strEQ(s, "peek")) - peek = 1; - else if (strEQ(s, "info")) - info = 1; - else - goto unknown; - break; - case 5: - if (strEQ(s, "reset")) - disconnect = connect = 1; - else if (strEQ(s, "state")) - query = 1; - else - goto unknown; - break; - case 7: - if (strEQ(s, "connect")) - connect = 1; - else if (strEQ(s, "message")) - message = 1; - else - goto unknown; - break; - case 9: - if (!strEQ(s, "readstate")) - goto unknown; - state = 1; - break; - case 10: - if (!strEQ(s, "disconnect")) - goto unknown; - disconnect = 1; - break; - default: - unknown: - Perl_croak(aTHX_ "OS2::pipeCntl(): unknown argument: `%s'", s); - break; - } - - if (items == 3 && !connect) - Perl_croak(aTHX_ "OS2::pipeCntl(): no wait argument for `%s'", s); - - XSprePUSH; /* Do not need arguments any more */ - if (disconnect) { - os2cp_croak(DosDisConnectNPipe(hpipe), "OS2::pipeCntl(): DosDisConnectNPipe()"); - PerlIO_clearerr(perlio); - } - if (connect) { - if (!connectNPipe(hpipe, wait , 1, 0)) - XSRETURN_IV(-1); - } - if (query) { - ULONG flags; - - os2cp_croak(DosQueryNPHState(hpipe, &flags), "DosQueryNPHState()"); - XSRETURN_UV(flags); - } - if (peek || state || info) { - ULONG BytesRead, PipeState; - AVAILDATA BytesAvail; - - os2cp_croak( DosPeekNPipe(hpipe, NULL, 0, &BytesRead, &BytesAvail, - &PipeState), "DosPeekNPipe() for state"); - if (state) { - EXTEND(SP, 3); - mPUSHu(PipeState); - /* Bytes (available/in-message) */ - mPUSHi(BytesAvail.cbpipe); - mPUSHi(BytesAvail.cbmessage); - XSRETURN(3); - } else if (info) { - /* L S S C C C/Z* - ID of the (remote) computer - buffers (out/in) - instances (max/actual) - */ - struct pipe_info_t { - ULONG id; /* char id[4]; */ - PIPEINFO pInfo; - char buf[512]; - } b; - int size; - - os2cp_croak( DosQueryNPipeInfo(hpipe, 1, &b.pInfo, sizeof(b) - STRUCT_OFFSET(struct pipe_info_t, pInfo)), - "DosQueryNPipeInfo(1)"); - os2cp_croak( DosQueryNPipeInfo(hpipe, 2, &b.id, sizeof(b.id)), - "DosQueryNPipeInfo(2)"); - size = b.pInfo.cbName; - /* Trailing 0 is included in cbName - undocumented; so - one should always extract with Z* */ - if (size) /* name length 254 or less */ - size--; - else - size = strlen(b.pInfo.szName); - EXTEND(SP, 6); - mPUSHp(b.pInfo.szName, size); - mPUSHu(b.id); - mPUSHi(b.pInfo.cbOut); - mPUSHi(b.pInfo.cbIn); - mPUSHi(b.pInfo.cbMaxInst); - mPUSHi(b.pInfo.cbCurInst); - XSRETURN(6); - } else if (BytesAvail.cbpipe == 0) { - XSRETURN_NO; - } else { - SV *tmp = NEWSV(914, BytesAvail.cbpipe); - char *s = SvPVX(tmp); - - sv_2mortal(tmp); - os2cp_croak( DosPeekNPipe(hpipe, s, BytesAvail.cbpipe, &BytesRead, - &BytesAvail, &PipeState), "DosPeekNPipe()"); - SvCUR_set(tmp, BytesRead); - *SvEND(tmp) = 0; - SvPOK_on(tmp); - XSprePUSH; PUSHs(tmp); - XSRETURN(1); - } - } - if (message > -1) { - ULONG oflags, flags; - - os2cp_croak(DosQueryNPHState(hpipe, &oflags), "DosQueryNPHState()"); - /* DosSetNPHState fails if more bits than NP_NOWAIT|NP_READMODE_MESSAGE */ - oflags &= (NP_NOWAIT | NP_READMODE_MESSAGE); - flags = (oflags & NP_NOWAIT) - | (message ? NP_READMODE_MESSAGE : NP_READMODE_BYTE); - if (flags != oflags) - os2cp_croak(DosSetNPHState(hpipe, flags), "DosSetNPHState()"); - } + ULONG rc; + PerlIO *perlio = IoIFP(sv_2io(ST(0))); + IV fn = PerlIO_fileno(perlio); + HPIPE hpipe = (HPIPE)fn; + STRLEN len; + char *s = SvPV(ST(1), len); + int wait = 0, disconnect = 0, connect = 0, message = -1, query = 0; + int peek = 0, state = 0, info = 0; + + if (fn < 0) + Perl_croak(aTHX_ "OS2::pipeCntl(): not a pipe"); + if (items == 3) + wait = (SvTRUE(ST(2)) ? 1 : -1); + + switch (len) { + case 4: + if (strEQ(s, "byte")) + message = 0; + else if (strEQ(s, "peek")) + peek = 1; + else if (strEQ(s, "info")) + info = 1; + else + goto unknown; + break; + case 5: + if (strEQ(s, "reset")) + disconnect = connect = 1; + else if (strEQ(s, "state")) + query = 1; + else + goto unknown; + break; + case 7: + if (strEQ(s, "connect")) + connect = 1; + else if (strEQ(s, "message")) + message = 1; + else + goto unknown; + break; + case 9: + if (!strEQ(s, "readstate")) + goto unknown; + state = 1; + break; + case 10: + if (!strEQ(s, "disconnect")) + goto unknown; + disconnect = 1; + break; + default: + unknown: + Perl_croak(aTHX_ "OS2::pipeCntl(): unknown argument: `%s'", s); + break; + } + + if (items == 3 && !connect) + Perl_croak(aTHX_ "OS2::pipeCntl(): no wait argument for `%s'", s); + + XSprePUSH; /* Do not need arguments any more */ + if (disconnect) { + os2cp_croak(DosDisConnectNPipe(hpipe), "OS2::pipeCntl(): DosDisConnectNPipe()"); + PerlIO_clearerr(perlio); + } + if (connect) { + if (!connectNPipe(hpipe, wait , 1, 0)) + XSRETURN_IV(-1); + } + if (query) { + ULONG flags; + + os2cp_croak(DosQueryNPHState(hpipe, &flags), "DosQueryNPHState()"); + XSRETURN_UV(flags); + } + if (peek || state || info) { + ULONG BytesRead, PipeState; + AVAILDATA BytesAvail; + + os2cp_croak( DosPeekNPipe(hpipe, NULL, 0, &BytesRead, &BytesAvail, + &PipeState), "DosPeekNPipe() for state"); + if (state) { + EXTEND(SP, 3); + mPUSHu(PipeState); + /* Bytes (available/in-message) */ + mPUSHi(BytesAvail.cbpipe); + mPUSHi(BytesAvail.cbmessage); + XSRETURN(3); + } else if (info) { + /* L S S C C C/Z* + ID of the (remote) computer + buffers (out/in) + instances (max/actual) + */ + struct pipe_info_t { + ULONG id; /* char id[4]; */ + PIPEINFO pInfo; + char buf[512]; + } b; + int size; + + os2cp_croak( DosQueryNPipeInfo(hpipe, 1, &b.pInfo, sizeof(b) - STRUCT_OFFSET(struct pipe_info_t, pInfo)), + "DosQueryNPipeInfo(1)"); + os2cp_croak( DosQueryNPipeInfo(hpipe, 2, &b.id, sizeof(b.id)), + "DosQueryNPipeInfo(2)"); + size = b.pInfo.cbName; + /* Trailing 0 is included in cbName - undocumented; so + one should always extract with Z* */ + if (size) /* name length 254 or less */ + size--; + else + size = strlen(b.pInfo.szName); + EXTEND(SP, 6); + mPUSHp(b.pInfo.szName, size); + mPUSHu(b.id); + mPUSHi(b.pInfo.cbOut); + mPUSHi(b.pInfo.cbIn); + mPUSHi(b.pInfo.cbMaxInst); + mPUSHi(b.pInfo.cbCurInst); + XSRETURN(6); + } else if (BytesAvail.cbpipe == 0) { + XSRETURN_NO; + } else { + SV *tmp = NEWSV(914, BytesAvail.cbpipe); + char *s = SvPVX(tmp); + + sv_2mortal(tmp); + os2cp_croak( DosPeekNPipe(hpipe, s, BytesAvail.cbpipe, &BytesRead, + &BytesAvail, &PipeState), "DosPeekNPipe()"); + SvCUR_set(tmp, BytesRead); + *SvEND(tmp) = 0; + SvPOK_on(tmp); + XSprePUSH; PUSHs(tmp); + XSRETURN(1); + } + } + if (message > -1) { + ULONG oflags, flags; + + os2cp_croak(DosQueryNPHState(hpipe, &oflags), "DosQueryNPHState()"); + /* DosSetNPHState fails if more bits than NP_NOWAIT|NP_READMODE_MESSAGE */ + oflags &= (NP_NOWAIT | NP_READMODE_MESSAGE); + flags = (oflags & NP_NOWAIT) + | (message ? NP_READMODE_MESSAGE : NP_READMODE_BYTE); + if (flags != oflags) + os2cp_croak(DosSetNPHState(hpipe, flags), "DosSetNPHState()"); + } } XSRETURN_YES; } @@ -4443,65 +4442,65 @@ XS(XS_OS2_pipeCntl) NO_OUTPUT ULONG DosOpen(PCSZ pszFileName, OUTLIST HFILE hFile, OUTLIST ULONG ulAction, ULONG ulOpenFlags, ULONG ulOpenMode = OPEN_ACTION_OPEN_IF_EXISTS | OPEN_ACTION_FAIL_IF_NEW, ULONG ulAttribute = FILE_NORMAL, ULONG ulFileSize = 0, PEAOP2 pEABuf = NULL); PREINIT: - ULONG rc; + ULONG rc; C_ARGS: - pszFileName, &hFile, &ulAction, ulFileSize, ulAttribute, ulOpenFlags, ulOpenMode, pEABuf + pszFileName, &hFile, &ulAction, ulFileSize, ulAttribute, ulOpenFlags, ulOpenMode, pEABuf POSTCALL: - if (CheckOSError(RETVAL)) - croak_with_os2error("OS2::open() error"); + if (CheckOSError(RETVAL)) + croak_with_os2error("OS2::open() error"); */ XS(XS_OS2_open); /* prototype to pass -Wmissing-prototypes */ XS(XS_OS2_open) { dXSARGS; if (items < 2 || items > 6) - Perl_croak(aTHX_ "Usage: OS2::open(pszFileName, ulOpenMode, ulOpenFlags= OPEN_ACTION_OPEN_IF_EXISTS | OPEN_ACTION_FAIL_IF_NEW, ulAttribute= FILE_NORMAL, ulFileSize= 0, pEABuf= NULL)"); + Perl_croak(aTHX_ "Usage: OS2::open(pszFileName, ulOpenMode, ulOpenFlags= OPEN_ACTION_OPEN_IF_EXISTS | OPEN_ACTION_FAIL_IF_NEW, ulAttribute= FILE_NORMAL, ulFileSize= 0, pEABuf= NULL)"); { #line 39 "pipe.xs" - ULONG rc; + ULONG rc; #line 113 "pipe.c" - ULONG RETVAL; - PCSZ pszFileName = ( SvOK(ST(0)) ? (PCSZ)SvPV_nolen(ST(0)) : NULL ); - HFILE hFile; - ULONG ulAction; - ULONG ulOpenMode = (ULONG)SvUV(ST(1)); - ULONG ulOpenFlags; - ULONG ulAttribute; - ULONG ulFileSize; - PEAOP2 pEABuf; - - if (items < 3) - ulOpenFlags = OPEN_ACTION_OPEN_IF_EXISTS | OPEN_ACTION_FAIL_IF_NEW; - else { - ulOpenFlags = (ULONG)SvUV(ST(2)); - } - - if (items < 4) - ulAttribute = FILE_NORMAL; - else { - ulAttribute = (ULONG)SvUV(ST(3)); - } - - if (items < 5) - ulFileSize = 0; - else { - ulFileSize = (ULONG)SvUV(ST(4)); - } - - if (items < 6) - pEABuf = NULL; - else { - pEABuf = (PEAOP2)SvUV(ST(5)); - } - - RETVAL = DosOpen(pszFileName, &hFile, &ulAction, ulFileSize, ulAttribute, ulOpenFlags, ulOpenMode, pEABuf); - if (CheckOSError(RETVAL)) - croak_with_os2error("OS2::open() error"); - XSprePUSH; EXTEND(SP,2); - PUSHs(sv_newmortal()); - sv_setuv(ST(0), (UV)hFile); - PUSHs(sv_newmortal()); - sv_setuv(ST(1), (UV)ulAction); + ULONG RETVAL; + PCSZ pszFileName = ( SvOK(ST(0)) ? (PCSZ)SvPV_nolen(ST(0)) : NULL ); + HFILE hFile; + ULONG ulAction; + ULONG ulOpenMode = (ULONG)SvUV(ST(1)); + ULONG ulOpenFlags; + ULONG ulAttribute; + ULONG ulFileSize; + PEAOP2 pEABuf; + + if (items < 3) + ulOpenFlags = OPEN_ACTION_OPEN_IF_EXISTS | OPEN_ACTION_FAIL_IF_NEW; + else { + ulOpenFlags = (ULONG)SvUV(ST(2)); + } + + if (items < 4) + ulAttribute = FILE_NORMAL; + else { + ulAttribute = (ULONG)SvUV(ST(3)); + } + + if (items < 5) + ulFileSize = 0; + else { + ulFileSize = (ULONG)SvUV(ST(4)); + } + + if (items < 6) + pEABuf = NULL; + else { + pEABuf = (PEAOP2)SvUV(ST(5)); + } + + RETVAL = DosOpen(pszFileName, &hFile, &ulAction, ulFileSize, ulAttribute, ulOpenFlags, ulOpenMode, pEABuf); + if (CheckOSError(RETVAL)) + croak_with_os2error("OS2::open() error"); + XSprePUSH; EXTEND(SP,2); + PUSHs(sv_newmortal()); + sv_setuv(ST(0), (UV)hFile); + PUSHs(sv_newmortal()); + sv_setuv(ST(1), (UV)ulAction); } XSRETURN(2); } @@ -4511,15 +4510,15 @@ Xs_OS2_init(pTHX) { char *file = __FILE__; { - GV *gv; + GV *gv; - if (_emx_env & 0x200) { /* OS/2 */ + if (_emx_env & 0x200) { /* OS/2 */ newXS("File::Copy::syscopy", XS_File__Copy_syscopy, file); newXS("Cwd::extLibpath", XS_Cwd_extLibpath, file); newXS("Cwd::extLibpath_set", XS_Cwd_extLibpath_set, file); newXS("OS2::extLibpath", XS_Cwd_extLibpath, file); newXS("OS2::extLibpath_set", XS_Cwd_extLibpath_set, file); - } + } newXS("OS2::Error", XS_OS2_Error, file); newXS("OS2::Errors2Drive", XS_OS2_Errors2Drive, file); newXS("OS2::SysInfo", XS_OS2_SysInfo, file); @@ -4560,33 +4559,33 @@ Xs_OS2_init(pTHX) newXSproto("OS2::pipe", XS_OS2_pipe, file, "$$;$$$$$$"); newXSproto("OS2::pipeCntl", XS_OS2_pipeCntl, file, "$$;$"); newXSproto("OS2::open", XS_OS2_open, file, "$$;$$$$"); - gv = gv_fetchpv("OS2::is_aout", TRUE, SVt_PV); - GvMULTI_on(gv); + gv = gv_fetchpv("OS2::is_aout", TRUE, SVt_PV); + GvMULTI_on(gv); #ifdef PERL_IS_AOUT - sv_setiv(GvSV(gv), 1); + sv_setiv(GvSV(gv), 1); #endif - gv = gv_fetchpv("OS2::is_static", TRUE, SVt_PV); - GvMULTI_on(gv); + gv = gv_fetchpv("OS2::is_static", TRUE, SVt_PV); + GvMULTI_on(gv); #ifdef PERL_IS_AOUT - sv_setiv(GvSV(gv), 1); + sv_setiv(GvSV(gv), 1); #endif - gv = gv_fetchpv("OS2::can_fork", TRUE, SVt_PV); - GvMULTI_on(gv); - sv_setiv(GvSV(gv), exe_is_aout()); - gv = gv_fetchpv("OS2::emx_rev", TRUE, SVt_PV); - GvMULTI_on(gv); - sv_setiv(GvSV(gv), _emx_rev); - sv_setpv(GvSV(gv), _emx_vprt); - SvIOK_on(GvSV(gv)); - gv = gv_fetchpv("OS2::emx_env", TRUE, SVt_PV); - GvMULTI_on(gv); - sv_setiv(GvSV(gv), _emx_env); - gv = gv_fetchpv("OS2::os_ver", TRUE, SVt_PV); - GvMULTI_on(gv); - sv_setnv(GvSV(gv), _osmajor + 0.001 * _osminor); - gv = gv_fetchpv("OS2::nsyserror", TRUE, SVt_PV); - GvMULTI_on(gv); - sv_setiv(GvSV(gv), 1); /* DEFAULT: Show number on syserror */ + gv = gv_fetchpv("OS2::can_fork", TRUE, SVt_PV); + GvMULTI_on(gv); + sv_setiv(GvSV(gv), exe_is_aout()); + gv = gv_fetchpv("OS2::emx_rev", TRUE, SVt_PV); + GvMULTI_on(gv); + sv_setiv(GvSV(gv), _emx_rev); + sv_setpv(GvSV(gv), _emx_vprt); + SvIOK_on(GvSV(gv)); + gv = gv_fetchpv("OS2::emx_env", TRUE, SVt_PV); + GvMULTI_on(gv); + sv_setiv(GvSV(gv), _emx_env); + gv = gv_fetchpv("OS2::os_ver", TRUE, SVt_PV); + GvMULTI_on(gv); + sv_setnv(GvSV(gv), _osmajor + 0.001 * _osminor); + gv = gv_fetchpv("OS2::nsyserror", TRUE, SVt_PV); + GvMULTI_on(gv); + sv_setiv(GvSV(gv), 1); /* DEFAULT: Show number on syserror */ } return 0; } @@ -4605,13 +4604,13 @@ my_emx_init(void *layout) { /* Can't just call emx_init(), since it moves the stack pointer */ /* It also busts a lot of registers, so be extra careful */ __asm__( "pushf\n" - "pusha\n" - "movl %%esp, %1\n" - "push %0\n" - "call __emx_init\n" - "movl %1, %%esp\n" - "popa\n" - "popf\n" : : "r" (layout), "m" (old_esp) ); + "pusha\n" + "movl %%esp, %1\n" + "push %0\n" + "call __emx_init\n" + "movl %1, %%esp\n" + "popa\n" + "popf\n" : : "r" (layout), "m" (old_esp) ); } struct layout_table_t { @@ -4640,11 +4639,11 @@ my_os_version() { /* Can't just call __os_version(), since it does not follow C calling convention: it busts a lot of registers, so be extra careful */ __asm__( "pushf\n" - "pusha\n" - "call ___os_version\n" - "movl %%eax, %0\n" - "popa\n" - "popf\n" : "=m" (osv_res) ); + "pusha\n" + "call ___os_version\n" + "movl %%eax, %0\n" + "popa\n" + "popf\n" : "=m" (osv_res) ); return osv_res; } @@ -4662,9 +4661,9 @@ force_init_emx_runtime(EXCEPTIONREGISTRATIONRECORD *preg, ULONG flags) char buf[512]; static struct layout_table_t layout_table; struct { - char buf[48*1024]; /* _emx_init() requires 32K, cmd.exe has 64K only */ - double alignment1; - EXCEPTIONREGISTRATIONRECORD xreg; + char buf[48*1024]; /* _emx_init() requires 32K, cmd.exe has 64K only */ + double alignment1; + EXCEPTIONREGISTRATIONRECORD xreg; } *newstack; char *s; @@ -4678,23 +4677,23 @@ force_init_emx_runtime(EXCEPTIONREGISTRATIONRECORD *preg, ULONG flags) oldstackend = tib->tib_pstacklimit; if ( (char*)&s < (char*)oldstack + 4*1024 - || (char *)oldstackend < (char*)oldstack + 52*1024 ) - early_error("It is a lunacy to try to run EMX Perl ", - "with less than 64K of stack;\r\n", - " at least with non-EMX starter...\r\n"); + || (char *)oldstackend < (char*)oldstack + 52*1024 ) + early_error("It is a lunacy to try to run EMX Perl ", + "with less than 64K of stack;\r\n", + " at least with non-EMX starter...\r\n"); /* Minimize the damage to the stack via reducing the size of argv. */ if (flags & FORCE_EMX_INIT_CONTRACT_ARGV) { - pib->pib_pchcmd = "\0\0"; /* Need 3 concatenated strings */ - pib->pib_pchcmd = "\0"; /* Ended by an extra \0. */ + pib->pib_pchcmd = "\0\0"; /* Need 3 concatenated strings */ + pib->pib_pchcmd = "\0"; /* Ended by an extra \0. */ } newstack = alloca(sizeof(*newstack)); /* Emulate the stack probe */ s = ((char*)newstack) + sizeof(*newstack); while (s > (char*)newstack) { - s[-1] = 0; - s -= 4096; + s[-1] = 0; + s -= 4096; } /* Reassigning stack is documented to work */ @@ -4708,38 +4707,38 @@ force_init_emx_runtime(EXCEPTIONREGISTRATIONRECORD *preg, ULONG flags) Check whether it is inside the new stack. */ buf[0] = 0; if (tib->tib_pexchain >= tib->tib_pstacklimit - || tib->tib_pexchain < tib->tib_pstack) { - error = 1; - sprintf(buf, - "panic: ExceptionHandler misplaced: not %#lx <= %#lx < %#lx\n", - (unsigned long)tib->tib_pstack, - (unsigned long)tib->tib_pexchain, - (unsigned long)tib->tib_pstacklimit); - goto finish; + || tib->tib_pexchain < tib->tib_pstack) { + error = 1; + sprintf(buf, + "panic: ExceptionHandler misplaced: not %#lx <= %#lx < %#lx\n", + (unsigned long)tib->tib_pstack, + (unsigned long)tib->tib_pexchain, + (unsigned long)tib->tib_pstacklimit); + goto finish; } if (tib->tib_pexchain != &(newstack->xreg)) { - sprintf(buf, "ExceptionHandler misplaced: %#lx != %#lx\n", - (unsigned long)tib->tib_pexchain, - (unsigned long)&(newstack->xreg)); + sprintf(buf, "ExceptionHandler misplaced: %#lx != %#lx\n", + (unsigned long)tib->tib_pexchain, + (unsigned long)&(newstack->xreg)); } rc = DosUnsetExceptionHandler((EXCEPTIONREGISTRATIONRECORD *)tib->tib_pexchain); if (rc) - sprintf(buf + strlen(buf), - "warning: DosUnsetExceptionHandler rc=%#lx=%lu\n", rc, rc); + sprintf(buf + strlen(buf), + "warning: DosUnsetExceptionHandler rc=%#lx=%lu\n", rc, rc); if (preg) { - /* ExceptionRecords should be on stack, in a correct order. Sigh... */ - preg->prev_structure = 0; - preg->ExceptionHandler = _emx_exception; - rc = DosSetExceptionHandler(preg); - if (rc) { - sprintf(buf + strlen(buf), - "warning: DosSetExceptionHandler rc=%#lx=%lu\n", rc, rc); - DosWrite(2, buf, strlen(buf), &out); - emx_exception_init = 1; /* Do it around spawn*() calls */ - } + /* ExceptionRecords should be on stack, in a correct order. Sigh... */ + preg->prev_structure = 0; + preg->ExceptionHandler = _emx_exception; + rc = DosSetExceptionHandler(preg); + if (rc) { + sprintf(buf + strlen(buf), + "warning: DosSetExceptionHandler rc=%#lx=%lu\n", rc, rc); + DosWrite(2, buf, strlen(buf), &out); + emx_exception_init = 1; /* Do it around spawn*() calls */ + } } else - emx_exception_init = 1; /* Do it around spawn*() calls */ + emx_exception_init = 1; /* Do it around spawn*() calls */ finish: /* Restore the damage */ @@ -4749,16 +4748,16 @@ force_init_emx_runtime(EXCEPTIONREGISTRATIONRECORD *preg, ULONG flags) tib->tib_pstack = oldstack; emx_runtime_init = 1; if (buf[0]) - DosWrite(2, buf, strlen(buf), &out); + DosWrite(2, buf, strlen(buf), &out); if (error) - exit(56); + exit(56); } static void jmp_out_of_atexit(void) { if (longjmp_at_exit) - longjmp(at_exit_buf, 1); + longjmp(at_exit_buf, 1); } extern void _CRT_term(void); @@ -4767,34 +4766,34 @@ void Perl_OS2_term(void **p, int exitstatus, int flags) { if (!emx_runtime_secondary) - return; + return; /* The principal executable is not running the same CRTL, so there is nobody to shutdown *this* CRTL except us... */ if (flags & FORCE_EMX_DEINIT_EXIT) { - if (p && !emx_exception_init) - DosUnsetExceptionHandler((EXCEPTIONREGISTRATIONRECORD *)p); - /* Do not run the executable's CRTL's termination routines */ - exit(exitstatus); /* Run at-exit, flush buffers, etc */ + if (p && !emx_exception_init) + DosUnsetExceptionHandler((EXCEPTIONREGISTRATIONRECORD *)p); + /* Do not run the executable's CRTL's termination routines */ + exit(exitstatus); /* Run at-exit, flush buffers, etc */ } /* Run at-exit list, and jump out at the end */ if ((flags & FORCE_EMX_DEINIT_RUN_ATEXIT) && !setjmp(at_exit_buf)) { - longjmp_at_exit = 1; - exit(exitstatus); /* The first pass through "if" */ + longjmp_at_exit = 1; + exit(exitstatus); /* The first pass through "if" */ } /* Get here if we managed to jump out of exit(), or did not run atexit. */ longjmp_at_exit = 0; /* Maybe exit() is called again? */ #if 0 /* _atexit_n is not exported */ if (flags & FORCE_EMX_DEINIT_RUN_ATEXIT) - _atexit_n = 0; /* Remove the atexit() handlers */ + _atexit_n = 0; /* Remove the atexit() handlers */ #endif /* Will segfault on program termination if we leave this dangling... */ if (p && !emx_exception_init) - DosUnsetExceptionHandler((EXCEPTIONREGISTRATIONRECORD *)p); + DosUnsetExceptionHandler((EXCEPTIONREGISTRATIONRECORD *)p); /* Typically there is no need to do this, done from _DLL_InitTerm() */ if (flags & FORCE_EMX_DEINIT_CRT_TERM) - _CRT_term(); /* Flush buffers, etc. */ + _CRT_term(); /* Flush buffers, etc. */ /* Now it is a good time to call exit() in the caller's CRTL... */ } @@ -4810,11 +4809,11 @@ check_emx_runtime(char **env, EXCEPTIONREGISTRATIONRECORD *preg) static int emx_init_done = 0; /* If _environ is not set, this code sits in a DLL which - uses a CRT DLL which not compatible with the executable's - CRT library. Some parts of the DLL are not initialized. + uses a CRT DLL which not compatible with the executable's + CRT library. Some parts of the DLL are not initialized. */ if (_environ != NULL) - return; /* Properly initialized */ + return; /* Properly initialized */ /* It is not DOS, so we may use OS/2 API now */ /* Some data we manipulate is static; protect ourselves from @@ -4823,92 +4822,92 @@ check_emx_runtime(char **env, EXCEPTIONREGISTRATIONRECORD *preg) rc1 = DosEnterCritSec(); if (!hmtx_emx_init) - rc = DosCreateMutexSem(NULL, &hmtx_emx_init, 0, TRUE); /*Create owned*/ + rc = DosCreateMutexSem(NULL, &hmtx_emx_init, 0, TRUE); /*Create owned*/ else - maybe_inited = 1; + maybe_inited = 1; if (rc != NO_ERROR) - hmtx_emx_init = NULLHANDLE; + hmtx_emx_init = NULLHANDLE; if (rc1 == NO_ERROR) - DosExitCritSec(); + DosExitCritSec(); DosExitMustComplete(&count); while (maybe_inited) { /* Other thread did or is doing the same now */ - if (emx_init_done) - return; - rc = DosRequestMutexSem(hmtx_emx_init, - (ULONG) SEM_INDEFINITE_WAIT); /* Timeout (none) */ - if (rc == ERROR_INTERRUPT) - continue; - if (rc != NO_ERROR) { - char buf[80]; - ULONG out; - - sprintf(buf, - "panic: EMX backdoor init: DosRequestMutexSem error: %lu=%#lx\n", rc, rc); - DosWrite(2, buf, strlen(buf), &out); - return; - } - DosReleaseMutexSem(hmtx_emx_init); - return; + if (emx_init_done) + return; + rc = DosRequestMutexSem(hmtx_emx_init, + (ULONG) SEM_INDEFINITE_WAIT); /* Timeout (none) */ + if (rc == ERROR_INTERRUPT) + continue; + if (rc != NO_ERROR) { + char buf[80]; + ULONG out; + + sprintf(buf, + "panic: EMX backdoor init: DosRequestMutexSem error: %lu=%#lx\n", rc, rc); + DosWrite(2, buf, strlen(buf), &out); + return; + } + DosReleaseMutexSem(hmtx_emx_init); + return; } /* If the executable does not use EMX.DLL, EMX.DLL is not completely - initialized either. Uninitialized EMX.DLL returns 0 in the low - nibble of __os_version(). */ + initialized either. Uninitialized EMX.DLL returns 0 in the low + nibble of __os_version(). */ v_emx = my_os_version(); /* _osmajor and _osminor are normally set in _DLL_InitTerm of CRT DLL - (=>_CRT_init=>_entry2) via a call to __os_version(), then - reset when the EXE initialization code calls _text=>_init=>_entry2. - The first time they are wrongly set to 0; the second time the - EXE initialization code had already called emx_init=>initialize1 - which correctly set version_major, version_minor used by - __os_version(). */ + (=>_CRT_init=>_entry2) via a call to __os_version(), then + reset when the EXE initialization code calls _text=>_init=>_entry2. + The first time they are wrongly set to 0; the second time the + EXE initialization code had already called emx_init=>initialize1 + which correctly set version_major, version_minor used by + __os_version(). */ v_crt = (_osmajor | _osminor); if ((_emx_env & 0x200) && !(v_emx & 0xFFFF)) { /* OS/2, EMX uninit. */ - force_init_emx_runtime( preg, - FORCE_EMX_INIT_CONTRACT_ARGV - | FORCE_EMX_INIT_INSTALL_ATEXIT ); - emx_wasnt_initialized = 1; - /* Update CRTL data basing on now-valid EMX runtime data */ - if (!v_crt) { /* The only wrong data are the versions. */ - v_emx = my_os_version(); /* *Now* it works */ - *(unsigned char *)&_osmajor = v_emx & 0xFF; /* Cast out const */ - *(unsigned char *)&_osminor = (v_emx>>8) & 0xFF; - } + force_init_emx_runtime( preg, + FORCE_EMX_INIT_CONTRACT_ARGV + | FORCE_EMX_INIT_INSTALL_ATEXIT ); + emx_wasnt_initialized = 1; + /* Update CRTL data basing on now-valid EMX runtime data */ + if (!v_crt) { /* The only wrong data are the versions. */ + v_emx = my_os_version(); /* *Now* it works */ + *(unsigned char *)&_osmajor = v_emx & 0xFF; /* Cast out const */ + *(unsigned char *)&_osminor = (v_emx>>8) & 0xFF; + } } emx_runtime_secondary = 1; /* if (flags & FORCE_EMX_INIT_INSTALL_ATEXIT) */ atexit(jmp_out_of_atexit); /* Allow run of atexit() w/o exit() */ if (env == NULL) { /* Fetch from the process info block */ - int c = 0; - PPIB pib; - PTIB tib; - char *e, **ep; - - DosGetInfoBlocks(&tib, &pib); - e = pib->pib_pchenv; - while (*e) { /* Get count */ - c++; - e = e + strlen(e) + 1; - } - Newx(env, c + 1, char*); - ep = env; - e = pib->pib_pchenv; - while (c--) { - *ep++ = e; - e = e + strlen(e) + 1; - } - *ep = NULL; + int c = 0; + PPIB pib; + PTIB tib; + char *e, **ep; + + DosGetInfoBlocks(&tib, &pib); + e = pib->pib_pchenv; + while (*e) { /* Get count */ + c++; + e = e + strlen(e) + 1; + } + Newx(env, c + 1, char*); + ep = env; + e = pib->pib_pchenv; + while (c--) { + *ep++ = e; + e = e + strlen(e) + 1; + } + *ep = NULL; } _environ = _org_environ = env; emx_init_done = 1; if (hmtx_emx_init) - DosReleaseMutexSem(hmtx_emx_init); + DosReleaseMutexSem(hmtx_emx_init); } #define ENTRY_POINT 0x10000 @@ -4918,16 +4917,16 @@ exe_is_aout(void) { struct layout_table_t *layout; if (emx_wasnt_initialized) - return 0; + return 0; /* Now we know that the principal executable is an EMX application - unless somebody did already play with delayed initialization... */ /* With EMX applications to determine whether it is AOUT one needs to examine the start of the executable to find "layout" */ if ( *(unsigned char*)ENTRY_POINT != 0x68 /* PUSH n */ - || *(unsigned char*)(ENTRY_POINT+5) != 0xe8 /* CALL */ - || *(unsigned char*)(ENTRY_POINT+10) != 0xeb /* JMP */ - || *(unsigned char*)(ENTRY_POINT+12) != 0xe8) /* CALL */ - return 0; /* ! EMX executable */ + || *(unsigned char*)(ENTRY_POINT+5) != 0xe8 /* CALL */ + || *(unsigned char*)(ENTRY_POINT+10) != 0xeb /* JMP */ + || *(unsigned char*)(ENTRY_POINT+12) != 0xe8) /* CALL */ + return 0; /* ! EMX executable */ /* Fix alignment */ Copy((char*)(ENTRY_POINT+1), &layout, 1, struct layout_table_t*); return !(layout->flags & 2); @@ -4953,25 +4952,25 @@ Perl_OS2_init3(char **env, void **preg, int flags) settmppath(); OS2_Perl_data.xs_init = &Xs_OS2_init; if (perl_sh_installed) { - int l = strlen(perl_sh_installed); - - Newx(PL_sh_path, l + 1, char); - memcpy(PL_sh_path, perl_sh_installed, l + 1); - } else if ( (shell = getenv("PERL_SH_DRIVE")) ) { - Newx(PL_sh_path, strlen(SH_PATH) + 1, char); - strcpy(PL_sh_path, SH_PATH); - PL_sh_path[0] = shell[0]; - } else if ( (shell = getenv("PERL_SH_DIR")) ) { - int l = strlen(shell), i; - - while (l && (shell[l-1] == '/' || shell[l-1] == '\\')) - l--; - Newx(PL_sh_path, l + 8, char); - strncpy(PL_sh_path, shell, l); - strcpy(PL_sh_path + l, "/sh.exe"); - for (i = 0; i < l; i++) { - if (PL_sh_path[i] == '\\') PL_sh_path[i] = '/'; - } + int l = strlen(perl_sh_installed); + + Newx(PL_sh_path, l + 1, char); + memcpy(PL_sh_path, perl_sh_installed, l + 1); + } else if ( (shell = PerlEnv_getenv("PERL_SH_DRIVE")) ) { + Newx(PL_sh_path, strlen(SH_PATH) + 1, char); + strcpy(PL_sh_path, SH_PATH); + PL_sh_path[0] = shell[0]; + } else if ( (shell = PerlEnv_getenv("PERL_SH_DIR")) ) { + int l = strlen(shell), i; + + while (l && (shell[l-1] == '/' || shell[l-1] == '\\')) + l--; + Newx(PL_sh_path, l + 8, char); + strncpy(PL_sh_path, shell, l); + strcpy(PL_sh_path + l, "/sh.exe"); + for (i = 0; i < l; i++) { + if (PL_sh_path[i] == '\\') PL_sh_path[i] = '/'; + } } MUTEX_INIT(&start_thread_mutex); MUTEX_INIT(&perlos2_state_mutex); @@ -4979,25 +4978,25 @@ Perl_OS2_init3(char **env, void **preg, int flags) os2_mytype_ini = os2_mytype; Perl_os2_initial_mode = -1; /* Uninit */ - s = getenv("PERL_BEGINLIBPATH"); + s = PerlEnv_getenv("PERL_BEGINLIBPATH"); if (s) rc = fill_extLibpath(0, s, NULL, 1, "PERL_BEGINLIBPATH"); else - rc = fill_extLibpath(0, getenv("PERL_PRE_BEGINLIBPATH"), getenv("PERL_POST_BEGINLIBPATH"), 0, "PERL_(PRE/POST)_BEGINLIBPATH"); + rc = fill_extLibpath(0, PerlEnv_getenv("PERL_PRE_BEGINLIBPATH"), PerlEnv_getenv("PERL_POST_BEGINLIBPATH"), 0, "PERL_(PRE/POST)_BEGINLIBPATH"); if (!rc) { - s = getenv("PERL_ENDLIBPATH"); - if (s) - rc = fill_extLibpath(1, s, NULL, 1, "PERL_ENDLIBPATH"); - else - rc = fill_extLibpath(1, getenv("PERL_PRE_ENDLIBPATH"), getenv("PERL_POST_ENDLIBPATH"), 0, "PERL_(PRE/POST)_ENDLIBPATH"); + s = PerlEnv_getenv("PERL_ENDLIBPATH"); + if (s) + rc = fill_extLibpath(1, s, NULL, 1, "PERL_ENDLIBPATH"); + else + rc = fill_extLibpath(1, PerlEnv_getenv("PERL_PRE_ENDLIBPATH"), PerlEnv_getenv("PERL_POST_ENDLIBPATH"), 0, "PERL_(PRE/POST)_ENDLIBPATH"); } if (rc) { - char buf[1024]; + char buf[1024]; - snprintf(buf, sizeof buf, "Error setting BEGIN/ENDLIBPATH: %s\n", - os2error(rc)); - DosWrite(2, buf, strlen(buf), &rc); - exit(2); + snprintf(buf, sizeof buf, "Error setting BEGIN/ENDLIBPATH: %s\n", + os2error(rc)); + DosWrite(2, buf, strlen(buf), &rc); + exit(2); } _emxload_env("PERL_EMXLOAD_SECS"); @@ -5012,10 +5011,10 @@ fd_ok(int fd) if (!(_emx_env & 0x200)) return 1; /* not OS/2. */ if (fd >= max_fh) { /* Renew */ - LONG delta = 0; + LONG delta = 0; - if (DosSetRelMaxFH(&delta, &max_fh)) /* Assume it OK??? */ - return 1; + if (DosSetRelMaxFH(&delta, &max_fh)) /* Assume it OK??? */ + return 1; } return fd < max_fh; } @@ -5025,7 +5024,7 @@ int dup2(int from, int to) { if (fd_ok(from < to ? to : from)) - return _dup2(from, to); + return _dup2(from, to); errno = EBADF; return -1; } @@ -5034,7 +5033,7 @@ int dup(int from) { if (fd_ok(from)) - return _dup(from); + return _dup(from); errno = EBADF; return -1; } @@ -5045,14 +5044,17 @@ dup(int from) char * my_tmpnam (char *str) { - char *p = getenv("TMP"), *tpath; + char *p = PerlEnv_getenv("TMP"), *tpath; - if (!p) p = getenv("TEMP"); + if (!p) p = PerlEnv_getenv("TEMP"); + ENV_LOCK; tpath = tempnam(p, "pltmp"); if (str && tpath) { - strcpy(str, tpath); - return str; + strcpy(str, tpath); + ENV_UNLOCK; + return str; } + ENV_UNLOCK; return tpath; } @@ -5063,10 +5065,10 @@ my_tmpfile () stat(".", &s); if (s.st_mode & S_IWOTH) { - return tmpfile(); + return tmpfile(); } return fopen(my_tmpnam(NULL), "w+b"); /* Race condition, but - grants TMP. */ + grants TMP. */ } #undef rmdir @@ -5083,17 +5085,17 @@ my_rmdir (__const__ char *s) int rc; if (s[l-1] == '/' || s[l-1] == '\\') { /* EMX mkdir fails... */ - if (l >= sizeof b) - Newx(buf, l + 1, char); - strcpy(buf,s); - while (l > 1 && (s[l-1] == '/' || s[l-1] == '\\')) - l--; - buf[l] = 0; - s = buf; + if (l >= sizeof b) + Newx(buf, l + 1, char); + strcpy(buf,s); + while (l > 1 && (s[l-1] == '/' || s[l-1] == '\\')) + l--; + buf[l] = 0; + s = buf; } rc = rmdir(s); if (b != buf) - Safefree(buf); + Safefree(buf); return rc; } @@ -5108,17 +5110,17 @@ my_mkdir (__const__ char *s, long perm) int rc; if (s[l-1] == '/' || s[l-1] == '\\') { /* EMX mkdir fails... */ - if (l >= sizeof b) - Newx(buf, l + 1, char); - strcpy(buf,s); - while (l > 1 && (s[l-1] == '/' || s[l-1] == '\\')) - l--; - buf[l] = 0; - s = buf; + if (l >= sizeof b) + Newx(buf, l + 1, char); + strcpy(buf,s); + while (l > 1 && (s[l-1] == '/' || s[l-1] == '\\')) + l--; + buf[l] = 0; + s = buf; } rc = mkdir(s, perm); if (b != buf) - Safefree(buf); + Safefree(buf); return rc; } @@ -5137,11 +5139,11 @@ my_flock(int handle, int o) if (use_my_flock == -1) { MUTEX_LOCK(&perlos2_state_mutex); if (use_my_flock == -1) { - char *s = getenv("USE_PERL_FLOCK"); + char *s = PerlEnv_getenv("USE_PERL_FLOCK"); if (s) - use_my_flock = atoi(s); + use_my_flock = atoi(s); else - use_my_flock = 1; + use_my_flock = 1; } MUTEX_UNLOCK(&perlos2_state_mutex); } @@ -5243,11 +5245,11 @@ static int use_my_pwent(void) { if (_my_pwent == -1) { - char *s = getenv("USE_PERL_PWENT"); + char *s = PerlEnv_getenv("USE_PERL_PWENT"); if (s) - _my_pwent = atoi(s); + _my_pwent = atoi(s); else - _my_pwent = 1; + _my_pwent = 1; } return _my_pwent; } @@ -5316,11 +5318,12 @@ passw_wrap(struct passwd *p) char *s; if (!p || (p->pw_passwd && *p->pw_passwd)) /* Not a dangerous password */ - return p; + return p; pw = *p; - s = getenv("PW_PASSWD"); + s = PerlEnv_getenv("PW_PASSWD"); if (!s) - s = (char*)pw_p; /* Make match impossible */ + s = (char*)pw_p; /* Make match impossible */ + pw.pw_passwd = s; return &pw; @@ -5329,12 +5332,18 @@ passw_wrap(struct passwd *p) struct passwd * my_getpwuid (uid_t id) { + /* On Linux, only getpwuid_r is thread safe, and even then not if the + * locale changes */ + return passw_wrap(getpwuid(id)); } struct passwd * my_getpwnam (__const__ char *n) { + /* On Linux, only getpwnam_r is thread safe, and even then not if the + * locale changes */ + return passw_wrap(getpwnam(n)); } @@ -5362,7 +5371,7 @@ gcvt_os2 (double value, int digits, char *buffer) #undef fork int fork_with_resources() { -#if (defined(USE_5005THREADS) || defined(USE_ITHREADS)) && !defined(USE_SLOW_THREAD_SPECIFIC) +#if defined(USE_ITHREADS) && !defined(USE_SLOW_THREAD_SPECIFIC) dTHX; void *ctx = PERL_GET_CONTEXT; #endif @@ -5370,57 +5379,57 @@ int fork_with_resources() int rc = fork(); if (rc == 0) { /* child */ -#if (defined(USE_5005THREADS) || defined(USE_ITHREADS)) && !defined(USE_SLOW_THREAD_SPECIFIC) +#if defined(USE_ITHREADS) && !defined(USE_SLOW_THREAD_SPECIFIC) ALLOC_THREAD_KEY; /* Acquire the thread-local memory */ PERL_SET_CONTEXT(ctx); /* Reinit the thread-local memory */ #endif { /* Reload loaded-on-demand DLLs */ - struct dll_handle_t *dlls = dll_handles; - - while (dlls->modname) { - char dllname[260], fail[260]; - ULONG rc; - - if (!dlls->handle) { /* Was not loaded */ - dlls++; - continue; - } - /* It was loaded in the parent. We need to reload it. */ - - rc = DosQueryModuleName(dlls->handle, sizeof(dllname), dllname); - if (rc) { - Perl_warn_nocontext("Can't find DLL name for the module `%s' by the handle %d, rc=%lu=%#lx", - dlls->modname, (int)dlls->handle, rc, rc); - dlls++; - continue; - } - rc = DosLoadModule(fail, sizeof fail, dllname, &dlls->handle); - if (rc) - Perl_warn_nocontext("Can't load DLL `%s', possible problematic module `%s'", - dllname, fail); - dlls++; - } + struct dll_handle_t *dlls = dll_handles; + + while (dlls->modname) { + char dllname[260], fail[260]; + ULONG rc; + + if (!dlls->handle) { /* Was not loaded */ + dlls++; + continue; + } + /* It was loaded in the parent. We need to reload it. */ + + rc = DosQueryModuleName(dlls->handle, sizeof(dllname), dllname); + if (rc) { + Perl_warn_nocontext("Can't find DLL name for the module `%s' by the handle %d, rc=%lu=%#lx", + dlls->modname, (int)dlls->handle, rc, rc); + dlls++; + continue; + } + rc = DosLoadModule(fail, sizeof fail, dllname, &dlls->handle); + if (rc) + Perl_warn_nocontext("Can't load DLL `%s', possible problematic module `%s'", + dllname, fail); + dlls++; + } } { /* Support message queue etc. */ - os2_mytype = my_type(); - /* Apparently, subprocesses (in particular, fork()) do not - inherit the morphed state, so os2_mytype is the same as - os2_mytype_ini. */ - - if (Perl_os2_initial_mode != -1 - && Perl_os2_initial_mode != os2_mytype) { - /* XXXX ??? */ - } + os2_mytype = my_type(); + /* Apparently, subprocesses (in particular, fork()) do not + inherit the morphed state, so os2_mytype is the same as + os2_mytype_ini. */ + + if (Perl_os2_initial_mode != -1 + && Perl_os2_initial_mode != os2_mytype) { + /* XXXX ??? */ + } } if (Perl_HAB_set) - (void)_obtain_Perl_HAB; + (void)_obtain_Perl_HAB; if (Perl_hmq_refcnt) { - if (my_type() != 3) - my_type_set(3); - Create_HMQ(Perl_hmq_servers != 0, - "Cannot create a message queue on fork"); + if (my_type() != 3) + my_type_set(3); + Create_HMQ(Perl_hmq_servers != 0, + "Cannot create a message queue on fork"); } /* We may have loaded some modules */ @@ -5445,7 +5454,7 @@ myDosGetInfoSeg(PGINFOSEG *pGlobal, PLINFOSEG *pLocal) _THUNK_FLAT (&lSel); _THUNK_CALL (Dos16GetInfoSeg))); if (rc) - return rc; + return rc; *pGlobal = MAKEPGINFOSEG(gSel); *pLocal = MAKEPLINFOSEG(lSel); return rc; diff --git a/gnu/usr.bin/perl/os2/os2ish.h b/gnu/usr.bin/perl/os2/os2ish.h index c82419eed79..0f80a4ddca0 100644 --- a/gnu/usr.bin/perl/os2/os2ish.h +++ b/gnu/usr.bin/perl/os2/os2ish.h @@ -117,68 +117,68 @@ extern int rc; #define MUTEX_INIT(m) \ STMT_START { \ - int rc; \ - if ((rc = _rmutex_create(m,0))) \ - Perl_croak_nocontext("panic: MUTEX_INIT: rc=%i", rc); \ + int rc; \ + if ((rc = _rmutex_create(m,0))) \ + Perl_croak_nocontext("panic: MUTEX_INIT: rc=%i", rc); \ } STMT_END #define MUTEX_LOCK(m) \ STMT_START { \ - int rc; \ - if ((rc = _rmutex_request(m,_FMR_IGNINT))) \ - Perl_croak_nocontext("panic: MUTEX_LOCK: rc=%i", rc); \ + int rc; \ + if ((rc = _rmutex_request(m,_FMR_IGNINT))) \ + Perl_croak_nocontext("panic: MUTEX_LOCK: rc=%i", rc); \ } STMT_END #define MUTEX_UNLOCK(m) \ STMT_START { \ - int rc; \ - if ((rc = _rmutex_release(m))) \ - Perl_croak_nocontext("panic: MUTEX_UNLOCK: rc=%i", rc); \ + int rc; \ + if ((rc = _rmutex_release(m))) \ + Perl_croak_nocontext("panic: MUTEX_UNLOCK: rc=%i", rc); \ } STMT_END #define MUTEX_DESTROY(m) \ STMT_START { \ - int rc; \ - if ((rc = _rmutex_close(m))) \ - Perl_croak_nocontext("panic: MUTEX_DESTROY: rc=%i", rc); \ + int rc; \ + if ((rc = _rmutex_close(m))) \ + Perl_croak_nocontext("panic: MUTEX_DESTROY: rc=%i", rc); \ } STMT_END #define COND_INIT(c) \ STMT_START { \ - int rc; \ - if ((rc = DosCreateEventSem(NULL,c,0,0))) \ - Perl_croak_nocontext("panic: COND_INIT: rc=%i", rc); \ + int rc; \ + if ((rc = DosCreateEventSem(NULL,c,0,0))) \ + Perl_croak_nocontext("panic: COND_INIT: rc=%i", rc); \ } STMT_END #define COND_SIGNAL(c) \ STMT_START { \ - int rc; \ - if ((rc = DosPostEventSem(*(c))) && rc != OS2_ERROR_ALREADY_POSTED)\ - Perl_croak_nocontext("panic: COND_SIGNAL, rc=%ld", rc); \ + int rc; \ + if ((rc = DosPostEventSem(*(c))) && rc != OS2_ERROR_ALREADY_POSTED)\ + Perl_croak_nocontext("panic: COND_SIGNAL, rc=%ld", rc); \ } STMT_END #define COND_BROADCAST(c) \ STMT_START { \ - int rc; \ - if ((rc = DosPostEventSem(*(c))) && rc != OS2_ERROR_ALREADY_POSTED)\ - Perl_croak_nocontext("panic: COND_BROADCAST, rc=%i", rc); \ + int rc; \ + if ((rc = DosPostEventSem(*(c))) && rc != OS2_ERROR_ALREADY_POSTED)\ + Perl_croak_nocontext("panic: COND_BROADCAST, rc=%i", rc); \ } STMT_END /* #define COND_WAIT(c, m) \ STMT_START { \ - if (WaitForSingleObject(*(c),INFINITE) == WAIT_FAILED) \ - Perl_croak_nocontext("panic: COND_WAIT"); \ + if (WaitForSingleObject(*(c),INFINITE) == WAIT_FAILED) \ + Perl_croak_nocontext("panic: COND_WAIT"); \ } STMT_END */ #define COND_WAIT(c, m) os2_cond_wait(c,m) #define COND_WAIT_win32(c, m) \ STMT_START { \ - int rc; \ - if ((rc = SignalObjectAndWait(*(m),*(c),INFINITE,FALSE))) \ - Perl_croak_nocontext("panic: COND_WAIT"); \ - else \ - MUTEX_LOCK(m); \ + int rc; \ + if ((rc = SignalObjectAndWait(*(m),*(c),INFINITE,FALSE))) \ + Perl_croak_nocontext("panic: COND_WAIT"); \ + else \ + MUTEX_LOCK(m); \ } STMT_END #define COND_DESTROY(c) \ STMT_START { \ - int rc; \ - if ((rc = DosCloseEventSem(*(c)))) \ - Perl_croak_nocontext("panic: COND_DESTROY, rc=%i", rc); \ + int rc; \ + if ((rc = DosCloseEventSem(*(c)))) \ + Perl_croak_nocontext("panic: COND_DESTROY, rc=%i", rc); \ } STMT_END /*#define THR ((struct thread *) TlsGetValue(PL_thr_key)) */ @@ -191,10 +191,10 @@ extern int rc; # define pthread_getspecific(k) (*(k)) # define pthread_setspecific(k,v) (*(k)=(v),0) # define pthread_key_create(keyp,flag) \ - ( DosAllocThreadLocalMemory(1,(unsigned long**)keyp) \ - ? Perl_croak_nocontext("LocalMemory"),1 \ - : 0 \ - ) + ( DosAllocThreadLocalMemory(1,(unsigned long**)keyp) \ + ? Perl_croak_nocontext("LocalMemory"),1 \ + : 0 \ + ) #endif /* USE_SLOW_THREAD_SPECIFIC */ #define pthread_key_delete(keyp) #define pthread_self() _gettid() @@ -204,7 +204,7 @@ extern int rc; int pthread_join(pthread_t tid, void **status); int pthread_detach(pthread_t tid); int pthread_create(pthread_t *tid, const pthread_attr_t *attr, - void *(*start_routine)(void*), void *arg); + void *(*start_routine)(void*), void *arg); #endif /* PTHREAD_INCLUDED */ #define THREADS_ELSEWHERE @@ -410,22 +410,14 @@ void *emx_realloc (void *, size_t); /* This guy is needed for quick stdstd */ #if defined(USE_STDIO_PTR) && defined(STDIO_PTR_LVALUE) && defined(STDIO_CNT_LVALUE) - /* Perl uses ungetc only with successful return */ + /* Perl uses ungetc only with successful return */ # define ungetc(c,fp) \ - (FILE_ptr(fp) > FILE_base(fp) && c == (int)*(FILE_ptr(fp) - 1) \ - ? (--FILE_ptr(fp), ++FILE_cnt(fp), (int)c) : ungetc(c,fp)) + (FILE_ptr(fp) > FILE_base(fp) && c == (int)*(FILE_ptr(fp) - 1) \ + ? (--FILE_ptr(fp), ++FILE_cnt(fp), (int)c) : ungetc(c,fp)) #endif #define PERLIO_IS_BINMODE_FD(fd) _PERLIO_IS_BINMODE_FD(fd) -#ifdef __GNUG__ -# define HAS_BOOL -#endif -#ifndef HAS_BOOL -# define bool char -# define HAS_BOOL 1 -#endif - #include /* for _fd_flags() prototype */ static inline bool @@ -500,8 +492,8 @@ extern OS2_Perl_data_t OS2_Perl_data; #define set_Perl_HAB_f (OS2_Perl_flags |= Perl_HAB_set_f) #define set_Perl_HAB(h) (set_Perl_HAB_f, Perl_hab = h) #define _obtain_Perl_HAB (init_PMWIN_entries(), \ - Perl_hab = (*PMWIN_entries.Initialize)(0), \ - set_Perl_HAB_f, Perl_hab) + Perl_hab = (*PMWIN_entries.Initialize)(0), \ + set_Perl_HAB_f, Perl_hab) #define perl_hab_GET() (Perl_HAB_set ? Perl_hab : _obtain_Perl_HAB) #define Acquire_hab() perl_hab_GET() #define Perl_hmq ((HMQ)OS2_Perl_data.phmq) @@ -524,11 +516,11 @@ struct PMWIN_entries_t { unsigned long (*CreateMsgQueue)(unsigned long hab, long cmsg); int (*DestroyMsgQueue)(unsigned long hmq); int (*PeekMsg)(unsigned long hab, struct _QMSG *pqmsg, - unsigned long hwndFilter, unsigned long msgFilterFirst, - unsigned long msgFilterLast, unsigned long fl); + unsigned long hwndFilter, unsigned long msgFilterFirst, + unsigned long msgFilterLast, unsigned long fl); int (*GetMsg)(unsigned long hab, struct _QMSG *pqmsg, - unsigned long hwndFilter, unsigned long msgFilterFirst, - unsigned long msgFilterLast); + unsigned long hwndFilter, unsigned long msgFilterFirst, + unsigned long msgFilterLast); void * (*DispatchMsg)(unsigned long hab, struct _QMSG *pqmsg); unsigned long (*GetLastError)(unsigned long hab); unsigned long (*CancelShutdown)(unsigned long hmq, unsigned long fCancelAlways); @@ -543,7 +535,7 @@ void init_PMWIN_entries(void); #if _EMX_CRT_REV_ >= 60 # define os2_setsyserrno(rc) (Perl_rc = rc, errno = errno_isOS2_set, \ - _setsyserrno(rc)) + _setsyserrno(rc)) #else # define os2_setsyserrno(rc) (Perl_rc = rc, errno = errno_isOS2) #endif @@ -562,11 +554,11 @@ void init_PMWIN_entries(void); ((expr) ? : (CroakWinError(die,name1 name2), 0)) #define FillOSError(rc) (os2_setsyserrno(rc), \ - Perl_severity = SEVERITY_ERROR) + Perl_severity = SEVERITY_ERROR) #define WinError_2_Perl_rc \ ( init_PMWIN_entries(), \ - Perl_rc=(*PMWIN_entries.GetLastError)(perl_hab_GET()) ) + Perl_rc=(*PMWIN_entries.GetLastError)(perl_hab_GET()) ) /* Calling WinGetLastError() resets the error code of the current thread. Since for some Win* API return value 0 is normal, one needs to call @@ -576,9 +568,9 @@ void init_PMWIN_entries(void); /* At this moment init_PMWIN_entries() should be a nop (WinInitialize should be called already, right?), so we do not risk stepping over our own error */ #define FillWinError ( WinError_2_Perl_rc, \ - Perl_severity = ERRORIDSEV(Perl_rc), \ - Perl_rc = ERRORIDERROR(Perl_rc), \ - os2_setsyserrno(Perl_rc)) + Perl_severity = ERRORIDSEV(Perl_rc), \ + Perl_rc = ERRORIDERROR(Perl_rc), \ + os2_setsyserrno(Perl_rc)) #define STATIC_FILE_LENGTH 127 @@ -726,38 +718,38 @@ enum entries_ordinals { /* This flavor caches the procedure pointer (named as p__Win#name) locally */ #define DeclWinFuncByORD_CACHE(ret,name,o,at,args) \ - DeclWinFuncByORD_CACHE_r(ret,name,o,at,args,0,1) + DeclWinFuncByORD_CACHE_r(ret,name,o,at,args,0,1) /* This flavor may reset the last error before the call (if ret=0 may be OK) */ #define DeclWinFuncByORD_CACHE_resetError(ret,name,o,at,args) \ - DeclWinFuncByORD_CACHE_r(ret,name,o,at,args,1,1) + DeclWinFuncByORD_CACHE_r(ret,name,o,at,args,1,1) /* Two flavors below do the same as above, but do not auto-croak */ /* This flavor caches the procedure pointer (named as p__Win#name) locally */ #define DeclWinFuncByORD_CACHE_survive(ret,name,o,at,args) \ - DeclWinFuncByORD_CACHE_r(ret,name,o,at,args,0,0) + DeclWinFuncByORD_CACHE_r(ret,name,o,at,args,0,0) /* This flavor may reset the last error before the call (if ret=0 may be OK) */ #define DeclWinFuncByORD_CACHE_resetError_survive(ret,name,o,at,args) \ - DeclWinFuncByORD_CACHE_r(ret,name,o,at,args,1,0) + DeclWinFuncByORD_CACHE_r(ret,name,o,at,args,1,0) #define DeclWinFuncByORD_CACHE_r(ret,name,o,at,args,r,die) \ static ret (*CAT2(p__Win,name)) at; \ static ret name at { \ - if (!CAT2(p__Win,name)) \ - AssignFuncPByORD(CAT2(p__Win,name), o); \ - if (r) ResetWinError(); \ - return SaveCroakWinError(CAT2(p__Win,name) args, die, "[Win]", STRINGIFY(name)); } + if (!CAT2(p__Win,name)) \ + AssignFuncPByORD(CAT2(p__Win,name), o); \ + if (r) ResetWinError(); \ + return SaveCroakWinError(CAT2(p__Win,name) args, die, "[Win]", STRINGIFY(name)); } /* These flavors additionally assume ORD is name with prepended ORD_Win */ #define DeclWinFunc_CACHE(ret,name,at,args) \ - DeclWinFuncByORD_CACHE(ret,name,CAT2(ORD_Win,name),at,args) + DeclWinFuncByORD_CACHE(ret,name,CAT2(ORD_Win,name),at,args) #define DeclWinFunc_CACHE_resetError(ret,name,at,args) \ - DeclWinFuncByORD_CACHE_resetError(ret,name,CAT2(ORD_Win,name),at,args) + DeclWinFuncByORD_CACHE_resetError(ret,name,CAT2(ORD_Win,name),at,args) #define DeclWinFunc_CACHE_survive(ret,name,at,args) \ - DeclWinFuncByORD_CACHE_survive(ret,name,CAT2(ORD_Win,name),at,args) + DeclWinFuncByORD_CACHE_survive(ret,name,CAT2(ORD_Win,name),at,args) #define DeclWinFunc_CACHE_resetError_survive(ret,name,at,args) \ - DeclWinFuncByORD_CACHE_resetError_survive(ret,name,CAT2(ORD_Win,name),at,args) + DeclWinFuncByORD_CACHE_resetError_survive(ret,name,CAT2(ORD_Win,name),at,args) void ResetWinError(void); void CroakWinError(int die, char *name); @@ -815,12 +807,12 @@ void croak_with_os2error(char *s) __attribute__((noreturn)); /* propagates rc */ #define os2win_croak(rc,msg) \ - SaveCroakWinError((expr), 1 /* die */, /* no prefix */, (msg)) + SaveCroakWinError((expr), 1 /* die */, /* no prefix */, (msg)) /* propagates rc; use with functions which may return 0 on success */ #define os2win_croak_0OK(rc,msg) \ - SaveCroakWinError((ResetWinError, (expr)), \ - 1 /* die */, /* no prefix */, (msg)) + SaveCroakWinError((ResetWinError, (expr)), \ + 1 /* die */, /* no prefix */, (msg)) #ifdef PERL_CORE int os2_do_spawn(pTHX_ char *cmd); @@ -840,7 +832,7 @@ int os2_do_aspawn(pTHX_ SV *really, SV **vmark, SV **vsp); # define LOG_DEBUG 7 /* debug-level messages */ # define LOG_PRIMASK 0x007 /* mask to extract priority part (internal) */ - /* extract priority */ + /* extract priority */ # define LOG_PRI(p) ((p) & LOG_PRIMASK) # define LOG_MAKEPRI(fac, pri) (((fac) << 3) | (pri)) @@ -855,7 +847,7 @@ int os2_do_aspawn(pTHX_ SV *really, SV **vmark, SV **vsp); # define LOG_NEWS (7<<3) /* network news subsystem */ # define LOG_UUCP (8<<3) /* UUCP subsystem */ # define LOG_CRON (15<<3) /* clock daemon */ - /* other codes through 15 reserved for system use */ + /* other codes through 15 reserved for system use */ # define LOG_LOCAL0 (16<<3) /* reserved for local use */ # define LOG_LOCAL1 (17<<3) /* reserved for local use */ # define LOG_LOCAL2 (18<<3) /* reserved for local use */ @@ -867,14 +859,14 @@ int os2_do_aspawn(pTHX_ SV *really, SV **vmark, SV **vsp); # define LOG_NFACILITIES 24 /* current number of facilities */ # define LOG_FACMASK 0x03f8 /* mask to extract facility part */ - /* facility of pri */ + /* facility of pri */ # define LOG_FAC(p) (((p) & LOG_FACMASK) >> 3) /* * arguments to setlogmask. */ # define LOG_MASK(pri) (1 << (pri)) /* mask for one priority */ -# define LOG_UPTO(pri) ((1 << ((pri)+1)) - 1) /* all priorities through pri */ +# define LOG_UPTO(pri) nBIT_MASK((pri)+1) /* all priorities through pri */ /* * Option flags for openlog. @@ -1080,7 +1072,7 @@ unsigned long LIS_pPIB; /* Pointer to PIB */ /* ************************************************************ */ #define Dos32QuerySysState DosQuerySysState #define QuerySysState(flags, pid, buf, bufsz) \ - Dos32QuerySysState(flags, 0, pid, 0, buf, bufsz) + Dos32QuerySysState(flags, 0, pid, 0, buf, bufsz) #define QSS_PROCESS 1 #define QSS_MODULE 4 @@ -1091,156 +1083,156 @@ unsigned long LIS_pPIB; /* Pointer to PIB */ #ifdef _OS2_H APIRET APIENTRY Dos32QuerySysState(ULONG func,ULONG arg1,ULONG pid, - ULONG _res_,PVOID buf,ULONG bufsz); + ULONG _res_,PVOID buf,ULONG bufsz); typedef struct { - ULONG threadcnt; - ULONG proccnt; - ULONG modulecnt; + ULONG threadcnt; + ULONG proccnt; + ULONG modulecnt; } QGLOBAL, *PQGLOBAL; typedef struct { - ULONG rectype; - USHORT threadid; - USHORT slotid; - ULONG sleepid; - ULONG priority; - ULONG systime; - ULONG usertime; - UCHAR state; - UCHAR _reserved1_; /* padding to ULONG */ - USHORT _reserved2_; /* padding to ULONG */ + ULONG rectype; + USHORT threadid; + USHORT slotid; + ULONG sleepid; + ULONG priority; + ULONG systime; + ULONG usertime; + UCHAR state; + UCHAR _reserved1_; /* padding to ULONG */ + USHORT _reserved2_; /* padding to ULONG */ } QTHREAD, *PQTHREAD; typedef struct { - USHORT sfn; - USHORT refcnt; - USHORT flags1; - USHORT flags2; - USHORT accmode1; - USHORT accmode2; - ULONG filesize; - USHORT volhnd; - USHORT attrib; - USHORT _reserved_; + USHORT sfn; + USHORT refcnt; + USHORT flags1; + USHORT flags2; + USHORT accmode1; + USHORT accmode2; + ULONG filesize; + USHORT volhnd; + USHORT attrib; + USHORT _reserved_; } QFDS, *PQFDS; typedef struct qfile { - ULONG rectype; - struct qfile *next; - ULONG opencnt; - PQFDS filedata; - char name[1]; + ULONG rectype; + struct qfile *next; + ULONG opencnt; + PQFDS filedata; + char name[1]; } QFILE, *PQFILE; typedef struct { - ULONG rectype; - PQTHREAD threads; - USHORT pid; - USHORT ppid; - ULONG type; - ULONG state; - ULONG sessid; - USHORT hndmod; - USHORT threadcnt; - ULONG privsem32cnt; - ULONG _reserved2_; - USHORT sem16cnt; - USHORT dllcnt; - USHORT shrmemcnt; - USHORT fdscnt; - PUSHORT sem16s; - PUSHORT dlls; - PUSHORT shrmems; - PUSHORT fds; + ULONG rectype; + PQTHREAD threads; + USHORT pid; + USHORT ppid; + ULONG type; + ULONG state; + ULONG sessid; + USHORT hndmod; + USHORT threadcnt; + ULONG privsem32cnt; + ULONG _reserved2_; + USHORT sem16cnt; + USHORT dllcnt; + USHORT shrmemcnt; + USHORT fdscnt; + PUSHORT sem16s; + PUSHORT dlls; + PUSHORT shrmems; + PUSHORT fds; } QPROCESS, *PQPROCESS; typedef struct sema { - struct sema *next; - USHORT refcnt; - UCHAR sysflags; - UCHAR sysproccnt; - ULONG _reserved1_; - USHORT index; - CHAR name[1]; + struct sema *next; + USHORT refcnt; + UCHAR sysflags; + UCHAR sysproccnt; + ULONG _reserved1_; + USHORT index; + CHAR name[1]; } QSEMA, *PQSEMA; typedef struct { - ULONG rectype; - ULONG _reserved1_; - USHORT _reserved2_; - USHORT syssemidx; - ULONG index; - QSEMA sema; + ULONG rectype; + ULONG _reserved1_; + USHORT _reserved2_; + USHORT syssemidx; + ULONG index; + QSEMA sema; } QSEMSTRUC, *PQSEMSTRUC; typedef struct { - USHORT pid; - USHORT opencnt; + USHORT pid; + USHORT opencnt; } QSEMOWNER32, *PQSEMOWNER32; typedef struct { - PQSEMOWNER32 own; - PCHAR name; - PVOID semrecs; /* array of associated sema's */ - USHORT flags; - USHORT semreccnt; - USHORT waitcnt; - USHORT _reserved_; /* padding to ULONG */ + PQSEMOWNER32 own; + PCHAR name; + PVOID semrecs; /* array of associated sema's */ + USHORT flags; + USHORT semreccnt; + USHORT waitcnt; + USHORT _reserved_; /* padding to ULONG */ } QSEMSMUX32, *PQSEMSMUX32; typedef struct { - PQSEMOWNER32 own; - PCHAR name; - PQSEMSMUX32 mux; - USHORT flags; - USHORT postcnt; + PQSEMOWNER32 own; + PCHAR name; + PQSEMSMUX32 mux; + USHORT flags; + USHORT postcnt; } QSEMEV32, *PQSEMEV32; typedef struct { - PQSEMOWNER32 own; - PCHAR name; - PQSEMSMUX32 mux; - USHORT flags; - USHORT refcnt; - USHORT thrdnum; - USHORT _reserved_; /* padding to ULONG */ + PQSEMOWNER32 own; + PCHAR name; + PQSEMSMUX32 mux; + USHORT flags; + USHORT refcnt; + USHORT thrdnum; + USHORT _reserved_; /* padding to ULONG */ } QSEMMUX32, *PQSEMMUX32; typedef struct semstr32 { - struct semstr *next; - QSEMEV32 evsem; - QSEMMUX32 muxsem; - QSEMSMUX32 smuxsem; + struct semstr *next; + QSEMEV32 evsem; + QSEMMUX32 muxsem; + QSEMSMUX32 smuxsem; } QSEMSTRUC32, *PQSEMSTRUC32; typedef struct shrmem { - struct shrmem *next; - USHORT hndshr; - USHORT selshr; - USHORT refcnt; - CHAR name[1]; + struct shrmem *next; + USHORT hndshr; + USHORT selshr; + USHORT refcnt; + CHAR name[1]; } QSHRMEM, *PQSHRMEM; typedef struct module { - struct module *next; - USHORT hndmod; - USHORT type; - ULONG refcnt; - ULONG segcnt; - PVOID _reserved_; - PCHAR name; - USHORT modref[1]; + struct module *next; + USHORT hndmod; + USHORT type; + ULONG refcnt; + ULONG segcnt; + PVOID _reserved_; + PCHAR name; + USHORT modref[1]; } QMODULE, *PQMODULE; typedef struct { - PQGLOBAL gbldata; - PQPROCESS procdata; - PQSEMSTRUC semadata; - PQSEMSTRUC32 sem32data; - PQSHRMEM shrmemdata; - PQMODULE moddata; - PVOID _reserved2_; - PQFILE filedata; + PQGLOBAL gbldata; + PQPROCESS procdata; + PQSEMSTRUC semadata; + PQSEMSTRUC32 sem32data; + PQSHRMEM shrmemdata; + PQMODULE moddata; + PVOID _reserved2_; + PQFILE filedata; } QTOPLEVEL, *PQTOPLEVEL; /* ************************************************************ */ diff --git a/gnu/usr.bin/perl/pad.c b/gnu/usr.bin/perl/pad.c index 2bbb0563e01..e0131ac698c 100644 --- a/gnu/usr.bin/perl/pad.c +++ b/gnu/usr.bin/perl/pad.c @@ -19,7 +19,7 @@ */ /* -=head1 Pad Data Structures +=for apidoc_section $pad =for apidoc Amx|PADLIST *|CvPADLIST|CV *cv @@ -201,38 +201,45 @@ Perl_pad_new(pTHX_ int flags) /* save existing state, ... */ if (flags & padnew_SAVE) { - SAVECOMPPAD(); - if (! (flags & padnew_CLONE)) { - SAVESPTR(PL_comppad_name); - save_strlen((STRLEN *)&PL_padix); - save_strlen((STRLEN *)&PL_constpadix); - save_strlen((STRLEN *)&PL_comppad_name_fill); - save_strlen((STRLEN *)&PL_min_intro_pending); - save_strlen((STRLEN *)&PL_max_intro_pending); - SAVEBOOL(PL_cv_has_eval); - if (flags & padnew_SAVESUB) { - SAVEBOOL(PL_pad_reset_pending); - } - } + SAVECOMPPAD(); + if (! (flags & padnew_CLONE)) { + SAVESPTR(PL_comppad_name); + SAVESTRLEN(PL_padix); + SAVESTRLEN(PL_constpadix); + SAVESTRLEN(PL_comppad_name_fill); + SAVESTRLEN(PL_min_intro_pending); + SAVESTRLEN(PL_max_intro_pending); + SAVEBOOL(PL_cv_has_eval); + if (flags & padnew_SAVESUB) { + SAVEBOOL(PL_pad_reset_pending); + } + } } /* ... create new pad ... */ Newxz(padlist, 1, PADLIST); pad = newAV(); + Newxz(AvALLOC(pad), 4, SV *); /* Originally sized to + match av_extend default */ + AvARRAY(pad) = AvALLOC(pad); + AvMAX(pad) = 3; + AvFILLp(pad) = 0; /* @_ or NULL, set below. */ if (flags & padnew_CLONE) { AV * const a0 = newAV(); /* will be @_ */ - av_store(pad, 0, MUTABLE_SV(a0)); - AvREIFY_only(a0); + AvARRAY(pad)[0] = MUTABLE_SV(a0); + AvREIFY_only(a0); - PadnamelistREFCNT(padname = PL_comppad_name)++; + PadnamelistREFCNT(padname = PL_comppad_name)++; } else { - padlist->xpadl_id = PL_padlist_generation++; - av_store(pad, 0, NULL); - padname = newPADNAMELIST(0); - padnamelist_store(padname, 0, &PL_padname_undef); + padlist->xpadl_id = PL_padlist_generation++; + /* Set implicitly through use of Newxz above + AvARRAY(pad)[0] = NULL; + */ + padname = newPADNAMELIST(0); + padnamelist_store(padname, 0, &PL_padname_undef); } /* Most subroutines never recurse, hence only need 2 entries in the padlist @@ -251,20 +258,20 @@ Perl_pad_new(pTHX_ int flags) PL_curpad = AvARRAY(pad); if (! (flags & padnew_CLONE)) { - PL_comppad_name = padname; - PL_comppad_name_fill = 0; - PL_min_intro_pending = 0; - PL_padix = 0; - PL_constpadix = 0; - PL_cv_has_eval = 0; + PL_comppad_name = padname; + PL_comppad_name_fill = 0; + PL_min_intro_pending = 0; + PL_padix = 0; + PL_constpadix = 0; + PL_cv_has_eval = 0; } DEBUG_X(PerlIO_printf(Perl_debug_log, - "Pad 0x%" UVxf "[0x%" UVxf "] new: compcv=0x%" UVxf - " name=0x%" UVxf " flags=0x%" UVxf "\n", - PTR2UV(PL_comppad), PTR2UV(PL_curpad), PTR2UV(PL_compcv), - PTR2UV(padname), (UV)flags - ) + "Pad 0x%" UVxf "[0x%" UVxf "] new: compcv=0x%" UVxf + " name=0x%" UVxf " flags=0x%" UVxf "\n", + PTR2UV(PL_comppad), PTR2UV(PL_curpad), PTR2UV(PL_compcv), + PTR2UV(padname), (UV)flags + ) ); return (PADLIST*)padlist; @@ -272,7 +279,7 @@ Perl_pad_new(pTHX_ int flags) /* -=head1 Embedding Functions +=for apidoc_section $embedding =for apidoc cv_undef @@ -302,15 +309,15 @@ Perl_cv_undef_flags(pTHX_ CV *cv, U32 flags) PERL_ARGS_ASSERT_CV_UNDEF_FLAGS; DEBUG_X(PerlIO_printf(Perl_debug_log, - "CV undef: cv=0x%" UVxf " comppad=0x%" UVxf "\n", - PTR2UV(cv), PTR2UV(PL_comppad)) + "CV undef: cv=0x%" UVxf " comppad=0x%" UVxf "\n", + PTR2UV(cv), PTR2UV(PL_comppad)) ); if (CvFILE(&cvbody)) { - char * file = CvFILE(&cvbody); - CvFILE(&cvbody) = NULL; - if(CvDYNFILE(&cvbody)) - Safefree(file); + char * file = CvFILE(&cvbody); + CvFILE(&cvbody) = NULL; + if(CvDYNFILE(&cvbody)) + Safefree(file); } /* CvSLABBED_off(&cvbody); *//* turned off below */ @@ -332,7 +339,7 @@ Perl_cv_undef_flags(pTHX_ CV *cv, U32 flags) CvSTART(&cvbody) = NULL; LEAVE; } - else if (CvSLABBED(&cvbody)) { + else if (CvSLABBED(&cvbody)) { if( CvSTART(&cvbody)) { ENTER; PAD_SAVE_SETNULLPAD(); @@ -351,128 +358,128 @@ Perl_cv_undef_flags(pTHX_ CV *cv, U32 flags) } } else { /* dont bother checking if CvXSUB(cv) is true, less branching */ - CvXSUB(&cvbody) = NULL; + CvXSUB(&cvbody) = NULL; } SvPOK_off(MUTABLE_SV(cv)); /* forget prototype */ sv_unmagic((SV *)cv, PERL_MAGIC_checkcall); if (!(flags & CV_UNDEF_KEEP_NAME)) { - if (CvNAMED(&cvbody)) { - CvNAME_HEK_set(&cvbody, NULL); - CvNAMED_off(&cvbody); - } - else CvGV_set(cv, NULL); + if (CvNAMED(&cvbody)) { + CvNAME_HEK_set(&cvbody, NULL); + CvNAMED_off(&cvbody); + } + else CvGV_set(cv, NULL); } /* This statement and the subsequence if block was pad_undef(). */ pad_peg("pad_undef"); if (!CvISXSUB(&cvbody) && CvPADLIST(&cvbody)) { - PADOFFSET ix; - const PADLIST *padlist = CvPADLIST(&cvbody); - - /* Free the padlist associated with a CV. - If parts of it happen to be current, we null the relevant PL_*pad* - global vars so that we don't have any dangling references left. - We also repoint the CvOUTSIDE of any about-to-be-orphaned inner - subs to the outer of this cv. */ - - DEBUG_X(PerlIO_printf(Perl_debug_log, - "Pad undef: cv=0x%" UVxf " padlist=0x%" UVxf " comppad=0x%" UVxf "\n", - PTR2UV(cv), PTR2UV(padlist), PTR2UV(PL_comppad)) - ); - - /* detach any '&' anon children in the pad; if afterwards they - * are still live, fix up their CvOUTSIDEs to point to our outside, - * bypassing us. */ - - if (PL_phase != PERL_PHASE_DESTRUCT) { /* don't bother during global destruction */ - CV * const outercv = CvOUTSIDE(&cvbody); - const U32 seq = CvOUTSIDE_SEQ(&cvbody); - PADNAMELIST * const comppad_name = PadlistNAMES(padlist); - PADNAME ** const namepad = PadnamelistARRAY(comppad_name); - PAD * const comppad = PadlistARRAY(padlist)[1]; - SV ** const curpad = AvARRAY(comppad); - for (ix = PadnamelistMAX(comppad_name); ix > 0; ix--) { - PADNAME * const name = namepad[ix]; - if (name && PadnamePV(name) && *PadnamePV(name) == '&') - { - CV * const innercv = MUTABLE_CV(curpad[ix]); - U32 inner_rc; - assert(innercv); - assert(SvTYPE(innercv) != SVt_PVFM); - inner_rc = SvREFCNT(innercv); - assert(inner_rc); - - if (SvREFCNT(comppad) < 2) { /* allow for /(?{ sub{} })/ */ - curpad[ix] = NULL; - SvREFCNT_dec_NN(innercv); - inner_rc--; - } - - /* in use, not just a prototype */ - if (inner_rc && SvTYPE(innercv) == SVt_PVCV - && (CvOUTSIDE(innercv) == cv)) - { - assert(CvWEAKOUTSIDE(innercv)); - /* don't relink to grandfather if he's being freed */ - if (outercv && SvREFCNT(outercv)) { - CvWEAKOUTSIDE_off(innercv); - CvOUTSIDE(innercv) = outercv; - CvOUTSIDE_SEQ(innercv) = seq; - SvREFCNT_inc_simple_void_NN(outercv); - } - else { - CvOUTSIDE(innercv) = NULL; - } - } - } - } - } - - ix = PadlistMAX(padlist); - while (ix > 0) { - PAD * const sv = PadlistARRAY(padlist)[ix--]; - if (sv) { - if (sv == PL_comppad) { - PL_comppad = NULL; - PL_curpad = NULL; - } - SvREFCNT_dec_NN(sv); - } - } - { - PADNAMELIST * const names = PadlistNAMES(padlist); - if (names == PL_comppad_name && PadnamelistREFCNT(names) == 1) - PL_comppad_name = NULL; - PadnamelistREFCNT_dec(names); - } - if (PadlistARRAY(padlist)) Safefree(PadlistARRAY(padlist)); - Safefree(padlist); - CvPADLIST_set(&cvbody, NULL); + PADOFFSET ix; + const PADLIST *padlist = CvPADLIST(&cvbody); + + /* Free the padlist associated with a CV. + If parts of it happen to be current, we null the relevant PL_*pad* + global vars so that we don't have any dangling references left. + We also repoint the CvOUTSIDE of any about-to-be-orphaned inner + subs to the outer of this cv. */ + + DEBUG_X(PerlIO_printf(Perl_debug_log, + "Pad undef: cv=0x%" UVxf " padlist=0x%" UVxf " comppad=0x%" UVxf "\n", + PTR2UV(cv), PTR2UV(padlist), PTR2UV(PL_comppad)) + ); + + /* detach any '&' anon children in the pad; if afterwards they + * are still live, fix up their CvOUTSIDEs to point to our outside, + * bypassing us. */ + + if (PL_phase != PERL_PHASE_DESTRUCT) { /* don't bother during global destruction */ + CV * const outercv = CvOUTSIDE(&cvbody); + const U32 seq = CvOUTSIDE_SEQ(&cvbody); + PADNAMELIST * const comppad_name = PadlistNAMES(padlist); + PADNAME ** const namepad = PadnamelistARRAY(comppad_name); + PAD * const comppad = PadlistARRAY(padlist)[1]; + SV ** const curpad = AvARRAY(comppad); + for (ix = PadnamelistMAX(comppad_name); ix > 0; ix--) { + PADNAME * const name = namepad[ix]; + if (name && PadnamePV(name) && *PadnamePV(name) == '&') + { + CV * const innercv = MUTABLE_CV(curpad[ix]); + U32 inner_rc; + assert(innercv); + assert(SvTYPE(innercv) != SVt_PVFM); + inner_rc = SvREFCNT(innercv); + assert(inner_rc); + + if (SvREFCNT(comppad) < 2) { /* allow for /(?{ sub{} })/ */ + curpad[ix] = NULL; + SvREFCNT_dec_NN(innercv); + inner_rc--; + } + + /* in use, not just a prototype */ + if (inner_rc && SvTYPE(innercv) == SVt_PVCV + && (CvOUTSIDE(innercv) == cv)) + { + assert(CvWEAKOUTSIDE(innercv)); + /* don't relink to grandfather if he's being freed */ + if (outercv && SvREFCNT(outercv)) { + CvWEAKOUTSIDE_off(innercv); + CvOUTSIDE(innercv) = outercv; + CvOUTSIDE_SEQ(innercv) = seq; + SvREFCNT_inc_simple_void_NN(outercv); + } + else { + CvOUTSIDE(innercv) = NULL; + } + } + } + } + } + + ix = PadlistMAX(padlist); + while (ix > 0) { + PAD * const sv = PadlistARRAY(padlist)[ix--]; + if (sv) { + if (sv == PL_comppad) { + PL_comppad = NULL; + PL_curpad = NULL; + } + SvREFCNT_dec_NN(sv); + } + } + { + PADNAMELIST * const names = PadlistNAMES(padlist); + if (names == PL_comppad_name && PadnamelistREFCNT(names) == 1) + PL_comppad_name = NULL; + PadnamelistREFCNT_dec(names); + } + if (PadlistARRAY(padlist)) Safefree(PadlistARRAY(padlist)); + Safefree(padlist); + CvPADLIST_set(&cvbody, NULL); } else if (CvISXSUB(&cvbody)) - CvHSCXT(&cvbody) = NULL; + CvHSCXT(&cvbody) = NULL; /* else is (!CvISXSUB(&cvbody) && !CvPADLIST(&cvbody)) {do nothing;} */ /* remove CvOUTSIDE unless this is an undef rather than a free */ if (!SvREFCNT(cv)) { - CV * outside = CvOUTSIDE(&cvbody); - if(outside) { - CvOUTSIDE(&cvbody) = NULL; - if (!CvWEAKOUTSIDE(&cvbody)) - SvREFCNT_dec_NN(outside); - } + CV * outside = CvOUTSIDE(&cvbody); + if(outside) { + CvOUTSIDE(&cvbody) = NULL; + if (!CvWEAKOUTSIDE(&cvbody)) + SvREFCNT_dec_NN(outside); + } } if (CvCONST(&cvbody)) { - SvREFCNT_dec(MUTABLE_SV(CvXSUBANY(&cvbody).any_ptr)); - /* CvCONST_off(cv); *//* turned off below */ + SvREFCNT_dec(MUTABLE_SV(CvXSUBANY(&cvbody).any_ptr)); + /* CvCONST_off(cv); *//* turned off below */ } /* delete all flags except WEAKOUTSIDE and CVGV_RC, which indicate the * ref status of CvOUTSIDE and CvGV, and ANON, NAMED and * LEXICAL, which are used to determine the sub's name. */ CvFLAGS(&cvbody) &= (CVf_WEAKOUTSIDE|CVf_CVGV_RC|CVf_ANON|CVf_LEXICAL - |CVf_NAMED); + |CVf_NAMED); } /* @@ -508,11 +515,11 @@ Perl_cv_forget_slab(pTHX_ CV *cv) if (slab) { #ifdef PERL_DEBUG_READONLY_OPS - const size_t refcnt = slab->opslab_refcnt; + const size_t refcnt = slab->opslab_refcnt; #endif - OpslabREFCNT_dec(slab); + OpslabREFCNT_dec(slab); #ifdef PERL_DEBUG_READONLY_OPS - if (refcnt > 1) Slab_to_ro(slab); + if (refcnt > 1) Slab_to_ro(slab); #endif } } @@ -534,7 +541,7 @@ is done. Returns the offset of the allocated pad slot. static PADOFFSET S_pad_alloc_name(pTHX_ PADNAME *name, U32 flags, HV *typestash, - HV *ourstash) + HV *ourstash) { const PADOFFSET offset = pad_alloc(OP_PADSV, SVs_PADMY); @@ -543,22 +550,22 @@ S_pad_alloc_name(pTHX_ PADNAME *name, U32 flags, HV *typestash, ASSERT_CURPAD_ACTIVE("pad_alloc_name"); if (typestash) { - SvPAD_TYPED_on(name); - PadnameTYPE(name) = - MUTABLE_HV(SvREFCNT_inc_simple_NN(MUTABLE_SV(typestash))); + SvPAD_TYPED_on(name); + PadnameTYPE(name) = + MUTABLE_HV(SvREFCNT_inc_simple_NN(MUTABLE_SV(typestash))); } if (ourstash) { - SvPAD_OUR_on(name); - SvOURSTASH_set(name, ourstash); - SvREFCNT_inc_simple_void_NN(ourstash); + SvPAD_OUR_on(name); + SvOURSTASH_set(name, ourstash); + SvREFCNT_inc_simple_void_NN(ourstash); } else if (flags & padadd_STATE) { - SvPAD_STATE_on(name); + SvPAD_STATE_on(name); } padnamelist_store(PL_comppad_name, offset, name); if (PadnameLEN(name) > 1) - PadnamelistMAXNAMED(PL_comppad_name) = offset; + PadnamelistMAXNAMED(PL_comppad_name) = offset; return offset; } @@ -585,7 +592,7 @@ flags can be OR'ed together: PADOFFSET Perl_pad_add_name_pvn(pTHX_ const char *namepv, STRLEN namelen, - U32 flags, HV *typestash, HV *ourstash) + U32 flags, HV *typestash, HV *ourstash) { PADOFFSET offset; PADNAME *name; @@ -593,18 +600,18 @@ Perl_pad_add_name_pvn(pTHX_ const char *namepv, STRLEN namelen, PERL_ARGS_ASSERT_PAD_ADD_NAME_PVN; if (flags & ~(padadd_OUR|padadd_STATE|padadd_NO_DUP_CHECK)) - Perl_croak(aTHX_ "panic: pad_add_name_pvn illegal flag bits 0x%" UVxf, - (UV)flags); + Perl_croak(aTHX_ "panic: pad_add_name_pvn illegal flag bits 0x%" UVxf, + (UV)flags); name = newPADNAMEpvn(namepv, namelen); if ((flags & padadd_NO_DUP_CHECK) == 0) { - ENTER; - SAVEFREEPADNAME(name); /* in case of fatal warnings */ - /* check for duplicate declaration */ - pad_check_dup(name, flags & padadd_OUR, ourstash); - PadnameREFCNT(name)++; - LEAVE; + ENTER; + SAVEFREEPADNAME(name); /* in case of fatal warnings */ + /* check for duplicate declaration */ + pad_check_dup(name, flags & padadd_OUR, ourstash); + PadnameREFCNT(name)++; + LEAVE; } offset = pad_alloc_name(name, flags, typestash, ourstash); @@ -614,22 +621,22 @@ Perl_pad_add_name_pvn(pTHX_ const char *namepv, STRLEN namelen, COP_SEQ_RANGE_HIGH_set(name, 0); if (!PL_min_intro_pending) - PL_min_intro_pending = offset; + PL_min_intro_pending = offset; PL_max_intro_pending = offset; /* if it's not a simple scalar, replace with an AV or HV */ assert(SvTYPE(PL_curpad[offset]) == SVt_NULL); assert(SvREFCNT(PL_curpad[offset]) == 1); if (namelen != 0 && *namepv == '@') - sv_upgrade(PL_curpad[offset], SVt_PVAV); + sv_upgrade(PL_curpad[offset], SVt_PVAV); else if (namelen != 0 && *namepv == '%') - sv_upgrade(PL_curpad[offset], SVt_PVHV); + sv_upgrade(PL_curpad[offset], SVt_PVHV); else if (namelen != 0 && *namepv == '&') - sv_upgrade(PL_curpad[offset], SVt_PVCV); + sv_upgrade(PL_curpad[offset], SVt_PVCV); assert(SvPADMY(PL_curpad[offset])); DEBUG_Xv(PerlIO_printf(Perl_debug_log, - "Pad addname: %ld \"%s\" new lex=0x%" UVxf "\n", - (long)offset, PadnamePV(name), - PTR2UV(PL_curpad[offset]))); + "Pad addname: %ld \"%s\" new lex=0x%" UVxf "\n", + (long)offset, PadnamePV(name), + PTR2UV(PL_curpad[offset]))); return offset; } @@ -645,7 +652,7 @@ instead of a string/length pair. PADOFFSET Perl_pad_add_name_pv(pTHX_ const char *name, - const U32 flags, HV *typestash, HV *ourstash) + const U32 flags, HV *typestash, HV *ourstash) { PERL_ARGS_ASSERT_PAD_ADD_NAME_PV; return pad_add_name_pvn(name, strlen(name), flags, typestash, ourstash); @@ -706,63 +713,63 @@ Perl_pad_alloc(pTHX_ I32 optype, U32 tmptype) ASSERT_CURPAD_ACTIVE("pad_alloc"); if (AvARRAY(PL_comppad) != PL_curpad) - Perl_croak(aTHX_ "panic: pad_alloc, %p!=%p", - AvARRAY(PL_comppad), PL_curpad); + Perl_croak(aTHX_ "panic: pad_alloc, %p!=%p", + AvARRAY(PL_comppad), PL_curpad); if (PL_pad_reset_pending) - pad_reset(); + pad_reset(); if (tmptype == SVs_PADMY) { /* Not & because this ‘flag’ is 0. */ - /* For a my, simply push a null SV onto the end of PL_comppad. */ - sv = *av_fetch(PL_comppad, AvFILLp(PL_comppad) + 1, TRUE); - retval = (PADOFFSET)AvFILLp(PL_comppad); + /* For a my, simply push a null SV onto the end of PL_comppad. */ + sv = *av_store_simple(PL_comppad, AvFILLp(PL_comppad) + 1, newSV_type(SVt_NULL)); + retval = (PADOFFSET)AvFILLp(PL_comppad); } else { - /* For a tmp, scan the pad from PL_padix upwards - * for a slot which has no name and no active value. - * For a constant, likewise, but use PL_constpadix. - */ - PADNAME * const * const names = PadnamelistARRAY(PL_comppad_name); - const SSize_t names_fill = PadnamelistMAX(PL_comppad_name); - const bool konst = cBOOL(tmptype & SVf_READONLY); - retval = konst ? PL_constpadix : PL_padix; - for (;;) { - /* - * Entries that close over unavailable variables - * in outer subs contain values not marked PADMY. - * Thus we must skip, not just pad values that are - * marked as current pad values, but also those with names. - * If pad_reset is enabled, ‘current’ means different - * things depending on whether we are allocating a con- - * stant or a target. For a target, things marked PADTMP - * can be reused; not so for constants. - */ - PADNAME *pn; - if (++retval <= names_fill && - (pn = names[retval]) && PadnamePV(pn)) - continue; - sv = *av_fetch(PL_comppad, retval, TRUE); - if (!(SvFLAGS(sv) & + /* For a tmp, scan the pad from PL_padix upwards + * for a slot which has no name and no active value. + * For a constant, likewise, but use PL_constpadix. + */ + PADNAME * const * const names = PadnamelistARRAY(PL_comppad_name); + const SSize_t names_fill = PadnamelistMAX(PL_comppad_name); + const bool konst = cBOOL(tmptype & SVf_READONLY); + retval = konst ? PL_constpadix : PL_padix; + for (;;) { + /* + * Entries that close over unavailable variables + * in outer subs contain values not marked PADMY. + * Thus we must skip, not just pad values that are + * marked as current pad values, but also those with names. + * If pad_reset is enabled, ‘current’ means different + * things depending on whether we are allocating a con- + * stant or a target. For a target, things marked PADTMP + * can be reused; not so for constants. + */ + PADNAME *pn; + if (++retval <= names_fill && + (pn = names[retval]) && PadnamePV(pn)) + continue; + sv = *av_fetch_simple(PL_comppad, retval, TRUE); + if (!(SvFLAGS(sv) & #ifdef USE_PAD_RESET - (konst ? SVs_PADTMP : 0) + (konst ? SVs_PADTMP : 0) #else - SVs_PADTMP + SVs_PADTMP #endif - )) - break; - } - if (konst) { - padnamelist_store(PL_comppad_name, retval, &PL_padname_const); - tmptype &= ~SVf_READONLY; - tmptype |= SVs_PADTMP; - } - *(konst ? &PL_constpadix : &PL_padix) = retval; + )) + break; + } + if (konst) { + padnamelist_store(PL_comppad_name, retval, &PL_padname_const); + tmptype &= ~SVf_READONLY; + tmptype |= SVs_PADTMP; + } + *(konst ? &PL_constpadix : &PL_padix) = retval; } SvFLAGS(sv) |= tmptype; PL_curpad = AvARRAY(PL_comppad); DEBUG_X(PerlIO_printf(Perl_debug_log, - "Pad 0x%" UVxf "[0x%" UVxf "] alloc: %ld for %s\n", - PTR2UV(PL_comppad), PTR2UV(PL_curpad), (long) retval, - PL_op_name[optype])); + "Pad 0x%" UVxf "[0x%" UVxf "] alloc: %ld for %s\n", + PTR2UV(PL_comppad), PTR2UV(PL_curpad), (long) retval, + PL_op_name[optype])); #ifdef DEBUG_LEAKING_SCALARS sv->sv_debug_optype = optype; sv->sv_debug_inpad = 1; @@ -809,9 +816,9 @@ Perl_pad_add_anon(pTHX_ CV* func, I32 optype) /* to avoid ref loops, we never have parent + child referencing each * other simultaneously */ if (CvOUTSIDE(func)) { - assert(!CvWEAKOUTSIDE(func)); - CvWEAKOUTSIDE_on(func); - SvREFCNT_dec_NN(CvOUTSIDE(func)); + assert(!CvWEAKOUTSIDE(func)); + CvWEAKOUTSIDE_on(func); + SvREFCNT_dec_NN(CvOUTSIDE(func)); } return ix; } @@ -862,58 +869,58 @@ S_pad_check_dup(pTHX_ PADNAME *name, U32 flags, const HV *ourstash) assert((flags & ~padadd_OUR) == 0); if (PadnamelistMAX(PL_comppad_name) < 0 || !ckWARN(WARN_SHADOW)) - return; /* nothing to check */ + return; /* nothing to check */ svp = PadnamelistARRAY(PL_comppad_name); top = PadnamelistMAX(PL_comppad_name); /* check the current scope */ for (off = top; off > PL_comppad_name_floor; off--) { - PADNAME * const sv = svp[off]; - if (sv - && PadnameLEN(sv) == PadnameLEN(name) - && !PadnameOUTER(sv) - && ( COP_SEQ_RANGE_LOW(sv) == PERL_PADSEQ_INTRO - || COP_SEQ_RANGE_HIGH(sv) == PERL_PADSEQ_INTRO) - && memEQ(PadnamePV(sv), PadnamePV(name), PadnameLEN(name))) - { - if (is_our && (SvPAD_OUR(sv))) - break; /* "our" masking "our" */ - /* diag_listed_as: "%s" variable %s masks earlier declaration in same %s */ - Perl_warner(aTHX_ packWARN(WARN_SHADOW), - "\"%s\" %s %" PNf " masks earlier declaration in same %s", - ( is_our ? "our" : + PADNAME * const sv = svp[off]; + if (sv + && PadnameLEN(sv) == PadnameLEN(name) + && !PadnameOUTER(sv) + && ( COP_SEQ_RANGE_LOW(sv) == PERL_PADSEQ_INTRO + || COP_SEQ_RANGE_HIGH(sv) == PERL_PADSEQ_INTRO) + && memEQ(PadnamePV(sv), PadnamePV(name), PadnameLEN(name))) + { + if (is_our && (SvPAD_OUR(sv))) + break; /* "our" masking "our" */ + /* diag_listed_as: "%s" variable %s masks earlier declaration in same %s */ + Perl_warner(aTHX_ packWARN(WARN_SHADOW), + "\"%s\" %s %" PNf " masks earlier declaration in same %s", + ( is_our ? "our" : PL_parser->in_my == KEY_my ? "my" : PL_parser->in_my == KEY_sigvar ? "my" : "state" ), - *PadnamePV(sv) == '&' ? "subroutine" : "variable", - PNfARG(sv), - (COP_SEQ_RANGE_HIGH(sv) == PERL_PADSEQ_INTRO - ? "scope" : "statement")); - --off; - break; - } + *PadnamePV(sv) == '&' ? "subroutine" : "variable", + PNfARG(sv), + (COP_SEQ_RANGE_HIGH(sv) == PERL_PADSEQ_INTRO + ? "scope" : "statement")); + --off; + break; + } } /* check the rest of the pad */ if (is_our) { - while (off > 0) { - PADNAME * const sv = svp[off]; - if (sv - && PadnameLEN(sv) == PadnameLEN(name) - && !PadnameOUTER(sv) - && ( COP_SEQ_RANGE_LOW(sv) == PERL_PADSEQ_INTRO - || COP_SEQ_RANGE_HIGH(sv) == PERL_PADSEQ_INTRO) - && SvOURSTASH(sv) == ourstash - && memEQ(PadnamePV(sv), PadnamePV(name), PadnameLEN(name))) - { - Perl_warner(aTHX_ packWARN(WARN_SHADOW), - "\"our\" variable %" PNf " redeclared", PNfARG(sv)); - if (off <= PL_comppad_name_floor) - Perl_warner(aTHX_ packWARN(WARN_SHADOW), - "\t(Did you mean \"local\" instead of \"our\"?)\n"); - break; - } - --off; - } + while (off > 0) { + PADNAME * const sv = svp[off]; + if (sv + && PadnameLEN(sv) == PadnameLEN(name) + && !PadnameOUTER(sv) + && ( COP_SEQ_RANGE_LOW(sv) == PERL_PADSEQ_INTRO + || COP_SEQ_RANGE_HIGH(sv) == PERL_PADSEQ_INTRO) + && SvOURSTASH(sv) == ourstash + && memEQ(PadnamePV(sv), PadnamePV(name), PadnameLEN(name))) + { + Perl_warner(aTHX_ packWARN(WARN_SHADOW), + "\"our\" variable %" PNf " redeclared", PNfARG(sv)); + if (off <= PL_comppad_name_floor) + Perl_warner(aTHX_ packWARN(WARN_SHADOW), + "\t(Did you mean \"local\" instead of \"our\"?)\n"); + break; + } + --off; + } } } @@ -947,8 +954,8 @@ Perl_pad_findmy_pvn(pTHX_ const char *namepv, STRLEN namelen, U32 flags) pad_peg("pad_findmy_pvn"); if (flags) - Perl_croak(aTHX_ "panic: pad_findmy_pvn illegal flag bits 0x%" UVxf, - (UV)flags); + Perl_croak(aTHX_ "panic: pad_findmy_pvn illegal flag bits 0x%" UVxf, + (UV)flags); /* compilation errors can zero PL_compcv */ if (!PL_compcv) @@ -957,7 +964,7 @@ Perl_pad_findmy_pvn(pTHX_ const char *namepv, STRLEN namelen, U32 flags) offset = pad_findlex(namepv, namelen, flags, PL_compcv, PL_cop_seqmax, 1, NULL, &out_pn, &out_flags); if (offset != NOT_IN_PAD) - return offset; + return offset; /* Skip the ‘our’ hack for subroutines, as the warning does not apply. */ @@ -977,8 +984,8 @@ Perl_pad_findmy_pvn(pTHX_ const char *namepv, STRLEN namelen, U32 flags) && ( PadnamePV(name) == namepv || memEQ(PadnamePV(name), namepv, namelen) ) && COP_SEQ_RANGE_LOW(name) == PERL_PADSEQ_INTRO - ) - return offset; + ) + return offset; } return NOT_IN_PAD; } @@ -1070,7 +1077,7 @@ associated with the C field of a fake pad name. Note that C is recursive; it recurses up the chain of CVs, then comes back down, adding fake entries as it goes. It has to be this way -because fake names in anon protoypes have to store in C the +because fake names in anon prototypes have to store in C the index into the parent pad. =cut @@ -1088,16 +1095,16 @@ S_unavailable(pTHX_ PADNAME *name) { /* diag_listed_as: Variable "%s" is not available */ Perl_ck_warner(aTHX_ packWARN(WARN_CLOSURE), - "%s \"%" PNf "\" is not available", - *PadnamePV(name) == '&' - ? "Subroutine" - : "Variable", - PNfARG(name)); + "%s \"%" PNf "\" is not available", + *PadnamePV(name) == '&' + ? "Subroutine" + : "Variable", + PNfARG(name)); } STATIC PADOFFSET S_pad_findlex(pTHX_ const char *namepv, STRLEN namelen, U32 flags, const CV* cv, U32 seq, - int warn, SV** out_capture, PADNAME** out_name, int *out_flags) + int warn, SV** out_capture, PADNAME** out_name, int *out_flags) { PADOFFSET offset, new_offset; SV *new_capture; @@ -1109,226 +1116,226 @@ S_pad_findlex(pTHX_ const char *namepv, STRLEN namelen, U32 flags, const CV* cv, flags &= ~ padadd_STALEOK; /* one-shot flag */ if (flags) - Perl_croak(aTHX_ "panic: pad_findlex illegal flag bits 0x%" UVxf, - (UV)flags); + Perl_croak(aTHX_ "panic: pad_findlex illegal flag bits 0x%" UVxf, + (UV)flags); *out_flags = 0; DEBUG_Xv(PerlIO_printf(Perl_debug_log, - "Pad findlex cv=0x%" UVxf " searching \"%.*s\" seq=%d%s\n", - PTR2UV(cv), (int)namelen, namepv, (int)seq, - out_capture ? " capturing" : "" )); + "Pad findlex cv=0x%" UVxf " searching \"%.*s\" seq=%d%s\n", + PTR2UV(cv), (int)namelen, namepv, (int)seq, + out_capture ? " capturing" : "" )); /* first, search this pad */ if (padlist) { /* not an undef CV */ - PADOFFSET fake_offset = 0; + PADOFFSET fake_offset = 0; const PADNAMELIST * const names = PadlistNAMES(padlist); - PADNAME * const * const name_p = PadnamelistARRAY(names); + PADNAME * const * const name_p = PadnamelistARRAY(names); - for (offset = PadnamelistMAXNAMED(names); offset > 0; offset--) { + for (offset = PadnamelistMAXNAMED(names); offset > 0; offset--) { const PADNAME * const name = name_p[offset]; if (name && PadnameLEN(name) == namelen && ( PadnamePV(name) == namepv || memEQ(PadnamePV(name), namepv, namelen) )) - { - if (PadnameOUTER(name)) { - fake_offset = offset; /* in case we don't find a real one */ - continue; - } - if (PadnameIN_SCOPE(name, seq)) - break; - } - } - - if (offset > 0 || fake_offset > 0 ) { /* a match! */ - if (offset > 0) { /* not fake */ - fake_offset = 0; - *out_name = name_p[offset]; /* return the name */ - - /* set PAD_FAKELEX_MULTI if this lex can have multiple - * instances. For now, we just test !CvUNIQUE(cv), but - * ideally, we should detect my's declared within loops - * etc - this would allow a wider range of 'not stayed - * shared' warnings. We also treated already-compiled - * lexes as not multi as viewed from evals. */ - - *out_flags = CvANON(cv) ? - PAD_FAKELEX_ANON : - (!CvUNIQUE(cv) && ! CvCOMPILED(cv)) - ? PAD_FAKELEX_MULTI : 0; - - DEBUG_Xv(PerlIO_printf(Perl_debug_log, - "Pad findlex cv=0x%" UVxf " matched: offset=%ld (%lu,%lu)\n", - PTR2UV(cv), (long)offset, - (unsigned long)COP_SEQ_RANGE_LOW(*out_name), - (unsigned long)COP_SEQ_RANGE_HIGH(*out_name))); - } - else { /* fake match */ - offset = fake_offset; - *out_name = name_p[offset]; /* return the name */ - *out_flags = PARENT_FAKELEX_FLAGS(*out_name); - DEBUG_Xv(PerlIO_printf(Perl_debug_log, - "Pad findlex cv=0x%" UVxf " matched: offset=%ld flags=0x%lx index=%lu\n", - PTR2UV(cv), (long)offset, (unsigned long)*out_flags, - (unsigned long) PARENT_PAD_INDEX(*out_name) - )); - } - - /* return the lex? */ - - if (out_capture) { - - /* our ? */ - if (PadnameIsOUR(*out_name)) { - *out_capture = NULL; - return offset; - } - - /* trying to capture from an anon prototype? */ - if (CvCOMPILED(cv) - ? CvANON(cv) && CvCLONE(cv) && !CvCLONED(cv) - : *out_flags & PAD_FAKELEX_ANON) - { - if (warn) - S_unavailable(aTHX_ - *out_name); - - *out_capture = NULL; - } - - /* real value */ - else { - int newwarn = warn; - if (!CvCOMPILED(cv) && (*out_flags & PAD_FAKELEX_MULTI) - && !PadnameIsSTATE(name_p[offset]) - && warn && ckWARN(WARN_CLOSURE)) { - newwarn = 0; - /* diag_listed_as: Variable "%s" will not stay - shared */ - Perl_warner(aTHX_ packWARN(WARN_CLOSURE), - "%s \"%" UTF8f "\" will not stay shared", - *namepv == '&' ? "Subroutine" : "Variable", - UTF8fARG(1, namelen, namepv)); - } - - if (fake_offset && CvANON(cv) - && CvCLONE(cv) &&!CvCLONED(cv)) - { - PADNAME *n; - /* not yet caught - look further up */ - DEBUG_Xv(PerlIO_printf(Perl_debug_log, - "Pad findlex cv=0x%" UVxf " chasing lex in outer pad\n", - PTR2UV(cv))); - n = *out_name; - (void) pad_findlex(namepv, namelen, flags, CvOUTSIDE(cv), - CvOUTSIDE_SEQ(cv), - newwarn, out_capture, out_name, out_flags); - *out_name = n; - return offset; - } - - *out_capture = AvARRAY(PadlistARRAY(padlist)[ - CvDEPTH(cv) ? CvDEPTH(cv) : 1])[offset]; - DEBUG_Xv(PerlIO_printf(Perl_debug_log, - "Pad findlex cv=0x%" UVxf " found lex=0x%" UVxf "\n", - PTR2UV(cv), PTR2UV(*out_capture))); - - if (SvPADSTALE(*out_capture) - && (!CvDEPTH(cv) || !staleok) - && !PadnameIsSTATE(name_p[offset])) - { - S_unavailable(aTHX_ - name_p[offset]); - *out_capture = NULL; - } - } - if (!*out_capture) { - if (namelen != 0 && *namepv == '@') - *out_capture = sv_2mortal(MUTABLE_SV(newAV())); - else if (namelen != 0 && *namepv == '%') - *out_capture = sv_2mortal(MUTABLE_SV(newHV())); - else if (namelen != 0 && *namepv == '&') - *out_capture = sv_2mortal(newSV_type(SVt_PVCV)); - else - *out_capture = sv_newmortal(); - } - } - - return offset; - } + { + if (PadnameOUTER(name)) { + fake_offset = offset; /* in case we don't find a real one */ + continue; + } + if (PadnameIN_SCOPE(name, seq)) + break; + } + } + + if (offset > 0 || fake_offset > 0 ) { /* a match! */ + if (offset > 0) { /* not fake */ + fake_offset = 0; + *out_name = name_p[offset]; /* return the name */ + + /* set PAD_FAKELEX_MULTI if this lex can have multiple + * instances. For now, we just test !CvUNIQUE(cv), but + * ideally, we should detect my's declared within loops + * etc - this would allow a wider range of 'not stayed + * shared' warnings. We also treated already-compiled + * lexes as not multi as viewed from evals. */ + + *out_flags = CvANON(cv) ? + PAD_FAKELEX_ANON : + (!CvUNIQUE(cv) && ! CvCOMPILED(cv)) + ? PAD_FAKELEX_MULTI : 0; + + DEBUG_Xv(PerlIO_printf(Perl_debug_log, + "Pad findlex cv=0x%" UVxf " matched: offset=%ld (%lu,%lu)\n", + PTR2UV(cv), (long)offset, + (unsigned long)COP_SEQ_RANGE_LOW(*out_name), + (unsigned long)COP_SEQ_RANGE_HIGH(*out_name))); + } + else { /* fake match */ + offset = fake_offset; + *out_name = name_p[offset]; /* return the name */ + *out_flags = PARENT_FAKELEX_FLAGS(*out_name); + DEBUG_Xv(PerlIO_printf(Perl_debug_log, + "Pad findlex cv=0x%" UVxf " matched: offset=%ld flags=0x%lx index=%lu\n", + PTR2UV(cv), (long)offset, (unsigned long)*out_flags, + (unsigned long) PARENT_PAD_INDEX(*out_name) + )); + } + + /* return the lex? */ + + if (out_capture) { + + /* our ? */ + if (PadnameIsOUR(*out_name)) { + *out_capture = NULL; + return offset; + } + + /* trying to capture from an anon prototype? */ + if (CvCOMPILED(cv) + ? CvANON(cv) && CvCLONE(cv) && !CvCLONED(cv) + : *out_flags & PAD_FAKELEX_ANON) + { + if (warn) + S_unavailable(aTHX_ + *out_name); + + *out_capture = NULL; + } + + /* real value */ + else { + int newwarn = warn; + if (!CvCOMPILED(cv) && (*out_flags & PAD_FAKELEX_MULTI) + && !PadnameIsSTATE(name_p[offset]) + && warn && ckWARN(WARN_CLOSURE)) { + newwarn = 0; + /* diag_listed_as: Variable "%s" will not stay + shared */ + Perl_warner(aTHX_ packWARN(WARN_CLOSURE), + "%s \"%" UTF8f "\" will not stay shared", + *namepv == '&' ? "Subroutine" : "Variable", + UTF8fARG(1, namelen, namepv)); + } + + if (fake_offset && CvANON(cv) + && CvCLONE(cv) &&!CvCLONED(cv)) + { + PADNAME *n; + /* not yet caught - look further up */ + DEBUG_Xv(PerlIO_printf(Perl_debug_log, + "Pad findlex cv=0x%" UVxf " chasing lex in outer pad\n", + PTR2UV(cv))); + n = *out_name; + (void) pad_findlex(namepv, namelen, flags, CvOUTSIDE(cv), + CvOUTSIDE_SEQ(cv), + newwarn, out_capture, out_name, out_flags); + *out_name = n; + return offset; + } + + *out_capture = AvARRAY(PadlistARRAY(padlist)[ + CvDEPTH(cv) ? CvDEPTH(cv) : 1])[offset]; + DEBUG_Xv(PerlIO_printf(Perl_debug_log, + "Pad findlex cv=0x%" UVxf " found lex=0x%" UVxf "\n", + PTR2UV(cv), PTR2UV(*out_capture))); + + if (SvPADSTALE(*out_capture) + && (!CvDEPTH(cv) || !staleok) + && !PadnameIsSTATE(name_p[offset])) + { + S_unavailable(aTHX_ + name_p[offset]); + *out_capture = NULL; + } + } + if (!*out_capture) { + if (namelen != 0 && *namepv == '@') + *out_capture = newSV_type_mortal(SVt_PVAV); + else if (namelen != 0 && *namepv == '%') + *out_capture = newSV_type_mortal(SVt_PVHV); + else if (namelen != 0 && *namepv == '&') + *out_capture = newSV_type_mortal(SVt_PVCV); + else + *out_capture = newSV_type_mortal(SVt_NULL); + } + } + + return offset; + } } /* it's not in this pad - try above */ if (!CvOUTSIDE(cv)) - return NOT_IN_PAD; + return NOT_IN_PAD; /* out_capture non-null means caller wants us to capture lex; in * addition we capture ourselves unless it's an ANON/format */ new_capturep = out_capture ? out_capture : - CvLATE(cv) ? NULL : &new_capture; + CvLATE(cv) ? NULL : &new_capture; offset = pad_findlex(namepv, namelen, - flags | padadd_STALEOK*(new_capturep == &new_capture), - CvOUTSIDE(cv), CvOUTSIDE_SEQ(cv), 1, - new_capturep, out_name, out_flags); + flags | padadd_STALEOK*(new_capturep == &new_capture), + CvOUTSIDE(cv), CvOUTSIDE_SEQ(cv), 1, + new_capturep, out_name, out_flags); if (offset == NOT_IN_PAD) - return NOT_IN_PAD; + return NOT_IN_PAD; /* found in an outer CV. Add appropriate fake entry to this pad */ /* don't add new fake entries (via eval) to CVs that we have already * finished compiling, or to undef CVs */ if (CvCOMPILED(cv) || !padlist) - return 0; /* this dummy (and invalid) value isnt used by the caller */ + return 0; /* this dummy (and invalid) value isnt used by the caller */ { - PADNAME *new_name = newPADNAMEouter(*out_name); - PADNAMELIST * const ocomppad_name = PL_comppad_name; - PAD * const ocomppad = PL_comppad; - PL_comppad_name = PadlistNAMES(padlist); - PL_comppad = PadlistARRAY(padlist)[1]; - PL_curpad = AvARRAY(PL_comppad); - - new_offset - = pad_alloc_name(new_name, - PadnameIsSTATE(*out_name) ? padadd_STATE : 0, - PadnameTYPE(*out_name), - PadnameOURSTASH(*out_name) - ); - - DEBUG_Xv(PerlIO_printf(Perl_debug_log, - "Pad addname: %ld \"%.*s\" FAKE\n", - (long)new_offset, - (int) PadnameLEN(new_name), - PadnamePV(new_name))); - PARENT_FAKELEX_FLAGS_set(new_name, *out_flags); - - PARENT_PAD_INDEX_set(new_name, 0); - if (PadnameIsOUR(new_name)) { - NOOP; /* do nothing */ - } - else if (CvLATE(cv)) { - /* delayed creation - just note the offset within parent pad */ - PARENT_PAD_INDEX_set(new_name, offset); - CvCLONE_on(cv); - } - else { - /* immediate creation - capture outer value right now */ - av_store(PL_comppad, new_offset, SvREFCNT_inc(*new_capturep)); - /* But also note the offset, as newMYSUB needs it */ - PARENT_PAD_INDEX_set(new_name, offset); - DEBUG_Xv(PerlIO_printf(Perl_debug_log, - "Pad findlex cv=0x%" UVxf " saved captured sv 0x%" UVxf " at offset %ld\n", - PTR2UV(cv), PTR2UV(*new_capturep), (long)new_offset)); - } - *out_name = new_name; - *out_flags = PARENT_FAKELEX_FLAGS(new_name); - - PL_comppad_name = ocomppad_name; - PL_comppad = ocomppad; - PL_curpad = ocomppad ? AvARRAY(ocomppad) : NULL; + PADNAME *new_name = newPADNAMEouter(*out_name); + PADNAMELIST * const ocomppad_name = PL_comppad_name; + PAD * const ocomppad = PL_comppad; + PL_comppad_name = PadlistNAMES(padlist); + PL_comppad = PadlistARRAY(padlist)[1]; + PL_curpad = AvARRAY(PL_comppad); + + new_offset + = pad_alloc_name(new_name, + PadnameIsSTATE(*out_name) ? padadd_STATE : 0, + PadnameTYPE(*out_name), + PadnameOURSTASH(*out_name) + ); + + DEBUG_Xv(PerlIO_printf(Perl_debug_log, + "Pad addname: %ld \"%.*s\" FAKE\n", + (long)new_offset, + (int) PadnameLEN(new_name), + PadnamePV(new_name))); + PARENT_FAKELEX_FLAGS_set(new_name, *out_flags); + + PARENT_PAD_INDEX_set(new_name, 0); + if (PadnameIsOUR(new_name)) { + NOOP; /* do nothing */ + } + else if (CvLATE(cv)) { + /* delayed creation - just note the offset within parent pad */ + PARENT_PAD_INDEX_set(new_name, offset); + CvCLONE_on(cv); + } + else { + /* immediate creation - capture outer value right now */ + av_store(PL_comppad, new_offset, SvREFCNT_inc(*new_capturep)); + /* But also note the offset, as newMYSUB needs it */ + PARENT_PAD_INDEX_set(new_name, offset); + DEBUG_Xv(PerlIO_printf(Perl_debug_log, + "Pad findlex cv=0x%" UVxf " saved captured sv 0x%" UVxf " at offset %ld\n", + PTR2UV(cv), PTR2UV(*new_capturep), (long)new_offset)); + } + *out_name = new_name; + *out_flags = PARENT_FAKELEX_FLAGS(new_name); + + PL_comppad_name = ocomppad_name; + PL_comppad = ocomppad; + PL_curpad = ocomppad ? AvARRAY(ocomppad) : NULL; } return new_offset; } @@ -1350,10 +1357,10 @@ Perl_pad_sv(pTHX_ PADOFFSET po) ASSERT_CURPAD_ACTIVE("pad_sv"); if (!po) - Perl_croak(aTHX_ "panic: pad_sv po"); + Perl_croak(aTHX_ "panic: pad_sv po"); DEBUG_X(PerlIO_printf(Perl_debug_log, - "Pad 0x%" UVxf "[0x%" UVxf "] sv: %ld sv=0x%" UVxf "\n", - PTR2UV(PL_comppad), PTR2UV(PL_curpad), (long)po, PTR2UV(PL_curpad[po])) + "Pad 0x%" UVxf "[0x%" UVxf "] sv: %ld sv=0x%" UVxf "\n", + PTR2UV(PL_comppad), PTR2UV(PL_curpad), (long)po, PTR2UV(PL_curpad[po])) ); return PL_curpad[po]; } @@ -1375,8 +1382,8 @@ Perl_pad_setsv(pTHX_ PADOFFSET po, SV* sv) ASSERT_CURPAD_ACTIVE("pad_setsv"); DEBUG_X(PerlIO_printf(Perl_debug_log, - "Pad 0x%" UVxf "[0x%" UVxf "] setsv: %ld sv=0x%" UVxf "\n", - PTR2UV(PL_comppad), PTR2UV(PL_curpad), (long)po, PTR2UV(sv)) + "Pad 0x%" UVxf "[0x%" UVxf "] setsv: %ld sv=0x%" UVxf "\n", + PTR2UV(PL_comppad), PTR2UV(PL_curpad), (long)po, PTR2UV(sv)) ); PL_curpad[po] = sv; } @@ -1395,21 +1402,21 @@ void Perl_pad_block_start(pTHX_ int full) { ASSERT_CURPAD_ACTIVE("pad_block_start"); - save_strlen((STRLEN *)&PL_comppad_name_floor); + SAVESTRLEN(PL_comppad_name_floor); PL_comppad_name_floor = PadnamelistMAX(PL_comppad_name); if (full) - PL_comppad_name_fill = PL_comppad_name_floor; + PL_comppad_name_fill = PL_comppad_name_floor; if (PL_comppad_name_floor < 0) - PL_comppad_name_floor = 0; - save_strlen((STRLEN *)&PL_min_intro_pending); - save_strlen((STRLEN *)&PL_max_intro_pending); + PL_comppad_name_floor = 0; + SAVESTRLEN(PL_min_intro_pending); + SAVESTRLEN(PL_max_intro_pending); PL_min_intro_pending = 0; - save_strlen((STRLEN *)&PL_comppad_name_fill); - save_strlen((STRLEN *)&PL_padix_floor); + SAVESTRLEN(PL_comppad_name_fill); + SAVESTRLEN(PL_padix_floor); /* PL_padix_floor is what PL_padix is reset to at the start of each statement, by pad_reset(). We set it when entering a new scope to keep things like this working: - print "$foo$bar", do { this(); that() . "foo" }; + print "$foo$bar", do { this(); that() . "foo" }; We must not let "$foo$bar" and the later concatenation share the same target. */ PL_padix_floor = PL_padix; @@ -1435,36 +1442,36 @@ Perl_intro_my(pTHX) ASSERT_CURPAD_ACTIVE("intro_my"); if (PL_compiling.cop_seq) { - seq = PL_compiling.cop_seq; - PL_compiling.cop_seq = 0; + seq = PL_compiling.cop_seq; + PL_compiling.cop_seq = 0; } else - seq = PL_cop_seqmax; + seq = PL_cop_seqmax; if (! PL_min_intro_pending) - return seq; + return seq; svp = PadnamelistARRAY(PL_comppad_name); for (i = PL_min_intro_pending; i <= PL_max_intro_pending; i++) { - PADNAME * const sv = svp[i]; - - if (sv && PadnameLEN(sv) && !PadnameOUTER(sv) - && COP_SEQ_RANGE_LOW(sv) == PERL_PADSEQ_INTRO) - { - COP_SEQ_RANGE_HIGH_set(sv, PERL_PADSEQ_INTRO); /* Don't know scope end yet. */ - COP_SEQ_RANGE_LOW_set(sv, PL_cop_seqmax); - DEBUG_Xv(PerlIO_printf(Perl_debug_log, - "Pad intromy: %ld \"%s\", (%lu,%lu)\n", - (long)i, PadnamePV(sv), - (unsigned long)COP_SEQ_RANGE_LOW(sv), - (unsigned long)COP_SEQ_RANGE_HIGH(sv)) - ); - } + PADNAME * const sv = svp[i]; + + if (sv && PadnameLEN(sv) && !PadnameOUTER(sv) + && COP_SEQ_RANGE_LOW(sv) == PERL_PADSEQ_INTRO) + { + COP_SEQ_RANGE_HIGH_set(sv, PERL_PADSEQ_INTRO); /* Don't know scope end yet. */ + COP_SEQ_RANGE_LOW_set(sv, PL_cop_seqmax); + DEBUG_Xv(PerlIO_printf(Perl_debug_log, + "Pad intromy: %ld \"%s\", (%lu,%lu)\n", + (long)i, PadnamePV(sv), + (unsigned long)COP_SEQ_RANGE_LOW(sv), + (unsigned long)COP_SEQ_RANGE_HIGH(sv)) + ); + } } COP_SEQMAX_INC; PL_min_intro_pending = 0; PL_comppad_name_fill = PL_max_intro_pending; /* Needn't search higher */ DEBUG_Xv(PerlIO_printf(Perl_debug_log, - "Pad intromy: seq -> %ld\n", (long)(PL_cop_seqmax))); + "Pad intromy: seq -> %ld\n", (long)(PL_cop_seqmax))); return seq; } @@ -1489,39 +1496,39 @@ Perl_pad_leavemy(pTHX) ASSERT_CURPAD_ACTIVE("pad_leavemy"); if (PL_min_intro_pending && PL_comppad_name_fill < PL_min_intro_pending) { - for (off = PL_max_intro_pending; off >= PL_min_intro_pending; off--) { - const PADNAME * const name = svp[off]; - if (name && PadnameLEN(name) && !PadnameOUTER(name)) - Perl_ck_warner_d(aTHX_ packWARN(WARN_INTERNAL), - "%" PNf " never introduced", - PNfARG(name)); - } + for (off = PL_max_intro_pending; off >= PL_min_intro_pending; off--) { + const PADNAME * const name = svp[off]; + if (name && PadnameLEN(name) && !PadnameOUTER(name)) + Perl_ck_warner_d(aTHX_ packWARN(WARN_INTERNAL), + "%" PNf " never introduced", + PNfARG(name)); + } } /* "Deintroduce" my variables that are leaving with this scope. */ for (off = PadnamelistMAX(PL_comppad_name); - off > PL_comppad_name_fill; off--) { - PADNAME * const sv = svp[off]; - if (sv && PadnameLEN(sv) && !PadnameOUTER(sv) - && COP_SEQ_RANGE_HIGH(sv) == PERL_PADSEQ_INTRO) - { - COP_SEQ_RANGE_HIGH_set(sv, PL_cop_seqmax); - DEBUG_Xv(PerlIO_printf(Perl_debug_log, - "Pad leavemy: %ld \"%s\", (%lu,%lu)\n", - (long)off, PadnamePV(sv), - (unsigned long)COP_SEQ_RANGE_LOW(sv), - (unsigned long)COP_SEQ_RANGE_HIGH(sv)) - ); - if (!PadnameIsSTATE(sv) && !PadnameIsOUR(sv) - && *PadnamePV(sv) == '&' && PadnameLEN(sv) > 1) { - OP *kid = newOP(OP_INTROCV, 0); - kid->op_targ = off; - o = op_prepend_elem(OP_LINESEQ, kid, o); - } - } + off > PL_comppad_name_fill; off--) { + PADNAME * const sv = svp[off]; + if (sv && PadnameLEN(sv) && !PadnameOUTER(sv) + && COP_SEQ_RANGE_HIGH(sv) == PERL_PADSEQ_INTRO) + { + COP_SEQ_RANGE_HIGH_set(sv, PL_cop_seqmax); + DEBUG_Xv(PerlIO_printf(Perl_debug_log, + "Pad leavemy: %ld \"%s\", (%lu,%lu)\n", + (long)off, PadnamePV(sv), + (unsigned long)COP_SEQ_RANGE_LOW(sv), + (unsigned long)COP_SEQ_RANGE_HIGH(sv)) + ); + if (!PadnameIsSTATE(sv) && !PadnameIsOUR(sv) + && *PadnamePV(sv) == '&' && PadnameLEN(sv) > 1) { + OP *kid = newOP(OP_INTROCV, 0); + kid->op_targ = off; + o = op_prepend_elem(OP_LINESEQ, kid, o); + } + } } COP_SEQMAX_INC; DEBUG_Xv(PerlIO_printf(Perl_debug_log, - "Pad leavemy: seq = %ld\n", (long)PL_cop_seqmax)); + "Pad leavemy: seq = %ld\n", (long)PL_cop_seqmax)); return o; } @@ -1539,42 +1546,42 @@ Perl_pad_swipe(pTHX_ PADOFFSET po, bool refadjust) { ASSERT_CURPAD_LEGAL("pad_swipe"); if (!PL_curpad) - return; + return; if (AvARRAY(PL_comppad) != PL_curpad) - Perl_croak(aTHX_ "panic: pad_swipe curpad, %p!=%p", - AvARRAY(PL_comppad), PL_curpad); + Perl_croak(aTHX_ "panic: pad_swipe curpad, %p!=%p", + AvARRAY(PL_comppad), PL_curpad); if (!po || ((SSize_t)po) > AvFILLp(PL_comppad)) - Perl_croak(aTHX_ "panic: pad_swipe po=%ld, fill=%ld", - (long)po, (long)AvFILLp(PL_comppad)); + Perl_croak(aTHX_ "panic: pad_swipe po=%ld, fill=%ld", + (long)po, (long)AvFILLp(PL_comppad)); DEBUG_X(PerlIO_printf(Perl_debug_log, - "Pad 0x%" UVxf "[0x%" UVxf "] swipe: %ld\n", - PTR2UV(PL_comppad), PTR2UV(PL_curpad), (long)po)); + "Pad 0x%" UVxf "[0x%" UVxf "] swipe: %ld\n", + PTR2UV(PL_comppad), PTR2UV(PL_curpad), (long)po)); if (refadjust) - SvREFCNT_dec(PL_curpad[po]); + SvREFCNT_dec(PL_curpad[po]); /* if pad tmps aren't shared between ops, then there's no need to * create a new tmp when an existing op is freed */ #ifdef USE_PAD_RESET - PL_curpad[po] = newSV(0); + PL_curpad[po] = newSV_type(SVt_NULL); SvPADTMP_on(PL_curpad[po]); #else PL_curpad[po] = NULL; #endif if (PadnamelistMAX(PL_comppad_name) != -1 && (PADOFFSET)PadnamelistMAX(PL_comppad_name) >= po) { - if (PadnamelistARRAY(PL_comppad_name)[po]) { - assert(!PadnameLEN(PadnamelistARRAY(PL_comppad_name)[po])); - } - PadnamelistARRAY(PL_comppad_name)[po] = &PL_padname_undef; + if (PadnamelistARRAY(PL_comppad_name)[po]) { + assert(!PadnameLEN(PadnamelistARRAY(PL_comppad_name)[po])); + } + PadnamelistARRAY(PL_comppad_name)[po] = &PL_padname_undef; } /* Use PL_constpadix here, not PL_padix. The latter may have been reset by pad_reset. We don’t want pad_alloc to have to scan the whole pad when allocating a constant. */ if (po < PL_constpadix) - PL_constpadix = po - 1; + PL_constpadix = po - 1; } /* @@ -1595,18 +1602,18 @@ S_pad_reset(pTHX) { #ifdef USE_PAD_RESET if (AvARRAY(PL_comppad) != PL_curpad) - Perl_croak(aTHX_ "panic: pad_reset curpad, %p!=%p", - AvARRAY(PL_comppad), PL_curpad); + Perl_croak(aTHX_ "panic: pad_reset curpad, %p!=%p", + AvARRAY(PL_comppad), PL_curpad); DEBUG_X(PerlIO_printf(Perl_debug_log, - "Pad 0x%" UVxf "[0x%" UVxf "] reset: padix %ld -> %ld", - PTR2UV(PL_comppad), PTR2UV(PL_curpad), - (long)PL_padix, (long)PL_padix_floor - ) + "Pad 0x%" UVxf "[0x%" UVxf "] reset: padix %ld -> %ld", + PTR2UV(PL_comppad), PTR2UV(PL_curpad), + (long)PL_padix, (long)PL_padix_floor + ) ); if (!TAINTING_get) { /* Can't mix tainted and non-tainted temporaries. */ - PL_padix = PL_padix_floor; + PL_padix = PL_padix_floor; } #endif PL_pad_reset_pending = FALSE; @@ -1630,7 +1637,6 @@ the kind of subroutine: void Perl_pad_tidy(pTHX_ padtidy_type type) { - dVAR; ASSERT_CURPAD_ACTIVE("pad_tidy"); @@ -1653,79 +1659,79 @@ Perl_pad_tidy(pTHX_ padtidy_type type) if (PL_cv_has_eval || PL_perldb) { const CV *cv; - for (cv = PL_compcv ;cv; cv = CvOUTSIDE(cv)) { - if (cv != PL_compcv && CvCOMPILED(cv)) - break; /* no need to mark already-compiled code */ - if (CvANON(cv)) { - DEBUG_Xv(PerlIO_printf(Perl_debug_log, - "Pad clone on cv=0x%" UVxf "\n", PTR2UV(cv))); - CvCLONE_on(cv); - } - CvHASEVAL_on(cv); - } + for (cv = PL_compcv ;cv; cv = CvOUTSIDE(cv)) { + if (cv != PL_compcv && CvCOMPILED(cv)) + break; /* no need to mark already-compiled code */ + if (CvANON(cv)) { + DEBUG_Xv(PerlIO_printf(Perl_debug_log, + "Pad clone on cv=0x%" UVxf "\n", PTR2UV(cv))); + CvCLONE_on(cv); + } + CvHASEVAL_on(cv); + } } /* extend namepad to match curpad */ if (PadnamelistMAX(PL_comppad_name) < AvFILLp(PL_comppad)) - padnamelist_store(PL_comppad_name, AvFILLp(PL_comppad), NULL); + padnamelist_store(PL_comppad_name, AvFILLp(PL_comppad), NULL); if (type == padtidy_SUBCLONE) { - PADNAME ** const namep = PadnamelistARRAY(PL_comppad_name); - PADOFFSET ix; - - for (ix = AvFILLp(PL_comppad); ix > 0; ix--) { - PADNAME *namesv; - if (!namep[ix]) namep[ix] = &PL_padname_undef; - - /* - * The only things that a clonable function needs in its - * pad are anonymous subs, constants and GVs. - * The rest are created anew during cloning. - */ - if (!PL_curpad[ix] || SvIMMORTAL(PL_curpad[ix])) - continue; - namesv = namep[ix]; - if (!(PadnamePV(namesv) && - (!PadnameLEN(namesv) || *PadnamePV(namesv) == '&'))) - { - SvREFCNT_dec(PL_curpad[ix]); - PL_curpad[ix] = NULL; - } - } + PADNAME ** const namep = PadnamelistARRAY(PL_comppad_name); + PADOFFSET ix; + + for (ix = AvFILLp(PL_comppad); ix > 0; ix--) { + PADNAME *namesv; + if (!namep[ix]) namep[ix] = &PL_padname_undef; + + /* + * The only things that a clonable function needs in its + * pad are anonymous subs, constants and GVs. + * The rest are created anew during cloning. + */ + if (!PL_curpad[ix] || SvIMMORTAL(PL_curpad[ix])) + continue; + namesv = namep[ix]; + if (!(PadnamePV(namesv) && + (!PadnameLEN(namesv) || *PadnamePV(namesv) == '&'))) + { + SvREFCNT_dec(PL_curpad[ix]); + PL_curpad[ix] = NULL; + } + } } else if (type == padtidy_SUB) { - AV * const av = newAV(); /* Will be @_ */ - av_store(PL_comppad, 0, MUTABLE_SV(av)); - AvREIFY_only(av); + AV * const av = newAV(); /* Will be @_ */ + av_store(PL_comppad, 0, MUTABLE_SV(av)); + AvREIFY_only(av); } if (type == padtidy_SUB || type == padtidy_FORMAT) { - PADNAME ** const namep = PadnamelistARRAY(PL_comppad_name); - PADOFFSET ix; - for (ix = AvFILLp(PL_comppad); ix > 0; ix--) { - if (!namep[ix]) namep[ix] = &PL_padname_undef; - if (!PL_curpad[ix] || SvIMMORTAL(PL_curpad[ix])) - continue; - if (SvPADMY(PL_curpad[ix]) && !PadnameOUTER(namep[ix])) { - /* This is a work around for how the current implementation of - ?{ } blocks in regexps interacts with lexicals. - - One of our lexicals. - Can't do this on all lexicals, otherwise sub baz() won't - compile in - - my $foo; - - sub bar { ++$foo; } - - sub baz { ++$foo; } - - because completion of compiling &bar calling pad_tidy() - would cause (top level) $foo to be marked as stale, and - "no longer available". */ - SvPADSTALE_on(PL_curpad[ix]); - } - } + PADNAME ** const namep = PadnamelistARRAY(PL_comppad_name); + PADOFFSET ix; + for (ix = AvFILLp(PL_comppad); ix > 0; ix--) { + if (!namep[ix]) namep[ix] = &PL_padname_undef; + if (!PL_curpad[ix] || SvIMMORTAL(PL_curpad[ix])) + continue; + if (SvPADMY(PL_curpad[ix]) && !PadnameOUTER(namep[ix])) { + /* This is a work around for how the current implementation of + ?{ } blocks in regexps interacts with lexicals. + + One of our lexicals. + Can't do this on all lexicals, otherwise sub baz() won't + compile in + + my $foo; + + sub bar { ++$foo; } + + sub baz { ++$foo; } + + because completion of compiling &bar calling pad_tidy() + would cause (top level) $foo to be marked as stale, and + "no longer available". */ + SvPADSTALE_on(PL_curpad[ix]); + } + } } PL_curpad = AvARRAY(PL_comppad); } @@ -1746,25 +1752,25 @@ Perl_pad_free(pTHX_ PADOFFSET po) #endif ASSERT_CURPAD_LEGAL("pad_free"); if (!PL_curpad) - return; + return; if (AvARRAY(PL_comppad) != PL_curpad) - Perl_croak(aTHX_ "panic: pad_free curpad, %p!=%p", - AvARRAY(PL_comppad), PL_curpad); + Perl_croak(aTHX_ "panic: pad_free curpad, %p!=%p", + AvARRAY(PL_comppad), PL_curpad); if (!po) - Perl_croak(aTHX_ "panic: pad_free po"); + Perl_croak(aTHX_ "panic: pad_free po"); DEBUG_X(PerlIO_printf(Perl_debug_log, - "Pad 0x%" UVxf "[0x%" UVxf "] free: %ld\n", - PTR2UV(PL_comppad), PTR2UV(PL_curpad), (long)po) + "Pad 0x%" UVxf "[0x%" UVxf "] free: %ld\n", + PTR2UV(PL_comppad), PTR2UV(PL_curpad), (long)po) ); #ifndef USE_PAD_RESET sv = PL_curpad[po]; if (sv && sv != &PL_sv_undef && !SvPADMY(sv)) - SvFLAGS(sv) &= ~SVs_PADTMP; + SvFLAGS(sv) &= ~SVs_PADTMP; if (po < PL_padix) - PL_padix = po - 1; + PL_padix = po - 1; #endif } @@ -1788,53 +1794,53 @@ Perl_do_dump_pad(pTHX_ I32 level, PerlIO *file, PADLIST *padlist, int full) PERL_ARGS_ASSERT_DO_DUMP_PAD; if (!padlist) { - return; + return; } pad_name = PadlistNAMES(padlist); pad = PadlistARRAY(padlist)[1]; pname = PadnamelistARRAY(pad_name); ppad = AvARRAY(pad); Perl_dump_indent(aTHX_ level, file, - "PADNAME = 0x%" UVxf "(0x%" UVxf ") PAD = 0x%" UVxf "(0x%" UVxf ")\n", - PTR2UV(pad_name), PTR2UV(pname), PTR2UV(pad), PTR2UV(ppad) + "PADNAME = 0x%" UVxf "(0x%" UVxf ") PAD = 0x%" UVxf "(0x%" UVxf ")\n", + PTR2UV(pad_name), PTR2UV(pname), PTR2UV(pad), PTR2UV(ppad) ); for (ix = 1; ix <= PadnamelistMAX(pad_name); ix++) { const PADNAME *namesv = pname[ix]; - if (namesv && !PadnameLEN(namesv)) { - namesv = NULL; - } - if (namesv) { - if (PadnameOUTER(namesv)) - Perl_dump_indent(aTHX_ level+1, file, - "%2d. 0x%" UVxf "<%lu> FAKE \"%s\" flags=0x%lx index=%lu\n", - (int) ix, - PTR2UV(ppad[ix]), - (unsigned long) (ppad[ix] ? SvREFCNT(ppad[ix]) : 0), - PadnamePV(namesv), - (unsigned long)PARENT_FAKELEX_FLAGS(namesv), - (unsigned long)PARENT_PAD_INDEX(namesv) - - ); - else - Perl_dump_indent(aTHX_ level+1, file, - "%2d. 0x%" UVxf "<%lu> (%lu,%lu) \"%s\"\n", - (int) ix, - PTR2UV(ppad[ix]), - (unsigned long) (ppad[ix] ? SvREFCNT(ppad[ix]) : 0), - (unsigned long)COP_SEQ_RANGE_LOW(namesv), - (unsigned long)COP_SEQ_RANGE_HIGH(namesv), - PadnamePV(namesv) - ); - } - else if (full) { - Perl_dump_indent(aTHX_ level+1, file, - "%2d. 0x%" UVxf "<%lu>\n", - (int) ix, - PTR2UV(ppad[ix]), - (unsigned long) (ppad[ix] ? SvREFCNT(ppad[ix]) : 0) - ); - } + if (namesv && !PadnameLEN(namesv)) { + namesv = NULL; + } + if (namesv) { + if (PadnameOUTER(namesv)) + Perl_dump_indent(aTHX_ level+1, file, + "%2d. 0x%" UVxf "<%lu> FAKE \"%s\" flags=0x%lx index=%lu\n", + (int) ix, + PTR2UV(ppad[ix]), + (unsigned long) (ppad[ix] ? SvREFCNT(ppad[ix]) : 0), + PadnamePV(namesv), + (unsigned long)PARENT_FAKELEX_FLAGS(namesv), + (unsigned long)PARENT_PAD_INDEX(namesv) + + ); + else + Perl_dump_indent(aTHX_ level+1, file, + "%2d. 0x%" UVxf "<%lu> (%lu,%lu) \"%s\"\n", + (int) ix, + PTR2UV(ppad[ix]), + (unsigned long) (ppad[ix] ? SvREFCNT(ppad[ix]) : 0), + (unsigned long)COP_SEQ_RANGE_LOW(namesv), + (unsigned long)COP_SEQ_RANGE_HIGH(namesv), + PadnamePV(namesv) + ); + } + else if (full) { + Perl_dump_indent(aTHX_ level+1, file, + "%2d. 0x%" UVxf "<%lu>\n", + (int) ix, + PTR2UV(ppad[ix]), + (unsigned long) (ppad[ix] ? SvREFCNT(ppad[ix]) : 0) + ); + } } } @@ -1852,29 +1858,34 @@ STATIC void S_cv_dump(pTHX_ const CV *cv, const char *title) { const CV * const outside = CvOUTSIDE(cv); - PADLIST* const padlist = CvPADLIST(cv); PERL_ARGS_ASSERT_CV_DUMP; PerlIO_printf(Perl_debug_log, - " %s: CV=0x%" UVxf " (%s), OUTSIDE=0x%" UVxf " (%s)\n", - title, - PTR2UV(cv), - (CvANON(cv) ? "ANON" - : (SvTYPE(cv) == SVt_PVFM) ? "FORMAT" - : (cv == PL_main_cv) ? "MAIN" - : CvUNIQUE(cv) ? "UNIQUE" - : CvGV(cv) ? GvNAME(CvGV(cv)) : "UNDEFINED"), - PTR2UV(outside), - (!outside ? "null" - : CvANON(outside) ? "ANON" - : (outside == PL_main_cv) ? "MAIN" - : CvUNIQUE(outside) ? "UNIQUE" - : CvGV(outside) ? GvNAME(CvGV(outside)) : "UNDEFINED")); - - PerlIO_printf(Perl_debug_log, - " PADLIST = 0x%" UVxf "\n", PTR2UV(padlist)); - do_dump_pad(1, Perl_debug_log, padlist, 1); + " %s: CV=0x%" UVxf " (%s), OUTSIDE=0x%" UVxf " (%s)\n", + title, + PTR2UV(cv), + (CvANON(cv) ? "ANON" + : (SvTYPE(cv) == SVt_PVFM) ? "FORMAT" + : (cv == PL_main_cv) ? "MAIN" + : CvUNIQUE(cv) ? "UNIQUE" + : CvGV(cv) ? GvNAME(CvGV(cv)) : "UNDEFINED"), + PTR2UV(outside), + (!outside ? "null" + : CvANON(outside) ? "ANON" + : (outside == PL_main_cv) ? "MAIN" + : CvUNIQUE(outside) ? "UNIQUE" + : CvGV(outside) ? GvNAME(CvGV(outside)) : "UNDEFINED")); + + if (!CvISXSUB(cv)) { + /* SVPADLIST(cv) will fail an assert if CvISXSUB(cv) is true, + * and if the assert is removed this code will SEGV. XSUBs don't + * have padlists I believe - Yves */ + PADLIST* const padlist = CvPADLIST(cv); + PerlIO_printf(Perl_debug_log, + " PADLIST = 0x%" UVxf "\n", PTR2UV(padlist)); + do_dump_pad(1, Perl_debug_log, padlist, 1); + } } #endif /* DEBUGGING */ @@ -1895,7 +1906,7 @@ static CV *S_cv_clone(pTHX_ CV *proto, CV *cv, CV *outside, HV *cloned); static CV * S_cv_clone_pad(pTHX_ CV *proto, CV *cv, CV *outside, HV *cloned, - bool newcv) + bool newcv) { PADOFFSET ix; PADLIST* const protopadlist = CvPADLIST(proto); @@ -1924,22 +1935,22 @@ S_cv_clone_pad(pTHX_ CV *proto, CV *cv, CV *outside, HV *cloned, if (!outside) { if (CvWEAKOUTSIDE(proto)) - outside = find_runcv(NULL); + outside = find_runcv(NULL); else { - outside = CvOUTSIDE(proto); - if ((CvCLONE(outside) && ! CvCLONED(outside)) - || !CvPADLIST(outside) - || CvPADLIST(outside)->xpadl_id != protopadlist->xpadl_outid) { - outside = find_runcv_where( - FIND_RUNCV_padid_eq, PTR2IV(protopadlist->xpadl_outid), NULL - ); - /* outside could be null */ - } + outside = CvOUTSIDE(proto); + if ((CvCLONE(outside) && ! CvCLONED(outside)) + || !CvPADLIST(outside) + || CvPADLIST(outside)->xpadl_id != protopadlist->xpadl_outid) { + outside = find_runcv_where( + FIND_RUNCV_padid_eq, PTR2IV(protopadlist->xpadl_outid), NULL + ); + /* outside could be null */ + } } } depth = outside ? CvDEPTH(outside) : 0; if (!depth) - depth = 1; + depth = 1; ENTER; SAVESPTR(PL_compcv); @@ -1947,7 +1958,7 @@ S_cv_clone_pad(pTHX_ CV *proto, CV *cv, CV *outside, HV *cloned, if (newcv) SAVEFREESV(cv); /* in case of fatal warnings */ if (CvHASEVAL(cv)) - CvOUTSIDE(cv) = MUTABLE_CV(SvREFCNT_inc_simple(outside)); + CvOUTSIDE(cv) = MUTABLE_CV(SvREFCNT_inc_simple(outside)); SAVESPTR(PL_comppad_name); PL_comppad_name = protopad_name; @@ -1959,227 +1970,226 @@ S_cv_clone_pad(pTHX_ CV *proto, CV *cv, CV *outside, HV *cloned, PL_curpad = AvARRAY(PL_comppad); outpad = outside && CvPADLIST(outside) - ? AvARRAY(PadlistARRAY(CvPADLIST(outside))[depth]) - : NULL; + ? AvARRAY(PadlistARRAY(CvPADLIST(outside))[depth]) + : NULL; if (outpad) CvPADLIST(cv)->xpadl_outid = CvPADLIST(outside)->xpadl_id; for (ix = fpad; ix > 0; ix--) { - PADNAME* const namesv = (ix <= fname) ? pname[ix] : NULL; - SV *sv = NULL; - if (namesv && PadnameLEN(namesv)) { /* lexical */ - if (PadnameIsOUR(namesv)) { /* or maybe not so lexical */ - NOOP; - } - else { - if (PadnameOUTER(namesv)) { /* lexical from outside? */ - /* formats may have an inactive, or even undefined, parent; - but state vars are always available. */ - if (!outpad || !(sv = outpad[PARENT_PAD_INDEX(namesv)]) - || ( SvPADSTALE(sv) && !SvPAD_STATE(namesv) - && (!outside || !CvDEPTH(outside))) ) { - S_unavailable(aTHX_ namesv); - sv = NULL; - } - else - SvREFCNT_inc_simple_void_NN(sv); - } - if (!sv) { + PADNAME* const namesv = (ix <= fname) ? pname[ix] : NULL; + SV *sv = NULL; + if (namesv && PadnameLEN(namesv)) { /* lexical */ + if (PadnameIsOUR(namesv)) { /* or maybe not so lexical */ + NOOP; + } + else { + if (PadnameOUTER(namesv)) { /* lexical from outside? */ + /* formats may have an inactive, or even undefined, parent; + but state vars are always available. */ + if (!outpad || !(sv = outpad[PARENT_PAD_INDEX(namesv)]) + || ( SvPADSTALE(sv) && !SvPAD_STATE(namesv) + && (!outside || !CvDEPTH(outside))) ) { + S_unavailable(aTHX_ namesv); + sv = NULL; + } + else + SvREFCNT_inc_simple_void_NN(sv); + } + if (!sv) { const char sigil = PadnamePV(namesv)[0]; if (sigil == '&') - /* If there are state subs, we need to clone them, too. - But they may need to close over variables we have - not cloned yet. So we will have to do a second - pass. Furthermore, there may be state subs clos- - ing over other state subs’ entries, so we have - to put a stub here and then clone into it on the - second pass. */ - if (SvPAD_STATE(namesv) && !CvCLONED(ppad[ix])) { - assert(SvTYPE(ppad[ix]) == SVt_PVCV); - subclones ++; - if (CvOUTSIDE(ppad[ix]) != proto) - trouble = TRUE; - sv = newSV_type(SVt_PVCV); - CvLEXICAL_on(sv); - } - else if (PadnameLEN(namesv)>1 && !PadnameIsOUR(namesv)) - { - /* my sub */ - /* Just provide a stub, but name it. It will be - upgraded to the real thing on scope entry. */ - dVAR; - U32 hash; - PERL_HASH(hash, PadnamePV(namesv)+1, - PadnameLEN(namesv) - 1); - sv = newSV_type(SVt_PVCV); - CvNAME_HEK_set( - sv, - share_hek(PadnamePV(namesv)+1, - 1 - PadnameLEN(namesv), - hash) - ); - CvLEXICAL_on(sv); - } - else sv = SvREFCNT_inc(ppad[ix]); + /* If there are state subs, we need to clone them, too. + But they may need to close over variables we have + not cloned yet. So we will have to do a second + pass. Furthermore, there may be state subs clos- + ing over other state subs’ entries, so we have + to put a stub here and then clone into it on the + second pass. */ + if (SvPAD_STATE(namesv) && !CvCLONED(ppad[ix])) { + assert(SvTYPE(ppad[ix]) == SVt_PVCV); + subclones ++; + if (CvOUTSIDE(ppad[ix]) != proto) + trouble = TRUE; + sv = newSV_type(SVt_PVCV); + CvLEXICAL_on(sv); + } + else if (PadnameLEN(namesv)>1 && !PadnameIsOUR(namesv)) + { + /* my sub */ + /* Just provide a stub, but name it. It will be + upgraded to the real thing on scope entry. */ + U32 hash; + PERL_HASH(hash, PadnamePV(namesv)+1, + PadnameLEN(namesv) - 1); + sv = newSV_type(SVt_PVCV); + CvNAME_HEK_set( + sv, + share_hek(PadnamePV(namesv)+1, + 1 - PadnameLEN(namesv), + hash) + ); + CvLEXICAL_on(sv); + } + else sv = SvREFCNT_inc(ppad[ix]); else if (sigil == '@') - sv = MUTABLE_SV(newAV()); + sv = MUTABLE_SV(newAV()); else if (sigil == '%') - sv = MUTABLE_SV(newHV()); - else - sv = newSV(0); - /* reset the 'assign only once' flag on each state var */ - if (sigil != '&' && SvPAD_STATE(namesv)) - SvPADSTALE_on(sv); - } - } - } - else if (namesv && PadnamePV(namesv)) { - sv = SvREFCNT_inc_NN(ppad[ix]); - } - else { - sv = newSV(0); - SvPADTMP_on(sv); - } - PL_curpad[ix] = sv; + sv = MUTABLE_SV(newHV()); + else + sv = newSV_type(SVt_NULL); + /* reset the 'assign only once' flag on each state var */ + if (sigil != '&' && SvPAD_STATE(namesv)) + SvPADSTALE_on(sv); + } + } + } + else if (namesv && PadnamePV(namesv)) { + sv = SvREFCNT_inc_NN(ppad[ix]); + } + else { + sv = newSV_type(SVt_NULL); + SvPADTMP_on(sv); + } + PL_curpad[ix] = sv; } if (subclones) { - if (trouble || cloned) { - /* Uh-oh, we have trouble! At least one of the state subs here - has its CvOUTSIDE pointer pointing somewhere unexpected. It - could be pointing to another state protosub that we are - about to clone. So we have to track which sub clones come - from which protosubs. If the CvOUTSIDE pointer for a parti- - cular sub points to something we have not cloned yet, we - delay cloning it. We must loop through the pad entries, - until we get a full pass with no cloning. If any uncloned - subs remain (probably nested inside anonymous or ‘my’ subs), - then they get cloned in a final pass. - */ - bool cloned_in_this_pass; - if (!cloned) - cloned = (HV *)sv_2mortal((SV *)newHV()); - do { - cloned_in_this_pass = FALSE; - for (ix = fpad; ix > 0; ix--) { - PADNAME * const name = - (ix <= fname) ? pname[ix] : NULL; - if (name && name != &PL_padname_undef - && !PadnameOUTER(name) && PadnamePV(name)[0] == '&' - && PadnameIsSTATE(name) && !CvCLONED(PL_curpad[ix])) - { - CV * const protokey = CvOUTSIDE(ppad[ix]); - CV ** const cvp = protokey == proto - ? &cv - : (CV **)hv_fetch(cloned, (char *)&protokey, - sizeof(CV *), 0); - if (cvp && *cvp) { - S_cv_clone(aTHX_ (CV *)ppad[ix], - (CV *)PL_curpad[ix], - *cvp, cloned); - (void)hv_store(cloned, (char *)&ppad[ix], - sizeof(CV *), - SvREFCNT_inc_simple_NN(PL_curpad[ix]), - 0); - subclones--; - cloned_in_this_pass = TRUE; - } - } - } - } while (cloned_in_this_pass); - if (subclones) - for (ix = fpad; ix > 0; ix--) { - PADNAME * const name = - (ix <= fname) ? pname[ix] : NULL; - if (name && name != &PL_padname_undef - && !PadnameOUTER(name) && PadnamePV(name)[0] == '&' - && PadnameIsSTATE(name) && !CvCLONED(PL_curpad[ix])) - S_cv_clone(aTHX_ (CV *)ppad[ix], - (CV *)PL_curpad[ix], - CvOUTSIDE(ppad[ix]), cloned); - } - } - else for (ix = fpad; ix > 0; ix--) { - PADNAME * const name = (ix <= fname) ? pname[ix] : NULL; - if (name && name != &PL_padname_undef && !PadnameOUTER(name) - && PadnamePV(name)[0] == '&' && PadnameIsSTATE(name)) - S_cv_clone(aTHX_ (CV *)ppad[ix], (CV *)PL_curpad[ix], cv, - NULL); - } + if (trouble || cloned) { + /* Uh-oh, we have trouble! At least one of the state subs here + has its CvOUTSIDE pointer pointing somewhere unexpected. It + could be pointing to another state protosub that we are + about to clone. So we have to track which sub clones come + from which protosubs. If the CvOUTSIDE pointer for a parti- + cular sub points to something we have not cloned yet, we + delay cloning it. We must loop through the pad entries, + until we get a full pass with no cloning. If any uncloned + subs remain (probably nested inside anonymous or ‘my’ subs), + then they get cloned in a final pass. + */ + bool cloned_in_this_pass; + if (!cloned) + cloned = (HV *)newSV_type_mortal(SVt_PVHV); + do { + cloned_in_this_pass = FALSE; + for (ix = fpad; ix > 0; ix--) { + PADNAME * const name = + (ix <= fname) ? pname[ix] : NULL; + if (name && name != &PL_padname_undef + && !PadnameOUTER(name) && PadnamePV(name)[0] == '&' + && PadnameIsSTATE(name) && !CvCLONED(PL_curpad[ix])) + { + CV * const protokey = CvOUTSIDE(ppad[ix]); + CV ** const cvp = protokey == proto + ? &cv + : (CV **)hv_fetch(cloned, (char *)&protokey, + sizeof(CV *), 0); + if (cvp && *cvp) { + S_cv_clone(aTHX_ (CV *)ppad[ix], + (CV *)PL_curpad[ix], + *cvp, cloned); + (void)hv_store(cloned, (char *)&ppad[ix], + sizeof(CV *), + SvREFCNT_inc_simple_NN(PL_curpad[ix]), + 0); + subclones--; + cloned_in_this_pass = TRUE; + } + } + } + } while (cloned_in_this_pass); + if (subclones) + for (ix = fpad; ix > 0; ix--) { + PADNAME * const name = + (ix <= fname) ? pname[ix] : NULL; + if (name && name != &PL_padname_undef + && !PadnameOUTER(name) && PadnamePV(name)[0] == '&' + && PadnameIsSTATE(name) && !CvCLONED(PL_curpad[ix])) + S_cv_clone(aTHX_ (CV *)ppad[ix], + (CV *)PL_curpad[ix], + CvOUTSIDE(ppad[ix]), cloned); + } + } + else for (ix = fpad; ix > 0; ix--) { + PADNAME * const name = (ix <= fname) ? pname[ix] : NULL; + if (name && name != &PL_padname_undef && !PadnameOUTER(name) + && PadnamePV(name)[0] == '&' && PadnameIsSTATE(name)) + S_cv_clone(aTHX_ (CV *)ppad[ix], (CV *)PL_curpad[ix], cv, + NULL); + } } if (newcv) SvREFCNT_inc_simple_void_NN(cv); LEAVE; if (CvCONST(cv)) { - /* Constant sub () { $x } closing over $x: - * The prototype was marked as a candiate for const-ization, - * so try to grab the current const value, and if successful, - * turn into a const sub: - */ - SV* const_sv; - OP *o = CvSTART(cv); - assert(newcv); - for (; o; o = o->op_next) - if (o->op_type == OP_PADSV) - break; - ASSUME(o->op_type == OP_PADSV); - const_sv = PAD_BASE_SV(CvPADLIST(cv), o->op_targ); - /* the candidate should have 1 ref from this pad and 1 ref - * from the parent */ - if (const_sv && SvREFCNT(const_sv) == 2) { - const bool was_method = cBOOL(CvMETHOD(cv)); - if (outside) { - PADNAME * const pn = - PadlistNAMESARRAY(CvPADLIST(outside)) - [PARENT_PAD_INDEX(PadlistNAMESARRAY( - CvPADLIST(cv))[o->op_targ])]; - assert(PadnameOUTER(PadlistNAMESARRAY(CvPADLIST(cv)) - [o->op_targ])); - if (PadnameLVALUE(pn)) { - /* We have a lexical that is potentially modifiable - elsewhere, so making a constant will break clo- - sure behaviour. If this is a ‘simple lexical - op tree’, i.e., sub(){$x}, emit a deprecation - warning, but continue to exhibit the old behav- - iour of making it a constant based on the ref- - count of the candidate variable. - - A simple lexical op tree looks like this: - - leavesub - lineseq - nextstate - padsv - */ - if (OpSIBLING( - cUNOPx(cUNOPx(CvROOT(cv))->op_first)->op_first - ) == o - && !OpSIBLING(o)) - { + /* Constant sub () { $x } closing over $x: + * The prototype was marked as a candiate for const-ization, + * so try to grab the current const value, and if successful, + * turn into a const sub: + */ + SV* const_sv; + OP *o = CvSTART(cv); + assert(newcv); + for (; o; o = o->op_next) + if (o->op_type == OP_PADSV) + break; + ASSUME(o->op_type == OP_PADSV); + const_sv = PAD_BASE_SV(CvPADLIST(cv), o->op_targ); + /* the candidate should have 1 ref from this pad and 1 ref + * from the parent */ + if (const_sv && SvREFCNT(const_sv) == 2) { + const bool was_method = cBOOL(CvMETHOD(cv)); + if (outside) { + PADNAME * const pn = + PadlistNAMESARRAY(CvPADLIST(outside)) + [PARENT_PAD_INDEX(PadlistNAMESARRAY( + CvPADLIST(cv))[o->op_targ])]; + assert(PadnameOUTER(PadlistNAMESARRAY(CvPADLIST(cv)) + [o->op_targ])); + if (PadnameLVALUE(pn)) { + /* We have a lexical that is potentially modifiable + elsewhere, so making a constant will break clo- + sure behaviour. If this is a ‘simple lexical + op tree’, i.e., sub(){$x}, emit a deprecation + warning, but continue to exhibit the old behav- + iour of making it a constant based on the ref- + count of the candidate variable. + + A simple lexical op tree looks like this: + + leavesub + lineseq + nextstate + padsv + */ + if (OpSIBLING( + cUNOPx(cUNOPx(CvROOT(cv))->op_first)->op_first + ) == o + && !OpSIBLING(o)) + { Perl_croak(aTHX_ "Constants from lexical variables potentially modified " "elsewhere are no longer permitted"); - } - else - goto constoff; - } - } + } + else + goto constoff; + } + } SvREFCNT_inc_simple_void_NN(const_sv); - /* If the lexical is not used elsewhere, it is safe to turn on - SvPADTMP, since it is only when it is used in lvalue con- - text that the difference is observable. */ - SvREADONLY_on(const_sv); - SvPADTMP_on(const_sv); - SvREFCNT_dec_NN(cv); - cv = newCONSTSUB(CvSTASH(proto), NULL, const_sv); - if (was_method) - CvMETHOD_on(cv); - } - else { - constoff: - CvCONST_off(cv); - } + /* If the lexical is not used elsewhere, it is safe to turn on + SvPADTMP, since it is only when it is used in lvalue con- + text that the difference is observable. */ + SvREADONLY_on(const_sv); + SvPADTMP_on(const_sv); + SvREFCNT_dec_NN(cv); + cv = newCONSTSUB(CvSTASH(proto), NULL, const_sv); + if (was_method) + CvMETHOD_on(cv); + } + else { + constoff: + CvCONST_off(cv); + } } return cv; @@ -2188,46 +2198,54 @@ S_cv_clone_pad(pTHX_ CV *proto, CV *cv, CV *outside, HV *cloned, static CV * S_cv_clone(pTHX_ CV *proto, CV *cv, CV *outside, HV *cloned) { -#ifdef USE_ITHREADS - dVAR; -#endif const bool newcv = !cv; assert(!CvUNIQUE(proto)); if (!cv) cv = MUTABLE_CV(newSV_type(SvTYPE(proto))); CvFLAGS(cv) = CvFLAGS(proto) & ~(CVf_CLONE|CVf_WEAKOUTSIDE|CVf_CVGV_RC - |CVf_SLABBED); + |CVf_SLABBED); CvCLONED_on(cv); CvFILE(cv) = CvDYNFILE(proto) ? savepv(CvFILE(proto)) - : CvFILE(proto); + : CvFILE(proto); if (CvNAMED(proto)) - CvNAME_HEK_set(cv, share_hek_hek(CvNAME_HEK(proto))); + CvNAME_HEK_set(cv, share_hek_hek(CvNAME_HEK(proto))); else CvGV_set(cv,CvGV(proto)); CvSTASH_set(cv, CvSTASH(proto)); - OP_REFCNT_LOCK; - CvROOT(cv) = OpREFCNT_inc(CvROOT(proto)); - OP_REFCNT_UNLOCK; - CvSTART(cv) = CvSTART(proto); - CvOUTSIDE_SEQ(cv) = CvOUTSIDE_SEQ(proto); + + /* It is unlikely that proto is an xsub, but it could happen; e.g. if a + * module has performed a lexical sub import trick on an xsub. This + * happens with builtin::import, for example + */ + if (UNLIKELY(CvISXSUB(proto))) { + CvXSUB(cv) = CvXSUB(proto); + CvXSUBANY(cv) = CvXSUBANY(proto); + } + else { + OP_REFCNT_LOCK; + CvROOT(cv) = OpREFCNT_inc(CvROOT(proto)); + OP_REFCNT_UNLOCK; + CvSTART(cv) = CvSTART(proto); + CvOUTSIDE_SEQ(cv) = CvOUTSIDE_SEQ(proto); + } if (SvPOK(proto)) { - sv_setpvn(MUTABLE_SV(cv), SvPVX_const(proto), SvCUR(proto)); + sv_setpvn(MUTABLE_SV(cv), SvPVX_const(proto), SvCUR(proto)); if (SvUTF8(proto)) SvUTF8_on(MUTABLE_SV(cv)); } if (SvMAGIC(proto)) - mg_copy((SV *)proto, (SV *)cv, 0, 0); + mg_copy((SV *)proto, (SV *)cv, 0, 0); - if (CvPADLIST(proto)) - cv = S_cv_clone_pad(aTHX_ proto, cv, outside, cloned, newcv); + if (!CvISXSUB(proto) && CvPADLIST(proto)) + cv = S_cv_clone_pad(aTHX_ proto, cv, outside, cloned, newcv); DEBUG_Xv( - PerlIO_printf(Perl_debug_log, "\nPad CV clone\n"); - if (CvOUTSIDE(cv)) cv_dump(CvOUTSIDE(cv), "Outside"); - cv_dump(proto, "Proto"); - cv_dump(cv, "To"); + PerlIO_printf(Perl_debug_log, "\nPad CV clone\n"); + if (CvOUTSIDE(cv)) cv_dump(CvOUTSIDE(cv), "Outside"); + cv_dump(proto, "Proto"); + cv_dump(cv, "To"); ); return cv; @@ -2277,31 +2295,31 @@ Perl_cv_name(pTHX_ CV *cv, SV *sv, U32 flags) { PERL_ARGS_ASSERT_CV_NAME; if (!isGV_with_GP(cv) && SvTYPE(cv) != SVt_PVCV) { - if (sv) sv_setsv(sv,(SV *)cv); - return sv ? (sv) : (SV *)cv; + if (sv) sv_setsv(sv,(SV *)cv); + return sv ? (sv) : (SV *)cv; } { - SV * const retsv = sv ? (sv) : sv_newmortal(); - if (SvTYPE(cv) == SVt_PVCV) { - if (CvNAMED(cv)) { - if (CvLEXICAL(cv) || flags & CV_NAME_NOTQUAL) - sv_sethek(retsv, CvNAME_HEK(cv)); - else { - if (CvSTASH(cv) && HvNAME_HEK(CvSTASH(cv))) - sv_sethek(retsv, HvNAME_HEK(CvSTASH(cv))); - else - sv_setpvs(retsv, "__ANON__"); - sv_catpvs(retsv, "::"); - sv_cathek(retsv, CvNAME_HEK(cv)); - } - } - else if (CvLEXICAL(cv) || flags & CV_NAME_NOTQUAL) - sv_sethek(retsv, GvNAME_HEK(GvEGV(CvGV(cv)))); - else gv_efullname3(retsv, CvGV(cv), NULL); - } - else if (flags & CV_NAME_NOTQUAL) sv_sethek(retsv, GvNAME_HEK(cv)); - else gv_efullname3(retsv,(GV *)cv,NULL); - return retsv; + SV * const retsv = sv ? (sv) : sv_newmortal(); + if (SvTYPE(cv) == SVt_PVCV) { + if (CvNAMED(cv)) { + if (CvLEXICAL(cv) || flags & CV_NAME_NOTQUAL) + sv_sethek(retsv, CvNAME_HEK(cv)); + else { + if (CvSTASH(cv) && HvNAME_HEK(CvSTASH(cv))) + sv_sethek(retsv, HvNAME_HEK(CvSTASH(cv))); + else + sv_setpvs(retsv, "__ANON__"); + sv_catpvs(retsv, "::"); + sv_cathek(retsv, CvNAME_HEK(cv)); + } + } + else if (CvLEXICAL(cv) || flags & CV_NAME_NOTQUAL) + sv_sethek(retsv, GvNAME_HEK(GvEGV(CvGV(cv)))); + else gv_efullname3(retsv, CvGV(cv), NULL); + } + else if (flags & CV_NAME_NOTQUAL) sv_sethek(retsv, GvNAME_HEK(cv)); + else gv_efullname3(retsv,(GV *)cv,NULL); + return retsv; } } @@ -2329,51 +2347,51 @@ Perl_pad_fixup_inner_anons(pTHX_ PADLIST *padlist, CV *old_cv, CV *new_cv) for (ix = PadnamelistMAX(comppad_name); ix > 0; ix--) { const PADNAME *name = namepad[ix]; - if (name && name != &PL_padname_undef && !PadnameIsOUR(name) - && *PadnamePV(name) == '&') - { - CV *innercv = MUTABLE_CV(curpad[ix]); - if (UNLIKELY(PadnameOUTER(name))) { - CV *cv = new_cv; - PADNAME **names = namepad; - PADOFFSET i = ix; - while (PadnameOUTER(name)) { - assert(SvTYPE(cv) == SVt_PVCV); - cv = CvOUTSIDE(cv); - names = PadlistNAMESARRAY(CvPADLIST(cv)); - i = PARENT_PAD_INDEX(name); - name = names[i]; - } - innercv = (CV *)PadARRAY(PadlistARRAY(CvPADLIST(cv))[1])[i]; - } - if (SvTYPE(innercv) == SVt_PVCV) { - /* XXX 0afba48f added code here to check for a proto CV - attached to the pad entry by magic. But shortly there- - after 81df9f6f95 moved the magic to the pad name. The - code here was never updated, so it wasn’t doing anything - and got deleted when PADNAME became a distinct type. Is - there any bug as a result? */ - if (CvOUTSIDE(innercv) == old_cv) { - if (!CvWEAKOUTSIDE(innercv)) { - SvREFCNT_dec(old_cv); - SvREFCNT_inc_simple_void_NN(new_cv); - } - CvOUTSIDE(innercv) = new_cv; - } - } - else { /* format reference */ - SV * const rv = curpad[ix]; - CV *innercv; - if (!SvOK(rv)) continue; - assert(SvROK(rv)); - assert(SvWEAKREF(rv)); - innercv = (CV *)SvRV(rv); - assert(!CvWEAKOUTSIDE(innercv)); - assert(CvOUTSIDE(innercv) == old_cv); - SvREFCNT_dec(CvOUTSIDE(innercv)); - CvOUTSIDE(innercv) = (CV *)SvREFCNT_inc_simple_NN(new_cv); - } - } + if (name && name != &PL_padname_undef && !PadnameIsOUR(name) + && *PadnamePV(name) == '&') + { + CV *innercv = MUTABLE_CV(curpad[ix]); + if (UNLIKELY(PadnameOUTER(name))) { + CV *cv = new_cv; + PADNAME **names = namepad; + PADOFFSET i = ix; + while (PadnameOUTER(name)) { + assert(SvTYPE(cv) == SVt_PVCV); + cv = CvOUTSIDE(cv); + names = PadlistNAMESARRAY(CvPADLIST(cv)); + i = PARENT_PAD_INDEX(name); + name = names[i]; + } + innercv = (CV *)PadARRAY(PadlistARRAY(CvPADLIST(cv))[1])[i]; + } + if (SvTYPE(innercv) == SVt_PVCV) { + /* XXX 0afba48f added code here to check for a proto CV + attached to the pad entry by magic. But shortly there- + after 81df9f6f95 moved the magic to the pad name. The + code here was never updated, so it wasn’t doing anything + and got deleted when PADNAME became a distinct type. Is + there any bug as a result? */ + if (CvOUTSIDE(innercv) == old_cv) { + if (!CvWEAKOUTSIDE(innercv)) { + SvREFCNT_dec(old_cv); + SvREFCNT_inc_simple_void_NN(new_cv); + } + CvOUTSIDE(innercv) = new_cv; + } + } + else { /* format reference */ + SV * const rv = curpad[ix]; + CV *innercv; + if (!SvOK(rv)) continue; + assert(SvROK(rv)); + assert(SvWEAKREF(rv)); + innercv = (CV *)SvRV(rv); + assert(!CvWEAKOUTSIDE(innercv)); + assert(CvOUTSIDE(innercv) == old_cv); + SvREFCNT_dec(CvOUTSIDE(innercv)); + CvOUTSIDE(innercv) = (CV *)SvREFCNT_inc_simple_NN(new_cv); + } + } } } @@ -2393,50 +2411,53 @@ Perl_pad_push(pTHX_ PADLIST *padlist, int depth) PERL_ARGS_ASSERT_PAD_PUSH; if (depth > PadlistMAX(padlist) || !PadlistARRAY(padlist)[depth]) { - PAD** const svp = PadlistARRAY(padlist); - AV* const newpad = newAV(); - SV** const oldpad = AvARRAY(svp[depth-1]); - PADOFFSET ix = AvFILLp((const AV *)svp[1]); - const PADOFFSET names_fill = PadnamelistMAX((PADNAMELIST *)svp[0]); - PADNAME ** const names = PadnamelistARRAY((PADNAMELIST *)svp[0]); - AV *av; - - for ( ;ix > 0; ix--) { - if (names_fill >= ix && PadnameLEN(names[ix])) { - const char sigil = PadnamePV(names[ix])[0]; - if (PadnameOUTER(names[ix]) - || PadnameIsSTATE(names[ix]) - || sigil == '&') - { - /* outer lexical or anon code */ - av_store(newpad, ix, SvREFCNT_inc(oldpad[ix])); - } - else { /* our own lexical */ - SV *sv; - if (sigil == '@') - sv = MUTABLE_SV(newAV()); - else if (sigil == '%') - sv = MUTABLE_SV(newHV()); - else - sv = newSV(0); - av_store(newpad, ix, sv); - } - } - else if (PadnamePV(names[ix])) { - av_store(newpad, ix, SvREFCNT_inc_NN(oldpad[ix])); - } - else { - /* save temporaries on recursion? */ - SV * const sv = newSV(0); - av_store(newpad, ix, sv); - SvPADTMP_on(sv); - } - } - av = newAV(); - av_store(newpad, 0, MUTABLE_SV(av)); - AvREIFY_only(av); - - padlist_store(padlist, depth, newpad); + PAD** const svp = PadlistARRAY(padlist); + AV* const newpad = newAV(); + SV** const oldpad = AvARRAY(svp[depth-1]); + PADOFFSET ix = AvFILLp((const AV *)svp[1]); + const PADOFFSET names_fill = PadnamelistMAX((PADNAMELIST *)svp[0]); + PADNAME ** const names = PadnamelistARRAY((PADNAMELIST *)svp[0]); + AV *av; + + Newxz( AvALLOC(newpad), ix + 1, SV *); + AvARRAY(newpad) = AvALLOC(newpad); + AvMAX(newpad) = AvFILLp(newpad) = ix; + + for ( ;ix > 0; ix--) { + SV *sv; + if (names_fill >= ix && PadnameLEN(names[ix])) { + const char sigil = PadnamePV(names[ix])[0]; + if (PadnameOUTER(names[ix]) + || PadnameIsSTATE(names[ix]) + || sigil == '&') + { + /* outer lexical or anon code */ + sv = SvREFCNT_inc(oldpad[ix]); + } + else { /* our own lexical */ + if (sigil == '@') + sv = MUTABLE_SV(newAV()); + else if (sigil == '%') + sv = MUTABLE_SV(newHV()); + else + sv = newSV_type(SVt_NULL); + } + } + else if (PadnamePV(names[ix])) { + sv = SvREFCNT_inc_NN(oldpad[ix]); + } + else { + /* save temporaries on recursion? */ + sv = newSV_type(SVt_NULL); + SvPADTMP_on(sv); + } + AvARRAY(newpad)[ix] = sv; + } + av = newAV(); + AvARRAY(newpad)[0] = MUTABLE_SV(av); + AvREIFY_only(av); + + padlist_store(padlist, depth, newpad); } } @@ -2472,89 +2493,89 @@ Perl_padlist_dup(pTHX_ PADLIST *srcpad, CLONE_PARAMS *param) Newx(PadlistARRAY(dstpad), max + 1, PAD *); PadlistARRAY(dstpad)[0] = (PAD *) - padnamelist_dup(PadlistNAMES(srcpad), param); + padnamelist_dup(PadlistNAMES(srcpad), param); PadnamelistREFCNT(PadlistNAMES(dstpad))++; if (cloneall) { - PADOFFSET depth; - for (depth = 1; depth <= max; ++depth) - PadlistARRAY(dstpad)[depth] = - av_dup_inc(PadlistARRAY(srcpad)[depth], param); + PADOFFSET depth; + for (depth = 1; depth <= max; ++depth) + PadlistARRAY(dstpad)[depth] = + av_dup_inc(PadlistARRAY(srcpad)[depth], param); } else { - /* CvDEPTH() on our subroutine will be set to 0, so there's no need - to build anything other than the first level of pads. */ - PADOFFSET ix = AvFILLp(PadlistARRAY(srcpad)[1]); - AV *pad1; - const PADOFFSET names_fill = PadnamelistMAX(PadlistNAMES(srcpad)); - const PAD *const srcpad1 = PadlistARRAY(srcpad)[1]; - SV **oldpad = AvARRAY(srcpad1); - PADNAME ** const names = PadnamelistARRAY(PadlistNAMES(dstpad)); - SV **pad1a; - AV *args; - - pad1 = newAV(); - - av_extend(pad1, ix); - PadlistARRAY(dstpad)[1] = pad1; - pad1a = AvARRAY(pad1); - - if (ix > -1) { - AvFILLp(pad1) = ix; - - for ( ;ix > 0; ix--) { - if (!oldpad[ix]) { - pad1a[ix] = NULL; - } else if (names_fill >= ix && names[ix] && - PadnameLEN(names[ix])) { - const char sigil = PadnamePV(names[ix])[0]; - if (PadnameOUTER(names[ix]) - || PadnameIsSTATE(names[ix]) - || sigil == '&') - { - /* outer lexical or anon code */ - pad1a[ix] = sv_dup_inc(oldpad[ix], param); - } - else { /* our own lexical */ - if(SvPADSTALE(oldpad[ix]) && SvREFCNT(oldpad[ix]) > 1) { - /* This is a work around for how the current - implementation of ?{ } blocks in regexps - interacts with lexicals. */ - pad1a[ix] = sv_dup_inc(oldpad[ix], param); - } else { - SV *sv; - - if (sigil == '@') - sv = MUTABLE_SV(newAV()); - else if (sigil == '%') - sv = MUTABLE_SV(newHV()); - else - sv = newSV(0); - pad1a[ix] = sv; - } - } - } - else if (( names_fill >= ix && names[ix] - && PadnamePV(names[ix]) )) { - pad1a[ix] = sv_dup_inc(oldpad[ix], param); - } - else { - /* save temporaries on recursion? */ - SV * const sv = newSV(0); - pad1a[ix] = sv; - - /* SvREFCNT(oldpad[ix]) != 1 for some code in threads.xs - FIXTHAT before merging this branch. - (And I know how to) */ - if (SvPADTMP(oldpad[ix])) - SvPADTMP_on(sv); - } - } - - if (oldpad[0]) { - args = newAV(); /* Will be @_ */ - AvREIFY_only(args); - pad1a[0] = (SV *)args; - } - } + /* CvDEPTH() on our subroutine will be set to 0, so there's no need + to build anything other than the first level of pads. */ + PADOFFSET ix = AvFILLp(PadlistARRAY(srcpad)[1]); + AV *pad1; + const PADOFFSET names_fill = PadnamelistMAX(PadlistNAMES(srcpad)); + const PAD *const srcpad1 = PadlistARRAY(srcpad)[1]; + SV **oldpad = AvARRAY(srcpad1); + PADNAME ** const names = PadnamelistARRAY(PadlistNAMES(dstpad)); + SV **pad1a; + AV *args; + + pad1 = newAV(); + + av_extend(pad1, ix); + PadlistARRAY(dstpad)[1] = pad1; + pad1a = AvARRAY(pad1); + + if (ix > -1) { + AvFILLp(pad1) = ix; + + for ( ;ix > 0; ix--) { + if (!oldpad[ix]) { + pad1a[ix] = NULL; + } else if (names_fill >= ix && names[ix] && + PadnameLEN(names[ix])) { + const char sigil = PadnamePV(names[ix])[0]; + if (PadnameOUTER(names[ix]) + || PadnameIsSTATE(names[ix]) + || sigil == '&') + { + /* outer lexical or anon code */ + pad1a[ix] = sv_dup_inc(oldpad[ix], param); + } + else { /* our own lexical */ + if(SvPADSTALE(oldpad[ix]) && SvREFCNT(oldpad[ix]) > 1) { + /* This is a work around for how the current + implementation of ?{ } blocks in regexps + interacts with lexicals. */ + pad1a[ix] = sv_dup_inc(oldpad[ix], param); + } else { + SV *sv; + + if (sigil == '@') + sv = MUTABLE_SV(newAV()); + else if (sigil == '%') + sv = MUTABLE_SV(newHV()); + else + sv = newSV_type(SVt_NULL); + pad1a[ix] = sv; + } + } + } + else if (( names_fill >= ix && names[ix] + && PadnamePV(names[ix]) )) { + pad1a[ix] = sv_dup_inc(oldpad[ix], param); + } + else { + /* save temporaries on recursion? */ + SV * const sv = newSV_type(SVt_NULL); + pad1a[ix] = sv; + + /* SvREFCNT(oldpad[ix]) != 1 for some code in threads.xs + FIXTHAT before merging this branch. + (And I know how to) */ + if (SvPADTMP(oldpad[ix])) + SvPADTMP_on(sv); + } + } + + if (oldpad[0]) { + args = newAV(); /* Will be @_ */ + AvREIFY_only(args); + pad1a[0] = (SV *)args; + } + } } return dstpad; @@ -2573,11 +2594,11 @@ Perl_padlist_store(pTHX_ PADLIST *padlist, I32 key, PAD *val) assert(key >= 0); if (key > PadlistMAX(padlist)) { - av_extend_guts(NULL,key,&PadlistMAX(padlist), - (SV ***)&PadlistARRAY(padlist), - (SV ***)&PadlistARRAY(padlist)); - Zero(PadlistARRAY(padlist)+oldmax+1, PadlistMAX(padlist)-oldmax, - PAD *); + av_extend_guts(NULL,key,&PadlistMAX(padlist), + (SV ***)&PadlistARRAY(padlist), + (SV ***)&PadlistARRAY(padlist)); + Zero(PadlistARRAY(padlist)+oldmax+1, PadlistMAX(padlist)-oldmax, + PAD *); } ary = PadlistARRAY(padlist); SvREFCNT_dec(ary[key]); @@ -2626,17 +2647,17 @@ Perl_padnamelist_store(pTHX_ PADNAMELIST *pnl, SSize_t key, PADNAME *val) assert(key >= 0); if (key > pnl->xpadnl_max) - av_extend_guts(NULL,key,&pnl->xpadnl_max, - (SV ***)&PadnamelistARRAY(pnl), - (SV ***)&PadnamelistARRAY(pnl)); + av_extend_guts(NULL,key,&pnl->xpadnl_max, + (SV ***)&PadnamelistARRAY(pnl), + (SV ***)&PadnamelistARRAY(pnl)); if (PadnamelistMAX(pnl) < key) { - Zero(PadnamelistARRAY(pnl)+PadnamelistMAX(pnl)+1, - key-PadnamelistMAX(pnl), PADNAME *); - PadnamelistMAX(pnl) = key; + Zero(PadnamelistARRAY(pnl)+PadnamelistMAX(pnl)+1, + key-PadnamelistMAX(pnl), PADNAME *); + PadnamelistMAX(pnl) = key; } ary = PadnamelistARRAY(pnl); if (ary[key]) - PadnameREFCNT_dec(ary[key]); + PadnameREFCNT_dec(ary[key]); ary[key] = val; return &ary[key]; } @@ -2663,15 +2684,15 @@ Perl_padnamelist_free(pTHX_ PADNAMELIST *pnl) { PERL_ARGS_ASSERT_PADNAMELIST_FREE; if (!--PadnamelistREFCNT(pnl)) { - while(PadnamelistMAX(pnl) >= 0) - { - PADNAME * const pn = - PadnamelistARRAY(pnl)[PadnamelistMAX(pnl)--]; - if (pn) - PadnameREFCNT_dec(pn); - } - Safefree(PadnamelistARRAY(pnl)); - Safefree(pnl); + while(PadnamelistMAX(pnl) >= 0) + { + PADNAME * const pn = + PadnamelistARRAY(pnl)[PadnamelistMAX(pnl)--]; + if (pn) + PadnameREFCNT_dec(pn); + } + Safefree(PadnamelistARRAY(pnl)); + Safefree(pnl); } } @@ -2696,7 +2717,7 @@ Perl_padnamelist_dup(pTHX_ PADNAMELIST *srcpad, CLONE_PARAMS *param) /* look for it in the table first */ dstpad = (PADNAMELIST *)ptr_table_fetch(PL_ptr_table, srcpad); if (dstpad) - return dstpad; + return dstpad; dstpad = newPADNAMELIST(max); PadnamelistREFCNT(dstpad) = 0; /* The caller will increment it. */ @@ -2706,9 +2727,9 @@ Perl_padnamelist_dup(pTHX_ PADNAMELIST *srcpad, CLONE_PARAMS *param) ptr_table_store(PL_ptr_table, srcpad, dstpad); for (; max >= 0; max--) if (PadnamelistARRAY(srcpad)[max]) { - PadnamelistARRAY(dstpad)[max] = - padname_dup(PadnamelistARRAY(srcpad)[max], param); - PadnameREFCNT(PadnamelistARRAY(dstpad)[max])++; + PadnamelistARRAY(dstpad)[max] = + padname_dup(PadnamelistARRAY(srcpad)[max], param); + PadnameREFCNT(PadnamelistARRAY(dstpad)[max])++; } return dstpad; @@ -2734,8 +2755,8 @@ Perl_newPADNAMEpvn(const char *s, STRLEN len) PADNAME *pn; PERL_ARGS_ASSERT_NEWPADNAMEPVN; Newxz(alloc2, - STRUCT_OFFSET(struct padname_with_str, xpadn_str[0]) + len + 1, - char); + STRUCT_OFFSET(struct padname_with_str, xpadn_str[0]) + len + 1, + char); alloc = (struct padname_with_str *)alloc2; pn = (PADNAME *)alloc; PadnameREFCNT(pn) = 1; @@ -2780,15 +2801,15 @@ Perl_padname_free(pTHX_ PADNAME *pn) { PERL_ARGS_ASSERT_PADNAME_FREE; if (!--PadnameREFCNT(pn)) { - if (UNLIKELY(pn == &PL_padname_undef || pn == &PL_padname_const)) { - PadnameREFCNT(pn) = SvREFCNT_IMMORTAL; - return; - } - SvREFCNT_dec(PadnameTYPE(pn)); /* Takes care of protocv, too. */ - SvREFCNT_dec(PadnameOURSTASH(pn)); - if (PadnameOUTER(pn)) - PadnameREFCNT_dec(PADNAME_FROM_PV(PadnamePV(pn))); - Safefree(pn); + if (UNLIKELY(pn == &PL_padname_undef || pn == &PL_padname_const)) { + PadnameREFCNT(pn) = SvREFCNT_IMMORTAL; + return; + } + SvREFCNT_dec(PadnameTYPE(pn)); /* Takes care of protocv, too. */ + SvREFCNT_dec(PadnameOURSTASH(pn)); + if (PadnameOUTER(pn)) + PadnameREFCNT_dec(PADNAME_FROM_PV(PadnamePV(pn))); + Safefree(pn); } } @@ -2812,12 +2833,12 @@ Perl_padname_dup(pTHX_ PADNAME *src, CLONE_PARAMS *param) /* look for it in the table first */ dst = (PADNAME *)ptr_table_fetch(PL_ptr_table, src); if (dst) - return dst; + return dst; if (!PadnamePV(src)) { - dst = &PL_padname_undef; - ptr_table_store(PL_ptr_table, src, dst); - return dst; + dst = &PL_padname_undef; + ptr_table_store(PL_ptr_table, src, dst); + return dst; } dst = PadnameOUTER(src) @@ -2829,7 +2850,7 @@ Perl_padname_dup(pTHX_ PADNAME *src, CLONE_PARAMS *param) PadnameREFCNT(dst) = 0; /* The caller will increment it. */ PadnameTYPE (dst) = (HV *)sv_dup_inc((SV *)PadnameTYPE(src), param); PadnameOURSTASH(dst) = (HV *)sv_dup_inc((SV *)PadnameOURSTASH(src), - param); + param); dst->xpadn_low = src->xpadn_low; dst->xpadn_high = src->xpadn_high; dst->xpadn_gen = src->xpadn_gen; diff --git a/gnu/usr.bin/perl/pad.h b/gnu/usr.bin/perl/pad.h index 6b31ace5f28..07c4d868633 100644 --- a/gnu/usr.bin/perl/pad.h +++ b/gnu/usr.bin/perl/pad.h @@ -11,11 +11,6 @@ * variables, op targets and constants. */ -/* -=head1 Pad Data Structures -*/ - - /* offsets within a pad */ typedef SSize_t PADOFFSET; /* signed so that -1 is a valid value */ @@ -28,13 +23,13 @@ typedef SSize_t PADOFFSET; /* signed so that -1 is a valid value */ struct padlist { SSize_t xpadl_max; /* max index for which array has space */ union { - PAD ** xpadlarr_alloc; /* Pointer to beginning of array of AVs. - index 0 is a padnamelist * */ - struct { - PADNAMELIST * padnl; - PAD * pad_1; /* this slice of PAD * array always alloced */ - PAD * pad_2; /* maybe unalloced */ - } * xpadlarr_dbg; /* for use with a C debugger only */ + PAD ** xpadlarr_alloc; /* Pointer to beginning of array of AVs. + index 0 is a padnamelist * */ + struct { + PADNAMELIST * padnl; + PAD * pad_1; /* this slice of PAD * array always alloced */ + PAD * pad_2; /* maybe unalloced */ + } * xpadlarr_dbg; /* for use with a C debugger only */ } xpadl_arr; U32 xpadl_id; /* Semi-unique ID, shared between clones */ U32 xpadl_outid; /* ID of outer pad */ @@ -63,8 +58,8 @@ struct padnamelist { char * xpadn_pv; \ HV * xpadn_ourstash; \ union { \ - HV * xpadn_typestash; \ - CV * xpadn_protocv; \ + HV * xpadn_typestash; \ + CV * xpadn_protocv; \ } xpadn_type_u; \ U32 xpadn_low; \ U32 xpadn_high; \ @@ -97,8 +92,8 @@ struct padname_with_str { */ #define PERL_PADSEQ_INTRO U32_MAX #define COP_SEQMAX_INC \ - (PL_cop_seqmax++, \ - (void)(PL_cop_seqmax == PERL_PADSEQ_INTRO && PL_cop_seqmax++)) + (PL_cop_seqmax++, \ + (void)(PL_cop_seqmax == PERL_PADSEQ_INTRO && PL_cop_seqmax++)) /* B.xs needs these for the benefit of B::Deparse */ @@ -124,9 +119,9 @@ struct padname_with_str { /* values for the pad_tidy() function */ typedef enum { - padtidy_SUB, /* tidy up a pad for a sub, */ - padtidy_SUBCLONE, /* a cloned sub, */ - padtidy_FORMAT /* or a format */ + padtidy_SUB, /* tidy up a pad for a sub, */ + padtidy_SUBCLONE, /* a cloned sub, */ + padtidy_FORMAT /* or a format */ } padtidy_type; /* flags for pad_add_name_pvn. */ @@ -135,7 +130,7 @@ typedef enum { #define padadd_STATE 0x02 /* state declaration. */ #define padadd_NO_DUP_CHECK 0x04 /* skip warning on dups. */ #define padadd_STALEOK 0x08 /* allow stale lexical in active - * sub, but only one level up */ + * sub, but only one level up */ /* ASSERT_CURPAD_LEGAL and ASSERT_CURPAD_ACTIVE respectively determine * whether PL_comppad and PL_curpad are consistent and whether they have @@ -147,15 +142,15 @@ typedef enum { # define ASSERT_CURPAD_LEGAL(label) \ pad_peg(label); \ if (PL_comppad ? (AvARRAY(PL_comppad) != PL_curpad) : (PL_curpad != 0)) \ - Perl_croak(aTHX_ "panic: illegal pad in %s: 0x%" UVxf "[0x%" UVxf "]",\ - label, PTR2UV(PL_comppad), PTR2UV(PL_curpad)); + Perl_croak(aTHX_ "panic: illegal pad in %s: 0x%" UVxf "[0x%" UVxf "]",\ + label, PTR2UV(PL_comppad), PTR2UV(PL_curpad)); # define ASSERT_CURPAD_ACTIVE(label) \ pad_peg(label); \ if (!PL_comppad || (AvARRAY(PL_comppad) != PL_curpad)) \ - Perl_croak(aTHX_ "panic: invalid pad in %s: 0x%" UVxf "[0x%" UVxf "]",\ - label, PTR2UV(PL_comppad), PTR2UV(PL_curpad)); + Perl_croak(aTHX_ "panic: invalid pad in %s: 0x%" UVxf "[0x%" UVxf "]",\ + label, PTR2UV(PL_comppad), PTR2UV(PL_curpad)); #else # define ASSERT_CURPAD_LEGAL(label) # define ASSERT_CURPAD_ACTIVE(label) @@ -170,7 +165,10 @@ typedef enum { =for apidoc m|void|SAVEPADSV |PADOFFSET po Save a pad slot (used to restore after an iteration) +=cut + XXX DAPM it would make more sense to make the arg a PADOFFSET + =for apidoc m|void|SAVECLEARSV |SV **svp Clear the pointed to pad value on scope exit. (i.e. the runtime action of C) @@ -234,7 +232,7 @@ Returns the pad name as a mortal SV. =for apidoc m|bool|PadnameIsOUR|PADNAME * pn Whether this is an "our" variable. -=for apidoc m|HV *|PadnameOURSTASH +=for apidoc m|HV *|PadnameOURSTASH|PADNAME * pn The stash in which this "our" variable was declared. =for apidoc m|bool|PadnameOUTER|PADNAME * pn @@ -315,7 +313,7 @@ Restore the old pad saved into the local variable C by C #define PadnameLEN(pn) (pn)->xpadn_len #define PadnameUTF8(pn) 1 #define PadnameSV(pn) \ - newSVpvn_flags(PadnamePV(pn), PadnameLEN(pn), SVs_TEMP|SVf_UTF8) + newSVpvn_flags(PadnamePV(pn), PadnameLEN(pn), SVs_TEMP|SVf_UTF8) #define PadnameFLAGS(pn) (pn)->xpadn_flags #define PadnameIsOUR(pn) (!!(pn)->xpadn_ourstash) #define PadnameOURSTASH(pn) (pn)->xpadn_ourstash @@ -362,43 +360,43 @@ Restore the old pad saved into the local variable C by C #define PAD_SVl(po) (PL_curpad[po]) #define PAD_BASE_SV(padlist, po) \ - (PadlistARRAY(padlist)[1]) \ - ? AvARRAY(MUTABLE_AV((PadlistARRAY(padlist)[1])))[po] \ - : NULL; + (PadlistARRAY(padlist)[1]) \ + ? AvARRAY(MUTABLE_AV((PadlistARRAY(padlist)[1])))[po] \ + : NULL; #define PAD_SET_CUR_NOSAVE(padlist,nth) \ - PL_comppad = (PAD*) (PadlistARRAY(padlist)[nth]); \ - PL_curpad = AvARRAY(PL_comppad); \ - DEBUG_Xv(PerlIO_printf(Perl_debug_log, \ - "Pad 0x%" UVxf "[0x%" UVxf "] set_cur depth=%d\n", \ - PTR2UV(PL_comppad), PTR2UV(PL_curpad), (int)(nth))); + PL_comppad = (PAD*) (PadlistARRAY(padlist)[nth]); \ + PL_curpad = AvARRAY(PL_comppad); \ + DEBUG_Xv(PerlIO_printf(Perl_debug_log, \ + "Pad 0x%" UVxf "[0x%" UVxf "] set_cur depth=%d\n", \ + PTR2UV(PL_comppad), PTR2UV(PL_curpad), (int)(nth))); #define PAD_SET_CUR(padlist,nth) \ - SAVECOMPPAD(); \ - PAD_SET_CUR_NOSAVE(padlist,nth); + SAVECOMPPAD(); \ + PAD_SET_CUR_NOSAVE(padlist,nth); #define PAD_SAVE_SETNULLPAD() SAVECOMPPAD(); \ - PL_comppad = NULL; PL_curpad = NULL; \ - DEBUG_Xv(PerlIO_printf(Perl_debug_log, "Pad set_null\n")); + PL_comppad = NULL; PL_curpad = NULL; \ + DEBUG_Xv(PerlIO_printf(Perl_debug_log, "Pad set_null\n")); #define PAD_SAVE_LOCAL(opad,npad) \ - opad = PL_comppad; \ - PL_comppad = (npad); \ - PL_curpad = PL_comppad ? AvARRAY(PL_comppad) : NULL; \ - DEBUG_Xv(PerlIO_printf(Perl_debug_log, \ - "Pad 0x%" UVxf "[0x%" UVxf "] save_local\n", \ - PTR2UV(PL_comppad), PTR2UV(PL_curpad))); + opad = PL_comppad; \ + PL_comppad = (npad); \ + PL_curpad = PL_comppad ? AvARRAY(PL_comppad) : NULL; \ + DEBUG_Xv(PerlIO_printf(Perl_debug_log, \ + "Pad 0x%" UVxf "[0x%" UVxf "] save_local\n", \ + PTR2UV(PL_comppad), PTR2UV(PL_curpad))); #define PAD_RESTORE_LOCAL(opad) \ assert(!opad || !SvIS_FREED(opad)); \ - PL_comppad = opad; \ - PL_curpad = PL_comppad ? AvARRAY(PL_comppad) : NULL; \ - DEBUG_Xv(PerlIO_printf(Perl_debug_log, \ - "Pad 0x%" UVxf "[0x%" UVxf "] restore_local\n", \ - PTR2UV(PL_comppad), PTR2UV(PL_curpad))); + PL_comppad = opad; \ + PL_curpad = PL_comppad ? AvARRAY(PL_comppad) : NULL; \ + DEBUG_Xv(PerlIO_printf(Perl_debug_log, \ + "Pad 0x%" UVxf "[0x%" UVxf "] restore_local\n", \ + PTR2UV(PL_comppad), PTR2UV(PL_curpad))); /* @@ -481,7 +479,7 @@ Clone the state variables associated with running and compiling pads. PL_comppad = av_dup(proto_perl->Icomppad, param); \ PL_curpad = PL_comppad ? AvARRAY(PL_comppad) : NULL; \ PL_comppad_name = \ - padnamelist_dup(proto_perl->Icomppad_name, param); \ + padnamelist_dup(proto_perl->Icomppad_name, param); \ PL_comppad_name_fill = proto_perl->Icomppad_name_fill; \ PL_comppad_name_floor = proto_perl->Icomppad_name_floor; \ PL_min_intro_pending = proto_perl->Imin_intro_pending; \ diff --git a/gnu/usr.bin/perl/parser.h b/gnu/usr.bin/perl/parser.h index abffd25c424..46d6a19c7b1 100644 --- a/gnu/usr.bin/perl/parser.h +++ b/gnu/usr.bin/perl/parser.h @@ -56,7 +56,7 @@ typedef struct yy_parser { char *lex_casestack; /* what kind of case mods in effect */ U8 lex_defer; /* state after determined token */ U8 lex_dojoin; /* doing an array interpolation - 1 = @{...} 2 = ->@ */ + 1 = @{...} 2 = ->@ */ U8 expect; /* how to interpret ambiguous tokens */ bool preambled; bool sub_no_recover; /* can't recover from a sublex error */ @@ -70,8 +70,8 @@ typedef struct yy_parser { SV *lex_stuff; /* runtime pattern from m// or s/// */ I32 multi_start; /* 1st line of multi-line string */ I32 multi_end; /* last line of multi-line string */ - UV multi_open; /* delimiter of said string */ - UV multi_close; /* delimiter of said string */ + UV multi_open; /* delimiter code point of said string */ + UV multi_close; /* delimiter code point of said string */ bool lex_re_reparsing; /* we're doing G_RE_REPARSING */ U8 lex_super_state;/* lexer state to save */ U16 lex_sub_inwhat; /* "lex_inwhat" to use in sublex_push */ @@ -81,8 +81,8 @@ typedef struct yy_parser { LEXSHARED *lex_shared; SV *linestr; /* current chunk of src text */ char *bufptr; /* carries the cursor (current parsing - position) from one invocation of yylex - to the next */ + position) from one invocation of yylex + to the next */ char *oldbufptr; /* in yylex, beginning of current token */ char *oldoldbufptr; /* in yylex, beginning of previous token */ char *bufend; @@ -137,8 +137,8 @@ typedef struct yy_parser { # define LEX_START_COPIED 0x00000008 # define LEX_DONT_CLOSE_RSFP 0x00000010 # define LEX_START_FLAGS \ - (LEX_START_SAME_FILTER|LEX_START_COPIED \ - |LEX_IGNORE_UTF8_HINTS|LEX_EVALBYTES|LEX_DONT_CLOSE_RSFP) + (LEX_START_SAME_FILTER|LEX_START_COPIED \ + |LEX_IGNORE_UTF8_HINTS|LEX_EVALBYTES|LEX_DONT_CLOSE_RSFP) #endif /* flags for parser API */ diff --git a/gnu/usr.bin/perl/patchlevel.h b/gnu/usr.bin/perl/patchlevel.h index 3c504eef587..b2b2bee9a19 100644 --- a/gnu/usr.bin/perl/patchlevel.h +++ b/gnu/usr.bin/perl/patchlevel.h @@ -8,14 +8,38 @@ * */ +/* +=for apidoc AmDnU|U8|PERL_REVISION +The major number component of the perl interpreter currently being compiled or +executing. This has been C<5> from 1993 into 2020. + +Instead use one of the version comparison macros. See C>. + +=for apidoc AmDnU|U8|PERL_VERSION +The minor number component of the perl interpreter currently being compiled or +executing. Between 1993 into 2020, this has ranged from 0 to 33. + +Instead use one of the version comparison macros. See C>. + +=for apidoc AmDnU|U8|PERL_SUBVERSION +The micro number component of the perl interpreter currently being compiled or +executing. In stable releases this gives the dot release number for +maintenance updates. In development releases this gives a tag for a snapshot +of the status at various points in the development cycle. + +Instead use one of the version comparison macros. See C>. + +=cut +*/ + #ifndef __PATCHLEVEL_H_INCLUDED__ /* do not adjust the whitespace! Configure expects the numbers to be * exactly on the third column */ #define PERL_REVISION 5 /* age */ -#define PERL_VERSION 32 /* epoch */ -#define PERL_SUBVERSION 1 /* generation */ +#define PERL_VERSION 36 /* epoch */ +#define PERL_SUBVERSION 0 /* generation */ /* The following numbers describe the earliest compatible version of Perl ("compatibility" here being defined as sufficient binary/API @@ -35,7 +59,7 @@ changing them should not be necessary. */ #define PERL_API_REVISION 5 -#define PERL_API_VERSION 32 +#define PERL_API_VERSION 36 #define PERL_API_SUBVERSION 0 /* XXX Note: The selection of non-default Configure options, such @@ -47,42 +71,42 @@ #endif /* - local_patches -- list of locally applied less-than-subversion patches. - If you're distributing such a patch, please give it a name and a - one-line description, placed just before the last NULL in the array - below. If your patch fixes a bug in the perlbug database, please - mention the bugid. If your patch *IS* dependent on a prior patch, - please place your applied patch line after its dependencies. This - will help tracking of patch dependencies. - - Please either use 'diff --unified=0' if your diff supports - that or edit the hunk of the diff output which adds your patch - to this list, to remove context lines which would give patch - problems. For instance, if the original context diff is - - *** patchlevel.h.orig - --- patchlevel.h - *** 38,43 *** - --- 38,44 --- - ,"FOO1235 - some patch" - ,"BAR3141 - another patch" - ,"BAZ2718 - and another patch" - + ,"MINE001 - my new patch" - ,NULL - }; - - please change it to - *** patchlevel.h.orig - --- patchlevel.h - *** 41,43 *** - --- 41,44 --- - + ,"MINE001 - my new patch" - ,NULL - }; - - (Note changes to line numbers as well as removal of context lines.) - This will prevent patch from choking if someone has previously - applied different patches than you. + local_patches -- list of locally applied less-than-subversion patches. + If you're distributing such a patch, please give it a name and a + one-line description, placed just before the last NULL in the array + below. If your patch fixes a bug in the perlbug database, please + mention the bugid. If your patch *IS* dependent on a prior patch, + please place your applied patch line after its dependencies. This + will help tracking of patch dependencies. + + Please either use 'diff --unified=0' if your diff supports + that or edit the hunk of the diff output which adds your patch + to this list, to remove context lines which would give patch + problems. For instance, if the original context diff is + + *** patchlevel.h.orig + --- patchlevel.h + *** 38,43 *** + --- 38,44 --- + ,"FOO1235 - some patch" + ,"BAR3141 - another patch" + ,"BAZ2718 - and another patch" + + ,"MINE001 - my new patch" + ,NULL + }; + + please change it to + *** patchlevel.h.orig + --- patchlevel.h + *** 41,43 *** + --- 41,44 --- + + ,"MINE001 - my new patch" + ,NULL + }; + + (Note changes to line numbers as well as removal of context lines.) + This will prevent patch from choking if someone has previously + applied different patches than you. History has shown that nobody distributes patches that also modify patchlevel.h. Do it yourself. The following perl @@ -96,8 +120,8 @@ my $seen=0; while () { if (/\t,NULL/ and $seen) { while (my $c = shift @ARGV){ - $c =~ s|\\|\\\\|g; - $c =~ s|"|\\"|g; + $c =~ s|\\|\\\\|g; + $c =~ s|"|\\"|g; print PLOUT qq{\t,"$c"\n}; } } @@ -132,19 +156,19 @@ hunk. #include "git_version.h" # endif static const char * const local_patches[] = { - NULL + NULL #ifdef PERL_GIT_UNCOMMITTED_CHANGES - ,"uncommitted-changes" + ,"uncommitted-changes" #endif - PERL_GIT_UNPUSHED_COMMITS /* do not remove this line */ - ,NULL + PERL_GIT_UNPUSHED_COMMITS /* do not remove this line */ + ,NULL }; /* Initial space prevents this variable from being inserted in config.sh */ # define LOCAL_PATCH_COUNT \ - ((int)(C_ARRAY_LENGTH(local_patches)-2)) + ((int)(C_ARRAY_LENGTH(local_patches)-2)) /* the old terms of reference, add them only when explicitly included */ #define PATCHLEVEL PERL_VERSION diff --git a/gnu/usr.bin/perl/perl.c b/gnu/usr.bin/perl/perl.c index 494f8b49b62..1b666590da0 100644 --- a/gnu/usr.bin/perl/perl.c +++ b/gnu/usr.bin/perl/perl.c @@ -3,8 +3,8 @@ * * Copyright (C) 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001 * 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011, 2012 - * 2013, 2014, 2015, 2016, 2017, 2018, 2019, 2020, 2021 by Larry Wall - * and others + * 2013, 2014, 2015, 2016, 2017, 2018, 2019, 2020, 2021, 2022 + * by Larry Wall and others * * You may distribute under the terms of either the GNU General Public * License or the Artistic License, as specified in the README file. @@ -39,10 +39,6 @@ #include "patchlevel.h" /* for local_patches */ #include "XSUB.h" -#ifdef NETWARE -#include "nwutil.h" -#endif - #ifdef DEBUG_LEAKING_SCALARS_FORK_DUMP # ifdef I_SYSUIO # include @@ -73,9 +69,9 @@ static I32 read_e_script(pTHX_ int idx, SV *buf_sv, int maxlen); #define CALL_BODY_SUB(myop) \ if (PL_op == (myop)) \ - PL_op = PL_ppaddr[OP_ENTERSUB](aTHX); \ + PL_op = PL_ppaddr[OP_ENTERSUB](aTHX); \ if (PL_op) \ - CALLRUNOPS(aTHX); + CALLRUNOPS(aTHX); #define CALL_LIST_BODY(cv) \ PUSHMARK(PL_stack_sp); \ @@ -84,22 +80,21 @@ static I32 read_e_script(pTHX_ int idx, SV *buf_sv, int maxlen); static void S_init_tls_and_interp(PerlInterpreter *my_perl) { - dVAR; - if (!PL_curinterp) { - PERL_SET_INTERP(my_perl); + if (!PL_curinterp) { + PERL_SET_INTERP(my_perl); #if defined(USE_ITHREADS) - INIT_THREADS; - ALLOC_THREAD_KEY; - PERL_SET_THX(my_perl); - OP_REFCNT_INIT; - OP_CHECK_MUTEX_INIT; + INIT_THREADS; + ALLOC_THREAD_KEY; + PERL_SET_THX(my_perl); + OP_REFCNT_INIT; + OP_CHECK_MUTEX_INIT; KEYWORD_PLUGIN_MUTEX_INIT; - HINTS_REFCNT_INIT; + HINTS_REFCNT_INIT; LOCALE_INIT; USER_PROP_MUTEX_INIT; ENV_INIT; - MUTEX_INIT(&PL_dollarzero_mutex); - MUTEX_INIT(&PL_my_ctx_mutex); + MUTEX_INIT(&PL_dollarzero_mutex); + MUTEX_INIT(&PL_my_ctx_mutex); # endif } #if defined(USE_ITHREADS) @@ -108,7 +103,7 @@ S_init_tls_and_interp(PerlInterpreter *my_perl) /* This always happens for non-ithreads */ #endif { - PERL_SET_THX(my_perl); + PERL_SET_THX(my_perl); } } @@ -118,7 +113,6 @@ S_init_tls_and_interp(PerlInterpreter *my_perl) void Perl_sys_init(int* argc, char*** argv) { - dVAR; PERL_ARGS_ASSERT_SYS_INIT; @@ -130,7 +124,6 @@ Perl_sys_init(int* argc, char*** argv) void Perl_sys_init3(int* argc, char*** argv, char*** env) { - dVAR; PERL_ARGS_ASSERT_SYS_INIT3; @@ -143,9 +136,8 @@ Perl_sys_init3(int* argc, char*** argv, char*** env) void Perl_sys_term(void) { - dVAR; if (!PL_veto_cleanup) { - PERL_SYS_TERM_BODY(); + PERL_SYS_TERM_BODY(); } } @@ -153,19 +145,18 @@ Perl_sys_term(void) #ifdef PERL_IMPLICIT_SYS PerlInterpreter * perl_alloc_using(struct IPerlMem* ipM, struct IPerlMem* ipMS, - struct IPerlMem* ipMP, struct IPerlEnv* ipE, - struct IPerlStdIO* ipStd, struct IPerlLIO* ipLIO, - struct IPerlDir* ipD, struct IPerlSock* ipS, - struct IPerlProc* ipP) + struct IPerlMem* ipMP, struct IPerlEnv* ipE, + struct IPerlStdIO* ipStd, struct IPerlLIO* ipLIO, + struct IPerlDir* ipD, struct IPerlSock* ipS, + struct IPerlProc* ipP) { PerlInterpreter *my_perl; PERL_ARGS_ASSERT_PERL_ALLOC_USING; /* Newx() needs interpreter, so call malloc() instead */ - my_perl = (PerlInterpreter*)(*ipM->pMalloc)(ipM, sizeof(PerlInterpreter)); + my_perl = (PerlInterpreter*)(*ipM->pCalloc)(ipM, 1, sizeof(PerlInterpreter)); S_init_tls_and_interp(my_perl); - Zero(my_perl, 1, PerlInterpreter); PL_Mem = ipM; PL_MemShared = ipMS; PL_MemParse = ipMP; @@ -182,7 +173,7 @@ perl_alloc_using(struct IPerlMem* ipM, struct IPerlMem* ipMS, #else /* -=head1 Embedding Functions +=for apidoc_section $embedding =for apidoc perl_alloc @@ -194,19 +185,11 @@ Allocates a new Perl interpreter. See L. PerlInterpreter * perl_alloc(void) { - PerlInterpreter *my_perl; - - /* Newx() needs interpreter, so call malloc() instead */ - my_perl = (PerlInterpreter*)PerlMem_malloc(sizeof(PerlInterpreter)); + PerlInterpreter *my_perl = (PerlInterpreter*)PerlMem_calloc(1, sizeof(PerlInterpreter)); S_init_tls_and_interp(my_perl); -#ifndef PERL_TRACK_MEMPOOL - return (PerlInterpreter *) ZeroD(my_perl, 1, PerlInterpreter); -#else - Zero(my_perl, 1, PerlInterpreter); INIT_TRACK_MEMPOOL(PL_memory_debug_header, my_perl); return my_perl; -#endif } #endif /* PERL_IMPLICIT_SYS */ @@ -221,7 +204,6 @@ Initializes a new Perl interpreter. See L. void perl_construct(pTHXx) { - dVAR; PERL_ARGS_ASSERT_PERL_CONSTRUCT; @@ -390,7 +372,7 @@ perl_construct(pTHXx) PL_clocktick = sysconf(_SC_CLK_TCK); if (PL_clocktick <= 0) #endif - PL_clocktick = HZ; + PL_clocktick = HZ; PL_stashcache = newHV(); @@ -400,16 +382,16 @@ perl_construct(pTHXx) if (!PL_mmap_page_size) { #if defined(HAS_SYSCONF) && (defined(_SC_PAGESIZE) || defined(_SC_MMAP_PAGE_SIZE)) { - SETERRNO(0, SS_NORMAL); + SETERRNO(0, SS_NORMAL); # ifdef _SC_PAGESIZE - PL_mmap_page_size = sysconf(_SC_PAGESIZE); + PL_mmap_page_size = sysconf(_SC_PAGESIZE); # else - PL_mmap_page_size = sysconf(_SC_MMAP_PAGE_SIZE); + PL_mmap_page_size = sysconf(_SC_MMAP_PAGE_SIZE); # endif - if ((long) PL_mmap_page_size < 0) { - Perl_croak(aTHX_ "panic: sysconf: %s", - errno ? Strerror(errno) : "pagesize unknown"); - } + if ((long) PL_mmap_page_size < 0) { + Perl_croak(aTHX_ "panic: sysconf: %s", + errno ? Strerror(errno) : "pagesize unknown"); + } } #elif defined(HAS_GETPAGESIZE) PL_mmap_page_size = getpagesize(); @@ -417,18 +399,11 @@ perl_construct(pTHXx) PL_mmap_page_size = PAGESIZE; /* compiletime, bad */ #endif if (PL_mmap_page_size <= 0) - Perl_croak(aTHX_ "panic: bad pagesize %" IVdf, - (IV) PL_mmap_page_size); + Perl_croak(aTHX_ "panic: bad pagesize %" IVdf, + (IV) PL_mmap_page_size); } #endif /* HAS_MMAP */ -#if defined(HAS_TIMES) && defined(PERL_NEED_TIMESBASE) - PL_timesbase.tms_utime = 0; - PL_timesbase.tms_stime = 0; - PL_timesbase.tms_cutime = 0; - PL_timesbase.tms_cstime = 0; -#endif - PL_osname = Perl_savepvn(aTHX_ STR_WITH_LEN(OSNAME)); PL_registered_mros = newHV(); @@ -476,7 +451,7 @@ Perl_dump_sv_child(pTHX_ SV *sv) PERL_ARGS_ASSERT_DUMP_SV_CHILD; if(sock == -1 || debug_fd == -1) - return; + return; PerlIO_flush(Perl_debug_log); @@ -505,12 +480,12 @@ Perl_dump_sv_child(pTHX_ SV *sv) got = sendmsg(sock, &msg, 0); if(got < 0) { - perror("Debug leaking scalars parent sendmsg failed"); - abort(); + perror("Debug leaking scalars parent sendmsg failed"); + abort(); } if(got < sizeof(sv)) { - perror("Debug leaking scalars parent short sendmsg"); - abort(); + perror("Debug leaking scalars parent short sendmsg"); + abort(); } /* Return protocol is @@ -526,35 +501,35 @@ Perl_dump_sv_child(pTHX_ SV *sv) got = readv(sock, vec, 2); if(got < 0) { - perror("Debug leaking scalars parent read failed"); - PerlIO_flush(PerlIO_stderr()); - abort(); + perror("Debug leaking scalars parent read failed"); + PerlIO_flush(PerlIO_stderr()); + abort(); } if(got < sizeof(returned_errno) + 1) { - perror("Debug leaking scalars parent short read"); - PerlIO_flush(PerlIO_stderr()); - abort(); + perror("Debug leaking scalars parent short read"); + PerlIO_flush(PerlIO_stderr()); + abort(); } if (*buffer) { - got = read(sock, buffer + 1, *buffer); - if(got < 0) { - perror("Debug leaking scalars parent read 2 failed"); - PerlIO_flush(PerlIO_stderr()); - abort(); - } + got = read(sock, buffer + 1, *buffer); + if(got < 0) { + perror("Debug leaking scalars parent read 2 failed"); + PerlIO_flush(PerlIO_stderr()); + abort(); + } - if(got < *buffer) { - perror("Debug leaking scalars parent short read 2"); - PerlIO_flush(PerlIO_stderr()); - abort(); - } + if(got < *buffer) { + perror("Debug leaking scalars parent short read 2"); + PerlIO_flush(PerlIO_stderr()); + abort(); + } } if (returned_errno || *buffer) { - Perl_warn(aTHX_ "Debug leaking scalars child failed%s%.*s with errno" - " %d: %s", (*buffer ? " at " : ""), (int) *buffer, buffer + 1, - returned_errno, Strerror(returned_errno)); + Perl_warn(aTHX_ "Debug leaking scalars child failed%s%.*s with errno" + " %d: %s", (*buffer ? " at " : ""), (int) *buffer, buffer + 1, + returned_errno, Strerror(returned_errno)); } } #endif @@ -594,7 +569,6 @@ interpret specific numeric values as having specific meanings. int perl_destruct(pTHXx) { - dVAR; volatile signed char destruct_level; /* see possible values in intrpvar.h */ HV *hv; #ifdef DEBUG_LEAKING_SCALARS_FORK_DUMP @@ -614,8 +588,8 @@ perl_destruct(pTHXx) destruct_level = PL_perl_destruct_level; { - const char * const s = PerlEnv_getenv("PERL_DESTRUCT_LEVEL"); - if (s) { + const char * const s = PerlEnv_getenv("PERL_DESTRUCT_LEVEL"); + if (s) { int i; if (strEQ(s, "-1")) { /* Special case: modperl folklore. */ i = -1; @@ -626,12 +600,12 @@ perl_destruct(pTHXx) else i = 0; } - if (destruct_level < i) destruct_level = i; + if (destruct_level < i) destruct_level = i; #ifdef PERL_TRACK_MEMPOOL /* RT #114496, for perl_free */ PL_perl_destruct_level = i; #endif - } + } } if (PL_exit_flags & PERL_EXIT_DESTRUCT_END) { @@ -639,11 +613,11 @@ perl_destruct(pTHXx) int x = 0; JMPENV_PUSH(x); - PERL_UNUSED_VAR(x); + PERL_UNUSED_VAR(x); if (PL_endav && !PL_minus_c) { - PERL_SET_PHASE(PERL_PHASE_END); + PERL_SET_PHASE(PERL_PHASE_END); call_list(PL_scopestack_ix, PL_endav); - } + } JMPENV_POP; } LEAVE; @@ -707,164 +681,164 @@ perl_destruct(pTHXx) if (PL_threadhook(aTHX)) { /* Threads hook has vetoed further cleanup */ - PL_veto_cleanup = TRUE; + PL_veto_cleanup = TRUE; return STATUS_EXIT; } #ifdef DEBUG_LEAKING_SCALARS_FORK_DUMP if (destruct_level != 0) { - /* Fork here to create a child. Our child's job is to preserve the - state of scalars prior to destruction, so that we can instruct it - to dump any scalars that we later find have leaked. - There's no subtlety in this code - it assumes POSIX, and it doesn't - fail gracefully */ - int fd[2]; - - if(PerlSock_socketpair_cloexec(AF_UNIX, SOCK_STREAM, 0, fd)) { - perror("Debug leaking scalars socketpair failed"); - abort(); - } - - child = fork(); - if(child == -1) { - perror("Debug leaking scalars fork failed"); - abort(); - } - if (!child) { - /* We are the child */ - const int sock = fd[1]; - const int debug_fd = PerlIO_fileno(Perl_debug_log); - int f; - const char *where; - /* Our success message is an integer 0, and a char 0 */ - static const char success[sizeof(int) + 1] = {0}; - - close(fd[0]); - - /* We need to close all other file descriptors otherwise we end up - with interesting hangs, where the parent closes its end of a - pipe, and sits waiting for (another) child to terminate. Only - that child never terminates, because it never gets EOF, because - we also have the far end of the pipe open. We even need to - close the debugging fd, because sometimes it happens to be one - end of a pipe, and a process is waiting on the other end for - EOF. Normally it would be closed at some point earlier in - destruction, but if we happen to cause the pipe to remain open, - EOF never occurs, and we get an infinite hang. Hence all the - games to pass in a file descriptor if it's actually needed. */ - - f = sysconf(_SC_OPEN_MAX); - if(f < 0) { - where = "sysconf failed"; - goto abort; - } - while (f--) { - if (f == sock) - continue; - close(f); - } - - while (1) { - SV *target; - union control_un control; - struct msghdr msg; - struct iovec vec[1]; - struct cmsghdr *cmptr; - ssize_t got; - int got_fd; - - msg.msg_control = control.control; - msg.msg_controllen = sizeof(control.control); - /* We're a connected socket so we don't need a source */ - msg.msg_name = NULL; - msg.msg_namelen = 0; - msg.msg_iov = vec; - msg.msg_iovlen = C_ARRAY_LENGTH(vec); - - vec[0].iov_base = (void*)⌖ - vec[0].iov_len = sizeof(target); - - got = recvmsg(sock, &msg, 0); - - if(got == 0) - break; - if(got < 0) { - where = "recv failed"; - goto abort; - } - if(got < sizeof(target)) { - where = "short recv"; - goto abort; - } - - if(!(cmptr = CMSG_FIRSTHDR(&msg))) { - where = "no cmsg"; - goto abort; - } - if(cmptr->cmsg_len != CMSG_LEN(sizeof(int))) { - where = "wrong cmsg_len"; - goto abort; - } - if(cmptr->cmsg_level != SOL_SOCKET) { - where = "wrong cmsg_level"; - goto abort; - } - if(cmptr->cmsg_type != SCM_RIGHTS) { - where = "wrong cmsg_type"; - goto abort; - } - - got_fd = *(int*)CMSG_DATA(cmptr); - /* For our last little bit of trickery, put the file descriptor - back into Perl_debug_log, as if we never actually closed it - */ - if(got_fd != debug_fd) { - if (PerlLIO_dup2_cloexec(got_fd, debug_fd) == -1) { - where = "dup2"; - goto abort; - } - } - sv_dump(target); - - PerlIO_flush(Perl_debug_log); - - got = write(sock, &success, sizeof(success)); - - if(got < 0) { - where = "write failed"; - goto abort; - } - if(got < sizeof(success)) { - where = "short write"; - goto abort; - } - } - _exit(0); - abort: - { - int send_errno = errno; - unsigned char length = (unsigned char) strlen(where); - struct iovec failure[3] = { - {(void*)&send_errno, sizeof(send_errno)}, - {&length, 1}, - {(void*)where, length} - }; - int got = writev(sock, failure, 3); - /* Bad news travels fast. Faster than data. We'll get a SIGPIPE - in the parent if we try to read from the socketpair after the - child has exited, even if there was data to read. - So sleep a bit to give the parent a fighting chance of - reading the data. */ - sleep(2); - _exit((got == -1) ? errno : 0); - } - /* End of child. */ - } - PL_dumper_fd = fd[0]; - close(fd[1]); + /* Fork here to create a child. Our child's job is to preserve the + state of scalars prior to destruction, so that we can instruct it + to dump any scalars that we later find have leaked. + There's no subtlety in this code - it assumes POSIX, and it doesn't + fail gracefully */ + int fd[2]; + + if(PerlSock_socketpair_cloexec(AF_UNIX, SOCK_STREAM, 0, fd)) { + perror("Debug leaking scalars socketpair failed"); + abort(); + } + + child = fork(); + if(child == -1) { + perror("Debug leaking scalars fork failed"); + abort(); + } + if (!child) { + /* We are the child */ + const int sock = fd[1]; + const int debug_fd = PerlIO_fileno(Perl_debug_log); + int f; + const char *where; + /* Our success message is an integer 0, and a char 0 */ + static const char success[sizeof(int) + 1] = {0}; + + close(fd[0]); + + /* We need to close all other file descriptors otherwise we end up + with interesting hangs, where the parent closes its end of a + pipe, and sits waiting for (another) child to terminate. Only + that child never terminates, because it never gets EOF, because + we also have the far end of the pipe open. We even need to + close the debugging fd, because sometimes it happens to be one + end of a pipe, and a process is waiting on the other end for + EOF. Normally it would be closed at some point earlier in + destruction, but if we happen to cause the pipe to remain open, + EOF never occurs, and we get an infinite hang. Hence all the + games to pass in a file descriptor if it's actually needed. */ + + f = sysconf(_SC_OPEN_MAX); + if(f < 0) { + where = "sysconf failed"; + goto abort; + } + while (f--) { + if (f == sock) + continue; + close(f); + } + + while (1) { + SV *target; + union control_un control; + struct msghdr msg; + struct iovec vec[1]; + struct cmsghdr *cmptr; + ssize_t got; + int got_fd; + + msg.msg_control = control.control; + msg.msg_controllen = sizeof(control.control); + /* We're a connected socket so we don't need a source */ + msg.msg_name = NULL; + msg.msg_namelen = 0; + msg.msg_iov = vec; + msg.msg_iovlen = C_ARRAY_LENGTH(vec); + + vec[0].iov_base = (void*)⌖ + vec[0].iov_len = sizeof(target); + + got = recvmsg(sock, &msg, 0); + + if(got == 0) + break; + if(got < 0) { + where = "recv failed"; + goto abort; + } + if(got < sizeof(target)) { + where = "short recv"; + goto abort; + } + + if(!(cmptr = CMSG_FIRSTHDR(&msg))) { + where = "no cmsg"; + goto abort; + } + if(cmptr->cmsg_len != CMSG_LEN(sizeof(int))) { + where = "wrong cmsg_len"; + goto abort; + } + if(cmptr->cmsg_level != SOL_SOCKET) { + where = "wrong cmsg_level"; + goto abort; + } + if(cmptr->cmsg_type != SCM_RIGHTS) { + where = "wrong cmsg_type"; + goto abort; + } + + got_fd = *(int*)CMSG_DATA(cmptr); + /* For our last little bit of trickery, put the file descriptor + back into Perl_debug_log, as if we never actually closed it + */ + if(got_fd != debug_fd) { + if (PerlLIO_dup2_cloexec(got_fd, debug_fd) == -1) { + where = "dup2"; + goto abort; + } + } + sv_dump(target); + + PerlIO_flush(Perl_debug_log); + + got = write(sock, &success, sizeof(success)); + + if(got < 0) { + where = "write failed"; + goto abort; + } + if(got < sizeof(success)) { + where = "short write"; + goto abort; + } + } + _exit(0); + abort: + { + int send_errno = errno; + unsigned char length = (unsigned char) strlen(where); + struct iovec failure[3] = { + {(void*)&send_errno, sizeof(send_errno)}, + {&length, 1}, + {(void*)where, length} + }; + int got = writev(sock, failure, 3); + /* Bad news travels fast. Faster than data. We'll get a SIGPIPE + in the parent if we try to read from the socketpair after the + child has exited, even if there was data to read. + So sleep a bit to give the parent a fighting chance of + reading the data. */ + sleep(2); + _exit((got == -1) ? errno : 0); + } + /* End of child. */ + } + PL_dumper_fd = fd[0]; + close(fd[1]); } #endif - + /* We must account for everything. */ /* Destroy the main CV and syntax tree */ @@ -874,13 +848,13 @@ perl_destruct(pTHXx) op from which the filename structure member is copied. */ PL_curcop = &PL_compiling; if (PL_main_root) { - /* ensure comppad/curpad to refer to main's pad */ - if (CvPADLIST(PL_main_cv)) { - PAD_SET_CUR_NOSAVE(CvPADLIST(PL_main_cv), 1); - PL_comppad_name = PadlistNAMES(CvPADLIST(PL_main_cv)); - } - op_free(PL_main_root); - PL_main_root = NULL; + /* ensure comppad/curpad to refer to main's pad */ + if (CvPADLIST(PL_main_cv)) { + PAD_SET_CUR_NOSAVE(CvPADLIST(PL_main_cv), 1); + PL_comppad_name = PadlistNAMES(CvPADLIST(PL_main_cv)); + } + op_free(PL_main_root); + PL_main_root = NULL; } PL_main_start = NULL; /* note that PL_main_cv isn't usually actually freed at this point, @@ -913,7 +887,7 @@ perl_destruct(pTHXx) /* call exit list functions */ while (PL_exitlistlen-- > 0) - PL_exitlist[PL_exitlistlen].fn(aTHX_ PL_exitlist[PL_exitlistlen].ptr); + PL_exitlist[PL_exitlistlen].fn(aTHX_ PL_exitlist[PL_exitlistlen].ptr); Safefree(PL_exitlist); @@ -930,36 +904,36 @@ perl_destruct(pTHXx) #if defined(USE_ENVIRON_ARRAY) && !defined(PERL_USE_SAFE_PUTENV) if (environ != PL_origenviron && !PL_use_safe_putenv #ifdef USE_ITHREADS - /* only main thread can free environ[0] contents */ - && PL_curinterp == aTHX + /* only main thread can free environ[0] contents */ + && PL_curinterp == aTHX #endif - ) + ) { - I32 i; + I32 i; - for (i = 0; environ[i]; i++) - safesysfree(environ[i]); + for (i = 0; environ[i]; i++) + safesysfree(environ[i]); - /* Must use safesysfree() when working with environ. */ - safesysfree(environ); + /* Must use safesysfree() when working with environ. */ + safesysfree(environ); - environ = PL_origenviron; + environ = PL_origenviron; } #endif #endif /* !PERL_MICRO */ if (destruct_level == 0) { - DEBUG_P(debprofdump()); + DEBUG_P(debprofdump()); #if defined(PERLIO_LAYERS) - /* No more IO - including error messages ! */ - PerlIO_cleanup(aTHX); + /* No more IO - including error messages ! */ + PerlIO_cleanup(aTHX); #endif - CopFILE_free(&PL_compiling); + CopFILE_free(&PL_compiling); - /* The exit() function will do everything that needs doing. */ + /* The exit() function will do everything that needs doing. */ return STATUS_EXIT; } @@ -972,13 +946,13 @@ perl_destruct(pTHXx) * we need to manually ReREFCNT_dec for the clones */ { - I32 i = AvFILLp(PL_regex_padav); - SV **ary = AvARRAY(PL_regex_padav); + I32 i = AvFILLp(PL_regex_padav); + SV **ary = AvARRAY(PL_regex_padav); - for (; i; i--) { - SvREFCNT_dec(ary[i]); - ary[i] = &PL_sv_undef; - } + for (; i; i--) { + SvREFCNT_dec(ary[i]); + ary[i] = &PL_sv_undef; + } } #endif @@ -990,13 +964,13 @@ perl_destruct(pTHXx) /* XXX can PL_parser still be non-null here? */ if(PL_parser && PL_parser->rsfp) { - (void)PerlIO_close(PL_parser->rsfp); - PL_parser->rsfp = NULL; + (void)PerlIO_close(PL_parser->rsfp); + PL_parser->rsfp = NULL; } if (PL_minus_F) { - Safefree(PL_splitstr); - PL_splitstr = NULL; + Safefree(PL_splitstr); + PL_splitstr = NULL; } /* switches */ @@ -1017,8 +991,8 @@ perl_destruct(pTHXx) SvREFCNT_dec(PL_patchlevel); if (PL_e_script) { - SvREFCNT_dec(PL_e_script); - PL_e_script = NULL; + SvREFCNT_dec(PL_e_script); + PL_e_script = NULL; } PL_perldb = 0; @@ -1271,20 +1245,20 @@ perl_destruct(pTHXx) FREETMPS; if (destruct_level >= 2) { - if (PL_scopestack_ix != 0) - Perl_ck_warner_d(aTHX_ packWARN(WARN_INTERNAL), - "Unbalanced scopes: %ld more ENTERs than LEAVEs\n", - (long)PL_scopestack_ix); - if (PL_savestack_ix != 0) - Perl_ck_warner_d(aTHX_ packWARN(WARN_INTERNAL), - "Unbalanced saves: %ld more saves than restores\n", - (long)PL_savestack_ix); - if (PL_tmps_floor != -1) - Perl_ck_warner_d(aTHX_ packWARN(WARN_INTERNAL),"Unbalanced tmps: %ld more allocs than frees\n", - (long)PL_tmps_floor + 1); - if (cxstack_ix != -1) - Perl_ck_warner_d(aTHX_ packWARN(WARN_INTERNAL),"Unbalanced context: %ld more PUSHes than POPs\n", - (long)cxstack_ix + 1); + if (PL_scopestack_ix != 0) + Perl_ck_warner_d(aTHX_ packWARN(WARN_INTERNAL), + "Unbalanced scopes: %ld more ENTERs than LEAVEs\n", + (long)PL_scopestack_ix); + if (PL_savestack_ix != 0) + Perl_ck_warner_d(aTHX_ packWARN(WARN_INTERNAL), + "Unbalanced saves: %ld more saves than restores\n", + (long)PL_savestack_ix); + if (PL_tmps_floor != -1) + Perl_ck_warner_d(aTHX_ packWARN(WARN_INTERNAL),"Unbalanced tmps: %ld more allocs than frees\n", + (long)PL_tmps_floor + 1); + if (cxstack_ix != -1) + Perl_ck_warner_d(aTHX_ packWARN(WARN_INTERNAL),"Unbalanced context: %ld more PUSHes than POPs\n", + (long)cxstack_ix + 1); } #ifdef USE_ITHREADS @@ -1293,7 +1267,7 @@ perl_destruct(pTHXx) PL_regex_pad = NULL; #endif -#ifdef PERL_IMPLICIT_CONTEXT +#ifdef MULTIPLICITY /* the entries in this list are allocated via SV PVX's, so get freed * in sv_clean_all */ Safefree(PL_my_cxt_list); @@ -1303,7 +1277,7 @@ perl_destruct(pTHXx) /* the 2 is for PL_fdpid and PL_strtab */ while (sv_clean_all() > 2) - ; + ; #ifdef USE_ITHREADS Safefree(PL_stashpad); /* must come after sv_clean_all */ @@ -1325,36 +1299,36 @@ perl_destruct(pTHXx) /* Destruct the global string table. */ { - /* Yell and reset the HeVAL() slots that are still holding refcounts, - * so that sv_free() won't fail on them. - * Now that the global string table is using a single hunk of memory - * for both HE and HEK, we either need to explicitly unshare it the - * correct way, or actually free things here. - */ - I32 riter = 0; - const I32 max = HvMAX(PL_strtab); - HE * const * const array = HvARRAY(PL_strtab); - HE *hent = array[0]; - - for (;;) { - if (hent && ckWARN_d(WARN_INTERNAL)) { - HE * const next = HeNEXT(hent); - Perl_warner(aTHX_ packWARN(WARN_INTERNAL), - "Unbalanced string table refcount: (%ld) for \"%s\"", - (long)hent->he_valu.hent_refcount, HeKEY(hent)); - Safefree(hent); - hent = next; - } - if (!hent) { - if (++riter > max) - break; - hent = array[riter]; - } - } - - Safefree(array); - HvARRAY(PL_strtab) = 0; - HvTOTALKEYS(PL_strtab) = 0; + /* Yell and reset the HeVAL() slots that are still holding refcounts, + * so that sv_free() won't fail on them. + * Now that the global string table is using a single hunk of memory + * for both HE and HEK, we either need to explicitly unshare it the + * correct way, or actually free things here. + */ + I32 riter = 0; + const I32 max = HvMAX(PL_strtab); + HE * const * const array = HvARRAY(PL_strtab); + HE *hent = array[0]; + + for (;;) { + if (hent && ckWARN_d(WARN_INTERNAL)) { + HE * const next = HeNEXT(hent); + Perl_warner(aTHX_ packWARN(WARN_INTERNAL), + "Unbalanced string table refcount: (%ld) for \"%s\"", + (long)hent->he_valu.hent_refcount, HeKEY(hent)); + Safefree(hent); + hent = next; + } + if (!hent) { + if (++riter > max) + break; + hent = array[riter]; + } + } + + Safefree(array); + HvARRAY(PL_strtab) = 0; + HvTOTALKEYS(PL_strtab) = 0; } SvREFCNT_dec(PL_strtab); @@ -1392,62 +1366,62 @@ perl_destruct(pTHXx) } if (PL_sv_count != 0 && ckWARN_d(WARN_INTERNAL)) - Perl_warner(aTHX_ packWARN(WARN_INTERNAL),"Scalars leaked: %ld\n", (long)PL_sv_count); + Perl_warner(aTHX_ packWARN(WARN_INTERNAL),"Scalars leaked: %ld\n", (long)PL_sv_count); #ifdef DEBUG_LEAKING_SCALARS if (PL_sv_count != 0) { - SV* sva; - SV* sv; - SV* svend; - - for (sva = PL_sv_arenaroot; sva; sva = MUTABLE_SV(SvANY(sva))) { - svend = &sva[SvREFCNT(sva)]; - for (sv = sva + 1; sv < svend; ++sv) { - if (SvTYPE(sv) != (svtype)SVTYPEMASK) { - PerlIO_printf(Perl_debug_log, "leaked: sv=0x%p" - " flags=0x%" UVxf - " refcnt=%" UVuf pTHX__FORMAT "\n" - "\tallocated at %s:%d %s %s (parent 0x%" UVxf ");" - "serial %" UVuf "\n", - (void*)sv, (UV)sv->sv_flags, (UV)sv->sv_refcnt - pTHX__VALUE, - sv->sv_debug_file ? sv->sv_debug_file : "(unknown)", - sv->sv_debug_line, - sv->sv_debug_inpad ? "for" : "by", - sv->sv_debug_optype ? - PL_op_name[sv->sv_debug_optype]: "(none)", - PTR2UV(sv->sv_debug_parent), - sv->sv_debug_serial - ); + SV* sva; + SV* sv; + SV* svend; + + for (sva = PL_sv_arenaroot; sva; sva = MUTABLE_SV(SvANY(sva))) { + svend = &sva[SvREFCNT(sva)]; + for (sv = sva + 1; sv < svend; ++sv) { + if (SvTYPE(sv) != (svtype)SVTYPEMASK) { + PerlIO_printf(Perl_debug_log, "leaked: sv=0x%p" + " flags=0x%" UVxf + " refcnt=%" UVuf pTHX__FORMAT "\n" + "\tallocated at %s:%d %s %s (parent 0x%" UVxf ");" + "serial %" UVuf "\n", + (void*)sv, (UV)sv->sv_flags, (UV)sv->sv_refcnt + pTHX__VALUE, + sv->sv_debug_file ? sv->sv_debug_file : "(unknown)", + sv->sv_debug_line, + sv->sv_debug_inpad ? "for" : "by", + sv->sv_debug_optype ? + PL_op_name[sv->sv_debug_optype]: "(none)", + PTR2UV(sv->sv_debug_parent), + sv->sv_debug_serial + ); #ifdef DEBUG_LEAKING_SCALARS_FORK_DUMP - Perl_dump_sv_child(aTHX_ sv); + Perl_dump_sv_child(aTHX_ sv); #endif - } - } - } + } + } + } } #ifdef DEBUG_LEAKING_SCALARS_FORK_DUMP { - int status; - fd_set rset; - /* Wait for up to 4 seconds for child to terminate. - This seems to be the least effort way of timing out on reaping - its exit status. */ - struct timeval waitfor = {4, 0}; - int sock = PL_dumper_fd; - - shutdown(sock, 1); - FD_ZERO(&rset); - FD_SET(sock, &rset); - select(sock + 1, &rset, NULL, NULL, &waitfor); - waitpid(child, &status, WNOHANG); - close(sock); + int status; + fd_set rset; + /* Wait for up to 4 seconds for child to terminate. + This seems to be the least effort way of timing out on reaping + its exit status. */ + struct timeval waitfor = {4, 0}; + int sock = PL_dumper_fd; + + shutdown(sock, 1); + FD_ZERO(&rset); + FD_SET(sock, &rset); + select(sock + 1, &rset, NULL, NULL, &waitfor); + waitpid(child, &status, WNOHANG); + close(sock); } #endif #endif #ifdef DEBUG_LEAKING_SCALARS_ABORT if (PL_sv_count) - abort(); + abort(); #endif PL_sv_count = 0; @@ -1472,11 +1446,11 @@ perl_destruct(pTHXx) PL_psig_name = (SV**)NULL; PL_psig_ptr = (SV**)NULL; { - /* We need to NULL PL_psig_pend first, so that - signal handlers know not to use it */ - int *psig_save = PL_psig_pend; - PL_psig_pend = (int*)NULL; - Safefree(psig_save); + /* We need to NULL PL_psig_pend first, so that + signal handlers know not to use it */ + int *psig_save = PL_psig_pend; + PL_psig_pend = (int*)NULL; + Safefree(psig_save); } nuke_stacks(); TAINTING_set(FALSE); @@ -1501,32 +1475,32 @@ perl_destruct(pTHXx) sv_free_arenas(); while (PL_regmatch_slab) { - regmatch_slab *s = PL_regmatch_slab; - PL_regmatch_slab = PL_regmatch_slab->next; - Safefree(s); + regmatch_slab *s = PL_regmatch_slab; + PL_regmatch_slab = PL_regmatch_slab->next; + Safefree(s); } /* As the absolutely last thing, free the non-arena SV for mess() */ if (PL_mess_sv) { - /* we know that type == SVt_PVMG */ - - /* it could have accumulated taint magic */ - MAGIC* mg; - MAGIC* moremagic; - for (mg = SvMAGIC(PL_mess_sv); mg; mg = moremagic) { - moremagic = mg->mg_moremagic; - if (mg->mg_ptr && mg->mg_type != PERL_MAGIC_regex_global - && mg->mg_len >= 0) - Safefree(mg->mg_ptr); - Safefree(mg); - } - - /* we know that type >= SVt_PV */ - SvPV_free(PL_mess_sv); - Safefree(SvANY(PL_mess_sv)); - Safefree(PL_mess_sv); - PL_mess_sv = NULL; + /* we know that type == SVt_PVMG */ + + /* it could have accumulated taint magic */ + MAGIC* mg; + MAGIC* moremagic; + for (mg = SvMAGIC(PL_mess_sv); mg; mg = moremagic) { + moremagic = mg->mg_moremagic; + if (mg->mg_ptr && mg->mg_type != PERL_MAGIC_regex_global + && mg->mg_len >= 0) + Safefree(mg->mg_ptr); + Safefree(mg); + } + + /* we know that type >= SVt_PV */ + SvPV_free(PL_mess_sv); + Safefree(SvANY(PL_mess_sv)); + Safefree(PL_mess_sv); + PL_mess_sv = NULL; } return STATUS_EXIT; } @@ -1542,50 +1516,43 @@ Releases a Perl interpreter. See L. void perl_free(pTHXx) { - dVAR; PERL_ARGS_ASSERT_PERL_FREE; if (PL_veto_cleanup) - return; + return; #ifdef PERL_TRACK_MEMPOOL { - /* - * Don't free thread memory if PERL_DESTRUCT_LEVEL is set to a non-zero - * value as we're probably hunting memory leaks then - */ - if (PL_perl_destruct_level == 0) { - const U32 old_debug = PL_debug; - /* Emulate the PerlHost behaviour of free()ing all memory allocated in this - thread at thread exit. */ - if (DEBUG_m_TEST) { - PerlIO_puts(Perl_debug_log, "Disabling memory debugging as we " - "free this thread's memory\n"); - PL_debug &= ~ DEBUG_m_FLAG; - } - while(aTHXx->Imemory_debug_header.next != &(aTHXx->Imemory_debug_header)){ - char * next = (char *)(aTHXx->Imemory_debug_header.next); - Malloc_t ptr = PERL_MEMORY_DEBUG_HEADER_SIZE + next; - safesysfree(ptr); - } - PL_debug = old_debug; - } + /* + * Don't free thread memory if PERL_DESTRUCT_LEVEL is set to a non-zero + * value as we're probably hunting memory leaks then + */ + if (PL_perl_destruct_level == 0) { + const U32 old_debug = PL_debug; + /* Emulate the PerlHost behaviour of free()ing all memory allocated in this + thread at thread exit. */ + if (DEBUG_m_TEST) { + PerlIO_puts(Perl_debug_log, "Disabling memory debugging as we " + "free this thread's memory\n"); + PL_debug &= ~ DEBUG_m_FLAG; + } + while(aTHXx->Imemory_debug_header.next != &(aTHXx->Imemory_debug_header)){ + char * next = (char *)(aTHXx->Imemory_debug_header.next); + Malloc_t ptr = PERL_MEMORY_DEBUG_HEADER_SIZE + next; + safesysfree(ptr); + } + PL_debug = old_debug; + } } #endif -#if defined(WIN32) || defined(NETWARE) +#if defined(WIN32) # if defined(PERL_IMPLICIT_SYS) { -# ifdef NETWARE - void *host = nw_internal_host; - PerlMem_free(aTHXx); - nw_delete_internal_host(host); -# else void *host = w32_internal_host; PerlMem_free(aTHXx); win32_delete_internal_host(host); -# endif } # else PerlMem_free(aTHXx); @@ -1611,18 +1578,27 @@ __attribute__((destructor)) #endif perl_fini(void) { - dVAR; if ( -#ifdef PERL_GLOBAL_STRUCT_PRIVATE - my_vars && -#endif PL_curinterp && !PL_veto_cleanup) - FREE_THREAD_KEY; + FREE_THREAD_KEY; } #endif /* WIN32 */ #endif /* THREADS */ +/* +=for apidoc call_atexit + +Add a function C to the list of functions to be called at global +destruction. C will be passed as an argument to C; it can point to a +C so that you can pass anything you want. + +Note that under threads, C may run multiple times. This is because the +list is executed each time the current or any descendent thread terminates. + +=cut +*/ + void Perl_call_atexit(pTHX_ ATEXIT_t fn, void *ptr) { @@ -1693,15 +1669,14 @@ bug is due to be fixed in Perl 5.30. */ #define SET_CURSTASH(newstash) \ - if (PL_curstash != newstash) { \ - SvREFCNT_dec(PL_curstash); \ - PL_curstash = (HV *)SvREFCNT_inc(newstash); \ - } + if (PL_curstash != newstash) { \ + SvREFCNT_dec(PL_curstash); \ + PL_curstash = (HV *)SvREFCNT_inc(newstash); \ + } int perl_parse(pTHXx_ XSINIT_t xsinit, int argc, char **argv, char **env) { - dVAR; I32 oldscope; int ret; dJMPENV; @@ -1710,153 +1685,133 @@ perl_parse(pTHXx_ XSINIT_t xsinit, int argc, char **argv, char **env) #ifndef MULTIPLICITY PERL_UNUSED_ARG(my_perl); #endif -#if (defined(USE_HASH_SEED) || defined(USE_HASH_SEED_DEBUG)) && !defined(NO_PERL_HASH_SEED_DEBUG) - { - const char * const s = PerlEnv_getenv("PERL_HASH_SEED_DEBUG"); - - if (s && strEQ(s, "1")) { - const unsigned char *seed= PERL_HASH_SEED; - const unsigned char *seed_end= PERL_HASH_SEED + PERL_HASH_SEED_BYTES; - PerlIO_printf(Perl_debug_log, "HASH_FUNCTION = %s HASH_SEED = 0x", PERL_HASH_FUNC); - while (seed < seed_end) { - PerlIO_printf(Perl_debug_log, "%02x", *seed++); - } -#ifdef PERL_HASH_RANDOMIZE_KEYS - PerlIO_printf(Perl_debug_log, " PERTURB_KEYS = %d (%s)", - PL_HASH_RAND_BITS_ENABLED, - PL_HASH_RAND_BITS_ENABLED == 0 ? "NO" : PL_HASH_RAND_BITS_ENABLED == 1 ? "RANDOM" : "DETERMINISTIC"); -#endif - PerlIO_printf(Perl_debug_log, "\n"); - } - } -#endif /* #if (defined(USE_HASH_SEED) ... */ - + debug_hash_seed(false); #ifdef __amigaos4__ { struct NameTranslationInfo nti; - __translate_amiga_to_unix_path_name(&argv[0],&nti); + __translate_amiga_to_unix_path_name(&argv[0],&nti); } #endif { - int i; - assert(argc >= 0); - for(i = 0; i != argc; i++) - assert(argv[i]); - assert(!argv[argc]); + int i; + assert(argc >= 0); + for(i = 0; i != argc; i++) + assert(argv[i]); + assert(!argv[argc]); } PL_origargc = argc; PL_origargv = argv; if (PL_origalen != 0) { - PL_origalen = 1; /* don't use old PL_origalen if perl_parse() is called again */ + PL_origalen = 1; /* don't use old PL_origalen if perl_parse() is called again */ } else { - /* Set PL_origalen be the sum of the contiguous argv[] - * elements plus the size of the env in case that it is - * contiguous with the argv[]. This is used in mg.c:Perl_magic_set() - * as the maximum modifiable length of $0. In the worst case - * the area we are able to modify is limited to the size of - * the original argv[0]. (See below for 'contiguous', though.) - * --jhi */ - const char *s = NULL; - const UV mask = ~(UV)(PTRSIZE-1); + /* Set PL_origalen be the sum of the contiguous argv[] + * elements plus the size of the env in case that it is + * contiguous with the argv[]. This is used in mg.c:Perl_magic_set() + * as the maximum modifiable length of $0. In the worst case + * the area we are able to modify is limited to the size of + * the original argv[0]. (See below for 'contiguous', though.) + * --jhi */ + const char *s = NULL; + const UV mask = ~(UV)(PTRSIZE-1); /* Do the mask check only if the args seem like aligned. */ - const UV aligned = - (mask < ~(UV)0) && ((PTR2UV(argv[0]) & mask) == PTR2UV(argv[0])); - - /* See if all the arguments are contiguous in memory. Note - * that 'contiguous' is a loose term because some platforms - * align the argv[] and the envp[]. If the arguments look - * like non-aligned, assume that they are 'strictly' or - * 'traditionally' contiguous. If the arguments look like - * aligned, we just check that they are within aligned - * PTRSIZE bytes. As long as no system has something bizarre - * like the argv[] interleaved with some other data, we are - * fine. (Did I just evoke Murphy's Law?) --jhi */ - if (PL_origargv && PL_origargc >= 1 && (s = PL_origargv[0])) { + const UV aligned = + (mask < ~(UV)0) && ((PTR2UV(argv[0]) & mask) == PTR2UV(argv[0])); + + /* See if all the arguments are contiguous in memory. Note + * that 'contiguous' is a loose term because some platforms + * align the argv[] and the envp[]. If the arguments look + * like non-aligned, assume that they are 'strictly' or + * 'traditionally' contiguous. If the arguments look like + * aligned, we just check that they are within aligned + * PTRSIZE bytes. As long as no system has something bizarre + * like the argv[] interleaved with some other data, we are + * fine. (Did I just evoke Murphy's Law?) --jhi */ + if (PL_origargv && PL_origargc >= 1 && (s = PL_origargv[0])) { int i; - while (*s) s++; - for (i = 1; i < PL_origargc; i++) { - if ((PL_origargv[i] == s + 1 + while (*s) s++; + for (i = 1; i < PL_origargc; i++) { + if ((PL_origargv[i] == s + 1 #ifdef OS2 - || PL_origargv[i] == s + 2 -#endif - ) - || - (aligned && - (PL_origargv[i] > s && - PL_origargv[i] <= - INT2PTR(char *, PTR2UV(s + PTRSIZE) & mask))) - ) - { - s = PL_origargv[i]; - while (*s) s++; - } - else - break; - } - } + || PL_origargv[i] == s + 2 +#endif + ) + || + (aligned && + (PL_origargv[i] > s && + PL_origargv[i] <= + INT2PTR(char *, PTR2UV(s + PTRSIZE) & mask))) + ) + { + s = PL_origargv[i]; + while (*s) s++; + } + else + break; + } + } #ifndef PERL_USE_SAFE_PUTENV - /* Can we grab env area too to be used as the area for $0? */ - if (s && PL_origenviron && !PL_use_safe_putenv) { - if ((PL_origenviron[0] == s + 1) - || - (aligned && - (PL_origenviron[0] > s && - PL_origenviron[0] <= - INT2PTR(char *, PTR2UV(s + PTRSIZE) & mask))) - ) - { + /* Can we grab env area too to be used as the area for $0? */ + if (s && PL_origenviron && !PL_use_safe_putenv) { + if ((PL_origenviron[0] == s + 1) + || + (aligned && + (PL_origenviron[0] > s && + PL_origenviron[0] <= + INT2PTR(char *, PTR2UV(s + PTRSIZE) & mask))) + ) + { int i; #ifndef OS2 /* ENVIRON is read by the kernel too. */ - s = PL_origenviron[0]; - while (*s) s++; -#endif - my_setenv("NoNe SuCh", NULL); - /* Force copy of environment. */ - for (i = 1; PL_origenviron[i]; i++) { - if (PL_origenviron[i] == s + 1 - || - (aligned && - (PL_origenviron[i] > s && - PL_origenviron[i] <= - INT2PTR(char *, PTR2UV(s + PTRSIZE) & mask))) - ) - { - s = PL_origenviron[i]; - while (*s) s++; - } - else - break; - } - } - } + s = PL_origenviron[0]; + while (*s) s++; +#endif + my_setenv("NoNe SuCh", NULL); + /* Force copy of environment. */ + for (i = 1; PL_origenviron[i]; i++) { + if (PL_origenviron[i] == s + 1 + || + (aligned && + (PL_origenviron[i] > s && + PL_origenviron[i] <= + INT2PTR(char *, PTR2UV(s + PTRSIZE) & mask))) + ) + { + s = PL_origenviron[i]; + while (*s) s++; + } + else + break; + } + } + } #endif /* !defined(PERL_USE_SAFE_PUTENV) */ - PL_origalen = s ? s - PL_origargv[0] + 1 : 0; + PL_origalen = s ? s - PL_origargv[0] + 1 : 0; } if (PL_do_undump) { - /* Come here if running an undumped a.out. */ + /* Come here if running an undumped a.out. */ - PL_origfilename = savepv(argv[0]); - PL_do_undump = FALSE; - cxstack_ix = -1; /* start label stack again */ - init_ids(); - assert (!TAINT_get); - TAINT; - set_caret_X(); - TAINT_NOT; - init_postdump_symbols(argc,argv,env); - return 0; + PL_origfilename = savepv(argv[0]); + PL_do_undump = FALSE; + cxstack_ix = -1; /* start label stack again */ + init_ids(); + assert (!TAINT_get); + TAINT; + set_caret_X(); + TAINT_NOT; + init_postdump_symbols(argc,argv,env); + return 0; } if (PL_main_root) { - op_free(PL_main_root); - PL_main_root = NULL; + op_free(PL_main_root); + PL_main_root = NULL; } PL_main_start = NULL; SvREFCNT_dec(PL_main_cv); @@ -1869,47 +1824,47 @@ perl_parse(pTHXx_ XSINIT_t xsinit, int argc, char **argv, char **env) JMPENV_PUSH(ret); switch (ret) { case 0: - parse_body(env,xsinit); - if (PL_unitcheckav) { - call_list(oldscope, PL_unitcheckav); - } - if (PL_checkav) { - PERL_SET_PHASE(PERL_PHASE_CHECK); - call_list(oldscope, PL_checkav); - } - ret = 0; - break; + parse_body(env,xsinit); + if (PL_unitcheckav) { + call_list(oldscope, PL_unitcheckav); + } + if (PL_checkav) { + PERL_SET_PHASE(PERL_PHASE_CHECK); + call_list(oldscope, PL_checkav); + } + ret = 0; + break; case 1: - STATUS_ALL_FAILURE; - /* FALLTHROUGH */ + STATUS_ALL_FAILURE; + /* FALLTHROUGH */ case 2: - /* my_exit() was called */ - while (PL_scopestack_ix > oldscope) - LEAVE; - FREETMPS; - SET_CURSTASH(PL_defstash); - if (PL_unitcheckav) { - call_list(oldscope, PL_unitcheckav); - } - if (PL_checkav) { - PERL_SET_PHASE(PERL_PHASE_CHECK); - call_list(oldscope, PL_checkav); - } - ret = STATUS_EXIT; - if (ret == 0) { - /* - * At this point we should do - * ret = 0x100; - * to avoid [perl #2754], but that bugfix has been postponed - * because of the Module::Install breakage it causes - * [perl #132577]. - */ - } - break; + /* my_exit() was called */ + while (PL_scopestack_ix > oldscope) + LEAVE; + FREETMPS; + SET_CURSTASH(PL_defstash); + if (PL_unitcheckav) { + call_list(oldscope, PL_unitcheckav); + } + if (PL_checkav) { + PERL_SET_PHASE(PERL_PHASE_CHECK); + call_list(oldscope, PL_checkav); + } + ret = STATUS_EXIT; + if (ret == 0) { + /* + * At this point we should do + * ret = 0x100; + * to avoid [perl #2754], but that bugfix has been postponed + * because of the Module::Install breakage it causes + * [perl #132577]. + */ + } + break; case 3: - PerlIO_printf(Perl_error_log, "panic: top_env\n"); - ret = 1; - break; + PerlIO_printf(Perl_error_log, "panic: top_env\n"); + ret = 1; + break; } JMPENV_POP; return ret; @@ -1931,133 +1886,134 @@ S_Internals_V(pTHX_ CV *cv) #endif const int entries = 3 + local_patch_count; int i; - static const char non_bincompat_options[] = + static const char non_bincompat_options[] = # ifdef DEBUGGING - " DEBUGGING" + " DEBUGGING" # endif # ifdef NO_MATHOMS - " NO_MATHOMS" + " NO_MATHOMS" # endif # ifdef NO_HASH_SEED - " NO_HASH_SEED" + " NO_HASH_SEED" # endif # ifdef NO_TAINT_SUPPORT - " NO_TAINT_SUPPORT" -# endif -# ifdef PERL_BOOL_AS_CHAR - " PERL_BOOL_AS_CHAR" + " NO_TAINT_SUPPORT" # endif # ifdef PERL_COPY_ON_WRITE - " PERL_COPY_ON_WRITE" + " PERL_COPY_ON_WRITE" # endif # ifdef PERL_DISABLE_PMC - " PERL_DISABLE_PMC" + " PERL_DISABLE_PMC" # endif # ifdef PERL_DONT_CREATE_GVSV - " PERL_DONT_CREATE_GVSV" + " PERL_DONT_CREATE_GVSV" # endif # ifdef PERL_EXTERNAL_GLOB - " PERL_EXTERNAL_GLOB" + " PERL_EXTERNAL_GLOB" # endif # ifdef PERL_HASH_FUNC_SIPHASH - " PERL_HASH_FUNC_SIPHASH" + " PERL_HASH_FUNC_SIPHASH" # endif # ifdef PERL_HASH_FUNC_SDBM - " PERL_HASH_FUNC_SDBM" + " PERL_HASH_FUNC_SDBM" # endif # ifdef PERL_HASH_FUNC_DJB2 - " PERL_HASH_FUNC_DJB2" + " PERL_HASH_FUNC_DJB2" # endif # ifdef PERL_HASH_FUNC_SUPERFAST - " PERL_HASH_FUNC_SUPERFAST" + " PERL_HASH_FUNC_SUPERFAST" # endif # ifdef PERL_HASH_FUNC_MURMUR3 - " PERL_HASH_FUNC_MURMUR3" + " PERL_HASH_FUNC_MURMUR3" # endif # ifdef PERL_HASH_FUNC_ONE_AT_A_TIME - " PERL_HASH_FUNC_ONE_AT_A_TIME" + " PERL_HASH_FUNC_ONE_AT_A_TIME" # endif # ifdef PERL_HASH_FUNC_ONE_AT_A_TIME_HARD - " PERL_HASH_FUNC_ONE_AT_A_TIME_HARD" + " PERL_HASH_FUNC_ONE_AT_A_TIME_HARD" # endif # ifdef PERL_HASH_FUNC_ONE_AT_A_TIME_OLD - " PERL_HASH_FUNC_ONE_AT_A_TIME_OLD" + " PERL_HASH_FUNC_ONE_AT_A_TIME_OLD" # endif # ifdef PERL_IS_MINIPERL - " PERL_IS_MINIPERL" + " PERL_IS_MINIPERL" # endif # ifdef PERL_MALLOC_WRAP - " PERL_MALLOC_WRAP" + " PERL_MALLOC_WRAP" # endif # ifdef PERL_MEM_LOG - " PERL_MEM_LOG" + " PERL_MEM_LOG" # endif # ifdef PERL_MEM_LOG_NOIMPL - " PERL_MEM_LOG_NOIMPL" + " PERL_MEM_LOG_NOIMPL" # endif # ifdef PERL_OP_PARENT - " PERL_OP_PARENT" + " PERL_OP_PARENT" # endif # ifdef PERL_PERTURB_KEYS_DETERMINISTIC - " PERL_PERTURB_KEYS_DETERMINISTIC" + " PERL_PERTURB_KEYS_DETERMINISTIC" # endif # ifdef PERL_PERTURB_KEYS_DISABLED - " PERL_PERTURB_KEYS_DISABLED" + " PERL_PERTURB_KEYS_DISABLED" # endif # ifdef PERL_PERTURB_KEYS_RANDOM - " PERL_PERTURB_KEYS_RANDOM" + " PERL_PERTURB_KEYS_RANDOM" # endif # ifdef PERL_PRESERVE_IVUV - " PERL_PRESERVE_IVUV" + " PERL_PRESERVE_IVUV" # endif # ifdef PERL_RELOCATABLE_INCPUSH - " PERL_RELOCATABLE_INCPUSH" + " PERL_RELOCATABLE_INCPUSH" # endif # ifdef PERL_USE_DEVEL - " PERL_USE_DEVEL" + " PERL_USE_DEVEL" # endif # ifdef PERL_USE_SAFE_PUTENV - " PERL_USE_SAFE_PUTENV" + " PERL_USE_SAFE_PUTENV" +# endif +# ifdef PERL_USE_UNSHARED_KEYS_IN_LARGE_HASHES + " PERL_USE_UNSHARED_KEYS_IN_LARGE_HASHES" # endif # ifdef SILENT_NO_TAINT_SUPPORT - " SILENT_NO_TAINT_SUPPORT" + " SILENT_NO_TAINT_SUPPORT" # endif # ifdef UNLINK_ALL_VERSIONS - " UNLINK_ALL_VERSIONS" + " UNLINK_ALL_VERSIONS" # endif # ifdef USE_ATTRIBUTES_FOR_PERLIO - " USE_ATTRIBUTES_FOR_PERLIO" + " USE_ATTRIBUTES_FOR_PERLIO" # endif # ifdef USE_FAST_STDIO - " USE_FAST_STDIO" -# endif + " USE_FAST_STDIO" +# endif # ifdef USE_LOCALE - " USE_LOCALE" + " USE_LOCALE" # endif # ifdef USE_LOCALE_CTYPE - " USE_LOCALE_CTYPE" + " USE_LOCALE_CTYPE" # endif # ifdef WIN32_NO_REGISTRY - " USE_NO_REGISTRY" + " USE_NO_REGISTRY" # endif # ifdef USE_PERL_ATOF - " USE_PERL_ATOF" -# endif + " USE_PERL_ATOF" +# endif # ifdef USE_SITECUSTOMIZE - " USE_SITECUSTOMIZE" -# endif + " USE_SITECUSTOMIZE" +# endif # ifdef USE_THREAD_SAFE_LOCALE - " USE_THREAD_SAFE_LOCALE" + " USE_THREAD_SAFE_LOCALE" # endif - ; + ; PERL_UNUSED_ARG(cv); PERL_UNUSED_VAR(items); EXTEND(SP, entries); - PUSHs(sv_2mortal(newSVpv(PL_bincompat_options, 0))); + PUSHs(newSVpvn_flags(PL_bincompat_options, strlen(PL_bincompat_options), + SVs_TEMP)); PUSHs(Perl_newSVpvn_flags(aTHX_ non_bincompat_options, - sizeof(non_bincompat_options) - 1, SVs_TEMP)); + sizeof(non_bincompat_options) - 1, SVs_TEMP)); #ifndef PERL_BUILD_DATE # ifdef __DATE__ @@ -2069,19 +2025,19 @@ S_Internals_V(pTHX_ CV *cv) # endif #endif -#undef PERL_BUILD_DATE - #ifdef PERL_BUILD_DATE PUSHs(Perl_newSVpvn_flags(aTHX_ - STR_WITH_LEN("Compiled at " PERL_BUILD_DATE), - SVs_TEMP)); + STR_WITH_LEN("Compiled at " PERL_BUILD_DATE), + SVs_TEMP)); #else PUSHs(&PL_sv_undef); #endif for (i = 1; i <= local_patch_count; i++) { - /* This will be an undef, if PL_localpatches[i] is NULL. */ - PUSHs(sv_2mortal(newSVpv(PL_localpatches[i], 0))); + /* This will be an undef, if PL_localpatches[i] is NULL. */ + PUSHs(newSVpvn_flags(PL_localpatches[i], + PL_localpatches[i] == NULL ? 0 : strlen(PL_localpatches[i]), + SVs_TEMP)); } XSRETURN(entries); @@ -2099,7 +2055,6 @@ S_Internals_V(pTHX_ CV *cv) STATIC void * S_parse_body(pTHX_ char **env, XSINIT_t xsinit) { - dVAR; PerlIO *rsfp; int argc = PL_origargc; char **argv = PL_origargv; @@ -2108,6 +2063,7 @@ S_parse_body(pTHX_ char **env, XSINIT_t xsinit) char c; bool doextract = FALSE; const char *cddir = NULL; + bool minus_e = FALSE; /* both -e and -E */ #ifdef USE_SITECUSTOMIZE bool minus_f = FALSE; #endif @@ -2120,230 +2076,233 @@ S_parse_body(pTHX_ char **env, XSINIT_t xsinit) init_main_stash(); { - const char *s; + const char *s; for (argc--,argv++; argc > 0; argc--,argv++) { - if (argv[0][0] != '-' || !argv[0][1]) - break; - s = argv[0]+1; + if (argv[0][0] != '-' || !argv[0][1]) + break; + s = argv[0]+1; reswitch: - switch ((c = *s)) { - case 'C': + switch ((c = *s)) { + case 'C': #ifndef PERL_STRICT_CR - case '\r': -#endif - case ' ': - case '0': - case 'F': - case 'a': - case 'c': - case 'd': - case 'D': - case 'h': - case 'i': - case 'l': - case 'M': - case 'm': - case 'n': - case 'p': - case 's': - case 'u': - case 'U': - case 'v': - case 'W': - case 'X': - case 'w': - if ((s = moreswitches(s))) - goto reswitch; - break; - - case 't': + case '\r': +#endif + case ' ': + case '0': + case 'F': + case 'a': + case 'c': + case 'd': + case 'D': + case 'g': + case '?': + case 'h': + case 'i': + case 'l': + case 'M': + case 'm': + case 'n': + case 'p': + case 's': + case 'u': + case 'U': + case 'v': + case 'W': + case 'X': + case 'w': + if ((s = moreswitches(s))) + goto reswitch; + break; + + case 't': #if defined(SILENT_NO_TAINT_SUPPORT) /* silently ignore */ #elif defined(NO_TAINT_SUPPORT) Perl_croak_nocontext("This perl was compiled without taint support. " "Cowardly refusing to run with -t or -T flags"); #else - CHECK_MALLOC_TOO_LATE_FOR('t'); - if( !TAINTING_get ) { - TAINT_WARN_set(TRUE); - TAINTING_set(TRUE); - } + CHECK_MALLOC_TOO_LATE_FOR('t'); + if( !TAINTING_get ) { + TAINT_WARN_set(TRUE); + TAINTING_set(TRUE); + } #endif - s++; - goto reswitch; - case 'T': + s++; + goto reswitch; + case 'T': #if defined(SILENT_NO_TAINT_SUPPORT) /* silently ignore */ #elif defined(NO_TAINT_SUPPORT) Perl_croak_nocontext("This perl was compiled without taint support. " "Cowardly refusing to run with -t or -T flags"); #else - CHECK_MALLOC_TOO_LATE_FOR('T'); - TAINTING_set(TRUE); - TAINT_WARN_set(FALSE); + CHECK_MALLOC_TOO_LATE_FOR('T'); + TAINTING_set(TRUE); + TAINT_WARN_set(FALSE); #endif - s++; - goto reswitch; - - case 'E': - PL_minus_E = TRUE; - /* FALLTHROUGH */ - case 'e': - forbid_setid('e', FALSE); - if (!PL_e_script) { - PL_e_script = newSVpvs(""); - add_read_e_script = TRUE; - } - if (*++s) - sv_catpv(PL_e_script, s); - else if (argv[1]) { - sv_catpv(PL_e_script, argv[1]); - argc--,argv++; - } - else - Perl_croak(aTHX_ "No code specified for -%c", c); - sv_catpvs(PL_e_script, "\n"); - break; - - case 'f': + s++; + goto reswitch; + + case 'E': + PL_minus_E = TRUE; + /* FALLTHROUGH */ + case 'e': + forbid_setid('e', FALSE); + minus_e = TRUE; + if (!PL_e_script) { + PL_e_script = newSVpvs(""); + add_read_e_script = TRUE; + } + if (*++s) + sv_catpv(PL_e_script, s); + else if (argv[1]) { + sv_catpv(PL_e_script, argv[1]); + argc--,argv++; + } + else + Perl_croak(aTHX_ "No code specified for -%c", c); + sv_catpvs(PL_e_script, "\n"); + break; + + case 'f': #ifdef USE_SITECUSTOMIZE - minus_f = TRUE; + minus_f = TRUE; #endif - s++; - goto reswitch; - - case 'I': /* -I handled both here and in moreswitches() */ - forbid_setid('I', FALSE); - if (!*++s && (s=argv[1]) != NULL) { - argc--,argv++; - } - if (s && *s) { - STRLEN len = strlen(s); - incpush(s, len, INCPUSH_ADD_SUB_DIRS|INCPUSH_ADD_OLD_VERS); - } - else - Perl_croak(aTHX_ "No directory specified for -I"); - break; - case 'S': - forbid_setid('S', FALSE); - dosearch = TRUE; - s++; - goto reswitch; - case 'V': - { - SV *opts_prog; - - if (*++s != ':') { - opts_prog = newSVpvs("use Config; Config::_V()"); - } - else { - ++s; - opts_prog = Perl_newSVpvf(aTHX_ - "use Config; Config::config_vars(qw%c%s%c)", - 0, s, 0); - s += strlen(s); - } - Perl_av_create_and_push(aTHX_ &PL_preambleav, opts_prog); - /* don't look for script or read stdin */ - scriptname = BIT_BUCKET; - goto reswitch; - } - case 'x': - doextract = TRUE; - s++; - if (*s) - cddir = s; - break; - case 0: - break; - case '-': - if (!*++s || isSPACE(*s)) { - argc--,argv++; - goto switch_end; - } - /* catch use of gnu style long options. - Both of these exit immediately. */ - if (strEQ(s, "version")) - minus_v(); - if (strEQ(s, "help")) - usage(); - s--; - /* FALLTHROUGH */ - default: - Perl_croak(aTHX_ "Unrecognized switch: -%s (-h will show valid options)",s); - } + s++; + goto reswitch; + + case 'I': /* -I handled both here and in moreswitches() */ + forbid_setid('I', FALSE); + if (!*++s && (s=argv[1]) != NULL) { + argc--,argv++; + } + if (s && *s) { + STRLEN len = strlen(s); + incpush(s, len, INCPUSH_ADD_SUB_DIRS|INCPUSH_ADD_OLD_VERS); + } + else + Perl_croak(aTHX_ "No directory specified for -I"); + break; + case 'S': + forbid_setid('S', FALSE); + dosearch = TRUE; + s++; + goto reswitch; + case 'V': + { + SV *opts_prog; + + if (*++s != ':') { + opts_prog = newSVpvs("use Config; Config::_V()"); + } + else { + ++s; + opts_prog = Perl_newSVpvf(aTHX_ + "use Config; Config::config_vars(qw%c%s%c)", + 0, s, 0); + s += strlen(s); + } + Perl_av_create_and_push(aTHX_ &PL_preambleav, opts_prog); + /* don't look for script or read stdin */ + scriptname = BIT_BUCKET; + goto reswitch; + } + case 'x': + doextract = TRUE; + s++; + if (*s) + cddir = s; + break; + case 0: + break; + case '-': + if (!*++s || isSPACE(*s)) { + argc--,argv++; + goto switch_end; + } + /* catch use of gnu style long options. + Both of these exit immediately. */ + if (strEQ(s, "version")) + minus_v(); + if (strEQ(s, "help")) + usage(); + s--; + /* FALLTHROUGH */ + default: + Perl_croak(aTHX_ "Unrecognized switch: -%s (-h will show valid options)",s); + } } } switch_end: { - char *s; + char *s; if ( #ifndef SECURE_INTERNAL_GETENV !TAINTING_get && #endif - (s = PerlEnv_getenv("PERL5OPT"))) + (s = PerlEnv_getenv("PERL5OPT"))) { - while (isSPACE(*s)) - s++; - if (*s == '-' && *(s+1) == 'T') { + while (isSPACE(*s)) + s++; + if (*s == '-' && *(s+1) == 'T') { #if defined(SILENT_NO_TAINT_SUPPORT) /* silently ignore */ #elif defined(NO_TAINT_SUPPORT) Perl_croak_nocontext("This perl was compiled without taint support. " "Cowardly refusing to run with -t or -T flags"); #else - CHECK_MALLOC_TOO_LATE_FOR('T'); - TAINTING_set(TRUE); + CHECK_MALLOC_TOO_LATE_FOR('T'); + TAINTING_set(TRUE); TAINT_WARN_set(FALSE); #endif - } - else { - char *popt_copy = NULL; - while (s && *s) { - const char *d; - while (isSPACE(*s)) - s++; - if (*s == '-') { - s++; - if (isSPACE(*s)) - continue; - } - d = s; - if (!*s) - break; - if (!memCHRs("CDIMUdmtwW", *s)) - Perl_croak(aTHX_ "Illegal switch in PERL5OPT: -%c", *s); - while (++s && *s) { - if (isSPACE(*s)) { - if (!popt_copy) { - popt_copy = SvPVX(sv_2mortal(newSVpv(d,0))); - s = popt_copy + (s - d); - d = popt_copy; - } - *s++ = '\0'; - break; - } - } - if (*d == 't') { + } + else { + char *popt_copy = NULL; + while (s && *s) { + const char *d; + while (isSPACE(*s)) + s++; + if (*s == '-') { + s++; + if (isSPACE(*s)) + continue; + } + d = s; + if (!*s) + break; + if (!memCHRs("CDIMUdmtwW", *s)) + Perl_croak(aTHX_ "Illegal switch in PERL5OPT: -%c", *s); + while (++s && *s) { + if (isSPACE(*s)) { + if (!popt_copy) { + popt_copy = SvPVX(newSVpvn_flags(d, strlen(d), SVs_TEMP)); + s = popt_copy + (s - d); + d = popt_copy; + } + *s++ = '\0'; + break; + } + } + if (*d == 't') { #if defined(SILENT_NO_TAINT_SUPPORT) /* silently ignore */ #elif defined(NO_TAINT_SUPPORT) Perl_croak_nocontext("This perl was compiled without taint support. " "Cowardly refusing to run with -t or -T flags"); #else - if( !TAINTING_get) { - TAINT_WARN_set(TRUE); - TAINTING_set(TRUE); - } -#endif - } else { - moreswitches(d); - } - } - } + if( !TAINTING_get) { + TAINT_WARN_set(TRUE); + TAINTING_set(TRUE); + } +#endif + } else { + moreswitches(d); + } + } + } } } @@ -2361,6 +2320,8 @@ S_parse_body(pTHX_ char **env, XSINIT_t xsinit) Perl_drand48_init_r(&PL_internal_random_state, seed()); } #endif + if (DEBUG_h_TEST) + debug_hash_seed(true); /* Set $^X early so that it can be used for relocatable paths in @INC */ /* and for SITELIB_EXP in USE_SITECUSTOMIZE */ @@ -2371,101 +2332,97 @@ S_parse_body(pTHX_ char **env, XSINIT_t xsinit) #if defined(USE_SITECUSTOMIZE) if (!minus_f) { - /* The games with local $! are to avoid setting errno if there is no - sitecustomize script. "q%c...%c", 0, ..., 0 becomes "q\0...\0", - ie a q() operator with a NUL byte as a the delimiter. This avoids - problems with pathnames containing (say) ' */ + /* The games with local $! are to avoid setting errno if there is no + sitecustomize script. "q%c...%c", 0, ..., 0 becomes "q\0...\0", + ie a q() operator with a NUL byte as a the delimiter. This avoids + problems with pathnames containing (say) ' */ # ifdef PERL_IS_MINIPERL - AV *const inc = GvAV(PL_incgv); - SV **const inc0 = inc ? av_fetch(inc, 0, FALSE) : NULL; + AV *const inc = GvAV(PL_incgv); + SV **const inc0 = inc ? av_fetch(inc, 0, FALSE) : NULL; - if (inc0) { + if (inc0) { /* if lib/buildcustomize.pl exists, it should not fail. If it does, it should be reported immediately as a build failure. */ - (void)Perl_av_create_and_unshift_one(aTHX_ &PL_preambleav, - Perl_newSVpvf(aTHX_ - "BEGIN { my $f = q%c%s%" SVf "/buildcustomize.pl%c; " - "do {local $!; -f $f }" - " and do $f || die $@ || qq '$f: $!' }", + (void)Perl_av_create_and_unshift_one(aTHX_ &PL_preambleav, + Perl_newSVpvf(aTHX_ + "BEGIN { my $f = q%c%s%" SVf "/buildcustomize.pl%c; " + "do {local $!; -f $f }" + " and do $f || die $@ || qq '$f: $!' }", 0, (TAINTING_get ? "./" : ""), SVfARG(*inc0), 0)); - } + } # else - /* SITELIB_EXP is a function call on Win32. */ - const char *const raw_sitelib = SITELIB_EXP; - if (raw_sitelib) { - /* process .../.. if PERL_RELOCATABLE_INC is defined */ - SV *sitelib_sv = mayberelocate(raw_sitelib, strlen(raw_sitelib), - INCPUSH_CAN_RELOCATE); - const char *const sitelib = SvPVX(sitelib_sv); - (void)Perl_av_create_and_unshift_one(aTHX_ &PL_preambleav, - Perl_newSVpvf(aTHX_ - "BEGIN { do {local $!; -f q%c%s/sitecustomize.pl%c} && do q%c%s/sitecustomize.pl%c }", - 0, SVfARG(sitelib), 0, - 0, SVfARG(sitelib), 0)); - assert (SvREFCNT(sitelib_sv) == 1); - SvREFCNT_dec(sitelib_sv); - } + /* SITELIB_EXP is a function call on Win32. */ + const char *const raw_sitelib = SITELIB_EXP; + if (raw_sitelib) { + /* process .../.. if PERL_RELOCATABLE_INC is defined */ + SV *sitelib_sv = mayberelocate(raw_sitelib, strlen(raw_sitelib), + INCPUSH_CAN_RELOCATE); + const char *const sitelib = SvPVX(sitelib_sv); + (void)Perl_av_create_and_unshift_one(aTHX_ &PL_preambleav, + Perl_newSVpvf(aTHX_ + "BEGIN { do {local $!; -f q%c%s/sitecustomize.pl%c} && do q%c%s/sitecustomize.pl%c }", + 0, sitelib, 0, + 0, sitelib, 0)); + assert (SvREFCNT(sitelib_sv) == 1); + SvREFCNT_dec(sitelib_sv); + } # endif } #endif if (!scriptname) - scriptname = argv[0]; + scriptname = argv[0]; if (PL_e_script) { - argc++,argv--; - scriptname = BIT_BUCKET; /* don't look for script or read stdin */ + argc++,argv--; + scriptname = BIT_BUCKET; /* don't look for script or read stdin */ } else if (scriptname == NULL) { -#ifdef MSDOS - if ( PerlLIO_isatty(PerlIO_fileno(PerlIO_stdin())) ) - moreswitches("h"); -#endif - scriptname = "-"; + scriptname = "-"; } assert (!TAINT_get); init_perllib(); { - bool suidscript = FALSE; + bool suidscript = FALSE; - rsfp = open_script(scriptname, dosearch, &suidscript); - if (!rsfp) { - rsfp = PerlIO_stdin(); - lex_start_flags = LEX_DONT_CLOSE_RSFP; - } + rsfp = open_script(scriptname, dosearch, &suidscript); + if (!rsfp) { + rsfp = PerlIO_stdin(); + lex_start_flags = LEX_DONT_CLOSE_RSFP; + } - validate_suid(rsfp); + validate_suid(rsfp); #ifndef PERL_MICRO # if defined(SIGCHLD) || defined(SIGCLD) - { + { # ifndef SIGCHLD # define SIGCHLD SIGCLD # endif - Sighandler_t sigstate = rsignal_state(SIGCHLD); - if (sigstate == (Sighandler_t) SIG_IGN) { - Perl_ck_warner(aTHX_ packWARN(WARN_SIGNAL), - "Can't ignore signal CHLD, forcing to default"); - (void)rsignal(SIGCHLD, (Sighandler_t)SIG_DFL); - } - } + Sighandler_t sigstate = rsignal_state(SIGCHLD); + if (sigstate == (Sighandler_t) SIG_IGN) { + Perl_ck_warner(aTHX_ packWARN(WARN_SIGNAL), + "Can't ignore signal CHLD, forcing to default"); + (void)rsignal(SIGCHLD, (Sighandler_t)SIG_DFL); + } + } # endif #endif - if (doextract) { + if (doextract) { - /* This will croak if suidscript is true, as -x cannot be used with - setuid scripts. */ - forbid_setid('x', suidscript); - /* Hence you can't get here if suidscript is true */ + /* This will croak if suidscript is true, as -x cannot be used with + setuid scripts. */ + forbid_setid('x', suidscript); + /* Hence you can't get here if suidscript is true */ - linestr_sv = newSV_type(SVt_PV); - lex_start_flags |= LEX_START_COPIED; - find_beginning(linestr_sv, rsfp); - if (cddir && PerlDir_chdir( (char *)cddir ) < 0) - Perl_croak(aTHX_ "Can't chdir to %s",cddir); - } + linestr_sv = newSV_type(SVt_PV); + lex_start_flags |= LEX_START_COPIED; + find_beginning(linestr_sv, rsfp); + if (cddir && PerlDir_chdir( (char *)cddir ) < 0) + Perl_croak(aTHX_ "Can't chdir to %s",cddir); + } } PL_main_cv = PL_compcv = MUTABLE_CV(newSV_type(SVt_PVCV)); @@ -2477,13 +2434,14 @@ S_parse_body(pTHX_ char **env, XSINIT_t xsinit) boot_core_PerlIO(); boot_core_UNIVERSAL(); + boot_core_builtin(); boot_core_mro(); newXS("Internals::V", S_Internals_V, __FILE__); if (xsinit) - (*xsinit)(aTHX); /* in case linked C routines want magical variables */ + (*xsinit)(aTHX); /* in case linked C routines want magical variables */ #ifndef PERL_MICRO -#if defined(VMS) || defined(WIN32) || defined(DJGPP) || defined(__CYGWIN__) || defined(SYMBIAN) +#if defined(VMS) || defined(WIN32) || defined(__CYGWIN__) init_os_extras(); #endif #endif @@ -2501,66 +2459,63 @@ S_parse_body(pTHX_ char **env, XSINIT_t xsinit) /* more than once (ENV isn't cleared first, for example) */ /* But running with -u leaves %ENV & @ARGV undefined! XXX */ if (!PL_do_undump) - init_postdump_symbols(argc,argv,env); + init_postdump_symbols(argc,argv,env); /* PL_unicode is turned on by -C, or by $ENV{PERL_UNICODE}, * or explicitly in some platforms. * PL_utf8locale is conditionally turned on by * locale.c:Perl_init_i18nl10n() if the environment * look like the user wants to use UTF-8. */ -#if defined(__SYMBIAN32__) - PL_unicode = PERL_UNICODE_STD_FLAG; /* See PERL_SYMBIAN_CONSOLE_UTF8. */ -#endif # ifndef PERL_IS_MINIPERL if (PL_unicode) { - /* Requires init_predump_symbols(). */ - if (!(PL_unicode & PERL_UNICODE_LOCALE_FLAG) || PL_utf8locale) { - IO* io; - PerlIO* fp; - SV* sv; - - /* Turn on UTF-8-ness on STDIN, STDOUT, STDERR - * and the default open disciplines. */ - if ((PL_unicode & PERL_UNICODE_STDIN_FLAG) && - PL_stdingv && (io = GvIO(PL_stdingv)) && - (fp = IoIFP(io))) - PerlIO_binmode(aTHX_ fp, IoTYPE(io), 0, ":utf8"); - if ((PL_unicode & PERL_UNICODE_STDOUT_FLAG) && - PL_defoutgv && (io = GvIO(PL_defoutgv)) && - (fp = IoOFP(io))) - PerlIO_binmode(aTHX_ fp, IoTYPE(io), 0, ":utf8"); - if ((PL_unicode & PERL_UNICODE_STDERR_FLAG) && - PL_stderrgv && (io = GvIO(PL_stderrgv)) && - (fp = IoOFP(io))) - PerlIO_binmode(aTHX_ fp, IoTYPE(io), 0, ":utf8"); - if ((PL_unicode & PERL_UNICODE_INOUT_FLAG) && - (sv = GvSV(gv_fetchpvs("\017PEN", GV_ADD|GV_NOTQUAL, - SVt_PV)))) { - U32 in = PL_unicode & PERL_UNICODE_IN_FLAG; - U32 out = PL_unicode & PERL_UNICODE_OUT_FLAG; - if (in) { - if (out) - sv_setpvs(sv, ":utf8\0:utf8"); - else - sv_setpvs(sv, ":utf8\0"); - } - else if (out) - sv_setpvs(sv, "\0:utf8"); - SvSETMAGIC(sv); - } - } + /* Requires init_predump_symbols(). */ + if (!(PL_unicode & PERL_UNICODE_LOCALE_FLAG) || PL_utf8locale) { + IO* io; + PerlIO* fp; + SV* sv; + + /* Turn on UTF-8-ness on STDIN, STDOUT, STDERR + * and the default open disciplines. */ + if ((PL_unicode & PERL_UNICODE_STDIN_FLAG) && + PL_stdingv && (io = GvIO(PL_stdingv)) && + (fp = IoIFP(io))) + PerlIO_binmode(aTHX_ fp, IoTYPE(io), 0, ":utf8"); + if ((PL_unicode & PERL_UNICODE_STDOUT_FLAG) && + PL_defoutgv && (io = GvIO(PL_defoutgv)) && + (fp = IoOFP(io))) + PerlIO_binmode(aTHX_ fp, IoTYPE(io), 0, ":utf8"); + if ((PL_unicode & PERL_UNICODE_STDERR_FLAG) && + PL_stderrgv && (io = GvIO(PL_stderrgv)) && + (fp = IoOFP(io))) + PerlIO_binmode(aTHX_ fp, IoTYPE(io), 0, ":utf8"); + if ((PL_unicode & PERL_UNICODE_INOUT_FLAG) && + (sv = GvSV(gv_fetchpvs("\017PEN", GV_ADD|GV_NOTQUAL, + SVt_PV)))) { + U32 in = PL_unicode & PERL_UNICODE_IN_FLAG; + U32 out = PL_unicode & PERL_UNICODE_OUT_FLAG; + if (in) { + if (out) + sv_setpvs(sv, ":utf8\0:utf8"); + else + sv_setpvs(sv, ":utf8\0"); + } + else if (out) + sv_setpvs(sv, "\0:utf8"); + SvSETMAGIC(sv); + } + } } #endif { - const char *s; + const char *s; if ((s = PerlEnv_getenv("PERL_SIGNALS"))) { - if (strEQ(s, "unsafe")) - PL_signals |= PERL_SIGNALS_UNSAFE_FLAG; - else if (strEQ(s, "safe")) - PL_signals &= ~PERL_SIGNALS_UNSAFE_FLAG; - else - Perl_croak(aTHX_ "PERL_SIGNALS illegal: \"%s\"", s); + if (strEQ(s, "unsafe")) + PL_signals |= PERL_SIGNALS_UNSAFE_FLAG; + else if (strEQ(s, "safe")) + PL_signals &= ~PERL_SIGNALS_UNSAFE_FLAG; + else + Perl_croak(aTHX_ "PERL_SIGNALS illegal: \"%s\"", s); } } @@ -2571,9 +2526,11 @@ S_parse_body(pTHX_ char **env, XSINIT_t xsinit) PL_subname = newSVpvs("main"); if (add_read_e_script) - filter_add(read_e_script, NULL); + filter_add(read_e_script, NULL); /* now parse the script */ + if (minus_e == FALSE) + PL_hints |= HINTS_DEFAULT; /* after init_main_stash ; need to be after init_predump_symbols */ SETERRNO(0,SS_NORMAL); if (yyparse(GRAMPROG) || PL_parser->error_count) { @@ -2582,17 +2539,17 @@ S_parse_body(pTHX_ char **env, XSINIT_t xsinit) CopLINE_set(PL_curcop, 0); SET_CURSTASH(PL_defstash); if (PL_e_script) { - SvREFCNT_dec(PL_e_script); - PL_e_script = NULL; + SvREFCNT_dec(PL_e_script); + PL_e_script = NULL; } if (PL_do_undump) - my_unexec(); + my_unexec(); if (isWARN_ONCE) { - SAVECOPFILE(PL_curcop); - SAVECOPLINE(PL_curcop); - gv_check(PL_defstash); + SAVECOPFILE(PL_curcop); + SAVECOPLINE(PL_curcop); + gv_check(PL_defstash); } LEAVE; @@ -2600,7 +2557,7 @@ S_parse_body(pTHX_ char **env, XSINIT_t xsinit) #ifdef MYMALLOC { - const char *s; + const char *s; UV uv; s = PerlEnv_getenv("PERL_DEBUG_MSTATS"); if (s && grok_atoUV(s, &uv, NULL) && uv >= 2) @@ -2680,37 +2637,37 @@ perl_run(pTHXx) JMPENV_PUSH(ret); switch (ret) { case 1: - cxstack_ix = -1; /* start context stack again */ - goto redo_body; + cxstack_ix = -1; /* start context stack again */ + goto redo_body; case 0: /* normal completion */ redo_body: - run_body(oldscope); - /* FALLTHROUGH */ + run_body(oldscope); + /* FALLTHROUGH */ case 2: /* my_exit() */ - while (PL_scopestack_ix > oldscope) - LEAVE; - FREETMPS; - SET_CURSTASH(PL_defstash); - if (!(PL_exit_flags & PERL_EXIT_DESTRUCT_END) && - PL_endav && !PL_minus_c) { - PERL_SET_PHASE(PERL_PHASE_END); - call_list(oldscope, PL_endav); - } + while (PL_scopestack_ix > oldscope) + LEAVE; + FREETMPS; + SET_CURSTASH(PL_defstash); + if (!(PL_exit_flags & PERL_EXIT_DESTRUCT_END) && + PL_endav && !PL_minus_c) { + PERL_SET_PHASE(PERL_PHASE_END); + call_list(oldscope, PL_endav); + } #ifdef MYMALLOC - if (PerlEnv_getenv("PERL_DEBUG_MSTATS")) - dump_mstats("after execution: "); + if (PerlEnv_getenv("PERL_DEBUG_MSTATS")) + dump_mstats("after execution: "); #endif - ret = STATUS_EXIT; - break; + ret = STATUS_EXIT; + break; case 3: - if (PL_restartop) { - POPSTACK_TO(PL_mainstack); - goto redo_body; - } - PerlIO_printf(Perl_error_log, "panic: restartop in perl_run\n"); - FREETMPS; - ret = 1; - break; + if (PL_restartop) { + POPSTACK_TO(PL_mainstack); + goto redo_body; + } + PerlIO_printf(Perl_error_log, "panic: restartop in perl_run\n"); + FREETMPS; + ret = 1; + break; } JMPENV_POP; @@ -2726,25 +2683,25 @@ S_run_body(pTHX_ I32 oldscope) if (!PL_restartop) { #ifdef DEBUGGING - if (DEBUG_x_TEST || DEBUG_B_TEST) - dump_all_perl(!DEBUG_B_TEST); - if (!DEBUG_q_TEST) - PERL_DEBUG(PerlIO_printf(Perl_debug_log, "\nEXECUTING...\n\n")); + if (DEBUG_x_TEST || DEBUG_B_TEST) + dump_all_perl(!DEBUG_B_TEST); + if (!DEBUG_q_TEST) + PERL_DEBUG(PerlIO_printf(Perl_debug_log, "\nEXECUTING...\n\n")); #endif - if (PL_minus_c) { - PerlIO_printf(Perl_error_log, "%s syntax OK\n", PL_origfilename); - my_exit(0); - } - if (PERLDB_SINGLE && PL_DBsingle) + if (PL_minus_c) { + PerlIO_printf(Perl_error_log, "%s syntax OK\n", PL_origfilename); + my_exit(0); + } + if (PERLDB_SINGLE && PL_DBsingle) PL_DBsingle_iv = 1; - if (PL_initav) { - PERL_SET_PHASE(PERL_PHASE_INIT); - call_list(oldscope, PL_initav); - } + if (PL_initav) { + PERL_SET_PHASE(PERL_PHASE_INIT); + call_list(oldscope, PL_initav); + } #ifdef PERL_DEBUG_READONLY_OPS - if (PL_main_root && PL_main_root->op_slabbed) - Slab_to_ro(OpSLAB(PL_main_root)); + if (PL_main_root && PL_main_root->op_slabbed) + Slab_to_ro(OpSLAB(PL_main_root)); #endif } @@ -2753,27 +2710,27 @@ S_run_body(pTHX_ I32 oldscope) PERL_SET_PHASE(PERL_PHASE_RUN); if (PL_restartop) { - PL_restartjmpenv = NULL; - PL_op = PL_restartop; - PL_restartop = 0; - CALLRUNOPS(aTHX); + PL_restartjmpenv = NULL; + PL_op = PL_restartop; + PL_restartop = 0; + CALLRUNOPS(aTHX); } else if (PL_main_start) { - CvDEPTH(PL_main_cv) = 1; - PL_op = PL_main_start; - CALLRUNOPS(aTHX); + CvDEPTH(PL_main_cv) = 1; + PL_op = PL_main_start; + CALLRUNOPS(aTHX); } my_exit(0); NOT_REACHED; /* NOTREACHED */ } /* -=head1 SV Manipulation Functions +=for apidoc_section $SV =for apidoc get_sv Returns the SV of the specified Perl scalar. C are passed to -C. If C is set and the +L>. If C is set and the Perl variable does not exist then it will be created. If C is zero and the variable does not exist then NULL is returned. @@ -2789,17 +2746,17 @@ Perl_get_sv(pTHX_ const char *name, I32 flags) gv = gv_fetchpv(name, flags, SVt_PV); if (gv) - return GvSV(gv); + return GvSV(gv); return NULL; } /* -=head1 Array Manipulation Functions +=for apidoc_section $AV =for apidoc get_av Returns the AV of the specified Perl global or package array with the given -name (so it won't work on lexical variables). C are passed +name (so it won't work on lexical variables). C are passed to C. If C is set and the Perl variable does not exist then it will be created. If C is zero and the variable does not exist then NULL is returned. @@ -2817,14 +2774,14 @@ Perl_get_av(pTHX_ const char *name, I32 flags) PERL_ARGS_ASSERT_GET_AV; if (flags) - return GvAVn(gv); + return GvAVn(gv); if (gv) - return GvAV(gv); + return GvAV(gv); return NULL; } /* -=head1 Hash Manipulation Functions +=for apidoc_section $HV =for apidoc get_hv @@ -2844,26 +2801,33 @@ Perl_get_hv(pTHX_ const char *name, I32 flags) PERL_ARGS_ASSERT_GET_HV; if (flags) - return GvHVn(gv); + return GvHVn(gv); if (gv) - return GvHV(gv); + return GvHV(gv); return NULL; } /* -=head1 CV Manipulation Functions +=for apidoc_section $CV -=for apidoc get_cvn_flags +=for apidoc get_cv +=for apidoc_item |CV *|get_cvs|"string"|I32 flags +=for apidoc_item get_cvn_flags -Returns the CV of the specified Perl subroutine. C are passed to +These return the CV of the specified Perl subroutine. C are passed to C. If C is set and the Perl subroutine does not exist then it will be declared (which has the same effect as saying -C). If C is not set and the subroutine does not exist +C). If C is not set and the subroutine does not exist, then NULL is returned. -=for apidoc get_cv +The forms differ only in how the subroutine is specified.. With C, +the name is a literal C string, enclosed in double quotes. With C, the +name is given by the C parameter, which must be a NUL-terminated C +string. With C, the name is also given by the C +parameter, but it is a Perl string (possibly containing embedded NUL bytes), +and its length in bytes is contained in the C parameter. -Uses C to get the length of C, then calls C. +=for apidoc Amnh||GV_ADD =cut */ @@ -2876,16 +2840,16 @@ Perl_get_cvn_flags(pTHX_ const char *name, STRLEN len, I32 flags) PERL_ARGS_ASSERT_GET_CVN_FLAGS; if (gv && UNLIKELY(SvROK(gv)) && SvTYPE(SvRV((SV *)gv)) == SVt_PVCV) - return (CV*)SvRV((SV *)gv); + return (CV*)SvRV((SV *)gv); /* XXX this is probably not what they think they're getting. * It has the same effect as "sub name;", i.e. just a forward * declaration! */ if ((flags & ~GV_NOADD_MASK) && !GvCVu(gv)) { - return newSTUB(gv,0); + return newSTUB(gv,0); } if (gv) - return GvCVu(gv); + return GvCVu(gv); return NULL; } @@ -2903,11 +2867,11 @@ Perl_get_cv(pTHX_ const char *name, I32 flags) /* -=head1 Callback Functions +=for apidoc_section $callback =for apidoc call_argv -Performs a callback to the specified named and package-scoped Perl subroutine +Performs a callback to the specified named and package-scoped Perl subroutine with C (a C-terminated array of strings) as arguments. See L. @@ -2919,8 +2883,8 @@ Approximate Perl equivalent: C<&{"$sub_name"}(@$argv)>. I32 Perl_call_argv(pTHX_ const char *sub_name, I32 flags, char **argv) - /* See G_* flags in cop.h */ - /* null terminated arg list */ + /* See G_* flags in cop.h */ + /* null terminated arg list */ { dSP; @@ -2945,8 +2909,8 @@ Performs a callback to the specified Perl sub. See L. I32 Perl_call_pv(pTHX_ const char *sub_name, I32 flags) - /* name of the subroutine */ - /* See G_* flags in cop.h */ + /* name of the subroutine */ + /* See G_* flags in cop.h */ { PERL_ARGS_ASSERT_CALL_PV; @@ -2964,8 +2928,8 @@ be on the stack. See L. I32 Perl_call_method(pTHX_ const char *methname, I32 flags) - /* name of the subroutine */ - /* See G_* flags in cop.h */ + /* name of the subroutine */ + /* See G_* flags in cop.h */ { STRLEN len; SV* sv; @@ -3008,9 +2972,8 @@ See L. I32 Perl_call_sv(pTHX_ SV *sv, volatile I32 flags) - /* See G_* flags in cop.h */ + /* See G_* flags in cop.h */ { - dVAR; LOGOP myop; /* fake syntax tree node */ METHOP method_op; I32 oldmark; @@ -3023,38 +2986,38 @@ Perl_call_sv(pTHX_ SV *sv, volatile I32 flags) PERL_ARGS_ASSERT_CALL_SV; if (flags & G_DISCARD) { - ENTER; - SAVETMPS; + ENTER; + SAVETMPS; } if (!(flags & G_WANT)) { - /* Backwards compatibility - as G_SCALAR was 0, it could be omitted. - */ - flags |= G_SCALAR; + /* Backwards compatibility - as G_SCALAR was 0, it could be omitted. + */ + flags |= G_SCALAR; } Zero(&myop, 1, LOGOP); if (!(flags & G_NOARGS)) - myop.op_flags |= OPf_STACKED; + myop.op_flags |= OPf_STACKED; myop.op_flags |= OP_GIMME_REVERSE(flags); SAVEOP(); PL_op = (OP*)&myop; if (!(flags & G_METHOD_NAMED)) { - dSP; - EXTEND(SP, 1); - PUSHs(sv); - PUTBACK; + dSP; + EXTEND(SP, 1); + PUSHs(sv); + PUTBACK; } oldmark = TOPMARK; if (PERLDB_SUB && PL_curstash != PL_debstash - /* Handle first BEGIN of -d. */ - && (PL_DBcv || (PL_DBcv = GvCV(PL_DBsub))) - /* Try harder, since this may have been a sighandler, thus - * curstash may be meaningless. */ - && (SvTYPE(sv) != SVt_PVCV || CvSTASH((const CV *)sv) != PL_debstash) - && !(flags & G_NODEBUG)) - myop.op_private |= OPpENTERSUB_DB; + /* Handle first BEGIN of -d. */ + && (PL_DBcv || (PL_DBcv = GvCV(PL_DBsub))) + /* Try harder, since this may have been a sighandler, thus + * curstash may be meaningless. */ + && (SvTYPE(sv) != SVt_PVCV || CvSTASH((const CV *)sv) != PL_debstash) + && !(flags & G_NODEBUG)) + myop.op_private |= OPpENTERSUB_DB; if (flags & (G_METHOD|G_METHOD_NAMED)) { Zero(&method_op, 1, METHOP); @@ -3073,72 +3036,72 @@ Perl_call_sv(pTHX_ SV *sv, volatile I32 flags) } if (!(flags & G_EVAL)) { - CATCH_SET(TRUE); - CALL_BODY_SUB((OP*)&myop); - retval = PL_stack_sp - (PL_stack_base + oldmark); - CATCH_SET(oldcatch); + CATCH_SET(TRUE); + CALL_BODY_SUB((OP*)&myop); + retval = PL_stack_sp - (PL_stack_base + oldmark); + CATCH_SET(oldcatch); } else { I32 old_cxix; - myop.op_other = (OP*)&myop; - (void)POPMARK; + myop.op_other = (OP*)&myop; + (void)POPMARK; old_cxix = cxstack_ix; - create_eval_scope(NULL, flags|G_FAKINGEVAL); - INCMARK; + create_eval_scope(NULL, flags|G_FAKINGEVAL); + INCMARK; - JMPENV_PUSH(ret); + JMPENV_PUSH(ret); - switch (ret) { - case 0: + switch (ret) { + case 0: redo_body: - CALL_BODY_SUB((OP*)&myop); - retval = PL_stack_sp - (PL_stack_base + oldmark); - if (!(flags & G_KEEPERR)) { - CLEAR_ERRSV(); - } - break; - case 1: - STATUS_ALL_FAILURE; - /* FALLTHROUGH */ - case 2: - /* my_exit() was called */ - SET_CURSTASH(PL_defstash); - FREETMPS; - JMPENV_POP; - my_exit_jump(); - NOT_REACHED; /* NOTREACHED */ - case 3: - if (PL_restartop) { - PL_restartjmpenv = NULL; - PL_op = PL_restartop; - PL_restartop = 0; - goto redo_body; - } - PL_stack_sp = PL_stack_base + oldmark; - if ((flags & G_WANT) == G_ARRAY) - retval = 0; - else { - retval = 1; - *++PL_stack_sp = &PL_sv_undef; - } - break; - } + CALL_BODY_SUB((OP*)&myop); + retval = PL_stack_sp - (PL_stack_base + oldmark); + if (!(flags & G_KEEPERR)) { + CLEAR_ERRSV(); + } + break; + case 1: + STATUS_ALL_FAILURE; + /* FALLTHROUGH */ + case 2: + /* my_exit() was called */ + SET_CURSTASH(PL_defstash); + FREETMPS; + JMPENV_POP; + my_exit_jump(); + NOT_REACHED; /* NOTREACHED */ + case 3: + if (PL_restartop) { + PL_restartjmpenv = NULL; + PL_op = PL_restartop; + PL_restartop = 0; + goto redo_body; + } + PL_stack_sp = PL_stack_base + oldmark; + if ((flags & G_WANT) == G_LIST) + retval = 0; + else { + retval = 1; + *++PL_stack_sp = &PL_sv_undef; + } + break; + } /* if we croaked, depending on how we croaked the eval scope * may or may not have already been popped */ - if (cxstack_ix > old_cxix) { + if (cxstack_ix > old_cxix) { assert(cxstack_ix == old_cxix + 1); assert(CxTYPE(CX_CUR()) == CXt_EVAL); - delete_eval_scope(); + delete_eval_scope(); } - JMPENV_POP; + JMPENV_POP; } if (flags & G_DISCARD) { - PL_stack_sp = PL_stack_base + oldmark; - retval = 0; - FREETMPS; - LEAVE; + PL_stack_sp = PL_stack_base + oldmark; + retval = 0; + FREETMPS; + LEAVE; } PL_op = oldop; return retval; @@ -3162,9 +3125,8 @@ execute code specified by a string, but not catch any errors. I32 Perl_eval_sv(pTHX_ SV *sv, I32 flags) - /* See G_* flags in cop.h */ + /* See G_* flags in cop.h */ { - dVAR; UNOP myop; /* fake syntax tree node */ volatile I32 oldmark; volatile I32 retval = 0; @@ -3175,30 +3137,30 @@ Perl_eval_sv(pTHX_ SV *sv, I32 flags) PERL_ARGS_ASSERT_EVAL_SV; if (flags & G_DISCARD) { - ENTER; - SAVETMPS; + ENTER; + SAVETMPS; } SAVEOP(); PL_op = (OP*)&myop; Zero(&myop, 1, UNOP); { - dSP; - oldmark = SP - PL_stack_base; - EXTEND(SP, 1); - PUSHs(sv); - PUTBACK; + dSP; + oldmark = SP - PL_stack_base; + EXTEND(SP, 1); + PUSHs(sv); + PUTBACK; } if (!(flags & G_NOARGS)) - myop.op_flags = OPf_STACKED; + myop.op_flags = OPf_STACKED; myop.op_type = OP_ENTEREVAL; myop.op_flags |= OP_GIMME_REVERSE(flags); if (flags & G_KEEPERR) - myop.op_flags |= OPf_SPECIAL; + myop.op_flags |= OPf_SPECIAL; if (flags & G_RE_REPARSING) - myop.op_private = (OPpEVAL_COPHH | OPpEVAL_RE_REPARSING); + myop.op_private = (OPpEVAL_COPHH | OPpEVAL_RE_REPARSING); /* fail now; otherwise we could fail after the JMPENV_PUSH but * before a cx_pusheval(), which corrupts the stack after a croak */ @@ -3208,56 +3170,56 @@ Perl_eval_sv(pTHX_ SV *sv, I32 flags) switch (ret) { case 0: redo_body: - if (PL_op == (OP*)(&myop)) { - PL_op = PL_ppaddr[OP_ENTEREVAL](aTHX); - if (!PL_op) - goto fail; /* failed in compilation */ - } - CALLRUNOPS(aTHX); - retval = PL_stack_sp - (PL_stack_base + oldmark); - if (!(flags & G_KEEPERR)) { - CLEAR_ERRSV(); - } - break; + if (PL_op == (OP*)(&myop)) { + PL_op = PL_ppaddr[OP_ENTEREVAL](aTHX); + if (!PL_op) + goto fail; /* failed in compilation */ + } + CALLRUNOPS(aTHX); + retval = PL_stack_sp - (PL_stack_base + oldmark); + if (!(flags & G_KEEPERR)) { + CLEAR_ERRSV(); + } + break; case 1: - STATUS_ALL_FAILURE; - /* FALLTHROUGH */ + STATUS_ALL_FAILURE; + /* FALLTHROUGH */ case 2: - /* my_exit() was called */ - SET_CURSTASH(PL_defstash); - FREETMPS; - JMPENV_POP; - my_exit_jump(); - NOT_REACHED; /* NOTREACHED */ + /* my_exit() was called */ + SET_CURSTASH(PL_defstash); + FREETMPS; + JMPENV_POP; + my_exit_jump(); + NOT_REACHED; /* NOTREACHED */ case 3: - if (PL_restartop) { - PL_restartjmpenv = NULL; - PL_op = PL_restartop; - PL_restartop = 0; - goto redo_body; - } + if (PL_restartop) { + PL_restartjmpenv = NULL; + PL_op = PL_restartop; + PL_restartop = 0; + goto redo_body; + } fail: if (flags & G_RETHROW) { JMPENV_POP; croak_sv(ERRSV); } - PL_stack_sp = PL_stack_base + oldmark; - if ((flags & G_WANT) == G_ARRAY) - retval = 0; - else { - retval = 1; - *++PL_stack_sp = &PL_sv_undef; - } - break; + PL_stack_sp = PL_stack_base + oldmark; + if ((flags & G_WANT) == G_LIST) + retval = 0; + else { + retval = 1; + *++PL_stack_sp = &PL_sv_undef; + } + break; } JMPENV_POP; if (flags & G_DISCARD) { - PL_stack_sp = PL_stack_base + oldmark; - retval = 0; - FREETMPS; - LEAVE; + PL_stack_sp = PL_stack_base + oldmark; + retval = 0; + FREETMPS; + LEAVE; } PL_op = oldop; return retval; @@ -3299,7 +3261,7 @@ Perl_eval_pv(pTHX_ const char *p, I32 croak_on_error) /* Require a module. */ /* -=head1 Embedding Functions +=for apidoc_section $embedding =for apidoc require_pv @@ -3332,34 +3294,34 @@ S_usage(pTHX) /* XXX move this out into a module ? */ /* Grouped as 6 lines per C string literal, to keep under the ANSI C 89 minimum of 509 character string literals. */ static const char * const usage_msg[] = { -" -0[octal] specify record separator (\\0, if no argument)\n" -" -a autosplit mode with -n or -p (splits $_ into @F)\n" -" -C[number/list] enables the listed Unicode features\n" -" -c check syntax only (runs BEGIN and CHECK blocks)\n" -" -d[:debugger] run program under debugger\n" -" -D[number/list] set debugging flags (argument is a bit mask or alphabets)\n", -" -e program one line of program (several -e's allowed, omit programfile)\n" -" -E program like -e, but enables all optional features\n" -" -f don't do $sitelib/sitecustomize.pl at startup\n" -" -F/pattern/ split() pattern for -a switch (//'s are optional)\n" -" -i[extension] edit <> files in place (makes backup if extension supplied)\n" -" -Idirectory specify @INC/#include directory (several -I's allowed)\n", -" -l[octal] enable line ending processing, specifies line terminator\n" -" -[mM][-]module execute \"use/no module...\" before executing program\n" -" -n assume \"while (<>) { ... }\" loop around program\n" -" -p assume loop like -n but print line also, like sed\n" -" -s enable rudimentary parsing for switches after programfile\n" -" -S look for programfile using PATH environment variable\n", -" -t enable tainting warnings\n" -" -T enable tainting checks\n" -" -u dump core after parsing program\n" -" -U allow unsafe operations\n" -" -v print version, patchlevel and license\n" -" -V[:variable] print configuration summary (or a single Config.pm variable)\n", -" -w enable many useful warnings\n" -" -W enable all warnings\n" -" -x[directory] ignore text before #!perl line (optionally cd to directory)\n" -" -X disable all warnings\n" +" -0[octal/hexadecimal] specify record separator (\\0, if no argument)\n" +" -a autosplit mode with -n or -p (splits $_ into @F)\n" +" -C[number/list] enables the listed Unicode features\n" +" -c check syntax only (runs BEGIN and CHECK blocks)\n" +" -d[t][:MOD] run program under debugger or module Devel::MOD\n" +" -D[number/letters] set debugging flags (argument is a bit mask or alphabets)\n", +" -e commandline one line of program (several -e's allowed, omit programfile)\n" +" -E commandline like -e, but enables all optional features\n" +" -f don't do $sitelib/sitecustomize.pl at startup\n" +" -F/pattern/ split() pattern for -a switch (//'s are optional)\n" +" -i[extension] edit <> files in place (makes backup if extension supplied)\n" +" -Idirectory specify @INC/#include directory (several -I's allowed)\n", +" -l[octnum] enable line ending processing, specifies line terminator\n" +" -[mM][-]module execute \"use/no module...\" before executing program\n" +" -n assume \"while (<>) { ... }\" loop around program\n" +" -p assume loop like -n but print line also, like sed\n" +" -s enable rudimentary parsing for switches after programfile\n" +" -S look for programfile using PATH environment variable\n", +" -t enable tainting warnings\n" +" -T enable tainting checks\n" +" -u dump core after parsing program\n" +" -U allow unsafe operations\n" +" -v print version, patchlevel and license\n" +" -V[:configvar] print configuration summary (or a single Config.pm variable)\n", +" -w enable many useful warnings\n" +" -W enable all warnings\n" +" -x[directory] ignore text before #!perl line (optionally cd to directory)\n" +" -X disable all warnings\n" " \n" "Run 'perldoc perl' for more help with Perl.\n\n", NULL @@ -3368,10 +3330,10 @@ NULL PerlIO *out = PerlIO_stdout(); PerlIO_printf(out, - "\nUsage: %s [switches] [--] [programfile] [arguments]\n", - PL_origargv[0]); + "\nUsage: %s [switches] [--] [programfile] [arguments]\n", + PL_origargv[0]); while (*p) - PerlIO_puts(out, *p++); + PerlIO_puts(out, *p++); my_exit(0); } @@ -3396,7 +3358,6 @@ Perl_get_debug_opts(pTHX_ const char **s, bool givehelp) " r Regular expression parsing and execution\n" " x Syntax tree dump\n", " u Tainting checks\n" - " H Hash dump -- usurps values()\n" " X Scratchpad allocation\n" " D Cleaning up\n" " S Op slab allocation\n" @@ -3412,6 +3373,8 @@ Perl_get_debug_opts(pTHX_ const char **s, bool givehelp) " L trace some locale setting information--for Perl core development\n", " i trace PerlIO layer processing\n", " y trace y///, tr/// compilation and execution\n", + " h Show (h)ash randomization debug output" + " (changes to PL_hash_rand_bits)\n", NULL }; UV uv = 0; @@ -3419,23 +3382,37 @@ Perl_get_debug_opts(pTHX_ const char **s, bool givehelp) PERL_ARGS_ASSERT_GET_DEBUG_OPTS; if (isALPHA(**s)) { - /* if adding extra options, remember to update DEBUG_MASK */ - static const char debopts[] = "psltocPmfrxuUHXDSTRJvCAqMBLiy"; - - for (; isWORDCHAR(**s); (*s)++) { - const char * const d = strchr(debopts,**s); - if (d) - uv |= 1 << (d - debopts); - else if (ckWARN_d(WARN_DEBUGGING)) - Perl_warner(aTHX_ packWARN(WARN_DEBUGGING), - "invalid option -D%c, use -D'' to see choices\n", **s); - } + /* NOTE: + * If adding new options add them to the END of debopts[]. + * If you remove an option replace it with a '?'. + * If there is a free slot available marked with '?' feel + * free to reuse it for something else. + * + * Regardles remember to update DEBUG_MASK in perl.h, and + * update the documentation above AND in pod/perlrun.pod. + * + * Note that the ? indicates an unused slot. As the code below + * indicates the position in this list is important. You cannot + * change the order or delete a character from the list without + * impacting the definitions of all the other flags in perl.h + * However because the logic is guarded by isWORDCHAR we can + * fill in holes with non-wordchar characters instead. */ + static const char debopts[] = "psltocPmfrxuUhXDSTRJvCAqMBLiy"; + + for (; isWORDCHAR(**s); (*s)++) { + const char * const d = strchr(debopts,**s); + if (d) + uv |= 1 << (d - debopts); + else if (ckWARN_d(WARN_DEBUGGING)) + Perl_warner(aTHX_ packWARN(WARN_DEBUGGING), + "invalid option -D%c, use -D'' to see choices\n", **s); + } } else if (isDIGIT(**s)) { const char* e = *s + strlen(*s); - if (grok_atoUV(*s, &uv, &e)) + if (grok_atoUV(*s, &uv, &e)) *s = e; - for (; isWORDCHAR(**s); (*s)++) ; + for (; isWORDCHAR(**s); (*s)++) ; } else if (givehelp) { const char *const *p = usage_msgd; @@ -3450,7 +3427,6 @@ Perl_get_debug_opts(pTHX_ const char **s, bool givehelp) const char * Perl_moreswitches(pTHX_ const char *s) { - dVAR; UV rschar; const char option = *s; /* used to remember option in -m/-M code */ @@ -3459,259 +3435,276 @@ Perl_moreswitches(pTHX_ const char *s) switch (*s) { case '0': { - I32 flags = 0; - STRLEN numlen; - - SvREFCNT_dec(PL_rs); - if (s[1] == 'x' && s[2]) { - const char *e = s+=2; - U8 *tmps; - - while (*e) - e++; - numlen = e - s; - flags = PERL_SCAN_SILENT_ILLDIGIT; - rschar = (U32)grok_hex(s, &numlen, &flags, NULL); - if (s + numlen < e) { - rschar = 0; /* Grandfather -0xFOO as -0 -xFOO. */ - numlen = 0; - s--; - } - PL_rs = newSVpvs(""); - tmps = (U8*) SvGROW(PL_rs, (STRLEN)(UVCHR_SKIP(rschar) + 1)); - uvchr_to_utf8(tmps, rschar); - SvCUR_set(PL_rs, UVCHR_SKIP(rschar)); - SvUTF8_on(PL_rs); - } - else { - numlen = 4; - rschar = (U32)grok_oct(s, &numlen, &flags, NULL); - if (rschar & ~((U8)~0)) - PL_rs = &PL_sv_undef; - else if (!rschar && numlen >= 2) - PL_rs = newSVpvs(""); - else { - char ch = (char)rschar; - PL_rs = newSVpvn(&ch, 1); - } - } - sv_setsv(get_sv("/", GV_ADD), PL_rs); - return s + numlen; + I32 flags = 0; + STRLEN numlen; + + SvREFCNT_dec(PL_rs); + if (s[1] == 'x' && s[2]) { + const char *e = s+=2; + U8 *tmps; + + while (*e) + e++; + numlen = e - s; + flags = PERL_SCAN_SILENT_ILLDIGIT; + rschar = (U32)grok_hex(s, &numlen, &flags, NULL); + if (s + numlen < e) { + /* Continue to treat -0xFOO as -0 -xFOO + * (ie NUL as the input record separator, and -x with FOO + * as the directory argument) + * + * hex support for -0 was only added in 5.8.1, hence this + * heuristic to distinguish between it and '-0' clustered with + * '-x' with an argument. The text following '-0x' is only + * processed as the IRS specified in hexadecimal if all + * characters are valid hex digits. */ + rschar = 0; + numlen = 0; + s--; + } + PL_rs = newSVpvs(""); + tmps = (U8*) SvGROW(PL_rs, (STRLEN)(UVCHR_SKIP(rschar) + 1)); + uvchr_to_utf8(tmps, rschar); + SvCUR_set(PL_rs, UVCHR_SKIP(rschar)); + SvUTF8_on(PL_rs); + } + else { + numlen = 4; + rschar = (U32)grok_oct(s, &numlen, &flags, NULL); + if (rschar & ~((U8)~0)) + PL_rs = &PL_sv_undef; + else if (!rschar && numlen >= 2) + PL_rs = newSVpvs(""); + else { + char ch = (char)rschar; + PL_rs = newSVpvn(&ch, 1); + } + } + sv_setsv(get_sv("/", GV_ADD), PL_rs); + return s + numlen; } case 'C': s++; PL_unicode = parse_unicode_opts( (const char **)&s ); - if (PL_unicode & PERL_UNICODE_UTF8CACHEASSERT_FLAG) - PL_utf8cache = -1; - return s; + if (PL_unicode & PERL_UNICODE_UTF8CACHEASSERT_FLAG) + PL_utf8cache = -1; + return s; case 'F': - PL_minus_a = TRUE; - PL_minus_F = TRUE; + PL_minus_a = TRUE; + PL_minus_F = TRUE; PL_minus_n = TRUE; - PL_splitstr = ++s; - while (*s && !isSPACE(*s)) ++s; - PL_splitstr = savepvn(PL_splitstr, s - PL_splitstr); - return s; + PL_splitstr = ++s; + while (*s && !isSPACE(*s)) ++s; + PL_splitstr = savepvn(PL_splitstr, s - PL_splitstr); + return s; case 'a': - PL_minus_a = TRUE; + PL_minus_a = TRUE; PL_minus_n = TRUE; - s++; - return s; + s++; + return s; case 'c': - PL_minus_c = TRUE; - s++; - return s; + PL_minus_c = TRUE; + s++; + return s; case 'd': - forbid_setid('d', FALSE); - s++; + forbid_setid('d', FALSE); + s++; /* -dt indicates to the debugger that threads will be used */ - if (*s == 't' && !isWORDCHAR(s[1])) { - ++s; - my_setenv("PERL5DB_THREADED", "1"); - } - - /* The following permits -d:Mod to accepts arguments following an = - in the fashion that -MSome::Mod does. */ - if (*s == ':' || *s == '=') { - const char *start; - const char *end; - SV *sv; - - if (*++s == '-') { - ++s; - sv = newSVpvs("no Devel::"); - } else { - sv = newSVpvs("use Devel::"); - } - - start = s; - end = s + strlen(s); - - /* We now allow -d:Module=Foo,Bar and -d:-Module */ - while(isWORDCHAR(*s) || *s==':') ++s; - if (*s != '=') - sv_catpvn(sv, start, end - start); - else { - sv_catpvn(sv, start, s-start); - /* Don't use NUL as q// delimiter here, this string goes in the - * environment. */ - Perl_sv_catpvf(aTHX_ sv, " split(/,/,q{%s});", ++s); - } - s = end; - my_setenv("PERL5DB", SvPV_nolen_const(sv)); - SvREFCNT_dec(sv); - } - if (!PL_perldb) { - PL_perldb = PERLDB_ALL; - init_debugger(); - } - return s; + if (*s == 't' && !isWORDCHAR(s[1])) { + ++s; + my_setenv("PERL5DB_THREADED", "1"); + } + + /* The following permits -d:Mod to accepts arguments following an = + in the fashion that -MSome::Mod does. */ + if (*s == ':' || *s == '=') { + const char *start; + const char *end; + SV *sv; + + if (*++s == '-') { + ++s; + sv = newSVpvs("no Devel::"); + } else { + sv = newSVpvs("use Devel::"); + } + + start = s; + end = s + strlen(s); + + /* We now allow -d:Module=Foo,Bar and -d:-Module */ + while(isWORDCHAR(*s) || *s==':') ++s; + if (*s != '=') + sv_catpvn(sv, start, end - start); + else { + sv_catpvn(sv, start, s-start); + /* Don't use NUL as q// delimiter here, this string goes in the + * environment. */ + Perl_sv_catpvf(aTHX_ sv, " split(/,/,q{%s});", ++s); + } + s = end; + my_setenv("PERL5DB", SvPV_nolen_const(sv)); + SvREFCNT_dec(sv); + } + if (!PL_perldb) { + PL_perldb = PERLDB_ALL; + init_debugger(); + } + return s; case 'D': - { + { #ifdef DEBUGGING - forbid_setid('D', FALSE); - s++; - PL_debug = get_debug_opts( (const char **)&s, 1) | DEBUG_TOP_FLAG; + forbid_setid('D', FALSE); + s++; + PL_debug = get_debug_opts( (const char **)&s, 1) | DEBUG_TOP_FLAG; #else /* !DEBUGGING */ - if (ckWARN_d(WARN_DEBUGGING)) - Perl_warner(aTHX_ packWARN(WARN_DEBUGGING), - "Recompile perl with -DDEBUGGING to use -D switch (did you mean -d ?)\n"); - for (s++; isWORDCHAR(*s); s++) ; + if (ckWARN_d(WARN_DEBUGGING)) + Perl_warner(aTHX_ packWARN(WARN_DEBUGGING), + "Recompile perl with -DDEBUGGING to use -D switch (did you mean -d ?)\n"); + for (s++; isWORDCHAR(*s); s++) ; #endif - return s; + return s; NOT_REACHED; /* NOTREACHED */ - } + } + case 'g': + SvREFCNT_dec(PL_rs); + PL_rs = &PL_sv_undef; + sv_setsv(get_sv("/", GV_ADD), PL_rs); + return ++s; + + case '?': + /* FALLTHROUGH */ case 'h': - usage(); + usage(); NOT_REACHED; /* NOTREACHED */ case 'i': - Safefree(PL_inplace); - { - const char * const start = ++s; - while (*s && !isSPACE(*s)) - ++s; - - PL_inplace = savepvn(start, s - start); - } - return s; + Safefree(PL_inplace); + { + const char * const start = ++s; + while (*s && !isSPACE(*s)) + ++s; + + PL_inplace = savepvn(start, s - start); + } + return s; case 'I': /* -I handled both here and in parse_body() */ - forbid_setid('I', FALSE); - ++s; - while (*s && isSPACE(*s)) - ++s; - if (*s) { - const char *e, *p; - p = s; - /* ignore trailing spaces (possibly followed by other switches) */ - do { - for (e = p; *e && !isSPACE(*e); e++) ; - p = e; - while (isSPACE(*p)) - p++; - } while (*p && *p != '-'); - incpush(s, e-s, - INCPUSH_ADD_SUB_DIRS|INCPUSH_ADD_OLD_VERS|INCPUSH_UNSHIFT); - s = p; - if (*s == '-') - s++; - } - else - Perl_croak(aTHX_ "No directory specified for -I"); - return s; + forbid_setid('I', FALSE); + ++s; + while (*s && isSPACE(*s)) + ++s; + if (*s) { + const char *e, *p; + p = s; + /* ignore trailing spaces (possibly followed by other switches) */ + do { + for (e = p; *e && !isSPACE(*e); e++) ; + p = e; + while (isSPACE(*p)) + p++; + } while (*p && *p != '-'); + incpush(s, e-s, + INCPUSH_ADD_SUB_DIRS|INCPUSH_ADD_OLD_VERS|INCPUSH_UNSHIFT); + s = p; + if (*s == '-') + s++; + } + else + Perl_croak(aTHX_ "No directory specified for -I"); + return s; case 'l': - PL_minus_l = TRUE; - s++; - if (PL_ors_sv) { - SvREFCNT_dec(PL_ors_sv); - PL_ors_sv = NULL; - } - if (isDIGIT(*s)) { + PL_minus_l = TRUE; + s++; + if (PL_ors_sv) { + SvREFCNT_dec(PL_ors_sv); + PL_ors_sv = NULL; + } + if (isDIGIT(*s)) { I32 flags = 0; - STRLEN numlen; - PL_ors_sv = newSVpvs("\n"); - numlen = 3 + (*s == '0'); - *SvPVX(PL_ors_sv) = (char)grok_oct(s, &numlen, &flags, NULL); - s += numlen; - } - else { - if (RsPARA(PL_rs)) { - PL_ors_sv = newSVpvs("\n\n"); - } - else { - PL_ors_sv = newSVsv(PL_rs); - } - } - return s; + STRLEN numlen; + PL_ors_sv = newSVpvs("\n"); + numlen = 3 + (*s == '0'); + *SvPVX(PL_ors_sv) = (char)grok_oct(s, &numlen, &flags, NULL); + s += numlen; + } + else { + if (RsPARA(PL_rs)) { + PL_ors_sv = newSVpvs("\n\n"); + } + else { + PL_ors_sv = newSVsv(PL_rs); + } + } + return s; case 'M': - forbid_setid('M', FALSE); /* XXX ? */ - /* FALLTHROUGH */ + forbid_setid('M', FALSE); /* XXX ? */ + /* FALLTHROUGH */ case 'm': - forbid_setid('m', FALSE); /* XXX ? */ - if (*++s) { - const char *start; - const char *end; - SV *sv; - const char *use = "use "; - bool colon = FALSE; - /* -M-foo == 'no foo' */ - /* Leading space on " no " is deliberate, to make both - possibilities the same length. */ - if (*s == '-') { use = " no "; ++s; } - sv = newSVpvn(use,4); - start = s; - /* We allow -M'Module qw(Foo Bar)' */ - while(isWORDCHAR(*s) || *s==':') { - if( *s++ == ':' ) { - if( *s == ':' ) - s++; - else - colon = TRUE; - } - } - if (s == start) - Perl_croak(aTHX_ "Module name required with -%c option", - option); - if (colon) - Perl_croak(aTHX_ "Invalid module name %.*s with -%c option: " - "contains single ':'", - (int)(s - start), start, option); - end = s + strlen(s); - if (*s != '=') { - sv_catpvn(sv, start, end - start); - if (option == 'm') { - if (*s != '\0') - Perl_croak(aTHX_ "Can't use '%c' after -mname", *s); - sv_catpvs( sv, " ()"); - } - } else { - sv_catpvn(sv, start, s-start); - /* Use NUL as q''-delimiter. */ - sv_catpvs(sv, " split(/,/,q\0"); - ++s; - sv_catpvn(sv, s, end - s); - sv_catpvs(sv, "\0)"); - } - s = end; - Perl_av_create_and_push(aTHX_ &PL_preambleav, sv); - } - else - Perl_croak(aTHX_ "Missing argument to -%c", option); - return s; + forbid_setid('m', FALSE); /* XXX ? */ + if (*++s) { + const char *start; + const char *end; + SV *sv; + const char *use = "use "; + bool colon = FALSE; + /* -M-foo == 'no foo' */ + /* Leading space on " no " is deliberate, to make both + possibilities the same length. */ + if (*s == '-') { use = " no "; ++s; } + sv = newSVpvn(use,4); + start = s; + /* We allow -M'Module qw(Foo Bar)' */ + while(isWORDCHAR(*s) || *s==':') { + if( *s++ == ':' ) { + if( *s == ':' ) + s++; + else + colon = TRUE; + } + } + if (s == start) + Perl_croak(aTHX_ "Module name required with -%c option", + option); + if (colon) + Perl_croak(aTHX_ "Invalid module name %.*s with -%c option: " + "contains single ':'", + (int)(s - start), start, option); + end = s + strlen(s); + if (*s != '=') { + sv_catpvn(sv, start, end - start); + if (option == 'm') { + if (*s != '\0') + Perl_croak(aTHX_ "Can't use '%c' after -mname", *s); + sv_catpvs( sv, " ()"); + } + } else { + sv_catpvn(sv, start, s-start); + /* Use NUL as q''-delimiter. */ + sv_catpvs(sv, " split(/,/,q\0"); + ++s; + sv_catpvn(sv, s, end - s); + sv_catpvs(sv, "\0)"); + } + s = end; + Perl_av_create_and_push(aTHX_ &PL_preambleav, sv); + } + else + Perl_croak(aTHX_ "Missing argument to -%c", option); + return s; case 'n': - PL_minus_n = TRUE; - s++; - return s; + PL_minus_n = TRUE; + s++; + return s; case 'p': - PL_minus_p = TRUE; - s++; - return s; + PL_minus_p = TRUE; + s++; + return s; case 's': - forbid_setid('s', FALSE); - PL_doswitches = TRUE; - s++; - return s; + forbid_setid('s', FALSE); + PL_doswitches = TRUE; + s++; + return s; case 't': case 'T': #if defined(SILENT_NO_TAINT_SUPPORT) @@ -3721,43 +3714,43 @@ Perl_moreswitches(pTHX_ const char *s) "Cowardly refusing to run with -t or -T flags"); #else if (!TAINTING_get) - TOO_LATE_FOR(*s); + TOO_LATE_FOR(*s); #endif s++; - return s; + return s; case 'u': - PL_do_undump = TRUE; - s++; - return s; + PL_do_undump = TRUE; + s++; + return s; case 'U': - PL_unsafe = TRUE; - s++; - return s; + PL_unsafe = TRUE; + s++; + return s; case 'v': - minus_v(); + minus_v(); case 'w': - if (! (PL_dowarn & G_WARN_ALL_MASK)) { - PL_dowarn |= G_WARN_ON; - } - s++; - return s; + if (! (PL_dowarn & G_WARN_ALL_MASK)) { + PL_dowarn |= G_WARN_ON; + } + s++; + return s; case 'W': - PL_dowarn = G_WARN_ALL_ON|G_WARN_ON; + PL_dowarn = G_WARN_ALL_ON|G_WARN_ON; free_and_set_cop_warnings(&PL_compiling, pWARN_ALL); - s++; - return s; + s++; + return s; case 'X': - PL_dowarn = G_WARN_ALL_OFF; + PL_dowarn = G_WARN_ALL_OFF; free_and_set_cop_warnings(&PL_compiling, pWARN_NONE); - s++; - return s; + s++; + return s; case '*': case ' ': while( *s == ' ' ) ++s; - if (s[0] == '-') /* Additional switches on #! line. */ - return s+1; - break; + if (s[0] == '-') /* Additional switches on #! line. */ + return s+1; + break; case '-': case 0: #if defined(WIN32) || !defined(PERL_STRICT_CR) @@ -3765,21 +3758,21 @@ Perl_moreswitches(pTHX_ const char *s) #endif case '\n': case '\t': - break; + break; #ifdef ALTERNATE_SHEBANG case 'S': /* OS/2 needs -S on "extproc" line. */ - break; + break; #endif case 'e': case 'f': case 'x': case 'E': #ifndef ALTERNATE_SHEBANG case 'S': #endif case 'V': - Perl_croak(aTHX_ "Can't emulate -%.1s on #! line",s); + Perl_croak(aTHX_ "Can't emulate -%.1s on #! line",s); default: - Perl_croak(aTHX_ - "Unrecognized switch: -%.1s (-h will show valid options)",s - ); + Perl_croak(aTHX_ + "Unrecognized switch: -%.1s (-h will show valid options)",s + ); } return NULL; } @@ -3788,97 +3781,84 @@ Perl_moreswitches(pTHX_ const char *s) STATIC void S_minus_v(pTHX) { - PerlIO * PIO_stdout; - { - const char * const level_str = "v" PERL_VERSION_STRING; - const STRLEN level_len = sizeof("v" PERL_VERSION_STRING)-1; + PerlIO * PIO_stdout; + { + const char * const level_str = "v" PERL_VERSION_STRING; + const STRLEN level_len = sizeof("v" PERL_VERSION_STRING)-1; #ifdef PERL_PATCHNUM - SV* level; + SV* level; # ifdef PERL_GIT_UNCOMMITTED_CHANGES - static const char num [] = PERL_PATCHNUM "*"; + static const char num [] = PERL_PATCHNUM "*"; # else - static const char num [] = PERL_PATCHNUM; + static const char num [] = PERL_PATCHNUM; # endif - { - const STRLEN num_len = sizeof(num)-1; - /* A very advanced compiler would fold away the strnEQ - and this whole conditional, but most (all?) won't do it. - SV level could also be replaced by with preprocessor - catenation. - */ - if (num_len >= level_len && strnEQ(num,level_str,level_len)) { - /* per 46807d8e80, PERL_PATCHNUM is outside of the control - of the interp so it might contain format characters - */ - level = newSVpvn(num, num_len); - } else { - level = Perl_newSVpvf_nocontext("%s (%s)", level_str, num); - } - } + { + const STRLEN num_len = sizeof(num)-1; + /* A very advanced compiler would fold away the strnEQ + and this whole conditional, but most (all?) won't do it. + SV level could also be replaced by with preprocessor + catenation. + */ + if (num_len >= level_len && strnEQ(num,level_str,level_len)) { + /* per 46807d8e80, PERL_PATCHNUM is outside of the control + of the interp so it might contain format characters + */ + level = newSVpvn(num, num_len); + } else { + level = Perl_newSVpvf_nocontext("%s (%s)", level_str, num); + } + } #else - SV* level = newSVpvn(level_str, level_len); + SV* level = newSVpvn(level_str, level_len); #endif /* #ifdef PERL_PATCHNUM */ - PIO_stdout = PerlIO_stdout(); - PerlIO_printf(PIO_stdout, - "\nThis is perl " STRINGIFY(PERL_REVISION) - ", version " STRINGIFY(PERL_VERSION) - ", subversion " STRINGIFY(PERL_SUBVERSION) - " (%" SVf ") built for " ARCHNAME, SVfARG(level) - ); - SvREFCNT_dec_NN(level); - } + PIO_stdout = PerlIO_stdout(); + PerlIO_printf(PIO_stdout, + "\nThis is perl " STRINGIFY(PERL_REVISION) + ", version " STRINGIFY(PERL_VERSION) + ", subversion " STRINGIFY(PERL_SUBVERSION) + " (%" SVf ") built for " ARCHNAME, SVfARG(level) + ); + SvREFCNT_dec_NN(level); + } #if defined(LOCAL_PATCH_COUNT) - if (LOCAL_PATCH_COUNT > 0) - PerlIO_printf(PIO_stdout, - "\n(with %d registered patch%s, " - "see perl -V for more detail)", - LOCAL_PATCH_COUNT, - (LOCAL_PATCH_COUNT!=1) ? "es" : ""); + if (LOCAL_PATCH_COUNT > 0) + PerlIO_printf(PIO_stdout, + "\n(with %d registered patch%s, " + "see perl -V for more detail)", + LOCAL_PATCH_COUNT, + (LOCAL_PATCH_COUNT!=1) ? "es" : ""); #endif - PerlIO_printf(PIO_stdout, - "\n\nCopyright 1987-2021, Larry Wall\n"); -#ifdef MSDOS - PerlIO_printf(PIO_stdout, - "\nMS-DOS port Copyright (c) 1989, 1990, Diomidis Spinellis\n"); -#endif -#ifdef DJGPP - PerlIO_printf(PIO_stdout, - "djgpp v2 port (jpl5003c) by Hirofumi Watanabe, 1996\n" - "djgpp v2 port (perl5004+) by Laszlo Molnar, 1997-1999\n"); -#endif + PerlIO_printf(PIO_stdout, + "\n\nCopyright 1987-2022, Larry Wall\n"); #ifdef OS2 - PerlIO_printf(PIO_stdout, - "\n\nOS/2 port Copyright (c) 1990, 1991, Raymond Chen, Kai Uwe Rommel\n" - "Version 5 port Copyright (c) 1994-2002, Andreas Kaiser, Ilya Zakharevich\n"); + PerlIO_printf(PIO_stdout, + "\n\nOS/2 port Copyright (c) 1990, 1991, Raymond Chen, Kai Uwe Rommel\n" + "Version 5 port Copyright (c) 1994-2002, Andreas Kaiser, Ilya Zakharevich\n"); #endif #ifdef OEMVS - PerlIO_printf(PIO_stdout, - "MVS (OS390) port by Mortice Kern Systems, 1997-1999\n"); + PerlIO_printf(PIO_stdout, + "MVS (OS390) port by Mortice Kern Systems, 1997-1999\n"); #endif #ifdef __VOS__ - PerlIO_printf(PIO_stdout, - "Stratus OpenVOS port by Paul.Green@stratus.com, 1997-2013\n"); + PerlIO_printf(PIO_stdout, + "Stratus OpenVOS port by Paul.Green@stratus.com, 1997-2013\n"); #endif #ifdef POSIX_BC - PerlIO_printf(PIO_stdout, - "BS2000 (POSIX) port by Start Amadeus GmbH, 1998-1999\n"); -#endif -#ifdef __SYMBIAN32__ - PerlIO_printf(PIO_stdout, - "Symbian port by Nokia, 2004-2005\n"); + PerlIO_printf(PIO_stdout, + "BS2000 (POSIX) port by Start Amadeus GmbH, 1998-1999\n"); #endif #ifdef BINARY_BUILD_NOTICE - BINARY_BUILD_NOTICE; + BINARY_BUILD_NOTICE; #endif - PerlIO_printf(PIO_stdout, - "\n\ + PerlIO_printf(PIO_stdout, + "\n\ Perl may be copied only under the terms of either the Artistic License or the\n\ GNU General Public License, which may be found in the Perl 5 source kit.\n\n\ Complete documentation for Perl, including FAQ lists, should be found on\n\ this system using \"man perl\" or \"perldoc perl\". If you have access to the\n\ -Internet, point your browser at http://www.perl.org/, the Perl Home Page.\n\n"); - my_exit(0); +Internet, point your browser at https://www.perl.org/, the Perl Home Page.\n\n"); + my_exit(0); } /* compliments of Tom Christiansen */ @@ -3924,7 +3904,7 @@ S_init_interp(pTHX) #ifdef MULTIPLICITY # define PERLVAR(prefix,var,type) # define PERLVARA(prefix,var,n,type) -# if defined(PERL_IMPLICIT_CONTEXT) +# if defined(MULTIPLICITY) # define PERLVARI(prefix,var,type,init) aTHX->prefix##var = init; # define PERLVARIC(prefix,var,type,init) aTHX->prefix##var = init; # else @@ -3971,7 +3951,7 @@ S_init_main_stash(pTHX) GvHV(gv) = MUTABLE_HV(SvREFCNT_inc_simple(PL_defstash)); SvREADONLY_on(gv); PL_incgv = gv_HVadd(gv_AVadd(gv_fetchpvs("INC", GV_ADD|GV_NOTQUAL, - SVt_PVAV))); + SVt_PVAV))); SvREFCNT_inc_simple_void(PL_incgv); /* Don't allow it to be freed */ GvMULTI_on(PL_incgv); PL_hintgv = gv_fetchpvs("\010", GV_ADD|GV_NOTQUAL, SVt_PV); /* ^H */ @@ -3994,7 +3974,7 @@ S_init_main_stash(pTHX) CopSTASH_set(&PL_compiling, PL_defstash); PL_debstash = GvHV(gv_fetchpvs("DB::", GV_ADDMULTI, SVt_PVHV)); PL_globalstash = GvHV(gv_fetchpvs("CORE::GLOBAL::", GV_ADDMULTI, - SVt_PVHV)); + SVt_PVHV)); /* We must init $/ before switches are processed. */ sv_setpvs(get_sv("/", GV_ADD), "\n"); } @@ -4010,102 +3990,102 @@ S_open_script(pTHX_ const char *scriptname, bool dosearch, bool *suidscript) PERL_ARGS_ASSERT_OPEN_SCRIPT; if (PL_e_script) { - PL_origfilename = savepvs("-e"); + PL_origfilename = savepvs("-e"); } else { const char *s; UV uv; - /* if find_script() returns, it returns a malloc()-ed value */ - scriptname = PL_origfilename = find_script(scriptname, dosearch, NULL, 1); + /* if find_script() returns, it returns a malloc()-ed value */ + scriptname = PL_origfilename = find_script(scriptname, dosearch, NULL, 1); s = scriptname + strlen(scriptname); - if (strBEGINs(scriptname, "/dev/fd/") + if (strBEGINs(scriptname, "/dev/fd/") && isDIGIT(scriptname[8]) && grok_atoUV(scriptname + 8, &uv, &s) && uv <= PERL_INT_MAX ) { fdscript = (int)uv; - if (*s) { - /* PSz 18 Feb 04 - * Tell apart "normal" usage of fdscript, e.g. - * with bash on FreeBSD: - * perl <( echo '#!perl -DA'; echo 'print "$0\n"') - * from usage in suidperl. - * Does any "normal" usage leave garbage after the number??? - * Is it a mistake to use a similar /dev/fd/ construct for - * suidperl? - */ - *suidscript = TRUE; - /* PSz 20 Feb 04 - * Be supersafe and do some sanity-checks. - * Still, can we be sure we got the right thing? - */ - if (*s != '/') { - Perl_croak(aTHX_ "Wrong syntax (suid) fd script name \"%s\"\n", s); - } - if (! *(s+1)) { - Perl_croak(aTHX_ "Missing (suid) fd script name\n"); - } - scriptname = savepv(s + 1); - Safefree(PL_origfilename); - PL_origfilename = (char *)scriptname; - } - } + if (*s) { + /* PSz 18 Feb 04 + * Tell apart "normal" usage of fdscript, e.g. + * with bash on FreeBSD: + * perl <( echo '#!perl -DA'; echo 'print "$0\n"') + * from usage in suidperl. + * Does any "normal" usage leave garbage after the number??? + * Is it a mistake to use a similar /dev/fd/ construct for + * suidperl? + */ + *suidscript = TRUE; + /* PSz 20 Feb 04 + * Be supersafe and do some sanity-checks. + * Still, can we be sure we got the right thing? + */ + if (*s != '/') { + Perl_croak(aTHX_ "Wrong syntax (suid) fd script name \"%s\"\n", s); + } + if (! *(s+1)) { + Perl_croak(aTHX_ "Missing (suid) fd script name\n"); + } + scriptname = savepv(s + 1); + Safefree(PL_origfilename); + PL_origfilename = (char *)scriptname; + } + } } CopFILE_free(PL_curcop); CopFILE_set(PL_curcop, PL_origfilename); if (*PL_origfilename == '-' && PL_origfilename[1] == '\0') - scriptname = (char *)""; + scriptname = (char *)""; if (fdscript >= 0) { - rsfp = PerlIO_fdopen(fdscript,PERL_SCRIPT_MODE); + rsfp = PerlIO_fdopen(fdscript,PERL_SCRIPT_MODE); } else if (!*scriptname) { - forbid_setid(0, *suidscript); - return NULL; + forbid_setid(0, *suidscript); + return NULL; } else { #ifdef FAKE_BIT_BUCKET - /* This hack allows one not to have /dev/null (or BIT_BUCKET as it - * is called) and still have the "-e" work. (Believe it or not, - * a /dev/null is required for the "-e" to work because source - * filter magic is used to implement it. ) This is *not* a general - * replacement for a /dev/null. What we do here is create a temp - * file (an empty file), open up that as the script, and then - * immediately close and unlink it. Close enough for jazz. */ + /* This hack allows one not to have /dev/null (or BIT_BUCKET as it + * is called) and still have the "-e" work. (Believe it or not, + * a /dev/null is required for the "-e" to work because source + * filter magic is used to implement it. ) This is *not* a general + * replacement for a /dev/null. What we do here is create a temp + * file (an empty file), open up that as the script, and then + * immediately close and unlink it. Close enough for jazz. */ #define FAKE_BIT_BUCKET_PREFIX "/tmp/perlnull-" #define FAKE_BIT_BUCKET_SUFFIX "XXXXXXXX" #define FAKE_BIT_BUCKET_TEMPLATE FAKE_BIT_BUCKET_PREFIX FAKE_BIT_BUCKET_SUFFIX - char tmpname[sizeof(FAKE_BIT_BUCKET_TEMPLATE)] = { - FAKE_BIT_BUCKET_TEMPLATE - }; - const char * const err = "Failed to create a fake bit bucket"; - if (strEQ(scriptname, BIT_BUCKET)) { - int tmpfd = Perl_my_mkstemp_cloexec(tmpname); - if (tmpfd > -1) { - scriptname = tmpname; - close(tmpfd); - } else - Perl_croak(aTHX_ err); - } + char tmpname[sizeof(FAKE_BIT_BUCKET_TEMPLATE)] = { + FAKE_BIT_BUCKET_TEMPLATE + }; + const char * const err = "Failed to create a fake bit bucket"; + if (strEQ(scriptname, BIT_BUCKET)) { + int tmpfd = Perl_my_mkstemp_cloexec(tmpname); + if (tmpfd > -1) { + scriptname = tmpname; + close(tmpfd); + } else + Perl_croak(aTHX_ err); + } #endif - rsfp = PerlIO_open(scriptname,PERL_SCRIPT_MODE); + rsfp = PerlIO_open(scriptname,PERL_SCRIPT_MODE); #ifdef FAKE_BIT_BUCKET if ( strBEGINs(scriptname, FAKE_BIT_BUCKET_PREFIX) - && strlen(scriptname) == sizeof(tmpname) - 1) + && strlen(scriptname) == sizeof(tmpname) - 1) { - unlink(scriptname); - } - scriptname = BIT_BUCKET; + unlink(scriptname); + } + scriptname = BIT_BUCKET; #endif } if (!rsfp) { - /* PSz 16 Sep 03 Keep neat error message */ - if (PL_e_script) - Perl_croak(aTHX_ "Can't open " BIT_BUCKET ": %s\n", Strerror(errno)); - else - Perl_croak(aTHX_ "Can't open perl script \"%s\": %s\n", - CopFILE(PL_curcop), Strerror(errno)); + /* PSz 16 Sep 03 Keep neat error message */ + if (PL_e_script) + Perl_croak(aTHX_ "Can't open " BIT_BUCKET ": %s\n", Strerror(errno)); + else + Perl_croak(aTHX_ "Can't open perl script \"%s\": %s\n", + CopFILE(PL_curcop), Strerror(errno)); } fd = PerlIO_fileno(rsfp); @@ -4149,7 +4129,6 @@ S_validate_suid(pTHX_ PerlIO *rsfp) PERL_ARGS_ASSERT_VALIDATE_SUID; if (my_euid != my_uid || my_egid != my_gid) { /* (suidperl doesn't exist, in fact) */ - dVAR; int fd = PerlIO_fileno(rsfp); Stat_t statbuf; if (fd < 0 || PerlLIO_fstat(fd, &statbuf) < 0) { /* may be either wrapped or real suid */ @@ -4159,10 +4138,10 @@ S_validate_suid(pTHX_ PerlIO *rsfp) || (my_egid != my_gid && my_egid == statbuf.st_gid && statbuf.st_mode & S_ISGID) ) - if (!PL_do_undump) - Perl_croak(aTHX_ "YOU HAVEN'T DISABLED SET-ID SCRIPTS IN THE KERNEL YET!\n\ + if (!PL_do_undump) + Perl_croak(aTHX_ "YOU HAVEN'T DISABLED SET-ID SCRIPTS IN THE KERNEL YET!\n\ FIX YOUR KERNEL, PUT A C WRAPPER AROUND THIS SCRIPT, OR USE -u AND UNDUMP!\n"); - /* not set-id, must be wrapped */ + /* not set-id, must be wrapped */ } } #endif /* SETUID_SCRIPTS_ARE_SECURE_NOW */ @@ -4178,20 +4157,20 @@ S_find_beginning(pTHX_ SV* linestr_sv, PerlIO *rsfp) /* skip forward in input to the real script? */ do { - if ((s = sv_gets(linestr_sv, rsfp, 0)) == NULL) - Perl_croak(aTHX_ "No Perl script found in input\n"); - s2 = s; + if ((s = sv_gets(linestr_sv, rsfp, 0)) == NULL) + Perl_croak(aTHX_ "No Perl script found in input\n"); + s2 = s; } while (!(*s == '#' && s[1] == '!' && ((s = instr(s,"perl")) || (s = instr(s2,"PERL"))))); PerlIO_ungetc(rsfp, '\n'); /* to keep line count right */ while (*s && !(isSPACE (*s) || *s == '#')) s++; s2 = s; while (*s == ' ' || *s == '\t') s++; if (*s++ == '-') { - while (isDIGIT(s2[-1]) || s2[-1] == '-' || s2[-1] == '.' - || s2[-1] == '_') s2--; - if (strBEGINs(s2-4,"perl")) - while ((s = moreswitches(s))) - ; + while (isDIGIT(s2[-1]) || s2[-1] == '-' || s2[-1] == '.' + || s2[-1] == '_') s2--; + if (strBEGINs(s2-4,"perl")) + while ((s = moreswitches(s))) + ; } } @@ -4236,9 +4215,9 @@ Perl_doing_taint(int argc, char *argv[], char *envp[]) * function is to be called at such an early stage. If you are on * a system with PERL_IMPLICIT_SYS but you do have a concept of * "tainted because running with altered effective ids', you'll - * have to add your own checks somewhere in here. The two most - * known samples of 'implicitness' are Win32 and NetWare, neither - * of which has much of concept of 'uids'. */ + * have to add your own checks somewhere in here. The most known + * sample of 'implicitness' is Win32, which doesn't have much of + * concept of 'uids'. */ Uid_t uid = PerlProc_getuid(); Uid_t euid = PerlProc_geteuid(); Gid_t gid = PerlProc_getgid(); @@ -4250,14 +4229,14 @@ Perl_doing_taint(int argc, char *argv[], char *envp[]) euid |= egid << 16; #endif if (uid && (euid != uid || egid != gid)) - return 1; + return 1; #endif /* !PERL_IMPLICIT_SYS */ /* This is a really primitive check; environment gets ignored only * if -T are the first chars together; otherwise one gets * "Too late" message. */ if ( argc > 1 && argv[1][0] == '-' && isALPHA_FOLD_EQ(argv[1][1], 't')) - return 1; + return 1; return 0; } @@ -4273,8 +4252,8 @@ S_forbid_setid(pTHX_ const char flag, const bool suidscript) /* g */ PERL_UNUSED_CONTEXT; if (flag) { - string[1] = flag; - message = string; + string[1] = flag; + message = string; } #ifdef SETUID_SCRIPTS_ARE_SECURE_NOW @@ -4291,16 +4270,16 @@ void Perl_init_dbargs(pTHX) { AV *const args = PL_dbargs = GvAV(gv_AVadd((gv_fetchpvs("DB::args", - GV_ADDMULTI, - SVt_PVAV)))); + GV_ADDMULTI, + SVt_PVAV)))); if (AvREAL(args)) { - /* Someone has already created it. - It might have entries, and if we just turn off AvREAL(), they will - "leak" until global destruction. */ - av_clear(args); - if (SvTIED_mg((const SV *)args, PERL_MAGIC_tied)) - Perl_croak(aTHX_ "Cannot set tied @DB::args"); + /* Someone has already created it. + It might have entries, and if we just turn off AvREAL(), they will + "leak" until global destruction. */ + av_clear(args); + if (SvTIED_mg((const SV *)args, PERL_MAGIC_tied)) + Perl_croak(aTHX_ "Cannot set tied @DB::args"); } AvREIFY_only(PL_dbargs); } @@ -4315,31 +4294,31 @@ Perl_init_debugger(pTHX) Perl_init_dbargs(aTHX); PL_DBgv = MUTABLE_GV( - SvREFCNT_inc(gv_fetchpvs("DB::DB", GV_ADDMULTI, SVt_PVGV)) + SvREFCNT_inc(gv_fetchpvs("DB::DB", GV_ADDMULTI, SVt_PVGV)) ); PL_DBline = MUTABLE_GV( - SvREFCNT_inc(gv_fetchpvs("DB::dbline", GV_ADDMULTI, SVt_PVAV)) + SvREFCNT_inc(gv_fetchpvs("DB::dbline", GV_ADDMULTI, SVt_PVAV)) ); PL_DBsub = MUTABLE_GV(SvREFCNT_inc( - gv_HVadd(gv_fetchpvs("DB::sub", GV_ADDMULTI, SVt_PVHV)) + gv_HVadd(gv_fetchpvs("DB::sub", GV_ADDMULTI, SVt_PVHV)) )); PL_DBsingle = GvSV((gv_fetchpvs("DB::single", GV_ADDMULTI, SVt_PV))); if (!SvIOK(PL_DBsingle)) - sv_setiv(PL_DBsingle, 0); + sv_setiv(PL_DBsingle, 0); mg = sv_magicext(PL_DBsingle, NULL, PERL_MAGIC_debugvar, &PL_vtbl_debugvar, 0, 0); mg->mg_private = DBVARMG_SINGLE; SvSETMAGIC(PL_DBsingle); PL_DBtrace = GvSV((gv_fetchpvs("DB::trace", GV_ADDMULTI, SVt_PV))); if (!SvIOK(PL_DBtrace)) - sv_setiv(PL_DBtrace, 0); + sv_setiv(PL_DBtrace, 0); mg = sv_magicext(PL_DBtrace, NULL, PERL_MAGIC_debugvar, &PL_vtbl_debugvar, 0, 0); mg->mg_private = DBVARMG_TRACE; SvSETMAGIC(PL_DBtrace); PL_DBsignal = GvSV((gv_fetchpvs("DB::signal", GV_ADDMULTI, SVt_PV))); if (!SvIOK(PL_DBsignal)) - sv_setiv(PL_DBsignal, 0); + sv_setiv(PL_DBsignal, 0); mg = sv_magicext(PL_DBsignal, NULL, PERL_MAGIC_debugvar, &PL_vtbl_debugvar, 0, 0); mg->mg_private = DBVARMG_SIGNAL; SvSETMAGIC(PL_DBsignal); @@ -4363,7 +4342,7 @@ Perl_init_stacks(pTHX) /* start with 128-item stack and 8K cxstack */ PL_curstackinfo = new_stackinfo(REASONABLE(128), - REASONABLE(8192/sizeof(PERL_CONTEXT) - 1)); + REASONABLE(8192/sizeof(PERL_CONTEXT) - 1)); PL_curstackinfo->si_type = PERLSI_MAIN; #if defined DEBUGGING && !defined DEBUGGING_RE_ONLY PL_curstackinfo->si_stack_hwm = 0; @@ -4375,26 +4354,26 @@ Perl_init_stacks(pTHX) PL_stack_sp = PL_stack_base; PL_stack_max = PL_stack_base + AvMAX(PL_curstack); - Newx(PL_tmps_stack,REASONABLE(128),SV*); + Newxz(PL_tmps_stack,REASONABLE(128),SV*); PL_tmps_floor = -1; PL_tmps_ix = -1; PL_tmps_max = REASONABLE(128); - Newx(PL_markstack,REASONABLE(32),I32); + Newxz(PL_markstack,REASONABLE(32),I32); PL_markstack_ptr = PL_markstack; PL_markstack_max = PL_markstack + REASONABLE(32); SET_MARK_OFFSET; - Newx(PL_scopestack,REASONABLE(32),I32); + Newxz(PL_scopestack,REASONABLE(32),I32); #ifdef DEBUGGING - Newx(PL_scopestack_name,REASONABLE(32),const char*); + Newxz(PL_scopestack_name,REASONABLE(32),const char*); #endif PL_scopestack_ix = 0; PL_scopestack_max = REASONABLE(32); size = REASONABLE_but_at_least(128,SS_MAXPUSH); - Newx(PL_savestack, size, ANY); + Newxz(PL_savestack, size, ANY); PL_savestack_ix = 0; /*PL_savestack_max lies: it always has SS_MAXPUSH more than it claims */ PL_savestack_max = size - SS_MAXPUSH; @@ -4406,13 +4385,13 @@ STATIC void S_nuke_stacks(pTHX) { while (PL_curstackinfo->si_next) - PL_curstackinfo = PL_curstackinfo->si_next; + PL_curstackinfo = PL_curstackinfo->si_next; while (PL_curstackinfo) { - PERL_SI *p = PL_curstackinfo->si_prev; - /* curstackinfo->si_stack got nuked by sv_free_arenas() */ - Safefree(PL_curstackinfo->si_cxstack); - Safefree(PL_curstackinfo); - PL_curstackinfo = p; + PERL_SI *p = PL_curstackinfo->si_prev; + /* curstackinfo->si_stack got nuked by sv_free_arenas() */ + Safefree(PL_curstackinfo->si_cxstack); + Safefree(PL_curstackinfo); + PL_curstackinfo = p; } Safefree(PL_tmps_stack); Safefree(PL_markstack); @@ -4433,25 +4412,25 @@ Perl_populate_isa(pTHX_ const char *name, STRLEN len, ...) PERL_ARGS_ASSERT_POPULATE_ISA; if(AvFILLp(isa) != -1) - return; + return; /* NOTE: No support for tied ISA */ va_start(args, len); do { - const char *const parent = va_arg(args, const char*); - size_t parent_len; - - if (!parent) - break; - parent_len = va_arg(args, size_t); - - /* Arguments are supplied with a trailing :: */ - assert(parent_len > 2); - assert(parent[parent_len - 1] == ':'); - assert(parent[parent_len - 2] == ':'); - av_push(isa, newSVpvn(parent, parent_len - 2)); - (void) gv_fetchpvn(parent, parent_len, GV_ADD, SVt_PVGV); + const char *const parent = va_arg(args, const char*); + size_t parent_len; + + if (!parent) + break; + parent_len = va_arg(args, size_t); + + /* Arguments are supplied with a trailing :: */ + assert(parent_len > 2); + assert(parent[parent_len - 1] == ':'); + assert(parent[parent_len - 2] == ':'); + av_push(isa, newSVpvn(parent, parent_len - 2)); + (void) gv_fetchpvn(parent, parent_len, GV_ADD, SVt_PVGV); } while (1); va_end(args); } @@ -4479,12 +4458,12 @@ S_init_predump_symbols(pTHX) So a compromise is to set up the correct @IO::File::ISA, so that code that does C; will still work. */ - + Perl_populate_isa(aTHX_ STR_WITH_LEN("IO::File::ISA"), - STR_WITH_LEN("IO::Handle::"), - STR_WITH_LEN("IO::Seekable::"), - STR_WITH_LEN("Exporter::"), - NULL); + STR_WITH_LEN("IO::Handle::"), + STR_WITH_LEN("IO::Seekable::"), + STR_WITH_LEN("Exporter::"), + NULL); PL_stdingv = gv_fetchpvs("STDIN", GV_ADD|GV_NOTQUAL, SVt_PVIO); GvMULTI_on(PL_stdingv); @@ -4524,37 +4503,37 @@ Perl_init_argv_symbols(pTHX_ int argc, char **argv) argc--,argv++; /* skip name of script */ if (PL_doswitches) { - for (; argc > 0 && **argv == '-'; argc--,argv++) { - char *s; - if (!argv[0][1]) - break; - if (argv[0][1] == '-' && !argv[0][2]) { - argc--,argv++; - break; - } - if ((s = strchr(argv[0], '='))) { - const char *const start_name = argv[0] + 1; - sv_setpv(GvSV(gv_fetchpvn_flags(start_name, s - start_name, - TRUE, SVt_PV)), s + 1); - } - else - sv_setiv(GvSV(gv_fetchpv(argv[0]+1, GV_ADD, SVt_PV)),1); - } + for (; argc > 0 && **argv == '-'; argc--,argv++) { + char *s; + if (!argv[0][1]) + break; + if (argv[0][1] == '-' && !argv[0][2]) { + argc--,argv++; + break; + } + if ((s = strchr(argv[0], '='))) { + const char *const start_name = argv[0] + 1; + sv_setpv(GvSV(gv_fetchpvn_flags(start_name, s - start_name, + TRUE, SVt_PV)), s + 1); + } + else + sv_setiv(GvSV(gv_fetchpv(argv[0]+1, GV_ADD, SVt_PV)),1); + } } if ((PL_argvgv = gv_fetchpvs("ARGV", GV_ADD|GV_NOTQUAL, SVt_PVAV))) { - SvREFCNT_inc_simple_void_NN(PL_argvgv); - GvMULTI_on(PL_argvgv); - av_clear(GvAVn(PL_argvgv)); - for (; argc > 0; argc--,argv++) { - SV * const sv = newSVpv(argv[0],0); - av_push(GvAV(PL_argvgv),sv); - if (!(PL_unicode & PERL_UNICODE_LOCALE_FLAG) || PL_utf8locale) { - if (PL_unicode & PERL_UNICODE_ARGV_FLAG) - SvUTF8_on(sv); - } - if (PL_unicode & PERL_UNICODE_WIDESYSCALLS_FLAG) /* Sarathy? */ - (void)sv_utf8_decode(sv); - } + SvREFCNT_inc_simple_void_NN(PL_argvgv); + GvMULTI_on(PL_argvgv); + av_clear(GvAVn(PL_argvgv)); + for (; argc > 0; argc--,argv++) { + SV * const sv = newSVpv(argv[0],0); + av_push(GvAV(PL_argvgv),sv); + if (!(PL_unicode & PERL_UNICODE_LOCALE_FLAG) || PL_utf8locale) { + if (PL_unicode & PERL_UNICODE_ARGV_FLAG) + SvUTF8_on(sv); + } + if (PL_unicode & PERL_UNICODE_WIDESYSCALLS_FLAG) /* Sarathy? */ + (void)sv_utf8_decode(sv); + } } if (PL_inplace && (!PL_argvgv || AvFILL(GvAV(PL_argvgv)) == -1)) @@ -4566,9 +4545,6 @@ Perl_init_argv_symbols(pTHX_ int argc, char **argv) STATIC void S_init_postdump_symbols(pTHX_ int argc, char **argv, char **env) { -#ifdef USE_ITHREADS - dVAR; -#endif GV* tmpgv; PERL_ARGS_ASSERT_INIT_POSTDUMP_SYMBOLS; @@ -4584,52 +4560,79 @@ S_init_postdump_symbols(pTHX_ int argc, char **argv, char **env) init_argv_symbols(argc,argv); if ((tmpgv = gv_fetchpvs("0", GV_ADD|GV_NOTQUAL, SVt_PV))) { - sv_setpv(GvSV(tmpgv),PL_origfilename); + sv_setpv(GvSV(tmpgv),PL_origfilename); } if ((PL_envgv = gv_fetchpvs("ENV", GV_ADD|GV_NOTQUAL, SVt_PVHV))) { - HV *hv; - bool env_is_not_environ; - SvREFCNT_inc_simple_void_NN(PL_envgv); - GvMULTI_on(PL_envgv); - hv = GvHVn(PL_envgv); - hv_magic(hv, NULL, PERL_MAGIC_env); + HV *hv; + bool env_is_not_environ; + SvREFCNT_inc_simple_void_NN(PL_envgv); + GvMULTI_on(PL_envgv); + hv = GvHVn(PL_envgv); + hv_magic(hv, NULL, PERL_MAGIC_env); #ifndef PERL_MICRO #ifdef USE_ENVIRON_ARRAY - /* Note that if the supplied env parameter is actually a copy - of the global environ then it may now point to free'd memory - if the environment has been modified since. To avoid this - problem we treat env==NULL as meaning 'use the default' - */ - if (!env) - env = environ; - env_is_not_environ = env != environ; - if (env_is_not_environ + /* Note that if the supplied env parameter is actually a copy + of the global environ then it may now point to free'd memory + if the environment has been modified since. To avoid this + problem we treat env==NULL as meaning 'use the default' + */ + if (!env) + env = environ; + env_is_not_environ = env != environ; + if (env_is_not_environ # ifdef USE_ITHREADS - && PL_curinterp == aTHX + && PL_curinterp == aTHX # endif - ) - { - environ[0] = NULL; - } - if (env) { - char *s, *old_var; - STRLEN nlen; - SV *sv; + ) + { + environ[0] = NULL; + } + if (env) { HV *dups = newHV(); + char **env_copy = env; + size_t count; - for (; *env; env++) { - old_var = *env; + while (*env_copy) { + ++env_copy; + } - if (!(s = strchr(old_var,'=')) || s == old_var) - continue; - nlen = s - old_var; + count = env_copy - env; + + if (count > PERL_HASH_DEFAULT_HvMAX) { + /* This might be an over-estimate (due to dups and other skips), + * but if so, likely it won't hurt much. + * A straw poll of login environments I have suggests that + * between 23 and 52 environment variables are typical (and no + * dups). As the default hash size is 8 buckets, expanding in + * advance saves between 2 and 3 splits in the loop below. */ + hv_ksplit(hv, count); + } + + + for (; *env; env++) { + char *old_var = *env; + char *s = strchr(old_var, '='); + STRLEN nlen; + SV *sv; + + if (!s || s == old_var) + continue; + + nlen = s - old_var; + + /* It's tempting to think that this hv_exists/hv_store pair should + * be replaced with a single hv_fetch with the LVALUE flag true. + * However, hv has magic, and if you follow the code in hv_common + * then for LVALUE fetch it recurses once, whereas exists and + * store do not recurse. Hence internally there would be no + * difference in the complexity of the code run. Moreover, all + * calls pass through "is there magic?" special case code, which + * in turn has its own #ifdef ENV_IS_CASELESS special case special + * case. Hence this code shouldn't change, as doing so won't give + * any meaningful speedup, and might well add bugs. */ -#if defined(MSDOS) && !defined(DJGPP) - *s = '\0'; - (void)strupr(old_var); - *s = '='; -#endif if (hv_exists(hv, old_var, nlen)) { + SV **dup; const char *name = savepvn(old_var, nlen); /* make sure we use the same value as getenv(), otherwise code that @@ -4638,21 +4641,21 @@ S_init_postdump_symbols(pTHX_ int argc, char **argv, char **env) sv = newSVpv(PerlEnv_getenv(name), 0); /* keep a count of the dups of this name so we can de-dup environ later */ - if (hv_exists(dups, name, nlen)) - ++SvIVX(*hv_fetch(dups, name, nlen, 0)); - else - (void)hv_store(dups, name, nlen, newSViv(1), 0); + dup = hv_fetch(dups, name, nlen, TRUE); + if (*dup) { + sv_inc(*dup); + } Safefree(name); } else { sv = newSVpv(s+1, 0); } - (void)hv_store(hv, old_var, nlen, sv, 0); - if (env_is_not_environ) - mg_set(sv); - } - if (HvKEYS(dups)) { + (void)hv_store(hv, old_var, nlen, sv, 0); + if (env_is_not_environ) + mg_set(sv); + } + if (HvTOTALKEYS(dups)) { /* environ has some duplicate definitions, remove them */ HE *entry; hv_iterinit(dups); @@ -4702,38 +4705,38 @@ S_init_perllib(pTHX) if (!TAINTING_get) { #ifndef VMS - perl5lib = PerlEnv_getenv("PERL5LIB"); + perl5lib = PerlEnv_getenv("PERL5LIB"); /* * It isn't possible to delete an environment variable with * PERL_USE_SAFE_PUTENV set unless unsetenv() is also available, so in that * case we treat PERL5LIB as undefined if it has a zero-length value. */ #if defined(PERL_USE_SAFE_PUTENV) && ! defined(HAS_UNSETENV) - if (perl5lib && *perl5lib != '\0') + if (perl5lib && *perl5lib != '\0') #else - if (perl5lib) + if (perl5lib) #endif - incpush_use_sep(perl5lib, 0, INCPUSH_ADD_SUB_DIRS); - else { - s = PerlEnv_getenv("PERLLIB"); - if (s) - incpush_use_sep(s, 0, 0); - } + incpush_use_sep(perl5lib, 0, INCPUSH_ADD_SUB_DIRS); + else { + s = PerlEnv_getenv("PERLLIB"); + if (s) + incpush_use_sep(s, 0, 0); + } #else /* VMS */ - /* Treat PERL5?LIB as a possible search list logical name -- the - * "natural" VMS idiom for a Unix path string. We allow each - * element to be a set of |-separated directories for compatibility. - */ - char buf[256]; - int idx = 0; - if (vmstrnenv("PERL5LIB",buf,0,NULL,0)) - do { - incpush_use_sep(buf, 0, INCPUSH_ADD_SUB_DIRS); - } while (vmstrnenv("PERL5LIB",buf,++idx,NULL,0)); - else { - while (vmstrnenv("PERLLIB",buf,idx++,NULL,0)) - incpush_use_sep(buf, 0, 0); - } + /* Treat PERL5?LIB as a possible search list logical name -- the + * "natural" VMS idiom for a Unix path string. We allow each + * element to be a set of |-separated directories for compatibility. + */ + char buf[256]; + int idx = 0; + if (vmstrnenv("PERL5LIB",buf,0,NULL,0)) + do { + incpush_use_sep(buf, 0, INCPUSH_ADD_SUB_DIRS); + } while (vmstrnenv("PERL5LIB",buf,++idx,NULL,0)); + else { + while (vmstrnenv("PERLLIB",buf,idx++,NULL,0)) + incpush_use_sep(buf, 0, 0); + } #endif /* VMS */ } @@ -4770,7 +4773,7 @@ S_init_perllib(pTHX) } } -#if defined(DOSISH) || defined(__SYMBIAN32__) +#if defined(DOSISH) # define PERLLIB_SEP ';' #elif defined(__VMS) # define PERLLIB_SEP PL_perllib_sep @@ -4793,12 +4796,12 @@ S_incpush_if_exists(pTHX_ AV *const av, SV *dir, SV *const stem) PERL_ARGS_ASSERT_INCPUSH_IF_EXISTS; if (PerlLIO_stat(SvPVX_const(dir), &tmpstatbuf) >= 0 && - S_ISDIR(tmpstatbuf.st_mode)) { - av_push(av, dir); - dir = newSVsv(stem); + S_ISDIR(tmpstatbuf.st_mode)) { + av_push(av, dir); + dir = newSVsv(stem); } else { - /* Truncate dir back to stem. */ - SvCUR_set(dir, SvCUR(stem)); + /* Truncate dir back to stem. */ + SvCUR_set(dir, SvCUR(stem)); } return dir; } @@ -4822,120 +4825,120 @@ S_mayberelocate(pTHX_ const char *const dir, STRLEN len, U32 flags) #ifdef VMS { - char *unix; - - if ((unix = tounixspec_ts(SvPV(libdir,len),NULL)) != NULL) { - len = strlen(unix); - while (len > 1 && unix[len-1] == '/') len--; /* Cosmetic */ - sv_usepvn(libdir,unix,len); - } - else - PerlIO_printf(Perl_error_log, - "Failed to unixify @INC element \"%s\"\n", - SvPV_nolen_const(libdir)); + char *unix; + + if ((unix = tounixspec_ts(SvPV(libdir,len),NULL)) != NULL) { + len = strlen(unix); + while (len > 1 && unix[len-1] == '/') len--; /* Cosmetic */ + sv_usepvn(libdir,unix,len); + } + else + PerlIO_printf(Perl_error_log, + "Failed to unixify @INC element \"%s\"\n", + SvPV_nolen_const(libdir)); } #endif - /* Do the if() outside the #ifdef to avoid warnings about an unused - parameter. */ - if (canrelocate) { + /* Do the if() outside the #ifdef to avoid warnings about an unused + parameter. */ + if (canrelocate) { #ifdef PERL_RELOCATABLE_INC - /* - * Relocatable include entries are marked with a leading .../ - * - * The algorithm is - * 0: Remove that leading ".../" - * 1: Remove trailing executable name (anything after the last '/') - * from the perl path to give a perl prefix - * Then - * While the @INC element starts "../" and the prefix ends with a real - * directory (ie not . or ..) chop that real directory off the prefix - * and the leading "../" from the @INC element. ie a logical "../" - * cleanup - * Finally concatenate the prefix and the remainder of the @INC element - * The intent is that /usr/local/bin/perl and .../../lib/perl5 - * generates /usr/local/lib/perl5 - */ - const char *libpath = SvPVX(libdir); - STRLEN libpath_len = SvCUR(libdir); - if (memBEGINs(libpath, libpath_len, ".../")) { - /* Game on! */ - SV * const caret_X = get_sv("\030", 0); - /* Going to use the SV just as a scratch buffer holding a C - string: */ - SV *prefix_sv; - char *prefix; - char *lastslash; - - /* $^X is *the* source of taint if tainting is on, hence - SvPOK() won't be true. */ - assert(caret_X); - assert(SvPOKp(caret_X)); - prefix_sv = newSVpvn_flags(SvPVX(caret_X), SvCUR(caret_X), - SvUTF8(caret_X)); - /* Firstly take off the leading .../ - If all else fail we'll do the paths relative to the current - directory. */ - sv_chop(libdir, libpath + 4); - /* Don't use SvPV as we're intentionally bypassing taining, - mortal copies that the mg_get of tainting creates, and - corruption that seems to come via the save stack. - I guess that the save stack isn't correctly set up yet. */ - libpath = SvPVX(libdir); - libpath_len = SvCUR(libdir); - - prefix = SvPVX(prefix_sv); - lastslash = (char *) my_memrchr(prefix, '/', + /* + * Relocatable include entries are marked with a leading .../ + * + * The algorithm is + * 0: Remove that leading ".../" + * 1: Remove trailing executable name (anything after the last '/') + * from the perl path to give a perl prefix + * Then + * While the @INC element starts "../" and the prefix ends with a real + * directory (ie not . or ..) chop that real directory off the prefix + * and the leading "../" from the @INC element. ie a logical "../" + * cleanup + * Finally concatenate the prefix and the remainder of the @INC element + * The intent is that /usr/local/bin/perl and .../../lib/perl5 + * generates /usr/local/lib/perl5 + */ + const char *libpath = SvPVX(libdir); + STRLEN libpath_len = SvCUR(libdir); + if (memBEGINs(libpath, libpath_len, ".../")) { + /* Game on! */ + SV * const caret_X = get_sv("\030", 0); + /* Going to use the SV just as a scratch buffer holding a C + string: */ + SV *prefix_sv; + char *prefix; + char *lastslash; + + /* $^X is *the* source of taint if tainting is on, hence + SvPOK() won't be true. */ + assert(caret_X); + assert(SvPOKp(caret_X)); + prefix_sv = newSVpvn_flags(SvPVX(caret_X), SvCUR(caret_X), + SvUTF8(caret_X)); + /* Firstly take off the leading .../ + If all else fail we'll do the paths relative to the current + directory. */ + sv_chop(libdir, libpath + 4); + /* Don't use SvPV as we're intentionally bypassing taining, + mortal copies that the mg_get of tainting creates, and + corruption that seems to come via the save stack. + I guess that the save stack isn't correctly set up yet. */ + libpath = SvPVX(libdir); + libpath_len = SvCUR(libdir); + + prefix = SvPVX(prefix_sv); + lastslash = (char *) my_memrchr(prefix, '/', SvEND(prefix_sv) - prefix); - /* First time in with the *lastslash = '\0' we just wipe off - the trailing /perl from (say) /usr/foo/bin/perl - */ - if (lastslash) { - SV *tempsv; - while ((*lastslash = '\0'), /* Do that, come what may. */ + /* First time in with the *lastslash = '\0' we just wipe off + the trailing /perl from (say) /usr/foo/bin/perl + */ + if (lastslash) { + SV *tempsv; + while ((*lastslash = '\0'), /* Do that, come what may. */ ( memBEGINs(libpath, libpath_len, "../") - && (lastslash = + && (lastslash = (char *) my_memrchr(prefix, '/', SvEND(prefix_sv) - prefix)))) { - if (lastslash[1] == '\0' - || (lastslash[1] == '.' - && (lastslash[2] == '/' /* ends "/." */ - || (lastslash[2] == '/' - && lastslash[3] == '/' /* or "/.." */ - )))) { - /* Prefix ends "/" or "/." or "/..", any of which - are fishy, so don't do any more logical cleanup. - */ - break; - } - /* Remove leading "../" from path */ - libpath += 3; - libpath_len -= 3; - /* Next iteration round the loop removes the last - directory name from prefix by writing a '\0' in - the while clause. */ - } - /* prefix has been terminated with a '\0' to the correct - length. libpath points somewhere into the libdir SV. - We need to join the 2 with '/' and drop the result into - libdir. */ - tempsv = Perl_newSVpvf(aTHX_ "%s/%s", prefix, libpath); - SvREFCNT_dec(libdir); - /* And this is the new libdir. */ - libdir = tempsv; - if (TAINTING_get && - (PerlProc_getuid() != PerlProc_geteuid() || - PerlProc_getgid() != PerlProc_getegid())) { - /* Need to taint relocated paths if running set ID */ - SvTAINTED_on(libdir); - } - } - SvREFCNT_dec(prefix_sv); - } + if (lastslash[1] == '\0' + || (lastslash[1] == '.' + && (lastslash[2] == '/' /* ends "/." */ + || (lastslash[2] == '/' + && lastslash[3] == '/' /* or "/.." */ + )))) { + /* Prefix ends "/" or "/." or "/..", any of which + are fishy, so don't do any more logical cleanup. + */ + break; + } + /* Remove leading "../" from path */ + libpath += 3; + libpath_len -= 3; + /* Next iteration round the loop removes the last + directory name from prefix by writing a '\0' in + the while clause. */ + } + /* prefix has been terminated with a '\0' to the correct + length. libpath points somewhere into the libdir SV. + We need to join the 2 with '/' and drop the result into + libdir. */ + tempsv = Perl_newSVpvf(aTHX_ "%s/%s", prefix, libpath); + SvREFCNT_dec(libdir); + /* And this is the new libdir. */ + libdir = tempsv; + if (TAINTING_get && + (PerlProc_getuid() != PerlProc_geteuid() || + PerlProc_getgid() != PerlProc_getegid())) { + /* Need to taint relocated paths if running set ID */ + SvTAINTED_on(libdir); + } + } + SvREFCNT_dec(prefix_sv); + } #endif - } + } return libdir; } @@ -4944,12 +4947,12 @@ S_incpush(pTHX_ const char *const dir, STRLEN len, U32 flags) { #ifndef PERL_IS_MINIPERL const U8 using_sub_dirs - = (U8)flags & (INCPUSH_ADD_VERSIONED_SUB_DIRS - |INCPUSH_ADD_ARCHONLY_SUB_DIRS|INCPUSH_ADD_OLD_VERS); + = (U8)flags & (INCPUSH_ADD_VERSIONED_SUB_DIRS + |INCPUSH_ADD_ARCHONLY_SUB_DIRS|INCPUSH_ADD_OLD_VERS); const U8 add_versioned_sub_dirs - = (U8)flags & INCPUSH_ADD_VERSIONED_SUB_DIRS; + = (U8)flags & INCPUSH_ADD_VERSIONED_SUB_DIRS; const U8 add_archonly_sub_dirs - = (U8)flags & INCPUSH_ADD_ARCHONLY_SUB_DIRS; + = (U8)flags & INCPUSH_ADD_ARCHONLY_SUB_DIRS; #ifdef PERL_INC_VERSION_LIST const U8 addoldvers = (U8)flags & INCPUSH_ADD_OLD_VERS; #endif @@ -4964,95 +4967,95 @@ S_incpush(pTHX_ const char *const dir, STRLEN len, U32 flags) /* Could remove this vestigial extra block, if we don't mind a lot of re-indenting diff noise. */ { - SV *const libdir = mayberelocate(dir, len, flags); - /* Change 20189146be79a0596543441fa369c6bf7f85103f, to fix RT#6665, - arranged to unshift #! line -I onto the front of @INC. However, - -I can add version and architecture specific libraries, and they - need to go first. The old code assumed that it was always - pushing. Hence to make it work, need to push the architecture - (etc) libraries onto a temporary array, then "unshift" that onto - the front of @INC. */ + SV *const libdir = mayberelocate(dir, len, flags); + /* Change 20189146be79a0596543441fa369c6bf7f85103f, to fix RT#6665, + arranged to unshift #! line -I onto the front of @INC. However, + -I can add version and architecture specific libraries, and they + need to go first. The old code assumed that it was always + pushing. Hence to make it work, need to push the architecture + (etc) libraries onto a temporary array, then "unshift" that onto + the front of @INC. */ #ifndef PERL_IS_MINIPERL - AV *const av = (using_sub_dirs) ? (unshift ? newAV() : inc) : NULL; - - /* - * BEFORE pushing libdir onto @INC we may first push version- and - * archname-specific sub-directories. - */ - if (using_sub_dirs) { - SV *subdir = newSVsv(libdir); + AV *const av = (using_sub_dirs) ? (unshift ? newAV() : inc) : NULL; + + /* + * BEFORE pushing libdir onto @INC we may first push version- and + * archname-specific sub-directories. + */ + if (using_sub_dirs) { + SV *subdir = newSVsv(libdir); #ifdef PERL_INC_VERSION_LIST - /* Configure terminates PERL_INC_VERSION_LIST with a NULL */ - const char * const incverlist[] = { PERL_INC_VERSION_LIST }; - const char * const *incver; + /* Configure terminates PERL_INC_VERSION_LIST with a NULL */ + const char * const incverlist[] = { PERL_INC_VERSION_LIST }; + const char * const *incver; #endif - if (add_versioned_sub_dirs) { - /* .../version/archname if -d .../version/archname */ - sv_catpvs(subdir, "/" PERL_FS_VERSION "/" ARCHNAME); - subdir = S_incpush_if_exists(aTHX_ av, subdir, libdir); + if (add_versioned_sub_dirs) { + /* .../version/archname if -d .../version/archname */ + sv_catpvs(subdir, "/" PERL_FS_VERSION "/" ARCHNAME); + subdir = S_incpush_if_exists(aTHX_ av, subdir, libdir); - /* .../version if -d .../version */ - sv_catpvs(subdir, "/" PERL_FS_VERSION); - subdir = S_incpush_if_exists(aTHX_ av, subdir, libdir); - } + /* .../version if -d .../version */ + sv_catpvs(subdir, "/" PERL_FS_VERSION); + subdir = S_incpush_if_exists(aTHX_ av, subdir, libdir); + } #ifdef PERL_INC_VERSION_LIST - if (addoldvers) { - for (incver = incverlist; *incver; incver++) { - /* .../xxx if -d .../xxx */ - Perl_sv_catpvf(aTHX_ subdir, "/%s", *incver); - subdir = S_incpush_if_exists(aTHX_ av, subdir, libdir); - } - } + if (addoldvers) { + for (incver = incverlist; *incver; incver++) { + /* .../xxx if -d .../xxx */ + Perl_sv_catpvf(aTHX_ subdir, "/%s", *incver); + subdir = S_incpush_if_exists(aTHX_ av, subdir, libdir); + } + } #endif - if (add_archonly_sub_dirs) { - /* .../archname if -d .../archname */ - sv_catpvs(subdir, "/" ARCHNAME); - subdir = S_incpush_if_exists(aTHX_ av, subdir, libdir); + if (add_archonly_sub_dirs) { + /* .../archname if -d .../archname */ + sv_catpvs(subdir, "/" ARCHNAME); + subdir = S_incpush_if_exists(aTHX_ av, subdir, libdir); - } + } - assert (SvREFCNT(subdir) == 1); - SvREFCNT_dec(subdir); - } + assert (SvREFCNT(subdir) == 1); + SvREFCNT_dec(subdir); + } #endif /* !PERL_IS_MINIPERL */ - /* finally add this lib directory at the end of @INC */ - if (unshift) { + /* finally add this lib directory at the end of @INC */ + if (unshift) { #ifdef PERL_IS_MINIPERL - const Size_t extra = 0; + const Size_t extra = 0; #else - Size_t extra = av_tindex(av) + 1; + Size_t extra = av_count(av); #endif - av_unshift(inc, extra + push_basedir); - if (push_basedir) - av_store(inc, extra, libdir); + av_unshift(inc, extra + push_basedir); + if (push_basedir) + av_store(inc, extra, libdir); #ifndef PERL_IS_MINIPERL - while (extra--) { - /* av owns a reference, av_store() expects to be donated a - reference, and av expects to be sane when it's cleared. - If I wanted to be naughty and wrong, I could peek inside the - implementation of av_clear(), realise that it uses - SvREFCNT_dec() too, so av's array could be a run of NULLs, - and so directly steal from it (with a memcpy() to inc, and - then memset() to NULL them out. But people copy code from the - core expecting it to be best practise, so let's use the API. - Although studious readers will note that I'm not checking any - return codes. */ - av_store(inc, extra, SvREFCNT_inc(*av_fetch(av, extra, FALSE))); - } - SvREFCNT_dec(av); + while (extra--) { + /* av owns a reference, av_store() expects to be donated a + reference, and av expects to be sane when it's cleared. + If I wanted to be naughty and wrong, I could peek inside the + implementation of av_clear(), realise that it uses + SvREFCNT_dec() too, so av's array could be a run of NULLs, + and so directly steal from it (with a memcpy() to inc, and + then memset() to NULL them out. But people copy code from the + core expecting it to be best practise, so let's use the API. + Although studious readers will note that I'm not checking any + return codes. */ + av_store(inc, extra, SvREFCNT_inc(*av_fetch(av, extra, FALSE))); + } + SvREFCNT_dec(av); #endif - } - else if (push_basedir) { - av_push(inc, libdir); - } + } + else if (push_basedir) { + av_push(inc, libdir); + } - if (!push_basedir) { - assert (SvREFCNT(libdir) == 1); - SvREFCNT_dec(libdir); - } + if (!push_basedir) { + assert (SvREFCNT(libdir) == 1); + SvREFCNT_dec(libdir); + } } } @@ -5075,25 +5078,25 @@ S_incpush_use_sep(pTHX_ const char *p, STRLEN len, U32 flags) #ifndef PERL_RELOCATABLE_INCPUSH if (!len) #endif - len = strlen(p); + len = strlen(p); end = p + len; /* Break at all separators */ while ((s = (const char*)memchr(p, PERLLIB_SEP, end - p))) { - if (s == p) { - /* skip any consecutive separators */ + if (s == p) { + /* skip any consecutive separators */ - /* Uncomment the next line for PATH semantics */ - /* But you'll need to write tests */ - /* av_push(GvAVn(PL_incgv), newSVpvs(".")); */ - } else { - incpush(p, (STRLEN)(s - p), flags); - } - p = s + 1; + /* Uncomment the next line for PATH semantics */ + /* But you'll need to write tests */ + /* av_push(GvAVn(PL_incgv), newSVpvs(".")); */ + } else { + incpush(p, (STRLEN)(s - p), flags); + } + p = s + 1; } if (p != end) - incpush(p, (STRLEN)(end - p), flags); + incpush(p, (STRLEN)(end - p), flags); } @@ -5109,73 +5112,73 @@ Perl_call_list(pTHX_ I32 oldscope, AV *paramList) PERL_ARGS_ASSERT_CALL_LIST; - while (av_tindex(paramList) >= 0) { - cv = MUTABLE_CV(av_shift(paramList)); - if (PL_savebegin) { - if (paramList == PL_beginav) { - /* save PL_beginav for compiler */ - Perl_av_create_and_push(aTHX_ &PL_beginav_save, MUTABLE_SV(cv)); - } - else if (paramList == PL_checkav) { - /* save PL_checkav for compiler */ - Perl_av_create_and_push(aTHX_ &PL_checkav_save, MUTABLE_SV(cv)); - } - else if (paramList == PL_unitcheckav) { - /* save PL_unitcheckav for compiler */ - Perl_av_create_and_push(aTHX_ &PL_unitcheckav_save, MUTABLE_SV(cv)); - } - } else { + while (av_count(paramList) > 0) { + cv = MUTABLE_CV(av_shift(paramList)); + if (PL_savebegin) { + if (paramList == PL_beginav) { + /* save PL_beginav for compiler */ + Perl_av_create_and_push(aTHX_ &PL_beginav_save, MUTABLE_SV(cv)); + } + else if (paramList == PL_checkav) { + /* save PL_checkav for compiler */ + Perl_av_create_and_push(aTHX_ &PL_checkav_save, MUTABLE_SV(cv)); + } + else if (paramList == PL_unitcheckav) { + /* save PL_unitcheckav for compiler */ + Perl_av_create_and_push(aTHX_ &PL_unitcheckav_save, MUTABLE_SV(cv)); + } + } else { SAVEFREESV(cv); - } - JMPENV_PUSH(ret); - switch (ret) { - case 0: - CALL_LIST_BODY(cv); - atsv = ERRSV; - (void)SvPV_const(atsv, len); - if (len) { - PL_curcop = &PL_compiling; - CopLINE_set(PL_curcop, oldline); - if (paramList == PL_beginav) - sv_catpvs(atsv, "BEGIN failed--compilation aborted"); - else - Perl_sv_catpvf(aTHX_ atsv, - "%s failed--call queue aborted", - paramList == PL_checkav ? "CHECK" - : paramList == PL_initav ? "INIT" - : paramList == PL_unitcheckav ? "UNITCHECK" - : "END"); - while (PL_scopestack_ix > oldscope) - LEAVE; - JMPENV_POP; - Perl_croak(aTHX_ "%" SVf, SVfARG(atsv)); - } - break; - case 1: - STATUS_ALL_FAILURE; - /* FALLTHROUGH */ - case 2: - /* my_exit() was called */ - while (PL_scopestack_ix > oldscope) - LEAVE; - FREETMPS; - SET_CURSTASH(PL_defstash); - PL_curcop = &PL_compiling; - CopLINE_set(PL_curcop, oldline); - JMPENV_POP; - my_exit_jump(); - NOT_REACHED; /* NOTREACHED */ - case 3: - if (PL_restartop) { - PL_curcop = &PL_compiling; - CopLINE_set(PL_curcop, oldline); - JMPENV_JUMP(3); - } - PerlIO_printf(Perl_error_log, "panic: restartop in call_list\n"); - FREETMPS; - break; - } - JMPENV_POP; + } + JMPENV_PUSH(ret); + switch (ret) { + case 0: + CALL_LIST_BODY(cv); + atsv = ERRSV; + (void)SvPV_const(atsv, len); + if (len) { + PL_curcop = &PL_compiling; + CopLINE_set(PL_curcop, oldline); + if (paramList == PL_beginav) + sv_catpvs(atsv, "BEGIN failed--compilation aborted"); + else + Perl_sv_catpvf(aTHX_ atsv, + "%s failed--call queue aborted", + paramList == PL_checkav ? "CHECK" + : paramList == PL_initav ? "INIT" + : paramList == PL_unitcheckav ? "UNITCHECK" + : "END"); + while (PL_scopestack_ix > oldscope) + LEAVE; + JMPENV_POP; + Perl_croak(aTHX_ "%" SVf, SVfARG(atsv)); + } + break; + case 1: + STATUS_ALL_FAILURE; + /* FALLTHROUGH */ + case 2: + /* my_exit() was called */ + while (PL_scopestack_ix > oldscope) + LEAVE; + FREETMPS; + SET_CURSTASH(PL_defstash); + PL_curcop = &PL_compiling; + CopLINE_set(PL_curcop, oldline); + JMPENV_POP; + my_exit_jump(); + NOT_REACHED; /* NOTREACHED */ + case 3: + if (PL_restartop) { + PL_curcop = &PL_compiling; + CopLINE_set(PL_curcop, oldline); + JMPENV_JUMP(3); + } + PerlIO_printf(Perl_error_log, "panic: restartop in call_list\n"); + FREETMPS; + break; + } + JMPENV_POP; } } @@ -5192,23 +5195,23 @@ void Perl_my_exit(pTHX_ U32 status) { if (PL_exit_flags & PERL_EXIT_ABORT) { - abort(); + abort(); } if (PL_exit_flags & PERL_EXIT_WARN) { - PL_exit_flags |= PERL_EXIT_ABORT; /* Protect against reentrant calls */ - Perl_warn(aTHX_ "Unexpected exit %lu", (unsigned long)status); - PL_exit_flags &= ~PERL_EXIT_ABORT; + PL_exit_flags |= PERL_EXIT_ABORT; /* Protect against reentrant calls */ + Perl_warn(aTHX_ "Unexpected exit %lu", (unsigned long)status); + PL_exit_flags &= ~PERL_EXIT_ABORT; } switch (status) { case 0: - STATUS_ALL_SUCCESS; - break; + STATUS_ALL_SUCCESS; + break; case 1: - STATUS_ALL_FAILURE; - break; + STATUS_ALL_FAILURE; + break; default: - STATUS_EXIT_SET(status); - break; + STATUS_EXIT_SET(status); + break; } my_exit_jump(); } @@ -5229,80 +5232,80 @@ Perl_my_failure_exit(pTHX) /* According to the die_exit.t tests, if errno is non-zero */ /* It should be used for the error status. */ - if (errno == EVMSERR) { - STATUS_NATIVE = vaxc$errno; - } else { + if (errno == EVMSERR) { + STATUS_NATIVE = vaxc$errno; + } else { /* According to die_exit.t tests, if the child_exit code is */ /* also zero, then we need to exit with a code of 255 */ if ((errno != 0) && (errno < 256)) - STATUS_UNIX_EXIT_SET(errno); + STATUS_UNIX_EXIT_SET(errno); else if (STATUS_UNIX < 255) { - STATUS_UNIX_EXIT_SET(255); + STATUS_UNIX_EXIT_SET(255); } - } - - /* The exit code could have been set by $? or vmsish which - * means that it may not have fatal set. So convert - * success/warning codes to fatal with out changing - * the POSIX status code. The severity makes VMS native - * status handling work, while UNIX mode programs use the - * POSIX exit codes. - */ - if ((STATUS_NATIVE & (STS$K_SEVERE|STS$K_ERROR)) == 0) { - STATUS_NATIVE &= STS$M_COND_ID; - STATUS_NATIVE |= STS$K_ERROR | STS$M_INHIB_MSG; + } + + /* The exit code could have been set by $? or vmsish which + * means that it may not have fatal set. So convert + * success/warning codes to fatal with out changing + * the POSIX status code. The severity makes VMS native + * status handling work, while UNIX mode programs use the + * POSIX exit codes. + */ + if ((STATUS_NATIVE & (STS$K_SEVERE|STS$K_ERROR)) == 0) { + STATUS_NATIVE &= STS$M_COND_ID; + STATUS_NATIVE |= STS$K_ERROR | STS$M_INHIB_MSG; } } else { - /* Traditionally Perl on VMS always expects a Fatal Error. */ - if (vaxc$errno & 1) { - - /* So force success status to failure */ - if (STATUS_NATIVE & 1) - STATUS_ALL_FAILURE; - } - else { - if (!vaxc$errno) { - STATUS_UNIX = EINTR; /* In case something cares */ - STATUS_ALL_FAILURE; - } - else { - int severity; - STATUS_NATIVE = vaxc$errno; /* Should already be this */ - - /* Encode the severity code */ - severity = STATUS_NATIVE & STS$M_SEVERITY; - STATUS_UNIX = (severity ? severity : 1) << 8; - - /* Perl expects this to be a fatal error */ - if (severity != STS$K_SEVERE) - STATUS_ALL_FAILURE; - } - } + /* Traditionally Perl on VMS always expects a Fatal Error. */ + if (vaxc$errno & 1) { + + /* So force success status to failure */ + if (STATUS_NATIVE & 1) + STATUS_ALL_FAILURE; + } + else { + if (!vaxc$errno) { + STATUS_UNIX = EINTR; /* In case something cares */ + STATUS_ALL_FAILURE; + } + else { + int severity; + STATUS_NATIVE = vaxc$errno; /* Should already be this */ + + /* Encode the severity code */ + severity = STATUS_NATIVE & STS$M_SEVERITY; + STATUS_UNIX = (severity ? severity : 1) << 8; + + /* Perl expects this to be a fatal error */ + if (severity != STS$K_SEVERE) + STATUS_ALL_FAILURE; + } + } } #else int exitstatus; int eno = errno; if (eno & 255) - STATUS_UNIX_SET(eno); + STATUS_UNIX_SET(eno); else { - exitstatus = STATUS_UNIX >> 8; - if (exitstatus & 255) - STATUS_UNIX_SET(exitstatus); - else - STATUS_UNIX_SET(255); + exitstatus = STATUS_UNIX >> 8; + if (exitstatus & 255) + STATUS_UNIX_SET(exitstatus); + else + STATUS_UNIX_SET(255); } #endif if (PL_exit_flags & PERL_EXIT_ABORT) { - abort(); + abort(); } if (PL_exit_flags & PERL_EXIT_WARN) { - PL_exit_flags |= PERL_EXIT_ABORT; /* Protect against reentrant calls */ - Perl_warn(aTHX_ "Unexpected exit failure %ld", (long)PL_statusvalue); - PL_exit_flags &= ~PERL_EXIT_ABORT; + PL_exit_flags |= PERL_EXIT_ABORT; /* Protect against reentrant calls */ + Perl_warn(aTHX_ "Unexpected exit failure %ld", (long)PL_statusvalue); + PL_exit_flags &= ~PERL_EXIT_ABORT; } my_exit_jump(); } @@ -5311,8 +5314,8 @@ STATIC void S_my_exit_jump(pTHX) { if (PL_e_script) { - SvREFCNT_dec(PL_e_script); - PL_e_script = NULL; + SvREFCNT_dec(PL_e_script); + PL_e_script = NULL; } POPSTACK_TO(PL_mainstack); @@ -5337,8 +5340,8 @@ read_e_script(pTHX_ int idx, SV *buf_sv, int maxlen) nl = (nl) ? nl+1 : e; if (nl-p == 0) { - filter_del(read_e_script); - return 0; + filter_del(read_e_script); + return 0; } sv_catpvn(buf_sv, p, nl-p); sv_chop(PL_e_script, nl); @@ -5350,7 +5353,7 @@ void Perl_xs_boot_epilog(pTHX_ const I32 ax) { if (PL_unitcheckav) - call_list(PL_scopestack_ix, PL_unitcheckav); + call_list(PL_scopestack_ix, PL_unitcheckav); XSRETURN_YES; } diff --git a/gnu/usr.bin/perl/perl.h b/gnu/usr.bin/perl/perl.h index 76f3ba151c6..71b44f00e1e 100644 --- a/gnu/usr.bin/perl/perl.h +++ b/gnu/usr.bin/perl/perl.h @@ -28,14 +28,30 @@ # include "config.h" #endif -/* this is used for functions which take a depth trailing - * argument under debugging */ +/* +=for apidoc_section $debugging +=for apidoc CmnW ||_aDEPTH +Some functions when compiled under DEBUGGING take an extra final argument named +C, indicating the C stack depth. This argument is omitted otherwise. +This macro expands to either S> under DEBUGGING, or to nothing at +all when not under DEBUGGING, reducing the number of C<#ifdef>'s in the code. + +The program is responsible for maintaining the correct value for C. + +=for apidoc CyW ||_pDEPTH +This is used in the prototype declarations for functions that take a L> +final parameter, much like L|perlguts/Background and MULTIPLICITY> +is used in functions that take a thread context initial parameter. + +=cut + */ + #ifdef DEBUGGING -#define _pDEPTH ,U32 depth -#define _aDEPTH ,depth +# define _pDEPTH ,U32 depth +# define _aDEPTH ,depth #else -#define _pDEPTH -#define _aDEPTH +# define _pDEPTH +# define _aDEPTH #endif /* NOTE 1: that with gcc -std=c89 the __STDC_VERSION__ is *not* defined @@ -50,7 +66,7 @@ #endif /* See L for detailed notes on - * PERL_IMPLICIT_CONTEXT and PERL_IMPLICIT_SYS */ + * MULTIPLICITY and PERL_IMPLICIT_SYS */ /* XXX NOTE that from here --> to <-- the same logic is * repeated in makedef.pl, so be certain to update @@ -62,23 +78,15 @@ # endif #endif -#ifdef PERL_GLOBAL_STRUCT_PRIVATE -# ifndef PERL_GLOBAL_STRUCT -# define PERL_GLOBAL_STRUCT -# endif -#endif - -#ifdef PERL_GLOBAL_STRUCT -# ifndef MULTIPLICITY -# define MULTIPLICITY -# endif -#endif - +/* PERL_IMPLICIT_CONTEXT is a legacy synonym for MULTIPLICITY */ #ifdef MULTIPLICITY # ifndef PERL_IMPLICIT_CONTEXT # define PERL_IMPLICIT_CONTEXT # endif #endif +#if defined(PERL_IMPLICIT_CONTEXT) && !defined(MULTIPLICITY) +# define MULTIPLICITY +#endif /* undef WIN32 when building on Cygwin (for libwin32) - gph */ #ifdef __CYGWIN__ @@ -86,43 +94,49 @@ # undef _WIN32 #endif -#if defined(__SYMBIAN32__) || (defined(__VC32__) && defined(WINS)) -# ifndef SYMBIAN -# define SYMBIAN -# endif -#endif - -#ifdef __SYMBIAN32__ -# include "symbian/symbian_proto.h" -#endif - -/* Any stack-challenged places. The limit varies (and often - * is configurable), but using more than a kilobyte of stack - * is usually dubious in these systems. */ -#if defined(__SYMBIAN32__) -/* Symbian: need to work around the SDK features. * - * On WINS: MS VC5 generates calls to _chkstk, * - * if a "large" stack frame is allocated. * - * gcc on MARM does not generate calls like these. */ -# define USE_HEAP_INSTEAD_OF_STACK -#endif - /* Use the reentrant APIs like localtime_r and getpwent_r */ /* Win32 has naturally threadsafe libraries, no need to use any _r variants. * XXX KEEP makedef.pl copy of this code in sync */ -#if defined(USE_ITHREADS) && !defined(USE_REENTRANT_API) && !defined(NETWARE) && !defined(WIN32) +#if defined(USE_ITHREADS) && !defined(USE_REENTRANT_API) && !defined(WIN32) # define USE_REENTRANT_API #endif /* <--- here ends the logic shared by perl.h and makedef.pl */ +/* +=for apidoc_section $directives +=for apidoc AmnUu|void|EXTERN_C +When not compiling using C++, expands to nothing. +Otherwise is used in a declaration of a function to indicate the function +should have external C linkage. This is required for things to work for just +about all functions with external linkage compiled into perl. +Often, you can use C> ... C> blocks +surrounding all your code that you need to have this linkage. + +Example usage: + + EXTERN_C int flock(int fd, int op); + +=for apidoc Amnu||START_EXTERN_C +When not compiling using C++, expands to nothing. +Otherwise begins a section of code in which every function will effectively +have C> applied to it, that is to have external C linkage. The +section is ended by a C>. + +=for apidoc Amnu||END_EXTERN_C +When not compiling using C++, expands to nothing. +Otherwise ends a section of code already begun by a C>. + +=cut +*/ + #undef START_EXTERN_C #undef END_EXTERN_C #undef EXTERN_C #ifdef __cplusplus -# define START_EXTERN_C extern "C" { -# define END_EXTERN_C } # define EXTERN_C extern "C" +# define START_EXTERN_C EXTERN_C { +# define END_EXTERN_C } #else # define START_EXTERN_C # define END_EXTERN_C @@ -141,44 +155,24 @@ # endif #endif -#if defined(PERL_GLOBAL_STRUCT) && !defined(PERL_GET_VARS) -# ifdef PERL_GLOBAL_STRUCT_PRIVATE - EXTERN_C struct perl_vars* Perl_GetVarsPrivate(); -# define PERL_GET_VARS() Perl_GetVarsPrivate() /* see miniperlmain.c */ -# else -# define PERL_GET_VARS() PL_VarsPtr -# endif -#endif - -/* this used to be off by default, now its on, see perlio.h */ -#define PERLIO_FUNCS_CONST +/* +=for apidoc_section $concurrency +=for apidoc AmU|void|dTHXa|PerlInterpreter * a +On threaded perls, set C to C; on unthreaded perls, do nothing -#define pVAR struct perl_vars* my_vars PERL_UNUSED_DECL +=for apidoc AmU|void|dTHXoa|PerlInterpreter * a +Now a synonym for C>. -#ifdef PERL_GLOBAL_STRUCT -# define dVAR pVAR = (struct perl_vars*)PERL_GET_VARS() -#else -# define dVAR dNOOP -#endif +=cut +*/ -#ifdef PERL_IMPLICIT_CONTEXT -# ifndef MULTIPLICITY -# define MULTIPLICITY -# endif +#ifdef MULTIPLICITY # define tTHX PerlInterpreter* # define pTHX tTHX my_perl PERL_UNUSED_DECL # define aTHX my_perl # define aTHXa(a) aTHX = (tTHX)a -# ifdef PERL_GLOBAL_STRUCT -# define dTHXa(a) dVAR; pTHX = (tTHX)a -# else -# define dTHXa(a) pTHX = (tTHX)a -# endif -# ifdef PERL_GLOBAL_STRUCT -# define dTHX dVAR; pTHX = PERL_GET_THX -# else -# define dTHX pTHX = PERL_GET_THX -# endif +# define dTHXa(a) pTHX = (tTHX)a +# define dTHX pTHX = PERL_GET_THX # define pTHX_ pTHX, # define aTHX_ aTHX, # define pTHX_1 2 @@ -211,16 +205,24 @@ * implementation of multiplicity using C++ objects. They have been left * here solely for the sake of XS code which has incorrectly * cargo-culted them. + * + * The only one Devel::PPPort handles is this; list it as deprecated + +=for apidoc_section $concurrency +=for apidoc AmD|void|CPERLscope|void x +Now a no-op. + +=cut */ -#define CPERLscope(x) x -#define CPERLarg void -#define CPERLarg_ -#define _CPERLarg -#define PERL_OBJECT_THIS -#define _PERL_OBJECT_THIS -#define PERL_OBJECT_THIS_ -#define CALL_FPTR(fptr) (*fptr) -#define MEMBER_TO_FPTR(name) name +# define CPERLscope(x) x +# define CPERLarg void +# define CPERLarg_ +# define _CPERLarg +# define PERL_OBJECT_THIS +# define _PERL_OBJECT_THIS +# define PERL_OBJECT_THIS_ +# define CALL_FPTR(fptr) (*fptr) +# define MEMBER_TO_FPTR(name) name #endif /* !PERL_CORE */ #define CALLRUNOPS PL_runops @@ -286,10 +288,10 @@ RX_ENGINE(rx)->qr_package(aTHX_ (rx)) #if defined(USE_ITHREADS) -#define CALLREGDUPE(prog,param) \ +# define CALLREGDUPE(prog,param) \ Perl_re_dup(aTHX_ (prog),(param)) -#define CALLREGDUPE_PVT(prog,param) \ +# define CALLREGDUPE_PVT(prog,param) \ (prog ? RX_ENGINE(prog)->dupe(aTHX_ (prog),(param)) \ : (REGEXP *)NULL) #endif @@ -299,6 +301,19 @@ # define PERL_IS_GCC 1 #endif +#define PERL_GCC_VERSION_GE(major,minor,patch) \ + (((100000 * __GNUC__) + (1000 * __GNUC_MINOR__) + __GNUC_PATCHLEVEL__) \ + >= ((100000 * (major)) + (1000 * (minor)) + (patch))) +#define PERL_GCC_VERSION_GT(major,minor,patch) \ + (((100000 * __GNUC__) + (1000 * __GNUC_MINOR__) + __GNUC_PATCHLEVEL__) \ + > ((100000 * (major)) + (1000 * (minor)) + (patch))) +#define PERL_GCC_VERSION_LE(major,minor,patch) \ + (((100000 * __GNUC__) + (1000 * __GNUC_MINOR__) + __GNUC_PATCHLEVEL__) \ + <= ((100000 * (major)) + (1000 * (minor)) + (patch))) +#define PERL_GCC_VERSION_LT(major,minor,patch) \ + (((100000 * __GNUC__) + (1000 * __GNUC_MINOR__) + __GNUC_PATCHLEVEL__) \ + < ((100000 * (major)) + (1000 * (minor)) + (patch))) + /* In case Configure was not used (we are using a "canned config" * such as Win32, or a cross-compilation setup, for example) try going * by the gcc major and minor versions. One useful URL is @@ -314,42 +329,42 @@ */ #ifndef PERL_MICRO -#if defined __GNUC__ && !defined(__INTEL_COMPILER) -# if __GNUC__ == 3 && __GNUC_MINOR__ >= 1 || __GNUC__ > 3 /* 3.1 -> */ -# define HASATTRIBUTE_DEPRECATED -# endif -# if __GNUC__ >= 3 /* 3.0 -> */ /* XXX Verify this version */ -# define HASATTRIBUTE_FORMAT -# if defined __MINGW32__ -# define PRINTF_FORMAT_NULL_OK +# if defined __GNUC__ && !defined(__INTEL_COMPILER) +# if PERL_GCC_VERSION_GE(3,1,0) +# define HASATTRIBUTE_DEPRECATED +# endif +# if PERL_GCC_VERSION_GE(3,0,0) /* XXX Verify this version */ +# define HASATTRIBUTE_FORMAT +# if defined __MINGW32__ +# define PRINTF_FORMAT_NULL_OK +# endif +# endif +# if PERL_GCC_VERSION_GE(3,0,0) +# define HASATTRIBUTE_MALLOC +# endif +# if PERL_GCC_VERSION_GE(3,3,0) +# define HASATTRIBUTE_NONNULL +# endif +# if PERL_GCC_VERSION_GE(2,5,0) +# define HASATTRIBUTE_NORETURN +# endif +# if PERL_GCC_VERSION_GE(3,0,0) +# define HASATTRIBUTE_PURE +# endif +# if PERL_GCC_VERSION_GE(3,4,0) +# define HASATTRIBUTE_UNUSED +# endif +# if __GNUC__ == 3 && __GNUC_MINOR__ == 3 && !defined(__cplusplus) +# define HASATTRIBUTE_UNUSED /* gcc-3.3, but not g++-3.3. */ +# endif +# if PERL_GCC_VERSION_GE(3,4,0) +# define HASATTRIBUTE_WARN_UNUSED_RESULT +# endif + /* always_inline is buggy in gcc <= 4.6 and causes compilation errors */ +# if PERL_GCC_VERSION_GE(4,7,0) +# define HASATTRIBUTE_ALWAYS_INLINE # endif # endif -# if __GNUC__ >= 3 /* 3.0 -> */ -# define HASATTRIBUTE_MALLOC -# endif -# if __GNUC__ == 3 && __GNUC_MINOR__ >= 3 || __GNUC__ > 3 /* 3.3 -> */ -# define HASATTRIBUTE_NONNULL -# endif -# if __GNUC__ == 2 && __GNUC_MINOR__ >= 5 || __GNUC__ > 2 /* 2.5 -> */ -# define HASATTRIBUTE_NORETURN -# endif -# if __GNUC__ >= 3 /* gcc 3.0 -> */ -# define HASATTRIBUTE_PURE -# endif -# if __GNUC__ == 3 && __GNUC_MINOR__ >= 4 || __GNUC__ > 3 /* 3.4 -> */ -# define HASATTRIBUTE_UNUSED -# endif -# if __GNUC__ == 3 && __GNUC_MINOR__ == 3 && !defined(__cplusplus) -# define HASATTRIBUTE_UNUSED /* gcc-3.3, but not g++-3.3. */ -# endif -# if __GNUC__ == 3 && __GNUC_MINOR__ >= 4 || __GNUC__ > 3 /* 3.4 -> */ -# define HASATTRIBUTE_WARN_UNUSED_RESULT -# endif -/* always_inline is buggy in gcc <= 4.6 and causes compilation errors */ -# if __GNUC__ == 4 && __GNUC_MINOR__ >= 7 || __GNUC__ > 4 /* 4.7 -> */ -# define HASATTRIBUTE_ALWAYS_INLINE -# endif -#endif #endif /* #ifndef PERL_MICRO */ #ifdef HASATTRIBUTE_DEPRECATED @@ -378,7 +393,7 @@ #endif #ifdef HASATTRIBUTE_ALWAYS_INLINE /* always_inline is buggy in gcc <= 4.6 and causes compilation errors */ -# if !defined(PERL_IS_GCC) || (__GNUC__ == 4 && __GNUC_MINOR__ >= 7 || __GNUC__ > 4) +# if !defined(PERL_IS_GCC) || PERL_GCC_VERSION_GE(4,7,0) # define __attribute__always_inline__ __attribute__((always_inline)) # endif #endif @@ -428,7 +443,25 @@ * marking unused variables (they need e.g. a #pragma) and therefore * cpp macros like PERL_UNUSED_DECL cannot work for this purpose, even * if it were PERL_UNUSED_DECL(x), which it cannot be (see above). - * + +=for apidoc_section $directives +=for apidoc AmnU||PERL_UNUSED_DECL +Tells the compiler that the parameter in the function prototype just before it +is not necessarily expected to be used in the function. Not that many +compilers understand this, so this should only be used in cases where +C> can't conveniently be used. + +Example usage: + +=over + + Signal_t + Perl_perly_sighandler(int sig, Siginfo_t *sip PERL_UNUSED_DECL, + void *uap PERL_UNUSED_DECL, bool safe) + +=back + +=cut */ #ifndef PERL_UNUSED_DECL @@ -439,6 +472,24 @@ * for silencing unused variables that are actually used most of the time, * but we cannot quite get rid of, such as "ax" in PPCODE+noargs xsubs, * or variables/arguments that are used only in certain configurations. + +=for apidoc Ams||PERL_UNUSED_ARG|void x +This is used to suppress compiler warnings that a parameter to a function is +not used. This situation can arise, for example, when a parameter is needed +under some configuration conditions, but not others, so that C preprocessor +conditional compilation causes it be used just some times. + +=for apidoc Amns||PERL_UNUSED_CONTEXT +This is used to suppress compiler warnings that the thread context parameter to +a function is not used. This situation can arise, for example, when a +C preprocessor conditional compilation causes it be used just some times. + +=for apidoc Ams||PERL_UNUSED_VAR|void x +This is used to suppress compiler warnings that the variable I is not used. +This situation can arise, for example, when a C preprocessor conditional +compilation causes it be used just some times. + +=cut */ #ifndef PERL_UNUSED_ARG # define PERL_UNUSED_ARG(x) ((void)sizeof(x)) @@ -447,7 +498,7 @@ # define PERL_UNUSED_VAR(x) ((void)sizeof(x)) #endif -#if defined(USE_ITHREADS) || defined(PERL_GLOBAL_STRUCT) +#if defined(USE_ITHREADS) # define PERL_UNUSED_CONTEXT PERL_UNUSED_ARG(my_perl) #else # define PERL_UNUSED_CONTEXT @@ -460,37 +511,46 @@ */ #if defined(PERL_GCC_PEDANTIC) || \ (defined(__GNUC__) && defined(__cplusplus) && \ - ((__GNUC__ < 4) || ((__GNUC__ == 4) && (__GNUC_MINOR__ < 2)))) + (PERL_GCC_VERSION_LT(4,2,0))) # ifndef PERL_GCC_BRACE_GROUPS_FORBIDDEN # define PERL_GCC_BRACE_GROUPS_FORBIDDEN # endif #endif -/* Use PERL_UNUSED_RESULT() to suppress the warnings about unused results - * of function calls, e.g. PERL_UNUSED_RESULT(foo(a, b)). - * - * The main reason for this is that the combination of gcc -Wunused-result - * (part of -Wall) and the __attribute__((warn_unused_result)) cannot - * be silenced with casting to void. This causes trouble when the system - * header files use the attribute. - * - * Use PERL_UNUSED_RESULT sparingly, though, since usually the warning - * is there for a good reason: you might lose success/failure information, - * or leak resources, or changes in resources. - * - * But sometimes you just want to ignore the return value, e.g. on - * codepaths soon ending up in abort, or in "best effort" attempts, - * or in situations where there is no good way to handle failures. - * - * Sometimes PERL_UNUSED_RESULT might not be the most natural way: - * another possibility is that you can capture the return value - * and use PERL_UNUSED_VAR on that. - * - * The __typeof__() is used instead of typeof() since typeof() is not - * available under strict C89, and because of compilers masquerading - * as gcc (clang and icc), we want exactly the gcc extension - * __typeof__ and nothing else. - */ +/* + +=for apidoc Am||PERL_UNUSED_RESULT|void x + +This macro indicates to discard the return value of the function call inside +it, I, + + PERL_UNUSED_RESULT(foo(a, b)) + +The main reason for this is that the combination of C +(part of C<-Wall>) and the C<__attribute__((warn_unused_result))> cannot +be silenced with casting to C. This causes trouble when the system +header files use the attribute. + +Use C sparingly, though, since usually the warning +is there for a good reason: you might lose success/failure information, +or leak resources, or changes in resources. + +But sometimes you just want to ignore the return value, I, on +codepaths soon ending up in abort, or in "best effort" attempts, +or in situations where there is no good way to handle failures. + +Sometimes C might not be the most natural way: +another possibility is that you can capture the return value +and use C> on that. + +=cut + +The __typeof__() is used instead of typeof() since typeof() is not +available under strict C89, and because of compilers masquerading +as gcc (clang and icc), we want exactly the gcc extension +__typeof__ and nothing else. + +*/ #ifndef PERL_UNUSED_RESULT # if defined(__GNUC__) && defined(HASATTRIBUTE_WARN_UNUSED_RESULT) # define PERL_UNUSED_RESULT(v) STMT_START { __typeof__(v) z = (v); (void)sizeof(z); } STMT_END @@ -499,11 +559,6 @@ # endif #endif -#if defined(_MSC_VER) -/* XXX older MSVC versions have a smallish macro buffer */ -#define PERL_SMALL_MACRO_BUFFER -#endif - /* on gcc (and clang), specify that a warning should be temporarily * ignored; e.g. * @@ -527,8 +582,7 @@ * */ -#if defined(__clang__) || defined(__clang) || \ - (defined( __GNUC__) && ((__GNUC__ * 100) + __GNUC_MINOR__) >= 406) +#if defined(__clang__) || defined(__clang) || PERL_GCC_VERSION_GE(4,6,0) # define GCC_DIAG_PRAGMA(x) _Pragma (#x) /* clang has "clang diagnostic" pragmas, but also understands gcc. */ # define GCC_DIAG_IGNORE(x) _Pragma("GCC diagnostic push") \ @@ -557,7 +611,7 @@ #define CLANG_DIAG_IGNORE_STMT(x) CLANG_DIAG_IGNORE(x) NOOP #define CLANG_DIAG_RESTORE_STMT CLANG_DIAG_RESTORE NOOP -#if defined(_MSC_VER) && (_MSC_VER >= 1300) +#if defined(_MSC_VER) # define MSVC_DIAG_IGNORE(x) __pragma(warning(push)) \ __pragma(warning(disable : x)) # define MSVC_DIAG_RESTORE __pragma(warning(pop)) @@ -570,12 +624,24 @@ #define MSVC_DIAG_IGNORE_STMT(x) MSVC_DIAG_IGNORE(x) NOOP #define MSVC_DIAG_RESTORE_STMT MSVC_DIAG_RESTORE NOOP +/* +=for apidoc Amns||NOOP +Do nothing; typically used as a placeholder to replace something that used to +do something. + +=for apidoc Amns||dNOOP +Declare nothing; typically used as a placeholder to replace something that used +to declare something. Works on compilers that require declarations before any +code. + +=cut +*/ #define NOOP /*EMPTY*/(void)0 #define dNOOP struct Perl___notused_struct #ifndef pTHX /* Don't bother defining tTHX ; using it outside - * code guarded by PERL_IMPLICIT_CONTEXT is an error. + * code guarded by MULTIPLICITY is an error. */ # define pTHX void # define pTHX_ @@ -584,7 +650,7 @@ # define aTHXa(a) NOOP # define dTHXa(a) dNOOP # define dTHX dNOOP -# define pTHX_1 1 +# define pTHX_1 1 # define pTHX_2 2 # define pTHX_3 3 # define pTHX_4 4 @@ -596,18 +662,34 @@ # define pTHX_12 12 #endif -#ifndef dVAR +/* +=for apidoc_section $concurrency +=for apidoc AmnU||dVAR +This is now a synonym for dNOOP: declare nothing + +=for apidoc_section $XS +=for apidoc Amns||dMY_CXT_SV +Now a placeholder that declares nothing + +=cut +*/ + +#ifndef PERL_CORE + /* Backwards compatibility macro for XS code. It used to be part of the + * PERL_GLOBAL_STRUCT(_PRIVATE) feature, which no longer exists */ # define dVAR dNOOP -#endif -/* these are only defined for compatibility; should not be used internally */ -#if !defined(pTHXo) && !defined(PERL_CORE) -# define pTHXo pTHX -# define pTHXo_ pTHX_ -# define aTHXo aTHX -# define aTHXo_ aTHX_ -# define dTHXo dTHX -# define dTHXoa(x) dTHXa(x) + /* these are only defined for compatibility; should not be used internally. + * */ +# define dMY_CXT_SV dNOOP +# ifndef pTHXo +# define pTHXo pTHX +# define pTHXo_ pTHX_ +# define aTHXo aTHX +# define aTHXo_ aTHX_ +# define dTHXo dTHX +# define dTHXoa(x) dTHXa(x) +# endif #endif #ifndef pTHXx @@ -622,17 +704,9 @@ * PerlIO_foo() expands to PL_StdIO->pFOO(PL_StdIO, ...). * dTHXs is therefore needed for all functions using PerlIO_foo(). */ #ifdef PERL_IMPLICIT_SYS -# ifdef PERL_GLOBAL_STRUCT_PRIVATE -# define dTHXs dVAR; dTHX -# else # define dTHXs dTHX -# endif #else -# ifdef PERL_GLOBAL_STRUCT_PRIVATE -# define dTHXs dVAR -# else # define dTHXs dNOOP -# endif #endif #if defined(__GNUC__) && !defined(PERL_GCC_BRACE_GROUPS_FORBIDDEN) && !defined(__cplusplus) @@ -642,20 +716,41 @@ #endif /* -=head1 Miscellaneous Functions - +=for apidoc_section $directives =for apidoc AmnUu|void|STMT_START +=for apidoc_item ||STMT_END + +This allows a series of statements in a macro to be used as a single statement, +as in + + if (x) STMT_START { ... } STMT_END else ... + +Note that you can't return a value out of them, which limits their utility. +But see C>. - STMT_START { statements; } STMT_END; +=for apidoc AmnuU|bool|PERL_USE_GCC_BRACE_GROUPS -can be used as a single statement, as in +This C pre-processor value, if defined, indicates that it is permissible to use +the GCC brace groups extension. This extension, of the form - if (x) STMT_START { ... } STMT_END; else ... + ({ statement ... }) -These are often used in macro definitions. Note that you can't return a value -out of them. +turns the block consisting of I into an expression with a +value, unlike plain C language blocks. This can present optimization +possibilities, B you generally need to specify an alternative in case this +ability doesn't exist or has otherwise been forbidden. -=for apidoc AmnUhu|void|STMT_END +Example usage: + +=over + + #ifdef PERL_USE_GCC_BRACE_GROUPS + ... + #else + ... + #endif + +=back =cut @@ -685,7 +780,7 @@ out of them. */ /* define this once if either system, instead of cluttering up the src */ -#if defined(MSDOS) || defined(WIN32) || defined(NETWARE) +#if defined(WIN32) #define DOSISH 1 #endif @@ -735,6 +830,68 @@ out of them. # define TAINT_WARN_get 0 # define TAINT_WARN_set(s) NOOP #else + +/* +=for apidoc_section $tainting +=for apidoc Cm|void|TAINT + +If we aren't in taint checking mode, do nothing; +otherwise indicate to L> and L> that some +unspecified element is tainted. + +=for apidoc Cm|void|TAINT_NOT + +Remove any taintedness previously set by, I, C. + +=for apidoc Cm|void|TAINT_IF|bool c + +If C evaluates to true, call L> to indicate that something is +tainted; otherwise do nothing. + +=for apidoc Cmn|void|TAINT_ENV + +Looks at several components of L|perlvar/%ENV> for taintedness, and +calls L> if any are tainted. The components it searches are +things like C<$PATH>. + +=for apidoc Cm|void|TAINT_PROPER|const char * s + +If no element is tainted, do nothing; +otherwise output a message (containing C) that indicates there is a +tainting violation. If such violations are fatal, it croaks. + +=for apidoc Cm|void|TAINT_set|bool s + +If C is true, L> returns true; +If C is false, L> returns false; + +=for apidoc Cm|bool|TAINT_get + +Returns a boolean as to whether some element is tainted or not. + +=for apidoc Cm|bool|TAINTING_get + +Returns a boolean as to whether taint checking is enabled or not. + +=for apidoc Cm|void|TAINTING_set|bool s + +Turn taint checking mode off/on + +=for apidoc Cm|bool|TAINT_WARN_get + +Returns false if tainting violations are fatal; +Returns true if they're just warnings + +=for apidoc Cm|void|TAINT_WARN_set|bool s + +C being true indicates L> should return that tainting +violations are just warnings + +C being false indicates L> should return that tainting +violations are fatal. + +=cut +*/ /* Set to tainted if we are running under tainting mode */ # define TAINT (PL_tainted = PL_tainting) @@ -745,15 +902,12 @@ out of them. # define TAINT_PROPER(s) if (UNLIKELY(PL_tainting)) { \ taint_proper(NULL, s); \ } -# define TAINT_set(s) (PL_tainted = (s)) +# define TAINT_set(s) (PL_tainted = cBOOL(s)) # define TAINT_get (cBOOL(UNLIKELY(PL_tainted))) /* Is something tainted? */ -# define TAINTING_get (cBOOL(UNLIKELY(PL_tainting))) /* Is taint checking enabled? */ -# define TAINTING_set(s) (PL_tainting = (s)) -# define TAINT_WARN_get (PL_taint_warn) /* FALSE => tainting violations - are fatal - TRUE => they're just - warnings */ -# define TAINT_WARN_set(s) (PL_taint_warn = (s)) +# define TAINTING_get (cBOOL(UNLIKELY(PL_tainting))) +# define TAINTING_set(s) (PL_tainting = cBOOL(s)) +# define TAINT_WARN_get (PL_taint_warn) +# define TAINT_WARN_set(s) (PL_taint_warn = cBOOL(s)) #endif /* flags used internally only within pp_subst and pp_substcont */ @@ -816,16 +970,6 @@ out of them. #include -/* EVC 4 SDK headers includes a bad definition of MB_CUR_MAX in stdlib.h - which is included from stdarg.h. Bad definition not present in SD 2008 - SDK headers. wince.h is not yet included, so we cant fix this from there - since by then MB_CUR_MAX will be defined from stdlib.h. - cewchar.h includes a correct definition of MB_CUR_MAX and it is copied here - since cewchar.h can't be included this early */ -#if defined(UNDER_CE) && (_MSC_VER < 1300) -# define MB_CUR_MAX 1uL -#endif - # ifdef I_WCHAR # include # endif @@ -852,7 +996,7 @@ out of them. # include #endif -#ifdef I_XLOCALE +#ifdef NEED_XLOCALE_H # include #endif @@ -917,6 +1061,12 @@ out of them. # if !defined(NO_LOCALE_TELEPHONE) && defined(LC_TELEPHONE) # define USE_LOCALE_TELEPHONE # endif +# if !defined(NO_LOCALE_SYNTAX) && defined(LC_SYNTAX) +# define USE_LOCALE_SYNTAX +# endif +# if !defined(NO_LOCALE_TOD) && defined(LC_TOD) +# define USE_LOCALE_TOD +# endif /* XXX The next few defines are unfortunately duplicated in makedef.pl, and * changes here MUST also be made there */ @@ -931,7 +1081,7 @@ out of them. * on unthreaded builds */ # elif (defined(USE_ITHREADS) || defined(USE_THREAD_SAFE_LOCALE)) \ && ( defined(HAS_POSIX_2008_LOCALE) \ - || (defined(WIN32) && defined(_MSC_VER) && _MSC_VER >= 1400)) \ + || (defined(WIN32) && defined(_MSC_VER))) \ && ! defined(NO_THREAD_SAFE_LOCALE) # ifndef USE_THREAD_SAFE_LOCALE # define USE_THREAD_SAFE_LOCALE @@ -998,10 +1148,6 @@ extern char **myenviron; # include #endif -#ifdef __SYMBIAN32__ -# undef _SC_ARG_MAX /* Symbian has _SC_ARG_MAX but no sysconf() */ -#endif - #if defined(HAS_SYSCALL) && !defined(HAS_SYSCALL_PROTO) EXTERN_C int syscall(int, ...); #endif @@ -1010,9 +1156,33 @@ EXTERN_C int syscall(int, ...); EXTERN_C int usleep(unsigned int); #endif -/* macros for correct constant construction. These are in C99 +/* Macros for correct constant construction. These are in C99 * (so they will not be available in strict C89 mode), but they are nice, so - * let's define them if necessary. */ + * let's define them if necessary. +=for apidoc_section $integer +=for apidoc Am|I16|INT16_C|number +=for apidoc_item |I32|INT32_C|number +=for apidoc_item |I64|INT64_C|number + +Returns a token the C compiler recognizes for the constant C of the +corresponding integer type on the machine. + +If the machine does not have a 64-bit type, C is undefined. +Use C> to get the largest type available on the platform. + +=for apidoc Am|U16|UINT16_C|number +=for apidoc_item |U32|UINT32_C|number +=for apidoc_item |U64|UINT64_C|number + +Returns a token the C compiler recognizes for the constant C of the +corresponding unsigned integer type on the machine. + +If the machine does not have a 64-bit type, C is undefined. +Use C> to get the largest type available on the platform. + + +=cut +*/ #ifndef UINT16_C # if INTSIZE >= 2 # define UINT16_C(x) ((U16_TYPE)x##U) @@ -1078,6 +1248,33 @@ EXTERN_C int usleep(unsigned int); # define UINT64_C(c) PeRl_UINT64_C(c) # endif +/* +=for apidoc_section $integer +=for apidoc Am||INTMAX_C|number +Returns a token the C compiler recognizes for the constant C of the +widest integer type on the machine. For example, if the machine has Cs, C would yield + + -1LL + +See also, for example, C>. + +Use L to declare variables of the maximum usable size on this platform. + +=for apidoc Am||UINTMAX_C|number +Returns a token the C compiler recognizes for the constant C of the +widest unsigned integer type on the machine. For example, if the machine has +Cs, C would yield + + 1UL + +See also, for example, C>. + +Use L to declare variables of the maximum usable size on this platform. + +=cut +*/ + # ifndef I_STDINT typedef I64TYPE PERL_INTMAX_T; typedef U64TYPE PERL_UINTMAX_T; @@ -1130,12 +1327,6 @@ EXTERN_C int usleep(unsigned int); (((U64)(x) & UINT64_C(0xff00000000000000)) >> 56) )) # endif -/* The old value was hard coded at 1008. (4096-16) seems to be a bit faster, - at least on FreeBSD. YMMV, so experiment. */ -#ifndef PERL_ARENA_SIZE -#define PERL_ARENA_SIZE 4080 -#endif - /* Maximum level of recursion */ #ifndef PERL_SUB_DEPTH_WARN #define PERL_SUB_DEPTH_WARN 100 @@ -1175,7 +1366,7 @@ EXTERN_C int usleep(unsigned int); #define PERL_USES_PL_PIDSTATUS #endif -#if !defined(OS2) && !defined(WIN32) && !defined(DJGPP) && !defined(__SYMBIAN32__) +#if !defined(OS2) && !defined(WIN32) #define PERL_DEFAULT_DO_EXEC3_IMPLEMENTATION #endif @@ -1220,9 +1411,7 @@ EXTERN_C int usleep(unsigned int); # define Ptrdiff_t SSize_t #endif -#ifndef __SYMBIAN32__ # include -#endif /* This comes after so we don't try to change the standard * library prototypes; we'll use our own in proto.h instead. */ @@ -1244,20 +1433,20 @@ EXTERN_C int usleep(unsigned int); # define saferealloc Perl_realloc # define safefree Perl_mfree # define CHECK_MALLOC_TOO_LATE_FOR_(code) STMT_START { \ - if (!TAINTING_get && MallocCfg_ptr[MallocCfg_cfg_env_read]) \ - code; \ + if (!TAINTING_get && MallocCfg_ptr[MallocCfg_cfg_env_read]) \ + code; \ } STMT_END # define CHECK_MALLOC_TOO_LATE_FOR(ch) \ - CHECK_MALLOC_TOO_LATE_FOR_(MALLOC_TOO_LATE_FOR(ch)) + CHECK_MALLOC_TOO_LATE_FOR_(MALLOC_TOO_LATE_FOR(ch)) # define panic_write2(s) write(2, s, strlen(s)) # define CHECK_MALLOC_TAINT(newval) \ - CHECK_MALLOC_TOO_LATE_FOR_( \ - if (newval) { \ - PERL_UNUSED_RESULT(panic_write2("panic: tainting with $ENV{PERL_MALLOC_OPT}\n"));\ - exit(1); }) + CHECK_MALLOC_TOO_LATE_FOR_( \ + if (newval) { \ + PERL_UNUSED_RESULT(panic_write2("panic: tainting with $ENV{PERL_MALLOC_OPT}\n"));\ + exit(1); }) # define MALLOC_CHECK_TAINT(argc,argv,env) STMT_START { \ - if (doing_taint(argc,argv,env)) { \ - MallocCfg_ptr[MallocCfg_skip_cfg_env] = 1; \ + if (doing_taint(argc,argv,env)) { \ + MallocCfg_ptr[MallocCfg_skip_cfg_env] = 1; \ }} STMT_END; #else /* MYMALLOC */ # define safemalloc safesysmalloc @@ -1275,6 +1464,12 @@ EXTERN_C int usleep(unsigned int); #define MALLOC_TOO_LATE_FOR(ch) TOO_LATE_FOR_(ch, " with $ENV{PERL_MALLOC_OPT}") #define MALLOC_CHECK_TAINT2(argc,argv) MALLOC_CHECK_TAINT(argc,argv,NULL) +/* +=for apidoc Am|void|memzero|void * d|Size_t l +Set the C bytes starting at C<*d> to all zeroes. + +=cut +*/ #ifndef memzero # define memzero(d,l) memset(d,0,l) #endif @@ -1352,9 +1547,6 @@ EXTERN_C int usleep(unsigned int); # endif # endif # ifdef I_NETDB -# ifdef NETWARE -# include -# endif # include # endif # ifndef ENOTSOCK @@ -1391,7 +1583,7 @@ EXTERN_C char *crypt(const char *, const char *); #endif /* -=head1 Errno +=for apidoc_section $errno =for apidoc m|void|SETERRNO|int errcode|int vmserrcode @@ -1428,10 +1620,10 @@ was saved by C or C. #ifdef VMS # define SETERRNO(errcode,vmserrcode) \ - STMT_START { \ - set_errno(errcode); \ - set_vaxc_errno(vmserrcode); \ - } STMT_END + STMT_START { \ + set_errno(errcode); \ + set_vaxc_errno(vmserrcode); \ + } STMT_END # define dSAVEDERRNO int saved_errno; unsigned saved_vms_errno # define dSAVE_ERRNO int saved_errno = errno; unsigned saved_vms_errno = vaxc$errno # define SAVE_ERRNO ( saved_errno = errno, saved_vms_errno = vaxc$errno ) @@ -1494,7 +1686,7 @@ was saved by C or C. #endif /* -=head1 Warning and Dieing +=for apidoc_section $warning =for apidoc Amn|SV *|ERRSV @@ -1524,15 +1716,15 @@ any magic. if (!*svp) { \ *svp = newSVpvs(""); \ } else if (SvREADONLY(*svp)) { \ - SvREFCNT_dec_NN(*svp); \ - *svp = newSVpvs(""); \ + SvREFCNT_dec_NN(*svp); \ + *svp = newSVpvs(""); \ } else { \ - SV *const errsv = *svp; \ + SV *const errsv = *svp; \ SvPVCLEAR(errsv); \ - SvPOK_only(errsv); \ - if (SvMAGICAL(errsv)) { \ - mg_free(errsv); \ - } \ + SvPOK_only(errsv); \ + if (SvMAGICAL(errsv)) { \ + mg_free(errsv); \ + } \ } \ } STMT_END @@ -1543,13 +1735,13 @@ any magic. *svp = newSVpvs(""); \ } else if (SvREADONLY(*svp)) { \ SV *dupsv = newSVsv(*svp); \ - SvREFCNT_dec_NN(*svp); \ - *svp = dupsv; \ + SvREFCNT_dec_NN(*svp); \ + *svp = dupsv; \ } else { \ - SV *const errsv = *svp; \ - if (SvMAGICAL(errsv)) { \ - mg_free(errsv); \ - } \ + SV *const errsv = *svp; \ + if (SvMAGICAL(errsv)) { \ + mg_free(errsv); \ + } \ } \ } STMT_END @@ -1560,10 +1752,10 @@ any magic. (SvREFCNT_dec(GvSV(PL_defgv)), GvSV(PL_defgv) = SvREFCNT_inc(sv)) # define SAVE_DEFSV \ ( \ - save_gp(PL_defgv, 0), \ - GvINTRO_off(PL_defgv), \ - SAVEGENERICSV(GvSV(PL_defgv)), \ - GvSV(PL_defgv) = NULL \ + save_gp(PL_defgv, 0), \ + GvINTRO_off(PL_defgv), \ + SAVEGENERICSV(GvSV(PL_defgv)), \ + GvSV(PL_defgv) = NULL \ ) #else # define DEFSV GvSVn(PL_defgv) @@ -1571,12 +1763,26 @@ any magic. # define SAVE_DEFSV SAVESPTR(GvSV(PL_defgv)) #endif +/* +=for apidoc_section $SV +=for apidoc Amn|SV *|DEFSV +Returns the SV associated with C<$_> + +=for apidoc Am|void|DEFSV_set|SV * sv +Associate C with C<$_> + +=for apidoc Amn|void|SAVE_DEFSV +Localize C<$_>. See L. + +=cut +*/ + #ifndef errno - extern int errno; /* ANSI allows errno to be an lvalue expr. - * For example in multithreaded environments - * something like this might happen: - * extern int *_errno(void); - * #define errno (*_errno()) */ + extern int errno; /* ANSI allows errno to be an lvalue expr. + * For example in multithreaded environments + * something like this might happen: + * extern int *_errno(void); + * #define errno (*_errno()) */ #endif #define UNKNOWN_ERRNO_MSG "(unknown)" @@ -1780,8 +1986,7 @@ any magic. * longer need that. XS modules can (and do) use this name, so it must remain * a part of the API that's visible to modules. -=head1 Miscellaneous Functions - +=for apidoc_section $string =for apidoc ATmD|int|my_sprintf|NN char *buffer|NN const char *pat|... Do NOT use this due to the possibility of overflowing C. Instead use @@ -1971,6 +2176,8 @@ typedef UVTYPE UV; * For int conversions we do not need two casts if pointers are * the same size as IV and UV. Otherwise we need an explicit * cast (PTRV) to avoid compiler warnings. + * + * These are mentioned in perlguts */ #if (IVSIZE == PTRSIZE) && (UVSIZE == PTRSIZE) # define PTRV UV @@ -1987,9 +2194,17 @@ typedef UVTYPE UV; #endif #ifndef PTR2ul -# define PTR2ul(p) INT2PTR(unsigned long,p) +# define PTR2ul(p) INT2PTR(unsigned long,p) #endif +/* +=for apidoc_section $casting +=for apidoc Cyh|type|NUM2PTR|type|int value +You probably want to be using L> instead. + +=cut +*/ + #define NUM2PTR(any,d) (any)(PTRV)(d) #define PTR2IV(p) INT2PTR(IV,p) #define PTR2UV(p) INT2PTR(UV,p) @@ -2032,7 +2247,22 @@ typedef UVTYPE UV; # endif #endif -typedef NVTYPE NV; +/* On MS Windows,with 64-bit mingw-w64 compilers, we + need to attend to a __float128 alignment issue if + USE_QUADMATH is defined. Otherwise we simply: + typedef NVTYPE NV + 32-bit mingw.org compilers might also require + aligned(32) - at least that's what I found with my + Math::Foat128 module. But this is as yet untested + here, so no allowance is being made for mingw.org + compilers at this stage. -- sisyphus January 2021 +*/ +#if (defined(USE_LONG_DOUBLE) || defined(USE_QUADMATH)) && defined(__MINGW64__) + /* 64-bit build, mingw-w64 compiler only */ + typedef NVTYPE NV __attribute__ ((aligned(8))); +#else + typedef NVTYPE NV; +#endif #ifdef I_IEEEFP # include @@ -2092,7 +2322,7 @@ typedef NVTYPE NV; # define Perl_cos cosl # define Perl_cosh coshl # define Perl_exp expl -/* no Perl_fabs, but there's PERL_ABS */ +# define Perl_fabs fabsl # define Perl_floor floorl # define Perl_fmod fmodl # define Perl_log logl @@ -2171,7 +2401,7 @@ extern long double Perl_my_frexpl(long double x, int *e); # define Perl_cos cosq # define Perl_cosh coshq # define Perl_exp expq -/* no Perl_fabs, but there's PERL_ABS */ +# define Perl_fabs fabsq # define Perl_floor floorq # define Perl_fmod fmodq # define Perl_log logq @@ -2217,7 +2447,7 @@ extern long double Perl_my_frexpl(long double x, int *e); # define Perl_cos cos # define Perl_cosh cosh # define Perl_exp exp -/* no Perl_fabs, but there's PERL_ABS */ +# define Perl_fabs fabs # define Perl_floor floor # define Perl_fmod fmod # define Perl_log log @@ -2322,7 +2552,7 @@ extern long double Perl_my_frexpl(long double x, int *e); # define FP_QNAN FP_QNAN # endif # include -# ifdef I_IEEFP +# ifdef I_IEEEFP # include # endif # ifdef I_FP @@ -2437,8 +2667,8 @@ extern long double Perl_my_frexpl(long double x, int *e); # define Perl_fp_class_snan(x) (_fpclass(x) & _FPCLASS_SNAN) # define Perl_fp_class_qnan(x) (_fpclass(x) & _FPCLASS_QNAN) # define Perl_fp_class_nan(x) (_fpclass(x) & (_FPCLASS_SNAN|_FPCLASS_QNAN)) -# define Perl_fp_class_ninf(x) (_fpclass(x) & _FPCLASS_NINF)) -# define Perl_fp_class_pinf(x) (_fpclass(x) & _FPCLASS_PINF)) +# define Perl_fp_class_ninf(x) (_fpclass(x) & _FPCLASS_NINF) +# define Perl_fp_class_pinf(x) (_fpclass(x) & _FPCLASS_PINF) # define Perl_fp_class_inf(x) (_fpclass(x) & (_FPCLASS_NINF|_FPCLASS_PINF)) # define Perl_fp_class_nnorm(x) (_fpclass(x) & _FPCLASS_NN) # define Perl_fp_class_pnorm(x) (_fpclass(x) & _FPCLASS_PN) @@ -2531,7 +2761,7 @@ extern long double Perl_my_frexpl(long double x, int *e); # define Perl_isfinitel(x) isfinitel(x) # elif defined(HAS_FINITEL) # define Perl_isfinitel(x) finitel(x) -# elif defined(HAS_INFL) && defined(HAS_NANL) +# elif defined(HAS_ISINFL) && defined(HAS_ISNANL) # define Perl_isfinitel(x) !(isinfl(x)||isnanl(x)) # else # define Perl_isfinitel(x) ((x) * 0 == 0) /* See Perl_isfinite. */ @@ -2565,6 +2795,41 @@ extern long double Perl_my_frexpl(long double x, int *e); #endif #define my_atof2(a,b) my_atof3(a,b,0) +/* +=for apidoc_section $numeric +=for apidoc AmT|NV|Perl_acos|NV x +=for apidoc_item |NV|Perl_asin|NV x +=for apidoc_item |NV|Perl_atan|NV x +=for apidoc_item |NV|Perl_atan2|NV x|NV y +=for apidoc_item |NV|Perl_ceil|NV x +=for apidoc_item |NV|Perl_cos|NV x +=for apidoc_item |NV|Perl_cosh|NV x +=for apidoc_item |NV|Perl_exp|NV x +=for apidoc_item |NV|Perl_floor|NV x +=for apidoc_item |NV|Perl_fmod|NV x|NV y +=for apidoc_item |NV|Perl_frexp|NV x|int *exp +=for apidoc_item |IV|Perl_isfinite|NV x +=for apidoc_item |IV|Perl_isinf|NV x +=for apidoc_item |IV|Perl_isnan|NV x +=for apidoc_item |NV|Perl_ldexp|NV x|int exp +=for apidoc_item |NV|Perl_log|NV x +=for apidoc_item |NV|Perl_log10|NV x +=for apidoc_item |NV|Perl_modf|NV x|NV *iptr +=for apidoc_item |NV|Perl_pow|NV x|NV y +=for apidoc_item |NV|Perl_sin|NV x +=for apidoc_item |NV|Perl_sinh|NV x +=for apidoc_item |NV|Perl_sqrt|NV x +=for apidoc_item |NV|Perl_tan|NV x +=for apidoc_item |NV|Perl_tanh|NV x + +These perform the corresponding mathematical operation on the operand(s), using +the libc function designed for the task that has just enough precision for an +NV on this platform. If no such function with sufficient precision exists, +the highest precision one available is used. + +=cut +*/ + /* * CHAR_MIN and CHAR_MAX are not included here, as the (char) type may be * ambiguous. It may be equivalent to (signed char) or (unsigned char) @@ -2603,43 +2868,28 @@ extern long double Perl_my_frexpl(long double x, int *e); #endif /* -=head1 Numeric functions - -=for apidoc AmnUh||PERL_INT_MIN -=for apidoc AmnUh||PERL_LONG_MAX -=for apidoc AmnUh||PERL_LONG_MIN -=for apidoc AmnUh||PERL_QUAD_MAX -=for apidoc AmnUh||PERL_SHORT_MAX -=for apidoc AmnUh||PERL_SHORT_MIN -=for apidoc AmnUh||PERL_UCHAR_MAX -=for apidoc AmnUh||PERL_UCHAR_MIN -=for apidoc AmnUh||PERL_UINT_MAX -=for apidoc AmnUh||PERL_ULONG_MAX -=for apidoc AmnUh||PERL_ULONG_MIN -=for apidoc AmnUh||PERL_UQUAD_MAX -=for apidoc AmnUh||PERL_UQUAD_MIN -=for apidoc AmnUh||PERL_USHORT_MAX -=for apidoc AmnUh||PERL_USHORT_MIN -=for apidoc AmnUh||PERL_QUAD_MIN +=for apidoc_section $integer + =for apidoc AmnU||PERL_INT_MAX -This and -C, -C, -C, -C, -C, -C, -C, -C, -C, -C, -C, -C, -C, -C, -C, -C -give the largest and smallest number representable in the current +=for apidoc_item ||PERL_INT_MIN +=for apidoc_item ||PERL_LONG_MAX +=for apidoc_item ||PERL_LONG_MIN +=for apidoc_item ||PERL_SHORT_MAX +=for apidoc_item ||PERL_SHORT_MIN +=for apidoc_item ||PERL_UCHAR_MAX +=for apidoc_item ||PERL_UCHAR_MIN +=for apidoc_item ||PERL_UINT_MAX +=for apidoc_item ||PERL_UINT_MIN +=for apidoc_item ||PERL_ULONG_MAX +=for apidoc_item ||PERL_ULONG_MIN +=for apidoc_item ||PERL_USHORT_MAX +=for apidoc_item ||PERL_USHORT_MIN +=for apidoc_item ||PERL_QUAD_MAX +=for apidoc_item ||PERL_QUAD_MIN +=for apidoc_item ||PERL_UQUAD_MAX +=for apidoc_item ||PERL_UQUAD_MIN + +These give the largest and smallest number representable in the current platform in variables of the corresponding types. For signed types, the smallest representable number is the most negative @@ -2696,6 +2946,7 @@ typedef struct gv GV; typedef struct io IO; typedef struct context PERL_CONTEXT; typedef struct block BLOCK; +typedef struct invlist INVLIST; typedef struct magic MAGIC; typedef struct xpv XPV; @@ -2868,8 +3119,6 @@ typedef struct padname PADNAME; # else # include "vos/vosish.h" # endif -#elif defined(__SYMBIAN32__) -# include "symbian/symbianish.h" #elif defined(__HAIKU__) # include "haiku/haikuish.h" #else @@ -2911,37 +3160,6 @@ typedef struct padname PADNAME; # define USE_ENVIRON_ARRAY #endif -#ifdef USE_ITHREADS - /* On some platforms it would be safe to use a read/write mutex with many - * readers possible at the same time. On other platforms, notably IBM ones, - * subsequent getenv calls destroy earlier ones. Those platforms would not - * be able to handle simultaneous getenv calls */ -# define ENV_LOCK MUTEX_LOCK(&PL_env_mutex) -# define ENV_UNLOCK MUTEX_UNLOCK(&PL_env_mutex) -# define ENV_INIT MUTEX_INIT(&PL_env_mutex); -# define ENV_TERM MUTEX_DESTROY(&PL_env_mutex); -#else -# define ENV_LOCK NOOP; -# define ENV_UNLOCK NOOP; -# define ENV_INIT NOOP; -# define ENV_TERM NOOP; -#endif - -/* Some critical sections need to lock both the locale and the environment. - * XXX khw intends to change this to lock both mutexes, but that brings up - * issues of potential deadlock, so should be done at the beginning of a - * development cycle. So for now, it just locks the environment. Note that - * many modern platforms are locale-thread-safe anyway, so locking the locale - * mutex is a no-op anyway */ -#define ENV_LOCALE_LOCK ENV_LOCK -#define ENV_LOCALE_UNLOCK ENV_UNLOCK - -/* And some critical sections care only that no one else is writing either the - * locale nor the environment. XXX Again this is for the future. This can be - * simulated with using COND_WAIT in thread.h */ -#define ENV_LOCALE_READ_LOCK ENV_LOCALE_LOCK -#define ENV_LOCALE_READ_UNLOCK ENV_LOCALE_UNLOCK - #if defined(HAS_SIGACTION) && defined(SA_SIGINFO) /* having sigaction(2) means that the OS supports both 1-arg and 3-arg * signal handlers. But the perl core itself only fully supports 1-arg @@ -3040,17 +3258,16 @@ typedef struct padname PADNAME; #endif /* -=head1 Miscellaneous Functions +=for apidoc_section $embedding -=for apidoc Am|void|PERL_SYS_INIT|int *argc|char*** argv -Provides system-specific tune up of the C runtime environment necessary to -run Perl interpreters. This should be called only once, before creating -any Perl interpreters. +=for apidoc Am|void|PERL_SYS_INIT |int *argc|char*** argv +=for apidoc_item| |PERL_SYS_INIT3|int *argc|char*** argv|char*** env -=for apidoc Am|void|PERL_SYS_INIT3|int *argc|char*** argv|char*** env -Provides system-specific tune up of the C runtime environment necessary to -run Perl interpreters. This should be called only once, before creating -any Perl interpreters. +These provide system-specific tune up of the C runtime environment necessary to +run Perl interpreters. Only one should be used, and it should be called only +once, before creating any Perl interpreters. + +They differ in that C also initializes C. =for apidoc Am|void|PERL_SYS_TERM| Provides system-specific clean up of the C runtime environment after @@ -3089,12 +3306,6 @@ freeing any remaining Perl interpreters. # endif #endif -/* USE_5005THREADS needs to be after unixish.h as includes - * which defines NSIG - which will stop inclusion of - * this results in many functions being undeclared which bothers C++ - * May make sense to have threads after "*ish.h" anyway - */ - /* clang Thread Safety Analysis/Annotations/Attributes * http://clang.llvm.org/docs/ThreadSafetyAnalysis.html * @@ -3105,8 +3316,6 @@ freeing any remaining Perl interpreters. */ #if defined(USE_ITHREADS) && defined(I_PTHREAD) && \ defined(__clang__) && \ - !defined(PERL_GLOBAL_STRUCT) && \ - !defined(PERL_GLOBAL_STRUCT_PRIVATE) && \ !defined(SWIG) && \ ((!defined(__apple_build_version__) && \ ((__clang_major__ == 3 && __clang_minor__ >= 6) || \ @@ -3195,9 +3404,7 @@ freeing any remaining Perl interpreters. * documentation for details. */ #if defined(USE_ITHREADS) -# ifdef NETWARE -# include -# elif defined(WIN32) +# if defined(WIN32) # include # elif defined(OS2) # include "os2thread.h" @@ -3214,6 +3421,15 @@ typedef pthread_mutex_t PERL_TSA_CAPABILITY("mutex") perl_mutex; typedef pthread_cond_t perl_cond; typedef pthread_key_t perl_key; # endif + +/* Many readers; single writer */ +typedef struct { + perl_mutex lock; + perl_cond wakeup; + SSize_t readers_count; +} perl_RnW1_mutex_t; + + #endif /* USE_ITHREADS */ #ifdef PERL_TSA_ACTIVE @@ -3239,10 +3455,6 @@ EXTERN_C int perl_tsa_mutex_unlock(perl_mutex* mutex) # include "win32.h" #endif -#ifdef NETWARE -# include "netware.h" -#endif - #define STATUS_UNIX PL_statusvalue #ifdef VMS # define STATUS_NATIVE PL_statusvalue_vms @@ -3267,8 +3479,8 @@ EXTERN_C int perl_tsa_mutex_unlock(perl_mutex* mutex) */ # define STATUS_EXIT \ - (((I32)PL_statusvalue_vms == -1 ? SS$_ABORT : PL_statusvalue_vms) | \ - (VMSISH_HUSHED ? STS$M_INHIB_MSG : 0)) + (((I32)PL_statusvalue_vms == -1 ? SS$_ABORT : PL_statusvalue_vms) | \ + (VMSISH_HUSHED ? STS$M_INHIB_MSG : 0)) /* STATUS_NATIVE_CHILD_SET - Calculate UNIX status that matches the child @@ -3293,25 +3505,25 @@ EXTERN_C int perl_tsa_mutex_unlock(perl_mutex* mutex) */ # define STATUS_NATIVE_CHILD_SET(n) \ - STMT_START { \ - I32 evalue = (I32)n; \ - if (evalue == EVMSERR) { \ - PL_statusvalue_vms = vaxc$errno; \ - PL_statusvalue = evalue; \ - } else { \ - PL_statusvalue_vms = evalue; \ - if (evalue == -1) { \ - PL_statusvalue = -1; \ - PL_statusvalue_vms = SS$_ABORT; /* Should not happen */ \ - } else \ - PL_statusvalue = Perl_vms_status_to_unix(evalue, 1); \ - set_vaxc_errno(evalue); \ - if ((PL_statusvalue_vms & C_FAC_POSIX) == C_FAC_POSIX) \ - set_errno(EVMSERR); \ - else set_errno(Perl_vms_status_to_unix(evalue, 0)); \ - PL_statusvalue = PL_statusvalue << child_offset_bits; \ - } \ - } STMT_END + STMT_START { \ + I32 evalue = (I32)n; \ + if (evalue == EVMSERR) { \ + PL_statusvalue_vms = vaxc$errno; \ + PL_statusvalue = evalue; \ + } else { \ + PL_statusvalue_vms = evalue; \ + if (evalue == -1) { \ + PL_statusvalue = -1; \ + PL_statusvalue_vms = SS$_ABORT; /* Should not happen */ \ + } else \ + PL_statusvalue = Perl_vms_status_to_unix(evalue, 1); \ + set_vaxc_errno(evalue); \ + if ((PL_statusvalue_vms & C_FAC_POSIX) == C_FAC_POSIX) \ + set_errno(EVMSERR); \ + else set_errno(Perl_vms_status_to_unix(evalue, 0)); \ + PL_statusvalue = PL_statusvalue << child_offset_bits; \ + } \ + } STMT_END # ifdef VMSISH_STATUS # define STATUS_CURRENT (VMSISH_STATUS ? STATUS_NATIVE : STATUS_UNIX) @@ -3326,23 +3538,23 @@ EXTERN_C int perl_tsa_mutex_unlock(perl_mutex* mutex) * This is used when Perl is forcing errno to have a specific value. */ # define STATUS_UNIX_SET(n) \ - STMT_START { \ - I32 evalue = (I32)n; \ - PL_statusvalue = evalue; \ - if (PL_statusvalue != -1) { \ - if (PL_statusvalue != EVMSERR) { \ - PL_statusvalue &= 0xFFFF; \ - if (MY_POSIX_EXIT) \ - PL_statusvalue_vms=PL_statusvalue ? SS$_ABORT : SS$_NORMAL;\ - else PL_statusvalue_vms = Perl_unix_status_to_vms(evalue); \ - } \ - else { \ - PL_statusvalue_vms = vaxc$errno; \ - } \ - } \ - else PL_statusvalue_vms = SS$_ABORT; \ - set_vaxc_errno(PL_statusvalue_vms); \ - } STMT_END + STMT_START { \ + I32 evalue = (I32)n; \ + PL_statusvalue = evalue; \ + if (PL_statusvalue != -1) { \ + if (PL_statusvalue != EVMSERR) { \ + PL_statusvalue &= 0xFFFF; \ + if (MY_POSIX_EXIT) \ + PL_statusvalue_vms=PL_statusvalue ? SS$_ABORT : SS$_NORMAL;\ + else PL_statusvalue_vms = Perl_unix_status_to_vms(evalue); \ + } \ + else { \ + PL_statusvalue_vms = vaxc$errno; \ + } \ + } \ + else PL_statusvalue_vms = SS$_ABORT; \ + set_vaxc_errno(PL_statusvalue_vms); \ + } STMT_END /* STATUS_UNIX_EXIT_SET - Takes a UNIX/POSIX exit code and sets * the NATIVE error status based on it. @@ -3360,32 +3572,32 @@ EXTERN_C int perl_tsa_mutex_unlock(perl_mutex* mutex) */ # define STATUS_UNIX_EXIT_SET(n) \ - STMT_START { \ - I32 evalue = (I32)n; \ - PL_statusvalue = evalue; \ - if (MY_POSIX_EXIT) { \ - if (evalue <= 0xFF00) { \ - if (evalue > 0xFF) \ - evalue = (evalue >> child_offset_bits) & 0xFF; \ - PL_statusvalue_vms = \ - (C_FAC_POSIX | (evalue << 3 ) | \ - ((evalue == 1) ? (STS$K_ERROR | STS$M_INHIB_MSG) : 1)); \ - } else /* forgive them Perl, for they have sinned */ \ - PL_statusvalue_vms = evalue; \ - } else { \ - if (evalue == 0) \ - PL_statusvalue_vms = SS$_NORMAL; \ - else if (evalue <= 0xFF00) \ - PL_statusvalue_vms = SS$_ABORT; \ - else { /* forgive them Perl, for they have sinned */ \ - if (evalue != EVMSERR) PL_statusvalue_vms = evalue; \ - else PL_statusvalue_vms = vaxc$errno; \ - /* And obviously used a VMS status value instead of UNIX */ \ - PL_statusvalue = EVMSERR; \ - } \ - set_vaxc_errno(PL_statusvalue_vms); \ - } \ - } STMT_END + STMT_START { \ + I32 evalue = (I32)n; \ + PL_statusvalue = evalue; \ + if (MY_POSIX_EXIT) { \ + if (evalue <= 0xFF00) { \ + if (evalue > 0xFF) \ + evalue = ((U8) (evalue >> child_offset_bits)); \ + PL_statusvalue_vms = \ + (C_FAC_POSIX | (evalue << 3 ) | \ + ((evalue == 1) ? (STS$K_ERROR | STS$M_INHIB_MSG) : 1)); \ + } else /* forgive them Perl, for they have sinned */ \ + PL_statusvalue_vms = evalue; \ + } else { \ + if (evalue == 0) \ + PL_statusvalue_vms = SS$_NORMAL; \ + else if (evalue <= 0xFF00) \ + PL_statusvalue_vms = SS$_ABORT; \ + else { /* forgive them Perl, for they have sinned */ \ + if (evalue != EVMSERR) PL_statusvalue_vms = evalue; \ + else PL_statusvalue_vms = vaxc$errno; \ + /* And obviously used a VMS status value instead of UNIX */ \ + PL_statusvalue = EVMSERR; \ + } \ + set_vaxc_errno(PL_statusvalue_vms); \ + } \ + } STMT_END /* STATUS_EXIT_SET - Takes a NATIVE/UNIX/POSIX exit code @@ -3406,28 +3618,28 @@ EXTERN_C int perl_tsa_mutex_unlock(perl_mutex* mutex) */ # define STATUS_EXIT_SET(n) \ - STMT_START { \ - I32 evalue = (I32)n; \ - PL_statusvalue = evalue; \ - if (MY_POSIX_EXIT) \ - if (evalue > 255) PL_statusvalue_vms = evalue; else { \ - PL_statusvalue_vms = \ - (C_FAC_POSIX | (evalue << 3 ) | \ - ((evalue == 1) ? (STS$K_ERROR | STS$M_INHIB_MSG) : 1));} \ - else \ - PL_statusvalue_vms = evalue ? evalue : SS$_NORMAL; \ - set_vaxc_errno(PL_statusvalue_vms); \ - } STMT_END + STMT_START { \ + I32 evalue = (I32)n; \ + PL_statusvalue = evalue; \ + if (MY_POSIX_EXIT) \ + if (evalue > 255) PL_statusvalue_vms = evalue; else { \ + PL_statusvalue_vms = \ + (C_FAC_POSIX | (evalue << 3 ) | \ + ((evalue == 1) ? (STS$K_ERROR | STS$M_INHIB_MSG) : 1));} \ + else \ + PL_statusvalue_vms = evalue ? evalue : SS$_NORMAL; \ + set_vaxc_errno(PL_statusvalue_vms); \ + } STMT_END /* This macro forces a success status */ # define STATUS_ALL_SUCCESS \ - (PL_statusvalue = 0, PL_statusvalue_vms = SS$_NORMAL) + (PL_statusvalue = 0, PL_statusvalue_vms = SS$_NORMAL) /* This macro forces a failure status */ # define STATUS_ALL_FAILURE (PL_statusvalue = 1, \ vaxc$errno = PL_statusvalue_vms = MY_POSIX_EXIT ? \ - (C_FAC_POSIX | (1 << 3) | STS$K_ERROR | STS$M_INHIB_MSG) : SS$_ABORT) + (C_FAC_POSIX | (1 << 3) | STS$K_ERROR | STS$M_INHIB_MSG) : SS$_ABORT) #elif defined(__amigaos4__) /* A somewhat experimental attempt to simulate posix return code values */ @@ -3443,11 +3655,11 @@ EXTERN_C int perl_tsa_mutex_unlock(perl_mutex* mutex) } \ } STMT_END # define STATUS_UNIX_SET(n) \ - STMT_START { \ - PL_statusvalue = (n); \ - if (PL_statusvalue != -1) \ - PL_statusvalue &= 0xFFFF; \ - } STMT_END + STMT_START { \ + PL_statusvalue = (n); \ + if (PL_statusvalue != -1) \ + PL_statusvalue &= 0xFFFF; \ + } STMT_END # define STATUS_UNIX_EXIT_SET(n) STATUS_UNIX_SET(n) # define STATUS_EXIT_SET(n) STATUS_UNIX_SET(n) # define STATUS_CURRENT STATUS_UNIX @@ -3495,11 +3707,11 @@ EXTERN_C int perl_tsa_mutex_unlock(perl_mutex* mutex) } STMT_END # endif # define STATUS_UNIX_SET(n) \ - STMT_START { \ - PL_statusvalue = (n); \ - if (PL_statusvalue != -1) \ - PL_statusvalue &= 0xFFFF; \ - } STMT_END + STMT_START { \ + PL_statusvalue = (n); \ + if (PL_statusvalue != -1) \ + PL_statusvalue &= 0xFFFF; \ + } STMT_END # define STATUS_UNIX_EXIT_SET(n) STATUS_UNIX_SET(n) # define STATUS_EXIT_SET(n) STATUS_UNIX_SET(n) # define STATUS_CURRENT STATUS_UNIX @@ -3528,11 +3740,19 @@ EXTERN_C int perl_tsa_mutex_unlock(perl_mutex* mutex) # define PERL_FS_VERSION PERL_VERSION_STRING #endif -/* This defines a way to flush all output buffers. This may be a - * performance issue, so we allow people to disable it. Also, if - * we are using stdio, there are broken implementations of fflush(NULL) - * out there, Solaris being the most prominent. +/* + +=for apidoc_section $io +=for apidoc Amn|void|PERL_FLUSHALL_FOR_CHILD + +This defines a way to flush all output buffers. This may be a +performance issue, so we allow people to disable it. Also, if +we are using stdio, there are broken implementations of fflush(NULL) +out there, Solaris being the most prominent. + +=cut */ + #ifndef PERL_FLUSHALL_FOR_CHILD # if defined(USE_PERLIO) || defined(FFLUSH_NULL) # define PERL_FLUSHALL_FOR_CHILD PerlIO_flush((PerlIO*)NULL) @@ -3556,10 +3776,8 @@ EXTERN_C int perl_tsa_mutex_unlock(perl_mutex* mutex) # define PERL_GET_INTERP (PL_curinterp) #endif -#if defined(PERL_IMPLICIT_CONTEXT) && !defined(PERL_GET_THX) -# ifdef MULTIPLICITY -# define PERL_GET_THX ((PerlInterpreter *)PERL_GET_CONTEXT) -# endif +#if defined(MULTIPLICITY) && !defined(PERL_GET_THX) +# define PERL_GET_THX ((PerlInterpreter *)PERL_GET_CONTEXT) # define PERL_SET_THX(t) PERL_SET_CONTEXT(t) #endif @@ -3605,11 +3823,8 @@ EXTERN_C int perl_tsa_mutex_unlock(perl_mutex* mutex) #define HEKfARG(p) ((void*)(p)) -/* -=for apidoc Amnh||UTF8f -=for apidoc Amh||UTF8fARG|bool is_utf8|Size_t byte_len|char *str - -=cut +/* Documented in perlguts + * * %4p is a custom format */ #ifndef UTF8f @@ -3621,7 +3836,14 @@ EXTERN_C int perl_tsa_mutex_unlock(perl_mutex* mutex) #define PNfARG(pn) (int)1, (UV)PadnameLEN(pn), (void *)PadnamePV(pn) #ifdef PERL_CORE -/* not used; but needed for backward compatibility with XS code? - RMB */ +/* not used; but needed for backward compatibility with XS code? - RMB +=for apidoc_section $io_formats +=for apidoc AmnD|const char *|UVf + +Obsolete form of C, which you should convert to instead use + +=cut +*/ # undef UVf #elif !defined(UVf) # define UVf UVuf @@ -3648,14 +3870,14 @@ EXTERN_C int perl_tsa_mutex_unlock(perl_mutex* mutex) #endif /* -=head1 Miscellaneous Functions +=for apidoc_section $directives -=for apidoc AmU|bool|LIKELY|const bool expr +=for apidoc Am||LIKELY|bool expr Returns the input unchanged, but at the same time it gives a branch prediction hint to the compiler that this condition is likely to be true. -=for apidoc AmU|bool|UNLIKELY|const bool expr +=for apidoc Am||UNLIKELY|bool expr Returns the input unchanged, but at the same time it gives a branch prediction hint to the compiler that this condition is likely to be false. @@ -3711,39 +3933,52 @@ hint to the compiler that this condition is likely to be false. # define __has_builtin(x) 0 /* not a clang style compiler */ #endif -/* ASSUME is like assert(), but it has a benefit in a release build. It is a - hint to a compiler about a statement of fact in a function call free - expression, which allows the compiler to generate better machine code. - In a debug build, ASSUME(x) is a synonym for assert(x). ASSUME(0) means - the control path is unreachable. In a for loop, ASSUME can be used to hint - that a loop will run at least X times. ASSUME is based off MSVC's __assume - intrinsic function, see its documents for more details. +/* +=for apidoc Am||ASSUME|bool expr +C is like C, but it has a benefit in a release build. It is a +hint to a compiler about a statement of fact in a function call free +expression, which allows the compiler to generate better machine code. In a +debug build, C is a synonym for C. C means the +control path is unreachable. In a for loop, C can be used to hint that +a loop will run at least X times. C is based off MSVC's C<__assume> +intrinsic function, see its documents for more details. + +=cut */ -#ifndef DEBUGGING -# if __has_builtin(__builtin_unreachable) \ - || (__GNUC__ == 4 && __GNUC_MINOR__ >= 5 || __GNUC__ > 4) /* 4.5 -> */ +#if __has_builtin(__builtin_unreachable) +# define HAS_BUILTIN_UNREACHABLE +#elif PERL_GCC_VERSION_GE(4,5,0) +# define HAS_BUILTIN_UNREACHABLE +#endif + +#ifdef DEBUGGING +# define ASSUME(x) assert(x) +#elif defined(_MSC_VER) +# define ASSUME(x) __assume(x) +#elif defined(__ARMCC_VERSION) /* untested */ +# define ASSUME(x) __promise(x) +#elif defined(HAS_BUILTIN_UNREACHABLE) + /* Compilers can take the hint from something being unreachable */ # define ASSUME(x) ((x) ? (void) 0 : __builtin_unreachable()) -# elif defined(_MSC_VER) -# define ASSUME(x) __assume(x) -# elif defined(__ARMCC_VERSION) /* untested */ -# define ASSUME(x) __promise(x) -# else -/* a random compiler might define assert to its own special optimization token - so pass it through to C lib as a last resort */ -# define ASSUME(x) assert(x) -# endif #else + /* Not DEBUGGING, so assert() is a no-op, but a random compiler might + * define assert() to its own special optimization token so pass it through + * to C lib as a last resort */ # define ASSUME(x) assert(x) #endif -#if defined(__sun) /* ASSUME() generates warnings on Solaris */ +#ifdef HAS_BUILTIN_UNREACHABLE +# define NOT_REACHED \ + STMT_START { \ + ASSUME(!"UNREACHABLE"); __builtin_unreachable(); \ + } STMT_END +# undef HAS_BUILTIN_UNREACHABLE /* Don't leak out this internal symbol */ +#elif ! defined(__GNUC__) && (defined(__sun) || defined(__hpux)) + /* These just complain that NOT_REACHED isn't reached */ # define NOT_REACHED -#elif defined(DEBUGGING) && (__has_builtin(__builtin_unreachable) \ - || (__GNUC__ == 4 && __GNUC_MINOR__ >= 5 || __GNUC__ > 4)) /* 4.5 -> */ -# define NOT_REACHED STMT_START { ASSUME(!"UNREACHABLE"); __builtin_unreachable(); } STMT_END #else -# define NOT_REACHED ASSUME(!"UNREACHABLE") +# define NOT_REACHED ASSUME(!"UNREACHABLE") #endif /* Some unistd.h's give a prototype for pause() even though @@ -3758,13 +3993,13 @@ hint to the compiler that this condition is likely to be false. #ifndef IOCPARM_LEN # ifdef IOCPARM_MASK - /* on BSDish systems we're safe */ + /* on BSDish systems we're safe */ # define IOCPARM_LEN(x) (((x) >> 16) & IOCPARM_MASK) # elif defined(_IOC_SIZE) && defined(__GLIBC__) - /* on Linux systems we're safe; except when we're not [perl #38223] */ + /* on Linux systems we're safe; except when we're not [perl #38223] */ # define IOCPARM_LEN(x) (_IOC_SIZE(x) < 256 ? 256 : _IOC_SIZE(x)) # else - /* otherwise guess at what's safe */ + /* otherwise guess at what's safe */ # define IOCPARM_LEN(x) 256 # endif #endif @@ -3814,13 +4049,13 @@ typedef I32 (*filter_t) (pTHX_ int, SV *, int); #define FILTER_READ(idx, sv, len) filter_read(idx, sv, len) #define FILTER_DATA(idx) \ - (PL_parser ? AvARRAY(PL_parser->rsfp_filters)[idx] : NULL) + (PL_parser ? AvARRAY(PL_parser->rsfp_filters)[idx] : NULL) #define FILTER_ISREADER(idx) \ - (PL_parser && PL_parser->rsfp_filters \ - && idx >= AvFILLp(PL_parser->rsfp_filters)) + (PL_parser && PL_parser->rsfp_filters \ + && idx >= AvFILLp(PL_parser->rsfp_filters)) #define PERL_FILTER_EXISTS(i) \ - (PL_parser && PL_parser->rsfp_filters \ - && (i) <= av_tindex(PL_parser->rsfp_filters)) + (PL_parser && PL_parser->rsfp_filters \ + && (Size_t) (i) < av_count(PL_parser->rsfp_filters)) #if defined(_AIX) && !defined(_AIX43) #if defined(USE_REENTRANT) || defined(_REENTRANT) || defined(_THREAD_SAFE) @@ -3840,7 +4075,7 @@ typedef struct crypt_data { /* straight from /usr/include/crypt.h */ #ifndef PERL_CALLCONV # ifdef __cplusplus -# define PERL_CALLCONV extern "C" +# define PERL_CALLCONV EXTERN_C # else # define PERL_CALLCONV # endif @@ -3855,8 +4090,9 @@ typedef struct crypt_data { /* straight from /usr/include/crypt.h */ #ifndef PERL_STATIC_NO_RET # define PERL_STATIC_NO_RET STATIC #endif -/* PERL_STATIC_NO_RET is supposed to be equivalent to PERL_STATIC_INLINE on - builds that dont have a noreturn as a declaration specifier + +/* PERL_STATIC_INLINE_NO_RET is supposed to be equivalent to PERL_STATIC_INLINE + * on builds that dont have a noreturn as a declaration specifier */ #ifndef PERL_STATIC_INLINE_NO_RET # define PERL_STATIC_INLINE_NO_RET PERL_STATIC_INLINE @@ -3895,13 +4131,25 @@ typedef struct crypt_data { /* straight from /usr/include/crypt.h */ /* macros to define bit-fields in structs. */ #ifndef PERL_BITFIELD8 +# ifdef HAS_NON_INT_BITFIELDS # define PERL_BITFIELD8 U8 +# else +# define PERL_BITFIELD8 unsigned +# endif #endif #ifndef PERL_BITFIELD16 +# ifdef HAS_NON_INT_BITFIELDS # define PERL_BITFIELD16 U16 +# else +# define PERL_BITFIELD16 unsigned +# endif #endif #ifndef PERL_BITFIELD32 +# ifdef HAS_NON_INT_BITFIELDS # define PERL_BITFIELD32 U32 +# else +# define PERL_BITFIELD32 unsigned +# endif #endif #include "sv.h" @@ -3934,7 +4182,8 @@ typedef struct crypt_data { /* straight from /usr/include/crypt.h */ typedef struct magic_state MGS; /* struct magic_state defined in mg.c */ -#if defined(PERL_IN_REGCOMP_C) || defined(PERL_IN_REGEXEC_C) +#if defined(PERL_IN_REGCOMP_C) || defined(PERL_IN_REGEXEC_C) \ + || defined(PERL_EXT_RE_BUILD) /* These have to be predeclared, as they are used in proto.h which is #included * before their definitions in regcomp.h. */ @@ -4003,7 +4252,7 @@ struct ptr_tbl { PERL_STATIC_INLINE U32 my_swap32(const U32 x) { - return ((x & 0xFF) << 24) | ((x >> 24) & 0xFF) + return ((x & 0xFF) << 24) | ((x >> 24) & 0xFF) | ((x & 0x0000FF00) << 8) | ((x & 0x00FF0000) >> 8); } @@ -4022,7 +4271,7 @@ my_swap16(const U16 x) { the error message. Please check the value of the macro BYTEORDER, as defined in config.h. The values of BYTEORDER we expect are - big endian little endian + big endian little endian 32 bit 0x4321 0x1234 64 bit 0x87654321 0x12345678 @@ -4046,9 +4295,9 @@ my_swap16(const U16 x) { # define htovs(x) vtohs(x) #elif BYTEORDER == 0x4321 || BYTEORDER == 0x87654321 # define vtohl(x) ((((x)&0xFF)<<24) \ - +(((x)>>24)&0xFF) \ - +(((x)&0x0000FF00)<<8) \ - +(((x)&0x00FF0000)>>8) ) + +(((x)>>24)&0xFF) \ + +(((x)&0x0000FF00)<<8) \ + +(((x)&0x00FF0000)>>8) ) # define vtohs(x) ((((x)&0xFF)<<8) + (((x)>>8)&0xFF)) # define htovl(x) vtohl(x) # define htovs(x) vtohs(x) @@ -4081,6 +4330,21 @@ my_swap16(const U16 x) { /* This may look like unnecessary jumping through hoops, but converting out of range floating point values to integers *is* undefined behaviour, and it is starting to bite. + +=for apidoc_section $casting +=for apidoc Am|I32|I_32|NV what +Cast an NV to I32 while avoiding undefined C behavior + +=for apidoc Am|U32|U_32|NV what +Cast an NV to U32 while avoiding undefined C behavior + +=for apidoc Am|IV|I_V|NV what +Cast an NV to IV while avoiding undefined C behavior + +=for apidoc Am|UV|U_V|NV what +Cast an NV to UV while avoiding undefined C behavior + +=cut */ #ifndef CAST_INLINE #define I_32(what) (cast_i32((NV)(what))) @@ -4106,6 +4370,25 @@ my_swap16(const U16 x) { #define U_I(what) ((unsigned int)U_32(what)) #define U_L(what) U_32(what) +/* +=for apidoc_section $integer +=for apidoc Amn|IV|IV_MAX +The largest signed integer that fits in an IV on this platform. + +=for apidoc Amn|IV|IV_MIN +The negative signed integer furthest away from 0 that fits in an IV on this +platform. + +=for apidoc Amn|UV|UV_MAX +The largest unsigned integer that fits in a UV on this platform. + +=for apidoc Amn|UV|UV_MIN +The smallest unsigned integer that fits in a UV on this platform. It should +equal zero. + +=cut +*/ + #ifdef HAS_SIGNBIT # ifndef Perl_signbit # define Perl_signbit signbit @@ -4117,7 +4400,7 @@ my_swap16(const U16 x) { #define NV_WITHIN_UV(nv) ((nv)>=0.0 && U_V(nv) >= UV_MIN && U_V(nv) <= UV_MAX) /* Used with UV/IV arguments: */ - /* XXXX: need to speed it up */ + /* XXXX: need to speed it up */ #define CLUMP_2UV(iv) ((iv) < 0 ? 0 : (UV)(iv)) #define CLUMP_2IV(uv) ((uv) > (UV)IV_MAX ? IV_MAX : (IV)(uv)) @@ -4126,7 +4409,7 @@ my_swap16(const U16 x) { #endif #ifndef __cplusplus -#if !(defined(WIN32) || defined(SYMBIAN)) +#if !defined(WIN32) Uid_t getuid (void); Uid_t geteuid (void); Gid_t getgid (void); @@ -4140,11 +4423,11 @@ Gid_t getegid (void); #ifndef Perl_error_log # define Perl_error_log (PL_stderrgv \ - && isGV(PL_stderrgv) \ - && GvIOp(PL_stderrgv) \ - && IoOFP(GvIOp(PL_stderrgv)) \ - ? IoOFP(GvIOp(PL_stderrgv)) \ - : PerlIO_stderr()) + && isGV(PL_stderrgv) \ + && GvIOp(PL_stderrgv) \ + && IoOFP(GvIOp(PL_stderrgv)) \ + ? IoOFP(GvIOp(PL_stderrgv)) \ + : PerlIO_stderr()) #endif @@ -4162,7 +4445,7 @@ Gid_t getegid (void); #define DEBUG_u_FLAG 0x00000800 /* 2048 */ /* U is reserved for Unofficial, exploratory hacking */ #define DEBUG_U_FLAG 0x00001000 /* 4096 */ -/* spare 8192 */ +#define DEBUG_h_FLAG 0x00002000 /* 8192 */ #define DEBUG_X_FLAG 0x00004000 /* 16384 */ #define DEBUG_D_FLAG 0x00008000 /* 32768 */ #define DEBUG_S_FLAG 0x00010000 /* 65536 */ @@ -4183,6 +4466,11 @@ Gid_t getegid (void); #define DEBUG_DB_RECURSE_FLAG 0x40000000 #define DEBUG_TOP_FLAG 0x80000000 /* -D was given --> PL_debug |= FLAG */ +/* Both flags have to be set */ +# define DEBUG_BOTH_FLAGS_TEST_(flag1, flag2) \ + UNLIKELY((PL_debug & ((flag1)|(flag2))) \ + == ((flag1)|(flag2))) + # define DEBUG_p_TEST_ UNLIKELY(PL_debug & DEBUG_p_FLAG) # define DEBUG_s_TEST_ UNLIKELY(PL_debug & DEBUG_s_FLAG) # define DEBUG_l_TEST_ UNLIKELY(PL_debug & DEBUG_l_FLAG) @@ -4196,6 +4484,7 @@ Gid_t getegid (void); # define DEBUG_x_TEST_ UNLIKELY(PL_debug & DEBUG_x_FLAG) # define DEBUG_u_TEST_ UNLIKELY(PL_debug & DEBUG_u_FLAG) # define DEBUG_U_TEST_ UNLIKELY(PL_debug & DEBUG_U_FLAG) +# define DEBUG_h_TEST_ UNLIKELY(PL_debug & DEBUG_h_FLAG) # define DEBUG_X_TEST_ UNLIKELY(PL_debug & DEBUG_X_FLAG) # define DEBUG_D_TEST_ UNLIKELY(PL_debug & DEBUG_D_FLAG) # define DEBUG_S_TEST_ UNLIKELY(PL_debug & DEBUG_S_FLAG) @@ -4211,11 +4500,11 @@ Gid_t getegid (void); # define DEBUG_L_TEST_ UNLIKELY(PL_debug & DEBUG_L_FLAG) # define DEBUG_i_TEST_ UNLIKELY(PL_debug & DEBUG_i_FLAG) # define DEBUG_y_TEST_ UNLIKELY(PL_debug & DEBUG_y_FLAG) -# define DEBUG_Xv_TEST_ (DEBUG_X_TEST_ && DEBUG_v_TEST_) -# define DEBUG_Uv_TEST_ (DEBUG_U_TEST_ && DEBUG_v_TEST_) -# define DEBUG_Pv_TEST_ (DEBUG_P_TEST_ && DEBUG_v_TEST_) -# define DEBUG_Lv_TEST_ (DEBUG_L_TEST_ && DEBUG_v_TEST_) -# define DEBUG_yv_TEST_ (DEBUG_y_TEST_ && DEBUG_v_TEST_) +# define DEBUG_Xv_TEST_ DEBUG_BOTH_FLAGS_TEST_(DEBUG_X_FLAG, DEBUG_v_FLAG) +# define DEBUG_Uv_TEST_ DEBUG_BOTH_FLAGS_TEST_(DEBUG_U_FLAG, DEBUG_v_FLAG) +# define DEBUG_Pv_TEST_ DEBUG_BOTH_FLAGS_TEST_(DEBUG_P_FLAG, DEBUG_v_FLAG) +# define DEBUG_Lv_TEST_ DEBUG_BOTH_FLAGS_TEST_(DEBUG_L_FLAG, DEBUG_v_FLAG) +# define DEBUG_yv_TEST_ DEBUG_BOTH_FLAGS_TEST_(DEBUG_y_FLAG, DEBUG_v_FLAG) #ifdef DEBUGGING @@ -4232,6 +4521,7 @@ Gid_t getegid (void); # define DEBUG_x_TEST DEBUG_x_TEST_ # define DEBUG_u_TEST DEBUG_u_TEST_ # define DEBUG_U_TEST DEBUG_U_TEST_ +# define DEBUG_h_TEST DEBUG_h_TEST_ # define DEBUG_X_TEST DEBUG_X_TEST_ # define DEBUG_D_TEST DEBUG_D_TEST_ # define DEBUG_S_TEST DEBUG_S_TEST_ @@ -4278,16 +4568,47 @@ Gid_t getegid (void); } \ } STMT_END +/* These allow you to customize your debugging output for specialized, + * generally temporary ad-hoc purposes. For example, if you need 'errno' + * preserved, you can add definitions to these macros (either in this file for + * the whole program, or before the #include "perl.h" in a particular .c file + * you're trying to debug) and recompile: + * + * #define DEBUG_PRE_STMTS dSAVE_ERRNO; + * #define DEBUG_POST_STMTS RESTORE_ERRNO; + * + * Other potential things include displaying timestamps, location information, + * which thread, etc. Heres an example with both errno and location info: + * + * #define DEBUG_PRE_STMTS dSAVE_ERRNO; \ + * PerlIO_printf(Perl_debug_log, "%s:%d: ", __FILE__, __LINE__); + * #define DEBUG_POST RESTORE_ERRNO; + * + * All DEBUG statements in the compiled scope will be have these extra + * statements compiled in; they will be executed only for the DEBUG statements + * whose flags are turned on. + */ +#ifndef DEBUG_PRE_STMTS +# define DEBUG_PRE_STMTS +#endif +#ifndef DEBUG_POST_STMTS +# define DEBUG_POST_STMTS +#endif + # define DEBUG__(t, a) \ STMT_START { \ - if (t) STMT_START {a;} STMT_END; \ + if (t) STMT_START { \ + DEBUG_PRE_STMTS a; DEBUG_POST_STMTS \ + } STMT_END; \ } STMT_END # define DEBUG_f(a) DEBUG__(DEBUG_f_TEST, a) /* For re_comp.c, re_exec.c, assume -Dr has been specified */ # ifdef PERL_EXT_RE_BUILD -# define DEBUG_r(a) STMT_START {a;} STMT_END +# define DEBUG_r(a) STMT_START { \ + DEBUG_PRE_STMTS a; DEBUG_POST_STMTS \ + } STMT_END; # else # define DEBUG_r(a) DEBUG__(DEBUG_r_TEST, a) # endif /* PERL_EXT_RE_BUILD */ @@ -4331,6 +4652,7 @@ Gid_t getegid (void); # define DEBUG_x_TEST (0) # define DEBUG_u_TEST (0) # define DEBUG_U_TEST (0) +# define DEBUG_h_TEST (0) # define DEBUG_X_TEST (0) # define DEBUG_D_TEST (0) # define DEBUG_S_TEST (0) @@ -4393,16 +4715,16 @@ Gid_t getegid (void); #define DEBUG_SCOPE(where) \ DEBUG_l( \ Perl_deb(aTHX_ "%s scope %ld (savestack=%ld) at %s:%d\n", \ - where, (long)PL_scopestack_ix, (long)PL_savestack_ix, \ - __FILE__, __LINE__)); + where, (long)PL_scopestack_ix, (long)PL_savestack_ix, \ + __FILE__, __LINE__)); /* Keep the old croak based assert for those who want it, and as a fallback if the platform is so heretically non-ANSI that it can't assert. */ #define Perl_assert(what) PERL_DEB2( \ - ((what) ? ((void) 0) : \ - (Perl_croak_nocontext("Assertion %s failed: file \"" __FILE__ \ - "\", line %d", STRINGIFY(what), __LINE__), \ + ((what) ? ((void) 0) : \ + (Perl_croak_nocontext("Assertion %s failed: file \"" __FILE__ \ + "\", line %d", STRINGIFY(what), __LINE__), \ (void) 0)), ((void)0)) /* assert() gets defined if DEBUGGING. @@ -4520,10 +4842,10 @@ EXTERN_C void PerlIO_teardown(void); # ifdef USE_ITHREADS # define PERLIO_INIT MUTEX_INIT(&PL_perlio_mutex) # define PERLIO_TERM \ - STMT_START { \ - PerlIO_teardown(); \ - MUTEX_DESTROY(&PL_perlio_mutex);\ - } STMT_END + STMT_START { \ + PerlIO_teardown(); \ + MUTEX_DESTROY(&PL_perlio_mutex);\ + } STMT_END # else # define PERLIO_INIT # define PERLIO_TERM PerlIO_teardown() @@ -4536,16 +4858,16 @@ EXTERN_C void PerlIO_teardown(void); #ifdef MYMALLOC # ifdef MUTEX_INIT_CALLS_MALLOC # define MALLOC_INIT \ - STMT_START { \ - PL_malloc_mutex = NULL; \ - MUTEX_INIT(&PL_malloc_mutex); \ - } STMT_END + STMT_START { \ + PL_malloc_mutex = NULL; \ + MUTEX_INIT(&PL_malloc_mutex); \ + } STMT_END # define MALLOC_TERM \ - STMT_START { \ - perl_mutex tmp = PL_malloc_mutex; \ - PL_malloc_mutex = NULL; \ - MUTEX_DESTROY(&tmp); \ - } STMT_END + STMT_START { \ + perl_mutex tmp = PL_malloc_mutex; \ + PL_malloc_mutex = NULL; \ + MUTEX_DESTROY(&tmp); \ + } STMT_END # else # define MALLOC_INIT MUTEX_INIT(&PL_malloc_mutex) # define MALLOC_TERM MUTEX_DESTROY(&PL_malloc_mutex) @@ -4555,7 +4877,7 @@ EXTERN_C void PerlIO_teardown(void); # define MALLOC_TERM #endif -#if defined(PERL_IMPLICIT_CONTEXT) +#if defined(MULTIPLICITY) struct perl_memory_debug_header; struct perl_memory_debug_header { @@ -4583,8 +4905,8 @@ struct perl_memory_debug_header { # define PERL_MEMORY_DEBUG_HEADER_SIZE \ (sizeof(struct perl_memory_debug_header) + \ - (MEM_ALIGNBYTES - sizeof(struct perl_memory_debug_header) \ - %MEM_ALIGNBYTES) % MEM_ALIGNBYTES) + (MEM_ALIGNBYTES - sizeof(struct perl_memory_debug_header) \ + %MEM_ALIGNBYTES) % MEM_ALIGNBYTES) #else # define PERL_MEMORY_DEBUG_HEADER_SIZE 0 @@ -4593,17 +4915,17 @@ struct perl_memory_debug_header { #ifdef PERL_TRACK_MEMPOOL # ifdef PERL_DEBUG_READONLY_COW # define INIT_TRACK_MEMPOOL(header, interp) \ - STMT_START { \ - (header).interpreter = (interp); \ - (header).prev = (header).next = &(header); \ - (header).readonly = 0; \ - } STMT_END + STMT_START { \ + (header).interpreter = (interp); \ + (header).prev = (header).next = &(header); \ + (header).readonly = 0; \ + } STMT_END # else # define INIT_TRACK_MEMPOOL(header, interp) \ - STMT_START { \ - (header).interpreter = (interp); \ - (header).prev = (header).next = &(header); \ - } STMT_END + STMT_START { \ + (header).interpreter = (interp); \ + (header).prev = (header).next = &(header); \ + } STMT_END # endif # else # define INIT_TRACK_MEMPOOL(header, interp) @@ -4620,7 +4942,7 @@ struct perl_memory_debug_header { # if defined(HAS_MALLOC_SIZE) && !defined(PERL_DEBUG_READONLY_COW) # ifdef PERL_TRACK_MEMPOOL # define Perl_safesysmalloc_size(where) \ - (malloc_size(((char *)(where)) - PERL_MEMORY_DEBUG_HEADER_SIZE) - PERL_MEMORY_DEBUG_HEADER_SIZE) + (malloc_size(((char *)(where)) - PERL_MEMORY_DEBUG_HEADER_SIZE) - PERL_MEMORY_DEBUG_HEADER_SIZE) # else # define Perl_safesysmalloc_size(where) malloc_size(where) # endif @@ -4628,7 +4950,7 @@ struct perl_memory_debug_header { # ifdef HAS_MALLOC_GOOD_SIZE # ifdef PERL_TRACK_MEMPOOL # define Perl_malloc_good_size(how_much) \ - (malloc_good_size((how_much) + PERL_MEMORY_DEBUG_HEADER_SIZE) - PERL_MEMORY_DEBUG_HEADER_SIZE) + (malloc_good_size((how_much) + PERL_MEMORY_DEBUG_HEADER_SIZE) - PERL_MEMORY_DEBUG_HEADER_SIZE) # else # define Perl_malloc_good_size(how_much) malloc_good_size(how_much) # endif @@ -4658,12 +4980,12 @@ EXTERN_C char **environ; /* environment variables supplied via exec */ #undef PERL_PATCHLEVEL_H_IMPLICIT #define PERL_VERSION_STRING STRINGIFY(PERL_REVISION) "." \ - STRINGIFY(PERL_VERSION) "." \ - STRINGIFY(PERL_SUBVERSION) + STRINGIFY(PERL_VERSION) "." \ + STRINGIFY(PERL_SUBVERSION) #define PERL_API_VERSION_STRING STRINGIFY(PERL_API_REVISION) "." \ - STRINGIFY(PERL_API_VERSION) "." \ - STRINGIFY(PERL_API_SUBVERSION) + STRINGIFY(PERL_API_VERSION) "." \ + STRINGIFY(PERL_API_SUBVERSION) START_EXTERN_C @@ -4720,6 +5042,22 @@ EXTCONST char PL_No[] INIT(""); EXTCONST char PL_Zero[] INIT("0"); + +/* +=for apidoc_section $numeric +=for apidoc AmTuU|const char *|PL_hexdigit|U8 value + +This array, indexed by an integer, converts that value into the character that +represents it. For example, if the input is 8, the return will be a string +whose first character is '8'. What is actually returned is a pointer into a +string. All you are interested in is the first character of that string. To +get uppercase letters (for the values 10..15), add 16 to the index. Hence, +C is C<'b'>, and C is C<'B'>. Adding 16 +to an index whose representation is '0'..'9' yields the same as not adding 16. +Indices outside the range 0..31 result in (bad) undedefined behavior. + +=cut +*/ EXTCONST char PL_hexdigit[] INIT("0123456789abcdef0123456789ABCDEF"); @@ -4789,45 +5127,81 @@ EXTCONST int PL_sig_num[]; * folds such as outside the range or to multiple characters. */ #ifdef DOINIT -#ifndef EBCDIC +# ifndef EBCDIC /* The EBCDIC fold table depends on the code page, and hence is found in - * utfebcdic.h */ + * ebcdic_tables.h */ EXTCONST unsigned char PL_fold[] = { - 0, 1, 2, 3, 4, 5, 6, 7, - 8, 9, 10, 11, 12, 13, 14, 15, - 16, 17, 18, 19, 20, 21, 22, 23, - 24, 25, 26, 27, 28, 29, 30, 31, - 32, 33, 34, 35, 36, 37, 38, 39, - 40, 41, 42, 43, 44, 45, 46, 47, - 48, 49, 50, 51, 52, 53, 54, 55, - 56, 57, 58, 59, 60, 61, 62, 63, - 64, 'a', 'b', 'c', 'd', 'e', 'f', 'g', - 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', - 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', - 'x', 'y', 'z', 91, 92, 93, 94, 95, - 96, 'A', 'B', 'C', 'D', 'E', 'F', 'G', - 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', - 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', - 'X', 'Y', 'Z', 123, 124, 125, 126, 127, - 128, 129, 130, 131, 132, 133, 134, 135, - 136, 137, 138, 139, 140, 141, 142, 143, - 144, 145, 146, 147, 148, 149, 150, 151, - 152, 153, 154, 155, 156, 157, 158, 159, - 160, 161, 162, 163, 164, 165, 166, 167, - 168, 169, 170, 171, 172, 173, 174, 175, - 176, 177, 178, 179, 180, 181, 182, 183, - 184, 185, 186, 187, 188, 189, 190, 191, - 192, 193, 194, 195, 196, 197, 198, 199, - 200, 201, 202, 203, 204, 205, 206, 207, - 208, 209, 210, 211, 212, 213, 214, 215, - 216, 217, 218, 219, 220, 221, 222, 223, - 224, 225, 226, 227, 228, 229, 230, 231, - 232, 233, 234, 235, 236, 237, 238, 239, - 240, 241, 242, 243, 244, 245, 246, 247, - 248, 249, 250, 251, 252, 253, 254, 255 + 0, 1, 2, 3, 4, 5, 6, 7, + 8, 9, 10, 11, 12, 13, 14, 15, + 16, 17, 18, 19, 20, 21, 22, 23, + 24, 25, 26, 27, 28, 29, 30, 31, + 32, 33, 34, 35, 36, 37, 38, 39, + 40, 41, 42, 43, 44, 45, 46, 47, + 48, 49, 50, 51, 52, 53, 54, 55, + 56, 57, 58, 59, 60, 61, 62, 63, + 64, 'a', 'b', 'c', 'd', 'e', 'f', 'g', + 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', + 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', + 'x', 'y', 'z', 91, 92, 93, 94, 95, + 96, 'A', 'B', 'C', 'D', 'E', 'F', 'G', + 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', + 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', + 'X', 'Y', 'Z', 123, 124, 125, 126, 127, + 128, 129, 130, 131, 132, 133, 134, 135, + 136, 137, 138, 139, 140, 141, 142, 143, + 144, 145, 146, 147, 148, 149, 150, 151, + 152, 153, 154, 155, 156, 157, 158, 159, + 160, 161, 162, 163, 164, 165, 166, 167, + 168, 169, 170, 171, 172, 173, 174, 175, + 176, 177, 178, 179, 180, 181, 182, 183, + 184, 185, 186, 187, 188, 189, 190, 191, + 192, 193, 194, 195, 196, 197, 198, 199, + 200, 201, 202, 203, 204, 205, 206, 207, + 208, 209, 210, 211, 212, 213, 214, 215, + 216, 217, 218, 219, 220, 221, 222, 223, + 224, 225, 226, 227, 228, 229, 230, 231, + 232, 233, 234, 235, 236, 237, 238, 239, + 240, 241, 242, 243, 244, 245, 246, 247, + 248, 249, 250, 251, 252, 253, 254, 255 +}; + +EXT unsigned char PL_fold_locale[] = { /* Unfortunately not EXTCONST. */ + 0, 1, 2, 3, 4, 5, 6, 7, + 8, 9, 10, 11, 12, 13, 14, 15, + 16, 17, 18, 19, 20, 21, 22, 23, + 24, 25, 26, 27, 28, 29, 30, 31, + 32, 33, 34, 35, 36, 37, 38, 39, + 40, 41, 42, 43, 44, 45, 46, 47, + 48, 49, 50, 51, 52, 53, 54, 55, + 56, 57, 58, 59, 60, 61, 62, 63, + 64, 'a', 'b', 'c', 'd', 'e', 'f', 'g', + 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', + 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', + 'x', 'y', 'z', 91, 92, 93, 94, 95, + 96, 'A', 'B', 'C', 'D', 'E', 'F', 'G', + 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', + 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', + 'X', 'Y', 'Z', 123, 124, 125, 126, 127, + 128, 129, 130, 131, 132, 133, 134, 135, + 136, 137, 138, 139, 140, 141, 142, 143, + 144, 145, 146, 147, 148, 149, 150, 151, + 152, 153, 154, 155, 156, 157, 158, 159, + 160, 161, 162, 163, 164, 165, 166, 167, + 168, 169, 170, 171, 172, 173, 174, 175, + 176, 177, 178, 179, 180, 181, 182, 183, + 184, 185, 186, 187, 188, 189, 190, 191, + 192, 193, 194, 195, 196, 197, 198, 199, + 200, 201, 202, 203, 204, 205, 206, 207, + 208, 209, 210, 211, 212, 213, 214, 215, + 216, 217, 218, 219, 220, 221, 222, 223, + 224, 225, 226, 227, 228, 229, 230, 231, + 232, 233, 234, 235, 236, 237, 238, 239, + 240, 241, 242, 243, 244, 245, 246, 247, + 248, 249, 250, 251, 252, 253, 254, 255 }; + EXTCONST unsigned char PL_fold_latin1[] = { /* Full latin1 complement folding, except for three problematic code points: * Micro sign (181 = 0xB5) and y with diearesis (255 = 0xFF) have their @@ -4837,266 +5211,151 @@ EXTCONST unsigned char PL_fold_latin1[] = { * not one, so can't be represented in this table. * * All have to be specially handled */ - 0, 1, 2, 3, 4, 5, 6, 7, - 8, 9, 10, 11, 12, 13, 14, 15, - 16, 17, 18, 19, 20, 21, 22, 23, - 24, 25, 26, 27, 28, 29, 30, 31, - 32, 33, 34, 35, 36, 37, 38, 39, - 40, 41, 42, 43, 44, 45, 46, 47, - 48, 49, 50, 51, 52, 53, 54, 55, - 56, 57, 58, 59, 60, 61, 62, 63, - 64, 'a', 'b', 'c', 'd', 'e', 'f', 'g', - 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', - 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', - 'x', 'y', 'z', 91, 92, 93, 94, 95, - 96, 'A', 'B', 'C', 'D', 'E', 'F', 'G', - 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', - 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', - 'X', 'Y', 'Z', 123, 124, 125, 126, 127, - 128, 129, 130, 131, 132, 133, 134, 135, - 136, 137, 138, 139, 140, 141, 142, 143, - 144, 145, 146, 147, 148, 149, 150, 151, - 152, 153, 154, 155, 156, 157, 158, 159, - 160, 161, 162, 163, 164, 165, 166, 167, - 168, 169, 170, 171, 172, 173, 174, 175, - 176, 177, 178, 179, 180, 181 /*micro */, 182, 183, - 184, 185, 186, 187, 188, 189, 190, 191, - 192+32, 193+32, 194+32, 195+32, 196+32, 197+32, 198+32, 199+32, - 200+32, 201+32, 202+32, 203+32, 204+32, 205+32, 206+32, 207+32, - 208+32, 209+32, 210+32, 211+32, 212+32, 213+32, 214+32, 215, - 216+32, 217+32, 218+32, 219+32, 220+32, 221+32, 222+32, 223 /* ss */, - 224-32, 225-32, 226-32, 227-32, 228-32, 229-32, 230-32, 231-32, - 232-32, 233-32, 234-32, 235-32, 236-32, 237-32, 238-32, 239-32, - 240-32, 241-32, 242-32, 243-32, 244-32, 245-32, 246-32, 247, - 248-32, 249-32, 250-32, 251-32, 252-32, 253-32, 254-32, - 255 /* y with diaeresis */ + 0, 1, 2, 3, 4, 5, 6, 7, + 8, 9, 10, 11, 12, 13, 14, 15, + 16, 17, 18, 19, 20, 21, 22, 23, + 24, 25, 26, 27, 28, 29, 30, 31, + 32, 33, 34, 35, 36, 37, 38, 39, + 40, 41, 42, 43, 44, 45, 46, 47, + 48, 49, 50, 51, 52, 53, 54, 55, + 56, 57, 58, 59, 60, 61, 62, 63, + 64, 'a', 'b', 'c', 'd', 'e', 'f', 'g', + 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', + 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', + 'x', 'y', 'z', 91, 92, 93, 94, 95, + 96, 'A', 'B', 'C', 'D', 'E', 'F', 'G', + 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', + 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', + 'X', 'Y', 'Z', 123, 124, 125, 126, 127, + 128, 129, 130, 131, 132, 133, 134, 135, + 136, 137, 138, 139, 140, 141, 142, 143, + 144, 145, 146, 147, 148, 149, 150, 151, + 152, 153, 154, 155, 156, 157, 158, 159, + 160, 161, 162, 163, 164, 165, 166, 167, + 168, 169, 170, 171, 172, 173, 174, 175, + 176, 177, 178, 179, 180, 181 /*micro */, 182, 183, + 184, 185, 186, 187, 188, 189, 190, 191, + 192+32, 193+32, 194+32, 195+32, 196+32, 197+32, 198+32, 199+32, + 200+32, 201+32, 202+32, 203+32, 204+32, 205+32, 206+32, 207+32, + 208+32, 209+32, 210+32, 211+32, 212+32, 213+32, 214+32, 215, + 216+32, 217+32, 218+32, 219+32, 220+32, 221+32, 222+32, 223 /* ss */, + 224-32, 225-32, 226-32, 227-32, 228-32, 229-32, 230-32, 231-32, + 232-32, 233-32, 234-32, 235-32, 236-32, 237-32, 238-32, 239-32, + 240-32, 241-32, 242-32, 243-32, 244-32, 245-32, 246-32, 247, + 248-32, 249-32, 250-32, 251-32, 252-32, 253-32, 254-32, + 255 /* y with diaeresis */ }; /* If these tables are accessed through ebcdic, the access will be converted to * latin1 first */ EXTCONST unsigned char PL_latin1_lc[] = { /* lowercasing */ - 0, 1, 2, 3, 4, 5, 6, 7, - 8, 9, 10, 11, 12, 13, 14, 15, - 16, 17, 18, 19, 20, 21, 22, 23, - 24, 25, 26, 27, 28, 29, 30, 31, - 32, 33, 34, 35, 36, 37, 38, 39, - 40, 41, 42, 43, 44, 45, 46, 47, - 48, 49, 50, 51, 52, 53, 54, 55, - 56, 57, 58, 59, 60, 61, 62, 63, - 64, 'a', 'b', 'c', 'd', 'e', 'f', 'g', - 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', - 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', - 'x', 'y', 'z', 91, 92, 93, 94, 95, - 96, 97, 98, 99, 100, 101, 102, 103, - 104, 105, 106, 107, 108, 109, 110, 111, - 112, 113, 114, 115, 116, 117, 118, 119, - 120, 121, 122, 123, 124, 125, 126, 127, - 128, 129, 130, 131, 132, 133, 134, 135, - 136, 137, 138, 139, 140, 141, 142, 143, - 144, 145, 146, 147, 148, 149, 150, 151, - 152, 153, 154, 155, 156, 157, 158, 159, - 160, 161, 162, 163, 164, 165, 166, 167, - 168, 169, 170, 171, 172, 173, 174, 175, - 176, 177, 178, 179, 180, 181, 182, 183, - 184, 185, 186, 187, 188, 189, 190, 191, - 192+32, 193+32, 194+32, 195+32, 196+32, 197+32, 198+32, 199+32, - 200+32, 201+32, 202+32, 203+32, 204+32, 205+32, 206+32, 207+32, - 208+32, 209+32, 210+32, 211+32, 212+32, 213+32, 214+32, 215, - 216+32, 217+32, 218+32, 219+32, 220+32, 221+32, 222+32, 223, - 224, 225, 226, 227, 228, 229, 230, 231, - 232, 233, 234, 235, 236, 237, 238, 239, - 240, 241, 242, 243, 244, 245, 246, 247, - 248, 249, 250, 251, 252, 253, 254, 255 + 0, 1, 2, 3, 4, 5, 6, 7, + 8, 9, 10, 11, 12, 13, 14, 15, + 16, 17, 18, 19, 20, 21, 22, 23, + 24, 25, 26, 27, 28, 29, 30, 31, + 32, 33, 34, 35, 36, 37, 38, 39, + 40, 41, 42, 43, 44, 45, 46, 47, + 48, 49, 50, 51, 52, 53, 54, 55, + 56, 57, 58, 59, 60, 61, 62, 63, + 64, 'a', 'b', 'c', 'd', 'e', 'f', 'g', + 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', + 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', + 'x', 'y', 'z', 91, 92, 93, 94, 95, + 96, 97, 98, 99, 100, 101, 102, 103, + 104, 105, 106, 107, 108, 109, 110, 111, + 112, 113, 114, 115, 116, 117, 118, 119, + 120, 121, 122, 123, 124, 125, 126, 127, + 128, 129, 130, 131, 132, 133, 134, 135, + 136, 137, 138, 139, 140, 141, 142, 143, + 144, 145, 146, 147, 148, 149, 150, 151, + 152, 153, 154, 155, 156, 157, 158, 159, + 160, 161, 162, 163, 164, 165, 166, 167, + 168, 169, 170, 171, 172, 173, 174, 175, + 176, 177, 178, 179, 180, 181, 182, 183, + 184, 185, 186, 187, 188, 189, 190, 191, + 192+32, 193+32, 194+32, 195+32, 196+32, 197+32, 198+32, 199+32, + 200+32, 201+32, 202+32, 203+32, 204+32, 205+32, 206+32, 207+32, + 208+32, 209+32, 210+32, 211+32, 212+32, 213+32, 214+32, 215, + 216+32, 217+32, 218+32, 219+32, 220+32, 221+32, 222+32, 223, + 224, 225, 226, 227, 228, 229, 230, 231, + 232, 233, 234, 235, 236, 237, 238, 239, + 240, 241, 242, 243, 244, 245, 246, 247, + 248, 249, 250, 251, 252, 253, 254, 255 }; /* upper and title case of latin1 characters, modified so that the three tricky * ones are mapped to 255 (which is one of the three) */ EXTCONST unsigned char PL_mod_latin1_uc[] = { - 0, 1, 2, 3, 4, 5, 6, 7, - 8, 9, 10, 11, 12, 13, 14, 15, - 16, 17, 18, 19, 20, 21, 22, 23, - 24, 25, 26, 27, 28, 29, 30, 31, - 32, 33, 34, 35, 36, 37, 38, 39, - 40, 41, 42, 43, 44, 45, 46, 47, - 48, 49, 50, 51, 52, 53, 54, 55, - 56, 57, 58, 59, 60, 61, 62, 63, - 64, 65, 66, 67, 68, 69, 70, 71, - 72, 73, 74, 75, 76, 77, 78, 79, - 80, 81, 82, 83, 84, 85, 86, 87, - 88, 89, 90, 91, 92, 93, 94, 95, - 96, 'A', 'B', 'C', 'D', 'E', 'F', 'G', - 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', - 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', - 'X', 'Y', 'Z', 123, 124, 125, 126, 127, - 128, 129, 130, 131, 132, 133, 134, 135, - 136, 137, 138, 139, 140, 141, 142, 143, - 144, 145, 146, 147, 148, 149, 150, 151, - 152, 153, 154, 155, 156, 157, 158, 159, - 160, 161, 162, 163, 164, 165, 166, 167, - 168, 169, 170, 171, 172, 173, 174, 175, - 176, 177, 178, 179, 180, 255 /*micro*/, 182, 183, - 184, 185, 186, 187, 188, 189, 190, 191, - 192, 193, 194, 195, 196, 197, 198, 199, - 200, 201, 202, 203, 204, 205, 206, 207, - 208, 209, 210, 211, 212, 213, 214, 215, - 216, 217, 218, 219, 220, 221, 222, -#if UNICODE_MAJOR_VERSION > 2 \ - || (UNICODE_MAJOR_VERSION == 2 && UNICODE_DOT_VERSION >= 1 \ - && UNICODE_DOT_DOT_VERSION >= 8) - 255 /*sharp s*/, -#else /* uc(sharp s) is 'sharp s' itself in early unicode */ - 223, -#endif - 224-32, 225-32, 226-32, 227-32, 228-32, 229-32, 230-32, 231-32, - 232-32, 233-32, 234-32, 235-32, 236-32, 237-32, 238-32, 239-32, - 240-32, 241-32, 242-32, 243-32, 244-32, 245-32, 246-32, 247, - 248-32, 249-32, 250-32, 251-32, 252-32, 253-32, 254-32, 255 + 0, 1, 2, 3, 4, 5, 6, 7, + 8, 9, 10, 11, 12, 13, 14, 15, + 16, 17, 18, 19, 20, 21, 22, 23, + 24, 25, 26, 27, 28, 29, 30, 31, + 32, 33, 34, 35, 36, 37, 38, 39, + 40, 41, 42, 43, 44, 45, 46, 47, + 48, 49, 50, 51, 52, 53, 54, 55, + 56, 57, 58, 59, 60, 61, 62, 63, + 64, 65, 66, 67, 68, 69, 70, 71, + 72, 73, 74, 75, 76, 77, 78, 79, + 80, 81, 82, 83, 84, 85, 86, 87, + 88, 89, 90, 91, 92, 93, 94, 95, + 96, 'A', 'B', 'C', 'D', 'E', 'F', 'G', + 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', + 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', + 'X', 'Y', 'Z', 123, 124, 125, 126, 127, + 128, 129, 130, 131, 132, 133, 134, 135, + 136, 137, 138, 139, 140, 141, 142, 143, + 144, 145, 146, 147, 148, 149, 150, 151, + 152, 153, 154, 155, 156, 157, 158, 159, + 160, 161, 162, 163, 164, 165, 166, 167, + 168, 169, 170, 171, 172, 173, 174, 175, + 176, 177, 178, 179, 180, 255 /*micro*/, 182, 183, + 184, 185, 186, 187, 188, 189, 190, 191, + 192, 193, 194, 195, 196, 197, 198, 199, + 200, 201, 202, 203, 204, 205, 206, 207, + 208, 209, 210, 211, 212, 213, 214, 215, + 216, 217, 218, 219, 220, 221, 222, +# if UNICODE_MAJOR_VERSION > 2 \ + || (UNICODE_MAJOR_VERSION == 2 && UNICODE_DOT_VERSION >= 1 \ + && UNICODE_DOT_DOT_VERSION >= 8) + 255 /*sharp s*/, +# else /* uc(sharp s) is 'sharp s' itself in early unicode */ + 223, +# endif + 224-32, 225-32, 226-32, 227-32, 228-32, 229-32, 230-32, 231-32, + 232-32, 233-32, 234-32, 235-32, 236-32, 237-32, 238-32, 239-32, + 240-32, 241-32, 242-32, 243-32, 244-32, 245-32, 246-32, 247, + 248-32, 249-32, 250-32, 251-32, 252-32, 253-32, 254-32, 255 }; -#endif /* !EBCDIC, but still in DOINIT */ +# endif /* !EBCDIC, but still in DOINIT */ #else /* ! DOINIT */ -# ifndef EBCDIC +# ifndef EBCDIC EXTCONST unsigned char PL_fold[]; EXTCONST unsigned char PL_fold_latin1[]; EXTCONST unsigned char PL_mod_latin1_uc[]; EXTCONST unsigned char PL_latin1_lc[]; +EXT unsigned char PL_fold_locale[]; /* Unfortunately not EXTCONST. */ # endif #endif -#ifndef PERL_GLOBAL_STRUCT /* or perlvars.h */ -#ifdef DOINIT -EXT unsigned char PL_fold_locale[256] = { /* Unfortunately not EXTCONST. */ - 0, 1, 2, 3, 4, 5, 6, 7, - 8, 9, 10, 11, 12, 13, 14, 15, - 16, 17, 18, 19, 20, 21, 22, 23, - 24, 25, 26, 27, 28, 29, 30, 31, - 32, 33, 34, 35, 36, 37, 38, 39, - 40, 41, 42, 43, 44, 45, 46, 47, - 48, 49, 50, 51, 52, 53, 54, 55, - 56, 57, 58, 59, 60, 61, 62, 63, - 64, 'a', 'b', 'c', 'd', 'e', 'f', 'g', - 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', - 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', - 'x', 'y', 'z', 91, 92, 93, 94, 95, - 96, 'A', 'B', 'C', 'D', 'E', 'F', 'G', - 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', - 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', - 'X', 'Y', 'Z', 123, 124, 125, 126, 127, - 128, 129, 130, 131, 132, 133, 134, 135, - 136, 137, 138, 139, 140, 141, 142, 143, - 144, 145, 146, 147, 148, 149, 150, 151, - 152, 153, 154, 155, 156, 157, 158, 159, - 160, 161, 162, 163, 164, 165, 166, 167, - 168, 169, 170, 171, 172, 173, 174, 175, - 176, 177, 178, 179, 180, 181, 182, 183, - 184, 185, 186, 187, 188, 189, 190, 191, - 192, 193, 194, 195, 196, 197, 198, 199, - 200, 201, 202, 203, 204, 205, 206, 207, - 208, 209, 210, 211, 212, 213, 214, 215, - 216, 217, 218, 219, 220, 221, 222, 223, - 224, 225, 226, 227, 228, 229, 230, 231, - 232, 233, 234, 235, 236, 237, 238, 239, - 240, 241, 242, 243, 244, 245, 246, 247, - 248, 249, 250, 251, 252, 253, 254, 255 -}; -#else -EXT unsigned char PL_fold_locale[256]; /* Unfortunately not EXTCONST. */ -#endif -#endif /* !PERL_GLOBAL_STRUCT */ - -#ifdef DOINIT -#ifdef EBCDIC -EXTCONST unsigned char PL_freq[] = {/* EBCDIC frequencies for mixed English/C */ - 1, 2, 84, 151, 154, 155, 156, 157, - 165, 246, 250, 3, 158, 7, 18, 29, - 40, 51, 62, 73, 85, 96, 107, 118, - 129, 140, 147, 148, 149, 150, 152, 153, - 255, 6, 8, 9, 10, 11, 12, 13, - 14, 15, 24, 25, 26, 27, 28, 226, - 29, 30, 31, 32, 33, 43, 44, 45, - 46, 47, 48, 49, 50, 76, 77, 78, - 79, 80, 81, 82, 83, 84, 85, 86, - 87, 94, 95, 234, 181, 233, 187, 190, - 180, 96, 97, 98, 99, 100, 101, 102, - 104, 112, 182, 174, 236, 232, 229, 103, - 228, 226, 114, 115, 116, 117, 118, 119, - 120, 121, 122, 235, 176, 230, 194, 162, - 130, 131, 132, 133, 134, 135, 136, 137, - 138, 139, 201, 205, 163, 217, 220, 224, - 5, 248, 227, 244, 242, 255, 241, 231, - 240, 253, 16, 197, 19, 20, 21, 187, - 23, 169, 210, 245, 237, 249, 247, 239, - 168, 252, 34, 196, 36, 37, 38, 39, - 41, 42, 251, 254, 238, 223, 221, 213, - 225, 177, 52, 53, 54, 55, 56, 57, - 58, 59, 60, 61, 63, 64, 65, 66, - 67, 68, 69, 70, 71, 72, 74, 75, - 205, 208, 186, 202, 200, 218, 198, 179, - 178, 214, 88, 89, 90, 91, 92, 93, - 217, 166, 170, 207, 199, 209, 206, 204, - 160, 212, 105, 106, 108, 109, 110, 111, - 203, 113, 216, 215, 192, 175, 193, 243, - 172, 161, 123, 124, 125, 126, 127, 128, - 222, 219, 211, 195, 188, 193, 185, 184, - 191, 183, 141, 142, 143, 144, 145, 146 -}; -#else /* ascii rather than ebcdic */ -EXTCONST unsigned char PL_freq[] = { /* letter frequencies for mixed English/C */ - 1, 2, 84, 151, 154, 155, 156, 157, - 165, 246, 250, 3, 158, 7, 18, 29, - 40, 51, 62, 73, 85, 96, 107, 118, - 129, 140, 147, 148, 149, 150, 152, 153, - 255, 182, 224, 205, 174, 176, 180, 217, - 233, 232, 236, 187, 235, 228, 234, 226, - 222, 219, 211, 195, 188, 193, 185, 184, - 191, 183, 201, 229, 181, 220, 194, 162, - 163, 208, 186, 202, 200, 218, 198, 179, - 178, 214, 166, 170, 207, 199, 209, 206, - 204, 160, 212, 216, 215, 192, 175, 173, - 243, 172, 161, 190, 203, 189, 164, 230, - 167, 248, 227, 244, 242, 255, 241, 231, - 240, 253, 169, 210, 245, 237, 249, 247, - 239, 168, 252, 251, 254, 238, 223, 221, - 213, 225, 177, 197, 171, 196, 159, 4, - 5, 6, 8, 9, 10, 11, 12, 13, - 14, 15, 16, 17, 19, 20, 21, 22, - 23, 24, 25, 26, 27, 28, 30, 31, - 32, 33, 34, 35, 36, 37, 38, 39, - 41, 42, 43, 44, 45, 46, 47, 48, - 49, 50, 52, 53, 54, 55, 56, 57, - 58, 59, 60, 61, 63, 64, 65, 66, - 67, 68, 69, 70, 71, 72, 74, 75, - 76, 77, 78, 79, 80, 81, 82, 83, - 86, 87, 88, 89, 90, 91, 92, 93, - 94, 95, 97, 98, 99, 100, 101, 102, - 103, 104, 105, 106, 108, 109, 110, 111, - 112, 113, 114, 115, 116, 117, 119, 120, - 121, 122, 123, 124, 125, 126, 127, 128, - 130, 131, 132, 133, 134, 135, 136, 137, - 138, 139, 141, 142, 143, 144, 145, 146 -}; -#endif -#else -EXTCONST unsigned char PL_freq[]; -#endif - /* Although only used for debugging, these constants must be available in * non-debugging builds too, since they're used in ext/re/re_exec.c, * which has DEBUGGING enabled always */ #ifdef DOINIT EXTCONST char* const PL_block_type[] = { - "NULL", - "WHEN", - "BLOCK", - "GIVEN", - "LOOP_ARY", - "LOOP_LAZYSV", - "LOOP_LAZYIV", - "LOOP_LIST", - "LOOP_PLAIN", - "SUB", - "FORMAT", - "EVAL", - "SUBST" + "NULL", + "WHEN", + "BLOCK", + "GIVEN", + "LOOP_ARY", + "LOOP_LAZYSV", + "LOOP_LAZYIV", + "LOOP_LIST", + "LOOP_PLAIN", + "SUB", + "FORMAT", + "EVAL", + "SUBST", + "DEFER" }; #else EXTCONST char* PL_block_type[]; @@ -5110,115 +5369,97 @@ EXTCONST char* PL_block_type[]; #ifdef DOINIT EXTCONST char PL_bincompat_options[] = # ifdef DEBUG_LEAKING_SCALARS - " DEBUG_LEAKING_SCALARS" + " DEBUG_LEAKING_SCALARS" # endif # ifdef DEBUG_LEAKING_SCALARS_FORK_DUMP - " DEBUG_LEAKING_SCALARS_FORK_DUMP" -# endif -# ifdef FCRYPT - " FCRYPT" + " DEBUG_LEAKING_SCALARS_FORK_DUMP" # endif # ifdef HAS_TIMES - " HAS_TIMES" + " HAS_TIMES" # endif # ifdef HAVE_INTERP_INTERN - " HAVE_INTERP_INTERN" + " HAVE_INTERP_INTERN" # endif # ifdef MULTIPLICITY - " MULTIPLICITY" + " MULTIPLICITY" # endif # ifdef MYMALLOC - " MYMALLOC" + " MYMALLOC" # endif # ifdef PERLIO_LAYERS - " PERLIO_LAYERS" + " PERLIO_LAYERS" # endif # ifdef PERL_DEBUG_READONLY_COW - " PERL_DEBUG_READONLY_COW" + " PERL_DEBUG_READONLY_COW" # endif # ifdef PERL_DEBUG_READONLY_OPS - " PERL_DEBUG_READONLY_OPS" -# endif -# ifdef PERL_GLOBAL_STRUCT - " PERL_GLOBAL_STRUCT" -# endif -# ifdef PERL_GLOBAL_STRUCT_PRIVATE - " PERL_GLOBAL_STRUCT_PRIVATE" -# endif -# ifdef PERL_IMPLICIT_CONTEXT - " PERL_IMPLICIT_CONTEXT" + " PERL_DEBUG_READONLY_OPS" # endif # ifdef PERL_IMPLICIT_SYS - " PERL_IMPLICIT_SYS" + " PERL_IMPLICIT_SYS" # endif # ifdef PERL_MICRO - " PERL_MICRO" -# endif -# ifdef PERL_NEED_APPCTX - " PERL_NEED_APPCTX" -# endif -# ifdef PERL_NEED_TIMESBASE - " PERL_NEED_TIMESBASE" + " PERL_MICRO" # endif # ifdef PERL_POISON - " PERL_POISON" + " PERL_POISON" # endif # ifdef PERL_SAWAMPERSAND - " PERL_SAWAMPERSAND" + " PERL_SAWAMPERSAND" # endif # ifdef PERL_TRACK_MEMPOOL - " PERL_TRACK_MEMPOOL" + " PERL_TRACK_MEMPOOL" # endif # ifdef PERL_USES_PL_PIDSTATUS - " PERL_USES_PL_PIDSTATUS" + " PERL_USES_PL_PIDSTATUS" # endif # ifdef USE_64_BIT_ALL - " USE_64_BIT_ALL" + " USE_64_BIT_ALL" # endif # ifdef USE_64_BIT_INT - " USE_64_BIT_INT" + " USE_64_BIT_INT" # endif # ifdef USE_IEEE - " USE_IEEE" + " USE_IEEE" # endif # ifdef USE_ITHREADS - " USE_ITHREADS" + " USE_ITHREADS" # endif # ifdef USE_LARGE_FILES - " USE_LARGE_FILES" + " USE_LARGE_FILES" # endif # ifdef USE_LOCALE_COLLATE - " USE_LOCALE_COLLATE" + " USE_LOCALE_COLLATE" # endif # ifdef USE_LOCALE_NUMERIC - " USE_LOCALE_NUMERIC" + " USE_LOCALE_NUMERIC" # endif # ifdef USE_LOCALE_TIME - " USE_LOCALE_TIME" + " USE_LOCALE_TIME" # endif # ifdef USE_LONG_DOUBLE - " USE_LONG_DOUBLE" + " USE_LONG_DOUBLE" # endif # ifdef USE_PERLIO - " USE_PERLIO" + " USE_PERLIO" # endif # ifdef USE_QUADMATH - " USE_QUADMATH" + " USE_QUADMATH" # endif # ifdef USE_REENTRANT_API - " USE_REENTRANT_API" + " USE_REENTRANT_API" # endif # ifdef USE_SOCKS - " USE_SOCKS" + " USE_SOCKS" # endif # ifdef VMS_DO_SOCKETS - " VMS_DO_SOCKETS" + " VMS_DO_SOCKETS" # endif # ifdef VMS_SHORTEN_LONG_SYMBOLS - " VMS_SHORTEN_LONG_SYMBOLS" + " VMS_SHORTEN_LONG_SYMBOLS" # endif # ifdef VMS_WE_ARE_CASE_SENSITIVE - " VMS_SYMBOL_CASE_AS_IS" + " VMS_SYMBOL_CASE_AS_IS" # endif ""; #else @@ -5257,6 +5498,24 @@ EXTCONST char *const PL_phase_names[] = { EXTCONST char *const PL_phase_names[]; #endif +/* +=for apidoc_section $utility + +=for apidoc phase_name + +Returns the given phase's name as a NUL-terminated string. + +For example, to print a stack trace that includes the current +interpreter phase you might do: + + const char* phase_name = phase_name(PL_phase); + mess("This is weird. (Perl phase: %s)", phase_name); + +=cut +*/ + +#define phase_name(phase) (PL_phase_names[phase]) + #ifndef PERL_CORE /* Do not use this macro. It only exists for extensions that rely on PL_dirty * instead of using the newer PL_phase, which provides everything PL_dirty @@ -5307,8 +5566,7 @@ typedef enum { #define KEY_sigvar 0xFFFF /* fake keyword representing a signature var */ /* Hints are now stored in a dedicated U32, so the bottom 8 bits are no longer - special and there is no need for HINT_PRIVATE_MASK for COPs - However, bitops store HINT_INTEGER in their op_private. + special and there is no need for HINT_PRIVATE_MASK for COPs. NOTE: The typical module using these has the bit value hard-coded, so don't blindly change the values of these. @@ -5353,17 +5611,23 @@ typedef enum { #define HINT_RE_FLAGS 0x02000000 /* re '/xism' pragma */ -#define HINT_FEATURE_MASK 0x1c000000 /* 3 bits for feature bundles */ +#define HINT_FEATURE_MASK 0x3c000000 /* 4 bits for feature bundles */ - /* Note: Used for HINT_M_VMSISH_*, - currently defined by vms/vmsish.h: - 0x40000000 - 0x80000000 - */ + /* Note: Used for HINT_M_VMSISH_*, + currently defined by vms/vmsish.h: + 0x40000000 + 0x80000000 + */ -/* The following are stored in $^H{sort}, not in PL_hints */ -#define HINT_SORT_STABLE 0x00000100 /* sort styles */ -#define HINT_SORT_UNSTABLE 0x00000200 +#define HINT_ALL_STRICT HINT_STRICT_REFS \ + | HINT_STRICT_SUBS \ + | HINT_STRICT_VARS + +#ifdef USE_STRICT_BY_DEFAULT +#define HINTS_DEFAULT HINT_ALL_STRICT +#else +#define HINTS_DEFAULT 0 +#endif /* flags for PL_sawampersand */ @@ -5373,7 +5637,7 @@ typedef enum { #ifndef PERL_SAWAMPERSAND # define PL_sawampersand \ - (SAWAMPERSAND_LEFT|SAWAMPERSAND_MIDDLE|SAWAMPERSAND_RIGHT) + (SAWAMPERSAND_LEFT|SAWAMPERSAND_MIDDLE|SAWAMPERSAND_RIGHT) #endif /* Used for debugvar magic */ @@ -5402,19 +5666,19 @@ struct perl_debug_pad { #define PERL_DEBUG_PAD(i) &(PL_debug_pad.pad[i]) #define PERL_DEBUG_PAD_ZERO(i) (SvPVX(PERL_DEBUG_PAD(i))[0] = 0, \ - (((XPV*) SvANY(PERL_DEBUG_PAD(i)))->xpv_cur = 0), \ - PERL_DEBUG_PAD(i)) + (((XPV*) SvANY(PERL_DEBUG_PAD(i)))->xpv_cur = 0), \ + PERL_DEBUG_PAD(i)) /* Enable variables which are pointers to functions */ typedef void (*peep_t)(pTHX_ OP* o); typedef regexp* (*regcomp_t) (pTHX_ char* exp, char* xend, PMOP* pm); typedef I32 (*regexec_t) (pTHX_ regexp* prog, char* stringarg, - char* strend, char* strbeg, I32 minend, - SV* screamer, void* data, U32 flags); + char* strend, char* strbeg, I32 minend, + SV* screamer, void* data, U32 flags); typedef char* (*re_intuit_start_t) (pTHX_ regexp *prog, SV *sv, - char *strpos, char *strend, - U32 flags, - re_scream_pos_data *d); + char *strpos, char *strend, + U32 flags, + re_scream_pos_data *d); typedef SV* (*re_intuit_string_t) (pTHX_ regexp *prog); typedef void (*regfree_t) (pTHX_ struct regexp* r); typedef regexp* (*regdupe_t) (pTHX_ const regexp* r, CLONE_PARAMS *param); @@ -5500,34 +5764,6 @@ EXTCONST U16 PL_interp_size_5_18_0 INIT(PERL_INTERPRETER_SIZE_UPTO_MEMBER(PERL_LAST_5_18_0_INTERP_MEMBER)); -# ifdef PERL_GLOBAL_STRUCT -/* MULTIPLICITY is automatically defined when PERL_GLOBAL_STRUCT is defined, - hence it's safe and sane to nest this within #ifdef MULTIPLICITY */ - -struct perl_vars { -# include "perlvars.h" -}; - -EXTCONST U16 PL_global_struct_size - INIT(sizeof(struct perl_vars)); - -# ifdef PERL_CORE -# ifndef PERL_GLOBAL_STRUCT_PRIVATE -EXT struct perl_vars PL_Vars; -EXT struct perl_vars *PL_VarsPtr INIT(&PL_Vars); -# undef PERL_GET_VARS -# define PERL_GET_VARS() PL_VarsPtr -# endif /* !PERL_GLOBAL_STRUCT_PRIVATE */ -# else /* PERL_CORE */ -# if !defined(__GNUC__) || !defined(WIN32) -EXT -# endif /* WIN32 */ -struct perl_vars *PL_VarsPtr; -# define PL_Vars (*((PL_VarsPtr) \ - ? PL_VarsPtr : (PL_VarsPtr = Perl_GetVars(aTHX)))) -# endif /* PERL_CORE */ -# endif /* PERL_GLOBAL_STRUCT */ - /* Done with PERLVAR macros for now ... */ # undef PERLVAR # undef PERLVARA @@ -5600,13 +5836,11 @@ END_EXTERN_C define HAVE_INTERP_INTERN */ #include "embed.h" -#ifndef PERL_GLOBAL_STRUCT START_EXTERN_C # include "perlvars.h" END_EXTERN_C -#endif #undef PERLVAR #undef PERLVARA @@ -5648,8 +5882,14 @@ EXTCONST runops_proc_t PL_runops_dbg #define PERL_MAGIC_READONLY_ACCEPTABLE 0x40 #define PERL_MAGIC_VALUE_MAGIC 0x80 #define PERL_MAGIC_VTABLE_MASK 0x3F + +/* can this type of magic be attached to a readonly SV? */ #define PERL_MAGIC_TYPE_READONLY_ACCEPTABLE(t) \ (PL_magic_data[(U8)(t)] & PERL_MAGIC_READONLY_ACCEPTABLE) + +/* Is this type of magic container magic (%ENV, $1 etc), + * or value magic (pos, taint etc)? + */ #define PERL_MAGIC_TYPE_IS_VALUE_MAGIC(t) \ (PL_magic_data[(U8)(t)] & PERL_MAGIC_VALUE_MAGIC) @@ -5668,7 +5908,7 @@ EXTCONST U8 PL_magic_data[256]; #endif #ifdef DOINIT - /* NL IV NV PV INV PI PN MG RX GV LV AV HV CV FM IO */ + /* NL IV NV PV INV PI PN MG RX GV LV AV HV CV FM IO */ EXTCONST bool PL_valid_types_IVX[] = { 0, 1, 0, 0, 0, 1, 1, 1, 0, 1, 1, 0, 0, 0, 0, 0 }; EXTCONST bool @@ -5682,6 +5922,22 @@ PL_valid_types_IV_set[] = { 0, 1, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, 1, 1 }; EXTCONST bool PL_valid_types_NV_set[] = { 0, 0, 1, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0 }; +EXTCONST U8 +PL_deBruijn_bitpos_tab32[] = { + /* https://graphics.stanford.edu/~seander/bithacks.html#IntegerLogDeBruijn */ + 0, 1, 28, 2, 29, 14, 24, 3, 30, 22, 20, 15, 25, 17, 4, 8, + 31, 27, 13, 23, 21, 19, 16, 7, 26, 12, 18, 6, 11, 5, 10, 9 +}; + +EXTCONST U8 +PL_deBruijn_bitpos_tab64[] = { + /* https://stackoverflow.com/questions/11376288/fast-computing-of-log2-for-64-bit-integers */ + 63, 0, 58, 1, 59, 47, 53, 2, 60, 39, 48, 27, 54, 33, 42, 3, + 61, 51, 37, 40, 49, 18, 28, 20, 55, 30, 34, 11, 43, 14, 22, 4, + 62, 57, 46, 52, 38, 26, 32, 41, 50, 36, 17, 19, 29, 10, 13, 21, + 56, 45, 25, 31, 35, 16, 9, 12, 44, 24, 15, 8, 23, 7, 6, 5 +}; + #else EXTCONST bool PL_valid_types_IVX[]; @@ -5690,9 +5946,17 @@ EXTCONST bool PL_valid_types_PVX[]; EXTCONST bool PL_valid_types_RV[]; EXTCONST bool PL_valid_types_IV_set[]; EXTCONST bool PL_valid_types_NV_set[]; +EXTCONST U8 PL_deBruijn_bitpos_tab32[]; +EXTCONST U8 PL_deBruijn_bitpos_tab64[]; #endif +/* The constants for using PL_deBruijn_bitpos_tab */ +#define PERL_deBruijnMagic32_ 0x077CB531 +#define PERL_deBruijnShift32_ 27 +#define PERL_deBruijnMagic64_ 0x07EDD5E59A4E28C2 +#define PERL_deBruijnShift64_ 58 + /* In C99 we could use designated (named field) union initializers. * In C89 we need to initialize the member declared first. * In C++ we need extern C initializers. @@ -5777,35 +6041,51 @@ static U8 utf8d_C9[] = { /* This is a version of the above table customized for Perl that doesn't * exclude surrogates and accepts start bytes up through FD (FE on 64-bit * machines). The classes have been renumbered so that the patterns are more - * evident in the table. The class numbers for start bytes are constrained so - * that they can be used as a shift count for masking off the leading one bits. + * evident in the table. The class numbers are structured so the values are: + * + * a) UTF-8 invariant code points + * 0 + * b) Start bytes that always lead to either overlongs or some class of code + * point that needs outside intervention for handling (such as to raise a + * warning) + * 1 + * c) Start bytes that never lead to one of the above + * number of bytes in complete sequence + * d) Rest of start bytes (they can be resolved through this algorithm) and + * continuation bytes + * arbitrary class number chosen to not conflict with the above + * classes, and to index into the remaining table + * * It would make the code simpler if start byte FF could also be handled, but - * doing so would mean adding nodes for each of continuation bytes 6-12 - * remaining, and two more nodes for overlong detection (a total of 9), and - * there is room only for 4 more nodes unless we make the array U16 instead of - * U8. + * doing so would mean adding two more classes (one from splitting 80 from 81, + * and one for FF), and nodes for each of 6 new continuation bytes. The + * current table has 436 entries; the new one would require 140 more = 576 (2 + * additional classes for each of the 10 existing nodes, and 20 for each of 6 + * new nodes. The array would have to be made U16 instead of U8, not worth it + * for this rarely encountered case * * The classes are - * 00-7F 0 + * 00-7F 0 Always legal, single byte sequence * 80-81 7 Not legal immediately after start bytes E0 F0 F8 FC * FE * 82-83 8 Not legal immediately after start bytes E0 F0 F8 FC * 84-87 9 Not legal immediately after start bytes E0 F0 F8 * 88-8F 10 Not legal immediately after start bytes E0 F0 * 90-9F 11 Not legal immediately after start byte E0 - * A0-BF 12 - * C0,C1 1 - * C2-DF 2 - * E0 13 - * E1-EF 3 - * F0 14 - * F1-F7 4 - * F8 15 - * F9-FB 5 - * FC 16 - * FD 6 - * FE 17 (or 1 on 32-bit machines, since it overflows) - * FF 1 + * A0-BF 12 Always legal continuation byte + * C0,C1 1 Not legal: overlong + * C2-DF 2 Legal start byte for two byte sequences + * E0 13 Some sequences are overlong; others legal + * E1-EF 3 Legal start byte for three byte sequences + * F0 14 Some sequences are overlong; others legal + * F1-F7 4 Legal start byte for four byte sequences + * F8 15 Some sequences are overlong; others legal + * F9-FB 5 Legal start byte for five byte sequences + * FC 16 Some sequences are overlong; others legal + * FD 6 Legal start byte for six byte sequences + * FE 17 Some sequences are overlong; others legal + * (is 1 on 32-bit machines, since it overflows) + * FF 1 Need to handle specially */ EXTCONST U8 PL_extended_utf8_dfa_tab[] = { @@ -5855,21 +6135,22 @@ EXTCONST U8 PL_extended_utf8_dfa_tab[] = { * N10 Start byte is FE. Continuation bytes 80-81 are illegal (overlong); * the other continuations transition to N5 * 1 Reject. All transitions not mentioned above (except the single - * byte ones (as they are always legal) are to this state. + * byte ones (as they are always legal)) are to this state. */ -# define NUM_CLASSES 18 -# define N0 0 -# define N1 ((N0) + NUM_CLASSES) -# define N2 ((N1) + NUM_CLASSES) -# define N3 ((N2) + NUM_CLASSES) -# define N4 ((N3) + NUM_CLASSES) -# define N5 ((N4) + NUM_CLASSES) -# define N6 ((N5) + NUM_CLASSES) -# define N7 ((N6) + NUM_CLASSES) -# define N8 ((N7) + NUM_CLASSES) -# define N9 ((N8) + NUM_CLASSES) -# define N10 ((N9) + NUM_CLASSES) +# if defined(PERL_CORE) +# define NUM_CLASSES 18 +# define N0 0 +# define N1 ((N0) + NUM_CLASSES) +# define N2 ((N1) + NUM_CLASSES) +# define N3 ((N2) + NUM_CLASSES) +# define N4 ((N3) + NUM_CLASSES) +# define N5 ((N4) + NUM_CLASSES) +# define N6 ((N5) + NUM_CLASSES) +# define N7 ((N6) + NUM_CLASSES) +# define N8 ((N7) + NUM_CLASSES) +# define N9 ((N8) + NUM_CLASSES) +# define N10 ((N9) + NUM_CLASSES) /*Class: 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 */ /*N0*/ 0, 1,N1,N2,N3,N4,N5, 1, 1, 1, 1, 1, 1,N6,N7,N8,N9,N10, @@ -5997,30 +6278,30 @@ EXTCONST U8 PL_strict_utf8_dfa_tab[] = { * byte ones (as they are always legal) are to this state. */ -# undef N0 -# undef N1 -# undef N2 -# undef N3 -# undef N4 -# undef N5 -# undef N6 -# undef N7 -# undef N8 -# undef N9 -# undef NUM_CLASSES -# define NUM_CLASSES 19 -# define N0 0 -# define N1 ((N0) + NUM_CLASSES) -# define N2 ((N1) + NUM_CLASSES) -# define N3 ((N2) + NUM_CLASSES) -# define N4 ((N3) + NUM_CLASSES) -# define N5 ((N4) + NUM_CLASSES) -# define N6 ((N5) + NUM_CLASSES) -# define N7 ((N6) + NUM_CLASSES) -# define N8 ((N7) + NUM_CLASSES) -# define N9 ((N8) + NUM_CLASSES) -# define N10 ((N9) + NUM_CLASSES) -# define N11 ((N10) + NUM_CLASSES) +# undef N0 +# undef N1 +# undef N2 +# undef N3 +# undef N4 +# undef N5 +# undef N6 +# undef N7 +# undef N8 +# undef N9 +# undef NUM_CLASSES +# define NUM_CLASSES 19 +# define N0 0 +# define N1 ((N0) + NUM_CLASSES) +# define N2 ((N1) + NUM_CLASSES) +# define N3 ((N2) + NUM_CLASSES) +# define N4 ((N3) + NUM_CLASSES) +# define N5 ((N4) + NUM_CLASSES) +# define N6 ((N5) + NUM_CLASSES) +# define N7 ((N6) + NUM_CLASSES) +# define N8 ((N7) + NUM_CLASSES) +# define N9 ((N8) + NUM_CLASSES) +# define N10 ((N9) + NUM_CLASSES) +# define N11 ((N10) + NUM_CLASSES) /*Class: 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 */ /*N0*/ 0, 1, N1, N2, N4, N7, N6, N3, N5, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, @@ -6100,24 +6381,24 @@ EXTCONST U8 PL_c9_utf8_dfa_tab[] = { * byte ones (as they are always legal) are to this state. */ -# undef N0 -# undef N1 -# undef N2 -# undef N3 -# undef N4 -# undef N5 -# undef N6 -# undef N7 -# undef NUM_CLASSES -# define NUM_CLASSES 12 -# define N0 0 -# define N1 ((N0) + NUM_CLASSES) -# define N2 ((N1) + NUM_CLASSES) -# define N3 ((N2) + NUM_CLASSES) -# define N4 ((N3) + NUM_CLASSES) -# define N5 ((N4) + NUM_CLASSES) -# define N6 ((N5) + NUM_CLASSES) -# define N7 ((N6) + NUM_CLASSES) +# undef N0 +# undef N1 +# undef N2 +# undef N3 +# undef N4 +# undef N5 +# undef N6 +# undef N7 +# undef NUM_CLASSES +# define NUM_CLASSES 12 +# define N0 0 +# define N1 ((N0) + NUM_CLASSES) +# define N2 ((N1) + NUM_CLASSES) +# define N3 ((N2) + NUM_CLASSES) +# define N4 ((N3) + NUM_CLASSES) +# define N5 ((N4) + NUM_CLASSES) +# define N6 ((N5) + NUM_CLASSES) +# define N7 ((N6) + NUM_CLASSES) /*Class: 0 1 2 3 4 5 6 7 8 9 10 11 */ /*N0*/ 0, 1, N1, N2, N5, N7, N3, N4, N6, 1, 1, 1, @@ -6131,6 +6412,7 @@ EXTCONST U8 PL_c9_utf8_dfa_tab[] = { /*N7*/ 1, 1, 1, 1, 1, 1, 1, 1, 1, N2, 1, 1, }; +# endif /* defined(PERL_CORE) */ # else /* End of is DOINIT */ EXTCONST U8 PL_extended_utf8_dfa_tab[]; @@ -6140,22 +6422,6 @@ EXTCONST U8 PL_c9_utf8_dfa_tab[]; # endif #endif /* end of isn't EBCDIC */ -#ifndef PERL_NO_INLINE_FUNCTIONS -/* Static inline funcs that depend on includes and declarations above. - Some of these reference functions in the perl object files, and some - compilers aren't smart enough to eliminate unused static inline - functions, so including this file in source code can cause link errors - even if the source code uses none of the functions. Hence including these - can be suppressed by setting PERL_NO_INLINE_FUNCTIONS. Doing this will - (obviously) result in unworkable XS code, but allows simple probing code - to continue to work, because it permits tests to include the perl headers - for definitions without creating a link dependency on the perl library - (which may not exist yet). -*/ - -# include "inline.h" -#endif - #include "overload.h" END_EXTERN_C @@ -6219,16 +6485,16 @@ typedef struct am_table_short AMTS; #endif /* _FASTMATH */ #define PERLDB_ALL (PERLDBf_SUB | PERLDBf_LINE | \ - PERLDBf_NOOPT | PERLDBf_INTER | \ - PERLDBf_SUBLINE| PERLDBf_SINGLE| \ - PERLDBf_NAMEEVAL| PERLDBf_NAMEANON | \ - PERLDBf_SAVESRC) - /* No _NONAME, _GOTO */ + PERLDBf_NOOPT | PERLDBf_INTER | \ + PERLDBf_SUBLINE| PERLDBf_SINGLE| \ + PERLDBf_NAMEEVAL| PERLDBf_NAMEANON | \ + PERLDBf_SAVESRC) + /* No _NONAME, _GOTO */ #define PERLDBf_SUB 0x01 /* Debug sub enter/exit */ #define PERLDBf_LINE 0x02 /* Keep line # */ #define PERLDBf_NOOPT 0x04 /* Switch off optimizations */ #define PERLDBf_INTER 0x08 /* Preserve more data for - later inspections */ + later inspections */ #define PERLDBf_SUBLINE 0x10 /* Keep subr source lines */ #define PERLDBf_SINGLE 0x20 /* Start with single-step on */ #define PERLDBf_NONAME 0x40 /* For _SUB: no name of the subr */ @@ -6291,7 +6557,7 @@ typedef struct am_table_short AMTS; cBOOL(PL_hints & (HINT_LOCALE|HINT_LOCALE_PARTIAL)) /* -=head1 Locale-related functions and macros +=for apidoc_section $locale =for apidoc Amn|bool|IN_LOCALE @@ -6359,7 +6625,7 @@ the plain locale pragma without a parameter (S>) is in effect. * argument; the 2nd, is a pointer to the first byte of the UTF-8 encoded * string, and an end position which it won't try to read past */ # define _CHECK_AND_OUTPUT_WIDE_LOCALE_CP_MSG(cp) \ - STMT_START { \ + STMT_START { \ if (! PL_in_utf8_CTYPE_locale && ckWARN(WARN_LOCALE)) { \ Perl_warner(aTHX_ packWARN(WARN_LOCALE), \ "Wide character (U+%" UVXf ") in %s",\ @@ -6368,7 +6634,7 @@ the plain locale pragma without a parameter (S>) is in effect. } STMT_END # define _CHECK_AND_OUTPUT_WIDE_LOCALE_UTF8_MSG(s, send) \ - STMT_START { /* Check if to warn before doing the conversion work */\ + STMT_START { /* Check if to warn before doing the conversion work */\ if (! PL_in_utf8_CTYPE_locale && ckWARN(WARN_LOCALE)) { \ UV cp = utf8_to_uvchr_buf((U8 *) (s), (U8 *) (send), NULL); \ Perl_warner(aTHX_ packWARN(WARN_LOCALE), \ @@ -6401,89 +6667,135 @@ the plain locale pragma without a parameter (S>) is in effect. #endif -/* Locale/thread synchronization macros. These aren't needed if using - * thread-safe locale operations, except if something is broken */ -#if defined(USE_LOCALE) \ - && defined(USE_ITHREADS) \ - && (! defined(USE_THREAD_SAFE_LOCALE) || defined(TS_W32_BROKEN_LOCALECONV)) +/* Locale/thread synchronization macros. */ +#if ! ( defined(USE_LOCALE) \ + && defined(USE_ITHREADS) \ + && ( ! defined(USE_THREAD_SAFE_LOCALE) \ + || ( defined(HAS_LOCALECONV) \ + && ( ! defined(HAS_LOCALECONV_L) \ + || defined(TS_W32_BROKEN_LOCALECONV))) \ + || ( defined(HAS_NL_LANGINFO) \ + && ! defined(HAS_THREAD_SAFE_NL_LANGINFO_L)) \ + || (defined(HAS_MBLEN) && ! defined(HAS_MBRLEN)) \ + || (defined(HAS_MBTOWC) && ! defined(HAS_MBRTOWC)) \ + || (defined(HAS_WCTOMB) && ! defined(HAS_WCRTOMB)))) -/* We have a locale object holding the 'C' locale for Posix 2008 */ -# ifndef USE_POSIX_2008_LOCALE -# define _LOCALE_TERM_POSIX_2008 NOOP -# else -# define _LOCALE_TERM_POSIX_2008 \ - STMT_START { \ - if (PL_C_locale_obj) { \ - /* Make sure we aren't using the locale \ - * space we are about to free */ \ - uselocale(LC_GLOBAL_LOCALE); \ - freelocale(PL_C_locale_obj); \ - PL_C_locale_obj = (locale_t) NULL; \ - } \ - } STMT_END -# endif +/* The whole expression just above was complemented, so here we have no need + * for thread synchronization, most likely it would be that this isn't a + * threaded build. */ +# define LOCALE_INIT +# define LOCALE_TERM +# define LC_NUMERIC_LOCK(cond) NOOP +# define LC_NUMERIC_UNLOCK NOOP +# define LOCALECONV_LOCK NOOP +# define LOCALECONV_UNLOCK NOOP +# define LOCALE_READ_LOCK NOOP +# define LOCALE_READ_UNLOCK NOOP +# define MBLEN_LOCK NOOP +# define MBLEN_UNLOCK NOOP +# define MBTOWC_LOCK NOOP +# define MBTOWC_UNLOCK NOOP +# define NL_LANGINFO_LOCK NOOP +# define NL_LANGINFO_UNLOCK NOOP +# define SETLOCALE_LOCK NOOP +# define SETLOCALE_UNLOCK NOOP +# define WCTOMB_LOCK NOOP +# define WCTOMB_UNLOCK NOOP +#else -/* This is used as a generic lock for locale operations. For example this is - * used when calling nl_langinfo() so that another thread won't zap the - * contents of its buffer before it gets saved; and it's called when changing - * the locale of LC_MESSAGES. On some systems the latter can cause the - * nl_langinfo buffer to be zapped under a race condition. - * - * If combined with LC_NUMERIC_LOCK, calls to this and its corresponding unlock - * should be contained entirely within the locked portion of LC_NUMERIC. This - * mutex should be used only in very short sections of code, while - * LC_NUMERIC_LOCK may span more operations. By always following this - * convention, deadlock should be impossible. But if necessary, the two - * mutexes could be combined. - * - * Actually, the two macros just below with the '_V' suffixes are used in just - * a few places where there is a broken localeconv(), but otherwise things are - * thread safe, and hence don't need locking. Just below LOCALE_LOCK and - * LOCALE_UNLOCK are defined in terms of these for use everywhere else */ -# define LOCALE_LOCK_V \ + /* Here, we will need critical sections in locale handling, because one or + * more of the above conditions are true. This could be because the + * platform doesn't have thread-safe locales, or that at least one of the + * locale-dependent functions in the core isn't thread-safe. The latter + * case is generally because they return a pointer to a static buffer, which + * may be per-process instead of per-thread. There are supposedly + * re-entrant, safe versions for all of them Perl currently uses (which the + * #if above checks for), but most platforms don't have all the needed ones + * available, and the Posix standard doesn't require nl_langinfo_l() to be + * fully thread-safe, so a Configure probe was written. localeconv_l() is + * uncommon, and judging by bug reports on the web, some earlier library + * localeconv_l versions were broken, so perhaps a probe is in order for + * that, but it would be a pain to write. + * + * On non-thread-safe systems, some of the above functions are vulnerable to + * races should another thread get control and change the locale in the + * middle of their execution. + * + * We currently use a single mutex for all these cases. This solves both + * the problem of another thread changing the locale, and the buffer being + * overwritten (the code copies the results to a safe place before releasing + * the mutex). Ideally, for locale thread-safe platforms where the only + * issue is another thread clobbering the function's static buffer, there + * would be a separate mutex for each such buffer. Otherwise, things get + * locked that don't need to. But, it is not expected that any of these + * will be called frequently, and the locked interval should be short, and + * modern platforms will have reentrant versions (which don't lock) for + * almost all of them, so khw thinks a single mutex should suffice. */ +# define LOCALE_LOCK_ \ STMT_START { \ DEBUG_Lv(PerlIO_printf(Perl_debug_log, \ "%s: %d: locking locale\n", __FILE__, __LINE__)); \ MUTEX_LOCK(&PL_locale_mutex); \ } STMT_END -# define LOCALE_UNLOCK_V \ +# define LOCALE_UNLOCK_ \ STMT_START { \ DEBUG_Lv(PerlIO_printf(Perl_debug_log, \ "%s: %d: unlocking locale\n", __FILE__, __LINE__)); \ MUTEX_UNLOCK(&PL_locale_mutex); \ } STMT_END -/* On windows, we just need the mutex for LOCALE_LOCK */ -# ifdef TS_W32_BROKEN_LOCALECONV -# define LOCALE_LOCK NOOP -# define LOCALE_UNLOCK NOOP -# define LOCALE_INIT MUTEX_INIT(&PL_locale_mutex); -# define LOCALE_TERM MUTEX_DESTROY(&PL_locale_mutex) -# define LC_NUMERIC_LOCK(cond) -# define LC_NUMERIC_UNLOCK + /* We do define a different macro for each case; then if we want to have + * separate mutexes for some of them, the only changes needed are here. + * Define just the necessary macros. The compiler should then croak if the + * #ifdef's in the code are incorrect */ +# if defined(HAS_LOCALECONV) && ( ! defined(HAS_POSIX_2008_LOCALE) \ + || ! defined(HAS_LOCALECONV_L) \ + || defined(TS_W32_BROKEN_LOCALECONV)) +# define LOCALECONV_LOCK LOCALE_LOCK_ +# define LOCALECONV_UNLOCK LOCALE_UNLOCK_ +# endif +# if defined(HAS_NL_LANGINFO) && ( ! defined(HAS_THREAD_SAFE_NL_LANGINFO_L) \ + || ! defined(HAS_POSIX_2008_LOCALE)) +# define NL_LANGINFO_LOCK LOCALE_LOCK_ +# define NL_LANGINFO_UNLOCK LOCALE_UNLOCK_ +# endif +# if defined(HAS_MBLEN) && ! defined(HAS_MBRLEN) +# define MBLEN_LOCK LOCALE_LOCK_ +# define MBLEN_UNLOCK LOCALE_UNLOCK_ +# endif +# if defined(HAS_MBTOWC) && ! defined(HAS_MBRTOWC) +# define MBTOWC_LOCK LOCALE_LOCK_ +# define MBTOWC_UNLOCK LOCALE_UNLOCK_ +# endif +# if defined(HAS_WCTOMB) && ! defined(HAS_WCRTOMB) +# define WCTOMB_LOCK LOCALE_LOCK_ +# define WCTOMB_UNLOCK LOCALE_UNLOCK_ +# endif +# if defined(USE_THREAD_SAFE_LOCALE) + /* On locale thread-safe systems, we don't need these workarounds */ +# define LOCALE_TERM_LC_NUMERIC_ NOOP +# define LOCALE_INIT_LC_NUMERIC_ NOOP +# define LC_NUMERIC_LOCK(cond) NOOP +# define LC_NUMERIC_UNLOCK NOOP +# define LOCALE_INIT_LC_NUMERIC_ NOOP +# define LOCALE_TERM_LC_NUMERIC_ NOOP + + /* There may be instance core where we this is invoked yet should do + * nothing. Rather than have #ifdef's around them, define it here */ +# define SETLOCALE_LOCK NOOP +# define SETLOCALE_UNLOCK NOOP # else -# define LOCALE_LOCK LOCALE_LOCK_V -# define LOCALE_UNLOCK LOCALE_UNLOCK_V - - /* We also need to lock LC_NUMERIC for non-windows (hence Posix 2008) - * systems */ -# define LOCALE_INIT STMT_START { \ - MUTEX_INIT(&PL_locale_mutex); \ - MUTEX_INIT(&PL_lc_numeric_mutex); \ - } STMT_END - -# define LOCALE_TERM STMT_START { \ - MUTEX_DESTROY(&PL_locale_mutex); \ - MUTEX_DESTROY(&PL_lc_numeric_mutex); \ - _LOCALE_TERM_POSIX_2008; \ - } STMT_END - - /* This mutex is used to create critical sections where we want the - * LC_NUMERIC locale to be locked into either the C (standard) locale, or - * the underlying locale, so that other threads interrupting this one don't - * change it to the wrong state before we've had a chance to complete our - * operation. It can stay locked over an entire printf operation, for - * example. And so is made distinct from the LOCALE_LOCK mutex. +# define SETLOCALE_LOCK LOCALE_LOCK_ +# define SETLOCALE_UNLOCK LOCALE_UNLOCK_ + + /* On platforms without per-thread locales, when another thread can switch + * our locale, we need another mutex to create critical sections where we + * want the LC_NUMERIC locale to be locked into either the C (standard) + * locale, or the underlying locale, so that other threads interrupting + * this one don't change it to the wrong state before we've had a chance to + * complete our operation. It can stay locked over an entire printf + * operation, for example. And so is made distinct from the LOCALE_LOCK + * mutex. * * This simulates kind of a general semaphore. The current thread will * lock the mutex if the per-thread variable is zero, and then increments @@ -6497,7 +6809,13 @@ the plain locale pragma without a parameter (S>) is in effect. * * Clang improperly gives warnings for this, if not silenced: * https://clang.llvm.org/docs/ThreadSafetyAnalysis.html#conditional-locks - * */ + * + * If LC_NUMERIC_LOCK is combined with one of the LOCKs above, calls to + * that and its corresponding unlock should be contained entirely within + * the locked portion of LC_NUMERIC. Those mutexes should be used only in + * very short sections of code, while LC_NUMERIC_LOCK may span more + * operations. By always following this convention, deadlock should be + * impossible. But if necessary, the two mutexes could be combined. */ # define LC_NUMERIC_LOCK(cond_to_panic_if_already_locked) \ CLANG_DIAG_IGNORE(-Wthread-safety) \ STMT_START { \ @@ -6539,16 +6857,36 @@ the plain locale pragma without a parameter (S>) is in effect. } STMT_END \ CLANG_DIAG_RESTORE -# endif /* End of needs locking LC_NUMERIC */ -#else /* Below is no locale sync needed */ -# define LOCALE_INIT -# define LOCALE_LOCK -# define LOCALE_LOCK_V -# define LOCALE_UNLOCK -# define LOCALE_UNLOCK_V -# define LC_NUMERIC_LOCK(cond) -# define LC_NUMERIC_UNLOCK -# define LOCALE_TERM +# define LOCALE_INIT_LC_NUMERIC_ MUTEX_INIT(&PL_lc_numeric_mutex) +# define LOCALE_TERM_LC_NUMERIC_ MUTEX_DESTROY(&PL_lc_numeric_mutex) +# endif + +# ifdef USE_POSIX_2008_LOCALE + /* We have a locale object holding the 'C' locale for Posix 2008 */ +# define LOCALE_TERM_POSIX_2008_ \ + STMT_START { \ + if (PL_C_locale_obj) { \ + /* Make sure we aren't using the locale \ + * space we are about to free */ \ + uselocale(LC_GLOBAL_LOCALE); \ + freelocale(PL_C_locale_obj); \ + PL_C_locale_obj = (locale_t) NULL; \ + } \ + } STMT_END +# else +# define LOCALE_TERM_POSIX_2008_ NOOP +# endif + +# define LOCALE_INIT STMT_START { \ + MUTEX_INIT(&PL_locale_mutex); \ + LOCALE_INIT_LC_NUMERIC_; \ + } STMT_END + +# define LOCALE_TERM STMT_START { \ + MUTEX_DESTROY(&PL_locale_mutex); \ + LOCALE_TERM_LC_NUMERIC_; \ + LOCALE_TERM_POSIX_2008_; \ + } STMT_END #endif #ifdef USE_LOCALE_NUMERIC @@ -6559,7 +6897,7 @@ the plain locale pragma without a parameter (S>) is in effect. * operations used by Perl, namely the decimal point, and even the thousands * separator.) -=head1 Locale-related functions and macros +=for apidoc_section $locale =for apidoc Amn|void|DECLARATION_FOR_LC_NUMERIC_MANIPULATION @@ -6754,7 +7092,7 @@ cannot have changed since the precalculation. /* The next two macros set unconditionally. These should be rarely used, and * only after being sure that this is what is needed */ # define SET_NUMERIC_STANDARD() \ - STMT_START { \ + STMT_START { \ DEBUG_Lv(PerlIO_printf(Perl_debug_log, \ "%s: %d: lc_numeric standard=%d\n", \ __FILE__, __LINE__, PL_numeric_standard)); \ @@ -6765,7 +7103,7 @@ cannot have changed since the precalculation. } STMT_END # define SET_NUMERIC_UNDERLYING() \ - STMT_START { \ + STMT_START { \ if (_NOT_IN_NUMERIC_UNDERLYING) { \ Perl_set_numeric_underlying(aTHX); \ } \ @@ -6785,7 +7123,7 @@ cannot have changed since the precalculation. /* Rarely, we want to change to the underlying locale even outside of 'use * locale'. This is principally in the POSIX:: functions */ # define STORE_LC_NUMERIC_FORCE_TO_UNDERLYING() \ - STMT_START { \ + STMT_START { \ LC_NUMERIC_LOCK(_NOT_IN_NUMERIC_UNDERLYING); \ if (_NOT_IN_NUMERIC_UNDERLYING) { \ Perl_set_numeric_underlying(aTHX); \ @@ -6798,8 +7136,8 @@ cannot have changed since the precalculation. # define LOCK_LC_NUMERIC_STANDARD() \ STMT_START { \ DEBUG_Lv(PerlIO_printf(Perl_debug_log, \ - "%s: %d: lock lc_numeric_standard: new depth=%d\n", \ - __FILE__, __LINE__, PL_numeric_standard + 1)); \ + "%s: %d: lc_numeric_standard now locked to depth %d\n", \ + __FILE__, __LINE__, PL_numeric_standard)); \ __ASSERT_(PL_numeric_standard) \ PL_numeric_standard++; \ } STMT_END @@ -6813,8 +7151,13 @@ cannot have changed since the precalculation. assert(0); \ } \ DEBUG_Lv(PerlIO_printf(Perl_debug_log, \ - "%s: %d: lc_numeric_standard decrement lock, new depth=%d\n", \ - __FILE__, __LINE__, PL_numeric_standard)); \ + "%s: %d: ", __FILE__, __LINE__); \ + if (PL_numeric_standard <= 1) \ + PerlIO_printf(Perl_debug_log, \ + "lc_numeric_standard now unlocked\n");\ + else PerlIO_printf(Perl_debug_log, \ + "lc_numeric_standard lock decremented to depth %d\n", \ + PL_numeric_standard););\ } STMT_END # define WITH_LC_NUMERIC_SET_TO_NEEDED_IN(in_lc_numeric, block) \ @@ -6848,11 +7191,81 @@ cannot have changed since the precalculation. #endif /* !USE_LOCALE_NUMERIC */ +#ifdef USE_ITHREADS +# define ENV_LOCK PERL_WRITE_LOCK(&PL_env_mutex) +# define ENV_UNLOCK PERL_WRITE_UNLOCK(&PL_env_mutex) +# define ENV_READ_LOCK PERL_READ_LOCK(&PL_env_mutex) +# define ENV_READ_UNLOCK PERL_READ_UNLOCK(&PL_env_mutex) +# define ENV_INIT PERL_RW_MUTEX_INIT(&PL_env_mutex) +# define ENV_TERM PERL_RW_MUTEX_DESTROY(&PL_env_mutex) + + /* On platforms where the static buffer contained in getenv() is per-thread + * rather than process-wide, another thread executing a getenv() at the same + * time won't destroy ours before we have copied the result safely away and + * unlocked the mutex. On such platforms (which is most), we can have many + * readers of the environment at the same time. */ +# ifdef GETENV_PRESERVES_OTHER_THREAD +# define GETENV_LOCK ENV_READ_LOCK +# define GETENV_UNLOCK ENV_READ_UNLOCK +# else + /* If, on the other hand, another thread could zap our getenv() return, we + * need to keep them from executing until we are done */ +# define GETENV_LOCK ENV_LOCK +# define GETENV_UNLOCK ENV_UNLOCK +# endif +#else +# define ENV_LOCK NOOP +# define ENV_UNLOCK NOOP +# define ENV_READ_LOCK NOOP +# define ENV_READ_UNLOCK NOOP +# define ENV_INIT NOOP +# define ENV_TERM NOOP +# define GETENV_LOCK NOOP +# define GETENV_UNLOCK NOOP +#endif + +#ifndef PERL_NO_INLINE_FUNCTIONS +/* Static inline funcs that depend on includes and declarations above. + Some of these reference functions in the perl object files, and some + compilers aren't smart enough to eliminate unused static inline + functions, so including this file in source code can cause link errors + even if the source code uses none of the functions. Hence including these + can be suppressed by setting PERL_NO_INLINE_FUNCTIONS. Doing this will + (obviously) result in unworkable XS code, but allows simple probing code + to continue to work, because it permits tests to include the perl headers + for definitions without creating a link dependency on the perl library + (which may not exist yet). +*/ + +START_EXTERN_C + +# include "inline.h" +# include "sv_inline.h" + +END_EXTERN_C + +#endif + +/* Some critical sections need to lock both the locale and the environment. + * XXX khw intends to change this to lock both mutexes, but that brings up + * issues of potential deadlock, so should be done at the beginning of a + * development cycle. So for now, it just locks the environment. Note that + * many modern platforms are locale-thread-safe anyway, so locking the locale + * mutex is a no-op anyway */ +#define ENV_LOCALE_LOCK ENV_LOCK +#define ENV_LOCALE_UNLOCK ENV_UNLOCK + +/* And some critical sections care only that no one else is writing either the + * locale nor the environment. XXX Again this is for the future. This can be + * simulated with using COND_WAIT in thread.h */ +#define ENV_LOCALE_READ_LOCK ENV_LOCALE_LOCK +#define ENV_LOCALE_READ_UNLOCK ENV_LOCALE_UNLOCK + #define Atof my_atof /* -=head1 Numeric functions +=for apidoc_section $numeric =for apidoc AmTR|NV|Strtod|NN const char * const s|NULLOK char ** e @@ -6886,7 +7299,7 @@ C. #endif #if !defined(Strtol) && defined(USE_64_BIT_INT) && defined(IV_IS_QUAD) && \ - (QUADKIND == QUAD_IS_LONG_LONG || QUADKIND == QUAD_IS___INT64) + (QUADKIND == QUAD_IS_LONG_LONG || QUADKIND == QUAD_IS___INT64) # ifdef __hpux # define strtoll __strtoll /* secret handshake */ # endif @@ -6909,7 +7322,7 @@ C. * (as is done for Atoul(), see below) but for backward compatibility * we just assume atol(). */ # if defined(USE_64_BIT_INT) && defined(IV_IS_QUAD) && defined(HAS_ATOLL) && \ - (QUADKIND == QUAD_IS_LONG_LONG || QUADKIND == QUAD_IS___INT64) + (QUADKIND == QUAD_IS_LONG_LONG || QUADKIND == QUAD_IS___INT64) # ifdef WIN64 # define atoll _atoi64 /* secret handshake */ # endif @@ -6920,7 +7333,7 @@ C. #endif #if !defined(Strtoul) && defined(USE_64_BIT_INT) && defined(UV_IS_QUAD) && \ - (QUADKIND == QUAD_IS_LONG_LONG || QUADKIND == QUAD_IS___INT64) + (QUADKIND == QUAD_IS_LONG_LONG || QUADKIND == QUAD_IS___INT64) # ifdef __hpux # define strtoull __strtoull /* secret handshake */ # endif @@ -6992,19 +7405,19 @@ C. # include # ifndef HAS_UNION_SEMUN /* Provide the union semun. */ union semun { - int val; - struct semid_ds *buf; - unsigned short *array; + int val; + struct semid_ds *buf; + unsigned short *array; }; # endif # ifdef USE_SEMCTL_SEMUN # ifdef IRIX32_SEMUN_BROKEN_BY_GCC union gccbug_semun { - int val; - struct semid_ds *buf; - unsigned short *array; - char __dummy[5]; - }; + int val; + struct semid_ds *buf; + unsigned short *array; + char __dummy[5]; + }; # define semun gccbug_semun # endif # define Semctl(id, num, cmd, semun) semctl(id, num, cmd, semun) @@ -7039,46 +7452,40 @@ C. * access MY_CXT. */ -#if defined(PERL_IMPLICIT_CONTEXT) +#if defined(MULTIPLICITY) /* START_MY_CXT must appear in all extensions that define a my_cxt_t structure, * right after the definition (i.e. at file scope). The non-threads * case below uses it to declare the data as static. */ -# ifdef PERL_GLOBAL_STRUCT_PRIVATE -# define START_MY_CXT -# define MY_CXT_INDEX Perl_my_cxt_index(aTHX_ MY_CXT_KEY) -# define MY_CXT_INIT_ARG MY_CXT_KEY -# else # define START_MY_CXT static int my_cxt_index = -1; # define MY_CXT_INDEX my_cxt_index # define MY_CXT_INIT_ARG &my_cxt_index -# endif /* #ifdef PERL_GLOBAL_STRUCT_PRIVATE */ /* Creates and zeroes the per-interpreter data. * (We allocate my_cxtp in a Perl SV so that it will be released when * the interpreter goes away.) */ # define MY_CXT_INIT \ - my_cxt_t *my_cxtp = \ - (my_cxt_t*)Perl_my_cxt_init(aTHX_ MY_CXT_INIT_ARG, sizeof(my_cxt_t)); \ - PERL_UNUSED_VAR(my_cxtp) + my_cxt_t *my_cxtp = \ + (my_cxt_t*)Perl_my_cxt_init(aTHX_ MY_CXT_INIT_ARG, sizeof(my_cxt_t)); \ + PERL_UNUSED_VAR(my_cxtp) # define MY_CXT_INIT_INTERP(my_perl) \ - my_cxt_t *my_cxtp = \ - (my_cxt_t*)Perl_my_cxt_init(my_perl, MY_CXT_INIT_ARG, sizeof(my_cxt_t)); \ - PERL_UNUSED_VAR(my_cxtp) + my_cxt_t *my_cxtp = \ + (my_cxt_t*)Perl_my_cxt_init(my_perl, MY_CXT_INIT_ARG, sizeof(my_cxt_t)); \ + PERL_UNUSED_VAR(my_cxtp) /* This declaration should be used within all functions that use the * interpreter-local data. */ # define dMY_CXT \ - my_cxt_t *my_cxtp = (my_cxt_t *)PL_my_cxt_list[MY_CXT_INDEX] + my_cxt_t *my_cxtp = (my_cxt_t *)PL_my_cxt_list[MY_CXT_INDEX] # define dMY_CXT_INTERP(my_perl) \ - my_cxt_t *my_cxtp = (my_cxt_t *)(my_perl)->Imy_cxt_list[MY_CXT_INDEX] + my_cxt_t *my_cxtp = (my_cxt_t *)(my_perl)->Imy_cxt_list[MY_CXT_INDEX] /* Clones the per-interpreter data. */ # define MY_CXT_CLONE \ - my_cxt_t *my_cxtp = (my_cxt_t*)SvPVX(newSV(sizeof(my_cxt_t)-1));\ - void * old_my_cxtp = PL_my_cxt_list[MY_CXT_INDEX]; \ - PL_my_cxt_list[MY_CXT_INDEX] = my_cxtp; \ - Copy(old_my_cxtp, my_cxtp, 1, my_cxt_t); + my_cxt_t *my_cxtp = (my_cxt_t*)SvPVX(newSV(sizeof(my_cxt_t)-1));\ + void * old_my_cxtp = PL_my_cxt_list[MY_CXT_INDEX]; \ + PL_my_cxt_list[MY_CXT_INDEX] = my_cxtp; \ + Copy(old_my_cxtp, my_cxtp, 1, my_cxt_t); @@ -7095,10 +7502,8 @@ C. # define aMY_CXT_ aMY_CXT, # define _aMY_CXT ,aMY_CXT -#else /* PERL_IMPLICIT_CONTEXT */ - +#else /* MULTIPLICITY */ # define START_MY_CXT static my_cxt_t my_cxt; -# define dMY_CXT_SV dNOOP # define dMY_CXT dNOOP # define dMY_CXT_INTERP(my_perl) dNOOP # define MY_CXT_INIT NOOP @@ -7112,7 +7517,7 @@ C. # define aMY_CXT_ # define _aMY_CXT -#endif /* !defined(PERL_IMPLICIT_CONTEXT) */ +#endif /* !defined(MULTIPLICITY) */ #ifdef I_FCNTL # include @@ -7176,8 +7581,8 @@ EXTERN_C int flock(int fd, int op); #endif #define IS_NUMBER_IN_UV 0x01 /* number within UV range (maybe not - int). value returned in pointed- - to UV */ + int). value returned in pointed- + to UV */ #define IS_NUMBER_GREATER_THAN_UV_MAX 0x02 /* pointed to UV undefined */ #define IS_NUMBER_NOT_INT 0x04 /* saw . or E notation or infnan */ #define IS_NUMBER_NEG 0x08 /* leading minus sign */ @@ -7186,7 +7591,7 @@ EXTERN_C int flock(int fd, int op); #define IS_NUMBER_TRAILING 0x40 /* number has trailing trash */ /* -=head1 Numeric functions +=for apidoc_section $numeric =for apidoc AmdR|bool|GROK_NUMERIC_RADIX|NN const char **sp|NN const char *send @@ -7239,7 +7644,7 @@ extern void moncontrol(int); #endif /* ISO 6429 NEL - C1 control NExt Line */ -/* See https://www.unicode.org/unicode/reports/tr13/ */ +/* See https://www.unicode.org/reports/tr13/ */ #define NEXT_LINE_CHAR NEXT_LINE_NATIVE #ifndef PIPESOCK_MODE @@ -7256,6 +7661,8 @@ extern void moncontrol(int); #define PERL_MAGIC_UTF8_CACHESIZE 2 +#ifdef PERL_CORE + #define PERL_UNICODE_STDIN_FLAG 0x0001 #define PERL_UNICODE_STDOUT_FLAG 0x0002 #define PERL_UNICODE_STDERR_FLAG 0x0004 @@ -7267,18 +7674,18 @@ extern void moncontrol(int); #define PERL_UNICODE_UTF8CACHEASSERT_FLAG 0x0100 #define PERL_UNICODE_STD_FLAG \ - (PERL_UNICODE_STDIN_FLAG | \ - PERL_UNICODE_STDOUT_FLAG | \ - PERL_UNICODE_STDERR_FLAG) + (PERL_UNICODE_STDIN_FLAG | \ + PERL_UNICODE_STDOUT_FLAG | \ + PERL_UNICODE_STDERR_FLAG) #define PERL_UNICODE_INOUT_FLAG \ - (PERL_UNICODE_IN_FLAG | \ - PERL_UNICODE_OUT_FLAG) + (PERL_UNICODE_IN_FLAG | \ + PERL_UNICODE_OUT_FLAG) #define PERL_UNICODE_DEFAULT_FLAGS \ - (PERL_UNICODE_STD_FLAG | \ - PERL_UNICODE_INOUT_FLAG | \ - PERL_UNICODE_LOCALE_FLAG) + (PERL_UNICODE_STD_FLAG | \ + PERL_UNICODE_INOUT_FLAG | \ + PERL_UNICODE_LOCALE_FLAG) #define PERL_UNICODE_ALL_FLAGS 0x01ff @@ -7294,12 +7701,23 @@ extern void moncontrol(int); #define PERL_UNICODE_WIDESYSCALLS 'W' #define PERL_UNICODE_UTF8CACHEASSERT 'a' +#endif + +/* +=for apidoc_section $signals +=for apidoc Amn|U32|PERL_SIGNALS_UNSAFE_FLAG +If this bit in C is set, the system is uing the pre-Perl 5.8 +unsafe signals. See L and L. + +=cut +*/ #define PERL_SIGNALS_UNSAFE_FLAG 0x0001 /* -=head1 Numeric functions +=for apidoc_section $numeric -=for apidoc Am|int|PERL_ABS|int +=for apidoc Am|int|PERL_ABS|int x Typeless C or C, I. (The usage below indicates it is for integers, but it works for any type.) Use instead of these, since the C @@ -7317,7 +7735,7 @@ so no C. #endif #define do_open(g, n, l, a, rm, rp, sf) \ - do_openn(g, n, l, a, rm, rp, sf, (SV **) NULL, 0) + do_openn(g, n, l, a, rm, rp, sf, (SV **) NULL, 0) #ifdef PERL_DEFAULT_DO_EXEC3_IMPLEMENTATION # define do_exec(cmd) do_exec3(cmd,0,0) #endif @@ -7329,7 +7747,7 @@ so no C. /* -=head1 Miscellaneous Functions +=for apidoc_section $utility =for apidoc Am|bool|IS_SAFE_SYSCALL|NN const char *pv|STRLEN len|NN const char *what|NN const char *op_name @@ -7372,8 +7790,12 @@ Allows one ending \0 #define PERL_PV_PRETTY_NOCLEAR PERL_PV_ESCAPE_NOCLEAR #define PERL_PV_ESCAPE_RE 0x008000 +/* Escape PV with hex, except leave NULs as octal: */ #define PERL_PV_ESCAPE_DWIM 0x010000 +/* Escape PV with all hex, including NUL. */ +#define PERL_PV_ESCAPE_DWIM_ALL_HEX 0x020000 + /* used by pv_display in dump.c*/ #define PERL_PV_PRETTY_DUMP PERL_PV_PRETTY_ELLIPSES|PERL_PV_PRETTY_QUOTE @@ -7683,8 +8105,25 @@ GCC_DIAG_RESTORE_DECL; #else +/* The declarations here need to match the initializations done above, + since a mismatch across compilation units causes undefined + behavior. It also prevents warnings from LTO builds. +*/ +# if !defined(USE_QUADMATH) && \ + (NVSIZE == LONG_DOUBLESIZE && defined(LONGDBLINFBYTES) || \ + NVSIZE == DOUBLESIZE && defined(DOUBLEINFBYTES)) +INFNAN_U8_NV_DECL PL_inf; +# else INFNAN_NV_U8_DECL PL_inf; +# endif + +# if !defined(USE_QUADMATH) && \ + (NVSIZE == LONG_DOUBLESIZE && defined(LONGDBLNANBYTES) || \ + NVSIZE == DOUBLESIZE && defined(DOUBLENANBYTES)) +INFNAN_U8_NV_DECL PL_nan; +# else INFNAN_NV_U8_DECL PL_nan; +# endif #endif diff --git a/gnu/usr.bin/perl/perlapi.c b/gnu/usr.bin/perl/perlapi.c deleted file mode 100644 index 78583377a2f..00000000000 --- a/gnu/usr.bin/perl/perlapi.c +++ /dev/null @@ -1,60 +0,0 @@ -/* -*- buffer-read-only: t -*- - * - * perlapi.c - * - * Copyright (C) 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, - * 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009 by Larry Wall and others - * - * You may distribute under the terms of either the GNU General Public - * License or the Artistic License, as specified in the README file. - * - * !!!!!!! DO NOT EDIT THIS FILE !!!!!!! - * This file is built by regen/embed.pl from data in embed.fnc, - * regen/embed.pl, regen/opcodes, intrpvar.h and perlvars.h. - * Any changes made here will be lost! - * - * Edit those files and run 'make regen_headers' to effect changes. - * - * - * Up to the threshold of the door there mounted a flight of twenty-seven - * broad stairs, hewn by some unknown art of the same black stone. This - * was the only entrance to the tower; ... - * - * [p.577 of _The Lord of the Rings_, III/x: "The Voice of Saruman"] - * - */ - -#include "EXTERN.h" -#include "perl.h" -#include "perlapi.h" - -#if defined (MULTIPLICITY) && defined (PERL_GLOBAL_STRUCT) - -/* accessor functions for Perl "global" variables */ -START_EXTERN_C - -#undef PERLVARI -#define PERLVARI(p,v,t,i) PERLVAR(p,v,t) - -#undef PERLVAR -#undef PERLVARA -#define PERLVAR(p,v,t) t* Perl_##p##v##_ptr(pTHX) \ - { dVAR; PERL_UNUSED_CONTEXT; return &(PL_##v); } -#define PERLVARA(p,v,n,t) PL_##v##_t* Perl_##p##v##_ptr(pTHX) \ - { dVAR; PERL_UNUSED_CONTEXT; return &(PL_##v); } -#undef PERLVARIC -#define PERLVARIC(p,v,t,i) \ - const t* Perl_##p##v##_ptr(pTHX) \ - { PERL_UNUSED_CONTEXT; return (const t *)&(PL_##v); } -#include "perlvars.h" - -#undef PERLVAR -#undef PERLVARA -#undef PERLVARI -#undef PERLVARIC - -END_EXTERN_C - -#endif /* MULTIPLICITY && PERL_GLOBAL_STRUCT */ - -/* ex: set ro: */ diff --git a/gnu/usr.bin/perl/perlapi.h b/gnu/usr.bin/perl/perlapi.h index d069d57969c..0d66a68371c 100644 --- a/gnu/usr.bin/perl/perlapi.h +++ b/gnu/usr.bin/perl/perlapi.h @@ -1,4 +1,4 @@ -/* -*- buffer-read-only: t -*- +/* * * perlapi.h * @@ -8,221 +8,15 @@ * You may distribute under the terms of either the GNU General Public * License or the Artistic License, as specified in the README file. * - * !!!!!!! DO NOT EDIT THIS FILE !!!!!!! - * This file is built by regen/embed.pl from data in embed.fnc, - * regen/embed.pl, regen/opcodes, intrpvar.h and perlvars.h. - * Any changes made here will be lost! - * - * Edit those files and run 'make regen_headers' to effect changes. */ -/* declare accessor functions for Perl variables */ +/* + * This file used to declare accessor functions for Perl variables + * when PERL_GLOBAL_STRUCT was enabled, but that no longer exists. + * This file is kept for backwards compatiblity with XS code that + * might include it. + */ #ifndef __perlapi_h__ #define __perlapi_h__ -#if defined (MULTIPLICITY) && defined (PERL_GLOBAL_STRUCT) - -START_EXTERN_C - -#undef PERLVAR -#undef PERLVARA -#undef PERLVARI -#undef PERLVARIC -#define PERLVAR(p,v,t) EXTERN_C t* Perl_##p##v##_ptr(pTHX); -#define PERLVARA(p,v,n,t) typedef t PL_##v##_t[n]; \ - EXTERN_C PL_##v##_t* Perl_##p##v##_ptr(pTHX); -#define PERLVARI(p,v,t,i) PERLVAR(p,v,t) -#define PERLVARIC(p,v,t,i) PERLVAR(p,v, const t) - -#include "perlvars.h" - -#undef PERLVAR -#undef PERLVARA -#undef PERLVARI -#undef PERLVARIC - -END_EXTERN_C - -#if defined(PERL_CORE) - -/* accessor functions for Perl "global" variables */ - -/* these need to be mentioned here, or most linkers won't put them in - the perl executable */ - -#ifndef PERL_NO_FORCE_LINK - -START_EXTERN_C - -#ifndef DOINIT -EXTCONST void * const PL_force_link_funcs[]; -#else -EXTCONST void * const PL_force_link_funcs[] = { -#undef PERLVAR -#undef PERLVARA -#undef PERLVARI -#undef PERLVARIC -#define PERLVAR(p,v,t) (void*)Perl_##p##v##_ptr, -#define PERLVARA(p,v,n,t) PERLVAR(p,v,t) -#define PERLVARI(p,v,t,i) PERLVAR(p,v,t) -#define PERLVARIC(p,v,t,i) PERLVAR(p,v,t) - -/* In Tru64 (__DEC && __osf__) the cc option -std1 causes that one - * cannot cast between void pointers and function pointers without - * info level warnings. The PL_force_link_funcs[] would cause a few - * hundred of those warnings. In code one can circumnavigate this by using - * unions that overlay the different pointers, but in declarations one - * cannot use this trick. Therefore we just disable the warning here - * for the duration of the PL_force_link_funcs[] declaration. */ - -#if defined(__DECC) && defined(__osf__) -#pragma message save -#pragma message disable (nonstandcast) -#endif - -#include "perlvars.h" - -#if defined(__DECC) && defined(__osf__) -#pragma message restore -#endif - -#undef PERLVAR -#undef PERLVARA -#undef PERLVARI -#undef PERLVARIC -}; -#endif /* DOINIT */ - -END_EXTERN_C - -#endif /* PERL_NO_FORCE_LINK */ - -#else /* !PERL_CORE */ - -#undef PL_C_locale_obj -#define PL_C_locale_obj (*Perl_GC_locale_obj_ptr(NULL)) -#undef PL_appctx -#define PL_appctx (*Perl_Gappctx_ptr(NULL)) -#undef PL_check -#define PL_check (*Perl_Gcheck_ptr(NULL)) -#undef PL_check_mutex -#define PL_check_mutex (*Perl_Gcheck_mutex_ptr(NULL)) -#undef PL_csighandler1p -#define PL_csighandler1p (*Perl_Gcsighandler1p_ptr(NULL)) -#undef PL_csighandler3p -#define PL_csighandler3p (*Perl_Gcsighandler3p_ptr(NULL)) -#undef PL_csighandlerp -#define PL_csighandlerp (*Perl_Gcsighandlerp_ptr(NULL)) -#undef PL_curinterp -#define PL_curinterp (*Perl_Gcurinterp_ptr(NULL)) -#undef PL_do_undump -#define PL_do_undump (*Perl_Gdo_undump_ptr(NULL)) -#undef PL_dollarzero_mutex -#define PL_dollarzero_mutex (*Perl_Gdollarzero_mutex_ptr(NULL)) -#undef PL_env_mutex -#define PL_env_mutex (*Perl_Genv_mutex_ptr(NULL)) -#undef PL_fold_locale -#define PL_fold_locale (*Perl_Gfold_locale_ptr(NULL)) -#undef PL_hash_chars -#define PL_hash_chars (*Perl_Ghash_chars_ptr(NULL)) -#undef PL_hash_seed_set -#define PL_hash_seed_set (*Perl_Ghash_seed_set_ptr(NULL)) -#undef PL_hash_seed_w -#define PL_hash_seed_w (*Perl_Ghash_seed_w_ptr(NULL)) -#undef PL_hash_state_w -#define PL_hash_state_w (*Perl_Ghash_state_w_ptr(NULL)) -#undef PL_hints_mutex -#define PL_hints_mutex (*Perl_Ghints_mutex_ptr(NULL)) -#undef PL_keyword_plugin -#define PL_keyword_plugin (*Perl_Gkeyword_plugin_ptr(NULL)) -#undef PL_keyword_plugin_mutex -#define PL_keyword_plugin_mutex (*Perl_Gkeyword_plugin_mutex_ptr(NULL)) -#undef PL_lc_numeric_mutex -#define PL_lc_numeric_mutex (*Perl_Glc_numeric_mutex_ptr(NULL)) -#undef PL_locale_mutex -#define PL_locale_mutex (*Perl_Glocale_mutex_ptr(NULL)) -#undef PL_malloc_mutex -#define PL_malloc_mutex (*Perl_Gmalloc_mutex_ptr(NULL)) -#undef PL_mmap_page_size -#define PL_mmap_page_size (*Perl_Gmmap_page_size_ptr(NULL)) -#undef PL_my_ctx_mutex -#define PL_my_ctx_mutex (*Perl_Gmy_ctx_mutex_ptr(NULL)) -#undef PL_my_cxt_index -#define PL_my_cxt_index (*Perl_Gmy_cxt_index_ptr(NULL)) -#undef PL_my_cxt_keys -#define PL_my_cxt_keys (*Perl_Gmy_cxt_keys_ptr(NULL)) -#undef PL_my_cxt_keys_size -#define PL_my_cxt_keys_size (*Perl_Gmy_cxt_keys_size_ptr(NULL)) -#undef PL_op_mutex -#define PL_op_mutex (*Perl_Gop_mutex_ptr(NULL)) -#undef PL_op_seq -#define PL_op_seq (*Perl_Gop_seq_ptr(NULL)) -#undef PL_op_sequence -#define PL_op_sequence (*Perl_Gop_sequence_ptr(NULL)) -#undef PL_perlio_debug_fd -#define PL_perlio_debug_fd (*Perl_Gperlio_debug_fd_ptr(NULL)) -#undef PL_perlio_fd_refcnt -#define PL_perlio_fd_refcnt (*Perl_Gperlio_fd_refcnt_ptr(NULL)) -#undef PL_perlio_fd_refcnt_size -#define PL_perlio_fd_refcnt_size (*Perl_Gperlio_fd_refcnt_size_ptr(NULL)) -#undef PL_perlio_mutex -#define PL_perlio_mutex (*Perl_Gperlio_mutex_ptr(NULL)) -#undef PL_perllib_sep -#define PL_perllib_sep (*Perl_Gperllib_sep_ptr(NULL)) -#undef PL_ppaddr -#define PL_ppaddr (*Perl_Gppaddr_ptr(NULL)) -#undef PL_sh_path -#define PL_sh_path (*Perl_Gsh_path_ptr(NULL)) -#undef PL_sig_defaulting -#define PL_sig_defaulting (*Perl_Gsig_defaulting_ptr(NULL)) -#undef PL_sig_handlers_initted -#define PL_sig_handlers_initted (*Perl_Gsig_handlers_initted_ptr(NULL)) -#undef PL_sig_ignoring -#define PL_sig_ignoring (*Perl_Gsig_ignoring_ptr(NULL)) -#undef PL_sig_trapped -#define PL_sig_trapped (*Perl_Gsig_trapped_ptr(NULL)) -#undef PL_sigfpe_saved -#define PL_sigfpe_saved (*Perl_Gsigfpe_saved_ptr(NULL)) -#undef PL_strategy_accept -#define PL_strategy_accept (*Perl_Gstrategy_accept_ptr(NULL)) -#undef PL_strategy_dup -#define PL_strategy_dup (*Perl_Gstrategy_dup_ptr(NULL)) -#undef PL_strategy_dup2 -#define PL_strategy_dup2 (*Perl_Gstrategy_dup2_ptr(NULL)) -#undef PL_strategy_mkstemp -#define PL_strategy_mkstemp (*Perl_Gstrategy_mkstemp_ptr(NULL)) -#undef PL_strategy_open -#define PL_strategy_open (*Perl_Gstrategy_open_ptr(NULL)) -#undef PL_strategy_open3 -#define PL_strategy_open3 (*Perl_Gstrategy_open3_ptr(NULL)) -#undef PL_strategy_pipe -#define PL_strategy_pipe (*Perl_Gstrategy_pipe_ptr(NULL)) -#undef PL_strategy_socket -#define PL_strategy_socket (*Perl_Gstrategy_socket_ptr(NULL)) -#undef PL_strategy_socketpair -#define PL_strategy_socketpair (*Perl_Gstrategy_socketpair_ptr(NULL)) -#undef PL_sv_placeholder -#define PL_sv_placeholder (*Perl_Gsv_placeholder_ptr(NULL)) -#undef PL_thr_key -#define PL_thr_key (*Perl_Gthr_key_ptr(NULL)) -#undef PL_timesbase -#define PL_timesbase (*Perl_Gtimesbase_ptr(NULL)) -#undef PL_use_safe_putenv -#define PL_use_safe_putenv (*Perl_Guse_safe_putenv_ptr(NULL)) -#undef PL_user_def_props -#define PL_user_def_props (*Perl_Guser_def_props_ptr(NULL)) -#undef PL_user_def_props_aTHX -#define PL_user_def_props_aTHX (*Perl_Guser_def_props_aTHX_ptr(NULL)) -#undef PL_user_prop_mutex -#define PL_user_prop_mutex (*Perl_Guser_prop_mutex_ptr(NULL)) -#undef PL_veto_cleanup -#define PL_veto_cleanup (*Perl_Gveto_cleanup_ptr(NULL)) -#undef PL_watch_pvx -#define PL_watch_pvx (*Perl_Gwatch_pvx_ptr(NULL)) - -#endif /* !PERL_CORE */ -#endif /* MULTIPLICITY && PERL_GLOBAL_STRUCT */ - #endif /* __perlapi_h__ */ - -/* ex: set ro: */ diff --git a/gnu/usr.bin/perl/perlio.c b/gnu/usr.bin/perl/perlio.c index 39481eeb10a..f2803a40255 100644 --- a/gnu/usr.bin/perl/perlio.c +++ b/gnu/usr.bin/perl/perlio.c @@ -26,9 +26,9 @@ * Invent a dSYS macro to abstract this out */ #ifdef PERL_IMPLICIT_SYS -#define dSYS dTHX +# define dSYS dTHX #else -#define dSYS dNOOP +# define dSYS dNOOP #endif #define PERLIO_NOT_STDIO 0 @@ -42,67 +42,67 @@ #define PERL_IN_PERLIO_C #include "perl.h" -#ifdef PERL_IMPLICIT_CONTEXT -#undef dSYS -#define dSYS dTHX +#ifdef MULTIPLICITY +# undef dSYS +# define dSYS dTHX #endif #include "XSUB.h" #ifdef VMS -#include +# include #endif #define PerlIO_lockcnt(f) (((PerlIOl*)(f))->head->flags) /* Call the callback or PerlIOBase, and return failure. */ #define Perl_PerlIO_or_Base(f, callback, base, failure, args) \ - if (PerlIOValid(f)) { \ - const PerlIO_funcs * const tab = PerlIOBase(f)->tab;\ - if (tab && tab->callback) \ - return (*tab->callback) args; \ - else \ - return PerlIOBase_ ## base args; \ - } \ - else \ - SETERRNO(EBADF, SS_IVCHAN); \ - return failure + if (PerlIOValid(f)) { \ + const PerlIO_funcs * const tab = PerlIOBase(f)->tab;\ + if (tab && tab->callback) \ + return (*tab->callback) args; \ + else \ + return PerlIOBase_ ## base args; \ + } \ + else \ + SETERRNO(EBADF, SS_IVCHAN); \ + return failure /* Call the callback or fail, and return failure. */ #define Perl_PerlIO_or_fail(f, callback, failure, args) \ - if (PerlIOValid(f)) { \ - const PerlIO_funcs * const tab = PerlIOBase(f)->tab;\ - if (tab && tab->callback) \ - return (*tab->callback) args; \ - SETERRNO(EINVAL, LIB_INVARG); \ - } \ - else \ - SETERRNO(EBADF, SS_IVCHAN); \ - return failure + if (PerlIOValid(f)) { \ + const PerlIO_funcs * const tab = PerlIOBase(f)->tab;\ + if (tab && tab->callback) \ + return (*tab->callback) args; \ + SETERRNO(EINVAL, LIB_INVARG); \ + } \ + else \ + SETERRNO(EBADF, SS_IVCHAN); \ + return failure /* Call the callback or PerlIOBase, and be void. */ #define Perl_PerlIO_or_Base_void(f, callback, base, args) \ - if (PerlIOValid(f)) { \ - const PerlIO_funcs * const tab = PerlIOBase(f)->tab;\ - if (tab && tab->callback) \ - (*tab->callback) args; \ - else \ - PerlIOBase_ ## base args; \ - } \ - else \ - SETERRNO(EBADF, SS_IVCHAN) + if (PerlIOValid(f)) { \ + const PerlIO_funcs * const tab = PerlIOBase(f)->tab;\ + if (tab && tab->callback) \ + (*tab->callback) args; \ + else \ + PerlIOBase_ ## base args; \ + } \ + else \ + SETERRNO(EBADF, SS_IVCHAN) /* Call the callback or fail, and be void. */ #define Perl_PerlIO_or_fail_void(f, callback, args) \ - if (PerlIOValid(f)) { \ - const PerlIO_funcs * const tab = PerlIOBase(f)->tab;\ - if (tab && tab->callback) \ - (*tab->callback) args; \ - else \ - SETERRNO(EINVAL, LIB_INVARG); \ - } \ - else \ - SETERRNO(EBADF, SS_IVCHAN) + if (PerlIOValid(f)) { \ + const PerlIO_funcs * const tab = PerlIOBase(f)->tab;\ + if (tab && tab->callback) \ + (*tab->callback) args; \ + else \ + SETERRNO(EINVAL, LIB_INVARG); \ + } \ + else \ + SETERRNO(EBADF, SS_IVCHAN) #if defined(__osf__) && _XOPEN_SOURCE < 500 extern int fseeko(FILE *, off_t, int); @@ -123,11 +123,7 @@ perlsio_binmode(FILE *fp, int iotype, int mode) #ifdef DOSISH dTHX; PERL_UNUSED_ARG(iotype); -#ifdef NETWARE - if (PerlLIO_setmode(fp, mode) != -1) { -#else if (PerlLIO_setmode(fileno(fp), mode) != -1) { -#endif return 1; } else @@ -152,7 +148,7 @@ perlsio_binmode(FILE *fp, int iotype, int mode) } #ifndef O_ACCMODE -#define O_ACCMODE 3 /* Assume traditional implementation */ +# define O_ACCMODE 3 /* Assume traditional implementation */ #endif int @@ -163,43 +159,43 @@ PerlIO_intmode2str(int rawmode, char *mode, int *writing) int ptype; switch (result) { case O_RDONLY: - ptype = IoTYPE_RDONLY; - break; + ptype = IoTYPE_RDONLY; + break; case O_WRONLY: - ptype = IoTYPE_WRONLY; - break; + ptype = IoTYPE_WRONLY; + break; case O_RDWR: default: - ptype = IoTYPE_RDWR; - break; + ptype = IoTYPE_RDWR; + break; } if (writing) - *writing = (result != O_RDONLY); + *writing = (result != O_RDONLY); if (result == O_RDONLY) { - mode[ix++] = 'r'; + mode[ix++] = 'r'; } #ifdef O_APPEND else if (rawmode & O_APPEND) { - mode[ix++] = 'a'; - if (result != O_WRONLY) - mode[ix++] = '+'; + mode[ix++] = 'a'; + if (result != O_WRONLY) + mode[ix++] = '+'; } #endif else { - if (result == O_WRONLY) - mode[ix++] = 'w'; - else { - mode[ix++] = 'r'; - mode[ix++] = '+'; - } + if (result == O_WRONLY) + mode[ix++] = 'w'; + else { + mode[ix++] = 'r'; + mode[ix++] = '+'; + } } #if O_BINARY != 0 /* Unless O_BINARY is different from zero, bit-and:ing * with it won't do much good. */ if (rawmode & O_BINARY) - mode[ix++] = 'b'; -# endif + mode[ix++] = 'b'; +#endif mode[ix] = '\0'; return ptype; } @@ -213,7 +209,7 @@ PerlIO_apply_layers(pTHX_ PerlIO *f, const char *mode, const char *names) || strEQ(names, ":raw") || strEQ(names, ":bytes") ) { - return 0; + return 0; } Perl_croak(aTHX_ "Cannot apply \"%s\" in non-PerlIO perl", names); /* @@ -236,35 +232,31 @@ PerlIO_binmode(pTHX_ PerlIO *fp, int iotype, int mode, const char *names) PerlIO * PerlIO_fdupopen(pTHX_ PerlIO *f, CLONE_PARAMS *param, int flags) { -#if defined(PERL_MICRO) || defined(__SYMBIAN32__) +# if defined(PERL_MICRO) return NULL; -#elif defined(PERL_IMPLICIT_SYS) +# elif defined(PERL_IMPLICIT_SYS) return PerlSIO_fdupopen(f); -#else -# ifdef WIN32 +# else +# ifdef WIN32 return win32_fdupopen(f); -# else +# else if (f) { - const int fd = PerlLIO_dup_cloexec(PerlIO_fileno(f)); - if (fd >= 0) { - char mode[8]; -# ifdef DJGPP - const int omode = djgpp_get_stream_mode(f); -# else - const int omode = fcntl(fd, F_GETFL); -# endif - PerlIO_intmode2str(omode,mode,NULL); - /* the r+ is a hack */ - return PerlIO_fdopen(fd, mode); - } - return NULL; + const int fd = PerlLIO_dup_cloexec(PerlIO_fileno(f)); + if (fd >= 0) { + char mode[8]; + const int omode = fcntl(fd, F_GETFL); + PerlIO_intmode2str(omode,mode,NULL); + /* the r+ is a hack */ + return PerlIO_fdopen(fd, mode); + } + return NULL; } else { - SETERRNO(EBADF, SS_IVCHAN); + SETERRNO(EBADF, SS_IVCHAN); } -# endif +# endif return NULL; -#endif +# endif } @@ -274,35 +266,35 @@ PerlIO_fdupopen(pTHX_ PerlIO *f, CLONE_PARAMS *param, int flags) PerlIO * PerlIO_openn(pTHX_ const char *layers, const char *mode, int fd, - int imode, int perm, PerlIO *old, int narg, SV **args) + int imode, int perm, PerlIO *old, int narg, SV **args) { if (narg) { - if (narg > 1) { - Perl_croak(aTHX_ "More than one argument to open"); - } - if (*args == &PL_sv_undef) - return PerlIO_tmpfile(); - else { + if (narg > 1) { + Perl_croak(aTHX_ "More than one argument to open"); + } + if (*args == &PL_sv_undef) + return PerlIO_tmpfile(); + else { STRLEN len; - const char *name = SvPV_const(*args, len); + const char *name = SvPV_const(*args, len); if (!IS_SAFE_PATHNAME(name, len, "open")) return NULL; - if (*mode == IoTYPE_NUMERIC) { - fd = PerlLIO_open3_cloexec(name, imode, perm); - if (fd >= 0) - return PerlIO_fdopen(fd, mode + 1); - } - else if (old) { - return PerlIO_reopen(name, mode, old); - } - else { - return PerlIO_open(name, mode); - } - } + if (*mode == IoTYPE_NUMERIC) { + fd = PerlLIO_open3_cloexec(name, imode, perm); + if (fd >= 0) + return PerlIO_fdopen(fd, mode + 1); + } + else if (old) { + return PerlIO_reopen(name, mode, old); + } + else { + return PerlIO_open(name, mode); + } + } } else { - return PerlIO_fdopen(fd, (char *) mode); + return PerlIO_fdopen(fd, (char *) mode); } return NULL; } @@ -312,12 +304,12 @@ XS(XS_PerlIO__Layer__find) { dXSARGS; if (items < 2) - Perl_croak(aTHX_ "Usage class->find(name[,load])"); + Perl_croak(aTHX_ "Usage class->find(name[,load])"); else { - const char * const name = SvPV_nolen_const(ST(1)); - ST(0) = (strEQ(name, "crlf") - || strEQ(name, "raw")) ? &PL_sv_yes : &PL_sv_undef; - XSRETURN(1); + const char * const name = SvPV_nolen_const(ST(1)); + ST(0) = (strEQ(name, "crlf") + || strEQ(name, "raw")) ? &PL_sv_yes : &PL_sv_undef; + XSRETURN(1); } } @@ -350,27 +342,27 @@ PerlIO_debug(const char *fmt, ...) va_start(ap, fmt); if (!PL_perlio_debug_fd) { - if (!TAINTING_get && - PerlProc_getuid() == PerlProc_geteuid() && - PerlProc_getgid() == PerlProc_getegid()) { - const char * const s = PerlEnv_getenv("PERLIO_DEBUG"); - if (s && *s) - PL_perlio_debug_fd = PerlLIO_open3_cloexec(s, - O_WRONLY | O_CREAT | O_APPEND, 0666); - else - PL_perlio_debug_fd = PerlLIO_dup_cloexec(2); /* stderr */ - } else { - /* tainting or set*id, so ignore the environment and send the + if (!TAINTING_get && + PerlProc_getuid() == PerlProc_geteuid() && + PerlProc_getgid() == PerlProc_getegid()) { + const char * const s = PerlEnv_getenv("PERLIO_DEBUG"); + if (s && *s) + PL_perlio_debug_fd = PerlLIO_open3_cloexec(s, + O_WRONLY | O_CREAT | O_APPEND, 0666); + else + PL_perlio_debug_fd = PerlLIO_dup_cloexec(2); /* stderr */ + } else { + /* tainting or set*id, so ignore the environment and send the debug output to stderr, like other -D switches. */ - PL_perlio_debug_fd = PerlLIO_dup_cloexec(2); /* stderr */ - } + PL_perlio_debug_fd = PerlLIO_dup_cloexec(2); /* stderr */ + } } if (PL_perlio_debug_fd > 0) { #ifdef USE_ITHREADS - const char * const s = CopFILE(PL_curcop); - /* Use fixed buffer as sv_catpvf etc. needs SVs */ - char buffer[1024]; - const STRLEN len1 = my_snprintf(buffer, sizeof(buffer), "%.40s:%" IVdf " ", s ? s : "(none)", (IV) CopLINE(PL_curcop)); + const char * const s = CopFILE(PL_curcop); + /* Use fixed buffer as sv_catpvf etc. needs SVs */ + char buffer[1024]; + const STRLEN len1 = my_snprintf(buffer, sizeof(buffer), "%.40s:%" IVdf " ", s ? s : "(none)", (IV) CopLINE(PL_curcop)); # ifdef USE_QUADMATH # ifdef HAS_VSNPRINTF /* my_vsnprintf() isn't available with quadmath, but the native vsnprintf() @@ -382,19 +374,19 @@ PerlIO_debug(const char *fmt, ...) STATIC_ASSERT_STMT(0); # endif # else - const STRLEN len2 = my_vsnprintf(buffer + len1, sizeof(buffer) - len1, fmt, ap); + const STRLEN len2 = my_vsnprintf(buffer + len1, sizeof(buffer) - len1, fmt, ap); # endif - PERL_UNUSED_RESULT(PerlLIO_write(PL_perlio_debug_fd, buffer, len1 + len2)); + PERL_UNUSED_RESULT(PerlLIO_write(PL_perlio_debug_fd, buffer, len1 + len2)); #else - const char *s = CopFILE(PL_curcop); - STRLEN len; - SV * const sv = Perl_newSVpvf(aTHX_ "%s:%" IVdf " ", s ? s : "(none)", - (IV) CopLINE(PL_curcop)); - Perl_sv_vcatpvf(aTHX_ sv, fmt, &ap); - - s = SvPV_const(sv, len); - PERL_UNUSED_RESULT(PerlLIO_write(PL_perlio_debug_fd, s, len)); - SvREFCNT_dec(sv); + const char *s = CopFILE(PL_curcop); + STRLEN len; + SV * const sv = Perl_newSVpvf(aTHX_ "%s:%" IVdf " ", s ? s : "(none)", + (IV) CopLINE(PL_curcop)); + Perl_sv_vcatpvf(aTHX_ sv, fmt, &ap); + + s = SvPV_const(sv, len); + PERL_UNUSED_RESULT(PerlLIO_write(PL_perlio_debug_fd, s, len)); + SvREFCNT_dec(sv); #endif } va_end(ap); @@ -415,18 +407,18 @@ PerlIO_verify_head(pTHX_ PerlIO *f) { PerlIOl *head, *p; int seen = 0; -#ifndef PERL_IMPLICIT_SYS +# ifndef PERL_IMPLICIT_SYS PERL_UNUSED_CONTEXT; -#endif +# endif if (!PerlIOValid(f)) - return; + return; p = head = PerlIOBase(f)->head; assert(p); do { - assert(p->head == head); - if (p == (PerlIOl*)f) - seen = 1; - p = p->next; + assert(p->head == head); + if (p == (PerlIOl*)f) + seen = 1; + p = p->next; } while (p); assert(seen); } @@ -444,7 +436,7 @@ static void PerlIO_init_table(pTHX) { if (PL_perlio) - return; + return; Newxz(PL_perlio, PERLIO_TABLE_SIZE, PerlIOl); } @@ -460,17 +452,17 @@ PerlIO_allocate(pTHX) PerlIOl *f; last = &PL_perlio; while ((f = *last)) { - int i; - last = (PerlIOl **) (f); - for (i = 1; i < PERLIO_TABLE_SIZE; i++) { - if (!((++f)->next)) { - goto good_exit; - } - } + int i; + last = (PerlIOl **) (f); + for (i = 1; i < PERLIO_TABLE_SIZE; i++) { + if (!((++f)->next)) { + goto good_exit; + } + } } Newxz(f,PERLIO_TABLE_SIZE,PerlIOl); if (!f) { - return NULL; + return NULL; } *last = (PerlIOl*) f++; @@ -486,16 +478,16 @@ PerlIO * PerlIO_fdupopen(pTHX_ PerlIO *f, CLONE_PARAMS *param, int flags) { if (PerlIOValid(f)) { - const PerlIO_funcs * const tab = PerlIOBase(f)->tab; - DEBUG_i( PerlIO_debug("fdupopen f=%p param=%p\n",(void*)f,(void*)param) ); - if (tab && tab->Dup) - return (*tab->Dup)(aTHX_ PerlIO_allocate(aTHX), f, param, flags); - else { - return PerlIOBase_dup(aTHX_ PerlIO_allocate(aTHX), f, param, flags); - } + const PerlIO_funcs * const tab = PerlIOBase(f)->tab; + DEBUG_i( PerlIO_debug("fdupopen f=%p param=%p\n",(void*)f,(void*)param) ); + if (tab && tab->Dup) + return (*tab->Dup)(aTHX_ PerlIO_allocate(aTHX), f, param, flags); + else { + return PerlIOBase_dup(aTHX_ PerlIO_allocate(aTHX), f, param, flags); + } } else - SETERRNO(EBADF, SS_IVCHAN); + SETERRNO(EBADF, SS_IVCHAN); return NULL; } @@ -505,16 +497,16 @@ PerlIO_cleantable(pTHX_ PerlIOl **tablep) { PerlIOl * const table = *tablep; if (table) { - int i; - PerlIO_cleantable(aTHX_(PerlIOl **) & (table[0])); - for (i = PERLIO_TABLE_SIZE - 1; i > 0; i--) { - PerlIOl * const f = table + i; - if (f->next) { - PerlIO_close(&(f->next)); - } - } - Safefree(table); - *tablep = NULL; + int i; + PerlIO_cleantable(aTHX_(PerlIOl **) & (table[0])); + for (i = PERLIO_TABLE_SIZE - 1; i > 0; i--) { + PerlIOl * const f = table + i; + if (f->next) { + PerlIO_close(&(f->next)); + } + } + Safefree(table); + *tablep = NULL; } } @@ -533,15 +525,15 @@ void PerlIO_list_free(pTHX_ PerlIO_list_t *list) { if (list) { - if (--list->refcnt == 0) { - if (list->array) { - IV i; - for (i = 0; i < list->cur; i++) - SvREFCNT_dec(list->array[i].arg); - Safefree(list->array); - } - Safefree(list); - } + if (--list->refcnt == 0) { + if (list->array) { + IV i; + for (i = 0; i < list->cur; i++) + SvREFCNT_dec(list->array[i].arg); + Safefree(list->array); + } + Safefree(list); + } } } @@ -553,16 +545,16 @@ PerlIO_list_push(pTHX_ PerlIO_list_t *list, PerlIO_funcs *funcs, SV *arg) if (list->cur >= list->len) { const IV new_len = list->len + 8; - if (list->array) - Renew(list->array, new_len, PerlIO_pair_t); - else - Newx(list->array, new_len, PerlIO_pair_t); - list->len = new_len; + if (list->array) + Renew(list->array, new_len, PerlIO_pair_t); + else + Newx(list->array, new_len, PerlIO_pair_t); + list->len = new_len; } p = &(list->array[list->cur++]); p->funcs = funcs; if ((p->arg = arg)) { - SvREFCNT_inc_simple_void_NN(arg); + SvREFCNT_inc_simple_void_NN(arg); } } @@ -571,18 +563,18 @@ PerlIO_clone_list(pTHX_ PerlIO_list_t *proto, CLONE_PARAMS *param) { PerlIO_list_t *list = NULL; if (proto) { - int i; - list = PerlIO_list_alloc(aTHX); - for (i=0; i < proto->cur; i++) { - SV *arg = proto->array[i].arg; + int i; + list = PerlIO_list_alloc(aTHX); + for (i=0; i < proto->cur; i++) { + SV *arg = proto->array[i].arg; #ifdef USE_ITHREADS - if (arg && param) - arg = sv_dup(arg, param); + if (arg && param) + arg = sv_dup(arg, param); #else - PERL_UNUSED_ARG(param); + PERL_UNUSED_ARG(param); #endif - PerlIO_list_push(aTHX_ list, proto->array[i].funcs, arg); - } + PerlIO_list_push(aTHX_ list, proto->array[i].funcs, arg); + } } return list; } @@ -599,15 +591,15 @@ PerlIO_clone(pTHX_ PerlInterpreter *proto, CLONE_PARAMS *param) PerlIO_init_table(aTHX); DEBUG_i( PerlIO_debug("Clone %p from %p\n",(void*)aTHX,(void*)proto) ); while ((f = *table)) { - int i; - table = (PerlIOl **) (f++); - for (i = 1; i < PERLIO_TABLE_SIZE; i++) { - if (f->next) { - (void) fp_dup(&(f->next), 0, param); - } - f++; - } - } + int i; + table = (PerlIOl **) (f++); + for (i = 1; i < PERLIO_TABLE_SIZE; i++) { + if (f->next) { + (void) fp_dup(&(f->next), 0, param); + } + f++; + } + } #else PERL_UNUSED_CONTEXT; PERL_UNUSED_ARG(proto); @@ -624,23 +616,23 @@ PerlIO_destruct(pTHX) DEBUG_i( PerlIO_debug("Destruct %p\n",(void*)aTHX) ); #endif while ((f = *table)) { - int i; - table = (PerlIOl **) (f++); - for (i = 1; i < PERLIO_TABLE_SIZE; i++) { - PerlIO *x = &(f->next); - const PerlIOl *l; - while ((l = *x)) { - if (l->tab && l->tab->kind & PERLIO_K_DESTRUCT) { - DEBUG_i( PerlIO_debug("Destruct popping %s\n", l->tab->name) ); - PerlIO_flush(x); - PerlIO_pop(aTHX_ x); - } - else { - x = PerlIONext(x); - } - } - f++; - } + int i; + table = (PerlIOl **) (f++); + for (i = 1; i < PERLIO_TABLE_SIZE; i++) { + PerlIO *x = &(f->next); + const PerlIOl *l; + while ((l = *x)) { + if (l->tab && l->tab->kind & PERLIO_K_DESTRUCT) { + DEBUG_i( PerlIO_debug("Destruct popping %s\n", l->tab->name) ); + PerlIO_flush(x); + PerlIO_pop(aTHX_ x); + } + else { + x = PerlIONext(x); + } + } + f++; + } } } @@ -650,26 +642,26 @@ PerlIO_pop(pTHX_ PerlIO *f) const PerlIOl *l = *f; VERIFY_HEAD(f); if (l) { - DEBUG_i( PerlIO_debug("PerlIO_pop f=%p %s\n", (void*)f, + DEBUG_i( PerlIO_debug("PerlIO_pop f=%p %s\n", (void*)f, l->tab ? l->tab->name : "(Null)") ); - if (l->tab && l->tab->Popped) { - /* - * If popped returns non-zero do not free its layer structure - * it has either done so itself, or it is shared and still in - * use - */ - if ((*l->tab->Popped) (aTHX_ f) != 0) - return; - } - if (PerlIO_lockcnt(f)) { - /* we're in use; defer freeing the structure */ - PerlIOBase(f)->flags = PERLIO_F_CLEARED; - PerlIOBase(f)->tab = NULL; - } - else { - *f = l->next; - Safefree(l); - } + if (l->tab && l->tab->Popped) { + /* + * If popped returns non-zero do not free its layer structure + * it has either done so itself, or it is shared and still in + * use + */ + if ((*l->tab->Popped) (aTHX_ f) != 0) + return; + } + if (PerlIO_lockcnt(f)) { + /* we're in use; defer freeing the structure */ + PerlIOBase(f)->flags = PERLIO_F_CLEARED; + PerlIOBase(f)->tab = NULL; + } + else { + *f = l->next; + Safefree(l); + } } } @@ -686,23 +678,23 @@ PerlIO_get_layers(pTHX_ PerlIO *f) AV * const av = newAV(); if (PerlIOValid(f)) { - PerlIOl *l = PerlIOBase(f); - - while (l) { - /* There is some collusion in the implementation of - XS_PerlIO_get_layers - it knows that name and flags are - generated as fresh SVs here, and takes advantage of that to - "copy" them by taking a reference. If it changes here, it needs - to change there too. */ - SV * const name = l->tab && l->tab->name ? - newSVpv(l->tab->name, 0) : &PL_sv_undef; - SV * const arg = l->tab && l->tab->Getarg ? - (*l->tab->Getarg)(aTHX_ &l, 0, 0) : &PL_sv_undef; - av_push(av, name); - av_push(av, arg); - av_push(av, newSViv((IV)l->flags)); - l = l->next; - } + PerlIOl *l = PerlIOBase(f); + + while (l) { + /* There is some collusion in the implementation of + XS_PerlIO_get_layers - it knows that name and flags are + generated as fresh SVs here, and takes advantage of that to + "copy" them by taking a reference. If it changes here, it needs + to change there too. */ + SV * const name = l->tab && l->tab->name ? + newSVpv(l->tab->name, 0) : &PL_sv_undef; + SV * const arg = l->tab && l->tab->Getarg ? + (*l->tab->Getarg)(aTHX_ &l, 0, 0) : &PL_sv_undef; + av_push(av, name); + av_push(av, arg); + av_push(av, newSViv((IV)l->flags)); + l = l->next; + } } return av; @@ -719,38 +711,38 @@ PerlIO_find_layer(pTHX_ const char *name, STRLEN len, int load) IV i; if ((SSize_t) len <= 0) - len = strlen(name); + len = strlen(name); for (i = 0; i < PL_known_layers->cur; i++) { - PerlIO_funcs * const f = PL_known_layers->array[i].funcs; + PerlIO_funcs * const f = PL_known_layers->array[i].funcs; const STRLEN this_len = strlen(f->name); if (this_len == len && memEQ(f->name, name, len)) { - DEBUG_i( PerlIO_debug("%.*s => %p\n", (int) len, name, (void*)f) ); - return f; - } + DEBUG_i( PerlIO_debug("%.*s => %p\n", (int) len, name, (void*)f) ); + return f; + } } if (load && PL_subname && PL_def_layerlist - && PL_def_layerlist->cur >= 2) { - if (PL_in_load_module) { - Perl_croak(aTHX_ "Recursive call to Perl_load_module in PerlIO_find_layer"); - return NULL; - } else { - SV * const pkgsv = newSVpvs("PerlIO"); - SV * const layer = newSVpvn(name, len); - CV * const cv = get_cvs("PerlIO::Layer::NoWarnings", 0); - ENTER; - SAVEBOOL(PL_in_load_module); - if (cv) { - SAVEGENERICSV(PL_warnhook); - PL_warnhook = MUTABLE_SV((SvREFCNT_inc_simple_NN(cv))); - } - PL_in_load_module = TRUE; - /* - * The two SVs are magically freed by load_module - */ - Perl_load_module(aTHX_ 0, pkgsv, NULL, layer, NULL); - LEAVE; - return PerlIO_find_layer(aTHX_ name, len, 0); - } + && PL_def_layerlist->cur >= 2) { + if (PL_in_load_module) { + Perl_croak(aTHX_ "Recursive call to Perl_load_module in PerlIO_find_layer"); + return NULL; + } else { + SV * const pkgsv = newSVpvs("PerlIO"); + SV * const layer = newSVpvn(name, len); + CV * const cv = get_cvs("PerlIO::Layer::NoWarnings", 0); + ENTER; + SAVEBOOL(PL_in_load_module); + if (cv) { + SAVEGENERICSV(PL_warnhook); + PL_warnhook = MUTABLE_SV((SvREFCNT_inc_simple_NN(cv))); + } + PL_in_load_module = TRUE; + /* + * The two SVs are magically freed by load_module + */ + Perl_load_module(aTHX_ 0, pkgsv, NULL, layer, NULL); + LEAVE; + return PerlIO_find_layer(aTHX_ name, len, 0); + } } DEBUG_i( PerlIO_debug("Cannot find %.*s\n", (int) len, name) ); return NULL; @@ -762,11 +754,11 @@ static int perlio_mg_set(pTHX_ SV *sv, MAGIC *mg) { if (SvROK(sv)) { - IO * const io = GvIOn(MUTABLE_GV(SvRV(sv))); - PerlIO * const ifp = IoIFP(io); - PerlIO * const ofp = IoOFP(io); - Perl_warn(aTHX_ "set %" SVf " %p %p %p", - SVfARG(sv), (void*)io, (void*)ifp, (void*)ofp); + IO * const io = GvIOn(MUTABLE_GV(SvRV(sv))); + PerlIO * const ifp = IoIFP(io); + PerlIO * const ofp = IoOFP(io); + Perl_warn(aTHX_ "set %" SVf " %p %p %p", + SVfARG(sv), (void*)io, (void*)ifp, (void*)ofp); } return 0; } @@ -775,11 +767,11 @@ static int perlio_mg_get(pTHX_ SV *sv, MAGIC *mg) { if (SvROK(sv)) { - IO * const io = GvIOn(MUTABLE_GV(SvRV(sv))); - PerlIO * const ifp = IoIFP(io); - PerlIO * const ofp = IoOFP(io); - Perl_warn(aTHX_ "get %" SVf " %p %p %p", - SVfARG(sv), (void*)io, (void*)ifp, (void*)ofp); + IO * const io = GvIOn(MUTABLE_GV(SvRV(sv))); + PerlIO * const ifp = IoIFP(io); + PerlIO * const ofp = IoOFP(io); + Perl_warn(aTHX_ "get %" SVf " %p %p %p", + SVfARG(sv), (void*)io, (void*)ifp, (void*)ofp); } return 0; } @@ -822,16 +814,16 @@ XS(XS_io_MODIFY_SCALAR_ATTRIBUTES) mg_magical(sv); Perl_warn(aTHX_ "attrib %" SVf, SVfARG(sv)); for (i = 2; i < items; i++) { - STRLEN len; - const char * const name = SvPV_const(ST(i), len); - SV * const layer = PerlIO_find_layer(aTHX_ name, len, 1); - if (layer) { - av_push(av, SvREFCNT_inc_simple_NN(layer)); - } - else { - ST(count) = ST(i); - count++; - } + STRLEN len; + const char * const name = SvPV_const(ST(i), len); + SV * const layer = PerlIO_find_layer(aTHX_ name, len, 1); + if (layer) { + av_push(av, SvREFCNT_inc_simple_NN(layer)); + } + else { + ST(count) = ST(i); + count++; + } } SvREFCNT_dec(av); XSRETURN(count); @@ -866,16 +858,16 @@ XS(XS_PerlIO__Layer__find) { dXSARGS; if (items < 2) - Perl_croak(aTHX_ "Usage class->find(name[,load])"); + Perl_croak(aTHX_ "Usage class->find(name[,load])"); else { - STRLEN len; - const char * const name = SvPV_const(ST(1), len); - const bool load = (items > 2) ? SvTRUE_NN(ST(2)) : 0; - PerlIO_funcs * const layer = PerlIO_find_layer(aTHX_ name, len, load); - ST(0) = - (layer) ? sv_2mortal(PerlIO_tab_sv(aTHX_ layer)) : - &PL_sv_undef; - XSRETURN(1); + STRLEN len; + const char * const name = SvPV_const(ST(1), len); + const bool load = (items > 2) ? SvTRUE_NN(ST(2)) : 0; + PerlIO_funcs * const layer = PerlIO_find_layer(aTHX_ name, len, load); + ST(0) = + (layer) ? sv_2mortal(PerlIO_tab_sv(aTHX_ layer)) : + &PL_sv_undef; + XSRETURN(1); } } @@ -883,7 +875,7 @@ void PerlIO_define_layer(pTHX_ PerlIO_funcs *tab) { if (!PL_known_layers) - PL_known_layers = PerlIO_list_alloc(aTHX); + PL_known_layers = PerlIO_list_alloc(aTHX); PerlIO_list_push(aTHX_ PL_known_layers, tab, NULL); DEBUG_i( PerlIO_debug("define %s %p\n", tab->name, (void*)tab) ); } @@ -892,88 +884,88 @@ int PerlIO_parse_layers(pTHX_ PerlIO_list_t *av, const char *names) { if (names) { - const char *s = names; - while (*s) { - while (isSPACE(*s) || *s == ':') - s++; - if (*s) { - STRLEN llen = 0; - const char *e = s; - const char *as = NULL; - STRLEN alen = 0; - if (!isIDFIRST(*s)) { - /* - * Message is consistent with how attribute lists are - * passed. Even though this means "foo : : bar" is - * seen as an invalid separator character. - */ - const char q = ((*s == '\'') ? '"' : '\''); - Perl_ck_warner(aTHX_ packWARN(WARN_LAYER), - "Invalid separator character %c%c%c in PerlIO layer specification %s", - q, *s, q, s); - SETERRNO(EINVAL, LIB_INVARG); - return -1; - } - do { - e++; - } while (isWORDCHAR(*e)); - llen = e - s; - if (*e == '(') { - int nesting = 1; - as = ++e; - while (nesting) { - switch (*e++) { - case ')': - if (--nesting == 0) - alen = (e - 1) - as; - break; - case '(': - ++nesting; - break; - case '\\': - /* - * It's a nul terminated string, not allowed - * to \ the terminating null. Anything other - * character is passed over. - */ - if (*e++) { - break; - } + const char *s = names; + while (*s) { + while (isSPACE(*s) || *s == ':') + s++; + if (*s) { + STRLEN llen = 0; + const char *e = s; + const char *as = NULL; + STRLEN alen = 0; + if (!isIDFIRST(*s)) { + /* + * Message is consistent with how attribute lists are + * passed. Even though this means "foo : : bar" is + * seen as an invalid separator character. + */ + const char q = ((*s == '\'') ? '"' : '\''); + Perl_ck_warner(aTHX_ packWARN(WARN_LAYER), + "Invalid separator character %c%c%c in PerlIO layer specification %s", + q, *s, q, s); + SETERRNO(EINVAL, LIB_INVARG); + return -1; + } + do { + e++; + } while (isWORDCHAR(*e)); + llen = e - s; + if (*e == '(') { + int nesting = 1; + as = ++e; + while (nesting) { + switch (*e++) { + case ')': + if (--nesting == 0) + alen = (e - 1) - as; + break; + case '(': + ++nesting; + break; + case '\\': + /* + * It's a nul terminated string, not allowed + * to \ the terminating null. Anything other + * character is passed over. + */ + if (*e++) { + break; + } /* Fall through */ - case '\0': - e--; - Perl_ck_warner(aTHX_ packWARN(WARN_LAYER), - "Argument list not closed for PerlIO layer \"%.*s\"", - (int) (e - s), s); - return -1; - default: - /* - * boring. - */ - break; - } - } - } - if (e > s) { - PerlIO_funcs * const layer = - PerlIO_find_layer(aTHX_ s, llen, 1); - if (layer) { - SV *arg = NULL; - if (as) - arg = newSVpvn(as, alen); - PerlIO_list_push(aTHX_ av, layer, - (arg) ? arg : &PL_sv_undef); - SvREFCNT_dec(arg); - } - else { - Perl_ck_warner(aTHX_ packWARN(WARN_LAYER), "Unknown PerlIO layer \"%.*s\"", - (int) llen, s); - return -1; - } - } - s = e; - } - } + case '\0': + e--; + Perl_ck_warner(aTHX_ packWARN(WARN_LAYER), + "Argument list not closed for PerlIO layer \"%.*s\"", + (int) (e - s), s); + return -1; + default: + /* + * boring. + */ + break; + } + } + } + if (e > s) { + PerlIO_funcs * const layer = + PerlIO_find_layer(aTHX_ s, llen, 1); + if (layer) { + SV *arg = NULL; + if (as) + arg = newSVpvn(as, alen); + PerlIO_list_push(aTHX_ av, layer, + (arg) ? arg : &PL_sv_undef); + SvREFCNT_dec(arg); + } + else { + Perl_ck_warner(aTHX_ packWARN(WARN_LAYER), "Unknown PerlIO layer \"%.*s\"", + (int) llen, s); + return -1; + } + } + s = e; + } + } } return 0; } @@ -986,7 +978,7 @@ PerlIO_default_buffer(pTHX_ PerlIO_list_t *av) tab = &PerlIO_crlf; #else if (PerlIO_stdio.Set_ptrcnt) - tab = &PerlIO_stdio; + tab = &PerlIO_stdio; #endif DEBUG_i( PerlIO_debug("Pushing %s\n", tab->name) ); PerlIO_list_push(aTHX_ av, (PerlIO_funcs *)tab, &PL_sv_undef); @@ -1002,12 +994,12 @@ PerlIO_funcs * PerlIO_layer_fetch(pTHX_ PerlIO_list_t *av, IV n, PerlIO_funcs *def) { if (n >= 0 && n < av->cur) { - DEBUG_i( PerlIO_debug("Layer %" IVdf " is %s\n", n, + DEBUG_i( PerlIO_debug("Layer %" IVdf " is %s\n", n, av->array[n].funcs->name) ); - return av->array[n].funcs; + return av->array[n].funcs; } if (!def) - Perl_croak(aTHX_ "panic: PerlIO layer array corrupt"); + Perl_croak(aTHX_ "panic: PerlIO layer array corrupt"); return def; } @@ -1018,9 +1010,9 @@ PerlIOPop_pushed(pTHX_ PerlIO *f, const char *mode, SV *arg, PerlIO_funcs *tab) PERL_UNUSED_ARG(arg); PERL_UNUSED_ARG(tab); if (PerlIOValid(f)) { - PerlIO_flush(f); - PerlIO_pop(aTHX_ f); - return 0; + PerlIO_flush(f); + PerlIO_pop(aTHX_ f); + return 0; } return -1; } @@ -1060,34 +1052,28 @@ PerlIO_list_t * PerlIO_default_layers(pTHX) { if (!PL_def_layerlist) { - const char * const s = TAINTING_get ? NULL : PerlEnv_getenv("PERLIO"); - PERLIO_FUNCS_DECL(*osLayer) = &PerlIO_unix; - PL_def_layerlist = PerlIO_list_alloc(aTHX); - PerlIO_define_layer(aTHX_ PERLIO_FUNCS_CAST(&PerlIO_unix)); -#if defined(WIN32) - PerlIO_define_layer(aTHX_ PERLIO_FUNCS_CAST(&PerlIO_win32)); -#if 0 - osLayer = &PerlIO_win32; -#endif -#endif - PerlIO_define_layer(aTHX_ PERLIO_FUNCS_CAST(&PerlIO_raw)); - PerlIO_define_layer(aTHX_ PERLIO_FUNCS_CAST(&PerlIO_perlio)); - PerlIO_define_layer(aTHX_ PERLIO_FUNCS_CAST(&PerlIO_stdio)); - PerlIO_define_layer(aTHX_ PERLIO_FUNCS_CAST(&PerlIO_crlf)); - PerlIO_define_layer(aTHX_ PERLIO_FUNCS_CAST(&PerlIO_utf8)); - PerlIO_define_layer(aTHX_ PERLIO_FUNCS_CAST(&PerlIO_remove)); - PerlIO_define_layer(aTHX_ PERLIO_FUNCS_CAST(&PerlIO_byte)); - PerlIO_list_push(aTHX_ PL_def_layerlist, (PerlIO_funcs *)osLayer, + const char * const s = TAINTING_get ? NULL : PerlEnv_getenv("PERLIO"); + PERLIO_FUNCS_DECL(*osLayer) = &PerlIO_unix; + PL_def_layerlist = PerlIO_list_alloc(aTHX); + PerlIO_define_layer(aTHX_ PERLIO_FUNCS_CAST(&PerlIO_unix)); + PerlIO_define_layer(aTHX_ PERLIO_FUNCS_CAST(&PerlIO_raw)); + PerlIO_define_layer(aTHX_ PERLIO_FUNCS_CAST(&PerlIO_perlio)); + PerlIO_define_layer(aTHX_ PERLIO_FUNCS_CAST(&PerlIO_stdio)); + PerlIO_define_layer(aTHX_ PERLIO_FUNCS_CAST(&PerlIO_crlf)); + PerlIO_define_layer(aTHX_ PERLIO_FUNCS_CAST(&PerlIO_utf8)); + PerlIO_define_layer(aTHX_ PERLIO_FUNCS_CAST(&PerlIO_remove)); + PerlIO_define_layer(aTHX_ PERLIO_FUNCS_CAST(&PerlIO_byte)); + PerlIO_list_push(aTHX_ PL_def_layerlist, (PerlIO_funcs *)osLayer, &PL_sv_undef); - if (s) { - PerlIO_parse_layers(aTHX_ PL_def_layerlist, s); - } - else { - PerlIO_default_buffer(aTHX_ PL_def_layerlist); - } + if (s) { + PerlIO_parse_layers(aTHX_ PL_def_layerlist, s); + } + else { + PerlIO_default_buffer(aTHX_ PL_def_layerlist); + } } if (PL_def_layerlist->cur < 2) { - PerlIO_default_buffer(aTHX_ PL_def_layerlist); + PerlIO_default_buffer(aTHX_ PL_def_layerlist); } return PL_def_layerlist; } @@ -1097,7 +1083,7 @@ Perl_boot_core_PerlIO(pTHX) { #ifdef USE_ATTRIBUTES_FOR_PERLIO newXS("io::MODIFY_SCALAR_ATTRIBUTES", XS_io_MODIFY_SCALAR_ATTRIBUTES, - __FILE__); + __FILE__); #endif newXS("PerlIO::Layer::find", XS_PerlIO__Layer__find, __FILE__); newXS("PerlIO::Layer::NoWarnings", XS_PerlIO__Layer__NoWarnings, __FILE__); @@ -1108,7 +1094,7 @@ PerlIO_default_layer(pTHX_ I32 n) { PerlIO_list_t * const av = PerlIO_default_layers(aTHX); if (n < 0) - n += av->cur; + n += av->cur; return PerlIO_layer_fetch(aTHX_ av, n, PERLIO_FUNCS_CAST(&PerlIO_stdio)); } @@ -1119,10 +1105,10 @@ void PerlIO_stdstreams(pTHX) { if (!PL_perlio) { - PerlIO_init_table(aTHX); - PerlIO_fdopen(0, "Ir" PERLIO_STDTEXT); - PerlIO_fdopen(1, "Iw" PERLIO_STDTEXT); - PerlIO_fdopen(2, "Iw" PERLIO_STDTEXT); + PerlIO_init_table(aTHX); + PerlIO_fdopen(0, "Ir" PERLIO_STDTEXT); + PerlIO_fdopen(1, "Iw" PERLIO_STDTEXT); + PerlIO_fdopen(2, "Iw" PERLIO_STDTEXT); } } @@ -1131,68 +1117,68 @@ PerlIO_push(pTHX_ PerlIO *f, PERLIO_FUNCS_DECL(*tab), const char *mode, SV *arg) { VERIFY_HEAD(f); if (tab->fsize != sizeof(PerlIO_funcs)) { - Perl_croak( aTHX_ - "%s (%" UVuf ") does not match %s (%" UVuf ")", - "PerlIO layer function table size", (UV)tab->fsize, - "size expected by this perl", (UV)sizeof(PerlIO_funcs) ); + Perl_croak( aTHX_ + "%s (%" UVuf ") does not match %s (%" UVuf ")", + "PerlIO layer function table size", (UV)tab->fsize, + "size expected by this perl", (UV)sizeof(PerlIO_funcs) ); } if (tab->size) { - PerlIOl *l; - if (tab->size < sizeof(PerlIOl)) { - Perl_croak( aTHX_ - "%s (%" UVuf ") smaller than %s (%" UVuf ")", - "PerlIO layer instance size", (UV)tab->size, - "size expected by this perl", (UV)sizeof(PerlIOl) ); - } - /* Real layer with a data area */ - if (f) { - char *temp; - Newxz(temp, tab->size, char); - l = (PerlIOl*)temp; - if (l) { - l->next = *f; - l->tab = (PerlIO_funcs*) tab; - l->head = ((PerlIOl*)f)->head; - *f = l; - DEBUG_i( PerlIO_debug("PerlIO_push f=%p %s %s %p\n", + PerlIOl *l; + if (tab->size < sizeof(PerlIOl)) { + Perl_croak( aTHX_ + "%s (%" UVuf ") smaller than %s (%" UVuf ")", + "PerlIO layer instance size", (UV)tab->size, + "size expected by this perl", (UV)sizeof(PerlIOl) ); + } + /* Real layer with a data area */ + if (f) { + char *temp; + Newxz(temp, tab->size, char); + l = (PerlIOl*)temp; + if (l) { + l->next = *f; + l->tab = (PerlIO_funcs*) tab; + l->head = ((PerlIOl*)f)->head; + *f = l; + DEBUG_i( PerlIO_debug("PerlIO_push f=%p %s %s %p\n", (void*)f, tab->name, (mode) ? mode : "(Null)", (void*)arg) ); - if (*l->tab->Pushed && - (*l->tab->Pushed) - (aTHX_ f, mode, arg, (PerlIO_funcs*) tab) != 0) { - PerlIO_pop(aTHX_ f); - return NULL; - } - } - else - return NULL; - } + if (*l->tab->Pushed && + (*l->tab->Pushed) + (aTHX_ f, mode, arg, (PerlIO_funcs*) tab) != 0) { + PerlIO_pop(aTHX_ f); + return NULL; + } + } + else + return NULL; + } } else if (f) { - /* Pseudo-layer where push does its own stack adjust */ - DEBUG_i( PerlIO_debug("PerlIO_push f=%p %s %s %p\n", (void*)f, tab->name, + /* Pseudo-layer where push does its own stack adjust */ + DEBUG_i( PerlIO_debug("PerlIO_push f=%p %s %s %p\n", (void*)f, tab->name, (mode) ? mode : "(Null)", (void*)arg) ); - if (tab->Pushed && - (*tab->Pushed) (aTHX_ f, mode, arg, (PerlIO_funcs*) tab) != 0) { - return NULL; - } + if (tab->Pushed && + (*tab->Pushed) (aTHX_ f, mode, arg, (PerlIO_funcs*) tab) != 0) { + return NULL; + } } return f; } PerlIO * PerlIOBase_open(pTHX_ PerlIO_funcs *self, PerlIO_list_t *layers, - IV n, const char *mode, int fd, int imode, int perm, - PerlIO *old, int narg, SV **args) + IV n, const char *mode, int fd, int imode, int perm, + PerlIO *old, int narg, SV **args) { PerlIO_funcs * const tab = PerlIO_layer_fetch(aTHX_ layers, n - 1, PerlIO_default_layer(aTHX_ 0)); if (tab && tab->Open) { - PerlIO* ret = (*tab->Open)(aTHX_ tab, layers, n - 1, mode, fd, imode, perm, old, narg, args); - if (ret && PerlIO_push(aTHX_ ret, self, mode, PerlIOArg) == NULL) { - PerlIO_close(ret); - return NULL; - } - return ret; + PerlIO* ret = (*tab->Open)(aTHX_ tab, layers, n - 1, mode, fd, imode, perm, old, narg, args); + if (ret && PerlIO_push(aTHX_ ret, self, mode, PerlIOArg) == NULL) { + PerlIO_close(ret); + return NULL; + } + return ret; } SETERRNO(EINVAL, LIB_INVARG); return NULL; @@ -1202,16 +1188,16 @@ IV PerlIOBase_binmode(pTHX_ PerlIO *f) { if (PerlIOValid(f)) { - /* Is layer suitable for raw stream ? */ - if (PerlIOBase(f)->tab && PerlIOBase(f)->tab->kind & PERLIO_K_RAW) { - /* Yes - turn off UTF-8-ness, to undo UTF-8 locale effects */ - PerlIOBase(f)->flags &= ~PERLIO_F_UTF8; - } - else { - /* Not suitable - pop it */ - PerlIO_pop(aTHX_ f); - } - return 0; + /* Is layer suitable for raw stream ? */ + if (PerlIOBase(f)->tab && PerlIOBase(f)->tab->kind & PERLIO_K_RAW) { + /* Yes - turn off UTF-8-ness, to undo UTF-8 locale effects */ + PerlIOBase(f)->flags &= ~PERLIO_F_UTF8; + } + else { + /* Not suitable - pop it */ + PerlIO_pop(aTHX_ f); + } + return 0; } return -1; } @@ -1224,54 +1210,54 @@ PerlIORaw_pushed(pTHX_ PerlIO *f, const char *mode, SV *arg, PerlIO_funcs *tab) PERL_UNUSED_ARG(tab); if (PerlIOValid(f)) { - PerlIO *t; - const PerlIOl *l; - PerlIO_flush(f); - /* - * Strip all layers that are not suitable for a raw stream - */ - t = f; - while (t && (l = *t)) { - if (l->tab && l->tab->Binmode) { - /* Has a handler - normal case */ - if ((*l->tab->Binmode)(aTHX_ t) == 0) { - if (*t == l) { - /* Layer still there - move down a layer */ - t = PerlIONext(t); - } - } - else { - return -1; - } - } - else { - /* No handler - pop it */ - PerlIO_pop(aTHX_ t); - } - } - if (PerlIOValid(f)) { - DEBUG_i( PerlIO_debug(":raw f=%p :%s\n", (void*)f, + PerlIO *t; + const PerlIOl *l; + PerlIO_flush(f); + /* + * Strip all layers that are not suitable for a raw stream + */ + t = f; + while (t && (l = *t)) { + if (l->tab && l->tab->Binmode) { + /* Has a handler - normal case */ + if ((*l->tab->Binmode)(aTHX_ t) == 0) { + if (*t == l) { + /* Layer still there - move down a layer */ + t = PerlIONext(t); + } + } + else { + return -1; + } + } + else { + /* No handler - pop it */ + PerlIO_pop(aTHX_ t); + } + } + if (PerlIOValid(f)) { + DEBUG_i( PerlIO_debug(":raw f=%p :%s\n", (void*)f, PerlIOBase(f)->tab ? PerlIOBase(f)->tab->name : "(Null)") ); - return 0; - } + return 0; + } } return -1; } int PerlIO_apply_layera(pTHX_ PerlIO *f, const char *mode, - PerlIO_list_t *layers, IV n, IV max) + PerlIO_list_t *layers, IV n, IV max) { int code = 0; while (n < max) { - PerlIO_funcs * const tab = PerlIO_layer_fetch(aTHX_ layers, n, NULL); - if (tab) { - if (!PerlIO_push(aTHX_ f, tab, mode, PerlIOArg)) { - code = -1; - break; - } - } - n++; + PerlIO_funcs * const tab = PerlIO_layer_fetch(aTHX_ layers, n, NULL); + if (tab) { + if (!PerlIO_push(aTHX_ f, tab, mode, PerlIOArg)) { + code = -1; + break; + } + } + n++; } return code; } @@ -1283,12 +1269,12 @@ PerlIO_apply_layers(pTHX_ PerlIO *f, const char *mode, const char *names) ENTER; save_scalar(PL_errgv); if (f && names) { - PerlIO_list_t * const layers = PerlIO_list_alloc(aTHX); - code = PerlIO_parse_layers(aTHX_ layers, names); - if (code == 0) { - code = PerlIO_apply_layera(aTHX_ f, mode, layers, 0, layers->cur); - } - PerlIO_list_free(aTHX_ layers); + PerlIO_list_t * const layers = PerlIO_list_alloc(aTHX); + code = PerlIO_parse_layers(aTHX_ layers, names); + if (code == 0) { + code = PerlIO_apply_layera(aTHX_ f, mode, layers, 0, layers->cur); + } + PerlIO_list_free(aTHX_ layers); } LEAVE; return code; @@ -1313,53 +1299,53 @@ PerlIO_binmode(pTHX_ PerlIO *f, int iotype, int mode, const char *names) iotype, mode, (names) ? names : "(Null)") ); if (names) { - /* Do not flush etc. if (e.g.) switching encodings. - if a pushed layer knows it needs to flush lower layers - (for example :unix which is never going to call them) - it can do the flush when it is pushed. - */ - return cBOOL(PerlIO_apply_layers(aTHX_ f, NULL, names) == 0); + /* Do not flush etc. if (e.g.) switching encodings. + if a pushed layer knows it needs to flush lower layers + (for example :unix which is never going to call them) + it can do the flush when it is pushed. + */ + return cBOOL(PerlIO_apply_layers(aTHX_ f, NULL, names) == 0); } else { - /* Fake 5.6 legacy of using this call to turn ON O_TEXT */ + /* Fake 5.6 legacy of using this call to turn ON O_TEXT */ #ifdef PERLIO_USING_CRLF - /* Legacy binmode only has meaning if O_TEXT has a value distinct from - O_BINARY so we can look for it in mode. - */ - if (!(mode & O_BINARY)) { - /* Text mode */ - /* FIXME?: Looking down the layer stack seems wrong, - but is a way of reaching past (say) an encoding layer - to flip CRLF-ness of the layer(s) below - */ - while (*f) { - /* Perhaps we should turn on bottom-most aware layer - e.g. Ilya's idea that UNIX TTY could serve - */ - if (PerlIOBase(f)->tab && - PerlIOBase(f)->tab->kind & PERLIO_K_CANCRLF) - { - if (!(PerlIOBase(f)->flags & PERLIO_F_CRLF)) { - /* Not in text mode - flush any pending stuff and flip it */ - PerlIO_flush(f); - PerlIOBase(f)->flags |= PERLIO_F_CRLF; - } - /* Only need to turn it on in one layer so we are done */ - return TRUE; - } - f = PerlIONext(f); - } - /* Not finding a CRLF aware layer presumably means we are binary - which is not what was requested - so we failed - We _could_ push :crlf layer but so could caller - */ - return FALSE; - } + /* Legacy binmode only has meaning if O_TEXT has a value distinct from + O_BINARY so we can look for it in mode. + */ + if (!(mode & O_BINARY)) { + /* Text mode */ + /* FIXME?: Looking down the layer stack seems wrong, + but is a way of reaching past (say) an encoding layer + to flip CRLF-ness of the layer(s) below + */ + while (*f) { + /* Perhaps we should turn on bottom-most aware layer + e.g. Ilya's idea that UNIX TTY could serve + */ + if (PerlIOBase(f)->tab && + PerlIOBase(f)->tab->kind & PERLIO_K_CANCRLF) + { + if (!(PerlIOBase(f)->flags & PERLIO_F_CRLF)) { + /* Not in text mode - flush any pending stuff and flip it */ + PerlIO_flush(f); + PerlIOBase(f)->flags |= PERLIO_F_CRLF; + } + /* Only need to turn it on in one layer so we are done */ + return TRUE; + } + f = PerlIONext(f); + } + /* Not finding a CRLF aware layer presumably means we are binary + which is not what was requested - so we failed + We _could_ push :crlf layer but so could caller + */ + return FALSE; + } #endif - /* Legacy binmode is now _defined_ as being equivalent to pushing :raw - So code that used to be here is now in PerlIORaw_pushed(). - */ - return cBOOL(PerlIO_push(aTHX_ f, PERLIO_FUNCS_CAST(&PerlIO_raw), NULL, NULL)); + /* Legacy binmode is now _defined_ as being equivalent to pushing :raw + So code that used to be here is now in PerlIORaw_pushed(). + */ + return cBOOL(PerlIO_push(aTHX_ f, PERLIO_FUNCS_CAST(&PerlIO_raw), NULL, NULL)); } } @@ -1367,15 +1353,15 @@ int PerlIO__close(pTHX_ PerlIO *f) { if (PerlIOValid(f)) { - PerlIO_funcs * const tab = PerlIOBase(f)->tab; - if (tab && tab->Close) - return (*tab->Close)(aTHX_ f); - else - return PerlIOBase_close(aTHX_ f); + PerlIO_funcs * const tab = PerlIOBase(f)->tab; + if (tab && tab->Close) + return (*tab->Close)(aTHX_ f); + else + return PerlIOBase_close(aTHX_ f); } else { - SETERRNO(EBADF, SS_IVCHAN); - return -1; + SETERRNO(EBADF, SS_IVCHAN); + return -1; } } @@ -1384,10 +1370,10 @@ Perl_PerlIO_close(pTHX_ PerlIO *f) { const int code = PerlIO__close(aTHX_ f); while (PerlIOValid(f)) { - PerlIO_pop(aTHX_ f); - if (PerlIO_lockcnt(f)) - /* we're in use; the 'pop' deferred freeing the structure */ - f = PerlIONext(f); + PerlIO_pop(aTHX_ f); + if (PerlIO_lockcnt(f)) + /* we're in use; the 'pop' deferred freeing the structure */ + f = PerlIONext(f); } return code; } @@ -1406,13 +1392,13 @@ PerlIO_layer_from_ref(pTHX_ SV *sv) * For any scalar type load the handler which is bundled with perl */ if (SvTYPE(sv) < SVt_PVAV && (!isGV_with_GP(sv) || SvFAKE(sv))) { - PerlIO_funcs *f = PerlIO_find_layer(aTHX_ STR_WITH_LEN("scalar"), 1); - /* This isn't supposed to happen, since PerlIO::scalar is core, - * but could happen anyway in smaller installs or with PAR */ - if (!f) - /* diag_listed_as: Unknown PerlIO layer "%s" */ - Perl_ck_warner(aTHX_ packWARN(WARN_LAYER), "Unknown PerlIO layer \"scalar\""); - return f; + PerlIO_funcs *f = PerlIO_find_layer(aTHX_ STR_WITH_LEN("scalar"), 1); + /* This isn't supposed to happen, since PerlIO::scalar is core, + * but could happen anyway in smaller installs or with PAR */ + if (!f) + /* diag_listed_as: Unknown PerlIO layer "%s" */ + Perl_ck_warner(aTHX_ packWARN(WARN_LAYER), "Unknown PerlIO layer \"scalar\""); + return f; } /* @@ -1420,156 +1406,156 @@ PerlIO_layer_from_ref(pTHX_ SV *sv) */ switch (SvTYPE(sv)) { case SVt_PVAV: - return PerlIO_find_layer(aTHX_ STR_WITH_LEN("Array"), 0); + return PerlIO_find_layer(aTHX_ STR_WITH_LEN("Array"), 0); case SVt_PVHV: - return PerlIO_find_layer(aTHX_ STR_WITH_LEN("Hash"), 0); + return PerlIO_find_layer(aTHX_ STR_WITH_LEN("Hash"), 0); case SVt_PVCV: - return PerlIO_find_layer(aTHX_ STR_WITH_LEN("Code"), 0); + return PerlIO_find_layer(aTHX_ STR_WITH_LEN("Code"), 0); case SVt_PVGV: - return PerlIO_find_layer(aTHX_ STR_WITH_LEN("Glob"), 0); + return PerlIO_find_layer(aTHX_ STR_WITH_LEN("Glob"), 0); default: - return NULL; + return NULL; } } PerlIO_list_t * PerlIO_resolve_layers(pTHX_ const char *layers, - const char *mode, int narg, SV **args) + const char *mode, int narg, SV **args) { PerlIO_list_t *def = PerlIO_default_layers(aTHX); int incdef = 1; if (!PL_perlio) - PerlIO_stdstreams(aTHX); + PerlIO_stdstreams(aTHX); if (narg) { - SV * const arg = *args; - /* - * If it is a reference but not an object see if we have a handler - * for it - */ - if (SvROK(arg) && !SvOBJECT(SvRV(arg))) { - PerlIO_funcs * const handler = PerlIO_layer_from_ref(aTHX_ SvRV(arg)); - if (handler) { - def = PerlIO_list_alloc(aTHX); - PerlIO_list_push(aTHX_ def, handler, &PL_sv_undef); - incdef = 0; - } - /* - * Don't fail if handler cannot be found :via(...) etc. may do - * something sensible else we will just stringfy and open - * resulting string. - */ - } + SV * const arg = *args; + /* + * If it is a reference but not an object see if we have a handler + * for it + */ + if (SvROK(arg) && !SvOBJECT(SvRV(arg))) { + PerlIO_funcs * const handler = PerlIO_layer_from_ref(aTHX_ SvRV(arg)); + if (handler) { + def = PerlIO_list_alloc(aTHX); + PerlIO_list_push(aTHX_ def, handler, &PL_sv_undef); + incdef = 0; + } + /* + * Don't fail if handler cannot be found :via(...) etc. may do + * something sensible else we will just stringfy and open + * resulting string. + */ + } } if (!layers || !*layers) - layers = Perl_PerlIO_context_layers(aTHX_ mode); + layers = Perl_PerlIO_context_layers(aTHX_ mode); if (layers && *layers) { - PerlIO_list_t *av; - if (incdef) { - av = PerlIO_clone_list(aTHX_ def, NULL); - } - else { - av = def; - } - if (PerlIO_parse_layers(aTHX_ av, layers) == 0) { - return av; - } - else { - PerlIO_list_free(aTHX_ av); - return NULL; - } + PerlIO_list_t *av; + if (incdef) { + av = PerlIO_clone_list(aTHX_ def, NULL); + } + else { + av = def; + } + if (PerlIO_parse_layers(aTHX_ av, layers) == 0) { + return av; + } + else { + PerlIO_list_free(aTHX_ av); + return NULL; + } } else { - if (incdef) - def->refcnt++; - return def; + if (incdef) + def->refcnt++; + return def; } } PerlIO * PerlIO_openn(pTHX_ const char *layers, const char *mode, int fd, - int imode, int perm, PerlIO *f, int narg, SV **args) + int imode, int perm, PerlIO *f, int narg, SV **args) { if (!f && narg == 1 && *args == &PL_sv_undef) { imode = PerlIOUnix_oflags(mode); - if (imode != -1 && (f = PerlIO_tmpfile_flags(imode))) { - if (!layers || !*layers) - layers = Perl_PerlIO_context_layers(aTHX_ mode); - if (layers && *layers) - PerlIO_apply_layers(aTHX_ f, mode, layers); - } + if (imode != -1 && (f = PerlIO_tmpfile_flags(imode))) { + if (!layers || !*layers) + layers = Perl_PerlIO_context_layers(aTHX_ mode); + if (layers && *layers) + PerlIO_apply_layers(aTHX_ f, mode, layers); + } } else { - PerlIO_list_t *layera; - IV n; - PerlIO_funcs *tab = NULL; - if (PerlIOValid(f)) { - /* - * This is "reopen" - it is not tested as perl does not use it - * yet - */ - PerlIOl *l = *f; - layera = PerlIO_list_alloc(aTHX); - while (l) { - SV *arg = NULL; - if (l->tab && l->tab->Getarg) - arg = (*l->tab->Getarg) (aTHX_ &l, NULL, 0); - PerlIO_list_push(aTHX_ layera, l->tab, - (arg) ? arg : &PL_sv_undef); - SvREFCNT_dec(arg); - l = *PerlIONext(&l); - } - } - else { - layera = PerlIO_resolve_layers(aTHX_ layers, mode, narg, args); - if (!layera) { - return NULL; - } - } - /* - * Start at "top" of layer stack - */ - n = layera->cur - 1; - while (n >= 0) { - PerlIO_funcs * const t = PerlIO_layer_fetch(aTHX_ layera, n, NULL); - if (t && t->Open) { - tab = t; - break; - } - n--; - } - if (tab) { - /* - * Found that layer 'n' can do opens - call it - */ - if (narg > 1 && !(tab->kind & PERLIO_K_MULTIARG)) { - Perl_croak(aTHX_ "More than one argument to open(,':%s')",tab->name); - } - DEBUG_i( PerlIO_debug("openn(%s,'%s','%s',%d,%x,%o,%p,%d,%p)\n", + PerlIO_list_t *layera; + IV n; + PerlIO_funcs *tab = NULL; + if (PerlIOValid(f)) { + /* + * This is "reopen" - it is not tested as perl does not use it + * yet + */ + PerlIOl *l = *f; + layera = PerlIO_list_alloc(aTHX); + while (l) { + SV *arg = NULL; + if (l->tab && l->tab->Getarg) + arg = (*l->tab->Getarg) (aTHX_ &l, NULL, 0); + PerlIO_list_push(aTHX_ layera, l->tab, + (arg) ? arg : &PL_sv_undef); + SvREFCNT_dec(arg); + l = *PerlIONext(&l); + } + } + else { + layera = PerlIO_resolve_layers(aTHX_ layers, mode, narg, args); + if (!layera) { + return NULL; + } + } + /* + * Start at "top" of layer stack + */ + n = layera->cur - 1; + while (n >= 0) { + PerlIO_funcs * const t = PerlIO_layer_fetch(aTHX_ layera, n, NULL); + if (t && t->Open) { + tab = t; + break; + } + n--; + } + if (tab) { + /* + * Found that layer 'n' can do opens - call it + */ + if (narg > 1 && !(tab->kind & PERLIO_K_MULTIARG)) { + Perl_croak(aTHX_ "More than one argument to open(,':%s')",tab->name); + } + DEBUG_i( PerlIO_debug("openn(%s,'%s','%s',%d,%x,%o,%p,%d,%p)\n", tab->name, layers ? layers : "(Null)", mode, fd, imode, perm, (void*)f, narg, (void*)args) ); - if (tab->Open) - f = (*tab->Open) (aTHX_ tab, layera, n, mode, fd, imode, perm, - f, narg, args); - else { - SETERRNO(EINVAL, LIB_INVARG); - f = NULL; - } - if (f) { - if (n + 1 < layera->cur) { - /* - * More layers above the one that we used to open - - * apply them now - */ - if (PerlIO_apply_layera(aTHX_ f, mode, layera, n + 1, layera->cur) != 0) { - /* If pushing layers fails close the file */ - PerlIO_close(f); - f = NULL; - } - } - } - } - PerlIO_list_free(aTHX_ layera); + if (tab->Open) + f = (*tab->Open) (aTHX_ tab, layera, n, mode, fd, imode, perm, + f, narg, args); + else { + SETERRNO(EINVAL, LIB_INVARG); + f = NULL; + } + if (f) { + if (n + 1 < layera->cur) { + /* + * More layers above the one that we used to open - + * apply them now + */ + if (PerlIO_apply_layera(aTHX_ f, mode, layera, n + 1, layera->cur) != 0) { + /* If pushing layers fails close the file */ + PerlIO_close(f); + f = NULL; + } + } + } + } + PerlIO_list_free(aTHX_ layera); } return f; } @@ -1615,41 +1601,41 @@ int Perl_PerlIO_flush(pTHX_ PerlIO *f) { if (f) { - if (*f) { - const PerlIO_funcs *tab = PerlIOBase(f)->tab; - - if (tab && tab->Flush) - return (*tab->Flush) (aTHX_ f); - else - return 0; /* If no Flush defined, silently succeed. */ - } - else { - DEBUG_i( PerlIO_debug("Cannot flush f=%p\n", (void*)f) ); - SETERRNO(EBADF, SS_IVCHAN); - return -1; - } + if (*f) { + const PerlIO_funcs *tab = PerlIOBase(f)->tab; + + if (tab && tab->Flush) + return (*tab->Flush) (aTHX_ f); + else + return 0; /* If no Flush defined, silently succeed. */ + } + else { + DEBUG_i( PerlIO_debug("Cannot flush f=%p\n", (void*)f) ); + SETERRNO(EBADF, SS_IVCHAN); + return -1; + } } else { - /* - * Is it good API design to do flush-all on NULL, a potentially - * erroneous input? Maybe some magical value (PerlIO* - * PERLIO_FLUSH_ALL = (PerlIO*)-1;)? Yes, stdio does similar - * things on fflush(NULL), but should we be bound by their design - * decisions? --jhi - */ - PerlIOl **table = &PL_perlio; - PerlIOl *ff; - int code = 0; - while ((ff = *table)) { - int i; - table = (PerlIOl **) (ff++); - for (i = 1; i < PERLIO_TABLE_SIZE; i++) { - if (ff->next && PerlIO_flush(&(ff->next)) != 0) - code = -1; - ff++; - } - } - return code; + /* + * Is it good API design to do flush-all on NULL, a potentially + * erroneous input? Maybe some magical value (PerlIO* + * PERLIO_FLUSH_ALL = (PerlIO*)-1;)? Yes, stdio does similar + * things on fflush(NULL), but should we be bound by their design + * decisions? --jhi + */ + PerlIOl **table = &PL_perlio; + PerlIOl *ff; + int code = 0; + while ((ff = *table)) { + int i; + table = (PerlIOl **) (ff++); + for (i = 1; i < PERLIO_TABLE_SIZE; i++) { + if (ff->next && PerlIO_flush(&(ff->next)) != 0) + code = -1; + ff++; + } + } + return code; } } @@ -1659,16 +1645,16 @@ PerlIOBase_flush_linebuf(pTHX) PerlIOl **table = &PL_perlio; PerlIOl *f; while ((f = *table)) { - int i; - table = (PerlIOl **) (f++); - for (i = 1; i < PERLIO_TABLE_SIZE; i++) { - if (f->next - && (PerlIOBase(&(f->next))-> - flags & (PERLIO_F_LINEBUF | PERLIO_F_CANWRITE)) - == (PERLIO_F_LINEBUF | PERLIO_F_CANWRITE)) - PerlIO_flush(&(f->next)); - f++; - } + int i; + table = (PerlIOl **) (f++); + for (i = 1; i < PERLIO_TABLE_SIZE; i++) { + if (f->next + && (PerlIOBase(&(f->next))-> + flags & (PERLIO_F_LINEBUF | PERLIO_F_CANWRITE)) + == (PERLIO_F_LINEBUF | PERLIO_F_CANWRITE)) + PerlIO_flush(&(f->next)); + f++; + } } } @@ -1682,9 +1668,9 @@ int PerlIO_isutf8(PerlIO *f) { if (PerlIOValid(f)) - return (PerlIOBase(f)->flags & PERLIO_F_UTF8) != 0; + return (PerlIOBase(f)->flags & PERLIO_F_UTF8) != 0; else - SETERRNO(EBADF, SS_IVCHAN); + SETERRNO(EBADF, SS_IVCHAN); return -1; } @@ -1717,10 +1703,10 @@ int PerlIO_has_base(PerlIO *f) { if (PerlIOValid(f)) { - const PerlIO_funcs * const tab = PerlIOBase(f)->tab; + const PerlIO_funcs * const tab = PerlIOBase(f)->tab; - if (tab) - return (tab->Get_base != NULL); + if (tab) + return (tab->Get_base != NULL); } return 0; @@ -1730,12 +1716,12 @@ int PerlIO_fast_gets(PerlIO *f) { if (PerlIOValid(f)) { - if (PerlIOBase(f)->flags & PERLIO_F_FASTGETS) { - const PerlIO_funcs * const tab = PerlIOBase(f)->tab; + if (PerlIOBase(f)->flags & PERLIO_F_FASTGETS) { + const PerlIO_funcs * const tab = PerlIOBase(f)->tab; - if (tab) - return (tab->Set_ptrcnt != NULL); - } + if (tab) + return (tab->Set_ptrcnt != NULL); + } } return 0; @@ -1745,10 +1731,10 @@ int PerlIO_has_cntptr(PerlIO *f) { if (PerlIOValid(f)) { - const PerlIO_funcs * const tab = PerlIOBase(f)->tab; + const PerlIO_funcs * const tab = PerlIOBase(f)->tab; - if (tab) - return (tab->Get_ptr != NULL && tab->Get_cnt != NULL); + if (tab) + return (tab->Get_ptr != NULL && tab->Get_cnt != NULL); } return 0; @@ -1758,10 +1744,10 @@ int PerlIO_canset_cnt(PerlIO *f) { if (PerlIOValid(f)) { - const PerlIO_funcs * const tab = PerlIOBase(f)->tab; + const PerlIO_funcs * const tab = PerlIOBase(f)->tab; - if (tab) - return (tab->Set_ptrcnt != NULL); + if (tab) + return (tab->Set_ptrcnt != NULL); } return 0; @@ -1817,11 +1803,11 @@ PerlIOUtf8_pushed(pTHX_ PerlIO *f, const char *mode, SV *arg, PerlIO_funcs *tab) PERL_UNUSED_ARG(mode); PERL_UNUSED_ARG(arg); if (PerlIOValid(f)) { - if (tab && tab->kind & PERLIO_K_UTF8) - PerlIOBase(f)->flags |= PERLIO_F_UTF8; - else - PerlIOBase(f)->flags &= ~PERLIO_F_UTF8; - return 0; + if (tab && tab->kind & PERLIO_K_UTF8) + PerlIOBase(f)->flags |= PERLIO_F_UTF8; + else + PerlIOBase(f)->flags &= ~PERLIO_F_UTF8; + return 0; } return -1; } @@ -1935,27 +1921,27 @@ PerlIO_modestr(PerlIO * f, char *buf) { char *s = buf; if (PerlIOValid(f)) { - const IV flags = PerlIOBase(f)->flags; - if (flags & PERLIO_F_APPEND) { - *s++ = 'a'; - if (flags & PERLIO_F_CANREAD) { - *s++ = '+'; - } - } - else if (flags & PERLIO_F_CANREAD) { - *s++ = 'r'; - if (flags & PERLIO_F_CANWRITE) - *s++ = '+'; - } - else if (flags & PERLIO_F_CANWRITE) { - *s++ = 'w'; - if (flags & PERLIO_F_CANREAD) { - *s++ = '+'; - } - } + const IV flags = PerlIOBase(f)->flags; + if (flags & PERLIO_F_APPEND) { + *s++ = 'a'; + if (flags & PERLIO_F_CANREAD) { + *s++ = '+'; + } + } + else if (flags & PERLIO_F_CANREAD) { + *s++ = 'r'; + if (flags & PERLIO_F_CANWRITE) + *s++ = '+'; + } + else if (flags & PERLIO_F_CANWRITE) { + *s++ = 'w'; + if (flags & PERLIO_F_CANREAD) { + *s++ = '+'; + } + } #ifdef PERLIO_USING_CRLF - if (!(flags & PERLIO_F_CRLF)) - *s++ = 'b'; + if (!(flags & PERLIO_F_CRLF)) + *s++ = 'b'; #endif } *s = '\0'; @@ -1971,87 +1957,87 @@ PerlIOBase_pushed(pTHX_ PerlIO *f, const char *mode, SV *arg, PerlIO_funcs *tab) PERL_UNUSED_ARG(arg); l->flags &= ~(PERLIO_F_CANREAD | PERLIO_F_CANWRITE | - PERLIO_F_TRUNCATE | PERLIO_F_APPEND); + PERLIO_F_TRUNCATE | PERLIO_F_APPEND); if (tab && tab->Set_ptrcnt != NULL) - l->flags |= PERLIO_F_FASTGETS; + l->flags |= PERLIO_F_FASTGETS; if (mode) { - if (*mode == IoTYPE_NUMERIC || *mode == IoTYPE_IMPLICIT) - mode++; - switch (*mode++) { - case 'r': - l->flags |= PERLIO_F_CANREAD; - break; - case 'a': - l->flags |= PERLIO_F_APPEND | PERLIO_F_CANWRITE; - break; - case 'w': - l->flags |= PERLIO_F_TRUNCATE | PERLIO_F_CANWRITE; - break; - default: - SETERRNO(EINVAL, LIB_INVARG); - return -1; - } -#ifdef EBCDIC - { + if (*mode == IoTYPE_NUMERIC || *mode == IoTYPE_IMPLICIT) + mode++; + switch (*mode++) { + case 'r': + l->flags |= PERLIO_F_CANREAD; + break; + case 'a': + l->flags |= PERLIO_F_APPEND | PERLIO_F_CANWRITE; + break; + case 'w': + l->flags |= PERLIO_F_TRUNCATE | PERLIO_F_CANWRITE; + break; + default: + SETERRNO(EINVAL, LIB_INVARG); + return -1; + } +#ifdef __MVS__ /* XXX Perhaps should be be OEMVS instead of __MVS__ */ + { /* The mode variable contains one positional parameter followed by * optional keyword parameters. The positional parameters must be * passed as lowercase characters. The keyword parameters can be * passed in mixed case. They must be separated by commas. Only one * instance of a keyword can be specified. */ - int comma = 0; - while (*mode) { - switch (*mode++) { - case '+': - if(!comma) - l->flags |= PERLIO_F_CANREAD | PERLIO_F_CANWRITE; - break; - case 'b': - if(!comma) - l->flags &= ~PERLIO_F_CRLF; - break; - case 't': - if(!comma) - l->flags |= PERLIO_F_CRLF; - break; - case ',': - comma = 1; - break; - default: - break; - } - } - } + int comma = 0; + while (*mode) { + switch (*mode++) { + case '+': + if(!comma) + l->flags |= PERLIO_F_CANREAD | PERLIO_F_CANWRITE; + break; + case 'b': + if(!comma) + l->flags &= ~PERLIO_F_CRLF; + break; + case 't': + if(!comma) + l->flags |= PERLIO_F_CRLF; + break; + case ',': + comma = 1; + break; + default: + break; + } + } + } #else - while (*mode) { - switch (*mode++) { - case '+': - l->flags |= PERLIO_F_CANREAD | PERLIO_F_CANWRITE; - break; - case 'b': - l->flags &= ~PERLIO_F_CRLF; - break; - case 't': - l->flags |= PERLIO_F_CRLF; - break; - default: - SETERRNO(EINVAL, LIB_INVARG); - return -1; - } - } + while (*mode) { + switch (*mode++) { + case '+': + l->flags |= PERLIO_F_CANREAD | PERLIO_F_CANWRITE; + break; + case 'b': + l->flags &= ~PERLIO_F_CRLF; + break; + case 't': + l->flags |= PERLIO_F_CRLF; + break; + default: + SETERRNO(EINVAL, LIB_INVARG); + return -1; + } + } #endif } else { - if (l->next) { - l->flags |= l->next->flags & - (PERLIO_F_CANREAD | PERLIO_F_CANWRITE | PERLIO_F_TRUNCATE | - PERLIO_F_APPEND); - } + if (l->next) { + l->flags |= l->next->flags & + (PERLIO_F_CANREAD | PERLIO_F_CANWRITE | PERLIO_F_TRUNCATE | + PERLIO_F_APPEND); + } } #if 0 DEBUG_i( PerlIO_debug("PerlIOBase_pushed f=%p %s %s fl=%08" UVxf " (%s)\n", - (void*)f, PerlIOBase(f)->tab->name, (omode) ? omode : "(Null)", - l->flags, PerlIO_modestr(f, temp)); + (void*)f, PerlIOBase(f)->tab->name, (omode) ? omode : "(Null)", + l->flags, PerlIO_modestr(f, temp)); ); #endif return 0; @@ -2083,34 +2069,34 @@ PerlIOBase_read(pTHX_ PerlIO *f, void *vbuf, Size_t count) STDCHAR *buf = (STDCHAR *) vbuf; if (f) { if (!(PerlIOBase(f)->flags & PERLIO_F_CANREAD)) { - PerlIOBase(f)->flags |= PERLIO_F_ERROR; - SETERRNO(EBADF, SS_IVCHAN); - PerlIO_save_errno(f); - return 0; - } - while (count > 0) { - get_cnt: - { - SSize_t avail = PerlIO_get_cnt(f); - SSize_t take = 0; - if (avail > 0) - take = (((SSize_t) count >= 0) && ((SSize_t)count < avail)) ? (SSize_t)count : avail; - if (take > 0) { - STDCHAR *ptr = PerlIO_get_ptr(f); - Copy(ptr, buf, take, STDCHAR); - PerlIO_set_ptrcnt(f, ptr + take, (avail -= take)); - count -= take; - buf += take; - if (avail == 0) /* set_ptrcnt could have reset avail */ - goto get_cnt; - } - if (count > 0 && avail <= 0) { - if (PerlIO_fill(f) != 0) - break; - } - } - } - return (buf - (STDCHAR *) vbuf); + PerlIOBase(f)->flags |= PERLIO_F_ERROR; + SETERRNO(EBADF, SS_IVCHAN); + PerlIO_save_errno(f); + return 0; + } + while (count > 0) { + get_cnt: + { + SSize_t avail = PerlIO_get_cnt(f); + SSize_t take = 0; + if (avail > 0) + take = (((SSize_t) count >= 0) && ((SSize_t)count < avail)) ? (SSize_t)count : avail; + if (take > 0) { + STDCHAR *ptr = PerlIO_get_ptr(f); + Copy(ptr, buf, take, STDCHAR); + PerlIO_set_ptrcnt(f, ptr + take, (avail -= take)); + count -= take; + buf += take; + if (avail == 0) /* set_ptrcnt could have reset avail */ + goto get_cnt; + } + if (count > 0 && avail <= 0) { + if (PerlIO_fill(f) != 0) + break; + } + } + } + return (buf - (STDCHAR *) vbuf); } return 0; } @@ -2136,26 +2122,26 @@ PerlIOBase_close(pTHX_ PerlIO *f) { IV code = -1; if (PerlIOValid(f)) { - PerlIO *n = PerlIONext(f); - code = PerlIO_flush(f); - PerlIOBase(f)->flags &= - ~(PERLIO_F_CANREAD | PERLIO_F_CANWRITE | PERLIO_F_OPEN); - while (PerlIOValid(n)) { - const PerlIO_funcs * const tab = PerlIOBase(n)->tab; - if (tab && tab->Close) { - if ((*tab->Close)(aTHX_ n) != 0) - code = -1; - break; - } - else { - PerlIOBase(n)->flags &= - ~(PERLIO_F_CANREAD | PERLIO_F_CANWRITE | PERLIO_F_OPEN); - } - n = PerlIONext(n); - } + PerlIO *n = PerlIONext(f); + code = PerlIO_flush(f); + PerlIOBase(f)->flags &= + ~(PERLIO_F_CANREAD | PERLIO_F_CANWRITE | PERLIO_F_OPEN); + while (PerlIOValid(n)) { + const PerlIO_funcs * const tab = PerlIOBase(n)->tab; + if (tab && tab->Close) { + if ((*tab->Close)(aTHX_ n) != 0) + code = -1; + break; + } + else { + PerlIOBase(n)->flags &= + ~(PERLIO_F_CANREAD | PERLIO_F_CANWRITE | PERLIO_F_OPEN); + } + n = PerlIONext(n); + } } else { - SETERRNO(EBADF, SS_IVCHAN); + SETERRNO(EBADF, SS_IVCHAN); } return code; } @@ -2165,7 +2151,7 @@ PerlIOBase_eof(pTHX_ PerlIO *f) { PERL_UNUSED_CONTEXT; if (PerlIOValid(f)) { - return (PerlIOBase(f)->flags & PERLIO_F_EOF) != 0; + return (PerlIOBase(f)->flags & PERLIO_F_EOF) != 0; } return 1; } @@ -2175,7 +2161,7 @@ PerlIOBase_error(pTHX_ PerlIO *f) { PERL_UNUSED_CONTEXT; if (PerlIOValid(f)) { - return (PerlIOBase(f)->flags & PERLIO_F_ERROR) != 0; + return (PerlIOBase(f)->flags & PERLIO_F_ERROR) != 0; } return 1; } @@ -2184,10 +2170,10 @@ void PerlIOBase_clearerr(pTHX_ PerlIO *f) { if (PerlIOValid(f)) { - PerlIO * const n = PerlIONext(f); - PerlIOBase(f)->flags &= ~(PERLIO_F_ERROR | PERLIO_F_EOF); - if (PerlIOValid(n)) - PerlIO_clearerr(n); + PerlIO * const n = PerlIONext(f); + PerlIOBase(f)->flags &= ~(PERLIO_F_ERROR | PERLIO_F_EOF); + if (PerlIOValid(n)) + PerlIO_clearerr(n); } } @@ -2196,7 +2182,7 @@ PerlIOBase_setlinebuf(pTHX_ PerlIO *f) { PERL_UNUSED_CONTEXT; if (PerlIOValid(f)) { - PerlIOBase(f)->flags |= PERLIO_F_LINEBUF; + PerlIOBase(f)->flags |= PERLIO_F_LINEBUF; } } @@ -2204,15 +2190,15 @@ SV * PerlIO_sv_dup(pTHX_ SV *arg, CLONE_PARAMS *param) { if (!arg) - return NULL; + return NULL; #ifdef USE_ITHREADS if (param) { - arg = sv_dup(arg, param); - SvREFCNT_inc_simple_void_NN(arg); - return arg; + arg = sv_dup(arg, param); + SvREFCNT_inc_simple_void_NN(arg); + return arg; } else { - return newSVsv(arg); + return newSVsv(arg); } #else PERL_UNUSED_ARG(param); @@ -2225,26 +2211,26 @@ PerlIOBase_dup(pTHX_ PerlIO *f, PerlIO *o, CLONE_PARAMS *param, int flags) { PerlIO * const nexto = PerlIONext(o); if (PerlIOValid(nexto)) { - const PerlIO_funcs * const tab = PerlIOBase(nexto)->tab; - if (tab && tab->Dup) - f = (*tab->Dup)(aTHX_ f, nexto, param, flags); - else - f = PerlIOBase_dup(aTHX_ f, nexto, param, flags); + const PerlIO_funcs * const tab = PerlIOBase(nexto)->tab; + if (tab && tab->Dup) + f = (*tab->Dup)(aTHX_ f, nexto, param, flags); + else + f = PerlIOBase_dup(aTHX_ f, nexto, param, flags); } if (f) { - PerlIO_funcs * const self = PerlIOBase(o)->tab; - SV *arg = NULL; - char buf[8]; - assert(self); - DEBUG_i(PerlIO_debug("PerlIOBase_dup %s f=%p o=%p param=%p\n", + PerlIO_funcs * const self = PerlIOBase(o)->tab; + SV *arg = NULL; + char buf[8]; + assert(self); + DEBUG_i(PerlIO_debug("PerlIOBase_dup %s f=%p o=%p param=%p\n", self->name, (void*)f, (void*)o, (void*)param) ); - if (self->Getarg) - arg = (*self->Getarg)(aTHX_ o, param, flags); - f = PerlIO_push(aTHX_ f, self, PerlIO_modestr(o,buf), arg); - if (f && PerlIOBase(o)->flags & PERLIO_F_UTF8) - PerlIOBase(f)->flags |= PERLIO_F_UTF8; - SvREFCNT_dec(arg); + if (self->Getarg) + arg = (*self->Getarg)(aTHX_ o, param, flags); + f = PerlIO_push(aTHX_ f, self, PerlIO_modestr(o,buf), arg); + if (f && PerlIOBase(o)->flags & PERLIO_F_UTF8) + PerlIOBase(f)->flags |= PERLIO_F_UTF8; + SvREFCNT_dec(arg); } return f; } @@ -2256,7 +2242,6 @@ static void S_more_refcounted_fds(pTHX_ const int new_fd) PERL_TSA_REQUIRES(PL_perlio_mutex) { - dVAR; const int old_max = PL_perlio_fd_refcnt_size; const int new_max = 16 + (new_fd & ~15); int *new_array; @@ -2269,7 +2254,7 @@ S_more_refcounted_fds(pTHX_ const int new_fd) old_max, new_fd, new_max) ); if (new_fd < old_max) { - return; + return; } assert (new_max > new_fd); @@ -2279,8 +2264,8 @@ S_more_refcounted_fds(pTHX_ const int new_fd) new_array = (int*) realloc(PL_perlio_fd_refcnt, new_max * sizeof(int)); if (!new_array) { - MUTEX_UNLOCK(&PL_perlio_mutex); - croak_no_mem(); + MUTEX_UNLOCK(&PL_perlio_mutex); + croak_no_mem(); } PL_perlio_fd_refcnt_size = new_max; @@ -2306,25 +2291,24 @@ PerlIOUnix_refcnt_inc(int fd) { dTHX; if (fd >= 0) { - dVAR; - - MUTEX_LOCK(&PL_perlio_mutex); - if (fd >= PL_perlio_fd_refcnt_size) - S_more_refcounted_fds(aTHX_ fd); - - PL_perlio_fd_refcnt[fd]++; - if (PL_perlio_fd_refcnt[fd] <= 0) { - /* diag_listed_as: refcnt_inc: fd %d%s */ - Perl_croak(aTHX_ "refcnt_inc: fd %d: %d <= 0\n", - fd, PL_perlio_fd_refcnt[fd]); - } - DEBUG_i( PerlIO_debug("refcnt_inc: fd %d refcnt=%d\n", + + MUTEX_LOCK(&PL_perlio_mutex); + if (fd >= PL_perlio_fd_refcnt_size) + S_more_refcounted_fds(aTHX_ fd); + + PL_perlio_fd_refcnt[fd]++; + if (PL_perlio_fd_refcnt[fd] <= 0) { + /* diag_listed_as: refcnt_inc: fd %d%s */ + Perl_croak(aTHX_ "refcnt_inc: fd %d: %d <= 0\n", + fd, PL_perlio_fd_refcnt[fd]); + } + DEBUG_i( PerlIO_debug("refcnt_inc: fd %d refcnt=%d\n", fd, PL_perlio_fd_refcnt[fd]) ); - MUTEX_UNLOCK(&PL_perlio_mutex); + MUTEX_UNLOCK(&PL_perlio_mutex); } else { - /* diag_listed_as: refcnt_inc: fd %d%s */ - Perl_croak(aTHX_ "refcnt_inc: fd %d < 0\n", fd); + /* diag_listed_as: refcnt_inc: fd %d%s */ + Perl_croak(aTHX_ "refcnt_inc: fd %d < 0\n", fd); } } @@ -2335,26 +2319,24 @@ PerlIOUnix_refcnt_dec(int fd) if (fd >= 0) { #ifdef DEBUGGING dTHX; -#else - dVAR; #endif - MUTEX_LOCK(&PL_perlio_mutex); - if (fd >= PL_perlio_fd_refcnt_size) { - /* diag_listed_as: refcnt_dec: fd %d%s */ - Perl_croak_nocontext("refcnt_dec: fd %d >= refcnt_size %d\n", - fd, PL_perlio_fd_refcnt_size); - } - if (PL_perlio_fd_refcnt[fd] <= 0) { - /* diag_listed_as: refcnt_dec: fd %d%s */ - Perl_croak_nocontext("refcnt_dec: fd %d: %d <= 0\n", - fd, PL_perlio_fd_refcnt[fd]); - } - cnt = --PL_perlio_fd_refcnt[fd]; - DEBUG_i( PerlIO_debug("refcnt_dec: fd %d refcnt=%d\n", fd, cnt) ); - MUTEX_UNLOCK(&PL_perlio_mutex); + MUTEX_LOCK(&PL_perlio_mutex); + if (fd >= PL_perlio_fd_refcnt_size) { + /* diag_listed_as: refcnt_dec: fd %d%s */ + Perl_croak_nocontext("refcnt_dec: fd %d >= refcnt_size %d\n", + fd, PL_perlio_fd_refcnt_size); + } + if (PL_perlio_fd_refcnt[fd] <= 0) { + /* diag_listed_as: refcnt_dec: fd %d%s */ + Perl_croak_nocontext("refcnt_dec: fd %d: %d <= 0\n", + fd, PL_perlio_fd_refcnt[fd]); + } + cnt = --PL_perlio_fd_refcnt[fd]; + DEBUG_i( PerlIO_debug("refcnt_dec: fd %d refcnt=%d\n", fd, cnt) ); + MUTEX_UNLOCK(&PL_perlio_mutex); } else { - /* diag_listed_as: refcnt_dec: fd %d%s */ - Perl_croak_nocontext("refcnt_dec: fd %d < 0\n", fd); + /* diag_listed_as: refcnt_dec: fd %d%s */ + Perl_croak_nocontext("refcnt_dec: fd %d < 0\n", fd); } return cnt; } @@ -2365,23 +2347,22 @@ PerlIOUnix_refcnt(int fd) dTHX; int cnt = 0; if (fd >= 0) { - dVAR; - MUTEX_LOCK(&PL_perlio_mutex); - if (fd >= PL_perlio_fd_refcnt_size) { - /* diag_listed_as: refcnt: fd %d%s */ - Perl_croak(aTHX_ "refcnt: fd %d >= refcnt_size %d\n", - fd, PL_perlio_fd_refcnt_size); - } - if (PL_perlio_fd_refcnt[fd] <= 0) { - /* diag_listed_as: refcnt: fd %d%s */ - Perl_croak(aTHX_ "refcnt: fd %d: %d <= 0\n", - fd, PL_perlio_fd_refcnt[fd]); - } - cnt = PL_perlio_fd_refcnt[fd]; - MUTEX_UNLOCK(&PL_perlio_mutex); + MUTEX_LOCK(&PL_perlio_mutex); + if (fd >= PL_perlio_fd_refcnt_size) { + /* diag_listed_as: refcnt: fd %d%s */ + Perl_croak(aTHX_ "refcnt: fd %d >= refcnt_size %d\n", + fd, PL_perlio_fd_refcnt_size); + } + if (PL_perlio_fd_refcnt[fd] <= 0) { + /* diag_listed_as: refcnt: fd %d%s */ + Perl_croak(aTHX_ "refcnt: fd %d: %d <= 0\n", + fd, PL_perlio_fd_refcnt[fd]); + } + cnt = PL_perlio_fd_refcnt[fd]; + MUTEX_UNLOCK(&PL_perlio_mutex); } else { - /* diag_listed_as: refcnt: fd %d%s */ - Perl_croak(aTHX_ "refcnt: fd %d < 0\n", fd); + /* diag_listed_as: refcnt: fd %d%s */ + Perl_croak(aTHX_ "refcnt: fd %d < 0\n", fd); } return cnt; } @@ -2398,59 +2379,58 @@ PerlIO_cleanup(pTHX) /* Raise STDIN..STDERR refcount so we don't close them */ for (i=0; i < 3; i++) - PerlIOUnix_refcnt_inc(i); + PerlIOUnix_refcnt_inc(i); PerlIO_cleantable(aTHX_ &PL_perlio); /* Restore STDIN..STDERR refcount */ for (i=0; i < 3; i++) - PerlIOUnix_refcnt_dec(i); + PerlIOUnix_refcnt_dec(i); if (PL_known_layers) { - PerlIO_list_free(aTHX_ PL_known_layers); - PL_known_layers = NULL; + PerlIO_list_free(aTHX_ PL_known_layers); + PL_known_layers = NULL; } if (PL_def_layerlist) { - PerlIO_list_free(aTHX_ PL_def_layerlist); - PL_def_layerlist = NULL; + PerlIO_list_free(aTHX_ PL_def_layerlist); + PL_def_layerlist = NULL; } } void PerlIO_teardown(void) /* Call only from PERL_SYS_TERM(). */ { - dVAR; #if 0 /* XXX we can't rely on an interpreter being present at this late stage, XXX so we can't use a function like PerlLIO_write that relies on one being present (at least in win32) :-(. Disable for now. */ -#ifdef DEBUGGING +# ifdef DEBUGGING { - /* By now all filehandles should have been closed, so any - * stray (non-STD-)filehandles indicate *possible* (PerlIO) - * errors. */ + /* By now all filehandles should have been closed, so any + * stray (non-STD-)filehandles indicate *possible* (PerlIO) + * errors. */ #define PERLIO_TEARDOWN_MESSAGE_BUF_SIZE 64 #define PERLIO_TEARDOWN_MESSAGE_FD 2 - char buf[PERLIO_TEARDOWN_MESSAGE_BUF_SIZE]; - int i; - for (i = 3; i < PL_perlio_fd_refcnt_size; i++) { - if (PL_perlio_fd_refcnt[i]) { - const STRLEN len = - my_snprintf(buf, sizeof(buf), - "PerlIO_teardown: fd %d refcnt=%d\n", - i, PL_perlio_fd_refcnt[i]); - PerlLIO_write(PERLIO_TEARDOWN_MESSAGE_FD, buf, len); - } - } + char buf[PERLIO_TEARDOWN_MESSAGE_BUF_SIZE]; + int i; + for (i = 3; i < PL_perlio_fd_refcnt_size; i++) { + if (PL_perlio_fd_refcnt[i]) { + const STRLEN len = + my_snprintf(buf, sizeof(buf), + "PerlIO_teardown: fd %d refcnt=%d\n", + i, PL_perlio_fd_refcnt[i]); + PerlLIO_write(PERLIO_TEARDOWN_MESSAGE_FD, buf, len); + } + } } -#endif +# endif #endif /* Not bothering with PL_perlio_mutex since by now * all the interpreters are gone. */ if (PL_perlio_fd_refcnt_size /* Assuming initial size of zero. */ && PL_perlio_fd_refcnt) { - free(PL_perlio_fd_refcnt); /* To match realloc() in S_more_refcounted_fds(). */ - PL_perlio_fd_refcnt = NULL; - PL_perlio_fd_refcnt_size = 0; + free(PL_perlio_fd_refcnt); /* To match realloc() in S_more_refcounted_fds(). */ + PL_perlio_fd_refcnt = NULL; + PL_perlio_fd_refcnt_size = 0; } } @@ -2485,19 +2465,19 @@ S_perlio_async_run(pTHX_ PerlIO* f) { PerlIO_lockcnt(f)++; PERL_ASYNC_CHECK(); if ( !(PerlIOBase(f)->flags & PERLIO_F_CLEARED) ) { - LEAVE; - return 0; + LEAVE; + return 0; } /* we've just run some perl-level code that could have done * anything, including closing the file or clearing this layer. * If so, free any lower layers that have already been * cleared, then return an error. */ while (PerlIOValid(f) && - (PerlIOBase(f)->flags & PERLIO_F_CLEARED)) + (PerlIOBase(f)->flags & PERLIO_F_CLEARED)) { - const PerlIOl *l = *f; - *f = l->next; - Safefree(l); + const PerlIOl *l = *f; + *f = l->next; + Safefree(l); } LEAVE; return 1; @@ -2508,35 +2488,35 @@ PerlIOUnix_oflags(const char *mode) { int oflags = -1; if (*mode == IoTYPE_IMPLICIT || *mode == IoTYPE_NUMERIC) - mode++; + mode++; switch (*mode) { case 'r': - oflags = O_RDONLY; - if (*++mode == '+') { - oflags = O_RDWR; - mode++; - } - break; + oflags = O_RDONLY; + if (*++mode == '+') { + oflags = O_RDWR; + mode++; + } + break; case 'w': - oflags = O_CREAT | O_TRUNC; - if (*++mode == '+') { - oflags |= O_RDWR; - mode++; - } - else - oflags |= O_WRONLY; - break; + oflags = O_CREAT | O_TRUNC; + if (*++mode == '+') { + oflags |= O_RDWR; + mode++; + } + else + oflags |= O_WRONLY; + break; case 'a': - oflags = O_CREAT | O_APPEND; - if (*++mode == '+') { - oflags |= O_RDWR; - mode++; - } - else - oflags |= O_WRONLY; - break; + oflags = O_CREAT | O_APPEND; + if (*++mode == '+') { + oflags |= O_RDWR; + mode++; + } + else + oflags |= O_WRONLY; + break; } /* XXX TODO: PerlIO_open() test that exercises 'rb' and 'rt'. */ @@ -2548,35 +2528,35 @@ PerlIOUnix_oflags(const char *mode) case 'b': #if O_TEXT != O_BINARY oflags |= O_BINARY; - oflags &= ~O_TEXT; + oflags &= ~O_TEXT; #endif mode++; break; case 't': #if O_TEXT != O_BINARY - oflags |= O_TEXT; - oflags &= ~O_BINARY; + oflags |= O_TEXT; + oflags &= ~O_BINARY; #endif mode++; break; default: -# if O_BINARY != 0 +#if O_BINARY != 0 /* bit-or:ing with zero O_BINARY would be useless. */ - /* - * If neither "t" nor "b" was specified, open the file - * in O_BINARY mode. + /* + * If neither "t" nor "b" was specified, open the file + * in O_BINARY mode. * * Note that if something else than the zero byte was seen * here (e.g. bogus mode "rx"), just few lines later we will * set the errno and invalidate the flags. - */ - oflags |= O_BINARY; -# endif + */ + oflags |= O_BINARY; +#endif break; } if (*mode || oflags == -1) { - SETERRNO(EINVAL, LIB_INVARG); - oflags = -1; + SETERRNO(EINVAL, LIB_INVARG); + oflags = -1; } return oflags; } @@ -2595,13 +2575,13 @@ PerlIOUnix_setfd(pTHX_ PerlIO *f, int fd, int imode) #if defined(WIN32) Stat_t st; if (PerlLIO_fstat(fd, &st) == 0) { - if (!S_ISREG(st.st_mode)) { - DEBUG_i( PerlIO_debug("%d is not regular file\n",fd) ); - PerlIOBase(f)->flags |= PERLIO_F_NOTREG; - } - else { - DEBUG_i( PerlIO_debug("%d _is_ a regular file\n",fd) ); - } + if (!S_ISREG(st.st_mode)) { + DEBUG_i( PerlIO_debug("%d is not regular file\n",fd) ); + PerlIOBase(f)->flags |= PERLIO_F_NOTREG; + } + else { + DEBUG_i( PerlIO_debug("%d _is_ a regular file\n",fd) ); + } } #endif s->fd = fd; @@ -2615,13 +2595,13 @@ PerlIOUnix_pushed(pTHX_ PerlIO *f, const char *mode, SV *arg, PerlIO_funcs *tab) { IV code = PerlIOBase_pushed(aTHX_ f, mode, arg, tab); if (*PerlIONext(f)) { - /* We never call down so do any pending stuff now */ - PerlIO_flush(PerlIONext(f)); - /* - * XXX could (or should) we retrieve the oflags from the open file - * handle rather than believing the "mode" we are passed in? XXX - * Should the value on NULL mode be 0 or -1? - */ + /* We never call down so do any pending stuff now */ + PerlIO_flush(PerlIONext(f)); + /* + * XXX could (or should) we retrieve the oflags from the open file + * handle rather than believing the "mode" we are passed in? XXX + * Should the value on NULL mode be 0 or -1? + */ PerlIOUnix_setfd(aTHX_ f, PerlIO_fileno(PerlIONext(f)), mode ? PerlIOUnix_oflags(mode) : -1); } @@ -2638,79 +2618,79 @@ PerlIOUnix_seek(pTHX_ PerlIO *f, Off_t offset, int whence) PERL_UNUSED_CONTEXT; if (PerlIOBase(f)->flags & PERLIO_F_NOTREG) { #ifdef ESPIPE - SETERRNO(ESPIPE, LIB_INVARG); + SETERRNO(ESPIPE, LIB_INVARG); #else - SETERRNO(EINVAL, LIB_INVARG); + SETERRNO(EINVAL, LIB_INVARG); #endif - return -1; + return -1; } new_loc = PerlLIO_lseek(fd, offset, whence); if (new_loc == (Off_t) - 1) - return -1; + return -1; PerlIOBase(f)->flags &= ~PERLIO_F_EOF; return 0; } PerlIO * PerlIOUnix_open(pTHX_ PerlIO_funcs *self, PerlIO_list_t *layers, - IV n, const char *mode, int fd, int imode, - int perm, PerlIO *f, int narg, SV **args) + IV n, const char *mode, int fd, int imode, + int perm, PerlIO *f, int narg, SV **args) { bool known_cloexec = 0; if (PerlIOValid(f)) { - if (PerlIOBase(f)->tab && PerlIOBase(f)->flags & PERLIO_F_OPEN) - (*PerlIOBase(f)->tab->Close)(aTHX_ f); + if (PerlIOBase(f)->tab && PerlIOBase(f)->flags & PERLIO_F_OPEN) + (*PerlIOBase(f)->tab->Close)(aTHX_ f); } if (narg > 0) { - if (*mode == IoTYPE_NUMERIC) - mode++; - else { - imode = PerlIOUnix_oflags(mode); + if (*mode == IoTYPE_NUMERIC) + mode++; + else { + imode = PerlIOUnix_oflags(mode); #ifdef VMS - perm = 0777; /* preserve RMS defaults, ACL inheritance, etc. */ + perm = 0777; /* preserve RMS defaults, ACL inheritance, etc. */ #else - perm = 0666; + perm = 0666; #endif - } - if (imode != -1) { + } + if (imode != -1) { STRLEN len; - const char *path = SvPV_const(*args, len); - if (!IS_SAFE_PATHNAME(path, len, "open")) + const char *path = SvPV_const(*args, len); + if (!IS_SAFE_PATHNAME(path, len, "open")) return NULL; - fd = PerlLIO_open3_cloexec(path, imode, perm); - known_cloexec = 1; - } + fd = PerlLIO_open3_cloexec(path, imode, perm); + known_cloexec = 1; + } } if (fd >= 0) { - if (known_cloexec) - setfd_inhexec_for_sysfd(fd); - else - setfd_cloexec_or_inhexec_by_sysfdness(fd); - if (*mode == IoTYPE_IMPLICIT) - mode++; - if (!f) { - f = PerlIO_allocate(aTHX); - } - if (!PerlIOValid(f)) { - if (!(f = PerlIO_push(aTHX_ f, self, mode, PerlIOArg))) { - PerlLIO_close(fd); - return NULL; - } - } + if (known_cloexec) + setfd_inhexec_for_sysfd(fd); + else + setfd_cloexec_or_inhexec_by_sysfdness(fd); + if (*mode == IoTYPE_IMPLICIT) + mode++; + if (!f) { + f = PerlIO_allocate(aTHX); + } + if (!PerlIOValid(f)) { + if (!(f = PerlIO_push(aTHX_ f, self, mode, PerlIOArg))) { + PerlLIO_close(fd); + return NULL; + } + } PerlIOUnix_setfd(aTHX_ f, fd, imode); - PerlIOBase(f)->flags |= PERLIO_F_OPEN; - if (*mode == IoTYPE_APPEND) - PerlIOUnix_seek(aTHX_ f, 0, SEEK_END); - return f; + PerlIOBase(f)->flags |= PERLIO_F_OPEN; + if (*mode == IoTYPE_APPEND) + PerlIOUnix_seek(aTHX_ f, 0, SEEK_END); + return f; } else { - if (f) { - NOOP; - /* - * FIXME: pop layers ??? - */ - } - return NULL; + if (f) { + NOOP; + /* + * FIXME: pop layers ??? + */ + } + return NULL; } } @@ -2720,17 +2700,17 @@ PerlIOUnix_dup(pTHX_ PerlIO *f, PerlIO *o, CLONE_PARAMS *param, int flags) const PerlIOUnix * const os = PerlIOSelf(o, PerlIOUnix); int fd = os->fd; if (flags & PERLIO_DUP_FD) { - fd = PerlLIO_dup_cloexec(fd); - if (fd >= 0) - setfd_inhexec_for_sysfd(fd); + fd = PerlLIO_dup_cloexec(fd); + if (fd >= 0) + setfd_inhexec_for_sysfd(fd); } if (fd >= 0) { - f = PerlIOBase_dup(aTHX_ f, o, param, flags); - if (f) { - /* If all went well overwrite fd in dup'ed lay with the dup()'ed fd */ - PerlIOUnix_setfd(aTHX_ f, fd, os->oflags); - return f; - } + f = PerlIOBase_dup(aTHX_ f, o, param, flags); + if (f) { + /* If all went well overwrite fd in dup'ed lay with the dup()'ed fd */ + PerlIOUnix_setfd(aTHX_ f, fd, os->oflags); + return f; + } PerlLIO_close(fd); } return NULL; @@ -2742,34 +2722,30 @@ PerlIOUnix_read(pTHX_ PerlIO *f, void *vbuf, Size_t count) { int fd; if (PerlIO_lockcnt(f)) /* in use: abort ungracefully */ - return -1; + return -1; fd = PerlIOSelf(f, PerlIOUnix)->fd; -#ifdef PERLIO_STD_SPECIAL - if (fd == 0) - return PERLIO_STD_IN(fd, vbuf, count); -#endif if (!(PerlIOBase(f)->flags & PERLIO_F_CANREAD) || PerlIOBase(f)->flags & (PERLIO_F_EOF|PERLIO_F_ERROR)) { - return 0; + return 0; } while (1) { - const SSize_t len = PerlLIO_read(fd, vbuf, count); - if (len >= 0 || errno != EINTR) { - if (len < 0) { - if (errno != EAGAIN) { - PerlIOBase(f)->flags |= PERLIO_F_ERROR; - PerlIO_save_errno(f); - } - } - else if (len == 0 && count != 0) { - PerlIOBase(f)->flags |= PERLIO_F_EOF; - SETERRNO(0,0); - } - return len; - } - /* EINTR */ - if (PL_sig_pending && S_perlio_async_run(aTHX_ f)) - return -1; + const SSize_t len = PerlLIO_read(fd, vbuf, count); + if (len >= 0 || errno != EINTR) { + if (len < 0) { + if (errno != EAGAIN) { + PerlIOBase(f)->flags |= PERLIO_F_ERROR; + PerlIO_save_errno(f); + } + } + else if (len == 0 && count != 0) { + PerlIOBase(f)->flags |= PERLIO_F_EOF; + SETERRNO(0,0); + } + return len; + } + /* EINTR */ + if (PL_sig_pending && S_perlio_async_run(aTHX_ f)) + return -1; } NOT_REACHED; /*NOTREACHED*/ } @@ -2779,26 +2755,22 @@ PerlIOUnix_write(pTHX_ PerlIO *f, const void *vbuf, Size_t count) { int fd; if (PerlIO_lockcnt(f)) /* in use: abort ungracefully */ - return -1; + return -1; fd = PerlIOSelf(f, PerlIOUnix)->fd; -#ifdef PERLIO_STD_SPECIAL - if (fd == 1 || fd == 2) - return PERLIO_STD_OUT(fd, vbuf, count); -#endif while (1) { - const SSize_t len = PerlLIO_write(fd, vbuf, count); - if (len >= 0 || errno != EINTR) { - if (len < 0) { - if (errno != EAGAIN) { - PerlIOBase(f)->flags |= PERLIO_F_ERROR; - PerlIO_save_errno(f); - } - } - return len; - } - /* EINTR */ - if (PL_sig_pending && S_perlio_async_run(aTHX_ f)) - return -1; + const SSize_t len = PerlLIO_write(fd, vbuf, count); + if (len >= 0 || errno != EINTR) { + if (len < 0) { + if (errno != EAGAIN) { + PerlIOBase(f)->flags |= PERLIO_F_ERROR; + PerlIO_save_errno(f); + } + } + return len; + } + /* EINTR */ + if (PL_sig_pending && S_perlio_async_run(aTHX_ f)) + return -1; } NOT_REACHED; /*NOTREACHED*/ } @@ -2819,26 +2791,26 @@ PerlIOUnix_close(pTHX_ PerlIO *f) int code = 0; if (PerlIOBase(f)->flags & PERLIO_F_OPEN) { code = PerlIOBase_close(aTHX_ f); - if (PerlIOUnix_refcnt_dec(fd) > 0) { - PerlIOBase(f)->flags &= ~PERLIO_F_OPEN; - return 0; - } + if (PerlIOUnix_refcnt_dec(fd) > 0) { + PerlIOBase(f)->flags &= ~PERLIO_F_OPEN; + return 0; + } } else { - SETERRNO(EBADF,SS_IVCHAN); - return -1; + SETERRNO(EBADF,SS_IVCHAN); + return -1; } while (PerlLIO_close(fd) != 0) { - if (errno != EINTR) { - code = -1; - break; - } - /* EINTR */ - if (PL_sig_pending && S_perlio_async_run(aTHX_ f)) - return -1; + if (errno != EINTR) { + code = -1; + break; + } + /* EINTR */ + if (PL_sig_pending && S_perlio_async_run(aTHX_ f)) + return -1; } if (code == 0) { - PerlIOBase(f)->flags &= ~PERLIO_F_OPEN; + PerlIOBase(f)->flags &= ~PERLIO_F_OPEN; } return code; } @@ -2883,7 +2855,7 @@ PERLIO_FUNCS_DECL(PerlIO_unix) = { /* perl5.8 - This ensures the last minute VMS ungetc fix is not broken by the last second glibc 2.3 fix */ -#define STDIO_BUFFER_WRITABLE +# define STDIO_BUFFER_WRITABLE #endif @@ -2898,9 +2870,9 @@ PerlIOStdio_fileno(pTHX_ PerlIO *f) PERL_UNUSED_CONTEXT; if (PerlIOValid(f)) { - FILE * const s = PerlIOSelf(f, PerlIOStdio)->stdio; - if (s) - return PerlSIO_fileno(s); + FILE * const s = PerlIOSelf(f, PerlIOStdio)->stdio; + if (s) + return PerlSIO_fileno(s); } errno = EBADF; return -1; @@ -2911,9 +2883,9 @@ PerlIOStdio_mode(const char *mode, char *tmode) { char * const ret = tmode; if (mode) { - while (*mode) { - *tmode++ = *mode++; - } + while (*mode) { + *tmode++ = *mode++; + } } #if defined(PERLIO_USING_CRLF) || defined(__CYGWIN__) *tmode++ = 'b'; @@ -2927,25 +2899,25 @@ PerlIOStdio_pushed(pTHX_ PerlIO *f, const char *mode, SV *arg, PerlIO_funcs *tab { PerlIO *n; if (PerlIOValid(f) && PerlIOValid(n = PerlIONext(f))) { - PerlIO_funcs * const toptab = PerlIOBase(n)->tab; + PerlIO_funcs * const toptab = PerlIOBase(n)->tab; if (toptab == tab) { - /* Top is already stdio - pop self (duplicate) and use original */ - PerlIO_pop(aTHX_ f); - return 0; - } else { - const int fd = PerlIO_fileno(n); - char tmode[8]; - FILE *stdio; - if (fd >= 0 && (stdio = PerlSIO_fdopen(fd, - mode = PerlIOStdio_mode(mode, tmode)))) { - PerlIOSelf(f, PerlIOStdio)->stdio = stdio; - /* We never call down so do any pending stuff now */ - PerlIO_flush(PerlIONext(f)); + /* Top is already stdio - pop self (duplicate) and use original */ + PerlIO_pop(aTHX_ f); + return 0; + } else { + const int fd = PerlIO_fileno(n); + char tmode[8]; + FILE *stdio; + if (fd >= 0 && (stdio = PerlSIO_fdopen(fd, + mode = PerlIOStdio_mode(mode, tmode)))) { + PerlIOSelf(f, PerlIOStdio)->stdio = stdio; + /* We never call down so do any pending stuff now */ + PerlIO_flush(PerlIONext(f)); return PerlIOBase_pushed(aTHX_ f, mode, arg, tab); - } - else { - return -1; - } + } + else { + return -1; + } } } return PerlIOBase_pushed(aTHX_ f, mode, arg, tab); @@ -2957,183 +2929,183 @@ PerlIO_importFILE(FILE *stdio, const char *mode) { dTHX; PerlIO *f = NULL; -#ifdef EBCDIC - int rc; - char filename[FILENAME_MAX]; - fldata_t fileinfo; +#ifdef __MVS__ + int rc; + char filename[FILENAME_MAX]; + fldata_t fileinfo; #endif if (stdio) { - PerlIOStdio *s; + PerlIOStdio *s; int fd0 = fileno(stdio); if (fd0 < 0) { -#ifdef EBCDIC - rc = fldata(stdio,filename,&fileinfo); - if(rc != 0){ - return NULL; - } - if(fileinfo.__dsorgHFS){ +#ifdef __MVS__ + rc = fldata(stdio,filename,&fileinfo); + if(rc != 0){ + return NULL; + } + if(fileinfo.__dsorgHFS){ return NULL; } - /*This MVS dataset , OK!*/ + /*This MVS dataset , OK!*/ #else return NULL; #endif } - if (!mode || !*mode) { - /* We need to probe to see how we can open the stream - so start with read/write and then try write and read - we dup() so that we can fclose without loosing the fd. - - Note that the errno value set by a failing fdopen - varies between stdio implementations. - */ + if (!mode || !*mode) { + /* We need to probe to see how we can open the stream + so start with read/write and then try write and read + we dup() so that we can fclose without loosing the fd. + + Note that the errno value set by a failing fdopen + varies between stdio implementations. + */ const int fd = PerlLIO_dup_cloexec(fd0); - FILE *f2; + FILE *f2; if (fd < 0) { return f; } - f2 = PerlSIO_fdopen(fd, (mode = "r+")); - if (!f2) { - f2 = PerlSIO_fdopen(fd, (mode = "w")); - } - if (!f2) { - f2 = PerlSIO_fdopen(fd, (mode = "r")); - } - if (!f2) { - /* Don't seem to be able to open */ - PerlLIO_close(fd); - return f; - } - fclose(f2); - } - if ((f = PerlIO_push(aTHX_(PerlIO_allocate(aTHX)), PERLIO_FUNCS_CAST(&PerlIO_stdio), mode, NULL))) { - s = PerlIOSelf(f, PerlIOStdio); - s->stdio = stdio; - fd0 = fileno(stdio); - if(fd0 != -1){ - PerlIOUnix_refcnt_inc(fd0); - setfd_cloexec_or_inhexec_by_sysfdness(fd0); - } -#ifdef EBCDIC - else{ - rc = fldata(stdio,filename,&fileinfo); - if(rc != 0){ - PerlIOUnix_refcnt_inc(fd0); - } - if(fileinfo.__dsorgHFS){ - PerlIOUnix_refcnt_inc(fd0); - } - /*This MVS dataset , OK!*/ - } + f2 = PerlSIO_fdopen(fd, (mode = "r+")); + if (!f2) { + f2 = PerlSIO_fdopen(fd, (mode = "w")); + } + if (!f2) { + f2 = PerlSIO_fdopen(fd, (mode = "r")); + } + if (!f2) { + /* Don't seem to be able to open */ + PerlLIO_close(fd); + return f; + } + fclose(f2); + } + if ((f = PerlIO_push(aTHX_(PerlIO_allocate(aTHX)), PERLIO_FUNCS_CAST(&PerlIO_stdio), mode, NULL))) { + s = PerlIOSelf(f, PerlIOStdio); + s->stdio = stdio; + fd0 = fileno(stdio); + if(fd0 != -1){ + PerlIOUnix_refcnt_inc(fd0); + setfd_cloexec_or_inhexec_by_sysfdness(fd0); + } +#ifdef __MVS__ + else{ + rc = fldata(stdio,filename,&fileinfo); + if(rc != 0){ + PerlIOUnix_refcnt_inc(fd0); + } + if(fileinfo.__dsorgHFS){ + PerlIOUnix_refcnt_inc(fd0); + } + /*This MVS dataset , OK!*/ + } #endif - } + } } return f; } PerlIO * PerlIOStdio_open(pTHX_ PerlIO_funcs *self, PerlIO_list_t *layers, - IV n, const char *mode, int fd, int imode, - int perm, PerlIO *f, int narg, SV **args) + IV n, const char *mode, int fd, int imode, + int perm, PerlIO *f, int narg, SV **args) { char tmode[8]; if (PerlIOValid(f)) { STRLEN len; - const char * const path = SvPV_const(*args, len); - PerlIOStdio * const s = PerlIOSelf(f, PerlIOStdio); - FILE *stdio; - if (!IS_SAFE_PATHNAME(path, len, "open")) + const char * const path = SvPV_const(*args, len); + PerlIOStdio * const s = PerlIOSelf(f, PerlIOStdio); + FILE *stdio; + if (!IS_SAFE_PATHNAME(path, len, "open")) return NULL; - PerlIOUnix_refcnt_dec(fileno(s->stdio)); - stdio = PerlSIO_freopen(path, PerlIOStdio_mode(mode, tmode), + PerlIOUnix_refcnt_dec(fileno(s->stdio)); + stdio = PerlSIO_freopen(path, PerlIOStdio_mode(mode, tmode), s->stdio); - if (!s->stdio) - return NULL; - s->stdio = stdio; - fd = fileno(stdio); - PerlIOUnix_refcnt_inc(fd); - setfd_cloexec_or_inhexec_by_sysfdness(fd); - return f; + if (!s->stdio) + return NULL; + s->stdio = stdio; + fd = fileno(stdio); + PerlIOUnix_refcnt_inc(fd); + setfd_cloexec_or_inhexec_by_sysfdness(fd); + return f; } else { - if (narg > 0) { + if (narg > 0) { STRLEN len; - const char * const path = SvPV_const(*args, len); + const char * const path = SvPV_const(*args, len); if (!IS_SAFE_PATHNAME(path, len, "open")) return NULL; - if (*mode == IoTYPE_NUMERIC) { - mode++; - fd = PerlLIO_open3_cloexec(path, imode, perm); - } - else { - FILE *stdio; - bool appended = FALSE; + if (*mode == IoTYPE_NUMERIC) { + mode++; + fd = PerlLIO_open3_cloexec(path, imode, perm); + } + else { + FILE *stdio; + bool appended = FALSE; #ifdef __CYGWIN__ - /* Cygwin wants its 'b' early. */ - appended = TRUE; - mode = PerlIOStdio_mode(mode, tmode); + /* Cygwin wants its 'b' early. */ + appended = TRUE; + mode = PerlIOStdio_mode(mode, tmode); #endif - stdio = PerlSIO_fopen(path, mode); - if (stdio) { - if (!f) { - f = PerlIO_allocate(aTHX); - } - if (!appended) - mode = PerlIOStdio_mode(mode, tmode); - f = PerlIO_push(aTHX_ f, self, mode, PerlIOArg); - if (f) { - PerlIOSelf(f, PerlIOStdio)->stdio = stdio; - fd = fileno(stdio); - PerlIOUnix_refcnt_inc(fd); - setfd_cloexec_or_inhexec_by_sysfdness(fd); - } else { - PerlSIO_fclose(stdio); - } - return f; - } - else { - return NULL; - } - } - } - if (fd >= 0) { - FILE *stdio = NULL; - int init = 0; - if (*mode == IoTYPE_IMPLICIT) { - init = 1; - mode++; - } - if (init) { - switch (fd) { - case 0: - stdio = PerlSIO_stdin; - break; - case 1: - stdio = PerlSIO_stdout; - break; - case 2: - stdio = PerlSIO_stderr; - break; - } - } - else { - stdio = PerlSIO_fdopen(fd, mode = - PerlIOStdio_mode(mode, tmode)); - } - if (stdio) { - if (!f) { - f = PerlIO_allocate(aTHX); - } - if ((f = PerlIO_push(aTHX_ f, self, mode, PerlIOArg))) { - PerlIOSelf(f, PerlIOStdio)->stdio = stdio; - fd = fileno(stdio); - PerlIOUnix_refcnt_inc(fd); - setfd_cloexec_or_inhexec_by_sysfdness(fd); - } - return f; - } + stdio = PerlSIO_fopen(path, mode); + if (stdio) { + if (!f) { + f = PerlIO_allocate(aTHX); + } + if (!appended) + mode = PerlIOStdio_mode(mode, tmode); + f = PerlIO_push(aTHX_ f, self, mode, PerlIOArg); + if (f) { + PerlIOSelf(f, PerlIOStdio)->stdio = stdio; + fd = fileno(stdio); + PerlIOUnix_refcnt_inc(fd); + setfd_cloexec_or_inhexec_by_sysfdness(fd); + } else { + PerlSIO_fclose(stdio); + } + return f; + } + else { + return NULL; + } + } + } + if (fd >= 0) { + FILE *stdio = NULL; + int init = 0; + if (*mode == IoTYPE_IMPLICIT) { + init = 1; + mode++; + } + if (init) { + switch (fd) { + case 0: + stdio = PerlSIO_stdin; + break; + case 1: + stdio = PerlSIO_stdout; + break; + case 2: + stdio = PerlSIO_stderr; + break; + } + } + else { + stdio = PerlSIO_fdopen(fd, mode = + PerlIOStdio_mode(mode, tmode)); + } + if (stdio) { + if (!f) { + f = PerlIO_allocate(aTHX); + } + if ((f = PerlIO_push(aTHX_ f, self, mode, PerlIOArg))) { + PerlIOSelf(f, PerlIOStdio)->stdio = stdio; + fd = fileno(stdio); + PerlIOUnix_refcnt_inc(fd); + setfd_cloexec_or_inhexec_by_sysfdness(fd); + } + return f; + } PerlLIO_close(fd); - } + } } return NULL; } @@ -3145,29 +3117,29 @@ PerlIOStdio_dup(pTHX_ PerlIO *f, PerlIO *o, CLONE_PARAMS *param, int flags) happens, but is not how I remember it. NI-S 2001/10/16 */ if ((f = PerlIOBase_dup(aTHX_ f, o, param, flags))) { - FILE *stdio = PerlIOSelf(o, PerlIOStdio)->stdio; - const int fd = fileno(stdio); - char mode[8]; - if (flags & PERLIO_DUP_FD) { - const int dfd = PerlLIO_dup_cloexec(fileno(stdio)); - if (dfd >= 0) { - stdio = PerlSIO_fdopen(dfd, PerlIO_modestr(o,mode)); - goto set_this; - } - else { - NOOP; - /* FIXME: To avoid messy error recovery if dup fails - re-use the existing stdio as though flag was not set - */ - } - } - stdio = PerlSIO_fdopen(fd, PerlIO_modestr(o,mode)); + FILE *stdio = PerlIOSelf(o, PerlIOStdio)->stdio; + const int fd = fileno(stdio); + char mode[8]; + if (flags & PERLIO_DUP_FD) { + const int dfd = PerlLIO_dup_cloexec(fileno(stdio)); + if (dfd >= 0) { + stdio = PerlSIO_fdopen(dfd, PerlIO_modestr(o,mode)); + goto set_this; + } + else { + NOOP; + /* FIXME: To avoid messy error recovery if dup fails + re-use the existing stdio as though flag was not set + */ + } + } + stdio = PerlSIO_fdopen(fd, PerlIO_modestr(o,mode)); set_this: - PerlIOSelf(f, PerlIOStdio)->stdio = stdio; + PerlIOSelf(f, PerlIOStdio)->stdio = stdio; if(stdio) { - int fd = fileno(stdio); - PerlIOUnix_refcnt_inc(fd); - setfd_cloexec_or_inhexec_by_sysfdness(fd); + int fd = fileno(stdio); + PerlIOUnix_refcnt_inc(fd); + setfd_cloexec_or_inhexec_by_sysfdness(fd); } } return f; @@ -3181,22 +3153,22 @@ PerlIOStdio_invalidate_fileno(pTHX_ FILE *f) /* XXX this could use PerlIO_canset_fileno() and * PerlIO_set_fileno() support from Configure */ -# if defined(HAS_FDCLOSE) +#if defined(HAS_FDCLOSE) return fdclose(f, NULL) == 0 ? 1 : 0; -# elif defined(__UCLIBC__) +#elif defined(__UCLIBC__) /* uClibc must come before glibc because it defines __GLIBC__ as well. */ f->__filedes = -1; return 1; -# elif defined(__GLIBC__) +#elif defined(__GLIBC__) /* There may be a better way for GLIBC: - - libio.h defines a flag to not close() on cleanup + - libio.h defines a flag to not close() on cleanup */ f->_fileno = -1; return 1; -# elif defined(__sun) +#elif defined(__sun) PERL_UNUSED_ARG(f); return 0; -# elif defined(__hpux) +#elif defined(__hpux) f->__fileH = 0xff; f->__fileL = 0xff; return 1; @@ -3205,47 +3177,47 @@ PerlIOStdio_invalidate_fileno(pTHX_ FILE *f) [For OSF only have confirmation for Tru64 (alpha) but assume other OSFs will be similar.] */ -# elif defined(_AIX) || defined(__osf__) || defined(__irix__) +#elif defined(_AIX) || defined(__osf__) || defined(__irix__) f->_file = -1; return 1; -# elif defined(__FreeBSD__) +#elif defined(__FreeBSD__) /* There may be a better way on FreeBSD: - we could insert a dummy func in the _close function entry - f->_close = (int (*)(void *)) dummy_close; + f->_close = (int (*)(void *)) dummy_close; */ f->_file = -1; return 1; -# elif defined(__OpenBSD__) +#elif defined(__OpenBSD__) /* There may be a better way on OpenBSD: - we could insert a dummy func in the _close function entry - f->_close = (int (*)(void *)) dummy_close; + f->_close = (int (*)(void *)) dummy_close; */ f->_file = -1; return 1; -# elif defined(__EMX__) +#elif defined(__EMX__) /* f->_flags &= ~_IOOPEN; */ /* Will leak stream->_buffer */ f->_handle = -1; return 1; -# elif defined(__CYGWIN__) +#elif defined(__CYGWIN__) /* There may be a better way on CYGWIN: - we could insert a dummy func in the _close function entry - f->_close = (int (*)(void *)) dummy_close; + f->_close = (int (*)(void *)) dummy_close; */ f->_file = -1; return 1; -# elif defined(WIN32) +#elif defined(WIN32) PERLIO_FILE_file(f) = -1; return 1; -# else -#if 0 +#else +# if 0 /* Sarathy's code did this - we fall back to a dup/dup2 hack (which isn't thread safe) instead */ # error "Don't know how to set FILE.fileno on your platform" -#endif +# endif PERL_UNUSED_ARG(f); return 0; -# endif +#endif } IV @@ -3253,43 +3225,40 @@ PerlIOStdio_close(pTHX_ PerlIO *f) { FILE * const stdio = PerlIOSelf(f, PerlIOStdio)->stdio; if (!stdio) { - errno = EBADF; - return -1; + errno = EBADF; + return -1; } else { const int fd = fileno(stdio); - int invalidate = 0; - IV result = 0; - int dupfd = -1; - dSAVEDERRNO; -#ifdef USE_ITHREADS - dVAR; -#endif + int invalidate = 0; + IV result = 0; + int dupfd = -1; + dSAVEDERRNO; #ifdef SOCKS5_VERSION_NAME - /* Socks lib overrides close() but stdio isn't linked to - that library (though we are) - so we must call close() - on sockets on stdio's behalf. - */ - int optval; - Sock_size_t optlen = sizeof(int); - if (getsockopt(fd, SOL_SOCKET, SO_TYPE, (void *) &optval, &optlen) == 0) - invalidate = 1; + /* Socks lib overrides close() but stdio isn't linked to + that library (though we are) - so we must call close() + on sockets on stdio's behalf. + */ + int optval; + Sock_size_t optlen = sizeof(int); + if (getsockopt(fd, SOL_SOCKET, SO_TYPE, (void *) &optval, &optlen) == 0) + invalidate = 1; #endif - /* Test for -1, as *BSD stdio (at least) on fclose sets the FILE* such - that a subsequent fileno() on it returns -1. Don't want to croak() - from within PerlIOUnix_refcnt_dec() if some buggy caller code is - trying to close an already closed handle which somehow it still has - a reference to. (via.xs, I'm looking at you). */ - if (fd != -1 && PerlIOUnix_refcnt_dec(fd) > 0) { - /* File descriptor still in use */ - invalidate = 1; - } - if (invalidate) { - /* For STD* handles, don't close stdio, since we shared the FILE *, too. */ - if (stdio == stdin) /* Some stdios are buggy fflush-ing inputs */ - return 0; - if (stdio == stdout || stdio == stderr) - return PerlIO_flush(f); + /* Test for -1, as *BSD stdio (at least) on fclose sets the FILE* such + that a subsequent fileno() on it returns -1. Don't want to croak() + from within PerlIOUnix_refcnt_dec() if some buggy caller code is + trying to close an already closed handle which somehow it still has + a reference to. (via.xs, I'm looking at you). */ + if (fd != -1 && PerlIOUnix_refcnt_dec(fd) > 0) { + /* File descriptor still in use */ + invalidate = 1; + } + if (invalidate) { + /* For STD* handles, don't close stdio, since we shared the FILE *, too. */ + if (stdio == stdin) /* Some stdios are buggy fflush-ing inputs */ + return 0; + if (stdio == stdout || stdio == stderr) + return PerlIO_flush(f); } MUTEX_LOCK(&PL_perlio_mutex); /* Right. We need a mutex here because for a brief while we @@ -3309,46 +3278,46 @@ PerlIOStdio_close(pTHX_ PerlIO *f) Except that correctness trumps speed. Advice from klortho #11912. */ - if (invalidate) { + if (invalidate) { /* Tricky - must fclose(stdio) to free memory but not close(fd) - Use Sarathy's trick from maint-5.6 to invalidate the - fileno slot of the FILE * - */ - result = PerlIO_flush(f); - SAVE_ERRNO; - invalidate = PerlIOStdio_invalidate_fileno(aTHX_ stdio); - if (!invalidate) { - dupfd = PerlLIO_dup_cloexec(fd); + Use Sarathy's trick from maint-5.6 to invalidate the + fileno slot of the FILE * + */ + result = PerlIO_flush(f); + SAVE_ERRNO; + invalidate = PerlIOStdio_invalidate_fileno(aTHX_ stdio); + if (!invalidate) { + dupfd = PerlLIO_dup_cloexec(fd); #ifdef USE_ITHREADS - if (dupfd < 0) { - /* Oh cXap. This isn't going to go well. Not sure if we can - recover from here, or if closing this particular FILE * - is a good idea now. */ - } + if (dupfd < 0) { + /* Oh cXap. This isn't going to go well. Not sure if we can + recover from here, or if closing this particular FILE * + is a good idea now. */ + } #endif - } - } else { - SAVE_ERRNO; /* This is here only to silence compiler warnings */ - } + } + } else { + SAVE_ERRNO; /* This is here only to silence compiler warnings */ + } result = PerlSIO_fclose(stdio); - /* We treat error from stdio as success if we invalidated - errno may NOT be expected EBADF - */ - if (invalidate && result != 0) { - RESTORE_ERRNO; - result = 0; - } + /* We treat error from stdio as success if we invalidated + errno may NOT be expected EBADF + */ + if (invalidate && result != 0) { + RESTORE_ERRNO; + result = 0; + } #ifdef SOCKS5_VERSION_NAME - /* in SOCKS' case, let close() determine return value */ - result = close(fd); + /* in SOCKS' case, let close() determine return value */ + result = close(fd); #endif - if (dupfd >= 0) { - PerlLIO_dup2_cloexec(dupfd, fd); - setfd_inhexec_for_sysfd(fd); - PerlLIO_close(dupfd); - } + if (dupfd >= 0) { + PerlLIO_dup2_cloexec(dupfd, fd); + setfd_inhexec_for_sysfd(fd); + PerlLIO_close(dupfd); + } MUTEX_UNLOCK(&PL_perlio_mutex); - return result; + return result; } } @@ -3358,30 +3327,30 @@ PerlIOStdio_read(pTHX_ PerlIO *f, void *vbuf, Size_t count) FILE * s; SSize_t got = 0; if (PerlIO_lockcnt(f)) /* in use: abort ungracefully */ - return -1; + return -1; s = PerlIOSelf(f, PerlIOStdio)->stdio; for (;;) { - if (count == 1) { - STDCHAR *buf = (STDCHAR *) vbuf; - /* - * Perl is expecting PerlIO_getc() to fill the buffer Linux's - * stdio does not do that for fread() - */ - const int ch = PerlSIO_fgetc(s); - if (ch != EOF) { - *buf = ch; - got = 1; - } - } - else - got = PerlSIO_fread(vbuf, 1, count, s); - if (got == 0 && PerlSIO_ferror(s)) - got = -1; - if (got >= 0 || errno != EINTR) - break; - if (PL_sig_pending && S_perlio_async_run(aTHX_ f)) - return -1; - SETERRNO(0,0); /* just in case */ + if (count == 1) { + STDCHAR *buf = (STDCHAR *) vbuf; + /* + * Perl is expecting PerlIO_getc() to fill the buffer Linux's + * stdio does not do that for fread() + */ + const int ch = PerlSIO_fgetc(s); + if (ch != EOF) { + *buf = ch; + got = 1; + } + } + else + got = PerlSIO_fread(vbuf, 1, count, s); + if (got == 0 && PerlSIO_ferror(s)) + got = -1; + if (got >= 0 || errno != EINTR) + break; + if (PL_sig_pending && S_perlio_async_run(aTHX_ f)) + return -1; + SETERRNO(0,0); /* just in case */ } #ifdef __sgi /* Under some circumstances IRIX stdio fgetc() and fread() @@ -3400,52 +3369,52 @@ PerlIOStdio_unread(pTHX_ PerlIO *f, const void *vbuf, Size_t count) #ifdef STDIO_BUFFER_WRITABLE if (PerlIO_fast_gets(f) && PerlIO_has_base(f)) { - STDCHAR *buf = ((STDCHAR *) vbuf) + count; - STDCHAR *base = PerlIO_get_base(f); - SSize_t cnt = PerlIO_get_cnt(f); - STDCHAR *ptr = PerlIO_get_ptr(f); - SSize_t avail = ptr - base; - if (avail > 0) { - if (avail > count) { - avail = count; - } - ptr -= avail; - Move(buf-avail,ptr,avail,STDCHAR); - count -= avail; - unread += avail; - PerlIO_set_ptrcnt(f,ptr,cnt+avail); - if (PerlSIO_feof(s) && unread >= 0) - PerlSIO_clearerr(s); - } + STDCHAR *buf = ((STDCHAR *) vbuf) + count; + STDCHAR *base = PerlIO_get_base(f); + SSize_t cnt = PerlIO_get_cnt(f); + STDCHAR *ptr = PerlIO_get_ptr(f); + SSize_t avail = ptr - base; + if (avail > 0) { + if (avail > count) { + avail = count; + } + ptr -= avail; + Move(buf-avail,ptr,avail,STDCHAR); + count -= avail; + unread += avail; + PerlIO_set_ptrcnt(f,ptr,cnt+avail); + if (PerlSIO_feof(s) && unread >= 0) + PerlSIO_clearerr(s); + } } else #endif if (PerlIO_has_cntptr(f)) { - /* We can get pointer to buffer but not its base - Do ungetc() but check chars are ending up in the - buffer - */ - STDCHAR *eptr = (STDCHAR*)PerlSIO_get_ptr(s); - STDCHAR *buf = ((STDCHAR *) vbuf) + count; - while (count > 0) { - const int ch = *--buf & 0xFF; - if (ungetc(ch,s) != ch) { - /* ungetc did not work */ - break; - } - if ((STDCHAR*)PerlSIO_get_ptr(s) != --eptr || ((*eptr & 0xFF) != ch)) { - /* Did not change pointer as expected */ - if (fgetc(s) != EOF) /* get char back again */ + /* We can get pointer to buffer but not its base + Do ungetc() but check chars are ending up in the + buffer + */ + STDCHAR *eptr = (STDCHAR*)PerlSIO_get_ptr(s); + STDCHAR *buf = ((STDCHAR *) vbuf) + count; + while (count > 0) { + const int ch = (U8) *--buf; + if (ungetc(ch,s) != ch) { + /* ungetc did not work */ + break; + } + if ((STDCHAR*)PerlSIO_get_ptr(s) != --eptr || (((U8) *eptr) != ch)) { + /* Did not change pointer as expected */ + if (fgetc(s) != EOF) /* get char back again */ break; - } - /* It worked ! */ - count--; - unread++; - } + } + /* It worked ! */ + count--; + unread++; + } } if (count > 0) { - unread += PerlIOBase_unread(aTHX_ f, vbuf, count); + unread += PerlIOBase_unread(aTHX_ f, vbuf, count); } return unread; } @@ -3455,15 +3424,15 @@ PerlIOStdio_write(pTHX_ PerlIO *f, const void *vbuf, Size_t count) { SSize_t got; if (PerlIO_lockcnt(f)) /* in use: abort ungracefully */ - return -1; + return -1; for (;;) { - got = PerlSIO_fwrite(vbuf, 1, count, - PerlIOSelf(f, PerlIOStdio)->stdio); - if (got >= 0 || errno != EINTR) - break; - if (PL_sig_pending && S_perlio_async_run(aTHX_ f)) - return -1; - SETERRNO(0,0); /* just in case */ + got = PerlSIO_fwrite(vbuf, 1, count, + PerlIOSelf(f, PerlIOStdio)->stdio); + if (got >= 0 || errno != EINTR) + break; + if (PL_sig_pending && S_perlio_async_run(aTHX_ f)) + return -1; + SETERRNO(0,0); /* just in case */ } return got; } @@ -3493,23 +3462,23 @@ PerlIOStdio_flush(pTHX_ PerlIO *f) PERL_UNUSED_CONTEXT; if (PerlIOBase(f)->flags & PERLIO_F_CANWRITE) { - return PerlSIO_fflush(stdio); + return PerlSIO_fflush(stdio); } else { - NOOP; + NOOP; #if 0 - /* - * FIXME: This discards ungetc() and pre-read stuff which is not - * right if this is just a "sync" from a layer above Suspect right - * design is to do _this_ but not have layer above flush this - * layer read-to-read - */ - /* - * Not writeable - sync by attempting a seek - */ - dSAVE_ERRNO; - if (PerlSIO_fseek(stdio, (Off_t) 0, SEEK_CUR) != 0) - RESTORE_ERRNO; + /* + * FIXME: This discards ungetc() and pre-read stuff which is not + * right if this is just a "sync" from a layer above Suspect right + * design is to do _this_ but not have layer above flush this + * layer read-to-read + */ + /* + * Not writeable - sync by attempting a seek + */ + dSAVE_ERRNO; + if (PerlSIO_fseek(stdio, (Off_t) 0, SEEK_CUR) != 0) + RESTORE_ERRNO; #endif } return 0; @@ -3592,7 +3561,7 @@ PerlIOStdio_set_ptrcnt(pTHX_ PerlIO *f, STDCHAR * ptr, SSize_t cnt) FILE * const stdio = PerlIOSelf(f, PerlIOStdio)->stdio; PERL_UNUSED_CONTEXT; if (ptr != NULL) { -#ifdef STDIO_PTR_LVALUE +# ifdef STDIO_PTR_LVALUE /* This is a long-standing infamous mess. The root of the * problem is that one cannot know the signedness of char, and * more precisely the signedness of FILE._ptr. The following @@ -3605,33 +3574,33 @@ PerlIOStdio_set_ptrcnt(pTHX_ PerlIO *f, STDCHAR * ptr, SSize_t cnt) * * So let's try silencing the warning at least for gcc. */ GCC_DIAG_IGNORE_STMT(-Wpointer-sign); - PerlSIO_set_ptr(stdio, ptr); /* LHS STDCHAR* cast non-portable */ + PerlSIO_set_ptr(stdio, ptr); /* LHS STDCHAR* cast non-portable */ GCC_DIAG_RESTORE_STMT; -#ifdef STDIO_PTR_LVAL_SETS_CNT - assert(PerlSIO_get_cnt(stdio) == (cnt)); -#endif -#if (!defined(STDIO_PTR_LVAL_NOCHANGE_CNT)) - /* - * Setting ptr _does_ change cnt - we are done - */ - return; -#endif -#else /* STDIO_PTR_LVALUE */ - PerlProc_abort(); -#endif /* STDIO_PTR_LVALUE */ +# ifdef STDIO_PTR_LVAL_SETS_CNT + assert(PerlSIO_get_cnt(stdio) == (cnt)); +# endif +# if (!defined(STDIO_PTR_LVAL_NOCHANGE_CNT)) + /* + * Setting ptr _does_ change cnt - we are done + */ + return; +# endif +# else /* STDIO_PTR_LVALUE */ + PerlProc_abort(); +# endif /* STDIO_PTR_LVALUE */ } /* * Now (or only) set cnt */ -#ifdef STDIO_CNT_LVALUE +# ifdef STDIO_CNT_LVALUE PerlSIO_set_cnt(stdio, cnt); -#elif (defined(STDIO_PTR_LVALUE) && defined(STDIO_PTR_LVAL_SETS_CNT)) +# elif (defined(STDIO_PTR_LVALUE) && defined(STDIO_PTR_LVAL_SETS_CNT)) PerlSIO_set_ptr(stdio, - PerlSIO_get_ptr(stdio) + (PerlSIO_get_cnt(stdio) - - cnt)); -#else /* STDIO_PTR_LVAL_SETS_CNT */ + PerlSIO_get_ptr(stdio) + (PerlSIO_get_cnt(stdio) - + cnt)); +# else /* STDIO_PTR_LVAL_SETS_CNT */ PerlProc_abort(); -#endif /* STDIO_CNT_LVALUE */ +# endif /* STDIO_CNT_LVALUE */ } @@ -3644,52 +3613,52 @@ PerlIOStdio_fill(pTHX_ PerlIO *f) int c; PERL_UNUSED_CONTEXT; if (PerlIO_lockcnt(f)) /* in use: abort ungracefully */ - return -1; + return -1; stdio = PerlIOSelf(f, PerlIOStdio)->stdio; /* * fflush()ing read-only streams can cause trouble on some stdio-s */ if ((PerlIOBase(f)->flags & PERLIO_F_CANWRITE)) { - if (PerlSIO_fflush(stdio) != 0) - return EOF; + if (PerlSIO_fflush(stdio) != 0) + return EOF; } for (;;) { - c = PerlSIO_fgetc(stdio); - if (c != EOF) - break; - if (! PerlSIO_ferror(stdio) || errno != EINTR) - return EOF; - if (PL_sig_pending && S_perlio_async_run(aTHX_ f)) - return -1; - SETERRNO(0,0); + c = PerlSIO_fgetc(stdio); + if (c != EOF) + break; + if (! PerlSIO_ferror(stdio) || errno != EINTR) + return EOF; + if (PL_sig_pending && S_perlio_async_run(aTHX_ f)) + return -1; + SETERRNO(0,0); } #if (defined(STDIO_PTR_LVALUE) && (defined(STDIO_CNT_LVALUE) || defined(STDIO_PTR_LVAL_SETS_CNT))) -#ifdef STDIO_BUFFER_WRITABLE +# ifdef STDIO_BUFFER_WRITABLE if (PerlIO_fast_gets(f) && PerlIO_has_base(f)) { - /* Fake ungetc() to the real buffer in case system's ungetc - goes elsewhere - */ - STDCHAR *base = (STDCHAR*)PerlSIO_get_base(stdio); - SSize_t cnt = PerlSIO_get_cnt(stdio); - STDCHAR *ptr = (STDCHAR*)PerlSIO_get_ptr(stdio); - if (ptr == base+1) { - *--ptr = (STDCHAR) c; - PerlIOStdio_set_ptrcnt(aTHX_ f,ptr,cnt+1); - if (PerlSIO_feof(stdio)) - PerlSIO_clearerr(stdio); - return 0; - } + /* Fake ungetc() to the real buffer in case system's ungetc + goes elsewhere + */ + STDCHAR *base = (STDCHAR*)PerlSIO_get_base(stdio); + SSize_t cnt = PerlSIO_get_cnt(stdio); + STDCHAR *ptr = (STDCHAR*)PerlSIO_get_ptr(stdio); + if (ptr == base+1) { + *--ptr = (STDCHAR) c; + PerlIOStdio_set_ptrcnt(aTHX_ f,ptr,cnt+1); + if (PerlSIO_feof(stdio)) + PerlSIO_clearerr(stdio); + return 0; + } } else -#endif +# endif if (PerlIO_has_cntptr(f)) { - STDCHAR ch = c; - if (PerlIOStdio_unread(aTHX_ f,&ch,1) == 1) { - return 0; - } + STDCHAR ch = c; + if (PerlIOStdio_unread(aTHX_ f,&ch,1) == 1) { + return 0; + } } #endif @@ -3697,7 +3666,7 @@ PerlIOStdio_fill(pTHX_ PerlIO *f) using ungetc(). */ if (PerlSIO_ungetc(c, stdio) != c) - return EOF; + return EOF; return 0; } @@ -3758,33 +3727,33 @@ PerlIO_exportFILE(PerlIO * f, const char *mode) dTHX; FILE *stdio = NULL; if (PerlIOValid(f)) { - char buf[8]; + char buf[8]; int fd = PerlIO_fileno(f); if (fd < 0) { return NULL; } - PerlIO_flush(f); - if (!mode || !*mode) { - mode = PerlIO_modestr(f, buf); - } - stdio = PerlSIO_fdopen(PerlIO_fileno(f), mode); - if (stdio) { - PerlIOl *l = *f; - PerlIO *f2; - /* De-link any lower layers so new :stdio sticks */ - *f = NULL; - if ((f2 = PerlIO_push(aTHX_ f, PERLIO_FUNCS_CAST(&PerlIO_stdio), buf, NULL))) { - PerlIOStdio *s = PerlIOSelf((f = f2), PerlIOStdio); - s->stdio = stdio; - PerlIOUnix_refcnt_inc(fileno(stdio)); - /* Link previous lower layers under new one */ - *PerlIONext(f) = l; - } - else { - /* restore layers list */ - *f = l; - } - } + PerlIO_flush(f); + if (!mode || !*mode) { + mode = PerlIO_modestr(f, buf); + } + stdio = PerlSIO_fdopen(PerlIO_fileno(f), mode); + if (stdio) { + PerlIOl *l = *f; + PerlIO *f2; + /* De-link any lower layers so new :stdio sticks */ + *f = NULL; + if ((f2 = PerlIO_push(aTHX_ f, PERLIO_FUNCS_CAST(&PerlIO_stdio), buf, NULL))) { + PerlIOStdio *s = PerlIOSelf((f = f2), PerlIOStdio); + s->stdio = stdio; + PerlIOUnix_refcnt_inc(fileno(stdio)); + /* Link previous lower layers under new one */ + *PerlIONext(f) = l; + } + else { + /* restore layers list */ + *f = l; + } + } } return stdio; } @@ -3796,11 +3765,11 @@ PerlIO_findFILE(PerlIO *f) PerlIOl *l = *f; FILE *stdio; while (l) { - if (l->tab == &PerlIO_stdio) { - PerlIOStdio *s = PerlIOSelf(&l, PerlIOStdio); - return s->stdio; - } - l = *PerlIONext(&l); + if (l->tab == &PerlIO_stdio) { + PerlIOStdio *s = PerlIOSelf(&l, PerlIOStdio); + return s->stdio; + } + l = *PerlIONext(&l); } /* Uses fallback "mode" via PerlIO_modestr() in PerlIO_exportFILE */ /* However, we're not really exporting a FILE * to someone else (who @@ -3811,9 +3780,9 @@ PerlIO_findFILE(PerlIO *f) only one way to be consistent. */ stdio = PerlIO_exportFILE(f, NULL); if (stdio) { - const int fd = fileno(stdio); - if (fd >= 0) - PerlIOUnix_refcnt_dec(fd); + const int fd = fileno(stdio); + if (fd >= 0) + PerlIOUnix_refcnt_dec(fd); } return stdio; } @@ -3824,20 +3793,20 @@ PerlIO_releaseFILE(PerlIO *p, FILE *f) { PerlIOl *l; while ((l = *p)) { - if (l->tab == &PerlIO_stdio) { - PerlIOStdio *s = PerlIOSelf(&l, PerlIOStdio); - if (s->stdio == f) { /* not in a loop */ - const int fd = fileno(f); - if (fd >= 0) - PerlIOUnix_refcnt_dec(fd); - { - dTHX; - PerlIO_pop(aTHX_ p); - } - return; - } - } - p = PerlIONext(p); + if (l->tab == &PerlIO_stdio) { + PerlIOStdio *s = PerlIOSelf(&l, PerlIOStdio); + if (s->stdio == f) { /* not in a loop */ + const int fd = fileno(f); + if (fd >= 0) + PerlIOUnix_refcnt_dec(fd); + { + dTHX; + PerlIO_pop(aTHX_ p); + } + return; + } + } + p = PerlIONext(p); } return; } @@ -3853,91 +3822,91 @@ PerlIOBuf_pushed(pTHX_ PerlIO *f, const char *mode, SV *arg, PerlIO_funcs *tab) PerlIOBuf *b = PerlIOSelf(f, PerlIOBuf); const int fd = PerlIO_fileno(f); if (fd >= 0 && PerlLIO_isatty(fd)) { - PerlIOBase(f)->flags |= PERLIO_F_LINEBUF | PERLIO_F_TTY; + PerlIOBase(f)->flags |= PERLIO_F_LINEBUF | PERLIO_F_TTY; } if (*PerlIONext(f)) { - const Off_t posn = PerlIO_tell(PerlIONext(f)); - if (posn != (Off_t) - 1) { - b->posn = posn; - } + const Off_t posn = PerlIO_tell(PerlIONext(f)); + if (posn != (Off_t) - 1) { + b->posn = posn; + } } return PerlIOBase_pushed(aTHX_ f, mode, arg, tab); } PerlIO * PerlIOBuf_open(pTHX_ PerlIO_funcs *self, PerlIO_list_t *layers, - IV n, const char *mode, int fd, int imode, int perm, - PerlIO *f, int narg, SV **args) + IV n, const char *mode, int fd, int imode, int perm, + PerlIO *f, int narg, SV **args) { if (PerlIOValid(f)) { - PerlIO *next = PerlIONext(f); - PerlIO_funcs *tab = - PerlIO_layer_fetch(aTHX_ layers, n - 1, PerlIOBase(next)->tab); - if (tab && tab->Open) - next = - (*tab->Open)(aTHX_ tab, layers, n - 1, mode, fd, imode, perm, - next, narg, args); - if (!next || (*PerlIOBase(f)->tab->Pushed) (aTHX_ f, mode, PerlIOArg, self) != 0) { - return NULL; - } + PerlIO *next = PerlIONext(f); + PerlIO_funcs *tab = + PerlIO_layer_fetch(aTHX_ layers, n - 1, PerlIOBase(next)->tab); + if (tab && tab->Open) + next = + (*tab->Open)(aTHX_ tab, layers, n - 1, mode, fd, imode, perm, + next, narg, args); + if (!next || (*PerlIOBase(f)->tab->Pushed) (aTHX_ f, mode, PerlIOArg, self) != 0) { + return NULL; + } } else { - PerlIO_funcs *tab = PerlIO_layer_fetch(aTHX_ layers, n - 1, PerlIO_default_btm()); - int init = 0; - if (*mode == IoTYPE_IMPLICIT) { - init = 1; - /* - * mode++; - */ - } - if (tab && tab->Open) - f = (*tab->Open)(aTHX_ tab, layers, n - 1, mode, fd, imode, perm, - f, narg, args); - else - SETERRNO(EINVAL, LIB_INVARG); - if (f) { - if (PerlIO_push(aTHX_ f, self, mode, PerlIOArg) == 0) { - /* - * if push fails during open, open fails. close will pop us. - */ - PerlIO_close (f); - return NULL; - } else { - fd = PerlIO_fileno(f); - if (init && fd == 2) { - /* - * Initial stderr is unbuffered - */ - PerlIOBase(f)->flags |= PERLIO_F_UNBUF; - } + PerlIO_funcs *tab = PerlIO_layer_fetch(aTHX_ layers, n - 1, PerlIO_default_btm()); + int init = 0; + if (*mode == IoTYPE_IMPLICIT) { + init = 1; + /* + * mode++; + */ + } + if (tab && tab->Open) + f = (*tab->Open)(aTHX_ tab, layers, n - 1, mode, fd, imode, perm, + f, narg, args); + else + SETERRNO(EINVAL, LIB_INVARG); + if (f) { + if (PerlIO_push(aTHX_ f, self, mode, PerlIOArg) == 0) { + /* + * if push fails during open, open fails. close will pop us. + */ + PerlIO_close (f); + return NULL; + } else { + fd = PerlIO_fileno(f); + if (init && fd == 2) { + /* + * Initial stderr is unbuffered + */ + PerlIOBase(f)->flags |= PERLIO_F_UNBUF; + } #ifdef PERLIO_USING_CRLF # ifdef PERLIO_IS_BINMODE_FD - if (PERLIO_IS_BINMODE_FD(fd)) - PerlIO_binmode(aTHX_ f, '<'/*not used*/, O_BINARY, NULL); - else + if (PERLIO_IS_BINMODE_FD(fd)) + PerlIO_binmode(aTHX_ f, '<'/*not used*/, O_BINARY, NULL); + else # endif - /* - * do something about failing setmode()? --jhi - */ - PerlLIO_setmode(fd, O_BINARY); + /* + * do something about failing setmode()? --jhi + */ + PerlLIO_setmode(fd, O_BINARY); #endif #ifdef VMS - /* Enable line buffering with record-oriented regular files - * so we don't introduce an extraneous record boundary when - * the buffer fills up. - */ - if (PerlIOBase(f)->flags & PERLIO_F_CANWRITE) { - Stat_t st; - if (PerlLIO_fstat(fd, &st) == 0 - && S_ISREG(st.st_mode) - && (st.st_fab_rfm == FAB$C_VAR - || st.st_fab_rfm == FAB$C_VFC)) { - PerlIOBase(f)->flags |= PERLIO_F_LINEBUF; - } - } + /* Enable line buffering with record-oriented regular files + * so we don't introduce an extraneous record boundary when + * the buffer fills up. + */ + if (PerlIOBase(f)->flags & PERLIO_F_CANWRITE) { + Stat_t st; + if (PerlLIO_fstat(fd, &st) == 0 + && S_ISREG(st.st_mode) + && (st.st_fab_rfm == FAB$C_VAR + || st.st_fab_rfm == FAB$C_VFC)) { + PerlIOBase(f)->flags |= PERLIO_F_LINEBUF; + } + } #endif - } - } + } + } } return f; } @@ -3957,54 +3926,54 @@ PerlIOBuf_flush(pTHX_ PerlIO *f) int code = 0; PerlIO *n = PerlIONext(f); if (PerlIOBase(f)->flags & PERLIO_F_WRBUF) { - /* - * write() the buffer - */ - const STDCHAR *buf = b->buf; - const STDCHAR *p = buf; - while (p < b->ptr) { - SSize_t count = PerlIO_write(n, p, b->ptr - p); - if (count > 0) { - p += count; - } - else if (count < 0 || PerlIO_error(n)) { - PerlIOBase(f)->flags |= PERLIO_F_ERROR; - PerlIO_save_errno(f); - code = -1; - break; - } - } - b->posn += (p - buf); + /* + * write() the buffer + */ + const STDCHAR *buf = b->buf; + const STDCHAR *p = buf; + while (p < b->ptr) { + SSize_t count = PerlIO_write(n, p, b->ptr - p); + if (count > 0) { + p += count; + } + else if (count < 0 || PerlIO_error(n)) { + PerlIOBase(f)->flags |= PERLIO_F_ERROR; + PerlIO_save_errno(f); + code = -1; + break; + } + } + b->posn += (p - buf); } else if (PerlIOBase(f)->flags & PERLIO_F_RDBUF) { - STDCHAR *buf = PerlIO_get_base(f); - /* - * Note position change - */ - b->posn += (b->ptr - buf); - if (b->ptr < b->end) { - /* We did not consume all of it - try and seek downstream to - our logical position - */ - if (PerlIOValid(n) && PerlIO_seek(n, b->posn, SEEK_SET) == 0) { - /* Reload n as some layers may pop themselves on seek */ - b->posn = PerlIO_tell(n = PerlIONext(f)); - } - else { - /* Seek failed (e.g. pipe or tty). Do NOT clear buffer or pre-read - data is lost for good - so return saying "ok" having undone - the position adjust - */ - b->posn -= (b->ptr - buf); - return code; - } - } + STDCHAR *buf = PerlIO_get_base(f); + /* + * Note position change + */ + b->posn += (b->ptr - buf); + if (b->ptr < b->end) { + /* We did not consume all of it - try and seek downstream to + our logical position + */ + if (PerlIOValid(n) && PerlIO_seek(n, b->posn, SEEK_SET) == 0) { + /* Reload n as some layers may pop themselves on seek */ + b->posn = PerlIO_tell(n = PerlIONext(f)); + } + else { + /* Seek failed (e.g. pipe or tty). Do NOT clear buffer or pre-read + data is lost for good - so return saying "ok" having undone + the position adjust + */ + b->posn -= (b->ptr - buf); + return code; + } + } } b->ptr = b->end = b->buf; PerlIOBase(f)->flags &= ~(PERLIO_F_RDBUF | PERLIO_F_WRBUF); /* We check for Valid because of dubious decision to make PerlIO_flush(NULL) flush all */ if (PerlIOValid(n) && PerlIO_flush(n) != 0) - code = -1; + code = -1; return code; } @@ -4023,60 +3992,60 @@ PerlIOBuf_fill(pTHX_ PerlIO *f) * we would not normally be fill'ing if there was data left in anycase. */ if (PerlIO_flush(f) != 0) /* XXXX Check that its seek() succeeded?! */ - return -1; + return -1; if (PerlIOBase(f)->flags & PERLIO_F_TTY) - PerlIOBase_flush_linebuf(aTHX); + PerlIOBase_flush_linebuf(aTHX); if (!b->buf) - PerlIO_get_base(f); /* allocate via vtable */ + PerlIO_get_base(f); /* allocate via vtable */ assert(b->buf); /* The b->buf does get allocated via the vtable system. */ b->ptr = b->end = b->buf; if (!PerlIOValid(n)) { - PerlIOBase(f)->flags |= PERLIO_F_EOF; - return -1; + PerlIOBase(f)->flags |= PERLIO_F_EOF; + return -1; } if (PerlIO_fast_gets(n)) { - /* - * Layer below is also buffered. We do _NOT_ want to call its - * ->Read() because that will loop till it gets what we asked for - * which may hang on a pipe etc. Instead take anything it has to - * hand, or ask it to fill _once_. - */ - avail = PerlIO_get_cnt(n); - if (avail <= 0) { - avail = PerlIO_fill(n); - if (avail == 0) - avail = PerlIO_get_cnt(n); - else { - if (!PerlIO_error(n) && PerlIO_eof(n)) - avail = 0; - } - } - if (avail > 0) { - STDCHAR *ptr = PerlIO_get_ptr(n); - const SSize_t cnt = avail; - if (avail > (SSize_t)b->bufsiz) - avail = b->bufsiz; - Copy(ptr, b->buf, avail, STDCHAR); - PerlIO_set_ptrcnt(n, ptr + avail, cnt - avail); - } + /* + * Layer below is also buffered. We do _NOT_ want to call its + * ->Read() because that will loop till it gets what we asked for + * which may hang on a pipe etc. Instead take anything it has to + * hand, or ask it to fill _once_. + */ + avail = PerlIO_get_cnt(n); + if (avail <= 0) { + avail = PerlIO_fill(n); + if (avail == 0) + avail = PerlIO_get_cnt(n); + else { + if (!PerlIO_error(n) && PerlIO_eof(n)) + avail = 0; + } + } + if (avail > 0) { + STDCHAR *ptr = PerlIO_get_ptr(n); + const SSize_t cnt = avail; + if (avail > (SSize_t)b->bufsiz) + avail = b->bufsiz; + Copy(ptr, b->buf, avail, STDCHAR); + PerlIO_set_ptrcnt(n, ptr + avail, cnt - avail); + } } else { - avail = PerlIO_read(n, b->ptr, b->bufsiz); + avail = PerlIO_read(n, b->ptr, b->bufsiz); } if (avail <= 0) { - if (avail == 0) - PerlIOBase(f)->flags |= PERLIO_F_EOF; - else - { - PerlIOBase(f)->flags |= PERLIO_F_ERROR; - PerlIO_save_errno(f); - } - return -1; + if (avail == 0) + PerlIOBase(f)->flags |= PERLIO_F_EOF; + else + { + PerlIOBase(f)->flags |= PERLIO_F_ERROR; + PerlIO_save_errno(f); + } + return -1; } b->end = b->buf + avail; PerlIOBase(f)->flags |= PERLIO_F_RDBUF; @@ -4088,9 +4057,9 @@ PerlIOBuf_read(pTHX_ PerlIO *f, void *vbuf, Size_t count) { if (PerlIOValid(f)) { const PerlIOBuf * const b = PerlIOSelf(f, PerlIOBuf); - if (!b->ptr) - PerlIO_get_base(f); - return PerlIOBase_read(aTHX_ f, vbuf, count); + if (!b->ptr) + PerlIO_get_base(f); + return PerlIOBase_read(aTHX_ f, vbuf, count); } return 0; } @@ -4103,54 +4072,54 @@ PerlIOBuf_unread(pTHX_ PerlIO *f, const void *vbuf, Size_t count) SSize_t unread = 0; SSize_t avail; if (PerlIOBase(f)->flags & PERLIO_F_WRBUF) - PerlIO_flush(f); + PerlIO_flush(f); if (!b->buf) - PerlIO_get_base(f); + PerlIO_get_base(f); if (b->buf) { - if (PerlIOBase(f)->flags & PERLIO_F_RDBUF) { - /* - * Buffer is already a read buffer, we can overwrite any chars - * which have been read back to buffer start - */ - avail = (b->ptr - b->buf); - } - else { - /* - * Buffer is idle, set it up so whole buffer is available for - * unread - */ - avail = b->bufsiz; - b->end = b->buf + avail; - b->ptr = b->end; - PerlIOBase(f)->flags |= PERLIO_F_RDBUF; - /* - * Buffer extends _back_ from where we are now - */ - b->posn -= b->bufsiz; - } - if ((SSize_t) count >= 0 && avail > (SSize_t) count) { - /* - * If we have space for more than count, just move count - */ - avail = count; - } - if (avail > 0) { - b->ptr -= avail; - buf -= avail; - /* - * In simple stdio-like ungetc() case chars will be already - * there - */ - if (buf != b->ptr) { - Copy(buf, b->ptr, avail, STDCHAR); - } - count -= avail; - unread += avail; - PerlIOBase(f)->flags &= ~PERLIO_F_EOF; - } + if (PerlIOBase(f)->flags & PERLIO_F_RDBUF) { + /* + * Buffer is already a read buffer, we can overwrite any chars + * which have been read back to buffer start + */ + avail = (b->ptr - b->buf); + } + else { + /* + * Buffer is idle, set it up so whole buffer is available for + * unread + */ + avail = b->bufsiz; + b->end = b->buf + avail; + b->ptr = b->end; + PerlIOBase(f)->flags |= PERLIO_F_RDBUF; + /* + * Buffer extends _back_ from where we are now + */ + b->posn -= b->bufsiz; + } + if ((SSize_t) count >= 0 && avail > (SSize_t) count) { + /* + * If we have space for more than count, just move count + */ + avail = count; + } + if (avail > 0) { + b->ptr -= avail; + buf -= avail; + /* + * In simple stdio-like ungetc() case chars will be already + * there + */ + if (buf != b->ptr) { + Copy(buf, b->ptr, avail, STDCHAR); + } + count -= avail; + unread += avail; + PerlIOBase(f)->flags &= ~PERLIO_F_EOF; + } } if (count > 0) { - unread += PerlIOBase_unread(aTHX_ f, vbuf, count); + unread += PerlIOBase_unread(aTHX_ f, vbuf, count); } return unread; } @@ -4163,41 +4132,41 @@ PerlIOBuf_write(pTHX_ PerlIO *f, const void *vbuf, Size_t count) const STDCHAR *flushptr = buf; Size_t written = 0; if (!b->buf) - PerlIO_get_base(f); + PerlIO_get_base(f); if (!(PerlIOBase(f)->flags & PERLIO_F_CANWRITE)) - return 0; + return 0; if (PerlIOBase(f)->flags & PERLIO_F_RDBUF) { - if (PerlIO_flush(f) != 0) { - return 0; - } + if (PerlIO_flush(f) != 0) { + return 0; + } } if (PerlIOBase(f)->flags & PERLIO_F_LINEBUF) { - flushptr = buf + count; - while (flushptr > buf && *(flushptr - 1) != '\n') - --flushptr; + flushptr = buf + count; + while (flushptr > buf && *(flushptr - 1) != '\n') + --flushptr; } while (count > 0) { - SSize_t avail = b->bufsiz - (b->ptr - b->buf); - if ((SSize_t) count >= 0 && (SSize_t) count < avail) - avail = count; - if (flushptr > buf && flushptr <= buf + avail) - avail = flushptr - buf; - PerlIOBase(f)->flags |= PERLIO_F_WRBUF; - if (avail) { - Copy(buf, b->ptr, avail, STDCHAR); - count -= avail; - buf += avail; - written += avail; - b->ptr += avail; - if (buf == flushptr) - PerlIO_flush(f); - } - if (b->ptr >= (b->buf + b->bufsiz)) - if (PerlIO_flush(f) == -1) - return -1; + SSize_t avail = b->bufsiz - (b->ptr - b->buf); + if ((SSize_t) count >= 0 && (SSize_t) count < avail) + avail = count; + if (flushptr > buf && flushptr <= buf + avail) + avail = flushptr - buf; + PerlIOBase(f)->flags |= PERLIO_F_WRBUF; + if (avail) { + Copy(buf, b->ptr, avail, STDCHAR); + count -= avail; + buf += avail; + written += avail; + b->ptr += avail; + if (buf == flushptr) + PerlIO_flush(f); + } + if (b->ptr >= (b->buf + b->bufsiz)) + if (PerlIO_flush(f) == -1) + return -1; } if (PerlIOBase(f)->flags & PERLIO_F_UNBUF) - PerlIO_flush(f); + PerlIO_flush(f); return written; } @@ -4206,12 +4175,12 @@ PerlIOBuf_seek(pTHX_ PerlIO *f, Off_t offset, int whence) { IV code; if ((code = PerlIO_flush(f)) == 0) { - PerlIOBase(f)->flags &= ~PERLIO_F_EOF; - code = PerlIO_seek(PerlIONext(f), offset, whence); - if (code == 0) { - PerlIOBuf *b = PerlIOSelf(f, PerlIOBuf); - b->posn = PerlIO_tell(PerlIONext(f)); - } + PerlIOBase(f)->flags &= ~PERLIO_F_EOF; + code = PerlIO_seek(PerlIONext(f), offset, whence); + if (code == 0) { + PerlIOBuf *b = PerlIOSelf(f, PerlIOBuf); + b->posn = PerlIO_tell(PerlIONext(f)); + } } return code; } @@ -4227,21 +4196,21 @@ PerlIOBuf_tell(pTHX_ PerlIO *f) if ((PerlIOBase(f)->flags & PERLIO_F_APPEND) && (PerlIOBase(f)->flags & PERLIO_F_WRBUF)) { #if 1 - /* As O_APPEND files are normally shared in some sense it is better - to flush : - */ - PerlIO_flush(f); + /* As O_APPEND files are normally shared in some sense it is better + to flush : + */ + PerlIO_flush(f); #else /* when file is NOT shared then this is sufficient */ - PerlIO_seek(PerlIONext(f),0, SEEK_END); + PerlIO_seek(PerlIONext(f),0, SEEK_END); #endif - posn = b->posn = PerlIO_tell(PerlIONext(f)); + posn = b->posn = PerlIO_tell(PerlIONext(f)); } if (b->buf) { - /* - * If buffer is valid adjust position by amount in buffer - */ - posn += (b->ptr - b->buf); + /* + * If buffer is valid adjust position by amount in buffer + */ + posn += (b->ptr - b->buf); } return posn; } @@ -4252,7 +4221,7 @@ PerlIOBuf_popped(pTHX_ PerlIO *f) const IV code = PerlIOBase_popped(aTHX_ f); PerlIOBuf * const b = PerlIOSelf(f, PerlIOBuf); if (b->buf && b->buf != (STDCHAR *) & b->oneword) { - Safefree(b->buf); + Safefree(b->buf); } b->ptr = b->end = b->buf = NULL; PerlIOBase(f)->flags &= ~(PERLIO_F_RDBUF | PERLIO_F_WRBUF); @@ -4265,7 +4234,7 @@ PerlIOBuf_close(pTHX_ PerlIO *f) const IV code = PerlIOBase_close(aTHX_ f); PerlIOBuf * const b = PerlIOSelf(f, PerlIOBuf); if (b->buf && b->buf != (STDCHAR *) & b->oneword) { - Safefree(b->buf); + Safefree(b->buf); } b->ptr = b->end = b->buf = NULL; PerlIOBase(f)->flags &= ~(PERLIO_F_RDBUF | PERLIO_F_WRBUF); @@ -4277,7 +4246,7 @@ PerlIOBuf_get_ptr(pTHX_ PerlIO *f) { const PerlIOBuf * const b = PerlIOSelf(f, PerlIOBuf); if (!b->buf) - PerlIO_get_base(f); + PerlIO_get_base(f); return b->ptr; } @@ -4286,9 +4255,9 @@ PerlIOBuf_get_cnt(pTHX_ PerlIO *f) { const PerlIOBuf * const b = PerlIOSelf(f, PerlIOBuf); if (!b->buf) - PerlIO_get_base(f); + PerlIO_get_base(f); if (PerlIOBase(f)->flags & PERLIO_F_RDBUF) - return (b->end - b->ptr); + return (b->end - b->ptr); return 0; } @@ -4299,14 +4268,14 @@ PerlIOBuf_get_base(pTHX_ PerlIO *f) PERL_UNUSED_CONTEXT; if (!b->buf) { - if (!b->bufsiz) - b->bufsiz = PERLIOBUF_DEFAULT_BUFSIZ; - Newx(b->buf,b->bufsiz, STDCHAR); - if (!b->buf) { - b->buf = (STDCHAR *) & b->oneword; - b->bufsiz = sizeof(b->oneword); - } - b->end = b->ptr = b->buf; + if (!b->bufsiz) + b->bufsiz = PERLIOBUF_DEFAULT_BUFSIZ; + Newx(b->buf,b->bufsiz, STDCHAR); + if (!b->buf) { + b->buf = (STDCHAR *) & b->oneword; + b->bufsiz = sizeof(b->oneword); + } + b->end = b->ptr = b->buf; } return b->buf; } @@ -4316,7 +4285,7 @@ PerlIOBuf_bufsiz(pTHX_ PerlIO *f) { const PerlIOBuf * const b = PerlIOSelf(f, PerlIOBuf); if (!b->buf) - PerlIO_get_base(f); + PerlIO_get_base(f); return (b->end - b->buf); } @@ -4328,7 +4297,7 @@ PerlIOBuf_set_ptrcnt(pTHX_ PerlIO *f, STDCHAR * ptr, SSize_t cnt) PERL_UNUSED_ARG(cnt); #endif if (!b->buf) - PerlIO_get_base(f); + PerlIO_get_base(f); b->ptr = ptr; assert(PerlIO_get_cnt(f) == cnt); assert(b->ptr >= b->buf); @@ -4415,8 +4384,8 @@ PerlIOPending_flush(pTHX_ PerlIO *f) { PerlIOBuf * const b = PerlIOSelf(f, PerlIOBuf); if (b->buf && b->buf != (STDCHAR *) & b->oneword) { - Safefree(b->buf); - b->buf = NULL; + Safefree(b->buf); + b->buf = NULL; } PerlIO_pop(aTHX_ f); return 0; @@ -4426,10 +4395,10 @@ void PerlIOPending_set_ptrcnt(pTHX_ PerlIO *f, STDCHAR * ptr, SSize_t cnt) { if (cnt <= 0) { - PerlIO_flush(f); + PerlIO_flush(f); } else { - PerlIOBuf_set_ptrcnt(aTHX_ f, ptr, cnt); + PerlIOBuf_set_ptrcnt(aTHX_ f, ptr, cnt); } } @@ -4443,8 +4412,8 @@ PerlIOPending_pushed(pTHX_ PerlIO *f, const char *mode, SV *arg, PerlIO_funcs *t * etc. get muddled when it changes mid-string when we auto-pop. */ l->flags = (l->flags & ~(PERLIO_F_FASTGETS | PERLIO_F_UTF8)) | - (PerlIOBase(PerlIONext(f))-> - flags & (PERLIO_F_FASTGETS | PERLIO_F_UTF8)); + (PerlIOBase(PerlIONext(f))-> + flags & (PERLIO_F_FASTGETS | PERLIO_F_UTF8)); return code; } @@ -4454,14 +4423,14 @@ PerlIOPending_read(pTHX_ PerlIO *f, void *vbuf, Size_t count) SSize_t avail = PerlIO_get_cnt(f); SSize_t got = 0; if ((SSize_t) count >= 0 && (SSize_t)count < avail) - avail = count; + avail = count; if (avail > 0) - got = PerlIOBuf_read(aTHX_ f, vbuf, avail); + got = PerlIOBuf_read(aTHX_ f, vbuf, avail); if (got >= 0 && got < (SSize_t)count) { - const SSize_t more = - PerlIO_read(f, ((STDCHAR *) vbuf) + got, count - got); - if (more >= 0 || got == 0) - got += more; + const SSize_t more = + PerlIO_read(f, ((STDCHAR *) vbuf) + got, count - got); + if (more >= 0 || got == 0) + got += more; } return got; } @@ -4517,7 +4486,7 @@ PERLIO_FUNCS_DECL(PerlIO_pending) = { typedef struct { PerlIOBuf base; /* PerlIOBuf stuff */ STDCHAR *nl; /* Position of crlf we "lied" about in the - * buffer */ + * buffer */ } PerlIOCrlf; /* Inherit the PERLIO_F_UTF8 flag from previous layer. @@ -4529,9 +4498,9 @@ S_inherit_utf8_flag(PerlIO *f) { PerlIO *g = PerlIONext(f); if (PerlIOValid(g)) { - if (PerlIOBase(g)->flags & PERLIO_F_UTF8) { - PerlIOBase(f)->flags |= PERLIO_F_UTF8; - } + if (PerlIOBase(g)->flags & PERLIO_F_UTF8) { + PerlIOBase(f)->flags |= PERLIO_F_UTF8; + } } } @@ -4544,24 +4513,24 @@ PerlIOCrlf_pushed(pTHX_ PerlIO *f, const char *mode, SV *arg, PerlIO_funcs *tab) #if 0 DEBUG_i( PerlIO_debug("PerlIOCrlf_pushed f=%p %s %s fl=%08" UVxf "\n", - (void*)f, PerlIOBase(f)->tab->name, (mode) ? mode : "(Null)", - PerlIOBase(f)->flags); + (void*)f, PerlIOBase(f)->tab->name, (mode) ? mode : "(Null)", + PerlIOBase(f)->flags); ); #endif { /* If the old top layer is a CRLF layer, reactivate it (if * necessary) and remove this new layer from the stack */ - PerlIO *g = PerlIONext(f); - if (PerlIOValid(g)) { - PerlIOl *b = PerlIOBase(g); - if (b && b->tab == &PerlIO_crlf) { - if (!(b->flags & PERLIO_F_CRLF)) - b->flags |= PERLIO_F_CRLF; - S_inherit_utf8_flag(g); - PerlIO_pop(aTHX_ f); - return code; - } - } + PerlIO *g = PerlIONext(f); + if (PerlIOValid(g)) { + PerlIOl *b = PerlIOBase(g); + if (b && b->tab == &PerlIO_crlf) { + if (!(b->flags & PERLIO_F_CRLF)) + b->flags |= PERLIO_F_CRLF; + S_inherit_utf8_flag(g); + PerlIO_pop(aTHX_ f); + return code; + } + } } S_inherit_utf8_flag(f); return code; @@ -4573,52 +4542,52 @@ PerlIOCrlf_unread(pTHX_ PerlIO *f, const void *vbuf, Size_t count) { PerlIOCrlf * const c = PerlIOSelf(f, PerlIOCrlf); if (c->nl) { /* XXXX Shouldn't it be done only if b->ptr > c->nl? */ - *(c->nl) = NATIVE_0xd; - c->nl = NULL; + *(c->nl) = NATIVE_0xd; + c->nl = NULL; } if (!(PerlIOBase(f)->flags & PERLIO_F_CRLF)) - return PerlIOBuf_unread(aTHX_ f, vbuf, count); + return PerlIOBuf_unread(aTHX_ f, vbuf, count); else { - const STDCHAR *buf = (const STDCHAR *) vbuf + count; - PerlIOBuf *b = PerlIOSelf(f, PerlIOBuf); - SSize_t unread = 0; - if (PerlIOBase(f)->flags & PERLIO_F_WRBUF) - PerlIO_flush(f); - if (!b->buf) - PerlIO_get_base(f); - if (b->buf) { - if (!(PerlIOBase(f)->flags & PERLIO_F_RDBUF)) { - b->end = b->ptr = b->buf + b->bufsiz; - PerlIOBase(f)->flags |= PERLIO_F_RDBUF; - b->posn -= b->bufsiz; - } - while (count > 0 && b->ptr > b->buf) { - const int ch = *--buf; - if (ch == '\n') { - if (b->ptr - 2 >= b->buf) { - *--(b->ptr) = NATIVE_0xa; - *--(b->ptr) = NATIVE_0xd; - unread++; - count--; - } - else { - /* If b->ptr - 1 == b->buf, we are undoing reading 0xa */ + const STDCHAR *buf = (const STDCHAR *) vbuf + count; + PerlIOBuf *b = PerlIOSelf(f, PerlIOBuf); + SSize_t unread = 0; + if (PerlIOBase(f)->flags & PERLIO_F_WRBUF) + PerlIO_flush(f); + if (!b->buf) + PerlIO_get_base(f); + if (b->buf) { + if (!(PerlIOBase(f)->flags & PERLIO_F_RDBUF)) { + b->end = b->ptr = b->buf + b->bufsiz; + PerlIOBase(f)->flags |= PERLIO_F_RDBUF; + b->posn -= b->bufsiz; + } + while (count > 0 && b->ptr > b->buf) { + const int ch = *--buf; + if (ch == '\n') { + if (b->ptr - 2 >= b->buf) { + *--(b->ptr) = NATIVE_0xa; + *--(b->ptr) = NATIVE_0xd; + unread++; + count--; + } + else { + /* If b->ptr - 1 == b->buf, we are undoing reading 0xa */ *--(b->ptr) = NATIVE_0xa; /* Works even if 0xa == '\r' */ - unread++; - count--; - } - } - else { - *--(b->ptr) = ch; - unread++; - count--; - } - } - } + unread++; + count--; + } + } + else { + *--(b->ptr) = ch; + unread++; + count--; + } + } + } if (count > 0) unread += PerlIOBase_unread(aTHX_ f, (const STDCHAR *) vbuf + unread, count); - return unread; + return unread; } } @@ -4628,69 +4597,69 @@ PerlIOCrlf_get_cnt(pTHX_ PerlIO *f) { PerlIOBuf * const b = PerlIOSelf(f, PerlIOBuf); if (!b->buf) - PerlIO_get_base(f); + PerlIO_get_base(f); if (PerlIOBase(f)->flags & PERLIO_F_RDBUF) { - PerlIOCrlf * const c = PerlIOSelf(f, PerlIOCrlf); - if ((PerlIOBase(f)->flags & PERLIO_F_CRLF) && (!c->nl || *c->nl == NATIVE_0xd)) { - STDCHAR *nl = (c->nl) ? c->nl : b->ptr; - scan: - while (nl < b->end && *nl != NATIVE_0xd) - nl++; - if (nl < b->end && *nl == NATIVE_0xd) { - test: - if (nl + 1 < b->end) { - if (nl[1] == NATIVE_0xa) { - *nl = '\n'; - c->nl = nl; - } - else { - /* - * Not CR,LF but just CR - */ - nl++; - goto scan; - } - } - else { - /* - * Blast - found CR as last char in buffer - */ - - if (b->ptr < nl) { - /* - * They may not care, defer work as long as - * possible - */ - c->nl = nl; - return (nl - b->ptr); - } - else { - int code; - b->ptr++; /* say we have read it as far as - * flush() is concerned */ - b->buf++; /* Leave space in front of buffer */ - /* Note as we have moved buf up flush's - posn += ptr-buf - will naturally make posn point at CR - */ - b->bufsiz--; /* Buffer is thus smaller */ - code = PerlIO_fill(f); /* Fetch some more */ - b->bufsiz++; /* Restore size for next time */ - b->buf--; /* Point at space */ - b->ptr = nl = b->buf; /* Which is what we hand - * off */ - *nl = NATIVE_0xd; /* Fill in the CR */ - if (code == 0) - goto test; /* fill() call worked */ - /* - * CR at EOF - just fall through - */ - /* Should we clear EOF though ??? */ - } - } - } - } - return (((c->nl) ? (c->nl + 1) : b->end) - b->ptr); + PerlIOCrlf * const c = PerlIOSelf(f, PerlIOCrlf); + if ((PerlIOBase(f)->flags & PERLIO_F_CRLF) && (!c->nl || *c->nl == NATIVE_0xd)) { + STDCHAR *nl = (c->nl) ? c->nl : b->ptr; + scan: + while (nl < b->end && *nl != NATIVE_0xd) + nl++; + if (nl < b->end && *nl == NATIVE_0xd) { + test: + if (nl + 1 < b->end) { + if (nl[1] == NATIVE_0xa) { + *nl = '\n'; + c->nl = nl; + } + else { + /* + * Not CR,LF but just CR + */ + nl++; + goto scan; + } + } + else { + /* + * Blast - found CR as last char in buffer + */ + + if (b->ptr < nl) { + /* + * They may not care, defer work as long as + * possible + */ + c->nl = nl; + return (nl - b->ptr); + } + else { + int code; + b->ptr++; /* say we have read it as far as + * flush() is concerned */ + b->buf++; /* Leave space in front of buffer */ + /* Note as we have moved buf up flush's + posn += ptr-buf + will naturally make posn point at CR + */ + b->bufsiz--; /* Buffer is thus smaller */ + code = PerlIO_fill(f); /* Fetch some more */ + b->bufsiz++; /* Restore size for next time */ + b->buf--; /* Point at space */ + b->ptr = nl = b->buf; /* Which is what we hand + * off */ + *nl = NATIVE_0xd; /* Fill in the CR */ + if (code == 0) + goto test; /* fill() call worked */ + /* + * CR at EOF - just fall through + */ + /* Should we clear EOF though ??? */ + } + } + } + } + return (((c->nl) ? (c->nl + 1) : b->end) - b->ptr); } return 0; } @@ -4701,50 +4670,50 @@ PerlIOCrlf_set_ptrcnt(pTHX_ PerlIO *f, STDCHAR * ptr, SSize_t cnt) PerlIOBuf * const b = PerlIOSelf(f, PerlIOBuf); PerlIOCrlf * const c = PerlIOSelf(f, PerlIOCrlf); if (!b->buf) - PerlIO_get_base(f); + PerlIO_get_base(f); if (!ptr) { - if (c->nl) { - ptr = c->nl + 1; - if (ptr == b->end && *c->nl == NATIVE_0xd) { - /* Deferred CR at end of buffer case - we lied about count */ - ptr--; - } - } - else { - ptr = b->end; - } - ptr -= cnt; + if (c->nl) { + ptr = c->nl + 1; + if (ptr == b->end && *c->nl == NATIVE_0xd) { + /* Deferred CR at end of buffer case - we lied about count */ + ptr--; + } + } + else { + ptr = b->end; + } + ptr -= cnt; } else { - NOOP; + NOOP; #if 0 - /* - * Test code - delete when it works ... - */ - IV flags = PerlIOBase(f)->flags; - STDCHAR *chk = (c->nl) ? (c->nl+1) : b->end; - if (ptr+cnt == c->nl && c->nl+1 == b->end && *c->nl == NATIVE_0xd) { - /* Deferred CR at end of buffer case - we lied about count */ - chk--; - } - chk -= cnt; - - if (ptr != chk ) { - Perl_croak(aTHX_ "ptr wrong %p != %p fl=%08" UVxf - " nl=%p e=%p for %d", (void*)ptr, (void*)chk, - flags, c->nl, b->end, cnt); - } + /* + * Test code - delete when it works ... + */ + IV flags = PerlIOBase(f)->flags; + STDCHAR *chk = (c->nl) ? (c->nl+1) : b->end; + if (ptr+cnt == c->nl && c->nl+1 == b->end && *c->nl == NATIVE_0xd) { + /* Deferred CR at end of buffer case - we lied about count */ + chk--; + } + chk -= cnt; + + if (ptr != chk ) { + Perl_croak(aTHX_ "ptr wrong %p != %p fl=%08" UVxf + " nl=%p e=%p for %d", (void*)ptr, (void*)chk, + flags, c->nl, b->end, cnt); + } #endif } if (c->nl) { - if (ptr > c->nl) { - /* - * They have taken what we lied about - */ - *(c->nl) = NATIVE_0xd; - c->nl = NULL; - ptr++; - } + if (ptr > c->nl) { + /* + * They have taken what we lied about + */ + *(c->nl) = NATIVE_0xd; + c->nl = NULL; + ptr++; + } } b->ptr = ptr; PerlIOBase(f)->flags |= PERLIO_F_RDBUF; @@ -4754,49 +4723,49 @@ SSize_t PerlIOCrlf_write(pTHX_ PerlIO *f, const void *vbuf, Size_t count) { if (!(PerlIOBase(f)->flags & PERLIO_F_CRLF)) - return PerlIOBuf_write(aTHX_ f, vbuf, count); + return PerlIOBuf_write(aTHX_ f, vbuf, count); else { - PerlIOBuf * const b = PerlIOSelf(f, PerlIOBuf); - const STDCHAR *buf = (const STDCHAR *) vbuf; - const STDCHAR * const ebuf = buf + count; - if (!b->buf) - PerlIO_get_base(f); - if (!(PerlIOBase(f)->flags & PERLIO_F_CANWRITE)) - return 0; - while (buf < ebuf) { - const STDCHAR * const eptr = b->buf + b->bufsiz; - PerlIOBase(f)->flags |= PERLIO_F_WRBUF; - while (buf < ebuf && b->ptr < eptr) { - if (*buf == '\n') { - if ((b->ptr + 2) > eptr) { - /* - * Not room for both - */ - PerlIO_flush(f); - break; - } - else { - *(b->ptr)++ = NATIVE_0xd; /* CR */ - *(b->ptr)++ = NATIVE_0xa; /* LF */ - buf++; - if (PerlIOBase(f)->flags & PERLIO_F_LINEBUF) { - PerlIO_flush(f); - break; - } - } - } - else { - *(b->ptr)++ = *buf++; - } - if (b->ptr >= eptr) { - PerlIO_flush(f); - break; - } - } - } - if (PerlIOBase(f)->flags & PERLIO_F_UNBUF) - PerlIO_flush(f); - return (buf - (STDCHAR *) vbuf); + PerlIOBuf * const b = PerlIOSelf(f, PerlIOBuf); + const STDCHAR *buf = (const STDCHAR *) vbuf; + const STDCHAR * const ebuf = buf + count; + if (!b->buf) + PerlIO_get_base(f); + if (!(PerlIOBase(f)->flags & PERLIO_F_CANWRITE)) + return 0; + while (buf < ebuf) { + const STDCHAR * const eptr = b->buf + b->bufsiz; + PerlIOBase(f)->flags |= PERLIO_F_WRBUF; + while (buf < ebuf && b->ptr < eptr) { + if (*buf == '\n') { + if ((b->ptr + 2) > eptr) { + /* + * Not room for both + */ + PerlIO_flush(f); + break; + } + else { + *(b->ptr)++ = NATIVE_0xd; /* CR */ + *(b->ptr)++ = NATIVE_0xa; /* LF */ + buf++; + if (PerlIOBase(f)->flags & PERLIO_F_LINEBUF) { + PerlIO_flush(f); + break; + } + } + } + else { + *(b->ptr)++ = *buf++; + } + if (b->ptr >= eptr) { + PerlIO_flush(f); + break; + } + } + } + if (PerlIOBase(f)->flags & PERLIO_F_UNBUF) + PerlIO_flush(f); + return (buf - (STDCHAR *) vbuf); } } @@ -4805,8 +4774,8 @@ PerlIOCrlf_flush(pTHX_ PerlIO *f) { PerlIOCrlf * const c = PerlIOSelf(f, PerlIOCrlf); if (c->nl) { - *(c->nl) = NATIVE_0xd; - c->nl = NULL; + *(c->nl) = NATIVE_0xd; + c->nl = NULL; } return PerlIOBuf_flush(aTHX_ f); } @@ -4815,11 +4784,11 @@ IV PerlIOCrlf_binmode(pTHX_ PerlIO *f) { if ((PerlIOBase(f)->flags & PERLIO_F_CRLF)) { - /* In text mode - flush any pending stuff and flip it */ - PerlIOBase(f)->flags &= ~PERLIO_F_CRLF; + /* In text mode - flush any pending stuff and flip it */ + PerlIOBase(f)->flags &= ~PERLIO_F_CRLF; #ifndef PERLIO_USING_CRLF - /* CRLF is unusual case - if this is just the :crlf layer pop it */ - PerlIO_pop(aTHX_ f); + /* CRLF is unusual case - if this is just the :crlf layer pop it */ + PerlIO_pop(aTHX_ f); #endif } return PerlIOBase_binmode(aTHX_ f); @@ -4860,7 +4829,7 @@ PerlIO * Perl_PerlIO_stdin(pTHX) { if (!PL_perlio) { - PerlIO_stdstreams(aTHX); + PerlIO_stdstreams(aTHX); } return (PerlIO*)&PL_perlio[1]; } @@ -4869,7 +4838,7 @@ PerlIO * Perl_PerlIO_stdout(pTHX) { if (!PL_perlio) { - PerlIO_stdstreams(aTHX); + PerlIO_stdstreams(aTHX); } return (PerlIO*)&PL_perlio[2]; } @@ -4878,7 +4847,7 @@ PerlIO * Perl_PerlIO_stderr(pTHX) { if (!PL_perlio) { - PerlIO_stdstreams(aTHX); + PerlIO_stdstreams(aTHX); } return (PerlIO*)&PL_perlio[3]; } @@ -4894,12 +4863,12 @@ PerlIO_getname(PerlIO *f, char *buf) bool exported = FALSE; FILE *stdio = PerlIOSelf(f, PerlIOStdio)->stdio; if (!stdio) { - stdio = PerlIO_exportFILE(f,0); - exported = TRUE; + stdio = PerlIO_exportFILE(f,0); + exported = TRUE; } if (stdio) { - name = fgetname(stdio, buf); - if (exported) PerlIO_releaseFILE(f,stdio); + name = fgetname(stdio, buf); + if (exported) PerlIO_releaseFILE(f,stdio); } return name; #else @@ -4930,7 +4899,7 @@ PerlIO * PerlIO_open(const char *path, const char *mode) { dTHX; - SV *name = sv_2mortal(newSVpv(path, 0)); + SV *name = newSVpvn_flags(path, path == NULL ? 0 : strlen(path), SVs_TEMP); return PerlIO_openn(aTHX_ NULL, mode, -1, 0, 0, NULL, 1, &name); } @@ -4939,7 +4908,7 @@ PerlIO * PerlIO_reopen(const char *path, const char *mode, PerlIO *f) { dTHX; - SV *name = sv_2mortal(newSVpv(path,0)); + SV *name = newSVpvn_flags(path, path == NULL ? 0 : strlen(path), SVs_TEMP); return PerlIO_openn(aTHX_ NULL, mode, -1, 0, 0, f, 1, &name); } @@ -4950,7 +4919,7 @@ PerlIO_getc(PerlIO *f) dTHX; STDCHAR buf[1]; if ( 1 == PerlIO_read(f, buf, 1) ) { - return (unsigned char) buf[0]; + return (unsigned char) buf[0]; } return EOF; } @@ -4961,9 +4930,9 @@ PerlIO_ungetc(PerlIO *f, int ch) { dTHX; if (ch != EOF) { - STDCHAR buf = ch; - if (PerlIO_unread(f, &buf, 1) == 1) - return ch; + STDCHAR buf = ch; + if (PerlIO_unread(f, &buf, 1) == 1) + return ch; } return EOF; } @@ -5062,7 +5031,7 @@ PerlIO_tmpfile_flags(int imode) #ifdef WIN32 const int fd = win32_tmpfd_mode(imode); if (fd >= 0) - f = PerlIO_fdopen(fd, "w+b"); + f = PerlIO_fdopen(fd, "w+b"); #elif ! defined(OS2) int fd = -1; char tempname[] = "/tmp/PerlIO_XXXXXX"; @@ -5071,16 +5040,16 @@ PerlIO_tmpfile_flags(int imode) int old_umask = umask(0177); imode &= ~MKOSTEMP_MODE_MASK; if (tmpdir && *tmpdir) { - /* if TMPDIR is set and not empty, we try that first */ - sv = newSVpv(tmpdir, 0); - sv_catpv(sv, tempname + 4); - fd = Perl_my_mkostemp_cloexec(SvPVX(sv), imode | O_VMS_DELETEONCLOSE); + /* if TMPDIR is set and not empty, we try that first */ + sv = newSVpv(tmpdir, 0); + sv_catpv(sv, tempname + 4); + fd = Perl_my_mkostemp_cloexec(SvPVX(sv), imode | O_VMS_DELETEONCLOSE); } if (fd < 0) { - SvREFCNT_dec(sv); - sv = NULL; - /* else we try /tmp */ - fd = Perl_my_mkostemp_cloexec(tempname, imode | O_VMS_DELETEONCLOSE); + SvREFCNT_dec(sv); + sv = NULL; + /* else we try /tmp */ + fd = Perl_my_mkostemp_cloexec(tempname, imode | O_VMS_DELETEONCLOSE); } if (fd < 0) { /* Try cwd */ @@ -5095,18 +5064,18 @@ PerlIO_tmpfile_flags(int imode) int writing = 1; (void)PerlIO_intmode2str(imode | MKOSTEMP_MODES, mode, &writing); f = PerlIO_fdopen(fd, mode); - if (f) - PerlIOBase(f)->flags |= PERLIO_F_TEMP; -# ifndef VMS - PerlLIO_unlink(sv ? SvPVX_const(sv) : tempname); -# endif + if (f) + PerlIOBase(f)->flags |= PERLIO_F_TEMP; +# ifndef VMS + PerlLIO_unlink(sv ? SvPVX_const(sv) : tempname); +# endif } SvREFCNT_dec(sv); #else /* !HAS_MKSTEMP, fallback to stdio tmpfile(). */ FILE * const stdio = PerlSIO_tmpfile(); if (stdio) - f = PerlIO_fdopen(fileno(stdio), "w+"); + f = PerlIO_fdopen(fileno(stdio), "w+"); #endif /* else WIN32 */ return f; @@ -5117,7 +5086,7 @@ Perl_PerlIO_save_errno(pTHX_ PerlIO *f) { PERL_UNUSED_CONTEXT; if (!PerlIOValid(f)) - return; + return; PerlIOBase(f)->err = errno; #ifdef VMS PerlIOBase(f)->os_err = vaxc$errno; @@ -5133,7 +5102,7 @@ Perl_PerlIO_restore_errno(pTHX_ PerlIO *f) { PERL_UNUSED_CONTEXT; if (!PerlIOValid(f)) - return; + return; SETERRNO(PerlIOBase(f)->err, PerlIOBase(f)->os_err); #ifdef OS2 Perl_rc = PerlIOBase(f)->os_err); @@ -5154,6 +5123,8 @@ Perl_PerlIO_restore_errno(pTHX_ PerlIO *f) const char * Perl_PerlIO_context_layers(pTHX_ const char *mode) { + /* Returns the layers set by "use open" */ + const char *direction = NULL; SV *layers; /* @@ -5161,17 +5132,17 @@ Perl_PerlIO_context_layers(pTHX_ const char *mode) */ if (!PL_curcop) - return NULL; + return NULL; if (mode && mode[0] != 'r') { - if (PL_curcop->cop_hints & HINT_LEXICAL_IO_OUT) - direction = "open>"; + if (PL_curcop->cop_hints & HINT_LEXICAL_IO_OUT) + direction = "open>"; } else { - if (PL_curcop->cop_hints & HINT_LEXICAL_IO_IN) - direction = "open<"; + if (PL_curcop->cop_hints & HINT_LEXICAL_IO_IN) + direction = "open<"; } if (!direction) - return NULL; + return NULL; layers = cop_hints_fetch_pvn(PL_curcop, direction, 5, 0, 0); @@ -5181,39 +5152,39 @@ Perl_PerlIO_context_layers(pTHX_ const char *mode) #ifndef HAS_FSETPOS -#undef PerlIO_setpos +# undef PerlIO_setpos int PerlIO_setpos(PerlIO *f, SV *pos) { if (SvOK(pos)) { - if (f) { - dTHX; - STRLEN len; - const Off_t * const posn = (Off_t *) SvPV(pos, len); - if(len == sizeof(Off_t)) - return PerlIO_seek(f, *posn, SEEK_SET); - } + if (f) { + dTHX; + STRLEN len; + const Off_t * const posn = (Off_t *) SvPV(pos, len); + if(len == sizeof(Off_t)) + return PerlIO_seek(f, *posn, SEEK_SET); + } } SETERRNO(EINVAL, SS_IVCHAN); return -1; } #else -#undef PerlIO_setpos +# undef PerlIO_setpos int PerlIO_setpos(PerlIO *f, SV *pos) { if (SvOK(pos)) { - if (f) { - dTHX; - STRLEN len; - Fpos_t * const fpos = (Fpos_t *) SvPV(pos, len); - if(len == sizeof(Fpos_t)) -#if defined(USE_64_BIT_STDIO) && defined(USE_FSETPOS64) - return fsetpos64(f, fpos); -#else - return fsetpos(f, fpos); -#endif - } + if (f) { + dTHX; + STRLEN len; + Fpos_t * const fpos = (Fpos_t *) SvPV(pos, len); + if(len == sizeof(Fpos_t)) +# if defined(USE_64_BIT_STDIO) && defined(USE_FSETPOS64) + return fsetpos64(f, fpos); +# else + return fsetpos(f, fpos); +# endif + } } SETERRNO(EINVAL, SS_IVCHAN); return -1; @@ -5221,7 +5192,7 @@ PerlIO_setpos(PerlIO *f, SV *pos) #endif #ifndef HAS_FGETPOS -#undef PerlIO_getpos +# undef PerlIO_getpos int PerlIO_getpos(PerlIO *f, SV *pos) { @@ -5231,18 +5202,18 @@ PerlIO_getpos(PerlIO *f, SV *pos) return (posn == (Off_t) - 1) ? -1 : 0; } #else -#undef PerlIO_getpos +# undef PerlIO_getpos int PerlIO_getpos(PerlIO *f, SV *pos) { dTHX; Fpos_t fpos; int code; -#if defined(USE_64_BIT_STDIO) && defined(USE_FSETPOS64) +# if defined(USE_64_BIT_STDIO) && defined(USE_FSETPOS64) code = fgetpos64(f, &fpos); -#else +# else code = fgetpos(f, &fpos); -#endif +# endif sv_setpvn(pos, (char *) &fpos, sizeof(fpos)); return code; } diff --git a/gnu/usr.bin/perl/perlio.h b/gnu/usr.bin/perl/perlio.h index ee16ab8774e..b802105e87f 100644 --- a/gnu/usr.bin/perl/perlio.h +++ b/gnu/usr.bin/perl/perlio.h @@ -63,22 +63,26 @@ typedef PerlIOl *PerlIO; #define PerlIO PerlIO #define PERLIO_LAYERS 1 -/* PERLIO_FUNCS_CONST is now on by default for efficiency, PERLIO_FUNCS_CONST - can be removed 1 day once stable & then PerlIO vtables are permanently RO */ -#ifdef PERLIO_FUNCS_CONST +/* +=for apidoc_section $io +=for apidoc Amu||PERLIO_FUNCS_DECL|PerlIO * ftab +Declare C to be a PerlIO function table, that is, of type +C. + +=for apidoc Ay|PerlIO_funcs *|PERLIO_FUNCS_CAST|PerlIO * func +Cast the pointer C to be of type S>. + +=cut +*/ #define PERLIO_FUNCS_DECL(funcs) const PerlIO_funcs funcs #define PERLIO_FUNCS_CAST(funcs) (PerlIO_funcs*)(funcs) -#else -#define PERLIO_FUNCS_DECL(funcs) PerlIO_funcs funcs -#define PERLIO_FUNCS_CAST(funcs) (funcs) -#endif PERL_CALLCONV void PerlIO_define_layer(pTHX_ PerlIO_funcs *tab); PERL_CALLCONV PerlIO_funcs *PerlIO_find_layer(pTHX_ const char *name, STRLEN len, - int load); + int load); PERL_CALLCONV PerlIO *PerlIO_push(pTHX_ PerlIO *f, PERLIO_FUNCS_DECL(*tab), - const char *mode, SV *arg); + const char *mode, SV *arg); PERL_CALLCONV void PerlIO_pop(pTHX_ PerlIO *f); PERL_CALLCONV AV* PerlIO_get_layers(pTHX_ PerlIO *f); PERL_CALLCONV void PerlIO_clone(pTHX_ PerlInterpreter *proto, @@ -189,8 +193,8 @@ PERL_CALLCONV PerlIO *PerlIO_open(const char *, const char *); #endif #ifndef PerlIO_openn PERL_CALLCONV PerlIO *PerlIO_openn(pTHX_ const char *layers, const char *mode, - int fd, int imode, int perm, PerlIO *old, - int narg, SV **arg); + int fd, int imode, int perm, PerlIO *old, + int narg, SV **arg); #endif #ifndef PerlIO_eof PERL_CALLCONV int PerlIO_eof(PerlIO *); @@ -315,11 +319,11 @@ PERL_CALLCONV int PerlIO_isutf8(PerlIO *); #endif #ifndef PerlIO_apply_layers PERL_CALLCONV int PerlIO_apply_layers(pTHX_ PerlIO *f, const char *mode, - const char *names); + const char *names); #endif #ifndef PerlIO_binmode PERL_CALLCONV int PerlIO_binmode(pTHX_ PerlIO *f, int iotype, int omode, - const char *names); + const char *names); #endif #ifndef PerlIO_getname PERL_CALLCONV char *PerlIO_getname(PerlIO *, char *); diff --git a/gnu/usr.bin/perl/perliol.h b/gnu/usr.bin/perl/perliol.h index 40b4224e508..e247ad60dde 100644 --- a/gnu/usr.bin/perl/perliol.h +++ b/gnu/usr.bin/perl/perliol.h @@ -21,10 +21,10 @@ struct _PerlIO_funcs { IV (*Pushed) (pTHX_ PerlIO *f, const char *mode, SV *arg, PerlIO_funcs *tab); IV (*Popped) (pTHX_ PerlIO *f); PerlIO *(*Open) (pTHX_ PerlIO_funcs *tab, - PerlIO_list_t *layers, IV n, - const char *mode, - int fd, int imode, int perm, - PerlIO *old, int narg, SV **args); + PerlIO_list_t *layers, IV n, + const char *mode, + int fd, int imode, int perm, + PerlIO *old, int narg, SV **args); IV (*Binmode)(pTHX_ PerlIO *f); SV *(*Getarg) (pTHX_ PerlIO *f, CLONE_PARAMS *param, int flags); IV (*Fileno) (pTHX_ PerlIO *f); @@ -106,24 +106,14 @@ struct _PerlIO { #define PerlIOValid(f) ((f) && *(f)) /*--------------------------------------------------------------------------------------*/ -/* Data exports - EXTCONST rather than extern is needed for Cygwin */ -#undef EXTPERLIO -#ifdef PERLIO_FUNCS_CONST -#define EXTPERLIO EXTCONST -#else -#define EXTPERLIO EXT -#endif -EXTPERLIO PerlIO_funcs PerlIO_unix; -EXTPERLIO PerlIO_funcs PerlIO_perlio; -EXTPERLIO PerlIO_funcs PerlIO_stdio; -EXTPERLIO PerlIO_funcs PerlIO_crlf; -EXTPERLIO PerlIO_funcs PerlIO_utf8; -EXTPERLIO PerlIO_funcs PerlIO_byte; -EXTPERLIO PerlIO_funcs PerlIO_raw; -EXTPERLIO PerlIO_funcs PerlIO_pending; -#ifdef WIN32 -EXTPERLIO PerlIO_funcs PerlIO_win32; -#endif +EXTCONST PerlIO_funcs PerlIO_unix; +EXTCONST PerlIO_funcs PerlIO_perlio; +EXTCONST PerlIO_funcs PerlIO_stdio; +EXTCONST PerlIO_funcs PerlIO_crlf; +EXTCONST PerlIO_funcs PerlIO_utf8; +EXTCONST PerlIO_funcs PerlIO_byte; +EXTCONST PerlIO_funcs PerlIO_raw; +EXTCONST PerlIO_funcs PerlIO_pending; PERL_CALLCONV PerlIO *PerlIO_allocate(pTHX); PERL_CALLCONV SV *PerlIO_arg_fetch(PerlIO_list_t *av, IV n); #define PerlIOArg PerlIO_arg_fetch(layers,n) @@ -151,7 +141,7 @@ typedef struct { } PerlIOBuf; PERL_CALLCONV int PerlIO_apply_layera(pTHX_ PerlIO *f, const char *mode, - PerlIO_list_t *layers, IV n, IV max); + PerlIO_list_t *layers, IV n, IV max); PERL_CALLCONV int PerlIO_parse_layers(pTHX_ PerlIO_list_t *av, const char *names); PERL_CALLCONV PerlIO_funcs *PerlIO_layer_fetch(pTHX_ PerlIO_list_t *av, IV n, PerlIO_funcs *def); diff --git a/gnu/usr.bin/perl/perlvars.h b/gnu/usr.bin/perl/perlvars.h index 2e1c66435f4..2ecf29ed124 100644 --- a/gnu/usr.bin/perl/perlvars.h +++ b/gnu/usr.bin/perl/perlvars.h @@ -38,9 +38,9 @@ use the variable. PERLVAR(G, op_mutex, perl_mutex) /* Mutex for op refcounting */ #endif PERLVARI(G, curinterp, PerlInterpreter *, NULL) - /* currently running interpreter - * (initial parent interpreter under - * useithreads) */ + /* currently running interpreter + * (initial parent interpreter under + * useithreads) */ #if defined(USE_ITHREADS) PERLVAR(G, thr_key, perl_key) /* key to retrieve per-thread struct */ #endif @@ -57,7 +57,7 @@ PERLVARI(G, sig_handlers_initted, int, 0) #endif #ifdef FAKE_PERSISTENT_SIGNAL_HANDLERS PERLVARA(G, sig_ignoring, SIG_SIZE, int) - /* which signals we are ignoring */ + /* which signals we are ignoring */ #endif #ifdef FAKE_DEFAULT_SIGNAL_HANDLERS PERLVARA(G, sig_defaulting, SIG_SIZE, int) @@ -104,10 +104,8 @@ PERLVARI(G, mmap_page_size, IV, 0) #if defined(USE_ITHREADS) PERLVAR(G, hints_mutex, perl_mutex) /* Mutex for refcounted he refcounting */ -PERLVAR(G, env_mutex, perl_mutex) /* Mutex for accessing ENV */ -# if ! defined(USE_THREAD_SAFE_LOCALE) || defined(TS_W32_BROKEN_LOCALECONV) -PERLVAR(G, locale_mutex, perl_mutex) /* Mutex for setlocale() changing */ -# endif +PERLVAR(G, env_mutex, perl_RnW1_mutex_t) /* Mutex for accessing ENV */ +PERLVAR(G, locale_mutex, perl_mutex) /* Mutex related to locale handling */ # ifndef USE_THREAD_SAFE_LOCALE PERLVAR(G, lc_numeric_mutex, perl_mutex) /* Mutex for switching LC_NUMERIC */ # endif @@ -172,23 +170,10 @@ destruction. (Use of C is discouraged since 5.14.) #if defined(USE_ITHREADS) PERLVAR(G, check_mutex, perl_mutex) /* Mutex for PL_check */ #endif -#ifdef PERL_GLOBAL_STRUCT -PERLVAR(G, ppaddr, Perl_ppaddr_t *) /* or opcode.h */ -PERLVAR(G, check, Perl_check_t *) /* or opcode.h */ -PERLVARA(G, fold_locale, 256, unsigned char) /* or perl.h */ -#endif - -#ifdef PERL_NEED_APPCTX -PERLVAR(G, appctx, void*) /* the application context */ -#endif - -#if defined(HAS_TIMES) && defined(PERL_NEED_TIMESBASE) -PERLVAR(G, timesbase, struct tms) -#endif /* allocate a unique index to every module that calls MY_CXT_INIT */ -#ifdef PERL_IMPLICIT_CONTEXT +#ifdef MULTIPLICITY # ifdef USE_ITHREADS PERLVAR(G, my_ctx_mutex, perl_mutex) # endif @@ -205,9 +190,9 @@ PERLVARI(G, veto_cleanup, int, FALSE) /* exit without cleanup */ Function pointer, pointing at a function used to handle extended keywords. The function should be declared as - int keyword_plugin_function(pTHX_ - char *keyword_ptr, STRLEN keyword_len, - OP **op_ptr) + int keyword_plugin_function(pTHX_ + char *keyword_ptr, STRLEN keyword_len, + OP **op_ptr) The function is called from the tokeniser, whenever a possible keyword is seen. C points at the word in the parser's input @@ -320,13 +305,3 @@ PERLVARI(G, strategy_socket, int, 0) /* doio.c */ PERLVARI(G, strategy_accept, int, 0) /* doio.c */ PERLVARI(G, strategy_pipe, int, 0) /* doio.c */ PERLVARI(G, strategy_socketpair, int, 0) /* doio.c */ - -#ifdef PERL_IMPLICIT_CONTEXT -# ifdef PERL_GLOBAL_STRUCT_PRIVATE -/* per-module array of pointers to MY_CXT_KEY constants. - * It simulates each module having a static my_cxt_index var on builds - * which don't allow static vars */ -PERLVARI(G, my_cxt_keys, const char **, NULL) -PERLVARI(G, my_cxt_keys_size, int, 0) /* size of PL_my_cxt_keys */ -# endif -#endif diff --git a/gnu/usr.bin/perl/perly.act b/gnu/usr.bin/perl/perly.act index b2d2e673a3b..200df18298e 100644 --- a/gnu/usr.bin/perl/perly.act +++ b/gnu/usr.bin/perl/perly.act @@ -5,8 +5,8 @@ */ case 2: -#line 121 "perly.y" /* yacc.c:1652 */ - { +#line 140 "perly.y" + { parser->expect = XSTATE; (yyval.ival) = 0; } @@ -14,8 +14,8 @@ case 2: break; case 3: -#line 126 "perly.y" /* yacc.c:1652 */ - { +#line 145 "perly.y" + { newPROG(block_end((ps[-1].val.ival),(ps[0].val.opval))); PL_compiling.cop_seq = 0; (yyval.ival) = 0; @@ -24,8 +24,8 @@ case 2: break; case 4: -#line 132 "perly.y" /* yacc.c:1652 */ - { +#line 151 "perly.y" + { parser->expect = XTERM; (yyval.ival) = 0; } @@ -33,8 +33,8 @@ case 2: break; case 5: -#line 137 "perly.y" /* yacc.c:1652 */ - { +#line 156 "perly.y" + { PL_eval_root = (ps[0].val.opval); (yyval.ival) = 0; } @@ -42,8 +42,8 @@ case 2: break; case 6: -#line 142 "perly.y" /* yacc.c:1652 */ - { +#line 161 "perly.y" + { parser->expect = XBLOCK; (yyval.ival) = 0; } @@ -51,8 +51,8 @@ case 2: break; case 7: -#line 147 "perly.y" /* yacc.c:1652 */ - { +#line 166 "perly.y" + { PL_pad_reset_pending = TRUE; PL_eval_root = (ps[0].val.opval); (yyval.ival) = 0; @@ -63,8 +63,8 @@ case 2: break; case 8: -#line 155 "perly.y" /* yacc.c:1652 */ - { +#line 174 "perly.y" + { parser->expect = XSTATE; (yyval.ival) = 0; } @@ -72,8 +72,8 @@ case 2: break; case 9: -#line 160 "perly.y" /* yacc.c:1652 */ - { +#line 179 "perly.y" + { PL_pad_reset_pending = TRUE; PL_eval_root = (ps[0].val.opval); (yyval.ival) = 0; @@ -84,8 +84,8 @@ case 2: break; case 10: -#line 168 "perly.y" /* yacc.c:1652 */ - { +#line 187 "perly.y" + { parser->expect = XSTATE; (yyval.ival) = 0; } @@ -93,8 +93,8 @@ case 2: break; case 11: -#line 173 "perly.y" /* yacc.c:1652 */ - { +#line 192 "perly.y" + { PL_pad_reset_pending = TRUE; PL_eval_root = (ps[0].val.opval); (yyval.ival) = 0; @@ -105,8 +105,8 @@ case 2: break; case 12: -#line 181 "perly.y" /* yacc.c:1652 */ - { +#line 200 "perly.y" + { parser->expect = XSTATE; (yyval.ival) = 0; } @@ -114,8 +114,8 @@ case 2: break; case 13: -#line 186 "perly.y" /* yacc.c:1652 */ - { +#line 205 "perly.y" + { PL_eval_root = (ps[0].val.opval); (yyval.ival) = 0; } @@ -123,8 +123,8 @@ case 2: break; case 14: -#line 191 "perly.y" /* yacc.c:1652 */ - { +#line 210 "perly.y" + { parser->expect = XSTATE; (yyval.ival) = 0; } @@ -132,8 +132,8 @@ case 2: break; case 15: -#line 196 "perly.y" /* yacc.c:1652 */ - { +#line 215 "perly.y" + { PL_eval_root = (ps[0].val.opval); (yyval.ival) = 0; } @@ -141,8 +141,8 @@ case 2: break; case 16: -#line 204 "perly.y" /* yacc.c:1652 */ - { if (parser->copline > (line_t)(ps[-3].val.ival)) +#line 223 "perly.y" + { if (parser->copline > (line_t)(ps[-3].val.ival)) parser->copline = (line_t)(ps[-3].val.ival); (yyval.opval) = block_end((ps[-2].val.ival), (ps[-1].val.opval)); } @@ -150,46 +150,46 @@ case 2: break; case 17: -#line 212 "perly.y" /* yacc.c:1652 */ - { if (parser->copline > (line_t)(ps[-6].val.ival)) +#line 230 "perly.y" + { (yyval.opval) = NULL; } + + break; + + case 18: +#line 235 "perly.y" + { if (parser->copline > (line_t)(ps[-6].val.ival)) parser->copline = (line_t)(ps[-6].val.ival); (yyval.opval) = block_end((ps[-5].val.ival), (ps[-2].val.opval)); } break; - case 18: -#line 219 "perly.y" /* yacc.c:1652 */ - { (yyval.ival) = block_start(TRUE); + case 19: +#line 242 "perly.y" + { (yyval.ival) = block_start(TRUE); parser->parsed_sub = 0; } break; - case 19: -#line 224 "perly.y" /* yacc.c:1652 */ - { if (parser->copline > (line_t)(ps[-3].val.ival)) + case 20: +#line 247 "perly.y" + { if (parser->copline > (line_t)(ps[-3].val.ival)) parser->copline = (line_t)(ps[-3].val.ival); (yyval.opval) = block_end((ps[-2].val.ival), (ps[-1].val.opval)); } break; - case 20: -#line 231 "perly.y" /* yacc.c:1652 */ - { (yyval.ival) = block_start(FALSE); - parser->parsed_sub = 0; } - - break; - case 21: -#line 237 "perly.y" /* yacc.c:1652 */ - { (yyval.opval) = NULL; } +#line 254 "perly.y" + { (yyval.ival) = block_start(FALSE); + parser->parsed_sub = 0; } break; - case 22: -#line 239 "perly.y" /* yacc.c:1652 */ - { (yyval.opval) = op_append_list(OP_LINESEQ, (ps[-1].val.opval), (ps[0].val.opval)); + case 23: +#line 262 "perly.y" + { (yyval.opval) = op_append_list(OP_LINESEQ, (ps[-1].val.opval), (ps[0].val.opval)); PL_pad_reset_pending = TRUE; if ((ps[-1].val.opval) && (ps[0].val.opval)) PL_hints |= HINT_BLOCK_SCOPE; @@ -197,15 +197,9 @@ case 2: break; - case 23: -#line 248 "perly.y" /* yacc.c:1652 */ - { (yyval.opval) = NULL; } - - break; - - case 24: -#line 250 "perly.y" /* yacc.c:1652 */ - { (yyval.opval) = op_append_list(OP_LINESEQ, (ps[-1].val.opval), (ps[0].val.opval)); + case 25: +#line 273 "perly.y" + { (yyval.opval) = op_append_list(OP_LINESEQ, (ps[-1].val.opval), (ps[0].val.opval)); PL_pad_reset_pending = TRUE; if ((ps[-1].val.opval) && (ps[0].val.opval)) PL_hints |= HINT_BLOCK_SCOPE; @@ -213,23 +207,23 @@ case 2: break; - case 25: -#line 259 "perly.y" /* yacc.c:1652 */ - { + case 26: +#line 282 "perly.y" + { (yyval.opval) = (ps[0].val.opval) ? newSTATEOP(0, NULL, (ps[0].val.opval)) : NULL; } break; - case 26: -#line 263 "perly.y" /* yacc.c:1652 */ - { (yyval.opval) = (ps[0].val.opval); } + case 27: +#line 286 "perly.y" + { (yyval.opval) = (ps[0].val.opval); } break; - case 27: -#line 267 "perly.y" /* yacc.c:1652 */ - { + case 28: +#line 290 "perly.y" + { SV *label = cSVOPx_sv((ps[-1].val.opval)); (yyval.opval) = newSTATEOP(SvFLAGS(label) & SVf_UTF8, savepv(SvPVX_const(label)), (ps[0].val.opval)); @@ -238,9 +232,9 @@ case 2: break; - case 28: -#line 274 "perly.y" /* yacc.c:1652 */ - { + case 29: +#line 297 "perly.y" + { SV *label = cSVOPx_sv((ps[-1].val.opval)); (yyval.opval) = newSTATEOP(SvFLAGS(label) & SVf_UTF8, savepv(SvPVX_const(label)), (ps[0].val.opval)); @@ -249,15 +243,15 @@ case 2: break; - case 29: -#line 284 "perly.y" /* yacc.c:1652 */ - { (yyval.opval) = (ps[0].val.opval); } + case 30: +#line 307 "perly.y" + { (yyval.opval) = (ps[0].val.opval); } break; - case 30: -#line 286 "perly.y" /* yacc.c:1652 */ - { + case 31: +#line 309 "perly.y" + { CV *fmtcv = PL_compcv; newFORM((ps[-2].val.ival), (ps[-1].val.opval), (ps[0].val.opval)); (yyval.opval) = NULL; @@ -269,9 +263,9 @@ case 2: break; - case 31: -#line 298 "perly.y" /* yacc.c:1652 */ - { + case 32: +#line 321 "perly.y" + { init_named_cv(PL_compcv, (ps[-1].val.opval)); parser->in_my = 0; parser->in_my_stash = NULL; @@ -279,9 +273,9 @@ case 2: break; - case 32: -#line 304 "perly.y" /* yacc.c:1652 */ - { + case 33: +#line 327 "perly.y" + { SvREFCNT_inc_simple_void(PL_compcv); (ps[-5].val.opval)->op_type == OP_CONST ? newATTRSUB((ps[-4].val.ival), (ps[-5].val.opval), (ps[-2].val.opval), (ps[-1].val.opval), (ps[0].val.opval)) @@ -294,9 +288,9 @@ case 2: break; - case 33: -#line 319 "perly.y" /* yacc.c:1652 */ - { + case 34: +#line 342 "perly.y" + { init_named_cv(PL_compcv, (ps[-1].val.opval)); parser->in_my = 0; parser->in_my_stash = NULL; @@ -304,9 +298,9 @@ case 2: break; - case 34: -#line 325 "perly.y" /* yacc.c:1652 */ - { + case 35: +#line 348 "perly.y" + { SvREFCNT_inc_simple_void(PL_compcv); (ps[-4].val.opval)->op_type == OP_CONST ? newATTRSUB((ps[-3].val.ival), (ps[-4].val.opval), NULL, (ps[-1].val.opval), (ps[0].val.opval)) @@ -319,9 +313,9 @@ case 2: break; - case 35: -#line 336 "perly.y" /* yacc.c:1652 */ - { + case 36: +#line 359 "perly.y" + { package((ps[-1].val.opval)); if ((ps[-2].val.opval)) package_version((ps[-2].val.opval)); @@ -330,15 +324,15 @@ case 2: break; - case 36: -#line 343 "perly.y" /* yacc.c:1652 */ - { CvSPECIAL_on(PL_compcv); /* It's a BEGIN {} */ } + case 37: +#line 366 "perly.y" + { CvSPECIAL_on(PL_compcv); /* It's a BEGIN {} */ } break; - case 37: -#line 345 "perly.y" /* yacc.c:1652 */ - { + case 38: +#line 368 "perly.y" + { SvREFCNT_inc_simple_void(PL_compcv); utilize((ps[-6].val.ival), (ps[-5].val.ival), (ps[-3].val.opval), (ps[-2].val.opval), (ps[-1].val.opval)); parser->parsed_sub = 1; @@ -347,9 +341,9 @@ case 2: break; - case 38: -#line 352 "perly.y" /* yacc.c:1652 */ - { + case 39: +#line 375 "perly.y" + { (yyval.opval) = block_end((ps[-4].val.ival), newCONDOP(0, (ps[-3].val.opval), op_scope((ps[-1].val.opval)), (ps[0].val.opval))); parser->copline = (line_t)(ps[-6].val.ival); @@ -357,9 +351,9 @@ case 2: break; - case 39: -#line 358 "perly.y" /* yacc.c:1652 */ - { + case 40: +#line 381 "perly.y" + { (yyval.opval) = block_end((ps[-4].val.ival), newCONDOP(0, (ps[-3].val.opval), (ps[0].val.opval), op_scope((ps[-1].val.opval)))); parser->copline = (line_t)(ps[-6].val.ival); @@ -367,30 +361,30 @@ case 2: break; - case 40: -#line 364 "perly.y" /* yacc.c:1652 */ - { + case 41: +#line 387 "perly.y" + { (yyval.opval) = block_end((ps[-3].val.ival), newGIVENOP((ps[-2].val.opval), op_scope((ps[0].val.opval)), 0)); parser->copline = (line_t)(ps[-5].val.ival); } break; - case 41: -#line 369 "perly.y" /* yacc.c:1652 */ - { (yyval.opval) = block_end((ps[-3].val.ival), newWHENOP((ps[-2].val.opval), op_scope((ps[0].val.opval)))); } + case 42: +#line 392 "perly.y" + { (yyval.opval) = block_end((ps[-3].val.ival), newWHENOP((ps[-2].val.opval), op_scope((ps[0].val.opval)))); } break; - case 42: -#line 371 "perly.y" /* yacc.c:1652 */ - { (yyval.opval) = newWHENOP(0, op_scope((ps[0].val.opval))); } + case 43: +#line 394 "perly.y" + { (yyval.opval) = newWHENOP(0, op_scope((ps[0].val.opval))); } break; - case 43: -#line 373 "perly.y" /* yacc.c:1652 */ - { + case 44: +#line 396 "perly.y" + { (yyval.opval) = block_end((ps[-5].val.ival), newWHILEOP(0, 1, NULL, (ps[-4].val.opval), (ps[-1].val.opval), (ps[0].val.opval), (ps[-2].val.ival))); @@ -399,9 +393,9 @@ case 2: break; - case 44: -#line 380 "perly.y" /* yacc.c:1652 */ - { + case 45: +#line 403 "perly.y" + { (yyval.opval) = block_end((ps[-5].val.ival), newWHILEOP(0, 1, NULL, (ps[-4].val.opval), (ps[-1].val.opval), (ps[0].val.opval), (ps[-2].val.ival))); @@ -410,21 +404,21 @@ case 2: break; - case 45: -#line 387 "perly.y" /* yacc.c:1652 */ - { parser->expect = XTERM; } + case 46: +#line 410 "perly.y" + { parser->expect = XTERM; } break; - case 46: -#line 389 "perly.y" /* yacc.c:1652 */ - { parser->expect = XTERM; } + case 47: +#line 412 "perly.y" + { parser->expect = XTERM; } break; - case 47: -#line 392 "perly.y" /* yacc.c:1652 */ - { + case 48: +#line 415 "perly.y" + { OP *initop = (ps[-9].val.opval); OP *forop = newWHILEOP(0, 1, NULL, scalar((ps[-6].val.opval)), (ps[0].val.opval), (ps[-2].val.opval), (ps[-3].val.ival)); @@ -441,18 +435,31 @@ case 2: break; - case 48: -#line 407 "perly.y" /* yacc.c:1652 */ - { + case 49: +#line 430 "perly.y" + { (yyval.opval) = block_end((ps[-6].val.ival), newFOROP(0, (ps[-5].val.opval), (ps[-3].val.opval), (ps[-1].val.opval), (ps[0].val.opval))); parser->copline = (line_t)(ps[-8].val.ival); } break; - case 49: -#line 412 "perly.y" /* yacc.c:1652 */ - { + case 50: +#line 435 "perly.y" + { + if ((ps[-6].val.opval)->op_type == OP_PADSV) + /* degenerate case of 1 var: for my ($x) .... + Flag it so it can be special-cased in newFOROP */ + (ps[-6].val.opval)->op_flags |= OPf_PARENS; + (yyval.opval) = block_end((ps[-8].val.ival), newFOROP(0, (ps[-6].val.opval), (ps[-3].val.opval), (ps[-1].val.opval), (ps[0].val.opval))); + parser->copline = (line_t)(ps[-10].val.ival); + } + + break; + + case 51: +#line 444 "perly.y" + { (yyval.opval) = block_end((ps[-4].val.ival), newFOROP(0, op_lvalue((ps[-6].val.opval), OP_ENTERLOOP), (ps[-3].val.opval), (ps[-1].val.opval), (ps[0].val.opval))); parser->copline = (line_t)(ps[-7].val.ival); @@ -460,15 +467,15 @@ case 2: break; - case 50: -#line 418 "perly.y" /* yacc.c:1652 */ - { parser->in_my = 0; (yyval.opval) = my((ps[0].val.opval)); } + case 52: +#line 450 "perly.y" + { parser->in_my = 0; (yyval.opval) = my((ps[0].val.opval)); } break; - case 51: -#line 420 "perly.y" /* yacc.c:1652 */ - { + case 53: +#line 452 "perly.y" + { (yyval.opval) = block_end( (ps[-7].val.ival), newFOROP(0, @@ -483,9 +490,9 @@ case 2: break; - case 52: -#line 433 "perly.y" /* yacc.c:1652 */ - { + case 54: +#line 465 "perly.y" + { (yyval.opval) = block_end((ps[-4].val.ival), newFOROP( 0, op_lvalue(newUNOP(OP_REFGEN, 0, (ps[-6].val.opval)), @@ -495,9 +502,9 @@ case 2: break; - case 53: -#line 441 "perly.y" /* yacc.c:1652 */ - { + case 55: +#line 473 "perly.y" + { (yyval.opval) = block_end((ps[-4].val.ival), newFOROP(0, NULL, (ps[-3].val.opval), (ps[-1].val.opval), (ps[0].val.opval))); parser->copline = (line_t)(ps[-6].val.ival); @@ -505,9 +512,33 @@ case 2: break; - case 54: -#line 447 "perly.y" /* yacc.c:1652 */ - { + case 56: +#line 479 "perly.y" + { parser->in_my = 1; } + + break; + + case 57: +#line 481 "perly.y" + { parser->in_my = 0; intro_my(); } + + break; + + case 58: +#line 483 "perly.y" + { + (yyval.opval) = newTRYCATCHOP(0, + (ps[-9].val.opval), (ps[-4].val.opval), block_end((ps[-5].val.ival), op_scope((ps[-1].val.opval)))); + if((ps[0].val.opval)) + (yyval.opval) = op_wrap_finally((yyval.opval), (ps[0].val.opval)); + parser->copline = (line_t)(ps[-10].val.ival); + } + + break; + + case 59: +#line 491 "perly.y" + { /* a block is a loop that happens once */ (yyval.opval) = newWHILEOP(0, 1, NULL, NULL, (ps[-1].val.opval), (ps[0].val.opval), 0); @@ -515,9 +546,9 @@ case 2: break; - case 55: -#line 453 "perly.y" /* yacc.c:1652 */ - { + case 60: +#line 497 "perly.y" + { package((ps[-2].val.opval)); if ((ps[-3].val.opval)) { package_version((ps[-3].val.opval)); @@ -526,9 +557,9 @@ case 2: break; - case 56: -#line 460 "perly.y" /* yacc.c:1652 */ - { + case 61: +#line 504 "perly.y" + { /* a block is a loop that happens once */ (yyval.opval) = newWHILEOP(0, 1, NULL, NULL, block_end((ps[-3].val.ival), (ps[-1].val.opval)), NULL, 0); @@ -538,35 +569,43 @@ case 2: break; - case 57: -#line 468 "perly.y" /* yacc.c:1652 */ - { + case 62: +#line 512 "perly.y" + { (yyval.opval) = (ps[-1].val.opval); } break; - case 58: -#line 472 "perly.y" /* yacc.c:1652 */ - { + case 63: +#line 516 "perly.y" + { + (yyval.opval) = newDEFEROP(0, op_scope((ps[0].val.opval))); + } + + break; + + case 64: +#line 520 "perly.y" + { (yyval.opval) = newLISTOP(OP_DIE, 0, newOP(OP_PUSHMARK, 0), newSVOP(OP_CONST, 0, newSVpvs("Unimplemented"))); } break; - case 59: -#line 477 "perly.y" /* yacc.c:1652 */ - { + case 65: +#line 525 "perly.y" + { (yyval.opval) = NULL; parser->copline = NOLINE; } break; - case 60: -#line 485 "perly.y" /* yacc.c:1652 */ - { OP *list; + case 66: +#line 533 "perly.y" + { OP *list; if ((ps[0].val.opval)) { OP *term = (ps[0].val.opval); list = op_append_elem(OP_LIST, (ps[-1].val.opval), term); @@ -583,85 +622,73 @@ case 2: break; - case 61: -#line 502 "perly.y" /* yacc.c:1652 */ - { (yyval.opval) = NULL; } - - break; - - case 62: -#line 504 "perly.y" /* yacc.c:1652 */ - { (yyval.opval) = op_unscope((ps[-1].val.opval)); } + case 68: +#line 552 "perly.y" + { (yyval.opval) = op_unscope((ps[-1].val.opval)); } break; - case 63: -#line 509 "perly.y" /* yacc.c:1652 */ - { (yyval.opval) = NULL; } + case 70: +#line 560 "perly.y" + { (yyval.opval) = NULL; } break; - case 64: -#line 511 "perly.y" /* yacc.c:1652 */ - { (yyval.opval) = (ps[0].val.opval); } + case 71: +#line 562 "perly.y" + { (yyval.opval) = (ps[0].val.opval); } break; - case 65: -#line 513 "perly.y" /* yacc.c:1652 */ - { (yyval.opval) = newLOGOP(OP_AND, 0, (ps[0].val.opval), (ps[-2].val.opval)); } + case 72: +#line 564 "perly.y" + { (yyval.opval) = newLOGOP(OP_AND, 0, (ps[0].val.opval), (ps[-2].val.opval)); } break; - case 66: -#line 515 "perly.y" /* yacc.c:1652 */ - { (yyval.opval) = newLOGOP(OP_OR, 0, (ps[0].val.opval), (ps[-2].val.opval)); } + case 73: +#line 566 "perly.y" + { (yyval.opval) = newLOGOP(OP_OR, 0, (ps[0].val.opval), (ps[-2].val.opval)); } break; - case 67: -#line 517 "perly.y" /* yacc.c:1652 */ - { (yyval.opval) = newLOOPOP(OPf_PARENS, 1, scalar((ps[0].val.opval)), (ps[-2].val.opval)); } + case 74: +#line 568 "perly.y" + { (yyval.opval) = newLOOPOP(OPf_PARENS, 1, scalar((ps[0].val.opval)), (ps[-2].val.opval)); } break; - case 68: -#line 519 "perly.y" /* yacc.c:1652 */ - { (yyval.opval) = newLOOPOP(OPf_PARENS, 1, (ps[0].val.opval), (ps[-2].val.opval)); } + case 75: +#line 570 "perly.y" + { (yyval.opval) = newLOOPOP(OPf_PARENS, 1, (ps[0].val.opval), (ps[-2].val.opval)); } break; - case 69: -#line 521 "perly.y" /* yacc.c:1652 */ - { (yyval.opval) = newFOROP(0, NULL, (ps[0].val.opval), (ps[-2].val.opval), NULL); + case 76: +#line 572 "perly.y" + { (yyval.opval) = newFOROP(0, NULL, (ps[0].val.opval), (ps[-2].val.opval), NULL); parser->copline = (line_t)(ps[-1].val.ival); } break; - case 70: -#line 524 "perly.y" /* yacc.c:1652 */ - { (yyval.opval) = newWHENOP((ps[0].val.opval), op_scope((ps[-2].val.opval))); } - - break; - - case 71: -#line 529 "perly.y" /* yacc.c:1652 */ - { (yyval.opval) = NULL; } + case 77: +#line 575 "perly.y" + { (yyval.opval) = newWHENOP((ps[0].val.opval), op_scope((ps[-2].val.opval))); } break; - case 72: -#line 531 "perly.y" /* yacc.c:1652 */ - { + case 79: +#line 582 "perly.y" + { ((ps[0].val.opval))->op_flags |= OPf_PARENS; (yyval.opval) = op_scope((ps[0].val.opval)); } break; - case 73: -#line 536 "perly.y" /* yacc.c:1652 */ - { parser->copline = (line_t)(ps[-5].val.ival); + case 80: +#line 587 "perly.y" + { parser->copline = (line_t)(ps[-5].val.ival); (yyval.opval) = newCONDOP(0, newSTATEOP(OPf_SPECIAL,NULL,(ps[-3].val.opval)), op_scope((ps[-1].val.opval)), (ps[0].val.opval)); @@ -670,154 +697,136 @@ case 2: break; - case 74: -#line 546 "perly.y" /* yacc.c:1652 */ - { (yyval.opval) = NULL; } + case 82: +#line 599 "perly.y" + { (yyval.opval) = op_scope((ps[0].val.opval)); } break; - case 75: -#line 548 "perly.y" /* yacc.c:1652 */ - { (yyval.opval) = op_scope((ps[0].val.opval)); } + case 83: +#line 604 "perly.y" + { (yyval.opval) = NULL; } break; - case 76: -#line 553 "perly.y" /* yacc.c:1652 */ - { (yyval.ival) = (PL_min_intro_pending && - PL_max_intro_pending >= PL_min_intro_pending); - intro_my(); } + case 84: +#line 606 "perly.y" + { (yyval.opval) = op_scope((ps[0].val.opval)); } break; - case 77: -#line 559 "perly.y" /* yacc.c:1652 */ - { (yyval.opval) = NULL; } + case 85: +#line 611 "perly.y" + { (yyval.ival) = (PL_min_intro_pending && + PL_max_intro_pending >= PL_min_intro_pending); + intro_my(); } break; - case 79: -#line 565 "perly.y" /* yacc.c:1652 */ - { YYSTYPE tmplval; + case 88: +#line 623 "perly.y" + { YYSTYPE tmplval; (void)scan_num("1", &tmplval); (yyval.opval) = tmplval.opval; } break; - case 81: -#line 573 "perly.y" /* yacc.c:1652 */ - { (yyval.opval) = invert(scalar((ps[0].val.opval))); } + case 90: +#line 631 "perly.y" + { (yyval.opval) = invert(scalar((ps[0].val.opval))); } break; - case 82: -#line 578 "perly.y" /* yacc.c:1652 */ - { (yyval.opval) = (ps[0].val.opval); intro_my(); } - - break; - - case 83: -#line 582 "perly.y" /* yacc.c:1652 */ - { (yyval.opval) = (ps[0].val.opval); intro_my(); } + case 91: +#line 636 "perly.y" + { (yyval.opval) = (ps[0].val.opval); intro_my(); } break; - case 84: -#line 585 "perly.y" /* yacc.c:1652 */ - { (yyval.opval) = (ps[0].val.opval); } + case 92: +#line 640 "perly.y" + { (yyval.opval) = (ps[0].val.opval); intro_my(); } break; - case 85: -#line 586 "perly.y" /* yacc.c:1652 */ - { (yyval.opval) = NULL; } + case 93: +#line 643 "perly.y" + { (yyval.opval) = (ps[0].val.opval); } break; - case 86: -#line 590 "perly.y" /* yacc.c:1652 */ - { (yyval.ival) = start_subparse(FALSE, 0); + case 95: +#line 648 "perly.y" + { (yyval.ival) = start_subparse(FALSE, 0); SAVEFREESV(PL_compcv); } break; - case 87: -#line 596 "perly.y" /* yacc.c:1652 */ - { (yyval.ival) = start_subparse(FALSE, CVf_ANON); + case 96: +#line 654 "perly.y" + { (yyval.ival) = start_subparse(FALSE, CVf_ANON); SAVEFREESV(PL_compcv); } break; - case 88: -#line 601 "perly.y" /* yacc.c:1652 */ - { (yyval.ival) = start_subparse(TRUE, 0); + case 97: +#line 659 "perly.y" + { (yyval.ival) = start_subparse(TRUE, 0); SAVEFREESV(PL_compcv); } break; - case 91: -#line 612 "perly.y" /* yacc.c:1652 */ - { (yyval.opval) = NULL; } - - break; - - case 93: -#line 618 "perly.y" /* yacc.c:1652 */ - { (yyval.opval) = NULL; } - - break; - - case 94: -#line 620 "perly.y" /* yacc.c:1652 */ - { (yyval.opval) = (ps[0].val.opval); } + case 103: +#line 678 "perly.y" + { (yyval.opval) = (ps[0].val.opval); } break; - case 95: -#line 622 "perly.y" /* yacc.c:1652 */ - { (yyval.opval) = NULL; } + case 104: +#line 680 "perly.y" + { (yyval.opval) = NULL; } break; - case 96: -#line 627 "perly.y" /* yacc.c:1652 */ - { (yyval.opval) = (ps[0].val.opval); } + case 105: +#line 685 "perly.y" + { (yyval.opval) = (ps[0].val.opval); } break; - case 97: -#line 629 "perly.y" /* yacc.c:1652 */ - { (yyval.opval) = NULL; } + case 106: +#line 687 "perly.y" + { (yyval.opval) = NULL; } break; - case 98: -#line 640 "perly.y" /* yacc.c:1652 */ - { parser->in_my = 0; (yyval.opval) = NULL; } + case 107: +#line 698 "perly.y" + { parser->in_my = 0; (yyval.opval) = NULL; } break; - case 99: -#line 642 "perly.y" /* yacc.c:1652 */ - { parser->in_my = 0; (yyval.opval) = (ps[0].val.opval); } + case 108: +#line 700 "perly.y" + { parser->in_my = 0; (yyval.opval) = (ps[0].val.opval); } break; - case 100: -#line 647 "perly.y" /* yacc.c:1652 */ - { (yyval.ival) = '@'; } + case 109: +#line 705 "perly.y" + { (yyval.ival) = '@'; } break; - case 101: -#line 649 "perly.y" /* yacc.c:1652 */ - { (yyval.ival) = '%'; } + case 110: +#line 707 "perly.y" + { (yyval.ival) = '%'; } break; - case 102: -#line 653 "perly.y" /* yacc.c:1652 */ - { + case 111: +#line 711 "perly.y" + { I32 sigil = (ps[-2].val.ival); OP *var = (ps[-1].val.opval); OP *defexpr = (ps[0].val.opval); @@ -835,27 +844,21 @@ case 2: break; - case 103: -#line 672 "perly.y" /* yacc.c:1652 */ - { (yyval.opval) = NULL; } - - break; - - case 104: -#line 674 "perly.y" /* yacc.c:1652 */ - { (yyval.opval) = newOP(OP_NULL, 0); } + case 113: +#line 732 "perly.y" + { (yyval.opval) = newOP(OP_NULL, 0); } break; - case 105: -#line 676 "perly.y" /* yacc.c:1652 */ - { (yyval.opval) = (ps[0].val.opval); } + case 114: +#line 734 "perly.y" + { (yyval.opval) = (ps[0].val.opval); } break; - case 106: -#line 682 "perly.y" /* yacc.c:1652 */ - { + case 115: +#line 740 "perly.y" + { OP *var = (ps[-1].val.opval); OP *defexpr = (ps[0].val.opval); @@ -918,71 +921,47 @@ case 2: break; - case 107: -#line 747 "perly.y" /* yacc.c:1652 */ - { parser->in_my = KEY_sigvar; (yyval.opval) = (ps[0].val.opval); } + case 116: +#line 805 "perly.y" + { parser->in_my = KEY_sigvar; (yyval.opval) = (ps[0].val.opval); } break; - case 108: -#line 749 "perly.y" /* yacc.c:1652 */ - { parser->in_my = KEY_sigvar; (yyval.opval) = (ps[0].val.opval); } + case 117: +#line 807 "perly.y" + { parser->in_my = KEY_sigvar; (yyval.opval) = (ps[0].val.opval); } break; - case 109: -#line 755 "perly.y" /* yacc.c:1652 */ - { (yyval.opval) = (ps[-1].val.opval); } + case 118: +#line 813 "perly.y" + { (yyval.opval) = (ps[-1].val.opval); } break; - case 110: -#line 757 "perly.y" /* yacc.c:1652 */ - { + case 119: +#line 815 "perly.y" + { (yyval.opval) = op_append_list(OP_LINESEQ, (ps[-2].val.opval), (ps[0].val.opval)); } break; - case 111: -#line 761 "perly.y" /* yacc.c:1652 */ - { (yyval.opval) = (ps[0].val.opval); } - - break; - - case 112: -#line 766 "perly.y" /* yacc.c:1652 */ - { (yyval.opval) = NULL; } - - break; - - case 113: -#line 768 "perly.y" /* yacc.c:1652 */ - { (yyval.opval) = (ps[0].val.opval); } - - break; - - case 114: -#line 772 "perly.y" /* yacc.c:1652 */ - { (yyval.opval) = NULL; } - - break; - - case 115: -#line 774 "perly.y" /* yacc.c:1652 */ - { (yyval.opval) = (ps[0].val.opval); } + case 120: +#line 819 "perly.y" + { (yyval.opval) = (ps[0].val.opval); } break; - case 116: -#line 778 "perly.y" /* yacc.c:1652 */ - { (yyval.opval) = (ps[-1].val.opval); } + case 125: +#line 836 "perly.y" + { (yyval.opval) = (ps[-1].val.opval); } break; - case 117: -#line 781 "perly.y" /* yacc.c:1652 */ - { + case 126: +#line 839 "perly.y" + { ENTER; SAVEIV(parser->sig_elems); SAVEIV(parser->sig_optelems); @@ -995,9 +974,9 @@ case 2: break; - case 118: -#line 792 "perly.y" /* yacc.c:1652 */ - { + case 127: +#line 850 "perly.y" + { OP *sigops = (ps[0].val.opval); struct op_argcheck_aux *aux; OP *check; @@ -1007,10 +986,6 @@ case 2: "subroutine signatures not enabled"); /* We shouldn't get here otherwise */ - Perl_ck_warner_d(aTHX_ - packWARN(WARN_EXPERIMENTAL__SIGNATURES), - "The signatures feature is experimental"); - aux = (struct op_argcheck_aux*) PerlMemShared_malloc( sizeof(struct op_argcheck_aux)); @@ -1038,6 +1013,8 @@ case 2: (yyval.opval) = newUNOP_AUX(OP_ARGCHECK, 0, sigops, NULL); op_null((yyval.opval)); + CvSIGNATURE_on(PL_compcv); + parser->in_my = 0; /* tell the toker that attrributes can follow * this sig, but only so that the toker @@ -1054,21 +1031,15 @@ case 2: break; - case 119: -#line 849 "perly.y" /* yacc.c:1652 */ - { (yyval.opval) = (ps[0].val.opval); } - - break; - - case 120: -#line 850 "perly.y" /* yacc.c:1652 */ - { (yyval.opval) = NULL; } + case 129: +#line 907 "perly.y" + { (yyval.opval) = NULL; } break; - case 121: -#line 856 "perly.y" /* yacc.c:1652 */ - { + case 130: +#line 913 "perly.y" + { if (parser->copline > (line_t)(ps[-2].val.ival)) parser->copline = (line_t)(ps[-2].val.ival); (yyval.opval) = block_end((ps[-3].val.ival), (ps[-1].val.opval)); @@ -1076,21 +1047,15 @@ case 2: break; - case 122: -#line 866 "perly.y" /* yacc.c:1652 */ - { (yyval.opval) = (ps[0].val.opval); } - - break; - - case 123: -#line 867 "perly.y" /* yacc.c:1652 */ - { (yyval.opval) = NULL; } + case 132: +#line 925 "perly.y" + { (yyval.opval) = NULL; } break; - case 124: -#line 871 "perly.y" /* yacc.c:1652 */ - { + case 133: +#line 930 "perly.y" + { if (parser->copline > (line_t)(ps[-2].val.ival)) parser->copline = (line_t)(ps[-2].val.ival); (yyval.opval) = block_end((ps[-4].val.ival), @@ -1099,58 +1064,52 @@ case 2: break; - case 125: -#line 882 "perly.y" /* yacc.c:1652 */ - { (yyval.opval) = newLOGOP(OP_AND, 0, (ps[-2].val.opval), (ps[0].val.opval)); } - - break; - - case 126: -#line 884 "perly.y" /* yacc.c:1652 */ - { (yyval.opval) = newLOGOP((ps[-1].val.ival), 0, (ps[-2].val.opval), (ps[0].val.opval)); } + case 134: +#line 941 "perly.y" + { (yyval.opval) = newLOGOP(OP_AND, 0, (ps[-2].val.opval), (ps[0].val.opval)); } break; - case 127: -#line 886 "perly.y" /* yacc.c:1652 */ - { (yyval.opval) = newLOGOP(OP_DOR, 0, (ps[-2].val.opval), (ps[0].val.opval)); } + case 135: +#line 943 "perly.y" + { (yyval.opval) = newLOGOP((ps[-1].val.ival), 0, (ps[-2].val.opval), (ps[0].val.opval)); } break; - case 129: -#line 892 "perly.y" /* yacc.c:1652 */ - { (yyval.opval) = (ps[-1].val.opval); } + case 137: +#line 949 "perly.y" + { (yyval.opval) = (ps[-1].val.opval); } break; - case 130: -#line 894 "perly.y" /* yacc.c:1652 */ - { + case 138: +#line 951 "perly.y" + { OP* term = (ps[0].val.opval); (yyval.opval) = op_append_elem(OP_LIST, (ps[-2].val.opval), term); } break; - case 132: -#line 903 "perly.y" /* yacc.c:1652 */ - { (yyval.opval) = op_convert_list((ps[-2].val.ival), OPf_STACKED, + case 140: +#line 960 "perly.y" + { (yyval.opval) = op_convert_list((ps[-2].val.ival), OPf_STACKED, op_prepend_elem(OP_LIST, newGVREF((ps[-2].val.ival),(ps[-1].val.opval)), (ps[0].val.opval)) ); } break; - case 133: -#line 907 "perly.y" /* yacc.c:1652 */ - { (yyval.opval) = op_convert_list((ps[-4].val.ival), OPf_STACKED, + case 141: +#line 964 "perly.y" + { (yyval.opval) = op_convert_list((ps[-4].val.ival), OPf_STACKED, op_prepend_elem(OP_LIST, newGVREF((ps[-4].val.ival),(ps[-2].val.opval)), (ps[-1].val.opval)) ); } break; - case 134: -#line 911 "perly.y" /* yacc.c:1652 */ - { (yyval.opval) = op_convert_list(OP_ENTERSUB, OPf_STACKED, + case 142: +#line 968 "perly.y" + { (yyval.opval) = op_convert_list(OP_ENTERSUB, OPf_STACKED, op_append_elem(OP_LIST, op_prepend_elem(OP_LIST, scalar((ps[-5].val.opval)), (ps[-1].val.opval)), newMETHOP(OP_METHOD, 0, (ps[-3].val.opval)))); @@ -1158,18 +1117,18 @@ case 2: break; - case 135: -#line 917 "perly.y" /* yacc.c:1652 */ - { (yyval.opval) = op_convert_list(OP_ENTERSUB, OPf_STACKED, + case 143: +#line 974 "perly.y" + { (yyval.opval) = op_convert_list(OP_ENTERSUB, OPf_STACKED, op_append_elem(OP_LIST, scalar((ps[-2].val.opval)), newMETHOP(OP_METHOD, 0, (ps[0].val.opval)))); } break; - case 136: -#line 922 "perly.y" /* yacc.c:1652 */ - { (yyval.opval) = op_convert_list(OP_ENTERSUB, OPf_STACKED, + case 144: +#line 979 "perly.y" + { (yyval.opval) = op_convert_list(OP_ENTERSUB, OPf_STACKED, op_append_elem(OP_LIST, op_prepend_elem(OP_LIST, (ps[-1].val.opval), (ps[0].val.opval)), newMETHOP(OP_METHOD, 0, (ps[-2].val.opval)))); @@ -1177,9 +1136,9 @@ case 2: break; - case 137: -#line 928 "perly.y" /* yacc.c:1652 */ - { (yyval.opval) = op_convert_list(OP_ENTERSUB, OPf_STACKED, + case 145: +#line 985 "perly.y" + { (yyval.opval) = op_convert_list(OP_ENTERSUB, OPf_STACKED, op_append_elem(OP_LIST, op_prepend_elem(OP_LIST, (ps[-3].val.opval), (ps[-1].val.opval)), newMETHOP(OP_METHOD, 0, (ps[-4].val.opval)))); @@ -1187,97 +1146,97 @@ case 2: break; - case 138: -#line 934 "perly.y" /* yacc.c:1652 */ - { (yyval.opval) = op_convert_list((ps[-1].val.ival), 0, (ps[0].val.opval)); } + case 146: +#line 991 "perly.y" + { (yyval.opval) = op_convert_list((ps[-1].val.ival), 0, (ps[0].val.opval)); } break; - case 139: -#line 936 "perly.y" /* yacc.c:1652 */ - { (yyval.opval) = op_convert_list((ps[-3].val.ival), 0, (ps[-1].val.opval)); } + case 147: +#line 993 "perly.y" + { (yyval.opval) = op_convert_list((ps[-3].val.ival), 0, (ps[-1].val.opval)); } break; - case 140: -#line 938 "perly.y" /* yacc.c:1652 */ - { (yyval.opval) = op_convert_list((ps[-3].val.ival), 0, (ps[-1].val.opval)); } + case 148: +#line 995 "perly.y" + { (yyval.opval) = op_convert_list((ps[-3].val.ival), 0, (ps[-1].val.opval)); } break; - case 141: -#line 940 "perly.y" /* yacc.c:1652 */ - { SvREFCNT_inc_simple_void(PL_compcv); + case 149: +#line 997 "perly.y" + { SvREFCNT_inc_simple_void(PL_compcv); (yyval.opval) = newANONATTRSUB((ps[-1].val.ival), 0, NULL, (ps[0].val.opval)); } break; - case 142: -#line 943 "perly.y" /* yacc.c:1652 */ - { (yyval.opval) = newUNOP(OP_ENTERSUB, OPf_STACKED, + case 150: +#line 1000 "perly.y" + { (yyval.opval) = newUNOP(OP_ENTERSUB, OPf_STACKED, op_append_elem(OP_LIST, op_prepend_elem(OP_LIST, (ps[-1].val.opval), (ps[0].val.opval)), (ps[-4].val.opval))); } break; - case 145: -#line 958 "perly.y" /* yacc.c:1652 */ - { (yyval.opval) = newBINOP(OP_GELEM, 0, (ps[-4].val.opval), scalar((ps[-2].val.opval))); } + case 153: +#line 1015 "perly.y" + { (yyval.opval) = newBINOP(OP_GELEM, 0, (ps[-4].val.opval), scalar((ps[-2].val.opval))); } break; - case 146: -#line 960 "perly.y" /* yacc.c:1652 */ - { (yyval.opval) = newBINOP(OP_AELEM, 0, oopsAV((ps[-3].val.opval)), scalar((ps[-1].val.opval))); + case 154: +#line 1017 "perly.y" + { (yyval.opval) = newBINOP(OP_AELEM, 0, oopsAV((ps[-3].val.opval)), scalar((ps[-1].val.opval))); } break; - case 147: -#line 963 "perly.y" /* yacc.c:1652 */ - { (yyval.opval) = newBINOP(OP_AELEM, 0, + case 155: +#line 1020 "perly.y" + { (yyval.opval) = newBINOP(OP_AELEM, 0, ref(newAVREF((ps[-4].val.opval)),OP_RV2AV), scalar((ps[-1].val.opval))); } break; - case 148: -#line 968 "perly.y" /* yacc.c:1652 */ - { (yyval.opval) = newBINOP(OP_AELEM, 0, + case 156: +#line 1025 "perly.y" + { (yyval.opval) = newBINOP(OP_AELEM, 0, ref(newAVREF((ps[-3].val.opval)),OP_RV2AV), scalar((ps[-1].val.opval))); } break; - case 149: -#line 973 "perly.y" /* yacc.c:1652 */ - { (yyval.opval) = newBINOP(OP_HELEM, 0, oopsHV((ps[-4].val.opval)), jmaybe((ps[-2].val.opval))); + case 157: +#line 1030 "perly.y" + { (yyval.opval) = newBINOP(OP_HELEM, 0, oopsHV((ps[-4].val.opval)), jmaybe((ps[-2].val.opval))); } break; - case 150: -#line 976 "perly.y" /* yacc.c:1652 */ - { (yyval.opval) = newBINOP(OP_HELEM, 0, + case 158: +#line 1033 "perly.y" + { (yyval.opval) = newBINOP(OP_HELEM, 0, ref(newHVREF((ps[-5].val.opval)),OP_RV2HV), jmaybe((ps[-2].val.opval))); } break; - case 151: -#line 980 "perly.y" /* yacc.c:1652 */ - { (yyval.opval) = newBINOP(OP_HELEM, 0, + case 159: +#line 1037 "perly.y" + { (yyval.opval) = newBINOP(OP_HELEM, 0, ref(newHVREF((ps[-4].val.opval)),OP_RV2HV), jmaybe((ps[-2].val.opval))); } break; - case 152: -#line 984 "perly.y" /* yacc.c:1652 */ - { (yyval.opval) = newUNOP(OP_ENTERSUB, OPf_STACKED, + case 160: +#line 1041 "perly.y" + { (yyval.opval) = newUNOP(OP_ENTERSUB, OPf_STACKED, newCVREF(0, scalar((ps[-3].val.opval)))); if (parser->expect == XBLOCK) parser->expect = XOPERATOR; @@ -1285,9 +1244,9 @@ case 2: break; - case 153: -#line 990 "perly.y" /* yacc.c:1652 */ - { (yyval.opval) = newUNOP(OP_ENTERSUB, OPf_STACKED, + case 161: +#line 1047 "perly.y" + { (yyval.opval) = newUNOP(OP_ENTERSUB, OPf_STACKED, op_append_elem(OP_LIST, (ps[-1].val.opval), newCVREF(0, scalar((ps[-4].val.opval))))); if (parser->expect == XBLOCK) @@ -1296,9 +1255,9 @@ case 2: break; - case 154: -#line 998 "perly.y" /* yacc.c:1652 */ - { (yyval.opval) = newUNOP(OP_ENTERSUB, OPf_STACKED, + case 162: +#line 1055 "perly.y" + { (yyval.opval) = newUNOP(OP_ENTERSUB, OPf_STACKED, op_append_elem(OP_LIST, (ps[-1].val.opval), newCVREF(0, scalar((ps[-3].val.opval))))); if (parser->expect == XBLOCK) @@ -1307,9 +1266,9 @@ case 2: break; - case 155: -#line 1005 "perly.y" /* yacc.c:1652 */ - { (yyval.opval) = newUNOP(OP_ENTERSUB, OPf_STACKED, + case 163: +#line 1062 "perly.y" + { (yyval.opval) = newUNOP(OP_ENTERSUB, OPf_STACKED, newCVREF(0, scalar((ps[-2].val.opval)))); if (parser->expect == XBLOCK) parser->expect = XOPERATOR; @@ -1317,387 +1276,369 @@ case 2: break; - case 156: -#line 1011 "perly.y" /* yacc.c:1652 */ - { (yyval.opval) = newSLICEOP(0, (ps[-1].val.opval), (ps[-4].val.opval)); } - - break; - - case 157: -#line 1013 "perly.y" /* yacc.c:1652 */ - { (yyval.opval) = newSLICEOP(0, (ps[-1].val.opval), (ps[-3].val.opval)); } - - break; - - case 158: -#line 1015 "perly.y" /* yacc.c:1652 */ - { (yyval.opval) = newSLICEOP(0, (ps[-1].val.opval), NULL); } - - break; - - case 159: -#line 1020 "perly.y" /* yacc.c:1652 */ - { (yyval.opval) = newASSIGNOP(OPf_STACKED, (ps[-2].val.opval), (ps[-1].val.ival), (ps[0].val.opval)); } - - break; - - case 160: -#line 1022 "perly.y" /* yacc.c:1652 */ - { (yyval.opval) = newBINOP((ps[-1].val.ival), 0, scalar((ps[-2].val.opval)), scalar((ps[0].val.opval))); } - - break; - - case 161: -#line 1024 "perly.y" /* yacc.c:1652 */ - { if ((ps[-1].val.ival) != OP_REPEAT) - scalar((ps[-2].val.opval)); - (yyval.opval) = newBINOP((ps[-1].val.ival), 0, (ps[-2].val.opval), scalar((ps[0].val.opval))); - } - - break; - - case 162: -#line 1029 "perly.y" /* yacc.c:1652 */ - { (yyval.opval) = newBINOP((ps[-1].val.ival), 0, scalar((ps[-2].val.opval)), scalar((ps[0].val.opval))); } - - break; - - case 163: -#line 1031 "perly.y" /* yacc.c:1652 */ - { (yyval.opval) = newBINOP((ps[-1].val.ival), 0, scalar((ps[-2].val.opval)), scalar((ps[0].val.opval))); } - - break; - case 164: -#line 1033 "perly.y" /* yacc.c:1652 */ - { (yyval.opval) = (ps[0].val.opval); } +#line 1068 "perly.y" + { (yyval.opval) = newSLICEOP(0, (ps[-1].val.opval), (ps[-4].val.opval)); } break; case 165: -#line 1035 "perly.y" /* yacc.c:1652 */ - { (yyval.opval) = (ps[0].val.opval); } +#line 1070 "perly.y" + { (yyval.opval) = newSLICEOP(0, (ps[-1].val.opval), (ps[-3].val.opval)); } break; case 166: -#line 1037 "perly.y" /* yacc.c:1652 */ - { (yyval.opval) = newBINOP((ps[-1].val.ival), 0, scalar((ps[-2].val.opval)), scalar((ps[0].val.opval))); } +#line 1072 "perly.y" + { (yyval.opval) = newSLICEOP(0, (ps[-1].val.opval), NULL); } break; case 167: -#line 1039 "perly.y" /* yacc.c:1652 */ - { (yyval.opval) = newBINOP((ps[-1].val.ival), 0, scalar((ps[-2].val.opval)), scalar((ps[0].val.opval))); } +#line 1077 "perly.y" + { (yyval.opval) = newASSIGNOP(OPf_STACKED, (ps[-2].val.opval), (ps[-1].val.ival), (ps[0].val.opval)); } break; case 168: -#line 1041 "perly.y" /* yacc.c:1652 */ - { (yyval.opval) = newRANGE((ps[-1].val.ival), scalar((ps[-2].val.opval)), scalar((ps[0].val.opval))); } +#line 1079 "perly.y" + { (yyval.opval) = newBINOP((ps[-1].val.ival), 0, scalar((ps[-2].val.opval)), scalar((ps[0].val.opval))); } break; case 169: -#line 1043 "perly.y" /* yacc.c:1652 */ - { (yyval.opval) = newLOGOP(OP_AND, 0, (ps[-2].val.opval), (ps[0].val.opval)); } +#line 1081 "perly.y" + { if ((ps[-1].val.ival) != OP_REPEAT) + scalar((ps[-2].val.opval)); + (yyval.opval) = newBINOP((ps[-1].val.ival), 0, (ps[-2].val.opval), scalar((ps[0].val.opval))); + } break; case 170: -#line 1045 "perly.y" /* yacc.c:1652 */ - { (yyval.opval) = newLOGOP(OP_OR, 0, (ps[-2].val.opval), (ps[0].val.opval)); } +#line 1086 "perly.y" + { (yyval.opval) = newBINOP((ps[-1].val.ival), 0, scalar((ps[-2].val.opval)), scalar((ps[0].val.opval))); } break; case 171: -#line 1047 "perly.y" /* yacc.c:1652 */ - { (yyval.opval) = newLOGOP(OP_DOR, 0, (ps[-2].val.opval), (ps[0].val.opval)); } +#line 1088 "perly.y" + { (yyval.opval) = newBINOP((ps[-1].val.ival), 0, scalar((ps[-2].val.opval)), scalar((ps[0].val.opval))); } break; case 172: -#line 1049 "perly.y" /* yacc.c:1652 */ - { (yyval.opval) = bind_match((ps[-1].val.ival), (ps[-2].val.opval), (ps[0].val.opval)); } +#line 1090 "perly.y" + { (yyval.opval) = (ps[0].val.opval); } break; case 173: -#line 1053 "perly.y" /* yacc.c:1652 */ - { (yyval.opval) = cmpchain_finish((ps[0].val.opval)); } +#line 1092 "perly.y" + { (yyval.opval) = (ps[0].val.opval); } break; case 174: -#line 1055 "perly.y" /* yacc.c:1652 */ - { (yyval.opval) = newBINOP((ps[-1].val.ival), 0, scalar((ps[-2].val.opval)), scalar((ps[0].val.opval))); } +#line 1094 "perly.y" + { (yyval.opval) = newBINOP((ps[-1].val.ival), 0, scalar((ps[-2].val.opval)), scalar((ps[0].val.opval))); } break; case 175: -#line 1057 "perly.y" /* yacc.c:1652 */ - { yyerror("syntax error"); YYERROR; } +#line 1096 "perly.y" + { (yyval.opval) = newBINOP((ps[-1].val.ival), 0, scalar((ps[-2].val.opval)), scalar((ps[0].val.opval))); } break; case 176: -#line 1059 "perly.y" /* yacc.c:1652 */ - { yyerror("syntax error"); YYERROR; } +#line 1098 "perly.y" + { (yyval.opval) = newRANGE((ps[-1].val.ival), scalar((ps[-2].val.opval)), scalar((ps[0].val.opval))); } break; case 177: -#line 1063 "perly.y" /* yacc.c:1652 */ - { (yyval.opval) = cmpchain_start((ps[-1].val.ival), (ps[-2].val.opval), (ps[0].val.opval)); } +#line 1100 "perly.y" + { (yyval.opval) = newLOGOP(OP_AND, 0, (ps[-2].val.opval), (ps[0].val.opval)); } break; case 178: -#line 1065 "perly.y" /* yacc.c:1652 */ - { (yyval.opval) = cmpchain_extend((ps[-1].val.ival), (ps[-2].val.opval), (ps[0].val.opval)); } +#line 1102 "perly.y" + { (yyval.opval) = newLOGOP(OP_OR, 0, (ps[-2].val.opval), (ps[0].val.opval)); } break; case 179: -#line 1069 "perly.y" /* yacc.c:1652 */ - { (yyval.opval) = cmpchain_finish((ps[0].val.opval)); } +#line 1104 "perly.y" + { (yyval.opval) = newLOGOP(OP_DOR, 0, (ps[-2].val.opval), (ps[0].val.opval)); } break; case 180: -#line 1071 "perly.y" /* yacc.c:1652 */ - { (yyval.opval) = newBINOP((ps[-1].val.ival), 0, scalar((ps[-2].val.opval)), scalar((ps[0].val.opval))); } +#line 1106 "perly.y" + { (yyval.opval) = bind_match((ps[-1].val.ival), (ps[-2].val.opval), (ps[0].val.opval)); } break; case 181: -#line 1073 "perly.y" /* yacc.c:1652 */ - { yyerror("syntax error"); YYERROR; } +#line 1110 "perly.y" + { (yyval.opval) = cmpchain_finish((ps[0].val.opval)); } break; case 182: -#line 1075 "perly.y" /* yacc.c:1652 */ - { yyerror("syntax error"); YYERROR; } +#line 1112 "perly.y" + { (yyval.opval) = newBINOP((ps[-1].val.ival), 0, scalar((ps[-2].val.opval)), scalar((ps[0].val.opval))); } break; case 183: -#line 1079 "perly.y" /* yacc.c:1652 */ - { (yyval.opval) = cmpchain_start((ps[-1].val.ival), (ps[-2].val.opval), (ps[0].val.opval)); } +#line 1114 "perly.y" + { yyerror("syntax error"); YYERROR; } break; case 184: -#line 1081 "perly.y" /* yacc.c:1652 */ - { (yyval.opval) = cmpchain_extend((ps[-1].val.ival), (ps[-2].val.opval), (ps[0].val.opval)); } +#line 1116 "perly.y" + { yyerror("syntax error"); YYERROR; } break; case 185: -#line 1086 "perly.y" /* yacc.c:1652 */ - { (yyval.opval) = newUNOP(OP_NEGATE, 0, scalar((ps[0].val.opval))); } +#line 1120 "perly.y" + { (yyval.opval) = cmpchain_start((ps[-1].val.ival), (ps[-2].val.opval), (ps[0].val.opval)); } break; case 186: -#line 1088 "perly.y" /* yacc.c:1652 */ - { (yyval.opval) = (ps[0].val.opval); } +#line 1122 "perly.y" + { (yyval.opval) = cmpchain_extend((ps[-1].val.ival), (ps[-2].val.opval), (ps[0].val.opval)); } break; case 187: -#line 1091 "perly.y" /* yacc.c:1652 */ - { (yyval.opval) = newUNOP(OP_NOT, 0, scalar((ps[0].val.opval))); } +#line 1126 "perly.y" + { (yyval.opval) = cmpchain_finish((ps[0].val.opval)); } break; case 188: -#line 1093 "perly.y" /* yacc.c:1652 */ - { (yyval.opval) = newUNOP((ps[-1].val.ival), 0, scalar((ps[0].val.opval))); } +#line 1128 "perly.y" + { (yyval.opval) = newBINOP((ps[-1].val.ival), 0, scalar((ps[-2].val.opval)), scalar((ps[0].val.opval))); } break; case 189: -#line 1095 "perly.y" /* yacc.c:1652 */ - { (yyval.opval) = newUNOP(OP_POSTINC, 0, - op_lvalue(scalar((ps[-1].val.opval)), OP_POSTINC)); } +#line 1130 "perly.y" + { yyerror("syntax error"); YYERROR; } break; case 190: -#line 1098 "perly.y" /* yacc.c:1652 */ - { (yyval.opval) = newUNOP(OP_POSTDEC, 0, - op_lvalue(scalar((ps[-1].val.opval)), OP_POSTDEC));} +#line 1132 "perly.y" + { yyerror("syntax error"); YYERROR; } break; case 191: -#line 1101 "perly.y" /* yacc.c:1652 */ - { (yyval.opval) = op_convert_list(OP_JOIN, 0, - op_append_elem( - OP_LIST, - newSVREF(scalar( - newSVOP(OP_CONST,0, - newSVpvs("\"")) - )), - (ps[-1].val.opval) - )); - } +#line 1136 "perly.y" + { (yyval.opval) = cmpchain_start((ps[-1].val.ival), (ps[-2].val.opval), (ps[0].val.opval)); } break; case 192: -#line 1112 "perly.y" /* yacc.c:1652 */ - { (yyval.opval) = newUNOP(OP_PREINC, 0, - op_lvalue(scalar((ps[0].val.opval)), OP_PREINC)); } +#line 1138 "perly.y" + { (yyval.opval) = cmpchain_extend((ps[-1].val.ival), (ps[-2].val.opval), (ps[0].val.opval)); } break; case 193: -#line 1115 "perly.y" /* yacc.c:1652 */ - { (yyval.opval) = newUNOP(OP_PREDEC, 0, - op_lvalue(scalar((ps[0].val.opval)), OP_PREDEC)); } +#line 1143 "perly.y" + { (yyval.opval) = newUNOP(OP_NEGATE, 0, scalar((ps[0].val.opval))); } break; case 194: -#line 1122 "perly.y" /* yacc.c:1652 */ - { (yyval.opval) = newANONLIST((ps[-1].val.opval)); } +#line 1145 "perly.y" + { (yyval.opval) = (ps[0].val.opval); } break; case 195: -#line 1124 "perly.y" /* yacc.c:1652 */ - { (yyval.opval) = newANONLIST(NULL);} +#line 1148 "perly.y" + { (yyval.opval) = newUNOP(OP_NOT, 0, scalar((ps[0].val.opval))); } break; case 196: -#line 1126 "perly.y" /* yacc.c:1652 */ - { (yyval.opval) = newANONHASH((ps[-2].val.opval)); } +#line 1150 "perly.y" + { (yyval.opval) = newUNOP((ps[-1].val.ival), 0, scalar((ps[0].val.opval))); } break; case 197: -#line 1128 "perly.y" /* yacc.c:1652 */ - { (yyval.opval) = newANONHASH(NULL); } +#line 1152 "perly.y" + { (yyval.opval) = newUNOP(OP_POSTINC, 0, + op_lvalue(scalar((ps[-1].val.opval)), OP_POSTINC)); } break; case 198: -#line 1130 "perly.y" /* yacc.c:1652 */ - { SvREFCNT_inc_simple_void(PL_compcv); - (yyval.opval) = newANONATTRSUB((ps[-3].val.ival), (ps[-2].val.opval), (ps[-1].val.opval), (ps[0].val.opval)); } +#line 1155 "perly.y" + { (yyval.opval) = newUNOP(OP_POSTDEC, 0, + op_lvalue(scalar((ps[-1].val.opval)), OP_POSTDEC));} break; case 199: -#line 1133 "perly.y" /* yacc.c:1652 */ - { SvREFCNT_inc_simple_void(PL_compcv); - (yyval.opval) = newANONATTRSUB((ps[-2].val.ival), NULL, (ps[-1].val.opval), (ps[0].val.opval)); } +#line 1158 "perly.y" + { (yyval.opval) = op_convert_list(OP_JOIN, 0, + op_append_elem( + OP_LIST, + newSVREF(scalar( + newSVOP(OP_CONST,0, + newSVpvs("\"")) + )), + (ps[-1].val.opval) + )); + } break; case 200: -#line 1139 "perly.y" /* yacc.c:1652 */ - { (yyval.opval) = dofile((ps[0].val.opval), (ps[-1].val.ival));} +#line 1169 "perly.y" + { (yyval.opval) = newUNOP(OP_PREINC, 0, + op_lvalue(scalar((ps[0].val.opval)), OP_PREINC)); } break; case 201: -#line 1141 "perly.y" /* yacc.c:1652 */ - { (yyval.opval) = newUNOP(OP_NULL, OPf_SPECIAL, op_scope((ps[0].val.opval)));} +#line 1172 "perly.y" + { (yyval.opval) = newUNOP(OP_PREDEC, 0, + op_lvalue(scalar((ps[0].val.opval)), OP_PREDEC)); } break; - case 206: -#line 1149 "perly.y" /* yacc.c:1652 */ - { (yyval.opval) = newCONDOP(0, (ps[-4].val.opval), (ps[-2].val.opval), (ps[0].val.opval)); } + case 202: +#line 1180 "perly.y" + { (yyval.opval) = newANONLIST((ps[-1].val.opval)); } break; - case 207: -#line 1151 "perly.y" /* yacc.c:1652 */ - { (yyval.opval) = newUNOP(OP_REFGEN, 0, (ps[0].val.opval)); } + case 203: +#line 1182 "perly.y" + { (yyval.opval) = newANONHASH((ps[-2].val.opval)); } break; - case 208: -#line 1153 "perly.y" /* yacc.c:1652 */ - { (yyval.opval) = newUNOP(OP_REFGEN, 0, localize((ps[0].val.opval),1)); } + case 204: +#line 1184 "perly.y" + { SvREFCNT_inc_simple_void(PL_compcv); + (yyval.opval) = newANONATTRSUB((ps[-3].val.ival), (ps[-2].val.opval), (ps[-1].val.opval), (ps[0].val.opval)); } break; - case 209: -#line 1155 "perly.y" /* yacc.c:1652 */ - { (yyval.opval) = (ps[0].val.opval); } + case 205: +#line 1187 "perly.y" + { SvREFCNT_inc_simple_void(PL_compcv); + (yyval.opval) = newANONATTRSUB((ps[-2].val.ival), NULL, (ps[-1].val.opval), (ps[0].val.opval)); } break; - case 210: -#line 1157 "perly.y" /* yacc.c:1652 */ - { (yyval.opval) = localize((ps[0].val.opval),0); } + case 206: +#line 1193 "perly.y" + { (yyval.opval) = dofile((ps[0].val.opval), (ps[-1].val.ival));} break; - case 211: -#line 1159 "perly.y" /* yacc.c:1652 */ - { (yyval.opval) = sawparens((ps[-1].val.opval)); } + case 207: +#line 1195 "perly.y" + { (yyval.opval) = newUNOP(OP_NULL, OPf_SPECIAL, op_scope((ps[0].val.opval)));} break; case 212: -#line 1161 "perly.y" /* yacc.c:1652 */ - { (yyval.opval) = (ps[0].val.opval); } +#line 1203 "perly.y" + { (yyval.opval) = newCONDOP(0, (ps[-4].val.opval), (ps[-2].val.opval), (ps[0].val.opval)); } break; case 213: -#line 1163 "perly.y" /* yacc.c:1652 */ - { (yyval.opval) = sawparens(newNULLLIST()); } +#line 1205 "perly.y" + { (yyval.opval) = newUNOP(OP_REFGEN, 0, (ps[0].val.opval)); } break; case 214: -#line 1165 "perly.y" /* yacc.c:1652 */ - { (yyval.opval) = (ps[0].val.opval); } +#line 1207 "perly.y" + { (yyval.opval) = (ps[0].val.opval); } break; case 215: -#line 1167 "perly.y" /* yacc.c:1652 */ - { (yyval.opval) = (ps[0].val.opval); } +#line 1209 "perly.y" + { (yyval.opval) = localize((ps[0].val.opval),0); } break; case 216: -#line 1169 "perly.y" /* yacc.c:1652 */ - { (yyval.opval) = (ps[0].val.opval); } +#line 1211 "perly.y" + { (yyval.opval) = sawparens((ps[-1].val.opval)); } break; case 217: -#line 1171 "perly.y" /* yacc.c:1652 */ - { (yyval.opval) = (ps[0].val.opval); } +#line 1213 "perly.y" + { (yyval.opval) = (ps[0].val.opval); } break; case 218: -#line 1173 "perly.y" /* yacc.c:1652 */ - { (yyval.opval) = newUNOP(OP_AV2ARYLEN, 0, ref((ps[0].val.opval), OP_AV2ARYLEN));} +#line 1215 "perly.y" + { (yyval.opval) = sawparens(newNULLLIST()); } break; case 219: -#line 1175 "perly.y" /* yacc.c:1652 */ - { (yyval.opval) = (ps[0].val.opval); } +#line 1217 "perly.y" + { (yyval.opval) = (ps[0].val.opval); } break; case 220: -#line 1177 "perly.y" /* yacc.c:1652 */ - { (yyval.opval) = op_prepend_elem(OP_ASLICE, +#line 1219 "perly.y" + { (yyval.opval) = (ps[0].val.opval); } + + break; + + case 221: +#line 1221 "perly.y" + { (yyval.opval) = (ps[0].val.opval); } + + break; + + case 222: +#line 1223 "perly.y" + { (yyval.opval) = (ps[0].val.opval); } + + break; + + case 223: +#line 1225 "perly.y" + { (yyval.opval) = newUNOP(OP_AV2ARYLEN, 0, ref((ps[0].val.opval), OP_AV2ARYLEN));} + + break; + + case 224: +#line 1227 "perly.y" + { (yyval.opval) = (ps[0].val.opval); } + + break; + + case 225: +#line 1229 "perly.y" + { (yyval.opval) = op_prepend_elem(OP_ASLICE, newOP(OP_PUSHMARK, 0), newLISTOP(OP_ASLICE, 0, list((ps[-1].val.opval)), @@ -1709,9 +1650,9 @@ case 2: break; - case 221: -#line 1187 "perly.y" /* yacc.c:1652 */ - { (yyval.opval) = op_prepend_elem(OP_KVASLICE, + case 226: +#line 1239 "perly.y" + { (yyval.opval) = op_prepend_elem(OP_KVASLICE, newOP(OP_PUSHMARK, 0), newLISTOP(OP_KVASLICE, 0, list((ps[-1].val.opval)), @@ -1723,9 +1664,9 @@ case 2: break; - case 222: -#line 1197 "perly.y" /* yacc.c:1652 */ - { (yyval.opval) = op_prepend_elem(OP_HSLICE, + case 227: +#line 1249 "perly.y" + { (yyval.opval) = op_prepend_elem(OP_HSLICE, newOP(OP_PUSHMARK, 0), newLISTOP(OP_HSLICE, 0, list((ps[-2].val.opval)), @@ -1737,9 +1678,9 @@ case 2: break; - case 223: -#line 1207 "perly.y" /* yacc.c:1652 */ - { (yyval.opval) = op_prepend_elem(OP_KVHSLICE, + case 228: +#line 1259 "perly.y" + { (yyval.opval) = op_prepend_elem(OP_KVHSLICE, newOP(OP_PUSHMARK, 0), newLISTOP(OP_KVHSLICE, 0, list((ps[-2].val.opval)), @@ -1751,384 +1692,381 @@ case 2: break; - case 224: -#line 1217 "perly.y" /* yacc.c:1652 */ - { (yyval.opval) = (ps[0].val.opval); } + case 229: +#line 1269 "perly.y" + { (yyval.opval) = (ps[0].val.opval); } break; - case 225: -#line 1219 "perly.y" /* yacc.c:1652 */ - { (yyval.opval) = newUNOP(OP_ENTERSUB, 0, scalar((ps[0].val.opval))); } + case 230: +#line 1271 "perly.y" + { (yyval.opval) = newUNOP(OP_ENTERSUB, 0, scalar((ps[0].val.opval))); } break; - case 226: -#line 1221 "perly.y" /* yacc.c:1652 */ - { (yyval.opval) = newUNOP(OP_ENTERSUB, OPf_STACKED, scalar((ps[-2].val.opval))); + case 231: +#line 1273 "perly.y" + { (yyval.opval) = newUNOP(OP_ENTERSUB, OPf_STACKED, scalar((ps[-2].val.opval))); } break; - case 227: -#line 1224 "perly.y" /* yacc.c:1652 */ - { + case 232: +#line 1276 "perly.y" + { (yyval.opval) = newUNOP(OP_ENTERSUB, OPf_STACKED, op_append_elem(OP_LIST, (ps[-1].val.opval), scalar((ps[-3].val.opval)))); } break; - case 228: -#line 1229 "perly.y" /* yacc.c:1652 */ - { (yyval.opval) = newUNOP(OP_ENTERSUB, OPf_STACKED, + case 233: +#line 1281 "perly.y" + { (yyval.opval) = newUNOP(OP_ENTERSUB, OPf_STACKED, op_append_elem(OP_LIST, (ps[0].val.opval), scalar((ps[-1].val.opval)))); } break; - case 229: -#line 1233 "perly.y" /* yacc.c:1652 */ - { (yyval.opval) = newSVREF((ps[-3].val.opval)); } - - break; - - case 230: -#line 1235 "perly.y" /* yacc.c:1652 */ - { (yyval.opval) = newAVREF((ps[-3].val.opval)); } - - break; - - case 231: -#line 1237 "perly.y" /* yacc.c:1652 */ - { (yyval.opval) = newHVREF((ps[-3].val.opval)); } - - break; - - case 232: -#line 1239 "perly.y" /* yacc.c:1652 */ - { (yyval.opval) = newUNOP(OP_ENTERSUB, 0, - scalar(newCVREF((ps[-1].val.ival),(ps[-3].val.opval)))); } - - break; - - case 233: -#line 1242 "perly.y" /* yacc.c:1652 */ - { (yyval.opval) = newGVREF(0,(ps[-3].val.opval)); } - - break; - case 234: -#line 1244 "perly.y" /* yacc.c:1652 */ - { (yyval.opval) = newOP((ps[0].val.ival), OPf_SPECIAL); - PL_hints |= HINT_BLOCK_SCOPE; } +#line 1285 "perly.y" + { (yyval.opval) = newSVREF((ps[-3].val.opval)); } break; case 235: -#line 1247 "perly.y" /* yacc.c:1652 */ - { (yyval.opval) = newLOOPEX((ps[-1].val.ival),(ps[0].val.opval)); } +#line 1287 "perly.y" + { (yyval.opval) = newAVREF((ps[-3].val.opval)); } break; case 236: -#line 1249 "perly.y" /* yacc.c:1652 */ - { (yyval.opval) = newUNOP(OP_NOT, 0, scalar((ps[0].val.opval))); } +#line 1289 "perly.y" + { (yyval.opval) = newHVREF((ps[-3].val.opval)); } break; case 237: -#line 1251 "perly.y" /* yacc.c:1652 */ - { (yyval.opval) = newOP((ps[0].val.ival), 0); } +#line 1291 "perly.y" + { (yyval.opval) = newUNOP(OP_ENTERSUB, 0, + scalar(newCVREF((ps[-1].val.ival),(ps[-3].val.opval)))); } break; case 238: -#line 1253 "perly.y" /* yacc.c:1652 */ - { (yyval.opval) = newUNOP((ps[-1].val.ival), 0, (ps[0].val.opval)); } +#line 1294 "perly.y" + { (yyval.opval) = newGVREF(0,(ps[-3].val.opval)); } break; case 239: -#line 1255 "perly.y" /* yacc.c:1652 */ - { (yyval.opval) = newUNOP((ps[-1].val.ival), 0, (ps[0].val.opval)); } +#line 1296 "perly.y" + { (yyval.opval) = newOP((ps[0].val.ival), OPf_SPECIAL); + PL_hints |= HINT_BLOCK_SCOPE; } break; case 240: -#line 1257 "perly.y" /* yacc.c:1652 */ - { (yyval.opval) = newOP(OP_REQUIRE, (ps[0].val.ival) ? OPf_SPECIAL : 0); } +#line 1299 "perly.y" + { (yyval.opval) = newLOOPEX((ps[-1].val.ival),(ps[0].val.opval)); } break; case 241: -#line 1259 "perly.y" /* yacc.c:1652 */ - { (yyval.opval) = newUNOP(OP_REQUIRE, (ps[-1].val.ival) ? OPf_SPECIAL : 0, (ps[0].val.opval)); } +#line 1301 "perly.y" + { (yyval.opval) = newUNOP(OP_NOT, 0, scalar((ps[0].val.opval))); } break; case 242: -#line 1261 "perly.y" /* yacc.c:1652 */ - { (yyval.opval) = newUNOP(OP_ENTERSUB, OPf_STACKED, scalar((ps[0].val.opval))); } +#line 1303 "perly.y" + { (yyval.opval) = newOP((ps[0].val.ival), 0); } break; case 243: -#line 1263 "perly.y" /* yacc.c:1652 */ - { (yyval.opval) = newUNOP(OP_ENTERSUB, OPf_STACKED, - op_append_elem(OP_LIST, (ps[0].val.opval), scalar((ps[-1].val.opval)))); } +#line 1305 "perly.y" + { (yyval.opval) = newUNOP((ps[-1].val.ival), 0, (ps[0].val.opval)); } break; case 244: -#line 1266 "perly.y" /* yacc.c:1652 */ - { (yyval.opval) = newOP((ps[0].val.ival), 0); } +#line 1307 "perly.y" + { (yyval.opval) = newUNOP((ps[-1].val.ival), 0, (ps[0].val.opval)); } break; case 245: -#line 1268 "perly.y" /* yacc.c:1652 */ - { (yyval.opval) = newOP((ps[-2].val.ival), 0);} +#line 1309 "perly.y" + { (yyval.opval) = newOP(OP_REQUIRE, (ps[0].val.ival) ? OPf_SPECIAL : 0); } break; case 246: -#line 1270 "perly.y" /* yacc.c:1652 */ - { (yyval.opval) = (ps[0].val.opval); } +#line 1311 "perly.y" + { (yyval.opval) = newUNOP(OP_REQUIRE, (ps[-1].val.ival) ? OPf_SPECIAL : 0, (ps[0].val.opval)); } break; case 247: -#line 1272 "perly.y" /* yacc.c:1652 */ - { (yyval.opval) = (ps[-2].val.opval); } +#line 1313 "perly.y" + { (yyval.opval) = newUNOP(OP_ENTERSUB, OPf_STACKED, scalar((ps[0].val.opval))); } break; case 248: -#line 1274 "perly.y" /* yacc.c:1652 */ - { (yyval.opval) = newUNOP(OP_ENTERSUB, OPf_STACKED, scalar((ps[0].val.opval))); } +#line 1315 "perly.y" + { (yyval.opval) = newUNOP(OP_ENTERSUB, OPf_STACKED, + op_append_elem(OP_LIST, (ps[0].val.opval), scalar((ps[-1].val.opval)))); } break; case 249: -#line 1276 "perly.y" /* yacc.c:1652 */ - { (yyval.opval) = ((ps[-2].val.ival) == OP_NOT) - ? newUNOP((ps[-2].val.ival), 0, newSVOP(OP_CONST, 0, newSViv(0))) - : newOP((ps[-2].val.ival), OPf_SPECIAL); } +#line 1318 "perly.y" + { (yyval.opval) = newOP((ps[0].val.ival), 0); } break; case 250: -#line 1280 "perly.y" /* yacc.c:1652 */ - { (yyval.opval) = newUNOP((ps[-3].val.ival), 0, (ps[-1].val.opval)); } +#line 1320 "perly.y" + { (yyval.opval) = newOP((ps[-2].val.ival), 0);} break; case 251: -#line 1282 "perly.y" /* yacc.c:1652 */ - { - if ( (ps[0].val.opval)->op_type != OP_TRANS - && (ps[0].val.opval)->op_type != OP_TRANSR - && (((PMOP*)(ps[0].val.opval))->op_pmflags & PMf_HAS_CV)) - { - (yyval.ival) = start_subparse(FALSE, CVf_ANON); - SAVEFREESV(PL_compcv); - } else - (yyval.ival) = 0; - } +#line 1322 "perly.y" + { (yyval.opval) = (ps[0].val.opval); } break; case 252: -#line 1293 "perly.y" /* yacc.c:1652 */ - { (yyval.opval) = pmruntime((ps[-5].val.opval), (ps[-2].val.opval), (ps[-1].val.opval), 1, (ps[-4].val.ival)); } +#line 1324 "perly.y" + { (yyval.opval) = (ps[-2].val.opval); } break; - case 256: -#line 1301 "perly.y" /* yacc.c:1652 */ - { (yyval.opval) = my_attrs((ps[-1].val.opval),(ps[0].val.opval)); } + case 253: +#line 1326 "perly.y" + { (yyval.opval) = newUNOP(OP_ENTERSUB, OPf_STACKED, scalar((ps[0].val.opval))); } break; - case 257: -#line 1303 "perly.y" /* yacc.c:1652 */ - { (yyval.opval) = localize((ps[0].val.opval),1); } + case 254: +#line 1328 "perly.y" + { (yyval.opval) = ((ps[-2].val.ival) == OP_NOT) + ? newUNOP((ps[-2].val.ival), 0, newSVOP(OP_CONST, 0, newSViv(0))) + : newOP((ps[-2].val.ival), OPf_SPECIAL); } break; - case 258: -#line 1305 "perly.y" /* yacc.c:1652 */ - { (yyval.opval) = newUNOP(OP_REFGEN, 0, my_attrs((ps[-1].val.opval),(ps[0].val.opval))); } + case 255: +#line 1332 "perly.y" + { (yyval.opval) = newUNOP((ps[-3].val.ival), 0, (ps[-1].val.opval)); } break; - case 259: -#line 1310 "perly.y" /* yacc.c:1652 */ - { (yyval.opval) = sawparens((ps[-1].val.opval)); } + case 256: +#line 1334 "perly.y" + { + if ( (ps[0].val.opval)->op_type != OP_TRANS + && (ps[0].val.opval)->op_type != OP_TRANSR + && (((PMOP*)(ps[0].val.opval))->op_pmflags & PMf_HAS_CV)) + { + (yyval.ival) = start_subparse(FALSE, CVf_ANON); + SAVEFREESV(PL_compcv); + } else + (yyval.ival) = 0; + } break; - case 260: -#line 1312 "perly.y" /* yacc.c:1652 */ - { (yyval.opval) = sawparens(newNULLLIST()); } + case 257: +#line 1345 "perly.y" + { (yyval.opval) = pmruntime((ps[-5].val.opval), (ps[-2].val.opval), (ps[-1].val.opval), 1, (ps[-4].val.ival)); } break; case 261: -#line 1315 "perly.y" /* yacc.c:1652 */ - { (yyval.opval) = (ps[0].val.opval); } +#line 1354 "perly.y" + { (yyval.opval) = my_attrs((ps[-1].val.opval),(ps[0].val.opval)); } break; case 262: -#line 1317 "perly.y" /* yacc.c:1652 */ - { (yyval.opval) = (ps[0].val.opval); } +#line 1356 "perly.y" + { (yyval.opval) = localize((ps[0].val.opval),1); } break; case 263: -#line 1319 "perly.y" /* yacc.c:1652 */ - { (yyval.opval) = (ps[0].val.opval); } +#line 1358 "perly.y" + { (yyval.opval) = newUNOP(OP_REFGEN, 0, my_attrs((ps[-1].val.opval),(ps[0].val.opval))); } break; case 264: -#line 1324 "perly.y" /* yacc.c:1652 */ - { (yyval.opval) = NULL; } +#line 1360 "perly.y" + { (yyval.opval) = newUNOP(OP_REFGEN, 0, localize((ps[0].val.opval),1)); } break; case 265: -#line 1326 "perly.y" /* yacc.c:1652 */ - { (yyval.opval) = (ps[0].val.opval); } +#line 1365 "perly.y" + { (yyval.opval) = sawparens((ps[-1].val.opval)); } break; case 266: -#line 1330 "perly.y" /* yacc.c:1652 */ - { (yyval.opval) = NULL; } +#line 1367 "perly.y" + { (yyval.opval) = sawparens(newNULLLIST()); } break; case 267: -#line 1332 "perly.y" /* yacc.c:1652 */ - { (yyval.opval) = (ps[0].val.opval); } +#line 1370 "perly.y" + { (yyval.opval) = (ps[0].val.opval); } break; case 268: -#line 1336 "perly.y" /* yacc.c:1652 */ - { (yyval.opval) = NULL; } +#line 1372 "perly.y" + { (yyval.opval) = (ps[0].val.opval); } break; case 269: -#line 1338 "perly.y" /* yacc.c:1652 */ - { (yyval.opval) = (ps[0].val.opval); } +#line 1374 "perly.y" + { (yyval.opval) = (ps[0].val.opval); } break; - case 270: -#line 1344 "perly.y" /* yacc.c:1652 */ - { parser->in_my = 0; (yyval.opval) = my((ps[0].val.opval)); } + case 275: +#line 1390 "perly.y" + { (yyval.opval) = (ps[0].val.opval); } break; - case 278: -#line 1361 "perly.y" /* yacc.c:1652 */ - { (yyval.opval) = newCVREF((ps[-1].val.ival),(ps[0].val.opval)); } + case 276: +#line 1396 "perly.y" + { parser->in_my = 0; (yyval.opval) = my((ps[0].val.opval)); } + + break; + + case 277: +#line 1401 "perly.y" + { (yyval.opval) = (ps[-1].val.opval); } break; - case 279: -#line 1365 "perly.y" /* yacc.c:1652 */ - { (yyval.opval) = newSVREF((ps[0].val.opval)); } + case 278: +#line 1403 "perly.y" + { + (yyval.opval) = op_append_elem(OP_LIST, (ps[-2].val.opval), (ps[0].val.opval)); + } break; case 280: -#line 1369 "perly.y" /* yacc.c:1652 */ - { (yyval.opval) = newAVREF((ps[0].val.opval)); +#line 1410 "perly.y" + { parser->in_my = 0; (yyval.opval) = (ps[0].val.opval); } + + break; + + case 288: +#line 1427 "perly.y" + { (yyval.opval) = newCVREF((ps[-1].val.ival),(ps[0].val.opval)); } + + break; + + case 289: +#line 1431 "perly.y" + { (yyval.opval) = newSVREF((ps[0].val.opval)); } + + break; + + case 290: +#line 1435 "perly.y" + { (yyval.opval) = newAVREF((ps[0].val.opval)); if ((yyval.opval)) (yyval.opval)->op_private |= (ps[-1].val.ival); } break; - case 281: -#line 1375 "perly.y" /* yacc.c:1652 */ - { (yyval.opval) = newHVREF((ps[0].val.opval)); + case 291: +#line 1441 "perly.y" + { (yyval.opval) = newHVREF((ps[0].val.opval)); if ((yyval.opval)) (yyval.opval)->op_private |= (ps[-1].val.ival); } break; - case 282: -#line 1381 "perly.y" /* yacc.c:1652 */ - { (yyval.opval) = newAVREF((ps[0].val.opval)); } + case 292: +#line 1447 "perly.y" + { (yyval.opval) = newAVREF((ps[0].val.opval)); } break; - case 283: -#line 1383 "perly.y" /* yacc.c:1652 */ - { (yyval.opval) = newAVREF((ps[-3].val.opval)); } + case 293: +#line 1449 "perly.y" + { (yyval.opval) = newAVREF((ps[-3].val.opval)); } break; - case 284: -#line 1387 "perly.y" /* yacc.c:1652 */ - { (yyval.opval) = newGVREF(0,(ps[0].val.opval)); } + case 294: +#line 1453 "perly.y" + { (yyval.opval) = newGVREF(0,(ps[0].val.opval)); } break; - case 286: -#line 1392 "perly.y" /* yacc.c:1652 */ - { (yyval.opval) = newAVREF((ps[-2].val.opval)); } + case 296: +#line 1458 "perly.y" + { (yyval.opval) = newAVREF((ps[-2].val.opval)); } break; - case 288: -#line 1397 "perly.y" /* yacc.c:1652 */ - { (yyval.opval) = newHVREF((ps[-2].val.opval)); } + case 298: +#line 1463 "perly.y" + { (yyval.opval) = newHVREF((ps[-2].val.opval)); } break; - case 290: -#line 1402 "perly.y" /* yacc.c:1652 */ - { (yyval.opval) = newGVREF(0,(ps[-2].val.opval)); } + case 300: +#line 1468 "perly.y" + { (yyval.opval) = newGVREF(0,(ps[-2].val.opval)); } break; - case 291: -#line 1407 "perly.y" /* yacc.c:1652 */ - { (yyval.opval) = scalar((ps[0].val.opval)); } + case 301: +#line 1473 "perly.y" + { (yyval.opval) = scalar((ps[0].val.opval)); } break; - case 292: -#line 1409 "perly.y" /* yacc.c:1652 */ - { (yyval.opval) = scalar((ps[0].val.opval)); } + case 302: +#line 1475 "perly.y" + { (yyval.opval) = scalar((ps[0].val.opval)); } break; - case 293: -#line 1411 "perly.y" /* yacc.c:1652 */ - { (yyval.opval) = op_scope((ps[0].val.opval)); } + case 303: +#line 1477 "perly.y" + { (yyval.opval) = op_scope((ps[0].val.opval)); } break; - case 294: -#line 1414 "perly.y" /* yacc.c:1652 */ - { (yyval.opval) = (ps[0].val.opval); } + case 304: +#line 1480 "perly.y" + { (yyval.opval) = (ps[0].val.opval); } break; + default: break; /* Generated from: - * e5b801fdebce5c77dd8e644fc5a489cbea6af33db180e771dd9d669b12bbe0cf perly.y - * 0947213b55d0ed11693554bea04987e886cf285f5c14cf9075fa1e7acc3f4061 regen_perly.pl + * 0caf1eb1cc4750131dc71e3a22ead383ed9a123dec61ccd23408ff13441fafde perly.y + * acf1cbfd2545faeaaa58b1cf0cf9d7f98b5be0752eb7a54528ef904a9e2e1ca7 regen_perly.pl * ex: set ro: */ diff --git a/gnu/usr.bin/perl/perly.c b/gnu/usr.bin/perl/perly.c index 41978fa787a..20854ae542b 100644 --- a/gnu/usr.bin/perl/perly.c +++ b/gnu/usr.bin/perl/perly.c @@ -53,6 +53,24 @@ typedef signed char yysigned_char; # define YY_NULLPTR NULL #endif +#ifndef YY_CAST +# ifdef __cplusplus +# define YY_CAST(Type, Val) static_cast (Val) +# define YY_REINTERPRET_CAST(Type, Val) reinterpret_cast (Val) +# else +# define YY_CAST(Type, Val) ((Type) (Val)) +# define YY_REINTERPRET_CAST(Type, Val) ((Type) (Val)) +# endif +#endif + +#ifndef YY_ATTRIBUTE_UNUSED +# if defined __GNUC__ && 2 < __GNUC__ + (7 <= __GNUC_MINOR__) +# define YY_ATTRIBUTE_UNUSED __attribute__ ((__unused__)) +# else +# define YY_ATTRIBUTE_UNUSED +# endif +#endif + /* contains all the parser state tables; auto-generated from perly.y */ #include "perly.tab" @@ -75,15 +93,15 @@ typedef signed char yysigned_char; # define YYDPRINTF(Args) \ do { \ if (yydebug) \ - YYFPRINTF Args; \ + YYFPRINTF Args; \ } while (0) # define YYDSYMPRINTF(Title, Token, Value) \ do { \ if (yydebug) { \ - YYFPRINTF (Perl_debug_log, "%s ", Title); \ - yysymprint (aTHX_ Perl_debug_log, Token, Value); \ - YYFPRINTF (Perl_debug_log, "\n"); \ + YYFPRINTF (Perl_debug_log, "%s ", Title); \ + yysymprint (aTHX_ Perl_debug_log, Token, Value); \ + YYFPRINTF (Perl_debug_log, "\n"); \ } \ } while (0) @@ -96,15 +114,15 @@ yysymprint(pTHX_ PerlIO * const yyoutput, int yytype, const YYSTYPE * const yyva { PERL_UNUSED_CONTEXT; if (yytype < YYNTOKENS) { - YYFPRINTF (yyoutput, "token %s (", yytname[yytype]); + YYFPRINTF (yyoutput, "token %s (", yytname[yytype]); # ifdef YYPRINT - YYPRINT (yyoutput, yytoknum[yytype], *yyvaluep); + YYPRINT (yyoutput, yytoknum[yytype], *yyvaluep); # else - YYFPRINTF (yyoutput, "0x%" UVxf, (UV)yyvaluep->ival); + YYFPRINTF (yyoutput, "0x%" UVxf, (UV)yyvaluep->ival); # endif } else - YYFPRINTF (yyoutput, "nterm %s (", yytname[yytype]); + YYFPRINTF (yyoutput, "nterm %s (", yytname[yytype]); YYFPRINTF (yyoutput, ")"); } @@ -121,36 +139,36 @@ yy_stack_print (pTHX_ const yy_parser *parser) min = parser->ps - 8 + 1; if (min <= parser->stack) - min = parser->stack + 1; + min = parser->stack + 1; PerlIO_printf(Perl_debug_log, "\nindex:"); for (ps = min; ps <= parser->ps; ps++) - PerlIO_printf(Perl_debug_log, " %8d", (int)(ps - parser->stack)); + PerlIO_printf(Perl_debug_log, " %8d", (int)(ps - parser->stack)); PerlIO_printf(Perl_debug_log, "\nstate:"); for (ps = min; ps <= parser->ps; ps++) - PerlIO_printf(Perl_debug_log, " %8d", ps->state); + PerlIO_printf(Perl_debug_log, " %8d", ps->state); PerlIO_printf(Perl_debug_log, "\ntoken:"); for (ps = min; ps <= parser->ps; ps++) - PerlIO_printf(Perl_debug_log, " %8.8s", ps->name); + PerlIO_printf(Perl_debug_log, " %8.8s", ps->name); PerlIO_printf(Perl_debug_log, "\nvalue:"); for (ps = min; ps <= parser->ps; ps++) { - switch (yy_type_tab[yystos[ps->state]]) { - case toketype_opval: - PerlIO_printf(Perl_debug_log, " %8.8s", - ps->val.opval - ? PL_op_name[ps->val.opval->op_type] - : "(Nullop)" - ); - break; - case toketype_ival: - PerlIO_printf(Perl_debug_log, " %8" IVdf, (IV)ps->val.ival); - break; - default: - PerlIO_printf(Perl_debug_log, " %8" UVxf, (UV)ps->val.ival); - } + switch (yy_type_tab[yystos[ps->state]]) { + case toketype_opval: + PerlIO_printf(Perl_debug_log, " %8.8s", + ps->val.opval + ? PL_op_name[ps->val.opval->op_type] + : "(Nullop)" + ); + break; + case toketype_ival: + PerlIO_printf(Perl_debug_log, " %8" IVdf, (IV)ps->val.ival); + break; + default: + PerlIO_printf(Perl_debug_log, " %8" UVxf, (UV)ps->val.ival); + } } PerlIO_printf(Perl_debug_log, "\n\n"); } @@ -158,7 +176,7 @@ yy_stack_print (pTHX_ const yy_parser *parser) # define YY_STACK_PRINT(parser) \ do { \ if (yydebug && DEBUG_v_TEST) \ - yy_stack_print (aTHX_ parser); \ + yy_stack_print (aTHX_ parser); \ } while (0) @@ -172,15 +190,15 @@ yy_reduce_print (pTHX_ int yyrule) int yyi; const unsigned int yylineno = yyrline[yyrule]; YYFPRINTF (Perl_debug_log, "Reducing stack by rule %d (line %u), ", - yyrule - 1, yylineno); + yyrule - 1, yylineno); /* Print the symbols being reduced, and their result. */ #if PERL_BISON_VERSION >= 30000 /* 3.0+ */ for (yyi = 0; yyi < yyr2[yyrule]; yyi++) - YYFPRINTF (Perl_debug_log, "%s ", + YYFPRINTF (Perl_debug_log, "%s ", yytname [yystos[(PL_parser->ps)[yyi + 1 - yyr2[yyrule]].state]]); #else for (yyi = yyprhs[yyrule]; 0 <= yyrhs[yyi]; yyi++) - YYFPRINTF (Perl_debug_log, "%s ", yytname [yyrhs[yyi]]); + YYFPRINTF (Perl_debug_log, "%s ", yytname [yyrhs[yyi]]); #endif YYFPRINTF (Perl_debug_log, "-> %s\n", yytname [yyr1[yyrule]]); } @@ -188,7 +206,7 @@ yy_reduce_print (pTHX_ int yyrule) # define YY_REDUCE_PRINT(Rule) \ do { \ if (yydebug) \ - yy_reduce_print (aTHX_ Rule); \ + yy_reduce_print (aTHX_ Rule); \ } while (0) #else /* !DEBUGGING */ @@ -208,32 +226,32 @@ S_clear_yystack(pTHX_ const yy_parser *parser) int i = 0; if (!parser->stack) - return; + return; YYDPRINTF ((Perl_debug_log, "clearing the parse stack\n")); for (i=0; i< parser->yylen; i++) { - SvREFCNT_dec(ps[-i].compcv); + SvREFCNT_dec(ps[-i].compcv); } ps -= parser->yylen; /* now free whole the stack, including the just-reduced ops */ while (ps > parser->stack) { - LEAVE_SCOPE(ps->savestack_ix); - if (yy_type_tab[yystos[ps->state]] == toketype_opval - && ps->val.opval) - { - if (ps->compcv && (ps->compcv != PL_compcv)) { - PL_compcv = ps->compcv; - PAD_SET_CUR_NOSAVE(CvPADLIST(PL_compcv), 1); - PL_comppad_name = PadlistNAMES(CvPADLIST(PL_compcv)); - } - YYDPRINTF ((Perl_debug_log, "(freeing op)\n")); - op_free(ps->val.opval); - } - SvREFCNT_dec(ps->compcv); - ps--; + LEAVE_SCOPE(ps->savestack_ix); + if (yy_type_tab[yystos[ps->state]] == toketype_opval + && ps->val.opval) + { + if (ps->compcv && (ps->compcv != PL_compcv)) { + PL_compcv = ps->compcv; + PAD_SET_CUR_NOSAVE(CvPADLIST(PL_compcv), 1); + PL_comppad_name = PadlistNAMES(CvPADLIST(PL_compcv)); + } + YYDPRINTF ((Perl_debug_log, "(freeing op)\n")); + op_free(ps->val.opval); + } + SvREFCNT_dec(ps->compcv); + ps--; } Safefree(parser->stack); @@ -247,7 +265,6 @@ S_clear_yystack(pTHX_ const yy_parser *parser) int Perl_yyparse (pTHX_ int gramtype) { - dVAR; int yystate; int yyn; int yyresult; @@ -262,7 +279,7 @@ Perl_yyparse (pTHX_ int gramtype) #define YYPUSHSTACK parser->ps = ++ps /* The variable used to return semantic value and location from the - action routines: ie $$. */ + action routines: ie $$. */ YYSTYPE yyval; YYDPRINTF ((Perl_debug_log, "Starting parse\n")); @@ -280,7 +297,7 @@ Perl_yyparse (pTHX_ int gramtype) /* initialise state for this parse */ parser->yychar = gramtype; - yytoken = YYTRANSLATE(NATIVE_TO_UNI(parser->yychar)); + yytoken = YYTRANSLATE((int)NATIVE_TO_UNI(parser->yychar)); parser->yyerrstatus = 0; parser->yylen = 0; @@ -352,11 +369,11 @@ Perl_yyparse (pTHX_ int gramtype) * characters in that range, but all tokens it returns are * either 0, or above 255. There could be a problem if NULs * weren't 0, or were ever returned as raw chars by yylex() */ - yytoken = YYTRANSLATE(NATIVE_TO_UNI(parser->yychar)); + yytoken = YYTRANSLATE((int)NATIVE_TO_UNI(parser->yychar)); } /* make sure no-one's changed yychar since the last call to yylex */ - assert(yytoken == YYTRANSLATE(NATIVE_TO_UNI(parser->yychar))); + assert(yytoken == YYTRANSLATE((int)NATIVE_TO_UNI(parser->yychar))); YYDSYMPRINTF("lookahead token is", yytoken, &parser->yylval); @@ -575,7 +592,7 @@ Perl_yyparse (pTHX_ int gramtype) yyacceptlab: yyresult = 0; for (ps=parser->ps; ps > parser->stack; ps--) { - SvREFCNT_dec(ps->compcv); + SvREFCNT_dec(ps->compcv); } parser->ps = parser->stack; /* disable cleanup */ goto yyreturn; diff --git a/gnu/usr.bin/perl/perly.h b/gnu/usr.bin/perl/perly.h index 45cb6ba1216..d5a45b2a9c1 100644 --- a/gnu/usr.bin/perl/perly.h +++ b/gnu/usr.bin/perl/perly.h @@ -4,14 +4,14 @@ Any changes made here will be lost! */ -#define PERL_BISON_VERSION 30003 +#define PERL_BISON_VERSION 30006 #ifdef PERL_CORE -/* A Bison parser, made by GNU Bison 3.3.2. */ +/* A Bison parser, made by GNU Bison 3.6.4. */ /* Bison interface for Yacc-like parsers in C - Copyright (C) 1984, 1989-1990, 2000-2015, 2018-2019 Free Software Foundation, + Copyright (C) 1984, 1989-1990, 2000-2015, 2018-2020 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify @@ -40,8 +40,9 @@ This special exception was added by the Free Software Foundation in version 2.2 of Bison. */ -/* Undocumented macros, especially those whose name start with YY_, - are private implementation details. Do not rely on them. */ +/* DO NOT RELY ON FEATURES THAT ARE NOT DOCUMENTED in the manual, + especially those whose name start with YY_ or yy_. They are + private implementation details that can be changed or removed. */ /* Debug traces. */ #ifndef YYDEBUG @@ -51,99 +52,129 @@ extern int yydebug; #endif -/* Token type. */ +/* Token kinds. */ #ifndef YYTOKENTYPE # define YYTOKENTYPE enum yytokentype { - GRAMPROG = 258, - GRAMEXPR = 259, - GRAMBLOCK = 260, - GRAMBARESTMT = 261, - GRAMFULLSTMT = 262, - GRAMSTMTSEQ = 263, - GRAMSUBSIGNATURE = 264, - BAREWORD = 265, - METHOD = 266, - FUNCMETH = 267, - THING = 268, - PMFUNC = 269, - PRIVATEREF = 270, - QWLIST = 271, - FUNC0OP = 272, - FUNC0SUB = 273, - UNIOPSUB = 274, - LSTOPSUB = 275, - PLUGEXPR = 276, - PLUGSTMT = 277, - LABEL = 278, - FORMAT = 279, - SUB = 280, - SIGSUB = 281, - ANONSUB = 282, - ANON_SIGSUB = 283, - PACKAGE = 284, - USE = 285, - WHILE = 286, - UNTIL = 287, - IF = 288, - UNLESS = 289, - ELSE = 290, - ELSIF = 291, - CONTINUE = 292, - FOR = 293, - GIVEN = 294, - WHEN = 295, - DEFAULT = 296, - LOOPEX = 297, - DOTDOT = 298, - YADAYADA = 299, - FUNC0 = 300, - FUNC1 = 301, - FUNC = 302, - UNIOP = 303, - LSTOP = 304, - MULOP = 305, - ADDOP = 306, - DOLSHARP = 307, - DO = 308, - HASHBRACK = 309, - NOAMP = 310, - LOCAL = 311, - MY = 312, - REQUIRE = 313, - COLONATTR = 314, - FORMLBRACK = 315, - FORMRBRACK = 316, - SUBLEXSTART = 317, - SUBLEXEND = 318, - PREC_LOW = 319, - OROP = 320, - DOROP = 321, - ANDOP = 322, - NOTOP = 323, - ASSIGNOP = 324, - OROR = 325, - DORDOR = 326, - ANDAND = 327, - BITOROP = 328, - BITANDOP = 329, - CHEQOP = 330, - NCEQOP = 331, - CHRELOP = 332, - NCRELOP = 333, - SHIFTOP = 334, - MATCHOP = 335, - UMINUS = 336, - REFGEN = 337, - POWOP = 338, - PREINC = 339, - PREDEC = 340, - POSTINC = 341, - POSTDEC = 342, - POSTJOIN = 343, - ARROW = 344 + YYEMPTY = -2, + YYEOF = 0, /* "end of file" */ + YYerror = 256, /* error */ + YYUNDEF = 257, /* "invalid token" */ + GRAMPROG = 258, /* GRAMPROG */ + GRAMEXPR = 259, /* GRAMEXPR */ + GRAMBLOCK = 260, /* GRAMBLOCK */ + GRAMBARESTMT = 261, /* GRAMBARESTMT */ + GRAMFULLSTMT = 262, /* GRAMFULLSTMT */ + GRAMSTMTSEQ = 263, /* GRAMSTMTSEQ */ + GRAMSUBSIGNATURE = 264, /* GRAMSUBSIGNATURE */ + PERLY_AMPERSAND = 265, /* PERLY_AMPERSAND */ + PERLY_BRACE_OPEN = 266, /* PERLY_BRACE_OPEN */ + PERLY_BRACE_CLOSE = 267, /* PERLY_BRACE_CLOSE */ + PERLY_BRACKET_OPEN = 268, /* PERLY_BRACKET_OPEN */ + PERLY_BRACKET_CLOSE = 269, /* PERLY_BRACKET_CLOSE */ + PERLY_COMMA = 270, /* PERLY_COMMA */ + PERLY_DOLLAR = 271, /* PERLY_DOLLAR */ + PERLY_DOT = 272, /* PERLY_DOT */ + PERLY_EQUAL_SIGN = 273, /* PERLY_EQUAL_SIGN */ + PERLY_MINUS = 274, /* PERLY_MINUS */ + PERLY_PERCENT_SIGN = 275, /* PERLY_PERCENT_SIGN */ + PERLY_PLUS = 276, /* PERLY_PLUS */ + PERLY_SEMICOLON = 277, /* PERLY_SEMICOLON */ + PERLY_SLASH = 278, /* PERLY_SLASH */ + PERLY_SNAIL = 279, /* PERLY_SNAIL */ + PERLY_STAR = 280, /* PERLY_STAR */ + BAREWORD = 281, /* BAREWORD */ + METHOD = 282, /* METHOD */ + FUNCMETH = 283, /* FUNCMETH */ + THING = 284, /* THING */ + PMFUNC = 285, /* PMFUNC */ + PRIVATEREF = 286, /* PRIVATEREF */ + QWLIST = 287, /* QWLIST */ + FUNC0OP = 288, /* FUNC0OP */ + FUNC0SUB = 289, /* FUNC0SUB */ + UNIOPSUB = 290, /* UNIOPSUB */ + LSTOPSUB = 291, /* LSTOPSUB */ + PLUGEXPR = 292, /* PLUGEXPR */ + PLUGSTMT = 293, /* PLUGSTMT */ + LABEL = 294, /* LABEL */ + FORMAT = 295, /* FORMAT */ + SUB = 296, /* SUB */ + SIGSUB = 297, /* SIGSUB */ + ANONSUB = 298, /* ANONSUB */ + ANON_SIGSUB = 299, /* ANON_SIGSUB */ + PACKAGE = 300, /* PACKAGE */ + USE = 301, /* USE */ + WHILE = 302, /* WHILE */ + UNTIL = 303, /* UNTIL */ + IF = 304, /* IF */ + UNLESS = 305, /* UNLESS */ + ELSE = 306, /* ELSE */ + ELSIF = 307, /* ELSIF */ + CONTINUE = 308, /* CONTINUE */ + FOR = 309, /* FOR */ + GIVEN = 310, /* GIVEN */ + WHEN = 311, /* WHEN */ + DEFAULT = 312, /* DEFAULT */ + TRY = 313, /* TRY */ + CATCH = 314, /* CATCH */ + FINALLY = 315, /* FINALLY */ + LOOPEX = 316, /* LOOPEX */ + DOTDOT = 317, /* DOTDOT */ + YADAYADA = 318, /* YADAYADA */ + FUNC0 = 319, /* FUNC0 */ + FUNC1 = 320, /* FUNC1 */ + FUNC = 321, /* FUNC */ + UNIOP = 322, /* UNIOP */ + LSTOP = 323, /* LSTOP */ + MULOP = 324, /* MULOP */ + ADDOP = 325, /* ADDOP */ + DOLSHARP = 326, /* DOLSHARP */ + DO = 327, /* DO */ + HASHBRACK = 328, /* HASHBRACK */ + NOAMP = 329, /* NOAMP */ + LOCAL = 330, /* LOCAL */ + MY = 331, /* MY */ + REQUIRE = 332, /* REQUIRE */ + COLONATTR = 333, /* COLONATTR */ + FORMLBRACK = 334, /* FORMLBRACK */ + FORMRBRACK = 335, /* FORMRBRACK */ + SUBLEXSTART = 336, /* SUBLEXSTART */ + SUBLEXEND = 337, /* SUBLEXEND */ + DEFER = 338, /* DEFER */ + PREC_LOW = 339, /* PREC_LOW */ + OROP = 340, /* OROP */ + ANDOP = 341, /* ANDOP */ + NOTOP = 342, /* NOTOP */ + ASSIGNOP = 343, /* ASSIGNOP */ + PERLY_QUESTION_MARK = 344, /* PERLY_QUESTION_MARK */ + PERLY_COLON = 345, /* PERLY_COLON */ + OROR = 346, /* OROR */ + DORDOR = 347, /* DORDOR */ + ANDAND = 348, /* ANDAND */ + BITOROP = 349, /* BITOROP */ + BITANDOP = 350, /* BITANDOP */ + CHEQOP = 351, /* CHEQOP */ + NCEQOP = 352, /* NCEQOP */ + CHRELOP = 353, /* CHRELOP */ + NCRELOP = 354, /* NCRELOP */ + SHIFTOP = 355, /* SHIFTOP */ + MATCHOP = 356, /* MATCHOP */ + PERLY_EXCLAMATION_MARK = 357, /* PERLY_EXCLAMATION_MARK */ + PERLY_TILDE = 358, /* PERLY_TILDE */ + UMINUS = 359, /* UMINUS */ + REFGEN = 360, /* REFGEN */ + POWOP = 361, /* POWOP */ + PREINC = 362, /* PREINC */ + PREDEC = 363, /* PREDEC */ + POSTINC = 364, /* POSTINC */ + POSTDEC = 365, /* POSTDEC */ + POSTJOIN = 366, /* POSTJOIN */ + ARROW = 367, /* ARROW */ + PERLY_PAREN_CLOSE = 368, /* PERLY_PAREN_CLOSE */ + PERLY_PAREN_OPEN = 369 /* PERLY_PAREN_OPEN */ }; + typedef enum yytokentype yytoken_kind_t; #endif /* Value type. */ @@ -172,7 +203,6 @@ S_is_opval_token(int type) { #endif /* PERL_IN_TOKE_C */ #endif /* PERL_CORE */ #if ! defined YYSTYPE && ! defined YYSTYPE_IS_DECLARED - union YYSTYPE { @@ -182,8 +212,8 @@ union YYSTYPE OP *opval; GV *gvval; -}; +}; typedef union YYSTYPE YYSTYPE; # define YYSTYPE_IS_TRIVIAL 1 # define YYSTYPE_IS_DECLARED 1 @@ -195,6 +225,6 @@ int yyparse (void); /* Generated from: - * e5b801fdebce5c77dd8e644fc5a489cbea6af33db180e771dd9d669b12bbe0cf perly.y - * 0947213b55d0ed11693554bea04987e886cf285f5c14cf9075fa1e7acc3f4061 regen_perly.pl + * 0caf1eb1cc4750131dc71e3a22ead383ed9a123dec61ccd23408ff13441fafde perly.y + * acf1cbfd2545faeaaa58b1cf0cf9d7f98b5be0752eb7a54528ef904a9e2e1ca7 regen_perly.pl * ex: set ro: */ diff --git a/gnu/usr.bin/perl/perly.tab b/gnu/usr.bin/perl/perly.tab index 4152221b33b..5312210c79a 100644 --- a/gnu/usr.bin/perl/perly.tab +++ b/gnu/usr.bin/perl/perly.tab @@ -4,44 +4,274 @@ Any changes made here will be lost! */ +/* Symbol kind. */ +enum yysymbol_kind_t +{ + YYSYMBOL_YYEMPTY = -2, + YYSYMBOL_YYEOF = 0, /* "end of file" */ + YYSYMBOL_YYerror = 1, /* error */ + YYSYMBOL_YYUNDEF = 2, /* "invalid token" */ + YYSYMBOL_GRAMPROG = 3, /* GRAMPROG */ + YYSYMBOL_GRAMEXPR = 4, /* GRAMEXPR */ + YYSYMBOL_GRAMBLOCK = 5, /* GRAMBLOCK */ + YYSYMBOL_GRAMBARESTMT = 6, /* GRAMBARESTMT */ + YYSYMBOL_GRAMFULLSTMT = 7, /* GRAMFULLSTMT */ + YYSYMBOL_GRAMSTMTSEQ = 8, /* GRAMSTMTSEQ */ + YYSYMBOL_GRAMSUBSIGNATURE = 9, /* GRAMSUBSIGNATURE */ + YYSYMBOL_PERLY_AMPERSAND = 10, /* PERLY_AMPERSAND */ + YYSYMBOL_PERLY_BRACE_OPEN = 11, /* PERLY_BRACE_OPEN */ + YYSYMBOL_PERLY_BRACE_CLOSE = 12, /* PERLY_BRACE_CLOSE */ + YYSYMBOL_PERLY_BRACKET_OPEN = 13, /* PERLY_BRACKET_OPEN */ + YYSYMBOL_PERLY_BRACKET_CLOSE = 14, /* PERLY_BRACKET_CLOSE */ + YYSYMBOL_PERLY_COMMA = 15, /* PERLY_COMMA */ + YYSYMBOL_PERLY_DOLLAR = 16, /* PERLY_DOLLAR */ + YYSYMBOL_PERLY_DOT = 17, /* PERLY_DOT */ + YYSYMBOL_PERLY_EQUAL_SIGN = 18, /* PERLY_EQUAL_SIGN */ + YYSYMBOL_PERLY_MINUS = 19, /* PERLY_MINUS */ + YYSYMBOL_PERLY_PERCENT_SIGN = 20, /* PERLY_PERCENT_SIGN */ + YYSYMBOL_PERLY_PLUS = 21, /* PERLY_PLUS */ + YYSYMBOL_PERLY_SEMICOLON = 22, /* PERLY_SEMICOLON */ + YYSYMBOL_PERLY_SLASH = 23, /* PERLY_SLASH */ + YYSYMBOL_PERLY_SNAIL = 24, /* PERLY_SNAIL */ + YYSYMBOL_PERLY_STAR = 25, /* PERLY_STAR */ + YYSYMBOL_BAREWORD = 26, /* BAREWORD */ + YYSYMBOL_METHOD = 27, /* METHOD */ + YYSYMBOL_FUNCMETH = 28, /* FUNCMETH */ + YYSYMBOL_THING = 29, /* THING */ + YYSYMBOL_PMFUNC = 30, /* PMFUNC */ + YYSYMBOL_PRIVATEREF = 31, /* PRIVATEREF */ + YYSYMBOL_QWLIST = 32, /* QWLIST */ + YYSYMBOL_FUNC0OP = 33, /* FUNC0OP */ + YYSYMBOL_FUNC0SUB = 34, /* FUNC0SUB */ + YYSYMBOL_UNIOPSUB = 35, /* UNIOPSUB */ + YYSYMBOL_LSTOPSUB = 36, /* LSTOPSUB */ + YYSYMBOL_PLUGEXPR = 37, /* PLUGEXPR */ + YYSYMBOL_PLUGSTMT = 38, /* PLUGSTMT */ + YYSYMBOL_LABEL = 39, /* LABEL */ + YYSYMBOL_FORMAT = 40, /* FORMAT */ + YYSYMBOL_SUB = 41, /* SUB */ + YYSYMBOL_SIGSUB = 42, /* SIGSUB */ + YYSYMBOL_ANONSUB = 43, /* ANONSUB */ + YYSYMBOL_ANON_SIGSUB = 44, /* ANON_SIGSUB */ + YYSYMBOL_PACKAGE = 45, /* PACKAGE */ + YYSYMBOL_USE = 46, /* USE */ + YYSYMBOL_WHILE = 47, /* WHILE */ + YYSYMBOL_UNTIL = 48, /* UNTIL */ + YYSYMBOL_IF = 49, /* IF */ + YYSYMBOL_UNLESS = 50, /* UNLESS */ + YYSYMBOL_ELSE = 51, /* ELSE */ + YYSYMBOL_ELSIF = 52, /* ELSIF */ + YYSYMBOL_CONTINUE = 53, /* CONTINUE */ + YYSYMBOL_FOR = 54, /* FOR */ + YYSYMBOL_GIVEN = 55, /* GIVEN */ + YYSYMBOL_WHEN = 56, /* WHEN */ + YYSYMBOL_DEFAULT = 57, /* DEFAULT */ + YYSYMBOL_TRY = 58, /* TRY */ + YYSYMBOL_CATCH = 59, /* CATCH */ + YYSYMBOL_FINALLY = 60, /* FINALLY */ + YYSYMBOL_LOOPEX = 61, /* LOOPEX */ + YYSYMBOL_DOTDOT = 62, /* DOTDOT */ + YYSYMBOL_YADAYADA = 63, /* YADAYADA */ + YYSYMBOL_FUNC0 = 64, /* FUNC0 */ + YYSYMBOL_FUNC1 = 65, /* FUNC1 */ + YYSYMBOL_FUNC = 66, /* FUNC */ + YYSYMBOL_UNIOP = 67, /* UNIOP */ + YYSYMBOL_LSTOP = 68, /* LSTOP */ + YYSYMBOL_MULOP = 69, /* MULOP */ + YYSYMBOL_ADDOP = 70, /* ADDOP */ + YYSYMBOL_DOLSHARP = 71, /* DOLSHARP */ + YYSYMBOL_DO = 72, /* DO */ + YYSYMBOL_HASHBRACK = 73, /* HASHBRACK */ + YYSYMBOL_NOAMP = 74, /* NOAMP */ + YYSYMBOL_LOCAL = 75, /* LOCAL */ + YYSYMBOL_MY = 76, /* MY */ + YYSYMBOL_REQUIRE = 77, /* REQUIRE */ + YYSYMBOL_COLONATTR = 78, /* COLONATTR */ + YYSYMBOL_FORMLBRACK = 79, /* FORMLBRACK */ + YYSYMBOL_FORMRBRACK = 80, /* FORMRBRACK */ + YYSYMBOL_SUBLEXSTART = 81, /* SUBLEXSTART */ + YYSYMBOL_SUBLEXEND = 82, /* SUBLEXEND */ + YYSYMBOL_DEFER = 83, /* DEFER */ + YYSYMBOL_PREC_LOW = 84, /* PREC_LOW */ + YYSYMBOL_OROP = 85, /* OROP */ + YYSYMBOL_ANDOP = 86, /* ANDOP */ + YYSYMBOL_NOTOP = 87, /* NOTOP */ + YYSYMBOL_ASSIGNOP = 88, /* ASSIGNOP */ + YYSYMBOL_PERLY_QUESTION_MARK = 89, /* PERLY_QUESTION_MARK */ + YYSYMBOL_PERLY_COLON = 90, /* PERLY_COLON */ + YYSYMBOL_OROR = 91, /* OROR */ + YYSYMBOL_DORDOR = 92, /* DORDOR */ + YYSYMBOL_ANDAND = 93, /* ANDAND */ + YYSYMBOL_BITOROP = 94, /* BITOROP */ + YYSYMBOL_BITANDOP = 95, /* BITANDOP */ + YYSYMBOL_CHEQOP = 96, /* CHEQOP */ + YYSYMBOL_NCEQOP = 97, /* NCEQOP */ + YYSYMBOL_CHRELOP = 98, /* CHRELOP */ + YYSYMBOL_NCRELOP = 99, /* NCRELOP */ + YYSYMBOL_SHIFTOP = 100, /* SHIFTOP */ + YYSYMBOL_MATCHOP = 101, /* MATCHOP */ + YYSYMBOL_PERLY_EXCLAMATION_MARK = 102, /* PERLY_EXCLAMATION_MARK */ + YYSYMBOL_PERLY_TILDE = 103, /* PERLY_TILDE */ + YYSYMBOL_UMINUS = 104, /* UMINUS */ + YYSYMBOL_REFGEN = 105, /* REFGEN */ + YYSYMBOL_POWOP = 106, /* POWOP */ + YYSYMBOL_PREINC = 107, /* PREINC */ + YYSYMBOL_PREDEC = 108, /* PREDEC */ + YYSYMBOL_POSTINC = 109, /* POSTINC */ + YYSYMBOL_POSTDEC = 110, /* POSTDEC */ + YYSYMBOL_POSTJOIN = 111, /* POSTJOIN */ + YYSYMBOL_ARROW = 112, /* ARROW */ + YYSYMBOL_PERLY_PAREN_CLOSE = 113, /* PERLY_PAREN_CLOSE */ + YYSYMBOL_PERLY_PAREN_OPEN = 114, /* PERLY_PAREN_OPEN */ + YYSYMBOL_YYACCEPT = 115, /* $accept */ + YYSYMBOL_grammar = 116, /* grammar */ + YYSYMBOL_117_1 = 117, /* @1 */ + YYSYMBOL_118_2 = 118, /* @2 */ + YYSYMBOL_119_3 = 119, /* @3 */ + YYSYMBOL_120_4 = 120, /* @4 */ + YYSYMBOL_121_5 = 121, /* @5 */ + YYSYMBOL_122_6 = 122, /* @6 */ + YYSYMBOL_123_7 = 123, /* @7 */ + YYSYMBOL_block = 124, /* block */ + YYSYMBOL_empty = 125, /* empty */ + YYSYMBOL_formblock = 126, /* formblock */ + YYSYMBOL_remember = 127, /* remember */ + YYSYMBOL_mblock = 128, /* mblock */ + YYSYMBOL_mremember = 129, /* mremember */ + YYSYMBOL_stmtseq = 130, /* stmtseq */ + YYSYMBOL_formstmtseq = 131, /* formstmtseq */ + YYSYMBOL_fullstmt = 132, /* fullstmt */ + YYSYMBOL_labfullstmt = 133, /* labfullstmt */ + YYSYMBOL_barestmt = 134, /* barestmt */ + YYSYMBOL_135_8 = 135, /* $@8 */ + YYSYMBOL_136_9 = 136, /* $@9 */ + YYSYMBOL_137_10 = 137, /* $@10 */ + YYSYMBOL_138_11 = 138, /* $@11 */ + YYSYMBOL_139_12 = 139, /* $@12 */ + YYSYMBOL_140_13 = 140, /* @13 */ + YYSYMBOL_141_14 = 141, /* $@14 */ + YYSYMBOL_142_15 = 142, /* $@15 */ + YYSYMBOL_143_16 = 143, /* $@16 */ + YYSYMBOL_formline = 144, /* formline */ + YYSYMBOL_formarg = 145, /* formarg */ + YYSYMBOL_condition = 146, /* condition */ + YYSYMBOL_sideff = 147, /* sideff */ + YYSYMBOL_else = 148, /* else */ + YYSYMBOL_cont = 149, /* cont */ + YYSYMBOL_finally = 150, /* finally */ + YYSYMBOL_mintro = 151, /* mintro */ + YYSYMBOL_nexpr = 152, /* nexpr */ + YYSYMBOL_texpr = 153, /* texpr */ + YYSYMBOL_iexpr = 154, /* iexpr */ + YYSYMBOL_mexpr = 155, /* mexpr */ + YYSYMBOL_mnexpr = 156, /* mnexpr */ + YYSYMBOL_formname = 157, /* formname */ + YYSYMBOL_startsub = 158, /* startsub */ + YYSYMBOL_startanonsub = 159, /* startanonsub */ + YYSYMBOL_startformsub = 160, /* startformsub */ + YYSYMBOL_subname = 161, /* subname */ + YYSYMBOL_proto = 162, /* proto */ + YYSYMBOL_subattrlist = 163, /* subattrlist */ + YYSYMBOL_myattrlist = 164, /* myattrlist */ + YYSYMBOL_sigvarname = 165, /* sigvarname */ + YYSYMBOL_sigslurpsigil = 166, /* sigslurpsigil */ + YYSYMBOL_sigslurpelem = 167, /* sigslurpelem */ + YYSYMBOL_sigdefault = 168, /* sigdefault */ + YYSYMBOL_sigscalarelem = 169, /* sigscalarelem */ + YYSYMBOL_sigelem = 170, /* sigelem */ + YYSYMBOL_siglist = 171, /* siglist */ + YYSYMBOL_optsiglist = 172, /* optsiglist */ + YYSYMBOL_optsubsignature = 173, /* optsubsignature */ + YYSYMBOL_subsignature = 174, /* subsignature */ + YYSYMBOL_subsigguts = 175, /* subsigguts */ + YYSYMBOL_176_17 = 176, /* $@17 */ + YYSYMBOL_optsubbody = 177, /* optsubbody */ + YYSYMBOL_subbody = 178, /* subbody */ + YYSYMBOL_optsigsubbody = 179, /* optsigsubbody */ + YYSYMBOL_sigsubbody = 180, /* sigsubbody */ + YYSYMBOL_expr = 181, /* expr */ + YYSYMBOL_listexpr = 182, /* listexpr */ + YYSYMBOL_listop = 183, /* listop */ + YYSYMBOL_184_18 = 184, /* @18 */ + YYSYMBOL_method = 185, /* method */ + YYSYMBOL_subscripted = 186, /* subscripted */ + YYSYMBOL_termbinop = 187, /* termbinop */ + YYSYMBOL_termrelop = 188, /* termrelop */ + YYSYMBOL_relopchain = 189, /* relopchain */ + YYSYMBOL_termeqop = 190, /* termeqop */ + YYSYMBOL_eqopchain = 191, /* eqopchain */ + YYSYMBOL_termunop = 192, /* termunop */ + YYSYMBOL_anonymous = 193, /* anonymous */ + YYSYMBOL_termdo = 194, /* termdo */ + YYSYMBOL_term = 195, /* term */ + YYSYMBOL_196_19 = 196, /* @19 */ + YYSYMBOL_myattrterm = 197, /* myattrterm */ + YYSYMBOL_myterm = 198, /* myterm */ + YYSYMBOL_optlistexpr = 199, /* optlistexpr */ + YYSYMBOL_optexpr = 200, /* optexpr */ + YYSYMBOL_optrepl = 201, /* optrepl */ + YYSYMBOL_my_scalar = 202, /* my_scalar */ + YYSYMBOL_list_of_scalars = 203, /* list_of_scalars */ + YYSYMBOL_my_list_of_scalars = 204, /* my_list_of_scalars */ + YYSYMBOL_my_var = 205, /* my_var */ + YYSYMBOL_refgen_topic = 206, /* refgen_topic */ + YYSYMBOL_my_refgen = 207, /* my_refgen */ + YYSYMBOL_amper = 208, /* amper */ + YYSYMBOL_scalar = 209, /* scalar */ + YYSYMBOL_ary = 210, /* ary */ + YYSYMBOL_hsh = 211, /* hsh */ + YYSYMBOL_arylen = 212, /* arylen */ + YYSYMBOL_star = 213, /* star */ + YYSYMBOL_sliceme = 214, /* sliceme */ + YYSYMBOL_kvslice = 215, /* kvslice */ + YYSYMBOL_gelem = 216, /* gelem */ + YYSYMBOL_indirob = 217 /* indirob */ +}; +typedef enum yysymbol_kind_t yysymbol_kind_t; + + + + #define YYFINAL 16 /* YYLAST -- Last index in YYTABLE. */ -#define YYLAST 3348 +#define YYLAST 3293 /* YYNTOKENS -- Number of terminals. */ -#define YYNTOKENS 112 +#define YYNTOKENS 115 /* YYNNTS -- Number of nonterminals. */ -#define YYNNTS 96 +#define YYNNTS 103 /* YYNRULES -- Number of rules. */ -#define YYNRULES 294 +#define YYNRULES 304 /* YYNSTATES -- Number of states. */ -#define YYNSTATES 572 +#define YYNSTATES 610 + +#define YYMAXUTOK 369 -#define YYUNDEFTOK 2 -#define YYMAXUTOK 344 /* YYTRANSLATE(TOKEN-NUM) -- Symbol number corresponding to TOKEN-NUM as returned by yylex, with out-of-bounds checking. */ -#define YYTRANSLATE(YYX) \ - ((unsigned) (YYX) <= YYMAXUTOK ? yytranslate[YYX] : YYUNDEFTOK) +#define YYTRANSLATE(YYX) \ + (0 <= (YYX) && (YYX) <= YYMAXUTOK \ + ? YY_CAST (yysymbol_kind_t, yytranslate[YYX]) \ + : YYSYMBOL_YYUNDEF) /* YYTRANSLATE[TOKEN-NUM] -- Symbol number corresponding to TOKEN-NUM as returned by yylex. */ -static const yytype_uint8 yytranslate[] = +static const yytype_int8 yytranslate[] = { 0, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 95, 2, 2, 109, 17, 18, 2, - 107, 106, 110, 15, 80, 14, 20, 111, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 83, 108, - 2, 19, 2, 82, 16, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 12, 2, 13, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 10, 2, 11, 96, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, @@ -55,281 +285,311 @@ static const yytype_uint8 yytranslate[] = 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 1, 2, 3, 4, - 5, 6, 7, 8, 9, 21, 22, 23, 24, 25, - 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, - 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, - 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, - 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, - 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, - 76, 77, 78, 79, 81, 84, 85, 86, 87, 88, - 89, 90, 91, 92, 93, 94, 97, 98, 99, 100, - 101, 102, 103, 104, 105 + 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, + 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, + 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, + 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, + 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, + 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, + 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, + 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, + 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, + 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, + 105, 106, 107, 108, 109, 110, 111, 112, 113, 114 }; #if YYDEBUG /* YYRLINE[YYN] -- Source line where rule number YYN was defined. */ -static const yytype_uint16 yyrline[] = +static const yytype_int16 yyrline[] = { - 0, 121, 121, 120, 132, 131, 142, 141, 155, 154, - 168, 167, 181, 180, 191, 190, 203, 211, 219, 223, - 231, 237, 238, 248, 249, 258, 262, 266, 273, 283, - 285, 298, 295, 319, 314, 335, 343, 342, 351, 357, - 363, 368, 370, 372, 379, 387, 389, 386, 406, 411, - 418, 417, 432, 440, 446, 453, 452, 467, 471, 476, - 484, 502, 503, 508, 510, 512, 514, 516, 518, 520, - 523, 529, 530, 535, 546, 547, 553, 559, 560, 565, - 568, 572, 577, 581, 585, 586, 590, 596, 601, 606, - 607, 612, 613, 618, 619, 621, 626, 628, 640, 641, - 646, 648, 652, 672, 673, 675, 681, 746, 748, 754, - 756, 760, 766, 767, 772, 773, 777, 781, 781, 849, - 850, 855, 866, 867, 870, 881, 883, 885, 887, 891, - 893, 898, 902, 906, 910, 916, 921, 927, 933, 935, - 937, 940, 939, 950, 951, 955, 959, 962, 967, 972, - 975, 979, 983, 989, 997, 1004, 1010, 1012, 1014, 1019, - 1021, 1023, 1028, 1030, 1032, 1034, 1036, 1038, 1040, 1042, - 1044, 1046, 1048, 1052, 1054, 1056, 1058, 1062, 1064, 1068, - 1070, 1072, 1074, 1078, 1080, 1085, 1087, 1090, 1092, 1094, - 1097, 1100, 1111, 1114, 1121, 1123, 1125, 1127, 1129, 1132, - 1138, 1140, 1144, 1145, 1146, 1147, 1148, 1150, 1152, 1154, - 1156, 1158, 1160, 1162, 1164, 1166, 1168, 1170, 1172, 1174, - 1176, 1186, 1196, 1206, 1216, 1218, 1220, 1223, 1228, 1232, - 1234, 1236, 1238, 1241, 1243, 1246, 1248, 1250, 1252, 1254, - 1256, 1258, 1260, 1262, 1265, 1267, 1269, 1271, 1273, 1275, - 1279, 1282, 1281, 1294, 1295, 1296, 1300, 1302, 1304, 1309, - 1311, 1314, 1316, 1318, 1323, 1325, 1330, 1331, 1336, 1337, - 1343, 1347, 1348, 1349, 1352, 1353, 1356, 1357, 1360, 1364, - 1368, 1374, 1380, 1382, 1386, 1390, 1391, 1395, 1396, 1400, - 1401, 1406, 1408, 1410, 1413 + 0, 140, 140, 139, 151, 150, 161, 160, 174, 173, + 187, 186, 200, 199, 210, 209, 222, 230, 234, 241, + 246, 253, 260, 261, 271, 272, 281, 285, 289, 296, + 306, 308, 321, 318, 342, 337, 358, 366, 365, 374, + 380, 386, 391, 393, 395, 402, 410, 412, 409, 429, + 434, 443, 450, 449, 464, 472, 479, 481, 478, 490, + 497, 496, 511, 515, 519, 524, 532, 550, 551, 555, + 559, 561, 563, 565, 567, 569, 571, 574, 580, 581, + 586, 597, 598, 603, 605, 610, 617, 618, 622, 626, + 630, 635, 639, 643, 644, 647, 653, 658, 664, 665, + 670, 671, 676, 677, 679, 684, 686, 697, 699, 704, + 706, 710, 730, 731, 733, 739, 804, 806, 812, 814, + 818, 824, 825, 830, 831, 835, 839, 839, 906, 907, + 912, 924, 925, 929, 940, 942, 944, 948, 950, 955, + 959, 963, 967, 973, 978, 984, 990, 992, 994, 997, + 996, 1007, 1008, 1012, 1016, 1019, 1024, 1029, 1032, 1036, + 1040, 1046, 1054, 1061, 1067, 1069, 1071, 1076, 1078, 1080, + 1085, 1087, 1089, 1091, 1093, 1095, 1097, 1099, 1101, 1103, + 1105, 1109, 1111, 1113, 1115, 1119, 1121, 1125, 1127, 1129, + 1131, 1135, 1137, 1142, 1144, 1147, 1149, 1151, 1154, 1157, + 1168, 1171, 1179, 1181, 1183, 1186, 1192, 1194, 1198, 1199, + 1200, 1201, 1202, 1204, 1206, 1208, 1210, 1212, 1214, 1216, + 1218, 1220, 1222, 1224, 1226, 1228, 1238, 1248, 1258, 1268, + 1270, 1272, 1275, 1280, 1284, 1286, 1288, 1290, 1293, 1295, + 1298, 1300, 1302, 1304, 1306, 1308, 1310, 1312, 1314, 1317, + 1319, 1321, 1323, 1325, 1327, 1331, 1334, 1333, 1346, 1347, + 1348, 1353, 1355, 1357, 1359, 1364, 1366, 1369, 1371, 1373, + 1379, 1380, 1384, 1385, 1389, 1390, 1395, 1400, 1402, 1406, + 1409, 1413, 1414, 1415, 1418, 1419, 1422, 1423, 1426, 1430, + 1434, 1440, 1446, 1448, 1452, 1456, 1457, 1461, 1462, 1466, + 1467, 1472, 1474, 1476, 1479 }; #endif -#if YYDEBUG || YYERROR_VERBOSE || 0 +/** Accessing symbol of state STATE. */ +#define YY_ACCESSING_SYMBOL(State) YY_CAST (yysymbol_kind_t, yystos[State]) + +#if YYDEBUG || 0 +/* The user-facing name of the symbol whose (internal) number is + YYSYMBOL. No bounds checking. */ +static const char *yysymbol_name (yysymbol_kind_t yysymbol) YY_ATTRIBUTE_UNUSED; + /* YYTNAME[SYMBOL-NUM] -- String name of the symbol SYMBOL-NUM. First, the terminals, then, starting at YYNTOKENS, nonterminals. */ static const char *const yytname[] = { - "$end", "error", "$undefined", "GRAMPROG", "GRAMEXPR", "GRAMBLOCK", - "GRAMBARESTMT", "GRAMFULLSTMT", "GRAMSTMTSEQ", "GRAMSUBSIGNATURE", "'{'", - "'}'", "'['", "']'", "'-'", "'+'", "'@'", "'%'", "'&'", "'='", "'.'", - "BAREWORD", "METHOD", "FUNCMETH", "THING", "PMFUNC", "PRIVATEREF", - "QWLIST", "FUNC0OP", "FUNC0SUB", "UNIOPSUB", "LSTOPSUB", "PLUGEXPR", - "PLUGSTMT", "LABEL", "FORMAT", "SUB", "SIGSUB", "ANONSUB", "ANON_SIGSUB", - "PACKAGE", "USE", "WHILE", "UNTIL", "IF", "UNLESS", "ELSE", "ELSIF", - "CONTINUE", "FOR", "GIVEN", "WHEN", "DEFAULT", "LOOPEX", "DOTDOT", - "YADAYADA", "FUNC0", "FUNC1", "FUNC", "UNIOP", "LSTOP", "MULOP", "ADDOP", - "DOLSHARP", "DO", "HASHBRACK", "NOAMP", "LOCAL", "MY", "REQUIRE", - "COLONATTR", "FORMLBRACK", "FORMRBRACK", "SUBLEXSTART", "SUBLEXEND", - "PREC_LOW", "OROP", "DOROP", "ANDOP", "NOTOP", "','", "ASSIGNOP", "'?'", - "':'", "OROR", "DORDOR", "ANDAND", "BITOROP", "BITANDOP", "CHEQOP", - "NCEQOP", "CHRELOP", "NCRELOP", "SHIFTOP", "MATCHOP", "'!'", "'~'", - "UMINUS", "REFGEN", "POWOP", "PREINC", "PREDEC", "POSTINC", "POSTDEC", - "POSTJOIN", "ARROW", "')'", "'('", "';'", "'$'", "'*'", "'/'", "$accept", - "grammar", "@1", "@2", "@3", "@4", "@5", "@6", "@7", "block", - "formblock", "remember", "mblock", "mremember", "stmtseq", "formstmtseq", - "fullstmt", "labfullstmt", "barestmt", "$@8", "$@9", "$@10", "$@11", - "$@12", "@13", "$@14", "formline", "formarg", "sideff", "else", "cont", - "mintro", "nexpr", "texpr", "iexpr", "mexpr", "mnexpr", "formname", - "startsub", "startanonsub", "startformsub", "subname", "proto", - "subattrlist", "myattrlist", "sigvarname", "sigslurpsigil", - "sigslurpelem", "sigdefault", "sigscalarelem", "sigelem", "siglist", - "siglistornull", "optsubsignature", "subsignature", "subsigguts", "$@15", - "optsubbody", "subbody", "optsigsubbody", "sigsubbody", "expr", - "listexpr", "listop", "@16", "method", "subscripted", "termbinop", - "termrelop", "relopchain", "termeqop", "eqopchain", "termunop", - "anonymous", "termdo", "term", "@17", "myattrterm", "myterm", - "optlistexpr", "optexpr", "optrepl", "my_scalar", "my_var", - "refgen_topic", "my_refgen", "amper", "scalar", "ary", "hsh", "arylen", - "star", "sliceme", "kvslice", "gelem", "indirob", YY_NULLPTR + "\"end of file\"", "error", "\"invalid token\"", "GRAMPROG", "GRAMEXPR", + "GRAMBLOCK", "GRAMBARESTMT", "GRAMFULLSTMT", "GRAMSTMTSEQ", + "GRAMSUBSIGNATURE", "PERLY_AMPERSAND", "PERLY_BRACE_OPEN", + "PERLY_BRACE_CLOSE", "PERLY_BRACKET_OPEN", "PERLY_BRACKET_CLOSE", + "PERLY_COMMA", "PERLY_DOLLAR", "PERLY_DOT", "PERLY_EQUAL_SIGN", + "PERLY_MINUS", "PERLY_PERCENT_SIGN", "PERLY_PLUS", "PERLY_SEMICOLON", + "PERLY_SLASH", "PERLY_SNAIL", "PERLY_STAR", "BAREWORD", "METHOD", + "FUNCMETH", "THING", "PMFUNC", "PRIVATEREF", "QWLIST", "FUNC0OP", + "FUNC0SUB", "UNIOPSUB", "LSTOPSUB", "PLUGEXPR", "PLUGSTMT", "LABEL", + "FORMAT", "SUB", "SIGSUB", "ANONSUB", "ANON_SIGSUB", "PACKAGE", "USE", + "WHILE", "UNTIL", "IF", "UNLESS", "ELSE", "ELSIF", "CONTINUE", "FOR", + "GIVEN", "WHEN", "DEFAULT", "TRY", "CATCH", "FINALLY", "LOOPEX", + "DOTDOT", "YADAYADA", "FUNC0", "FUNC1", "FUNC", "UNIOP", "LSTOP", + "MULOP", "ADDOP", "DOLSHARP", "DO", "HASHBRACK", "NOAMP", "LOCAL", "MY", + "REQUIRE", "COLONATTR", "FORMLBRACK", "FORMRBRACK", "SUBLEXSTART", + "SUBLEXEND", "DEFER", "PREC_LOW", "OROP", "ANDOP", "NOTOP", "ASSIGNOP", + "PERLY_QUESTION_MARK", "PERLY_COLON", "OROR", "DORDOR", "ANDAND", + "BITOROP", "BITANDOP", "CHEQOP", "NCEQOP", "CHRELOP", "NCRELOP", + "SHIFTOP", "MATCHOP", "PERLY_EXCLAMATION_MARK", "PERLY_TILDE", "UMINUS", + "REFGEN", "POWOP", "PREINC", "PREDEC", "POSTINC", "POSTDEC", "POSTJOIN", + "ARROW", "PERLY_PAREN_CLOSE", "PERLY_PAREN_OPEN", "$accept", "grammar", + "@1", "@2", "@3", "@4", "@5", "@6", "@7", "block", "empty", "formblock", + "remember", "mblock", "mremember", "stmtseq", "formstmtseq", "fullstmt", + "labfullstmt", "barestmt", "$@8", "$@9", "$@10", "$@11", "$@12", "@13", + "$@14", "$@15", "$@16", "formline", "formarg", "condition", "sideff", + "else", "cont", "finally", "mintro", "nexpr", "texpr", "iexpr", "mexpr", + "mnexpr", "formname", "startsub", "startanonsub", "startformsub", + "subname", "proto", "subattrlist", "myattrlist", "sigvarname", + "sigslurpsigil", "sigslurpelem", "sigdefault", "sigscalarelem", + "sigelem", "siglist", "optsiglist", "optsubsignature", "subsignature", + "subsigguts", "$@17", "optsubbody", "subbody", "optsigsubbody", + "sigsubbody", "expr", "listexpr", "listop", "@18", "method", + "subscripted", "termbinop", "termrelop", "relopchain", "termeqop", + "eqopchain", "termunop", "anonymous", "termdo", "term", "@19", + "myattrterm", "myterm", "optlistexpr", "optexpr", "optrepl", "my_scalar", + "list_of_scalars", "my_list_of_scalars", "my_var", "refgen_topic", + "my_refgen", "amper", "scalar", "ary", "hsh", "arylen", "star", + "sliceme", "kvslice", "gelem", "indirob", YY_NULLPTR }; + +static const char * +yysymbol_name (yysymbol_kind_t yysymbol) +{ + return yytname[yysymbol]; +} #endif -# ifdef YYPRINT +#ifdef YYPRINT /* YYTOKNUM[NUM] -- (External) token number corresponding to the (internal) symbol number NUM (which must be that of a token). */ -static const yytype_uint16 yytoknum[] = +static const yytype_int16 yytoknum[] = { 0, 256, 257, 258, 259, 260, 261, 262, 263, 264, - 123, 125, 91, 93, 45, 43, 64, 37, 38, 61, - 46, 265, 266, 267, 268, 269, 270, 271, 272, 273, - 274, 275, 276, 277, 278, 279, 280, 281, 282, 283, - 284, 285, 286, 287, 288, 289, 290, 291, 292, 293, - 294, 295, 296, 297, 298, 299, 300, 301, 302, 303, - 304, 305, 306, 307, 308, 309, 310, 311, 312, 313, - 314, 315, 316, 317, 318, 319, 320, 321, 322, 323, - 44, 324, 63, 58, 325, 326, 327, 328, 329, 330, - 331, 332, 333, 334, 335, 33, 126, 336, 337, 338, - 339, 340, 341, 342, 343, 344, 41, 40, 59, 36, - 42, 47 + 265, 266, 267, 268, 269, 270, 271, 272, 273, 274, + 275, 276, 277, 278, 279, 280, 281, 282, 283, 284, + 285, 286, 287, 288, 289, 290, 291, 292, 293, 294, + 295, 296, 297, 298, 299, 300, 301, 302, 303, 304, + 305, 306, 307, 308, 309, 310, 311, 312, 313, 314, + 315, 316, 317, 318, 319, 320, 321, 322, 323, 324, + 325, 326, 327, 328, 329, 330, 331, 332, 333, 334, + 335, 336, 337, 338, 339, 340, 341, 342, 343, 344, + 345, 346, 347, 348, 349, 350, 351, 352, 353, 354, + 355, 356, 357, 358, 359, 360, 361, 362, 363, 364, + 365, 366, 367, 368, 369 }; -# endif +#endif -#define YYPACT_NINF -485 +#define YYPACT_NINF (-498) -#define yypact_value_is_default(Yystate) \ - (!!((Yystate) == (-485))) +#define yypact_value_is_default(Yyn) \ + ((Yyn) == YYPACT_NINF) -#define YYTABLE_NINF -290 +#define YYTABLE_NINF (-300) -#define yytable_value_is_error(Yytable_value) \ - (!!((Yytable_value) == (-290))) +#define yytable_value_is_error(Yyn) \ + ((Yyn) == YYTABLE_NINF) /* YYPACT[STATE-NUM] -- Index in YYTABLE of the portion describing STATE-NUM. */ static const yytype_int16 yypact[] = { - 739, -485, -485, -485, -485, -485, -485, -485, 28, -485, - 2976, 32, 1582, 1481, -485, -485, -485, -485, 2085, 2976, - 2976, 6, 6, 6, -485, 6, 6, -485, -485, 50, - -31, -485, 2976, -485, -485, -485, -485, 2976, -13, 20, - -33, 1986, 1885, 6, 1986, 2184, 4, 2976, 83, 2976, - 2976, 2976, 2976, 2976, 2976, 2976, 2283, 6, 6, 41, - -7, -485, 14, -485, -34, -1, -20, 22, -485, -485, - -485, 3151, -485, -485, 29, 56, 95, 102, -485, 153, - 247, 254, 157, -485, -485, -485, -485, -485, 4, 4, - 132, -485, 79, 100, 119, 130, 174, 146, 154, 32, - 152, -485, 217, -485, 160, 1984, 1481, -485, -485, -485, - 672, -485, 30, 774, -485, 111, 142, 142, -485, -485, - -485, -485, -485, -485, -485, 2976, 172, 207, 2976, 176, - 430, 32, 261, 216, 3151, 202, 2382, 2976, 1885, -485, - 430, 572, -7, -485, 476, 2976, -485, -485, 430, 299, - 197, -485, -485, 2976, 430, 3075, 2481, 242, -485, -485, - -485, 430, -7, 142, 142, 142, 57, 57, 306, 267, - -485, -485, 2976, 2976, 2976, 2976, 2976, 2976, 2580, -485, - -485, 2976, -485, -485, 2976, 2976, 2976, 2976, 2976, 2976, - 2976, 2976, 2976, 2976, 2976, 2976, 2976, 2976, 2976, 2976, - 2976, 2976, -485, -485, -485, 75, 2679, 2976, 2976, 2976, - 2976, 2976, 2976, 2976, -485, 307, -485, -485, 311, -485, - -485, -485, -485, -485, 224, 36, -485, -485, 226, -485, - -485, -485, -485, 32, -485, -485, 2976, 2976, 2976, 2976, - 2976, 2976, -485, -485, -485, -485, -485, 320, 320, -485, - -485, -485, 273, -485, -485, -485, 2976, 2976, 118, -485, - -485, -485, 216, 330, -485, -485, -485, 331, 284, 260, - 2976, -7, -485, 348, -485, 2778, 142, 242, 33, 55, - 67, -485, 342, 344, -485, 2976, 357, 294, 294, -485, - 3151, 249, 133, -485, 433, 430, 363, 3243, 504, 329, - 3151, 3105, 1667, 1667, 1767, 1867, 538, 363, 363, 430, - 430, 301, 142, 142, 2976, 2976, 271, 272, 274, -485, - 278, 2877, 23, 279, 270, -485, -485, 470, 253, 136, - 302, 158, 364, 162, 407, 875, -485, 372, -485, -485, - 1, 375, 2976, 2976, 2976, 2976, -485, 292, -485, -485, - 305, -485, -485, -485, -485, 1683, 34, -485, 2976, 2976, - -485, 41, -485, 41, 41, 41, 41, 41, -485, 332, - 332, 30, 308, -39, -485, 2976, -485, -485, 309, -485, - -485, -485, -485, 512, -485, 5, 516, -485, -485, -485, - 178, 2976, 416, -485, -485, 2976, 418, 193, -485, -485, - -485, -485, -485, 519, -485, -485, 2976, -485, 436, -485, - 438, -485, 440, -485, 447, -485, -485, -485, 261, 216, - -485, -485, 439, 353, 41, 358, 368, 41, 369, 356, - -485, -485, -485, -485, 374, 373, 401, -485, 2976, 381, - 387, 2976, -485, -485, -485, -485, 2976, 423, -485, 489, - -485, -485, 490, -485, -485, 19, -485, 239, -485, 3197, - 492, -485, -485, 398, -485, -485, -485, -485, 397, 216, - 404, -485, 2976, -485, -485, 496, 496, 2976, 2976, 496, - -485, 406, 408, 496, 496, 3151, 41, -485, -485, 410, - -485, -485, -485, -485, 445, 414, -485, -485, -485, -485, - 420, 496, 496, -485, 37, 37, 434, 435, 217, 2976, - 2976, 496, -485, -485, 976, -485, 1077, -485, -485, -485, - -485, 1178, -485, 217, 217, -485, 496, 442, -485, -485, - 496, 496, -485, 437, 449, 217, -485, -485, -10, -485, - -485, -485, 1279, -485, 2976, 217, 217, -485, 496, -485, - 472, 531, -485, -485, 465, -485, -485, -485, 217, -485, - -485, -485, 496, 1784, -485, 1380, 37, 467, -485, -485, - 496, -485 + 477, -498, -498, -498, -498, -498, -498, -498, 37, -498, + 2923, 16, 1589, 1490, -498, -498, -498, -498, 214, 2923, + 214, 2923, 214, 2923, 214, 214, -498, 214, 214, -498, + -498, 33, -64, -498, 2923, -498, -498, -498, -498, 2923, + -49, -46, -37, 2155, 2056, 214, 2155, 2923, 155, 2923, + 50, 2923, 2923, 2923, 2923, 2923, 2923, 2923, 2251, -498, + 2, 57, -498, 10, -498, 120, -14, 176, 1, -498, + -498, -498, 3091, -498, -498, -5, 171, 189, 194, -498, + 94, 220, 224, 111, -498, -498, -498, -498, -498, -498, + 155, 155, 125, -498, 26, 69, 99, 112, 9, 133, + 136, 16, 244, 165, 244, 208, -498, 243, 512, 1490, + -498, -498, -498, -498, 630, -498, 35, 774, -498, -498, + -498, -498, -498, 260, -498, 400, -498, 400, -498, -498, + 2923, 177, 229, 2923, 201, 223, 16, 292, 248, 3091, + 230, 2347, 2923, 2056, -498, 223, 1952, -498, 57, -498, + 1850, 2923, -498, -498, 223, 323, -498, -498, 2923, 223, + 3019, 2443, 268, -498, -498, -498, 223, 57, 400, 400, + 400, 253, 253, 354, 59, 2923, 2923, 2923, 2923, 2923, + 2539, -498, -498, 2923, -498, -498, 2923, 2923, 2923, 2923, + 2923, 2923, 2923, 2923, 2923, 2923, 2923, 2923, 2923, 2923, + 2923, 2923, 2923, 2923, -498, -498, -498, 149, 2635, 2923, + 2923, 2923, 2923, 2923, 2923, 2923, -498, 331, -498, -498, + 348, -498, -498, -498, -498, -498, 283, 188, -498, -498, + 265, -498, -498, -498, -498, 333, -498, -498, 16, -498, + -498, -498, 2923, 2923, 2923, 2923, 2923, 2923, -498, -498, + -498, 359, -498, -498, -498, 359, -498, -498, -498, 378, + -498, -498, -498, 2923, 2923, 22, -498, -498, -498, -498, + 248, 375, -498, -498, -498, -498, 156, 334, 314, 2923, + 57, 393, -498, 2731, 400, 268, 78, 117, 139, -498, + 181, 392, -498, 2923, 415, 343, -498, 3091, 72, 25, + -498, 185, 223, 361, 3181, 344, 238, 3091, 3046, 1884, + 1884, 1669, 444, 301, 361, 361, 223, 223, 308, 400, + 400, 407, 2923, 2923, 622, 408, 416, 418, -498, 421, + 2827, 337, -498, -498, 191, 82, 27, 124, 31, 153, + 53, 158, 879, -498, -498, 429, -498, -498, 20, 426, + 2923, 2923, 2923, 2923, -498, -12, -498, -498, 349, -498, + -498, -498, -498, 1685, 356, -498, 2923, 2923, -498, 351, + -498, -498, 2, -498, 2, -498, -498, -498, -498, -498, + 369, 369, 35, 353, 114, -498, 2923, -498, -498, 360, + -498, -498, -498, -498, 242, -498, 15, 256, -498, -498, + -498, 68, 2923, 464, -498, -498, 2923, -498, 174, 85, + -498, -498, -498, -498, -498, -498, 274, 2923, -498, 465, + -498, 466, -498, 475, -498, 476, -498, -498, -498, 292, + 248, -498, -498, 463, 380, 2, 384, 386, 2, 387, + 487, 391, -498, -498, -498, -498, -498, 402, 495, 143, + -498, 2923, 406, 409, 995, -498, 2923, -498, -498, -498, + -498, -498, 2923, -498, 441, -498, 514, -498, -498, -498, + 515, -498, -498, 49, -498, 92, -498, 3136, 517, -498, + -498, 417, -498, -498, -498, -498, 524, 248, 526, -498, + 2923, -498, -498, 244, 244, 519, 423, -498, 2923, 2923, + 244, -498, 435, 424, 244, 244, -498, -498, 3091, 2, + -498, -498, 439, -498, -498, -498, -498, 478, 535, -498, + -498, -498, -498, 541, 244, 244, 228, 228, 487, 450, + 452, 454, 208, 2923, 2923, 244, -498, -498, 487, 1094, + -498, 1193, -498, -498, -498, -498, 1292, -498, 208, 208, + 244, 455, -498, -498, -498, -498, 2923, 244, 244, -498, + 548, 460, 208, -498, -498, -498, -498, 18, -498, -498, + -498, -498, 2923, 461, 208, 208, -498, 244, -498, 462, + 560, 499, -498, 467, 244, -498, -498, -498, 208, 244, + -498, -498, -498, -498, 244, 208, 1781, -498, 521, 1391, + 228, -498, 469, 16, -498, -498, -498, 244, -498, -498 }; /* YYDEFACT[STATE-NUM] -- Default reduction number in state STATE-NUM. Performed when YYTABLE does not specify something else to do. Zero means the default is an error. */ -static const yytype_uint16 yydefact[] = +static const yytype_int16 yydefact[] = { - 0, 2, 4, 6, 8, 10, 12, 14, 0, 18, - 266, 0, 0, 0, 21, 117, 1, 21, 0, 0, - 0, 0, 0, 0, 253, 0, 0, 224, 251, 212, - 246, 248, 242, 87, 255, 87, 87, 234, 244, 0, - 0, 237, 264, 0, 0, 0, 0, 0, 0, 240, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 267, - 128, 254, 219, 202, 164, 173, 165, 179, 203, 204, - 205, 131, 209, 5, 225, 214, 217, 216, 218, 215, - 0, 0, 0, 18, 7, 63, 29, 88, 0, 0, - 0, 86, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 59, 74, 9, 0, 64, 0, 11, 26, 25, - 0, 15, 112, 0, 195, 0, 185, 186, 291, 294, - 293, 292, 280, 281, 278, 264, 0, 0, 0, 0, - 243, 0, 91, 93, 235, 0, 0, 266, 266, 238, - 239, 291, 265, 138, 292, 0, 282, 201, 200, 0, - 0, 89, 90, 264, 210, 0, 0, 257, 261, 263, - 262, 241, 236, 187, 188, 207, 192, 193, 213, 0, - 279, 284, 0, 0, 0, 129, 0, 0, 0, 176, - 175, 0, 182, 181, 0, 0, 0, 0, 0, 0, + 0, 2, 4, 6, 8, 10, 12, 14, 0, 19, + 17, 0, 0, 0, 17, 126, 1, 17, 0, 17, + 0, 0, 0, 0, 0, 0, 258, 0, 0, 229, + 256, 217, 251, 253, 247, 96, 260, 96, 96, 239, + 249, 0, 0, 242, 17, 0, 0, 17, 0, 0, + 0, 245, 0, 0, 0, 0, 0, 0, 0, 272, + 273, 136, 259, 224, 208, 172, 181, 173, 187, 209, + 210, 211, 139, 214, 5, 230, 219, 222, 221, 223, + 220, 0, 0, 0, 19, 7, 70, 65, 30, 97, + 0, 0, 0, 95, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 17, 9, 0, 71, 0, + 11, 27, 26, 22, 0, 15, 17, 0, 301, 304, + 303, 302, 288, 0, 289, 193, 291, 194, 290, 294, + 17, 0, 0, 0, 0, 248, 0, 17, 17, 240, + 0, 0, 17, 17, 243, 244, 301, 270, 271, 146, + 302, 0, 292, 207, 206, 0, 98, 99, 17, 215, + 0, 0, 262, 267, 269, 268, 246, 241, 195, 196, + 213, 200, 201, 218, 0, 0, 0, 137, 0, 0, + 0, 184, 183, 0, 190, 189, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 189, 190, 191, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 21, 85, 86, 86, 0, 36, - 18, 18, 18, 18, 18, 0, 18, 18, 0, 18, - 18, 42, 58, 0, 54, 57, 0, 0, 0, 0, - 0, 0, 28, 27, 22, 100, 101, 98, 98, 108, - 107, 111, 113, 118, 194, 136, 266, 0, 0, 247, - 141, 92, 93, 95, 18, 245, 249, 0, 0, 0, - 0, 132, 197, 0, 228, 0, 208, 0, 214, 217, - 216, 260, 0, 97, 256, 0, 211, 126, 127, 125, - 130, 0, 0, 155, 0, 178, 184, 168, 161, 162, - 159, 0, 170, 171, 169, 167, 166, 183, 180, 177, - 174, 163, 172, 160, 0, 0, 286, 288, 0, 143, - 0, 0, 0, 290, 135, 144, 226, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 84, 0, 31, 33, - 0, 0, 79, 0, 0, 0, 276, 0, 277, 274, - 0, 275, 271, 272, 273, 0, 0, 18, 0, 0, - 75, 67, 68, 81, 65, 66, 69, 70, 99, 103, - 103, 109, 0, 268, 157, 264, 18, 94, 114, 199, - 250, 140, 139, 0, 196, 213, 0, 258, 259, 96, - 0, 0, 0, 148, 154, 0, 0, 0, 230, 231, - 232, 283, 152, 0, 229, 233, 266, 227, 0, 146, - 0, 220, 0, 221, 0, 16, 18, 30, 91, 93, - 18, 35, 0, 0, 80, 0, 0, 82, 0, 0, - 270, 18, 78, 83, 0, 0, 64, 50, 0, 0, - 0, 104, 106, 102, 110, 137, 0, 0, 142, 0, - 198, 117, 0, 115, 133, 211, 158, 0, 151, 206, - 0, 147, 153, 0, 149, 222, 223, 145, 0, 93, - 18, 55, 264, 76, 76, 0, 0, 0, 0, 0, - 45, 0, 0, 0, 0, 105, 269, 252, 21, 0, - 21, 156, 150, 134, 0, 18, 123, 34, 122, 21, - 0, 0, 0, 20, 71, 71, 0, 0, 74, 79, - 0, 0, 40, 41, 0, 116, 0, 23, 120, 32, - 119, 0, 37, 74, 74, 21, 0, 0, 38, 39, - 0, 0, 53, 0, 0, 74, 121, 124, 0, 56, - 43, 44, 0, 72, 0, 74, 74, 46, 0, 49, - 61, 0, 24, 19, 0, 48, 52, 76, 74, 21, - 60, 17, 0, 0, 51, 0, 71, 0, 62, 73, - 0, 47 + 0, 0, 0, 0, 197, 198, 199, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 17, 17, 95, 95, + 0, 37, 19, 19, 19, 19, 19, 0, 19, 19, + 0, 19, 19, 43, 21, 0, 64, 63, 0, 81, + 59, 62, 0, 0, 0, 0, 0, 0, 29, 28, + 23, 107, 110, 109, 121, 107, 117, 116, 120, 122, + 127, 202, 144, 17, 0, 0, 252, 149, 101, 100, + 17, 104, 102, 19, 250, 254, 0, 0, 0, 0, + 140, 0, 233, 0, 264, 0, 219, 222, 221, 266, + 0, 106, 261, 0, 216, 135, 134, 138, 0, 0, + 163, 0, 186, 192, 176, 169, 170, 167, 0, 178, + 179, 177, 175, 174, 191, 188, 185, 182, 171, 180, + 168, 0, 0, 0, 0, 298, 296, 300, 151, 0, + 0, 143, 152, 231, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 93, 94, 0, 32, 34, 0, 0, + 88, 0, 0, 0, 286, 0, 287, 284, 0, 285, + 281, 282, 283, 0, 0, 19, 0, 0, 17, 0, + 82, 74, 69, 75, 90, 72, 73, 76, 77, 108, + 17, 17, 118, 0, 17, 165, 17, 19, 103, 17, + 205, 255, 148, 147, 0, 203, 218, 0, 263, 265, + 105, 0, 0, 0, 156, 162, 0, 237, 0, 0, + 234, 236, 235, 238, 293, 160, 0, 17, 232, 0, + 154, 0, 225, 0, 226, 0, 16, 19, 31, 17, + 17, 19, 36, 0, 0, 89, 0, 0, 91, 0, + 0, 0, 276, 19, 86, 87, 92, 0, 0, 71, + 52, 0, 0, 0, 0, 56, 113, 112, 115, 111, + 119, 145, 0, 274, 0, 150, 0, 204, 126, 123, + 0, 124, 141, 216, 166, 0, 159, 212, 0, 155, + 161, 0, 157, 227, 228, 153, 0, 17, 19, 60, + 17, 85, 85, 0, 0, 280, 0, 279, 0, 0, + 0, 46, 0, 0, 0, 0, 20, 19, 114, 275, + 257, 17, 0, 17, 164, 158, 142, 0, 19, 132, + 35, 131, 17, 0, 0, 0, 17, 17, 277, 0, + 0, 0, 17, 88, 0, 0, 41, 42, 0, 0, + 125, 0, 17, 129, 33, 128, 0, 38, 17, 17, + 0, 0, 78, 39, 40, 278, 0, 0, 0, 55, + 0, 0, 17, 57, 130, 133, 24, 0, 61, 44, + 45, 79, 0, 0, 17, 17, 47, 0, 51, 0, + 0, 17, 25, 0, 0, 49, 54, 85, 17, 0, + 18, 17, 67, 66, 0, 17, 0, 53, 83, 0, + 17, 50, 0, 0, 58, 68, 80, 0, 84, 48 }; /* YYPGOTO[NTERM-NUM]. */ static const yytype_int16 yypgoto[] = { - -485, -485, -485, -485, -485, -485, -485, -485, -485, 298, - -485, -5, -109, -485, -17, -485, 561, 471, 0, -485, - -485, -485, -485, -485, -485, -485, -485, -485, -340, -484, - -159, -456, -485, 74, 243, -336, 39, -485, -44, 143, - -485, 161, 173, -242, 324, 362, -485, -485, 234, -485, - 240, -485, -485, -485, -485, 168, -485, -485, 110, -485, - 165, -8, -37, -485, -485, -485, -485, -485, -485, -485, - -485, -485, -485, -485, -485, 103, -485, -485, 457, -124, - -130, -485, -485, 257, -485, -485, 399, 38, -45, -42, - -485, -485, -485, -485, -485, 13 + -498, -498, -498, -498, -498, -498, -498, -498, -498, -11, + 5, -498, 77, -56, -498, -15, -498, 572, 474, 6, + -498, -498, -498, -498, -498, -498, -498, -498, -498, -498, + -498, 137, -360, -497, -237, -498, -487, -498, 54, 237, + -310, -6, -498, 71, 259, -498, 240, 170, -264, 309, + 345, -498, -498, 221, -498, 226, -498, -498, -498, -498, + 135, -498, -498, 93, -498, 122, 73, -32, -498, -498, + -498, -498, -498, -498, -498, -498, -498, -498, -498, -498, + 570, -498, -498, 457, -129, -9, -498, -498, -498, -498, + 250, -498, -498, 385, 51, -42, -24, -498, -498, -498, + -498, -498, 36 }; /* YYDEFGOTO[NTERM-NUM]. */ static const yytype_int16 yydefgoto[] = { - -1, 8, 9, 10, 11, 12, 13, 14, 15, 102, - 417, 378, 504, 525, 110, 538, 244, 108, 109, 418, - 419, 341, 509, 557, 481, 499, 552, 560, 104, 528, - 234, 501, 433, 423, 362, 426, 435, 337, 219, 131, - 215, 153, 262, 264, 284, 369, 248, 249, 442, 250, - 251, 252, 253, 452, 453, 111, 112, 519, 450, 497, - 379, 105, 60, 61, 375, 324, 62, 63, 64, 65, - 66, 67, 68, 69, 70, 71, 127, 72, 157, 143, - 73, 447, 429, 349, 350, 227, 74, 75, 76, 77, - 78, 79, 80, 81, 82, 170 + -1, 8, 9, 10, 11, 12, 13, 14, 15, 105, + 239, 428, 389, 235, 368, 114, 567, 250, 111, 112, + 429, 430, 349, 533, 587, 502, 507, 579, 522, 582, + 593, 371, 107, 553, 240, 604, 524, 446, 434, 373, + 437, 448, 345, 221, 136, 217, 158, 270, 273, 292, + 380, 255, 256, 458, 257, 258, 259, 260, 470, 471, + 115, 116, 544, 467, 520, 390, 108, 61, 62, 386, + 331, 63, 64, 65, 66, 67, 68, 69, 70, 71, + 72, 132, 73, 162, 149, 74, 464, 441, 495, 496, + 357, 358, 229, 75, 76, 77, 78, 79, 80, 81, + 82, 83, 124 }; /* YYTABLE[YYPACT[STATE-NUM]] -- What to do in state STATE-NUM. If @@ -337,811 +597,806 @@ static const yytype_int16 yydefgoto[] = number is the opposite. If YYTABLE_NINF, syntax error. */ static const yytype_int16 yytable[] = { - 113, 255, 59, 159, 17, 142, 160, 268, 269, 428, - 115, 420, 103, 162, 550, 432, 83, 285, 502, 434, - 376, 529, 439, 440, 176, 151, 177, 118, 16, 274, - 152, 391, 119, 83, 122, 123, 124, 150, 125, 126, - 137, 175, 83, 207, 118, 208, 245, 246, 169, 119, - 21, 22, 21, 22, 23, 145, 146, 179, 180, 121, - 121, 121, 128, 121, 121, -285, 207, -285, 208, 182, - 183, 171, 446, 175, 138, -260, 129, -287, 214, -287, - 144, 121, 569, 526, 527, 314, 158, 315, 142, -259, - 181, 316, 317, 318, 135, 121, 121, 319, 551, 21, - 22, 563, 482, -261, 348, -285, 243, -285, 271, 421, - 279, 184, -287, 280, -287, 57, 142, 172, 173, 174, - 258, 178, 116, 117, 254, -263, 372, 136, 267, 59, - 59, 374, 57, 404, 228, 130, 206, -262, 320, 247, - 134, 506, 507, 57, 140, 57, 393, 148, 282, 409, - 154, 270, 161, 218, 163, 164, 165, 166, 167, -290, - -290, -290, 205, -289, 287, 288, 289, 213, 291, 292, - 294, 411, 338, 339, 534, 413, 144, 470, 132, 133, - 353, 155, 321, 354, 322, 323, 220, 172, 173, 174, - 156, 456, 57, 278, 172, 173, 174, 335, 327, 328, - 329, 330, 331, 332, 333, 334, 461, 221, 554, 172, - 173, 174, 172, 173, 174, 342, 343, 344, 345, 347, - 373, 355, 356, 432, 358, 359, 222, 495, 361, 363, - 364, 365, 366, 367, 172, 173, 174, 223, 172, 173, - 174, 201, 224, 325, 202, 203, 204, 205, 59, 216, - 217, 448, 491, 229, 172, 173, 174, 209, 276, 210, - 232, 230, 383, 352, 211, 233, 212, 386, 235, 172, - 173, 174, 225, 172, 173, 174, 463, 390, 290, 256, - 257, 226, 259, 57, 295, 261, 263, 296, 297, 298, - 299, 300, 301, 302, 303, 304, 305, 306, 307, 308, - 309, 310, 311, 312, 313, 273, 396, 397, 265, 84, - 272, 353, 283, 403, 354, 172, 173, 174, 285, 120, - 120, 120, 346, 120, 120, 172, 173, 174, 336, 172, - 173, 174, 340, 357, 424, 363, 427, 427, 142, 139, - 120, 120, 147, 172, 173, 174, 368, 436, 500, 532, - 427, 427, 438, 371, 377, 120, 120, 392, 381, 384, - 121, 408, 186, 187, 540, 541, 382, 505, 389, 391, - 508, 449, 174, 286, 512, 513, 549, 406, 172, 173, - 174, 398, 399, 457, 400, 430, 555, 556, 401, 405, - 186, 416, 523, 524, 352, 200, 422, 231, 59, 564, - 201, 57, 535, 202, 203, 204, 205, 172, 173, 174, - 410, 468, 431, 441, 445, 471, 451, 543, 172, 173, - 174, 545, 546, 200, 186, 187, 478, 458, 201, 260, - 427, 202, 203, 204, 205, 142, 120, 380, 486, 558, - 172, 173, 174, 236, 237, 238, 239, 464, 388, 465, - 240, 466, 241, 566, 197, 198, 199, 200, 467, 473, - 472, 571, 201, 477, 474, 202, 203, 204, 205, 427, - 427, 514, 412, 516, 475, 476, -214, 172, 173, 174, - 479, 480, 521, 172, 173, 174, 207, 483, 208, -214, - 449, 186, 187, 484, 172, 173, 174, 487, 459, 488, - 490, 424, 427, 492, 493, 494, 503, -82, 542, 172, - 173, 174, 496, 510, 511, 414, 515, 517, -214, -214, - -214, -214, 518, 199, 200, -214, 460, -214, 522, 201, - -214, 360, 202, 203, 204, 205, 427, -214, -214, 394, - 530, 531, 565, 559, 485, 547, 172, 173, 174, 544, - -214, 561, -214, -214, -214, 548, -214, -214, -214, -214, - -214, -214, -214, -214, -214, -214, -214, -214, -214, -214, - -214, 562, -253, 570, 107, -214, 407, 242, -214, -214, - -214, -214, -214, 533, -214, -253, 425, -214, 172, 173, - 174, 469, 172, 173, 174, 172, 173, 174, 200, 186, - 187, 387, 567, 201, 443, 520, 202, 203, 204, 205, - 370, 444, 277, 437, -253, -253, -253, -253, 454, 489, - 120, -253, 455, -253, 351, 462, -253, 195, 196, 197, - 198, 199, 200, -253, -253, 498, 0, 201, 0, 0, - 202, 203, 204, 205, 0, 0, -253, 0, -253, -253, - -253, 0, -253, -253, -253, -253, -253, -253, -253, -253, - -253, -253, -253, -253, -253, -253, -253, 0, 0, 0, - 0, -253, -13, 85, -253, -253, -253, -253, -253, 0, - -253, 0, 83, -253, 18, 0, 19, 20, 21, 22, - 23, 0, 0, 24, 25, 26, 27, 28, 0, 29, - 30, 31, 32, 33, 34, 86, 106, 87, 88, 89, - 35, 36, 90, 91, 92, 93, 94, 95, 0, 0, - 0, 96, 97, 98, 99, 37, 0, 100, 38, 39, - 40, 41, 42, 0, 0, 43, 44, 45, 46, 47, - 48, 49, 1, 2, 3, 4, 5, 6, 7, 0, - 0, 50, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 51, 52, 0, - 53, 0, 54, 55, -3, 85, 0, 0, 0, 56, - 101, 57, 58, 0, 83, 0, 18, 0, 19, 20, - 21, 22, 23, 0, 0, 24, 25, 26, 27, 28, - 0, 29, 30, 31, 32, 33, 34, 86, 106, 87, - 88, 89, 35, 36, 90, 91, 92, 93, 94, 95, - 0, 0, 0, 96, 97, 98, 99, 37, 0, 100, - 38, 39, 40, 41, 42, 0, 0, 43, 44, 45, - 46, 47, 48, 49, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 50, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 51, - 52, 0, 53, 0, 54, 55, 85, 0, 0, 0, - 0, 56, 101, 57, 58, 83, 415, 18, 0, 19, - 20, 21, 22, 23, 0, 0, 24, 25, 26, 27, - 28, 0, 29, 30, 31, 32, 33, 34, 86, 106, - 87, 88, 89, 35, 36, 90, 91, 92, 93, 94, - 95, 0, 0, 0, 96, 97, 98, 99, 37, 0, - 100, 38, 39, 40, 41, 42, 0, 0, 43, 44, - 45, 46, 47, 48, 49, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 50, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 51, 52, 0, 53, 0, 54, 55, 85, 0, 0, - 0, 0, 56, 101, 57, 58, 83, 536, 18, 0, - 19, 20, 21, 22, 23, 0, 0, 24, 25, 26, - 27, 28, 0, 29, 30, 31, 32, 33, 34, 86, - 106, 87, 88, 89, 35, 36, 90, 91, 92, 93, - 94, 95, 0, 0, 0, 96, 97, 98, 99, 37, - 0, 100, 38, 39, 40, 41, 42, 0, 0, 43, - 44, 45, 46, 47, 48, 49, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 50, 0, 0, 0, 0, + 85, 262, 117, 445, 20, 525, 387, 120, 164, 120, + 123, 120, 148, 120, 120, 59, 120, 120, 106, 113, + 167, 178, 113, 179, 59, 20, 165, 84, 293, 282, + 554, 431, 144, 120, 120, 153, 385, 16, 155, 404, + 580, 420, 432, 439, 142, 422, 133, 581, 237, 147, + 134, 251, 59, 447, 122, 252, 452, 453, 126, 253, + 128, 129, 402, 130, 131, 140, 20, 424, 141, 121, + 22, 121, 177, 121, 24, 121, 121, 143, 121, 121, + 151, 152, 474, 60, 183, 226, 17, 175, 176, 209, + 233, 210, 60, -266, 403, 150, 121, 186, 148, 479, + 596, 163, 440, 606, 419, -299, 514, 175, 176, 208, + 175, 176, 175, 176, 227, 249, 175, 176, 287, 280, + 60, 254, 215, 228, 180, 267, 148, -265, -295, 177, + -295, 174, 120, 277, 278, 147, 288, 462, 175, 176, + 222, 503, 269, 272, 175, 176, 421, 59, 59, 230, + -297, 220, -297, 175, 176, 160, -267, 175, 176, 321, + 322, 216, 323, 147, 161, 324, 488, 175, 176, 325, + 175, 176, 294, 326, 327, 423, 328, 175, 176, 279, + 425, 156, 209, 223, 210, 361, 157, 236, 530, 531, + 242, 243, 244, 245, 150, -269, 478, 246, 18, 247, + -295, 342, -295, 362, 20, -297, 265, -297, 22, 175, + 176, 286, 24, 224, 276, 60, 60, -268, 181, 182, + 329, 113, 344, 518, 561, 84, 225, 370, 175, 176, + 20, 211, 384, 212, 290, 213, 445, 214, 175, 176, + 118, 175, 176, 175, 176, 119, 573, 231, 295, 296, + 232, 298, 299, 301, 383, 234, -91, 465, 332, 175, + 176, 238, 583, 330, 356, 241, 175, 176, 59, 391, + 175, 176, 184, 185, 261, 272, 175, 176, 360, 550, + 551, 334, 335, 336, 337, 338, 339, 340, 341, 346, + 347, 263, 188, 189, 399, 559, 137, 138, 405, 350, + 351, 352, 353, 355, 418, 363, 364, 188, 366, 367, + 264, 569, 570, 120, 266, 372, 374, 372, 372, 372, + 372, 268, 361, 201, 202, 578, 271, 175, 176, 203, + 218, 219, 204, 205, 206, 207, 60, 585, 586, 202, + 362, 175, 176, 274, 203, 281, 291, 204, 205, 206, + 207, 597, 394, 454, 148, 472, 397, 343, 601, 175, + 176, 523, -300, -300, -300, 207, 401, 293, 444, 473, + 188, 189, 20, 113, 348, 121, 22, 188, 189, 365, + 24, 375, 376, 377, 378, 457, 457, 480, 354, 463, + 379, 147, 369, 382, 469, 408, 409, 197, 198, 199, + 200, 201, 202, 416, 388, 395, 442, 203, 481, 202, + 204, 205, 206, 207, 203, 360, 392, 204, 205, 206, + 207, 400, 59, 435, 374, 438, 438, 393, 402, 176, + 188, 189, 407, 411, 269, 272, 449, 526, 527, 438, + 438, 412, 451, 413, 532, 202, 414, 427, 536, 537, + 203, 417, 433, 204, 205, 206, 207, 456, 148, 199, + 200, 201, 202, 443, 466, 455, 461, 203, 548, 549, + 204, 205, 206, 207, 468, 475, 476, 482, 483, 562, + 1, 2, 3, 4, 5, 6, 7, 484, 485, 490, + 60, 497, 272, 491, 571, 147, 539, 492, 541, 493, + 494, 574, 575, 20, 486, 498, 203, 546, 489, 204, + 205, 206, 207, 188, 189, 500, 113, 501, 113, 504, + 499, 588, 505, 510, 438, 511, 513, 113, 595, 515, + 516, 552, 552, 598, 528, 509, 529, 535, 600, 196, + 197, 198, 199, 200, 201, 202, 517, 566, 519, 534, + 203, 609, 540, 204, 205, 206, 207, 543, 542, 242, + 243, 244, 245, 547, 556, 557, 246, 558, 247, 572, + 576, 438, 438, 577, 584, 589, 599, 590, 591, 555, + 594, 603, 607, 248, 538, 110, 592, 560, 436, 563, + 602, 125, 608, 127, 398, 466, 113, 175, 176, 487, + 381, 444, 459, 512, 135, 552, 435, 438, 460, 139, + 521, 545, 359, 145, 450, 0, 154, 285, 0, 159, + 0, 166, 0, 168, 169, 170, 171, 172, 0, 438, + -13, 86, 0, 84, 0, 0, 0, 0, 20, 0, + 18, 84, 0, 19, 0, 438, 20, 410, 118, 21, + 22, 23, 87, 119, 24, 25, 26, 27, 28, 29, + 30, 0, 31, 32, 33, 34, 35, 36, 88, 109, + 89, 90, 91, 37, 38, 92, 93, 94, 95, 96, + 97, 0, 0, 0, 98, 99, 100, 101, 102, 0, + 0, 39, 0, 103, 40, 41, 42, 43, 44, 0, + 0, 45, 46, 47, 48, 49, 50, 51, 0, 0, + 0, 0, 0, 104, 0, 0, 0, 52, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 51, 52, 0, 53, 0, 54, 55, 85, 0, - 0, 0, 0, 56, 101, 57, 58, 83, 537, 18, - 0, 19, 20, 21, 22, 23, 0, 0, 24, 25, - 26, 27, 28, 0, 29, 30, 31, 32, 33, 34, - 86, 106, 87, 88, 89, 35, 36, 90, 91, 92, - 93, 94, 95, 0, 0, 0, 96, 97, 98, 99, - 37, 0, 100, 38, 39, 40, 41, 42, 0, 0, - 43, 44, 45, 46, 47, 48, 49, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 50, 0, 0, 0, + 284, 0, 53, 54, 0, 55, 0, 56, 57, 0, + 0, 0, 0, 0, 58, 0, 0, 297, 0, 0, + 0, 0, 0, 302, 0, 0, 303, 304, 305, 306, + 307, 308, 309, 310, 311, 312, 313, 314, 315, 316, + 317, 318, 319, 320, -3, 86, 0, 0, 0, 0, + 0, 0, 0, 0, 18, 84, 0, 19, 0, 0, + 20, 0, 0, 21, 22, 23, 87, 0, 24, 25, + 26, 27, 28, 29, 30, 0, 31, 32, 33, 34, + 35, 36, 88, 109, 89, 90, 91, 37, 38, 92, + 93, 94, 95, 96, 97, 0, 0, 0, 98, 99, + 100, 101, 102, 0, 0, 39, 0, 103, 40, 41, + 42, 43, 44, 0, 0, 45, 46, 47, 48, 49, + 50, 51, 0, 0, 0, 0, 0, 104, 0, 0, + 0, 52, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 53, 54, 0, 55, + 86, 56, 57, 0, 0, 0, 0, 0, 58, 18, + 84, 426, 19, 0, 0, 20, 0, 0, 21, 22, + 23, 87, 0, 24, 25, 26, 27, 28, 29, 30, + 0, 31, 32, 33, 34, 35, 36, 88, 109, 89, + 90, 91, 37, 38, 92, 93, 94, 95, 96, 97, + 0, 0, 0, 98, 99, 100, 101, 102, 0, 0, + 39, 0, 103, 40, 41, 42, 43, 44, 0, 0, + 45, 46, 47, 48, 49, 50, 51, 0, 0, 0, + 0, 0, 104, 0, 0, 0, 52, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 477, 0, 0, 0, + 0, 53, 54, 0, 55, 0, 56, 57, 0, 0, + 0, 0, 0, 58, 0, 0, 86, 0, 0, 0, + 0, 0, 0, 0, 0, 18, 84, 506, 19, 0, + 0, 20, 0, 0, 21, 22, 23, 87, 0, 24, + 25, 26, 27, 28, 29, 30, 508, 31, 32, 33, + 34, 35, 36, 88, 109, 89, 90, 91, 37, 38, + 92, 93, 94, 95, 96, 97, 0, 0, 0, 98, + 99, 100, 101, 102, 0, 0, 39, 0, 103, 40, + 41, 42, 43, 44, 0, 0, 45, 46, 47, 48, + 49, 50, 51, 0, 0, 0, 0, 0, 104, 0, + 0, 0, 52, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 86, 0, 53, 54, 0, + 55, 0, 56, 57, 18, 84, 564, 19, 0, 58, + 20, 0, 0, 21, 22, 23, 87, 0, 24, 25, + 26, 27, 28, 29, 30, 0, 31, 32, 33, 34, + 35, 36, 88, 109, 89, 90, 91, 37, 38, 92, + 93, 94, 95, 96, 97, 0, 0, 0, 98, 99, + 100, 101, 102, 0, 0, 39, 0, 103, 40, 41, + 42, 43, 44, 0, 0, 45, 46, 47, 48, 49, + 50, 51, 0, 0, 0, 0, 0, 104, 0, 0, + 0, 52, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 86, 0, 53, 54, 0, 55, + 0, 56, 57, 18, 84, 565, 19, 0, 58, 20, + 0, 0, 21, 22, 23, 87, 0, 24, 25, 26, + 27, 28, 29, 30, 0, 31, 32, 33, 34, 35, + 36, 88, 109, 89, 90, 91, 37, 38, 92, 93, + 94, 95, 96, 97, 0, 0, 0, 98, 99, 100, + 101, 102, 0, 0, 39, 0, 103, 40, 41, 42, + 43, 44, 0, 0, 45, 46, 47, 48, 49, 50, + 51, 0, 0, 0, 0, 0, 104, 0, 0, 0, + 52, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 86, 0, 53, 54, 0, 55, 0, + 56, 57, 18, 84, 568, 19, 0, 58, 20, 0, + 0, 21, 22, 23, 87, 0, 24, 25, 26, 27, + 28, 29, 30, 0, 31, 32, 33, 34, 35, 36, + 88, 109, 89, 90, 91, 37, 38, 92, 93, 94, + 95, 96, 97, 0, 0, 0, 98, 99, 100, 101, + 102, 0, 0, 39, 0, 103, 40, 41, 42, 43, + 44, 0, 0, 45, 46, 47, 48, 49, 50, 51, + 0, 0, 0, 0, 0, 104, 0, 0, 0, 52, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 51, 52, 0, 53, 0, 54, 55, 85, - 0, 0, 0, 0, 56, 101, 57, 58, 83, 539, - 18, 0, 19, 20, 21, 22, 23, 0, 0, 24, - 25, 26, 27, 28, 0, 29, 30, 31, 32, 33, - 34, 86, 106, 87, 88, 89, 35, 36, 90, 91, - 92, 93, 94, 95, 0, 0, 0, 96, 97, 98, - 99, 37, 0, 100, 38, 39, 40, 41, 42, 0, - 0, 43, 44, 45, 46, 47, 48, 49, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 50, 0, 0, + 0, 0, 86, 0, 53, 54, 0, 55, 0, 56, + 57, 18, 84, 0, 19, 0, 58, 20, 0, 0, + 21, 22, 23, 87, 0, 24, 25, 26, 27, 28, + 29, 30, 0, 31, 32, 33, 34, 35, 36, 88, + 109, 89, 90, 91, 37, 38, 92, 93, 94, 95, + 96, 97, 0, 0, 0, 98, 99, 100, 101, 102, + 0, 0, 39, 0, 103, 40, 41, 42, 43, 44, + 0, 0, 45, 46, 47, 48, 49, 50, 51, 0, + 0, 605, 0, 0, 104, 0, 0, 0, 52, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 51, 52, 0, 53, 0, 54, 55, - 85, 0, 0, 0, 0, 56, 101, 57, 58, 83, - 553, 18, 0, 19, 20, 21, 22, 23, 0, 0, - 24, 25, 26, 27, 28, 0, 29, 30, 31, 32, - 33, 34, 86, 106, 87, 88, 89, 35, 36, 90, - 91, 92, 93, 94, 95, 0, 0, 0, 96, 97, - 98, 99, 37, 0, 100, 38, 39, 40, 41, 42, - 0, 0, 43, 44, 45, 46, 47, 48, 49, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 50, 0, + 0, 86, 0, 53, 54, 0, 55, 0, 56, 57, + 18, 84, 0, 19, 0, 58, 20, 0, 0, 21, + 22, 23, 87, 0, 24, 25, 26, 27, 28, 29, + 30, 0, 31, 32, 33, 34, 35, 36, 88, 109, + 89, 90, 91, 37, 38, 92, 93, 94, 95, 96, + 97, 0, 0, 0, 98, 99, 100, 101, 102, 0, + 0, 39, 0, 103, 40, 41, 42, 43, 44, 0, + 0, 45, 46, 47, 48, 49, 50, 51, 0, 0, + 0, 0, 0, 104, 0, 0, 0, 52, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 51, 52, 0, 53, 0, 54, - 55, 85, 0, 0, 0, 0, 56, 101, 57, 58, - 83, 0, 18, 0, 19, 20, 21, 22, 23, 0, - 0, 24, 25, 26, 27, 28, 0, 29, 30, 31, - 32, 33, 34, 86, 106, 87, 88, 89, 35, 36, - 90, 91, 92, 93, 94, 95, 0, 0, 0, 96, - 97, 98, 99, 37, 0, 100, 38, 39, 40, 41, - 42, 0, 0, 43, 44, 45, 46, 47, 48, 49, - 0, 0, 568, 0, 0, 0, 0, 0, 0, 50, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 51, 52, 0, 53, 0, - 54, 55, 85, 0, 0, 0, 0, 56, 101, 57, - 58, 83, 0, 18, 0, 19, 20, 21, 22, 23, - 0, 0, 24, 25, 26, 27, 28, 0, 29, 30, - 31, 32, 33, 34, 86, 106, 87, 88, 89, 35, - 36, 90, 91, 92, 93, 94, 95, 0, 0, 0, - 96, 97, 98, 99, 37, 0, 100, 38, 39, 40, - 41, 42, 0, 0, 43, 44, 45, 46, 47, 48, - 49, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 50, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 51, 52, 0, 53, - 0, 54, 55, 85, 0, 0, 0, 0, 56, 101, - 57, 58, 83, 0, 18, 0, 19, 20, 21, 22, - 23, 0, 0, 24, 25, 26, 27, 28, 0, 29, - 30, 31, 32, 33, 34, 86, 0, 87, 88, 89, - 35, 36, 90, 91, 92, 93, 94, 95, 0, 0, - 0, 96, 97, 98, 99, 37, 0, 100, 38, 39, - 40, 41, 42, 0, 0, 43, 44, 45, 46, 47, - 48, 49, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 50, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 51, 52, 0, - 53, 0, 54, 55, 85, 0, 0, 0, 0, 56, - 101, 57, 58, 0, 0, 18, 0, 19, 20, 21, - 22, 23, 0, 0, 24, 25, 26, 27, 28, 0, - 29, 30, 31, 32, 33, 34, 0, 0, 0, 0, - 0, 35, 36, 0, 0, 0, 0, 0, 186, 187, - 0, 0, 0, 0, 0, 0, 37, 0, 0, 38, - 39, 40, 41, 42, 0, 0, 43, 44, 45, 46, - 47, 48, 49, 192, 193, 194, 195, 196, 197, 198, - 199, 200, 50, 0, 0, 0, 201, 0, 0, 202, - 203, 204, 205, 0, 0, 0, 0, 0, 51, 52, - 0, 53, 0, 54, 55, 85, 0, 0, 0, 0, - 56, -77, 57, 58, 0, 0, 18, 0, 19, 20, + 86, 0, 53, 54, 0, 55, 0, 56, 57, 18, + 84, 0, 19, 0, 58, 20, 0, 0, 21, 22, + 23, 87, 0, 24, 25, 26, 27, 28, 29, 30, + 0, 31, 32, 33, 34, 35, 36, 88, 0, 89, + 90, 91, 37, 38, 92, 93, 94, 95, 96, 97, + 0, 0, 0, 98, 99, 100, 101, 102, 0, 0, + 39, 0, 103, 40, 41, 42, 43, 44, 0, 0, + 45, 46, 47, 48, 49, 50, 51, 0, 0, 0, + 0, 0, 104, 0, 0, 0, 52, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 86, 0, 0, 0, + 0, 53, 54, 0, 55, 18, 56, 57, 19, 0, + 0, 20, 0, 58, 21, 22, 23, -17, 0, 24, + 25, 26, 27, 28, 29, 30, 0, 31, 32, 33, + 34, 35, 36, 0, 0, 0, 0, 0, 37, 38, + 0, 0, 0, 0, 0, 0, 0, 0, 188, 189, + 0, 0, 0, 0, 0, 0, 39, 0, 0, 40, + 41, 42, 43, 44, 0, 0, 45, 46, 47, 48, + 49, 50, 51, 195, 196, 197, 198, 199, 200, 201, + 202, 0, 52, 0, 0, 203, 0, 0, 204, 205, + 206, 207, 86, 0, 0, 0, 0, 53, 54, 0, + 55, 18, 56, 57, 19, 0, 0, 20, 0, 58, 21, 22, 23, 0, 0, 24, 25, 26, 27, 28, - 0, 29, 30, 31, 32, 33, 34, 0, 0, 0, - 0, 0, 35, 36, 0, 0, 0, 0, 186, 187, - 0, 0, 0, 0, 0, 0, 0, 37, 0, 0, - 38, 39, 40, 41, 42, 0, 0, 43, 44, 45, - 46, 47, 48, 49, 193, 194, 195, 196, 197, 198, - 199, 200, 0, 50, 0, 0, 201, 0, 0, 202, - 203, 204, 205, 0, 0, 0, 0, 0, 0, 51, - 52, 0, 53, 0, 54, 55, 0, 0, 0, 0, - -77, 56, 0, 57, 58, 83, 0, 18, 0, 19, - 20, 21, 22, 23, 0, 0, 141, 25, 26, 27, - 28, 119, 29, 30, 31, 32, 33, 34, 0, 0, - 0, 0, 0, 35, 36, 0, 0, 0, 186, 187, - 0, 0, 0, 0, 0, 0, 0, 0, 37, 0, - 0, 38, 39, 40, 41, 42, 0, 0, 43, 44, - 45, 46, 47, 48, 49, 194, 195, 196, 197, 198, - 199, 200, 0, 0, 50, 0, 201, 0, 0, 202, - 203, 204, 205, 0, 0, 0, 0, 0, 0, 0, - 51, 52, 0, 53, 0, 54, 55, 0, 0, 0, - 0, 0, 56, 0, 57, 58, 83, 0, 18, 0, - 19, 20, 21, 22, 23, 0, 0, 24, 25, 26, - 27, 28, 0, 29, 30, 31, 32, 33, 34, 0, - 0, 0, 0, 0, 35, 36, 236, 237, 238, 239, - 0, 0, 0, 240, 0, 241, 0, 0, 0, 37, - 0, 0, 38, 39, 40, 41, 42, 0, 0, 43, - 44, 45, 46, 47, 48, 49, 0, 0, 0, 0, - 172, 173, 174, 0, 0, 50, 0, 0, 0, 0, + 29, 30, 0, 31, 32, 33, 34, 35, 36, 0, + 0, 0, 0, 0, 37, 38, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 51, 52, 0, 53, 0, 54, 55, 0, 0, - 0, 0, 0, 56, 0, 57, 58, 18, 114, 19, - 20, 21, 22, 23, 0, 0, 24, 25, 26, 27, - 28, 0, 29, 30, 31, 32, 33, 34, 0, 0, - 0, 0, 0, 35, 36, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 37, 0, - 0, 38, 39, 40, 41, 42, 0, 0, 43, 44, - 45, 46, 47, 48, 49, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 50, 0, 0, 0, 0, 0, + 0, 0, 39, 0, 0, 40, 41, 42, 43, 44, + -219, 0, 45, 46, 47, 48, 49, 50, 51, 0, + 0, 209, 0, 210, -219, -219, 0, 0, 52, 0, + 0, 0, -219, -219, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 53, 54, 0, 55, 0, 56, 57, + 0, 0, 0, 0, -17, 58, 0, -219, -219, -219, + -219, 0, 0, 0, -219, 0, -219, 0, 0, 0, + 0, 0, -219, 0, 0, 0, 0, 0, 0, -219, + -219, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, -219, 0, 0, -219, -219, 0, -219, -219, + -219, -219, -219, -219, -219, -219, -219, -219, -219, -219, + -219, -219, -258, 188, 189, 0, -219, 0, 0, -219, + -219, -219, -219, -219, 0, 0, -258, -258, 0, 0, + 0, 0, 0, 0, -258, -258, 0, 194, 195, 196, + 197, 198, 199, 200, 201, 202, 0, 0, 0, 0, + 203, 0, 0, 204, 205, 206, 207, 0, 0, -258, + -258, -258, -258, 0, 0, 0, -258, 0, -258, 0, + 0, 0, 0, 0, -258, 0, 0, 0, 0, 0, + 0, -258, -258, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, -258, 0, 0, -258, -258, 0, + -258, -258, -258, -258, -258, -258, -258, -258, -258, -258, + -258, -258, -258, -258, 0, 0, 0, 0, -258, 0, + 0, -258, -258, -258, -258, -258, 18, 84, 0, 19, + 0, 0, 20, 0, 0, 21, 22, 23, 0, 0, + 24, 25, 146, 27, 28, 29, 30, 119, 31, 32, + 33, 34, 35, 36, 0, 0, 0, 0, 0, 37, + 38, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 39, 0, 0, + 40, 41, 42, 43, 44, 0, 0, 45, 46, 47, + 48, 49, 50, 51, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 52, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 53, 54, + 0, 55, 0, 56, 57, 18, 84, 0, 19, 0, + 58, 20, 0, 0, 21, 22, 23, 0, 0, 24, + 25, 26, 27, 28, 29, 30, 0, 31, 32, 33, + 34, 35, 36, 0, 0, 0, 0, 0, 37, 38, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 51, 52, 0, 53, 0, 54, 55, 0, 0, 0, - 0, 0, 56, 0, 57, 58, 18, 0, 19, 20, + 0, 0, 0, 0, 0, 0, 39, 0, 0, 40, + 41, 42, 43, 44, 0, 0, 45, 46, 47, 48, + 49, 50, 51, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 52, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 53, 54, 0, + 55, 18, 56, 57, 19, 0, 0, 20, 0, 58, 21, 22, 23, 0, 0, 24, 25, 26, 27, 28, - 0, 29, 30, 31, 32, 33, 34, 0, 0, 0, - 0, 0, 35, 36, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 37, 0, 0, - 38, 39, 40, 41, 42, 0, 0, 43, 44, 45, - 46, 47, 48, 49, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 50, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 51, - 52, 0, 53, 0, 54, 55, 0, 0, 0, 0, - 0, 56, 149, 57, 58, 18, 0, 19, 20, 21, - 22, 23, 0, 0, 24, 25, 26, 27, 28, 0, - 29, 30, 31, 32, 33, 34, 0, 0, 0, 0, - 0, 35, 36, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 37, 0, 0, 38, - 39, 40, 41, 42, 0, 0, 43, 44, 45, 46, - 47, 48, 49, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 50, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 51, 52, - 0, 53, 0, 54, 55, 0, 0, 0, 0, 168, - 56, 0, 57, 58, 18, 0, 19, 20, 21, 22, - 23, 0, 0, 24, 25, 26, 27, 28, 0, 29, - 30, 31, 32, 33, 34, 0, 0, 0, 0, 0, - 35, 36, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 37, 0, 0, 38, 39, - 40, 41, 42, 0, 0, 43, 44, 45, 46, 47, - 48, 49, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 50, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 51, 52, 0, - 53, 0, 54, 55, 0, 0, 0, 0, 266, 56, - 0, 57, 58, 18, 0, 19, 20, 21, 22, 23, - 0, 0, 24, 25, 26, 27, 28, 0, 29, 30, - 31, 32, 33, 34, 0, 0, 0, 0, 0, 35, - 36, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 37, 0, 0, 38, 39, 40, - 41, 42, 0, 0, 43, 44, 45, 46, 47, 48, - 49, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 50, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 51, 52, 0, 53, - 0, 54, 55, 0, 0, 0, 0, 281, 56, 0, - 57, 58, 18, 0, 19, 20, 21, 22, 23, 0, - 0, 24, 25, 26, 27, 28, 0, 29, 30, 31, - 32, 33, 34, 0, 0, 0, 0, 0, 35, 36, + 29, 30, 0, 31, 32, 33, 34, 35, 36, 0, + 0, 0, 0, 0, 37, 38, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 37, 0, 0, 38, 39, 40, 41, - 42, 0, 0, 43, 44, 45, 46, 47, 48, 49, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 50, + 0, 0, 39, 0, 0, 40, 41, 42, 43, 44, + 0, 0, 45, 46, 47, 48, 49, 50, 51, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 52, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 51, 52, 0, 53, 0, - 54, 55, 0, 0, 0, 0, 293, 56, 0, 57, - 58, 18, 0, 19, 20, 21, 22, 23, 0, 0, - 24, 25, 26, 27, 28, 0, 29, 30, 31, 32, - 33, 34, 0, 0, 0, 0, 0, 35, 36, 0, + 0, 0, 0, 53, 54, 0, 55, 18, 56, 57, + 19, 0, 0, 20, 173, 58, 21, 22, 23, 0, + 0, 24, 25, 26, 27, 28, 29, 30, 0, 31, + 32, 33, 34, 35, 36, 0, 0, 0, 0, 0, + 37, 38, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 39, 0, + 0, 40, 41, 42, 43, 44, 0, 0, 45, 46, + 47, 48, 49, 50, 51, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 52, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 53, + 54, 0, 55, 18, 56, 57, 19, 0, 0, 20, + 275, 58, 21, 22, 23, 0, 0, 24, 25, 26, + 27, 28, 29, 30, 0, 31, 32, 33, 34, 35, + 36, 0, 0, 0, 0, 0, 37, 38, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 37, 0, 0, 38, 39, 40, 41, 42, - 0, 0, 43, 44, 45, 46, 47, 48, 49, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 50, 0, + 0, 0, 0, 0, 39, 0, 0, 40, 41, 42, + 43, 44, 0, 0, 45, 46, 47, 48, 49, 50, + 51, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 52, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 53, 54, 0, 55, 18, + 56, 57, 19, 0, 0, 20, 289, 58, 21, 22, + 23, 0, 0, 24, 25, 26, 27, 28, 29, 30, + 0, 31, 32, 33, 34, 35, 36, 0, 0, 0, + 0, 0, 37, 38, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 51, 52, 0, 53, 0, 54, - 55, 0, 0, 0, 0, 326, 56, 0, 57, 58, - 18, 0, 19, 20, 21, 22, 23, 0, 0, 24, - 25, 26, 27, 28, 0, 29, 30, 31, 32, 33, - 34, 0, 0, 0, 0, 0, 35, 36, 0, 0, + 39, 0, 0, 40, 41, 42, 43, 44, 0, 0, + 45, 46, 47, 48, 49, 50, 51, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 52, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 37, 0, 0, 38, 39, 40, 41, 42, 0, - 0, 43, 44, 45, 46, 47, 48, 49, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 50, 0, 0, + 0, 53, 54, 0, 55, 18, 56, 57, 19, 0, + 0, 20, 300, 58, 21, 22, 23, 0, 0, 24, + 25, 26, 27, 28, 29, 30, 0, 31, 32, 33, + 34, 35, 36, 0, 0, 0, 0, 0, 37, 38, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 51, 52, 0, 53, 0, 54, 55, - 0, 0, 0, 0, 385, 56, 0, 57, 58, 18, - 0, 19, 20, 21, 22, 23, 0, 0, 24, 25, - 26, 27, 28, 0, 29, 30, 31, 32, 33, 34, - 0, 0, 0, 0, 0, 35, 36, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 39, 0, 0, 40, + 41, 42, 43, 44, 0, 0, 45, 46, 47, 48, + 49, 50, 51, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 52, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 53, 54, 0, + 55, 18, 56, 57, 19, 0, 0, 20, 333, 58, + 21, 22, 23, 0, 0, 24, 25, 26, 27, 28, + 29, 30, 0, 31, 32, 33, 34, 35, 36, 0, + 0, 0, 0, 0, 37, 38, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 37, 0, 0, 38, 39, 40, 41, 42, 0, 0, - 43, 44, 45, 46, 47, 48, 49, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 50, 0, 0, 0, + 0, 0, 39, 0, 0, 40, 41, 42, 43, 44, + 0, 0, 45, 46, 47, 48, 49, 50, 51, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 52, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 51, 52, 0, 53, 0, 54, 55, 0, - 0, 0, 0, 402, 56, 0, 57, 58, 18, 0, - 19, 20, 21, 22, 23, 0, 0, 24, 25, 26, - 27, 28, 0, 29, 30, 31, 32, 33, 34, 0, - 0, 0, 0, 0, 35, 36, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 37, - 0, 0, 38, 39, 40, 41, 42, 0, 0, 43, - 44, 45, 46, 47, 48, 49, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 50, 0, 0, 0, 0, + 0, 0, 0, 53, 54, 0, 55, 18, 56, 57, + 19, 0, 0, 20, 396, 58, 21, 22, 23, 0, + 0, 24, 25, 26, 27, 28, 29, 30, 0, 31, + 32, 33, 34, 35, 36, 0, 0, 0, 0, 0, + 37, 38, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 39, 0, + 0, 40, 41, 42, 43, 44, 0, 0, 45, 46, + 47, 48, 49, 50, 51, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 52, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 53, + 54, 0, 55, 18, 56, 57, 19, 0, 0, 20, + 415, 58, 21, 22, 23, 0, 0, 24, 25, 26, + 27, 28, 29, 30, 0, 31, 32, 33, 34, 35, + 36, 0, 0, 0, 0, 0, 37, 38, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 51, 52, 0, 53, 0, 54, 55, 0, 0, - 0, 0, 0, 56, 0, 57, 58, 18, 0, 19, - 20, 21, 22, 23, 0, 0, 24, 25, 26, 27, - 28, 0, 29, 30, 31, 32, 33, 34, 0, 0, - 0, 0, 0, 35, 36, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 37, 0, - 0, 38, 39, 40, 41, 42, 0, 0, 43, 44, - 45, 46, 47, 48, 49, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 50, 0, 0, 0, 0, 185, - 0, 0, 0, 0, 0, 0, 186, 187, 0, 0, - 51, 52, 0, 53, 0, 54, 55, 0, 0, 0, - 0, 0, 275, 0, 57, 58, 188, 189, 395, 190, - 191, 192, 193, 194, 195, 196, 197, 198, 199, 200, - 0, 0, 0, 0, 201, 185, 0, 202, 203, 204, - 205, 0, 186, 187, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 39, 0, 0, 40, 41, 42, + 43, 44, 0, 0, 45, 46, 47, 48, 49, 50, + 51, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 52, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 53, 54, 0, 55, 18, + 56, 57, 19, 0, 0, 20, 0, 58, 21, 22, + 23, 0, 0, 24, 25, 26, 27, 28, 29, 30, + 0, 31, 32, 33, 34, 35, 36, 0, 0, 0, + 0, 0, 37, 38, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 188, 189, 0, 190, 191, 192, 193, 194, - 195, 196, 197, 198, 199, 200, 0, 0, 0, 0, - 201, 185, 0, 202, 203, 204, 205, 0, 186, 187, + 39, 0, 0, 40, 41, 42, 43, 44, 0, 0, + 45, 46, 47, 48, 49, 50, 51, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 52, 0, 187, 0, + 0, 0, 0, 0, 0, 188, 189, 0, 0, 0, + 0, 53, 54, 0, 55, 0, 56, 57, 0, 0, + 0, 0, 0, 283, 190, 191, 406, 192, 193, 194, + 195, 196, 197, 198, 199, 200, 201, 202, 0, 0, + 0, 0, 203, 187, 0, 204, 205, 206, 207, 0, + 188, 189, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 190, + 191, 0, 192, 193, 194, 195, 196, 197, 198, 199, + 200, 201, 202, 0, 0, 0, 0, 203, 187, 0, + 204, 205, 206, 207, 0, 188, 189, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 189, - 0, 190, 191, 192, 193, 194, 195, 196, 197, 198, - 199, 200, 0, 0, 0, 0, 201, -290, 0, 202, - 203, 204, 205, 0, 186, 187, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 191, 0, 192, 193, 194, + 195, 196, 197, 198, 199, 200, 201, 202, 0, 0, + 0, 0, 203, -300, 0, 204, 205, 206, 207, 0, + 188, 189, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 190, 191, 192, - 193, 194, 195, 196, 197, 198, 199, 200, 0, 0, - 0, 0, 201, 0, 0, 202, 203, 204, 205 + 0, 0, 192, 193, 194, 195, 196, 197, 198, 199, + 200, 201, 202, 0, 0, 0, 0, 203, 0, 0, + 204, 205, 206, 207 }; static const yytype_int16 yycheck[] = { - 17, 125, 10, 48, 9, 42, 48, 137, 138, 345, - 18, 10, 12, 50, 24, 355, 10, 12, 474, 355, - 262, 505, 358, 359, 10, 21, 12, 21, 0, 153, - 26, 12, 26, 10, 21, 22, 23, 45, 25, 26, - 73, 80, 10, 10, 21, 12, 16, 17, 56, 26, - 16, 17, 16, 17, 18, 42, 43, 91, 92, 21, - 22, 23, 12, 25, 26, 10, 10, 12, 12, 89, - 90, 58, 111, 80, 107, 70, 107, 10, 83, 12, - 42, 43, 566, 46, 47, 10, 48, 12, 125, 70, - 91, 16, 17, 18, 107, 57, 58, 22, 108, 16, - 17, 557, 438, 70, 68, 10, 106, 12, 145, 108, - 155, 89, 10, 155, 12, 109, 153, 76, 77, 78, - 128, 107, 19, 20, 13, 70, 256, 107, 136, 137, - 138, 13, 109, 110, 96, 32, 107, 70, 63, 109, - 37, 477, 478, 109, 41, 109, 13, 44, 156, 13, - 47, 138, 49, 21, 51, 52, 53, 54, 55, 102, - 103, 104, 105, 10, 172, 173, 174, 10, 176, 177, - 178, 13, 216, 217, 510, 13, 138, 419, 35, 36, - 225, 98, 107, 225, 109, 110, 107, 76, 77, 78, - 107, 13, 109, 155, 76, 77, 78, 214, 206, 207, - 208, 209, 210, 211, 212, 213, 13, 107, 544, 76, - 77, 78, 76, 77, 78, 220, 221, 222, 223, 224, - 257, 226, 227, 563, 229, 230, 107, 469, 236, 237, - 238, 239, 240, 241, 76, 77, 78, 107, 76, 77, - 78, 99, 68, 205, 102, 103, 104, 105, 256, 88, - 89, 375, 13, 107, 76, 77, 78, 10, 155, 12, - 108, 107, 270, 225, 10, 48, 12, 275, 108, 76, - 77, 78, 98, 76, 77, 78, 406, 285, 175, 107, - 73, 107, 106, 109, 181, 24, 70, 184, 185, 186, - 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, - 197, 198, 199, 200, 201, 108, 314, 315, 106, 11, - 11, 356, 70, 321, 356, 76, 77, 78, 12, 21, - 22, 23, 98, 25, 26, 76, 77, 78, 21, 76, - 77, 78, 21, 107, 342, 343, 344, 345, 375, 41, - 42, 43, 44, 76, 77, 78, 26, 355, 472, 508, - 358, 359, 357, 80, 24, 57, 58, 108, 74, 11, - 322, 108, 61, 62, 523, 524, 106, 476, 24, 12, - 479, 376, 78, 106, 483, 484, 535, 107, 76, 77, - 78, 110, 110, 391, 110, 347, 545, 546, 110, 110, - 61, 19, 501, 502, 356, 94, 21, 99, 406, 558, - 99, 109, 511, 102, 103, 104, 105, 76, 77, 78, - 108, 416, 107, 81, 106, 420, 107, 526, 76, 77, - 78, 530, 531, 94, 61, 62, 431, 11, 99, 131, - 438, 102, 103, 104, 105, 472, 138, 106, 446, 548, - 76, 77, 78, 42, 43, 44, 45, 11, 106, 11, - 49, 11, 51, 562, 91, 92, 93, 94, 11, 106, - 21, 570, 99, 107, 106, 102, 103, 104, 105, 477, - 478, 488, 108, 490, 106, 106, 0, 76, 77, 78, - 106, 108, 499, 76, 77, 78, 10, 106, 12, 13, - 495, 61, 62, 106, 76, 77, 78, 74, 395, 10, - 10, 509, 510, 11, 106, 108, 10, 106, 525, 76, - 77, 78, 108, 107, 106, 108, 106, 72, 42, 43, - 44, 45, 108, 93, 94, 49, 108, 51, 108, 99, - 54, 233, 102, 103, 104, 105, 544, 61, 62, 106, - 106, 106, 559, 71, 441, 108, 76, 77, 78, 107, - 74, 20, 76, 77, 78, 106, 80, 81, 82, 83, - 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, - 94, 106, 0, 106, 13, 99, 106, 106, 102, 103, - 104, 105, 106, 509, 108, 13, 343, 111, 76, 77, - 78, 418, 76, 77, 78, 76, 77, 78, 94, 61, - 62, 277, 563, 99, 370, 495, 102, 103, 104, 105, - 248, 371, 155, 356, 42, 43, 44, 45, 106, 451, - 322, 49, 106, 51, 225, 106, 54, 89, 90, 91, - 92, 93, 94, 61, 62, 470, -1, 99, -1, -1, - 102, 103, 104, 105, -1, -1, 74, -1, 76, 77, - 78, -1, 80, 81, 82, 83, 84, 85, 86, 87, - 88, 89, 90, 91, 92, 93, 94, -1, -1, -1, - -1, 99, 0, 1, 102, 103, 104, 105, 106, -1, - 108, -1, 10, 111, 12, -1, 14, 15, 16, 17, - 18, -1, -1, 21, 22, 23, 24, 25, -1, 27, - 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, - 38, 39, 40, 41, 42, 43, 44, 45, -1, -1, - -1, 49, 50, 51, 52, 53, -1, 55, 56, 57, - 58, 59, 60, -1, -1, 63, 64, 65, 66, 67, - 68, 69, 3, 4, 5, 6, 7, 8, 9, -1, - -1, 79, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, 95, 96, -1, - 98, -1, 100, 101, 0, 1, -1, -1, -1, 107, - 108, 109, 110, -1, 10, -1, 12, -1, 14, 15, - 16, 17, 18, -1, -1, 21, 22, 23, 24, 25, - -1, 27, 28, 29, 30, 31, 32, 33, 34, 35, + 11, 130, 17, 363, 16, 492, 270, 18, 50, 20, + 19, 22, 44, 24, 25, 10, 27, 28, 12, 14, + 52, 11, 17, 13, 19, 16, 50, 11, 13, 158, + 527, 11, 43, 44, 45, 46, 14, 0, 47, 14, + 22, 14, 22, 353, 81, 14, 13, 29, 104, 44, + 114, 16, 47, 363, 18, 20, 366, 367, 22, 24, + 24, 25, 13, 27, 28, 114, 16, 14, 114, 18, + 20, 20, 15, 22, 24, 24, 25, 114, 27, 28, + 44, 45, 14, 10, 98, 76, 9, 85, 86, 11, + 101, 13, 19, 78, 22, 44, 45, 96, 130, 14, + 587, 50, 114, 600, 22, 11, 14, 85, 86, 114, + 85, 86, 85, 86, 105, 109, 85, 86, 160, 151, + 47, 116, 11, 114, 114, 136, 158, 78, 11, 15, + 13, 58, 143, 142, 143, 130, 160, 23, 85, 86, + 114, 451, 137, 138, 85, 86, 22, 142, 143, 98, + 11, 26, 13, 85, 86, 105, 78, 85, 86, 10, + 11, 84, 13, 158, 114, 16, 430, 85, 86, 20, + 85, 86, 113, 24, 25, 22, 27, 85, 86, 143, + 22, 26, 11, 114, 13, 227, 31, 22, 498, 499, + 47, 48, 49, 50, 143, 78, 22, 54, 10, 56, + 11, 216, 13, 227, 16, 11, 133, 13, 20, 85, + 86, 160, 24, 114, 141, 142, 143, 78, 98, 99, + 71, 216, 217, 487, 534, 11, 114, 238, 85, 86, + 16, 11, 264, 13, 161, 11, 596, 13, 85, 86, + 26, 85, 86, 85, 86, 31, 556, 114, 175, 176, + 114, 178, 179, 180, 263, 11, 113, 386, 207, 85, + 86, 53, 572, 114, 76, 22, 85, 86, 263, 113, + 85, 86, 96, 97, 14, 270, 85, 86, 227, 51, + 52, 208, 209, 210, 211, 212, 213, 214, 215, 218, + 219, 114, 69, 70, 113, 532, 37, 38, 113, 222, + 223, 224, 225, 226, 113, 228, 229, 69, 231, 232, + 81, 548, 549, 324, 113, 242, 243, 244, 245, 246, + 247, 29, 364, 100, 101, 562, 78, 85, 86, 106, + 90, 91, 109, 110, 111, 112, 263, 574, 575, 101, + 364, 85, 86, 113, 106, 22, 78, 109, 110, 111, + 112, 588, 279, 368, 386, 113, 283, 26, 595, 85, + 86, 490, 109, 110, 111, 112, 293, 13, 363, 113, + 69, 70, 16, 368, 26, 324, 20, 69, 70, 114, + 24, 244, 245, 246, 247, 380, 381, 113, 105, 384, + 31, 386, 59, 15, 389, 322, 323, 96, 97, 98, + 99, 100, 101, 330, 29, 12, 355, 106, 417, 101, + 109, 110, 111, 112, 106, 364, 82, 109, 110, 111, + 112, 29, 417, 350, 351, 352, 353, 113, 13, 86, + 69, 70, 25, 25, 429, 430, 363, 493, 494, 366, + 367, 25, 365, 25, 500, 101, 25, 18, 504, 505, + 106, 114, 26, 109, 110, 111, 112, 88, 490, 98, + 99, 100, 101, 114, 387, 114, 113, 106, 524, 525, + 109, 110, 111, 112, 114, 402, 12, 12, 12, 535, + 3, 4, 5, 6, 7, 8, 9, 12, 12, 26, + 417, 440, 487, 113, 550, 490, 511, 113, 513, 113, + 113, 557, 558, 16, 427, 114, 106, 522, 431, 109, + 110, 111, 112, 69, 70, 113, 511, 22, 513, 113, + 443, 577, 113, 82, 451, 11, 11, 522, 584, 12, + 113, 526, 527, 589, 15, 462, 113, 113, 594, 95, + 96, 97, 98, 99, 100, 101, 22, 542, 22, 114, + 106, 607, 113, 109, 110, 111, 112, 22, 80, 47, + 48, 49, 50, 22, 114, 113, 54, 113, 56, 114, + 22, 498, 499, 113, 113, 113, 591, 17, 79, 528, + 113, 60, 113, 109, 507, 13, 581, 533, 351, 538, + 596, 21, 603, 23, 285, 518, 591, 85, 86, 429, + 255, 596, 381, 468, 34, 600, 533, 534, 382, 39, + 488, 518, 227, 43, 364, -1, 46, 160, -1, 49, + -1, 51, -1, 53, 54, 55, 56, 57, -1, 556, + 0, 1, -1, 11, -1, -1, -1, -1, 16, -1, + 10, 11, -1, 13, -1, 572, 16, 25, 26, 19, + 20, 21, 22, 31, 24, 25, 26, 27, 28, 29, + 30, -1, 32, 33, 34, 35, 36, 37, 38, 39, + 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, + 50, -1, -1, -1, 54, 55, 56, 57, 58, -1, + -1, 61, -1, 63, 64, 65, 66, 67, 68, -1, + -1, 71, 72, 73, 74, 75, 76, 77, -1, -1, + -1, -1, -1, 83, -1, -1, -1, 87, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + 160, -1, 102, 103, -1, 105, -1, 107, 108, -1, + -1, -1, -1, -1, 114, -1, -1, 177, -1, -1, + -1, -1, -1, 183, -1, -1, 186, 187, 188, 189, + 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, + 200, 201, 202, 203, 0, 1, -1, -1, -1, -1, + -1, -1, -1, -1, 10, 11, -1, 13, -1, -1, + 16, -1, -1, 19, 20, 21, 22, -1, 24, 25, + 26, 27, 28, 29, 30, -1, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, - -1, -1, -1, 49, 50, 51, 52, 53, -1, 55, - 56, 57, 58, 59, 60, -1, -1, 63, 64, 65, - 66, 67, 68, 69, -1, -1, -1, -1, -1, -1, - -1, -1, -1, 79, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, 95, - 96, -1, 98, -1, 100, 101, 1, -1, -1, -1, - -1, 107, 108, 109, 110, 10, 11, 12, -1, 14, - 15, 16, 17, 18, -1, -1, 21, 22, 23, 24, - 25, -1, 27, 28, 29, 30, 31, 32, 33, 34, + 46, 47, 48, 49, 50, -1, -1, -1, 54, 55, + 56, 57, 58, -1, -1, 61, -1, 63, 64, 65, + 66, 67, 68, -1, -1, 71, 72, 73, 74, 75, + 76, 77, -1, -1, -1, -1, -1, 83, -1, -1, + -1, 87, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, 102, 103, -1, 105, + 1, 107, 108, -1, -1, -1, -1, -1, 114, 10, + 11, 12, 13, -1, -1, 16, -1, -1, 19, 20, + 21, 22, -1, 24, 25, 26, 27, 28, 29, 30, + -1, 32, 33, 34, 35, 36, 37, 38, 39, 40, + 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, + -1, -1, -1, 54, 55, 56, 57, 58, -1, -1, + 61, -1, 63, 64, 65, 66, 67, 68, -1, -1, + 71, 72, 73, 74, 75, 76, 77, -1, -1, -1, + -1, -1, 83, -1, -1, -1, 87, -1, -1, -1, + -1, -1, -1, -1, -1, -1, 406, -1, -1, -1, + -1, 102, 103, -1, 105, -1, 107, 108, -1, -1, + -1, -1, -1, 114, -1, -1, 1, -1, -1, -1, + -1, -1, -1, -1, -1, 10, 11, 12, 13, -1, + -1, 16, -1, -1, 19, 20, 21, 22, -1, 24, + 25, 26, 27, 28, 29, 30, 456, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, - 45, -1, -1, -1, 49, 50, 51, 52, 53, -1, - 55, 56, 57, 58, 59, 60, -1, -1, 63, 64, - 65, 66, 67, 68, 69, -1, -1, -1, -1, -1, - -1, -1, -1, -1, 79, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - 95, 96, -1, 98, -1, 100, 101, 1, -1, -1, - -1, -1, 107, 108, 109, 110, 10, 11, 12, -1, - 14, 15, 16, 17, 18, -1, -1, 21, 22, 23, - 24, 25, -1, 27, 28, 29, 30, 31, 32, 33, - 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, - 44, 45, -1, -1, -1, 49, 50, 51, 52, 53, - -1, 55, 56, 57, 58, 59, 60, -1, -1, 63, - 64, 65, 66, 67, 68, 69, -1, -1, -1, -1, - -1, -1, -1, -1, -1, 79, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, 95, 96, -1, 98, -1, 100, 101, 1, -1, - -1, -1, -1, 107, 108, 109, 110, 10, 11, 12, - -1, 14, 15, 16, 17, 18, -1, -1, 21, 22, - 23, 24, 25, -1, 27, 28, 29, 30, 31, 32, - 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, - 43, 44, 45, -1, -1, -1, 49, 50, 51, 52, - 53, -1, 55, 56, 57, 58, 59, 60, -1, -1, - 63, 64, 65, 66, 67, 68, 69, -1, -1, -1, - -1, -1, -1, -1, -1, -1, 79, -1, -1, -1, + 45, 46, 47, 48, 49, 50, -1, -1, -1, 54, + 55, 56, 57, 58, -1, -1, 61, -1, 63, 64, + 65, 66, 67, 68, -1, -1, 71, 72, 73, 74, + 75, 76, 77, -1, -1, -1, -1, -1, 83, -1, + -1, -1, 87, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, 1, -1, 102, 103, -1, + 105, -1, 107, 108, 10, 11, 12, 13, -1, 114, + 16, -1, -1, 19, 20, 21, 22, -1, 24, 25, + 26, 27, 28, 29, 30, -1, 32, 33, 34, 35, + 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, + 46, 47, 48, 49, 50, -1, -1, -1, 54, 55, + 56, 57, 58, -1, -1, 61, -1, 63, 64, 65, + 66, 67, 68, -1, -1, 71, 72, 73, 74, 75, + 76, 77, -1, -1, -1, -1, -1, 83, -1, -1, + -1, 87, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, 1, -1, 102, 103, -1, 105, + -1, 107, 108, 10, 11, 12, 13, -1, 114, 16, + -1, -1, 19, 20, 21, 22, -1, 24, 25, 26, + 27, 28, 29, 30, -1, 32, 33, 34, 35, 36, + 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, + 47, 48, 49, 50, -1, -1, -1, 54, 55, 56, + 57, 58, -1, -1, 61, -1, 63, 64, 65, 66, + 67, 68, -1, -1, 71, 72, 73, 74, 75, 76, + 77, -1, -1, -1, -1, -1, 83, -1, -1, -1, + 87, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, 1, -1, 102, 103, -1, 105, -1, + 107, 108, 10, 11, 12, 13, -1, 114, 16, -1, + -1, 19, 20, 21, 22, -1, 24, 25, 26, 27, + 28, 29, 30, -1, 32, 33, 34, 35, 36, 37, + 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, + 48, 49, 50, -1, -1, -1, 54, 55, 56, 57, + 58, -1, -1, 61, -1, 63, 64, 65, 66, 67, + 68, -1, -1, 71, 72, 73, 74, 75, 76, 77, + -1, -1, -1, -1, -1, 83, -1, -1, -1, 87, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, 95, 96, -1, 98, -1, 100, 101, 1, - -1, -1, -1, -1, 107, 108, 109, 110, 10, 11, - 12, -1, 14, 15, 16, 17, 18, -1, -1, 21, - 22, 23, 24, 25, -1, 27, 28, 29, 30, 31, - 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, - 42, 43, 44, 45, -1, -1, -1, 49, 50, 51, - 52, 53, -1, 55, 56, 57, 58, 59, 60, -1, - -1, 63, 64, 65, 66, 67, 68, 69, -1, -1, - -1, -1, -1, -1, -1, -1, -1, 79, -1, -1, + -1, -1, 1, -1, 102, 103, -1, 105, -1, 107, + 108, 10, 11, -1, 13, -1, 114, 16, -1, -1, + 19, 20, 21, 22, -1, 24, 25, 26, 27, 28, + 29, 30, -1, 32, 33, 34, 35, 36, 37, 38, + 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, + 49, 50, -1, -1, -1, 54, 55, 56, 57, 58, + -1, -1, 61, -1, 63, 64, 65, 66, 67, 68, + -1, -1, 71, 72, 73, 74, 75, 76, 77, -1, + -1, 80, -1, -1, 83, -1, -1, -1, 87, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, 95, 96, -1, 98, -1, 100, 101, - 1, -1, -1, -1, -1, 107, 108, 109, 110, 10, - 11, 12, -1, 14, 15, 16, 17, 18, -1, -1, - 21, 22, 23, 24, 25, -1, 27, 28, 29, 30, - 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, - 41, 42, 43, 44, 45, -1, -1, -1, 49, 50, - 51, 52, 53, -1, 55, 56, 57, 58, 59, 60, - -1, -1, 63, 64, 65, 66, 67, 68, 69, -1, - -1, -1, -1, -1, -1, -1, -1, -1, 79, -1, + -1, 1, -1, 102, 103, -1, 105, -1, 107, 108, + 10, 11, -1, 13, -1, 114, 16, -1, -1, 19, + 20, 21, 22, -1, 24, 25, 26, 27, 28, 29, + 30, -1, 32, 33, 34, 35, 36, 37, 38, 39, + 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, + 50, -1, -1, -1, 54, 55, 56, 57, 58, -1, + -1, 61, -1, 63, 64, 65, 66, 67, 68, -1, + -1, 71, 72, 73, 74, 75, 76, 77, -1, -1, + -1, -1, -1, 83, -1, -1, -1, 87, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, 95, 96, -1, 98, -1, 100, - 101, 1, -1, -1, -1, -1, 107, 108, 109, 110, - 10, -1, 12, -1, 14, 15, 16, 17, 18, -1, - -1, 21, 22, 23, 24, 25, -1, 27, 28, 29, - 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, - 40, 41, 42, 43, 44, 45, -1, -1, -1, 49, - 50, 51, 52, 53, -1, 55, 56, 57, 58, 59, - 60, -1, -1, 63, 64, 65, 66, 67, 68, 69, - -1, -1, 72, -1, -1, -1, -1, -1, -1, 79, + 1, -1, 102, 103, -1, 105, -1, 107, 108, 10, + 11, -1, 13, -1, 114, 16, -1, -1, 19, 20, + 21, 22, -1, 24, 25, 26, 27, 28, 29, 30, + -1, 32, 33, 34, 35, 36, 37, 38, -1, 40, + 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, + -1, -1, -1, 54, 55, 56, 57, 58, -1, -1, + 61, -1, 63, 64, 65, 66, 67, 68, -1, -1, + 71, 72, 73, 74, 75, 76, 77, -1, -1, -1, + -1, -1, 83, -1, -1, -1, 87, -1, -1, -1, + -1, -1, -1, -1, -1, -1, 1, -1, -1, -1, + -1, 102, 103, -1, 105, 10, 107, 108, 13, -1, + -1, 16, -1, 114, 19, 20, 21, 22, -1, 24, + 25, 26, 27, 28, 29, 30, -1, 32, 33, 34, + 35, 36, 37, -1, -1, -1, -1, -1, 43, 44, + -1, -1, -1, -1, -1, -1, -1, -1, 69, 70, + -1, -1, -1, -1, -1, -1, 61, -1, -1, 64, + 65, 66, 67, 68, -1, -1, 71, 72, 73, 74, + 75, 76, 77, 94, 95, 96, 97, 98, 99, 100, + 101, -1, 87, -1, -1, 106, -1, -1, 109, 110, + 111, 112, 1, -1, -1, -1, -1, 102, 103, -1, + 105, 10, 107, 108, 13, -1, -1, 16, -1, 114, + 19, 20, 21, -1, -1, 24, 25, 26, 27, 28, + 29, 30, -1, 32, 33, 34, 35, 36, 37, -1, + -1, -1, -1, -1, 43, 44, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, 95, 96, -1, 98, -1, - 100, 101, 1, -1, -1, -1, -1, 107, 108, 109, - 110, 10, -1, 12, -1, 14, 15, 16, 17, 18, - -1, -1, 21, 22, 23, 24, 25, -1, 27, 28, - 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, - 39, 40, 41, 42, 43, 44, 45, -1, -1, -1, - 49, 50, 51, 52, 53, -1, 55, 56, 57, 58, - 59, 60, -1, -1, 63, 64, 65, 66, 67, 68, - 69, -1, -1, -1, -1, -1, -1, -1, -1, -1, - 79, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, 95, 96, -1, 98, - -1, 100, 101, 1, -1, -1, -1, -1, 107, 108, - 109, 110, 10, -1, 12, -1, 14, 15, 16, 17, - 18, -1, -1, 21, 22, 23, 24, 25, -1, 27, - 28, 29, 30, 31, 32, 33, -1, 35, 36, 37, - 38, 39, 40, 41, 42, 43, 44, 45, -1, -1, - -1, 49, 50, 51, 52, 53, -1, 55, 56, 57, - 58, 59, 60, -1, -1, 63, 64, 65, 66, 67, - 68, 69, -1, -1, -1, -1, -1, -1, -1, -1, - -1, 79, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, 95, 96, -1, - 98, -1, 100, 101, 1, -1, -1, -1, -1, 107, - 108, 109, 110, -1, -1, 12, -1, 14, 15, 16, - 17, 18, -1, -1, 21, 22, 23, 24, 25, -1, - 27, 28, 29, 30, 31, 32, -1, -1, -1, -1, - -1, 38, 39, -1, -1, -1, -1, -1, 61, 62, - -1, -1, -1, -1, -1, -1, 53, -1, -1, 56, - 57, 58, 59, 60, -1, -1, 63, 64, 65, 66, - 67, 68, 69, 86, 87, 88, 89, 90, 91, 92, - 93, 94, 79, -1, -1, -1, 99, -1, -1, 102, - 103, 104, 105, -1, -1, -1, -1, -1, 95, 96, - -1, 98, -1, 100, 101, 1, -1, -1, -1, -1, - 107, 108, 109, 110, -1, -1, 12, -1, 14, 15, - 16, 17, 18, -1, -1, 21, 22, 23, 24, 25, - -1, 27, 28, 29, 30, 31, 32, -1, -1, -1, - -1, -1, 38, 39, -1, -1, -1, -1, 61, 62, - -1, -1, -1, -1, -1, -1, -1, 53, -1, -1, - 56, 57, 58, 59, 60, -1, -1, 63, 64, 65, - 66, 67, 68, 69, 87, 88, 89, 90, 91, 92, - 93, 94, -1, 79, -1, -1, 99, -1, -1, 102, - 103, 104, 105, -1, -1, -1, -1, -1, -1, 95, - 96, -1, 98, -1, 100, 101, -1, -1, -1, -1, - 106, 107, -1, 109, 110, 10, -1, 12, -1, 14, - 15, 16, 17, 18, -1, -1, 21, 22, 23, 24, - 25, 26, 27, 28, 29, 30, 31, 32, -1, -1, - -1, -1, -1, 38, 39, -1, -1, -1, 61, 62, - -1, -1, -1, -1, -1, -1, -1, -1, 53, -1, - -1, 56, 57, 58, 59, 60, -1, -1, 63, 64, - 65, 66, 67, 68, 69, 88, 89, 90, 91, 92, - 93, 94, -1, -1, 79, -1, 99, -1, -1, 102, - 103, 104, 105, -1, -1, -1, -1, -1, -1, -1, - 95, 96, -1, 98, -1, 100, 101, -1, -1, -1, - -1, -1, 107, -1, 109, 110, 10, -1, 12, -1, - 14, 15, 16, 17, 18, -1, -1, 21, 22, 23, - 24, 25, -1, 27, 28, 29, 30, 31, 32, -1, - -1, -1, -1, -1, 38, 39, 42, 43, 44, 45, - -1, -1, -1, 49, -1, 51, -1, -1, -1, 53, - -1, -1, 56, 57, 58, 59, 60, -1, -1, 63, - 64, 65, 66, 67, 68, 69, -1, -1, -1, -1, - 76, 77, 78, -1, -1, 79, -1, -1, -1, -1, + -1, -1, 61, -1, -1, 64, 65, 66, 67, 68, + 0, -1, 71, 72, 73, 74, 75, 76, 77, -1, + -1, 11, -1, 13, 14, 15, -1, -1, 87, -1, + -1, -1, 22, 23, -1, -1, -1, -1, -1, -1, + -1, -1, -1, 102, 103, -1, 105, -1, 107, 108, + -1, -1, -1, -1, 113, 114, -1, 47, 48, 49, + 50, -1, -1, -1, 54, -1, 56, -1, -1, -1, + -1, -1, 62, -1, -1, -1, -1, -1, -1, 69, + 70, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, 82, -1, -1, 85, 86, -1, 88, 89, + 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, + 100, 101, 0, 69, 70, -1, 106, -1, -1, 109, + 110, 111, 112, 113, -1, -1, 14, 15, -1, -1, + -1, -1, -1, -1, 22, 23, -1, 93, 94, 95, + 96, 97, 98, 99, 100, 101, -1, -1, -1, -1, + 106, -1, -1, 109, 110, 111, 112, -1, -1, 47, + 48, 49, 50, -1, -1, -1, 54, -1, 56, -1, + -1, -1, -1, -1, 62, -1, -1, -1, -1, -1, + -1, 69, 70, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, 82, -1, -1, 85, 86, -1, + 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, + 98, 99, 100, 101, -1, -1, -1, -1, 106, -1, + -1, 109, 110, 111, 112, 113, 10, 11, -1, 13, + -1, -1, 16, -1, -1, 19, 20, 21, -1, -1, + 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, + 34, 35, 36, 37, -1, -1, -1, -1, -1, 43, + 44, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, 61, -1, -1, + 64, 65, 66, 67, 68, -1, -1, 71, 72, 73, + 74, 75, 76, 77, -1, -1, -1, -1, -1, -1, + -1, -1, -1, 87, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, 102, 103, + -1, 105, -1, 107, 108, 10, 11, -1, 13, -1, + 114, 16, -1, -1, 19, 20, 21, -1, -1, 24, + 25, 26, 27, 28, 29, 30, -1, 32, 33, 34, + 35, 36, 37, -1, -1, -1, -1, -1, 43, 44, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, 95, 96, -1, 98, -1, 100, 101, -1, -1, - -1, -1, -1, 107, -1, 109, 110, 12, 13, 14, - 15, 16, 17, 18, -1, -1, 21, 22, 23, 24, - 25, -1, 27, 28, 29, 30, 31, 32, -1, -1, - -1, -1, -1, 38, 39, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, 53, -1, - -1, 56, 57, 58, 59, 60, -1, -1, 63, 64, - 65, 66, 67, 68, 69, -1, -1, -1, -1, -1, - -1, -1, -1, -1, 79, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, 61, -1, -1, 64, + 65, 66, 67, 68, -1, -1, 71, 72, 73, 74, + 75, 76, 77, -1, -1, -1, -1, -1, -1, -1, + -1, -1, 87, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, 102, 103, -1, + 105, 10, 107, 108, 13, -1, -1, 16, -1, 114, + 19, 20, 21, -1, -1, 24, 25, 26, 27, 28, + 29, 30, -1, 32, 33, 34, 35, 36, 37, -1, + -1, -1, -1, -1, 43, 44, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - 95, 96, -1, 98, -1, 100, 101, -1, -1, -1, - -1, -1, 107, -1, 109, 110, 12, -1, 14, 15, - 16, 17, 18, -1, -1, 21, 22, 23, 24, 25, - -1, 27, 28, 29, 30, 31, 32, -1, -1, -1, - -1, -1, 38, 39, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, 53, -1, -1, - 56, 57, 58, 59, 60, -1, -1, 63, 64, 65, - 66, 67, 68, 69, -1, -1, -1, -1, -1, -1, - -1, -1, -1, 79, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, 95, - 96, -1, 98, -1, 100, 101, -1, -1, -1, -1, - -1, 107, 108, 109, 110, 12, -1, 14, 15, 16, - 17, 18, -1, -1, 21, 22, 23, 24, 25, -1, - 27, 28, 29, 30, 31, 32, -1, -1, -1, -1, - -1, 38, 39, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, 53, -1, -1, 56, - 57, 58, 59, 60, -1, -1, 63, 64, 65, 66, - 67, 68, 69, -1, -1, -1, -1, -1, -1, -1, - -1, -1, 79, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, 95, 96, - -1, 98, -1, 100, 101, -1, -1, -1, -1, 106, - 107, -1, 109, 110, 12, -1, 14, 15, 16, 17, - 18, -1, -1, 21, 22, 23, 24, 25, -1, 27, - 28, 29, 30, 31, 32, -1, -1, -1, -1, -1, - 38, 39, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, 53, -1, -1, 56, 57, - 58, 59, 60, -1, -1, 63, 64, 65, 66, 67, - 68, 69, -1, -1, -1, -1, -1, -1, -1, -1, - -1, 79, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, 95, 96, -1, - 98, -1, 100, 101, -1, -1, -1, -1, 106, 107, - -1, 109, 110, 12, -1, 14, 15, 16, 17, 18, - -1, -1, 21, 22, 23, 24, 25, -1, 27, 28, - 29, 30, 31, 32, -1, -1, -1, -1, -1, 38, - 39, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, 53, -1, -1, 56, 57, 58, - 59, 60, -1, -1, 63, 64, 65, 66, 67, 68, - 69, -1, -1, -1, -1, -1, -1, -1, -1, -1, - 79, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, 95, 96, -1, 98, - -1, 100, 101, -1, -1, -1, -1, 106, 107, -1, - 109, 110, 12, -1, 14, 15, 16, 17, 18, -1, - -1, 21, 22, 23, 24, 25, -1, 27, 28, 29, - 30, 31, 32, -1, -1, -1, -1, -1, 38, 39, + -1, -1, 61, -1, -1, 64, 65, 66, 67, 68, + -1, -1, 71, 72, 73, 74, 75, 76, 77, -1, + -1, -1, -1, -1, -1, -1, -1, -1, 87, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, 53, -1, -1, 56, 57, 58, 59, - 60, -1, -1, 63, 64, 65, 66, 67, 68, 69, - -1, -1, -1, -1, -1, -1, -1, -1, -1, 79, + -1, -1, -1, 102, 103, -1, 105, 10, 107, 108, + 13, -1, -1, 16, 113, 114, 19, 20, 21, -1, + -1, 24, 25, 26, 27, 28, 29, 30, -1, 32, + 33, 34, 35, 36, 37, -1, -1, -1, -1, -1, + 43, 44, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, 61, -1, + -1, 64, 65, 66, 67, 68, -1, -1, 71, 72, + 73, 74, 75, 76, 77, -1, -1, -1, -1, -1, + -1, -1, -1, -1, 87, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, 102, + 103, -1, 105, 10, 107, 108, 13, -1, -1, 16, + 113, 114, 19, 20, 21, -1, -1, 24, 25, 26, + 27, 28, 29, 30, -1, 32, 33, 34, 35, 36, + 37, -1, -1, -1, -1, -1, 43, 44, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, 95, 96, -1, 98, -1, - 100, 101, -1, -1, -1, -1, 106, 107, -1, 109, - 110, 12, -1, 14, 15, 16, 17, 18, -1, -1, - 21, 22, 23, 24, 25, -1, 27, 28, 29, 30, - 31, 32, -1, -1, -1, -1, -1, 38, 39, -1, + -1, -1, -1, -1, 61, -1, -1, 64, 65, 66, + 67, 68, -1, -1, 71, 72, 73, 74, 75, 76, + 77, -1, -1, -1, -1, -1, -1, -1, -1, -1, + 87, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, 102, 103, -1, 105, 10, + 107, 108, 13, -1, -1, 16, 113, 114, 19, 20, + 21, -1, -1, 24, 25, 26, 27, 28, 29, 30, + -1, 32, 33, 34, 35, 36, 37, -1, -1, -1, + -1, -1, 43, 44, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, 53, -1, -1, 56, 57, 58, 59, 60, - -1, -1, 63, 64, 65, 66, 67, 68, 69, -1, - -1, -1, -1, -1, -1, -1, -1, -1, 79, -1, + 61, -1, -1, 64, 65, 66, 67, 68, -1, -1, + 71, 72, 73, 74, 75, 76, 77, -1, -1, -1, + -1, -1, -1, -1, -1, -1, 87, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, 95, 96, -1, 98, -1, 100, - 101, -1, -1, -1, -1, 106, 107, -1, 109, 110, - 12, -1, 14, 15, 16, 17, 18, -1, -1, 21, - 22, 23, 24, 25, -1, 27, 28, 29, 30, 31, - 32, -1, -1, -1, -1, -1, 38, 39, -1, -1, + -1, 102, 103, -1, 105, 10, 107, 108, 13, -1, + -1, 16, 113, 114, 19, 20, 21, -1, -1, 24, + 25, 26, 27, 28, 29, 30, -1, 32, 33, 34, + 35, 36, 37, -1, -1, -1, -1, -1, 43, 44, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, 53, -1, -1, 56, 57, 58, 59, 60, -1, - -1, 63, 64, 65, 66, 67, 68, 69, -1, -1, - -1, -1, -1, -1, -1, -1, -1, 79, -1, -1, + -1, -1, -1, -1, -1, -1, 61, -1, -1, 64, + 65, 66, 67, 68, -1, -1, 71, 72, 73, 74, + 75, 76, 77, -1, -1, -1, -1, -1, -1, -1, + -1, -1, 87, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, 102, 103, -1, + 105, 10, 107, 108, 13, -1, -1, 16, 113, 114, + 19, 20, 21, -1, -1, 24, 25, 26, 27, 28, + 29, 30, -1, 32, 33, 34, 35, 36, 37, -1, + -1, -1, -1, -1, 43, 44, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, 95, 96, -1, 98, -1, 100, 101, - -1, -1, -1, -1, 106, 107, -1, 109, 110, 12, - -1, 14, 15, 16, 17, 18, -1, -1, 21, 22, - 23, 24, 25, -1, 27, 28, 29, 30, 31, 32, - -1, -1, -1, -1, -1, 38, 39, -1, -1, -1, + -1, -1, 61, -1, -1, 64, 65, 66, 67, 68, + -1, -1, 71, 72, 73, 74, 75, 76, 77, -1, + -1, -1, -1, -1, -1, -1, -1, -1, 87, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - 53, -1, -1, 56, 57, 58, 59, 60, -1, -1, - 63, 64, 65, 66, 67, 68, 69, -1, -1, -1, - -1, -1, -1, -1, -1, -1, 79, -1, -1, -1, + -1, -1, -1, 102, 103, -1, 105, 10, 107, 108, + 13, -1, -1, 16, 113, 114, 19, 20, 21, -1, + -1, 24, 25, 26, 27, 28, 29, 30, -1, 32, + 33, 34, 35, 36, 37, -1, -1, -1, -1, -1, + 43, 44, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, 61, -1, + -1, 64, 65, 66, 67, 68, -1, -1, 71, 72, + 73, 74, 75, 76, 77, -1, -1, -1, -1, -1, + -1, -1, -1, -1, 87, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, 102, + 103, -1, 105, 10, 107, 108, 13, -1, -1, 16, + 113, 114, 19, 20, 21, -1, -1, 24, 25, 26, + 27, 28, 29, 30, -1, 32, 33, 34, 35, 36, + 37, -1, -1, -1, -1, -1, 43, 44, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, 95, 96, -1, 98, -1, 100, 101, -1, - -1, -1, -1, 106, 107, -1, 109, 110, 12, -1, - 14, 15, 16, 17, 18, -1, -1, 21, 22, 23, - 24, 25, -1, 27, 28, 29, 30, 31, 32, -1, - -1, -1, -1, -1, 38, 39, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, 53, - -1, -1, 56, 57, 58, 59, 60, -1, -1, 63, - 64, 65, 66, 67, 68, 69, -1, -1, -1, -1, - -1, -1, -1, -1, -1, 79, -1, -1, -1, -1, + -1, -1, -1, -1, 61, -1, -1, 64, 65, 66, + 67, 68, -1, -1, 71, 72, 73, 74, 75, 76, + 77, -1, -1, -1, -1, -1, -1, -1, -1, -1, + 87, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, 102, 103, -1, 105, 10, + 107, 108, 13, -1, -1, 16, -1, 114, 19, 20, + 21, -1, -1, 24, 25, 26, 27, 28, 29, 30, + -1, 32, 33, 34, 35, 36, 37, -1, -1, -1, + -1, -1, 43, 44, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, 95, 96, -1, 98, -1, 100, 101, -1, -1, - -1, -1, -1, 107, -1, 109, 110, 12, -1, 14, - 15, 16, 17, 18, -1, -1, 21, 22, 23, 24, - 25, -1, 27, 28, 29, 30, 31, 32, -1, -1, - -1, -1, -1, 38, 39, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, 53, -1, - -1, 56, 57, 58, 59, 60, -1, -1, 63, 64, - 65, 66, 67, 68, 69, -1, -1, -1, -1, -1, - -1, -1, -1, -1, 79, -1, -1, -1, -1, 54, - -1, -1, -1, -1, -1, -1, 61, 62, -1, -1, - 95, 96, -1, 98, -1, 100, 101, -1, -1, -1, - -1, -1, 107, -1, 109, 110, 81, 82, 83, 84, - 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, - -1, -1, -1, -1, 99, 54, -1, 102, 103, 104, - 105, -1, 61, 62, -1, -1, -1, -1, -1, -1, + 61, -1, -1, 64, 65, 66, 67, 68, -1, -1, + 71, 72, 73, 74, 75, 76, 77, -1, -1, -1, + -1, -1, -1, -1, -1, -1, 87, -1, 62, -1, + -1, -1, -1, -1, -1, 69, 70, -1, -1, -1, + -1, 102, 103, -1, 105, -1, 107, 108, -1, -1, + -1, -1, -1, 114, 88, 89, 90, 91, 92, 93, + 94, 95, 96, 97, 98, 99, 100, 101, -1, -1, + -1, -1, 106, 62, -1, 109, 110, 111, 112, -1, + 69, 70, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, 88, + 89, -1, 91, 92, 93, 94, 95, 96, 97, 98, + 99, 100, 101, -1, -1, -1, -1, 106, 62, -1, + 109, 110, 111, 112, -1, 69, 70, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, 81, 82, -1, 84, 85, 86, 87, 88, - 89, 90, 91, 92, 93, 94, -1, -1, -1, -1, - 99, 54, -1, 102, 103, 104, 105, -1, 61, 62, + -1, -1, -1, -1, -1, 89, -1, 91, 92, 93, + 94, 95, 96, 97, 98, 99, 100, 101, -1, -1, + -1, -1, 106, 62, -1, 109, 110, 111, 112, -1, + 69, 70, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, 82, - -1, 84, 85, 86, 87, 88, 89, 90, 91, 92, - 93, 94, -1, -1, -1, -1, 99, 54, -1, 102, - 103, 104, 105, -1, 61, 62, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, 84, 85, 86, - 87, 88, 89, 90, 91, 92, 93, 94, -1, -1, - -1, -1, 99, -1, -1, 102, 103, 104, 105 + -1, -1, 91, 92, 93, 94, 95, 96, 97, 98, + 99, 100, 101, -1, -1, -1, -1, 106, -1, -1, + 109, 110, 111, 112 }; /* YYSTOS[STATE-NUM] -- The (internal number of the) accessing symbol of state STATE-NUM. */ static const yytype_uint8 yystos[] = { - 0, 3, 4, 5, 6, 7, 8, 9, 113, 114, - 115, 116, 117, 118, 119, 120, 0, 123, 12, 14, - 15, 16, 17, 18, 21, 22, 23, 24, 25, 27, - 28, 29, 30, 31, 32, 38, 39, 53, 56, 57, - 58, 59, 60, 63, 64, 65, 66, 67, 68, 69, - 79, 95, 96, 98, 100, 101, 107, 109, 110, 173, - 174, 175, 178, 179, 180, 181, 182, 183, 184, 185, - 186, 187, 189, 192, 198, 199, 200, 201, 202, 203, - 204, 205, 206, 10, 121, 1, 33, 35, 36, 37, - 40, 41, 42, 43, 44, 45, 49, 50, 51, 52, - 55, 108, 121, 130, 140, 173, 34, 128, 129, 130, - 126, 167, 168, 126, 13, 173, 187, 187, 21, 26, - 121, 199, 207, 207, 207, 207, 207, 188, 12, 107, - 187, 151, 151, 151, 187, 107, 107, 73, 107, 121, - 187, 21, 174, 191, 199, 207, 207, 121, 187, 108, - 173, 21, 26, 153, 187, 98, 107, 190, 199, 200, - 201, 187, 174, 187, 187, 187, 187, 187, 106, 173, - 207, 207, 76, 77, 78, 80, 10, 12, 107, 91, - 92, 91, 89, 90, 89, 54, 61, 62, 81, 82, - 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, - 94, 99, 102, 103, 104, 105, 107, 10, 12, 10, - 12, 10, 12, 10, 123, 152, 153, 153, 21, 150, - 107, 107, 107, 107, 68, 98, 107, 197, 199, 107, - 107, 121, 108, 48, 142, 108, 42, 43, 44, 45, - 49, 51, 129, 130, 128, 16, 17, 109, 158, 159, - 161, 162, 163, 164, 13, 191, 107, 73, 173, 106, - 121, 24, 154, 70, 155, 106, 106, 173, 192, 192, - 207, 174, 11, 108, 191, 107, 187, 190, 199, 200, - 201, 106, 173, 70, 156, 12, 106, 173, 173, 173, - 187, 173, 173, 106, 173, 187, 187, 187, 187, 187, - 187, 187, 187, 187, 187, 187, 187, 187, 187, 187, - 187, 187, 187, 187, 10, 12, 16, 17, 18, 22, - 63, 107, 109, 110, 177, 199, 106, 173, 173, 173, - 173, 173, 173, 173, 173, 126, 21, 149, 150, 150, - 21, 133, 123, 123, 123, 123, 98, 123, 68, 195, - 196, 198, 199, 200, 201, 123, 123, 107, 123, 123, - 121, 173, 146, 173, 173, 173, 173, 173, 26, 157, - 157, 80, 192, 174, 13, 176, 155, 24, 123, 172, - 106, 74, 106, 173, 11, 106, 173, 156, 106, 24, - 173, 12, 108, 13, 106, 83, 173, 173, 110, 110, - 110, 110, 106, 173, 110, 110, 107, 106, 108, 13, - 108, 13, 108, 13, 108, 11, 19, 122, 131, 132, - 10, 108, 21, 145, 173, 146, 147, 173, 147, 194, - 199, 107, 140, 144, 147, 148, 173, 195, 123, 147, - 147, 81, 160, 160, 162, 106, 111, 193, 191, 123, - 170, 107, 165, 166, 106, 106, 13, 173, 11, 187, - 108, 13, 106, 192, 11, 11, 11, 11, 123, 154, - 155, 123, 21, 106, 106, 106, 106, 107, 123, 106, - 108, 136, 147, 106, 106, 187, 173, 74, 10, 167, - 10, 13, 11, 106, 108, 155, 108, 171, 172, 137, - 191, 143, 143, 10, 124, 124, 147, 147, 124, 134, - 107, 106, 124, 124, 126, 106, 126, 72, 108, 169, - 170, 126, 108, 124, 124, 125, 46, 47, 141, 141, - 106, 106, 142, 145, 147, 124, 11, 11, 127, 11, - 142, 142, 126, 124, 107, 124, 124, 108, 106, 142, - 24, 108, 138, 11, 147, 142, 142, 135, 124, 71, - 139, 20, 106, 143, 142, 126, 124, 148, 72, 141, - 106, 124 + 0, 3, 4, 5, 6, 7, 8, 9, 116, 117, + 118, 119, 120, 121, 122, 123, 0, 127, 10, 13, + 16, 19, 20, 21, 24, 25, 26, 27, 28, 29, + 30, 32, 33, 34, 35, 36, 37, 43, 44, 61, + 64, 65, 66, 67, 68, 71, 72, 73, 74, 75, + 76, 77, 87, 102, 103, 105, 107, 108, 114, 125, + 181, 182, 183, 186, 187, 188, 189, 190, 191, 192, + 193, 194, 195, 197, 200, 208, 209, 210, 211, 212, + 213, 214, 215, 216, 11, 124, 1, 22, 38, 40, + 41, 42, 45, 46, 47, 48, 49, 50, 54, 55, + 56, 57, 58, 63, 83, 124, 134, 147, 181, 39, + 132, 133, 134, 125, 130, 175, 176, 130, 26, 31, + 124, 209, 217, 200, 217, 195, 217, 195, 217, 217, + 217, 217, 196, 13, 114, 195, 159, 159, 159, 195, + 114, 114, 81, 114, 124, 195, 26, 125, 182, 199, + 209, 217, 217, 124, 195, 200, 26, 31, 161, 195, + 105, 114, 198, 209, 210, 211, 195, 182, 195, 195, + 195, 195, 195, 113, 181, 85, 86, 15, 11, 13, + 114, 98, 99, 98, 96, 97, 96, 62, 69, 70, + 88, 89, 91, 92, 93, 94, 95, 96, 97, 98, + 99, 100, 101, 106, 109, 110, 111, 112, 114, 11, + 13, 11, 13, 11, 13, 11, 127, 160, 161, 161, + 26, 158, 114, 114, 114, 114, 76, 105, 114, 207, + 209, 114, 114, 124, 11, 128, 22, 128, 53, 125, + 149, 22, 47, 48, 49, 50, 54, 56, 133, 134, + 132, 16, 20, 24, 125, 166, 167, 169, 170, 171, + 172, 14, 199, 114, 81, 181, 113, 124, 29, 125, + 162, 78, 125, 163, 113, 113, 181, 200, 200, 217, + 182, 22, 199, 114, 195, 198, 209, 210, 211, 113, + 181, 78, 164, 13, 113, 181, 181, 195, 181, 181, + 113, 181, 195, 195, 195, 195, 195, 195, 195, 195, + 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, + 195, 10, 11, 13, 16, 20, 24, 25, 27, 71, + 114, 185, 209, 113, 181, 181, 181, 181, 181, 181, + 181, 181, 130, 26, 125, 157, 158, 158, 26, 137, + 127, 127, 127, 127, 105, 127, 76, 205, 206, 208, + 209, 210, 211, 127, 127, 114, 127, 127, 129, 59, + 124, 146, 181, 154, 181, 146, 146, 146, 146, 31, + 165, 165, 15, 200, 182, 14, 184, 163, 29, 127, + 180, 113, 82, 113, 181, 12, 113, 181, 164, 113, + 29, 181, 13, 22, 14, 113, 90, 25, 181, 181, + 25, 25, 25, 25, 25, 113, 181, 114, 113, 22, + 14, 22, 14, 22, 14, 22, 12, 18, 126, 135, + 136, 11, 22, 26, 153, 181, 154, 155, 181, 155, + 114, 202, 209, 114, 125, 147, 152, 155, 156, 181, + 205, 127, 155, 155, 130, 114, 88, 125, 168, 168, + 170, 113, 23, 125, 201, 199, 127, 178, 114, 125, + 173, 174, 113, 113, 14, 181, 12, 195, 22, 14, + 113, 200, 12, 12, 12, 12, 127, 162, 163, 127, + 26, 113, 113, 113, 113, 203, 204, 209, 114, 127, + 113, 22, 140, 155, 113, 113, 12, 141, 195, 181, + 82, 11, 175, 11, 14, 12, 113, 22, 163, 22, + 179, 180, 143, 199, 151, 151, 128, 128, 15, 113, + 155, 155, 128, 138, 114, 113, 128, 128, 127, 130, + 113, 130, 80, 22, 177, 178, 130, 22, 128, 128, + 51, 52, 125, 148, 148, 209, 114, 113, 113, 149, + 153, 155, 128, 209, 12, 12, 125, 131, 12, 149, + 149, 128, 114, 155, 128, 128, 22, 113, 149, 142, + 22, 29, 144, 155, 113, 149, 149, 139, 128, 113, + 17, 79, 125, 145, 113, 128, 151, 149, 128, 130, + 128, 149, 156, 60, 150, 80, 148, 113, 124, 128 }; /* YYR1[YYN] -- Symbol number of symbol that rule YYN derives. */ static const yytype_uint8 yyr1[] = { - 0, 112, 114, 113, 115, 113, 116, 113, 117, 113, - 118, 113, 119, 113, 120, 113, 121, 122, 123, 124, - 125, 126, 126, 127, 127, 128, 128, 129, 129, 130, - 130, 131, 130, 132, 130, 130, 133, 130, 130, 130, - 130, 130, 130, 130, 130, 134, 135, 130, 130, 130, - 136, 130, 130, 130, 130, 137, 130, 130, 130, 130, - 138, 139, 139, 140, 140, 140, 140, 140, 140, 140, - 140, 141, 141, 141, 142, 142, 143, 144, 144, 145, - 145, 146, 147, 148, 149, 149, 150, 151, 152, 153, - 153, 154, 154, 155, 155, 155, 156, 156, 157, 157, - 158, 158, 159, 160, 160, 160, 161, 162, 162, 163, - 163, 163, 164, 164, 165, 165, 166, 168, 167, 169, - 169, 170, 171, 171, 172, 173, 173, 173, 173, 174, - 174, 174, 175, 175, 175, 175, 175, 175, 175, 175, - 175, 176, 175, 177, 177, 178, 178, 178, 178, 178, - 178, 178, 178, 178, 178, 178, 178, 178, 178, 179, - 179, 179, 179, 179, 179, 179, 179, 179, 179, 179, - 179, 179, 179, 180, 180, 180, 180, 181, 181, 182, - 182, 182, 182, 183, 183, 184, 184, 184, 184, 184, - 184, 184, 184, 184, 185, 185, 185, 185, 185, 185, - 186, 186, 187, 187, 187, 187, 187, 187, 187, 187, - 187, 187, 187, 187, 187, 187, 187, 187, 187, 187, + 0, 115, 117, 116, 118, 116, 119, 116, 120, 116, + 121, 116, 122, 116, 123, 116, 124, 125, 126, 127, + 128, 129, 130, 130, 131, 131, 132, 132, 133, 133, + 134, 134, 135, 134, 136, 134, 134, 137, 134, 134, + 134, 134, 134, 134, 134, 134, 138, 139, 134, 134, + 134, 134, 140, 134, 134, 134, 141, 142, 134, 134, + 143, 134, 134, 134, 134, 134, 144, 145, 145, 146, + 147, 147, 147, 147, 147, 147, 147, 147, 148, 148, + 148, 149, 149, 150, 150, 151, 152, 152, 153, 153, + 154, 155, 156, 157, 157, 158, 159, 160, 161, 161, + 162, 162, 163, 163, 163, 164, 164, 165, 165, 166, + 166, 167, 168, 168, 168, 169, 170, 170, 171, 171, + 171, 172, 172, 173, 173, 174, 176, 175, 177, 177, + 178, 179, 179, 180, 181, 181, 181, 182, 182, 182, + 183, 183, 183, 183, 183, 183, 183, 183, 183, 184, + 183, 185, 185, 186, 186, 186, 186, 186, 186, 186, + 186, 186, 186, 186, 186, 186, 186, 187, 187, 187, 187, 187, 187, 187, 187, 187, 187, 187, 187, 187, - 187, 187, 187, 187, 187, 187, 187, 187, 187, 187, - 187, 187, 187, 187, 187, 187, 187, 187, 187, 187, - 187, 188, 187, 187, 187, 187, 189, 189, 189, 190, - 190, 190, 190, 190, 191, 191, 192, 192, 193, 193, - 194, 195, 195, 195, 196, 196, 197, 197, 198, 199, - 200, 201, 202, 202, 203, 204, 204, 205, 205, 206, - 206, 207, 207, 207, 207 + 187, 188, 188, 188, 188, 189, 189, 190, 190, 190, + 190, 191, 191, 192, 192, 192, 192, 192, 192, 192, + 192, 192, 193, 193, 193, 193, 194, 194, 195, 195, + 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, + 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, + 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, + 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, + 195, 195, 195, 195, 195, 195, 196, 195, 195, 195, + 195, 197, 197, 197, 197, 198, 198, 198, 198, 198, + 199, 199, 200, 200, 201, 201, 202, 203, 203, 203, + 204, 205, 205, 205, 206, 206, 207, 207, 208, 209, + 210, 211, 212, 212, 213, 214, 214, 215, 215, 216, + 216, 217, 217, 217, 217 }; /* YYR2[YYN] -- Number of symbols on the right hand side of rule YYN. */ -static const yytype_uint8 yyr2[] = +static const yytype_int8 yyr2[] = { 0, 2, 0, 4, 0, 3, 0, 3, 0, 3, - 0, 3, 0, 3, 0, 3, 4, 7, 0, 4, - 0, 0, 2, 0, 2, 1, 1, 2, 2, 1, - 4, 0, 7, 0, 6, 4, 0, 7, 7, 7, - 6, 6, 2, 8, 8, 0, 0, 13, 9, 8, - 0, 10, 9, 7, 2, 0, 8, 2, 2, 1, - 2, 0, 3, 1, 1, 3, 3, 3, 3, 3, - 3, 0, 2, 6, 0, 2, 0, 0, 1, 0, - 1, 1, 1, 1, 1, 0, 0, 0, 0, 1, - 1, 0, 1, 0, 2, 1, 2, 1, 0, 1, - 1, 1, 3, 0, 1, 2, 3, 1, 1, 2, - 3, 1, 0, 1, 0, 1, 3, 0, 2, 1, - 1, 4, 1, 1, 5, 3, 3, 3, 1, 2, - 3, 1, 3, 5, 6, 3, 3, 5, 2, 4, - 4, 0, 5, 1, 1, 5, 4, 5, 4, 5, - 6, 5, 4, 5, 4, 3, 6, 4, 5, 3, - 3, 3, 3, 3, 1, 1, 3, 3, 3, 3, - 3, 3, 3, 1, 3, 2, 2, 3, 3, 1, - 3, 2, 2, 3, 3, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 3, 2, 4, 3, 5, 4, - 2, 2, 1, 1, 1, 1, 5, 2, 3, 1, - 2, 3, 1, 2, 1, 1, 1, 1, 1, 1, - 4, 4, 5, 5, 1, 1, 3, 4, 3, 4, - 4, 4, 4, 4, 1, 2, 2, 1, 2, 2, - 1, 2, 1, 2, 1, 3, 1, 3, 1, 3, - 4, 0, 6, 1, 1, 1, 3, 2, 4, 3, - 2, 1, 1, 1, 0, 1, 0, 1, 0, 2, + 0, 3, 0, 3, 0, 3, 4, 0, 7, 0, + 4, 0, 1, 2, 1, 2, 1, 1, 2, 2, + 1, 4, 0, 7, 0, 6, 4, 0, 7, 7, + 7, 6, 6, 2, 8, 8, 0, 0, 13, 9, + 11, 8, 0, 10, 9, 7, 0, 0, 11, 2, + 0, 8, 2, 2, 2, 1, 2, 1, 3, 1, + 1, 1, 3, 3, 3, 3, 3, 3, 1, 2, + 6, 1, 2, 0, 2, 0, 1, 1, 0, 1, + 1, 1, 1, 1, 1, 0, 0, 0, 1, 1, + 1, 1, 1, 2, 1, 2, 1, 0, 1, 1, + 1, 3, 1, 1, 2, 3, 1, 1, 2, 3, + 1, 1, 1, 1, 1, 3, 0, 2, 1, 1, + 4, 1, 1, 5, 3, 3, 1, 2, 3, 1, + 3, 5, 6, 3, 3, 5, 2, 4, 4, 0, + 5, 1, 1, 5, 4, 5, 4, 5, 6, 5, + 4, 5, 4, 3, 6, 4, 5, 3, 3, 3, + 3, 3, 1, 1, 3, 3, 3, 3, 3, 3, + 3, 1, 3, 2, 2, 3, 3, 1, 3, 2, + 2, 3, 3, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 3, 4, 5, 4, 2, 2, 1, 1, + 1, 1, 5, 2, 1, 2, 3, 1, 2, 1, + 1, 1, 1, 1, 1, 4, 4, 5, 5, 1, + 1, 3, 4, 3, 4, 4, 4, 4, 4, 1, + 2, 2, 1, 2, 2, 1, 2, 1, 2, 1, + 3, 1, 3, 1, 3, 4, 0, 6, 1, 1, + 1, 3, 2, 4, 3, 3, 2, 1, 1, 1, + 1, 1, 1, 1, 1, 2, 1, 2, 3, 1, 1, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 2, 4, 2, 1, 3, 1, 3, 1, 3, 1, 1, 1, 1 @@ -1154,41 +1409,47 @@ typedef enum { /* type of each token/terminal */ static const toketypes yy_type_tab[] = { - toketype_ival, toketype_ival, toketype_ival, toketype_ival, toketype_ival, toketype_ival, toketype_ival, toketype_ival, toketype_ival, toketype_ival, toketype_ival, - toketype_ival, toketype_ival, toketype_ival, toketype_ival, toketype_ival, toketype_ival, toketype_ival, toketype_ival, toketype_ival, toketype_ival, + toketype_ival, toketype_ival, toketype_ival, toketype_ival, + toketype_ival, toketype_ival, toketype_ival, + toketype_ival, toketype_ival, toketype_ival, + toketype_ival, toketype_ival, toketype_ival, toketype_ival, + toketype_ival, toketype_ival, toketype_ival, toketype_ival, + toketype_ival, toketype_ival, toketype_ival, toketype_opval, toketype_opval, toketype_opval, toketype_opval, toketype_opval, toketype_opval, toketype_opval, toketype_opval, toketype_opval, toketype_opval, toketype_opval, toketype_opval, toketype_opval, toketype_opval, - toketype_opval, toketype_opval, toketype_ival, toketype_ival, toketype_ival, toketype_ival, toketype_ival, - toketype_ival, toketype_ival, toketype_ival, toketype_ival, toketype_ival, toketype_ival, toketype_ival, toketype_ival, toketype_ival, toketype_ival, toketype_ival, toketype_ival, toketype_ival, toketype_ival, toketype_ival, toketype_ival, toketype_ival, toketype_ival, toketype_ival, toketype_ival, toketype_ival, toketype_ival, toketype_ival, toketype_ival, toketype_ival, toketype_ival, toketype_ival, toketype_ival, toketype_ival, toketype_ival, - toketype_ival, toketype_ival, toketype_ival, toketype_ival, toketype_ival, - toketype_ival, toketype_ival, toketype_ival, toketype_ival, toketype_ival, toketype_ival, toketype_ival, toketype_ival, toketype_ival, toketype_ival, toketype_ival, toketype_ival, toketype_ival, toketype_ival, toketype_ival, + toketype_ival, toketype_ival, toketype_ival, toketype_ival, toketype_ival, toketype_ival, toketype_ival, toketype_ival, + toketype_ival, toketype_ival, toketype_ival, toketype_ival, toketype_ival, toketype_ival, toketype_ival, toketype_ival, toketype_ival, toketype_ival, toketype_ival, toketype_ival, + toketype_ival, toketype_ival, toketype_ival, toketype_ival, toketype_ival, + toketype_ival, toketype_ival, toketype_ival, toketype_ival, toketype_ival, toketype_ival, + toketype_ival, toketype_ival, toketype_ival, toketype_ival, toketype_ival, toketype_ival, toketype_ival, toketype_ival, toketype_ival, toketype_ival, toketype_ival, toketype_ival, - toketype_ival, toketype_ival, toketype_ival, toketype_ival, toketype_ival, toketype_ival, toketype_ival, toketype_ival, toketype_ival, - toketype_ival, toketype_ival, toketype_ival, toketype_ival, toketype_ival, toketype_ival, toketype_ival, toketype_ival, toketype_opval, - toketype_opval, toketype_ival, toketype_opval, toketype_ival, toketype_opval, toketype_opval, - toketype_opval, toketype_opval, toketype_opval, toketype_ival, toketype_ival, toketype_ival, toketype_ival, - toketype_ival, toketype_ival, toketype_ival, toketype_opval, toketype_opval, toketype_opval, toketype_opval, toketype_opval, - toketype_ival, toketype_opval, toketype_opval, toketype_opval, toketype_opval, toketype_opval, toketype_opval, - toketype_ival, toketype_ival, toketype_ival, toketype_opval, toketype_opval, - toketype_opval, toketype_opval, toketype_opval, toketype_ival, - toketype_opval, toketype_opval, toketype_opval, toketype_opval, toketype_opval, - toketype_opval, toketype_opval, toketype_opval, toketype_opval, toketype_ival, + toketype_ival, toketype_ival, toketype_ival, toketype_ival, toketype_ival, + toketype_ival, toketype_ival, toketype_ival, toketype_ival, toketype_ival, toketype_ival, toketype_ival, toketype_opval, toketype_opval, toketype_opval, + toketype_ival, toketype_opval, toketype_ival, toketype_opval, toketype_opval, toketype_opval, + toketype_opval, toketype_opval, toketype_ival, toketype_ival, toketype_ival, toketype_ival, toketype_ival, toketype_ival, + toketype_ival, toketype_ival, toketype_ival, toketype_opval, toketype_opval, toketype_opval, toketype_opval, + toketype_opval, toketype_opval, toketype_opval, toketype_ival, toketype_opval, toketype_opval, toketype_opval, toketype_opval, + toketype_opval, toketype_opval, toketype_ival, toketype_ival, toketype_ival, toketype_opval, toketype_opval, toketype_opval, toketype_opval, toketype_opval, - toketype_opval, toketype_opval, toketype_ival, toketype_opval, toketype_opval, toketype_opval, + toketype_ival, toketype_opval, toketype_opval, toketype_opval, toketype_opval, toketype_opval, toketype_opval, toketype_opval, toketype_opval, - toketype_opval, toketype_opval, toketype_opval, toketype_ival, toketype_opval, toketype_opval, + toketype_opval, toketype_ival, toketype_opval, toketype_opval, toketype_opval, + toketype_opval, toketype_opval, toketype_opval, toketype_opval, toketype_ival, toketype_opval, toketype_opval, toketype_opval, toketype_opval, toketype_opval, toketype_opval, - toketype_opval, toketype_ival, toketype_opval, toketype_opval, toketype_opval, toketype_opval, toketype_opval, - toketype_opval, toketype_opval, toketype_opval, toketype_opval, toketype_opval + toketype_opval, toketype_opval, toketype_opval, toketype_opval, toketype_opval, toketype_ival, + toketype_opval, toketype_opval, toketype_opval, toketype_opval, toketype_opval, toketype_opval, + toketype_opval, toketype_opval, toketype_opval, toketype_opval, + toketype_ival, toketype_opval, toketype_opval, toketype_opval, toketype_opval, toketype_opval, toketype_opval, + toketype_opval, toketype_opval, toketype_opval, toketype_opval }; /* Generated from: - * e5b801fdebce5c77dd8e644fc5a489cbea6af33db180e771dd9d669b12bbe0cf perly.y - * 0947213b55d0ed11693554bea04987e886cf285f5c14cf9075fa1e7acc3f4061 regen_perly.pl + * 0caf1eb1cc4750131dc71e3a22ead383ed9a123dec61ccd23408ff13441fafde perly.y + * acf1cbfd2545faeaaa58b1cf0cf9d7f98b5be0752eb7a54528ef904a9e2e1ca7 regen_perly.pl * ex: set ro: */ diff --git a/gnu/usr.bin/perl/perly.y b/gnu/usr.bin/perl/perly.y index 191341fbec6..55321fa41ee 100644 --- a/gnu/usr.bin/perl/perly.y +++ b/gnu/usr.bin/perl/perly.y @@ -31,7 +31,7 @@ /* Make the parser re-entrant. */ -%pure-parser +%define api.pure %start grammar @@ -45,7 +45,22 @@ %token GRAMPROG GRAMEXPR GRAMBLOCK GRAMBARESTMT GRAMFULLSTMT GRAMSTMTSEQ GRAMSUBSIGNATURE -%token '{' '}' '[' ']' '-' '+' '@' '%' '&' '=' '.' +%token PERLY_AMPERSAND +%token PERLY_BRACE_OPEN +%token PERLY_BRACE_CLOSE +%token PERLY_BRACKET_OPEN +%token PERLY_BRACKET_CLOSE +%token PERLY_COMMA +%token PERLY_DOLLAR +%token PERLY_DOT +%token PERLY_EQUAL_SIGN +%token PERLY_MINUS +%token PERLY_PERCENT_SIGN +%token PERLY_PLUS +%token PERLY_SEMICOLON +%token PERLY_SLASH +%token PERLY_SNAIL +%token PERLY_STAR %token BAREWORD METHOD FUNCMETH THING PMFUNC PRIVATEREF QWLIST %token FUNC0OP FUNC0SUB UNIOPSUB LSTOPSUB @@ -54,6 +69,7 @@ %token FORMAT SUB SIGSUB ANONSUB ANON_SIGSUB PACKAGE USE %token WHILE UNTIL IF UNLESS ELSE ELSIF CONTINUE FOR %token GIVEN WHEN DEFAULT +%token TRY CATCH FINALLY %token LOOPEX DOTDOT YADAYADA %token FUNC0 FUNC1 FUNC UNIOP LSTOP %token MULOP ADDOP @@ -61,38 +77,41 @@ %token LOCAL MY REQUIRE %token COLONATTR FORMLBRACK FORMRBRACK %token SUBLEXSTART SUBLEXEND +%token DEFER %type grammar remember mremember %type startsub startanonsub startformsub %type mintro -%type stmtseq fullstmt labfullstmt barestmt block mblock else +%type stmtseq fullstmt labfullstmt barestmt block mblock else finally %type expr term subscripted scalar ary hsh arylen star amper sideff +%type condition +%type empty %type sliceme kvslice gelem %type listexpr nexpr texpr iexpr mexpr mnexpr %type optlistexpr optexpr optrepl indirob listop method %type formname subname proto cont my_scalar my_var -%type refgen_topic formblock +%type list_of_scalars my_list_of_scalars refgen_topic formblock %type subattrlist myattrlist myattrterm myterm %type termbinop termunop anonymous termdo %type termrelop relopchain termeqop eqopchain %type sigslurpsigil %type sigvarname sigdefault sigscalarelem sigslurpelem -%type sigelem siglist siglistornull subsigguts subsignature optsubsignature +%type sigelem siglist optsiglist subsigguts subsignature optsubsignature %type subbody optsubbody sigsubbody optsigsubbody %type formstmtseq formline formarg %nonassoc PREC_LOW %nonassoc LOOPEX -%left OROP DOROP +%left OROP %left ANDOP %right NOTOP %nonassoc LSTOP LSTOPSUB -%left ',' +%left PERLY_COMMA %right ASSIGNOP -%right '?' ':' +%right PERLY_QUESTION_MARK PERLY_COLON %nonassoc DOTDOT %left OROR DORDOR %left ANDAND @@ -106,13 +125,13 @@ %left ADDOP %left MULOP %left MATCHOP -%right '!' '~' UMINUS REFGEN +%right PERLY_EXCLAMATION_MARK PERLY_TILDE UMINUS REFGEN %right POWOP %nonassoc PREINC PREDEC POSTINC POSTDEC POSTJOIN %left ARROW -%nonassoc ')' -%left '(' -%left '[' '{' +%nonassoc PERLY_PAREN_CLOSE +%left PERLY_PAREN_OPEN +%left PERLY_BRACKET_OPEN PERLY_BRACE_OPEN %% /* RULES */ @@ -124,7 +143,7 @@ grammar : GRAMPROG } remember stmtseq { - newPROG(block_end($3,$4)); + newPROG(block_end($remember,$stmtseq)); PL_compiling.cop_seq = 0; $$ = 0; } @@ -135,7 +154,7 @@ grammar : GRAMPROG } optexpr { - PL_eval_root = $3; + PL_eval_root = $optexpr; $$ = 0; } | GRAMBLOCK @@ -146,7 +165,7 @@ grammar : GRAMPROG block { PL_pad_reset_pending = TRUE; - PL_eval_root = $3; + PL_eval_root = $block; $$ = 0; yyunlex(); parser->yychar = yytoken = YYEOF; @@ -159,7 +178,7 @@ grammar : GRAMPROG barestmt { PL_pad_reset_pending = TRUE; - PL_eval_root = $3; + PL_eval_root = $barestmt; $$ = 0; yyunlex(); parser->yychar = yytoken = YYEOF; @@ -172,7 +191,7 @@ grammar : GRAMPROG fullstmt { PL_pad_reset_pending = TRUE; - PL_eval_root = $3; + PL_eval_root = $fullstmt; $$ = 0; yyunlex(); parser->yychar = yytoken = YYEOF; @@ -184,7 +203,7 @@ grammar : GRAMPROG } stmtseq { - PL_eval_root = $3; + PL_eval_root = $stmtseq; $$ = 0; } | GRAMSUBSIGNATURE @@ -194,62 +213,66 @@ grammar : GRAMPROG } subsigguts { - PL_eval_root = $3; + PL_eval_root = $subsigguts; $$ = 0; } ; /* An ordinary block */ -block : '{' remember stmtseq '}' - { if (parser->copline > (line_t)$1) - parser->copline = (line_t)$1; - $$ = block_end($2, $3); +block : PERLY_BRACE_OPEN remember stmtseq PERLY_BRACE_CLOSE + { if (parser->copline > (line_t)$PERLY_BRACE_OPEN) + parser->copline = (line_t)$PERLY_BRACE_OPEN; + $$ = block_end($remember, $stmtseq); } ; +empty + : %empty { $$ = NULL; } + ; + /* format body */ -formblock: '=' remember ';' FORMRBRACK formstmtseq ';' '.' - { if (parser->copline > (line_t)$1) - parser->copline = (line_t)$1; - $$ = block_end($2, $5); +formblock: PERLY_EQUAL_SIGN remember PERLY_SEMICOLON FORMRBRACK formstmtseq PERLY_SEMICOLON PERLY_DOT + { if (parser->copline > (line_t)$PERLY_EQUAL_SIGN) + parser->copline = (line_t)$PERLY_EQUAL_SIGN; + $$ = block_end($remember, $formstmtseq); } ; -remember: /* NULL */ /* start a full lexical scope */ +remember: %empty /* start a full lexical scope */ { $$ = block_start(TRUE); parser->parsed_sub = 0; } ; -mblock : '{' mremember stmtseq '}' - { if (parser->copline > (line_t)$1) - parser->copline = (line_t)$1; - $$ = block_end($2, $3); +mblock : PERLY_BRACE_OPEN mremember stmtseq PERLY_BRACE_CLOSE + { if (parser->copline > (line_t)$PERLY_BRACE_OPEN) + parser->copline = (line_t)$PERLY_BRACE_OPEN; + $$ = block_end($mremember, $stmtseq); } ; -mremember: /* NULL */ /* start a partial lexical scope */ +mremember: %empty /* start a partial lexical scope */ { $$ = block_start(FALSE); parser->parsed_sub = 0; } ; /* A sequence of statements in the program */ -stmtseq : /* NULL */ - { $$ = NULL; } - | stmtseq fullstmt - { $$ = op_append_list(OP_LINESEQ, $1, $2); +stmtseq + : empty + | stmtseq[list] fullstmt + { $$ = op_append_list(OP_LINESEQ, $list, $fullstmt); PL_pad_reset_pending = TRUE; - if ($1 && $2) + if ($list && $fullstmt) PL_hints |= HINT_BLOCK_SCOPE; } ; /* A sequence of format lines */ -formstmtseq: /* NULL */ - { $$ = NULL; } - | formstmtseq formline - { $$ = op_append_list(OP_LINESEQ, $1, $2); +formstmtseq + : empty + | formstmtseq[list] formline + { $$ = op_append_list(OP_LINESEQ, $list, $formline); PL_pad_reset_pending = TRUE; - if ($1 && $2) + if ($list && $formline) PL_hints |= HINT_BLOCK_SCOPE; } ; @@ -257,35 +280,35 @@ formstmtseq: /* NULL */ /* A statement in the program, including optional labels */ fullstmt: barestmt { - $$ = $1 ? newSTATEOP(0, NULL, $1) : NULL; + $$ = $barestmt ? newSTATEOP(0, NULL, $barestmt) : NULL; } | labfullstmt - { $$ = $1; } + { $$ = $labfullstmt; } ; labfullstmt: LABEL barestmt { - SV *label = cSVOPx_sv($1); + SV *label = cSVOPx_sv($LABEL); $$ = newSTATEOP(SvFLAGS(label) & SVf_UTF8, - savepv(SvPVX_const(label)), $2); - op_free($1); + savepv(SvPVX_const(label)), $barestmt); + op_free($LABEL); } - | LABEL labfullstmt + | LABEL labfullstmt[list] { - SV *label = cSVOPx_sv($1); + SV *label = cSVOPx_sv($LABEL); $$ = newSTATEOP(SvFLAGS(label) & SVf_UTF8, - savepv(SvPVX_const(label)), $2); - op_free($1); + savepv(SvPVX_const(label)), $list); + op_free($LABEL); } ; /* A bare statement, lacking label and other aspects of state op */ barestmt: PLUGSTMT - { $$ = $1; } + { $$ = $PLUGSTMT; } | FORMAT startformsub formname formblock { CV *fmtcv = PL_compcv; - newFORM($2, $3, $4); + newFORM($startformsub, $formname, $formblock); $$ = NULL; if (CvOUTSIDE(fmtcv) && !CvEVAL(CvOUTSIDE(fmtcv))) { pad_add_weakref(fmtcv); @@ -296,16 +319,16 @@ barestmt: PLUGSTMT /* sub declaration or definition not within scope of 'use feature "signatures"'*/ { - init_named_cv(PL_compcv, $2); + init_named_cv(PL_compcv, $subname); parser->in_my = 0; parser->in_my_stash = NULL; } proto subattrlist optsubbody { SvREFCNT_inc_simple_void(PL_compcv); - $2->op_type == OP_CONST - ? newATTRSUB($3, $2, $5, $6, $7) - : newMYSUB($3, $2, $5, $6, $7) + $subname->op_type == OP_CONST + ? newATTRSUB($startsub, $subname, $proto, $subattrlist, $optsubbody) + : newMYSUB($startsub, $subname, $proto, $subattrlist, $optsubbody) ; $$ = NULL; intro_my(); @@ -317,82 +340,82 @@ barestmt: PLUGSTMT * allowed in a declaration) */ { - init_named_cv(PL_compcv, $2); + init_named_cv(PL_compcv, $subname); parser->in_my = 0; parser->in_my_stash = NULL; } subattrlist optsigsubbody { SvREFCNT_inc_simple_void(PL_compcv); - $2->op_type == OP_CONST - ? newATTRSUB($3, $2, NULL, $5, $6) - : newMYSUB( $3, $2, NULL, $5, $6) + $subname->op_type == OP_CONST + ? newATTRSUB($startsub, $subname, NULL, $subattrlist, $optsigsubbody) + : newMYSUB( $startsub, $subname, NULL, $subattrlist, $optsigsubbody) ; $$ = NULL; intro_my(); parser->parsed_sub = 1; } - | PACKAGE BAREWORD BAREWORD ';' + | PACKAGE BAREWORD[version] BAREWORD[package] PERLY_SEMICOLON { - package($3); - if ($2) - package_version($2); + package($package); + if ($version) + package_version($version); $$ = NULL; } | USE startsub { CvSPECIAL_on(PL_compcv); /* It's a BEGIN {} */ } - BAREWORD BAREWORD optlistexpr ';' + BAREWORD[version] BAREWORD[module] optlistexpr PERLY_SEMICOLON { SvREFCNT_inc_simple_void(PL_compcv); - utilize($1, $2, $4, $5, $6); + utilize($USE, $startsub, $version, $module, $optlistexpr); parser->parsed_sub = 1; $$ = NULL; } - | IF '(' remember mexpr ')' mblock else + | IF PERLY_PAREN_OPEN remember mexpr PERLY_PAREN_CLOSE mblock else { - $$ = block_end($3, - newCONDOP(0, $4, op_scope($6), $7)); - parser->copline = (line_t)$1; + $$ = block_end($remember, + newCONDOP(0, $mexpr, op_scope($mblock), $else)); + parser->copline = (line_t)$IF; } - | UNLESS '(' remember mexpr ')' mblock else + | UNLESS PERLY_PAREN_OPEN remember mexpr PERLY_PAREN_CLOSE mblock else { - $$ = block_end($3, - newCONDOP(0, $4, $7, op_scope($6))); - parser->copline = (line_t)$1; + $$ = block_end($remember, + newCONDOP(0, $mexpr, $else, op_scope($mblock))); + parser->copline = (line_t)$UNLESS; } - | GIVEN '(' remember mexpr ')' mblock + | GIVEN PERLY_PAREN_OPEN remember mexpr PERLY_PAREN_CLOSE mblock { - $$ = block_end($3, newGIVENOP($4, op_scope($6), 0)); - parser->copline = (line_t)$1; + $$ = block_end($remember, newGIVENOP($mexpr, op_scope($mblock), 0)); + parser->copline = (line_t)$GIVEN; } - | WHEN '(' remember mexpr ')' mblock - { $$ = block_end($3, newWHENOP($4, op_scope($6))); } + | WHEN PERLY_PAREN_OPEN remember mexpr PERLY_PAREN_CLOSE mblock + { $$ = block_end($remember, newWHENOP($mexpr, op_scope($mblock))); } | DEFAULT block - { $$ = newWHENOP(0, op_scope($2)); } - | WHILE '(' remember texpr ')' mintro mblock cont + { $$ = newWHENOP(0, op_scope($block)); } + | WHILE PERLY_PAREN_OPEN remember texpr PERLY_PAREN_CLOSE mintro mblock cont { - $$ = block_end($3, + $$ = block_end($remember, newWHILEOP(0, 1, NULL, - $4, $7, $8, $6)); - parser->copline = (line_t)$1; + $texpr, $mblock, $cont, $mintro)); + parser->copline = (line_t)$WHILE; } - | UNTIL '(' remember iexpr ')' mintro mblock cont + | UNTIL PERLY_PAREN_OPEN remember iexpr PERLY_PAREN_CLOSE mintro mblock cont { - $$ = block_end($3, + $$ = block_end($remember, newWHILEOP(0, 1, NULL, - $4, $7, $8, $6)); - parser->copline = (line_t)$1; + $iexpr, $mblock, $cont, $mintro)); + parser->copline = (line_t)$UNTIL; } - | FOR '(' remember mnexpr ';' + | FOR PERLY_PAREN_OPEN remember mnexpr[init_mnexpr] PERLY_SEMICOLON { parser->expect = XTERM; } - texpr ';' + texpr PERLY_SEMICOLON { parser->expect = XTERM; } - mintro mnexpr ')' + mintro mnexpr[iterate_mnexpr] PERLY_PAREN_CLOSE mblock { - OP *initop = $4; + OP *initop = $init_mnexpr; OP *forop = newWHILEOP(0, 1, NULL, - scalar($7), $13, $11, $10); + scalar($texpr), $mblock, $iterate_mnexpr, $mintro); if (initop) { forop = op_prepend_elem(OP_LINESEQ, initop, op_append_elem(OP_LINESEQ, @@ -400,80 +423,105 @@ barestmt: PLUGSTMT forop)); } PL_hints |= HINT_BLOCK_SCOPE; - $$ = block_end($3, forop); - parser->copline = (line_t)$1; + $$ = block_end($remember, forop); + parser->copline = (line_t)$FOR; } - | FOR MY remember my_scalar '(' mexpr ')' mblock cont + | FOR MY remember my_scalar PERLY_PAREN_OPEN mexpr PERLY_PAREN_CLOSE mblock cont { - $$ = block_end($3, newFOROP(0, $4, $6, $8, $9)); - parser->copline = (line_t)$1; + $$ = block_end($remember, newFOROP(0, $my_scalar, $mexpr, $mblock, $cont)); + parser->copline = (line_t)$FOR; } - | FOR scalar '(' remember mexpr ')' mblock cont + | FOR MY remember PERLY_PAREN_OPEN my_list_of_scalars PERLY_PAREN_CLOSE PERLY_PAREN_OPEN mexpr PERLY_PAREN_CLOSE mblock cont + { + if ($my_list_of_scalars->op_type == OP_PADSV) + /* degenerate case of 1 var: for my ($x) .... + Flag it so it can be special-cased in newFOROP */ + $my_list_of_scalars->op_flags |= OPf_PARENS; + $$ = block_end($remember, newFOROP(0, $my_list_of_scalars, $mexpr, $mblock, $cont)); + parser->copline = (line_t)$FOR; + } + | FOR scalar PERLY_PAREN_OPEN remember mexpr PERLY_PAREN_CLOSE mblock cont { - $$ = block_end($4, newFOROP(0, - op_lvalue($2, OP_ENTERLOOP), $5, $7, $8)); - parser->copline = (line_t)$1; + $$ = block_end($remember, newFOROP(0, + op_lvalue($scalar, OP_ENTERLOOP), $mexpr, $mblock, $cont)); + parser->copline = (line_t)$FOR; } | FOR my_refgen remember my_var - { parser->in_my = 0; $$ = my($4); } - '(' mexpr ')' mblock cont + { parser->in_my = 0; $$ = my($my_var); }[variable] + PERLY_PAREN_OPEN mexpr PERLY_PAREN_CLOSE mblock cont { $$ = block_end( - $3, + $remember, newFOROP(0, op_lvalue( newUNOP(OP_REFGEN, 0, - $5), + $variable), OP_ENTERLOOP), - $7, $9, $10) + $mexpr, $mblock, $cont) ); - parser->copline = (line_t)$1; + parser->copline = (line_t)$FOR; } - | FOR REFGEN refgen_topic '(' remember mexpr ')' mblock cont + | FOR REFGEN refgen_topic PERLY_PAREN_OPEN remember mexpr PERLY_PAREN_CLOSE mblock cont { - $$ = block_end($5, newFOROP( + $$ = block_end($remember, newFOROP( 0, op_lvalue(newUNOP(OP_REFGEN, 0, - $3), - OP_ENTERLOOP), $6, $8, $9)); - parser->copline = (line_t)$1; + $refgen_topic), + OP_ENTERLOOP), $mexpr, $mblock, $cont)); + parser->copline = (line_t)$FOR; } - | FOR '(' remember mexpr ')' mblock cont + | FOR PERLY_PAREN_OPEN remember mexpr PERLY_PAREN_CLOSE mblock cont { - $$ = block_end($3, - newFOROP(0, NULL, $4, $6, $7)); - parser->copline = (line_t)$1; + $$ = block_end($remember, + newFOROP(0, NULL, $mexpr, $mblock, $cont)); + parser->copline = (line_t)$FOR; + } + | TRY mblock[try] CATCH PERLY_PAREN_OPEN + { parser->in_my = 1; } + remember scalar + { parser->in_my = 0; intro_my(); } + PERLY_PAREN_CLOSE mblock[catch] finally + { + $$ = newTRYCATCHOP(0, + $try, $scalar, block_end($remember, op_scope($catch))); + if($finally) + $$ = op_wrap_finally($$, $finally); + parser->copline = (line_t)$TRY; } | block cont { /* a block is a loop that happens once */ $$ = newWHILEOP(0, 1, NULL, - NULL, $1, $2, 0); + NULL, $block, $cont, 0); } - | PACKAGE BAREWORD BAREWORD '{' remember + | PACKAGE BAREWORD[version] BAREWORD[package] PERLY_BRACE_OPEN remember { - package($3); - if ($2) { - package_version($2); + package($package); + if ($version) { + package_version($version); } } - stmtseq '}' + stmtseq PERLY_BRACE_CLOSE { /* a block is a loop that happens once */ $$ = newWHILEOP(0, 1, NULL, - NULL, block_end($5, $7), NULL, 0); - if (parser->copline > (line_t)$4) - parser->copline = (line_t)$4; + NULL, block_end($remember, $stmtseq), NULL, 0); + if (parser->copline > (line_t)$PERLY_BRACE_OPEN) + parser->copline = (line_t)$PERLY_BRACE_OPEN; + } + | sideff PERLY_SEMICOLON + { + $$ = $sideff; } - | sideff ';' + | DEFER mblock { - $$ = $1; + $$ = newDEFEROP(0, op_scope($2)); } - | YADAYADA ';' + | YADAYADA PERLY_SEMICOLON { $$ = newLISTOP(OP_DIE, 0, newOP(OP_PUSHMARK, 0), newSVOP(OP_CONST, 0, newSVpvs("Unimplemented"))); } - | ';' + | PERLY_SEMICOLON { $$ = NULL; parser->copline = NOLINE; @@ -483,12 +531,12 @@ barestmt: PLUGSTMT /* Format line */ formline: THING formarg { OP *list; - if ($2) { - OP *term = $2; - list = op_append_elem(OP_LIST, $1, term); + if ($formarg) { + OP *term = $formarg; + list = op_append_elem(OP_LIST, $THING, term); } else { - list = $1; + list = $THING; } if (parser->copline == NOLINE) parser->copline = CopLINE(PL_curcop)-1; @@ -498,70 +546,80 @@ formline: THING formarg } ; -formarg : /* NULL */ - { $$ = NULL; } +formarg + : empty | FORMLBRACK stmtseq FORMRBRACK - { $$ = op_unscope($2); } + { $$ = op_unscope($stmtseq); } ; +condition: expr +; + /* An expression which may have a side-effect */ sideff : error { $$ = NULL; } - | expr - { $$ = $1; } - | expr IF expr - { $$ = newLOGOP(OP_AND, 0, $3, $1); } - | expr UNLESS expr - { $$ = newLOGOP(OP_OR, 0, $3, $1); } - | expr WHILE expr - { $$ = newLOOPOP(OPf_PARENS, 1, scalar($3), $1); } - | expr UNTIL iexpr - { $$ = newLOOPOP(OPf_PARENS, 1, $3, $1); } - | expr FOR expr - { $$ = newFOROP(0, NULL, $3, $1, NULL); - parser->copline = (line_t)$2; } - | expr WHEN expr - { $$ = newWHENOP($3, op_scope($1)); } + | expr[body] + { $$ = $body; } + | expr[body] IF condition + { $$ = newLOGOP(OP_AND, 0, $condition, $body); } + | expr[body] UNLESS condition + { $$ = newLOGOP(OP_OR, 0, $condition, $body); } + | expr[body] WHILE condition + { $$ = newLOOPOP(OPf_PARENS, 1, scalar($condition), $body); } + | expr[body] UNTIL iexpr + { $$ = newLOOPOP(OPf_PARENS, 1, $iexpr, $body); } + | expr[body] FOR condition + { $$ = newFOROP(0, NULL, $condition, $body, NULL); + parser->copline = (line_t)$FOR; } + | expr[body] WHEN condition + { $$ = newWHENOP($condition, op_scope($body)); } ; /* else and elsif blocks */ -else : /* NULL */ - { $$ = NULL; } +else + : empty | ELSE mblock { - ($2)->op_flags |= OPf_PARENS; - $$ = op_scope($2); + ($mblock)->op_flags |= OPf_PARENS; + $$ = op_scope($mblock); } - | ELSIF '(' mexpr ')' mblock else - { parser->copline = (line_t)$1; + | ELSIF PERLY_PAREN_OPEN mexpr PERLY_PAREN_CLOSE mblock else[else.recurse] + { parser->copline = (line_t)$ELSIF; $$ = newCONDOP(0, - newSTATEOP(OPf_SPECIAL,NULL,$3), - op_scope($5), $6); + newSTATEOP(OPf_SPECIAL,NULL,$mexpr), + op_scope($mblock), $[else.recurse]); PL_hints |= HINT_BLOCK_SCOPE; } ; /* Continue blocks */ -cont : /* NULL */ - { $$ = NULL; } +cont + : empty | CONTINUE block - { $$ = op_scope($2); } + { $$ = op_scope($block); } + ; + +/* Finally blocks */ +finally : %empty + { $$ = NULL; } + | FINALLY block + { $$ = op_scope($block); } ; /* determine whether there are any new my declarations */ -mintro : /* NULL */ +mintro : %empty { $$ = (PL_min_intro_pending && PL_max_intro_pending >= PL_min_intro_pending); intro_my(); } /* Normal expression */ -nexpr : /* NULL */ - { $$ = NULL; } +nexpr + : empty | sideff ; /* Boolean expression */ -texpr : /* NULL means true */ +texpr : %empty /* NULL means true */ { YYSTYPE tmplval; (void)scan_num("1", &tmplval); $$ = tmplval.opval; } @@ -570,34 +628,34 @@ texpr : /* NULL means true */ /* Inverted boolean expression */ iexpr : expr - { $$ = invert(scalar($1)); } + { $$ = invert(scalar($expr)); } ; /* Expression with its own lexical scope */ mexpr : expr - { $$ = $1; intro_my(); } + { $$ = $expr; intro_my(); } ; mnexpr : nexpr - { $$ = $1; intro_my(); } + { $$ = $nexpr; intro_my(); } ; -formname: BAREWORD { $$ = $1; } - | /* NULL */ { $$ = NULL; } +formname: BAREWORD { $$ = $BAREWORD; } + | empty ; -startsub: /* NULL */ /* start a regular subroutine scope */ +startsub: %empty /* start a regular subroutine scope */ { $$ = start_subparse(FALSE, 0); SAVEFREESV(PL_compcv); } ; -startanonsub: /* NULL */ /* start an anonymous subroutine scope */ +startanonsub: %empty /* start an anonymous subroutine scope */ { $$ = start_subparse(FALSE, CVf_ANON); SAVEFREESV(PL_compcv); } ; -startformsub: /* NULL */ /* start a format subroutine scope */ +startformsub: %empty /* start a format subroutine scope */ { $$ = start_subparse(TRUE, 0); SAVEFREESV(PL_compcv); } ; @@ -608,23 +666,23 @@ subname : BAREWORD ; /* Subroutine prototype */ -proto : /* NULL */ - { $$ = NULL; } +proto + : empty | THING ; /* Optional list of subroutine attributes */ -subattrlist: /* NULL */ - { $$ = NULL; } +subattrlist + : empty | COLONATTR THING - { $$ = $2; } + { $$ = $THING; } | COLONATTR { $$ = NULL; } ; /* List of attributes for a "my" variable declaration */ myattrlist: COLONATTR THING - { $$ = $2; } + { $$ = $THING; } | COLONATTR { $$ = NULL; } ; @@ -636,24 +694,24 @@ myattrlist: COLONATTR THING */ /* the '' or 'foo' part of a '$' or '@foo' etc signature variable */ -sigvarname: /* NULL */ +sigvarname: %empty { parser->in_my = 0; $$ = NULL; } | PRIVATEREF - { parser->in_my = 0; $$ = $1; } + { parser->in_my = 0; $$ = $PRIVATEREF; } ; sigslurpsigil: - '@' + PERLY_SNAIL { $$ = '@'; } - | '%' + | PERLY_PERCENT_SIGN { $$ = '%'; } /* @, %, @foo, %foo */ sigslurpelem: sigslurpsigil sigvarname sigdefault/* def only to catch errors */ { - I32 sigil = $1; - OP *var = $2; - OP *defexpr = $3; + I32 sigil = $sigslurpsigil; + OP *var = $sigvarname; + OP *defexpr = $sigdefault; if (parser->sig_slurpy) yyerror("Multiple slurpy parameters not allowed"); @@ -668,20 +726,20 @@ sigslurpelem: sigslurpsigil sigvarname sigdefault/* def only to catch errors */ ; /* default part of sub signature scalar element: i.e. '= default_expr' */ -sigdefault: /* NULL */ - { $$ = NULL; } +sigdefault + : empty | ASSIGNOP { $$ = newOP(OP_NULL, 0); } | ASSIGNOP term - { $$ = $2; } + { $$ = $term; } /* subroutine signature scalar element: e.g. '$x', '$=', '$x = $default' */ sigscalarelem: - '$' sigvarname sigdefault + PERLY_DOLLAR sigvarname sigdefault { - OP *var = $2; - OP *defexpr = $3; + OP *var = $sigvarname; + OP *defexpr = $sigdefault; if (parser->sig_slurpy) yyerror("Slurpy parameter not last"); @@ -744,38 +802,38 @@ sigscalarelem: /* subroutine signature element: e.g. '$x = $default' or '%h' */ sigelem: sigscalarelem - { parser->in_my = KEY_sigvar; $$ = $1; } + { parser->in_my = KEY_sigvar; $$ = $sigscalarelem; } | sigslurpelem - { parser->in_my = KEY_sigvar; $$ = $1; } + { parser->in_my = KEY_sigvar; $$ = $sigslurpelem; } ; /* list of subroutine signature elements */ siglist: - siglist ',' - { $$ = $1; } - | siglist ',' sigelem + siglist[list] PERLY_COMMA + { $$ = $list; } + | siglist[list] PERLY_COMMA sigelem[element] { - $$ = op_append_list(OP_LINESEQ, $1, $3); + $$ = op_append_list(OP_LINESEQ, $list, $element); } - | sigelem %prec PREC_LOW - { $$ = $1; } + | sigelem[element] %prec PREC_LOW + { $$ = $element; } ; /* () or (....) */ -siglistornull: /* NULL */ - { $$ = NULL; } +optsiglist + : empty | siglist - { $$ = $1; } + ; /* optional subroutine signature */ -optsubsignature: /* NULL */ - { $$ = NULL; } +optsubsignature + : empty | subsignature - { $$ = $1; } + ; /* Subroutine signature */ -subsignature: '(' subsigguts ')' - { $$ = $2; } +subsignature: PERLY_PAREN_OPEN subsigguts PERLY_PAREN_CLOSE + { $$ = $subsigguts; } subsigguts: { @@ -788,9 +846,9 @@ subsigguts: parser->sig_slurpy = 0; parser->in_my = KEY_sigvar; } - siglistornull + optsiglist { - OP *sigops = $2; + OP *sigops = $optsiglist; struct op_argcheck_aux *aux; OP *check; @@ -799,10 +857,6 @@ subsigguts: "subroutine signatures not enabled"); /* We shouldn't get here otherwise */ - Perl_ck_warner_d(aTHX_ - packWARN(WARN_EXPERIMENTAL__SIGNATURES), - "The signatures feature is experimental"); - aux = (struct op_argcheck_aux*) PerlMemShared_malloc( sizeof(struct op_argcheck_aux)); @@ -830,6 +884,8 @@ subsigguts: $$ = newUNOP_AUX(OP_ARGCHECK, 0, sigops, NULL); op_null($$); + CvSIGNATURE_on(PL_compcv); + parser->in_my = 0; /* tell the toker that attrributes can follow * this sig, but only so that the toker @@ -846,103 +902,104 @@ subsigguts: ; /* Optional subroutine body (for named subroutine declaration) */ -optsubbody: subbody { $$ = $1; } - | ';' { $$ = NULL; } +optsubbody + : subbody + | PERLY_SEMICOLON { $$ = NULL; } ; /* Subroutine body (without signature) */ -subbody: remember '{' stmtseq '}' +subbody: remember PERLY_BRACE_OPEN stmtseq PERLY_BRACE_CLOSE { - if (parser->copline > (line_t)$2) - parser->copline = (line_t)$2; - $$ = block_end($1, $3); + if (parser->copline > (line_t)$PERLY_BRACE_OPEN) + parser->copline = (line_t)$PERLY_BRACE_OPEN; + $$ = block_end($remember, $stmtseq); } ; /* optional [ Subroutine body with optional signature ] (for named * subroutine declaration) */ -optsigsubbody: sigsubbody { $$ = $1; } - | ';' { $$ = NULL; } +optsigsubbody + : sigsubbody + | PERLY_SEMICOLON { $$ = NULL; } + ; /* Subroutine body with optional signature */ -sigsubbody: remember optsubsignature '{' stmtseq '}' +sigsubbody: remember optsubsignature PERLY_BRACE_OPEN stmtseq PERLY_BRACE_CLOSE { - if (parser->copline > (line_t)$3) - parser->copline = (line_t)$3; - $$ = block_end($1, - op_append_list(OP_LINESEQ, $2, $4)); + if (parser->copline > (line_t)$PERLY_BRACE_OPEN) + parser->copline = (line_t)$PERLY_BRACE_OPEN; + $$ = block_end($remember, + op_append_list(OP_LINESEQ, $optsubsignature, $stmtseq)); } ; /* Ordinary expressions; logical combinations */ -expr : expr ANDOP expr - { $$ = newLOGOP(OP_AND, 0, $1, $3); } - | expr OROP expr - { $$ = newLOGOP($2, 0, $1, $3); } - | expr DOROP expr - { $$ = newLOGOP(OP_DOR, 0, $1, $3); } +expr : expr[lhs] ANDOP expr[rhs] + { $$ = newLOGOP(OP_AND, 0, $lhs, $rhs); } + | expr[lhs] OROP[operator] expr[rhs] + { $$ = newLOGOP($operator, 0, $lhs, $rhs); } | listexpr %prec PREC_LOW ; /* Expressions are a list of terms joined by commas */ -listexpr: listexpr ',' - { $$ = $1; } - | listexpr ',' term +listexpr: listexpr[list] PERLY_COMMA + { $$ = $list; } + | listexpr[list] PERLY_COMMA term { - OP* term = $3; - $$ = op_append_elem(OP_LIST, $1, term); + OP* term = $term; + $$ = op_append_elem(OP_LIST, $list, term); } | term %prec PREC_LOW ; /* List operators */ listop : LSTOP indirob listexpr /* map {...} @args or print $fh @args */ - { $$ = op_convert_list($1, OPf_STACKED, - op_prepend_elem(OP_LIST, newGVREF($1,$2), $3) ); + { $$ = op_convert_list($LSTOP, OPf_STACKED, + op_prepend_elem(OP_LIST, newGVREF($LSTOP,$indirob), $listexpr) ); } - | FUNC '(' indirob expr ')' /* print ($fh @args */ - { $$ = op_convert_list($1, OPf_STACKED, - op_prepend_elem(OP_LIST, newGVREF($1,$3), $4) ); + | FUNC PERLY_PAREN_OPEN indirob expr PERLY_PAREN_CLOSE /* print ($fh @args */ + { $$ = op_convert_list($FUNC, OPf_STACKED, + op_prepend_elem(OP_LIST, newGVREF($FUNC,$indirob), $expr) ); } - | term ARROW method '(' optexpr ')' /* $foo->bar(list) */ + | term ARROW method PERLY_PAREN_OPEN optexpr PERLY_PAREN_CLOSE /* $foo->bar(list) */ { $$ = op_convert_list(OP_ENTERSUB, OPf_STACKED, op_append_elem(OP_LIST, - op_prepend_elem(OP_LIST, scalar($1), $5), - newMETHOP(OP_METHOD, 0, $3))); + op_prepend_elem(OP_LIST, scalar($term), $optexpr), + newMETHOP(OP_METHOD, 0, $method))); } | term ARROW method /* $foo->bar */ { $$ = op_convert_list(OP_ENTERSUB, OPf_STACKED, - op_append_elem(OP_LIST, scalar($1), - newMETHOP(OP_METHOD, 0, $3))); + op_append_elem(OP_LIST, scalar($term), + newMETHOP(OP_METHOD, 0, $method))); } | METHOD indirob optlistexpr /* new Class @args */ { $$ = op_convert_list(OP_ENTERSUB, OPf_STACKED, op_append_elem(OP_LIST, - op_prepend_elem(OP_LIST, $2, $3), - newMETHOP(OP_METHOD, 0, $1))); + op_prepend_elem(OP_LIST, $indirob, $optlistexpr), + newMETHOP(OP_METHOD, 0, $METHOD))); } - | FUNCMETH indirob '(' optexpr ')' /* method $object (@args) */ + | FUNCMETH indirob PERLY_PAREN_OPEN optexpr PERLY_PAREN_CLOSE /* method $object (@args) */ { $$ = op_convert_list(OP_ENTERSUB, OPf_STACKED, op_append_elem(OP_LIST, - op_prepend_elem(OP_LIST, $2, $4), - newMETHOP(OP_METHOD, 0, $1))); + op_prepend_elem(OP_LIST, $indirob, $optexpr), + newMETHOP(OP_METHOD, 0, $FUNCMETH))); } | LSTOP optlistexpr /* print @args */ - { $$ = op_convert_list($1, 0, $2); } - | FUNC '(' optexpr ')' /* print (@args) */ - { $$ = op_convert_list($1, 0, $3); } + { $$ = op_convert_list($LSTOP, 0, $optlistexpr); } + | FUNC PERLY_PAREN_OPEN optexpr PERLY_PAREN_CLOSE /* print (@args) */ + { $$ = op_convert_list($FUNC, 0, $optexpr); } | FUNC SUBLEXSTART optexpr SUBLEXEND /* uc($arg) from "\U..." */ - { $$ = op_convert_list($1, 0, $3); } + { $$ = op_convert_list($FUNC, 0, $optexpr); } | LSTOPSUB startanonsub block /* sub f(&@); f { foo } ... */ { SvREFCNT_inc_simple_void(PL_compcv); - $$ = newANONATTRSUB($2, 0, NULL, $3); } + $$ = newANONATTRSUB($startanonsub, 0, NULL, $block); }[anonattrsub] optlistexpr %prec LSTOP /* ... @bar */ { $$ = newUNOP(OP_ENTERSUB, OPf_STACKED, op_append_elem(OP_LIST, - op_prepend_elem(OP_LIST, $4, $5), $1)); + op_prepend_elem(OP_LIST, $anonattrsub, $optlistexpr), $LSTOPSUB)); } ; @@ -952,151 +1009,151 @@ method : METHOD ; /* Some kind of subscripted expression */ -subscripted: gelem '{' expr ';' '}' /* *main::{something} */ - /* In this and all the hash accessors, ';' is +subscripted: gelem PERLY_BRACE_OPEN expr PERLY_SEMICOLON PERLY_BRACE_CLOSE /* *main::{something} */ + /* In this and all the hash accessors, PERLY_SEMICOLON is * provided by the tokeniser */ - { $$ = newBINOP(OP_GELEM, 0, $1, scalar($3)); } - | scalar '[' expr ']' /* $array[$element] */ - { $$ = newBINOP(OP_AELEM, 0, oopsAV($1), scalar($3)); + { $$ = newBINOP(OP_GELEM, 0, $gelem, scalar($expr)); } + | scalar[array] PERLY_BRACKET_OPEN expr PERLY_BRACKET_CLOSE /* $array[$element] */ + { $$ = newBINOP(OP_AELEM, 0, oopsAV($array), scalar($expr)); } - | term ARROW '[' expr ']' /* somearef->[$element] */ + | term[array_reference] ARROW PERLY_BRACKET_OPEN expr PERLY_BRACKET_CLOSE /* somearef->[$element] */ { $$ = newBINOP(OP_AELEM, 0, - ref(newAVREF($1),OP_RV2AV), - scalar($4)); + ref(newAVREF($array_reference),OP_RV2AV), + scalar($expr)); } - | subscripted '[' expr ']' /* $foo->[$bar]->[$baz] */ + | subscripted[array_reference] PERLY_BRACKET_OPEN expr PERLY_BRACKET_CLOSE /* $foo->[$bar]->[$baz] */ { $$ = newBINOP(OP_AELEM, 0, - ref(newAVREF($1),OP_RV2AV), - scalar($3)); + ref(newAVREF($array_reference),OP_RV2AV), + scalar($expr)); } - | scalar '{' expr ';' '}' /* $foo{bar();} */ - { $$ = newBINOP(OP_HELEM, 0, oopsHV($1), jmaybe($3)); + | scalar[hash] PERLY_BRACE_OPEN expr PERLY_SEMICOLON PERLY_BRACE_CLOSE /* $foo{bar();} */ + { $$ = newBINOP(OP_HELEM, 0, oopsHV($hash), jmaybe($expr)); } - | term ARROW '{' expr ';' '}' /* somehref->{bar();} */ + | term[hash_reference] ARROW PERLY_BRACE_OPEN expr PERLY_SEMICOLON PERLY_BRACE_CLOSE /* somehref->{bar();} */ { $$ = newBINOP(OP_HELEM, 0, - ref(newHVREF($1),OP_RV2HV), - jmaybe($4)); } - | subscripted '{' expr ';' '}' /* $foo->[bar]->{baz;} */ + ref(newHVREF($hash_reference),OP_RV2HV), + jmaybe($expr)); } + | subscripted[hash_reference] PERLY_BRACE_OPEN expr PERLY_SEMICOLON PERLY_BRACE_CLOSE /* $foo->[bar]->{baz;} */ { $$ = newBINOP(OP_HELEM, 0, - ref(newHVREF($1),OP_RV2HV), - jmaybe($3)); } - | term ARROW '(' ')' /* $subref->() */ + ref(newHVREF($hash_reference),OP_RV2HV), + jmaybe($expr)); } + | term[code_reference] ARROW PERLY_PAREN_OPEN PERLY_PAREN_CLOSE /* $subref->() */ { $$ = newUNOP(OP_ENTERSUB, OPf_STACKED, - newCVREF(0, scalar($1))); + newCVREF(0, scalar($code_reference))); if (parser->expect == XBLOCK) parser->expect = XOPERATOR; } - | term ARROW '(' expr ')' /* $subref->(@args) */ + | term[code_reference] ARROW PERLY_PAREN_OPEN expr PERLY_PAREN_CLOSE /* $subref->(@args) */ { $$ = newUNOP(OP_ENTERSUB, OPf_STACKED, - op_append_elem(OP_LIST, $4, - newCVREF(0, scalar($1)))); + op_append_elem(OP_LIST, $expr, + newCVREF(0, scalar($code_reference)))); if (parser->expect == XBLOCK) parser->expect = XOPERATOR; } - | subscripted '(' expr ')' /* $foo->{bar}->(@args) */ + | subscripted[code_reference] PERLY_PAREN_OPEN expr PERLY_PAREN_CLOSE /* $foo->{bar}->(@args) */ { $$ = newUNOP(OP_ENTERSUB, OPf_STACKED, - op_append_elem(OP_LIST, $3, - newCVREF(0, scalar($1)))); + op_append_elem(OP_LIST, $expr, + newCVREF(0, scalar($code_reference)))); if (parser->expect == XBLOCK) parser->expect = XOPERATOR; } - | subscripted '(' ')' /* $foo->{bar}->() */ + | subscripted[code_reference] PERLY_PAREN_OPEN PERLY_PAREN_CLOSE /* $foo->{bar}->() */ { $$ = newUNOP(OP_ENTERSUB, OPf_STACKED, - newCVREF(0, scalar($1))); + newCVREF(0, scalar($code_reference))); if (parser->expect == XBLOCK) parser->expect = XOPERATOR; } - | '(' expr ')' '[' expr ']' /* list slice */ - { $$ = newSLICEOP(0, $5, $2); } - | QWLIST '[' expr ']' /* list literal slice */ - { $$ = newSLICEOP(0, $3, $1); } - | '(' ')' '[' expr ']' /* empty list slice! */ - { $$ = newSLICEOP(0, $4, NULL); } + | PERLY_PAREN_OPEN expr[list] PERLY_PAREN_CLOSE PERLY_BRACKET_OPEN expr[slice] PERLY_BRACKET_CLOSE /* list slice */ + { $$ = newSLICEOP(0, $slice, $list); } + | QWLIST PERLY_BRACKET_OPEN expr PERLY_BRACKET_CLOSE /* list literal slice */ + { $$ = newSLICEOP(0, $expr, $QWLIST); } + | PERLY_PAREN_OPEN PERLY_PAREN_CLOSE PERLY_BRACKET_OPEN expr PERLY_BRACKET_CLOSE /* empty list slice! */ + { $$ = newSLICEOP(0, $expr, NULL); } ; /* Binary operators between terms */ -termbinop: term ASSIGNOP term /* $x = $y, $x += $y */ - { $$ = newASSIGNOP(OPf_STACKED, $1, $2, $3); } - | term POWOP term /* $x ** $y */ - { $$ = newBINOP($2, 0, scalar($1), scalar($3)); } - | term MULOP term /* $x * $y, $x x $y */ - { if ($2 != OP_REPEAT) - scalar($1); - $$ = newBINOP($2, 0, $1, scalar($3)); - } - | term ADDOP term /* $x + $y */ - { $$ = newBINOP($2, 0, scalar($1), scalar($3)); } - | term SHIFTOP term /* $x >> $y, $x << $y */ - { $$ = newBINOP($2, 0, scalar($1), scalar($3)); } +termbinop: term[lhs] ASSIGNOP term[rhs] /* $x = $y, $x += $y */ + { $$ = newASSIGNOP(OPf_STACKED, $lhs, $ASSIGNOP, $rhs); } + | term[lhs] POWOP term[rhs] /* $x ** $y */ + { $$ = newBINOP($POWOP, 0, scalar($lhs), scalar($rhs)); } + | term[lhs] MULOP term[rhs] /* $x * $y, $x x $y */ + { if ($MULOP != OP_REPEAT) + scalar($lhs); + $$ = newBINOP($MULOP, 0, $lhs, scalar($rhs)); + } + | term[lhs] ADDOP term[rhs] /* $x + $y */ + { $$ = newBINOP($ADDOP, 0, scalar($lhs), scalar($rhs)); } + | term[lhs] SHIFTOP term[rhs] /* $x >> $y, $x << $y */ + { $$ = newBINOP($SHIFTOP, 0, scalar($lhs), scalar($rhs)); } | termrelop %prec PREC_LOW /* $x > $y, etc. */ - { $$ = $1; } + { $$ = $termrelop; } | termeqop %prec PREC_LOW /* $x == $y, $x cmp $y */ - { $$ = $1; } - | term BITANDOP term /* $x & $y */ - { $$ = newBINOP($2, 0, scalar($1), scalar($3)); } - | term BITOROP term /* $x | $y */ - { $$ = newBINOP($2, 0, scalar($1), scalar($3)); } - | term DOTDOT term /* $x..$y, $x...$y */ - { $$ = newRANGE($2, scalar($1), scalar($3)); } - | term ANDAND term /* $x && $y */ - { $$ = newLOGOP(OP_AND, 0, $1, $3); } - | term OROR term /* $x || $y */ - { $$ = newLOGOP(OP_OR, 0, $1, $3); } - | term DORDOR term /* $x // $y */ - { $$ = newLOGOP(OP_DOR, 0, $1, $3); } - | term MATCHOP term /* $x =~ /$y/ */ - { $$ = bind_match($2, $1, $3); } + { $$ = $termeqop; } + | term[lhs] BITANDOP term[rhs] /* $x & $y */ + { $$ = newBINOP($BITANDOP, 0, scalar($lhs), scalar($rhs)); } + | term[lhs] BITOROP term[rhs] /* $x | $y */ + { $$ = newBINOP($BITOROP, 0, scalar($lhs), scalar($rhs)); } + | term[lhs] DOTDOT term[rhs] /* $x..$y, $x...$y */ + { $$ = newRANGE($DOTDOT, scalar($lhs), scalar($rhs)); } + | term[lhs] ANDAND term[rhs] /* $x && $y */ + { $$ = newLOGOP(OP_AND, 0, $lhs, $rhs); } + | term[lhs] OROR term[rhs] /* $x || $y */ + { $$ = newLOGOP(OP_OR, 0, $lhs, $rhs); } + | term[lhs] DORDOR term[rhs] /* $x // $y */ + { $$ = newLOGOP(OP_DOR, 0, $lhs, $rhs); } + | term[lhs] MATCHOP term[rhs] /* $x =~ /$y/ */ + { $$ = bind_match($MATCHOP, $lhs, $rhs); } ; termrelop: relopchain %prec PREC_LOW - { $$ = cmpchain_finish($1); } - | term NCRELOP term - { $$ = newBINOP($2, 0, scalar($1), scalar($3)); } + { $$ = cmpchain_finish($relopchain); } + | term[lhs] NCRELOP term[rhs] + { $$ = newBINOP($NCRELOP, 0, scalar($lhs), scalar($rhs)); } | termrelop NCRELOP { yyerror("syntax error"); YYERROR; } | termrelop CHRELOP { yyerror("syntax error"); YYERROR; } ; -relopchain: term CHRELOP term - { $$ = cmpchain_start($2, $1, $3); } - | relopchain CHRELOP term - { $$ = cmpchain_extend($2, $1, $3); } +relopchain: term[lhs] CHRELOP term[rhs] + { $$ = cmpchain_start($CHRELOP, $lhs, $rhs); } + | relopchain[lhs] CHRELOP term[rhs] + { $$ = cmpchain_extend($CHRELOP, $lhs, $rhs); } ; termeqop: eqopchain %prec PREC_LOW - { $$ = cmpchain_finish($1); } - | term NCEQOP term - { $$ = newBINOP($2, 0, scalar($1), scalar($3)); } + { $$ = cmpchain_finish($eqopchain); } + | term[lhs] NCEQOP term[rhs] + { $$ = newBINOP($NCEQOP, 0, scalar($lhs), scalar($rhs)); } | termeqop NCEQOP { yyerror("syntax error"); YYERROR; } | termeqop CHEQOP { yyerror("syntax error"); YYERROR; } ; -eqopchain: term CHEQOP term - { $$ = cmpchain_start($2, $1, $3); } - | eqopchain CHEQOP term - { $$ = cmpchain_extend($2, $1, $3); } +eqopchain: term[lhs] CHEQOP term[rhs] + { $$ = cmpchain_start($CHEQOP, $lhs, $rhs); } + | eqopchain[lhs] CHEQOP term[rhs] + { $$ = cmpchain_extend($CHEQOP, $lhs, $rhs); } ; /* Unary operators and terms */ -termunop : '-' term %prec UMINUS /* -$x */ - { $$ = newUNOP(OP_NEGATE, 0, scalar($2)); } - | '+' term %prec UMINUS /* +$x */ - { $$ = $2; } - - | '!' term /* !$x */ - { $$ = newUNOP(OP_NOT, 0, scalar($2)); } - | '~' term /* ~$x */ - { $$ = newUNOP($1, 0, scalar($2)); } +termunop : PERLY_MINUS term %prec UMINUS /* -$x */ + { $$ = newUNOP(OP_NEGATE, 0, scalar($term)); } + | PERLY_PLUS term %prec UMINUS /* +$x */ + { $$ = $term; } + + | PERLY_EXCLAMATION_MARK term /* !$x */ + { $$ = newUNOP(OP_NOT, 0, scalar($term)); } + | PERLY_TILDE term /* ~$x */ + { $$ = newUNOP($PERLY_TILDE, 0, scalar($term)); } | term POSTINC /* $x++ */ { $$ = newUNOP(OP_POSTINC, 0, - op_lvalue(scalar($1), OP_POSTINC)); } + op_lvalue(scalar($term), OP_POSTINC)); } | term POSTDEC /* $x-- */ { $$ = newUNOP(OP_POSTDEC, 0, - op_lvalue(scalar($1), OP_POSTDEC));} + op_lvalue(scalar($term), OP_POSTDEC));} | term POSTJOIN /* implicit join after interpolated ->@ */ { $$ = op_convert_list(OP_JOIN, 0, op_append_elem( @@ -1105,184 +1162,179 @@ termunop : '-' term %prec UMINUS /* -$x */ newSVOP(OP_CONST,0, newSVpvs("\"")) )), - $1 + $term )); } | PREINC term /* ++$x */ { $$ = newUNOP(OP_PREINC, 0, - op_lvalue(scalar($2), OP_PREINC)); } + op_lvalue(scalar($term), OP_PREINC)); } | PREDEC term /* --$x */ { $$ = newUNOP(OP_PREDEC, 0, - op_lvalue(scalar($2), OP_PREDEC)); } + op_lvalue(scalar($term), OP_PREDEC)); } ; /* Constructors for anonymous data */ -anonymous: '[' expr ']' - { $$ = newANONLIST($2); } - | '[' ']' - { $$ = newANONLIST(NULL);} - | HASHBRACK expr ';' '}' %prec '(' /* { foo => "Bar" } */ - { $$ = newANONHASH($2); } - | HASHBRACK ';' '}' %prec '(' /* { } (';' by tokener) */ - { $$ = newANONHASH(NULL); } - | ANONSUB startanonsub proto subattrlist subbody %prec '(' +anonymous + : PERLY_BRACKET_OPEN optexpr PERLY_BRACKET_CLOSE + { $$ = newANONLIST($optexpr); } + | HASHBRACK optexpr PERLY_SEMICOLON PERLY_BRACE_CLOSE %prec PERLY_PAREN_OPEN /* { foo => "Bar" } */ + { $$ = newANONHASH($optexpr); } + | ANONSUB startanonsub proto subattrlist subbody %prec PERLY_PAREN_OPEN { SvREFCNT_inc_simple_void(PL_compcv); - $$ = newANONATTRSUB($2, $3, $4, $5); } - | ANON_SIGSUB startanonsub subattrlist sigsubbody %prec '(' + $$ = newANONATTRSUB($startanonsub, $proto, $subattrlist, $subbody); } + | ANON_SIGSUB startanonsub subattrlist sigsubbody %prec PERLY_PAREN_OPEN { SvREFCNT_inc_simple_void(PL_compcv); - $$ = newANONATTRSUB($2, NULL, $3, $4); } + $$ = newANONATTRSUB($startanonsub, NULL, $subattrlist, $sigsubbody); } ; /* Things called with "do" */ termdo : DO term %prec UNIOP /* do $filename */ - { $$ = dofile($2, $1);} - | DO block %prec '(' /* do { code */ - { $$ = newUNOP(OP_NULL, OPf_SPECIAL, op_scope($2));} + { $$ = dofile($term, $DO);} + | DO block %prec PERLY_PAREN_OPEN /* do { code */ + { $$ = newUNOP(OP_NULL, OPf_SPECIAL, op_scope($block));} ; -term : termbinop +term[product] : termbinop | termunop | anonymous | termdo - | term '?' term ':' term - { $$ = newCONDOP(0, $1, $3, $5); } - | REFGEN term /* \$x, \@y, \%z */ - { $$ = newUNOP(OP_REFGEN, 0, $2); } - | MY REFGEN term - { $$ = newUNOP(OP_REFGEN, 0, localize($3,1)); } + | term[condition] PERLY_QUESTION_MARK term[then] PERLY_COLON term[else] + { $$ = newCONDOP(0, $condition, $then, $else); } + | REFGEN term[operand] /* \$x, \@y, \%z */ + { $$ = newUNOP(OP_REFGEN, 0, $operand); } | myattrterm %prec UNIOP - { $$ = $1; } - | LOCAL term %prec UNIOP - { $$ = localize($2,0); } - | '(' expr ')' - { $$ = sawparens($2); } + { $$ = $myattrterm; } + | LOCAL term[operand] %prec UNIOP + { $$ = localize($operand,0); } + | PERLY_PAREN_OPEN expr PERLY_PAREN_CLOSE + { $$ = sawparens($expr); } | QWLIST - { $$ = $1; } - | '(' ')' + { $$ = $QWLIST; } + | PERLY_PAREN_OPEN PERLY_PAREN_CLOSE { $$ = sawparens(newNULLLIST()); } - | scalar %prec '(' - { $$ = $1; } - | star %prec '(' - { $$ = $1; } - | hsh %prec '(' - { $$ = $1; } - | ary %prec '(' - { $$ = $1; } - | arylen %prec '(' /* $#x, $#{ something } */ - { $$ = newUNOP(OP_AV2ARYLEN, 0, ref($1, OP_AV2ARYLEN));} + | scalar %prec PERLY_PAREN_OPEN + { $$ = $scalar; } + | star %prec PERLY_PAREN_OPEN + { $$ = $star; } + | hsh %prec PERLY_PAREN_OPEN + { $$ = $hsh; } + | ary %prec PERLY_PAREN_OPEN + { $$ = $ary; } + | arylen %prec PERLY_PAREN_OPEN /* $#x, $#{ something } */ + { $$ = newUNOP(OP_AV2ARYLEN, 0, ref($arylen, OP_AV2ARYLEN));} | subscripted - { $$ = $1; } - | sliceme '[' expr ']' /* array slice */ + { $$ = $subscripted; } + | sliceme PERLY_BRACKET_OPEN expr PERLY_BRACKET_CLOSE /* array slice */ { $$ = op_prepend_elem(OP_ASLICE, newOP(OP_PUSHMARK, 0), newLISTOP(OP_ASLICE, 0, - list($3), - ref($1, OP_ASLICE))); - if ($$ && $1) + list($expr), + ref($sliceme, OP_ASLICE))); + if ($$ && $sliceme) $$->op_private |= - $1->op_private & OPpSLICEWARNING; + $sliceme->op_private & OPpSLICEWARNING; } - | kvslice '[' expr ']' /* array key/value slice */ + | kvslice PERLY_BRACKET_OPEN expr PERLY_BRACKET_CLOSE /* array key/value slice */ { $$ = op_prepend_elem(OP_KVASLICE, newOP(OP_PUSHMARK, 0), newLISTOP(OP_KVASLICE, 0, - list($3), - ref(oopsAV($1), OP_KVASLICE))); - if ($$ && $1) + list($expr), + ref(oopsAV($kvslice), OP_KVASLICE))); + if ($$ && $kvslice) $$->op_private |= - $1->op_private & OPpSLICEWARNING; + $kvslice->op_private & OPpSLICEWARNING; } - | sliceme '{' expr ';' '}' /* @hash{@keys} */ + | sliceme PERLY_BRACE_OPEN expr PERLY_SEMICOLON PERLY_BRACE_CLOSE /* @hash{@keys} */ { $$ = op_prepend_elem(OP_HSLICE, newOP(OP_PUSHMARK, 0), newLISTOP(OP_HSLICE, 0, - list($3), - ref(oopsHV($1), OP_HSLICE))); - if ($$ && $1) + list($expr), + ref(oopsHV($sliceme), OP_HSLICE))); + if ($$ && $sliceme) $$->op_private |= - $1->op_private & OPpSLICEWARNING; + $sliceme->op_private & OPpSLICEWARNING; } - | kvslice '{' expr ';' '}' /* %hash{@keys} */ + | kvslice PERLY_BRACE_OPEN expr PERLY_SEMICOLON PERLY_BRACE_CLOSE /* %hash{@keys} */ { $$ = op_prepend_elem(OP_KVHSLICE, newOP(OP_PUSHMARK, 0), newLISTOP(OP_KVHSLICE, 0, - list($3), - ref($1, OP_KVHSLICE))); - if ($$ && $1) + list($expr), + ref($kvslice, OP_KVHSLICE))); + if ($$ && $kvslice) $$->op_private |= - $1->op_private & OPpSLICEWARNING; + $kvslice->op_private & OPpSLICEWARNING; } - | THING %prec '(' - { $$ = $1; } + | THING %prec PERLY_PAREN_OPEN + { $$ = $THING; } | amper /* &foo; */ - { $$ = newUNOP(OP_ENTERSUB, 0, scalar($1)); } - | amper '(' ')' /* &foo() or foo() */ - { $$ = newUNOP(OP_ENTERSUB, OPf_STACKED, scalar($1)); + { $$ = newUNOP(OP_ENTERSUB, 0, scalar($amper)); } + | amper PERLY_PAREN_OPEN PERLY_PAREN_CLOSE /* &foo() or foo() */ + { $$ = newUNOP(OP_ENTERSUB, OPf_STACKED, scalar($amper)); } - | amper '(' expr ')' /* &foo(@args) or foo(@args) */ + | amper PERLY_PAREN_OPEN expr PERLY_PAREN_CLOSE /* &foo(@args) or foo(@args) */ { $$ = newUNOP(OP_ENTERSUB, OPf_STACKED, - op_append_elem(OP_LIST, $3, scalar($1))); + op_append_elem(OP_LIST, $expr, scalar($amper))); } | NOAMP subname optlistexpr /* foo @args (no parens) */ { $$ = newUNOP(OP_ENTERSUB, OPf_STACKED, - op_append_elem(OP_LIST, $3, scalar($2))); - } - | term ARROW '$' '*' - { $$ = newSVREF($1); } - | term ARROW '@' '*' - { $$ = newAVREF($1); } - | term ARROW '%' '*' - { $$ = newHVREF($1); } - | term ARROW '&' '*' + op_append_elem(OP_LIST, $optlistexpr, scalar($subname))); + } + | term[operand] ARROW PERLY_DOLLAR PERLY_STAR + { $$ = newSVREF($operand); } + | term[operand] ARROW PERLY_SNAIL PERLY_STAR + { $$ = newAVREF($operand); } + | term[operand] ARROW PERLY_PERCENT_SIGN PERLY_STAR + { $$ = newHVREF($operand); } + | term[operand] ARROW PERLY_AMPERSAND PERLY_STAR { $$ = newUNOP(OP_ENTERSUB, 0, - scalar(newCVREF($3,$1))); } - | term ARROW '*' '*' %prec '(' - { $$ = newGVREF(0,$1); } + scalar(newCVREF($PERLY_AMPERSAND,$operand))); } + | term[operand] ARROW PERLY_STAR PERLY_STAR %prec PERLY_PAREN_OPEN + { $$ = newGVREF(0,$operand); } | LOOPEX /* loop exiting command (goto, last, dump, etc) */ - { $$ = newOP($1, OPf_SPECIAL); + { $$ = newOP($LOOPEX, OPf_SPECIAL); PL_hints |= HINT_BLOCK_SCOPE; } - | LOOPEX term - { $$ = newLOOPEX($1,$2); } + | LOOPEX term[operand] + { $$ = newLOOPEX($LOOPEX,$operand); } | NOTOP listexpr /* not $foo */ - { $$ = newUNOP(OP_NOT, 0, scalar($2)); } + { $$ = newUNOP(OP_NOT, 0, scalar($listexpr)); } | UNIOP /* Unary op, $_ implied */ - { $$ = newOP($1, 0); } + { $$ = newOP($UNIOP, 0); } | UNIOP block /* eval { foo }* */ - { $$ = newUNOP($1, 0, $2); } - | UNIOP term /* Unary op */ - { $$ = newUNOP($1, 0, $2); } + { $$ = newUNOP($UNIOP, 0, $block); } + | UNIOP term[operand] /* Unary op */ + { $$ = newUNOP($UNIOP, 0, $operand); } | REQUIRE /* require, $_ implied */ - { $$ = newOP(OP_REQUIRE, $1 ? OPf_SPECIAL : 0); } - | REQUIRE term /* require Foo */ - { $$ = newUNOP(OP_REQUIRE, $1 ? OPf_SPECIAL : 0, $2); } + { $$ = newOP(OP_REQUIRE, $REQUIRE ? OPf_SPECIAL : 0); } + | REQUIRE term[operand] /* require Foo */ + { $$ = newUNOP(OP_REQUIRE, $REQUIRE ? OPf_SPECIAL : 0, $operand); } | UNIOPSUB - { $$ = newUNOP(OP_ENTERSUB, OPf_STACKED, scalar($1)); } - | UNIOPSUB term /* Sub treated as unop */ + { $$ = newUNOP(OP_ENTERSUB, OPf_STACKED, scalar($UNIOPSUB)); } + | UNIOPSUB term[operand] /* Sub treated as unop */ { $$ = newUNOP(OP_ENTERSUB, OPf_STACKED, - op_append_elem(OP_LIST, $2, scalar($1))); } + op_append_elem(OP_LIST, $operand, scalar($UNIOPSUB))); } | FUNC0 /* Nullary operator */ - { $$ = newOP($1, 0); } - | FUNC0 '(' ')' - { $$ = newOP($1, 0);} + { $$ = newOP($FUNC0, 0); } + | FUNC0 PERLY_PAREN_OPEN PERLY_PAREN_CLOSE + { $$ = newOP($FUNC0, 0);} | FUNC0OP /* Same as above, but op created in toke.c */ - { $$ = $1; } - | FUNC0OP '(' ')' - { $$ = $1; } + { $$ = $FUNC0OP; } + | FUNC0OP PERLY_PAREN_OPEN PERLY_PAREN_CLOSE + { $$ = $FUNC0OP; } | FUNC0SUB /* Sub treated as nullop */ - { $$ = newUNOP(OP_ENTERSUB, OPf_STACKED, scalar($1)); } - | FUNC1 '(' ')' /* not () */ - { $$ = ($1 == OP_NOT) - ? newUNOP($1, 0, newSVOP(OP_CONST, 0, newSViv(0))) - : newOP($1, OPf_SPECIAL); } - | FUNC1 '(' expr ')' /* not($foo) */ - { $$ = newUNOP($1, 0, $3); } + { $$ = newUNOP(OP_ENTERSUB, OPf_STACKED, scalar($FUNC0SUB)); } + | FUNC1 PERLY_PAREN_OPEN PERLY_PAREN_CLOSE /* not () */ + { $$ = ($FUNC1 == OP_NOT) + ? newUNOP($FUNC1, 0, newSVOP(OP_CONST, 0, newSViv(0))) + : newOP($FUNC1, OPf_SPECIAL); } + | FUNC1 PERLY_PAREN_OPEN expr PERLY_PAREN_CLOSE /* not($foo) */ + { $$ = newUNOP($FUNC1, 0, $expr); } | PMFUNC /* m//, s///, qr//, tr/// */ { - if ( $1->op_type != OP_TRANS - && $1->op_type != OP_TRANSR - && (((PMOP*)$1)->op_pmflags & PMf_HAS_CV)) + if ( $PMFUNC->op_type != OP_TRANS + && $PMFUNC->op_type != OP_TRANSR + && (((PMOP*)$PMFUNC)->op_pmflags & PMf_HAS_CV)) { $$ = start_subparse(FALSE, CVf_ANON); SAVEFREESV(PL_compcv); @@ -1290,58 +1342,72 @@ term : termbinop $$ = 0; } SUBLEXSTART listexpr optrepl SUBLEXEND - { $$ = pmruntime($1, $4, $5, 1, $2); } + { $$ = pmruntime($PMFUNC, $listexpr, $optrepl, 1, $2); } | BAREWORD | listop | PLUGEXPR ; /* "my" declarations, with optional attributes */ -myattrterm: MY myterm myattrlist - { $$ = my_attrs($2,$3); } +myattrterm + : MY myterm myattrlist + { $$ = my_attrs($myterm,$myattrlist); } | MY myterm - { $$ = localize($2,1); } + { $$ = localize($myterm,1); } | MY REFGEN myterm myattrlist - { $$ = newUNOP(OP_REFGEN, 0, my_attrs($3,$4)); } + { $$ = newUNOP(OP_REFGEN, 0, my_attrs($myterm,$myattrlist)); } + | MY REFGEN term[operand] + { $$ = newUNOP(OP_REFGEN, 0, localize($operand,1)); } ; /* Things that can be "my"'d */ -myterm : '(' expr ')' - { $$ = sawparens($2); } - | '(' ')' +myterm : PERLY_PAREN_OPEN expr PERLY_PAREN_CLOSE + { $$ = sawparens($expr); } + | PERLY_PAREN_OPEN PERLY_PAREN_CLOSE { $$ = sawparens(newNULLLIST()); } - | scalar %prec '(' - { $$ = $1; } - | hsh %prec '(' - { $$ = $1; } - | ary %prec '(' - { $$ = $1; } + | scalar %prec PERLY_PAREN_OPEN + { $$ = $scalar; } + | hsh %prec PERLY_PAREN_OPEN + { $$ = $hsh; } + | ary %prec PERLY_PAREN_OPEN + { $$ = $ary; } ; /* Basic list expressions */ -optlistexpr: /* NULL */ %prec PREC_LOW - { $$ = NULL; } - | listexpr %prec PREC_LOW - { $$ = $1; } +optlistexpr + : empty %prec PREC_LOW + | listexpr %prec PREC_LOW ; -optexpr: /* NULL */ - { $$ = NULL; } +optexpr + : empty | expr - { $$ = $1; } ; -optrepl: /* NULL */ - { $$ = NULL; } - | '/' expr - { $$ = $2; } +optrepl + : empty + | PERLY_SLASH expr { $$ = $expr; } ; /* A little bit of trickery to make "for my $foo (@bar)" actually be lexical */ my_scalar: scalar - { parser->in_my = 0; $$ = my($1); } + { parser->in_my = 0; $$ = my($scalar); } + ; + +/* A list of scalars for "for my ($foo, $bar) (@baz)" */ +list_of_scalars: list_of_scalars[list] PERLY_COMMA + { $$ = $list; } + | list_of_scalars[list] PERLY_COMMA scalar + { + $$ = op_append_elem(OP_LIST, $list, $scalar); + } + | scalar %prec PREC_LOW + ; + +my_list_of_scalars: list_of_scalars + { parser->in_my = 0; $$ = $list_of_scalars; } ; my_var : scalar @@ -1357,59 +1423,59 @@ my_refgen: MY REFGEN | REFGEN MY ; -amper : '&' indirob - { $$ = newCVREF($1,$2); } +amper : PERLY_AMPERSAND indirob + { $$ = newCVREF($PERLY_AMPERSAND,$indirob); } ; -scalar : '$' indirob - { $$ = newSVREF($2); } +scalar : PERLY_DOLLAR indirob + { $$ = newSVREF($indirob); } ; -ary : '@' indirob - { $$ = newAVREF($2); - if ($$) $$->op_private |= $1; +ary : PERLY_SNAIL indirob + { $$ = newAVREF($indirob); + if ($$) $$->op_private |= $PERLY_SNAIL; } ; -hsh : '%' indirob - { $$ = newHVREF($2); - if ($$) $$->op_private |= $1; +hsh : PERLY_PERCENT_SIGN indirob + { $$ = newHVREF($indirob); + if ($$) $$->op_private |= $PERLY_PERCENT_SIGN; } ; arylen : DOLSHARP indirob - { $$ = newAVREF($2); } - | term ARROW DOLSHARP '*' - { $$ = newAVREF($1); } + { $$ = newAVREF($indirob); } + | term ARROW DOLSHARP PERLY_STAR + { $$ = newAVREF($term); } ; -star : '*' indirob - { $$ = newGVREF(0,$2); } +star : PERLY_STAR indirob + { $$ = newGVREF(0,$indirob); } ; sliceme : ary - | term ARROW '@' - { $$ = newAVREF($1); } + | term ARROW PERLY_SNAIL + { $$ = newAVREF($term); } ; kvslice : hsh - | term ARROW '%' - { $$ = newHVREF($1); } + | term ARROW PERLY_PERCENT_SIGN + { $$ = newHVREF($term); } ; gelem : star - | term ARROW '*' - { $$ = newGVREF(0,$1); } + | term ARROW PERLY_STAR + { $$ = newGVREF(0,$term); } ; /* Indirect objects */ indirob : BAREWORD - { $$ = scalar($1); } + { $$ = scalar($BAREWORD); } | scalar %prec PREC_LOW - { $$ = scalar($1); } + { $$ = scalar($scalar); } | block - { $$ = op_scope($1); } + { $$ = op_scope($block); } | PRIVATEREF - { $$ = $1; } + { $$ = $PRIVATEREF; } ; diff --git a/gnu/usr.bin/perl/plan9/buildinfo b/gnu/usr.bin/perl/plan9/buildinfo index 881e00e47ba..597dea835b0 100644 --- a/gnu/usr.bin/perl/plan9/buildinfo +++ b/gnu/usr.bin/perl/plan9/buildinfo @@ -1 +1 @@ -p9pvers = 5.008 +p9pvers = 5.32.0 diff --git a/gnu/usr.bin/perl/plan9/config.plan9 b/gnu/usr.bin/perl/plan9/config.plan9 index e489b0a0549..b6408b06c01 100644 --- a/gnu/usr.bin/perl/plan9/config.plan9 +++ b/gnu/usr.bin/perl/plan9/config.plan9 @@ -2,12 +2,12 @@ * This file is mangled by fndvers (and perhaps other scripts) to produce * the config.h for Plan 9. It was handwritten because the standard * configuration scripts were written in a shell dialect incomprehensible - * to Plan 9. + * to Plan 9. * config.h for Plan 9 - * Version: 5.8.0 - */ + * Version: blead + */ -/* Configuration time: 21-Oct-1996 15:11 +/* First configuration time: 21-Oct-1996 15:11 * Configured by: Luther Huffman, lutherh@stratcom.com * Target system: Plan 9 */ @@ -18,19 +18,46 @@ * */ +/* Last configuration time: June 2020 + * Configured by: David Romano, unobe@cpan.org + * Target system: Plan 9/9front + */ + #ifndef _config_h_ #define _config_h_ +/* CHARBITS: + * This symbol contains the size of a char, so that the C preprocessor + * can make decisions based on it. + */ +#define CHARBITS 8 /**/ + + /* CAT2: * This macro catenates 2 tokens together. */ -#define CAT2(a,b)a ## b +#if 42 == 1 +#define CAT2(a,b) a/**/b +#define STRINGIFY(a) "a" + /* If you can get stringification with catify, tell me how! */ +#endif +#if 42 == 42 +#define PeRl_CaTiFy(a, b) a ## b +#define PeRl_StGiFy(a) #a +/* the additional level of indirection enables these macros to be + * used as arguments to other macros. See K&R 2nd ed., page 231. */ +#define CAT2(a,b) PeRl_CaTiFy(a,b) +#define StGiFy(a) PeRl_StGiFy(a) +#define STRINGIFY(a) PeRl_StGiFy(a) +#endif +#if 42 != 1 && 42 != 42 +# include "Bletch: How does this C preprocessor catenate tokens?" +#endif + #define CAT3(a,b,c)a ## b ## c #define CAT4(a,b,c,d)a ## b ## c ## d #define CAT5(a,b,c,d,e)a ## b ## c ## d ## e -#define StGiFy(a)# a -#define STRINGIFY(a)StGiFy(a) #define SCAT2(a,b)StGiFy(a) StGiFy(b) #define SCAT3(a,b,c)StGiFy(a) StGiFy(b) StGiFy(c) #define SCAT4(a,b,c,d)StGiFy(a) StGiFy(b) StGiFy(c) StGiFy(d) @@ -52,16 +79,22 @@ # endif #endif -/* BIN: - * This symbol holds the path of the bin directory where the package will - * be installed. Program must be prepared to deal with ~name substitution. - */ -/* BIN_EXP: - * This symbol is the filename expanded version of the BIN symbol, for - * programs that do not want to deal with that at run-time. +/* BYTEORDER: + * This symbol holds the hexadecimal constant defined in byteorder, + * in a UV, i.e. 0x1234 or 0x4321 or 0x12345678, etc... + * If the compiler supports cross-compiling or multiple-architecture + * binaries (eg. on NeXT systems), use compiler-defined macros to + * determine the byte order. + * On NeXT 3.2 (and greater), you can build "Fat" Multiple Architecture + * Binaries (MAB) on either big endian or little endian machines. + * The endian-ness is available at compile-time. This only matters + * for perl, where the config.h can be generated and installed on + * one system, and used by a different architecture to build an + * extension. Older versions of NeXT that might not have + * defined either *_ENDIAN__ were all on Motorola 680x0 series, + * so the default case (for NeXT) is big endian to catch them. + * This might matter for NeXT 3.0. */ -#define BIN "/_P9P_OBJTYPE/bin" /* */ -#define BIN_EXP "/_P9P_OBJTYPE/bin" /* */ /* LOC_SED: * This symbol holds the complete pathname to the sed program. @@ -202,7 +235,7 @@ #define HAS_GETLOGIN /**/ /* HAS_GETPGID: - * This symbol, if defined, indicates to the C program that + * This symbol, if defined, indicates to the C program that * the getpgid(pid) function is available to get the * process group id. */ @@ -244,7 +277,7 @@ * This symbol, if defined, indicates that the link routine is * available to create hard links. */ -/* #define HAS_LINK / **/ +/* #define HAS_LINK /**/ /* HAS_LOCALECONV: * This symbol, if defined, indicates that the localeconv routine is @@ -262,11 +295,11 @@ * This symbol, if defined, indicates that the lstat routine is * available to do file stats on symbolic links. */ -/*#define HAS_LSTAT / **/ +/*#define HAS_LSTAT /**/ /* HAS_MBLEN: * This symbol, if defined, indicates that the mblen routine is available - * to find the number of bytes in a multibye character. + * to find the number of bytes in a multibyte character. */ #define HAS_MBLEN /**/ @@ -382,7 +415,7 @@ * This symbol, if defined, indicates that the readlink routine is * available to read the value of a symbolic link. */ -/*#define HAS_READLINK / **/ +/*#define HAS_READLINK /**/ /* HAS_RENAME: * This symbol, if defined, indicates that the rename routine is available @@ -434,7 +467,7 @@ * This symbol, if defined, indicates that the setpgid(pid, gpid) * routine is available to set process group ID. */ -#define HAS_SETPGID / **/ +#define HAS_SETPGID /**/ /* HAS_SETPGRP2: * This symbol, if defined, indicates that the setpgrp2() (as in DG/UX) @@ -502,7 +535,7 @@ * This symbol, if defined, indicates that the strtod routine is * available to provide better numeric string conversion than atof(). */ -#define HAS_STRTOD /**/ +/*#define HAS_STRTOD /**/ /* HAS_STRTOL: * This symbol, if defined, indicates that the strtol routine is available @@ -520,7 +553,7 @@ * This symbol, if defined, indicates that the symlink routine is available * to create symbolic links. */ -/*#define HAS_SYMLINK / **/ +/*#define HAS_SYMLINK /**/ /* HAS_SYSCALL: * This symbol, if defined, indicates that the syscall routine is @@ -654,7 +687,7 @@ #define I_LOCALE /**/ /* I_NET_ERRNO: - * This symbol, if defined, indicates that exists and + * This symbol, if defined, indicates that exists and * should be included. */ /*#define I_NET_ERRNO /* config-skip */ @@ -865,17 +898,6 @@ */ #define PLAN9 /**/ -/* MEM_ALIGNBYTES: - * This symbol contains the number of bytes required to align a - * double, or a long double when applicable. Usual values are 2, - * 4 and 8. The default is eight, for safety. - */ -#if defined(MULTIARCH) -# define MEM_ALIGNBYTES 8 -#else -#define MEM_ALIGNBYTES 4 -#endif - /* ARCHLIB: * This variable, if defined, holds the name of the directory in * which the user wants to put architecture-dependent public @@ -920,8 +942,8 @@ * This symbol is the filename expanded version of the BIN symbol, for * programs that do not want to deal with that at run-time. */ -#define BIN "/usr/bin" /**/ -#define BIN_EXP "/usr/bin" /**/ +#define BIN "/_P9P_OBJTYPE/bin" /* */ +#define BIN_EXP "/_P9P_OBJTYPE/bin" /* */ /* BYTEORDER: * This symbol holds the hexadecimal constant defined in byteorder, @@ -966,30 +988,6 @@ #define BYTEORDER 0x1234 /* large digits for MSB */ #endif /* NeXT */ -/* CAT2: - * This macro catenates 2 tokens together. - */ -/* STRINGIFY: - * This macro surrounds its token with double quotes. - */ -#if 42 == 1 -#define CAT2(a,b) a/**/b -#define STRINGIFY(a) "a" - /* If you can get stringification with catify, tell me how! */ -#endif -#if 42 == 42 -#define PeRl_CaTiFy(a, b) a ## b -#define PeRl_StGiFy(a) #a -/* the additional level of indirection enables these macros to be - * used as arguments to other macros. See K&R 2nd ed., page 231. */ -#define CAT2(a,b) PeRl_CaTiFy(a,b) -#define StGiFy(a) PeRl_StGiFy(a) -#define STRINGIFY(a) PeRl_StGiFy(a) -#endif -#if 42 != 1 && 42 != 42 -# include "Bletch: How does this C preprocessor concatenate tokens?" -#endif - /* CPPSTDIN: * This symbol contains the first part of the string which will invoke * the C preprocessor on the standard input and produce to standard @@ -1233,7 +1231,7 @@ * This symbol, if defined, indicates that the "fast stdio" * is available to manipulate the stdio buffers directly. */ -/*#define HAS_FAST_STDIO / **/ +/*#define HAS_FAST_STDIO /**/ /* HAS_FCHDIR: * This symbol, if defined, indicates that the fchdir routine is @@ -1311,7 +1309,8 @@ /* HAS_FPCLASSIFY: * This symbol, if defined, indicates that the fpclassify routine is - * available to classify doubles. Available for example in HP-UX. + * available to classify doubles. Available for example in HP-UX and + * Plan9/9front. * The returned values are defined in and are * * FP_NORMAL Normalized @@ -1321,7 +1320,7 @@ * FP_NAN NaN * */ -/*#define HAS_FPCLASSIFY / **/ +#define HAS_FPCLASSIFY / **/ /* HAS_FPOS64_T: * This symbol will be defined if the C compiler supports fpos64_t. @@ -1707,11 +1706,11 @@ * REENTRANT_PROTO_T_ABC macros of reentr.h if d_gmtime_r * is defined. */ -/*#define HAS_GMTIME_R / **/ +#define HAS_GMTIME_R / **/ #define GMTIME_R_PROTO 0 /**/ /* HAS_GNULIBC: - * This symbol, if defined, indicates to the C program that + * This symbol, if defined, indicates to the C program that * the GNU C library is being used. A better check is to use * the __GLIBC__ and __GLIBC_MINOR__ symbols supplied with glibc. */ @@ -1754,7 +1753,7 @@ * This symbol, if defined, indicates that the ilogbl routine is * available. If scalbnl is also present we can emulate frexpl. */ -/*#define HAS_ILOGBL / **/ +/*#define HAS_ILOGBL /**/ /* HAS_INT64_T: * This symbol will defined if the C compiler supports int64_t. @@ -1764,7 +1763,7 @@ #define HAS_INT64_T /**/ /* HAS_ISASCII: - * This manifest constant lets the C program know that isascii + * This manifest constant lets the C program know that isascii * is available. */ /*#define HAS_ISASCII / **/ @@ -1824,29 +1823,68 @@ * REENTRANT_PROTO_T_ABC macros of reentr.h if d_localtime_r * is defined. */ -/*#define HAS_LOCALTIME_R / **/ -/*#define LOCALTIME_R_NEEDS_TZSET / **/ +#define HAS_LOCALTIME_R +#define LOCALTIME_R_NEEDS_TZSET / **/ #define LOCALTIME_R_PROTO 0 /**/ - +#ifdef LOCALTIME_R_NEEDS_TZSET +#define L_R_TZSET tzset(), +#else +#define L_R_TZSET +#endif /* HAS_LONG_DOUBLE: * This symbol will be defined if the C compiler supports long * doubles. */ /* LONG_DOUBLESIZE: - * This symbol contains the size of a long double, so that the + * This symbol contains the size of a long double, so that the * C preprocessor can make decisions based on it. It is only - * defined if the system supports long doubles. - */ -#define HAS_LONG_DOUBLE /**/ + * defined if the system supports long doubles. Note that this + * is sizeof(long double), which may include unused bytes. + */ +/* HAS_LDEXPL: + * This symbol, if defined, indicates that the ldexpl routine is + * available to shift a long double floating-point number + * by an integral power of 2. + */ +/* LONG_DOUBLEKIND: + * LONG_DOUBLEKIND will be one of + * LONG_DOUBLE_IS_DOUBLE + * LONG_DOUBLE_IS_IEEE_754_128_BIT_LITTLE_ENDIAN + * LONG_DOUBLE_IS_IEEE_754_128_BIT_BIG_ENDIAN + * LONG_DOUBLE_IS_X86_80_BIT_LITTLE_ENDIAN + * LONG_DOUBLE_IS_X86_80_BIT_BIG_ENDIAN + * LONG_DOUBLE_IS_DOUBLEDOUBLE_128_BIT_LE_LE + * LONG_DOUBLE_IS_DOUBLEDOUBLE_128_BIT_BE_BE + * LONG_DOUBLE_IS_DOUBLEDOUBLE_128_BIT_LE_BE + * LONG_DOUBLE_IS_DOUBLEDOUBLE_128_BIT_BE_LE + * LONG_DOUBLE_IS_UNKNOWN_FORMAT + * It is only defined if the system supports long doubles. + */ +/*#define HAS_LDEXPL / **/ +#define HAS_LONG_DOUBLE / **/ #ifdef HAS_LONG_DOUBLE #define LONG_DOUBLESIZE 8 /**/ +#define LONG_DOUBLEKIND 0 /**/ +#define LONG_DOUBLE_IS_DOUBLE 0 +#define LONG_DOUBLE_IS_IEEE_754_128_BIT_LITTLE_ENDIAN 1 +#define LONG_DOUBLE_IS_IEEE_754_128_BIT_BIG_ENDIAN 2 +#define LONG_DOUBLE_IS_X86_80_BIT_LITTLE_ENDIAN 3 +#define LONG_DOUBLE_IS_X86_80_BIT_BIG_ENDIAN 4 +#define LONG_DOUBLE_IS_DOUBLEDOUBLE_128_BIT_LE_LE 5 +#define LONG_DOUBLE_IS_DOUBLEDOUBLE_128_BIT_BE_BE 6 +#define LONG_DOUBLE_IS_DOUBLEDOUBLE_128_BIT_LE_BE 7 +#define LONG_DOUBLE_IS_DOUBLEDOUBLE_128_BIT_BE_LE 8 +#define LONG_DOUBLE_IS_UNKNOWN_FORMAT -1 +#define LONG_DOUBLE_IS_DOUBLEDOUBLE_128_BIT_LITTLE_ENDIAN LONG_DOUBLE_IS_DOUBLEDOUBLE_128_BIT_LE_LE /* back-compat */ +#define LONG_DOUBLE_IS_DOUBLEDOUBLE_128_BIT_BIG_ENDIAN LONG_DOUBLE_IS_DOUBLEDOUBLE_128_BIT_BE_BE /* back-compat */ #endif + /* HAS_LONG_LONG: * This symbol will be defined if the C compiler supports long long. */ /* LONGLONGSIZE: - * This symbol contains the size of a long long, so that the + * This symbol contains the size of a long long, so that the * C preprocessor can make decisions based on it. It is only * defined if the system supports long long. */ @@ -1948,7 +1986,7 @@ /*#define OLD_PTHREAD_CREATE_JOINABLE / **/ /* HAS_PTHREAD_YIELD: - * This symbol, if defined, indicates that the pthread_yield + * This symbol, if defined, indicates that the pthread_yield * routine is available to yield the execution of the current * thread. sched_yield is preferable to pthread_yield. */ @@ -2024,7 +2062,7 @@ * This symbol, if defined, indicates that the scalbnl routine is * available. If ilogbl is also present we can emulate frexpl. */ -/*#define HAS_SCALBNL / **/ +/*#define HAS_SCALBNL /**/ /* HAS_SENDMSG: * This symbol, if defined, indicates that the sendmsg routine is @@ -2569,8 +2607,8 @@ * This symbol holds the type used for the second argument to * getgroups() and setgroups(). Usually, this is the same as * gidtype (gid_t) , but sometimes it isn't. - * It can be int, ushort, gid_t, etc... - * It may be necessary to include to get any + * It can be int, ushort, gid_t, etc... + * It may be necessary to include to get any * typedef'ed information. This is only required if you have * getgroups() or setgroups().. */ @@ -2731,6 +2769,12 @@ /*#define PWGECOS / **/ /*#define PWPASSWD / **/ +/* I_QUADMATH: + * This symbol, if defined, indicates that exists and + * should be included. + */ +/*#define I_QUADMATH / **/ + /* I_SHADOW: * This symbol, if defined, indicates that exists and * should be included. @@ -2842,6 +2886,27 @@ */ /*#define INSTALL_USR_BIN_PERL / **/ +/* DOUBLEINFBYTES: + * This symbol, if defined, is a comma-separated list of + * hexadecimal bytes for the double precision infinity. + */ +/* DOUBLENANBYTES: + * This symbol, if defined, is a comma-separated list of + * hexadecimal bytes (0xHH) for the double precision not-a-number. + */ +/* LONGDBLINFBYTES: + * This symbol, if defined, is a comma-separated list of + * hexadecimal bytes for the long double precision infinity. + */ +/* LONGDBLNANBYTES: + * This symbol, if defined, is a comma-separated list of + * hexadecimal bytes (0xHH) for the long double precision not-a-number. + */ +#define DOUBLEINFBYTES 0xe2, 0xff, 0xff, 0xff, 0xff, 0xff, 0xef, 0x7f /**/ +#define DOUBLENANBYTES 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf8, 0x7f /**/ +#define LONGDBLINFBYTES 0xe2, 0xff, 0xff, 0xff, 0xff, 0xff, 0xef, 0x7f /**/ +#define LONGDBLNANBYTES 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 /**/ + /* PERL_PRIfldbl: * This symbol, if defined, contains the string used by stdio to * format long doubles (format 'f') for output. @@ -2894,7 +2959,7 @@ #define MYMALLOC /**/ /* Mode_t: - * This symbol holds the type used to declare file modes + * This symbol holds the type used to declare file modes * for systems calls. It is usually mode_t, but may be * int or unsigned short. It may be necessary to include * to get any typedef'ed information. @@ -3044,6 +3109,16 @@ * This symbol contains the number of bits a variable of type NVTYPE * can preserve of a variable of type UVTYPE. */ +/* NV_OVERFLOWS_INTEGERS_AT: + * This symbol gives the largest integer value that NVs can hold. This + * value + 1.0 cannot be stored accurately. It is expressed as constant + * floating point expression to reduce the chance of decimale/binary + * conversion issues. If it can not be determined, the value 0 is given. + */ +/* NV_ZERO_IS_ALLBITS_ZERO: + * This symbol, if defined, indicates that a variable of type NVTYPE + * stores 0.0 in memory as all bits zero. + */ #define IVTYPE long /**/ #define UVTYPE unsigned long /**/ #define I8TYPE char /**/ @@ -3070,8 +3145,10 @@ #define U64SIZE 8 /**/ #endif #define NVSIZE 8 /**/ -/*#define NV_PRESERVES_UV +#define NV_PRESERVES_UV #define NV_PRESERVES_UV_BITS 31 +#define NV_OVERFLOWS_INTEGERS_AT 256.0*256.0*256.0*256.0*256.0*256.0*2.0*2.0*2.0*2.0*2.0 +#undef NV_ZERO_IS_ALLBITS_ZERO /* IVdf: * This symbol defines the format string used for printing a Perl IV @@ -3131,8 +3208,8 @@ * This symbol contains the ~name expanded version of PRIVLIB, to be used * in programs that are not prepared to deal with ~ expansion at run-time. */ -#define PRIVLIB "/sys/lib/perl/5.32.1" /**/ -#define PRIVLIB_EXP "/sys/lib/perl/5.32.1" /**/ +#define PRIVLIB "/sys/lib/perl/_P9P_VERSION" /**/ +#define PRIVLIB_EXP "/sys/lib/perl/_P9P_VERSION" /**/ /* PTRSIZE: * This symbol contains the size of a pointer, so that the C preprocessor @@ -3179,7 +3256,7 @@ /* Select_fd_set_t: * This symbol holds the type used for the 2nd, 3rd, and 4th * arguments to select. Usually, this is 'fd_set *', if HAS_FD_SET - * is defined, and 'int *' otherwise. This is only useful if you + * is defined, and 'int *' otherwise. This is only useful if you * have select(), of course. */ #define Select_fd_set_t fd_set* /**/ @@ -3205,10 +3282,10 @@ * The signals in the list are separated with commas, and the indices * within that list and the SIG_NAME list match, so it's easy to compute * the signal name from a number or vice versa at the price of a small - * dynamic linear lookup. + * dynamic linear lookup. * Duplicates are allowed, but are moved to the end of the list. * The signal number corresponding to sig_name[i] is sig_number[i]. - * if (i < NSIG) then sig_number[i] == i. + * if (i < NSIG) then sig_number[i] == i. * The last element is 0, corresponding to the 0 at the end of * the sig_name list. */ @@ -3259,9 +3336,9 @@ * removed. The elements in inc_version_list (inc_version_list.U) can * be tacked onto this variable to generate a list of directories to search. */ -#define SITELIB "/sys/lib/perl/5.32.1/site_perl" /**/ -#define SITELIB_EXP "/sys/lib/perl/5.32.1/site_perl" /**/ -#define SITELIB_STEM "/sys/lib/perl/5.32.1/site_perl" /**/ +#define SITELIB "/sys/lib/perl/_P9P_VERSION/site_perl" /**/ +#define SITELIB_EXP "/sys/lib/perl/_P9P_VERSION/site_perl" /**/ +#define SITELIB_STEM "/sys/lib/perl/_P9P_VERSION/site_perl" /**/ /* Size_t_size: * This symbol holds the size of a Size_t in bytes. @@ -3297,7 +3374,7 @@ * script to make sure (one hopes) that it runs with perl and not * some shell. */ -#define STARTPERL "#!/bin/perl" /**/ +#define STARTPERL "#!/bin/perl-_P9P_VERSION" /**/ /* STDCHAR: * This symbol is defined to be the type of char used in stdio.h. @@ -3339,6 +3416,27 @@ */ #define Uid_t uid_t /* UID type */ +/* GMTIME_MAX: + * This symbol contains the maximum value for the time_t offset that + * the system function gmtime () accepts, and defaults to 0 + */ +/* GMTIME_MIN: + * This symbol contains the minimum value for the time_t offset that + * the system function gmtime () accepts, and defaults to 0 + */ +/* LOCALTIME_MAX: + * This symbol contains the maximum value for the time_t offset that + * the system function localtime () accepts, and defaults to 0 + */ +/* LOCALTIME_MIN: + * This symbol contains the minimum value for the time_t offset that + * the system function localtime () accepts, and defaults to 0 + */ +#define GMTIME_MAX 2147483647 /**/ +#define GMTIME_MIN 0 /**/ +#define LOCALTIME_MAX 2147483647 /**/ +#define LOCALTIME_MIN 0 /**/ + /* USE_64_BIT_INT: * This symbol, if defined, indicates that 64-bit integers should * be used when available. If not defined, the native integers @@ -3415,6 +3513,14 @@ #define USE_PERLIO /**/ #endif +/* USE_QUADMATH: + * This symbol, if defined, indicates that the quadmath library should + * be used when available. + */ +#ifndef USE_QUADMATH +/*#define USE_QUADMATH / **/ +#endif + /* USE_SOCKS: * This symbol, if defined, indicates that Perl should * be built to use socks. @@ -3427,10 +3533,6 @@ * This symbol, if defined, indicates that Perl should be built to * use the interpreter-based threading implementation. */ -/* USE_5005THREADS: - * This symbol, if defined, indicates that Perl should be built to - * use the 5.005-based threading implementation. - */ /* OLD_PTHREADS_API: * This symbol, if defined, indicates that Perl should * be built to use the old draft POSIX threads API. @@ -3440,11 +3542,8 @@ * try to use the various _r versions of library functions. * This is extremely experimental. */ -/*#define USE_5005THREADS / **/ /*#define USE_ITHREADS / **/ -#if defined(USE_5005THREADS) && !defined(USE_ITHREADS) -#define USE_THREADS /* until src is revised*/ -#endif +/*#define USE_THREADS / **/ /*#define OLD_PTHREADS_API / **/ /*#define USE_REENTRANT_API / **/ @@ -3452,11 +3551,11 @@ * If defined, this symbol contains the name of a private library. * The library is private in the sense that it needn't be in anyone's * execution path, but it should be accessible by the world. - * It may have a ~ on the front. + * It may have a ~ on the front. * The standard distribution will put nothing in this directory. * Vendors who distribute perl may wish to place their own * architecture-dependent modules and extensions in this directory with - * MakeMaker Makefile.PL INSTALLDIRS=vendor + * MakeMaker Makefile.PL INSTALLDIRS=vendor * or equivalent. See INSTALL for details. */ /* PERL_VENDORARCH_EXP: @@ -3549,13 +3648,13 @@ * This symbol, if defined, indicates that the copysignl routine is * available. If aintl is also present we can emulate modfl. */ -/*#define HAS_COPYSIGNL / **/ +/*#define HAS_COPYSIGNL /**/ /* USE_CPLUSPLUS: * This symbol, if defined, indicates that a C++ compiler was * used to compiled Perl and will be used to compile extensions. */ -/*#define USE_CPLUSPLUS / **/ +/*#define USE_CPLUSPLUS /**/ /* HAS_DBMINIT_PROTO: * This symbol, if defined, indicates that the system provides diff --git a/gnu/usr.bin/perl/plan9/config_h.sample b/gnu/usr.bin/perl/plan9/config_h.sample index f71d55bd537..5ecf2632bfd 100644 --- a/gnu/usr.bin/perl/plan9/config_h.sample +++ b/gnu/usr.bin/perl/plan9/config_h.sample @@ -224,7 +224,7 @@ /* HAS_MBLEN: * This symbol, if defined, indicates that the mblen routine is available - * to find the number of bytes in a multibye character. + * to find the number of bytes in a multibyte character. */ #define HAS_MBLEN /**/ @@ -3351,9 +3351,11 @@ * This symbol, if defined, indicates that Perl should be built to * use the interpreter-based threading implementation. */ -/* USE_5005THREADS: - * This symbol, if defined, indicates that Perl should be built to - * use the 5.005-based threading implementation. +/* USE_THREADS: + * This symbol, if defined, indicates that Perl should + * be built to use threads. At present, it is a synonym for + * and USE_ITHREADS, but eventually the source ought to be + * changed to use this to mean _any_ threading implementation. */ /* OLD_PTHREADS_API: * This symbol, if defined, indicates that Perl should @@ -3364,11 +3366,8 @@ * try to use the various _r versions of library functions. * This is extremely experimental. */ -/*#define USE_5005THREADS / **/ /*#define USE_ITHREADS / **/ -#if defined(USE_5005THREADS) && !defined(USE_ITHREADS) -#define USE_THREADS /* until src is revised*/ -#endif +/*#define USE_THREADS / **/ /*#define OLD_PTHREADS_API / **/ /*#define USE_REENTRANT_API / **/ diff --git a/gnu/usr.bin/perl/plan9/config_sh.sample b/gnu/usr.bin/perl/plan9/config_sh.sample index cd494c4e773..02b46570c17 100644 --- a/gnu/usr.bin/perl/plan9/config_sh.sample +++ b/gnu/usr.bin/perl/plan9/config_sh.sample @@ -32,11 +32,11 @@ alignbytes='4' aphostname='/bin/uname -n' api_revision='5' api_subversion='0' -api_version='32' -api_versionstring='5.32.0' +api_version='36' +api_versionstring='5.36.0' ar='ar' -archlib='/sys/lib/perl5/5.32.1/386' -archlibexp='/sys/lib/perl5/5.32.1/386' +archlib='/sys/lib/perl5/5.36.0/386' +archlibexp='/sys/lib/perl5/5.36.0/386' archname64='' archname='386' archobjs='' @@ -213,6 +213,8 @@ d_fdclose='undef' d_fdim='undef' d_fds_bits='undef' d_fegetround='undef' +d_ffs='undef' +d_ffsl='undef' d_fgetpos='define' d_finite='undef' d_finitel='undef' @@ -248,6 +250,7 @@ d_gdbm_ndbm_h_uses_prototypes='undef' d_gdbmndbm_h_uses_prototypes='undef' d_getaddrinfo='undef' d_getcwd='define' +d_getenv_preserves_other_thread='define' d_getespwnam='undef' d_getfsstat='undef' d_getgrent='define' @@ -417,6 +420,8 @@ d_nextafter='undef' d_nexttoward='undef' d_nice='undef' d_nl_langinfo='undef' +d_nl_langinfo_l='undef' +d_non_int_bitfields='define' d_nv_preserves_uv='undef' d_nv_zero_is_allbits_zero='undef' d_off64_t='undef' @@ -581,6 +586,7 @@ d_strtoul='define' d_strtoull='undef' d_strtouq='undef' d_strxfrm='define' +d_strxfrm_l='undef' d_suidsafe='undef' d_symlink='define' d_syscall='undef' @@ -594,6 +600,7 @@ d_tcsetpgrp='define' d_telldir='undef' d_telldirproto='undef' d_tgamma='undef' +d_thread_local='undef' d_thread_safe_nl_langinfo_l='undef' d_time='define' d_timegm='undef' @@ -818,17 +825,17 @@ inc_version_list=' ' inc_version_list_init='0' incpath='' inews='' -installarchlib='/sys/lib/perl/5.32.1/386' +installarchlib='/sys/lib/perl/5.36.0/386' installbin='/usr/bin' installman1dir='/sys/man/1pub' installman3dir='/sys/man/2pub' installprefix='/usr' installprefixexp='/usr' -installprivlib='/sys/lib/perl/5.32.1' +installprivlib='/sys/lib/perl/5.36.0' installscript='/usr/bin' -installsitearch='/sys/lib/perl/5.32.1/site_perl/386' +installsitearch='/sys/lib/perl/5.36.0/site_perl/386' installsitebin='/usr/bin' -installsitelib='/sys/lib/perl/5.32.1/site_perl' +installsitelib='/sys/lib/perl/5.36.0/site_perl' installstyle='lib/perl5' installusrbinperl='undef' installvendorarch='' @@ -942,6 +949,7 @@ perl5='' perl='' perl_patchlevel='' perl_static_inline='static' +perl_thread_local='' perladmin='9trouble@plan9.bell-labs.com' perllibs=' ' perlpath='/bin/perl' @@ -953,8 +961,8 @@ pmake='' pr='' prefix='/usr' prefixexp='/usr' -privlib='/sys/lib/perl/5.32.1' -privlibexp='/sys/lib/perl/5.32.1' +privlib='/sys/lib/perl/5.36.0' +privlibexp='/sys/lib/perl/5.36.0' procselfexe='' prototype='define' ptrsize='4' @@ -1019,13 +1027,13 @@ sig_num='0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 sig_num_init='0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 0' sig_size='50' signal_t='void' -sitearch='/sys/lib/perl/5.32.1/site_perl/386' +sitearch='/sys/lib/perl/5.36.0/site_perl/386' sitearchexp='/sys/lib/perl/site_perl/386' sitebin='/usr/bin' sitebinexp='/usr/bin' -sitelib='/sys/lib/perl/5.32.1/site_perl' -sitelib_stem='/sys/lib/perl/5.32.1/site_perl' -sitelibexp='/sys/lib/perl/5.32.1/site_perl' +sitelib='/sys/lib/perl/5.36.0/site_perl' +sitelib_stem='/sys/lib/perl/5.36.0/site_perl' +sitelibexp='/sys/lib/perl/5.36.0/site_perl' siteprefix='/usr' siteprefixexp='/usr' sizesize='4' @@ -1043,6 +1051,8 @@ srand48_r_proto='0' srandom_r_proto='0' src='.' ssizetype='ssize_t' +st_dev_sign='1' +st_dev_size='4' st_ino_sign='1' st_ino_size='4' startperl='#!/bin/perl' @@ -1058,7 +1068,7 @@ stdio_stream_array='' strerror_r_proto='0' strings='/sys/include/ape/string.h' submit='' -subversion='1' +subversion='0' sysman='/sys/man/1pub' tail='' tar='' @@ -1091,11 +1101,11 @@ uidtype='uid_t' uname='uname' uniq='uniq' uquadtype='unsigned long long' -use5005threads='undef' use64bitall='undef' use64bitint='undef' usecbacktrace='undef' usecrosscompile='undef' +usedefaultstrict='undef' usedevel='undef' usedl='undef' usedtrace='undef' @@ -1139,11 +1149,12 @@ vendorlib_stem='' vendorlibexp='' vendorprefix='' vendorprefixexp='' -version='5.32.1' -version_patchlevel_string='version 32 subversion 1' +version='5.36.0' +version_patchlevel_string='version 36 subversion 0' versiononly='undef' vi='' xlibpth='' +xlocale_needed='undef' yacc='yacc' yaccflags='' zcat='' @@ -1153,10 +1164,10 @@ config_arg0='./Configure' config_args='' config_argc=0 PERL_REVISION=5 -PERL_VERSION=32 -PERL_SUBVERSION=1 +PERL_VERSION=36 +PERL_SUBVERSION=0 PERL_API_REVISION=5 -PERL_API_VERSION=32 +PERL_API_VERSION=36 PERL_API_SUBVERSION=0 PERL_PATCHLEVEL= PERL_CONFIG_SH=true diff --git a/gnu/usr.bin/perl/plan9/genconfig.pl b/gnu/usr.bin/perl/plan9/genconfig.pl index ebd97db0183..14c1faed25b 100644 --- a/gnu/usr.bin/perl/plan9/genconfig.pl +++ b/gnu/usr.bin/perl/plan9/genconfig.pl @@ -7,17 +7,21 @@ # to run may be supplied on the command line as key=val pairs. # # Last Modified: 28-Jun-1996 Luther Huffman lutherh@stratcom.com +# Last Modified: May 2020 David Romano unobe@cpan.org # +my $VERBOSE = 0; + #==== Locations of installed Perl components $p9pvers="_P9P_VERSION"; +$version="$p9pvers"; $prefix=''; $p9p_objtype=$ENV{'objtype'}; $builddir="/sys/src/cmd/perl/$p9pvers"; $installbin="/$p9p_objtype/bin"; $installman1dir="/sys/man/1"; $installman3dir="/sys/man/2"; -$installprivlib="/sys/lib/perl"; +$installprivlib="/sys/lib/perl/$p9pvers"; $installarchlib = "/$p9p_objtype/lib/perl/$p9pvers"; $archname="plan9_$p9p_objtype"; $installsitelib="$installprivlib/site_perl"; @@ -28,13 +32,15 @@ unshift(@INC,'lib'); # In case someone didn't define Perl_Root # before the build if ($ARGV[0] eq '-f') { + shift @ARGV; open(ARGS,'<',$ARGV[1]) or die "Can't read data from $ARGV[1]: $!\n"; - @ARGV = (); + shift @ARGV; while () { push(@ARGV,split(/\|/,$_)); } close ARGS; } +my @extensions = @ARGV; if (-f "config.h") { $infile = "config.h"; $outdir = "../"; } elsif (-f "plan9/config.h") { $infile = "plan9/config.h"; $outdir = "./"; } @@ -54,11 +60,9 @@ $time = localtime; $cf_by = $ENV{'user'}; ($vers = $]) =~ tr/./_/; -# Plan 9 doesn't actually use version numbering. Following the original Unix -# precedent of assigning a Unix edition number based on the edition number -# of the manuals, I am referring to this as Plan 9, 1st edition. -$osvers = '1'; - +# 9front as Plan 9, 5th edition. +$osvers = '5'; + print OUT <) { - next unless m%^#(?!if).*\$%; + # suicide @ regcomp.c:22117 + #next unless m%^#(?!if).*\$%; + next unless !index($_, '#') && index($_, '#if') == -1 && rindex($_, '$') == length($_)-1; s/^#//; s!(.*?)\s*/\*.*!$1!; my(@words) = split; $words[1] =~ s/\(.*//; # Clip off args from macro @@ -195,7 +204,7 @@ if (open(SH,'<',"${outdir}config_h.SH")) { } close SH; } -else { warn "Couldn't read ${outfile}config_h.SH: $!\n"; } +elsif ($VERBOSE) { warn "Couldn't read ${outfile}config_h.SH: $!\n"; } $pp_vars{PLAN9} = 'define'; #Plan 9 specific # OK, now read the C header file, and retcon statements into config.sh @@ -233,7 +242,7 @@ while () { } elsif (not length $val and not $had_val) { # Wups -- should have been shell var for C preprocessor directive - warn "Constant $token not found in config_h.SH\n"; + warn "Constant $token not found in config_h.SH\n" if $VERBOSE; $token =~ tr/A-Z/a-z/; $token = "d_$token" unless $token =~ /^i_/; print OUT "$token='$state'\n"; @@ -248,7 +257,7 @@ while () { delete $val_vars{$token}; } elsif (!$pp_vars{$token}) { # Haven't seen it previously, either - warn "Constant $token not found in config_h.SH (val=|$val|)\n"; + warn "Constant $token not found in config_h.SH (val=|$val|)\n" if $VERBOSE; $token =~ tr/A-Z/a-z/; print OUT "$token='$val'\n"; if ($token =~ s/exp$//) {print OUT "$token='$val'\n";} @@ -256,14 +265,15 @@ while () { } close IN; -foreach (sort keys %pp_vars) { - warn "Didn't see $_ in $infile\n"; -} -foreach (sort keys %val_vars) { - warn "Didn't see $_ in $infile(val)\n"; +if ($VERBOSE) { + foreach (sort keys %pp_vars) { + warn "Didn't see $_ in $infile\n"; + } + foreach (sort keys %val_vars) { + warn "Didn't see $_ in $infile(val)\n"; + } } - # print OUT "libs='",join(' ',@libs),"'\n"; # print OUT "libc='",join(' ',@crtls),"'\n"; @@ -280,10 +290,8 @@ if (open(PL,'<',"${outdir}patchlevel.h")) { } close PL; } -else { warn "Can't read ${outdir}patchlevel.h - skipping 'PERL_VERSION'"; } +elsif ($VERBOSE) { warn "Can't read ${outdir}patchlevel.h - skipping 'PERL_VERSION'" } print OUT "pager='/bin/p'\n"; close OUT; - - diff --git a/gnu/usr.bin/perl/plan9/mkfile b/gnu/usr.bin/perl/plan9/mkfile index 588ade988ec..ce2dab04e4d 100644 --- a/gnu/usr.bin/perl/plan9/mkfile +++ b/gnu/usr.bin/perl/plan9/mkfile @@ -1,21 +1,42 @@ APE=/sys/src/ape < $APE/config $target - cp ext/IO/*.pm $privlib - if (test !-d $privlib/IO) { - mkdir $privlib/IO - cp ext/IO/lib/IO/*.pm $privlib/IO - } - -Socket.$O: config.h Socket.c - $CCCMD -I plan9 Socket.c - -Socket.c: miniperl ext/Socket/Socket.xs - ./miniperl $privlib/ExtUtils/xsubpp -noprototypes -typemap $privlib/ExtUtils/typemap ext/Socket/Socket.xs > $target - cp ext/Socket/Socket.pm $privlib - -Opcode.c: miniperl ext/Opcode/Opcode.xs - ./miniperl $privlib/ExtUtils/xsubpp -noprototypes -typemap $privlib/ExtUtils/typemap ext/Opcode/Opcode.xs > $target - cp ext/Opcode/*.pm $privlib - -Fcntl.c: miniperl ext/Fcntl/Fcntl.xs - ./miniperl $privlib/ExtUtils/xsubpp -noprototypes -typemap $privlib/ExtUtils/typemap ext/Fcntl/Fcntl.xs > $target - cp ext/Fcntl/Fcntl.pm $privlib - -POSIX.c: miniperl ext/POSIX/POSIX.xs - ./miniperl $privlib/ExtUtils/xsubpp -noprototypes -typemap $privlib/ExtUtils/typemap ext/POSIX/POSIX.xs > $target - cp ext/POSIX/POSIX.pm $privlib - -dl_none.c: miniperl ext/DynaLoader/dl_none.xs - ./miniperl $privlib/ExtUtils/xsubpp -noprototypes -typemap $privlib/ExtUtils/typemap ext/DynaLoader/dl_none.xs > $target - cp ext/DynaLoader/DynaLoader.pm $privlib - -test:V: - bind -b $privlib $sourcedir/lib - bind -b $archlib $sourcedir/lib - cd $sourcedir/t - rm -f perl - cp /$objtype/bin/perl $sourcedir/t +uudmap.h: generate_uudmap.c + $CCCMD generate_uudmap.c + # This is currently a show-stopper for cross-compilation: find the true $objtype by looking at kernel? + $LD $CFLAGS -o generate_uudmap generate_uudmap.$O + chmod +x generate_uudmap + ./generate_uudmap uudmap.h bitcount.h mg_data.h + +extensions:V: miniperl archlib/Config.pm $ext_c dist/XSLoader/XSLoader.pm + +more_extensions:V: perlnosocket $more_ext_c $more_ext_obj + ext_obj=`{echo $ext_obj $more_ext_obj} + +Socket.$O: Socket.c + $XSCCCMD -I plan9 Socket.c + +attributes.$O: attributes.c + $XSCCCMD -I plan9 attributes.c + +mro.$O: mro.c + $XSCCCMD -I plan9 mro.c + +B.$O: B.c + $XSCCCMD -I plan9 B.c + +Peek.$O: Peek.c + $XSCCCMD -I plan9 Peek.c + +Util.$O: Util.c + $XSCCCMD -I plan9 Util.c + +FieldHash.$O: FieldHash.c + $XSCCCMD -I plan9 FieldHash.c + +re.$O: re.c + $XSCCCMD -DPERL_EXT_RE_BUILD -DPERL_EXT_RE_DEBUG -DPERL_EXT -I plan9 re.c + +re_comp.$O: re_comp.c + $XSCCCMD -DPERL_EXT_RE_BUILD -DPERL_EXT_RE_DEBUG -DPERL_EXT -I plan9 re_comp.c + +re_exec.$O: re_exec.c + $XSCCCMD -DPERL_EXT_RE_BUILD -DPERL_EXT_RE_DEBUG -DPERL_EXT -I plan9 re_exec.c + +Cwd.$O: Cwd.c IO.c + cp dist/IO/ppport.h dist/PathTools + $XSCCCMD -DDOUBLE_SLASHES_SPECIAL^'='^0 -I plan9 Cwd.c + +IO.$O: extensions + $XSCCCMD -I plan9 IO.c + +poll.$O: extensions + $XSCCCMD -I plan9 poll.c + +POSIX.$O: extensions + $XSCCCMD -I plan9 POSIX.c + +Glob.$O: extensions + $XSCCCMD -I plan9 Glob.c + +bsd_glob.$O: extensions + $XSCCCMD -I plan9 -I. bsd_glob.c + +Normalize.$O: extensions + $XSCCCMD -I plan9 -I. Normalize.c + +Dumper.$O: Dumper.c + $XSCCCMD -I plan9 -I. Dumper.c + +HiRes.$O: extensions + $XSCCCMD -I plan9 -I. HiRes.c + +Storable.$O: extensions + $XSCCCMD -I plan9 -I. Storable.c + +ListUtil.$O: extensions + $XSCCCMD -I plan9 -I. ListUtil.c + +Opcode.$O: extensions + $XSCCCMD -I plan9 Opcode.c + +Fcntl.$O: extensions + $XSCCCMD -I plan9 Fcntl.c + +dl_none.$O: extensions + $XSCCCMD -I plan9 dl_none.c + +Glob.c: archlib/Config.pm ext/File-Glob/Glob.xs + cd ext/File-Glob + $miniperl Makefile.PL # to write constants + cd $pwd + $miniperlxs ext/File-Glob/Glob.xs > $target + cp ext/File-Glob/bsd_glob.^(c h) $pwd + mkdir -p archlib/File + cp ext/File-Glob/Glob.pm archlib/File/Glob.pm + +ppport.h: archlib/Config.pm + if (test ! -f /bin/sh) bind -a /386/bin/ape /bin + # specify the list, otherwise suicide + $miniperl mkppport --list mkppport.lst + +Cwd.c: archlib/Config.pm dist/PathTools/Cwd.xs + $miniperlxs dist/PathTools/Cwd.xs > $target + cp dist/PathTools/Cwd.pm archlib + { cd dist/PathTools/lib; tar c . } | { mkdir -p archlib; cd archlib; tar x } + +IO.c: archlib/Config.pm dist/IO/IO.xs ppport.h + $miniperlxs dist/IO/IO.xs > $target + cp dist/IO/poll.^(c h) $pwd + cp dist/IO/IO.pm archlib + { cd dist/IO/lib; tar c . } | { mkdir -p archlib; cd archlib; tar x } + +dist/XSLoader/XSLoader.pm: archlib/Config.pm + cd dist/XSLoader + $miniperl XSLoader_pm.PL + cp XSLoader.pm $pwd/archlib + +ext/Errno/Errno.pm: perlnosocket + cd ext/Errno + $perl Makefile.PL + $perl Errno_pm.PL arch.txt + cp Errno.pm $pwd/archlib + +Socket.c: perlnosocket cpan/Socket/Socket.xs ext/Errno/Errno.pm + cd cpan/Socket + $perl Makefile.PL # to write const-xs.inc + cd $pwd + $perlxs cpan/Socket/Socket.xs > $target + cp cpan/Socket/Socket.pm archlib + +uni.data: archlib/Config.pm lib/unicore/mktables + $miniperl lib/unicore/mktables -C lib/unicore -makelist -p + +Normalize.c: archlib/Config.pm dist/Unicode-Normalize/Normalize.xs uni.data + $miniperl dist/Unicode-Normalize/mkheader + $miniperlxs dist/Unicode-Normalize/Normalize.xs > $target + mkdir -p archlib/Unicode + cp dist/Unicode-Normalize/Normalize.pm archlib/Unicode + +Dumper.c: perlnosocket dist/Data-Dumper/Dumper.xs + $perlxs dist/Data-Dumper/Dumper.xs > $target + mkdir -p archlib/Data + cp dist/Data-Dumper/Dumper.pm archlib/Data + +HiRes.c: archlib/Config.pm dist/Time-HiRes/HiRes.xs + cd dist/Time-HiRes + $miniperl Makefile.PL # to write const-xs.inc + cd $pwd + $miniperlxs dist/Time-HiRes/HiRes.xs > $target + mkdir -p archlib/Time + cp dist/Time-HiRes/HiRes.pm archlib/Time + +ListUtil.c: archlib/Config.pm cpan/Scalar-List-Utils/ListUtil.xs + cp cpan/Scalar-List-Utils/multicall.h $pwd + $miniperlxs cpan/Scalar-List-Utils/ListUtil.xs > $target + { cd cpan/Scalar-List-Utils/lib; tar c . } | { mkdir -p archlib; cd archlib; tar x } + +Storable.c: archlib/Config.pm dist/Storable/Storable.xs + $miniperlxs dist/Storable/Storable.xs > $target + cp dist/Storable/Storable.pm archlib + +Opcode.c: archlib/Config.pm ext/Opcode/Opcode.xs + $miniperlxs ext/Opcode/Opcode.xs > $target + cp ext/Opcode/^(Opcode ops)^.pm archlib + +Fcntl.c: archlib/Config.pm ext/Fcntl/Fcntl.xs + cd ext/Fcntl + $miniperl Makefile.PL # to write const-xs.inc + cd $pwd + $miniperlxs ext/Fcntl/Fcntl.xs > $target + cp ext/Fcntl/Fcntl.pm archlib + +POSIX.c: archlib/Config.pm ext/POSIX/POSIX.xs + cd ext/POSIX + $miniperl Makefile.PL # to write const-xs.inc + cd $pwd + $miniperlxs ext/POSIX/POSIX.xs > $target + cp ext/POSIX/lib/POSIX.pm archlib + +B.c: archlib/Config.pm ext/B/B.xs + cd ext/B + $miniperl Makefile.PL PERL_CORE^'='^1 # to write const-xs.inc + cd $pwd + $miniperlxs ext/B/B.xs > $target + cp ext/B/^(B O)^.pm archlib + +Peek.c: archlib/Config.pm ext/Devel-Peek/Peek.xs + $miniperlxs ext/Devel-Peek/Peek.xs > $target + cp ext/Devel-Peek/Peek.pm archlib + +attributes.c: archlib/Config.pm ext/attributes/attributes.xs + $miniperlxs ext/attributes/attributes.xs > $target + cp ext/attributes/attributes.pm archlib + +mro.c: archlib/Config.pm ext/mro/mro.xs + $miniperlxs ext/mro/mro.xs > $target + cp ext/mro/mro.pm archlib + +Util.c: archlib/Config.pm ext/Hash-Util/Util.xs + $miniperlxs ext/Hash-Util/Util.xs > $target + { cd ext/Hash-Util/lib; tar c . } | { cd archlib; tar x } + +FieldHash.c: archlib/Config.pm ext/Hash-Util-FieldHash/FieldHash.xs + $miniperlxs ext/Hash-Util-FieldHash/FieldHash.xs > $target + { cd ext/Hash-Util-FieldHash/lib; tar c . } | { cd archlib; tar x } + +re.c: archlib/Config.pm ext/re/re.xs + $miniperlxs ext/re/re.xs > $target + cp ext/re/re_^(comp top)^.h $pwd + cp ext/re/re.pm archlib + +re_comp.c: miniperl re.c regcomp.c + cp regcomp.c $target + +re_exec.c: miniperl re.c regexec.c + cp regexec.c $target + +dl_none.c: archlib/Config.pm ext/DynaLoader/dl_none.xs + cd ext/DynaLoader; + $miniperl DynaLoader_pm.PL + cd $pwd + $miniperlxs ext/DynaLoader/dl_none.xs > $target + cp ext/DynaLoader/DynaLoader.pm archlib + +preptest:Q: perl + # Bind the crap out of everything, as different tests expect different INCs + cp perl t/perl + cd t + mntpt=/$objtype/lib/perl + if (test ! -d $mntpt ) { + mkdir $mntpt + rmdir=1 + } + ramfs -m $mntpt + mkdir -p $mntpt/5.32.0/site_perl + echo -n Binding directories + for (l in $pwd/lib $pwd/archlib $icpanlib $idistlib $iextlib ) { + if (test -d $l ) { + if (! ~ `{grep $l <{ns} >[1]/dev/null; echo $status} '') bind -a $l $mntpt/5.32.0/site_perl + echo -n . + } + } + bind $mntpt/5.32.0/site_perl $pwd/lib + echo done + echo Binding sh + if (! ~ `{grep /$objtype/bin/ape <{ns} >[1]/dev/null; echo $status} '') bind -a /$objtype/bin/ape /bin + +minitest:V: preptest + cd t + perl TEST $testlist + unmount $pwd/lib + unmount $mntpt + if (~ $rmdir 1) rm $mntpt + rm t/perl + +test:V: preptest + cd t perl TEST `{ ls */*.t | comm -23 - ../plan9/exclude } + unmount $pwd/lib + unmount $mntpt + if (~ $rmdir 1) rm $mntpt + rm t/perl -plan9.$O: config.h ./plan9/plan9.c - cp ./plan9/plan9.c ./plan9.c +plan9.$O: config.h plan9/plan9.c + cp plan9/plan9.c plan9.c $CCCMD plan9.c %.$O: config.h %.c $CCCMD $stem.c -$archlib/Config.pm: miniperl config.sh - ./miniperl configpm $archlib/Config.pm +archlib/Config.pm: config.sh + $miniperl make_patchnum.pl + $miniperl configpm + cp lib/Config.pm archlib/Config.pm + cp lib/Config_heavy.pl archlib/Config_heavy.pl + cp lib/Config_git.pl archlib/Config_git.pl + -config.sh: miniperl config.h - ./miniperl ./plan9/genconfig.pl +config.sh: miniperl + miniperl plan9/genconfig.pl $extensions $more_extensions installall:V: - for (objtype in 386 mips 68020 sparc) mk install + for (386 68000 68020 arm arm amd64 mips power power64 sparc sparc64 spim) mk install man:V: $perlpods pod/pod2man.PL perl perl pod/pod2man.PL @@ -143,8 +425,8 @@ man:V: $perlpods pod/pod2man.PL perl for (i in $histpodnames) pod/pod2man pod/$i.pod > $installman3dir/$i nuke clean:V: - rm -f *.$O $extensions^.pm config.sh $perllib config.h $perlshr perlmain.c perl miniperl $archlib/Config.pm $ext_c - rm -rf $privlib/IO + rm -f *.$O config.sh $perllib config.h $perlshr perlmain.c perl miniperl git_version.h $ext_c $more_ext_c generate_uudmap uudmap.h bitcount.h mg_data.h plan9.c plan9ish.h math.h bsd_glob.^(c h) poll.^(c h) re_*.^(c h) uni.data multicall.h + rm -rf privlib archlib deleteman:V: rm -f $installman1dir/perl* $installman3dir/perl* diff --git a/gnu/usr.bin/perl/plan9/plan9ish.h b/gnu/usr.bin/perl/plan9/plan9ish.h index fa81502ac90..a5a318e7042 100644 --- a/gnu/usr.bin/perl/plan9/plan9ish.h +++ b/gnu/usr.bin/perl/plan9/plan9ish.h @@ -25,14 +25,14 @@ * getgrgid() routines are available to get group entries. * The getgrent() has a separate definition, HAS_GETGRENT. */ -/*#define HAS_GROUP / **/ +/*#define HAS_GROUP /**/ /* HAS_PASSWD * This symbol, if defined, indicates that the getpwnam() and * getpwuid() routines are available to get password entries. * The getpwent() has a separate definition, HAS_GETPWENT. */ -/*#define HAS_PASSWD / **/ +/*#define HAS_PASSWD /**/ #define HAS_KILL #define HAS_WAIT @@ -42,7 +42,7 @@ * to remove all versions of a file if unlink() is called. This is * probably only relevant for VMS. */ -/* #define UNLINK_ALL_VERSIONS / **/ +/* #define UNLINK_ALL_VERSIONS /**/ /* PLAN9: * This symbol, if defined, indicates that the program is running under @@ -105,7 +105,7 @@ #define BIT_BUCKET "/dev/null" #define PERL_SYS_INIT_BODY(c,v) \ - MALLOC_CHECK_TAINT2(*c,*v) PERLIO_INIT; MALLOC_INIT + MALLOC_CHECK_TAINT2(*c,*v) PERLIO_INIT; MALLOC_INIT #define dXSUB_SYS dNOOP #define PERL_SYS_TERM_BODY() PERLIO_TERM; MALLOC_TERM diff --git a/gnu/usr.bin/perl/plan9/versnum b/gnu/usr.bin/perl/plan9/versnum index 6e579f30485..55f80d067eb 100644 --- a/gnu/usr.bin/perl/plan9/versnum +++ b/gnu/usr.bin/perl/plan9/versnum @@ -1,8 +1,9 @@ -/PERL_VERSION/ {base = $3} -/PERL_SUBVERSION/ {subvers = $3} +/define PERL_REVISION/ {revision = $3} +/define PERL_VERSION/ {version = $3} +/define PERL_SUBVERSION/ {subvers = $3} END { if (subvers == 0) - printf "p9pvers = 5.%03d\n", base> "buildinfo"; + printf "p9pvers = %d.%d\n", revision, version> "buildinfo"; else - printf "p9pvers = 5.%03d_%02d\n" , base, subvers> "buildinfo"; + printf "p9pvers = %d.%d.%d\n" , revision, version, subvers> "buildinfo"; } diff --git a/gnu/usr.bin/perl/pod/buildtoc b/gnu/usr.bin/perl/pod/buildtoc index 004a726a0fb..c846d994b3f 100644 --- a/gnu/usr.bin/perl/pod/buildtoc +++ b/gnu/usr.bin/perl/pod/buildtoc @@ -275,4 +275,42 @@ sub unitem { $initem = 0; } +=head1 NAME + +pod/buildtoc - Generate table of contents + +=head1 DESCRIPTION + +This program generates a table of contents for the documentation included in the Perl core distribution. This table of contents takes two forms: + +=over 4 + +=item 1 F + +A file in Perl's Plain Old Documentation (POD) format found in the F directory in the core distribution. Once Perl is installed, this file becomes accessible system-wide via C. + +=item 2 F + +A shell script originally written by Tom Christiansen and Raphael Manfredi, also found in the F directory, which can be used to translate Perl documentation into F pages. + +=back + +=head1 USAGE + +This program will typically B need to be called directly by a user. Rather, it is one of the last commands invoked during C: + + ./perl -Ilib -I. -f pod/buildtoc -q + +The only command-line switch is C<-q|--quiet>, which quiets some non-critical warnings. + +=head2 Diagnosing Problems + +This program Cs F and makes use of several subroutines found in that file: C and C in particular. Consequently, any warnings or exceptions you see when this program is running may be being passed through from those subroutines. You may have to (a) examine those subroutines and/or (b) run that program from the command-line to fully understand what is causing such warnings or exceptions. + +=head2 AUTHORS and MAINTENANCE + +This program was introduced into the Perl 5 core distribution by Andy Dougherty, based on earlier work by Tom Christiansen. It is maintained by the Perl 5 Porters. + +=cut + # ex: set ts=8 sts=4 sw=4 et: diff --git a/gnu/usr.bin/perl/pod/perl.pod b/gnu/usr.bin/perl/pod/perl.pod index deb71ebf313..b5fe973b3a8 100644 --- a/gnu/usr.bin/perl/pod/perl.pod +++ b/gnu/usr.bin/perl/pod/perl.pod @@ -34,7 +34,7 @@ For ease of access, the Perl manual has been split up into several sections. # This section is parsed by Porting/pod_lib.pl for use by pod/buildtoc etc -flag =g perlmodlib perlapi perlintern +flag =g perluniprops perlmodlib perlapi perlintern flag =go perltoc flag =ro perlcn perljp perlko perltw flag = perlvms @@ -96,6 +96,7 @@ aux h2ph h2xs perlbug pl2pm pod2html pod2man splain xsubpp perlpacktut Perl pack() and unpack() tutorial perlpod Perl plain old documentation perlpodspec Perl plain old documentation format specification + perldocstyle Perl style guide for core docs perlpodstyle Perl POD style guide perldiag Perl diagnostic messages perldeprecation Perl deprecations @@ -174,15 +175,13 @@ aux h2ph h2xs perlbug pl2pm pod2html pod2man splain xsubpp perlgov Perl Rules of Governance perlgit Using git with the Perl repository -=head2 Miscellaneous - - perlbook Perl book information - perlcommunity Perl community information - - perldoc Look up Perl documentation in Pod format +=head2 History perlhist Perl history records perldelta Perl changes since previous version + perl5341delta Perl changes in version 5.34.1 + perl5340delta Perl changes in version 5.34.0 + perl5321delta Perl changes in version 5.32.1 perl5320delta Perl changes in version 5.32.0 perl5303delta Perl changes in version 5.30.3 perl5302delta Perl changes in version 5.30.2 @@ -246,6 +245,13 @@ aux h2ph h2xs perlbug pl2pm pod2html pod2man splain xsubpp perl5005delta Perl changes in version 5.005 perl5004delta Perl changes in version 5.004 +=head2 Miscellaneous + + perlbook Perl book information + perlcommunity Perl community information + + perldoc Look up Perl documentation in Pod format + perlexperiment A listing of experimental features in Perl perlartistic Perl Artistic License @@ -255,7 +261,7 @@ aux h2ph h2xs perlbug pl2pm pod2html pod2man splain xsubpp =for buildtoc flag +r - perlcn Perl for Simplified Chinese (in EUC-CN) + perlcn Perl for Simplified Chinese (in UTF-8) perljp Perl for Japanese (in EUC-JP) perlko Perl for Korean (in EUC-KR) perltw Perl for Traditional Chinese (in Big5) @@ -267,16 +273,13 @@ aux h2ph h2xs perlbug pl2pm pod2html pod2man splain xsubpp perlandroid Perl notes for Android perlbs2000 Perl notes for POSIX-BC BS2000 perlcygwin Perl notes for Cygwin - perldos Perl notes for DOS perlfreebsd Perl notes for FreeBSD perlhaiku Perl notes for Haiku perlhpux Perl notes for HP-UX perlhurd Perl notes for Hurd perlirix Perl notes for Irix perllinux Perl notes for Linux - perlmacos Perl notes for Mac OS (Classic) perlmacosx Perl notes for Mac OS X - perlnetware Perl notes for NetWare perlopenbsd Perl notes for OpenBSD perlos2 Perl notes for OS/2 perlos390 Perl notes for OS/390 @@ -285,7 +288,6 @@ aux h2ph h2xs perlbug pl2pm pod2html pod2man splain xsubpp perlqnx Perl notes for QNX perlriscos Perl notes for RISC OS perlsolaris Perl notes for Solaris - perlsymbian Perl notes for Symbian perlsynology Perl notes for Synology perltru64 Perl notes for Tru64 perlvms Perl notes for VMS @@ -386,10 +388,13 @@ see L for more information. Using the C pragma ensures that all variables are properly declared and prevents other misuses of legacy Perl features. +These are enabled by default within the scope of +C> (or higher). -The C pragma produces some lovely diagnostics. One can -also use the B<-w> flag, but its use is normally discouraged, because -it gets applied to all executed Perl code, including that not under +The C pragma produces some lovely diagnostics. +It is enabled by default when you say C (or higher). +One can also use the B<-w> flag, but its use is normally discouraged, +because it gets applied to all executed Perl code, including that not under your control. See L for explanations of all Perl's diagnostics. The C now has a C<-p> option for attaching patches with a bug report. L has been modified to supply the report template with CRLF line endings on Windows. -[L] +L<[GH #13612]|https://github.com/Perl/perl5/issues/13612> =item * @@ -1976,7 +1976,7 @@ too, but B<-fwrapv> was broken before 4.3, and the optimizations probably won't go away), F now adds B<-fwrapv> unless the user requests B<-fno-wrapv>, which disables B<-fwrapv>, or B<-fsanitize=undefined>, which turns the overflows B<-fwrapv> ignores into runtime errors. -[L] +L<[GH #13690]|https://github.com/Perl/perl5/issues/13690> =back @@ -2190,7 +2190,7 @@ The time taken to build perl on Windows has been reduced quite significantly (time savings in the region of 30-40% are typically seen) by reducing the number of, usually failing, I/O calls for each L|perlfunc/require> (for B only). -[L] +L<[GH #13566]|https://github.com/Perl/perl5/issues/13566> =item * @@ -2198,7 +2198,7 @@ About 15 minutes of idle sleeping was removed from running C due to a bug in which the timeout monitor used for tests could not be cancelled once the test completes, and the full timeout period elapsed before running the next test file. -[L] +L<[GH #13647]|https://github.com/Perl/perl5/issues/13647> =item * @@ -2209,7 +2209,7 @@ C killed 1 process tree PID then it returned 0 instead of 1, and if C was passed 2 invalid PIDs then it returned 2 instead of 0. This has probably been the case since the process tree kill feature was implemented on Win32. It has now been corrected to follow the documented behaviour. -[L] +L<[GH #13595]|https://github.com/Perl/perl5/issues/13595> =item * @@ -2217,7 +2217,7 @@ When building a 64-bit perl, an uninitialized memory read in B, used during the build process, could lead to a 4GB B being created. This has now been fixed. (Note that B itself was unaffected, but obviously B would have been completely broken.) -[L] +L<[GH #13677]|https://github.com/Perl/perl5/issues/13677> =item * @@ -2226,30 +2226,30 @@ This was previously broken due to an incorrect definition of DllMain() in one of perl's source files. Earlier B versions were also affected when using version 4 of the w32api package. Versions of B available from L were not affected. -[L] +L<[GH #13733]|https://github.com/Perl/perl5/issues/13733> =item * The test harness now has no failures when perl is built on a FAT drive with the Windows OS on an NTFS drive. -[L] +L<[GH #6348]|https://github.com/Perl/perl5/issues/6348> =item * When cloning the context stack in fork() emulation, Perl_cx_dup() would crash accessing parameter information for context stack entries that included no parameters, as with C<&foo;>. -[L] +L<[GH #13763]|https://github.com/Perl/perl5/issues/13763> =item * Introduced by -L, a memory +L<[GH #12161]|https://github.com/Perl/perl5/issues/12161>, a memory leak on every call to C and backticks (C< `` >), on most Win32 Perls starting from 5.18.0 has been fixed. The memory leak only occurred if you enabled pseudo-fork in your build of Win32 Perl, and were running that build on Server 2003 R2 or newer OS. The leak does not appear on WinXP SP3. -[L] +L<[GH #13741]|https://github.com/Perl/perl5/issues/13741> =back @@ -2497,7 +2497,7 @@ a NULL C being passed to sv_2*v* functions, is if XS code defines its own getter type Sv*V* macros, which check for NULL B dereferencing and checking the SV's flags through public API Sv*OK* macros or directly using private API C, and if C is NULL, then calling the sv_2*v functions -with a NULL litteral or passing the C containing a NULL value. +with a NULL literal or passing the C containing a NULL value. =item * @@ -2914,7 +2914,7 @@ to, even when the subroutine was not an lvalue sub. This has been fixed. In Perl v5.18.0 dualvars that had an empty string for the string part but a non-zero number for the number part starting being treated as true. In previous versions they were treated as false, the string representation -taking precedeence. The old behaviour has been restored. [RT #118159] +taking precedence. The old behaviour has been restored. [RT #118159] =item * @@ -3544,7 +3544,7 @@ An initial C<{> at the beginning of a format argument line was always interpreted as the beginning of a block prior to v5.18. In Perl v5.18, it started being treated as an ambiguous token. The parser would guess whether it was supposed to be an anonymous hash constructor or a block -based on the contents. Now the previous behavious has been restored. +based on the contents. Now the previous behaviour has been restored. [perl #119973] =item * @@ -3591,7 +3591,7 @@ Fixed a crash when destroying a self-referencing GLOB. [perl #121242] =item * L is known to fail tests on AIX 5.3. There is -L in the request +L in the request tracker, #120835, which may be applied to future releases. =item * diff --git a/gnu/usr.bin/perl/pod/perl5240delta.pod b/gnu/usr.bin/perl/pod/perl5240delta.pod index 740bdafbccc..8fd30e2300c 100644 --- a/gnu/usr.bin/perl/pod/perl5240delta.pod +++ b/gnu/usr.bin/perl/pod/perl5240delta.pod @@ -117,18 +117,18 @@ This has been fixed by using umask 0177 instead. [perl #127322] =head2 Fix out of boundary access in Win32 path handling This is CVE-2015-8608. For more information see -L<[perl #126755]|https://rt.perl.org/Ticket/Display.html?id=126755> +L<[GH #15067]|https://github.com/Perl/perl5/issues/15067> =head2 Fix loss of taint in canonpath This is CVE-2015-8607. For more information see -L<[perl #126862]|https://rt.perl.org/Ticket/Display.html?id=126862> +L<[GH #15084]|https://github.com/Perl/perl5/issues/15084> =head2 Avoid accessing uninitialized memory in win32 C Added validation that will detect both a short salt and invalid characters in the salt. -L<[perl #126922]|https://rt.perl.org/Ticket/Display.html?id=126922> +L<[GH #15091]|https://github.com/Perl/perl5/issues/15091> =head2 Remove duplicate environment variables from C @@ -201,9 +201,9 @@ For example, these are now fatal: my ($x, my($y)); our (my $x); -L<[perl #125587]|https://rt.perl.org/Ticket/Display.html?id=125587> +L<[GH #14799]|https://github.com/Perl/perl5/issues/14799> -L<[perl #121058]|https://rt.perl.org/Ticket/Display.html?id=121058> +L<[GH #13548]|https://github.com/Perl/perl5/issues/13548> =head2 The C character class has been removed. @@ -858,7 +858,7 @@ The documentation of C has been revised to clarify valid inputs. =item * Better explain meaning of negative PIDs in C. -L<[perl #127080]|https://rt.perl.org/Ticket/Display.html?id=127080> +L<[GH #15108]|https://github.com/Perl/perl5/issues/15108> =item * @@ -996,7 +996,7 @@ Discourage use of 'In' as a prefix signifying the Unicode Block property. The documentation of C<$@> was reworded to clarify that it is not just for syntax errors in C. -L<[perl #124034]|https://rt.perl.org/Ticket/Display.html?id=124034> +L<[GH #14572]|https://github.com/Perl/perl5/issues/14572> =item * @@ -1101,7 +1101,7 @@ L<%s() is deprecated on :utf8 handles|perldiag/"%s() is deprecated on :utf8 hand Accessing the C part of a glob as C instead of C is no longer deprecated. It is discouraged to encourage uniformity (so that, for example, one can grep more easily) but it will not be removed. -L<[perl #127060]|https://rt.perl.org/Ticket/Display.html?id=127060> +L<[GH #15105]|https://github.com/Perl/perl5/issues/15105> =item * @@ -1145,7 +1145,7 @@ Bison 3.0 is now supported. F no longer probes for F by default. Originally this was the "New Math" library, but the name has been re-used by the GNOME NetworkManager. -L<[perl #127131]|https://rt.perl.org/Ticket/Display.html?id=127131> +L<[GH #15115]|https://github.com/Perl/perl5/issues/15115> =item * @@ -1239,7 +1239,7 @@ Perl 5.22.1. =item * Tests are more robust against unusual cygdrive prefixes. -L<[perl #126834]|https://rt.perl.org/Ticket/Display.html?id=126834> +L<[GH #15076]|https://github.com/Perl/perl5/issues/15076> =back @@ -1287,7 +1287,7 @@ utf8>>, which are now fixed =item * Use the C function from FreeBSD if it is available. -L<[perl #126847]|https://rt.perl.org/Ticket/Display.html?id=126847> +L<[GH #15082]|https://github.com/Perl/perl5/issues/15082> =back @@ -1300,12 +1300,12 @@ L<[perl #126847]|https://rt.perl.org/Ticket/Display.html?id=126847> Under some circumstances IRIX stdio C and C set the errno to C, which made no sense according to either IRIX or POSIX docs. Errno is now cleared in such cases. -L<[perl #123977]|https://rt.perl.org/Ticket/Display.html?id=123977> +L<[GH #14557]|https://github.com/Perl/perl5/issues/14557> =item * Problems when multiplying long doubles by infinity have been fixed. -L<[perl #126396]|https://rt.perl.org/Ticket/Display.html?id=126396> +L<[GH #14993]|https://github.com/Perl/perl5/issues/14993> =back @@ -1337,7 +1337,7 @@ environment conflicting with an atfork handler using the libc C function to update the environment. Perl now uses C/C to update the environment on OS X. -L<[perl #126240]|https://rt.perl.org/Ticket/Display.html?id=126240> +L<[GH #14955]|https://github.com/Perl/perl5/issues/14955> =back @@ -1635,7 +1635,7 @@ The obscure C variable, effectively a vestige of Perl 1, has been removed. It was documented as deprecated in Perl 5.20, with a statement that it would be removed early in the 5.21.x series; that has now finally happened. -L<[perl #121351]|https://rt.perl.org/Ticket/Display.html?id=121351> +L<[GH #13632]|https://github.com/Perl/perl5/issues/13632> =item * @@ -1644,7 +1644,7 @@ a stub subroutine definition with a prototype has been seen, then any subsequent stub (or definition) of the same subroutine with an attribute was causing an assertion failure because of a null pointer. -L<[perl #126845]|https://rt.perl.org/Ticket/Display.html?id=126845> +L<[GH #15081]|https://github.com/Perl/perl5/issues/15081> =item * @@ -1852,35 +1852,35 @@ but sometimes misparses hex floats. This has been fixed. A regression that allowed undeclared barewords in hash keys to work despite strictures has been fixed. -L<[perl #126981]|https://rt.perl.org/Ticket/Display.html?id=126981> +L<[GH #15099]|https://github.com/Perl/perl5/issues/15099> =item * Calls to the placeholder C<&PL_sv_yes> used internally when an C or C method isn't found now correctly handle scalar context. -L<[perl #126042]|https://rt.perl.org/Ticket/Display.html?id=126042> +L<[GH #14902]|https://github.com/Perl/perl5/issues/14902> =item * Report more context when we see an array where we expect to see an operator and avoid an assertion failure. -L<[perl #123737]|https://rt.perl.org/Ticket/Display.html?id=123737> +L<[GH #14472]|https://github.com/Perl/perl5/issues/14472> =item * Modifying an array that was previously a package C<@ISA> no longer causes assertion failures or crashes. -L<[perl #123788]|https://rt.perl.org/Ticket/Display.html?id=123788> +L<[GH #14492]|https://github.com/Perl/perl5/issues/14492> =item * Retain binary compatibility across plain and DEBUGGING perl builds. -L<[perl #127212]|https://rt.perl.org/Ticket/Display.html?id=127212> +L<[GH #15122]|https://github.com/Perl/perl5/issues/15122> =item * Avoid leaking memory when setting C<$ENV{foo}> on darwin. -L<[perl #126240]|https://rt.perl.org/Ticket/Display.html?id=126240> +L<[GH #14955]|https://github.com/Perl/perl5/issues/14955> =item * @@ -1894,7 +1894,7 @@ could lead to panics on utf8 strings. In some cases operators that return integers would return negative integers as large positive integers. -L<[perl #126635]|https://rt.perl.org/Ticket/Display.html?id=126635> +L<[GH #15049]|https://github.com/Perl/perl5/issues/15049> =item * @@ -1902,27 +1902,27 @@ The C operator would assert for DEBUGGING builds instead of producing the correct error message. The condition asserted on is detected and reported on correctly without the assertions, so the assertions were removed. -L<[perl #126480]|https://rt.perl.org/Ticket/Display.html?id=126480> +L<[GH #15015]|https://github.com/Perl/perl5/issues/15015> =item * In some cases, failing to parse a here-doc would attempt to use freed memory. This was caused by a pointer not being restored correctly. -L<[perl #126443]|https://rt.perl.org/Ticket/Display.html?id=126443> +L<[GH #15009]|https://github.com/Perl/perl5/issues/15009> =item * C<< @x = sort { *a = 0; $a <=> $b } 0 .. 1 >> no longer frees the GP for *a before restoring its SV slot. -L<[perl #124097]|https://rt.perl.org/Ticket/Display.html?id=124097> +L<[GH #14595]|https://github.com/Perl/perl5/issues/14595> =item * Multiple problems with the new hexadecimal floating point printf format C<%a> were fixed: -L<[perl #126582]|https://rt.perl.org/Ticket/Display.html?id=126582>, -L<[perl #126586]|https://rt.perl.org/Ticket/Display.html?id=126586>, -L<[perl #126822]|https://rt.perl.org/Ticket/Display.html?id=126822> +L<[GH #15032]|https://github.com/Perl/perl5/issues/15032>, +L<[GH #15033]|https://github.com/Perl/perl5/issues/15033>, +L<[GH #15074]|https://github.com/Perl/perl5/issues/15074> =item * @@ -1982,7 +1982,7 @@ or a C-level assert. [perl #126615], [perl #126602], [perl #126193]. There were places in regular expression patterns where comments (C<(?#...)>) weren't allowed, but should have been. This is now fixed. -L<[perl #116639]|https://rt.perl.org/Ticket/Display.html?id=116639> +L<[GH #12755]|https://github.com/Perl/perl5/issues/12755> =item * @@ -1990,15 +1990,15 @@ Some regressions from Perl 5.20 have been fixed, in which some syntax errors in L|perlrecharclass/Extended Bracketed Character Classes> constructs within regular expression patterns could cause a segfault instead of a proper error message. -L<[perl #126180]|https://rt.perl.org/Ticket/Display.html?id=126180> -L<[perl #126404]|https://rt.perl.org/Ticket/Display.html?id=126404> +L<[GH #14933]|https://github.com/Perl/perl5/issues/14933> +L<[GH #14996]|https://github.com/Perl/perl5/issues/14996> =item * Another problem with L|perlrecharclass/Extended Bracketed Character Classes> constructs has been fixed wherein things like C<\c]> could cause panics. -L<[perl #126181]|https://rt.perl.org/Ticket/Display.html?id=126181> +L<[GH #14934]|https://github.com/Perl/perl5/issues/14934> =item * @@ -2011,20 +2011,20 @@ operator, e.g. Formerly perl may have crashed, depending on the exact value of C<$big_number>; now it will typically raise an exception. -L<[perl #125937]|https://rt.perl.org/Ticket/Display.html?id=125937> +L<[GH #14880]|https://github.com/Perl/perl5/issues/14880> =item * In a regex conditional expression C<(?(condition)yes-pattern|no-pattern)>, if the condition is C<(?!)> then perl failed the match outright instead of matching the no-pattern. This has been fixed. -L<[perl #126222]|https://rt.perl.org/Ticket/Display.html?id=126222> +L<[GH #14947]|https://github.com/Perl/perl5/issues/14947> =item * The special backtracking control verbs C<(*VERB:ARG)> now all allow an optional argument and set C/C appropriately as well. -L<[perl #126186]|https://rt.perl.org/Ticket/Display.html?id=126186> +L<[GH #14937]|https://github.com/Perl/perl5/issues/14937> =item * @@ -2032,7 +2032,7 @@ Several bugs, including a segmentation fault, have been fixed with the boundary checking constructs (introduced in Perl 5.22) C<\b{gcb}>, C<\b{sb}>, C<\b{wb}>, C<\B{gcb}>, C<\B{sb}>, and C<\B{wb}>. All the C<\B{}> ones now match an empty string; none of the C<\b{}> ones do. -L<[perl #126319]|https://rt.perl.org/Ticket/Display.html?id=126319> +L<[GH #14976]|https://github.com/Perl/perl5/issues/14976> =item * @@ -2088,7 +2088,7 @@ incorrectly said it did. This has been fixed. Very large code-points (beyond Unicode) in regular expressions no longer cause a buffer overflow in some cases when converted to UTF-8. -L<[perl #125826]|https://rt.perl.org/Ticket/Display.html?id=125826> +L<[GH #14858]|https://github.com/Perl/perl5/issues/14858> =item * @@ -2096,12 +2096,12 @@ The integer overflow check for the range operator (...) in list context now correctly handles the case where the size of the range is larger than the address space. This could happen on 32-bits with -Duse64bitint. -L<[perl #125781]|https://rt.perl.org/Ticket/Display.html?id=125781> +L<[GH #14843]|https://github.com/Perl/perl5/issues/14843> =item * A crash with C<< %::=(); J->${\"::"} >> has been fixed. -L<[perl #125541]|https://rt.perl.org/Ticket/Display.html?id=125541> +L<[GH #14790]|https://github.com/Perl/perl5/issues/14790> =item * diff --git a/gnu/usr.bin/perl/pod/perl58delta.pod b/gnu/usr.bin/perl/pod/perl58delta.pod index 1997ff91d62..4901ea4fa74 100644 --- a/gnu/usr.bin/perl/pod/perl58delta.pod +++ b/gnu/usr.bin/perl/pod/perl58delta.pod @@ -409,7 +409,7 @@ File handles can be marked as accepting Perl's internal encoding of Unicode Note for EBCDIC users: the pseudo layer ":utf8" is erroneously named for you since it's not UTF-8 what you will be getting but instead UTF-EBCDIC. See L, L, and -http://www.unicode.org/unicode/reports/tr16/ for more information. +http://www.unicode.org/reports/tr16/ for more information. In future releases this naming may change. See L for more information about UTF-8. diff --git a/gnu/usr.bin/perl/pod/perlapio.pod b/gnu/usr.bin/perl/pod/perlapio.pod index f7509009bb7..4373f636ac7 100644 --- a/gnu/usr.bin/perl/pod/perlapio.pod +++ b/gnu/usr.bin/perl/pod/perlapio.pod @@ -25,6 +25,7 @@ perlapio - perl's IO abstraction interface. int PerlIO_vprintf(PerlIO *f, const char *fmt, va_list args); int PerlIO_flush(PerlIO *f); + int PerlIO_fill(PerlIO *f); int PerlIO_eof(PerlIO *f); int PerlIO_error(PerlIO *f); void PerlIO_clearerr(PerlIO *f); @@ -32,6 +33,7 @@ perlapio - perl's IO abstraction interface. int PerlIO_getc(PerlIO *d); int PerlIO_ungetc(PerlIO *f,int ch); SSize_t PerlIO_read(PerlIO *f, void *buf, size_t numbytes); + Size_t PerlIO_unread(PerlIO *f,const void *vbuf, size_t count int PerlIO_fileno(PerlIO *f); @@ -62,57 +64,60 @@ perlapio - perl's IO abstraction interface. FILE *PerlIO_findFILE(PerlIO *f); void PerlIO_releaseFILE(PerlIO *f,FILE *stdio); - int PerlIO_apply_layers(PerlIO *f, const char *mode, + int PerlIO_apply_layers(pTHX_ PerlIO *f, const char *mode, const char *layers); - int PerlIO_binmode(PerlIO *f, int ptype, int imode, + int PerlIO_binmode(pTHX_ PerlIO *f, int ptype, int imode, const char *layers); void PerlIO_debug(const char *fmt,...); -=for apidoc Amh|int |PerlIO_apply_layers|PerlIO *f|const char *mode|const char *layers -=for apidoc Amh|int |PerlIO_binmode|PerlIO *f|int ptype|int imode|const char *layers -=for apidoc ATmh|int |PerlIO_canset_cnt|PerlIO *f -=for apidoc Amh|void |PerlIO_debug|const char *fmt|... -=for apidoc ATmh|FILE *|PerlIO_exportFILE|PerlIO *f|const char *mode -=for apidoc ATmh|int |PerlIO_fast_gets|PerlIO *f -=for apidoc ATmh|PerlIO*|PerlIO_fdopen|int fd|const char *mode -=for apidoc ATmh|FILE *|PerlIO_findFILE|PerlIO *f -=for apidoc ATmh|int |PerlIO_getc|PerlIO *d -=for apidoc ATmh|int |PerlIO_getpos|PerlIO *f|SV *save -=for apidoc ATmh|int |PerlIO_has_base|PerlIO *f -=for apidoc ATmh|int |PerlIO_has_cntptr|PerlIO *f -=for apidoc ATmh|PerlIO*|PerlIO_importFILE|FILE *stdio|const char *mode -=for apidoc ATmh|PerlIO*|PerlIO_open|const char *path|const char *mode -=for apidoc Amh|int |PerlIO_printf|PerlIO *f|const char *fmt|... -=for apidoc ATmh|int |PerlIO_putc|PerlIO *f|int ch -=for apidoc ATmh|int |PerlIO_puts|PerlIO *f|const char *string -=for apidoc ATmh|void |PerlIO_releaseFILE|PerlIO *f|FILE *stdio -=for apidoc Amh|PerlIO *|PerlIO_reopen|const char *path|const char *mode|PerlIO *old -=for apidoc ATmh|void |PerlIO_rewind|PerlIO *f -=for apidoc ATmh|int |PerlIO_setpos|PerlIO *f|SV *saved -=for apidoc Amh|int |PerlIO_stdoutf|const char *fmt|... -=for apidoc ATmh|int |PerlIO_ungetc|PerlIO *f|int ch -=for apidoc ATmh|int |PerlIO_vprintf|PerlIO *f|const char *fmt|va_list args - -=for apidoc PerlIO_stdin -=for apidoc PerlIO_stdout -=for apidoc PerlIO_stderr -=for apidoc PerlIO_close -=for apidoc PerlIO_write -=for apidoc PerlIO_flush -=for apidoc PerlIO_eof -=for apidoc PerlIO_error -=for apidoc PerlIO_clearerr -=for apidoc PerlIO_read -=for apidoc PerlIO_fileno -=for apidoc PerlIO_setlinebuf -=for apidoc PerlIO_tell -=for apidoc PerlIO_seek -=for apidoc PerlIO_get_cnt -=for apidoc PerlIO_get_ptr -=for apidoc PerlIO_set_ptrcnt -=for apidoc PerlIO_set_cnt -=for apidoc PerlIO_get_base -=for apidoc PerlIO_get_bufsiz +=for apidoc_section $io + +=for apidoc Amh|int |PerlIO_apply_layers|PerlIO *f|const char *mode|const char *layers +=for apidoc_item |int |PerlIO_binmode|PerlIO *f|int ptype|int imode|const char *layers +=for apidoc_item T|int |PerlIO_canset_cnt|PerlIO *f +=for apidoc_item | |PerlIO_clearerr +=for apidoc_item | |PerlIO_close +=for apidoc_item T|void |PerlIO_debug|const char *fmt|... +=for apidoc_item | |PerlIO_eof +=for apidoc_item | |PerlIO_error +=for apidoc_item T|FILE * |PerlIO_exportFILE|PerlIO *f|const char *mode +=for apidoc_item T|int |PerlIO_fast_gets|PerlIO *f +=for apidoc_item T|PerlIO * |PerlIO_fdopen|int fd|const char *mode +=for apidoc_item | |PerlIO_fileno +=for apidoc_item | |PerlIO_fill +=for apidoc_item T|FILE * |PerlIO_findFILE|PerlIO *f +=for apidoc_item | |PerlIO_flush +=for apidoc_item | |PerlIO_get_base +=for apidoc_item | |PerlIO_get_bufsiz +=for apidoc_item T|int |PerlIO_getc|PerlIO *d +=for apidoc_item | |PerlIO_get_cnt +=for apidoc_item T|int |PerlIO_getpos|PerlIO *f|SV *save +=for apidoc_item | |PerlIO_get_ptr +=for apidoc_item T|int |PerlIO_has_base|PerlIO *f +=for apidoc_item T|int |PerlIO_has_cntptr|PerlIO *f +=for apidoc_item T|PerlIO * |PerlIO_importFILE|FILE *stdio|const char *mode +=for apidoc_item T|PerlIO * |PerlIO_open|const char *path|const char *mode +=for apidoc_item T|int |PerlIO_printf|PerlIO *f|const char *fmt|... +=for apidoc_item T|int |PerlIO_putc|PerlIO *f|int ch +=for apidoc_item T|int |PerlIO_puts|PerlIO *f|const char *string +=for apidoc_item | |PerlIO_read +=for apidoc_item T|void |PerlIO_releaseFILE|PerlIO *f|FILE *stdio +=for apidoc_item T|PerlIO * |PerlIO_reopen|const char *path|const char *mode|PerlIO *old +=for apidoc_item T|void |PerlIO_rewind|PerlIO *f +=for apidoc_item | |PerlIO_seek +=for apidoc_item | |PerlIO_set_cnt +=for apidoc_item | |PerlIO_setlinebuf +=for apidoc_item T|int |PerlIO_setpos|PerlIO *f|SV *saved +=for apidoc_item | |PerlIO_set_ptrcnt +=for apidoc_item | |PerlIO_stderr +=for apidoc_item | |PerlIO_stdin +=for apidoc_item | |PerlIO_stdout +=for apidoc_item T|int |PerlIO_stdoutf|const char *fmt|... +=for apidoc_item | |PerlIO_tell +=for apidoc_item T|int |PerlIO_ungetc|PerlIO *f|int ch +=for apidoc_item | |PerlIO_unread +=for apidoc_item T|int |PerlIO_vprintf|PerlIO *f|const char *fmt|va_list args +=for apidoc_item | |PerlIO_write =head1 DESCRIPTION @@ -139,6 +144,8 @@ functions which call stdio. In this case I PerlIO * is a FILE *. This has been the default implementation since the abstraction was introduced in perl5.003_02. +=for apidoc Amnh||USE_STDIO + =item 2. USE_PERLIO Introduced just after perl5.7.0, this is a re-implementation of the @@ -214,6 +221,12 @@ positive), returns negative value and sets C on error. Depending on implementation C may be C if operation was interrupted by a signal. +=item B + +Fills the buffer associated with C with data from the layer below. +C calls this as part of its normal operation. Returns 0 +upon success; -1 on failure. + =item B Depending on implementation C may be C if operation was @@ -234,6 +247,15 @@ success or -1 (C) on error. The number of bytes that can be "pushed back" may vary, only 1 character is certain, and then only if it is the last character that was read from the handle. +=item B + +This allows one to unget more than a single byte. +It effectively unshifts C bytes onto the beginning of the buffer +C, so that the next read operation(s) will return them before +anything else that was in the buffer. + +Returns the number of unread bytes. + =item B This corresponds to getc(). @@ -344,6 +366,8 @@ The first step is to add this line: #define PERLIO_NOT_STDIO 0 +=for apidoc Amnh ||PERLIO_NOT_STDIO + I including any perl header files. (This will probably become the default at some point). That prevents "perlio.h" from attempting to #define stdio functions onto PerlIO functions. @@ -497,14 +521,14 @@ happened to C (or whatever) last time IO was requested. =over 4 -=item PerlIO_apply_layers(f,mode,layers) +=item PerlIO_apply_layers(aTHX_ f,mode,layers) The new interface to the USE_PERLIO implementation. The layers ":crlf" -and ":raw" are only ones allowed for other implementations and those +and ":raw" are the only ones allowed for other implementations and those are silently ignored. (As of perl5.8 ":raw" is deprecated.) Use PerlIO_binmode() below for the portable case. -=item PerlIO_binmode(f,ptype,imode,layers) +=item PerlIO_binmode(aTHX_ f,ptype,imode,layers) The hook used by perl's C operator. B is perl's character for the kind of IO: @@ -521,15 +545,15 @@ B is perl's character for the kind of IO: B is C or C. -B is a string of layers to apply, only ":crlf" makes sense in -the non USE_PERLIO case. (As of perl5.8 ":raw" is deprecated in favour +B is a string of layers to apply; only ":crlf" makes sense in +the non-USE_PERLIO case. (As of perl5.8 ":raw" is deprecated in favour of passing NULL.) Portable cases are: - PerlIO_binmode(f,ptype,O_BINARY,NULL); + PerlIO_binmode(aTHX_ f,ptype,O_BINARY,NULL); and - PerlIO_binmode(f,ptype,O_TEXT,":crlf"); + PerlIO_binmode(aTHX_ f,ptype,O_TEXT,":crlf"); On Unix these calls probably have no effect whatsoever. Elsewhere they alter "\n" to CR,LF translation and possibly cause a special text diff --git a/gnu/usr.bin/perl/pod/perlcall.pod b/gnu/usr.bin/perl/pod/perlcall.pod index c3407166531..b20bbdf4d9c 100644 --- a/gnu/usr.bin/perl/pod/perlcall.pod +++ b/gnu/usr.bin/perl/pod/perlcall.pod @@ -121,12 +121,14 @@ been warned. =head1 FLAG VALUES -The C parameter in all the I functions is one of G_VOID, -G_SCALAR, or G_ARRAY, which indicate the call context, OR'ed together +The C parameter in all the I functions is one of C, +C, or C, which indicate the call context, OR'ed together with a bit mask of any combination of the other G_* symbols defined below. =head2 G_VOID +=for apidoc AmnUh||G_VOID + Calls the Perl subroutine in a void context. This flag has 2 effects: @@ -152,6 +154,8 @@ be 0. =head2 G_SCALAR +=for apidoc AmnUh||G_SCALAR + Calls the Perl subroutine in a scalar context. This is the default context flag setting for all the I functions. @@ -190,9 +194,12 @@ I function. The section L shows an example of this behavior. -=head2 G_ARRAY +=head2 G_LIST -Calls the Perl subroutine in a list context. +=for apidoc AmnUh||G_LIST + +Calls the Perl subroutine in a list context. Prior to Perl version +5.35.1 this was called C. As with G_SCALAR, this flag has 2 effects: @@ -218,16 +225,18 @@ If 0, then you have specified the G_DISCARD flag. If not 0, then it will be a count of the number of items returned by the subroutine. These items will be stored on the Perl stack. The section L gives an example of using the -G_ARRAY flag and the mechanics of accessing the returned items from the +G_LIST flag and the mechanics of accessing the returned items from the Perl stack. =head2 G_DISCARD +=for apidoc AmnUh||G_DISCARD + By default, the I functions place the items returned from by the Perl subroutine on the stack. If you are not interested in these items, then setting this flag will make Perl get rid of them automatically for you. Note that it is still possible to indicate a -context to the Perl subroutine by using either G_SCALAR or G_ARRAY. +context to the Perl subroutine by using either G_SCALAR or G_LIST. If you do not set this flag then it is I important that you make sure that any temporaries (i.e., parameters passed to the Perl @@ -239,6 +248,8 @@ can ignore the problem and let Perl deal with it for you. =head2 G_NOARGS +=for apidoc AmnUh||G_NOARGS + Whenever a Perl subroutine is called using one of the I functions, it is assumed by default that parameters are to be passed to the subroutine. If you are not passing any parameters to the Perl @@ -275,6 +286,8 @@ belongs to C. =head2 G_EVAL +=for apidoc AmnUh||G_EVAL + It is possible for the Perl subroutine you are calling to terminate abnormally, e.g., by calling I explicitly or by not actually existing. By default, when either of these events occurs, the @@ -302,7 +315,7 @@ If G_DISCARD is specified, the return value will always be 0. =item * -If G_ARRAY is specified I an error has occurred, the return value +If G_LIST is specified I an error has occurred, the return value will always be 0. =item * @@ -319,6 +332,8 @@ See L for details on using G_EVAL. =head2 G_KEEPERR +=for apidoc AmnUh||G_KEEPERR + Using the G_EVAL flag described above will always set C<$@>: clearing it if there was no error, and setting it to describe the error if there was an error in the called code. This is what you want if your intention @@ -358,7 +373,7 @@ use of this flag. As mentioned above, you can determine the context of the currently executing subroutine in Perl with I. The equivalent test can be made in C by using the C macro, which returns -C if you have been called in a list context, C if +C if you have been called in a list context, C if in a scalar context, or C if in a void context (i.e., the return value will not be used). An older version of this macro is called C; in a void context it returns C instead of @@ -736,7 +751,7 @@ and this is the C function PUSHs(sv_2mortal(newSViv(b))); PUTBACK; - count = call_pv("AddSubtract", G_ARRAY); + count = call_pv("AddSubtract", G_LIST); SPAGAIN; @@ -766,7 +781,7 @@ Notes =item 1. -We wanted list context, so G_ARRAY was used. +We wanted list context, so G_LIST was used. =item 2. @@ -993,7 +1008,7 @@ equivalent of C<$@>. We use a local temporary, C, since C is a macro that calls a function, and C would end up calling that function multiple times. -=for apidoc Amnh|GV *|PL_errgv +=for apidoc AmnUh|GV *|PL_errgv =item 3. @@ -1853,7 +1868,7 @@ of Values> recoded to use C instead of C. PUSHs(sv_2mortal(newSViv(b))); PUTBACK; - count = call_pv("AddSubtract", G_ARRAY); + count = call_pv("AddSubtract", G_LIST); SPAGAIN; SP -= count; @@ -1949,7 +1964,7 @@ The pattern of macro calls is like this: dMULTICALL; /* Declare local variables */ U8 gimme = G_SCALAR; /* context of the call: G_SCALAR, - * G_ARRAY, or G_VOID */ + * G_LIST, or G_VOID */ PUSH_MULTICALL(cv); /* Set up the context for calling cv, and set local vars appropriately */ diff --git a/gnu/usr.bin/perl/pod/perlclib.pod b/gnu/usr.bin/perl/pod/perlclib.pod index 180cb5d59c9..aed8386d1df 100644 --- a/gnu/usr.bin/perl/pod/perlclib.pod +++ b/gnu/usr.bin/perl/pod/perlclib.pod @@ -185,8 +185,8 @@ same as ISO-8859-1, often called Latin 1. isupper(c) isUPPER(c) isUPPER_L1(c) isUPPER_LC(c) isxdigit(c) isXDIGIT(c) isXDIGIT_L1(c) isXDIGIT_LC(c) - tolower(c) toLOWER(c) toLOWER_L1(c) toLOWER_LC(c) - toupper(c) toUPPER(c) toUPPER_LC(c) + tolower(c) toLOWER(c) toLOWER_L1(c) + toupper(c) toUPPER(c) To emphasize that you are operating only on ASCII characters, you can append C<_A> to each of the macros in the ASCII column: C, @@ -196,7 +196,7 @@ C, and so on. is an C, which is identical to C; the latter name is clearer. There is no entry in the Latin1 column for C because the result can be non-Latin1. You have to use -C, as described in L.) +C, as described in L.) =head2 F functions diff --git a/gnu/usr.bin/perl/pod/perlcommunity.pod b/gnu/usr.bin/perl/pod/perlcommunity.pod index c3c04920582..a7b2c3a7841 100644 --- a/gnu/usr.bin/perl/pod/perlcommunity.pod +++ b/gnu/usr.bin/perl/pod/perlcommunity.pod @@ -20,6 +20,11 @@ There is a central directory for the Perl community: L maintained by the Perl Foundation (L), which tracks and provides services for a variety of other community sites. +=head3 Raku + +Perl's sister language, Raku (formerly known as Perl 6), maintains its own +directory of community resources at L. + =head2 Mailing Lists and Newsgroups Perl runs on e-mail; there is no doubt about it. The Camel book was originally @@ -39,8 +44,8 @@ own IRC network, L. General (not help-oriented) chat can be found at L. Many other more specific chats are also hosted on the network. Information about irc.perl.org is located on the network's website: L. For a more help-oriented #perl, -check out L. Raku development also has a -presence in L. Most Perl-related channels +check out L +(L). Most Perl-related channels will be kind enough to point you in the right direction if you ask nicely. Any large IRC network (Dalnet, EFnet) is also likely to have a #perl channel, @@ -66,11 +71,11 @@ this site provides quality articles mostly about technical details of Perl. Many members of the community have a Perl-related blog on this site. If you'd like to join them, you can sign up for free. -=item L +=item L -Perlsphere is one of several aggregators of Perl-related blog feeds. +Planet Perl is one of several aggregators of Perl-related blog feeds. -=item L +=item L Perl Weekly is a weekly mailing list that keeps you up to date on conferences, releases and notable blog posts. diff --git a/gnu/usr.bin/perl/pod/perldata.pod b/gnu/usr.bin/perl/pod/perldata.pod index b50f817dcaa..27f6092f6fa 100644 --- a/gnu/usr.bin/perl/pod/perldata.pod +++ b/gnu/usr.bin/perl/pod/perldata.pod @@ -126,7 +126,7 @@ rules apply: That is, a "start" character followed by any number of "continue" characters. Perl requires every character in an identifier to also match C<\w> (this prevents some problematic cases); and Perl -additionally accepts identfier names beginning with an underscore. +additionally accepts identifier names beginning with an underscore. If not under C, the source is treated as ASCII + 128 extra generic characters, and identifiers should match @@ -444,6 +444,7 @@ integer formats: 0xff # hex 0xdead_beef # more hex 0377 # octal (only numbers, begins with 0) + 0o12_345 # alternative octal (introduced in Perl 5.33.5) 0b011011 # binary 0x1.999ap-4 # hexadecimal floating point (the 'p' is required) @@ -502,12 +503,14 @@ and POSIX::setlocale() has been called, the character used for the decimal separator is affected by the LC_NUMERIC locale. See L and L. -As in some shells, you can enclose the variable name in braces to -disambiguate it from following alphanumerics (and underscores). -You must also do -this when interpolating a variable into a string to separate the -variable name from a following double-colon or an apostrophe, since -these would be otherwise treated as a package separator: +=head3 Demarcated variable names using braces + +As in some shells, you can enclose the variable name in braces as a +demarcator to disambiguate it from following alphanumerics and +underscores or other text. You must also do this when interpolating a +variable into a string to separate the variable name from a following +double-colon or an apostrophe since these would be otherwise treated as +a package separator: X $who = "Larry"; @@ -519,13 +522,95 @@ C<$who::0>, and a C<$who's> variable. The last two would be the $0 and the $s variables in the (presumably) non-existent package C. -In fact, a simple identifier within such curlies is forced to be -a string, and likewise within a hash subscript. Neither need -quoting. Our earlier example, C<$days{'Feb'}> can be written as -C<$days{Feb}> and the quotes will be assumed automatically. But -anything more complicated in the subscript will be interpreted as an -expression. This means for example that C<$version{2.0}++> is -equivalent to C<$version{2}++>, not to C<$version{'2.0'}++>. +In fact, a simple identifier within such curly braces is forced to be a +string, and likewise within a hash subscript. Neither need quoting. Our +earlier example, C<$days{'Feb'}> can be written as C<$days{Feb}> and the +quotes will be assumed automatically. But anything more complicated in +the subscript will be interpreted as an expression. This means for +example that C<$version{2.0}++> is equivalent to C<$version{2}++>, not +to C<$version{'2.0'}++>. + +There is a similar problem with interpolation with text that looks like +array or hash access notation. Placing a simple variable like C<$who> +immediately in front of text like C<"[1]"> or C<"{foo}"> would cause the +variable to be interpolated as accessing an element of C<@who> or a +value stored in C<%who>: + + $who = "Larry Wall"; + print "$who[1] is the father of Perl.\n"; + +would attempt to access index 1 of an array named C<@who>. Again, using +braces will prevent this from happening: + + $who = "Larry Wall"; + print "${who}[1] is the father of Perl.\n"; + +will be treated the same as + + $who = "Larry Wall"; + print $who . "[1] is the father of Perl.\n"; + +This notation also applies to more complex variable descriptions, +such as array or hash access with subscripts. For instance + + @name = qw(Larry Curly Moe); + print "Also ${name[0]}[1] was a member\n"; + +Without the braces the above example would be parsed as a two level +array subscript in the C<@name> array, and under C would +likely produce a fatal exception, as it would be parsed like this: + + print "Also " . $name[0][1] . " was a member\n"; + +and not as the intended: + + print "Also " . $name[0] . "[1] was a member\n"; + +A similar result may be derived by using a backslash on the first +character of the subscript or package notation that is not part of +the variable you want to access. Thus the above example could also +be written: + + @name = qw(Larry Curly Moe); + print "Also $name[0]\[1] was a member\n"; + +however for some special variables (multi character caret variables) the +demarcated form using curly braces is the B way you can reference +the variable at all, and the only way you can access a subscript of the +variable via interpolation. + +Consider the magic array C<@{^CAPTURE}> which is populated by the +regex engine with the contents of all of the capture buffers in a +pattern (see L and L). The B way you can +access one of these members inside of a string is via the braced +(demarcated) form: + + "abc"=~/(.)(.)(.)/ + and print "Second buffer is ${^CAPTURE[1]}"; + +is equivalent to + + "abc"=~/(.)(.)(.)/ + and print "Second buffer is " . ${^CAPTURE}[1]; + +Saying C<@^CAPTURE> is a syntax error, so it B be referenced as +C<@{^CAPTURE}>, and to access one of its elements in normal code you +would write C< ${^CAPTURE}[1] >. However when interpolating in a string +C<"${^CAPTURE}[1]"> would be equivalent to C<${^CAPTURE} . "[1]">, +which does not even refer to the same variable! Thus the subscripts must +B be placed B of the braces: C<"${^CAPTURE[1]}">. + +The demarcated form using curly braces can be used with all the +different types of variable access, including array and hash slices. For +instance code like the following: + + @name = qw(Larry Curly Moe); + local $" = " and "; + print "My favorites were @{name[1,2]}.\n"; + +would output + + My favorites were Curly and Moe. =head3 Special floating point: infinity (Inf) and not-a-number (NaN) @@ -606,7 +691,8 @@ X X X The two control characters ^D and ^Z, and the tokens __END__ and __DATA__ may be used to indicate the logical end of the script before the actual -end of file. Any following text is ignored. +end of file. Any following text is ignored by the interpreter unless +read by the program as described below. Text after __DATA__ may be read via the filehandle C, where C is the package that was current when the __DATA__ @@ -619,6 +705,11 @@ introduced, __END__ behaves like __DATA__ in the top level script (but not in files loaded with C or C) and leaves the remaining contents of the file accessible via C. + while (my $line = ) { print $line; } + close DATA; + __DATA__ + Hello world. + The C file handle by default has whatever PerlIO layers were in place when Perl read the file to parse the source. Normally that means that the file is being read bytewise, as if it were encoded in @@ -1026,9 +1117,9 @@ values of the array or hash. foreach (@array[ 4 .. 10 ]) { s/peter/paul/ } foreach (@hash{qw[key1 key2]}) { - s/^\s+//; # trim leading whitespace - s/\s+$//; # trim trailing whitespace - s/(\w+)/\u\L$1/g; # "titlecase" words + s/^\s+//; # trim leading whitespace + s/\s+$//; # trim trailing whitespace + s/\b(\w)(\w*)\b/\u$1\L$2/g; # "titlecase" words } As a special exception, when you slice a list (but not an array or a hash), diff --git a/gnu/usr.bin/perl/pod/perldebguts.pod b/gnu/usr.bin/perl/pod/perldebguts.pod index cc908393cf8..1e5ebf3358a 100644 --- a/gnu/usr.bin/perl/pod/perldebguts.pod +++ b/gnu/usr.bin/perl/pod/perldebguts.pod @@ -16,7 +16,7 @@ Perl has special debugging hooks at compile-time and run-time used to create debugging environments. These hooks are not to be confused with the I command described in L, which is usable only if a special Perl is built per the instructions in -the F podpage in the Perl source tree. +the F file in the Perl source tree. For example, whenever you call Perl's built-in C function from the package C, the arguments that the corresponding stack @@ -56,9 +56,9 @@ looks like C<(eval 34)>. =item * -Each scalar C<${"_<$filename"}> contains C<"_<$filename">. This is +Each scalar C<${"_<$filename"}> contains C<$filename>. This is also the case for evaluated strings that contain subroutines, or -which are currently being executed. The $filename for Ced +which are currently being executed. The C<$filename> for Ced strings looks like C<(eval 34)>. =item * @@ -686,20 +686,20 @@ will be lost. (string folded) EXACTFAA str Like EXACT, but match using /iaa rules; - (string folded except in non-UTF8 patterns: - MICRO, SHARP S; folded length <= unfolded) + (string folded except MICRO in non-UTF8 + patterns; doesn't contain SHARP S unless + UTF-8; folded length <= unfolded) + EXACTFAA_NO_TRIE str Like EXACTFAA, (string not UTF-8, folded + except: MICRO, SHARP S; folded length <= + unfolded, not currently trie-able) EXACTFUP str Like EXACT, but match using /iu rules; - (string not UTF-8, folded except MICRO, - SHARP S: hence Problematic) + (string not UTF-8, folded except MICRO: + hence Problematic) EXACTFLU8 str Like EXACTFU, but use /il, UTF-8, (string is folded, and everything in it is above 255 - EXACTFAA_NO_TRIE str Like EXACT, but match using /iaa rules - (string not UTF-8, not guaranteed to be - folded, not currently trie-able) - EXACT_REQ8 str Like EXACT, but only UTF-8 encoded targets can match LEXACT_REQ8 len:str 1 Like LEXACT, but only UTF-8 encoded targets @@ -711,6 +711,24 @@ will be lost. except begins and/or ends with [Ss]; (string not UTF-8; compile-time only) + # New charclass like patterns + LNBREAK none generic newline pattern + + # Trie Related + + # Behave the same as A|LIST|OF|WORDS would. The '..C' variants + # have inline charclass data (ascii only), the 'C' store it in the + # structure. + + TRIE trie 1 Match many EXACT(F[ALU]?)? at once. + flags==type + TRIEC trie Same as TRIE, but with embedded charclass + charclass data + + AHOCORASICK trie 1 Aho Corasick stclass. flags==type + AHOCORASICKC trie Same as AHOCORASICK, but with embedded + charclass charclass data + # Do nothing types NOTHING no Match empty string. @@ -797,21 +815,6 @@ will be lost. # This is not used yet RENUM off 1 1 Group with independently numbered parens. - # Trie Related - - # Behave the same as A|LIST|OF|WORDS would. The '..C' variants - # have inline charclass data (ascii only), the 'C' store it in the - # structure. - - TRIE trie 1 Match many EXACT(F[ALU]?)? at once. - flags==type - TRIEC trie Same as TRIE, but with embedded charclass - charclass data - - AHOCORASICK trie 1 Aho Corasick stclass. flags==type - AHOCORASICKC trie Same as AHOCORASICK, but with embedded - charclass charclass data - # Regex Subroutines GOSUB num/ofs 2L recurse to paren arg1 at (signed) ofs arg2 @@ -842,8 +845,9 @@ will be lost. # Control what to keep in $&. KEEPS no $& begins here. - # New charclass like patterns - LNBREAK none generic newline pattern + # Validate that lookbehind IFMATCH and UNLESSM end at the right place + LOOKBEHIND_END no Return from lookbehind (IFMATCH/UNLESSM) + and validate position # SPECIAL REGOPS @@ -1089,8 +1093,9 @@ never touched. =head1 SEE ALSO L, +L, L, -L +L, L, and L. diff --git a/gnu/usr.bin/perl/pod/perldebtut.pod b/gnu/usr.bin/perl/pod/perldebtut.pod index 2558ed27f97..364e51560d8 100644 --- a/gnu/usr.bin/perl/pod/perldebtut.pod +++ b/gnu/usr.bin/perl/pod/perldebtut.pod @@ -421,8 +421,8 @@ For more on references see L and L Here's a simple program which converts between Celsius and Fahrenheit, it too has a problem: - #!/usr/bin/perl -w - use strict; + #!/usr/bin/perl + use v5.36; my $arg = $ARGV[0] || '-c20'; @@ -715,6 +715,7 @@ place to go), and of course, experiment. L, L, +L, L, L diff --git a/gnu/usr.bin/perl/pod/perldebug.pod b/gnu/usr.bin/perl/pod/perldebug.pod index 53c3d602871..20fa8d7be2b 100644 --- a/gnu/usr.bin/perl/pod/perldebug.pod +++ b/gnu/usr.bin/perl/pod/perldebug.pod @@ -14,6 +14,9 @@ L, which is a tutorial introduction to the debugger. If you're looking for the nitty gritty details of how the debugger is I, you may prefer to read L. +For in-depth technical usage details, see L, the documentation +of the debugger itself. + =head1 The Perl Debugger If you invoke Perl with the B<-d> switch, your script runs under the @@ -81,6 +84,16 @@ Debug a given program using threads (experimental). =back +If Perl is called with the C<-d> switch, the variable C<$^P> will hold a true +value. This is useful if you need to know if your code is running under the +debugger: + + if ( $^P ) { + # running under the debugger + } + +See L for more information on the variable. + =head2 Debugger Commands The interactive debugger understands the following commands: @@ -676,9 +689,9 @@ working example of something along the lines of: =head2 Configurable Options The debugger has numerous options settable using the C command, -either interactively or from the environment or an rc file. -(./.perldb or ~/.perldb under Unix.) - +either interactively or from the environment or an rc file. The file +is named F<./.perldb> or F<~/.perldb> under Unix with F, +F otherwise. =over 12 @@ -737,7 +750,7 @@ X File or pipe to print line number info to. If it is a pipe (say, C<|visual_perl_db>), then a short message is used. This is the -mechanism used to interact with a slave editor or visual debugger, +mechanism used to interact with a client editor or visual debugger, such as the special C or C hooks, or the C graphical debugger. @@ -1206,6 +1219,7 @@ You do have C and C enabled, don't you? L, L, +L, L, L, L, diff --git a/gnu/usr.bin/perl/pod/perldelta.pod b/gnu/usr.bin/perl/pod/perldelta.pod index 81e7f0737a5..615d725f8ba 100644 --- a/gnu/usr.bin/perl/pod/perldelta.pod +++ b/gnu/usr.bin/perl/pod/perldelta.pod @@ -2,86 +2,893 @@ =head1 NAME -perldelta - what is new for perl v5.32.1 +perldelta - what is new for perl v5.36.0 =head1 DESCRIPTION -This document describes differences between the 5.32.0 release and the 5.32.1 +This document describes differences between the 5.34.0 release and the 5.36.0 release. -If you are upgrading from an earlier release such as 5.31.0, first read -L, which describes differences between 5.31.0 and 5.32.0. +=head1 Core Enhancements + +=head2 C + +As always, C turns on the feature bundle for that version of Perl. + +The 5.36 bundle enables the C feature. Introduced in Perl version +5.20.0, and modified several times since, the subroutine signatures feature is +now no longer considered experimental. It is now considered a stable language +feature and no longer prints a warning. + + use v5.36; + + sub add ($x, $y) { + return $x + $y; + } + +Despite this, certain elements of signatured subroutines remain experimental; +see below. + +The 5.36 bundle enables the C feature. Introduced in Perl version 5.32.0, +this operator has remained unchanged since then. The operator is now considered +a stable language feature. For more detail see L. + +The 5.36 bundle also I the features C, and +C. These will forbid, respectively: the use of "indirect" +method calls (like C<$x = new Class;>); the use of a list expression as a hash +key to simulate sparse multidimensional arrays. The specifics of these changes +can be found in L, but the short version is: this is a bit like having +more C turned on, disabling features that cause more trouble than +they're worth. + +Furthermore, C will also enable warnings as if you'd written C. + +Finally, with this release, the experimental C feature, present in +every feature bundle since they were introduced in v5.10, has been removed from +the v5.36 bundle. If you want to use it (against our advice), you'll have to +enable it explicitly. + +=head2 -g command-line flag + +A new command-line flag, -g, is available. It is a simpler alias for -0777. + +For more information, see L. + +=head2 Unicode 14.0 is supported + +See L for details. + +=head2 regex sets are no longer considered experimental + +Prior to this release, the regex sets feature (officially named +"Extended Bracketed Character Classes") was considered experimental. +Introduced in Perl version 5.18.0, and modified several times since, +this is now considered a stable language feature and its use no longer +prints a warning. See L. + +=head2 Variable length lookbehind is mostly no longer considered experimental + +Prior to this release, any form of variable length lookbehind was +considered experimental. With this release the experimental status has +been reduced to cover only lookbehind that contains capturing parenthesis. +This is because it is not clear if + + "aaz"=~/(?=z)(?<=(a|aa))/ + +should match and leave $1 equaling "a" or "aa". Currently it will match +the longest possible alternative, "aa". While we are confident that the overall +construct will now match only when it should, we are not confident that we +will keep the current "longest match" behavior. + +=head2 SIGFPE no longer deferred + +Floating-point exceptions are now delivered immediately, in the same way +as other "fault"-like signals such as SIGSEGV. This means one has at +least a chance to catch such a signal with a C<$SIG{FPE}> handler, e.g. +so that C can report the line in perl that triggered it. + +=head2 Stable boolean tracking + +The "true" and "false" boolean values, often accessed by constructions like +C and C, as well as being returned from many core functions and +operators, now remember their boolean nature even through assignment into +variables. The new function C in L can check whether +a value has boolean nature. + +This is likely to be useful when interoperating with other languages or +data-type serialisation, among other places. + +=head2 iterating over multiple values at a time (experimental) + +You can now iterate over multiple values at a time by specifying a list of +lexicals within parentheses. For example, + + for my ($key, $value) (%hash) { ... } + for my ($left, $right, $gripping) (@moties) { ... } + +Prior to perl v5.36, attempting to specify a list after C was a syntax +error. + +This feature is currently experimental and will cause a warning of category +C. For more detail see L. +See also L in this document, which is a handy companion to +n-at-a-time foreach. + +=head2 builtin functions (experimental) + +A new core module L has been added, which provides documentation for +new always-present functions that are built into the interpreter. + + say "Reference type of arrays is ", builtin::reftype([]); + +It also provides a lexical import mechanism for providing short name versions +of these functions. + + use builtin 'reftype'; + say "Reference type of arrays is ", reftype([]); + +This builtin function mechanism and the functions it provides are all +currently B. We expect that C itself will cease to be +experimental in the near future, but that individual functions in it may become +stable on an ongoing basis. Other functions will be added to C over +time. + +For details, see L, but here's a summary of builtin functions in +v5.36: + +=over 4 + +=item builtin::trim + +This function treats its argument as a string, returning the result of removing +all white space at its beginning and ending. + +=item builtin::indexed + +This function returns a list twice as big as its argument list, where each item +is preceded by its index within that list. This is primarily useful for using +the new C syntax with multiple iterator variables to iterate over an +array or list, while also tracking the index of each item: + + use builtin 'indexed'; + + foreach my ($index, $val) (indexed @array) { + ... + } + +=item builtin::true, builtin::false, builtin::is_bool + +C and C return boolean true and false values. Perl is still perl, +and doesn't have strict typing of booleans, but these values will be known to +have been created as booleans. C will tell you whether a value was +known to have been created as a boolean. + +=item builtin::weaken, builtin::unweaken, builtin::is_weak + +These functions will, respectively: weaken a reference; strengthen a reference; +and return whether a reference is weak. (A weak reference is not counted for +garbage collection purposes. See L.) These can take the place of +some similar routines in L. + +=item builtin::blessed, builtin::refaddr, builtin::reftype + +These functions provide more data about references (or non-references, +actually!) and can take the place of similar routines found in L. + +=item builtin::ceil, builtin::floor + +C returns the smallest integer greater than or equal to its argument. +C returns the largest integer less than or equal to its argument. These +can take the place of similar routines found in L. + +=back + +=head2 C blocks (experimental) + +This release adds support for C blocks, which are blocks of code +prefixed by the C modifier. They provide a section of code which runs +at a later time, during scope exit. + +In brief, when a C block is reached at runtime, its body is set aside to +be run when the enclosing scope is exited. It is unlike a UNITCHECK (among +other reasons) in that if the block I the C block is exited +before the block is reached, it will not be run. + +C blocks can be used to take the place of "scope guard" objects where an +object is passed a code block to be run by its destructor. + +For more information, see L. + +=head2 try/catch can now have a C block (experimental) + +The experimental C/C syntax has been extended to support an +optional third block introduced by the C keyword. + + try { + attempt(); + print "Success\n"; + } + catch ($e) { + print "Failure\n"; + } + finally { + print "This happens regardless\n"; + } + +This provides code which runs at the end of the C/C construct, +even if aborted by an exception or control-flow keyword. They are similar +to C blocks. + +For more information, see L. + +=head2 non-ASCII delimiters for quote-like operators (experimental) + +Perl traditionally has allowed just four pairs of string/pattern +delimiters: S> S> S> and S >>>, all in the +ASCII range. Unicode has hundreds more possibilities, and using this +feature enables many of them. When enabled, you can say S> for +example, or S>. See L for details. + +=head2 @_ is now experimental within signatured subs + +Even though subroutine signatures are now stable, use of the legacy arguments +array (C<@_>) with a subroutine that has a signature I experimental, +with its own warning category. Silencing the C +warning category is not sufficient to dismiss this. The new warning is emitted +with the category name C. + +Any subroutine that has a signature and tries to make use of the defaults +argument array or an element thereof (C<@_> or C<$_[INDEX]>), either +explicitly or implicitly (such as C or C with no argument) will +provoke a warning at compile-time: + + use v5.36; + + sub f ($x, $y = 123) { + say "The first argument is $_[0]"; + } + +Z<> + + Use of @_ in array element with signatured subroutine is experimental + at file.pl line 4. + +The behaviour of code which attempts to do this is no longer specified, and +may be subject to change in a future version. =head1 Incompatible Changes -There are no changes intentionally incompatible with Perl 5.32.0. If any -exist, they are bugs, and we request that you submit a report. See -L below. +=head2 A physically empty sort is now a compile-time error + + @a = sort @empty; # unaffected + @a = sort; # now a compile-time error + @a = sort (); # also a compile-time error + +A bare sort used to be a weird way to create an empty list; now it croaks +at compile time. This change is intended to free up some of the syntax space +for possible future enhancements to C. + +=head1 Deprecations + +=head2 C (where VERSION is below v5.11) after C is deprecated + +When in the scope of C or later, a C line where I is +lower than v5.11 will now issue a warning: + + Downgrading a use VERSION declaration to below v5.11 is deprecated + +For example: + + use v5.14; + say "The say statement is permitted"; + use v5.8; # This will print a warning + print "We must use print\n"; + +This is because the Perl team plans to change the behavior in this case. Since +Perl v5.12 (and parts of v5.11), strict is enabled I. In other words: + + no strict; + use v5.12; # will not enable strict, because "no strict" preceded it + $x = 1; # permitted, despite no "my" declaration + +In the future, this behavior will be eliminated and C will +I enable strict for versions v5.12 and later. + +Code which wishes to mix versions in this manner should use lexical scoping +with block syntax to ensure that the differently versioned regions remain +lexically isolated. + + { + use v5.14; + say "The say statement is permitted"; + } + + { + use v5.8; # No warning is emitted + print "We must use print\n"; + } + +Of course, this is probably not something you ever need to do! If the first +block compiles, it means you're using perl v5.14.0 or later. + +=head1 Performance Enhancements + +=over 4 + +=item * + +We now probe for compiler support for C11 thread local storage, and where +available use this for "implicit context" for XS extensions making API calls for +a threaded Perl build. This requires fewer function calls at the C level than +POSIX thread specific storage. We continue to use the the pthreads approach if +the C11 approach is not available. + +F run with the defaults will build an unthreaded Perl (which is +slightly faster), but most operating systems ship a threaded Perl. + +=item * + +Perl can now be configured to no longer allocate keys for large hashes +from the shared string table. + +The same internal datatype (C) is used for all of + +=over 4 + +=item * + +Symbol tables + +=item * + +Objects (by default) + +=item * + +Associative arrays + +=back + +The shared string table was originally added to improve performance for blessed +hashes used as objects, because every object instance has the same keys, so it +is an optimisation to share memory between them. It also makes sense for symbol +tables, where derived classes will have the same keys (typically method names), +and the OP trees built for method calls can also share memory. The shared +string table behaves roughly like a cache for hash keys. + +But for hashes actually used as associative arrays - mapping keys to values - +typically the keys are not re-used in other hashes. For example, "seen" hashes +are keyed by object IDs (or addresses), and logically these keys won't repeat +in other hashes. + +Storing these "used just once" keys in the shared string table increases CPU +and RAM use for no gain. For such keys the shared string table behaves as a +cache with a 0% hit rate. Storing all the keys there increases the total size +of the shared string table, as well as increasing the number of times it is +resized as it grows. B - in any environment that has "copy on write" +memory for child process (such as a pre-forking server), the memory pages used +for the shared string table rapidly need to be copied as the child process +manipulates hashes. Hence if most of the shared string table is such that keys +are used only in one place, there is no benefit from re-use within the perl +interpreter, but a high cost due to more pages for the OS to copy. + +The perl interpreter can now be Configured to disable shared hash keys +for "large" hashes (that are neither objects nor symbol tables). To do +so, add C<-Accflags='-DPERL_USE_UNSHARED_KEYS_IN_LARGE_HASHES'> to +your F options. "Large" is a heuristic -- currently the +heuristic is that sharing is disabled when adding a key to a hash +triggers allocation of more storage, and the hash has more than 42 keys. + +This B cause slightly increased memory usage for programs that create +(unblessed) data structures that contain multiple large hashes that share the +same keys. But generally our testing suggests that for the specific cases +described it is a win, and other code is unaffected. + +=item * + +In certain scenarios, creation of new scalars is now noticeably faster. + +For example, the following code is now executing ~30% faster: + + $str = "A" x 64; + for (0..1_000_000) { + @svs = split //, $str + } + +(You can read more about this one in L<[perl +#19414]|https://github.com/Perl/perl5/pull/19414>.) + +=back + +=head1 Modules and Pragmata + +=head2 Updated Modules and Pragmata + +=over 4 + +=item * + +L has been upgraded from version 2.38 to 2.40. + +=item * + +L has been upgraded from version 1.01 to 1.02. + +=item * + +L has been upgraded from version 0.33 to 0.34. + +=item * + +L has been upgraded from version 1.82 to 1.83. + +=item * + +L has been upgraded from version 1.004 to 1.006. + +=item * + +L has been upgraded from version 1.56 to 1.64. + +=item * + +L has been upgraded from version 0.51 to 0.65. + +=item * + +L has been upgraded from version 1.48 to 1.50. + +=item * + +L has been upgraded from version 2.101 to 2.103. + +=item * + +L has been upgraded from version 2.101 to 2.105. + +=item * + +L has been upgraded from version 2.28 to 2.33. + +=item * + +L has been upgraded from version 2.179 to 2.184. + +=item * + +L has been upgraded from version 1.855 to 1.857. + +=item * + +L has been upgraded from version 1.30 to 1.32. + +=item * + +L has been upgraded from version 3.62 to 3.68. + +=item * + +L has been upgraded from version 1.37 to 1.39. + +=item * + +L has been upgraded from version 1.19 to 1.20. + +=item * + +L has been upgraded from version 1.50 to 1.52. + +=item * + +L has been upgraded from version 3.08 to 3.17. + +=item * + +L has been upgraded from version 1.33 to 1.36. + +=item * + +L has been upgraded from version 0.024 to 0.028. + +=item * + +L has been upgraded from version 5.76 to 5.77. + +=item * + +L has been upgraded from version 7.62 to 7.64. + +=item * + +L has been upgraded from version 1.10 to 1.11. + +=item * + +L has been upgraded from version 3.43 to 3.45. + +=item * + +L has been upgraded from version 3.43 to 3.45. + +=item * + +L has been upgraded from version 1.14 to 1.15. + +=item * + +L has been upgraded from version 1.64 to 1.72. + +=item * + +L has been upgraded from version 1.1006 to 1.1007. + +=item * + +L has been upgraded from version 2.35 to 2.39. + +=item * + +L has been upgraded from version 1.00 to 1.04. + +=item * + +L has been upgraded from version 1.39 to 1.40. + +=item * + +L has been upgraded from version 1.33 to 1.37. + +=item * + +L has been upgraded from version 3.80 to 3.84. + +=item * + +L has been upgraded from version 1.09 to 1.12. + +=item * + +L has been upgraded from version 1.52 to 1.53. + +=item * + +L has been upgraded from version 1.19 to 1.23. + +=item * + +L has been upgraded from version 0.25 to 0.28. + +=item * + +L has been upgraded from version 1.21 to 1.26. + +=item * + +L has been upgraded from version 0.076 to 0.080. + +=item * + +L has been upgraded from version 0.19 to 0.21. + +=item * + +L has been upgraded from version 0.0609 to 0.0610. + +=item * + +L has been upgraded from version 1.46 to 1.50. + +=item * + +IO-Compress has been upgraded from version 2.102 to 2.106. + +=item * + +L has been upgraded from version 1.21 to 1.22. + +=item * + +L has been upgraded from version 4.06 to 4.07. + +=item * + +libnet has been upgraded from version 3.13 to 3.14. + +=item * + +L has been upgraded from version 1.29 to 1.31. + +=item * + +L has been upgraded from version 1.999818 to 1.999830. + +=item * + +L has been upgraded from version 0.5009 to 0.5012. + +=item * + +L has been upgraded from version 0.2614 to 0.2621. + +=item * + +L has been upgraded from version 5.20210520 to 5.20220520. + +=item * + +L has been upgraded from version 1.25_001 to 1.26. + +=item * + +L has been upgraded from version 0.68 to 0.69. + +=item * + +L has been upgraded from version 1.50 to 1.57. + +=item * + +L has been upgraded from version 1.12 to 1.13. + +=item * + +L has been upgraded from version 1.33 to 1.35. + +=item * + +L has been upgraded from version 5.20210411 to 5.20210520. + +=item * + +L has been upgraded from version 1.11 to 1.12. + +=item * + +L has been upgraded from version 1.13 to 1.14. + +=item * + +L has been upgraded from version 1.27 to 1.33. + +=item * + +L has been upgraded from version 3.42 to 3.43. + +=item * + +L has been upgraded from version 1.97 to 2.03. + +=item * + +L has been upgraded from version 0.41 to 0.43. + +=item * + +L has been upgraded from version 1.55 to 1.62. + +=item * + +L has been upgraded from version 1.09 to 1.10. + +=item * + +L has been upgraded from version 2.031 to 2.033. + +=item * + +L has been upgraded from version 2.04 to 2.05. + +=item * + +L has been upgraded from version 3.23 to 3.26. + +=item * + +L has been upgraded from version 1.23 to 1.24. + +=item * + +L has been upgraded from version 3.43 to 3.44. + +=item * + +L has been upgraded from version 1.302183 to 1.302190. + +=item * + +L has been upgraded from version 3.30 to 3.31. + +=item * + +L has been upgraded from version 2013.0523 to 2021.0814. + +=item * + +L has been upgraded from version 2013.0523 to 2021.0814. + +=item * + +L has been upgraded from version 2.26 to 2.27. + +=item * + +L has been upgraded from version 1.62 to 1.64. + +=item * + +L has been upgraded from version 4.2 to 4.3. + +=item * + +L has been upgraded from version 1.05 to 1.06. + +=item * + +L has been upgraded from version 1.05 to 1.06. + +=item * + +L has been upgraded from version 1.00 to 1.01. + +=item * + +L has been upgraded from version 1.9767 to 1.9770. + +=item * + +L has been upgraded from version 1.29 to 1.31. + +=item * + +L has been upgraded from version 1.28 to 1.31. + +=item * + +L has been upgraded from version 0.75 to 0.78. + +=item * + +L has been upgraded from version 1.13 to 1.14. + +=item * + +L has been upgraded from version 0.9928 to 0.9929. + +=item * + +L has been upgraded from version 1.12 to 1.13. + +=item * + +L has been upgraded from version 2.45 to 2.46. + +=item * + +L has been upgraded from version 1.51 to 1.58. + +=item * + +L has been upgraded from version 0.57 to 0.59. + +=item * + +L has been upgraded from version 1.16 to 1.22. + +=item * + +L has been upgraded from version 0.18 to 0.19. + +=item * + +L has been upgraded from version 0.30 to 0.31. + +=back + +=head1 Documentation + +=head2 New Documentation + +=head3 F + +This document provides the process for administering an election or vote +within the Perl Core Team. + +=head2 Changes to Existing Documentation + +We have attempted to update the documentation to reflect the changes +listed in this document. If you find any we have missed, open an issue +at L. + +Additionally, the following selected changes have been made: + +=head3 L + +=over 4 + +=item * + +This has been cleaned up some, and more than 80% of the (previously +many) undocumented functions have now either been documented or deemed +to have been inappropriately marked as API. -=head1 Modules and Pragmata +As always, Patches Welcome! -=head2 Updated Modules and Pragmata +=back + +=head3 L =over 4 =item * -L has been upgraded from version 2.174 to 2.174_01. +notes the new location for functions moved from L to +L that are no longer intended to be used outside of core. -A number of memory leaks have been fixed. +=back -=item * +=head3 L -L has been upgraded from version 1.47 to 1.47_01. +=over 4 =item * -L has been upgraded from version 5.20200620 to 5.20210123. +notes the C<:win32> IO pseudolayer is removed (this happened in 5.35.2). -=item * +=back -L has been upgraded from version 1.47 to 1.48. +=head3 L -A warning has been added about evaluating untrusted code with the perl -interpreter. +=over 4 =item * -L has been upgraded from version 2.41 to 2.41_01. +The election process has been finetuned to allow the vote to be skipped if there +are no more candidates than open seats. -A warning has been added about evaluating untrusted code with the perl -interpreter. +=item * + +A special election is now allowed to be postponed for up to twelve weeks, for +example until a normal election. =back -=head1 Documentation +=head3 L -=head2 New Documentation +=over 4 -=head3 L +=item * -Documentation of the newly formed rules of governance for Perl. +now notes that an invocant only needs to be an object or class name +for method calls, not for subroutine references. -=head3 L +=back -Documentation of how the Perl security team operates and how the team evaluates -new security reports. +=head3 L -=head2 Changes to Existing Documentation +=over 4 + +=item * -We have attempted to update the documentation to reflect the changes listed in -this document. If you find any we have missed, open an issue at -L. +Updated to discourage the use of the /d regexp modifier. -Additionally, the following selected changes have been made: +=back -=head3 L +=head3 L =over 4 =item * -Document range op behaviour change. +B<-?> is now a synonym for B<-h> + +=item * + +B<-g> is now a synonym for B<-0777> =back @@ -91,18 +898,138 @@ The following additions or changes have been made to diagnostic output, including warnings and fatal error messages. For the complete list of diagnostic messages, see L. +=head2 New Diagnostics + +=head3 New Errors + +=over 4 + +=item * + +L + +(F) An attempt was made to jump out of the scope of a defer block by using +a control-flow statement such as C, C or a loop control. This is +not permitted. + +=item * + +L (for scalar +assignment to C) + +Attempting to perform a scalar assignment to C, for example via +C, previously triggered a fatal runtime error with the +message "L." +It is more helpful to detect such attempted assignments prior to runtime, so +they are now compile time errors, resulting in the message "Can't modify undef +operator in scalar assignment". + +=item * + +L + +The parser failed an internal consistency check while trying to parse +a C loop. + +=back + +=head3 New Warnings + +=over 4 + +=item * + +L + +A call is being made to a function in the C namespace, which is +currently experimental. + +=item * + +L + +The C block modifier is experimental. If you want to use the feature, +disable the warning with C, but know that in +doing so you are taking the risk that your code may break in a future Perl +version. + +=item * + +L + +This warning is emitted on a C statement that +requests a version below v5.11 (when the effects of C would be +disabled), after a previous declaration of one having a larger number (which +would have enabled these effects) + +=item * + +L + +This warning is emitted if you use C to iterate multiple values at +a time. This syntax is currently experimental and its behaviour may +change in future releases of Perl. + +=item * + +L + +An expression that implicitly involves the C<@_> arguments array was found in +a subroutine that uses a signature. + +=item * + +L + +An expression involving the C<@_> arguments array was found in a subroutine that uses a signature. + +=item * + +L + +Attempts to put wide characters into the program name (C<$0>) now provoke this +warning. + +=back + =head2 Changes to Existing Diagnostics =over 4 =item * -L<\K not permitted in lookahead/lookbehind in regex; marked by <-- HERE in mE%sE|perldiag/"\K not permitted in lookahead/lookbehind in regex; marked by <-- HERE in m/%s/"> +L<'E' does not take a repeat count in %s|perldiag/"'/' does not take a repeat count in %s"> + +This warning used to not include the C. + +=item * + +L + +Localized subroutine redefinitions no longer trigger this warning. + +=item * + +Ltarg %d:%d"|perldiag/"panic: unexpected constant lvalue entersub entry via type/targ %d:%d"> now has a panic prefix + +This makes it consistent with other checks of internal consistency when +compiling a subroutine. + +=item * + +L is now in the new C category. + +When C is used in scalar context, it provokes a warning that doing this +is not useful. This warning used to be in the C category. A new category +for warnings about scalar context has now been added, called C. + +=item * -This error was incorrectly produced in some cases involving nested lookarounds. -This has been fixed. +Removed a number of diagnostics -[L] +Many diagnostics that have been removed from the perl core across many years +have now I been removed from the documentation. =back @@ -112,45 +1039,357 @@ This has been fixed. =item * -Newer 64-bit versions of the Intel C/C++ compiler are now recognized and have -the correct flags set. +The Perl C source code now uses some C99 features, which we have verified are +supported by all compilers we target. This means that Perl's headers now +contain some code that is legal in C99 but not C89. + +This may cause problems for some XS modules that unconditionally add +C<-Werror=declaration-after-statement> to their C compiler flags if compiling +with gcc or clang. Earlier versions of Perl support long obsolete compilers +that are strict in rejecting certain C99 features, particularly mixed +declarations and code, and hence it makes sense for XS module authors to audit +that their code does not violate this. However, doing this is now only +possible on these earlier versions of Perl, hence these modules need to be +changed to only add this flag for C<<$] < 5.035005>>. =item * -We now trap SIGBUS when F checks for C. +The makedepend step is now run in parallel by using make + +When using MAKEFLAGS=-j8, this significantly reduces the time required for: + + sh ./makedepend MAKE=make cflags -On several systems the attempt to determine if we need C or similar -results in a SIGBUS instead of the expected SIGSEGV, which previously caused a -core dump. +=item * -[L] +F now tests whether C<< #include >> is required +to use the POSIX 1003 thread-safe locale functions or some related +extensions. This prevents problems where a non-public F is +removed in a library update, or F isn't intended for public +use. (github L<#18936|https://github.com/Perl/perl5/pull/18936>) =back =head1 Testing -Tests were added and changed to reflect the other additions and changes in this -release. +Tests were added and changed to reflect the other additions and changes +in this release. =head1 Platform Support +=head2 Windows + +=over 4 + +=item * + +Support for old MSVC++ (pre-VC12) has been removed + +These did not support C99 and hence can no longer be used to compile perl. + +=item * + +Support for compiling perl on Windows using Microsoft Visual Studio 2022 +(containing Visual C++ 14.3) has been added. + +=item * + +The :win32 IO layer has been removed. This experimental replacement for the +:unix layer never reached maturity in its nearly two decades of existence. + +=back + +=head2 VMS + +=over 4 + +=item C on VMS returns consistent results + +On VMS entries in the C<%ENV> hash are loaded from the OS environment on +first access, hence the first iteration of C<%ENV> requires the entire +environment to be scanned to find all possible keys. This initialisation had +always been done correctly for full iteration, but previously was not +happening for C<%ENV> in scalar context, meaning that C would +return 0 if called before any other C<%ENV> access, or would only return the +count of keys accessed if there had been no iteration. + +These bugs are now fixed - C<%ENV> and C in scalar context now +return the correct result - the count of all keys in the environment. + +=back + +=head2 Discontinued Platforms + +=over 4 + +=item AT&T UWIN + +UWIN is a UNIX compatibility layer for Windows. It was last released +in 2012 and has been superseded by Cygwin these days. + +=item DOS/DJGPP + +DJGPP is a port of the GNU toolchain to 32-bit x86 systems running +DOS. The last known attempt to build Perl on it was on 5.20, which +only got as far as building miniperl. + +=item NetWare + +Support code for Novell NetWare has been removed. NetWare was a +server operating system by Novell. The port was last updated in July +2002, and the platform itself in May 2009. + +Unrelated changes accidentally broke the build for the NetWare port in +September 2009, and in 12 years no-one has reported this. + +=back + =head2 Platform-Specific Notes =over 4 -=item MacOS (Darwin) +=item z/OS + +This update enables us to build EBCDIC static/dynamic and 31-bit/64-bit +addressing mode Perl. The number of tests that pass is consistent with the +baseline before these updates. + +These changes also provide the base support to be able to provide ASCII +static/dynamic and 31-bit/64-bit addressing mode Perl. + +The z/OS (previously called OS/390) README was updated to describe ASCII and +EBCDIC builds. + +=back + +=head1 Internal Changes + +=over 4 + +=item * + +Since the removal of PERL_OBJECT in Perl 5.8, PERL_IMPLICIT_CONTEXT and +MULTIPLICITY have been synonymous and they were being used interchangeably. +To simplify the code, all instances of PERL_IMPLICIT_CONTEXT have been +replaced with MULTIPLICITY. + +PERL_IMPLICIT_CONTEXT will remain defined for compatibility with XS modules. + +=item * + +The API constant formerly named C, indicating list context, has now +been renamed to a more accurate C. A compatibilty macro C has +been added to allow existing code to work unaffected. New code should be +written using the new constant instead. This is supported by C +version 3.63. + +=item * + +Macros have been added to F to facilitate version comparisons: +C, C, C and +C. + +Inline functions have been added to F to determine the position of +the least significant 1 bit in a word: C and C. + +=item * + +C has been deleted. This has been marked as deprecated +since v5.14.0 (released in 2011), and is not used by any code on CPAN. + +=item * + +Added new boolean macros and functions. See L for +related information and L for documentation. + +=over 4 + +=item * + +sv_setbool + +=item * + +sv_setbool_mg + +=item * + +SvIsBOOL + +=back + +=item * + +Added 4 missing functions for dealing with RVs: + +=over 4 + +=item * + +sv_setrv_noinc + +=item * + +sv_setrv_noinc_mg + +=item * + +sv_setrv_inc + +=item * + +sv_setrv_inc_mg + +=back + +=item * + +C's two failure modes now provide distinct messages. + +=item * + +Memory for hash iterator state (C) is now allocated as part +of the hash body, instead of as part of the block of memory allocated for the +main hash array. + +=item * + +A new phase_name() interface provides access to the name for each interpreter +phase (i.e., PL_phase value). + +=item * + +The C behavior of C has changed for EBCDIC. + +=item * + +New equality-test functions C and C have been added, along +with C<..._flags>-suffixed variants. These expose a simple and consistent API +to perform numerical or string comparison which is aware of operator +overloading. + +=item * + +Reading the string form of an integer value no longer sets the flag C. +The string form is still cached internally, and still re-read directly by the +macros C I (inline, without calling a C function). XS code that +already calls the APIs to get values will not be affected by this change. XS +code that accesses flags directly instead of using API calls to express its +intent I break, but such code likely is already buggy if passed some +other values, such as floating point values or objects with string overloading. + +This small change permits code (such as JSON serializers) to reliably determine +between + +=over 4 + +=item * + +a value that was initially B as an integer, but then B as a string + + my $answer = 42; + print "The answer is $answer\n"; + +=item * + +that same value that was initially B as a string, but then B as an integer -The hints file for darwin has been updated to handle future macOS versions -beyond 10. Perl can now be built on macOS Big Sur. + my $answer = "42"; + print "That doesn't look right\n" + unless $answer == 6 * 9; -[L, -L] +=back -=item Minix +For the first case (originally written as an integer), we now have: + + use Devel::Peek; + my $answer = 42; + Dump ($answer); + my $void = "$answer"; + print STDERR "\n"; + Dump($answer) + + + SV = IV(0x562538925778) at 0x562538925788 + REFCNT = 1 + FLAGS = (IOK,pIOK) + IV = 42 + + SV = PVIV(0x5625389263c0) at 0x562538925788 + REFCNT = 1 + FLAGS = (IOK,pIOK,pPOK) + IV = 42 + PV = 0x562538919b50 "42"\0 + CUR = 2 + LEN = 10 + +For the second (originally written as a string), we now have: + + use Devel::Peek; + my $answer = "42"; + Dump ($answer); + my $void = $answer == 6 * 9; + print STDERR "\n"; + Dump($answer)' + + + SV = PV(0x5586ffe9bfb0) at 0x5586ffec0788 + REFCNT = 1 + FLAGS = (POK,IsCOW,pPOK) + PV = 0x5586ffee7fd0 "42"\0 + CUR = 2 + LEN = 10 + COW_REFCNT = 1 + + SV = PVIV(0x5586ffec13c0) at 0x5586ffec0788 + REFCNT = 1 + FLAGS = (IOK,POK,IsCOW,pIOK,pPOK) + IV = 42 + PV = 0x5586ffee7fd0 "42"\0 + CUR = 2 + LEN = 10 + COW_REFCNT = 1 + +(One can't rely on the presence or absence of the flag C to +determine the history of operations on a scalar.) + +Previously both cases would be indistinguishable, with all 4 flags set: + + SV = PVIV(0x55d4d62edaf0) at 0x55d4d62f0930 + REFCNT = 1 + FLAGS = (IOK,POK,pIOK,pPOK) + IV = 42 + PV = 0x55d4d62e1740 "42"\0 + CUR = 2 + LEN = 10 + +(and possibly C, but not always) + +This now means that if XS code I needs to determine which form a value +was first written as, it should implement logic roughly + + if (flags & SVf_IOK|SVf_NOK) && !(flags & SVf_POK) + serialize as number + else if (flags & SVf_POK) + serialize as string + else + the existing guesswork ... + +Note that this doesn't cover "dualvars" - scalars that report different +values when asked for their string form or number form (such as C<$!>). +Most serialization formats cannot represent such duplicity. + +I remains because as well as dualvars, values might +be C, references, overloaded references, typeglobs and other things that +Perl itself can represent but do not map one-to-one into external formats, so +need some amount of approximation or encapsulation. -Build errors on Minix have been fixed. +=item * -[L] +C (and L’s C function) now escapes high-bit +octets in the PV as hex rather than octal. Since most folks understand hex +more readily than octal, this should make these dumps a bit more legible. +This does B affect any other diagnostic interfaces like C. =back @@ -160,78 +1399,159 @@ Build errors on Minix have been fixed. =item * -Some list assignments involving C on the left-hand side were -over-optimized and produced incorrect results. +utime() now correctly sets errno/C<$!> when called on a closed handle. -[L, -L] +=item * + +The flags on the OPTVAL parameter to setsockopt() were previously +checked before magic was called, possibly treating a numeric value as +a packed buffer or vice versa. It also ignored the UTF-8 flag, +potentially treating the internal representation of an upgraded SV as +the bytes to supply to the setsockopt() system call. (github L<#18660|https://github.com/Perl/perl5/issues/18660>) + +=item * + +Only set IOKp, not IOK on $) and $(. +This was issue L<#18955|https://github.com/Perl/perl5/issues/18955>: This will prevent serializers from serializing these +variables as numbers (which loses the additional groups). +This restores behaviour from 5.16 =item * -Fixed a bug in which some regexps with recursive subpatterns matched -incorrectly. +Use of the C debugging facility would cause perl to croak since +v5.31.10; this problem has now been fixed. + +=item * -[L] +C logic is now compatible with BSD make (fixes +L). =item * -Fixed a deadlock that hung the build when Perl is compiled for debugging memory -problems and has PERL_MEM_LOG enabled. +Calling C on a tied hash that is partway through iteration now frees the +iteration state immediately. + +Iterating a tied hash causes perl to store a copy of the current hash key to +track the iteration state, with this stored copy passed as the second parameter +to C. This internal state is freed immediately when tie hash iteration +completes, or if the hash is destroyed, but due to an implementation oversight, +it was not freed if the hash was untied. In that case, the internal copy of the +key would persist until the earliest of + +=over 4 + +=item 1 + +C was called again on the same hash + +=item 2 + +The (now untied) hash was iterated (ie passed to any of C, C or +C) + +=item 3 + +The hash was destroyed. -[L] +=back + +This inconsistency is now fixed - the internal state is now freed immediately by +C. + +As the precise timing of this behaviour can be observed with pure Perl code +(the timing of C on objects returned from C and C) +it's just possible that some code is sensitive to it. =item * -Fixed a crash in the use of chained comparison operators when run under "no -warnings 'uninitialized'". +The C function added for bootstrapping miniperl +in perl 5.30.0 is now only available in miniperl. [github #19122] + +=item * -[L, -L] +Setting a breakpoint on a BEGIN or equivalently a C statement +could cause a memory write to a freed C op. +[L] =item * -Exceptions thrown from destructors during global destruction are no longer -swallowed. +When bareword filehandles are disabled, the parser was interpreting +any bareword as a filehandle, even when immediatey followed by parens. + +=back + +=head1 Errata From Previous Releases -[L] +=over 4 + +=item * + +L mistakenly identified a CVE whose correct identification is +CVE-2015-1592. =back -=head1 Acknowledgements +=head1 Obituaries -Perl 5.32.1 represents approximately 7 months of development since Perl 5.32.0 -and contains approximately 7,000 lines of changes across 80 files from 23 -authors. +Raun "Spider" Boardman (SPIDB on CPAN), author of at least 66 commits to the +Perl 5 core distribution between 1996 and 2002, passed away May 24, 2021 from +complications of COVID. He will be missed. -Excluding auto-generated files, documentation and release tools, there were -approximately 1,300 lines of changes to 23 .pm, .t, .c and .h files. +David H. Adler (DHA) passed away on November 16, 2021. In 1997, David +co-founded NY.pm, the first Perl user group, and in 1998 co-founded Perl +Mongers to help establish other user groups across the globe. He was a +frequent attendee at Perl conferences in both North America and Europe and well +known for his role in organizing I celebrations at those +conferences. He also contributed to the work of the Perl Foundation, including +administering the White Camel awards for community service. He will be missed. -Perl continues to flourish into its fourth decade thanks to a vibrant community -of users and developers. The following people are known to have contributed -the improvements that became Perl 5.32.1: +=head1 Acknowledgements -Adam Hartley, Andy Dougherty, Dagfinn Ilmari MannsÃ¥ker, Dan Book, David -Mitchell, Graham Knop, Graham Ollis, Hauke D, H.Merijn Brand, Hugo van der -Sanden, John Lightsey, Karen Etheridge, Karl Williamson, Leon Timmermans, Max -Maischein, Nicolas R., Ricardo Signes, Richard Leach, Sawyer X, Sevan Janiyan, -Steve Hay, Tom Hukins, Tony Cook. +Perl 5.36.0 represents approximately a year of development since Perl +5.34.0 and contains approximately 250,000 lines of changes across 2,000 +files from 82 authors. -The list above is almost certainly incomplete as it is automatically generated -from version control history. In particular, it does not include the names of -the (very much appreciated) contributors who reported issues to the Perl bug -tracker. +Excluding auto-generated files, documentation and release tools, there were +approximately 190,000 lines of changes to 1,300 .pm, .t, .c and .h files. + +Perl continues to flourish into its fourth decade thanks to a vibrant +community of users and developers. The following people are known to have +contributed the improvements that became Perl 5.36.0: + +Alyssa Ross, Andrew Fresh, Aristotle Pagaltzis, Asher Mancinelli, Atsushi +Sugawara, Ben Cornett, Bernd, Biswapriyo Nath, Brad Barden, Bram, Branislav +Zahradník, brian d foy, Chad Granum, Chris 'BinGOs' Williams, Christian +Walde (Mithaldu), Christopher Yeleighton, Craig A. Berry, cuishuang, Curtis +Poe, Dagfinn Ilmari MannsÃ¥ker, Dan Book, Daniel Laügt, Dan Jacobson, Dan +Kogai, Dave Cross, Dave Lambley, David Cantrell, David Golden, David +Marshall, David Mitchell, E. Choroba, Eugen Konkov, Felipe Gasper, François +Perrad, Graham Knop, H.Merijn Brand, Hugo van der Sanden, Ilya Sashcheka, +Ivan Panchenko, Jakub Wilk, James E Keenan, James Raspass, Karen Etheridge, +Karl Williamson, Leam Hall, Leon Timmermans, Magnus Woldrich, Matthew +Horsfall, Max Maischein, Michael G Schwern, Michiel Beijen, Mike Fulton, +Neil Bowers, Nicholas Clark, Nicolas R, Niyas Sait, Olaf Alders, Paul Evans, +Paul Marquess, Petar-Kaleychev, Pete Houston, Renee Baecker, Ricardo Signes, +Richard Leach, Robert Rothenberg, Sawyer X, Scott Baker, Sergey Poznyakoff, +Sergey Zhmylove, Sisyphus, Slaven Rezic, Steve Hay, Sven Kirmess, TAKAI +Kousuke, Thibault Duponchelle, Todd Rinaldo, Tomasz Konojacki, Tomoyuki +Sadahiro, Tony Cook, Unicode Consortium, Yves Orton, Михаил +Козачков. + +The list above is almost certainly incomplete as it is automatically +generated from version control history. In particular, it does not include +the names of the (very much appreciated) contributors who reported issues to +the Perl bug tracker. Many of the changes included in this version originated in the CPAN modules -included in Perl's core. We're grateful to the entire CPAN community for +included in Perl's core. We're grateful to the entire CPAN community for helping Perl to flourish. -For a more complete list of all of Perl's historical contributors, please see -the F file in the Perl source distribution. +For a more complete list of all of Perl's historical contributors, please =head1 Reporting Bugs -If you find what you think is a bug, you might check the perl bug database at -L. There may also be information at +If you find what you think is a bug, you might check the perl bug database +at L. There may also be information at L, the Perl Home Page. If you believe you have an unreported bug, please open an issue at @@ -240,13 +1560,13 @@ tiny but sufficient test case. If the bug you are reporting has security implications which make it inappropriate to send to a public issue tracker, then see -L for details of how to -report the issue. +L +for details of how to report the issue. =head1 Give Thanks -If you wish to thank the Perl 5 Porters for the work we had done in Perl 5, you -can do so by running the C program: +If you wish to thank the Perl 5 Porters for the work we had done in Perl 5, +you can do so by running the C program: perlthanks diff --git a/gnu/usr.bin/perl/pod/perldiag.pod b/gnu/usr.bin/perl/pod/perldiag.pod index 41914a2072c..66957600115 100644 --- a/gnu/usr.bin/perl/pod/perldiag.pod +++ b/gnu/usr.bin/perl/pod/perldiag.pod @@ -63,10 +63,6 @@ removed in a future Perl version: use feature "refaliasing"; \$x = \$y; -=item Allocation too large: %x - -(X) You can't allocate more than 64K on an MS-DOS machine. - =item '%c' allowed only after types %s in %s (F) The modifiers '!', '<' and '>' are allowed in pack() or unpack() only @@ -459,10 +455,6 @@ This message can be seen quite often with DB_File on systems with "hard" dynamic linking, like C and C. It is a bug of C which is left unnoticed if C uses I system malloc(). -=item Bad hash - -(P) One of the internal hash routines was passed a null HV pointer. - =item Badly placed ()'s (A) You've accidentally run your script through B instead @@ -563,6 +555,15 @@ symbol. Perhaps you need to predeclare a subroutine? compiler saw no other uses of that namespace before that point. Perhaps you need to predeclare a package? +=item Bareword filehandle "%s" not allowed under 'no feature "bareword_filehandles"' + +(F) You attempted to use a bareword filehandle with the +C feature disabled. + +Only the built-in handles C, C, C, C, +C and C can be used with the C +feature disabled. + =item BEGIN failed--compilation aborted (F) An untrapped exception was raised while executing a BEGIN @@ -637,6 +638,20 @@ the warning gets raised. iterate over %ENV, it encountered a logical name or symbol definition which was too long, so it was truncated to the string shown. +=item Built-in function '%s' is experimental + +(S experimental::builtin) A call is being made to a function in the +C namespace, which is currently experimental. The existence +or nature of the function may be subject to change in a future version +of Perl. + +=item builtin::import can only be called at compile time + +(F) The C method of the C package was invoked when no code +is currently being compiled. Since this method is used to introduce new +lexical subroutines into the scope currently being compiled, this is not +going to have any effect. + =item Callback called exit (F) A subroutine invoked from an external package via call_sv() @@ -748,6 +763,17 @@ of C scalars containing the arguments. integer format can only be used with positive integers, and you attempted to compress something else. See L. +=item Can't "%s" out of a "defer" block + +(F) An attempt was made to jump out of the scope of a C block by using +a control-flow statement such as C, C or a loop control. This is +not permitted. + +=item Can't "%s" out of a "finally" block + +(F) Similar to above, but involving a C block at the end of a +C/C construction rather than a C block. + =item Can't bless non-reference value (F) Only hard references may be blessed. This is how Perl "enforces" @@ -805,11 +831,6 @@ not attached to the symbol table. (F) You called C, but F is not a directory that you can chdir to, possibly because it doesn't exist. -=item Can't check filesystem of script "%s" for nosuid - -(P) For some reason you can't check the filesystem of the script for -nosuid. - =item Can't coerce %s to %s in %s (F) Certain types of SVs, in particular real symbol table entries @@ -1040,6 +1061,11 @@ error occurs in cases such as these: goto G; $x + do { G: $y }; # How is + supposed to get its first operand? +=item Can't "goto" into a "defer" block + +(F) A C statement was executed to jump into the scope of a C +block. This is not permitted. + =item Can't "goto" into a "given" block (F) A "goto" statement was executed to jump into the middle of a C @@ -1194,11 +1220,6 @@ functions defined in the C or XS code in the stated file. (F) You aren't allowed to assign to the item indicated, or otherwise try to change it, such as with an auto-increment. -=item Can't modify nonexistent substring - -(P) The internal routine that does assignment to a substr() was handed -a NULL. - =item Can't modify non-lvalue subroutine call of &%s =item Can't modify non-lvalue subroutine call of &%s in %s @@ -1384,11 +1405,6 @@ think you meant to return only one value. You probably meant to write parentheses around the call to the subroutine, which tell Perl that the call should be in list context. -=item Can't stat script "%s" - -(P) For some reason you can't fstat() the script even though you have it -open already. Bizarre. - =item Can't take log of %g (F) For ordinary real numbers, you can't take the logarithm of a @@ -1675,15 +1691,6 @@ defined in the C<:alias> import argument to C, but they could be defined by a translator installed into C<$^H{charnames}>. See L. -=item charnames alias definitions may not contain trailing white-space; -marked by S<<-- HERE> in %s - -(F) You defined a character name which ended in a space -character. Remove the trailing space(s). Usually these names are -defined in the C<:alias> import argument to C, but they -could be defined by a translator installed into C<$^H{charnames}>. -See L. - =item chdir() on unopened filehandle %s (W unopened) You tried chdir() on a filehandle that was never opened. @@ -2000,12 +2007,12 @@ such as: or a hash or array slice, such as: @foo[$bar, $baz, $xyzzy] - @{$ref->[12]}{"susie", "queue"} + $ref->[12]->@{"susie", "queue"} or a hash key/value or array index/value slice, such as: %foo[$bar, $baz, $xyzzy] - %{$ref->[12]}{"susie", "queue"} + $ref->[12]->%{"susie", "queue"} =item Delimiter for here document is too long @@ -2013,30 +2020,6 @@ or a hash key/value or array index/value slice, such as: long for Perl to handle. You have to be seriously twisted to write code that triggers this error. -=item Deprecated use of my() in false conditional. This will be a fatal error in Perl 5.30 - -(D deprecated) You used a declaration similar to C. There -has been a long-standing bug in Perl that causes a lexical variable -not to be cleared at scope exit when its declaration includes a false -conditional. Some people have exploited this bug to achieve a kind of -static variable. Since we intend to fix this bug, we don't want people -relying on this behavior. You can achieve a similar static effect by -declaring the variable in a separate block outside the function, eg - - sub f { my $x if 0; return $x++ } - -becomes - - { my $x; sub f { return $x++ } } - -Beginning with perl 5.10.0, you can also use C variables to have -lexicals that are initialized only once (see L): - - sub f { state $x; return $x++ } - -This use of C in a false conditional has been deprecated since -Perl 5.10, and it will become a fatal error in Perl 5.30. - =item DESTROY created new reference to dead object '%s' (F) A DESTROY() method created a new reference to the object which is @@ -2085,7 +2068,7 @@ See L. (F) You said something like "use Module 42" but the Module did not define a C<$VERSION>. -=item '/' does not take a repeat count +=item '/' does not take a repeat count in %s (F) You cannot put a repeat count of any kind right after the '/' code. See L. @@ -2107,9 +2090,14 @@ somehow called on another platform. This should not happen. (P) The internal handling of magical variables has been cursed. -=item do_study: out of memory +=item Downgrading a use VERSION declaration to below v5.11 is deprecated -(P) This should have been caught by safemalloc() instead. +(S deprecated) This warning is emitted on a C statement that +requests a version below v5.11 (when the effects of C would be +disabled), after a previous declaration of one having a larger number (which +would have enabled these effects). Because of a change to the way that +C interacts with the strictness flags, this is no longer +supported. =item (Do you need to predeclare %s?) @@ -2144,6 +2132,12 @@ already been freed. (W unpack) You have applied the same modifier more than once after a type in a pack template. See L. +=item each on anonymous %s will always start from the beginning + +(W syntax) You called L on an anonymous hash or +array. Since a new hash or array is created each time, each() will +restart iterating over your hash or array every time. + =item elseif should be elsif (S syntax) There is no keyword "elseif" in Perl because Larry thinks @@ -2195,6 +2189,20 @@ single form when it must operate on them directly. Either you've passed an invalid file specification to Perl, or you've found a case the conversion routines don't handle. Drat. +=item Error %s in expansion of %s + +(F) An error was encountered in handling a user-defined property +(L). These are +programmer written subroutines, hence subject to errors that may +prevent them from compiling or running. The calls to these subs are +C'd, and if there is a failure, this message is raised, using the +contents of C<$@> from the failed C. + +Another possibility is that tainted data was encountered somewhere in +the chain of expanding the property. If so, the message wording will +indicate that this is the problem. See L. + =item Eval-group in insecure regular expression (F) Perl detected tainted data when trying to compile a regular @@ -2235,8 +2243,8 @@ variable and glob that. =item exec? I'm not *that* kind of operating system -(F) The C function is not implemented on some systems, e.g., Symbian -OS. See L. +(F) The C function is not implemented on some systems, e.g. +Catamount. See L. =item %sExecution of %s aborted due to compilation errors. @@ -2324,7 +2332,6 @@ has been removed. The C feature may meet your needs better. (F) To use subroutine signatures, you must first enable them: - no warnings "experimental::signatures"; use feature "signatures"; sub foo ($left, $right) { ... } @@ -2384,20 +2391,6 @@ which can't encode values above 63. So there is no point in asking for a line length bigger than that. Perl will behave as if you specified C as the format. -=item File::Glob::glob() will disappear in perl 5.30. Use File::Glob::bsd_glob() instead. - -(D deprecated) C<< File::Glob >> has a function called C<< glob >>, which -just calls C<< bsd_glob >>. However, its prototype is different from the -prototype of C<< CORE::glob >>, and hence, C<< File::Glob::glob >> should -not be used. - -C<< File::Glob::glob() >> was deprecated in perl 5.8.0. A deprecation -message was issued from perl 5.26.0 onwards, and the function will -disappear in perl 5.30.0. - -Code using C<< File::Glob::glob() >> should call -C<< File::Glob::bsd_glob() >> instead. - =item Filehandle %s opened only for input (W io) You tried to write on a read-only filehandle. If you intended @@ -2432,6 +2425,13 @@ a literal dollar sign, or was meant to introduce a variable name that happens to be missing. So you have to put either the backslash or the name. +=item defer is experimental + +(S experimental::defer) The C block modifier is experimental. If you +want to use the feature, disable the warning with +C, but know that in doing so you are taking +the risk that your code may break in a future Perl version. + =item flock() on closed filehandle %s (W closed) The filehandle you're attempting to flock() got itself closed @@ -2439,6 +2439,12 @@ some time before now. Check your control flow. flock() operates on filehandles. Are you attempting to call flock() on a dirhandle by the same name? +=item for my (...) is experimental + +(S experimental::for_list) This warning is emitted if you use C to +iterate multiple values at a time. This syntax is currently experimental +and its behaviour may change in future releases of Perl. + =item Format not terminated (F) A format must be terminated by a line with a solitary dot. Perl got @@ -2795,6 +2801,15 @@ would otherwise result in the same message being repeated. Failure of user callbacks dispatched using the C flag could also result in this warning. See L. +=item Implicit use of @_ in %s with signatured subroutine is experimental + +(S experimental::args_array_with_signatures) An expression that implicitly +involves the C<@_> arguments array was found in a subroutine that uses a +signature. This is experimental because the interaction between the +arguments array and parameter handling via signatures is not guaranteed +to remain stable in any future version of Perl, and such code should be +avoided. + =item Incomplete expression within '(?[ ])' in regex; marked by S<<-- HERE> in m/%s/ @@ -2836,6 +2851,16 @@ not match 8 spaces. text. You should check the pattern to ensure that recursive patterns either consume text or fail. +=item Infinite recursion in user-defined property + +(F) A user-defined property (L) can depend on the definitions of other user-defined +properties. If the chain of dependencies leads back to this property, +infinite recursion would occur, were it not for the check that raised +this error. + +Restructure your property definitions to avoid this. + =item Infinite recursion via empty pattern (F) You tried to use the empty pattern inside of a regex code block, @@ -3266,11 +3291,10 @@ an anonymous subroutine, or a reference to a subroutine. (W overload) You tried to overload a constant type the overload package is unaware of. -=item isa is experimental +=item '%s' is not recognised as a builtin function -(S experimental::isa) This warning is emitted if you use the (C) -operator. This operator is currently experimental and its behaviour may -change in future releases of Perl. +(F) An attempt was made to C the L pragma module to create +a lexical alias for an unknown function name. =item -i used with no filenames on the command line, reading from STDIN @@ -3377,7 +3401,7 @@ does when displayed. \n line feed \cK vertical tab -=item %s: loadable library and perl binaries are mismatched (got handshake key %p, needed %p) +=item %s: loadable library and perl binaries are mismatched (got %s handshake key %p, needed %p) (P) A dynamic loading library C<.so> or C<.dll> was being loaded into the process that was built against a different build of perl than the @@ -3412,7 +3436,7 @@ The other common cause is for the characters $ + < = > ^ ` | ~ -These are probematic. The C standard says that these should be +These are problematic. The C standard says that these should be considered punctuation in the C locale (and the POSIX standard defers to the C standard), and Unicode is generally considered a superset of the C locale. But Unicode has added an extra category, "Symbol", and @@ -3479,9 +3503,12 @@ handle. This restriction may be eased in a future release. =item Lost precision when %s %f by 1 -(W imprecision) The value you attempted to increment or decrement by one -is too large for the underlying floating point representation to store -accurately, hence the target of C<++> or C<--> is unchanged. Perl issues this +(W imprecision) You attempted to increment or decrement a value by one, +but the result is too large for the underlying floating point +representation to store accurately. Hence, the target of C<++> or C<--> +is increased or decreased by quite different value than one, such as +zero (I the target is unchanged) or two, due to rounding. +Perl issues this warning because it has already switched from integers to floating point when values are too large for integers, and now even floating point is insufficient. You may wish to switch to using L explicitly. @@ -3834,6 +3861,9 @@ is aliased to a constant in the look I: $n *= 2; # modifies the $x, but fails on attempt to } # modify the 2 +L will also produce this message as a warning if you +attempt to open a read-only scalar for writing. + =item Modification of non-creatable array value attempted, %s (F) You tried to make an array value spring into existence, and the @@ -3889,6 +3919,17 @@ mutable before freeing the ops. (F) You don't have System V message IPC on your system. +=item Multidimensional hash lookup is disabled + +(F) You supplied a list of subscripts to a hash lookup under +C<< no feature "multidimensional"; >>, eg: + + $z = $foo{$x, $y}; + +which by default acts like: + + $z = $foo{join($;, $x, $y)}; + =item Multidimensional syntax %s not supported (W syntax) Multidimensional arrays aren't written like C<$foo[1,2,3]>. @@ -4369,14 +4410,6 @@ pointer. specification. It was found to be empty, which probably means you supplied it an uninitialized value. See L. -=item Null realloc - -(P) An attempt was made to realloc NULL. - -=item NULL regexp argument - -(P) The internal pattern matching routines blew it big time. - =item NULL regexp parameter (P) The internal pattern matching routines are out of their gourd. @@ -4669,16 +4702,6 @@ there are in the savestack. (P) Failed an internal consistency check while trying to reset a weak reference. -=item panic: do_subst - -(P) The internal pp_subst() routine was called with invalid operational -data. - -=item panic: do_trans_%s - -(P) The internal do_trans routines were called with invalid operational -data. - =item panic: fold_constants JMPENV_PUSH returned %d (P) While attempting folding constants an exception other than an C @@ -4712,16 +4735,6 @@ the glob and a destructor that adds a new object to the glob. (F) A forked child returned an incomprehensible message about its errno. -=item panic: last, type=%u - -(P) We popped the context stack to a block context, and then discovered -it wasn't a block context. - -=item panic: leave_scope clearsv - -(P) A writable lexical variable became read-only somehow within the -scope. - =item panic: leave_scope inconsistency %u (P) The savestack probably got out of sync. At least, there was an @@ -4741,6 +4754,11 @@ references to an object. (P) Something tried to allocate either more memory than possible or a negative amount. +=item panic: newFORLOOP, %s + +(P) The parser failed an internal consistency check while trying to parse +a C loop. + =item panic: pad_alloc, %p!=%p (P) The compiler got confused about which scratch pad it was allocating @@ -4814,12 +4832,6 @@ then discovered it wasn't a subroutine or eval context. blocks, perl couldn't locate the code block that should have already been seen and compiled by perl before control passed to the regex compiler. -=item panic: strxfrm() gets absurd - a => %u, ab => %u - -(P) The interpreter's sanity check of the C function strxfrm() failed. -In your current locale the returned transformation of the string "ab" -is shorter than that of the string "a", which makes no sense. - =item panic: sv_chop %s (P) The sv_chop() routine was passed a position that is not within the @@ -4834,6 +4846,11 @@ was string. (P) The compiler attempted to do a goto, or something weird like that. +=item panic: unexpected constant lvalue entersub entry via type/targ %d:%d + +(P) When compiling a subroutine call in lvalue context, Perl failed an +internal consistency check. It encountered a malformed op tree. + =item panic: unimplemented op %s (#%d) called (P) The compiler is screwed up and attempted to use an op that isn't @@ -4901,14 +4918,6 @@ and there is a bug in Perl in which the built-in regular expression folding rules are not accurate. This may lead to incorrect results. Please report this as a bug to L. -=item PerlIO layer ':win32' is experimental - -(S experimental::win32_perlio) The C<:win32> PerlIO layer is -experimental. If you want to take the risk of using this layer, -simply disable this warning: - - no warnings "experimental::win32_perlio"; - =item Perl_my_%s() not available (F) Your platform has very uncommon byte-order and integer size, @@ -5305,6 +5314,11 @@ a dirhandle. Check your control flow. (W closed) The filehandle you're reading from got itself closed sometime before now. Check your control flow. +=item readline() on unopened filehandle %s + +(W unopened) The filehandle you're reading from was never opened. Check your +control flow. + =item read() on closed filehandle %s (W closed) You tried to read from a closed filehandle. @@ -5313,10 +5327,6 @@ before now. Check your control flow. (W unopened) You tried to read from a filehandle that was never opened. -=item Reallocation too large: %x - -(F) You can't allocate more than 64K on an MS-DOS machine. - =item realloc() of freed memory ignored (S malloc) An internal routine called realloc() on something that had @@ -5637,6 +5647,14 @@ in m/%s/ closing quote or angle bracket. The S<<-- HERE> shows whereabouts in the regular expression the problem was discovered. +=item Sequence (%s... not terminated in regex; marked by S<<-- HERE> +in m/%s/ + +(F) A lookahead assertion C<(?=...)> or C<(?!...)> or lookbehind +assertion C<< (?<=...) >> or C<< (?> was missing the final +closing parenthesis. The S<<-- HERE> shows whereabouts in the +regular expression the problem was discovered. + =item Sequence (?(%c... not terminated in regex; marked by S<<-- HERE> in m/%s/ @@ -6166,30 +6184,6 @@ according to the probings of Configure. (S experimental::private_use) This feature is actually a hook for future use. -=item The regex_sets feature is experimental - -(S experimental::regex_sets) This warning is emitted if you -use the syntax S> in a regular expression. -The details of this feature are subject to change. -If you want to use it, but know that in doing so you -are taking the risk of using an experimental feature which may -change in a future Perl version, you can do this to silence the -warning: - - no warnings "experimental::regex_sets"; - -=item The signatures feature is experimental - -(S experimental::signatures) This warning is emitted if you unwrap a -subroutine's arguments using a signature. Simply suppress the warning -if you want to use the feature, but know that in doing so you are taking -the risk of using an experimental feature which may change or be removed -in a future Perl version: - - no warnings "experimental::signatures"; - use feature "signatures"; - sub foo ($left, $right) { ... } - =item The stat preceding %s wasn't an lstat (F) It makes no sense to test the current stat buffer for symbolic @@ -6251,6 +6245,20 @@ lexicals that are initialized only once (see L): This use of C in a false conditional was deprecated beginning in Perl 5.10 and became a fatal error in Perl 5.30. +=item Timeout waiting for another thread to define \p{%s} + +(F) The first time a user-defined property +(L) is used, its +definition is looked up and converted into an internal form for more +efficient handling in subsequent uses. There could be a race if two or +more threads tried to do this processing nearly simultaneously. +Instead, a critical section is created around this task, locking out all +but one thread from doing it. This message indicates that the thread +that is doing the conversion is taking an unexpectedly long time. The +timeout exists solely to prevent deadlock; it's long enough that the +system was likely thrashing and about to crash. There is no real remedy but +rebooting. + =item times not implemented (F) Your version of the C library apparently doesn't do times(). I @@ -6288,14 +6296,20 @@ See L. (F) There has to be at least one argument to syscall() to specify the system call to call, silly dilly. -=item Too few arguments for subroutine '%s' +=item Too few arguments for subroutine '%s' (got %d; expected %d) (F) A subroutine using a signature fewer arguments than required by the signature. The caller of the subroutine is presumably at fault. The message attempts to include the name of the called subroutine. If the subroutine has been aliased, the subroutine's original name will be -shown, regardless of what name the caller used. +shown, regardless of what name the caller used. It will also indicate the +number of arguments given and the number expected. + +=item Too few arguments for subroutine '%s' (got %d; expected at least %d) + +Similar to the previous message but for subroutines that accept a variable +number of arguments. =item Too late for "-%s" option @@ -6327,14 +6341,20 @@ BEGIN block. (F) The function requires fewer arguments than you specified. -=item Too many arguments for subroutine '%s' +=item Too many arguments for subroutine '%s' (got %d; expected %d) (F) A subroutine using a signature received more arguments than permitted by the signature. The caller of the subroutine is presumably at fault. The message attempts to include the name of the called subroutine. If the subroutine has been aliased, the subroutine's original name will be shown, -regardless of what name the caller used. +regardless of what name the caller used. It will also indicate the number +of arguments given and the number expected. + +=item Too many arguments for subroutine '%s' (got %d; expected at most %d) + +Similar to the previous message but for subroutines that accept a variable +number of arguments. =item Too many nested open parens in regex; marked by <-- HERE in m/%s/ @@ -6381,6 +6401,18 @@ disallowed. See L. (F) Your machine doesn't implement a file truncation mechanism that Configure knows about. +=item try/catch is experimental + +(S experimental::try) This warning is emitted if you use the C and +C syntax. This syntax is currently experimental and its behaviour may +change in future releases of Perl. + +=item try/catch/finally is experimental + +(S experimental::try) This warning is emitted if you use the C and +C syntax with a C block. This syntax is currently experimental +and its behaviour may change in future releases of Perl. + =item Type of arg %d to &CORE::%s must be %s (F) The subroutine in question in the CORE package requires its argument @@ -6620,11 +6652,6 @@ within an inner pair of square brackets, like Another possibility is that you forgot a backslash. Perl isn't smart enough to figure out what you really meant. -=item Unexpected constant lvalue entersub entry via type/targ %d:%d - -(P) When compiling a subroutine call in lvalue context, Perl failed an -internal consistency check. It encountered a malformed op tree. - =item Unexpected exit %u (S) exit() was called or the script otherwise finished gracefully when @@ -6812,6 +6839,13 @@ for the list of known options. Llist]> documentation of the C<-C> switch for the list of known options. +=item Unknown user-defined property name \p{%s} + +(F) You specified to use a property within the C<\p{...}> which was a +syntactically valid user-defined property, but no definition was found +for it by the time one was required to proceed. Check your spelling. +See L. + =item Unknown verb pattern '%s' in regex; marked by S<<-- HERE> in m/%s/ (F) You either made a typo or have incorrectly put a C<*> quantifier @@ -7109,7 +7143,19 @@ C<\L> or C<\Q> preceding it. The C<"?"> and C<"+"> don't have any effect, as they modify whether to match more or fewer when there is a choice, and by specifying to match -exactly a given numer, there is no room left for a choice. +exactly a given number, there is no room left for a choice. + +=item Useless use of %s in scalar context + +(W scalar) You did something whose only interesting return value is a +list without a side effect in scalar context, which does not accept a +list. + +For example + + my $x = sort @y; + +This is not very useful, and perl currently optimizes this away. =item Useless use of %s in void context @@ -7160,14 +7206,6 @@ so is futile. (W) You did C without any arguments. That isn't very useful. -=item Useless use of sort in scalar context - -(W void) You used sort in scalar context, as in : - - my $x = sort @y; - -This is not very useful, and perl currently optimizes this away. - =item Useless use of %s with no values (W syntax) You used the push() or unshift() function with no arguments @@ -7182,6 +7220,14 @@ you can write it as C to avoid this warning. (F) The "use" keyword is recognized and executed at compile time, and returns no useful value. See L. +=item Use of @_ in %s with signatured subroutine is experimental + +(S experimental::args_array_with_signatures) An expression involving the +C<@_> arguments array was found in a subroutine that uses a signature. +This is experimental because the interaction between the arguments +array and parameter handling via signatures is not guaranteed to remain +stable in any future version of Perl, and such code should be avoided. + =item Use of bare << to mean <<"" is forbidden (F) You are now required to use the explicitly quoted form if you wish @@ -7290,6 +7336,29 @@ This was deprecated in Perl 5.004, and was made fatal in Perl 5.28. (F) You attempted to use a feature of printf that is accessible from only C. This usually means there's a better way to do it in Perl. +=item Use of '%s' is deprecated as a string delimiter + +(D deprecated) You used the given character as a starting delimiter of a +string outside the scope of S>. +This character is the mirror image of another Unicode character; within +the scope of that feature, the two are considered a pair for delimitting +strings. It is planned to make that feature the default, at which point +this usage would become illegal; hence this warning. + +For now, you may live with this warning, or turn it off, but this code +will no longer compile in a future version of Perl. Or you can turn on +S> and use the character that +is the mirror image of this one for the closing string delimiter. + +=item Use of '%s' is experimental as a string delimiter + +(S experimental::extra_paired_delimiters) This warning is emitted if +you use as a string delimiter one of the non-ASCII mirror image ones +enabled by S>. Simply suppress +the warning if you want to use the feature, but know that in doing so +you are taking the risk of using an experimental feature which may +change or be removed in a future Perl version: + =item Use of %s is not allowed in Unicode property wildcard subpatterns in regex; marked by S<<-- HERE> in m/%s/ @@ -7513,7 +7582,8 @@ being executed, so its $a is not available for capture. that you apparently thought was imported from another module, because something else of the same name (usually a subroutine) is exported by that module. It usually means you put the wrong funny character on the -front of your variable. +front of your variable. It is also possible you used an "our" variable +whose scope has ended. =item Variable length lookbehind not implemented in regex m/%s/ @@ -7566,6 +7636,26 @@ You can also say to apply C to all regular expressions compiled within its scope. See L. +=item Variable length positive lookbehind with capturing is experimental in regex m/%s/ + +(W) Variable length positive lookbehind with capturing is not well defined. This +warning alerts you to the fact that you are using a construct which may +change in a future version of perl. See the +L<< documentation of Positive Lookbehind in perlre|perlre/"C<(?<=I)>" >> +for details. You may silence this warning with the following: + + no warnings 'experimental::vlb'; + +=item Variable length negative lookbehind with capturing is experimental in regex m/%s/ + +(W) Variable length negative lookbehind with capturing is not well defined. This +warning alerts you to the fact that you are using a construct which may +change in a future version of perl. See the +L<< documentation of Negative Lookbehind in perlre|perlre/"C<(?)>" >> +for details. You may silence this warning with the following: + + no warnings 'experimental::vlb'; + =item "%s" variable %s masks earlier declaration in same %s (W shadow) A "my", "our" or "state" variable has been redeclared in the diff --git a/gnu/usr.bin/perl/pod/perldsc.pod b/gnu/usr.bin/perl/pod/perldsc.pod index 7564b97ccc2..2f20fc0c240 100644 --- a/gnu/usr.bin/perl/pod/perldsc.pod +++ b/gnu/usr.bin/perl/pod/perldsc.pod @@ -183,31 +183,30 @@ The square brackets make a reference to a new array with a I of what's in @array at the time of the assignment. This is what you want. -Note that this will produce something similar, but it's -much harder to read: +Note that this will produce something similar: # Either without strict or having an outer-scope my @array; # declaration. for my $i (1..10) { @array = 0 .. $i; - @{$AoA[$i]} = @array; + $AoA[$i]->@* = @array; } Is it the same? Well, maybe so--and maybe not. The subtle difference is that when you assign something in square brackets, you know for sure it's always a brand new reference with a new I of the data. -Something else could be going on in this new case with the C<@{$AoA[$i]}> -dereference on the left-hand-side of the assignment. It all depends on -whether C<$AoA[$i]> had been undefined to start with, or whether it -already contained a reference. If you had already populated @AoA with -references, as in +Something else could be going on in this new case with the +C<< $AoA[$i]->@* >> dereference on the left-hand-side of the assignment. +It all depends on whether C<$AoA[$i]> had been undefined to start with, +or whether it already contained a reference. If you had already +populated @AoA with references, as in $AoA[3] = \@another_array; Then the assignment with the indirection on the left-hand-side would use the existing reference that was already there: - @{$AoA[3]} = @array; + $AoA[3]->@* = @array; Of course, this I have the "interesting" effect of clobbering @another_array. (Have you ever noticed how when a programmer says @@ -241,12 +240,24 @@ much more easily understood constructors C<[]> and C<{}> instead of relying upon lexical (or dynamic) scoping and hidden reference-counting to do the right thing behind the scenes. +Note also that there exists another way to write a dereference! These +two lines are equivalent: + + $AoA[$i]->@* = @array; + @{ $AoA[$i] } = @array; + +The first form, called I is generally easier to +read, because the expression can be read from left to right, and there +are no enclosing braces to balance. On the other hand, it is also +newer. It was added to the language in 2014, so you will often +encounter the other form, I, in older code. + In summary: $AoA[$i] = [ @array ]; # usually best $AoA[$i] = \@array; # perilous; just how my() was that array? - @{ $AoA[$i] } = @array; # way too tricky for most programmers - + $AoA[$i]->@* = @array; # way too tricky for most programmers + @{ $AoA[$i] } = @array; # just as tricky, and also harder to read =head1 CAVEAT ON PRECEDENCE X X @@ -269,17 +280,16 @@ dereference the thing at that subscript. That's fine in C, but this isn't C. The seemingly equivalent construct in Perl, C<$$aref[$i]> first does the deref of $aref, making it take $aref as a reference to an array, and then dereference that, and finally tell you the I value -of the array pointed to by $AoA. If you wanted the C notion, you'd have to -write C<${$AoA[$i]}> to force the C<$AoA[$i]> to get evaluated first -before the leading C<$> dereferencer. +of the array pointed to by $AoA. If you wanted the C notion, you could +write C<< $AoA[$i]->$* >> to explicitly dereference the I item, +reading left to right. -=head1 WHY YOU SHOULD ALWAYS C +=head1 WHY YOU SHOULD ALWAYS C If this is starting to sound scarier than it's worth, relax. Perl has -some features to help you avoid its most common pitfalls. The best -way to avoid getting confused is to start every program like this: +some features to help you avoid its most common pitfalls. One way to avoid +getting confused is to start every program with: - #!/usr/bin/perl -w use strict; This way, you'll be forced to declare all your variables with my() and @@ -300,6 +310,19 @@ variable, and it would thereby remind you to write instead: print $aref->[2][2] +Since Perl version 5.12, a C declaration will also enable the +C pragma. In addition, it will also enable a feature bundle, +giving more useful features. Since version 5.36 it will also enable the +C pragma. Often the best way to activate all these things at +once is to start a file with: + + use v5.36; + +In this way, every file will start with C, C, and many +useful named features all switched on, as well as several older features +being switched off (such as L|feature/The 'indirect' feature>). +For more information, see L. + =head1 DEBUGGING X X X X X X @@ -330,16 +353,15 @@ For example, given the assignment to $AoA above, here's the debugger output: =head1 CODE EXAMPLES -Presented with little comment (these will get their own manpages someday) -here are short code examples illustrating access of various -types of data structures. +Presented with little comment here are short code examples illustrating +access of various types of data structures. =head1 ARRAYS OF ARRAYS X X =head2 Declaration of an ARRAY OF ARRAYS - @AoA = ( + my @AoA = ( [ "fred", "barney" ], [ "george", "jane", "elroy" ], [ "homer", "marge", "bart" ], @@ -353,18 +375,18 @@ X X } # calling a function - for $i ( 1 .. 10 ) { + for my $i ( 1 .. 10 ) { $AoA[$i] = [ somefunc($i) ]; } # using temp vars - for $i ( 1 .. 10 ) { - @tmp = somefunc($i); + for my $i ( 1 .. 10 ) { + my @tmp = somefunc($i); $AoA[$i] = [ @tmp ]; } # add to an existing row - push @{ $AoA[0] }, "wilma", "betty"; + push $AoA[0]->@*, "wilma", "betty"; =head2 Access and Printing of an ARRAY OF ARRAYS @@ -375,19 +397,19 @@ X X $AoA[1][1] =~ s/(\w)/\u$1/; # print the whole thing with refs - for $aref ( @AoA ) { + for my $aref ( @AoA ) { print "\t [ @$aref ],\n"; } # print the whole thing with indices - for $i ( 0 .. $#AoA ) { - print "\t [ @{$AoA[$i]} ],\n"; + for my $i ( 0 .. $#AoA ) { + print "\t [ $AoA[$i]->@* ],\n"; } # print the whole thing one at a time - for $i ( 0 .. $#AoA ) { - for $j ( 0 .. $#{ $AoA[$i] } ) { - print "elt $i $j is $AoA[$i][$j]\n"; + for my $i ( 0 .. $#AoA ) { + for my $j ( 0 .. $AoA[$i]->$#* ) { + print "elem at ($i, $j) is $AoA[$i][$j]\n"; } } @@ -396,7 +418,7 @@ X X =head2 Declaration of a HASH OF ARRAYS - %HoA = ( + my %HoA = ( flintstones => [ "fred", "barney" ], jetsons => [ "george", "jane", "elroy" ], simpsons => [ "homer", "marge", "bart" ], @@ -413,25 +435,25 @@ X X # reading from file; more temps # flintstones: fred barney wilma dino - while ( $line = <> ) { - ($who, $rest) = split /:\s*/, $line, 2; - @fields = split ' ', $rest; + while ( my $line = <> ) { + my ($who, $rest) = split /:\s*/, $line, 2; + my @fields = split ' ', $rest; $HoA{$who} = [ @fields ]; } # calling a function that returns a list - for $group ( "simpsons", "jetsons", "flintstones" ) { + for my $group ( "simpsons", "jetsons", "flintstones" ) { $HoA{$group} = [ get_family($group) ]; } # likewise, but using temps - for $group ( "simpsons", "jetsons", "flintstones" ) { - @members = get_family($group); + for my $group ( "simpsons", "jetsons", "flintstones" ) { + my @members = get_family($group); $HoA{$group} = [ @members ]; } # append new members to an existing family - push @{ $HoA{"flintstones"} }, "wilma", "betty"; + push $HoA{flintstones}->@*, "wilma", "betty"; =head2 Access and Printing of a HASH OF ARRAYS @@ -442,32 +464,32 @@ X X $HoA{simpsons}[1] =~ s/(\w)/\u$1/; # print the whole thing - foreach $family ( keys %HoA ) { - print "$family: @{ $HoA{$family} }\n" + foreach my $family ( keys %HoA ) { + print "$family: $HoA{$family}->@* \n" } # print the whole thing with indices - foreach $family ( keys %HoA ) { + foreach my $family ( keys %HoA ) { print "family: "; - foreach $i ( 0 .. $#{ $HoA{$family} } ) { + foreach my $i ( 0 .. $HoA{$family}->$#* ) { print " $i = $HoA{$family}[$i]"; } print "\n"; } # print the whole thing sorted by number of members - foreach $family ( sort { @{$HoA{$b}} <=> @{$HoA{$a}} } keys %HoA ) { - print "$family: @{ $HoA{$family} }\n" + foreach my $family ( sort { $HoA{$b}->@* <=> $HoA{$a}->@* } keys %HoA ) { + print "$family: $HoA{$family}->@* \n" } # print the whole thing sorted by number of members and name - foreach $family ( sort { - @{$HoA{$b}} <=> @{$HoA{$a}} - || - $a cmp $b + foreach my $family ( sort { + $HoA{$b}->@* <=> $HoA{$a}->@* + || + $a cmp $b } keys %HoA ) { - print "$family: ", join(", ", sort @{ $HoA{$family} }), "\n"; + print "$family: ", join(", ", sort $HoA{$family}->@* ), "\n"; } =head1 ARRAYS OF HASHES @@ -475,7 +497,7 @@ X X =head2 Declaration of an ARRAY OF HASHES - @AoH = ( + my @AoH = ( { Lead => "fred", Friend => "barney", @@ -497,9 +519,9 @@ X X # reading from file # format: LEAD=fred FRIEND=barney while ( <> ) { - $rec = {}; - for $field ( split ) { - ($key, $value) = split /=/, $field; + my $rec = {}; + for my $field ( split ) { + my ($key, $value) = split /=/, $field; $rec->{$key} = $value; } push @AoH, $rec; @@ -515,7 +537,7 @@ X X # calling a function that returns a key/value pair list, like # "lead","fred","daughter","pebbles" - while ( %fields = getnextpairset() ) { + while ( my %fields = getnextpairset() ) { push @AoH, { %fields }; } @@ -537,27 +559,27 @@ X X $AoH[1]{lead} =~ s/(\w)/\u$1/; # print the whole thing with refs - for $href ( @AoH ) { + for my $href ( @AoH ) { print "{ "; - for $role ( keys %$href ) { + for my $role ( keys %$href ) { print "$role=$href->{$role} "; } print "}\n"; } # print the whole thing with indices - for $i ( 0 .. $#AoH ) { + for my $i ( 0 .. $#AoH ) { print "$i is { "; - for $role ( keys %{ $AoH[$i] } ) { + for my $role ( keys $AoH[$i]->%* ) { print "$role=$AoH[$i]{$role} "; } print "}\n"; } # print the whole thing one at a time - for $i ( 0 .. $#AoH ) { - for $role ( keys %{ $AoH[$i] } ) { - print "elt $i $role is $AoH[$i]{$role}\n"; + for my $i ( 0 .. $#AoH ) { + for my $role ( keys $AoH[$i]->%* ) { + print "elem at ($i, $role) is $AoH[$i]{$role}\n"; } } @@ -566,7 +588,7 @@ X X =head2 Declaration of a HASH OF HASHES - %HoH = ( + my %HoH = ( flintstones => { lead => "fred", pal => "barney", @@ -589,43 +611,44 @@ X X # flintstones: lead=fred pal=barney wife=wilma pet=dino while ( <> ) { next unless s/^(.*?):\s*//; - $who = $1; - for $field ( split ) { - ($key, $value) = split /=/, $field; + my $who = $1; + for my $field ( split ) { + my ($key, $value) = split /=/, $field; $HoH{$who}{$key} = $value; } + } # reading from file; more temps while ( <> ) { next unless s/^(.*?):\s*//; - $who = $1; - $rec = {}; + my $who = $1; + my $rec = {}; $HoH{$who} = $rec; - for $field ( split ) { - ($key, $value) = split /=/, $field; + for my $field ( split ) { + my ($key, $value) = split /=/, $field; $rec->{$key} = $value; } } # calling a function that returns a key,value hash - for $group ( "simpsons", "jetsons", "flintstones" ) { + for my $group ( "simpsons", "jetsons", "flintstones" ) { $HoH{$group} = { get_family($group) }; } # likewise, but using temps - for $group ( "simpsons", "jetsons", "flintstones" ) { - %members = get_family($group); + for my $group ( "simpsons", "jetsons", "flintstones" ) { + my %members = get_family($group); $HoH{$group} = { %members }; } # append new members to an existing family - %new_folks = ( + my %new_folks = ( wife => "wilma", pet => "dino", ); - for $what (keys %new_folks) { + for my $what (keys %new_folks) { $HoH{flintstones}{$what} = $new_folks{$what}; } @@ -638,18 +661,18 @@ X X $HoH{simpsons}{lead} =~ s/(\w)/\u$1/; # print the whole thing - foreach $family ( keys %HoH ) { + foreach my $family ( keys %HoH ) { print "$family: { "; - for $role ( keys %{ $HoH{$family} } ) { + for my $role ( keys $HoH{$family}->%* ) { print "$role=$HoH{$family}{$role} "; } print "}\n"; } # print the whole thing somewhat sorted - foreach $family ( sort keys %HoH ) { + foreach my $family ( sort keys %HoH ) { print "$family: { "; - for $role ( sort keys %{ $HoH{$family} } ) { + for my $role ( sort keys $HoH{$family}->%* ) { print "$role=$HoH{$family}{$role} "; } print "}\n"; @@ -657,28 +680,25 @@ X X # print the whole thing sorted by number of members - foreach $family ( sort { keys %{$HoH{$b}} <=> keys %{$HoH{$a}} } - keys %HoH ) - { + foreach my $family ( sort { $HoH{$b}->%* <=> $HoH{$a}->%* } keys %HoH ) { print "$family: { "; - for $role ( sort keys %{ $HoH{$family} } ) { + for my $role ( sort keys $HoH{$family}->%* ) { print "$role=$HoH{$family}{$role} "; } print "}\n"; } # establish a sort order (rank) for each role - $i = 0; + my $i = 0; + my %rank; for ( qw(lead wife son daughter pal pet) ) { $rank{$_} = ++$i } # now print the whole thing sorted by number of members - foreach $family ( sort { keys %{ $HoH{$b} } <=> keys %{ $HoH{$a} } } - keys %HoH ) - { + foreach my $family ( sort { $HoH{$b}->%* <=> $HoH{$a}->%* } keys %HoH ) { print "$family: { "; # and print these according to rank order - for $role ( sort { $rank{$a} <=> $rank{$b} } - keys %{ $HoH{$family} } ) + for my $role ( sort { $rank{$a} <=> $rank{$b} } + keys $HoH{$family}->%* ) { print "$role=$HoH{$family}{$role} "; } @@ -694,7 +714,7 @@ X X X Here's a sample showing how to create and use a record whose fields are of many different sorts: - $rec = { + my $rec = { TEXT => $string, SEQUENCE => [ @old_values ], LOOKUP => { %some_table }, @@ -706,12 +726,12 @@ many different sorts: print $rec->{TEXT}; print $rec->{SEQUENCE}[0]; - $last = pop @ { $rec->{SEQUENCE} }; + my $last = pop $rec->{SEQUENCE}->@*; print $rec->{LOOKUP}{"key"}; - ($first_k, $first_v) = each %{ $rec->{LOOKUP} }; + my ($first_k, $first_v) = each $rec->{LOOKUP}->%*; - $answer = $rec->{THATCODE}->($arg); + my $answer = $rec->{THATCODE}->($arg); $answer = $rec->{THISCODE}->($arg1, $arg2); # careful of extra block braces on fh ref @@ -723,7 +743,7 @@ many different sorts: =head2 Declaration of a HASH OF COMPLEX RECORDS - %TV = ( + my %TV = ( flintstones => { series => "flintstones", nights => [ qw(monday thursday friday) ], @@ -764,14 +784,14 @@ many different sorts: # sometimes it's easiest to do that # here's a piece by piece build up - $rec = {}; + my $rec = {}; $rec->{series} = "flintstones"; $rec->{nights} = [ find_days() ]; - @members = (); + my @members = (); # assume this file in field=value syntax while (<>) { - %fields = split /[\s=]+/; + my %fields = split /[\s=]+/; push @members, { %fields }; } $rec->{members} = [ @members ]; @@ -787,10 +807,10 @@ many different sorts: # to an array of the kids' records without having duplicate # records and thus update problems. ########################################################### - foreach $family (keys %TV) { - $rec = $TV{$family}; # temp pointer - @kids = (); - for $person ( @{ $rec->{members} } ) { + foreach my $family (keys %TV) { + my $rec = $TV{$family}; # temp pointer + my @kids = (); + for my $person ( $rec->{members}->@* ) { if ($person->{role} =~ /kid|son|daughter/) { push @kids, $person; } @@ -812,16 +832,16 @@ many different sorts: # both point to the same underlying anonymous hash table # print the whole thing - foreach $family ( keys %TV ) { + foreach my $family ( keys %TV ) { print "the $family"; - print " is on during @{ $TV{$family}{nights} }\n"; + print " is on during $TV{$family}{nights}->@*\n"; print "its members are:\n"; - for $who ( @{ $TV{$family}{members} } ) { + for my $who ( $TV{$family}{members}->@* ) { print " $who->{name} ($who->{role}), age $who->{age}\n"; } print "it turns out that $TV{$family}{lead} has "; - print scalar ( @{ $TV{$family}{kids} } ), " kids named "; - print join (", ", map { $_->{name} } @{ $TV{$family}{kids} } ); + print scalar ( $TV{$family}{kids}->@* ), " kids named "; + print join (", ", map { $_->{name} } $TV{$family}{kids}->@* ); print "\n"; } diff --git a/gnu/usr.bin/perl/pod/perlebcdic.pod b/gnu/usr.bin/perl/pod/perlebcdic.pod index 0e0ab8bd87f..5ffefccf8cf 100644 --- a/gnu/usr.bin/perl/pod/perlebcdic.pod +++ b/gnu/usr.bin/perl/pod/perlebcdic.pod @@ -1875,13 +1875,13 @@ L, L, L, L. =head1 REFERENCES -L +L L -L +L -L +L B Tom Jennings, September 1999. diff --git a/gnu/usr.bin/perl/pod/perlembed.pod b/gnu/usr.bin/perl/pod/perlembed.pod index 88cb810cc79..afeb68733de 100644 --- a/gnu/usr.bin/perl/pod/perlembed.pod +++ b/gnu/usr.bin/perl/pod/perlembed.pod @@ -98,6 +98,8 @@ When you use Perl from C, your C program will--usually--allocate, "run", and deallocate a I object, which is defined by the perl library. +=for apidoc Ayh||PerlInterpreter + If your copy of Perl is recent enough to contain this documentation (version 5.002 or later), then the perl library (and I and I, which you'll also need) will reside in a directory @@ -882,6 +884,8 @@ behaviour might not be appropriate when embedding perl and can be disabled by assigning the value C<1> to the variable C before perl_parse() is called. +=for apidoc Amnh||PL_origalen + The F example above is for instance likely to segfault when $0 is assigned to if the C assignment is removed. This because perl will try to write to the read only memory @@ -1108,6 +1112,8 @@ C pre-processor symbol C. This allows code that has to work with multiple Perl versions to do some sort of work-around when confronted with an earlier Perl. +=for apidoc Amnh||HAS_SKIP_LOCALE_INIT + If your program is using the POSIX 2008 multi-thread locale functionality, you should switch into the global locale and set that up properly before starting the Perl interpreter. It will then properly @@ -1125,7 +1131,7 @@ you will have to write the explicit full form Perl_warn(aTHX_ "%d bottles of beer on the wall", bottlecount); -(See L for the explanation +(See L for the explanation of the C. ) Hiding the short forms is very useful for avoiding all sorts of nasty (C preprocessor or otherwise) conflicts with other software packages (Perl defines about 2400 APIs with these short names, diff --git a/gnu/usr.bin/perl/pod/perlexperiment.pod b/gnu/usr.bin/perl/pod/perlexperiment.pod index 2bf2e85b1bb..1daf70199b6 100644 --- a/gnu/usr.bin/perl/pod/perlexperiment.pod +++ b/gnu/usr.bin/perl/pod/perlexperiment.pod @@ -1,3 +1,5 @@ +=encoding utf-8 + =head1 NAME perlexperiment - A listing of experimental features in Perl @@ -25,39 +27,17 @@ Modified in Perl 5.10.1, 5.12.0 Using this feature triggers warnings in the category C. -The ticket for this feature is +The ticket for this experiment is L<[perl #13173]|https://github.com/Perl/perl5/issues/13173>. =item Pluggable keywords -The ticket for this feature is -L<[perl #13199]|https://github.com/Perl/perl5/issues/13199>. - -See L for the mechanism. - Introduced in Perl 5.11.2 -=item Regular Expression Set Operations - -Introduced in Perl 5.18 - -The ticket for this feature is -L<[perl #13197]|https://github.com/Perl/perl5/issues/13197>. - -See also: L - -Using this feature triggers warnings in the category -C. - -=item Subroutine signatures - -Introduced in Perl 5.20.0 - -Using this feature triggers warnings in the category -C. +See L for the mechanism. -The ticket for this feature is -L<[perl #13681]|https://github.com/Perl/perl5/issues/13681>. +The ticket for this experiment is +L<[perl #13199]|https://github.com/Perl/perl5/issues/13199>. =item Aliasing via reference @@ -66,7 +46,7 @@ Introduced in Perl 5.22.0 Using this feature triggers warnings in the category C. -The ticket for this feature is +The ticket for this experiment is L<[perl #14150]|https://github.com/Perl/perl5/issues/14150>. See also: L @@ -78,7 +58,7 @@ Introduced in Perl 5.22.0 Using this feature triggers warnings in the category C. -The ticket for this feature is +The ticket for this experiment is L<[perl #14428]|https://github.com/Perl/perl5/issues/14428>. See also: L @@ -90,14 +70,10 @@ Introduced in Perl 5.22.0 Using this feature triggers warnings in the category C. -See L - -=item The <:win32> IO pseudolayer +The ticket for this experiment is +L<[perl #18755]|https://github.com/Perl/perl5/issues/18755> -The ticket for this feature is -L<[perl #13198]|https://github.com/Perl/perl5/issues/13198>. - -See also L +See L =item Declaring a reference to a variable @@ -106,27 +82,131 @@ Introduced in Perl 5.26.0 Using this feature triggers warnings in the category C. -The ticket for this feature is +The ticket for this experiment is L<[perl #15458]|https://github.com/Perl/perl5/issues/15458>. See also: L =item There is an C target in the Makefile. -The ticket for this feature is +The ticket for this experiment is L<[perl #12726]|https://github.com/Perl/perl5/issues/12726>. =item (Limited) Variable-length look-behind -Introduced in Perl 5.30.0. Variability of up to 255 characters is -handled. +Introduced in Perl 5.30.0. + +Variability of up to 255 characters is handled. Using this feature triggers warnings in the category C. +The ticket for this experiment is +L<[perl #18756]|https://github.com/Perl/perl5/issues/18756>. + See also: L)> and L)> +=item Unicode private use character hooks + +Introduced in Perl 5.30.0. + +This feature is part of an interface intended for internal and experimental +use by the perl5 developers. You are unlikely to encounter it in the wild. + +Using this feature triggers warnings in the category +C. + +The ticket for this experiment is +L<[perl #18758]|https://github.com/Perl/perl5/issues/18758>. + +=item Unicode property wildcards + +Introduced in Perl 5.30.0. + +This feature allows regular expression matching against Unicode character +properties to be expressed more concisely. + +Using this feature triggers warnings in the category +C. + +The ticket for this experiment is +L<[perl #18759]|https://github.com/Perl/perl5/issues/18759>. + +=item try/catch control structure + +Introduced in Perl 5.34.0. + +Using this feature triggers warnings in the category C. + +The ticket for this experiment is +L<[perl #18760]|https://github.com/Perl/perl5/issues/18760> + +=item Use of C<@_> within subroutine signatures + +Introduced in Perl 5.36.0 as part of a reduction in the scope of experimental +subroutine signatures. + +Using the default arguments array (C<@_>) within a subroutine that uses +signatures will emit a warning in the category +C. This includes C<@_> directly, +elements of it such as C<$_[$index]>, or situations where the default +arguments array is accessed implicitly such as C or C without +arguments. + +=item for loop with multiple iteration variables + +Introduced in Perl 5.36.0. + +Using this feature triggers warnings in the category C. + +This feature enables a parenthesized list of iteration variables for C +rather than a single variable. + +The ticket for this experiment is +L<[perl #18744]|https://github.com/Perl/perl5/issues/18744>. + +=item The builtin namespace + +Introduced in Perl 5.36.0. + +Using this feature triggers warnings in the category C. + +In Perl 5.36.0, a new namespace, C, was created for new core functions +that will not be present in every namespace, but will be available for +importing. The namespace itself is considered an experiment. Specific +functions within it may also be experimental. + +The ticket for this experiment is +L<[perl #19764]|https://github.com/Perl/perl5/issues/19764>. + +=item The defer block modifier + +Introduced in Perl 5.36.0 + +Using this feature triggers warnings in the category C. + +This feature adds a new kind of block, a C block, which will not be +executed until the containing block is being exited. + +The ticket for this experiment is +L<[perl #17949]|https://github.com/Perl/perl5/issues/17949>. + +=item Extra paired delimiters for quote-like operators + +Introduced in Perl 5.36.0 + +Using this feature triggers warnings in the category +C. + +This feature allows for many non-ASCII pairs of mirroring delimiters, for +example: + + my @array = qw« tinker tailer soldier spy »; + +The ticket for this experiment is +L<[perl #19765]|https://github.com/Perl/perl5/issues/19765>. + =back =head2 Accepted features @@ -221,7 +301,7 @@ Introduced in Perl 5.10 Accepted in Perl 5.20.0 -=item The <:pop> IO pseudolayer +=item The C<:pop> IO pseudolayer See also L @@ -261,6 +341,26 @@ Introduced in Perl 5.28.0 Accepted in Perl 5.32.0 +=item The infix C operator + +Introduced in Perl 5.32.0 + +Accepted in Perl 5.36.0 + +=item Subroutine signatures + +Introduced in Perl 5.20.0 + +Accepted in Perl 5.36.0 + +=item Regular Expression Set Operations + +Introduced in Perl 5.18 + +Accepted in Perl 5.36 + +See : L + =back =head2 Removed features @@ -343,6 +443,12 @@ Deprecated in Perl 5.10.0 Removed in Perl 5.28.0 +=item The C<:win32> IO pseudolayer + +Introduced in Perl 5.8.0 (or before) + +Removed in Perl 5.36.0 + =back =head1 SEE ALSO diff --git a/gnu/usr.bin/perl/pod/perlfilter.pod b/gnu/usr.bin/perl/pod/perlfilter.pod index 0744e29f8d1..60be3df0d52 100644 --- a/gnu/usr.bin/perl/pod/perlfilter.pod +++ b/gnu/usr.bin/perl/pod/perlfilter.pod @@ -410,8 +410,7 @@ Here is the complete Debug filter: package Debug; - use strict; - use warnings; + use v5.36; use Filter::Util::Call; use constant TRUE => 1; @@ -570,7 +569,7 @@ code chunks beginning with the division operator C. As a workaround you must use C or C for such patterns. Also, the presence of regexes specified with raw C delimiters may cause mysterious errors. The workaround is to use C instead. See -L +L. Currently the content of the C<__DATA__> block is not filtered. diff --git a/gnu/usr.bin/perl/pod/perlfunc.pod b/gnu/usr.bin/perl/pod/perlfunc.pod index e95c54f4252..2c27a747f98 100644 --- a/gnu/usr.bin/perl/pod/perlfunc.pod +++ b/gnu/usr.bin/perl/pod/perlfunc.pod @@ -426,11 +426,45 @@ L|/time>, L|/times> =for Pod::Functions =!Non-functions -C, C, C, C, C, C, C<__DATA__>, -C, C, C, C, C, C, C<__END__>, -C, C, C, C, C, C, C, C, C, -C, C, C, C, C, C, C, C, -C, C, C +C, +C, +C, +C, +C, +C, +C, +C<__DATA__>, +C, +C, +C, +C, +C, +C, +C, +C<__END__>, +C, +C, +C, +C, +C, +C, +C, +C, +C, +C, +C, +C, +C, +C, +C, +C, +C, +C, +C, +C, +C, +C, +C =back @@ -669,7 +703,7 @@ Portability issues: L. To avoid confusing would-be users of your code with mysterious syntax errors, put something like this at the top of your script: - use 5.010; # so filetest ops can stack + use v5.10; # so filetest ops can stack =item abs VALUE X X @@ -989,6 +1023,11 @@ L|/undef EXPR> if L|perlvar/%^H> was empty. Do not modify the values of this hash, as they are the actual values stored in the optree. +Note that the only types of call frames that are visible are subroutine +calls and C. Other forms of context, such as C or C +loops or C blocks are not considered interesting to C, as they +do not alter the behaviour of the C expression. + Furthermore, when called from within the DB package in list context, and with an argument, caller returns more detailed information: it sets the list variable C<@DB::args> to be the @@ -1607,10 +1646,10 @@ key, but deleting it does; see L|/exists EXPR>. In list context, usually returns the value or values deleted, or the last such element in scalar context. The return list's length corresponds to that of the argument list: deleting non-existent elements returns the undefined value -in their corresponding positions. When a -Lvalue hash slice|perldata/KeyEValue Hash Slices> is passed to -C, the return value is a list of key/value pairs (two elements for each -item deleted from the hash). +in their corresponding positions. Since Perl 5.28, a +Lvalue hash slice|perldata/KeyEValue Hash Slices> can be passed +to C, and the return value is a list of key/value pairs (two elements +for each item deleted from the hash). L|/delete EXPR> may also be used on arrays and array slices, but its behavior is less straightforward. Although @@ -1675,10 +1714,10 @@ The EXPR can be arbitrarily complicated provided its final operation is an element or slice of an aggregate: delete $ref->[$x][$y]{$key}; - delete @{$ref->[$x][$y]}{$key1, $key2, @morekeys}; + delete $ref->[$x][$y]->@{$key1, $key2, @morekeys}; delete $ref->[$x][$y][$index]; - delete @{$ref->[$x][$y]}[$index1, $index2, @moreindices]; + delete $ref->[$x][$y]->@[$index1, $index2, @moreindices]; =item die LIST X X X X X<$@> X @@ -2007,6 +2046,15 @@ the iterator state used by anything else that might execute during the loop body. To avoid these problems, use a C loop rather than C-C. +This extends to using C on the result of an anonymous hash or +array constructor. A new underlying array or hash is created each +time so each will always start iterating from scratch, eg: + + # loops forever + while (my ($key, $value) = each @{ +{ a => 1 } }) { + print "$key=$value\n"; + } + This prints out your environment like the L program, but in a different order: @@ -2034,8 +2082,8 @@ versions of Perl with mysterious syntax errors, put this sort of thing at the top of your file to signal that your code will work I on Perls of a recent vintage: - use 5.012; # so keys/values/each work on arrays - use 5.018; # so each assigns to $_ in a lone while test + use v5.12; # so keys/values/each work on arrays + use v5.18; # so each assigns to $_ in a lone while test See also L|/keys HASH>, L|/values HASH>, and L|/sort SUBNAME LIST>. @@ -2194,29 +2242,13 @@ format definitions remain afterwards. =item Under the L feature|feature/The 'unicode_eval' and 'evalbytes' features> If this feature is enabled (which is the default under a C or -higher declaration), EXPR is considered to be -in the same encoding as the surrounding program. Thus if -S|utf8>> is in effect, the string will be treated as being -UTF-8 encoded. Otherwise, the string is considered to be a sequence of -independent bytes. Bytes that correspond to ASCII-range code points -will have their normal meanings for operators in the string. The -treatment of the other bytes depends on if the -L feature|feature/The 'unicode_strings' feature> is -in effect. - -In a plain C without an EXPR argument, being in S> or -not is irrelevant; the UTF-8ness of C<$_> itself determines the -behavior. - -Any S> or S> declarations within the string have -no effect, and source filters are forbidden. (C, -however, can appear within the string.) See also the -L|/evalbytes EXPR> operator, which works properly with -source filters. - -Variables defined outside the C and used inside it retain their -original UTF-8ness. Everything inside the string follows the normal -rules for a Perl program with the given state of S>. +higher declaration), Perl assumes that EXPR is a character string. +Any S> or S> declarations within +the string thus have no effect. Source filters are forbidden as well. +(C, however, can appear within the string.) + +See also the L|/evalbytes EXPR> operator, which works properly +with source filters. =item Outside the C<"unicode_eval"> feature @@ -2228,8 +2260,26 @@ breaking existing programs: =item * -It can lose track of whether something should be encoded as UTF-8 or -not. +Perl's internal storage of EXPR affects the behavior of the executed code. +For example: + + my $v = eval "use utf8; '$expr'"; + +If $expr is C<"\xc4\x80"> (U+0100 in UTF-8), then the value stored in C<$v> +will depend on whether Perl stores $expr "upgraded" (cf. L) or +not: + +=over + +=item * If upgraded, C<$v> will be C<"\xc4\x80"> (i.e., the +C has no effect.) + +=item * If non-upgraded, C<$v> will be C<"\x{100}">. + +=back + +This is undesirable since being +upgraded or not should not affect a string's behavior. =item * @@ -2355,30 +2405,11 @@ X This function is similar to a L, except it always parses its argument (or L|perlvar/$_> if EXPR is omitted) -as a string of independent bytes. - -If called when S> is in effect, the string will be assumed -to be encoded in UTF-8, and C will make a temporary copy to -work from, downgraded to non-UTF-8. If this is not possible -(because one or more characters in it require UTF-8), the C -will fail with the error stored in C<$@>. - -Bytes that correspond to ASCII-range code points will have their normal -meanings for operators in the string. The treatment of the other bytes -depends on if the L feature|feature/The -'unicode_strings' feature> is in effect. - -Of course, variables that are UTF-8 and are referred to in the string -retain that: +as a byte string. If the string contains any code points above 255, then +it cannot be a byte string, and the C will fail with the error +stored in C<$@>. - my $a = "\x{100}"; - evalbytes 'print ord $a, "\n"'; - -prints - - 256 - -and C<$@> is empty. +C and C within the string have their usual effect. Source filters activated within the evaluated code apply to the code itself. @@ -3365,12 +3396,32 @@ X X X X =for Pod::Functions expand filenames using wildcards In list context, returns a (possibly empty) list of filename expansions on -the value of EXPR such as the standard Unix shell F would do. In +the value of EXPR such as the Unix shell Bash would do. In scalar context, glob iterates through such filename expansions, returning -undef when the list is exhausted. This is the internal function -implementing the C<< <*.c> >> operator, but you can use it directly. If -EXPR is omitted, L|perlvar/$_> is used. The C<< <*.c> >> operator -is discussed in more detail in L. +L|/undef EXPR> when the list is exhausted. If EXPR is omitted, +L|perlvar/$_> is used. + + # List context + my @txt_files = glob("*.txt"); + my @perl_files = glob("*.pl *.pm"); + + # Scalar context + while (my $file = glob("*.mp3")) { + # Do stuff + } + +Glob also supports an alternate syntax using C<< < >> C<< > >> as +delimiters. While this syntax is supported, it is recommended that you +use C instead as it is more readable and searchable. + + my @txt_files = <"*.txt">; + +If you need case insensitive file globbing that can be achieved using the +C<:nocase> parameter of the L|File::Glob/C> module. + + use File::Glob qw(:globally :nocase); + + my @txt = glob("readme*"); # README readme.txt Readme.md Note that L|/glob EXPR> splits its arguments on whitespace and treats @@ -3383,23 +3434,23 @@ For example, to glob filenames that have an C followed by a space followed by an C, use one of: my @spacies = <"*e f*">; - my @spacies = glob '"*e f*"'; - my @spacies = glob q("*e f*"); + my @spacies = glob('"*e f*"'); + my @spacies = glob(q("*e f*")); If you had to get a variable through, you could do this: - my @spacies = glob "'*${var}e f*'"; - my @spacies = glob qq("*${var}e f*"); + my @spacies = glob("'*${var}e f*'"); + my @spacies = glob(qq("*${var}e f*")); If non-empty braces are the only wildcard characters used in the L|/glob EXPR>, no filenames are matched, but potentially many strings are returned. For example, this produces nine strings, one for each pairing of fruits and colors: - my @many = glob "{apple,tomato,cherry}={green,yellow,red}"; + my @many = glob("{apple,tomato,cherry}={green,yellow,red}"); This operator is implemented using the standard C extension. -See L for details, including +See L|File::Glob/C> for details, including L|File::Glob/C>, which does not treat whitespace as a pattern separator. @@ -3410,6 +3461,12 @@ is used as a C/C condition, then the condition actually tests for definedness of the expression's value, not for its regular truth value. +Internal implemenation details: + +This is the internal function implementing the C<< <*.c> >> operator, +but you can use it directly. The C<< <*.c> >> operator is discussed in +more detail in L. + Portability issues: L. =item gmtime EXPR @@ -3419,7 +3476,7 @@ X X X =for Pod::Functions convert UNIX time into record or string using Greenwich time -Works just like L|/localtime EXPR> but the returned values +Works just like L|/localtime EXPR>, but the returned values are localized for the standard Greenwich time zone. Note: When called in list context, $isdst, the last value @@ -3585,6 +3642,20 @@ respectively. POSITION and the return value are based at zero. If the substring is not found, L|/index STR,SUBSTR,POSITION> returns -1. +Find characters or strings: + + index("Perl is great", "P"); # Returns 0 + index("Perl is great", "g"); # Returns 8 + index("Perl is great", "great"); # Also returns 8 + +Attempting to find something not there: + + index("Perl is great", "Z"); # Returns -1 (not found) + +Using an offset to find the I occurrence: + + index("Perl is great", "e", 5); # Returns 10 + =item int EXPR X X X X X @@ -3750,7 +3821,7 @@ versions of Perl with mysterious syntax errors, put this sort of thing at the top of your file to signal that your code will work I on Perls of a recent vintage: - use 5.012; # so keys/values/each work on arrays + use v5.12; # so keys/values/each work on arrays See also L|/each HASH>, L|/values HASH>, and L|/sort SUBNAME LIST>. @@ -3814,7 +3885,7 @@ See L for more details. If there is no I of processes, no signal is sent, and the return value is 0. This form is sometimes used, however, because it causes -tainting checks to be run. But see +tainting checks to be run, if your perl support taint checks. But see L. Portability issues: L. @@ -3868,10 +3939,10 @@ X X =for Pod::Functions return lower-case version of a string -Returns a lowercased version of EXPR. This is the internal function -implementing the C<\L> escape in double-quoted strings. +Returns a lowercased version of EXPR. If EXPR is omitted, uses +L|perlvar/$_>. -If EXPR is omitted, uses L|perlvar/$_>. + my $str = lc("Perl is GREAT"); # "perl is great" What gets returned depends on several factors: @@ -3918,6 +3989,12 @@ outside the ASCII range is the character itself. =back +B This is the internal function implementing the +L|perlop/"Quote and Quote-like Operators"> escape in double-quoted +strings. + + my $str = "Perl is \LGREAT\E"; # "Perl is great" + =item lcfirst EXPR X X @@ -4041,8 +4118,8 @@ C<$wday> is the day of the week, with 0 indicating Sunday and 3 indicating Wednesday. C<$yday> is the day of the year, in the range C<0..364> (or C<0..365> in leap years.) -C<$isdst> is true if the specified time occurs during Daylight Saving -Time, false otherwise. +C<$isdst> is true if the specified time occurs when Daylight Saving +Time is in effect, false otherwise. If EXPR is omitted, L|/localtime EXPR> uses the current time (as returned by L|/time>). @@ -4050,27 +4127,21 @@ time (as returned by L|/time>). In scalar context, L|/localtime EXPR> returns the L value: - my $now_string = localtime; # e.g., "Thu Oct 13 04:54:34 1994" + my $now_string = localtime; # e.g., "Thu Oct 13 04:54:34 1994" -The format of this scalar value is B locale-dependent but built -into Perl. For GMT instead of local time use the -L|/gmtime EXPR> builtin. See also the -L|Time::Local> module (for converting seconds, minutes, -hours, and such back to the integer value returned by L|/time>), -and the L module's L|POSIX/C> and -L|POSIX/C> functions. +This scalar value is always in English, and is B locale-dependent. +To get similar but locale-dependent date strings, try for example: -To get somewhat similar but locale-dependent date strings, set up your -locale environment variables appropriately (please see L) and -try for example: + use POSIX qw(strftime); + my $now_string = strftime "%a %b %e %H:%M:%S %Y", localtime; + # or for GMT formatted appropriately for your locale: + my $now_string = strftime "%a %b %e %H:%M:%S %Y", gmtime; - use POSIX qw(strftime); - my $now_string = strftime "%a %b %e %H:%M:%S %Y", localtime; - # or for GMT formatted appropriately for your locale: - my $now_string = strftime "%a %b %e %H:%M:%S %Y", gmtime; - -Note that C<%a> and C<%b>, the short forms of the day of the week -and the month of the year, may not necessarily be three characters wide. +C$now_string> will be formatted according to the current LC_TIME locale +the program or thread is running in. See L for how to set +up and change that locale. Note that C<%a> and C<%b>, the short forms +of the day of the week and the month of the year, may not necessarily be +three characters wide. The L and L modules provide a convenient, by-name access mechanism to the L|/gmtime EXPR> and @@ -4079,6 +4150,13 @@ L|/localtime EXPR> functions, respectively. For a comprehensive date and time representation look at the L module on CPAN. +For GMT instead of local time use the L|/gmtime EXPR> builtin. + +See also the L|Time::Local> module (for converting +seconds, minutes, hours, and such back to the integer value returned by +L|/time>), and the L module's +L|POSIX/C> function. + Portability issues: L. =item lock THING @@ -4312,9 +4390,8 @@ X Calls the System V IPC function msgsnd to send the message MSG to the message queue ID. MSG must begin with the native long integer message -type, be followed by the length of the actual message, and then finally -the message itself. This kind of packing can be achieved with -C. Returns true if successful, +type, followed by the message itself. This kind of packing can be achieved +with C. Returns true if successful, false on error. See also L and the documentation for L|IPC::SysV> and L|IPC::Msg>. @@ -4336,6 +4413,17 @@ A L|/my VARLIST> declares the listed variables to be local more than one variable is listed, the list must be placed in parentheses. +Note that with a parenthesised list, L|/undef EXPR> can be used +as a dummy placeholder, for example to skip assignment of initial +values: + + my ( undef, $min, $hour ) = localtime; + +Redeclaring a variable in the same scope or statement will "shadow" the +previous declaration, creating a new instance and preventing access to +the previous one. This is usually undesired and, if warnings are enabled, +will result in a warning in the C category. + The exact semantics and interface of TYPE and ATTRS are still evolving. TYPE may be a bareword, a constant declared with L|constant>, or L|/__PACKAGE__>. It @@ -4345,12 +4433,6 @@ and attributes are handled using the L pragma, or starting from Perl 5.8.0 also via the L module. See L for details. -Note that with a parenthesised list, L|/undef EXPR> can be used -as a dummy placeholder, for example to skip assignment of initial -values: - - my ( undef, $min, $hour ) = localtime; - =item next LABEL X X @@ -4419,8 +4501,11 @@ X X X X X X =for Pod::Functions convert a string to an octal number Interprets EXPR as an octal string and returns the corresponding -value. (If EXPR happens to start off with C<0x>, interprets it as a -hex string. If EXPR starts off with C<0b>, it is interpreted as a +value. An octal string consists of octal digits and, as of Perl 5.33.5, +an optional C<0o> or C prefix. Each octal digit may be preceded by +a single underscore, which will be ignored. +(If EXPR happens to start off with C<0x> or C, interprets it as a +hex string. If EXPR starts off with C<0b> or C, it is interpreted as a binary string. Leading whitespace is ignored in all three cases.) The following will handle decimal, binary, octal, and hex in standard Perl notation: @@ -4571,6 +4656,7 @@ filehandle. These affect how the input and output are processed (see L and L for more details). For example: + # loads PerlIO::encoding automatically open(my $fh, "<:encoding(UTF-8)", $filename) || die "Can't open UTF-8 encoded $filename: $!"; @@ -4852,7 +4938,11 @@ An older style is to use a bareword as the filehandle, as Then you can use C as the filehandle, in C<< close FH >> and C<< >> and so on. Note that it's a global variable, so this form is -not recommended when dealing with filehandles other than Perl's built-in ones (e.g. STDOUT and STDIN). +not recommended when dealing with filehandles other than Perl's built-in ones +(e.g. STDOUT and STDIN). In fact, using a bareword for the filehandle is +an error when the C feature has been disabled. This +feature is disabled by default when in the scope of C or later. + =back @@ -5029,7 +5119,7 @@ L|/our VARLIST> declaration. This applies immediately--even within the same statement. package Foo; - use strict; + use v5.36; # which implies "use strict;" $Foo::foo = 23; @@ -5046,7 +5136,7 @@ This works even if the package variable has not been used before, as package variables spring into existence when first used. package Foo; - use strict; + use v5.36; our $foo = 23; # just like $Foo::foo = 23 @@ -5057,7 +5147,7 @@ long as there is no variable with that name is already in scope, you can then reference the package variable again even within the same statement. package Foo; - use strict; + use v5.36; my $foo = $foo; # error, undeclared $foo on right-hand side our $foo = $foo; # no errors @@ -5183,8 +5273,7 @@ of values, as follows: F A Perl internal floating-point value (NV) in native format D A float of long-double precision in native format. (Long doubles are available only if your system supports - long double values _and_ if Perl has been compiled to - support those. Raises an exception otherwise. + long double values. Raises an exception otherwise. Note that there are different long double formats.) p A pointer to a null-terminated string. @@ -5193,7 +5282,10 @@ of values, as follows: u A uuencoded string. U A Unicode character number. Encodes to a character in char- acter mode and UTF-8 (or UTF-EBCDIC in EBCDIC platforms) in - byte mode. + byte mode. Also on EBCDIC platforms, the character number will + be the native EBCDIC value for character numbers below 256. + This allows most programs using this feature to not have to + care which type of platform they are running on. w A BER compressed integer (not an ASN.1 BER, see perlpacktut for details). Its bytes represent an unsigned integer in @@ -5842,7 +5934,7 @@ symbol table the compiler uses for the rest of that block. You can refer to identifiers in other packages than the current one by prefixing the identifier with the package name and a double colon, as in C<$SomePack::var> or C. If package name is omitted, the C
    -package as assumed. That is, C<$::sail> is equivalent to +package is assumed. That is, C<$::sail> is equivalent to C<$main::sail> (as well as to C<$main'sail>, still seen in ancient code, mostly from Perl 4). @@ -6136,6 +6228,18 @@ Will both leave the sentence as is. Normally, when accepting literal string input from the user, L|/quotemeta EXPR> or C<\Q> must be used. +Beware that if you put literal backslashes (those not inside +interpolated variables) between C<\Q> and C<\E>, double-quotish +backslash interpolation may lead to confusing results. If you +I to use literal backslashes within C<\Q...\E>, +consult L. + +Because the result of S \E">> has all metacharacters +quoted, there is no way to insert a literal C<$> or C<@> inside a +C<\Q\E> pair. If protected by C<\>, C<$> will be quoted to become +C<"\\\$">; if not, it is interpreted as the start of an interpolated +scalar. + In Perl v5.14, all non-ASCII characters are quoted in non-UTF-8-encoded strings, but not quoted in UTF-8 strings. @@ -6302,7 +6406,7 @@ versions of Perl with mysterious failures, put this sort of thing at the top of your file to signal that your code will work I on Perls of a recent vintage: - use 5.012; # so readdir assigns to $_ in a lone while test + use v5.12; # so readdir assigns to $_ in a lone while test =item readline EXPR @@ -6344,7 +6448,7 @@ if the result is not defined. ... } -Note that you have can't handle L|/readline EXPR> errors +Note that you can't handle L|/readline EXPR> errors that way with the C filehandle. In that case, you have to open each element of L|perlvar/@ARGV> yourself since L|/eof FILEHANDLE> handles C differently. @@ -6516,7 +6620,9 @@ L|Scalar::Util/blessed> for information about blessing, and L|Scalar::Util/reftype> for information about physical types. Use L method|UNIVERSAL/C<< $obj->isa( TYPE ) >>> for class membership tests, though one must be -sure of blessedness before attempting a method call. +sure of blessedness before attempting a method call. Alternatively, the +L operator|perlop/"Class Instance Operator"> can test class +membership without checking blessedness first. See also L and L. @@ -6526,7 +6632,8 @@ X X X X =for Pod::Functions change a filename Changes the name of a file; an existing file NEWNAME will be -clobbered. Returns true for success, false otherwise. +clobbered. Returns true for success; on failure returns false and sets +L|perlvar/$!>. Behavior of this function varies wildly depending on your system implementation. For example, it will usually not work across file system @@ -6957,7 +7064,7 @@ is the moral equivalent of these two: print(uc($bar), $baz); See L for more details on unary operators and the comma operator, -and L for details on evaluating a hash in scalar contex. +and L for details on evaluating a hash in scalar context. =item seek FILEHANDLE,POSITION,WHENCE X X X @@ -7389,6 +7496,14 @@ X X Causes the script to sleep for (integer) EXPR seconds, or forever if no argument is given. Returns the integer number of seconds actually slept. +EXPR should be a positive integer. If called with a negative integer, +L|/sleep EXPR> does not sleep but instead emits a warning, sets +$! (C), and returns zero. + +C is permitted, but a function call to the underlying platform +implementation still occurs, with any side effects that may have. +C is therefore not exactly identical to not sleeping at all. + May be interrupted if the process receives a signal such as C. eval { @@ -7600,6 +7715,14 @@ Examples: package main; my @new = sort Other::backwards @old; + ## using a prototype with function signature + use feature 'signatures'; + sub function_with_signature :prototype($$) ($one, $two) { + return $one <=> $two + } + + my @new = sort function_with_signature @old; + # guarantee stability use sort 'stable'; my @new = sort { substr($a, 3, 5) cmp substr($b, 3, 5) } @old; @@ -7692,6 +7815,9 @@ eliminate any Cs from the input list. my @result = sort { $a <=> $b } grep { $_ == $_ } @input; +In this version of F, the C function is implemented via the +mergesort algorithm. + =item splice ARRAY,OFFSET,LENGTH,LIST X @@ -7776,16 +7902,15 @@ to specify a pattern that varies at runtime. If PATTERN matches the empty string, the EXPR is split at the match position (between characters). As an example, the following: - print join(':', split(/b/, 'abc')), "\n"; + my @x = split(/b/, "abc"); # ("a", "c") -uses the C in C<'abc'> as a separator to produce the output C. +uses the C in C<'abc'> as a separator to produce the list ("a", "c"). However, this: - print join(':', split(//, 'abc')), "\n"; + my @x = split(//, "abc"); # ("a", "b", "c") -uses empty string matches as separators to produce the output -C; thus, the empty string may be used to split EXPR into a -list of its component characters. +uses empty string matches as separators; thus, the empty string +may be used to split EXPR into a list of its component characters. As a special case for L|/split EPATTERNE,EXPR,LIMIT>, the empty pattern given in @@ -7810,7 +7935,18 @@ S>, but not e.g. S>). In this case, any leading whitespace in EXPR is removed before splitting occurs, and the PATTERN is instead treated as if it were C; in particular, this means that I contiguous whitespace (not just a single space character) is used as -a separator. However, this special treatment can be avoided by specifying +a separator. + + my @x = split(" ", " Quick brown fox\n"); + # ("Quick", "brown", "fox") + + my @x = split(" ", "RED\tGREEN\tBLUE"); + # ("RED", "GREEN", "BLUE") + +Using split in this fashion is very similar to how +LE>|/qwESTRINGE> works. + +However, this special treatment can be avoided by specifying the pattern S> instead of the string S>, thereby allowing only a single space character to be a separator. In earlier Perls this special case was restricted to the use of a plain S> as the @@ -7818,7 +7954,7 @@ pattern argument to split; in Perl 5.18.0 and later this special case is triggered by any expression which evaluates to the simple string S>. As of Perl 5.28, this special-cased whitespace splitting works as expected in -the scope of L<< S>|feature/The +the scope of L<< S>|feature/The 'unicode_strings' feature >>. In previous versions, and outside the scope of that feature, it exhibits L: characters that are whitespace according to Unicode rules but not according to ASCII rules can be @@ -7835,18 +7971,10 @@ the LIMIT value C<1> means that EXPR may be split a maximum of zero times, producing a maximum of one field (namely, the entire value of EXPR). For instance: - print join(':', split(//, 'abc', 1)), "\n"; - -produces the output C, and this: - - print join(':', split(//, 'abc', 2)), "\n"; - -produces the output C, and each of these: - - print join(':', split(//, 'abc', 3)), "\n"; - print join(':', split(//, 'abc', 4)), "\n"; - -produces the output C. + my @x = split(//, "abc", 1); # ("abc") + my @x = split(//, "abc", 2); # ("a", "bc") + my @x = split(//, "abc", 3); # ("a", "b", "c") + my @x = split(//, "abc", 4); # ("a", "b", "c") If LIMIT is negative, it is treated as if it were instead arbitrarily large; as many fields as possible are produced. @@ -7857,13 +7985,13 @@ trailing empty fields are stripped (empty leading fields are always preserved); if all fields are empty, then all fields are considered to be trailing (and are thus stripped in this case). Thus, the following: - print join(':', split(/,/, 'a,b,c,,,')), "\n"; + my @x = split(/,/, "a,b,c,,,"); # ("a", "b", "c") -produces the output C, but the following: +produces only a three element list. - print join(':', split(/,/, 'a,b,c,,,', -1)), "\n"; + my @x = split(/,/, "a,b,c,,,", -1); # ("a", "b", "c", "", "", "") -produces the output C. +produces a six element list. In time-critical applications, it is worthwhile to avoid splitting into more fields than necessary. Thus, when assigning to a list, @@ -7879,23 +8007,21 @@ produces zero fields, regardless of the LIMIT specified. An empty leading field is produced when there is a positive-width match at the beginning of EXPR. For instance: - print join(':', split(/ /, ' abc')), "\n"; + my @x = split(/ /, " abc"); # ("", "abc") -produces the output C<:abc>. However, a zero-width match at the +splits into two elements. However, a zero-width match at the beginning of EXPR never produces an empty field, so that: - print join(':', split(//, ' abc')); + my @x = split(//, " abc"); # (" ", "a", "b", "c") -produces the output S> (rather than S>). +splits into four elements instead of five. An empty trailing field, on the other hand, is produced when there is a match at the end of EXPR, regardless of the length of the match (of course, unless a non-zero LIMIT is given explicitly, such fields are removed, as in the last example). Thus: - print join(':', split(//, ' abc', -1)), "\n"; - -produces the output S>. + my @x = split(//, " abc", -1); # (" ", "a", "b", "c", "") If the PATTERN contains L, @@ -7910,20 +8036,20 @@ does B count towards the LIMIT. Consider the following expressions evaluated in list context (each returned list is provided in the associated comment): - split(/-|,/, "1-10,20", 3) - # ('1', '10', '20') + my @x = split(/-|,/ , "1-10,20", 3); + # ("1", "10", "20") - split(/(-|,)/, "1-10,20", 3) - # ('1', '-', '10', ',', '20') + my @x = split(/(-|,)/ , "1-10,20", 3); + # ("1", "-", "10", ",", "20") - split(/-|(,)/, "1-10,20", 3) - # ('1', undef, '10', ',', '20') + my @x = split(/-|(,)/ , "1-10,20", 3); + # ("1", undef, "10", ",", "20") - split(/(-)|,/, "1-10,20", 3) - # ('1', '-', '10', undef, '20') + my @x = split(/(-)|,/ , "1-10,20", 3); + # ("1", "-", "10", undef, "20") - split(/(-)|(,)/, "1-10,20", 3) - # ('1', '-', undef, '10', undef, ',', '20') + my @x = split(/(-)|(,)/, "1-10,20", 3); + # ("1", "-", undef, "10", undef, ",", "20") =item sprintf FORMAT, LIST X @@ -8202,6 +8328,11 @@ as supported by the compiler used to build Perl: z interpret integer as C types "size_t" or "ssize_t" on Perl 5.14 or later +Note that, in general, using the C modifier (for example, when writing +C<"%ld"> or C<"%lu"> instead of C<"%d"> and C<"%u">) is unnecessary +when used from Perl code. Moreover, it may be harmful, for example on +Windows 64-bit where a long is 32-bits. + As of 5.14, none of these raises an exception if they are not supported on your platform. However, if warnings are enabled, a warning of the L|warnings> warning class is issued on an unsupported @@ -8212,7 +8343,7 @@ conversion flag. Should you instead prefer an exception, do this: If you would like to know about a version dependency before you start running the program, put something like this at its top: - use 5.014; # for hh/j/t/z/ printf modifiers + use v5.14; # for hh/j/t/z/ printf modifiers You can find out whether your Perl supports quads via L: @@ -8323,7 +8454,7 @@ L|/srand EXPR> uses that for the seed; otherwise it it returns the seed. To signal that your code will work I on Perls of a recent vintage: - use 5.014; # so srand returns the seed + use v5.14; # so srand returns the seed If L|/srand EXPR> is not called explicitly, it is called implicitly without a parameter at the first use of the @@ -8537,6 +8668,11 @@ used as a dummy placeholder. However, since initialization of state variables in such lists is currently not possible this would serve no purpose. +Redeclaring a variable in the same scope or statement will "shadow" the +previous declaration, creating a new instance and preventing access to +the previous one. This is usually undesired and, if warnings are enabled, +will result in a warning in the C category. + L|/state VARLIST> is available only if the L feature|feature/The 'state' feature> is enabled or if it is prefixed with C. The @@ -8775,8 +8911,7 @@ X X X For historical reasons, some values work on almost every system supported by Perl: 0 means read-only, 1 means write-only, and 2 means read/write. We know that these values do I work under -OS/390 and on the Macintosh; you probably don't want to -use them in new code. +OS/390; you probably don't want to use them in new code. If the file named by FILENAME does not exist and the L|/open FILEHANDLE,MODE,EXPR> call creates @@ -9266,16 +9401,23 @@ X X X =for Pod::Functions return upper-case version of a string -Returns an uppercased version of EXPR. This is the internal function -implementing the C<\U> escape in double-quoted strings. -It does not attempt to do titlecase mapping on initial letters. See -L|/ucfirst EXPR> for that. +Returns an uppercased version of EXPR. If EXPR is omitted, uses +L|perlvar/$_>. -If EXPR is omitted, uses L|perlvar/$_>. + my $str = uc("Perl is GREAT"); # "PERL IS GREAT" This function behaves the same way under various pragmas, such as in a locale, as L|/lc EXPR> does. +If you want titlecase mapping on initial letters see +L|/ucfirst EXPR> instead. + +B This is the internal function implementing the +L|perlop/"Quote and Quote-like Operators"> escape in double-quoted +strings. + + my $str = "Perl is \Ugreat\E"; # "Perl is GREAT" + =item ucfirst EXPR X X @@ -9511,8 +9653,6 @@ X X X =item use Module -=item use VERSION - =for Pod::Functions load in a module at compile time and import its namespace Imports some semantics into the current package from the named module, @@ -9524,44 +9664,6 @@ package. It is exactly equivalent to except that Module I be a bareword. The importation can be made conditional by using the L module. -In the C form, VERSION may be either a v-string such as -v5.24.1, which will be compared to L|perlvar/$^V> (aka -$PERL_VERSION), or a numeric argument of the form 5.024001, which will -be compared to L|perlvar/$]>. An exception is raised if VERSION -is greater than the version of the current Perl interpreter; Perl will -not attempt to parse the rest of the file. Compare with -L|/require VERSION>, which can do a similar check at run -time. Symmetrically, C allows you to specify that you -want a version of Perl older than the specified one. - -Specifying VERSION as a numeric argument of the form 5.024001 should -generally be avoided as older less readable syntax compared to -v5.24.1. Before perl 5.8.0 released in 2002 the more verbose numeric -form was the only supported syntax, which is why you might see it in - - use v5.24.1; # compile time version check - use 5.24.1; # ditto - use 5.024_001; # ditto; older syntax compatible with perl 5.6 - -This is often useful if you need to check the current Perl version before -L|/use Module VERSION LIST>ing library modules that won't work -with older versions of Perl. -(We try not to do this more than we have to.) - -C also lexically enables all features available in the requested -version as defined by the L pragma, disabling any features -not in the requested version's feature bundle. See L. -Similarly, if the specified Perl version is greater than or equal to -5.12.0, strictures are enabled lexically as -with L|strict>. Any explicit use of -C or C overrides C, even if it comes -before it. Later use of C -will override all behavior of a previous -C, possibly removing the C and C added by -C. C does not -load the F or F -files. - The C forces the L|/require VERSION> and L|/import LIST> to happen at compile time. The L|/require VERSION> makes sure the module is loaded into @@ -9653,17 +9755,76 @@ or no unimport method being found. no strict 'refs'; no warnings; -Care should be taken when using the C form of L|/no -MODULE VERSION LIST>. It is -I meant to be used to assert that the running Perl is of a earlier -version than its argument and I to undo the feature-enabling side effects -of C. - See L for a list of standard modules and pragmas. See L for the C<-M> and C<-m> command-line options to Perl that give L|/use Module VERSION LIST> functionality from the command-line. +=item use VERSION + +=for Pod::Functions enable Perl language features and declare required version + +Lexically enables all features available in the requested version as +defined by the L pragma, disabling any features not in the +requested version's feature bundle. See L. + +VERSION may be either a v-string such as v5.24.1, which will be compared +to L|perlvar/$^V> (aka $PERL_VERSION), or a numeric argument of the +form 5.024001, which will be compared to L|perlvar/$]>. An +exception is raised if VERSION is greater than the version of the current +Perl interpreter; Perl will not attempt to parse the rest of the file. +Compare with L|/require VERSION>, which can do a similar check +at run time. + +If the specified Perl version is 5.12 or higher, strictures are enabled +lexically as with L|strict>. Similarly, if the specified +Perl version is 5.35.0 or higher, L are enabled. Later use of +C will override all behavior of a previous C, +possibly removing the C, C, and C added by it. +C does not load the F, F, or +F files. + +In the current implementation, any explicit use of C or +C overrides C, even if it comes before it. +However, this may be subject to change in a future release of Perl, so new +code should not rely on this fact. It is recommended that a +C declaration be the first significant statement within a +file (possibly after a C statement or any amount of whitespace or +comment), so that its effects happen first, and other pragmata are applied +after it. + +Specifying VERSION as a numeric argument of the form 5.024001 should +generally be avoided as older less readable syntax compared to +v5.24.1. Before perl 5.8.0 released in 2002 the more verbose numeric +form was the only supported syntax, which is why you might see it in +older code. + + use v5.24.1; # compile time version check + use 5.24.1; # ditto + use 5.024_001; # ditto; older syntax compatible with perl 5.6 + +This is often useful if you need to check the current Perl version before +L|/use Module VERSION LIST>ing library modules that won't work +with older versions of Perl. +(We try not to do this more than we have to.) + +Symmetrically, C allows you to specify that you want a version +of Perl older than the specified one. Historically this was added during +early designs of the Raku language (formerly "Perl 6"), so that a Perl 5 +program could begin + + no 6; + +to declare that it is not a Perl 6 program. As the two languages have +different implementations, file naming conventions, and other +infrastructure, this feature is now little used in practice and should be +avoided in newly-written code. + +Care should be taken when using the C form, as it is I +meant to be used to assert that the running Perl is of a earlier version +than its argument and I to undo the feature-enabling side effects +of C. + =item utime LIST X @@ -9768,7 +9929,7 @@ versions of Perl with mysterious syntax errors, put this sort of thing at the top of your file to signal that your code will work I on Perls of a recent vintage: - use 5.012; # so keys/values/each work on arrays + use v5.12; # so keys/values/each work on arrays See also L|/keys HASH>, L|/each HASH>, and L|/sort SUBNAME LIST>. @@ -10258,6 +10419,8 @@ This method keyword is documented in L. =item gt +=item isa + =item le =item lt @@ -10332,4 +10495,26 @@ documented in L. =back +=over + +=item try + +=item catch + +=item finally + +These flow-control keywords related to the experimental C feature are +documented in L. + +=back + +=over + +=item defer + +This flow-control keyword related to the experimental C feature is +documented in L. + +=back + =cut diff --git a/gnu/usr.bin/perl/pod/perlgit.pod b/gnu/usr.bin/perl/pod/perlgit.pod index 6ec1f1ea764..c1e685305f3 100644 --- a/gnu/usr.bin/perl/pod/perlgit.pod +++ b/gnu/usr.bin/perl/pod/perlgit.pod @@ -22,12 +22,9 @@ I. You can make a read-only clone of the repository by running: - % git clone git://github.com/Perl/perl5.git perl + % git clone git@github.com:Perl/perl5.git perl -This uses the git protocol (port 9418). - -If you cannot use the git protocol for firewall reasons, you can also -clone via http: +If you cannot use that for firewall reasons, you can also clone via http: % git clone https://github.com/Perl/perl5.git perl @@ -556,6 +553,60 @@ to push your changes back with the C remote: The C command just updates the C refs, as the objects themselves should have been fetched when pulling from C. +=head2 Working with Github pull requests + +Pull requests typically originate from outside of the C +repository, so if you want to test or work with it locally a vanilla +C from the C repository won't fetch it. + +However Github does provide a mechanism to fetch a pull request to a +local branch. They are available on Github remotes under C, so +you can use C<< git fetch pull/I/head:I >> to make a +local copy. eg. to fetch pull request 9999 to the local branch +C run: + + git fetch origin pull/9999/head:local-branch-name + +and then: + + git checkout local-branch-name + +Note: this branch is not rebased on C, so instead of the +checkout above, you might want: + + git rebase origin/blead local-branch-name + +which rebases C on C, and checks it out. + +Alternatively you can configure the remote to fetch all pull requests +as remote-tracking branches. To do this edit the remote in +F<.git/config>, for example if your github remote is C you'd +have: + + [remote "origin"] + url = git@github.com:/Perl/perl5.git + fetch = +refs/heads/*:refs/remotes/origin/* + +Add a line to map the remote pull request branches to remote-tracking +branches: + + [remote "origin"] + url = git@github.com:/Perl/perl5.git + fetch = +refs/heads/*:refs/remotes/origin/* + fetch = +refs/pull/*/head:refs/remotes/origin/pull/* + +and then do a fetch as normal: + + git fetch origin + +This will create a remote-tracking branch for every pull request, including +closed requests. + +To remove those remote-tracking branches, remove the line added above +and prune: + + git fetch -p origin # or git remote prune origin + =head2 Accepting a patch If you have received a patch file generated using the above section, diff --git a/gnu/usr.bin/perl/pod/perlguts.pod b/gnu/usr.bin/perl/pod/perlguts.pod index 1d9f18aa20a..40379750333 100644 --- a/gnu/usr.bin/perl/pod/perlguts.pod +++ b/gnu/usr.bin/perl/pod/perlguts.pod @@ -1,3 +1,8 @@ +=for comment +The part of this file between =for mg_vtable.pl markers is auto +generated by mg_vtable.pl; any changes there need to be made instead to +mg_vtable.pl + =head1 NAME perlguts - Introduction to the Perl API @@ -21,16 +26,52 @@ Perl has three typedefs that handle Perl's three main data types: Each typedef has specific routines that manipulate the various data types. +=for apidoc_section $AV +=for apidoc Ayh||AV +=for apidoc_section $HV +=for apidoc Ayh||HV +=for apidoc_section $SV +=for apidoc Ayh||SV + =head2 What is an "IV"? Perl uses a special typedef IV which is a simple signed integer type that is guaranteed to be large enough to hold a pointer (as well as an integer). Additionally, there is the UV, which is simply an unsigned IV. -Perl also uses two special typedefs, I32 and I16, which will always be at -least 32-bits and 16-bits long, respectively. (Again, there are U32 and U16, -as well.) They will usually be exactly 32 and 16 bits long, but on Crays -they will both be 64 bits. +Perl also uses several special typedefs to declare variables to hold +integers of (at least) a given size. +Use I8, I16, I32, and I64 to declare a signed integer variable which has +at least as many bits as the number in its name. These all evaluate to +the native C type that is closest to the given number of bits, but no +smaller than that number. For example, on many platforms, a C is +16 bits long, and if so, I16 will evaluate to a C. But on +platforms where a C isn't exactly 16 bits, Perl will use the +smallest type that contains 16 bits or more. + +U8, U16, U32, and U64 are to declare the corresponding unsigned integer +types. + +If the platform doesn't support 64-bit integers, both I64 and U64 will +be undefined. Use IV and UV to declare the largest practicable, and +C> for the absolute maximum unsigned, but which +may not be usable in all circumstances. + +A numeric constant can be specified with L>, +L>, and similar. + +=for apidoc_section $integer +=for apidoc Ayh||I8 +=for apidoc_item ||I16 +=for apidoc_item ||I32 +=for apidoc_item ||I64 +=for apidoc_item ||IV + +=for apidoc Ayh||U8 +=for apidoc_item ||U16 +=for apidoc_item ||U32 +=for apidoc_item ||U64 +=for apidoc_item ||UV =head2 Working with SVs @@ -46,6 +87,9 @@ much of the internals is that PVs are just for strings. Often, for example, a trailing C is tacked on automatically. The non-string use is documented only in this paragraph.) +=for apidoc_section $floating +=for apidoc Ayh||NV + The seven routines are: SV* newSViv(IV); @@ -60,6 +104,9 @@ C is an integer type (C, usually defined as C in F) guaranteed to be large enough to represent the size of any string that perl can handle. +=for apidoc_section $string +=for apidoc Ayh||STRLEN + In the unlikely case of a SV requiring more complex initialization, you can create an empty SV with newSV(len). If C is 0 an empty SV of type NULL is returned, else an SV of type PV is returned with len + 1 (for @@ -113,27 +160,74 @@ Perl's own functions typically add a trailing C for this reason. Nevertheless, you should be very careful when you pass a string stored in an SV to a C function or system call. -To access the actual value that an SV points to, you can use the macros: +To access the actual value that an SV points to, Perl's API exposes +several macros that coerce the actual scalar type into an IV, UV, double, +or string: + +=over + +=item * C (C) and C (C) + +=item * C (C) + +=item * Strings are a bit complicated: + +=over + +=item * Byte string: C or C + +If the Perl string is C<"\xff\xff">, then this returns a 2-byte C. + +This is suitable for Perl strings that represent bytes. + +=item * UTF-8 string: C or C + +If the Perl string is C<"\xff\xff">, then this returns a 4-byte C. + +This is suitable for Perl strings that represent characters. + +B: That C will be encoded via Perl's internal UTF-8 variant, +which means that if the SV contains non-Unicode code points (e.g., +0x110000), then the result may contain extensions over valid UTF-8. +See L for some methods Perl gives +you to check the UTF-8 validity of these macros' returns. - SvIV(SV*) - SvUV(SV*) - SvNV(SV*) - SvPV(SV*, STRLEN len) - SvPV_nolen(SV*) +=item * You can also use C or C +to fetch the SV's raw internal buffer. This is tricky, though; if your Perl +string +is C<"\xff\xff">, then depending on the SV's internal encoding you might get +back a 2-byte B a 4-byte C. +Moreover, if it's the 4-byte string, that could come from either Perl +C<"\xff\xff"> stored UTF-8 encoded, or Perl C<"\xc3\xbf\xc3\xbf"> stored +as raw octets. To differentiate between these you B look up the +SV's UTF8 bit (cf. C) to know whether the source Perl string +is 2 characters (C would be on) or 4 characters (C would be +off). -which will automatically coerce the actual scalar type into an IV, UV, double, -or string. +B Use of C, C, or +similarly-named macros I looking up the SV's UTF8 bit is +almost certainly a bug if non-ASCII input is allowed. -In the C macro, the length of the string returned is placed into the -variable C (this is a macro, so you do I use C<&len>). If you do -not care what the length of the data is, use the C macro. -Historically the C macro with the global variable C has been -used in this case. But that can be quite inefficient because C must +When the UTF8 bit is on, the same B about UTF-8 validity applies +here as for C. + +=back + +(See L for more details.) + +In C, C, and C, the length of the C returned +is placed into the +variable C (these are macros, so you do I use C<&len>). If you do +not care what the length of the data is, use C, +C, or C instead. +The global variable C can also be given to +C/C/C +in this case. But that can be quite inefficient because C must be accessed in thread-local storage in threaded Perl. In any case, remember that Perl allows arbitrary strings of data that may both contain NULs and might not be terminated by a C. -Also remember that C doesn't allow you to safely say C. It might work with your compiler, but it won't work for everyone. Break this sort of statement up into separate assignments: @@ -141,9 +235,11 @@ Break this sort of statement up into separate assignments: SV *s; STRLEN len; char *ptr; - ptr = SvPV(s, len); + ptr = SvPVbyte(s, len); foo(ptr, len); +=back + If you want to know if the scalar value is TRUE, you can use: SvTRUE(SV*) @@ -160,7 +256,7 @@ add space for the trailing C byte (perl's own string functions typically do C). If you want to write to an existing SV's buffer and set its value to a -string, use SvPV_force() or one of its variants to force the SV to be +string, use SvPVbyte_force() or one of its variants to force the SV to be a PV. This will remove any of various types of non-stringness from the SV while preserving the content of the SV in the PV. This can be used, for example, to append data from an API function to a buffer @@ -190,7 +286,7 @@ copying with: s = SvGROW(sv, needlen + 1); /* something that modifies up to needlen bytes at s, but modifies newlen bytes - eg. newlen = read(fd, s. needlen); + eg. newlen = read(fd, s, needlen); */ s[newlen] = '\0'; SvCUR_set(sv, newlen); @@ -218,6 +314,30 @@ in it, you can use the following macros to check the type of SV you have. SvNOK(SV*) SvPOK(SV*) +Be aware that retrieving the numeric value of an SV can set IOK or NOK +on that SV, even when the SV started as a string. Prior to Perl +5.36.0 retrieving the string value of an integer could set POK, but +this can no longer occur. From 5.36.0 this can be used to distinguish +the original representation of an SV and is intended to make life +simpler for serializers: + + /* references handled elsewhere */ + if (SvIsBOOL(sv)) { + /* originally boolean */ + ... + } + else if (SvPOK(sv)) { + /* originally a string */ + ... + } + else if (SvNIOK(sv)) { + /* originally numeric */ + ... + } + else { + /* something special or undef */ + } + You can get and set the current length of the string stored in an SV with the following macros: @@ -368,6 +488,9 @@ increasing C by one and decreasing C and C. Again, the location of the real start of the C array only comes into play when freeing the array. See C in F. +=for apidoc_section $AV +=for apidoc Amh||AvALLOC|AV* av + =head2 What's Really Stored in an SV? Recall that the usual method of determining the type of scalar you have is @@ -513,6 +636,9 @@ overhead). The key is a string pointer; the value is an C. However, once you have an C, to get the actual key and value, use the routines specified below. +=for apidoc_section $HV +=for apidoc Ayh||HE + I32 hv_iterinit(HV*); /* Prepares starting point to traverse hash table */ HE* hv_iternext(HV*); @@ -548,6 +674,7 @@ is only valid for the duration of a single perl process. See L for more information on how to use the hash access functions on tied hashes. +=for apidoc_section $HV =for apidoc Amh|void|PERL_HASH|U32 hash|char *key|STRLEN klen =head2 Hash API Extensions @@ -946,6 +1073,9 @@ string "::" to the package name. The items in the C package are in the stash C in PL_defstash. The items in the C package are in the stash C in C's stash. +=for apidoc_section $GV +=for apidoc Amnh||PL_defstash + To get the stash pointer for a particular package, use the function: HV* gv_stashpv(const char* name, I32 flags) @@ -980,6 +1110,88 @@ as any other SV. For more information on references and blessings, consult L. +=head2 I/O Handles + +Like AVs and HVs, IO objects are another type of non-scalar SV which +may contain input and output L objects or a C +from opendir(). + +You can create a new IO object: + + IO* newIO(); + +Unlike other SVs, a new IO object is automatically blessed into the +L class. + +The IO object contains an input and output PerlIO handle: + + PerlIO *IoIFP(IO *io); + PerlIO *IoOFP(IO *io); + +=for apidoc_section $io +=for apidoc Amh|PerlIO *|IoIFP|IO *io +=for apidoc Amh|PerlIO *|IoOFP|IO *io + +Typically if the IO object has been opened on a file, the input handle +is always present, but the output handle is only present if the file +is open for output. For a file, if both are present they will be the +same PerlIO object. + +Distinct input and output PerlIO objects are created for sockets and +character devices. + +The IO object also contains other data associated with Perl I/O +handles: + + IV IoLINES(io); /* $. */ + IV IoPAGE(io); /* $% */ + IV IoPAGE_LEN(io); /* $= */ + IV IoLINES_LEFT(io); /* $- */ + char *IoTOP_NAME(io); /* $^ */ + GV *IoTOP_GV(io); /* $^ */ + char *IoFMT_NAME(io); /* $~ */ + GV *IoFMT_GV(io); /* $~ */ + char *IoBOTTOM_NAME(io); + GV *IoBOTTOM_GV(io); + char IoTYPE(io); + U8 IoFLAGS(io); + + =for apidoc_sections $io_scn, $formats_section +=for apidoc_section $reports +=for apidoc Amh|IV|IoLINES|IO *io +=for apidoc Amh|IV|IoPAGE|IO *io +=for apidoc Amh|IV|IoPAGE_LEN|IO *io +=for apidoc Amh|IV|IoLINES_LEFT|IO *io +=for apidoc Amh|char *|IoTOP_NAME|IO *io +=for apidoc Amh|GV *|IoTOP_GV|IO *io +=for apidoc Amh|char *|IoFMT_NAME|IO *io +=for apidoc Amh|GV *|IoFMT_GV|IO *io +=for apidoc Amh|char *|IoBOTTOM_NAME|IO *io +=for apidoc Amh|GV *|IoBOTTOM_GV|IO *io +=for apidoc_section $io +=for apidoc Amh|char|IoTYPE|IO *io +=for apidoc Amh|U8|IoFLAGS|IO *io + +Most of these are involved with L. + +IoFLAGs() may contain a combination of flags, the most interesting of +which are C (C<$|>) for autoflush and C, +settable with L<< IO::Handle's untaint() method|IO::Handle/"$io->untaint" >>. + +=for apidoc Amnh||IOf_FLUSH +=for apidoc Amnh||IOf_UNTAINT + +The IO object may also contains a directory handle: + + DIR *IoDIRP(io); + +=for apidoc Amh|DIR *|IoDIRP|IO *io + +suitable for use with PerlDir_read() etc. + +All of these accessors macros are lvalues, there are no distinct +C<_set()> macros to modify the members of the IO object. + =head2 Double-Typed SVs Scalar variables normally contain only one type of value, an integer, @@ -1162,6 +1374,9 @@ C, which is a structure of function pointers and stands for "Magic Virtual Table" to handle the various operations that might be applied to that variable. +=for apidoc_section $magic +=for apidoc Ayh||MGVTBL + The C has five (or sometimes eight) pointers to the following routine types: @@ -1208,12 +1423,17 @@ the Perl API, and may not be exported by the Perl library. The last three slots are a recent addition, and for source code compatibility they are only checked for if one of the three flags -MGf_COPY, MGf_DUP or MGf_LOCAL is set in mg_flags. +C, C, or C is set in mg_flags. This means that most code can continue declaring a vtable as a 5-element value. These three are currently used exclusively by the threading code, and are highly subject to change. +=for apidoc_section $magic +=for apidoc Amnh||MGf_COPY +=for apidoc_item ||MGf_DUP +=for apidoc_item ||MGf_LOCAL + The current kinds of Magic Virtual Tables are: =for comment @@ -1264,7 +1484,7 @@ will be lost. p PERL_MAGIC_tiedelem vtbl_packelem Tied array or hash element q PERL_MAGIC_tiedscalar vtbl_packelem Tied scalar or handle r PERL_MAGIC_qr vtbl_regexp Precompiled qr// regex - S PERL_MAGIC_sig (none) %SIG hash + S PERL_MAGIC_sig vtbl_sig %SIG hash s PERL_MAGIC_sigelem vtbl_sigelem %SIG hash element t PERL_MAGIC_taint vtbl_taint Taintedness U PERL_MAGIC_uvar vtbl_uvar Available for use by @@ -1288,50 +1508,51 @@ will be lost. extensions -=for apidoc Amnh||PERL_MAGIC_sv -=for apidoc Amnh||PERL_MAGIC_arylen -=for apidoc Amnh||PERL_MAGIC_rhash -=for apidoc Amnh||PERL_MAGIC_debugvar -=for apidoc Amnh||PERL_MAGIC_pos -=for apidoc Amnh||PERL_MAGIC_symtab -=for apidoc Amnh||PERL_MAGIC_backref -=for apidoc Amnh||PERL_MAGIC_arylen_p -=for apidoc Amnh||PERL_MAGIC_bm -=for apidoc Amnh||PERL_MAGIC_overload_table -=for apidoc Amnh||PERL_MAGIC_regdata -=for apidoc Amnh||PERL_MAGIC_regdatum -=for apidoc Amnh||PERL_MAGIC_env -=for apidoc Amnh||PERL_MAGIC_envelem -=for apidoc Amnh||PERL_MAGIC_fm -=for apidoc Amnh||PERL_MAGIC_regex_global -=for apidoc Amnh||PERL_MAGIC_hints -=for apidoc Amnh||PERL_MAGIC_hintselem -=for apidoc Amnh||PERL_MAGIC_isa -=for apidoc Amnh||PERL_MAGIC_isaelem -=for apidoc Amnh||PERL_MAGIC_nkeys -=for apidoc Amnh||PERL_MAGIC_dbfile -=for apidoc Amnh||PERL_MAGIC_dbline -=for apidoc Amnh||PERL_MAGIC_shared -=for apidoc Amnh||PERL_MAGIC_shared_scalar -=for apidoc Amnh||PERL_MAGIC_collxfrm -=for apidoc Amnh||PERL_MAGIC_tied -=for apidoc Amnh||PERL_MAGIC_tiedelem -=for apidoc Amnh||PERL_MAGIC_tiedscalar -=for apidoc Amnh||PERL_MAGIC_qr -=for apidoc Amnh||PERL_MAGIC_sig -=for apidoc Amnh||PERL_MAGIC_sigelem -=for apidoc Amnh||PERL_MAGIC_taint -=for apidoc Amnh||PERL_MAGIC_uvar -=for apidoc Amnh||PERL_MAGIC_uvar_elem -=for apidoc Amnh||PERL_MAGIC_vstring -=for apidoc Amnh||PERL_MAGIC_vec -=for apidoc Amnh||PERL_MAGIC_utf8 -=for apidoc Amnh||PERL_MAGIC_substr -=for apidoc Amnh||PERL_MAGIC_nonelem -=for apidoc Amnh||PERL_MAGIC_defelem -=for apidoc Amnh||PERL_MAGIC_lvref -=for apidoc Amnh||PERL_MAGIC_checkcall -=for apidoc Amnh||PERL_MAGIC_ext +=for apidoc_section $magic +=for apidoc AmnhU||PERL_MAGIC_arylen +=for apidoc_item ||PERL_MAGIC_arylen_p +=for apidoc_item ||PERL_MAGIC_backref +=for apidoc_item ||PERL_MAGIC_bm +=for apidoc_item ||PERL_MAGIC_checkcall +=for apidoc_item ||PERL_MAGIC_collxfrm +=for apidoc_item ||PERL_MAGIC_dbfile +=for apidoc_item ||PERL_MAGIC_dbline +=for apidoc_item ||PERL_MAGIC_debugvar +=for apidoc_item ||PERL_MAGIC_defelem +=for apidoc_item ||PERL_MAGIC_env +=for apidoc_item ||PERL_MAGIC_envelem +=for apidoc_item ||PERL_MAGIC_ext +=for apidoc_item ||PERL_MAGIC_fm +=for apidoc_item ||PERL_MAGIC_hints +=for apidoc_item ||PERL_MAGIC_hintselem +=for apidoc_item ||PERL_MAGIC_isa +=for apidoc_item ||PERL_MAGIC_isaelem +=for apidoc_item ||PERL_MAGIC_lvref +=for apidoc_item ||PERL_MAGIC_nkeys +=for apidoc_item ||PERL_MAGIC_nonelem +=for apidoc_item ||PERL_MAGIC_overload_table +=for apidoc_item ||PERL_MAGIC_pos +=for apidoc_item ||PERL_MAGIC_qr +=for apidoc_item ||PERL_MAGIC_regdata +=for apidoc_item ||PERL_MAGIC_regdatum +=for apidoc_item ||PERL_MAGIC_regex_global +=for apidoc_item ||PERL_MAGIC_rhash +=for apidoc_item ||PERL_MAGIC_shared +=for apidoc_item ||PERL_MAGIC_shared_scalar +=for apidoc_item ||PERL_MAGIC_sig +=for apidoc_item ||PERL_MAGIC_sigelem +=for apidoc_item ||PERL_MAGIC_substr +=for apidoc_item ||PERL_MAGIC_sv +=for apidoc_item ||PERL_MAGIC_symtab +=for apidoc_item ||PERL_MAGIC_taint +=for apidoc_item ||PERL_MAGIC_tied +=for apidoc_item ||PERL_MAGIC_tiedelem +=for apidoc_item ||PERL_MAGIC_tiedscalar +=for apidoc_item ||PERL_MAGIC_utf8 +=for apidoc_item ||PERL_MAGIC_uvar +=for apidoc_item ||PERL_MAGIC_uvar_elem +=for apidoc_item ||PERL_MAGIC_vec +=for apidoc_item ||PERL_MAGIC_vstring =for mg_vtable.pl end @@ -1575,8 +1796,26 @@ Inside such a I the following service is available: =item C +=item C + +=item C + +=item C + +=item C + These macros arrange things to restore the value of integer variable -C at the end of enclosing I. +C at the end of the enclosing I. + +=for apidoc_section $callback +=for apidoc Amh||SAVEINT|int i +=for apidoc Amh||SAVEIV|IV i +=for apidoc Amh||SAVEI32|I32 i +=for apidoc Amh||SAVELONG|long i +=for apidoc Amh||SAVEI8|I8 i +=for apidoc Amh||SAVEI16|I16 i +=for apidoc Amh||SAVEBOOL|bool i +=for apidoc Amh||SAVESTRLEN|STRLEN i =item C @@ -1587,6 +1826,9 @@ C

    . C must be a pointer of a type which survives conversion to C and back, C

    should be able to survive conversion to C and back. +=for apidoc Amh||SAVESPTR|SV * s +=for apidoc Amh||SAVEPPTR|char * p + =item C The refcount of C will be decremented at the end of @@ -1598,6 +1840,8 @@ lifetimes can be wildly different. Also compare C. +=for apidoc Amh||SAVEFREESV|SV* sv + =item C Just like C, but mortalizes C at the end of the current @@ -1605,15 +1849,21 @@ scope instead of decrementing its reference count. This usually has the effect of keeping C alive until the statement that called the currently live scope has finished executing. +=for apidoc Amh||SAVEMORTALIZESV|SV* sv + =item C The C is op_free()ed at the end of I. +=for apidoc Amh||SAVEFREEOP|OP *op + =item C The chunk of memory which is pointed to by C

    is Safefree()ed at the end of I. +=for apidoc Amh||SAVEFREEPV|void * p + =item C Clears a slot in the current scratchpad which corresponds to C at @@ -1628,21 +1878,31 @@ this: SAVEDELETE(PL_defstash, savepv(tmpbuf), strlen(tmpbuf)); +=for apidoc Amh||SAVEDELETE|HV * hv|char * key|I32 length + =item C At the end of I the function C is called with the only argument C

    . +=for apidoc Ayh||DESTRUCTORFUNC_NOCONTEXT_t +=for apidoc Amh||SAVEDESTRUCTOR|DESTRUCTORFUNC_NOCONTEXT_t f|void *p + =item C At the end of I the function C is called with the implicit context argument (if any), and C

    . +=for apidoc Ayh||DESTRUCTORFUNC_t +=for apidoc Amh||SAVEDESTRUCTOR_X|DESTRUCTORFUNC_t f|void *p + =item C The current offset on the Perl internal stack (cf. C) is restored at the end of I. +=for apidoc Amh||SAVESTACK_POS + =back The following API list contains functions, thus one needs to @@ -1650,6 +1910,9 @@ provide pointers to the modifiable data explicitly (either C pointers, or Perlish Cs). Where the above macros take C, a similar function takes C. +Other macros above have functions implementing them, but its probably +best to just use the macro, and not those or the ones below. + =over 4 =item C @@ -1878,8 +2141,8 @@ you can simply write: On a related note, if you do use C<(X)PUSH[iunp]>, then you're going to need a C in your variable declarations so that the C<*PUSH*> -macros can make use of the local variable C. See also C -and C. +macros can make use of the local variable C. See also +C and C. =head2 Scratchpads @@ -1900,6 +2163,10 @@ that have never resided in a pad, but nonetheless act like Is. As of perl 5.21.5, the C flag is no longer used and is defined as 0. C now returns true for anything without C. +=for apidoc_section $pad +=for apidoc Amnh||SVs_PADTMP +=for apidoc AmnhD||SVs_PADMY + The correspondence between OPs and Is is not 1-to-1. Different OPs in the compile tree of the unit can use the same target, if this would not conflict with the expected life of the temporary. @@ -2084,6 +2351,12 @@ C. The children in between can be found by iteratively following the C pointer from the first child to the last (but see below). +=for apidoc_section $optree_construction +=for apidoc Ayh||OP +=for apidoc Ayh||BINOP +=for apidoc Ayh||LISTOP +=for apidoc Ayh||UNOP + There are also some other op types: a C holds a regular expression, and has no children, and a C may or may not have children. If the C field is non-zero, it behaves like a C. To @@ -2091,6 +2364,9 @@ complicate matters, if a C is actually a C op after optimization (see L) it will still have children in accordance with its former type. +=for apidoc Ayh||LOOP +=for apidoc Ayh||PMOP + Finally, there is a C, or logic op. Like a C, this has one or more children, but it doesn't have an C field: so you have to follow C and then the C chain itself to find the @@ -2100,6 +2376,8 @@ execution path. Operators like C, C and C are Cs. Note that in general, C may not point to any of the direct children of the C. +=for apidoc Ayh||LOGOP + Starting in version 5.21.2, perls built with the experimental define C<-DPERL_OP_PARENT> add an extra boolean flag for each op, C. When not set, this indicates that this is the last op in an @@ -2195,11 +2473,14 @@ per-subroutine or recursive stage, like this: PL_peepp = my_peep; static peep_t prev_rpeepp; - static void my_rpeep(pTHX_ OP *o) + static void my_rpeep(pTHX_ OP *first) { - OP *orig_o = o; - for(; o; o = o->op_next) { + OP *o = first, *t = first; + for(; o = o->op_next, t = t->op_next) { /* custom per-op optimisation goes here */ + o = o->op_next; + if (!o || o == t) break; + /* custom per-op optimisation goes AND here */ } prev_rpeepp(aTHX_ orig_o); } @@ -2207,6 +2488,9 @@ per-subroutine or recursive stage, like this: prev_rpeepp = PL_rpeepp; PL_rpeepp = my_rpeep; +=for apidoc_section $optree_manipulation +=for apidoc Ayh||peep_t + =head2 Pluggable runops The compile tree is executed in a runops function. There are two runops @@ -2221,6 +2505,11 @@ file, add the line: PL_runops = my_runops; +=for apidoc_section $debugging +=for apidoc runops_debug +=for apidoc runops_standard +=for apidoc Amnh|runops_proc_t|PL_runops + This function should be as efficient as possible to keep your programs running as fast as possible. @@ -2240,6 +2529,9 @@ this: This will arrange to have C called at the start of compiling every lexical scope. The available hooks are: +=for apidoc_section $lexer +=for apidoc Ayh||BHK + =over 4 =item C @@ -2309,11 +2601,17 @@ derivatives, and produces output similar to C; in fact, C will dump the main root of the code being evaluated, exactly like C<-Dx>. +=for apidoc_section $debugging +=for apidoc dump_eval + Other useful functions are C, which turns a C into an op tree, C which calls C on all the subroutines in a package like so: (Thankfully, these are all xsubs, so there is no op tree) +=for apidoc_section $debugging +=for apidoc dump_sub + (gdb) print Perl_dump_packsubs(PL_defstash) SUB attributes::bootstrap = (xsub 0x811fedc 0) @@ -2331,40 +2629,29 @@ the op tree of the main root. =head1 How multiple interpreters and concurrency are supported -=head2 Background and PERL_IMPLICIT_CONTEXT +=head2 Background and MULTIPLICITY + +=for apidoc_section $concurrency +=for apidoc Amnh||PERL_IMPLICIT_CONTEXT The Perl interpreter can be regarded as a closed box: it has an API for feeding it code or otherwise making it do things, but it also has functions for its own use. This smells a lot like an object, and -there are ways for you to build Perl so that you can have multiple +there is a way for you to build Perl so that you can have multiple interpreters, with one interpreter represented either as a C structure, or inside a thread-specific structure. These structures contain all the context, the state of that interpreter. -One macro controls the major Perl build flavor: MULTIPLICITY. The +The macro that controls the major Perl build flavor is MULTIPLICITY. The MULTIPLICITY build has a C structure that packages all the interpreter -state. With multiplicity-enabled perls, PERL_IMPLICIT_CONTEXT is also -normally defined, and enables the support for passing in a "hidden" first -argument that represents all three data structures. MULTIPLICITY makes -multi-threaded perls possible (with the ithreads threading model, related -to the macro USE_ITHREADS.) - -Two other "encapsulation" macros are the PERL_GLOBAL_STRUCT and -PERL_GLOBAL_STRUCT_PRIVATE (the latter turns on the former, and the -former turns on MULTIPLICITY.) The PERL_GLOBAL_STRUCT causes all the -internal variables of Perl to be wrapped inside a single global struct, -struct perl_vars, accessible as (globals) &PL_Vars or PL_VarsPtr or -the function Perl_GetVars(). The PERL_GLOBAL_STRUCT_PRIVATE goes -one step further, there is still a single struct (allocated in main() -either from heap or from stack) but there are no global data symbols -pointing to it. In either case the global struct should be initialized -as the very first thing in main() using Perl_init_global_struct() and -correspondingly tear it down after perl_free() using Perl_free_global_struct(), -please see F for usage details. You may also need -to use C in your coding to "declare the global variables" -when you are using them. dTHX does this for you automatically. - -=for apidoc Amnh||dVAR +state, which is being passed to various perl functions as a "hidden" +first argument. MULTIPLICITY makes multi-threaded perls possible (with the +ithreads threading model, related to the macro USE_ITHREADS.) + +PERL_IMPLICIT_CONTEXT is a legacy synonym for MULTIPLICITY. + +=for apidoc_section $concurrency +=for apidoc Amnh||MULTIPLICITY To see whether you have non-const data you can use a BSD (or GNU) compatible C: @@ -2379,11 +2666,6 @@ and the C is , external symbols referred to. The test F does this kind of symbol sanity checking on C. -For backward compatibility reasons defining just PERL_GLOBAL_STRUCT -doesn't actually hide all symbols inside a big global struct: some -PerlIO_xxx vtables are left visible. The PERL_GLOBAL_STRUCT_PRIVATE -then hides everything (see how the PERLIO_FUNCS_DECL is used). - All this obviously requires a way for the Perl internal functions to be either subroutines taking some kind of structure as the first argument, or subroutines taking nothing as the first argument. To @@ -2414,6 +2696,9 @@ function used within the Perl guts: STATIC becomes "static" in C, and may be #define'd to nothing in some configurations in the future. +=for apidoc_section $directives +=for apidoc Ayh||STATIC + A public function (i.e. part of the internal API, but not necessarily sanctioned for use in extensions) begins like this: @@ -2427,17 +2712,18 @@ The first character could be 'p' for a B

    rototype, 'a' for Brgument, or 'd' for Beclaration, so we have C, C and C, and their variants. +=for apidoc_section $concurrency =for apidoc Amnh||aTHX =for apidoc Amnh||aTHX_ =for apidoc Amnh||dTHX =for apidoc Amnh||pTHX =for apidoc Amnh||pTHX_ -When Perl is built without options that set PERL_IMPLICIT_CONTEXT, there is no +When Perl is built without options that set MULTIPLICITY, there is no first argument containing the interpreter's context. The trailing underscore in the pTHX_ macro indicates that the macro expansion needs a comma after the context argument because other arguments follow it. If -PERL_IMPLICIT_CONTEXT is not defined, pTHX_ will be ignored, and the +MULTIPLICITY is not defined, pTHX_ will be ignored, and the subroutine is not prototyped to take the extra argument. The form of the macro without the trailing underscore is used when there are no additional explicit arguments. @@ -2446,7 +2732,7 @@ When a core function calls another, it must pass the context. This is normally hidden via macros. Consider C. It expands into something like this: - #ifdef PERL_IMPLICIT_CONTEXT + #ifdef MULTIPLICITY #define sv_setiv(a,b) Perl_sv_setiv(aTHX_ a, b) /* can't do this for vararg functions, see below */ #else @@ -2479,6 +2765,7 @@ need only be aware of [pad]THX. =head2 So what happened to dTHR? +=for apidoc_section $concurrency =for apidoc Amnh||dTHR C was introduced in perl 5.005 to support the older thread model. @@ -2489,11 +2776,11 @@ to be a no-op. =head2 How do I use all this in extensions? -When Perl is built with PERL_IMPLICIT_CONTEXT, extensions that call +When Perl is built with MULTIPLICITY, extensions that call any functions in the Perl API will need to pass the initial context argument somehow. The kicker is that you will need to write it in such a way that the extension still compiles when Perl hasn't been -built with PERL_IMPLICIT_CONTEXT enabled. +built with MULTIPLICITY enabled. There are three ways to do this. First, the easy but inefficient way, which is also the default, in order to maintain source compatibility @@ -2503,7 +2790,7 @@ Thus, something like: sv_setiv(sv, num); -in your extension will translate to this when PERL_IMPLICIT_CONTEXT is +in your extension will translate to this when MULTIPLICITY is in effect: Perl_sv_setiv(Perl_get_context(), sv, num); @@ -2594,13 +2881,6 @@ Never add a comma after C yourself--always use the form of the macro with the underscore for functions that take explicit arguments, or the form without the argument for functions with no explicit arguments. -If one is compiling Perl with the C<-DPERL_GLOBAL_STRUCT> the C -definition is needed if the Perl global variables (see F -or F) are accessed in the function and C is not -used (the C includes the C if necessary). One notices -the need for C only with the said compile-time define, because -otherwise the Perl global variables are visible as-is. - =head2 Should I do anything special if I call perl from multiple threads? If you create interpreters in one thread and then proceed to call them in @@ -2621,9 +2901,16 @@ thread as the first thing you do: ... other Perl API calls on some_perl go here ... +=for apidoc_section $embedding +=for apidoc Amh|void|PERL_SET_CONTEXT|PerlInterpreter* i + +(You can always get the current context via C.) + +=for apidoc Amnh|PerlInterpreter*|PERL_GET_CONTEXT| + =head2 Future Plans and PERL_IMPLICIT_SYS -Just as PERL_IMPLICIT_CONTEXT provides a way to bundle up everything +Just as MULTIPLICITY provides a way to bundle up everything that the interpreter knows about itself and pass it around, so too are there plans to allow the interpreter to bundle up everything it knows about the environment it's running on. This is enabled with the @@ -2689,14 +2976,6 @@ following macros for portability NVff NV %f-like NVgf NV %g-like -=for apidoc Amnh||IVdf -=for apidoc Amnh||UVuf -=for apidoc Amnh||UVof -=for apidoc Amnh||UVxf -=for apidoc Amnh||NVef -=for apidoc Amnh||NVff -=for apidoc Amnh||NVgf - These will take care of 64-bit integers and long doubles. For example: @@ -2716,10 +2995,11 @@ with PTR2UV(). The contents of SVs may be printed using the C format, like so: - Perl_croak(aTHX_ "This croaked because: %" SVf "\n", SvfARG(err_msg)) + Perl_croak(aTHX_ "This croaked because: %" SVf "\n", SVfARG(err_msg)) where C is an SV. +=for apidoc_section $io_formats =for apidoc Amnh||SVf =for apidoc Amh||SVfARG|SV *sv @@ -2776,6 +3056,12 @@ UTF-8 in order to get good results and avoid Wide-character warnings. One way to do this for typical filehandles is to invoke perl with the C<-C>> parameter. (See Llist]>. +=for apidoc_section $io_formats +=for apidoc Amnh||UTF8f +=for apidoc Amh||UTF8fARG|bool is_utf8|Size_t byte_len|char *str + +=cut + =head2 Formatted Printing of C and C The most general way to do this is to cast them to a UV or IV, and @@ -2790,6 +3076,11 @@ clutter to use the C<%z> length modifier (for I): This modifier is not portable, so its use should be restricted to C. +=head2 Formatted Printing of C, C, C and other special sizes + +There are modifiers for these special situations if you are using +C. See L. + =head2 Pointer-To-Integer and Integer-To-Pointer Because pointer size does not necessarily equal integer size, @@ -2800,10 +3091,11 @@ use the follow macros to do it right. PTR2NV(pointer) INT2PTR(pointertotype, integer) -=for apidoc Amh|void *|INT2PTR|type|int value -=for apidoc Amh|UV|PTR2UV|void * -=for apidoc Amh|IV|PTR2IV|void * -=for apidoc Amh|NV|PTR2NV|void * +=for apidoc_section $casting +=for apidoc Amh|type|INT2PTR|type|int value +=for apidoc Amh|UV|PTR2UV|void * ptr +=for apidoc Amh|IV|PTR2IV|void * ptr +=for apidoc Amh|NV|PTR2NV|void * ptr For example: @@ -2815,6 +3107,19 @@ and AV *av = ...; UV uv = PTR2UV(av); +There are also + + PTR2nat(pointer) /* pointer to integer of PTRSIZE */ + PTR2ul(pointer) /* pointer to unsigned long */ + +=for apidoc Amh|IV|PTR2nat|void * +=for apidoc Amh|unsigned long|PTR2ul|void * + +And C which gives the native type for an integer the same size as +pointers, such as C or C. + +=for apidoc Ayh|type|PTRV + =head2 Exception Handling There are a couple of macros to do very basic exception handling in XS @@ -2856,10 +3161,6 @@ such manual which details all the functions which are available to XS writers. L is the autogenerated manual for the functions which are not part of the API and are supposedly for internal use only. -=for comment -skip apidoc -The following is an example and shouldn't be read as a real apidoc line - Source documentation is created by putting POD comments into the C source, like this: @@ -2894,7 +3195,7 @@ command line switch. For example: % perl ppport.h --api-info=sv_magicext -For details, see C. +For details, see S>. =head1 Unicode Support @@ -3095,6 +3396,66 @@ There is no published API for dealing with this, as it is subject to change, but you can look at the code for C in F for an example as to how it's currently done. +=head2 How do I pass a Perl string to a C library? + +A Perl string, conceptually, is an opaque sequence of code points. +Many C libraries expect their inputs to be "classical" C strings, which are +arrays of octets 1-255, terminated with a NUL byte. Your job when writing +an interface between Perl and a C library is to define the mapping between +Perl and that library. + +Generally speaking, C and related macros suit this task well. +These assume that your Perl string is a "byte string", i.e., is either +raw, undecoded input into Perl or is pre-encoded to, e.g., UTF-8. + +Alternatively, if your C library expects UTF-8 text, you can use +C and related macros. This has the same effect as encoding +to UTF-8 then calling the corresponding C-related macro. + +Some C libraries may expect other encodings (e.g., UTF-16LE). To give +Perl strings to such libraries +you must either do that encoding in Perl then use C, or +use an intermediary C library to convert from however Perl stores the +string to the desired encoding. + +Take care also that NULs in your Perl string don't confuse the C +library. If possible, give the string's length to the C library; if that's +not possible, consider rejecting strings that contain NUL bytes. + +=head3 What about C, C, etc.? + +Consider a 3-character Perl string C<$foo = "\x64\x78\x8c">. +Perl can store these 3 characters either of two ways: + +=over + +=item * bytes: 0x64 0x78 0x8c + +=item * UTF-8: 0x64 0x78 0xc2 0x8c + +=back + +Now let's say you convert C<$foo> to a C string thus: + + STRLEN strlen; + char *str = SvPV(foo_sv, strlen); + +At this point C could point to a 3-byte C string or a 4-byte one. + +Generally speaking, we want C to be the same regardless of how +Perl stores C<$foo>, so the ambiguity here is undesirable. C +and C solve that by giving predictable output: use +C if your C library expects byte strings, or C +if it expects UTF-8. + +If your C library happens to support both encodings, then C--always +in tandem with lookups to C!--may be safe and (slightly) more +efficient. + +B B Use L's C and C functions +in your tests to ensure consistent handling regardless of Perl's +internal encoding. + =head2 How do I convert a string to UTF-8? If you're mixing UTF-8 and non-UTF-8 strings, it is necessary to upgrade @@ -3210,6 +3571,9 @@ ppaddr you use, set the properties of the custom op with C, and register the structure against the ppaddr using C. A trivial example might look like: +=for apidoc_section $optree_manipulation +=for apidoc Ayh||XOP + static XOP my_xop; static OP *my_pp(pTHX); @@ -3264,6 +3628,19 @@ the only core C, C, can sometimes be a C instead. =item OA_COP +=for apidoc_section $optree_manipulation +=for apidoc Amnh||OA_BASEOP +=for apidoc_item OA_BINOP +=for apidoc_item OA_COP +=for apidoc_item OA_LISTOP +=for apidoc_item OA_LOGOP +=for apidoc_item OA_PADOP +=for apidoc_item OA_PMOP +=for apidoc_item OA_PVOP_OR_SVOP +=for apidoc_item OA_SVOP +=for apidoc_item OA_UNOP +=for apidoc_item OA_LOOP + =back The other C constants should not be used. @@ -3276,6 +3653,9 @@ will be called from C when ops of this type are encountered by the peephole optimizer. I is the OP that needs optimizing; I is the previous OP optimized, whose C points to I. +=for apidoc_section $optree_manipulation +=for apidoc Ayh||Perl_cpeep_t + =back C directly supports the creation of custom ops by name. @@ -3298,9 +3678,14 @@ formed of an array of SV pointers. The base of this stack is pointed to by the interpreter variable C, of type C. +=for apidoc_section $stack +=for apidoc Amnh||PL_stack_base + The head of the stack is C, and points to the most recently-pushed item. +=for apidoc Amnh||PL_stack_sp + Items are pushed to the stack by using the C macro or its variants described above; C, C, C and the typed versions. Note carefully that the non-C versions of these macros do not @@ -3333,6 +3718,9 @@ Items are popped from the stack by using the C macro or its typed versions, There is also a macro C that inspects the topmost item without removing it. +=for apidoc_section $stack +=for apidoc Amnh||TOPs + Note specifically that SV pointers on the value stack do not contribute to the overall reference count of the xVs being referred to. If newly-created xVs are being pushed to the stack you must arrange for them to be destroyed at a @@ -3354,9 +3742,14 @@ C. The base of this stack is pointed to by the interpreter variable C, of type C. +=for apidoc_section $stack +=for apidoc Amnh||PL_markstack + The head of the stack is C, and points to the most recently-pushed item. +=for apidoc Amnh||PL_markstack_ptr + Items are pushed to the stack by using the C macro. Even though the stack itself stores (value) stack indices as integers, the C macro should be given a stack pointer directly; it will calculate the index @@ -3410,20 +3803,28 @@ decremented soon. The base of this stack is pointed to by the interpreter variable C, of type C. +=for apidoc_section $stack +=for apidoc Amnh||PL_tmps_stack + The head of the stack is indexed by C, an integer which stores the index in the array of the most recently-pushed item. +=for apidoc Amnh||PL_tmps_ix + There is no public API to directly push items to the temporaries stack. Instead, the API function C is used to mortalize an xV, adding its address to the temporaries stack. Likewise, there is no public API to read values from the temporaries stack. -Instead. the macros C and C are used. The C +Instead, the macros C and C are used. The C macro establishes the base levels of the temporaries stack, by capturing the current value of C into C and saving the previous value to the save stack. Thereafter, whenever C is invoked all of the temporaries that have been pushed since that level are reclaimed. +=for apidoc_section $stack +=for apidoc Amnh||PL_tmps_floor + While it is common to see these two macros in pairs within an C/ C pair, it is not necessary to match them. It is permitted to invoke C multiple times since the most recent C; for example in a @@ -3450,9 +3851,12 @@ stored using fields of a C, but would have to be large enough to store three pointers in the largest case, which would waste a lot of space in most of the smaller cases. +=for apidoc_section $stack +=for apidoc Amnh||SAVEt_INT + Instead, the stack stores information in a variable-length encoding of C structures. The final value pushed is stored in the C field which encodes -the kind of item held by the preceeding items; the count and types of which +the kind of item held by the preceding items; the count and types of which will depend on what kind of item is being stored. The kind field is pushed last because that will be the first field to be popped when unwinding items from the stack. @@ -3460,11 +3864,17 @@ from the stack. The base of this stack is pointed to by the interpreter variable C, of type C. +=for apidoc_section $stack +=for apidoc Amnh||PL_savestack + The head of the stack is indexed by C, an integer which stores the index in the array at which the next item should be pushed. (Note that this is different to most other stacks, which reference the most recently-pushed item). +=for apidoc_section $stack +=for apidoc Amnh||PL_savestack_ix + Items are pushed to the save stack by using the various C macros. Many of these macros take a variable and store both its address and current value on the save stack, ensuring that value gets restored on scope exit. @@ -3506,11 +3916,18 @@ C, of type C. If enabled, the scope stack names are stored in a separate array pointed to by C, of type C. +=for apidoc_section $stack +=for apidoc Amnh||PL_scopestack +=for apidoc Amnh||PL_scopestack_name + The head of the stack is indexed by C, an integer which stores the index of the array or arrays at which the next item should be pushed. (Note that this is different to most other stacks, which reference the most recently-pushed item). +=for apidoc_section $stack +=for apidoc Amnh||PL_scopestack_ix + Values are pushed to the scope stack using the C macro, which begins a new nested scope. Any items pushed to the save stack are then restored at the next nested invocation of the C macro. @@ -3539,12 +3956,31 @@ loop context that matches the label; C pops contexts until it finds a sub or eval context or similar; C examines sub contexts on the stack. +=for apidoc_section $concurrency +=for apidoc Cyh||PERL_CONTEXT + Each context entry is labelled with a context type, C. Typical context types are C, C etc., as well as C and C which represent a basic scope (as pushed by C) and a sort block. The type determines which part of the context union are valid. +=for apidoc Cyh ||cx_type + +=for apidoc Cmnh||CXt_BLOCK +=for apidoc_item ||CXt_EVAL +=for apidoc_item ||CXt_FORMAT +=for apidoc_item ||CXt_GIVEN +=for apidoc_item ||CXt_LOOP_ARY +=for apidoc_item ||CXt_LOOP_LAZYIV +=for apidoc_item ||CXt_LOOP_LAZYSV +=for apidoc_item ||CXt_LOOP_LIST +=for apidoc_item ||CXt_LOOP_PLAIN +=for apidoc_item ||CXt_NULL +=for apidoc_item ||CXt_SUB +=for apidoc_item ||CXt_SUBST +=for apidoc_item ||CXt_WHEN + The main division in the context struct is between a substitution scope (C) and block scopes, which are everything else. The former is just used while executing C, and won't be discussed further @@ -3564,6 +4000,10 @@ decremented, and the original loop variable is restored. The macro C returns the base of the current context stack, while C is the index of the current frame within that stack. +=for apidoc_section $concurrency +=for apidoc Cmnh|PERL_CONTEXT *|cxstack +=for apidoc Cmnh|I32|cxstack_ix + In fact, the context stack is actually part of a stack-of-stacks system; whenever something unusual is done such as calling a C or tie handler, a new stack is pushed, then popped at the end. @@ -3643,6 +4083,9 @@ along with comments showing roughly what each function does. SvREFCNT_inc_simple_void_NN(cv); */ +=for apidoc_section $concurrency +=for apidoc Cmnh||CXINC + Note that C sets two new floors: for the args stack (to C) and the temps stack (to C). While executing at this scope level, every C (amongst others) will reset the args and @@ -3681,6 +4124,8 @@ stack unwinding code in C would see (in the example above) a C context frame, but without all the subroutine-specific fields set, and crashes would soon ensue. +=for apidoc dounwind + Where the two must be separate, initially set the type to C or C, and later change it to C when doing the C. This is exactly what C does, once it's @@ -3693,6 +4138,9 @@ however, that unlike C, neither of these functions actually decrement the current context stack index; this is done separately using C. +=for apidoc_section $concurrency +=for apidoc Cmh|void|CX_POP|PERL_CONTEXT* cx + There are two main ways that contexts are popped. During normal execution as scopes are exited, functions like C, C and C process and pop just one context using C and @@ -3728,6 +4176,9 @@ Here is a typical example of context popping, as found in C return retop; +=for apidoc_section $concurrency +=for apidoc Cmh||CX_CUR + The steps above are in a very specific order, designed to be the reverse order of when the context was pushed. The first thing to do is to copy and/or protect any return arguments and free any temps in the current @@ -3762,6 +4213,9 @@ other alternative, of decrementing C I processing the frame, would lead to leaks and the like if something died halfway through, or overwriting of the current frame. +=for apidoc_section $concurrency +=for apidoc Cmh|void|CX_LEAVE_SCOPE|PERL_CONTEXT* cx + C itself is safely re-entrant: if only half the savestack items have been popped before dying and getting trapped by eval, then the Cs in C or C will continue where @@ -3846,7 +4300,7 @@ hopefully be cache-friendly. In addition, this means that there's no need to store the size of the slab (see below on why slabs vary in size), because Perl can follow pointers to find the last op. -It might seem possible eliminate slab reference counts altogether, by having +It might seem possible to eliminate slab reference counts altogether, by having all ops implicitly attached to C when allocated and freed when the CV is freed. That would also allow C to skip C altogether, and thus free ops faster. But that doesn't work in those cases where ops need to @@ -3865,6 +4319,11 @@ another pointer. But that would make all CVs larger, even though slab-based op freeing is typically of benefit only for programs that make significant use of string eval. +=for apidoc_section $concurrency +=for apidoc Cmnh| |CVf_SLABBED +=for apidoc_item |OP *|CvROOT|CV * sv +=for apidoc_item |OP *|CvSTART|CV * sv + When the C flag is set, the CV takes responsibility for freeing the slab. If C is not set when the CV is freed or undeffed, it is assumed that a compilation error has occurred, so the op slab is traversed and @@ -3907,7 +4366,7 @@ around, the first slab is always very small. To avoid allocating too many slabs for a single CV, each subsequent slab is twice the size of the previous. Smartmatch expects to be able to allocate an op at run time, run it, and then -throw it away. For that to work the op is simply malloced when PL_compcv hasn't +throw it away. For that to work the op is simply malloced when C hasn't been set up. So all slab-allocated ops are marked as such (C<< ->op_slabbed >>), to distinguish them from malloced ops. diff --git a/gnu/usr.bin/perl/pod/perlhack.pod b/gnu/usr.bin/perl/pod/perlhack.pod index 8e856cfd4ee..3665ba2746e 100644 --- a/gnu/usr.bin/perl/pod/perlhack.pod +++ b/gnu/usr.bin/perl/pod/perlhack.pod @@ -78,6 +78,13 @@ L. % git remote add fork git@github.com:MyUser/perl5.git +For more information, see L<"Connecting to GitHub with SSH"|https://docs.github.com/en/free-pro-team@latest/github/authenticating-to-github/connecting-to-github-with-ssh>. + +If you'd rather use an HTTPS URL for your C see L<"Cloning with +HTTPS URLs"|https://docs.github.com/en/free-pro-team@latest/github/using-git/which-remote-url-should-i-use#cloning-with-https-urls>. + + % git remote add fork https://github.com/MyUser/perl5.git + Then, push your new branch to your fork. % git push -u fork mychange @@ -168,7 +175,7 @@ L. You will need a copy of Git for your computer. You can fetch a copy of the repository using the git protocol: - % git clone git://github.com/Perl/perl5.git perl + % git clone git@github.com:Perl/perl5.git perl This clones the repository and makes a local copy in the F directory. @@ -185,24 +192,6 @@ the tree, see recent commits, subscribe to repository notifications, search for particular commits and more. You may access it at L. -=head2 Read access via rsync - -You can also choose to use rsync to get a copy of the current source -tree for the bleadperl branch and all maintenance branches: - - % rsync -avz rsync://perl5.git.perl.org/perl-current . - % rsync -avz rsync://perl5.git.perl.org/perl-5.12.x . - % rsync -avz rsync://perl5.git.perl.org/perl-5.10.x . - % rsync -avz rsync://perl5.git.perl.org/perl-5.8.x . - % rsync -avz rsync://perl5.git.perl.org/perl-5.6.x . - % rsync -avz rsync://perl5.git.perl.org/perl-5.005xx . - -(Add the C<--delete> option to remove leftover files.) - -To get a full list of the available sync points: - - % rsync perl5.git.perl.org:: - =head2 Write access via git If you have a commit bit, please see L for more details on @@ -372,7 +361,11 @@ tabs to spaces will help this migration. =item * -Try hard not to exceed 79-columns +Try not to exceed 79 columns + +In general, we target 80 column lines. When sticking to 80 columns would lead +to torturous code or rework, it's fine to go longer. Try to keep your excess +past 80 to a minimum. =item * @@ -534,9 +527,9 @@ In most cases, patches to modules in F should be sent upstream and should not be applied to the Perl core individually. If a patch to a file in F absolutely cannot wait for the fix to be made upstream, released to CPAN and copied to blead, you must add (or -update) a C entry in the F<"Porting/Maintainers.pl"> file +update) a C entry in the F file to flag that a local modification has been made. See -F<"Porting/Maintainers.pl"> for more details. +F for more details. In contrast, modules in the F directory are maintained in the core. @@ -903,9 +896,10 @@ Sets PERL_SKIP_TTY_TEST to true before running normal test. =head2 Parallel tests The core distribution can now run its regression tests in parallel on -Unix-like platforms. Instead of running C, set C -in your environment to the number of tests to run in parallel, and run -C. On a Bourne-like shell, this can be done as +Unix-like and Windows platforms. On Unix, instead of running C, set C in your environment to the number of tests to +run in parallel, and run C. On a Bourne-like shell, +this can be done as TEST_JOBS=3 make test_harness # Run 3 tests in parallel @@ -914,9 +908,23 @@ because L needs to be able to schedule individual non-conflicting test scripts itself, and there is no standard interface to C utilities to interact with their job schedulers. -Note that currently some test scripts may fail when run in parallel -(most notably F). If necessary, run just the -failing scripts again sequentially and see if the failures go away. +Tests are normally run in a logical order, with the sanity tests first, +then the main tests of the Perl core functionality, then the tests for +the non-core modules. On many-core systems, this may not use the +hardware as effectively as possible. By also specifying + + TEST_JOBS=19 PERL_TEST_HARNESS_ASAP=1 make -j19 test_harness + +you signal that you want the tests to finish in wall-clock time as short +as possible. After the sanity tests are completed, this causes the +remaining ones to be packed into the available cores as tightly as +we know how. This has its greatest effect on slower, many-core systems. +Throughput was sped up by 20% on an outmoded 24-core system; less on +more recent faster ones with fewer cores. + +Note that the command line above added a C<-j> parameter to make, so as +to cause parallel compilation. This may or may not work on your +platform. =head2 Running tests by hand @@ -1080,7 +1088,7 @@ C, however, failed with output (excerpted) like this: mg.o reentr.o mro.o hv.o av.o run.o pp_hot.o sv.o \ pp.o scope.o pp_ctl.o pp_sys.o doop.o doio.o regexec.o \ utf8.o taint.o deb.o universal.o globals.o perlio.o \ - perlapi.o numeric.o mathoms.o locale.o pp_pack.o pp_sort.o \ + numeric.o mathoms.o locale.o pp_pack.o pp_sort.o \ miniperlmain.o opmini.o perlmini.o pp.o: In function `Perl_pp_pow': pp.c:(.text+0x2db9): undefined reference to `pow' @@ -1093,11 +1101,12 @@ Another P5P contributor recommended installation and use of Devel::PatchPerl for this situation, first to determine the version of perl at the commit in question, then to patch the source code at that point to facilitate a build. - $ perl -MDevel::PatchPerl -e \ - 'print Devel::PatchPerl->determine_version("/path/to/sourcecode"), "\n";' - 5.11.1 - $ perl -MDevel::PatchPerl -e \ - 'Devel::PatchPerl->patch_source("5.11.1", "/path/to/sourcecode");' + $ perl -MDevel::PatchPerl -e \ + 'print Devel::PatchPerl->determine_version("/path/to/sourcecode"), + "\n";' + 5.11.1 + $ perl -MDevel::PatchPerl -e \ + 'Devel::PatchPerl->patch_source("5.11.1", "/path/to/sourcecode");' Once the source was patched, C<./Configure> and C were called and completed successfully, enabling confirmation of the findings in RT @@ -1144,7 +1153,7 @@ source, and we'll do that later on. Gisle Aas's "illustrated perlguts", also known as I, has very helpful pictures: -L +L =item * L and L diff --git a/gnu/usr.bin/perl/pod/perlhacktips.pod b/gnu/usr.bin/perl/pod/perlhacktips.pod index d66869f92bf..32a4eed8ddb 100644 --- a/gnu/usr.bin/perl/pod/perlhacktips.pod +++ b/gnu/usr.bin/perl/pod/perlhacktips.pod @@ -20,7 +20,8 @@ to do that first. =head1 COMMON PROBLEMS -Perl source plays by ANSI C89 rules: no C99 (or C++) extensions. +Perl source now permits some specific C99 features which we know are +supported by all platforms, but mostly plays by ANSI C89 rules. You don't care about some particular platform having broken Perl? I hear there is still a strong demand for J2EE programmers. @@ -43,7 +44,7 @@ APIs, for example: The first one explicitly passes in the context, which is needed for e.g. threaded builds. The second one does that implicitly; do not get them mixed. If you are not passing in a aTHX_, you will need to do a -dTHX (or a dVAR) as the first thing in the function. +dTHX as the first thing in the function. See L for further discussion about context. @@ -80,12 +81,6 @@ right combination of Cs: static const char * const yippee[] = {"hi", "ho", "silver"}; -There is a way to completely hide any modifiable globals (they are all -moved to heap), the compilation setting -C<-DPERL_GLOBAL_STRUCT_PRIVATE>. It is not normally used, but can be -used for testing, read more about it in L. - =item * Not exporting your new function @@ -117,6 +112,203 @@ L. =back +=head2 C99 + +Starting from 5.35.5 we now permit some C99 features in the core C source. +However, code in dual life extensions still needs to be C89 only, because it +needs to compile against earlier version of Perl running on older platforms. +Also note that our headers need to also be valid as C++, because XS extensions +written in C++ need to include them, hence I +can't be used in headers. + +C99 support is still far from complete on all platforms we currently support. +As a baseline we can only assume C89 semantics with the specific C99 features +described below, which we've verified work everywhere. It's fine to probe for +additional C99 features and use them where available, providing there is also a +fallback for compilers that don't support the feature. For example, we use C11 +thread local storage when available, but fall back to POSIX thread specific +APIs otherwise, and we use C for booleans if C<< >> isn't +available. + +Code can use (and rely on) the following C99 features being present + +=over + +=item * + +mixed declarations and code + +=item * + +64 bit integer types + +For consistency with the existing source code, use the typedefs C and +C, instead of using C and C directly. + +=item * + +variadic macros + + void greet(char *file, unsigned int line, char *format, ...); + #define logged_greet(...) greet(__FILE__, __LINE__, __VA_ARGS__); + +Note that C<__VA_OPT__> is a gcc extension not yet in any published standard. + +=item * + +declarations in for loops + + for (const char *p = message; *p; ++p) { + putchar(*p); + } + +=item * + +member structure initialisers + +But not in headers, as support was only added to C++ relatively recently. + +Hence this is fine in C and XS code, but not headers: + + struct message { + char *action; + char *target; + }; + + struct message mcguffin = { + .target = "member structure initialisers", + .action = "Built" + }; + +=item * + +flexible array members + +This is standards conformant: + + struct greeting { + unsigned int len; + char message[]; + }; + +However, the source code already uses the "unwarranted chumminess with the +compiler" hack in many places: + + struct greeting { + unsigned int len; + char message[1]; + }; + +Strictly it B undefined behaviour accessing beyond C, but this +has been a commonly used hack since K&R times, and using it hasn't been a +practical issue anywhere (in the perl source or any other common C code). +Hence it's unclear what we would gain from actively changing to the C99 +approach. + +=item * + +C comments + +All compilers we tested support their use. Not all humans we tested support +their use. + +=back + +Code explicitly should not use any other C99 features. For example + +=over 4 + +=item * + +variable length arrays + +Not supported by B MSVC, and this is not going to change. + +Even "variable" length arrays where the variable is a constant expression +are syntax errors under MSVC. + +=item * + +C99 types in C<< >> + +Use C etc as defined in F + +=item * + +C99 format strings in C<< >> + +C in the VMS libc only added support for C etc very recently, +meaning that there are live supported installations without this, or formats +such as C<%zu>. + +(perl's C etc use parser code code in C, which supports the +C modifier, along with perl-specific formats such as C.) + +=back + +If you want to use a C99 feature not listed above then you need to do one of + +=over 4 + +=item * + +Probe for it in F, set a variable in F, and add fallback logic in the headers for platforms which don't have it. + +=item * + +Write test code and verify that it works on platforms we need to support, before relying on it unconditionally. + +=back + +Likely you want to repeat the same plan as we used to get the current C99 +feature set. See the message at https://markmail.org/thread/odr4fjrn72u2fkpz +for the C99 probes we used before. Note that the two most "fussy" compilers +appear to be MSVC and the vendor compiler on VMS. To date all the *nix +compilers have been far more flexible in what they support. + +On *nix platforms, F attempts to set compiler flags appropriately. +All vendor compilers that we tested defaulted to C99 (or C11) support. +However, older versions of gcc default to C89, or permit I C99 (with +warnings), but forbid I unless C<-std=gnu99> is +added. The alternative C<-std=c99> B seem better, but using it on some +platforms can prevent C<< >> declaring some prototypes being +declared, which breaks the build. gcc's C<-ansi> flag implies C<-std=c89> so we +can no longer set that, hence the Configure option C<-gccansipedantic> now only +adds C<-pedantic>. + +The Perl core source code files (the ones at the top level of the source code +distribution) are automatically compiled with as many as possible of the +C<-std=gnu99>, C<-pedantic>, and a selection of C<-W> flags (see +cflags.SH). Files in F F F etc are compiled with the same +flags as the installed perl would use to compile XS extensions. + +Basically, it's safe to assume that F and F have +picked the best combination of flags for the version of gcc on the platform, +and attempting to add more flags related to enforcing a C dialect will +cause problems either locally, or on other systems that the code is shipped +to. + +We believe that the C99 support in gcc 3.1 is good enough for us, but we don't +have a 19 year old gcc handy to check this :-) +If you have ancient vendor compilers that don't default to C99, the flags +you might want to try are + +=over 4 + +=item AIX + +C<-qlanglvl=stdc99> + +=item HP/UX + +C<-AC99> + +=item Solaris + +C<-xc99> + +=back + =head2 Portability problems The following are common causes of compilation and/or execution @@ -125,29 +317,9 @@ reading. Please test your changes with as many C compilers and platforms as possible; we will, anyway, and it's nice to save oneself from public embarrassment. -If using gcc, you can add the C<-std=c89> option which will hopefully -catch most of these unportabilities. (However it might also catch -incompatibilities in your system's header files.) - -Use the Configure C<-Dgccansipedantic> flag to enable the gcc C<-ansi --pedantic> flags which enforce stricter ANSI rules. - -If using the C note that not all the possible warnings (like -C<-Wuninitialized>) are given unless you also compile with C<-O>. - -Note that if using gcc, starting from Perl 5.9.5 the Perl core source -code files (the ones at the top level of the source code distribution, -but not e.g. the extensions under ext/) are automatically compiled with -as many as possible of the C<-std=c89>, C<-ansi>, C<-pedantic>, and a -selection of C<-W> flags (see cflags.SH). - Also study L carefully to avoid any bad assumptions about the operating system, filesystems, character set, and so forth. -You may once in a while try a "make microperl" to see whether we can -still compile Perl with just the bare minimum of interfaces. (See -README.micro.) - Do not assume an operating system indicates a certain compiler. =over 4 @@ -192,8 +364,8 @@ other words, "long long" is not a portable way to specify 64 bits, and Instead, use the definitions IV, UV, IVSIZE, I32SIZE, and so forth. Avoid things like I32 because they are B guaranteed to be I 32 bits, they are I 32 bits, nor are they -guaranteed to be B or B. If you really explicitly need -64-bit variables, use I64 and U64, but only if guarded by HAS_QUAD. +guaranteed to be B or B. If you explicitly need +64-bit variables, use I64 and U64. =item * @@ -412,40 +584,6 @@ between compilers, you might need to (int). =item * -Using //-comments - - // This function bamfoodles the zorklator. /* BAD */ - -That is C99 or C++. Perl is C89. Using the //-comments is silently -allowed by many C compilers but cranking up the ANSI C89 strictness -(which we like to do) causes the compilation to fail. - -=item * - -Mixing declarations and code - - void zorklator() - { - int n = 3; - set_zorkmids(n); /* BAD */ - int q = 4; - -That is C99 or C++. Some C compilers allow that, but you shouldn't. - -The gcc option C<-Wdeclaration-after-statement> scans for such -problems (by default on starting from Perl 5.9.4). - -=item * - -Introducing variables inside for() - - for(int i = ...; ...; ...) { /* BAD */ - -That is C99 or C++. While it would indeed be awfully nice to have that -also in C89, to limit the scope of the loop variable, alas, we cannot. - -=item * - Mixing signed char pointers with unsigned char pointers int foo(char *s) { ... } @@ -527,29 +665,26 @@ The gcc option C<-Wformat> scans for such problems. =item * -Blindly using variadic macros - -gcc has had them for a while with its own syntax, and C99 brought them -with a standardized syntax. Don't use the former, and use the latter -only if the HAS_C99_VARIADIC_MACROS is defined. - -=item * - Blindly passing va_list Not all platforms support passing va_list to further varargs (stdarg) functions. The right thing to do is to copy the va_list using the Perl_va_copy() if the NEED_VA_COPY is defined. +=for apidoc_section $genconfig +=for apidoc Amnh||NEED_VA_COPY + =item * Using gcc statement expressions val = ({...;...;...}); /* BAD */ -While a nice extension, it's not portable. The Perl code does -admittedly use them if available to gain some extra speed (essentially -as a funky form of inlining), but you shouldn't. +While a nice extension, it's not portable. Historically, Perl used +them in macros if available to gain some extra speed (essentially +as a funky form of inlining), but we now support (or emulate) C99 +C functions, so use them instead. Declare functions as +C to transparently fall back to emulation where needed. =item * @@ -612,33 +747,16 @@ L Assuming the contents of static memory pointed to by the return values of Perl wrappers for C library functions doesn't change. Many C library functions return pointers to static storage that can be overwritten by -subsequent calls to the same or related functions. Perl has -light-weight wrappers for some of these functions, and which don't make -copies of the static memory. A good example is the interface to the -environment variables that are in effect for the program. Perl has -C to get values from the environment. But the return is -a pointer to static memory in the C library. If you are using the value -to immediately test for something, that's fine, but if you save the -value and expect it to be unchanged by later processing, you would be -wrong, but perhaps you wouldn't know it because different C library -implementations behave differently, and the one on the platform you're -testing on might work for your situation. But on some platforms, a -subsequent call to C or related function WILL overwrite -the memory that your first call points to. This has led to some -hard-to-debug problems. Do a L to make a copy, thus -avoiding these problems. You will have to free the copy when you're -done to avoid memory leaks. If you don't have control over when it gets -freed, you'll need to make the copy in a mortal scalar, like so: - - if ((s = PerlEnv_getenv("foo") == NULL) { - ... /* handle NULL case */ - } - else { - s = SvPVX(sv_2mortal(newSVpv(s, 0))); - } - -The above example works only if C<"s"> is C-terminated; otherwise -you have to pass its length to C. +subsequent calls to the same or related functions. Perl has wrappers +for some of these functions. Originally many of those wrappers returned +those volatile pointers. But over time almost all of them have evolved +to return stable copies. To cope with the remaining ones, do a +L to make a copy, thus avoiding these problems. You +will have to free the copy when you're done to avoid memory leaks. If +you don't have control over when it gets freed, you'll need to make the +copy in a mortal scalar, like so + + SvPVX(sv_2mortal(newSVpv(volatile_string, 0))) =back @@ -677,7 +795,7 @@ library functions instead. In this case C can be used to see if C is in C<"list"> and works even if C is C. These functions need an additional parameter to give the string length. In the case of literal string parameters, perl has defined macros that -calculate the length for you. See L. +calculate the length for you. See L. =item * @@ -752,6 +870,10 @@ Use grok_atoUV() instead. strtol() or strtoul() (or their IV/UV-friendly macro disguises, Strtol() and Strtoul(), or Atol() and Atoul() are affected by locale, which is bad. +=for apidoc_section $numeric +=for apidoc AmhD||Atol|const char * nptr +=for apidoc AmhD||Atoul|const char * nptr + =back =head1 DEBUGGING @@ -1000,6 +1122,9 @@ We can also dump out this op: the current op is always stored in C, and we can dump it with C. This'll give us similar output to CPAN module B::Debug. +=for apidoc_section $debugging +=for apidoc Amnh||PL_op + (gdb) print Perl_op_dump(PL_op) { 13 TYPE = add ===> 14 @@ -1105,8 +1230,8 @@ cut-and-pasted code changes, all the other spots should probably be changed, too. Therefore such code should probably be turned into a subroutine or a macro. -cpd (L) is part of the pmd project -(L). pmd was originally written for static +cpd (L) is part of the pmd project +(L). pmd was originally written for static analysis of Java code, but later the cpd part of it was extended to parse also C and C++. @@ -1132,12 +1257,11 @@ coding nose clean. The C<-Wall> is by default on. -The C<-ansi> (and its sidekick, C<-pedantic>) would be nice to be on -always, but unfortunately they are not safe on all platforms, they can -for example cause fatal conflicts with the system headers (Solaris -being a prime example). If Configure C<-Dgccansipedantic> is used, the -C frontend selects C<-ansi -pedantic> for the platforms where -they are known to be safe. +It would be nice for C<-pedantic>) to be on always, but unfortunately it is not +safe on all platforms - for example fatal conflicts with the system headers +(Solaris being a prime example). If Configure C<-Dgccansipedantic> is used, +the C frontend selects C<-pedantic> for the platforms where it is known +to be safe. The following extra flags are added: @@ -1161,11 +1285,11 @@ C<-Wwrite-strings> =item * -C<-Werror=declaration-after-statement> +C<-Werror=pointer-arith> =item * -C<-Werror=pointer-arith> +C<-Werror=vla> =back @@ -1272,7 +1396,7 @@ To get valgrind and for more information see AddressSanitizer ("ASan") consists of a compiler instrumentation module and a run-time C library. ASan is available for a variety of architectures, operating systems, and compilers (see project link below). -It checks for unsafe memory usage, such as use after free and buffer +It checks for unsafe memory usage, such as use after free and buffer overflow conditions, and is fast enough that you can easily compile your debugging or optimized perl with it. Modern versions of ASan check for memory leaks by default on most platforms, otherwise (e.g. x86_64 OS X) @@ -1457,6 +1581,51 @@ on the use of F and basic block profiling with gcc, see the latest GNU CC manual. As of gcc 4.8, this is at L +=head2 callgrind profiling + +callgrind is a valgrind tool for profiling source code. Paired +with kcachegrind (a Qt based UI), it gives you an overview of +where code is taking up time, as well as the ability +to examine callers, call trees, and more. One of its benefits +is you can use it on perl and XS modules that have not been +compiled with debugging symbols. + +If perl is compiled with debugging symbols (C<-g>), you can view +the annotated source and click around, much like Devel::NYTProf's +HTML output. + +For basic usage: + + valgrind --tool=callgrind ./perl ... + +By default it will write output to F, but you +can change that with C<--callgrind-out-file=...> + +To view the data, do: + + kcachegrind callgrind.out.PID + +If you'd prefer to view the data in a terminal, you can use +F. In it's basic form: + + callgrind_annotate callgrind.out.PID | less + +Some useful options are: + +=over 4 + +=item * --threshold + +Percentage of counts (of primary sort event) we are interested in. +The default is 99%, 100% might show things that seem to be missing. + +=item * --auto + +Annotate all source files containing functions that helped reach +the event count threshold. + +=back + =head1 MISCELLANEOUS TRICKS =head2 PERL_DESTRUCT_LEVEL @@ -1511,6 +1680,9 @@ allocate quite a bunch of SVs, which are hidden to avoid recursion. You can bypass the PerlIO layer if you use the SV logging provided by C<-DPERL_MEM_LOG> instead. +=for apidoc_section $debugging +=for apidoc Amnh||PL_sv_serial + =head2 PERL_MEM_LOG If compiled with C<-DPERL_MEM_LOG> (C<-Accflags=-DPERL_MEM_LOG>), both @@ -1678,26 +1850,24 @@ bugs in the past. =head2 When is a bool not a bool? -On pre-C99 compilers, C is defined as equivalent to C. -Consequently assignment of any larger type to a C is unsafe and may be -truncated. The C macro exists to cast it correctly; you may also find -that using it is shorter and clearer than writing out the equivalent -conditional expression longhand. +There wasn't necessarily a standard C type on compilers prior to +C99, and so some workarounds were created. The C and C +macros are still available as alternatives for C and C. +And the C macro was created to correctly cast to a true/false +value in all circumstances, but should no longer be necessary. +Using S I>> should now always work. + +There are no plans to remove any of C, C, nor C. -On those platforms and compilers where C really is a boolean (C++, -C99), it is easy to forget the cast. You can force C to be a C -by compiling with C<-Accflags=-DPERL_BOOL_AS_CHAR>. You may also wish to -run C with something like +=head2 Finding unsafe truncations + +You may wish to run C with something like -Accflags='-Wconversion -Wno-sign-conversion -Wno-shorten-64-to-32' or your compiler's equivalent to make it easier to spot any unsafe truncations that show up. -The C and C macros are available for situations where using them -would clarify intent. (But they always just mean the same as the integers 1 and -0 regardless, so using them isn't compulsory.) - =head2 The .i Targets You can expand the macros in a F file by saying diff --git a/gnu/usr.bin/perl/pod/perlhist.pod b/gnu/usr.bin/perl/pod/perlhist.pod index 6d689e2ee9b..7c4785b3aa5 100644 --- a/gnu/usr.bin/perl/pod/perlhist.pod +++ b/gnu/usr.bin/perl/pod/perlhist.pod @@ -34,8 +34,8 @@ Chris C Williams, Zefram, Ævar Arnfjörð Bjarmason, Stevan Little, Dave Rolsky, Max Maischein, Abigail, Jesse Luehrs, Tony Cook, Dominic Hargreaves, Aaron Crane, Aristotle Pagaltzis, Matthew Horsfall, Peter Martini, Sawyer X, Chad 'Exodist' Granum, Renee Bäcker, Eric Herman, -John SJ Anderson, Karen Etheridge, Zak B. Elep, Tom Hukins, and Richard -Leach. +John SJ Anderson, Karen Etheridge, Zak B. Elep, Tom Hukins, Richard Leach, +and Neil Bowers. =head2 PUMPKIN? @@ -280,7 +280,8 @@ the strings?). 5.004_04-t3 1997-Oct-10 aka perl5.004m4t3 5.004_04-t4 1997-Oct-14 aka perl5.004m4t4 5.004_04 1997-Oct-15 - 5.004_04-m1 1998-Mar-04 (5.004m5t1) Maint. trials for 5.004_05. + 5.004_04-m1 1998-Mar-04 (5.004m5t1) Maint. trials for + 5.004_05. 5.004_04-m2 1998-May-01 5.004_04-m3 1998-May-15 5.004_04-m4 1998-May-19 @@ -705,6 +706,34 @@ the strings?). Tom H 5.33.4 2020-Nov-20 Max M 5.33.5 2020-Dec-20 Richard L 5.33.6 2021-Jan-20 + Renee 5.33.7 2021-Feb-20 + Nicolas R 5.33.8 2021-Mar-20 + Todd R 5.33.9 2021-Apr-20 + + Sawyer X 5.34.0-RC1 2021-May-04 The 5.34 maintenance track + Sawyer X 5.34.0-RC2 2021-May-15 + Sawyer X 5.34.0 2021-May-20 + Steve 5.34.1-RC1 2022-Feb-27 + Steve 5.34.1-RC2 2022-Mar-06 + Steve 5.34.1 2022-Mar-13 + + Ricardo 5.35.0 2021-May-20 The 5.35 development track + Max 5.35.1 2021-Jun-20 + Neil B 5.35.2 2021-Jul-23 + Ether 5.35.3 2021-Aug-20 + Matthew H 5.35.4 2021-Sep-20 + Leon T 5.35.5 2021-Oct-21 + Richard L 5.35.6 2021-Nov-20 + Neil B 5.35.7 2021-Dec-20 + Nicolas R 5.35.8 2022-Jan-20 + Renee 5.35.9 2022-Feb-20 + Sawyer X 5.35.10 2022-Mar-20 + Steve 5.35.11 2022-Apr-20 + + Ricardo 5.36.0-RC1 2022-May-20 The 5.36 maintenance track + Ricardo 5.36.0-RC2 2022-May-20 + Ricardo 5.36.0-RC3 2022-May-22 + Ricardo 5.36.0 2022-May-27 =head2 SELECTED RELEASE SIZES @@ -792,6 +821,8 @@ explained below. 5.28.0 13056 128 27267 1230 41745 3130 10952 2715 8185 218 5.30.0 13535 128 26294 1237 39643 3080 11083 2711 8252 222 5.32.0 14147 127 25562 1255 40869 3098 11334 2734 8407 225 + 5.34.0 14620 126 28150 1262 42711 3138 11535 2774 8791 228 + 5.36.0 15300 129 27899 1270 48275 3236 11899 2863 8858 224 The "core"..."doc" mean the following files from the Perl source code distribution. The glob notation ** means recursively, (.) means @@ -1138,23 +1169,36 @@ the Perl source distribution for somewhat more selected releases. win32 1313 65 1326 65 1331 65 x2p - - - - - - - 5.32.0 - - Configure: 588 1 - Cross : 126 15 - djgpp : 21 7 - h2pl : 24 15 - hints : 363 86 - NetWare : 484 61 - os2 : 552 70 - plan9 : 308 17 - Porting : 1482 75 - qnx : 5 4 - symbian : 307 54 - utils : 583 52 - vms : 527 12 - vos : 12 7 - win32 : 1011 47 + 5.32.0 5.34.0 5.36.0 + + Configure 588 1 592 1 603 1 + Cross 126 15 126 15 122 15 + djgpp 21 7 22 7 - - + h2pl 24 15 24 15 13 15 + hints 363 86 364 86 359 84 + NetWare 484 61 533 61 - - + os2 552 70 580 70 538 70 + plan9 308 17 325 20 318 20 + Porting 1482 75 1514 75 1559 78 + qnx 5 4 5 4 1 4 + symbian 307 54 - - - - + utils 583 52 597 52 607 52 + vms 527 12 549 12 545 12 + vos 12 7 12 7 8 7 + win32 1011 47 1001 46 966 45 + + + + + + + + + + + + + =head2 SELECTED PATCH SIZES diff --git a/gnu/usr.bin/perl/pod/perlintro.pod b/gnu/usr.bin/perl/pod/perlintro.pod index 36cf09e2e85..79f9b206df2 100644 --- a/gnu/usr.bin/perl/pod/perlintro.pod +++ b/gnu/usr.bin/perl/pod/perlintro.pod @@ -1,6 +1,6 @@ =head1 NAME -perlintro -- a brief introduction and overview of Perl +perlintro - a brief introduction and overview of Perl =head1 DESCRIPTION @@ -77,7 +77,7 @@ to be executable first, so C (under Unix). directly the path to your perl executable, like in C<#!/usr/bin/perl>). For more information, including instructions for other platforms such as -Windows and Mac OS, read L. +Windows, read L. =head2 Safety net @@ -93,9 +93,22 @@ problems in your code. They check different things so you need both. A potential problem caught by C will cause your code to stop immediately when it is encountered, while C will merely give a warning (like the command-line switch B<-w>) and let your code run. -To read more about them check their respective manual pages at L +To read more about them, check their respective manual pages at L and L. +A C> (or higher) declaration will +enable both C and C: + + #!/usr/bin/perl + use v5.35; + +In addition to enabling the C and C pragmata, this +declaration will also activate a +L<"feature bundle"|feature/FEATURE BUNDLES>; a collection of named +features that enable many of the more recent additions and changes to the +language, as well as occasionally removing older features found to have +been mistakes in design and discouraged. + =head2 Basic syntax overview A Perl script or program consists of one or more statements. These @@ -161,9 +174,8 @@ A scalar represents a single value: my $answer = 42; Scalar values can be strings, integers or floating point numbers, and Perl -will automatically convert between them as required. There is no need -to pre-declare your variable types, but you have to declare them using -the C keyword the first time you use them. (This is one of the +will automatically convert between them as required. You have to declare +them using the C keyword the first time you use them. (This is one of the requirements of C.) Scalar values can be used in various ways: @@ -172,8 +184,8 @@ Scalar values can be used in various ways: print "The animal is $animal\n"; print "The square of $answer is ", $answer * $answer, "\n"; -There are a number of "magic" scalars with names that look like -punctuation or line noise. These special variables are used for all +Perl defines a number of special scalars with short names, often single +punctuation marks or digits. These variables are used for all kinds of purposes, and are documented in L. The only one you need to know about for now is C<$_> which is the "default variable". It's used as the default argument to a number of functions in Perl, and @@ -326,9 +338,7 @@ running the program. Using C is highly recommended. =head2 Conditional and looping constructs -Perl has most of the usual conditional and looping constructs. As of Perl -5.10, it even has a case/switch statement (spelled C/C). See -L for more details. +Perl has most of the usual conditional and looping constructs. The conditions can be any Perl expression. See the list of operators in the next section for information on comparison and boolean logic operators, diff --git a/gnu/usr.bin/perl/pod/perliol.pod b/gnu/usr.bin/perl/pod/perliol.pod index a4bb7d674f3..2f6f801d9f4 100644 --- a/gnu/usr.bin/perl/pod/perliol.pod +++ b/gnu/usr.bin/perl/pod/perliol.pod @@ -374,6 +374,22 @@ it is pushed above a layer which does not support the interface. (Perl's C does not expect the streams fast C behaviour to change during one "get".) +=for apidoc Amnh||PERLIO_F_APPEND +=for apidoc_item || PERLIO_F_CANREAD +=for apidoc_item ||PERLIO_F_CANWRITE +=for apidoc_item ||PERLIO_F_CRLF +=for apidoc_item ||PERLIO_F_EOF +=for apidoc_item ||PERLIO_F_ERROR +=for apidoc_item ||PERLIO_F_FASTGETS +=for apidoc_item ||PERLIO_F_LINEBUF +=for apidoc_item ||PERLIO_F_OPEN +=for apidoc_item ||PERLIO_F_RDBUF +=for apidoc_item ||PERLIO_F_TEMP +=for apidoc_item ||PERLIO_F_TRUNCATE +=for apidoc_item ||PERLIO_F_UNBUF +=for apidoc_item ||PERLIO_F_UTF8 +=for apidoc_item ||PERLIO_F_WRBUF + =back =head2 Methods in Detail @@ -445,6 +461,12 @@ Used when the layer's open() accepts more arguments than usual. The extra arguments should come not before the C argument. When this flag is used it's up to the layer to validate the args. +=for apidoc Amnh|| PERLIO_K_BUFFERED +=for apidoc_item || PERLIO_K_CANCRLF +=for apidoc_item || PERLIO_K_FASTGETS +=for apidoc_item || PERLIO_K_MULTIARG +=for apidoc_item || PERLIO_K_RAW + =back =item Pushed @@ -513,6 +535,8 @@ numbered higher. For thread safety, when a layer opens a new file descriptor it should if possible open it with the close-on-exec flag initially set. +=for apidoc Amnh||PL_maxsysfd + The I string is an "C-like" string which would match the regular expression C. diff --git a/gnu/usr.bin/perl/pod/perlipc.pod b/gnu/usr.bin/perl/pod/perlipc.pod index b5f7a296194..db1fe3df723 100644 --- a/gnu/usr.bin/perl/pod/perlipc.pod +++ b/gnu/usr.bin/perl/pod/perlipc.pod @@ -190,8 +190,7 @@ info to show that it works; it should be replaced with the real code. #!/usr/bin/perl - use strict; - use warnings; + use v5.36; use POSIX (); use FindBin (); @@ -341,11 +340,16 @@ C calls will always be retried. =item Signals as "faults" -Certain signals like SEGV, ILL, and BUS are generated by virtual memory +Certain signals like SEGV, ILL, BUS and FPE are generated by virtual memory addressing errors and similar "faults". These are normally fatal: there is little a Perl-level handler can do with them. So Perl delivers them immediately rather than attempting to defer them. +It is possible to catch these with a C<%SIG> handler (see L), +but on top of the usual problems of "unsafe" signals the signal is likely +to get rethrown immediately on return from the signal handler, so such +a handler should C or C instead. + =item Signals triggered by operating system state On some operating systems certain signal handlers are supposed to "do @@ -829,8 +833,7 @@ reopen the appropriate handles to STDIN and STDOUT and call other processes. #!/usr/bin/perl # pipe1 - bidirectional communication using two pipe pairs # designed for the socketpair-challenged - use strict; - use warnings; + use v5.36; use IO::Handle; # enable autoflush method before Perl 5.14 pipe(my $parent_rdr, my $child_wtr); # XXX: check failure? pipe(my $child_rdr, my $parent_wtr); # XXX: check failure? @@ -864,8 +867,7 @@ have the socketpair() system call, it will do this all for you. # pipe2 - bidirectional communication using socketpair # "the best ones always go both ways" - use strict; - use warnings; + use v5.36; use Socket; use IO::Handle; # enable autoflush method before Perl 5.14 @@ -945,8 +947,7 @@ communication that might extend to machines outside of your own system. Here's a sample TCP client using Internet-domain sockets: #!/usr/bin/perl - use strict; - use warnings; + use v5.36; use Socket; my $remote = shift || "localhost"; @@ -973,8 +974,7 @@ on a particular interface (like the external side of a gateway or firewall machine), fill this in with your real address instead. #!/usr/bin/perl -T - use strict; - use warnings; + use v5.36; BEGIN { $ENV{PATH} = "/usr/bin:/bin" } use Socket; use Carp; @@ -1008,13 +1008,12 @@ or firewall machine), fill this in with your real address instead. } And here's a multitasking version. It's multitasked in that -like most typical servers, it spawns (fork()s) a slave server to +like most typical servers, it spawns (fork()s) a child server to handle the client request so that the master server can quickly go back to service a new client. #!/usr/bin/perl -T - use strict; - use warnings; + use v5.36; BEGIN { $ENV{PATH} = "/usr/bin:/bin" } use Socket; use Carp; @@ -1133,14 +1132,16 @@ even if we aren't running setuid or setgid. This is always a good idea for servers or any program run on behalf of someone else (like CGI scripts), because it lessens the chances that people from the outside will be able to compromise your system. +Note that perl can be built without taint support. There are two +different modes: in one, B<-T> will silently do nothing. In the other +mode B<-T> results in a fatal error. Let's look at another TCP client. This one connects to the TCP "time" service on a number of different machines and shows how far their clocks differ from the system on which it's being run: #!/usr/bin/perl - use strict; - use warnings; + use v5.36; use Socket; my $SECS_OF_70_YEARS = 2208988800; @@ -1188,9 +1189,8 @@ You can test for these with Perl's B<-S> file test: Here's a sample Unix-domain client: #!/usr/bin/perl + use v5.36; use Socket; - use strict; - use warnings; my $rendezvous = shift || "catsock"; socket(my $sock, PF_UNIX, SOCK_STREAM, 0) || die "socket: $!"; @@ -1205,8 +1205,7 @@ network terminators here because Unix domain sockets are guaranteed to be on the localhost, and thus everything works right. #!/usr/bin/perl -T - use strict; - use warnings; + use v5.36; use Socket; use Carp; @@ -1313,8 +1312,7 @@ service at port 13 of the host name "localhost" and prints out everything that the server there cares to provide. #!/usr/bin/perl - use strict; - use warnings; + use v5.36; use IO::Socket; my $remote = IO::Socket::INET->new( Proto => "tcp", @@ -1369,8 +1367,7 @@ more interesting client than the previous one because it first sends something to the server before fetching the server's response. #!/usr/bin/perl - use strict; - use warnings; + use v5.36; use IO::Socket; unless (@ARGV > 1) { die "usage: $0 host url ..." } my $host = shift(@ARGV); @@ -1450,8 +1447,7 @@ well, which is probably why it's spread to other systems.) Here's the code: #!/usr/bin/perl - use strict; - use warnings; + use v5.36; use IO::Socket; unless (@ARGV == 2) { die "usage: $0 host port" } @@ -1565,8 +1561,7 @@ Chapter 16 of the Camel. Here's the code. #!/usr/bin/perl - use strict; - use warnings; + use v5.36; use IO::Socket; use Net::hostent; # for OOish version of gethostbyaddr @@ -1627,8 +1622,7 @@ using select() to do a timed-out wait for I/O. To do something similar with TCP, you'd have to use a different socket handle for each host. #!/usr/bin/perl - use strict; - use warnings; + use v5.36; use Socket; use Sys::Hostname; @@ -1796,8 +1790,7 @@ programs this way for optimal success, and don't forget to add the B<-T> taint-checking flag to the C<#!> line for servers: #!/usr/bin/perl -T - use strict; - use warnings; + use v5.36; use sigtrap; use Socket; diff --git a/gnu/usr.bin/perl/pod/perllocale.pod b/gnu/usr.bin/perl/pod/perllocale.pod index e03dc84371e..30940a5a1f6 100644 --- a/gnu/usr.bin/perl/pod/perllocale.pod +++ b/gnu/usr.bin/perl/pod/perllocale.pod @@ -86,7 +86,7 @@ Z<> =item Category C: Error and other messages This is used by Perl itself only for accessing operating system error -messages via L<$!|perlvar/$ERRNO> and L<$^E|perlvar/$EXTENDED_OS_ERROR>. +messages via L|perlvar/$ERRNO> and L|perlvar/$EXTENDED_OS_ERROR>. =item Category C: Collation @@ -183,7 +183,7 @@ locale in these cases is not local to a single thread. Another thread may change the locale at any time, which could cause at a minimum that a given thread is operating in a locale it isn't expecting to be in. On some platforms, segfaults can also occur. The locale change need not be -explicit; some operations cause perl to change the locale itself. You +explicit; some operations cause perl itself to change the locale. You are vulnerable simply by having done a S>. By default, Perl itself (outside the L module) @@ -326,8 +326,8 @@ C, and C) use C =item * -B> (and its synonyms C<$ERRNO> and -C<$OS_ERROR>) B> (and its synonym +B|perlvar/$ERRNO>> (and its synonyms C<$ERRNO> and +C<$OS_ERROR>) B L|perlvar/$EXTENDED_OS_ERROR>> (and its synonym C<$EXTENDED_OS_ERROR>) when used as strings use C. =back @@ -341,8 +341,9 @@ nested, and that what is in effect within an inner scope will revert to the outer scope's rules at the end of the inner scope. The string result of any operation that uses locale -information is tainted, as it is possible for a locale to be -untrustworthy. See L. +information is tainted (if your perl supports taint checking), +as it is possible for a locale to be untrustworthy. +See L. Starting in Perl v5.16 in a very limited way, and more generally in v5.22, you can restrict which category or categories are enabled by this @@ -362,7 +363,7 @@ Thus you can say use locale ':messages'; -and only L<$!|perlvar/$ERRNO> and L<$^E|perlvar/$EXTENDED_OS_ERROR> +and only L|perlvar/$ERRNO> and L|perlvar/$EXTENDED_OS_ERROR> will be locale aware. Everything else is unaffected. Since Perl doesn't currently do anything with the C @@ -377,7 +378,7 @@ example, use locale ':!ctype'; use locale ':not_ctype'; -both of which mean to enable locale awarness of all categories but +both of which mean to enable locale awareness of all categories but C. Only one category argument may be specified in a S> if it is of the negated form. @@ -415,10 +416,13 @@ expecting. On some platforms, there can be a race leading to segfaults if two threads call this function nearly simultaneously. This warning does not apply on unthreaded builds, or on perls where C<${^SAFE_LOCALES}> exists and is non-zero; namely Perl 5.28 and later -unthreaded or compiled to be locale-thread-safe. +unthreaded or compiled to be locale-thread-safe. On z/OS systems, this +function becomes a no-op once any thread is started. Thus, on that +system, you can set up the locale before creating any threads, and that +locale will be the one in effect for the entire program. -You can switch locales as often as you wish at run time with the -C function: +Otherwise, you can switch locales as often as you wish at run time with +the C function: # Import locale-handling tool set from POSIX module. # This example uses: setlocale -- the function call @@ -543,7 +547,7 @@ C<-Accflags='-DUSE_THREAD_SAFE_LOCALE'> to F. The initial program is started up using the locale specified from the environment, as currently, described in L. All newly -created threads start with C set to C<"C">>. Each thread may +created threads start with C set to C<"C">. Each thread may use C to query or switch its locale at any time, without affecting any other thread. All locale-dependent operations automatically use their thread's locale. @@ -1154,9 +1158,13 @@ Perl cannot protect you from all possibilities shown in the examples--there is no substitute for your own vigilance--but, when C is in effect, Perl uses the tainting mechanism (see L) to mark string results that become locale-dependent, and -which may be untrustworthy in consequence. Here is a summary of the -tainting behavior of operators and functions that may be affected by -the locale: +which may be untrustworthy in consequence. + +Note that it is possible to compile Perl without taint support, +in which case all taint features silently do nothing. + +Here is a summary of the tainting behavior of operators and functions +that may be affected by the locale: =over 4 @@ -1557,8 +1565,8 @@ the fact that high quality UTF-8 locales are now published for every area of the world (L for ones that are already set-up, but from an earlier version; L for the most up-to-date, but -you have to extract the POSIX information yourself), and that -failing all that you can use the L module to translate to/from +you have to extract the POSIX information yourself), and +failing all that, you can use the L module to translate to/from your locale. So, you'll have to do one of those things if you're using one of these locales, such as Big5 or Shift JIS. For UTF-8 locales, in Perls (pre v5.20) that don't have full UTF-8 locale support, they may diff --git a/gnu/usr.bin/perl/pod/perllol.pod b/gnu/usr.bin/perl/pod/perllol.pod index b3defad78ff..9eef174e606 100644 --- a/gnu/usr.bin/perl/pod/perllol.pod +++ b/gnu/usr.bin/perl/pod/perllol.pod @@ -15,7 +15,7 @@ An array of an array is just a regular old array @AoA that you can get at with two subscripts, like C<$AoA[3][2]>. Here's a declaration of the array: - use 5.010; # so we can use say() + use v5.10; # so we can use say() # assign to our array, an array of array references @AoA = ( @@ -168,7 +168,7 @@ If you wanted just to append to a row, you'd have to do something a bit funnier looking: # add new columns to an existing row - push @{ $AoA[0] }, "wilma", "betty"; # explicit deref + push $AoA[0]->@*, "wilma", "betty"; # explicit deref =head2 Access and Printing @@ -252,7 +252,7 @@ parsable Perl code. For example: [ "george", "jane", "elroy" ], [ "homer", "marge", "bart" ], ); - push @{ $AoA[0] }, "wilma", "betty"; + push $AoA[0]->@*, "wilma", "betty"; show @AoA; will print out: @@ -296,15 +296,9 @@ variable as before. That same loop could be replaced with a slice operation: - @part = @{$AoA[4]}[7..12]; + @part = $AoA[4]->@[ 7..12 ]; -or spaced out a bit: - - @part = @{ $AoA[4] } [ 7..12 ]; - -But as you might well imagine, this can get pretty rough on the reader. - -Ah, but what if you wanted a I, such as having +Now, what if you wanted a I, such as having $x run from 4..8 and $y run from 7 to 12? Hmm... here's the simple way: @newAoA = (); @@ -317,13 +311,13 @@ $x run from 4..8 and $y run from 7 to 12? Hmm... here's the simple way: We can reduce some of the looping through slices for ($x = 4; $x <= 8; $x++) { - push @newAoA, [ @{ $AoA[$x] } [ 7..12 ] ]; + push @newAoA, [ $AoA[$x]->@[ 7..12 ] ]; } If you were into Schwartzian Transforms, you would probably have selected map for that - @newAoA = map { [ @{ $AoA[$_] } [ 7..12 ] ] } 4 .. 8; + @newAoA = map { [ $AoA[$_]->@[ 7..12 ] ] } 4 .. 8; Although if your manager accused you of seeking job security (or rapid insecurity) through inscrutable code, it would be hard to argue. :-) @@ -336,7 +330,7 @@ If I were you, I'd put that in a function: $y_lo, $y_hi) = @_; return map { - [ @{ $lrr->[$_] } [ $y_lo .. $y_hi ] ] + [ $lrr->[$_]->@[ $y_lo .. $y_hi ] ] } $x_lo .. $x_hi; } diff --git a/gnu/usr.bin/perl/pod/perlmod.pod b/gnu/usr.bin/perl/pod/perlmod.pod index fdfb3811e5e..5c682738206 100644 --- a/gnu/usr.bin/perl/pod/perlmod.pod +++ b/gnu/usr.bin/perl/pod/perlmod.pod @@ -345,6 +345,10 @@ X<$?> Inside of a C block, the value of C<${^GLOBAL_PHASE}> will be C<"END">. +Similar to an C block are C blocks, though they operate on the +lifetime of individual block scopes, rather than the program as a whole. They +are documented in L. + C, C and C code blocks are useful to catch the transition between the compilation phase and the execution phase of the main program. @@ -444,8 +448,7 @@ create a file called F and start with this template: package Some::Module; # assumes Some/Module.pm - use strict; - use warnings; + use v5.36; # Get the import method from Exporter to export functions and # variables diff --git a/gnu/usr.bin/perl/pod/perlmodinstall.pod b/gnu/usr.bin/perl/pod/perlmodinstall.pod index bb1b7bd49fe..a4dc20491c5 100644 --- a/gnu/usr.bin/perl/pod/perlmodinstall.pod +++ b/gnu/usr.bin/perl/pod/perlmodinstall.pod @@ -79,11 +79,11 @@ You can get gzip from L Or, you can combine this step with the next to save disk space: - gzip -dc yourmodule.tar.gz | tar -xf - + gzip -dc yourmodule.tar.gz | tar -xof - B. UNPACK -Unpack the result with C +Unpack the result with C C. BUILD @@ -139,10 +139,7 @@ If you used WinZip, this was already done for you. C. BUILD -You'll need the C utility, available at -L -or dmake, available on CPAN. -L +You'll need either C or C. Does the module require compilation (i.e. does it have files that end in .xs, .c, .h, .y, .cc, .cxx, or .C)? If it does, life is now @@ -166,37 +163,6 @@ While still in that directory, type: =item * -B - - A. DECOMPRESS - -djtarx ( L ) -will both uncompress and unpack. - - B. UNPACK - -See above. - - C. BUILD - -Go into the newly-created directory and type: - - perl Makefile.PL - make test - -You will need the packages mentioned in F -in the Perl distribution. - - D. INSTALL - -While still in that directory, type: - - make install - -You will need the packages mentioned in F in the Perl distribution. - -=item * - B Get the EMX development suite and gzip/tar from Hobbes ( diff --git a/gnu/usr.bin/perl/pod/perlmodlib.PL b/gnu/usr.bin/perl/pod/perlmodlib.PL index 2a29ec71812..909bd9b8df7 100644 --- a/gnu/usr.bin/perl/pod/perlmodlib.PL +++ b/gnu/usr.bin/perl/pod/perlmodlib.PL @@ -64,7 +64,6 @@ for my $filename (@files) { die "p5p-controlled module $filename missing =head1 NAME\n" if $filename !~ m{^(dist/|cpan/)}n # under our direct control && $filename !~ m{/_[^/]+\z} # not private - && $filename !~ m{/unicore/} # not unicore && $filename ne 'lib/meta_notation.pm' # no pod && $filename ne 'lib/overload/numbers.pm'; # no pod warn "$filename missing =head1 NAME\n" unless $Quiet; @@ -205,7 +204,8 @@ double quotes should be used instead of single quotes). 'find { wanted => sub { print canonpath $_ if /\.pm\z/ }, no_chdir => 1 }, @INC' -(The -T is here to prevent '.' from being listed in @INC.) +(The -T is here to prevent @INC from being populated by C, +C, and C.) They should all have their own documentation installed and accessible via your system man(1) command. If you do not have a B program, you can use the Perl B program instead, which @@ -333,773 +333,7 @@ Miscellaneous Modules =back -The list of the registered CPAN sites follows. -Please note that the sorting order is alphabetical on fields: - -Continent - | - |-->Country - | - |-->[state/province] - | - |-->ftp - | - |-->[http] - -and thus the North American servers happen to be listed between the -European and the South American sites. - -Registered CPAN sites - -=for maintainers -Generated by Porting/make_modlib_cpan.pl - -=head2 Africa - -=over 4 - -=item South Africa - - http://mirror.is.co.za/pub/cpan/ - ftp://ftp.is.co.za/pub/cpan/ - http://cpan.mirror.ac.za/ - ftp://cpan.mirror.ac.za/ - http://cpan.saix.net/ - ftp://ftp.saix.net/pub/CPAN/ - http://ftp.wa.co.za/pub/CPAN/ - ftp://ftp.wa.co.za/pub/CPAN/ - -=item Uganda - - http://mirror.ucu.ac.ug/cpan/ - -=item Zimbabwe - - http://mirror.zol.co.zw/CPAN/ - ftp://mirror.zol.co.zw/CPAN/ - -=back - -=head2 Asia - -=over 4 - -=item Bangladesh - - http://mirror.dhakacom.com/CPAN/ - ftp://mirror.dhakacom.com/CPAN/ - -=item China - - http://cpan.communilink.net/ - http://ftp.cuhk.edu.hk/pub/packages/perl/CPAN/ - ftp://ftp.cuhk.edu.hk/pub/packages/perl/CPAN/ - http://mirrors.hust.edu.cn/CPAN/ - http://mirrors.neusoft.edu.cn/cpan/ - http://mirror.lzu.edu.cn/CPAN/ - http://mirrors.163.com/cpan/ - http://mirrors.sohu.com/CPAN/ - http://mirrors.ustc.edu.cn/CPAN/ - ftp://mirrors.ustc.edu.cn/CPAN/ - http://mirrors.xmu.edu.cn/CPAN/ - ftp://mirrors.xmu.edu.cn/CPAN/ - http://mirrors.zju.edu.cn/CPAN/ - -=item India - - http://cpan.excellmedia.net/ - http://perlmirror.indialinks.com/ - -=item Indonesia - - http://kambing.ui.ac.id/cpan/ - http://cpan.pesat.net.id/ - http://mirror.poliwangi.ac.id/CPAN/ - http://kartolo.sby.datautama.net.id/CPAN/ - http://mirror.wanxp.id/cpan/ - -=item Iran - - http://mirror.yazd.ac.ir/cpan/ - -=item Israel - - http://biocourse.weizmann.ac.il/CPAN/ - -=item Japan - - http://ftp.jaist.ac.jp/pub/CPAN/ - ftp://ftp.jaist.ac.jp/pub/CPAN/ - http://mirror.jre655.com/CPAN/ - ftp://mirror.jre655.com/CPAN/ - ftp://ftp.kddilabs.jp/CPAN/ - http://ftp.nara.wide.ad.jp/pub/CPAN/ - ftp://ftp.nara.wide.ad.jp/pub/CPAN/ - http://ftp.riken.jp/lang/CPAN/ - ftp://ftp.riken.jp/lang/CPAN/ - ftp://ftp.u-aizu.ac.jp/pub/CPAN/ - http://ftp.yz.yamagata-u.ac.jp/pub/lang/cpan/ - ftp://ftp.yz.yamagata-u.ac.jp/pub/lang/cpan/ - -=item Kazakhstan - - http://mirror.neolabs.kz/CPAN/ - ftp://mirror.neolabs.kz/CPAN/ - -=item Philippines - - http://mirror.pregi.net/CPAN/ - ftp://mirror.pregi.net/CPAN/ - http://mirror.rise.ph/cpan/ - ftp://mirror.rise.ph/cpan/ - -=item Qatar - - http://mirror.qnren.qa/CPAN/ - ftp://mirror.qnren.qa/CPAN/ - -=item Republic of Korea - - http://cpan.mirror.cdnetworks.com/ - ftp://cpan.mirror.cdnetworks.com/CPAN/ - http://ftp.kaist.ac.kr/pub/CPAN/ - ftp://ftp.kaist.ac.kr/CPAN/ - http://ftp.kr.freebsd.org/pub/CPAN/ - ftp://ftp.kr.freebsd.org/pub/CPAN/ - http://mirror.navercorp.com/CPAN/ - http://ftp.neowiz.com/CPAN/ - ftp://ftp.neowiz.com/CPAN/ - -=item Singapore - - http://cpan.mirror.choon.net/ - http://mirror.0x.sg/CPAN/ - ftp://mirror.0x.sg/CPAN/ - -=item Taiwan - - http://cpan.cdpa.nsysu.edu.tw/Unix/Lang/CPAN/ - ftp://cpan.cdpa.nsysu.edu.tw/Unix/Lang/CPAN/ - http://cpan.stu.edu.tw/ - ftp://ftp.stu.edu.tw/CPAN/ - http://ftp.yzu.edu.tw/CPAN/ - ftp://ftp.yzu.edu.tw/CPAN/ - http://cpan.nctu.edu.tw/ - ftp://cpan.nctu.edu.tw/ - http://ftp.ubuntu-tw.org/mirror/CPAN/ - ftp://ftp.ubuntu-tw.org/mirror/CPAN/ - -=item Turkey - - http://cpan.ulak.net.tr/ - ftp://ftp.ulak.net.tr/pub/perl/CPAN/ - http://mirror.vit.com.tr/mirror/CPAN/ - ftp://mirror.vit.com.tr/CPAN/ - -=item Viet Nam - - http://mirrors.digipower.vn/CPAN/ - http://mirror.downloadvn.com/cpan/ - http://mirrors.vinahost.vn/CPAN/ - -=back - -=head2 Europe - -=over 4 - -=item Austria - - http://cpan.inode.at/ - ftp://cpan.inode.at/ - http://mirror.easyname.at/cpan/ - ftp://mirror.easyname.at/cpan/ - http://gd.tuwien.ac.at/languages/perl/CPAN/ - ftp://gd.tuwien.ac.at/pub/CPAN/ - -=item Belarus - - http://ftp.byfly.by/pub/CPAN/ - ftp://ftp.byfly.by/pub/CPAN/ - http://mirror.datacenter.by/pub/CPAN/ - ftp://mirror.datacenter.by/pub/CPAN/ - -=item Belgium - - http://ftp.belnet.be/ftp.cpan.org/ - ftp://ftp.belnet.be/mirror/ftp.cpan.org/ - http://cpan.cu.be/ - http://lib.ugent.be/CPAN/ - http://cpan.weepeetelecom.be/ - -=item Bosnia and Herzegovina - - http://cpan.mirror.ba/ - ftp://ftp.mirror.ba/CPAN/ - -=item Bulgaria - - http://mirrors.neterra.net/CPAN/ - ftp://mirrors.neterra.net/CPAN/ - http://mirrors.netix.net/CPAN/ - ftp://mirrors.netix.net/CPAN/ - -=item Croatia - - http://ftp.carnet.hr/pub/CPAN/ - ftp://ftp.carnet.hr/pub/CPAN/ - -=item Czech Republic - - http://mirror.dkm.cz/cpan/ - ftp://mirror.dkm.cz/cpan/ - ftp://ftp.fi.muni.cz/pub/CPAN/ - http://mirrors.nic.cz/CPAN/ - ftp://mirrors.nic.cz/pub/CPAN/ - http://cpan.mirror.vutbr.cz/ - ftp://mirror.vutbr.cz/cpan/ - -=item Denmark - - http://www.cpan.dk/ - http://mirrors.dotsrc.org/cpan/ - ftp://mirrors.dotsrc.org/cpan/ - -=item Finland - - ftp://ftp.funet.fi/pub/languages/perl/CPAN/ - -=item France - - http://ftp.ciril.fr/pub/cpan/ - ftp://ftp.ciril.fr/pub/cpan/ - http://distrib-coffee.ipsl.jussieu.fr/pub/mirrors/cpan/ - ftp://distrib-coffee.ipsl.jussieu.fr/pub/mirrors/cpan/ - http://ftp.lip6.fr/pub/perl/CPAN/ - ftp://ftp.lip6.fr/pub/perl/CPAN/ - http://mirror.ibcp.fr/pub/CPAN/ - ftp://ftp.oleane.net/pub/CPAN/ - http://cpan.mirrors.ovh.net/ftp.cpan.org/ - ftp://cpan.mirrors.ovh.net/ftp.cpan.org/ - http://cpan.enstimac.fr/ - -=item Germany - - http://mirror.23media.de/cpan/ - ftp://mirror.23media.de/cpan/ - http://artfiles.org/cpan.org/ - ftp://artfiles.org/cpan.org/ - http://mirror.bibleonline.ru/cpan/ - http://mirror.checkdomain.de/CPAN/ - ftp://mirror.checkdomain.de/CPAN/ - http://cpan.noris.de/ - http://mirror.de.leaseweb.net/CPAN/ - ftp://mirror.de.leaseweb.net/CPAN/ - http://cpan.mirror.euserv.net/ - ftp://mirror.euserv.net/cpan/ - http://ftp-stud.hs-esslingen.de/pub/Mirrors/CPAN/ - ftp://mirror.fraunhofer.de/CPAN/ - ftp://ftp.freenet.de/pub/ftp.cpan.org/pub/CPAN/ - http://ftp.hosteurope.de/pub/CPAN/ - ftp://ftp.hosteurope.de/pub/CPAN/ - ftp://ftp.fu-berlin.de/unix/languages/perl/ - http://ftp.gwdg.de/pub/languages/perl/CPAN/ - ftp://ftp.gwdg.de/pub/languages/perl/CPAN/ - http://ftp.hawo.stw.uni-erlangen.de/CPAN/ - ftp://ftp.hawo.stw.uni-erlangen.de/CPAN/ - http://cpan.mirror.iphh.net/ - ftp://cpan.mirror.iphh.net/pub/CPAN/ - ftp://ftp.mpi-inf.mpg.de/pub/perl/CPAN/ - http://cpan.netbet.org/ - http://mirror.netcologne.de/cpan/ - ftp://mirror.netcologne.de/cpan/ - ftp://mirror.petamem.com/CPAN/ - http://www.planet-elektronik.de/CPAN/ - http://ftp.halifax.rwth-aachen.de/cpan/ - ftp://ftp.halifax.rwth-aachen.de/cpan/ - http://mirror.softaculous.com/cpan/ - http://ftp.u-tx.net/CPAN/ - ftp://ftp.u-tx.net/CPAN/ - http://mirror.reismil.ch/CPAN/ - -=item Greece - - http://cpan.cc.uoc.gr/mirrors/CPAN/ - ftp://ftp.cc.uoc.gr/mirrors/CPAN/ - http://ftp.ntua.gr/pub/lang/perl/ - ftp://ftp.ntua.gr/pub/lang/perl/ - -=item Hungary - - http://mirror.met.hu/CPAN/ - -=item Ireland - - http://ftp.heanet.ie/mirrors/ftp.perl.org/pub/CPAN/ - ftp://ftp.heanet.ie/mirrors/ftp.perl.org/pub/CPAN/ - -=item Italy - - http://bo.mirror.garr.it/mirrors/CPAN/ - ftp://ftp.eutelia.it/CPAN_Mirror/ - http://cpan.panu.it/ - ftp://ftp.panu.it/pub/mirrors/perl/CPAN/ - http://cpan.muzzy.it/ - -=item Latvia - - http://kvin.lv/pub/CPAN/ - -=item Lithuania - - http://ftp.litnet.lt/pub/CPAN/ - ftp://ftp.litnet.lt/pub/CPAN/ - -=item Moldova - - http://mirror.as43289.net/pub/CPAN/ - ftp://mirror.as43289.net/pub/CPAN/ - -=item Netherlands - - http://cpan.cs.uu.nl/ - ftp://ftp.cs.uu.nl/pub/CPAN/ - http://mirror.nl.leaseweb.net/CPAN/ - ftp://mirror.nl.leaseweb.net/CPAN/ - http://ftp.nluug.nl/languages/perl/CPAN/ - ftp://ftp.nluug.nl/pub/languages/perl/CPAN/ - http://mirror.transip.net/CPAN/ - ftp://mirror.transip.net/CPAN/ - http://cpan.mirror.triple-it.nl/ - http://ftp.tudelft.nl/cpan/ - ftp://ftp.tudelft.nl/pub/CPAN/ - ftp://download.xs4all.nl/pub/mirror/CPAN/ - -=item Norway - - http://cpan.uib.no/ - ftp://cpan.uib.no/pub/CPAN/ - ftp://ftp.uninett.no/pub/languages/perl/CPAN/ - http://cpan.vianett.no/ - -=item Poland - - http://ftp.agh.edu.pl/CPAN/ - ftp://ftp.agh.edu.pl/CPAN/ - http://ftp.piotrkosoft.net/pub/mirrors/CPAN/ - ftp://ftp.piotrkosoft.net/pub/mirrors/CPAN/ - ftp://ftp.ps.pl/pub/CPAN/ - http://sunsite.icm.edu.pl/pub/CPAN/ - ftp://sunsite.icm.edu.pl/pub/CPAN/ - -=item Portugal - - http://cpan.dcc.fc.up.pt/ - http://mirrors.fe.up.pt/pub/CPAN/ - http://cpan.perl-hackers.net/ - http://cpan.perl.pt/ - -=item Romania - - http://mirrors.hostingromania.ro/cpan.org/ - ftp://ftp.lug.ro/CPAN/ - http://mirrors.m247.ro/CPAN/ - http://mirrors.evowise.com/CPAN/ - http://mirrors.teentelecom.net/CPAN/ - ftp://mirrors.teentelecom.net/CPAN/ - http://mirrors.xservers.ro/CPAN/ - -=item Russian Federation - - ftp://ftp.aha.ru/CPAN/ - http://cpan.rinet.ru/ - ftp://cpan.rinet.ru/pub/mirror/CPAN/ - http://cpan-mirror.rbc.ru/pub/CPAN/ - http://mirror.rol.ru/CPAN/ - http://cpan.uni-altai.ru/ - http://cpan.webdesk.ru/ - ftp://cpan.webdesk.ru/cpan/ - http://mirror.yandex.ru/mirrors/cpan/ - ftp://mirror.yandex.ru/mirrors/cpan/ - -=item Serbia - - http://mirror.sbb.rs/CPAN/ - ftp://mirror.sbb.rs/CPAN/ - -=item Slovakia - - http://cpan.lnx.sk/ - http://tux.rainside.sk/CPAN/ - ftp://tux.rainside.sk/CPAN/ - -=item Slovenia - - http://ftp.arnes.si/software/perl/CPAN/ - ftp://ftp.arnes.si/software/perl/CPAN/ - -=item Spain - - http://mirrors.evowise.com/CPAN/ - http://osl.ugr.es/CPAN/ - http://ftp.rediris.es/mirror/CPAN/ - ftp://ftp.rediris.es/mirror/CPAN/ - -=item Sweden - - http://ftp.acc.umu.se/mirror/CPAN/ - ftp://ftp.acc.umu.se/mirror/CPAN/ - -=item Switzerland - - http://www.pirbot.com/mirrors/cpan/ - http://mirror.switch.ch/ftp/mirror/CPAN/ - ftp://mirror.switch.ch/mirror/CPAN/ - -=item Ukraine - - http://cpan.ip-connect.vn.ua/ - ftp://cpan.ip-connect.vn.ua/mirror/cpan/ - -=item United Kingdom - - http://cpan.mirror.anlx.net/ - ftp://ftp.mirror.anlx.net/CPAN/ - http://mirror.bytemark.co.uk/CPAN/ - ftp://mirror.bytemark.co.uk/CPAN/ - http://mirrors.coreix.net/CPAN/ - http://cpan.etla.org/ - ftp://cpan.etla.org/pub/CPAN/ - http://cpan.cpantesters.org/ - http://mirror.sax.uk.as61049.net/CPAN/ - http://mirror.sov.uk.goscomb.net/CPAN/ - http://www.mirrorservice.org/sites/cpan.perl.org/CPAN/ - ftp://ftp.mirrorservice.org/sites/cpan.perl.org/CPAN/ - http://mirror.ox.ac.uk/sites/www.cpan.org/ - ftp://mirror.ox.ac.uk/sites/www.cpan.org/ - http://ftp.ticklers.org/pub/CPAN/ - ftp://ftp.ticklers.org/pub/CPAN/ - http://cpan.mirrors.uk2.net/ - ftp://mirrors.uk2.net/pub/CPAN/ - http://mirror.ukhost4u.com/CPAN/ - -=back - -=head2 North America - -=over 4 - -=item Canada - - http://CPAN.mirror.rafal.ca/ - ftp://CPAN.mirror.rafal.ca/pub/CPAN/ - http://mirror.csclub.uwaterloo.ca/CPAN/ - ftp://mirror.csclub.uwaterloo.ca/CPAN/ - http://mirrors.gossamer-threads.com/CPAN/ - http://mirror.its.dal.ca/cpan/ - ftp://mirror.its.dal.ca/cpan/ - ftp://ftp.ottix.net/pub/CPAN/ - -=item Costa Rica - - http://mirrors.ucr.ac.cr/CPAN/ - -=item Mexico - - http://www.msg.com.mx/CPAN/ - ftp://ftp.msg.com.mx/pub/CPAN/ - -=item United States - -=over 8 - -=item Alabama - - http://mirror.teklinks.com/CPAN/ - -=item Arizona - - http://mirror.n5tech.com/CPAN/ - http://mirrors.namecheap.com/CPAN/ - ftp://mirrors.namecheap.com/CPAN/ - -=item California - - http://cpan.develooper.com/ - http://httpupdate127.cpanel.net/CPAN/ - http://mirrors.sonic.net/cpan/ - ftp://mirrors.sonic.net/cpan/ - http://www.perl.com/CPAN/ - http://cpan.yimg.com/ - -=item Idaho - - http://mirrors.syringanetworks.net/CPAN/ - ftp://mirrors.syringanetworks.net/CPAN/ - -=item Illinois - - http://cpan.mirrors.hoobly.com/ - http://mirror.team-cymru.org/CPAN/ - ftp://mirror.team-cymru.org/CPAN/ - -=item Indiana - - http://cpan.netnitco.net/ - ftp://cpan.netnitco.net/pub/mirrors/CPAN/ - ftp://ftp.uwsg.iu.edu/pub/perl/CPAN/ - -=item Kansas - - http://mirrors.concertpass.com/cpan/ - -=item Massachusetts - - http://mirrors.ccs.neu.edu/CPAN/ - -=item Michigan - - http://cpan.cse.msu.edu/ - ftp://cpan.cse.msu.edu/ - http://httpupdate118.cpanel.net/CPAN/ - http://mirrors-usa.go-parts.com/cpan/ - http://ftp.wayne.edu/CPAN/ - ftp://ftp.wayne.edu/CPAN/ - -=item New Hampshire - - http://mirror.metrocast.net/cpan/ - -=item New Jersey - - http://mirror.datapipe.net/CPAN/ - ftp://mirror.datapipe.net/pub/CPAN/ - http://www.hoovism.com/CPAN/ - ftp://ftp.hoovism.com/CPAN/ - http://cpan.mirror.nac.net/ - -=item New York - - http://mirror.cc.columbia.edu/pub/software/cpan/ - ftp://mirror.cc.columbia.edu/pub/software/cpan/ - http://cpan.belfry.net/ - http://cpan.erlbaum.net/ - ftp://cpan.erlbaum.net/CPAN/ - http://cpan.hexten.net/ - ftp://cpan.hexten.net/ - http://mirror.nyi.net/CPAN/ - ftp://mirror.nyi.net/pub/CPAN/ - http://noodle.portalus.net/CPAN/ - ftp://noodle.portalus.net/CPAN/ - http://mirrors.rit.edu/CPAN/ - ftp://mirrors.rit.edu/CPAN/ - -=item North Carolina - - http://httpupdate140.cpanel.net/CPAN/ - http://mirrors.ibiblio.org/CPAN/ - -=item Oregon - - http://ftp.osuosl.org/pub/CPAN/ - ftp://ftp.osuosl.org/pub/CPAN/ - http://mirror.uoregon.edu/CPAN/ - -=item Pennsylvania - - http://cpan.pair.com/ - ftp://cpan.pair.com/pub/CPAN/ - http://cpan.mirrors.ionfish.org/ - -=item South Carolina - - http://cpan.mirror.clemson.edu/ - -=item Texas - - http://mirror.uta.edu/CPAN/ - -=item Utah - - http://cpan.cs.utah.edu/ - ftp://cpan.cs.utah.edu/CPAN/ - ftp://mirror.xmission.com/CPAN/ - -=item Virginia - - http://mirror.cogentco.com/pub/CPAN/ - ftp://mirror.cogentco.com/pub/CPAN/ - http://mirror.jmu.edu/pub/CPAN/ - ftp://mirror.jmu.edu/pub/CPAN/ - http://mirror.us.leaseweb.net/CPAN/ - ftp://mirror.us.leaseweb.net/CPAN/ - -=item Washington - - http://cpan.llarian.net/ - ftp://cpan.llarian.net/pub/CPAN/ - -=item Wisconsin - - http://cpan.mirrors.tds.net/ - ftp://cpan.mirrors.tds.net/pub/CPAN/ - -=back - -=back - -=head2 Oceania - -=over 4 - -=item Australia - - http://mirror.as24220.net/pub/cpan/ - ftp://mirror.as24220.net/pub/cpan/ - http://cpan.mirrors.ilisys.com.au/ - http://cpan.mirror.digitalpacific.com.au/ - ftp://mirror.internode.on.net/pub/cpan/ - http://mirror.optusnet.com.au/CPAN/ - http://cpan.mirror.serversaustralia.com.au/ - http://cpan.uberglobalmirror.com/ - http://mirror.waia.asn.au/pub/cpan/ - -=item New Caledonia - - http://cpan.lagoon.nc/pub/CPAN/ - ftp://cpan.lagoon.nc/pub/CPAN/ - http://cpan.nautile.nc/CPAN/ - ftp://cpan.nautile.nc/CPAN/ - -=item New Zealand - - ftp://ftp.auckland.ac.nz/pub/perl/CPAN/ - http://cpan.catalyst.net.nz/CPAN/ - ftp://cpan.catalyst.net.nz/pub/CPAN/ - http://cpan.inspire.net.nz/ - ftp://cpan.inspire.net.nz/cpan/ - http://mirror.webtastix.net/CPAN/ - ftp://mirror.webtastix.net/CPAN/ - -=back - -=head2 South America - -=over 4 - -=item Argentina - - http://cpan.mmgdesigns.com.ar/ - -=item Brazil - - http://cpan.kinghost.net/ - http://linorg.usp.br/CPAN/ - http://mirror.nbtelecom.com.br/CPAN/ - -=item Chile - - http://cpan.dcc.uchile.cl/ - ftp://cpan.dcc.uchile.cl/pub/lang/cpan/ - -=back - -=head2 RSYNC Mirrors - - rsync://ftp.is.co.za/IS-Mirror/ftp.cpan.org/ - rsync://mirror.ac.za/CPAN/ - rsync://mirror.zol.co.zw/CPAN/ - rsync://mirror.dhakacom.com/CPAN/ - rsync://mirrors.ustc.edu.cn/CPAN/ - rsync://mirrors.xmu.edu.cn/CPAN/ - rsync://kambing.ui.ac.id/CPAN/ - rsync://ftp.jaist.ac.jp/pub/CPAN/ - rsync://mirror.jre655.com/CPAN/ - rsync://ftp.kddilabs.jp/cpan/ - rsync://ftp.nara.wide.ad.jp/cpan/ - rsync://ftp.riken.jp/cpan/ - rsync://mirror.neolabs.kz/CPAN/ - rsync://mirror.qnren.qa/CPAN/ - rsync://ftp.neowiz.com/CPAN/ - rsync://mirror.0x.sg/CPAN/ - rsync://ftp.yzu.edu.tw/pub/CPAN/ - rsync://ftp.ubuntu-tw.org/CPAN/ - rsync://mirrors.digipower.vn/CPAN/ - rsync://cpan.inode.at/CPAN/ - rsync://ftp.byfly.by/CPAN/ - rsync://mirror.datacenter.by/CPAN/ - rsync://ftp.belnet.be/cpan/ - rsync://cpan.mirror.ba/CPAN/ - rsync://mirrors.neterra.net/CPAN/ - rsync://mirrors.netix.net/CPAN/ - rsync://mirror.dkm.cz/cpan/ - rsync://mirrors.nic.cz/CPAN/ - rsync://cpan.mirror.vutbr.cz/cpan/ - rsync://rsync.nic.funet.fi/CPAN/ - rsync://ftp.ciril.fr/pub/cpan/ - rsync://distrib-coffee.ipsl.jussieu.fr/pub/mirrors/cpan/ - rsync://cpan.mirrors.ovh.net/CPAN/ - rsync://mirror.de.leaseweb.net/CPAN/ - rsync://mirror.euserv.net/cpan/ - rsync://ftp-stud.hs-esslingen.de/CPAN/ - rsync://ftp.gwdg.de/pub/languages/perl/CPAN/ - rsync://ftp.hawo.stw.uni-erlangen.de/CPAN/ - rsync://cpan.mirror.iphh.net/CPAN/ - rsync://mirror.netcologne.de/cpan/ - rsync://ftp.halifax.rwth-aachen.de/cpan/ - rsync://ftp.ntua.gr/CPAN/ - rsync://mirror.met.hu/CPAN/ - rsync://ftp.heanet.ie/mirrors/ftp.perl.org/pub/CPAN/ - rsync://rsync.panu.it/CPAN/ - rsync://mirror.as43289.net/CPAN/ - rsync://rsync.cs.uu.nl/CPAN/ - rsync://mirror.nl.leaseweb.net/CPAN/ - rsync://ftp.nluug.nl/CPAN/ - rsync://mirror.transip.net/CPAN/ - rsync://cpan.uib.no/cpan/ - rsync://cpan.vianett.no/CPAN/ - rsync://cpan.perl-hackers.net/CPAN/ - rsync://cpan.perl.pt/cpan/ - rsync://mirrors.m247.ro/CPAN/ - rsync://mirrors.teentelecom.net/CPAN/ - rsync://cpan.webdesk.ru/CPAN/ - rsync://mirror.yandex.ru/mirrors/cpan/ - rsync://mirror.sbb.rs/CPAN/ - rsync://ftp.acc.umu.se/mirror/CPAN/ - rsync://rsync.pirbot.com/ftp/cpan/ - rsync://cpan.ip-connect.vn.ua/CPAN/ - rsync://rsync.mirror.anlx.net/CPAN/ - rsync://mirror.bytemark.co.uk/CPAN/ - rsync://mirror.sax.uk.as61049.net/CPAN/ - rsync://rsync.mirrorservice.org/cpan.perl.org/CPAN/ - rsync://ftp.ticklers.org/CPAN/ - rsync://mirrors.uk2.net/CPAN/ - rsync://CPAN.mirror.rafal.ca/CPAN/ - rsync://mirror.csclub.uwaterloo.ca/CPAN/ - rsync://mirrors.namecheap.com/CPAN/ - rsync://mirrors.syringanetworks.net/CPAN/ - rsync://mirror.team-cymru.org/CPAN/ - rsync://debian.cse.msu.edu/cpan/ - rsync://mirrors-usa.go-parts.com/mirrors/cpan/ - rsync://rsync.hoovism.com/CPAN/ - rsync://mirror.cc.columbia.edu/cpan/ - rsync://noodle.portalus.net/CPAN/ - rsync://mirrors.rit.edu/cpan/ - rsync://mirrors.ibiblio.org/CPAN/ - rsync://cpan.pair.com/CPAN/ - rsync://cpan.cs.utah.edu/CPAN/ - rsync://mirror.cogentco.com/CPAN/ - rsync://mirror.jmu.edu/CPAN/ - rsync://mirror.us.leaseweb.net/CPAN/ - rsync://cpan.mirror.digitalpacific.com.au/cpan/ - rsync://mirror.internode.on.net/cpan/ - rsync://uberglobalmirror.com/cpan/ - rsync://cpan.lagoon.nc/cpan/ - rsync://mirrors.mmgdesigns.com.ar/CPAN/ - - -For an up-to-date listing of CPAN sites, -see L or L. +You can find the CPAN online at L =head1 Modules: Creation, Use, and Abuse diff --git a/gnu/usr.bin/perl/pod/perlmodstyle.pod b/gnu/usr.bin/perl/pod/perlmodstyle.pod index 74672acdb31..c2170082506 100644 --- a/gnu/usr.bin/perl/pod/perlmodstyle.pod +++ b/gnu/usr.bin/perl/pod/perlmodstyle.pod @@ -119,7 +119,7 @@ Document purpose, scope and target applications =item * -Document each publically accessible method or subroutine, including params and return values +Document each publicly accessible method or subroutine, including params and return values =item * @@ -497,7 +497,7 @@ The purpose, scope and target applications of your module =item * -Use of each publically accessible method or subroutine, including +Use of each publicly accessible method or subroutine, including parameters and return values =item * @@ -699,8 +699,8 @@ Specify version requirements for other Perl modules in the pre-requisites in your Makefile.PL or Build.PL. Be sure to specify Perl version requirements both in Makefile.PL or -Build.PL and with C or similar. See the section on -C of L for details. +Build.PL and with C or similar. See the documentation on +L|perlfunc/use VERSION> for details. =head2 Testing diff --git a/gnu/usr.bin/perl/pod/perlmroapi.pod b/gnu/usr.bin/perl/pod/perlmroapi.pod index c585441fc92..ad6d1e3eb12 100644 --- a/gnu/usr.bin/perl/pod/perlmroapi.pod +++ b/gnu/usr.bin/perl/pod/perlmroapi.pod @@ -79,7 +79,8 @@ stash, and a pointer to your C structure: meta = HvMROMETA(stash); private_sv = MRO_GET_PRIVATE_DATA(meta, &my_mro_alg); -=for apidoc mro_get_private_data +=for apidoc Amh|struct mro_meta *|HvMROMETA|HV *hv +=for apidoc Amh|SV*|MRO_GET_PRIVATE_DATA|struct mro_meta *const smeta|const struct mro_alg *const which To set your private value, call C: diff --git a/gnu/usr.bin/perl/pod/perlnewmod.pod b/gnu/usr.bin/perl/pod/perlnewmod.pod index 48003e6ad68..ca3dd5c7cee 100644 --- a/gnu/usr.bin/perl/pod/perlnewmod.pod +++ b/gnu/usr.bin/perl/pod/perlnewmod.pod @@ -237,12 +237,14 @@ Every developer publishing modules on CPAN needs a CPAN ID. Visit C>, select "Request PAUSE Account", and wait for your request to be approved by the PAUSE administrators. -=item C +=item Make the tarball Once again, C or C has done all the work for you. They produce the standard C you see when you download and install modules, and this produces a Makefile with a C target. + perl Makefile.PL && make test && make distcheck && make dist + Once you've ensured that your module passes its own tests - always a good thing to make sure - you can C to make sure everything looks OK, followed by C, and the Makefile will @@ -276,5 +278,4 @@ Updated by Kirrily "Skud" Robert, C L, L, L, L, L, L, L, L, L, L L, L, L -L, Ken Williams' tutorial on building your own -module at L +L diff --git a/gnu/usr.bin/perl/pod/perlobj.pod b/gnu/usr.bin/perl/pod/perlobj.pod index a9221e9aa9f..2fb80355a31 100644 --- a/gnu/usr.bin/perl/pod/perlobj.pod +++ b/gnu/usr.bin/perl/pod/perlobj.pod @@ -751,6 +751,16 @@ appending "::" to it, like we saw earlier: my $file = new File:: $path, $data; +Indirect object syntax is only available when the +L|feature/The 'indirect' feature> named feature is enabled. +This is enabled by default, but can be disabled if requested. This +feature is present in older feature version bundles, but was removed +from the C<:5.36> bundle; so a L|perlfunc/use VERSION> +declaration of C or above will also disable the feature. + + use v5.36; + # indirect object syntax is no longer available + =head2 C, C, and C As we saw earlier, an object is simply a data structure that has been @@ -1001,8 +1011,7 @@ Here's an example of a module as a blessed scalar: package Time; - use strict; - use warnings; + use v5.36; sub new { my $class = shift; @@ -1013,7 +1022,7 @@ Here's an example of a module as a blessed scalar: sub epoch { my $self = shift; - return ${ $self }; + return $$self; } my $time = Time->new(); @@ -1040,8 +1049,7 @@ to support inside-out object implementations. package Time; - use strict; - use warnings; + use v5.36; use Hash::Util::FieldHash 'fieldhash'; diff --git a/gnu/usr.bin/perl/pod/perlop.pod b/gnu/usr.bin/perl/pod/perlop.pod index b4ed368df98..f6d72619f18 100644 --- a/gnu/usr.bin/perl/pod/perlop.pod +++ b/gnu/usr.bin/perl/pod/perlop.pod @@ -128,17 +128,17 @@ values only, not array values. left -> nonassoc ++ -- right ** - right ! ~ \ and unary + and - + right ! ~ ~. \ and unary + and - left =~ !~ left * / % x left + - . left << >> nonassoc named unary operators + nonassoc isa chained < > <= >= lt gt le ge chain/na == != eq ne <=> cmp ~~ - nonassoc isa - left & - left | ^ + left & &. + left | |. ^ ^. left && left || // nonassoc .. ... @@ -230,8 +230,9 @@ assignment.) See L and L. Otherwise, the right side is a method name or a simple scalar variable containing either the method name or a subroutine reference, -and the left side must be either an object (a blessed reference) -or a class name (that is, a package name). See L. +and (if it is a method name) the left side must be either an object (a +blessed reference) or a class name (that is, a package name). See +L. The dereferencing cases (as opposed to method-calling cases) are somewhat extended by the C feature. For the @@ -626,6 +627,13 @@ support C<"NaN">.) Binary C<"cmp"> returns -1, 0, or 1 depending on whether the left argument is stringwise less than, equal to, or greater than the right argument. + +Here we can see the difference between <=> and cmp, + + print 10 <=> 2 #prints 1 + print 10 cmp 2 #prints -1 + +(likewise between gt and >, lt and <, etc.) X Binary C<"~~"> does a smartmatch between its arguments. Smart matching @@ -665,9 +673,9 @@ scalar expression that yields a string class name: if( $obj isa "Different::Class" ) { ... } if( $obj isa $name_of_class ) { ... } -This is an experimental feature and is available from Perl 5.31.6 when enabled -by C. It emits a warning in the C -category. +This feature is available from Perl 5.31.6 onwards when enabled by +C. This feature is enabled automatically by a +C (or higher) declaration in the current scope. =head2 Smartmatch Operator @@ -735,7 +743,7 @@ the table is sorted on the right operand instead of on the left. like: grep { exists HASH->{$_} } ARRAY Regexp HASH any HASH keys pattern match Regexp like: grep { /Regexp/ } keys HASH - undef HASH always false (undef can't be a key) + undef HASH always false (undef cannot be a key) like: 0 == 1 Any HASH HASH key existence like: exists HASH->{Any} @@ -751,7 +759,7 @@ the table is sorted on the right operand instead of on the left. Any CODE sub passed Any returns true like: CODE->(Any) -Right operand is a Regexp: + Right operand is a Regexp: Left Right Description and pseudocode =============================================================== @@ -1594,6 +1602,8 @@ is a word character (meaning it matches C): The following escape sequences are available in constructs that interpolate, and in transliterations whose delimiters aren't single quotes (C<"'">). +In all the ones with braces, any number of blanks and/or tabs adjoining +and within the braces are allowed (and ignored). X<\t> X<\n> X<\r> X<\f> X<\b> X<\a> X<\e> X<\x> X<\0> X<\c> X<\N> X<\N{}> X<\o{}> @@ -1606,6 +1616,8 @@ X<\o{}> \a alarm (bell) (BEL) \e escape (ESC) \x{263A} [1,8] hex char (example shown: SMILEY) + \x{ 263A } Same, but shows optional blanks inside and + adjoining the braces \x1b [2,8] restricted range hex char (example: ESC) \N{name} [3] named Unicode character or character sequence \N{U+263D} [4,8] Unicode character (example: FIRST QUARTER MOON) @@ -1613,6 +1625,11 @@ X<\o{}> \o{23072} [6,8] octal char (example: SMILEY) \033 [7,8] restricted range octal char (example: ESC) +Note that any escape sequence using braces inside interpolated +constructs may have optional blanks (tab or space characters) adjoining +with and inside of the braces, as illustrated above by the second +S> example. + =over 4 =item [1] @@ -1620,10 +1637,13 @@ X<\o{}> The result is the character specified by the hexadecimal number between the braces. See L below for details on which character. -Only hexadecimal digits are valid between the braces. If an invalid -character is encountered, a warning will be issued and the invalid -character and all subsequent characters (valid or invalid) within the -braces will be discarded. +Blanks (tab or space characters) may separate the number from either or +both of the braces. + +Otherwise, only hexadecimal digits are valid between the braces. If an +invalid character is encountered, a warning will be issued and the +invalid character and all subsequent characters (valid or invalid) +within the braces will be discarded. If there are no valid digits between the braces, the generated character is the NULL character (C<\x{00}>). However, an explicit empty brace (C<\x{}>) @@ -1709,10 +1729,13 @@ To get platform independent controls, you can use C<\N{...}>. The result is the character specified by the octal number between the braces. See L below for details on which character. -If a character that isn't an octal digit is encountered, a warning is raised, -and the value is based on the octal digits before it, discarding it and all -following characters up to the closing brace. It is a fatal error if there are -no octal digits at all. +Blanks (tab or space characters) may separate the number from either or +both of the braces. + +Otherwise, if a character that isn't an octal digit is encountered, a +warning is raised, and the value is based on the octal digits before it, +discarding it and all following characters up to the closing brace. It +is a fatal error if there are no octal digits at all. =item [7] @@ -1781,7 +1804,7 @@ are quoted by C<\Q>. C<\L>, C<\U>, C<\F>, and C<\Q> can stack, in which case you need one C<\E> for each. For example: - say"This \Qquoting \ubusiness \Uhere isn't quite\E done yet,\E is it?"; + say "This \Qquoting \ubusiness \Uhere isn't quite\E done yet,\E is it?"; This quoting\ Business\ HERE\ ISN\'T\ QUITE\ done\ yet\, is it? If a S> form that includes C is in effect (see @@ -1810,7 +1833,7 @@ and although they often accept just C<"\012">, they seldom tolerate just C<"\015">. If you get in the habit of using C<"\n"> for networking, you may be burned some day. X X X X -X<\r> +X<\n> X<\r> X<\r\n> For constructs that do interpolate, variables beginning with "C<$>" or "C<@>" are interpolated. Subscripted variables such as C<$a[3]> or @@ -2335,8 +2358,9 @@ Examples: # Add one to the value of any numbers in the string s/(\d+)/1 + $1/eg; - # Titlecase words in the last 30 characters only - substr($str, -30) =~ s/\b(\p{Alpha}+)\b/\u\L$1/g; + # Titlecase words in the last 30 characters only (presuming + # that the substring doesn't start in the middle of a word) + substr($str, -30) =~ s/\b(\p{Alpha})(\p{Alpha}*)\b/\u$1\L$2/g; # This will expand any embedded scalar variable # (including lexicals) in $_ : First $1 is interpolated @@ -2584,9 +2608,11 @@ Unless the C option is used, the string specified with C<=~> must be a scalar variable, an array element, a hash element, or an assignment to one of those; in other words, an lvalue. -If the characters delimiting I and I +The characters delimitting I and I +can be any printable character, not just forward slashes. If they are single quotes (C'I'>), the only -interpolation is removal of C<\> from pairs of C<\\>. +interpolation is removal of C<\> from pairs of C<\\>; so hyphens are +interpreted literally rather than specifying a character range. Otherwise, a character range may be specified with a hyphen, so C does the same replacement as @@ -2594,25 +2620,37 @@ C. If the I is delimited by bracketing quotes, the I must have its own pair of quotes, which may or may -not be bracketing quotes; for example, C or -C. - -Characters may be literals, or (if the delimiters aren't single quotes) -any of the escape sequences accepted in double-quoted strings. But -there is never any variable interpolation, so C<"$"> and C<"@"> are -always treated as literals. A hyphen at the beginning or end, or -preceded by a backslash is also always considered a literal. Escape -sequence details are in L. - -Note that C does B do regular expression character classes such as -C<\d> or C<\pL>. The C operator is not equivalent to the C> -utility. C will uppercase the 26 letters "a" through "z", -but for case changing not confined to ASCII, use -L|perlfunc/lc>, L|perlfunc/uc>, -L|perlfunc/lcfirst>, L|perlfunc/ucfirst> -(all documented in L), or the -LIEIE>|/sEPATTERNEREPLACEMENTEmsixpodualngcer> +not be bracketing quotes; for example, C or +C. This final example shows a way to visually clarify +what is going on for people who are more familiar with regular +expression patterns than with C, and who may think forward slash +delimiters imply that C is more like a regular expression pattern +than it actually is. (Another option might be to use C.) + +C isn't fully like bracketed character classes, just +(significantly) more like them than it is to full patterns. For +example, characters appearing more than once in either list behave +differently here than in patterns, and C lists do not allow +backslashed character classes such as C<\d> or C<\pL>, nor variable +interpolation, so C<"$"> and C<"@"> are always treated as literals. + +The allowed elements are literals plus C<\'> (meaning a single quote). +If the delimiters aren't single quotes, also allowed are any of the +escape sequences accepted in double-quoted strings. Escape sequence +details are in L. + +A hyphen at the beginning or end, or preceded by a backslash is also +always considered a literal. Precede a delimiter character with a +backslash to allow it. + +The C operator is not equivalent to the C> utility. +C will uppercase the 26 letters "a" through "z", but for +case changing not confined to ASCII, use L|perlfunc/lc>, +L|perlfunc/uc>, L|perlfunc/lcfirst>, +L|perlfunc/ucfirst> (all documented in L), or the +LIEIE>|/sEPATTERNEREPLACEMENTEmsixpodualngcer> (with C<\U>, C<\u>, C<\L>, and C<\l> string-interpolation escapes in the I portion). @@ -2670,8 +2708,8 @@ If the C modifier is specified, sequences of characters, all in a row, that were transliterated to the same character are squashed down to a single instance of that character. - my $a = "aaaba" - $a =~ tr/a/a/s # $a now is "aba" + my $a = "aaabbbca"; + $a =~ tr/ab/dd/s; # $a now is "dcd" If the C modifier is used, the I is always interpreted exactly as specified. Otherwise, if the I is shorter @@ -2869,12 +2907,18 @@ This will print... ...with no leading whitespace. -The delimiter is used to determine the B whitespace to -remove from the beginning of each line. All lines B have -at least the same starting whitespace (except lines only -containing a newline) or perl will croak. Tabs and spaces can -be mixed, but are matched exactly. One tab will not be equal to -8 spaces! +The line containing the delimiter that marks the end of the here-doc +determines the indentation template for the whole thing. Compilation +croaks if any non-empty line inside the here-doc does not begin with the +precise indentation of the terminating line. (An empty line consists of +the single character "\n".) For example, suppose the terminating line +begins with a tab character followed by 4 space characters. Every +non-empty line in the here-doc must begin with a tab followed by 4 +spaces. They are stripped from each line, and any leading white space +remaining on a line serves as the indentation for that line. Currently, +only the TAB and SPACE characters are treated as whitespace for this +purpose. Tabs and spaces may be mixed, but are matched exactly; tabs +remain tabs and are not expanded. Additional beginning whitespace (beyond what preceded the delimiter) will be preserved: @@ -3091,7 +3135,7 @@ are not available for here-docs. No interpolation is performed at this stage. Any backslashed sequences including C<\\> are treated at the stage -to L. +of L. =item C<''>, C, C, C, the replacement of C @@ -3160,7 +3204,7 @@ brackets. because the outcome may be determined by voting based on heuristic estimators, the result is not strictly predictable. Fortunately, it's usually correct for ambiguous cases. -=item the replacement of C +=item The replacement of C Processing of C<\Q>, C<\U>, C<\u>, C<\L>, C<\l>, C<\F> and interpolation happens as with C constructs. @@ -3230,7 +3274,7 @@ non-whitespace choices. This step is the last one for all constructs except regular expressions, which are processed further. -=item parsing regular expressions +=item Parsing regular expressions X Previous steps were performed during the compilation of Perl code, @@ -3375,7 +3419,8 @@ way, so use with care. C<< > >> may also be spelled C)>. See L. -The null filehandle C<< <> >> is special: it can be used to emulate the +The null filehandle C<< <> >> (sometimes called the diamond operator) is +special: it can be used to emulate the behavior of B and B, and any other Unix filter program that takes a list of filenames, doing the same to each line of input from all of them. Input from C<< <> >> comes either from @@ -3416,7 +3461,8 @@ it interprets special characters, so if you have a script like this: and call it with S>, it actually opens a pipe, executes the C command and reads C's output from that pipe. If you want all items in C<@ARGV> to be interpreted as file names, you -can use the module C from CPAN, or use the double bracket: +can use the module C from CPAN, or use the double +diamond bracket: while (<<>>) { print; diff --git a/gnu/usr.bin/perl/pod/perlpacktut.pod b/gnu/usr.bin/perl/pod/perlpacktut.pod index 0ede0d59120..229d39523bc 100644 --- a/gnu/usr.bin/perl/pod/perlpacktut.pod +++ b/gnu/usr.bin/perl/pod/perlpacktut.pod @@ -407,7 +407,7 @@ and that's why the low order byte is stored at the lower address. To unpack such a (unsigned) short we'll have to use code C. A repeat count unpacks all 12 shorts: - my( $ip, $cs, $flags, $ax, $bx, $cd, $dx, $si, $di, $bp, $ds, $es ) = + my( $ip, $cs, $flags, $ax, $bx, $cx, $dx, $si, $di, $bp, $ds, $es ) = unpack( 'v12', $frame ); Alternatively, we could have used C to unpack the individually @@ -1033,7 +1033,7 @@ C standardese). Neither using offsets nor adding C's to bridge the gaps is satisfactory. (Just imagine what happens if the structure changes.) What we really need is a way of saying "skip as many bytes as required to the next multiple of N". -In fluent Templatese, you say this with C where N is replaced by the +In fluent templates, you say this with C where N is replaced by the appropriate value. Here's the next version of our struct packaging: my $gappy = pack( 'c x!2 s c x!4 l!', $c1, $s, $c2, $l ); diff --git a/gnu/usr.bin/perl/pod/perlperf.pod b/gnu/usr.bin/perl/pod/perlperf.pod index 260acaba290..1aa17029e69 100644 --- a/gnu/usr.bin/perl/pod/perlperf.pod +++ b/gnu/usr.bin/perl/pod/perlperf.pod @@ -126,8 +126,7 @@ comparative code in a file and running a C test. #!/usr/bin/perl - use strict; - use warnings; + use v5.36; use Benchmark; @@ -193,8 +192,7 @@ noticing it's assigned only the once. #!/usr/bin/perl - use strict; - use warnings; + use v5.36; use Benchmark; @@ -229,8 +227,7 @@ report on the contents. #!/usr/bin/perl - use strict; - use warnings; + use v5.36; =head1 NAME @@ -318,7 +315,7 @@ report on the contents. my %rep; foreach my $line ( keys %report ) { - foreach my $key ( keys %{ $report{$line} } ) { + foreach my $key ( keys $report{$line}->%* ) { $rep{$key} += $report{$line}{$key}; } } @@ -815,8 +812,7 @@ command-line. #!/usr/bin/perl -n - use strict; - use warnings; + use v5.36; my @data; @@ -910,8 +906,7 @@ input directly as it arrives too. Otherwise, the code looks fairly similar: #!/usr/bin/perl -n - use strict; - use warnings; + use v5.36; print @@ -998,8 +993,7 @@ including a C subroutine to emulate typical C functionality. #!/usr/bin/perl - use strict; - use warnings; + use v5.36; use Benchmark; use Data::Dumper; @@ -1045,8 +1039,7 @@ time C constant. #!/usr/bin/perl - use strict; - use warnings; + use v5.36; use Benchmark; use Data::Dumper; @@ -1172,11 +1165,11 @@ deserve further attention. Very useful online reference material: - http://www.ccl4.org/~nick/P/Fast_Enough/ + https://web.archive.org/web/20120515021937/http://www.ccl4.org/~nick/P/Fast_Enough/ - http://www-128.ibm.com/developerworks/library/l-optperl.html + https://web.archive.org/web/20050706081718/http://www-106.ibm.com/developerworks/library/l-optperl.html - http://perlbuzz.com/2007/11/bind-output-variables-in-dbi-for-speed-and-safety.html + https://perlbuzz.com/2007/11/14/bind_output_variables_in_dbi_for_speed_and_safety/ http://en.wikipedia.org/wiki/Performance_analysis diff --git a/gnu/usr.bin/perl/pod/perlpod.pod b/gnu/usr.bin/perl/pod/perlpod.pod index 9f494a610e3..ed227b50dc3 100644 --- a/gnu/usr.bin/perl/pod/perlpod.pod +++ b/gnu/usr.bin/perl/pod/perlpod.pod @@ -69,6 +69,8 @@ are =head2 Heading Text =head3 Heading Text =head4 Heading Text + =head5 Heading Text + =head6 Heading Text =over indentlevel =item stuff =back @@ -83,8 +85,8 @@ To explain them each in detail: =over =item C<=head1 I> -X<=head1> X<=head2> X<=head3> X<=head4> -X X X X +X<=head1> X<=head2> X<=head3> X<=head4> X<=head5> X<=head6> +X X X X X X =item C<=head2 I> @@ -92,7 +94,11 @@ X X X X =item C<=head4 I> -Head1 through head4 produce headings, head1 being the highest +=item C<=head5 I> + +=item C<=head6 I> + +Head1 through head6 produce headings, head1 being the highest level. The text in the rest of this paragraph is the content of the heading. For example: @@ -106,6 +112,10 @@ The text in these heading commands can use formatting codes, as seen here: Such commands are explained in the "L" section, below. +Note that C and C were introduced in 2020 and in +L 3.41, released in October 2020, so they might not be +supported on the Pod parser you use. + =item C<=over I> X<=over> X<=item> X<=back> X X X diff --git a/gnu/usr.bin/perl/pod/perlpodspec.pod b/gnu/usr.bin/perl/pod/perlpodspec.pod index 847c4a9652d..7be15853a9f 100644 --- a/gnu/usr.bin/perl/pod/perlpodspec.pod +++ b/gnu/usr.bin/perl/pod/perlpodspec.pod @@ -206,7 +206,7 @@ Pod commands: =over -=item "=head1", "=head2", "=head3", "=head4" +=item "=head1", "=head2", "=head3", "=head4", "=head5", "=head6" This command indicates that the text in the remainder of the paragraph is a heading. That text may contain formatting codes. Examples: @@ -215,6 +215,11 @@ is a heading. That text may contain formatting codes. Examples: =head3 What B to Do! +Both C<=head5> and C<=head6> were added in 2020 and might not be +supported on all Pod parsers. L 3.41 was released on October +2020 and supports both of these providing support for all +L-based Pod parsers. + =item "=pod" This command indicates that this paragraph begins a Pod block. (If we diff --git a/gnu/usr.bin/perl/pod/perlpodstyle.pod b/gnu/usr.bin/perl/pod/perlpodstyle.pod index 22306e78130..4368ddb9070 100644 --- a/gnu/usr.bin/perl/pod/perlpodstyle.pod +++ b/gnu/usr.bin/perl/pod/perlpodstyle.pod @@ -135,7 +135,7 @@ values should be given here. All possible messages the program can print out and what they mean. You may wish to follow the same documentation style as the Perl documentation; -see perldiag(1) for more details (and look at the POD source as well). +see L for more details (and look at the POD source as well). If applicable, please include details on what the user should do to correct the error; documenting an error as indicating "the input buffer is diff --git a/gnu/usr.bin/perl/pod/perlpolicy.pod b/gnu/usr.bin/perl/pod/perlpolicy.pod index ba54b925988..d1f12ce7153 100644 --- a/gnu/usr.bin/perl/pod/perlpolicy.pod +++ b/gnu/usr.bin/perl/pod/perlpolicy.pod @@ -92,9 +92,9 @@ the Perl community should expect from Perl's developers: =item * -We "officially" support the two most recent stable release series. 5.26.x -and earlier are now out of support. As of the release of 5.32.0, we will -"officially" end support for Perl 5.28.x, other than providing security +We "officially" support the two most recent stable release series. 5.30.x +and earlier are now out of support. As of the release of 5.36.0, we will +"officially" end support for Perl 5.32.x, other than providing security updates as described below. =item * @@ -606,8 +606,7 @@ question affirms they will not transgress again. Removals, like warnings, are public. The list of moderators will be public knowledge. At present, it is: -Karen Etheridge, Ricardo Signes, Sawyer X, -Steffen Müller, Todd Rinaldo, Aaron Crane. +Karen Etheridge, Neil Bowers, Nicholas Clark, Ricardo Signes, Todd Rinaldo. =head1 CREDITS diff --git a/gnu/usr.bin/perl/pod/perlport.pod b/gnu/usr.bin/perl/pod/perlport.pod index 1715eafa1b3..4a9776efcf8 100644 --- a/gnu/usr.bin/perl/pod/perlport.pod +++ b/gnu/usr.bin/perl/pod/perlport.pod @@ -486,7 +486,7 @@ executable code for that command or program. First, many systems have "internal" commands that are built-in to the shell or OS and while these commands can be invoked, there is no corresponding file. Second, some operating systems (e.g., Cygwin, -DJGPP, OS/2, and VOS) have required suffixes for executable files; +OS/2, and VOS) have required suffixes for executable files; these suffixes are generally permitted on the command name but are not required. Thus, a command like C might exist in a file named F, F, or F, depending on the operating system. @@ -1013,11 +1013,6 @@ Also see: =item * -The djgpp environment for DOS, L -and L. - -=item * - The EMX environment for DOS, OS/2, etc. emx@iaehv.nl, L Also L. @@ -1041,11 +1036,6 @@ as L), L =item * -The U/WIN environment for Win32, -L - -=item * - Build instructions for OS/2, L =back @@ -1466,12 +1456,6 @@ See also: Amiga, F (installed as L). -=item * - -A free perl5-based PERL.NLM for Novell Netware is available in -precompiled binary and source code form from L -as well as from CPAN. - =item * S, F @@ -1526,6 +1510,9 @@ C<-x>, C<-o>. (Win32, VMS, S) C<-g>, C<-k>, C<-l>, C<-u>, C<-A> are not particularly meaningful. +(Win32) +C<-l> returns true for both symlinks and directory junctions. + (VMS, S) C<-p> is not particularly meaningful. @@ -1571,6 +1558,12 @@ filehandle may be closed, or pointer may be in a different position. The value returned by L|perlfunc/tell FILEHANDLE> may be affected after the call, and the filehandle may be flushed. +=item chdir + +(Win32) +The current directory reported by the system may include any symbolic +links specified to chdir(). + =item chmod (Win32) @@ -1655,9 +1648,6 @@ code. (SunOS, Solaris, HP-UX) Does not automatically flush output handles on some platforms. -(Symbian OS) -Not supported. - =item exit (VMS) @@ -1949,7 +1939,7 @@ but usually by no more than an hour. Not implemented. (Win32) -Return values (especially for device and inode) may be bogus. +Treats directory junctions as symlinks. =item msgctl @@ -1979,9 +1969,13 @@ implications for your code. =item readlink -(Win32, VMS, S) +(VMS, S) Not implemented. +(Win32) +readlink() on a directory junction returns the object name, not a +simple path. + =item rename (Win32) @@ -2077,9 +2071,6 @@ C not supported on UFS. (Win32) C is creation time instead of inode change time. -(Win32) -C and C are not meaningful. - (VMS) C and C are not necessarily reliable. @@ -2095,17 +2086,22 @@ meaningful and will differ between stat calls on the same file. Some versions of cygwin when doing a C and not finding it may then attempt to C. -(Win32) -C needs to open the file to determine the link count -and update attributes that may have been changed through hard links. -Setting L|perlvar/${^WIN32_SLOPPY_STAT}> to a -true value speeds up C by not performing this operation. - =item symlink -(Win32, S) +(S) Not implemented. +(Win32) +Requires either elevated permissions or developer mode and a +sufficiently recent version of Windows 10. You can check whether the current +process has the required privileges using the +L +function. + +Since Windows needs to know whether the target is a directory or not when +creating the link the target Perl will only create the link as a directory +link when the target exists and is a directory. + (VMS) Implemented on 64 bit VMS 8.3. VMS requires the symbolic link to be in Unix syntax if it is intended to resolve to a valid path. @@ -2301,8 +2297,6 @@ F - may fail on recent cygwin installs. =back -=item Symbian - =item NetBSD =item FreeBSD @@ -2333,8 +2327,6 @@ Caveats: =back -=item Symbian (Series 60 v3, 3.2 and 5 - what else?) - =item Stratus VOS / OpenVOS =item AIX @@ -2353,6 +2345,22 @@ ensure you have that library installed when building perl. =head1 EOL Platforms +=head2 (Perl 5.36) + +The following platforms were supported by a previous version of +Perl but have been officially removed from Perl's source code +as of 5.36: + +=over + +=item NetWare + +=item DOS/DJGPP + +=item AT&T UWIN + +=back + =head2 (Perl 5.20) The following platforms were supported by a previous version of @@ -2534,10 +2542,10 @@ L for binary distributions. =head1 SEE ALSO L, L, L, -L, L, +L, L, L, L, L, L, -L, L, -L, L, L, L, +L, +L, L, L, L, L, L, L, L, L, L, L, and L. diff --git a/gnu/usr.bin/perl/pod/perlre.pod b/gnu/usr.bin/perl/pod/perlre.pod index 0a9e8ec21da..ef00abbe4b9 100644 --- a/gnu/usr.bin/perl/pod/perlre.pod +++ b/gnu/usr.bin/perl/pod/perlre.pod @@ -43,10 +43,10 @@ contains somewhere in it, the sequence of characters "a", "b", then "c". (The C<=~ m>, or match operator, is described in L.) -Patterns that aren't already stored in some variable must be delimitted, -at both ends, by delimitter characters. These are often, as in the +Patterns that aren't already stored in some variable must be delimited, +at both ends, by delimiter characters. These are often, as in the example above, forward slashes, and the typical way a pattern is written -in documentation is with those slashes. In most cases, the delimitter +in documentation is with those slashes. In most cases, the delimiter is the same character, fore and aft, but there are a few cases where a character looks like it has a mirror-image mate, where the opening version is the beginning delimiter, and the closing one is the ending @@ -296,7 +296,7 @@ string as a multi-line buffer, such that the C<"^"> will match after any newline within the string (except if the newline is the last character in the string), and C<"$"> will match before any newline. At the cost of a little more overhead, you can do this by using the -Lm>> modifier on the pattern match operator. (Older programs +Cm>> modifier on the pattern match operator. (Older programs did this by setting C<$*>, but this option was removed in perl 5.10.) X<^> X<$> X @@ -313,7 +313,8 @@ The default behavior for matching can be changed, using various modifiers. Modifiers that relate to the interpretation of the pattern are listed just below. Modifiers that alter the way a pattern is used by Perl are detailed in L and -L. +L. Modifiers can be added +dynamically; see L below. =over 4 @@ -473,15 +474,18 @@ You can use L to create a comment that ends earlier than the end of the current line, but C also can't contain the closing delimiter unless escaped with a backslash. -A common pitfall is to forget that C<"#"> characters begin a comment under -C and are not matched literally. Just keep that in mind when trying -to puzzle out why a particular C pattern isn't working as expected. +A common pitfall is to forget that C<"#"> characters (outside a +bracketed character class) begin a comment under C and are not +matched literally. Just keep that in mind when trying to puzzle out why +a particular C pattern isn't working as expected. +Inside a bracketed character class, C<"#"> retains its non-special, +literal meaning. Starting in Perl v5.26, if the modifier has a second C<"x"> within it, -it does everything that a single C does, but additionally -non-backslashed SPACE and TAB characters within bracketed character -classes are also generally ignored, and hence can be added to make the -classes more readable. +the effect of a single C is increased. The only difference is that +inside bracketed character classes, non-escaped (by a backslash) SPACE +and TAB characters are not added to the class, and hence can be inserted +to make the classes more readable: / [d-e g-i 3-7]/xx /[ ! @ " # $ % ^ & * () = ? <> ' ]/xx @@ -491,6 +495,14 @@ may be easier to grasp than the squashed equivalents /[d-eg-i3-7]/ /[!@"#$%^&*()=?<>']/ +Note that this unfortunately doesn't mean that your bracketed classes +can contain comments or extend over multiple lines. A C<#> inside a +character class is still just a literal C<#>, and doesn't introduce a +comment. And, unless the closing bracket is on the same line as the +opening one, the newline character (and everything on the next line(s) +until terminated by a C<]> will be part of the class, just as if you'd +written C<\n>. + Taken together, these features go a long way towards making Perl's regular expressions more readable. Here's an example: @@ -504,14 +516,13 @@ making Perl's regular expressions more readable. Here's an example: Note that anything inside a C<\Q...\E> stays unaffected by C. And note that C doesn't affect space interpretation within a single multi-character construct. For -example in C<\x{...}>, regardless of the C modifier, there can be no -spaces. Same for a L such as C<{3}> or -C<{5,}>. Similarly, C<(?:...)> can't have a space between the C<"(">, -C<"?">, and C<":">. Within any delimiters for such a -construct, allowed spaces are not affected by C, and depend on the -construct. For example, C<\x{...}> can't have spaces because hexadecimal -numbers don't have spaces in them. But, Unicode properties can have spaces, so -in C<\p{...}> there can be spaces that follow the Unicode rules, for which see +example C<(?:...)> can't have a space between the C<"(">, +C<"?">, and C<":">. Within any delimiters for such a construct, allowed +spaces are not affected by C, and depend on the construct. For +example, all constructs using curly braces as delimiters, such as +C<\x{...}> can have blanks within but adjacent to the braces, but not +elsewhere, and no non-blank space characters. An exception are Unicode +properties which follow Unicode rules, for which see L. X @@ -622,8 +633,8 @@ knowing if that character even exists in the locale, much less what code point it is. In a UTF-8 locale in v5.20 and later, the only visible difference -between locale and non-locale in regular expressions should be tainting -(see L). +between locale and non-locale in regular expressions should be tainting, +if your perl supports taint checking (see L). This modifier may be specified to be the default by C, but see L. @@ -672,24 +683,35 @@ security issues. This modifier may be specified to be the default by C, C, or -C> (or higher), +C> (or higher), but see L. X =head4 /d -This modifier means to use the "Default" native rules of the platform +B Because of the unpredictable behaviors this +modifier causes, only use it to maintain weird backward compatibilities. +Use the +L<< C|feature/"The 'unicode_strings' feature" >> +feature +in new code to avoid inadvertently enabling this modifier by default. + +What does this modifier do? It "Depends"! + +This modifier means to use platform-native matching rules except when there is cause to use Unicode rules instead, as follows: =over 4 =item 1 -the target string is encoded in UTF-8; or +the target string's L +(see below) is set; or =item 2 -the pattern is encoded in UTF-8; or +the pattern's L +(see below) is set; or =item 3 @@ -710,7 +732,7 @@ the pattern uses a Unicode break (C<\b{...}> or C<\B{...}>); or =item 7 -the pattern uses L> +the pattern uses C> =item 8 @@ -718,30 +740,31 @@ the pattern uses L|/Script Runs> =back -Another mnemonic for this modifier is "Depends", as the rules actually -used depend on various things, and as a result you can get unexpected -results. See L. The Unicode Bug has -become rather infamous, leading to yet another (without swearing) name -for this modifier, "Dodgy". - -Unless the pattern or string are encoded in UTF-8, only ASCII characters -can match positively. +Regarding the "UTF8 flag" references above: normally Perl applications +shouldn't think about that flag. It's part of Perl's internals, +so it can change whenever Perl wants. C may thus cause unpredictable +results. See L. This bug +has become rather infamous, leading to yet other (without swearing) names +for this modifier like "Dicey" and "Dodgy". Here are some examples of how that works on an ASCII platform: - $str = "\xDF"; # $str is not in UTF-8 format. - $str =~ /^\w/; # No match, as $str isn't in UTF-8 format. - $str .= "\x{0e0b}"; # Now $str is in UTF-8 format. - $str =~ /^\w/; # Match! $str is now in UTF-8 format. + $str = "\xDF"; # + utf8::downgrade($str); # $str is not UTF8-flagged. + $str =~ /^\w/; # No match, since no UTF8 flag. + + $str .= "\x{0e0b}"; # Now $str is UTF8-flagged. + $str =~ /^\w/; # Match! $str is now UTF8-flagged. chop $str; - $str =~ /^\w/; # Still a match! $str remains in UTF-8 format. + $str =~ /^\w/; # Still a match! $str retains its UTF8 flag. -This modifier is automatically selected by default when none of the -others are, so yet another name for it is "Default". +Under Perl's default configuration this modifier is automatically +selected by default when none of the others are, so yet another name +for it (unfortunately) is "Default". -Because of the unexpected behaviors associated with this modifier, you -probably should only explicitly use it to maintain weird backward -compatibilities. +Whenever you can, use the +L<< C|feature/"The 'unicode_strings' feature" >> +to cause X to be the default instead. =head4 /a (and /aa) @@ -824,7 +847,7 @@ listed below that also change the defaults. Otherwise, C> sets the default modifier to C; and C>, or -C> (or higher) set the default to +C> (or higher) set the default to C when not in the same scope as either C> or C>. (C> also @@ -865,6 +888,7 @@ X X X<*> X<+> X X<{n}> X<{n,}> X<{n,m}> ? Match 1 or 0 times {n} Match exactly n times {n,} Match at least n times + {,n} Match at most n times {n,m} Match at least n but not more than m times (If a non-escaped curly bracket occurs in a context other than one of @@ -880,7 +904,7 @@ quantifiers). The C<"*"> quantifier is equivalent to C<{0,}>, the C<"+"> quantifier to C<{1,}>, and the C<"?"> quantifier to C<{0,1}>. I and I are limited to non-negative integral values less than a preset limit defined when perl is built. -This is usually 32766 on the most common platforms. The actual limit can +This is usually 65534 on the most common platforms. The actual limit can be seen in the error message generated by code such as this: $_ **= $_ , / {$_} / for 2 .. 42; @@ -891,13 +915,14 @@ allowing the rest of the pattern to match. If you want it to match the minimum number of times possible, follow the quantifier with a C<"?">. Note that the meanings don't change, just the "greediness": X X X -X X<*?> X<+?> X X<{n}?> X<{n,}?> X<{n,m}?> +X X<*?> X<+?> X X<{n}?> X<{n,}?> X<{,n}?> X<{n,m}?> *? Match 0 or more times, not greedily +? Match 1 or more times, not greedily ?? Match 0 or 1 time, not greedily {n}? Match exactly n times, not greedily (redundant) {n,}? Match at least n times, not greedily + {,n}? Match at most n times, not greedily {n,m}? Match at least n but not more than m times, not greedily Normally when a quantified subpattern does not allow the rest of the @@ -910,6 +935,7 @@ as well. ?+ Match 0 or 1 time and give nothing back {n}+ Match exactly n times and give nothing back (redundant) {n,}+ Match at least n times and give nothing back + {,n}+ Match at most n times and give nothing back {n,m}+ Match at least n but not more than m times and give nothing back For instance, @@ -926,7 +952,7 @@ string" problem can be most efficiently performed when written as: as we know that if the final quote does not match, backtracking will not help. See the independent subexpression -LI) >>> for more details; +CI)>> for more details; possessive quantifiers are just syntactic sugar for that construct. For instance the above example could also be written as follows: @@ -1000,6 +1026,8 @@ X<\g> X<\k> X<\K> X curly brackets for safer parsing. \g{name} [5] Named backreference \k [5] Named backreference + \k'name' [5] Named backreference + \k{name} [5] Named backreference \K [6] Keep the stuff left of the \K, don't include it in $& \N [7] Any character but \n. Not affected by /s modifier \v [3] Vertical whitespace @@ -1188,6 +1216,10 @@ concatenating smaller strings. For example if you have C, and C<$a> contained C<"\g1">, and C<$b> contained C<"37">, you would get C which is probably not what you intended. +If you use braces, you may also optionally add any number of blank +(space or tab) characters within but adjacent to the braces, like +S>, or S }>>. + The C<\g> and C<\k> notations were introduced in Perl 5.10.0. Prior to that there were no named nor relative numbered capture groups. Absolute numbered groups were referred to using C<\1>, @@ -1258,6 +1290,23 @@ until the end of the enclosing block or until the next successful match, whichever comes first. (See L.) X<$+> X<$^N> X<$&> X<$`> X<$'> X<$1> X<$2> X<$3> X<$4> X<$5> X<$6> X<$7> X<$8> X<$9> +X<@{^CAPTURE}> + +The C<@{^CAPTURE}> array may be used to access ALL of the capture buffers +as an array without needing to know how many there are. For instance + + $string=~/$pattern/ and @captured = @{^CAPTURE}; + +will place a copy of each capture variable, C<$1>, C<$2> etc, into the +C<@captured> array. + +Be aware that when interpolating a subscript of the C<@{^CAPTURE}> +array you must use demarcated curly brace notation: + + print "@{^CAPTURE[0]}"; + +See L for more on +this notation. B: Failed matches in Perl do not reset the match variables, which makes it easier to write code that tests for a series of more @@ -1631,13 +1680,27 @@ matches a word that follows a tab, without including the tab in C<$&>. Prior to Perl 5.30, it worked only for fixed-width lookbehind, but starting in that release, it can handle variable lengths from 1 to 255 characters as an experimental feature. The feature is enabled -automatically if you use a variable length lookbehind assertion, but -will raise a warning at pattern compilation time, unless turned off, in -the C category. This is to warn you that the exact -behavior is subject to change should feedback from actual use in the -field indicate to do so; or even complete removal if the problems found -are not practically surmountable. You can achieve close to pre-5.30 -behavior by fatalizing warnings in this category. +automatically if you use a variable length positive lookbehind assertion. + +In Perl 5.35.10 the scope of the experimental nature of this construct +has been reduced, and experimental warnings will only be produced when +the construct contains capturing parenthesis. The warnings will be +raised at pattern compilation time, unless turned off, in the +C category. This is to warn you that the exact +contents of capturing buffers in a variable length positive lookbehind +is not well defined and is subject to change in a future release of perl. + +Currently if you use capture buffers inside of a positive variable length +lookbehind the result will be the longest and thus leftmost match possible. +This means that + + "aax" =~ /(?=x)(?<=(a|aa))/ + "aax" =~ /(?=x)(?<=(aa|a))/ + "aax" =~ /(?=x)(?<=(a{1,2}?)/ + "aax" =~ /(?=x)(?<=(a{1,2})/ + +will all result in C<$1> containing C<"aa">. It is possible in a future +release of perl we will change this behavior. There is a special form of this construct, called C<\K> (available since Perl 5.10.0), which causes the @@ -1691,16 +1754,44 @@ matches any occurrence of "foo" that does not follow "bar". Prior to Perl 5.30, it worked only for fixed-width lookbehind, but starting in that release, it can handle variable lengths from 1 to 255 characters as an experimental feature. The feature is enabled -automatically if you use a variable length lookbehind assertion, but -will raise a warning at pattern compilation time, unless turned off, in -the C category. This is to warn you that the exact -behavior is subject to change should feedback from actual use in the -field indicate to do so; or even complete removal if the problems found -are not practically surmountable. You can achieve close to pre-5.30 -behavior by fatalizing warnings in this category. +automatically if you use a variable length negative lookbehind assertion. + +In Perl 5.35.10 the scope of the experimental nature of this construct +has been reduced, and experimental warnings will only be produced when +the construct contains capturing parentheses. The warnings will be +raised at pattern compilation time, unless turned off, in the +C category. This is to warn you that the exact +contents of capturing buffers in a variable length negative lookbehind +is not well defined and is subject to change in a future release of perl. + +Currently if you use capture buffers inside of a negative variable length +lookbehind the result may not be what you expect, for instance: + + say "axfoo"=~/(?=foo)(?. @@ -1760,6 +1851,8 @@ support the use of single quotes as a delimiter for the name. =item C<< \k'I' >> +=item C<< \k{I} >> + Named backreference. Similar to numeric backreferences, except that the group is designated by name and not number. If multiple groups have the same name then it refers to the leftmost defined group in @@ -1768,7 +1861,9 @@ the current match. It is an error to refer to a name not defined by a C<< (?>) >> earlier in the pattern. -Both forms are equivalent. +All three forms are equivalent, although with C<< \k{ I } >>, +you may optionally have blanks within but adjacent to the braces, as +shown. B In order to make things easier for programmers with experience with the Python or PCRE regex engines, the pattern C<< (?P=I) >> @@ -1816,9 +1911,9 @@ stop user-supplied patterns containing code snippets from being executable. In situations where you need to enable this with C, you should -also have taint checking enabled. Better yet, use the carefully -constrained evaluation within a Safe compartment. See L for -details about both these mechanisms. +also have taint checking enabled, if your perl supports it. +Better yet, use the carefully constrained evaluation within a Safe compartment. +See L for details about both these mechanisms. From the viewpoint of parsing, lexical variable scope and closures, @@ -2319,9 +2414,6 @@ does not. See L. -Note that this feature is currently L; -using it yields a warning in the C category. - =back =head2 Backtracking @@ -2334,9 +2426,9 @@ see L. A fundamental feature of regular expression matching involves the notion called I, which is currently used (when needed) -by all regular non-possessive expression quantifiers, namely C<"*">, C<*?>, C<"+">, -C<+?>, C<{n,m}>, and C<{n,m}?>. Backtracking is often optimized -internally, but the general principle outlined here is valid. +by all regular non-possessive expression quantifiers, namely C<"*">, +C<*?>, C<"+">, C<+?>, C<{n,m}>, and C<{n,m}?>. Backtracking is often +optimized internally, but the general principle outlined here is valid. For a regular expression to match, the I regular expression must match, not just part of it. So if the beginning of a pattern containing a @@ -2524,12 +2616,12 @@ match takes a long time to finish. A powerful tool for optimizing such beasts is what is known as an "independent group", -which does not backtrack (see Lpattern) >>>). Note also that +which does not backtrack (see Cpattern)>>). Note also that zero-length lookahead/lookbehind assertions will not backtrack to make the tail match, since they are in "logical" context: only whether they match is considered relevant. For an example where side-effects of lookahead I have influenced the -following match, see Lpattern) >>>. +following match, see Cpattern)>>. =head2 Script Runs X<(*script_run:...)> X<(sr:...)> @@ -2575,7 +2667,7 @@ you can write either of these: (*atomic_script_run:pattern) (*asr:pattern) -(See LI)>>.) +(See CI)>>.) In Taiwan, Japan, and Korea, it is common for text to have a mixture of characters from their native scripts and base Chinese. Perl follows diff --git a/gnu/usr.bin/perl/pod/perlreapi.pod b/gnu/usr.bin/perl/pod/perlreapi.pod index c32171a9a97..9f59461ff17 100644 --- a/gnu/usr.bin/perl/pod/perlreapi.pod +++ b/gnu/usr.bin/perl/pod/perlreapi.pod @@ -54,6 +54,9 @@ following format: REGEXP* (*op_comp) (...); +=for apidoc_section $regexp +=for apidoc Ay||regexp_engine + When a regexp is compiled, its C field is then set to point at the appropriate structure, so that when it needs to be used Perl can find the right routines to do so. @@ -126,6 +129,12 @@ If this is in C<< rx->extflags >> it will be passed to C by C which will treat the subject string as a multi-line string. +=for apidoc Amnh||RXf_PMf_MULTILINE +=for apidoc_item RXf_PMf_SINGLELINE +=for apidoc_item RXf_PMf_FOLD +=for apidoc_item RXf_PMf_EXTENDED +=for apidoc_item RXf_PMf_KEEPCOPY + =item C - RXf_PMf_SINGLELINE =item C - RXf_PMf_FOLD @@ -137,6 +146,7 @@ tokenizer in some cases. TODO: Document those cases. + =item C

    - RXf_PMf_KEEPCOPY TODO: Document this @@ -155,6 +165,8 @@ is defined as per L, and by the internal macros C under UTF-8, and C under C. +=for apidoc Amnh||REGEX_LOCALE_CHARSET + =back Additional flags: @@ -180,6 +192,13 @@ SKIPWHITE and WHITE extflags. To do this, the Perl engine does: These flags can be set during compilation to enable optimizations in the C operator. +=for apidoc Amnh||RXf_SPLIT +=for apidoc_item RXf_SKIPWHITE +=for apidoc_item RXf_START_ONLY +=for apidoc_item RXf_WHITE +=for apidoc_item RXf_NULL +=for apidoc_item RXf_NO_INPLACE_SUBST + =over 4 =item RXf_SKIPWHITE @@ -195,6 +214,7 @@ UTF-8 string and if the C flag is set. If RXf_WHITE is set in addition to this flag, C will behave like C under the Perl engine. + =item RXf_START_ONLY Tells the split operator to split the target string on newlines @@ -349,10 +369,16 @@ forth, and have these symbolic values for the special variables: $' RX_BUFF_IDX_POSTMATCH $& RX_BUFF_IDX_FULLMATCH +=for apidoc Amnh||RX_BUFF_IDX_CARET_FULLMATCH +=for apidoc_item RX_BUFF_IDX_CARET_POSTMATCH +=for apidoc_item RX_BUFF_IDX_CARET_PREMATCH +=for apidoc_item RX_BUFF_IDX_FULLMATCH +=for apidoc_item RX_BUFF_IDX_POSTMATCH +=for apidoc_item RX_BUFF_IDX_PREMATCH + Note that in Perl 5.17.3 and earlier, the last three constants were also used for the caret variants of the variables. - The names have been chosen by analogy with L methods names with an additional B callback for efficiency. However named capture variables are currently not tied internally but @@ -481,6 +507,20 @@ C<%+> or C<%+>, if any: RXapif_FIRSTKEY RXapif_NEXTKEY +=for apidoc Amnh ||RXapif_CLEAR +=for apidoc_item RXapif_DELETE +=for apidoc_item RXapif_EXISTS +=for apidoc_item RXapif_FETCH +=for apidoc_item RXapif_FIRSTKEY +=for apidoc_item RXapif_NEXTKEY +=for apidoc_item RXapif_SCALAR +=for apidoc_item RXapif_STORE +=for apidoc_item RXapif_ALL +=for apidoc_item RXapif_ONE +=for apidoc_item RXapif_REGNAME +=for apidoc_item RXapif_REGNAMES +=for apidoc_item RXapif_REGNAMES_COUNT + If C<%+> or C<%-> is being operated on, if any. RXapif_ONE /* %+ */ @@ -494,6 +534,7 @@ C or C. RXapif_REGNAMES RXapif_REGNAMES_COUNT + Internally C<%+> and C<%-> are implemented with a real tied interface via L. The methods in that package will call back into these functions. However the usage of @@ -579,6 +620,8 @@ The REGEXP struct is defined in F. All regex engines must be able to correctly build such a structure in their L routine. +=for apidoc Ayh||REGEXP + The REGEXP structure contains all the data that Perl needs to be aware of to properly work with the regular expression. It includes data about optimisations that Perl can use to determine if the regex engine should @@ -663,9 +706,11 @@ Internally this is set to C unless a custom engine is specified in C<$^H{regcomp}>, Perl's own set of callbacks can be accessed in the struct pointed to by C. +=for apidoc Amnh||SV_SAVED_COPY + =head2 C -TODO, see L +TODO, see commit 28d8d7f41a. =head2 C @@ -738,6 +783,8 @@ C struct is defined as follows: I32 end; } regexp_paren_pair; +=for apidoc Ayh||regexp_paren_pair + If C<< ->offs[num].start >> or C<< ->offs[num].end >> is C<-1> then that capture group did not match. C<< ->offs[0].start/end >> represents C<$&> (or @@ -784,6 +831,9 @@ buffer (either the original string, or a copy in the case of C), and C is the length of the buffer. The C start and end indices index into this buffer. +=for apidoc Amh||RX_MATCH_COPIED|const REGEXP * rx +=for apidoc Amh||RX_OFFS|const REGEXP * rx_sv + In the presence of the C flag, but with the addition of the C or C flags, an engine can choose not to copy the full buffer (although it must still do so in @@ -794,6 +844,10 @@ number of bytes from the logical start of the buffer to the physical start characters in the offset. The latter is needed to support C<@-> and C<@+> which work in characters, not bytes. +=for apidoc Amnh||REXEC_COPY_STR +=for apidoc_item ||REXEC_COPY_SKIP_PRE +=for apidoc_item ||REXEC_COPY_SKIP_POST + =head2 C C Stores the string C stringifies to. The Perl engine for example @@ -821,7 +875,7 @@ purposes when embedding compiled regexes into larger patterns with C. The number of times the structure is referenced. When this falls to 0, the regexp is automatically freed -by a call to pregfree. This should be set to 1 in +by a call to C. This should be set to 1 in each engine's L routine. =head1 HISTORY diff --git a/gnu/usr.bin/perl/pod/perlrebackslash.pod b/gnu/usr.bin/perl/pod/perlrebackslash.pod index 1a812a82003..d6539ad99df 100644 --- a/gnu/usr.bin/perl/pod/perlrebackslash.pod +++ b/gnu/usr.bin/perl/pod/perlrebackslash.pod @@ -186,6 +186,10 @@ digits. Thus C<\N{U+0041}> means C, and you will rarely see it written without the two leading zeros. C<\N{U+0041}> means "A" even on EBCDIC machines (where the ordinal value of "A" is not 0x41). +Blanks may freely be inserted adjacent to but within the braces +enclosing the name or code point. So S> is perfectly +legal. + It is even possible to give your own names to characters and character sequences by using the L module. These custom names are lexically scoped, and so a given code point may have different names @@ -218,7 +222,7 @@ meaning by the regex engine, and will match "as is". =head3 Octal escapes There are two forms of octal escapes. Each is used to specify a character by -its code point specified in octal notation. +its code point specified in base 8. One form, available starting in Perl 5.14 looks like C<\o{...}>, where the dots represent one or more octal digits. It can be used for any Unicode character. @@ -260,6 +264,9 @@ Mnemonic: I<0>ctal or Ictal. $str =~ /P\053/; # No match, "\053" is "+" and taken literally. /\o{23073}/ # Black foreground, white background smiling face. /\o{4801234567}/ # Raises a warning, and yields chr(4). + /\o{ 400}/ # LATIN CAPITAL LETTER A WITH MACRON + /\o{ 400 }/ # Same. These show blanks are allowed adjacent to + # the braces =head4 Disambiguation rules between old-style octal escapes and backreferences @@ -326,6 +333,8 @@ Mnemonic: heIadecimal. # the Unicode character 2602 is an umbrella. /\x{263B}/ # Black smiling face. /\x{263b}/ # Same, the hex digits A - F are case insensitive. + /\x{ 263b }/ # Same, showing optional blanks adjacent to the + # braces =head2 Modifiers @@ -440,7 +449,9 @@ Mnemonic: Iroup. /(\w+) \g1/; # Finds a duplicated word, (e.g. "cat cat"). /(\w+) \1/; # Same thing; written old-style. - /(.)(.)\g2\g1/; # Match a four letter palindrome (e.g. "ABBA"). + /(\w+) \g{1}/; # Same, using the safer braced notation + /(\w+) \g{ 1 }/;# Same, showing optional blanks adjacent to the braces + /(.)(.)\g2\g1/; # Match a four letter palindrome (e.g. "ABBA"). =head3 Relative referencing @@ -460,6 +471,7 @@ even if the larger pattern also contains capture groups. (B) # Group 3 \g{-1} # Refers to group 3 (B) \g{-3} # Refers to group 1 (A) + \g{ -3 } # Same, showing optional blanks adjacent to the braces ) /x; # Matches "ABBA". @@ -480,11 +492,16 @@ hyphen. =head4 Examples - /(?\w+) \g{word}/ # Finds duplicated word, (e.g. "cat cat") - /(?\w+) \k{word}/ # Same. - /(?\w+) \k/ # Same. + /(?\w+) \g{word}/ # Finds duplicated word, (e.g. "cat cat") + /(?\w+) \k{word}/ # Same. + /(?\w+) \g{ word }/ # Same, showing optional blanks adjacent to + # the braces + /(?\w+) \k{ word }/ # Same. + /(?\w+) \k/ # Same. There are no braces, so no blanks + # are permitted /(?.)(?.)\g{letter2}\g{letter1}/ - # Match a four letter palindrome (e.g. "ABBA") + # Match a four letter palindrome (e.g. + # "ABBA") =head2 Assertions @@ -540,7 +557,8 @@ boundary type specified inside the braces. The boundary types are given a few paragraphs below. C<\B{...}> matches at any place between characters where C<\b{...}> of the same type doesn't match. -C<\b> when not immediately followed by a C<"{"> matches at any place +C<\b> when not immediately followed by a C<"{"> is available in all +Perls. It matches at any place between a word (something matched by C<\w>) and a non-word character (C<\W>); C<\B> when not immediately followed by a C<"{"> matches at any place between characters where C<\b> doesn't match. To get better @@ -576,7 +594,7 @@ The boundary types are: This matches a Unicode "Grapheme Cluster Boundary". (Actually Perl always uses the improved "extended" grapheme cluster"). These are -explained below under L>. In fact, C<\X> is another way to get +explained below under C>. In fact, C<\X> is another way to get the same functionality. It is equivalent to C. Use whichever is most convenient for your situation. diff --git a/gnu/usr.bin/perl/pod/perlrecharclass.pod b/gnu/usr.bin/perl/pod/perlrecharclass.pod index ee2f14d8ffd..85158cd24fe 100644 --- a/gnu/usr.bin/perl/pod/perlrecharclass.pod +++ b/gnu/usr.bin/perl/pod/perlrecharclass.pod @@ -292,7 +292,7 @@ starting in Perl v5.18, but prior to that, the sole difference was that the vertical tab (C<"\cK">) was not matched by C<\s>. The following table is a complete listing of characters matched by -C<\s>, C<\h> and C<\v> as of Unicode 6.3. +C<\s>, C<\h> and C<\v> as of Unicode 14.0. The first column gives the Unicode code point of the character (in hex format), the second column gives the (Unicode) name. The third column indicates @@ -529,7 +529,9 @@ place before the bracketed class is parsed: $, = "\t| "; $a =~ m'[$,]'; # single-quotish: matches '$' or ',' $a =~ q{[$,]}' # same - $a =~ m/[$,]/; # double-quotish: matches "\t", "|", or " " + $a =~ m/[$,]/; # double-quotish: Because we made an + # assignment to $, above, this now + # matches "\t", "|", or " " Characters that may carry a special meaning inside a character class are: C<\>, C<^>, C<->, C<[> and C<]>, and are discussed below. They can be @@ -1034,14 +1036,8 @@ such as intersection. An example is This will match all the digit characters that are in the Thai script. -This is an experimental feature available starting in 5.18, and is -subject to change as we gain field experience with it. Any attempt to -use it will raise a warning, unless disabled via - - no warnings "experimental::regex_sets"; - -Comments on this feature are welcome; send email to -C. +This feature became available in Perl 5.18, as experimental; accepted in +5.36. The rules used by L|re/'strict' mode> apply to this construct. @@ -1179,46 +1175,29 @@ closing C<])> characters. Just as in all regular expressions, the pattern can be built up by including variables that are interpolated at regex compilation time. -But its best to compile each sub-component. +But currently each such sub-component should be an already-compiled +extended bracketed character class. my $thai_or_lao = qr/(?[ \p{Thai} + \p{Lao} ])/; - my $lower = qr/(?[ \p{Lower} + \p{Digit} ])/; + ... + qr/(?[ \p{Digit} & $thai_or_lao ])/; -When these are embedded in another pattern, what they match does not -change, regardless of parenthesization or what modifiers are in effect -in that outer pattern. If you fail to compile the subcomponents, you -can get some nasty surprises. For example: +If you interpolate something else, the pattern may still compile (or it +may die), but if it compiles, it very well may not behave as you would +expect: my $thai_or_lao = '\p{Thai} + \p{Lao}'; - ... qr/(?[ \p{Digit} & $thai_or_lao ])/; compiles to qr/(?[ \p{Digit} & \p{Thai} + \p{Lao} ])/; -But this does not have the effect that someone reading the source code +This does not have the effect that someone reading the source code would likely expect, as the intersection applies just to C<\p{Thai}>, -excluding the Laotian. Its best to compile the subcomponents, but you -could also parenthesize the component pieces: - - my $thai_or_lao = '( \p{Thai} + \p{Lao} )'; - -But any modifiers will still apply to all the components: - - my $lower = '\p{Lower} + \p{Digit}'; - qr/(?[ \p{Greek} & $lower ])/i; - -matches upper case things. So just, compile the subcomponents, as -illustrated above. +excluding the Laotian. Due to the way that Perl parses things, your parentheses and brackets may need to be balanced, even including comments. If you run into any examples, please submit them to L, so that we can have a concrete example for this man page. - -We may change it so that things that remain legal uses in normal bracketed -character classes might become illegal within this experimental -construct. One proposal, for example, is to forbid adjacent uses of the -same character, as in C<(?[ [aa] ])>. The motivation for such a change -is that this usage is likely a typo, as the second "a" adds nothing. diff --git a/gnu/usr.bin/perl/pod/perlref.pod b/gnu/usr.bin/perl/pod/perlref.pod index 2c4cedfe64b..2fd321b0b48 100644 --- a/gnu/usr.bin/perl/pod/perlref.pod +++ b/gnu/usr.bin/perl/pod/perlref.pod @@ -232,6 +232,11 @@ better to use the direct method invocation approach: $menubar = $main->Frame(-relief => "raised", -borderwidth => 2) +This indirect object syntax is only available when +L|feature/The 'indirect' feature> is in effect, +and that is not the case when L|perlfunc/use VERSION> (or +higher) is requested, it is best to avoid indirect object syntax entirely. + =head3 Autovivification X @@ -493,7 +498,8 @@ You can break circular references by creating a "weak reference". A weak reference does not increment the reference count for a variable, which means that the object can go out of scope and be destroyed. You can weaken a reference with the C function exported by the -L module. +L module, or available as C directly in +Perl version 5.35.7 or later. Here's how we can make the first example safer: @@ -712,26 +718,6 @@ outer() at the time outer is invoked. This has the interesting effect of creating a function local to another function, something not normally supported in Perl. -=head1 WARNING: Don't use references as hash keys -X X - -You may not (usefully) use a reference as the key to a hash. It will be -converted into a string: - - $x{ \$a } = $a; - -If you try to dereference the key, it won't do a hard dereference, and -you won't accomplish what you're attempting. You might want to do something -more like - - $r = \@a; - $x{ $r } = $r; - -And then at least you can use the values(), which will be -real refs, instead of the keys(), which won't. - -The standard Tie::RefHash module provides a convenient workaround to this. - =head2 Postfix Dereference Syntax Beginning in v5.20.0, a postfix syntax for using references is @@ -903,7 +889,7 @@ will only be visible within that inner sub, and will not affect the outer subroutine where the variables are declared. This bizarre behavior is subject to change. -=head1 Declaring a Reference to a Variable +=head2 Declaring a Reference to a Variable Beginning in v5.26.0, the referencing operator can come after C, C, C, or C. This syntax must be enabled with C X + +You may not (usefully) use a reference as the key to a hash. It will be +converted into a string: + + $x{ \$a } = $a; + +If you try to dereference the key, it won't do a hard dereference, and +you won't accomplish what you're attempting. You might want to do something +more like + + $r = \@a; + $x{ $r } = $r; + +And then at least you can use the values(), which will be +real refs, instead of the keys(), which won't. + +The standard Tie::RefHash module provides a convenient workaround to this. + =head1 SEE ALSO Besides the obvious documents, source code can be instructive. diff --git a/gnu/usr.bin/perl/pod/perlrequick.pod b/gnu/usr.bin/perl/pod/perlrequick.pod index 5c5030c24ce..3d1ef760d88 100644 --- a/gnu/usr.bin/perl/pod/perlrequick.pod +++ b/gnu/usr.bin/perl/pod/perlrequick.pod @@ -84,7 +84,7 @@ In the last regex, the forward slash C<'/'> is also backslashed, because it is used to delimit the regex. Most of the metacharacters aren't always special, and other characters -(such as the ones delimitting the pattern) become special under various +(such as the ones delimiting the pattern) become special under various circumstances. This can be confusing and lead to unexpected results. L>|re/'strict' mode> can notify you of potential pitfalls. @@ -363,6 +363,10 @@ C = match at least C or more times =item * +C = match C times or fewer + +=item * + C = match exactly C times =back @@ -374,7 +378,7 @@ Here are some examples: /(\w+)\s+\g1/; # match doubled words of arbitrary length $year =~ /^\d{2,4}$/; # make sure year is at least 2 but not more # than 4 digits - $year =~ /^\d{4}$|^\d{2}$/; # better match; throw out 3 digit dates + $year =~ /^\d{ 4 }$|^\d{2}$/; # better match; throw out 3 digit dates These quantifiers will try to match as much of the string as possible, while still allowing the regex to match. So we have diff --git a/gnu/usr.bin/perl/pod/perlreref.pod b/gnu/usr.bin/perl/pod/perlreref.pod index e54093ccf11..4074e01b8a8 100644 --- a/gnu/usr.bin/perl/pod/perlreref.pod +++ b/gnu/usr.bin/perl/pod/perlreref.pod @@ -217,6 +217,7 @@ Quantifiers are greedy by default and match the B leftmost. {n,m} {n,m}? {n,m}+ Must occur at least n times but no more than m times {n,} {n,}? {n,}+ Must occur at least n times + {,n} {,n}? {,n}+ Must occur at most n times {n} {n}? {n}+ Must occur exactly n times * *? *+ 0 or more times (same as {0,}) + +? ++ 1 or more times (same as {1,}) @@ -226,8 +227,6 @@ The possessive forms (new in Perl 5.10) prevent backtracking: what gets matched by a pattern with a possessive quantifier will not be backtracked into, even if that causes the whole match to fail. -There is no quantifier C<{,n}>. That's currently illegal. - =head2 EXTENDED CONSTRUCTS (?#text) A comment diff --git a/gnu/usr.bin/perl/pod/perlretut.pod b/gnu/usr.bin/perl/pod/perlretut.pod index c3ca31e0977..2cb25c751c1 100644 --- a/gnu/usr.bin/perl/pod/perlretut.pod +++ b/gnu/usr.bin/perl/pod/perlretut.pod @@ -20,8 +20,10 @@ expressions will allow you to manipulate text with surprising ease. What is a regular expression? At its most basic, a regular expression is a template that is used to determine if a string has certain characteristics. The string is most often some text, such as a line, -sentence, web page, or even a whole book, but less commonly it could be -some binary data as well. +sentence, web page, or even a whole book, but it doesn't have to be. It +could be binary data, for example. Biologists often use Perl to look +for patterns in long DNA sequences. + Suppose we want to determine if the text in variable, C<$var> contains the sequence of characters S> (blanks added for legibility). We can write in Perl @@ -29,8 +31,9 @@ the sequence of characters S> $var =~ m/mushroom/ The value of this expression will be TRUE if C<$var> contains that -sequence of characters, and FALSE otherwise. The portion enclosed in -C<'E'> characters denotes the characteristic we are looking for. +sequence of characters anywhere within it, and FALSE otherwise. The +portion enclosed in C<'E'> characters denotes the characteristic we +are looking for. We use the term I for it. The process of looking to see if the pattern occurs in the string is called I, and the C<"=~"> operator along with the C tell Perl to try to match the pattern @@ -135,7 +138,7 @@ And finally, the C default delimiters for a match can be changed to arbitrary delimiters by putting an C<'m'> out front: "Hello World" =~ m!World!; # matches, delimited by '!' - "Hello World" =~ m{World}; # matches, note the matching '{}' + "Hello World" =~ m{World}; # matches, note the paired '{}' "/usr/bin/perl" =~ m"/perl"; # matches after '/usr/bin', # '/' becomes an ordinary char @@ -151,7 +154,7 @@ Let's consider how different regexps would match C<"Hello World">: "Hello World" =~ /oW/; # doesn't match "Hello World" =~ /World /; # doesn't match -The first regexp C doesn't match because regexps are +The first regexp C doesn't match because regexps are by default case-sensitive. The second regexp matches because the substring S> occurs in the string S>. The space character C<' '> is treated like any other character in a regexp and is @@ -169,8 +172,8 @@ always match at the earliest possible point in the string: "That hat is red" =~ /hat/; # matches 'hat' in 'That' With respect to character matching, there are a few more points you -need to know about. First of all, not all characters can be used "as -is" in a match. Some characters, called I, are +need to know about. First of all, not all characters can be used +"as-is" in a match. Some characters, called I, are generally reserved for use in regexp notation. The metacharacters are {}[]()^$.|*+?-#\ @@ -475,7 +478,7 @@ Because a period is a metacharacter, it needs to be escaped to match as an ordinary period. Because, for example, C<\d> and C<\w> are sets of characters, it is incorrect to think of C<[^\d\w]> as C<[\D\W]>; in fact C<[^\d\w]> is the same as C<[^\w]>, which is the same as -C<[\W]>. Think DeMorgan's laws. +C<[\W]>. Think De Morgan's laws. In actuality, the period and C<\d\s\w\D\S\W> abbreviations are themselves types of character classes, so the ones surrounded by @@ -832,8 +835,8 @@ Counting the opening parentheses to get the correct number for a backreference is error-prone as soon as there is more than one capturing group. A more convenient technique became available with Perl 5.10: relative backreferences. To refer to the immediately -preceding capture group one now may write C<\g{-1}>, the next but -last is available via C<\g{-2}>, and so on. +preceding capture group one now may write C<\g-1> or C<\g{-1}>, the next but +last is available via C<\g-2> or C<\g{-2}>, and so on. Another good reason in addition to readability and maintainability for using relative backreferences is illustrated by the following example, @@ -928,7 +931,8 @@ this code $x = "Mmm...donut, thought Homer"; $x =~ /^(Mmm|Yech)\.\.\.(donut|peas)/; # matches foreach $exp (1..$#-) { - print "Match $exp: '${$exp}' at position ($-[$exp],$+[$exp])\n"; + no strict 'refs'; + print "Match $exp: '$$exp' at position ($-[$exp],$+[$exp])\n"; } prints @@ -1047,10 +1051,17 @@ C means: match at least C or more times =item * +C means: match at most C times, or fewer + +=item * + C means: match exactly C times =back +If you like, you can add blanks (tab or space characters) within the +braces, but adjacent to them, and/or next to the comma (if any). + Here are some examples: /[a-z]+\s+\d*/; # match a lowercase word, at least one space, and @@ -1059,6 +1070,9 @@ Here are some examples: /y(es)?/i; # matches 'y', 'Y', or a case-insensitive 'yes' $year =~ /^\d{2,4}$/; # make sure year is at least 2 but not more # than 4 digits + $year =~ /^\d{ 2, 4 }$/; # Same; for those who like wide open + # spaces. + $year =~ /^\d{2, 4}$/; # Same. $year =~ /^\d{4}$|^\d{2}$/; # better match; throw out 3-digit dates $year =~ /^\d{2}(\d{2})?$/; # same thing written differently. # However, this captures the last two @@ -1222,6 +1236,11 @@ possible =item * +C means: match at most C times, but as few times as +possible + +=item * + C means: match exactly C times. Because we match exactly C times, C is equivalent to C and is just there for notational consistency. @@ -1389,8 +1408,12 @@ for C =item * C means: match at least C times, but as many times as possible, -and don't give anything up. C is short for C and C is -short for C. +and don't give anything up. C is short for C. + +=item * + +C means: match as many times as possible up to at most C +times, and don't give anything up. C is short for C. =item * @@ -1933,7 +1956,10 @@ terminated by C<\E> or thrown over by another C<\U> or C<\L>: If there is no C<\E>, case is converted until the end of the string. The regexps C<\L\u$word> or C<\u\L$word> convert the first character of C<$word> to uppercase and the rest of the characters to -lowercase. +lowercase. (Beyond ASCII characters, it gets somewhat more complicated; +C<\u> actually performs I mapping, which for most characters +is the same as uppercase, but not for all; see +L.) Control characters can be escaped with C<\c>, so that a control-Z character would be matched with C<\cZ>. The escape sequence @@ -1969,10 +1995,11 @@ C<\x>I (without curly braces and I are two hex digits) doesn't go further than 255. (Starting in Perl 5.14, if you're an octal fan, you can also use C<\o{oct}>.) - /\x{263a}/; # match a Unicode smiley face :) + /\x{263a}/; # match a Unicode smiley face :) + /\x{ 263a }/; # Same B: In Perl 5.6.0 it used to be that one needed to say C to use any Unicode features. This is no more the case: for +utf8> to use any Unicode features. This is no longer the case: for almost all Unicode processing, the explicit C pragma is not needed. (The only case where it matters is if your Perl script is in Unicode and encoded in UTF-8, then an explicit C is needed.) @@ -1988,6 +2015,7 @@ could use $x = "abc\N{MERCURY}def"; $x =~ /\N{MERCURY}/; # matches + $x =~ /\N{ MERCURY }/; # Also matches One can also use "short" names: @@ -2020,7 +2048,7 @@ The answer to requirement 2) is that a regexp (mostly) uses Unicode characters. The "mostly" is for messy backward compatibility reasons, but starting in Perl 5.14, any regexp compiled in the scope of a C (which is automatically -turned on within the scope of a C or higher) will turn that +turned on within the scope of a C or higher) will turn that "mostly" into "always". If you want to handle Unicode properly, you should ensure that C<'unicode_strings'> is turned on. Internally, this is encoded to bytes using either UTF-8 or a native 8 @@ -2049,16 +2077,16 @@ C<\p{Mark}>, meaning things like accent marks. The Unicode C<\p{Script}> and C<\p{Script_Extensions}> properties are used to categorize every Unicode character into the language script it -is written in. (C is an improved version of -C